ATLAS Offline Software
Loading...
Searching...
No Matches
IdDictParserNS::RegionFactory Class Reference
Inheritance diagram for IdDictParserNS::RegionFactory:
Collaboration diagram for IdDictParserNS::RegionFactory:

Public Member Functions

void idd_start (IdDictParser &parser, const XMLCoreNode &node)
void idd_end (IdDictParser &parser, const XMLCoreNode &node)
void do_start (XMLCoreParser &parser, const XMLCoreNode &node)
void do_end (XMLCoreParser &parser, const XMLCoreNode &node)
void start (XMLCoreParser &parser, const XMLCoreNode &node)
void end (XMLCoreParser &parser, const XMLCoreNode &node)
void comment (XMLCoreParser &parser, const std::string &comment)
virtual void do_comment (XMLCoreParser &parser, const std::string &comment)

Static Public Member Functions

static bool has_attribute (const XMLCoreNode &node, const std::string &name)
static int get_int (const XMLCoreNode &node, const std::string &name)
static double get_double (const XMLCoreNode &node, const std::string &name)
static bool get_boolean (const XMLCoreNode &node, const std::string &name)
static std::string get_ID (const XMLCoreNode &node, const std::string &name)
static std::string get_value (const XMLCoreNode &node, const std::string &name)
static std::string get_token (const XMLCoreNode &node, const std::string &name)
static bool check_int (const int n, const XMLCoreNode &node, const std::string &name)
static bool check_double (const int n, const XMLCoreNode &node, const std::string &name)

Protected Attributes

std::string m_xmlelementname

Detailed Description

Definition at line 80 of file IdDictParser.cxx.

Member Function Documentation

◆ check_double()

bool XMLCoreFactory::check_double ( const int n,
const XMLCoreNode & node,
const std::string & name )
staticinherited

Definition at line 184 of file XMLCoreParser.cxx.

184 {
185 std::string checkstring = get_value (node, name);
186 int counter = 0;
187 //
188 // concatenate two times same string to
189 // check the last number of the string
190 // explicitly!
191 //
192 std::string t = checkstring + " " + checkstring;
193 std::istringstream tmpstr (t.c_str());
194 while (tmpstr.good ()) {
195 double ii{};
196 counter++;
197 tmpstr >> ii;
198 }
199 if (counter/2 != n) {
200 std::cerr << "XMLCoreFactory::check_double error: (" << counter << ") no " << n
201 << " doubles in \"" << checkstring << "\" for attribute " <<
202 name << ". exit." << std::endl;
203 std::string name1 = get_value (node, "name");
204 std::string volume = get_value (node, "volume");
205 if (name1 != "" ) std::cerr << "for name=" << name << std::endl;
206 if (volume != "" ) std::cerr << "for volume=" << volume << std::endl;
207 std::abort();
208 }
209 return true;
210}
static std::string get_value(const XMLCoreNode &node, const std::string &name)

◆ check_int()

bool XMLCoreFactory::check_int ( const int n,
const XMLCoreNode & node,
const std::string & name )
staticinherited

Definition at line 152 of file XMLCoreParser.cxx.

152 {
153 std::string checkstring = get_value (node, name);
154 int counter = 0;
155 //
156 // concatenate two times same string to
157 // check the last number of the string
158 // explicitly!
159 //
160 std::string t = checkstring + " " + checkstring;
161 std::istringstream tmpstr (t.c_str());
162 while (tmpstr.good ()) {
163 int ii;
164 counter++;
165 tmpstr >> ii;
166 }
167 if (counter/2 != n) {
168 std::cerr << "XMLCoreFactory::check_int error: no " << n
169 << " ints in \"" << checkstring << "\" for attribute " <<
170 name << ". exit." << std::endl;
171
172 std::string nodename = get_value (node, "name");
173 std::string volume = get_value (node, "volume");
174
175 if (nodename != "" ) std::cerr << "for name=" << nodename << std::endl;
176 if (volume != "" ) std::cerr << "for volume=" << volume << std::endl;
177
178 std::abort();
179 }
180 return true;
181}

