]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
Following changes in STEER/AliESDZDC class
authorcoppedis <coppedis@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 19 Oct 2009 10:16:14 +0000 (10:16 +0000)
committercoppedis <coppedis@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 19 Oct 2009 10:16:14 +0000 (10:16 +0000)
ZDC/AliZDCPreprocessor.cxx
ZDC/AliZDCRawStream.h
ZDC/AliZDCReco.cxx
ZDC/AliZDCReco.h
ZDC/AliZDCReconstructor.cxx
ZDC/AliZDCReconstructor.h

index bbfd4f036d587a93af62539a4be99d19eeae001b..b2e38e32e4000f99535419dbb794edfecf170032 100644 (file)
@@ -281,7 +281,7 @@ UInt_t AliZDCPreprocessor::ProcessChMap()
     // 
     AliCDBMetaData metaData;
     metaData.SetBeamPeriod(0);
-    metaData.SetResponsible("Chiara Oppedisano");
+    //metaData.SetResponsible("Chiara Oppedisano");
     metaData.SetComment("Filling AliZDCChMap object");  
     //
     resChMapStore = Store("Calib","ChMap",mapCalib, &metaData, 0, kTRUE);
index 99c780811af9e4193313b54a44604cfdb0bf5f10..4855fa8fcbcb7091c9c86e15a383f0a6441345fc 100644 (file)
@@ -121,9 +121,11 @@ class AliZDCRawStream: public TObject {
     UInt_t GetTriggerNumber()   const {return fScTriggerNumber;}
     UInt_t GetTriggerCount()    const {return fScEvCounter;}
     Bool_t IsScHeaderRead()     const {return fIsScHeaderRead;}
+    Bool_t IsScEventGood()      const {return fIsScEventGood;}
     
     UInt_t GetDetectorPattern() const {return fDetPattern;}
     
+    Bool_t IstriggerHistoryWord() const {return fIsTriggerHistory;}
     Int_t  GetTriggerInput2CTP() const {return *fCPTInput;}
     Bool_t IsCPTInputMBTrigger() 
        {if(fCPTInput[0]==1) return kTRUE; else return kFALSE;}
@@ -202,7 +204,7 @@ class AliZDCRawStream: public TObject {
     // Trigger card
     // (1) trigger counts
     Int_t  fTrigCountNWords;  // no. of words to read from trigger card scalers
-    Bool_t fIsTriggerScaler;// Trigger card scalers - 1st word read
+    Bool_t fIsTriggerScaler;  // Trigger card scalers - 1st word read
     Int_t  fTrigCountStart;   // Trigger card scalers - counter
     Int_t  fMBTrigInput;      // MB          trigger input to trigger card
     Int_t  fCentralTrigInput; // CENTRAL     trigger input to trigger card
index 9cd6d4cd49fcf0f2ec917500ea9a3646c4d2de14..a6df67fdaee7c1b11f6a5826e5cfc601381086b9 100644 (file)
@@ -46,8 +46,8 @@ AliZDCReco::AliZDCReco() :
   fImpParameter(0),
   fImpParSideA(0),
   fImpParSideC(0),
-  fRecoFlag(0x0)
-
+  fRecoFlag(0x0),
+  fIsScalerOn(kFALSE)
 { 
   //
   // Default constructor
@@ -60,6 +60,8 @@ AliZDCReco::AliZDCReco() :
        fPMRef1[i] = fPMRef2[i] = 0.;
      }
   }
+  
+  for(Int_t i=0; i<32; i++) fZDCScaler[i]=0;
 }
   
 
@@ -73,7 +75,7 @@ AliZDCReco::AliZDCReco(
      Int_t trsp, Int_t trspSideA,Int_t trspSideC,
      Int_t npart, Int_t npartSideA, Int_t npartSideC, 
      Float_t b, Float_t bSideA, Float_t bSideC,
-     UInt_t recoFlag) :
+     UInt_t recoFlag, Bool_t scalerOn, UInt_t* scaler) :
        
   TObject(),
   //
@@ -90,8 +92,8 @@ AliZDCReco::AliZDCReco(
   fImpParameter(b),
   fImpParSideA(bSideA),
   fImpParSideC(bSideC),
-  fRecoFlag(recoFlag)
-
+  fRecoFlag(recoFlag),
+  fIsScalerOn(scalerOn)
 { 
   //
   // Constructor
@@ -112,6 +114,7 @@ AliZDCReco::AliZDCReco(
        fPMRef2[j] = ref2[j];
      }
   }
+  for(Int_t j=0; j<32; j++) fZDCScaler[j] = scaler[j];
   
 }
 
@@ -131,7 +134,8 @@ fNPartSideC(oldreco.GetNPartSideC()),
 fImpParameter(oldreco.GetImpParameter()),      
 fImpParSideA(oldreco.GetImpParSideA()),      
 fImpParSideC(oldreco.GetImpParSideC()),
