Go to the documentation of this file.00001 #include <iostream>
00002 #include <sstream>
00003 #include <fstream>
00004 #include <xercesc/dom/DOMNode.hpp>
00005 #include <xercesc/dom/DOM.hpp>
00006 #include <xercesc/parsers/XercesDOMParser.hpp>
00007 #include <xercesc/util/PlatformUtils.hpp>
00008 #include <xercesc/util/XMLString.hpp>
00009 #include <xercesc/sax/SAXException.hpp>
00010 #include <xercesc/framework/LocalFileFormatTarget.hpp>
00011
00012
00013 #include "CondFormats/EcalObjects/interface/EcalLaserAPDPNRatios.h"
00014 #include "CondTools/Ecal/interface/EcalLaserAPDPNRatiosXMLTranslator.h"
00015
00016 #include "CondTools/Ecal/interface/DOMHelperFunctions.h"
00017 #include "CondTools/Ecal/interface/XMLTags.h"
00018
00019 using namespace XERCES_CPP_NAMESPACE;
00020 using namespace xuti;
00021 using namespace std;
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031 int EcalLaserAPDPNRatiosXMLTranslator::readXML(const std::string& filename,
00032 EcalCondHeader& header,
00033 EcalLaserAPDPNRatios& record){
00034
00035
00036
00037 XMLPlatformUtils::Initialize();
00038
00039 XercesDOMParser* parser = new XercesDOMParser;
00040 parser->setValidationScheme( XercesDOMParser::Val_Never );
00041 parser->setDoNamespaces( false );
00042 parser->setDoSchema( false );
00043
00044 parser->parse(filename.c_str());
00045
00046 DOMDocument* xmlDoc = parser->getDocument();
00047 if (!xmlDoc) {
00048 std::cout << "EcalLaserAPDPNRatiosXMLTranslator::Error parsing document" << std::endl;
00049 return -1;
00050 }
00051
00052 DOMElement* elementRoot = xmlDoc->getDocumentElement();
00053
00054 xuti::readHeader(elementRoot,header);
00055
00056 DOMNode * cellnode = getChildNode(elementRoot,Cell_tag);
00057
00058 while(cellnode)
00059 {
00060 float p1 = 0;
00061 float p2 = 0;
00062 float p3 = 0;
00063
00064
00065
00066
00067
00068 DetId detid = readCellId(dynamic_cast<DOMElement*>(cellnode));
00069
00070 DOMNode* p1_node = getChildNode(cellnode,Laser_p1_tag);
00071 GetNodeData(p1_node,p1);
00072
00073 DOMNode* p2_node = getChildNode(cellnode,Laser_p2_tag);
00074 GetNodeData(p2_node,p2);
00075
00076 DOMNode* p3_node = getChildNode(cellnode,Laser_p3_tag);
00077 GetNodeData(p3_node,p3);
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089 EcalLaserAPDPNRatios::EcalLaserAPDPNpair pair;
00090 pair.p1 =p1;
00091 pair.p2 =p2;
00092 pair.p3 =p3;
00093
00094 record.setValue(detid,pair);
00095
00096 cellnode = cellnode->getNextSibling();
00097
00098 while(cellnode && cellnode->getNodeType() != DOMNode::ELEMENT_NODE)
00099 cellnode = cellnode->getNextSibling();
00100
00101
00102 }
00103
00104 delete parser;
00105 XMLPlatformUtils::Terminate();
00106 return 0;
00107
00108
00109 }
00110
00111
00112
00113
00114
00115 int EcalLaserAPDPNRatiosXMLTranslator::writeXML(const std::string& filename,
00116 const EcalCondHeader& header,
00117 const EcalLaserAPDPNRatios& record){
00118 std::fstream fs(filename.c_str(),ios::out);
00119 fs<< dumpXML(header,record);
00120 return 0;
00121 }
00122
00123
00124 std::string EcalLaserAPDPNRatiosXMLTranslator::dumpXML(
00125 const EcalCondHeader& header,
00126 const EcalLaserAPDPNRatios& record){
00127
00128
00129 XMLPlatformUtils::Initialize();
00130
00131 DOMImplementation* impl =
00132 DOMImplementationRegistry::getDOMImplementation(fromNative("LS").c_str());
00133
00134 DOMWriter* writer =static_cast<DOMImplementationLS*>(impl)->createDOMWriter( );
00135 writer->setFeature(XMLUni::fgDOMWRTFormatPrettyPrint, true);
00136
00137 DOMDocumentType* doctype = impl->createDocumentType( fromNative("XML").c_str(), 0, 0 );
00138 DOMDocument * doc =
00139 impl->createDocument( 0, fromNative(Laser_tag).c_str(), doctype );
00140
00141
00142 doc->setEncoding(fromNative("UTF-8").c_str() );
00143 doc->setStandalone(true);
00144 doc->setVersion(fromNative("1.0").c_str() );
00145
00146
00147 DOMElement* root = doc->getDocumentElement();
00148
00149 xuti::writeHeader(root,header);
00150
00151 for(int cellid = EBDetId::MIN_HASH;
00152 cellid < EBDetId::kSizeForDenseIndexing;
00153 ++cellid)
00154 {
00155
00156 uint32_t rawid = EBDetId::unhashIndex(cellid);
00157
00158 DOMElement* cellnode= writeCell(root,rawid);
00159
00160 float p1=(record.getLaserMap())[rawid].p1;
00161 float p2=(record.getLaserMap())[rawid].p2;
00162 float p3=(record.getLaserMap())[rawid].p3;
00163
00164
00165
00166
00167
00168 WriteNodeWithValue(cellnode,Laser_p1_tag,p1);
00169 WriteNodeWithValue(cellnode,Laser_p2_tag,p2);
00170 WriteNodeWithValue(cellnode,Laser_p3_tag,p3);
00171
00172
00173
00174
00175 }
00176
00177
00178
00179
00180 for(int cellid = 0;
00181 cellid < EEDetId::kSizeForDenseIndexing;
00182 ++cellid)
00183 {
00184
00185 if(!EEDetId::validHashIndex(cellid)) continue;
00186
00187 uint32_t rawid = EEDetId::unhashIndex(cellid);
00188
00189
00190 DOMElement* cellnode=writeCell(root,rawid);
00191
00192 float p1=(record.getLaserMap())[rawid].p1;
00193 float p2=(record.getLaserMap())[rawid].p2;
00194 float p3=(record.getLaserMap())[rawid].p3;
00195
00196
00197
00198
00199
00200 WriteNodeWithValue(cellnode,Laser_p1_tag,p1);
00201 WriteNodeWithValue(cellnode,Laser_p2_tag,p2);
00202 WriteNodeWithValue(cellnode,Laser_p3_tag,p3);
00203
00204
00205
00206
00207
00208
00209 }
00210
00211
00212 std::string dump= toNative(writer->writeToString(*root));
00213 doc->release();
00214
00215
00216 return dump;
00217
00218 }