Coverity fix for uninitialized variables and check for returned null value
[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 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   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;}
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   static AliMUONVTrackReconstructor* GetTracker() {return fgTracker;}
94   
95   /// Set the version of track store
96   static void UseTrackStore(TString name) {fgTrackStoreName = name;}
97   /// Set the version of cluster store
98   static void UseClusterStore(TString name) {fgClusterStoreName = name;}
99   /// Set the version of digit store
100   static void UseDigitStore(TString name) {fgDigitStoreName = name;}
101   /// Set the version of trigger store
102   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   ClassDef(AliMUONESDInterface,0)
186 };
187
188 #endif
189