]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - MUON/AliMUONVCalibParam.h
No more misaligned_geometry
[u/mrichter/AliRoot.git] / MUON / AliMUONVCalibParam.h
index 8db37141137263d0e7fa4b39f6f281ee7732a521..e6ab17b5fdd6e44664957ff0d37f7ab0e19ad8ef 100644 (file)
@@ -3,11 +3,11 @@
 
 // $Id$
 
-/// \ingroup base
+/// \ingroup calib
 /// \class AliMUONVCalibParam
 /// \brief Container of calibration values for a given number of channels.
 /// 
-/// \author Laurent Aphecetche
+//  Author Laurent Aphecetche
 
 #ifndef ALIMUONVCALIBPARAM_H
 #define ALIMUONVCALIBPARAM_H
@@ -20,11 +20,29 @@ class AliMUONVCalibParam : public TObject
 {
 public:
   AliMUONVCalibParam();
+  //AliMUONVCalibParam(Int_t id0);
+  AliMUONVCalibParam(Int_t id0, Int_t id1);
   virtual ~AliMUONVCalibParam();
 
+  virtual const char* GetName() const;
+  
+  /// First id of this object
+  virtual Int_t ID0() const;
+  
+  /// Second id of this object (might not be required)
+  virtual Int_t ID1() const;
+  
+  /// whether or not the value we store are packed, e.g. as v = a*cste + b
+  virtual Bool_t IsPacked() const { return kFALSE; }
+  
   /// j indices in following methods are valid from 0 to Dimension()-1.
   virtual Int_t Dimension() const = 0;
-  
+
+  /** Set one value, for channel i, dimension j. Consider value is a double.
+    Only ok to use if IsDoublePrecision() is kTRUE.
+    */
+  virtual void SetValueAsDouble(Int_t i, Int_t j, Double_t value);
+
   /// Set one value, for channel i, dimension j. Consider value is a float.
   virtual void SetValueAsFloat(Int_t i, Int_t j, Float_t value) = 0;
   
@@ -34,13 +52,37 @@ public:
   /// The number of channels handled by this object.
   virtual Int_t Size() const = 0;
 
+  /// Whether we can store double precision values   
+  virtual Bool_t IsDoublePrecision() const { return kFALSE; }
+  
+  /** Retrieve the value for a given (channel,dim) as a double.
+      Only ok if IsDoublePrecision() is kTRUE.
+    */
+  virtual Double_t ValueAsDouble(Int_t i, Int_t j=0) const;
+
   /// Retrieve the value for a given (channel,dim) as a float.
   virtual Float_t ValueAsFloat(Int_t i, Int_t j=0) const = 0;
   
-    /// Retrieve the value for a given (channel,dim) as an integer.
+  /// Retrieve the value for a given (channel,dim) as an integer.
   virtual Int_t ValueAsInt(Int_t i, Int_t j=0) const = 0;
 
-  ClassDef(AliMUONVCalibParam,0) // 
+  /// Unpack a value into a couple (a,b). Returns false if IsPacked()==kFALSE
+  virtual Bool_t UnpackValue(Int_t /*value*/, Int_t& /*a*/, Int_t& /*b*/) const { return kFALSE; }
+  
+  /// Pack (a,b) as a single int. Returns false if IsPacked()==kFALSE
+  virtual Bool_t PackValues(Int_t /*a*/, Int_t /*b*/, Int_t& /*packedValue*/) const { return kFALSE; }
+  
+  /// Return 1E38 as invalid float value
+  static Float_t InvalidFloatValue() { return 1E38; }
+
+protected:
+    
+  static UInt_t BuildUniqueID(Int_t id0, Int_t id1);
+  static void DecodeUniqueID(UInt_t uniqueID, Int_t& id0, Int_t& id1);
+  static Int_t ID0(UInt_t uniqueID);
+  static Int_t ID1(UInt_t uniqueID);
+  
+  ClassDef(AliMUONVCalibParam,0) // Base class for a calibration data holder (usually for 64 channels)
 };
 
 #endif