ATLAS Offline Software
Loading...
Searching...
No Matches
HgtdClusteringTool.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3*/
4
7
8namespace ActsTrk {
9
11 const std::string& name,
12 const IInterface* parent)
13 : base_class(type, name, parent)
14 {}
15
17 {
18 ATH_MSG_INFO("Initializing HgtdClusteringTool...");
19
20 ATH_CHECK(detStore()->retrieve(m_hgtd_det_mgr, "HGTD"));
21 ATH_CHECK(m_hgtd_tdc_calib_tool.retrieve(EnableTool{m_use_altiroc_rdo.value()}));
22
23 return StatusCode::SUCCESS;
24 }
25
26 StatusCode HgtdClusteringTool::clusterize(const EventContext&,
27 const RawDataCollection& RDOs,
28 ClusterContainer& container) const
29 {
30 ATH_MSG_DEBUG("Clustering hits...");
31
32 // Fast insertion trick
33 std::size_t previousSize = container.size();
34 std::vector<xAOD::HGTDCluster*> toAdd;
35 toAdd.reserve(RDOs.size());
36 for (std::size_t i(0), n(RDOs.size()); i < n; ++i)
37 toAdd.push_back( new xAOD::HGTDCluster() );
38 container.insert(container.end(), toAdd.begin(), toAdd.end());
39
40 for (std::size_t i(0), n(RDOs.size()); i < n; ++i) {
41 const auto* rdo = RDOs[i];
42 Identifier rdo_id = rdo->identify();
43 const InDetDD::HGTD_DetectorElement* element = m_hgtd_det_mgr->getDetectorElement(rdo_id);
44
45 InDetDD::SiCellId si_cell_id = element->cellIdFromIdentifier(rdo_id);
46
47 InDetDD::SiLocalPosition si_pos = element->design().localPositionOfCell(si_cell_id);
48
49
50 Eigen::Matrix<float, 3, 1> loc_pos(si_pos.xPhi(), si_pos.xEta(),rdo->getTOA());
51 Eigen::Matrix<float, 3, 3> cov_matrix= Eigen::Matrix<float, 3, 3>::Zero();
52
53 float xWidth = 1.3;
54 float yWidth = 1.3;
55 cov_matrix(0,0) = xWidth * xWidth / 12; // i.e. Cov XX
56 cov_matrix(1,1) = yWidth * yWidth / 12; // i.e. Cov YY
57 float time_of_arrival_err = 0.035;
58 cov_matrix(2,2) = time_of_arrival_err * time_of_arrival_err; // i.e. Cov TT
59
60 std::vector<Identifier> rdo_list = {rdo_id};
61 std::vector<int> time_over_threshold = {static_cast<int>(rdo->getTOT())};
62
63 IdentifierHash id_hash = RDOs.identifierHash();
64
65 // Fill
66 xAOD::HGTDCluster* cluster = container[previousSize + i];
67 cluster->setMeasurement<3>(id_hash,loc_pos,cov_matrix);
68 cluster->setIdentifier(rdo_id.get_compact());
69 cluster->setRDOlist(std::move(rdo_list));
70 cluster->setToTlist(std::move(time_over_threshold));
71 }
72
73
74 return StatusCode::SUCCESS;
75 }
76
77 StatusCode HgtdClusteringTool::clusterize(const EventContext&,
79 ClusterContainer& container) const
80 {
81 ATH_MSG_DEBUG("Clustering hits...");
82
83 // Fast insertion trick
84 std::size_t previousSize = container.size();
85 std::vector<xAOD::HGTDCluster*> toAdd;
86 toAdd.reserve(RDOs.size());
87 for (std::size_t i(0), n(RDOs.size()); i < n; ++i)
88 toAdd.push_back( new xAOD::HGTDCluster() );
89 container.insert(container.end(), toAdd.begin(), toAdd.end());
90
91 for (std::size_t i(0), n(RDOs.size()); i < n; ++i) {
92 const auto* rdo = RDOs[i];
93 Identifier rdo_id = rdo->identify();
94 const InDetDD::HGTD_DetectorElement* element = m_hgtd_det_mgr->getDetectorElement(rdo_id);
95
96 InDetDD::SiCellId si_cell_id = element->cellIdFromIdentifier(rdo_id);
97
98 InDetDD::SiLocalPosition si_pos = element->design().localPositionOfCell(si_cell_id);
99
100 Eigen::Matrix<float, 3, 1> loc_pos(si_pos.xPhi(), si_pos.xEta(), m_hgtd_tdc_calib_tool->TOA2Time(element, rdo->getToA()));
101 Eigen::Matrix<float, 3, 3> cov_matrix= Eigen::Matrix<float, 3, 3>::Zero();
102
103 ATH_MSG_DEBUG("Recovered Time of Arrival: " << m_hgtd_tdc_calib_tool->TOA2Time(element, rdo->getToA()));
104
105 float xWidth = 1.3;
106 float yWidth = 1.3;
107 cov_matrix(0,0) = xWidth * xWidth / 12; // i.e. Cov XX
108 cov_matrix(1,1) = yWidth * yWidth / 12; // i.e. Cov YY
109 float time_of_arrival_err = 0.035;
110 cov_matrix(2,2) = time_of_arrival_err * time_of_arrival_err; // i.e. Cov TT
111
112 std::vector<Identifier> rdo_list = {rdo_id};
113 std::vector<int> time_over_threshold = {static_cast<int>(rdo->getToT())};
114
115 IdentifierHash id_hash = RDOs.identifierHash();
116
117 // Fill
118 xAOD::HGTDCluster* cluster = container[previousSize + i];
119 cluster->setMeasurement<3>(id_hash,loc_pos,cov_matrix);
120 cluster->setIdentifier(rdo_id.get_compact());
121 cluster->setRDOlist(std::move(rdo_list));
122 cluster->setToTlist(std::move(time_over_threshold));
123 }
124
125
126 return StatusCode::SUCCESS;
127 }
128
129} // namespace
130
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_INFO(x)
#define ATH_MSG_DEBUG(x)
const HGTD_DetectorManager * m_hgtd_det_mgr
ToolHandle< HGTD_TdcCalibrationTool > m_hgtd_tdc_calib_tool
virtual StatusCode clusterize(const EventContext &ctx, const RawDataCollection &RDOs, ClusterContainer &container) const override
virtual StatusCode initialize() override
HgtdClusteringTool(const std::string &type, const std::string &name, const IInterface *parent)
size_type size() const noexcept
Returns the number of elements in the collection.
const IdentifierHash & identifierHash() const
This is a "hash" representation of an Identifier.
value_type get_compact() const
Get the compact id.
Class to hold geometrical description of an HGTD detector element.
SiCellId cellIdFromIdentifier(const Identifier &identifier) const override final
SiCellId from Identifier.
const HGTD_ModuleDesign & design() const override final
access to the local description:
virtual SiLocalPosition localPositionOfCell(const SiCellId &cellId) const
readout or diode id -> position.
Identifier for the strip or pixel cell.
Definition SiCellId.h:29
Class to represent a position in the natural frame of a silicon sensor, for Pixel and SCT For Pixel: ...
double xPhi() const
position along phi direction:
double xEta() const
position along eta direction:
void setToTlist(const std::vector< int > &tots)
Sets the list of ToT of the channels building the cluster.
void setRDOlist(const std::vector< Identifier > &rdolist)
Sets the list of identifiers of the channels building the cluster.
void setMeasurement(const DetectorIDHashType idHash, MeasVector< N > locPos, MeasMatrix< N > locCov)
Sets IdentifierHash, local position and local covariance of the measurement.
void setIdentifier(const DetectorIdentType measId)
Sets the full Identifier of the measurement.
The AlignStoreProviderAlg loads the rigid alignment corrections and pipes them through the readout ge...
HGTDCluster_v1 HGTDCluster
Define the version of the pixel cluster class.
Definition HGTDCluster.h:13