]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
Modifications to increase the speed of SDD raw data deconding (F. Prino)
authorprino <prino@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 2 Sep 2008 19:22:18 +0000 (19:22 +0000)
committerprino <prino@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 2 Sep 2008 19:22:18 +0000 (19:22 +0000)
ITS/AliITSRawStreamSDD.cxx
ITS/AliITSRawStreamSDD.h

index 74bc7461d4b58516a2eeff2a26a1b2ed0972db3e..1d4005c76342df7b251511cff330bba60f9430e6 100644 (file)
@@ -39,7 +39,6 @@ fCarlosId(-1),
 fChannel(0),
 fJitter(0),
 fDDL(0),
-fEndWords(0),
 fResetSkip(0)
 {
 // create an object to read ITS SDD raw digits
@@ -69,7 +68,6 @@ fCarlosId(-1),
 fChannel(0),
 fJitter(0),
 fDDL(0),
-fEndWords(0),
 fResetSkip(0)
 {
   // copy constructor
@@ -130,13 +128,18 @@ Bool_t AliITSRawStreamSDD::Next()
     if(fResetSkip==0){
       Bool_t kSkip = SkipHeaderWord();
       fResetSkip=1;
-      if(!kSkip) return kSkip;
+      if(!kSkip){
+       fRawReader->AddMajorErrorLog(kDataError,"Bad CarlosRX header");
+       AliWarning(Form("Invalid data: bad CarlosRX header\n", fData));
+       return kFALSE;
+      }
     }
   
     if ((fChannel < 0) || (fCarlosId < 0) || (fChannel >= 2) || (fCarlosId >= kModulesPerDDL) || (fLastBit[fCarlosId][fChannel] < fReadBits[fCarlosId][fChannel]) ) {
       if (!fRawReader->ReadNextInt(fData)) return kFALSE;  // read next word
+
       Int_t ddln = fRawReader->GetDDLID();
-      if(ddln!=fDDL) { 
+      if(ddln!=fDDL) {
        Reset();
        fDDL=fRawReader->GetDDLID();
       }
@@ -144,7 +147,6 @@ Bool_t AliITSRawStreamSDD::Next()
       fChannel = -1;
       if((fData >> 16) == 0x7F00){ // jitter word
        fResetSkip=0;
-       fEndWords=0;
        continue;
       }
 
@@ -154,30 +156,25 @@ Bool_t AliITSRawStreamSDD::Next()
 
       if (nData28== 0x02) {           // header
        fEventId = (fData >> 3) & 0x07FF; 
-      } else if (nData28== 0x04) {
-       // JTAG word -- do nothing
       } else if (nData28== 0x03) {    // Carlos and FIFO words or Footers
        if(fData>=fICarlosWord[0]&&fData<=fICarlosWord[11]) { // Carlos Word
-         if(fEndWords==12) continue; // out of event
          fCarlosId = fData-fICarlosWord[0];
          Int_t iFifoIdx = fCarlosId/3;
          fNfifo[iFifoIdx] = fCarlosId;
        } else if (fData>=fIFifoWord[0]&&fData<=fIFifoWord[3]){ // FIFO word
-         if(fEndWords==12) continue; // out of event
          fCarlosId = fNfifo[fData-fIFifoWord[0]];          
        } else if(fData==0x3FFFFFFF){ // Carlos footer
          fICountFoot[fCarlosId]++; // stop before the last word (last word=jitter)
          if(fICountFoot[fCarlosId]==3){
            fCompletedModule=kTRUE;
-           //        printf("Completed module %d DDL %d\n",fCarlosId,ddln);
+           //        printf("Completed module %d DDL %d\n",fCarlosId,fDDL);
            return kTRUE;
          }
        } else if(fData==0x3F1F1F1F){ // CarlosRX footer
-         fEndWords++;
-         if(fEndWords<=12) continue;
+         // CARLOSRX footer -- do nothing
        }else{
-         fRawReader->AddMajorErrorLog(kDataError,"Too many footers");
-         AliWarning(Form("invalid data: too many footers\n", fData));
+         fRawReader->AddMajorErrorLog(kDataError,"Bad footer");
+         AliWarning(Form("Invalid data: bad footer\n", fData));
          return kFALSE;            
        }
       } else if (nData30 == 0x02 || nData30 == 0x03) {
@@ -185,14 +182,16 @@ Bool_t AliITSRawStreamSDD::Next()
        fChannelData[fCarlosId][fChannel] += 
          (ULong64_t(fData & 0x3FFFFFFF) << fLastBit[fCarlosId][fChannel]);
        fLastBit[fCarlosId][fChannel] += 30;
+      } else if (nData28== 0x04) {
+       // JTAG word -- do nothing
       } else {                               // unknown data format
        fRawReader->AddMajorErrorLog(kDataFormatErr,Form("Invalid data %8.8x",fData));
-       AliWarning(Form("invalid data: %8.8x\n", fData));
+       AliWarning(Form("Invalid data: %8.8x\n", fData));
        return kFALSE;
       }
       
       if(fCarlosId>=0 && fCarlosId <kModulesPerDDL){
-        fModuleID = GetModuleNumber(ddln,fCarlosId);
+        fModuleID = GetModuleNumber(fDDL,fCarlosId);
       }
     } else {  // decode data
       if (fReadCode[fCarlosId][fChannel]) {// read the next code word
@@ -236,7 +235,6 @@ void AliITSRawStreamSDD::Reset(){
       fTimeBin[ic][i]=0;
       fAnode[ic][i]=0;     
     }
-    fLowThreshold[i]=0;
   }
   for(Int_t i=0;i<kModulesPerDDL;i++) fICountFoot[i]=0;
 }
index 95e20fc04411bc309fbd13330eb769099608955a..34093815d94f97f28b424c8da7a147fcc2f335f9 100644 (file)
@@ -81,9 +81,8 @@ class AliITSRawStreamSDD: public AliITSRawStream {
     UInt_t           fICarlosWord[kCarlosWords]; // Carlos words
     UInt_t           fIFifoWord[kFifoWords];     // FIFO words
     Int_t            fICountFoot[kModulesPerDDL]; // counter for carlos footer words
-    Int_t            fEndWords;      //number of 3f1f1f1f
     Int_t            fResetSkip;     //if it is 0, the ResetSkip Funcion is called
-    ClassDef(AliITSRawStreamSDD, 9) // class for reading ITS SDD raw digits
+    ClassDef(AliITSRawStreamSDD, 10) // class for reading ITS SDD raw digits
 };
 
 #endif