Skip to content
Snippets Groups Projects
Commit 0b63a2d2 authored by Vakhtang Tsulaia's avatar Vakhtang Tsulaia
Browse files

Merge branch 'MG_MemLeaks_VertexIterativeMergingTool' into 'main'

[ATLASDPD-2027] fix memleak in VertexIterativeFitMergingTool

See merge request !69573
parents 233bbc20 d567b66a
No related branches found
No related tags found
42 merge requests!78241Draft: FPGATrackSim: GenScan code refactor,!78236Draft: Switching Streams https://its.cern.ch/jira/browse/ATR-27417,!78056AFP monitoring: new synchronization and cleaning,!78041AFP monitoring: new synchronization and cleaning,!77990Updating TRT chip masks for L1TRT trigger simulation - ATR-28372,!77733Draft: add new HLT NN JVT, augmented with additional tracking information,!77731Draft: Updates to ZDC reconstruction,!77728Draft: updates to ZDC reconstruction,!77522Draft: sTGC Pad Trigger Emulator,!76725ZdcNtuple: Fix cppcheck warning.,!76611L1CaloFEXByteStream: Fix out-of-bounds array accesses.,!76475Punchthrough AF3 implementation in FastG4,!76474Punchthrough AF3 implementation in FastG4,!76343Draft: MooTrackBuilder: Recalibrate NSW hits in refine method,!75729New implementation of ZDC nonlinear FADC correction.,!75703Draft: Update to HI han config for HLT jets,!75184Draft: Update file heavyions_run.config,!74430Draft: Fixing upper bound for Delayed Jet Triggers,!73963Changing the path of the histograms to "Expert" area,!73875updating ID ART reference plots,!73874AtlasCLHEP_RandomGenerators: Fix cppcheck warnings.,!73449Add muon detectors to DarkJetPEBTLA partial event building,!73343Draft: [TrigEgamma] Add photon ringer chains on bootstrap mechanism,!72972Update L1Calo Jet Trigger Efficiency Monitoring algorithm,!72336Fixed TRT calibration crash,!72176Draft: Improving L1TopoOnline chain that now gets no-empty plots. Activating it by default,!72012Draft: Separate JiveXMLConfig.py into Config files,!71876Fix MET trigger name in MissingETMonitoring,!71820Draft: Adding new TLA End-Of-Fill (EOF) chains and removing obsolete DIPZ chains,!71279Draft: ATR-29330: Move L1_4J15 and the HLT chains seeded by it in the MC Menu,!70990Updates to pulse analysis to support new 2016 p+Pb analysis and 2023 Pb+Pb analysis,!70948[TrigEGam] Adding egamma chains to be monitored,!70777Draft: sTGC offline raw monitoring: strip efficiency re-implementation,!70654Update JetMonitoringStandard.py,!70442Draft: Harmonize output folders+collections in ID Alignment monitoring and update DQM han config,!70269Draft: Initial Preparations for mc23e mu-distribution,!70047More test chains for delayed jets,!69944Draft: Avoid additional ONNX thread spawning for FastCaloSim,!69935Draft: New efficiency DQ criteria for HLTmuon hanconfig,!69795Some updates to the LArSuperCell Monitoring...,!69643Draft: added back ditau chain for commissioning,!69573[ATLASDPD-2027] fix memleak in VertexIterativeFitMergingTool
// This is -*- c++ -*-
/*
Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
*/
#ifndef PROMPT_VERTEXITERATIVEFITMERGINGTOOL_H
......@@ -149,6 +149,17 @@ namespace Prompt
const VtxType vtxType,
std::vector<TwoTrackVtx> &others
);
/*
Second signature for the iterative vertex fit.
This one assumes the seed is owned by the caller.
Used to prevent memory leaks within the recursion step
*/
xAOD::Vertex* fitSeedVertexCluster(
const FittingInput &input,
std::unique_ptr<xAOD::Vertex> & seedVtx,
const VtxType vtxType,
std::vector<TwoTrackVtx> &others
);
std::unique_ptr<xAOD::Vertex> fitSeedPlusOtherVertex(
const FittingInput &input,
......
......@@ -459,14 +459,10 @@ xAOD::Vertex* Prompt::VertexIterativeFitMergingTool::fitSeedVertexCluster(
/*
Found nearby vertex - fit merged vertex
We release the unique_ptr here because we don't want
to deal with ownership semantics in the recursive function.
The caller will re-capture the vertex in a unique_ptr.
*/
xAOD::Vertex* candVtx = fitSeedPlusOtherVertex(
std::unique_ptr<xAOD::Vertex> candVtx =fitSeedPlusOtherVertex(
input, seedVtx, currVtx, vtxType
).release();
);
if(!candVtx) {
//
......@@ -479,7 +475,7 @@ xAOD::Vertex* Prompt::VertexIterativeFitMergingTool::fitSeedVertexCluster(
return fitSeedVertexCluster(input, std::move(seedVtx), vtxType, others);
}
const double probCand = getVertexFitProb(candVtx);
const double probCand = getVertexFitProb(candVtx.get());
const double probSeed = getVertexFitProb(seedVtx);
double probCandOverSeed = -1.0;
......@@ -488,8 +484,8 @@ xAOD::Vertex* Prompt::VertexIterativeFitMergingTool::fitSeedVertexCluster(
probCandOverSeed = probCand/probSeed;
}
const double distToSeed = getDistance(seedVtx, candVtx);
const double distToCurr = getDistance(currVtx, candVtx);
const double distToSeed = getDistance(seedVtx, candVtx.get());
const double distToCurr = getDistance(currVtx, candVtx.get());
fillTH1(m_histNewVtxFitChi2, candVtx->chiSquared());
fillTH1(m_histNewVtxFitProb, probCand);
......@@ -508,13 +504,13 @@ xAOD::Vertex* Prompt::VertexIterativeFitMergingTool::fitSeedVertexCluster(
str << " dist to seed=" << distToSeed << ", probCandOverSeed=" << probCandOverSeed << std::endl
<< " seed: " << vtxAsStr(seedVtx, false) << std::endl
<< " curr: " << vtxAsStr(currVtx, true)
<< " cand: " << vtxAsStr(candVtx, true)
<< " cand: " << vtxAsStr(candVtx.get(), true)
<< "fitSeedVertexCluster - finished" << std::endl
<< "---------------------------------------------------------------------------" << std::endl;
if(!(passVertexSelection(candVtx) && probCandOverSeed > m_minCandOverSeedFitProbRatio)) {
if(!(passVertexSelection(candVtx.get()) && probCandOverSeed > m_minCandOverSeedFitProbRatio)) {
//
// New fitted merged vertex failed selection
//
......@@ -548,6 +544,27 @@ xAOD::Vertex* Prompt::VertexIterativeFitMergingTool::fitSeedVertexCluster(
return fitSeedVertexCluster(input, candVtx, vtxType, others);
}
// this signature is only called recursively, if a merged vertex candidate has been
// found. Ensures that we release the final merged candidate to hand it
// back to the original caller.
xAOD::Vertex* Prompt::VertexIterativeFitMergingTool::fitSeedVertexCluster(
const FittingInput &input,
std::unique_ptr<xAOD::Vertex> & seedVtx,
const VtxType vtxType,
std::vector<TwoTrackVtx> &others
){
// remember the seed vertex before the call
xAOD::Vertex* originalSeed = seedVtx.get();
// call the original signature
xAOD::Vertex* iterationResult = fitSeedVertexCluster(input,seedVtx.get(), vtxType,others);
// if the iteration has finished (it is returning the seed), release the seed vertex.
// This will be re-captured by the top level caller after exiting the recursion stack.
if (iterationResult == originalSeed) return seedVtx.release();
// otherwise, return the iteration result. The seed vertex will be deleted
// when the call stack unwinds.
else return iterationResult;
}
unsigned Prompt::VertexIterativeFitMergingTool::removeMerged2TrackVertexes(
const xAOD::Vertex *mergedVtx,
std::vector<TwoTrackVtx> &vtxs
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment