ATLAS Offline Software
Loading...
Searching...
No Matches
TFCSGANEtaSlice Class Reference

#include <TFCSGANEtaSlice.h>

Inheritance diagram for TFCSGANEtaSlice:
Collaboration diagram for TFCSGANEtaSlice:

Public Types

typedef std::map< int, std::vector< double > > FitResultsPerLayer
typedef std::map< int, double > ExtrapolatorWeights
typedef std::map< std::string, std::map< std::string, double > > NetworkInputs
typedef std::map< std::string, double > NetworkOutputs

Public Member Functions

 TFCSGANEtaSlice ()
 TFCSGANEtaSlice (int pid, int etaMin, int etaMax, const TFCSGANXMLParameters &param)
virtual ~TFCSGANEtaSlice ()
bool LoadGAN ()
void CalculateMeanPointFromDistributionOfR ()
void ExtractExtrapolatorMeansFromInputs ()
NetworkOutputs GetNetworkOutputs (const TFCSTruthState *truth, const TFCSExtrapolationState *extrapol, TFCSSimulationState simulstate) const
bool IsGanCorrectlyLoaded () const
const FitResultsPerLayerGetFitResults () const
const ExtrapolatorWeightsGetExtrapolatorWeights ()
void Print () const
bool msgLvl (const MSG::Level lvl) const
 Check whether the logging system is active at the provided verbosity level.
MsgStream & msg () const
 Return a stream for sending messages directly (no decoration)
MsgStream & msg (const MSG::Level lvl) const
 Return a decorated starting stream for sending messages.
MSG::Level level () const
 Retrieve output level.
virtual void setLevel (MSG::Level lvl)
 Update outputlevel.

Static Public Member Functions

static std::string startMsg (MSG::Level lvl, const std::string &file, int line)
 Make a message to decorate the start of logging.

Private Member Functions

VNetworkBaseGetNetAll () const
VNetworkBaseGetNetLow () const
VNetworkBaseGetNetHigh () const
bool LoadGANNoRange (std::string inputFileName)
bool LoadGANFromRange (std::string inputFileName, std::string energyRange)

Private Attributes

int m_pid {}
int m_etaMin {}
int m_etaMax {}
std::string m_inputFolderName
FitResultsPerLayer m_allFitResults
ExtrapolatorWeights m_extrapolatorWeights
TFCSGANLWTNNHandlerm_gan_all = nullptr
TFCSGANLWTNNHandlerm_gan_low = nullptr
TFCSGANLWTNNHandlerm_gan_high = nullptr
std::unique_ptr< VNetworkBasem_net_all = nullptr
std::unique_ptr< VNetworkBasem_net_low = nullptr
std::unique_ptr< VNetworkBasem_net_high = nullptr
TFCSGANXMLParameters m_param {}
std::string m_nm
 Message source name.

Static Private Attributes

static boost::thread_specific_ptr< MsgStream > m_msg_tls ATLAS_THREAD_SAFE
 Do not persistify!

Detailed Description

Definition at line 30 of file TFCSGANEtaSlice.h.

Member Typedef Documentation

◆ ExtrapolatorWeights

typedef std::map<int, double> TFCSGANEtaSlice::ExtrapolatorWeights

Definition at line 38 of file TFCSGANEtaSlice.h.

◆ FitResultsPerLayer

typedef std::map<int, std::vector<double> > TFCSGANEtaSlice::FitResultsPerLayer

Definition at line 37 of file TFCSGANEtaSlice.h.

◆ NetworkInputs

typedef std::map<std::string, std::map<std::string, double> > TFCSGANEtaSlice::NetworkInputs

Definition at line 39 of file TFCSGANEtaSlice.h.

◆ NetworkOutputs

typedef std::map<std::string, double> TFCSGANEtaSlice::NetworkOutputs

Definition at line 40 of file TFCSGANEtaSlice.h.

Constructor & Destructor Documentation

◆ TFCSGANEtaSlice() [1/2]

TFCSGANEtaSlice::TFCSGANEtaSlice ( )

Definition at line 28 of file TFCSGANEtaSlice.cxx.

28{}

◆ TFCSGANEtaSlice() [2/2]