-fRecoFlag(oldreco.GetRecoFlag())    
+fRecoFlag(oldreco.GetRecoFlag()),
+fIsScalerOn(oldreco.IsScalerOn())    
 {
   // Copy constructor
 
@@ -163,6 +167,7 @@ fRecoFlag(oldreco.GetRecoFlag())
   fPMRef1[1] = oldreco.GetPMRef1LRsignal();
   fPMRef2[0] = oldreco.GetPMRef2HRsignal();
   fPMRef2[1] = oldreco.GetPMRef2LRsignal();
+  for(Int_t j=0; j<32; j++) fZDCScaler[j] = oldreco.GetZDCScaler(j);
 }
 
 //______________________________________________________________________________
index dae0cbdd1c48e916efcd54027e124f0da8e0794f..db0957bc74a391c8748be63c30cf431fc78c6410 100644 (file)
@@ -22,7 +22,7 @@ public:
             Int_t trsp, Int_t trspSideA, Int_t trspSideC,
             Int_t npart, Int_t npartSideA, Int_t npartSideC, 
             Float_t b, Float_t bSideA, Float_t bSideC,
-            UInt_t recoFlag);
+            UInt_t recoFlag, Bool_t scalerOn, UInt_t* scaler);
 
   AliZDCReco(const AliZDCReco &oldreco);
   virtual ~AliZDCReco() {}
@@ -77,6 +77,9 @@ public:
   virtual UInt_t  GetChOnFlag()      const {return (fRecoFlag & 0x00000100);}
   virtual UInt_t  GetChOvflwFlag()   const {return (fRecoFlag & 0x00000200);}
   virtual UInt_t  GetChUndflwFlag()  const {return (fRecoFlag & 0x00000400);}
+  //
+  virtual Bool_t  IsScalerOn()          const {return fIsScalerOn;}
+  virtual UInt_t  GetZDCScaler(Int_t k) const {return fZDCScaler[k];}
 
   // Print method
   virtual void Print(Option_t *) const;
@@ -114,8 +117,10 @@ private:
   Float_t fImpParSideC;           // Estimate of the impact parameter side B
   //
   UInt_t  fRecoFlag;       // Reconstruction flag
+  Bool_t  fIsScalerOn;     // True if scaler has been read in the event
+  UInt_t  fZDCScaler[32];  // Counts from ZDC VME scaler
 
-  ClassDef(AliZDCReco,7)  // RecPoints for the Zero Degree Calorimeters
+  ClassDef(AliZDCReco,8)  // RecPoints for the Zero Degree Calorimeters
 };
  
 #endif
index 08816b103cff1133de7a1a1922505b74bd48f925..08e7add4f6af85a531314472e1537fbd506a7e01 100644 (file)
@@ -33,7 +33,6 @@
 #include <TMap.h>
 
 #include "AliRawReader.h"
-#include "AliGRPObject.h"
 #include "AliESDEvent.h"
 #include "AliESDZDC.h"
 #include "AliZDCDigit.h"
@@ -65,7 +64,6 @@ AliZDCReconstructor:: AliZDCReconstructor() :
   fSignalThreshold(7)
 {
   // **** Default constructor
-
 }
 
 
@@ -86,7 +84,6 @@ void AliZDCReconstructor::Init()
   // Getting beam type and beam energy from GRP calibration object
   
   TString runType = GetRunInfo()->GetRunType();
-
   if((runType.CompareTo("CALIBRATION_MB")) == 0){
     fIsCalibrationMB = kTRUE;
   }
@@ -96,38 +93,22 @@ void AliZDCReconstructor::Init()
   if(((beamType.CompareTo("UNKNOWN"))==0) && ((runType.CompareTo("PHYSICS")) == 0)){
     fRecoMode=1;
   }
-  else if(beamType==AliGRPObject::GetInvalidString()){
-    AliWarning("GRP/GRP/Data entry:  missing value for the beam type !");
-    AliError("\t ZDC does not reconstruct event 4 UNKNOWN beam type\n");
+  /*else if((beamType.CompareTo("UNKNOWN"))==0){
+    AliError("\t UNKNOWN beam type\n");
     return;
-  }
+  }*/
 
   if(((beamType.CompareTo("pp"))==0) || ((beamType.CompareTo("p-p"))==0)
-     ||((beamType.CompareTo("PP"))==0) || ((beamType.CompareTo("P-P"))==0)) fRecoMode=1;
+     ||((beamType.CompareTo("PP"))==0) || ((beamType.CompareTo("P-P"))==0)){
+    fRecoMode=1;
+  }
   else if((beamType.CompareTo("A-A")) == 0){
     fRecoMode=2;
-    if(fIsCalibrationMB == kTRUE){ 
-      fRecoParam = new AliZDCRecoParamPbPb();
-      //
-      TH2F* hZDCvsZEM = new TH2F("hZDCvsZEM","hZDCvsZEM",100,0.,10.,100,0.,1000.);
-      hZDCvsZEM->SetXTitle("E_{ZEM} (TeV)"); hZDCvsZEM->SetYTitle("E_{ZDC} (TeV)");
-      fRecoParam->SetZDCvsZEM(hZDCvsZEM);
-      //
-      TH2F* hZDCCvsZEM = new TH2F("hZDCCvsZEM","hZDCCvsZEM",100,0.,10.,100,0.,500.);
-      hZDCCvsZEM->SetXTitle("E_{ZEM} (TeV)"); hZDCCvsZEM->SetYTitle("E_{ZDCC} (TeV)");
-      fRecoParam->SetZDCCvsZEM(hZDCCvsZEM);
-      //
-      TH2F* hZDCAvsZEM = new TH2F("hZDCAvsZEM","hZDCAvsZEM",100,0.,10.,100,0.,500.);
-      hZDCAvsZEM->SetXTitle("E_{ZEM} (TeV)"); hZDCAvsZEM->SetYTitle("E_{ZDCA} (TeV)"); 
-      fRecoParam->SetZDCAvsZEM(hZDCAvsZEM);
-      //
-      AliInfo("\n ***** CALIBRATION_MB data -> building AliZDCRecoParamPbPb object *****");
-    }
   }
     
   fBeamEnergy = GetRunInfo()->GetBeamEnergy();
