28 using size_type = traccc::edm::silicon_cell_collection::buffer::size_type;
43 size_type nPix = 0, nStrip = 0;
47 for (PixelRawDataContainerProxy module_rdo_container_proxy : pixel_rdo_container_collection_proxy) {
48 if (!module_rdo_container_proxy.empty()) {
49 nPix += module_rdo_container_proxy.size();
56 for (StripRawDataContainerProxy module_rdo_container_proxy : strip_rdo_container_collection_proxy) {
57 if (!module_rdo_container_proxy.empty()) {
58 for (StripRawDataProxy strip_rdo: module_rdo_container_proxy) {
59 if (!
m_common.passTiming(strip_rdo.getTimeBin())) {
63 nStrip += strip_rdo.getGroupSize();
68 size_type
const nCells = nPix + nStrip;
71 auto host_copy =
m_common.m_copiesTool->hostCopy(ctx);
72 traccc::edm::silicon_cell_collection::buffer traccc_cells_host_buffer{
74 host_copy->setup(traccc_cells_host_buffer)->wait();
77 ATH_MSG_DEBUG(
"no input hits — writing empty cell collection");
79 return StatusCode::SUCCESS;
83 traccc::edm::silicon_cell_collection::device cells{traccc_cells_host_buffer};
88 size_type cell_index = 0;
89 detray_id_type current_geometry_id = detray::geometry::identifier{}.value();
90 unsigned int current_det_cond_idx = -1;
93 for (PixelRawDataContainerProxy module_rdo_container_proxy : pixel_rdo_container_collection_proxy) {
94 if (module_rdo_container_proxy.empty()) {
97 IdentifierHash const module_id_hash(module_rdo_container_proxy.identifyHash());
99 std::optional<detray_id_type>
const detray_geometry_id_opt =
m_common.m_geoIdMapping->athenaToDetray(module_id);
100 if (!detray_geometry_id_opt.has_value()) {
101 ATH_MSG_FATAL(
"No detray id found for Athena identifier " << module_id);
102 return StatusCode::FAILURE;
104 const detray_id_type detray_geometry_id{detray_geometry_id_opt.value()};
105 if (detray_geometry_id != current_geometry_id) {
106 current_geometry_id = detray_geometry_id;
107 std::optional<unsigned int> det_cond_idx_opt =
108 m_common.m_geoIdMapping->detrayToDetDescIndex(current_geometry_id);
109 if (!det_cond_idx_opt.has_value()) {
110 ATH_MSG_FATAL(
"No detector conditions index found for detray identifier " << current_geometry_id);
111 return StatusCode::FAILURE;
113 current_det_cond_idx = det_cond_idx_opt.value();
116 for (PixelRawDataProxy pixel_rdo: module_rdo_container_proxy) {
117 float activation = 1.;
118 if (
m_common.m_UsePixelToTForCellActivation) {
119 activation =
static_cast<float>(pixel_rdo.getToT());
120 if (activation == 0.) {
121 ATH_MSG_ERROR(
"input data error: RDO must not have ToT=0; RDO index: "
126 traccc::edm::silicon_cell cell = cells.at(cell_index++);
127 cell.channel0() =
static_cast<uint32_t
>(pixel_rdo.coordinates()[0]);
128 cell.channel1() =
static_cast<uint32_t
>(pixel_rdo.coordinates()[1]);
129 cell.module_index() = current_det_cond_idx;
130 cell.activation() = activation;
136 for (StripRawDataContainerProxy module_rdo_container_proxy : strip_rdo_container_collection_proxy) {
137 if (module_rdo_container_proxy.empty()) {
140 IdentifierHash const module_id_hash(module_rdo_container_proxy.identifyHash());
142 std::optional<detray_id_type>
const detray_geometry_id_opt =
m_common.m_geoIdMapping->athenaToDetray(module_id);
143 if (!detray_geometry_id_opt.has_value()) {
144 ATH_MSG_FATAL(
"No detray id found for Athena identifier " << module_id);
145 return StatusCode::FAILURE;
147 const detray_id_type detray_geometry_id{detray_geometry_id_opt.value()};
148 if (detray_geometry_id != current_geometry_id) {
149 current_geometry_id = detray_geometry_id;
150 std::optional<unsigned int> det_cond_idx_opt =
151 m_common.m_geoIdMapping->detrayToDetDescIndex(current_geometry_id);
152 if (!det_cond_idx_opt.has_value()) {
153 ATH_MSG_FATAL(
"No detector conditions index found for detray identifier " << current_geometry_id);
154 return StatusCode::FAILURE;
156 current_det_cond_idx = det_cond_idx_opt.value();
159 for (StripRawDataProxy strip_rdo: module_rdo_container_proxy) {
160 if (!
m_common.passTiming(strip_rdo.getTimeBin())) {
165 if (
m_common.m_stripID->barrel_ec(module_id) == 0) {
166 for (
int i = 0; i < strip_rdo.getGroupSize(); ++i) {
167 traccc::edm::silicon_cell cell = cells.at(cell_index++);
168 cell.channel0() =
static_cast<uint32_t
>(strip_rdo.coordinates()[0] + i);
170 cell.module_index() = current_det_cond_idx;
171 cell.activation() = 1.;
175 for (
int i = 0; i < strip_rdo.getGroupSize(); ++i) {
176 traccc::edm::silicon_cell cell = cells.at(cell_index++);
178 cell.channel1() =
static_cast<uint32_t
>(strip_rdo.coordinates()[0] + i);
179 cell.module_index() = current_det_cond_idx;
180 cell.activation() = 1.;
189 traccc::edm::silicon_cell_collection::buffer sorted_cells_host_buffer =
190 m_common.sortCells(*host_copy, cells);
208 <<
m_common.m_tracccCellsKey.key() <<
"'");
209 return StatusCode::SUCCESS;