]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - ZDC/AliZDCRawStream.cxx
Detector Algorithm for pedestal runs.
[u/mrichter/AliRoot.git] / ZDC / AliZDCRawStream.cxx
index a8c7ebe624fbc2fed61787fd0992cd36f02b7408..c7ac3a38a3ef1a71a31754ba38f1d5126614e85c 100644 (file)
@@ -102,7 +102,13 @@ AliZDCRawStream::AliZDCRawStream(AliRawReader* rawReader) :
   fCurrScCh(-1),
   fIsADCEventGood(kTRUE),
   fIsL0BitSet(kTRUE),
-  fIsPileUpEvent(kFALSE)
+  fIsPileUpEvent(kFALSE),
+  fIsZDCTDCHeader(kFALSE),
+  fIsTDCHeaderRead(kFALSE),
+  fTDCStartCounter(0),
+  fIsADDChannel(kFALSE),
+  fIsADDTDCHeader(kFALSE),
+  fIsADDTDCdatum(kFALSE)
 {
   // Create an object to read ZDC raw digits
   fRawReader->Reset();
@@ -187,7 +193,13 @@ AliZDCRawStream::AliZDCRawStream(const AliZDCRawStream& stream) :
   fCurrScCh(stream.fCurrScCh),
   fIsADCEventGood(stream.fIsADCEventGood),
   fIsL0BitSet(stream.fIsL0BitSet),
-  fIsPileUpEvent(stream.fIsPileUpEvent)
+  fIsPileUpEvent(stream.fIsPileUpEvent),
+  fIsZDCTDCHeader(stream.fIsZDCTDCHeader),
+  fIsTDCHeaderRead(stream.fIsTDCHeaderRead),
+  fTDCStartCounter(stream.fTDCStartCounter),
+  fIsADDChannel(stream.fIsADDChannel),
+  fIsADDTDCHeader(stream.fIsADDTDCHeader),
+  fIsADDTDCdatum(stream.fIsADDTDCdatum)
 
 {
   // Copy constructor
@@ -282,11 +294,11 @@ void AliZDCRawStream::ReadCDHHeader()
     if((message & 0x08) == 0){  // ** DARC card
        fReadOutCard = 0;
        fIsDARCHeader = kTRUE;
-       AliInfo("\t ZDC readout card used: DARC");
+       //AliInfo("\t ZDC readout card used: DARC");
     }
     else if((message & 0x08) == 0x08){  // ** ZRC card
        fReadOutCard = 1;
-       AliInfo("\t ZDC readout card used: ZRC");
+       //AliInfo("\t ZDC readout card used: ZRC");
     }
 
     if(header->GetL1TriggerMessage() & 0x1){ // Calibration bit set in CDH
@@ -295,7 +307,7 @@ void AliZDCRawStream::ReadCDHHeader()
     //printf("\t AliZDCRawStream::ReadCDHHeader -> L1TriggerMessage %x\n",header->GetL1TriggerMessage());
     //printf("\t AliZDCRawStream::ReadCDHHeader -> Calibration bit = %d\n",fIsCalib);    
     
-    UInt_t status = header->GetStatus();
+/*    UInt_t status = header->GetStatus();
     //printf("\t AliZDCRawStream::ReadCDHHeader -> status = %d\n",status);
     if((status & 0x000f) == 0x0001){
       AliDebug(2,"CDH -> DARC trg0 overlap error");
@@ -340,6 +352,7 @@ void AliZDCRawStream::ReadCDHHeader()
       AliDebug(2,"CDH -> DARC other error");
       fRawReader->AddMajorErrorLog(kDARCError);
     }
+    */
   }
   
 }
@@ -352,13 +365,16 @@ Bool_t AliZDCRawStream::Next()
 
   if(!fRawReader->ReadNextInt((UInt_t&) fBuffer)) return kFALSE;
   const int kNch = 48;
-  Int_t kFirstADCGeo=0, kLastADCGeo=3, kAddADCGeo=4;
-  Int_t kScalerGeo=8, kPUGeo=29, kTrigScales=30, kTrigHistory=31;
+  Int_t kFirstADCGeo=0, kLastADCGeo=3;
+  Int_t kADDADCGeo=5, kADDTDCGeo=6;
+  Int_t kZDCTDCGeo=8, kScalerGeo=16;
+  Int_t kPUGeo=29, kTrigScales=30, kTrigHistory=31;
+  //
   fIsHeaderMapping = kFALSE; fIsChMapping = kFALSE; 
   fIsADCHeader = kFALSE; fIsADCDataWord = kFALSE; fIsADCEOB = kFALSE;
+  fIsADDChannel = kFALSE; fIsADDTDCHeader= kFALSE; fIsADDTDCdatum=kFALSE;
   fIsUnderflow = kFALSE; fIsOverflow = kFALSE; fIsScalerWord = kFALSE;
   fSector[0] = fSector[1] = -1;
-//  fTrigCountNWords = 9; fTrigHistNWords = 2;
   for(Int_t kl=0; kl<4; kl++) fCPTInput[kl] = 0;
 
   fEvType = fRawReader->GetType();
@@ -517,8 +533,8 @@ Bool_t AliZDCRawStream::Next()
          //  look the enum in AliZDCRawStream.h file
          // -----------------------------------------
          // NOT CONSIDERING OUT OF TIME OR REFERENCE SIGNALS FOR SCALER!!!!!
-         if(fCabledSignal>=2 && fCabledSignal<=6 ||
-            fCabledSignal>=61 && fCabledSignal<=65){
+         if((fCabledSignal>=2 && fCabledSignal<=6) ||
+            (fCabledSignal>=61 && fCabledSignal<=65)){
            fScalerMap[fCurrScCh][3] = 4; //ZNA
            //
            if(fCabledSignal==2 || fCabledSignal==61)      fScalerMap[fCurrScCh][4]=0;
@@ -527,8 +543,8 @@ Bool_t AliZDCRawStream::Next()
            else if(fCabledSignal==5 || fCabledSignal==64)  fScalerMap[fCurrScCh][4]=3;
            else if(fCabledSignal==6 || fCabledSignal==65)  fScalerMap[fCurrScCh][4]=4;
          }
-         else if(fCabledSignal>=7 && fCabledSignal<=11 ||
-            fCabledSignal>=66 && fCabledSignal<=70){
+         else if((fCabledSignal>=7 && fCabledSignal<=11) ||
+            (fCabledSignal>=66 && fCabledSignal<=70)){
            fScalerMap[fCurrScCh][3] = 5; //ZPA
            //
            if(fCabledSignal==7 || fCabledSignal==66)      fScalerMap[fCurrScCh][4]=0;
@@ -537,8 +553,8 @@ Bool_t AliZDCRawStream::Next()
            else if(fCabledSignal==10 || fCabledSignal==69) fScalerMap[fCurrScCh][4]=3;
            else if(fCabledSignal==11 || fCabledSignal==70) fScalerMap[fCurrScCh][4]=4;
          }
-         else if(fCabledSignal>=12 && fCabledSignal<=16 ||
-            fCabledSignal>=71 && fCabledSignal<=75){
+         else if((fCabledSignal>=12 && fCabledSignal<=16) ||
+            (fCabledSignal>=71 && fCabledSignal<=75)){
            fScalerMap[fCurrScCh][3] = 1; //ZNC
            //
            if(fCabledSignal==12 || fCabledSignal==71)      fScalerMap[fCurrScCh][4]=0;
@@ -547,8 +563,8 @@ Bool_t AliZDCRawStream::Next()
            else if(fCabledSignal==15 || fCabledSignal==74) fScalerMap[fCurrScCh][4]=3;
            else if(fCabledSignal==16 || fCabledSignal==75) fScalerMap[fCurrScCh][4]=4;
          }
-         else if(fCabledSignal>=17 && fCabledSignal<=21 ||
-            fCabledSignal>=76 && fCabledSignal<=80){
+         else if((fCabledSignal>=17 && fCabledSignal<=21) ||
+            (fCabledSignal>=76 && fCabledSignal<=80)){
            fScalerMap[fCurrScCh][3] = 2; //ZPC
            //
            if(fCabledSignal==17 || fCabledSignal==76)      fScalerMap[fCurrScCh][4]=0;
@@ -658,12 +674,8 @@ Bool_t AliZDCRawStream::Next()
     }
      
     // Get geo address of current word
-    // - ADC GEO = 0, 1, 2, 3
-    // - VME scaler GEO = 8
-    // - PU GEO = 29
-    // - Trigger card scales GEO = 30
-    // - Trigger card history GEO = 31
     fADCModule = (Int_t) ((fBuffer & 0xf8000000)>>27);
+    if(fIsTDCHeaderRead)fADCModule = kZDCTDCGeo;
     
     // ************************************ ADC MODULES ************************************
     if(fADCModule>=kFirstADCGeo && fADCModule<=kLastADCGeo){
@@ -742,16 +754,16 @@ Bool_t AliZDCRawStream::Next()
       }
     }//ADC module
     // ********************************* ADD ADC *********************************
-    else if(fADCModule == kAddADCGeo){
+    else if(fADCModule == kADDADCGeo){
       // *** ADC header
       if((fBuffer & 0x07000000) == 0x02000000){
         fIsADCHeader = kTRUE;
        fADCNChannels = ((fBuffer & 0x00003f00)>>8);
-       //printf("  AliZDCRawStream -> ADC HEADER: mod.%d has %d ch. \n",fADCModule,fADCNChannels);
+       //printf("  AliZDCRawStream -> ADD ADC HEADER: mod.%d has %d ch. \n",fADCModule,fADCNChannels);
       }
       // *** ADC data word
       else if((fBuffer & 0x07000000) == 0x00000000){
-        fIsADCDataWord = kTRUE;
+        fIsADDChannel = kTRUE;
         fADCChannel = ((fBuffer & 0x1e0000) >> 17);
         fADCGain = ((fBuffer & 0x10000) >> 16);       
         fADCValue = (fBuffer & 0xfff);  
@@ -759,7 +771,38 @@ Bool_t AliZDCRawStream::Next()
        //printf("  ADD ADC DATUM -> mod. %d ch. %d gain %d value %d\n",
        //  fADCModule,fADCChannel,fADCGain,fADCValue);
       }
+      // *** ADC EOB
+      else if((fBuffer & 0x07000000) == 0x04000000){
+        fIsADCEOB = kTRUE;
+       //printf("  AliZDCRawStream -> EOB --------------------------\n");
+      }
+    }
+    // ********************************* ZDC TDC *********************************
+    else if(fADCModule==kZDCTDCGeo && fIsTDCHeaderRead==kFALSE){
+      fIsZDCTDCHeader = kTRUE;
+      fIsTDCHeaderRead = kTRUE;
+      fTDCStartCounter = fPosition;
+      //Ch. debug
+      //printf("  AliZDCRawStream -> ZDC TDC: mod.%d\n",fADCModule);
     }
+    // ********************************* ADD TDC *********************************
+    else if(fADCModule == kADDTDCGeo){
+      // *** TDC header
+      if((fBuffer & 0x07000000) == 0x02000000){
+        fIsADDTDCHeader = kTRUE;
+       fADCNChannels = ((fBuffer & 0x00003f00)>>8);
+        //printf("  AliZDCRawStream -> ADD TDC: mod.%d has %d ch. \n",fADCModule,fADCNChannels);
+      }
+      // *** TDC  word
+      else if((fBuffer & 0x07000000) == 0x00000000){
+        fIsADDTDCdatum = kTRUE;
+      }
+      // *** TDC  EOB
+      if((fBuffer & 0x07000000) == 0x04000000){
+        fIsADCEOB = kTRUE;
+       //printf("  AliZDCRawStream -> ADD TDC EOB\n");
+      }
+   }
     // ********************************* VME SCALER HEADER *********************************
     else if(fADCModule == kScalerGeo){
       if(fBuffer & 0x04000000 && fIsScHeaderRead==kFALSE){ // *** Scaler header
@@ -816,6 +859,18 @@ Bool_t AliZDCRawStream::Next()
       //Ch. debug
       //printf("  AliZDCRawStream -> scaler datum %d", fScEvCounter);
     }
+    // ********************************** ZDC TDC DATA **********************************
+    //  ZDC TDC data
+    if(fIsTDCHeaderRead && fPosition>=fTDCStartCounter+1){ 
+      fIsADCDataWord=kFALSE; fIsScalerWord=kFALSE;
+      //printf("  AliZDCRawStream -> ...skipping ZDC TDC datum\n");
+      // For the moment we skip the TDC data
+      if(((fBuffer & 0xf0000000) == 0x80000000) && ((fBuffer & 0x08000000) >> 27) == 0){
+       fIsTDCHeaderRead = kFALSE;
+        // Ch. debug
+        //printf("  AliZDCRawStream -> ZDC TDC trailer\n");
+      }
+    }
     // ******************************** TRIGGER SCALER DATA ********************************
     //  Reading trigger scaler data 
     if(fIsTriggerScaler && fPosition>=fTrigCountStart+1){