00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039 #include "StHeavyTagMaker.h"
00040 #include "tables/St_HeavyTag_Table.h"
00041
00042 #include "StEvent.h"
00043 #include "StMessMgr.h"
00044 #include "StEventUtilities/StuRefMult.hh"
00045
00046
00047 float largestPairMass(StEvent*);
00048 int countTrackTowerMatches(StEvent*);
00049
00050 ClassImp(StHeavyTagMaker)
00051
00052 StHeavyTagMaker::StHeavyTagMaker(const char *name,const char* title)
00053 : StMaker(name,title),
00054 mTagTable(0),
00055 mEvent(0)
00056 {
00057
00058
00059
00060
00061 mMassThres[0] = 1.2;
00062 mMassThres[1] = 4.25;
00063 mMassThres[2] = 7.0;
00064 }
00065
00066 StHeavyTagMaker::~StHeavyTagMaker(){
00067
00068 }
00069
00070 Int_t StHeavyTagMaker::Init(){
00071
00072 return StMaker::Init();
00073 }
00074
00075 Int_t StHeavyTagMaker::Make(){
00076
00077
00078
00079
00080
00081
00082 mTagTable = new HeavyTag_st;
00083 mEvent = (StEvent*) GetInputDS("StEvent");
00084 if (!mEvent) return kStOk;
00085
00086
00087 fillTag();
00088
00089
00090 St_HeavyTag* heavyTag = new St_HeavyTag("HeavyTag",1);
00091 AddData(heavyTag);
00092 heavyTag->AddAt(mTagTable,0);
00093
00094 delete mTagTable;
00095 mTagTable=0;
00096
00097
00098 return kStOk;
00099 }
00100 void StHeavyTagMaker::fillTag() {
00101
00102
00103
00104
00105
00106 int tracksGtMass1 = 0;
00107 int tracksGtMass2 = 0;
00108 int tracksGtMass3 = 0;
00109
00110
00111
00112
00113
00114
00115
00116 const_StPrimaryTrackIterator itr;
00117 StPrimaryTrack *track;
00118 float momentum;
00119 if (mEvent->primaryVertex()){
00120 const StSPtrVecPrimaryTrack& tracks = mEvent->primaryVertex()->daughters();
00121 for (itr=tracks.begin();itr != tracks.end(); itr++){
00122 track = *itr;
00123 if (!track) continue;
00124 if (track->flag()<=0) continue;
00125 if (track->fitTraits().numberOfFitPoints(kTpcId)<15) continue;
00126 StThreeVectorF mom = track->geometry()->momentum();
00127 if (fabs(mom.pseudoRapidity())>1.5) continue;
00128 momentum = mom.mag();
00129
00130 if (momentum<mMassThres[0]) continue;
00131 ++tracksGtMass1;
00132 if (momentum<mMassThres[1]) continue;
00133 ++tracksGtMass2;
00134 if (momentum>mMassThres[2]) ++tracksGtMass3;
00135 }
00136 }
00137
00138
00139
00140 mTagTable->mNumberOfTracksAboveThres[0] = tracksGtMass1;
00141 mTagTable->mNumberOfTracksAboveThres[1] = tracksGtMass2;
00142 mTagTable->mNumberOfTracksAboveThres[2] = tracksGtMass3;
00143 mTagTable->mNumberOfTrackToTowerMatches = countTrackTowerMatches(mEvent);
00144 mTagTable->mLargestPairMass = largestPairMass(mEvent);
00145
00146 if (Debug()>0) {
00147 cout << "Heavy Flavor Tags for Run " << mEvent->runId() << " Event: " << mEvent->id() << endl;
00148 cout << "Tracks above m_c : " << mTagTable->mNumberOfTracksAboveThres[0] << endl;
00149 cout << "Tracks above m_b : " << mTagTable->mNumberOfTracksAboveThres[1] << endl;
00150 cout << "Tracks above 7GeV : " << mTagTable->mNumberOfTracksAboveThres[2] << endl;
00151 cout << "Track-Tower Matches " << mTagTable->mNumberOfTrackToTowerMatches << endl;
00152 cout << "Largest Inv. Mass : " << mTagTable->mLargestPairMass << endl;
00153
00154 }
00155 return;
00156 }
00157
00158 HeavyTag_st* StHeavyTagMaker::tag()
00159 {
00160 return mTagTable;
00161 }
00162
00163
00164
00165
00166
00167