Coding conventions
[u/mrichter/AliRoot.git] / MUON / AliMUONCalibParam1I.cxx
CommitLineData
9369bbee 1/**************************************************************************
2* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3* *
4* Author: The ALICE Off-line Project. *
5* Contributors are mentioned in the code where appropriate. *
6* *
7* Permission to use, copy, modify and distribute this software and its *
8* documentation strictly for non-commercial purposes is hereby granted *
9* without fee, provided that the above copyright notice appears in all *
10* copies and that both the copyright notice and this permission notice *
11* appear in the supporting documentation. The authors make no claims *
12* about the suitability of this software for any purpose. It is *
13* provided "as is" without express or implied warranty. *
14**************************************************************************/
15
16// $Id$
17
18#include "AliMUONCalibParam1I.h"
19
20#include "AliLog.h"
21#include "Riostream.h"
22#include "TMath.h"
23#include "TString.h"
24
5398f946 25/// \class AliMUONCalibParam1I
26///
9d5f6a64 27/// This class is implementing the AliMUONVCalibParam interface.
28///
29/// It stores a given number of integers.
30///
31/// Those integers can also be retrieved as floats if really needed
32/// (this is to comply with the base class).
33///
34/// You might consider just as it is, namely a C++ wrapper to
35/// a plain int[] array.
5398f946 36///
37/// \author Laurent Aphecetche
9d5f6a64 38
5398f946 39/// \cond CLASSIMP
9369bbee 40ClassImp(AliMUONCalibParam1I)
5398f946 41/// \endcond
9369bbee 42
43//_____________________________________________________________________________
44AliMUONCalibParam1I::AliMUONCalibParam1I()
45: AliMUONVCalibParam(),
46 fSize(0),
47 fValues(0x0)
48{
5398f946 49/// Default constructor.
9369bbee 50}
51
52//_____________________________________________________________________________
53AliMUONCalibParam1I::AliMUONCalibParam1I(Int_t theSize, Int_t fillWithValue)
54: AliMUONVCalibParam(),
ccea41d4 55 fSize(theSize),
56 fValues(0x0)
9369bbee 57{
5398f946 58/// Normal constructor, where theSize specifies the number of channels handled
59/// by this object, and fillWithValue the default value assigned to each
60/// channel.
61
9369bbee 62 if ( fSize > 0 )
63 {
64 fValues = new Int_t[fSize];
0b9b125f 65 for ( Int_t i = 0; i < fSize; ++i )
66 {
67 fValues[i] = fillWithValue;
68 }
9369bbee 69 }
70}
71
9d5f6a64 72//_____________________________________________________________________________
73AliMUONCalibParam1I::AliMUONCalibParam1I(const AliMUONCalibParam1I& other)
74: AliMUONVCalibParam(other),
75fSize(0),
76fValues(0x0)
77{
5398f946 78/// Copy constructor
79
9d5f6a64 80 other.CopyTo(*this);
81}
884a73f1 82
9d5f6a64 83//_____________________________________________________________________________
84AliMUONCalibParam1I&
85AliMUONCalibParam1I::operator=(const AliMUONCalibParam1I& other)
86{
5398f946 87/// Assignment operator
88
9d5f6a64 89 AliMUONVCalibParam::operator=(other);
90 other.CopyTo(*this);
91 return *this;
884a73f1 92}
93
9369bbee 94//_____________________________________________________________________________
95AliMUONCalibParam1I::~AliMUONCalibParam1I()
96{
5398f946 97/// Destructor.
98
9369bbee 99 delete[] fValues;
100}
101
9d5f6a64 102//_____________________________________________________________________________
103void
104AliMUONCalibParam1I::CopyTo(AliMUONCalibParam1I& destination) const
884a73f1 105{
5398f946 106/// Copy this into destination.
107
9d5f6a64 108 delete[] destination.fValues;
109 destination.fSize = fSize;
110 if ( fSize > 0 )
111 {
112 destination.fValues = new Int_t[fSize];
113 for ( Int_t i = 0; i < fSize; ++i )
114 {
115 destination.fValues[i] = fValues[i];
116 }
117 }
118}
884a73f1 119
9369bbee 120//_____________________________________________________________________________
121void
122AliMUONCalibParam1I::Print(Option_t* opt) const
123{
5398f946 124/// Output this object to stdout.
156464c8 125/// If opt=="full", then all channels are printed,
126/// if opt=="mean", only the mean and sigma value are printed,
127/// otherwise only the general characteristics are printed.
5398f946 128
9369bbee 129 TString sopt(opt);
130 sopt.ToUpper();
131 cout << "AliMUONCalibParam1I - Size=" << Size()
156464c8 132 << " Dimension=" << Dimension();
133
9369bbee 134 if ( sopt.Contains("FULL") )
135 {
156464c8 136 cout << endl;
9369bbee 137 for ( Int_t i = 0; i < Size(); ++i )
138 {
156464c8 139 cout << Form("CH %3d %10d",i,ValueAsInt(i)) << endl;
9369bbee 140 }
141 }
156464c8 142 if ( sopt.Contains("MEAN") )
143 {
144 Int_t mean(0);
145 Int_t v2(0);
146
4a46082d 147 Int_t n = Size();
156464c8 148
149 for ( Int_t i = 0; i < Size(); ++i )
150 {
151 Int_t v = ValueAsInt(i);
152 mean += v;
153 v2 += v*v;
154 }
4a46082d 155 mean /= n;
156464c8 156 float sigma = 0;
4a46082d 157 if ( n > 1 ) sigma = TMath::Sqrt( (v2-n*mean*mean)/(n-1) );
156464c8 158 cout << Form(" Mean=%d Sigma=%f",mean,sigma) << endl;
159 }
9369bbee 160}
161
162//_____________________________________________________________________________
163void
164AliMUONCalibParam1I::SetValueAsFloat(Int_t i, Int_t j, Float_t value)
165{
5398f946 166/// Set the value as a float, which is casted to an int prior to storage.
167
9369bbee 168 SetValueAsInt(i,j,TMath::Nint(value));
169}
170
171//_____________________________________________________________________________
172void
173AliMUONCalibParam1I::SetValueAsInt(Int_t i, Int_t j, Int_t value)
174{
5398f946 175/// Set the value for a given channel.
176/// (i,j) are checked for correctness before use.
177
9369bbee 178 if ( j != 0 || i >= fSize || i < 0 )
179 {
180 AliError(Form("Invalid (i,j)=(%d,%d) max allowed is (%d,%d)",
181 i,j,Size()-1,Dimension()-1));
182 }
183 else
184 {
185 fValues[i]=value;
186 }
187}
188
189//_____________________________________________________________________________
190Float_t
191AliMUONCalibParam1I::ValueAsFloat(Int_t i, Int_t j) const
192{
5398f946 193/// Return one value as a float.
194
9369bbee 195 return 1.0*ValueAsInt(i,j);
196}
197
198//_____________________________________________________________________________
199Int_t
200AliMUONCalibParam1I::ValueAsInt(Int_t i, Int_t j) const
201{
5398f946 202/// Return one value as an integer, after checking that (i,j)
203/// are valid indices.
204
9369bbee 205 if ( j != 0 || i >= fSize || i < 0 )
206 {
207 AliError(Form("Invalid (i,j)=(%d,%d) max allowed is (%d,%d)",
208 i,j,Size()-1,Dimension()-1));
209 return 0;
210 }
211 else
212 {
213 return fValues[i];
214 }
215}