Changes to compute efficiencies for particle or antiparticle separately (ChiaraZ...
[u/mrichter/AliRoot.git] / PWG3 / vertexingHF / AliCFHeavyFlavourTaskMultiVarMultiStep.h
1 #ifndef ALICFHEAVYFLAVOURTASKMULTIVARMULTISTEP_H
2 #define ALICFHEAVYFLAVOURTASKMULTIVARMULTISTEP_H
3 /**************************************************************************
4  * Copyright(c) 1998-2009, ALICE Experiment at CERN, All rights reserved. *
5  *                                                                        *
6  * Author: The ALICE Off-line Project.                                    *
7  * Contributors are mentioned in the code where appropriate.              *
8  *                                                                        *
9  * Permission to use, copy, modify and distribute this software and its   *
10  * documentation strictly for non-commercial purposes is hereby granted   *
11  * without fee, provided that the above copyright notice appears in all   *
12  * copies and that both the copyright notice and this permission notice   *
13  * appear in the supporting documentation. The authors make no claims     *
14  * about the suitability of this software for any purpose. It is          *
15  * provided "as is" without express or implied warranty.                  *
16  **************************************************************************/
17
18 //-----------------------------------------------------------------------
19 // Class for HF corrections as a function of many variables and step 
20 // Author : C. Zampolli, CERN
21 // Base class for HF Unfolding - agrelli@uu.nl
22 //-----------------------------------------------------------------------
23
24
25 #include "AliAnalysisTaskSE.h"
26
27 class TH1I;
28 class TParticle ;
29 class TFile ;
30 class TClonesArray ;
31 class AliCFManager;
32 class AliAODRecoDecay;
33 class AliAODRecoDecayHF2Prong;
34 class AliAODMCParticle;
35 class THnSparse;
36 class AliRDHFCutsD0toKpi;
37
38 class AliCFHeavyFlavourTaskMultiVarMultiStep : public AliAnalysisTaskSE {
39   public:
40
41   enum {
42     kStepGeneratedLimAcc = 0,
43     kStepGenerated       = 1,
44     kStepAcceptance      = 2,
45     kStepVertex          = 3,
46     kStepRefit           = 4,
47     kStepReconstructed   = 5,
48     kStepRecoAcceptance  = 6,
49     kStepRecoITSClusters = 7,
50     kStepRecoPPR         = 8,
51     kStepRecoPID         = 9
52   };
53
54   AliCFHeavyFlavourTaskMultiVarMultiStep();
55   AliCFHeavyFlavourTaskMultiVarMultiStep(const Char_t* name, AliRDHFCutsD0toKpi* cuts);
56   AliCFHeavyFlavourTaskMultiVarMultiStep& operator= (const AliCFHeavyFlavourTaskMultiVarMultiStep& c);
57   AliCFHeavyFlavourTaskMultiVarMultiStep(const AliCFHeavyFlavourTaskMultiVarMultiStep& c);
58   virtual ~AliCFHeavyFlavourTaskMultiVarMultiStep();
59
60   // ANALYSIS FRAMEWORK STUFF to loop on data and fill output objects
61   void     UserCreateOutputObjects();
62   void     UserExec(Option_t *option);
63   void     Init();
64   void     LocalInit() {Init();}
65   void     Terminate(Option_t *);
66
67  // UNFOLDING
68   void     SetCorrelationMatrix(THnSparse* h) {fCorrelation=h;}
69   void     SetAcceptanceUnf(Bool_t AcceptanceUnf) {fAcceptanceUnf = AcceptanceUnf;}
70   Bool_t   GetAcceptanceUnf() const {return fAcceptanceUnf;}
71
72   
73   // CORRECTION FRAMEWORK RELATED FUNCTIONS
74   void           SetCFManager(AliCFManager* io) {fCFManager = io;}   // global correction manager
75   AliCFManager * GetCFManager()                 {return fCFManager;} // get corr manager
76
77   void     SetPDG(Int_t code) {fPDG = code; }     // defines the PDG code of searched HF
78   Double_t CosThetaStar(AliAODMCParticle* mcPart, AliAODMCParticle* mcPartDaughter0, AliAODMCParticle* mcPartDaughter1) const;  // returns cos(ThetaStar) of the D0 decay
79   Double_t CT(AliAODMCParticle* mcPart, AliAODMCParticle* mcPartDaughter0, AliAODMCParticle* mcPartDaughter1) const;            // returns cT of the D0 decay
80   void     SetFillFromGenerated(Bool_t flag) {fFillFromGenerated = flag;}
81   Bool_t   GetFillFromGenerated() const {return fFillFromGenerated;}
82   Bool_t   GetGeneratedValuesFromMCParticle(AliAODMCParticle* mcPart, TClonesArray* mcArray, Double_t* vectorMC) const;
83   void     SetMinITSClusters(Int_t minITSClusters) {fMinITSClusters = minITSClusters;}
84   Int_t    GetMinITSClusters() const {return fMinITSClusters;}
85   Int_t    CheckOrigin(AliAODMCParticle* mcPart, TClonesArray* mcArray) const;
86
87   void SetKeepD0fromB(Bool_t keepD0fromB){fKeepD0fromB=keepD0fromB;}
88   Bool_t GetKeepD0fromB(){return fKeepD0fromB;}
89   void SetKeepD0fromBOnly(Bool_t keepD0fromBOnly){ fKeepD0fromBOnly=keepD0fromBOnly; }
90   Bool_t GetKeepD0fromBOnly(){ return fKeepD0fromBOnly;}
91   void SetUseWeight(Bool_t useWeight){fUseWeight=useWeight;}
92   Bool_t GetUseWeight() const {return fUseWeight;}
93   Double_t GetWeight(Float_t pt);
94   Double_t dNdptFit(Float_t pt, Double_t* par);
95   void SetSign(Char_t isSign) {fSign = isSign;}
96   Char_t GetSign() {return fSign;}
97
98  protected:
99   Int_t           fPDG;         //  PDG code of searched V0's
100   AliCFManager   *fCFManager;   //  pointer to the CF manager
101   TH1I *fHistEventsProcessed;   //! simple histo for monitoring the number of events processed
102   THnSparse* fCorrelation;      //  response matrix for unfolding
103   Int_t fCountMC;               //  MC particle found
104   Int_t fCountAcc;              //  MC particle found that satisfy acceptance cuts
105   Int_t fCountVertex;       //  Reco particle found that satisfy vertex constrained
106   Int_t fCountRefit;        //  Reco particle found that satisfy kTPCrefit and kITSrefit
107   Int_t fCountReco;             //  Reco particle found that satisfy cuts
108   Int_t fCountRecoAcc;          //  Reco particle found that satisfy cuts in requested acceptance
109   Int_t fCountRecoITSClusters;  //  Reco particle found that satisfy cuts in n. of ITS clusters
110   Int_t fCountRecoPPR;          //  Reco particle found that satisfy cuts in PPR
111   Int_t fCountRecoPID;          //  Reco particle found that satisfy cuts in PPR, and PID condition
112   Int_t fEvents;                //  n. of events
113   Bool_t fFillFromGenerated;    //  flag to indicate whether data container should be filled 
114                                 //  with generated values also for reconstructed particles
115   Int_t fMinITSClusters;        //  min n. of ITS clusters for RecoDecay
116   Bool_t fAcceptanceUnf;        //  flag for unfolding before or after cuts.
117
118   Bool_t fKeepD0fromB;          // flag to consider also D0 coming from B
119   Bool_t fKeepD0fromBOnly;      // flag to consider _only_ D0 coming from B
120   AliRDHFCutsD0toKpi* fCuts;    // cuts
121   Bool_t fUseWeight;            // flag to decide whether to use weights != 1 when filling the container or not
122   Double_t fWeight;             // weight used to fill the container
123   Char_t fSign;                 // flag to decide wheter to keep D0 only (0), D0bar only (1), or both D0 and D0bar (2)
124   
125   ClassDef(AliCFHeavyFlavourTaskMultiVarMultiStep,7); // class for HF corrections as a function of many variables
126 };
127
128 #endif