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

/*$Id$*/

/// \ingroup rec
/// \class AliMUONTrackHitPattern
/// \brief Class for the MUON track hit pattern
///
//  Author: Diego Stocco

#include <TObject.h>
//#include <TObjArray.h>

class AliMUONVTrackStore;
class AliMUONVTriggerStore;
class AliMUONVTriggerTrackStore;
class AliMUONTrackParam;
class AliMUONGeometryTransformer;
class AliMUONVDigitStore;
class AliMUONTriggerTrack;
class AliMUONTrack;
class AliMUONRecoParam;
class AliMUONTriggerUtilities;
class AliMpPad;
class TVector3;
class TArrayI;

class AliMUONTrackHitPattern : public TObject 
{
public:

  AliMUONTrackHitPattern(const AliMUONRecoParam* recoParam,
                         const AliMUONGeometryTransformer& transformer,
                         const AliMUONVDigitStore& digitStore,
                         const AliMUONTriggerUtilities* triggerUtilities);
  virtual ~AliMUONTrackHitPattern(); // Destructor

  void ExecuteValidation(const AliMUONVTrackStore& trackStore,
			 const AliMUONVTriggerTrackStore& triggerTrackStore,
			 const AliMUONVTriggerStore& triggerStore) const;
  
  AliMUONTriggerTrack* MatchTriggerTrack(AliMUONTrack* track,
					 AliMUONTrackParam& trackParam,
					 const AliMUONVTriggerTrackStore& triggerTrackStore,
					 const AliMUONVTriggerStore& triggerStore) const;
  
  UInt_t GetHitPattern(const AliMUONTrackParam& trackParam, Bool_t isTriggerTrack) const;
  
  UInt_t GetHitPattern(const AliMUONTriggerTrack* matchedTriggerTrack) const; // obsolete
  UInt_t GetHitPattern(AliMUONTrackParam* trackParam) const; // obsolete

protected:
  void ApplyMCSCorrections(AliMUONTrackParam& trackParam) const;
  
  Int_t GetTrackParamAtChamber(const AliMUONTrackParam& inputTrackParam, Int_t chamber,
                               TObjArray& trackParamList, TArrayI& foundDetElemId, TObjArray& padsFromPos) const;
  
  Bool_t FindMatchingPads(const AliMUONTrackParam* trackParam,
                          TArrayI& matchedDetElemId, TObjArray& pads,
                          const AliMUONVDigitStore& digitStore, Bool_t isTriggerTrack) const;
  
  Bool_t PosInDetElemIdLocal(TVector3& localCoor, const TVector3& globalPoint1, const TVector3& globalPoint2, Int_t detElemId) const;
  
  /// Return reco parameters
  const AliMUONRecoParam* GetRecoParam() const { return fkRecoParam; }
  
  // THE FOLLOWING METHODS ARE OBSOLETE
  
  // Methods for hit pattern from tracker track
  void FindPadMatchingTrack(const AliMUONTrackParam& trackParam,
                            Bool_t isMatch[2], Int_t iChamber) const;

  Float_t MinDistanceFromPad(Float_t xPad, Float_t yPad, Float_t zPad,
                             Float_t dpx, Float_t dpy, 
                             const AliMUONTrackParam& trackParam) const;

  // Methods for hit pattern from matched trigger track
  Bool_t PerformTrigTrackMatch(UInt_t &pattern, const AliMUONTriggerTrack* matchedTrigTrack) const; // obsolete
  
  Bool_t FindPadMatchingTrig(const TVector3& vec11, const TVector3& vec21, Int_t matchedDetElemId[2], TObjArray& matchedPads) const; // obsolete
  
  Float_t PadMatchTrack(const AliMpPad& pad, const TVector3& trackPosAtPad) const; // obsolete
  
  Int_t DetElemIdFromPos(Float_t x, Float_t y, Int_t chamber, Int_t foundDetElemId[2]) const; // obsolete
  
  Bool_t PadsFromPos(const TVector3& vec11, const TVector3& vec21, Int_t detElemId, TObjArray& pads) const; // obsolete
  
  
  Bool_t IsCloseToAccEdge(TObjArray& pads, Int_t detElemId, Float_t coor[2]) const; // obsolete
  
  Bool_t IsMasked(const AliMpPad& pad, Int_t detElemId, Int_t cathode, const TVector3& vec11, const TVector3& vec21) const; // obsolete
  
private:
  /// Not implemented
  AliMUONTrackHitPattern(const AliMUONTrackHitPattern& rhs);
  /// Not implemented
  AliMUONTrackHitPattern& operator = (const AliMUONTrackHitPattern& rhs);

  const AliMUONRecoParam* fkRecoParam; //!< pointer to reco parameters
  const AliMUONGeometryTransformer& fkTransformer; //!< geometry transformer
  const AliMUONVDigitStore& fkDigitStore; //!< digitStore
  const AliMUONTriggerUtilities* fkTriggerUtilities; //!< trigger utilities for mapping

  const Float_t fkMaxDistance; //!< Maximum distance for reference // obsolete
  
  ClassDef(AliMUONTrackHitPattern, 0) // MUON track hit pattern
};

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