]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWGLF/totEt/AliAnalysisEtSelector.h
- modified addtask for pp for GammaConvV1
[u/mrichter/AliRoot.git] / PWGLF / totEt / AliAnalysisEtSelector.h
index b44660c4437aafe2a52bbf003374deee9a5a2794..92e20a30944a0958af9893efe288b47961155bfb 100644 (file)
 #ifndef ALIANALYSISETSELECTOR_H
 #define ALIANALYSISETSELECTOR_H
+//_________________________________________________________________________
+//  Utility Class for transverse energy studies
+//  Selector Base class
+//  -  
+//
+//*-- Authors: Oystein Djuvsland (Bergen)
+//_________________________________________________________________________
 #include <Rtypes.h>
+#include "AliAnalysisEtCommon.h"
+#include "AliESDEvent.h"
 
-class AliVEvent;
 class AliESDCaloCluster;
+class AliVTrack;
 class TRefArray;
 class AliAnalysisEtCuts;
-class AliAnalysisEtSelector
+class TParticle;
+class TParticlePDG;
+class AliStack;
+
+class AliAnalysisEtSelector : public AliAnalysisEtCommon
 {
 
 public:
   
     // Constructor takes cuts object
     AliAnalysisEtSelector(AliAnalysisEtCuts *cuts);
+    AliAnalysisEtSelector();
     
     // Destructor 
     virtual ~AliAnalysisEtSelector();
     
     // Set the current event
-    void SetEvent(const AliVEvent *event) { fEvent = event; }
+    virtual void SetEvent(const AliESDEvent *event);
+    
+    // Init
+    virtual void Init() {} 
     
-    // Init 
-    virtual Int_t Init(Int_t runNumber) { fRunNumber = runNumber; return 0; }
+    // Init with event
+    virtual Int_t Init(const AliESDEvent *event) { fRunNumber = event->GetRunNumber(); return 0; }
     
     // Return CaloClusters for the detector
-    virtual TRefArray* GetClusters() = 0;
+    virtual TRefArray* GetClusters() { return 0; }
+
+    virtual Float_t ShiftAngle(Float_t phi);//Always returns an angle in radians between -pi<phi<pi
     
     // Return true if cluster has energy > cut
-    virtual Bool_t CutMinEnergy(const AliESDCaloCluster & /*cluster*/) const { return true; }
+    virtual Bool_t PassMinEnergyCut(const AliESDCaloCluster &/*cluster*/) const { return true; }
+    
+    // Return true if cluster has energy > cut
+    virtual Bool_t PassMinEnergyCut(const TParticle &/*part*/) const { return true; }
+
+    virtual Bool_t PassMinEnergyCut(Double_t e) const;
     
     // Cut on distance to bad channel
-    virtual Bool_t CutDistanceToBadChannel(const AliESDCaloCluster & /*cluster*/) const { return true; }
+    virtual Bool_t PassDistanceToBadChannelCut(const AliESDCaloCluster &/*cluster*/) const { return true; }
     
     // Cut on track matching
-    virtual Bool_t CutTrackMatching(const AliESDCaloCluster& /*cluster*/, Double_t &/*r*/) const { return true; }
-  
+    virtual Bool_t PassTrackMatchingCut(const AliESDCaloCluster &/*cluster*/) const { return true; }
+    
+    // Cut on neutral monte carlo particle
+    virtual Bool_t IsNeutralMcParticle(Int_t pIdx, AliStack& s, const TParticlePDG& pdg) const;
+    
+    // Is it an EM E_T particle
+    virtual Bool_t IsEmEtParticle(const Int_t pdgCode) const;
+    
+    // Does the particle come from an EM E_T primary ?
+    virtual Bool_t PrimaryIsEmEtParticle(const Int_t pIdx, AliStack &stack) const;
+
+    // Get the index of primary particle for the particle
+    Int_t GetPrimary(const Int_t partIdx, AliStack &stack) const;
+    
+    // Cut on geometrical acceptance 
+    virtual Bool_t CutGeometricalAcceptance(const TParticle &/*part*/) { return true; }
+    
+    // Cut on geometrical acceptance 
+    virtual Bool_t CutGeometricalAcceptance(const AliVTrack &/*part*/) { return true; }
+    
+    // Cut on geometrical acceptance 
+    virtual Bool_t CutGeometricalAcceptance(const AliESDCaloCluster &/*part*/) { return true; }
+    
+    // From secondary vertex?
+    //virtual Bool_t FromSecondaryInteraction(const TParticle& part, AliStack& stack) const;
+    virtual Bool_t FromSecondaryInteraction(Int_t partID, AliStack& stack) const;
+
+    Int_t GetMother(Int_t partID, AliStack& stack) const;
+    Bool_t IsFromDetectorCover(Int_t partID, AliStack& stack) const;
+    Int_t GetFirstMotherNotFromDetectorCover(Int_t partID, AliStack& stack) const;
+    
+    // Cluster is in correct detector
+    virtual Bool_t IsDetectorCluster(const AliESDCaloCluster &cluster) const = 0;
+
+    // Get correct cluster label - PHOS needs different method
+    virtual UInt_t GetLabel(const AliESDCaloCluster *cluster, AliStack *stack){if(!stack){return 0;}else{return TMath::Abs(cluster->GetLabel());}}
+    
+    AliAnalysisEtCuts * GetCuts() const { return fCuts; }
 protected:
   
-    const AliVEvent *fEvent; // Pointer to current event
+    const AliVEvent *fEvent; //! Pointer to current event
+
+    TRefArray *fClusterArray; //! Array of clusters
 
-    AliAnalysisEtCuts *fCuts; // Pointer to the cuts object
+    AliAnalysisEtCuts *fCuts; //! Pointer to the cuts object; DS: also in base class?
     
-    Int_t fRunNumber;
+    Bool_t SuspiciousDecayInChain(const UInt_t suspectMotherPdg, const UInt_t suspectDaughterPdg, const TParticle& part, AliStack& stack) const;
     
+    Int_t fRunNumber;
+
+    Bool_t fInitialized; // matrix initialized
+
 private:
 
-    AliAnalysisEtSelector(); // Prohibited
+    //AliAnalysisEtSelector(); // Prohibited
     AliAnalysisEtSelector(const AliAnalysisEtSelector& other);// Prohibited
     AliAnalysisEtSelector& operator=(const AliAnalysisEtSelector& other);// Prohibited
     bool operator==(const AliAnalysisEtSelector& other) const;// Prohibited