TFCSGANEtaSlice::TFCSGANEtaSlice ( int pid,
int etaMin,
int etaMax,
const TFCSGANXMLParameters & param )

Definition at line 30 of file TFCSGANEtaSlice.cxx.

32 : m_pid(pid), m_etaMin(etaMin), m_etaMax(etaMax), m_param(param) {}
TFCSGANXMLParameters m_param

◆ ~TFCSGANEtaSlice()

TFCSGANEtaSlice::~TFCSGANEtaSlice ( )
virtual

Definition at line 34 of file TFCSGANEtaSlice.cxx.

34 {
35 // Deleting a nullptr is a noop
36 delete m_gan_all;
37 delete m_gan_low;
38 delete m_gan_high;
39}
TFCSGANLWTNNHandler * m_gan_all
TFCSGANLWTNNHandler * m_gan_low
TFCSGANLWTNNHandler * m_gan_high

Member Function Documentation

◆ CalculateMeanPointFromDistributionOfR()

void TFCSGANEtaSlice::CalculateMeanPointFromDistributionOfR ( )

Definition at line 114 of file TFCSGANEtaSlice.cxx.

114 {
115 std::string rootFileName = m_param.GetInputFolder() + "/rootFiles/pid" +
116 std::to_string(m_pid) + "_E1048576_eta_" +
117 std::to_string(m_etaMin) + "_" +
118 std::to_string(m_etaMin + 5) + ".root";
119 ATH_MSG_DEBUG("Opening file " << rootFileName);
120 TFile *file = TFile::Open(rootFileName.c_str(), "read");
121 for (int layer : m_param.GetRelevantLayers()) {
122 ATH_MSG_DEBUG("Layer " << layer);
123 TFCSGANXMLParameters::Binning binsInLayers = m_param.GetBinning();
124 TH2D *h2 = &binsInLayers[layer];
125
126 std::string histoName = "r" + std::to_string(layer) + "w";
127 TH1D *h1 = (TH1D *)file->Get(histoName.c_str());
128 if (std::isnan(h1->Integral())) {
129 histoName = "r" + std::to_string(layer);
130 h1 = (TH1D *)file->Get(histoName.c_str());
131 }
132
133 TAxis *x = (TAxis *)h2->GetXaxis();
134 for (int ix = 1; ix <= h2->GetNbinsX(); ++ix) {
135 ATH_MSG_DEBUG(ix);
136 h1->GetXaxis()->SetRangeUser(x->GetBinLowEdge(ix), x->GetBinUpEdge(ix));
137
138 double result = 0;
139 if (h1->Integral() > 0 && h1->GetNbinsX() > 2) {
140 TFitResultPtr res(0);
141
142 res = h1->Fit("expo", "SQ");
143 if (res >= 0 && !std::isnan(res->Parameter(0))) {
144 result = res->Parameter(1);
145 }
146 }
147 m_allFitResults[layer].push_back(result);
148 }
149 }
150 ATH_MSG_DEBUG("Done initialisaing fits");
151}
#define ATH_MSG_DEBUG(x)
std::pair< std::vector< unsigned int >, bool > res
#define x
FitResultsPerLayer m_allFitResults
std::map< int, TH2D > Binning
@ layer
Definition HitInfo.h:79
TFile * file

◆ ExtractExtrapolatorMeansFromInputs()

void TFCSGANEtaSlice::ExtractExtrapolatorMeansFromInputs ( )

Definition at line 153 of file TFCSGANEtaSlice.cxx.

153 {
154 std::string rootFileName = m_param.GetInputFolder() + "/rootFiles/pid" +
155 std::to_string(m_pid) + "_E65536_eta_" +
156 std::to_string(m_etaMin) + "_" +
157 std::to_string(m_etaMin + 5) + "_validation.root";
158 ATH_MSG_DEBUG("Opening file " << rootFileName);
159 TFile *file = TFile::Open(rootFileName.c_str(), "read");
160 for (int layer : m_param.GetRelevantLayers()) {
161 std::string branchName = "extrapWeight_" + std::to_string(layer);
162 TH1D *h = new TH1D("h", "h", 100, 0.01, 1);
163 TTree *tree = (TTree *)file->Get("rootTree");
164 std::string command = branchName + ">>h";
165 tree->Draw(command.c_str());
166 m_extrapolatorWeights[layer] = h->GetMean();
167 ATH_MSG_DEBUG("Extrapolation: layer " << layer << " mean "
168 << m_extrapolatorWeights[layer]);
169 }
170}
ExtrapolatorWeights m_extrapolatorWeights
TChain * tree

