]>
Commit | Line | Data |
---|---|---|
1 | #ifndef ALIMUONPADSTATUSMAKER_H | |
2 | #define ALIMUONPADSTATUSMAKER_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 AliMUONPadStatusMaker | |
11 | /// \brief Make a 2DStore of pad statuses, using different sources of information | |
12 | /// | |
13 | // Author Laurent Aphecetche | |
14 | ||
15 | #ifndef ROOT_TObject | |
16 | # include "TObject.h" | |
17 | #endif | |
18 | #ifndef ROOT_TVector2 | |
19 | # include "TVector2.h" | |
20 | #endif | |
21 | ||
22 | class TExMap; | |
23 | class AliMUONCalibrationData; | |
24 | class AliMUONRecoParam; | |
25 | class AliMUONVCalibParam; | |
26 | class AliMUONVTrackerData; | |
27 | class AliMUONVStore; | |
28 | ||
29 | class AliMUONPadStatusMaker : public TObject | |
30 | { | |
31 | public: | |
32 | AliMUONPadStatusMaker(const AliMUONCalibrationData& calibData); | |
33 | virtual ~AliMUONPadStatusMaker(); | |
34 | ||
35 | /// Get the reference to the calibrationdata object we use. | |
36 | const AliMUONCalibrationData& CalibrationData() const { return fkCalibrationData; } | |
37 | ||
38 | /** Get access to internal status store (for debug only, as it may not be complete, | |
39 | depending on whether you've already called PadStatus for all possible de,manu | |
40 | combinations or not... | |
41 | */ | |
42 | AliMUONVStore* StatusStore() const { return fStatus; } | |
43 | ||
44 | AliMUONVCalibParam* PadStatus(Int_t detElemId, Int_t manuId) const; | |
45 | ||
46 | Int_t PadStatus(Int_t detElemId, Int_t manuId, Int_t manuChannel) const; | |
47 | ||
48 | AliMUONVStore* NeighboursStore() const; | |
49 | ||
50 | AliMUONVCalibParam* Neighbours(Int_t detElemId, Int_t manuId) const; | |
51 | ||
52 | static TString AsString(Int_t status); | |
53 | ||
54 | static TString AsCondition(Int_t status); | |
55 | ||
56 | /// Return Low and High limits for a0 parameter of gain (linear slope) | |
57 | TVector2 GainA1Limits() const { return fGainA1Limits; } | |
58 | /// Return Low and High limits for a1 parameter of gain (parabolic term) | |
59 | TVector2 GainA2Limits() const { return fGainA2Limits; } | |
60 | /// Return Low and High limits for thres parameter of gain | |
61 | TVector2 GainThresLimits() const { return fGainThresLimits; } | |
62 | ||
63 | /// Return HV threshold | |
64 | Double_t HVLimit(Int_t chamberId) const; | |
65 | ||
66 | /// Return Low and High threshold for pedestal mean | |
67 | TVector2 PedMeanLimits() const { return fPedMeanLimits; } | |
68 | /// Return Low and High threshold for pedestal sigma | |
69 | TVector2 PedSigmaLimits() const { return fPedSigmaLimits; } | |
70 | ||
71 | /// Set Low and High limits for a0 parameter of gain (linear slope) | |
72 | void GainA1Limits(float low, float high) { fGainA1Limits.Set(low,high); } | |
73 | /// Set Low and High limits for a1 parameter of gain (parabolic term) | |
74 | void GainA2Limits(float low, float high) { fGainA2Limits.Set(low,high); } | |
75 | /// Set Low and High limits for thres parameter of gain | |
76 | void GainThresLimits(float low, float high) { fGainThresLimits.Set(low,high); } | |
77 | ||
78 | /// Set HV limit | |
79 | void SetHVLimit(Int_t chamberId, Double_t hv); | |
80 | ||
81 | /// Set Low and High threshold for pedestal mean | |
82 | void SetPedMeanLimits(float low, float high) { fPedMeanLimits.Set(low,high); } | |
83 | /// Set Low and High threshold for pedestal sigma | |
84 | void SetPedSigmaLimits(float low, float high) { fPedSigmaLimits.Set(low,high); } | |
85 | ||
86 | /// Set Low and High threshold for gain a0 term | |
87 | void SetGainA1Limits(float low, float high) { fGainA1Limits.Set(low,high); } | |
88 | /// Set Low and High threshold for gain a1 term | |
89 | void SetGainA2Limits(float low, float high) { fGainA2Limits.Set(low,high); } | |
90 | /// Set Low and High threshold for gain threshold term | |
91 | void SetGainThresLimits(float low, float high) { fGainThresLimits.Set(low,high); } | |
92 | ||
93 | /// Set Low and High manu occupancy limits | |
94 | void SetManuOccupancyLimits(float low, float high) { fManuOccupancyLimits.Set(low,high); } | |
95 | /// Get manu occupancy limits | |
96 | TVector2 ManuOccupancyLimits() const { return fManuOccupancyLimits; } | |
97 | ||
98 | /// Set Low and High bus patch occupancy limits | |
99 | void SetBuspatchOccupancyLimits(float low, float high) { fBuspatchOccupancyLimits.Set(low,high); } | |
100 | /// Get bus patch occupancy limits | |
101 | TVector2 BuspatchOccupancyLimits() const { return fBuspatchOccupancyLimits; } | |
102 | ||
103 | /// Set Low and High DE occupancy limits | |
104 | void SetDEOccupancyLimits(float low, float high) { fDEOccupancyLimits.Set(low,high); } | |
105 | /// Get DE occupancy limits | |
106 | TVector2 DEOccupancyLimits() const { return fDEOccupancyLimits; } | |
107 | ||
108 | void SetLimits(const AliMUONRecoParam& recoParams); | |
109 | ||
110 | void Report(UInt_t mask); | |
111 | ||
112 | static Float_t SwitchValue(const TObjArray& dcsArray); | |
113 | ||
114 | Int_t HVStatus(Int_t detElemId, Int_t manuId) const; | |
115 | ||
116 | Int_t OccupancyStatus(Int_t detElemId, Int_t manuId) const; | |
117 | ||
118 | static void DecodeStatus(Int_t status, Int_t& pedStatus, Int_t& hvStatus, | |
119 | Int_t& gainStatus, Int_t& otherStatus); | |
120 | static Int_t BuildStatus(Int_t pedStatus, Int_t hvStatus, | |
121 | Int_t gainStatus, Int_t otherStatus); | |
122 | private: | |
123 | /// Not implemented | |
124 | AliMUONPadStatusMaker(const AliMUONPadStatusMaker&); | |
125 | /// Not implemented | |
126 | AliMUONPadStatusMaker& operator=(const AliMUONPadStatusMaker&); | |
127 | ||
128 | ||
129 | AliMUONVCalibParam* ComputeStatus(Int_t detElemId, Int_t manuId) const; | |
130 | ||
131 | Bool_t HVSt12Status(Int_t detElemId, Int_t sector, | |
132 | Bool_t& hvChannelTooLow, | |
133 | Bool_t& hvChannelTooHigh, | |
134 | Bool_t& hvChannelON) const; | |
135 | ||
136 | ||
137 | Bool_t HVSt345Status(Int_t detElemId, Int_t pcbIndex, | |
138 | Bool_t& hvChannelTooLow, | |
139 | Bool_t& hvChannelTooHigh, | |
140 | Bool_t& hvChannelON, | |
141 | Bool_t& hvSwitchON) const; | |
142 | ||
143 | void SetHVStatus(Int_t detElemId, Int_t index, Int_t status) const; | |
144 | ||
145 | private: | |
146 | /// General status | |
147 | enum EGeneralStatus | |
148 | { | |
149 | kMissing = (1<<7) | |
150 | }; | |
151 | ||
152 | /// Gain status | |
153 | enum EGainStatus | |
154 | { | |
155 | kGainOK = 0, | |
156 | kGainA1TooLow = (1<<1), | |
157 | kGainA1TooHigh = (1<<2), | |
158 | kGainA2TooLow = (1<<3), | |
159 | kGainA2TooHigh = (1<<4), | |
160 | kGainThresTooLow = (1<<5), | |
161 | kGainThresTooHigh = (1<<6), | |
162 | ||
163 | kGainMissing = kMissing // please always use last bit for meaning "missing" | |
164 | }; | |
165 | ||
166 | /// Pedestal status | |
167 | enum EPedestalStatus | |
168 | { | |
169 | kPedOK = 0, | |
170 | kPedMeanZero = (1<<1), | |
171 | kPedMeanTooLow = (1<<2), | |
172 | kPedMeanTooHigh = (1<<3), | |
173 | kPedSigmaTooLow = (1<<4), | |
174 | kPedSigmaTooHigh = (1<<5), | |
175 | ||
176 | kPedMissing = kMissing // please always use last bit for meaning "missing" | |
177 | }; | |
178 | ||
179 | /// HV Error | |
180 | enum EHVError | |
181 | { | |
182 | kHVOK = 0, | |
183 | kHVError = (1<<0), | |
184 | kHVTooLow = (1<<1), | |
185 | kHVTooHigh = (1<<2), // no longer to be used | |
186 | kHVChannelOFF = (1<<3), | |
187 | kHVSwitchOFF = (1<<4), | |
188 | ||
189 | kHVMissing = kMissing // please always use last bit for meaning "missing" | |
190 | }; | |
191 | ||
192 | /// Other | |
193 | enum EOccupancyStatus | |
194 | { | |
195 | kManuOccupancyTooLow = (1<<1), | |
196 | kManuOccupancyTooHigh = (1<<2), | |
197 | kBusPatchOccupancyTooLow = (1<<3), | |
198 | kBusPatchOccupancyTooHigh = (1<<4), | |
199 | kDEOccupancyTooLow = (1<<5), | |
200 | kDEOccupancyTooHigh = (1<<6) | |
201 | }; | |
202 | ||
203 | const AliMUONCalibrationData& fkCalibrationData; //!< helper class to get data access (not owner) | |
204 | ||
205 | TVector2 fGainA1Limits; //!< Low and High threshold for gain a0 parameter | |
206 | TVector2 fGainA2Limits; //!< Low and High threshold for gain a1 parameter | |
207 | TVector2 fGainThresLimits; //!< Low and High threshold for gain threshold parameter | |
208 | ||
209 | Double_t fHVLimit[10]; //!< Low thresholds for HV | |
210 | ||
211 | TVector2 fPedMeanLimits; //!< Low and High threshold for pedestal mean | |
212 | TVector2 fPedSigmaLimits; //!< Low and High threshold for pedestal sigma | |
213 | ||
214 | TVector2 fManuOccupancyLimits; //!< Low and High manu occupancy limits | |
215 | TVector2 fBuspatchOccupancyLimits; //!< Low and High buspatch occupancy limits | |
216 | TVector2 fDEOccupancyLimits; //!< Low and High DE occupancy limits | |
217 | ||
218 | AliMUONVStore* fStatus; //!< statuses of the pads | |
219 | ||
220 | mutable TExMap* fHV; //!< cache of hv statuses | |
221 | ||
222 | AliMUONVStore* fPedestals; //!< pedestal values | |
223 | AliMUONVStore* fGains; //!< gain values | |
224 | ||
225 | AliMUONVTrackerData* fTrackerData; //!< to get occupancies... | |
226 | ||
227 | ClassDef(AliMUONPadStatusMaker,0) // Creates pad statuses from ped,gain,hv | |
228 | }; | |
229 | ||
230 | #endif |