Decoding for the ADC and ADD TDCs introduced in raw data streaming
authorcoppedis <coppedis@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 6 May 2010 08:01:53 +0000 (08:01 +0000)
committercoppedis <coppedis@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 6 May 2010 08:01:53 +0000 (08:01 +0000)
ZDC/AliZDCRawStream.cxx
ZDC/AliZDCRawStream.h

index c7ac3a3..02344cd 100644 (file)
@@ -103,12 +103,16 @@ AliZDCRawStream::AliZDCRawStream(AliRawReader* rawReader) :
   fIsADCEventGood(kTRUE),
   fIsL0BitSet(kTRUE),
   fIsPileUpEvent(kFALSE),
-  fIsZDCTDCHeader(kFALSE),
+  fIsADDChannel(kFALSE),
+  fADDADCdatum(0),
   fIsTDCHeaderRead(kFALSE),
   fTDCStartCounter(0),
-  fIsADDChannel(kFALSE),
+  fIsZDCTDCHeader(kFALSE),
+  fIsZDCTDCdatum(kFALSE),
+  fZDCTDCdatum(0),
   fIsADDTDCHeader(kFALSE),
-  fIsADDTDCdatum(kFALSE)
+  fIsADDTDCdatum(kFALSE),
+  fADDTDCdatum(0)
 {
   // Create an object to read ZDC raw digits
   fRawReader->Reset();
@@ -194,13 +198,16 @@ AliZDCRawStream::AliZDCRawStream(const AliZDCRawStream& stream) :
   fIsADCEventGood(stream.fIsADCEventGood),
   fIsL0BitSet(stream.fIsL0BitSet),
   fIsPileUpEvent(stream.fIsPileUpEvent),
-  fIsZDCTDCHeader(stream.fIsZDCTDCHeader),
+  fIsADDChannel(stream.fIsADDChannel),
+  fADDADCdatum(stream.fADDADCdatum),
   fIsTDCHeaderRead(stream.fIsTDCHeaderRead),
   fTDCStartCounter(stream.fTDCStartCounter),
-  fIsADDChannel(stream.fIsADDChannel),
+  fIsZDCTDCHeader(stream.fIsZDCTDCHeader),
+  fIsZDCTDCdatum(stream.fIsZDCTDCdatum),
+  fZDCTDCdatum(stream.fZDCTDCdatum),
   fIsADDTDCHeader(stream.fIsADDTDCHeader),
-  fIsADDTDCdatum(stream.fIsADDTDCdatum)
-
+  fIsADDTDCdatum(stream.fIsADDTDCdatum),
+  fADDTDCdatum(stream.fADDTDCdatum)
 {
   // Copy constructor
   const int kNch = 48;
@@ -365,10 +372,6 @@ Bool_t AliZDCRawStream::Next()
 
   if(!fRawReader->ReadNextInt((UInt_t&) fBuffer)) return kFALSE;
   const int kNch = 48;
-  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;
@@ -471,47 +474,47 @@ Bool_t AliZDCRawStream::Next()
              || fCabledSignal==24 || fCabledSignal==48){
              fMapADC[fCurrentCh][3] = 4; //ZNA
              //
-             if(fCabledSignal==kZNAC || fCabledSignal==kZNACoot)   fMapADC[fCurrentCh][4]=0;
-             else if(fCabledSignal==3 || fCabledSignal==27)  fMapADC[fCurrentCh][4]=1;
-             else if(fCabledSignal==4 || fCabledSignal==28)  fMapADC[fCurrentCh][4]=2;
-             else if(fCabledSignal==5 || fCabledSignal==29)  fMapADC[fCurrentCh][4]=3;
-             else if(fCabledSignal==6 || fCabledSignal==30)  fMapADC[fCurrentCh][4]=4;
-             else if(fCabledSignal==24 || fCabledSignal==48) fMapADC[fCurrentCh][4]=5; //Reference PTM
+             if(fCabledSignal==kZNAC || fCabledSignal==kZNACoot)       fMapADC[fCurrentCh][4]=0;
+             else if(fCabledSignal==kZNA1 || fCabledSignal==kZNA1oot)  fMapADC[fCurrentCh][4]=1;
+             else if(fCabledSignal==kZNA2 || fCabledSignal==kZNA2oot)  fMapADC[fCurrentCh][4]=2;
+             else if(fCabledSignal==kZNA3 || fCabledSignal==kZNA3oot)  fMapADC[fCurrentCh][4]=3;
+             else if(fCabledSignal==kZNA4 || fCabledSignal==kZNA4oot)  fMapADC[fCurrentCh][4]=4;
+             else if(fCabledSignal==kZDCAMon || fCabledSignal==kZDCAMonoot) fMapADC[fCurrentCh][4]=5; //Reference PTM
            }
            else if((fCabledSignal>=7 && fCabledSignal<=11) || (fCabledSignal>=31 && fCabledSignal<=35)){
              fMapADC[fCurrentCh][3] = 5; //ZPA
              //
-             if(fCabledSignal==7 || fCabledSignal==31)       fMapADC[fCurrentCh][4]=0;
-             else if(fCabledSignal==8 || fCabledSignal==32)  fMapADC[fCurrentCh][4]=1;
-             else if(fCabledSignal==9 || fCabledSignal==33)  fMapADC[fCurrentCh][4]=2;
-             else if(fCabledSignal==10 || fCabledSignal==34) fMapADC[fCurrentCh][4]=3;
-             else if(fCabledSignal==11 || fCabledSignal==35) fMapADC[fCurrentCh][4]=4;
+             if(fCabledSignal==kZPAC || fCabledSignal==kZPACoot)      fMapADC[fCurrentCh][4]=0;
+             else if(fCabledSignal==kZPA1 || fCabledSignal==kZPA1oot) fMapADC[fCurrentCh][4]=1;
+             else if(fCabledSignal==kZPA2 || fCabledSignal==kZPA2oot) fMapADC[fCurrentCh][4]=2;
+             else if(fCabledSignal==kZPA3 || fCabledSignal==kZPA3oot) fMapADC[fCurrentCh][4]=3;
+             else if(fCabledSignal==kZPA4 || fCabledSignal==kZPA4oot) fMapADC[fCurrentCh][4]=4;
            }
            else if((fCabledSignal>=12 && fCabledSignal<=16) || (fCabledSignal>=36 && fCabledSignal<=40)
               || fCabledSignal==25 || fCabledSignal==49){
              fMapADC[fCurrentCh][3] = 1; //ZNC
              //
-             if(fCabledSignal==12 || fCabledSignal==36)      fMapADC[fCurrentCh][4]=0;
-             else if(fCabledSignal==13 || fCabledSignal==37) fMapADC[fCurrentCh][4]=1;
-             else if(fCabledSignal==14 || fCabledSignal==38) fMapADC[fCurrentCh][4]=2;
-             else if(fCabledSignal==15 || fCabledSignal==39) fMapADC[fCurrentCh][4]=3;
-             else if(fCabledSignal==16 || fCabledSignal==40) fMapADC[fCurrentCh][4]=4;
-             else if(fCabledSignal==25 || fCabledSignal==49) fMapADC[fCurrentCh][4]=5; //Reference PTM
+             if(fCabledSignal==kZNCC || fCabledSignal==kZNCCoot)      fMapADC[fCurrentCh][4]=0;
+             else if(fCabledSignal==kZNC1 || fCabledSignal==kZNC1oot) fMapADC[fCurrentCh][4]=1;
+             else if(fCabledSignal==kZNC2 || fCabledSignal==kZNC2oot) fMapADC[fCurrentCh][4]=2;
+             else if(fCabledSignal==kZNC3 || fCabledSignal==kZNC3oot) fMapADC[fCurrentCh][4]=3;
+             else if(fCabledSignal==kZNC4 || fCabledSignal==kZNC4oot) fMapADC[fCurrentCh][4]=4;
+             else if(fCabledSignal==kZDCCMon || fCabledSignal==kZDCCMonoot) fMapADC[fCurrentCh][4]=5; //Reference PTM
            }
            else if((fCabledSignal>=17 && fCabledSignal<=21) || (fCabledSignal>=41 && fCabledSignal<=45)){
              fMapADC[fCurrentCh][3] = 2; //ZPC
              //
-             if(fCabledSignal==17 || fCabledSignal==41)      fMapADC[fCurrentCh][4]=0;
-             else if(fCabledSignal==18 || fCabledSignal==42) fMapADC[fCurrentCh][4]=1;
-             else if(fCabledSignal==19 || fCabledSignal==43) fMapADC[fCurrentCh][4]=2;
-             else if(fCabledSignal==20 || fCabledSignal==44) fMapADC[fCurrentCh][4]=3;
-             else if(fCabledSignal==21 || fCabledSignal==45) fMapADC[fCurrentCh][4]=4;
+             if(fCabledSignal==kZPCC || fCabledSignal==kZPCCoot)   fMapADC[fCurrentCh][4]=0;
+             else if(fCabledSignal==kZPC1 || fCabledSignal==kZPC1oot) fMapADC[fCurrentCh][4]=1;
+             else if(fCabledSignal==kZPC2 || fCabledSignal==kZPC2oot) fMapADC[fCurrentCh][4]=2;
+             else if(fCabledSignal==kZPC3 || fCabledSignal==kZPC3oot) fMapADC[fCurrentCh][4]=3;
+             else if(fCabledSignal==kZPC4 || fCabledSignal==kZPC4oot) fMapADC[fCurrentCh][4]=4;
            }
            else if(fCabledSignal==22 || fCabledSignal==23 || fCabledSignal==46 || fCabledSignal==47){
              fMapADC[fCurrentCh][3] = 3; // ZEM
              //
-             if(fCabledSignal==22 || fCabledSignal==46)      fMapADC[fCurrentCh][4]=1;
-             else if(fCabledSignal==23 || fCabledSignal==47) fMapADC[fCurrentCh][4]=2;
+             if(fCabledSignal==kZEM1 || fCabledSignal==kZEM1oot)      fMapADC[fCurrentCh][4]=1;
+             else if(fCabledSignal==kZEM2 || fCabledSignal==kZEM2oot) fMapADC[fCurrentCh][4]=2;
            }
            //Ch. debug
            //printf("\tADC mod. %d ch. %d signal %d ",fADCModule,fADCChannel,fCabledSignal);
@@ -537,48 +540,48 @@ Bool_t AliZDCRawStream::Next()
             (fCabledSignal>=61 && fCabledSignal<=65)){
            fScalerMap[fCurrScCh][3] = 4; //ZNA
            //
-           if(fCabledSignal==2 || fCabledSignal==61)      fScalerMap[fCurrScCh][4]=0;
-           else if(fCabledSignal==3 || fCabledSignal==62)  fScalerMap[fCurrScCh][4]=1;
-           else if(fCabledSignal==4 || fCabledSignal==63)  fScalerMap[fCurrScCh][4]=2;
-           else if(fCabledSignal==5 || fCabledSignal==64)  fScalerMap[fCurrScCh][4]=3;
-           else if(fCabledSignal==6 || fCabledSignal==65)  fScalerMap[fCurrScCh][4]=4;
+           if(fCabledSignal==kZNAC || fCabledSignal==kZNACD)      fScalerMap[fCurrScCh][4]=0;
+           else if(fCabledSignal==kZNA1 || fCabledSignal==kZNA1D) fScalerMap[fCurrScCh][4]=1;
+           else if(fCabledSignal==kZNA2 || fCabledSignal==kZNA2D) fScalerMap[fCurrScCh][4]=2;
+           else if(fCabledSignal==kZNA3 || fCabledSignal==kZNA3D) fScalerMap[fCurrScCh][4]=3;
+           else if(fCabledSignal==kZNA4 || fCabledSignal==kZNA4D) fScalerMap[fCurrScCh][4]=4;
          }
          else if((fCabledSignal>=7 && fCabledSignal<=11) ||
             (fCabledSignal>=66 && fCabledSignal<=70)){
            fScalerMap[fCurrScCh][3] = 5; //ZPA
            //
-           if(fCabledSignal==7 || fCabledSignal==66)      fScalerMap[fCurrScCh][4]=0;
-           else if(fCabledSignal==8 || fCabledSignal==67)  fScalerMap[fCurrScCh][4]=1;
-           else if(fCabledSignal==9 || fCabledSignal==68)  fScalerMap[fCurrScCh][4]=2;
-           else if(fCabledSignal==10 || fCabledSignal==69) fScalerMap[fCurrScCh][4]=3;
-           else if(fCabledSignal==11 || fCabledSignal==70) fScalerMap[fCurrScCh][4]=4;
+           if(fCabledSignal==kZPAC || fCabledSignal==kZPACD)      fScalerMap[fCurrScCh][4]=0;
+           else if(fCabledSignal==kZPA1 || fCabledSignal==kZPA1D) fScalerMap[fCurrScCh][4]=1;
+           else if(fCabledSignal==kZPA2 || fCabledSignal==kZPA2D) fScalerMap[fCurrScCh][4]=2;
+           else if(fCabledSignal==kZPA3 || fCabledSignal==kZPA3D) fScalerMap[fCurrScCh][4]=3;
+           else if(fCabledSignal==kZPA4 || fCabledSignal==kZPA4D) fScalerMap[fCurrScCh][4]=4;
          }
          else if((fCabledSignal>=12 && fCabledSignal<=16) ||
             (fCabledSignal>=71 && fCabledSignal<=75)){
            fScalerMap[fCurrScCh][3] = 1; //ZNC
            //
-           if(fCabledSignal==12 || fCabledSignal==71)      fScalerMap[fCurrScCh][4]=0;
-           else if(fCabledSignal==13 || fCabledSignal==72) fScalerMap[fCurrScCh][4]=1;
-           else if(fCabledSignal==14 || fCabledSignal==73) fScalerMap[fCurrScCh][4]=2;
-           else if(fCabledSignal==15 || fCabledSignal==74) fScalerMap[fCurrScCh][4]=3;
-           else if(fCabledSignal==16 || fCabledSignal==75) fScalerMap[fCurrScCh][4]=4;
+           if(fCabledSignal==kZNCC || fCabledSignal==kZNCCD)      fScalerMap[fCurrScCh][4]=0;
+           else if(fCabledSignal==kZNC1 || fCabledSignal==kZNC1D) fScalerMap[fCurrScCh][4]=1;
+           else if(fCabledSignal==kZNC2 || fCabledSignal==kZNC2D) fScalerMap[fCurrScCh][4]=2;
+           else if(fCabledSignal==kZNC3 || fCabledSignal==kZNC3D) fScalerMap[fCurrScCh][4]=3;
+           else if(fCabledSignal==kZNC4 || fCabledSignal==kZNC4D) fScalerMap[fCurrScCh][4]=4;
          }
          else if((fCabledSignal>=17 && fCabledSignal<=21) ||
             (fCabledSignal>=76 && fCabledSignal<=80)){
            fScalerMap[fCurrScCh][3] = 2; //ZPC
            //
-           if(fCabledSignal==17 || fCabledSignal==76)      fScalerMap[fCurrScCh][4]=0;
-           else if(fCabledSignal==18 || fCabledSignal==77) fScalerMap[fCurrScCh][4]=1;
-           else if(fCabledSignal==19 || fCabledSignal==78) fScalerMap[fCurrScCh][4]=2;
-           else if(fCabledSignal==20 || fCabledSignal==79) fScalerMap[fCurrScCh][4]=3;
-           else if(fCabledSignal==21 || fCabledSignal==80) fScalerMap[fCurrScCh][4]=4;
+           if(fCabledSignal==kZPCC || fCabledSignal==kZPCCD) fScalerMap[fCurrScCh][4]=0;
+           else if(fCabledSignal==kZPC1 || fCabledSignal==kZPC1D)  fScalerMap[fCurrScCh][4]=1;
+           else if(fCabledSignal==kZPC2 || fCabledSignal==kZPC2D)  fScalerMap[fCurrScCh][4]=2;
+           else if(fCabledSignal==kZPC3 || fCabledSignal==kZPC3D)  fScalerMap[fCurrScCh][4]=3;
+           else if(fCabledSignal==kZPC4 || fCabledSignal==kZPC4D)  fScalerMap[fCurrScCh][4]=4;
          }
          else if(fCabledSignal==22 || fCabledSignal==23 ||
                  fCabledSignal==81 || fCabledSignal==82){
            fScalerMap[fCurrScCh][3] = 3; // ZEM
            //
-           if(fCabledSignal==22 || fCabledSignal==81)     fScalerMap[fCurrScCh][4]=1;
-           else if(fCabledSignal==23 || fCabledSignal==82) fScalerMap[fCurrScCh][4]=2;
+           if(fCabledSignal==kZEM1 || fCabledSignal==kZEM1D)      fScalerMap[fCurrScCh][4]=1;
+           else if(fCabledSignal==kZEM2 || fCabledSignal==kZEM2D) fScalerMap[fCurrScCh][4]=2;
          }
          // Ch debug.
          //printf("\t VME scaler mod. %d ch. %d, signal %d",fScalerMap[fCurrScCh][0],fADCChannel,fCabledSignal);
