]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - ZDC/AliZDCRawStream.cxx
Helper method to create input chain AOD with friend AODVertexingHF (A.Rossi)
[u/mrichter/AliRoot.git] / ZDC / AliZDCRawStream.cxx
index 8ea781a08f73bd6dd2615738ab59b2fe13fd1134..9465b087bc59f220e21566dd9a38a5aa09788ed5 100644 (file)
@@ -48,6 +48,8 @@ AliZDCRawStream::AliZDCRawStream(AliRawReader* rawReader) :
   fIsADCDataWord(kFALSE),
   fIsADCHeader(kFALSE),
   fIsADCEOB(kFALSE),
+  fSODReading(kFALSE),
+  fIsMapRead(kFALSE),
   fDARCEvBlockLenght(0),  
   fDARCBlockAttributes(0),
   fDeadfaceOffset(0),
@@ -59,8 +61,10 @@ AliZDCRawStream::AliZDCRawStream(AliRawReader* rawReader) :
   fADCChannel(-1),      
   fADCValue(-1),        
   fADCGain(-1),
+  fIsUnderflow(kFALSE),
+  fIsOverflow(kFALSE),
   fScNWords(0),          
-  fScGeo(-1),    
+  fScGeo(0),     
   fScTS(0),      
   fScTriggerNumber(0),
   fIsScEventGood(kFALSE),
@@ -90,6 +94,8 @@ AliZDCRawStream::AliZDCRawStream(const AliZDCRawStream& stream) :
   fIsADCDataWord(stream.fIsADCDataWord), 
   fIsADCHeader(stream.fIsADCHeader), 
   fIsADCEOB(stream.fIsADCEOB), 
+  fSODReading(stream.fSODReading),
+  fIsMapRead(stream.fIsMapRead),
   fDARCEvBlockLenght(stream.fDARCEvBlockLenght),  
   fDARCBlockAttributes(stream.fDARCBlockAttributes),
   fDeadfaceOffset(stream.GetDeadfaceOffset()),
@@ -101,6 +107,8 @@ AliZDCRawStream::AliZDCRawStream(const AliZDCRawStream& stream) :
   fADCChannel(stream.GetADCChannel()),  
   fADCValue(stream.GetADCValue()),      
   fADCGain(stream.GetADCGain()),
+  fIsUnderflow(stream.fIsUnderflow),
+  fIsOverflow(stream.fIsOverflow),
   fScNWords(stream.GetScNWords()),       
   fScGeo(stream.GetScGeo()),     
   fScTS(stream.GetScTS()),       
@@ -136,6 +144,16 @@ AliZDCRawStream::~AliZDCRawStream()
 void AliZDCRawStream::ReadChMap()
 {
   // Reading channel map
+  printf("\n\t Reading ADC mapping from OCDB\n");
+  AliZDCChMap * chMap = GetChMap();
+  for(Int_t i=0; i<48; i++){
+    fMapADC[i][0] = chMap->GetADCModule(i);
+    fMapADC[i][1] = chMap->GetADCChannel(i);
+    fMapADC[i][2] = -1;
+    fMapADC[i][3] = chMap->GetDetector(i);
+    fMapADC[i][4] = chMap->GetSector(i);
+  }
+  fIsMapRead = kTRUE;
 }
 
 //_____________________________________________________________________________
