ATLAS Offline Software
Loading...
Searching...
No Matches
TileTBAANtuple.h
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3*/
4
5//****************************************************************************
42//****************************************************************************
43#ifndef TileTBAANtuple_H
44#define TileTBAANtuple_H
45
46// Gaudi includes
47#include "GaudiKernel/ToolHandle.h"
48#include "GaudiKernel/ServiceHandle.h"
49#include "GaudiKernel/ITHistSvc.h"
50
53
54// Athena includes
57
58// Tile includes
72
73#include "TFile.h"
74#include "TMatrixT.h"
75#include "TTree.h"
76#include <string>
77#include <vector>
78#include <map>
79#include <stdint.h>
80
81class ITHistSvc;
82class TileID;
83class TileHWID;
84//class TileCablingSvc;
86class TileLaserObject;
87class TileHit;
88
90 public:
91 //Constructor
92 TileTBAANtuple(const std::string& name, ISvcLocator* pSvcLocator);
93
94 //Destructor
95 virtual ~TileTBAANtuple() = default;
96 StatusCode ntuple_initialize(const EventContext& ctx);
97 StatusCode ntuple_clear();
98
99 //Gaudi Hooks
100 virtual StatusCode initialize() override;
101 virtual StatusCode execute() override;
102
103 private:
104
105 enum {NOT_SETUP = -9999};
106 enum {MAX_MINIDRAWER = 4, MAX_CHAN = 48, MAX_DMU = 16};
107
112 "TileSamplingFraction", "TileSamplingFraction", "Input Tile sampling fraction"};
113
115 "TileDigitsContainer", "TileDigitsCnt", "Input Tile digits container"};
116
118 "TileDigitsContainerFlx", "", "Input Tile FELIX digits container"};
119
121 "TileBeamElemContainer", "TileBeamElemCnt", "Input Tile beam elements container"};
122
124 "TileRawChannelContainerFlat", "", "Input Tile raw channel container reconstructed with Flat method"};
125
127 "TileRawChannelContainerFit", "", "Input Tile raw channel container reconstructed with Fit method"};
128
130 "TileRawChannelContainerOpt", "TileRawChannelOpt2", "Input Tile raw channel container reconstructed with Opt2 method"};
131
133 "TileRawChannelContainerDsp", "", "Input Tile DSP raw channel container"};
134
136 "TileRawChannelContainerFitCool", "", "Input Tile raw channel container reconstructed with Fit COOL method"};
137
139 "TileRawChannelContainerFitFlx", "", "Input Tile FELIX raw channel container reconstructed with Fit method"};
140
142 "TileRawChannelContainerOptFlx", "", "Input Tile FELIX raw channel container reconstructed with Opt2 method"};
143
145 "TileLaserObj", "", "Input Tile laser object"};
146
148 "TileHitContainer", "TileHitCnt", "Input Tile hit container"};
149
151 "TileHitVector", "TileHitVec", "Input Tile hit vector"};
152
154 "CaloCellContainer", "AllCalo", "Input Calo cell container"};
155
156 ToolHandle<TileCondToolEmscale> m_tileToolEmscale{this,
157 "TileCondToolEmscale", "TileCondToolEmscale", "Tile EMS conditions tool"};
158
159 ToolHandle<TileRawChannelBuilderFlatFilter> m_adderFilterAlgTool{this,
160 "TileRawChannelBuilderFlatFilter", "TileRawChannelBuilderFlatFilter", "Tile raw channel builder tool"};
161
163 "TileDQstatus", "TileDQstatus", "TileDQstatus key" };
164
165 Gaudi::Property<bool> m_calibrateEnergy{this, "CalibrateEnergy", true, "Calibrate energy"};
166 Gaudi::Property<bool> m_useDspUnits{this, "UseDspUnits", false, "Use DSP untis"};
167 Gaudi::Property<int> m_finalUnit{this, "OfflineUnits", TileRawChannelUnit::MegaElectronVolts, "Calibrate everything to this level"};
168 Gaudi::Property<bool> m_calibMode{this, "CalibMode", false, "If data should be put in calib mode"};
169 Gaudi::Property<bool> m_unpackAdder{this, "UnpackAdder", false, "Unpack adder"};
170 Gaudi::Property<bool> m_completeNtuple{this, "CompleteNtuple", true, "Complete the ntuple"};
171 Gaudi::Property<bool> m_bsInput{this, "BSInput", true, "Bytestream input"};
172 Gaudi::Property<bool> m_pmtOrder{this, "PMTOrder", true, "Change channel ordering to pmt ordering in the ntuple"};
173 Gaudi::Property<int> m_nSamples{this, "NSamples", NOT_SETUP, "Number of samples"};
174 Gaudi::Property<int> m_nSamplesFlx{this, "NSamplesFelix", NOT_SETUP, "Number of samples for FELIX"};
175 Gaudi::Property<unsigned int> m_nDrawers{this, "NDrawers", 6, "Number of drawers"};
176 Gaudi::Property<unsigned int> m_nDrawersFlx{this, "NDrawersFelix", 0, "Number of drawers for FELIX"};
177 Gaudi::Property<int> m_TBperiod{this, "TBperiod", 2016, "Tuned for 2016 testbeam by default"};
178 Gaudi::Property<int> m_eventsPerFile{this, "EventsPerFile", 200000, "Number of events per file"};
179 Gaudi::Property<Long64_t> m_treeSize{this, "TreeSize", 16000000000LL, "Size of tree"};
180 Gaudi::Property<std::string> m_streamName{this, "StreamName", "AANT", "Name of the output stream"};
181 Gaudi::Property<std::string> m_ntupleID{this, "NTupleID", "h1000", "Name of the ntuple ID"};
182
183 Gaudi::Property<std::vector<std::string>> m_rosName{this, "rosName", {"B", "A", "C", "D", "E"}, "Name of arrays in ntuple for different ROSes"};
184 Gaudi::Property<std::vector<std::string>> m_drawerList{this, "drawerList", {"-1"}, "List of frag IDs in correct order; Setup drawer list from data"};
185 Gaudi::Property<std::vector<int>> m_drawerType{this, "drawerType", {}, "Type of every drawer 1-4: B+, B-, EB+, EB-; Take drawer type from Frag ID (doesn't work for 2003)"};
186 Gaudi::Property<std::vector<std::string>> m_beamFragList{this, "beamFragList", {}, "List of beam frag IDs to store in the ntuple"};
187
188 Gaudi::Property<float> m_beamBN2X1{this, "BN2X1", 0.0, "Params for Beam TDC: Beam chamber: -2"};
189 Gaudi::Property<float> m_beamBN2X2{this, "BN2X2", 0.2, "Params for Beam TDC: Beam chamber: -2"};
190 Gaudi::Property<float> m_beamBN2Y1{this, "BN2Y1", 0.0, "Params for Beam TDC: Beam chamber: -2"};
191 Gaudi::Property<float> m_beamBN2Y2{this, "BN2Y2", 0.2, "Params for Beam TDC: Beam chamber: -2"};
192
193 Gaudi::Property<float> m_beamBN1X1{this, "BN1X1", 0.0, "Params for Beam TDC: Beam chamber: -1"};
194 Gaudi::Property<float> m_beamBN1X2{this, "BN1X2", 0.2, "Params for Beam TDC: Beam chamber: -1"};
195 Gaudi::Property<float> m_beamBN1Y1{this, "BN1Y1", 0.0, "Params for Beam TDC: Beam chamber: -1"};
196 Gaudi::Property<float> m_beamBN1Y2{this, "BN1Y2", 0.2, "Params for Beam TDC: Beam chamber: -1"};
197
198 Gaudi::Property<float> m_beamBC0X1{this, "BC0X1", 0.0, "Params for Beam TDC: Beam chamber: 0"};
199 Gaudi::Property<float> m_beamBC0X2{this, "BC0X2", 0.2, "Params for Beam TDC: Beam chamber: 0"};
200 Gaudi::Property<float> m_beamBC0Y1{this, "BC0Y1", 0.0, "Params for Beam TDC: Beam chamber: 0"};
201 Gaudi::Property<float> m_beamBC0Y2{this, "BC0Y2", 0.2, "Params for Beam TDC: Beam chamber: 0"};
202 Gaudi::Property<float> m_beamBC0Z{this, "BC0Z", 17138.0, "Params for Beam TDC: Beam chamber: 0"};
203
204 Gaudi::Property<float> m_beamBC1X1{this, "BC1X1", NOT_SETUP - 1, "Params for Beam TDC: Beam chamber: 1"};
205 Gaudi::Property<float> m_beamBC1X2{this, "BC1X2", NOT_SETUP - 1, "Params for Beam TDC: Beam chamber: 1"};
206 Gaudi::Property<float> m_beamBC1Y1{this, "BC1Y1", NOT_SETUP - 1, "Params for Beam TDC: Beam chamber: 1"};
207 Gaudi::Property<float> m_beamBC1Y2{this, "BC1Y2", NOT_SETUP - 1, "Params for Beam TDC: Beam chamber: 1"};
208 Gaudi::Property<float> m_beamBC1Z{this, "BC1Z", NOT_SETUP - 1, "Params for Beam TDC: Beam chamber: 1"};
209 Gaudi::Property<float> m_beamBC1Z_0{this, "BC1Z_0", NOT_SETUP - 1, "Params for Beam TDC: Beam chamber: 1"};
210 Gaudi::Property<float> m_beamBC1Z_90{this, "BC1Z_90", NOT_SETUP - 1, "Params for Beam TDC: Beam chamber: 1"};
211 Gaudi::Property<float> m_beamBC1Z_min90{this, "BC1Z_min90", NOT_SETUP - 1, "Params for Beam TDC: Beam chamber: 1"};
212
213 Gaudi::Property<float> m_beamBC2X1{this, "BC2X1", NOT_SETUP - 1, "Params for Beam TDC: Beam chamber: 2"};
214 Gaudi::Property<float> m_beamBC2X2{this, "BC2X2", NOT_SETUP - 1, "Params for Beam TDC: Beam chamber: 2"};
215 Gaudi::Property<float> m_beamBC2Y1{this, "BC2Y1", NOT_SETUP - 1, "Params for Beam TDC: Beam chamber: 2"};
216 Gaudi::Property<float> m_beamBC2Y2{this, "BC2Y2", NOT_SETUP - 1, "Params for Beam TDC: Beam chamber: 2"};
217 Gaudi::Property<float> m_beamBC2Z{this, "BC2Z", NOT_SETUP - 1, "Params for Beam TDC: Beam chamber: 2"};
218 Gaudi::Property<float> m_beamBC2Z_0{this, "BC2Z_0", NOT_SETUP - 1, "Params for Beam TDC: Beam chamber: 2"};
219 Gaudi::Property<float> m_beamBC2Z_90{this, "BC2Z_90", NOT_SETUP - 1, "Params for Beam TDC: Beam chamber: 2"};
220 Gaudi::Property<float> m_beamBC2Z_min90{this, "BC2Z_min90", NOT_SETUP - 1, "Params for Beam TDC: Beam chamber: 2"};
221
222 Gaudi::Property<float> m_radius{this, "Radius", 2280.0, "Inner radius of calo, for CTB 2004 only"};
223 Gaudi::Property<std::string> m_etaFileName{this, "EtaFileName", "TileEtaCTB.txt", "File name with ETA, for CTB 2004 only"};
224
225 StatusCode storeRawChannels(const EventContext& ctx
227 , bool calibMode
228 , std::vector<std::array<float, MAX_CHAN>>* eneVec
229 , std::vector<std::array<float, MAX_CHAN>>* timeVec
230 , std::vector<std::array<float, MAX_CHAN>>* chi2Vec
231 , std::vector<std::array<float, MAX_CHAN>>* pedVec
232 , bool saveDQstatus = false);
233
234 StatusCode storeDigits(const EventContext& ctx, const SG::ReadHandleKey<TileDigitsContainer>& containerKey, const TileDQstatus* dqStatus=nullptr);
235 StatusCode storeDigitsFlx(const EventContext& ctx, const SG::ReadHandleKey<TileDigitsContainer>& containerKey);
236 StatusCode storeBeamElements(const EventContext& ctx);
237 StatusCode storeCells(const EventContext& ctx);
238 StatusCode storeLaser(const EventContext& ctx);
239 StatusCode storeHitVector(const EventContext& ctx);
240 StatusCode storeHitContainer(const EventContext& ctx);
241 void storeHit(const TileHit *hit, int fragType, int fragId,
242 std::array<float, MAX_CHAN>& ehitVec,
243 std::array<float, MAX_CHAN>& thitVec,
244 const TileSamplingFraction* samplingFraction);
245
246 StatusCode initList(const EventContext& ctx);
247 StatusCode initListFlx(const EventContext& ctx);
248 StatusCode initNTuple(void);
249 //StatusCode connectFile(void);
250
251 void getEta(void);
252
253 void TRIGGER_addBranch(void);
254 void MUON_addBranch(void);
255 void ECAL_addBranch(void);
256 void QDC_addBranch(void);
257 void LASER_addBranch(void);
258 void ADDER_addBranch(void);
259 void CISPAR_addBranch(void);
260 void BEAM_addBranch(void);
261 void DIGI_addBranch(void);
262 void FELIX_addBranch(void);
263 //void RAW_addBranch(void);
264 void HIT_addBranch(void);
265 void ENETOTAL_addBranch(void);
266 void COINCBOARD_addBranch(void);
268
269 void TRIGGER_clearBranch(void);
270 void MUON_clearBranch(void);
271 void ECAL_clearBranch(void);
272 void QDC_clearBranch(void);
273 void LASER_clearBranch(void);
274 void ADDER_clearBranch(void);
275 void CISPAR_clearBranch(void);
276 void BEAM_clearBranch(void);
277 void DIGI_clearBranch(void);
278 void FELIX_clearBranch(void);
279 //void RAW_clearBranch(void);
280 void HIT_clearBranch(void);
281 void ENETOTAL_clearBranch(void);
282 void COINCBOARD_clearBranch(void);
284
285 template<typename T>
286 void clear_init_minus1(std::vector<T>& vec);
287
288 template<typename T, size_t N>
289 void clear_init_minus1(std::vector<std::array<T,N>>& vec);
290
291 template<typename T, size_t N>
292 void clear_init_zero(std::vector<std::array<T,N>>& vec);
293
294 void clear_samples(std::vector<std::unique_ptr<int []>>& vec, const std::vector<int>& nsamples, int nchan=MAX_CHAN);
295
296 inline int digiChannel2PMT(int fragType, int chan) {
297 return (abs(m_cabling->channel2hole(fragType, chan)) - 1);
298 }
299
302 inline short CheckDMUFormat(uint32_t header) {
303 if (((header >> 31 & 0x1) == 1) && ((header >> 17 & 0x1) == 0))
304 return 0; // no error
305 else
306 return 1; //error
307 }
308
310
311 inline short CheckDMUParity(uint32_t header) {
312 uint32_t parity(0);
313 for (int i = 0; i < 32; ++i)
314 parity += header >> i & 0x1;
315
316 if ((parity % 2) == 1)
317 return 0; //no error
318 else
319 return 1; //error
320 }
321
322 void checkIsPropertySetup(float property, const std::string& name) {
323 if (property < NOT_SETUP) {
324 ATH_MSG_ERROR("The following property should be set up via JO: " << name);
325 }
326 }
327
328 void setupPropertyDefaultValue(float property, float defaultValue, const std::string& name) {
329 if (property < NOT_SETUP) {
330 property = defaultValue;
331 ATH_MSG_INFO("The following property is not set up via JO, using default value: " << name << "=" << defaultValue);
332 }
333 }
334
336 void setupBeamChambersTB2015(void);
338
339 //
340
341 //handle to THistSvc
343
344 // The ntuple
345 TTree* m_ntuplePtr{nullptr};
346 bool m_ntupleCreated{false};
347
348 // event number
349 int m_evtNr{-1};
350
351 // Trigger items
352 int m_evTime{};
353 int m_run{};
354 int m_evt{};
357
358 // 0 - Beam, 1 neg eta, 2 pos eta
359 std::vector<int> m_l1ID;
360 std::vector<int> m_l1Type;
361 std::vector<int> m_evBCID;
362 std::vector<int> m_evType;
363 std::vector<int> m_frBCID;
364
365 // Muon items
366 float m_muBackHit{};
367 float m_muBackSum{};
368 std::array<float,14> m_muBack{}; // MUON/MuBack
369 std::array<float,2> m_muCalib{}; // MUON/MuCalib
370
371 // Ecal
372 std::array<float,8> m_ecal{};
373
374 // QDC
375 std::array<uint32_t,33> m_qdc{};
376
377 // laser items
379
381 double m_las_ReqAmp{};
383
388
389 double m_las_D1_Ped{};
390 double m_las_D2_Ped{};
391 double m_las_D3_Ped{};
392 double m_las_D4_Ped{};
393
398
403
408
413
418
421
424
427
430
432
434 float m_las0{};
435 float m_las1{};
436 float m_las2{};
437 float m_las3{};
438 std::array<float, 4> m_lasExtra{};
439
440 // pattern Unit in common beam crate
442
443 // Adder items
444 std::vector<int*> m_adder;
445 std::vector<int> m_adderPayload;
446 std::array<float, 16> m_eneAdd{};
447 std::array<float, 16> m_timeAdd{};
448
449 // Cispar
450 int m_cispar[16]{};
451
452 // TDC/BEAM Items
453 uint32_t m_s1cou{};
454 uint32_t m_s2cou{};
455 uint32_t m_s3cou{};
456 uint32_t m_cher1{};
457 uint32_t m_cher2{};
458 uint32_t m_cher3{};
459 uint32_t m_muTag{};
460 uint32_t m_muHalo{};
461 uint32_t m_muVeto{};
462
465
466 int m_sc1{};
467 int m_sc2{};
468
469 std::array<int, 16> m_tof{};
470 std::array<int, 16> m_btdc1{};
471 std::array<int, 16> m_btdc2{};
472 std::array<int, 16> m_scaler{};
473 std::vector<std::vector<int> > *m_btdc{};
475 int m_tscTOF{};
476 int m_btdcNhit[16]{};
478
479 float m_xChN2{};
480 float m_yChN2{};
481 float m_xChN1{};
482 float m_yChN1{};
483 float m_xCha0{};
484 float m_yCha0{};
485
486 float m_xCha1{};
487 float m_yCha1{};
488 float m_xCha2{};
489 float m_yCha2{};
490 float m_xCha1_0{};
491 float m_yCha1_0{};
492 float m_xCha2_0{};
493 float m_yCha2_0{};
494 float m_xImp{};
495 float m_yImp{};
496
497 float m_xImp_0{};
498 float m_yImp_0{};
499 float m_xImp_90{};
500 float m_yImp_90{};
503 // Digi/Energy items
504 std::vector<int> m_evtVec;
505 std::vector<short> m_rodBCIDVec;
506 std::vector<short> m_sizeVec;
507
508 std::vector<int> m_evtflxVec;
509 std::vector<short> m_rodBCIDflxVec;
510 std::vector<short> m_sizeflxVec;
511
512 std::vector<std::array<int, MAX_CHAN>> m_gainflxVec;
513 std::vector<std::unique_ptr<int []>> m_sampleflxVec;
514
515 std::vector<std::array<int, MAX_DMU>> m_bcidVec;
516 std::vector<std::array<uint32_t, MAX_DMU>> m_DMUheaderVec;
517 std::vector<std::array<short, MAX_DMU>> m_DMUformatErrVec;
518 std::vector<std::array<short, MAX_DMU>> m_DMUparityErrVec;
519 std::vector<std::array<short, MAX_DMU>> m_DMUmemoryErrVec;
520 std::vector<std::array<short, MAX_DMU>> m_DMUDstrobeErrVec;
521 std::vector<std::array<short, MAX_DMU>> m_DMUSstrobeErrVec;
522 std::vector<std::array<short, MAX_DMU>> m_DMUHeadparityErrVec;
523 std::vector<std::array<short, MAX_DMU>> m_DMUDataparityErrVec;
524 std::vector<std::array<int, 2>> m_dmuMaskVec;
525 std::vector<std::array<int, 2>> m_slinkCRCVec;
526 std::vector<std::array<int, MAX_CHAN>> m_gainVec;
527 std::vector<std::unique_ptr<int []>> m_sampleVec;
528 std::vector<std::array<int, MAX_DMU>> m_feCRCVec; //we use int, because vector<bool> and shorts are bugged
529 std::vector<std::array<int, MAX_DMU>> m_rodCRCVec;
530
531 std::vector<std::array<float, MAX_CHAN>> m_eneVec;
532 std::vector<std::array<float, MAX_CHAN>> m_timeVec;
533 std::vector<std::array<float, MAX_CHAN>> m_pedFlatVec;
534 std::vector<std::array<float, MAX_CHAN>> m_chi2FlatVec;
535 std::vector<std::array<float, MAX_CHAN>> m_efitVec;
536 std::vector<std::array<float, MAX_CHAN>> m_tfitVec;
537 std::vector<std::array<float, MAX_CHAN>> m_pedfitVec;
538 std::vector<std::array<float, MAX_CHAN>> m_chi2Vec;
539 std::vector<std::array<float, MAX_CHAN>> m_efitcVec;
540 std::vector<std::array<float, MAX_CHAN>> m_tfitcVec;
541 std::vector<std::array<float, MAX_CHAN>> m_pedfitcVec;
542 std::vector<std::array<float, MAX_CHAN>> m_chi2cVec;
543 std::vector<std::array<float, MAX_CHAN>> m_eOptVec;
544 std::vector<std::array<float, MAX_CHAN>> m_tOptVec;
545 std::vector<std::array<float, MAX_CHAN>> m_pedOptVec;
546 std::vector<std::array<float, MAX_CHAN>> m_chi2OptVec;
547 std::vector<std::array<float, MAX_CHAN>> m_eDspVec;
548 std::vector<std::array<float, MAX_CHAN>> m_tDspVec;
549 std::vector<std::array<float, MAX_CHAN>> m_chi2DspVec;
550
551 std::vector<std::array<float, MAX_CHAN>> m_eflxfitVec;
552 std::vector<std::array<float, MAX_CHAN>> m_tflxfitVec;
553 std::vector<std::array<float, MAX_CHAN>> m_chi2flxfitVec;
554 std::vector<std::array<float, MAX_CHAN>> m_pedflxfitVec;
555 std::vector<std::array<float, MAX_CHAN>> m_eflxoptVec;
556 std::vector<std::array<float, MAX_CHAN>> m_tflxoptVec;
557 std::vector<std::array<float, MAX_CHAN>> m_chi2flxoptVec;
558 std::vector<std::array<float, MAX_CHAN>> m_pedflxoptVec;
559
560 std::vector<short> m_ROD_GlobalCRCVec;
561 std::vector<std::array<short, MAX_DMU>> m_ROD_DMUBCIDVec;
562 std::vector<std::array<short, MAX_DMU>> m_ROD_DMUmemoryErrVec;
563 std::vector<std::array<short, MAX_DMU>> m_ROD_DMUSstrobeErrVec;
564 std::vector<std::array<short, MAX_DMU>> m_ROD_DMUDstrobeErrVec;
565 std::vector<std::array<short, MAX_DMU>> m_ROD_DMUHeadformatErrVec;
566 std::vector<std::array<short, MAX_DMU>> m_ROD_DMUDataformatErrVec;
567 std::vector<std::array<short, 2>> m_ROD_DMUMaskVec;
568
569 std::vector<std::array<int, MAX_MINIDRAWER>> m_mdL1idflxVec;
570 std::vector<std::array<int, MAX_MINIDRAWER>> m_mdBcidflxVec;
571 std::vector<std::array<int, MAX_MINIDRAWER>> m_mdModuleflxVec;
572 std::vector<std::array<int, MAX_MINIDRAWER>> m_mdRunTypeflxVec;
573 std::vector<std::array<int, MAX_MINIDRAWER>> m_mdPedLoflxVec;
574 std::vector<std::array<int, MAX_MINIDRAWER>> m_mdPedHiflxVec;
575 std::vector<std::array<int, MAX_MINIDRAWER>> m_mdRunflxVec;
576 std::vector<std::array<int, MAX_MINIDRAWER>> m_mdChargeflxVec;
577 std::vector<std::array<int, MAX_MINIDRAWER>> m_mdChargeTimeflxVec;
578 std::vector<std::array<int, MAX_MINIDRAWER>> m_mdCapacitorflxVec;
579
580 std::array<float, 4> m_LarEne{};
581 std::array<float, 3> m_BarEne{};
582 std::array<float, 3> m_ExtEne{};
583 std::array<float, 3> m_GapEne{};
584
585 std::array<unsigned int, 96> m_coincTrig1{};
586 std::array<unsigned int, 96> m_coincTrig2{};
587 std::array<unsigned int, 96> m_coincTrig3{};
588 std::array<unsigned int, 96> m_coincTrig4{};
589 std::array<unsigned int, 96> m_coincTrig5{};
590 std::array<unsigned int, 96> m_coincTrig6{};
591 std::array<unsigned int, 96> m_coincTrig7{};
592 std::array<unsigned int, 96> m_coincTrig8{};
593
602
603 std::map<unsigned int, unsigned int, std::less<unsigned int> > m_drawerMap; // map for frag IDs -> index
604 std::map<unsigned int, unsigned int, std::less<unsigned int> > m_drawerFlxMap; // map for frag IDs -> index for FELIX
605 typedef std::map<unsigned int, unsigned int, std::less<unsigned int> >::iterator drawerMap_iterator;
606
607 bool m_beamIdList[32]; // list of beam frag IDs to store in the ntuple
608
609 //run number
611 float m_eta{};
612 float m_theta{};
613
614 //MC truth info
615 std::vector<std::array<float, MAX_CHAN>> m_ehitVec;
616 std::vector<std::array<float, MAX_CHAN>> m_thitVec;
617 std::vector<std::array<float, MAX_CHAN>> m_ehitCnt;
618 std::vector<std::array<float, MAX_CHAN>> m_thitCnt;
619
621
624
625 // Identifiers
626 const TileID* m_tileID{nullptr};
627 const TileHWID* m_tileHWID{nullptr};
629
630 std::map<int, int> m_nSamplesInDrawerMap;
631 std::map<int, int> m_nSamplesFlxInDrawerMap;
632 std::vector<int> m_nSamplesInDrawer;
633 std::vector<int> m_nSamplesFlxInDrawer;
634 bool m_saveFelixData{false};
635
636
637
638};
639
640#endif
#define ATH_MSG_ERROR(x)
#define ATH_MSG_INFO(x)
std::vector< size_t > vec
Property holding a SG store/key/clid from which a ReadHandle is made.
Information produced by TileDQstatusAlg (used to be done by TileBeamInfoProvider).
AthAlgorithm(const std::string &name, ISvcLocator *pSvcLocator)
Constructor with parameters:
Property holding a SG store/key/clid from which a ReadHandle is made.
This AthConstConverter class provides conversion from ByteStream to TileBeamElemContainer.
Class that holds Data Quality fragment information and provides functions to extract the data quality...
Helper class for TileCal online (hardware) identifiers.
Definition TileHWID.h:49
Helper class for TileCal offline identifiers.
Definition TileID.h:67
Condition object to keep and provide Tile Calorimeter sampling fraction and number of photoelectrons.
std::vector< std::array< float, MAX_CHAN > > m_pedflxfitVec
std::vector< std::array< int, MAX_CHAN > > m_gainVec
std::vector< std::array< float, MAX_CHAN > > m_tfitcVec
SG::ReadHandleKey< TileHitVector > m_hitVectorKey
void ENETOTAL_clearBranch(void)
//////////////////////////////////////////////////////////////////////////// Clear Tree ENETOTAL vari...
StatusCode ntuple_initialize(const EventContext &ctx)
Alg standard interface function LF TODO: We could have a problem with the new feature introduced by S...
std::vector< std::array< float, MAX_CHAN > > m_chi2DspVec
Gaudi::Property< float > m_beamBN1Y1
Gaudi::Property< float > m_beamBC1Y2
StatusCode storeRawChannels(const EventContext &ctx, const SG::ReadHandleKey< TileRawChannelContainer > &containerKey, bool calibMode, std::vector< std::array< float, MAX_CHAN > > *eneVec, std::vector< std::array< float, MAX_CHAN > > *timeVec, std::vector< std::array< float, MAX_CHAN > > *chi2Vec, std::vector< std::array< float, MAX_CHAN > > *pedVec, bool saveDQstatus=false)
/ Fill ntuple with data from TRC.
Gaudi::Property< float > m_beamBC2Z_90
StatusCode initList(const EventContext &ctx)
Gaudi::Property< float > m_beamBC0Z
std::array< float, 4 > m_LarEne
std::array< unsigned int, 96 > m_coincTrig2
Gaudi::Property< float > m_beamBN2Y1
StatusCode storeBeamElements(const EventContext &ctx)
Gaudi::Property< int > m_nSamplesFlx
void DIGI_addBranch(void)
//////////////////////////////////////////////////////////////////////////// /Add Tree DIGI variables...
const TileHWID * m_tileHWID
std::vector< std::vector< int > > * m_btdc
std::array< unsigned int, 96 > m_coincTrig6
std::array< int, 16 > m_btdc1
std::vector< short > m_sizeVec
void FELIX_addBranch(void)
std::array< float, 8 > m_ecal
short CheckDMUParity(uint32_t header)
Parity of the DMU header should be odd.
void ADDER_addBranch(void)
//////////////////////////////////////////////////////////////////////////// /Add Tree ADDER variable...
std::array< float, 3 > m_ExtEne
std::vector< int > m_l1Type
Gaudi::Property< std::vector< std::string > > m_beamFragList
SG::ReadHandleKey< TileDQstatus > m_dqStatusKey
std::vector< int > m_nSamplesFlxInDrawer
void MUON_clearBranch(void)
//////////////////////////////////////////////////////////////////////////// Clear Tree MUON variable...
StatusCode initListFlx(const EventContext &ctx)
Gaudi::Property< Long64_t > m_treeSize
std::vector< std::array< uint32_t, MAX_DMU > > m_DMUheaderVec
std::vector< std::array< int, MAX_MINIDRAWER > > m_mdBcidflxVec
Gaudi::Property< float > m_beamBC1X2
std::vector< std::array< float, MAX_CHAN > > m_tDspVec
std::vector< int > m_frBCID
void ADDER_clearBranch(void)
//////////////////////////////////////////////////////////////////////////// Clear Tree ADDER variabl...
Gaudi::Property< std::string > m_ntupleID
void LASEROBJ_addBranch(void)
std::vector< int * > m_adder
SG::ReadHandleKey< TileRawChannelContainer > m_fitRawChannelContainerKey
std::vector< std::array< short, MAX_DMU > > m_ROD_DMUDstrobeErrVec
const TileCablingService * m_cabling
StatusCode storeLaser(const EventContext &ctx)
Gaudi::Property< float > m_beamBC1Z
SG::ReadHandleKey< TileRawChannelContainer > m_flxOptRawChannelContainerKey
std::vector< std::array< int, MAX_MINIDRAWER > > m_mdChargeflxVec
std::array< float, 3 > m_GapEne
void ENETOTAL_addBranch(void)
//////////////////////////////////////////////////////////////////////////// /Add Tree ENETOTAL varia...
std::vector< std::array< int, MAX_MINIDRAWER > > m_mdChargeTimeflxVec
Gaudi::Property< float > m_beamBC1Z_min90
std::vector< std::array< float, MAX_CHAN > > m_tflxoptVec
double m_las_D2_AlphaPed_RMS
Gaudi::Property< std::vector< std::string > > m_drawerList
Gaudi::Property< float > m_beamBC2X2
SG::ReadHandleKey< TileRawChannelContainer > m_fitcRawChannelContainerKey
Gaudi::Property< std::string > m_etaFileName
TileRawChannelUnit::UNIT m_rchUnit
Unit for TileRawChannels (ADC, pCb, MeV)
void QDC_addBranch(void)
//////////////////////////////////////////////////////////////////////////// /Add QDC variables to th...
std::vector< std::array< int, MAX_MINIDRAWER > > m_mdCapacitorflxVec
Gaudi::Property< unsigned int > m_nDrawersFlx
std::vector< std::array< float, MAX_CHAN > > m_chi2OptVec
void setupBeamChambersTB2016_2020(void)
double m_las_PMT1_Ped_RMS
Gaudi::Property< int > m_finalUnit
std::vector< std::array< float, MAX_CHAN > > m_thitCnt
std::vector< std::array< float, MAX_CHAN > > m_chi2cVec
SG::ReadHandleKey< TileRawChannelContainer > m_flxFitRawChannelContainerKey
Gaudi::Property< float > m_beamBN2Y2
std::vector< std::array< float, MAX_CHAN > > m_chi2flxfitVec
std::vector< std::array< int, MAX_MINIDRAWER > > m_mdPedLoflxVec
bool m_calibrateEnergyThisEvent
StatusCode storeHitContainer(const EventContext &ctx)
/ Fill Ntuple with MC truth info from simulation / Namely, hit energies corrected by photoelectron st...
ServiceHandle< ITHistSvc > m_thistSvc
Gaudi::Property< float > m_beamBC2Z_0
Gaudi::Property< bool > m_completeNtuple
Gaudi::Property< bool > m_calibrateEnergy
Gaudi::Property< float > m_beamBC2X1
std::vector< std::array< float, MAX_CHAN > > m_ehitVec
std::array< unsigned int, 96 > m_coincTrig7
std::vector< std::array< int, MAX_MINIDRAWER > > m_mdRunTypeflxVec
std::vector< short > m_sizeflxVec
void MUON_addBranch(void)
//////////////////////////////////////////////////////////////////////////// /Add MUON variables to t...
void setupBeamChambersBeforeTB2015(void)
short CheckDMUFormat(uint32_t header)
bit_31 of the DMU header must be 1 and bit_17 of the DMU header must be 0
Gaudi::Property< float > m_beamBC2Z
std::vector< std::array< float, MAX_CHAN > > m_pedflxoptVec
StatusCode storeCells(const EventContext &ctx)
std::vector< std::array< float, MAX_CHAN > > m_eflxoptVec
Gaudi::Property< float > m_beamBC1Y1
void setupPropertyDefaultValue(float property, float defaultValue, const std::string &name)
Gaudi::Property< float > m_radius
SG::ReadHandleKey< TileRawChannelContainer > m_dspRawChannelContainerKey
void setupBeamChambersTB2015(void)
std::array< int, 16 > m_btdc2
Gaudi::Property< std::vector< int > > m_drawerType
SG::ReadHandleKey< TileLaserObject > m_laserObjectKey
std::vector< int > m_nSamplesInDrawer
std::vector< std::array< int, MAX_MINIDRAWER > > m_mdRunflxVec
SG::ReadCondHandleKey< TileSamplingFraction > m_samplingFractionKey
Name of TileSamplingFraction in condition store.
std::vector< std::array< float, MAX_CHAN > > m_pedfitVec
TileTBAANtuple(const std::string &name, ISvcLocator *pSvcLocator)
void LASER_addBranch(void)
//////////////////////////////////////////////////////////////////////////// /Add Tree LASER variable...
std::vector< std::array< float, MAX_CHAN > > m_eOptVec
std::vector< std::array< int, MAX_DMU > > m_bcidVec
SG::ReadHandleKey< TileDigitsContainer > m_digitsContainerKey
std::vector< std::array< int, MAX_MINIDRAWER > > m_mdPedHiflxVec
std::vector< std::array< short, 2 > > m_ROD_DMUMaskVec
std::vector< std::array< int, MAX_DMU > > m_feCRCVec
std::vector< std::unique_ptr< int[]> > m_sampleVec
StatusCode initNTuple(void)
std::map< unsigned int, unsigned int, std::less< unsigned int > > m_drawerMap
double m_las_D3_AlphaPed_RMS
std::array< float, 14 > m_muBack
std::vector< int > m_l1ID
std::vector< std::array< float, MAX_CHAN > > m_tfitVec
SG::ReadHandleKey< TileHitContainer > m_hitContainerKey
std::vector< std::array< int, MAX_MINIDRAWER > > m_mdModuleflxVec
Gaudi::Property< float > m_beamBC0X1
std::vector< int > m_adderPayload
std::vector< std::array< float, MAX_CHAN > > m_chi2flxoptVec
std::vector< std::array< float, MAX_CHAN > > m_pedFlatVec
std::vector< std::array< short, MAX_DMU > > m_ROD_DMUSstrobeErrVec
int digiChannel2PMT(int fragType, int chan)
void HIT_clearBranch(void)
//////////////////////////////////////////////////////////////////////////// /Clear Tree HIT variable...
void TRIGGER_clearBranch(void)
//////////////////////////////////////////////////////////////////////////// Clear Tree TRIGGER varia...
void LASER_clearBranch(void)
//////////////////////////////////////////////////////////////////////////// Clear Tree LASER variabl...
Gaudi::Property< float > m_beamBN1X1
std::vector< std::array< short, MAX_DMU > > m_DMUformatErrVec
void CISPAR_addBranch(void)
//////////////////////////////////////////////////////////////////////////// /Add Tree CISPAR variabl...
void CISPAR_clearBranch(void)
//////////////////////////////////////////////////////////////////////////// Clear Tree CISPAR variab...
std::array< float, 16 > m_timeAdd
std::vector< std::array< short, MAX_DMU > > m_DMUDataparityErrVec
std::array< unsigned int, 96 > m_coincTrig1
std::map< int, int > m_nSamplesFlxInDrawerMap
std::vector< std::array< short, MAX_DMU > > m_DMUHeadparityErrVec
void clear_init_minus1(std::vector< T > &vec)
TileRawChannelUnit::UNIT m_dspUnit
Unit for TileRawChannels in DSP.
std::vector< std::array< float, MAX_CHAN > > m_efitcVec
std::array< uint32_t, 33 > m_qdc
Gaudi::Property< float > m_beamBN1X2
StatusCode storeDigitsFlx(const EventContext &ctx, const SG::ReadHandleKey< TileDigitsContainer > &containerKey)
std::vector< std::array< float, MAX_CHAN > > m_chi2FlatVec
Gaudi::Property< int > m_nSamples
std::vector< std::array< short, MAX_DMU > > m_DMUmemoryErrVec
std::vector< std::array< float, MAX_CHAN > > m_thitVec
void HIT_addBranch(void)
//////////////////////////////////////////////////////////////////////////// /Add Tree HIT variables ...
double m_las_D4_AlphaPed_RMS
Gaudi::Property< float > m_beamBC1X1
std::vector< int > m_evType
Gaudi::Property< float > m_beamBC1Z_90
Gaudi::Property< int > m_eventsPerFile
std::vector< std::array< float, MAX_CHAN > > m_pedfitcVec
std::vector< std::array< float, MAX_CHAN > > m_eflxfitVec
std::vector< std::array< short, MAX_DMU > > m_ROD_DMUmemoryErrVec
std::vector< short > m_ROD_GlobalCRCVec
std::vector< std::array< short, MAX_DMU > > m_ROD_DMUHeadformatErrVec
std::vector< std::array< int, 2 > > m_slinkCRCVec
std::array< int, 16 > m_tof
double m_las_D1_AlphaPed_RMS
Gaudi::Property< float > m_beamBN2X2
std::vector< std::array< float, MAX_CHAN > > m_eDspVec
std::array< float, 3 > m_BarEne
Gaudi::Property< unsigned int > m_nDrawers
Gaudi::Property< std::string > m_streamName
SG::ReadHandleKey< TileRawChannelContainer > m_flatRawChannelContainerKey
ToolHandle< TileRawChannelBuilderFlatFilter > m_adderFilterAlgTool
double m_las_PMT2_Ped_RMS
std::vector< std::array< float, MAX_CHAN > > m_efitVec
std::vector< std::array< float, MAX_CHAN > > m_ehitCnt
double m_las_D4_Alpha_RMS
Gaudi::Property< float > m_beamBC1Z_0
std::vector< std::array< float, MAX_CHAN > > m_eneVec
void FELIX_clearBranch(void)
std::array< float, 2 > m_muCalib
std::vector< std::array< int, MAX_DMU > > m_rodCRCVec
SG::ReadHandleKey< CaloCellContainer > m_cellContainerKey
virtual ~TileTBAANtuple()=default
void TRIGGER_addBranch(void)
///////////////////////////////////////////////////////////////////////////
std::vector< std::array< short, MAX_DMU > > m_ROD_DMUDataformatErrVec
Gaudi::Property< int > m_TBperiod
double m_las_D2_Alpha_RMS
std::array< unsigned int, 96 > m_coincTrig8
virtual StatusCode initialize() override
std::array< unsigned int, 96 > m_coincTrig4
std::array< float, 16 > m_eneAdd
StatusCode storeDigits(const EventContext &ctx, const SG::ReadHandleKey< TileDigitsContainer > &containerKey, const TileDQstatus *dqStatus=nullptr)
/ Fill Ntuple with info from TileDigits / Return true if the collection is empty, / which means that ...
std::array< int, 16 > m_scaler
void clear_init_zero(std::vector< std::array< T, N > > &vec)
Gaudi::Property< bool > m_bsInput
void ECAL_clearBranch(void)
//////////////////////////////////////////////////////////////////////////// Clear Tree ECAL variable...
void LASEROBJ_clearBranch(void)
std::array< float, 4 > m_lasExtra
void BEAM_clearBranch(void)
//////////////////////////////////////////////////////////////////////////// Clear Tree BEAM variable...
std::array< unsigned int, 96 > m_coincTrig3
double m_las_D1_Alpha_RMS
std::vector< std::array< float, MAX_CHAN > > m_tflxfitVec
void QDC_clearBranch(void)
//////////////////////////////////////////////////////////////////////////// Clear Tree QDC variables
std::vector< std::array< int, MAX_MINIDRAWER > > m_mdL1idflxVec
std::map< unsigned int, unsigned int, std::less< unsigned int > > m_drawerFlxMap
Gaudi::Property< float > m_beamBC0Y1
Gaudi::Property< float > m_beamBN1Y2
std::vector< std::array< short, MAX_DMU > > m_ROD_DMUBCIDVec
Gaudi::Property< float > m_beamBC2Z_min90
void ECAL_addBranch(void)
//////////////////////////////////////////////////////////////////////////// /Add ECAL variables to t...
std::vector< std::unique_ptr< int[]> > m_sampleflxVec
std::vector< int > m_evtflxVec
std::vector< std::array< short, MAX_DMU > > m_DMUparityErrVec
std::vector< std::array< short, MAX_DMU > > m_DMUDstrobeErrVec
Gaudi::Property< float > m_beamBC0Y2
void DIGI_clearBranch(void)
//////////////////////////////////////////////////////////////////////////// /Clear Tree DIGI variabl...
std::vector< std::array< int, MAX_CHAN > > m_gainflxVec
std::vector< std::array< short, MAX_DMU > > m_DMUSstrobeErrVec
void storeHit(const TileHit *hit, int fragType, int fragId, std::array< float, MAX_CHAN > &ehitVec, std::array< float, MAX_CHAN > &thitVec, const TileSamplingFraction *samplingFraction)
Gaudi::Property< float > m_beamBC0X2
bool m_beamIdList[32]
std::array< unsigned int, 96 > m_coincTrig5
Gaudi::Property< float > m_beamBN2X1
StatusCode ntuple_clear()
Gaudi::Property< bool > m_calibMode
SG::ReadHandleKey< TileDigitsContainer > m_digitsContainerFlxKey
void COINCBOARD_clearBranch(void)
//////////////////////////////////////////////////////////////////////////// Clear Tree COINCBOARD va...
std::vector< short > m_rodBCIDflxVec
void BEAM_addBranch(void)
//////////////////////////////////////////////////////////////////////////// /Add Tree BEAM variables...
Gaudi::Property< float > m_beamBC2Y2
double m_las_D3_Alpha_RMS
std::map< int, int > m_nSamplesInDrawerMap
std::map< unsignedint, unsignedint, std::less< unsignedint > >::iterator drawerMap_iterator
std::vector< std::array< float, MAX_CHAN > > m_timeVec
Gaudi::Property< bool > m_pmtOrder
SG::ReadHandleKey< TileRawChannelContainer > m_optRawChannelContainerKey
const TileID * m_tileID
std::vector< std::array< float, MAX_CHAN > > m_chi2Vec
SG::ReadHandleKey< TileBeamElemContainer > m_beamElemContainerKey
Gaudi::Property< float > m_beamBC2Y1
Gaudi::Property< std::vector< std::string > > m_rosName
std::vector< short > m_rodBCIDVec
std::vector< std::array< float, MAX_CHAN > > m_tOptVec
ToolHandle< TileCondToolEmscale > m_tileToolEmscale
std::vector< int > m_evBCID
std::vector< std::array< int, 2 > > m_dmuMaskVec
Gaudi::Property< bool > m_unpackAdder
void COINCBOARD_addBranch(void)
//////////////////////////////////////////////////////////////////////////// /Add Tree COINCBOARD var...
std::vector< std::array< float, MAX_CHAN > > m_pedOptVec
void clear_samples(std::vector< std::unique_ptr< int[]> > &vec, const std::vector< int > &nsamples, int nchan=MAX_CHAN)
Gaudi::Property< bool > m_useDspUnits
std::vector< int > m_evtVec
void checkIsPropertySetup(float property, const std::string &name)
StatusCode storeHitVector(const EventContext &ctx)
virtual StatusCode execute() override