CMS 3D CMS Logo

EcalClusterEnergyCorrectionObjectSpecificXMLTranslator.cc
Go to the documentation of this file.
1 #include <iostream>
2 #include <sstream>
3 #include <fstream>
4 
5 #include <xercesc/dom/DOMNode.hpp>
6 #include <xercesc/dom/DOM.hpp>
7 #include <xercesc/parsers/XercesDOMParser.hpp>
10 #include <xercesc/util/XMLString.hpp>
11 #include <xercesc/sax/SAXException.hpp>
12 #include <xercesc/framework/LocalFileFormatTarget.hpp>
13 
16 
17 using namespace XERCES_CPP_NAMESPACE;
18 using namespace xuti;
19 using namespace std;
20 
21 
22 int
24  const string& filename,
27 
29 
30  XercesDOMParser* parser = new XercesDOMParser;
31  parser->setValidationScheme( XercesDOMParser::Val_Never );
32  parser->setDoNamespaces( false );
33  parser->setDoSchema( false );
34 
35  parser->parse(filename.c_str());
36 
37  DOMDocument* xmlDoc = parser->getDocument();
38 
39 
40  if (!xmlDoc) {
41  std::cout << "EcalClusterEnergyCorrectionObjectSpecificXMLTranslator::Error parsing document"
42  << std::endl;
43  return -1;
44  }
45 
46  DOMElement* elementRoot = xmlDoc->getDocumentElement();
47 
48  xuti::readHeader(elementRoot, header);
49 
50  // need some extra code here
51 
52  delete parser;
54  return 0;
55 }
56 
59  const EcalCondHeader& header,
60  const EcalFunParams& record) {
61 
62  unique_ptr<DOMImplementation> impl( DOMImplementationRegistry::getDOMImplementation( cms::xerces::uStr("LS").ptr()));
63 
64  DOMLSSerializer* writer = impl->createLSSerializer();
65  if( writer->getDomConfig()->canSetParameter( XMLUni::fgDOMWRTFormatPrettyPrint, true ))
66  writer->getDomConfig()->setParameter( XMLUni::fgDOMWRTFormatPrettyPrint, true );
67 
68  DOMDocumentType* doctype =
69  impl->createDocumentType( cms::xerces::uStr("XML").ptr(), nullptr, nullptr );
70  const std::string ECECOS_tag("EcalClusterEnergyCorrectionObjectSpecific");
71  DOMDocument * doc =
72  impl->createDocument( nullptr, cms::xerces::uStr(ECECOS_tag.c_str()).ptr(), doctype );
73 
74  DOMElement* root = doc->getDocumentElement();
75  xuti::writeHeader(root, header);
76 
77  const std::string ECEC_tag[9] = {"fEta","fBremEtaElectrons","fBremEtaPhotons",
78  "fEtElectronsEB","fEtElectronsEE","fEtPhotonsEB","fEtPhotonsEE",
79  "fEnergyElectronsEE","fEnergyPhotonsEE"};
80  int tit = 0;
81  int par = 0;
82  for ( EcalFunctionParameters::const_iterator it = record.params().begin(); it != record.params().end(); ++it ) {
83  if(par < 2) tit = 0;
84  else if(par < 86) tit = 1;
85  else if(par < 170) tit = 2;
86  else if(par < 177) tit = 3;
87  else if(par < 184) tit = 4;
88  else if(par < 191) tit = 5;
89  else if(par < 198) tit = 6;
90  else if(par < 203) tit = 7;
91  else tit = 8;
92  DOMElement* ECEC =
93  root->getOwnerDocument()->createElement( cms::xerces::uStr(ECEC_tag[tit].c_str()).ptr());
94  root->appendChild(ECEC);
95 
96  WriteNodeWithValue(ECEC,Value_tag,*it);
97  par++;
98  }
99  std::cout << "\n";
100 
101  std::string dump = cms::xerces::toString(writer->writeToString( root ));
102  doc->release();
103  doctype->release();
104  writer->release();
105 
106  return dump;
107 }
108 
109 int
111  const std::string& filename,
112  const EcalCondHeader& header,
113  const EcalFunParams& record) {
114 
116 
117  std::fstream fs(filename.c_str(),ios::out);
118  fs<< dumpXML(header,record);
119 
121 
122  return 0;
123 }
def dumpXML(db, tag, since, filename='dump.xml')
JetCorrectorParameters::Record record
Definition: classes.h:7
void xercesTerminate()
Definition: Xerces.cc:23
static int writeXML(const std::string &filename, const EcalCondHeader &header, const EcalFunParams &record)
void xercesInitialize()
Definition: Xerces.cc:18
void WriteNodeWithValue(xercesc::DOMNode *parentNode, const std::string &tag, const T &value)
write a node with
const std::string Value_tag("Value")
std::string toString(XMLCh const *toTranscode)
static int readXML(const std::string &filename, EcalCondHeader &header, EcalFunParams &record)
void readHeader(xercesc::DOMNode *parentNode, EcalCondHeader &header)
read header from
EcalFunctionParameters & params()
void writeHeader(xercesc::DOMNode *parentNode, const EcalCondHeader &header)
write
ZStr< XMLCh > uStr(char const *str)
static std::string dumpXML(const EcalCondHeader &header, const EcalFunParams &record)