00001
00002
00003 #include "Stiostream.h"
00004 #include <cmath>
00005 #include <vector>
00006 using namespace std;
00007
00008
00009 #include "TH1.h"
00010 #include "TH2.h"
00011
00012
00013 #include "SystemOfUnits.h"
00014 #include "PhysicalConstants.h"
00015 #include "StThreeVectorF.hh"
00016 #include "StLorentzVectorF.hh"
00017
00018
00019 #include "StMuDSTMaker/COMMON/StMuTrack.h"
00020
00021
00022 #include "StJetMuEvent.h"
00023 #include "HistMaker.h"
00024
00025 ClassImp(HistMaker)
00026
00027 HistMaker::HistMaker() : mdEtaVsdPhi(0)
00028 {
00029 cout <<"HistMaker::HistMaker()"<<endl;
00030 }
00031
00032 HistMaker::~HistMaker()
00033 {
00034 cout <<"HistMaker::~HistMaker()"<<endl;
00035 }
00036
00037 void HistMaker::fill(StJetMuEvent* e)
00038 {
00039 if (mCuts.verbose) {
00040 cout <<"HistMaker::fill(StJetMuEvent*)"<<endl;
00041 }
00042
00043 if (!e) {
00044 cout <<"StHistMaker::fill(StUpsilonEvent*). ERROR:\t"
00045 <<"null event. Return w/o action"<<endl;
00046 }
00047
00048 typedef vector<StMuTrack*> TrackVec;
00049 TrackVec vec;
00050
00051 int n = e->tracks()->GetLast()+1;
00052
00053 TClonesArray& tracks = *(e->tracks());
00054
00055 StMuTrack* trigger = 0;
00056 double maxPt=0;
00057
00058 for (int i=0; i<n; ++i) {
00059 StMuTrack* track = static_cast<StMuTrack*>(tracks[i]);
00060
00061 if (acceptTrack(track)) {
00062
00063 if ( (track->pt()>maxPt) && (isTrigger(track)) ) {
00064 maxPt = track->pt();
00065 trigger = track;
00066 }
00067
00068 vec.push_back(track);
00069 }
00070 }
00071
00072 if (!trigger) {
00073
00074 return;
00075 }
00076
00077 if (mCuts.verbose) {
00078 cout <<"\t Accepted "<<vec.size()<<" tracks of "<<n<<" possible"<<endl;
00079 }
00080
00081
00082 StThreeVectorF triggerP = trigger->momentum();
00083 for (TrackVec::iterator it=vec.begin(); it!=vec.end(); ++it) {
00084 StMuTrack* track = *it;
00085 if (track!=trigger) {
00086 StThreeVectorF p = track->momentum();
00087 double dPhi = triggerP.phi() - p.phi();
00088 double dEta = triggerP.pseudoRapidity() - p.pseudoRapidity();
00089 mdEtaVsdPhi->Fill(dPhi, dEta);
00090 }
00091 }
00092 }
00093
00094 bool HistMaker::isTrigger(StMuTrack* track)
00095 {
00096 return (track->pt() >= mCuts.triggerPtCut);
00097 }
00098
00099 bool HistMaker::acceptTrack(StMuTrack* track)
00100 {
00101 if (track->flag() >= 0 &&
00102 track->momentum().perp() > mCuts.ptCut &&
00103 fabs(track->momentum().pseudoRapidity()) < mCuts.pseudoRapidityCutOff &&
00104 track->nHitsFit() >= mCuts.minNumberOfFitPoints &&
00105 track->nHits() >= mCuts.minNumberOfPoints) {
00106 return true;
00107 }
00108 else {
00109 return false;
00110 }
00111 }