ROOT logo

#ifndef ALICOLLISIONNORMALIZATION_H
#define ALICOLLISIONNORMALIZATION_H

/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 * See cxx source for full Copyright notice                               */

//-------------------------------------------------------------------------
//                      Implementation of   Class AliCollisionNormalization
//
//  This class is used to store the vertex ditributions in the data
//  and in Monte Carlo, needed to compute the real number of
//  collisions a given sample is corresponding to.
//  The strategy matches what described in CERN-THESIS-2009-033 p 119.
//
//    Author:     Michele Floris, CERN
//-------------------------------------------------------------------------

#include "TH2F.h"

class TH1F;
class TH1I;
class AliMCEvent;

class AliCollisionNormalization : public TObject

{


public:
  enum { kNevBin0, kNevCollisions, kNevNbin };
  typedef enum { kProcSD, kProcDD, kProcND, kProcUnknown, kNProcs } ProcType_t; 
  AliCollisionNormalization();
  AliCollisionNormalization(Int_t nbinz, Float_t minz, Float_t maxz);
  AliCollisionNormalization(const char * dataFile, const char * dataListName, 
			    const char * mcFile,   const char * mcListName,
			    const char * eventStatFile);

  ~AliCollisionNormalization();
  
  void SetMC(Bool_t flag = kTRUE) { fIsMC = flag;}

  void BookAllHistos();
  TH1 * BookVzHisto(const char * name , const char * title, Bool_t vzOnly=kFALSE);

  void FillVzMCGen(Float_t vz, Int_t ntrk, AliMCEvent * mcEvt);      
  void FillVzMCRec(Float_t vz, Int_t ntrk, AliMCEvent * mcEvt);      
  void FillVzMCTrg(Float_t vz, Int_t ntrk, AliMCEvent * mcEvt);      
  void FillVzData (Float_t vz, Int_t ntrk)      {fHistVzData       ->Fill(vz,ntrk);}

  TH2F *   GetVzMCGen       (Int_t procType) ;
  TH2F *   GetVzMCRec       (Int_t procType) ;
  TH2F *   GetVzMCTrg       (Int_t procType) ;
  TH2F *   GetVzData        () { return fHistVzData       ; }
  TH1F *   GetStatBin0      () { return fHistStatBin0     ; }
  TH1F *   GetStat          () { return fHistStat         ; }
  TH1F *   GetHistProcTypes () { return fHistProcTypes    ; }
   

  Int_t GetProcessType(const AliMCEvent * mcEvt) ;
  Double_t GetProcessWeight(Int_t proctype);

  void SetReferencsXS(Int_t ref) { fReferenceXS = ref;}
  
  Double_t ComputeNint();
  void SetZRange(Float_t zrange) { fZRange = zrange ;}

  void SetReferenceXS(Int_t ref) { fReferenceXS = ref ;}
  void GetRelativeFractions(Int_t origin, Float_t& ref_SD, Float_t& ref_DD, Float_t& ref_ND, Float_t& error_SD, Float_t& error_DD, Float_t& error_ND);

  void SetVerbose(Int_t lev) { fVerbose = lev ;}

  void SetEnergy(Float_t en) { fEnergy = en; }

  Long64_t Merge(TCollection* list);

  Double_t GetInputEvents() const {return fInputEvents;}   // number of Input Events 
  Double_t GetPhysSelEvents() const {return fPhysSelEvents;} // number of  Events after Physics Selection 
  Double_t GetBgEvents() const {return fBgEvents;}      // number of background events 

  Double_t GetAllEvents() const {return fAllEvents;}             // number of corrected events 
  Double_t GetAllEventsZRange() const {return fAllEventsZRange;}       // number of corrected events in z range
  Double_t GetAllEventsZRangeMult1() const{return fAllEventsZRangeMult1;}  // number of corrected events with multiplicity larger 1 in z range
  Double_t GetAllEventsInBin0ZRange() const {return fAllEventsInBin0ZRange;} // number of corrected events in bin0 in z range
  Double_t GetTrigEffBin0() const {return fTrigEffBin0;}                // trigger efficiency


protected:

  Int_t   fNbinsVz; // number of z bins in the vz histo
  Float_t fMinVz  ; // lowest Z
  Float_t fMaxVz  ; // highest Z

  Float_t fZRange; // max |Z| vertex to be considered

  Bool_t fIsMC; // True if processing MC
  
  Int_t fReferenceXS;                // index of reference cross section to be used to rescale process types in the calculation of the efficiency

  Int_t fVerbose;                    // Determines the ammount of printout

  Float_t fEnergy;                     // Beam energy in GeV. Defaults to 900.

  TH2F * fHistVzMCGen[kNProcs]    ;    // Vz distribution of generated events vs rec multiplicity
  TH2F * fHistVzMCRec[kNProcs]    ; 	// Vz distribution of reconstructed events vs rec multiplicity
  TH2F * fHistVzMCTrg[kNProcs]    ; 	// Vz distribution of triggered events vs rec multiplicity
  TH2F * fHistVzData              ; 	// Vz distribution of triggered events vs rec multiplicity    
  TH1F * fHistProcTypes           ;    // Number of evts for different Process types 

  TH1F * fHistStatBin0     ; // event stat histogram, created by physiscs selection; used in ComputeNint;
  TH1F * fHistStat         ; // event stat histogram, created by physiscs selection; used in ComputeNint;

  Double_t fInputEvents;   // number of Input Events 
  Double_t fPhysSelEvents; // number of  Events after Physics Selection 
  Double_t fBgEvents;            // number of background events 

  Double_t fAllEvents;     // number of corrected events 
  Double_t fAllEventsZRange;  // number of corrected events in z range
  Double_t fAllEventsZRangeMult1; // number of corrected events with multiplicity larger 1 in z range
  Double_t fAllEventsInBin0ZRange; // number of corrected events in bin0 in z range
  Double_t fTrigEffBin0;  // trigger efficiency in Bin0

