ROOT logo
//-*- Mode: C++ -*-
#ifndef ALIANALYSELEADINGTRACKUE_H
#define ALIANALYSELEADINGTRACKUE_H
/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 * See cxx source for full Copyright notice     */

////////////////////////////////////////////////
//--------------------------------------------- 
// Class  for transverse regions analysis w.r.t leading track
//---------------------------------------------
////////////////////////////////////////////////

// --- ROOT system ---
#include <TObject.h> 

class AliAODEvent;
class AliAODInputHandler;
class AliESDEvent;
class AliESDtrackCuts;
class AliAODTrack;
class AliESDTrack;
class AliGenPythiaEventHeader;
class AliInputEventHandler;
class AliLog;
class AliMCEvent;
class AliStack;
class AliVParticle;
class TClonesArray;
class TObject;
class TROOT;
class TVector3;
class AliVTrack;
class AliHelperPID;
class TFormula;

class AliAnalyseLeadingTrackUE : public TObject {

 public: 

  AliAnalyseLeadingTrackUE();                                                   //constructor
  AliAnalyseLeadingTrackUE(const AliAnalyseLeadingTrackUE & g);                 //copy constructor
  AliAnalyseLeadingTrackUE & operator = (const AliAnalyseLeadingTrackUE & g);   //assignment operator
  virtual ~AliAnalyseLeadingTrackUE();                                          //virtual destructor

  // Setters
  void  SetParticleSelectionCriteria(Int_t filterbit, Bool_t onlyhadrons, Double_t etacut, Double_t etacutMin=-1., Double_t ptMin = 0) { fFilterBit   = filterbit;
  											     fOnlyHadrons = onlyhadrons;
										             fTrackEtaCut = etacut;     
										             fTrackEtaCutMin = etacutMin;     
										             fTrackPtMin = ptMin;}

  void SetEventSelection(UInt_t bits) { fEventSelection = bits; }
  void  SetDebug(Int_t debug) { fDebug = debug; } 
  Bool_t         ApplyCuts(TObject* track);                       // Reproduces the cuts of the corresponding bit in the ESD->AOD filtering
  void           DefineESDCuts(Int_t filterbit);                                 // Emulate filterbit
  TObjArray*     FindLeadingObjects(TObject* obj);                                 // Looks for leading track or MC particle
  TObjArray*     GetMinMaxRegion(TList* transv1, TList* transv2);                  // Sorts the transverse regions in MIN and MAX
  Int_t          NParticles(TObject *obj);                                         // Counts tracks or MC particles
  AliVParticle*  ParticleWithCuts(TObject* obj, Int_t ipart, Bool_t onlyprimaries = kTRUE, Int_t particleSpecies = -1);                     // Returns track or MC particle at position "ipart" if passes selection criteria
  void  	 QSortTracks(TObjArray &a, Int_t first, Int_t last);               // Sort by pT an array of AliVParticles 
  TObjArray*     SortRegions(const AliVParticle* leading, TObject* obj, TObject* arrayMC, Bool_t onlyprimaries = kTRUE); // Assign particles to towards, away or transverse regions
  TObjArray*     GetAcceptedParticles(TObject* obj, TObject* arrayMC, Bool_t onlyprimaries = kTRUE, Int_t particleSpecies = -1, Bool_t useEtaPtCuts = kFALSE, Bool_t speciesOnTracks = kTRUE, Double_t evtPlane = -999.); 
  TObjArray*     GetFakeParticles(TObject* obj, TObject* arrayMC, Bool_t onlyprimaries, Int_t particleSpecies, Bool_t useEtaPtCuts);
  Bool_t         TriggerSelection(const TObject* obj);                                   // Select good triggers with AliPhysicsSelection class
  Bool_t         VertexSelection(const TObject* obj, Int_t ntracks, Double_t zed);       // Vertex selection: see implementation
  void 		 RemoveInjectedSignals(TObjArray* tracks, TObject* arrayMC, Int_t maxLabel);
  void 		 RemoveWeakDecays(TObjArray* tracks, TObject* mcObj);
  AliHelperPID*  GetHelperPID() { return fHelperPID; }
  void 		 SetHelperPID(AliHelperPID* pid) { fHelperPID = pid; }
  void		 SetTrackStatus(UInt_t status) { fTrackStatus = status; }
  UInt_t	 GetTrackStatus() { return fTrackStatus; }
  void		 SetCheckMotherPDG(Bool_t checkpdg) { fCheckMotherPDG = checkpdg; }
  Bool_t	 GetCheckMotherPDG() { return fCheckMotherPDG; }
  void		 NextEvent() { fEventCounter++; }
  UInt_t	 GetEventCounter() { return fEventCounter; }
  void		 SetDCAXYCut(TFormula* value) { fDCAXYCut = value; }
  void		 SetSharedClusterCut(Double_t value) { fSharedClusterCut = value; }
  void		 SetCrossedRowsCut(Int_t value) { fCrossedRowsCut = value; }
  void		 SetFoundFractionCut(Double_t value) { fFoundFractionCut = value; }
  void           SetParticlePhiCutEventPlane(Double_t min, Double_t max) { fTrackPhiCutEvPlMin = min; fTrackPhiCutEvPlMax = max; }

protected:
  Bool_t CheckTrack(AliVParticle * part);

private:
  Int_t          fDebug;             // debug flag
  Int_t          fFilterBit;         // track selection cuts
  UInt_t         fTrackStatus;       // if non-0, the bits set in this variable are required for each track
  Bool_t         fOnlyHadrons;       // consider only charged Pions, Protons and Kaons 
  Bool_t         fCheckMotherPDG;     // Check the PDG code of mother for secondaries 
  Double_t       fTrackEtaCut;       // pseudo-rapidity limit of transverse regions     
  Double_t       fTrackEtaCutMin;       // minimum of the pseudo-rapidity limit of transverse regions     
  Double_t       fTrackPhiCutEvPlMin;   // Minimum Phi cut on particles with respect to the Event Plane (values between 0 and Pi/2)
  Double_t       fTrackPhiCutEvPlMax;   // Maximum Phi cut on particles with respect to the Event Plane (values between 0 and Pi/2)
  Double_t       fTrackPtMin;        // pt limit for selecting particles
  UInt_t         fEventSelection;    // bit for physics selection
  TFormula*      fDCAXYCut;          // additional pt dependent cut on DCA XY (only for AOD)
  Double_t       fSharedClusterCut;  // cut on shared clusters (only for AOD)
  Int_t		 fCrossedRowsCut;   // cut on crossed rows (only for AOD)
  Double_t	 fFoundFractionCut;     // cut on crossed rows/findable clusters (only for AOD)
  
