enabling the SOR and EOR events in AliHLTSystem
[u/mrichter/AliRoot.git] / EVE / EveBase / 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 *
51346b82 7 * full copyright notice. *
d810d0de 8 **************************************************************************/
9
10#include "AliEveEventManager.h"
84aff7a4 11#include <TEveManager.h>
5a5a1232 12
13#include <AliRunLoader.h>
93845f6c 14#include <AliRun.h>
af885e0f 15#include <AliESDEvent.h>
3aecaefc 16#include <AliESDfriend.h>
ec835ab5 17#include <AliDAQ.h>
18#include <AliRawEventHeaderBase.h>
c2c4b7a2 19#include <AliRawReaderRoot.h>
20#include <AliRawReaderFile.h>
21#include <AliRawReaderDate.h>
93845f6c 22#include <AliMagFMaps.h>
632d2b03 23#include <AliCDBManager.h>
24#include <AliHeader.h>
25#include <AliGeomManager.h>
5a5a1232 26
27#include <TFile.h>
28#include <TTree.h>
fbc350a3 29#include <TGeoManager.h>
5a5a1232 30#include <TSystem.h>
d810d0de 31
a15e6d7d 32//==============================================================================
33//==============================================================================
34// AliEveEventManager
35//==============================================================================
5a5a1232 36
57ffa5fb 37//______________________________________________________________________________
5a5a1232 38//
4852ff6f 39// Provide interface for loading and navigating standard AliRoot data
40// (AliRunLoader) and ESDs.
41//
42// Missing support for raw-data. For now this is handled individually
43// by each sub-detector.
51346b82 44//
a15e6d7d 45// Also provides interface to magnetic-field and geometry. Mostly
46// intended as wrappers over standard AliRoot functionality for
47// convenient use from visualizateion macros.
5a5a1232 48
d810d0de 49ClassImp(AliEveEventManager)
5a5a1232 50
a15e6d7d 51AliEveEventManager* gAliEveEvent = 0;
5a5a1232 52
d810d0de 53Bool_t AliEveEventManager::fgAssertRunLoader = kFALSE;
c76ea574 54Bool_t AliEveEventManager::fgAssertESD = kFALSE;
c2c4b7a2 55Bool_t AliEveEventManager::fgAssertRaw = kFALSE;
5a5a1232 56
c2c4b7a2 57TString AliEveEventManager::fgESDFileName("AliESDs.root");
58TString AliEveEventManager::fgRawFileName("raw.root");
d810d0de 59TString AliEveEventManager::fgCdbUri("local://$ALICE_ROOT");
632d2b03 60
d810d0de 61AliMagF* AliEveEventManager::fgMagField = 0;
93845f6c 62
63
d810d0de 64AliEveEventManager::AliEveEventManager() :
84aff7a4 65 TEveEventManager(),
265ecb21 66
c2c4b7a2 67 fPath ( ), fEventId (-1),
265ecb21 68 fRunLoader (0),
90fa773e 69 fESDFile (0), fESDTree (0), fESD (0),
c2c4b7a2 70 fESDfriend (0), fESDfriendExists(kFALSE),
319f3084 71 fRawReader (0),
72 fAutoLoad(kFALSE),
73 fAutoLoadTime(5.),
74 fAutoLoadTimer(0),
75 fIsOnline(kFALSE)
c76ea574 76{
77 // Default constructor.
78}
5a5a1232 79
d810d0de 80AliEveEventManager::AliEveEventManager(TString path, Int_t ev) :
81 TEveEventManager("AliEVE AliEveEventManager"),
265ecb21 82
c76ea574 83 fPath (path), fEventId(-1),
265ecb21 84 fRunLoader (0),
90fa773e 85 fESDFile (0), fESDTree (0), fESD (0),
c2c4b7a2 86 fESDfriend (0), fESDfriendExists(kFALSE),
319f3084 87 fRawReader (0),
88 fAutoLoad(kFALSE),
89 fAutoLoadTime(5.),
90 fAutoLoadTimer(0),
91 fIsOnline(kFALSE)
5a5a1232 92{
c76ea574 93 // Constructor with event-directory URL and event-id.
94
5a5a1232 95 Open();
90fa773e 96 if (ev >= 0) GotoEvent(ev);
5a5a1232 97}
98
a15e6d7d 99AliEveEventManager::~AliEveEventManager()
100{
101 // Destructor.
102
319f3084 103 if (fAutoLoadTimer) delete fAutoLoadTimer;
a15e6d7d 104 // Somewhat unclear what to do here.
105 // In principle should close all data sources and deregister from
106 // TEveManager.
107}
108
57ffa5fb 109/******************************************************************************/
5a5a1232 110
c2c4b7a2 111void AliEveEventManager::SetESDFileName(const Text_t* esd)
112{
113 // Set file-name for opening ESD, default "AliESDs.root".
114
115 if (esd) fgESDFileName = esd;
116}
117
118void AliEveEventManager::SetRawFileName(const Text_t* raw)
119{
120 // Set file-name for opening of raw-data, default "raw.root"
121 if (raw) fgRawFileName = raw;
122}
123
124void AliEveEventManager::SetCdbUri(const Text_t* cdb)
125{
126 // Set path to CDB, default "local://$ALICE_ROOT".
127
128 if (cdb) fgCdbUri = cdb;
129}
130
131void AliEveEventManager::SetAssertElements(Bool_t assertRunloader,
132 Bool_t assertEsd,
133 Bool_t assertRaw)
134{
135 // Set global flags that detrmine which parts of the event-data must
136 // be present when the event is opened.
137
138 fgAssertRunLoader = assertRunloader;
139 fgAssertESD = assertEsd;
140 fgAssertRaw = assertRaw;
141}
142
143/******************************************************************************/
144
d810d0de 145void AliEveEventManager::Open()
5a5a1232 146{
c76ea574 147 // Open event-data from URL specified in fPath.
148 // Attempts to create AliRunLoader() and to open ESD with ESDfriends.
149 // Warning is reported if run-loader or ESD is not found.
150 // Global data-members fgAssertRunLoader and fgAssertESD can be set
151 // to throw exceptions instead.
152
a15e6d7d 153 static const TEveException kEH("AliEveEventManager::Open ");
5a5a1232 154
155 gSystem->ExpandPathName(fPath);
5a58dc18 156 // The following magick is required for ESDriends to be loaded properly
157 // from non-current directory.
158 if (fPath.IsNull() || fPath == ".")
159 {
160 fPath = gSystem->WorkingDirectory();
161 }
162 else if ( ! fPath.BeginsWith("file:/"))
163 {
164 TUrl url(fPath, kTRUE);
165 TString protocol(url.GetProtocol());
166 if (protocol == "file" && fPath[0] != '/')
167 fPath = Form("%s/%s", gSystem->WorkingDirectory(), fPath.Data());
168 }
5a5a1232 169
632d2b03 170 Int_t runNo = -1;
171
db748c38 172 // Open ESD and ESDfriends
173
174 TString esdPath(Form("%s/%s", fPath.Data(), fgESDFileName.Data()));
175 if ((fESDFile = TFile::Open(esdPath)))
176 {
177 fESD = new AliESDEvent();
178 fESDTree = (TTree*) fESDFile->Get("esdTree");
179 if (fESDTree != 0)
180 {
181 fESD->ReadFromTree(fESDTree);
182 fESDTree->GetEntry(0);
183 if (runNo < 0)
184 runNo = fESD->GetESDRun()->GetRunNumber();
185
186 // Check if ESDfriends exists and attach the branch
187 TString p(Form("%s/AliESDfriends.root", fPath.Data()));
188 if (gSystem->AccessPathName(p, kReadPermission) == kFALSE)
189 {
190 fESDfriendExists = kTRUE;
191 fESDTree->SetBranchStatus ("ESDfriend*", 1);
192 fESDTree->SetBranchAddress("ESDfriend.", &fESDfriend);
193 }
194 }
195 else // esdtree == 0
196 {
197 delete fESDFile; fESDFile = 0;
198 Warning(kEH, "failed getting the esdTree.");
199 }
200 }
201 else // esd not readable
202 {
203 Warning(kEH, "can not read ESD file '%s'.", esdPath.Data());
204 }
205 if (fESDTree == 0)
206 {
207 if (fgAssertESD)
208 {
209 throw (kEH + "ESD not initialized. Its precence was requested.");
210 } else {
211 Warning(kEH, "ESD not initialized.");
212 }
213 }
214
215 // Open RunLoader from galice.root
216
a15e6d7d 217 TString gaPath(Form("%s/galice.root", fPath.Data()));
c2c4b7a2 218 // If i use open directly, we get fatal.
db748c38 219 // Is AccessPathName check ok for xrootd / alien? Yes, not for http.
a15e6d7d 220 if (gSystem->AccessPathName(gaPath, kReadPermission) == kFALSE)
90fa773e 221 {
a15e6d7d 222 fRunLoader = AliRunLoader::Open(gaPath);
a1896a82 223 if (fRunLoader)
5a5a1232 224 {
a15e6d7d 225 TString alicePath = fPath + "/";
226 fRunLoader->SetDirName(alicePath);
a1896a82 227
228 if (fRunLoader->LoadgAlice() != 0)
c2c4b7a2 229 Warning(kEH, "failed loading gAlice via run-loader.");
a1896a82 230
231 if (fRunLoader->LoadHeader() == 0)
232 {
db748c38 233 if (runNo < 0)
234 runNo = fRunLoader->GetHeader()->GetRun();
a1896a82 235 }
236 else
237 {
c2c4b7a2 238 Warning(kEH, "failed loading run-loader's header.");
239 delete fRunLoader;
240 fRunLoader = 0;
a1896a82 241 }
242 }
243 else // run-loader open failed
244 {
a15e6d7d 245 Warning(kEH, "failed opening ALICE run-loader from '%s'.", gaPath.Data());
5a5a1232 246 }
5a5a1232 247 }
a1896a82 248 else // galice not readable
249 {
a15e6d7d 250 Warning(kEH, "can not read '%s'.", gaPath.Data());
a1896a82 251 }
252 if (fRunLoader == 0)
253 {
84aff7a4 254 if (fgAssertRunLoader)
c2c4b7a2 255 throw (kEH + "Bootstraping of run-loader failed. Its precence was requested.");
a1896a82 256 else
a15e6d7d 257 Warning(kEH, "Bootstraping of run-loader failed.");
a1896a82 258 }
51346b82 259
db748c38 260 // Open raw-data file
5a5a1232 261
c2c4b7a2 262 TString rawPath(Form("%s/%s", fPath.Data(), fgRawFileName.Data()));
2827badf 263 // If i use open directly, raw-reader reports an error but i have
264 // no way to detect it.
265 // Is this (AccessPathName check) ok for xrootd / alien? Yes, not for http.
266 if (gSystem->AccessPathName(rawPath, kReadPermission) == kFALSE)
267 {
268 fRawReader = AliRawReader::Create(rawPath);
269 }
270 else
271 {
272 fRawReader = AliRawReader::Create(fgRawFileName);
273 }
c2c4b7a2 274 if (fRawReader == 0)
275 {
276 if (fgAssertRaw)
277 {
278 throw (kEH + "raw-data not initialized. Its precence was requested.");
279 } else {
280 Warning(kEH, "raw-data not initialized.");
281 }
282 }
283
632d2b03 284 if (runNo < 0)
c2c4b7a2 285 {
286 if (fRawReader)
287 {
288 fRawReader->NextEvent();
289 runNo = fRawReader->GetRunNumber();
ca49b003 290 Info(kEH, "Determining run-no from raw ... run=%d.", runNo);
c2c4b7a2 291 fRawReader->RewindEvents();
292 } else {
293 throw (kEH + "unknown run number.");
294 }
295 }
632d2b03 296
297 {
298 AliCDBManager* cdb = AliCDBManager::Instance();
299 cdb->SetDefaultStorage(fgCdbUri);
300 if (cdb->IsDefaultStorageSet() == kFALSE)
c2c4b7a2 301 throw (kEH + "CDB initialization failed.");
632d2b03 302 cdb->SetRun(runNo);
303 }
304
73c1c0ec 305 SetName(Form("Event %d", fEventId));
5a5a1232 306 SetTitle(fPath);
307}
308
319f3084 309void AliEveEventManager::SetEvent(AliRunLoader *runLoader, AliRawReader *rawReader, AliESDEvent *esd)
310{
311 // Set an event from an external source
312 // The method is used in the online visualisation
313 fRunLoader = runLoader;
314 fRawReader = rawReader;
315 fESD = esd;
316 fIsOnline = kTRUE;
317 SetTitle("Online event in memory");
318 SetName("Online Event");
319
320 ElementChanged();
321 AfterNewEventLoaded();
322}
323
516389a2 324Int_t AliEveEventManager::GetMaxEventId(Bool_t refreshESD) const
325{
326 // Returns maximum available event id.
327 // If raw-data is the only data-source this can not be known
328 // and 10,000,000 is returned.
329 // If neither data-source is initialised an exception is thrown.
330 // If refresh_esd is true and ESD is the primary event-data source
331 // its header is re-read from disk.
332
333 static const TEveException kEH("AliEveEventManager::GetMaxEventId ");
334
335 if (fRunLoader)
336 {
337 return fRunLoader->GetNumberOfEvents() - 1;
338 }
339 else if (fESDTree)
340 {
341 if (refreshESD)
342 fESDTree->Refresh();
343 return fESDTree->GetEntries() - 1;
344 }
345 else if (fRawReader)
346 {
347 return 10000000;
348 }
349 else
350 {
351 throw (kEH + "neither RunLoader, ESD nor Raw loaded.");
352 }
353}
354
d810d0de 355void AliEveEventManager::GotoEvent(Int_t event)
1eaa5849 356{
73c1c0ec 357 // Load data for specified event.
358 // If event is out of range an exception is thrown and old state
359 // is preserved.
360 // After successful loading of event, the virtual function
361 // AfterNewEventLoaded() is called. This executes commands that
362 // were registered via TEveEventManager::AddNewEventCommand().
516389a2 363 //
364 // If event is negative, it is subtracted from the number of
365 // available events, thus passing -1 will load the last event.
366 // This is not supported when raw-data is the only data-source
367 // as the number of events is not known.
73c1c0ec 368
a15e6d7d 369 static const TEveException kEH("AliEveEventManager::GotoEvent ");
1eaa5849 370
1eaa5849 371 Int_t maxEvent = 0;
db748c38 372 if (fESDTree)
516389a2 373 {
ca49b003 374 // Refresh crashes with root-5.21.1-alice.
375 // Fixed by Philippe 5.8.2008 r25053, can be reactivated
376 // when we move to a newer root.
377 // fESDTree->Refresh();
1eaa5849 378 maxEvent = fESDTree->GetEntries() - 1;
516389a2 379 if (event < 0)
380 event = fESDTree->GetEntries() + event;
381 }
db748c38 382 else if (fRunLoader)
383 {
384 maxEvent = fRunLoader->GetNumberOfEvents() - 1;
385 if (event < 0)
386 event = fRunLoader->GetNumberOfEvents() + event;
387 }
516389a2 388 else if (fRawReader)
389 {
c2c4b7a2 390 maxEvent = 10000000;
516389a2 391 if (event < 0) {
392 Error(kEH, "negative event id passed for raw-data as source. Operation not supported.");
393 return;
394 }
c2c4b7a2 395 Info(kEH, "number of events unknown for raw-data, setting max-event id to 10M.");
516389a2 396 }
397 else
398 {
c2c4b7a2 399 throw (kEH + "neither RunLoader, ESD nor Raw loaded.");
400 }
84aff7a4 401 if (event < 0 || event > maxEvent)
516389a2 402 {
c2c4b7a2 403 throw (kEH + Form("event %d not present, available range [%d, %d].",
404 event, 0, maxEvent));
516389a2 405 }
1eaa5849 406
84aff7a4 407 TEveManager::TRedrawDisabler rd(gEve);
408 gEve->Redraw3D(kFALSE, kTRUE); // Enforce drop of all logicals.
d9e0d6c5 409
32e219c2 410 // !!! MT this is somewhat brutal; at least optionally, one could be
411 // a bit gentler, checking for objs owning their external refs and having
412 // additinal parents.
1eaa5849 413 DestroyElements();
1eaa5849 414
84aff7a4 415 if (fESDTree) {
c2c4b7a2 416 if (fESDTree->GetEntry(event) <= 0)
417 throw (kEH + "failed getting required event from ESD.");
1eaa5849 418
2cea771a 419 if (fESDfriendExists)
1eaa5849 420 fESD->SetESDfriend(fESDfriend);
1eaa5849 421 }
90fa773e 422
db748c38 423 if (fRunLoader) {
424 if (fRunLoader->GetEvent(event) != 0)
425 throw (kEH + "failed getting required event.");
426 }
427
c2c4b7a2 428 if (fRawReader)
429 {
ca49b003 430 // AliRawReader::GotoEvent(Int_t) works for AliRawReaderRoot/Chain.
431 if (fRawReader->GotoEvent(event) == kFALSE)
c2c4b7a2 432 {
ca49b003 433 // Use fallback method - iteration with NextEvent().
434 Int_t rawEv = fEventId;
435 if (event < rawEv)
c2c4b7a2 436 {
437 fRawReader->RewindEvents();
ca49b003 438 rawEv = -1;
c2c4b7a2 439 }
c2c4b7a2 440
ca49b003 441 while (rawEv < event)
442 {
443 if ( ! fRawReader->NextEvent())
444 {
445 fRawReader->RewindEvents();
446 fEventId = -1;
447 throw (kEH + Form("Error going to next raw-event from event %d.", rawEv));
448 }
449 ++rawEv;
450 }
451 Warning(kEH, "Loaded raw-event %d with fallback method.\n", rawEv);
452 }
c2c4b7a2 453 }
454
455 fEventId = event;
456 SetName(Form("Event %d", fEventId));
319f3084 457 ElementChanged();
c2c4b7a2 458
90fa773e 459 AfterNewEventLoaded();
1eaa5849 460}
461
516389a2 462void AliEveEventManager::NextEvent()
463{
464 // Loads next event
465 // either in automatic (online) or
466 // manual mode
467
468 if (fIsOnline) {
469 if (fAutoLoadTimer) fAutoLoadTimer->Stop();
470
471 DestroyElements();
472
473 gSystem->ExitLoop();
474 }
475 else {
476 if (fEventId < GetMaxEventId(kTRUE))
477 GotoEvent(fEventId + 1);
478 else
479 GotoEvent(0);
480 StartStopAutoLoadTimer();
481 }
482}
483
484void AliEveEventManager::PrevEvent()
485{
486 // Loads previous event
487 // only in case of manual mode
488 if (!fIsOnline) {
489 GotoEvent(fEventId - 1);
490 StartStopAutoLoadTimer();
491 }
492}
493
d810d0de 494void AliEveEventManager::Close()
5a5a1232 495{
ca49b003 496 // Close the event data-files and delete ESD, ESDfriend, run-loader
497 // and raw-reader.
73c1c0ec 498
2cea771a 499 if (fESDTree) {
500 delete fESD; fESD = 0;
501 delete fESDfriend; fESDfriend = 0;
502
ca49b003 503 delete fESDTree; fESDTree = 0;
504 delete fESDFile; fESDFile = 0;
505 }
506
507 if (fRunLoader) {
508 delete fRunLoader; fRunLoader = 0;
509 }
510
511 if (fRawReader) {
512 delete fRawReader; fRawReader = 0;
2cea771a 513 }
5a5a1232 514}
515
90fa773e 516
57ffa5fb 517/******************************************************************************/
c76ea574 518// Static convenience functions, mainly used from macros.
57ffa5fb 519/******************************************************************************/
5a5a1232 520
d810d0de 521AliRunLoader* AliEveEventManager::AssertRunLoader()
5a5a1232 522{
73c1c0ec 523 // Make sure AliRunLoader is initialized and return it.
524 // Throws exception in case run-loader is not available.
525 // Static utility for macros.
526
a15e6d7d 527 static const TEveException kEH("AliEveEventManager::AssertRunLoader ");
5a5a1232 528
a15e6d7d 529 if (gAliEveEvent == 0)
c2c4b7a2 530 throw (kEH + "ALICE event not ready.");
a15e6d7d 531 if (gAliEveEvent->fRunLoader == 0)
c2c4b7a2 532 throw (kEH + "AliRunLoader not initialised.");
a15e6d7d 533 return gAliEveEvent->fRunLoader;
5a5a1232 534}
535
d810d0de 536AliESDEvent* AliEveEventManager::AssertESD()
5a5a1232 537{
73c1c0ec 538 // Make sure AliESDEvent is initialized and return it.
539 // Throws exception in case ESD is not available.
540 // Static utility for macros.
541
a15e6d7d 542 static const TEveException kEH("AliEveEventManager::AssertESD ");
5a5a1232 543
a15e6d7d 544 if (gAliEveEvent == 0)
c2c4b7a2 545 throw (kEH + "ALICE event not ready.");
a15e6d7d 546 if (gAliEveEvent->fESD == 0)
c2c4b7a2 547 throw (kEH + "AliESD not initialised.");
a15e6d7d 548 return gAliEveEvent->fESD;
5a5a1232 549}
3aecaefc 550
d810d0de 551AliESDfriend* AliEveEventManager::AssertESDfriend()
3aecaefc 552{
73c1c0ec 553 // Make sure AliESDfriend is initialized and return it.
554 // Throws exception in case ESDfriend-loader is not available.
555 // Static utility for macros.
556
a15e6d7d 557 static const TEveException kEH("AliEveEventManager::AssertESDfriend ");
3aecaefc 558
a15e6d7d 559 if (gAliEveEvent == 0)
c2c4b7a2 560 throw (kEH + "ALICE event not ready.");
a15e6d7d 561 if (gAliEveEvent->fESDfriend == 0)
c2c4b7a2 562 throw (kEH + "AliESDfriend not initialised.");
a15e6d7d 563 return gAliEveEvent->fESDfriend;
3aecaefc 564}
93845f6c 565
c2c4b7a2 566AliRawReader* AliEveEventManager::AssertRawReader()
567{
568 // Make sure raw-reader is initialized and return it.
569
570 static const TEveException kEH("AliEveEventManager::AssertRawReader ");
571
572 if (gAliEveEvent == 0)
573 throw (kEH + "ALICE event not ready.");
574 if (gAliEveEvent->fRawReader == 0)
575 throw (kEH + "RawReader not ready.");
576
577 return gAliEveEvent->fRawReader;
578}
579
d810d0de 580AliMagF* AliEveEventManager::AssertMagField()
93845f6c 581{
73c1c0ec 582 // Make sure AliMagF is initialized and return it.
583 // Throws exception in case magnetic field is not available.
584 // Static utility for macros.
585
93845f6c 586 if (fgMagField == 0)
587 {
a15e6d7d 588 if (gAliEveEvent && gAliEveEvent->fRunLoader && gAliEveEvent->fRunLoader->GetAliRun())
589 fgMagField = gAliEveEvent->fRunLoader->GetAliRun()->Field();
93845f6c 590 else
591 fgMagField = new AliMagFMaps("Maps","Maps", 1, 1., 10., AliMagFMaps::k5kG);
592 }
593 return fgMagField;
594}
632d2b03 595
d810d0de 596TGeoManager* AliEveEventManager::AssertGeometry()
632d2b03 597{
73c1c0ec 598 // Make sure AliGeomManager is initialized and returns the
599 // corresponding TGeoManger.
647814a2 600 // gGeoManager is set to the return value.
601 // Throws exception if geometry can not be loaded or if it is not
602 // available and the TGeoManager is locked.
73c1c0ec 603 // Static utility for macros.
604
a15e6d7d 605 static const TEveException kEH("AliEveEventManager::AssertGeometry ");
632d2b03 606
607 if (AliGeomManager::GetGeometry() == 0)
608 {
647814a2 609 if (TGeoManager::IsLocked())
610 throw (kEH + "geometry is not loaded but TGeoManager is locked.");
611
af2e4ef5 612 gGeoManager = 0;
632d2b03 613 AliGeomManager::LoadGeometry();
614 if ( ! AliGeomManager::GetGeometry())
615 {
c2c4b7a2 616 throw (kEH + "can not load geometry.");
632d2b03 617 }
618 if ( ! AliGeomManager::ApplyAlignObjsFromCDB("ITS TPC TRD TOF PHOS HMPID EMCAL MUON FMD ZDC PMD T0 VZERO ACORDE"))
619 {
a15e6d7d 620 ::Warning(kEH, "mismatch of alignable volumes. Proceeding.");
c2c4b7a2 621 // throw (kEH + "could not apply align objs.");
632d2b03 622 }
81515106 623 AliGeomManager::GetGeometry()->DefaultColors();
632d2b03 624 }
625
647814a2 626 gGeoManager = AliGeomManager::GetGeometry();
627 return gGeoManager;
632d2b03 628}
319f3084 629
630void AliEveEventManager::SetAutoLoad(Bool_t autoLoad)
631{
632 // Set the automatic event loading mode
633 fAutoLoad = autoLoad;
634 StartStopAutoLoadTimer();
635}
636
637void AliEveEventManager::SetAutoLoadTime(Double_t time)
638{
639 // Set the auto-load time in seconds
640 fAutoLoadTime = time;
641 StartStopAutoLoadTimer();
642}
643
644void AliEveEventManager::StartStopAutoLoadTimer()
645{
646 // Create if needed and start
647 // the automatic event loading timer
648 if (fAutoLoad) {
649 if (!fAutoLoadTimer) {
650 fAutoLoadTimer = new TTimer;
651 fAutoLoadTimer->Connect("Timeout()","AliEveEventManager",this,"NextEvent()");
652 }
653 fAutoLoadTimer->Start((Long_t)fAutoLoadTime*1000,kTRUE);
654 }
655 else {
656 if (fAutoLoadTimer) fAutoLoadTimer->Stop();
657 }
658}
659
319f3084 660const char* AliEveEventManager::GetEventInfo() const
661{
662 // Dumps the event-header contents
663
664 static TString eventInfo;
665
ec835ab5 666 if (!fRawReader) {
667 eventInfo.Form("No raw-data event info is available!\n");
668 }
669 else {
670 const UInt_t* attr = fRawReader->GetAttributes();
671 eventInfo.Form("Raw-data event info:\nRun#: %d\nEvent type: %d (%s)\nPeriod: %x\nOrbit: %x BC: %x\nTrigger: %llx\nDetectors: %x (%s)\nAttributes:%x-%x-%x\nTimestamp: %x\n",
672 fRawReader->GetRunNumber(),fRawReader->GetType(),AliRawEventHeaderBase::GetTypeName(fRawReader->GetType()),
673 fRawReader->GetPeriod(),fRawReader->GetOrbitID(),fRawReader->GetBCID(),
674 fRawReader->GetClassMask(),
675 *fRawReader->GetDetectorPattern(),AliDAQ::ListOfTriggeredDetectors(*fRawReader->GetDetectorPattern()),
676 attr[0],attr[1],attr[2],
677 fRawReader->GetTimestamp());
678 }
679 if (!fESD) {
680 eventInfo.Append(Form("\nNo ESD event info is available!\n"));
681 }
682 else {
683 TString acttrclasses = fESD->GetESDRun()->GetActiveTriggerClasses();
684 TString firedtrclasses = fESD->GetFiredTriggerClasses();
685 eventInfo.Append(Form("\nESD event info:\nRun#: %d\nActive trigger classes: %s\nEvent type: %d (%s)\nPeriod: %x\nOrbit: %x BC: %x\nTrigger: %llx (%s)\nEvent# in file:%d\nTimestamp: %x\n",
686 fESD->GetRunNumber(),
687 acttrclasses.Data(),
688 fESD->GetEventType(),AliRawEventHeaderBase::GetTypeName(fESD->GetEventType()),
689 fESD->GetPeriodNumber(),fESD->GetOrbitNumber(),fESD->GetBunchCrossNumber(),
690 fESD->GetTriggerMask(),firedtrclasses.Data(),
691 fESD->GetEventNumberInFile(),
692 fESD->GetTimeStamp()));
693 }
319f3084 694
695 return eventInfo.Data();
696}
697