CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Public Types | Public Member Functions | Protected Member Functions | Private Attributes | Friends
lhef::LHEReader::XMLHandler Class Reference
Inheritance diagram for lhef::LHEReader::XMLHandler:
lhef::XMLDocument::Handler

Public Types

enum  Object {
  kNone = 0, kHeader, kInit, kComment,
  kEvent
}
 

Public Member Functions

void reset ()
 
 XMLHandler ()
 
 ~XMLHandler ()
 

Protected Member Functions

void characters (const XMLCh *const data, const unsigned int length)
 
void comment (const XMLCh *const data, const unsigned int length)
 
void endElement (const XMLCh *const uri, const XMLCh *const localname, const XMLCh *const qname)
 
void startElement (const XMLCh *const uri, const XMLCh *const localname, const XMLCh *const qname, const Attributes &attributes)
 

Private Attributes

std::string buffer
 
Object gotObject
 
bool headerOk
 
std::vector< LHERunInfo::Headerheaders
 
DOMImplementation * impl
 
Object mode
 
DOMDocument * xmlHeader
 
std::vector< DOMElement * > xmlNodes
 

Friends

class LHEReader
 

Detailed Description

Definition at line 95 of file LHEReader.cc.

Member Enumeration Documentation

Enumerator
kNone 
kHeader 
kInit 
kComment 
kEvent 

Definition at line 103 of file LHEReader.cc.

Constructor & Destructor Documentation

lhef::LHEReader::XMLHandler::XMLHandler ( )
inline
lhef::LHEReader::XMLHandler::~XMLHandler ( )
inline

Definition at line 100 of file LHEReader.cc.

References xmlHeader.

101  { if (xmlHeader) xmlHeader->release(); }

Member Function Documentation

void lhef::LHEReader::XMLHandler::characters ( const XMLCh *const  data,
const unsigned int  length 
)
protected

Definition at line 277 of file LHEReader.cc.

References data, edm::hlt::Exception, lhef::XMLSimpleStr::isAllSpaces(), lhef::XMLSimpleStr::isSpace(), WDecay::kNone, alignBH_cfg::mode, evf::evtn::offset(), and runonSM::text.

279 {
280  if (mode == kHeader) {
281  DOMText *text = xmlHeader->createTextNode(data_);
282  xmlNodes.back()->appendChild(text);
283  return;
284  }
285 
286  if (XMLSimpleStr::isAllSpaces(data_, length))
287  return;
288 
289  unsigned int offset = 0;
290  while(offset < length && XMLSimpleStr::isSpace(data_[offset]))
291  offset++;
292 
293  XMLSimpleStr data(data_ + offset);
294 
295  if (mode == kNone)
296  throw cms::Exception("InvalidFormat")
297  << "LHE file has invalid format" << std::endl;
298 
299  buffer.append(data);
300 }
static bool isSpace(XMLCh ch)
Definition: XMLUtils.h:86
static bool isAllSpaces(const XMLCh *str, unsigned int length)
Definition: XMLUtils.h:82
tuple text
Definition: runonSM.py:42
unsigned int offset(bool)
std::vector< DOMElement * > xmlNodes
Definition: LHEReader.cc:134
char data[epos_bytes_allocation]
Definition: EPOS_Wrapper.h:82
void lhef::LHEReader::XMLHandler::comment ( const XMLCh *const  data,
const unsigned int  length 
)
protected

Definition at line 302 of file LHEReader.cc.

References comment, data, lhef::fillHeader(), and alignBH_cfg::mode.

304 {
305  if (mode == kHeader) {
306  DOMComment *comment = xmlHeader->createComment(data_);
307  xmlNodes.back()->appendChild(comment);
308  return;
309  }
310 
311  XMLSimpleStr data(data_);
312 
313  LHERunInfo::Header header;
314  fillHeader(header, data);
315  headers.push_back(header);
316 }
static void fillHeader(LHERunInfo::Header &header, const char *data, int len=-1)
Definition: LHEReader.cc:149
std::vector< LHERunInfo::Header > headers
Definition: LHEReader.cc:136
std::vector< DOMElement * > xmlNodes
Definition: LHEReader.cc:134
char data[epos_bytes_allocation]
Definition: EPOS_Wrapper.h:82
void comment(const XMLCh *const data, const unsigned int length)
Definition: LHEReader.cc:302
void lhef::LHEReader::XMLHandler::endElement ( const XMLCh *const  uri,
const XMLCh *const  localname,
const XMLCh *const  qname 
)
protected

Definition at line 211 of file LHEReader.cc.

References HTMLExport::elem(), edm::hlt::Exception, lhef::fillHeader(), WDecay::kNone, alignBH_cfg::mode, python.Node::node, AlCaHLTBitMon_ParallelJobs::p, lumiQueryAPI::q, and AlCaHLTBitMon_QueryRunRegistry::string.

