CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
MiscalibReaderXML.cc
Go to the documentation of this file.
5 #include <stdio.h>
6 #include <stdlib.h>
7 #include <string>
8 #include <vector>
9 
10 using namespace xercesc;
11 
12 int MiscalibReaderFromXML::s_numberOfInstances = 0; //to check that there is only 1 instance
13 
14 inline std::string _toString(const XMLCh *toTranscode){
15  std::string tmp(XMLString::transcode(toTranscode));
16  return tmp;
17 }
18 
19 inline XMLCh* _toDOMS( std::string temp ){
20  XMLCh* buff = XMLString::transcode(temp.c_str());
21  return buff;
22 }
23 
24 
25 
27 
28 
29  try {
30  //std::cout << "Xerces-c initialization Number "
31  //<< s_numberOfInstances<<std::endl;
32  if (s_numberOfInstances==0)
34  }
35  catch (const XMLException& e) {
36  std::cout << "Xerces-c error in initialization \n"
37  << "Exception message is: \n"
38  << _toString(e.getMessage()) <<std::endl;
39  // throw an exception here
40  }
41 
43 
44 
45 
46 
47 }
49 
50 
51 int MiscalibReaderFromXML::getIntAttribute(DOMNamedNodeMap * attribute, const std::string & attribute_name)
52 {
53 bool well_formed_string;
54 int retval = MiscalibReaderFromXMLDomUtils::getIntAttribute(attribute,attribute_name,well_formed_string);
55 if(!well_formed_string) std::cout << "MiscalibReaderFromXML::getIntAttribute PROBLEMS ...!!!" << std::endl;
56 
57  return retval;
58 }
59 
61 
62 double MiscalibReaderFromXML::getScalingFactor(XERCES_CPP_NAMESPACE::DOMNamedNodeMap *attribute)
63 {
64 return MiscalibReaderFromXML::getFloatAttribute(attribute,"scale_factor");
65 }
66 
68 
69 double MiscalibReaderFromXML::getFloatAttribute(DOMNamedNodeMap * attribute, const std::string & attribute_name)
70 {
71 bool well_formed_string;
72 double retval = MiscalibReaderFromXMLDomUtils::getFloatAttribute(attribute,attribute_name,well_formed_string);
73 if(!well_formed_string) std::cout << "MiscalibReaderFromXML::getFloatAttribute PROBLEMS ...!!!" << std::endl;
74 
75  return retval;
76 }
77 
79 
81 
82  XercesDOMParser* parser = new XercesDOMParser;
83  parser->setValidationScheme(XercesDOMParser::Val_Auto);
84  parser->setDoNamespaces(false);
85  parser->parse(configFile.c_str());
86  DOMDocument* doc = parser->getDocument();
87  assert(doc);
88 
89  unsigned int linkTagsNum = doc->getElementsByTagName(_toDOMS("Cell"))->getLength();
90  // The following should be on LogInfo
91  //std::cout << "Read number of Cells = " << linkTagsNum << std::endl;
92 
93  if(linkTagsNum==0) std::cout <<"Number of Cells in file is 0 - probably bad file format"<<std::endl;
94 
95  int count=0;
96  for (unsigned int i=0; i<linkTagsNum; i++){
97 
98 
99  DOMNode* linkNode = doc->getElementsByTagName(_toDOMS("Cell"))->item(i);
101  if (! linkNode){
102  std::cout<<"Node LINK does not exist, i="<<i<<std::endl;
103  return true;
104  }
105  DOMElement* linkElement = static_cast<DOMElement *>(linkNode);
106  if (! linkElement){
107  std::cout<<"Element LINK does not exist, i="<<i<<std::endl;
108  return true;
109  }
110 
111 
112  DOMNamedNodeMap *attributes = linkNode->getAttributes();
113  double scalingfactor= getScalingFactor(attributes);
114 
115 
116 
117  DetId cell = parseCellEntry(attributes);
118 
119  if(cell!= DetId(0))
120  {
121  count++;
122  caloMap_.addCell(cell,scalingfactor);
123  } else
124  {
125  // std::cout << "Null received" << std::endl;
126  }
127 
128  }
129 
130  // The following should be on LogInfo
131  // std::cout << "Number of good Cells = " << count << std::endl;
132  return false;
133 
134 }
135 
int i
Definition: DBlmapReader.cc:9
static double getFloatAttribute(XERCES_CPP_NAMESPACE::DOMNamedNodeMap *attributes, std::string attr_name, bool &well_formed_string)
static int getIntAttribute(XERCES_CPP_NAMESPACE::DOMNamedNodeMap *attributes, std::string attr_name, bool &well_formed_string)
std::string _toString(const XMLCh *toTranscode)
CaloMiscalibMap & caloMap_
bool parseXMLMiscalibFile(std::string configFile)
MiscalibReaderFromXML(CaloMiscalibMap &)
void xercesInitialize()
Definition: Xerces.cc:17
virtual void addCell(const DetId &cell, float scaling_factor)=0
double getScalingFactor(XERCES_CPP_NAMESPACE::DOMNamedNodeMap *attribute)
list attributes
Definition: asciidump.py:415
double getFloatAttribute(XERCES_CPP_NAMESPACE::DOMNamedNodeMap *attribute, const std::string &attribute_name)
tuple doc
Definition: asciidump.py:381
Definition: DetId.h:18
std::vector< std::vector< double > > tmp
Definition: MVATrainer.cc:100
XMLCh * _toDOMS(std::string temp)
tuple cout
Definition: gather_cfg.py:121
virtual DetId parseCellEntry(XERCES_CPP_NAMESPACE::DOMNamedNodeMap *attribute)=0
int getIntAttribute(XERCES_CPP_NAMESPACE::DOMNamedNodeMap *attribute, const std::string &attribute_name)