ROOT logo
/**************************************************************************
 * Copyright(c) 2007-2009, ALICE Experiment at CERN, All rights reserved. *
 *                                                                        *
 * Author: The ALICE Off-line Project.                                    *
 * Contributors are mentioned in the code where appropriate.              *
 *                                                                        *
 * Permission to use, copy, modify and distribute this software and its   *
 * documentation strictly for non-commercial purposes is hereby granted   *
 * without fee, provided that the above copyright notice appears in all   *
 * copies and that both the copyright notice and this permission notice   *
 * appear in the supporting documentation. The authors make no claims     *
 * about the suitability of this software for any purpose. It is          *
 * provided "as is" without express or implied warranty.                  *
 **************************************************************************/

///////////////////////////////////////////////////////////////////////////////
//                                                                           //
// Class with ZDC reconstruction parameters                                  //
// Origin: Chiara.Oppedisano@to.infn.it                                      //
//                                                                           //
///////////////////////////////////////////////////////////////////////////////

#include <TFile.h>
#include <TTree.h>
#include <TH2F.h>
#include <TH1D.h>

#include "AliZDCRecoParam.h"
#include "AliZDCRecoParamPbPb.h"

ClassImp(AliZDCRecoParamPbPb)

//_____________________________________________________________________________
AliZDCRecoParamPbPb::AliZDCRecoParamPbPb() :
  AliZDCRecoParam(),
  fhNpartDist(0x0),
  fhbDist(0x0),
  fClkCenter(0)
{
  //
  //Default constructor
}
//_____________________________________________________________________________
AliZDCRecoParamPbPb::AliZDCRecoParamPbPb(TH1D *hNpart, TH1D *hb, Float_t clkCent) :
  AliZDCRecoParam(),
  fhNpartDist(hNpart),
  fhbDist(hb),
  fClkCenter(clkCent)
{
  //
  //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::operator =(const AliZDCRecoParamPbPb &recpar)
{
  // Equal operator.
  this->~AliZDCRecoParamPbPb();
  new(this) AliZDCRecoParamPbPb(recpar);
  return *this;  
 
}
 
//_____________________________________________________________________________
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;
  }
  
  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));
  //
  fhNpartDist->SetDirectory(0);
  fhbDist->SetDirectory(0);
  
  fileGlauberMC->Close();
}