  AliESDtrackCuts *fEsdTrackCuts;    // set of cuts when reading ESD
  AliESDtrackCuts *fEsdTrackCutsExtra1;    // set of cuts when reading ESD
  AliESDtrackCuts *fEsdTrackCutsExtra2;    // set of cuts when reading ESD
  AliHelperPID   *fHelperPID;    // PID Helper object
  UInt_t fEventCounter;		  //! processed events (counter)
  
  ClassDef(AliAnalyseLeadingTrackUE,0)
};
#endif
 AliAnalyseLeadingTrackUE.h:1
 AliAnalyseLeadingTrackUE.h:2
 AliAnalyseLeadingTrackUE.h:3
 AliAnalyseLeadingTrackUE.h:4
 AliAnalyseLeadingTrackUE.h:5
 AliAnalyseLeadingTrackUE.h:6
 AliAnalyseLeadingTrackUE.h:7
 AliAnalyseLeadingTrackUE.h:8
 AliAnalyseLeadingTrackUE.h:9
 AliAnalyseLeadingTrackUE.h:10
 AliAnalyseLeadingTrackUE.h:11
 AliAnalyseLeadingTrackUE.h:12
 AliAnalyseLeadingTrackUE.h:13
 AliAnalyseLeadingTrackUE.h:14
 AliAnalyseLeadingTrackUE.h:15
 AliAnalyseLeadingTrackUE.h:16
 AliAnalyseLeadingTrackUE.h:17
 AliAnalyseLeadingTrackUE.h:18
 AliAnalyseLeadingTrackUE.h:19
 AliAnalyseLeadingTrackUE.h:20
 AliAnalyseLeadingTrackUE.h:21
 AliAnalyseLeadingTrackUE.h:22
 AliAnalyseLeadingTrackUE.h:23
 AliAnalyseLeadingTrackUE.h:24
 AliAnalyseLeadingTrackUE.h:25
 AliAnalyseLeadingTrackUE.h:26
 AliAnalyseLeadingTrackUE.h:27
 AliAnalyseLeadingTrackUE.h:28
 AliAnalyseLeadingTrackUE.h:29
 AliAnalyseLeadingTrackUE.h:30
 AliAnalyseLeadingTrackUE.h:31
 AliAnalyseLeadingTrackUE.h:32
 AliAnalyseLeadingTrackUE.h:33
 AliAnalyseLeadingTrackUE.h:34
 AliAnalyseLeadingTrackUE.h:35
 AliAnalyseLeadingTrackUE.h:36
 AliAnalyseLeadingTrackUE.h:37
 AliAnalyseLeadingTrackUE.h:38
 AliAnalyseLeadingTrackUE.h:39
 AliAnalyseLeadingTrackUE.h:40
 AliAnalyseLeadingTrackUE.h:41
 AliAnalyseLeadingTrackUE.h:42
 AliAnalyseLeadingTrackUE.h:43
 AliAnalyseLeadingTrackUE.h:44
 AliAnalyseLeadingTrackUE.h:45
 AliAnalyseLeadingTrackUE.h:46
 AliAnalyseLeadingTrackUE.h:47
 AliAnalyseLeadingTrackUE.h:48
 AliAnalyseLeadingTrackUE.h:49
 AliAnalyseLeadingTrackUE.h:50
 AliAnalyseLeadingTrackUE.h:51
 AliAnalyseLeadingTrackUE.h:52
 AliAnalyseLeadingTrackUE.h:53
 AliAnalyseLeadingTrackUE.h:54
 AliAnalyseLeadingTrackUE.h:55
 AliAnalyseLeadingTrackUE.h:56
 AliAnalyseLeadingTrackUE.h:57
 AliAnalyseLeadingTrackUE.h:58
 AliAnalyseLeadingTrackUE.h:59
 AliAnalyseLeadingTrackUE.h:60
 AliAnalyseLeadingTrackUE.h:61
 AliAnalyseLeadingTrackUE.h:62
 AliAnalyseLeadingTrackUE.h:63
 AliAnalyseLeadingTrackUE.h:64
 AliAnalyseLeadingTrackUE.h:65
 AliAnalyseLeadingTrackUE.h:66
 AliAnalyseLeadingTrackUE.h:67
 AliAnalyseLeadingTrackUE.h:68
 AliAnalyseLeadingTrackUE.h:69
 AliAnalyseLeadingTrackUE.h:70
 AliAnalyseLeadingTrackUE.h:71
 AliAnalyseLeadingTrackUE.h:72
 AliAnalyseLeadingTrackUE.h:73
 AliAnalyseLeadingTrackUE.h:74
 AliAnalyseLeadingTrackUE.h:75
 AliAnalyseLeadingTrackUE.h:76
 AliAnalyseLeadingTrackUE.h:77
 AliAnalyseLeadingTrackUE.h:78
 AliAnalyseLeadingTrackUE.h:79
 AliAnalyseLeadingTrackUE.h:80
 AliAnalyseLeadingTrackUE.h:81
 AliAnalyseLeadingTrackUE.h:82
 AliAnalyseLeadingTrackUE.h:83
 AliAnalyseLeadingTrackUE.h:84
 AliAnalyseLeadingTrackUE.h:85
 AliAnalyseLeadingTrackUE.h:86
 AliAnalyseLeadingTrackUE.h:87
 AliAnalyseLeadingTrackUE.h:88
 AliAnalyseLeadingTrackUE.h:89
 AliAnalyseLeadingTrackUE.h:90
 AliAnalyseLeadingTrackUE.h:91
 AliAnalyseLeadingTrackUE.h:92
 AliAnalyseLeadingTrackUE.h:93
 AliAnalyseLeadingTrackUE.h:94
 AliAnalyseLeadingTrackUE.h:95
 AliAnalyseLeadingTrackUE.h:96
 AliAnalyseLeadingTrackUE.h:97
 AliAnalyseLeadingTrackUE.h:98
 AliAnalyseLeadingTrackUE.h:99
 AliAnalyseLeadingTrackUE.h:100
 AliAnalyseLeadingTrackUE.h:101
 AliAnalyseLeadingTrackUE.h:102
 AliAnalyseLeadingTrackUE.h:103
 AliAnalyseLeadingTrackUE.h:104
 AliAnalyseLeadingTrackUE.h:105
 AliAnalyseLeadingTrackUE.h:106
 AliAnalyseLeadingTrackUE.h:107
 AliAnalyseLeadingTrackUE.h:108
 AliAnalyseLeadingTrackUE.h:109
 AliAnalyseLeadingTrackUE.h:110