// // How to steer the basic TRD data containers from a macro. // // The loading and looping over events is performed by the // AliEve mechanism. For a stand alone TRD loop control check // the macro "trd_loader.C" // // Usage: // .x trd_detectors.C(sector) // // Author: // Alex Bercuci (A.Bercuci@gsi.de) // #if !defined(__CINT__) || defined(__MAKECINT__) #include #include #include #include #include #include #include #include #include #include #include #include #else class TEvePointSet; class TEveElement; #endif TEveElementList* trd_digits(Int_t sector = -1, TEveElement *cont = 0) { // Link data containers if(!gGeoManager) AliEveEventManager::AssertGeometry(); AliRunLoader *rl = AliEveEventManager::AssertRunLoader(); // define EVE containers TEveElementList *list = new TEveElementList("TRD Digits"); AliEveTRDNode *sm(NULL), *stk(NULL); AliEveTRDChamber *chm(NULL); // Link TRD digits rl->LoadDigits("TRD"); TTree *tD = rl->GetTreeD("TRD", kFALSE); if(!tD){ Error("trd_digits", "Missing digits tree"); return NULL; } AliTRDdigitsManager dm; dm.ReadDigits(tD); AliTRDgeometry *geo = new AliTRDgeometry(); Int_t sBegin=sector<0?0:sector, sEnd =sector<0?(AliTRDgeometry::kNsector):sector+1; Int_t jdet(0); for(Int_t isec=sBegin; isecSetTitle(Form("Index %d", isec*AliTRDgeometry::kNstack+istk)); for(Int_t ily(0); ilyGetDim())) continue; chm=new AliEveTRDChamber(det); chm->SetGeometry(geo); chm->LoadDigits(&dm); stk->AddElement(chm); jdet++; } if(!stk->HasChildren()){ delete stk; continue; } sm->AddElement(stk); } if(!sm->HasChildren()){ delete sm; continue; } list->AddElement(sm); } rl->UnloadDigits("TRD"); gEve->AddElement(list, cont); gEve->Redraw3D(); Info("trd_digits", "TRD chambers with data for current selection %d.", jdet); return list; }