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