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 #include "DataFormats/DetId/interface/DetId.h"
00013 #include "DataFormats/EcalDetId/interface/EcalSubdetector.h"
00014
00015 #include "CondTools/Ecal/interface/EcalTPGCrystalStatusXMLTranslator.h"
00016 #include "CondTools/Ecal/interface/DOMHelperFunctions.h"
00017 #include "CondTools/Ecal/interface/XMLTags.h"
00018
00019 #include "CondFormats/DataRecord/interface/EcalTPGCrystalStatusRcd.h"
00020 #include "CondFormats/EcalObjects/interface/EcalTPGCrystalStatus.h"
00021
00022 using namespace XERCES_CPP_NAMESPACE;
00023 using namespace xuti;
00024 using namespace std;
00025
00026 int EcalTPGCrystalStatusXMLTranslator::writeXML(const std::string& filename,
00027 const EcalCondHeader& header,
00028 const EcalTPGCrystalStatus& record){
00029 std::fstream fs(filename.c_str(),ios::out);
00030 fs<< dumpXML(header,record);
00031 return 0;
00032 }
00033
00034 std::string EcalTPGCrystalStatusXMLTranslator::dumpXML(const EcalCondHeader& header,const EcalTPGCrystalStatus& record){
00035
00036 XMLPlatformUtils::Initialize();
00037 DOMImplementation* impl =
00038 DOMImplementationRegistry::getDOMImplementation(fromNative("LS").c_str());
00039
00040 DOMWriter* writer =static_cast<DOMImplementationLS*>(impl)->createDOMWriter( );
00041 writer->setFeature(XMLUni::fgDOMWRTFormatPrettyPrint, true);
00042
00043 DOMDocumentType* doctype = impl->createDocumentType(fromNative("XML").c_str(), 0, 0 );
00044 DOMDocument * doc =
00045 impl->createDocument( 0, fromNative(TPGCrystalStatus_tag).c_str(), doctype );
00046
00047 doc->setEncoding(fromNative("UTF-8").c_str() );
00048 doc->setStandalone(true);
00049 doc->setVersion(fromNative("1.0").c_str() );
00050
00051 DOMElement* root = doc->getDocumentElement();
00052
00053 xuti::writeHeader(root,header);
00054
00055 const int kSides = 2;
00056 const int kBarlRings = EBDetId::MAX_IETA;
00057 const int kBarlWedges = EBDetId::MAX_IPHI;
00058 const int kEndcWedgesX = EEDetId::IX_MAX;
00059 const int kEndcWedgesY = EEDetId::IY_MAX;
00060
00061 std::cout << "EcalTPGCrystalStatusXMLTranslator::dumpXML" << std::endl;
00062 for (int sign=0; sign < kSides; sign++) {
00063 int thesign = sign==1 ? 1:-1;
00064
00065 for (int ieta=0; ieta<kBarlRings; ieta++) {
00066 for (int iphi=0; iphi<kBarlWedges; iphi++) {
00067 EBDetId id((ieta+1)*thesign, iphi+1);
00068 if(record[id.rawId()].getStatusCode() > 0) {
00069 DOMElement* cellnode=writeCell(root, id);
00070 WriteNodeWithValue(cellnode, TPGCrystalStatus_tag, record[id.rawId()].getStatusCode());
00071 }
00072 }
00073 }
00074
00075 for (int ix=0; ix<kEndcWedgesX; ix++) {
00076 for (int iy=0; iy<kEndcWedgesY; iy++) {
00077 if (! EEDetId::validDetId(ix+1,iy+1,thesign)) continue;
00078 EEDetId id(ix+1,iy+1,thesign);
00079 if(record[id.rawId()].getStatusCode() > 0) {
00080 DOMElement* cellnode=writeCell(root, id);
00081 WriteNodeWithValue(cellnode, TPGCrystalStatus_tag, record[id.rawId()].getStatusCode());
00082 }
00083 }
00084 }
00085 }
00086
00087 std::string dump = toNative(writer->writeToString(*root));
00088 doc->release();
00089 return dump;
00090 }