14#ifndef MUIDTRACKBUILDER_COMBINEDMUONTRACKBUILDER_H
15#define MUIDTRACKBUILDER_COMBINEDMUONTRACKBUILDER_H
21#include "GaudiKernel/ServiceHandle.h"
22#include "GaudiKernel/ToolHandle.h"
68 virtual StatusCode
finalize()
override;
72 const Trk::Track& spectrometerTrack)
const override;
78 std::unique_ptr<Trk::TrackParameters> innerParameters,
79 std::unique_ptr<Trk::TrackParameters> middleParameters,
80 std::unique_ptr<Trk::TrackParameters> outerParameters)
const override;
107 const std::vector<std::unique_ptr<const Trk::TrackStateOnSurface>>& trackStateOnSurfaces,
const Trk::RecVertex* vertex,
125 std::unique_ptr<Trk::TrackParameters>
extrapolatedParameters(
const EventContext& ctx,
bool& badlyDeterminedCurvature,
130 void finalTrackBuild(
const EventContext& ctx, std::unique_ptr<Trk::Track>& track)
const;
132 void momentumUpdate(std::unique_ptr<Trk::TrackParameters>& parameters,
double updatedP,
bool directionUpdate =
false,
133 double deltaPhi = 0.,
double deltaTheta = 0.)
const;
162 "Trk::Extrapolator/AtlasExtrapolator",
182 "Trk::IntersectorWrapper/IntersectorWrapper",
187 "Trk::StraightLinePropagator/MuonStraightLinePropagator",
194 "Muon::MuonAlignmentUncertTool/MuonAlignmentUncertToolTheta" };
196 "Muon::MuonAlignmentUncertTool/MuonAlignmentUncertToolPhi"};
200 "Handle to the service providing the IMuonEDMHelperSvc interface"};
206 "Key of the TrackingGeometry conditions data."};
219 Gaudi::Property<double>
m_largeImpact{
this,
"LargeImpact", 100. * Gaudi::Units::mm};
224 Gaudi::Property<double>
m_lineMomentum{
this,
"LineMomentum", 2. * Gaudi::Units::GeV};
225 Gaudi::Property<double>
m_lowMomentum{
this,
"LowMomentum", 10. * Gaudi::Units::GeV};
227 Gaudi::Property<double>
m_minEnergy{
this,
"MinEnergy", 0.3 * Gaudi::Units::GeV};
231 Gaudi::Property<double>
m_vertex2DSigmaZ{
this,
"Vertex2DSigmaZ", 100. * Gaudi::Units::meter};
Scalar deltaPhi(const MatrixBase< Derived > &vec) const
std::vector< size_t > vec
class extending the basic Trk::EnergyLoss to describe the measured or parameterised muon energy loss ...
DataModel_detail::const_iterator< DataVector > const_iterator
void removeSpectrometerMaterial(std::unique_ptr< Trk::Track > &track) const
virtual StatusCode finalize() override
ToolHandle< Trk::IMaterialAllocator > m_materialAllocator
std::unique_ptr< Trk::Track > createMuonTrack(const EventContext &ctx, const Trk::Track &muonTrack, const Trk::TrackParameters *parameters, std::unique_ptr< CaloEnergy > caloEnergy, const Trk::TrackStates *tsos) const
Summarizes the available information about the ID track, the deposited calorimeter energies and the t...
ToolHandle< Trk::IPropagator > m_propagator
ToolHandle< Muon::IMuonHoleRecoveryTool > m_muonHoleRecovery
static std::unique_ptr< Trk::PseudoMeasurementOnTrack > vertexOnTrack(const Trk::TrackParameters ¶meters, const Trk::RecVertex *vertex, const Trk::RecVertex *mbeamAxis)
ToolHandle< Muon::IMuonClusterOnTrackCreator > m_cscRotCreator
Gaudi::Property< bool > m_addElossID
ServiceHandle< Muon::IMuonEDMHelperSvc > m_edmHelperSvc
Gaudi::Property< double > m_lineMomentum
ToolHandle< Trk::IPropagator > m_propagatorSL
std::atomic_uint m_countBeamAxis
void appendSelectedTSOS(Trk::TrackStates &trackStateOnSurfaces, Trk::TrackStates::const_iterator begin, Trk::TrackStates::const_iterator end) const
Gaudi::Property< double > m_largeImpact
ToolHandle< Trk::IExtrapolator > m_extrapolator
virtual StatusCode initialize() override
PublicToolHandle< Muon::IMuonAlignmentUncertTool > m_alignUncertTool_theta
ToolHandles to retrieve the uncertainties for theta and phi for the scattering uncertainties.
virtual std::unique_ptr< Trk::Track > standaloneFit(const EventContext &ctx, const Trk::Track &spectrometerTrack, const Amg::Vector3D &bs, const Trk::Vertex *vertex) const override
ICombinedMuonTrackBuilder interface: propagate to perigee adding calo energy-loss and material to MS ...
Gaudi::Property< bool > m_useRefitTrackError
Gaudi::Property< bool > m_refineELossStandAloneTrackFit
Gaudi::Property< double > m_vertex3DSigmaZ
Gaudi::Property< bool > m_perigeeAtSpectrometerEntrance
std::unique_ptr< Trk::TrackStateOnSurface > createPhiPseudoMeasurement(const EventContext &ctx, const Trk::Track &track) const
Gaudi::Property< bool > m_reallocateMaterial
std::unique_ptr< Trk::TrackStateOnSurface > entrancePerigee(const EventContext &ctx, const Trk::TrackParameters *parameters) const
void replaceCaloEnergy(const CaloEnergy *caloEnergy, Trk::Track *track) const
std::vector< std::unique_ptr< const Trk::TrackStateOnSurface > > createSpectrometerTSOS(const EventContext &ctx, const Trk::Track &spectrometerTrack) const
virtual std::unique_ptr< Trk::Track > combinedFit(const EventContext &ctx, const Trk::Track &indetTrack, const Trk::Track &extrapolatedTrack, const Trk::Track &spectrometerTrack) const override
ICombinedMuonTrackBuilder interface: build and fit combined ID/Calo/MS track.
virtual ~CombinedMuonTrackBuilder()
ToolHandle< Rec::IMuidCaloEnergy > m_caloEnergyParam
PublicToolHandle< Muon::IMuonAlignmentUncertTool > m_alignUncertTool_phi
std::unique_ptr< Trk::Track > createIndetTrack(const Trk::TrackInfo &info, const Trk::TrackStates *tsos) const
void dumpCaloEloss(const Trk::Track *track, const std::string &txt) const
std::atomic_uint m_countDegradedStandaloneFit
const Trk::TrackingVolume * getVolume(const EventContext &ctx, const std::string &&vol_name) const
Gaudi::Property< bool > m_refineELossCombinedTrackFit
std::unique_ptr< Trk::Track > reallocateMaterial(const EventContext &ctx, const Trk::Track &spectrometerTrack) const
Gaudi::Property< bool > m_iterateCombinedTrackFit
Gaudi::Property< bool > m_cleanStandalone
const CaloEnergy * caloEnergyParameters(const Trk::Track *combinedTrack, const Trk::Track *muonTrack, const Trk::TrackParameters *&combinedEnergyParameters, const Trk::TrackParameters *&muonEnergyParameters) const
SG::ReadCondHandleKey< Trk::TrackingGeometry > m_trackingGeometryReadKey
std::unique_ptr< Trk::Track > addIDMSerrors(const Trk::Track *track) const
ToolHandle< Muon::IMdtDriftCircleOnTrackCreator > m_mdtRotCreator
std::vector< std::unique_ptr< const Trk::TrackStateOnSurface > > getCaloTSOSfromMatProvider(const Trk::TrackParameters &track_params, const Trk::Track &me_track) const
Helper method to retrieve the CaloTSO from the Material provider in a memory safe way.
Gaudi::Property< bool > m_addIDMSerrors
std::unique_ptr< const Trk::RecVertex > m_beamAxis
Gaudi::Property< double > m_largeMomentumChange
std::unique_ptr< const Trk::RecVertex > m_vertex
Gaudi::Property< double > m_vertex2DSigmaZ
Gaudi::Property< double > m_largeMomentumError
std::atomic_uint m_countVertexRegion
std::unique_ptr< const Trk::PerigeeSurface > m_perigeeSurface
std::unique_ptr< Trk::Track > createExtrapolatedTrack(const EventContext &ctx, const Trk::Track &spectrometerTrack, const Trk::TrackParameters ¶meters, Trk::ParticleHypothesis particleHypothesis, Trk::RunOutlierRemoval runOutlier, const std::vector< std::unique_ptr< const Trk::TrackStateOnSurface > > &trackStateOnSurfaces, const Trk::RecVertex *vertex, const Trk::RecVertex *mbeamAxis, const Trk::PerigeeSurface *mperigeeSurface, const Trk::Perigee *seedParameter=nullptr) const
Gaudi::Property< double > m_largePhiError
Trk::MagneticFieldProperties m_magFieldProperties
Gaudi::Property< double > m_lowMomentum
Gaudi::Property< double > m_vertex3DSigmaRPhi
virtual std::unique_ptr< Trk::Track > standaloneRefit(const EventContext &ctx, const Trk::Track &combinedTrack, const Amg::Vector3D &vec) const override
ICombinedMuonTrackBuilder interface: refit a track removing any indet measurements with optional addi...
virtual std::unique_ptr< Trk::Track > indetExtension(const EventContext &ctx, const Trk::Track &indetTrack, const Trk::MeasurementSet &spectrometerMeas, std::unique_ptr< Trk::TrackParameters > innerParameters, std::unique_ptr< Trk::TrackParameters > middleParameters, std::unique_ptr< Trk::TrackParameters > outerParameters) const override
ICombinedMuonTrackBuilder interface: build and fit indet track extended to include MS Measurement set...
void momentumUpdate(std::unique_ptr< Trk::TrackParameters > ¶meters, double updatedP, bool directionUpdate=false, double deltaPhi=0., double deltaTheta=0.) const
void finalTrackBuild(const EventContext &ctx, std::unique_ptr< Trk::Track > &track) const
CombinedMuonTrackBuilder(const std::string &type, const std::string &name, const IInterface *parent)
Gaudi::Property< double > m_minEnergy
Gaudi::Property< bool > m_cleanCombined
Gaudi::Property< double > m_numberSigmaFSR
std::unique_ptr< Trk::TrackParameters > extrapolatedParameters(const EventContext &ctx, bool &badlyDeterminedCurvature, const Trk::Track &spectrometerTrack, const Trk::RecVertex *mvertex, const Trk::PerigeeSurface *mperigeeSurface) const
std::atomic_uint m_countAcceptedStandaloneFit
Gaudi::Property< double > m_vertex2DSigmaRPhi
ToolHandle< Muon::IMuonClusterOnTrackCreator > m_muClusterRotCreator
Interface ID for ICombinedMuonTrackBuilder.
magnetic field properties to steer the behavior of the extrapolation
Class describing the Line to which the Perigee refers to.
Class to handle pseudo-measurements in fitters and on track objects.
Trk::RecVertex inherits from Trk::Vertex.
Contains information about the 'fitter' of this track.
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,...
This class is a simplest representation of a vertex candidate.
Eigen::Matrix< double, 3, 1 > Vector3D
Ensure that the ATLAS eigen extensions are properly loaded.
std::vector< const MeasurementBase * > MeasurementSet
vector of fittable measurements
DataVector< const Trk::TrackStateOnSurface > TrackStates
ParametersT< TrackParametersDim, Charged, PerigeeSurface > Perigee
bool RunOutlierRemoval
switch to toggle quality processing after fit
@ FullField
Field is set to be realistic, but within a given Volume.
ParticleHypothesis
Enumeration for Particle hypothesis respecting the interaction with material.
ParametersBase< TrackParametersDim, Charged > TrackParameters