// Open raw-data file
TString rawPath(Form("%s/%s", fPath.Data(), fgRawFileName.Data()));
- // If i use open directly, raw-reader reports an error but i have
- // no way to detect it.
- // Is this (AccessPathName check) ok for xrootd / alien? Yes, not for http.
- if (gSystem->AccessPathName(rawPath, kReadPermission) == kFALSE)
+ // If i use open directly, raw-reader reports an error but i have
+ // no way to detect it.
+ // Is this (AccessPathName check) ok for xrootd / alien? Yes, not for http.
+ if (gSystem->AccessPathName(rawPath, kReadPermission) == kFALSE)
{
fRawReader = AliRawReader::Create(rawPath);
}
-
+ else
+ {
+ fRawReader = AliRawReader::Create(fgRawFileName);
+ }
if (fRawReader == 0)
{
if (fgAssertRaw)
AfterNewEventLoaded();
}
-Int_t AliEveEventManager::GetMaxEventId(Bool_t refreshESD) const
+Int_t AliEveEventManager::GetMaxEventId(Bool_t /*refreshESD*/) const
{
// Returns maximum available event id.
// If raw-data is the only data-source this can not be known
static const TEveException kEH("AliEveEventManager::GetMaxEventId ");
- if (fRunLoader)
+ if (fESDTree)
{
- return fRunLoader->GetNumberOfEvents() - 1;
+ // Refresh crashes with root-5.21.1-alice.
+ // Fixed by Philippe 5.8.2008 r25053, can be reactivated
+ // when we move to a newer root.
+ // if (refreshESD)
+ // fESDTree->Refresh();
+ return fESDTree->GetEntries() - 1;
}
- else if (fESDTree)
+ else if (fRunLoader)
{
- if (refreshESD)
- fESDTree->Refresh();
- return fESDTree->GetEntries() - 1;
+ return fRunLoader->GetNumberOfEvents() - 1;
}
else if (fRawReader)
{
- return 10000000;
+ Int_t n = fRawReader->GetNumberOfEvents() - 1;
+ return n > -1 ? n : 10000000;
}
else
{
}
else if (fRawReader)
{
- maxEvent = 10000000;
- if (event < 0) {
- Error(kEH, "negative event id passed for raw-data as source. Operation not supported.");
- return;
+ maxEvent = fRawReader->GetNumberOfEvents() - 1;
+ if (maxEvent < 0)
+ {
+ maxEvent = 10000000;
+ if (event < 0) {
+ Error(kEH, "current raw-data source does not support direct event access.");
+ return;
+ }
+ Info(kEH, "number of events unknown for current raw-data source, setting max-event id to 10M.");
+ }
+ else
+ {
+ if (event < 0)
+ event = fRawReader->GetNumberOfEvents() + event;
}
- Info(kEH, "number of events unknown for raw-data, setting max-event id to 10M.");
}
else
{
ElementChanged();
AfterNewEventLoaded();
+ NewEventLoaded();
}
void AliEveEventManager::NextEvent()
// either in automatic (online) or
// manual mode
- if (fIsOnline) {
+ if (fIsOnline)
+ {
if (fAutoLoadTimer) fAutoLoadTimer->Stop();
DestroyElements();
gSystem->ExitLoop();
}
- else {
+ else
+ {
if (fEventId < GetMaxEventId(kTRUE))
GotoEvent(fEventId + 1);
else
{
// Create if needed and start
// the automatic event loading timer
- if (fAutoLoad) {
- if (!fAutoLoadTimer) {
+ if (fAutoLoad)
+ {
+ if (!fAutoLoadTimer)
+ {
fAutoLoadTimer = new TTimer;
fAutoLoadTimer->Connect("Timeout()","AliEveEventManager",this,"NextEvent()");
}
fAutoLoadTimer->Start((Long_t)fAutoLoadTime*1000,kTRUE);
}
- else {
+ else
+ {
if (fAutoLoadTimer) fAutoLoadTimer->Stop();
}
}
+void AliEveEventManager::NewEventLoaded()
+{
+ // Emit NewEventLoaded signal.
+
+ Emit("NewEventLoaded()");
+}
+
const char* AliEveEventManager::GetEventInfo() const
{
// Dumps the event-header contents