]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWG4/JetTasks/AliFragmentationFunctionCorrections.h
fragmentation function correction task added (O. Busch)
[u/mrichter/AliRoot.git] / PWG4 / JetTasks / AliFragmentationFunctionCorrections.h
diff --git a/PWG4/JetTasks/AliFragmentationFunctionCorrections.h b/PWG4/JetTasks/AliFragmentationFunctionCorrections.h
new file mode 100644 (file)
index 0000000..d66eea8
--- /dev/null
@@ -0,0 +1,242 @@
+// *****************************************************************************
+// * Task for corrections to output from AliAnalysisTaskFragmentationFunctions *
+//  ****************************************************************************
+
+#ifndef ALIFRAGMENTATIONFUNCTIONCORRECTIONS_H
+#define ALIFRAGMENTATIONFUNCTIONCORRECTIONS_H
+
+/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
+ * See cxx source for full Copyright notice                               */
+
+/* $Id$ */
+
+#include "TObject.h"
+
+class ThnSparse;
+
+class AliFragmentationFunctionCorrections : public TObject {
+
+ public:
+  
+ //----------------------------------------
+  class AliFragFuncCorrHistos : public TObject
+  {
+    
+    public:
+    
+    AliFragFuncCorrHistos();
+    AliFragFuncCorrHistos(const AliFragFuncCorrHistos& copy);
+    AliFragFuncCorrHistos& operator=(const AliFragFuncCorrHistos &o);
+    virtual ~AliFragFuncCorrHistos();
+    AliFragFuncCorrHistos(const char* label,Int_t arraySize);
+    void AddCorrHistos(Int_t slice,TH1F* histPt=0,TH1F* histZ=0,TH1F* histXi=0);
+    void ReplaceCorrHistos(Int_t slice,TH1F* histPt=0,TH1F* histZ=0,TH1F* histXi=0);
+
+    TH1F* GetTrackPt(const Int_t slice);
+    TH1F* GetZ(const Int_t slice);
+    TH1F* GetXi(const Int_t slice);
+
+    TString GetLabel() { return fCorrLabel; }
+
+    private:
+
+    Int_t fArraySize;
+
+    TH1F** fh1CorrFFTrackPt;  //! corrected FF histos 
+    TH1F** fh1CorrFFZ;        //! corrected FF histos 
+    TH1F** fh1CorrFFXi;       //! corrected FF histos 
+
+    TString fCorrLabel;    //! correction label 
+
+    ClassDef(AliFragFuncCorrHistos, 1);
+  };
+
+  AliFragmentationFunctionCorrections(); 
+  AliFragmentationFunctionCorrections(const  AliFragmentationFunctionCorrections &copy);
+  AliFragmentationFunctionCorrections& operator=(const  AliFragmentationFunctionCorrections &o);
+  virtual ~AliFragmentationFunctionCorrections();
+  
+  virtual void SetDebugLevel(Int_t debug){ fDebug = debug; }
+  
+  void DeleteHistoArray(TH1F** hist) const;
+  void DeleteTHnSparseArray(THnSparse** hist) const;
+  TH1F** BookHistoArray();
+  THnSparse** BookTHnSparseArray();
+  void AddCorrectionLevel(const char* label = "");
+  void AddCorrectionLevelBgr(const char* label = "");
+  void AddCorrectionLevelSinglePt(const char* label = "");
+    
+  void SetJetPtSlices(Float_t* bins, const Int_t nJetPtSlices);
+
+  void SetHistoBins(const Int_t jetPtSlice, const Int_t sizeBins, Double_t* bins,Int_t type);
+  void SetHistoBins(const Int_t jetPtSlice, const Int_t nBinsLimits, Double_t* binsLimits, Double_t* binsWidth,Int_t type);
+  void SetHistoBinsSinglePt(const Int_t sizeBins, Double_t* bins);
+  void SetHistoBinsSinglePt(const Int_t nBinsLimits, Double_t* binsLimits, Double_t* binsWidth);
+
+  // set histo bins for inclusive pt spectra 
+
+  void NormalizeTH1(TH1* hist, const Float_t nJets);
+  void NormalizeFF();
+  void NormalizeBgr();
+  void ReadRawFF(TString strfile, TString strID, TString strFFID = "RecCuts");
+  void ReadRawFF(TString strfile, TString strdir, TString strlist, TString strFFID);
+  void ReadRawBgr(TString strfile, TString strID, TString strBgrID = "Perp", TString strFFID = "RecCuts");
+  void ReadRawBgr(TString strfile, TString strdir, TString strlist, TString strBgrID, TString strFFID);
+  void ReadRawBgrEmbedding(TString strfile, TString strID, TString strFFID);
+  void ReadRawBgrEmbedding(TString strfile, TString strdir, TString strlist, TString strFFID);
+
+  void WriteOutput(TString strfile, TString strdir = "", Bool_t updateOutfile = kTRUE);
+
+  THnSparse* TH1toSparse(const TH1F* hist, TString strName, TString strTit, const Bool_t fillConst = kFALSE);
+
+  THnSparse* Unfold(THnSparse* hnHist, const THnSparse* hnResponse, const THnSparse* hnEff, const Int_t nIter, 
+                   const Bool_t useCorrelatedErrors = kTRUE, const THnSparse* hnPrior = 0x0);
+
+  void UnfoldHistos(const Int_t nIter, const Bool_t useCorrelatedErrors, const Int_t type);
+
+  void UnfoldPt(const Int_t nIter=5, const Bool_t useCorrelatedErrors=kTRUE);
+  void UnfoldZ(const Int_t nIter=5, const Bool_t useCorrelatedErrors=kTRUE);
+  void UnfoldXi(const Int_t nIter=5, const Bool_t useCorrelatedErrors=kTRUE);
+
+  TH1F* ApplyResponse(const TH1F* hist, THnSparse* hnResponse);
+  
+  void ReadEfficiency(TString strfile, TString strdir = "", TString strlist = "");
+  void ReadBgrEfficiency(TString strfile, TString strdir = "", TString strlist = "");
+
+  void EffCorr(); 
+  void EffCorrBgr();
+
+  void XiShift(const Int_t corrLevel); 
+
+  void SubtractBgr();
+
+  void WriteSingleTrackEff(TString strInfile, TString strID, TString strOutfile,Bool_t updateOutfile = kTRUE, TString strOutDir = "", TString strPostfix = "");
+  void WriteSingleTrackEff(TString strInfile, TString strdir, TString strlist, TString strOutfile, Bool_t updateOutfile = kTRUE, TString strOutDir = "", 
+                          TString strPostfix = "");
+  void WriteSingleTrackSecCorr(TString strInfile, TString strID, TString strOutfile,Bool_t updateOutfile = kTRUE, TString strOutDir = "");
+  void WriteSingleTrackSecCorr(TString strInfile, TString strdir, TString strlist, TString strOutfile, Bool_t updateOutfile = kTRUE, TString strOutDir = "");
+  
+  void WriteSingleResponse(TString strInfile, TString strID, TString strOutfile,Bool_t updateOutfile = kTRUE, TString strOutDir = "");
+  void WriteSingleResponse(TString strInfile, TString strdir, TString strlist, TString strOutfile, Bool_t updateOutfile = kTRUE, TString strOutDir = "");
+  void WriteJetTrackEff(TString strInfile, TString strID, TString strOutfile,Bool_t updateOutfile = kTRUE);
+  void WriteJetTrackEff(TString strInfile, TString strdir, TString strlist, TString strOutfile, Bool_t updateOutfile = kTRUE);
+
+  void WriteJetSecCorr(TString strInfile, TString strID, TString strOutfile,Bool_t updateOutfile = kTRUE);
+  void WriteJetSecCorr(TString strInfile, TString strdir, TString strlist, TString strOutfile, Bool_t updateOutfile = kTRUE);
+  void WriteJetResponse(TString strInfile, TString strID, TString strOutfile,Bool_t updateOutfile = kTRUE);
+  void WriteJetResponse(TString strInfile, TString strdir, TString strlist,TString strOutfile, Bool_t updateOutfile);
+
+  void ReadResponse(TString strfile, TString strdir="", TString strlist="");
+  void ReadPriors(TString strfile,const Int_t type); 
+
+  void ProjectSingleResponseMatrix(TString strOutfile, Bool_t updateOutfile, TString strOutDir = "");
+  void ProjectJetResponseMatrices(TString strOutfile);
+
+  void RebinHisto(const Int_t jetPtSlice, const Int_t nBinsLimits, Double_t* binsLimits, Double_t* binsWidth, const Int_t type);
+
+  void WriteJetSpecResponse(TString strInfile, TString strdir, TString strlist, TString strOutfile);
+
+  void ReadSingleTrackEfficiency(TString strfile, TString strdir="", TString strlist="", TString strname="hSingleTrackEffPt");
+  void ReadSingleTrackResponse(TString strfile, TString strdir="", TString strlist="", TString strname="fhnResponseSinglePt");
+  void ReadSingleTrackSecCorr(TString strfile, TString strdir="", TString strlist="", TString strname="hSingleTrackSecCorrPt");
+  void ReadSingleTrackCorrection(TString strfile, TString strdir, TString strlist, TString strname, const Int_t type);
+  
+  void ReadRawPtSpec(TString strInfile, TString strID);
+  void ReadRawPtSpec(TString strfile, TString strdir, TString strlist);
+  void ReadRawPtSpecQATask(TString strfile, TString strdir, TString strlist); // spectra from Martas QA task
+  void EffCorrSinglePt();
+  void UnfoldSinglePt(const Int_t nIter, const Bool_t useCorrelatedErrors);
+  void SecCorrSinglePt();
+
+
+  enum {kFlagPt=0,kFlagZ,kFlagXi,kFlagSinglePt};
+  enum {kFlagEfficiency=0,kFlagResponse,kFlagSecondaries};
+
+
+ private:
+
+  static const Int_t fgMaxNCorrectionLevels = 10;  //! max number of corrections 
+  
+  Int_t fDebug;              //! Debug level
+  Int_t fNJetPtSlices;       //! n slices in jet pt
+  TArrayF* fJetPtSlices;     //! array to hold slices in jet pt 
+
+  TArrayF* fNJets;           //! nJets per jet pt slice - non-int e.g. for xsec/nTrials scaled spectra
+  TArrayF* fNJetsBgr;        //! nJets bgr per jet pt slice - non-int  e.g. for xsec/nTrials scaled spectra
+  Int_t fNHistoBinsSinglePt;  //! nBins inclusive pt spec histos - leave undefinded to use original binning
+  TArrayD* fHistoBinsSinglePt; //! inclusive pt spec histo bins
+
+  Int_t* fNHistoBinsPt;      //! nBins FF histos in each jet pt slice - leave undefinded for any slice to use original binning
+  Int_t* fNHistoBinsZ;       //! nBins FF histos in each jet pt slice - leave undefinded for any slice to use original binning
+  Int_t* fNHistoBinsXi;      //! nBins FF histos in each jet pt slice - leave undefinded for any slice to use original binning
+
+  TArrayD** fHistoBinsPt;    //! FF histo bins 
+  TArrayD** fHistoBinsZ;     //! FF histo bins
+  TArrayD** fHistoBinsXi;    //! FF histo bins
+
+  Int_t fNCorrectionLevels;        //! corrections applied: efficiency, secondaries, resolution unfolding, bgr subtraction
+  AliFragFuncCorrHistos** fCorrFF; //! array of fragmentation functions, dimensions: jet pt bins, correction steps
+
+  Int_t fNCorrectionLevelsBgr;      //! corrections applied: efficiency, secondaries, resolution unfolding, bgr subtraction
+  AliFragFuncCorrHistos** fCorrBgr; //! array of bgr fragmentation functions, dimensions: jet pt bins, correction steps
+
+  Int_t fNCorrectionLevelsSinglePt;      //! corrections applied: efficiency, secondaries, resolution unfolding, bgr subtraction
+  AliFragFuncCorrHistos** fCorrSinglePt; //! array to keep single track pt spectra, 1D in jet pt bins dimension 
+
+
+
+  // xi shift
+  TH1F** fh1FFXiShift;          //! FF: track xi, corrected for shift in jet energy
+
+  // eff correction
+  TH1F*  fh1EffSinglePt;       //!  efficiency all tracks
+
+  TH1F** fh1EffPt;             //! reconstruction efficiency track pt
+  TH1F** fh1EffZ;              //! reconstruction efficiency z
+  TH1F** fh1EffXi;             //! reconstruction efficiency xi
+
+  TH1F** fh1EffBgrPt;          //! reconstruction efficiency bgr track pt
+  TH1F** fh1EffBgrZ;          //! reconstruction efficiency bgr z
+  TH1F** fh1EffBgrXi;         //! reconstruction efficiency bgr xi
+
+
+  // unfolding
+
+  TH1F** fh1FFTrackPtBackFolded;  //! FF: track pt backfolded (unfolded + smeared with response matrix)
+  TH1F** fh1FFZBackFolded;        //! FF: track z, backfolded (unfolded + smeared with response matrix)
+  TH1F** fh1FFXiBackFolded;       //! FF: track xi,backfolded (unfolded + smeared with response matrix)
+
+  TH1F** fh1FFRatioTrackPtFolded;  //! ratio FF: track pt unfolded / original 
+  TH1F** fh1FFRatioZFolded;        //! ratio FF: track z  unfolded / original
+  TH1F** fh1FFRatioXiFolded;       //! ratio FF: track xi unfolded / original
+
+  TH1F** fh1FFRatioTrackPtBackFolded;  //! ratio FF: track pt backfolded / original
+  TH1F** fh1FFRatioZBackFolded;        //! ratio FF: track z  backfolded / original
+  TH1F** fh1FFRatioXiBackFolded;       //! ratio FF: track xi backfolded / original
+
+  TH1F*  fh1SingleTrackPtBackFolded;      //! inclusive track pt backfolded (unfolded + smeared with response matrix)
+  TH1F*  fh1RatioSingleTrackPtFolded;     //! ratio inclusive track pt unfolded / original 
+  TH1F*  fh1RatioSingleTrackPtBackFolded; //! ratio inblusive track pt backfolded / original
+
+  THnSparse*  fhnResponseSinglePt;  //!  response matrix pt gen vs rec all tracks
+  THnSparse** fhnResponsePt;        //!  response matrix pt gen vs rec 
+  THnSparse** fhnResponseZ;         //!  response matrix z  gen vs rec 
+  THnSparse** fhnResponseXi;        //!  response matrix xi gen vs rec 
+
+  TH1F** fh1FFTrackPtPrior;  //! FF: track pt prior 
+  TH1F** fh1FFZPrior;        //! FF: track z  prior
+  TH1F** fh1FFXiPrior;       //! FF: track xi prior
+
+  // secondaries 
+  TH1F*  fh1SecCorrSinglePt;       //!  secondaries correction all tracks
+  
+
+
+  ClassDef(AliFragmentationFunctionCorrections, 1);
+};
+
+#endif