00001 00012 #ifdef HAVE_CONFIG_H 00013 #include "config.h" 00014 #endif 00015 00016 // for truncation warning 00017 #ifdef _MSC_VER 00018 #include "msdevstudio/MSconfig.h" 00019 #endif 00020 00021 #include "BinningProjectorXML.h" 00022 00023 #include "BinsBaseXML.h" 00024 #include "NTupleXML.h" 00025 00026 #include "XmlController.h" 00027 #include "XmlDocument.h" 00028 #include "XmlElement.h" 00029 00030 #include "axes/Range.h" 00031 #include "binners/BinsBase.h" 00032 #include "datasrcs/DataSource.h" 00033 #include "projectors/BinningProjector.h" 00034 00035 #include <cassert> 00036 00037 using std::list; 00038 using std::string; 00039 using std::vector; 00040 00041 BinningProjectorXML::BinningProjectorXML ( XmlController * controller ) 00042 : BaseXML ( "BinningProjector", controller ) 00043 { 00044 m_binsbaseXML = new BinsBaseXML ( controller ); 00045 m_ntupleXML = new NTupleXML ( controller ); 00046 } 00047 00048 XmlElement * 00049 BinningProjectorXML:: 00050 createElement ( const BinningProjector & projector ) 00051 { 00052 XmlElement * tag = BaseXML::createElement (); // in base class 00053 const void * addr = reinterpret_cast < const void * > ( & projector ); 00054 int id = m_controller -> getId ( addr ); 00055 setId ( *tag, id ); 00056 00057 createChildren ( tag, projector ); 00058 00059 return tag; 00060 } 00061 void 00062 BinningProjectorXML:: 00063 createChildren ( XmlElement * tag, const BinningProjector & projector ) 00064 { 00065 const BinsBase * bins = projector.getBinner (); 00066 XmlElement * element = m_binsbaseXML->createElement ( *bins ); 00067 00068 tag->appendChild ( *element ); 00069 00070 BinningProjector & proj = const_cast < BinningProjector & > ( projector ); 00071 proj.prepareValues (); 00072 const DataSource * ntuple = projector.getProjectedValues (); 00073 element = m_ntupleXML -> createElement ( *ntuple ); 00074 00075 tag -> appendChild ( *element ); 00076 } 00077 00078 void 00079 BinningProjectorXML:: 00080 getObject ( const XmlElement * parent, ProjectorBase * pbase ) 00081 { 00082 const XmlElement * bp_element = getNode ( parent ); 00083 if ( bp_element == 0 ) return; 00084 00085 const XmlElement * element = m_binsbaseXML->getNode ( bp_element ); 00086 BinsBase * bins = m_binsbaseXML->createObject ( element ); 00087 00088 BinningProjector * projector = dynamic_cast < BinningProjector * > ( pbase ); 00089 projector->setBinner ( bins ); 00090 } 00091 00092 void 00093 BinningProjectorXML:: 00094 setBins ( const XmlElement * parent, ProjectorBase * pbase ) 00095 { 00096 const XmlElement * bp_element = getNode ( parent ); 00097 if ( bp_element == 0 ) return; 00098 00099 const XmlElement * nt_element = m_ntupleXML -> getNode ( bp_element ); 00100 const DataSource * ntuple = m_ntupleXML -> getObject ( *nt_element ); 00101 00102 BinningProjector * projector = dynamic_cast < BinningProjector * > ( pbase ); 00103 projector -> setBinContents ( ntuple ); 00104 }