+ }//ADC module
+ // ********************************* VME SCALER HEADER *********************************
+ else if(fADCModule == kScalerGeo){
+ if(fBuffer & 0x04000000 && fIsScHeaderRead==kFALSE){ // *** Scaler header
+ fScGeo = (fBuffer & 0xf8000000)>>27;
+ fScNWords = (fBuffer & 0x00fc0000)>>18;
+ fScTriggerSource = (fBuffer & 0x00030000)>>16;
+ fScTriggerNumber = (fBuffer & 0x0000ffff);
+ fIsScHeaderRead = kTRUE;
+ fScStartCounter = fPosition;
+ //Ch. debug
+ //printf(" AliZDCRawStream -> VME SCALER HEADER: geo %d Nwords %d TrigSource %d TrigNo. %d\n",
+ // fScGeo,fScNWords,fScTriggerSource,fScTriggerNumber);
+ }
+ else if(!(fBuffer & 0x04000000)){
+ fIsScEventGood = kFALSE;
+ }
+ }
+ // *********************************** PATTERN UNIT ***********************************
+ else if(fADCModule == kPUGeo){
+ // still to be implemented!!! Not yet in data!!!
+ fDetPattern = (fBuffer & 0x0000003f);
+ // Ch. debug
+ //printf(" AliZDCRawStream -> Pattern Unit\n");
+
+ }
+ // ******************************** TRIGGER CARD COUNTS ********************************
+ else if(fADCModule == kTrigScales){
+ if(fIsTriggerScaler == kFALSE){
+ fTrigCountNWords = (Int_t) ((fBuffer & 0xfc0000)>>17);
+ fTrigCountStart = fPosition;
+ fIsTriggerScaler = kTRUE;
+ }
+ // Ch. debug
+ //printf(" AliZDCRawStream -> Trigger Scaler header\n");
+ }
+ // ********************************** TRIGGER HISTORY **********************************
+ else if(fADCModule == kTrigHistory){
+ if(fIsTriggerHistory == kFALSE){
+ fTrigHistNWords = (Int_t) ((fBuffer & 0xfc0000)>>17);
+ fTrigHistStart = fPosition;
+ fIsTriggerHistory = kTRUE;
+ }
+ // Ch. debug
+ //printf(" AliZDCRawStream -> Trigger History header\n");
+
+ }
+ // ********************************** VME SCALER DATA **********************************
+ // Reading VME scaler data
+ if(fIsScHeaderRead && fPosition>=fScStartCounter+1){ // *** Scaler word
+ fADCModule = kScalerGeo;
+ fScEvCounter = fBuffer;
+ Int_t nWords = (Int_t) (fScNWords);
+ if(fPosition == fScStartCounter+nWords) fIsScHeaderRead = kFALSE;
+ //Ch. debug
+ //printf(" AliZDCRawStream -> scaler datum %d", fScEvCounter);
+ }
+ // ******************************** TRIGGER SCALER DATA ********************************
+ // Reading trigger scaler data
+ if(fIsTriggerScaler && fPosition>=fTrigCountStart+1){
+ fADCModule = kTrigScales;
+ if(fPosition == fTrigCountStart+1) fMBTrigInput = fBuffer;
+ else if(fPosition == fTrigCountStart+2) fCentralTrigInput = fBuffer;
+ else if(fPosition == fTrigCountStart+3) fSCentralTrigInput = fBuffer;
+ else if(fPosition == fTrigCountStart+4) fEMDTrigInput = fBuffer;
+ else if(fPosition == fTrigCountStart+5) fL0Received = fBuffer;
+ else if(fPosition == fTrigCountStart+6) fMBtrig2CTP = fBuffer;
+ else if(fPosition == fTrigCountStart+7) fCentralTrig2CTP = fBuffer;
+ else if(fPosition == fTrigCountStart+8) fSCentralTrig2CTP = fBuffer;
+ else if(fPosition == fTrigCountStart+9){
+ fEMDTrig2CTP = fBuffer;
+ fIsTriggerScaler = kFALSE;
+ }
+ // Ch. debug
+ //printf(" AliZDCRawStream -> Trigger Scaler datum %d\n", fPosition-fTrigCountStart);
+ }
+ // ******************************* TRIGGER HISTORY WORDS ******************************
+ // Reading trigger history
+ if(fIsTriggerHistory && fPosition>=fTrigHistStart+1){
+ fADCModule = kTrigHistory;
+ if(fPosition == fTrigHistStart+1){
+ fPileUpBit1stWord = (fBuffer & 0x80000000) >> 31;
+ fL0Bit1stWord = (fBuffer & 0x40000000) >> 30;
+ fCentralTrigHist = (fBuffer & 0x3fff8000) >> 14;
+ fMBTrigHist = (fBuffer & 0x00007fff);
+ //
+ fCPTInput[0] = (fBuffer & 0x00000080) >> 6; // MB bit
+ fCPTInput[1] = (fBuffer & 0x00400000) >> 21; // CENTRAL bit
+ }
+
+ else if(fPosition == fTrigHistStart+fTrigHistNWords){
+ fPileUpBit2ndWord = (fBuffer & 0x80000000) >> 31;
+ fL0Bit2ndWord = (fBuffer & 0x40000000) >> 30;
+ fSCentralTrigHist = (fBuffer & 0x3fff8000) >> 14;
+ fEMDTrigHist = (fBuffer & 0x00007fff);
+ //
+ fCPTInput[2] = (fBuffer & 0x00000080) >> 6; // SEMICENTRAL bit
+ fCPTInput[3] = (fBuffer & 0x00400000) >> 21; // EMD bit
+ //
+ fIsTriggerHistory = kFALSE;
+
+ // Checking if the event is good
+ // (1) both history word pile up bits must be = 0
+ if(fPileUpBit1stWord==0 && fPileUpBit2ndWord==0) fIsPileUpEvent = kFALSE;
+ else{
+ fIsPileUpEvent = kTRUE;
+ printf(" AliZDCRawStream -> PILE UP EVENT: bitPileUp0 %d bitPileUp1 %d\n",
+ fPileUpBit1stWord, fPileUpBit2ndWord);
+ }
+ // (2) both history word L0 bits must be = 1
+ if(fL0Bit1stWord==1 && fL0Bit2ndWord==1) fIsL0BitSet = kTRUE;
+ else{
+ fIsL0BitSet = kFALSE;
+ printf(" AliZDCRawStream -> L0 wrongly set: bitL0word0 %d bitL0word1 %d\n",
+ fL0Bit1stWord, fL0Bit2ndWord);
+ }
+ }
+ // Ch. debug
+ //printf(" AliZDCRawStream -> Trigger history word %d\n", fPosition-fTrigHistStart);
+ }