214 MeasurementRange *current_range=
nullptr;
216 std::size_t n_elements = clusterContainer.
size();;
217 std::size_t sl_idx = 0;
218 for( ; sl_idx < n_elements; ++sl_idx) {
219 const auto *measurement = clusterContainer[sl_idx];
220 if (measurement->identifierHash() != last_id_hash || measurement->type() != last_measurement_type)
223 current_range->updateEnd(typeIndex, sl_idx);
225 last_id_hash = measurement->identifierHash();
226 last_measurement_type = measurement->type();
230 if (measurement_surface_id.value() == 0
u) {
232 throw std::domain_error(
"No Acts surface associated to measurement");
237 MeasurementRange( typeIndex, sl_idx, sl_idx) ));
239 std::stringstream
msg;
240 msg <<
"Measurement not clustered by identifierHash / geometryId. New measurement "
241 << sl_idx <<
" with geo Id " << measurement_surface_id
242 <<
" type = " <<
static_cast<unsigned int>(measurement->type())
243 <<
" idHash=" << measurement->identifierHash()
244 <<
" but already recorded for this geo ID the range : [" <<
ret.first->second.containerIndex() <<
"]"
245 <<
ret.first->second.elementBeginIndex()
246 <<
" .. " <<
ret.first->second.elementEndIndex()
247 << (
ret.first->second.isConsistentRange() ?
"" :
" !Container index inconsistent or not in increasing order!");
248 throw std::runtime_error(
msg.str());
250 current_range = &
ret.first->second;
254 current_range->updateEnd(typeIndex, sl_idx);