  static const char * fgkProcLabel[] ; // labels of the different process types
  
  ClassDef(AliCollisionNormalization, 4);
    
private:
  AliCollisionNormalization(const AliCollisionNormalization&);
  AliCollisionNormalization& operator=(const AliCollisionNormalization&);
};

#endif
 AliCollisionNormalization.h:1
 AliCollisionNormalization.h:2
 AliCollisionNormalization.h:3
 AliCollisionNormalization.h:4
 AliCollisionNormalization.h:5
 AliCollisionNormalization.h:6
 AliCollisionNormalization.h:7
 AliCollisionNormalization.h:8
 AliCollisionNormalization.h:9
 AliCollisionNormalization.h:10
 AliCollisionNormalization.h:11
 AliCollisionNormalization.h:12
 AliCollisionNormalization.h:13
 AliCollisionNormalization.h:14
 AliCollisionNormalization.h:15
 AliCollisionNormalization.h:16
 AliCollisionNormalization.h:17
 AliCollisionNormalization.h:18
 AliCollisionNormalization.h:19
 AliCollisionNormalization.h:20
 AliCollisionNormalization.h:21
 AliCollisionNormalization.h:22
 AliCollisionNormalization.h:23
 AliCollisionNormalization.h:24
 AliCollisionNormalization.h:25
 AliCollisionNormalization.h:26
 AliCollisionNormalization.h:27
 AliCollisionNormalization.h:28
 AliCollisionNormalization.h:29
 AliCollisionNormalization.h:30
 AliCollisionNormalization.h:31
 AliCollisionNormalization.h:32
 AliCollisionNormalization.h:33
 AliCollisionNormalization.h:34
 AliCollisionNormalization.h:35
 AliCollisionNormalization.h:36
 AliCollisionNormalization.h:37
 AliCollisionNormalization.h:38
 AliCollisionNormalization.h:39
 AliCollisionNormalization.h:40
 AliCollisionNormalization.h:41
 AliCollisionNormalization.h:42
 AliCollisionNormalization.h:43
 AliCollisionNormalization.h:44
 AliCollisionNormalization.h:45
 AliCollisionNormalization.h:46
 AliCollisionNormalization.h:47
 AliCollisionNormalization.h:48
 AliCollisionNormalization.h:49
 AliCollisionNormalization.h:50
 AliCollisionNormalization.h:51
 AliCollisionNormalization.h:52
 AliCollisionNormalization.h:53
 AliCollisionNormalization.h:54
 AliCollisionNormalization.h:55
 AliCollisionNormalization.h:56
 AliCollisionNormalization.h:57
 AliCollisionNormalization.h:58
 AliCollisionNormalization.h:59
 AliCollisionNormalization.h:60
 AliCollisionNormalization.h:61
 AliCollisionNormalization.h:62
 AliCollisionNormalization.h:63
 AliCollisionNormalization.h:64
 AliCollisionNormalization.h:65
 AliCollisionNormalization.h:66
 AliCollisionNormalization.h:67
 AliCollisionNormalization.h:68
 AliCollisionNormalization.h:69
 AliCollisionNormalization.h:70
 AliCollisionNormalization.h:71
 AliCollisionNormalization.h:72
 AliCollisionNormalization.h:73
 AliCollisionNormalization.h:74
 AliCollisionNormalization.h:75
 AliCollisionNormalization.h:76
 AliCollisionNormalization.h:77
 AliCollisionNormalization.h:78
 AliCollisionNormalization.h:79
 AliCollisionNormalization.h:80
 AliCollisionNormalization.h:81
 AliCollisionNormalization.h:82
 AliCollisionNormalization.h:83
 AliCollisionNormalization.h:84
 AliCollisionNormalization.h:85
 AliCollisionNormalization.h:86
 AliCollisionNormalization.h:87
 AliCollisionNormalization.h:88
 AliCollisionNormalization.h:89
 AliCollisionNormalization.h:90
 AliCollisionNormalization.h:91
 AliCollisionNormalization.h:92
 AliCollisionNormalization.h:93
 AliCollisionNormalization.h:94
 AliCollisionNormalization.h:95
 AliCollisionNormalization.h:96
 AliCollisionNormalization.h:97
 AliCollisionNormalization.h:98
 AliCollisionNormalization.h:99
 AliCollisionNormalization.h:100
 AliCollisionNormalization.h:101
 AliCollisionNormalization.h:102
 AliCollisionNormalization.h:103
 AliCollisionNormalization.h:104
 AliCollisionNormalization.h:105
 AliCollisionNormalization.h:106
 AliCollisionNormalization.h:107
 AliCollisionNormalization.h:108
 AliCollisionNormalization.h:109
 AliCollisionNormalization.h:110
 AliCollisionNormalization.h:111
 AliCollisionNormalization.h:112
 AliCollisionNormalization.h:113
 AliCollisionNormalization.h:114
 AliCollisionNormalization.h:115
 AliCollisionNormalization.h:116
 AliCollisionNormalization.h:117
 AliCollisionNormalization.h:118
 AliCollisionNormalization.h:119
 AliCollisionNormalization.h:120
 AliCollisionNormalization.h:121
 AliCollisionNormalization.h:122
 AliCollisionNormalization.h:123
 AliCollisionNormalization.h:124
 AliCollisionNormalization.h:125
 AliCollisionNormalization.h:126
 AliCollisionNormalization.h:127
 AliCollisionNormalization.h:128
 AliCollisionNormalization.h:129
 AliCollisionNormalization.h:130
 AliCollisionNormalization.h:131
 AliCollisionNormalization.h:132