ROOT logo
#ifndef ALIESDMUONTRACKCUTS_H
#define ALIESDMUONTRACKCUTS_H

/* $Id$ */ 

//
//  Class for handling of ESD Muon track cuts 
//  (based on ANALYSIS/AliESDtrackCuts).
//
//  The class manages some kinematic cuts. Two methods
//  can be used to figure out if an ESD Muon track survives the cuts:
//  AcceptTrack which takes a single AliESDMuonTrack as argument and
//  returns kTRUE/kFALSE or GetAcceptedTracks which takes an AliESD
//  object and returns an TObjArray (of AliESDMuonTracks) with the tracks
//  in the ESD that survived the cuts.
//

#include <TF1.h>
#include <TH2.h>
#include "AliAnalysisCuts.h"

class AliESD;
class AliESDEvent;
class AliESDMuonTrack;
class AliLog;
class TTree;

class AliESDMuonTrackCuts : public AliAnalysisCuts
{
public:
  AliESDMuonTrackCuts(const Char_t* name = "AliESDMuonTrackCuts", const Char_t* title = "");
  virtual ~AliESDMuonTrackCuts();
  Bool_t IsSelected(TObject* obj)
       {return AcceptTrack((AliESDMuonTrack*)obj);}
  Bool_t IsSelected(TList* /*list*/) {return kTRUE;}
  Bool_t AcceptTrack(AliESDMuonTrack* esdMuTrack);
  TObjArray* GetAcceptedTracks(AliESD* esd);
  Int_t CountAcceptedTracks(AliESD* esd);
  TObjArray* GetAcceptedTracks(AliESDEvent* esd);
  Int_t CountAcceptedTracks(AliESDEvent* esd);

  virtual Long64_t Merge(TCollection* list);
  virtual void Copy(TObject &c) const;
  AliESDMuonTrackCuts(const AliESDMuonTrackCuts& pd);  // Copy Constructor
  AliESDMuonTrackCuts &operator=(const AliESDMuonTrackCuts &c);

  //######################################################

  // track kinematic cut setters
  void SetPRange(Float_t r1=0, Float_t r2=1e10)       {fPMin=r1;   fPMax=r2;}
  void SetPtRange(Float_t r1=0, Float_t r2=1e10)      {fPtMin=r1;  fPtMax=r2;}
  void SetPxRange(Float_t r1=-1e10, Float_t r2=1e10)  {fPxMin=r1;  fPxMax=r2;}
  void SetPyRange(Float_t r1=-1e10, Float_t r2=1e10)  {fPyMin=r1;  fPyMax=r2;}
  void SetPzRange(Float_t r1=-1e10, Float_t r2=1e10)  {fPzMin=r1;  fPzMax=r2;}
  void SetEtaRange(Float_t r1=-1e10, Float_t r2=1e10) {fEtaMin=r1; fEtaMax=r2;}
  void SetRapRange(Float_t r1=-1e10, Float_t r2=1e10) {fRapMin=r1; fRapMax=r2;}

  //######################################################
  
  void SetHistogramsOn(Bool_t b=kFALSE) {fHistogramsOn = b;}
  void DefineHistograms(Int_t color=1);
  virtual Bool_t LoadHistograms(const Char_t* dir = 0);
  void SaveHistograms(const Char_t* dir = 0);
  void DrawHistograms();

  static void EnableNeededBranches(TTree* tree);

protected:
  void Init(); // sets everything to 0

  enum { kNCuts = 7 };

  //######################################################
  static const Char_t* fgkCutNames[kNCuts]; //! names of cuts (for internal use)

  // esd kinematics cuts
  Float_t fPMin,   fPMax;             // definition of the range of the P
  Float_t fPtMin,  fPtMax;            // definition of the range of the Pt
  Float_t fPxMin,  fPxMax;            // definition of the range of the Px
  Float_t fPyMin,  fPyMax;            // definition of the range of the Py
  Float_t fPzMin,  fPzMax;            // definition of the range of the Pz
  Float_t fEtaMin, fEtaMax;           // definition of the range of the eta
  Float_t fRapMin, fRapMax;           // definition of the range of the y

  //######################################################
  // diagnostics histograms
  Bool_t fHistogramsOn;               // histograms on/off
  
  TH1F* fhPt[2];                      //-> pt of esd tracks
  TH1F* fhEta[2];                     //-> eta of esd tracks

  TH1F*  fhCutStatistics;             //-> statistics of what cuts the tracks did not survive
  TH2F*  fhCutCorrelation;            //-> 2d statistics plot

  ClassDef(AliESDMuonTrackCuts, 1)
};


