]> git.uio.no Git - u/mrichter/AliRoot.git/blame - EVE/Alieve/AliEveEventManager.cxx
Put all classes in Alieve/ sub-module out of the Alieve namespace and
[u/mrichter/AliRoot.git] / EVE / Alieve / AliEveEventManager.cxx
CommitLineData
d810d0de 1// $Id$
2// Main authors: Matevz Tadel & Alja Mrak-Tadel: 2006, 2007
5a5a1232 3
d810d0de 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 **************************************************************************/
9
10#include "AliEveEventManager.h"
84aff7a4 11#include <TEveUtil.h>
12#include <TEveManager.h>
5a5a1232 13
14#include <AliRunLoader.h>
93845f6c 15#include <AliRun.h>
af885e0f 16#include <AliESDEvent.h>
3aecaefc 17#include <AliESDfriend.h>
93845f6c 18#include <AliMagFMaps.h>
632d2b03 19#include <AliCDBManager.h>
20#include <AliHeader.h>
21#include <AliGeomManager.h>
5a5a1232 22
23#include <TFile.h>
24#include <TTree.h>
632d2b03 25#include <TError.h>
5a5a1232 26
27#include <TROOT.h>
28#include <TSystem.h>
d810d0de 29
5a5a1232 30
31//______________________________________________________________________
d810d0de 32// AliEveEventManager
5a5a1232 33//
4852ff6f 34// Provide interface for loading and navigating standard AliRoot data
35// (AliRunLoader) and ESDs.
36//
37// Missing support for raw-data. For now this is handled individually
38// by each sub-detector.
39//
5a5a1232 40
d810d0de 41ClassImp(AliEveEventManager)
5a5a1232 42
d810d0de 43AliEveEventManager* gEvent = 0;
5a5a1232 44
d810d0de 45Bool_t AliEveEventManager::fgAssertRunLoader = kFALSE;
46Bool_t AliEveEventManager::fgAssertESDTree = kFALSE;
5a5a1232 47
d810d0de 48TString AliEveEventManager::fgCdbUri("local://$ALICE_ROOT");
632d2b03 49
d810d0de 50AliMagF* AliEveEventManager::fgMagField = 0;
93845f6c 51
52
d810d0de 53AliEveEventManager::AliEveEventManager() :
84aff7a4 54 TEveEventManager(),
265ecb21 55
56 fPath (), fEventId (0),
57 fRunLoader (0),
90fa773e 58 fESDFile (0), fESDTree (0), fESD (0),
32e219c2 59 fESDfriend (0), fESDfriendExists(kFALSE)
265ecb21 60{}
5a5a1232 61
d810d0de 62AliEveEventManager::AliEveEventManager(TString path, Int_t ev) :
63 TEveEventManager("AliEVE AliEveEventManager"),
265ecb21 64
90fa773e 65 fPath (path), fEventId(-1),
265ecb21 66 fRunLoader (0),
90fa773e 67 fESDFile (0), fESDTree (0), fESD (0),
32e219c2 68 fESDfriend (0), fESDfriendExists(kFALSE)
5a5a1232 69{
5a5a1232 70 Open();
90fa773e 71 if (ev >= 0) GotoEvent(ev);
5a5a1232 72}
73
74/**************************************************************************/
75
d810d0de 76void AliEveEventManager::Open()
5a5a1232 77{
d810d0de 78 static const TEveException eH("AliEveEventManager::Open ");
5a5a1232 79
80 gSystem->ExpandPathName(fPath);
84aff7a4 81 if (fPath[0] != '/')
5a5a1232 82 fPath = Form("%s/%s", gSystem->WorkingDirectory(), fPath.Data());
83
632d2b03 84 Int_t runNo = -1;
85
a1896a82 86 TString ga_path(Form("%s/galice.root", fPath.Data()));
84aff7a4 87 if (gSystem->AccessPathName(ga_path, kReadPermission) == kFALSE)
90fa773e 88 {
5a5a1232 89 fRunLoader = AliRunLoader::Open(ga_path);
a1896a82 90 if (fRunLoader)
5a5a1232 91 {
92 TString alice_path = fPath + "/";
93 fRunLoader->SetDirName(alice_path);
a1896a82 94
95 if (fRunLoader->LoadgAlice() != 0)
96 Warning(eH, "failed loading gAlice via run-loader.");
97
98 if (fRunLoader->LoadHeader() == 0)
99 {
100 runNo = fRunLoader->GetHeader()->GetRun();
101 }
102 else
103 {
104 Warning(eH, "failed loading run-loader's header.");
105 delete fRunLoader;
106 fRunLoader = 0;
107 }
108 }
109 else // run-loader open failed
110 {
111 Warning(eH, "failed opening ALICE run-loader from '%s'.", ga_path.Data());
5a5a1232 112 }
5a5a1232 113 }
a1896a82 114 else // galice not readable
115 {
116 Warning(eH, "can not read '%s'.", ga_path.Data());
117 }
118 if (fRunLoader == 0)
119 {
84aff7a4 120 if (fgAssertRunLoader)
a1896a82 121 throw(eH + "Bootstraping of run-loader failed. Its precence was requested.");
122 else
123 Warning(eH, "Bootstraping of run-loader failed.");
124 }
125
5a5a1232 126
a1896a82 127 TString esd_path(Form("%s/AliESDs.root", fPath.Data()));
84aff7a4 128 if (gSystem->AccessPathName(esd_path, kReadPermission) == kFALSE)
90fa773e 129 {
a1896a82 130 fESDFile = new TFile(esd_path);
84aff7a4 131 if (fESDFile->IsZombie() == kFALSE)
90fa773e 132 {
af885e0f 133 fESD = new AliESDEvent();
a1896a82 134 fESDTree = (TTree*) fESDFile->Get("esdTree");
135 if (fESDTree != 0)
136 {
137 fESD->ReadFromTree(fESDTree);
138 runNo = fESD->GetESDRun()->GetRunNumber();
139
140 // Check if ESDfriends exists and attach the branch
141 TString p = Form("%s/AliESDfriends.root", fPath.Data());
84aff7a4 142 if (gSystem->AccessPathName(p, kReadPermission) == kFALSE)
a1896a82 143 {
144 fESDfriendExists = kTRUE;
145 fESDTree->SetBranchStatus ("ESDfriend*", 1);
146 fESDTree->SetBranchAddress("ESDfriend.", &fESDfriend);
147 }
148 }
149 else // esdtree == 0
150 {
151 delete fESDFile; fESDFile = 0;
152 Warning(eH, "failed getting the esdTree.");
753fdd1e 153 }
154 }
a1896a82 155 else // esd tfile is zombie
156 {
5a5a1232 157 delete fESDFile; fESDFile = 0;
a1896a82 158 Warning(eH, "failed opening ESD from '%s'.", esd_path.Data());
5a5a1232 159 }
a1896a82 160 }
161 else // esd not readable
162 {
163 Warning(eH, "can not read ESD file '%s'.", esd_path.Data());
164 }
165 if (fESDTree == 0)
166 {
167 if (fgAssertESDTree)
90fa773e 168 {
a1896a82 169 throw(eH + "ESD not initialized. Its precence was requested.");
170 } else {
171 Warning(eH, "ESD not initialized.");
3aecaefc 172 }
5a5a1232 173 }
174
632d2b03 175 if (runNo < 0)
176 throw(eH + "invalid run number.");
177
178 {
179 AliCDBManager* cdb = AliCDBManager::Instance();
180 cdb->SetDefaultStorage(fgCdbUri);
181 if (cdb->IsDefaultStorageSet() == kFALSE)
182 throw(eH + "CDB initialization failed.");
183 cdb->SetRun(runNo);
184 }
185
d810d0de 186 SetName(Form("AliEveEventManager %d", fEventId));
5a5a1232 187 SetTitle(fPath);
188}
189
d810d0de 190void AliEveEventManager::GotoEvent(Int_t event)
1eaa5849 191{
d810d0de 192 static const TEveException eH("AliEveEventManager::GotoEvent ");
1eaa5849 193
1eaa5849 194 Int_t maxEvent = 0;
84aff7a4 195 if (fRunLoader)
1eaa5849 196 maxEvent = fRunLoader->GetNumberOfEvents() - 1;
84aff7a4 197 else if (fESDTree)
1eaa5849 198 maxEvent = fESDTree->GetEntries() - 1;
753fdd1e 199 else
200 throw(eH + "neither RunLoader nor ESD loaded.");
1eaa5849 201
84aff7a4 202 if (event < 0 || event > maxEvent)
1eaa5849 203 throw(eH + Form("event %d not present, available range [%d, %d].",
204 event, 0, maxEvent));
205
84aff7a4 206 TEveManager::TRedrawDisabler rd(gEve);
207 gEve->Redraw3D(kFALSE, kTRUE); // Enforce drop of all logicals.
d9e0d6c5 208
32e219c2 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.
1eaa5849 212 DestroyElements();
213 fEventId = event;
d810d0de 214 SetName(Form("AliEveEventManager %d", fEventId));
1eaa5849 215 UpdateItems();
216
84aff7a4 217 if (fRunLoader) {
218 if (fRunLoader->GetEvent(fEventId) != 0)
1eaa5849 219 throw(eH + "failed getting required event.");
220 }
221
84aff7a4 222 if (fESDTree) {
223 if (fESDTree->GetEntry(fEventId) <= 0)
1eaa5849 224 throw(eH + "failed getting required event from ESD.");
225
2cea771a 226 if (fESDfriendExists)
1eaa5849 227 fESD->SetESDfriend(fESDfriend);
1eaa5849 228 }
90fa773e 229
230 AfterNewEventLoaded();
1eaa5849 231}
232
d810d0de 233void AliEveEventManager::Close()
5a5a1232 234{
2cea771a 235 if (fESDTree) {
236 delete fESD; fESD = 0;
237 delete fESDfriend; fESDfriend = 0;
238
239 delete fESDTree; fESDTree = 0;
240 delete fESDFile; fESDFile = 0;
241 }
5a5a1232 242}
243
90fa773e 244
5a5a1232 245/**************************************************************************/
246/**************************************************************************/
247
248// Static convenience functions.
249
d810d0de 250AliRunLoader* AliEveEventManager::AssertRunLoader()
5a5a1232 251{
d810d0de 252 static const TEveException eH("AliEveEventManager::AssertRunLoader ");
5a5a1232 253
84aff7a4 254 if (gEvent == 0)
5a5a1232 255 throw(eH + "ALICE event not ready.");
84aff7a4 256 if (gEvent->fRunLoader == 0)
5a5a1232 257 throw(eH + "AliRunLoader not initialised.");
258 return gEvent->fRunLoader;
259}
260
d810d0de 261AliESDEvent* AliEveEventManager::AssertESD()
5a5a1232 262{
d810d0de 263 static const TEveException eH("AliEveEventManager::AssertESD ");
5a5a1232 264
84aff7a4 265 if (gEvent == 0)
5a5a1232 266 throw(eH + "ALICE event not ready.");
84aff7a4 267 if (gEvent->fESD == 0)
5a5a1232 268 throw(eH + "AliESD not initialised.");
269 return gEvent->fESD;
270}
3aecaefc 271
d810d0de 272AliESDfriend* AliEveEventManager::AssertESDfriend()
3aecaefc 273{
d810d0de 274 static const TEveException eH("AliEveEventManager::AssertESDfriend ");
3aecaefc 275
84aff7a4 276 if (gEvent == 0)
3aecaefc 277 throw(eH + "ALICE event not ready.");
84aff7a4 278 if (gEvent->fESDfriend == 0)
3aecaefc 279 throw(eH + "AliESDfriend not initialised.");
280 return gEvent->fESDfriend;
281}
93845f6c 282
d810d0de 283AliMagF* AliEveEventManager::AssertMagField()
93845f6c 284{
285 if (fgMagField == 0)
286 {
287 if (gEvent && gEvent->fRunLoader && gEvent->fRunLoader->GetAliRun())
288 fgMagField = gEvent->fRunLoader->GetAliRun()->Field();
289 else
290 fgMagField = new AliMagFMaps("Maps","Maps", 1, 1., 10., AliMagFMaps::k5kG);
291 }
292 return fgMagField;
293}
632d2b03 294
d810d0de 295TGeoManager* AliEveEventManager::AssertGeometry()
632d2b03 296{
d810d0de 297 static const TEveException eH("AliEveEventManager::AssertGeometry ");
632d2b03 298
299 if (AliGeomManager::GetGeometry() == 0)
300 {
af2e4ef5 301 gGeoManager = 0;
632d2b03 302 AliGeomManager::LoadGeometry();
303 if ( ! AliGeomManager::GetGeometry())
304 {
305 throw(eH + "can not load geometry.");
306 }
307 if ( ! AliGeomManager::ApplyAlignObjsFromCDB("ITS TPC TRD TOF PHOS HMPID EMCAL MUON FMD ZDC PMD T0 VZERO ACORDE"))
308 {
309 ::Warning(eH, "mismatch of alignable volumes. Proceeding.");
310 // throw(eH + "could not apply align objs.");
311 }
312 }
313
314 return AliGeomManager::GetGeometry();
315}