diff --git a/Tracking/TrkFitter/TrkKalmanFitter/TrkKalmanFitter/ForwardKalmanFitter.h b/Tracking/TrkFitter/TrkKalmanFitter/TrkKalmanFitter/ForwardKalmanFitter.h index 9862a7151a2d7a3a2200f8f34ed8c0dc8b1057a8..869cca2e2d6ddebc39ca531307a9cbb864e313c0 100755 --- a/Tracking/TrkFitter/TrkKalmanFitter/TrkKalmanFitter/ForwardKalmanFitter.h +++ b/Tracking/TrkFitter/TrkKalmanFitter/TrkKalmanFitter/ForwardKalmanFitter.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration */ ////////////////////////////////////////////////////////////////// @@ -14,10 +14,8 @@ #include "AthenaBaseComps/AthAlgTool.h" #include "GaudiKernel/ToolHandle.h" -#include "TrkEventPrimitives/ParticleHypothesis.h" #include "TrkFitterInterfaces/IForwardKalmanFitter.h" #include "TrkFitterUtils/ProtoTrackStateOnSurface.h" -#include "TrkFitterUtils/FitterStatusCode.h" #include "TrkExInterfaces/IExtrapolationEngine.h" /////////////////////// Forward Declarations /////////////////////////////////// @@ -36,8 +34,7 @@ namespace Trk { class TrackStateOnSurface; class DNA_MaterialEffects; //!< dna data for logging method class ProtoTrajectoryUtility; //!< helper class for analysing PTSoS vector. - class IExtrapolationEngine; //!< Extrapolation Engine - + class FitterStatusCode; } namespace Trk { diff --git a/Tracking/TrkFitter/TrkKalmanFitter/TrkKalmanFitter/KalmanFitter.h b/Tracking/TrkFitter/TrkKalmanFitter/TrkKalmanFitter/KalmanFitter.h index bbd63e6015e6522116d75edb9eea54781ee690f1..a8323a0950873d6b39b1a81cdc6c483256a30fa2 100755 --- a/Tracking/TrkFitter/TrkKalmanFitter/TrkKalmanFitter/KalmanFitter.h +++ b/Tracking/TrkFitter/TrkKalmanFitter/TrkKalmanFitter/KalmanFitter.h @@ -33,6 +33,7 @@ #include "TrkFitterInterfaces/IKalmanPiecewiseAnnealingFilter.h" #include "GeoPrimitives/GeoPrimitives.h" +#include <array> class AtlasDetectorID; //!< to identify measurements @@ -177,7 +178,6 @@ private: // Private data: /////////////////////////////////////////////////////////////////// mutable MsgStream m_log; //!< msgstream as private member (-> speed) - int m_outputlevel; //!< private member to control debug messages //! extrapolation tool: does propagation and applies material effects ToolHandle< IExtrapolator > m_extrapolator; @@ -214,7 +214,6 @@ private: bool m_option_reintegrateOutliers; bool m_option_doValidationAction; bool m_option_callValidationToolForFailedFitsOnly; - // bool m_useReferenceTrack; std::vector<double> m_option_sortingRefPoint; mutable bool m_callValidationTool; @@ -240,7 +239,7 @@ private: MinimalTrackFailure, PerigeeMakingFailure, BadInput, nFitStatsCodes}; mutable std::vector< std::vector<int> > m_fitStatistics; enum StatIndex {iAll = 0, iBarrel = 1, iTransi = 2, iEndcap = 3, nStatIndex = 4}; - mutable std::vector<double> m_chiSquaredAfb, m_chiSquaredAfbNontriviality; + mutable std::array<double, nStatIndex> m_chiSquaredAfb, m_chiSquaredAfbNontriviality; //! methods to do bookkeeping about fitter calls, error situations and chiSquared void monitorTrackFits(FitStatisticsCode, const double&) const; diff --git a/Tracking/TrkFitter/TrkKalmanFitter/src/ForwardKalmanFitter.cxx b/Tracking/TrkFitter/TrkKalmanFitter/src/ForwardKalmanFitter.cxx index cc6ce5abe802ad0c810ba6e9a50763c1d358866c..d62ceec819a4b95d30d0ecd95102bd862e737d1a 100755 --- a/Tracking/TrkFitter/TrkKalmanFitter/src/ForwardKalmanFitter.cxx +++ b/Tracking/TrkFitter/TrkKalmanFitter/src/ForwardKalmanFitter.cxx @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration */ ////////////////////////////////////////////////////////////////// @@ -12,6 +12,9 @@ /////////////////////////////////////////////////////////////////// #include "TrkKalmanFitter/ForwardKalmanFitter.h" +#include "TrkEventPrimitives/ParticleHypothesis.h" +#include "TrkFitterUtils/FitterStatusCode.h" + #include "AtlasDetDescr/AtlasDetectorID.h" #include "TrkFitterUtils/FitterStatusCode.h" #include "TrkEventPrimitives/FitQualityOnSurface.h" @@ -43,8 +46,8 @@ #include "TrkSurfaces/StraightLineSurface.h" #include "CLHEP/Units/SystemOfUnits.h" - -#include <ext/algorithm> +#include <cmath> +#include <algorithm> //////////////////////////////////////////////////////////////////////////////// // // @@ -84,23 +87,12 @@ Trk::ForwardKalmanFitter::~ForwardKalmanFitter(){} StatusCode Trk::ForwardKalmanFitter::initialize() { StatusCode sc = AthAlgTool::initialize(); - - if (detStore()->retrieve(m_idHelper, "AtlasID").isFailure()) { - ATH_MSG_ERROR ("Could not get AtlasDetectorID helper"); - return StatusCode::FAILURE; - } + ATH_CHECK(detStore()->retrieve(m_idHelper, "AtlasID")); m_utility = new ProtoTrajectoryUtility(m_idHelper); - if (m_useExEngine) { - if (m_extrapolationEngine.retrieve().isFailure()){ - ATH_MSG_FATAL("Could not retrieve ExtrapolationEngine."); - return StatusCode::FAILURE; - } else - ATH_MSG_INFO("Successfully retrieved ExtrapolationEngine."); + ATH_CHECK(m_extrapolationEngine.retrieve()); } - ATH_MSG_INFO ("stability precut on state Chi2/ndf set to "<< m_StateChiSquaredPerNumberDoFPreCut ); - ATH_MSG_INFO ("initialize() successful in " << name()); return sc; } @@ -146,16 +138,18 @@ StatusCode Trk::ForwardKalmanFitter::configureWithTools(const Trk::IExtrapolator ATH_MSG_ERROR ("Extrapolator missing, need to configure with it !"); return StatusCode::FAILURE; } - msg(MSG::INFO) << "Configuring " << name() << " with tools from KalmanFitter:" << endmsg; - msg(MSG::INFO) << "Updator and Extrapolator - present" << endmsg; - msg(MSG::INFO) << "Dyn.NoiseAdjustment Pix/SCT - " - << (m_dynamicNoiseAdjustor? "present" : "none") << endmsg; - msg(MSG::INFO) << "General RIO_OnTrackCreator - " - << (m_ROTcreator? "present" : "none") << endmsg; - msg(MSG::INFO) << "RIO_OnTrack Recalibrator - " << (m_recalibrator?"present":"none")<<endmsg; - msg(MSG::INFO) << "Internal Piecewise DAF - " << (m_internalDAF?"present":"none")<<endmsg; + auto toolPresent = [] (const bool yn){ + return std::string((yn ? "present\n" : "none\n")); + }; + std::string message="Configuring " + name() + " with tools from KalmanFitter\n"; + message += "Updator and Extrapolator - present\n"; + message += "Dyn.NoiseAdjustment Pix/SCT - " + toolPresent(m_dynamicNoiseAdjustor); + message += "General RIO_OnTrackCreator - " + toolPresent(m_ROTcreator); + message += "RIO_OnTrack Recalibrator - " + toolPresent(m_recalibrator); + message += "Internal Piecewise DAF - " + toolPresent(m_internalDAF); if (m_alignableSurfaceProvider) - msg(MSG::INFO) << "Ext. for alignable Surfaces - present" << endmsg; + message += "Ext. for alignable Surfaces - present\n"; + ATH_MSG_INFO(message); return StatusCode::SUCCESS; } @@ -191,7 +185,6 @@ Trk::ForwardKalmanFitter::fit(Trk::Trajectory& trajectory, int itcounter=1; PrepRawDataSet::const_iterator it = inputPRDColl.begin(); for( ; it!=inputPRDColl.end(); it++) { - const Trk::TrackParameters* predPar = this->predict( updatedPar, (*it)->detectorElement()->surface( (*it)->identify() ), @@ -226,12 +219,12 @@ Trk::ForwardKalmanFitter::fit(Trk::Trajectory& trajectory, } stepFwF = this->updateOrSkip(newestState,updatedPar,predPar,itcounter, runOutlier,bremStateIfBremFound); - bremStateIfBremFound = NULL; + bremStateIfBremFound = nullptr; if (stepFwF.isFailure()) { delete updatedPar; return stepFwF; } ++itcounter; } - delete updatedPar; updatedPar = NULL; // clean up + delete updatedPar; updatedPar = nullptr; // clean up int testNumber = m_utility->rankedNumberOfMeasurements(trajectory); if (testNumber < 5) { ATH_MSG_DEBUG ("Filtered trajectory has only "<<testNumber<<" and thus too few fittable meas'ts!"); @@ -305,7 +298,7 @@ Trk::ForwardKalmanFitter::fit(Trk::Trajectory& trajectory, if (it->dnaMaterialEffects()) delete it->checkoutDNA_MaterialEffects(); FitterStatusCode stepFwF = - this->buildAndAnalyseTrajectory(trajectory,it,updatedPar /*=NULL pointer*/, + this->buildAndAnalyseTrajectory(trajectory,it,updatedPar /*=nullptr pointer*/, predPar, controlledMatEffects,itcounter, bremStateIfBremFound,allowRecalibrate); if (stepFwF.isFailure()) { @@ -345,7 +338,7 @@ Trk::ForwardKalmanFitter::fit(Trk::Trajectory& trajectory, } stepFwF = this->updateOrSkip(it,updatedPar,predPar,itcounter, runOutlier,bremStateIfBremFound); - bremStateIfBremFound = NULL; + bremStateIfBremFound = nullptr; if (stepFwF.isFailure()) { delete updatedPar; return stepFwF; } } @@ -410,7 +403,7 @@ const Trk::TrackParameters* Trk::ForwardKalmanFitter::predict predPar = ecc.endParameters; } else { ATH_MSG_WARNING ("Forward Kalman Fitter --> extrapolation engine did not succeed"); - predPar = NULL; + predPar = nullptr; } } @@ -485,7 +478,7 @@ Trk::FitterStatusCode Trk::ForwardKalmanFitter::buildAndAnalyseTrajectory ATH_MSG_WARNING ("The Meas'Base extraction failed, software problem!"); return FitterStatusCode::BadInput; } - if ( filterCounter>1 && updatedPar!=NULL + if ( filterCounter>1 && updatedPar!=nullptr && ( (updatedPar->associatedSurface()) == (fittableMeasurement->associatedSurface()) )) { ATH_MSG_WARNING ("Measurements " << (I<11?"T0":"T") << I-1 << @@ -562,33 +555,33 @@ Trk::FitterStatusCode Trk::ForwardKalmanFitter::buildAndAnalyseTrajectory //////////////////////////////////////////////////////////////////// // if it is configured, try mini-DAF in first iteration - sw. OFF in KF.cxx - if ( m_internalDAF != NULL && allowRecalibrate ) { + if ( m_internalDAF != nullptr && allowRecalibrate ) { const Trk::StraightLineSurface* testNextSurfaceIfWire = dynamic_cast<const Trk::StraightLineSurface*>(&predPar->associatedSurface()); const Trk::StraightLineSurface* testOldSurfaceIfWire = dynamic_cast<const Trk::StraightLineSurface*>(&updatedPar->associatedSurface()); const Trk::RIO_OnTrack* testROT = dynamic_cast<const Trk::RIO_OnTrack*>(fittableMeasurement); - double testPredErr = (predPar->covariance()==NULL ? 0.0 : sqrt( (*predPar->covariance())(Trk::locX,Trk::locX))); + double testPredErr = (predPar->covariance()==nullptr ? 0.0 : std::sqrt( (*predPar->covariance())(Trk::locX,Trk::locX))); double testDistance = (predPar->position() - updatedPar->position()).mag(); if ( msgLvl(MSG::DEBUG) && - (testOldSurfaceIfWire == NULL || testDistance > 1000.0*CLHEP::mm || filterCounter<=2) && - (testNextSurfaceIfWire != NULL) ){ + (testOldSurfaceIfWire == nullptr || testDistance > 1000.0*CLHEP::mm || filterCounter<=2) && + (testNextSurfaceIfWire != nullptr) ){ ATH_MSG_DEBUG ("precise prediction? " << predPar->parameters()[Trk::locR] << " +/- " << testPredErr << " measurement " << fittableMeasurement->localParameters()[Trk::locR] - << " +/- " << sqrt(fittableMeasurement->localCovariance()(Trk::locR,Trk::locR))); + << " +/- " << std::sqrt(fittableMeasurement->localCovariance()(Trk::locR,Trk::locR))); } double testRadius = fittableMeasurement->localParameters()[Trk::locR]; double testPred = predPar->parameters()[Trk::locR]; - if ( (testOldSurfaceIfWire == NULL || testDistance > 1000.0*CLHEP::mm || filterCounter<=2) - && (testNextSurfaceIfWire != NULL) - && testROT != NULL // FIXME will be blocked by PseudoMeasts like this + if ( (testOldSurfaceIfWire == nullptr || testDistance > 1000.0*CLHEP::mm || filterCounter<=2) + && (testNextSurfaceIfWire != nullptr) + && testROT != nullptr // FIXME will be blocked by PseudoMeasts like this // FIXME also look at anticipated fraction of tube hits - && (testPredErr > std::min(2.0*sqrt(fittableMeasurement->localCovariance()(Trk::locX,Trk::locX)),0.4) - || (fabs(testRadius-testPred)>0.5))) { + && (testPredErr > std::min(2.0*std::sqrt(fittableMeasurement->localCovariance()(Trk::locX,Trk::locX)),0.4) + || (std::fabs(testRadius-testPred)>0.5))) { ATH_MSG_DEBUG ("Starting driftcircle L/R solving, observed at state " << predictedState->positionOnTrajectory() << " err="<<testPredErr); @@ -615,7 +608,7 @@ Trk::FitterStatusCode Trk::ForwardKalmanFitter::updateOrSkip Trk::ProtoTrackStateOnSurface* bremEffectsState) const { // if extrapolation had failed, skip this method altogether. - if (predPar==NULL) return FitterStatusCode::Success; + if (predPar==nullptr) return FitterStatusCode::Success; const MeasurementBase* fittableMeasurement = predictedState->measurement(); FitQualityOnSurface* fitQuality=0; delete updatedPar; @@ -624,19 +617,14 @@ Trk::FitterStatusCode Trk::ForwardKalmanFitter::updateOrSkip // special fits with PseudoMeasurement (eg TRT only): PM replaces initial cov. // FIXME needs further study if pseudomeasurements in TRT are actually OK if (filterCounter == 1 && - // don't check on MeasuredPredPar NULL, else fails on iteration - // dynamic_cast<const Trk::MeasuredTrackParameters*>(predPar) == NULL && - dynamic_cast<const Trk::PseudoMeasurementOnTrack*>(fittableMeasurement) !=NULL && - predPar != NULL ) { // FIXME needs check that surfaces are identical? + // don't check on MeasuredPredPar nullptr, else fails on iteration + // dynamic_cast<const Trk::MeasuredTrackParameters*>(predPar) == nullptr && + dynamic_cast<const Trk::PseudoMeasurementOnTrack*>(fittableMeasurement) !=nullptr && + predPar != nullptr ) { // FIXME needs check that surfaces are identical? ATH_MSG_DEBUG ("Detected external stabilisation from PseudoMeast at start"); AmgVector(5) par; par.setZero(); - std::vector<double> cov0(5); - cov0.at(0) = 250.; - cov0.at(1) = 250.; - cov0.at(2) = 0.25; - cov0.at(3) = 0.25; - cov0.at(4) = 0.000001; + const std::vector<double> cov0{250., 250., 0.25, 0.25, 0.000001}; AmgSymMatrix(5)* cov = new AmgSymMatrix(5); cov->setZero(); for (int i=0, j=0; i<5; ++i) { @@ -676,7 +664,7 @@ Trk::FitterStatusCode Trk::ForwardKalmanFitter::updateOrSkip //////////////////////////////////////////////////////////////////// // analyse the fit quality, possibly flag as outlier - if (fitQuality == NULL) { + if (fitQuality == nullptr) { ATH_MSG_INFO ( "Updator failed to create any FitQuality object at all!" << endmsg << "==> OK to flag as outlier?"); predictedState->isOutlier(Trk::TrackState::FilterOutlier); @@ -713,7 +701,7 @@ Trk::FitterStatusCode Trk::ForwardKalmanFitter::updateOrSkip predictedState->isOutlier(Trk::TrackState::StateOutlier); } } - else if (predPar->covariance()!=NULL && runOutlier + else if (predPar->covariance()!=nullptr && runOutlier && (*predPar->covariance())(Trk::phi,Trk::phi) < 0.01*0.01 && (*predPar->covariance())(Trk::theta,Trk::theta) < 0.01*0.01 && ! (Trk::SensorBoundsCheck::areParamsInside @@ -733,7 +721,7 @@ Trk::FitterStatusCode Trk::ForwardKalmanFitter::updateOrSkip return FitterStatusCode::BadInput; } // copy over prePar to updatedPar because we ignore this update - if (bremEffectsState!=NULL) delete bremEffectsState->checkoutDNA_MaterialEffects(); + if (bremEffectsState!=nullptr) delete bremEffectsState->checkoutDNA_MaterialEffects(); delete updatedPar; updatedPar = predPar->clone(); // delete predPar; done by ProtoTrackStateOnSurface @@ -764,7 +752,7 @@ Trk::FitterStatusCode Trk::ForwardKalmanFitter::enterSeedIntoTrajectory if (ffs->forwardTrackParameters()) delete ffs->checkoutForwardPar(); if (ffs->referenceParameters()) delete ffs->checkoutReferenceParameters(); } - if (ffs->measurement() == NULL) { + if (ffs->measurement() == nullptr) { ATH_MSG_WARNING ("-Fe mess-up in enterSeedIntoTraj: can not find a first measurement!"); trajectory.clear(); return FitterStatusCode::BadInput; @@ -798,7 +786,7 @@ Trk::FitterStatusCode Trk::ForwardKalmanFitter::enterSeedIntoTrajectory } else ATH_MSG_WARNING ("Forward Kalman Fitter --> extrapolation engine did not succeed"); } - if (inputParAtStartSurface == NULL) { + if (inputParAtStartSurface == nullptr) { ATH_MSG_WARNING ("-Fe can not transport input param to first measurement => extrap problem or bad input"); ATH_MSG_INFO ("-Fe parameters R="<< inputPar.position().perp() << ", z="<< inputPar.position().z()<<" q/p="<<inputPar.parameters()[Trk::qOverP]<< @@ -829,7 +817,7 @@ void Trk::ForwardKalmanFitter::printGlobalParams(int istate, std::string ptype, const Trk::DNA_MaterialEffects* mefot) const { - char tt[80]; sprintf(tt,"T%.2u",istate); + char tt[80]; snprintf(tt,79,"T%.2u",istate); msg(MSG::VERBOSE) << tt << ptype << " GP:" << std::setiosflags(std::ios::fixed | std::ios::showpoint | std::ios::right ) << std::setw(9) << std::setprecision(2) << param->position()[0] diff --git a/Tracking/TrkFitter/TrkKalmanFitter/src/ForwardRefTrackKalmanFitter.cxx b/Tracking/TrkFitter/TrkKalmanFitter/src/ForwardRefTrackKalmanFitter.cxx index ccc7dba3b3ee73ba01b3b216d2071989fc2c05d4..8a65a3ec6ae5ea75b4e616e22f76b436d7dfaef1 100755 --- a/Tracking/TrkFitter/TrkKalmanFitter/src/ForwardRefTrackKalmanFitter.cxx +++ b/Tracking/TrkFitter/TrkKalmanFitter/src/ForwardRefTrackKalmanFitter.cxx @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration */ ////////////////////////////////////////////////////////////////// @@ -39,8 +39,6 @@ #include "TrkFitterInterfaces/IDynamicNoiseAdjustor.h" #include "TrkFitterInterfaces/IMeasurementRecalibrator.h" -#include <ext/algorithm> - //////////////////////////////////////////////////////////////////////////////// // // // Gaudi AlgTool control (constructor, initialise ...) // @@ -75,13 +73,8 @@ Trk::ForwardRefTrackKalmanFitter::~ForwardRefTrackKalmanFitter(){} StatusCode Trk::ForwardRefTrackKalmanFitter::initialize() { StatusCode sc = AthAlgTool::initialize(); - - if (detStore()->retrieve(m_idHelper, "AtlasID").isFailure()) { - ATH_MSG_ERROR ("Could not get AtlasDetectorID helper"); - return StatusCode::FAILURE; - } + ATH_CHECK (detStore()->retrieve(m_idHelper, "AtlasID")); m_utility = new ProtoTrajectoryUtility(m_idHelper); - ATH_MSG_INFO ("stability precut on state Chi2/ndf set to "<< m_StateChiSquaredPerNumberDoFPreCut ); ATH_MSG_INFO ("initialize() successful in " << name()); return sc; diff --git a/Tracking/TrkFitter/TrkKalmanFitter/src/KalmanFitter.cxx b/Tracking/TrkFitter/TrkKalmanFitter/src/KalmanFitter.cxx index 93c24bc5485dde50fecb79c10b55ab73e8279fa4..02b235cbcbe49efeb161b452f4ec905dd6178ec6 100755 --- a/Tracking/TrkFitter/TrkKalmanFitter/src/KalmanFitter.cxx +++ b/Tracking/TrkFitter/TrkKalmanFitter/src/KalmanFitter.cxx @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration */ ////////////////////////////////////////////////////////////////// @@ -44,14 +44,14 @@ #include "CLHEP/GenericFunctions/CumulativeChiSquare.hh" -#include <ext/algorithm> +#include <algorithm> +#include <cmath> Trk::KalmanFitter::KalmanFitter(const std::string& t,const std::string& n, const IInterface* p) : AthAlgTool (t,n,p), m_log(msgSvc(), n), - m_outputlevel(1), m_extrapolator("Trk::Extrapolator/AtlasExtrapolator"), m_updator("Trk::KalmanUpdator/KalmanUpdator"), m_ROTcreator("Trk::RIO_OnTrackCreator/RIO_OnTrackCreator"), @@ -66,6 +66,7 @@ Trk::KalmanFitter::KalmanFitter(const std::string& t,const std::string& n, m_outlierRecovery("Trk::KalmanOutlierRecovery_InDet/KOL_RecoveryID"), m_FitterValidationTool(""), m_option_callValidationToolForFailedFitsOnly(false), + m_option_sortingRefPoint{0.,0.,0.}, m_callValidationTool(false), m_haveValidationTool(false), m_doDNAForElectronsOnly(false), @@ -78,14 +79,10 @@ Trk::KalmanFitter::KalmanFitter(const std::string& t,const std::string& n, m_fitStatus(Trk::FitterStatusCode::BadInput), m_maximalNdof(0), m_fitStatistics(0), - m_chiSquaredAfb(4), m_chiSquaredAfbNontriviality(4) + m_chiSquaredAfb{}, m_chiSquaredAfbNontriviality{} { declareInterface<ITrackFitter>( this ); - m_option_sortingRefPoint.push_back(0.); - m_option_sortingRefPoint.push_back(0.); - m_option_sortingRefPoint.push_back(0.); - m_trajectory.reserve(100); // --- tools used by KalmanFitter, passed as ToolHandles @@ -134,7 +131,6 @@ Trk::KalmanFitter::KalmanFitter(const std::string& t,const std::string& n, "Enables calling validation methods in the extrapolation engine"); declareProperty("CallValidationToolForFailedFitsOnly", m_option_callValidationToolForFailedFitsOnly, "Call the validation tool given by FitterValidationToolHandle only for failed fits"); - // declareProperty ( "UseReferenceTrack", m_useReferenceTrack=false ); } @@ -147,17 +143,10 @@ StatusCode Trk::KalmanFitter::initialize() { //AthAlgTool::initialize().ignore(); m_log.setLevel(msgLevel()); // individual outputlevel not known before initialise - m_outputlevel = m_log.level()-MSG::DEBUG; // save the threshold for debug printout in member // get all the track fitter sub-tools (REQUIRED tools, obviously) - if (m_forwardFitter.retrieve().isFailure()) { - ATH_MSG_FATAL ("can not retrieve forward Kalman filter of type " << m_forwardFitter.typeAndName()); - return StatusCode::FAILURE; - } - if (m_smoother.retrieve().isFailure()) { - ATH_MSG_FATAL ("can not retrieve Kalman smoother of type " << m_smoother.typeAndName()); - return StatusCode::FAILURE; - } + ATH_CHECK(m_forwardFitter.retrieve()); + ATH_CHECK(m_smoother.retrieve()); if (m_outlierLogic.empty() || m_outlierLogic.retrieve().isFailure()) { ATH_MSG_FATAL ("can not retrieve outlier logic of type " << m_outlierLogic.typeAndName()); return StatusCode::FAILURE; @@ -206,43 +195,39 @@ StatusCode Trk::KalmanFitter::initialize() // --- get AlignableSurfaceProvider (OPTIONAL tool) if (!m_alignableSfProvider.empty()) { if (m_alignableSfProvider.retrieve().isFailure()) { - m_log << MSG::ERROR << "AlignableSfPrv is configured but tool is not accessible - " - << m_alignableSfProvider.typeAndName() << endmsg; + ATH_MSG_ERROR( "AlignableSfPrv is configured but tool is not accessible - "<< m_alignableSfProvider.typeAndName() ); return StatusCode::FAILURE; - } else m_log << MSG::INFO << "retrieved tool " - << m_alignableSfProvider.typeAndName() << endmsg; + } else ATH_MSG_DEBUG( "retrieved tool " << m_alignableSfProvider.typeAndName()); } // Get recalibrator, if it exists it also flags re-calibration (OPTIONAL tool) if (!m_recalibrator.empty()) { - m_log << MSG::INFO << "will re-create RIO_OnTracks through a Recalibrator."<<endmsg; + ATH_MSG_INFO( "will re-create RIO_OnTracks through a Recalibrator."); if (m_recalibrator.retrieve().isFailure()) { - m_log << MSG::ERROR << "can not retrieve configured recalibrator of type " - << m_recalibrator.typeAndName() << endmsg; + ATH_MSG_ERROR( "can not retrieve configured recalibrator of type " << m_recalibrator.typeAndName() ); return StatusCode::FAILURE; - } else m_log <<MSG::INFO<<"retrieved tool " << m_recalibrator.typeAndName() <<endmsg; - } else m_log << MSG::INFO<<"RIO_OnTracks will be preserved and not recalibrated unless PRD given as input." << endmsg; + } else ATH_MSG_DEBUG("retrieved tool " << m_recalibrator.typeAndName() ); + } else ATH_MSG_INFO("RIO_OnTracks will be preserved and not recalibrated unless PRD given as input." ); if (m_ROTcreator.empty() && !m_recalibrator.empty()) { - m_log << MSG::ERROR << "can not demand re-calibration without " - << "configured RIO_OnTrackCreator!" << endmsg; + ATH_MSG_ERROR( "can not demand re-calibration without configured RIO_OnTrackCreator!" ); return StatusCode::FAILURE; } // Get tool to switch to a different concept during parts of fwd filter, eg DAF for L/R if (!m_internalDAF.empty() && m_internalDAF.retrieve().isFailure()) { - m_log << MSG::FATAL << "can not retrieve internal annealing filter tool " - << m_internalDAF.typeAndName() << endmsg; + ATH_MSG_FATAL( "can not retrieve internal annealing filter tool "<< m_internalDAF.typeAndName() ); return StatusCode::FAILURE; } - if (!m_internalDAF.empty()) m_log << MSG::INFO << "retrieved " << m_internalDAF.typeAndName() - << " (Kalman internal piecewise DAF)"<<endmsg; + if (!m_internalDAF.empty()) { + ATH_MSG_INFO( "retrieved " << m_internalDAF.typeAndName()<< " (Kalman internal piecewise DAF)"); + } // Get Validation Tool (OPTIONAL tool) if ( ! m_FitterValidationTool.empty() ) { StatusCode sc = m_FitterValidationTool.retrieve(); if (sc.isFailure()) { - m_log << MSG::FATAL << "Could not retrieve validation tool: "<< m_FitterValidationTool << endmsg; + ATH_MSG_FATAL( "Could not retrieve validation tool: "<< m_FitterValidationTool ); return sc; } m_haveValidationTool = true; @@ -256,11 +241,10 @@ StatusCode Trk::KalmanFitter::initialize() m_sortingRefPoint[2] = m_option_sortingRefPoint[2]; m_tparScaleSetter = new Trk::TrkParametersComparisonFunction(m_sortingRefPoint); if (m_option_enforceSorting) { - m_log << MSG::INFO << "fitter inputs will be verified and sorted " - << "along momentum direction." << endmsg; - m_log << MSG::INFO << "if used, a sorting reference point is given as " + ATH_MSG_INFO( "fitter inputs will be verified and sorted along momentum direction." ); + ATH_MSG_INFO( "if used, a sorting reference point is given as " << m_sortingRefPoint.x() << ", " << m_sortingRefPoint.y() << ", " - << m_sortingRefPoint.z() << "." << endmsg; + << m_sortingRefPoint.z() << "." ); } else ATH_MSG_INFO ("fitter inputs are assumed to be always ordered in the direction along the track."); ATH_MSG_INFO ("Reference parameters will be calculated at the " @@ -331,13 +315,12 @@ StatusCode Trk::KalmanFitter::initialize() } if (!m_dynamicNoiseAdjustor.empty() && !m_alignableSfProvider.empty()) { ATH_MSG_ERROR ("Dynamic Noise Adjustment and Alignable Surface Provider can not be both active " - <<"at the same time!" << endmsg << "Will need interface change to work with both."); + <<"at the same time!\nWill need interface change to work with both."); return StatusCode::FAILURE; } if (!m_option_doSmoothing) { - ATH_MSG_WARNING ("doSmoothing is off: the smoothed track parameters at every detector will not be calculated." - << endmsg << "not recommended to use in conjunction with running outlier removal."); + ATH_MSG_WARNING ("doSmoothing is off: the smoothed track parameters at every detector will not be calculated.\nnot recommended to use in conjunction with running outlier removal."); } if (m_option_max_N_iterations < 1 ) { m_option_max_N_iterations = 3; @@ -351,31 +334,15 @@ StatusCode Trk::KalmanFitter::initialize() } if (m_cov0.size() != 5) { - m_cov0.clear(); m_cov0.reserve(5); - m_cov0.push_back(250.); - m_cov0.push_back(250.); - m_cov0.push_back(0.25); - m_cov0.push_back(0.25); - m_cov0.push_back(0.000001); + m_cov0 = {250., 250.,0.25, 0.25, 0.000001}; } ATH_MSG_INFO ("Initial covariance, set with the KF: " << m_cov0); - /* Setting other tools' level does not work with component lib updator: - if (m_outputlevel<1){ - const Trk::IUpdator* test = &(*m_updator); - const Trk::KalmanUpdator* logUpdator1 = - dynamic_cast<const Trk::KalmanUpdator*>(test); - Trk::KalmanUpdator* logUpdator2 = const_cast<Trk::KalmanUpdator*>(logUpdator1); - if (logUpdator2) sc = logUpdator2->setProperty("OutputLevel","1"); - } */ - + std::vector<int> statVec(nStatIndex, 0); m_fitStatistics.resize(nFitStatsCodes, statVec); - for (int i=0; i<nStatIndex; i++) { - m_chiSquaredAfb[i] = 0.0; - m_chiSquaredAfbNontriviality[i] = 0.0; - } - + m_chiSquaredAfb.fill(0.); + m_chiSquaredAfbNontriviality.fill(0.); ATH_MSG_INFO ("initialize() successful in " << name() << " ("<<PACKAGE_VERSION<<")"); return StatusCode::SUCCESS; } @@ -386,48 +353,49 @@ StatusCode Trk::KalmanFitter::finalize() delete m_tparScaleSetter; delete m_utility; delete m_inputPreparator; - ATH_MSG_INFO (name() << "'s fit statistics:"); + if (msgLvl(MSG::INFO)) { - + std::stringstream ss; int iw=9; - std::cout << "-------------------------------------------------------------------------------" << std::endl; - std::cout<< " track fits by eta range ------All---Barrel---Trans.-- Endcap-- " << std::endl; - std::vector<std::string> statusNames(0); - statusNames.push_back(" Number of fitter calls :"); - statusNames.push_back(" Number of successful track fits :"); - statusNames.push_back(" Number of fits w/ seed recovery :"); - statusNames.push_back(" failed fits not recovered by DAF:"); - statusNames.push_back(" Number of fits with electron DNA:"); - statusNames.push_back(" Number of fits with brem found :"); - statusNames.push_back(" Number of straight line fits :"); - statusNames.push_back(" fits with failed updator maths :"); - statusNames.push_back(" fits with failed extrapolation :"); - statusNames.push_back(" fits w/ failed outlier strategy :"); - statusNames.push_back(" insufficient meas'ts after KOL :"); - statusNames.push_back(" fits w/ failed Perigee making :"); - statusNames.push_back(" fits w/ bad input or bad logic :"); + ss << "-------------------------------------------------------------------------------\n" ; + ss<< " track fits by eta range ------All---Barrel---Trans.-- Endcap-- \n" ; + std::vector<std::string> statusNames{ + " Number of fitter calls :", + " Number of successful track fits :", + " Number of fits w/ seed recovery :", + " failed fits not recovered by DAF:", + " Number of fits with electron DNA:", + " Number of fits with brem found :", + " Number of straight line fits :", + " fits with failed updator maths :", + " fits with failed extrapolation :", + " fits w/ failed outlier strategy :", + " insufficient meas'ts after KOL :", + " fits w/ failed Perigee making :", + " fits w/ bad input or bad logic :"}; for (unsigned int i=0; i<statusNames.size(); i++) { - std::cout << (statusNames[i]) << std::setiosflags(std::ios::dec) << std::setw(iw) + ss << (statusNames[i]) << std::setiosflags(std::ios::dec) << std::setw(iw) << (m_fitStatistics[i])[iAll] << std::setiosflags(std::ios::dec) << std::setw(iw) << (m_fitStatistics[i])[iBarrel] << std::setiosflags(std::ios::dec) << std::setw(iw) << (m_fitStatistics[i])[iTransi] << std::setiosflags(std::ios::dec) << std::setw(iw) - << (m_fitStatistics[i])[iEndcap] << std::endl; + << (m_fitStatistics[i])[iEndcap] << "\n"; } - std::cout << "-------------------------------------------------------------------------------" << std::endl; + ss << "-------------------------------------------------------------------------------\n"; - std::cout<< " fw-bw filter chi2 asymmetry :" << std::setiosflags(std::ios::dec) << std::setw(iw) + ss<< " fw-bw filter chi2 asymmetry :" << std::setiosflags(std::ios::dec) << std::setw(iw) << m_chiSquaredAfb[Trk::KalmanFitter::iAll] << std::setiosflags(std::ios::dec) << std::setw(iw) << m_chiSquaredAfb[Trk::KalmanFitter::iBarrel] << std::setiosflags(std::ios::dec) << std::setw(iw) << m_chiSquaredAfb[Trk::KalmanFitter::iTransi] << std::setiosflags(std::ios::dec) << std::setw(iw) - << m_chiSquaredAfb[Trk::KalmanFitter::iEndcap] << std::endl; - std::cout<< " absolute fw-bw chi2 asymmetry :" << std::setiosflags(std::ios::dec) << std::setw(iw) + << m_chiSquaredAfb[Trk::KalmanFitter::iEndcap] << "\n"; + ss<< " absolute fw-bw chi2 asymmetry :" << std::setiosflags(std::ios::dec) << std::setw(iw) << m_chiSquaredAfbNontriviality[Trk::KalmanFitter::iAll] << std::setiosflags(std::ios::dec) << std::setw(iw) << m_chiSquaredAfbNontriviality[Trk::KalmanFitter::iBarrel] << std::setiosflags(std::ios::dec) << std::setw(iw) << m_chiSquaredAfbNontriviality[Trk::KalmanFitter::iTransi] << std::setiosflags(std::ios::dec) << std::setw(iw) - << m_chiSquaredAfbNontriviality[Trk::KalmanFitter::iEndcap] << std::endl; - std::cout << "-------------------------------------------------------------------------------" << std::endl; + << m_chiSquaredAfbNontriviality[Trk::KalmanFitter::iEndcap] << "\n"; + ss << "-------------------------------------------------------------------------------\n"; + ATH_MSG_INFO (name() << "'s fit statistics:\n"<<ss.str()); } - + ATH_MSG_INFO ("finalize() successful in " << name()); return StatusCode::SUCCESS; } @@ -456,16 +424,15 @@ Trk::Track* Trk::KalmanFitter::fit(const Trk::Track& inputTrack, return 0; } if (msgLvl(MSG::VERBOSE)) { - m_log << MSG::VERBOSE << "list of parameters as they are on the input track:" << endmsg; + ATH_MSG_VERBOSE( "list of parameters as they are on the input track:"); DataVector<const TrackParameters>::const_iterator it = inputTrack.trackParameters()->begin(); for(int i=0 ; it!=inputTrack.trackParameters()->end(); ++it, ++i) - m_log << MSG::VERBOSE << "TrackPar" << (i<10 ? " " : " ") << i + ATH_MSG_VERBOSE( "TrackPar" << (i<10 ? " " : " ") << i << " position mag : " << (*it)->position().mag() - << ", to ref is " << ((*it)->position()-m_sortingRefPoint).mag() << endmsg; - if (m_outputlevel <= 0) m_log << MSG::VERBOSE << "Now getting track parameters near origin " - << (m_option_enforceSorting? "via STL sort" : "as first TP (convention)") - << endmsg; + << ", to ref is " << ((*it)->position()-m_sortingRefPoint).mag()); + ATH_MSG_VERBOSE( "Now getting track parameters near origin " + << (m_option_enforceSorting? "via STL sort" : "as first TP (convention)")); } // fill internal trajectory through external preparator class const TrackParameters* minPar = 0; @@ -478,19 +445,16 @@ Trk::Track* Trk::KalmanFitter::fit(const Trk::Track& inputTrack, } m_utility->identifyMeasurements(m_trajectory); m_maximalNdof = m_utility->rankedNumberOfMeasurements(m_trajectory)-5; - if (m_outputlevel < 0) - m_log<<MSG::VERBOSE << "These TrackPars are chosen as seed: "<<*minPar<<endmsg; + ATH_MSG_VERBOSE( "These TrackPars are chosen as seed: "<<*minPar); bool doDNA = !m_dynamicNoiseAdjustor.empty(); if (m_doDNAForElectronsOnly && prtHypothesis != Trk::electron) doDNA = false; Trk::KalmanMatEffectsController kalMec(prtHypothesis, doDNA); - if (m_outputlevel < 0) - m_log<<MSG::VERBOSE << "set up MatEffController with PH " << prtHypothesis << ", have-DNA " + ATH_MSG_VERBOSE( "set up MatEffController with PH " << prtHypothesis << ", have-DNA " << ( !m_dynamicNoiseAdjustor.empty() ? - ( kalMec.aggressiveDNA()?"yes, aggressive tuning":"yes, generic tuning"):"no.")<<endmsg; - + ( kalMec.aggressiveDNA()?"yes, aggressive tuning":"yes, generic tuning"):"no.")); /* start the Kalman filtering */ float this_eta=0.0; // statistics - if (m_outputlevel<=1) { + if (msgLvl(MSG::DEBUG)) { this_eta = minPar->eta(); monitorTrackFits( Trk::KalmanFitter::Call, this_eta ); } @@ -520,11 +484,11 @@ Trk::Track* Trk::KalmanFitter::fit(const Trk::Track& inputTrack, if (m_option_callValidationToolForFailedFitsOnly && (!m_callValidationTool) && m_haveValidationTool) { m_callValidationTool = true; if (fit(inputTrack, runOutlier, kalMec.particleType())) { - m_log << MSG::WARNING << "Error: fit succeeded! Should not happen, if we repeat a failed fit!" << endmsg; + ATH_MSG_WARNING( "Error: fit succeeded! Should not happen, if we repeat a failed fit!" ); } m_callValidationTool = false; } - if (m_outputlevel<1) m_log << MSG::DEBUG << "fit(track) during iterations failed." << endmsg; + ATH_MSG_DEBUG( "fit(track) during iterations failed." ); return 0; } } @@ -553,36 +517,35 @@ Trk::Track* Trk::KalmanFitter::fit(const Trk::PrepRawDataSet& inputPRDColl, std::sort( orderedPRDColl.begin(), orderedPRDColl.end(), *PRD_CompFunc ); }; delete PRD_CompFunc; - if (m_outputlevel <= 0) { - m_log << MSG::VERBOSE<<" Sorting passed, sorted list by distance to ref point:" << endmsg; + if (msgLvl(MSG::VERBOSE)) { + ATH_MSG_VERBOSE(" Sorting passed, sorted list by distance to ref point:" ); PrepRawDataSet::const_iterator it1 = orderedPRDColl.begin(); for( ; it1!=orderedPRDColl.end(); it1++) { - if ( !(*it1)->detectorElement() ) { - m_log << MSG::ERROR << "corrupt data - PrepRawData has no element link.\n" - << "The track fitter won't help you here -> segfault expected." << endmsg; - } else { - m_log << MSG::VERBOSE << " radius of PRD detElement's GPos is " - << (*it1)->detectorElement()->surface( (*it1)->identify() ).center().mag() << ", transverse r " - << (*it1)->detectorElement()->surface( (*it1)->identify() ).center().perp() << endmsg; - } + if ( !(*it1)->detectorElement() ) { + ATH_MSG_ERROR( "corrupt data - PrepRawData has no element link.\n" + << "The track fitter won't help you here -> segfault expected." ); + } else { + ATH_MSG_ERROR( " radius of PRD detElement's GPos is " + << (*it1)->detectorElement()->surface( (*it1)->identify() ).center().mag() << ", transverse r " + << (*it1)->detectorElement()->surface( (*it1)->identify() ).center().perp() ); + } } } // end if output to be made // run forward kalman fit, including ROT creation - if (m_outputlevel < 0) m_log << MSG::VERBOSE << "call forward kalman filter" << endmsg; + ATH_MSG_VERBOSE("call forward kalman filter" ) ; m_fitStatus = m_forwardFitter->fit(m_trajectory, orderedPRDColl, estimatedStartParameters, runOutlier, kalMec); } else { // run forward kalman fit, including ROT creation - if (m_outputlevel < 0) m_log << MSG::VERBOSE << "call forward kalman filter" << endmsg; + ATH_MSG_VERBOSE( "call forward kalman filter" ); m_fitStatus = m_forwardFitter->fit(m_trajectory, inputPRDColl, estimatedStartParameters, runOutlier, kalMec); } if (m_callValidationTool) callValidation(0, kalMec.particleType(), m_fitStatus); - float this_eta=0.0; // statistics m_maximalNdof = m_utility->rankedNumberOfMeasurements(m_trajectory)-5; - if (m_outputlevel<=1) { + if (msgLvl(MSG::DEBUG)) { this_eta = estimatedStartParameters.eta(); monitorTrackFits( Trk::KalmanFitter::Call, this_eta ); } @@ -594,7 +557,7 @@ Trk::Track* Trk::KalmanFitter::fit(const Trk::PrepRawDataSet& inputPRDColl, invokeAnnealingFilter(startPar, fitQual, runOutlier, kalMec, this_eta) ) { // make output track from the internal trajectory assert( fitQual ); - Track* fittedTrack = makeTrack(fitQual,*startPar, &kalMec, this_eta, NULL); + Track* fittedTrack = makeTrack(fitQual,*startPar, &kalMec, this_eta, nullptr); m_trajectory.clear(); if (!fittedTrack) delete fitQual; return fittedTrack; @@ -625,7 +588,7 @@ Trk::Track* Trk::KalmanFitter::fit(const Trk::MeasurementSet& inputMeasSet, if (m_option_enforceSorting) { // input vector is const, so copy it before sorting. bool worstCaseSorting = // invest n*(logN)**2 sorting time only for lowPt - fabs(estimatedStartParameters.parameters()[Trk::qOverP]) > 0.002; + std::abs(estimatedStartParameters.parameters()[Trk::qOverP]) > 0.002; MeasurementSet sortedHitSet = MeasurementSet(inputMeasSet); Trk::MeasurementBaseComparisonFunction* MeasB_CompFunc = new Trk::MeasurementBaseComparisonFunction(estimatedStartParameters.position(), @@ -637,14 +600,14 @@ Trk::Track* Trk::KalmanFitter::fit(const Trk::MeasurementSet& inputMeasSet, sort( sortedHitSet.begin(), sortedHitSet.end(), *MeasB_CompFunc ) ; }; // some debug output - if (m_outputlevel<0) { + if (msgLvl(MSG::VERBOSE)){ ATH_MSG_VERBOSE ("-K- The list of MeasurementBase has been ordered along the initial direction."); MeasurementSet::const_iterator it1 = sortedHitSet.begin(); MeasurementSet::const_iterator it1End = sortedHitSet.end(); - for( ; it1!=it1End; it1++) { - m_log << MSG::VERBOSE << "-K- globalPos() magnitude is " + for( ; it1!=it1End; ++it1) { + ATH_MSG_VERBOSE( "-K- globalPos() magnitude is " << (*it1)->globalPosition().mag() << ", transverse r " - << (*it1)->globalPosition().perp() << endmsg; + << (*it1)->globalPosition().perp() ); } } delete MeasB_CompFunc; @@ -666,12 +629,12 @@ Trk::Track* Trk::KalmanFitter::fit(const Trk::MeasurementSet& inputMeasSet, } float this_eta=0.0; // statistics m_maximalNdof = m_utility->rankedNumberOfMeasurements(m_trajectory)-5; - if (m_outputlevel<=1) { + if (msgLvl(MSG::DEBUG)) { this_eta = estimatedStartParameters.eta(); monitorTrackFits( Trk::KalmanFitter::Call, this_eta ); } - if (m_outputlevel < 0) - m_log<<MSG::VERBOSE << "These TrackPars are chosen as seed: "<<estimatedStartParameters<<endmsg; + + ATH_MSG_VERBOSE( "These TrackPars are chosen as seed: "<<estimatedStartParameters); /* --- perform first forward filter on measurement set. Assume that clients who call this interface never want re-making of the ROTs. Recalibrate = false.*/ @@ -690,7 +653,7 @@ Trk::Track* Trk::KalmanFitter::fit(const Trk::MeasurementSet& inputMeasSet, if ( iterateKalmanFilter(startPar, fitQual, runOutlier, kalMec, this_eta) || invokeAnnealingFilter(startPar,fitQual,runOutlier, kalMec, this_eta) ) { // make output track from the internal trajectory: - Track* fittedTrack = makeTrack(fitQual,*startPar,&kalMec, this_eta, NULL); + Track* fittedTrack = makeTrack(fitQual,*startPar,&kalMec, this_eta, nullptr); m_trajectory.clear(); if (!fittedTrack) delete fitQual; return fittedTrack; @@ -702,11 +665,11 @@ Trk::Track* Trk::KalmanFitter::fit(const Trk::MeasurementSet& inputMeasSet, if (m_option_callValidationToolForFailedFitsOnly && (!m_callValidationTool) && m_haveValidationTool) { m_callValidationTool = true; if (fit(inputMeasSet, estimatedStartParameters, runOutlier, kalMec.particleType())) { - m_log << MSG::WARNING << "Error: fit succeeded! Should not happen, if we repeat a failed fit!" << endmsg; + ATH_MSG_WARNING( "Error: fit succeeded! Should not happen, if we repeat a failed fit!" ); } m_callValidationTool = false; } - if (m_outputlevel<1) m_log << MSG::DEBUG << "fit(vec<MB>) during iteration failed." << endmsg; + ATH_MSG_DEBUG( "fit(vec<MB>) during iteration failed." ); return 0; } } @@ -766,7 +729,7 @@ Trk::Track* Trk::KalmanFitter::fit(const Trk::Track& inputTrack, // protection, if empty MeasurementSet if (addMeasColl.empty()) { - m_log << MSG::WARNING << "client tries to add an empty MeasurementSet to the track fit." << endmsg; + ATH_MSG_WARNING( "client tries to add an empty MeasurementSet to the track fit." ); return fit(inputTrack, runOutlier, matEffects); } @@ -777,27 +740,25 @@ Trk::Track* Trk::KalmanFitter::fit(const Trk::Track& inputTrack, m_option_enforceSorting, m_option_reintegrateOutliers, matEffects) == StatusCode::FAILURE) { - m_log << MSG::WARNING << "Could not decode input track!" << endmsg; + ATH_MSG_WARNING( "Could not decode input track!" ); m_trajectory.clear(); return 0; } m_utility->identifyMeasurements(m_trajectory); m_maximalNdof = m_utility->rankedNumberOfMeasurements(m_trajectory)-5; - if (m_outputlevel < 0) - m_log<<MSG::VERBOSE << "These TrackPars are chosen as seed: " - <<*estimatedStartParameters<<endmsg; + ATH_MSG_VERBOSE( "These TrackPars are chosen as seed: " + <<*estimatedStartParameters); float this_eta=0.0; // statistics - if (m_outputlevel<=1) { + if (msgLvl(MSG::DEBUG)) { this_eta = estimatedStartParameters->eta(); monitorTrackFits( Trk::KalmanFitter::Call, this_eta ); } bool doDNA = !m_dynamicNoiseAdjustor.empty(); if (m_doDNAForElectronsOnly && matEffects != Trk::electron) doDNA = false; Trk::KalmanMatEffectsController kalMec(matEffects, doDNA); - if (m_outputlevel < 0) - m_log<<MSG::VERBOSE << "set up MatEffController with PH " << matEffects << ", have-DNA " + ATH_MSG_VERBOSE("set up MatEffController with PH " << matEffects << ", have-DNA " << ( !m_dynamicNoiseAdjustor.empty() ? - ( kalMec.aggressiveDNA()?"yes, aggressive tuning":"yes, generic tuning"):"no.")<<endmsg; + ( kalMec.aggressiveDNA()?"yes, aggressive tuning":"yes, generic tuning"):"no.")) ; // --- perform first forward filter on measurement set extracted from track if (m_forwardFitter->enterSeedIntoTrajectory(m_trajectory,*estimatedStartParameters,m_cov0, @@ -863,12 +824,11 @@ Trk::Track* Trk::KalmanFitter::fit(const Trk::Track& intrk1, /* determine the Track Parameter which is the start of the trajectory, i.e. closest to the reference point */ - if (m_outputlevel <= 0) m_log << MSG::VERBOSE << "get track parameters near origin " - << (m_option_enforceSorting? "via STL sort" : "as first TP (convention)") - << endmsg; + ATH_MSG_VERBOSE( "get track parameters near origin " + << (m_option_enforceSorting? "via STL sort" : "as first TP (convention)")); if (!intrk1.trackParameters() || intrk1.trackParameters()->empty()) { - m_log << MSG::WARNING << "input #1 fails to provide track parameters for seeding the " - << "KF, reject fit" << endmsg; + ATH_MSG_WARNING( "input #1 fails to provide track parameters for seeding the " + << "KF, reject fit" ); return 0; } @@ -878,7 +838,7 @@ Trk::Track* Trk::KalmanFitter::fit(const Trk::Track& intrk1, intrk1,intrk2,m_option_enforceSorting, m_option_reintegrateOutliers, matEffects) == StatusCode::FAILURE) { - m_log << MSG::WARNING << "Could not decode input tracks!" << endmsg; + ATH_MSG_WARNING( "Could not decode input tracks!" ); m_trajectory.clear(); return 0; } m_utility->identifyMeasurements(m_trajectory); @@ -886,17 +846,15 @@ Trk::Track* Trk::KalmanFitter::fit(const Trk::Track& intrk1, bool doDNA = !m_dynamicNoiseAdjustor.empty(); if (m_doDNAForElectronsOnly && matEffects != Trk::electron) doDNA = false; Trk::KalmanMatEffectsController kalMec(matEffects, doDNA); - if (m_outputlevel < 0) - m_log<<MSG::VERBOSE << "set up MatEffController with PH " << matEffects << ", have-DNA " + ATH_MSG_VERBOSE( "set up MatEffController with PH " << matEffects << ", have-DNA " << ( !m_dynamicNoiseAdjustor.empty() ? - ( kalMec.aggressiveDNA()?"yes, aggressive tuning":"yes, generic tuning"):"no.")<<endmsg; + ( kalMec.aggressiveDNA()?"yes, aggressive tuning":"yes, generic tuning"):"no.")); - if (m_outputlevel < 0) - m_log<<MSG::VERBOSE << "These TrackPars are chosen as seed: "<<*minPar<<endmsg; + ATH_MSG_VERBOSE( "These TrackPars are chosen as seed: "<<*minPar); /* start the Kalman filtering */ float this_eta=0.0; // statistics - if (m_outputlevel<=1) { + if (msgLvl(MSG::DEBUG)) { this_eta = minPar->eta(); monitorTrackFits( Trk::KalmanFitter::Call, this_eta ); } @@ -955,7 +913,7 @@ bool Trk::KalmanFitter::iterateKalmanFilter(const Trk::TrackParameters*& startP if (++nOutlierIterations>1) { this->prepareNextIteration(nOutlierIterations,newFitQuality,iFilterBeginState, *startPar); ATH_MSG_VERBOSE ("\n********** call forward kalman filter, iteration #" - << nOutlierIterations << " **********" << endmsg ); + << nOutlierIterations << " **********"); // do not recalibrate a second time -- DIFF TO OTHER INTERFACES m_fitStatus = m_forwardFitter->fit(m_trajectory, *startPar, runOutlier, kalMec, /*allowRecalibration=*/false, iFilterBeginState); @@ -964,7 +922,7 @@ bool Trk::KalmanFitter::iterateKalmanFilter(const Trk::TrackParameters*& startP kalMec.particleType(), m_fitStatus); } - if (m_outputlevel <=0) m_utility->dumpTrajectory(m_trajectory, name()); + if (msgLvl(MSG::VERBOSE)) m_utility->dumpTrajectory(m_trajectory, name()); // protect against failed fit if (m_fitStatus.isFailure()) { @@ -1011,11 +969,10 @@ bool Trk::KalmanFitter::iterateKalmanFilter(const Trk::TrackParameters*& startP && kalMec.breakpointType() == Trk::BreakpointNotSpecified) { Trk::TrackBreakpointType dnaSeparation = m_brempointAnalyser->confirmBreakpoint(m_trajectory); - if (m_outputlevel < 0) { + if (msgLvl(MSG::VERBOSE)) { m_log << MSG::VERBOSE << "DNA separator spoke: " << (int)dnaSeparation; if (dnaSeparation==Trk::DnaBremPointNotUseful) m_log << " (false positive DNA)"; - if (dnaSeparation==Trk::DnaBremPointUseful) m_log << " (DNA confirmed)"; - m_log << endmsg; + if (dnaSeparation==Trk::DnaBremPointUseful) m_log << " (DNA confirmed)\n"; } kalMec.updateBreakpoint(dnaSeparation); } @@ -1028,8 +985,7 @@ bool Trk::KalmanFitter::iterateKalmanFilter(const Trk::TrackParameters*& startP iFilterBeginState = 1; this->prepareNextIteration(1,newFitQuality,iFilterBeginState, *startPar); - ATH_MSG_VERBOSE ( endmsg << "********** call forward kalman filter, reverting " - << "DNA (still #1) **********" << endmsg ); + ATH_MSG_VERBOSE ( "\n********** call forward kalman filter, reverting DNA (still #1) **********\n"); // do not recalibrate again - DNA usually guarantees ROTs are made close to real track m_fitStatus = m_forwardFitter->fit(m_trajectory, *startPar, runOutlier, kalMec, false, iFilterBeginState); @@ -1043,15 +999,14 @@ bool Trk::KalmanFitter::iterateKalmanFilter(const Trk::TrackParameters*& startP // --- #1 directly exit iterations because they are switched OFF (runoutlier false) if (!runOutlier) { - ATH_MSG_VERBOSE ("runOutlier is off => give back track without iteration or " - << "fit quality improvement."); + ATH_MSG_VERBOSE ("runOutlier is off => give back track without iteration or fit quality improvement."); fitter_is_ready = true; return true; } // --- run outlier logic. Check if we end up at ndof<=0 or if outliers are found. int nPreviousOutliers = m_utility->numberOfOutliers(m_trajectory); - if (newFitQuality == NULL || newFitQuality->numberDoF() <= 0) { + if (newFitQuality == nullptr || newFitQuality->numberDoF() <= 0) { fitter_is_ready = false; } else { fitter_is_ready = @@ -1072,10 +1027,9 @@ bool Trk::KalmanFitter::iterateKalmanFilter(const Trk::TrackParameters*& startP if (msgLvl(MSG::DEBUG)) m_utility->dumpTrajectory(m_trajectory, name()); bool fit_has_failed = - ( newFitQuality==NULL + ( newFitQuality==nullptr || newFitQuality->numberDoF() <=0 - || ( (m_utility->numberOfOutliers(m_trajectory)-nPreviousOutliers) - > 0.4*m_trajectory.size() /*std::min(0.4*m_trajectory.size(), 7.0)*/ ) + || ( (m_utility->numberOfOutliers(m_trajectory)-nPreviousOutliers)> 0.4*m_trajectory.size()) || nOutlierIterations >= m_option_max_N_iterations || m_utility->rankedNumberOfMeasurements(m_trajectory) < 5); if (fit_has_failed) @@ -1094,10 +1048,10 @@ bool Trk::KalmanFitter::iterateKalmanFilter(const Trk::TrackParameters*& startP if (it->isDriftCircle()) { if (posFirstTrt == 0) posFirstTrt = it->positionOnTrajectory(); if (it->measurement()->localCovariance()(Trk::locR,Trk::locR) > 1.0) { - if (it->isOutlier()) ++nOutlTube; else ++nMeasTube; - } else { - if (it->isOutlier()) ++nOutlPrecise; else ++nMeasPrecise; - } + if (it->isOutlier()) ++nOutlTube; else ++nMeasTube; + } else { + if (it->isOutlier()) ++nOutlPrecise; else ++nMeasPrecise; + } } } if ( (nMeasPrecise+nMeasTube+nOutlPrecise+nOutlTube) > 12 @@ -1113,15 +1067,6 @@ bool Trk::KalmanFitter::iterateKalmanFilter(const Trk::TrackParameters*& startP ATH_MSG_VERBOSE ("checking if DAF can be useful - no: TRT driftcircle part not a particular problem."); } - /* if ( !fit_has_failed - && (nMeasPrecise+nMeasTube+nOutlPrecise+nOutlTube) > 12 - && ( (4*nMeasPrecise < nMeasTube) || (nOutlPrecise+nOutlTube > nMeasPrecise+nMeasTube)) - && posFirstTrt>10) { - m_fitStatus = Trk::FitterStatusCode::NoConvergence; - fit_has_failed = true; - ATH_MSG_WARNING ("Additional case of invoking DAF recovery, numbers: "<<nMeasPrecise<<", "<<nMeasTube - <<", "<<nOutlPrecise<<", "<<nOutlTube); - } */ // and prevent tracks from getting close to their ndof limit int currentNdof = m_utility->rankedNumberOfMeasurements(m_trajectory)-5; @@ -1173,7 +1118,7 @@ bool Trk::KalmanFitter::invokeAnnealingFilter(const Trk::TrackParameters*& star // and look for problematic seeds (replaces old seed-recovery by T.Belkind) double chi2_AFB = 0.0; - if (newFitQuality != NULL) { + if (newFitQuality != nullptr) { Trk::FitQuality ffq = m_utility->forwardFilterQuality(m_trajectory); chi2_AFB = (ffq.chiSquared() - newFitQuality->chiSquared()) / (ffq.chiSquared() + newFitQuality->chiSquared()); @@ -1207,20 +1152,16 @@ bool Trk::KalmanFitter::invokeAnnealingFilter(const Trk::TrackParameters*& star dafStatus = m_smoother->fitWithReference(m_trajectory, newFitQuality, kalMec); else dafStatus = m_smoother->fit(m_trajectory, newFitQuality, kalMec); - if (m_outputlevel < 1) { - m_log << MSG::INFO << "Internal DAF returned with chi2 chain:"; - for (Trk::Trajectory::const_iterator it=m_trajectory.begin(); - it!=m_trajectory.end(); it++) { + ATH_MSG_INFO( "Internal DAF returned with chi2 chain:"); + for (Trk::Trajectory::const_iterator it=m_trajectory.begin();it!=m_trajectory.end(); it++) { if (!it->isOutlier()) { - if (it->fitQuality()) m_log << it->fitQuality()->chiSquared() << " % "; - else m_log << "Problem - no FitQ % "; + if (it->fitQuality()) ATH_MSG_INFO( it->fitQuality()->chiSquared() << " % "); + else ATH_MSG_INFO( "Problem - no FitQ % "); } } - m_log << endmsg; - } } - bool successfulRecovery = newFitQuality!= NULL + bool successfulRecovery = newFitQuality!= nullptr && dafStatus==Trk::FitterStatusCode::Success && m_utility->rankedNumberOfMeasurements(m_trajectory) >= 5 && !m_outlierLogic->reject(*newFitQuality); @@ -1266,7 +1207,7 @@ bool Trk::KalmanFitter::prepareNextIteration(const unsigned int& upcomingIterati // get chi2 asymmetry double Chi2FilterAfb = 0.0; - if (FQ != NULL) { + if (FQ != nullptr) { for (Trk::Trajectory::const_iterator it=m_trajectory.begin(); it!=m_trajectory.end(); it++) if ( !it->isOutlier() || (it->trackStateType() != Trk::TrackState::ExternalOutlier @@ -1288,8 +1229,8 @@ bool Trk::KalmanFitter::prepareNextIteration(const unsigned int& upcomingIterati AmgSymMatrix(5)* covN = new AmgSymMatrix(5)(); // a 5x5 0-matrix covN->setZero(); for (int i=0; i<5; ++i) { - double scale = i==4 ? 200. : 100.; - (*covN)(i,i) = (*cov)(i,i) < m_cov0[i] ? (*cov)(i,i)*scale : m_cov0[i]; + double scale = i==4 ? 200. : 100.; + (*covN)(i,i) = (*cov)(i,i) < m_cov0[i] ? (*cov)(i,i)*scale : m_cov0[i]; } newSeedPars = CREATE_PARAMETERS(*resultFromPreviousIter, resultFromPreviousIter->parameters(),covN); @@ -1337,13 +1278,13 @@ Trk::Track* Trk::KalmanFitter::makeTrack(const Trk::FitQuality* FQ, const Trk::TrackInfo* existingInfo) const { ATH_MSG_VERBOSE ("--> enter KalmanFitter::makeTrack()"); - if (m_outputlevel <=0) m_utility->dumpTrajectory(m_trajectory, name()); + if (msgLvl(MSG::VERBOSE)) m_utility->dumpTrajectory(m_trajectory, name()); // output trajectory - only if # degrees of freedom reasonable if (FQ->numberDoF() <= 0) { ATH_MSG_DEBUG ("********** warning, ndof<=0 i.e. not enough measurements left " << "to form track! **********\n"); - if (m_outputlevel<=1) monitorTrackFits( MinimalTrackFailure, this_eta ); + if (msgLvl(MSG::DEBUG)) monitorTrackFits( MinimalTrackFailure, this_eta ); m_fitStatus = Trk::FitterStatusCode::FewFittableMeasurements; return 0; } else { @@ -1356,7 +1297,7 @@ Trk::Track* Trk::KalmanFitter::makeTrack(const Trk::FitQuality* FQ, if (perState) finalTrajectory->push_back( perState ); else { ATH_MSG_DEBUG ("********** perigee making failed, drop track"); - if (m_outputlevel<=1) monitorTrackFits( Trk::KalmanFitter::PerigeeMakingFailure, this_eta ); + if (msgLvl(MSG::DEBUG)) monitorTrackFits( Trk::KalmanFitter::PerigeeMakingFailure, this_eta ); m_fitStatus = Trk::FitterStatusCode::PerigeeMakingFailure; delete finalTrajectory; return 0; } @@ -1411,7 +1352,7 @@ Trk::Track* Trk::KalmanFitter::makeTrack(const Trk::FitQuality* FQ, // we made it ! ATH_MSG_DEBUG ("\n********** done, track made with Chi2 = " << FQ->chiSquared() << " / " << FQ->numberDoF() << " **********\n"); - if (m_outputlevel<=1) { + if (msgLvl(MSG::DEBUG)) { monitorTrackFits( Trk::KalmanFitter::Success, this_eta ); updateChi2Asymmetry( m_fitStatistics[Trk::KalmanFitter::Success], *FQ, this_eta); } @@ -1505,9 +1446,9 @@ void Trk::KalmanFitter::monitorTrackFits(FitStatisticsCode code, const double& e if ( m_option_callValidationToolForFailedFitsOnly && m_callValidationTool ) return; // count: ((m_fitStatistics[code])[Trk::KalmanFitter::iAll])++; - if (fabs(eta) < 0.80 ) ((m_fitStatistics[code])[Trk::KalmanFitter::iBarrel])++; - else if (fabs(eta) < 1.60) ((m_fitStatistics[code])[Trk::KalmanFitter::iTransi])++; - else if (fabs(eta) < 2.50) ((m_fitStatistics[code])[Trk::KalmanFitter::iEndcap])++; + if (std::abs(eta) < 0.80 ) ((m_fitStatistics[code])[Trk::KalmanFitter::iBarrel])++; + else if (std::abs(eta) < 1.60) ((m_fitStatistics[code])[Trk::KalmanFitter::iTransi])++; + else if (std::abs(eta) < 2.50) ((m_fitStatistics[code])[Trk::KalmanFitter::iEndcap])++; return; } @@ -1516,37 +1457,28 @@ void Trk::KalmanFitter::updateChi2Asymmetry(std::vector<int>& Nsuccess, const double& eta) const { if ( m_option_callValidationToolForFailedFitsOnly && m_callValidationTool ) return; Trk::FitQuality fwFQ = m_utility->forwardFilterQuality(m_trajectory); - double chi2_AFB = (fwFQ.chiSquared() - bwFQ.chiSquared()) - / (fwFQ.chiSquared() + bwFQ.chiSquared()); + double chi2_AFB = (fwFQ.chiSquared() - bwFQ.chiSquared())/ (fwFQ.chiSquared() + bwFQ.chiSquared()); m_chiSquaredAfb[Trk::KalmanFitter::iAll] - += (chi2_AFB - m_chiSquaredAfb[Trk::KalmanFitter::iAll]) - /double(Nsuccess[Trk::KalmanFitter::iAll]); + += (chi2_AFB - m_chiSquaredAfb[Trk::KalmanFitter::iAll])/double(Nsuccess[Trk::KalmanFitter::iAll]); m_chiSquaredAfbNontriviality[Trk::KalmanFitter::iAll] - += (fabs(chi2_AFB) - m_chiSquaredAfbNontriviality[Trk::KalmanFitter::iAll]) - /double(Nsuccess[Trk::KalmanFitter::iAll]); - if (fabs(eta) < 0.80 ) { + += (std::abs(chi2_AFB) - m_chiSquaredAfbNontriviality[Trk::KalmanFitter::iAll])/double(Nsuccess[Trk::KalmanFitter::iAll]); + if (std::abs(eta) < 0.80 ) { m_chiSquaredAfb[Trk::KalmanFitter::iBarrel] - += (chi2_AFB - m_chiSquaredAfb[Trk::KalmanFitter::iBarrel]) - /double(Nsuccess[Trk::KalmanFitter::iBarrel]); + += (chi2_AFB - m_chiSquaredAfb[Trk::KalmanFitter::iBarrel])/double(Nsuccess[Trk::KalmanFitter::iBarrel]); m_chiSquaredAfbNontriviality[Trk::KalmanFitter::iBarrel] - += (fabs(chi2_AFB) - m_chiSquaredAfbNontriviality[Trk::KalmanFitter::iBarrel]) - /double(Nsuccess[Trk::KalmanFitter::iBarrel]); + += (std::abs(chi2_AFB) - m_chiSquaredAfbNontriviality[Trk::KalmanFitter::iBarrel])/double(Nsuccess[Trk::KalmanFitter::iBarrel]); } - else if (fabs(eta) < 1.60) { + else if (std::abs(eta) < 1.60) { m_chiSquaredAfb[Trk::KalmanFitter::iTransi] - += (chi2_AFB - m_chiSquaredAfb[Trk::KalmanFitter::iTransi]) - /double(Nsuccess[Trk::KalmanFitter::iTransi]); + += (chi2_AFB - m_chiSquaredAfb[Trk::KalmanFitter::iTransi])/double(Nsuccess[Trk::KalmanFitter::iTransi]); m_chiSquaredAfbNontriviality[Trk::KalmanFitter::iTransi] - += (fabs(chi2_AFB) - m_chiSquaredAfbNontriviality[Trk::KalmanFitter::iTransi]) - /double(Nsuccess[Trk::KalmanFitter::iTransi]); + += (std::abs(chi2_AFB) - m_chiSquaredAfbNontriviality[Trk::KalmanFitter::iTransi])/double(Nsuccess[Trk::KalmanFitter::iTransi]); } - else if (fabs(eta) < 2.50) { + else if (std::abs(eta) < 2.50) { m_chiSquaredAfb[Trk::KalmanFitter::iEndcap] - += (chi2_AFB - m_chiSquaredAfb[Trk::KalmanFitter::iEndcap]) - /double(Nsuccess[Trk::KalmanFitter::iEndcap]); + += (chi2_AFB - m_chiSquaredAfb[Trk::KalmanFitter::iEndcap])/double(Nsuccess[Trk::KalmanFitter::iEndcap]); m_chiSquaredAfbNontriviality[Trk::KalmanFitter::iEndcap] - += (fabs(chi2_AFB) - m_chiSquaredAfbNontriviality[Trk::KalmanFitter::iEndcap]) - /double(Nsuccess[Trk::KalmanFitter::iEndcap]); + += (std::abs(chi2_AFB) - m_chiSquaredAfbNontriviality[Trk::KalmanFitter::iEndcap])/double(Nsuccess[Trk::KalmanFitter::iEndcap]); } } @@ -1558,32 +1490,28 @@ bool Trk::KalmanFitter::check_operability(int iSet, const RunOutlierRemoval& run // verbose output on the fitter data flow std::string mySet = " "; iSet==1 ? mySet = "PrepRawData" : mySet = "Measurement"; - if (m_outputlevel <= 0) { - m_log << MSG::VERBOSE << "--> entering KalmanFitter::fit(" - << mySet << "Set,TrackParameters,,)" << endmsg; - if (runOutlier) m_log << MSG::DEBUG << "-> Outlier removal switched on" << endmsg; + if (msgLvl(MSG::VERBOSE)) { + ATH_MSG_VERBOSE( "--> entering KalmanFitter::fit("<< mySet << "Set,TrackParameters,,)"); + if (runOutlier) ATH_MSG_DEBUG( "-> Outlier removal switched on" ); if (matEff!=Trk::nonInteracting) - m_log << MSG::DEBUG << "-> material effects active and switched to " - << matEff << endmsg; + ATH_MSG_DEBUG( "-> material effects active and switched to "<< matEff ); } // check RIO_OnTrack creator necessity if (m_ROTcreator.empty() && iSet==1) { - m_log << MSG::ERROR << "RIO_OnTrackCreator tool not configured, " - << "but your fit on PrepRawData will need it!" << endmsg; + ATH_MSG_ERROR( "RIO_OnTrackCreator tool not configured, but your fit on PrepRawData will need it!" ); return false; } // prevent the fitter from running into empty HitSet if (empty) { - m_log << MSG::WARNING << "attempt to fit empty vector of " - << mySet << " objects" << endmsg; + ATH_MSG_WARNING("attempt to fit empty vector of "<< mySet << " objects" ) ; return false; } // internal consistency check - if (!m_trajectory.empty() > 0) { - m_log << MSG::ERROR << "coding problem? fitter starts with uncleared internal vectors!" << endmsg; + if (!m_trajectory.empty()) { + ATH_MSG_ERROR("coding problem? fitter starts with uncleared internal vectors!" ) ; return false; } @@ -1595,7 +1523,7 @@ void Trk::KalmanFitter::callValidation( int iterationIndex, const Trk::ParticleHypothesis matEffects, FitterStatusCode fitStatCode ) const { - m_log << MSG::DEBUG << "call validation for track iteration " << iterationIndex << "with status " << fitStatCode.getCode() << endmsg; + ATH_MSG_DEBUG( "call validation for track iteration " << iterationIndex << "with status " << fitStatCode.getCode() ); // extrapolate to perigee at origin for validation data const Trk::PerigeeSurface perSurf; // default perigee at origin const Trk::TrackParameters* nearestParam = 0; @@ -1624,8 +1552,7 @@ void Trk::KalmanFitter::callValidation( int iterationIndex, false, matEffects); per = dynamic_cast<const Trk::Perigee*>(perPar); } else { - m_log << MSG::WARNING - << "Perigee-making for validation failed: no useful parameters on track!" << endmsg; + ATH_MSG_WARNING("Perigee-making for validation failed: no useful parameters on track!" ); } // write validation data for iteration with index StatusCode sc = m_FitterValidationTool->writeProtoTrajectoryData(m_trajectory, iterationIndex, per, fitStatCode.getCode()); diff --git a/Tracking/TrkFitter/TrkKalmanFitter/src/KalmanSmoother.cxx b/Tracking/TrkFitter/TrkKalmanFitter/src/KalmanSmoother.cxx index aec5d2f521291fc0a46b6600717c9f26a893344f..ee9dd181296e4725c477af79cdc0ee1992c55ad9 100755 --- a/Tracking/TrkFitter/TrkKalmanFitter/src/KalmanSmoother.cxx +++ b/Tracking/TrkFitter/TrkKalmanFitter/src/KalmanSmoother.cxx @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration */ ////////////////////////////////////////////////////////////////// @@ -29,6 +29,8 @@ #include "TrkToolInterfaces/IUpdator.h" #include "TrkFitterInterfaces/IDynamicNoiseAdjustor.h" #include "TrkDetDescrInterfaces/IAlignableSurfaceProvider.h" +#include <sstream> +#include <iomanip> // InterfaceID // const InterfaceID& Trk::KalmanSmoother::interfaceID() { @@ -92,33 +94,36 @@ StatusCode Trk::KalmanSmoother::finalize() { delete m_utility; if (msgLvl(MSG::INFO)) { - ATH_MSG_INFO (" Fitter statistics for " << name() ); + int iw=9; - - std::cout << "-------------------------------------------------------------------------------" << std::endl; - std::cout << " track fits by eta range ------All---Barrel---Trans.-- Endcap-- " << std::endl; - std::vector<std::string> statusNames(0); - - statusNames.push_back(" Number of smoother iterations :"); - statusNames.push_back(" Number of successful iterations :"); - statusNames.push_back(" fits using straight track model :"); - statusNames.push_back(" Number of calls with bad input :"); - statusNames.push_back(" Number of update failures :"); - statusNames.push_back(" Number of fail. getting fit qual:"); - statusNames.push_back(" Number of missing covariances :"); - statusNames.push_back(" Number of extrapolation failures:"); - statusNames.push_back(" extrapol fail with low momentum :"); - statusNames.push_back(" failed state combinations :"); - statusNames.push_back(" fits w/ weakly constrained forw.:"); - statusNames.push_back(" forw pars outside surface bounds:"); - for (unsigned int i=0; i<statusNames.size(); i++) { - std::cout << (statusNames[i]) << std::setiosflags(std::ios::dec) << std::setw(iw) - << (m_fitStatistics[i])[iAll] << std::setiosflags(std::ios::dec) << std::setw(iw) - << (m_fitStatistics[i])[iBarrel] << std::setiosflags(std::ios::dec) << std::setw(iw) - << (m_fitStatistics[i])[iTransi] << std::setiosflags(std::ios::dec) << std::setw(iw) - << (m_fitStatistics[i])[iEndcap] << std::endl; + std::stringstream ss; + ss << "-------------------------------------------------------------------------------" << std::endl; + ss << " track fits by eta range ------All---Barrel---Trans.-- Endcap-- " << std::endl; + std::vector<std::string> statusNames{ + " Number of smoother iterations :", + " Number of successful iterations :", + " fits using straight track model :", + " Number of calls with bad input :", + " Number of update failures :", + " Number of fail. getting fit qual:", + " Number of missing covariances :", + " Number of extrapolation failures:", + " extrapol fail with low momentum :", + " failed state combinations :", + " fits w/ weakly constrained forw.:", + " forw pars outside surface bounds:", + }; + size_t idx{0}; + for (const auto & thisName: statusNames) { + ss << thisName << std::setiosflags(std::ios::dec) << std::setw(iw) + << (m_fitStatistics[idx])[iAll] << std::setiosflags(std::ios::dec) << std::setw(iw) + << (m_fitStatistics[idx])[iBarrel] << std::setiosflags(std::ios::dec) << std::setw(iw) + << (m_fitStatistics[idx])[iTransi] << std::setiosflags(std::ios::dec) << std::setw(iw) + << (m_fitStatistics[idx])[iEndcap] << "\n"; + idx++; } - std::cout << "-------------------------------------------------------------------------------" << std::endl; + ss << "-------------------------------------------------------------------------------\n"; + ATH_MSG_INFO (" Fitter statistics for " << name() <<"\n"<<ss.str()); } ATH_MSG_INFO ("finalize() successful in " << name()); return StatusCode::SUCCESS;