ATLAS Offline Software
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 
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 // -----------------------------------------------------------------------------------------------------
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
57  // Write Handle Key
59 
62  // Write Handle Key
64 
67  // Write Handle Key
69 
70  // Read Cond Handle Key
73 
74  return StatusCode::SUCCESS;
75 }
76 
77 // -----------------------------------------------------------------------------------------------------
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 
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
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
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
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
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
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 
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
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
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>
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>
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
InDet::PRD_MultiTruthMaker::initialize
virtual StatusCode initialize()
Definition: PRD_MultiTruthMaker.cxx:43
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
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
SG::ReadHandle::cptr
const_pointer_type cptr()
Dereference the pointer.
PRD_MultiTruthMaker.h
SG::ReadHandle
Definition: StoreGate/StoreGate/ReadHandle.h:70
AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
Definition: AthCommonDataStore.h:145
InDet
Primary Vertex Finder.
Definition: VP1ErrorUtils.h:36
PRD_MultiTruthCollection
A PRD is mapped onto all contributing particles.
Definition: PRD_MultiTruthCollection.h:24
InDet::PRD_MultiTruthMaker::m_SCTClustersName
SG::ReadHandleKey< InDet::SiClusterContainer > m_SCTClustersName
Definition: PRD_MultiTruthMaker.h:41
InDet::PRD_MultiTruthMaker::PRD_MultiTruthMaker
PRD_MultiTruthMaker(const std::string &name, ISvcLocator *pSvcLocator)
Definition: PRD_MultiTruthMaker.cxx:16
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
InDetSimDataCollection
Definition: InDetSimDataCollection.h:25
InDet::PRD_MultiTruthMaker::m_SCTDetEleCollKey
SG::ReadCondHandleKey< InDetDD::SiDetectorElementCollection > m_SCTDetEleCollKey
Definition: PRD_MultiTruthMaker.h:54
InDet::PRD_MultiTruthMaker::m_simDataMapNameSCT
SG::ReadHandleKey< InDetSimDataCollection > m_simDataMapNameSCT
Definition: PRD_MultiTruthMaker.h:44
SG::VarHandleKey::key
const std::string & key() const
Return the StoreGate ID for the referenced object.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:141
AthReentrantAlgorithm
An algorithm that can be simultaneously executed in multiple threads.
Definition: AthReentrantAlgorithm.h:83
InDet::PRD_MultiTruthMaker::m_PixelClustersName
SG::ReadHandleKey< InDet::SiClusterContainer > m_PixelClustersName
Definition: PRD_MultiTruthMaker.h:40
InDet::PRD_MultiTruthMaker::execute
virtual StatusCode execute(const EventContext &ctx) const
Definition: PRD_MultiTruthMaker.cxx:85
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
InDet::PRD_MultiTruthMaker::m_simDataMapNameTRT
SG::ReadHandleKey< InDetSimDataCollection > m_simDataMapNameTRT
Definition: PRD_MultiTruthMaker.h:45
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
SG::WriteHandle::ptr
pointer_type ptr()
Dereference the pointer.
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
InDet::PRD_MultiTruthMaker::m_PRDTruthNameSCT
SG::WriteHandleKey< PRD_MultiTruthCollection > m_PRDTruthNameSCT
Definition: PRD_MultiTruthMaker.h:48
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
SG::VarHandleKey::initialize
StatusCode initialize(bool used=true)
If this object is used as a property, then this should be called during the initialize phase.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:103
SG::ReadHandle::isValid
virtual bool isValid() override final
Can the handle be successfully dereferenced?
InDet::PRD_MultiTruthMaker::m_PRDTruthTool
ToolHandle< InDet::IPRD_MultiTruthBuilder > m_PRDTruthTool
Definition: PRD_MultiTruthMaker.h:56
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:221
SG::CondHandleKey::initialize
StatusCode initialize(bool used=true)
InDet::PRD_MultiTruthMaker::m_TRTDriftCircleContainerName
SG::ReadHandleKey< InDet::TRT_DriftCircleContainer > m_TRTDriftCircleContainerName
Definition: PRD_MultiTruthMaker.h:42
SG::WriteHandle
Definition: StoreGate/StoreGate/WriteHandle.h:76
SG::WriteHandle::record
StatusCode record(std::unique_ptr< T > data)
Record a const object to the store.
InDet::PRD_MultiTruthMaker::m_simDataMapNamePixel
SG::ReadHandleKey< InDetSimDataCollection > m_simDataMapNamePixel
Definition: PRD_MultiTruthMaker.h:43
InDet::PRD_MultiTruthMaker::finalize
virtual StatusCode finalize()
Definition: PRD_MultiTruthMaker.cxx:78
PRD_MultiTruthCollection.h
InDet::PRD_MultiTruthMaker::m_PRDTruthNamePixel
SG::WriteHandleKey< PRD_MultiTruthCollection > m_PRDTruthNamePixel
Definition: PRD_MultiTruthMaker.h:47
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