-  if(fBeamEnergy==AliGRPObject::GetInvalidFloat()){
-    AliWarning("GRP/GRP/Data entry:  missing value for the beam energy ! Using 0.");
+  if(fBeamEnergy==0.){
+    AliWarning(" Beam energy value missing -> E_beam = 0");
     fBeamEnergy = 0.;
   }
     
@@ -150,8 +131,8 @@ void AliZDCReconstructor::Reconstruct(TTree* digitsTree, TTree* clustersTree) co
   // Parameters pedestal subtraction through correlation with out-of-time signals
   Float_t corrCoeff0[2*kNch], corrCoeff1[2*kNch];
   for(Int_t jj=0; jj<2*kNch; jj++){
-     corrCoeff0[jj] =  fPedData->GetPedCorrCoeff0(jj);
-     corrCoeff1[jj] =  fPedData->GetPedCorrCoeff1(jj);
+     corrCoeff0[jj] = fPedData->GetPedCorrCoeff0(jj);
+     corrCoeff1[jj] = fPedData->GetPedCorrCoeff1(jj);
   }
 
   // get digits
@@ -271,26 +252,25 @@ void AliZDCReconstructor::Reconstruct(TTree* digitsTree, TTree* clustersTree) co
    
   }//digits loop
  
+  UInt_t counts[32];
+  for(Int_t jj=0; jj<32; jj++) counts[jj]=0;
+  
+  Int_t  evQualityBlock[4] = {1,0,0,0};
+  Int_t  triggerBlock[4] = {0,0,0,0};
+  Int_t  chBlock[3] = {0,0,0};
+  UInt_t puBits=0;
   
-  // If CALIBRATION_MB run build the RecoParam object 
-  if(fIsCalibrationMB){
-    Float_t ZDCC=0., ZDCA=0., ZEM=0;
-    ZEM += dZEM1Corr[0] + dZEM2Corr[0];
-    for(Int_t jkl=0; jkl<5; jkl++){
-       ZDCC += tZN1Corr[jkl] + tZP1Corr[jkl];
-       ZDCA += tZN2Corr[jkl] + tZP2Corr[jkl];
-    }
-    // Using energies in TeV in fRecoParam object
-    BuildRecoParam(ZDCC/1000., ZDCA/1000., ZEM/1000.);
-  }
-  Bool_t recFlag1 = kFALSE, recFlag2 = kFALSE, recFlag3 = kFALSE;
   // reconstruct the event
   if(fRecoMode==1)
     ReconstructEventpp(clustersTree, tZN1Corr, tZP1Corr, tZN2Corr, tZP2Corr, 
-      dZEM1Corr, dZEM2Corr, sPMRef1, sPMRef2, recFlag1, recFlag2, recFlag3);
+      dZEM1Corr, dZEM2Corr, sPMRef1, sPMRef2, 
+      kFALSE, counts, 
+      evQualityBlock,  triggerBlock,  chBlock, puBits);
   else if(fRecoMode==2)
     ReconstructEventPbPb(clustersTree, tZN1Corr, tZP1Corr, tZN2Corr, tZP2Corr, 
-      dZEM1Corr, dZEM2Corr, sPMRef1, sPMRef2, recFlag1, recFlag2, recFlag3);
+      dZEM1Corr, dZEM2Corr, sPMRef1, sPMRef2, 
+      kFALSE, counts, 
+      evQualityBlock,  triggerBlock,  chBlock, puBits);
 }
 
 //_____________________________________________________________________________
@@ -328,7 +308,6 @@ void AliZDCReconstructor::Reconstruct(AliRawReader* rawReader, TTree* clustersTr
     }
   }
   
