diff --git a/Reconstruction/egamma/egammaRec/python/EMCommonRefitter.py b/Reconstruction/egamma/egammaRec/python/EMCommonRefitter.py index 340d2986ad9abe19359067d58a493b84ad4d0b12..72fe9d7494575a6316a922a865b4acf172bcbed7 100644 --- a/Reconstruction/egamma/egammaRec/python/EMCommonRefitter.py +++ b/Reconstruction/egamma/egammaRec/python/EMCommonRefitter.py @@ -6,14 +6,17 @@ from InDetRecExample import TrackingCommon as TrackingCommon print("EMCommonRefitter.py") -def getGSFTrackFitter(): - egRotCreator = TrackingCommon.getInDetRotCreator( - name='egRotCreator', - private=True) +def getGSFTrackFitter(doRefitOnMeasurementBase=True): - TrackingCommon.createAndAddCondAlg( - TrackingCommon.getRIO_OnTrackErrorScalingCondAlg, - 'RIO_OnTrackErrorScalingCondAlg') + egRotCreator = None + if not doRefitOnMeasurementBase: + egRotCreator = TrackingCommon.getInDetRotCreator( + name='egRotCreator', + private=True) + + TrackingCommon.createAndAddCondAlg( + TrackingCommon.getRIO_OnTrackErrorScalingCondAlg, + 'RIO_OnTrackErrorScalingCondAlg') # get Rk propagator from TrkExRungeKuttaPropagator.TrkExRungeKuttaPropagatorConf import ( @@ -59,7 +62,7 @@ def getGSFTrackFitter(): ToolForExtrapolation=GsfExtrapolator, ReintegrateOutliers=True, MakePerigee=True, - RefitOnMeasurementBase=True, + RefitOnMeasurementBase=doRefitOnMeasurementBase, DoHitSorting=True, ToolForROTCreation=egRotCreator) # --- end of fitter loading diff --git a/Tracking/TrkFitter/TrkGaussianSumFilter/TrkGaussianSumFilter/GaussianSumFitter.h b/Tracking/TrkFitter/TrkGaussianSumFilter/TrkGaussianSumFilter/GaussianSumFitter.h index 4d1492a70378b11d97c4ddfd5532fda0062709a8..f4f520e8dc5b569f76068f78afb78ce00fb19ff7 100644 --- a/Tracking/TrkFitter/TrkGaussianSumFilter/TrkGaussianSumFilter/GaussianSumFitter.h +++ b/Tracking/TrkFitter/TrkGaussianSumFilter/TrkGaussianSumFilter/GaussianSumFitter.h @@ -196,6 +196,7 @@ private: "state in final trajectory" }; + Gaudi::Property<bool> m_reintegrateOutliers{ this, "ReintegrateOutliers", true, @@ -242,19 +243,19 @@ private: // Counters for fit statistics // Number of Fit PrepRawData Calls - mutable std::atomic<int> m_FitPRD; + mutable std::atomic<unsigned long int> m_FitPRD; // Number of Fit MeasurementBase Calls - mutable std::atomic<int> m_FitMeasurementBase; + mutable std::atomic<unsigned long int> m_FitMeasurementBase; // Number of Foward Fit Failures - mutable std::atomic<int> m_ForwardFailure; + mutable std::atomic<unsigned long int> m_ForwardFailure; // Number of Smoother Failures - mutable std::atomic<int> m_SmootherFailure; + mutable std::atomic<unsigned long int> m_SmootherFailure; // Number of MakePerigee Failures - mutable std::atomic<int> m_PerigeeFailure; + mutable std::atomic<unsigned long int> m_PerigeeFailure; // Number of Tracks that fail fit Quailty test - mutable std::atomic<int> m_fitQualityFailure; + mutable std::atomic<unsigned long int> m_fitQualityFailure; // Number of Tracks that are successfull - mutable std::atomic<int> m_fitSuccess; + mutable std::atomic<unsigned long int> m_fitSuccess; }; } // end Trk namespace diff --git a/Tracking/TrkFitter/TrkGaussianSumFilter/src/GaussianSumFitter.cxx b/Tracking/TrkFitter/TrkGaussianSumFilter/src/GaussianSumFitter.cxx index 77bada201f6e21ab29fcce823e56058cfa57c81f..9d0839ba36e162203df2b77fa78228ec7b1c60c5 100644 --- a/Tracking/TrkFitter/TrkGaussianSumFilter/src/GaussianSumFitter.cxx +++ b/Tracking/TrkFitter/TrkGaussianSumFilter/src/GaussianSumFitter.cxx @@ -66,31 +66,32 @@ Trk::GaussianSumFitter::GaussianSumFitter(const std::string& type, StatusCode Trk::GaussianSumFitter::initialize() { - StatusCode sc; + + if (m_maximumNumberOfComponents > 16) { + ATH_MSG_FATAL("Requested MaximumNumberOfComponents > 16"); + return StatusCode::FAILURE; + } + // Request the GSF extrapolator ATH_CHECK(m_extrapolator.retrieve()); + // Request the RIO_OnTrack creator // No need to return if RioOnTrack creator tool, only if PrepRawData is used - if (m_rioOnTrackCreator.retrieve().isFailure()) { - if (!m_refitOnMeasurementBase) { - ATH_MSG_FATAL("Attempting to use PrepRawData with no RIO_OnTrack creator " - "tool provided... Exiting!"); - return StatusCode::FAILURE; - } - ATH_MSG_INFO( - "Request to retrieve the RIO_OnTrack Creator" - << "failed but track is fit at the MeasurementBase level... Continuing!"); + if (!m_refitOnMeasurementBase) { + ATH_MSG_INFO("NOT refitOnMeasurementBase"); + ATH_CHECK(m_rioOnTrackCreator.retrieve()); + } else { + ATH_MSG_INFO("refitOnMeasurementBase"); + m_rioOnTrackCreator.disable(); } + if (m_overideMaterialEffectsSwitch) { - ATH_MSG_INFO("Material effects in forwards fitter have been overiden by " + ATH_MSG_INFO("Material effects in forward fitter have been overiden by " "jobOptions... New " "Trk::ParticleHypothesis: " << m_overideMaterialEffects); } - if (m_maximumNumberOfComponents > 16) { - ATH_MSG_FATAL("Requested MaximumNumberOfComponents > 16"); - return StatusCode::FAILURE; - } + // Initialise the closest track parameters search algorithm Amg::Vector3D referencePosition(m_sortingReferencePoint[0], m_sortingReferencePoint[1], @@ -922,8 +923,14 @@ Trk::GaussianSumFitter::stepForwardFit( { // Protect against undefined Measurement or PrepRawData if (!originalPrepRawData && !originalMeasurement) { + ATH_MSG_WARNING("No measurement base or PrepRawData passed to " + "StepForwardFit... Exiting!"); + return false; + } + + if (!originalMeasurement && m_refitOnMeasurementBase) { ATH_MSG_WARNING( - "No measurement information passed to StepForwardFit... Exiting!"); + "No measurement base information passed to StepForwardFit... Exiting!"); return false; } @@ -932,7 +939,6 @@ Trk::GaussianSumFitter::stepForwardFit( ATH_MSG_WARNING("ForwardTrajectory object is not defined... Exiting!"); return false; } - // Extrapolate multi-component state to the next measurement surface Trk::MultiComponentState extrapolatedState = m_extrapolator->extrapolate(ctx,