+bool AliHLTReadoutList::DetectorDisabled(Int_t detector) const
+{
+ // Checks if a particular detector's DDLs are disabled.
+ // See header file for more details.
+
+ bool result = true;
+ if ((detector & kITSSPD) != 0) result &= fReadoutList.fList[0] == 0x00000000;
+ if ((detector & kITSSDD) != 0) result &= fReadoutList.fList[1] == 0x00000000;
+ if ((detector & kITSSSD) != 0) result &= fReadoutList.fList[2] == 0x00000000;
+ if ((detector & kTPC) != 0)
+ {
+ result &= fReadoutList.fList[3] == 0x00000000;
+ result &= fReadoutList.fList[4] == 0x00000000;
+ result &= fReadoutList.fList[5] == 0x00000000;
+ result &= fReadoutList.fList[6] == 0x00000000;
+ result &= fReadoutList.fList[7] == 0x00000000;
+ result &= fReadoutList.fList[8] == 0x00000000;
+ result &= fReadoutList.fList[9] == 0x00000000;
+ }
+ if ((detector & kTRD) != 0) result &= fReadoutList.fList[11] == 0x00000000;
+ if ((detector & kTOF) != 0)
+ {
+ result &= fReadoutList.fList[12] == 0x00000000;
+ result &= fReadoutList.fList[13] == 0x00000000;
+ result &= fReadoutList.fList[14] == 0x00000000;
+ }
+ if ((detector & kHMPID) != 0) result &= fReadoutList.fList[15] == 0x00000000;
+ if ((detector & kPHOS) != 0) result &= fReadoutList.fList[16] == 0x00000000;
+ if ((detector & kCPV) != 0) result &= fReadoutList.fList[17] == 0x00000000;
+ if ((detector & kPMD) != 0) result &= fReadoutList.fList[18] == 0x00000000;
+ if ((detector & kMUONTRK) != 0) result &= fReadoutList.fList[19] == 0x00000000;
+ if ((detector & kMUONTRG) != 0) result &= fReadoutList.fList[20] == 0x00000000;
+ if ((detector & kFMD) != 0) result &= fReadoutList.fList[21] == 0x00000000;
+ if ((detector & kT0) != 0) result &= fReadoutList.fList[22] == 0x00000000;
+ if ((detector & kV0) != 0) result &= fReadoutList.fList[23] == 0x00000000;
+ if ((detector & kZDC) != 0) result &= fReadoutList.fList[24] == 0x00000000;
+ if ((detector & kACORDE) != 0) result &= fReadoutList.fList[25] == 0x00000000;
+ if ((detector & kTRG) != 0) result &= fReadoutList.fList[26] == 0x00000000;
+#if 1 // ROOT_SVN_REVISION < 9999 //FIXME: after fixed https://savannah.cern.ch/bugs/?69241
+ if (fReadoutList.fCount == (unsigned)gkAliHLTDDLListSizeV0)
+ {
+ if ((detector & kEMCAL) != 0) result &= fReadoutList.fList[27] == 0x00000000;
+ if ((detector & kDAQTEST) != 0) result &= fReadoutList.fList[28] == 0x00000000;
+ if ((detector & kHLT) != 0) result &= fReadoutList.fList[29] == 0x00000000;
+ }
+ else
+#endif
+ {
+ if ((detector & kEMCAL) != 0)
+ {
+ result &= fReadoutList.fList[27] == 0x00000000;
+ result &= fReadoutList.fList[28] == 0x00000000;
+ }
+ if ((detector & kDAQTEST) != 0) result &= fReadoutList.fList[29] == 0x00000000;
+ if ((detector & kHLT) != 0) result &= fReadoutList.fList[30] == 0x00000000;
+ }
+
+ return result;
+}
+
+
+Int_t AliHLTReadoutList::GetFirstWord(EDetectorId detector)
+{
+ // See header file for more details.
+ switch (detector)
+ {
+ case kITSSPD: return 0;
+ case kITSSDD: return 1;
+ case kITSSSD: return 2;
+ case kTPC: return 3;
+ case kTRD: return 11;
+ case kTOF: return 12;
+ case kHMPID: return 15;
+ case kPHOS: return 16;
+ case kCPV: return 17;
+ case kPMD: return 18;
+ case kMUONTRK: return 19;
+ case kMUONTRG: return 20;
+ case kFMD: return 21;
+ case kT0: return 22;
+ case kV0: return 23;
+ case kZDC: return 24;
+ case kACORDE: return 25;
+ case kTRG: return 26;
+ case kEMCAL: return 27;
+ case kDAQTEST: return 29;
+ case kHLT: return 30;
+ default: return -1;
+ }
+}
+
+
+Int_t AliHLTReadoutList::GetWordCount(EDetectorId detector)
+{
+ // See header file for more details.
+ switch (detector)
+ {
+ case kITSSPD: return 1;
+ case kITSSDD: return 1;
+ case kITSSSD: return 1;
+ case kTPC: return 8;
+ case kTRD: return 1;
+ case kTOF: return 3;
+ case kHMPID: return 1;
+ case kPHOS: return 1;
+ case kCPV: return 1;
+ case kPMD: return 1;
+ case kMUONTRK: return 1;
+ case kMUONTRG: return 1;
+ case kFMD: return 1;
+ case kT0: return 1;
+ case kV0: return 1;
+ case kZDC: return 1;
+ case kACORDE: return 1;
+ case kTRG: return 1;
+ case kEMCAL: return 2;
+ case kDAQTEST: return 1;
+ case kHLT: return 1;
+ default: return 0;
+ }
+}
+
+
+AliHLTReadoutList::EDetectorId AliHLTReadoutList::GetDetectorFromWord(Int_t wordindex)
+{
+ // See header file for more details.
+ switch (wordindex)
+ {
+ case 0: return kITSSPD;
+ case 1: return kITSSDD;
+ case 2: return kITSSSD;
+ case 3: return kTPC;
+ case 4: return kTPC;
+ case 5: return kTPC;
+ case 6: return kTPC;
+ case 7: return kTPC;
+ case 8: return kTPC;
+ case 9: return kTPC;
+ case 10: return kTPC;
+ case 11: return kTRD;
+ case 12: return kTOF;
+ case 13: return kTOF;
+ case 14: return kTOF;
+ case 15: return kHMPID;
+ case 16: return kPHOS;
+ case 17: return kCPV;
+ case 18: return kPMD;
+ case 19: return kMUONTRK;
+ case 20: return kMUONTRG;
+ case 21: return kFMD;
+ case 22: return kT0;
+ case 23: return kV0;
+ case 24: return kZDC;
+ case 25: return kACORDE;
+ case 26: return kTRG;
+ case 27: return kEMCAL;
+ case 28: return kEMCAL;
+ case 29: return kDAQTEST;
+ case 30: return kHLT;
+ default: return kNoDetector;
+ }
+}
+
+
+AliHLTReadoutList::EDetectorId AliHLTReadoutList::GetFirstUsedDetector(EDetectorId startAfter) const
+{
+ // See header file for more details.
+
+ if (startAfter < kITSSPD and fReadoutList.fList[0] != 0x00000000) return kITSSPD;
+ if (startAfter < kITSSDD and fReadoutList.fList[1] != 0x00000000) return kITSSDD;
+ if (startAfter < kITSSSD and fReadoutList.fList[2] != 0x00000000) return kITSSSD;
+ if (startAfter < kTPC and fReadoutList.fList[3] != 0x00000000) return kTPC;
+ if (startAfter < kTPC and fReadoutList.fList[4] != 0x00000000) return kTPC;
+ if (startAfter < kTPC and fReadoutList.fList[5] != 0x00000000) return kTPC;
+ if (startAfter < kTPC and fReadoutList.fList[6] != 0x00000000) return kTPC;
+ if (startAfter < kTPC and fReadoutList.fList[7] != 0x00000000) return kTPC;
+ if (startAfter < kTPC and fReadoutList.fList[8] != 0x00000000) return kTPC;
+ if (startAfter < kTPC and fReadoutList.fList[9] != 0x00000000) return kTPC;
+ if (startAfter < kTPC and fReadoutList.fList[10] != 0x00000000) return kTPC;
+ if (startAfter < kTRD and fReadoutList.fList[11] != 0x00000000) return kTRD;
+ if (startAfter < kTOF and fReadoutList.fList[12] != 0x00000000) return kTOF;
+ if (startAfter < kTOF and fReadoutList.fList[13] != 0x00000000) return kTOF;
+ if (startAfter < kTOF and fReadoutList.fList[14] != 0x00000000) return kTOF;
+ if (startAfter < kHMPID and fReadoutList.fList[15] != 0x00000000) return kHMPID;
+ if (startAfter < kPHOS and fReadoutList.fList[16] != 0x00000000) return kPHOS;
+ if (startAfter < kCPV and fReadoutList.fList[17] != 0x00000000) return kCPV;
+ if (startAfter < kPMD and fReadoutList.fList[18] != 0x00000000) return kPMD;
+ if (startAfter < kMUONTRK and fReadoutList.fList[19] != 0x00000000) return kMUONTRK;
+ if (startAfter < kMUONTRG and fReadoutList.fList[20] != 0x00000000) return kMUONTRG;
+ if (startAfter < kFMD and fReadoutList.fList[21] != 0x00000000) return kFMD;
+ if (startAfter < kT0 and fReadoutList.fList[22] != 0x00000000) return kT0;
+ if (startAfter < kV0 and fReadoutList.fList[23] != 0x00000000) return kV0;
+ if (startAfter < kZDC and fReadoutList.fList[24] != 0x00000000) return kZDC;
+ if (startAfter < kACORDE and fReadoutList.fList[25] != 0x00000000) return kACORDE;
+ if (startAfter < kTRG and fReadoutList.fList[26] != 0x00000000) return kTRG;
+ if (startAfter < kEMCAL and fReadoutList.fList[27] != 0x00000000) return kEMCAL;
+#if 1 // ROOT_SVN_REVISION < 9999 //FIXME: after fixed https://savannah.cern.ch/bugs/?69241
+ // Check if we need to convert to new format and do so.
+ if (fReadoutList.fCount == (unsigned)gkAliHLTDDLListSizeV0)
+ {
+ if (startAfter < kDAQTEST and fReadoutList.fList[28] != 0x00000000) return kDAQTEST;
+ if (startAfter < kHLT and fReadoutList.fList[29] != 0x00000000) return kHLT;
+ }
+ else
+#endif
+ {
+ if (startAfter < kEMCAL and fReadoutList.fList[28] != 0x00000000) return kEMCAL;
+ if (startAfter < kDAQTEST and fReadoutList.fList[29] != 0x00000000) return kDAQTEST;
+ if (startAfter < kHLT and fReadoutList.fList[30] != 0x00000000) return kHLT;
+ }
+ return kNoDetector;
+}
+
+