Marlin  01.17.01
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Classes | Public Member Functions | Protected Member Functions | Protected Attributes | Private Member Functions | Private Attributes | List of all members
marlin::XMLParser Class Reference

XML parser for Marlin steering files. More...

#include <XMLParser.h>

+ Inheritance diagram for marlin::XMLParser:

Classes

class  LCTokenizer
 Helper class for XMLParser. More...
 

Public Member Functions

 XMLParser (const std::string &fileName, bool forCCheck=false)
 
virtual ~XMLParser ()
 
void setCmdLineParameters (const CommandLineParametersMap &cmdlineparams)
 set command line parameters More...
 
void parse ()
 Parse the input file. More...
 
std::shared_ptr< StringParametersgetParameters (const std::string &sectionName) const
 Return the StringParameters for the section as read from the xml file. More...
 
void write (const std::string &filen) const
 Write the parsed XML tree in an other file. More...
 
- Public Member Functions inherited from marlin::IParser
virtual ~IParser ()
 

Protected Member Functions

void parametersFromNode (TiXmlNode *section, std::map< std::string, std::string > &constants, std::pair< unsigned, unsigned > *typeCount=0)
 Extracts all parameters from the given node and adss them to the current StringParameters object. More...
 
const char * getAttribute (TiXmlNode *node, const std::string &name)
 Return named attribute - throws ParseException if attribute doesn't exist. More...
 
void replacegroups (TiXmlNode *section)
 Helper method - replaces all <group> tag with corresponding <processor> tags. More...
 
TiXmlNodefindElement (TiXmlNode *node, const std::string &type, const std::string &attribute, const std::string &value)
 Helper method - finds child element of node with given type and attribute value. More...
 
void processconditions (TiXmlNode *current, const std::string &conditions)
 Helper method - recursively moves processors from <if> tags to top level (<execute>) and adds corresponding conditions attribute. More...
 
void processIncludeElements (TiXmlElement *element, const std::map< std::string, std::string > &constants)
 Helper method - recursively replace all with the corresponding file content. More...
 
void processIncludeElement (TiXmlElement *element, const std::map< std::string, std::string > &constants, TiXmlDocument &document)
 
void processConstants (TiXmlNode *node, std::map< std::string, std::string > &constants)
 
void processConstant (TiXmlElement *element, std::map< std::string, std::string > &constants)
 
std::stringperformConstantReplacement (std::string &value, const std::map< std::string, std::string > &constants)
 
void checkForNestedIncludes (const TiXmlNode *node)
 

Protected Attributes

StringParametersMap _map {}
 
StringParameters_current
 
std::unique_ptr< TiXmlDocument_doc {}
 
std::string _fileName
 

Private Member Functions

 XMLParser ()=delete
 
 XMLParser (const marlin::XMLParser &)=delete
 
XMLParseroperator= (const marlin::XMLParser &)=delete
 

Private Attributes

bool _forCCheck
 
CommandLineParametersMap _cmdlineparams {}
 

Detailed Description

XML parser for Marlin steering files.

Marlin XML steering files have the following form (use Marlin -x > example.xml to generate a template steering file):

 <marlin>
  <execute>   [1]
     ...  // the processors and processor groups to be executed
  </execute>
  <global>    [1]
     ...  // global parameter section
  </global>
  <processor> [n]
     ...  // definition of the processor and its parameters
  </processor>
  <group> [m]   
     ...    // a group of processors
    <processor> [k]
     ...  // definition of the processor and its parameters
    </processor>
  </group> 
 </marlin>

where the numbers enclosed in "[]" denote how many elements of the given type are allowed or required, n,m,k = [0,1,2,...].

The <execute/> section defines the processors that are to be called in the order specified. The Processor::processEvent() method is only called if the relevant condition (<if condition="A"/>) is fullfilled. Conditions can be arbitrary logical expressions formed of [!,(,&&,||,),value], e.g.
( A && ( B || !C ) ) || ( !B && D ), where the keys A,B,C,D can be either procesor names (Processor::setReturnValue(bool val) ) or processor names followed by a string ( Processor::setReturnValue(const std::string &name, bool val) ).
In the following example the Pflow processor is only called for events where the EventSelection processor has returnd true and the TwoJetAnalysis is is then in turn only called for events identified as having tow jets by the Pflow processor

 <execute>
  <processor name="MyAIDAProcessor"/>
  <processor name="EventSelection"/>  
  <if condition="EventSelection">
    <processor name="Pflow"/>  
    <if condition="Pflow.TwoJet">
      <group name="TwoJetAnalysis"/>
    </if>
  </if>
  <processor name="MyLCIOOutputProcessor"/>  
 </execute>   
 

The <global> section defines the global paramters:

 <global>
   <parameter name="LCIOInputFiles">dd_rec.slcio </parameter>
   <parameter name="LCIOInputFiles">../tt500_all_set1_12.slcio </parameter>
   <parameter name="MaxRecordNumber" value="5001" />  
   <parameter name="SupressCheck" value="false" />  
 </global>

Parameters can be either specified as the content of the <parameter/> tag or in the value-attribute of the tag !

The <processor name="..." type="..." > section defines the processor and its parameters, where name and type are required attibutes, e.g.

 <processor name="EventSelection" type="SelectionProcessor">
   <parameter name="EnergyCut" type="float">50.0</parameter>
 </processor>

Note: the parameter's type-attribute is optional.

Processor sections can be enclosed in a <group/> tag, where parameters defined outside any <processor/> tag are group parameters valid for all processors in the group, .e.g.

 <group>
   <parameter name="PtCut" value="0.03">
   <processor name="TrackFinding" type="TrackFinder"/>
   <processor name="TrackFitting" type="KalmanProcessor">
     <parameter name="UseDAF" value="true">
   <processor>
 </group>