◆ GetExtrapolatorWeights()

const ExtrapolatorWeights & TFCSGANEtaSlice::GetExtrapolatorWeights ( )
inline

Definition at line 52 of file TFCSGANEtaSlice.h.

52{ return m_extrapolatorWeights; }

◆ GetFitResults()

const FitResultsPerLayer & TFCSGANEtaSlice::GetFitResults ( ) const
inline

Definition at line 51 of file TFCSGANEtaSlice.h.

51{ return m_allFitResults; }

◆ GetNetAll()

VNetworkBase * TFCSGANEtaSlice::GetNetAll ( ) const
private

Definition at line 41 of file TFCSGANEtaSlice.cxx.

41 {
42 if (m_net_all != nullptr)
43 return m_net_all.get();
44 return m_gan_all;
45}
std::unique_ptr< VNetworkBase > m_net_all

◆ GetNetHigh()

VNetworkBase * TFCSGANEtaSlice::GetNetHigh ( ) const
private

Definition at line 51 of file TFCSGANEtaSlice.cxx.

51 {
52 if (m_net_high != nullptr)
53 return m_net_high.get();
54 return m_gan_high;
55}
std::unique_ptr< VNetworkBase > m_net_high

◆ GetNetLow()

VNetworkBase * TFCSGANEtaSlice::GetNetLow ( ) const
private

Definition at line 46 of file TFCSGANEtaSlice.cxx.

46 {
47 if (m_net_low != nullptr)
48 return m_net_low.get();
49 return m_gan_low;
50}
std::unique_ptr< VNetworkBase > m_net_low

◆ GetNetworkOutputs()

VNetworkBase::NetworkOutputs TFCSGANEtaSlice::GetNetworkOutputs ( const TFCSTruthState * truth,
const TFCSExtrapolationState * extrapol,
TFCSSimulationState simulstate ) const

Definition at line 173 of file TFCSGANEtaSlice.cxx.

