+ // --- Reconstruction parameters ------------------
+ if(!fRecoParam) fRecoParam = (AliZDCRecoParampp*) AliZDCRecoParampp::GetppRecoParam();
+
+ // --- Number of detected spectator nucleons
+ // *** N.B. -> It works only in Pb-Pb
+ Int_t nDetSpecNLeft, nDetSpecPLeft, nDetSpecNRight, nDetSpecPRight;
+ Float_t beamE = fRecoParam->GetBeamEnergy();
+ nDetSpecNLeft = (Int_t) (calibSumZN1[0]/beamE);
+ nDetSpecPLeft = (Int_t) (calibSumZP1[0]/beamE);
+ nDetSpecNRight = (Int_t) (calibSumZN2[0]/beamE);
+ nDetSpecPRight = (Int_t) (calibSumZP2[0]/beamE);
+ /*printf("\n\t AliZDCReconstructor -> nDetSpecNLeft %d, nDetSpecPLeft %d,"
+ " nDetSpecNRight %d, nDetSpecPRight %d\n",nDetSpecNLeft, nDetSpecPLeft,
+ nDetSpecNRight, nDetSpecPRight);*/
+
+ // --- Number of generated spectator nucleons (from HIJING parameterization)
+ Int_t nGenSpecNLeft=0, nGenSpecPLeft=0, nGenSpecLeft=0;
+ Int_t nGenSpecNRight=0, nGenSpecPRight=0, nGenSpecRight=0;
+ Int_t nPartTotLeft=0, nPartTotRight=0;
+ Double_t impPar=0.;
+
+ // create the output tree
+ AliZDCReco reco(calibSumZN1, calibSumZP1, calibSumZN2, calibSumZP2,
+ calibTowZN1, calibTowZN2, calibTowZP1, calibTowZP2,
+ ZEM1ADCCorr, ZEM2ADCCorr, PMRef1, PMRef2,
+ nDetSpecNLeft, nDetSpecPLeft, nDetSpecNRight, nDetSpecPRight,
+ nGenSpecNLeft, nGenSpecPLeft, nGenSpecLeft, nGenSpecNRight,
+ nGenSpecPRight, nGenSpecRight, nPartTotLeft, nPartTotRight, impPar);
+
+ AliZDCReco* preco = &reco;
+ const Int_t kBufferSize = 4000;
+ clustersTree->Branch("ZDC", "AliZDCReco", &preco, kBufferSize);
+
+ // write the output tree
+ clustersTree->Fill();
+}
+
+//_____________________________________________________________________________
+void AliZDCReconstructor::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) const
+{
+ // ***** Reconstruct one event
+
+ // *** RECONSTRUCTION FROM "REAL" DATA