//_____________________________________________________________________________
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);
  //
  if(hNpartDist) hNpartDist->SetDirectory(0);
  if(hbDist) hbDist->SetDirectory(0);

  AliZDCRecoParamPbPb* zdcRecoParam = new AliZDCRecoParamPbPb(hNpartDist, hbDist, 0.1);
  //
  fileGlauberMC->Close();
	      
  return zdcRecoParam;
  
}
 AliZDCRecoParamPbPb.cxx:1
 AliZDCRecoParamPbPb.cxx:2
 AliZDCRecoParamPbPb.cxx:3
 AliZDCRecoParamPbPb.cxx:4
 AliZDCRecoParamPbPb.cxx:5
 AliZDCRecoParamPbPb.cxx:6
 AliZDCRecoParamPbPb.cxx:7
 AliZDCRecoParamPbPb.cxx:8
 AliZDCRecoParamPbPb.cxx:9
 AliZDCRecoParamPbPb.cxx:10
 AliZDCRecoParamPbPb.cxx:11
 AliZDCRecoParamPbPb.cxx:12
 AliZDCRecoParamPbPb.cxx:13
 AliZDCRecoParamPbPb.cxx:14
 AliZDCRecoParamPbPb.cxx:15
 AliZDCRecoParamPbPb.cxx:16
 AliZDCRecoParamPbPb.cxx:17
 AliZDCRecoParamPbPb.cxx:18
 AliZDCRecoParamPbPb.cxx:19
 AliZDCRecoParamPbPb.cxx:20
 AliZDCRecoParamPbPb.cxx:21
 AliZDCRecoParamPbPb.cxx:22
 AliZDCRecoParamPbPb.cxx:23
 AliZDCRecoParamPbPb.cxx:24
 AliZDCRecoParamPbPb.cxx:25
 AliZDCRecoParamPbPb.cxx:26
 AliZDCRecoParamPbPb.cxx:27
 AliZDCRecoParamPbPb.cxx:28
 AliZDCRecoParamPbPb.cxx:29
 AliZDCRecoParamPbPb.cxx:30
 AliZDCRecoParamPbPb.cxx:31
 AliZDCRecoParamPbPb.cxx:32
 AliZDCRecoParamPbPb.cxx:33
 AliZDCRecoParamPbPb.cxx:34
 AliZDCRecoParamPbPb.cxx:35
 AliZDCRecoParamPbPb.cxx:36
 AliZDCRecoParamPbPb.cxx:37
 AliZDCRecoParamPbPb.cxx:38
 AliZDCRecoParamPbPb.cxx:39
 AliZDCRecoParamPbPb.cxx:40
 AliZDCRecoParamPbPb.cxx:41
 AliZDCRecoParamPbPb.cxx:42
 AliZDCRecoParamPbPb.cxx:43
 AliZDCRecoParamPbPb.cxx:44
 AliZDCRecoParamPbPb.cxx:45
 AliZDCRecoParamPbPb.cxx:46
 AliZDCRecoParamPbPb.cxx:47
 AliZDCRecoParamPbPb.cxx:48
 AliZDCRecoParamPbPb.cxx:49
 AliZDCRecoParamPbPb.cxx:50
 AliZDCRecoParamPbPb.cxx:51
 AliZDCRecoParamPbPb.cxx:52
 AliZDCRecoParamPbPb.cxx:53
 AliZDCRecoParamPbPb.cxx:54
 AliZDCRecoParamPbPb.cxx:55
 AliZDCRecoParamPbPb.cxx:56
 AliZDCRecoParamPbPb.cxx:57
 AliZDCRecoParamPbPb.cxx:58
 AliZDCRecoParamPbPb.cxx:59
 AliZDCRecoParamPbPb.cxx:60
 AliZDCRecoParamPbPb.cxx:61
 AliZDCRecoParamPbPb.cxx:62
 AliZDCRecoParamPbPb.cxx:63
 AliZDCRecoParamPbPb.cxx:64
 AliZDCRecoParamPbPb.cxx:65
 AliZDCRecoParamPbPb.cxx:66
 AliZDCRecoParamPbPb.cxx:67
 AliZDCRecoParamPbPb.cxx:68
 AliZDCRecoParamPbPb.cxx:69
 AliZDCRecoParamPbPb.cxx:70
 AliZDCRecoParamPbPb.cxx:71
 AliZDCRecoParamPbPb.cxx:72
 AliZDCRecoParamPbPb.cxx:73
 AliZDCRecoParamPbPb.cxx:74
 AliZDCRecoParamPbPb.cxx:75
 AliZDCRecoParamPbPb.cxx:76
 AliZDCRecoParamPbPb.cxx:77
 AliZDCRecoParamPbPb.cxx:78
 AliZDCRecoParamPbPb.cxx:79
 AliZDCRecoParamPbPb.cxx:80
 AliZDCRecoParamPbPb.cxx:81
 AliZDCRecoParamPbPb.cxx:82
 AliZDCRecoParamPbPb.cxx:83
 AliZDCRecoParamPbPb.cxx:84
 AliZDCRecoParamPbPb.cxx:85
 AliZDCRecoParamPbPb.cxx:86
 AliZDCRecoParamPbPb.cxx:87
 AliZDCRecoParamPbPb.cxx:88
 AliZDCRecoParamPbPb.cxx:89
 AliZDCRecoParamPbPb.cxx:90
 AliZDCRecoParamPbPb.cxx:91
 AliZDCRecoParamPbPb.cxx:92
 AliZDCRecoParamPbPb.cxx:93
 AliZDCRecoParamPbPb.cxx:94
 AliZDCRecoParamPbPb.cxx:95
 AliZDCRecoParamPbPb.cxx:96
 AliZDCRecoParamPbPb.cxx:97
 AliZDCRecoParamPbPb.cxx:98
 AliZDCRecoParamPbPb.cxx:99
 AliZDCRecoParamPbPb.cxx:100
 AliZDCRecoParamPbPb.cxx:101
 AliZDCRecoParamPbPb.cxx:102
 AliZDCRecoParamPbPb.cxx:103
 AliZDCRecoParamPbPb.cxx:104
 AliZDCRecoParamPbPb.cxx:105
 AliZDCRecoParamPbPb.cxx:106
 AliZDCRecoParamPbPb.cxx:107
 AliZDCRecoParamPbPb.cxx:108
 AliZDCRecoParamPbPb.cxx:109
 AliZDCRecoParamPbPb.cxx:110
 AliZDCRecoParamPbPb.cxx:111
 AliZDCRecoParamPbPb.cxx:112
 AliZDCRecoParamPbPb.cxx:113
 AliZDCRecoParamPbPb.cxx:114
 AliZDCRecoParamPbPb.cxx:115
 AliZDCRecoParamPbPb.cxx:116
 AliZDCRecoParamPbPb.cxx:117
 AliZDCRecoParamPbPb.cxx:118
 AliZDCRecoParamPbPb.cxx:119
 AliZDCRecoParamPbPb.cxx:120
 AliZDCRecoParamPbPb.cxx:121
 AliZDCRecoParamPbPb.cxx:122
 AliZDCRecoParamPbPb.cxx:123
 AliZDCRecoParamPbPb.cxx:124
 AliZDCRecoParamPbPb.cxx:125
 AliZDCRecoParamPbPb.cxx:126
 AliZDCRecoParamPbPb.cxx:127
 AliZDCRecoParamPbPb.cxx:128
 AliZDCRecoParamPbPb.cxx:129
 AliZDCRecoParamPbPb.cxx:130
 AliZDCRecoParamPbPb.cxx:131
 AliZDCRecoParamPbPb.cxx:132
 AliZDCRecoParamPbPb.cxx:133
 AliZDCRecoParamPbPb.cxx:134
 AliZDCRecoParamPbPb.cxx:135
 AliZDCRecoParamPbPb.cxx:136
 AliZDCRecoParamPbPb.cxx:137
 AliZDCRecoParamPbPb.cxx:138
 AliZDCRecoParamPbPb.cxx:139
 AliZDCRecoParamPbPb.cxx:140
 AliZDCRecoParamPbPb.cxx:141
 AliZDCRecoParamPbPb.cxx:142
 AliZDCRecoParamPbPb.cxx:143
 AliZDCRecoParamPbPb.cxx:144
 AliZDCRecoParamPbPb.cxx:145
 AliZDCRecoParamPbPb.cxx:146
 AliZDCRecoParamPbPb.cxx:147
 AliZDCRecoParamPbPb.cxx:148
 AliZDCRecoParamPbPb.cxx:149
 AliZDCRecoParamPbPb.cxx:150
 AliZDCRecoParamPbPb.cxx:151
 AliZDCRecoParamPbPb.cxx:152
 AliZDCRecoParamPbPb.cxx:153
 AliZDCRecoParamPbPb.cxx:154
 AliZDCRecoParamPbPb.cxx:155
 AliZDCRecoParamPbPb.cxx:156
 AliZDCRecoParamPbPb.cxx:157
 AliZDCRecoParamPbPb.cxx:158
 AliZDCRecoParamPbPb.cxx:159
 AliZDCRecoParamPbPb.cxx:160
 AliZDCRecoParamPbPb.cxx:161
 AliZDCRecoParamPbPb.cxx:162
 AliZDCRecoParamPbPb.cxx:163
 AliZDCRecoParamPbPb.cxx:164
 AliZDCRecoParamPbPb.cxx:165
 AliZDCRecoParamPbPb.cxx:166
 AliZDCRecoParamPbPb.cxx:167
 AliZDCRecoParamPbPb.cxx:168
 AliZDCRecoParamPbPb.cxx:169
 AliZDCRecoParamPbPb.cxx:170
 AliZDCRecoParamPbPb.cxx:171
 AliZDCRecoParamPbPb.cxx:172