ATLAS Offline Software
Public Member Functions | Private Attributes | List of all members
ActsTrk::detail::TrackFindingMeasurements Class Reference

#include <TrackFindingData.h>

Collaboration diagram for ActsTrk::detail::TrackFindingMeasurements:

Public Member Functions

 TrackFindingMeasurements (std::size_t n_measurement_container_max)
 
 TrackFindingMeasurements ()=delete
 
 TrackFindingMeasurements (const TrackFindingMeasurements &)=default
 
TrackFindingMeasurementsoperator= (const TrackFindingMeasurements &)=delete
 
void addMeasurements (size_t typeIndex, const xAOD::UncalibratedMeasurementContainer &clusterContainer, const DetectorElementToActsGeometryIdMap &detector_element_to_geoid)
 
std::vector< std::pair< const xAOD::UncalibratedMeasurementContainer *, size_t > > measurementContainerOffsets () const
 
size_t measurementOffset (size_t typeIndex) const
 
const std::vector< size_t > & measurementOffsets () const
 
const ActsTrk::MeasurementRangeListmeasurementRanges () const
 

Private Attributes

std::vector< size_t > m_measurementOffsets
 
ActsTrk::MeasurementRangeList m_measurementRanges
 
std::size_t m_measurementsTotal = 0
 

Detailed Description

Definition at line 183 of file TrackFindingData.h.

Constructor & Destructor Documentation

◆ TrackFindingMeasurements() [1/3]

ActsTrk::detail::TrackFindingMeasurements::TrackFindingMeasurements ( std::size_t  n_measurement_container_max)
inline

Definition at line 185 of file TrackFindingData.h.

185  {
186  m_measurementOffsets.reserve(n_measurement_container_max);
187  }

◆ TrackFindingMeasurements() [2/3]

ActsTrk::detail::TrackFindingMeasurements::TrackFindingMeasurements ( )
delete

◆ TrackFindingMeasurements() [3/3]

ActsTrk::detail::TrackFindingMeasurements::TrackFindingMeasurements ( const TrackFindingMeasurements )
default

Member Function Documentation

◆ addMeasurements()

void ActsTrk::detail::TrackFindingMeasurements::addMeasurements ( size_t  typeIndex,
const xAOD::UncalibratedMeasurementContainer clusterContainer,
const DetectorElementToActsGeometryIdMap detector_element_to_geoid 
)
inline

Definition at line 194 of file TrackFindingData.h.

196  {
197  if (m_measurementRanges.empty()) {
198  // try to reserve needed space,
199  // this however will reserve more than necessary not just the space needed for the surfaces of
200  // all the measurements that are going to be added (e.g. pixel+strips).
201  m_measurementRanges.reserve(detector_element_to_geoid.size());
202  }
203 
204  // m_measurementOffsets only needed for TrackStatePrinter, but it is trivial overhead to save it for each event
205  if (!(typeIndex < m_measurementOffsets.size())) {
206  m_measurementOffsets.resize(typeIndex + 1);
207  }
209 
210  m_measurementRanges.setContainer(typeIndex, &clusterContainer);
211 
212  xAOD::UncalibMeasType last_measurement_type = xAOD::UncalibMeasType::Other;
214  MeasurementRange *current_range=nullptr;
215 
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)
221  {
222  if (current_range) {
223  current_range->updateEnd(typeIndex, sl_idx);
224  }
225  last_id_hash = measurement->identifierHash();
226  last_measurement_type = measurement->type();
227 
228  Acts::GeometryIdentifier measurement_surface_id = ActsTrk::getSurfaceGeometryIdOfMeasurement(detector_element_to_geoid,
229  *measurement);
230  if (measurement_surface_id.value() == 0u) {
231  // @TODO improve error message.
232  throw std::domain_error("No Acts surface associated to measurement");
233  }
234 
235  // start with en empty range which is updated later.
236  auto ret = m_measurementRanges.insert( std::make_pair( measurement_surface_id.value(),
237  MeasurementRange( typeIndex, sl_idx, sl_idx) ));
238  if (!ret.second) {
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());
249  }
250  current_range = &ret.first->second;
251  }
252  }
253  if (current_range) {
254  current_range->updateEnd(typeIndex, sl_idx);
255  }
256  m_measurementsTotal += clusterContainer.size();
257  }

◆ measurementContainerOffsets()

std::vector<std::pair<const xAOD::UncalibratedMeasurementContainer *, size_t> > ActsTrk::detail::TrackFindingMeasurements::measurementContainerOffsets ( ) const
inline

Definition at line 259 of file TrackFindingData.h.

