]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWGHF/vertexingHF/AliCFTaskVertexingHF.h
Mem.leak fix: Get(...) only once per object
[u/mrichter/AliRoot.git] / PWGHF / vertexingHF / AliCFTaskVertexingHF.h
old mode 100644 (file)
new mode 100755 (executable)
index 1f4c39d..891d6b4
 #include "AliAnalysisTaskSE.h"
 #include "AliCFVertexingHF2Prong.h"
 #include "AliCFVertexingHF3Prong.h"
+#include "AliCFVertexingHFLctoV0bachelor.h"
 #include "AliCFVertexingHF.h"
+#include <TH1F.h>
+#include <TProfile.h>
 
 class TH1I;
 class TParticle ;
@@ -64,6 +67,16 @@ public:
                kSnail = 0,    // slow configuration, all variables
                kCheetah = 1   // fast configuration, only a subset of variables
        };
+
+        enum {
+          kAll = 0,   // all decays (resonant + non-resonant)
+          kNonResonant = 1, // only non resonant
+          kL1520 = 2,  // Lc --> L(1520) + p
+          kKstar = 3,  // Lc --> K* + pi
+          kDelta = 4   // Lc --> Delta + K
+        };
+
+       enum { kNtrk10=0, kNtrk10to16=1, kVZERO=2 }; // multiplicity estimators
        
        AliCFTaskVertexingHF();
        AliCFTaskVertexingHF(const Char_t* name, AliRDHFCuts* cuts, TF1* func = 0x0);
@@ -87,7 +100,7 @@ public:
        // CORRECTION FRAMEWORK RELATED FUNCTIONS
        void           SetCFManager(AliCFManager* io) {fCFManager = io;}   // global correction manager
        AliCFManager * GetCFManager()                 {return fCFManager;} // get corr manager
-       
+
        // Setters (and getters) for the config macro
        void    SetFillFromGenerated(Bool_t flag) {fFillFromGenerated = flag;}
        Bool_t  GetFillFromGenerated() const {return fFillFromGenerated;}
@@ -97,7 +110,66 @@ public:
        Bool_t   GetUseWeight() const {return fUseWeight;}
        Double_t GetWeight(Float_t pt);
        Double_t dNdptFit(Float_t pt, Double_t* par);
