Skip to content

Commit d7a6295

Browse files
author
Changhwan Choi
committed
Exception handling for getDb, getTrackDb
1 parent 7457594 commit d7a6295

3 files changed

Lines changed: 19 additions & 13 deletions

File tree

‎PWGJE/Core/JetTaggingUtilities.h‎

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1229,6 +1229,9 @@ T getDbFromProb(const std::vector<T>& probs, double fC = 0.018)
12291229
template <typename T>
12301230
T getDb(const std::vector<T>& logits, double fC = 0.018)
12311231
{
1232+
if (logits.size() < 3) {
1233+
LOG(fatal) << "getDb expects at least 3 class logits, received " << logits.size();
1234+
}
12321235
auto softmax = [](const std::vector<T>& logits) {
12331236
std::vector<T> res;
12341237
T maxLogit = *std::max_element(logits.begin(), logits.end());
@@ -1245,11 +1248,13 @@ T getDb(const std::vector<T>& logits, double fC = 0.018)
12451248

12461249
std::vector<T> softmaxLogits = softmax(logits);
12471250

1248-
if (softmaxLogits[1] == 0. && softmaxLogits[2] == 0.) {
1249-
LOG(debug) << "jettaggingutilities::Db, Divide by zero: softmaxLogits = (" << softmaxLogits[0] << ", " << softmaxLogits[1] << ", " << softmaxLogits[2] << ")";
1251+
auto denominator = fC * softmaxLogits[1] + (1. - fC) * softmaxLogits[2];
1252+
if (!std::isfinite(softmaxLogits[0]) || !std::isfinite(denominator) || softmaxLogits[0] <= 0. || denominator <= 0.) {
1253+
LOG(debug) << "jettaggingutilities::getDb, non-positive or non-finite numerator/denominator";
1254+
return std::numeric_limits<T>::quiet_NaN();
12501255
}
12511256

1252-
return std::log(softmaxLogits[0] / (fC * softmaxLogits[1] + (1. - fC) * softmaxLogits[2]));
1257+
return std::log(softmaxLogits[0] / denominator);
12531258
}
12541259

12551260
// Track-origin discriminant. Logit order: [background, charm, beauty, PV, other SV].
@@ -1273,8 +1278,9 @@ T getTrackDb(const std::vector<T>& trackLogits, double trackFC)
12731278
}
12741279

12751280
T denominator = trackFC * softmaxLogits[1] + (1. - trackFC) * (softmaxLogits[0] + softmaxLogits[3] + softmaxLogits[4]);
1276-
if (denominator == 0.) {
1277-
LOG(debug) << "jettaggingutilities::getTrackDb, zero denominator";
1281+
if (!std::isfinite(softmaxLogits[2]) || !std::isfinite(denominator) || softmaxLogits[2] <= 0. || denominator <= 0.) {
1282+
LOG(debug) << "jettaggingutilities::getTrackDb, non-positive or non-finite numerator/denominator";
1283+
return std::numeric_limits<T>::quiet_NaN();
12781284
}
12791285
return std::log(softmaxLogits[2] / denominator);
12801286
}

‎PWGJE/TableProducer/jetGnnInference.cxx‎

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -243,7 +243,7 @@ struct JetGnnInferenceTask {
243243
LOG(fatal) << "GNN trackIndex is out of range for the track QA scores.";
244244
}
245245
float score = (*trackScores)[nodeIndex];
246-
if (score == invalidGnnScore || std::isnan(score)) {
246+
if (score == invalidGnnScore || !std::isfinite(score)) {
247247
continue;
248248
}
249249
registry.fill(HIST("h_trackDb"), score);
@@ -400,14 +400,14 @@ struct JetGnnInferenceTask {
400400
trackLogits[category] = nodeLogits[nodeIndex * trackLogits.size() + category];
401401
}
402402
float score = jettaggingutilities::getTrackDb(trackLogits, trackFC);
403-
(*trackScores)[nodeIndex] = std::isnan(score) ? invalidGnnScore : score;
403+
(*trackScores)[nodeIndex] = !std::isfinite(score) ? invalidGnnScore : score;
404404
}
405405
} else {
406406
auto const modelOutput = bMlResponse.getModelOutput(gnnInput, 0);
407407
db = jettaggingutilities::getDb(modelOutput, fC);
408408
}
409-
if (std::isnan(db)) {
410-
LOGF(debug, "GNN inference, Db is NaN (%d)", jet.globalIndex());
409+
if (!std::isfinite(db)) {
410+
LOGF(debug, "GNN inference, Db is non-finite (%d)", jet.globalIndex());
411411
return 999.f;
412412
}
413413
return db;

‎PWGJE/TableProducer/jetTaggerHF.cxx‎

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -653,11 +653,11 @@ struct JetTaggerHFTask {
653653

654654
auto modelOutput = bMlResponse.getModelOutput(gnnInput, 0);
655655
float db = jettaggingutilities::getDb(modelOutput, fC);
656-
if (!std::isnan(db)) {
656+
if (std::isfinite(db)) {
657657
scoreML[jet.globalIndex()] = db;
658658
} else {
659659
scoreML[jet.globalIndex()] = 999.;
660-
LOGF(debug, "doprocessAlgorithmGNNwExtra, Db is NaN (%d)", jet.globalIndex());
660+
LOGF(debug, "doprocessAlgorithmGNNwExtra, Db is non-finite (%d)", jet.globalIndex());
661661
}
662662
} else {
663663
scoreML[jet.globalIndex()] = -999.;
@@ -682,11 +682,11 @@ struct JetTaggerHFTask {
682682

683683
auto modelOutput = bMlResponse.getModelOutput(gnnInput, 0);
684684
float db = jettaggingutilities::getDb(modelOutput, fC);
685-
if (!std::isnan(db)) {
685+
if (std::isfinite(db)) {
686686
scoreML[jet.globalIndex()] = db;
687687
} else {
688688
scoreML[jet.globalIndex()] = 999.;
689-
LOGF(debug, "doprocessAlgorithmGNN, Db is NaN (%d)", jet.globalIndex());
689+
LOGF(debug, "doprocessAlgorithmGNN, Db is non-finite (%d)", jet.globalIndex());
690690
}
691691
} else {
692692
scoreML[jet.globalIndex()] = -999.;

0 commit comments

Comments
 (0)