◆ comment()

void XMLCoreFactory::comment ( XMLCoreParser & parser,
const std::string & comment )
inherited

Definition at line 58 of file XMLCoreParser.cxx.

58 {
59 if (XMLCoreParserDebugger::debug ()){
60 std::cout << "XMLCoreFactory::comment>" << std::endl;
61 }
62 do_comment (parser,comment);
63}
virtual void do_comment(XMLCoreParser &parser, const std::string &comment)
void comment(XMLCoreParser &parser, const std::string &comment)

◆ do_comment()

void XMLCoreFactory::do_comment ( XMLCoreParser & parser,
const std::string & comment )
virtualinherited

Definition at line 80 of file XMLCoreParser.cxx.

80 {
81 if (XMLCoreParserDebugger::debug ()){
82 std::cout << "XMLCoreFactory::do_comment>" << std::endl;
83 }
84}

◆ do_end()

void IdDictBaseFactory::do_end ( XMLCoreParser & parser,
const XMLCoreNode & node )
virtualinherited

Reimplemented from XMLCoreFactory.

Definition at line 157 of file IdDictParser.cxx.

157 {
158 idd_end (static_cast<IdDictParser&>(parser), node);
159 parser.down ();
160}
virtual void idd_end(IdDictParser &parser, const XMLCoreNode &node)

◆ do_start()

void IdDictBaseFactory::do_start ( XMLCoreParser & parser,
const XMLCoreNode & node )
virtualinherited

Reimplemented from XMLCoreFactory.

Definition at line 150 of file IdDictParser.cxx.

151 {
152 parser.up ();
153 idd_start (static_cast<IdDictParser&>(parser), node);
154}
virtual void idd_start(IdDictParser &parser, const XMLCoreNode &node)

◆ end()

void XMLCoreFactory::end ( XMLCoreParser & parser,
const XMLCoreNode & node )
inherited

Definition at line 50 of file XMLCoreParser.cxx.

50 {
51 if (XMLCoreParserDebugger::debug ()){
52 std::cout << "XMLCoreFactory::end>" << std::endl;
53 }
54 do_end (parser, node);
55}
virtual void do_end(XMLCoreParser &parser, const XMLCoreNode &node)

◆ get_boolean()

bool XMLCoreFactory::get_boolean ( const XMLCoreNode & node,
const std::string & name )
staticinherited

Definition at line 108 of file XMLCoreParser.cxx.

108 {
109 bool result = false;
110 std::string s = get_token (node, name);
111 if (s == "TRUE") result = true;
112 return (result);
113}
static std::string get_token(const XMLCoreNode &node, const std::string &name)

◆ get_double()

double XMLCoreFactory::get_double ( const XMLCoreNode & node,
const std::string & name )
staticinherited

Definition at line 100 of file XMLCoreParser.cxx.

100 {
101 double result = 0;
102 std::string s = get_value (node, name);
103 sscanf (s.c_str (), "%80lg", &result);
104 return (result);
105}

◆ get_ID()

std::string XMLCoreFactory::get_ID ( const XMLCoreNode & node,
const std::string & name )
staticinherited

Definition at line 115 of file XMLCoreParser.cxx.

115 {
116 std::string result = get_value (node, name);
117 return (result);
118}

◆ get_int()

int XMLCoreFactory::get_int ( const XMLCoreNode & node,
const std::string & name )
staticinherited

Definition at line 92 of file XMLCoreParser.cxx.

92 {
93 int result = 0;
94 std::string s = get_value (node, name);
95 sscanf (s.c_str (), "%80d", &result);
96 return (result);
97}

◆ get_token()

std::string XMLCoreFactory::get_token ( const XMLCoreNode & node,
const std::string & name )
staticinherited

Definition at line 135 of file XMLCoreParser.cxx.

