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"
11 #include "AliEveMacroExecutor.h"
12 #include <TEveManager.h>
14 #include <AliRunLoader.h>
16 #include <AliESDEvent.h>
17 #include <AliESDfriend.h>
19 #include <AliRawEventHeaderBase.h>
20 #include <AliRawReaderRoot.h>
21 #include <AliRawReaderFile.h>
22 #include <AliRawReaderDate.h>
23 #include <AliMagFMaps.h>
24 #include <AliCDBManager.h>
25 #include <AliHeader.h>
26 #include <AliGeomManager.h>
30 #include <TGeoManager.h>
32 #include <TTimeStamp.h>
34 //==============================================================================
35 //==============================================================================
37 //==============================================================================
39 //______________________________________________________________________________
41 // Provide interface for loading and navigating standard AliRoot data
42 // (AliRunLoader) and ESDs.
44 // Missing support for raw-data. For now this is handled individually
45 // by each sub-detector.
47 // Also provides interface to magnetic-field and geometry. Mostly
48 // intended as wrappers over standard AliRoot functionality for
49 // convenient use from visualizateion macros.
51 ClassImp(AliEveEventManager)
53 AliEveEventManager* gAliEveEvent = 0;
55 Bool_t AliEveEventManager::fgAssertRunLoader = kFALSE;
56 Bool_t AliEveEventManager::fgAssertESD = kFALSE;
57 Bool_t AliEveEventManager::fgAssertRaw = kFALSE;
59 TString AliEveEventManager::fgESDFileName("AliESDs.root");
60 TString AliEveEventManager::fgRawFileName("raw.root");
61 TString AliEveEventManager::fgCdbUri("local://$ALICE_ROOT");
63 AliMagF* AliEveEventManager::fgMagField = 0;
65 void AliEveEventManager::InitInternals()
67 // Initialize internal members.
69 fAutoLoadTimer = new TTimer;
70 fAutoLoadTimer->Connect("Timeout()", "AliEveEventManager", this, "AutoLoadNextEvent()");
72 fExecutor = new AliEveMacroExecutor;
75 AliEveEventManager::AliEveEventManager() :
78 fPath ( ), fEventId (-1),
80 fESDFile (0), fESDTree (0), fESD (0),
81 fESDfriend (0), fESDfriendExists(kFALSE),
83 fAutoLoad (kFALSE), fAutoLoadTime (5.), fAutoLoadTimer(0),
84 fIsOpen (kFALSE), fHasEvent (kFALSE), fExternalCtrl (kFALSE),
86 fAutoLoadTimerRunning(kFALSE)
88 // Default constructor.
93 AliEveEventManager::AliEveEventManager(TString path, Int_t ev) :
94 TEveEventManager("AliEVE AliEveEventManager"),
96 fPath (path), fEventId(-1),
98 fESDFile (0), fESDTree (0), fESD (0),
99 fESDfriend (0), fESDfriendExists(kFALSE),
101 fAutoLoad (kFALSE), fAutoLoadTime (5), fAutoLoadTimer(0),
102 fIsOpen (kFALSE), fHasEvent (kFALSE), fExternalCtrl (kFALSE),
104 fAutoLoadTimerRunning(kFALSE)
106 // Constructor with event-directory URL and event-id.
117 AliEveEventManager::~AliEveEventManager()
126 // Somewhat unclear what to do here.
127 // In principle should wipe event data and deregister from
131 /******************************************************************************/
133 void AliEveEventManager::SetESDFileName(const Text_t* esd)
135 // Set file-name for opening ESD, default "AliESDs.root".
137 if (esd) fgESDFileName = esd;
140 void AliEveEventManager::SetRawFileName(const Text_t* raw)
142 // Set file-name for opening of raw-data, default "raw.root"
143 if (raw) fgRawFileName = raw;
146 void AliEveEventManager::SetCdbUri(const Text_t* cdb)
148 // Set path to CDB, default "local://$ALICE_ROOT".
150 if (cdb) fgCdbUri = cdb;
153 void AliEveEventManager::SetAssertElements(Bool_t assertRunloader,
157 // Set global flags that detrmine which parts of the event-data must
158 // be present when the event is opened.
160 fgAssertRunLoader = assertRunloader;
161 fgAssertESD = assertEsd;
162 fgAssertRaw = assertRaw;
165 /******************************************************************************/
167 void AliEveEventManager::Open()
169 // Open event-data from URL specified in fPath.
170 // Attempts to create AliRunLoader() and to open ESD with ESDfriends.
171 // Warning is reported if run-loader or ESD is not found.
172 // Global data-members fgAssertRunLoader and fgAssertESD can be set
173 // to throw exceptions instead.
175 static const TEveException kEH("AliEveEventManager::Open ");
179 throw (kEH + "Event-loop is under external control.");
183 throw (kEH + "Event-files already opened.");
186 gSystem->ExpandPathName(fPath);
187 // The following magick is required for ESDriends to be loaded properly
188 // from non-current directory.
189 if (fPath.IsNull() || fPath == ".")
191 fPath = gSystem->WorkingDirectory();
193 else if ( ! fPath.BeginsWith("file:/"))
195 TUrl url(fPath, kTRUE);
196 TString protocol(url.GetProtocol());
197 if (protocol == "file" && fPath[0] != '/')
198 fPath = Form("%s/%s", gSystem->WorkingDirectory(), fPath.Data());
203 // Open ESD and ESDfriends
205 TString esdPath(Form("%s/%s", fPath.Data(), fgESDFileName.Data()));
206 if ((fESDFile = TFile::Open(esdPath)))
208 fESD = new AliESDEvent();
209 fESDTree = (TTree*) fESDFile->Get("esdTree");
212 // Check if ESDfriends exists and attach the branch.
213 // We use TFile::Open() instead of gSystem->AccessPathName
214 // as it seems to work better when attachine alieve to a
215 // running reconstruction process with auto-save on.
216 // There was also a problem with TTree::Refresh() - it didn't
217 // save the friend branch on a separate file, fixed in 5.22.2 -
218 // so we might want to try the old way again soon.
219 TString p(Form("%s/AliESDfriends.root", fPath.Data()));
220 TFile *esdFriendFile = TFile::Open(p);
223 if (!esdFriendFile->IsZombie())
225 esdFriendFile->Close();
226 fESDfriendExists = kTRUE;
227 fESDTree->SetBranchStatus ("ESDfriend*", 1);
229 delete esdFriendFile;
232 fESD->ReadFromTree(fESDTree);
233 if (fESDfriendExists)
235 fESDfriend = (AliESDfriend*) fESD->FindListObject("AliESDfriend");
236 Info(kEH, "found and attached ESD friend.");
240 Warning(kEH, "ESDfriend not found.");
243 if (fESDTree->GetEntry(0) <= 0)
245 delete fESDFile; fESDFile = 0;
246 delete fESD; fESD = 0;
247 Warning(kEH, "failed getting the first entry from esdTree.");
252 runNo = fESD->GetESDRun()->GetRunNumber();
257 delete fESDFile; fESDFile = 0;
258 delete fESD; fESD = 0;
259 Warning(kEH, "failed getting the esdTree.");
262 else // esd not readable
264 Warning(kEH, "can not read ESD file '%s'.", esdPath.Data());
270 throw (kEH + "ESD not initialized. Its precence was requested.");
272 Warning(kEH, "ESD not initialized.");
276 // Open RunLoader from galice.root
278 TString gaPath(Form("%s/galice.root", fPath.Data()));
279 // If i use open directly, we get fatal.
280 // Is AccessPathName check ok for xrootd / alien? Yes, not for http.
281 if (gSystem->AccessPathName(gaPath, kReadPermission) == kFALSE)
283 fRunLoader = AliRunLoader::Open(gaPath);
286 TString alicePath = fPath + "/";
287 fRunLoader->SetDirName(alicePath);
289 if (fRunLoader->LoadgAlice() != 0)
290 Warning(kEH, "failed loading gAlice via run-loader.");
292 if (fRunLoader->LoadHeader() == 0)
295 runNo = fRunLoader->GetHeader()->GetRun();
299 Warning(kEH, "failed loading run-loader's header.");
304 else // run-loader open failed
306 Warning(kEH, "failed opening ALICE run-loader from '%s'.", gaPath.Data());
309 else // galice not readable
311 Warning(kEH, "can not read '%s'.", gaPath.Data());
315 if (fgAssertRunLoader)
316 throw (kEH + "Bootstraping of run-loader failed. Its precence was requested.");
318 Warning(kEH, "Bootstraping of run-loader failed.");
321 // Open raw-data file
323 TString rawPath(Form("%s/%s", fPath.Data(), fgRawFileName.Data()));
324 // If i use open directly, raw-reader reports an error but i have
325 // no way to detect it.
326 // Is this (AccessPathName check) ok for xrootd / alien? Yes, not for http.
327 AliLog::EType_t oldLogLevel = (AliLog::EType_t) AliLog::GetGlobalLogLevel();
328 if (fgAssertRaw == kFALSE)
330 AliLog::SetGlobalLogLevel(AliLog::kFatal);
332 if (gSystem->AccessPathName(rawPath, kReadPermission) == kFALSE)
334 fRawReader = AliRawReader::Create(rawPath);
338 fRawReader = AliRawReader::Create(fgRawFileName);
340 if (fgAssertRaw == kFALSE)
342 AliLog::SetGlobalLogLevel(oldLogLevel);
349 throw (kEH + "raw-data not initialized. Its precence was requested.");
351 Warning(kEH, "raw-data not initialized.");
359 fRawReader->NextEvent();
360 runNo = fRawReader->GetRunNumber();
361 Info(kEH, "Determining run-no from raw ... run=%d.", runNo);
362 fRawReader->RewindEvents();
364 throw (kEH + "unknown run number.");
369 AliCDBManager* cdb = AliCDBManager::Instance();
370 cdb->SetDefaultStorage(fgCdbUri);
371 if (cdb->IsDefaultStorageSet() == kFALSE)
372 throw (kEH + "CDB initialization failed.");
376 SetName(Form("Event %d", fEventId));
381 void AliEveEventManager::SetEvent(AliRunLoader *runLoader, AliRawReader *rawReader, AliESDEvent *esd)
383 // Set an event from an external source
384 // The method is used in the online visualisation
386 static const TEveException kEH("AliEveEventManager::SetEvent ");
390 Warning(kEH, "Event-files were open. Closing and switching to external control.");
394 fRunLoader = runLoader;
395 fRawReader = rawReader;
400 fExternalCtrl = kTRUE;
402 SetTitle("Online event in memory");
403 SetName ("Online Event");
406 AfterNewEventLoaded();
408 if (fAutoLoad) StartAutoLoadTimer();
411 Int_t AliEveEventManager::GetMaxEventId(Bool_t /*refreshESD*/) const
413 // Returns maximum available event id.
414 // If under external control or event is not opened -1 is returned.
415 // If raw-data is the only data-source this can not be known
416 // and 10,000,000 is returned.
417 // If neither data-source is initialised an exception is thrown.
418 // If refresh_esd is true and ESD is the primary event-data source
419 // its header is re-read from disk.
421 static const TEveException kEH("AliEveEventManager::GetMaxEventId ");
423 if (fExternalCtrl || fIsOpen == kFALSE)
430 // Refresh crashes with root-5.21.1-alice.
431 // Fixed by Philippe 5.8.2008 r25053, can be reactivated
432 // when we move to a newer root.
434 // fESDTree->Refresh();
435 return fESDTree->GetEntries() - 1;
439 return fRunLoader->GetNumberOfEvents() - 1;
443 Int_t n = fRawReader->GetNumberOfEvents() - 1;
444 return n > -1 ? n : 10000000;
448 throw (kEH + "neither RunLoader, ESD nor Raw loaded.");
452 void AliEveEventManager::GotoEvent(Int_t event)
454 // Load data for specified event.
455 // If event is out of range an exception is thrown and old state
457 // After successful loading of event, the virtual function
458 // AfterNewEventLoaded() is called. This executes commands that
459 // were registered via TEveEventManager::AddNewEventCommand().
461 // If event is negative, it is subtracted from the number of
462 // available events, thus passing -1 will load the last event.
463 // This is not supported when raw-data is the only data-source
464 // as the number of events is not known.
466 static const TEveException kEH("AliEveEventManager::GotoEvent ");
468 if (fAutoLoadTimerRunning)
470 throw (kEH + "Event auto-load timer is running.");
474 throw (kEH + "Event-loop is under external control.");
478 throw (kEH + "Event-files not opened.");
486 // Refresh crashes with root-5.21.1-alice.
487 // Fixed by Philippe 5.8.2008 r25053, can be reactivated
488 // when we move to a newer root.
489 // fESDTree->Refresh();
490 maxEvent = fESDTree->GetEntries() - 1;
492 event = fESDTree->GetEntries() + event;
496 maxEvent = fRunLoader->GetNumberOfEvents() - 1;
498 event = fRunLoader->GetNumberOfEvents() + event;
502 maxEvent = fRawReader->GetNumberOfEvents() - 1;
507 Error(kEH, "current raw-data source does not support direct event access.");
510 Info(kEH, "number of events unknown for current raw-data source, setting max-event id to 10M.");
515 event = fRawReader->GetNumberOfEvents() + event;
520 throw (kEH + "neither RunLoader, ESD nor Raw loaded.");
522 if (event < 0 || event > maxEvent)
524 throw (kEH + Form("event %d not present, available range [%d, %d].",
525 event, 0, maxEvent));
528 TEveManager::TRedrawDisabler rd(gEve);
529 gEve->Redraw3D(kFALSE, kTRUE); // Enforce drop of all logicals.
531 // !!! MT this is somewhat brutal; at least optionally, one could be
532 // a bit gentler, checking for objs owning their external refs and having
533 // additinal parents.
537 if (fESDTree->GetEntry(event) <= 0)
538 throw (kEH + "failed getting required event from ESD.");
540 if (fESDfriendExists)
541 fESD->SetESDfriend(fESDfriend);
545 if (fRunLoader->GetEvent(event) != 0)
546 throw (kEH + "failed getting required event.");
551 // AliRawReader::GotoEvent(Int_t) works for AliRawReaderRoot/Chain.
552 if (fRawReader->GotoEvent(event) == kFALSE)
554 // Use fallback method - iteration with NextEvent().
555 Int_t rawEv = fEventId;
558 fRawReader->RewindEvents();
562 while (rawEv < event)
564 if ( ! fRawReader->NextEvent())
566 fRawReader->RewindEvents();
568 throw (kEH + Form("Error going to next raw-event from event %d.", rawEv));
572 Warning(kEH, "Loaded raw-event %d with fallback method.\n", rawEv);
578 SetName(Form("Event %d", fEventId));
581 AfterNewEventLoaded();
584 void AliEveEventManager::NextEvent()
587 // Does magick needed for online display when under external event control.
589 static const TEveException kEH("AliEveEventManager::NextEvent ");
591 if (fAutoLoadTimerRunning)
593 throw (kEH + "Event auto-load timer is running.");
598 // !!! This should really go somewhere else. It is done in GotoEvent(),
599 // so here we should do it in SetEvent().
606 if (fEventId < GetMaxEventId(kTRUE))
607 GotoEvent(fEventId + 1);
613 void AliEveEventManager::PrevEvent()
615 // Loads previous event.
617 static const TEveException kEH("AliEveEventManager::PrevEvent ");
619 if (fAutoLoadTimerRunning)
621 throw (kEH + "Event auto-load timer is running.");
625 throw (kEH + "Event-loop is under external control.");
628 GotoEvent(fEventId - 1);
631 void AliEveEventManager::Close()
633 // Close the event data-files and delete ESD, ESDfriend, run-loader
636 static const TEveException kEH("AliEveEventManager::Close ");
640 throw (kEH + "Event-files not opened.");
643 if (fAutoLoadTimerRunning)
647 delete fESD; fESD = 0;
648 delete fESDfriend; fESDfriend = 0;
649 fESDfriendExists = kFALSE;
651 delete fESDTree; fESDTree = 0;
652 delete fESDFile; fESDFile = 0;
656 delete fRunLoader; fRunLoader = 0;
660 delete fRawReader; fRawReader = 0;
669 //------------------------------------------------------------------------------
670 // Static convenience functions, mainly used from macros.
671 //------------------------------------------------------------------------------
673 Bool_t AliEveEventManager::HasRunLoader()
675 // Check if AliRunLoader is initialized.
677 return gAliEveEvent && gAliEveEvent->fHasEvent && gAliEveEvent->fRunLoader;
680 Bool_t AliEveEventManager::HasESD()
682 // Check if AliESDEvent is initialized.
684 return gAliEveEvent && gAliEveEvent->fHasEvent && gAliEveEvent->fESD;
687 Bool_t AliEveEventManager::HasESDfriend()
689 // Check if AliESDfriend is initialized.
691 return gAliEveEvent && gAliEveEvent->fHasEvent && gAliEveEvent->fESDfriend;
694 Bool_t AliEveEventManager::HasRawReader()
696 // Check if raw-reader is initialized.
698 return gAliEveEvent && gAliEveEvent->fHasEvent && gAliEveEvent->fRawReader;
701 AliRunLoader* AliEveEventManager::AssertRunLoader()
703 // Make sure AliRunLoader is initialized and return it.
704 // Throws exception in case run-loader is not available.
705 // Static utility for macros.
707 static const TEveException kEH("AliEveEventManager::AssertRunLoader ");
709 if (gAliEveEvent == 0 || gAliEveEvent->fHasEvent == kFALSE)
710 throw (kEH + "ALICE event not ready.");
711 if (gAliEveEvent->fRunLoader == 0)
712 throw (kEH + "AliRunLoader not initialised.");
713 return gAliEveEvent->fRunLoader;
716 AliESDEvent* AliEveEventManager::AssertESD()
718 // Make sure AliESDEvent is initialized and return it.
719 // Throws exception in case ESD is not available.
720 // Static utility for macros.
722 static const TEveException kEH("AliEveEventManager::AssertESD ");
724 if (gAliEveEvent == 0 || gAliEveEvent->fHasEvent == kFALSE)
725 throw (kEH + "ALICE event not ready.");
726 if (gAliEveEvent->fESD == 0)
727 throw (kEH + "AliESD not initialised.");
728 return gAliEveEvent->fESD;
731 AliESDfriend* AliEveEventManager::AssertESDfriend()
733 // Make sure AliESDfriend is initialized and return it.
734 // Throws exception in case ESDfriend-loader is not available.
735 // Static utility for macros.
737 static const TEveException kEH("AliEveEventManager::AssertESDfriend ");
739 if (gAliEveEvent == 0 || gAliEveEvent->fHasEvent == kFALSE)
740 throw (kEH + "ALICE event not ready.");
741 if (gAliEveEvent->fESDfriend == 0)
742 throw (kEH + "AliESDfriend not initialised.");
743 return gAliEveEvent->fESDfriend;
746 AliRawReader* AliEveEventManager::AssertRawReader()
748 // Make sure raw-reader is initialized and return it.
750 static const TEveException kEH("AliEveEventManager::AssertRawReader ");
752 if (gAliEveEvent == 0 || gAliEveEvent->fHasEvent == kFALSE)
753 throw (kEH + "ALICE event not ready.");
754 if (gAliEveEvent->fRawReader == 0)
755 throw (kEH + "RawReader not ready.");
757 return gAliEveEvent->fRawReader;
760 AliMagF* AliEveEventManager::AssertMagField()
762 // Make sure AliMagF is initialized and returns it.
763 // Run-loader must be initialized to get the correct magnetic field!
764 // Throws exception in case magnetic field is not available.
765 // Static utility for macros.
767 // !!!! This should be fixed ... get field also in some other way,
768 // not only via run-loader.
772 if (gAliEveEvent && gAliEveEvent->fRunLoader && gAliEveEvent->fRunLoader->GetAliRun())
773 fgMagField = gAliEveEvent->fRunLoader->GetAliRun()->Field();
775 fgMagField = new AliMagFMaps("Maps","Maps", 1, 1., 10., AliMagFMaps::k5kG);
780 TGeoManager* AliEveEventManager::AssertGeometry()
782 // Make sure AliGeomManager is initialized and returns the
783 // corresponding TGeoManger.
784 // gGeoManager is set to the return value.
785 // Throws exception if geometry can not be loaded or if it is not
786 // available and the TGeoManager is locked.
787 // Static utility for macros.
789 static const TEveException kEH("AliEveEventManager::AssertGeometry ");
791 if (AliGeomManager::GetGeometry() == 0)
793 if (TGeoManager::IsLocked())
794 throw (kEH + "geometry is not loaded but TGeoManager is locked.");
797 AliGeomManager::LoadGeometry();
798 if ( ! AliGeomManager::GetGeometry())
800 throw (kEH + "can not load geometry.");
802 if ( ! AliGeomManager::ApplyAlignObjsFromCDB("ITS TPC TRD TOF PHOS HMPID EMCAL MUON FMD ZDC PMD T0 VZERO ACORDE"))
804 ::Warning(kEH, "mismatch of alignable volumes. Proceeding.");
805 // throw (kEH + "could not apply align objs.");
807 AliGeomManager::GetGeometry()->DefaultColors();
810 gGeoManager = AliGeomManager::GetGeometry();
815 //------------------------------------------------------------------------------
816 // Autoloading of events
817 //------------------------------------------------------------------------------
819 void AliEveEventManager::SetAutoLoadTime(Float_t time)
821 // Set the auto-load time in seconds
823 fAutoLoadTime = time;
826 void AliEveEventManager::SetAutoLoad(Bool_t autoLoad)
828 // Set the automatic event loading mode
830 static const TEveException kEH("AliEveEventManager::SetAutoLoad ");
832 if (fAutoLoad == autoLoad)
834 Warning(kEH, "Setting autoload to the same value as before - %s. Ignoring.", fAutoLoad ? "true" : "false");
838 fAutoLoad = autoLoad;
841 StartAutoLoadTimer();
849 void AliEveEventManager::StartAutoLoadTimer()
851 // Start the auto-load timer.
853 fAutoLoadTimer->SetTime((Long_t)(1000*fAutoLoadTime));
854 fAutoLoadTimer->Reset();
855 fAutoLoadTimer->TurnOn();
856 fAutoLoadTimerRunning = kTRUE;
859 void AliEveEventManager::StopAutoLoadTimer()
861 // Stop the auto-load timer.
863 fAutoLoadTimerRunning = kFALSE;
864 fAutoLoadTimer->TurnOff();
867 void AliEveEventManager::AutoLoadNextEvent()
869 // Called from auto-load timer, so it has to be public.
870 // Do NOT call it directly.
872 static const TEveException kEH("AliEveEventManager::AutoLoadNextEvent ");
874 if ( ! fAutoLoadTimerRunning || ! fAutoLoadTimer->HasTimedOut())
876 Warning(kEH, "Called unexpectedly - ignoring the call. Should ONLY be called from an internal timer.");
882 if (fAutoLoad && !fExternalCtrl)
883 StartAutoLoadTimer();
887 //------------------------------------------------------------------------------
888 // Post event-loading functions
889 //------------------------------------------------------------------------------
891 void AliEveEventManager::AfterNewEventLoaded()
893 // Execute registered macros and commands.
894 // At the end emit NewEventLoaded signal.
896 // Virtual from TEveEventManager.
899 fExecutor->ExecMacros();
901 TEveEventManager::AfterNewEventLoaded();
906 void AliEveEventManager::NewEventLoaded()
908 // Emit NewEventLoaded signal.
910 Emit("NewEventLoaded()");
914 //------------------------------------------------------------------------------
915 // Event info dumpers
916 //------------------------------------------------------------------------------
918 TString AliEveEventManager::GetEventInfoHorizontal() const
920 // Dumps the event-header contents in vertical formatting.
922 TString rawInfo, esdInfo;
926 rawInfo = "No raw-data event info is available!\n";
930 const UInt_t* attr = fRawReader->GetAttributes();
931 TTimeStamp ts(fRawReader->GetTimestamp());
932 rawInfo.Form("RAW event info: Run#: %d Event type: %d (%s) Period: %x Orbit: %x BC: %x\n"
933 "Trigger: %llx\nDetectors: %x (%s)\nAttributes:%x-%x-%x Timestamp: %s\n",
934 fRawReader->GetRunNumber(),fRawReader->GetType(),AliRawEventHeaderBase::GetTypeName(fRawReader->GetType()),
935 fRawReader->GetPeriod(),fRawReader->GetOrbitID(),fRawReader->GetBCID(),
936 fRawReader->GetClassMask(),
937 *fRawReader->GetDetectorPattern(),AliDAQ::ListOfTriggeredDetectors(*fRawReader->GetDetectorPattern()),
938 attr[0],attr[1],attr[2], ts.AsString("s"));
943 esdInfo = "No ESD event info is available!";
947 TString acttrclasses = fESD->GetESDRun()->GetActiveTriggerClasses();
948 TString firedtrclasses = fESD->GetFiredTriggerClasses();
949 TTimeStamp ts(fESD->GetTimeStamp());
950 esdInfo.Form("ESD event info: Run#: %d Event type: %d (%s) Period: %x Orbit: %x BC: %x\n"
951 "Active trigger classes: %s\nTrigger: %llx (%s)\nEvent# in file: %d Timestamp: %s",
952 fESD->GetRunNumber(),
953 fESD->GetEventType(),AliRawEventHeaderBase::GetTypeName(fESD->GetEventType()),
954 fESD->GetPeriodNumber(),fESD->GetOrbitNumber(),fESD->GetBunchCrossNumber(),
956 fESD->GetTriggerMask(),firedtrclasses.Data(),
957 fESD->GetEventNumberInFile(), ts.AsString("s"));
960 return rawInfo + esdInfo;
963 TString AliEveEventManager::GetEventInfoVertical() const
965 // Dumps the event-header contents in vertical formatting.
967 TString rawInfo, esdInfo;
971 rawInfo = "No raw-data event info is available!\n";
975 const UInt_t* attr = fRawReader->GetAttributes();
976 rawInfo.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",
977 fRawReader->GetRunNumber(),fRawReader->GetType(),AliRawEventHeaderBase::GetTypeName(fRawReader->GetType()),
978 fRawReader->GetPeriod(),fRawReader->GetOrbitID(),fRawReader->GetBCID(),
979 fRawReader->GetClassMask(),
980 *fRawReader->GetDetectorPattern(),AliDAQ::ListOfTriggeredDetectors(*fRawReader->GetDetectorPattern()),
981 attr[0],attr[1],attr[2],
982 fRawReader->GetTimestamp());
987 esdInfo = "No ESD event info is available!\n";
991 TString acttrclasses = fESD->GetESDRun()->GetActiveTriggerClasses();
992 TString firedtrclasses = fESD->GetFiredTriggerClasses();
993 esdInfo.Form("ESD 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",
994 fESD->GetRunNumber(),
996 fESD->GetEventType(),AliRawEventHeaderBase::GetTypeName(fESD->GetEventType()),
997 fESD->GetPeriodNumber(),fESD->GetOrbitNumber(),fESD->GetBunchCrossNumber(),
998 fESD->GetTriggerMask(),firedtrclasses.Data(),
999 fESD->GetEventNumberInFile(),
1000 fESD->GetTimeStamp());
1003 return rawInfo + "\n" + esdInfo;