LCOV - code coverage report
Current view: top level - ZDC/ZDCbase - AliZDCRawStream.cxx (source / functions) Hit Total Coverage
Test: coverage.info Lines: 203 574 35.4 %
Date: 2016-06-14 17:26:59 Functions: 9 14 64.3 %

          Line data    Source code
       1             : /**************************************************************************
       2             :  * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
       3             :  *                                                                        *
       4             :  * Author: The ALICE Off-line Project.                                    *
       5             :  * Contributors are mentioned in the code where appropriate.              *
       6             :  *                                                                        *
       7             :  * Permission to use, copy, modify and distribute this software and its   *
       8             :  * documentation strictly for non-commercial purposes is hereby granted   *
       9             :  * without fee, provided that the above copyright notice appears in all   *
      10             :  * copies and that both the copyright notice and this permission notice   *
      11             :  * appear in the supporting documentation. The authors make no claims     *
      12             :  * about the suitability of this software for any purpose. It is          *
      13             :  * provided "as is" without express or implied warranty.                  *
      14             :  **************************************************************************/
      15             : 
      16             : /* $Id$ */
      17             : 
      18             : ///////////////////////////////////////////////////////////////////////////////
      19             : //                                                                           //
      20             : // This class provides access to ZDC digits in raw data.                     //
      21             : //                                                                           //
      22             : // It loops over all ZDC digits in the raw data given by the AliRawReader.   //
      23             : // The Next method goes to the next digit. If there are no digits left       //
      24             : // it returns kFALSE.                                                        //
      25             : // Getters provide information about the current digit.                      //
      26             : //                                                                           //
      27             : ///////////////////////////////////////////////////////////////////////////////
      28             : 
      29             : #include <TSystem.h>
      30             : #include "AliZDCRawStream.h"
      31             : #include "AliRawReader.h"
      32             : #include "AliRawDataHeader.h"
      33             : #include "AliRawEventHeaderBase.h"
      34             : #include "AliLog.h"
      35             : 
      36          12 : ClassImp(AliZDCRawStream)
      37             : 
      38             : 
      39             : //_____________________________________________________________________________
      40           4 : AliZDCRawStream::AliZDCRawStream(AliRawReader* rawReader) :
      41           4 :   fRawReader(rawReader),
      42           4 :   fBuffer(0),
      43           4 :   fReadOutCard(-1),
      44           4 :   fEvType(0),
      45           4 :   fPosition(0),
      46           4 :   fIsCalib(kFALSE),
      47           4 :   fIsDARCHeader(kFALSE),
      48           4 :   fIsHeaderMapping(kFALSE),
      49           4 :   fIsChMapping(kFALSE),
      50           4 :   fIsADCDataWord(kFALSE),
      51           4 :   fIsADCHeader(kFALSE),
      52           4 :   fIsADCEOB(kFALSE),
      53           4 :   fSODReading(kFALSE),
      54           4 :   fIsMapRead(kFALSE),
      55           4 :   fReadCDH(kFALSE),
      56           4 :   fDeadfaceOffset(-1),
      57           4 :   fDeadbeefOffset(-1),
      58           4 :   fDataOffset(0),
      59           4 :   fModType(-1),
      60           4 :   fADCModule(-1),
      61           4 :   fADCNChannels(-1),     
      62           4 :   fADCChannel(-1),       
      63           4 :   fADCValue(-1),         
      64           4 :   fADCGain(-1),
      65           4 :   fIsUnderflow(kFALSE),
      66           4 :   fIsOverflow(kFALSE),
      67           4 :   fScGeo(0),      
      68           4 :   fScNWords(0),   
      69           4 :   fScTriggerSource(0),    
      70           4 :   fScTriggerNumber(0),
      71           4 :   fIsScEventGood(kTRUE),
      72           4 :   fIsScHeaderRead(kFALSE),
      73           4 :   fScStartCounter(0),
      74           4 :   fScEvCounter(0),
      75           4 :   fIsScalerWord(kFALSE),
      76           4 :   fDetPattern(0),
      77           4 :   fTrigCountNWords(0),
      78           4 :   fIsTriggerScaler(kFALSE),
      79           4 :   fTrigCountStart(0),
      80           4 :   fMBTrigInput(0),         
      81           4 :   fCentralTrigInput(0), 
      82           4 :   fSCentralTrigInput(0),
      83           4 :   fEMDTrigInput(0),     
      84           4 :   fL0Received(0),          
      85           4 :   fMBtrig2CTP(0),          
      86           4 :   fCentralTrig2CTP(0),  
      87           4 :   fSCentralTrig2CTP(0), 
      88           4 :   fEMDTrig2CTP(0),            
      89           4 :   fTrigHistNWords(0),
      90           4 :   fIsTriggerHistory(kFALSE),
      91           4 :   fTrigHistStart(0),
      92           4 :   fPileUpBit1stWord(0),
      93           4 :   fL0Bit1stWord(0),
      94           4 :   fCentralTrigHist(0),
      95           4 :   fMBTrigHist(0),
      96           4 :   fPileUpBit2ndWord(0),
      97           4 :   fL0Bit2ndWord(0), 
      98           4 :   fSCentralTrigHist(0),
      99           4 :   fEMDTrigHist(0),
     100           4 :   fNChannelsOn(0),
     101           4 :   fCurrentCh(-1),
     102           4 :   fCabledSignal(-1),
     103           4 :   fCurrScCh(-1),
     104           4 :   fCurrTDCCh(-1),
     105           4 :   fIsADCEventGood(kTRUE),
     106           4 :   fIsL0BitSet(kTRUE),
     107           4 :   fIsPileUpEvent(kFALSE),
     108           4 :   fIsADDChannel(kFALSE),
     109           4 :   fADDADCdatum(0),
     110           4 :   fIsTDCHeaderRead(kFALSE),
     111           4 :   fTDCStartCounter(0),
     112           4 :   fIsZDCTDCHeader(kFALSE),
     113           4 :   fIsZDCTDCdatum(kFALSE),
     114           4 :   fZDCTDCdatum(0),
     115           4 :   fZDCTDCsignal(-1),
     116           4 :   fIsADDTDCHeader(kFALSE),
     117           4 :   fIsADDTDCdatum(kFALSE),
     118           4 :   fADDTDCdatum(0),
     119           4 :   fIsPARSet(kFALSE)
     120          20 : {
     121             :   // Create an object to read ZDC raw digits
     122           4 :   fRawReader->Reset();
     123           4 :   fRawReader->Select("ZDC");
     124             :   //
     125             :   const int kNch = 48;
     126         392 :   for(Int_t i=0; i<kNch; i++){
     127        2304 :     for(Int_t j=0; j<5; j++){
     128         960 :       fMapADC[i][j]=-1;
     129         960 :       if(i<32){
     130         640 :         fScalerMap[i][j]=-1;
     131        1024 :         if(j<3) fTDCMap[i][j]=-1;
     132             :       }
     133             :     }
     134             :   }
     135             :   
     136          40 :   for(Int_t k=0; k<4; k++) fCPTInput[k] = 0;
     137             : 
     138           8 : }
     139             : 
     140             : //_____________________________________________________________________________
     141             : AliZDCRawStream::AliZDCRawStream(const AliZDCRawStream& stream) :
     142           0 :   TObject(stream),
     143           0 :   fRawReader(stream.fRawReader),
     144           0 :   fBuffer(stream.GetRawBuffer()),
     145           0 :   fReadOutCard(stream.GetReadOutCard()),
     146           0 :   fEvType(stream.fEvType),
     147           0 :   fPosition(stream.fPosition),
     148           0 :   fIsCalib(stream.fIsCalib),
     149           0 :   fIsDARCHeader(stream.fIsDARCHeader), 
     150           0 :   fIsHeaderMapping(stream.fIsHeaderMapping),
     151           0 :   fIsChMapping(stream.fIsChMapping),
     152           0 :   fIsADCDataWord(stream.fIsADCDataWord), 
     153           0 :   fIsADCHeader(stream.fIsADCHeader), 
     154           0 :   fIsADCEOB(stream.fIsADCEOB), 
     155           0 :   fSODReading(stream.fSODReading),
     156           0 :   fIsMapRead(stream.fIsMapRead),
     157           0 :   fReadCDH(stream.fReadCDH),
     158           0 :   fDeadfaceOffset(stream.GetDeadfaceOffset()),
     159           0 :   fDeadbeefOffset(stream.GetDeadbeefOffset()),
     160           0 :   fDataOffset(stream.GetDataOffset()),
     161           0 :   fModType(stream.GetModType()),
     162           0 :   fADCModule(stream.GetADCModule()),     
     163           0 :   fADCNChannels(stream.GetADCNChannels()),       
     164           0 :   fADCChannel(stream.GetADCChannel()),   
     165           0 :   fADCValue(stream.GetADCValue()),       
     166           0 :   fADCGain(stream.GetADCGain()),
     167           0 :   fIsUnderflow(stream.fIsUnderflow),
     168           0 :   fIsOverflow(stream.fIsOverflow),
     169           0 :   fScGeo(stream.GetScGeo()),      
     170           0 :   fScNWords(stream.GetScNWords()),        
     171           0 :   fScTriggerSource(stream.GetScTriggerSource()),          
     172           0 :   fScTriggerNumber(stream.fScTriggerNumber),
     173           0 :   fIsScEventGood(stream.fIsScEventGood),
     174           0 :   fIsScHeaderRead(stream.fIsScHeaderRead),
     175           0 :   fScStartCounter(stream.fScStartCounter),
     176           0 :   fScEvCounter(stream.fScEvCounter),
     177           0 :   fIsScalerWord(stream.fIsScalerWord),
     178           0 :   fDetPattern(stream.fDetPattern),
     179           0 :   fTrigCountNWords(stream.fTrigCountNWords),
     180           0 :   fIsTriggerScaler(stream.fIsTriggerScaler),
     181           0 :   fTrigCountStart(stream.fTrigCountStart),
     182           0 :   fMBTrigInput(stream.fMBTrigInput),       
     183           0 :   fCentralTrigInput(stream.fCentralTrigInput), 
     184           0 :   fSCentralTrigInput(stream.fSCentralTrigInput),
     185           0 :   fEMDTrigInput(stream.fEMDTrigInput),     
     186           0 :   fL0Received(stream.fL0Received),         
     187           0 :   fMBtrig2CTP(stream.fMBtrig2CTP),         
     188           0 :   fCentralTrig2CTP(stream.fCentralTrig2CTP),  
     189           0 :   fSCentralTrig2CTP(stream.fSCentralTrig2CTP), 
     190           0 :   fEMDTrig2CTP(stream.fEMDTrig2CTP),          
     191           0 :   fTrigHistNWords(stream.fTrigHistNWords),
     192           0 :   fIsTriggerHistory(stream.fIsTriggerHistory),
     193           0 :   fTrigHistStart(stream.fTrigHistStart),
     194           0 :   fPileUpBit1stWord(stream.fPileUpBit1stWord),
     195           0 :   fL0Bit1stWord(stream.fL0Bit1stWord), 
     196           0 :   fCentralTrigHist(stream.fCentralTrigHist),
     197           0 :   fMBTrigHist(stream.fMBTrigHist),
     198           0 :   fPileUpBit2ndWord(stream.fPileUpBit2ndWord),
     199           0 :   fL0Bit2ndWord(stream.fL0Bit2ndWord), 
     200           0 :   fSCentralTrigHist(stream.fSCentralTrigHist),
     201           0 :   fEMDTrigHist(stream.fEMDTrigHist),
     202           0 :   fNChannelsOn(stream.fNChannelsOn),
     203           0 :   fCurrentCh(stream.fCurrentCh),
     204           0 :   fCabledSignal(stream.GetCabledSignal()),
     205           0 :   fCurrScCh(stream.fCurrScCh),
     206           0 :   fCurrTDCCh(stream.fCurrTDCCh),
     207           0 :   fIsADCEventGood(stream.fIsADCEventGood),
     208           0 :   fIsL0BitSet(stream.fIsL0BitSet),
     209           0 :   fIsPileUpEvent(stream.fIsPileUpEvent),
     210           0 :   fIsADDChannel(stream.fIsADDChannel),
     211           0 :   fADDADCdatum(stream.fADDADCdatum),
     212           0 :   fIsTDCHeaderRead(stream.fIsTDCHeaderRead),
     213           0 :   fTDCStartCounter(stream.fTDCStartCounter),
     214           0 :   fIsZDCTDCHeader(stream.fIsZDCTDCHeader),
     215           0 :   fIsZDCTDCdatum(stream.fIsZDCTDCdatum),
     216           0 :   fZDCTDCdatum(stream.fZDCTDCdatum),
     217           0 :   fZDCTDCsignal(stream.fZDCTDCsignal),
     218           0 :   fIsADDTDCHeader(stream.fIsADDTDCHeader),
     219           0 :   fIsADDTDCdatum(stream.fIsADDTDCdatum),
     220           0 :   fADDTDCdatum(stream.fADDTDCdatum),
     221           0 :   fIsPARSet(stream.fIsPARSet)
     222             : 
     223           0 : {
     224             :   // Copy constructor
     225             :   const int kNch = 48;
     226           0 :   for(Int_t j=0; j<2; j++) fSector[j] = stream.GetSector(j);  
     227           0 :   for(Int_t i=0; i<kNch; i++){
     228           0 :     for(Int_t j=0; j<5; j++){
     229           0 :       fMapADC[i][j] = stream.fMapADC[i][j];
     230           0 :       if(i<32) fScalerMap[i][j] = stream.fMapADC[i][j];
     231             :     }
     232             :   }
     233             :   
     234           0 :   for(Int_t k=0; k<4; k++) fCPTInput[k] = stream.fCPTInput[k];
     235           0 : }
     236             : 
     237             : //_____________________________________________________________________________
     238             : AliZDCRawStream& AliZDCRawStream::operator = (const AliZDCRawStream& 
     239             :                                               /* stream */)
     240             : {
     241             :   // Assignment operator
     242           0 :   Fatal("operator =", "assignment operator not implemented");
     243           0 :   return *this;
     244             : }
     245             : 
     246             : //_____________________________________________________________________________
     247             : AliZDCRawStream::~AliZDCRawStream()
     248           8 : {
     249             : // Destructor
     250             : 
     251          12 : }
     252             : 
     253             : //_____________________________________________________________________________
     254             : void AliZDCRawStream::ReadChMap()
     255             : {
     256             :   // Reading channel map
     257             :   const int kNch = 48;
     258          16 :   AliDebug(2,"\t Reading ZDC ADC+TDC mapping from OCDB\n");
     259           4 :   AliZDCChMap * chMap = GetChMap();
     260             :   //chMap->Print("");
     261           4 :   if(chMap){
     262         392 :     for(Int_t i=0; i<kNch; i++){
     263         192 :       fMapADC[i][0] = chMap->GetADCModule(i);
     264         192 :       fMapADC[i][1] = chMap->GetADCChannel(i);
     265         192 :       fMapADC[i][2] = chMap->GetADCSignalCode(i);
     266         192 :       fMapADC[i][3] = chMap->GetDetector(i);
     267         192 :       fMapADC[i][4] = chMap->GetSector(i);
     268             :     }
     269         264 :     for(int i=0; i<32; i++){
     270         128 :       fTDCMap[i][0] = kZDCTDCGeo;
     271         128 :       fTDCMap[i][1] = chMap->GetTDCChannel(i);
     272         128 :       fTDCMap[i][2] = chMap->GetTDCSignalCode(i);
     273             :     }
     274           4 :     fIsMapRead = kTRUE;
     275           4 :   }
     276           0 :   else printf("  AliZDCRawStream::ReadChMap -> No valid object for mapping loaded from OCDB!!!\n\n");
     277           4 : }
     278             : 
     279             : //_____________________________________________________________________________
     280             : void AliZDCRawStream::ReadCDHHeader()
     281             : {
     282             :   // Reading CDH 
     283           8 :   const AliRawDataHeader* header = fRawReader->GetDataHeader();
     284           4 :   const AliRawDataHeaderV3* headerV3 = fRawReader->GetDataHeaderV3();
     285           4 :   if(!header && !headerV3) {
     286           0 :       AliError(" No CDH in raw data streaming");
     287           0 :       fRawReader->AddMajorErrorLog(kCDHError);
     288           0 :       return;
     289             :   }
     290             : 
     291             :     //printf("\t AliZDCRawStream::ReadCDHHeader -> Data Size = %x\n",fRawReader->GetDataSize());
     292             : 
     293          12 :   UChar_t message = header ? header->GetAttributes() : headerV3->GetAttributes();
     294             : //printf("\t AliZDCRawStream::ReadCDHHeader -> Attributes %x\n",message);
     295          12 :   UInt_t  checkPAR = header ? header->GetEventID2() : headerV3->GetEventID2();
     296           4 :   fIsPARSet=kFALSE;
     297           4 :   if((checkPAR&0xff000000)!=0) fIsPARSet = kTRUE;
     298           4 : if((checkPAR&0xff000000)!=0) printf("\t AliZDCRawStream::ReadCDHHeader -> ZDC PAR set -> EVENT will be SKIPED!\n");
     299             :     
     300             :     /*if((message & 0xf0) == 0x0){ // PHYSICS RUN
     301             :        //printf("\t PHYSICS RUN raw data found\n");
     302             :     }
     303             :     else if((message & 0xf0) == 0x10){ // COSMIC RUN
     304             :        //printf("\t STANDALONE_COSMIC RUN raw data found\n");
     305             :     }
     306             :     else if((message & 0xf0) == 0x20){ // PEDESTAL RUN
     307             :        //printf("\t STANDALONE_PEDESTAL RUN raw data found\n");
     308             :     }
     309             :     else if((message & 0xf0) == 0x30){ // LASER RUN
     310             :        //printf("\t STANDALONE_LASER RUN raw data found\n");
     311             :     }
     312             :     else if((message & 0xf0) == 0x40){ // CALIBRATION_CENTRAL RUN
     313             :        //printf("\t CALIBRATION_CENTRAL RUN raw data found\n");
     314             :     }
     315             :     else if((message & 0xf0) == 0x50){ // CALIBRATION_SEMICENTRAL
     316             :        //printf("\t CALIBRATION_SEMICENTRAL RUN raw data found\n");
     317             :     }
     318             :     else if((message & 0xf0) == 0x60){ // CALIBRATION_MB
     319             :        //printf("\t CALIBRATION_MB RUN raw data found\n");
     320             :     }
     321             :     else if((message & 0xf0) == 0x70){ // CALIBRATION_EMD
     322             :        //printf("\t CALIBRATION_EMD RUN raw data found\n");
     323             :     }*/
     324             :     // *** Checking the bit indicating the used readout card
     325             :     // (the payload is different in the 2 cases!)
     326           4 :     if((message & 0x08) == 0){  // ** DARC card
     327           4 :        fReadOutCard = 0;
     328           4 :        fIsDARCHeader = kTRUE;
     329             :        //AliInfo("\t ZDC readout card used: DARC");
     330           4 :     }
     331           0 :     else if((message & 0x08) == 0x08){  // ** ZRC card
     332           0 :        fReadOutCard = 1;
     333             :        //AliInfo("\t ZDC readout card used: ZRC");
     334           0 :     }
     335             : 
     336          12 :     fIsCalib = (header ? header->GetL1TriggerMessage() : headerV3->GetL1TriggerMessage()) & 0x1;
     337             : 
     338             :     //printf("\t AliZDCRawStream::ReadCDHHeader -> L1TriggerMessage %x\n",header->GetL1TriggerMessage());
     339             :     //printf("\t AliZDCRawStream::ReadCDHHeader -> Calibration bit = %d\n",fIsCalib);    
     340             :     
     341             : /*    UInt_t status = header->GetStatus();
     342             :     //printf("\t AliZDCRawStream::ReadCDHHeader -> status = %d\n",status);
     343             :     if((status & 0x000f) == 0x0001){
     344             :       AliDebug(2,"CDH -> DARC trg0 overlap error");
     345             :       fRawReader->AddMajorErrorLog(kDARCError);
     346             :     }
     347             :     if((status & 0x000f) == 0x0002){
     348             :       AliDebug(2,"CDH -> DARC trg0 missing error");
     349             :       fRawReader->AddMajorErrorLog(kDARCError);
     350             :     }
     351             :     if((status & 0x000f) == 0x0004){
     352             :       AliDebug(2,"CDH -> DARC data parity error");
     353             :       fRawReader->AddMajorErrorLog(kDARCError);
     354             :     }
     355             :     if((status & 0x000f) == 0x0008){
     356             :       AliDebug(2,"CDH -> DARC ctrl parity error");
     357             :       fRawReader->AddMajorErrorLog(kDARCError);
     358             :     }
     359             :     //
     360             :     if((status & 0x00f0) == 0x0010){
     361             :       AliDebug(2,"CDH -> DARC trg unavailable");
     362             :       fRawReader->AddMajorErrorLog(kDARCError);
     363             :     }
     364             :     if((status & 0x00f0) == 0x0020){
     365             :       AliDebug(2,"CDH -> DARC FEE error");
     366             :       fRawReader->AddMajorErrorLog(kDARCError);
     367             :     }
     368             :     //
     369             :     if((status & 0x0f00) == 0x0200){
     370             :       AliDebug(2,"CDH -> DARC L1 time violation");
     371             :       fRawReader->AddMajorErrorLog(kDARCError);
     372             :     }
     373             :     if((status & 0x0f00) == 0x0400){
     374             :       AliDebug(2,"CDH -> DARC L2 time-out");
     375             :       fRawReader->AddMajorErrorLog(kDARCError);
     376             :     }
     377             :     if((status & 0x0f00) == 0x0800){
     378             :       AliDebug(2,"CDH -> DARC prepulse time violation");
     379             :       fRawReader->AddMajorErrorLog(kDARCError);
     380             :     }
     381             :     //
     382             :     if((status & 0xf000) == 0x1000){
     383             :       AliDebug(2,"CDH -> DARC other error");
     384             :       fRawReader->AddMajorErrorLog(kDARCError);
     385             :     }
     386             :     */
     387             :   
     388           8 : }
     389             : 
     390             : //_____________________________________________________________________________
     391             : Bool_t AliZDCRawStream::Next()
     392             : {
     393             :   // Read the next raw digit
     394             :   // Returns kFALSE if there is no digit left
     395             : 
     396         844 :   if(!fRawReader->ReadNextInt((UInt_t&) fBuffer)) return kFALSE;
     397             : 
     398             :   // Nov 2015 -> skipping event if PAR is set in CDH
     399         416 :   if(fIsPARSet) return kFALSE;
     400             :   const int kNch = 48;
     401             :   //
     402         416 :   fIsHeaderMapping = kFALSE; fIsChMapping = kFALSE; 
     403         416 :   fIsADCHeader = kFALSE; fIsADCDataWord = kFALSE; fIsADCEOB = kFALSE;
     404         416 :   fIsZDCTDCdatum = kFALSE; fIsADDChannel = kFALSE; fIsADDTDCdatum=kFALSE;
     405         416 :   fIsUnderflow = kFALSE; fIsOverflow = kFALSE; fIsScalerWord = kFALSE;
     406         416 :   fSector[0] = fSector[1] = -1;
     407        4160 :   for(Int_t kl=0; kl<4; kl++) fCPTInput[kl] = 0;
     408             :     
     409         416 :   fEvType = fRawReader->GetType();
     410         416 :   if(fPosition==0){
     411           4 :     ReadCDHHeader();
     412             :     // Needed to read simulated raw data (temporary solution?)
     413           8 :     if(!fReadCDH) fReadOutCard=1;
     414           4 :     fCurrentCh=0; fCurrScCh=0;  fCurrTDCCh=0;fNChannelsOn=0;
     415             :     // Ch. debug
     416             :     //printf("\n  AliZDCRawStream::Next() - ev. type %d",fEvType);
     417           4 :   }
     418             :   // Ch. debug
     419             :   //printf("\n  AliZDCRawStream::Next() - fBuffer[%d] = %x\n",fPosition, fBuffer);
     420             :   
     421             :   // *** End of ZDC event
     422         416 :   if(fBuffer == 0xcafefade){
     423             :     //printf("\n  AliZDCRawStream::Next() ***** End of ZDC event *****\n\n");
     424           0 :     return kFALSE;
     425             :   }
     426             :   
     427             :   // -------------------------------------------
     428             :   // --- DARC header
     429             :   // -------------------------------------------
     430             :   // If the CDH has been read then 
     431             :   // the DARC header must follow
     432         416 :   if(fReadOutCard==0 && fIsDARCHeader){
     433             :     //printf("\t ---- DARC header ----\n");
     434           0 :     if(fIsCalib){
     435           0 :       fDeadfaceOffset = 9;
     436           0 :       fDeadbeefOffset = 25;
     437           0 :     }
     438             :     else{
     439           0 :       fDeadfaceOffset = 1;
     440           0 :       fDeadbeefOffset = 7;
     441             :     }
     442           0 :     fDataOffset = 1+fDeadbeefOffset;
     443           0 :     fIsDARCHeader = kFALSE;
     444           0 :   }
     445             :     
     446             :   // ---------------------------------------------
     447             :   // --- Start of data event (SOD)             ---
     448             :   // --- decoding mapping of connected ADC ch. ---
     449             :   // ---------------------------------------------
     450             :   // In the SOD event ADC ch. mapping is written
     451         416 :   if(fEvType==10){
     452           0 :    if(fSODReading){
     453             :     
     454           0 :     if(fPosition>=fDataOffset){
     455           0 :       if((fBuffer&0xff000001) == 0xff000001){ // ************** Mapping
     456             :         // DARC 1st datum @ fDataOffset+1 \ ZRC 1st valid datum @ fDataOffset=0
     457           0 :         if((fPosition==fDataOffset+1) || (fPosition==fDataOffset)){ 
     458           0 :            printf("\n\n ------ AliZDCRawStream -> Reading mapping from StartOfData event ------\n");
     459           0 :            fCurrentCh=0; fCurrScCh=0; fCurrTDCCh=0;     
     460             :         }
     461             :         else{
     462           0 :           printf(" ------ AliZDCRawStream -> End of ZDC StartOfData event ------\n\n");
     463           0 :           fSODReading = kFALSE;
     464           0 :           return kFALSE;
     465             :         }
     466           0 :       }
     467           0 :       else if((fBuffer&0xff000002) == 0xff000002){ // ************** Threshold settings
     468           0 :         fPosition++;
     469           0 :         return kFALSE; // !!!!!!!!!!!!!!!!!!!!!  For the moment thresholds are not read
     470             :       }
     471           0 :       else if((fBuffer&0x80000000)>>31 == 1){ // --- Mapping header
     472           0 :         fIsHeaderMapping = kTRUE;
     473           0 :         fADCModule = ((fBuffer & 0x7f000000)>>24); // GEO address!!!
     474           0 :         fModType = ((fBuffer & 0x7ff00)>>8); 
     475           0 :         fADCNChannels = (fBuffer & 0xff);          // # of channels following the header
     476             :         //
     477           0 :         printf("  ******** GEO %d, mod. type %d, #ch. %d\n",fADCModule,fModType,fADCNChannels);
     478           0 :       }
     479           0 :       else if((fBuffer&0x80000000)>>31 == 0){ // --- Mapping channel
     480           0 :         fADCChannel = ((fBuffer & 0x3fff0000)>>16);
     481           0 :         fCabledSignal = (fBuffer&0xffff);
     482             :         //
     483           0 :         if(fModType == kV965){ // ******** ADCs ********************************
     484             :           // Channel signal
     485           0 :           if((fBuffer&0x40000000)>>30==0 && fADCModule<=kLastADCGeo){ // *ZDC* high range chain ADC
     486           0 :             fIsChMapping = kTRUE;
     487           0 :             fMapADC[fCurrentCh][0] = fADCModule;
     488           0 :             fMapADC[fCurrentCh][1] = fADCChannel;
     489           0 :             fMapADC[fCurrentCh][2] = fCabledSignal;
     490             :             //  - No. of channels on
     491           0 :             fNChannelsOn++;
     492             :             //
     493             :             // Determining detector and sector
     494             :             // -----------------------------------------
     495             :             //  For the decoding of the following lines 
     496             :             //  look the enum in AliZDCRawStream.h file
     497             :             // -----------------------------------------
     498           0 :             if((fCabledSignal>=2 && fCabledSignal<=6) || (fCabledSignal>=26 && fCabledSignal<=30)
     499           0 :               || fCabledSignal==24 || fCabledSignal==48){
     500           0 :               fMapADC[fCurrentCh][3] = 4; //ZNA
     501             :               //
     502           0 :               if(fCabledSignal==kZNAC || fCabledSignal==kZNACoot)       fMapADC[fCurrentCh][4]=0;
     503           0 :               else if(fCabledSignal==kZNA1 || fCabledSignal==kZNA1oot)  fMapADC[fCurrentCh][4]=1;
     504           0 :               else if(fCabledSignal==kZNA2 || fCabledSignal==kZNA2oot)  fMapADC[fCurrentCh][4]=2;
     505           0 :               else if(fCabledSignal==kZNA3 || fCabledSignal==kZNA3oot)  fMapADC[fCurrentCh][4]=3;
     506           0 :               else if(fCabledSignal==kZNA4 || fCabledSignal==kZNA4oot)  fMapADC[fCurrentCh][4]=4;
     507           0 :               else if(fCabledSignal==kZDCAMon || fCabledSignal==kZDCAMonoot) fMapADC[fCurrentCh][4]=5; //Reference PTM
     508             :             }
     509           0 :             else if((fCabledSignal>=7 && fCabledSignal<=11) || (fCabledSignal>=31 && fCabledSignal<=35)){
     510           0 :               fMapADC[fCurrentCh][3] = 5; //ZPA
     511             :               //
     512           0 :               if(fCabledSignal==kZPAC || fCabledSignal==kZPACoot)      fMapADC[fCurrentCh][4]=0;
     513           0 :               else if(fCabledSignal==kZPA1 || fCabledSignal==kZPA1oot) fMapADC[fCurrentCh][4]=1;
     514           0 :               else if(fCabledSignal==kZPA2 || fCabledSignal==kZPA2oot) fMapADC[fCurrentCh][4]=2;
     515           0 :               else if(fCabledSignal==kZPA3 || fCabledSignal==kZPA3oot) fMapADC[fCurrentCh][4]=3;
     516           0 :               else if(fCabledSignal==kZPA4 || fCabledSignal==kZPA4oot) fMapADC[fCurrentCh][4]=4;
     517             :             }
     518           0 :             else if((fCabledSignal>=12 && fCabledSignal<=16) || (fCabledSignal>=36 && fCabledSignal<=40)
     519           0 :                || fCabledSignal==25 || fCabledSignal==49){
     520           0 :               fMapADC[fCurrentCh][3] = 1; //ZNC
     521             :               //
     522           0 :               if(fCabledSignal==kZNCC || fCabledSignal==kZNCCoot)      fMapADC[fCurrentCh][4]=0;
     523           0 :               else if(fCabledSignal==kZNC1 || fCabledSignal==kZNC1oot) fMapADC[fCurrentCh][4]=1;
     524           0 :               else if(fCabledSignal==kZNC2 || fCabledSignal==kZNC2oot) fMapADC[fCurrentCh][4]=2;
     525           0 :               else if(fCabledSignal==kZNC3 || fCabledSignal==kZNC3oot) fMapADC[fCurrentCh][4]=3;
     526           0 :               else if(fCabledSignal==kZNC4 || fCabledSignal==kZNC4oot) fMapADC[fCurrentCh][4]=4;
     527           0 :               else if(fCabledSignal==kZDCCMon || fCabledSignal==kZDCCMonoot) fMapADC[fCurrentCh][4]=5; //Reference PTM
     528             :             }
     529           0 :             else if((fCabledSignal>=17 && fCabledSignal<=21) || (fCabledSignal>=41 && fCabledSignal<=45)){
     530           0 :               fMapADC[fCurrentCh][3] = 2; //ZPC
     531             :               //
     532           0 :               if(fCabledSignal==kZPCC || fCabledSignal==kZPCCoot)   fMapADC[fCurrentCh][4]=0;
     533           0 :               else if(fCabledSignal==kZPC1 || fCabledSignal==kZPC1oot) fMapADC[fCurrentCh][4]=1;
     534           0 :               else if(fCabledSignal==kZPC2 || fCabledSignal==kZPC2oot) fMapADC[fCurrentCh][4]=2;
     535           0 :               else if(fCabledSignal==kZPC3 || fCabledSignal==kZPC3oot) fMapADC[fCurrentCh][4]=3;
     536           0 :               else if(fCabledSignal==kZPC4 || fCabledSignal==kZPC4oot) fMapADC[fCurrentCh][4]=4;
     537             :             }
     538           0 :             else if(fCabledSignal==22 || fCabledSignal==23 || fCabledSignal==46 || fCabledSignal==47){
     539           0 :               fMapADC[fCurrentCh][3] = 3; // ZEM
     540             :               //
     541           0 :               if(fCabledSignal==kZEM1 || fCabledSignal==kZEM1oot)      fMapADC[fCurrentCh][4]=1;
     542           0 :               else if(fCabledSignal==kZEM2 || fCabledSignal==kZEM2oot) fMapADC[fCurrentCh][4]=2;
     543             :             }
     544             :             //Ch. debug
     545             :             //printf("\tADC mod. %d ch. %d signal %d ",fADCModule,fADCChannel,fCabledSignal);
     546             :             //printf("  det. %d sec. %d\n",fMapADC[fCurrentCh][3],fMapADC[fCurrentCh][4]);
     547             :             //
     548           0 :             fCurrentCh++;
     549             :             //
     550           0 :           } // high range channels
     551             :         }// ModType=1 (ADC mapping)
     552           0 :         else if(fModType == kV830){  // ******** VME scaler **************************
     553           0 :           fIsChMapping = kTRUE;
     554           0 :           fScalerMap[fCurrScCh][0] = fADCModule;
     555           0 :           fScalerMap[fCurrScCh][1] = fADCChannel;
     556           0 :           fScalerMap[fCurrScCh][2] = fCabledSignal;
     557             :           //
     558             :           // Determining detector and sector
     559             :           // -----------------------------------------
     560             :           //  For the decoding of the following lines 
     561             :           //  look the enum in AliZDCRawStream.h file
     562             :           // -----------------------------------------
     563             :           // NOT CONSIDERING OUT OF TIME OR REFERENCE SIGNALS FOR SCALER!!!!!
     564           0 :           if((fCabledSignal>=2 && fCabledSignal<=6) ||
     565           0 :              (fCabledSignal>=61 && fCabledSignal<=65)){
     566           0 :             fScalerMap[fCurrScCh][3] = 4; //ZNA
     567             :             //
     568           0 :             if(fCabledSignal==kZNAC || fCabledSignal==kZNACD)      fScalerMap[fCurrScCh][4]=0;
     569           0 :             else if(fCabledSignal==kZNA1 || fCabledSignal==kZNA1D) fScalerMap[fCurrScCh][4]=1;
     570           0 :             else if(fCabledSignal==kZNA2 || fCabledSignal==kZNA2D) fScalerMap[fCurrScCh][4]=2;
     571           0 :             else if(fCabledSignal==kZNA3 || fCabledSignal==kZNA3D) fScalerMap[fCurrScCh][4]=3;
     572           0 :             else if(fCabledSignal==kZNA4 || fCabledSignal==kZNA4D) fScalerMap[fCurrScCh][4]=4;
     573             :           }
     574           0 :           else if((fCabledSignal>=7 && fCabledSignal<=11) ||
     575           0 :              (fCabledSignal>=66 && fCabledSignal<=70)){
     576           0 :             fScalerMap[fCurrScCh][3] = 5; //ZPA
     577             :             //
     578           0 :             if(fCabledSignal==kZPAC || fCabledSignal==kZPACD)      fScalerMap[fCurrScCh][4]=0;
     579           0 :             else if(fCabledSignal==kZPA1 || fCabledSignal==kZPA1D) fScalerMap[fCurrScCh][4]=1;
     580           0 :             else if(fCabledSignal==kZPA2 || fCabledSignal==kZPA2D) fScalerMap[fCurrScCh][4]=2;
     581           0 :             else if(fCabledSignal==kZPA3 || fCabledSignal==kZPA3D) fScalerMap[fCurrScCh][4]=3;
     582           0 :             else if(fCabledSignal==kZPA4 || fCabledSignal==kZPA4D) fScalerMap[fCurrScCh][4]=4;
     583             :           }
     584           0 :           else if((fCabledSignal>=12 && fCabledSignal<=16) ||
     585           0 :              (fCabledSignal>=71 && fCabledSignal<=75)){
     586           0 :             fScalerMap[fCurrScCh][3] = 1; //ZNC
     587             :             //
     588           0 :             if(fCabledSignal==kZNCC || fCabledSignal==kZNCCD)      fScalerMap[fCurrScCh][4]=0;
     589           0 :             else if(fCabledSignal==kZNC1 || fCabledSignal==kZNC1D) fScalerMap[fCurrScCh][4]=1;
     590           0 :             else if(fCabledSignal==kZNC2 || fCabledSignal==kZNC2D) fScalerMap[fCurrScCh][4]=2;
     591           0 :             else if(fCabledSignal==kZNC3 || fCabledSignal==kZNC3D) fScalerMap[fCurrScCh][4]=3;
     592           0 :             else if(fCabledSignal==kZNC4 || fCabledSignal==kZNC4D) fScalerMap[fCurrScCh][4]=4;
     593             :           }
     594           0 :           else if((fCabledSignal>=17 && fCabledSignal<=21) ||
     595           0 :              (fCabledSignal>=76 && fCabledSignal<=80)){
     596           0 :             fScalerMap[fCurrScCh][3] = 2; //ZPC
     597             :             //
     598           0 :             if(fCabledSignal==kZPCC || fCabledSignal==kZPCCD) fScalerMap[fCurrScCh][4]=0;
     599           0 :             else if(fCabledSignal==kZPC1 || fCabledSignal==kZPC1D)  fScalerMap[fCurrScCh][4]=1;
     600           0 :             else if(fCabledSignal==kZPC2 || fCabledSignal==kZPC2D)  fScalerMap[fCurrScCh][4]=2;
     601           0 :             else if(fCabledSignal==kZPC3 || fCabledSignal==kZPC3D)  fScalerMap[fCurrScCh][4]=3;
     602           0 :             else if(fCabledSignal==kZPC4 || fCabledSignal==kZPC4D)  fScalerMap[fCurrScCh][4]=4;
     603             :           }
     604           0 :           else if(fCabledSignal==22 || fCabledSignal==23 ||
     605           0 :                   fCabledSignal==81 || fCabledSignal==82){
     606           0 :             fScalerMap[fCurrScCh][3] = 3; // ZEM
     607             :             //
     608           0 :             if(fCabledSignal==kZEM1 || fCabledSignal==kZEM1D)      fScalerMap[fCurrScCh][4]=1;
     609           0 :             else if(fCabledSignal==kZEM2 || fCabledSignal==kZEM2D) fScalerMap[fCurrScCh][4]=2;
     610             :           }
     611             :           // Ch debug.
     612             :           /*printf("\t VME scaler mod. %d ch. %d, signal %d",fScalerMap[fCurrScCh][0],fADCChannel,fCabledSignal);
     613             :           if(fCabledSignal!=0 && fCabledSignal!=1) printf("  det. %d sec. %d\n",fScalerMap[fCurrScCh][3],fScalerMap[fCurrScCh][4]);
     614             :           else printf("  Signal void/not connected\n");*/
     615             :           
     616           0 :           fCurrScCh++;
     617           0 :         }
     618           0 :         else if(fModType==KV1290 && fADCModule==kZDCTDCGeo){  // ******** ZDC TDC **************************
     619           0 :           fIsChMapping = kTRUE;
     620           0 :           fTDCMap[fCurrTDCCh][0] = fADCModule;
     621           0 :           fTDCMap[fCurrTDCCh][1] = fADCChannel;
     622           0 :           fTDCMap[fCurrTDCCh][2] = fCabledSignal;
     623             :           
     624           0 :           fCurrTDCCh++;
     625             :           
     626             :           // Ch debug.
     627             :           //printf("\tZDC TDC: mod. %d ch. %d, signal %d\n",fADCModule,fADCChannel,fCabledSignal);      
     628           0 :         }
     629             :         /*else if(fModType == kTRG){ // **** scalers from trigger card
     630             :           //printf("\t Trigger scaler mod. %d ch. %d, signal %d\n",fADCModule,fADCChannel,fCabledSignal);       
     631             :         }
     632             :         else if(fModType == kTRGI){ // **** trigger history from trigger card
     633             :           //printf("\t Trigger card ch. %d, signal %d\n",fADCChannel,fCabledSignal);
     634             :         }
     635             :         else if(fModType == kPU){ // **** pattern unit
     636             :           //printf("\t P.U. mod. %d ch. %d, signal %d\n",fADCModule,fADCChannel,fCabledSignal);
     637             :         }*/
     638             :       }//reading channel mapping
     639             :     }
     640             :    } // if fSODREading
     641           0 :    fPosition++;
     642           0 :    return kTRUE;
     643             :   } // ------------------------------- SOD event
     644             :   
     645             :   // -------------------------------------------
     646             :   // --- DARC data
     647             :   // -------------------------------------------
     648         416 :   if(fPosition<fDeadfaceOffset && fReadOutCard==0){
     649           0 :     fPosition++;
     650           0 :     return kTRUE;
     651             :   }
     652         416 :   else if(fPosition==fDeadfaceOffset && fReadOutCard==0){
     653           0 :     if(fBuffer != 0xdeadface){
     654             :       //AliWarning(" NO deadface after DARC data");
     655           0 :       fRawReader->AddMajorErrorLog(kDARCError); 
     656             :     }
     657             :     else{
     658           0 :       fPosition++;
     659           0 :       return kTRUE;
     660             :     }
     661           0 :   }
     662         832 :   else if(fPosition>fDeadfaceOffset && fPosition<fDeadbeefOffset && fReadOutCard==0){
     663           0 :     fPosition++;
     664           0 :     return kTRUE;
     665             :   }
     666         416 :   else if(fPosition==fDeadbeefOffset && fReadOutCard==0){
     667           0 :     if(fBuffer != 0xdeadbeef){
     668             :       //AliWarning(" NO deadbeef after DARC global data");
     669           0 :       fRawReader->AddMajorErrorLog(kDARCError);  
     670           0 :       fPosition++;
     671           0 :       return kFALSE;
     672             :     }
     673             :     else{
     674           0 :       fPosition++;
     675           0 :       return kTRUE;
     676             :     }
     677             :   } // ------------------------------- End of DARC data
     678             :   
     679             :   // ---------------------------------------------
     680             :   // --- ZDC data
     681             :   // --- ADCs + VME scaler + trigger card + P.U.
     682             :   // ---------------------------------------------
     683         416 :   else if(fPosition>=fDataOffset){
     684             :     
     685         836 :     if(!fSODReading && !fIsMapRead) ReadChMap();
     686             :     
     687             :     //  !!!!!!!!!!!!!!! DARC readout card only !!!!!!!!!!!
     688             :     // Not valid datum before the event 
     689             :     // there MUST be a NOT valid datum before the event!!!
     690         416 :     if(fReadOutCard==0){
     691           0 :       if(fPosition==fDataOffset){ 
     692             :         //printf("\t **** ZDC data begin ****\n");
     693           0 :         if((fBuffer & 0x07000000) != 0x06000000){
     694           0 :           fRawReader->AddMajorErrorLog(kZDCDataError);
     695           0 :         }
     696             :         //else if((fBuffer & 0x07000000) == 0x06000001){ // Corrupted event!!!
     697             :         //  fIsADCEventGood = kFALSE;
     698             :         //}
     699             :       }
     700             :     
     701             :       // If the not valid datum isn't followed by the 1st ADC header
     702             :       // the event is corrupted (i.e., 2 gates arrived before trigger)
     703           0 :       else if(fPosition==fDataOffset+1){ 
     704           0 :         if((fBuffer & 0x07000000) != 0x02000000){
     705           0 :           AliWarning("ZDC ADC -> The not valid datum is NOT followed by an ADC header!");
     706           0 :           fRawReader->AddMajorErrorLog(kZDCDataError);
     707           0 :           fIsADCEventGood = kFALSE;
     708           0 :           fPosition++;
     709           0 :           return kFALSE;
     710             :         }
     711             :       }
     712             :     }
     713             :      
     714             :     // Get geo address of current word
     715         416 :     if(fIsTDCHeaderRead && fIsZDCTDCHeader) fADCModule = kZDCTDCGeo;
     716         416 :     else if(fIsTDCHeaderRead && fIsADDTDCHeader) fADCModule = kADDTDCGeo;
     717         416 :     else fADCModule = (Int_t) ((fBuffer & 0xf8000000)>>27);
     718             :     // November 2015 -> After introducing MEB corrupted
     719             :     // data with GEO =24 appeared and must be discarded
     720             :     // -> Skipping word with GEO ADDRESS = 24 ---------
     721         416 :     if(fADCModule==24) return kTRUE;
     722             :     
     723             :     // ************************************ ADC MODULES ************************************
     724        1224 :     if(fADCModule>=kFirstADCGeo && fADCModule<=kLastADCGeo && 
     725        1176 :        !fIsTriggerHistory && !fIsScHeaderRead && !fIsTriggerScaler){
     726             :       // *** ADC header
     727         392 :       if((fBuffer & 0x07000000) == 0x02000000){
     728          16 :         fIsADCHeader = kTRUE;
     729          16 :         fADCNChannels = ((fBuffer & 0x00003f00)>>8);
     730             :         //printf("  AliZDCRawStream -> ADC HEADER: mod.%d has %d ch. \n",fADCModule,fADCNChannels);
     731          16 :       }
     732             :       // *** ADC data word
     733         376 :       else if((fBuffer & 0x07000000) == 0x00000000){
     734         360 :         fIsADCDataWord = kTRUE;
     735         360 :         fADCChannel = ((fBuffer & 0x1e0000) >> 17);
     736         360 :         fADCGain = ((fBuffer & 0x10000) >> 16);       
     737         360 :         fADCValue = (fBuffer & 0xfff);  
     738             :         //
     739             :         //printf("  AliZDCRawStream -> ADC DATUM: mod. %d ch. %d gain %d value %d\n",
     740             :           //fADCModule,fADCChannel,fADCGain,fADCValue);
     741             :         
     742             :         // Checking if the channel map for the ADCs has been provided/read
     743         360 :         if(fMapADC[0][0]==-1){
     744           0 :           printf("\t ATTENTION!!! No ADC mapping has been found/provided -> Skipping event!!!\n");
     745           0 :           return kFALSE;
     746             :         }
     747             :         //
     748             :         /*for(Int_t ci=0; ci<kNch; ci++){
     749             :           printf("  %d mod %d ch %d det %d sec %d\n",ci,fMapADC[ci][0],
     750             :           fMapADC[ci][1], fMapADC[ci][3], fMapADC[ci][4]);
     751             :         }*/
     752             :                 
     753             :         // Scan of the map to assign the correct volumes
     754             :         Int_t foundMapEntry = kFALSE;
     755       16162 :         for(Int_t k=0; k<kNch; k++){
     756       10366 :            if(fADCModule==fMapADC[k][0] && fADCChannel==fMapADC[k][1]){
     757         360 :              fSector[0] = fMapADC[k][3];
     758         360 :              fSector[1] = fMapADC[k][4];
     759             :              foundMapEntry = kTRUE;
     760         360 :              break;
     761             :            } 
     762             :         }
     763         360 :         if(foundMapEntry==kFALSE && fEvType==7){
     764           0 :           AliWarning(Form(" No valid entry in ADC mapping for raw data %d ADCmod. %d ch. %d\n",
     765             :               fPosition,fADCModule,fADCChannel));
     766           0 :         }
     767             : 
     768             :         // Final checks
     769         720 :         if(foundMapEntry==kTRUE && fEvType==7){
     770         720 :           if(fSector[0]<1 || fSector[0]>5){
     771           0 :             AliWarning(Form(" No valid detector assignment: %d",fSector[0]));
     772           0 :             fRawReader->AddMajorErrorLog(kInvalidSector);
     773           0 :           }
     774             :           //
     775         720 :           if(fSector[1]<0 || fSector[1]>5){
     776           0 :             AliWarning(Form(" No valid sector assignment: %d",fSector[1]));
     777           0 :             fRawReader->AddMajorErrorLog(kInvalidSector);
     778           0 :           }
     779             :           //
     780         720 :           if(fADCModule<0 || fADCModule>3){
     781           0 :             AliError(Form(" No valid ADC module: %d",fADCModule));
     782           0 :             fRawReader->AddMajorErrorLog(kInvalidADCModule);
     783           0 :           }
     784             :         }
     785             : 
     786             :         // Checking the underflow and overflow bits
     787         372 :         if(fBuffer & 0x1000)       fIsUnderflow = kTRUE;
     788         351 :         else if (fBuffer & 0x2000) fIsOverflow = kTRUE; 
     789             :                 
     790         360 :       }//ADC data word
     791             :       // *** ADC EOB
     792          16 :       else if((fBuffer & 0x07000000) == 0x04000000){
     793          16 :         fIsADCEOB = kTRUE;
     794             :         //printf("  AliZDCRawStream -> ADC EOB --------------------------\n");
     795          16 :       }
     796             :     }//ADC module
     797             :     // ********************************* ADD ADC *********************************
     798          24 :     else if(fADCModule == kADDADCGeo){
     799             :       // *** ADC header
     800           4 :       if((fBuffer & 0x07000000) == 0x02000000){
     801           4 :         fIsADCHeader = kTRUE;
     802           4 :         fADCNChannels = ((fBuffer & 0x00003f00)>>8);
     803             :         //printf("  AliZDCRawStream -> ADD ADC HEADER: mod.%d has %d ch. \n",fADCModule,fADCNChannels);
     804           4 :       }
     805             :       // *** ADC data word
     806           0 :       else if((fBuffer & 0x07000000) == 0x00000000){
     807           0 :         fIsADDChannel = kTRUE;
     808           0 :         fADCChannel = ((fBuffer & 0x1e0000) >> 17);
     809           0 :         fADCGain = ((fBuffer & 0x10000) >> 16);       
     810           0 :         fADCValue = (fBuffer & 0xfff);  
     811             :         //
     812             :         //printf("  ADD ADC DATUM -> mod. %d ch. %d gain %d value %d\n",
     813             :         //  fADCModule,fADCChannel,fADCGain,fADCValue);
     814           0 :       }
     815             :       // *** ADC EOB
     816           0 :       else if((fBuffer & 0x07000000) == 0x04000000){
     817           0 :         fIsADCEOB = kTRUE;
     818             :         //printf("  AliZDCRawStream -> ADD ADC EOB --------------------------\n");
     819           0 :       }
     820             :     }
     821             :     // ********************************* TDC *********************************
     822          20 :     else if(fADCModule==kTDCFakeGeo && fIsTDCHeaderRead==kFALSE){
     823             :       // *** TDC header
     824           0 :       fIsTDCHeaderRead = kTRUE;
     825           0 :       fTDCStartCounter = fPosition;
     826             :       // GEO address from TDC header
     827           0 :       fADCModule = (Int_t) (fBuffer & 0x1f);
     828           0 :       if(fADCModule==kZDCTDCGeo){ // *** ZDC TDC
     829           0 :         fIsZDCTDCHeader = kTRUE;
     830             :         //Ch. debug
     831             :         //printf("  AliZDCRawStream -> ZDC TDC header: mod.%d\n",fADCModule);
     832           0 :       }
     833           0 :       else if(fADCModule==kADDTDCGeo){ // *** ADD TDC
     834           0 :         fIsADDTDCHeader = kTRUE;
     835             :         //Ch. debug
     836             :         //printf("  AliZDCRawStream -> ADD TDC: mod.%d\n",fADCModule);
     837           0 :       }
     838             :     }
     839             :     // ********************************* VME SCALER HEADER *********************************
     840          20 :     else if(fADCModule == kScalerGeo){
     841           0 :       if(fBuffer & 0x04000000 && fIsScHeaderRead==kFALSE){ // *** Scaler header
     842           0 :         fScGeo = (fBuffer & 0xf8000000)>>27;     
     843           0 :         fScNWords = (fBuffer & 0x00fc0000)>>18;          
     844           0 :         fScTriggerSource = (fBuffer & 0x00030000)>>16;           
     845           0 :         fScTriggerNumber = (fBuffer & 0x0000ffff);
     846           0 :         fIsScHeaderRead = kTRUE; 
     847           0 :         fScStartCounter = fPosition;
     848             :         //Ch. debug
     849             :         //printf("  AliZDCRawStream -> VME SCALER HEADER: geo %d Nwords %d TrigSource %d TrigNo. %d\n",
     850             :         //   fScGeo,fScNWords,fScTriggerSource,fScTriggerNumber);
     851           0 :       } 
     852             :       // Commented by C.O. & M.G. (23/09/2011)
     853             :       //else if(!(fBuffer & 0x04000000) && fIsScHeaderRead==kFALSE){
     854             :       //  fIsScEventGood = kFALSE;
     855             :       //}
     856             :     }
     857             :     // *********************************** PATTERN UNIT ***********************************
     858          20 :     else if(fADCModule == kPUGeo){
     859             :       // still to be implemented!!! Not yet in data!!!
     860           0 :       fDetPattern = (fBuffer & 0x0000003f);
     861             :       // Ch. debug
     862             :       //printf("  AliZDCRawStream -> Pattern Unit\n");
     863             :       
     864           0 :     }
     865             :     // ******************************** TRIGGER CARD COUNTS ********************************
     866          20 :     else if(fADCModule == kTrigScales){
     867           0 :       if(fIsTriggerScaler == kFALSE){
     868           0 :         fTrigCountNWords = (Int_t) ((fBuffer & 0xfc0000)>>17);
     869           0 :         fTrigCountStart = fPosition;
     870           0 :         fIsTriggerScaler = kTRUE;
     871           0 :       }
     872             :       // Ch. debug
     873             :       //printf("  AliZDCRawStream -> Trigger Scaler header\n");      
     874             :     }
     875             :     // ********************************** TRIGGER HISTORY **********************************
     876          20 :     else if(fADCModule == kTrigHistory){
     877           0 :       if(fIsTriggerHistory == kFALSE){
     878           0 :         fTrigHistNWords = (Int_t) ((fBuffer & 0xfc0000)>>17);
     879           0 :         fTrigHistStart = fPosition;
     880           0 :         fIsTriggerHistory = kTRUE;
     881           0 :       }
     882             :       // Ch. debug
     883             :       //printf("  AliZDCRawStream -> Trigger History header\n");
     884             :       
     885             :     } 
     886             :     // ********************************** VME SCALER DATA **********************************
     887             :     //  Reading VME scaler data 
     888         416 :     if(fIsScHeaderRead && fPosition>=fScStartCounter+1){ // *** Scaler word
     889           0 :       fADCModule=kScalerGeo; 
     890           0 :       fIsADCDataWord=kFALSE; 
     891           0 :       fIsScalerWord=kTRUE;
     892           0 :       fScEvCounter = fBuffer;
     893           0 :       Int_t nWords = (Int_t) (fScNWords);
     894           0 :       if(fPosition == fScStartCounter+nWords) fIsScHeaderRead = kFALSE;
     895             :       //Ch. debug
     896             :       //printf("  AliZDCRawStream -> scaler datum %x \n", fScEvCounter);
     897           0 :     }
     898             :     // ********************************** ZDC TDC DATA **********************************
     899             :     //  ZDC TDC data
     900         416 :     if(fIsTDCHeaderRead && fIsZDCTDCHeader && fPosition>=fTDCStartCounter+1){ 
     901           0 :       fIsADCDataWord=kFALSE; fIsScalerWord=kFALSE;
     902           0 :       if(((fBuffer & 0xf0000000)==0x00000000) && (((fBuffer & 0x08000000) >> 27) == 0)){ // TDC datum
     903           0 :         fADCChannel = (Int_t) ((fBuffer & 0x3e00000) >> 21);
     904           0 :         fIsZDCTDCdatum = kTRUE;
     905           0 :         fZDCTDCdatum = (Int_t) (fBuffer & 0x1fffff);
     906             :         // Ch. debug
     907             :         //printf("  AliZDCRawStream -> ZDC TDC mod. %d ch. %d datum %d\n",fADCModule,fADCChannel,fZDCTDCdatum);
     908           0 :       }
     909           0 :       if(((fBuffer & 0xf0000000) == 0x80000000) && ((fBuffer & 0x08000000) >> 27) == 0){
     910             :         // Trailer
     911           0 :         fIsTDCHeaderRead = kFALSE;
     912             :         // Ch. debug
     913             :         //printf("  AliZDCRawStream -> ZDC TDC global trailer\n");
     914           0 :       }
     915             :     }
     916             :     // ********************************** ADD TDC DATA **********************************
     917             :     //  ADD TDC data
     918         416 :     if(fIsTDCHeaderRead && fIsADDTDCHeader && fPosition>=fTDCStartCounter+1){ 
     919           0 :       fIsADCDataWord=kFALSE; fIsScalerWord=kFALSE;
     920           0 :       if(((fBuffer & 0xf0000000)==0x00000000) && (((fBuffer & 0x08000000) >> 27) == 0)){ // TDC datum
     921           0 :         fADCChannel = (Int_t) ((fBuffer & 0x3e00000) >> 21);
     922           0 :         fIsADDTDCdatum = kTRUE;
     923           0 :         fADDTDCdatum = (Int_t) (fBuffer & 0x1fffff);
     924             :         // Ch. debug
     925             :         //printf("  AliZDCRawStream -> ADD TDC mod. %d ch. %d datum %d\n",fADCModule,fADCChannel,fADDTDCdatum);
     926           0 :       }
     927           0 :       if(((fBuffer & 0xf0000000) == 0x80000000) && ((fBuffer & 0x08000000) >> 27) == 0){
     928             :         // Trailer
     929           0 :         fIsTDCHeaderRead = kFALSE;
     930             :         // Ch. debug
     931             :         //printf("  AliZDCRawStream -> ADD TDC global trailer\n");
     932           0 :       }
     933             :     }
     934             :     // ******************************** TRIGGER SCALER DATA ********************************
     935             :     //  Reading trigger scaler data 
     936         416 :     if(fIsTriggerScaler && fPosition>=fTrigCountStart+1){
     937           0 :       fADCModule = kTrigScales; fIsADCDataWord = kFALSE;        
     938           0 :       if(fPosition == fTrigCountStart+1)      fMBTrigInput = fBuffer;               
     939           0 :       else if(fPosition == fTrigCountStart+2) fCentralTrigInput = fBuffer;                  
     940           0 :       else if(fPosition == fTrigCountStart+3) fSCentralTrigInput = fBuffer;
     941           0 :       else if(fPosition == fTrigCountStart+4) fEMDTrigInput = fBuffer; 
     942           0 :       else if(fPosition == fTrigCountStart+5) fL0Received = fBuffer;
     943           0 :       else if(fPosition == fTrigCountStart+6) fMBtrig2CTP = fBuffer;     
     944           0 :       else if(fPosition == fTrigCountStart+7) fCentralTrig2CTP = fBuffer;  
     945           0 :       else if(fPosition == fTrigCountStart+8) fSCentralTrig2CTP = fBuffer; 
     946           0 :       else if(fPosition == fTrigCountStart+9){
     947           0 :         fEMDTrig2CTP = fBuffer;       
     948           0 :         fIsTriggerScaler = kFALSE;
     949           0 :       }
     950             :       // Ch. debug
     951             :       //printf("  AliZDCRawStream -> Trigger Scaler datum %d\n", fPosition-fTrigCountStart);
     952             :     }
     953             :     // ******************************* TRIGGER HISTORY WORDS ******************************
     954             :     //  Reading trigger history
     955         416 :     if(fIsTriggerHistory && fPosition>=fTrigHistStart+1){
     956           0 :         fADCModule = kTrigHistory; fIsADCDataWord = kFALSE;     
     957           0 :         if(fPosition == fTrigHistStart+1){
     958           0 :           fPileUpBit1stWord = (fBuffer & 0x80000000) >> 31;
     959           0 :           fL0Bit1stWord = (fBuffer & 0x40000000) >> 30;        
     960           0 :           fCentralTrigHist = (fBuffer & 0x3fff8000) >> 14; 
     961           0 :           fMBTrigHist =  (fBuffer & 0x00007fff);        
     962             :           //
     963           0 :           fCPTInput[0] = (fBuffer & 0x00000080) >> 6;  // MB bit
     964           0 :           fCPTInput[1] = (fBuffer & 0x00400000) >> 21; // CENTRAL bit
     965           0 :         }
     966             :         
     967           0 :         else if(fPosition == fTrigHistStart+fTrigHistNWords){
     968           0 :           fPileUpBit2ndWord = (fBuffer & 0x80000000) >> 31;
     969           0 :           fL0Bit2ndWord = (fBuffer & 0x40000000) >> 30;            
     970           0 :           fSCentralTrigHist = (fBuffer & 0x3fff8000) >> 14; 
     971           0 :           fEMDTrigHist =  (fBuffer & 0x00007fff);    
     972             :           //
     973           0 :           fCPTInput[2] = (fBuffer & 0x00000080) >> 6;  // SEMICENTRAL bit
     974           0 :           fCPTInput[3] = (fBuffer & 0x00400000) >> 21; // EMD bit
     975             :           //
     976           0 :           fIsTriggerHistory = kFALSE;
     977             :           
     978             :           // Checking if the event is good
     979             :           // (1) both history word pile up bits must be = 0
     980           0 :           if(fPileUpBit1stWord==0 && fPileUpBit2ndWord==0) fIsPileUpEvent = kFALSE;
     981             :           else{
     982           0 :             fIsPileUpEvent = kTRUE;
     983           0 :             printf("  AliZDCRawStream -> PILE UP EVENT: bitPileUp0 %d bitPileUp1 %d\n",
     984           0 :                 fPileUpBit1stWord, fPileUpBit2ndWord);
     985             :           }
     986             :           // (2) both history word L0 bits must be = 1
     987           0 :           if(fL0Bit1stWord==1 && fL0Bit2ndWord==1) fIsL0BitSet = kTRUE;
     988             :           else{
     989           0 :             fIsL0BitSet = kFALSE;
     990           0 :             printf("  AliZDCRawStream -> L0 wrongly set: bitL0word0 %d bitL0word1 %d\n",
     991           0 :                 fL0Bit1stWord, fL0Bit2ndWord);
     992             :           }
     993             :         }       
     994             :         // Ch. debug
     995             :         //printf("  AliZDCRawStream -> Trigger history word[%d] %x\n", fPosition, fBuffer);
     996             :     }
     997             :     
     998             :   }
     999             : 
    1000         416 :   fPosition++;
    1001             : 
    1002         416 :   return kTRUE;
    1003         420 : }
    1004             : 
    1005             : //_____________________________________________________________________________
    1006             : AliCDBStorage* AliZDCRawStream::SetStorage(const char *uri) 
    1007             : {
    1008             :   // Setting the storage
    1009             :   
    1010           0 :   AliCDBStorage *storage = AliCDBManager::Instance()->GetStorage(uri); 
    1011             : 
    1012           0 :   return storage; 
    1013             : }
    1014             : 
    1015             : 
    1016             : //_____________________________________________________________________________
    1017             : AliZDCChMap* AliZDCRawStream::GetChMap() const
    1018             : {
    1019             : 
    1020             :   // Getting calibration object for ZDC
    1021             :   AliZDCChMap *calibdata = 0x0;
    1022          12 :   AliCDBEntry  *entry = AliCDBManager::Instance()->Get("ZDC/Calib/ChMap");
    1023           4 :   if(!entry) AliFatal("No calibration data loaded!");  
    1024             :   else{
    1025          12 :     calibdata = dynamic_cast<AliZDCChMap*> (entry->GetObject());
    1026           4 :     if(!calibdata) AliFatal("Wrong calibration object in calibration  file!");
    1027             :   }
    1028             : 
    1029           4 :   return calibdata;
    1030           0 : }

Generated by: LCOV version 1.11