]> git.uio.no Git - u/mrichter/AliRoot.git/blame - FMD/AliFMDCalibGain.cxx
Fixing coding violations from FC
[u/mrichter/AliRoot.git] / FMD / AliFMDCalibGain.cxx
CommitLineData
a3537838 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 **************************************************************************/
a3537838 15/* $Id$ */
c2fc1258 16/** @file AliFMDCalibGain.cxx
17 @author Christian Holm Christensen <cholm@nbi.dk>
18 @date Sun Mar 26 18:30:02 2006
19 @brief Per strip gain calibration
20*/
a3537838 21//____________________________________________________________________
22//
02a27b50 23// Gain value and width for each strip in the FMD.
24// Foo
25// Bar
26// Baz
27// Gnus
a3537838 28//
29#include "AliFMDCalibGain.h" // ALIFMDCALIBGAIN_H
e064ab4a 30#include <iostream>
31#include <TString.h>
32#include <AliLog.h>
f560b28c 33#include "AliFMDDebug.h"
34
35#include "AliFMDBoolMap.h"
36
e064ab4a 37
a3537838 38//____________________________________________________________________
39ClassImp(AliFMDCalibGain)
40#if 0
41 ; // This is here to keep Emacs for indenting the next line
42#endif
43
44//____________________________________________________________________
45AliFMDCalibGain::AliFMDCalibGain()
021f1396 46 : fValue(0), // nDet == 0 mean 51200 slots
b5ee4425 47 fThreshold(-1.)
a3537838 48{
02a27b50 49 // CTOR
a3537838 50 fValue.Reset(-1.);
51 fThreshold = -1.;
52}
53
54//____________________________________________________________________
55AliFMDCalibGain::AliFMDCalibGain(const AliFMDCalibGain& o)
b5ee4425 56 : TObject(o),
57 fValue(o.fValue),
58 fThreshold(o.fThreshold)
02a27b50 59{
60 // Copy CTOR
61}
a3537838 62
63//____________________________________________________________________
64AliFMDCalibGain&
65AliFMDCalibGain::operator=(const AliFMDCalibGain& o)
66{
02a27b50 67 // Assignment operator
a3537838 68 fValue = o.fValue;
69 fThreshold = o.fThreshold;
70 return (*this);
71}
72
73//____________________________________________________________________
74void
75AliFMDCalibGain::Set(UShort_t det, Char_t ring, UShort_t sec,
76 UShort_t str, Float_t val)
77{
02a27b50 78 // Set the value for a strip
a3537838 79 if (fValue.CheckIndex(det, ring, sec, str) < 0) return;
80 fValue(det, ring, sec, str) = val;
81}
82
83//____________________________________________________________________
84Float_t
85AliFMDCalibGain::Value(UShort_t det, Char_t ring, UShort_t sec,
86 UShort_t str)
87{
02a27b50 88 // Get the value for a strip
a3537838 89 return fValue(det, ring, sec, str);
90}
91
f560b28c 92//____________________________________________________________________
93namespace {
94 struct MakeDead : public AliFMDMap::ForOne
95 {
96 MakeDead(AliFMDBoolMap* dead, Float_t min, Float_t max)
97 : fDead(dead), fMin(min), fMax(max), fCount(0)
98 {}
99 MakeDead(const MakeDead& other)
100 : fDead(other.fDead), fMin(other.fMin), fMax(other.fMax),
101 fCount(other.fCount)
102 {}
103 MakeDead& operator=(const MakeDead& other)
104 {
105 fDead = other.fDead;
106 fMin = other.fMin;
107 fMax = other.fMax;
108 fCount = other.fCount;
109 return *this;
110 }
111 Bool_t operator()(UShort_t d, Char_t r, UShort_t s, UShort_t t, Float_t v)
112 {
113 AliDebugGeneral("AliFMDCalibGain::MakeDeadMap", 100,
114 Form("Checking if gain of FMD%d%c[%2d,%3d]=%f "
115 "is out of range [%f,%f]",
116 d, r, s, t, v, fMin, fMax));
117 if (v > fMax || v < fMin) {
118 fDead->operator()(d,r,s,t) = kTRUE;
119 fCount++;
120 }
121 return kTRUE;
122 }
123 Bool_t operator()(UShort_t, Char_t, UShort_t, UShort_t, Int_t)
124 { return kFALSE; }
125 Bool_t operator()(UShort_t, Char_t, UShort_t, UShort_t, UShort_t)
126 { return kFALSE; }
127 Bool_t operator()(UShort_t, Char_t, UShort_t, UShort_t, Bool_t)
128 { return kFALSE; }
129 AliFMDBoolMap* fDead;
130 Float_t fMin;
131 Float_t fMax;
132 Int_t fCount;
133 };
134}
135
136//____________________________________________________________________
137AliFMDBoolMap*
138AliFMDCalibGain::MakeDeadMap(Float_t min, Float_t max,
139 AliFMDBoolMap* dead) const
140{
141 if (!dead) {
142 dead = new AliFMDBoolMap(0,0,0,0);
143 dead->Reset(kFALSE);
144 }
145 MakeDead dm(dead, min, max);
146 fValue.ForEach(dm);
147 AliFMDDebug(1, ("Found a total of %d dead channels", dm.fCount));
148 return dead;
149}
150
e064ab4a 151//____________________________________________________________________
152Bool_t
153AliFMDCalibGain::ReadFromFile(std::istream& in)
154{
155 //Get header (how long is it ?)
156 TString header;
157 header.ReadLine(in);
158 header.ToLower();
159 if(!header.Contains("gains")) {
160 AliError("File does not contain gains!");
161 return kFALSE;;
162 }
163
164 // Read column headers
165 header.ReadLine(in);
166
167 int lineno = 2;
168 // Read until EOF
169 while(in.peek()!=EOF) {
170 if(in.bad()) {
171 AliError(Form("Bad read at line %d of input", lineno));
172 break;
173 }
174 UShort_t det, sec, strip;
175 Char_t ring;
176
177 Float_t gain,error, chi2ndf;
178 Char_t c[6];
179
180 in >> det >> c[0]
181 >> ring >> c[1]
182 >> sec >> c[2]
183 >> strip >> c[3]
184 >> gain >> c[4]
185 >> error >> c[5]
186 >> chi2ndf;
187 lineno++;
188 Set(det,ring,sec,strip,gain);
189 }
190 return kTRUE;
191}
a3537838 192//____________________________________________________________________
193//
194// EOF
195//