135 {
136 std::string result = get_value (node, name);
137 // trim the value
138 while ((result.length () > 0) &&
139 (result.at(0) == ' ')) result.erase (0, 1);
140
141 while ((result.length () > 0) &&
142 (result.at(result.length () - 1) == ' ')) result.erase (result.length () - 1, 1);
143 // Convert to upper case
144 for (std::string::size_type i = 0; i < result.length (); ++i){
145 result[i] = std::toupper (result[i]);
146 }
147 return (result);
148}

◆ get_value()

std::string XMLCoreFactory::get_value ( const XMLCoreNode & node,
const std::string & name )
staticinherited

Definition at line 121 of file XMLCoreParser.cxx.

121 {
122 if (XMLCoreParserDebugger::debug ()){
123 std::cout << "XMLCoreFactory::get_value> name=" << name << std::endl;
124 }
125 std::string result;
126 if (node.has_attrib (name))
127 result = node.get_attrib (name);
128 if (XMLCoreParserDebugger::debug ()) {
129 std::cout << "XMLCoreFactory::get_value>2 value=" << result << std::endl;
130 }
131 return (result);
132}
const std::string & get_attrib(const std::string &name) const
Retrieve the value of an attribute.
bool has_attrib(const std::string &name) const
Test for presence of an attribute with a given name.

◆ has_attribute()

bool XMLCoreFactory::has_attribute ( const XMLCoreNode & node,
const std::string & name )
staticinherited

Definition at line 87 of file XMLCoreParser.cxx.

87 {
88 return node.has_attrib (name);
89}

◆ idd_end()

void RegionFactory::idd_end ( IdDictParser & parser,
const XMLCoreNode & node )
virtual

Reimplemented from IdDictParserNS::IdDictBaseFactory.

Definition at line 427 of file IdDictParser.cxx.

427 {
428 if (Debugger::debug ()){
429 Debugger::tab (parser.level());
430 std::cout << "RegionFactory::idd_end>" << std::endl;
431 }
432 if (parser.m_region != 0){
433 if (parser.m_dictionary != 0) parser.m_dictionary->add_region (parser.m_region.get());
434 // Check whether region is empty, i.e. no region entries have
435 // been found and added
436 if (parser.m_region->n_entries() == 0) {
437 parser.m_region->set_is_empty();
438 }
439
440 if (parser.m_altregions != 0) {
441 parser.m_altregions->add_region (std::move(parser.m_region));
442 } else if (parser.m_dictionary != 0) {
443 parser.m_dictionary->add_dictentry (std::move(parser.m_region));
444 } else {
445 parser.m_region.reset();
446 }
447 }
448}
static void tab(int n)

◆ idd_start()

void RegionFactory::idd_start ( IdDictParser & parser,
const XMLCoreNode & node )
virtual

Reimplemented from IdDictParserNS::IdDictBaseFactory.

Definition at line 295 of file IdDictParser.cxx.