@@ -674,8 +677,9 @@ Bool_t AliZDCRawStream::Next()
     }
      
     // Get geo address of current word
-    fADCModule = (Int_t) ((fBuffer & 0xf8000000)>>27);
-    if(fIsTDCHeaderRead)fADCModule = kZDCTDCGeo;
+    if(fIsTDCHeaderRead && fIsZDCTDCHeader) fADCModule = kZDCTDCGeo;
+    else if(fIsTDCHeaderRead && fIsADDTDCHeader) fADCModule = kADDTDCGeo;
+    else fADCModule = (Int_t) ((fBuffer & 0xf8000000)>>27);
     
     // ************************************ ADC MODULES ************************************
     if(fADCModule>=kFirstADCGeo && fADCModule<=kLastADCGeo){
@@ -777,32 +781,24 @@ Bool_t AliZDCRawStream::Next()
        //printf("  AliZDCRawStream -> EOB --------------------------\n");
       }
     }
-    // ********************************* ZDC TDC *********************************
-    else if(fADCModule==kZDCTDCGeo && fIsTDCHeaderRead==kFALSE){
-      fIsZDCTDCHeader = kTRUE;
+    // ********************************* TDC *********************************
+    else if(fADCModule==kTDCFakeGeo && fIsTDCHeaderRead==kFALSE){
+      // *** TDC header
       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;
+      // GEO address from TDC header
+      fADCModule = (Int_t) (fBuffer & 0x1f);
+      if(fADCModule==kZDCTDCGeo){ // *** ZDC TDC
+        fIsZDCTDCHeader = kTRUE;
+        //Ch. debug
+        //printf("  AliZDCRawStream -> ZDC TDC: mod.%d\n",fADCModule);
       }
-      // *** TDC  EOB
-      if((fBuffer & 0x07000000) == 0x04000000){
-        fIsADCEOB = kTRUE;
-       //printf("  AliZDCRawStream -> ADD TDC EOB\n");
+      else if (fADCModule==kADDTDCGeo){ // *** ADD TDC
+        fIsADDTDCHeader = kTRUE;
+        //Ch. debug
+        //printf("  AliZDCRawStream -> ADD TDC: mod.%d\n",fADCModule);
       }
-   }
+    }
     // ********************************* VME SCALER HEADER *********************************
     else if(fADCModule == kScalerGeo){
       if(fBuffer & 0x04000000 && fIsScHeaderRead==kFALSE){ // *** Scaler header
@@ -861,14 +857,36 @@ Bool_t AliZDCRawStream::Next()
     }
     // ********************************** ZDC TDC DATA **********************************
     //  ZDC TDC data
-    if(fIsTDCHeaderRead && fPosition>=fTDCStartCounter+1){ 
+    if(fIsTDCHeaderRead && fIsZDCTDCHeader && fPosition>=fTDCStartCounter+1){ 
+      fIsADCDataWord=kFALSE; fIsScalerWord=kFALSE;
+      if(((fBuffer & 0xf0000000)==0x00000000) && (((fBuffer & 0x08000000) >> 27) == 0)){ // TDC datum
+        fADCChannel = (Int_t) ((fBuffer & 0x3e00000) >> 21);
+       fZDCTDCdatum = (Int_t) (fBuffer & 0x1fffff);
+        // Ch. debug
+        //printf("  AliZDCRawStream -> ZDC TDC mod. %d ch. %d datum %d\n",fADCModule,fADCChannel,fZDCTDCdatum);
+      }
+      if(((fBuffer & 0xf0000000) == 0x80000000) && ((fBuffer & 0x08000000) >> 27) == 0){
+       // Trailer
+       fIsTDCHeaderRead = kFALSE;
+        // Ch. debug
+        //printf("  AliZDCRawStream -> ZDC TDC global trailer\n");
+      }
+    }
+    // ********************************** ADD TDC DATA **********************************
+    //  ADD TDC data
+    if(fIsTDCHeaderRead && fIsADDTDCHeader && 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)==0x00000000) && (((fBuffer & 0x08000000) >> 27) == 0)){ // TDC datum
+        fADCChannel = (Int_t) ((fBuffer & 0x3e00000) >> 21);
+       fADDTDCdatum = (Int_t) (fBuffer & 0x1fffff);
+        // Ch. debug
+        //printf("  AliZDCRawStream -> ADD TDC mod. %d ch. %d datum %d\n",fADCModule,fADCChannel,fADDTDCdatum);
+      }
       if(((fBuffer & 0xf0000000) == 0x80000000) && ((fBuffer & 0x08000000) >> 27) == 0){
+       // Trailer
        fIsTDCHeaderRead = kFALSE;
         // Ch. debug
-        //printf("  AliZDCRawStream -> ZDC TDC trailer\n");
+        //printf("  AliZDCRawStream -> ADD TDC global trailer\n");
       }
     }
     // ******************************** TRIGGER SCALER DATA ********************************
