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 #include "StHighPtTagsMaker.h"
00026 #include "StEvent.h"
00027 #include "StEventTypes.h"
00028 #include "StTrack.h"
00029 #include "TMath.h"
00030 #include "PhysicalConstants.h"
00031 #include "phys_constants.h"
00032 #include "StThreeVector.hh"
00033
00034 ClassImp(StHighPtTagsMaker)
00035
00036 StHighPtTagsMaker::StHighPtTagsMaker(const char *name, const char *title)
00037 : StMaker(name, title)
00038 {
00039 mEvent = 0;
00040 mTagTable = 0;
00041 }
00042
00043 StHighPtTagsMaker::~StHighPtTagsMaker()
00044 {
00045 if(mTagTable != 0)
00046 delete mTagTable;
00047 mTagTable = 0;
00048 }
00049
00050 Int_t StHighPtTagsMaker::Init()
00051 {
00052
00053
00054
00055
00056 return StMaker::Init();
00057 }
00058
00059 Int_t StHighPtTagsMaker::Make()
00060 {
00061 mTagTable = new HighPtTag_st;
00062 mEvent = (StEvent *) GetInputDS("StEvent");
00063 if (!mEvent) return kStOK;
00064
00065 fillTag();
00066 St_HighPtTag *HighPtTag = new St_HighPtTag("HighPtTag",1);
00067 AddData(HighPtTag);
00068 HighPtTag->AddAt(mTagTable,0);
00069 delete mTagTable; mTagTable=0;
00070 return kStOK;
00071 }
00072
00073
00074 HighPtTag_st* StHighPtTagsMaker::tag()
00075 {
00076 return mTagTable;
00077 }
00078
00079 void StHighPtTagsMaker::fillTag()
00080 {
00081
00082 Float_t mHighPtTrack=0.0;
00083 Float_t mMaxRawEtBEMCTower=0.0;
00084 Float_t mMaxRawEtEEMCTower=0.0;
00085
00086
00087 if (mEvent->primaryVertex()) {
00088 StSPtrVecPrimaryTrack& primTracks = mEvent->primaryVertex()->daughters();
00089 for(StSPtrVecPrimaryTrackIterator i=primTracks.begin(); i!=primTracks.end(); ++i) {
00090 StTrack* mtrack = *i;
00091 if (!mtrack) continue;
00092 if(mtrack->flag()<=0) continue;
00093 if(mtrack->fitTraits().numberOfFitPoints() < 15) continue;
00094 StThreeVectorF mom = mtrack->geometry()->momentum();
00095 if(mom.pseudoRapidity() > 1.5) continue;
00096 if(mom.perp() > mHighPtTrack)
00097 mHighPtTrack = mom.perp();
00098 }
00099 }
00100 StEmcCollection *emcCol = mEvent->emcCollection();
00101 if (emcCol) {
00102 StEmcDetector *bemc = emcCol->detector(kBarrelEmcTowerId);
00103 StEmcDetector *eemc = emcCol->detector(kEndcapEmcTowerId);
00104 if (bemc) {
00105 Int_t bemcModules = bemc->numberOfModules();
00106 for(int i = 0; i < bemcModules; i++) {
00107 StEmcModule* mod = bemc->module(i+1);
00108 StSPtrVecEmcRawHit &hits = mod->hits();
00109 for(StSPtrVecEmcRawHitIterator it=hits.begin(); it!=hits.end(); ++it) {
00110 if(mMaxRawEtBEMCTower < (*it)->energy())
00111 mMaxRawEtBEMCTower = (*it)->energy();
00112 }
00113 }
00114 }
00115 if (eemc) {
00116 Int_t eemcModules = eemc->numberOfModules();
00117 for(int i = 0; i < eemcModules; i++) {
00118 StEmcModule* mod = eemc->module(i+1);
00119 StSPtrVecEmcRawHit &hits = mod->hits();
00120 for(StSPtrVecEmcRawHitIterator it=hits.begin(); it!=hits.end(); ++it) {
00121 if(mMaxRawEtEEMCTower < (*it)->energy())
00122 mMaxRawEtEEMCTower = (*it)->energy();
00123 }
00124 }
00125 }
00126 }
00127
00128 mTagTable->HighPtTrack = mHighPtTrack;
00129 mTagTable->MaxRawEtBEMCTower = mMaxRawEtBEMCTower;
00130 mTagTable->MaxRawEtEEMCTower = mMaxRawEtEEMCTower;
00131 }
00132
00133 void StHighPtTagsMaker::printTag(ostream& os)
00134 {
00135 os << "--- High Pt Tag Table ---" << endl;
00136 if (!mTagTable)
00137 os << "(empty)" << endl;
00138 else {
00139 os << "Pt of High Pt Track: " << mTagTable->HighPtTrack << endl;
00140 os << "Maximum Raw Et of BEMC Towers: " << mTagTable->MaxRawEtBEMCTower << endl;
00141 os << "Maximum Raw Et of EEMC Towers: " << mTagTable->MaxRawEtEEMCTower << endl;
00142 }
00143 }