Line data Source code
1 : #ifndef ALIMUONESDINTERFACE_H
2 : #define ALIMUONESDINTERFACE_H
3 :
4 : /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
5 : * See cxx source for full Copyright notice */
6 :
7 : // $Id$
8 :
9 : /// \ingroup rec
10 : /// \class AliMUONESDInterface
11 : /// \brief Converter between MUON track/cluster/digit and ESDMuon track/cluster/pad
12 : ///
13 : // Author Philippe Pillot
14 :
15 : #include <AliMpExMap.h>
16 : #include <TObject.h>
17 : #include <TString.h>
18 : #include "AliLog.h"
19 :
20 : class AliMUONTrack;
21 : class AliMUONVTrackStore;
22 : class AliMUONVCluster;
23 : class AliMUONVClusterStore;
24 : class AliMUONVDigit;
25 : class AliMUONVDigitStore;
26 : class AliMUONLocalTrigger;
27 : class AliMUONTriggerTrack;
28 : class AliMUONVTriggerTrackStore;
29 : class AliMUONVTriggerStore;
30 : class AliMUONTrackParam;
31 : class AliMUONVTrackReconstructor;
32 : class AliESDEvent;
33 : class AliESDMuonTrack;
34 : class AliESDMuonCluster;
35 : class AliESDMuonPad;
36 : class TIterator;
37 : class AliMUONRecoParam;
38 :
39 : class AliMUONESDInterface : public TObject
40 : {
41 : public: // methods to play with internal objects
42 :
43 : AliMUONESDInterface();
44 : virtual ~AliMUONESDInterface();
45 :
46 : virtual void Clear(Option_t* = "");
47 :
48 : void LoadEvent(AliESDEvent& esdEvent, Bool_t refit = kTRUE);
49 :
50 : /// Return internal track store
51 0 : AliMUONVTrackStore* GetTracks() const {return fTracks;}
52 : /// Return internal track store
53 0 : AliMUONVDigitStore* GetDigits() const {return fDigits;}
54 : /// Return internal trigger store
55 0 : AliMUONVTriggerStore* GetTriggers() const {return fTriggers;}
56 :
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;
66 :
67 : // Check that all digits have been stored for a given track
68 : Bool_t DigitsStored(UInt_t trackId) const;
69 :
70 : // Find internal MUON objects
71 : AliMUONTrack* FindTrack(UInt_t trackId) const;
72 : AliMUONVCluster* FindCluster(UInt_t clusterId) const;
73 : AliMUONVCluster* FindCluster(UInt_t trackId, UInt_t clusterId) const;
74 : AliMUONVDigit* FindDigit(UInt_t digitId) const;
75 : AliMUONLocalTrigger* FindLocalTrigger(Int_t boardNumber) const;
76 :
77 : // iterate over internal MUON objects
78 : TIterator* CreateTrackIterator() const;
79 : TIterator* CreateClusterIterator() const;
80 : TIterator* CreateClusterIterator(UInt_t trackId) const;
81 : TIterator* CreateDigitIterator() const;
82 : TIterator* CreateDigitIterator(UInt_t trackId) const;
83 : TIterator* CreateDigitIterator(UInt_t trackId, UInt_t clusterId) const;
84 : TIterator* CreateDigitIteratorInCluster(UInt_t clusterId) const;
85 : TIterator* CreateLocalTriggerIterator() const;
86 :
87 :
88 : public: // static methods
89 :
90 : // Reset the MUON tracker (using "recoParam" if provided)
91 : static void ResetTracker(const AliMUONRecoParam* recoParam = 0x0, Bool_t info = kTRUE);
92 : /// Return pointer to the MUON tracker if any (use first ResetTracker(...) to create it)
93 0 : static AliMUONVTrackReconstructor* GetTracker() {return fgTracker;}
94 :
95 : /// Set the version of track store
96 0 : static void UseTrackStore(TString name) {fgTrackStoreName = name;}
97 : /// Set the version of cluster store
98 0 : static void UseClusterStore(TString name) {fgClusterStoreName = name;}
99 : /// Set the version of digit store
100 0 : static void UseDigitStore(TString name) {fgDigitStoreName = name;}
101 : /// Set the version of trigger store
102 0 : static void UseTriggerStore(TString name) {fgTriggerStoreName = name;}
103 :
104 : // Create empty stores (use the version defined in this interface)
105 : static AliMUONVTrackStore* NewTrackStore();
106 : static AliMUONVClusterStore* NewClusterStore();
107 : static AliMUONVCluster* NewCluster();
108 : static AliMUONVDigitStore* NewDigitStore();
109 : static AliMUONVDigit* NewDigit();
110 : static AliMUONVTriggerStore* NewTriggerStore();
111 : static AliMUONVTriggerTrackStore* NewTriggerTrackStore();
112 :
113 : // ESD track parameters --> MUON track parameters
114 : static void GetParamAtVertex(const AliESDMuonTrack& esdTrack, AliMUONTrackParam& trackParam);
115 : static void GetParamAtDCA(const AliESDMuonTrack& esdTrack, AliMUONTrackParam& trackParam);
116 : static void GetParamAtFirstCluster(const AliESDMuonTrack& esdTrack, AliMUONTrackParam& trackParam);
117 : static void GetParamCov(const AliESDMuonTrack& esdTrack, AliMUONTrackParam& trackParam);
118 :
119 : // MUON track parameters --> ESD track parameters
120 : static void SetParamAtVertex(const AliMUONTrackParam& trackParam, AliESDMuonTrack& esdTrack);
121 : static void SetParamAtDCA(const AliMUONTrackParam& trackParam, AliESDMuonTrack& esdTrack);
122 : static void SetParamAtFirstCluster(const AliMUONTrackParam& trackParam, AliESDMuonTrack& esdTrack);
123 : static void SetParamCov(const AliMUONTrackParam& trackParam, AliESDMuonTrack& esdTrack);
124 :
125 : // ESDMuon objects --> MUON objects conversion
126 : static void ESDToMUON(const AliESDMuonTrack& esdTrack, AliMUONTrack& track, Bool_t refit = kTRUE);
127 : static void ESDToMUON(const AliESDMuonTrack& esdTrack, AliMUONLocalTrigger& locTrg);
128 : static void ESDToMUON(const AliESDMuonCluster& esdCluster, AliMUONVCluster& cluster);
129 : static void ESDToMUON(const AliESDMuonPad& esdPad, AliMUONVDigit& digit);
130 :
131 : // MUON objects --> ESDMuon objects conversion
132 : static void MUONToESD(const AliMUONTrack& track, AliESDEvent& esd, const Double_t vertex[3],
133 : const AliMUONVDigitStore* digits = 0x0, const AliMUONLocalTrigger* locTrg = 0x0);
134 : static void MUONToESD(const AliMUONTrack& track, AliESDMuonTrack& esdTrack, const Double_t vertex[3],
135 : const AliMUONLocalTrigger* locTrg = 0x0);
136 : static void MUONToESD(const AliMUONLocalTrigger& locTrg, AliESDEvent& esd, UInt_t trackId,
137 : const AliMUONTriggerTrack* triggerTrack = 0x0);
138 : static void MUONToESD(const AliMUONLocalTrigger& locTrg, AliESDMuonTrack& esdTrack, UInt_t trackId,
139 : const AliMUONTriggerTrack* triggerTrack = 0x0);
140 : static void MUONToESD(const AliMUONVCluster& cluster, AliESDEvent& esd, const AliMUONVDigitStore* digits = 0x0);
141 : static void MUONToESD(const AliMUONVCluster& cluster, AliESDMuonCluster& esdCluster, Bool_t copyPadsId = kFALSE);
142 : static void MUONToESD(const AliMUONVDigit& digit, AliESDEvent& esd);
143 : static void MUONToESD(const AliMUONVDigit& digit, AliESDMuonPad& esdPad);
144 :
145 : // Add ESD object into the corresponding MUON store
146 : // return a pointer to the corresponding MUON object into the store
147 : static AliMUONTrack* Add(const AliESDMuonTrack& esdTrack, AliMUONVTrackStore& trackStore, Bool_t refit = kTRUE);
148 : static void Add(const AliESDMuonTrack& esdTrack, AliMUONVTriggerStore& triggerStore);
149 : static AliMUONVCluster* Add(const AliESDMuonCluster& esdCluster, AliMUONVClusterStore& clusterStore);
150 : static AliMUONVDigit* Add(const AliESDMuonPad& esdPad, AliMUONVDigitStore& digitStore);
151 :
152 :
153 : protected:
154 :
155 : AliMUONESDInterface (const AliMUONESDInterface&); ///< copy constructor
156 : AliMUONESDInterface& operator=(const AliMUONESDInterface&); ///< assignment operator
157 :
158 :
159 : private:
160 :
161 : void Reset();
162 :
163 :
164 : private:
165 :
166 : static AliMUONRecoParam* fgRecoParam; ///< reconstruction parameters for refitting
167 : static AliMUONVTrackReconstructor* fgTracker; ///< track reconstructor for refitting
168 :
169 : static TString fgTrackStoreName; ///< class name of the track store to use
170 : static TString fgClusterStoreName; ///< class name of the cluster store to use
171 : static TString fgDigitStoreName; ///< class name of the digit store to use
172 : static TString fgTriggerStoreName; ///< class name of the trigger store to use
173 : static TString fgTriggerTrackStoreName; ///< class name of the trigger track store to use
174 :
175 : // data containers
176 : AliMUONVTrackStore* fTracks; ///< track container
177 : AliMUONVDigitStore* fDigits; ///< digit container
178 : AliMUONVTriggerStore* fTriggers; ///< trigger container
179 :
180 : // maps (to speed up data retrieval)
181 : AliMpExMap* fClusterMap; ///< map of clusters
182 : AliMpExMap* fDigitMap; ///< map of digits
183 :
184 :
185 18 : ClassDef(AliMUONESDInterface,0)
186 : };
187 :
188 : #endif
189 :
|