-       
+
+       void SetUseFlatPtWeight(Bool_t useWeight){fUseFlatPtWeight=useWeight; fUseWeight=useWeight;}
+       Bool_t GetUseFlatPtWeight() const {return fUseFlatPtWeight;}
+       void SetUseZWeight(Bool_t useWeight){fUseZWeight=useWeight;}
+       Bool_t GetUseZWeight() const {return fUseZWeight;}
+       Double_t GetZWeight(Float_t z, Int_t runnumber);
+       Double_t DodzFit(Float_t z, Double_t* par);
+
+       void SetUseNchWeight(Bool_t useWeight){fUseNchWeight=useWeight;}
+       Bool_t GetUseNchWeight() const {return fUseNchWeight;}
+       void SetMCNchHisto(TH1F* h){
+         if(fHistoMCNch) delete fHistoMCNch;
+         fHistoMCNch=new TH1F(*h);
+       }
+       void CreateMeasuredNchHisto();
+       void SetMeasuredNchHisto(TH1F* h){
+         if(fHistoMeasNch) delete fHistoMeasNch;
+         fHistoMeasNch=new TH1F(*h);
+       }
+       Double_t GetNchWeight(Int_t nch);
+       void SetMultiplicityEstimator(Int_t value){ fMultiplicityEstimator=value; }
+       Int_t GetMultiplicityEstimator(){ return fMultiplicityEstimator; }
+       void SetIsPPData(Bool_t flag){ fIsPPData = flag; }
+       void SetIsPPbData(Bool_t flag){ fIsPPbData = flag; }
+
+       void SetUseNchTrackletsWeight(Bool_t useWeight = kTRUE) { fUseNchWeight=useWeight; fUseTrackletsWeight=useWeight; }
+       Bool_t GetUseNchTrackletsWeight() const {return fUseTrackletsWeight;}
+
+       void SetUseZvtxCorrectedNtrkEstimator(Bool_t flag) { fZvtxCorrectedNtrkEstimator=flag; }
+       Bool_t GetUseZvtxCorrectedNtrkEstimator() { return fZvtxCorrectedNtrkEstimator; }
+       void SetMultiplVsZProfileLHC10b(TProfile* hprof){
+         if(fMultEstimatorAvg[0]) delete fMultEstimatorAvg[0];
+         fMultEstimatorAvg[0]=new TProfile(*hprof);
+       }
+       void SetMultiplVsZProfileLHC10c(TProfile* hprof){
+         if(fMultEstimatorAvg[1]) delete fMultEstimatorAvg[1];
+         fMultEstimatorAvg[1]=new TProfile(*hprof);
+       }
+       void SetMultiplVsZProfileLHC10d(TProfile* hprof){
+         if(fMultEstimatorAvg[2]) delete fMultEstimatorAvg[2];
+         fMultEstimatorAvg[2]=new TProfile(*hprof);
+       }
+       void SetMultiplVsZProfileLHC10e(TProfile* hprof){
+         if(fMultEstimatorAvg[3]) delete fMultEstimatorAvg[3];
+         fMultEstimatorAvg[3]=new TProfile(*hprof);
+       }
+       
+       void SetMultiplVsZProfileLHC13b(TProfile* hprof){
+         if(fMultEstimatorAvg[0]) delete fMultEstimatorAvg[0];
+         fMultEstimatorAvg[0]=new TProfile(*hprof);
+       }
+       void SetMultiplVsZProfileLHC13c(TProfile* hprof){
+         if(fMultEstimatorAvg[1]) delete fMultEstimatorAvg[1];
+         fMultEstimatorAvg[1]=new TProfile(*hprof);
+       }
+
+
+       TProfile* GetEstimatorHistogram(const AliVEvent* event);
+       void SetReferenceMultiplcity(Double_t rmu){fRefMult=rmu;}
+       
        void   SetDselection(UShort_t originDselection) {fOriginDselection=originDselection;}
        UShort_t GetDselection (){return fOriginDselection;}
        void SetSign(Char_t isSign) {fSign = isSign;}
@@ -132,11 +204,39 @@ public:
        
        void SetWeightFunction(TF1* func) {fFuncWeight = func;}
        TF1* GetWeightFunction() const {return fFuncWeight;}
-       
+       void SetPtWeightsFromFONLL276overLHC12a17a();
+       void SetPtWeightsFromDataPbPb276overLHC12a17a();
+       void SetPtWeightsFromFONLL276overLHC12a17b();
+       void SetPtWeightsFromFONLL276andBAMPSoverLHC12a17b();
+       void SetPtWeightsFromFONLL276overLHC10f6a();
+       void SetPtWeightsFromFONLL7overLHC10f6a();
+       void SetPtWeightsFromFONLL7overLHC12a12();
+       void SetPtWeightsFromFONLL7overLHC12a12bis();
+       void SetPtWeightsFromFONLL7overLHC13e2fix();
+       void SetPtWeightsFromFONLL5overLHC10f6a();
+       void SetPtWeightsFromFONLL5overLHC13d3();
+
+        void SetResonantDecay(UInt_t resonantDecay) {fResonantDecay = resonantDecay;}
+        UInt_t GetResonantDecay() const {return fResonantDecay;}
+
+       void SetKeepLctoK0Sp() {fLctoV0bachelorOption=1;}
+       void SetKeepLctoLambdaBarpi() {fLctoV0bachelorOption=2;}
+       void SetKeepLctoLambdapi() {fLctoV0bachelorOption=4;}
+       void SetKeepLctoV0bachelor() {fLctoV0bachelorOption=7;}
+
+       void SetCountLctoK0Sp(){fGenLctoV0bachelorOption=AliCFVertexingHFLctoV0bachelor::kCountK0Sp;}
+       void SetCountLctoLambdapi(){fGenLctoV0bachelorOption=AliCFVertexingHFLctoV0bachelor::kCountLambdapi;}
+    
+       void SetUseSelectionBit(Bool_t flag) { fUseSelectionBit=flag; }
+       Bool_t GetUseSelectionBit() const { return fUseSelectionBit; }
+
+       Bool_t ProcessLctoV0Bachelor(Int_t returnCodeDs) const;
+
 protected:
        AliCFManager   *fCFManager;   //  pointer to the CF manager
        TH1I *fHistEventsProcessed;   //! simple histo for monitoring the number of events processed
        THnSparse* fCorrelation;      //  response matrix for unfolding
