From 1229ccfb65d0ba8e888359d9c4598bea9349b47c Mon Sep 17 00:00:00 2001 From: christos <christos@cern.ch> Date: Tue, 1 Sep 2020 13:33:37 +0100 Subject: [PATCH] Forward GSf make it part of the fitter, rather than truly independnet component --- .../TrkGaussianSumFilter/ForwardGsfFitter.h | 104 ------------------ .../TrkGaussianSumFilter/GaussianSumFitter.h | 48 ++++++-- .../TrkGaussianSumFilter/IForwardGsfFitter.h | 78 ------------- .../src/ForwardGsfFitter.cxx | 71 +----------- .../src/GaussianSumFitter.cxx | 66 +++++------ .../TrkGaussianSumFilter_entries.cxx | 2 - 6 files changed, 74 insertions(+), 295 deletions(-) delete mode 100644 Tracking/TrkFitter/TrkGaussianSumFilter/TrkGaussianSumFilter/ForwardGsfFitter.h delete mode 100644 Tracking/TrkFitter/TrkGaussianSumFilter/TrkGaussianSumFilter/IForwardGsfFitter.h diff --git a/Tracking/TrkFitter/TrkGaussianSumFilter/TrkGaussianSumFilter/ForwardGsfFitter.h b/Tracking/TrkFitter/TrkGaussianSumFilter/TrkGaussianSumFilter/ForwardGsfFitter.h deleted file mode 100644 index 22fb3e850516..000000000000 --- a/Tracking/TrkFitter/TrkGaussianSumFilter/TrkGaussianSumFilter/ForwardGsfFitter.h +++ /dev/null @@ -1,104 +0,0 @@ -/* - Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration -*/ - -/** - * @file ForwardGsfFitter.h - * @date Wednesday 9th March 2005 - * @author Tom Athkinson, Anthony Morley, Christos Anastopoulos - * @brief Class definition for the forward GSF fitter - */ - -#ifndef TrkForwardGsfFitter_H -#define TrkForwardGsfFitter_H -#include "TrkEventPrimitives/ParticleHypothesis.h" -#include "TrkFitterUtils/FitterTypes.h" -#include "TrkGaussianSumFilter/GsfMeasurementUpdator.h" -#include "TrkGaussianSumFilter/IForwardGsfFitter.h" -#include "TrkGaussianSumFilter/IMultiStateExtrapolator.h" -#include "TrkMultiComponentStateOnSurface/MultiComponentState.h" -#include "TrkParameters/TrackParameters.h" - -#include "AthenaBaseComps/AthAlgTool.h" -#include "GaudiKernel/ToolHandle.h" - -namespace Trk { - -class IMultiStateMeasurementUpdator; -class IRIO_OnTrackCreator; -class Surface; - -class ForwardGsfFitter - : public AthAlgTool - , virtual public IForwardGsfFitter -{ - -public: - /** Constructor with AlgTool parameters */ - ForwardGsfFitter(const std::string&, const std::string&, const IInterface*); - - /** Virtual destructor */ - virtual ~ForwardGsfFitter() = default; - - /** AlgTool initialise method */ - virtual StatusCode initialize() override final; - - /** AlgTool finalise method */ - virtual StatusCode finalize() override final; - - /** Configure the forward GSF fitter - - Configure the extrapolator - - Configure the measurement updator - - Configure the RIO_OnTrack creator */ - virtual StatusCode configureTools( - const ToolHandle<Trk::IMultiStateExtrapolator>& extrapolator, - const ToolHandle<Trk::IRIO_OnTrackCreator>& rioOnTrackCreator) - override final; - - /** Forward GSF fit using PrepRawData */ - virtual std::unique_ptr<ForwardTrajectory> fitPRD( - const EventContext& ctx, - IMultiStateExtrapolator::Cache&, - const PrepRawDataSet&, - const TrackParameters&, - const ParticleHypothesis particleHypothesis = - nonInteracting) const override final; - - /** Forward GSF fit using MeasurementSet */ - virtual std::unique_ptr<ForwardTrajectory> fitMeasurements( - const EventContext& ctx, - IMultiStateExtrapolator::Cache&, - const MeasurementSet&, - const TrackParameters&, - const ParticleHypothesis particleHypothesis = - nonInteracting) const override final; - - /** The interface will later be extended so that the initial - * state can be additionally a MultiComponentState object! */ - -private: - /** Progress one step along the fit */ - bool stepForwardFit( - const EventContext& ctx, - IMultiStateExtrapolator::Cache&, - ForwardTrajectory*, - const PrepRawData*, - const MeasurementBase*, - const Surface&, - MultiComponentState&, - const ParticleHypothesis particleHypothesis = nonInteracting) const; - -private: - /**These are passed via the configure tools so not retrieved from this tool*/ - ToolHandle<IMultiStateExtrapolator> m_extrapolator; - ToolHandle<IRIO_OnTrackCreator> m_rioOnTrackCreator; - GsfMeasurementUpdator m_updator; - double m_cutChiSquaredPerNumberDOF; - int m_overideMaterialEffects; - ParticleHypothesis m_overideParticleHypothesis; - bool m_overideMaterialEffectsSwitch; -}; - -} // end Trk namespace - -#endif diff --git a/Tracking/TrkFitter/TrkGaussianSumFilter/TrkGaussianSumFilter/GaussianSumFitter.h b/Tracking/TrkFitter/TrkGaussianSumFilter/TrkGaussianSumFilter/GaussianSumFitter.h index 5eaaa6eaa60d..5977c8d574e4 100644 --- a/Tracking/TrkFitter/TrkGaussianSumFilter/TrkGaussianSumFilter/GaussianSumFitter.h +++ b/Tracking/TrkFitter/TrkGaussianSumFilter/TrkGaussianSumFilter/GaussianSumFitter.h @@ -12,8 +12,10 @@ #include "TrkEventPrimitives/PropDirection.h" #include "TrkEventUtils/TrkParametersComparisonFunction.h" #include "TrkFitterInterfaces/ITrackFitter.h" +#include "TrkGaussianSumFilter/IGsfSmoother.h" #include "TrkFitterUtils/FitterTypes.h" #include "TrkFitterUtils/TrackFitInputPreparator.h" +#include "TrkGaussianSumFilter/GsfMeasurementUpdator.h" #include "TrkGaussianSumFilter/IMultiStateExtrapolator.h" #include "TrkParameters/TrackParameters.h" #include "TrkToolInterfaces/IRIO_OnTrackCreator.h" @@ -26,8 +28,6 @@ namespace Trk { class IMultiStateMeasurementUpdator; class MultiComponentStateOnSurface; -class IForwardGsfFitter; -class IGsfSmoother; class FitQuality; class Track; @@ -118,6 +118,33 @@ private: //* Calculate the fit quality */ const Trk::FitQuality* buildFitQuality(const Trk::SmoothedTrajectory&) const; + /** Forward GSF fit using PrepRawData */ + std::unique_ptr<ForwardTrajectory> fitPRD( + const EventContext& ctx, + IMultiStateExtrapolator::Cache&, + const PrepRawDataSet&, + const TrackParameters&, + const ParticleHypothesis particleHypothesis = nonInteracting) const; + + /** Forward GSF fit using MeasurementSet */ + std::unique_ptr<ForwardTrajectory> fitMeasurements( + const EventContext& ctx, + IMultiStateExtrapolator::Cache&, + const MeasurementSet&, + const TrackParameters&, + const ParticleHypothesis particleHypothesis = nonInteracting) const; + + /** Progress one step along the fit */ + bool stepForwardFit( + const EventContext& ctx, + IMultiStateExtrapolator::Cache&, + ForwardTrajectory*, + const PrepRawData*, + const MeasurementBase*, + const Surface&, + MultiComponentState&, + const ParticleHypothesis particleHypothesis = nonInteracting) const; + private: ToolHandle<IMultiStateExtrapolator> m_extrapolator{ this, @@ -131,12 +158,7 @@ private: "Trk::RioOnTrackCreator/RIO_OnTrackCreator", "" }; - ToolHandle<IForwardGsfFitter> m_forwardGsfFitter{ - this, - "ForwardGsfFitter", - "Trk::ForwardGsfFitter/ForwardGsfFitter", - "" - }; + ToolHandle<IGsfSmoother> m_gsfSmoother{ this, "GsfSmoother", "Trk::GsfSmoother/GsfSmoother", @@ -173,9 +195,19 @@ private: PropDirection m_directionToPerigee; std::unique_ptr<TrkParametersComparisonFunction> m_trkParametersComparisonFunction; + std::unique_ptr<TrackFitInputPreparator> m_inputPreparator; std::vector<double> m_sortingReferencePoint; + // Measurement updator + GsfMeasurementUpdator m_updator; + + // For the forward fit part + double m_cutChiSquaredPerNumberDOF; + int m_overideMaterialEffects; + ParticleHypothesis m_overideParticleHypothesis; + bool m_overideMaterialEffectsSwitch; + // Number of Fit PrepRawData Calls mutable std::atomic<int> m_FitPRD; // Number of Fit MeasurementBase Calls diff --git a/Tracking/TrkFitter/TrkGaussianSumFilter/TrkGaussianSumFilter/IForwardGsfFitter.h b/Tracking/TrkFitter/TrkGaussianSumFilter/TrkGaussianSumFilter/IForwardGsfFitter.h deleted file mode 100644 index 7d149e85b3e9..000000000000 --- a/Tracking/TrkFitter/TrkGaussianSumFilter/TrkGaussianSumFilter/IForwardGsfFitter.h +++ /dev/null @@ -1,78 +0,0 @@ -/* - Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration -*/ - - -/** - * @file IForwardGsfFitter.h - * @date Thursday 8th January 2009 - * @author Anthony Morley, Christos Anastopoulos - * @brief Abstract interface for the forward GSF fitter - */ - -#ifndef TrkIForwardGsfFitter_H -#define TrkIForwardGsfFitter_H - -#include "GaudiKernel/IAlgTool.h" -#include "GaudiKernel/ToolHandle.h" -#include "TrkEventPrimitives/ParticleHypothesis.h" -#include "TrkFitterUtils/FitterTypes.h" -#include "TrkMultiComponentStateOnSurface/MultiComponentState.h" -#include "TrkGaussianSumFilter/IMultiStateExtrapolator.h" -#include "TrkParameters/TrackParameters.h" -#include "GaudiKernel/EventContext.h" - -#include <memory> -namespace Trk { - -class IMultiStateMeasurementUpdator; -class IRIO_OnTrackCreator; -class Surface; - -static const InterfaceID InterfaceID_ForwardGsfFitter("ForwardGsfFitter", 1, 0); - -class IForwardGsfFitter : virtual public IAlgTool -{ - -public: - /** AlgTool interface method */ - static const InterfaceID& interfaceID() - { - return InterfaceID_ForwardGsfFitter; - }; - - /** Virtual destructor */ - virtual ~IForwardGsfFitter() = default; - - /** Configure the forward GSF fitter - - Configure the extrapolator - - Configure the measurement updator - - Configure the RIO_OnTrack creator */ - virtual StatusCode configureTools( - const ToolHandle<Trk::IMultiStateExtrapolator>&, - const ToolHandle<Trk::IRIO_OnTrackCreator>&) = 0; - - /** Forward GSF fit using PrepRawData */ - virtual std::unique_ptr<ForwardTrajectory> fitPRD( - const EventContext& ctx, - Trk::IMultiStateExtrapolator::Cache&, - const PrepRawDataSet&, - const TrackParameters&, - const ParticleHypothesis particleHypothesis = nonInteracting) const = 0; - - /** Forward GSF fit using MeasurementSet */ - virtual std::unique_ptr<ForwardTrajectory> fitMeasurements( - const EventContext& ctx, - Trk::IMultiStateExtrapolator::Cache&, - const MeasurementSet&, - const TrackParameters&, - const ParticleHypothesis particleHypothesis = nonInteracting) const = 0; - - /** The interface will later be extended so that the initial state can be - * additionally a MultiComponentState object! - */ -}; - -} // end Trk namespace - -#endif diff --git a/Tracking/TrkFitter/TrkGaussianSumFilter/src/ForwardGsfFitter.cxx b/Tracking/TrkFitter/TrkGaussianSumFilter/src/ForwardGsfFitter.cxx index dcb47757ab3e..2bacabf144e7 100644 --- a/Tracking/TrkFitter/TrkGaussianSumFilter/src/ForwardGsfFitter.cxx +++ b/Tracking/TrkFitter/TrkGaussianSumFilter/src/ForwardGsfFitter.cxx @@ -6,15 +6,13 @@ * @file ForwardGsfFitter.cxx * @date Wednesday 9th March 2005 * @author Tom Athkinson, Anthony Morley, Christos Anastopoulos - * @brief Implementation code for ForwardGsfFitter class + * @brief Implementation code for the Forward GsfFitter part */ -#include "TrkGaussianSumFilter/ForwardGsfFitter.h" +#include "TrkGaussianSumFilter/GaussianSumFitter.h" #include "TrkMultiComponentStateOnSurface/MultiComponentStateOnSurface.h" - #include "TrkGaussianSumFilter/IMultiStateExtrapolator.h" #include "TrkGaussianSumFilter/MultiComponentStateCombiner.h" - #include "TrkDetElementBase/TrkDetElementBase.h" #include "TrkEventPrimitives/FitQuality.h" #include "TrkMeasurementBase/MeasurementBase.h" @@ -23,70 +21,11 @@ #include "TrkSurfaces/Surface.h" #include "TrkToolInterfaces/IRIO_OnTrackCreator.h" -Trk::ForwardGsfFitter::ForwardGsfFitter(const std::string& type, - const std::string& name, - const IInterface* parent) - : AthAlgTool(type, name, parent) - , m_updator{} - , m_cutChiSquaredPerNumberDOF(50.) - , m_overideMaterialEffects(4) - , m_overideParticleHypothesis(nonInteracting) - , m_overideMaterialEffectsSwitch(false) -{ - - declareInterface<IForwardGsfFitter>(this); - declareProperty("StateChi2PerNDOFCut", m_cutChiSquaredPerNumberDOF); - declareProperty("OverideForwardsMaterialEffects", - m_overideMaterialEffectsSwitch); - declareProperty("MaterialEffectsInForwardFitter", m_overideMaterialEffects); -} - -StatusCode -Trk::ForwardGsfFitter::initialize() -{ - - ATH_MSG_DEBUG("A cut on Chi2 / NDOF: " << m_cutChiSquaredPerNumberDOF - << " will be applied"); - Trk::ParticleSwitcher particleSwitcher; - m_overideParticleHypothesis = - particleSwitcher.particle[m_overideMaterialEffects]; - if (m_overideMaterialEffectsSwitch) { - ATH_MSG_INFO("Material effects in forwards fitter have been overiden by " - "jobOptions... New " - "Trk::ParticleHypothesis: " - << m_overideMaterialEffects); - } - - ATH_MSG_INFO("Initialisation of " << name() << " was successful"); - - return StatusCode::SUCCESS; -} - -StatusCode -Trk::ForwardGsfFitter::finalize() -{ - ATH_MSG_INFO("Finalisation of " << name() << " was successful"); - return StatusCode::SUCCESS; -} - -StatusCode -Trk::ForwardGsfFitter::configureTools( - const ToolHandle<IMultiStateExtrapolator>& extrapolator, - const ToolHandle<IRIO_OnTrackCreator>& rioOnTrackCreator) -{ - m_extrapolator = extrapolator; - m_rioOnTrackCreator = rioOnTrackCreator; - ATH_MSG_INFO("Configuration of " << name() << " was successful"); - - return StatusCode::SUCCESS; -} - /* * Forwards fit on a set of PrepRawData */ - std::unique_ptr<Trk::ForwardTrajectory> -Trk::ForwardGsfFitter::fitPRD( +Trk::GaussianSumFitter::fitPRD( const EventContext& ctx, Trk::IMultiStateExtrapolator::Cache& extrapolatorCache, const Trk::PrepRawDataSet& inputPrepRawDataSet, @@ -167,7 +106,7 @@ Trk::ForwardGsfFitter::fitPRD( * Forwards fit on a set of Measurements */ std::unique_ptr<Trk::ForwardTrajectory> -Trk::ForwardGsfFitter::fitMeasurements( +Trk::GaussianSumFitter::fitMeasurements( const EventContext& ctx, Trk::IMultiStateExtrapolator::Cache& extrapolatorCache, const Trk::MeasurementSet& inputMeasurementSet, @@ -242,7 +181,7 @@ Trk::ForwardGsfFitter::fitMeasurements( * StepForwardFit() private method */ bool -Trk::ForwardGsfFitter::stepForwardFit( +Trk::GaussianSumFitter::stepForwardFit( const EventContext& ctx, Trk::IMultiStateExtrapolator::Cache& extrapolatorCache, ForwardTrajectory* forwardTrajectory, diff --git a/Tracking/TrkFitter/TrkGaussianSumFilter/src/GaussianSumFitter.cxx b/Tracking/TrkFitter/TrkGaussianSumFilter/src/GaussianSumFitter.cxx index 3a8d3e982c2d..af90bcceed3a 100644 --- a/Tracking/TrkFitter/TrkGaussianSumFilter/src/GaussianSumFitter.cxx +++ b/Tracking/TrkFitter/TrkGaussianSumFilter/src/GaussianSumFitter.cxx @@ -10,8 +10,6 @@ */ #include "TrkGaussianSumFilter/GaussianSumFitter.h" -#include "TrkGaussianSumFilter/IForwardGsfFitter.h" -#include "TrkGaussianSumFilter/IGsfSmoother.h" #include "TrkGaussianSumFilter/IMultiStateExtrapolator.h" #include "TrkGaussianSumFilter/MultiComponentStateCombiner.h" @@ -43,6 +41,11 @@ Trk::GaussianSumFitter::GaussianSumFitter(const std::string& type, , m_directionToPerigee(Trk::oppositeMomentum) , m_trkParametersComparisonFunction(nullptr) , m_inputPreparator(nullptr) + , m_updator{} + , m_cutChiSquaredPerNumberDOF(50.) + , m_overideMaterialEffects(4) + , m_overideParticleHypothesis(nonInteracting) + , m_overideMaterialEffectsSwitch(false) , m_FitPRD{ 0 } , m_FitMeasurementBase{ 0 } , m_ForwardFailure{ 0 } @@ -53,6 +56,11 @@ Trk::GaussianSumFitter::GaussianSumFitter(const std::string& type, { declareInterface<ITrackFitter>(this); declareProperty("SortingReferencePoint", m_sortingReferencePoint); + declareProperty("StateChi2PerNDOFCut", m_cutChiSquaredPerNumberDOF); + declareProperty("OverideForwardsMaterialEffects", + m_overideMaterialEffectsSwitch); + declareProperty("MaterialEffectsInForwardFitter", m_overideMaterialEffects); + // Estrablish reference point as origin m_sortingReferencePoint.push_back(0.); m_sortingReferencePoint.push_back(0.); @@ -64,14 +72,8 @@ Trk::GaussianSumFitter::initialize() { StatusCode sc; - - // Request the GSF forward fitter - hardwired type and instanace name for the - // GSF - ATH_CHECK(m_forwardGsfFitter.retrieve()); - // Request the GSF smoother - hardwired type and instance name for the GSF ATH_CHECK(m_gsfSmoother.retrieve()); - // Request the GSF extrapolator ATH_CHECK(m_extrapolator.retrieve()); @@ -98,11 +100,14 @@ Trk::GaussianSumFitter::initialize() m_trkParametersComparisonFunction = std::make_unique<Trk::TrkParametersComparisonFunction>(referencePosition); - // Configure forward fitter - sc = m_forwardGsfFitter->configureTools(m_extrapolator, m_rioOnTrackCreator); - if (sc.isFailure()) { - ATH_MSG_FATAL("Could not configure the forwards GSF fitter... Exiting!"); - return StatusCode::FAILURE; + Trk::ParticleSwitcher particleSwitcher; + m_overideParticleHypothesis = + particleSwitcher.particle[m_overideMaterialEffects]; + if (m_overideMaterialEffectsSwitch) { + ATH_MSG_INFO("Material effects in forwards fitter have been overiden by " + "jobOptions... New " + "Trk::ParticleHypothesis: " + << m_overideMaterialEffects); } // Configure smoother @@ -112,18 +117,8 @@ Trk::GaussianSumFitter::initialize() return StatusCode::FAILURE; } - // GSF Statistics Setup; - m_FitPRD = 0; // Number of Fit PrepRawData Calls - m_FitMeasurementBase = 0; // Number of Fit MeasurementBase Calls - m_ForwardFailure = 0; // Number of Foward Fit Failures: - m_SmootherFailure = 0; // Number of Smoother Failures: - m_PerigeeFailure = 0; // Number of MakePerigee Failures: - m_fitQualityFailure = 0; - m_inputPreparator = std::make_unique<TrackFitInputPreparator>(); - ATH_MSG_INFO("Initialisation of " << name() << " was successful"); - return StatusCode::SUCCESS; } @@ -306,14 +301,12 @@ Trk::GaussianSumFitter::fit( Trk::IMultiStateExtrapolator::Cache extrapolatorCache; // Perform GSF forwards fit - ForwardTrajectory* forwardTrajectory = - m_forwardGsfFitter - ->fitPRD(ctx, - extrapolatorCache, - sortedPrepRawDataSet, - estimatedParametersNearOrigin, - particleHypothesis) - .release(); + ForwardTrajectory* forwardTrajectory = fitPRD(ctx, + extrapolatorCache, + sortedPrepRawDataSet, + estimatedParametersNearOrigin, + particleHypothesis) + .release(); if (!forwardTrajectory) { ATH_MSG_DEBUG("Forward GSF fit failed... Exiting!"); @@ -467,12 +460,11 @@ Trk::GaussianSumFitter::fit( // Perform GSF forwards fit - new memory allocated in forwards fitter ForwardTrajectory* forwardTrajectory = - m_forwardGsfFitter - ->fitMeasurements(ctx, - extrapolatorCache, - sortedMeasurementSet, - estimatedParametersNearOrigin, - particleHypothesis) + fitMeasurements(ctx, + extrapolatorCache, + sortedMeasurementSet, + estimatedParametersNearOrigin, + particleHypothesis) .release(); if (!forwardTrajectory) { diff --git a/Tracking/TrkFitter/TrkGaussianSumFilter/src/components/TrkGaussianSumFilter_entries.cxx b/Tracking/TrkFitter/TrkGaussianSumFilter/src/components/TrkGaussianSumFilter_entries.cxx index ce335d74f2fe..8c2bcfbaffb1 100644 --- a/Tracking/TrkFitter/TrkGaussianSumFilter/src/components/TrkGaussianSumFilter_entries.cxx +++ b/Tracking/TrkFitter/TrkGaussianSumFilter/src/components/TrkGaussianSumFilter_entries.cxx @@ -3,7 +3,6 @@ #include "TrkGaussianSumFilter/GsfMaterialEffectsUpdator.h" #include "TrkGaussianSumFilter/GsfBetheHeitlerEffects.h" #include "TrkGaussianSumFilter/GaussianSumFitter.h" -#include "TrkGaussianSumFilter/ForwardGsfFitter.h" #include "TrkGaussianSumFilter/GsfExtrapolator.h" #include "TrkGaussianSumFilter/GsfSmoother.h" @@ -12,6 +11,5 @@ DECLARE_COMPONENT( Trk::GsfCombinedMaterialEffects ) DECLARE_COMPONENT( Trk::GsfMaterialEffectsUpdator ) DECLARE_COMPONENT( Trk::GsfBetheHeitlerEffects ) DECLARE_COMPONENT( Trk::GaussianSumFitter ) -DECLARE_COMPONENT( Trk::ForwardGsfFitter ) DECLARE_COMPONENT( Trk::GsfExtrapolator ) DECLARE_COMPONENT( Trk::GsfSmoother ) -- GitLab