1 #ifndef ALIANALYSISETSELECTOR_H
2 #define ALIANALYSISETSELECTOR_H
3 //_________________________________________________________________________
4 // Utility Class for transverse energy studies
8 //*-- Authors: Oystein Djuvsland (Bergen)
9 //_________________________________________________________________________
11 #include "AliAnalysisEtCommon.h"
12 #include "AliESDEvent.h"
14 class AliESDCaloCluster;
17 class AliAnalysisEtCuts;
22 class AliAnalysisEtSelector : public AliAnalysisEtCommon
27 // Constructor takes cuts object
28 AliAnalysisEtSelector(AliAnalysisEtCuts *cuts);
29 AliAnalysisEtSelector();
32 virtual ~AliAnalysisEtSelector();
34 // Set the current event
35 virtual void SetEvent(const AliESDEvent *event);
38 virtual void Init() {}
41 virtual Int_t Init(const AliESDEvent *event) { fRunNumber = event->GetRunNumber(); return 0; }
43 // Return CaloClusters for the detector
44 virtual TRefArray* GetClusters() { return 0; }
46 virtual Float_t ShiftAngle(Float_t phi);//Always returns an angle in radians between -pi<phi<pi
48 // Return true if cluster has energy > cut
49 virtual Bool_t PassMinEnergyCut(const AliESDCaloCluster &/*cluster*/) const { return true; }
51 // Return true if cluster has energy > cut
52 virtual Bool_t PassMinEnergyCut(const TParticle &/*part*/) const { return true; }
54 virtual Bool_t PassMinEnergyCut(Double_t e) const;
56 // Cut on distance to bad channel
57 virtual Bool_t PassDistanceToBadChannelCut(const AliESDCaloCluster &/*cluster*/) const { return true; }
59 // Cut on track matching
60 virtual Bool_t PassTrackMatchingCut(const AliESDCaloCluster &/*cluster*/) const { return true; }
62 // Cut on neutral monte carlo particle
63 virtual Bool_t IsNeutralMcParticle(Int_t pIdx, AliStack& s, const TParticlePDG& pdg) const;
65 // Is it an EM E_T particle
66 virtual Bool_t IsEmEtParticle(const Int_t pdgCode) const;
68 // Does the particle come from an EM E_T primary ?
69 virtual Bool_t PrimaryIsEmEtParticle(const Int_t pIdx, AliStack &stack) const;
71 // Get the index of primary particle for the particle
72 Int_t GetPrimary(const Int_t partIdx, AliStack &stack) const;
74 // Cut on geometrical acceptance
75 virtual Bool_t CutGeometricalAcceptance(const TParticle &/*part*/) { return true; }
77 // Cut on geometrical acceptance
78 virtual Bool_t CutGeometricalAcceptance(const AliVTrack &/*part*/) { return true; }
80 // Cut on geometrical acceptance
81 virtual Bool_t CutGeometricalAcceptance(const AliESDCaloCluster &/*part*/) { return true; }
83 // From secondary vertex?
84 //virtual Bool_t FromSecondaryInteraction(const TParticle& part, AliStack& stack) const;
85 virtual Bool_t FromSecondaryInteraction(Int_t partID, AliStack& stack) const;
87 Int_t GetMother(Int_t partID, AliStack& stack) const;
88 Bool_t IsFromDetectorCover(Int_t partID, AliStack& stack) const;
89 Int_t GetFirstMotherNotFromDetectorCover(Int_t partID, AliStack& stack) const;
91 // Cluster is in correct detector
92 virtual Bool_t IsDetectorCluster(const AliESDCaloCluster &cluster) const = 0;
94 // Get correct cluster label - PHOS needs different method
95 virtual UInt_t GetLabel(const AliESDCaloCluster *cluster, AliStack *stack){if(!stack){return 0;}else{return TMath::Abs(cluster->GetLabel());}}
97 AliAnalysisEtCuts * GetCuts() const { return fCuts; }
100 const AliVEvent *fEvent; //! Pointer to current event
102 TRefArray *fClusterArray; //! Array of clusters
104 AliAnalysisEtCuts *fCuts; //! Pointer to the cuts object; DS: also in base class?
106 Bool_t SuspiciousDecayInChain(const UInt_t suspectMotherPdg, const UInt_t suspectDaughterPdg, const TParticle& part, AliStack& stack) const;
110 Bool_t fInitialized; // matrix initialized
114 //AliAnalysisEtSelector(); // Prohibited
115 AliAnalysisEtSelector(const AliAnalysisEtSelector& other);// Prohibited
116 AliAnalysisEtSelector& operator=(const AliAnalysisEtSelector& other);// Prohibited
117 bool operator==(const AliAnalysisEtSelector& other) const;// Prohibited
119 ClassDef(AliAnalysisEtSelector, 1);
122 #endif // ALIANALYSISETSELECTOR_H