|
Public Member Functions |
| EEmcTTDisplay (const char *name="eemc") |
| ~EEmcTTDisplay () |
| the destructor
|
TGeoVolume * | operator() () |
| returns top EEMC TGeoVolume
|
TGeoVolume * | GetVolume () |
| returns top TGeoVolume
|
Bool_t | AddTower (const char *tile) |
Bool_t | AddTower (int sec, int sub, int eta) |
Bool_t | AddTower (const EEmcTower &tower) |
Bool_t | AddTrack (Double_t x, Double_t y, Double_t z, Double_t px, Double_t py, Double_t pz, Double_t qB, Double_t zMin=0.0, Double_t zMax=0.0) |
Bool_t | AddTrack (const StMuTrack &track) |
Bool_t | AddMatch (EEmcTTMatch &tmatch) |
void | Draw (const Option_t *option="") |
void | Clear (const Option_t *option="") |
void | Out (ostream &out, EEmcTTMatch &tmatch) |
void | Out (TString &out, EEmcTTMatch &tmatch) |
void | SetMagneticField (double B) |
double | GetMagneticField () |
| returns STAR magnetic fiels in Tesla
|
void | SetShowExtrapolatedTracks (bool f) |
bool | GetShowExtrapolatedTracks () |
This is a simple root TGeoXXXX based class. It displays EEMC tower geometry (the class inherits from EEmcGeomSimple) and allows for "turning on/off" individual towers as well as it displays muDST tracks (StMuTrack).
class TGeoNode;
class TGeoVolume;
class StPhysicalHelixD;
class StThreeVectorD;
class StChain;
class StMuTrack;
class StMuDstMaker;
class StEventInfo;
class StEventSummary;
class EEmcTower;
class EEmcTTDisplay;
class EEmcTTMMaker;
StChain *chain=0;
EEmcTTMMaker *ttm =0;
StMuDstMaker *muDstMk = 0;
EEmcTTDisplay *eemc = 0;
TPaveText *eventInfo = 0;
TPaveLabel *dateInfo = 0;
TDatime *now = 0;
void printNodeTree(TObjArray *nodeList, Int_t level=0);
TGeoNode *findNode (TObjArray *nodeList,const char *name);
void
show
(
char* inpDir = "",
char* inpFile = "show.lis",
char* outFile = "show.root",
Int_t nFiles = 50,
Int_t nEvents = 100
)
{
gROOT->LoadMacro("$STAR/StRoot/StMuDSTMaker/COMMON/macros/loadSharedLibraries.C");
loadSharedLibraries();
gSystem->Load("libmysqlclient");
gSystem->Load("libGeom");
gSystem->Load("StDbLib");
gSystem->Load("StDbBroker");
gSystem->Load("St_db_Maker");
gSystem->Load("StEEmcUtil");
gSystem->Load("StEEmcDbMaker");
gSystem->Load("StEEmcPoolTTM");
chain = new StChain("StChain");
now = new TDatime;
TCanvas *c1 = new TCanvas("eemc","eemc",10,10,1000,1000);
TPaveLabel *tlab = new TPaveLabel(-0.99,+0.99,+0.99,+0.90,
"EEMC TOWERS & TPC TRACKS Piotr A Zolnierczuk (IU)");
eventInfo = new TPaveText (-0.99,-0.99,+0.0 ,-0.75);
dateInfo = new TPaveLabel(+0.60,-0.99,+0.99,-0.95,now->AsString());
TGeoManager *gm = new TGeoManager("eemc", "eemc tower display");
TGeoVolume *top = gm->MakeBox("star",0, 200., 200., 350.);
TGeoVolume *smbox = gm->MakeBox("smbox1",0, 2., 2., 2.);
smbox->SetLineColor(kRed);
eemc = new EEmcTTDisplay();
eemc->SetMagneticField(0.5);
eemc->SetShowExtrapolatedTracks(true);
TGeoTranslation *etra = new TGeoTranslation(0.0,0.0,0.5*(eemc->getZ1()+eemc->getZ2()));
top->AddNode(smbox, 1,NULL);
top->AddNode(eemc(),1,etra);
gm->SetTopVolume(top);
gm->CloseGeometry();
gm->SetVisLevel(4);
gm->SetVisOption(0);
c1->SetTheta(90);
c1->SetPhi(0);
top->Draw();
tlab->Draw();
gPad->Update();
muDstMk = new StMuDstMaker(0,0,inpDir,inpFile,"",nFiles);
StMuDbReader *db = StMuDbReader::instance();
StEEmcDbMaker *eemcDbMk =new StEEmcDbMaker("eemcDb");
St_db_Maker *dbMk = new St_db_Maker("StarDb", "MySQL:StarDb");
eemcDbMk->setSectors(1,12);
eemcDbMk->setTimeStampDay(20040331);
eemcDbMk->setPreferedFlavor("onlped","eemcPMTped");
ttm = new EEmcTTMMaker ("TTM",muDstMk,eemcDbMk);
ttm->Summary(cout);
StMuDebug::setLevel(0);
chain->Init();
chain->ls(3);
next();
}
void
next(int nMatch=1)
{
char buffer[1024];
int stat=0;
int match=0;
while(match<nMatch) {
stat=chain->Make();
if( stat==2 || stat==4) break;
if( stat!=0 ) continue;
TList *matchList = ttm->GetMatchList();
if(matchList->IsEmpty()) continue;
TIter nextMatch(matchList);
match++;
StEventInfo &evinfo = muDstMk->muDst()->event()->eventInfo();
StEventSummary &evsumm = muDstMk->muDst()->event()->eventSummary();
sprintf(buffer,"Run #%d Event #%d\n",evinfo.runId(),evinfo.id());
eventInfo->Clear();
eventInfo->SetTextAlign(12);
eventInfo->AddText(buffer);
eemc->Clear();
cerr << "<Event";
cerr << "Run=\"" << evinfo.runId() << "\"\t";
cerr << "Event=\""<< evinfo.id() << "\">\n";
EEmcTTMatch *tmatch;
while ((tmatch = (EEmcTTMatch *) nextMatch())) {
TString outs;
eemc->AddMatch(*tmatch);
eemc->Out(cerr,*tmatch);
eemc->Out(outs,*tmatch);
eventInfo->AddText(outs);
}
cerr << "</Event>" << endl;
now->Set();
dateInfo->SetLabel(now->AsString());
eemc->Draw();
eventInfo->Draw();
dateInfo->Draw();
gPad->Update();
}
ttm->Summary(cerr);
}
void printNodeTree(TObjArray *nodeList, Int_t level)
{
TIter nextNode(nodeList);
TGeoNode *node;
while( (node=(TGeoNode *)nextNode())!=NULL ) {
for(int k=0;k<level;k++) cerr << "\t";
cerr << node->GetVolume()->GetName() << endl;
printNodeTree(node->GetNodes(),level+1);
}
}
TGeoNode *
findNode(TObjArray *nodeList,const char *name)
{
TIter nextNode(nodeList);
TGeoNode *node;
while( (node=(TGeoNode *)nextNode())!=NULL ) {
if(strcmp(node->GetVolume()->GetName(),name)==0) return node;
if( (node=findNode(node->GetNodes(),name))!= NULL ) return node;
}
return NULL;
}