ATLAS Offline Software
Loading...
Searching...
No Matches
ISF::PunchThroughClassifier Class Reference

#include <PunchThroughClassifier.h>

Inheritance diagram for ISF::PunchThroughClassifier:
Collaboration diagram for ISF::PunchThroughClassifier:

Public Member Functions

 PunchThroughClassifier (const std::string &, const std::string &, const IInterface *)
 Constructor.
virtual ~PunchThroughClassifier ()=default
 Destructor.
virtual StatusCode initialize () override final
 AlgTool initialize method.
StatusCode initializeScaler (const std::string &scalerConfigFile)
 input variable MinMaxScaler initialize method
StatusCode initializeNetwork (const std::string &networkConfigFile)
 neural network initialize method
StatusCode initializeCalibrator (const std::string &calibratorConfigFile)
 isotonic regressor calibrator initialize method
virtual double computePunchThroughProbability (const ISF::ISFParticle &isfp, const TFCSSimulationState &simulstate) const override
 interface method to return probability prediction of punch through
std::map< std::string, std::map< std::string, double > > scaleInputs (std::map< std::string, std::map< std::string, double > > &inputs) const
 scale NN inputs using MinMaxScaler
double calibrateOutput (double &networkOutput) const
 calibrate NN output using isotonic regressor

Static Public Member Functions

static std::map< std::string, std::map< std::string, double > > computeInputs (const ISF::ISFParticle &isfp, const TFCSSimulationState &simulstate)
 calcalate NN inputs based on isfp and simulstate

Private Attributes

std::unique_ptr< lwt::LightweightGraph > m_graph {}
 NN graph.
double m_scalerMin {}
 input variable MinMaxScaler members
double m_scalerMax {}
std::map< std::string, double > m_scalerMinMap
std::map< std::string, double > m_scalerMaxMap
std::string m_calibratorConfigFile
 isotonic regressor calibrator members
double m_calibrationMin {}
double m_calibrationMax {}
std::map< double, double > m_calibrationMap
std::string m_networkConfigFileName
std::string m_scalerConfigFileName
std::string m_calibratorConfigFileName

Detailed Description

Definition at line 26 of file PunchThroughClassifier.h.

Constructor & Destructor Documentation

◆ PunchThroughClassifier()

ISF::PunchThroughClassifier::PunchThroughClassifier ( const std::string & type,
const std::string & name,
const IInterface * parent )

Constructor.

Definition at line 20 of file PunchThroughClassifier.cxx.

21 : base_class(type, name, parent) {
22
23 declareProperty( "ScalerConfigFileName", m_scalerConfigFileName );
24 declareProperty( "NetworkConfigFileName", m_networkConfigFileName );
25 declareProperty( "CalibratorConfigFileName", m_calibratorConfigFileName );
26}

◆ ~PunchThroughClassifier()

virtual ISF::PunchThroughClassifier::~PunchThroughClassifier ( )
virtualdefault

Destructor.

Member Function Documentation

◆ calibrateOutput()

double ISF::PunchThroughClassifier::calibrateOutput ( double & networkOutput) const

calibrate NN output using isotonic regressor

Definition at line 177 of file PunchThroughClassifier.cxx.

177 {
178
179 //calibrate output of network using isotonic regressor model
180
181 //if network output is outside of the range of isotonic regressor then return min and max values
182 if (networkOutput < m_calibrationMin){
183 return m_calibrationMin;
184 }
185 else if (networkOutput > m_calibrationMax){
186 return m_calibrationMax;
187 }
188
189 //otherwise find neighbouring points in isotonic regressor
190 auto upper = m_calibrationMap.upper_bound(networkOutput);
191 auto lower = upper--;
192
193 //Perform linear interpolation between points
194 double m = (upper->second - lower->second)/(upper->first - lower->first);
195 double c = lower->second - m * lower->first;
196 double calibrated = m * networkOutput + c;
197
198 return calibrated;
199}
int upper(int c)
std::map< double, double > m_calibrationMap

◆ computeInputs()

std::map< std::string, std::map< std::string, double > > ISF::PunchThroughClassifier::computeInputs ( const ISF::ISFParticle & isfp,
const TFCSSimulationState & simulstate )
static

calcalate NN inputs based on isfp and simulstate

Definition at line 136 of file PunchThroughClassifier.cxx.

136 {
137
138 //calculate inputs for NN
139
140 std::map<std::string, std::map<std::string, double> > networkInputs;
141
142 //add initial particle and total energy variables
143 networkInputs["node_0"] = {
144 {"variable_0", isfp.momentum().mag() },
145 {"variable_1", std::abs(isfp.position().eta()) },
146 {"variable_2", isfp.position().phi() },
147 {"variable_3", simulstate.E()},
148 };
149
150 //add energy fraction variables
151 for (unsigned int i = 0; i < 24; i++){
152 networkInputs["node_0"].insert({"variable_" + std::to_string(i + 4), simulstate.Efrac(i)});
153 }
154
155 return networkInputs;
156}
const Amg::Vector3D & momentum() const
The current momentum vector of the ISFParticle.
const Amg::Vector3D & position() const
The current position of the ISFParticle.
double Efrac(int sample) const

