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

/* $Id$ */ 

/// \ingroup base
/// \class AliAnalysisTaskMuonTrackingEff
/// \brief tracking chamber efficiency from ESD data
//Author: Nicolas LE BRIS - SUBATECH Nantes

#include "AliAnalysisTaskSE.h"
#include "AliMuonTrackCuts.h"
#include "TString.h"

class TList;
class TObjArray;
class AliCounterCollection;
class AliMUONGeometryTransformer;
class AliMUONTrack;
class AliMUONTrackParam;
class AliMpArea;
class AliMpPad;
class AliMUON2DMap;


class AliAnalysisTaskMuonTrackingEff : public AliAnalysisTaskSE
{
  
 public:
  
  AliAnalysisTaskMuonTrackingEff();
  AliAnalysisTaskMuonTrackingEff(TString name);
  virtual ~AliAnalysisTaskMuonTrackingEff();

  /// Set location of the default OCDB storage (if not set use "raw://")
  void SetDefaultStorage(const char* ocdbPath) { fOCDBpath = ocdbPath; }
  
  /// Set the OCDB path to the alignment file used in the reco (if not set use default storage)
  void SetAlignStorage(const char* ocdbPath) { fAlignOCDBpath = ocdbPath; }
  
  /// Set the OCDB path to the recoParam file used in the reco (if not set use default storage)
  void SetRecoParamStorage(const char* ocdbPath) { fRecoParamOCDBpath = ocdbPath; }
  
  /// Select tracks in the given centrality range
  void SelectCentrality(Double_t min, Double_t max) {fCentMin = min; fCentMax = max;}
  
  // set standard cuts to select tracks to be considered
  void SetMuonTrackCuts(AliMuonTrackCuts &trackCuts);
  
  /// set the muon low pT cut
  void SetMuonPtCut(Double_t cut) {fPtCut = cut;}
  
  /// set the flag to select tracks using MC label
  void UseMCLabel(Bool_t flag = kTRUE) { fUseMCLabel = flag; }
  
  /// enable the display in the terminate
  void EnableDisplay(Bool_t flag = kTRUE) { fEnableDisplay = flag; }
  
  // Implementation of interface methods
  virtual void UserCreateOutputObjects();
  virtual void UserExec(Option_t *);
  virtual void NotifyRun();
  virtual void Terminate(Option_t *);
  
  
 private:
  
  /// Not implemented
  AliAnalysisTaskMuonTrackingEff(const AliAnalysisTaskMuonTrackingEff& rhs);
  /// Not implemented
  AliAnalysisTaskMuonTrackingEff& operator = (const AliAnalysisTaskMuonTrackingEff& rhs);
  
  // Identify clusters/chambers that can be removed from the track
  Bool_t TagRemovableClusters(AliMUONTrack &track, Bool_t removableChambers[10]);
  
  // Find which detection elements should have been hit and record the missing clusters
  void FindAndRecordMissingClusters(AliMUONTrackParam &param, Int_t chamber, Double_t trackInfo[6]);
  
  // Find the intersection point between the track (assuming straight line) and the DE in the global frame
  void Intersect(AliMUONTrackParam &param, Int_t deId, Double_t p[3]);
  
  // Check whether (global) area overlaps with the given DE
  Bool_t OverlapDE(AliMpArea &area, Int_t deId);
  
  // Register the cluster in the given stores
  void RecordCluster(Int_t chamber, Int_t deId, AliMpPad pad[2], Double_t trackInfo[6],
		     TString clusterKey, TList *chamberHistList, Bool_t recordChamber);
  
  /// Look for pads at the cluster's location
  Bool_t FindPads(Int_t deId, Double_t pos[3], AliMpPad pad[2]);
  
  
private:
  
  static const Int_t fgkNofDE[11];  ///< Total number of detection elements in each chamber
  static const Int_t fgkNofBusPath; ///< Total number of bus patches
  static const Int_t fgkNofManu;    ///< Total number of manus
  
  Bool_t   fOCDBLoaded;             //!< Determine if the OCDB and =geometry have been loaded
  TString  fOCDBpath;               ///< OCDB path
  TString  fAlignOCDBpath;          ///< OCDB path to the alignment file
  TString  fRecoParamOCDBpath;      ///< OCDB path to the recoParam file
  Double_t fCentMin;                ///< select centrality > fCentMin
  Double_t fCentMax;                ///< select centrality <= fCentMax
  AliMuonTrackCuts* fMuonTrackCuts; ///< cuts to select tracks to be considered
  Double_t fPtCut;                  ///< cut on minimum pt
  Bool_t   fUseMCLabel;             ///< select tracks using MC label
  Bool_t   fEnableDisplay;          ///< enable the display in the terminate

  AliMUONGeometryTransformer *fTransformer; //!< Transformer object
  
