ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
InnerDetector
InDetTruth
InDetTruthAlgs
src
PRD_MultiTruthMaker.cxx
Go to the documentation of this file.
1
/*
2
Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
3
*/
4
5
// Algorithm producing truth info for PrepRawData, keeping all MC particles contributed to a PRD.
6
// A. Gaponenko, 2006
7
8
#include "
InDetTruthAlgs/PRD_MultiTruthMaker.h
"
9
#include "
TrkTruthData/PRD_MultiTruthCollection.h
"
10
11
#include <iterator>
12
13
namespace
InDet
{
14
15
//================================================================
16
PRD_MultiTruthMaker::PRD_MultiTruthMaker
(
const
std::string &name, ISvcLocator *pSvcLocator) :
17
AthReentrantAlgorithm
(name,pSvcLocator),
18
m_PixelClustersName
(
"PixelClusters"
),
19
m_SCTClustersName
(
"SCT_Clusters"
),
20
m_TRTDriftCircleContainerName
(
"TRT_DriftCircles"
),
21
m_simDataMapNamePixel
(
"PixelSDO_Map"
),
22
m_simDataMapNameSCT
(
"SCT_SDO_Map"
),
23
m_simDataMapNameTRT
(
"TRT_SDO_Map"
),
24
m_PRDTruthNamePixel
(
"PRD_MultiTruthPixel"
),
25
m_PRDTruthNameSCT
(
"PRD_MultiTruthSCT"
),
26
m_PRDTruthNameTRT
(
"PRD_MultiTruthTRT"
),
27
m_PRDTruthTool
(
"InDet::PRD_MultiTruthBuilder"
)
28
{
29
declareProperty
(
"PixelClusterContainerName"
,
m_PixelClustersName
);
30
declareProperty
(
"SCTClusterContainerName"
,
m_SCTClustersName
);
31
declareProperty
(
"TRTDriftCircleContainerName"
,
m_TRTDriftCircleContainerName
);
32
declareProperty
(
"SimDataMapNamePixel"
,
m_simDataMapNamePixel
);
33
declareProperty
(
"SimDataMapNameSCT"
,
m_simDataMapNameSCT
);
34
declareProperty
(
"SimDataMapNameTRT"
,
m_simDataMapNameTRT
);
35
declareProperty
(
"TruthNamePixel"
,
m_PRDTruthNamePixel
);
36
declareProperty
(
"TruthNameSCT"
,
m_PRDTruthNameSCT
);
37
declareProperty
(
"TruthNameTRT"
,
m_PRDTruthNameTRT
);
38
declareProperty
(
"PRDTruthTool"
,
m_PRDTruthTool
);
39
}
40
41
// Initialize method
42
// -----------------------------------------------------------------------------------------------------
43
StatusCode
PRD_MultiTruthMaker::initialize
()
44
{
45
ATH_MSG_INFO
(
"PRD_MultiTruthMaker::initialize()"
);
46
47
if
(
m_PRDTruthTool
.retrieve().isFailure() ) {
48
ATH_MSG_ERROR
(
"Failed to retrieve tool "
<<
m_PRDTruthTool
);
49
return
StatusCode::FAILURE;
50
}
else
{
51
ATH_MSG_INFO
(
"Retrieved tool "
<<
m_PRDTruthTool
);
52
}
53
54
// Read Handle Key
55
ATH_CHECK
(
m_PixelClustersName
.initialize(not
m_PixelClustersName
.key().empty()));
56
ATH_CHECK
(
m_simDataMapNamePixel
.initialize(not
m_simDataMapNamePixel
.key().empty()));
57
// Write Handle Key
58
ATH_CHECK
(
m_PRDTruthNamePixel
.initialize(not
m_PRDTruthNamePixel
.key().empty()));
59
60
ATH_CHECK
(
m_SCTClustersName
.initialize(not
m_SCTClustersName
.key().empty()));
61
ATH_CHECK
(
m_simDataMapNameSCT
.initialize(not
m_simDataMapNameSCT
.key().empty()));
62
// Write Handle Key
63
ATH_CHECK
(
m_PRDTruthNameSCT
.initialize(not
m_PRDTruthNameSCT
.key().empty()));
64
65
ATH_CHECK
(
m_TRTDriftCircleContainerName
.initialize(not
m_TRTDriftCircleContainerName
.key().empty()));
66
ATH_CHECK
(
m_simDataMapNameTRT
.initialize(not
m_simDataMapNameTRT
.key().empty()));
67
// Write Handle Key
68
ATH_CHECK
(
m_PRDTruthNameTRT
.initialize(not
m_PRDTruthNameTRT
.key().empty()));
69
70
// Read Cond Handle Key
71
ATH_CHECK
(
m_pixelDetEleCollKey
.initialize(not
m_pixelDetEleCollKey
.key().empty()));
72
ATH_CHECK
(
m_SCTDetEleCollKey
.initialize(not
m_SCTDetEleCollKey
.key().empty()));
73
74
return
StatusCode::SUCCESS;
75
}
76
77
// -----------------------------------------------------------------------------------------------------
78
StatusCode
PRD_MultiTruthMaker::finalize
()
79
{
80
ATH_MSG_DEBUG
(
"PRD_MultiTruthMaker finalized"
);
81
return
StatusCode::SUCCESS;
82
}
83
84
// -----------------------------------------------------------------------------------------------------
85
StatusCode
PRD_MultiTruthMaker::execute
(
const
EventContext &ctx)
const
{
86
87
ATH_MSG_DEBUG
(
"PRD_MultiTruthMaker::execute()"
);
88
89
// @TODO move below each to a tool just dealing with Pixel, SCT or TRT.
90
// work on Pixels
91
if
(!
m_PixelClustersName
.key().empty() && !
m_simDataMapNamePixel
.key().empty() && !
m_PRDTruthNamePixel
.key().empty()) {
92
93
SG::ReadHandle<InDet::SiClusterContainer>
prdContainer(
m_PixelClustersName
,ctx);
94
if
(!prdContainer.
isValid
()) {
95
ATH_MSG_ERROR
(
"Pixel Cluster Container "
<<
m_PixelClustersName
.key() <<
" NOT found"
);
96
return
StatusCode::FAILURE;
97
}
98
ATH_MSG_DEBUG
(
"Pixel Cluster Container "
<<
m_PixelClustersName
.key() <<
" found"
);
99
100
// Retrieve the Pixel SDO map for this event
101
SG::ReadHandle<InDetSimDataCollection>
simDataMap(
m_simDataMapNamePixel
,ctx);
102
if
(!simDataMap.
isValid
()) {
103
ATH_MSG_ERROR
(
"Could NOT find the InDetSimDataPixel "
<<
m_simDataMapNamePixel
.key() <<
" map."
);
104
return
StatusCode::FAILURE;
105
}
106
ATH_MSG_DEBUG
(
"Found InDetSimDataPixel "
<<
m_simDataMapNamePixel
.key() <<
", do association"
);
107
108
// Create and fill the PRD truth structure
109
SG::WriteHandle<PRD_MultiTruthCollection>
prdt_pixels(
m_PRDTruthNamePixel
,ctx);
110
if
(prdt_pixels.
record
(std::make_unique<PRD_MultiTruthCollection>()).isFailure()) {
111
ATH_MSG_ERROR
(
"PRD truth structure '"
<<
m_PRDTruthNamePixel
.key() <<
"' could not be registered in StoreGate !"
);
112
return
StatusCode::FAILURE;
113
}
114
addPRDCollections
(&(*prdt_pixels), prdContainer->begin(), prdContainer->end(), &(*simDataMap),
true
);
115
ATH_MSG_DEBUG
(
"PRD truth structure '"
<<
m_PRDTruthNamePixel
.key() <<
"' is registered in StoreGate, size="
<<prdt_pixels->size());
116
}
117
118
// work on SCT
119
if
(!
m_SCTClustersName
.key().empty() && !
m_simDataMapNameSCT
.key().empty() && !
m_PRDTruthNameSCT
.key().empty()) {
120
// Retrieve the SCT SDO map for this event
121
SG::ReadHandle<InDetSimDataCollection>
simDataMap(
m_simDataMapNameSCT
,ctx);
122
if
(not simDataMap.
isValid
()) {
123
ATH_MSG_ERROR
(
"Could NOT find the InDetSimDataSCT "
<<
m_simDataMapNameSCT
.key() <<
" map"
);
124
return
StatusCode::FAILURE;
125
}
126
127
ATH_MSG_DEBUG
(
"Found InDetSimDataSCT "
<<
m_simDataMapNameSCT
.key() <<
", do association"
);
128
// retrieve SCT cluster container
129
SG::ReadHandle<InDet::SiClusterContainer>
prdContainer(
m_SCTClustersName
,ctx);
130
if
(not prdContainer.
isValid
()){
131
ATH_MSG_ERROR
(
"SCT Cluster Container "
<<
m_SCTClustersName
.key() <<
" NOT found"
);
132
return
StatusCode::FAILURE;
133
}
134
ATH_MSG_DEBUG
(
"SCT Cluster Container "
<<
m_SCTClustersName
.key() <<
" found"
);
135
136
// Create and fill the PRD truth structure
137
SG::WriteHandle<PRD_MultiTruthCollection>
prdt_sct(
m_PRDTruthNameSCT
, ctx);
138
ATH_CHECK
(prdt_sct.
record
(std::make_unique<PRD_MultiTruthCollection>()));
139
addPRDCollections
(prdt_sct.
ptr
(), prdContainer->begin(), prdContainer->end(), simDataMap.
cptr
(),
false
);
140
ATH_MSG_DEBUG
(
"PRD truth structure '"
<<
m_PRDTruthNameSCT
.key() <<
"' is registered in StoreGate, size="
<<prdt_sct->size());
141
}
142
143
// work on TRT
144
if
(!
m_TRTDriftCircleContainerName
.key().empty() && !
m_simDataMapNameTRT
.key().empty() && !
m_PRDTruthNameTRT
.key().empty()) {
145
146
SG::ReadHandle<InDet::TRT_DriftCircleContainer>
trtContainer(
m_TRTDriftCircleContainerName
,ctx);
147
if
(!trtContainer.
isValid
()){
148
ATH_MSG_ERROR
(
"TRT DriftCircle Container "
<<
m_TRTDriftCircleContainerName
.key() <<
" NOT found"
);
149
return
StatusCode::FAILURE;
150
}
151
ATH_MSG_DEBUG
(
"TRT DriftCirlce Container "
<<
m_TRTDriftCircleContainerName
.key() <<
" found"
);
152
153
// Retrieve the TRT SDO map for this event
154
SG::ReadHandle<InDetSimDataCollection>
simDataMap(
m_simDataMapNameTRT
,ctx);
155
if
(!simDataMap.
isValid
()) {
156
ATH_MSG_ERROR
(
"Could NOT find the InDetSimDataTRT "
<<
m_simDataMapNameTRT
.key() <<
" map"
);
157
return
StatusCode::FAILURE;
158
}
159
ATH_MSG_DEBUG
(
"Found InDetSimDataTRT "
<<
m_simDataMapNameTRT
.key() <<
" , do association"
);
160
161
// Fill the PRD truth structure
162
SG::WriteHandle<PRD_MultiTruthCollection>
prdt_trt(
m_PRDTruthNameTRT
,ctx);
163
if
(prdt_trt.
record
(std::make_unique<PRD_MultiTruthCollection>()).isFailure()) {
164
ATH_MSG_ERROR
(
"PRD truth structure '"
<<
m_PRDTruthNameTRT
.key() <<
"' could not be registered in StoreGate !"
);
165
return
StatusCode::FAILURE;
166
}
167
addPRDCollections
(&(*prdt_trt), trtContainer->begin(), trtContainer->end(), &(*simDataMap),
false
);
168
ATH_MSG_DEBUG
(
"PRD truth structure '"
<<
m_PRDTruthNameTRT
.key() <<
"' is registered in StoreGate, size="
<<prdt_trt->size());
169
}
170
171
return
StatusCode::SUCCESS;
172
}
173
174
// -----------------------------------------------------------------------------------------------------
175
template
<
class
PRD_Container_Iterator>
176
void
PRD_MultiTruthMaker::addPRDCollections
(
PRD_MultiTruthCollection
* prdTruth,
177
PRD_Container_Iterator collections_begin,
178
PRD_Container_Iterator collections_end,
179
const
InDetSimDataCollection
* simDataMap,
180
bool
pixels)
const
181
{
182
for
(PRD_Container_Iterator colNext=collections_begin; colNext != collections_end; ++colNext) {
183
addPRDRange
(prdTruth, (*colNext)->begin(), (*colNext)->end(), simDataMap, pixels);
184
}
185
}
186
187
// -----------------------------------------------------------------------------------------------------
188
// Adds PRDs in the range to prdTruth.
189
template
<
class
PRD_Collection_Iterator>
190
void
PRD_MultiTruthMaker::addPRDRange
(
PRD_MultiTruthCollection
* prdTruth,
191
PRD_Collection_Iterator range_begin,
192
PRD_Collection_Iterator range_end,
193
const
InDetSimDataCollection
* simDataMap,
194
bool
pixels)
const
195
{
196
for
(PRD_Collection_Iterator nextDatum = range_begin; nextDatum != range_end; nextDatum++){
197
m_PRDTruthTool
->addPrepRawDatum(prdTruth, *nextDatum, simDataMap, pixels);
198
}
199
}
200
201
202
}
// namespace InDet
203
204
//================================================================
205
//EOF
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:32
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition
AthMsgStreamMacros.h:30
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition
AthMsgStreamMacros.h:28
PRD_MultiTruthCollection.h
PRD_MultiTruthMaker.h
AthCommonAlgorithm< Gaudi::Algorithm >::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T, V, H > &t)
Definition
AthCommonDataStore.h:145
AthReentrantAlgorithm
An algorithm that can be simultaneously executed in multiple threads.
Definition
AthReentrantAlgorithm.h:74
InDetSimDataCollection
Definition
InDetSimDataCollection.h:25
InDet::PRD_MultiTruthMaker::addPRDCollections
void addPRDCollections(PRD_MultiTruthCollection *prdTruth, PRD_Container_Iterator collections_begin, PRD_Container_Iterator collections_end, const InDetSimDataCollection *simDataMap, bool pixels) const
Definition
PRD_MultiTruthMaker.cxx:176
InDet::PRD_MultiTruthMaker::execute
virtual StatusCode execute(const EventContext &ctx) const
Definition
PRD_MultiTruthMaker.cxx:85
InDet::PRD_MultiTruthMaker::finalize
virtual StatusCode finalize()
Definition
PRD_MultiTruthMaker.cxx:78
InDet::PRD_MultiTruthMaker::m_simDataMapNamePixel
SG::ReadHandleKey< InDetSimDataCollection > m_simDataMapNamePixel
Definition
PRD_MultiTruthMaker.h:43
InDet::PRD_MultiTruthMaker::m_SCTClustersName
SG::ReadHandleKey< InDet::SiClusterContainer > m_SCTClustersName
Definition
PRD_MultiTruthMaker.h:41
InDet::PRD_MultiTruthMaker::addPRDRange
void addPRDRange(PRD_MultiTruthCollection *prdTruth, PRD_Collection_Iterator range_begin, PRD_Collection_Iterator range_end, const InDetSimDataCollection *simDataMap, bool pixels) const
Definition
PRD_MultiTruthMaker.cxx:190
InDet::PRD_MultiTruthMaker::m_PixelClustersName
SG::ReadHandleKey< InDet::SiClusterContainer > m_PixelClustersName
Definition
PRD_MultiTruthMaker.h:40
InDet::PRD_MultiTruthMaker::m_TRTDriftCircleContainerName
SG::ReadHandleKey< InDet::TRT_DriftCircleContainer > m_TRTDriftCircleContainerName
Definition
PRD_MultiTruthMaker.h:42
InDet::PRD_MultiTruthMaker::PRD_MultiTruthMaker
PRD_MultiTruthMaker(const std::string &name, ISvcLocator *pSvcLocator)
Definition
PRD_MultiTruthMaker.cxx:16
InDet::PRD_MultiTruthMaker::m_SCTDetEleCollKey
SG::ReadCondHandleKey< InDetDD::SiDetectorElementCollection > m_SCTDetEleCollKey
Definition
PRD_MultiTruthMaker.h:54
InDet::PRD_MultiTruthMaker::m_simDataMapNameTRT
SG::ReadHandleKey< InDetSimDataCollection > m_simDataMapNameTRT
Definition
PRD_MultiTruthMaker.h:45
InDet::PRD_MultiTruthMaker::m_PRDTruthTool
ToolHandle< InDet::IPRD_MultiTruthBuilder > m_PRDTruthTool
Definition
PRD_MultiTruthMaker.h:56
InDet::PRD_MultiTruthMaker::m_PRDTruthNameSCT
SG::WriteHandleKey< PRD_MultiTruthCollection > m_PRDTruthNameSCT
Definition
PRD_MultiTruthMaker.h:48
InDet::PRD_MultiTruthMaker::initialize
virtual StatusCode initialize()
Definition
PRD_MultiTruthMaker.cxx:43
InDet::PRD_MultiTruthMaker::m_simDataMapNameSCT
SG::ReadHandleKey< InDetSimDataCollection > m_simDataMapNameSCT
Definition
PRD_MultiTruthMaker.h:44
InDet::PRD_MultiTruthMaker::m_pixelDetEleCollKey
SG::ReadCondHandleKey< InDetDD::SiDetectorElementCollection > m_pixelDetEleCollKey
Definition
PRD_MultiTruthMaker.h:52
InDet::PRD_MultiTruthMaker::m_PRDTruthNameTRT
SG::WriteHandleKey< PRD_MultiTruthCollection > m_PRDTruthNameTRT
Definition
PRD_MultiTruthMaker.h:49
InDet::PRD_MultiTruthMaker::m_PRDTruthNamePixel
SG::WriteHandleKey< PRD_MultiTruthCollection > m_PRDTruthNamePixel
Definition
PRD_MultiTruthMaker.h:47
PRD_MultiTruthCollection
A PRD is mapped onto all contributing particles.
Definition
PRD_MultiTruthCollection.h:24
SG::ReadHandle
Definition
StoreGate/StoreGate/ReadHandle.h:67
SG::ReadHandle::isValid
virtual bool isValid() override final
Can the handle be successfully dereferenced?
SG::ReadHandle::cptr
const_pointer_type cptr()
Dereference the pointer.
SG::WriteHandle
Definition
StoreGate/StoreGate/WriteHandle.h:73
SG::WriteHandle::record
StatusCode record(std::unique_ptr< T > data)
Record a const object to the store.
SG::WriteHandle::ptr
pointer_type ptr()
Dereference the pointer.
InDet
Primary Vertex Finder.
Definition
VP1ErrorUtils.h:36
Generated on
for ATLAS Offline Software by
1.17.0