-  // loop over raw data
   Float_t tZN1Corr[10], tZP1Corr[10], tZN2Corr[10], tZP2Corr[10]; 
   Float_t dZEM1Corr[2], dZEM2Corr[2], sPMRef1[2], sPMRef2[2]; 
   for(Int_t i=0; i<10; i++){
@@ -336,25 +315,36 @@ void AliZDCReconstructor::Reconstruct(AliRawReader* rawReader, TTree* clustersTr
      if(i<2) dZEM1Corr[i] = dZEM2Corr[i] = sPMRef1[i] = sPMRef2[i] = 0.;
   }  
 
+  Bool_t isScalerOn=kFALSE;
+  Int_t jsc=0;
+  UInt_t scalerData[32];       
+  for(Int_t k=0; k<32; k++) scalerData[k]=0;
+  
+  Int_t  evQualityBlock[4] = {1,0,0,0};
+  Int_t  triggerBlock[4] = {0,0,0,0};
+  Int_t  chBlock[3] = {0,0,0};
+  UInt_t puBits=0;
+
   //fNRun = (Int_t) rawReader->GetRunNumber();
-  Bool_t chOff=kFALSE, isUndflw=kFALSE, isOvflw=kFALSE, isADCEvGood=kFALSE;
-  Int_t kFirstADCGeo=0, kLastADCGeo=3;
-  //Int_t kScalerGeo=8, kPUGeo=29, kTrigScales=30, kTrigHistory=31;
-  //
+  Int_t kFirstADCGeo=0, kLastADCGeo=3, kScalerGeo=8, kPUGeo=29;
+  //Int_t kTrigScales=30, kTrigHistory=31;
+
+  // loop over raw data
   rawReader->Reset();
   AliZDCRawStream rawData(rawReader);
   while(rawData.Next()){
-   //if(rawData.IsCalibration() == kFALSE){ // Reading ADCs
+   
+   // ***************************** Reading ADCs
    if((rawData.GetADCModule()>=kFirstADCGeo) && (rawData.GetADCModule()<=kLastADCGeo)){    
     //printf(" **** Reading ADC raw data from module %d **** \n",rawData.GetADCModule());
     //
-    if((rawData.IsADCDataWord()) && (rawData.GetNChannelsOn()<48))  chOff = kTRUE;
-    if((rawData.IsADCDataWord()) && (rawData.IsOverflow() == kTRUE)) isUndflw = kTRUE;
-    if((rawData.IsADCDataWord()) && (rawData.IsUnderflow() == kTRUE)) isOvflw = kTRUE;
-    if((rawData.IsADCDataWord()) && (rawData.IsADCEventGood() == kTRUE)) isADCEvGood = kTRUE;
+    if((rawData.IsADCDataWord()) && (rawData.GetNChannelsOn()<48))    chBlock[0] = kTRUE;
+    if((rawData.IsADCDataWord()) && (rawData.IsOverflow() == kTRUE))  chBlock[1] = kTRUE;
+    if((rawData.IsADCDataWord()) && (rawData.IsUnderflow() == kTRUE)) chBlock[2] = kTRUE;
+    if((rawData.IsADCDataWord()) && (rawData.IsADCEventGood() == kTRUE)) evQualityBlock[0] = kTRUE;
     
-    if((rawData.IsADCDataWord()) && (isUndflw==kFALSE) 
-        && (isOvflw==kFALSE) && (isADCEvGood==kTRUE)){
+    if((rawData.IsADCDataWord()) && (rawData.IsUnderflow()==kFALSE) 
+        && (rawData.IsOverflow()==kFALSE) && (rawData.IsADCEventGood()==kTRUE)){
      
       Int_t adcMod = rawData.GetADCModule();
       Int_t det = rawData.GetSector(0);
@@ -404,19 +394,20 @@ void AliZDCReconstructor::Reconstruct(AliRawReader* rawReader, TTree* clustersTr
          pedindex = (det-1)/3 + 22;
          if(det == 1){
            if(gain==0) sPMRef1[0] += (Float_t) (rawData.GetADCValue()-meanPed[pedindex]);
-        else sPMRef1[1] += (Float_t) (rawData.GetADCValue()-meanPed[pedindex]);
+        else sPMRef1[1] += (Float_t) (rawData.GetADCValue()-meanPed[pedindex+kNch]);
          }
          else if(det == 4){
            if(gain==0) sPMRef2[0] += (Float_t) (rawData.GetADCValue()-meanPed[pedindex]);
-          else sPMRef2[1] += (Float_t) (rawData.GetADCValue()-meanPed[pedindex]);
+          else sPMRef2[1] += (Float_t) (rawData.GetADCValue()-meanPed[pedindex+kNch]);
          }
        }
        // Ch. debug
-       /*printf(" AliZDCReconstructor: det %d quad %d res %d -> Pedestal[%d] %1.0f\n", 
-         det,quad,gain, pedindex, meanPed[pedindex]);
-       printf("                      RawADC %d ADCCorr %1.0f\n", 
-         rawData.GetADCValue(), rawData.GetADCValue()-meanPed[pedindex]);*/
-        
+       /*if(gain==0){
+         printf(" AliZDCReconstructor: det %d quad %d res %d -> Pedestal[%d] %1.0f", 
+           det,quad,gain, pedindex, meanPed[pedindex]);
+         printf("   RawADC %d ADCCorr %1.0f\n", 
+           rawData.GetADCValue(), rawData.GetADCValue()-meanPed[pedindex]);
+       }*/ 
       }// mean pedestal subtraction
       // Pedestal subtraction from correlation ------------------------------------------------
       else if(fPedSubMode == 1){
@@ -483,9 +474,27 @@ void AliZDCReconstructor::Reconstruct(AliRawReader* rawReader, TTree* clustersTr
       /*printf("\t AliZDCReconstructor: det %d quad %d res %d -> Ped[%d] = %1.0f\n", 
         det,quad,gain, pedindex, meanPed[pedindex]);*/
     }//IsADCDataWord
-   }// Not raw data from calibration run!
-   else{
+   }// ADC DATA
+   // ***************************** Reading Scaler
+   else if(rawData.GetADCModule()==kScalerGeo){
+     if(rawData.IsScHeaderRead()==kTRUE && rawData.IsScEventGood()==kTRUE){
+       isScalerOn = kTRUE;
+       scalerData[jsc] = rawData.GetTriggerCount();
+       jsc++;
+     }
+   }// VME SCALER DATA
+   // ***************************** Reading PU
+   else if(rawData.GetADCModule()==kPUGeo){
+     puBits = rawData.GetDetectorPattern();
    }
+    // ***************************** Reading trigger history
+   else if(rawData.IstriggerHistoryWord()==kTRUE){
+     triggerBlock[0] = rawData.IsCPTInputEMDTrigger();
+     triggerBlock[1] = rawData.IsCPTInputSemiCentralTrigger();
+     triggerBlock[2] = rawData.IsCPTInputCentralTrigger();
+     triggerBlock[3] = rawData.IsCPTInputMBTrigger();
+   }
+  
   }//loop on raw data
   
   if(fPedSubMode==1){
@@ -545,32 +554,24 @@ void AliZDCReconstructor::Reconstruct(AliRawReader* rawReader, TTree* clustersTr
     sPMRef2[1] = pmReflg[0] - (corrCoeff1[23+kNch]*pmRefootlg[1]+corrCoeff0[23+kNch]);
   }
     
-  // If CALIBRATION_MB run build the RecoParam object 
-  if(fIsCalibrationMB){
-    Float_t ZDCC=0., ZDCA=0., ZEM=0;
-    ZEM += dZEM1Corr[0] + dZEM2Corr[0];
-    for(Int_t jkl=0; jkl<5; jkl++){
-       ZDCC += tZN1Corr[jkl] + tZP1Corr[jkl];
-       ZDCA += tZN2Corr[jkl] + tZP2Corr[jkl];
-    }
-    BuildRecoParam(ZDCC/100., ZDCA/100., ZEM/100.);
-  }
-  // reconstruct the event
-  else{
-    if(fRecoMode==1) // p-p data
-      ReconstructEventpp(clustersTree, tZN1Corr, tZP1Corr, tZN2Corr, tZP2Corr, 
-        dZEM1Corr, dZEM2Corr, sPMRef1, sPMRef2, chOff, isUndflw, isOvflw);
-    else if(fRecoMode==2) // Pb-Pb data
-      ReconstructEventPbPb(clustersTree, tZN1Corr, tZP1Corr, tZN2Corr, tZP2Corr, 
-        dZEM1Corr, dZEM2Corr, sPMRef1, sPMRef2, chOff, isUndflw, isOvflw);
-  }
+  if(fRecoMode==1) // p-p data
+    ReconstructEventpp(clustersTree, tZN1Corr, tZP1Corr, tZN2Corr, tZP2Corr, 
+      dZEM1Corr, dZEM2Corr, sPMRef1, sPMRef2, 
+      isScalerOn, scalerData, 
+      evQualityBlock, triggerBlock, chBlock, puBits);
+  else if(fRecoMode==2) // Pb-Pb data
+    ReconstructEventPbPb(clustersTree, tZN1Corr, tZP1Corr, tZN2Corr, tZP2Corr, 
+      dZEM1Corr, dZEM2Corr, sPMRef1, sPMRef2, 
+      isScalerOn, scalerData, 
+      evQualityBlock, triggerBlock, chBlock, puBits);
 }
 
 //_____________________________________________________________________________
 void AliZDCReconstructor::ReconstructEventpp(TTree *clustersTree, Float_t* corrADCZN1, 
        Float_t* corrADCZP1, Float_t* corrADCZN2, Float_t* corrADCZP2,
        Float_t* corrADCZEM1, Float_t* corrADCZEM2, Float_t* sPMRef1, Float_t* sPMRef2,
-       Bool_t channelsOff, Bool_t chUnderflow, Bool_t chOverflow) const
+       Bool_t isScalerOn, UInt_t* scaler, 
+       Int_t* evQualityBlock, Int_t* triggerBlock, Int_t* chBlock, UInt_t puBits) const
 {
   // ****************** Reconstruct one event ******************
   
@@ -588,24 +589,50 @@ void AliZDCReconstructor::ReconstructEventpp(TTree *clustersTree, Float_t* corrA
   printf(" ADCZEM1 [%1.2f] ADCZEM2 [%1.2f] \n",corrADCZEM1[0],corrADCZEM2[0]);
   printf("*************************************************\n");*/
     
-  // ---- Setting reco flags
-  UInt_t recoFlag=0;
+  // ---------------------- Setting reco flags for ESD
   UInt_t rFlags[32];
   for(Int_t ifl=0; ifl<32; ifl++) rFlags[ifl]=0;
-
-  if(corrADCZN2[0]>fSignalThreshold)  rFlags[0] = 0x1;
-  if(corrADCZP2[0]>fSignalThreshold)  rFlags[1] = 0x1;
-  if(corrADCZEM1[0]>fSignalThreshold) rFlags[2] = 0x1;
-  if(corrADCZEM2[0]>fSignalThreshold) rFlags[3] = 0x1;
-  if(corrADCZN1[0]>fSignalThreshold)  rFlags[4] = 0x1;
-  if(corrADCZP1[0]>fSignalThreshold)  rFlags[5] = 0x1;
+  
+  if(evQualityBlock[0] == 1) rFlags[31] = 0x0;
+  else rFlags[31] = 0x1;
   //
-  if(channelsOff==kTRUE)   rFlags[8] = 0x1;
-  if(chUnderflow == kTRUE) rFlags[9] = 0x1;
-  if(chOverflow==kTRUE)    rFlags[10] = 0x1;
-  recoFlag = rFlags[10] << 10 | rFlags[9] << 9 | rFlags[8] << 8 |
-             rFlags[5] << 5 | rFlags[4] << 4 | rFlags[3] << 3 |
-             rFlags[2] << 2 | rFlags[1] << 1 | rFlags[0];
+  if(evQualityBlock[1] == 1) rFlags[30] = 0x1;
+  if(evQualityBlock[2] == 1) rFlags[29] = 0x1;
+  if(evQualityBlock[3] == 1) rFlags[28] = 0x1;
+
+  if(triggerBlock[0] == 1) rFlags[27] = 0x1;
+  if(triggerBlock[1] == 1) rFlags[26] = 0x1;
+  if(triggerBlock[2] == 1) rFlags[25] = 0x1;
+  if(triggerBlock[3] == 1) rFlags[24] = 0x1;
+  
+  if(chBlock[0] == 1) rFlags[18] = 0x1;
+  if(chBlock[1] == 1) rFlags[17] = 0x1;
+  if(chBlock[2] == 1) rFlags[16] = 0x1;
+  
+  
+  rFlags[13] = puBits & 0x00000020;
+  rFlags[12] = puBits & 0x00000010;
+  rFlags[11] = puBits & 0x00000080;
+  rFlags[10] = puBits & 0x00000040;
+  rFlags[9]  = puBits & 0x00000020;
+  rFlags[8]  = puBits & 0x00000010;
+  
+  if(corrADCZP1[0]>fSignalThreshold)  rFlags[5] = 0x1;
+  if(corrADCZN1[0]>fSignalThreshold)  rFlags[4] = 0x1;
+  if(corrADCZEM2[0]>fSignalThreshold) rFlags[3] = 0x1;
+  if(corrADCZEM1[0]>fSignalThreshold) rFlags[2] = 0x1;
+  if(corrADCZP2[0]>fSignalThreshold)  rFlags[1] = 0x1;
+  if(corrADCZN2[0]>fSignalThreshold)  rFlags[0] = 0x1;
+
+  UInt_t recoFlag = rFlags[31] << 31 | rFlags[30] << 30 | rFlags[29] << 29 | rFlags[28] << 28 |
+             rFlags[27] << 27 | rFlags[26] << 26 | rFlags[25] << 25 | rFlags[24] << 24 |
+            0x0 << 23 | 0x0 << 22 | 0x0 << 21 | 0x0 << 20 |
+            0x0 << 19 | rFlags[18] << 18 |  rFlags[17] << 17 |  rFlags[16] << 16 |
+            0x0 << 15 | 0x0 << 14 | rFlags[13] << 13 | rFlags[12] << 12 | 
+             rFlags[11] << 11 |rFlags[10] << 10 | rFlags[9] << 9 | rFlags[8] << 8 |
+            0x0 << 7 | 0x0 << 6 | rFlags[5] << 5 | rFlags[4] << 4 | 
+            rFlags[3] << 3 | rFlags[2] << 2 | rFlags[1] << 1 | rFlags[0];
+  // --------------------------------------------------
 
   // ******    Retrieving calibration data 
   // --- Equalization coefficients ---------------------------------------------
@@ -724,7 +751,7 @@ void AliZDCReconstructor::ReconstructEventpp(TTree *clustersTree, Float_t* corrA
                   nGenSpec, nGenSpecLeft, nGenSpecRight, 
                   nPart, nPartTotLeft, nPartTotRight, 
                   impPar, impPar1, impPar2,
-                  recoFlag);
+                  recoFlag, isScalerOn, scaler);
                  
   const Int_t kBufferSize = 4000;
   clustersTree->Branch("ZDC", "AliZDCReco", &reco, kBufferSize);
@@ -736,28 +763,54 @@ void AliZDCReconstructor::ReconstructEventpp(TTree *clustersTree, Float_t* corrA
 void AliZDCReconstructor::ReconstructEventPbPb(TTree *clustersTree, 
        Float_t* corrADCZN1, Float_t* corrADCZP1, Float_t* corrADCZN2, Float_t* corrADCZP2,
        Float_t* corrADCZEM1, Float_t* corrADCZEM2, Float_t* sPMRef1, Float_t* sPMRef2,
-       Bool_t channelsOff, Bool_t chUnderflow, Bool_t chOverflow) const 
+       Bool_t isScalerOn, UInt_t* scaler, 
+       Int_t* evQualityBlock, Int_t* triggerBlock, Int_t* chBlock, UInt_t puBits) const
 {
   // ****************** Reconstruct one event ******************
-  
-  // ---- Setting reco flags
-  UInt_t recoFlag=0;
+  // ---------------------- Setting reco flags for ESD
   UInt_t rFlags[32];
   for(Int_t ifl=0; ifl<32; ifl++) rFlags[ifl]=0;
-
-  if(corrADCZN2[0]>fSignalThreshold)  rFlags[0] = 0x1;
-  if(corrADCZP2[0]>fSignalThreshold)  rFlags[1] = 0x1;
-  if(corrADCZEM1[0]>fSignalThreshold) rFlags[2] = 0x1;
-  if(corrADCZEM2[0]>fSignalThreshold) rFlags[3] = 0x1;
-  if(corrADCZN1[0]>fSignalThreshold)  rFlags[4] = 0x1;
-  if(corrADCZP1[0]>fSignalThreshold)  rFlags[5] = 0x1;
+  
+  if(evQualityBlock[0] == 1) rFlags[31] = 0x0;
+  else rFlags[31] = 0x1;
   //
-  if(channelsOff==kTRUE)   rFlags[8] = 0x1;
-  if(chUnderflow == kTRUE) rFlags[9] = 0x1;
-  if(chOverflow==kTRUE)    rFlags[10] = 0x1;
-  recoFlag = rFlags[10] << 10 | rFlags[9] << 9 | rFlags[8] << 8 |
-             rFlags[5] << 5 | rFlags[4] << 4 | rFlags[3] << 3 |
-             rFlags[2] << 2 | rFlags[1] << 1 | rFlags[0];
+  if(evQualityBlock[1] == 1) rFlags[30] = 0x1;
+  if(evQualityBlock[2] == 1) rFlags[29] = 0x1;
+  if(evQualityBlock[3] == 1) rFlags[28] = 0x1;
+
+  if(triggerBlock[0] == 1) rFlags[27] = 0x1;
+  if(triggerBlock[1] == 1) rFlags[26] = 0x1;
+  if(triggerBlock[2] == 1) rFlags[25] = 0x1;
+  if(triggerBlock[3] == 1) rFlags[24] = 0x1;
+  
+  if(chBlock[0] == 1) rFlags[18] = 0x1;
+  if(chBlock[1] == 1) rFlags[17] = 0x1;
+  if(chBlock[2] == 1) rFlags[16] = 0x1;
+  
+  rFlags[13] = puBits & 0x00000020;
+  rFlags[12] = puBits & 0x00000010;
+  rFlags[11] = puBits & 0x00000080;
+  rFlags[10] = puBits & 0x00000040;
+  rFlags[9]  = puBits & 0x00000020;
+  rFlags[8]  = puBits & 0x00000010;  
+  
+  if(corrADCZP1[0]>fSignalThreshold)  rFlags[5] = 0x1;
+  if(corrADCZN1[0]>fSignalThreshold)  rFlags[4] = 0x1;
+  if(corrADCZEM2[0]>fSignalThreshold) rFlags[3] = 0x1;
+  if(corrADCZEM1[0]>fSignalThreshold) rFlags[2] = 0x1;
+  if(corrADCZP2[0]>fSignalThreshold)  rFlags[1] = 0x1;
+  if(corrADCZN2[0]>fSignalThreshold)  rFlags[0] = 0x1;
+
+  UInt_t recoFlag = rFlags[31] << 31 | rFlags[30] << 30 | rFlags[29] << 29 | rFlags[28] << 28 |
+             rFlags[27] << 27 | rFlags[26] << 26 | rFlags[25] << 25 | rFlags[24] << 24 |
+            0x0 << 23 | 0x0 << 22 | 0x0 << 21 | 0x0 << 20 |
+            0x0 << 19 | rFlags[18] << 18 |  rFlags[17] << 17 |  rFlags[16] << 16 |
+            0x0 << 15 | 0x0 << 14 | rFlags[13] << 13 | rFlags[12] << 12 | 
+             rFlags[11] << 11 |rFlags[10] << 10 | rFlags[9] << 9 | rFlags[8] << 8 |
+            0x0 << 7 | 0x0 << 6 | rFlags[5] << 5 | rFlags[4] << 4 | 
+            rFlags[3] << 3 | rFlags[2] << 2 | rFlags[1] << 1 | rFlags[0];
+  // --------------------------------------------------
+  
 
   // ******    Retrieving calibration data 
   // --- Equalization coefficients ---------------------------------------------
@@ -1097,7 +1150,7 @@ void AliZDCReconstructor::ReconstructEventPbPb(TTree *clustersTree,
                  nDetSpecNLeft, nDetSpecPLeft, nDetSpecNRight, nDetSpecPRight, 
                  nGenSpec, nGenSpecA, nGenSpecC, 
                  nPart, nPartA, nPartC, b, bA, bC,
-                 recoFlag);
+                 recoFlag, isScalerOn, scaler);
                    
   const Int_t kBufferSize = 4000;
   clustersTree->Branch("ZDC", "AliZDCReco", &reco, kBufferSize);
@@ -1121,8 +1174,6 @@ void AliZDCReconstructor::FillZDCintoESD(TTree *clustersTree, AliESDEvent* esd)
 {
   // fill energies and number of participants to the ESD
 
-  if(fIsCalibrationMB==kTRUE) WritePbPbRecoParamInOCDB();
-  
   AliZDCReco reco;
   AliZDCReco* preco = &reco;
   clustersTree->SetBranchAddress("ZDC", &preco);
@@ -1166,6 +1217,13 @@ void AliZDCReconstructor::FillZDCintoESD(TTree *clustersTree, AliESDEvent* esd)
              reco.GetZEM2HRsignal(), reco.GetZN2HREnergy(), reco.GetZP2HREnergy(), 
              nPart, nPartA, nPartC, b, bA, bC, recoFlag);
   
+  // Writing ZDC scaler for cross section calculation
+  // ONLY IF the scaler has been read during the event
+  if(reco.IsScalerOn()==kTRUE){
+    UInt_t counts[32];
+    for(Int_t jk=0; jk<32; jk++) counts[jk] = reco.GetZDCScaler(jk);
+    esd->SetZDCScaler(counts);
+  }
 }
 
 //_____________________________________________________________________________
@@ -1270,20 +1328,3 @@ AliZDCRecoParamPbPb* AliZDCReconstructor::GetPbPbRecoParamFromOCDB() const
   return param;
 
 }
-
-//_____________________________________________________________________________
-void AliZDCReconstructor::WritePbPbRecoParamInOCDB() const
-{
-
-  // Writing Pb-Pb reconstruction parameters from OCDB
-
-  AliCDBManager *man = AliCDBManager::Instance();
-  AliCDBMetaData *md= new AliCDBMetaData();
-  md->SetResponsible("Chiara Oppedisano");
-  md->SetComment("ZDC Pb-Pb reconstruction parameters");
-  md->SetObjectClassName("AliZDCRecoParamPbPb");
-  AliCDBId id("ZDC/Calib/RecoParamPbPb",fNRun,AliCDBRunRange::Infinity());
-  man->Put(fRecoParam, id, md);
-
-}
-
index 351b01916d481b6c0b832d4117a43648a828d422..fd8b0f2b8e7c5300f978afb2859fc794c0a6e230 100644 (file)
@@ -49,7 +49,7 @@ public:
   Float_t GetBeamEnergy() {return fBeamEnergy;}
   
   static const AliZDCRecoParam* GetRecoParam() {return dynamic_cast<const AliZDCRecoParam*>(AliReconstructor::GetRecoParam(9));}
-
+    
   void  SetPedSubMode(Int_t pedsubMode) {fPedSubMode=pedsubMode;}
   Int_t GetPedSubMode() {return fPedSubMode;}
   
@@ -64,8 +64,6 @@ public:
   AliZDCRecoParampp   *GetppRecoParamFromOCDB() const;  
   AliZDCRecoParamPbPb *GetPbPbRecoParamFromOCDB() const;  
   
-  void WritePbPbRecoParamInOCDB() const;
-
 private:
   AliZDCReconstructor(const AliZDCReconstructor&); //Not implemented
   AliZDCReconstructor& operator =(const AliZDCReconstructor&); //Not implemented
@@ -73,16 +71,17 @@ private:
   void   ReconstructEventpp(TTree *clustersTree, 
            Float_t* ZN1ADCCorr, Float_t* ZP1ADCCorr, Float_t* ZN2ADCCorr, Float_t* ZP2ADCCorr,
            Float_t* ZEM1ADCCorr, Float_t* ZEM2ADCCorr, Float_t* PMRef1, Float_t* PMRef2,
-           Bool_t channelsOff, Bool_t chUnderflow, Bool_t chOverflow) const;
+           Bool_t isScalerOn, UInt_t* scaler, 
+           Int_t* evQualityBlock, Int_t* triggerBlock, Int_t* chBlock, UInt_t puBits) const;
   void   ReconstructEventPbPb(TTree *clustersTree, 
            Float_t* ZN1ADCCorr, Float_t* ZP1ADCCorr, Float_t* ZN2ADCCorr, Float_t* ZP2ADCCorr,
            Float_t* ZEM1ADCCorr, Float_t* ZEM2ADCCorr, Float_t* PMRef1, Float_t* PMRef2,
-           Bool_t channelsOff, Bool_t chUnderflow, Bool_t chOverflow) const;
+           Bool_t isScalerOn, UInt_t* scaler, 
+           Int_t* evQualityBlock, Int_t* triggerBlock, Int_t* chBlock, UInt_t puBits) const;
   void   BuildRecoParam(Float_t ZDCC, Float_t ZDCA, Float_t ZEM) const;
   
   void   FillZDCintoESD(TTree *clustersTree, AliESDEvent*esd) const;
 
-
   static AliZDCRecoParam *fRecoParam; // reconstruction parameters
 
   AliZDCPedestals  *fPedData;      //! pedestal calibration data