No longer uses TObject::Clone default implementation as it turns out to be too slow...
[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
22class AliMUONCalibrationData;
8d8e920c 23class AliMUONVStore;
2c780493 24class TMap;
25
26class AliMUONPadStatusMaker : public TObject
27{
28public:
29 AliMUONPadStatusMaker(const AliMUONCalibrationData& calibData);
30 virtual ~AliMUONPadStatusMaker();
31
8d8e920c 32 AliMUONVStore* MakeGainStatus(const AliMUONVStore& gainValues) const;
2c780493 33
8d8e920c 34 AliMUONVStore* MakeHVStatus(const TMap& hvMap) const;
2c780493 35
8d8e920c 36 AliMUONVStore* MakePedestalStatus(const AliMUONVStore& pedValues) const;
2c780493 37
96199305 38 /// Produces a status store. Should not return 0x0.
8d8e920c 39 AliMUONVStore* MakeStatus() const;
2c780493 40
8d8e920c 41 static AliMUONVStore* GeneratePadStatus(Int_t value);
96199305 42
71a2d3aa 43 /// Return Low and High threshold for St12 HV
2c780493 44 TVector2 HVSt12Limits() const { return fHVSt12Limits; }
71a2d3aa 45 /// Return Low and High threshold for St345 HV
2c780493 46 TVector2 HVSt345Limits() const { return fHVSt345Limits; }
47
71a2d3aa 48 /// Return Low and High threshold for pedestal mean
2c780493 49 TVector2 PedMeanLimits() const { return fPedMeanLimits; }
71a2d3aa 50 /// Return Low and High threshold for pedestal sigma
2c780493 51 TVector2 PedSigmaLimits() const { return fPedSigmaLimits; }
52
71a2d3aa 53 /// Set Low and High threshold for St12 HV
2c780493 54 void SetHVSt12Limits(float low, float high) { fHVSt12Limits.Set(low,high); }
71a2d3aa 55 /// Set Low and High threshold for St345 HV
2c780493 56 void SetHVSt345Limits(float low, float high) { fHVSt345Limits.Set(low,high); }
57
71a2d3aa 58 /// Set Low and High threshold for pedestal mean
2c780493 59 void SetPedMeanLimits(float low, float high) { fPedMeanLimits.Set(low,high); }
71a2d3aa 60 /// Set Low and High threshold for pedestal sigma
2c780493 61 void SetPedSigmaLimits(float low, float high) { fPedSigmaLimits.Set(low,high); }
62
63private:
71a2d3aa 64 /// Not implemented
2c780493 65 AliMUONPadStatusMaker(const AliMUONPadStatusMaker&);
71a2d3aa 66 /// Not implemented
2c780493 67 AliMUONPadStatusMaker& operator=(const AliMUONPadStatusMaker&);
68
69private:
70
8d8e920c 71 AliMUONVStore* Combine(const AliMUONVStore& store1,
72 const AliMUONVStore& store2,
2c780493 73 Int_t binShift) const;
74
75 Bool_t GetSt12Status(const TMap& hvMap, Int_t detElemId, Int_t sector,
76 Bool_t& hvChannelTooLow,
77 Bool_t& hvChannelTooHigh,
78 Bool_t& hvChannelON) const;
79
80
81 Bool_t GetSt345Status(const TMap& hvMap, Int_t detElemId, Int_t pcbIndex,
82 Bool_t& hvChannelTooLow,
83 Bool_t& hvChannelTooHigh,
84 Bool_t& hvChannelON,
85 Bool_t& hvSwitchON) const;
86
8d8e920c 87 void SetStatusSt12(AliMUONVStore& hvStatus,
2c780493 88 Int_t detElemId, Int_t sector, Int_t status) const;
89
8d8e920c 90 void SetStatusSt345(AliMUONVStore& hvStatus,
2c780493 91 Int_t detElemId, Int_t pcbIndex, Int_t status) const;
92
93
94private:
71a2d3aa 95 /// General status
96199305 96 enum EGeneralStatus
97 {
98 kMissing = (1<<7)
99 };
100
71a2d3aa 101 /// Pedestal status
2c780493 102 enum EPedestalStatus
103 {
104 kPedOK = 0,
105 kPedMeanZero = (1<<1),
106 kPedMeanTooLow = (1<<2),
107 kPedMeanTooHigh = (1<<3),
108 kPedSigmaTooLow = (1<<4),
96199305 109 kPedSigmaTooHigh = (1<<5),
110
111 kPedMissing = kMissing // please always use last bit for meaning "missing"
2c780493 112 };
113
71a2d3aa 114 /// HV Error
2c780493 115 enum EHVError
116 {
117 kHVOK = 0,
118 kHVError = (1<<0),
119 kHVTooLow = (1<<1),
120 kHVTooHigh = (1<<2),
121 kHVChannelOFF = (1<<3),
96199305 122 kHVSwitchOFF = (1<<4),
123
124 kHVMissing = kMissing // please always use last bit for meaning "missing"
2c780493 125 };
126
127 const AliMUONCalibrationData& fCalibrationData; //!< helper class to get data access (not owner)
128 TVector2 fPedMeanLimits; //!< Low and High threshold for pedestal mean
129 TVector2 fPedSigmaLimits; //!< Low and High threshold for pedestal sigma
130
131 TVector2 fHVSt12Limits; //!< Low and High threshold for St12 HV
132 TVector2 fHVSt345Limits; //!< Low and High threshold for St345 HV
133
134 ClassDef(AliMUONPadStatusMaker,0) // Creates pad statuses from ped,gain,hv
135};
136
137#endif