10#include "CLHEP/Geometry/Point3D.h"
31 declareInterface<IDataRetriever>(
this);
53 if (elements==
nullptr) {
55 return StatusCode::FAILURE;
62 return StatusCode::RECOVERABLE;
76 unsigned long NClusterTotal = 0;
77 for (
const auto SiClusterColl : *SiClusterCont.
cptr())
78 NClusterTotal += SiClusterColl->size();
81 DataVect x0; x0.reserve(NClusterTotal);
82 DataVect y0; y0.reserve(NClusterTotal);
83 DataVect z0; z0.reserve(NClusterTotal);
84 DataVect x1; x1.reserve(NClusterTotal);
85 DataVect y1; y1.reserve(NClusterTotal);
86 DataVect z1; z1.reserve(NClusterTotal);
88 DataVect ident; ident.reserve(NClusterTotal);
91 DataVect numBarcodes; numBarcodes.reserve(NClusterTotal);
92 DataVect barcodes; barcodes.reserve(NClusterTotal);
94 DataVect phiModule; phiModule.reserve(NClusterTotal);
95 DataVect etaModule; etaModule.reserve(NClusterTotal);
96 DataVect side; side.reserve(NClusterTotal);
99 for (
const auto SiClusterColl : *SiClusterCont.
cptr()){
102 if ( !
m_geo->SCTIDHelper()->is_sct(SiClusterColl->identify())) continue ;
107 for (
const auto cluster : *SiClusterColl){
113 ATH_MSG_DEBUG(
"Could not obtain Detector Element with ID " <<
id );
119 std::pair<Amg::Vector3D, Amg::Vector3D > ends = element->
endsOfStrip(pos);
136 phiModule.push_back(
DataType(
m_geo->SCTIDHelper()->phi_module(clusterId)));
137 etaModule.push_back(
DataType(
m_geo->SCTIDHelper()->eta_module(clusterId)));
138 side.push_back(
DataType(
m_geo->SCTIDHelper()->side(clusterId)));
144 unsigned long countBarcodes=0;
145 using iter = PRD_MultiTruthCollection::const_iterator;
146 std::pair<iter,iter> range = simClusterMap->equal_range(clusterId);
147 for (iter i = range.first; i != range.second; ++i) {
149 barcodes.push_back(
DataType(i->second.barcode()));
151 numBarcodes.push_back(
DataType(countBarcodes));
165 dataMap[
"width"] =
width;
166 dataMap[
"id"] = ident;
167 dataMap[
"phiModule"] = phiModule;
168 dataMap[
"etaModule"] = etaModule;
169 dataMap[
"side"] = side;
172 if ( numBarcodes.size() > 0 ){
174 dataMap[
"numBarcodes"] = numBarcodes;
176 std::string bctag =
"barcodes multiple=\""+
DataType(barcodes.size()/
double(numBarcodes.size())).toString()+
"\"";
177 dataMap[bctag] = barcodes;
184 return FormatTool->AddToEvent(
dataTypeName(),
"", &dataMap);
193 return m_geo.retrieve();
#define ATH_CHECK
Evaluate an expression and check for errors.
defines an "iterator" over instances of a given type in StoreGateSvc
This is an Identifier helper class for the SCT subdetector.
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T, V, H > &t)
This is a "hash" representation of an Identifier.
value_type get_compact() const
Get the compact id.
Class to hold the SiDetectorElement objects to be put in the detector store.
const SiDetectorElement * getDetectorElement(const IdentifierHash &hash) const
Class to hold geometrical description of a silicon detector element.
std::pair< Amg::Vector3D, Amg::Vector3D > endsOfStrip(const Amg::Vector2D &position) const
Special method for SCT to retrieve the two ends of a "strip" Returned coordinates are in global frame...
Class to represent a position in the natural frame of a silicon sensor, for Pixel and SCT For Pixel: ...
Amg::Vector2D localPosition(const HepGeom::Point3D< double > &globalPosition) const
transform a global position into a 2D local position (reconstruction frame) (inline)
SG::ReadHandleKey< InDet::SiClusterContainer > m_SiClusterCollName
StoreGate key for the SiClusterContainer for SCT.
SG::ReadCondHandleKey< InDetDD::SiDetectorElementCollection > m_SCTDetEleCollKey
Condition object key of SiDetectorElementCollection for SCT.
SiClusterRetriever(const std::string &type, const std::string &name, const IInterface *parent)
Standard Constructor.
virtual StatusCode initialize()
initialize
bool m_useSiTruthMap
StoreGate key for the PRD_MultiTruthCollection for SCT.
virtual StatusCode retrieve(ToolHandle< IFormatTool > &FormatTool)
Retrieve all the data.
const ToolHandle< IInDetGeoModelTool > m_geo
A tool handle to the geo model tool.
virtual std::string dataTypeName() const
Return the name of the data type.
SG::ReadHandleKey< PRD_MultiTruthCollection > m_SiTruthMapName
const_pointer_type retrieve()
virtual bool isValid() override final
Can the handle be successfully dereferenced?
const_pointer_type cptr()
Dereference the pointer.
Eigen::Matrix< double, 3, 1 > Vector3D
This header is shared inbetween the C-style server thread and the C++ Athena ServerSvc.
std::map< std::string, DataVect > DataMap
std::vector< DataType > DataVect
Defines a map with a key and a vector of DataType objects e.g.
SG::ReadCondHandle< T > makeHandle(const SG::ReadCondHandleKey< T > &key, const EventContext &ctx=Gaudi::Hive::currentContext())