1 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
2 * See cxx source for full Copyright notice */
7 /// \class AliMUONVCalibParam
8 /// \brief Container of calibration values for a given number of channels.
10 // Author Laurent Aphecetche
12 #ifndef ALIMUONVCALIBPARAM_H
13 #define ALIMUONVCALIBPARAM_H
19 class AliMUONVCalibParam : public TObject
23 //AliMUONVCalibParam(Int_t id0);
24 AliMUONVCalibParam(Int_t id0, Int_t id1);
25 virtual ~AliMUONVCalibParam();
27 virtual const char* GetName() const;
29 /// First id of this object
30 virtual Int_t ID0() const;
32 /// Second id of this object (might not be required)
33 virtual Int_t ID1() const;
35 /// whether or not the value we store are packed, e.g. as v = a*cste + b
36 virtual Bool_t IsPacked() const { return kFALSE; }
38 /// j indices in following methods are valid from 0 to Dimension()-1.
39 virtual Int_t Dimension() const = 0;
41 /** Set one value, for channel i, dimension j. Consider value is a double.
42 Only ok to use if IsDoublePrecision() is kTRUE.
44 virtual void SetValueAsDouble(Int_t i, Int_t j, Double_t value);
46 /// Same as above but w/o bound checking
47 virtual void SetValueAsDoubleFast(Int_t i, Int_t j, Double_t value);
49 /// Set one value, for channel i, dimension j. Consider value is a float.
50 virtual void SetValueAsFloat(Int_t i, Int_t j, Float_t value) = 0;
52 /** Set one value, for channel i, dimension j. Consider value is a float.
53 Assume (i,j) are valid indices, i.e. do not check them.
55 virtual void SetValueAsFloatFast(Int_t i, Int_t j, Float_t value) = 0;
57 /// Set one value, for channel i, dimension j. Consider value is an integer.
58 virtual void SetValueAsInt(Int_t i, Int_t j, Int_t value) = 0;
60 /// Same as above but w/o bound checkings.
61 virtual void SetValueAsIntFast(Int_t i, Int_t j, Int_t value) = 0;
63 /// The number of channels handled by this object.
64 virtual Int_t Size() const = 0;
66 /// Whether we can store double precision values
67 virtual Bool_t IsDoublePrecision() const { return kFALSE; }
69 /** Retrieve the value for a given (channel,dim) as a double.
70 Only ok if IsDoublePrecision() is kTRUE.
71 (i,j) are checked to within boundaries
73 virtual Double_t ValueAsDouble(Int_t i, Int_t j=0) const;
75 /** Retrieve the value for a given (channel,dim) as a double.
76 Only ok if IsDoublePrecision() is kTRUE.
77 Fast means there's no bound checking on (i,j)
79 virtual Double_t ValueAsDoubleFast(Int_t i, Int_t j=0) const;
81 /** Retrieve the value for a given (channel,dim) as a float, with
82 bound checking on (i,j).
84 virtual Float_t ValueAsFloat(Int_t i, Int_t j=0) const = 0;
86 /// Same as above but without bound checking.
87 virtual Float_t ValueAsFloatFast(Int_t i, Int_t j=0) const = 0;
89 /** Retrieve the value for a given (channel,dim) as an integer.
92 virtual Int_t ValueAsInt(Int_t i, Int_t j=0) const = 0;
94 /// Same as above but w/o bound checking.
95 virtual Int_t ValueAsIntFast(Int_t i, Int_t j=0) const = 0;
97 /// Unpack a value into a couple (a,b). Returns false if IsPacked()==kFALSE
98 virtual Bool_t UnpackValue(Int_t /*value*/, Int_t& /*a*/, Int_t& /*b*/) const { return kFALSE; }
100 /// Pack (a,b) as a single int. Returns false if IsPacked()==kFALSE
101 virtual Bool_t PackValues(Int_t /*a*/, Int_t /*b*/, Int_t& /*packedValue*/) const { return kFALSE; }
103 /// Return 1E38 as invalid float value
104 static Float_t InvalidFloatValue() { return 1E38; }
106 static UInt_t BuildUniqueID(Int_t id0, Int_t id1);
107 static void DecodeUniqueID(UInt_t uniqueID, Int_t& id0, Int_t& id1);
111 static Int_t ID0(UInt_t uniqueID);
112 static Int_t ID1(UInt_t uniqueID);
114 ClassDef(AliMUONVCalibParam,0) // Base class for a calibration data holder (usually for 64 channels)