ATLAS Offline Software
Loading...
Searching...
No Matches
ActsTrk::TrackToTrackParticleCnvTool Class Reference

#include <TrackToTrackParticleCnvTool.h>

Inheritance diagram for ActsTrk::TrackToTrackParticleCnvTool:
Collaboration diagram for ActsTrk::TrackToTrackParticleCnvTool:

Public Member Functions

 TrackToTrackParticleCnvTool (const std::string &type, const std::string &name, const IInterface *parent)
virtual StatusCode initialize () override
virtual StatusCode convert (xAOD::TrackParticle &trackParticle, const EventContext &ctx, const ActsTrk::TrackContainer::ConstTrackProxy &track, const Acts::PerigeeSurface *perigeeSurface=nullptr, const InDet::BeamSpotData *beamspotData=nullptr) const override

Private Types

using Stepper = Acts::EigenStepper<>
using Navigator = Acts::Navigator
using Propagator = Acts::Propagator<Stepper, Navigator>

Private Member Functions

Acts::BoundTrackParameters parametersAtPerigee (const EventContext &ctx, const ActsTrk::TrackContainer::ConstTrackProxy &track, const Acts::PerigeeSurface &perigee_surface) const

Static Private Member Functions

static xAOD::ParticleHypothesis convertParticleHypothesis (Acts::PdgParticle abs_pdg_id)

Private Attributes

ToolHandle< ActsTrk::IExtrapolationToolm_extrapolationTool {this, "ExtrapolationTool", ""}
PublicToolHandle< ActsTrk::ITrackingGeometryToolm_trackingGeometryTool {this, "TrackingGeometryTool", "ActsTrackingGeometryTool"}
SG::ReadCondHandleKey< AtlasFieldCacheCondObjm_fieldCacheCondObjInputKey
SG::ReadCondHandleKeyArray< InDetDD::SiDetectorElementCollectionm_siDetEleCollKey
Gaudi::Property< std::vector< unsigned int > > m_siDetEleCollToMeasurementType
Gaudi::Property< double > m_paramExtrapolationParLimit
Gaudi::Property< bool > m_firstAndLastParamOnly
Gaudi::Property< bool > m_computeExpectedLayerPattern
Gaudi::Property< bool > m_expectIfPixelContributes
Gaudi::Property< double > m_pixelExpectLayerPathLimitInMM
Gaudi::Property< unsigned long > m_patternRecognitionInfo
Gaudi::Property< int > m_trackFitter
std::unique_ptr< Propagatorm_propagator

Detailed Description

Definition at line 30 of file TrackToTrackParticleCnvTool.h.

Member Typedef Documentation

◆ Navigator

using ActsTrk::TrackToTrackParticleCnvTool::Navigator = Acts::Navigator
private

Definition at line 48 of file TrackToTrackParticleCnvTool.h.

◆ Propagator

Definition at line 49 of file TrackToTrackParticleCnvTool.h.

◆ Stepper

using ActsTrk::TrackToTrackParticleCnvTool::Stepper = Acts::EigenStepper<>
private

Definition at line 47 of file TrackToTrackParticleCnvTool.h.

Constructor & Destructor Documentation

◆ TrackToTrackParticleCnvTool()

ActsTrk::TrackToTrackParticleCnvTool::TrackToTrackParticleCnvTool ( const std::string & type,
const std::string & name,
const IInterface * parent )

Definition at line 100 of file TrackToTrackParticleCnvTool.cxx.

103 : base_class(type, name, parent)
104 {
105 }

Member Function Documentation

◆ convert()

StatusCode ActsTrk::TrackToTrackParticleCnvTool::convert ( xAOD::TrackParticle & trackParticle,
const EventContext & ctx,
const ActsTrk::TrackContainer::ConstTrackProxy & track,
const Acts::PerigeeSurface * perigeeSurface = nullptr,
const InDet::BeamSpotData * beamspotData = nullptr ) const
overridevirtual

Definition at line 147 of file TrackToTrackParticleCnvTool.cxx.

