75 #ifndef __RUN_ALICE_ESD__
79 TString dir = gSystem->UnixPathName(__FILE__);
80 dir.ReplaceAll(
"alice_esd.C",
"");
81 dir.ReplaceAll(
"/./",
"/");
82 gROOT->LoadMacro(dir +
"MultiView.C+");
83 const char* esd_file_name =
"http://root.cern.ch/files/alice_ESDs.root";
84 TFile::SetCacheFileDir(
".");
85 TString lib(Form(
"aliesd/aliesd.%s", gSystem->GetSoExt()));
87 if (gSystem->AccessPathName(lib, kReadPermission)) {
88 TFile* f = TFile::Open(esd_file_name,
"CACHEREAD");
90 TTree *tree = (TTree*) f->Get(
"esdTree");
91 tree->SetBranchStatus (
"ESDfriend*", 1);
92 f->MakeProject(
"aliesd",
"*",
"++");
97 gROOT->ProcessLine(
"#define __RUN_ALICE_ESD__ 1");
98 gROOT->ProcessLine(
"#include \"alice_esd.C\"");
99 gROOT->ProcessLine(
"run_alice_esd()");
100 gROOT->ProcessLine(
"#undef __RUN_ALICE_ESD__");
112 class AliExternalTrackParam;
117 void alice_esd_read();
118 TEveTrack* esd_make_track(TEveTrackPropagator* trkProp, Int_t index,
120 AliExternalTrackParam* tp=0);
121 Bool_t trackIsOn(AliESDtrack* t, Int_t mask);
122 void trackGetPos(AliExternalTrackParam* tp, Double_t r[3]);
123 void trackGetMomentum(AliExternalTrackParam* tp, Double_t p[3]);
124 Double_t trackGetP(AliExternalTrackParam* tp);
129 const char* esd_file_name =
"http://root.cern.ch/files/alice_ESDs.root";
134 const char* esd_friends_file_name = 0;
136 const char* esd_geom_file_name =
137 "http://root.cern.ch/files/alice_ESDgeometry.root";
144 TFile *esd_friends_file = 0;
148 AliESDEvent *esd = 0;
150 AliESDfriend *esd_friend = 0;
152 Int_t esd_event_id = 0;
154 TEveTrackList *gTrackList = 0;
156 TEveGeoShape *gGeomGentle = 0;
160 MultiView* gMultiView = 0;
178 const TString weh(
"alice_esd()");
180 TFile::SetCacheFileDir(
".");
182 printf(
"*** Opening ESD ***\n");
183 esd_file = TFile::Open(esd_file_name,
"CACHEREAD");
187 esd_tree = (TTree*) esd_file->Get(
"esdTree");
188 esd = (AliESDEvent*) esd_tree->GetUserInfo()->FindObject(
"AliESDEvent");
189 esd_objs = esd->fESDObjects;
191 if (esd_friends_file_name != 0)
193 printf(
"*** Opening ESD-friends ***\n");
194 esd_friends_file = TFile::Open(esd_friends_file_name,
"CACHEREAD");
195 if (!esd_friends_file)
198 esd_tree->SetBranchStatus (
"ESDfriend*", 1);
203 TIter next(esd_objs);
205 while ((el = (TNamed*)next()))
207 TString bname(el->GetName());
208 if (bname ==
"AliESDfriend")
211 TBranch *br = esd_tree->GetBranch(
"ESDfriend.");
212 br->SetAddress(esd_objs->GetObjectRef(el));
216 TBranch *br = esd_tree->GetBranch(bname);
219 br->SetAddress(esd_objs->GetObjectRef(el));
223 br = esd_tree->GetBranch(bname +
".");
226 br->SetAddress(esd_objs->GetObjectRef(el));
230 Warning(
"AliESDEvent::ReadFromTree() "
231 "No Branch found with Name '%s' or '%s.'.",
232 bname.Data(),bname.Data());
240 TEveManager::Create();
243 TFile* geom = TFile::Open(esd_geom_file_name,
"CACHEREAD");
246 TEveGeoShapeExtract* gse = (TEveGeoShapeExtract*) geom->Get(
"Gentle");
247 gGeomGentle = TEveGeoShape::ImportShapeExtract(gse, 0);
250 gEve->AddGlobalElement(gGeomGentle);
257 gMultiView =
new MultiView;
259 gMultiView->ImportGeomRPhi(gGeomGentle);
260 gMultiView->ImportGeomRhoZ(gGeomGentle);
266 fgHtmlSummary =
new HtmlSummary(
"Alice Event Display Summary Table");
267 slot = TEveWindow::CreateWindowInTab(gEve->GetBrowser()->GetTabRight());
268 fgHtml =
new TGHtml(0, 100, 100);
269 TEveWindowFrame *wf = slot->MakeFrame(fgHtml);
270 fgHtml->MapSubwindows();
271 wf->SetElementName(
"Summary");
277 gEve->GetBrowser()->GetTabRight()->SetTab(1);
283 gEve->Redraw3D(kTRUE);
292 printf(
"Loading event %d.\n", esd_event_id);
294 gEve->GetViewers()->DeleteAnnotations();
297 gTrackList->DestroyElements();
299 esd_tree->GetEntry(esd_event_id);
304 TEveElement* top = gEve->GetCurrentEvent();
306 gMultiView->DestroyEventRPhi();
307 gMultiView->ImportEventRPhi(top);
309 gMultiView->DestroyEventRhoZ();
310 gMultiView->ImportEventRhoZ(top);
312 update_html_summary();
314 gEve->Redraw3D(kFALSE, kTRUE);
331 if (esd_event_id < esd_tree->GetEntries() - 1) {
335 printf(
"Already at last event.\n");
340 if (esd_event_id > 0) {
344 printf(
"Already at first event.\n");
354 TEveBrowser* browser = gEve->GetBrowser();
355 browser->StartEmbedding(TRootBrowser::kLeft);
357 TGMainFrame* frmMain =
new TGMainFrame(gClient->GetRoot(), 1000, 600);
358 frmMain->SetWindowName(
"XX GUI");
359 frmMain->SetCleanup(kDeepCleanup);
361 TGHorizontalFrame* hf =
new TGHorizontalFrame(frmMain);
364 TString icondir( Form(
"%s/icons/", gSystem->Getenv(
"ROOTSYS")) );
365 TGPictureButton* b = 0;
366 EvNavHandler *fh =
new EvNavHandler;
368 b =
new TGPictureButton(hf, gClient->GetPicture(icondir+
"GoBack.gif"));
370 b->Connect(
"Clicked()",
"EvNavHandler", fh,
"Bck()");
372 b =
new TGPictureButton(hf, gClient->GetPicture(icondir+
"GoForward.gif"));
374 b->Connect(
"Clicked()",
"EvNavHandler", fh,
"Fwd()");
376 frmMain->AddFrame(hf);
378 frmMain->MapSubwindows();
380 frmMain->MapWindow();
382 browser->StopEmbedding();
383 browser->SetTabTitle(
"Event Control", 0);
392 kITSin=0x0001,kITSout=0x0002,kITSrefit=0x0004,kITSpid=0x0008,
393 kTPCin=0x0010,kTPCout=0x0020,kTPCrefit=0x0040,kTPCpid=0x0080,
394 kTRDin=0x0100,kTRDout=0x0200,kTRDrefit=0x0400,kTRDpid=0x0800,
395 kTOFin=0x1000,kTOFout=0x2000,kTOFrefit=0x4000,kTOFpid=0x8000,
405 void alice_esd_read()
409 AliESDRun *esdrun = (AliESDRun*) esd_objs->FindObject(
"AliESDRun");
410 TClonesArray *tracks = (TClonesArray*) esd_objs->FindObject(
"Tracks");
420 gTrackList =
new TEveTrackList(
"ESD Tracks");
421 gTrackList->SetMainColor(6);
422 gTrackList->SetMarkerColor(kYellow);
423 gTrackList->SetMarkerStyle(4);
424 gTrackList->SetMarkerSize(0.5);
426 gEve->AddElement(gTrackList);
429 TEveTrackPropagator* trkProp = gTrackList->GetPropagator();
430 trkProp->SetMagField( 0.1 * esdrun->fMagneticField );
432 for (Int_t n=0; n<tracks->GetEntriesFast(); ++n)
434 AliESDtrack* at = (AliESDtrack*) tracks->At(n);
437 AliExternalTrackParam* tp = at;
438 if (! trackIsOn(at, kITSrefit)) {
442 TEveTrack* track = esd_make_track(trkProp, n, at, tp);
443 track->SetAttLineAttMarker(gTrackList);
444 gTrackList->AddElement(track);
454 gTrackList->MakeTracks();
458 TEveTrack* esd_make_track(TEveTrackPropagator* trkProp,
461 AliExternalTrackParam* tp)
468 Double_t pbuf[3], vbuf[3];
471 if (tp == 0) tp = at;
473 rt.fLabel = at->fLabel;
475 rt.fStatus = (Int_t) at->fFlags;
476 rt.fSign = (tp->fP[4] > 0) ? 1 : -1;
478 trackGetPos(tp, vbuf); rt.fV.Set(vbuf);
479 trackGetMomentum(tp, pbuf); rt.fP.Set(pbuf);
481 Double_t ep = trackGetP(at);
484 rt.fBeta = ep/TMath::Sqrt(ep*ep + mc*mc);
486 TEveTrack* track =
new TEveTrack(&rt, trkProp);
487 track->SetName(Form(
"TEveTrack %d", rt.fIndex));
488 track->SetStdTitle();
494 Bool_t trackIsOn(AliESDtrack* t, Int_t mask)
498 return (t->fFlags & mask) > 0;
502 void trackGetPos(AliExternalTrackParam* tp, Double_t r[3])
506 r[0] = tp->fX; r[1] = tp->fP[0]; r[2] = tp->fP[1];
508 Double_t cs=TMath::Cos(tp->fAlpha), sn=TMath::Sin(tp->fAlpha), x=r[0];
509 r[0] = x*cs - r[1]*sn; r[1] = x*sn + r[1]*cs;
513 void trackGetMomentum(AliExternalTrackParam* tp, Double_t p[3])
517 p[0] = tp->fP[4]; p[1] = tp->fP[2]; p[2] = tp->fP[3];
519 Double_t pt=1./TMath::Abs(p[0]);
520 Double_t cs=TMath::Cos(tp->fAlpha), sn=TMath::Sin(tp->fAlpha);
521 Double_t r=TMath::Sqrt(1 - p[1]*p[1]);
522 p[0]=pt*(r*cs - p[1]*sn); p[1]=pt*(p[1]*cs + r*sn); p[2]=pt*p[2];
526 Double_t trackGetP(AliExternalTrackParam* tp)
530 return TMath::Sqrt(1.+ tp->fP[3]*tp->fP[3])/TMath::Abs(tp->fP[4]);