]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWG3/vertexingHF/AliHFPtSpectrum.h
Adding Id to PWG3 classes for better tracking of the coverity defect fixes (Ivana)
[u/mrichter/AliRoot.git] / PWG3 / vertexingHF / AliHFPtSpectrum.h
1 #ifndef ALIHFPTSPECTRUM_H
2 #define ALIHFPTSPECTRUM_H
3
4 /* Copyright(c) 1998-2010, ALICE Experiment at CERN, All rights reserved. *
5  * See cxx source for full Copyright notice                               */
6
7 /* $Id$ */ 
8
9 //***********************************************************************
10 // Class AliHFPtSpectrum
11 // Base class for feed-down corrections on heavy-flavour decays
12 // computes the cross-section via one of the three implemented methods:
13 //   0) Consider no feed-down prediction 
14 //   1) Subtract the feed-down with the "fc" method 
15 //       Yield = Reco * fc;  where fc = 1 / ( 1 + (eff_b/eff_c)*(N_b/N_c) ) ;
16 //   2) Subtract the feed-down with the "Nb" method
17 //       Yield = Reco - Feed-down (exact formula on the function implementation)
18 //
19 //  (the corrected yields per bin are divided by the bin-width)
20 //
21 // Author: Z.Conesa, zconesa@in2p3.fr
22 //***********************************************************************
23
24 #include "TNamed.h"
25 #include "TMath.h"
26
27 class TH1;
28 class TGraphAsymmErrors;
29
30
31 class AliHFPtSpectrum: public TNamed
32 {
33
34  public:
35   
36   // Constructor
37   AliHFPtSpectrum(const char* name="AliHFPtSpectrum", const char* title="HF feed down correction class", Int_t option=1);
38   // Copy constructor
39   AliHFPtSpectrum(const AliHFPtSpectrum &rhs);
40   // Assignment operator
41   AliHFPtSpectrum& operator=(const AliHFPtSpectrum &source);
42   // Destructor
43   virtual ~AliHFPtSpectrum();
44
45   //
46   // Setters
47   //
48   // Set the theoretical direct & feeddown pt spectrum
49   void SetMCptSpectra(TH1D *hDirect, TH1D *hFeedDown);
50   // Set the theoretical feeddown pt spectrum
51   void SetFeedDownMCptSpectra(TH1D *hFeedDown);
52   // Set the theoretical direct & feeddown pt spectrum upper and lower bounds
53   void SetMCptDistributionsBounds(TH1D *hDirectMax, TH1D *hDirectMin, TH1D *hFeedDownMax, TH1D *hFeedDownMin);
54   // Set the theoretical feeddown pt spectrum upper and lower bounds
55   void SetFeedDownMCptDistributionsBounds(TH1D *hFeedDownMax, TH1D *hFeedDownMin);
56   // Set the acceptance and efficiency corrections for direct  
57   void SetDirectAccEffCorrection(TH1D *hDirectEff);
58   // Set the acceptance and efficiency corrections for direct & feeddown 
59   void SetAccEffCorrection(TH1D *hDirectEff, TH1D *hFeedDownEff);
60   // Set the reconstructed spectrum
61   void SetReconstructedSpectrum(TH1D *hRec);
62   void SetReconstructedSpectrumSystematics(TGraphAsymmErrors *gRec); 
63   // Set the calculation option flag for feed-down correction: 0=none, 1=fc , 2=Nb 
64   void SetFeedDownCalculationOption(Int_t option){ fFeedDownOption = option; }
65   // Set if the calculation has to consider asymmetric uncertaInt_ties or not
66   void SetComputeAsymmetricUncertainties(Bool_t flag){ fAsymUncertainties = flag; }
67   // Set the luminosity and its uncertainty
68   void SetLuminosity(Double_t luminosity, Double_t unc){
69     fLuminosity[0]=luminosity;  fLuminosity[1]=unc;
70   }
71   // Set the trigger efficiency and its uncertainty
72   void SetTriggerEfficiency(Double_t efficiency, Double_t unc){
73     fTrigEfficiency[0]=efficiency; fTrigEfficiency[1]=unc;
74   }
75   // Set global acceptance x efficiency correction uncertainty (in percentages)
76   void SetAccEffPercentageUncertainty(Double_t globalEffUnc, Double_t globalBCEffRatioUnc){
77     fGlobalEfficiencyUncertainties[0] = globalEffUnc;
78     fGlobalEfficiencyUncertainties[1] = globalBCEffRatioUnc;
79   }
80   // Set the normalization factors
81   void SetNormalization(Double_t normalization){
82     fLuminosity[0]=normalization; fTrigEfficiency[0]=1.0;
83   }
84   void SetNormalization(Double_t nevents, Double_t sigma){
85     fLuminosity[0]=nevents/sigma; fTrigEfficiency[0]=1.0;
86   }
87   void SetNormalization(Double_t nevents, Double_t sigma, Double_t sigmaunc){
88     fLuminosity[0] = nevents/sigma; 
89     fTrigEfficiency[0] = 1.0;
90     fLuminosity[1] = fLuminosity[0] * TMath::Sqrt( (1/nevents) + (sigmaunc/sigma)*(sigmaunc/sigma) );
91   }
92
93   //
94   // Getters
95   //
96   // Return the theoretical predictions used for the calculation (rebinned if needed)
97   TH1D * GetDirectTheoreticalSpectrum() const { return (fhDirectMCpt ? (TH1D*)fhDirectMCpt : NULL); }
98   TH1D * GetDirectTheoreticalUpperLimitSpectrum() const { return (fhDirectMCptMax ? (TH1D*)fhDirectMCptMax : NULL); }
99   TH1D * GetDirectTheoreticalLowerLimitSpectrum() const { return (fhDirectMCptMin ? (TH1D*)fhDirectMCptMin : NULL); }
100   TH1D * GetFeedDownTheoreticalSpectrum() const { return (fhFeedDownMCpt ? (TH1D*)fhFeedDownMCpt : NULL); }
101   TH1D * GetFeedDownTheoreticalUpperLimitSpectrum() const { return (fhFeedDownMCptMax ? (TH1D*)fhFeedDownMCptMax : NULL); }
102   TH1D * GetFeedDownTheoreticalLowerLimitSpectrum() const { return (fhFeedDownMCptMin ? (TH1D*)fhFeedDownMCptMin : NULL); }
103   // Return the acceptance and efficiency corrections (rebinned if needed)
104   TH1D * GetDirectAccEffCorrection() const { return (fhDirectEffpt ? (TH1D*)fhDirectEffpt : NULL); }
105   TH1D * GetFeedDownAccEffCorrection() const { return (fhFeedDownEffpt ? (TH1D*)fhFeedDownEffpt : NULL); }
106   // Return the TGraphAsymmErrors of the feed-down correction (extreme systematics)
107   TGraphAsymmErrors * GetFeedDownCorrectionFcExtreme() const { return (fgFcExtreme ?  fgFcExtreme : NULL); }
108   // Return the TGraphAsymmErrors of the feed-down correction (conservative systematics)
109   TGraphAsymmErrors * GetFeedDownCorrectionFcConservative() const { return (fgFcConservative ?  fgFcConservative : NULL); }
110   // Return the histogram of the feed-down correction
111   TH1D * GetHistoFeedDownCorrectionFc() const { return (fhFc ?  (TH1D*)fhFc : NULL); }
112   // Return the histograms of the feed-down correction bounds
113   TH1D * GetHistoUpperLimitFeedDownCorrectionFc() const { return (fhFcMax ? (TH1D*)fhFcMax : NULL); }
114   TH1D * GetHistoLowerLimitFeedDownCorrectionFc() const { return (fhFcMin ? (TH1D*)fhFcMin : NULL); }
115   // Return the TGraphAsymmErrors of the yield after feed-down correction (systematics but feed-down) 
116   TGraphAsymmErrors * GetFeedDownCorrectedSpectrum() const { return (fgYieldCorr ? fgYieldCorr : NULL); }
117   // Return the TGraphAsymmErrors of the yield after feed-down correction (feed-down extreme systematics)
118   TGraphAsymmErrors * GetFeedDownCorrectedSpectrumExtreme() const { return (fgYieldCorrExtreme ? fgYieldCorrExtreme : NULL); }
119   // Return the TGraphAsymmErrors of the yield after feed-down correction (feed-down conservative systematics)
120   TGraphAsymmErrors * GetFeedDownCorrectedSpectrumConservative() const { return (fgYieldCorrConservative ? fgYieldCorrConservative : NULL); }
121   // Return the histogram of the yield after feed-down correction 
122   TH1D * GetHistoFeedDownCorrectedSpectrum() const { return (fhYieldCorr ? (TH1D*)fhYieldCorr : NULL); }
123   // Return the histogram of the yield after feed-down correction bounds
124   TH1D * GetHistoUpperLimitFeedDownCorrectedSpectrum() const { return (fhYieldCorrMax ? (TH1D*)fhYieldCorrMax : NULL); }
125   TH1D * GetHistoLowerLimitFeedDownCorrectedSpectrum() const { return (fhYieldCorrMin ? (TH1D*)fhYieldCorrMin : NULL); }
126   // Return the equivalent invariant cross-section TGraphAsymmErrors (systematics but feed-down) 
127   TGraphAsymmErrors * GetCrossSectionFromYieldSpectrum() const { return (fgSigmaCorr ? fgSigmaCorr : NULL); }
128   // Return the equivalent invariant cross-section TGraphAsymmErrors (feed-down extreme systematics)
129   TGraphAsymmErrors * GetCrossSectionFromYieldSpectrumExtreme() const { return (fgSigmaCorrExtreme ? fgSigmaCorrExtreme : NULL); }
130   // Return the equivalent invariant cross-section TGraphAsymmErrors (feed-down conservative systematics)
131   TGraphAsymmErrors * GetCrossSectionFromYieldSpectrumConservative() const { return (fgSigmaCorrConservative ? fgSigmaCorrConservative : NULL); }
132   // Return the equivalent invariant cross-section histogram
133   TH1D * GetHistoCrossSectionFromYieldSpectrum() const { return (fhSigmaCorr ? (TH1D*)fhSigmaCorr : NULL); }
134   // Return the equivalent invariant cross-section histogram bounds
135   TH1D * GetHistoUpperLimitCrossSectionFromYieldSpectrum() const { return (fhSigmaCorrMax ? (TH1D*)fhSigmaCorrMax : NULL); }
136   TH1D * GetHistoLowerLimitCrossSectionFromYieldSpectrum() const { return (fhSigmaCorrMin ? (TH1D*)fhSigmaCorrMin : NULL); }
137
138   //
139   // Main function:
140   //    Compute the invariant cross-section from the yield (correct it)
141   // variables : analysed delta_y, BR for the final correction, BR b --> decay (relative to the input theoretical prediction)
142   void ComputeHFPtSpectrum(Double_t deltaY=1.0, Double_t branchingRatioC=1.0, Double_t branchingRatioBintoFinalDecay=1.0);
143
144   // Compute the systematic uncertainties
145   //   taking as input the AliHFSystErr uncertainties
146   void ComputeSystUncertainties(Int_t decay, Bool_t combineFeedDown);
147   //
148   // Drawing the corrected spectrum comparing to theoretical prediction
149   void DrawSpectrum(TGraphAsymmErrors *gPrediction);
150
151   //
152   // Basic functions
153   // 
154   void EstimateAndSetDirectEfficiencyRecoBin(TH1D *hSimu, TH1D *hReco);
155   void EstimateAndSetFeedDownEfficiencyRecoBin(TH1D *hSimu, TH1D *hReco);
156   
157   //
158   // Functions to  reweight histograms for testing purposes: 
159   //   to reweight the simulation: hToReweight is reweighted as hReference/hToReweight
160   TH1D * ReweightHisto(TH1D *hToReweight, TH1D *hReference);
161   //   to reweight the reco-histos: hRecToReweight is reweighted as hReference/hMCToReweight
162   TH1D * ReweightRecHisto(TH1D *hRecToReweight, TH1D *hMCToReweight, TH1D *hMCReference);
163
164
165  protected:
166
167   // Initialization 
168   Bool_t Initialize();
169   
170   // Basic functions
171   //
172   // Compute the feed-down correction via fc-method
173   void CalculateFeedDownCorrectionFc(); 
174   // Correct the yield for feed-down correction via fc-method
175   void CalculateFeedDownCorrectedSpectrumFc(); 
176   // Correct the yield for feed-down correction via Nb-method
177   void CalculateFeedDownCorrectedSpectrumNb(Double_t deltaY, Double_t branchingRatioBintoFinalDecay); 
178
179   // Check histograms consistency function
180   Bool_t CheckHistosConsistency(TH1D *h1, TH1D *h2);
181   // Function to rebin the theoretical spectra in the data-reconstructed spectra binning
182   TH1D * RebinTheoreticalSpectra(TH1D *hTheory, const char *name);
183   // Function to estimate the efficiency in the data-reconstructed spectra binning
184   TH1D * EstimateEfficiencyRecoBin(TH1D *hSimu, TH1D *hReco, const char *name);
185
186
187   //
188   // Input spectra
189   //
190   TH1D *fhDirectMCpt;            // Input MC c-->D spectra
191   TH1D *fhFeedDownMCpt;          // Input MC b-->D spectra
192   TH1D *fhDirectMCptMax;         // Input MC maximum c-->D spectra
193   TH1D *fhDirectMCptMin;         // Input MC minimum c-->D spectra
194   TH1D *fhFeedDownMCptMax;       // Input MC maximum b-->D spectra
195   TH1D *fhFeedDownMCptMin;       // Input MC minimum b-->D spectra
196   TH1D *fhDirectEffpt;           // c-->D Acceptance and efficiency correction
197   TH1D *fhFeedDownEffpt;         // b-->D Acceptance and efficiency correction
198   TH1D *fhRECpt;                 // all reconstructed D
199   //
200   TGraphAsymmErrors *fgRECSystematics; // all reconstructed D Systematic uncertainties
201   //
202   // Normalization factors
203   Double_t fLuminosity[2];           // analyzed luminosity & uncertainty
204   Double_t fTrigEfficiency[2];       // trigger efficiency & uncertainty
205   Double_t fGlobalEfficiencyUncertainties[2]; // uncertainties on the efficiency [0]=c, b, [1]=b/c
206
207   //
208   // Output spectra
209   //
210   TH1D *fhFc;                            // Correction histo fc = 1 / ( 1 + (eff_b/eff_c)*(N_b/N_c) ) 
211   TH1D *fhFcMax;                         // Maximum fc histo
212   TH1D *fhFcMin;                         // Minimum fc histo
213   TGraphAsymmErrors * fgFcExtreme;       // Extreme correction as TGraphAsymmErrors
214   TGraphAsymmErrors * fgFcConservative;  // Extreme correction as TGraphAsymmErrors
215   TH1D *fhYieldCorr;                     // Corrected yield (stat unc. only)
216   TH1D *fhYieldCorrMax;                  // Maximum corrected yield  
217   TH1D *fhYieldCorrMin;                  // Minimum corrected yield  
218   TGraphAsymmErrors * fgYieldCorr;              // Corrected yield as TGraphAsymmErrors  (syst but feed-down)
219   TGraphAsymmErrors * fgYieldCorrExtreme;       // Extreme corrected yield as TGraphAsymmErrors  (syst from feed-down)
220   TGraphAsymmErrors * fgYieldCorrConservative;  // Conservative corrected yield as TGraphAsymmErrors  (syst from feed-down) 
221   TH1D *fhSigmaCorr;                     // Corrected cross-section (stat unc. only)
222   TH1D *fhSigmaCorrMax;                  // Maximum corrected cross-section  
223   TH1D *fhSigmaCorrMin;                  // Minimum corrected cross-section
224   TGraphAsymmErrors * fgSigmaCorr;              // Corrected cross-section as TGraphAsymmErrors (syst but feed-down)
225   TGraphAsymmErrors * fgSigmaCorrExtreme;       // Extreme corrected cross-section as TGraphAsymmErrors (syst from feed-down)
226   TGraphAsymmErrors * fgSigmaCorrConservative;  // Conservative corrected cross-section as TGraphAsymmErrors  (syst from feed-down)
227
228   //
229   Int_t fFeedDownOption;            // feed-down correction flag: 0=none, 1=fc, 2=Nb 
230   Bool_t fAsymUncertainties;        // flag: asymmetric uncertainties are (1) or not (0) considered
231
232
233   ClassDef(AliHFPtSpectrum,1) // Class for Heavy Flavor spectra corrections
234 };
235
236 #endif