00001
00002
00003
00004
00005
00006 class StMuEmcHit;
00007 class StMuDst;
00008 StMuDst* muDst = 0;
00009 class StMuEvent;
00010 StMuEvent* muEvent = 0;
00011 class StMuDstMaker;
00012 StMuDstMaker* muDstMaker = 0;
00013 class StChain;
00014 StChain *chain = 0;
00015 class St_db_Maker;
00016 class StuDraw3DMuEvent;
00017 StuDraw3DMuEvent *gEd = 0;
00018 class StBemcTables;
00019 StBemcTables* mBemcTables = 0;
00020 bool gRotationIsOn = false;
00021
00023
00071
00073
00093
00094 void addEmcHits(bool cuts=false) {
00095 if (!cuts) gEd->Endcaps();
00096
00097
00098
00099
00100 for (int softId = 1; softId<=4800; ++softId) {
00101 int adc = StMuDst::muEmcCollection()->getTowerADC(softId);
00102 Color_t colorResponce=kWhite;
00103 int status;
00104 mBemcTables->getStatus(1, softId, status);
00105 if (status != 1) continue;
00106 float ped, rms;
00107 mBemcTables->getPedestal(1, softId, 0, ped, rms);
00108 if (adc < ped + 3 * rms) continue;
00109 float calib;
00110 mBemcTables->getCalib(1, softId, 1, calib);
00111 float energy = calib * (adc - ped);
00112
00113 if (softId==1) {
00114 cout << "id =" << softId << " energy =" << energy << endl;
00115 cout << " adc = " << adc << endl;
00116 cout << " status = " << status << endl;
00117 cout << " ped = " << ped << endl;
00118 cout << " rms = " << rms << endl;
00119 cout << " calib = " << calib << endl;
00120 }
00121 if (energy > 0 && energy < 30) {
00122
00123 if ( energy < 0.3 ) { colorResponce = kBlue;
00124
00125
00126 } else if (energy < 1.0 ) colorResponce = kGreen;
00127
00128
00129 else if ( energy < 4.0 && energy>1.0) colorResponce = kYellow;
00130
00131 else colorResponce = kRed;
00132
00133 const double maxSize = 400.;
00134 const double scale = 10.;
00135 float size =(scale)*energy;
00136 if (size > maxSize) size = maxSize ;
00137 if (!cuts || (cuts && energy>1.0)) {
00138 gEd->EmcHit(softId,colorResponce, 0, size);
00139 gEd->AddComment(Form("energy = %f size=%f ",energy,size));
00140 }
00141
00142 }
00143 }
00144 }
00145
00146
00148
00161 void addTracks(bool cuts=false) {
00162 cout << "Adding tracks ----------------------------- " << endl;
00163 cout << "Run / Event Number: " << muDstMaker->muDst()->event()->runNumber() << " / " << muDstMaker->muDst()->event()->eventNumber() << endl;
00164
00165 size_t n_prim=StMuDst::GetNPrimaryTrack();
00166
00167 int counter = 0;
00168 for (size_t i_track=0; i_track < n_prim; ++i_track) {
00169 StMuTrack &track = *(StMuDst::primaryTracks(i_track));
00170 double pt =track.pt();
00171 short charge= track.charge();
00172 double nSigmaE = track.nSigmaElectron();
00173 if (!cuts || (cuts && (pt>2 && nSigmaE>-0.5))) {
00174 Style_t sty = gEd->Style(kPrimaryTrack).Sty();
00175 Size_t siz = gEd->Style(kPrimaryTrack).Siz();
00176 gEd->Track(track,StDraw3DStyle::Pt2Color(pt),sty,siz);
00177 gEd->AddComment(Form("pT = %f charge=%d ",pt,charge));
00178 ++counter;
00179 }
00180 }
00181 cout << counter << " primary tracks have been rendered" << endl;
00182 }
00183
00185
00207
00208 void mrd(bool doTowerCuts=false, bool doTrackCuts=false, bool clear=true)
00209 {
00210
00211 if (muEvent) {
00212 if (clear) gEd->Clear();
00213 addEmcHits(doTowerCuts);
00214 addTracks(doTrackCuts);
00215
00216 }
00217 }
00218
00219
00221
00245
00246 void mae(bool rotation=false, bool doTowerCuts=false, bool doTrackCuts=false, int skipEvent = 205 )
00247 {
00248
00249
00250
00251 gEd->Clear();
00252
00253 chain->Skip(skipEvent);
00254 newevent:
00255 chain->Make();
00256 mBemcTables->loadTables(chain);
00257
00258 if (muEvent = muDstMaker->muDst()->event()) {
00259 cout << "Run / Event Number: " << muDstMaker->muDst()->event()->runNumber() << " / " << muDstMaker->muDst()->event()->eventNumber() << endl;
00260 mrd(doTowerCuts,doTrackCuts);
00261
00262
00263
00264 if (rotation && !gRotationIsOn ) {
00265 gEd->SetDrawOption("{file:rotation.iv}");
00266 gRotationIsOn = true;
00267 }
00268 } else {
00269 printf(" muEvent is empty\n");
00270 goto newevent;
00271 }
00272 }
00273
00274
00276
00290
00291 void EdMu(const char* file =
00292 "/star/institutions/bnl/fine/testfiles/st_upsilon_8112020_raw_1130030.MuDst.root"
00293 , const char * detectorNames="TPC,StarBeam")
00294 {
00295
00296 if ( gSystem->AccessPathName(file)) {
00297 cout << endl << endl
00298 << "** Error ** : The input file: <"<< file << "> does not exist !!!"
00299 << endl << endl
00300 << " Please select the existing one and re-call the function: "
00301 << endl
00302 << endl << " root [0] EdMu(\"new file ROOT file name\")"
00303 << endl
00304 << endl << "To draw the StEvent components with no detector geometry, use: "
00305 << endl
00306 << endl << " root [0] EdMu(\"new file ROOT file name\",0)"
00307 << endl
00308 << endl;
00309 return;
00310 }
00311 TString muDstFile=file;
00312 gROOT->Macro("loadMuDst.C");
00313 gSystem->Load("St_Tables.so");
00314 gSystem->Load("St_db_Maker.so");
00315 gSystem->Load("StTpcDb");
00316 gSystem->Load("StDetectorDbMaker");
00317 gSystem->Load("StDbUtilities");
00318 gSystem->Load("StDbLib");
00319 gSystem->Load("StDbBroker");
00320
00321 gSystem->Load("StEEmcUtil");
00322 chain = new StChain();
00323 St_db_Maker* dbMaker = new St_db_Maker("dbName","$STAR/StarDb","MySQL:StarDb");
00324 muDstMaker = new StMuDstMaker(0,0,muDstFile.Data());
00325 chain->Init();
00326
00327 mBemcTables = new StBemcTables;
00328 delete gEd;
00329 gEd = new StuDraw3DMuEvent(detectorNames);
00330 gEd->SetBkColor(kBlack);
00331 printf("\n The display is ready!\n");
00332 printf(" calling:\n");
00333 printf("\t---\n");
00334 printf("\tmae()\n");
00335 printf("\t---\n");
00336 printf("method to read and show the next event\n");
00337 mae();
00338 printf(" call:\n");
00339 printf("\t---\n");
00340 printf("\tmae() - to advance the event \n");
00341 printf("\tmrd() - to redraw the event\n");
00342 printf("\t---\n");
00343 gEd->SetDrawOption("{view:all}");
00344 }