Author
F. Gaede, DESY
Version
Id:
XMLParser.h,v 1.7 2007-07-18 12:43:09 engels Exp

Definition at line 106 of file XMLParser.h.

Constructor & Destructor Documentation

marlin::XMLParser::XMLParser ( const std::string fileName,
bool  forCCheck = false 
)

Definition at line 17 of file XMLParser.cc.

marlin::XMLParser::~XMLParser ( )
virtual

Definition at line 21 of file XMLParser.cc.

marlin::XMLParser::XMLParser ( )
privatedelete
marlin::XMLParser::XMLParser ( const marlin::XMLParser )
privatedelete

Member Function Documentation

void marlin::XMLParser::checkForNestedIncludes ( const TiXmlNode node)
protected
TiXmlNode * marlin::XMLParser::findElement ( TiXmlNode node,
const std::string type,
const std::string attribute,
const std::string value 
)
protected

Helper method - finds child element of node with given type and attribute value.

Definition at line 946 of file XMLParser.cc.

References TiXmlElement::Attribute(), TiXmlNode::IterateChildren(), and TiXmlNode::ToElement().

Referenced by replacegroups().

const char * marlin::XMLParser::getAttribute ( TiXmlNode node,
const std::string name 
)
protected

Return named attribute - throws ParseException if attribute doesn't exist.

Definition at line 315 of file XMLParser.cc.

References _fileName, TiXmlElement::Attribute(), std::string::c_str(), std::stringstream::str(), TiXmlNode::ToElement(), and TiXmlNode::Value().

Referenced by parametersFromNode(), parse(), processconditions(), and replacegroups().

std::shared_ptr< StringParameters > marlin::XMLParser::getParameters ( const std::string sectionName) const
virtual

Return the StringParameters for the section as read from the xml file.

Implements marlin::IParser.

Definition at line 511 of file XMLParser.cc.

References _map.

XMLParser& marlin::XMLParser::operator= ( const marlin::XMLParser )
privatedelete
void marlin::XMLParser::parametersFromNode ( TiXmlNode section,
std::map< std::string, std::string > &  constants,
std::pair< unsigned, unsigned > *  typeCount = 0 
)
protected
void marlin::XMLParser::parse ( )
virtual
std::string & marlin::XMLParser::performConstantReplacement ( std::string value,
const std::map< std::string, std::string > &  constants 
)
protected
void marlin::XMLParser::processconditions ( TiXmlNode current,
const std::string conditions 
)
protected

Helper method - recursively moves processors from <if> tags to top level (<execute>) and adds corresponding conditions attribute.

Definition at line 524 of file XMLParser.cc.

References TiXmlElement::Attribute(), TiXmlNode::Clone(), std::string::find(), getAttribute(), TiXmlNode::InsertBeforeChild(), TiXmlNode::IterateChildren(), TiXmlNode::Parent(), TiXmlNode::RemoveChild(), TiXmlElement::SetAttribute(), std::string::size(), TiXmlNode::ToElement(), and TiXmlNode::Value().

Referenced by parse().

void marlin::XMLParser::processConstant ( TiXmlElement element,
std::map< std::string, std::string > &  constants 
)
protected
void marlin::XMLParser::processConstants ( TiXmlNode node,
std::map< std::string, std::string > &  constants 
)
protected
void marlin::XMLParser::processIncludeElement ( TiXmlElement element,
const std::map< std::string, std::string > &  constants,
TiXmlDocument document 
)
protected
void marlin::XMLParser::processIncludeElements ( TiXmlElement element,
const std::map< std::string, std::string > &  constants 
)
protected

Helper method - recursively replace all with the corresponding file content.

Definition at line 583 of file XMLParser.cc.

References TiXmlNode::FirstChildElement(), TiXmlNode::InsertAfterChild(), TiXmlNode::NextSiblingElement(), processIncludeElement(), TiXmlNode::RemoveChild(), and TiXmlNode::Value().

Referenced by parse().

void marlin::XMLParser::replacegroups ( TiXmlNode section)
protected
void marlin::XMLParser::setCmdLineParameters ( const CommandLineParametersMap cmdlineparams)
inlinevirtual

set command line parameters

Implements marlin::IParser.

Definition at line 155 of file XMLParser.h.

References _cmdlineparams.

void marlin::XMLParser::write ( const std::string filen) const
virtual

Write the parsed XML tree in an other file.

Implements marlin::IParser.

Definition at line 306 of file XMLParser.cc.

References _doc, and TiXmlDocument::SaveFile().

Member Data Documentation

CommandLineParametersMap marlin::XMLParser::_cmdlineparams {}
private
StringParameters* marlin::XMLParser::_current
protected

Definition at line 205 of file XMLParser.h.

Referenced by parametersFromNode(), and parse().

std::unique_ptr<TiXmlDocument> marlin::XMLParser::_doc {}
protected

Definition at line 206 of file XMLParser.h.

Referenced by parse(), replacegroups(), and write().

std::string marlin::XMLParser::_fileName
protected

Definition at line 208 of file XMLParser.h.

Referenced by getAttribute(), parse(), and processIncludeElement().

bool marlin::XMLParser::_forCCheck
private

Definition at line 214 of file XMLParser.h.

Referenced by parse().

StringParametersMap marlin::XMLParser::_map {}
mutableprotected

Definition at line 204 of file XMLParser.h.

Referenced by getParameters(), and parse().


The documentation for this class was generated from the following files: