ALIROOT-5420 Changes for CDH v3
[u/mrichter/AliRoot.git] / MUON / AliMUONCalibParamND.cxx
index 2edfcf1..66331c2 100644 (file)
@@ -31,6 +31,8 @@
 /// \author Laurent Aphecetche
 //-----------------------------------------------------------------------------
 
+using std::cout;
+using std::endl;
 /// \cond CLASSIMP
 ClassImp(AliMUONCalibParamND)
 /// \endcond
@@ -108,6 +110,8 @@ AliMUONCalibParamND::CopyTo(AliMUONCalibParamND& destination) const
 {
 /// Copy *this to destination
 
+  TObject::Copy(destination);
+  
   delete[] destination.fValues;
   destination.fN = fN;
   destination.fSize = fSize;
@@ -132,12 +136,21 @@ AliMUONCalibParamND::Index(Int_t i, Int_t j) const
 
   if ( i >= 0 && i < Size() && j >= 0 && j < Dimension() )
   {
-    return i + Size()*j;
+    return IndexFast(i,j);
   }
   return -1;
 }
 
 //_____________________________________________________________________________
+Int_t
+AliMUONCalibParamND::IndexFast(Int_t i, Int_t j) const
+{
+  /// Compute the 1D index of the internal storage from the pair (i,j)
+  
+  return i + Size()*j;
+}
+
+//_____________________________________________________________________________
 void
 AliMUONCalibParamND::Print(Option_t* opt) const
 {
@@ -205,6 +218,14 @@ AliMUONCalibParamND::SetValueAsDouble(Int_t i, Int_t j, Double_t value)
   }
 }
 
+//_____________________________________________________________________________
+void
+AliMUONCalibParamND::SetValueAsDoubleFast(Int_t i, Int_t j, Double_t value)
+{
+  /// Set one value as a double, w/o checking that the indices are correct.
+  
+  fValues[IndexFast(i,j)] = value;
+}
 
 //_____________________________________________________________________________
 void
@@ -216,6 +237,14 @@ AliMUONCalibParamND::SetValueAsFloat(Int_t i, Int_t j, Float_t value)
 
 //_____________________________________________________________________________
 void
+AliMUONCalibParamND::SetValueAsFloatFast(Int_t i, Int_t j, Float_t value)
+{
+  /// Set one value as a float, after checking that the indices are correct.
+  SetValueAsDoubleFast(i,j,static_cast<Double_t>(value));
+}
+
+//_____________________________________________________________________________
+void
 AliMUONCalibParamND::SetValueAsInt(Int_t i, Int_t j, Int_t value)
 {
 /// Set one value as an int.
@@ -224,6 +253,15 @@ AliMUONCalibParamND::SetValueAsInt(Int_t i, Int_t j, Int_t value)
 }
 
 //_____________________________________________________________________________
+void
+AliMUONCalibParamND::SetValueAsIntFast(Int_t i, Int_t j, Int_t value)
+{
+  /// Set one value as an int.
+  
+  SetValueAsFloatFast(i,j,static_cast<Float_t>(value));
+}
+
+//_____________________________________________________________________________
 Double_t
 AliMUONCalibParamND::ValueAsDouble(Int_t i, Int_t j) const
 {
@@ -244,6 +282,15 @@ AliMUONCalibParamND::ValueAsDouble(Int_t i, Int_t j) const
 }
 
 //_____________________________________________________________________________
+Double_t
+AliMUONCalibParamND::ValueAsDoubleFast(Int_t i, Int_t j) const
+{
+  /// Return the value as a double (which it is), w/o checking indices.
+  
+  return fValues[IndexFast(i,j)];
+}
+
+//_____________________________________________________________________________
 Float_t
 AliMUONCalibParamND::ValueAsFloat(Int_t i, Int_t j) const
 {
@@ -252,6 +299,14 @@ AliMUONCalibParamND::ValueAsFloat(Int_t i, Int_t j) const
 }
 
 //_____________________________________________________________________________
+Float_t
+AliMUONCalibParamND::ValueAsFloatFast(Int_t i, Int_t j) const
+{
+  /// Return the value as a float 
+  return static_cast<Float_t>(ValueAsDoubleFast(i,j));
+}
+
+//_____________________________________________________________________________
 Int_t
 AliMUONCalibParamND::ValueAsInt(Int_t i, Int_t j) const
 {
@@ -260,3 +315,13 @@ AliMUONCalibParamND::ValueAsInt(Int_t i, Int_t j) const
   Float_t v = ValueAsFloat(i,j);
   return TMath::Nint(v);
 }
+
+//_____________________________________________________________________________
+Int_t
+AliMUONCalibParamND::ValueAsIntFast(Int_t i, Int_t j) const
+{
+  /// Return the value as an int, by rounding the internal float value.
+  
+  Float_t v = ValueAsFloatFast(i,j);
+  return TMath::Nint(v);
+}