Go to the documentation of this file.
21 #include "AIDA/IHistogram1D.h"
22 #include "AIDA/IHistogram2D.h"
23 #include "AIDA/IHistogram3D.h"
57 template <
typename Iterator,
typename Skipper>
58 class EdgeGrammar :
public qi::grammar<Iterator, Edges(), qi::locals<char>, Skipper> {
67 inner = ( ( qi::lit(
"edges" ) |
"'edges'" |
"\"edges\"" ) >>
":" >>
edges[qi::_val *= qi::_1] ) |
69 inner_pairs = ( ( ( qi::lit(
"nbins" ) |
"'nbins'" |
"\"nbins\"" ) >>
":" >>
nbins[qi::_val /= qi::_1] ) |
70 ( ( qi::lit(
"low" ) |
"'low'" |
"\"low\"" ) >>
":" >>
low[qi::_val -= qi::_1] ) |
71 ( ( qi::lit(
"high" ) |
"'high'" |
"\"high\"" ) >>
":" >>
high[qi::_val += qi::_1] ) ) %
75 enc::char_(
'[' )[qi::_val =
']'] | enc::char_(
'{' )[qi::_val =
'}'] | enc::char_(
'(' )[qi::_val =
')'];
76 end = enc::char_( qi::_r1 );
90 template <
typename Iterator,
typename Skipper>
91 class H1Grammar :
public qi::grammar<Iterator, H1(), qi::locals<char>, Skipper> {
100 inner = ( ( ( qi::lit(
"name" ) |
"'name'" |
"\"name\"" ) >>
":" >>
name[qi::_val *= qi::_1] ) |
101 ( ( qi::lit(
"title" ) |
"'title'" |
"\"title\"" ) >>
":" >>
title[qi::_val /= qi::_1] ) |
102 ( -( ( qi::lit(
"X" ) |
"'X'" |
"\"X\"" |
"x" |
"'x'" |
"\"x\"" ) >>
':' ) >>
103 edges[qi::_val &= qi::_1] ) |
104 ( ( qi::lit(
"nbins" ) |
"'nbins'" |
"\"nbins\"" ) >>
":" >>
nbins[qi::_val |= qi::_1] ) |
105 ( ( qi::lit(
"low" ) |
"'low'" |
"\"low\"" ) >>
":" >>
low[qi::_val -= qi::_1] ) |
106 ( ( qi::lit(
"high" ) |
"'high'" |
"\"high\"" ) >>
":" >>
high[qi::_val ^= qi::_1] ) |
107 ( ( qi::lit(
"bins" ) |
"'bins'" |
"\"bins\"" ) >>
':' >>
bins[qi::_val += qi::_1] ) ) %
111 enc::char_(
'[' )[qi::_val =
']'] | enc::char_(
'{' )[qi::_val =
'}'] | enc::char_(
'(' )[qi::_val =
')'];
112 end = enc::char_( qi::_r1 );
129 template <
typename Iterator,
typename Skipper>
130 class H2Grammar :
public qi::grammar<Iterator, H2(), qi::locals<char>, Skipper> {
139 inner = ( ( ( qi::lit(
"name" ) |
"'name'" |
"\"name\"" ) >>
":" >>
name[qi::_val *= qi::_1] ) |
140 ( ( qi::lit(
"title" ) |
"'title'" |
"\"title\"" ) >>
":" >>
title[qi::_val /= qi::_1] ) |
141 ( ( qi::lit(
"X" ) |
"'X'" |
"\"X\"" |
"x" |
"'x'" |
"\"x\"" ) >>
':' >>
edges[qi::_val &= qi::_1] ) |
142 ( ( qi::lit(
"Y" ) |
"'Y'" |
"\"Y\"" |
"y" |
"'y'" |
"\"y\"" ) >>
':' >>
edges[qi::_val |= qi::_1] ) |
143 ( ( qi::lit(
"bins" ) |
"'bins'" |
"\"bins\"" ) >>
':' >>
bins[qi::_val += qi::_1] ) ) %
147 enc::char_(
'[' )[qi::_val =
']'] | enc::char_(
'{' )[qi::_val =
'}'] | enc::char_(
'(' )[qi::_val =
')'];
148 end = enc::char_( qi::_r1 );
186 template <
class HISTO1>
195 if ( sc.
isFailure() || !
h1.ok() ) {
return H1P(); }
199 H1P
histo(
h1.m_edges.edges.empty() ?
208 h1.m_edges.edges.size() - 1,
209 &
h1.m_edges.edges.front() ) );
212 for (
unsigned int ibin = 0; ibin <
h1.m_bins.size(); ++ibin ) {
213 histo->SetBinContent( ibin,
h1.m_bins[ibin].first );
214 histo->SetBinError( ibin,
h1.m_bins[ibin].second );
222 template <
class HISTO2>
230 if ( sc.
isFailure() || !h2.ok() ) {
return H2P(); }
234 H2P
histo( h2.m_xedges.edges.empty() && h2.m_yedges.edges.empty()
244 : h2.m_xedges.edges.empty() && !h2.m_xedges.edges.empty()
251 &h2.m_yedges.edges.front() )
253 !h2.m_xedges.edges.empty() && h2.m_xedges.edges.empty()
257 &h2.m_xedges.edges.front(),
265 &h2.m_xedges.edges.front(),
267 &h2.m_yedges.edges.front() ) );
270 const int xBins = h2.m_xedges.nBins();
271 const int yBins = h2.m_yedges.nBins();
273 for (
int jBin = yBins + 1; jBin >= 0; --jBin ) {
274 for (
int iBin = 0; iBin <= xBins + 1; ++iBin ) {
275 histo->SetBinContent( iBin, jBin, h2.m_bins[ibin].first );
276 histo->SetBinError( iBin, jBin, h2.m_bins[ibin].second );
298 auto h1 = _parse_1D<TH1D>( input,
name );
302 result.SetName(
name.c_str() );
321 auto h1 = _parse_1D<TH1F>( input,
name );
325 result.SetName(
name.c_str() );
343 auto h2 = _parse_2D<TH2D>( input,
name );
347 result.SetName(
name.c_str() );
365 auto h2 = _parse_2D<TH2F>( input,
name );
369 result.SetName(
name.c_str() );
386 if ( result ) {
return parse( *result, input ); }
390 auto h1 = _parse_1D<TH1D>( input,
name );
392 result =
h1.release();
393 result->SetName(
name.c_str() );
409 if ( result ) {
return parse( *result, input ); }
413 auto h2 = _parse_2D<TH2D>( input,
name );
415 result = h2.release();
416 result->SetName(
name.c_str() );
qi::rule< Iterator, void(char)> end
VectorGrammar< Iterator, std::vector< double >, Skipper > edges
qi::rule< Iterator, H1(), qi::locals< char >, Skipper > result
RealGrammar< Iterator, double, Skipper > high
qi::rule< Iterator, void(char)> end
qi::rule< Iterator, void(char)> end
qi::rule< Iterator, char()> begin
StringGrammar< Iterator, Skipper > title
static TH1D * aida2root(AIDA::IHistogram1D *aida)
get the underlying pointer for 1D-histogram
VectorGrammar< Iterator, std::vector< std::pair< double, double > >, Skipper > bins
EdgeGrammar< Iterator, Skipper > edges
StatusCode parse_(ResultT &result, const std::string &input)
qi::rule< Iterator, Edges(), Skipper > inner_pairs
Header file for std:chrono::duration-based Counters.
qi::rule< Iterator, H2(), Skipper > inner
RealGrammar< Iterator, double, Skipper > high
REGISTER_GRAMMAR(std::string, StringGrammar)
RealGrammar< Iterator, double, Skipper > low
constexpr static const auto SUCCESS
qi::rule< Iterator, char()> begin
std::vector< double > Edges
StatusCode parse(DataObjID &dest, const std::string &src)
IntGrammar< Iterator, unsigned int, Skipper > nbins
qi::rule< Iterator, Edges(), Skipper > inner
StatusCode parse(GaudiUtils::HashMap< K, V > &result, const std::string &input)
Basic parser for the types of HashMap used in DODBasicMapper.
IntGrammar< Iterator, unsigned int, Skipper > nbins
qi::rule< Iterator, H2(), qi::locals< char >, Skipper > result
StringGrammar< Iterator, Skipper > title
RealGrammar< Iterator, double, Skipper > low
EdgeGrammar< Iterator, Skipper > edges
constexpr static const auto FAILURE
StringGrammar< Iterator, Skipper > name
qi::rule< Iterator, H1(), Skipper > inner
StringGrammar< Iterator, Skipper > name
GAUDI_API StatusCode fromXml(TH1D &result, const std::string &input)
parse the histogram from standard ROOT XML
qi::rule< Iterator, char()> begin
VectorGrammar< Iterator, std::vector< std::pair< double, double > >, Skipper > bins
boost::spirit::classic::position_iterator2< ForwardIterator > Iterator
qi::rule< Iterator, Edges(), qi::locals< char >, Skipper > result