12#ifndef TRKIPATFITTER_MATERIALALLOCATOR_H
13#define TRKIPATFITTER_MATERIALALLOCATOR_H
21#include "GaudiKernel/ServiceHandle.h"
22#include "GaudiKernel/ToolHandle.h"
54 const IInterface* parent);
59 virtual StatusCode
finalize()
override;
76 std::vector<FitMeasurement*>& measurements)
const override;
97 std::vector<FitMeasurement*>& measurements)
const;
101 const std::vector<const TrackStateOnSurface*>* material,
106 const ToolHandle<IExtrapolator>& extrapolator,
112 void indetMaterial(std::vector<FitMeasurement*>& measurements,
119 const std::vector<const TrackStateOnSurface*>& material,
120 std::vector<FitMeasurement*>& measurements,
double particleMass)
const;
123 double particleMass)
const;
127 double outwardsEnergy,
128 double particleMass);
142 this,
"Extrapolator",
"Trk::Extrapolator/AtlasExtrapolator",
""};
144 this,
"Intersector",
"Trk::RungeKuttaIntersector/RungeKuttaIntersector",
147 this,
"TrackingGeometrySvc",
"",
""};
149 this,
"TrackingVolumesSvc",
"Trk::TrackingVolumesSvc/TrackingVolumesSvc",
152 this,
"STEP_Propagator",
"Trk::STEP_Propagator/AtlasSTEP_Propagator",
""};
155 this,
"TrackingGeometryReadKey",
"AtlasTrackingGeometry",
156 "Key of the TrackingGeometry conditions data."};
159 static const std::string vol_name =
"MuonSpectrometerEntrance";
171 return handle.
cptr()->trackingVolume(vol_name);
200 const std::pair<double, FitMeasurement*>&
y)
const {
201 return x.first <
y.first;
#define ATH_MSG_WARNING(x)
const_pointer_type cptr()
The BoundaryCheck class allows to steer the way surface boundaries are used for inside/outside checks...
Base class for Intersector AlgTools.
Base class for MaterialAllocator AlgTool.
std::vector< std::unique_ptr< const TrackStateOnSurface > > Garbage_t
magnetic field properties to steer the behavior of the extrapolation
bool operator()(const std::pair< double, FitMeasurement * > &x, const std::pair< double, FitMeasurement * > &y) const
void addSpectrometerDelimiters(std::vector< FitMeasurement * > &measurements) const
MaterialAllocator(const std::string &type, const std::string &name, const IInterface *parent)
const Trk::Volume * m_calorimeterVolume
ToolHandle< IPropagator > m_stepPropagator
ToolHandle< IIntersector > m_intersector
virtual void orderMeasurements(std::vector< FitMeasurement * > &measurements, Amg::Vector3D startDirection, Amg::Vector3D startPosition) const override
IMaterialAllocator interface: clear temporary TSOS.
virtual ~MaterialAllocator()=default
virtual StatusCode initialize() override
double m_orderingTolerance
const Trk::TrackingVolume * getSpectrometerEntrance() const
void spectrometerMaterial(std::vector< FitMeasurement * > &measurements, ParticleHypothesis particleHypothesis, FitParameters &fitParameters, const TrackParameters &startParameters, Garbage_t &garbage) const
Trk::MagneticFieldProperties m_stepField
virtual bool reallocateMaterial(std::vector< FitMeasurement * > &measurements, FitParameters &fitParameters, Garbage_t &garbage) const override
IMaterialAllocator interface: has material been reallocated?
void printMeasurements(std::vector< FitMeasurement * > &measurements) const
ServiceHandle< ITrackingVolumesSvc > m_trackingVolumesSvc
double m_scatteringLogCoeff
const std::vector< const TrackStateOnSurface * > * extrapolatedMaterial(const ToolHandle< IExtrapolator > &extrapolator, const TrackParameters ¶meters, const Surface &surface, PropDirection dir, const BoundaryCheck &boundsCheck, ParticleHypothesis particleHypothesis, Garbage_t &garbage) const
std::pair< FitMeasurement *, FitMeasurement * > materialAggregation(const std::vector< const TrackStateOnSurface * > &material, std::vector< FitMeasurement * > &measurements, double particleMass) const
void indetMaterial(std::vector< FitMeasurement * > &measurements, ParticleHypothesis particleHypothesis, const TrackParameters &startParameters, Garbage_t &garbage) const
virtual StatusCode finalize() override
const Trk::Volume * m_indetVolume
static void deleteMaterial(const std::vector< const TrackStateOnSurface * > *material, Garbage_t &garbage)
static FitMeasurement * measurementFromTSOS(const TrackStateOnSurface &tsos, double outwardsEnergy, double particleMass)
virtual void initializeScattering(std::vector< FitMeasurement * > &measurements) const override
IMaterialAllocator interface: initialize scattering (needs to know X0 integral)
SG::ReadCondHandleKey< TrackingGeometry > m_trackingGeometryReadKey
virtual void addLeadingMaterial(std::vector< FitMeasurement * > &measurements, ParticleHypothesis particleHypothesis, FitParameters &fitParameters, Garbage_t &garbage) const override
IMaterialAllocator interface: add leading material effects to fit measurements and parameters.
ToolHandle< IExtrapolator > m_extrapolator
double m_scatteringConstant
virtual void allocateMaterial(std::vector< FitMeasurement * > &measurements, ParticleHypothesis particleHypothesis, FitParameters &fitParameters, const TrackParameters &startParameters, Garbage_t &garbage) const override
IMaterialAllocator interface: allocate material.
ServiceHandle< ITrackingGeometrySvc > m_trackingGeometrySvc
virtual std::vector< const TrackStateOnSurface * > * leadingSpectrometerTSOS(const TrackParameters &spectrometerParameters, Garbage_t &garbage) const override
IMaterialAllocator interface: material TSOS between spectrometer entrance surface and parameters give...
std::unique_ptr< MessageHelper > m_messageHelper
Abstract Base Class for tracking surfaces.
represents the track state (measurement, material, fit parameters and quality) at a surface.
Full Volume description used in Tracking, it inherits from Volume to get the geometrical structure,...
Base class for all volumes inside the tracking realm, it defines the interface for inherited Volume c...
Eigen::Matrix< double, 3, 1 > Vector3D
Ensure that the ATLAS eigen extensions are properly loaded.
PropDirection
PropDirection, enum for direction of the propagation.
ParticleHypothesis
Enumeration for Particle hypothesis respecting the interaction with material.
ParametersBase< TrackParametersDim, Charged > TrackParameters