175 {
176 double randUniformZ = 0.;
178
179 int maxExp = 0, minExp = 0;
180 if (m_pid == 22 || std::abs(m_pid) == 11) {
181 if (truth->P() >
182 4096) { // This is the momentum, not the energy, because the split is
183 // based on the samples which are produced with the momentum
184 maxExp = 22;
185 minExp = 12;
186 } else {
187 maxExp = 12;
188 minExp = 6;
189 }
190 } else if (std::abs(m_pid) == 211) {
191 maxExp = 22;
192 minExp = 8;
193 } else if (std::abs(m_pid) == 2212) {
194 maxExp = 22;
195 minExp = 10;
196 }
197
198 int p_min = std::pow(2, minExp);
199 int p_max = std::pow(2, maxExp);
200 // Keep min and max without mass offset as we do not train on antiparticles
201 double Ekin_min =
202 std::sqrt(std::pow(p_min, 2) + std::pow(truth->M(), 2)) - truth->M();
203 double Ekin_max =
204 std::sqrt(std::pow(p_max, 2) + std::pow(truth->M(), 2)) - truth->M();
205
206 for (int i = 0; i < m_param.GetLatentSpaceSize(); i++) {
207 randUniformZ = CLHEP::RandGauss::shoot(simulstate.randomEngine(), 0.5, 0.5);
208 inputs["Noise"].insert(std::pair<std::string, double>(
209 "variable_" + std::to_string(i), randUniformZ));
210 }
211
212 // double e = log(truth->Ekin()/Ekin_min)/log(Ekin_max/Ekin_min) ;
213 // Could be uncommented , but would need the line above too
214 // ATH_MSG_DEBUG( "Check label: " << e <<" Ekin:" << truth->Ekin() <<" p:" <<
215 // truth->P() <<" mass:" << truth->M() <<" Ekin_off:" <<
216 // truth->Ekin_off() << " Ekin_min:"<<Ekin_min<<"
217 // Ekin_max:"<<Ekin_max);
218 // inputs["mycond"].insert ( std::pair<std::string,double>("variable_0",
219 // truth->Ekin()/(std::pow(2,maxExp))) ); //Old conditioning using linear
220 // interpolation, now use logaritminc interpolation
221 inputs["mycond"].insert(std::pair<std::string, double>(
222 "variable_0", log(truth->Ekin() / Ekin_min) / log(Ekin_max / Ekin_min)));
223
224 if (m_param.GetGANVersion() >= 2) {
225 if (false) { // conditioning on eta, should only be needed in transition
226 // regions and added only to the GANs that use it, for now all
227 // GANs have 3 conditioning inputs so filling zeros
228 inputs["mycond"].insert(std::pair<std::string, double>(
229 "variable_1", std::abs(extrapol->IDCaloBoundary_eta())));
230 } else {
231 inputs["mycond"].insert(std::pair<std::string, double>("variable_1", 0));
232 }
233 }
234
236 if (m_param.GetGANVersion() == 1 || m_pid == 211 || m_pid == 2212) {
237 outputs = GetNetAll()->compute(inputs);
238 } else {
239 if (truth->P() >
240 4096) { // This is the momentum, not the energy, because the split is
241 // based on the samples which are produced with the momentum
242 ATH_MSG_DEBUG("Computing outputs given inputs for high");
243 outputs = GetNetHigh()->compute(inputs);
244 } else {
245 outputs = GetNetLow()->compute(inputs);
246 }
247 }
248 ATH_MSG_DEBUG("Start Network inputs ~~~~~~~~");
250 ATH_MSG_DEBUG("End Network inputs ~~~~~~~~");
251 ATH_MSG_DEBUG("Start Network outputs ~~~~~~~~");
253 ATH_MSG_DEBUG("End Network outputs ~~~~~~~~");
254 return outputs;
255}
VNetworkBase * GetNetAll() const
VNetworkBase * GetNetLow() const
std::map< std::string, std::map< std::string, double > > NetworkInputs
VNetworkBase * GetNetHigh() const
CLHEP::HepRandomEngine * randomEngine()
double Ekin() const
virtual NetworkOutputs compute(NetworkInputs const &inputs) const =0
Function to pass values to the network.
static std::string representNetworkOutputs(NetworkOutputs const &outputs, int maxValues=3)
String representation of network outputs.
std::map< std::string, double > NetworkOutputs
Format for network outputs.
static std::string representNetworkInputs(NetworkInputs const &inputs, int maxValues=3)
String representation of network inputs.

◆ IsGanCorrectlyLoaded()

bool TFCSGANEtaSlice::IsGanCorrectlyLoaded ( ) const

Definition at line 57 of file TFCSGANEtaSlice.cxx.

57 {
58 if (m_pid == 211 || m_pid == 2212) {
59 if (GetNetAll() == nullptr) {
60 return false;
61 }
62 } else {
63 if (GetNetHigh() == nullptr || GetNetLow() == nullptr) {
64 return false;
65 }
66 }
67 return true;
68}

◆ level()

MSG::Level ISF_FCS::MLogging::level ( ) const
inlineinherited

Retrieve output level.

Definition at line 201 of file MLogging.h.

201{ return msg().level(); }
MsgStream & msg() const
Return a stream for sending messages directly (no decoration)
Definition MLogging.h:231

◆ LoadGAN()

bool TFCSGANEtaSlice::LoadGAN ( )

Definition at line 70 of file TFCSGANEtaSlice.cxx.

