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