Compatibility with raw data from the beam test
authortkuhr <tkuhr@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 11 Nov 2004 11:37:31 +0000 (11:37 +0000)
committertkuhr <tkuhr@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 11 Nov 2004 11:37:31 +0000 (11:37 +0000)
RAW/AliITSRawStreamSPD.cxx
RAW/AliITSRawStreamSPD.h

index 219537e..a0eb73d 100644 (file)
@@ -52,7 +52,13 @@ const Int_t AliITSRawStreamSPD::fgkDDLModuleMap[kDDLsNumber][kModulesPerDDL] = {
 
 
 AliITSRawStreamSPD::AliITSRawStreamSPD(AliRawReader* rawReader) :
-  AliITSRawStream(rawReader)
+  AliITSRawStream(rawReader),
+  fData(0),
+  fDDLNumber(-1),
+  fEventNumber(-1),
+  fModuleNumber(-1),
+  fOffset(0),
+  fHitCount(0)
 {
 // create an object to read ITS SPD raw digits
 
@@ -68,23 +74,40 @@ Bool_t AliITSRawStreamSPD::Next()
   fPrevModuleID = fModuleID;
   while (fRawReader->ReadNextShort(fData)) {
   
-    if ((fData & 0xE000) == 0x6000) {           // header
+    if ((fData & 0xC000) == 0x4000) {           // header
       fHitCount = 0;
-      UShort_t halfStave = (fData >> 4) & 0x007F;
+      UShort_t eventNumber = (fData >> 4) & 0x007F;
+      if (fEventNumber < 0) {
+       fEventNumber = eventNumber;
+      } else if (eventNumber != fEventNumber) {
+       Warning("Next", "mismatching event numbers: %d != %d", 
+               eventNumber, fEventNumber);
+      }
       UShort_t chipAddr = fData & 0x000F;
-      fModuleID = 2 * halfStave;
-      if (chipAddr >= 5) fModuleID++;
+      if (fRawReader->GetDDLID() != fDDLNumber) {
+       fModuleNumber = -1;
+       fDDLNumber = fRawReader->GetDDLID();
+      }
+      if ((chipAddr == 5) || (chipAddr == 0)) {
+       fModuleNumber++;
+       while (fRawReader->TestBlockAttribute(fModuleNumber/2)) fModuleNumber++;
+      }
+      if (fDDLNumber < kDDLsNumber) {
+       fModuleID = fgkDDLModuleMap[fDDLNumber][fModuleNumber];
+      } else {
+       fModuleID = fModuleNumber;
+      }
       fOffset = 32 * (chipAddr % 5);
-    } else if ((fData & 0xE000) == 0x0000) {    // trailer
+    } else if ((fData & 0xC000) == 0x0000) {    // trailer
       UShort_t hitCount = fData & 0x1FFF;
-      if (hitCount != fHitCount) Error("Next", "wrong number of hits!");
+      if (hitCount != fHitCount) Error("Next", "wrong number of hits: %d != %d", fHitCount, hitCount);
     } else if ((fData & 0xC000) == 0x8000) {    // pixel hit
       fHitCount++;
       fCoord1 = (fData & 0x001F) + fOffset;
       fCoord2 = (fData >> 5) & 0x00FF;
       return kTRUE;
     } else {                                    // fill word
-      if (fData != 0xFEDC) Error("Next", "wrong fill word!");
+      if ((fData & 0xC000) != 0xC000) Error("Next", "wrong fill word!");
     }
 
   }
index 9a458d0..ee85836 100644 (file)
@@ -35,6 +35,9 @@ class AliITSRawStreamSPD: public AliITSRawStream {
     static const Int_t fgkDDLModuleMap[kDDLsNumber][kModulesPerDDL];  // mapping DDL/module -> module number
 
     UShort_t         fData;         // data read for file
+    Int_t            fDDLNumber;    // current DDL number
+    Int_t            fEventNumber;  // event trigger number
+    Int_t            fModuleNumber; // sequential module number
     UInt_t           fOffset;       // offset for cell column
     UInt_t           fHitCount;     // counter of hits