+       TList  *fListProfiles; //list of profile histos for z-vtx correction
        Int_t fCountMC;               //  MC particle found
        Int_t fCountAcc;              //  MC particle found that satisfy acceptance cuts
        Int_t fCountVertex;       //  Reco particle found that satisfy vertex constrained
@@ -152,9 +252,13 @@ protected:
        UShort_t fOriginDselection;      // flag to select D0 origins. 0 Only from charm 1 only from beauty 2 both from charm and beauty
        Bool_t fAcceptanceUnf;        //  flag for unfolding before or after cuts.
        AliRDHFCuts* fCuts;            // cuts
-       Bool_t fUseWeight;             //flag to decide whether to use weights != 1 when filling the container or not
+       Bool_t fUseWeight;             //flag to decide whether to use pt-weights != 1 when filling the container or not
        Double_t fWeight;              //weight used to fill the container
-       Int_t fNvar;                   // number of variables for the container
+       Bool_t fUseFlatPtWeight;       // flag to decide to use a flat pt shape
+       Bool_t fUseZWeight;           // flag to decide whether to use z-vtx weights != 1 when filling the container or not
+       Bool_t fUseNchWeight;         // flag to decide whether to use Ncharged weights != 1 when filling the container or not
+       Bool_t fUseTrackletsWeight;   // flag to decide whether to use Ncharged weights != 1 when filling the container or not
+       Int_t fNvar;                  // number of variables for the container
        TString fPartName;    // D meson name
        TString fDauNames;    // daughter in fin state
        Char_t fSign;                 // flag to decide wheter to keep D0 only (0), D0bar only (1), or both D0 and D0bar (2)
@@ -166,8 +270,22 @@ protected:
        Int_t  fGenDsOption;     // Ds decay option (generation level)
        Int_t fConfiguration; // configuration (slow / fast) of the CF --> different variables will be allocated (all / reduced number)
        TF1* fFuncWeight;     // user-defined function to be used to calculate weights
+       TH1F* fHistoMeasNch;  // histogram with measured Nch distribution (pp 7 TeV)
+       TH1F* fHistoMCNch;  // histogram with Nch distribution from MC production
+        UInt_t fResonantDecay;  // resonant deacy channel to be used if the CF should be run on resonant channels only
+       Int_t fLctoV0bachelorOption; // Lc->V0+bachelor decay option (selection level)
+       Int_t fGenLctoV0bachelorOption; // Lc->V0+bachelor decay option (generation level)
+       Bool_t fUseSelectionBit;     // flag to use selection bit
+       UInt_t fPDGcode; // PDG code
 
-       ClassDef(AliCFTaskVertexingHF,10); // class for HF corrections as a function of many variables
+       Int_t fMultiplicityEstimator; // Definition of the multiplicity estimator: kNtrk10=0, kNtrk10to16=1, kVZERO=2
+       TProfile* fMultEstimatorAvg[4]; // TProfile with mult vas. Z per period
+       Double_t fRefMult;   // refrence multiplcity (period b)
+       Bool_t fZvtxCorrectedNtrkEstimator; // flag to use the z-vtx corrected (if not use uncorrected) multiplicity estimator
+       Bool_t fIsPPData; // flag for pp data (not checking centrality)
+       Bool_t fIsPPbData; // flag for pPb data (used for multiplicity corrections)
+   
+       ClassDef(AliCFTaskVertexingHF,19); // class for HF corrections as a function of many variables
 };
 
 #endif