◆ computePunchThroughProbability()

double ISF::PunchThroughClassifier::computePunchThroughProbability ( const ISF::ISFParticle & isfp,
const TFCSSimulationState & simulstate ) const
overridevirtual

interface method to return probability prediction of punch through

Definition at line 28 of file PunchThroughClassifier.cxx.

28 {
29
30 std::map<std::string, std::map<std::string, double> > networkInputs = computeInputs(isfp, simulstate); //compute inputs
31
32 networkInputs = scaleInputs(networkInputs); //scale inputs
33
34 std::map<std::string, double> networkOutputs = m_graph->compute(networkInputs); //call neural network on inputs
35
36 double calibratedOutput = calibrateOutput(networkOutputs["out_0"]); //calibrate neural network output
37
38 return calibratedOutput;
39}
std::map< std::string, std::map< std::string, double > > scaleInputs(std::map< std::string, std::map< std::string, double > > &inputs) const
scale NN inputs using MinMaxScaler
double calibrateOutput(double &networkOutput) const
calibrate NN output using isotonic regressor
static std::map< std::string, std::map< std::string, double > > computeInputs(const ISF::ISFParticle &isfp, const TFCSSimulationState &simulstate)
calcalate NN inputs based on isfp and simulstate
std::unique_ptr< lwt::LightweightGraph > m_graph
NN graph.

◆ initialize()

StatusCode ISF::PunchThroughClassifier::initialize ( )
finaloverridevirtual

AlgTool initialize method.

Definition at line 42 of file PunchThroughClassifier.cxx.

42 {
43
44 ATH_MSG_VERBOSE( "[ punchthroughclassifier ] initialize()" );
45
46 std::string resolvedScalerFileName = PathResolverFindCalibFile (m_scalerConfigFileName);
47 if ( initializeScaler(resolvedScalerFileName) != StatusCode::SUCCESS)
48 {
49 ATH_MSG_ERROR("[ punchthroughclassifier ] unable to load punchthroughclassifier input scaler");
50 }
51
52 std::string resolvedNetworkFileName = PathResolverFindCalibFile (m_networkConfigFileName);
53 if ( initializeNetwork(resolvedNetworkFileName) != StatusCode::SUCCESS)
54 {
55 ATH_MSG_ERROR("[ punchthroughclassifier ] unable to load punchthroughclassifier network");
56 }
57
58 std::string resolvedCalibratorFileName = PathResolverFindCalibFile (m_calibratorConfigFileName);
59 if ( initializeCalibrator(resolvedCalibratorFileName) != StatusCode::SUCCESS)
60 {
61 ATH_MSG_ERROR("[ punchthroughclassifier ] unable to load punchthroughclassifier calibrator");
62 }
63
64 return StatusCode::SUCCESS;
65}
#define ATH_MSG_ERROR(x)
#define ATH_MSG_VERBOSE(x)
std::string PathResolverFindCalibFile(const std::string &logical_file_name)
StatusCode initializeScaler(const std::string &scalerConfigFile)
input variable MinMaxScaler initialize method
StatusCode initializeNetwork(const std::string &networkConfigFile)
neural network initialize method
StatusCode initializeCalibrator(const std::string &calibratorConfigFile)
isotonic regressor calibrator initialize method

◆ initializeCalibrator()

StatusCode ISF::PunchThroughClassifier::initializeCalibrator ( const std::string & calibratorConfigFile)

isotonic regressor calibrator initialize method

Definition at line 112 of file PunchThroughClassifier.cxx.

112 {
113
114 XMLCoreParser p;
115 std::unique_ptr<XMLCoreNode> doc = p.parse (calibratorConfigFile);
116
117 //parse xml that contains config for isotonic regressor used to calibrate the network output
118 ATH_MSG_DEBUG( "[ punchthroughclassifier ] Loading calibrator: " << calibratorConfigFile);
119
120 for (const XMLCoreNode* node : doc->get_children ("Transformations/*"))
121 {
122 if (node->get_name() == "LimitValues") {
123 m_calibrationMin = node->get_double_attrib ("min");
124 m_calibrationMax = node->get_double_attrib ("max");
125 }
126 else if (node->get_name() == "LinearNorm") {
127 double orig = node->get_double_attrib ("orig");
128 double norm = node->get_double_attrib ("norm");
129 m_calibrationMap[orig] = norm;
130 }
131 }
132
133 return StatusCode::SUCCESS;
134}
#define ATH_MSG_DEBUG(x)

◆ initializeNetwork()

StatusCode ISF::PunchThroughClassifier::initializeNetwork ( const std::string & networkConfigFile)

neural network initialize method

Definition at line 91 of file PunchThroughClassifier.cxx.

