ROOT logo
#ifndef ALIMUONRECOCHECK_H
#define ALIMUONRECOCHECK_H

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

/* $Id$ */

/// \ingroup evaluation
/// \class AliMUONRecoCheck
/// \brief Utility class to check reconstruction

#include <TObject.h>

class TClonesArray;
class TFile;
class TTree;
class AliESDEvent;
class AliMCEventHandler;
class AliMUONVTrackStore;
class AliMUONVTriggerTrackStore;
class AliMUONTrack;
class AliMUONTrackParam;
class AliMUONTriggerTrack;
class AliMUONGeometryTransformer;
class AliMUONTriggerCircuit;
class AliMUONLocalTrigger;
class AliMUONCalibrationData;
class AliMUONTriggerElectronics;

class AliMUONRecoCheck : public TObject 
{
public:
  AliMUONRecoCheck(const Char_t *chLoader, const Char_t *pathSim = "./");
  AliMUONRecoCheck(AliESDEvent *esdEvent, AliMCEventHandler *mcEventHandler);
  virtual ~AliMUONRecoCheck();

  /// Return the list of reconstructed tracks
  AliMUONVTrackStore* ReconstructedTracks(Int_t event, Bool_t refit = kTRUE);

  /// Return the list of reconstructed trigger tracks
  AliMUONVTriggerTrackStore* TriggeredTracks(Int_t event);

  Bool_t TriggerToTrack(const AliMUONLocalTrigger& locTrg, AliMUONTriggerTrack& triggerTrack);
	
  /// Return reference muon tracks
  AliMUONVTrackStore* TrackRefs(Int_t event);

  /// Return triggerable reference tracks
  AliMUONVTriggerTrackStore* TriggerableTracks(Int_t event);
	
  /// Return reconstructible reference tracks
  AliMUONVTrackStore* ReconstructibleTracks(Int_t event, UInt_t requestedStationMask = 0x1F,
					    Bool_t request2ChInSameSt45 = kTRUE,
					    Bool_t hitInFrontOfPad = kFALSE);

	
  /// Return the run number of the current ESD event
  Int_t GetRunNumber();
  
  /// Return the total number of events.
  Int_t NumberOfEvents() const;
  
  /// Return the reconstructed data of current event
  const AliESDEvent* GetESDEvent() const { return fESDEvent; }
  
  /// Return the interface to the Monte Carlo data of current event
  const AliMCEventHandler* GetMCEventHandler() const { return fMCEventHandler; }
  
  /// Return the track from the store matched with the given track (or 0x0) and the fraction of matched clusters
  static AliMUONTrack* FindCompatibleTrack(AliMUONTrack &track, AliMUONVTrackStore &trackStore,
					   Int_t &nMatchClusters, Bool_t useLabel = kFALSE,
					   Double_t sigmaCut = 10.);
  
  /// Return the trigger track from the store matched with the given track (or 0x0)
  static AliMUONTriggerTrack* FindCompatibleTrack(AliMUONTriggerTrack &track,
                                                  const AliMUONVTriggerTrackStore &triggerTrackStore,
                                                  Double_t sigmaCut = 10.);
  
private:
  /// Not implemented
  AliMUONRecoCheck(const AliMUONRecoCheck& rhs);
  /// Not implemented
  AliMUONRecoCheck& operator = (const AliMUONRecoCheck& rhs);

  void ResetStores();
  
  void MakeReconstructedTracks(Bool_t refit);
	
  void MakeTriggeredTracks();
  
  void MakeTrackRefs();
  
  void CleanMuonTrackRef(const AliMUONVTrackStore *tmpTrackRefStore);
  
  void MakeReconstructibleTracks(UInt_t requestedStationMask, Bool_t request2ChInSameSt45 = kTRUE,
				 Bool_t hitInFrontOfPad = kFALSE);
	
  void MakeTriggerableTracks();
	
  Bool_t InitCircuit();
  Bool_t InitTriggerResponse();
  Bool_t InitCalibrationData();
  Bool_t InitGeometryTransformer();

  Bool_t IsHitInFrontOfPad(AliMUONTrackParam *param) const;
  
private:
  AliMCEventHandler* fMCEventHandler; ///< to access MC truth information
  AliESDEvent* fESDEvent; ///< ESD event to access MUON data
  TTree* fESDTree;        ///< ESD tree to access MUON data
  TFile* fESDFile;        ///< ESD file to access MUON data
  
  Int_t fCurrentEvent; ///< current event number
  
  AliMUONVTrackStore* fTrackRefStore;     ///< current simulated tracks (owner)
  AliMUONVTrackStore* fRecoTrackRefStore; ///< current reconstructible tracks (owner)
  AliMUONVTriggerTrackStore* fRecoTriggerRefStore; ///< current triggerable tracks (owner)
  AliMUONVTrackStore* fRecoTrackStore;    ///< current reconstructed tracks (owner)
  AliMUONVTriggerTrackStore* fRecoTriggerTrackStore;    ///< current reconstructed trigger tracks (owner)
	
  AliMUONGeometryTransformer* fGeometryTransformer; ///< geometry transformer
  AliMUONTriggerCircuit* fTriggerCircuit; ///< trigger circuit
  AliMUONCalibrationData* fCalibrationData; //!< Used to load Local, Regional and Global masks
  AliMUONTriggerElectronics* fTriggerElectronics; ///< object to re-compute the trigger info
  
  Bool_t fESDEventOwner;         ///< using constructor from the analysis task

  ClassDef(AliMUONRecoCheck, 0)   //Utility class to check reconstruction
};

#endif

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