ATLAS Offline Software
Loading...
Searching...
No Matches
MuctpiXMLParser.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3*/
4
5// libraries
6
13//
14
15//
16#include <boost/property_tree/xml_parser.hpp>
17// cpp libraries
18#include <iostream>
19#include <vector>
20#include <string>
21#include <stdlib.h>
22
23using namespace std;
24using boost::property_tree::ptree;
25
26namespace pt = boost::property_tree;
27
28
32
33
34void
36 cout << "************************** MuctpiXMLParser **********************" << endl;
37 m_muctpi.print();
38 cout << "*****************************************************************" << endl;
39}
40
41
42void
43MuctpiXMLParser::readConfiguration(const std::string & inputfile)
44{
45 // populate the ptree m_configuration with the structure of the xml input file
46 ptree inputTree;
47 read_xml(inputfile, inputTree); // 3 --> trim_whitespace
48
49 m_muctpiPT = inputTree.get_child("MuCTPiGeometry");
50
51 TRG_MSG_INFO("Read " << inputfile << " successfully!");
52}
53
54
56{
57
58 // iterate through elements of topomenu
59 for(const boost::property_tree::ptree::value_type &x: m_muctpiPT) {
60
61 string menuElementName = x.first;
62 if (menuElementName=="<xmlattr>" || menuElementName=="<xmlcomment>") continue;
63 ptree menuElement = x.second;
64
65 // get branch attributes
66 if( menuElementName=="MIOCT" ) {
67
68 MioctGeometry octant;
69 setOctant(menuElement, octant);
70 m_muctpi.addOctant(octant);
71
72 } else if( menuElementName=="PtEncoding" ) {
73
74 L1MuonPtEncoding ptEncoding;
75 setPtEncoding(menuElement, ptEncoding);
76 m_muctpi.setPtEncoding(ptEncoding);
77
78 } else {
79 // TRG_MSG_FATAL("Unknown element" << menuElementName); // validation is checked by the dtd
80 }
81 }
82
83
84 TRG_MSG_INFO("Parsing Successful!");
85
86 // m_muctpi.print();
87
88}
89
90
91void MuctpiXMLParser::setPtEncoding( boost::property_tree::ptree menuElement, L1MuonPtEncoding & ptEncoding)
92{
93 for(const auto & x : menuElement ) {
94 if( x.first == "PtCodeElement" ) {
95 unsigned int idxP1 = m_xmlHelper.getUIntAttribute(x.second, "pt");
96 if (idxP1 == 0 ){
97 TRG_MSG_WARNING("Avoided attempt to access array out-of-bounds");
98 continue;
99 }
100 unsigned int idx = idxP1 - 1;//unsigned version of -1 would be a very large number
101 unsigned int ptCode = m_xmlHelper.getUIntAttribute(x.second, "code");
102 unsigned int thresholdValue = m_xmlHelper.getUIntAttribute(x.second, "value");
103 //idx is used directly as an array index in this function call, so cannot be
104 //negative or too large
105 ptEncoding.setCodingInfo(idx, ptCode, thresholdValue);
106 }
107 }
108}
109
110
111void MuctpiXMLParser::setOctant( boost::property_tree::ptree menuElement, MioctGeometry &octant)
112{
113 octant.setMioctId( m_xmlHelper.getUIntAttribute(menuElement,"id"));
114 octant.setSlot( m_xmlHelper.getUIntAttribute(menuElement,"slot"));
115
116 // <Sector>'s
117 //unsigned int counter = 0;
118 for(const boost::property_tree::ptree::value_type &x:menuElement ) {
119 //cout << "reading "<< counter<< " octant\n"; counter++;
120 string menuElementNameO = x.first;
121 if (menuElementNameO=="<xmlattr>" || menuElementNameO=="<xmlcomment>") continue;
122 ptree menuElementO = x.second;
123 // get branch attributes
124
125 if( menuElementNameO== "Sector" ){
126 MioctSectorGeometry sector;
127 setSector(menuElementO, sector);
128 octant.addSector(sector);
129 }
130 // Decode/TopoCell
131 else if( menuElementNameO == "Decode" ){
132 for(const boost::property_tree::ptree::value_type &y: menuElementO) {
133 string menuElementName1 = y.first;
134 if (menuElementName1=="<xmlattr>" || menuElementName1=="<xmlcomment>") continue;
135 ptree menuElement1 = y.second;
137 setTopoCell(menuElement1, tcell);
138 octant.addTopoCell(tcell);
139 }
140 } // end of decode
141 }// end of menuEleement loop
142}
143
144
145void MuctpiXMLParser::setSector( boost::property_tree::ptree menuElement, MioctSectorGeometry &sector)
146{
147 sector.setConnector(m_xmlHelper.getUIntAttribute(menuElement,"connector") );
148 sector.setName(m_xmlHelper.getAttribute(menuElement,"name") );
149
150 //unsigned int counter = 0;
151 for(const boost::property_tree::ptree::value_type &x:menuElement ) {
152
153 string menuElementNameO = x.first;
154 if (menuElementNameO=="<xmlattr>" || menuElementNameO=="<xmlcomment>") continue;
155 ptree menuElementO = x.second;
156 // get branch attributes
157
158 if( menuElementNameO== "ROI" ){
159 //cout << "reading "<< counter<<" ROI\n"; counter++;
161 setROI(menuElementO, roi);
162 sector.addROI(roi);
163 }
164 }
165}
166
167void MuctpiXMLParser::setROI( boost::property_tree::ptree menuElement, MioctROIGeometry &data)
168{
169 unsigned int x = 0;
170 std::stringstream ss; ss << std::hex ;
171
172 data.setEtamin(m_xmlHelper.getFloatAttribute(menuElement, "etamin"));
173 data.setEtamax(m_xmlHelper.getFloatAttribute(menuElement, "etamax"));
174 data.setEta(m_xmlHelper.getFloatAttribute(menuElement, "eta"));
175 data.setPhimin(m_xmlHelper.getFloatAttribute(menuElement, "phimin"));
176 data.setPhimax(m_xmlHelper.getFloatAttribute(menuElement, "phimax"));
177 data.setPhi(m_xmlHelper.getFloatAttribute(menuElement, "phi"));
178 data.setRoiid(m_xmlHelper.getUIntAttribute(menuElement, "roiid"));
179
180 ss<< m_xmlHelper.getAttribute(menuElement, "etacode");
181 ss>> x;
182 data.setEtacode( x );
183 ss.clear();
184 ss<< m_xmlHelper.getAttribute(menuElement, "phicode");
185 ss>> x;
186 data.setPhicode( x );
187 //data.print(" ");
188}
189
190void MuctpiXMLParser::setTopoCell(boost::property_tree::ptree menuElement, MioctTopoCellGeometry &data)
191{
192 unsigned int x = 0;
193 std::stringstream ss; ss << std::hex ;
194 data.setEtamin(m_xmlHelper.getFloatAttribute(menuElement, "etamin"));
195 data.setEtamax(m_xmlHelper.getFloatAttribute(menuElement, "etamax"));
196 data.setEta(m_xmlHelper.getFloatAttribute(menuElement, "eta"));
197
198 data.setPhimin(m_xmlHelper.getFloatAttribute(menuElement, "phimin"));
199 data.setPhimax(m_xmlHelper.getFloatAttribute(menuElement, "phimax"));
200 data.setPhi(m_xmlHelper.getFloatAttribute(menuElement, "phi"));
201 data.setIEta(m_xmlHelper.getIntAttribute(menuElement, "ieta"));
202 data.setIPhi(m_xmlHelper.getIntAttribute(menuElement, "iphi"));
203
204 ss<< m_xmlHelper.getAttribute(menuElement, "etacode");
205 ss>> x; ss.clear();
206 data.setEtacode( x );
207 ss<< m_xmlHelper.getAttribute(menuElement, "phicode");
208 ss>> x;
209 data.setPhicode( x );
210 //data.print(" ");
211}
212
213
char data[hepevt_bytes_allocation_ATLAS]
Definition HepEvt.cxx:11
boost::property_tree::ptree ptree
static Double_t ss
#define y
#define x
void setCodingInfo(unsigned int idx, unsigned int ptCode, unsigned int thresholdValue)
void addSector(const MioctSectorGeometry &sector)
void addTopoCell(const MioctTopoCellGeometry &topocell)
void setSlot(int m)
void setMioctId(unsigned int id)
void setConnector(unsigned int id)
void setName(const std::string &name)
void addROI(const MioctROIGeometry &roi)
void setSector(boost::property_tree::ptree menuElement, MioctSectorGeometry &sector)
boost::property_tree::ptree m_muctpiPT
MuCTPiGeometry m_muctpi
void setOctant(boost::property_tree::ptree menuElement, MioctGeometry &octant)
void setTopoCell(boost::property_tree::ptree menuElement, MioctTopoCellGeometry &topocell)
void setROI(boost::property_tree::ptree menuElement, MioctROIGeometry &roi)
void printConfiguration() const
void readConfiguration(const std::string &inputfile)
void setPtEncoding(boost::property_tree::ptree menuElement, L1MuonPtEncoding &ptEncoding)
MuctpiXMLHelper m_xmlHelper
TrigConfMessaging(const std::string &name)
Constructor with parameters.
Forward iterator to traverse the main components of the trigger configuration.
Definition Config.h:22
STL namespace.