X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=MUON%2FAliMUONCalibParamND.cxx;h=8f620ba1ace7294dc04e7a4b4d203da025efd4b2;hb=a7506fdf0dff5fe20a4db21b7301a3c285e2d264;hp=0737fc5779276f737ca0df16c84d19508294b8e8;hpb=da18abd26b430cef724919e00fbbe030f02e7bd7;p=u%2Fmrichter%2FAliRoot.git diff --git a/MUON/AliMUONCalibParamND.cxx b/MUON/AliMUONCalibParamND.cxx index 0737fc57792..8f620ba1ace 100644 --- a/MUON/AliMUONCalibParamND.cxx +++ b/MUON/AliMUONCalibParamND.cxx @@ -23,12 +23,13 @@ #include "TMath.h" #include "TString.h" -/// +//----------------------------------------------------------------------------- /// \class AliMUONCalibParamND /// /// Handle the case of N floating point (double precision) parameters per channel. /// /// \author Laurent Aphecetche +//----------------------------------------------------------------------------- /// \cond CLASSIMP ClassImp(AliMUONCalibParamND) @@ -107,6 +108,8 @@ AliMUONCalibParamND::CopyTo(AliMUONCalibParamND& destination) const { /// Copy *this to destination + TObject::Copy(destination); + delete[] destination.fValues; destination.fN = fN; destination.fSize = fSize; @@ -131,11 +134,20 @@ 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 @@ -204,6 +216,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 @@ -213,6 +233,14 @@ AliMUONCalibParamND::SetValueAsFloat(Int_t i, Int_t j, Float_t value) SetValueAsDouble(i,j,static_cast(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(value)); +} + //_____________________________________________________________________________ void AliMUONCalibParamND::SetValueAsInt(Int_t i, Int_t j, Int_t value) @@ -222,6 +250,15 @@ AliMUONCalibParamND::SetValueAsInt(Int_t i, Int_t j, Int_t value) SetValueAsFloat(i,j,static_cast(value)); } +//_____________________________________________________________________________ +void +AliMUONCalibParamND::SetValueAsIntFast(Int_t i, Int_t j, Int_t value) +{ + /// Set one value as an int. + + SetValueAsFloatFast(i,j,static_cast(value)); +} + //_____________________________________________________________________________ Double_t AliMUONCalibParamND::ValueAsDouble(Int_t i, Int_t j) const @@ -242,6 +279,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 @@ -250,6 +296,14 @@ AliMUONCalibParamND::ValueAsFloat(Int_t i, Int_t j) const return static_cast(ValueAsDouble(i,j)); } +//_____________________________________________________________________________ +Float_t +AliMUONCalibParamND::ValueAsFloatFast(Int_t i, Int_t j) const +{ + /// Return the value as a float + return static_cast(ValueAsDoubleFast(i,j)); +} + //_____________________________________________________________________________ Int_t AliMUONCalibParamND::ValueAsInt(Int_t i, Int_t j) const @@ -259,3 +313,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); +}