153 {
154 using namespace Acts::UnitLiterals;
155
156 SG::ReadCondHandle<AtlasFieldCacheCondObj> fieldHandle = SG::makeHandle(m_fieldCacheCondObjInputKey, ctx);
157 ATH_CHECK(fieldHandle.isValid());
158 const AtlasFieldCacheCondObj* field_cond_data = fieldHandle.cptr();
159 MagField::AtlasFieldCache fieldCache;
160 field_cond_data->getInitializedCache(fieldCache);
161
162 const GeometryContext& gctx = m_trackingGeometryTool->getNominalGeometryContext();
163
164 std::array<const InDetDD::SiDetectorElementCollection*, ActsTrk::detail::to_underlying(xAOD::UncalibMeasType::nTypes)> siDetEleColl{};
165 for (unsigned int idx = 0; idx < m_siDetEleCollToMeasurementType.size(); ++idx) {
166 SG::ReadCondHandle<InDetDD::SiDetectorElementCollection> detHandle = SG::makeHandle(m_siDetEleCollKey[idx], ctx);
167 ATH_CHECK(detHandle.isValid());
168 siDetEleColl[m_siDetEleCollToMeasurementType[idx]] = detHandle.cptr();
169 }
170
171 static const std::array<unsigned short, ActsTrk::detail::to_underlying(xAOD::UncalibMeasType::nTypes)>
172 measurementToSummaryType ATLAS_THREAD_SAFE (makeMeasurementToSummaryTypeMap());
173
174 // re-used temporaries
175 std::vector<float> tmp_cov_vector;
176 std::vector<ActsTrk::TrackStateBackend::ConstTrackStateProxy::IndexType> tmp_param_state_idx;
177 tmp_param_state_idx.reserve(30);
178 Amg::Vector3D magnFieldVect;
179 std::vector<std::vector<float>> parametersVec;
180 ActsTrk::detail::HitSummaryData hitInfo;
181
182 // convert defining parameters
183 Acts::BoundTrackParameters perigeeParam = [&] {
184 if (perigeeSurface == nullptr) {
185 return track.createParametersAtReference();
186 } else {
187 return parametersAtPerigee(ctx, track, *perigeeSurface);
188 }
189 }();
190
191 Acts::BoundVector boundParams = perigeeParam.parameters();
192 track_particle.setDefiningParameters(boundParams[Acts::eBoundLoc0],
193 boundParams[Acts::eBoundLoc1],
194 boundParams[Acts::eBoundPhi],
195 boundParams[Acts::eBoundTheta],
196 boundParams[Acts::eBoundQOverP] * 1_MeV);
197
198 if (perigeeParam.covariance().has_value()) {
199 lowerTriangleToVectorScaleLastRow(perigeeParam.covariance().value(), tmp_cov_vector, 5, 1_MeV);
200 track_particle.setDefiningParametersCovMatrixVec(tmp_cov_vector);
201 }
202
203 // optional beam tilt
204 if (beamspot_data) {
205 track_particle.setBeamlineTiltX(beamspot_data->beamTilt(0));
206 track_particle.setBeamlineTiltY(beamspot_data->beamTilt(1));
207 }
208
209 // fit info, quality
210 track_particle.setFitQuality(track.chi2(), track.nDoF());
211 track_particle.setPatternRecognitionInfo(m_patternRecognitionInfo.value());
212 track_particle.setTrackFitter(static_cast<xAOD::TrackFitter>(m_trackFitter.value()));
213
214 const Acts::ParticleHypothesis& hypothesis = track.particleHypothesis();
215 track_particle.setParticleHypothesis(convertParticleHypothesis(hypothesis.absolutePdg()));
216 constexpr float inv_1_MeV = 1 / 1_MeV;
217
220
221 ActsTrk::detail::SumOfValues chi2_stat;
223 siDetEleColl,
224 measurementToSummaryType,
225 chi2_stat,
226 hitInfo,
227 tmp_param_state_idx,
228 specialHitCounts);
229
230 // pixel summaries
231 std::array<std::tuple<uint8_t, uint8_t, uint8_t, bool>, 4> copy_summary {
232 std::make_tuple(static_cast<uint8_t>(ActsTrk::detail::HitSummaryData::pixelTotal),
234 static_cast<uint8_t>(xAOD::numberOfPixelHits),
235 false),
236
237 std::make_tuple(static_cast<uint8_t>(ActsTrk::detail::HitSummaryData::pixelBarrelFlat),
240 true),
241
245 true),
246
247 std::make_tuple(static_cast<uint8_t>(ActsTrk::detail::HitSummaryData::pixelEndcap),
250 true) };
251
252 for (auto [src_region, dest_xaod_summary_layer, dest_xaod_summary_hits, add_outlier] : copy_summary) {
253 setSummaryValue(track_particle,
255 static_cast<xAOD::SummaryType>(dest_xaod_summary_layer));
256 setSummaryValue(track_particle,
258 + (add_outlier
260 : 0),
261 static_cast<xAOD::SummaryType>(dest_xaod_summary_hits));
262 }
263 setSummaryValue(track_particle,
267 setSummaryValue(track_particle,
270 setSummaryValue(track_particle,
276 setSummaryValue(track_particle,
280 setSummaryValue(track_particle,
283 setSummaryValue(track_particle,
286 setSummaryValue(track_particle,
289 setSummaryValue(track_particle,
293 setSummaryValue(track_particle,
296
297 // expected layer pattern
298 std::array<unsigned int, 4> expect_layer_pattern{};
300 expect_layer_pattern = detail::ExpectedLayerPatternHelper::get(track);
301 } else {
302 expect_layer_pattern = (m_computeExpectedLayerPattern.value()
303 && (!m_expectIfPixelContributes.value()
307 perigeeParam,
308 m_pixelExpectLayerPathLimitInMM.value() * Acts::UnitConstants::mm)
309 : std::array<unsigned int, 4>{0u, 0u, 0u, 0u});
310 }
311
312 // @TODO consider end-caps for inner most pixel hits ?
313 setSummaryValue(track_particle,
314 static_cast<uint8_t>((expect_layer_pattern[0] & (1<<0)) != 0),
316 setSummaryValue(track_particle,
317 static_cast<uint8_t>((expect_layer_pattern[0] & (1<<1)) != 0),
319 setSummaryValue(track_particle,
322 setSummaryValue(track_particle,
325 setSummaryValue(track_particle,
328 setSummaryValue(track_particle,
331 setSummaryValue(track_particle,
334 setSummaryValue(track_particle,
337
338 // Strip summaries
339 setSummaryValue(track_particle,
342 setSummaryValue(track_particle,
345 setSummaryValue(track_particle,
348 setSummaryValue(track_particle,
351
352 double biased_chi2_variance = chi2_stat.biasedVariance();
353 setSummaryValue(track_particle,
354 static_cast<uint8_t>(biased_chi2_variance > 0.
355 ? std::min(static_cast<unsigned int>(std::sqrt(biased_chi2_variance) * 100), 255u)
356 : 0u),
358
359 setSummaryValue(track_particle,
363
364 // @TODO select states for which parameters are stored
365 if (m_firstAndLastParamOnly && tmp_param_state_idx.size() > 2) {
366 tmp_param_state_idx[1] = tmp_param_state_idx.back();
367 tmp_param_state_idx.erase(tmp_param_state_idx.begin() + 2, tmp_param_state_idx.end());
368 }
369
370 // store track parameters and covariances for selected states
371 parametersVec.clear();
372 parametersVec.reserve(tmp_param_state_idx.size());
373
374 for (std::vector<ActsTrk::TrackStateBackend::ConstTrackStateProxy::IndexType>::const_reverse_iterator
375 idx_iter = tmp_param_state_idx.rbegin();
376 idx_iter != tmp_param_state_idx.rend();
377 ++idx_iter) {
378 ActsTrk::TrackStateBackend::ConstTrackStateProxy
379 state = track.container().trackStateContainer().getTrackState(*idx_iter);
380 const Acts::BoundTrackParameters actsParam = track.createParametersFromState(state);
381
382 Acts::Vector3 position = actsParam.position(gctx.context());
383 Acts::Vector3 momentum = actsParam.momentum();
384
385 // scaling from Acts momentum units (GeV) to Athena Units (MeV)
386 for (unsigned int i = 0; i < momentum.rows(); ++i) {
387 momentum(i) *= inv_1_MeV;
388 }
389
390 if (actsParam.covariance()) {
391 Acts::MagneticFieldContext mfContext = m_extrapolationTool->getMagneticFieldContext(ctx);
392 Acts::GeometryContext tgContext = gctx.context();
393
394 magnFieldVect.setZero();
395 fieldCache.getField(position.data(), magnFieldVect.data());
396 // scaling from Athena magnetic field units kT to Acts units T
397 {
398 using namespace Acts::UnitLiterals;
399 magnFieldVect *= 1000_T;
400 }
401
402 auto curvilinear_cov_result = ActsTrk::detail::convertActsBoundCovToCurvilinearParam(tgContext, actsParam, magnFieldVect, hypothesis);
403 if (curvilinear_cov_result.has_value()) {
404 Acts::BoundMatrix& curvilinear_cov = curvilinear_cov_result.value();
405
406 // convert q/p components from GeV (Acts) to MeV (Athena)
407 for (unsigned int col_i = 0; col_i < 4; ++col_i) {
408 curvilinear_cov(col_i, 4) *= 1_MeV;
409 curvilinear_cov(4, col_i) *= 1_MeV;
410 }
411 curvilinear_cov(4, 4) *= (1_MeV * 1_MeV);
412
413 std::size_t param_idx = parametersVec.size();
414 // only use the 5x5 sub-matrix of the full covariance matrix
415 lowerTriangleToVector(curvilinear_cov, tmp_cov_vector, 5);
416 if (tmp_cov_vector.size() != 15) {
417 ATH_MSG_ERROR("Invalid size of lower triangle cov " << tmp_cov_vector.size() << " != 15"
418 << " input matrix : " << curvilinear_cov.rows() << " x " << curvilinear_cov.cols());
419 }
420 track_particle.setTrackParameterCovarianceMatrix(param_idx, tmp_cov_vector);
421 }
422 }
423 parametersVec.emplace_back(std::vector<float>{
424 static_cast<float>(position[0]), static_cast<float>(position[1]), static_cast<float>(position[2]),
425 static_cast<float>(momentum[0]), static_cast<float>(momentum[1]), static_cast<float>(momentum[2]) });
426 }
427 for (const std::vector<float>& param : parametersVec) {
428 if (param.size() != 6) {
429 ATH_MSG_ERROR("Invalid size of param element " << param.size() << " != 6");
430 }
431 }
432
433 track_particle.setTrackParameters(parametersVec);
434
435 return StatusCode::SUCCESS;
436 }
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_ERROR(x)
#define ATLAS_THREAD_SAFE
ToolHandle< ActsTrk::IExtrapolationTool > m_extrapolationTool
Acts::BoundTrackParameters parametersAtPerigee(const EventContext &ctx, const ActsTrk::TrackContainer::ConstTrackProxy &track, const Acts::PerigeeSurface &perigee_surface) const
Gaudi::Property< double > m_pixelExpectLayerPathLimitInMM
SG::ReadCondHandleKeyArray< InDetDD::SiDetectorElementCollection > m_siDetEleCollKey
Gaudi::Property< unsigned long > m_patternRecognitionInfo
SG::ReadCondHandleKey< AtlasFieldCacheCondObj > m_fieldCacheCondObjInputKey
Gaudi::Property< std::vector< unsigned int > > m_siDetEleCollToMeasurementType
PublicToolHandle< ActsTrk::ITrackingGeometryTool > m_trackingGeometryTool
static xAOD::ParticleHypothesis convertParticleHypothesis(Acts::PdgParticle abs_pdg_id)
DetectorRegion
Regions for which hit counts are computed.
uint8_t contributingSharedHits(DetectorRegion region) const
return the number of shared hits in a certain detector region.
uint8_t sum(DetectorRegion region, uint8_t layer) const
return the total number of hits, outliers, and/or shared hits in the givrn detector region and layer.
uint8_t contributingOutlierHits(DetectorRegion region) const
return the number of outliers in a certain detector region.
uint8_t contributingHits(DetectorRegion region) const
return the number of hits in a certain detector region.
uint8_t contributingLayers(DetectorRegion region) const
return the number of layers contributing to the hit collection in the given detector region.
void getInitializedCache(MagField::AtlasFieldCache &cache) const
get B field cache for evaluation as a function of 2-d or 3-d position.
void getField(const double *ATH_RESTRICT xyz, double *ATH_RESTRICT bxyz, double *ATH_RESTRICT deriv=nullptr)
get B field value at given position xyz[3] is in mm, bxyz[3] is in kT if deriv[9] is given,...
const_pointer_type cptr()
void gatherTrackSummaryData(const typename ActsTrk::TrackContainer::ConstTrackProxy &track, const std::array< const InDetDD::SiDetectorElementCollection *, to_underlying(xAOD::UncalibMeasType::nTypes)> &siDetEleColl, const std::array< unsigned short, to_underlying(xAOD::UncalibMeasType::nTypes)> &measurement_to_summary_type, SumOfValues &chi2_stat_out, HitSummaryData &hit_info_out, std::vector< ActsTrk::TrackStateBackend::ConstTrackStateProxy::IndexType > &param_state_idx_out, std::array< std::array< uint8_t, to_underlying(HitCategory::N)>, to_underlying(xAOD::UncalibMeasType::nTypes)> &special_hit_counts_out)
Helper to gather track summary information from the track states of the specified track.
constexpr std::underlying_type< T_EnumClass >::type to_underlying(T_EnumClass an_enum)
Helper to convert class enum into an integer.
std::array< unsigned int, 4 > expectedLayerPattern(const EventContext &ctx, const IExtrapolationTool &extrapolator, const Acts::BoundTrackParameters &perigee_parameters, double pathLimit)
Extrapolate from the perigee outwards and gather information which detector layers should have hits.
std::optional< Acts::BoundMatrix > convertActsBoundCovToCurvilinearParam(const Acts::GeometryContext &tgContext, const Acts::BoundTrackParameters &param, const Acts::Vector3 &magnFieldVect, const Acts::ParticleHypothesis &particle_hypothesis)
Convert the covariance of the given Acts track parameters into curvilinear parameterisation.
Eigen::Matrix< double, 3, 1 > Vector3D
SG::ReadCondHandle< T > makeHandle(const SG::ReadCondHandleKey< T > &key, const EventContext &ctx=Gaudi::Hive::currentContext())
TrackFitter
Enums to identify who created this track and which properties does it have.
SummaryType
Enumerates the different types of information stored in Summary.
@ numberOfInnermostPixelLayerSharedEndcapHits
number of Pixel 0th layer endcap hits shared by several tracks.
@ expectInnermostPixelLayerHit
Do we expect a 0th-layer barrel hit for this track?
@ numberOfPixelHoles
number of pixel layers on track with absence of hits [unit8_t].
@ numberOfInnermostPixelLayerEndcapHits
these are the hits in the 0th pixel layer endcap [unit8_t].
@ numberOfNextToInnermostPixelLayerSharedHits
number of Pixel 1st layer barrel hits shared by several tracks.
@ numberOfNextToInnermostPixelLayerSharedEndcapHits
number of Pixel 1st layer endcap hits shared by several tracks.
@ numberOfContribPixelLayers
number of contributing layers of the pixel detector [unit8_t].
@ standardDeviationOfChi2OS
100 times the standard deviation of the chi2 from the surfaces [unit8_t].
@ numberOfInnermostPixelLayerEndcapOutliers
number of 0th layer endcap outliers
@ numberOfInnermostPixelLayerSharedHits
number of Pixel 0th layer barrel hits shared by several tracks.
@ numberOfPixelOutliers
these are the pixel outliers, including the b-layer [unit8_t].
@ numberOfContribPixelBarrelFlatLayers
number of contributing barrel flat layers of the pixel detector [unit8_t].
@ numberOfNextToInnermostPixelLayerHits
these are the hits in the 1st pixel barrel layer
@ numberOfContribPixelBarrelInclinedLayers
number of contributing barrel inclined layers of the pixel detector [unit8_t].
@ numberOfPixelEndcapHits
these are the pixel hits, in the endcap layers [unit8_t].
@ numberOfInnermostPixelLayerOutliers
number of 0th layer barrel outliers
@ numberOfOutliersOnTrack
number of measurements flaged as outliers in TSOS [unit8_t].
@ numberOfNextToInnermostPixelLayerEndcapHits
these are the hits in the 0.5th and 1st pixel layer endcap rings [unit8_t].
@ expectNextToInnermostPixelLayerHit
Do we expect a 1st-layer barrel hit for this track?
@ numberOfContribPixelEndcap
number of contributing endcap layers of the pixel detector [unit8_t].
@ numberOfNextToInnermostPixelLayerEndcapOutliers
number of 1st layer endcap disk outliers
@ numberOfSCTHits
number of hits in SCT [unit8_t].
@ numberOfPixelBarrelInclinedHits
these are the pixel hits, in the barrel inclined layers [unit8_t].
@ numberOfSCTOutliers
number of SCT outliers [unit8_t].
@ numberOfPixelBarrelFlatHits
these are the pixel hits, in the barrel flat layers [unit8_t].
@ numberOfInnermostPixelLayerHits
these are the hits in the 0th pixel barrel layer
@ numberOfPixelHits
these are the pixel hits, including the b-layer [unit8_t].
@ numberOfPixelSharedHits
number of Pixel all-layer hits shared by several tracks [unit8_t].
@ numberOfSCTSharedHits
number of SCT hits shared by several tracks [unit8_t].
@ numberOfNextToInnermostPixelLayerOutliers
number of 1st pixel layer barrel outliers
@ numberOfSCTHoles
number of SCT holes [unit8_t].
static std::array< unsigned int, 4 > get(const track_proxy_t &track)
static bool exists(track_container_t &trackContainer)

◆ convertParticleHypothesis()

xAOD::ParticleHypothesis ActsTrk::TrackToTrackParticleCnvTool::convertParticleHypothesis ( Acts::PdgParticle abs_pdg_id)
staticprivate

Definition at line 82 of file TrackToTrackParticleCnvTool.cxx.

82 {
83 static const std::array map {
84 std::pair{Acts::eElectron, xAOD::electron},
85 std::pair{Acts::eMuon, xAOD::muon},
86 std::pair{Acts::ePionPlus, xAOD::pion},
87 std::pair{Acts::eProton, xAOD::proton},
88 std::pair{Acts::ePionZero, xAOD::pi0},
89 std::pair{Acts::eNeutron, xAOD::neutron},
90 std::pair{Acts::eGamma, xAOD::photon},
91 };
92 auto iter = std::find_if(
93 map.begin(), map.end(),
94 [abs_pdg_id](const auto& elm) {
95 return abs_pdg_id == elm.first;
96 });
97 return (iter != map.end() ? iter->second : xAOD::noHypothesis);
98 }
@ pi0
for Fatras usage
@ noHypothesis
For material collection.
@ neutron
for Fatras usage

◆ initialize()

StatusCode ActsTrk::TrackToTrackParticleCnvTool::initialize ( )
overridevirtual

Definition at line 107 of file TrackToTrackParticleCnvTool.cxx.

108 {
109 ATH_CHECK( m_trackingGeometryTool.retrieve() );
110 ATH_CHECK( m_extrapolationTool.retrieve() );
112 ATH_CHECK( m_siDetEleCollKey.initialize() );
113
115 unsigned int collection_idx = 0;
116 for (int type : m_siDetEleCollToMeasurementType) {
117 if (type < 1 || type > 2) {
118 ATH_MSG_ERROR("Invalid measurement type (" << type << ") given for collection " << collection_idx << " : "
119 << m_siDetEleCollKey[collection_idx].key()
120 << ". Expected 1 for pixel, 2 for strips.");
121 return StatusCode::FAILURE;
122 }
123 ++collection_idx;
124 }
125 } else {
126 ATH_MSG_ERROR("Expected exactly one value in SiDetEleCollToMeasurementType per SiDetectorElementCollection. But got "
127 << m_siDetEleCollToMeasurementType.size() << " instead of " << m_siDetEleCollKey.size() << ".");
128 return StatusCode::FAILURE;
129 }
130
131 // propagator for conversion to curvilinear parameters
132 {
133 auto logger = makeActsAthenaLogger(this, "Prop");
134 Navigator::Config cfg{m_trackingGeometryTool->trackingGeometry()};
135 cfg.resolvePassive = false;
136 cfg.resolveMaterial = true;
137 cfg.resolveSensitive = true;
138 auto navigtor_logger = logger->cloneWithSuffix("Navigator");
139 m_propagator = std::make_unique<Propagator>(Stepper(std::make_shared<ATLASMagneticFieldWrapper>()),
140 Navigator(cfg, std::move(navigtor_logger)),
141 std::move(logger));
142 }
143
144 return StatusCode::SUCCESS;
145 }
std::unique_ptr< const Acts::Logger > makeActsAthenaLogger(IMessageSvc *svc, const std::string &name, int level, std::optional< std::string > parent_name)
static Root::TMsgLogger logger("iLumiCalc")

◆ parametersAtPerigee()

Acts::BoundTrackParameters ActsTrk::TrackToTrackParticleCnvTool::parametersAtPerigee ( const EventContext & ctx,
const ActsTrk::TrackContainer::ConstTrackProxy & track,
const Acts::PerigeeSurface & perigee_surface ) const
private

Definition at line 438 of file TrackToTrackParticleCnvTool.cxx.

442 {
443 const Acts::BoundTrackParameters trackParam = track.createParametersAtReference();
444
445 Acts::Result<Acts::BoundTrackParameters>
446 perigeeParam = m_extrapolationTool->propagate(ctx,
447 trackParam,
448 perigee_surface,
449 Acts::Direction::Backward(),
451 if (!perigeeParam.ok()) {
452 ATH_MSG_WARNING("Failed to extrapolate to perigee, started from \n" << trackParam << " " << trackParam.referenceSurface().name());
453 return trackParam;
454 }
455
456 return perigeeParam.value();
457 }
#define ATH_MSG_WARNING(x)

Member Data Documentation

◆ m_computeExpectedLayerPattern

Gaudi::Property<bool> ActsTrk::TrackToTrackParticleCnvTool::m_computeExpectedLayerPattern
private
Initial value:
{this, "ComputeExpectedLayerPattern", true,
"Compute the expected layer pattern. CPU expensive"}

Definition at line 83 of file TrackToTrackParticleCnvTool.h.

84 {this, "ComputeExpectedLayerPattern", true,
85 "Compute the expected layer pattern. CPU expensive"};

◆ m_expectIfPixelContributes

Gaudi::Property<bool> ActsTrk::TrackToTrackParticleCnvTool::m_expectIfPixelContributes
private
Initial value:
{this, "expectIfPixelContribution", true,
"Only expect pixel hits if there are pixel hits on track."}

Definition at line 87 of file TrackToTrackParticleCnvTool.h.

88 {this, "expectIfPixelContribution", true,
89 "Only expect pixel hits if there are pixel hits on track."};

◆ m_extrapolationTool

ToolHandle<ActsTrk::IExtrapolationTool> ActsTrk::TrackToTrackParticleCnvTool::m_extrapolationTool {this, "ExtrapolationTool", ""}
private

Definition at line 57 of file TrackToTrackParticleCnvTool.h.

58{this, "ExtrapolationTool", ""};

◆ m_fieldCacheCondObjInputKey

SG::ReadCondHandleKey<AtlasFieldCacheCondObj> ActsTrk::TrackToTrackParticleCnvTool::m_fieldCacheCondObjInputKey
private
Initial value:
{this, "AtlasFieldCacheCondObj", "fieldCondObj",
"Name of the Magnetic Field conditions object key"}

Definition at line 63 of file TrackToTrackParticleCnvTool.h.

64 {this, "AtlasFieldCacheCondObj", "fieldCondObj",
65 "Name of the Magnetic Field conditions object key"};

◆ m_firstAndLastParamOnly

Gaudi::Property<bool> ActsTrk::TrackToTrackParticleCnvTool::m_firstAndLastParamOnly
private
Initial value:
{this, "FirstAndLastParameterOnly", true,
"Only convert the first and the last parameter."}

Definition at line 79 of file TrackToTrackParticleCnvTool.h.

80 {this, "FirstAndLastParameterOnly", true,
81 "Only convert the first and the last parameter."};

◆ m_paramExtrapolationParLimit

Gaudi::Property<double> ActsTrk::TrackToTrackParticleCnvTool::m_paramExtrapolationParLimit
private
Initial value:
{this, "ExtrapolationPathLimit", std::numeric_limits<double>::max(),
"PathLimit for extrapolating track parameters."}

Definition at line 75 of file TrackToTrackParticleCnvTool.h.

76 {this, "ExtrapolationPathLimit", std::numeric_limits<double>::max(),
77 "PathLimit for extrapolating track parameters."};

◆ m_patternRecognitionInfo

Gaudi::Property<unsigned long> ActsTrk::TrackToTrackParticleCnvTool::m_patternRecognitionInfo
private
Initial value:
{this, "PatternRecognitionInfo", (1ul << xAOD::SiSPSeededFinder),
"Pattern recognition info bitmask to store on converted track particles."}
@ SiSPSeededFinder
Tracks from SiSPSeedFinder.

Definition at line 95 of file TrackToTrackParticleCnvTool.h.

96 {this, "PatternRecognitionInfo", (1ul << xAOD::SiSPSeededFinder),
97 "Pattern recognition info bitmask to store on converted track particles."};

◆ m_pixelExpectLayerPathLimitInMM

Gaudi::Property<double> ActsTrk::TrackToTrackParticleCnvTool::m_pixelExpectLayerPathLimitInMM
private
Initial value:
{this, "PixelExpectLayerPathLimitInMM", 1000,
"PathLimit for extrapolating to get the expected pixel layer pattern in mm."}

Definition at line 91 of file TrackToTrackParticleCnvTool.h.

92 {this, "PixelExpectLayerPathLimitInMM", 1000,
93 "PathLimit for extrapolating to get the expected pixel layer pattern in mm."};

◆ m_propagator

std::unique_ptr<Propagator> ActsTrk::TrackToTrackParticleCnvTool::m_propagator
private

Definition at line 103 of file TrackToTrackParticleCnvTool.h.

◆ m_siDetEleCollKey

SG::ReadCondHandleKeyArray<InDetDD::SiDetectorElementCollection> ActsTrk::TrackToTrackParticleCnvTool::m_siDetEleCollKey
private
Initial value:
{this, "SiDetectorElementCollections", {},
"Pixel and strip element collections to get geometry information about measurements."}

Definition at line 67 of file TrackToTrackParticleCnvTool.h.

68 {this, "SiDetectorElementCollections", {},
69 "Pixel and strip element collections to get geometry information about measurements."};

◆ m_siDetEleCollToMeasurementType

Gaudi::Property<std::vector<unsigned int> > ActsTrk::TrackToTrackParticleCnvTool::m_siDetEleCollToMeasurementType
private
Initial value:
{this, "SiDetEleCollToMeasurementType", {},
"One value per si detector collection: Pixel = 1, Strip = 2"}

Definition at line 71 of file TrackToTrackParticleCnvTool.h.

72 {this, "SiDetEleCollToMeasurementType", {},
73 "One value per si detector collection: Pixel = 1, Strip = 2"};

◆ m_trackFitter

Gaudi::Property<int> ActsTrk::TrackToTrackParticleCnvTool::m_trackFitter
private
Initial value:
{this, "TrackFitter", static_cast<int>(xAOD::KalmanFitter),
"Track fitter identifier to store on converted track particles."}
@ KalmanFitter
tracks produced by the Kalman Fitter

Definition at line 99 of file TrackToTrackParticleCnvTool.h.

100 {this, "TrackFitter", static_cast<int>(xAOD::KalmanFitter),
101 "Track fitter identifier to store on converted track particles."};

◆ m_trackingGeometryTool

PublicToolHandle<ActsTrk::ITrackingGeometryTool> ActsTrk::TrackToTrackParticleCnvTool::m_trackingGeometryTool {this, "TrackingGeometryTool", "ActsTrackingGeometryTool"}
private

Definition at line 60 of file TrackToTrackParticleCnvTool.h.

61{this, "TrackingGeometryTool", "ActsTrackingGeometryTool"};

The documentation for this class was generated from the following files: