ATLAS Offline Software
Loading...
Searching...
No Matches
Data.h
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
3*/
4
9
10#ifndef LArSamples_Data_H
11#define LArSamples_Data_H
12
13#include "LArCafJobs/Definitions.h"//enum
14#include "LArCafJobs/AbsShape.h"//inheritance
15#include "LArCafJobs/DataContainer.h" //method implemented
17
18#include "TString.h" //set default value
19#include "TVectorD.h" //typedef
20
21#include <vector>
22#include <atomic>
23#include <memory>
24
25class TH1D;
26
27namespace LArSamples {
28
29 class SimpleShape;
30 class History;
31 class EventData;
32 class ScaledErrorData;
33 class DataContainer;
34
35 struct DataFuncArgs {
37 DataFuncArgs(int a_i1, int a_i2 = -1,
38 double a_x1 = Definitions::none, double a_x2 = Definitions::none,
39 const TString& a_str = "") { init(); i1 = a_i1; i2 = a_i2; x1 = a_x1; x2 = a_x2; str = a_str; }
40 DataFuncArgs(double a_x1, double a_x2 = Definitions::none) { init(); x1 = a_x1; x2 = a_x2; }
41 DataFuncArgs(const TString& a_str) { init(); str = a_str; }
42
43 void init() { i1 = i2 = -1; x1 = x2 = Definitions::none; str = ""; }
44
45 int i1, i2;
46 double x1, x2;
47 TString str;
48 };
49
50#ifndef __GCCXML__
51 class Data;
52 template<class T> struct DataFunc {
53 typedef T (Data::*Type)(const DataFuncArgs&) const;
54 };
55 struct DataFuncSet {
59
60 double doubleVal(const Data& data, const DataFuncArgs& args) const { return doubleFunc ? (data.*doubleFunc)(args) : -999; }
61 double intVal (const Data& data, const DataFuncArgs& args) const { return intFunc ? (data.*intFunc)(args) : -999; }
62 double val (const Data& data, const DataFuncArgs& args) const { return doubleFunc ? (data.*doubleFunc)(args) : (intFunc ? (data.*intFunc)(args) : -999); }
63
64 bool isNull() { return (!intFunc && !doubleFunc); }
65 bool isInt() { return (intFunc && !doubleFunc); }
66
69 };
70#endif
71
72
74
75 public:
76
78
80 Data(std::unique_ptr<const DataContainer> container, const EventData& eventData, const History* history, int index);
81 Data(const Data& other, const EventData* eventData = 0, const History* history = 0, int index = -1);
82
84 virtual ~Data();
85
87 CaloGain::CaloGain gain() const { return container().gain(); }
88
90 unsigned int nSamples() const { return container().nSamples(); }
91
93 const short& sample(unsigned int i) const { return container().sample(i); }
94 float pedestalSubtractedSample(unsigned int i) const { return sample(i) - pedestal(); }
95 std::vector<float> pedestalSubtractedSamples() const;
96
97 const EventData& eventData() const { return m_eventData; }
98
100 int run() const;
101
103 int event() const;
104
106 int lumiBlock() const;
107 int bunchId() const;
108
110 double energy() const { return container().energy(); }
111
113 double ofcTime() const { return container().ofcTime() + m_timeShift; }
114
116 double quality() const { return container().quality(); }
117
119 double pedestal() const { return container().pedestal(); }
120 double pedestalRMS() const { return container().pedestalRMS(); }
121
123 int status() const { return m_container->status(); }
124
126 double adcMax() const { return container().adcMax(); }
127 double meV2ADC() const { return (adcMax() > 0 && energy() > 0 ? adcMax()/energy() : -1); }
128 double adc2MeV() const { return (adcMax() > 0 && energy() > 0 ? energy()/adcMax() : -1); }
129
130 bool febError(LArFebErrorSummary::LArFebErrorType error) const;
131 bool isDisconnected() const;
132 TString problems(bool sayNone = false) const;
133
135 static TString gainStr(CaloGain::CaloGain gain);
136 TString description(unsigned int verbosity = 1) const;
137
138 bool isValid() const;
139
140 double footprint() const { return sizeof(*this) + nSamples()*sizeof(short); }
141
142 short maxSample() const;
143 short minSample() const;
144
145 // Interface to LArAbsShape
146 unsigned int nPoints() const { return nSamples(); }
147 double time(unsigned int i) const { return Definitions::samplingTime(i); }
148 double value(unsigned int i) const { return pedestalSubtractedSample(i); }
149 double covariance(unsigned int i, unsigned int j) const;
150
151 unsigned int nCorrs() const { return container().corrs().size(); }
152 double noise() const;
153
154 double adcMax_new() const;
155
156 double covarianceMeV(unsigned int i, unsigned int j) const;
157
158 const DataContainer& container() const { return *m_container; }
159
160 const DataContainer* dissolve();
161
162 std::unique_ptr<SimpleShape> referenceShape() const;
163 std::unique_ptr<SimpleShape> timeAlignedShape() const;
164
165 std::unique_ptr<const ScaledErrorData> scaledErrorData() const;
166
167 const History* history() const { return m_history; }
168 short index() const { return m_index; }
169
170 TVectorD deltas() const;
171 TVectorD residuals() const;
172
173 double delta(short sample) const;
174 double residual(short sample) const;
175
176 double residualOffset(short sample, bool scale = true) const;
177 double resCorrN(ShapeErrorType shapeErrorType = BestShapeError) const;
178 double xi(short sample, ShapeErrorType shapeErrorType = BestShapeError, CaloGain::CaloGain g = CaloGain::UNKNOWNGAIN, bool xip = false) const;
179 double xiNorm(ShapeErrorType shapeErrorType = BestShapeError) const;
180 double xip(short sample, ShapeErrorType shapeErrorType = BestShapeError, CaloGain::CaloGain g = CaloGain::UNKNOWNGAIN) const;
181 double residualError(short sample1, short sample2 = -1, bool scale = true) const;
182 double chi2() const;
183
184 bool calcRefit(double& chi2, double& k, double& dT) const;
185 bool calcAdjust(double& k, double& dT) const;
186
187 bool isPassed(const TString& bitName) const;
188 bool goodForShapeCorr() const;
189 double upstreamEnergy() const;
190
191 double _sample(const DataFuncArgs& args) const { return sample(args.i1); }
192 double _pedestalSubstractedSample(const DataFuncArgs& args) const { return pedestalSubtractedSample(args.i1); }
193 double _energy(const DataFuncArgs&) const { return energy(); }
194 double _ofcTime(const DataFuncArgs&) const { return ofcTime(); }
195 double _quality(const DataFuncArgs&) const { return quality(); }
196 double _pedestal(const DataFuncArgs&) const { return pedestal(); }
197 double _pedestalRMS(const DataFuncArgs&) const { return pedestalRMS(); }
198 double _adcMax(const DataFuncArgs&) const { return adcMax(); }
199 double _adcMax_new(const DataFuncArgs&) const { return adcMax_new(); }
200 double _noise(const DataFuncArgs&) const { return noise(); }
201 double _maxValue(const DataFuncArgs&) const { return maxValue(); }
202 double _minValue(const DataFuncArgs&) const { return minValue(); }
203
204 double _null(const DataFuncArgs&) const { return 0; }
205 int _run(const DataFuncArgs&) const { return run(); }
206 int _event(const DataFuncArgs&) const { return event(); }
207 int _lumiBlock(const DataFuncArgs&) const { return lumiBlock(); }
208 int _bunchId(const DataFuncArgs&) const { return bunchId(); }
209 int _index(const DataFuncArgs&) const { return m_index; }
210 int _gain(const DataFuncArgs&) const { return gain(); }
211 double _delta(const DataFuncArgs& args) const { return delta(args.i1); }
212 double _residual(const DataFuncArgs& args) const { return residual(args.i1); }
213 double _residualOffset(const DataFuncArgs& args) const { return residualOffset(args.i1); }
214 double _resCorrN(const DataFuncArgs&) const { return resCorrN(CellShapeError); }
215 double _xi(const DataFuncArgs& args) const { return xi(args.i1); }
216 double _xiCell(const DataFuncArgs& args) const { return xi(args.i1, CellShapeError, args.i2 >= 0 ? (CaloGain::CaloGain)args.i2 : CaloGain::UNKNOWNGAIN); }
217 double _xiRing(const DataFuncArgs& args) const { return xi(args.i1, RingShapeError, args.i2 >= 0 ? (CaloGain::CaloGain)args.i2 : CaloGain::UNKNOWNGAIN); }
218 double _xiNormCell(const DataFuncArgs&) const { return xiNorm(CellShapeError); }
219 double _xiNormRing(const DataFuncArgs&) const { return xiNorm(RingShapeError); }
220 double _xip(const DataFuncArgs& args) const { return xip(args.i1); }
221 double _residualError(const DataFuncArgs& args) const { return residualError(args.i1); }
222 double _normResidualOffset(const DataFuncArgs& args) const { return residualOffset(args.i1, false); }
223 double _normResidualError(const DataFuncArgs& args) const { return residualError(args.i1, -1, false); }
224 double _ofcSigma(const DataFuncArgs& args) const;
225 double _ofcGamma(const DataFuncArgs& args) const;
226 int _iEta(const DataFuncArgs& args) const;
227 int _iPhi(const DataFuncArgs& args) const;
228 int _region(const DataFuncArgs& args) const;
229 int _layer(const DataFuncArgs& args) const;
230 int _calo(const DataFuncArgs& args) const;
231 int _feedThrough(const DataFuncArgs& args) const;
232 int _slot(const DataFuncArgs& args) const;
233 int _channel(const DataFuncArgs& args) const;
234 int _hash(const DataFuncArgs& args) const;
235 int _ring(const DataFuncArgs& args) const;
236 int _nData(const DataFuncArgs& args) const;
237 int _maxPosition(const DataFuncArgs&) const { return maxPosition(); }
238
239 double _count(const DataFuncArgs&) const { return 1; }
240
241 double _chi2(const DataFuncArgs&) const { return chi2(); }
242 double _chi2_noCorr(const DataFuncArgs& args) const;
243 double _chi2_ringCorr(const DataFuncArgs& args) const;
244 double _chi2_cellCorr(const DataFuncArgs& args) const;
245 double _chi2_k(const DataFuncArgs& args) const;
246 double _refitDeltaT(const DataFuncArgs& args) const;
247 double _refitScale(const DataFuncArgs& args) const;
248 double _refitChi2(const DataFuncArgs& args) const;
249 double _adjDeltaT(const DataFuncArgs& args) const;
250 double _adjScale(const DataFuncArgs& args) const;
251 double _x(const DataFuncArgs& args) const;
252 double _y(const DataFuncArgs& args) const;
253 double _z(const DataFuncArgs& args) const;
254 double _rt(const DataFuncArgs& args) const;
255 double _eta(const DataFuncArgs& args) const;
256 double _phi(const DataFuncArgs& args) const;
257 double _timeNoTOF(const DataFuncArgs& args) const;
258 double _timeForSplash1(const DataFuncArgs& args) const;
259 double _timeForSplash2(const DataFuncArgs& args) const;
260 double _peakSignif(const DataFuncArgs& args) const;
261 double _energySignif(const DataFuncArgs& args) const;
262 int _goodForShapeCorr(const DataFuncArgs& /*args*/) const { return (goodForShapeCorr() ? 1 : 0); }
263 double _upstreamE(const DataFuncArgs&) const { return upstreamEnergy(); }
264 double _upstreamERatio(const DataFuncArgs& args) const;
265 double _chi2Anomaly(const DataFuncArgs& args) const;
266 double timeClCorr() const;
267
268 double timeECorr() const;
269
270 double _timeECorr(const DataFuncArgs& args) const;
271
272 double _pass(const DataFuncArgs& args) const { return isPassed(args.str); }
273
274 void setCallBacks(const History* history, unsigned int index) const { m_history = history; m_index = index; }
275 friend class DataTweaker;
276
277 static double timeShift() { return m_timeShift; }
278 static void setTimeShift(double shift = 0) { m_timeShift = shift; }
279
280 private:
281
282 //bool fit(const AbsShape& reference, double& k, double& deltaT, double& chi2) const;
283 std::unique_ptr<const DataContainer> m_container;
285 mutable const History* m_history;
286 mutable unsigned int m_index;
287 inline static std::atomic<double> m_timeShift{0}; // specify a global time shift between first sample time and reported ofc time
288 };
289}
290#endif
291
bool isValid(const T &p)
Av: we implement here an ATLAS-sepcific convention: all particles which are 99xxxxx are fine.
Definition AtlasPID.h:878
@ Data
Definition BaseObject.h:11
#define maxValue(current, test)
#define minValue(current, test)
char data[hepevt_bytes_allocation_ATLAS]
Definition HepEvt.cxx:11
#define ATLAS_NOT_THREAD_SAFE
getNoisyStrip() Find noisy strips from hitmaps and write out into xml/db formats
int maxPosition() const
Definition AbsShape.cxx:52
const History * m_history
Definition Data.h:285
std::unique_ptr< const DataContainer > m_container
Definition Data.h:283
double _residualOffset(const DataFuncArgs &args) const
Definition Data.h:213
double footprint() const
Definition Data.h:140
double value(unsigned int i) const
Definition Data.h:148
static double timeShift()
Definition Data.h:277
const History * history() const
Definition Data.h:167
unsigned int m_index
Definition Data.h:286
double _sample(const DataFuncArgs &args) const
Definition Data.h:191
double resCorrN(ShapeErrorType shapeErrorType=BestShapeError) const
Definition Data.cxx:446
int _maxPosition(const DataFuncArgs &) const
Definition Data.h:237
double _xiCell(const DataFuncArgs &args) const
Definition Data.h:216
float pedestalSubtractedSample(unsigned int i) const
Definition Data.h:94
double _xip(const DataFuncArgs &args) const
Definition Data.h:220
double delta(short sample) const
Definition Data.cxx:430
double _normResidualOffset(const DataFuncArgs &args) const
Definition Data.h:222
double _residualError(const DataFuncArgs &args) const
Definition Data.h:221
Data(const DataContainer &container, const EventData &eventData, const History *history, int index)
Constructor.
Definition Data.cxx:32
CaloGain::CaloGain gain() const
Definition Data.h:87
double _adcMax(const DataFuncArgs &) const
Definition Data.h:198
friend class DataTweaker
Definition Data.h:275
int lumiBlock() const
Definition Data.cxx:29
int _gain(const DataFuncArgs &) const
Definition Data.h:210
double _adcMax_new(const DataFuncArgs &) const
Definition Data.h:199
unsigned int nSamples() const
Definition Data.h:90
double _delta(const DataFuncArgs &args) const
Definition Data.h:211
double residualError(short sample1, short sample2=-1, bool scale=true) const
Definition Data.cxx:490
double residualOffset(short sample, bool scale=true) const
Definition Data.cxx:454
double _quality(const DataFuncArgs &) const
Definition Data.h:195
int _lumiBlock(const DataFuncArgs &) const
Definition Data.h:207
const EventData & eventData() const
Definition Data.h:97
double time(unsigned int i) const
Definition Data.h:147
int _goodForShapeCorr(const DataFuncArgs &) const
Definition Data.h:262
double _chi2(const DataFuncArgs &) const
Definition Data.h:241
double xiNorm(ShapeErrorType shapeErrorType=BestShapeError) const
Definition Data.cxx:474
double _minValue(const DataFuncArgs &) const
Definition Data.h:202
double _energy(const DataFuncArgs &) const
Definition Data.h:193
double adc2MeV() const
Definition Data.h:128
double _pass(const DataFuncArgs &args) const
Definition Data.h:272
unsigned int nCorrs() const
Definition Data.h:151
double pedestalRMS() const
Definition Data.h:120
double _pedestalRMS(const DataFuncArgs &) const
Definition Data.h:197
int _run(const DataFuncArgs &) const
Definition Data.h:205
double _normResidualError(const DataFuncArgs &args) const
Definition Data.h:223
double adcMax() const
Definition Data.h:126
double meV2ADC() const
Definition Data.h:127
double _maxValue(const DataFuncArgs &) const
Definition Data.h:201
double _xi(const DataFuncArgs &args) const
Definition Data.h:215
int bunchId() const
Definition Data.cxx:30
double adcMax_new() const
Definition Data.cxx:76
const EventData & m_eventData
Definition Data.h:284
double xip(short sample, ShapeErrorType shapeErrorType=BestShapeError, CaloGain::CaloGain g=CaloGain::UNKNOWNGAIN) const
Definition Data.cxx:484
double noise() const
Definition Data.cxx:71
double _null(const DataFuncArgs &) const
Definition Data.h:204
double _count(const DataFuncArgs &) const
Definition Data.h:239
double xi(short sample, ShapeErrorType shapeErrorType=BestShapeError, CaloGain::CaloGain g=CaloGain::UNKNOWNGAIN, bool xip=false) const
Definition Data.cxx:462
const DataContainer & container() const
Definition Data.h:158
int status() const
Definition Data.h:123
double ofcTime() const
Definition Data.h:113
double _xiNormRing(const DataFuncArgs &) const
Definition Data.h:219
unsigned int nPoints() const
Definition Data.h:146
double residual(short sample) const
Definition Data.cxx:438
short index() const
Definition Data.h:168
static std::atomic< double > m_timeShift
Definition Data.h:287
double _noise(const DataFuncArgs &) const
Definition Data.h:200
double _upstreamE(const DataFuncArgs &) const
Definition Data.h:263
double _xiRing(const DataFuncArgs &args) const
Definition Data.h:217
bool isPassed(const TString &bitName) const
Definition Data.cxx:530
double _ofcTime(const DataFuncArgs &) const
Definition Data.h:194
double energy() const
Definition Data.h:110
bool goodForShapeCorr() const
Definition Data.cxx:536
static void setTimeShift(double shift=0)
Definition Data.h:278
double _residual(const DataFuncArgs &args) const
Definition Data.h:212
double _pedestalSubstractedSample(const DataFuncArgs &args) const
Definition Data.h:192
int _bunchId(const DataFuncArgs &) const
Definition Data.h:208
int _index(const DataFuncArgs &) const
Definition Data.h:209
double _pedestal(const DataFuncArgs &) const
Definition Data.h:196
double pedestal() const
Definition Data.h:119
void setCallBacks(const History *history, unsigned int index) const
Definition Data.h:274
const short & sample(unsigned int i) const
Definition Data.h:93
double upstreamEnergy() const
Definition Data.cxx:560
int event() const
Definition Data.cxx:28
double _resCorrN(const DataFuncArgs &) const
Definition Data.h:214
int _event(const DataFuncArgs &) const
Definition Data.h:206
double quality() const
Definition Data.h:116
double _xiNormCell(const DataFuncArgs &) const
Definition Data.h:218
Liquid Argon class for standalone storage of cell shape information.
double chi2(TH1 *h0, TH1 *h1)
std::string description
glabal timer - how long have I taken so far?
Definition hcg.cxx:91
@ UNKNOWNGAIN
Definition CaloGain.h:21
Definition index.py:1
DataFuncArgs(const TString &a_str)
Definition Data.h:41
DataFuncArgs(int a_i1, int a_i2=-1, double a_x1=Definitions::none, double a_x2=Definitions::none, const TString &a_str="")
Definition Data.h:37
DataFuncArgs(double a_x1, double a_x2=Definitions::none)
Definition Data.h:40
DataFuncSet(DataFunc< int >::Type intF)
Definition Data.h:57
double val(const Data &data, const DataFuncArgs &args) const
Definition Data.h:62
DataFunc< double >::Type doubleFunc
Definition Data.h:68
DataFuncSet(DataFunc< double >::Type doubleF)
Definition Data.h:58
DataFunc< int >::Type intFunc
Definition Data.h:67
double doubleVal(const Data &data, const DataFuncArgs &args) const
Definition Data.h:60
double intVal(const Data &data, const DataFuncArgs &args) const
Definition Data.h:61
T(Data::* Type)(const DataFuncArgs &) const
Definition Data.h:53
int run(int argc, char *argv[])