Loading [MathJax]/extensions/tex2jax.js
The Gaudi Framework  master (f31105fd)
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
AxisAsProperty.h
Go to the documentation of this file.
1 /***********************************************************************************\
2 * (c) Copyright 1998-2025 CERN for the benefit of the LHCb and ATLAS collaborations *
3 * *
4 * This software is distributed under the terms of the Apache version 2 licence, *
5 * copied verbatim in the file "LICENSE". *
6 * *
7 * In applying this licence, CERN does not waive the privileges and immunities *
8 * granted to it by virtue of its status as an Intergovernmental Organization *
9 * or submit itself to any jurisdiction. *
10 \***********************************************************************************/
11 #pragma once
12 
14 
15 #include <Gaudi/Parsers/Factory.h>
16 #include <GaudiKernel/ToStream.h>
17 
18 #if ( BOOST_VERSION >= 187000 ) && ( BOOST_VERSION < 188000 )
19 # define BOOST_ALLOW_DEPRECATED_HEADERS
20 #endif
21 #include <boost/spirit/include/qi.hpp>
22 #undef BOOST_ALLOW_DEPRECATED_HEADERS
23 
33 namespace Gaudi {
34  namespace Parsers {
35 
36  namespace qi = boost::spirit::qi;
37 
38  template <typename Iterator, typename Skipper, typename Arithmetic>
39  struct AxisGrammar : qi::grammar<Iterator, Gaudi::Accumulators::Axis<Arithmetic>(), qi::locals<char>, Skipper> {
41  struct StoreNbinsOp {
42  void operator()( Axis& res, unsigned int const& nBins ) const { res.setNumBins( nBins ); }
43  };
44  struct StoreMinValueOp {
45  void operator()( Axis& res, Arithmetic const& minValue ) const { res.setMinValue( minValue ); }
46  };
47  struct StoreMaxValueOp {
48  void operator()( Axis& res, Arithmetic const& maxValue ) const { res.setMaxValue( maxValue ); }
49  };
50  struct StoreTitleOp {
51  void operator()( Axis& res, std::string const& title ) const { res.setTitle( title ); }
52  };
53  AxisGrammar() : AxisGrammar::base_type( axis ) {
54  begin = enc::char_( '[' )[qi::_val = ']'] | enc::char_( '(' )[qi::_val = ')'];
55  end = enc::char_( qi::_r1 );
56  core = qi::int_[storeNbins( qi::_val, qi::_1 )] >> "," >> qi::double_[storeMinValue( qi::_val, qi::_1 )] >>
57  "," >> qi::double_[storeMaxValue( qi::_val, qi::_1 )] >>
58  -( "," >> title[storeTitle( qi::_val, qi::_1 )] );
59  axis = begin[qi::_a = qi::_1] >> core[qi::_val = qi::_1] >> end( qi::_a );
60  }
61  qi::rule<Iterator, Axis(), qi::locals<char>, Skipper> axis;
62  qi::rule<Iterator, Axis(), Skipper> core;
63  qi::rule<Iterator, char()> begin;
64  qi::rule<Iterator, void( char )> end;
66  ph::function<StoreNbinsOp> storeNbins;
67  ph::function<StoreMinValueOp> storeMinValue;
68  ph::function<StoreMaxValueOp> storeMaxValue;
69  ph::function<StoreTitleOp> storeTitle;
70  };
71 
72  template <typename Iterator, typename Skipper, typename Arithmetic>
75  };
76 
77  // Parse function... nothing special, but it must be done explicitely.
78  template <typename Arithmetic>
80  return parse_( result, input );
81  }
82 
83  } // namespace Parsers
84 
85 } // namespace Gaudi
Gaudi::Parsers::AxisGrammar::title
StringGrammar< Iterator, Skipper > title
Definition: AxisAsProperty.h:65
std::string
STL class.
Gaudi::Parsers::AxisGrammar::storeTitle
ph::function< StoreTitleOp > storeTitle
Definition: AxisAsProperty.h:69
Gaudi::Parsers::parse
StatusCode parse(GaudiUtils::HashMap< K, V > &result, std::string_view input)
Basic parser for the types of HashMap used in DODBasicMapper.
Definition: DODBasicMapper.cpp:21
Gaudi::Parsers::AxisGrammar::StoreMinValueOp::operator()
void operator()(Axis &res, Arithmetic const &minValue) const
Definition: AxisAsProperty.h:45
Gaudi::Parsers::AxisGrammar::Axis
Gaudi::Accumulators::Axis< Arithmetic > Axis
Definition: AxisAsProperty.h:40
Gaudi::Parsers::parse_
StatusCode parse_(ResultT &result, std::string_view input)
Definition: Factory.h:39
Gaudi::Parsers::AxisGrammar::StoreMaxValueOp
Definition: AxisAsProperty.h:47
Gaudi::Accumulators::Axis::setMaxValue
void setMaxValue(Arithmetic v)
Definition: StaticHistogram.h:283
ToStream.h
Gaudi::Parsers::AxisGrammar::StoreTitleOp
Definition: AxisAsProperty.h:50
Gaudi::Parsers::AxisGrammar::end
qi::rule< Iterator, void(char)> end
Definition: AxisAsProperty.h:64
Gaudi::Accumulators::Axis::setNumBins
void setNumBins(unsigned int n)
Definition: StaticHistogram.h:273
Gaudi::Parsers::AxisGrammar::axis
qi::rule< Iterator, Axis(), qi::locals< char >, Skipper > axis
Definition: AxisAsProperty.h:61
Gaudi::Parsers::AxisGrammar::storeMaxValue
ph::function< StoreMaxValueOp > storeMaxValue
Definition: AxisAsProperty.h:68
Gaudi::Parsers::AxisGrammar::storeMinValue
ph::function< StoreMinValueOp > storeMinValue
Definition: AxisAsProperty.h:67
StatusCode
Definition: StatusCode.h:65
Gaudi::Parsers::StringGrammar
Definition: Grammar.h:62
Gaudi::Parsers::AxisGrammar::core
qi::rule< Iterator, Axis(), Skipper > core
Definition: AxisAsProperty.h:62
Gaudi::Parsers::AxisGrammar
Definition: AxisAsProperty.h:39
Gaudi::Parsers::SkipperGrammar
Definition: Grammar.h:53
Gaudi::Parsers::AxisGrammar::StoreNbinsOp
Definition: AxisAsProperty.h:41
Gaudi::Accumulators::Axis::setTitle
void setTitle(std::string const &t)
Definition: StaticHistogram.h:288
Gaudi
This file provides a Grammar for the type Gaudi::Accumulators::Axis It allows to use that type from p...
Definition: __init__.py:1
Gaudi::Parsers::AxisGrammar::StoreNbinsOp::operator()
void operator()(Axis &res, unsigned int const &nBins) const
Definition: AxisAsProperty.h:42
Factory.h
Gaudi::Parsers::AxisGrammar::begin
qi::rule< Iterator, char()> begin
Definition: AxisAsProperty.h:63
Gaudi::Parsers::Grammar_
Definition: Grammars.h:72
Gaudi::Parsers::AxisGrammar::StoreMinValueOp
Definition: AxisAsProperty.h:44
Gaudi::Parsers::AxisGrammar::storeNbins
ph::function< StoreNbinsOp > storeNbins
Definition: AxisAsProperty.h:66
Gaudi::Parsers::AxisGrammar::AxisGrammar
AxisGrammar()
Definition: AxisAsProperty.h:53
Gaudi::Accumulators::Axis::setMinValue
void setMinValue(Arithmetic v)
Definition: StaticHistogram.h:278
Gaudi::Parsers::AxisGrammar::StoreMaxValueOp::operator()
void operator()(Axis &res, Arithmetic const &maxValue) const
Definition: AxisAsProperty.h:48
Gaudi::Accumulators::Axis
Definition of a default type of Histogram Axis It contains number of bins, min and max value plus a t...
Definition: StaticHistogram.h:229
Gaudi::Parsers::AxisGrammar::StoreTitleOp::operator()
void operator()(Axis &res, std::string const &title) const
Definition: AxisAsProperty.h:51
StaticHistogram.h
Iterator
boost::spirit::classic::position_iterator2< ForwardIterator > Iterator
Definition: Iterator.h:28