2 // Main authors: Matevz Tadel & Alja Mrak-Tadel: 2006, 2007
4 /**************************************************************************
5 * Copyright(c) 1998-2008, ALICE Experiment at CERN, all rights reserved. *
6 * See http://aliceinfo.cern.ch/Offline/AliRoot/License.html for *
7 * full copyright notice. *
8 **************************************************************************/
10 #include "AliEveEventManager.h"
12 #include <TEveManager.h>
14 #include <AliRunLoader.h>
16 #include <AliESDEvent.h>
17 #include <AliESDfriend.h>
18 #include <AliMagFMaps.h>
19 #include <AliCDBManager.h>
20 #include <AliHeader.h>
21 #include <AliGeomManager.h>
31 //______________________________________________________________________________
34 // Provide interface for loading and navigating standard AliRoot data
35 // (AliRunLoader) and ESDs.
37 // Missing support for raw-data. For now this is handled individually
38 // by each sub-detector.
41 ClassImp(AliEveEventManager)
43 AliEveEventManager* gEvent = 0;
45 Bool_t AliEveEventManager::fgAssertRunLoader = kFALSE;
46 Bool_t AliEveEventManager::fgAssertESDTree = kFALSE;
48 TString AliEveEventManager::fgCdbUri("local://$ALICE_ROOT");
50 AliMagF* AliEveEventManager::fgMagField = 0;
53 AliEveEventManager::AliEveEventManager() :
56 fPath (), fEventId (0),
58 fESDFile (0), fESDTree (0), fESD (0),
59 fESDfriend (0), fESDfriendExists(kFALSE)
62 AliEveEventManager::AliEveEventManager(TString path, Int_t ev) :
63 TEveEventManager("AliEVE AliEveEventManager"),
65 fPath (path), fEventId(-1),
67 fESDFile (0), fESDTree (0), fESD (0),
68 fESDfriend (0), fESDfriendExists(kFALSE)
71 if (ev >= 0) GotoEvent(ev);
74 /******************************************************************************/
76 void AliEveEventManager::Open()
78 static const TEveException eH("AliEveEventManager::Open ");
80 gSystem->ExpandPathName(fPath);
82 fPath = Form("%s/%s", gSystem->WorkingDirectory(), fPath.Data());
86 TString ga_path(Form("%s/galice.root", fPath.Data()));
87 if (gSystem->AccessPathName(ga_path, kReadPermission) == kFALSE)
89 fRunLoader = AliRunLoader::Open(ga_path);
92 TString alice_path = fPath + "/";
93 fRunLoader->SetDirName(alice_path);
95 if (fRunLoader->LoadgAlice() != 0)
96 Warning(eH, "failed loading gAlice via run-loader.");
98 if (fRunLoader->LoadHeader() == 0)
100 runNo = fRunLoader->GetHeader()->GetRun();
104 Warning(eH, "failed loading run-loader's header.");
109 else // run-loader open failed
111 Warning(eH, "failed opening ALICE run-loader from '%s'.", ga_path.Data());
114 else // galice not readable
116 Warning(eH, "can not read '%s'.", ga_path.Data());
120 if (fgAssertRunLoader)
121 throw(eH + "Bootstraping of run-loader failed. Its precence was requested.");
123 Warning(eH, "Bootstraping of run-loader failed.");
127 TString esd_path(Form("%s/AliESDs.root", fPath.Data()));
128 if (gSystem->AccessPathName(esd_path, kReadPermission) == kFALSE)
130 fESDFile = new TFile(esd_path);
131 if (fESDFile->IsZombie() == kFALSE)
133 fESD = new AliESDEvent();
134 fESDTree = (TTree*) fESDFile->Get("esdTree");
137 fESD->ReadFromTree(fESDTree);
138 runNo = fESD->GetESDRun()->GetRunNumber();
140 // Check if ESDfriends exists and attach the branch
141 TString p = Form("%s/AliESDfriends.root", fPath.Data());
142 if (gSystem->AccessPathName(p, kReadPermission) == kFALSE)
144 fESDfriendExists = kTRUE;
145 fESDTree->SetBranchStatus ("ESDfriend*", 1);
146 fESDTree->SetBranchAddress("ESDfriend.", &fESDfriend);
151 delete fESDFile; fESDFile = 0;
152 Warning(eH, "failed getting the esdTree.");
155 else // esd tfile is zombie
157 delete fESDFile; fESDFile = 0;
158 Warning(eH, "failed opening ESD from '%s'.", esd_path.Data());
161 else // esd not readable
163 Warning(eH, "can not read ESD file '%s'.", esd_path.Data());
169 throw(eH + "ESD not initialized. Its precence was requested.");
171 Warning(eH, "ESD not initialized.");
176 throw(eH + "invalid run number.");
179 AliCDBManager* cdb = AliCDBManager::Instance();
180 cdb->SetDefaultStorage(fgCdbUri);
181 if (cdb->IsDefaultStorageSet() == kFALSE)
182 throw(eH + "CDB initialization failed.");
186 SetName(Form("AliEveEventManager %d", fEventId));
190 void AliEveEventManager::GotoEvent(Int_t event)
192 static const TEveException eH("AliEveEventManager::GotoEvent ");
196 maxEvent = fRunLoader->GetNumberOfEvents() - 1;
198 maxEvent = fESDTree->GetEntries() - 1;
200 throw(eH + "neither RunLoader nor ESD loaded.");
202 if (event < 0 || event > maxEvent)
203 throw(eH + Form("event %d not present, available range [%d, %d].",
204 event, 0, maxEvent));
206 TEveManager::TRedrawDisabler rd(gEve);
207 gEve->Redraw3D(kFALSE, kTRUE); // Enforce drop of all logicals.
209 // !!! MT this is somewhat brutal; at least optionally, one could be
210 // a bit gentler, checking for objs owning their external refs and having
211 // additinal parents.
214 SetName(Form("AliEveEventManager %d", fEventId));
218 if (fRunLoader->GetEvent(fEventId) != 0)
219 throw(eH + "failed getting required event.");
223 if (fESDTree->GetEntry(fEventId) <= 0)
224 throw(eH + "failed getting required event from ESD.");
226 if (fESDfriendExists)
227 fESD->SetESDfriend(fESDfriend);
230 AfterNewEventLoaded();
233 void AliEveEventManager::Close()
236 delete fESD; fESD = 0;
237 delete fESDfriend; fESDfriend = 0;
239 delete fESDTree; fESDTree = 0;
240 delete fESDFile; fESDFile = 0;
245 /******************************************************************************/
246 /******************************************************************************/
248 // Static convenience functions.
250 AliRunLoader* AliEveEventManager::AssertRunLoader()
252 static const TEveException eH("AliEveEventManager::AssertRunLoader ");
255 throw(eH + "ALICE event not ready.");
256 if (gEvent->fRunLoader == 0)
257 throw(eH + "AliRunLoader not initialised.");
258 return gEvent->fRunLoader;
261 AliESDEvent* AliEveEventManager::AssertESD()
263 static const TEveException eH("AliEveEventManager::AssertESD ");
266 throw(eH + "ALICE event not ready.");
267 if (gEvent->fESD == 0)
268 throw(eH + "AliESD not initialised.");
272 AliESDfriend* AliEveEventManager::AssertESDfriend()
274 static const TEveException eH("AliEveEventManager::AssertESDfriend ");
277 throw(eH + "ALICE event not ready.");
278 if (gEvent->fESDfriend == 0)
279 throw(eH + "AliESDfriend not initialised.");
280 return gEvent->fESDfriend;
283 AliMagF* AliEveEventManager::AssertMagField()
287 if (gEvent && gEvent->fRunLoader && gEvent->fRunLoader->GetAliRun())
288 fgMagField = gEvent->fRunLoader->GetAliRun()->Field();
290 fgMagField = new AliMagFMaps("Maps","Maps", 1, 1., 10., AliMagFMaps::k5kG);
295 TGeoManager* AliEveEventManager::AssertGeometry()
297 static const TEveException eH("AliEveEventManager::AssertGeometry ");
299 if (AliGeomManager::GetGeometry() == 0)
302 AliGeomManager::LoadGeometry();
303 if ( ! AliGeomManager::GetGeometry())
305 throw(eH + "can not load geometry.");
307 if ( ! AliGeomManager::ApplyAlignObjsFromCDB("ITS TPC TRD TOF PHOS HMPID EMCAL MUON FMD ZDC PMD T0 VZERO ACORDE"))
309 ::Warning(eH, "mismatch of alignable volumes. Proceeding.");
310 // throw(eH + "could not apply align objs.");
314 return AliGeomManager::GetGeometry();