ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
LArCalorimeter
LArCalibUtils
src
LArCalibDigitMaker.cxx
Go to the documentation of this file.
1
/*
2
Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
3
*/
4
5
#include "
LArCalibUtils/LArCalibDigitMaker.h
"
6
#include "
LArRawEvent/LArDigitContainer.h
"
7
8
#include "GaudiKernel/ToolHandle.h"
9
10
#include "
xAODEventInfo/EventInfo.h
"
11
12
#include "CLHEP/Units/SystemOfUnits.h"
13
14
#include "
LArRawEvent/LArCalibDigitContainer.h
"
15
#include "
LArRawConditions/LArCalibParams.h
"
16
17
#include <algorithm>
18
#include <sstream>
19
20
21
using
CLHEP::ns;
22
23
24
LArCalibDigitMaker::LArCalibDigitMaker
(
const
std::string& name, ISvcLocator* pSvcLocator)
25
:
AthAlgorithm
(name, pSvcLocator),
26
m_nTrigger
(0)
27
{
28
declareProperty
(
"KeyList"
,
m_keylist
);
29
declareProperty
(
"DAC"
,
m_vDAC
);
30
declareProperty
(
"Delay"
,
m_vDelay
);
31
declareProperty
(
"Pattern"
,
m_vPattern
);
32
declareProperty
(
"nPattern"
,
m_nPatterns
);
33
declareProperty
(
"NTrigger"
,
m_nTrigger
);
34
declareProperty
(
"BoardIDs"
,
m_vBoardIDs
);
35
declareProperty
(
"DelayScale"
,
m_delayScale
=(25./240.)*ns);
36
declareProperty
(
"DontRun"
,
m_dontRun
=
false
);
//Put only Board configuration in DetectorStore
37
declareProperty
(
"isSC"
,
m_isSC
=
false
);
38
declareProperty
(
"skipDuplicates"
,
m_skipDuplicates
=
false
);
39
}
40
41
LArCalibDigitMaker::~LArCalibDigitMaker
()
42
{
//empty
43
}
44
45
StatusCode
LArCalibDigitMaker::initialize
()
46
{
47
48
//m_oldeventNb=-999;
49
m_eventNb
=-1;
50
51
ATH_MSG_DEBUG
(
"======== LArCalibDigitMaker Initialize ========"
);
52
// bool containsKeySC = false;
53
for
(
unsigned
int
i = 0; i <
m_keylist
.size(); ++i) {
54
if
(
m_keylist
.at(i).compare(
"SC"
) == 0) {
55
m_isSC
=
true
;
56
ATH_MSG_DEBUG
(
"======== LArCalibDigitMaker isSC is True ========"
);
57
}
58
}
59
ATH_CHECK
(
m_calibMapSCKey
.initialize(
m_isSC
) );
60
ATH_CHECK
(
m_calibMapKey
.initialize(!
m_isSC
) );
61
62
//if we have calib board params as jobOpts, set them
63
64
std::vector<std::vector<unsigned>> theseBoardIDs;
65
std::vector<std::vector<unsigned>> thesePatterns;
66
std::vector<std::vector<unsigned>> theseDACs;
67
theseBoardIDs.reserve(
m_vBoardIDs
.size());
68
thesePatterns.reserve(
m_vPattern
.size());
69
theseDACs.reserve(
m_vDAC
.size());
70
for
(
const
auto
& elem :
m_vBoardIDs
) {
71
theseBoardIDs.emplace_back(elem.begin(), elem.end());
72
}
73
for
(
const
auto
& elem :
m_vPattern
) {
74
thesePatterns.emplace_back(elem.begin(), elem.end());
75
}
76
for
(
const
auto
& elem :
m_vDAC
) {
77
theseDACs.emplace_back(elem.begin(), elem.end());
78
}
79
std::vector<unsigned> cutPattern;
80
81
auto
calibParams = std::make_unique<LArCalibParams>();
82
ATH_CHECK
( calibParams->initialize() );
83
for
(
long
unsigned
int
i=0; i < theseBoardIDs.size(); i++ ){
84
if
(!theseBoardIDs[i].
empty
() && !
m_vDAC
[i].
empty
() && !
m_vDelay
.empty() && !thesePatterns[i].empty() &&
m_nTrigger
) {
85
cutPattern = thesePatterns[i];
86
87
if
(thesePatterns[i].
size
() != ((
unsigned
int
)
m_nPatterns
[i])){
88
ATH_MSG_WARNING
(
"Going to change pattern length from "
<<thesePatterns[i].
size
()<<
" to "
<<
m_nPatterns
[i]);
89
cutPattern.resize(
m_nPatterns
[i]);
90
}
91
if
(thesePatterns[i].
size
()%4) {
92
ATH_MSG_ERROR
(
"Problem with jobOptions! One Pattern must conists of 4 32bit values! Pattern "
<< i );
93
return
StatusCode::FAILURE;
94
}
95
for
(
unsigned
id
: theseBoardIDs[i]) {
96
const
HWIdentifier
calibBoardHWID(
id
);
97
calibParams->set(calibBoardHWID,
m_nTrigger
,cutPattern,theseDACs[i],
m_vDelay
);
98
}
99
}
100
}
101
102
ATH_CHECK
(
detStore
()->record(std::move(calibParams),
"LArCalibParams"
) );
103
// End set calib board parameters
104
105
if
(
m_keylist
.empty()) {
106
m_keylist
.emplace_back(
"HIGH"
);
107
m_keylist
.emplace_back(
"MEDIUM"
);
108
m_keylist
.emplace_back(
"LOW"
);
109
}
110
111
ATH_MSG_DEBUG
(
"======== LArCalibDigitMaker initialize successfully ========"
);
112
return
StatusCode::SUCCESS;
113
}
114
115
116
StatusCode
LArCalibDigitMaker::execute
(
const
EventContext& ctx) {
117
118
if
(
m_dontRun
)
return
StatusCode::SUCCESS;
119
120
121
122
const
LArCalibLineMapping
*clcabling=
nullptr
;
123
if
(
m_isSC
) {
124
ATH_MSG_DEBUG
(
"======== LArCalibDigitMaker: using SC calib line map"
);
125
SG::ReadCondHandle<LArCalibLineMapping>
clHdl{
m_calibMapSCKey
, ctx};
126
clcabling=*clHdl;
127
}
else
{
128
SG::ReadCondHandle<LArCalibLineMapping>
clHdl{
m_calibMapKey
, ctx};
129
clcabling=*clHdl;
130
}
131
132
133
if
(!clcabling) {
134
ATH_MSG_ERROR
(
"Do not have cabling mapping from key "
<<
m_calibMapKey
.key() );
135
return
StatusCode::FAILURE;
136
}
137
138
const
unsigned
eventNb=(ctx.eventID().event_number())&0xffffff ;
// Are we sure?
139
140
ATH_MSG_DEBUG
(
"======== executing event "
<< eventNb <<
" ========"
);
141
142
const
LArCalibParams
* calibParams =
nullptr
;
143
ATH_CHECK
(
detStore
()->retrieve(calibParams,
"LArCalibParams"
) );
144
145
for
(
const
std::string& key :
m_keylist
) {
//Loop over all containers that are to be processed (e.g. different gains)
146
ATH_MSG_DEBUG
(
"Retrieving LArDigitContainer. Key= "
<< key );
147
const
LArDigitContainer
* larDigitCont;
148
StatusCode
sc
=
evtStore
()->retrieve(larDigitCont,key);
149
if
(
sc
.isFailure()) {
150
ATH_MSG_DEBUG
(
"Cannot read LArDigitContainer from StoreGate! key="
<< key );
151
continue
;
//Try next container
152
}
153
if
(larDigitCont->
empty
()) {
154
ATH_MSG_DEBUG
(
"LArDigitContainer with key '"
<< key <<
"' is empty. Ignored."
);
155
continue
;
//Try next container
156
}
157
if
(!
m_pulsedChids
.empty())
m_pulsedChids
.clear();
158
//Iterate over LArDigitContainer and build LArCalibDigitContainer
159
auto
calibDigitContainer=std::make_unique<LArCalibDigitContainer>();
160
calibDigitContainer->setDelayScale(
m_delayScale
);
161
for
(
const
LArDigit
* digit : *larDigitCont) {
162
HWIdentifier
chid=digit->hardwareID();
163
164
if
(std::find(
m_pulsedChids
.begin(),
m_pulsedChids
.end(), chid) !=
m_pulsedChids
.end()) {
165
if
(
m_skipDuplicates
)
continue
;
// skip this channel if it was already pulsed
166
m_pulsedChids
.push_back(chid);
167
}
168
169
//Get data members of LArDigit
170
const
std::vector<short>& samples=digit->samples();
171
CaloGain::CaloGain
gain=digit->gain();
172
const
std::vector<HWIdentifier>& calibChannelIDs=clcabling->
calibSlotLine
(chid);
173
if
(calibChannelIDs.empty()) {
174
continue
;
//Disconnected channel
175
}
176
//For the time being, I assume we are in H8 and have only one calib channel per FEB channel
177
std::vector<HWIdentifier>::const_iterator csl_it=calibChannelIDs.begin();
178
//Now the CalibBoard settings:
179
//Get data to build LArCalibDigit:
180
unsigned
ddac=calibParams->
DAC
(eventNb,*csl_it);
181
if
(ddac==
kmaxDAC
) {
182
ATH_MSG_WARNING
(
"SKIP "
<<chid<<
" "
<<gain<<
" "
<<ddac<<
" event no "
<<eventNb);
183
continue
;
184
}
185
uint16_t dac=ddac;
186
uint16_t
delay
=calibParams->
Delay
(eventNb,*csl_it);
187
188
bool
ispulsed=
false
;
189
for
(; csl_it != calibChannelIDs.end(); ++csl_it) {
190
if
(calibParams->
isPulsed
(eventNb,*csl_it)){
191
ispulsed=
true
;
192
break
;
193
}
194
}
195
//build LArCalibDigit:
196
if
( ispulsed ){
197
ATH_MSG_VERBOSE
(
"HERE!! "
<<chid<<
" "
<<gain<<
" "
<<dac<<
" "
<<
delay
<<
" "
<<ispulsed<<
" event no "
<<eventNb<<
" "
<<calibChannelIDs.size()<<
" calib lines, first is "
<<*csl_it);
198
199
}
200
LArCalibDigit
* calibDigit=
new
LArCalibDigit
(chid,gain, samples, dac,
delay
, ispulsed);
201
calibDigitContainer->push_back(calibDigit);
202
}
//End iteration to build calibDigits
203
ATH_MSG_DEBUG
(
"Trying to store with key "
<<key);
204
ATH_CHECK
(
evtStore
()->record(std::move(calibDigitContainer),key) );
205
ATH_MSG_DEBUG
(
"LArCalibDigitContainer recorded to StoreGate. key="
<< key );
206
}
//End loop key list
207
return
StatusCode::SUCCESS;
208
}
209
ATH_CHECK
#define ATH_CHECK
Evaluate an expression and check for errors.
Definition
AthCheckMacros.h:40
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition
AthMsgStreamMacros.h:33
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition
AthMsgStreamMacros.h:28
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition
AthMsgStreamMacros.h:32
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition
AthMsgStreamMacros.h:29
delay
double delay(std::size_t d)
Definition
JetTrigTimerTest.cxx:11
LArCalibDigitContainer.h
LArCalibDigitMaker.h
LArCalibParams.h
kmaxDAC
#define kmaxDAC
This class contains the LAr Calibration Board settings and a set of functions to decoded them.
Definition
LArCalibParams.h:26
LArDigitContainer.h
sc
static Double_t sc
Definition
LArPhysWaveHECTool.cxx:37
size
size_t size() const
Number of registered mappings.
empty
static const Attributes_t empty
Definition
XmlStreamer.cxx:16
AthAlgorithm::AthAlgorithm
AthAlgorithm(const std::string &name, ISvcLocator *pSvcLocator)
Constructor.
Definition
AthAlgorithm.cxx:10
AthCommonAlgorithm< Gaudi::Algorithm >::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T, V, H > &t)
Definition
AthCommonDataStore.h:145
AthCommonAlgorithm< Gaudi::Algorithm >::evtStore
ServiceHandle< StoreGateSvc > & evtStore()
Definition
AthCommonDataStore.h:85
AthCommonAlgorithm< Gaudi::Algorithm >::detStore
const ServiceHandle< StoreGateSvc > & detStore() const
Definition
AthCommonDataStore.h:95
DataVector::empty
bool empty() const noexcept
Returns true if the collection is empty.
HWIdentifier
Definition
HWIdentifier.h:13
LArCalibDigitMaker::m_vDelay
std::vector< unsigned > m_vDelay
Definition
LArCalibDigitMaker.h:29
LArCalibDigitMaker::m_vDAC
std::vector< std::vector< double > > m_vDAC
Definition
LArCalibDigitMaker.h:28
LArCalibDigitMaker::m_isSC
bool m_isSC
Definition
LArCalibDigitMaker.h:35
LArCalibDigitMaker::m_vPattern
std::vector< std::vector< double > > m_vPattern
Definition
LArCalibDigitMaker.h:27
LArCalibDigitMaker::m_skipDuplicates
bool m_skipDuplicates
Definition
LArCalibDigitMaker.h:37
LArCalibDigitMaker::m_eventNb
int m_eventNb
Definition
LArCalibDigitMaker.h:36
LArCalibDigitMaker::m_delayScale
double m_delayScale
Definition
LArCalibDigitMaker.h:33
LArCalibDigitMaker::~LArCalibDigitMaker
~LArCalibDigitMaker()
Definition
LArCalibDigitMaker.cxx:41
LArCalibDigitMaker::m_nPatterns
std::vector< int > m_nPatterns
Definition
LArCalibDigitMaker.h:30
LArCalibDigitMaker::m_dontRun
bool m_dontRun
Definition
LArCalibDigitMaker.h:34
LArCalibDigitMaker::m_nTrigger
unsigned m_nTrigger
Definition
LArCalibDigitMaker.h:32
LArCalibDigitMaker::m_calibMapKey
SG::ReadCondHandleKey< LArCalibLineMapping > m_calibMapKey
Definition
LArCalibDigitMaker.h:24
LArCalibDigitMaker::m_pulsedChids
std::vector< HWIdentifier > m_pulsedChids
Definition
LArCalibDigitMaker.h:38
LArCalibDigitMaker::LArCalibDigitMaker
LArCalibDigitMaker(const std::string &name, ISvcLocator *pSvcLocator)
Definition
LArCalibDigitMaker.cxx:24
LArCalibDigitMaker::m_keylist
std::vector< std::string > m_keylist
Definition
LArCalibDigitMaker.h:26
LArCalibDigitMaker::execute
StatusCode execute(const EventContext &ctx)
Execute method.
Definition
LArCalibDigitMaker.cxx:116
LArCalibDigitMaker::initialize
StatusCode initialize()
Definition
LArCalibDigitMaker.cxx:45
LArCalibDigitMaker::m_calibMapSCKey
SG::ReadCondHandleKey< LArCalibLineMapping > m_calibMapSCKey
Definition
LArCalibDigitMaker.h:25
LArCalibDigitMaker::m_vBoardIDs
std::vector< std::vector< double > > m_vBoardIDs
Definition
LArCalibDigitMaker.h:31
LArCalibDigit
Base class for LArDigits taken during calibration runs.
Definition
LArCalibDigit.h:29
LArCalibLineMapping
Definition
LArCalibLineMapping.h:17
LArCalibLineMapping::calibSlotLine
const std::vector< HWIdentifier > & calibSlotLine(const HWIdentifier id) const
Definition
LArCalibLineMapping.cxx:15
LArCalibParams
Definition
LArCalibParams.h:28
LArCalibParams::Delay
unsigned Delay(const unsigned event, const HWIdentifier calibLineID) const
Definition
LArCalibParams.cxx:112
LArCalibParams::isPulsed
bool isPulsed(const unsigned event, const HWIdentifier calibLineID) const
Definition
LArCalibParams.cxx:151
LArCalibParams::DAC
unsigned DAC(const unsigned event, const HWIdentifier calibLineID) const
Definition
LArCalibParams.cxx:131
LArDigitContainer
Container class for LArDigit.
Definition
LArDigitContainer.h:24
LArDigit
Liquid Argon digit base class.
Definition
LArDigit.h:25
SG::ReadCondHandle
Definition
ReadCondHandle.h:40
CaloGain::CaloGain
CaloGain
Definition
CaloGain.h:11
EventInfo.h
Generated on
for ATLAS Offline Software by
1.17.0