]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - MUON/AliMUONCalibParamNF.cxx
Adding code to patch St1 HV mapping
[u/mrichter/AliRoot.git] / MUON / AliMUONCalibParamNF.cxx
index 97e6d7fa13630ead6b7fbbcbf81afa2d06084637..6c3ea29f9de37e0c4b93a18aaa0be059cc9133b2 100644 (file)
 #include "TMath.h"
 #include "TString.h"
 
-///
+#include <limits.h>
+
+//-----------------------------------------------------------------------------
 /// \class AliMUONCalibParamNF
 ///
 /// Handle the case of N floating point parameters per channel.
 ///
 /// \author Laurent Aphecetche
+//-----------------------------------------------------------------------------
 
+using std::cout;
+using std::endl;
 /// \cond CLASSIMP
 ClassImp(AliMUONCalibParamNF)
 /// \endcond
@@ -46,8 +51,10 @@ AliMUONCalibParamNF::AliMUONCalibParamNF()
 }
 
 //_____________________________________________________________________________
-AliMUONCalibParamNF::AliMUONCalibParamNF(Int_t dimension, Int_t theSize, Float_t fillWithValue) 
-: AliMUONVCalibParam(),
+AliMUONCalibParamNF::AliMUONCalibParamNF(Int_t dimension, Int_t theSize, 
+                                         Int_t id0, Int_t id1,
+                                         Float_t fillWithValue) 
+: AliMUONVCalibParam(id0,id1),
   fDimension(dimension),
   fSize(theSize),
   fN(fSize*fDimension),
@@ -105,6 +112,8 @@ AliMUONCalibParamNF::CopyTo(AliMUONCalibParamNF& destination) const
 {
 /// Copy *this to destination
 
+  TObject::Copy(destination);
+  
   delete[] destination.fValues;
   destination.fN = fN;
   destination.fSize = fSize;
@@ -129,11 +138,20 @@ AliMUONCalibParamNF::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
+AliMUONCalibParamNF::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
 AliMUONCalibParamNF::Print(Option_t* opt) const
@@ -145,8 +163,8 @@ AliMUONCalibParamNF::Print(Option_t* opt) const
 
   TString sopt(opt);
   sopt.ToUpper();
-  cout << "AliMUONCalibParamNF - Size=" << Size()
-    << " Dimension=" << Dimension() << endl;
+  cout << Form("AliMUONCalibParamNF Id=(%d,%d) Size=%d Dimension=%d",ID0(),
+               ID1(),Size(),Dimension()) << endl;
   if ( sopt.Contains("FULL") )
   {
     for ( Int_t i = 0; i < Size(); ++i )
@@ -202,6 +220,15 @@ AliMUONCalibParamNF::SetValueAsFloat(Int_t i, Int_t j, Float_t value)
   }
 }
 
+//_____________________________________________________________________________
+void
+AliMUONCalibParamNF::SetValueAsFloatFast(Int_t i, Int_t j, Float_t value)
+{
+  /// Set one value as a float, w/o checking that the indices are correct.
+  
+  fValues[IndexFast(i,j)] = value;
+}
+
 //_____________________________________________________________________________
 void
 AliMUONCalibParamNF::SetValueAsInt(Int_t i, Int_t j, Int_t value)
@@ -211,6 +238,15 @@ AliMUONCalibParamNF::SetValueAsInt(Int_t i, Int_t j, Int_t value)
   SetValueAsFloat(i,j,static_cast<Float_t>(value));
 }
 
+//_____________________________________________________________________________
+void
+AliMUONCalibParamNF::SetValueAsIntFast(Int_t i, Int_t j, Int_t value)
+{
+  /// Set one value as an int.
+  
+  SetValueAsFloatFast(i,j,static_cast<Float_t>(value));
+}
+
 //_____________________________________________________________________________
 Float_t
 AliMUONCalibParamNF::ValueAsFloat(Int_t i, Int_t j) const
@@ -231,6 +267,15 @@ AliMUONCalibParamNF::ValueAsFloat(Int_t i, Int_t j) const
   }
 }
 
+//_____________________________________________________________________________
+Float_t
+AliMUONCalibParamNF::ValueAsFloatFast(Int_t i, Int_t j) const
+{
+  /// Return the value as a float (which it is), after checking indices.
+  
+  return fValues[IndexFast(i,j)];
+}
+
 //_____________________________________________________________________________
 Int_t
 AliMUONCalibParamNF::ValueAsInt(Int_t i, Int_t j) const
@@ -238,5 +283,22 @@ AliMUONCalibParamNF::ValueAsInt(Int_t i, Int_t j) const
 /// Return the value as an int, by rounding the internal float value.
 
   Float_t v = ValueAsFloat(i,j);
+  
+  if ( v >= Float_t(INT_MAX) ) {
+    AliErrorStream() 
+      << "Cannot convert value " << v << " to Int_t." << endl;
+    return 0;
+  }  
+  
+  return TMath::Nint(v);
+}
+
+//_____________________________________________________________________________
+Int_t
+AliMUONCalibParamNF::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);
 }