  TObjArray *fDEPlanes; //!< vectors (x0, y0, z0, a, b, c) defining the plane of each DE in the global frame
  
  AliCounterCollection* fClusters; //!< detected (all), accepted (for efficiency calculation) and expected clusters
  TList* fChamberTDHistList; //!< List of histograms of the tracks detected in the chambers.
  TList* fChamberTTHistList; //!< List of histograms of the tracks which have passed through the chambers.
  TList* fChamberSDHistList; //!< List of histograms of the tracks only detected by one chamber of the station.
  TList* fExtraHistList;     //!< List of extra histograms.


  ClassDef(AliAnalysisTaskMuonTrackingEff, 5)
  
};


//________________________________________________________________________
inline void AliAnalysisTaskMuonTrackingEff::SetMuonTrackCuts(AliMuonTrackCuts &trackCuts)
{
  /// set standard cuts to select tracks to be considered
  delete fMuonTrackCuts;
  fMuonTrackCuts = new AliMuonTrackCuts(trackCuts);
}

#endif

 AliAnalysisTaskMuonTrackingEff.h:1
 AliAnalysisTaskMuonTrackingEff.h:2
 AliAnalysisTaskMuonTrackingEff.h:3
 AliAnalysisTaskMuonTrackingEff.h:4
 AliAnalysisTaskMuonTrackingEff.h:5
 AliAnalysisTaskMuonTrackingEff.h:6
 AliAnalysisTaskMuonTrackingEff.h:7
 AliAnalysisTaskMuonTrackingEff.h:8
 AliAnalysisTaskMuonTrackingEff.h:9
 AliAnalysisTaskMuonTrackingEff.h:10
 AliAnalysisTaskMuonTrackingEff.h:11
 AliAnalysisTaskMuonTrackingEff.h:12
 AliAnalysisTaskMuonTrackingEff.h:13
 AliAnalysisTaskMuonTrackingEff.h:14
 AliAnalysisTaskMuonTrackingEff.h:15
 AliAnalysisTaskMuonTrackingEff.h:16
 AliAnalysisTaskMuonTrackingEff.h:17
 AliAnalysisTaskMuonTrackingEff.h:18
 AliAnalysisTaskMuonTrackingEff.h:19
 AliAnalysisTaskMuonTrackingEff.h:20
 AliAnalysisTaskMuonTrackingEff.h:21
 AliAnalysisTaskMuonTrackingEff.h:22
 AliAnalysisTaskMuonTrackingEff.h:23
 AliAnalysisTaskMuonTrackingEff.h:24
 AliAnalysisTaskMuonTrackingEff.h:25
 AliAnalysisTaskMuonTrackingEff.h:26
 AliAnalysisTaskMuonTrackingEff.h:27
 AliAnalysisTaskMuonTrackingEff.h:28
 AliAnalysisTaskMuonTrackingEff.h:29
 AliAnalysisTaskMuonTrackingEff.h:30
 AliAnalysisTaskMuonTrackingEff.h:31
 AliAnalysisTaskMuonTrackingEff.h:32
 AliAnalysisTaskMuonTrackingEff.h:33
 AliAnalysisTaskMuonTrackingEff.h:34
 AliAnalysisTaskMuonTrackingEff.h:35
 AliAnalysisTaskMuonTrackingEff.h:36
 AliAnalysisTaskMuonTrackingEff.h:37
 AliAnalysisTaskMuonTrackingEff.h:38
 AliAnalysisTaskMuonTrackingEff.h:39
 AliAnalysisTaskMuonTrackingEff.h:40
 AliAnalysisTaskMuonTrackingEff.h:41
 AliAnalysisTaskMuonTrackingEff.h:42
 AliAnalysisTaskMuonTrackingEff.h:43
 AliAnalysisTaskMuonTrackingEff.h:44
 AliAnalysisTaskMuonTrackingEff.h:45
 AliAnalysisTaskMuonTrackingEff.h:46
 AliAnalysisTaskMuonTrackingEff.h:47
 AliAnalysisTaskMuonTrackingEff.h:48
 AliAnalysisTaskMuonTrackingEff.h:49
 AliAnalysisTaskMuonTrackingEff.h:50
 AliAnalysisTaskMuonTrackingEff.h:51
 AliAnalysisTaskMuonTrackingEff.h:52
 AliAnalysisTaskMuonTrackingEff.h:53
 AliAnalysisTaskMuonTrackingEff.h:54
 AliAnalysisTaskMuonTrackingEff.h:55
 AliAnalysisTaskMuonTrackingEff.h:56
 AliAnalysisTaskMuonTrackingEff.h:57
 AliAnalysisTaskMuonTrackingEff.h:58
 AliAnalysisTaskMuonTrackingEff.h:59
 AliAnalysisTaskMuonTrackingEff.h:60
 AliAnalysisTaskMuonTrackingEff.h:61
 AliAnalysisTaskMuonTrackingEff.h:62
 AliAnalysisTaskMuonTrackingEff.h:63
 AliAnalysisTaskMuonTrackingEff.h:64
 AliAnalysisTaskMuonTrackingEff.h:65
 AliAnalysisTaskMuonTrackingEff.h:66
 AliAnalysisTaskMuonTrackingEff.h:67
 AliAnalysisTaskMuonTrackingEff.h:68
 AliAnalysisTaskMuonTrackingEff.h:69
 AliAnalysisTaskMuonTrackingEff.h:70
 AliAnalysisTaskMuonTrackingEff.h:71
 AliAnalysisTaskMuonTrackingEff.h:72
 AliAnalysisTaskMuonTrackingEff.h:73
 AliAnalysisTaskMuonTrackingEff.h:74
 AliAnalysisTaskMuonTrackingEff.h:75
 AliAnalysisTaskMuonTrackingEff.h:76
 AliAnalysisTaskMuonTrackingEff.h:77
 AliAnalysisTaskMuonTrackingEff.h:78
 AliAnalysisTaskMuonTrackingEff.h:79
 AliAnalysisTaskMuonTrackingEff.h:80
 AliAnalysisTaskMuonTrackingEff.h:81
 AliAnalysisTaskMuonTrackingEff.h:82
 AliAnalysisTaskMuonTrackingEff.h:83
 AliAnalysisTaskMuonTrackingEff.h:84
 AliAnalysisTaskMuonTrackingEff.h:85
 AliAnalysisTaskMuonTrackingEff.h:86
 AliAnalysisTaskMuonTrackingEff.h:87
 AliAnalysisTaskMuonTrackingEff.h:88
 AliAnalysisTaskMuonTrackingEff.h:89
 AliAnalysisTaskMuonTrackingEff.h:90
 AliAnalysisTaskMuonTrackingEff.h:91
 AliAnalysisTaskMuonTrackingEff.h:92
 AliAnalysisTaskMuonTrackingEff.h:93
 AliAnalysisTaskMuonTrackingEff.h:94
 AliAnalysisTaskMuonTrackingEff.h:95
 AliAnalysisTaskMuonTrackingEff.h:96
 AliAnalysisTaskMuonTrackingEff.h:97
 AliAnalysisTaskMuonTrackingEff.h:98
 AliAnalysisTaskMuonTrackingEff.h:99
 AliAnalysisTaskMuonTrackingEff.h:100
 AliAnalysisTaskMuonTrackingEff.h:101
 AliAnalysisTaskMuonTrackingEff.h:102
 AliAnalysisTaskMuonTrackingEff.h:103
 AliAnalysisTaskMuonTrackingEff.h:104
 AliAnalysisTaskMuonTrackingEff.h:105
 AliAnalysisTaskMuonTrackingEff.h:106
 AliAnalysisTaskMuonTrackingEff.h:107
 AliAnalysisTaskMuonTrackingEff.h:108
 AliAnalysisTaskMuonTrackingEff.h:109
 AliAnalysisTaskMuonTrackingEff.h:110
 AliAnalysisTaskMuonTrackingEff.h:111
 AliAnalysisTaskMuonTrackingEff.h:112
 AliAnalysisTaskMuonTrackingEff.h:113
 AliAnalysisTaskMuonTrackingEff.h:114
 AliAnalysisTaskMuonTrackingEff.h:115
 AliAnalysisTaskMuonTrackingEff.h:116
 AliAnalysisTaskMuonTrackingEff.h:117
 AliAnalysisTaskMuonTrackingEff.h:118
 AliAnalysisTaskMuonTrackingEff.h:119
 AliAnalysisTaskMuonTrackingEff.h:120
 AliAnalysisTaskMuonTrackingEff.h:121
 AliAnalysisTaskMuonTrackingEff.h:122
 AliAnalysisTaskMuonTrackingEff.h:123
 AliAnalysisTaskMuonTrackingEff.h:124
 AliAnalysisTaskMuonTrackingEff.h:125
 AliAnalysisTaskMuonTrackingEff.h:126
 AliAnalysisTaskMuonTrackingEff.h:127
 AliAnalysisTaskMuonTrackingEff.h:128
 AliAnalysisTaskMuonTrackingEff.h:129
 AliAnalysisTaskMuonTrackingEff.h:130
 AliAnalysisTaskMuonTrackingEff.h:131
 AliAnalysisTaskMuonTrackingEff.h:132
 AliAnalysisTaskMuonTrackingEff.h:133
 AliAnalysisTaskMuonTrackingEff.h:134
 AliAnalysisTaskMuonTrackingEff.h:135
 AliAnalysisTaskMuonTrackingEff.h:136
 AliAnalysisTaskMuonTrackingEff.h:137