00001
00011 #include <vector>
00012 #include <algorithm>
00013 #include <utility>
00014 #include <cstdlib>
00015 #include "TError.h"
00016 #include "TString.h"
00017 #include "StEventMaker/StEventMaker.h"
00018 #include "StEventMaker/StRootEventManager.hh"
00019 #include "PhysicalConstants.h"
00020 #include "SystemOfUnits.h"
00021 #include "StEventTypes.h"
00022 #include "StMessMgr.h"
00023 #include "StMemoryInfo.hh"
00024 #include "StTimer.hh"
00025 #include "StGlobals.hh"
00026 #include "StEvtHddr.h"
00027 #include "StTpcDb/StTpcDb.h"
00028 #include "StDetectorDbMaker/StDetectorDbRichScalers.h"
00029 #include "StDetectorDbMaker/StDetectorDbBeamInfo.h"
00030 #include "StDetectorDbMaker/StDetectorDbTriggerID.h"
00031 #include "StDAQMaker/StDAQReader.h"
00032 #include "StPrompt.hh"
00033 #include "StMath.hh"
00034 #include <typeinfo>
00035 #include <map>
00036 #include "StarMagField.h"
00037 #include "TUnixTime.h"
00038 #if !defined(ST_NO_NAMESPACES)
00039 using std::vector;
00040 using std::max;
00041 using std::pair;
00042 using std::map;
00043 #endif
00044
00045 #if defined(ST_NO_TEMPLATE_DEF_ARGS)
00046 #define StVector(T) vector<T, allocator<T> >
00047 #else
00048 #define StVector(T) vector<T>
00049 #endif
00050
00051 static const char rcsid[] = "$Id: StEventMaker.cxx,v 2.93 2012/05/07 14:44:50 fisyak Exp $";
00052
00053 ClassImp(StEventMaker)
00054
00055
00056 StEventMaker::StEventMaker(const char *name, const char *title) : StMaker(name)
00057 {
00058 if(title) SetTitle(title);
00059 mEventManager = new StRootEventManager();
00060 mEventManager->setMaker(this);
00061 mCurrentEvent = 0;
00062 doLoadTpcHits = kTRUE;
00063 doLoadFtpcHits = kTRUE;
00064 doLoadSvtHits = kTRUE;
00065 doLoadSsdHits = kTRUE;
00066 doLoadTptTracks = kFALSE;
00067 doLoadEstTracks = kTRUE;
00068 doPrintEventInfo = kFALSE;
00069 doPrintMemoryInfo = kFALSE;
00070 doPrintCpuInfo = kFALSE;
00071 mCreateEmptyInstance = kFALSE;
00072 }
00073
00074 StEventMaker::~StEventMaker()
00075 {
00076 delete mEventManager;
00077 }
00078
00079 void
00080 StEventMaker::Clear(const char*)
00081 {
00082 mCurrentEvent=0;
00083 StMaker::Clear();
00084 }
00085
00086 StEventManager*
00087 StEventMaker::eventManager() {return mEventManager;};
00088 StEvent*
00089 StEventMaker::event() { return mCurrentEvent;};
00090
00091 void
00092 StEventMaker::setEventManager(StEventManager* mgr)
00093 {
00094 mEventManager = mgr;
00095 }
00096 Int_t
00097 StEventMaker::Init()
00098 {
00099 return StMaker::Init();
00100 }
00101
00102 Int_t
00103 StEventMaker::Make()
00104 {
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117 StTimer timer;
00118 if (doPrintCpuInfo) timer.start();
00119 if (doPrintMemoryInfo) StMemoryInfo::instance()->snapshot();
00120
00121
00122
00123
00124
00125
00126
00127
00128
00129 if (TString(GetName()) == "0Event") mCreateEmptyInstance = kTRUE;
00130 else mCreateEmptyInstance = kFALSE;
00131
00132
00133
00134 Int_t status = makeEvent();
00135 if (status != kStOK)
00136 gMessMgr->Warning() << "StEventMaker::Make(): error in makeEvent(), no StEvent object created." << endm;
00137
00138 mEventManager->closeEvent();
00139
00140
00141
00142
00143 if (doPrintEventInfo) printEventInfo();
00144 if (doPrintMemoryInfo) {
00145 StMemoryInfo::instance()->snapshot();
00146 StMemoryInfo::instance()->print();
00147 }
00148 if (doPrintCpuInfo) {
00149 timer.stop();
00150 LOG_DEBUG << "CPU time for StEventMaker::Make(): "
00151 << timer.elapsedTime() << " sec\n" << endm;
00152 }
00153
00154 return status;
00155 }
00156
00157 StEvent*
00158 StEventMaker::getStEventInstance()
00159 {
00160 StEvent* exist = (StEvent*) GetInputDS("StEvent");
00161 if (exist) {
00162 gMessMgr->Info() << "StEventMaker::getStEventInstance(): existing instance found, no new object created." << endm;
00163 return exist;
00164 }
00165 else {
00166 exist = new StEvent;
00167 AddData(exist);
00168 return exist;
00169 }
00170 }
00171
00172 Int_t
00173 StEventMaker::makeEvent()
00174 {
00175
00176
00177
00178
00179
00180
00181 if (! mCreateEmptyInstance && mCurrentEvent) return kStOK;
00182
00183
00184
00185 long nrows;
00186
00187
00188
00189 mCurrentEvent = getStEventInstance();
00190
00191
00192
00193
00194 dst_TrgDet_st* dstTriggerDetectors = mEventManager->returnTable_dst_TrgDet(nrows);
00195 dst_L0_Trigger_st* dstL0Trigger = mEventManager->returnTable_dst_L0_Trigger(nrows);
00196 dst_L1_Trigger_st* dstL1Trigger = mEventManager->returnTable_dst_L1_Trigger(nrows);
00197 StEventInfo *evinfo = new StEventInfo();
00198 evinfo->setType("Collision");
00199 evinfo->setRunId(GetRunNumber());
00200 evinfo->setId(GetEventNumber());
00201 evinfo->setTime(TUnixTime::Convert(GetDateTime(),1));
00202 mCurrentEvent->setInfo(evinfo);
00203
00204 Float_t xlocal[3] = {0,0,0}, bfield[3] = {0,0,0};
00205 if (StarMagField::Instance()) StarMagField::Instance()->BField(xlocal,bfield);
00206 StEventSummary *evsum = new StEventSummary();
00207 evsum->setMagneticField(bfield[2]);
00208 mCurrentEvent->setSummary(evsum);
00209
00210
00211
00212
00213
00214
00215 if (!mCurrentEvent->triggerData()) {
00216 TObjectSet *os = (TObjectSet*)GetDataSet("StTriggerData");
00217 if (os) {
00218 StTriggerData* pTrg = (StTriggerData*)os->GetObject();
00219 assert(pTrg);
00220 assert(os->IsOwner());
00221 os->DoOwner(0);
00222 mCurrentEvent->setTriggerData(pTrg);
00223 StEventInfo *theInfo = mCurrentEvent->info();
00224 if (theInfo) {
00225 theInfo->setBunchCrossingNumber(pTrg->bunchCounterLow(),0);
00226 theInfo->setBunchCrossingNumber(pTrg->bunchCounterHigh(),1);
00227 }
00228 StEvtHddr* header = dynamic_cast<StEvtHddr*>(GetInputDS("EvtHddr"));
00229 if (header) {
00230 header->SetBunchCrossingNumber(pTrg->bunchCounterLow(),pTrg->bunchCounterHigh());
00231 }
00232 }
00233 }
00234
00235
00236
00237
00238
00239
00240
00241 if (!mCurrentEvent->triggerDetectorCollection()) {
00242 if (mCurrentEvent->triggerData() && mCurrentEvent->triggerData()->year() >= 2003)
00243 mCurrentEvent->setTriggerDetectorCollection(new StTriggerDetectorCollection(*(mCurrentEvent->triggerData())));
00244 else if (dstTriggerDetectors)
00245 mCurrentEvent->setTriggerDetectorCollection(new StTriggerDetectorCollection(*dstTriggerDetectors));
00246 }
00247
00248 StL0Trigger *l0t = mCurrentEvent->l0Trigger();
00249 if (!l0t) mCurrentEvent->setL0Trigger((l0t = new StL0Trigger()));
00250 if (mCurrentEvent->triggerData() && mCurrentEvent->triggerData()->year() >= 2003){
00251 l0t->set(mCurrentEvent->triggerData());
00252 }
00253 else {
00254 l0t->set(dstL0Trigger );
00255 l0t->set(dstTriggerDetectors);
00256 }
00257
00258 if (dstL0Trigger && dstL1Trigger && !mCurrentEvent->l1Trigger())
00259 mCurrentEvent->setL1Trigger(new StL1Trigger(*dstL0Trigger, *dstL1Trigger));
00260
00261
00262
00263 Int_t idx;
00264 StTriggerIdCollection* triggerIdColl = mCurrentEvent->triggerIdCollection();
00265 if (!triggerIdColl) {
00266 mCurrentEvent->setTriggerIdCollection((triggerIdColl =
00267 new StTriggerIdCollection()));
00268 }
00269 StTriggerId* trigId[3];
00270 triggerIdColl->setL1((trigId[0] = new StTriggerId()));
00271 triggerIdColl->setL2((trigId[1] = new StTriggerId()));
00272 triggerIdColl->setL3((trigId[2] = new StTriggerId()));
00273
00274 St_DataSet *daqReaderSet=GetDataSet("StDAQReader");
00275 if (daqReaderSet) {
00276
00277 StTrigSummary* trigSummary =
00278 ((StDAQReader*) (daqReaderSet->GetObject()))->getTrigSummary();
00279 if (!trigSummary) gMessMgr->Warning("StEventMaker: No StTrigSummary found");
00280
00281 StDetectorDbTriggerID* dbTriggerId = StDetectorDbTriggerID::instance();
00282 if (!dbTriggerId) gMessMgr->Warning("StEventMaker: No StDetectorDbTriggerID found");
00283
00284 if (trigSummary && dbTriggerId) {
00285
00286
00287
00288 if (mCurrentEvent->runId()> 12000000) {
00289
00290 uint64_t mask = 0;
00291 mask = trigSummary->L1summary[1];
00292 mask <<= 32;
00293 mask += trigSummary->L1summary[0];
00294 trigId[0]->setMask(mask);
00295
00296 mask = trigSummary->L2summary[1];
00297 mask <<= 32;
00298 mask += trigSummary->L2summary[0];
00299 trigId[1]->setMask(mask);
00300
00301 mask = trigSummary->L3summary[1];
00302 mask <<= 32;
00303 mask += trigSummary->L3summary[0];
00304 trigId[2]->setMask(mask);
00305
00306
00307 }
00308 else {
00309
00310 trigId[0]->setMask(trigSummary->L1summary[0]);
00311 trigId[1]->setMask(trigSummary->L2summary[0]);
00312 trigId[2]->setMask(trigSummary->L3summary[0]);
00313 }
00314
00315
00316
00317 for(unsigned int trglevel=0 ; trglevel < 3 ; trglevel++){
00318 StTriggerId* whichTrig = trigId[trglevel];
00319
00320
00321 for (unsigned int iTrg = 0; iTrg < dbTriggerId->getIDNumRows() ; iTrg++){
00322
00323 if ( whichTrig->mask() & ((uint64_t)1 << (dbTriggerId->getDaqTrgId(iTrg)) ) ) {
00324
00325
00326
00327 UInt_t offlineId = dbTriggerId->getOfflineTrgId(iTrg);
00328 if (mCurrentEvent->triggerData()){
00329 if (mCurrentEvent->triggerData()->errorFlag()>0) {
00330 offlineId += 9000;
00331 printf("StEventMaker: StTriggerData found partial corruption, thus adding 9000 to offline trigger id =%d\n",offlineId);
00332 }
00333 }
00334
00335 whichTrig->addTrigger(
00336
00337 offlineId,
00338 dbTriggerId->getTrgVersion(iTrg),
00339 dbTriggerId->getTrgNameVersion(iTrg),
00340 dbTriggerId->getThreashVersion(iTrg),
00341 dbTriggerId->getPsVersion(iTrg)
00342 );
00343 }
00344 }
00345
00346
00347 for (unsigned int iTrg = 0; iTrg < dbTriggerId->getAdditionalTriggerIDNumRows() ; iTrg++){
00348
00349
00350 int checkRun = dbTriggerId->getAdditionalTriggerIDRunNumber(iTrg);
00351 int checkEvent = dbTriggerId->getAdditionalTriggerIDEventNumber(iTrg);
00352
00353 if (mCurrentEvent->runId() == checkRun &&
00354 mCurrentEvent->id() == checkEvent )
00355 {
00356 whichTrig->addTrigger(
00357 dbTriggerId->getAdditionalTriggerIDOfflineTrgId(iTrg),
00358 dbTriggerId->getAdditionalTriggerIDTrgVersion(iTrg),
00359 dbTriggerId->getAdditionalTriggerIDTrgNameVersion(iTrg),
00360 dbTriggerId->getAdditionalTriggerIDThreashVersion(iTrg),
00361 dbTriggerId->getAdditionalTriggerIDPsVersion(iTrg)
00362 );
00363 }
00364 }
00365 }
00366
00367
00368 if ( (idx=dbTriggerId->getDefaultTriggerLevel() ) != kDbTriggerBadID ){
00369 triggerIdColl->setNominal(trigId[idx-1]);
00370 }
00371
00372
00373
00374 if (mCurrentEvent->triggerData() && mCurrentEvent->runId()>7000000 && mCurrentEvent->runId()<8000000) {
00375 gMessMgr->Info("StEventMaker::Run 6, expanding L3 trigger id");
00376
00377
00378 map<string,StL2TriggerResultType> mapDbToStL2TriggerResultType;
00379
00380 mapDbToStL2TriggerResultType["l2Trg2006BEMCGammaPi"] = l2Trg2006BEMCGammaPi;
00381 mapDbToStL2TriggerResultType["l2Trg2006BEMCGammaPiRandom"] = l2Trg2006BEMCGammaPiRandom;
00382 mapDbToStL2TriggerResultType["l2Trg2006EEMCGammaPi"] = l2Trg2006EEMCGammaPi;
00383 mapDbToStL2TriggerResultType["l2Trg2006EEMCGammaPiRandom"] = l2Trg2006EEMCGammaPiRandom;
00384 mapDbToStL2TriggerResultType["l2Trg2006MonoJet"] = l2Trg2006MonoJet;
00385 mapDbToStL2TriggerResultType["l2Trg2006DiJet"] = l2Trg2006DiJet;
00386 mapDbToStL2TriggerResultType["l2Trg2006RandomJet"] = l2Trg2006RandomJet;
00387
00388
00389
00390 StTriggerId *whichTrig = new StTriggerId(*triggerIdColl->l3());
00391
00392 triggerIdColl->setL3Expanded(whichTrig);
00393
00394 triggerIdColl->setNominal(whichTrig);
00395
00396 for (unsigned int irow=0; irow<dbTriggerId->getTrigL3ExpandedNumRows(); ++irow) {
00397 unsigned int oldtid = dbTriggerId->getTrigL3ExpandedL3TrgId(irow);
00398 unsigned int newtid = dbTriggerId->getTrigL3ExpandedL3ExpandedTrgId(irow);
00399
00400
00401 string testString = string(dbTriggerId->getTrigL3ExpandedL2TriggerResultType(irow));
00402
00403
00404 map<string,StL2TriggerResultType>::const_iterator p =
00405 mapDbToStL2TriggerResultType.find(
00406 testString);
00407
00408 if (p != mapDbToStL2TriggerResultType.end()) {
00409 StL2TriggerResultType l2Test = (*p).second;
00410 if (whichTrig->isTrigger(oldtid) &&
00411 mCurrentEvent->triggerData()->isL2Triggered(l2Test)) {
00412
00413 whichTrig->addTrigger(newtid,
00414 whichTrig->version(oldtid),
00415 whichTrig->nameVersion(oldtid),
00416 whichTrig->thresholdVersion(oldtid),
00417 whichTrig->prescaleVersion(oldtid)
00418 );
00419 }
00420 }
00421 }
00422 }
00423
00424 if (triggerIdColl->nominal()) triggerIdColl->setNominal(new StTriggerId(*(triggerIdColl->nominal())));
00425 if (StTpcDb::instance()) {
00426 Int_t TriggerId = -1;
00427 if (triggerIdColl) {
00428 static Int_t goodIds[5] = {9200,9201,310811,310812,310813};
00429 const StTriggerId *nominal = triggerIdColl->nominal();
00430 TriggerId = 0;
00431 if (nominal) {
00432 for (Int_t i = 0; i < 5; i++) {
00433 if (nominal->isTrigger(goodIds[i])) {TriggerId = goodIds[i]; break;}
00434 }
00435 }
00436 }
00437 StTpcDb::instance()->SetTriggerId(TriggerId);
00438 }
00439 }
00440 }
00441
00442
00443 else {
00444 gMessMgr->Warning("StEventMaker: No StDAQReader found");
00445 }
00446
00447
00448
00449
00450
00451
00452 StEventInfo *theInfo = mCurrentEvent->info();
00453 if (theInfo && dstTriggerDetectors) {
00454 theInfo->setBunchCrossingNumber(dstTriggerDetectors->bunchXing_lo,0);
00455 theInfo->setBunchCrossingNumber(dstTriggerDetectors->bunchXing_hi,1);
00456 }
00457
00458
00459
00460 StEvtHddr* header = dynamic_cast<StEvtHddr*>(GetInputDS("EvtHddr"));
00461 if (header) {
00462 mCurrentEvent->setTriggerMask(header->GetTriggerMask());
00463 if (mCurrentEvent->info())
00464 mCurrentEvent->info()->setEventSize(header->GetEventSize());
00465 }
00466
00467
00468
00469
00470 StRunInfo* mCurrentRunInfo = new StRunInfo;
00471 StDetectorDbBeamInfo *dbBeamInfo = StDetectorDbBeamInfo::instance();
00472 StDetectorDbRichScalers* richScalers = StDetectorDbRichScalers::instance();
00473
00474 mCurrentRunInfo->setRunId(mCurrentEvent->runId());
00475 mCurrentRunInfo->setProductionTime(time(0));
00476 mCurrentRunInfo->setProductionVersion(getenv("STAR_VERSION"));
00477 if (mCurrentEvent->summary())
00478 mCurrentRunInfo->setMagneticField(mCurrentEvent->summary()->magneticField());
00479 if (gStTpcDb) {
00480 mCurrentRunInfo->setTpcDriftVelocity(east, gStTpcDb->DriftVelocity());
00481 mCurrentRunInfo->setTpcDriftVelocity(west, gStTpcDb->DriftVelocity());
00482 }
00483 if (dbBeamInfo) {
00484 mCurrentRunInfo->setCenterOfMassEnergy(dbBeamInfo->getBlueEnergy() + dbBeamInfo->getYellowEnergy());
00485 mCurrentRunInfo->setBeamMassNumber(blue, dbBeamInfo->getBlueMassNumber());
00486 mCurrentRunInfo->setBeamMassNumber(yellow, dbBeamInfo->getYellowMassNumber());
00487 mCurrentRunInfo->setBeamEnergy(blue, dbBeamInfo->getBlueEnergy());
00488 mCurrentRunInfo->setBeamEnergy(yellow, dbBeamInfo->getYellowEnergy());
00489 mCurrentRunInfo->setInitialBeamIntensity(blue, dbBeamInfo->getBlueIntensity());
00490 mCurrentRunInfo->setInitialBeamIntensity(yellow, dbBeamInfo->getYellowIntensity());
00491 mCurrentRunInfo->setBeamLifeTime(blue, dbBeamInfo->getBlueLifeTime());
00492 mCurrentRunInfo->setBeamLifeTime(yellow, dbBeamInfo->getYellowLifeTime());
00493 mCurrentRunInfo->setBeamFillNumber(blue, dbBeamInfo->getBlueFillNumber());
00494 mCurrentRunInfo->setBeamFillNumber(yellow, dbBeamInfo->getYellowFillNumber());
00495 }
00496 if (richScalers) {
00497 mCurrentRunInfo->setZdcWestRate(richScalers->getZDCWest());
00498 mCurrentRunInfo->setZdcEastRate(richScalers->getZDCEast());
00499 mCurrentRunInfo->setZdcCoincidenceRate(richScalers->getZDCX());
00500 mCurrentRunInfo->setBackgroundRate(richScalers->getMult());
00501 mCurrentRunInfo->setL0RateToRich(richScalers->getL0());
00502 mCurrentRunInfo->setBbcCoincidenceRate(richScalers->getBBCX());
00503 mCurrentRunInfo->setBbcEastRate(richScalers->getBBCEast());
00504 mCurrentRunInfo->setBbcWestRate(richScalers->getBBCWest());
00505 mCurrentRunInfo->setBbcBlueBackgroundRate(richScalers->getBBCBlueBkg());
00506 mCurrentRunInfo->setBbcYellowBackgroundRate(richScalers->getBBCYellowBkg());
00507 }
00508
00509 if (mCurrentRunInfo)
00510 mCurrentEvent->setRunInfo(mCurrentRunInfo);
00511
00512
00513
00514
00515 if (richScalers)
00516 mCurrentEvent->addDetectorState(new StDetectorState(kRichId, richScalers->getRichHVStatus()));
00517
00518 return kStOK;
00519 }
00520
00521 void
00522 StEventMaker::printEventInfo()
00523 {
00524 LOG_INFO << "*********************************************************" << endm;
00525 LOG_INFO << "* StEvent Information *" << endm;
00526 LOG_INFO << "*********************************************************" << endm;
00527
00528 LOG_INFO << "---------------------------------------------------------" << endm;
00529 LOG_INFO << "StEvent at " << (void*) mCurrentEvent << endm;
00530 LOG_INFO << "---------------------------------------------------------" << endm;
00531 if (mCurrentEvent)
00532 mCurrentEvent->Dump();
00533 else
00534 return;
00535
00536 LOG_INFO << "---------------------------------------------------------" << endm;
00537 LOG_INFO << "StRunInfo at " << (void*) mCurrentEvent->runInfo() << endm;
00538 LOG_INFO << "---------------------------------------------------------" << endm;
00539 if (mCurrentEvent->runInfo())
00540 mCurrentEvent->runInfo()->Dump();
00541
00542 LOG_INFO << "---------------------------------------------------------" << endm;
00543 LOG_INFO << "StEventInfo at " << (void*) mCurrentEvent->info() << endm;
00544 LOG_INFO << "---------------------------------------------------------" << endm;
00545 if (mCurrentEvent->info())
00546 mCurrentEvent->info()->Dump();
00547
00548 LOG_INFO << "---------------------------------------------------------" << endm;
00549 LOG_INFO << "StEventSummary at " << (void*) (mCurrentEvent->summary()) << endm;
00550 LOG_INFO << "---------------------------------------------------------" << endm;
00551 if (mCurrentEvent->summary()) mCurrentEvent->summary()->Dump();
00552 if (mCurrentEvent->summary()) {
00553 unsigned int k;
00554 StEventSummary *evtsum = mCurrentEvent->summary();
00555 LOG_INFO << "--> StEventSummary quasi-histograms" << endm;
00556 LOG_INFO << "--> StEventSummary quasi-histogram -> # of tracks vs. eta" << endm;
00557 for (k=0; k<evtsum->numberOfBins(); k++) {
00558 LOG_INFO << k << "\t[" << evtsum->lowerEdgeEtaBin(k)
00559 << " - " << evtsum->upperEdgeEtaBin(k)
00560 << "] : \t" << evtsum->tracksInEtaBin(k) << endm;
00561 }
00562 LOG_INFO << "--> StEventSummary quasi-histogram -> # of tracks vs. phi" << endm;
00563 for (k=0; k<evtsum->numberOfBins(); k++) {
00564 LOG_INFO << k << "\t[" << evtsum->lowerEdgePhiBin(k)
00565 << " - " << evtsum->upperEdgePhiBin(k)
00566 << "] : \t" << evtsum->tracksInPhiBin(k) << endm;
00567 }
00568 LOG_INFO << "--> StEventSummary quasi-histogram -> # of tracks vs. pt" << endm;
00569 for (k=0; k<evtsum->numberOfBins(); k++) {
00570 LOG_INFO << k << "\t[" << evtsum->lowerEdgePtBin(k)
00571 << " - " << evtsum->upperEdgePtBin(k)
00572 << "] : \t" << evtsum->tracksInPtBin(k) << endm;
00573 }
00574 LOG_INFO << "--> StEventSummary quasi-histogram -> energy vs. eta" << endm;
00575 for (k=0; k<evtsum->numberOfBins(); k++) {
00576 LOG_INFO << k << "\t[" << evtsum->lowerEdgeEtaBin(k)
00577 << " - " << evtsum->upperEdgeEtaBin(k)
00578 << "] : \t" << evtsum->energyInEtaBin(k) << endm;
00579 }
00580 LOG_INFO << "--> StEventSummary quasi-histogram -> energy vs. phi" << endm;
00581 for (k=0; k<evtsum->numberOfBins(); k++) {
00582 LOG_INFO << k << "\t[" << evtsum->lowerEdgePhiBin(k)
00583 << " - " << evtsum->upperEdgePhiBin(k)
00584 << "] : \t" << evtsum->energyInPhiBin(k) << endm;
00585 }
00586 }
00587 LOG_INFO << "---------------------------------------------------------" << endm;
00588 LOG_INFO << "StL0Trigger at "
00589 << (void*) (mCurrentEvent->l0Trigger()) << endm;
00590 LOG_INFO << "---------------------------------------------------------" << endm;
00591 if (mCurrentEvent->l0Trigger()) mCurrentEvent->l0Trigger()->Dump();
00592
00593 LOG_INFO << "---------------------------------------------------------" << endm;
00594 LOG_INFO << "StTriggerDetectorCollection at "
00595 << (void*) (mCurrentEvent->triggerDetectorCollection()) << endm;
00596 LOG_INFO << "---------------------------------------------------------" << endm;
00597 if (mCurrentEvent->triggerDetectorCollection())
00598 mCurrentEvent->triggerDetectorCollection()->Dump();
00599
00600 if (mCurrentEvent->triggerDetectorCollection()) {
00601 LOG_INFO << "---------------------------------------------------------" << endm;
00602 LOG_INFO << "StCtbTriggerDetector" << endm;
00603 LOG_INFO << "---------------------------------------------------------" << endm;
00604 mCurrentEvent->triggerDetectorCollection()->ctb().Dump();
00605
00606 LOG_INFO << "---------------------------------------------------------" << endm;
00607 LOG_INFO << "StMwcTriggerDetector" << endm;
00608 LOG_INFO << "---------------------------------------------------------" << endm;
00609 mCurrentEvent->triggerDetectorCollection()->mwc().Dump();
00610
00611 LOG_INFO << "---------------------------------------------------------" << endm;
00612 LOG_INFO << "StVpdTriggerDetector" << endm;
00613 LOG_INFO << "---------------------------------------------------------" << endm;
00614 mCurrentEvent->triggerDetectorCollection()->vpd().Dump();
00615
00616 LOG_INFO << "---------------------------------------------------------" << endm;
00617 LOG_INFO << "StZdcTriggerDetector" << endm;
00618 LOG_INFO << "---------------------------------------------------------" << endm;
00619 mCurrentEvent->triggerDetectorCollection()->zdc().Dump();
00620 }
00621
00622 LOG_INFO << "---------------------------------------------------------" << endm;
00623 LOG_INFO << "StSPtrVecTrackDetectorInfo" << endm;
00624 LOG_INFO << "Dumping first element in collection only (if available). " << endm;
00625 LOG_INFO << "---------------------------------------------------------" << endm;
00626 LOG_INFO << "collection size = "
00627 << mCurrentEvent->trackDetectorInfo().size() << endm;
00628
00629 if (mCurrentEvent->trackDetectorInfo().size()) {
00630 LOG_INFO << "---------------------------------------------------------" << endm;
00631 LOG_INFO << "StTrackDetectorInfo at "
00632 << (void*) mCurrentEvent->trackDetectorInfo()[0] << endm;
00633 LOG_INFO << "---------------------------------------------------------" << endm;
00634 mCurrentEvent->trackDetectorInfo()[0]->Dump();
00635 }
00636
00637 LOG_INFO << "---------------------------------------------------------" << endm;
00638 LOG_INFO << "StSPtrVecTrackNode" << endm;
00639 LOG_INFO << "Dumping first element in collection only (if available). " << endm;
00640 LOG_INFO << "All tracks in the first node are printed separately " << endm;
00641 LOG_INFO << "after the node info. " << endm;
00642 LOG_INFO << "---------------------------------------------------------" << endm;
00643 LOG_INFO << "collection size = "
00644 << mCurrentEvent->trackNodes().size() << endm;
00645
00646 unsigned int i;
00647 if (mCurrentEvent->trackNodes().size()) {
00648 LOG_INFO << "# tracks in first element = "
00649 << mCurrentEvent->trackNodes()[0]->entries() << endm;
00650 LOG_INFO << "---------------------------------------------------------" << endm;
00651 LOG_INFO << "StTrackNode at "
00652 << (void*) mCurrentEvent->trackNodes()[0] << endm;
00653 LOG_INFO << "---------------------------------------------------------" << endm;
00654 mCurrentEvent->trackNodes()[0]->Dump();
00655 for (i=0; i<mCurrentEvent->trackNodes()[0]->entries(); i++)
00656 printTrackInfo(mCurrentEvent->trackNodes()[0]->track(i));
00657 }
00658
00659 LOG_INFO << "---------------------------------------------------------" << endm;
00660 LOG_INFO << "StSPtrVecPrimaryVertex" << endm;
00661 LOG_INFO << "Dumping first element in collection only (if available). " << endm;
00662 LOG_INFO << "The first daughter track (primary track) in the first " << endm;
00663 LOG_INFO << "vertex is printed separately after the vertex info. " << endm;
00664 LOG_INFO << "---------------------------------------------------------" << endm;
00665 LOG_INFO << "collection size = "
00666 << mCurrentEvent->numberOfPrimaryVertices() << endm;
00667
00668 if (mCurrentEvent->numberOfPrimaryVertices()) {
00669 LOG_INFO << "# primary tracks in first element = "
00670 << mCurrentEvent->primaryVertex()->numberOfDaughters() << endm;
00671 LOG_INFO << "---------------------------------------------------------" << endm;
00672 LOG_INFO << "StPrimaryVertex at "
00673 << (void*) mCurrentEvent->primaryVertex() << endm;
00674 LOG_INFO << "---------------------------------------------------------" << endm;
00675 mCurrentEvent->primaryVertex()->Dump();
00676 if (mCurrentEvent->primaryVertex()->numberOfDaughters())
00677 printTrackInfo(mCurrentEvent->primaryVertex()->daughter(0));
00678 }
00679
00680 LOG_INFO << "---------------------------------------------------------" << endm;
00681 LOG_INFO << "StSPtrVecCalibrationVertex" << endm;
00682 LOG_INFO << "Dumping first element in collection only (if available). " << endm;
00683 LOG_INFO << "---------------------------------------------------------" << endm;
00684 LOG_INFO << "collection size = "
00685 << mCurrentEvent->numberOfCalibrationVertices() << endm;
00686
00687 if (mCurrentEvent->numberOfCalibrationVertices())
00688 mCurrentEvent->calibrationVertex(0)->Dump();
00689
00690 LOG_INFO << "---------------------------------------------------------" << endm;
00691 LOG_INFO << "StSPtrVecV0Vertex" << endm;
00692 LOG_INFO << "Dumping first element in collection only (if available). " << endm;
00693 LOG_INFO << "---------------------------------------------------------" << endm;
00694 LOG_INFO << "collection size = "
00695 << mCurrentEvent->v0Vertices().size() << endm;
00696
00697 if (mCurrentEvent->v0Vertices().size()) {
00698 LOG_INFO << "---------------------------------------------------------" << endm;
00699 LOG_INFO << "StV0Vertex at "
00700 << (void*) mCurrentEvent->v0Vertices()[0] << endm;
00701 LOG_INFO << "---------------------------------------------------------" << endm;
00702 mCurrentEvent->v0Vertices()[0]->Dump();
00703 }
00704
00705 LOG_INFO << "---------------------------------------------------------" << endm;
00706 LOG_INFO << "StSPtrVecXiVertex" << endm;
00707 LOG_INFO << "Dumping first element in collection only (if available). " << endm;
00708 LOG_INFO << "---------------------------------------------------------" << endm;
00709 LOG_INFO << "collection size = "
00710 << mCurrentEvent->xiVertices().size() << endm;
00711
00712 if (mCurrentEvent->xiVertices().size()) {
00713 LOG_INFO << "---------------------------------------------------------" << endm;
00714 LOG_INFO << "StXiVertex at "
00715 << (void*) mCurrentEvent->xiVertices()[0] << endm;
00716 LOG_INFO << "---------------------------------------------------------" << endm;
00717 mCurrentEvent->xiVertices()[0]->Dump();
00718 }
00719
00720 LOG_INFO << "---------------------------------------------------------" << endm;
00721 LOG_INFO << "StSPtrVecKinkVertex" << endm;
00722 LOG_INFO << "Dumping first element in collection only (if available). " << endm;
00723 LOG_INFO << "---------------------------------------------------------" << endm;
00724 LOG_INFO << "collection size = "
00725 << mCurrentEvent->kinkVertices().size() << endm;
00726
00727 if (mCurrentEvent->kinkVertices().size()) {
00728 LOG_INFO << "---------------------------------------------------------" << endm;
00729 LOG_INFO << "StKinkVertex at "
00730 << (void*) mCurrentEvent->kinkVertices()[0] << endm;
00731 LOG_INFO << "---------------------------------------------------------" << endm;
00732 mCurrentEvent->kinkVertices()[0]->Dump();
00733 }
00734
00735 unsigned int j=0, k=0, nhits=0;
00736 Bool_t gotOneHit;
00737 StTpcHitCollection *tpcColl = mCurrentEvent->tpcHitCollection();
00738 LOG_INFO << "---------------------------------------------------------" << endm;
00739 LOG_INFO << "StTpcHitCollection at " << (void*) tpcColl << endm;
00740 LOG_INFO << "Dumping collection size and one hit only." << endm;
00741 LOG_INFO << "---------------------------------------------------------" << endm;
00742 if (tpcColl) {
00743 nhits = tpcColl->numberOfHits();
00744 LOG_INFO << "# of hits in collection = " << nhits << endm;
00745 gotOneHit = kFALSE;
00746 for (k=0; !gotOneHit && k<tpcColl->numberOfSectors(); k++)
00747 for (j=0; !gotOneHit && j<tpcColl->sector(k)->numberOfPadrows(); j++)
00748 if (tpcColl->sector(k)->padrow(j)->hits().size()) {
00749 tpcColl->sector(k)->padrow(j)->hits()[0]->Dump();
00750 gotOneHit = kTRUE;
00751 }
00752 }
00753
00754 StFtpcHitCollection *ftpcColl = mCurrentEvent->ftpcHitCollection();
00755 LOG_INFO << "---------------------------------------------------------" << endm;
00756 LOG_INFO << "StFtpcHitCollection at " << (void*) ftpcColl << endm;
00757 LOG_INFO << "Dumping collection size and one hit only." << endm;
00758 LOG_INFO << "---------------------------------------------------------" << endm;
00759 if (ftpcColl) {
00760 nhits = ftpcColl->numberOfHits();
00761 LOG_INFO << "# of hits in collection = " << nhits << endm;
00762 gotOneHit = kFALSE;
00763 for (k=0; !gotOneHit && k<ftpcColl->numberOfPlanes(); k++)
00764 for (j=0; !gotOneHit && j<ftpcColl->plane(k)->numberOfSectors(); j++)
00765 if (ftpcColl->plane(k)->sector(j)->hits().size()) {
00766 ftpcColl->plane(k)->sector(j)->hits()[0]->Dump();
00767 gotOneHit = kTRUE;
00768 }
00769 }
00770
00771 StSvtHitCollection *svtColl = mCurrentEvent->svtHitCollection();
00772 LOG_INFO << "---------------------------------------------------------" << endm;
00773 LOG_INFO << "StSvtHitCollection at " << (void*) svtColl << endm;
00774 LOG_INFO << "Dumping collection size and one hit only." << endm;
00775 LOG_INFO << "---------------------------------------------------------" << endm;
00776 if (svtColl) {
00777 nhits = svtColl->numberOfHits();
00778 LOG_INFO << "# of hits in collection = " << nhits << endm;
00779 gotOneHit = kFALSE;
00780 for (k=0; !gotOneHit && k<svtColl->numberOfBarrels(); k++)
00781 for (j=0; !gotOneHit && j<svtColl->barrel(k)->numberOfLadders(); j++)
00782 for (i=0; !gotOneHit && i<svtColl->barrel(k)->ladder(j)->numberOfWafers(); i++)
00783 if (svtColl->barrel(k)->ladder(j)->wafer(i)->hits().size()) {
00784 svtColl->barrel(k)->ladder(j)->wafer(i)->hits()[0]->Dump();
00785 gotOneHit = kTRUE;
00786 }
00787 }
00788
00789 StSsdHitCollection *ssdColl = mCurrentEvent->ssdHitCollection();
00790 LOG_INFO << "---------------------------------------------------------" << endm;
00791 LOG_INFO << "StSsdHitCollection at " << (void*) ssdColl << endm;
00792 LOG_INFO << "Dumping collection size and one hit only." << endm;
00793 LOG_INFO << "---------------------------------------------------------" << endm;
00794 if (ssdColl) {
00795 nhits = ssdColl->numberOfHits();
00796 LOG_INFO << "# of hits in collection = " << nhits << endm;
00797 gotOneHit = kFALSE;
00798 for (k=0; !gotOneHit && k<ssdColl->numberOfLadders(); k++)
00799 for (i=0; !gotOneHit && i<ssdColl->ladder(j)->numberOfWafers(); i++)
00800 if (ssdColl->ladder(j)->wafer(i)->hits().size()) {
00801 ssdColl->ladder(j)->wafer(i)->hits()[0]->Dump();
00802 gotOneHit = kTRUE;
00803 }
00804 }
00805
00806 LOG_INFO << endm;
00807
00808
00809
00810
00811
00812 LOG_INFO << "*********************************************************" << endm;
00813 LOG_INFO << "* Table Information *" << endm;
00814 LOG_INFO << "*********************************************************" << endm;
00815 LOG_INFO << endm;
00816 }
00817
00818 void
00819 StEventMaker::printTrackInfo(StTrack* track)
00820 {
00821 LOG_INFO << "---------------------------------------------------------" << endm;
00822 LOG_INFO << "StTrack (" << (track ? track->GetName() : "n/a")
00823 << ") at " << (void*) track << endm;
00824 LOG_INFO << "---------------------------------------------------------" << endm;
00825 if (track) {
00826 track->Dump();
00827 LOG_INFO << "covariantMatrix():" << track->fitTraits().covariantMatrix() << endm;
00828
00829 LOG_INFO << "---> StTrack -> StGeometry ("<< track->geometry()->GetName()
00830 << ") at " << (void*) (track->geometry()) << endm;
00831 if (track->geometry()) track->geometry()->Dump();
00832
00833 LOG_INFO << "---> StTrack -> StGeometry (outer) ("<< track->outerGeometry()->GetName()
00834 << ") at " << (void*) (track->outerGeometry()) << endm;
00835 if (track->outerGeometry()) track->outerGeometry()->Dump();
00836
00837 LOG_INFO << "---> StTrack -> StDetectorInfo at "
00838 << (void*) (track->detectorInfo()) << endm;
00839 if (track->detectorInfo()) track->detectorInfo()->Dump();
00840
00841 LOG_INFO << "---> StTrack -> StTrackNode at "
00842 << (void*) (track->node()) << endm;
00843 if (track->node()) track->node()->Dump();
00844
00845 LOG_INFO << "---> StTrack -> StPidTraits ("
00846 << (track->pidTraits().size() ? 1 : 0 ) << " of "
00847 << track->pidTraits().size() << " entries shown)" << endm;
00848 if (track->pidTraits().size()) track->pidTraits()[0]->Dump();
00849 }
00850 }
00851
00852
00853
00854
00855
00856
00857
00858
00859
00860
00861
00862
00863
00864
00865
00866
00867
00868
00869
00870
00871
00872
00873
00874
00875
00876
00877
00878
00879
00880
00881
00882
00883
00884
00885
00886
00887
00888
00889
00890
00891
00892
00893
00894
00895
00896
00897
00898
00899
00900
00901
00902
00903
00904
00905
00906
00907
00908
00909
00910
00911
00912
00913
00914
00915
00916
00917
00918
00919
00920
00921
00922
00923
00924
00925
00926
00927
00928
00929
00930
00931
00932
00933
00934
00935
00936
00937
00938
00939
00940
00941
00942
00943
00944
00945
00946
00947
00948
00949
00950
00951
00952
00953
00954
00955
00956
00957
00958
00959
00960
00961
00962
00963
00964
00965
00966
00967
00968
00969
00970
00971
00972
00973
00974
00975
00976
00977
00978
00979
00980
00981
00982
00983
00984
00985
00986
00987
00988
00989
00990
00991
00992
00993
00994
00995
00996
00997
00998
00999
01000
01001
01002
01003
01004
01005
01006
01007
01008
01009
01010
01011
01012
01013
01014
01015
01016
01017
01018
01019
01020
01021
01022
01023
01024
01025
01026
01027
01028
01029
01030
01031
01032
01033
01034
01035
01036
01037
01038
01039
01040
01041
01042
01043
01044
01045
01046
01047
01048
01049
01050
01051
01052
01053
01054
01055
01056
01057
01058
01059
01060
01061
01062
01063
01064
01065
01066
01067
01068
01069
01070
01071
01072
01073
01074
01075
01076
01077
01078
01079
01080
01081
01082
01083
01084
01085
01086
01087
01088
01089
01090
01091
01092
01093
01094
01095
01096
01097
01098
01099
01100
01101
01102
01103
01104
01105
01106
01107
01108
01109
01110
01111
01112
01113
01114
01115
01116
01117
01118
01119
01120
01121
01122
01123
01124
01125
01126
01127
01128
01129
01130
01131
01132
01133
01134
01135
01136
01137
01138
01139
01140
01141
01142
01143
01144
01145
01146
01147
01148
01149
01150
01151