|
ATLAS Offline Software
|
#include <CombinedMuonTrackBuilder.h>
|
| CombinedMuonTrackBuilder (const std::string &type, const std::string &name, const IInterface *parent) |
|
virtual | ~CombinedMuonTrackBuilder () |
|
virtual StatusCode | initialize () override |
|
virtual StatusCode | finalize () override |
|
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. More...
|
|
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. More...
|
|
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 track. More...
|
|
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 addition of pseudoMeasurements. More...
|
|
virtual std::unique_ptr< Trk::Track > | fit (const EventContext &ctx, const Trk::Track &track, const Trk::RunOutlierRemoval runOutlier, const Trk::ParticleHypothesis particleHypothesis) const override |
|
ServiceHandle< StoreGateSvc > & | evtStore () |
| The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc . More...
|
|
const ServiceHandle< StoreGateSvc > & | evtStore () const |
| The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc . More...
|
|
const ServiceHandle< StoreGateSvc > & | detStore () const |
| The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc . More...
|
|
virtual StatusCode | sysInitialize () override |
| Perform system initialization for an algorithm. More...
|
|
virtual StatusCode | sysStart () override |
| Handle START transition. More...
|
|
virtual std::vector< Gaudi::DataHandle * > | inputHandles () const override |
| Return this algorithm's input handles. More...
|
|
virtual std::vector< Gaudi::DataHandle * > | outputHandles () const override |
| Return this algorithm's output handles. More...
|
|
Gaudi::Details::PropertyBase & | declareProperty (Gaudi::Property< T > &t) |
|
Gaudi::Details::PropertyBase * | declareProperty (const std::string &name, SG::VarHandleKey &hndl, const std::string &doc, const SG::VarHandleKeyType &) |
| Declare a new Gaudi property. More...
|
|
Gaudi::Details::PropertyBase * | declareProperty (const std::string &name, SG::VarHandleBase &hndl, const std::string &doc, const SG::VarHandleType &) |
| Declare a new Gaudi property. More...
|
|
Gaudi::Details::PropertyBase * | declareProperty (const std::string &name, SG::VarHandleKeyArray &hndArr, const std::string &doc, const SG::VarHandleKeyArrayType &) |
|
Gaudi::Details::PropertyBase * | declareProperty (const std::string &name, T &property, const std::string &doc, const SG::NotHandleType &) |
| Declare a new Gaudi property. More...
|
|
Gaudi::Details::PropertyBase * | declareProperty (const std::string &name, T &property, const std::string &doc="none") |
| Declare a new Gaudi property. More...
|
|
void | updateVHKA (Gaudi::Details::PropertyBase &) |
|
MsgStream & | msg () const |
|
MsgStream & | msg (const MSG::Level lvl) const |
|
bool | msgLvl (const MSG::Level lvl) const |
|
|
std::unique_ptr< Trk::Track > | fit (const EventContext &ctx, const Trk::MeasurementSet &measurementSet, const Trk::TrackParameters &perigeeStartValue, const Trk::RunOutlierRemoval runOutlier, const Trk::ParticleHypothesis particleHypothesis) const |
| fit a set of MeasurementBase objects with starting value for perigeeParameters More...
|
|
std::unique_ptr< Trk::Track > | fit (const EventContext &ctx, const Trk::Track &indetTrack, Trk::Track &extrapolatedTrack, const Trk::RunOutlierRemoval runOutlier, const Trk::ParticleHypothesis particleHypothesis) const |
| combined muon fit More...
|
|
double | normalizedChi2 (const Trk::Track &track) const |
|
bool | checkTrack (std::string_view txt, const Trk::Track *newTrack) const |
|
unsigned int | countAEOTs (const Trk::Track &track, const std::string &txt) const |
|
bool | loadMagneticField (const EventContext &ctx, MagField::AtlasFieldCache &field_cache) const |
|
void | renounceArray (SG::VarHandleKeyArray &handlesArray) |
| remove all handles from I/O resolution More...
|
|
std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > | renounce (T &h) |
|
void | extraDeps_update_handler (Gaudi::Details::PropertyBase &ExtraDeps) |
| Add StoreName to extra input/output deps as needed. More...
|
|
|
ToolHandle< Rec::IMuidCaloTrackStateOnSurface > | m_caloTSOS |
|
ToolHandle< Muon::IMuonErrorOptimisationTool > | m_muonErrorOptimizer |
|
PublicToolHandle< Muon::MuonEDMPrinterTool > | m_printer |
|
ToolHandle< Rec::IMuonTrackQuery > | m_trackQuery |
|
ToolHandle< Trk::ITrackSummaryTool > | m_trackSummary |
|
ToolHandle< Trk::ITrkMaterialProviderTool > | m_materialUpdator |
|
ServiceHandle< Muon::IMuonIdHelperSvc > | m_idHelperSvc {this, "MuonIdHelperSvc", "Muon::MuonIdHelperSvc/MuonIdHelperSvc"} |
|
Gaudi::Property< double > | m_badFitChi2 {this, "BadFitChi2", 2.5} |
|
Gaudi::Property< double > | m_zECToroid {this, "zECToroid", 10. * Gaudi::Units::meter} |
|
Gaudi::Property< bool > | m_updateWithCaloTG {this, "UpdateWithCaloTG", false} |
|
Gaudi::Property< bool > | m_useCaloTG {this, "UseCaloTG", false} |
|
std::unique_ptr< const Trk::Volume > | m_indetVolume {nullptr} |
|
std::unique_ptr< const Trk::Volume > | m_calorimeterVolume {nullptr} |
|
std::unique_ptr< MessageHelper > | m_messageHelper {std::make_unique<MessageHelper>(*this, 50)} |
|
|
std::unique_ptr< Trk::Track > | addIDMSerrors (const Trk::Track *track) const |
|
void | appendSelectedTSOS (Trk::TrackStates &trackStateOnSurfaces, Trk::TrackStates::const_iterator begin, Trk::TrackStates::const_iterator end) const |
|
const CaloEnergy * | caloEnergyParameters (const Trk::Track *combinedTrack, const Trk::Track *muonTrack, const Trk::TrackParameters *&combinedEnergyParameters, const Trk::TrackParameters *&muonEnergyParameters) const |
|
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 |
|
std::unique_ptr< Trk::Track > | createIndetTrack (const Trk::TrackInfo &info, const Trk::TrackStates *tsos) const |
|
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 track states into a new track --> m_materialUpdator as only tool called , but does not provide an interface method with ctx thus far. More...
|
|
std::unique_ptr< Trk::TrackStateOnSurface > | createPhiPseudoMeasurement (const EventContext &ctx, const Trk::Track &track) const |
|
std::vector< std::unique_ptr< const Trk::TrackStateOnSurface > > | createSpectrometerTSOS (const EventContext &ctx, const Trk::Track &spectrometerTrack) const |
|
std::unique_ptr< Trk::TrackStateOnSurface > | entrancePerigee (const EventContext &ctx, const Trk::TrackParameters *parameters) const |
|
std::unique_ptr< Trk::TrackParameters > | extrapolatedParameters (const EventContext &ctx, bool &badlyDeterminedCurvature, const Trk::Track &spectrometerTrack, const Trk::RecVertex *mvertex, const Trk::PerigeeSurface *mperigeeSurface) const |
|
void | finalTrackBuild (const EventContext &ctx, std::unique_ptr< Trk::Track > &track) const |
|
void | momentumUpdate (std::unique_ptr< Trk::TrackParameters > ¶meters, double updatedP, bool directionUpdate=false, double deltaPhi=0., double deltaTheta=0.) const |
|
std::unique_ptr< Trk::Track > | reallocateMaterial (const EventContext &ctx, const Trk::Track &spectrometerTrack) const |
|
void | replaceCaloEnergy (const CaloEnergy *caloEnergy, Trk::Track *track) const |
|
void | removeSpectrometerMaterial (std::unique_ptr< Trk::Track > &track) const |
|
void | dumpCaloEloss (const Trk::Track *track, const std::string &txt) const |
|
const Trk::TrackingVolume * | getVolume (const EventContext &ctx, const std::string &&vol_name) const |
|
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. More...
|
|
bool | optimizeErrors (const EventContext &ctx, Trk::Track &track) const |
|
Gaudi::Details::PropertyBase & | declareGaudiProperty (Gaudi::Property< T > &hndl, const SG::VarHandleKeyType &) |
| specialization for handling Gaudi::Property<SG::VarHandleKey> More...
|
|
Gaudi::Details::PropertyBase & | declareGaudiProperty (Gaudi::Property< T > &hndl, const SG::VarHandleKeyArrayType &) |
| specialization for handling Gaudi::Property<SG::VarHandleKeyArray> More...
|
|
Gaudi::Details::PropertyBase & | declareGaudiProperty (Gaudi::Property< T > &hndl, const SG::VarHandleType &) |
| specialization for handling Gaudi::Property<SG::VarHandleBase> More...
|
|
Gaudi::Details::PropertyBase & | declareGaudiProperty (Gaudi::Property< T > &t, const SG::NotHandleType &) |
| specialization for handling everything that's not a Gaudi::Property<SG::VarHandleKey> or a <SG::VarHandleKeyArray> More...
|
|
|
ToolHandle< Rec::IMuidCaloEnergy > | m_caloEnergyParam |
|
ToolHandle< Muon::IMuonClusterOnTrackCreator > | m_cscRotCreator |
|
ToolHandle< Muon::IMuonClusterOnTrackCreator > | m_muClusterRotCreator {this, "MuonRotCreator", ""} |
|
ToolHandle< Trk::IExtrapolator > | m_extrapolator |
|
ToolHandle< Trk::IMaterialAllocator > | m_materialAllocator |
|
ToolHandle< Muon::IMdtDriftCircleOnTrackCreator > | m_mdtRotCreator |
|
ToolHandle< Muon::IMuonHoleRecoveryTool > | m_muonHoleRecovery |
|
ToolHandle< Trk::IPropagator > | m_propagator |
|
ToolHandle< Trk::IPropagator > | m_propagatorSL |
|
PublicToolHandle< Muon::IMuonAlignmentUncertTool > | m_alignUncertTool_theta |
| ToolHandles to retrieve the uncertainties for theta and phi for the scattering uncertainties. More...
|
|
PublicToolHandle< Muon::IMuonAlignmentUncertTool > | m_alignUncertTool_phi |
|
ServiceHandle< Muon::IMuonEDMHelperSvc > | m_edmHelperSvc |
|
SG::ReadCondHandleKey< Trk::TrackingGeometry > | m_trackingGeometryReadKey |
|
Trk::MagneticFieldProperties | m_magFieldProperties {Trk::FullField} |
|
Gaudi::Property< bool > | m_cleanCombined {this, "CleanCombined", true} |
|
Gaudi::Property< bool > | m_cleanStandalone {this, "CleanStandalone", true} |
|
Gaudi::Property< bool > | m_perigeeAtSpectrometerEntrance {this, "PerigeeAtSpectrometerEntrance", false} |
|
Gaudi::Property< bool > | m_reallocateMaterial {this, "ReallocateMaterial", true} |
|
Gaudi::Property< double > | m_largeImpact {this, "LargeImpact", 100. * Gaudi::Units::mm} |
|
Gaudi::Property< double > | m_largeMomentumChange {this, "LargeMomentumChange", 0.05} |
|
Gaudi::Property< double > | m_largeMomentumError {this, "LargeMomentumError", 0.15} |
|
Gaudi::Property< double > | m_largePhiError {this, "LargePhiError", 0.020} |
|
Gaudi::Property< double > | m_lineMomentum {this, "LineMomentum", 2. * Gaudi::Units::GeV} |
|
Gaudi::Property< double > | m_lowMomentum {this, "LowMomentum", 10. * Gaudi::Units::GeV} |
|
Gaudi::Property< double > | m_minEnergy {this, "MinEnergy", 0.3 * Gaudi::Units::GeV} |
|
Gaudi::Property< double > | m_numberSigmaFSR {this, "NumberSigmaFSR", 2.5} |
|
Gaudi::Property< double > | m_vertex2DSigmaRPhi {this, "Vertex2DSigmaRPhi", 100. * Gaudi::Units::mm} |
|
Gaudi::Property< double > | m_vertex2DSigmaZ {this, "Vertex2DSigmaZ", 100. * Gaudi::Units::meter} |
|
Gaudi::Property< double > | m_vertex3DSigmaRPhi {this, "Vertex3DSigmaRPhi", 6. * Gaudi::Units::mm} |
|
Gaudi::Property< double > | m_vertex3DSigmaZ {this, "Vertex3DSigmaZ", 60. * Gaudi::Units::mm} |
|
bool | m_redoRots {false} |
|
std::unique_ptr< const Trk::RecVertex > | m_beamAxis |
|
std::unique_ptr< const Trk::PerigeeSurface > | m_perigeeSurface |
|
std::unique_ptr< const Trk::RecVertex > | m_vertex |
|
std::atomic_uint | m_countAcceptedStandaloneFit {0} |
|
std::atomic_uint | m_countBeamAxis {0} |
|
std::atomic_uint | m_countDegradedStandaloneFit {0} |
|
std::atomic_uint | m_countVertexRegion {0} |
|
Gaudi::Property< bool > | m_iterateCombinedTrackFit {this, "IterateCombinedTrackFit", false} |
|
Gaudi::Property< bool > | m_refineELossCombinedTrackFit {this, "RefineELossCombinedTrackFit", true} |
|
Gaudi::Property< bool > | m_refineELossStandAloneTrackFit {this, "RefineELossStandAloneTrackFit", true} |
|
Gaudi::Property< bool > | m_addElossID {this, "AddElossID", true} |
|
Gaudi::Property< bool > | m_addIDMSerrors {this, "AddIDMSerrors", true} |
|
Gaudi::Property< bool > | m_useRefitTrackError {this, "UseRefitTrackError", true} |
|
ToolHandle< Muon::IMuonTrackCleaner > | m_cleaner |
|
ToolHandle< Trk::ITrackFitter > | m_fitter |
|
ToolHandle< Trk::ITrackFitter > | m_fitterSL |
|
SG::ReadCondHandleKey< AtlasFieldCacheCondObj > | m_fieldCacheCondObjInputKey |
|
ServiceHandle< Trk::ITrackingVolumesSvc > | m_trackingVolumesSvc {this, "TrackingVolumesSvc", "TrackingVolumesSvc/TrackingVolumesSvc"} |
|
Gaudi::Property< bool > | m_allowCleanerVeto {this, "AllowCleanerVeto", true} |
|
Gaudi::Property< unsigned > | m_maxWarnings |
|
std::atomic_uint | m_countCombinedCleanerVeto {0} |
|
std::atomic_uint | m_countExtensionCleanerVeto {0} |
|
std::atomic_uint | m_countStandaloneCleanerVeto {0} |
|
StoreGateSvc_t | m_evtStore |
| Pointer to StoreGate (event store by default) More...
|
|
StoreGateSvc_t | m_detStore |
| Pointer to StoreGate (detector store by default) More...
|
|
std::vector< SG::VarHandleKeyArray * > | m_vhka |
|
bool | m_varHandleArraysDeclared |
|
Definition at line 62 of file CombinedMuonTrackBuilder.h.
◆ StoreGateSvc_t
◆ CombinedMuonTrackBuilder()
Rec::CombinedMuonTrackBuilder::CombinedMuonTrackBuilder |
( |
const std::string & |
type, |
|
|
const std::string & |
name, |
|
|
const IInterface * |
parent |
|
) |
| |
◆ ~CombinedMuonTrackBuilder()
Rec::CombinedMuonTrackBuilder::~CombinedMuonTrackBuilder |
( |
| ) |
|
|
virtual |
◆ addIDMSerrors()
Use pointer in the data vector to refer on the track
it can happen that no Calorimeter Scatterers are found.
Definition at line 1560 of file CombinedMuonTrackBuilder.cxx.
1569 ATH_MSG_DEBUG(
" CombinedMuonTrackBuilder addIDMSerrors to track ");
1579 if (!calo_entrance || !calo_exit || !ms_entrance) {
1584 auto trackStateOnSurfaces = std::make_unique<Trk::TrackStates>();
1585 trackStateOnSurfaces->reserve(
track->trackStateOnSurfaces()->size());
1588 if (calo_entrance == trk_srf || calo_entrance == trk_srf) {
1589 if (!trk_srf->materialEffectsOnTrack()) {
1596 ATH_MSG_WARNING(
" This should not happen: no MaterialEffectsOnTrack for scatterer ");
1601 ATH_MSG_WARNING(
" This should not happen: no Scattering Angles for scatterer ");
1607 float X0 = trk_srf->materialEffectsOnTrack()->thicknessInX0();
1609 auto energyLossNew = std::make_unique<Trk::EnergyLoss>(0., 0., 0., 0.);
1612 const Trk::Surface& surfNew = trk_srf->trackParameters()->associatedSurface();
1614 std::bitset<Trk::MaterialEffectsBase::NumberOfMaterialEffectsTypes> meotPattern(0);
1618 auto meotNew = std::make_unique<Trk::MaterialEffectsOnTrack>(
1621 std::move(energyLossNew),
1624 auto parsNew = trk_srf->trackParameters()->uniqueClone();
1626 std::bitset<Trk::TrackStateOnSurface::NumberOfTrackStateOnSurfaceTypes> typePatternScat(0);
1631 trackStateOnSurfaces->push_back(newTSOS);
1636 ATH_MSG_DEBUG(
" new Calo scatterer made with sigmaDeltaPhi mrad " << sigmaDeltaPhi * 1000 <<
" sigmaDeltaTheta mrad "
1637 << sigmaDeltaTheta * 1000);
1641 if (trk_srf->alignmentEffectsOnTrack()) {
1642 ATH_MSG_DEBUG(
" addIDMSerrors alignmentEffectsOnTrack() found on track ");
1645 trackStateOnSurfaces->push_back(trk_srf->clone());
1648 ATH_MSG_DEBUG(
" trackStateOnSurfaces on input track " <<
track->trackStateOnSurfaces()->size() <<
" trackStateOnSurfaces found "
1649 << trackStateOnSurfaces->size());
1651 std::unique_ptr<Trk::Track> newTrack = std::make_unique<Trk::Track>(
track->info(), std::move(trackStateOnSurfaces),
nullptr);
◆ appendSelectedTSOS()
Definition at line 1655 of file CombinedMuonTrackBuilder.cxx.
1658 std::vector<const Trk::Surface*> measurementSurfaces;
1659 measurementSurfaces.reserve(trackStateOnSurfaces.
size());
1663 for (;
s !=
end; ++
s) {
1671 ATH_MSG_VERBOSE(
"appendSelectedTSOS:: skip a perigee without material and measuremet "<<tsos);
1685 if (previousSurface &&
1686 std::find(measurementSurfaces.begin(), measurementSurfaces.end(), surface) != measurementSurfaces.end()) {
1692 measurementSurfaces.push_back(surface);
1693 previousSurface = surface;
◆ caloEnergyParameters()
Definition at line 1699 of file CombinedMuonTrackBuilder.cxx.
1703 combinedEnergyParameters =
nullptr;
1704 muonEnergyParameters =
nullptr;
1719 muonEnergyParameters = (**s).trackParameters();
1731 combinedEnergyParameters = (**s).trackParameters();
1732 if (muonEnergyParameters && combinedEnergyParameters) {
1733 ATH_MSG_DEBUG(
"muon and combined EnergyParameters: " << muonEnergyParameters->
momentum().mag() <<
" "
1734 << combinedEnergyParameters->
momentum().mag());
◆ checkTrack()
bool Rec::CombinedMuonTrackFitter::checkTrack |
( |
std::string_view |
txt, |
|
|
const Trk::Track * |
newTrack |
|
) |
| const |
|
protectedinherited |
Check that the combined track contains enough MS measurements
Definition at line 603 of file CombinedMuonTrackFitter.cxx.
604 if (!newTrack)
return false;
610 if ((*it)->position().dot((*it)->momentum()) < 0) {
612 ATH_MSG_DEBUG(txt <<
" "<< __FILE__<<
":"<<__LINE__<<
" ALARM position " << (*it)->position() <<
" direction " << (*it)->momentum().unit());
614 ATH_MSG_DEBUG(txt <<
" "<< __FILE__<<
":"<<__LINE__<<
" OK position " << (*it)->position() <<
" direction " << (*it)->momentum().unit());
618 if (!
par->covariance()) {
continue; }
620 ATH_MSG_DEBUG(txt<<
" "<<__FILE__<<
":"<<__LINE__<<
"covariance matrix has negative diagonal element, killing track "
625 unsigned int numberMS{0}, numberMSPrec{0};
629 for (;
r != rEnd; ++
r) {
631 if (tsos->trackParameters() &&
m_calorimeterVolume->inside(tsos->trackParameters()->position()))
break;
633 if (tsos->measurementOnTrack()) {
640 ATH_MSG_VERBOSE( txt<<
" "<<__FILE__<<
":"<<__LINE__<<
" "<< numberMS <<
"/"<< numberMSPrec<<
" fitted MS measurements ");
642 if (numberMS < 5 || numberMSPrec < 3) {
◆ combinedFit()
ICombinedMuonTrackBuilder interface: build and fit combined ID/Calo/MS track.
This should only happen if adding the ID/MS errors fails or the property is disabled
Final check to avoid FPEs later on
Implements Rec::ICombinedMuonTrackBuilder.
Definition at line 128 of file CombinedMuonTrackBuilder.cxx.
132 if (msgLevel(
MSG::DEBUG))
countAEOTs(extrapolatedTrack,
" extrapolatedTrack start combinedFit ");
144 if (
m_trackQuery->isCaloAssociated(extrapolatedTrack, ctx)) {
146 if (!
it->materialEffectsOnTrack())
continue;
148 const Amg::Vector3D& position =
it->materialEffectsOnTrack()->associatedSurface().globalReferencePoint();
153 surface = &
it->materialEffectsOnTrack()->associatedSurface();
165 std::unique_ptr<const Trk::TrackStateOnSurface> innerTSOS;
167 ATH_MSG_VERBOSE(
" Retrieving Calorimeter TSOS from " << __func__ <<
" at line " << __LINE__);
168 std::vector<std::unique_ptr<const Trk::TrackStateOnSurface>> caloTSOS =
170 if (!caloTSOS.empty()) { innerTSOS.swap(caloTSOS.front()); }
176 ATH_MSG_DEBUG(
" indet track fails to intersect the calorimeter ");
181 double surfaceOffset =
185 ATH_MSG_DEBUG(
" different inner-calo-surface obtained from indet extrapolation, "
187 <<
"mm. Re-evaluate the caloTSOS ");
193 std::unique_ptr<Trk::Track> muonTrack;
195 ATH_MSG_VERBOSE(
" SL MS track: Calling createMuonTrack from " << __func__ <<
" at line " << __LINE__);
202 ATH_MSG_VERBOSE(
"Calling createMuonTrack from " << __func__ <<
" at line " << __LINE__);
205 }
else if (
m_trackQuery->numberPseudoMeasurements(extrapolatedTrack) > 1) {
206 ATH_MSG_VERBOSE(
"Calling createMuonTrack from " << __func__ <<
" at line " << __LINE__);
210 ATH_MSG_VERBOSE(
"Calling createMuonTrack from " << __func__ <<
" at line " << __LINE__);
218 if (!muonTrack)
return nullptr;
226 bool haveMS {
false}, perigeeOutside{
false};
235 for (; rit != ritEnd; ++rit) {
236 if (!(**rit).measurementOnTrack() || !(**rit).trackParameters())
continue;
243 ATH_MSG_DEBUG(
"combinedFit:: fail with MS removed by cleaner");
255 perigeeOutside =
true;
278 double pRatio = muonEnergyParameters->momentum().mag() / combinedEnergyParameters->momentum().mag();
281 ATH_MSG_DEBUG(
" iterate combined fit to recollect calorimeter material as significant momentum change after fit "
282 << pRatio <<
", pT before " << muonEnergyParameters->momentum().perp() /
Gaudi::Units::GeV <<
", after "
285 ATH_MSG_DEBUG(
" iterate combined fit to recollect calorimeter material");
292 std::unique_ptr<Trk::Track> oldTrack(std::move(muonTrack));
294 ATH_MSG_VERBOSE(
"Calling createMuonTrack from " << __func__ <<
" at line " << __LINE__);
295 muonTrack =
createMuonTrack(ctx, extrapolatedTrack, combinedEnergyParameters,
nullptr, combinedTSOS);
297 if (indetNewTrack && muonTrack) {
299 caloEnergy =
caloEnergyParameters(refittedTrack.get(), muonTrack.get(), combinedEnergyParameters, muonEnergyParameters);
305 muonTrack.swap(oldTrack);
316 if (!indetPerigee->covariance()) {
317 ATH_MSG_WARNING(
" indetPerigee has no covariance tolerance left as zero. ");
323 double energyBalance = combinedEnergyParameters->momentum().mag() + caloEnergy->deltaE() - indetMaxE;
326 std::unique_ptr<CaloEnergy> paramEnergy;
327 if (indetMaxE > 0. && energyBalance >
m_numberSigmaFSR * caloEnergy->sigmaMinusDeltaE()) {
334 paramEnergy =
m_caloEnergyParam->energyLoss(ctx, combinedEnergyParameters->momentum().mag(),
335 combinedEnergyParameters->position().eta(),
336 combinedEnergyParameters->position().phi());
344 << energyBalance /
Gaudi::Units::GeV <<
" signif " << energyBalance / caloEnergy->sigmaMinusDeltaE()
349 << combinedEnergyParameters->position().eta() <<
" phi " << combinedEnergyParameters->position().phi()
350 <<
endmsg <<
" tail-param energy diff "
353 ATH_MSG_VERBOSE(
"Calling createMuonTrack from " << __func__ <<
" at line " << __LINE__);
386 dumpCaloEloss(newTrack.get(),
"CB input TSOS after refine IDMS ");
387 std::unique_ptr<Trk::Track> refittedTrack{
fit(ctx, *newTrack,
false,
Trk::muon)};
390 dumpCaloEloss(refittedTrack.get(),
"CB refit after refine IDMS ");
392 if (
checkTrack(
"combinedFit", refittedTrack.get())) {
401 ATH_MSG_DEBUG(
"addIDMS errors failed and original track does not pass checkTrack");
◆ countAEOTs()
unsigned int Rec::CombinedMuonTrackFitter::countAEOTs |
( |
const Trk::Track & |
track, |
|
|
const std::string & |
txt |
|
) |
| const |
|
protectedinherited |
Definition at line 649 of file CombinedMuonTrackFitter.cxx.
651 unsigned int naeots = 0;
658 for (
const auto*
m : *trackTSOS) {
659 if (
m &&
m->alignmentEffectsOnTrack()) naeots++;
667 int tsos{0}, nperigee{0};
676 if (
it->trackParameters()) {
678 <<
" r " <<
it->trackParameters()->position().perp() <<
" z "
679 <<
it->trackParameters()->position().z() <<
" momentum "
680 <<
it->trackParameters()->momentum().mag());
681 }
else if (
it->measurementOnTrack()) {
683 <<
" r " <<
it->measurementOnTrack()->associatedSurface().center().perp() <<
" z "
684 <<
it->measurementOnTrack()->associatedSurface().center().z());
685 }
else if (
it->materialEffectsOnTrack()) {
688 <<
it->materialEffectsOnTrack()->associatedSurface().globalReferencePoint().perp()
689 <<
" z " <<
it->materialEffectsOnTrack()->associatedSurface().globalReferencePoint().z());
◆ createExtrapolatedTrack()
Actually I am not certain whether the paramters need a clone or we can move them
Definition at line 1740 of file CombinedMuonTrackBuilder.cxx.
1749 std::vector<std::unique_ptr<const Trk::TrackStateOnSurface>> caloTSOS, leadingTSOS;
1751 std::unique_ptr<const Trk::TrackParameters> track_param_owner;
1758 trackParameters = perigee;
1765 bool haveMaterial{
false}, haveLeadingMaterial{
false}, firstMSHit{
false};
1767 for (
const std::unique_ptr<const Trk::TrackStateOnSurface>&
s : spectrometerTSOS) {
1768 if (
s->materialEffectsOnTrack()) {
1769 haveMaterial =
true;
1770 if (!firstMSHit) haveLeadingMaterial =
true;
1773 if (
s->measurementOnTrack() && !firstMSHit) { firstMSHit =
true; }
1775 if (haveMaterial && firstMSHit) {
break; }
1784 constexpr
double Emax = 50000.;
1793 std::unique_ptr<Trk::TrackParameters> correctedParameters{
parameters.associatedSurface().createUniqueTrackParameters(
1798 std::unique_ptr<std::vector<const Trk::TrackStateOnSurface*>> lead_tsos_from_alloc{
1800 if (lead_tsos_from_alloc) {
1803 if (!leadingTSOS.empty() && leadingTSOS.front()->trackParameters()) {
1804 leadingParameters = leadingTSOS.front()->trackParameters();
1810 bool caloAssociated =
false;
1813 ATH_MSG_VERBOSE(
" Retrieving Calorimeter TSOS from " << __func__ <<
" at line " << __LINE__);
1819 for (std::unique_ptr<const Trk::TrackStateOnSurface>&
m : caloTSOS) {
1820 if (!
m->materialEffectsOnTrack())
continue;
1823 double pcalo{0.}, deltaP{0.};
1824 if (!meot)
continue;
1830 if (!scatAngles) {
continue; }
1831 pcalo =
m->trackParameters()->momentum().mag();
1837 <<
" deltaTheta " << scatAngles->
deltaTheta() <<
" pull "
1841 if (!energyLoss)
continue;
1843 if (
m->trackParameters()) {
1844 ATH_MSG_DEBUG(
"Eloss found r " << (
m->trackParameters())->position().perp() <<
" z "
1845 << (
m->trackParameters())->position().z() <<
" deltaE "
1846 << energyLoss->
deltaE());
1850 double caloEloss = std::abs(energyLoss->
deltaE());
1851 if (
m->trackParameters()) { deltaP =
m->trackParameters()->momentum().mag() - pcalo; }
1853 ATH_MSG_DEBUG(
" Calorimeter Deposit " << caloEloss <<
" pcalo Entrance " << pcalo <<
" deltaP " << deltaP);
1858 caloTSOS =
m_caloTSOS->caloTSOS(ctx, *leadingParameters);
1861 if (caloTSOS.size() > 2) {
1862 caloAssociated =
true;
1870 caloTSOS.push_back(std::move(tsos));
1873 caloAssociated =
true;
1874 caloTSOS.push_back(std::move(tsos));
1877 ATH_MSG_VERBOSE(
"Special non-muon case for calo: " << caloAssociated);
1881 if (caloAssociated) {
1890 if(not oldParameters->covariance()) {
ATH_MSG_VERBOSE(
" createExtrapolatedTrack: no cov (0)"); }
1899 trackParameters = track_param_owner.get();
1902 if (trackParameters && !
m_indetVolume->inside(trackParameters->position())) {
1903 ATH_MSG_DEBUG(
" back extrapolation problem: probably outside indet volume ");
1904 caloAssociated =
false;
1907 if (trackParameters && !trackParameters->covariance()) {
ATH_MSG_VERBOSE(
" createExtrapolatedTrack: no cov (1)"); }
1909 if (trackParameters) {
1910 ATH_MSG_VERBOSE(
" Seed parameter: r " << trackParameters->position().perp() <<
" z " << trackParameters->position().z()
1911 <<
" pt " << trackParameters->momentum().perp());
1917 ATH_MSG_DEBUG(
" back extrapolation problem: retry with tracking out from vertex ");
1924 track_param_owner = std::make_unique<Trk::Perigee>(
vertex->position(),
momentum, 1., *mperigeeSurface);
1925 trackParameters = track_param_owner.get();
1929 ATH_MSG_VERBOSE(
" Retriving Calorimeter TSOS from " << __func__ <<
" at line " << __LINE__);
1934 std::unique_ptr<const Trk::TrackStateOnSurface> tsos =
m_caloTSOS->innerTSOS(ctx, *trackParameters);
1936 caloTSOS.push_back(std::move(tsos));
1937 tsos =
m_caloTSOS->outerTSOS(ctx, *trackParameters);
1939 caloTSOS.push_back(std::move(tsos));
1941 track_param_owner.reset();
1945 trackParameters = track_param_owner.get();
1949 if (!trackParameters || caloTSOS.empty()) {
1956 if (seedParameters) { trackParameters = seedParameters; }
1960 const unsigned int size = spectrometerTSOS.size() + 3 + caloTSOS.size() + leadingTSOS.size();
1962 auto trackStateOnSurfaces = std::make_unique<Trk::TrackStates>();
1963 trackStateOnSurfaces->reserve(
size);
1967 if (trackParameters && !trackParameters->covariance()) {
ATH_MSG_VERBOSE(
" createExtrapolatedTrack: no cov (2)"); }
1969 if (trackParameters) {
1971 ATH_MSG_DEBUG(
"createExtrapolatedTrack() - Track parameters are not perigee " << (*trackParameters));
1977 if (
vertex && trackParameters) {
1978 std::unique_ptr<Trk::PseudoMeasurementOnTrack> vertexInFit =
vertexOnTrack(*trackParameters,
vertex, mbeamAxis);
1986 for (std::unique_ptr<const Trk::TrackStateOnSurface>& c_tsos : caloTSOS) { trackStateOnSurfaces->push_back(std::move(c_tsos)); }
1991 const Trk::TrackParameters* mstrackParameters = trackStateOnSurfaces->back()->trackParameters();
1993 if (!mstrackParameters) { mstrackParameters = spectrometerTSOS.front()->
trackParameters(); }
1995 if (mstrackParameters) {
1996 std::unique_ptr<Trk::TrackStateOnSurface> entranceTSOS =
entrancePerigee(ctx, mstrackParameters);
1997 if (entranceTSOS) { trackStateOnSurfaces->push_back(std::move(entranceTSOS)); }
2002 for (std::unique_ptr<const Trk::TrackStateOnSurface>& c_tsos : leadingTSOS) {
2003 if (c_tsos->materialEffectsOnTrack()) { trackStateOnSurfaces->push_back(std::move(c_tsos)); }
2005 leadingTSOS.clear();
2008 for (
const auto&
s : spectrometerTSOS) {
2011 trackStateOnSurfaces->push_back(
s->clone());
2020 std::unique_ptr<Trk::Track>
track =
2021 std::make_unique<Trk::Track>(spectrometerTrack.
info(), std::move(trackStateOnSurfaces),
nullptr);
2023 if (!
track->perigeeParameters()) {
2039 :
"usig interacting hypothesis"));
2041 std::unique_ptr<Trk::Track> fittedTrack{
fit(ctx, *
track, runOutlier, particleHypothesis)};
2046 if (fittedTrack->perigeeParameters() && !
m_indetVolume->inside(fittedTrack->perigeeParameters()->position())) {
2047 ATH_MSG_DEBUG(
" back extrapolation problem: fitted perigee outside indet volume ");
◆ createIndetTrack()
Definition at line 2064 of file CombinedMuonTrackBuilder.cxx.
2067 auto trackStateOnSurfaces = std::make_unique<Trk::TrackStates>();
2077 std::unique_ptr<Trk::TrackStateOnSurface> perigeeTSOS {(**s).clone()};
2080 for (;
s !=
end; ++
s) {
2082 if (!
m_indetVolume->inside((**s).trackParameters()->position())) {
break; }
2086 trackStateOnSurfaces->reserve(
size);
2087 trackStateOnSurfaces->push_back(std::move(perigeeTSOS));
2092 return std::make_unique<Trk::Track>(
info, std::move(trackStateOnSurfaces),
nullptr);
◆ createMuonTrack()
Summarizes the available information about the ID track, the deposited calorimeter energies and the track states into a new track --> m_materialUpdator as only tool called , but does not provide an interface method with ctx thus far.
Check that the perigee parameters exist
Move the perigee to the front
Definition at line 2095 of file CombinedMuonTrackBuilder.cxx.
2107 while ((**s).trackParameters() &&
2109 if (
m_indetVolume->inside((**s).trackParameters()->position())) { lastIDtp = (**s).trackParameters(); }
2115 auto trackStateOnSurfaces = std::make_unique<Trk::TrackStates>();
2118 bool redoCaloAssoc =
false;
2120 redoCaloAssoc =
true;
2123 while ((**s).trackParameters() &&
2130 std::vector<std::unique_ptr<const Trk::TrackStateOnSurface>> caloTSOS;
2133 ATH_MSG_VERBOSE(
" Retriving Calorimeter TSOS from " << __func__ <<
" at line " << __LINE__);
2139 if (caloTSOS.size() < 3) {
2140 ATH_MSG_DEBUG(
" muonTrack: parameters fail to fully intersect the calorimeter");
2144 size += caloTSOS.size();
2145 trackStateOnSurfaces->reserve(
size + 1);
2148 for (std::unique_ptr<const Trk::TrackStateOnSurface>& c_tsos : caloTSOS) { trackStateOnSurfaces->push_back(std::move(c_tsos)); }
2151 trackStateOnSurfaces->reserve(
size + 1);
2156 if (caloEnergy && (**s).trackParameters() &&
m_calorimeterVolume->inside((**s).trackParameters()->position())) {
2158 trackStateOnSurfaces->push_back(TSOS);
2162 if ((**s).trackParameters() &&
m_calorimeterVolume->inside((**s).trackParameters()->position())) {
2163 std::bitset<Trk::MaterialEffectsBase::NumberOfMaterialEffectsTypes> typePattern;
2166 std::unique_ptr<Trk::MaterialEffectsOnTrack> materialEffects =
2167 std::make_unique<Trk::MaterialEffectsOnTrack>(0., std::move(caloEnergy), (**s).trackParameters()->associatedSurface(), typePattern);
2171 std::bitset<Trk::TrackStateOnSurface::NumberOfTrackStateOnSurfaceTypes>
type;
2175 trackStateOnSurfaces->push_back(TSOS);
2184 bool hasAlreadyPerigee =
false;
2187 while ((**s).trackParameters() &&
m_calorimeterVolume->inside((**s).trackParameters()->position())) {
2190 trackStateOnSurfaces->push_back(TSOS);
2196 std::unique_ptr<Trk::TrackStateOnSurface> entranceTSOS;
2200 if (!hasAlreadyPerigee) {
2201 if ((**s).trackParameters()) {
2204 entranceTSOS =
entrancePerigee(ctx, trackStateOnSurfaces->back()->trackParameters());
2213 << (**s).trackParameters()->position().perp() <<
" z " << (**s).trackParameters()->position().z());
2215 trackStateOnSurfaces->push_back(std::move(entranceTSOS));
2216 hasAlreadyPerigee =
true;
2225 if (!hasAlreadyPerigee && std::find_if(trackStateOnSurfaces->begin(), trackStateOnSurfaces->end(),
2227 return tsos->type(Trk::TrackStateOnSurface::Perigee);
2231 std::stable_sort(trackStateOnSurfaces->begin(),trackStateOnSurfaces->end(),
2233 return a->type(Trk::TrackStateOnSurface::Perigee) > b->type(Trk::TrackStateOnSurface::Perigee);
2235 ATH_MSG_DEBUG(__FILE__<<
":"<<__LINE__<<
" No track perigee parameters were added. Copy the existing ones from the muon track");
2237 std::unique_ptr<Trk::Track> newMuonTrack = std::make_unique<Trk::Track>(muonTrack.
info(), std::move(trackStateOnSurfaces),
nullptr);
2238 unsigned int num_ms{0}, num_precMS{0};
2245 if (num_precMS < 3 || num_ms < 5) {
2246 ATH_MSG_VERBOSE(__FILE__
":"<<__LINE__<<
" MS track with too few meausrements constructed "<<std::endl<<
2256 return newMuonTrack;
◆ createPhiPseudoMeasurement()
Definition at line 2259 of file CombinedMuonTrackBuilder.cxx.
2263 covarianceMatrix.setZero();
2264 covarianceMatrix(0, 0) = s_sigmaPhiSector * s_sigmaPhiSector *
parameters->position().perp2();
2266 std::unique_ptr<Trk::PseudoMeasurementOnTrack> pseudo = std::make_unique<Trk::PseudoMeasurementOnTrack>(
2268 std::move(covarianceMatrix),
◆ createSpectrometerTSOS()
Definition at line 2274 of file CombinedMuonTrackBuilder.cxx.
2277 std::vector<std::unique_ptr<const Trk::TrackStateOnSurface>> spectrometerTSOS;
2281 if (!measuredPerigee)
2283 else if (!measuredPerigee->covariance())
2286 ATH_MSG_DEBUG(
"createSpectrometerTSOS::perigee covariance not valid");
2287 return spectrometerTSOS;
2296 unsigned numberPseudo =
m_trackQuery->numberPseudoMeasurements(spectrometerTrack);
2297 if (errorPhi > s_sigmaPhiSector) { ++numberPseudo; }
2299 if (numberPseudo > 1 && !
m_trackQuery->isSectorOverlap(spectrometerTrack)) {
2303 if (tsos) { spectrometerTSOS.emplace_back(std::move(tsos)); }
2308 bool haveMeasurement =
false;
2310 std::vector<const Trk::Surface*> measurementSurfaces;
2313 unsigned numberMaterial{0}, numberParameters{0};
2316 std::unique_ptr<const Trk::TrackStateOnSurface> previousTSOS;
2320 if (!haveMeasurement) {
2321 if (
s->measurementOnTrack()) {
2322 haveMeasurement =
true;
2323 }
else if (
s->materialEffectsOnTrack()) {
2331 if (
s->materialEffectsOnTrack()) ++numberMaterial;
2332 if (trackParameters) ++numberParameters;
2336 if (!
s->measurementOnTrack() && !
s->materialEffectsOnTrack()) {
2343 if (
s->trackParameters()) {
2344 ATH_MSG_DEBUG(
"createSpectrometerTSOS:: skip unrecognized TSOS " <<
s->dumpType() <<
" r "
2345 <<
s->trackParameters()->position().perp() <<
" z "
2346 <<
s->trackParameters()->position().z());
2355 bool trapezoid =
false;
2356 bool rotatedTrap =
false;
2357 if (
s->measurementOnTrack()) {
2364 const Trk::Surface* surface = &
s->measurementOnTrack()->associatedSurface();
2366 if (previousSurface) {
deltaZ = std::abs(previousSurface->
center().z() - surface->
center().z()); }
2377 if (previousSurface &&
2378 std::find(measurementSurfaces.begin(), measurementSurfaces.end(), surface) != measurementSurfaces.end()) {
2383 measurementSurfaces.push_back(surface);
2384 previousSurface = surface;
2386 }
else if (previousTSOS) {
2387 spectrometerTSOS.emplace_back(std::move(previousTSOS));
2391 std::unique_ptr<const Trk::TrackStateOnSurface> TSOS(
s->clone());
2395 spectrometerTSOS.emplace_back(std::move(TSOS));
2396 TSOS = std::move(previousTSOS);
2398 spectrometerTSOS.emplace_back(std::move(previousTSOS));
2403 previousTSOS.swap(TSOS);
2407 spectrometerTSOS.emplace_back(std::move(TSOS));
2410 if (previousTSOS) spectrometerTSOS.emplace_back(std::move(previousTSOS));
2413 << numberMaterial <<
" have MaterialEffects and " << numberParameters
2414 <<
" have TrackParameters");
2416 return spectrometerTSOS;
◆ declareGaudiProperty() [1/4]
specialization for handling Gaudi::Property<SG::VarHandleKeyArray>
Definition at line 170 of file AthCommonDataStore.h.
175 hndl.documentation());
◆ declareGaudiProperty() [2/4]
specialization for handling Gaudi::Property<SG::VarHandleKey>
Definition at line 156 of file AthCommonDataStore.h.
161 hndl.documentation());
◆ declareGaudiProperty() [3/4]
specialization for handling Gaudi::Property<SG::VarHandleBase>
Definition at line 184 of file AthCommonDataStore.h.
189 hndl.documentation());
◆ declareGaudiProperty() [4/4]
◆ declareProperty() [1/6]
Declare a new Gaudi property.
- Parameters
-
name | Name of the property. |
hndl | Object holding the property value. |
doc | Documentation string for the property. |
This is the version for types that derive from SG::VarHandleBase
. The property value object is put on the input and output lists as appropriate; then we forward to the base class.
Definition at line 245 of file AthCommonDataStore.h.
250 this->declare(hndl.
vhKey());
251 hndl.
vhKey().setOwner(
this);
253 return PBASE::declareProperty(
name,hndl,
doc);
◆ declareProperty() [2/6]
Declare a new Gaudi property.
- Parameters
-
name | Name of the property. |
hndl | Object holding the property value. |
doc | Documentation string for the property. |
This is the version for types that derive from SG::VarHandleKey
. The property value object is put on the input and output lists as appropriate; then we forward to the base class.
Definition at line 221 of file AthCommonDataStore.h.
229 return PBASE::declareProperty(
name,hndl,
doc);
◆ declareProperty() [3/6]
◆ declareProperty() [4/6]
Declare a new Gaudi property.
- Parameters
-
name | Name of the property. |
property | Object holding the property value. |
doc | Documentation string for the property. |
This is the generic version, for types that do not derive from SG::VarHandleKey
. It just forwards to the base class version of declareProperty
.
Definition at line 333 of file AthCommonDataStore.h.
338 return PBASE::declareProperty(
name, property,
doc);
◆ declareProperty() [5/6]
Declare a new Gaudi property.
- Parameters
-
name | Name of the property. |
property | Object holding the property value. |
doc | Documentation string for the property. |
This dispatches to either the generic declareProperty
or the one for VarHandle/Key/KeyArray.
Definition at line 352 of file AthCommonDataStore.h.
◆ declareProperty() [6/6]
◆ detStore()
◆ dumpCaloEloss()
void Rec::CombinedMuonTrackBuilder::dumpCaloEloss |
( |
const Trk::Track * |
track, |
|
|
const std::string & |
txt |
|
) |
| const |
|
private |
Definition at line 3035 of file CombinedMuonTrackBuilder.cxx.
3054 double idEloss = 0.;
3055 double caloEloss = 0.;
3056 double msEloss = 0.;
3061 double pMuonEntry = 0.;
3063 for (
const auto*
m : *trackTSOS) {
3066 if (
m->trackParameters()) { pMuonEntry =
m->trackParameters()->momentum().mag(); }
3070 if (
id.is_valid()) {
3076 if (pstart == 0 &&
m->trackParameters()) {
3077 pstart =
m->trackParameters()->momentum().mag();
3078 eta =
m->trackParameters()->momentum().eta();
3080 ATH_MSG_DEBUG(
"Start pars found eta " << eta <<
" r " << (
m->trackParameters())->position().perp() <<
" z "
3081 << (
m->trackParameters())->position().z() <<
" pstart " << pstart);
3084 if (
m->materialEffectsOnTrack()) {
3094 pcalo =
m->trackParameters()->momentum().mag();
3100 << pullPhi <<
" deltaTheta (mrad) " << 1000 * scatAngles->
deltaTheta() <<
" sigma "
3107 if (
m->trackParameters()) {
3108 ATH_MSG_DEBUG(
"Eloss found r " << (
m->trackParameters())->position().perp() <<
" z "
3109 << (
m->trackParameters())->position().z() <<
" value " << energyLoss->
deltaE()
3110 <<
" Eloss " << Eloss);
3115 caloEloss = std::abs(energyLoss->
deltaE());
3118 if (
m->trackParameters()) { deltaP =
m->trackParameters()->momentum().mag() - pcalo; }
3123 ATH_MSG_DEBUG(txt <<
" Calorimeter delta p " << deltaP <<
" deltaE " << caloEloss
3124 <<
" delta pID = pcaloEntry-pstart " << pcalo - pstart);
3127 Eloss += std::abs(energyLoss->
deltaE());
3135 Eloss = idEloss + caloEloss + msEloss;
3138 <<
" caloEloss " << caloEloss <<
" msEloss " << msEloss <<
" Total " << Eloss <<
" pstart - pMuonEntry "
3139 << pstart - pMuonEntry);
◆ entrancePerigee()
Definition at line 2419 of file CombinedMuonTrackBuilder.cxx.
2423 if (!spectrometerEntrance)
return nullptr;
2425 std::unique_ptr<Trk::TrackParameters> entranceParameters{
2428 if (!entranceParameters)
return nullptr;
2431 std::unique_ptr<Trk::TrackParameters> trackParameters{
m_extrapolator->extrapolateDirectly(ctx, *entranceParameters, surface)};
2433 if (!trackParameters)
return nullptr;
2435 std::unique_ptr<Trk::Perigee> perigee =
2436 std::make_unique<Trk::Perigee>(trackParameters->position(), trackParameters->momentum(), trackParameters->charge(), std::move(surface));
◆ evtStore() [1/2]
◆ evtStore() [2/2]
◆ extraDeps_update_handler()
Add StoreName to extra input/output deps as needed.
use the logic of the VarHandleKey to parse the DataObjID keys supplied via the ExtraInputs and ExtraOuputs Properties to add the StoreName if it's not explicitly given
◆ extrapolatedParameters()
if (haveSpectrometerRefit) delete spectrometerFit;
Definition at line 2440 of file CombinedMuonTrackBuilder.cxx.
2443 badlyDeterminedCurvature =
false;
2446 if (!measuredPerigee || !measuredPerigee->covariance()) {
2460 double errorP = std::sqrt(measuredPerigee->momentum().mag2() * (*measuredPerigee->covariance())(
Trk::qOverP,
Trk::qOverP));
2463 std::unique_ptr<Trk::TrackParameters> correctedParameters{};
2465 double trackEnergy = 1. / std::abs(parameterVector[
Trk::qOverP]);
2479 bool curvatureOK =
false;
2496 std::unique_ptr<CaloEnergy> caloEnergy{
2499 if (trackEnergy + caloEnergy->deltaE() <
m_minEnergy) {
2505 correctedParameters =
parameters->associatedSurface().createUniqueTrackParameters(
2512 double spectrometerEnergyLoss = 0.;
2516 for (;
s != sEnd; ++
s) {
2517 if (!(**s).materialEffectsOnTrack()) {
continue; }
2524 if (std::abs(spectrometerEnergyLoss) > 1.5 * std::abs(caloEnergy->deltaE())) {
2525 curvatureOK =
false;
2526 ATH_MSG_DEBUG(
"standaloneFit: excessive energy loss in spectrometer "
2528 <<
" in calo " << std::abs(caloEnergy->deltaE() /
Gaudi::Units::GeV) <<
" GeV");
2535 std::unique_ptr<Trk::TrackParameters> perigee{propagator->
propagate(
2539 ATH_MSG_DEBUG(
"standaloneFit: failed back extrapolation to perigee");
2545 ATH_MSG_DEBUG(
"Track d0 perigee: " << std::abs(perigee->parameters()[
Trk::d0]) <<
" which is smaller than "
2551 double deltaR = (position - perigee->position()).
perp();
2568 correctedParameters =
parameters->associatedSurface().createUniqueTrackParameters(
2577 deltaR = (position - perigee->position()).
perp();
2583 ATH_MSG_VERBOSE(
"standaloneFit: corrected perigee impact " << perigee->parameters()[
Trk::d0] <<
" deltaR, deltaPhi "
2592 correctedParameters =
parameters->associatedSurface().createUniqueTrackParameters(
2605 correctedParameters =
parameters->associatedSurface().createUniqueTrackParameters(
2613 if (!perigee || !
m_indetVolume->inside(perigee->position())) {
2614 if (perigee && perigee->position().z() * perigee->momentum().z() < 0. && perigee->momentum().eta() > 2.0) {
2615 ATH_MSG_DEBUG(
"standaloneFit: halo candidate, perigee at R " << perigee->position().perp() <<
" Z "
2616 << perigee->position().z());
2618 ATH_MSG_DEBUG(
"standaloneFit: perigee outside indet volume");
2625 badlyDeterminedCurvature =
true;
2628 std::unique_ptr<const Trk::TrackParameters> trigParameters{
m_trackQuery->triggerStationParameters(spectrometerTrack, ctx)};
2633 if (trigParameters) {
2635 <<
" start with line from origin to 1st trigger station ");
2638 <<
" start with line from origin to 1st measurement ");
2642 std::unique_ptr<Trk::TrackParameters> perigee =
2643 std::make_unique<Trk::Perigee>(mvertex->
position(),
momentum, 1., *mperigeeSurface);
2649 ATH_MSG_DEBUG(
"standaloneFit: failed back extrapolation to perigee");
◆ finalize()
StatusCode Rec::CombinedMuonTrackBuilder::finalize |
( |
| ) |
|
|
overridevirtual |
◆ finalTrackBuild()
void Rec::CombinedMuonTrackBuilder::finalTrackBuild |
( |
const EventContext & |
ctx, |
|
|
std::unique_ptr< Trk::Track > & |
track |
|
) |
| const |
|
private |
◆ fit() [1/3]
fit a set of MeasurementBase objects with starting value for perigeeParameters
Definition at line 323 of file CombinedMuonTrackFitter.cxx.
330 std::stringstream
ss;
331 ss << particleHypothesis;
353 std::unique_ptr<Trk::TrackParameters> perigee = perigeeStartValue.
uniqueClone();
354 std::unique_ptr<Trk::PerigeeSurface> perigeeSurface;
358 perigeeSurface = std::make_unique<Trk::PerigeeSurface>(origin);
360 perigee = std::make_unique<Trk::Perigee>(perigeeStartValue.
position(), perigeeStartValue.
momentum(), perigeeStartValue.
charge(),
365 std::unique_ptr<Trk::Track> fittedTrack(
fitter->
fit(ctx, measurementSet, *perigee,
false, particleHypothesis));
367 if (!
checkTrack(
"fitInterface2", fittedTrack.get())) {
return nullptr; }
378 ATH_MSG_VERBOSE(
" perform spectrometer error optimization after cleaning ");
379 std::unique_ptr<Trk::Track> optimizedTrack =
m_muonErrorOptimizer->optimiseErrors(*fittedTrack, ctx);
380 if (
checkTrack(
"fitInterface2Opt", optimizedTrack.get())) {
381 fittedTrack.swap(optimizedTrack);
391 ATH_MSG_VERBOSE(__FILE__<<
":"<<__LINE__<<
" perform track cleaning... ");
395 std::unique_ptr<Trk::Track> cleanTrack =
m_cleaner->clean(*fittedTrack, ctx);
399 if (!
checkTrack(
"fitInterface2Cleaner", cleanTrack.get())) { cleanTrack.reset(); }
407 ATH_MSG_DEBUG(
" keep original extension track despite cleaner veto ");
409 }
else if (!(*cleanTrack->
perigeeParameters() == *fittedTrack->perigeeParameters())) {
411 if (chi2After <
m_badFitChi2 || chi2After < chi2Before) {
413 fittedTrack.swap(cleanTrack);
◆ fit() [2/3]
combined muon fit
Definition at line 427 of file CombinedMuonTrackFitter.cxx.
433 std::stringstream
ss;
434 ss << particleHypothesis;
466 <<
m_printer->print(indetTrack) << std::endl
469 std::unique_ptr<Trk::Track> fittedTrack(
fitter->
fit(ctx, indetTrack, extrapolatedTrack,
false, particleHypothesis));
471 if (!fittedTrack)
return nullptr;
478 ATH_MSG_VERBOSE(
" perform spectrometer error optimization after cleaning ");
479 std::unique_ptr<Trk::Track> optimizedTrack =
m_muonErrorOptimizer->optimiseErrors(*fittedTrack, ctx);
480 if (
checkTrack(
"Error opt", optimizedTrack.get()) &&
482 fittedTrack.swap(optimizedTrack);
491 ATH_MSG_VERBOSE(__FILE__<<
":"<<__LINE__<<
" perform track cleaning... " <<
m_printer->print(*fittedTrack) << std::endl
492 <<
m_printer->printStations(*fittedTrack));
495 std::unique_ptr<Trk::Track> cleanTrack =
m_cleaner->clean(*fittedTrack, ctx);
504 ATH_MSG_DEBUG(
" keep original combined track despite cleaner veto ");
506 }
else if (!(*cleanTrack->
perigeeParameters() == *fittedTrack->perigeeParameters())) {
508 if (chi2After <
m_badFitChi2 || chi2After < chi2Before) {
510 fittedTrack.swap(cleanTrack);
◆ fit() [3/3]
Implements Rec::ICombinedMuonTrackFitter.
Definition at line 154 of file CombinedMuonTrackFitter.cxx.
163 std::stringstream
ss;
164 ss << particleHypothesis;
188 std::unique_ptr<Trk::Track> fittedTrack = std::make_unique<Trk::Track>(
track);
189 if (isCombined && particleHypothesis ==
Trk::muon && !
m_trackQuery->isCaloAssociated(*fittedTrack, ctx)) {
193 auto combinedTSOS = std::make_unique<Trk::TrackStates>();
196 bool caloAssociated =
false;
200 ATH_MSG_VERBOSE(
"Updating Calorimeter TSOS in Muon Combined (re)Fit ...");
202 caloAssociated =
true;
206 if (caloAssociated) {
207 combinedTSOS->push_back(in_tsos->clone());
208 }
else if ((in_tsos->measurementOnTrack() &&
m_indetVolume->inside(in_tsos->measurementOnTrack()->globalPosition())) ||
209 (in_tsos->trackParameters() &&
m_indetVolume->inside(in_tsos->trackParameters()->position()))) {
210 combinedTSOS->push_back(in_tsos->clone());
214 combinedTSOS->push_back(std::move(tsos));
217 combinedTSOS->push_back(in_tsos->clone());
219 if (tsos) combinedTSOS->push_back(std::move(tsos));
222 if (tsos) combinedTSOS->push_back(std::move(tsos));
224 if (tsos) combinedTSOS->push_back(std::move(tsos));
225 combinedTSOS->push_back(in_tsos->clone());
228 caloAssociated =
true;
232 std::unique_ptr<Trk::Track>
combinedTrack = std::make_unique<Trk::Track>(fittedTrack->
info(), std::move(combinedTSOS),
nullptr);
240 ATH_MSG_VERBOSE(
"Updating Calorimeter TSOS in Muon Combined (re)Fit ...");
248 ATH_MSG_VERBOSE(
"Updating Calorimeter TSOS in Muon Standalone Fit ...");
253 fittedTrack =
fitter->
fit(ctx, *fittedTrack,
false, particleHypothesis);
257 if (!fittedTrack)
return nullptr;
260 if (!
checkTrack(
"fitInterface1", fittedTrack.get()))
return nullptr;
272 ATH_MSG_VERBOSE(
" perform spectrometer error optimization after cleaning ");
273 std::unique_ptr<Trk::Track> optimizedTrack =
m_muonErrorOptimizer->optimiseErrors(*fittedTrack, ctx);
274 if (
checkTrack(
"fitInterface1Opt", optimizedTrack.get()) && chi2BeforeOptimizer >
normalizedChi2(*optimizedTrack)) {
275 fittedTrack.swap(optimizedTrack);
284 ATH_MSG_VERBOSE(__FILE__<<
":"<<__LINE__<<
" perform track cleaning... " <<
m_printer->print(*fittedTrack) << std::endl
285 <<
m_printer->printStations(*fittedTrack));
289 std::unique_ptr<Trk::Track> cleanTrack =
m_cleaner->clean(*fittedTrack, ctx);
293 if (!
checkTrack(
"fitInterface1Cleaner", cleanTrack.get())) { cleanTrack.reset(); }
301 ATH_MSG_DEBUG(
" keep original standalone track despite cleaner veto ");
306 if (chi2After <
m_badFitChi2 || chi2After < chi2Before) {
308 fittedTrack.swap(cleanTrack);
317 <<
m_printer->printStations(*fittedTrack));
◆ getCaloTSOSfromMatProvider()
Helper method to retrieve the CaloTSO from the Material provider in a memory safe way.
Definition at line 3153 of file CombinedMuonTrackBuilder.cxx.
3155 std::vector<std::unique_ptr<const Trk::TrackStateOnSurface>> to_ret;
3156 std::unique_ptr<std::vector<const Trk::TrackStateOnSurface*>> tsos_vec{
m_materialUpdator->getCaloTSOS(track_params, me_track)};
3158 to_ret.reserve(tsos_vec->size());
◆ getVolume()
Tracking geometry is provided by the TrackingGeometryAlg
Definition at line 3144 of file CombinedMuonTrackBuilder.cxx.
3147 if (!handle.isValid()) {
3151 return handle.cptr()->trackingVolume(vol_name);
◆ indetExtension()
ICombinedMuonTrackBuilder interface: build and fit indet track extended to include MS Measurement set.
Adds material effects as appropriate plus calo energy-loss treatment
Need to check with Will whether this propagator is actually needed or not
Implements Rec::ICombinedMuonTrackBuilder.
Definition at line 409 of file CombinedMuonTrackBuilder.cxx.
418 if (innerParameters || middleParameters || outerParameters) {
421 if (innerParameters) {
423 << std::setw(5) << std::setprecision(0) << innerParameters->
position().z() <<
" ";
426 if (middleParameters) {
427 msg(
MSG::VERBOSE) <<
"M:" << std::setw(5) << std::setprecision(0) << middleParameters->
position().perp() <<
","
428 << std::setw(5) << std::setprecision(0) << middleParameters->
position().z() <<
" ";
431 if (outerParameters) {
433 << std::setw(5) << std::setprecision(0) << outerParameters->
position().z();
438 if (innerParameters) {
442 if (middleParameters) {
446 if (outerParameters) {
467 ATH_MSG_VERBOSE(
"indetExtension: method switched off when solenoid 'off' / toroid 'on'");
476 std::unique_ptr<Trk::TrackParameters> frontParameters, backParameters;
478 if (innerParameters) {
479 if (innerParameters->
associatedSurface() == spectrometerMeasurements.front()->associatedSurface()) {
483 frontParameters = propagator->
propagate(ctx, *innerParameters, spectrometerMeasurements.front()->associatedSurface(),
486 }
else if (middleParameters) {
487 if (middleParameters->
associatedSurface() == spectrometerMeasurements.front()->associatedSurface()) {
491 frontParameters = propagator->
propagate(ctx, *middleParameters, spectrometerMeasurements.front()->associatedSurface(),
496 if (outerParameters) {
497 if (outerParameters->
associatedSurface() == spectrometerMeasurements.back()->associatedSurface()) {
501 backParameters = propagator->
propagate(ctx, *outerParameters, spectrometerMeasurements.back()->associatedSurface(),
504 }
else if (middleParameters) {
505 if (middleParameters->
associatedSurface() == spectrometerMeasurements.back()->associatedSurface()) {
509 backParameters = propagator->
propagate(ctx, *middleParameters, spectrometerMeasurements.back()->associatedSurface(),
515 std::unique_ptr<Trk::TrackParameters> midParameters;
518 if (middleParameters && innerParameters && outerParameters) {
520 double midDistance = 0.5 * direction.dot(outerParameters->
position() - innerParameters->
position());
521 double previousDistance = 0.;
523 Trk::MeasurementSet::const_iterator
m = spectrometerMeasurements.begin();
524 for (++
m;
m != spectrometerMeasurements.end(); ++
m) {
525 double distance = direction.dot((**m).globalPosition() - innerParameters->
position());
529 if (midDistance - previousDistance <
distance - midDistance) --
m;
534 if (midParameters) midMeasurement = *
m;
541 std::bitset<Trk::TrackStateOnSurface::NumberOfTrackStateOnSurfaceTypes> typeM;
543 std::bitset<Trk::TrackStateOnSurface::NumberOfTrackStateOnSurfaceTypes> typeP;
547 auto trackStateOnSurfaces = std::make_unique<Trk::TrackStates>();
549 trackStateOnSurfaces->reserve(spectrometerMeasurements.size());
555 if (frontParameters) {
556 trackStateOnSurfaces->push_back(
558 }
else if (in_meas == midMeasurement) {
559 trackStateOnSurfaces->push_back(
561 }
else if (backParameters && in_meas == spectrometerMeasurements.back()) {
562 trackStateOnSurfaces->push_back(
565 trackStateOnSurfaces->push_back(
575 ATH_MSG_VERBOSE(
"Calling combinedFit from " << __func__ <<
" at line " << __LINE__);
◆ initialize()
StatusCode Rec::CombinedMuonTrackBuilder::initialize |
( |
| ) |
|
|
overridevirtual |
◆ inputHandles()
Return this algorithm's input handles.
We override this to include handle instances from key arrays if they have not yet been declared. See comments on updateVHKA.
◆ interfaceID() [1/2]
static const InterfaceID& Rec::ICombinedMuonTrackFitter::interfaceID |
( |
| ) |
|
|
inlinestaticinherited |
AlgTool and IAlgTool interface methods.
Definition at line 41 of file ICombinedMuonTrackFitter.h.
42 static const InterfaceID IID_ICombinedMuonTrackFitter(
"ICombinedMuonTrackFitter", 1, 0);
43 return IID_ICombinedMuonTrackFitter;
◆ interfaceID() [2/2]
static const InterfaceID& Rec::ICombinedMuonTrackBuilder::interfaceID |
( |
| ) |
|
|
inlinestaticinherited |
AlgTool and IAlgTool interface methods.
Definition at line 42 of file ICombinedMuonTrackBuilder.h.
43 static const InterfaceID IID_ICombinedMuonTrackBuilder(
"ICombinedMuonTrackBuilder", 1, 0);
44 return IID_ICombinedMuonTrackBuilder;
◆ loadMagneticField()
◆ momentumUpdate()
void Rec::CombinedMuonTrackBuilder::momentumUpdate |
( |
std::unique_ptr< Trk::TrackParameters > & |
parameters, |
|
|
double |
updatedP, |
|
|
bool |
directionUpdate = false , |
|
|
double |
deltaPhi = 0. , |
|
|
double |
deltaTheta = 0. |
|
) |
| const |
|
private |
Definition at line 2746 of file CombinedMuonTrackBuilder.cxx.
2750 std::unique_ptr<Trk::TrackParameters> updatedParameters;
2755 if (directionUpdate) {
2756 double cosDeltaPhi = 0.;
2759 if (std::abs(sinDeltaPhi) < 1.) { cosDeltaPhi = std::sqrt(1. - sinDeltaPhi * sinDeltaPhi); }
2761 double cosDeltaTheta = 0.;
2762 double sinDeltaTheta =
std::sin(deltaTheta);
2764 if (std::abs(sinDeltaTheta) < 1.) { cosDeltaTheta = std::sqrt(1. - sinDeltaTheta * sinDeltaTheta); }
2766 double cosTheta = direction.z() * cosDeltaTheta - direction.perp() * sinDeltaTheta;
2767 if (std::abs(cosTheta) < 1.) {
2768 direction =
Amg::Vector3D(direction.x() * cosDeltaPhi - direction.y() * sinDeltaPhi,
2769 direction.y() * cosDeltaPhi + direction.x() * sinDeltaPhi,
2770 direction.perp() * cosTheta / std::sqrt(1. - cosTheta * cosTheta));
2775 direction = direction.unit();
2785 parameters->covariance() ? std::optional<AmgSymMatrix(5)>(*(
parameters->covariance())) : std::nullopt;
2789 if (updatedParameters) {
◆ msg() [1/2]
◆ msg() [2/2]
◆ msgLvl()
◆ normalizedChi2()
double Rec::CombinedMuonTrackFitter::normalizedChi2 |
( |
const Trk::Track & |
track | ) |
const |
|
protectedinherited |
◆ optimizeErrors()
bool Rec::CombinedMuonTrackFitter::optimizeErrors |
( |
const EventContext & |
ctx, |
|
|
Trk::Track & |
track |
|
) |
| const |
|
privateinherited |
Definition at line 546 of file CombinedMuonTrackFitter.cxx.
551 muonSummary =
summary->muonTrackSummary();
555 muonSummary =
summary->muonTrackSummary();
558 if (!muonSummary)
return false;
561 unsigned int optimize{0},nBarrel{0}, nEndcap{0}, nSmall{0}, nLarge{0};
566 if (!isMdt)
continue;
594 if (nBarrel > 0 && nEndcap > 0) { optimize += 10; }
596 if (nSmall > 0 && nLarge > 0) { optimize += 100; }
598 if (optimize > 0) {
ATH_MSG_DEBUG(
" OptimizeErrors with value " << optimize); }
◆ outputHandles()
Return this algorithm's output handles.
We override this to include handle instances from key arrays if they have not yet been declared. See comments on updateVHKA.
◆ reallocateMaterial()
std::unique_ptr< Trk::Track > Rec::CombinedMuonTrackBuilder::reallocateMaterial |
( |
const EventContext & |
ctx, |
|
|
const Trk::Track & |
spectrometerTrack |
|
) |
| const |
|
private |
Definition at line 2796 of file CombinedMuonTrackBuilder.cxx.
2800 double perigeeDistance = 0.;
2806 for (;
s != sEnd; ++
s) {
2812 spectrometerMeasurements.push_back((**s).measurementOnTrack()->clone());
2813 if (!(**s).trackParameters() || (perigeeStartValue && (**s).trackParameters()->position().mag() > perigeeDistance)) {
2817 perigeeDistance = (**s).trackParameters()->position().mag();
2818 perigeeStartValue = (**s).trackParameters();
2823 if (!perigeeStartValue) {
2831 std::unique_ptr<Trk::Track> spectrometerFit =
fit(ctx, spectrometerMeasurements, *perigeeStartValue,
true,
Trk::muon);
2832 if (!spectrometerFit) {
2833 spectrometerFit =
fit(ctx, spectrometerMeasurements, *perigeeStartValue,
false,
Trk::muon);
2835 if (!spectrometerFit) {
2838 if (!spectrometerFit) {
2848 auto mEnd = spectrometerMeasurements.end();
2849 for (;
m != mEnd; ++
m) {
delete *
m; }
2851 return spectrometerFit;
◆ removeSpectrometerMaterial()
void Rec::CombinedMuonTrackBuilder::removeSpectrometerMaterial |
( |
std::unique_ptr< Trk::Track > & |
track | ) |
const |
|
private |
aaaaaahhhhh
Definition at line 2854 of file CombinedMuonTrackBuilder.cxx.
2856 bool limitMomentum =
false;
2857 double momentum =
track->perigeeParameters()->momentum().mag();
2863 if (measuredPerigee) {
2866 while (!(**r).trackParameters()) { --
r; }
2868 limitMomentum =
true;
2870 if (!measuredPerigee->covariance()) {
2871 ATH_MSG_DEBUG(
"measuredPerigee has no covariance, qOverP not set");
2884 std::bitset<Trk::TrackStateOnSurface::NumberOfTrackStateOnSurfaceTypes> defaultType;
2885 std::bitset<Trk::TrackStateOnSurface::NumberOfTrackStateOnSurfaceTypes>
type = defaultType;
2886 auto trackStateOnSurfaces = std::make_unique<Trk::TrackStates>();
2888 trackStateOnSurfaces->reserve(
track->trackStateOnSurfaces()->size());
2889 bool is_first{
true};
2892 if (tsos->trackParameters()) {
2893 if (limitMomentum && is_first && tsos->trackParameters()->covariance() &&
2895 Amg::VectorX parameterVector = tsos->trackParameters()->parameters();
2899 std::unique_ptr<Trk::TrackParameters>
parameters =
2900 tsos->trackParameters()->associatedSurface().createUniqueTrackParameters(
2902 parameterVector[
Trk::qOverP], *tsos->trackParameters()->covariance());
2907 std::unique_ptr<Trk::MeasurementBase> measurementBase;
2908 if (tsos->measurementOnTrack()) {
2909 measurementBase = tsos->measurementOnTrack()->
uniqueClone();
2912 trackStateOnSurfaces->push_back(
2915 trackStateOnSurfaces->push_back(tsos->clone());
2923 if (tsos->materialEffectsOnTrack() &&
2924 !
m_calorimeterVolume->inside(tsos->materialEffectsOnTrack()->associatedSurface().globalReferencePoint())) {
2925 if (tsos->measurementOnTrack()) {
2926 Amg::VectorX parameterVector = tsos->trackParameters()->parameters();
2928 std::unique_ptr<Trk::TrackParameters> trackParameters =
2929 tsos->trackParameters()->associatedSurface().createUniqueTrackParameters(
2932 tsos->trackParameters()->covariance() ? std::optional<
AmgSymMatrix(5)>(*tsos->trackParameters()->covariance())
2939 std::unique_ptr<Trk::MeasurementBase> measurementBase;
2940 measurementBase = tsos->measurementOnTrack()->
uniqueClone();
2941 trackStateOnSurfaces->push_back(
2945 }
else if (!tsos->measurementOnTrack() && tsos->trackParameters() &&
2950 if (limitMomentum && tsos->trackParameters()) {
2951 Amg::VectorX parameterVector = tsos->trackParameters()->parameters();
2953 std::unique_ptr<Trk::TrackParameters> trackParameters =
2957 tsos->trackParameters()->covariance() ? std::optional<
AmgSymMatrix(5)>(*tsos->trackParameters()->covariance())
2962 std::unique_ptr<Trk::MeasurementBase> measurementBase;
2963 if (tsos->measurementOnTrack()) {
2968 measurementBase = tsos->measurementOnTrack()->
uniqueClone();
2971 std::unique_ptr<Trk::MaterialEffectsBase> materialEffects;
2972 if (tsos->materialEffectsOnTrack()) {
2976 materialEffects = tsos->materialEffectsOnTrack()->
uniqueClone();
2978 trackStateOnSurfaces->push_back(
new Trk::TrackStateOnSurface(std::move(measurementBase), std::move(trackParameters),
2979 std::move(materialEffects),
type));
2981 trackStateOnSurfaces->push_back(tsos->clone());
2987 std::unique_ptr<Trk::FitQuality>
fitQuality =
nullptr;
2988 if (
track->fitQuality()) {
fitQuality = std::make_unique<Trk::FitQuality>(*
track->fitQuality()); }
◆ renounce()
◆ renounceArray()
◆ replaceCaloEnergy()
◆ standaloneFit()
ICombinedMuonTrackBuilder interface: propagate to perigee adding calo energy-loss and material to MS track.
Delete manually until we switch to unique_ptrs
Implements Rec::ICombinedMuonTrackBuilder.
Definition at line 579 of file CombinedMuonTrackBuilder.cxx.
587 if (
m_trackQuery->isLineFit(inputSpectrometerTrack) && !fieldCache.
toroidOn()) {
return nullptr; }
589 ATH_MSG_DEBUG(
" standaloneFit beam position bs_x " << origin <<
" inputVertex "
593 msg(
MSG::VERBOSE) <<
endmsg <<
"==== Start of standaloneFit:: " << std::setiosflags(std::ios::fixed);
595 if (
m_trackQuery->isExtrapolated(inputSpectrometerTrack, ctx)) {
600 << inputSpectrometerTrack.perigeeParameters()->momentum().mag() /
Gaudi::Units::GeV <<
" (GeV)";
603 msg(
MSG::VERBOSE) <<
" at eta " << std::setw(6) << std::setprecision(3)
604 << inputSpectrometerTrack.perigeeParameters()->momentum().eta() <<
" phi " << std::setw(6)
605 << std::setprecision(3) << inputSpectrometerTrack.perigeeParameters()->momentum().phi();
607 }
else if (!
m_trackQuery->isProjective(inputSpectrometerTrack)) {
609 }
else if (inputSpectrometerTrack.perigeeParameters()) {
614 << inputSpectrometerTrack.perigeeParameters()->momentum().mag() /
Gaudi::Units::GeV <<
" (GeV)";
617 msg(
MSG::VERBOSE) <<
" at eta " << std::setw(6) << std::setprecision(3)
618 << inputSpectrometerTrack.perigeeParameters()->position().eta() <<
" phi " << std::setw(6)
619 << std::setprecision(3) << inputSpectrometerTrack.perigeeParameters()->position().phi();
621 if (inputSpectrometerTrack.perigeeParameters()->covariance()) {
630 if (inputSpectrometerTrack.fitQuality()) {
632 << std::setw(2) << inputSpectrometerTrack.fitQuality()->numberDoF();
635 if (
m_trackQuery->numberPseudoMeasurements(inputSpectrometerTrack)) {
644 if (inputVertex && !
vertex) {
652 const Trk::TrackStates* tsos = inputSpectrometerTrack.trackStateOnSurfaces();
654 if (!
fitQuality || !inputSpectrometerTrack.trackStateOnSurfaces() ||
655 static_cast<int>(inputSpectrometerTrack.trackStateOnSurfaces()->size()) <
fitQuality->
numberDoF()) {
657 int measurements = 0;
662 if (measurements < 4) {
669 if (
fitQuality && measurements < fitQuality->numberDoF() + 4) {
677 const bool is_extrapolated =
m_trackQuery->isExtrapolated(inputSpectrometerTrack, ctx);
678 if (!is_extrapolated && !
m_trackQuery->isProjective(inputSpectrometerTrack)) {
684 double spectrometerFitChi2 =
normalizedChi2(inputSpectrometerTrack);
685 std::unique_ptr<Trk::Track> spectrometerFit = std::make_unique<Trk::Track>(inputSpectrometerTrack);
688 if (!spectrometerFit) {
694 const Trk::Track& spectrometerTrack = *spectrometerFit;
699 if (!measuredPerigee || !measuredPerigee->covariance()) {
708 bool badlyDeterminedCurvature =
false;
711 ATH_MSG_WARNING(
"standaloneFit: measuredPerigee has non-positive-definite covariance ");
717 double errorP = std::sqrt(measuredPerigee->momentum().mag2() * (*measuredPerigee->covariance())(
Trk::qOverP,
Trk::qOverP));
719 std::unique_ptr<Trk::RecVertex> mvertex = std::make_unique<Trk::RecVertex>(*
m_vertex);
720 std::unique_ptr<Trk::RecVertex> mbeamAxis = std::make_unique<Trk::RecVertex>(*
m_beamAxis);
721 std::unique_ptr<Trk::PerigeeSurface> mperigeeSurface = std::make_unique<Trk::PerigeeSurface>(*
m_perigeeSurface);
723 std::unique_ptr<const Trk::TrackParameters>
parameters;
728 ATH_MSG_VERBOSE(
"standaloneFit: vertex fit not attempted as curvature badly measured");
737 if ((origin - mvertex->
position()).mag() > 0.001) {
740 mperigeeSurface = std::make_unique<Trk::PerigeeSurface>(origin);
743 beamAxisCovariance.setZero();
747 mbeamAxis = std::
make_unique<
Trk::RecVertex>(origin, beamAxisCovariance);
750 vertexRegionCovariance.setZero();
754 mvertex = std::
make_unique<
Trk::RecVertex>(origin, vertexRegionCovariance);
766 std::vector<std::unique_ptr<const Trk::TrackStateOnSurface>> spectrometerTSOS =
createSpectrometerTSOS(ctx, spectrometerTrack);
768 if (spectrometerTSOS.empty()) {
776 bool haveFitWithVertex =
false;
777 bool performPrefit =
false;
781 if (
s->measurementOnTrack() && !
s->trackParameters()) {
782 performPrefit =
true;
789 std::unique_ptr<Trk::Track> prefit;
796 bool inCSCregion = std::abs(measuredPerigee->momentum().eta()) > 2.0;
800 if (inCSCregion ||
m_trackQuery->numberPseudoMeasurements(spectrometerTrack) ||
803 performPrefit =
true;
804 vertexInFit = (badlyDeterminedCurvature || inCSCregion) ? mvertex.get() : mbeamAxis.get();
807 unsigned numberPseudo =
m_trackQuery->numberPseudoMeasurements(spectrometerTrack);
808 if (errorPhi > s_sigmaPhiSector) { ++numberPseudo; }
810 if (badlyDeterminedCurvature) {
811 ATH_MSG_DEBUG(
" prefit with vertex: " << std::setiosflags(std::ios::fixed) <<
" momentum " << std::setprecision(1)
813 << std::setprecision(1) << std::abs(
parameters->position().z())
814 <<
", phiError " << std::setprecision(2) << errorPhi <<
", momentumError "
815 << std::setprecision(2) << errorP <<
", numberPseudo " << numberPseudo);
818 << std::setiosflags(std::ios::fixed) <<
" momentum " << std::setprecision(1)
819 << measuredPerigee->momentum().mag() /
Gaudi::Units::GeV <<
" (GeV), zFirst " << std::setprecision(1)
820 << std::abs(
parameters->position().z()) <<
", phiError " << std::setprecision(2) << errorPhi
821 <<
", momentumError " << std::setprecision(2) << errorP <<
", numberPseudo " << numberPseudo);
827 std::unique_ptr<const Trk::Perigee> prefitResult;
833 if (vertexInFit) { haveFitWithVertex =
true; }
837 ATH_MSG_VERBOSE(
"Calling createExtrapolatedTrack from " << __func__ <<
" at line " << __LINE__);
839 mbeamAxis.get(), mperigeeSurface.get());
856 if (!
s->trackParameters() || !
s->trackParameters()->covariance()) {
continue; }
861 ATH_MSG_DEBUG(
"Found first parameters in MS " <<
s->trackParameters()->position().perp() <<
" z "
862 <<
s->trackParameters()->position().z());
878 spectrometerTSOS.clear();
891 return (tsos->trackParameters() && !m_calorimeterVolume->inside(tsos->trackParameters()->position())) ||
892 tsos->type(Trk::TrackStateOnSurface::Perigee);
897 for (;
s != prefit_tsos->
end(); ++
s) { spectrometerTSOS.emplace_back((*s)->clone()); }
902 for (std::unique_ptr<const Trk::TrackStateOnSurface>&
t : spectrometerTSOS) {
903 if (!
t->measurementOnTrack() || !
t->trackParameters()) {
continue; }
912 std::unique_ptr<Trk::RIO_OnTrack> updatedRot;
930 bool returnAfterCleaner = !fieldCache.
toroidOn();
932 ATH_MSG_VERBOSE(
"Calling createExtrapolatedTrack from " << __func__ <<
" at line " << __LINE__);
935 mperigeeSurface.get(), prefitResult.get()));
941 if (extrapolated && !haveFitWithVertex && !vertexInFit) {
943 std::unique_ptr<Trk::Track> badfit(std::move(extrapolated));
945 auto trackStateOnSurfaces = std::make_unique<Trk::TrackStates>();
946 trackStateOnSurfaces->reserve(badfit->trackStateOnSurfaces()->size() + 1);
948 std::bitset<Trk::TrackStateOnSurface::NumberOfTrackStateOnSurfaceTypes>
type{};
950 std::unique_ptr<Trk::PseudoMeasurementOnTrack> vertexInFit =
951 vertexOnTrack(*badfit->perigeeParameters(), mvertex.get(), mbeamAxis.get());
956 std::move(vertexInFit), badfit->perigeeParameters()->uniqueClone(),
nullptr,
type));
959 s != badfit->trackStateOnSurfaces()->end(); ++
s) {
960 trackStateOnSurfaces->push_back((**s).clone());
963 std::unique_ptr<Trk::Track>
track =
964 std::make_unique<Trk::Track>(spectrometerTrack.
info(), std::move(trackStateOnSurfaces),
nullptr);
970 if (prefit && prefit->
fitQuality() && caloParameters) {
971 ATH_MSG_DEBUG(
" restarting from prefit as back extrapolation fit failed");
972 spectrometerTSOS.clear();
983 ATH_MSG_VERBOSE(
"Calling createExtrapolatedTrack from " << __func__ <<
" at line " << __LINE__);
986 vertexInFit, mbeamAxis.get(), mperigeeSurface.get(), prefitResult.get());
987 returnAfterCleaner =
true;
1008 bool allowRefit = !badlyDeterminedCurvature;
1012 if (returnAfterCleaner) {
1019 while (!(**s).trackParameters() ||
m_calorimeterVolume->inside((**s).trackParameters()->position())) {
1035 std::unique_ptr<Trk::Track>
track;
1039 double sinTheta = params_pRat->
momentum().perp() / params_pRat->
momentum().mag();
1046 spectrometerTSOS.clear();
1051 ATH_MSG_VERBOSE(
"Calling createExtrapolatedTrack from " << __func__ <<
" at line " << __LINE__);
1054 vertexInFit, mbeamAxis.get(), mperigeeSurface.get(),
extrapolated->perigeeParameters());
1062 if (extrapolated) {
track.swap(extrapolated); }
1071 int improvementsFailed = 0;
1079 if (
checkTrack(
"refineFit", refinedTrack.get())) {
1081 track.swap(refinedTrack);
1084 ++improvementsFailed;
1096 dumpCaloEloss(newTrack.get(),
"SA input TSOS after refine IDMS ");
1099 std::unique_ptr<Trk::Track> refittedTrack(
fit(ctx, *newTrack,
false,
Trk::muon));
1101 dumpCaloEloss(refittedTrack.get(),
" SA refit after refine IDMS ");
1102 if (
checkTrack(
"standaloneFit", refittedTrack.get())) {
1104 track.swap(refittedTrack);
1106 ++improvementsFailed;
1109 ++improvementsFailed;
1120 if (fitChi2 >
m_badFitChi2 && fitChi2 > spectrometerFitChi2 + 0.5) {
1121 ATH_MSG_DEBUG(
"standaloneFit: fit quality degraded wrt spectrometer alone. "
1122 <<
" Chi2/DoF= " << fitChi2);
1125 if (improvementsFailed >= 2) {
1126 ATH_MSG_DEBUG(
"reject track, quality degraded and improvements failed");
◆ standaloneRefit()
ICombinedMuonTrackBuilder interface: refit a track removing any indet measurements with optional addition of pseudoMeasurements.
At this stage we have the first calo scatterer or end up with nothing
The while loop above goes one iterator back after it found the calorimeter deposit. So we go back to the calo deposit
Make another check that the pointer is valid
Prepare for the outer TSOS
The extrapolation from above could actually fail
Now we need to check whether we actually own the parameters
Ensure that the parameters are also updated accordingly
We do not need the parameters pointer anymore
create perigee by back extrapolation from middleSurface via innerSurface
From this point we can be sure that the parameters down the chain orignate from some propagation
If the perigee parameters are not of Type Trk::Peirgee forget what has been tried
Create the vertex element before the perigee_owner looses ownership
Implements Rec::ICombinedMuonTrackBuilder.
Definition at line 1134 of file CombinedMuonTrackBuilder.cxx.
1152 ATH_MSG_DEBUG(
" StandaloneRefit beam position bs_x " << origin);
1164 ATH_MSG_DEBUG(
" StandaloneRefit new vertex d0 error " << std::sqrt(error2d0) <<
" new vertex z0 error "
1165 << std::sqrt(error2z0));
1168 (vertexRegionCovariance)(0, 0) = error2d0;
1169 (vertexRegionCovariance)(1, 1) = error2d0;
1170 (vertexRegionCovariance)(2, 2) = error2z0;
1172 std::unique_ptr<Trk::RecVertex>
vertex = std::make_unique<Trk::RecVertex>(origin, vertexRegionCovariance);
1174 ATH_MSG_DEBUG(
" StandaloneRefit new vertex position x " <<
vertex->position().x() <<
" y " <<
vertex->position().y() <<
" z "
1175 <<
vertex->position().z());
1177 bool addPhiPseudo =
false;
1180 if (spectrometerPhiQuality > 1) { addPhiPseudo =
true; }
1182 ATH_MSG_VERBOSE(
"standaloneRefit: using vertex region constraint with "
1183 <<
"spectrometerPhiQuality " << spectrometerPhiQuality);
1186 auto trackStateOnSurfaces = std::make_unique<Trk::TrackStates>();
1189 unsigned size =
combinedTrack.trackStateOnSurfaces()->size() + 3 + addPhiPseudo;
1191 trackStateOnSurfaces->reserve(
size);
1194 bool haveCaloDeposit =
false;
1200 if (
s == cmb_end_itr) {
1206 haveCaloDeposit =
true;
1209 }
while (!haveCaloDeposit);
1215 std::unique_ptr<Trk::TrackStateOnSurface> innerTSOS;
1220 std::unique_ptr<Trk::TrackParameters> param_owner;
1225 innerTSOS.reset(cmb_inner_tsos->
clone());
1239 if (
s != cmb_end_itr) {
1247 materialEffects =
nullptr;
1266 std::unique_ptr<Trk::TrackStateOnSurface> middleTSOS;
1270 middleTSOS.reset(cmb_middle_tsos->
clone());
1277 if (
s != cmb_end_itr) {
1282 materialEffects =
nullptr;
1298 std::unique_ptr<Trk::TrackStateOnSurface> outerTSOS;
1300 double pInner{0.}, pOuter{0.};
1305 outerTSOS.reset(cmb_outer_tsos->
clone());
1321 if (outerScattering && middleTSOS) {
1332 if (!param_owner) param_owner =
parameters->uniqueClone();
1347 if (!innerTSOS || !middleTSOS || !outerTSOS || !
parameters) {
return nullptr; }
1358 std::unique_ptr<Trk::TrackParameters> perigee_owner;
1367 if (!perigee_owner) { perigee_owner =
combinedTrack.perigeeParameters()->uniqueClone(); }
1390 if (!param_owner) {
return nullptr; }
1400 std::unique_ptr<Trk::RecVertex> mbeamAxis = std::make_unique<Trk::RecVertex>(*
m_beamAxis);
1402 std::unique_ptr<Trk::PseudoMeasurementOnTrack> vertexInFit{
vertexOnTrack(*perigee_owner,
vertex.get(), mbeamAxis.get())};
1413 double Eloss{0.}, sigmaEloss{0.}, X0tot{0.}, sigmaDeltaPhitot2{0.}, sigmaDeltaThetatot2{0.};
1415 std::vector<const Trk::TrackStateOnSurface*> scatter_tsos;
1416 scatter_tsos.reserve(
combinedTrack.trackStateOnSurfaces()->size());
1419 if (!comb_tsos->trackParameters())
continue;
1420 if (!
m_indetVolume->inside(comb_tsos->trackParameters()->position()))
break;
1421 if (!comb_tsos->materialEffectsOnTrack()) {
continue; }
1422 const double X0 = comb_tsos->materialEffectsOnTrack()->thicknessInX0();
1427 if (!meot) {
continue; }
1429 if (!energyLoss) {
continue; }
1430 Eloss += energyLoss->
deltaE();
1433 ATH_MSG_DEBUG(
"CombinedMuonFit ID Eloss found r " << (comb_tsos->trackParameters())->position().perp() <<
" z "
1434 << (comb_tsos->trackParameters())->position().z() <<
" value "
1435 << energyLoss->
deltaE() <<
" Eloss " << Eloss <<
" sigma Eloss "
1442 sigmaDeltaPhitot2 += sigmaDeltaPhi * sigmaDeltaPhi;
1443 sigmaDeltaThetatot2 += sigmaDeltaTheta * sigmaDeltaTheta;
1444 scatter_tsos.push_back(comb_tsos);
1448 ATH_MSG_DEBUG(
"standaloneRefit Total ID Eloss " << Eloss <<
" sigma Eloss " << sigmaEloss <<
" X0 " << X0tot
1449 <<
" sigma scat phi " << std::sqrt(sigmaDeltaPhitot2) <<
" sigma scat theta "
1450 << std::sqrt(sigmaDeltaThetatot2));
1451 if (!scatter_tsos.empty()) {
1452 const int itsosMiddle = scatter_tsos.size() / 2;
1455 std::unique_ptr<Trk::EnergyLoss> energyLossNew = std::make_unique<Trk::EnergyLoss>(Eloss, sigmaEloss, sigmaEloss, sigmaEloss);
1458 Trk::ScatteringAngles scatNew{0., 0., std::sqrt(sigmaDeltaPhitot2), std::sqrt(sigmaDeltaThetatot2)};
1460 std::bitset<Trk::MaterialEffectsBase::NumberOfMaterialEffectsTypes> meotPattern(0);
1464 ATH_MSG_DEBUG(
" itsosMiddle " << itsosMiddle <<
" tsosnr size " << scatter_tsos.size());
1466 std::unique_ptr<Trk::MaterialEffectsOnTrack> meotNew = std::make_unique<Trk::MaterialEffectsOnTrack>(X0tot, scatNew, std::move(energyLossNew), surfNew, meotPattern);
1469 std::bitset<Trk::TrackStateOnSurface::NumberOfTrackStateOnSurfaceTypes> typePatternScat(0);
1472 std::unique_ptr<Trk::TrackStateOnSurface> newTSOS =
1473 std::make_unique<Trk::TrackStateOnSurface>(
nullptr, std::move(parsNew), std::move(meotNew), typePatternScat);
1475 trackStateOnSurfaces->push_back(std::move(newTSOS));
1482 trackStateOnSurfaces->push_back(std::move(innerTSOS));
1483 trackStateOnSurfaces->push_back(std::move(middleTSOS));
1484 trackStateOnSurfaces->push_back(std::move(outerTSOS));
1488 std::unique_ptr<Trk::TrackStateOnSurface> entranceTSOS =
entrancePerigee(ctx, outerTSOSParam);
1489 if (entranceTSOS) trackStateOnSurfaces->push_back(std::move(entranceTSOS));
1493 bool haveLeadingMaterial =
false;
1496 for (; mat_it != cmb_end_itr; ++mat_it) {
1498 haveLeadingMaterial =
true;
1502 if (mat_it == cmb_end_itr) {
1512 if (tsos) trackStateOnSurfaces->push_back(std::move(tsos));
1519 std::unique_ptr<Trk::Track> standaloneTrack =
1520 std::make_unique<Trk::Track>(
combinedTrack.info(), std::move(trackStateOnSurfaces),
nullptr);
1522 if (
m_trackQuery->isCombined(*standaloneTrack, ctx)) {
ATH_MSG_WARNING(
" This should not happen standalone Track has ID hits "); }
1524 if (msgLevel(
MSG::DEBUG))
countAEOTs(*standaloneTrack,
" in standalone Refit standaloneTrack track before fit ");
1526 std::unique_ptr<Trk::Track> refittedTrack{
fit(ctx, *standaloneTrack,
false,
Trk::muon)};
1527 if (!
checkTrack(
"standaloneRefit", refittedTrack.get())) {
return nullptr; }
1531 if (refittedTrack) {
1532 if (!refittedTrack->fitQuality()) {
return nullptr; }
1534 if (!
m_trackQuery->isCaloAssociated(*refittedTrack, ctx)) {
1545 countAEOTs(*refittedTrack,
" before optimize ") == 0) {
1546 ATH_MSG_VERBOSE(
" perform spectrometer error optimization after cleaning ");
1547 std::unique_ptr<Trk::Track> optimizedTrack =
m_muonErrorOptimizer->optimiseErrors(*refittedTrack, ctx);
1549 if (
checkTrack(
"standaloneRefitOpt", optimizedTrack.get())) {
1550 refittedTrack.swap(optimizedTrack);
1551 if (msgLevel(
MSG::DEBUG))
countAEOTs(*refittedTrack,
" standaloneRefit alignment errors Track ");
1557 return refittedTrack;
◆ sysInitialize()
◆ sysStart()
Handle START transition.
We override this in order to make sure that conditions handle keys can cache a pointer to the conditions container.
◆ updateVHKA()
◆ vertexOnTrack()
Definition at line 2993 of file CombinedMuonTrackBuilder.cxx.
3000 covarianceMatrix.setZero();
3004 double ptInv = 1. /
parameters.momentum().perp();
3006 if (
vertex == mbeamAxis) {
3012 jacobian(0, 0) = -ptInv *
parameters.momentum().y();
3013 jacobian(0, 1) = ptInv *
parameters.momentum().x();
3016 covarianceMatrix =
cov.similarity(jacobian);
3022 jacobian(0, 0) = -ptInv *
parameters.momentum().y();
3023 jacobian(0, 1) = ptInv *
parameters.momentum().x();
3024 jacobian(1, 2) = 1.0;
3027 covarianceMatrix =
cov.similarity(jacobian);
3030 return std::make_unique<Trk::PseudoMeasurementOnTrack>(std::move(localParameters),
3031 std::move(covarianceMatrix),
◆ m_addElossID
Gaudi::Property<bool> Rec::CombinedMuonTrackBuilder::m_addElossID {this, "AddElossID", true} |
|
private |
◆ m_addIDMSerrors
Gaudi::Property<bool> Rec::CombinedMuonTrackBuilder::m_addIDMSerrors {this, "AddIDMSerrors", true} |
|
private |
◆ m_alignUncertTool_phi
Initial value:{this, "AlignmentUncertToolPhi",
"Muon::MuonAlignmentUncertTool/MuonAlignmentUncertToolPhi"}
Definition at line 195 of file CombinedMuonTrackBuilder.h.
◆ m_alignUncertTool_theta
Initial value:{this, "AlignmentUncertToolTheta",
"Muon::MuonAlignmentUncertTool/MuonAlignmentUncertToolTheta" }
ToolHandles to retrieve the uncertainties for theta and phi for the scattering uncertainties.
Definition at line 193 of file CombinedMuonTrackBuilder.h.
◆ m_allowCleanerVeto
Gaudi::Property<bool> Rec::CombinedMuonTrackFitter::m_allowCleanerVeto {this, "AllowCleanerVeto", true} |
|
privateinherited |
◆ m_badFitChi2
Gaudi::Property<double> Rec::CombinedMuonTrackFitter::m_badFitChi2 {this, "BadFitChi2", 2.5} |
|
protectedinherited |
◆ m_beamAxis
◆ m_caloEnergyParam
◆ m_calorimeterVolume
std::unique_ptr<const Trk::Volume> Rec::CombinedMuonTrackFitter::m_calorimeterVolume {nullptr} |
|
protectedinherited |
◆ m_caloTSOS
◆ m_cleanCombined
Gaudi::Property<bool> Rec::CombinedMuonTrackBuilder::m_cleanCombined {this, "CleanCombined", true} |
|
private |
◆ m_cleaner
◆ m_cleanStandalone
Gaudi::Property<bool> Rec::CombinedMuonTrackBuilder::m_cleanStandalone {this, "CleanStandalone", true} |
|
private |
◆ m_countAcceptedStandaloneFit
std::atomic_uint Rec::CombinedMuonTrackBuilder::m_countAcceptedStandaloneFit {0} |
|
mutableprivate |
◆ m_countBeamAxis
std::atomic_uint Rec::CombinedMuonTrackBuilder::m_countBeamAxis {0} |
|
mutableprivate |
◆ m_countCombinedCleanerVeto
std::atomic_uint Rec::CombinedMuonTrackFitter::m_countCombinedCleanerVeto {0} |
|
mutableprivateinherited |
◆ m_countDegradedStandaloneFit
std::atomic_uint Rec::CombinedMuonTrackBuilder::m_countDegradedStandaloneFit {0} |
|
mutableprivate |
◆ m_countExtensionCleanerVeto
std::atomic_uint Rec::CombinedMuonTrackFitter::m_countExtensionCleanerVeto {0} |
|
mutableprivateinherited |
◆ m_countStandaloneCleanerVeto
std::atomic_uint Rec::CombinedMuonTrackFitter::m_countStandaloneCleanerVeto {0} |
|
mutableprivateinherited |
◆ m_countVertexRegion
std::atomic_uint Rec::CombinedMuonTrackBuilder::m_countVertexRegion {0} |
|
mutableprivate |
◆ m_cscRotCreator
◆ m_detStore
◆ m_edmHelperSvc
Initial value:{this, "edmHelper", "Muon::MuonEDMHelperSvc/MuonEDMHelperSvc",
"Handle to the service providing the IMuonEDMHelperSvc interface"}
Definition at line 199 of file CombinedMuonTrackBuilder.h.
◆ m_evtStore
◆ m_extrapolator
◆ m_fieldCacheCondObjInputKey
Initial value:{this, "AtlasFieldCacheCondObj", "fieldCondObj",
"Name of the Magnetic Field conditions object key"}
Definition at line 133 of file CombinedMuonTrackFitter.h.
◆ m_fitter
◆ m_fitterSL
◆ m_idHelperSvc
◆ m_indetVolume
std::unique_ptr<const Trk::Volume> Rec::CombinedMuonTrackFitter::m_indetVolume {nullptr} |
|
protectedinherited |
◆ m_iterateCombinedTrackFit
Gaudi::Property<bool> Rec::CombinedMuonTrackBuilder::m_iterateCombinedTrackFit {this, "IterateCombinedTrackFit", false} |
|
private |
◆ m_largeImpact
Gaudi::Property<double> Rec::CombinedMuonTrackBuilder::m_largeImpact {this, "LargeImpact", 100. * Gaudi::Units::mm} |
|
private |
◆ m_largeMomentumChange
Gaudi::Property<double> Rec::CombinedMuonTrackBuilder::m_largeMomentumChange {this, "LargeMomentumChange", 0.05} |
|
private |
◆ m_largeMomentumError
Gaudi::Property<double> Rec::CombinedMuonTrackBuilder::m_largeMomentumError {this, "LargeMomentumError", 0.15} |
|
private |
◆ m_largePhiError
Gaudi::Property<double> Rec::CombinedMuonTrackBuilder::m_largePhiError {this, "LargePhiError", 0.020} |
|
private |
◆ m_lineMomentum
Gaudi::Property<double> Rec::CombinedMuonTrackBuilder::m_lineMomentum {this, "LineMomentum", 2. * Gaudi::Units::GeV} |
|
private |
◆ m_lowMomentum
Gaudi::Property<double> Rec::CombinedMuonTrackBuilder::m_lowMomentum {this, "LowMomentum", 10. * Gaudi::Units::GeV} |
|
private |
◆ m_magFieldProperties
◆ m_materialAllocator
◆ m_materialUpdator
◆ m_maxWarnings
Gaudi::Property<unsigned> Rec::CombinedMuonTrackFitter::m_maxWarnings |
|
privateinherited |
Initial value:{this, "MaxNumberOfWarnings", 10,
"Maximum number of permitted WARNING messages per message type."}
Definition at line 140 of file CombinedMuonTrackFitter.h.
◆ m_mdtRotCreator
◆ m_messageHelper
◆ m_minEnergy
Gaudi::Property<double> Rec::CombinedMuonTrackBuilder::m_minEnergy {this, "MinEnergy", 0.3 * Gaudi::Units::GeV} |
|
private |
◆ m_muClusterRotCreator
◆ m_muonErrorOptimizer
◆ m_muonHoleRecovery
◆ m_numberSigmaFSR
Gaudi::Property<double> Rec::CombinedMuonTrackBuilder::m_numberSigmaFSR {this, "NumberSigmaFSR", 2.5} |
|
private |
◆ m_perigeeAtSpectrometerEntrance
Gaudi::Property<bool> Rec::CombinedMuonTrackBuilder::m_perigeeAtSpectrometerEntrance {this, "PerigeeAtSpectrometerEntrance", false} |
|
private |
◆ m_perigeeSurface
◆ m_printer
◆ m_propagator
◆ m_propagatorSL
Initial value:{
this,
"SLPropagator",
"Trk::StraightLinePropagator/MuonStraightLinePropagator",
}
Definition at line 184 of file CombinedMuonTrackBuilder.h.
◆ m_reallocateMaterial
Gaudi::Property<bool> Rec::CombinedMuonTrackBuilder::m_reallocateMaterial {this, "ReallocateMaterial", true} |
|
private |
◆ m_redoRots
bool Rec::CombinedMuonTrackBuilder::m_redoRots {false} |
|
private |
◆ m_refineELossCombinedTrackFit
Gaudi::Property<bool> Rec::CombinedMuonTrackBuilder::m_refineELossCombinedTrackFit {this, "RefineELossCombinedTrackFit", true} |
|
private |
◆ m_refineELossStandAloneTrackFit
Gaudi::Property<bool> Rec::CombinedMuonTrackBuilder::m_refineELossStandAloneTrackFit {this, "RefineELossStandAloneTrackFit", true} |
|
private |
◆ m_trackingGeometryReadKey
Initial value:{this, "TrackingGeometryReadKey", "",
"Key of the TrackingGeometry conditions data."}
Definition at line 205 of file CombinedMuonTrackBuilder.h.
◆ m_trackingVolumesSvc
◆ m_trackQuery
◆ m_trackSummary
Initial value:{
this,
"TrackSummaryTool",
"Trk::TrackSummaryTool/MuidTrackSummaryTool",
}
Definition at line 119 of file CombinedMuonTrackFitter.h.
◆ m_updateWithCaloTG
Gaudi::Property<bool> Rec::CombinedMuonTrackFitter::m_updateWithCaloTG {this, "UpdateWithCaloTG", false} |
|
protectedinherited |
◆ m_useCaloTG
Gaudi::Property<bool> Rec::CombinedMuonTrackFitter::m_useCaloTG {this, "UseCaloTG", false} |
|
protectedinherited |
◆ m_useRefitTrackError
Gaudi::Property<bool> Rec::CombinedMuonTrackBuilder::m_useRefitTrackError {this, "UseRefitTrackError", true} |
|
private |
◆ m_varHandleArraysDeclared
◆ m_vertex
◆ m_vertex2DSigmaRPhi
Gaudi::Property<double> Rec::CombinedMuonTrackBuilder::m_vertex2DSigmaRPhi {this, "Vertex2DSigmaRPhi", 100. * Gaudi::Units::mm} |
|
private |
◆ m_vertex2DSigmaZ
Gaudi::Property<double> Rec::CombinedMuonTrackBuilder::m_vertex2DSigmaZ {this, "Vertex2DSigmaZ", 100. * Gaudi::Units::meter} |
|
private |
◆ m_vertex3DSigmaRPhi
Gaudi::Property<double> Rec::CombinedMuonTrackBuilder::m_vertex3DSigmaRPhi {this, "Vertex3DSigmaRPhi", 6. * Gaudi::Units::mm} |
|
private |
◆ m_vertex3DSigmaZ
Gaudi::Property<double> Rec::CombinedMuonTrackBuilder::m_vertex3DSigmaZ {this, "Vertex3DSigmaZ", 60. * Gaudi::Units::mm} |
|
private |
◆ m_vhka
◆ m_zECToroid
Gaudi::Property<double> Rec::CombinedMuonTrackFitter::m_zECToroid {this, "zECToroid", 10. * Gaudi::Units::meter} |
|
protectedinherited |
The documentation for this class was generated from the following files:
def retrieve(aClass, aKey=None)
JetConstituentVector::iterator iterator
std::unique_ptr< const Trk::RecVertex > m_beamAxis
static std::unique_ptr< Trk::TrackStateOnSurface > createPerigeeTSOS(std::unique_ptr< Trk::TrackParameters > perigee)
create a perigee TSOS, takes ownership of the Perigee
double deltaPhi() const
returns the
const Trk::TrackingVolume * getVolume(const EventContext &ctx, const std::string &&vol_name) const
const ShapeFitter * fitter
const TrackParameters * trackParameters() const
return ptr to trackparameters const overload
std::unique_ptr< Trk::TrackStateOnSurface > createPhiPseudoMeasurement(const EventContext &ctx, const Trk::Track &track) const
@ CaloDeposit
This TSOS contains a CaloEnergy object.
Contains information about the 'fitter' of this track.
@ Perigee
This represents a perigee, and so will contain a Perigee object only.
Gaudi::Property< double > m_largeMomentumChange
Const iterator class for DataVector/DataList.
ServiceHandle< Muon::IMuonEDMHelperSvc > m_edmHelperSvc
PublicToolHandle< Muon::IMuonAlignmentUncertTool > m_alignUncertTool_theta
ToolHandles to retrieve the uncertainties for theta and phi for the scattering uncertainties.
const FitQuality * fitQuality() const
return a pointer to the fit quality const-overload
static std::unique_ptr< Trk::PseudoMeasurementOnTrack > vertexOnTrack(const Trk::TrackParameters ¶meters, const Trk::RecVertex *vertex, const Trk::RecVertex *mbeamAxis)
Eigen::Matrix< double, Eigen::Dynamic, 1 > VectorX
Dynamic Vector - dynamic allocation.
bool hasPositiveDiagElems(const AmgSymMatrix(N) &mat)
Returns true if all diagonal elements of the covariance matrix are finite aka sane in the above defin...
constexpr double tolerance
Eigen::Matrix< double, Eigen::Dynamic, Eigen::Dynamic > MatrixX
Dynamic Matrix - dynamic allocation.
std::unique_ptr< Trk::Track > addIDMSerrors(const Trk::Track *track) const
SG::ReadCondHandleKey< Trk::TrackingGeometry > m_trackingGeometryReadKey
std::atomic_uint m_countBeamAxis
Gaudi::Property< bool > m_refineELossStandAloneTrackFit
std::unique_ptr< Trk::TrackStateOnSurface > entrancePerigee(const EventContext &ctx, const Trk::TrackParameters *parameters) const
Gaudi::Property< double > m_numberSigmaFSR
class extending the basic Trk::EnergyLoss to describe the measured or parameterised muon energy loss ...
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...
std::string find(const std::string &s)
return a remapped string
double charge() const
Returns the charge.
ToolHandle< Muon::IMuonClusterOnTrackCreator > m_muClusterRotCreator
Scalar perp() const
perp method - perpenticular length
void removeSpectrometerMaterial(std::unique_ptr< Trk::Track > &track) const
virtual TrackStateOnSurface * clone() const
Pseudo-constructor: needed to avoid excessive RTTI.
void set_energyLossType(const CaloEnergy::EnergyLossType lossType)
set methods
const_reverse_iterator rend() const noexcept
Return a const_reverse_iterator pointing at the beginning of the collection.
const Amg::Vector3D & position() const
Access method for the position.
Eigen::Matrix< double, 2, 1 > Vector2D
virtual const Surface & associatedSurface() const override=0
Access to the Surface associated to the Parameters.
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
std::unique_ptr< MessageHelper > m_messageHelper
std::unique_ptr< ParametersBase< DIM, T > > uniqueClone() const
clone method for polymorphic deep copy returning unique_ptr; it is not overriden, but uses the existi...
virtual std::unique_ptr< Trk::Track > fit(const EventContext &ctx, const Trk::Track &track, const Trk::RunOutlierRemoval runOutlier, const Trk::ParticleHypothesis particleHypothesis) const override
const Trk::TrackStates * trackStateOnSurfaces() const
return a pointer to a const DataVector of const TrackStateOnSurfaces.
Dummy class used to allow special convertors to be called for surfaces owned by a detector element.
setSAddress setEtaMS setDirPhiMS setDirZMS setBarrelRadius setEndcapAlpha setEndcapRadius setInterceptInner setEtaMap setEtaBin setIsTgcFailure setDeltaPt deltaPhi
const TrackInfo & info() const
Returns a const ref to info of a const tracks.
const CaloEnergy * caloEnergyParameters(const Trk::Track *combinedTrack, const Trk::Track *muonTrack, const Trk::TrackParameters *&combinedEnergyParameters, const Trk::TrackParameters *&muonEnergyParameters) const
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< bool > m_addElossID
constexpr virtual SurfaceType surfaceType() const override=0
Returns the Surface Type enum for the surface used to define the derived class.
void appendSelectedTSOS(Trk::TrackStates &trackStateOnSurfaces, Trk::TrackStates::const_iterator begin, Trk::TrackStates::const_iterator end) const
Gaudi::Property< bool > m_updateWithCaloTG
Gaudi::Property< bool > m_refineELossCombinedTrackFit
@ MuidStandaloneRefit
Standalone muon that was obtained by refitting a combined muon using the calorimeter information of t...
double sigmaDeltaE() const
returns the symmatric error
Gaudi::Property< double > m_badFitChi2
StoreGateSvc_t m_evtStore
Pointer to StoreGate (event store by default)
ToolHandle< Muon::IMuonErrorOptimisationTool > m_muonErrorOptimizer
Gaudi::Property< double > m_lowMomentum
virtual StatusCode initialize() override
std::vector< SG::VarHandleKeyArray * > m_vhka
std::string dumpType() const
returns a string with the expanded type of the object (i.e.
bool msgLvl(const MSG::Level lvl) const
represents a deflection of the track caused through multiple scattering in material.
double deltaPhi(double phiA, double phiB)
delta Phi in range [-pi,pi[
const MeasurementBase * measurementOnTrack() const
returns MeasurementBase const overload
@ loc2
generic first and second local coordinate
Gaudi::Property< double > m_vertex3DSigmaRPhi
double thicknessInX0() const
returns the actually traversed material .
void dumpCaloEloss(const Trk::Track *track, const std::string &txt) const
virtual const Amg::Vector3D & globalReferencePoint() const
Returns a global reference point on the surface, for PlaneSurface, StraightLineSurface,...
#define ATH_MSG_VERBOSE(x)
const std::string & key() const
Return the StoreGate ID for the referenced object.
std::unique_ptr< Trk::Track > reallocateMaterial(const EventContext &ctx, const Trk::Track &spectrometerTrack) const
base class to integrate material effects on Trk::Track in a flexible way.
const Amg::Vector3D & center() const
Returns the center position of the Surface.
bool fit(const LArSamples::AbsShape &data, const AbsShape &reference, double &k, double &deltaT, double &chi2, const ScaledErrorData *sed=0) const
void combinedTrack(long int ICH, double *pv0, double *covi, double BMAG, double *par, double *covo)
#define AmgSymMatrix(dim)
std::unique_ptr< MaterialEffectsBase > uniqueClone() const
NVI uniqueClone.
void stable_sort(std::reverse_iterator< DataModel_detail::iterator< DVL > > beg, std::reverse_iterator< DataModel_detail::iterator< DVL > > end, Compare comp)
Specialization of stable_sort for DataVector/List.
structure to hold information per chamber in the muon system
Trk::RecVertex inherits from Trk::Vertex.
std::pair< double, ParamDefs > DefinedParameter
const std::vector< ChamberHitSummary > & chamberHitSummary() const
access to the vector of chamber hit summaries on the track
virtual void setOwner(IDataHandleHolder *o)=0
@ Outlier
This TSoS contains an outlier, that is, it contains a MeasurementBase/RIO_OnTrack which was not used ...
Gaudi::Property< double > m_lineMomentum
@ StraightTrack
A straight track.
std::atomic_uint m_countAcceptedStandaloneFit
Class to handle pseudo-measurements in fitters and on track objects.
Gaudi::Property< bool > m_cleanCombined
ToolHandle< Trk::IPropagator > m_propagator
ToolHandle< Muon::IMdtDriftCircleOnTrackCreator > m_mdtRotCreator
represents the full description of deflection and e-loss of a track in material.
bool type(const TrackStateOnSurfaceType type) const
Use this method to find out if the TSoS is of a certain type: i.e.
bool checkTrack(std::string_view txt, const Trk::Track *newTrack) const
void addPatternReco(const TrackInfo &)
A method adding just pattern recognition info without adding the actual properties.
double sigmaDeltaTheta() const
returns the
CombinedMuonTrackFitter(const std::string &type, const std::string &name, const IInterface *parent)
Gaudi::Property< double > m_vertex2DSigmaRPhi
std::string toString(const Translation3D &translation, int precision=4)
GeoPrimitvesToStringConverter.
bool loadMagneticField(const EventContext &ctx, MagField::AtlasFieldCache &field_cache) const
@ Hole
A hole on the track - this is defined in the following way.
virtual ChargedTrackParametersUniquePtr createUniqueTrackParameters(double l1, double l2, double phi, double theat, double qop, std::optional< AmgSymMatrix(5)> cov=std::nullopt) const =0
Use the Surface as a ParametersBase constructor, from local parameters - charged.
const MaterialEffectsBase * materialEffectsOnTrack() const
return material effects const overload
std::atomic_uint m_countVertexRegion
ToolHandle< Trk::ITrackSummaryTool > m_trackSummary
std::unique_ptr< const Trk::Volume > m_indetVolume
std::unique_ptr< MeasurementBase > uniqueClone() const
NVI Clone giving up unique pointer.
Gaudi::Property< bool > m_addIDMSerrors
std::unique_ptr< Trk::Track > createIndetTrack(const Trk::TrackInfo &info, const Trk::TrackStates *tsos) const
Trk::MagneticFieldProperties m_magFieldProperties
static std::unique_ptr< Trk::TrackStateOnSurface > createMeasTSOS(std::unique_ptr< Trk::MeasurementBase > meas, std::unique_ptr< Trk::TrackParameters > pars, Trk::TrackStateOnSurface::TrackStateOnSurfaceType type)
create a TSOS with a measurement, takes ownership of the pointers
std::atomic_uint m_countExtensionCleanerVeto
ToolHandle< Trk::ITrackFitter > m_fitterSL
double chi2(TH1 *h0, TH1 *h1)
double deltaE() const
returns the
const T * front() const
Access the first element in the collection as an rvalue.
@ ScatteringEffects
contains material effects due to multiple scattering
std::vector< std::unique_ptr< const TrackStateOnSurface > > Garbage_t
std::unique_ptr< const Trk::Volume > m_calorimeterVolume
ToolHandle< Rec::IMuonTrackQuery > m_trackQuery
Detailed track summary for the muon system Give access to hit counts per chamber.
ToolHandle< Muon::IMuonHoleRecoveryTool > m_muonHoleRecovery
Gaudi::Property< double > m_largeImpact
Class to represent and store fit qualities from track reconstruction in terms of and number of degre...
StoreGateSvc_t m_detStore
Pointer to StoreGate (detector store by default)
ToolHandle< Rec::IMuidCaloTrackStateOnSurface > m_caloTSOS
const Amg::Vector3D & position() const
return position of vertex
int numberDoF() const
returns the number of degrees of freedom of the overall track or vertex fit as integer
const_reverse_iterator rbegin() const noexcept
Return a const_reverse_iterator pointing past the end of the collection.
std::unique_ptr< const Trk::PerigeeSurface > m_perigeeSurface
@ Parameter
This TSOS contains a Trk::ParameterBase.
Gaudi::Property< double > m_largeMomentumError
ToolHandle< Trk::IExtrapolator > m_extrapolator
ToolHandle< Trk::IMaterialAllocator > m_materialAllocator
bool solenoidOn() const
status of the magnets
std::atomic_uint m_countDegradedStandaloneFit
Gaudi::Property< bool > m_cleanStandalone
SG::ReadCondHandleKey< AtlasFieldCacheCondObj > m_fieldCacheCondObjInputKey
ServiceHandle< Muon::IMuonIdHelperSvc > m_idHelperSvc
virtual void renounce()=0
std::vector< const MeasurementBase * > MeasurementSet
vector of fittable measurements
std::conditional< std::is_base_of< SG::VarHandleKeyArray, T >::value, VarHandleKeyArrayType, type2 >::type type
const AlignmentEffectsOnTrack * alignmentEffectsOnTrack() const
return the the alignment effects const overload
Gaudi::Property< bool > m_allowCleanerVeto
Gaudi::Property< bool > m_iterateCombinedTrackFit
const DataVector< const TrackParameters > * trackParameters() const
Return a pointer to a vector of TrackParameters.
const Perigee * perigeeParameters() const
return Perigee.
Ensure that the ATLAS eigen extensions are properly loaded.
PublicToolHandle< Muon::IMuonAlignmentUncertTool > m_alignUncertTool_phi
represents the track state (measurement, material, fit parameters and quality) at a surface.
virtual const SurfaceBounds & bounds() const =0
Surface Bounds method.
A summary of the information contained by a track.
virtual const Surface & associatedSurface() const =0
Interface method to get the associated Surface.
std::reverse_iterator< const_iterator > const_reverse_iterator
Standard const_reverse_iterator.
bool optimizeErrors(const EventContext &ctx, Trk::Track &track) const
double error(const Amg::MatrixX &mat, int index)
return diagonal error of the matrix caller should ensure the matrix is symmetric and the index is in ...
This class describes energy loss material effects in the ATLAS tracking EDM.
double charge(const T &p)
std::atomic_uint m_countCombinedCleanerVeto
value_type push_back(value_type pElem)
Add an element to the end of the collection.
StatusCode initialize(bool used=true)
ToolHandle< Muon::IMuonClusterOnTrackCreator > m_cscRotCreator
Eigen::Matrix< double, 3, 1 > Vector3D
virtual const Trk::PrepRawData * prepRawData() const =0
returns the PrepRawData (also known as RIO) object to which this RIO_OnTrack is associated.
std::unique_ptr< Trk::TrackParameters > extrapolatedParameters(const EventContext &ctx, bool &badlyDeterminedCurvature, const Trk::Track &spectrometerTrack, const Trk::RecVertex *mvertex, const Trk::PerigeeSurface *mperigeeSurface) const
@ EnergyLossEffects
contains energy loss corrections
Gaudi::Property< double > m_largePhiError
Gaudi::Property< double > m_vertex3DSigmaZ
FitQualityOnSurface fitQuality(const MultiComponentState &, const MeasurementBase &)
Method for determining the chi2 of the multi-component state and the number of degrees of freedom.
void momentumUpdate(std::unique_ptr< Trk::TrackParameters > ¶meters, double updatedP, bool directionUpdate=false, double deltaPhi=0., double deltaTheta=0.) const
const_iterator end() const noexcept
Return a const_iterator pointing past the end of the collection.
const DataVector< const MeasurementBase > * measurementsOnTrack() const
return a pointer to a vector of MeasurementBase (NOT including any that come from outliers).
const Amg::Vector3D & momentum() const
Access method for the momentum.
Gaudi::Property< double > m_minEnergy
ToolHandle< Rec::IMuidCaloEnergy > m_caloEnergyParam
Gaudi::Property< double > m_zECToroid
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< double > m_vertex2DSigmaZ
const EnergyLoss * energyLoss() const
returns the energy loss object.
void finalTrackBuild(const EventContext &ctx, std::unique_ptr< Trk::Track > &track) const
Gaudi::Property< bool > m_reallocateMaterial
ToolHandle< Trk::ITrackFitter > m_fitter
Gaudi::Property< bool > m_perigeeAtSpectrometerEntrance
ToolHandle< Trk::IPropagator > m_propagatorSL
virtual std::unique_ptr< NeutralParameters > propagate(const NeutralParameters ¶meters, const Surface &sf, PropDirection dir, const BoundaryCheck &bcheck, bool returnCurv=false) const =0
Main propagation method for NeutralParameters.
virtual StatusCode finalize() override
#define ATH_MSG_WARNING(x)
const PlainObject unit() const
This is a plugin that makes Eigen look like CLHEP & defines some convenience methods.
std::atomic_uint m_countStandaloneCleanerVeto
std::unique_ptr< const Trk::RecVertex > m_vertex
Identifier identify() const
return the identifier -extends MeasurementBase
const ScatteringAngles * scatteringAngles() const
returns the MCS-angles object.
Local cache for magnetic field (based on MagFieldServices/AtlasFieldSvcTLS.h)
T * get(TKey *tobj)
get a TObject* from a TKey* (why can't a TObject be a TKey?)
double sigmaDeltaPhi() const
returns the
@ Scatterer
This represents a scattering point on the track, and so will contain TrackParameters and MaterialEffe...
SG::VarHandleKey & vhKey()
Return a non-const reference to the HandleKey.
StIndex
enum to classify the different station layers in the muon spectrometer
std::vector< std::unique_ptr< const Trk::TrackStateOnSurface > > createSpectrometerTSOS(const EventContext &ctx, const Trk::Track &spectrometerTrack) const
ToolHandle< Trk::ITrkMaterialProviderTool > m_materialUpdator
void setPatternRecognitionInfo(const TrackPatternRecoInfo &patternReco)
Method setting the pattern recognition algorithm.
double deltaTheta() const
returns the
PublicToolHandle< Muon::MuonEDMPrinterTool > m_printer
float distance(const Amg::Vector3D &p1, const Amg::Vector3D &p2)
calculates the distance between two point in 3D space
double normalizedChi2(const Trk::Track &track) const
size_type size() const noexcept
Returns the number of elements in the collection.
virtual ParametersT< DIM, T, S > * clone() const override final
Virtual clone.
Gaudi::Details::PropertyBase & declareGaudiProperty(Gaudi::Property< T > &hndl, const SG::VarHandleKeyType &)
specialization for handling Gaudi::Property<SG::VarHandleKey>
const Surface & associatedSurface() const
returns the surface to which these m.eff. are associated.
bool trackProperties(const TrackProperties &property) const
Access methods for track properties.
double sigmaPlusDeltaE() const
returns the positive side
Scalar mag() const
mag method
@ Measurement
This is a measurement, and will at least contain a Trk::MeasurementBase.
unsigned int countAEOTs(const Trk::Track &track, const std::string &txt) const
const_iterator begin() const noexcept
Return a const_iterator pointing at the beginning of the collection.
Gaudi::Property< bool > m_useCaloTG
virtual ParametersBase< DIM, T > * clone() const override=0
clone method for polymorphic deep copy
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.
Gaudi::Property< bool > m_useRefitTrackError
ToolHandle< Muon::IMuonTrackCleaner > m_cleaner
@ Unknown
Track fitter not defined.