ATLAS Offline Software
Loading...
Searching...
No Matches
Data.h
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2024 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
24class TH1D;
25
26namespace LArSamples {
27
28 class SimpleShape;
29 class History;
30 class EventData;
31 class ScaledErrorData;
32 class DataContainer;
33
34 struct DataFuncArgs {
36 DataFuncArgs(int a_i1, int a_i2 = -1,
37 double a_x1 = Definitions::none, double a_x2 = Definitions::none,
38 const TString& a_str = "") { init(); i1 = a_i1; i2 = a_i2; x1 = a_x1; x2 = a_x2; str = a_str; }
39 DataFuncArgs(double a_x1, double a_x2 = Definitions::none) { init(); x1 = a_x1; x2 = a_x2; }
40 DataFuncArgs(const TString& a_str) { init(); str = a_str; }
41
42 void init() { i1 = i2 = -1; x1 = x2 = Definitions::none; str = ""; }
43
44 int i1, i2;
45 double x1, x2;
46 TString str;
47 };
48
49#ifndef __GCCXML__
50 class Data;
51 template<class T> struct DataFunc {
52 typedef T (Data::*Type)(const DataFuncArgs&) const;
53 };
54 struct DataFuncSet {
58
59 double doubleVal(const Data& data, const DataFuncArgs& args) const { return doubleFunc ? (data.*doubleFunc)(args) : -999; }
60 double intVal (const Data& data, const DataFuncArgs& args) const { return intFunc ? (data.*intFunc)(args) : -999; }
61 double val (const Data& data, const DataFuncArgs& args) const { return doubleFunc ? (data.*doubleFunc)(args) : (intFunc ? (data.*intFunc)(args) : -999); }
62
63 bool isNull() { return (!intFunc && !doubleFunc); }
64 bool isInt() { return (intFunc && !doubleFunc); }
65
68 };
69#endif
70
71
73
74 public:
75
77
78 Data(const DataContainer& container, const EventData& eventData, const History* history, int index, bool takeOwnership = false);
79 Data(const Data& other, const EventData* eventData = 0, const History* history = 0, int index = -1);
80
82 virtual ~Data();
83
85 CaloGain::CaloGain gain() const { return container().gain(); }
86
88 unsigned int nSamples() const { return container().nSamples(); }
89
91 const short& sample(unsigned int i) const { return container().sample(i); }
92 float pedestalSubtractedSample(unsigned int i) const { return sample(i) - pedestal(); }
93 std::vector<float> pedestalSubtractedSamples() const;
94
95 const EventData* eventData() const { return m_eventData; }
96
98 int run() const;
99
101 int event() const;
102
104 int lumiBlock() const;
105 int bunchId() const;
106
108 double energy() const { return container().energy(); }
109
111 double ofcTime() const { return container().ofcTime() + m_timeShift; }
112
114 double quality() const { return container().quality(); }
115
117 double pedestal() const { return container().pedestal(); }
118 double pedestalRMS() const { return container().pedestalRMS(); }
119
121 int status() const { return m_container->status(); }
122
124 double adcMax() const { return container().adcMax(); }
125 double meV2ADC() const { return (adcMax() > 0 && energy() > 0 ? adcMax()/energy() : -1); }
126 double adc2MeV() const { return (adcMax() > 0 && energy() > 0 ? energy()/adcMax() : -1); }
127
128 bool febError(LArFebErrorSummary::LArFebErrorType error) const;
129 bool isDisconnected() const;
130 TString problems(bool sayNone = false) const;
131
133 static TString gainStr(CaloGain::CaloGain gain);
134 TString description(unsigned int verbosity = 1) const;
135
136 bool isValid() const;
137
138 double footprint() const { return sizeof(*this) + nSamples()*sizeof(short); }
139
140 short maxSample() const;
141 short minSample() const;
142
143 // Interface to LArAbsShape
144 unsigned int nPoints() const { return nSamples(); }
145 double time(unsigned int i) const { return Definitions::samplingTime(i); }
146 double value(unsigned int i) const { return pedestalSubtractedSample(i); }
147 double covariance(unsigned int i, unsigned int j) const;
148
149 unsigned int nCorrs() const { return container().corrs().size(); }
150 double noise() const;
151
152 double adcMax_new() const;
153
154 double covarianceMeV(unsigned int i, unsigned int j) const;
155
156 const DataContainer& container() const { return *m_container; }
157
158 const DataContainer* dissolve();
159
160 SimpleShape* referenceShape() const;
161 SimpleShape* timeAlignedShape() const;
162
163 const ScaledErrorData* scaledErrorData() const;
164
165 const History* history() const { return m_history; }
166 short index() const { return m_index; }
167
168 TVectorD deltas() const;
169 TVectorD residuals() const;
170
171 double delta(short sample) const;
172 double residual(short sample) const;
173
174 double residualOffset(short sample, bool scale = true) const;
175 double resCorrN(ShapeErrorType shapeErrorType = BestShapeError) const;
176 double xi(short sample, ShapeErrorType shapeErrorType = BestShapeError, CaloGain::CaloGain g = CaloGain::UNKNOWNGAIN, bool xip = false) const;
177 double xiNorm(ShapeErrorType shapeErrorType = BestShapeError) const;
178 double xip(short sample, ShapeErrorType shapeErrorType = BestShapeError, CaloGain::CaloGain g = CaloGain::UNKNOWNGAIN) const;
179 double residualError(short sample1, short sample2 = -1, bool scale = true) const;
180 double chi2() const;
181
182 bool calcRefit(double& chi2, double& k, double& dT) const;
183 bool calcAdjust(double& k, double& dT) const;
184
185 bool isPassed(const TString& bitName) const;
186 bool goodForShapeCorr() const;
187 double upstreamEnergy() const;
188
189 double _sample(const DataFuncArgs& args) const { return sample(args.i1); }
190 double _pedestalSubstractedSample(const DataFuncArgs& args) const { return pedestalSubtractedSample(args.i1); }
191 double _energy(const DataFuncArgs&) const { return energy(); }
192 double _ofcTime(const DataFuncArgs&) const { return ofcTime(); }
193 double _quality(const DataFuncArgs&) const { return quality(); }
194 double _pedestal(const DataFuncArgs&) const { return pedestal(); }
195 double _pedestalRMS(const DataFuncArgs&) const { return pedestalRMS(); }
196 double _adcMax(const DataFuncArgs&) const { return adcMax(); }
197 double _adcMax_new(const DataFuncArgs&) const { return adcMax_new(); }
198 double _noise(const DataFuncArgs&) const { return noise(); }
199 double _maxValue(const DataFuncArgs&) const { return maxValue(); }
200 double _minValue(const DataFuncArgs&) const { return minValue(); }
201
202 double _null(const DataFuncArgs&) const { return 0; }
203 int _run(const DataFuncArgs&) const { return run(); }
204 int _event(const DataFuncArgs&) const { return event(); }
205 int _lumiBlock(const DataFuncArgs&) const { return lumiBlock(); }
206 int _bunchId(const DataFuncArgs&) const { return bunchId(); }
207 int _index(const DataFuncArgs&) const { return m_index; }
208 int _gain(const DataFuncArgs&) const { return gain(); }
209 double _delta(const DataFuncArgs& args) const { return delta(args.i1); }
210 double _residual(const DataFuncArgs& args) const { return residual(args.i1); }
211 double _residualOffset(const DataFuncArgs& args) const { return residualOffset(args.i1); }
212 double _resCorrN(const DataFuncArgs&) const { return resCorrN(CellShapeError); }
213 double _xi(const DataFuncArgs& args) const { return xi(args.i1); }
214 double _xiCell(const DataFuncArgs& args) const { return xi(args.i1, CellShapeError, args.i2 >= 0 ? (CaloGain::CaloGain)args.i2 : CaloGain::UNKNOWNGAIN); }
215 double _xiRing(const DataFuncArgs& args) const { return xi(args.i1, RingShapeError, args.i2 >= 0 ? (CaloGain::CaloGain)args.i2 : CaloGain::UNKNOWNGAIN); }
216 double _xiNormCell(const DataFuncArgs&) const { return xiNorm(CellShapeError); }
217 double _xiNormRing(const DataFuncArgs&) const { return xiNorm(RingShapeError); }
218 double _xip(const DataFuncArgs& args) const { return xip(args.i1); }
219 double _residualError(const DataFuncArgs& args) const { return residualError(args.i1); }
220 double _normResidualOffset(const DataFuncArgs& args) const { return residualOffset(args.i1, false); }
221 double _normResidualError(const DataFuncArgs& args) const { return residualError(args.i1, -1, false); }
222 double _ofcSigma(const DataFuncArgs& args) const;
223 double _ofcGamma(const DataFuncArgs& args) const;
224 int _iEta(const DataFuncArgs& args) const;
225 int _iPhi(const DataFuncArgs& args) const;
226 int _region(const DataFuncArgs& args) const;
227 int _layer(const DataFuncArgs& args) const;
228 int _calo(const DataFuncArgs& args) const;
229 int _feedThrough(const DataFuncArgs& args) const;
230 int _slot(const DataFuncArgs& args) const;
231 int _channel(const DataFuncArgs& args) const;
232 int _hash(const DataFuncArgs& args) const;
233 int _ring(const DataFuncArgs& args) const;
234 int _nData(const DataFuncArgs& args) const;
235 int _maxPosition(const DataFuncArgs&) const { return maxPosition(); }
236
237 double _count(const DataFuncArgs&) const { return 1; }
238
239 double _chi2(const DataFuncArgs&) const { return chi2(); }
240 double _chi2_noCorr(const DataFuncArgs& args) const;
241 double _chi2_ringCorr(const DataFuncArgs& args) const;
242 double _chi2_cellCorr(const DataFuncArgs& args) const;
243 double _chi2_k(const DataFuncArgs& args) const;
244 double _refitDeltaT(const DataFuncArgs& args) const;
245 double _refitScale(const DataFuncArgs& args) const;
246 double _refitChi2(const DataFuncArgs& args) const;
247 double _adjDeltaT(const DataFuncArgs& args) const;
248 double _adjScale(const DataFuncArgs& args) const;
249 double _x(const DataFuncArgs& args) const;
250 double _y(const DataFuncArgs& args) const;
251 double _z(const DataFuncArgs& args) const;
252 double _rt(const DataFuncArgs& args) const;
253 double _eta(const DataFuncArgs& args) const;
254 double _phi(const DataFuncArgs& args) const;
255 double _timeNoTOF(const DataFuncArgs& args) const;
256 double _timeForSplash1(const DataFuncArgs& args) const;
257 double _timeForSplash2(const DataFuncArgs& args) const;
258 double _peakSignif(const DataFuncArgs& args) const;
259 double _energySignif(const DataFuncArgs& args) const;
260 int _goodForShapeCorr(const DataFuncArgs& /*args*/) const { return (goodForShapeCorr() ? 1 : 0); }
261 double _upstreamE(const DataFuncArgs&) const { return upstreamEnergy(); }
262 double _upstreamERatio(const DataFuncArgs& args) const;
263 double _chi2Anomaly(const DataFuncArgs& args) const;
264 double timeClCorr() const;
265
266 double timeECorr() const;
267
268 double _timeECorr(const DataFuncArgs& args) const;
269
270 double _pass(const DataFuncArgs& args) const { return isPassed(args.str); }
271
272 void setCallBacks(const History* history, unsigned int index) const { m_history = history; m_index = index; }
273 friend class DataTweaker;
274
275 static double timeShift() { return m_timeShift; }
276 static void setTimeShift(double shift = 0) { m_timeShift = shift; }
277
278 private:
279
280 //bool fit(const AbsShape& reference, double& k, double& deltaT, double& chi2) const;
282 const EventData* const m_eventData;
283 mutable const History* m_history;
284 mutable unsigned int m_index;
285 inline static std::atomic<double> m_timeShift{0}; // specify a global time shift between first sample time and reported ofc time
286 };
287}
288#endif
289
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:283
double _residualOffset(const DataFuncArgs &args) const
Definition Data.h:211
double footprint() const
Definition Data.h:138
double value(unsigned int i) const
Definition Data.h:146
static double timeShift()
Definition Data.h:275
const History * history() const
Definition Data.h:165
unsigned int m_index
Definition Data.h:284
double _sample(const DataFuncArgs &args) const
Definition Data.h:189
const EventData * eventData() const
Definition Data.h:95
double resCorrN(ShapeErrorType shapeErrorType=BestShapeError) const
Definition Data.cxx:443
int _maxPosition(const DataFuncArgs &) const
Definition Data.h:235
double _xiCell(const DataFuncArgs &args) const
Definition Data.h:214
float pedestalSubtractedSample(unsigned int i) const
Definition Data.h:92
double _xip(const DataFuncArgs &args) const
Definition Data.h:218
double delta(short sample) const
Definition Data.cxx:427
double _normResidualOffset(const DataFuncArgs &args) const
Definition Data.h:220
double _residualError(const DataFuncArgs &args) const
Definition Data.h:219
CaloGain::CaloGain gain() const
Definition Data.h:85
double _adcMax(const DataFuncArgs &) const
Definition Data.h:196
friend class DataTweaker
Definition Data.h:273
int lumiBlock() const
Definition Data.cxx:29
int _gain(const DataFuncArgs &) const
Definition Data.h:208
Data(const DataContainer &container, const EventData &eventData, const History *history, int index, bool takeOwnership=false)
Constructor.
Definition Data.cxx:32
double _adcMax_new(const DataFuncArgs &) const
Definition Data.h:197
unsigned int nSamples() const
Definition Data.h:88
double _delta(const DataFuncArgs &args) const
Definition Data.h:209
double residualError(short sample1, short sample2=-1, bool scale=true) const
Definition Data.cxx:489
double residualOffset(short sample, bool scale=true) const
Definition Data.cxx:451
double _quality(const DataFuncArgs &) const
Definition Data.h:193
int _lumiBlock(const DataFuncArgs &) const
Definition Data.h:205
double time(unsigned int i) const
Definition Data.h:145
const DataContainer *const m_container
Definition Data.h:281
int _goodForShapeCorr(const DataFuncArgs &) const
Definition Data.h:260
double _chi2(const DataFuncArgs &) const
Definition Data.h:239
double xiNorm(ShapeErrorType shapeErrorType=BestShapeError) const
Definition Data.cxx:472
double _minValue(const DataFuncArgs &) const
Definition Data.h:200
double _energy(const DataFuncArgs &) const
Definition Data.h:191
double adc2MeV() const
Definition Data.h:126
double _pass(const DataFuncArgs &args) const
Definition Data.h:270
unsigned int nCorrs() const
Definition Data.h:149
double pedestalRMS() const
Definition Data.h:118
const EventData *const m_eventData
Definition Data.h:282
double _pedestalRMS(const DataFuncArgs &) const
Definition Data.h:195
int _run(const DataFuncArgs &) const
Definition Data.h:203
double _normResidualError(const DataFuncArgs &args) const
Definition Data.h:221
double adcMax() const
Definition Data.h:124
double meV2ADC() const
Definition Data.h:125
double _maxValue(const DataFuncArgs &) const
Definition Data.h:199
double _xi(const DataFuncArgs &args) const
Definition Data.h:213
int bunchId() const
Definition Data.cxx:30
double adcMax_new() const
Definition Data.cxx:69
double xip(short sample, ShapeErrorType shapeErrorType=BestShapeError, CaloGain::CaloGain g=CaloGain::UNKNOWNGAIN) const
Definition Data.cxx:483
double noise() const
Definition Data.cxx:64
double _null(const DataFuncArgs &) const
Definition Data.h:202
double _count(const DataFuncArgs &) const
Definition Data.h:237
double xi(short sample, ShapeErrorType shapeErrorType=BestShapeError, CaloGain::CaloGain g=CaloGain::UNKNOWNGAIN, bool xip=false) const
Definition Data.cxx:459
const DataContainer & container() const
Definition Data.h:156
int status() const
Definition Data.h:121
double ofcTime() const
Definition Data.h:111
double _xiNormRing(const DataFuncArgs &) const
Definition Data.h:217
unsigned int nPoints() const
Definition Data.h:144
double residual(short sample) const
Definition Data.cxx:435
short index() const
Definition Data.h:166
static std::atomic< double > m_timeShift
Definition Data.h:285
double _noise(const DataFuncArgs &) const
Definition Data.h:198
double _upstreamE(const DataFuncArgs &) const
Definition Data.h:261
double _xiRing(const DataFuncArgs &args) const
Definition Data.h:215
bool isPassed(const TString &bitName) const
Definition Data.cxx:529
double _ofcTime(const DataFuncArgs &) const
Definition Data.h:192
double energy() const
Definition Data.h:108
bool goodForShapeCorr() const
Definition Data.cxx:535
static void setTimeShift(double shift=0)
Definition Data.h:276
double _residual(const DataFuncArgs &args) const
Definition Data.h:210
double _pedestalSubstractedSample(const DataFuncArgs &args) const
Definition Data.h:190
int _bunchId(const DataFuncArgs &) const
Definition Data.h:206
int _index(const DataFuncArgs &) const
Definition Data.h:207
double _pedestal(const DataFuncArgs &) const
Definition Data.h:194
double pedestal() const
Definition Data.h:117
void setCallBacks(const History *history, unsigned int index) const
Definition Data.h:272
const short & sample(unsigned int i) const
Definition Data.h:91
double upstreamEnergy() const
Definition Data.cxx:559
int event() const
Definition Data.cxx:28
double _resCorrN(const DataFuncArgs &) const
Definition Data.h:212
int _event(const DataFuncArgs &) const
Definition Data.h:204
double quality() const
Definition Data.h:114
double _xiNormCell(const DataFuncArgs &) const
Definition Data.h:216
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:20
Definition index.py:1
Definition run.py:1
DataFuncArgs(const TString &a_str)
Definition Data.h:40
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:36
DataFuncArgs(double a_x1, double a_x2=Definitions::none)
Definition Data.h:39
DataFuncSet(DataFunc< int >::Type intF)
Definition Data.h:56
double val(const Data &data, const DataFuncArgs &args) const
Definition Data.h:61
DataFunc< double >::Type doubleFunc
Definition Data.h:67
DataFuncSet(DataFunc< double >::Type doubleF)
Definition Data.h:57
DataFunc< int >::Type intFunc
Definition Data.h:66
double doubleVal(const Data &data, const DataFuncArgs &args) const
Definition Data.h:59
double intVal(const Data &data, const DataFuncArgs &args) const
Definition Data.h:60
T(Data::* Type)(const DataFuncArgs &) const
Definition Data.h:52