1 #ifndef ALIMUONESDINTERFACE_H
2 #define ALIMUONESDINTERFACE_H
4 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
5 * See cxx source for full Copyright notice */
10 /// \class AliMUONESDInterface
11 /// \brief Converter between MUON track/cluster/digit and ESDMuon track/cluster/pad
13 // Author Philippe Pillot
15 #include <AliMpExMap.h>
21 class AliMUONVTrackStore;
22 class AliMUONVCluster;
23 class AliMUONVClusterStore;
25 class AliMUONVDigitStore;
26 class AliMUONLocalTrigger;
27 class AliMUONTriggerTrack;
28 class AliMUONVTriggerTrackStore;
29 class AliMUONVTriggerStore;
30 class AliMUONTrackParam;
31 class AliMUONVTrackReconstructor;
33 class AliESDMuonTrack;
34 class AliESDMuonCluster;
37 class AliMUONRecoParam;
39 class AliMUONESDInterface : public TObject
41 public: // methods to play with internal objects
43 AliMUONESDInterface();
44 virtual ~AliMUONESDInterface();
46 virtual void Clear(Option_t* = "");
48 void LoadEvent(AliESDEvent& esdEvent, Bool_t refit = kTRUE);
50 /// Return internal track store
51 AliMUONVTrackStore* GetTracks() const {return fTracks;}
52 /// Return internal track store
53 AliMUONVDigitStore* GetDigits() const {return fDigits;}
54 /// Return internal trigger store
55 AliMUONVTriggerStore* GetTriggers() const {return fTriggers;}
57 // Return numbers of tracks/clusters/digits
58 Int_t GetNTracks() const;
59 Int_t GetNClusters() const;
60 Int_t GetNClusters(UInt_t trackId) const;
61 Int_t GetNDigits() const;
62 Int_t GetNDigits(UInt_t trackId) const;
63 Int_t GetNDigits(UInt_t trackId, UInt_t clusterId) const;
64 Int_t GetNDigitsInCluster(UInt_t clusterId) const;
65 Int_t GetNTriggers() const;
67 // Find internal MUON objects
68 AliMUONTrack* FindTrack(UInt_t trackId) const;
69 AliMUONVCluster* FindCluster(UInt_t clusterId) const;
70 AliMUONVCluster* FindCluster(UInt_t trackId, UInt_t clusterId) const;
71 AliMUONVDigit* FindDigit(UInt_t digitId) const;
72 AliMUONLocalTrigger* FindLocalTrigger(Int_t boardNumber) const;
74 // iterate over internal MUON objects
75 TIterator* CreateTrackIterator() const;
76 TIterator* CreateClusterIterator() const;
77 TIterator* CreateClusterIterator(UInt_t trackId) const;
78 TIterator* CreateDigitIterator() const;
79 TIterator* CreateDigitIterator(UInt_t trackId) const;
80 TIterator* CreateDigitIterator(UInt_t trackId, UInt_t clusterId) const;
81 TIterator* CreateDigitIteratorInCluster(UInt_t clusterId) const;
82 TIterator* CreateLocalTriggerIterator() const;
85 public: // static methods
87 // Reset the MUON tracker (using "recoParam" if provided)
88 static void ResetTracker(const AliMUONRecoParam* recoParam = 0x0, Bool_t info = kTRUE);
89 /// Return pointer to the MUON tracker if any (use first ResetTracker(...) to create it)
90 static AliMUONVTrackReconstructor* GetTracker() {return fgTracker;}
92 /// Set the version of track store
93 static void UseTrackStore(TString name) {fgTrackStoreName = name;}
94 /// Set the version of cluster store
95 static void UseClusterStore(TString name) {fgClusterStoreName = name;}
96 /// Set the version of digit store
97 static void UseDigitStore(TString name) {fgDigitStoreName = name;}
98 /// Set the version of trigger store
99 static void UseTriggerStore(TString name) {fgTriggerStoreName = name;}
101 // Create empty stores (use the version defined in this interface)
102 static AliMUONVTrackStore* NewTrackStore();
103 static AliMUONVClusterStore* NewClusterStore();
104 static AliMUONVDigitStore* NewDigitStore();
105 static AliMUONVTriggerStore* NewTriggerStore();
106 static AliMUONVTriggerTrackStore* NewTriggerTrackStore();
108 // ESD track parameters --> MUON track parameters
109 static void GetParamAtVertex(const AliESDMuonTrack& esdTrack, AliMUONTrackParam& trackParam);
110 static void GetParamAtDCA(const AliESDMuonTrack& esdTrack, AliMUONTrackParam& trackParam);
111 static void GetParamAtFirstCluster(const AliESDMuonTrack& esdTrack, AliMUONTrackParam& trackParam);
112 static void GetParamCov(const AliESDMuonTrack& esdTrack, AliMUONTrackParam& trackParam);
114 // MUON track parameters --> ESD track parameters
115 static void SetParamAtVertex(const AliMUONTrackParam& trackParam, AliESDMuonTrack& esdTrack);
116 static void SetParamAtDCA(const AliMUONTrackParam& trackParam, AliESDMuonTrack& esdTrack);
117 static void SetParamAtFirstCluster(const AliMUONTrackParam& trackParam, AliESDMuonTrack& esdTrack);
118 static void SetParamCov(const AliMUONTrackParam& trackParam, AliESDMuonTrack& esdTrack);
120 // ESDMuon objects --> MUON objects conversion
121 static void ESDToMUON(const AliESDMuonTrack& esdTrack, AliMUONTrack& track, Bool_t refit = kTRUE);
122 static void ESDToMUON(const AliESDMuonTrack& esdTrack, AliMUONLocalTrigger& locTrg);
123 static void ESDToMUON(const AliESDMuonCluster& esdCluster, AliMUONVCluster& cluster);
124 static void ESDToMUON(const AliESDMuonPad& esdPad, AliMUONVDigit& digit);
126 // MUON objects --> ESDMuon objects conversion
127 static void MUONToESD(const AliMUONTrack& track, AliESDMuonTrack& esdTrack, const Double_t vertex[3],
128 const AliMUONVDigitStore* digits = 0x0, const AliMUONLocalTrigger* locTrg = 0x0);
129 static void MUONToESD(const AliMUONLocalTrigger& locTrg, AliESDMuonTrack& esdTrack, UInt_t trackId,
130 const AliMUONTriggerTrack* triggerTrack = 0x0);
131 static void MUONToESD(const AliMUONVCluster& cluster, AliESDMuonCluster& esdCluster, const AliMUONVDigitStore* digits = 0x0);
132 static void MUONToESD(const AliMUONVDigit& digit, AliESDMuonPad& esdPad);
134 // Add ESD object into the corresponding MUON store
135 // return a pointer to the corresponding MUON object into the store
136 static AliMUONTrack* Add(const AliESDMuonTrack& esdTrack, AliMUONVTrackStore& trackStore, Bool_t refit = kTRUE);
137 static void Add(const AliESDMuonTrack& esdTrack, AliMUONVTriggerStore& triggerStore);
138 static AliMUONVCluster* Add(const AliESDMuonCluster& esdCluster, AliMUONVClusterStore& clusterStore);
139 static AliMUONVDigit* Add(const AliESDMuonPad& esdPad, AliMUONVDigitStore& digitStore);
144 AliMUONESDInterface (const AliMUONESDInterface&); ///< copy constructor
145 AliMUONESDInterface& operator=(const AliMUONESDInterface&); ///< assignment operator
151 AliMUONVCluster* FindClusterInTrack(const AliMUONTrack& track, UInt_t clusterId) const;
156 static AliMUONRecoParam* fgRecoParam; ///< reconstruction parameters for refitting
157 static AliMUONVTrackReconstructor* fgTracker; ///< track reconstructor for refitting
159 static TString fgTrackStoreName; ///< class name of the track store to use
160 static TString fgClusterStoreName; ///< class name of the cluster store to use
161 static TString fgDigitStoreName; ///< class name of the digit store to use
162 static TString fgTriggerStoreName; ///< class name of the trigger store to use
163 static TString fgTriggerTrackStoreName; ///< class name of the trigger track store to use
166 AliMUONVTrackStore* fTracks; ///< track container
167 AliMUONVDigitStore* fDigits; ///< digit container
168 AliMUONVTriggerStore* fTriggers; ///< trigger container
170 // maps (to speed up data retrieval)
171 AliMpExMap* fClusterMap; ///< map of clusters
172 AliMpExMap* fDigitMap; ///< map of digits
175 ClassDef(AliMUONESDInterface,0)