214 {
215  if (mode) {
216  if (mode == kHeader && xmlNodes.size() > 1) {
217  xmlNodes.resize(xmlNodes.size() - 1);
218  return;
219  } else if (mode == kHeader) {
220  std::auto_ptr<DOMWriter> writer(
221  static_cast<DOMImplementationLS*>(
222  impl)->createDOMWriter());
223  writer->setEncoding(XMLUniStr("UTF-8"));
224 
225  for(DOMNode *node = xmlNodes[0]->getFirstChild();
226  node; node = node->getNextSibling()) {
228  writer->writeToString(*node));
229 
231  const char *p, *q;
232  DOMElement *elem;
233 
234  switch(node->getNodeType()) {
235  case DOMNode::ELEMENT_NODE:
236  elem = static_cast<DOMElement*>(node);
237  type = (const char*)XMLSimpleStr(
238  elem->getTagName());
239  p = std::strchr((const char*)buffer,
240  '>') + 1;
241  q = std::strrchr(p, '<');
242  break;
243  case DOMNode::COMMENT_NODE:
244  type = "";
245  p = buffer + 4;
246  q = buffer + strlen(buffer) - 3;
247  break;
248  default:
249  type = "<>";
250  p = buffer +
251  std::strspn(buffer, " \t\r\n");
252  if (!*p)
253  continue;
254  q = p + strlen(p);
255  }
256 
257  LHERunInfo::Header header(type);
258  fillHeader(header, p, q - p);
259  headers.push_back(header);
260  }
261 
262  xmlHeader->release();
263  xmlHeader = 0;
264  }
265 
266  if (gotObject != kNone)
267  throw cms::Exception("InvalidState")
268  << "Unexpected pileup in"
269  " LHEReader::XMLHandler::endElement"
270  << std::endl;
271 
272  gotObject = mode;
273  mode = kNone;
274  }
275 }
type
Definition: HCALResponse.h:21
static void fillHeader(LHERunInfo::Header &header, const char *data, int len=-1)
Definition: LHEReader.cc:149
tuple node
Definition: Node.py:50
std::vector< LHERunInfo::Header > headers
Definition: LHEReader.cc:136
std::vector< DOMElement * > xmlNodes
Definition: LHEReader.cc:134
DOMImplementation * impl
Definition: LHEReader.cc:129
void lhef::LHEReader::XMLHandler::reset ( void  )
inline

Definition at line 111 of file LHEReader.cc.

References headerOk.

111 { headerOk = false; }
void lhef::LHEReader::XMLHandler::startElement ( const XMLCh *const  uri,
const XMLCh *const  localname,
const XMLCh *const  qname,
const Attributes &  attributes 
)
protected

Definition at line 166 of file LHEReader.cc.

References lhef::attributesToDom(), buffer, HTMLExport::elem(), edm::hlt::Exception, headerOk, impl, kEvent, kHeader, kInit, kNone, mode, mergeVDriftHistosByStation::name, AlCaHLTBitMon_QueryRunRegistry::string, xmlHeader, and xmlNodes.

170 {
171  std::string name((const char*)XMLSimpleStr(qname));
172 
173  if (!headerOk) {
174  if (name != "LesHouchesEvents")
175  throw cms::Exception("InvalidFormat")
176  << "LHE file has invalid header" << std::endl;
177  headerOk = true;
178  return;
179  }
180 
181  if (mode == kHeader) {
182  DOMElement *elem = xmlHeader->createElement(qname);
184  xmlNodes.back()->appendChild(elem);
185  xmlNodes.push_back(elem);
186  return;
187  } else if (mode != kNone)
188  throw cms::Exception("InvalidFormat")
189  << "LHE file has invalid format" << std::endl;
190 
191  if (name == "header") {
192  if (!impl)
193  impl = DOMImplementationRegistry::getDOMImplementation(
194  XMLUniStr("Core"));
195  xmlHeader = impl->createDocument(0, qname, 0);
196  xmlNodes.resize(1);
197  xmlNodes[0] = xmlHeader->getDocumentElement();
198  mode = kHeader;
199  } if (name == "init")
200  mode = kInit;
201  else if (name == "event")
202  mode = kEvent;
203 
204  if (mode == kNone)
205  throw cms::Exception("InvalidFormat")
206  << "LHE file has invalid format" << std::endl;
207 
208  buffer.clear();
209 }
list attributes
Definition: asciidump.py:415
std::vector< DOMElement * > xmlNodes
Definition: LHEReader.cc:134
DOMImplementation * impl
Definition: LHEReader.cc:129
def qname
Definition: asciidump.py:315
static void attributesToDom(DOMElement *dom, const Attributes &attributes)
Definition: LHEReader.cc:139

Friends And Related Function Documentation

friend class LHEReader
friend

Definition at line 127 of file LHEReader.cc.

Member Data Documentation

std::string lhef::LHEReader::XMLHandler::buffer
private

Definition at line 130 of file LHEReader.cc.

Referenced by startElement().

Object lhef::LHEReader::XMLHandler::gotObject
private

Definition at line 131 of file LHEReader.cc.

bool lhef::LHEReader::XMLHandler::headerOk
private

Definition at line 135 of file LHEReader.cc.

Referenced by reset(), and startElement().

std::vector<LHERunInfo::Header> lhef::LHEReader::XMLHandler::headers
private
DOMImplementation* lhef::LHEReader::XMLHandler::impl
private

Definition at line 129 of file LHEReader.cc.

Referenced by startElement().

Object lhef::LHEReader::XMLHandler::mode
private

Definition at line 132 of file LHEReader.cc.

Referenced by startElement().

DOMDocument* lhef::LHEReader::XMLHandler::xmlHeader
private

Definition at line 133 of file LHEReader.cc.

Referenced by startElement(), and ~XMLHandler().

std::vector<DOMElement*> lhef::LHEReader::XMLHandler::xmlNodes
private

Definition at line 134 of file LHEReader.cc.

Referenced by startElement().