ATLAS Offline Software
Loading...
Searching...
No Matches
SpacePointCollector.h
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3*/
4
5#ifndef ACTSTRK_SPACEPOINT_COLLECTOR_H
6#define ACTSTRK_SPACEPOINT_COLLECTOR_H
7
9
10// EDMs
12
13#include <math.h>
14#include <cmath>
15#include "Acts/EventData/SpacePointContainer.hpp"
16#include "Acts/Definitions/Algebra.hpp"
17
18namespace ActsTrk {
19
21 public:
22 friend Acts::SpacePointContainer<ActsTrk::SpacePointCollector, Acts::detail::RefHolder>;
23
25
26 SpacePointCollector(std::vector<const ValueType*>& externalStorage);
27
31 SpacePointCollector& operator=(SpacePointCollector&&) noexcept = default;
32 virtual ~SpacePointCollector() = default;
33
34 std::size_t size_impl() const;
35
36 float x_impl(std::size_t idx) const;
37 float y_impl(std::size_t idx) const;
38 float z_impl(std::size_t idx) const;
39
40 float varianceR_impl(std::size_t idx) const;
41 float varianceZ_impl(std::size_t idx) const;
42
43 const ValueType& get_impl(std::size_t idx) const;
44
45 std::any component_impl(Acts::HashedString key, std::size_t n) const {
46 using namespace Acts::HashedStringLiteral;
47
48 const ValueType& sp = get_impl(n);
49 static const SG::ConstAccessor<xAOD::ArrayFloat3> topStripDirAcc("topStripDirection");
50 if (not topStripDirAcc.isAvailable(sp)) {
51 throw std::runtime_error("no such component " + std::to_string(key) + " for this space point");
52 }
53
54 switch (key) {
55 case "TopStripVector"_hash:
56 return Acts::Vector3( sp.topHalfStripLength() * sp.topStripDirection().cast<double>() );
57 case "BottomStripVector"_hash:
58 return Acts::Vector3( sp.bottomHalfStripLength() * sp.bottomStripDirection().cast<double>() );
59 case "StripCenterDistance"_hash:
60 return Acts::Vector3( sp.stripCenterDistance().cast<double>() );
61 case "TopStripCenterPosition"_hash:
62 return Acts::Vector3( sp.topStripCenter().cast<double>() );
63 default:
64 throw std::runtime_error("no such component " + std::to_string(key));
65 }
66 }
67
68 private:
69 const std::vector<const ValueType*>& storage() const;
70 std::vector<const ValueType*>& storage();
71
72 private:
73 // xAOD::SpacePointContainer
74 std::vector<const ValueType*>* m_storage {nullptr};
75 };
76
77 inline std::size_t
79 { return storage().size(); }
80
81 inline float
82 SpacePointCollector::x_impl(std::size_t idx) const
83 { return storage()[idx]->x(); }
84
85 inline float
86 SpacePointCollector::y_impl(std::size_t idx) const
87 { return storage()[idx]->y(); }
88
89 inline float
90 SpacePointCollector::z_impl(std::size_t idx) const
91 { return storage()[idx]->z(); }
92
93 inline float
95 { return storage()[idx]->varianceR(); }
96
97 inline float
99 { return storage()[idx]->varianceZ(); }
100
101 inline const typename SpacePointCollector::ValueType&
102 SpacePointCollector::get_impl(std::size_t idx) const
103 {
104 return *storage()[idx];
105 }
106
107 inline const std::vector<const typename SpacePointCollector::ValueType*>&
109 { return *m_storage; }
110
111 inline std::vector<const typename SpacePointCollector::ValueType*>&
114
115} // namespace ActsTrk
116
117#endif
static Double_t sp
SpacePointCollector(SpacePointCollector &&) noexcept=default
const ValueType & get_impl(std::size_t idx) const
std::vector< const ValueType * > * m_storage
std::any component_impl(Acts::HashedString key, std::size_t n) const
float z_impl(std::size_t idx) const
SpacePointCollector(const SpacePointCollector &)=delete
const std::vector< const ValueType * > & storage() const
float y_impl(std::size_t idx) const
float x_impl(std::size_t idx) const
SpacePointCollector(std::vector< const ValueType * > &externalStorage)
float varianceZ_impl(std::size_t idx) const
float varianceR_impl(std::size_t idx) const
Helper class to provide constant type-safe access to aux data.
bool isAvailable(const ELT &e) const
Test to see if this variable exists in the store.
The AlignStoreProviderAlg loads the rigid alignment corrections and pipes them through the readout ge...
STL namespace.