1 #ifndef ALIMUONPADSTATUSMAKER_H
2 #define ALIMUONPADSTATUSMAKER_H
4 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
5 * See cxx source for full Copyright notice */
10 /// \class AliMUONPadStatusMaker
11 /// \brief Make a 2DStore of pad statuses, using different sources of information
13 // Author Laurent Aphecetche
19 # include "TVector2.h"
23 class AliMUONCalibrationData;
24 class AliMUONRecoParam;
25 class AliMUONVCalibParam;
26 class AliMUONVTrackerData;
31 class AliMUONPadStatusMaker : public TObject
34 AliMUONPadStatusMaker(const AliMUONCalibrationData& calibData);
35 virtual ~AliMUONPadStatusMaker();
37 /// Get the reference to the calibrationdata object we use.
38 const AliMUONCalibrationData& CalibrationData() const { return fkCalibrationData; }
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...
44 AliMUONVStore* StatusStore() const { return fStatus; }
46 AliMUONVCalibParam* PadStatus(Int_t detElemId, Int_t manuId) const;
48 Int_t PadStatus(Int_t detElemId, Int_t manuId, Int_t manuChannel) const;
50 AliMUONVStore* NeighboursStore() const;
52 AliMUONVCalibParam* Neighbours(Int_t detElemId, Int_t manuId) const;
54 static TString AsString(Int_t status);
56 static TString AsCondition(Int_t status);
58 /// Return Low and High limits for a0 parameter of gain (linear slope)
59 TVector2 GainA1Limits() const { return fGainA1Limits; }
60 /// Return Low and High limits for a1 parameter of gain (parabolic term)
61 TVector2 GainA2Limits() const { return fGainA2Limits; }
62 /// Return Low and High limits for thres parameter of gain
63 TVector2 GainThresLimits() const { return fGainThresLimits; }
65 /// Return HV threshold
66 Double_t HVLimit(Int_t chamberId) const;
68 /// Return Low and High threshold for pedestal mean
69 TVector2 PedMeanLimits() const { return fPedMeanLimits; }
70 /// Return Low and High threshold for pedestal sigma
71 TVector2 PedSigmaLimits() const { return fPedSigmaLimits; }
73 /// Set Low and High limits for a0 parameter of gain (linear slope)
74 void GainA1Limits(float low, float high) { fGainA1Limits.Set(low,high); }
75 /// Set Low and High limits for a1 parameter of gain (parabolic term)
76 void GainA2Limits(float low, float high) { fGainA2Limits.Set(low,high); }
77 /// Set Low and High limits for thres parameter of gain
78 void GainThresLimits(float low, float high) { fGainThresLimits.Set(low,high); }
81 void SetHVLimit(Int_t chamberId, Double_t hv);
83 /// Set Low and High threshold for pedestal mean
84 void SetPedMeanLimits(float low, float high) { fPedMeanLimits.Set(low,high); }
85 /// Set Low and High threshold for pedestal sigma
86 void SetPedSigmaLimits(float low, float high) { fPedSigmaLimits.Set(low,high); }
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); }
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; }
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; }
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; }
110 void SetLimits(const AliMUONRecoParam& recoParams);
112 void Report(UInt_t mask);
114 static Float_t SwitchValue(const TObjArray& dcsArray);
116 Int_t HVStatus(Int_t detElemId, Int_t manuId) const;
118 Int_t OccupancyStatus(Int_t detElemId, Int_t manuId) const;
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);
126 AliMUONPadStatusMaker(const AliMUONPadStatusMaker&);
128 AliMUONPadStatusMaker& operator=(const AliMUONPadStatusMaker&);
131 AliMUONVCalibParam* ComputeStatus(Int_t detElemId, Int_t manuId) const;
133 Bool_t HVSt12Status(Int_t detElemId, Int_t sector,
134 Bool_t& hvChannelTooLow,
135 Bool_t& hvChannelTooHigh,
136 Bool_t& hvChannelON) const;
139 Bool_t HVSt345Status(Int_t detElemId, Int_t pcbIndex,
140 Bool_t& hvChannelTooLow,
141 Bool_t& hvChannelTooHigh,
143 Bool_t& hvSwitchON) const;
145 void SetHVStatus(Int_t detElemId, Int_t index, Int_t status) const;
158 kGainA1TooLow = (1<<1),
159 kGainA1TooHigh = (1<<2),
160 kGainA2TooLow = (1<<3),
161 kGainA2TooHigh = (1<<4),
162 kGainThresTooLow = (1<<5),
163 kGainThresTooHigh = (1<<6),
165 kGainMissing = kMissing // please always use last bit for meaning "missing"
172 kPedMeanZero = (1<<1),
173 kPedMeanTooLow = (1<<2),
174 kPedMeanTooHigh = (1<<3),
175 kPedSigmaTooLow = (1<<4),
176 kPedSigmaTooHigh = (1<<5),
178 kPedMissing = kMissing // please always use last bit for meaning "missing"
187 kHVTooHigh = (1<<2), // no longer to be used
188 kHVChannelOFF = (1<<3),
189 kHVSwitchOFF = (1<<4),
191 kHVMissing = kMissing // please always use last bit for meaning "missing"
195 enum EOccupancyStatus
197 kManuOccupancyTooLow = (1<<1),
198 kManuOccupancyTooHigh = (1<<2),
199 kBusPatchOccupancyTooLow = (1<<3),
200 kBusPatchOccupancyTooHigh = (1<<4),
201 kDEOccupancyTooLow = (1<<5),
202 kDEOccupancyTooHigh = (1<<6)
205 const AliMUONCalibrationData& fkCalibrationData; //!< helper class to get data access (not owner)
207 TVector2 fGainA1Limits; //!< Low and High threshold for gain a0 parameter
208 TVector2 fGainA2Limits; //!< Low and High threshold for gain a1 parameter
209 TVector2 fGainThresLimits; //!< Low and High threshold for gain threshold parameter
211 Double_t fHVLimit[10]; //!< Low thresholds for HV
213 TVector2 fPedMeanLimits; //!< Low and High threshold for pedestal mean
214 TVector2 fPedSigmaLimits; //!< Low and High threshold for pedestal sigma
216 TVector2 fManuOccupancyLimits; //!< Low and High manu occupancy limits
217 TVector2 fBuspatchOccupancyLimits; //!< Low and High buspatch occupancy limits
218 TVector2 fDEOccupancyLimits; //!< Low and High DE occupancy limits
220 AliMUONVStore* fStatus; //!< statuses of the pads
222 mutable TExMap* fHV; //!< cache of hv statuses
224 AliMUONVStore* fPedestals; //!< pedestal values
225 AliMUONVStore* fGains; //!< gain values
227 AliMUONVTrackerData* fTrackerData; //!< to get occupancies...
229 ClassDef(AliMUONPadStatusMaker,0) // Creates pad statuses from ped,gain,hv