91 {
92
93 ATH_MSG_INFO( "[ punchthroughclassifier ] Loading classifier: " << networkConfigFile);
94
95 std::ifstream input(networkConfigFile);
96 if(!input){
97 ATH_MSG_ERROR("Could not find json file " << networkConfigFile );
98 return StatusCode::FAILURE;
99 }
100
101 m_graph = std::make_unique<lwt::LightweightGraph>(lwt::parse_json_graph(input));
102 if(!m_graph){
103 ATH_MSG_ERROR("Could not parse graph json file " << networkConfigFile );
104 return StatusCode::FAILURE;
105 }
106
107
108 return StatusCode::SUCCESS;
109}
#define ATH_MSG_INFO(x)

◆ initializeScaler()

StatusCode ISF::PunchThroughClassifier::initializeScaler ( const std::string & scalerConfigFile)

input variable MinMaxScaler initialize method

Definition at line 67 of file PunchThroughClassifier.cxx.

67 {
68
69 //parse xml that contains config for MinMaxScaler for each of the network inputs
70 XMLCoreParser p;
71 std::unique_ptr<XMLCoreNode> doc = p.parse (scalerConfigFile);
72
73 ATH_MSG_DEBUG( "[ punchthroughclassifier ] Loading scaler: " << scalerConfigFile);
74
75 for (const XMLCoreNode* node : doc->get_children ("Transformations/*"))
76 {
77 if (node->get_name() == "ScalerValues") {
78 m_scalerMin = node->get_double_attrib ("min");
79 m_scalerMax = node->get_double_attrib ("max");
80 }
81 else if (node->get_name() == "VarScales") {
82 std::string name = node->get_attrib ("name");
83 m_scalerMinMap[name] = node->get_double_attrib ("min");
84 m_scalerMaxMap[name] = node->get_double_attrib ("max");
85 }
86 }
87
88 return StatusCode::SUCCESS;
89}
std::map< std::string, double > m_scalerMinMap
double m_scalerMin
input variable MinMaxScaler members
std::map< std::string, double > m_scalerMaxMap

◆ scaleInputs()

std::map< std::string, std::map< std::string, double > > ISF::PunchThroughClassifier::scaleInputs ( std::map< std::string, std::map< std::string, double > > & inputs) const

scale NN inputs using MinMaxScaler

Definition at line 158 of file PunchThroughClassifier.cxx.

158 {
159
160 //apply MinMaxScaler to network inputs
161
162 for (auto& var : inputs["node_0"]) {
163
164 double x_std;
165 if(m_scalerMaxMap.at(var.first) != m_scalerMinMap.at(var.first)){
166 x_std = (var.second - m_scalerMinMap.at(var.first)) / (m_scalerMaxMap.at(var.first) - m_scalerMinMap.at(var.first));
167 }
168 else{
169 x_std = (var.second - m_scalerMinMap.at(var.first));
170 }
171 var.second = x_std * (m_scalerMax - m_scalerMin) + m_scalerMin;
172 }
173
174 return inputs;
175}

Member Data Documentation

◆ m_calibrationMap

std::map<double, double> ISF::PunchThroughClassifier::m_calibrationMap
private

Definition at line 73 of file PunchThroughClassifier.h.

◆ m_calibrationMax

double ISF::PunchThroughClassifier::m_calibrationMax {}
private

Definition at line 72 of file PunchThroughClassifier.h.

72{};

◆ m_calibrationMin

double ISF::PunchThroughClassifier::m_calibrationMin {}
private

Definition at line 71 of file PunchThroughClassifier.h.

71{};

◆ m_calibratorConfigFile

std::string ISF::PunchThroughClassifier::m_calibratorConfigFile
private

isotonic regressor calibrator members

Definition at line 70 of file PunchThroughClassifier.h.

◆ m_calibratorConfigFileName

std::string ISF::PunchThroughClassifier::m_calibratorConfigFileName
private

Definition at line 78 of file PunchThroughClassifier.h.

◆ m_graph

std::unique_ptr<lwt::LightweightGraph> ISF::PunchThroughClassifier::m_graph {}
private

NN graph.

Definition at line 61 of file PunchThroughClassifier.h.

61{};

◆ m_networkConfigFileName

std::string ISF::PunchThroughClassifier::m_networkConfigFileName
private

Definition at line 76 of file PunchThroughClassifier.h.

◆ m_scalerConfigFileName

std::string ISF::PunchThroughClassifier::m_scalerConfigFileName
private

Definition at line 77 of file PunchThroughClassifier.h.

◆ m_scalerMax

double ISF::PunchThroughClassifier::m_scalerMax {}
private

Definition at line 65 of file PunchThroughClassifier.h.

65{};

◆ m_scalerMaxMap

std::map<std::string, double> ISF::PunchThroughClassifier::m_scalerMaxMap
private

Definition at line 67 of file PunchThroughClassifier.h.

◆ m_scalerMin

double ISF::PunchThroughClassifier::m_scalerMin {}
private

input variable MinMaxScaler members

Definition at line 64 of file PunchThroughClassifier.h.

64{};

◆ m_scalerMinMap

std::map<std::string, double> ISF::PunchThroughClassifier::m_scalerMinMap
private

Definition at line 66 of file PunchThroughClassifier.h.


The documentation for this class was generated from the following files: