- Reduce number of bins in order to decrease memory consumption
[u/mrichter/AliRoot.git] / PWGJE / AliFragmentationFunctionCorrections.h
1 // *****************************************************************************
2 // * Task for corrections to output from AliAnalysisTaskFragmentationFunctions *
3 //  ****************************************************************************
4
5 #ifndef ALIFRAGMENTATIONFUNCTIONCORRECTIONS_H
6 #define ALIFRAGMENTATIONFUNCTIONCORRECTIONS_H
7
8 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
9  * See cxx source for full Copyright notice                               */
10
11 /* $Id$ */
12
13 #include "TObject.h"
14
15 class ThnSparse;
16
17 class AliFragmentationFunctionCorrections : public TObject {
18
19  public:
20   
21  //----------------------------------------
22   class AliFragFuncCorrHistos : public TObject
23   {
24     
25     public:
26     
27     AliFragFuncCorrHistos();
28     AliFragFuncCorrHistos(const AliFragFuncCorrHistos& copy);
29     AliFragFuncCorrHistos& operator=(const AliFragFuncCorrHistos &o);
30     virtual ~AliFragFuncCorrHistos();
31     AliFragFuncCorrHistos(const char* label,Int_t arraySize);
32     void AddCorrHistos(Int_t slice,TH1F* histPt=0,TH1F* histZ=0,TH1F* histXi=0);
33     void ReplaceCorrHistos(Int_t slice,TH1F* histPt=0,TH1F* histZ=0,TH1F* histXi=0);
34
35     TH1F* GetTrackPt(const Int_t slice);
36     TH1F* GetZ(const Int_t slice);
37     TH1F* GetXi(const Int_t slice);
38
39     TString GetLabel() { return fCorrLabel; }
40
41     private:
42
43     Int_t fArraySize;
44
45     TH1F** fh1CorrFFTrackPt;  //! corrected FF histos 
46     TH1F** fh1CorrFFZ;        //! corrected FF histos 
47     TH1F** fh1CorrFFXi;       //! corrected FF histos 
48
49     TString fCorrLabel;    //! correction label 
50
51     ClassDef(AliFragFuncCorrHistos, 1);
52   };
53
54   AliFragmentationFunctionCorrections(); 
55   AliFragmentationFunctionCorrections(const  AliFragmentationFunctionCorrections &copy);
56   AliFragmentationFunctionCorrections& operator=(const  AliFragmentationFunctionCorrections &o);
57   virtual ~AliFragmentationFunctionCorrections();
58   
59   virtual void SetDebugLevel(Int_t debug){ fDebug = debug; }
60   
61   void DeleteHistoArray(TH1F** hist) const;
62   void DeleteTHnSparseArray(THnSparse** hist) const;
63   TH1F** BookHistoArray();
64   THnSparse** BookTHnSparseArray();
65   void AddCorrectionLevel(const char* label = "");
66   void AddCorrectionLevelBgr(const char* label = "");
67   void AddCorrectionLevelSinglePt(const char* label = "");
68     
69   void SetJetPtSlices(Float_t* bins, const Int_t nJetPtSlices);
70
71   void SetHistoBins(const Int_t jetPtSlice, const Int_t sizeBins, Double_t* bins,Int_t type);
72   void SetHistoBins(const Int_t jetPtSlice, const Int_t nBinsLimits, Double_t* binsLimits, Double_t* binsWidth,Int_t type);
73   TArrayD* GetHistoBins(const Int_t& jetPtSlice, const Int_t& type);
74
75   void SetHistoBinsSinglePt(const Int_t sizeBins, Double_t* bins);
76   void SetHistoBinsSinglePt(const Int_t nBinsLimits, Double_t* binsLimits, Double_t* binsWidth);
77
78   // set histo bins for inclusive pt spectra 
79
80   void NormalizeTH1(TH1* hist, const Float_t nJets);
81   void NormalizeFF();
82   void NormalizeBgr();
83   void ReadRawFF(TString strfile, TString strID, TString strFFID = "RecCuts");
84   void ReadRawFF(TString strfile, TString strdir, TString strlist, TString strFFID);
85   void ReadRawBgr(TString strfile, TString strID, TString strBgrID = "Perp", TString strFFID = "RecCuts");
86   void ReadRawBgr(TString strfile, TString strdir, TString strlist, TString strBgrID, TString strFFID);
87   void ReadRawBgrEmbedding(TString strfile, TString strID, TString strFFID);
88   void ReadRawBgrEmbedding(TString strfile, TString strdir, TString strlist, TString strFFID);
89
90   void WriteOutput(TString strfile, TString strdir = "", Bool_t updateOutfile = kTRUE);
91
92   THnSparse* TH1toSparse(const TH1F* hist, TString strName, TString strTit, const Bool_t fillConst = kFALSE);
93
94   TH1F* Unfold(THnSparse* hnHist, const THnSparse* hnResponse, const THnSparse* hnEff, const Int_t nIter, 
95                const Bool_t useCorrelatedErrors = kTRUE, const THnSparse* hnPrior = 0x0);
96
97   void UnfoldHistos(const Int_t nIter, const Bool_t useCorrelatedErrors, const Int_t type);
98
99   void UnfoldPt(const Int_t nIter=5, const Bool_t useCorrelatedErrors=kTRUE);
100   void UnfoldZ(const Int_t nIter=5, const Bool_t useCorrelatedErrors=kTRUE);
101   void UnfoldXi(const Int_t nIter=5, const Bool_t useCorrelatedErrors=kTRUE);
102
103   TH1F* ApplyResponse(const TH1F* hist, THnSparse* hnResponse);
104   
105   void ReadEfficiency(TString strfile, TString strdir = "", TString strlist = "");
106   void ReadBgrEfficiency(TString strfile, TString strdir = "", TString strlist = "");
107
108   void EffCorr(); 
109   void EffCorrBgr();
110
111   void SubtractBgr(Double_t sysErr = 0);
112
113   void WriteSingleTrackEff(TString strInfile, TString strID, TString strOutfile,Bool_t updateOutfile = kTRUE, TString strOutDir = "", TString strPostfix = "");
114   void WriteSingleTrackEff(TString strInfile, TString strdir, TString strlist, TString strOutfile, Bool_t updateOutfile = kTRUE, TString strOutDir = "", 
115                            TString strPostfix = "");
116  
117   void WriteSingleTrackSecCorr(TString strInfile, TString strID, TString strOutfile,Bool_t updateOutfile = kTRUE, TString strOutDir = "");
118   void WriteSingleTrackSecCorr(TString strInfile, TString strdir, TString strlist, TString strOutfile, Bool_t updateOutfile = kTRUE, TString strOutDir = "");
119   
120   void WriteSingleResponse(TString strInfile, TString strID, TString strOutfile,Bool_t updateOutfile = kTRUE, TString strOutDir = "");
121   void WriteSingleResponse(TString strInfile, TString strdir, TString strlist, TString strOutfile, Bool_t updateOutfile = kTRUE, TString strOutDir = "");
122  
123   void WriteJetTrackEff(TString strInfile, TString strID, TString strOutfile,Bool_t updateOutfile = kTRUE);
124   void WriteJetTrackEff(TString strInfile, TString strdir, TString strlist, TString strOutfile, Bool_t updateOutfile = kTRUE);
125
126   void WriteJetSecCorr(TString strInfile, TString strID, TString strOutfile,Bool_t updateOutfile = kTRUE, TString strOutDir = "");
127   void WriteBgrJetSecCorr(TString strInfile, TString strBgrID, TString strID, TString strOutfile,Bool_t updateOutfile = kTRUE, 
128                           TString strOutDir = "", Double_t scaleFacBgrRec=1);
129
130   void WriteJetSecCorr(TString strInfile, TString strdir, TString strlist, TString strOutfile, Bool_t updateOutfile = kTRUE, 
131                        TString strOutDir = "",Bool_t writeBgr=kFALSE,TString strBgrID="",Double_t scaleFacBgrRec=1);
132  
133   void WriteJetResponse(TString strInfile, TString strID, TString strOutfile,Bool_t updateOutfile = kTRUE, TString strOutDir = "");
134   void WriteJetResponse(TString strInfile, TString strdir, TString strlist,TString strOutfile, Bool_t updateOutfile, TString strOutDir = "");
135
136   void ReadResponse(TString strfile, TString strdir="", TString strlist="");
137   void ReadPriors(TString strfile,const Int_t type); 
138
139   void ProjectSingleResponseMatrix(TString strOutfile, Bool_t updateOutfile, TString strOutDir = "");
140   void ProjectJetResponseMatrices(TString strOutfile);
141
142   void RebinHisto(const Int_t jetPtSlice, const Int_t nBinsLimits, Double_t* binsLimits, Double_t* binsWidth, const Int_t type);
143
144   void WriteJetSpecResponse(TString strInfile, TString strdir, TString strlist /*, TString strOutfile*/ );
145
146   void ReadSingleTrackEfficiency(TString strfile, TString strdir="", TString strlist="", TString strname="hSingleTrackEffPt");
147   void ReadSingleTrackResponse(TString strfile, TString strdir="", TString strlist="", TString strname="fhnResponseSinglePt");
148   void ReadSingleTrackSecCorr(TString strfile, TString strdir="", TString strlist="", TString strname="hSingleTrackSecCorrPt");
149   void ReadSingleTrackCorrection(TString strfile, TString strdir, TString strlist, TString strname, const Int_t type);
150   
151   void ReadRawPtSpec(TString strInfile, TString strID);
152   void ReadRawPtSpec(TString strfile, TString strdir, TString strlist);
153   void ReadRawPtSpecQATask(TString strfile, TString strdir, TString strlist); // spectra from Martas QA task
154   void EffCorrSinglePt();
155   void UnfoldSinglePt(const Int_t nIter, const Bool_t useCorrelatedErrors);
156   void SecCorrSinglePt();
157   void dNdz2dNdxi();
158
159   void WriteBinShiftCorr(TString strInfile, TString strIDGen,  TString strIDRec,  
160                          TString strOutfile, Bool_t updateOutfile, Bool_t useRecPrim = kTRUE,  
161                          TString strOutDir = "", Double_t scaleFacBgrRec=1);
162
163   void WriteBgrBinShiftCorr(TString strInfile, TString strBgrID, TString strIDGen,  TString strIDRec,  
164                             TString strOutfile, Bool_t updateOutfile, Bool_t useRecPrim = kTRUE,  
165                             TString strOutDir = "", Double_t scaleFacBgrRec=1);
166
167   void WriteBinShiftCorr(TString strInfile, TString strdirGen, TString strlistGen, 
168                          TString strdirRec, TString strlistRec, 
169                          TString strOutfile, Bool_t updateOutfile, Bool_t useRecPrim = kTRUE, 
170                          TString strOutDir = "",Bool_t writeBgr = kFALSE, TString strBgrID = "",Double_t scaleFacBgrRec=1);
171
172   void ReadBgrBinShiftCorr(TString strfile,  TString strBgrID, TString strdir="", TString strlist="");
173   void ReadBinShiftCorr(TString strfile, TString strdir="", TString strlist="", Bool_t readBgr = kFALSE, TString strBgrID="");
174
175   void ReadFoldingCorr(TString strfile, TString strdir="", TString strlist="");
176
177   void BbBCorr();
178   void BbBCorrBgr();
179
180   void FoldingCorr();
181
182   void ReadBgrJetSecCorr(TString strfile, TString strBgrID, TString strdir="", TString strlist="", Bool_t useScaledStrangeness=kTRUE);
183   void ReadJetSecCorr(TString strfile, TString strdir="", TString strlist="", Bool_t useScaledStrangeness = kTRUE, 
184                       Bool_t readBgr=kFALSE, TString strBgrID="");
185
186   void JetSecCorr();
187   void JetSecCorrBgr();
188
189
190   void WriteBinShiftCorrSinglePt(TString strInfile, TString strIDGen,  TString strIDRec,  
191                                  TString strOutfile, Bool_t updateOutfile, Bool_t useRecPrim, TString strOutDir);
192
193   void WriteBinShiftCorrSinglePt(TString strInfile, TString strdirGen, TString strlistGen, 
194                                  TString strdirRec, TString strlistRec, 
195                                  TString strOutfile, Bool_t updateOutfile, Bool_t useRecPrim, TString strOutDir = "");
196   
197   void ReadBinShiftCorrSinglePt(TString strfile, TString strdir = "", TString strlist = "", Bool_t useRecPrim = kTRUE);
198
199   void BbBCorrSinglePt();
200
201
202   enum {kFlagPt=0,kFlagZ,kFlagXi,kFlagSinglePt};
203   enum {kFlagEfficiency=0,kFlagResponse,kFlagSecondaries};
204
205
206  private:
207
208   static const Int_t fgMaxNCorrectionLevels = 10;  //! max number of corrections 
209   
210   Int_t fDebug;              //! Debug level
211   Int_t fNJetPtSlices;       //! n slices in jet pt
212   TArrayF* fJetPtSlices;     //! array to hold slices in jet pt 
213
214   TArrayF* fNJets;           //! nJets per jet pt slice - non-int e.g. for xsec/nTrials scaled spectra
215   TArrayF* fNJetsBgr;        //! nJets bgr per jet pt slice - non-int  e.g. for xsec/nTrials scaled spectra
216  
217   Int_t fNHistoBinsSinglePt;  //! nBins inclusive pt spec histos - leave undefinded to use original binning
218   TArrayD* fHistoBinsSinglePt; //! inclusive pt spec histo bins
219
220   Int_t* fNHistoBinsPt;      //! nBins FF histos in each jet pt slice - leave undefinded for any slice to use original binning
221   Int_t* fNHistoBinsZ;       //! nBins FF histos in each jet pt slice - leave undefinded for any slice to use original binning
222   Int_t* fNHistoBinsXi;      //! nBins FF histos in each jet pt slice - leave undefinded for any slice to use original binning
223
224   TArrayD** fHistoBinsPt;    //! FF histo bins 
225   TArrayD** fHistoBinsZ;     //! FF histo bins
226   TArrayD** fHistoBinsXi;    //! FF histo bins
227
228   Int_t fNCorrectionLevels;        //! corrections applied: efficiency, secondaries, resolution unfolding, bgr subtraction
229   AliFragFuncCorrHistos** fCorrFF; //! array of fragmentation functions, dimensions: jet pt bins, correction steps
230
231   Int_t fNCorrectionLevelsBgr;      //! corrections applied: efficiency, secondaries, resolution unfolding, bgr subtraction
232   AliFragFuncCorrHistos** fCorrBgr; //! array of bgr fragmentation functions, dimensions: jet pt bins, correction steps
233
234   Int_t fNCorrectionLevelsSinglePt;      //! corrections applied: efficiency, secondaries, resolution unfolding, bgr subtraction
235   AliFragFuncCorrHistos** fCorrSinglePt; //! array to keep single track pt spectra, 1D in jet pt bins dimension 
236
237
238   // eff correction
239   TH1F*  fh1EffSinglePt;       //!  efficiency all tracks
240
241   TH1F** fh1EffPt;             //! reconstruction efficiency track pt
242   TH1F** fh1EffZ;              //! reconstruction efficiency z
243   TH1F** fh1EffXi;             //! reconstruction efficiency xi
244
245   TH1F** fh1EffBgrPt;          //! reconstruction efficiency bgr track pt
246   TH1F** fh1EffBgrZ;           //! reconstruction efficiency bgr z
247   TH1F** fh1EffBgrXi;          //! reconstruction efficiency bgr xi
248
249   // bin-by-bin correction
250   TH1F*  fh1BbBCorrSinglePt;   //!  BbB corr track pt 
251
252   TH1F** fh1BbBPt;             //! bin-by-bin correction track pt
253   TH1F** fh1BbBZ;              //! bin-by-bin correction z
254   TH1F** fh1BbBXi;             //! bin-by-bin correction xi
255
256   TH1F** fh1BbBBgrPt;          //! bin-by-bin correction UE track pt
257   TH1F** fh1BbBBgrZ;           //! bin-by-bin correction UE z
258   TH1F** fh1BbBBgrXi;          //! bin-by-bin correction UE xi
259
260   TH1F** fh1FoldingCorrPt;   //! corr factor rec/folded 
261   TH1F** fh1FoldingCorrZ;    //! corr factor rec/folded 
262   TH1F** fh1FoldingCorrXi;   //! corr factor rec/folded 
263
264
265   // secondaries correction
266   TH1F** fh1SecCorrPt;             //! secondaries correction track pt
267   TH1F** fh1SecCorrZ;              //! secondaries correction z
268   TH1F** fh1SecCorrXi;             //! secondaries correction xi
269
270   TH1F** fh1SecCorrBgrPt;          //! secondaries correction track pt
271   TH1F** fh1SecCorrBgrZ;           //! secondaries correction z
272   TH1F** fh1SecCorrBgrXi;          //! reconstruction efficiency xi
273
274   // unfolding
275
276   TH1F** fh1FFTrackPtBackFolded;  //! FF: track pt backfolded (unfolded + smeared with response matrix)
277   TH1F** fh1FFZBackFolded;        //! FF: track z, backfolded (unfolded + smeared with response matrix)
278   TH1F** fh1FFXiBackFolded;       //! FF: track xi,backfolded (unfolded + smeared with response matrix)
279
280   TH1F** fh1FFRatioTrackPtFolded;  //! ratio FF: track pt unfolded / original 
281   TH1F** fh1FFRatioZFolded;        //! ratio FF: track z  unfolded / original
282   TH1F** fh1FFRatioXiFolded;       //! ratio FF: track xi unfolded / original
283
284   TH1F** fh1FFRatioTrackPtBackFolded;  //! ratio FF: track pt backfolded / original
285   TH1F** fh1FFRatioZBackFolded;        //! ratio FF: track z  backfolded / original
286   TH1F** fh1FFRatioXiBackFolded;       //! ratio FF: track xi backfolded / original
287
288   TH1F*  fh1SingleTrackPtBackFolded;      //! inclusive track pt backfolded (unfolded + smeared with response matrix)
289   TH1F*  fh1RatioSingleTrackPtFolded;     //! ratio inclusive track pt unfolded / original 
290   TH1F*  fh1RatioSingleTrackPtBackFolded; //! ratio inblusive track pt backfolded / original
291
292   THnSparse*  fhnResponseSinglePt;  //!  response matrix pt gen vs rec all tracks
293   THnSparse** fhnResponsePt;        //!  response matrix pt gen vs rec 
294   THnSparse** fhnResponseZ;         //!  response matrix z  gen vs rec 
295   THnSparse** fhnResponseXi;        //!  response matrix xi gen vs rec 
296
297   TH1F** fh1FFTrackPtPrior;  //! FF: track pt prior 
298   TH1F** fh1FFZPrior;        //! FF: track z  prior
299   TH1F** fh1FFXiPrior;       //! FF: track xi prior
300
301
302   // secondaries 
303   TH1F*  fh1SecCorrSinglePt;       //!  secondaries correction all tracks
304
305
306   ClassDef(AliFragmentationFunctionCorrections, 1);
307 };
308
309 #endif