CMS 3D CMS Logo

EcalTimeBiasCorrectionsXMLTranslator.cc
Go to the documentation of this file.
1 #include <iostream>
2 #include <sstream>
3 #include <fstream>
4 #include <xercesc/dom/DOMNode.hpp>
5 #include <xercesc/dom/DOM.hpp>
6 #include <xercesc/parsers/XercesDOMParser.hpp>
9 #include <xercesc/util/XMLString.hpp>
10 #include <xercesc/sax/SAXException.hpp>
11 #include <xercesc/framework/LocalFileFormatTarget.hpp>
12 
16 
17 using namespace XERCES_CPP_NAMESPACE;
18 using namespace xuti;
19 using namespace std;
20 
24 
26 
27  XercesDOMParser* parser = new XercesDOMParser;
28  parser->setValidationScheme( XercesDOMParser::Val_Never );
29  parser->setDoNamespaces( false );
30  parser->setDoSchema( false );
31 
32  parser->parse(filename.c_str());
33 
34  DOMDocument* xmlDoc = parser->getDocument();
35  if (!xmlDoc) {
36  std::cout << "EcalTimeBiasCorrectionsXMLTranslator::Error parsing document" << std::endl;
37  return -1;
38  }
39 
40  // Get the top-level element
41  DOMElement* elementRoot = xmlDoc->getDocumentElement();
42 
43  xuti::readHeader(elementRoot, header);
44 
45  delete parser;
47  return 0;
48 }
49 
51  const EcalCondHeader& header,
54 
55  std::fstream fs(filename.c_str(),ios::out);
56  fs<< dumpXML(header,record);
57 
59 
60  return 0;
61 }
62 
65 
66  unique_ptr<DOMImplementation> impl( DOMImplementationRegistry::getDOMImplementation(cms::xerces::uStr("LS").ptr()));
67 
68  DOMLSSerializer* writer = impl->createLSSerializer();
69  if( writer->getDomConfig()->canSetParameter( XMLUni::fgDOMWRTFormatPrettyPrint, true ))
70  writer->getDomConfig()->setParameter( XMLUni::fgDOMWRTFormatPrettyPrint, true );
71 
72  DOMDocumentType* doctype = impl->createDocumentType( cms::xerces::uStr("XML").ptr(), nullptr, nullptr );
73  DOMDocument* doc =
74  impl->createDocument( nullptr, cms::xerces::uStr(IntercalibConstants_tag.c_str()).ptr(), doctype );
75  DOMElement* root = doc->getDocumentElement();
76 
77  xuti::writeHeader(root,header);
78 
79  std::vector<float> vect = record.EBTimeCorrAmplitudeBins;
80  std::vector<float>::iterator it;
81 
82  std::string ETCAB_tag = "EBTimeCorrAmplitudeBins";
83  // std::cout << ETCAB_tag << vect.size()<< "\n";
84  DOMElement* ETCAB =
85  root->getOwnerDocument()->createElement( cms::xerces::uStr(ETCAB_tag.c_str()).ptr());
86  root->appendChild(ETCAB);
87  for (it = vect.begin(); it != vect.end(); it++ ) {
88  // std::cout << *it << " ";
89  WriteNodeWithValue(ETCAB, Value_tag, *it);
90  }
91  // std::cout << "\n";
92  vect = record.EBTimeCorrShiftBins;
93  ETCAB_tag = "EBTimeCorrShiftBins";
94  // std::cout << ETCAB_tag << vect.size()<< "\n";
95  ETCAB = root->getOwnerDocument()->createElement( cms::xerces::uStr(ETCAB_tag.c_str()).ptr());
96  root->appendChild(ETCAB);
97  for (it = vect.begin(); it != vect.end(); it++ ) {
98  // std::cout << *it << " ";
99  WriteNodeWithValue(ETCAB, Value_tag, *it);
100  }
101  // std::cout << "\n";
102  vect = record.EETimeCorrAmplitudeBins;
103  ETCAB_tag = "EETimeCorrAmplitudeBins";
104  // std::cout << ETCAB_tag << vect.size()<< "\n";
105  ETCAB = root->getOwnerDocument()->createElement( cms::xerces::uStr(ETCAB_tag.c_str()).ptr());
106  root->appendChild(ETCAB);
107  for (it = vect.begin(); it != vect.end(); it++ ) {
108  // std::cout << *it << " ";
109  WriteNodeWithValue(ETCAB, Value_tag, *it);
110  }
111  // std::cout << "\n";
112  vect = record.EETimeCorrShiftBins;
113  ETCAB_tag = "EETimeCorrShiftBins";
114  // std::cout << ETCAB_tag << vect.size()<< "\n";
115  ETCAB = root->getOwnerDocument()->createElement( cms::xerces::uStr(ETCAB_tag.c_str()).ptr());
116  root->appendChild(ETCAB);
117  for (it = vect.begin(); it != vect.end(); it++ ) {
118  // std::cout << *it << " ";
119  WriteNodeWithValue(ETCAB, Value_tag, *it);
120  }
121  // std::cout << "\n";
122 
123  std::string dump = cms::xerces::toString( writer->writeToString( root ));
124  doc->release();
125  doctype->release();
126  writer->release();
127 
128  return dump;
129 }
130 
static int readXML(const std::string &filename, EcalCondHeader &header, EcalTimeBiasCorrections &record)
std::vector< float > EBTimeCorrShiftBins
def dumpXML(db, tag, since, filename='dump.xml')
static int writeXML(const std::string &filename, const EcalCondHeader &header, const EcalTimeBiasCorrections &record)
JetCorrectorParameters::Record record
Definition: classes.h:7
void xercesTerminate()
Definition: Xerces.cc:23
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::vector< float > EBTimeCorrAmplitudeBins
std::vector< float > EETimeCorrShiftBins
std::string toString(XMLCh const *toTranscode)
const std::string IntercalibConstants_tag("EcalIntercalibConstants")
void readHeader(xercesc::DOMNode *parentNode, EcalCondHeader &header)
read header from
std::vector< float > EETimeCorrAmplitudeBins
void writeHeader(xercesc::DOMNode *parentNode, const EcalCondHeader &header)
write
ZStr< XMLCh > uStr(char const *str)
static std::string dumpXML(const EcalCondHeader &header, const EcalTimeBiasCorrections &record)