AliPhysics  e59a9ba (e59a9ba)
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
AliEmcalContainer.h
Go to the documentation of this file.
2 
3 #ifndef ALIEMCALCONTAINER_H
4 #define ALIEMCALCONTAINER_H
5 /* Copyright(c) 1998-2016, ALICE Experiment at CERN, All rights reserved. *
6  * See cxx source for full Copyright notice */
7 
8 class TLorentzVector;
10 class AliVEvent;
11 class AliNamedArrayI;
12 class AliVParticle;
13 
14 #include <TNamed.h>
15 #include <TClonesArray.h>
16 
17 #if !(defined(__CINT__) || defined(__MAKECINT__))
20 #endif
21 
75 class AliEmcalContainer : public TObject {
76  public:
81  enum RejectionReason {
82  // General
83  kNullObject = 1<<0,
84  kPtCut = 1<<1,
85  kAcceptanceCut = 1<<2,
86  kMCLabelCut = 1<<3,
87  kBitMapCut = 1<<4,
88  kHFCut = 1<<5,
89  // leave bit 6 free for future implementations
90 
91  // AliParticleContainer
92  kNotHybridTrack = 1<<7,
93  kMCFlag = 1<<8,
94  kMCGeneratorCut = 1<<9,
95  kChargeCut = 1<<10,
96  kMinDistanceTPCSectorEdgeCut = 1<<11,
97  // leave bit 12 free for future implementations
98 
99  // AliClusterContainer
100  kIsEMCalCut = 1<<13,
101  kTimeCut = 1<<14,
102  kEnergyCut = 1<<15,
103  kExoticCut = 1<<16,
104  // leave bit 17 free for future implementations
105 
106  // AliJetContainer
107  kAreaCut = 1<<18,
108  kAreaEmcCut = 1<<19,
109  kZLeadingChCut = 1<<20,
110  kZLeadingEmcCut = 1<<21,
111  kNEFCut = 1<<22,
112  kMinLeadPtCut = 1<<23,
113  kMaxTrackPtCut = 1<<24,
114  kMaxClusterPtCut = 1<<25,
115  kFlavourCut = 1<<26,
116  kTagStatus = 1<<27,
117  kMinNConstituents = 1<<28,
118  kOverlapTpcHole = 1<<29
119  };
120 
121  AliEmcalContainer();
122  AliEmcalContainer(const char *name);
123  virtual ~AliEmcalContainer(){;}
124 
125  virtual TObject *operator[](int index) const = 0;
126 
127  virtual Bool_t ApplyKinematicCuts(const AliTLorentzVector& mom, UInt_t &rejectionReason) const;
128  TClonesArray *GetArray() const { return fClArray ; }
129  const TString& GetArrayName() const { return fClArrayName ; }
130  const TString& GetClassName() const { return fClassName ; }
131  Double_t GetMinE() const { return fMinE ; }
132  Double_t GetMaxE() const { return fMaxE ; }
133  Double_t GetMinPt() const { return fMinPt ; }
134  Double_t GetMaxPt() const { return fMaxPt ; }
135  Double_t GetMinEta() const { return fMinEta ; }
136  Double_t GetMaxEta() const { return fMaxEta ; }
137  Double_t GetMinPhi() const { return fMinPhi ; }
138  Double_t GetMaxPhi() const { return fMaxPhi ; }
139  Int_t GetCurrentID() const { return fCurrentID ; }
140  Bool_t GetIsParticleLevel() const { return fIsParticleLevel ; }
141  Int_t GetIndexFromLabel(Int_t lab) const;
142  Int_t GetNEntries() const { return fClArray->GetEntriesFast() ; }
143  virtual Bool_t GetMomentum(TLorentzVector &mom, Int_t i) const = 0;
144  virtual Bool_t GetAcceptMomentum(TLorentzVector &mom, Int_t i) const = 0;
145  virtual Bool_t GetNextMomentum(TLorentzVector &mom) = 0;
146  virtual Bool_t GetNextAcceptMomentum(TLorentzVector &mom) = 0;
147  virtual Bool_t AcceptObject(Int_t i, UInt_t &rejectionReason) const = 0;
148  virtual Bool_t AcceptObject(const TObject* obj, UInt_t &rejectionReason) const = 0;
149  Int_t GetNAcceptEntries() const;
150  void ResetCurrentID(Int_t i=-1) { fCurrentID = i ; }
151  virtual void SetArray(const AliVEvent *event);
152  void SetArrayName(const char *n) { fClArrayName = n ; }
153  void SetBitMap(UInt_t m) { fBitMap = m ; }
154  void SetIsParticleLevel(Bool_t b) { fIsParticleLevel = b ; }
155  void SortArray() { fClArray->Sort() ; }
156  UShort_t GetRejectionReasonBitPosition(UInt_t rejectionReason) const;
157  TClass* GetLoadedClass() { return fLoadedClass ; }
158  virtual void NextEvent() {;}
159  void SetMinMCLabel(Int_t s) { fMinMCLabel = s ; }
160  void SetMaxMCLabel(Int_t s) { fMaxMCLabel = s ; }
161  void SetMCLabelRange(Int_t min, Int_t max) { SetMinMCLabel(min) ; SetMaxMCLabel(max) ; }
162  void SetELimits(Double_t min, Double_t max) { fMinE = min ; fMaxE = max ; }
163  void SetMinE(Double_t min) { fMinE = min ; }
164  void SetMaxE(Double_t max) { fMaxE = max ; }
165  void SetPtLimits(Double_t min, Double_t max) { fMinPt = min ; fMaxPt = max ; }
166  void SetMinPt(Double_t min) { fMinPt = min ; }
167  void SetMaxPt(Double_t max) { fMaxPt = max ; }
168  void SetEtaLimits(Double_t min, Double_t max) { fMaxEta = max ; fMinEta = min ; }
169  void SetPhiLimits(Double_t min, Double_t max) { fMaxPhi = max ; fMinPhi = min ; }
170  void SetMassHypothesis(Double_t m) { fMassHypothesis = m ; }
171  void SetClassName(const char *clname);
172 
173  const char* GetName() const { return fName.Data() ; }
174  void SetName(const char* n) { fName = n ; }
175 
176  static Double_t RelativePhi(Double_t ang1, Double_t ang2);
177  static Bool_t SamePart(const AliVParticle* part1, const AliVParticle* part2, Double_t dist = 1.e-4);
178 
179 #if !(defined(__CINT__) || defined(__MAKECINT__))
180  const AliEmcalIterableContainer all() const;
181  const AliEmcalIterableContainer accepted() const;
182 
183  const AliEmcalIterableMomentumContainer all_momentum() const;
184  const AliEmcalIterableMomentumContainer accepted_momentum() const;
185 #endif
186 
187  protected:
188  TString fName;
189  TString fClArrayName;
190  TString fBaseClassName;
191  Bool_t fIsParticleLevel;
192  UInt_t fBitMap;
193  Double_t fMinPt;
194  Double_t fMaxPt;
195  Double_t fMaxE;
196  Double_t fMinE;
197  Double_t fMinEta;
198  Double_t fMaxEta;
199  Double_t fMinPhi;
200  Double_t fMaxPhi;
201  Int_t fMinMCLabel;
202  Int_t fMaxMCLabel;
203  Double_t fMassHypothesis;
204  TClonesArray *fClArray;
205  Int_t fCurrentID;
206  AliNamedArrayI *fLabelMap;
207  Double_t fVertex[3];
208  TClass *fLoadedClass;
209 
210  private:
211  TString fClassName;
212 
213  AliEmcalContainer(const AliEmcalContainer& obj); // copy constructor
214  AliEmcalContainer& operator=(const AliEmcalContainer& other); // assignment
215 
217  ClassDef(AliEmcalContainer,8);
219 };
220 #endif
Container implementing iterable functionality of the EMCAL containers.