Skip to content

Commit cd84ce6

Browse files
committed
[RF] Only report value servers as parameters in RooFit::Evaluator
This avoids false positives for the parameters list in conditional fits.
1 parent fad1c29 commit cd84ce6

File tree

1 file changed

+12
-1
lines changed

1 file changed

+12
-1
lines changed

roofit/roofitcore/src/RooFit/Evaluator.cxx

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,7 @@ struct NodeInfo {
112112
bool isCategory = false;
113113
bool hasLogged = false;
114114
bool computeInGPU = false;
115+
bool isValueServer = false; // if this node is a value server to the top node
115116
std::size_t outputSize = 1;
116117
std::size_t lastSetValCount = std::numeric_limits<std::size_t>::max();
117118
int lastCatVal = std::numeric_limits<int>::max();
@@ -207,6 +208,16 @@ Evaluator::Evaluator(const RooAbsReal &absReal, bool useGPU)
207208
}
208209
}
209210

211+
// Figure out which nodes are value servers to the top node
212+
_nodes.back().isValueServer = true; // the top node itself
213+
for (auto iter = _nodes.rbegin(); iter != _nodes.rend(); ++iter) {
214+
if (!iter->isValueServer)
215+
continue;
216+
for (auto &serverInfo : iter->serverInfos) {
217+
serverInfo->isValueServer = true;
218+
}
219+
}
220+
210221
syncDataTokens();
211222

212223
if (_useGPU) {
@@ -687,7 +698,7 @@ RooArgSet Evaluator::getParameters() const
687698
{
688699
RooArgSet parameters;
689700
for (auto &nodeInfo : _nodes) {
690-
if (nodeInfo.absArg->isFundamental()) {
701+
if (nodeInfo.isValueServer && nodeInfo.absArg->isFundamental()) {
691702
parameters.add(*nodeInfo.absArg);
692703
}
693704
}

0 commit comments

Comments
 (0)