00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00012
00013 #include "StEvtVtxSeedMaker.h"
00014 #include "StEventTypes.h"
00015 #include "StMessMgr.h"
00016
00017
00018 ClassImp(StEvtVtxSeedMaker)
00019
00020 StEvtVtxSeedMaker::StEvtVtxSeedMaker(const char *name):
00021 StVertexSeedMaker(name), event(0) {
00022 }
00023
00024 Int_t StEvtVtxSeedMaker::Make() {
00025 event = (StEvent*) GetInputDS("StEvent");
00026 if (!event) {
00027 gMessMgr->Error("StEvtVtxSeedMaker: No StEvent found!");
00028 return kStErr;
00029 }
00030
00031 Int_t result = kStOk;
00032 for (pvn=0; pvn<event->numberOfPrimaryVertices(); pvn++) {
00033 result = StVertexSeedMaker::Make();
00034 if (result != kStOk) break;
00035 }
00036
00037 return result;
00038 }
00039
00040 Bool_t StEvtVtxSeedMaker::CheckTriggers() {
00041 Bool_t notTrig = kTRUE;
00042
00043
00044 StTriggerIdCollection* trigIdColl = event->triggerIdCollection();
00045 if (trigIdColl) {
00046 const StTriggerId* tr = trigIdColl->nominal();
00047 if (tr) {
00048 vector<unsigned int> idVec = tr->triggerIds();
00049 for (unsigned int iTrg = 0;
00050 (notTrig) && (iTrg < idVec.size()) ; iTrg++) {
00051 if (ValidTrigger(idVec[iTrg])) notTrig = kFALSE;
00052 }
00053 }
00054 }
00055 return notTrig;
00056 }
00057
00058 Int_t StEvtVtxSeedMaker::GetEventData() {
00059
00060 StPrimaryVertex* primVtx = event->primaryVertex(pvn);
00061 if (!primVtx) {
00062 gMessMgr->Error("StEvtVtxSeedMaker: No primary vertex from StEvent!");
00063 return kStErr;
00064 }
00065 StRunInfo* runInfo = event->runInfo();
00066 if (runInfo) {
00067 zdc = (float) (runInfo->zdcWestRate() + runInfo->zdcEastRate());
00068 fill = (int) (runInfo->beamFillNumber(blue));
00069 run = runInfo->runId();
00070 }
00071
00072 StThreeVectorF pvert = primVtx->position();
00073 StThreeVectorF epvert = primVtx->positionError();
00074 zvertex = pvert.z();
00075 yvertex = pvert.y();
00076 xvertex = pvert.x();
00077 eyvertex = epvert.y();
00078 exvertex = epvert.x();
00079
00080 mult = 0;
00081 for (unsigned int trkn=0; trkn<primVtx->numberOfDaughters(); trkn++)
00082 if (!(primVtx->daughter(trkn)->bad())) mult++;
00083 rank = primVtx->ranking();
00084
00085
00086 itpc = 0; otpc = 0; detmap = 0;
00087 bool ibits[24];
00088 bool obits[24];
00089 unsigned int hitn,trkn;
00090 for (trkn=0; trkn<24; trkn++) { ibits[trkn] = false; obits[trkn] = false; }
00091 for (trkn=0; trkn<primVtx->numberOfDaughters(); trkn++) {
00092 StTrack* trk = primVtx->daughter(trkn);
00093 StPtrVecHit hits = trk->detectorInfo()->hits(kTpcId);
00094 for (hitn=0; hitn<hits.size(); hitn++) {
00095 StTpcHit* hit = (StTpcHit*) (hits[hitn]);
00096 if (hit->padrow() < 14) ibits[hit->sector()-1] = true;
00097 else obits[hit->sector()-1] = true;
00098 }
00099 }
00100
00101 for (trkn=0; trkn<24; trkn++) {
00102 if (ibits[trkn]) itpc += (int) (::pow(2,trkn));
00103 if (obits[trkn]) otpc += (int) (::pow(2,trkn));
00104 }
00105
00106 unsigned short nBEMC = primVtx->numMatchesWithBEMC();
00107 if (nBEMC>7) nBEMC=7;
00108
00109 detmap += nBEMC;
00110
00111 return kStOk;
00112 }
00113
00114 void StEvtVtxSeedMaker::PrintInfo() {
00115 LOG_INFO << "\n**************************************************************"
00116 << "\n* $Id: StEvtVtxSeedMaker.cxx,v 1.6 2009/06/12 17:09:17 genevb Exp $"
00117 << "\n**************************************************************" << endm;
00118
00119 if (Debug()) StVertexSeedMaker::PrintInfo();
00120 }
00121
00122
00123
00124
00125
00126
00127
00128
00129
00130
00131
00132
00133
00134
00135
00136
00137
00138
00139
00140
00141
00142