fBufferSize(0),
fEquipmentSize(0),
fDDLIndex(NULL),
- fDDLCurrent(-1)
+ fDDLCurrent(-1),
+ fType(7),
+ fRunNb(0),
+ fDetectorPattern(0),
+ fTimestamp(0)
{
// create an object to read digits from the given event
// in the current directory
fDirectory = OpenDirectory();
- OpenNextFile();
+ if (!fDirectory) fIsValid = kFALSE;
+ if (!OpenNextFile()) fIsValid = kFALSE;
fHeader = new AliRawDataHeader;
+
+ fId[0] = fId[1] = 0;
+ fTriggerPattern[0] = fTriggerPattern[1] = 0;
}
AliRawReaderFile::AliRawReaderFile(const char* dirName, Int_t eventNumber) :
fBufferSize(0),
fEquipmentSize(0),
fDDLIndex(NULL),
- fDDLCurrent(-1)
+ fDDLCurrent(-1),
+ fType(7),
+ fRunNb(0),
+ fDetectorPattern(0),
+ fTimestamp(0)
{
// create an object to read digits from the given directory
fDirectory = OpenDirectory();
- OpenNextFile();
+ if (!fDirectory) fIsValid = kFALSE;
+ if (fEventIndex >= 0 && (!OpenNextFile())) fIsValid = kFALSE;
fHeader = new AliRawDataHeader;
+
+ fId[0] = fId[1] = 0;
+ fTriggerPattern[0] = fTriggerPattern[1] = 0;
}
AliRawReaderFile::~AliRawReaderFile()
while (entry = gSystem->GetDirEntry(fDirectory)) {
const char* filename=entry.Data();
if (!filename || entry.IsNull()) break;
+ if (entry.BeginsWith("run")) {
+ entry.ReplaceAll("run","");
+ fRunNb = entry.Atoi();
+ continue;
+ }
if (!entry.EndsWith(".ddl")) continue;
result=kTRUE;
entry.Remove(0, entry.Last('_')+1);
entry.Remove(entry.Length()-4);
Int_t equipmentId = atoi(entry.Data());
+ Int_t ddlIndex = -1;
+ fDetectorPattern |= (1 << AliDAQ::DetectorIDFromDdlID(equipmentId,ddlIndex));
if (fDDLIndex->GetSize()<=equipmentId) {
fDDLIndex->Set(equipmentId+1);
}
entry.Form("%s_%d.ddl", AliDAQ::DetectorNameFromDdlID(fDDLCurrent, dummy), fDDLCurrent);
char* fileName = gSystem->ConcatFileName(GetDirName(), entry);
if (!fileName) continue;
+ // read the timestamp
+ FileStat_t buf;
+ if (gSystem->GetPathInfo(fileName,buf) == 0) {
+ fTimestamp = buf.fMtime;
+ }
#ifndef __DECCXX
fStream = new fstream(fileName, ios::binary|ios::in);
#else
if (fDDLIndex) delete fDDLIndex;
fDDLIndex=NULL;
+ fDetectorPattern = 0;
if (fEventIndex < -1) return kFALSE;
do {
Reset();
} while (!IsEventSelected());
+ // Read the header of the first payload
+ // in order to fill the 'fake' event header
+ if (ReadHeader() && fHeader) {
+ fId[0] = ((fHeader->GetEventID2() >> 20) & 0xf);
+ fId[1] = (fHeader->GetEventID1() & 0xfff) | ((fHeader->GetEventID2() & 0xfffff) << 12);
+ fTriggerPattern[0] = (fHeader->GetTriggerClasses() & 0xffffffff);
+ fTriggerPattern[1] = ((fHeader->GetTriggerClasses() >> 32) & 0x3ffff);
+ }
+ else {
+ Warning("AliRawReaderFile","Can not read CDH header! The event header fields will be empty!");
+ }
+ Reset();
+
fEventNumber++;
return kTRUE;