44 MultiView* gMultiView = 0;
55 TDirectory *fDirectory;
57 TObjArray *fEvDirKeys;
67 TEveTrackList *fTrackList;
68 TEvePointSet *fITSClusters;
69 TEvePointSet *fTPCClusters;
70 TEvePointSet *fTRDClusters;
71 TEvePointSet *fTOFClusters;
74 TVSDReader(
const char* file_name) :
75 fFile(0), fDirectory(0), fEvDirKeys(0),
78 fMaxEv(-1), fCurEv(-1),
81 fITSClusters(0), fTPCClusters(0), fTRDClusters(0), fTOFClusters(0)
83 fFile = TFile::Open(file_name);
86 Error(
"VSD_Reader",
"Can not open file '%s' ... terminating.",
91 fEvDirKeys =
new TObjArray;
92 TPMERegexp name_re(
"Event\\d+");
93 TObjLink* lnk = fFile->GetListOfKeys()->FirstLink();
95 if (name_re.Match(lnk->GetObject()->GetName()))
97 fEvDirKeys->Add(lnk->GetObject());
102 fMaxEv = fEvDirKeys->GetEntriesFast();
104 Error(
"VSD_Reader",
"No events to show ... terminating.");
111 virtual ~TVSDReader()
129 fVSD->SetBranchAddresses();
138 gEve->GetViewers()->DeleteAnnotations();
139 gEve->GetCurrentEvent()->DestroyElements();
154 GotoEvent(fCurEv + 1);
159 GotoEvent(fCurEv - 1);
162 Bool_t GotoEvent(Int_t ev)
164 if (ev < 0 || ev >= fMaxEv)
166 Warning(
"GotoEvent",
"Invalid event id %d.", ev);
175 fDirectory = (TDirectory*) ((TKey*) fEvDirKeys->At(fCurEv))->ReadObj();
176 fVSD->SetDirectory(fDirectory);
182 LoadClusters(fITSClusters,
"ITS", 0);
183 LoadClusters(fTPCClusters,
"TPC", 1);
184 LoadClusters(fTRDClusters,
"TRD", 2);
185 LoadClusters(fTOFClusters,
"TOF", 3);
191 auto top = gEve->GetCurrentEvent();
193 gMultiView->DestroyEventRPhi();
194 gMultiView->ImportEventRPhi(top);
196 gMultiView->DestroyEventRhoZ();
197 gMultiView->ImportEventRhoZ(top);
199 gEve->Redraw3D(kFALSE, kTRUE);
209 void LoadClusters(TEvePointSet*& ps,
const TString& det_name, Int_t det_id)
212 ps =
new TEvePointSet(det_name);
213 ps->SetMainColor((Color_t)(det_id + 2));
214 ps->SetMarkerSize(0.5);
215 ps->SetMarkerStyle(2);
216 ps->IncDenyDestroy();
221 TEvePointSelector ss(fVSD->fTreeC, ps,
"fV.fX:fV.fY:fV.fZ",
222 TString::Format(
"fDetId==%d", det_id));
224 ps->SetTitle(TString::Format(
"N=%d", ps->Size()));
226 gEve->AddElement(ps);
236 kITSin=0x0001,kITSout=0x0002,kITSrefit=0x0004,kITSpid=0x0008,
237 kTPCin=0x0010,kTPCout=0x0020,kTPCrefit=0x0040,kTPCpid=0x0080,
238 kTRDin=0x0100,kTRDout=0x0200,kTRDrefit=0x0400,kTRDpid=0x0800,
239 kTOFin=0x1000,kTOFout=0x2000,kTOFrefit=0x4000,kTOFpid=0x8000,
248 Bool_t trackIsOn(TEveTrack* t, Int_t mask)
252 return (t->GetStatus() & mask) > 0;
259 if (fTrackList == 0) {
260 fTrackList =
new TEveTrackList(
"ESD Tracks");
261 fTrackList->SetMainColor(6);
262 fTrackList->SetMarkerColor(kYellow);
263 fTrackList->SetMarkerStyle(4);
264 fTrackList->SetMarkerSize(0.5);
266 fTrackList->IncDenyDestroy();
268 fTrackList->DestroyElements();
271 auto trkProp = fTrackList->GetPropagator();
274 trkProp->SetMagField(0.5);
275 trkProp->SetStepper(TEveTrackPropagator::kRungeKutta);
277 Int_t nTracks = fVSD->fTreeR->GetEntries();
278 for (Int_t n = 0; n < nTracks; ++n) {
279 fVSD->fTreeR->GetEntry(n);
281 TEveTrack* track =
new TEveTrack(&fVSD->fR, trkProp);
282 track->SetName(Form(
"ESD Track %d", fVSD->fR.fIndex));
283 track->SetStdTitle();
284 track->SetAttLineAttMarker(fTrackList);
285 fTrackList->AddElement(track);
288 fTrackList->MakeTracks();
290 gEve->AddElement(fTrackList);
293 ClassDef(TVSDReader, 0);
296 TVSDReader* gVSDReader = 0;
303 void alice_vsd(
const char* vsd_file_name=
304 "http://mtadel.home.cern.ch/mtadel/root/AliVSD.root")
315 TFile::SetCacheFileDir(
".");
317 TEveVSD::DisableTObjectStreamersForVSDStruct();
319 gVSDReader =
new TVSDReader(vsd_file_name);
321 TEveManager::Create();
323 TEveGeoShape *gentle_geom = 0;
327 TFile::Open(
"http://mtadel.home.cern.ch/mtadel/root/alice_mini_geom.root",
331 auto gse = (TEveGeoShapeExtract*) geom->Get(
"Gentle");
332 gentle_geom = TEveGeoShape::ImportShapeExtract(gse, 0);
335 gEve->AddGlobalElement(gentle_geom);
342 gMultiView =
new MultiView;
343 gMultiView->f3DView->GetGLViewer()->SetStyle(TGLRnrCtx::kOutline);
345 gMultiView->SetDepth(-10);
346 gMultiView->ImportGeomRPhi(gentle_geom);
347 gMultiView->ImportGeomRhoZ(gentle_geom);
348 gMultiView->SetDepth(0);
354 gEve->GetViewers()->SwitchColorSet();
355 gEve->GetDefaultGLViewer()->SetStyle(TGLRnrCtx::kOutline);
357 gEve->GetBrowser()->GetTabRight()->SetTab(1);
361 gEve->AddEvent(
new TEveEventManager(
"Event",
"ALICE VSD Event"));
363 gVSDReader->GotoEvent(0);
365 gEve->Redraw3D(kTRUE);
374 auto browser = gEve->GetBrowser();
375 browser->StartEmbedding(TRootBrowser::kLeft);
377 auto frmMain =
new TGMainFrame(gClient->GetRoot(), 1000, 600);
378 frmMain->SetWindowName(
"XX GUI");
379 frmMain->SetCleanup(kDeepCleanup);
381 auto hf =
new TGHorizontalFrame(frmMain);
383 TString icondir(TString::Format(
"%s/icons/", gSystem->Getenv(
"ROOTSYS")));
384 TGPictureButton* b = 0;
386 b =
new TGPictureButton(hf, gClient->GetPicture(icondir+
"GoBack.gif"));
388 b->Connect(
"Clicked()",
"TVSDReader", gVSDReader,
"PrevEvent()");
390 b =
new TGPictureButton(hf, gClient->GetPicture(icondir+
"GoForward.gif"));
392 b->Connect(
"Clicked()",
"TVSDReader", gVSDReader,
"NextEvent()");
394 frmMain->AddFrame(hf);
396 frmMain->MapSubwindows();
398 frmMain->MapWindow();
400 browser->StopEmbedding();
401 browser->SetTabTitle(
"Event Control", 0);