Update of the CTP raw-data reader. Trigger inputs added. Event orbit and bunch-crossi...
authorcvetan <cvetan@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 14 Jul 2008 14:34:32 +0000 (14:34 +0000)
committercvetan <cvetan@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 14 Jul 2008 14:34:32 +0000 (14:34 +0000)
STEER/AliCTPRawStream.cxx
STEER/AliCTPRawStream.h

index df56a32..44987c2 100644 (file)
@@ -35,6 +35,11 @@ ClassImp(AliCTPRawStream)
 //_____________________________________________________________________________
 AliCTPRawStream::AliCTPRawStream(AliRawReader* rawReader) :
   fIRArray("AliTriggerIR",3),
+  fOrbit(0),
+  fBC(0),
+  fL0TriggerInputs(0),
+  fL1TriggerInputs(0),
+  fL2TriggerInputs(0),
   fClassMask(0),
   fClusterMask(0),
   fRawReader(rawReader)
@@ -52,6 +57,11 @@ AliCTPRawStream::AliCTPRawStream(AliRawReader* rawReader) :
 AliCTPRawStream::AliCTPRawStream(const AliCTPRawStream& stream) :
   TObject(stream),
   fIRArray("AliTriggerIR",3),
+  fOrbit(0),
+  fBC(0),
+  fL0TriggerInputs(0),
+  fL1TriggerInputs(0),
+  fL2TriggerInputs(0),
   fClassMask(0),
   fClusterMask(0),
   fRawReader(NULL)
@@ -109,6 +119,14 @@ Bool_t AliCTPRawStream::Next()
     return kFALSE;
   }
 
+  fBC = data[0];
+  fBC |= (data[1] & 0xF) << 8;
+
+  fOrbit = data[4] << 12;
+  fOrbit |= (data[5] & 0xF) << 20;
+  fOrbit |= data[8];
+  fOrbit |= (data[9] & 0xF) << 8;
+
   fClusterMask = data[12] >> 2;
 
   fClassMask =  ((ULong64_t)data[12] & 0x3) << 48;
@@ -126,17 +144,43 @@ Bool_t AliCTPRawStream::Next()
   fClassMask |= ((ULong64_t)data[29] & 0xF) << 8;
 
   if (fRawReader->GetDataSize() == 32) {
-    AliDebug(1,"No interaction records found");
+    AliDebug(1,"No trigger input and interaction records found");
     fRawReader->RequireHeader(kTRUE);
     return kTRUE;
   }
 
+  // Read detector trigger inputs
+  if (fRawReader->GetDataSize() < 52) {
+    AliError(Form("Wrong CTP raw data size: %d",fRawReader->GetDataSize()));
+    fRawReader->RequireHeader(kTRUE);
+    return kFALSE;
+  }
+
+  fL0TriggerInputs = data[32] << 12;
+  fL0TriggerInputs |= (data[33] & 0xF) << 20;
+  fL0TriggerInputs |= data[36];
+  fL0TriggerInputs |= (data[37] & 0xF) << 8;
+
+  fL1TriggerInputs = data[40] << 12;
+  fL1TriggerInputs |= (data[41] & 0xF) << 20;
+  fL1TriggerInputs |= data[44];
+  fL1TriggerInputs |= (data[45] & 0xF) << 8;
+
+  fL2TriggerInputs = data[48] << 12;
+  fL2TriggerInputs |= (data[49] & 0xF) << 20;
+
+  if (fRawReader->GetDataSize() == 52) {
+    AliDebug(1,"No interaction records found");
+    fRawReader->RequireHeader(kTRUE);
+    return kFALSE;
+  }
+
   // Read IRs
-  Int_t iword = 32;
+  Int_t iword = 52;
   UChar_t level = 0;
   UInt_t *irdata = NULL;
   UInt_t irsize = 0;
-  UShort_t orbit = 0;
+  UInt_t orbit = 0;
   Bool_t incomplete = kFALSE, transerr = kFALSE;
   while (iword < fRawReader->GetDataSize()) {
     if (data[iword+1] & 0x80) {
index 6e8123c..7fb4801 100644 (file)
@@ -25,6 +25,13 @@ class AliCTPRawStream: public TObject {
     virtual void             Reset();
     virtual Bool_t           Next();
 
+    UInt_t    GetOrbitID() const { return fOrbit; }
+    UShort_t  GetBCID()    const { return fBC; }
+
+    UInt_t    GetL0Inputs() const { return fL0TriggerInputs; }
+    UInt_t    GetL1Inputs() const { return fL1TriggerInputs; }
+    UShort_t  GetL2Inputs() const { return fL2TriggerInputs; }
+
     ULong64_t GetClassMask()   const { return fClassMask; }  // Provide the trigger class mask
     UChar_t   GetClusterMask() const { return fClusterMask; }// Provide the trigger cluster mask
 
@@ -40,6 +47,13 @@ class AliCTPRawStream: public TObject {
   private:
     TClonesArray     fIRArray;     // array with trigger interaction records
 
+    UInt_t           fOrbit;       // orbit ID as sent by CTP
+    UShort_t         fBC;          // bunch-crossing number as sent by CTP
+
+    UInt_t           fL0TriggerInputs; // L0 trigger inputs (24 bits)
+    UInt_t           fL1TriggerInputs; // L1 trigger inputs (24 bits)
+    UShort_t         fL2TriggerInputs; // L2 trigger inputs (12 bits)
+
     ULong64_t        fClassMask;   // trigger class mask
     UChar_t          fClusterMask; // trigger cluster mask