+ fESDZDC->SetZDC(reco.GetZN1HREnergy(), reco.GetZP1HREnergy(),
+ reco.GetZEM1HRsignal(), 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);
+ fESDZDC->SetZDCScaler(counts);
+ }
+
+ Int_t tdcValues[32][4] = {{0,}};
+ Float_t tdcCorrected[32][4] = {{9999.,}};
+ for(Int_t jk=0; jk<32; jk++){
+ for(Int_t lk=0; lk<4; lk++){
+ tdcValues[jk][lk] = reco.GetZDCTDCData(jk, lk);
+ //
+ if(jk==8 && TMath::Abs(tdcValues[jk][lk])>1e-09) fESDZDC->SetZEM1TDChit(kTRUE);
+ else if(jk==9 && TMath::Abs(tdcValues[jk][lk])>1e-09) fESDZDC->SetZEM2TDChit(kTRUE);
+ else if(jk==10 && TMath::Abs(tdcValues[jk][lk])>1e-09) fESDZDC->SetZNCTDChit(kTRUE);
+ else if(jk==11 && TMath::Abs(tdcValues[jk][lk])>1e-09) fESDZDC->SetZPCTDChit(kTRUE);
+ else if(jk==12 && TMath::Abs(tdcValues[jk][lk])>1e-09) fESDZDC->SetZNATDChit(kTRUE);
+ else if(jk==13 && TMath::Abs(tdcValues[jk][lk])>1e-09) fESDZDC->SetZPATDChit(kTRUE);
+ //Ch debug
+ //if((jk>=8 && jk<=13 && lk==0) || jk==15) printf(" *** ZDC: tdc%d = %d = %f ns \n",jk,tdcValues[jk][lk],0.025*tdcValues[jk][lk]);
+ }
+ }
+
+ // Writing TDC data into ZDC ESDs
+ // 4/2/2011 -> Subtracting L0 (tdcValues[15]) instead of ADC gate
+ // we try to keep the TDC oscillations as low as possible!
+ for(Int_t jk=0; jk<32; jk++){
+ for(Int_t lk=0; lk<4; lk++){
+ if(tdcValues[jk][lk]!=0.){
+ // Feb2013 _-> TDC correct entry is there ONLY IF tdc has a hit!
+ if(TMath::Abs(tdcValues[jk][lk])>1e-09){
+ tdcCorrected[jk][lk] = 0.025*(tdcValues[jk][lk]-tdcValues[15][0])+fMeanPhase;
+ // Sep 2011: TDC ch. from 8 to 13 centered around 0 using OCDB
+ if(jk>=8 && jk<=13) tdcCorrected[jk][lk] = tdcCorrected[jk][lk] - tdcOffset[jk-8];
+ //Ch. debug
+ //if(jk>=8 && jk<=13) printf(" *** tdcOffset%d %f tdcCorr%d %f \n",jk,tdcOffset[jk-8],tdcCorrected[jk][lk]);
+ }
+ }
+ }
+ }
+
+ fESDZDC->SetZDCTDCData(tdcValues);
+ fESDZDC->SetZDCTDCCorrected(tdcCorrected);
+ fESDZDC->AliESDZDC::SetBit(AliESDZDC::kCorrectedTDCFilled, reco.GetEnergyFlag());
+ fESDZDC->AliESDZDC::SetBit(AliESDZDC::kEnergyCalibratedSignal, kTRUE);
+
+ if(esd) esd->SetZDCData(fESDZDC);