]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGHF/vertexingHF/AliCFVertexingHF.h
consolidate zero-length arrays (aka struct hack)
[u/mrichter/AliRoot.git] / PWGHF / vertexingHF / AliCFVertexingHF.h
1 #ifndef ALICFVERTEXINGHF_H
2 #define ALICFVERTEXINGHF_H
3
4
5 /**************************************************************************
6  * Copyright(c) 1998-2009, ALICE Experiment at CERN, All rights reserved. *
7  *                                                                        *
8  * Author: The ALICE Off-line Project.                                    *
9  * Contributors are mentioned in the code where appropriate.              *
10  *                                                                        *
11  * Permission to use, copy, modify and distribute this software and its   *
12  * documentation strictly for non-commercial purposes is hereby granted   *
13  * without fee, provided that the above copyright notice appears in all   *
14  * copies and that both the copyright notice and this permission notice   *
15  * appear in the supporting documentation. The authors make no claims     *
16  * about the suitability of this software for any purpose. It is          *
17  * provided "as is" without express or implied warranty.                  *
18  **************************************************************************/
19
20 //-----------------------------------------------------------------------
21 // Class for HF corrections as a function of many variables and step 
22 // Author : C. Zampolli, CERN
23 // D. Caffarri, Univ & INFN Padova caffarri@pd.infn.it
24 // Base class for HF Unfolding - agrelli@uu.nl
25 //-----------------------------------------------------------------------
26
27 #include "AliCFContainer.h"
28 #include "AliAODRecoDecayHF.h"
29
30 class TH1I;
31 class TParticle ;
32 class TFile ;
33 class TClonesArray ;
34 class AliAODMCParticle;
35 class AliAODMCHeader;
36 class AliAODEvent;
37 class THnSparse;
38 class TClonesArray;
39 class AliESDtrackCuts;
40
41
42
43 class AliCFVertexingHF : public TObject {
44         public:
45
46   enum DecayChannel{kD0toKpi = 2, kDStartoKpipi = 21, kLctoV0bachelor = 22, kDplustoKpipi = 31, kLctopKpi = 32, kDstoKKpi = 33, kD0toKpipipi = 4};
47
48         AliCFVertexingHF() ;
49         AliCFVertexingHF(TClonesArray *mcArray, UShort_t originDselection);
50         AliCFVertexingHF(const AliCFVertexingHF& c);
51         AliCFVertexingHF& operator= (const AliCFVertexingHF& c);
52
53         virtual ~AliCFVertexingHF();
54                 
55         virtual Bool_t GetGeneratedValuesFromMCParticle(Double_t* /*vectorMC*/) {return kFALSE;} 
56         virtual Bool_t GetRecoValuesFromCandidate(Double_t* /*vectorReco*/) const {return kFALSE;}
57         virtual Bool_t CheckMCChannelDecay() const {return kFALSE;}
58         virtual Bool_t SetRecoCandidateParam(AliAODRecoDecayHF* /*recoCand*/) {return kFALSE;}
59
60         virtual void SetDecay3Prong(Int_t /*decay*/){};
61         
62         void   SetFillFromGenerated(Bool_t flag) {fFillFromGenerated = flag;}
63         Bool_t GetFillFromGenerated() const {return fFillFromGenerated;}
64                 
65         void  SetNVar(Int_t nVar) {fNVar = nVar;}  
66
67         void  SetRecoPrimVertex (Double_t zPrimVertex) {fzPrimVertex = zPrimVertex;}
68         void  SetMCPrimaryVertex (Double_t zMCVertex){fzMCVertex = zMCVertex;}
69         void  SetMCLabel (Int_t mcLabel) {fmcLabel = mcLabel;}
70         Int_t GetMCLabel () const {return  fmcLabel;}
71                 
72         void   SetMCCandidateParam(Int_t label);
73
74         Int_t  MCcquarkCounting(AliAODMCParticle* mcPart) const; 
75         Bool_t CheckMCPartFamily(AliAODMCParticle */*mcPart*/, TClonesArray */*mcArray*/) const;
76         //      Int_t  CheckOrigin(AliAODMCParticle* mcPart) const;
77         Int_t  CheckOrigin() const;
78         Bool_t CheckMCDaughters() const;
79         Bool_t FillMCContainer(Double_t *containerInputMC); 
80         Bool_t FillRecoContainer(Double_t *containerInput); 
81         Bool_t MCAcceptanceStep() const;
82         Bool_t MCRefitStep(AliAODEvent *aodEvent, AliESDtrackCuts **trackCuts) const;
83         Bool_t RecoStep();
84
85         virtual Double_t GetEtaProng(Int_t iProng) const;
86         virtual Double_t GetPtProng(Int_t iProng) const;
87
88         Double_t GetPtCand() const {return fRecoCandidate->Pt();}
89         Double_t GetYCand(UInt_t pdg) const {return fRecoCandidate->Y(pdg);}
90
91         Bool_t RecoAcceptStep(AliESDtrackCuts **trackCuts) const;
92         
93         Bool_t FillUnfoldingMatrix(UInt_t pdg, Double_t fill[4]) const;
94         
95         void SetNProngs(Int_t nProngs){fProngs = nProngs;}
96         Int_t GetNProngs() const {return fProngs;}
97         void SetDselection(UShort_t originDselection); 
98         UShort_t GetDselection() {return fOriginDselection;}; 
99         Int_t CheckReflexion(Char_t isSign);
100         virtual Bool_t SetLabelArray();
101
102         void SetCentralityValue(Float_t centValue) {fCentValue = centValue;}
103
104         virtual void SetPtAccCut(Float_t* ptAccCut);
105         virtual void SetEtaAccCut(Float_t* etaAccCut);
106         virtual void SetAccCut(Float_t* ptAccCut, Float_t* etaAccCut);
107         virtual void SetAccCut();
108         virtual void SetGeneratedDsOption(Int_t /*opt*/){
109           AliError("Method implemented in derived class");
110         }
111
112         void SetFakeSelection(Int_t fakeSel){fFakeSelection = fakeSel;}
113         Int_t GetFakeSelection(){return fFakeSelection;}
114
115         void SetRejectCandidateIfNotFromQuark(Bool_t opt){fRejectIfNoQuark=opt;}
116
117         void SetMultiplicity(Double_t multiplicity) {fMultiplicity = multiplicity;}
118         void SetConfiguration(Int_t configuration) {fConfiguration = configuration;}
119
120         protected:
121         
122         TClonesArray      *fmcArray;               //mcArray candidate
123         AliAODRecoDecayHF *fRecoCandidate;         // Reconstructed HF candidate 
124         AliAODMCParticle  *fmcPartCandidate;
125         Int_t fNDaughters;
126         Int_t fNVar;                // get Number of variables for the container from the channel decay
127         Double_t fzPrimVertex;       //Reco z primary vertex    
128         Double_t fzMCVertex;         //MC z primary vertex
129         
130         Bool_t fFillFromGenerated;   //  flag to indicate whether data container should be filled  
131         UShort_t fOriginDselection;      // flag to select D0 origins. 0 Only from charm 1 only from beauty 2 both from charm and beauty
132         
133         Bool_t fKeepDfromB;           //flag for the feed down from b quark decay.                      
134         Bool_t fKeepDfromBOnly;       // flag to keep only the charm particles that comes from beauty decays
135         Int_t fmcLabel;              // results of the MatchToMC()
136         Int_t fProngs;               // n. of prongs    
137         Int_t* fLabelArray;          //[fProngs]  array of labels
138
139         Float_t fCentValue;         // centrality value
140         Float_t* fPtAccCut;         //[fProngs] array of pt cut values for the Acceptance (MC+Rec) steps 
141         Float_t* fEtaAccCut;          //[fProngs] array of eta (absolute value) cut values for the Acceptance (MC+Rec) steps 
142         Int_t fFakeSelection; // fakes selection: 0 --> all, 1 --> non-fake, 2 --> fake
143         Float_t fFake;              // variable to indicate whether the D0 was a fake or not: 0 --> fake, 1 --> MC, 2 --> non-fake
144         Bool_t fRejectIfNoQuark;  // flag to remove events not geenrated with PYTHIA
145         Double_t fMultiplicity;    // multiplicity of the event
146         Int_t fConfiguration;    // configuration (slow / fast) of the CF --> different variables will be allocated (all / reduced number)
147
148         ClassDef(AliCFVertexingHF, 7);
149         
150 };
151
152 #endif