295 {
296 if (Debugger::debug ()) {
297 Debugger::tab (parser.level());
298 std::cout << "RegionFactory::idd_start>" << std::endl;
299 }
300
301 parser.m_region = std::make_unique<IdDictRegion> (get_value (node, "name"),
302 get_value (node, "group"),
303 get_value (node, "tag"));
304
305 // check for next region in absolute eta
306 if (has_attribute (node, "next_abs_eta")) {
307 parser.m_region->set_next_abs_eta_name (get_value (node, "next_abs_eta"));
308 }
309
310 // Look for regions in the previous sampling
311 if (has_attribute (node, "prev_samp")) {
312 std::string names = get_value (node, "prev_samp");
313 std::string::size_type pos = 0;
314 for (;;) {
315 std::string::size_type next;
316 next = names.find_first_not_of (" ", pos);
317 if (next == std::string::npos) break;
318 pos = next;
319 next = names.find_first_of (" ", pos);
320 std::string name;
321 name = names.substr (pos, next - pos);
322 parser.m_region->add_prev_samp_name (name);
323 if (next == std::string::npos) {
324 break;
325 } else {
326 pos = next;
327 }
328 }
329 }
330 // Look for regions in the next sampling
331 if (has_attribute (node, "next_samp")) {
332 std::string names = get_value (node, "next_samp");
333 std::string::size_type pos = 0;
334 for (;;) {
335 std::string::size_type next;
336
337 next = names.find_first_not_of (" ", pos);
338 if (next == std::string::npos) break;
339 pos = next;
340 next = names.find_first_of (" ", pos);
341
342 std::string name;
343 name = names.substr (pos, next - pos);
344 parser.m_region->add_next_samp_name (name);
345
346 if (next == std::string::npos) {
347 break;
348 } else {
349 pos = next;
350 }
351 }
352 }
353 // Look for regions in the prev subdet
354 if (has_attribute (node, "prev_subdet")) {
355 std::string names = get_value (node, "prev_subdet");
356 std::string::size_type pos = 0;
357 for (;;) {
358 std::string::size_type prev;
359 prev = names.find_first_not_of (" ", pos);
360 if (prev == std::string::npos) break;
361 pos = prev;
362 prev = names.find_first_of (" ", pos);
363 std::string name;
364 name = names.substr (pos, prev - pos);
365 parser.m_region->add_prev_subdet_name (name);
366 if (prev == std::string::npos) {
367 break;
368 } else {
369 pos = prev;
370 }
371 }
372 }
373 // Look for regions in the next subdet
374 if (has_attribute (node, "next_subdet")) {
375 std::string names = get_value (node, "next_subdet");
376 std::string::size_type pos = 0;
377 for (;;) {
378 std::string::size_type next;
379 next = names.find_first_not_of (" ", pos);
380 if (next == std::string::npos) break;
381 pos = next;
382 next = names.find_first_of (" ", pos);
383 std::string name;
384 name = names.substr (pos, next - pos);
385 parser.m_region->add_next_subdet_name (name);
386 if (next == std::string::npos) {
387 break;
388 } else {
389 pos = next;
390 }
391 }
392 }
393
394 parser.m_region->set_etaphi (get_double (node, "eta0"),
395 get_double (node, "deta"),
396 get_double (node, "phi0"),
397 get_double (node, "dphi"));
398
399 if (Debugger::debug ()) {
400 Debugger::tab (parser.level());
401 std::cout << "RegionFactory::idd_start> name, group, tag, next eta, prev/next samp, prev/next subdet "
402 << parser.m_region->name() << " "
403 << parser.m_region->group_name() << " "
404 << parser.m_region->tag() << " "
405 << parser.m_region->next_abs_eta() << " ";
406 for (const std::string& s : parser.m_region->prev_samp_names()) {
407 std::cout << s << " ";
408 }
409 for (const std::string& s : parser.m_region->next_samp_names()) {
410 std::cout << s << " ";
411 }
412 for (const std::string& s : parser.m_region->prev_subdet_names()) {
413 std::cout << s << " ";
414 }
415 for (const std::string& s : parser.m_region->next_subdet_names()) {
416 std::cout << s << " ";
417 }
418 std::cout << parser.m_region->eta0() << " "
419 << parser.m_region->deta() << " "
420 << parser.m_region->phi0() << " "
421 << parser.m_region->dphi() << " "
422 << std::endl;
423 }
424}
static bool has_attribute(const XMLCoreNode &node, const std::string &name)
static double get_double(const XMLCoreNode &node, const std::string &name)

◆ start()

void XMLCoreFactory::start ( XMLCoreParser & parser,
const XMLCoreNode & node )
inherited

Definition at line 42 of file XMLCoreParser.cxx.

42 {
43 if (XMLCoreParserDebugger::debug ()){
44 std::cout << "XMLCoreFactory::start> factory=" << this << std::endl;
45 }
46 do_start (parser, node);
47}
virtual void do_start(XMLCoreParser &parser, const XMLCoreNode &node)

Member Data Documentation

◆ m_xmlelementname

std::string XMLCoreFactory::m_xmlelementname
protectedinherited

Definition at line 43 of file XMLCoreParser.h.


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