#endif
 AliESDMuonTrackCuts.h:1
 AliESDMuonTrackCuts.h:2
 AliESDMuonTrackCuts.h:3
 AliESDMuonTrackCuts.h:4
 AliESDMuonTrackCuts.h:5
 AliESDMuonTrackCuts.h:6
 AliESDMuonTrackCuts.h:7
 AliESDMuonTrackCuts.h:8
 AliESDMuonTrackCuts.h:9
 AliESDMuonTrackCuts.h:10
 AliESDMuonTrackCuts.h:11
 AliESDMuonTrackCuts.h:12
 AliESDMuonTrackCuts.h:13
 AliESDMuonTrackCuts.h:14
 AliESDMuonTrackCuts.h:15
 AliESDMuonTrackCuts.h:16
 AliESDMuonTrackCuts.h:17
 AliESDMuonTrackCuts.h:18
 AliESDMuonTrackCuts.h:19
 AliESDMuonTrackCuts.h:20
 AliESDMuonTrackCuts.h:21
 AliESDMuonTrackCuts.h:22
 AliESDMuonTrackCuts.h:23
 AliESDMuonTrackCuts.h:24
 AliESDMuonTrackCuts.h:25
 AliESDMuonTrackCuts.h:26
 AliESDMuonTrackCuts.h:27
 AliESDMuonTrackCuts.h:28
 AliESDMuonTrackCuts.h:29
 AliESDMuonTrackCuts.h:30
 AliESDMuonTrackCuts.h:31
 AliESDMuonTrackCuts.h:32
 AliESDMuonTrackCuts.h:33
 AliESDMuonTrackCuts.h:34
 AliESDMuonTrackCuts.h:35
 AliESDMuonTrackCuts.h:36
 AliESDMuonTrackCuts.h:37
 AliESDMuonTrackCuts.h:38
 AliESDMuonTrackCuts.h:39
 AliESDMuonTrackCuts.h:40
 AliESDMuonTrackCuts.h:41
 AliESDMuonTrackCuts.h:42
 AliESDMuonTrackCuts.h:43
 AliESDMuonTrackCuts.h:44
 AliESDMuonTrackCuts.h:45
 AliESDMuonTrackCuts.h:46
 AliESDMuonTrackCuts.h:47
 AliESDMuonTrackCuts.h:48
 AliESDMuonTrackCuts.h:49
 AliESDMuonTrackCuts.h:50
 AliESDMuonTrackCuts.h:51
 AliESDMuonTrackCuts.h:52
 AliESDMuonTrackCuts.h:53
 AliESDMuonTrackCuts.h:54
 AliESDMuonTrackCuts.h:55
 AliESDMuonTrackCuts.h:56
 AliESDMuonTrackCuts.h:57
 AliESDMuonTrackCuts.h:58
 AliESDMuonTrackCuts.h:59
 AliESDMuonTrackCuts.h:60
 AliESDMuonTrackCuts.h:61
 AliESDMuonTrackCuts.h:62
 AliESDMuonTrackCuts.h:63
 AliESDMuonTrackCuts.h:64
 AliESDMuonTrackCuts.h:65
 AliESDMuonTrackCuts.h:66
 AliESDMuonTrackCuts.h:67
 AliESDMuonTrackCuts.h:68
 AliESDMuonTrackCuts.h:69
 AliESDMuonTrackCuts.h:70
 AliESDMuonTrackCuts.h:71
 AliESDMuonTrackCuts.h:72
 AliESDMuonTrackCuts.h:73
 AliESDMuonTrackCuts.h:74
 AliESDMuonTrackCuts.h:75
 AliESDMuonTrackCuts.h:76
 AliESDMuonTrackCuts.h:77
 AliESDMuonTrackCuts.h:78
 AliESDMuonTrackCuts.h:79
 AliESDMuonTrackCuts.h:80
 AliESDMuonTrackCuts.h:81
 AliESDMuonTrackCuts.h:82
 AliESDMuonTrackCuts.h:83
 AliESDMuonTrackCuts.h:84
 AliESDMuonTrackCuts.h:85
 AliESDMuonTrackCuts.h:86
 AliESDMuonTrackCuts.h:87
 AliESDMuonTrackCuts.h:88
 AliESDMuonTrackCuts.h:89
 AliESDMuonTrackCuts.h:90
 AliESDMuonTrackCuts.h:91
 AliESDMuonTrackCuts.h:92
 AliESDMuonTrackCuts.h:93
 AliESDMuonTrackCuts.h:94
 AliESDMuonTrackCuts.h:95
 AliESDMuonTrackCuts.h:96
 AliESDMuonTrackCuts.h:97
 AliESDMuonTrackCuts.h:98
 AliESDMuonTrackCuts.h:99