#ifndef AliEmcalContainer_H
#define AliEmcalContainer_H
class TLorentzVector;
class AliVEvent;
class AliNamedArrayI;
#include <TNamed.h>
#include <TClonesArray.h>
class AliEmcalContainer : public TNamed {
public:
enum RejectionReason {
kNullObject = 1<<0,
kPtCut = 1<<1,
kAcceptanceCut = 1<<2,
kBitMapCut = 1<<3,
kMCFlag = 1<<8,
kMCGeneratorCut = 1<<9,
kChargeCut = 1<<10,
kMinDistanceTPCSectorEdgeCut = 1<<11,
kMinMCLabelAccept = 1<<12,
kIsEMCalCut = 1<<13,
kTimeCut = 1<<14,
kEnergyCut = 1<<15,
kAreaCut = 1<<18,
kAreaEmcCut = 1<<19,
kZLeadingChCut = 1<<20,
kZLeadingEmcCut = 1<<21,
kNEFCut = 1<<22,
kMinLeadPtCut = 1<<23,
kMaxTrackPtCut = 1<<24,
kMaxClusterPtCut = 1<<25,
kFlavourCut = 1<<26,
kTagStatus = 1<<27
};
AliEmcalContainer();
AliEmcalContainer(const char *name);
virtual ~AliEmcalContainer(){;}
TClonesArray *GetArray() const { return fClArray ; }
const TString& GetArrayName() const { return fClArrayName ; }
Int_t GetCurrentID() const { return fCurrentID-1 ; }
Bool_t GetIsParticleLevel() const { return fIsParticleLevel ; }
Int_t GetIndexFromLabel(Int_t lab) const;
Int_t GetNEntries() const { return fClArray->GetEntriesFast() ; }
virtual void GetMomentum(TLorentzVector &mom, Int_t i) const = 0;
void ResetCurrentID(Int_t i=0) { fCurrentID = i ; }
virtual void SetArray(AliVEvent *event);
void SetArrayName(const char *n) { fClArrayName = n ; }
void SetIsParticleLevel(Bool_t b) { fIsParticleLevel = b ; }
void SortArray() { fClArray->Sort() ; }
UInt_t GetRejectionReason() const { return fRejectionReason ; }
UInt_t TestRejectionReason(UInt_t rs) const { return fRejectionReason & rs ; }
UShort_t GetRejectionReasonBitPosition() const;
protected:
TString fClArrayName;
TString fClassName;
Bool_t fIsParticleLevel;
TClonesArray *fClArray;
Int_t fCurrentID;
AliNamedArrayI *fLabelMap;
Double_t fVertex[3];
UInt_t fRejectionReason;
private:
AliEmcalContainer(const AliEmcalContainer& obj);
AliEmcalContainer& operator=(const AliEmcalContainer& other);
ClassDef(AliEmcalContainer,4);
};
#endif