@@ -146,11 +164,7 @@ void AliZDCRawStream::ReadCDHHeader()
   if(!header) {
       AliError("\t No CDH in raw data streaming\n");
       fRawReader->AddMajorErrorLog(kCDHError);
-      //
-      // For the moment to debug the classe the event is read
-      // also if the CDH is not present in the data buffer
-      // ******* TO BE CHANGED!!! ***************************
-      //return;
+      return;
   }
   else{
     //printf("\t AliZDCRawStream::ReadCDHHeader -> Data Size = %d\n",fRawReader->GetDataSize());
@@ -158,10 +172,10 @@ void AliZDCRawStream::ReadCDHHeader()
     fDARCEvBlockLenght = header->fSize;
     //printf("\t AliZDCRawStream::ReadCDHHeader -> fDARCEvBlockLenght = %d\n",fDARCEvBlockLenght);
     
-    //UChar_t message = header->GetAttributes();
+    UChar_t message = header->GetAttributes();
     //printf("\t AliZDCRawStream::ReadCDHHeader -> Attributes %x\n",message);
     
-    /*if(message & 0x10){ // COSMIC RUN
+    if(message & 0x10){ // COSMIC RUN
        printf("\t STANDALONE_COSMIC RUN raw data found\n");
     }
     else if(message & 0x20){ // PEDESTAL RUN
@@ -169,7 +183,7 @@ void AliZDCRawStream::ReadCDHHeader()
     }
     else if(message & 0x30){ // LASER RUN
        printf("\t STANDALONE_LASER RUN raw data found\n");
-    }*/
+    }
     
     if(header->GetL1TriggerMessage() & 0x1){ // Calibration bit set in CDH
       fIsCalib = kTRUE;
@@ -179,46 +193,46 @@ void AliZDCRawStream::ReadCDHHeader()
     
     UInt_t status = header->GetStatus();
     //printf("\t AliZDCRawStream::ReadCDHHeader -> status = %d\n",status);
-    if(status & 0x000f == 0x0001){
+    if((status & 0x000f) == 0x0001){
       AliWarning("CDH -> DARC trg0 overlap error\n");
       fRawReader->AddMajorErrorLog(kDARCError);
     }
-    if(status & 0x000f == 0x0002){
+    if((status & 0x000f) == 0x0002){
       AliWarning("CDH -> DARC trg0 missing error\n");
       fRawReader->AddMajorErrorLog(kDARCError);
     }
-    if(status & 0x000f == 0x0004){
+    if((status & 0x000f) == 0x0004){
       AliWarning("CDH -> DARC data parity error\n");
       fRawReader->AddMajorErrorLog(kDARCError);
     }
-    if(status & 0x000f == 0x0008){
+    if((status & 0x000f) == 0x0008){
       AliWarning("CDH -> DARC ctrl parity error\n");
       fRawReader->AddMajorErrorLog(kDARCError);
     }
     //
-    if(status & 0x00f0 == 0x0010){
+    if((status & 0x00f0) == 0x0010){
       AliWarning("CDH -> DARC trg unavailable\n");
       fRawReader->AddMajorErrorLog(kDARCError);
     }
-    if(status & 0x00f0 == 0x0020){
+    if((status & 0x00f0) == 0x0020){
       AliWarning("CDH -> DARC FEE error\n");
       fRawReader->AddMajorErrorLog(kDARCError);
     }
     //
-    if(status & 0x0f00 == 0x0200){
+    if((status & 0x0f00) == 0x0200){
       AliWarning("CDH -> DARC L1 time violation\n");
       fRawReader->AddMajorErrorLog(kDARCError);
     }
-    if(status & 0x0f00 == 0x0400){
+    if((status & 0x0f00) == 0x0400){
       AliWarning("CDH -> DARC L2 time-out\n");
       fRawReader->AddMajorErrorLog(kDARCError);
     }
-    if(status & 0x0f00 == 0x0800){
+    if((status & 0x0f00) == 0x0800){
       AliWarning("CDH -> DARC prepulse time violation\n");
       fRawReader->AddMajorErrorLog(kDARCError);
     }
     //
-    if(status & 0xf000 == 0x1000){
+    if((status & 0xf000) == 0x1000){
       AliWarning("CDH -> DARC other error\n");
       fRawReader->AddMajorErrorLog(kDARCError);
     }
@@ -236,9 +250,13 @@ Bool_t AliZDCRawStream::Next()
   if(!fRawReader->ReadNextInt((UInt_t&) fBuffer)) return kFALSE;
   fIsChMapping = kFALSE; fIsADCHeader = kFALSE; 
   fIsADCDataWord = kFALSE; fIsADCEOB = kFALSE;
+  fIsUnderflow = kFALSE;
+  fIsOverflow = kFALSE; 
+  fSector[0]=fSector[1] = -1;
   
   fEvType = fRawReader->GetType();
   //printf("\n\t AliZDCRawStream::Next() -> ev. type %d\n",fEvType);
+  //printf("\n  AliZDCRawStream::Next() - fBuffer[%d] = %x\n",fPosition, fBuffer);
   
   if(fPosition==0){
     //if(fEvType==7 || fEvType ==8){ //Physics or calibration event
@@ -247,11 +265,18 @@ Bool_t AliZDCRawStream::Next()
     //}
     fNConnCh=0;
   }
-  //printf("\n  AliZDCRawStream::Next() - fBuffer[%d] = %x\n",fPosition, fBuffer);
+  
+  // *** End of event
+  if(fBuffer == 0xcafefade){
+    //printf("\n-> AliZDCRawStream::Next() ***** End of ZDC event *****\n\n");
+    return kFALSE;
+  }
   
   // -------------------------------------------
   // --- DARC header
   // -------------------------------------------
+  // If the CDH has been read then 
+  // the DARC header must follow
   if(fIsDARCHeader){
     //printf("\t ---- DARC header ----\n");
     if(fIsCalib){
@@ -265,13 +290,16 @@ Bool_t AliZDCRawStream::Next()
     fDataOffset = 1+fDeadbeefOffset;
     fIsDARCHeader = kFALSE;
   }
-  
+
     
   // -------------------------------------------
   // --- Start of data event
   // --- decoding mapping of connected ADC ch.
   // -------------------------------------------
-  if(fEvType==10){
+  // In the SOD event ADC ch. mapping is written
+  if(fEvType==10 && fSODReading){
+    //printf("\n-> AliZDCRawStream::Next() - fBuffer[%d] = %x\n",fPosition, fBuffer);
+    
     if(fPosition>fDataOffset){
       if((fBuffer&0xff000000) == 0xff000000){
         if(fPosition==(fDataOffset+1)){ 
@@ -279,24 +307,27 @@ Bool_t AliZDCRawStream::Next()
           fNConnCh=0;  
         }
        else{
-         //printf("\n\t End of StartOfData event\n\n");
-         return kTRUE;
+         //printf("\n\t End of ZDC StartOfData event\n\n");
+          //printf("AliZDCRawStream: fSODReading after SOD reading set to %d\n", fSODReading);
+         return kFALSE;
        }
       }
       else if((fBuffer&0x80000000)>>31 == 1){
         // Mapping identification
        fADCModule = ((fBuffer & 0x7f000000)>>24);
-       fModType = ((fBuffer & 0xfff000)>>8);
+       fModType = ((fBuffer & 0xfff00)>>8);
        fADCNChannels = (fBuffer & 0xff);
        //
-       //printf("\tGEO %d, mod. type %d, #ch. %d\n",fADCModule,fModType,fADCNChannels);
+       //printf("  ******** GEO %d, mod. type %d, #ch. %d\n",fADCModule,fModType,fADCNChannels);
       }
-      else if(fModType==0 && (fBuffer&0x80000000)>>31 == 0){
+      else if(fModType==1 && (fBuffer&0x80000000)>>31 == 0){
         // Channel signal
        if((fBuffer&0x40000000)>>30==0){ // high range chain ADC
          fIsChMapping = kTRUE;
          fADCChannel = ((fBuffer & 0x3fff0000)>>16);
          fCabledSignal = (fBuffer&0xffff);
+         //printf("\tADC ch. %d, signal %d\n",fADCChannel,fCabledSignal);
+         //
          fMapADC[fNConnCh][0] = fADCModule;
          fMapADC[fNConnCh][1] = fADCChannel;
          fMapADC[fNConnCh][2] = fCabledSignal;
@@ -310,19 +341,19 @@ Bool_t AliZDCRawStream::Next()
             || fCabledSignal==24 || fCabledSignal==48){
            fMapADC[fNConnCh][3] = 4; //ZNA
            //
-           if(fCabledSignal==2 || fCabledSignal==26) fMapADC[fNConnCh][4]=0;
-           else if(fCabledSignal==3 || fCabledSignal==27) fMapADC[fNConnCh][4]=1;
-           else if(fCabledSignal==4 || fCabledSignal==28) fMapADC[fNConnCh][4]=2;
-           else if(fCabledSignal==5 || fCabledSignal==29) fMapADC[fNConnCh][4]=3;
-           else if(fCabledSignal==6 || fCabledSignal==30) fMapADC[fNConnCh][4]=4;
+           if(fCabledSignal==2 || fCabledSignal==26)       fMapADC[fNConnCh][4]=0;
+           else if(fCabledSignal==3 || fCabledSignal==27)  fMapADC[fNConnCh][4]=1;
+           else if(fCabledSignal==4 || fCabledSignal==28)  fMapADC[fNConnCh][4]=2;
+           else if(fCabledSignal==5 || fCabledSignal==29)  fMapADC[fNConnCh][4]=3;
+           else if(fCabledSignal==6 || fCabledSignal==30)  fMapADC[fNConnCh][4]=4;
            else if(fCabledSignal==24 || fCabledSignal==48) fMapADC[fNConnCh][4]=5;
          }
          else if((fCabledSignal>=7 && fCabledSignal<=11) || (fCabledSignal>=31 && fCabledSignal<=35)){
            fMapADC[fNConnCh][3] = 5; //ZPA
            //
-           if(fCabledSignal==7 || fCabledSignal==31) fMapADC[fNConnCh][4]=0;
-           else if(fCabledSignal==8 || fCabledSignal==32) fMapADC[fNConnCh][4]=1;
-           else if(fCabledSignal==9 || fCabledSignal==33) fMapADC[fNConnCh][4]=2;
+           if(fCabledSignal==7 || fCabledSignal==31)       fMapADC[fNConnCh][4]=0;
+           else if(fCabledSignal==8 || fCabledSignal==32)  fMapADC[fNConnCh][4]=1;
+           else if(fCabledSignal==9 || fCabledSignal==33)  fMapADC[fNConnCh][4]=2;
            else if(fCabledSignal==10 || fCabledSignal==34) fMapADC[fNConnCh][4]=3;
            else if(fCabledSignal==11 || fCabledSignal==35) fMapADC[fNConnCh][4]=4;
          }
@@ -330,7 +361,7 @@ Bool_t AliZDCRawStream::Next()
             || fCabledSignal==25 || fCabledSignal==49){
            fMapADC[fNConnCh][3] = 1; //ZNC
            //
-           if(fCabledSignal==12 || fCabledSignal==36) fMapADC[fNConnCh][4]=0;
+           if(fCabledSignal==12 || fCabledSignal==36)      fMapADC[fNConnCh][4]=0;
            else if(fCabledSignal==13 || fCabledSignal==37) fMapADC[fNConnCh][4]=1;
            else if(fCabledSignal==14 || fCabledSignal==38) fMapADC[fNConnCh][4]=2;
            else if(fCabledSignal==15 || fCabledSignal==39) fMapADC[fNConnCh][4]=3;
@@ -340,7 +371,7 @@ Bool_t AliZDCRawStream::Next()
          else if((fCabledSignal>=17 && fCabledSignal<=21) || (fCabledSignal>=41 && fCabledSignal<=45)){
            fMapADC[fNConnCh][3] = 2; //ZPC
            //
-           if(fCabledSignal==17 || fCabledSignal==41) fMapADC[fNConnCh][4]=0;
+           if(fCabledSignal==17 || fCabledSignal==41)      fMapADC[fNConnCh][4]=0;
            else if(fCabledSignal==18 || fCabledSignal==42) fMapADC[fNConnCh][4]=1;
            else if(fCabledSignal==19 || fCabledSignal==43) fMapADC[fNConnCh][4]=2;
            else if(fCabledSignal==20 || fCabledSignal==44) fMapADC[fNConnCh][4]=3;
@@ -349,27 +380,28 @@ Bool_t AliZDCRawStream::Next()
          else if(fCabledSignal==22 || fCabledSignal==23 || fCabledSignal==46 || fCabledSignal==47){
            fMapADC[fNConnCh][3] = 3;
            //
-           if(fCabledSignal==22 || fCabledSignal==46) fMapADC[fNConnCh][4]=1;
+           if(fCabledSignal==22 || fCabledSignal==46)      fMapADC[fNConnCh][4]=1;
            else if(fCabledSignal==23 || fCabledSignal==47) fMapADC[fNConnCh][4]=2;
          }
          //
-         //printf("AliZDCRawStream -> datum %d mod. %d ch. %d signal %d, det %d, tow %d\n",
+         //if(fNConnCh<48) printf("AliZDCRawStream: datum %d mod. %d ch. %d signal %d, det %d, tow %d\n",
          //   fNConnCh,fADCModule,fADCChannel,fBuffer&0xffff,fMapADC[fNConnCh][3],fMapADC[fNConnCh][4]);
          //
          fNConnCh++;
-         if(fNConnCh>48){
+         if(fNConnCh>=48){
            // Protection manually set since it returns:
            // RawData48 mod. 3 ch. 2048 signal 515
            // to be checked with Pietro!!!!!!!!!!!!!!!!!!!!!!!
-           AliWarning("\t AliZDCRawStream -> ERROR: no. of cabled channels > 48!!!\n");
-           return kFALSE;
+           //AliWarning("\t AliZDCRawStream -> ERROR: no. of cabled channels > 48!!!\n");
+            fPosition++;
+           return kTRUE;
          }
        }
-      }
+      }// ModType=1 (ADC mapping)
     }
     fPosition++;
     return kTRUE;
-  }
+  } // SOD event
   
   // -------------------------------------------
   // --- DARC data
@@ -380,7 +412,7 @@ Bool_t AliZDCRawStream::Next()
   }
   else if(fPosition==fDeadfaceOffset){
     if(fBuffer != 0xdeadface){
-      AliWarning("AliZDCRawStream -> NO deadface after DARC data\n");
+      AliError("AliZDCRawStream -> NO deadface after DARC data\n");
       fRawReader->AddMajorErrorLog(kDARCError);  
     }
     else{
@@ -398,7 +430,7 @@ Bool_t AliZDCRawStream::Next()
   }
   else if(fPosition==fDeadbeefOffset){
     if(fBuffer != 0xdeadbeef){
-      AliWarning("AliZDCRawStream -> NO deadbeef after DARC global data\n");
+      AliError("AliZDCRawStream -> NO deadbeef after DARC global data\n");
       fRawReader->AddMajorErrorLog(kDARCError);  
     }
     else{
@@ -412,7 +444,10 @@ Bool_t AliZDCRawStream::Next()
   // --- ADC buffer + scaler
   // -------------------------------------------
   else if(fPosition>=fDataOffset){
-  
+    
+    //printf("AliZDCRawStream: fSODReading = %d\n", fSODReading);
+    if(!fSODReading && !fIsMapRead) ReadChMap();
+    
     // Not valid datum before the event 
     // there MUST be a NOT valid datum before the event!!!
     if(fPosition==fDataOffset){
@@ -440,14 +475,10 @@ Bool_t AliZDCRawStream::Next()
     fADCModule = ((fBuffer & 0xf8000000)>>27);
     if(fADCModule == kScalerAddress){
       DecodeScaler();
-    }
+    } 
     else{//ADC module
-      // *** End of event
-      if(fBuffer == 0xcafefade){
-        //printf("  AliZDCRawStream ->  End of ZDC event!\n");
-      }
       // *** ADC header
-      else if((fBuffer & 0x07000000) == 0x02000000){
+      if((fBuffer & 0x07000000) == 0x02000000){
         fIsADCHeader = kTRUE;
        fADCNChannels = ((fBuffer & 0x00003f00)>>8);
        //printf("  AliZDCRawStream -> HEADER: ADC mod.%d has %d ch. \n",fADCModule,fADCNChannels);
@@ -461,60 +492,57 @@ Bool_t AliZDCRawStream::Next()
        
        //printf("  AliZDCRawStream -> DATA: ADC mod. %d ch. %d gain %d value %d\n",
        //  fADCModule,fADCChannel,fADCGain,fADCValue);
-
-       // Valid ADC data (not underflow nor overflow)
-        if(!(fBuffer & 0x1000) && !(fBuffer & 0x2000)){ 
        
-         // Checking if the channel map for the ADCs has been provided/read
-         if(fMapADC[0][0]==-1){
-           // Temporary solution (to be changed!!!!)
-           //printf("\t ATTENTION!!! No ADC mapping has been found/provided!!!\n");
-           //return kFALSE;
-           char * mapFileName=gSystem->ExpandPathName("$ALICE_ROOT/ZDC/ShuttleInput/ZDCChMapping.dat");
-           FILE *file; 
-           Int_t ival[48][6];
-           if((file = fopen(mapFileName,"r")) != NULL){
-             for(Int_t j=0; j<48; j++){
-               for(Int_t k=0; k<6; k++){
-                 fscanf(file,"%d",&ival[j][k]);
-               }
-               fMapADC[j][0] = ival[j][1];
-               fMapADC[j][1] = ival[j][2];
-               fMapADC[j][2] = ival[j][3];
-               fMapADC[j][3] = ival[j][4];
-               fMapADC[j][4] = ival[j][5];
-              }
-           }
-           else{
-               printf("File %s not found\n",mapFileName);
-               return kFALSE;
-           }
-
-         }
-         //
-         //printf("\n Reading map!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n");
-         /*for(Int_t ci=0; ci<48; ci++){
-           printf("  %d mod. %d ch. %d signal %d\n",ci,fMapADC[ci][0],
-            fMapADC[ci][1], fMapADC[ci][2]);
-         }
-         */
-         for(Int_t k=0; k<48; k++){
-            if(fADCModule==fMapADC[k][0] && fADCChannel==fMapADC[k][1]){
-              fSector[0] = fMapADC[k][3];
-              fSector[1] = fMapADC[k][4];
-              break;
-            } 
-         }
-         //
-         //printf("AliZDCRawStream -> ADCmod. %d ADCch %d det %d, sec %d\n",
-         //  fADCModule,fADCChannel,fSector[0],fSector[1]);
-         
-         if(fADCModule<0 || fADCModule>3){
-            AliWarning(Form("   AliZDCRawStream -> No valid ADC module: %d\n",fADCModule));
-            fRawReader->AddMajorErrorLog(kInvalidADCModule);
-          }
+       // Checking if the channel map for the ADCs has been provided/read
+       if(fMapADC[0][0]==-1){
+         printf("\t ATTENTION!!! No ADC mapping has been found/provided!!!\n");
+         return kFALSE;
+       }
+       //
+       /*for(Int_t ci=0; ci<48; ci++){
+         printf("  %d mod. %d ch. %d detector %d sector %d\n",ci,fMapADC[ci][0],
+          fMapADC[ci][1], fMapADC[ci][3], fMapADC[ci][4]);
+       }*/
+               
+       // Scan of the map to assign the correct volumes
+       Int_t foundMapEntry = kFALSE;
+       for(Int_t k=0; k<48; k++){
+          if(fADCModule==fMapADC[k][0] && fADCChannel==fMapADC[k][1]){
+            fSector[0] = fMapADC[k][3];
+            fSector[1] = fMapADC[k][4];
+            foundMapEntry = kTRUE;
+            break;
+          } 
+       }
+       if(foundMapEntry==kFALSE){
+         AliWarning(Form("AliZDCRawStream -> No valid entry found in ADC mapping\n"));
+         AliWarning(Form("\t for raw data %d ADCmod. %d ch. %d gain %d\n",
+             fPosition,fADCModule,fADCChannel,fADCGain));
+       }
+       //
+       //printf("AliZDCRawStream -> ADCmod. %d ch. %d gain %d -> det %d sec %d\n",
+       //  fADCModule,fADCChannel,fADCGain,fSector[0],fSector[1]);
+       
+       // Final checks
+       if(fSector[0]<1 || fSector[0]>5){
+          AliError(Form("      AliZDCRawStream -> No valid detector assignment: %d\n",fSector[0]));
+          fRawReader->AddMajorErrorLog(kInvalidSector);
+       }
+       //
+       if(fSector[1]<0 || fSector[1]>5){
+          AliError(Form("      AliZDCRawStream -> No valid sector assignment: %d\n",fSector[1]));
+          fRawReader->AddMajorErrorLog(kInvalidSector);
+       }
+       //
+       if(fADCModule<0 || fADCModule>3){
+          AliError(Form("      AliZDCRawStream -> No valid ADC module: %d\n",fADCModule));
+          fRawReader->AddMajorErrorLog(kInvalidADCModule);
+        }
 
-        }//No underflow nor overflow   
+       // Checking the underflow and overflow bits
+        if(fBuffer & 0x1000)       fIsUnderflow = kTRUE;
+       else if (fBuffer & 0x2000) fIsOverflow = kTRUE; 
+               
       }//ADC data word
       // *** ADC EOB
       else if((fBuffer & 0x07000000) == 0x04000000){
@@ -556,3 +584,29 @@ void AliZDCRawStream::DecodeScaler()
   fPosition++;
   
 }
+
+//_____________________________________________________________________________
+AliCDBStorage* AliZDCRawStream::SetStorage(const char *uri) 
+{
+  // Setting the storage
+  
+  AliCDBStorage *storage = AliCDBManager::Instance()->GetStorage(uri); 
+
+  return storage; 
+}
+
+
+//_____________________________________________________________________________
+AliZDCChMap* AliZDCRawStream::GetChMap() const
+{
+
+  // Getting calibration object for ZDC
+
+  AliCDBEntry  *entry = AliCDBManager::Instance()->Get("ZDC/Calib/ChMap");
+  if(!entry) AliFatal("No calibration data loaded!");  
+
+  AliZDCChMap *calibdata = dynamic_cast<AliZDCChMap*> (entry->GetObject());
+  if(!calibdata) AliFatal("Wrong calibration object in calibration  file!");
+
+  return calibdata;
+}