70 {
71 // Now load new data
72 std::string inputFileName;
73
76
77 bool success = true;
78
79 if (m_pid == 211) {
80 inputFileName = m_param.GetInputFolder() + "/neural_net_" +
81 std::to_string(m_pid) + "_eta_" + std::to_string(m_etaMin) +
82 "_" + std::to_string(m_etaMax) + "_All.*";
83 ATH_MSG_DEBUG("Gan input file name " << inputFileName);
84 m_net_all = TFCSNetworkFactory::create(std::move(inputFileName));
85 if (m_net_all == nullptr)
86 success = false;
87 } else if (m_pid == 2212) {
88 inputFileName = m_param.GetInputFolder() + "/neural_net_" +
89 std::to_string(m_pid) + "_eta_" + std::to_string(m_etaMin) +
90 "_" + std::to_string(m_etaMax) + "_High10.*";
91 ATH_MSG_DEBUG("Gan input file name " << inputFileName);
92 m_net_all = TFCSNetworkFactory::create(std::move(inputFileName));
93 if (m_net_all == nullptr)
94 success = false;
95 } else {
96 inputFileName = m_param.GetInputFolder() + "/neural_net_" +
97 std::to_string(m_pid) + "_eta_" + std::to_string(m_etaMin) +
98 "_" + std::to_string(m_etaMax) + "_High12.*";
99 ATH_MSG_DEBUG("Gan input file name " << inputFileName);
100 m_net_high = TFCSNetworkFactory::create(inputFileName);
101 if (m_net_high == nullptr)
102 success = false;
103
104 inputFileName = m_param.GetInputFolder() + "/neural_net_" +
105 std::to_string(m_pid) + "_eta_" + std::to_string(m_etaMin) +
106 "_" + std::to_string(m_etaMax) + "_UltraLow12.*";
107 m_net_low = TFCSNetworkFactory::create(std::move(inputFileName));
108 if (m_net_low == nullptr)
109 success = false;
110 }
111 return success;
112}
void CalculateMeanPointFromDistributionOfR()
void ExtractExtrapolatorMeansFromInputs()
static std::unique_ptr< VNetworkBase > create(std::string input)
Given a string, make a network.

◆ LoadGANFromRange()

bool TFCSGANEtaSlice::LoadGANFromRange ( std::string inputFileName,
std::string energyRange )
private

◆ LoadGANNoRange()

bool TFCSGANEtaSlice::LoadGANNoRange ( std::string inputFileName)
private

◆ msg() [1/2]

MsgStream & ISF_FCS::MLogging::msg ( ) const
inlineinherited

Return a stream for sending messages directly (no decoration)

Definition at line 231 of file MLogging.h.

231 {
232 MsgStream *ms = m_msg_tls.get();
233 if (!ms) {
234 ms = new MsgStream(Athena::getMessageSvc(), m_nm);
235 m_msg_tls.reset(ms);
236 }
237 return *ms;
238}
std::string m_nm
Message source name.
Definition MLogging.h:211
IMessageSvc * getMessageSvc(bool quiet=false)

◆ msg() [2/2]

MsgStream & ISF_FCS::MLogging::msg ( const MSG::Level lvl) const
inlineinherited

Return a decorated starting stream for sending messages.

Definition at line 240 of file MLogging.h.

240 {
241 return msg() << lvl;
242}

◆ msgLvl()

bool ISF_FCS::MLogging::msgLvl ( const MSG::Level lvl) const
inlineinherited

Check whether the logging system is active at the provided verbosity level.

Definition at line 222 of file MLogging.h.

222 {
223 if (msg().level() <= lvl) {
224 msg() << lvl;
225 return true;
226 } else {
227 return false;
228 }
229}
MSG::Level level() const
Retrieve output level.
Definition MLogging.h:201

◆ Print()

void TFCSGANEtaSlice::Print ( ) const

Definition at line 257 of file TFCSGANEtaSlice.cxx.

257 {
258 ATH_MSG_INFO("LWTNN Handler parameters");
259 ATH_MSG_INFO(" pid: " << m_pid);
260 ATH_MSG_INFO(" etaMin:" << m_etaMin);
261 ATH_MSG_INFO(" etaMax: " << m_etaMax);
262 m_param.Print();
263}
#define ATH_MSG_INFO(x)

◆ setLevel()

void ISF_FCS::MLogging::setLevel ( MSG::Level lvl)
virtualinherited

Update outputlevel.

Definition at line 105 of file MLogging.cxx.

105 {
106 lvl = (lvl >= MSG::NUM_LEVELS) ? MSG::ALWAYS
107 : (lvl < MSG::NIL) ? MSG::NIL
108 : lvl;
109 msg().setLevel(lvl);
110}

