00001
00002
00003 class TGeoNode;
00004 class TGeoVolume;
00005
00006 class StPhysicalHelixD;
00007 class StThreeVectorD;
00008
00009 class StChain;
00010 class StMuTrack;
00011 class StMuDstMaker;
00012 class StEventInfo;
00013 class StEventSummary;
00014
00015
00016 class EEmcTower;
00017 class EEmcTTDisplay;
00018 class EEmcTTMMaker;
00019
00020
00021 StChain *chain=0;
00022 EEmcTTMMaker *ttm =0;
00023 StMuDstMaker *muDstMk = 0;
00024 EEmcTTDisplay *eemc = 0;
00025 TPaveText *eventInfo = 0;
00026 TPaveLabel *dateInfo = 0;
00027 TDatime *now = 0;
00028
00029 void printNodeTree(TObjArray *nodeList, Int_t level=0);
00030 TGeoNode *findNode (TObjArray *nodeList,const char *name);
00031
00032
00033 void
00034 show
00035 (
00036 char* inpDir = "",
00037 char* inpFile = "show.lis",
00038 char* outFile = "show.root",
00039 Int_t nFiles = 50,
00040 Int_t nEvents = 100
00041 )
00042
00043
00044 {
00045
00046
00047
00048 gROOT->LoadMacro("$STAR/StRoot/StMuDSTMaker/COMMON/macros/loadSharedLibraries.C");
00049 loadSharedLibraries();
00050
00051
00052 gSystem->Load("libmysqlclient");
00053 gSystem->Load("libGeom");
00054 gSystem->Load("StDbLib");
00055 gSystem->Load("StDbBroker");
00056 gSystem->Load("St_db_Maker");
00057
00058
00059 gSystem->Load("StEEmcUtil");
00060 gSystem->Load("StEEmcDbMaker");
00061 gSystem->Load("StEEmcPoolTTM");
00062
00063
00064 chain = new StChain("StChain");
00065
00066
00067 now = new TDatime;
00068
00069 TCanvas *c1 = new TCanvas("eemc","eemc",10,10,1000,1000);
00070 TPaveLabel *tlab = new TPaveLabel(-0.99,+0.99,+0.99,+0.90,
00071 "EEMC TOWERS & TPC TRACKS Piotr A Zolnierczuk (IU)");
00072
00073 eventInfo = new TPaveText (-0.99,-0.99,+0.0 ,-0.75);
00074 dateInfo = new TPaveLabel(+0.60,-0.99,+0.99,-0.95,now->AsString());
00075
00076 TGeoManager *gm = new TGeoManager("eemc", "eemc tower display");
00077 TGeoVolume *top = gm->MakeBox("star",0, 200., 200., 350.);
00078 TGeoVolume *smbox = gm->MakeBox("smbox1",0, 2., 2., 2.);
00079 smbox->SetLineColor(kRed);
00080
00081 eemc = new EEmcTTDisplay();
00082 eemc->SetMagneticField(0.5);
00083 eemc->SetShowExtrapolatedTracks(true);
00084
00085 TGeoTranslation *etra = new TGeoTranslation(0.0,0.0,0.5*(eemc->getZ1()+eemc->getZ2()));
00086 top->AddNode(smbox, 1,NULL);
00087 top->AddNode(eemc(),1,etra);
00088 gm->SetTopVolume(top);
00089 gm->CloseGeometry();
00090 gm->SetVisLevel(4);
00091 gm->SetVisOption(0);
00092
00093 c1->SetTheta(90);
00094 c1->SetPhi(0);
00095
00096 top->Draw();
00097 tlab->Draw();
00098
00099 gPad->Update();
00100
00101
00102 muDstMk = new StMuDstMaker(0,0,inpDir,inpFile,"",nFiles);
00103 StMuDbReader *db = StMuDbReader::instance();
00104 St_db_Maker *dbMk = new St_db_Maker("StarDb", "MySQL:StarDb");
00105 new StEEmcDbMaker("eemcDb");
00106
00107
00108 dbMk->setTimeStampDay(20040331);
00109
00110
00111
00112 ttm = new EEmcTTMMaker ("TTM",muDstMk,eemcDbMk);
00113 ttm->Summary(cout);
00114
00115 StMuDebug::setLevel(0);
00116
00117 chain->Init();
00118
00119 StEEmcDb *eemcDb = (StEEmcDb*)chain->GetDataSet("StEEmcDb");
00120 eemcDb->setSectors(1,12);
00121 eemcDb->setPreferedFlavor("onlped","eemcPMTped");
00122
00123 chain->ls(3);
00124
00125
00126 next();
00127 }
00128
00129
00130
00131 void
00132 next(int nMatch=1)
00133 {
00134 char buffer[1024];
00135 int stat=0;
00136 int match=0;
00137 while(match<nMatch) {
00138 stat=chain->Make();
00139 if( stat==2 || stat==4) break;
00140 if( stat!=0 ) continue;
00141
00142 TList *matchList = ttm->GetMatchList();
00143 if(matchList->IsEmpty()) continue;
00144 TIter nextMatch(matchList);
00145
00146 match++;
00147
00148 StEventInfo &evinfo = muDstMk->muDst()->event()->eventInfo();
00149 StEventSummary &evsumm = muDstMk->muDst()->event()->eventSummary();
00150 sprintf(buffer,"Run #%d Event #%d\n",evinfo.runId(),evinfo.id());
00151 eventInfo->Clear();
00152 eventInfo->SetTextAlign(12);
00153 eventInfo->AddText(buffer);
00154
00155 eemc->Clear();
00156 cerr << "<Event";
00157 cerr << "Run=\"" << evinfo.runId() << "\"\t";
00158 cerr << "Event=\""<< evinfo.id() << "\">\n";
00159
00160 EEmcTTMatch *tmatch;
00161 while ((tmatch = (EEmcTTMatch *) nextMatch())) {
00162 TString outs;
00163 eemc->AddMatch(*tmatch);
00164 eemc->Out(cerr,*tmatch);
00165 eemc->Out(outs,*tmatch);
00166 eventInfo->AddText(outs);
00167 }
00168 cerr << "</Event>" << endl;
00169
00170 now->Set();
00171 dateInfo->SetLabel(now->AsString());
00172
00173 eemc->Draw();
00174 eventInfo->Draw();
00175 dateInfo->Draw();
00176 gPad->Update();
00177
00178 }
00179 ttm->Summary(cerr);
00180 }
00181
00182
00183
00184
00185
00186
00187
00188 void printNodeTree(TObjArray *nodeList, Int_t level)
00189 {
00190 TIter nextNode(nodeList);
00191 TGeoNode *node;
00192 while( (node=(TGeoNode *)nextNode())!=NULL ) {
00193 for(int k=0;k<level;k++) cerr << "\t";
00194 cerr << node->GetVolume()->GetName() << endl;
00195 printNodeTree(node->GetNodes(),level+1);
00196 }
00197 }
00198
00199
00200
00201 TGeoNode *
00202 findNode(TObjArray *nodeList,const char *name)
00203 {
00204 TIter nextNode(nodeList);
00205 TGeoNode *node;
00206 while( (node=(TGeoNode *)nextNode())!=NULL ) {
00207 if(strcmp(node->GetVolume()->GetName(),name)==0) return node;
00208 if( (node=findNode(node->GetNodes(),name))!= NULL ) return node;
00209 }
00210 return NULL;
00211 }