B2 analysis code
[u/mrichter/AliRoot.git] / PWGLF / SPECTRA / Nuclei / B2 / AliLnPt.h
1 #ifndef ALILNPT_H
2 #define ALILNPT_H
3
4 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
5  * See cxx source for full Copyright notice                               */
6
7 // reconstructed pt
8 // author: Eulogio Serradilla <eulogio.serradilla@cern.ch>
9
10 #include <TObject.h>
11 #include <TString.h>
12
13 #ifndef HAVE_ROOUNFOLD
14 //#define HAVE_ROOUNFOLD
15 #endif
16
17 class TString;
18 class TH1D;
19 class TH2D;
20 class RooWorkspace;
21 class TF1;
22
23 class AliLnPt: public TObject
24 {
25   public:
26         
27         AliLnPt(const TString& particle, Double_t trigEff, const TString& inputFilename, const TString& outputFilename, const TString& otag, const TString& corrFilename, const TString& corrtag);
28         virtual ~AliLnPt();
29         
30         TH1D* PID(const TH1D* hPt, const TH2D* hM2Pt, Int_t lowbin, Int_t hibin, const TString& name);
31 #ifdef HAVE_ROOUNFOLD
32         TH1D* Unfolding(const TH1D* hPt, const TH1D* hMeasuredPt, const TH1D* hTruePt, const TH2D* ResponseMtx, const TString& name, Int_t iterations=4) const;
33 #endif
34         TH1D* FakeTracks(const TH1D* hPt, const TH1D* hFracFakePt, const TString& name) const;
35         TH1D* Secondaries(const TH1D* hPt, const TH1D* hFracMatPt, const TH1D* hFracFdwnPt, const TString& name) const;
36         TH1D* Secondaries(const TH1D* hPt, TF1* fncMatPt, TF1* fncFdwnPt, const TString& name) const;
37         TH1D* Efficiency(const TH1D* hPt, const TH1D* hEffVtxPt, const TH1D* hEffAccTrkPt, const TString& name) const;
38         
39         Int_t Exec();
40         
41         void SetRapidityInterval(Double_t ymin, Double_t ymax) { fYMin = ymin; fYMax = ymax; }
42         
43         void SetParticle(const TString& particle) { fParticle= particle; }
44         
45         void SetOutputTag(const TString& tag) { fOutputTag = tag; }
46         void SetCorrectionTag(const TString& tag) { fCorrTag = tag; }
47         
48         void SetPtBinInterval(Int_t lowbin, Int_t hibin) { fLowPtBin = lowbin; fHiPtBin = hibin; };
49         void SetM2BinInterval(Int_t lowbin, Int_t hibin) { fLowM2Bin = lowbin; fHiM2Bin = hibin; };
50         
51         void SetM2BkgInterval(Double_t min, Double_t max) { fMinM2Bkg = min; fMaxM2Bkg = max; };
52         void SetM2TPCInterval(Double_t min, Double_t max) { fMinM2tpc = min; fMaxM2tpc = max; };
53         
54         void SetPidM2(Bool_t flag=1) { fPidM2 = flag; }
55         void SetUnfolding(Bool_t flag=1, Int_t niter=4) { fUnfolding = flag; fNIter=niter; }
56         void SetFakeTracks(Bool_t flag=1) { fFakeTracks = flag; }
57         void SetSecondaries(Bool_t flag=1) { fSecondaries = flag; }
58         void SetEfficiency(Bool_t flag=1) { fEfficiency = flag; }
59         
60         void SetOnlyGeneration(Bool_t flag=1) { fIsOnlyGen = flag; }
61         
62         void SetMakeStats(Bool_t flag=1) { fMakeStats = flag; }
63         
64         void SetVertexCorrection(Bool_t flag=1, Double_t factor=1) { fVtxCorr=flag; fVtxFactor=factor; }
65         void SetFitFractionCorr(Bool_t flag=1) { fFitFrac=flag; }
66         void SetSameFeedDownCorr(Bool_t flag=1) { fSameFdwn=flag; }
67         
68   private:
69  
70         AliLnPt(const AliLnPt& other);
71         AliLnPt& operator=(const AliLnPt& other);
72         
73         void GetPtFromM2(TH1D* hPt, Int_t lowbin, Int_t hibin, const TH2D* hM2Pt, Double_t m2min, Double_t m2max) const;
74         Double_t GetM2Width(Double_t pt, Double_t mass) const;
75         RooWorkspace* GetM2Model(Double_t pt, Double_t m, const TString& name, Double_t max) const;
76         
77   private:
78         
79         TString fParticle; // particle name
80         
81         Double_t fTrigEff; // trigger efficiency
82         
83         TString fInputFilename; // input filename
84         
85         TString fOutputFilename; // output for the result
86         TString fOutputTag; // tag for the ouput
87         
88         TString fCorrFilename; // file with the corrections
89         TString fCorrTag; // tag for the correction file
90         
91         Int_t fLowPtBin; // low bin for the pt in GeV/c/A
92         Int_t fHiPtBin; // high bin for the pt in GeV/c/A
93         
94         Bool_t fPidM2; // correct contamination of m2 pid
95         Bool_t fUnfolding; // unfold the pt correction
96         Int_t  fNIter; // number of iterations for Bayesian unfolding
97         Bool_t fFakeTracks; // remove faketracks
98         Bool_t fSecondaries; // remove secondaries
99         Bool_t fEfficiency; // correct by efficiency
100         
101         Bool_t fIsOnlyGen; // if the simulation is only generation
102         
103         Double_t fYMin; // rapidity interval min y
104         Double_t fYMax; // rapidity interval max y
105         
106         Int_t fLowM2Bin; // low pt bin for pid correction
107         Int_t fHiM2Bin; // high pt bin for pid correction
108         
109         Double_t fMinM2Bkg; // minimum m2 to remove background
110         Double_t fMaxM2Bkg; // maximum m2 to remove background
111         
112         Double_t fMinM2tpc; // minimum m2 for integration
113         Double_t fMaxM2tpc; // maximum m2 for integration
114         
115         Bool_t fMakeStats; // make event stats
116         
117         Bool_t fVtxCorr; // use simulation to correct from non reconstructed vertex events
118         Double_t fVtxFactor; // correction factor between simulation and data
119         
120         Bool_t fFitFrac; // fit for fraction of secondaries
121         Bool_t fSameFdwn; // same feed-down correction for positives and negatives
122         
123         ClassDef(AliLnPt,1)
124 };
125
126 #endif // ALILNPT_H