Skip to content
Snippets Groups Projects

Fix the rejection stage plot in case there are algorithms that have both children and do work themselves (like HltUnit in HLT1).

Merged Roel Aaij requested to merge raaij-FixRejectionStagePlot into master
1 file
+ 19
8
Compare changes
  • Side-by-side
  • Inline
@@ -461,17 +461,28 @@ StatusCode Selection::Line::execute()
fill( m_errorHisto, report.errorBits(), 1.0);
// make stair plot
auto last = m_subAlgo.begin();
auto last = m_subAlgo.begin(), seq = m_subAlgo.end();
while ( last != m_subAlgo.end() ) {
if (std::get<0>(*last)->filterPassed()) {
last+=std::get<1>(*last);
last += std::get<1>(*last);
// There are some algorithms that have subalgorithms, but are not pure sequences and
// fail even if all children have passed, make sure we record them as the point of failure.
// Note: it would be neat if this came after the children in the plot, but we cannot figure
// out which algorithms are like this at initialization without heuristics, so we do the best
// we can and at least fill the right bin number.
if (seq != end(m_subAlgo) && std::distance(seq, last) == std::get<1>(*seq)) {
last = seq;
break;
}
} else {
if (std::get<1>(*last)==1) break; // don't have subalgos, so this is where we stopped
++last; // descend into subalgorithms, figure out which one failed.....
// Note: what to do if subalgos pass, but parent failed?? (yes, this is possible!)
// actually need to invert parent/daughters, such that if daughters OK,
// but parent isn't, we enter the plot at the _parent_, but that should appear
// _after_ the daughters (which may be confusing)...
if (std::get<1>(*last) == 1) {
// don't have subalgos, so this is where we stopped
break;
} else {
// Do have subalgos remember where we start descending
seq = last;
}
++last; // descend into subalgorithms to figure out which one failed.....
}
}
fill( m_stepHisto, std::distance(m_subAlgo.begin(),last), 1.0);
Loading