Incrementing class version.
[u/mrichter/AliRoot.git] / PWGHF / correlationHF / AliDxHFEParticleSelectionEl.h
1 //-*- Mode: C++ -*-
2 // // $Id$
3
4 //* This file is property of and copyright by the ALICE Project        * 
5 //* ALICE Experiment at CERN, All rights reserved.                     *
6 //* See cxx source for full Copyright notice                           *
7
8 /// @file   AliDxHFEParticleSelectionEl.h
9 /// @author Sedat Altinpinar, Hege Erdal, Matthias Richter
10 /// @date   2012-03-19
11 /// @brief  Electron selection for D-HFE correlations
12 ///
13
14 #ifndef ALIDXHFEPARTICLESELECTIONEL_H
15 #define ALIDXHFEPARTICLESELECTIONEL_H
16
17 #include "AliDxHFEParticleSelection.h"
18
19 // 2012-09-17: there has been a problem in the dictionary generation for par file
20 // compilation, so we have to include the header files indicated below
21 //  Generating dictionary ...
22 //  In file included from $ROOTSYS/include/TObject.h:230:0,
23 //                   from G__PWGHFcorrelationHF.h:32,
24 //                   from G__PWGHFcorrelationHF.cxx:17:
25 //  $ROOTSYS/include/TBuffer.h: In function ‘TBuffer& operator>>(TBuffer&, Tmpl*&) [with Tmpl = AliHFEcuts]’:
26 //  G__PWGHFcorrelationHF.cxx:1658:15:   instantiated from here
27 //  $ROOTSYS/include/TBuffer.h:373:47: error: invalid use of incomplete type ‘struct AliHFEcuts’
28 //  correlationHF/AliDxHFEParticleSelectionEl.h:25:7: error: forward declaration of ‘struct AliHFEcuts’
29
30 #include "AliHFEcuts.h" // need to directly include to avoid compilation error in the dictionary
31 #include "AliHFEpid.h"  // need to directly include to avoid compilation error in the dictionary
32
33 class AliPID;
34 class AliPIDResponse;
35 class AliHFEvarManager;
36 class AliHFEpidBase;
37 class AliHFEtools;
38 class AliVEvent;
39 class AliSelectNonHFE;
40 class AliCFManager;
41 class TList;
42 class AliESDtrackCuts;
43
44 /**
45  * @class AliDxHFEParticleSelectionEl
46  * Electron selection for D-HFE correlations, implements the specific
47  * selection criteria.
48  */
49 class AliDxHFEParticleSelectionEl : public AliDxHFEParticleSelection {
50   public:
51   /// constructor
52   AliDxHFEParticleSelectionEl(const char* opt="");
53   /// destructor
54   virtual ~AliDxHFEParticleSelectionEl();
55   
56   enum {
57     kCutHFE = 0,
58     kCutPIDTOFTPC = 1,
59     kCutPIDTOF = 2,
60     kCutPIDTPC = 3,
61     kCutList=3,
62     kNCuts
63   };
64
65   enum {
66     kNotSelected=-2,
67     kNoCuts=-1,
68     kRecKineITSTPC=0,
69     kRecPrim,
70     kHFEcutsITS,
71     kHFEcutsTOF,
72     kHFEcutsTPC,
73     kPIDTOF,
74     kPIDTPC,
75     kPIDTOFTPC,
76     kINVMASS,
77     kSelected,
78     kNCutLabels
79   };
80
81   enum {
82     kNoInvMass=0,
83     kInvMassSingleSelected, // based on AliSelectNonHFE, one partcle passing track cuts
84                             // and 2nd particle passing weaker cut
85     kInvMassTwoSelected     // pairs of particles both passing the track cuts
86   };
87
88
89   ///overloaded from AliDxHFEParticleSelection: Init
90   virtual int Init();
91
92   /// overloaded from AliDxHFEParticleSelection: init the control objects
93   virtual int InitControlObjects();
94   virtual THnSparse* DefineTHnSparse();
95
96   /// overloaded from AliDxHFEParticleSelection: check particle
97   virtual TObjArray* Select(const AliVEvent* pEvent);
98   using AliDxHFEParticleSelection::Select;
99
100   virtual int IsSelected(AliVParticle* p, const AliVEvent* pEvent);
101
102   virtual int HistogramParticleProperties(AliVParticle* p, int selected);
103
104   virtual int FillParticleProperties(AliVParticle* p, Double_t* date, int dimension) const;
105
106   /// set cuts object: a type cast check is implemented in the method
107   virtual void SetCuts(TObject* /*cuts*/, int /*level*/=0);
108   virtual void SetFinalCutStep(int cutstep){fFinalCutStep=cutstep;}
109   virtual void SetStoreLastCutStep(bool storecut){fStoreCutStepInfo=storecut;}
110
111   virtual void SetPIDResponse(const AliPIDResponse* const pidresp){fPIDResponse=(AliPIDResponse*)(pidresp);}
112   
113   Int_t GetLastSurvivedCutsStep() const{return fSurvivedCutStep;}
114
115  protected:
116
117  private:
118
119   /// copy contructor prohibited
120   AliDxHFEParticleSelectionEl(const AliDxHFEParticleSelectionEl&);
121   /// assignment operator prohibited
122   AliDxHFEParticleSelectionEl& operator=(const AliDxHFEParticleSelectionEl&);
123  
124   /// check cut of specified step, e.g.
125   bool ProcessCutStep(Int_t cutStep, AliVParticle *track);
126   int ParseArguments(const char* arguments);
127
128   virtual void InvMassFilter(TList* elList, Bool_t* selIndx);
129
130   AliHFEpid*    fPIDTOFTPC;          //! the PID object
131   AliHFEpid*    fPIDTOF;             //! the PID TOF object
132   AliHFEpid*    fPIDTPC;             //! the PID TOF object
133   THnSparse*    fElectronProperties; // the particle properties of selected particles
134   TList*        fHistoList;          // list of histograms
135   TList*        fCutPidList;         // list for pid and cut objects
136   AliPIDResponse* fPIDResponse;      // fPIDResponse
137   AliHFEcuts*   fCuts;               //! Cuts for HF electrons
138   AliSelectNonHFE* fSelNHFE;         // AliSelectNonHFE, inv-mass selection
139   AliESDtrackCuts* fTrackCuts;       //! Track cuts for associated track for Inv Mass
140   AliCFManager* fCFM;                //! Correction Framework Manager
141   Int_t         fFinalCutStep;       // Holds the final cutstep
142   Double_t      fInvMassLow;         // lower inv-mass cut
143   Int_t         fUseInvMassCut;      // whether to use inv mass cut
144   Int_t         fSystem;             // whether running on pp(0,default), PbPb(1) or pPb(2, not used yet)
145   Int_t         fTrackNum;           // Current track number
146   Double_t      fImpactParamCutRadial; // cut on Impact parameter (when storing all tracks)
147   Double_t      fEtaCut;             // cut on eta (when storing all tracks)
148   Int_t         fSurvivedCutStep;    // Last cutstep it survived
149   Bool_t        fStoreCutStepInfo;   // Whether to store which cut step is the effective one
150
151   static const char* fgkCutBinNames[]; //! bin labels for cuts histogram
152
153   ClassDef(AliDxHFEParticleSelectionEl, 6); 
154 };
155
156 #endif