8#include "GaudiKernel/RenounceToolInputsVisitor.h"
9#include "GaudiKernel/ToolVisitor.h"
23 (track.trackParameters()->front()->pT() >
m_pTminBrem) and
37 auto visitor = [
this](
const IAlgTool* tool) {
38 const AlgTool* alg_tool =
dynamic_cast<const AlgTool*
>(tool);
39 for (Gaudi::DataHandle* handle : alg_tool->inputHandles()) {
40 this->
msg(MSG::DEBUG) <<
" input Handle " << tool->name() <<
" . "
41 << handle->objKey() <<
endmsg;
43 for (
const auto& elm : alg_tool->inputDataObjs()) {
45 <<
" input object " << tool->name() <<
" . " << elm.key() <<
endmsg;
49 ToolVisitor::visit(
tools(), visitor);
53 auto logger = RenounceToolInputsVisitor::createLogger(
54 [
this](
const std::string_view& tool_name,
const std::string_view& key) {
56 <<
" Renounce " << tool_name <<
" . " << key <<
endmsg;
64 ToolVisitor::visit(
tools(), visitor);
67 return StatusCode::SUCCESS;
72 const EventContext& ctx)
const {
76 if (!splitProbContainerIn.
isValid()) {
77 ATH_MSG_ERROR(
"Failed to get input cluster split probability container "
81 std::unique_ptr<Trk::ClusterSplitProbabilityContainer> newSplitProbContainer(
83 ? std::make_unique<Trk::ClusterSplitProbabilityContainer>(
84 *splitProbContainerIn)
85 : std::make_unique<Trk::ClusterSplitProbabilityContainer>());
87 splitProbContainerHandle;
89 splitProbContainerHandle =
92 if (splitProbContainerHandle.
record(std::move(newSplitProbContainer))
95 "Failed to record output cluster split probability container "
99 return {splitProbContainerHandle.
ptr(),
104 return {newSplitProbContainer.release(),
119 int subtrackId)
const {
120 std::unique_ptr<Trk::Track> newTrack;
125 newTrack.reset(
refitPrds(track, prdToTrackMap, stat));
140 ATH_MSG_DEBUG(
"New track " << newTrack.get() <<
" successfully fitted from "
149 return newTrack.release();
154 std::vector<std::unique_ptr<const Trk::Track> >& trackDustbin,
155 Counter& stat,
int parentTrackId)
const {
157 std::unique_ptr<Trk::Track> atrack(in_track);
161 bool passBasicSelections =
m_scoringTool->passBasicSelections(*atrack);
162 if(passBasicSelections){
167 bool recheckBasicSel =
false;
172 m_observerTool->updateScore(parentTrackId,
static_cast<double>(score));
177 ATH_MSG_DEBUG(
"Track (" << atrack.get() <<
") has score " << score);
182 trackScoreTrackMap.emplace(
183 -score,
TrackPtr(atrack.release(), fitted, parentTrackId));
185 trackScoreTrackMap.emplace(-score,
TrackPtr(atrack.release(), fitted));
191 ATH_MSG_DEBUG(
"Track score is zero, try to recover it via brem fit");
206 trackDustbin.push_back(std::move(atrack));
213 m_observerTool->addSubTrack(newTrackId, parentTrackId, *bremTrack);
219 passBasicSelections =
m_scoringTool->passBasicSelections(*bremTrack);
220 if(passBasicSelections){
225 bool recheckBasicSel =
false;
229 m_observerTool->updateScore(newTrackId,
static_cast<double>(score));
232 trackDustbin.push_back(std::move(atrack));
236 << bremTrack.get() <<
") has score " << score);
242 m_observerTool->addSubTrack(newTrackId, parentTrackId, *bremTrack);
243 trackScoreTrackMap.emplace(
244 -score,
TrackPtr(bremTrack.release(), fitted, newTrackId));
246 trackScoreTrackMap.emplace(-score,
247 TrackPtr(bremTrack.release(), fitted));
251 ATH_MSG_DEBUG(
"Brem refit gave still track score zero, reject it");
258 stat.incrementCounterByRegion(
270 trackDustbin.push_back(std::move(atrack));
278 ATH_MSG_DEBUG(
"Track (" << track <<
") has no perigee! Try any other ?");
279 par = track->trackParameters()->front();
283 <<
") has no Track Parameters ! No refit !");
293 std::unique_ptr<Trk::Track> newTrack{};
313 newTrack->info().addPatternReco(originalInfo);
317 return newTrack.release();
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_VERBOSE(x)
std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > renounce(T &h)
bool msgLvl(const MSG::Level lvl) const
virtual bool isValid() override final
Can the handle be successfully dereferenced?
StatusCode record(std::unique_ptr< T > data)
Record a const object to the store.
pointer_type ptr()
Dereference the pointer.
AmbiguityProcessorBase(const std::string &, const std::string &, const IInterface *)
@ kNscoreZeroBremRefitFailed
@ kNscoreZeroBremRefitScoreZero
AmbiguityProcessorBase::UniqueClusterSplitProbabilityContainerPtr createAndRecordClusterSplitProbContainer(const EventContext &ctx) const
Create a new cluster splitting probability container and (optionally) record it in storegate The new ...
AmbiCounter< CounterIndex > Counter
ToolHandle< Trk::IExtendedTrackSummaryTool > m_trackSummaryTool
void addTrack(Trk::Track *in_track, const bool fitted, TrackScoreMap &trackScoreTrackMap, std::vector< std::unique_ptr< const Trk::Track > > &trackDustbin, Counter &stat, int parentTrackId) const
SG::WriteHandleKey< Trk::ClusterSplitProbabilityContainer > m_clusterSplitProbContainerOut
std::unique_ptr< Trk::ClusterSplitProbabilityContainer, void(*)(Trk::ClusterSplitProbabilityContainer *)> UniqueClusterSplitProbabilityContainerPtr
StatusCode initializeClusterSplitProbContainer()
Initialize read and write handles for ClusterSplitProbabilityContainers.
Trk::ParticleHypothesis m_particleHypothesis
virtual Trk::Track * refitPrds(const Trk::Track *track, Trk::PRDtoTrackMap &prdToTrackMap, Counter &stat) const =0
Track * refitTrack(const Trk::Track *track, Trk::PRDtoTrackMap &prdToTrackMap, Counter &stat, int trackId, int subtrackId) const
refit track
virtual std::unique_ptr< Trk::Track > fit(const Track &track, bool flag, Trk::ParticleHypothesis hypo) const =0
ToolHandle< ITrackScoringTool > m_scoringTool
Scoring tool This tool is used to 'score' the tracks, i.e.
bool m_tryBremFit
brem recovery mode with brem fit ?
std::vector< float > m_etaBounds
eta intervals for internal monitoring
const TrackParameters * getTrackParameters(const Trk::Track *track) const
virtual std::unique_ptr< Trk::Track > doBremRefit(const Trk::Track &track) const =0
std::multimap< TrackScore, TrackPtr > TrackScoreMap
SG::ReadHandleKey< Trk::ClusterSplitProbabilityContainer > m_clusterSplitProbContainerIn
bool shouldTryBremRecovery(const Trk::Track &track) const
PublicToolHandle< Trk::ITrkObserverTool > m_observerTool
Observer tool This tool is used to observe the tracks and their 'score'.
bool m_suppressHoleSearch
virtual Trk::Track * refitRots(const Trk::Track *track, Counter &stat) const
Container to associate Cluster with cluster splitting probabilities.
double pT() const
Access method for transverse momentum.
Contains information about the 'fitter' of this track.
@ BremFit
A brem fit was performed on this track.
@ TrackInCaloROI
A track in a CaloROI.
static Root::TMsgLogger logger("iLumiCalc")
std::unique_ptr< Trk::Track > createNewFitQualityTrack(const Trk::Track &track)
Ensure that the ATLAS eigen extensions are properly loaded.
ParametersBase< TrackParametersDim, Charged > TrackParameters
@ bremRefitTrackScoreZero
@ bremRefitSubtrackCreated