index 9c10748..6450205 100644 (file)
@@ -25,7 +25,12 @@ class AliZDCRawStream: public TObject {
   public :
     
     // Module type codes
-    enum{kV965=1, kV830=2, kTRG=3, kTRGI=4, kPU=5, KV1290=6, kV775N=7}; 
+    enum ZDCModules{kV965=1, kV830=2, kTRG=3, kTRGI=4, kPU=5, KV1290=6, kV775N=7}; 
+    
+    // Module type codes
+    enum ZDCGeoAddr{kFirstADCGeo=0, kLastADCGeo=3, kADDADCGeo=5,
+        kTDCFakeGeo=8, kZDCTDCGeo=4, kADDTDCGeo=6,
+        kScalerGeo=16, kPUGeo=29, kTrigScales=30, kTrigHistory=31};
     
     // Signal codes for ZDC 
     // Same codes used in DAQ configuration file
@@ -48,10 +53,10 @@ class AliZDCRawStream: public TObject {
         kL1MBI=50, kL1CNI=51, kL1SCI=52, kL1EMDI=53, kL0I=54, 
         kL1MBO=55, kL1CNO=56, kL1SCO=57, kL1EMDO=58, 
         kHMBCN=59, kHSCEMD=60,
-        kZNACD=61, kZNA1CD=62, kZNA2D=63, kZNA3D=64, kZNA4D=65,
-        kZPACD=66, kZPA1CD=67, kZPA2D=68, kZPA3D=69, kZPA4D=70,
-        kZNCCD=71, kZNC1CD=72, kZNC2D=73, kZNC3D=74, kZNC4D=75,
-        kZPCCD=76, kZPC1CD=77, kZPC2D=78, kZPC3D=79, kZPC4D=80,
+        kZNACD=61, kZNA1D=62, kZNA2D=63, kZNA3D=64, kZNA4D=65,
+        kZPACD=66, kZPA1D=67, kZPA2D=68, kZPA3D=69, kZPA4D=70,
+        kZNCCD=71, kZNC1D=72, kZNC2D=73, kZNC3D=74, kZNC4D=75,
+        kZPCCD=76, kZPC1D=77, kZPC2D=78, kZPC3D=79, kZPC4D=80,
         kZEM1D=81, kZEM2D=82,
         kZDCAMonD=83, kZDCCMonD=84,
         kZNAD=85, kZPAD=86, kZNCD=87, kZPCD=88, kZEMD=89,
@@ -79,12 +84,6 @@ class AliZDCRawStream: public TObject {
 
     virtual void ReadCDHHeader();
 
-    Bool_t IsZDCTDCHeader() const {return fIsZDCTDCHeader;}
-    
-    Bool_t IsAddChannel()   const {return fIsADDChannel;}
-    Bool_t IsADDTDCHeader() const {return fIsADDTDCHeader;}
-    Bool_t IsAddTDCdatum()  const {return fIsADDTDCdatum;}
-
     UInt_t GetRawBuffer()      const {return fBuffer;}
     Int_t  GetReadOutCard()    const {return fReadOutCard;}
     
@@ -99,6 +98,18 @@ class AliZDCRawStream: public TObject {
     Int_t  GetADCChannel()    const {return fADCChannel;}
     Int_t  GetADCValue()      const {return fADCValue;}
     Int_t  GetADCGain()       const {return fADCGain;}
+
+    Int_t  GetModuleGEO()     const {return fADCModule;}
+    Int_t  GetChannel()       const {return fADCChannel;}
+    
+    Bool_t IsZDCTDCHeader()   const {return fIsZDCTDCHeader;}
+    Bool_t IsZDCTDCDatum()    const {return fIsZDCTDCdatum;}
+    Int_t  GetZDCTDCDatum()   const {return fZDCTDCdatum;}
+    
+    Bool_t IsADDADCChannel()  const {return fIsADDChannel;}
+    Int_t  GetADDADCDatum()   const {return fADDADCdatum;}
+    Bool_t IsADDTDCdatum()    const {return fIsADDTDCdatum;}
+    Int_t  GetADDTDCDatum()   const {return fADDTDCdatum;}
     
     AliCDBStorage *SetStorage(const char* uri);
 
@@ -258,17 +269,23 @@ class AliZDCRawStream: public TObject {
     Bool_t fIsL0BitSet;     // true if L0 bit in history words = 1 
     Bool_t fIsPileUpEvent;  // true if pile up bits in history words = 0
     
-    // ZDC TDC
-    Bool_t fIsZDCTDCHeader;  // true if datum is a ZDC TDC header
-    Bool_t fIsTDCHeaderRead; // true when streaming TDC data
-    Int_t  fTDCStartCounter; // counts after TDC header
-    
-    // ADD part
+    // ADD ADC
     Bool_t fIsADDChannel;   // true if datum is an ADD ADC channel
-    Bool_t fIsADDTDCHeader; // true if datum is an ADD TDC channel
-    Bool_t fIsADDTDCdatum;  // true if datum is an ADD TDC channel
+    Int_t  fADDADCdatum;    // ADD ADC datum
+    
+    // TDCs
+    Bool_t fIsTDCHeaderRead; // true when streaming one of the 2 TDCs
+    Int_t  fTDCStartCounter; // counts after a TDC header
+    //
+    Bool_t fIsZDCTDCHeader;  // true if datum is a ZDC TDC header
+    Bool_t fIsZDCTDCdatum;   // true if the current is a TDC datum
+    Int_t  fZDCTDCdatum;     // datum for ZDC TDC
+    //
+    Bool_t fIsADDTDCHeader;  // true if datum is an ADD TDC channel
+    Bool_t fIsADDTDCdatum;   // true when streaming ADD TDC data
+    Int_t  fADDTDCdatum;     // datum for ADD TDC
    
-    ClassDef(AliZDCRawStream, 18)    // class for reading ZDC raw data
+    ClassDef(AliZDCRawStream, 19)    // class for reading ZDC raw data
 };
 
 #endif