#include <TMap.h>
#include "AliRawReader.h"
-#include "AliGRPObject.h"
#include "AliESDEvent.h"
#include "AliESDZDC.h"
#include "AliZDCDigit.h"
fSignalThreshold(7)
{
// **** Default constructor
-
}
// Getting beam type and beam energy from GRP calibration object
TString runType = GetRunInfo()->GetRunType();
-
if((runType.CompareTo("CALIBRATION_MB")) == 0){
fIsCalibrationMB = kTRUE;
}
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.;
}
// 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
}//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);
}
//_____________________________________________________________________________
}
}
- // 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++){
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);
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){
/*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){
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 ******************
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 ---------------------------------------------
nGenSpec, nGenSpecLeft, nGenSpecRight,
nPart, nPartTotLeft, nPartTotRight,
impPar, impPar1, impPar2,
- recoFlag);
+ recoFlag, isScalerOn, scaler);
const Int_t kBufferSize = 4000;
clustersTree->Branch("ZDC", "AliZDCReco", &reco, kBufferSize);
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 ---------------------------------------------
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);
{
// fill energies and number of participants to the ESD
- if(fIsCalibrationMB==kTRUE) WritePbPbRecoParamInOCDB();
-
AliZDCReco reco;
AliZDCReco* preco = &reco;
clustersTree->SetBranchAddress("ZDC", &preco);
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);
+ }
}
//_____________________________________________________________________________
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);
-
-}
-