ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
Simulation
Digitization
MCTruthSimAlgs
src
MergeCalibHitsTool.cxx
Go to the documentation of this file.
1
/*
2
Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
3
*/
4
5
#include "
MergeCalibHitsTool.h
"
6
7
#include "
CaloSimEvent/CaloCalibrationHit.h
"
8
#include "
CaloSimEvent/CaloCalibrationHitContainer.h
"
9
10
MergeCalibHitsTool::MergeCalibHitsTool
(
const
std::string&
type
,
11
const
std::string& name,
12
const
IInterface* parent) :
13
PileUpToolBase
(
type
, name, parent)
14
{
15
}
16
17
StatusCode
MergeCalibHitsTool::initialize
() {
18
ATH_MSG_VERBOSE
(
"initialize()"
);
19
20
ATH_CHECK
(
m_pMergeSvc
.retrieve());
21
22
// list of CaloCalibrationHit containers
23
if
(
m_oldFormat
) {
24
m_CalibrationHitContainer
.reserve(5);
25
m_CalibrationHitContainer
.push_back(
"LArCalibrationHitActive"
);
26
m_CalibrationHitContainer
.push_back(
"LArCalibrationHitDeadMaterial"
);
27
m_CalibrationHitContainer
.push_back(
"LArCalibrationHitInactive"
);
28
m_CalibrationHitContainer
.push_back(
"TileCalibrationCellHitCnt"
);
29
m_CalibrationHitContainer
.push_back(
"TileCalibrationDMHitCnt"
);
30
}
31
else
{
32
m_CalibrationHitContainer
.reserve(6);
33
m_CalibrationHitContainer
.push_back(
"LArCalibrationHitActive"
);
34
m_CalibrationHitContainer
.push_back(
"LArCalibrationHitDeadMaterial"
);
35
m_CalibrationHitContainer
.push_back(
"LArCalibrationHitInactive"
);
36
m_CalibrationHitContainer
.push_back(
"TileCalibHitActiveCell"
);
37
m_CalibrationHitContainer
.push_back(
"TileCalibHitInactiveCell"
);
38
m_CalibrationHitContainer
.push_back(
"TileCalibHitDeadMaterial"
);
39
}
40
m_outputContainers
.reserve(
m_CalibrationHitContainer
.size());
41
return
StatusCode::SUCCESS;
42
}
43
44
45
StatusCode
MergeCalibHitsTool::prepareEvent
(
const
EventContext&
/*ctx*/
,
unsigned
int
nInputEvents) {
46
ATH_MSG_VERBOSE
(
"Calling prepareEvent()"
);
47
ATH_MSG_VERBOSE
(
"prepareEvent: there are "
<< nInputEvents <<
" subevents in this event."
);
48
m_firstSubEvent
=
true
;
49
//clean up pointers from the last event
50
m_outputContainers
.clear();
51
for
(
unsigned
int
iHitContainer=0;iHitContainer<
m_CalibrationHitContainer
.size(); ++iHitContainer) {
52
m_outputContainers
.push_back(NULL);
53
}
54
return
StatusCode::SUCCESS;
55
}
56
57
StatusCode
MergeCalibHitsTool::processBunchXing
(
int
bunchXing,
58
SubEventIterator
bSubEvents,
59
SubEventIterator
eSubEvents)
60
{
61
SubEventIterator
iEvt(bSubEvents);
62
while
(iEvt != eSubEvents) {
63
// MergeCalibHitsTool should only write out the hits from the signal event.
64
if
(!
m_firstSubEvent
) {
65
ATH_MSG_VERBOSE
(
" Have already seen a SubEvent marked as Signal! Don't need to look at any others! "
);
66
break
;
67
}
68
69
if
( iEvt->type()==
xAOD::EventInfo_v1::PileUpType::Signal
) {
70
ATH_MSG_DEBUG
(
" Found the Signal event! "
);
71
}
72
else
{
73
// this is not the signal event, so we should skip it.
74
++iEvt;
75
continue
;
76
}
77
78
// loop over containers
79
for
(
unsigned
int
iHitContainer=0;iHitContainer<
m_CalibrationHitContainer
.size();++iHitContainer) {
80
ATH_MSG_VERBOSE
(
" Bunch Crossing: "
<<bunchXing <<
". Process CalibrationHit container "
<<
m_CalibrationHitContainer
[iHitContainer] );
81
const
CaloCalibrationHitContainer
* hitCont;
82
if
(!
m_pMergeSvc
->retrieveSingleSubEvtData(
m_CalibrationHitContainer
[iHitContainer], hitCont,
83
bunchXing, iEvt).isSuccess()){
84
ATH_MSG_VERBOSE
(
"CaloCalibrationHitContainer not found for event key "
<<
m_CalibrationHitContainer
[iHitContainer]);
85
continue
;
86
}
87
88
//if this is the first SubEvent for this Event then create the hitContainers;
89
if
(
m_firstSubEvent
) {
90
m_outputContainers
[iHitContainer] =
new
CaloCalibrationHitContainer
(
m_CalibrationHitContainer
[iHitContainer]);
91
}
92
// loop over this container, perform a deep brute-force copy
93
int
nhit=0;
94
ATH_MSG_VERBOSE
(
" Start loop over calibration hits of signal event "
);
95
CaloCalibrationHitContainer::const_iterator
calibhititer = hitCont->
begin
();
96
CaloCalibrationHitContainer::const_iterator
calibhitend = hitCont->
end
();
97
while
(calibhititer != calibhitend) {
98
++nhit;
99
m_outputContainers
[iHitContainer]->push_back(
new
CaloCalibrationHit
(**calibhititer));
100
++calibhititer;
101
}
// end of loop over calibration hits
102
103
ATH_MSG_DEBUG
(
" Number of hits found in this "
<<
m_CalibrationHitContainer
[iHitContainer]
104
<<
" container = "
<< nhit );
105
}
106
//we must have seen at least one event by now...
107
m_firstSubEvent
=
false
;
108
++iEvt;
109
}
110
111
return
StatusCode::SUCCESS;
112
}
113
StatusCode
MergeCalibHitsTool::mergeEvent
(
const
EventContext&
/*ctx*/
) {
114
for
(
unsigned
int
iHitContainer=0;iHitContainer<
m_CalibrationHitContainer
.size();++iHitContainer) {
115
if
(
m_outputContainers
[iHitContainer]==0 ) {
continue
; }
//don't bother recording unused containers!
116
if
(!(evtStore()->record(
m_outputContainers
[iHitContainer],
m_CalibrationHitContainer
[iHitContainer]).isSuccess())) {
117
ATH_MSG_ERROR
(
" Cannot record new calibration hit in overlayed event "
);
118
return
StatusCode::FAILURE;
119
}
120
}
// end of loop over the various types of calo calibration hits
121
return
StatusCode::SUCCESS;
122
}
123
124
StatusCode
MergeCalibHitsTool::processAllSubEvents
(
const
EventContext&
/*ctx*/
) {
125
ATH_MSG_VERBOSE
(
"processAllSubEvents()"
);
126
127
// loop over containers
128
for
(
unsigned
int
iHitContainer=0;iHitContainer<
m_CalibrationHitContainer
.size();iHitContainer++) {
129
130
ATH_MSG_DEBUG
(
" Process CalibrationHit container "
<<
m_CalibrationHitContainer
[iHitContainer] );
131
132
const
CaloCalibrationHitContainer
* hitCont;
133
134
// if container not there from pileupservice, do nothing
135
if
(!(
m_pMergeSvc
->retrieveOriginal(
m_CalibrationHitContainer
[iHitContainer]
136
,hitCont).isSuccess()) || !hitCont) {
137
ATH_MSG_DEBUG
(
" Cannot find calibrationHit from PileUp service "
);
138
continue
;
139
}
140
141
// create new container for overlayed event
142
CaloCalibrationHitContainer
* newContainer =
new
CaloCalibrationHitContainer
(
m_CalibrationHitContainer
[iHitContainer]);
143
144
// loop over this container, perform a deep brute-force copy
145
int
nhit=0;
146
ATH_MSG_DEBUG
(
" Start loop over calibration hits of signal event "
);
147
for
(
const
CaloCalibrationHit
*
hit
: *hitCont) {
148
nhit++;
149
newContainer->
push_back
(
new
CaloCalibrationHit
(*
hit
));
150
}
// end of loop over calibration hits
151
152
ATH_MSG_DEBUG
(
" Number of hits found in this container "
<< nhit );
153
154
// record new container in overlayed event
155
if
(!(evtStore()->record(newContainer,
m_CalibrationHitContainer
[iHitContainer]).isSuccess())) {
156
ATH_MSG_ERROR
(
" Cannot record new calibration hit in overlayed event "
);
157
return
StatusCode::FAILURE;
158
}
159
160
}
// end of loop over the various types of calo calibration hits
161
162
return
StatusCode::SUCCESS;
163
}
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_DEBUG
#define ATH_MSG_DEBUG(x)
Definition
AthMsgStreamMacros.h:29
CaloCalibrationHitContainer.h
CaloCalibrationHit.h
CaloCalibrationHitContainer
CaloCalibrationHitContainer
Definition
CaloSimEventTPCnv.cxx:17
SubEventIterator
std::vector< xAOD::EventInfo::SubEvent >::const_iterator SubEventIterator
Definition
IPileUpTool.h:22
hit
bool hit(const Container &ids, int pdgId)
Definition
JetIRCSafeLabelTool.cxx:64
MergeCalibHitsTool.h
AthenaHitsVector::end
const_iterator end() const
Definition
AthenaHitsVector.h:191
AthenaHitsVector::begin
const_iterator begin() const
Definition
AthenaHitsVector.h:187
AthenaHitsVector< CaloCalibrationHit >::const_iterator
boost::transform_iterator< make_const, typename CONT::const_iterator > const_iterator
Definition
AthenaHitsVector.h:105
AthenaHitsVector::push_back
void push_back(T *t)
Definition
AthenaHitsVector.h:201
CaloCalibrationHitContainer
Definition
CaloCalibrationHitContainer.h:25
CaloCalibrationHit
Class to store calorimeter calibration hit.
Definition
CaloCalibrationHit.h:24
MergeCalibHitsTool::prepareEvent
virtual StatusCode prepareEvent(const EventContext &ctx, unsigned int nInputEvents) override final
called before the subevts loop.
Definition
MergeCalibHitsTool.cxx:45
MergeCalibHitsTool::m_pMergeSvc
ServiceHandle< PileUpMergeSvc > m_pMergeSvc
Definition
MergeCalibHitsTool.h:54
MergeCalibHitsTool::m_oldFormat
Gaudi::Property< bool > m_oldFormat
Definition
MergeCalibHitsTool.h:53
MergeCalibHitsTool::mergeEvent
virtual StatusCode mergeEvent(const EventContext &ctx) override final
called at the end of the subevts loop.
Definition
MergeCalibHitsTool.cxx:113
MergeCalibHitsTool::initialize
virtual StatusCode initialize() override final
called before the event loop
Definition
MergeCalibHitsTool.cxx:17
MergeCalibHitsTool::processBunchXing
virtual StatusCode processBunchXing(int bunchXing, SubEventIterator bSubEvents, SubEventIterator eSubEvents) override final
called for each active bunch-crossing to process current SubEvents bunchXing is in ns
Definition
MergeCalibHitsTool.cxx:57
MergeCalibHitsTool::processAllSubEvents
virtual StatusCode processAllSubEvents(const EventContext &ctx) override final
return false if not interested in certain xing times (in ns) implemented by default in PileUpToolBase...
Definition
MergeCalibHitsTool.cxx:124
MergeCalibHitsTool::m_firstSubEvent
bool m_firstSubEvent
Definition
MergeCalibHitsTool.h:55
MergeCalibHitsTool::m_CalibrationHitContainer
std::vector< std::string > m_CalibrationHitContainer
Definition
MergeCalibHitsTool.h:57
MergeCalibHitsTool::m_outputContainers
std::vector< CaloCalibrationHitContainer * > m_outputContainers
Definition
MergeCalibHitsTool.h:56
MergeCalibHitsTool::MergeCalibHitsTool
MergeCalibHitsTool(const std::string &type, const std::string &name, const IInterface *parent)
Definition
MergeCalibHitsTool.cxx:10
PileUpToolBase::PileUpToolBase
PileUpToolBase(const std::string &type, const std::string &name, const IInterface *parent)
Definition
PileUpToolBase.cxx:7
xAOD::EventInfo_v1::Signal
@ Signal
The signal event.
Definition
EventInfo_v1.h:266
type
Generated on
for ATLAS Offline Software by
1.17.0