1 #ifndef ALIMUONTRACKERDATA_H
2 #define ALIMUONTRACKERDATA_H
4 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
5 * See cxx source for full Copyright notice */
10 /// \class AliMUONTrackerData
11 /// \brief Implementation of AliMUONVTrackerData
13 // Author Laurent Aphecetche, Subatech
15 #ifndef ALIMUONVTRACKERDATA_H
16 # include "AliMUONVTrackerData.h"
19 class AliMUONSparseHisto;
20 class AliMUONVCalibParam;
22 class AliMpDetElement;
25 class AliMUONTrackerData : public AliMUONVTrackerData
28 AliMUONTrackerData(const char* name="", const char* title="",
30 Bool_t runnable=kTRUE);
31 virtual ~AliMUONTrackerData();
33 virtual Bool_t Add(const AliMUONVStore& channelValues);
35 virtual Double_t BusPatch(Int_t busPatchId, Int_t dim=0) const;
37 virtual Double_t Chamber(Int_t chamberId, Int_t dim=0) const;
39 virtual Double_t Channel(Int_t detElemId, Int_t manuId, Int_t manuChannel,
42 virtual void Clear(Option_t* opt="");
44 virtual Double_t Count(Int_t detElemId, Int_t manuId, Int_t manuChannel) const;
46 virtual Double_t DetectionElement(Int_t detElemId, Int_t dim=0) const;
48 virtual TString DimensionName(Int_t dim) const;
50 virtual TString ExternalDimensionName(Int_t dim) const;
52 virtual Bool_t HasChamber(Int_t chamberId) const;
54 virtual Bool_t HasBusPatch(Int_t busPatchId) const;
56 virtual Bool_t HasDetectionElement(Int_t detElemId) const;
58 virtual Bool_t HasManu(Int_t detElemId, Int_t manuId) const;
60 virtual Bool_t HasPCB(Int_t detElemId, Int_t pcbIndex) const;
62 /// Whether we can be run
63 virtual Bool_t IsRunnable() const { return fIsRunnable; }
65 virtual Double_t Manu(Int_t detElemId, Int_t manuId, Int_t dim=0) const;
67 /// Returns the number of dimensions (i.e. the number of values) each element has
68 virtual Int_t NumberOfDimensions() const;
70 /// Returns the number of events we have seen so far
71 virtual Int_t NumberOfEvents() const { return fNevents; }
73 virtual Double_t PCB(Int_t detElemId, Int_t pcbIndex, Int_t dim=0) const;
77 /// Print, with option, all objects whose name matches wildcard
78 virtual void Print(Option_t* wildcard, Option_t* opt) const;
80 virtual void SetDimensionName(Int_t index, const char* value);
82 Bool_t CanHistogram() const { return kTRUE; }
84 void SetHistogramDimension(Int_t index, Bool_t value);
86 TH1* CreateChannelHisto(Int_t detElemId, Int_t manuId,
87 Int_t manuChannel, Int_t dim=0);
89 TH1* CreateBusPatchHisto(Int_t busPatchId, Int_t dim=0);
91 TH1* CreateDEHisto(Int_t detElemId, Int_t dim=0);
93 TH1* CreateManuHisto(Int_t detElemId, Int_t manuId, Int_t dim=0);
95 TH1* CreatePCBHisto(Int_t detElemId, Int_t pcbIndex, Int_t dim=0);
97 TH1* CreateChamberHisto(Int_t chamberId, Int_t dim=0);
101 void FillChannel(Int_t detElemId, Int_t manuId, Int_t manuChannel,
102 Int_t dim, Double_t value);
104 AliMUONSparseHisto* GetChannelHisto(Int_t detElemId, Int_t manuId,
105 Int_t manuChannel, Int_t dim=0);
107 AliMUONVCalibParam* BusPatchParam(Int_t busPatch, Bool_t create=kFALSE) const;
109 AliMUONVCalibParam* CreateBusPatchParam(Int_t busPatch) const;
111 AliMUONVCalibParam* ChamberParam(Int_t chamberId, Bool_t create=kFALSE) const;
113 AliMUONVCalibParam* CreateChamberParam(Int_t chamberId) const;
115 AliMUONVCalibParam* ChannelParam(Int_t detElemId, Int_t manuId,
116 AliMUONVCalibParam* external=0x0) const;
118 AliMUONVCalibParam* DetectionElementParam(Int_t detElemId, Bool_t create=kFALSE) const;
120 AliMUONVCalibParam* CreateDetectionElementParam(Int_t detElemId) const;
122 AliMUONVCalibParam* ManuParam(Int_t detElemId, Int_t manuId, Bool_t create=kFALSE) const;
124 AliMUONVCalibParam* CreateManuParam(Int_t detElemInd, Int_t manuId) const;
126 AliMUONVCalibParam* PCBParam(Int_t detElemId, Int_t pcbIndex, Bool_t create=kFALSE) const;
128 AliMUONVCalibParam* CreatePCBParam(Int_t detElemId, Int_t pcbIndex) const;
130 /// Index of the dimension containing the number of time an item was hit
131 virtual Int_t IndexOfNumberDimension() const { return fDimension - 1; }
133 /// Index of the dimension containing the occupancy number
134 virtual Int_t IndexOfOccupancyDimension() const { return fDimension - 2; }
138 AliMUONTrackerData(const AliMUONTrackerData& rhs);
140 AliMUONTrackerData& operator=(const AliMUONTrackerData& rhs);
142 void Add(TH1& h, const AliMUONSparseHisto& sh);
144 void AddManuHisto(TH1& h, Int_t detElemId, Int_t manuId, Int_t dim);
146 void AddBusPatchHisto(TH1& h, Int_t busPatchId, Int_t dim);
148 void AddDEHisto(TH1& h, Int_t detElemId, Int_t dim);
150 TH1* CreateHisto(const char* name, Int_t dim) const;
152 AliMUONVCalibParam* CreateDouble(const AliMUONVCalibParam& param) const;
154 Int_t GetParts(AliMUONVCalibParam* external,
155 AliMUONVCalibParam*& chamber,
156 AliMUONVCalibParam*& de,
157 AliMUONVCalibParam*& busPatch,
158 AliMUONVCalibParam*& pcb,
159 AliMUONVCalibParam*& manu,
160 AliMUONVCalibParam*& channel,
161 AliMpDetElement*& mpde);
163 /// Convert from external to internal index
164 Int_t External2Internal(Int_t index) const { return index*2; }
166 void SetInternalDimensionName(Int_t index, const char* value);
168 void SetExternalDimensionName(Int_t index, const char* value);
170 Double_t Value(const AliMUONVCalibParam& param, Int_t i, Int_t dim) const;
172 /// The number of values we actually *store* for each item
173 Int_t Dimension() const { return fDimension; }
175 /// The number of values we are inputting
176 Int_t ExternalDimension() const { return fExternalDimension; }
178 /// Whether we have histograms for a given dimension, or not
179 Bool_t IsHistogrammed(Int_t dim) const { return ( fHistogramming[dim] > 0 ); }
183 AliMUONVStore* fChannelValues; ///< the channel store
184 AliMUONVStore* fManuValues; ///< the manu store
185 AliMUONVStore* fBusPatchValues; ///< the bus patch store
186 AliMUONVStore* fDEValues; ///< the detection element store
187 AliMUONVStore* fChamberValues; ///< the chamber store
188 AliMUONVStore* fPCBValues; ///< the pcb store
189 Int_t fDimension; ///< the dimension of the data
190 Int_t fNevents; ///< the number of events treated
191 TObjArray* fDimensionNames; ///< the names of the (internal) dimensions
192 TObjArray* fExternalDimensionNames; ///< the names of the external (i.e. original) dimensions
193 Int_t fExternalDimension; ///< number of interface values per item
194 Bool_t fIsRunnable; ///< whether we can deal with more than one event
195 /// whether we should histogram the dimension(s)
196 Int_t* fHistogramming; //[fExternalDimension] whether we should histogram the dimension(s)
197 AliMUONVStore* fChannelHistos; ///< the channel histograms
199 static const Int_t fgkExtraDimension; ///< to hold extra information
200 static const Int_t fgkVirtualExtraDimension; ///< to give access to information not stored, but computed on the fly
202 ClassDef(AliMUONTrackerData,2) // Implementation of AliMUONVTrackerData