diff --git a/Tracking/TrkTools/TrkAmbiguityProcessor/TrkAmbiguityProcessor/dRMap.h b/Tracking/TrkTools/TrkAmbiguityProcessor/TrkAmbiguityProcessor/dRMap.h index 9593752fd29587b62729818682bdd44347a90005..42a39dcd85937e31909099adcdc2989570af6ff2 100644 --- a/Tracking/TrkTools/TrkAmbiguityProcessor/TrkAmbiguityProcessor/dRMap.h +++ b/Tracking/TrkTools/TrkAmbiguityProcessor/TrkAmbiguityProcessor/dRMap.h @@ -1,31 +1,30 @@ /* - Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration */ -/*************************************************************************** - CLASS_DEF for InDet dR map - ------------------------------ - ATLAS Collaboration - ***************************************************************************/ - -#ifndef DRMAP_H -#define DRMAP_H 1 - -//<<<<<< INCLUDES >>>>>> -#include "AthenaKernel/CLASS_DEF.h" -#include <map> -#include "InDetPrepRawData/PixelCluster.h" - -//<<<<<< PUBLIC DEFINES >>>>>> - -namespace InDet{ - - typedef std::map<const InDet::PixelCluster*, std::pair<float,float> > - DRMap; -} - -CLASS_DEF( InDet::DRMap , 193676466 , 1 ) - - - -#endif // DRMAP_H +/*************************************************************************** + CLASS_DEF for InDet dR map + ------------------------------ + ATLAS Collaboration + ***************************************************************************/ + +#ifndef DRMAP_H +#define DRMAP_H 1 + +//<<<<<< INCLUDES >>>>>> +#include "AthenaKernel/CLASS_DEF.h" +#include <map> +#include "InDetPrepRawData/PixelCluster.h" + + +namespace InDet{ + + typedef std::map<const InDet::PixelCluster*, std::pair<float,float> > + DRMap; +} + +CLASS_DEF( InDet::DRMap , 193676466 , 1 ) + + + +#endif // DRMAP_H diff --git a/Tracking/TrkTools/TrkAmbiguityProcessor/src/DenseEnvironmentsAmbiguityProcessorTool.cxx b/Tracking/TrkTools/TrkAmbiguityProcessor/src/DenseEnvironmentsAmbiguityProcessorTool.cxx index 15bdfca674fac05fe53585d09819b5f21be355cc..eaf84cf9f9bd29fccc5e4b07596c98b52857482b 100644 --- a/Tracking/TrkTools/TrkAmbiguityProcessor/src/DenseEnvironmentsAmbiguityProcessorTool.cxx +++ b/Tracking/TrkTools/TrkAmbiguityProcessor/src/DenseEnvironmentsAmbiguityProcessorTool.cxx @@ -21,6 +21,7 @@ #include "InDetPrepRawData/PixelCluster.h" #include "InDetPrepRawData/SCT_Cluster.h" #include "InDetIdentifier/PixelID.h" +#include <cmath> //TODO: to be improved bool Trk::DenseEnvironmentsAmbiguityProcessorTool::checkTrack( const Trk::Track *track) const { @@ -112,20 +113,8 @@ StatusCode Trk::DenseEnvironmentsAmbiguityProcessorTool::initialize() } ATH_CHECK( m_extrapolatorTool.retrieve()); - - sc = detStore()->retrieve(m_pixelId, "PixelID"); - if (sc.isFailure()) - { - ATH_MSG_FATAL( "Could not get PixelID helper !" ); - return StatusCode::FAILURE; - } - - sc = detStore()->retrieve(m_idHelper, "AtlasID"); - if (sc.isFailure()) - { - ATH_MSG_FATAL( "Could not get AtlasDetectorID helper" ); - return StatusCode::FAILURE; - } + ATH_CHECK( detStore()->retrieve(m_pixelId, "PixelID")); + ATH_CHECK( detStore()->retrieve(m_idHelper, "AtlasID")); // Configuration of the material effects Trk::ParticleSwitcher particleSwitch; @@ -165,7 +154,7 @@ void Trk::DenseEnvironmentsAmbiguityProcessorTool::statistics() m_stat.dump(out, m_tryBremFit); out << endmsg; } - } +} void Trk::DenseEnvironmentsAmbiguityProcessorTool::TrackStat::dump(MsgStream &out, bool try_brem_fit) const { @@ -176,7 +165,7 @@ void Trk::DenseEnvironmentsAmbiguityProcessorTool::TrackStat::dump(MsgStream &ou return fullname.substr(slashPosition, stringLength); }; // @TODO restore ios - std::streamsize ss = std::cout.precision(); + std::streamsize ss = out.precision(); int iw=9; out << "Output from "; out << parseFileName(__FILE__); @@ -303,80 +292,55 @@ void Trk::DenseEnvironmentsAmbiguityProcessorTool::addTrack(Trk::Track* track, c // @TODO create track summary for track score = m_scoringTool->score( *track, suppressHoleSearch ); - // do we accept the track ? - if (score!=0) - { + if (score!=0){ ATH_MSG_DEBUG ("Track ("<< track <<") has score "<<score); // add track to map, map is sorted small to big ! scoreTrackFitflagMap.emplace(-score, TrackPtr(track, fitted) ); return; } - // do we try to recover the track ? - if (score==0 && fitted && m_tryBremFit && + if ( fitted && m_tryBremFit && !track->info().trackProperties(Trk::TrackInfo::BremFit) && track->trackParameters()->front()->pT() > m_pTminBrem && (!m_caloSeededBrem || track->info().patternRecoInfo(Trk::TrackInfo::TrackInCaloROI))) { - ATH_MSG_DEBUG ("Track score is zero, try to recover it via brem fit"); // run track fit using electron hypothesis Trk::Track* bremTrack = fit(*track,true,Trk::electron); - - if (!bremTrack) - { + if (!bremTrack){ ATH_MSG_DEBUG ("Brem refit failed, drop track"); stat.increment_by_eta(TrackStat::kNscoreZeroBremRefitFailed,track); stat.increment_by_eta(TrackStat::kNfailedFits,track); - // clean up cleanup_tracks.push_back(std::unique_ptr<const Trk::Track>(track) ); track=nullptr; - - } - else - { + } else { if (m_trackSummaryTool.isEnabled()) { - m_trackSummaryTool->computeAndReplaceTrackSummary(*bremTrack, - &prd_to_track_map, - m_suppressHoleSearch); + m_trackSummaryTool->computeAndReplaceTrackSummary(*bremTrack,&prd_to_track_map,m_suppressHoleSearch); } - stat.increment_by_eta(TrackStat::kNgoodFits,bremTrack); - // rerun score score = m_scoringTool->score( *bremTrack, suppressHoleSearch ); - cleanup_tracks.push_back(std::unique_ptr<const Trk::Track>(track) ); track=nullptr; - // do we accept the track ? - if (score!=0) - { + if (score!=0){ ATH_MSG_DEBUG ("Brem refit successful, recovered track ("<< track <<") has score "<<score); stat.increment_by_eta(TrackStat::kNscoreZeroBremRefit,bremTrack); - // add track to map, map is sorted small to big ! scoreTrackFitflagMap.emplace( -score, TrackPtr(bremTrack, true) ); return; - } - else - { + } else { ATH_MSG_DEBUG ("Brem refit gave still track score zero, reject it"); stat.increment_by_eta(TrackStat::kNscoreZeroBremRefitScoreZero,bremTrack); - // clean up cleanup_tracks.push_back(std::unique_ptr<const Trk::Track>(bremTrack) ); } } - } - else - { + } else { ATH_MSG_DEBUG ("Track score is zero, reject it"); - stat.increment_by_eta(TrackStat::kNscoreZero,track); - // @TODO can delete this track ? cleanup_tracks.push_back(std::unique_ptr<const Trk::Track>(track) ); } @@ -414,7 +378,7 @@ void Trk::DenseEnvironmentsAmbiguityProcessorTool::solveTracks(const TracksScore std::unique_ptr<Trk::Track> cleanedTrack; auto [cleanedTrack_tmp, keep_orig] = m_selectionTool->getCleanedOutTrack( atrack.track() , -ascore, prd_to_track_map); cleanedTrack.reset(cleanedTrack_tmp); - ATH_MSG_DEBUG ("--- cleand next track "<< cleanedTrack.get()); + ATH_MSG_DEBUG ("--- cleaned next track "<< cleanedTrack.get()); // cleaned track is input track and fitted @@ -702,8 +666,8 @@ void Trk::DenseEnvironmentsAmbiguityProcessorTool::storeTrkDistanceMapdR( TrackC } else{ ATH_MSG_VERBOSE("Distance dR map recorded as '" << m_dRMap.key() <<"'."); } - - for (auto track : tracks){ + constexpr double twoPi = 2.*M_PI; + for (const auto & track : tracks){ bool refit = false; const DataVector<const TrackStateOnSurface>* tsosVec = track->trackStateOnSurfaces(); if(!tsosVec){ @@ -711,17 +675,16 @@ void Trk::DenseEnvironmentsAmbiguityProcessorTool::storeTrkDistanceMapdR( TrackC continue; } ATH_MSG_VERBOSE("---> Looping over TSOS's to allow for cluster updates: "<< tsosVec->size() ); - for(auto tsos : *tsosVec){ + for(const auto & tsos : *tsosVec){ const MeasurementBase* measurement = tsos->measurementOnTrack(); if(!measurement || ! tsos->trackParameters()){ ATH_MSG_VERBOSE("---- TSOS has either no measurement or parameters: "<< measurement << " " << tsos->trackParameters() ); continue; } - if(!tsos->type(Trk::TrackStateOnSurface::Measurement)) {continue;} - auto globalPosition = measurement->globalPosition(); - double radius = sqrt(globalPosition[0]*globalPosition[0]+globalPosition[1]*globalPosition[1]); + const double radius = std::sqrt(globalPosition[0]*globalPosition[0]+globalPosition[1]*globalPosition[1]); + const double invRadius{1./radius}; // get the associated prd const Trk::RIO_OnTrack* rio = dynamic_cast<const Trk::RIO_OnTrack*> ( measurement ); if(!rio){ @@ -737,37 +700,35 @@ void Trk::DenseEnvironmentsAmbiguityProcessorTool::storeTrkDistanceMapdR( TrackC double yOnPix = trackParams->position().y(); double zOnPix = trackParams->position().z(); - - double Pi = acos(0); - double twoPi = 2.*Pi; - + // now, find closest track - double dr = 0.; double mindR = 99999999.; double mindX = 99999999.; double mindZ = 99999999.; - - for (auto track2 : tracks){ + // + const double eta1{track->perigeeParameters()->momentum().eta()}; + const double phi1{track->perigeeParameters()->momentum().phi()}; + for (const auto & track2 : tracks){ if(track==track2) continue; - float dEta = track->perigeeParameters()->momentum().eta() - track2->perigeeParameters()->momentum().eta(); - float dPhi2 = track->perigeeParameters()->momentum().phi() - track2->perigeeParameters()->momentum().phi(); - dr = sqrtf(dEta*dEta + dPhi2*dPhi2); + float dEta = eta1 - track2->perigeeParameters()->momentum().eta(); + float dPhi2 = phi1 - track2->perigeeParameters()->momentum().phi(); + double dr = std::sqrt(dEta*dEta + dPhi2*dPhi2); if(dr>0.4) continue; //extrapolation to pixel hit radius const TrackParameters * track2Params = m_extrapolatorTool->extrapolate(*track2,iblSurface); - double y2OnPix = track2Params->position().y(); - double z2OnPix = track2Params->position().z(); + const double y2OnPix = track2Params->position().y(); + const double z2OnPix = track2Params->position().z(); - float dPhi = asin(yOnPix/radius) -asin(y2OnPix/radius); - if (dPhi >= Pi) dPhi -= twoPi; - if (dPhi < -Pi) dPhi += twoPi; + float dPhi = std::asin(yOnPix*invRadius) - std::asin(y2OnPix*invRadius); + if (dPhi >= M_PI) dPhi -= twoPi; + if (dPhi < -M_PI) dPhi += twoPi; - double dx = fabs(radius*dPhi); - double dz = fabs(zOnPix - z2OnPix); + const double dx = std::abs(radius*dPhi); + const double dz = std::abs(zOnPix - z2OnPix); if(dx>mindX && dz>mindZ) continue; - dr = sqrt(dx*dx + dz*dz); + dr = std::sqrt(dx*dx + dz*dz); if(dr<mindR && dr > 1.e-4){ mindR = dr; @@ -781,9 +742,8 @@ void Trk::DenseEnvironmentsAmbiguityProcessorTool::storeTrkDistanceMapdR( TrackC ret = dRMapHandle->insert ( std::pair<const InDet::PixelCluster*,std::pair<float,float> >(pixel,min)); // if we already have a dR for this prd, we update it, if current value is smaller if (!ret.second) { - InDet::DRMap::iterator it; - it = dRMapHandle->find(pixel); - if(sqrt(pow((*it).second.first,2)+pow((*it).second.second,2)) > (float)mindR) { + InDet::DRMap::iterator it{dRMapHandle->find(pixel)}; + if(std::sqrt(std::pow((*it).second.first,2)+std::pow((*it).second.second,2)) > (float)mindR) { (*it).second.first = (float)mindX; (*it).second.second = (float)mindZ; } @@ -830,14 +790,13 @@ bool Trk::DenseEnvironmentsAmbiguityProcessorTool::isHadCaloCompatible(const Trk double E = Tp.eta(); for(; f!=fe; ++f) { - double df = fabs(F-(*f)); - if(df > pi ) df = fabs(pi2-df); + double df = std::abs(F-(*f)); + if(df > pi ) df = std::abs(pi2-df); if(df < m_phiWidth) { //Correct eta of cluster to take into account the z postion of the track double newZ = *z - Tp.position().z(); - double newEta = atanh( newZ / sqrt( (*r) * (*r) + newZ*newZ ) ); - - double de = fabs(E-newEta); + double newEta = std::atanh( newZ / std::sqrt( (*r) * (*r) + newZ*newZ ) ); + double de = std::abs(E-newEta); if(de < m_etaWidth) return true; } ++e; diff --git a/Tracking/TrkTools/TrkAmbiguityProcessor/src/DenseEnvironmentsAmbiguityScoreProcessorTool.cxx b/Tracking/TrkTools/TrkAmbiguityProcessor/src/DenseEnvironmentsAmbiguityScoreProcessorTool.cxx index 7b96be420d1981a88ddb13ac2b48b3130bd6703f..2cde819f306115493f2c991225e3bed0dc2f13f1 100644 --- a/Tracking/TrkTools/TrkAmbiguityProcessor/src/DenseEnvironmentsAmbiguityScoreProcessorTool.cxx +++ b/Tracking/TrkTools/TrkAmbiguityProcessor/src/DenseEnvironmentsAmbiguityScoreProcessorTool.cxx @@ -101,7 +101,6 @@ void Trk::DenseEnvironmentsAmbiguityScoreProcessorTool::TrackStat::dump(MsgStrea auto stringLength = dotPosition - slashPosition; return fullname.substr(slashPosition, stringLength); }; - // @TODO restore ios std::streamsize ss = out.precision(); int iw=9; out << "Output from "; @@ -193,16 +192,15 @@ void Trk::DenseEnvironmentsAmbiguityScoreProcessorTool::addNewTracks(std::vector for(const Track* a_track : *tracks) { ATH_MSG_DEBUG ("Processing track candidate "<<a_track); stat.increment_by_eta(TrackStat::kNcandidates,a_track); // @TODO should go to the score processor - + // only fitted tracks get hole search, input is not fitted float score = m_scoringTool->score( *a_track, true); ATH_MSG_DEBUG ("Track Score is "<< score); // veto tracks with score 0 bool reject = score==0; - - // double track rejection - if (!reject) { + if (reject){ stat.increment_by_eta(TrackStat::kNcandScoreZero,a_track); + } else {// double track rejection std::vector<const Trk::PrepRawData*> prds = m_assoTool->getPrdsOnTrack(*prd_to_track_map, *a_track); // convert to set PrdSignature prdSig( prds.begin(),prds.end() ); @@ -218,7 +216,6 @@ void Trk::DenseEnvironmentsAmbiguityScoreProcessorTool::addNewTracks(std::vector if (!reject) { // add track to map, map is sorted small to big ! set if fitted - ATH_MSG_VERBOSE ("Track ("<< a_track <<" --> "<< *a_track << ") has score "<<score); trackScoreTrackMap->push_back( std::make_pair(a_track, -score)); } diff --git a/Tracking/TrkTools/TrkAmbiguityProcessor/src/SimpleAmbiguityProcessorTool.cxx b/Tracking/TrkTools/TrkAmbiguityProcessor/src/SimpleAmbiguityProcessorTool.cxx index 5abd655dd347a23abf10216a8c4d5eb609201f47..1366f6274c322bb8367915945fcd6dc862ba65f2 100644 --- a/Tracking/TrkTools/TrkAmbiguityProcessor/src/SimpleAmbiguityProcessorTool.cxx +++ b/Tracking/TrkTools/TrkAmbiguityProcessor/src/SimpleAmbiguityProcessorTool.cxx @@ -288,81 +288,54 @@ void Trk::SimpleAmbiguityProcessorTool::addNewTracks(const std::vector<const Tra Trk::SimpleAmbiguityProcessorTool::Counter &stat) const { using namespace std; - DEBUG_CODE( findTrueTracks(&tracks) ); - ATH_MSG_DEBUG ("Number of tracks at Input: "<<tracks.size()); - /** signature map to drop double track. */ PrdSignatureSet prdSigSet; - for(const Track *a_track : tracks) { - - DEBUG_CODE( resetTrackOutliers() ); - - ATH_MSG_DEBUG ("Processing track candidate "<<a_track); - // statistics - increment_by_eta(Counter::kNcandidates,stat,a_track); - - bool reject = false; - - // only fitted tracks get hole search, input is not fitted - TrackScore score = m_scoringTool->score( *a_track, true); - - DEBUG_CODE( setBarcodeStats(a_track,score) ); - // veto tracks with score 0 - if (score==0) { - ATH_MSG_DEBUG ("Candidate score is zero, reject it"); - // statistic - increment_by_eta(Counter::kNcandScoreZero,stat,a_track); - - reject = true; - - DEBUG_CODE(fillBadTrack(a_track,prd_to_track_map) ); - - } else { - - ATH_MSG_DEBUG ("Track Score is "<< score); - - // double track rejection - if (m_dropDouble) { - std::vector<const Trk::PrepRawData*> prds = m_assoTool->getPrdsOnTrack(prd_to_track_map, *a_track); - - // unfortunately PrepRawDataSet is not a set ! - PrdSignature prdSig; - prdSig.insert( prds.begin(),prds.end() ); - - // we try to insert it into the set, if we fail (pair.second), it then exits already - if ( !(prdSigSet.insert(prdSig)).second ) { - - ATH_MSG_DEBUG ("Double track, reject it !"); - // statistic - increment_by_eta(Counter::kNcandDouble,stat,a_track); - - reject = true; - - DEBUG_CODE(fillDuplicateTrack(a_track) ); - } else { - ATH_MSG_DEBUG ("Insert new track in PrdSignatureSet"); - } - } - } - - if (!reject) { - - // DEBUG_CODE( associateToOrig ( new_track, a_track) ); - - // add track to map, map is sorted small to big ! set if fitted - ATH_MSG_VERBOSE ("Track ("<< a_track <<") has score "<<score); - TrackPtr ptr(a_track); - if (!m_forceRefit) ptr.forceFitted(); - trackScoreTrackMap.insert( make_pair(-score,std::move(ptr)) ); - - // DEBUG_CODE( keepTrackOfTracks(a_track,new_track) ); - + DEBUG_CODE( resetTrackOutliers() ); + ATH_MSG_DEBUG ("Processing track candidate "<<a_track); + // statistics + increment_by_eta(Counter::kNcandidates,stat,a_track); + bool reject = false; + // only fitted tracks get hole search, input is not fitted + TrackScore score = m_scoringTool->score( *a_track, true); + DEBUG_CODE( setBarcodeStats(a_track,score) ); + // veto tracks with score 0 + if (score==0) { + ATH_MSG_DEBUG ("Candidate score is zero, reject it"); + // statistic + increment_by_eta(Counter::kNcandScoreZero,stat,a_track); + reject = true; + DEBUG_CODE(fillBadTrack(a_track,prd_to_track_map) ); + } else { + ATH_MSG_DEBUG ("Track Score is "<< score); + // double track rejection + if (m_dropDouble) { + std::vector<const Trk::PrepRawData*> prds = m_assoTool->getPrdsOnTrack(prd_to_track_map, *a_track); + // unfortunately PrepRawDataSet is not a set ! + PrdSignature prdSig; + prdSig.insert( prds.begin(),prds.end() ); + // we try to insert it into the set, if we fail (pair.second), it then exits already + if ( !(prdSigSet.insert(prdSig)).second ) { + ATH_MSG_DEBUG ("Double track, reject it !"); + // statistic + increment_by_eta(Counter::kNcandDouble,stat,a_track); + reject = true; + DEBUG_CODE(fillDuplicateTrack(a_track) ); + } else { + ATH_MSG_DEBUG ("Insert new track in PrdSignatureSet"); + } } } - + if (!reject) { + // add track to map, map is sorted small to big ! set if fitted + ATH_MSG_VERBOSE ("Track ("<< a_track <<") has score "<<score); + TrackPtr ptr(a_track); + if (!m_forceRefit) ptr.forceFitted(); + trackScoreTrackMap.insert( make_pair(-score,std::move(ptr)) ); + } + } ATH_MSG_DEBUG ("Number of tracks in map:"<<trackScoreTrackMap.size()); DEBUG_CODE( countTrueTracksInMap( trackScoreTrackMap ) ); } @@ -390,81 +363,58 @@ void Trk::SimpleAmbiguityProcessorTool::addTrack(Trk::Track* in_track, score = m_scoringTool->score( *atrack, suppressHoleSearch ); // do we accept the track ? - if (score!=0) - { - ATH_MSG_DEBUG ("Track ("<< atrack.get() <<") has score "<<score); - // statistic - increment_by_eta(Counter::kNscoreOk,stat,atrack.get()); - - // add track to map, map is sorted small to big ! - trackScoreTrackMap.insert( make_pair(-score, TrackPtr(atrack.release(), fitted)) ); - - return; - } - + if (score!=0){ + ATH_MSG_DEBUG ("Track ("<< atrack.get() <<") has score "<<score); + // statistic + increment_by_eta(Counter::kNscoreOk,stat,atrack.get()); + // add track to map, map is sorted small to big ! + trackScoreTrackMap.insert( make_pair(-score, TrackPtr(atrack.release(), fitted)) ); + return; + } + //track score is zero here... // do we try to recover the track ? - if (score==0 && fitted && m_tryBremFit && - !atrack->info().trackProperties(Trk::TrackInfo::BremFit) && - atrack->trackParameters()->front()->pT() > m_pTminBrem && - (!m_caloSeededBrem || atrack->info().patternRecoInfo(Trk::TrackInfo::TrackInCaloROI))) - { - - ATH_MSG_DEBUG ("Track score is zero, try to recover it via brem fit"); - - // run track fit using electron hypothesis - std::unique_ptr<Trk::Track> bremTrack( m_fitterTool->fit(*atrack,true,Trk::electron) ); - - if (!bremTrack) - { - ATH_MSG_DEBUG ("Brem refit failed, drop track"); - // statistic - increment_by_eta(Counter::kNscoreZeroBremRefitFailed,stat,atrack.get()); - increment_by_eta(Counter::kNfailedFits,stat,atrack.get()); - - // clean up - cleanup_tracks.push_back(std::move(atrack)); - - } - else - { - + if (fitted && m_tryBremFit && + !atrack->info().trackProperties(Trk::TrackInfo::BremFit) && + atrack->trackParameters()->front()->pT() > m_pTminBrem && + (!m_caloSeededBrem || atrack->info().patternRecoInfo(Trk::TrackInfo::TrackInCaloROI))){ + ATH_MSG_DEBUG ("Track score is zero, try to recover it via brem fit"); + // run track fit using electron hypothesis + std::unique_ptr<Trk::Track> bremTrack( m_fitterTool->fit(*atrack,true,Trk::electron) ); + if (!bremTrack){ + ATH_MSG_DEBUG ("Brem refit failed, drop track"); + // statistic + increment_by_eta(Counter::kNscoreZeroBremRefitFailed,stat,atrack.get()); + increment_by_eta(Counter::kNfailedFits,stat,atrack.get()); + // clean up + cleanup_tracks.push_back(std::move(atrack)); + } else { // statistic - increment_by_eta(Counter::kNgoodFits,stat,bremTrack.get()); - + increment_by_eta(Counter::kNgoodFits,stat,bremTrack.get()); // rerun score score = m_scoringTool->score( *bremTrack, suppressHoleSearch ); - // do we accept the track ? - if (score!=0) - { - ATH_MSG_DEBUG ("Brem refit successful, recovered track ("<< atrack.get() <<") has score "<<score); + if (score!=0){ + ATH_MSG_DEBUG ("Brem refit successful, recovered track ("<< atrack.get() <<") has score "<<score); // statistics increment_by_eta(Counter::kNscoreZeroBremRefit,stat,bremTrack.get()); - // add track to map, map is sorted small to big ! trackScoreTrackMap.insert( make_pair(-score, TrackPtr(bremTrack.release(), fitted)) ); return; - } - else - { + } else { ATH_MSG_DEBUG ("Brem refit gave still track score zero, reject it"); // statistic increment_by_eta(Counter::kNscoreZeroBremRefitScoreZero,stat,bremTrack.get()); - } - cleanup_tracks.push_back(std::move(atrack)); - } - } - else - { - ATH_MSG_DEBUG ("Track score is zero, reject it"); - // statistic - increment_by_eta(Counter::kNscoreZero,stat,atrack.get()); - - DEBUG_CODE( rejectedTrack(atrack.get(), prd_to_track_map) ); cleanup_tracks.push_back(std::move(atrack)); - } + } + } else { + ATH_MSG_DEBUG ("Track score is zero, reject it"); + // statistic + increment_by_eta(Counter::kNscoreZero,stat,atrack.get()); + DEBUG_CODE( rejectedTrack(atrack.get(), prd_to_track_map) ); + cleanup_tracks.push_back(std::move(atrack)); } +} //================================================================================================== TrackCollection *Trk::SimpleAmbiguityProcessorTool::solveTracks(TrackScoreMap& trackScoreTrackMap, @@ -559,19 +509,15 @@ TrackCollection *Trk::SimpleAmbiguityProcessorTool::solveTracks(TrackScoreMap& t ATH_MSG_DEBUG ("Track "<< atrack.track() << " is excluded, no subtrack, reject"); // statistic increment_by_eta(Counter::kNnoSubTrack,stat,atrack.track()); - - if (atrack.newTrack()) { - cleanup_tracks.push_back( std::unique_ptr<Trk::Track>(atrack.release()) ); - } + if (atrack.newTrack()) { + cleanup_tracks.push_back( std::unique_ptr<Trk::Track>(atrack.release()) ); + } // don't forget to drop track from map } } ATH_MSG_DEBUG ("Finished, number of track on output: "<<final_tracks->size()); - - DEBUG_CODE( eventSummary(final_tracks) ); - return final_tracks.release(); } diff --git a/Tracking/TrkTools/TrkAmbiguityProcessor/src/TrackScoringTool.cxx b/Tracking/TrkTools/TrkAmbiguityProcessor/src/TrackScoringTool.cxx index f7bf61dde11fd830fe1c394e52d016b490cbea71..73207c3fc786dbb696028c7cb9f8abf49acc143f 100644 --- a/Tracking/TrkTools/TrkAmbiguityProcessor/src/TrackScoringTool.cxx +++ b/Tracking/TrkTools/TrkAmbiguityProcessor/src/TrackScoringTool.cxx @@ -12,8 +12,7 @@ #include "TrkTrackSummary/TrackSummary.h" #include "CLHEP/GenericFunctions/CumulativeChiSquare.hh" -#include <cassert> -#include <vector> +#include <cmath> //for log10 Trk::TrackScoringTool::TrackScoringTool(const std::string& t, const std::string& n, @@ -61,25 +60,15 @@ Trk::TrackScoringTool::~TrackScoringTool() StatusCode Trk::TrackScoringTool::initialize() { - StatusCode sc = AlgTool::initialize(); - if (sc.isFailure()) return sc; - - sc = m_trkSummaryTool.retrieve(); - if (sc.isFailure()) - { - msg(MSG::FATAL)<< "Failed to retrieve tool " << m_trkSummaryTool << endmsg; - return sc; - } - else - msg(MSG::INFO)<< "Retrieved tool " << m_trkSummaryTool << endmsg; - + ATH_CHECK( AlgTool::initialize()); + ATH_CHECK( m_trkSummaryTool.retrieve()); + ATH_MSG_VERBOSE("Retrieved tool " << m_trkSummaryTool ); return StatusCode::SUCCESS; } StatusCode Trk::TrackScoringTool::finalize() { - StatusCode sc = AlgTool::finalize(); - return sc; + return AlgTool::finalize(); } Trk::TrackScore Trk::TrackScoringTool::score( const Track& track, const bool suppressHoleSearch ) const @@ -97,20 +86,17 @@ Trk::TrackScore Trk::TrackScoringTool::score( const Track& track, const bool sup Trk::TrackScore Trk::TrackScoringTool::simpleScore( const Track& track, const TrackSummary& trackSummary ) const { - - // --- reject bad tracks if (track.fitQuality() && track.fitQuality()->numberDoF() < 0) { - msg(MSG::VERBOSE)<<"numberDoF < 0, reject it"<<endmsg; + ATH_MSG_VERBOSE("numberDoF < 0, reject it"); return TrackScore(0); } - // --- now start scoring TrackScore score(100); // score of 100 per track // --- prob(chi2,NDF), protect for chi2<0 if (track.fitQuality()!=nullptr && track.fitQuality()->chiSquared() > 0 && track.fitQuality()->numberDoF() > 0) { - score+= log10(1.0-Genfun::CumulativeChiSquare(track.fitQuality()->numberDoF())(track.fitQuality()->chiSquared())); + score+= std::log10(1.0-Genfun::CumulativeChiSquare(track.fitQuality()->numberDoF())(track.fitQuality()->chiSquared())); } // --- summary score analysis @@ -120,7 +106,7 @@ Trk::TrackScore Trk::TrackScoringTool::simpleScore( const Track& track, const Tr //value is -1 if undefined. if (value>0) { score+=m_summaryTypeScore[i]*value; - msg(MSG::VERBOSE)<<"\tType ["<<i<<"], value \t= "<<value<<"], score \t="<<score<<endmsg; + ATH_MSG_VERBOSE("\tType ["<<i<<"], value \t= "<<value<<"], score \t="<<score); } } return score;