]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
Fixed SDD raw-data simulation and decoding. The problem was that the CDH was interpre...
authorcvetan <cvetan@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 7 Dec 2007 18:06:17 +0000 (18:06 +0000)
committercvetan <cvetan@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 7 Dec 2007 18:06:17 +0000 (18:06 +0000)
ITS/AliITSDDLRawData.cxx
ITS/AliITSQADataMaker.cxx
ITS/AliITSRawStreamSDD.cxx

index 499205e853f9aeac6ba3f9a748f98027c1142221..7aeab223da71f08f744b75a845e56a2d7a65fc9c 100644 (file)
@@ -597,12 +597,10 @@ Int_t AliITSDDLRawData::RawDataSDD(TBranch* branch){
     outfile->WriteBuffer((char*)(&header),sizeof(header));
 
 
-    //first 9 "dummy" words to be skipped
-    for(Int_t iw=0;iw<9;iw++){
-      if(iw==0 || iw==8) retcode = AliBitPacking::PackWord(0xFFFFFFFF,skippedword,0,31);
-      else retcode = AliBitPacking::PackWord(2,skippedword,0,31);
-       outfile->WriteBuffer((char*)(&skippedword),sizeof(skippedword));
-    }
+    //first 1 "dummy" word to be skipped
+    retcode = AliBitPacking::PackWord(0xFFFFFFFF,skippedword,0,31);
+    outfile->WriteBuffer((char*)(&skippedword),sizeof(skippedword));
+
     //Loops over Modules of a particular DDL
     for (Int_t mod=0; mod<AliITSRawStreamSDD::kModulesPerDDL; mod++){
       Int_t moduleNumber = AliITSRawStreamSDD::GetModuleNumber(i, mod);
index e3e6fbdbd1e7d18c43b1575056bd9821a7340f5b..b26f0087fa27a07068675e6e165deac01134a80e 100644 (file)
@@ -255,7 +255,6 @@ void AliITSQADataMaker::MakeRaws(AliRawReader* rawReader)
        }
     }
   AliDebug(1,"entering MakeRaws\n");
-  rawReader->RequireHeader(kFALSE);               
   rawReader->SelectEvents(7);                    
   rawReader->SelectEquipment(17,fgkeqOffset+1,fgkeqOffset + fgkDDLidRange); 
   rawReader->Reset();                         
@@ -336,7 +335,6 @@ void AliITSQADataMaker::MakeRaws(AliRawReader* rawReader)
       if(entries != 0)
        AliDebug(1,Form("histo %d, name %s , entries %d ",i,GetRawsData(i)->GetName(),entries));
     }
-    rawReader->RequireHeader(kTRUE); 
   }
 }
 
index 4a7107138cf71133994870ff59c22e3ec11af7de..ca1d92cc099bde748d66d2fbf8f8c655cf830088 100644 (file)
@@ -125,10 +125,8 @@ Bool_t AliITSRawStreamSDD::Next()
       if(!kSkip) return kSkip;
     }
   
-    if ((fChannel < 0) || (fLastBit[fCarlosId][fChannel] < fReadBits[fCarlosId][fChannel])) {
-
+    if ((fChannel < 0) || (fCarlosId < 0) || (fChannel >= 2) || (fCarlosId >= kModulesPerDDL) || (fLastBit[fCarlosId][fChannel] < fReadBits[fCarlosId][fChannel]) ) {
       if (!fRawReader->ReadNextInt(fData)) return kFALSE;  // read next word
-
       ddln = fRawReader->GetDDLID();
       if(ddln!=fDDL) { 
        Reset();
@@ -137,7 +135,7 @@ Bool_t AliITSRawStreamSDD::Next()
       if(ddln < 0 || ddln > (kDDLsNumber-1)) ddln  = 0;
 
       fChannel = -1;
-      if((fData >> 16) == 0x7F00){   // jitter word for data since october 2007
+      if((fData >> 16) == 0x7F00 ||(fData >> 4) == 0xFF00000){ // modif!!!!!
        for(Int_t i=0;i<kDDLsNumber;i++){fSkip[i]=0;}
        fResetSkip=0;
        fEndWords=0;
@@ -161,10 +159,13 @@ Bool_t AliITSRawStreamSDD::Next()
          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;
-           return kTRUE;
+         if(fCarlosId>=0 && fCarlosId<kModulesPerDDL){
+           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);
+             return kTRUE;
+           }
          }
        } else if(fData==0x3F1F1F1F){ // CarlosRX footer
          fEndWords++;
@@ -176,9 +177,11 @@ Bool_t AliITSRawStreamSDD::Next()
        }
       } else if (nData30 == 0x02 || nData30 == 0x03) {
        fChannel = nData30-2;
-       fChannelData[fCarlosId][fChannel] += 
-         (ULong64_t(fData & 0x3FFFFFFF) << fLastBit[fCarlosId][fChannel]);
-       fLastBit[fCarlosId][fChannel] += 30;
+       if(fCarlosId>=0 && fChannel>=0 && fCarlosId <kModulesPerDDL && fChannel<2){
+         fChannelData[fCarlosId][fChannel] += 
+           (ULong64_t(fData & 0x3FFFFFFF) << fLastBit[fCarlosId][fChannel]);
+         fLastBit[fCarlosId][fChannel] += 30;
+       }
       } else {                               // unknown data format
        fRawReader->AddMajorErrorLog(kDataFormatErr,Form("Invalid data %8.8x",fData));
        AliWarning(Form("invalid data: %8.8x\n", fData));
@@ -186,9 +189,9 @@ Bool_t AliITSRawStreamSDD::Next()
       }
       
       if (fNCarlos == 8 && fCarlosId >= 8) continue;  // old data, fNCarlos = 8;
-            
-      fModuleID = fgkDDLModuleMap[fRawReader->GetDDLID()][fCarlosId];    
-
+      if(fCarlosId>=0 && fCarlosId <kModulesPerDDL){
+        fModuleID = fgkDDLModuleMap[ddln][fCarlosId];
+      }
     } else {  // decode data
       if (fReadCode[fCarlosId][fChannel]) {// read the next code word
        fChannelCode[fCarlosId][fChannel] = ReadBits();
@@ -236,9 +239,9 @@ void AliITSRawStreamSDD::Reset(){
 }
 
 Bool_t AliITSRawStreamSDD::ResetSkip(Int_t ddln){
-  // skip the 9 DDL header words
+  // skip the 1 DDL header word = 0xffffffff
   Bool_t startCount=kFALSE;
-  while (fSkip[ddln] < 9) {
+  while (fSkip[ddln] < 1) {
     if (!fRawReader->ReadNextInt(fData)) { 
       return kFALSE;
     }