18 #include "xercesc/framework/StdOutFormatTarget.hpp"
19 #include "xercesc/framework/LocalFileFormatTarget.hpp"
20 #include "xercesc/parsers/XercesDOMParser.hpp"
21 #include "xercesc/dom/DOM.hpp"
22 #include "xercesc/dom/DOMException.hpp"
23 #include "xercesc/dom/DOMImplementation.hpp"
24 #include "xercesc/sax/HandlerBase.hpp"
25 #include "xercesc/util/XMLString.hpp"
26 #include "xercesc/util/PlatformUtils.hpp"
27 #include "xercesc/util/XercesDefs.hpp"
28 #include "xercesc/util/XercesVersion.hpp"
29 XERCES_CPP_NAMESPACE_USE
31 #if _XERCES_VERSION <30100
32 #include "xercesc/dom/DOMWriter.hpp"
34 #include "xercesc/dom/DOMLSSerializer.hpp"
35 #include "xercesc/dom/DOMLSOutput.hpp"
55 XMLPlatformUtils::Initialize();
58 domImpl = DOMImplementationRegistry::getDOMImplementation(
_toDOMS(
"Range"));
71 unsigned int mask32bits =
pow(2,32)-1;
75 std::ostringstream stringStr;
77 stringStr<<
"0x"<<std::hex<<std::setfill(
'0')<<std::setw(8)<<
version;
85 XMLFormatTarget* formTarget =
new LocalFileFormatTarget(fName.c_str());
87 #if _XERCES_VERSION <30100
88 xercesc::DOMWriter* domWriter = (
dynamic_cast<DOMImplementation*
>(
domImpl))->createDOMWriter();
89 if(domWriter->canSetFeature(XMLUni::fgDOMWRTFormatPrettyPrint,
true)){
90 domWriter->setFeature(XMLUni::fgDOMWRTFormatPrettyPrint,
true);
95 xercesc::DOMLSSerializer* theSerializer = (
dynamic_cast<DOMImplementation*
>(
domImpl))->createLSSerializer();
96 if (theSerializer->getDomConfig()->canSetParameter(XMLUni::fgDOMWRTFormatPrettyPrint,
true))
97 theSerializer->getDomConfig()->setParameter(XMLUni::fgDOMWRTFormatPrettyPrint,
true);
98 DOMLSOutput* theOutput = (
dynamic_cast<DOMImplementation*
>(
domImpl))->createLSOutput();
99 theOutput->setByteStream(formTarget);
101 theOutput->release();
102 theSerializer->release();
110 unsigned int mixedEventId){
112 unsigned int eventBx = eventId*2;
114 xercesc::DOMElement *aEvent = 0;
115 xercesc::DOMElement *aBx = 0;
116 std::ostringstream stringStr;
122 aEvent->setAttribute(
_toDOMS(
"iEvent"),
_toDOMS(stringStr.str()));
125 stringStr<<mixedEventId;
126 aEvent->setAttribute(
_toDOMS(
"iMixedEvent"),
_toDOMS(stringStr.str()));
132 aEvent->appendChild(aBx);
141 unsigned int iProcessor,
144 std::ostringstream stringStr;
146 xercesc::DOMElement *aProcessor =
theDoc->createElement(
_toDOMS(
"Processor"));
148 stringStr<<iProcessor;
149 aProcessor->setAttribute(
_toDOMS(
"iProcessor"),
_toDOMS(stringStr.str()));
151 xercesc::DOMElement *aLayer, *aHit;
159 aLayer->setAttribute(
_toDOMS(
"iLayer"),
_toDOMS(stringStr.str()));
160 for(
unsigned int iHit=0;iHit<layerDataPhi.size();++iHit){
166 stringStr<<layerDataPhi[iHit];
169 stringStr<<layerDataEta[iHit];
172 aLayer->appendChild(aHit);
174 if(aLayer->getChildNodes()->getLength()) aProcessor->appendChild(aLayer);
177 aTopElement->appendChild(aProcessor);
184 unsigned int iRefHit,
187 xercesc::DOMElement* aResult =
theDoc->createElement(
_toDOMS(
"AlgoMuon"));
188 std::ostringstream stringStr;
191 aResult->setAttribute(
_toDOMS(
"iRefHit"),
_toDOMS(stringStr.str()));
193 stringStr<<aCand.
getPt();
194 aResult->setAttribute(
_toDOMS(
"ptCode"),
_toDOMS(stringStr.str()));
196 stringStr<<aCand.
getPhi();
197 aResult->setAttribute(
_toDOMS(
"phiCode"),
_toDOMS(stringStr.str()));
199 stringStr<<aCand.
getEta();
200 aResult->setAttribute(
_toDOMS(
"etaCode"),
_toDOMS(stringStr.str()));
203 aResult->setAttribute(
_toDOMS(
"charge"),
_toDOMS(stringStr.str()));
205 stringStr<<aCand.
getQ();
206 aResult->setAttribute(
_toDOMS(
"nHits"),
_toDOMS(stringStr.str()));
212 aResult->setAttribute(
_toDOMS(
"iRefLayer"),
_toDOMS(stringStr.str()));
214 stringStr<<std::bitset<18>(aCand.
getHits());
215 aResult->setAttribute(
_toDOMS(
"layers"),
_toDOMS(stringStr.str()));
218 aResult->setAttribute(
_toDOMS(
"phiRHit"),
_toDOMS(stringStr.str()));
220 aTopElement->appendChild(aResult);
225 unsigned int iRegion,
231 std::ostringstream stringStr;
233 xercesc::DOMElement* aGP =
theDoc->createElement(
_toDOMS(
"GP"));
249 xercesc::DOMElement* aRefLayer =
theDoc->createElement(
_toDOMS(
"Result"));
251 stringStr<<iRefLayer;
252 aRefLayer->setAttribute(
_toDOMS(
"iRefLayer"),
_toDOMS(stringStr.str()));
255 aRefLayer->setAttribute(
_toDOMS(
"iRegion"),
_toDOMS(stringStr.str()));
258 aRefLayer->setAttribute(
_toDOMS(
"iLogicLayer"),
_toDOMS(stringStr.str()));
260 xercesc::DOMElement* aLayer =
theDoc->createElement(
_toDOMS(
"Layer"));
262 stringStr<<iLogicLayer;
263 aLayer->setAttribute(
_toDOMS(
"iLayer"),
_toDOMS(stringStr.str()));
265 stringStr<<results[iLogicLayer][iRefLayer];
267 if(results[iLogicLayer][iRefLayer]) aRefLayer->appendChild(aLayer);
269 if(aRefLayer->getChildNodes()->getLength()) aGP->appendChild(aRefLayer);
271 if(aGP->getChildNodes()->getLength()) aTopElement->appendChild(aGP);
277 std::ostringstream stringStr;
278 xercesc::DOMElement *aLayer=0, *aRefLayer=0, *aPdf=0;
280 xercesc::DOMElement* aGPElement =
theDoc->createElement(
_toDOMS(
"GP"));
283 aGPElement->setAttribute(
_toDOMS(
"iPt"),
_toDOMS(stringStr.str()));
287 aGPElement->setAttribute(
_toDOMS(
"iEta"),
_toDOMS(stringStr.str()));
290 aGPElement->setAttribute(
_toDOMS(
"iPhi"),
_toDOMS(stringStr.str()));
293 aGPElement->setAttribute(
_toDOMS(
"iCharge"),
_toDOMS(stringStr.str()));
302 aLayer->setAttribute(
_toDOMS(
"iLayer"),
_toDOMS(stringStr.str()));
305 aLayer->setAttribute(
_toDOMS(
"nOfPhis"),
_toDOMS(stringStr.str()));
310 stringStr<<meanDistPhi;
311 aRefLayer->setAttribute(
_toDOMS(
"meanDistPhi"),
_toDOMS(stringStr.str()));
314 stringStr<<selDistPhi;
315 aRefLayer->setAttribute(
_toDOMS(
"selDistPhi"),
_toDOMS(stringStr.str()));
316 int selDistPhiShift = 0;
318 stringStr<<selDistPhiShift;
319 aRefLayer->setAttribute(
_toDOMS(
"selDistPhiShift"),
_toDOMS(stringStr.str()));
320 int distMsbPhiShift = 0;
322 stringStr<<distMsbPhiShift;
323 aRefLayer->setAttribute(
_toDOMS(
"distMsbPhiShift"),
_toDOMS(stringStr.str()));
324 aLayer->appendChild(aRefLayer);
330 stringStr<<aGP.
pdfValue(iLayer,iRefLayer,iPdf);
332 aLayer->appendChild(aPdf);
335 aGPElement->appendChild(aLayer);
346 std::ostringstream stringStr;
347 xercesc::DOMElement *aLayer=0, *aRefLayer=0, *aPdf=0;
349 xercesc::DOMElement* aGPElement =
theDoc->createElement(
_toDOMS(
"GP"));
353 aGPElement->setAttribute(
_toDOMS(
"iPt1"),
_toDOMS(stringStr.str()));
357 aGPElement->setAttribute(
_toDOMS(
"iPt2"),
_toDOMS(stringStr.str()));
361 aGPElement->setAttribute(
_toDOMS(
"iPt3"),
_toDOMS(stringStr.str()));
365 aGPElement->setAttribute(
_toDOMS(
"iPt4"),
_toDOMS(stringStr.str()));
370 aGPElement->setAttribute(
_toDOMS(
"iEta"),
_toDOMS(stringStr.str()));
373 aGPElement->setAttribute(
_toDOMS(
"iPhi"),
_toDOMS(stringStr.str()));
377 aGPElement->setAttribute(
_toDOMS(
"iCharge"),
_toDOMS(stringStr.str()));
386 aLayer->setAttribute(
_toDOMS(
"iLayer"),
_toDOMS(stringStr.str()));
389 aLayer->setAttribute(
_toDOMS(
"nOfPhis"),
_toDOMS(stringStr.str()));
395 stringStr<<meanDistPhi;
396 aRefLayer->setAttribute(
_toDOMS(
"meanDistPhi"),
_toDOMS(stringStr.str()));
405 stringStr<<selDistPhi;
406 aRefLayer->setAttribute(
_toDOMS(
"selDistPhi"),
_toDOMS(stringStr.str()));
407 int selDistPhiShift = 0;
409 stringStr<<selDistPhiShift;
410 aRefLayer->setAttribute(
_toDOMS(
"selDistPhiShift"),
_toDOMS(stringStr.str()));
411 int distMsbPhiShift = 0;
413 stringStr<<distMsbPhiShift;
414 aRefLayer->setAttribute(
_toDOMS(
"distMsbPhiShift"),
_toDOMS(stringStr.str()));
415 aLayer->appendChild(aRefLayer);
421 stringStr<<aGP1.
pdfValue(iLayer,iRefLayer,iPdf);
424 stringStr<<aGP2.
pdfValue(iLayer,iRefLayer,iPdf);
427 stringStr<<aGP3.
pdfValue(iLayer,iRefLayer,iPdf);
430 stringStr<<aGP4.
pdfValue(iLayer,iRefLayer,iPdf);
432 aLayer->appendChild(aPdf);
435 aGPElement->appendChild(aLayer);
443 std::ostringstream stringStr;
445 for(
unsigned int iProcessor=0;iProcessor<6;++iProcessor){
446 xercesc::DOMElement* aProcessorElement =
theDoc->createElement(
_toDOMS(
"Processor"));
448 stringStr<<iProcessor;
449 aProcessorElement->setAttribute(
_toDOMS(
"iProcessor"),
_toDOMS(stringStr.str()));
451 xercesc::DOMElement* aRefLayerElement =
theDoc->createElement(
_toDOMS(
"RefLayer"));
453 stringStr<<iRefLayer;
454 aRefLayerElement->setAttribute(
_toDOMS(
"iRefLayer"),
_toDOMS(stringStr.str()));
457 aRefLayerElement->setAttribute(
_toDOMS(
"iGlobalPhiStart"),
_toDOMS(stringStr.str()));
458 aProcessorElement->appendChild(aRefLayerElement);
460 unsigned int iRefHit = 0;
463 for(
unsigned int iRegion=0;iRegion<6;++iRegion){
464 unsigned int maxHitCount = 0;
465 for(
unsigned int iInput=0;iInput<14;++iInput) {
469 for(
unsigned int iInput=0;iInput<14;++iInput){
471 if(hitCount<maxHitCount*0.1)
continue;
472 xercesc::DOMElement* aRefHitElement =
theDoc->createElement(
_toDOMS(
"RefHit"));
475 aRefHitElement->setAttribute(
_toDOMS(
"iRefHit"),
_toDOMS(stringStr.str()));
477 stringStr<<iRefLayer;
478 aRefHitElement->setAttribute(
_toDOMS(
"iRefLayer"),
_toDOMS(stringStr.str()));
482 aRefHitElement->setAttribute(
_toDOMS(
"iRegion"),
_toDOMS(stringStr.str()));
486 aRefHitElement->setAttribute(
_toDOMS(
"iInput"),
_toDOMS(stringStr.str()));
491 int iPhiMax = iPhiMin+logicRegionSize-1;
493 iPhiMin+=iRegion*logicRegionSize;
494 iPhiMax+=iRegion*logicRegionSize;
498 aRefHitElement->setAttribute(
_toDOMS(
"iPhiMin"),
_toDOMS(stringStr.str()));
502 aRefHitElement->setAttribute(
_toDOMS(
"iPhiMax"),
_toDOMS(stringStr.str()));
503 if(iRefHit<myOMTFConfig->nRefHits()) aProcessorElement->appendChild(aRefHitElement);
507 xercesc::DOMElement* aRefHitElement =
theDoc->createElement(
_toDOMS(
"RefHit"));
510 aRefHitElement->setAttribute(
_toDOMS(
"iRefHit"),
_toDOMS(stringStr.str()));
513 aRefHitElement->setAttribute(
_toDOMS(
"iRefLayer"),
_toDOMS(stringStr.str()));
517 aRefHitElement->setAttribute(
_toDOMS(
"iRegion"),
_toDOMS(stringStr.str()));
521 aRefHitElement->setAttribute(
_toDOMS(
"iInput"),
_toDOMS(stringStr.str()));
528 aRefHitElement->setAttribute(
_toDOMS(
"iPhiMin"),
_toDOMS(stringStr.str()));
532 aRefHitElement->setAttribute(
_toDOMS(
"iPhiMax"),
_toDOMS(stringStr.str()));
534 aProcessorElement->appendChild(aRefHitElement);
539 for(
unsigned int iRegion=0;iRegion<6;++iRegion){
540 xercesc::DOMElement* aRegionElement =
theDoc->createElement(
_toDOMS(
"LogicRegion"));
543 aRegionElement->setAttribute(
_toDOMS(
"iRegion"),
_toDOMS(stringStr.str()));
546 xercesc::DOMElement* aLayerElement =
theDoc->createElement(
_toDOMS(
"Layer"));
548 stringStr<<iLogicLayer;
550 aLayerElement->setAttribute(
_toDOMS(
"iLayer"),
_toDOMS(stringStr.str()));
554 if((
int)maxInput-2>=0) begin = maxInput-2;
555 else begin = maxInput;
559 aLayerElement->setAttribute(
_toDOMS(
"iFirstInput"),
_toDOMS(stringStr.str()));
561 stringStr<<
end-begin+1;
562 aLayerElement->setAttribute(
_toDOMS(
"nInputs"),
_toDOMS(stringStr.str()));
563 aRegionElement->appendChild(aLayerElement);
565 aProcessorElement->appendChild(aRegionElement);
574 unsigned int max = 0;
575 unsigned int maxInput = 0;
576 for(
unsigned int iInput=0;iInput<14;++iInput){
577 if(myCounts[iInput]>(
int)max){
578 max = myCounts[iInput];
void writeConnectionsData(const std::vector< std::vector< OMTFConfiguration::vector2D > > &measurements4D)
XMLConfigWriter(const OMTFConfiguration *aOMTFConfig)
unsigned int nRefLayers() const
unsigned int nRefHits() const
unsigned int fwVersion() const
void initialiseXMLDocument(const std::string &docName)
std::string _toString(const XMLCh *toTranscode)
xercesc::DOMElement * writeEventData(xercesc::DOMElement *aTopElement, unsigned int iProcessor, const OMTFinput &aInput)
unsigned int nLayers() const
unsigned int nPhiBins() const
const OMTFResult::vector2D & getResults() const
unsigned int nPhiBits() const
unsigned int nPdfAddrBits() const
void writeResultsData(xercesc::DOMElement *aTopElement, unsigned int iRegion, const Key &aKey, const OMTFResult &aResult)
const std::vector< std::vector< int > > & getProcessorPhiVsRefLayer() const
unsigned int findMaxInput(const OMTFConfiguration::vector1D &myCounts)
XMLCh * transcode(const T &fInput)
std::vector< int > vector1D
xercesc::DOMImplementation * domImpl
const OMTFConfiguration * myOMTFConfig
std::vector< vector1D > vector2D
int globalPhiStart(unsigned int iProcessor) const
int pdfValue(unsigned int iLayer, unsigned int iRefLayer, unsigned int iBin) const
const std::vector< int > & getRefToLogicNumber() const
std::vector< std::vector< double > > tmp
XMLCh * _toDOMS(std::string temp)
void finaliseXMLDocument(const std::string &fName)
xercesc::DOMElement * writeEventHeader(unsigned int eventId, unsigned int mixedEventId=0)
xercesc::DOMDocument * theDoc
int meanDistPhiValue(unsigned int iLayer, unsigned int iRefLayer) const
xercesc::DOMElement * theTopElement
vector4D & getMeasurements4Dref()
Power< A, B >::type pow(const A &a, const B &b)
void writeCandidateData(xercesc::DOMElement *aTopElement, unsigned int iRefHit, const AlgoMuon &aCand)
void writeGPData(const GoldenPattern &aGP)
vector4D & getMeasurements4D()