◆ startMsg()

std::string ISF_FCS::MLogging::startMsg ( MSG::Level lvl,
const std::string & file,
int line )
staticinherited

Make a message to decorate the start of logging.

Print a message for the start of logging.

Definition at line 116 of file MLogging.cxx.

116 {
117 int col1_len = 20;
118 int col2_len = 5;
119 int col3_len = 10;
120 auto last_slash = file.find_last_of('/');
121 int path_len = last_slash == std::string::npos ? 0 : last_slash;
122 int trim_point = path_len;
123 int total_len = file.length();
124 if (total_len - path_len > col1_len)
125 trim_point = total_len - col1_len;
126 std::string trimmed_name = file.substr(trim_point);
127 const char *LevelNames[MSG::NUM_LEVELS] = {
128 "NIL", "VERBOSE", "DEBUG", "INFO", "WARNING", "ERROR", "FATAL", "ALWAYS"};
129 std::string level = LevelNames[lvl];
130 std::string level_string = std::string("(") + level + ") ";
131 std::stringstream output;
132 output << std::setw(col1_len) << std::right << trimmed_name << ":"
133 << std::setw(col2_len) << std::left << line << std::setw(col3_len)
134 << std::right << level_string;
135 return output.str();
136}
output
Definition merge.py:16

Member Data Documentation

◆ ATLAS_THREAD_SAFE

boost::thread_specific_ptr<MsgStream> m_msg_tls ISF_FCS::MLogging::ATLAS_THREAD_SAFE
inlinestaticprivateinherited

Do not persistify!

MsgStream instance (a std::cout like with print-out levels)

Definition at line 215 of file MLogging.h.

◆ m_allFitResults

FitResultsPerLayer TFCSGANEtaSlice::m_allFitResults
private

Definition at line 63 of file TFCSGANEtaSlice.h.

◆ m_etaMax

int TFCSGANEtaSlice::m_etaMax {}
private

Definition at line 59 of file TFCSGANEtaSlice.h.

59{};

◆ m_etaMin

int TFCSGANEtaSlice::m_etaMin {}
private

Definition at line 58 of file TFCSGANEtaSlice.h.

58{};

◆ m_extrapolatorWeights

ExtrapolatorWeights TFCSGANEtaSlice::m_extrapolatorWeights
private

Definition at line 64 of file TFCSGANEtaSlice.h.

◆ m_gan_all

TFCSGANLWTNNHandler* TFCSGANEtaSlice::m_gan_all = nullptr
private

Definition at line 68 of file TFCSGANEtaSlice.h.

◆ m_gan_high

TFCSGANLWTNNHandler* TFCSGANEtaSlice::m_gan_high = nullptr
private

Definition at line 70 of file TFCSGANEtaSlice.h.

◆ m_gan_low

TFCSGANLWTNNHandler* TFCSGANEtaSlice::m_gan_low = nullptr
private

Definition at line 69 of file TFCSGANEtaSlice.h.

◆ m_inputFolderName

std::string TFCSGANEtaSlice::m_inputFolderName
private

Definition at line 61 of file TFCSGANEtaSlice.h.

◆ m_net_all

std::unique_ptr<VNetworkBase> TFCSGANEtaSlice::m_net_all = nullptr
private

Definition at line 72 of file TFCSGANEtaSlice.h.

◆ m_net_high

std::unique_ptr<VNetworkBase> TFCSGANEtaSlice::m_net_high = nullptr
private

Definition at line 74 of file TFCSGANEtaSlice.h.

◆ m_net_low

std::unique_ptr<VNetworkBase> TFCSGANEtaSlice::m_net_low = nullptr
private

Definition at line 73 of file TFCSGANEtaSlice.h.

◆ m_nm

std::string ISF_FCS::MLogging::m_nm
privateinherited

Message source name.

Definition at line 211 of file MLogging.h.

◆ m_param

TFCSGANXMLParameters TFCSGANEtaSlice::m_param {}
private

Definition at line 83 of file TFCSGANEtaSlice.h.

83{};

◆ m_pid

int TFCSGANEtaSlice::m_pid {}
private

Definition at line 57 of file TFCSGANEtaSlice.h.

57{};

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