ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
MuonSpectrometer
MuonPhaseII
MuonLearning
MuonInference
src
InferenceUtils.h
Go to the documentation of this file.
1
/*
2
Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
3
*/
4
#ifndef MUONINFERENCE_INFERENCEUTILS_H
5
#define MUONINFERENCE_INFERENCEUTILS_H
6
7
#include "
AthOnnxComps/OnnxRuntimeSessionToolCUDA.h
"
8
#include "
xAODMuon/MuonSegment.h
"
9
10
#include <algorithm>
11
#include <cmath>
12
13
namespace
MuonML::InferenceUtils
{
14
15
struct
SessionBackend
{
16
bool
isCuda
{
false
};
17
int
cudaDeviceId
{0};
18
};
19
20
template
<
class
SessionToolHandle>
21
SessionBackend
sessionBackend
(
const
SessionToolHandle& sessionTool) {
22
if
(
const
auto
* cudaTool =
dynamic_cast<
const
AthOnnx::OnnxRuntimeSessionToolCUDA
*
>
(sessionTool.get())) {
23
return
SessionBackend
{
true
, cudaTool->deviceId()};
24
}
25
return
SessionBackend
{};
26
}
27
28
inline
float
sigmoid
(
float
x
) {
29
if
(
x
>= 0.f) {
30
const
float
z
= std::exp(-
x
);
31
return
1.f / (1.f +
z
);
32
}
33
const
float
z
= std::exp(
x
);
34
return
z
/ (1.f +
z
);
35
}
36
37
inline
float
reducedChi2
(
const
xAOD::MuonSegment
& segment) {
38
return
segment.
chiSquared
() / std::max(1.f, segment.
numberDoF
());
39
}
40
42
inline
int
compareFloat
(
float
first,
float
second) {
43
if
(std::isnan(first))
return
std::isnan(second) ? 0 : 1;
44
if
(std::isnan(second))
return
-1;
45
if
(first < second)
return
-1;
46
if
(first > second)
return
1;
47
return
0;
48
}
49
51
inline
int
compareFloatDescending
(
float
first,
float
second) {
52
if
(std::isnan(first))
return
std::isnan(second) ? 0 : 1;
53
if
(std::isnan(second))
return
-1;
54
if
(first > second)
return
-1;
55
if
(first < second)
return
1;
56
return
0;
57
}
58
66
struct
SegmentQualityOrder
{
67
bool
operator()
(
const
xAOD::MuonSegment
* first,
68
const
xAOD::MuonSegment
* second)
const
{
69
if
(first->nPrecisionHits() != second->nPrecisionHits()) {
70
return
first->nPrecisionHits() > second->nPrecisionHits();
71
}
72
if
(first->nPhiLayers() != second->nPhiLayers()) {
73
return
first->nPhiLayers() > second->nPhiLayers();
74
}
75
if
(first->nTrigEtaLayers() != second->nTrigEtaLayers()) {
76
return
first->nTrigEtaLayers() > second->nTrigEtaLayers();
77
}
78
const
int
chi2Order =
compareFloat
(
reducedChi2
(*first),
79
reducedChi2
(*second));
80
if
(chi2Order != 0)
return
chi2Order < 0;
81
return
first->index() < second->index();
82
}
83
};
84
85
}
// namespace MuonML::InferenceUtils
86
87
#endif
// MUONINFERENCE_INFERENCEUTILS_H
MuonSegment.h
OnnxRuntimeSessionToolCUDA.h
x
#define x
z
#define z
AthOnnx::OnnxRuntimeSessionToolCUDA
Definition
OnnxRuntimeSessionToolCUDA.h:21
xAOD::MuonSegment_v1::numberDoF
float numberDoF() const
Returns the numberDoF.
xAOD::MuonSegment_v1::chiSquared
float chiSquared() const
MuonML::InferenceUtils
Definition
InferenceUtils.h:13
MuonML::InferenceUtils::compareFloat
int compareFloat(float first, float second)
Three-way float comparison which orders NaN after all numeric values.
Definition
InferenceUtils.h:42
MuonML::InferenceUtils::sessionBackend
SessionBackend sessionBackend(const SessionToolHandle &sessionTool)
Definition
InferenceUtils.h:21
MuonML::InferenceUtils::sigmoid
float sigmoid(float x)
Definition
InferenceUtils.h:28
MuonML::InferenceUtils::compareFloatDescending
int compareFloatDescending(float first, float second)
Three-way descending comparison which also orders NaN last.
Definition
InferenceUtils.h:51
MuonML::InferenceUtils::reducedChi2
float reducedChi2(const xAOD::MuonSegment &segment)
Definition
InferenceUtils.h:37
xAOD::MuonSegment
MuonSegment_v1 MuonSegment
Reference the current persistent version:
Definition
Event/xAOD/xAODMuon/xAODMuon/MuonSegment.h:13
MuonML::InferenceUtils::SegmentQualityOrder
Common quality ordering for segment representatives.
Definition
InferenceUtils.h:66
MuonML::InferenceUtils::SegmentQualityOrder::operator()
bool operator()(const xAOD::MuonSegment *first, const xAOD::MuonSegment *second) const
Definition
InferenceUtils.h:67
MuonML::InferenceUtils::SessionBackend
Definition
InferenceUtils.h:15
MuonML::InferenceUtils::SessionBackend::cudaDeviceId
int cudaDeviceId
Definition
InferenceUtils.h:17
MuonML::InferenceUtils::SessionBackend::isCuda
bool isCuda
Definition
InferenceUtils.h:16
Generated on
for ATLAS Offline Software by
1.17.0