]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - ZDC/AliZDCRecoParamPbPb.cxx
Coverity 21238
[u/mrichter/AliRoot.git] / ZDC / AliZDCRecoParamPbPb.cxx
index e7cbb9979dc16942881e2a2ff34f7b105e131792..da718d0199de3de971410d10c487de0b34a802ee 100644 (file)
 //                                                                           //
 ///////////////////////////////////////////////////////////////////////////////
 
+#include <TFile.h>
+#include <TTree.h>
+#include <TH2F.h>
+#include <TH1D.h>
 
-//#include <TF1.h>
 #include "AliZDCRecoParam.h"
 #include "AliZDCRecoParamPbPb.h"
 
@@ -30,120 +33,140 @@ ClassImp(AliZDCRecoParamPbPb)
 //_____________________________________________________________________________
 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);
 }