260  {
261  std::vector<std::pair<const xAOD::UncalibratedMeasurementContainer *, size_t>> offsets;
262  if (m_measurementRanges.numContainers() == 0) return offsets;
263  offsets.reserve(m_measurementRanges.numContainers() - 1); // first one usually 0
264  for (std::size_t typeIndex = 0; typeIndex < m_measurementRanges.numContainers(); ++typeIndex)
265  {
266  const xAOD::UncalibratedMeasurementContainer *the_container
267  = std::visit( [] (const auto &a) -> const xAOD::UncalibratedMeasurementContainer * { return a.containerPtr();} ,
268  m_measurementRanges.container(typeIndex));
269  if (measurementOffset(typeIndex) > 0 && the_container != nullptr)
270  {
271  offsets.emplace_back(the_container, measurementOffset(typeIndex));
272  }
273  }
274  return offsets;
275  }

◆ measurementOffset()

size_t ActsTrk::detail::TrackFindingMeasurements::measurementOffset ( size_t  typeIndex) const
inline

Definition at line 277 of file TrackFindingData.h.

277 { return typeIndex < m_measurementOffsets.size() ? m_measurementOffsets[typeIndex] : 0u; }

◆ measurementOffsets()

const std::vector<size_t>& ActsTrk::detail::TrackFindingMeasurements::measurementOffsets ( ) const
inline

Definition at line 278 of file TrackFindingData.h.

278 { return m_measurementOffsets; }

◆ measurementRanges()

const ActsTrk::MeasurementRangeList& ActsTrk::detail::TrackFindingMeasurements::measurementRanges ( ) const
inline

Definition at line 279 of file TrackFindingData.h.

279 { return m_measurementRanges; }

◆ operator=()

TrackFindingMeasurements& ActsTrk::detail::TrackFindingMeasurements::operator= ( const TrackFindingMeasurements )
delete

Member Data Documentation

◆ m_measurementOffsets

std::vector<size_t> ActsTrk::detail::TrackFindingMeasurements::m_measurementOffsets
private

Definition at line 283 of file TrackFindingData.h.

◆ m_measurementRanges

ActsTrk::MeasurementRangeList ActsTrk::detail::TrackFindingMeasurements::m_measurementRanges
private

Definition at line 284 of file TrackFindingData.h.

◆ m_measurementsTotal

std::size_t ActsTrk::detail::TrackFindingMeasurements::m_measurementsTotal = 0
private

Definition at line 285 of file TrackFindingData.h.


The documentation for this class was generated from the following file:
max
#define max(a, b)
Definition: cfImp.cxx:41
ActsTrk::getSurfaceGeometryIdOfMeasurement
Acts::GeometryIdentifier getSurfaceGeometryIdOfMeasurement(const DetectorElementToActsGeometryIdMap &detector_element_to_geoid, const xAOD::UncalibratedMeasurement &measurement)
Definition: SurfaceOfMeasurementUtil.h:24
ActsTrk::GenMeasurementRangeList::container
const MeasurementContainer & container(unsigned index) const
Definition: AtlasUncalibSourceLinkAccessor.h:96
ActsTrk::detail::TrackFindingMeasurements::measurementOffset
size_t measurementOffset(size_t typeIndex) const
Definition: TrackFindingData.h:277
Trk::u
@ u
Enums for curvilinear frames.
Definition: ParamDefs.h:77
ret
T ret(T t)
Definition: rootspy.cxx:260
ActsTrk::detail::TrackFindingMeasurements::m_measurementOffsets
std::vector< size_t > m_measurementOffsets
Definition: TrackFindingData.h:283
ActsTrk::detail::TrackFindingMeasurements::m_measurementRanges
ActsTrk::MeasurementRangeList m_measurementRanges
Definition: TrackFindingData.h:284
xAOD::Other
@ Other
ActsTrk::detail::TrackFindingMeasurements::m_measurementsTotal
std::size_t m_measurementsTotal
Definition: TrackFindingData.h:285
DataVector
Derived DataVector<T>.
Definition: DataVector.h:581
ActsTrk::GenMeasurementRangeList::setContainer
void setContainer(unsigned int container_index, const xAOD::UncalibratedMeasurementContainer *container)
Definition: AtlasUncalibSourceLinkAccessor.h:88
xAOD::DetectorIDHashType
unsigned int DetectorIDHashType
@ detector ID element hash
Definition: MeasurementDefs.h:42
a
TList * a
Definition: liststreamerinfos.cxx:10
xAOD::UncalibMeasType
UncalibMeasType
Define the type of the uncalibrated measurement.
Definition: MeasurementDefs.h:24
DataVector::size
size_type size() const noexcept
Returns the number of elements in the collection.
python.AutoConfigFlags.msg
msg
Definition: AutoConfigFlags.py:7
ActsTrk::GenMeasurementRangeList::numContainers
std::size_t numContainers() const
Definition: AtlasUncalibSourceLinkAccessor.h:94