// //
///////////////////////////////////////////////////////////////////////////////
+#include <TFile.h>
+#include <TTree.h>
+#include <TH2F.h>
+#include <TH1D.h>
-//#include <TF1.h>
#include "AliZDCRecoParam.h"
#include "AliZDCRecoParamPbPb.h"
//_____________________________________________________________________________
AliZDCRecoParamPbPb::AliZDCRecoParamPbPb() :
AliZDCRecoParam(),
- fZNCen(0),
- fZNPer(0),
- fZPCen(0),
- fZPPer(0),
- fZDCCen(0),
- fZDCPer(0),
- fbCen(0),
- fbPer(0),
- fZEMn(0),
- fZEMp(0),
- fZEMsp(0),
- fZEMb(0),
- fZEMEndValue(0),
- fZEMCutFraction(0),
- fDZEMSup(0),
- fDZEMInf(0),
- fEZN1MaxValue(0),
- fEZP1MaxValue(0),
- fEZDC1MaxValue(0),
- fEZN2MaxValue(0),
- fEZP2MaxValue(0),
- fEZDC2MaxValue(0)
+ fhNpartDist(0x0),
+ fhbDist(0x0),
+ fClkCenter(0)
{
//
//Default constructor
}
//_____________________________________________________________________________
-AliZDCRecoParamPbPb::~AliZDCRecoParamPbPb()
+AliZDCRecoParamPbPb::AliZDCRecoParamPbPb(TH1D *hNpart, TH1D *hb, Float_t clkCent) :
+ AliZDCRecoParam(),
+ fhNpartDist(hNpart),
+ fhbDist(hb),
+ fClkCenter(clkCent)
{
-// destructor
-
- delete fZNCen;
- delete fZNPer;
- delete fZPCen;
- delete fZPPer;
- delete fZDCCen;
- delete fZDCPer;
- delete fbCen;
- delete fbPer;
- delete fZEMn;
- delete fZEMp;
- delete fZEMsp;
- delete fZEMb;
+ //
+ //Standard constructor
+}
+//______________________________________________________________________________
+AliZDCRecoParamPbPb::AliZDCRecoParamPbPb(const AliZDCRecoParamPbPb &oldrecopar) :
+ AliZDCRecoParam(),
+ fhNpartDist(0x0),
+ fhbDist(0x0),
+ fClkCenter(oldrecopar.fClkCenter)
+{
+ //Copy constructor
+ if(oldrecopar.fhNpartDist){
+ fhNpartDist = new TH1D(*oldrecopar.fhNpartDist);
+ fhNpartDist->SetDirectory(0);
+ }
+ if(oldrecopar.fhbDist){
+ fhbDist = new TH1D(*oldrecopar.fhbDist);
+ fhbDist->SetDirectory(0);
+ }
}
//_____________________________________________________________________________
-AliZDCRecoParamPbPb *AliZDCRecoParamPbPb::GetPbPbRecoParam()
+AliZDCRecoParamPbPb &AliZDCRecoParamPbPb::operator =(const AliZDCRecoParamPbPb &recpar)
{
- //
- // Makes default reconstruction parameters for low flux environment
- //
- AliZDCRecoParamPbPb *param = new AliZDCRecoParamPbPb();
+ // Equal operator.
+ this->~AliZDCRecoParamPbPb();
+ new(this) AliZDCRecoParamPbPb(recpar);
+ return *this;
+
+}
- param->SetfZNCen("(-2.287920+sqrt(2.287920*2.287920-4*(-0.007629)*(11.921710-x)))/(2*(-0.007629))",0.,164.);
- param->SetfZNPer("(-37.812280-sqrt(37.812280*37.812280-4*(-0.190932)*(-1709.249672-x)))/(2*(-0.190932))",0.,164.);
- param->SetfZPCen("(-1.321353+sqrt(1.321353*1.321353-4*(-0.007283)*(3.550697-x)))/(2*(-0.007283))",0.,60.);
- param->SetfZPPer("(-42.643308-sqrt(42.643308*42.643308-4*(-0.310786)*(-1402.945615-x)))/(2*(-0.310786))",0.,60.);
- param->SetfZDCCen("(-1.934991+sqrt(1.934991*1.934991-4*(-0.004080)*(15.111124-x)))/(2*(-0.004080))",0.,225.);
- param->SetfZDCPer("(-34.380639-sqrt(34.380639*34.380639-4*(-0.104251)*(-2612.189017-x)))/(2*(-0.104251))",0.,225.);
- param->SetfbCen("-0.056923+0.079703*x-0.0004301*x*x+0.000001366*x*x*x",0.,220.);
- param->SetfbPer("17.943998-0.046846*x+0.000074*x*x",0.,220.);
- param->SetfZEMn("121.7-0.1934*x+0.00007565*x*x",0.,1200.);
- param->SetfZEMp("80.05-0.1315*x+0.00005327*x*x",0.,1200.);
- param->SetfZEMsp("201.7-0.325*x+0.0001292*x*x",0.,1200.);
- param->SetfZEMb("13.83-0.02851*x+5.101e-5*x*x-7.305e-8*x*x*x+5.101e-11*x*x*x*x-1.25e-14*x*x*x*x*x",0.,1200.);
+//_____________________________________________________________________________
+AliZDCRecoParamPbPb::~AliZDCRecoParamPbPb()
+{
+ // destructor
+
+ if(fhNpartDist) delete fhNpartDist;
+ if(fhbDist) delete fhbDist;
+}
+
+//_____________________________________________________________________________
+void AliZDCRecoParamPbPb::SetGlauberMCDist(Float_t beamEnergy)
+{
+ // Setting Glauber MC distributions
+ // from histos file stored in $ALICE_ROOT/ZDC
+ TH1::AddDirectory(0);
+ TH2::AddDirectory(0);
+
+ TFile *fileGlauberMC = TFile::Open("$ALICE_ROOT/ZDC/GlauberMCDist.root");
+ if(!fileGlauberMC) {
+ AliError((" Opening file $ALICE_ROOT/ZDC/GlauberMCDist.root failed\n"));
+ return;
+ }
- param->SetZEMEndValue(1200.);
- param->SetZEMCutFraction(0.1);
- param->SetDZEMSup(0.04);
- param->SetDZEMInf(0.05);
- param->SetEZN1MaxValue(161.);
- param->SetEZP1MaxValue(59.);
- param->SetEZDC1MaxValue(220.);
- param->SetEZN2MaxValue(161.);
- param->SetEZP2MaxValue(59.);
- param->SetEZDC2MaxValue(161.);
+ Float_t sqrtS = 2*beamEnergy;
+ //
+ if(TMath::Abs(sqrtS-5500) < 100.){
+ AliDebug(2, " ZDC -> Looking for energy5500 in file $ALICE_ROOT/ZDC/GlauberMCDist.root");
+ fileGlauberMC->cd("energy5500");
+ fileGlauberMC->GetObject("energy5500/hbGlauber;1", fhbDist);
+ if(!fhbDist) AliError(" PROBLEM!!! Can't get Glauber MC b distribution from file GlauberMCDist.root\n");
+ fileGlauberMC->GetObject("energy5500/hNpartGlauber;1", fhNpartDist);
+ if(!fhNpartDist) AliError(" PROBLEM!!! Can't get Glauber MC Npart distribution from file GlauberMCDist.root\n");
+ }
+ else if(TMath::Abs(sqrtS-2760) < 100.){
+ AliDebug(2, " ZDC -> Looking for energy2760 in file $ALICE_ROOT/ZDC/GlauberMCDist.root");
+ fileGlauberMC->cd("energy2760");
+ fileGlauberMC->GetObject("energy2760/hbGlauber;1", fhbDist);
+ if(!fhbDist) AliError(" PROBLEM!!! Can't get Glauber MC b distribution from file GlauberMCDist.root\n");
+ fileGlauberMC->GetObject("energy2760/hNpartGlauber;1", fhNpartDist);
+ if(!fhNpartDist) AliError(" PROBLEM!!! Can't get Glauber MC Npart distribution from file GlauberMCDist.root\n");
+ }
+ else AliError(Form(" No AliZDCRecoParam provided for Pb-Pb @ sqrt(s) = %1.0f GeV\n", sqrtS));
//
- param->SetBeamEnergy(2.7);
+ fhNpartDist->SetDirectory(0);
+ fhbDist->SetDirectory(0);
- return param;
-
+ fileGlauberMC->Close();
}
//_____________________________________________________________________________
-void AliZDCRecoParamPbPb::PrintParameters() const
+AliZDCRecoParamPbPb *AliZDCRecoParamPbPb::GetHighFluxParam(Float_t beamEnergy)
{
+ // Create high flux reco parameter
+ TH1::AddDirectory(0);
+ TH2::AddDirectory(0);
+
+ TFile *fileGlauberMC = TFile::Open("$ALICE_ROOT/ZDC/GlauberMCDist.root");
+ if(!fileGlauberMC) {
+ printf(" Opening file $ALICE_ROOT/ZDC/GlauberMCDist.root failed\n");
+ return NULL;
+ }
+
+ Float_t sqrtS = 2*beamEnergy;
+
+ TH1D *hNpartDist=0x0, *hbDist=0x0;
+ if(TMath::Abs(sqrtS-5500)<100.){
+ fileGlauberMC->cd("energy5500");
+ fileGlauberMC->GetObject("energy5500/hNpartGlauber;1", hNpartDist);
+ if(!hNpartDist) printf(" AliZDCRecoParamPbPb::GetHighFluxParam() PROBLEM!!! Can't get Glauber MC Npart distribution from file GlauberMCDist.root\n");
+ fileGlauberMC->GetObject("energy5500/hbGlauber;1", hbDist);
+ if(!hbDist) printf(" AliZDCRecoParamPbPb::GetHighFluxParam() PROBLEM!!! Can't get Glauber MC b distribution from file GlauberMCDist.root\n");
+ }
+ else if(TMath::Abs(sqrtS-2760)<100.){
+ fileGlauberMC->cd("energy2760");
+ fileGlauberMC->GetObject("energy2760/hNpartGlauber;1", hNpartDist);
+ if(!hNpartDist) printf(" PROBLEM!!! Can't get Glauber MC Npart distribution from file GlauberMCDist.root\n");
+ fileGlauberMC->GetObject("energy2760/hbGlauber;1", hbDist);
+ if(!hbDist) printf(" AliZDCRecoParamPbPb::GetHighFluxParam() PROBLEM!!! Can't get Glauber MC b distribution from file GlauberMCDist.root\n");
+ }
+ else printf(" No AliZDCRecoParam provided for Pb-Pb @ sqrt(s) = %1.0f GeV\n", sqrtS);
//
- // print reconstruction parameters
+ if(hNpartDist) hNpartDist->SetDirectory(0);
+ if(hbDist) hbDist->SetDirectory(0);
+
+ AliZDCRecoParamPbPb* zdcRecoParam = new AliZDCRecoParamPbPb(hNpartDist, hbDist, 0.1);
//
- printf("\n\n\t AliZDCRecoParamPbPb -> parameters set for reconstruction\n");
- printf("\t Beam energy (for Pb-Pb): %1.2f TeV\n",fBeamEnergy);
- printf("\t Functions for reconstruction of centrality varibles (Pb-Pb):\n");
-
- fZNCen->Print("");
- fZNPer->Print("");
- fZPCen->Print("");
- fZPPer->Print("");
- fZDCCen->Print("");
- fZDCPer->Print("");
- fbCen->Print("");
- fbPer->Print("");
- fZEMn->Print("");
- fZEMp->Print("");
- fZEMsp->Print("");
- fZEMb->Print("");
+ fileGlauberMC->Close();
+
+ return zdcRecoParam;
- printf("\n ####### Parameters from EZDC vs. ZEM correlation ####### \n");
- printf("\tZEMEndPoint = %1.2f, ZEMCutFraction = %1.2f \n"
- " DZEMInf = %1.2f, DZEMSup = %1.2f\n",
- fZEMEndValue, fZEMCutFraction, fDZEMInf, fDZEMSup);
- printf("\n ####### Parameters from EZDC vs. Nspec correlation ####### \n");
- printf("\tEZN1MaxValue = %1.2f, EZP1MaxValue = %1.2f, EZDC1MaxValue = %1.2f \n"
- "\tEZN2MaxValue = %1.2f, EZP2MaxValue = %1.2f, EZDC2MaxValue = %1.2f \n\n",
- fEZN1MaxValue, fEZP1MaxValue, fEZDC1MaxValue,
- fEZN2MaxValue, fEZP2MaxValue, fEZDC2MaxValue);
}