]> git.uio.no Git - u/mrichter/AliRoot.git/blob - MUON/AliMUONPadStatusMaker.h
Attempt to make the HV filtering more robust
[u/mrichter/AliRoot.git] / MUON / AliMUONPadStatusMaker.h
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 private:
119   /// Not implemented
120   AliMUONPadStatusMaker(const AliMUONPadStatusMaker&);
121   /// Not implemented
122   AliMUONPadStatusMaker& operator=(const AliMUONPadStatusMaker&);
123
124   static void DecodeStatus(Int_t status, Int_t& pedStatus, Int_t& hvStatus, 
125                            Int_t&  gainStatus, Int_t& otherStatus);
126   static Int_t BuildStatus(Int_t pedStatus, Int_t hvStatus, 
127                            Int_t gainStatus, Int_t otherStatus);
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