]> git.uio.no Git - u/mrichter/AliRoot.git/blob - MUON/AliMUONESDInterface.h
- Put the code to fill ESD with trigger data back in the correct framework:
[u/mrichter/AliRoot.git] / MUON / AliMUONESDInterface.h
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 AliMUONVTriggerStore;
28 class AliMUONTrackParam;
29 class AliMUONVTrackReconstructor;
30 class AliESDEvent;
31 class AliESDMuonTrack;
32 class AliESDMuonCluster;
33 class AliESDMuonPad;
34 class TIterator;
35
36 class AliMUONESDInterface : public TObject
37 {
38 public: // methods to play with internal objects
39   
40   AliMUONESDInterface();
41   virtual ~AliMUONESDInterface();
42   
43   virtual void Clear(Option_t* = "");
44   
45   void LoadEvent(AliESDEvent& esdEvent);
46   
47   /// Return internal track store
48   AliMUONVTrackStore* GetTracks() const {return fTracks;}
49   /// Return internal track store
50   AliMUONVDigitStore* GetDigits() const {return fDigits;}
51   /// Return internal trigger store
52   AliMUONVTriggerStore* GetTriggers() const {return fTriggers;}
53   
54   // Return numbers of tracks/clusters/digits
55   Int_t GetNTracks() const;
56   Int_t GetNClusters() const;
57   Int_t GetNClusters(UInt_t trackId) const;
58   Int_t GetNDigits() const;
59   Int_t GetNDigits(UInt_t trackId) const;
60   Int_t GetNDigits(UInt_t trackId, UInt_t clusterId) const;
61   Int_t GetNDigitsInCluster(UInt_t clusterId) const;
62   Int_t GetNTriggers() const;
63   
64   // Find internal MUON objects
65   AliMUONTrack*        FindTrack(UInt_t trackId) const;
66   AliMUONVCluster*     FindCluster(UInt_t clusterId) const;
67   AliMUONVCluster*     FindCluster(UInt_t trackId, UInt_t clusterId) const;
68   AliMUONVDigit*       FindDigit(UInt_t digitId) const;
69   AliMUONLocalTrigger* FindLocalTrigger(Int_t boardNumber) const;
70   
71   // iterate over internal MUON objects
72   TIterator* CreateTrackIterator() const;
73   TIterator* CreateClusterIterator() const;
74   TIterator* CreateClusterIterator(UInt_t trackId) const;
75   TIterator* CreateDigitIterator() const;
76   TIterator* CreateDigitIterator(UInt_t trackId) const;
77   TIterator* CreateDigitIterator(UInt_t trackId, UInt_t clusterId) const;
78   TIterator* CreateDigitIteratorInCluster(UInt_t clusterId) const;
79   TIterator* CreateLocalTriggerIterator() const;
80   
81   
82 public: // static methods
83   
84   /// Set the version of track store
85   static void UseTrackStore(TString name) {fgTrackStoreName = name;}
86   /// Set the version of cluster store
87   static void UseClusterStore(TString name) {fgClusterStoreName = name;}
88   /// Set the version of digit store
89   static void UseDigitStore(TString name) {fgDigitStoreName = name;}
90   /// Set the version of trigger store
91   static void UseTriggerStore(TString name) {fgTriggerStoreName = name;}
92   
93   // Create empty stores (use the version defined in this interface)
94   static AliMUONVTrackStore* NewTrackStore();
95   static AliMUONVClusterStore* NewClusterStore();
96   static AliMUONVDigitStore* NewDigitStore();
97   static AliMUONVTriggerStore* NewTriggerStore();
98   
99   // ESD track parameters --> MUON track parameters
100   static void GetParamAtVertex(const AliESDMuonTrack& esdTrack, AliMUONTrackParam& trackParam);
101   static void GetParamAtDCA(const AliESDMuonTrack& esdTrack, AliMUONTrackParam& trackParam);
102   static void GetParamAtFirstCluster(const AliESDMuonTrack& esdTrack, AliMUONTrackParam& trackParam);
103   static void GetParamCov(const AliESDMuonTrack& esdTrack, AliMUONTrackParam& trackParam);
104   
105   // MUON track parameters --> ESD track parameters
106   static void SetParamAtVertex(const AliMUONTrackParam& trackParam, AliESDMuonTrack& esdTrack);
107   static void SetParamAtDCA(const AliMUONTrackParam& trackParam, AliESDMuonTrack& esdTrack);
108   static void SetParamAtFirstCluster(const AliMUONTrackParam& trackParam, AliESDMuonTrack& esdTrack);
109   static void SetParamCov(const AliMUONTrackParam& trackParam, AliESDMuonTrack& esdTrack);
110   
111   // ESDMuon objects --> MUON objects conversion
112   static void ESDToMUON(const AliESDMuonTrack& esdTrack, AliMUONTrack& track);
113   static void ESDToMUON(const AliESDMuonTrack& esdTrack, AliMUONLocalTrigger& locTrg);
114   static void ESDToMUON(const AliESDMuonCluster& esdCluster, AliMUONVCluster& cluster);
115   static void ESDToMUON(const AliESDMuonPad& esdPad, AliMUONVDigit& digit);
116   
117   // MUON objects --> ESDMuon objects conversion
118   static void MUONToESD(const AliMUONTrack& track, AliESDMuonTrack& esdTrack, const Double_t vertex[3],
119                         const AliMUONVDigitStore* digits = 0x0, const AliMUONLocalTrigger* locTrg = 0x0);
120   static void MUONToESD(const AliMUONLocalTrigger& locTrg, AliESDMuonTrack& esdTrack, UInt_t trackId);
121   static void MUONToESD(const AliMUONVCluster& cluster, AliESDMuonCluster& esdCluster, const AliMUONVDigitStore* digits = 0x0);
122   static void MUONToESD(const AliMUONVDigit& digit, AliESDMuonPad& esdPad);
123   
124   // Add ESD object into the corresponding MUON store
125   // return a pointer to the corresponding MUON object into the store
126   static AliMUONTrack*    Add(const AliESDMuonTrack& esdTrack, AliMUONVTrackStore& trackStore);
127   static void             Add(const AliESDMuonTrack& esdTrack, AliMUONVTriggerStore& triggerStore);
128   static AliMUONVCluster* Add(const AliESDMuonCluster& esdCluster, AliMUONVClusterStore& clusterStore);
129   static AliMUONVDigit*   Add(const AliESDMuonPad& esdPad, AliMUONVDigitStore& digitStore);
130   
131   
132 protected:
133   
134   AliMUONESDInterface (const AliMUONESDInterface&); ///< copy constructor
135   AliMUONESDInterface& operator=(const AliMUONESDInterface&); ///< assignment operator
136   
137   
138 private:
139   
140   void Reset();
141   AliMUONVCluster* FindClusterInTrack(const AliMUONTrack& track, UInt_t clusterId) const;
142   
143   
144 private:
145   
146   static AliMUONVTrackReconstructor* fgTracker; ///< track reconstructor for refitting
147     
148   static TString fgTrackStoreName;   ///< class name of the track store to use
149   static TString fgClusterStoreName; ///< class name of the cluster store to use
150   static TString fgDigitStoreName;   ///< class name of the digit store to use
151   static TString fgTriggerStoreName; ///< class name of the trigger store to use
152   
153   // data containers
154   AliMUONVTrackStore*   fTracks;   ///< track container
155   AliMUONVDigitStore*   fDigits;   ///< digit container
156   AliMUONVTriggerStore* fTriggers; ///< trigger container
157   
158   // maps (to speed up data retrieval)
159   AliMpExMap* fClusterMap; ///< map of clusters
160   AliMpExMap* fDigitMap;   ///< map of digits
161   
162     
163   ClassDef(AliMUONESDInterface,0)
164 };
165
166 #endif
167