///
/// \class AliMUONCalibParam2F
-/// \brief Implementation of AliMUONVCalibParam for pair of floats.
///
/// Handle the case of 2 floating point parameters per channel.
/// Conceptually, this class is the equivalent of a vector or float pairs,
}
//_____________________________________________________________________________
-AliMUONCalibParam2F::AliMUONCalibParam2F(Int_t theSize, Int_t fillWithValue)
+AliMUONCalibParam2F::AliMUONCalibParam2F(Int_t theSize, Float_t fillWithValue)
: AliMUONVCalibParam(),
fSize(theSize),
fN(fSize*Dimension()),
if ( fN > 0 )
{
fValues = new Float_t[fN];
- memset(fValues,fillWithValue,fN*sizeof(Float_t));
+ for ( Int_t i = 0; i < fN; ++i )
+ {
+ fValues[i] = fillWithValue;
+ }
}
}
AliMUONCalibParam2F::Print(Option_t* opt) const
{
/// Output this object to stdout.
-/// If opt=="full", then all channels are printed, otherwise
-/// only the general characteristics are printed.
+/// If opt=="full", then all channels are printed,
+/// if opt=="mean", only the mean and sigma value are printed,
+/// otherwise only the general characteristics are printed.
TString sopt(opt);
sopt.ToUpper();
cout << "AliMUONCalibParam2F - Size=" << Size()
- << " Dimension=" << Dimension()
- << endl;
+ << " Dimension=" << Dimension();
if ( sopt.Contains("FULL") )
{
+ cout << endl;
for ( Int_t i = 0; i < Size(); ++i )
{
- cout << setw(6) << ValueAsFloat(i,0) << "," << ValueAsFloat(i,1) << endl;
+ cout << Form("CH %3d %e %e",i,ValueAsFloat(i,0),ValueAsFloat(i,1)) << endl;
}
}
+ if ( sopt.Contains("MEAN") )
+ {
+ Float_t mean(0);
+ Float_t v2(0);
+
+ Int_t n = Size();
+
+ for ( Int_t i = 0; i < Size(); ++i )
+ {
+ Float_t v = ValueAsFloat(i);
+ mean += v;
+ v2 += v*v;
+ }
+ mean /= n;
+ float sigma = 0;
+ if ( n > 1 ) sigma = TMath::Sqrt( (v2-n*mean*mean)/(n-1) );
+ cout << Form(" Mean=%f Sigma=%f",mean,sigma) << endl;
+ }
+
}
//_____________________________________________________________________________