|
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 1558 of file CombinedMuonTrackBuilder.cxx.
1567 ATH_MSG_DEBUG(
" CombinedMuonTrackBuilder addIDMSerrors to track ");
1577 if (!calo_entrance || !calo_exit || !ms_entrance) {
1582 auto trackStateOnSurfaces = std::make_unique<Trk::TrackStates>();
1583 trackStateOnSurfaces->reserve(
track->trackStateOnSurfaces()->size());
1586 if (calo_entrance == trk_srf || calo_entrance == trk_srf) {
1587 if (!trk_srf->materialEffectsOnTrack()) {
1594 ATH_MSG_WARNING(
" This should not happen: no MaterialEffectsOnTrack for scatterer ");
1599 ATH_MSG_WARNING(
" This should not happen: no Scattering Angles for scatterer ");
1605 float X0 = trk_srf->materialEffectsOnTrack()->thicknessInX0();
1607 auto energyLossNew = std::make_unique<Trk::EnergyLoss>(0., 0., 0., 0.);
1610 const Trk::Surface& surfNew = trk_srf->trackParameters()->associatedSurface();
1612 std::bitset<Trk::MaterialEffectsBase::NumberOfMaterialEffectsTypes> meotPattern(0);
1616 auto meotNew = std::make_unique<Trk::MaterialEffectsOnTrack>(
1619 std::move(energyLossNew),
1622 auto parsNew = trk_srf->trackParameters()->uniqueClone();
1624 std::bitset<Trk::TrackStateOnSurface::NumberOfTrackStateOnSurfaceTypes> typePatternScat(0);
1629 trackStateOnSurfaces->push_back(newTSOS);
1634 ATH_MSG_DEBUG(
" new Calo scatterer made with sigmaDeltaPhi mrad " << sigmaDeltaPhi * 1000 <<
" sigmaDeltaTheta mrad "
1635 << sigmaDeltaTheta * 1000);
1639 if (trk_srf->alignmentEffectsOnTrack()) {
1640 ATH_MSG_DEBUG(
" addIDMSerrors alignmentEffectsOnTrack() found on track ");
1643 trackStateOnSurfaces->push_back(trk_srf->clone());
1646 ATH_MSG_DEBUG(
" trackStateOnSurfaces on input track " <<
track->trackStateOnSurfaces()->size() <<
" trackStateOnSurfaces found "
1647 << trackStateOnSurfaces->size());
1649 std::unique_ptr<Trk::Track> newTrack = std::make_unique<Trk::Track>(
track->info(), std::move(trackStateOnSurfaces),
nullptr);
◆ appendSelectedTSOS()
Definition at line 1653 of file CombinedMuonTrackBuilder.cxx.
1656 std::vector<const Trk::Surface*> measurementSurfaces;
1657 measurementSurfaces.reserve(trackStateOnSurfaces.
size());
1661 for (;
s !=
end; ++
s) {
1669 ATH_MSG_VERBOSE(
"appendSelectedTSOS:: skip a perigee without material and measuremet "<<tsos);
1683 if (previousSurface &&
1684 std::find(measurementSurfaces.begin(), measurementSurfaces.end(), surface) != measurementSurfaces.end()) {
1690 measurementSurfaces.push_back(surface);
1691 previousSurface = surface;
◆ caloEnergyParameters()
Definition at line 1697 of file CombinedMuonTrackBuilder.cxx.
1701 combinedEnergyParameters =
nullptr;
1702 muonEnergyParameters =
nullptr;
1717 muonEnergyParameters = (**s).trackParameters();
1729 combinedEnergyParameters = (**s).trackParameters();
1730 if (muonEnergyParameters && combinedEnergyParameters) {
1731 ATH_MSG_DEBUG(
"muon and combined EnergyParameters: " << muonEnergyParameters->
momentum().mag() <<
" "
1732 << 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 1738 of file CombinedMuonTrackBuilder.cxx.
1747 std::vector<std::unique_ptr<const Trk::TrackStateOnSurface>> caloTSOS, leadingTSOS;
1749 std::unique_ptr<const Trk::TrackParameters> track_param_owner;
1756 trackParameters = perigee;
1763 bool haveMaterial{
false}, haveLeadingMaterial{
false}, firstMSHit{
false};
1765 for (
const std::unique_ptr<const Trk::TrackStateOnSurface>&
s : spectrometerTSOS) {
1766 if (
s->materialEffectsOnTrack()) {
1767 haveMaterial =
true;
1768 if (!firstMSHit) haveLeadingMaterial =
true;
1771 if (
s->measurementOnTrack() && !firstMSHit) { firstMSHit =
true; }
1773 if (haveMaterial && firstMSHit) {
break; }
1782 constexpr
double Emax = 50000.;
1791 std::unique_ptr<Trk::TrackParameters> correctedParameters{
parameters.associatedSurface().createUniqueTrackParameters(
1796 std::unique_ptr<std::vector<const Trk::TrackStateOnSurface*>> lead_tsos_from_alloc{
1798 if (lead_tsos_from_alloc) {
1801 if (!leadingTSOS.empty() && leadingTSOS.front()->trackParameters()) {
1802 leadingParameters = leadingTSOS.front()->trackParameters();
1808 bool caloAssociated =
false;
1811 ATH_MSG_VERBOSE(
" Retrieving Calorimeter TSOS from " << __func__ <<
" at line " << __LINE__);
1817 for (std::unique_ptr<const Trk::TrackStateOnSurface>&
m : caloTSOS) {
1818 if (!
m->materialEffectsOnTrack())
continue;
1821 double pcalo{0.}, deltaP{0.};
1822 if (!meot)
continue;
1828 if (!scatAngles) {
continue; }
1829 pcalo =
m->trackParameters()->momentum().mag();
1835 <<
" deltaTheta " << scatAngles->
deltaTheta() <<
" pull "
1839 if (!energyLoss)
continue;
1841 if (
m->trackParameters()) {
1842 ATH_MSG_DEBUG(
"Eloss found r " << (
m->trackParameters())->position().perp() <<
" z "
1843 << (
m->trackParameters())->position().z() <<
" deltaE "
1844 << energyLoss->
deltaE());
1848 double caloEloss = std::abs(energyLoss->
deltaE());
1849 if (
m->trackParameters()) { deltaP =
m->trackParameters()->momentum().mag() - pcalo; }
1851 ATH_MSG_DEBUG(
" Calorimeter Deposit " << caloEloss <<
" pcalo Entrance " << pcalo <<
" deltaP " << deltaP);
1856 caloTSOS =
m_caloTSOS->caloTSOS(ctx, *leadingParameters);
1859 if (caloTSOS.size() > 2) {
1860 caloAssociated =
true;
1868 caloTSOS.push_back(std::move(tsos));
1871 caloAssociated =
true;
1872 caloTSOS.push_back(std::move(tsos));
1875 ATH_MSG_VERBOSE(
"Special non-muon case for calo: " << caloAssociated);
1879 if (caloAssociated) {
1888 if(not oldParameters->covariance()) {
ATH_MSG_VERBOSE(
" createExtrapolatedTrack: no cov (0)"); }
1897 trackParameters = track_param_owner.get();
1900 if (trackParameters && !
m_indetVolume->inside(trackParameters->position())) {
1901 ATH_MSG_DEBUG(
" back extrapolation problem: probably outside indet volume ");
1902 caloAssociated =
false;
1905 if (trackParameters && !trackParameters->covariance()) {
ATH_MSG_VERBOSE(
" createExtrapolatedTrack: no cov (1)"); }
1907 if (trackParameters) {
1908 ATH_MSG_VERBOSE(
" Seed parameter: r " << trackParameters->position().perp() <<
" z " << trackParameters->position().z()
1909 <<
" pt " << trackParameters->momentum().perp());
1915 ATH_MSG_DEBUG(
" back extrapolation problem: retry with tracking out from vertex ");
1922 track_param_owner = std::make_unique<Trk::Perigee>(
vertex->position(),
momentum, 1., *mperigeeSurface);
1923 trackParameters = track_param_owner.get();
1927 ATH_MSG_VERBOSE(
" Retriving Calorimeter TSOS from " << __func__ <<
" at line " << __LINE__);
1932 std::unique_ptr<const Trk::TrackStateOnSurface> tsos =
m_caloTSOS->innerTSOS(ctx, *trackParameters);
1934 caloTSOS.push_back(std::move(tsos));
1935 tsos =
m_caloTSOS->outerTSOS(ctx, *trackParameters);
1937 caloTSOS.push_back(std::move(tsos));
1939 track_param_owner.reset();
1943 trackParameters = track_param_owner.get();
1947 if (!trackParameters || caloTSOS.empty()) {
1954 if (seedParameters) { trackParameters = seedParameters; }
1958 const unsigned int size = spectrometerTSOS.size() + 3 + caloTSOS.size() + leadingTSOS.size();
1960 auto trackStateOnSurfaces = std::make_unique<Trk::TrackStates>();
1961 trackStateOnSurfaces->reserve(
size);
1965 if (trackParameters && !trackParameters->covariance()) {
ATH_MSG_VERBOSE(
" createExtrapolatedTrack: no cov (2)"); }
1967 if (trackParameters) {
1969 ATH_MSG_DEBUG(
"createExtrapolatedTrack() - Track parameters are not perigee " << (*trackParameters));
1975 if (
vertex && trackParameters) {
1976 std::unique_ptr<Trk::PseudoMeasurementOnTrack> vertexInFit =
vertexOnTrack(*trackParameters,
vertex, mbeamAxis);
1984 for (std::unique_ptr<const Trk::TrackStateOnSurface>& c_tsos : caloTSOS) { trackStateOnSurfaces->push_back(std::move(c_tsos)); }
1989 const Trk::TrackParameters* mstrackParameters = trackStateOnSurfaces->back()->trackParameters();
1991 if (!mstrackParameters) { mstrackParameters = spectrometerTSOS.front()->
trackParameters(); }
1993 if (mstrackParameters) {
1994 std::unique_ptr<Trk::TrackStateOnSurface> entranceTSOS =
entrancePerigee(ctx, mstrackParameters);
1995 if (entranceTSOS) { trackStateOnSurfaces->push_back(std::move(entranceTSOS)); }
2000 for (std::unique_ptr<const Trk::TrackStateOnSurface>& c_tsos : leadingTSOS) {
2001 if (c_tsos->materialEffectsOnTrack()) { trackStateOnSurfaces->push_back(std::move(c_tsos)); }
2003 leadingTSOS.clear();
2006 for (
const auto&
s : spectrometerTSOS) {
2009 trackStateOnSurfaces->push_back(
s->clone());
2018 std::unique_ptr<Trk::Track>
track =
2019 std::make_unique<Trk::Track>(spectrometerTrack.
info(), std::move(trackStateOnSurfaces),
nullptr);
2021 if (!
track->perigeeParameters()) {
2037 :
"usig interacting hypothesis"));
2039 std::unique_ptr<Trk::Track> fittedTrack{
fit(ctx, *
track, runOutlier, particleHypothesis)};
2044 if (fittedTrack->perigeeParameters() && !
m_indetVolume->inside(fittedTrack->perigeeParameters()->position())) {
2045 ATH_MSG_DEBUG(
" back extrapolation problem: fitted perigee outside indet volume ");
◆ createIndetTrack()
Definition at line 2062 of file CombinedMuonTrackBuilder.cxx.
2065 auto trackStateOnSurfaces = std::make_unique<Trk::TrackStates>();
2075 std::unique_ptr<Trk::TrackStateOnSurface> perigeeTSOS {(**s).clone()};
2078 for (;
s !=
end; ++
s) {
2080 if (!
m_indetVolume->inside((**s).trackParameters()->position())) {
break; }
2084 trackStateOnSurfaces->reserve(
size);
2085 trackStateOnSurfaces->push_back(std::move(perigeeTSOS));
2090 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 2093 of file CombinedMuonTrackBuilder.cxx.
2105 while ((**s).trackParameters() &&
2107 if (
m_indetVolume->inside((**s).trackParameters()->position())) { lastIDtp = (**s).trackParameters(); }
2113 auto trackStateOnSurfaces = std::make_unique<Trk::TrackStates>();
2116 bool redoCaloAssoc =
false;
2118 redoCaloAssoc =
true;
2121 while ((**s).trackParameters() &&
2128 std::vector<std::unique_ptr<const Trk::TrackStateOnSurface>> caloTSOS;
2131 ATH_MSG_VERBOSE(
" Retriving Calorimeter TSOS from " << __func__ <<
" at line " << __LINE__);
2137 if (caloTSOS.size() < 3) {
2138 ATH_MSG_DEBUG(
" muonTrack: parameters fail to fully intersect the calorimeter");
2142 size += caloTSOS.size();
2143 trackStateOnSurfaces->reserve(
size + 1);
2146 for (std::unique_ptr<const Trk::TrackStateOnSurface>& c_tsos : caloTSOS) { trackStateOnSurfaces->push_back(std::move(c_tsos)); }
2149 trackStateOnSurfaces->reserve(
size + 1);
2154 if (caloEnergy && (**s).trackParameters() &&
m_calorimeterVolume->inside((**s).trackParameters()->position())) {
2156 trackStateOnSurfaces->push_back(TSOS);
2160 if ((**s).trackParameters() &&
m_calorimeterVolume->inside((**s).trackParameters()->position())) {
2161 std::bitset<Trk::MaterialEffectsBase::NumberOfMaterialEffectsTypes> typePattern;
2164 std::unique_ptr<Trk::MaterialEffectsOnTrack> materialEffects =
2165 std::make_unique<Trk::MaterialEffectsOnTrack>(0., std::move(caloEnergy), (**s).trackParameters()->associatedSurface(), typePattern);
2169 std::bitset<Trk::TrackStateOnSurface::NumberOfTrackStateOnSurfaceTypes>
type;
2173 trackStateOnSurfaces->push_back(TSOS);
2182 bool hasAlreadyPerigee =
false;
2185 while ((**s).trackParameters() &&
m_calorimeterVolume->inside((**s).trackParameters()->position())) {
2188 trackStateOnSurfaces->push_back(TSOS);
2194 std::unique_ptr<Trk::TrackStateOnSurface> entranceTSOS;
2198 if (!hasAlreadyPerigee) {
2199 if ((**s).trackParameters()) {
2202 entranceTSOS =
entrancePerigee(ctx, trackStateOnSurfaces->back()->trackParameters());
2211 << (**s).trackParameters()->position().perp() <<
" z " << (**s).trackParameters()->position().z());
2213 trackStateOnSurfaces->push_back(std::move(entranceTSOS));
2214 hasAlreadyPerigee =
true;
2223 if (!hasAlreadyPerigee && std::find_if(trackStateOnSurfaces->begin(), trackStateOnSurfaces->end(),
2225 return tsos->type(Trk::TrackStateOnSurface::Perigee);
2229 std::stable_sort(trackStateOnSurfaces->begin(),trackStateOnSurfaces->end(),
2231 return a->type(Trk::TrackStateOnSurface::Perigee) > b->type(Trk::TrackStateOnSurface::Perigee);
2233 ATH_MSG_DEBUG(__FILE__<<
":"<<__LINE__<<
" No track perigee parameters were added. Copy the existing ones from the muon track");
2235 std::unique_ptr<Trk::Track> newMuonTrack = std::make_unique<Trk::Track>(muonTrack.
info(), std::move(trackStateOnSurfaces),
nullptr);
2236 unsigned int num_ms{0}, num_precMS{0};
2243 if (num_precMS < 3 || num_ms < 5) {
2244 ATH_MSG_VERBOSE(__FILE__
":"<<__LINE__<<
" MS track with too few meausrements constructed "<<std::endl<<
2254 return newMuonTrack;
◆ createPhiPseudoMeasurement()
Definition at line 2257 of file CombinedMuonTrackBuilder.cxx.
2261 covarianceMatrix.setZero();
2262 covarianceMatrix(0, 0) = s_sigmaPhiSector * s_sigmaPhiSector *
parameters->position().perp2();
2264 std::unique_ptr<Trk::PseudoMeasurementOnTrack> pseudo = std::make_unique<Trk::PseudoMeasurementOnTrack>(
2266 std::move(covarianceMatrix),
◆ createSpectrometerTSOS()
Definition at line 2272 of file CombinedMuonTrackBuilder.cxx.
2275 std::vector<std::unique_ptr<const Trk::TrackStateOnSurface>> spectrometerTSOS;
2279 if (!measuredPerigee)
2281 else if (!measuredPerigee->covariance())
2284 ATH_MSG_DEBUG(
"createSpectrometerTSOS::perigee covariance not valid");
2285 return spectrometerTSOS;
2294 unsigned numberPseudo =
m_trackQuery->numberPseudoMeasurements(spectrometerTrack);
2295 if (errorPhi > s_sigmaPhiSector) { ++numberPseudo; }
2297 if (numberPseudo > 1 && !
m_trackQuery->isSectorOverlap(spectrometerTrack)) {
2301 if (tsos) { spectrometerTSOS.emplace_back(std::move(tsos)); }
2306 bool haveMeasurement =
false;
2308 std::vector<const Trk::Surface*> measurementSurfaces;
2311 unsigned numberMaterial{0}, numberParameters{0};
2314 std::unique_ptr<const Trk::TrackStateOnSurface> previousTSOS;
2318 if (!haveMeasurement) {
2319 if (
s->measurementOnTrack()) {
2320 haveMeasurement =
true;
2321 }
else if (
s->materialEffectsOnTrack()) {
2329 if (
s->materialEffectsOnTrack()) ++numberMaterial;
2330 if (trackParameters) ++numberParameters;
2334 if (!
s->measurementOnTrack() && !
s->materialEffectsOnTrack()) {
2341 if (
s->trackParameters()) {
2342 ATH_MSG_DEBUG(
"createSpectrometerTSOS:: skip unrecognized TSOS " <<
s->dumpType() <<
" r "
2343 <<
s->trackParameters()->position().perp() <<
" z "
2344 <<
s->trackParameters()->position().z());
2353 bool trapezoid =
false;
2354 bool rotatedTrap =
false;
2355 if (
s->measurementOnTrack()) {
2362 const Trk::Surface* surface = &
s->measurementOnTrack()->associatedSurface();
2364 if (previousSurface) {
deltaZ = std::abs(previousSurface->
center().z() - surface->
center().z()); }
2375 if (previousSurface &&
2376 std::find(measurementSurfaces.begin(), measurementSurfaces.end(), surface) != measurementSurfaces.end()) {
2381 measurementSurfaces.push_back(surface);
2382 previousSurface = surface;
2384 }
else if (previousTSOS) {
2385 spectrometerTSOS.emplace_back(std::move(previousTSOS));
2389 std::unique_ptr<const Trk::TrackStateOnSurface> TSOS(
s->clone());
2392 spectrometerTSOS.emplace_back(std::move(TSOS));
2393 TSOS = std::move(previousTSOS);
2395 spectrometerTSOS.emplace_back(std::move(previousTSOS));
2400 previousTSOS.swap(TSOS);
2404 spectrometerTSOS.emplace_back(std::move(TSOS));
2407 if (previousTSOS) spectrometerTSOS.emplace_back(std::move(previousTSOS));
2410 << numberMaterial <<
" have MaterialEffects and " << numberParameters
2411 <<
" have TrackParameters");
2413 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 3032 of file CombinedMuonTrackBuilder.cxx.
3051 double idEloss = 0.;
3052 double caloEloss = 0.;
3053 double msEloss = 0.;
3058 double pMuonEntry = 0.;
3060 for (
const auto*
m : *trackTSOS) {
3063 if (
m->trackParameters()) { pMuonEntry =
m->trackParameters()->momentum().mag(); }
3067 if (
id.is_valid()) {
3073 if (pstart == 0 &&
m->trackParameters()) {
3074 pstart =
m->trackParameters()->momentum().mag();
3075 eta =
m->trackParameters()->momentum().eta();
3077 ATH_MSG_DEBUG(
"Start pars found eta " << eta <<
" r " << (
m->trackParameters())->position().perp() <<
" z "
3078 << (
m->trackParameters())->position().z() <<
" pstart " << pstart);
3081 if (
m->materialEffectsOnTrack()) {
3091 pcalo =
m->trackParameters()->momentum().mag();
3097 << pullPhi <<
" deltaTheta (mrad) " << 1000 * scatAngles->
deltaTheta() <<
" sigma "
3104 if (
m->trackParameters()) {
3105 ATH_MSG_DEBUG(
"Eloss found r " << (
m->trackParameters())->position().perp() <<
" z "
3106 << (
m->trackParameters())->position().z() <<
" value " << energyLoss->
deltaE()
3107 <<
" Eloss " << Eloss);
3112 caloEloss = std::abs(energyLoss->
deltaE());
3115 if (
m->trackParameters()) { deltaP =
m->trackParameters()->momentum().mag() - pcalo; }
3120 ATH_MSG_DEBUG(txt <<
" Calorimeter delta p " << deltaP <<
" deltaE " << caloEloss
3121 <<
" delta pID = pcaloEntry-pstart " << pcalo - pstart);
3124 Eloss += std::abs(energyLoss->
deltaE());
3132 Eloss = idEloss + caloEloss + msEloss;
3135 <<
" caloEloss " << caloEloss <<
" msEloss " << msEloss <<
" Total " << Eloss <<
" pstart - pMuonEntry "
3136 << pstart - pMuonEntry);
◆ entrancePerigee()
Definition at line 2416 of file CombinedMuonTrackBuilder.cxx.
2420 if (!spectrometerEntrance)
return nullptr;
2422 std::unique_ptr<Trk::TrackParameters> entranceParameters{
2425 if (!entranceParameters)
return nullptr;
2428 std::unique_ptr<Trk::TrackParameters> trackParameters{
m_extrapolator->extrapolateDirectly(ctx, *entranceParameters, surface)};
2430 if (!trackParameters)
return nullptr;
2432 std::unique_ptr<Trk::Perigee> perigee =
2433 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 2437 of file CombinedMuonTrackBuilder.cxx.
2440 badlyDeterminedCurvature =
false;
2443 if (!measuredPerigee || !measuredPerigee->covariance()) {
2457 double errorP = std::sqrt(measuredPerigee->momentum().mag2() * (*measuredPerigee->covariance())(
Trk::qOverP,
Trk::qOverP));
2460 std::unique_ptr<Trk::TrackParameters> correctedParameters{};
2462 double trackEnergy = 1. / std::abs(parameterVector[
Trk::qOverP]);
2476 bool curvatureOK =
false;
2493 std::unique_ptr<CaloEnergy> caloEnergy{
2496 if (trackEnergy + caloEnergy->deltaE() <
m_minEnergy) {
2502 correctedParameters =
parameters->associatedSurface().createUniqueTrackParameters(
2509 double spectrometerEnergyLoss = 0.;
2513 for (;
s != sEnd; ++
s) {
2514 if (!(**s).materialEffectsOnTrack()) {
continue; }
2521 if (std::abs(spectrometerEnergyLoss) > 1.5 * std::abs(caloEnergy->deltaE())) {
2522 curvatureOK =
false;
2523 ATH_MSG_DEBUG(
"standaloneFit: excessive energy loss in spectrometer "
2525 <<
" in calo " << std::abs(caloEnergy->deltaE() /
Gaudi::Units::GeV) <<
" GeV");
2532 std::unique_ptr<Trk::TrackParameters> perigee{propagator->
propagate(
2536 ATH_MSG_DEBUG(
"standaloneFit: failed back extrapolation to perigee");
2542 ATH_MSG_DEBUG(
"Track d0 perigee: " << std::abs(perigee->parameters()[
Trk::d0]) <<
" which is smaller than "
2548 double deltaR = (position - perigee->position()).
perp();
2565 correctedParameters =
parameters->associatedSurface().createUniqueTrackParameters(
2574 deltaR = (position - perigee->position()).
perp();
2580 ATH_MSG_VERBOSE(
"standaloneFit: corrected perigee impact " << perigee->parameters()[
Trk::d0] <<
" deltaR, deltaPhi "
2589 correctedParameters =
parameters->associatedSurface().createUniqueTrackParameters(
2602 correctedParameters =
parameters->associatedSurface().createUniqueTrackParameters(
2610 if (!perigee || !
m_indetVolume->inside(perigee->position())) {
2611 if (perigee && perigee->position().z() * perigee->momentum().z() < 0. && perigee->momentum().eta() > 2.0) {
2612 ATH_MSG_DEBUG(
"standaloneFit: halo candidate, perigee at R " << perigee->position().perp() <<
" Z "
2613 << perigee->position().z());
2615 ATH_MSG_DEBUG(
"standaloneFit: perigee outside indet volume");
2622 badlyDeterminedCurvature =
true;
2625 std::unique_ptr<const Trk::TrackParameters> trigParameters{
m_trackQuery->triggerStationParameters(spectrometerTrack, ctx)};
2630 if (trigParameters) {
2632 <<
" start with line from origin to 1st trigger station ");
2635 <<
" start with line from origin to 1st measurement ");
2639 std::unique_ptr<Trk::TrackParameters> perigee =
2640 std::make_unique<Trk::Perigee>(mvertex->
position(),
momentum, 1., *mperigeeSurface);
2646 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 3150 of file CombinedMuonTrackBuilder.cxx.
3152 std::vector<std::unique_ptr<const Trk::TrackStateOnSurface>> to_ret;
3153 std::unique_ptr<std::vector<const Trk::TrackStateOnSurface*>> tsos_vec{
m_materialUpdator->getCaloTSOS(track_params, me_track)};
3155 to_ret.reserve(tsos_vec->size());
◆ getVolume()
Tracking geometry is provided by the TrackingGeometryAlg
Definition at line 3141 of file CombinedMuonTrackBuilder.cxx.
3144 if (!handle.isValid()) {
3148 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());
553 if (frontParameters) {
554 trackStateOnSurfaces->push_back(
556 }
else if (in_meas == midMeasurement) {
557 trackStateOnSurfaces->push_back(
559 }
else if (backParameters && in_meas == spectrometerMeasurements.back()) {
560 trackStateOnSurfaces->push_back(
563 trackStateOnSurfaces->push_back(
573 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 2743 of file CombinedMuonTrackBuilder.cxx.
2747 std::unique_ptr<Trk::TrackParameters> updatedParameters;
2752 if (directionUpdate) {
2753 double cosDeltaPhi = 0.;
2756 if (std::abs(sinDeltaPhi) < 1.) { cosDeltaPhi = std::sqrt(1. - sinDeltaPhi * sinDeltaPhi); }
2758 double cosDeltaTheta = 0.;
2759 double sinDeltaTheta =
std::sin(deltaTheta);
2761 if (std::abs(sinDeltaTheta) < 1.) { cosDeltaTheta = std::sqrt(1. - sinDeltaTheta * sinDeltaTheta); }
2763 double cosTheta = direction.z() * cosDeltaTheta - direction.perp() * sinDeltaTheta;
2764 if (std::abs(cosTheta) < 1.) {
2765 direction =
Amg::Vector3D(direction.x() * cosDeltaPhi - direction.y() * sinDeltaPhi,
2766 direction.y() * cosDeltaPhi + direction.x() * sinDeltaPhi,
2767 direction.perp() * cosTheta / std::sqrt(1. - cosTheta * cosTheta));
2772 direction = direction.unit();
2782 parameters->covariance() ? std::optional<AmgSymMatrix(5)>(*(
parameters->covariance())) : std::nullopt;
2786 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 2793 of file CombinedMuonTrackBuilder.cxx.
2797 double perigeeDistance = 0.;
2803 for (;
s != sEnd; ++
s) {
2809 spectrometerMeasurements.push_back((**s).measurementOnTrack()->clone());
2810 if (!(**s).trackParameters() || (perigeeStartValue && (**s).trackParameters()->position().mag() > perigeeDistance)) {
2814 perigeeDistance = (**s).trackParameters()->position().mag();
2815 perigeeStartValue = (**s).trackParameters();
2820 if (!perigeeStartValue) {
2828 std::unique_ptr<Trk::Track> spectrometerFit =
fit(ctx, spectrometerMeasurements, *perigeeStartValue,
true,
Trk::muon);
2829 if (!spectrometerFit) {
2830 spectrometerFit =
fit(ctx, spectrometerMeasurements, *perigeeStartValue,
false,
Trk::muon);
2832 if (!spectrometerFit) {
2835 if (!spectrometerFit) {
2845 auto mEnd = spectrometerMeasurements.end();
2846 for (;
m != mEnd; ++
m) {
delete *
m; }
2848 return spectrometerFit;
◆ removeSpectrometerMaterial()
void Rec::CombinedMuonTrackBuilder::removeSpectrometerMaterial |
( |
std::unique_ptr< Trk::Track > & |
track | ) |
const |
|
private |
aaaaaahhhhh
Definition at line 2851 of file CombinedMuonTrackBuilder.cxx.
2853 bool limitMomentum =
false;
2854 double momentum =
track->perigeeParameters()->momentum().mag();
2860 if (measuredPerigee) {
2863 while (!(**r).trackParameters()) { --
r; }
2865 limitMomentum =
true;
2867 if (!measuredPerigee->covariance()) {
2868 ATH_MSG_DEBUG(
"measuredPerigee has no covariance, qOverP not set");
2881 std::bitset<Trk::TrackStateOnSurface::NumberOfTrackStateOnSurfaceTypes> defaultType;
2882 std::bitset<Trk::TrackStateOnSurface::NumberOfTrackStateOnSurfaceTypes>
type = defaultType;
2883 auto trackStateOnSurfaces = std::make_unique<Trk::TrackStates>();
2885 trackStateOnSurfaces->reserve(
track->trackStateOnSurfaces()->size());
2886 bool is_first{
true};
2889 if (tsos->trackParameters()) {
2890 if (limitMomentum && is_first && tsos->trackParameters()->covariance() &&
2892 Amg::VectorX parameterVector = tsos->trackParameters()->parameters();
2896 std::unique_ptr<Trk::TrackParameters>
parameters =
2897 tsos->trackParameters()->associatedSurface().createUniqueTrackParameters(
2899 parameterVector[
Trk::qOverP], *tsos->trackParameters()->covariance());
2904 std::unique_ptr<Trk::MeasurementBase> measurementBase;
2905 if (tsos->measurementOnTrack()) {
2906 measurementBase = tsos->measurementOnTrack()->
uniqueClone();
2909 trackStateOnSurfaces->push_back(
2912 trackStateOnSurfaces->push_back(tsos->clone());
2920 if (tsos->materialEffectsOnTrack() &&
2921 !
m_calorimeterVolume->inside(tsos->materialEffectsOnTrack()->associatedSurface().globalReferencePoint())) {
2922 if (tsos->measurementOnTrack()) {
2923 Amg::VectorX parameterVector = tsos->trackParameters()->parameters();
2925 std::unique_ptr<Trk::TrackParameters> trackParameters =
2926 tsos->trackParameters()->associatedSurface().createUniqueTrackParameters(
2929 tsos->trackParameters()->covariance() ? std::optional<
AmgSymMatrix(5)>(*tsos->trackParameters()->covariance())
2936 std::unique_ptr<Trk::MeasurementBase> measurementBase;
2937 measurementBase = tsos->measurementOnTrack()->
uniqueClone();
2938 trackStateOnSurfaces->push_back(
2942 }
else if (!tsos->measurementOnTrack() && tsos->trackParameters() &&
2947 if (limitMomentum && tsos->trackParameters()) {
2948 Amg::VectorX parameterVector = tsos->trackParameters()->parameters();
2950 std::unique_ptr<Trk::TrackParameters> trackParameters =
2954 tsos->trackParameters()->covariance() ? std::optional<
AmgSymMatrix(5)>(*tsos->trackParameters()->covariance())
2959 std::unique_ptr<Trk::MeasurementBase> measurementBase;
2960 if (tsos->measurementOnTrack()) {
2965 measurementBase = tsos->measurementOnTrack()->
uniqueClone();
2968 std::unique_ptr<Trk::MaterialEffectsBase> materialEffects;
2969 if (tsos->materialEffectsOnTrack()) {
2973 materialEffects = tsos->materialEffectsOnTrack()->
uniqueClone();
2975 trackStateOnSurfaces->push_back(
new Trk::TrackStateOnSurface(std::move(measurementBase), std::move(trackParameters),
2976 std::move(materialEffects),
type));
2978 trackStateOnSurfaces->push_back(tsos->clone());
2984 std::unique_ptr<Trk::FitQuality>
fitQuality =
nullptr;
2985 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 577 of file CombinedMuonTrackBuilder.cxx.
585 if (
m_trackQuery->isLineFit(inputSpectrometerTrack) && !fieldCache.
toroidOn()) {
return nullptr; }
587 ATH_MSG_DEBUG(
" standaloneFit beam position bs_x " << origin <<
" inputVertex "
591 msg(
MSG::VERBOSE) <<
endmsg <<
"==== Start of standaloneFit:: " << std::setiosflags(std::ios::fixed);
593 if (
m_trackQuery->isExtrapolated(inputSpectrometerTrack, ctx)) {
598 << inputSpectrometerTrack.perigeeParameters()->momentum().mag() /
Gaudi::Units::GeV <<
" (GeV)";
601 msg(
MSG::VERBOSE) <<
" at eta " << std::setw(6) << std::setprecision(3)
602 << inputSpectrometerTrack.perigeeParameters()->momentum().eta() <<
" phi " << std::setw(6)
603 << std::setprecision(3) << inputSpectrometerTrack.perigeeParameters()->momentum().phi();
605 }
else if (!
m_trackQuery->isProjective(inputSpectrometerTrack)) {
607 }
else if (inputSpectrometerTrack.perigeeParameters()) {
612 << inputSpectrometerTrack.perigeeParameters()->momentum().mag() /
Gaudi::Units::GeV <<
" (GeV)";
615 msg(
MSG::VERBOSE) <<
" at eta " << std::setw(6) << std::setprecision(3)
616 << inputSpectrometerTrack.perigeeParameters()->position().eta() <<
" phi " << std::setw(6)
617 << std::setprecision(3) << inputSpectrometerTrack.perigeeParameters()->position().phi();
619 if (inputSpectrometerTrack.perigeeParameters()->covariance()) {
628 if (inputSpectrometerTrack.fitQuality()) {
630 << std::setw(2) << inputSpectrometerTrack.fitQuality()->numberDoF();
633 if (
m_trackQuery->numberPseudoMeasurements(inputSpectrometerTrack)) {
642 if (inputVertex && !
vertex) {
650 const Trk::TrackStates* tsos = inputSpectrometerTrack.trackStateOnSurfaces();
652 if (!
fitQuality || !inputSpectrometerTrack.trackStateOnSurfaces() ||
653 static_cast<int>(inputSpectrometerTrack.trackStateOnSurfaces()->size()) <
fitQuality->
numberDoF()) {
655 int measurements = 0;
660 if (measurements < 4) {
667 if (
fitQuality && measurements < fitQuality->numberDoF() + 4) {
675 const bool is_extrapolated =
m_trackQuery->isExtrapolated(inputSpectrometerTrack, ctx);
676 if (!is_extrapolated && !
m_trackQuery->isProjective(inputSpectrometerTrack)) {
682 double spectrometerFitChi2 =
normalizedChi2(inputSpectrometerTrack);
683 std::unique_ptr<Trk::Track> spectrometerFit = std::make_unique<Trk::Track>(inputSpectrometerTrack);
686 if (!spectrometerFit) {
692 const Trk::Track& spectrometerTrack = *spectrometerFit;
697 if (!measuredPerigee || !measuredPerigee->covariance()) {
706 bool badlyDeterminedCurvature =
false;
709 ATH_MSG_WARNING(
"standaloneFit: measuredPerigee has non-positive-definite covariance ");
715 double errorP = std::sqrt(measuredPerigee->momentum().mag2() * (*measuredPerigee->covariance())(
Trk::qOverP,
Trk::qOverP));
717 std::unique_ptr<Trk::RecVertex> mvertex = std::make_unique<Trk::RecVertex>(*
m_vertex);
718 std::unique_ptr<Trk::RecVertex> mbeamAxis = std::make_unique<Trk::RecVertex>(*
m_beamAxis);
719 std::unique_ptr<Trk::PerigeeSurface> mperigeeSurface = std::make_unique<Trk::PerigeeSurface>(*
m_perigeeSurface);
721 std::unique_ptr<const Trk::TrackParameters>
parameters;
726 ATH_MSG_VERBOSE(
"standaloneFit: vertex fit not attempted as curvature badly measured");
735 if ((origin - mvertex->
position()).mag() > 0.001) {
738 mperigeeSurface = std::make_unique<Trk::PerigeeSurface>(origin);
741 beamAxisCovariance.setZero();
745 mbeamAxis = std::
make_unique<
Trk::RecVertex>(origin, beamAxisCovariance);
748 vertexRegionCovariance.setZero();
752 mvertex = std::
make_unique<
Trk::RecVertex>(origin, vertexRegionCovariance);
764 std::vector<std::unique_ptr<const Trk::TrackStateOnSurface>> spectrometerTSOS =
createSpectrometerTSOS(ctx, spectrometerTrack);
766 if (spectrometerTSOS.empty()) {
774 bool haveFitWithVertex =
false;
775 bool performPrefit =
false;
779 if (
s->measurementOnTrack() && !
s->trackParameters()) {
780 performPrefit =
true;
787 std::unique_ptr<Trk::Track> prefit;
794 bool inCSCregion = std::abs(measuredPerigee->momentum().eta()) > 2.0;
798 if (inCSCregion ||
m_trackQuery->numberPseudoMeasurements(spectrometerTrack) ||
801 performPrefit =
true;
802 vertexInFit = (badlyDeterminedCurvature || inCSCregion) ? mvertex.get() : mbeamAxis.get();
805 unsigned numberPseudo =
m_trackQuery->numberPseudoMeasurements(spectrometerTrack);
806 if (errorPhi > s_sigmaPhiSector) { ++numberPseudo; }
808 if (badlyDeterminedCurvature) {
809 ATH_MSG_DEBUG(
" prefit with vertex: " << std::setiosflags(std::ios::fixed) <<
" momentum " << std::setprecision(1)
811 << std::setprecision(1) << std::abs(
parameters->position().z())
812 <<
", phiError " << std::setprecision(2) << errorPhi <<
", momentumError "
813 << std::setprecision(2) << errorP <<
", numberPseudo " << numberPseudo);
816 << std::setiosflags(std::ios::fixed) <<
" momentum " << std::setprecision(1)
817 << measuredPerigee->momentum().mag() /
Gaudi::Units::GeV <<
" (GeV), zFirst " << std::setprecision(1)
818 << std::abs(
parameters->position().z()) <<
", phiError " << std::setprecision(2) << errorPhi
819 <<
", momentumError " << std::setprecision(2) << errorP <<
", numberPseudo " << numberPseudo);
825 std::unique_ptr<const Trk::Perigee> prefitResult;
831 if (vertexInFit) { haveFitWithVertex =
true; }
835 ATH_MSG_VERBOSE(
"Calling createExtrapolatedTrack from " << __func__ <<
" at line " << __LINE__);
837 mbeamAxis.get(), mperigeeSurface.get());
854 if (!
s->trackParameters() || !
s->trackParameters()->covariance()) {
continue; }
859 ATH_MSG_DEBUG(
"Found first parameters in MS " <<
s->trackParameters()->position().perp() <<
" z "
860 <<
s->trackParameters()->position().z());
876 spectrometerTSOS.clear();
889 return (tsos->trackParameters() && !m_calorimeterVolume->inside(tsos->trackParameters()->position())) ||
890 tsos->type(Trk::TrackStateOnSurface::Perigee);
895 for (;
s != prefit_tsos->
end(); ++
s) { spectrometerTSOS.emplace_back((*s)->clone()); }
900 for (std::unique_ptr<const Trk::TrackStateOnSurface>&
t : spectrometerTSOS) {
901 if (!
t->measurementOnTrack() || !
t->trackParameters()) {
continue; }
910 std::unique_ptr<Trk::RIO_OnTrack> updatedRot;
928 bool returnAfterCleaner = !fieldCache.
toroidOn();
930 ATH_MSG_VERBOSE(
"Calling createExtrapolatedTrack from " << __func__ <<
" at line " << __LINE__);
933 mperigeeSurface.get(), prefitResult.get()));
939 if (extrapolated && !haveFitWithVertex && !vertexInFit) {
941 std::unique_ptr<Trk::Track> badfit(std::move(extrapolated));
943 auto trackStateOnSurfaces = std::make_unique<Trk::TrackStates>();
944 trackStateOnSurfaces->reserve(badfit->trackStateOnSurfaces()->size() + 1);
946 std::bitset<Trk::TrackStateOnSurface::NumberOfTrackStateOnSurfaceTypes>
type{};
948 std::unique_ptr<Trk::PseudoMeasurementOnTrack> vertexInFit =
949 vertexOnTrack(*badfit->perigeeParameters(), mvertex.get(), mbeamAxis.get());
954 std::move(vertexInFit), badfit->perigeeParameters()->uniqueClone(),
nullptr,
type));
957 s != badfit->trackStateOnSurfaces()->end(); ++
s) {
958 trackStateOnSurfaces->push_back((**s).clone());
961 std::unique_ptr<Trk::Track>
track =
962 std::make_unique<Trk::Track>(spectrometerTrack.
info(), std::move(trackStateOnSurfaces),
nullptr);
968 if (prefit && prefit->
fitQuality() && caloParameters) {
969 ATH_MSG_DEBUG(
" restarting from prefit as back extrapolation fit failed");
970 spectrometerTSOS.clear();
981 ATH_MSG_VERBOSE(
"Calling createExtrapolatedTrack from " << __func__ <<
" at line " << __LINE__);
984 vertexInFit, mbeamAxis.get(), mperigeeSurface.get(), prefitResult.get());
985 returnAfterCleaner =
true;
1006 bool allowRefit = !badlyDeterminedCurvature;
1010 if (returnAfterCleaner) {
1017 while (!(**s).trackParameters() ||
m_calorimeterVolume->inside((**s).trackParameters()->position())) {
1033 std::unique_ptr<Trk::Track>
track;
1037 double sinTheta = params_pRat->
momentum().perp() / params_pRat->
momentum().mag();
1044 spectrometerTSOS.clear();
1049 ATH_MSG_VERBOSE(
"Calling createExtrapolatedTrack from " << __func__ <<
" at line " << __LINE__);
1052 vertexInFit, mbeamAxis.get(), mperigeeSurface.get(),
extrapolated->perigeeParameters());
1060 if (extrapolated) {
track.swap(extrapolated); }
1069 int improvementsFailed = 0;
1077 if (
checkTrack(
"refineFit", refinedTrack.get())) {
1079 track.swap(refinedTrack);
1082 ++improvementsFailed;
1094 dumpCaloEloss(newTrack.get(),
"SA input TSOS after refine IDMS ");
1097 std::unique_ptr<Trk::Track> refittedTrack(
fit(ctx, *newTrack,
false,
Trk::muon));
1099 dumpCaloEloss(refittedTrack.get(),
" SA refit after refine IDMS ");
1100 if (
checkTrack(
"standaloneFit", refittedTrack.get())) {
1102 track.swap(refittedTrack);
1104 ++improvementsFailed;
1107 ++improvementsFailed;
1118 if (fitChi2 >
m_badFitChi2 && fitChi2 > spectrometerFitChi2 + 0.5) {
1119 ATH_MSG_DEBUG(
"standaloneFit: fit quality degraded wrt spectrometer alone. "
1120 <<
" Chi2/DoF= " << fitChi2);
1123 if (improvementsFailed >= 2) {
1124 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 1132 of file CombinedMuonTrackBuilder.cxx.
1150 ATH_MSG_DEBUG(
" StandaloneRefit beam position bs_x " << origin);
1162 ATH_MSG_DEBUG(
" StandaloneRefit new vertex d0 error " << std::sqrt(error2d0) <<
" new vertex z0 error "
1163 << std::sqrt(error2z0));
1166 (vertexRegionCovariance)(0, 0) = error2d0;
1167 (vertexRegionCovariance)(1, 1) = error2d0;
1168 (vertexRegionCovariance)(2, 2) = error2z0;
1170 std::unique_ptr<Trk::RecVertex>
vertex = std::make_unique<Trk::RecVertex>(origin, vertexRegionCovariance);
1172 ATH_MSG_DEBUG(
" StandaloneRefit new vertex position x " <<
vertex->position().x() <<
" y " <<
vertex->position().y() <<
" z "
1173 <<
vertex->position().z());
1175 bool addPhiPseudo =
false;
1178 if (spectrometerPhiQuality > 1) { addPhiPseudo =
true; }
1180 ATH_MSG_VERBOSE(
"standaloneRefit: using vertex region constraint with "
1181 <<
"spectrometerPhiQuality " << spectrometerPhiQuality);
1184 auto trackStateOnSurfaces = std::make_unique<Trk::TrackStates>();
1187 unsigned size =
combinedTrack.trackStateOnSurfaces()->size() + 3 + addPhiPseudo;
1189 trackStateOnSurfaces->reserve(
size);
1192 bool haveCaloDeposit =
false;
1198 if (
s == cmb_end_itr) {
1204 haveCaloDeposit =
true;
1207 }
while (!haveCaloDeposit);
1213 std::unique_ptr<Trk::TrackStateOnSurface> innerTSOS;
1218 std::unique_ptr<Trk::TrackParameters> param_owner;
1223 innerTSOS.reset(cmb_inner_tsos->
clone());
1237 if (
s != cmb_end_itr) {
1245 materialEffects =
nullptr;
1264 std::unique_ptr<Trk::TrackStateOnSurface> middleTSOS;
1268 middleTSOS.reset(cmb_middle_tsos->
clone());
1275 if (
s != cmb_end_itr) {
1280 materialEffects =
nullptr;
1296 std::unique_ptr<Trk::TrackStateOnSurface> outerTSOS;
1298 double pInner{0.}, pOuter{0.};
1303 outerTSOS.reset(cmb_outer_tsos->
clone());
1319 if (outerScattering && middleTSOS) {
1330 if (!param_owner) param_owner =
parameters->uniqueClone();
1345 if (!innerTSOS || !middleTSOS || !outerTSOS || !
parameters) {
return nullptr; }
1356 std::unique_ptr<Trk::TrackParameters> perigee_owner;
1365 if (!perigee_owner) { perigee_owner =
combinedTrack.perigeeParameters()->uniqueClone(); }
1388 if (!param_owner) {
return nullptr; }
1398 std::unique_ptr<Trk::RecVertex> mbeamAxis = std::make_unique<Trk::RecVertex>(*
m_beamAxis);
1400 std::unique_ptr<Trk::PseudoMeasurementOnTrack> vertexInFit{
vertexOnTrack(*perigee_owner,
vertex.get(), mbeamAxis.get())};
1411 double Eloss{0.}, sigmaEloss{0.}, X0tot{0.}, sigmaDeltaPhitot2{0.}, sigmaDeltaThetatot2{0.};
1413 std::vector<const Trk::TrackStateOnSurface*> scatter_tsos;
1414 scatter_tsos.reserve(
combinedTrack.trackStateOnSurfaces()->size());
1417 if (!comb_tsos->trackParameters())
continue;
1418 if (!
m_indetVolume->inside(comb_tsos->trackParameters()->position()))
break;
1419 if (!comb_tsos->materialEffectsOnTrack()) {
continue; }
1420 const double X0 = comb_tsos->materialEffectsOnTrack()->thicknessInX0();
1425 if (!meot) {
continue; }
1427 if (!energyLoss) {
continue; }
1428 Eloss += energyLoss->
deltaE();
1431 ATH_MSG_DEBUG(
"CombinedMuonFit ID Eloss found r " << (comb_tsos->trackParameters())->position().perp() <<
" z "
1432 << (comb_tsos->trackParameters())->position().z() <<
" value "
1433 << energyLoss->
deltaE() <<
" Eloss " << Eloss <<
" sigma Eloss "
1440 sigmaDeltaPhitot2 += sigmaDeltaPhi * sigmaDeltaPhi;
1441 sigmaDeltaThetatot2 += sigmaDeltaTheta * sigmaDeltaTheta;
1442 scatter_tsos.push_back(comb_tsos);
1446 ATH_MSG_DEBUG(
"standaloneRefit Total ID Eloss " << Eloss <<
" sigma Eloss " << sigmaEloss <<
" X0 " << X0tot
1447 <<
" sigma scat phi " << std::sqrt(sigmaDeltaPhitot2) <<
" sigma scat theta "
1448 << std::sqrt(sigmaDeltaThetatot2));
1449 if (!scatter_tsos.empty()) {
1450 const int itsosMiddle = scatter_tsos.size() / 2;
1453 std::unique_ptr<Trk::EnergyLoss> energyLossNew = std::make_unique<Trk::EnergyLoss>(Eloss, sigmaEloss, sigmaEloss, sigmaEloss);
1456 Trk::ScatteringAngles scatNew{0., 0., std::sqrt(sigmaDeltaPhitot2), std::sqrt(sigmaDeltaThetatot2)};
1458 std::bitset<Trk::MaterialEffectsBase::NumberOfMaterialEffectsTypes> meotPattern(0);
1462 ATH_MSG_DEBUG(
" itsosMiddle " << itsosMiddle <<
" tsosnr size " << scatter_tsos.size());
1464 std::unique_ptr<Trk::MaterialEffectsOnTrack> meotNew = std::make_unique<Trk::MaterialEffectsOnTrack>(X0tot, scatNew, std::move(energyLossNew), surfNew, meotPattern);
1467 std::bitset<Trk::TrackStateOnSurface::NumberOfTrackStateOnSurfaceTypes> typePatternScat(0);
1470 std::unique_ptr<Trk::TrackStateOnSurface> newTSOS =
1471 std::make_unique<Trk::TrackStateOnSurface>(
nullptr, std::move(parsNew), std::move(meotNew), typePatternScat);
1473 trackStateOnSurfaces->push_back(std::move(newTSOS));
1480 trackStateOnSurfaces->push_back(std::move(innerTSOS));
1481 trackStateOnSurfaces->push_back(std::move(middleTSOS));
1482 trackStateOnSurfaces->push_back(std::move(outerTSOS));
1486 std::unique_ptr<Trk::TrackStateOnSurface> entranceTSOS =
entrancePerigee(ctx, outerTSOSParam);
1487 if (entranceTSOS) trackStateOnSurfaces->push_back(std::move(entranceTSOS));
1491 bool haveLeadingMaterial =
false;
1494 for (; mat_it != cmb_end_itr; ++mat_it) {
1496 haveLeadingMaterial =
true;
1500 if (mat_it == cmb_end_itr) {
1510 if (tsos) trackStateOnSurfaces->push_back(std::move(tsos));
1517 std::unique_ptr<Trk::Track> standaloneTrack =
1518 std::make_unique<Trk::Track>(
combinedTrack.info(), std::move(trackStateOnSurfaces),
nullptr);
1520 if (
m_trackQuery->isCombined(*standaloneTrack, ctx)) {
ATH_MSG_WARNING(
" This should not happen standalone Track has ID hits "); }
1522 if (msgLevel(
MSG::DEBUG))
countAEOTs(*standaloneTrack,
" in standalone Refit standaloneTrack track before fit ");
1524 std::unique_ptr<Trk::Track> refittedTrack{
fit(ctx, *standaloneTrack,
false,
Trk::muon)};
1525 if (!
checkTrack(
"standaloneRefit", refittedTrack.get())) {
return nullptr; }
1529 if (refittedTrack) {
1530 if (!refittedTrack->fitQuality()) {
return nullptr; }
1532 if (!
m_trackQuery->isCaloAssociated(*refittedTrack, ctx)) {
1543 countAEOTs(*refittedTrack,
" before optimize ") == 0) {
1544 ATH_MSG_VERBOSE(
" perform spectrometer error optimization after cleaning ");
1545 std::unique_ptr<Trk::Track> optimizedTrack =
m_muonErrorOptimizer->optimiseErrors(*refittedTrack, ctx);
1547 if (
checkTrack(
"standaloneRefitOpt", optimizedTrack.get())) {
1548 refittedTrack.swap(optimizedTrack);
1549 if (msgLevel(
MSG::DEBUG))
countAEOTs(*refittedTrack,
" standaloneRefit alignment errors Track ");
1555 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 2990 of file CombinedMuonTrackBuilder.cxx.
2997 covarianceMatrix.setZero();
3001 double ptInv = 1. /
parameters.momentum().perp();
3003 if (
vertex == mbeamAxis) {
3009 jacobian(0, 0) = -ptInv *
parameters.momentum().y();
3010 jacobian(0, 1) = ptInv *
parameters.momentum().x();
3013 covarianceMatrix =
cov.similarity(jacobian);
3019 jacobian(0, 0) = -ptInv *
parameters.momentum().y();
3020 jacobian(0, 1) = ptInv *
parameters.momentum().x();
3021 jacobian(1, 2) = 1.0;
3024 covarianceMatrix =
cov.similarity(jacobian);
3027 return std::make_unique<Trk::PseudoMeasurementOnTrack>(std::move(localParameters),
3028 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.