17 {
18
20 std::string xmlFullFileName = FastCaloGANInputFolderName + "/binning.xml";
21
22
23 xmlDocPtr
doc = xmlParseFile(xmlFullFileName.c_str());
24 if (!doc) {
26 return;
27 }
28
29 for (xmlNodePtr nodeRoot =
doc->children; nodeRoot !=
nullptr;
30 nodeRoot = nodeRoot->next) {
31 if (xmlStrEqual(nodeRoot->name, BAD_CAST "Bins")) {
32 for (xmlNodePtr nodeParticle = nodeRoot->children;
33 nodeParticle != nullptr; nodeParticle = nodeParticle->next) {
34 if (xmlStrEqual(nodeParticle->name, BAD_CAST "Particle")) {
35 int nodePid = std::stoi(reinterpret_cast<const char*>(
36 xmlGetProp(nodeParticle, BAD_CAST "pid")));
37
38 if (nodePid == pid) {
39 for (xmlNodePtr nodeBin = nodeParticle->children;
40 nodeBin != nullptr; nodeBin = nodeBin->next) {
41 if (xmlStrEqual(nodeBin->name, BAD_CAST "Bin")) {
42 int nodeEtaMin = std::stoi(reinterpret_cast<const char*>(
43 xmlGetProp(nodeBin, BAD_CAST "etaMin")));
44 int nodeEtaMax = std::stoi(reinterpret_cast<const char*>(
45 xmlGetProp(nodeBin, BAD_CAST "etaMax")));
46 int regionId = std::stoi(reinterpret_cast<const char*>(
47 xmlGetProp(nodeBin, BAD_CAST "regionId")));
48
49 if (std::abs(etaMid) > nodeEtaMin &&
50 std::abs(etaMid) < nodeEtaMax) {
51
55 xmlGetProp(nodeBin, BAD_CAST "ganVersion")));
56 m_latentDim = std::stod(
reinterpret_cast<const char*
>(
57 xmlGetProp(nodeParticle, BAD_CAST "latentDim")));
58
59 for (xmlNodePtr nodeLayer = nodeBin->children;
60 nodeLayer != nullptr; nodeLayer = nodeLayer->next) {
61 if (xmlStrEqual(nodeLayer->name, BAD_CAST "Layer")) {
62 std::vector<double> edges;
63 std::string
s(
reinterpret_cast<const char*
>(
64 xmlGetProp(nodeLayer, BAD_CAST "r_edges")));
65
66 std::istringstream
ss(s);
67 std::string token;
68
69 while (std::getline(
ss, token,
',')) {
70 edges.push_back(std::stod(token));
71 }
72
73 int binsInAlpha = std::stoi(reinterpret_cast<const char*>(
74 xmlGetProp(nodeLayer, BAD_CAST "n_bin_alpha")));
75 int layer = std::stoi(
reinterpret_cast<const char*
>(
76 xmlGetProp(nodeLayer, BAD_CAST "id")));
77
78 std::string
name =
"hist_pid_" + std::to_string(nodePid) +
79 "_region_" + std::to_string(regionId) +
80 "_layer_" + std::to_string(layer);
81 int xBins =
static_cast<int>(edges.size()) - 1;
82
83 if (xBins <= 0) {
85 "No bins defined in r for layer "
86 << layer
87 << ", setting to 1 bin to avoid empty histogram");
89 edges.push_back (edges.back()+1);
90 } else {
92 }
93
94 double minAlpha = -
M_PI;
96 minAlpha = 0;
97 }
98
100 layer,
101 TH2D(
name.c_str(),
name.c_str(), xBins, edges.data(),
102 binsInAlpha, minAlpha,
M_PI));
103 itr.first->second.SetDirectory(nullptr);
104 }
105 }
106 }
107 }
108 }
109 }
110 }
111 }
112 }
113 }
114
115
116 xmlFreeDoc(doc);
117}
#define ATH_MSG_WARNING(x)
static bool ReadBooleanAttribute(const std::string &name, xmlNodePtr node)