The Gaudi Framework  master (d98a2936)
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 
12 // cppcheck-suppress-file useInitializationList; for consistency
13 
14 #pragma once
15 
17 
18 #include <Gaudi/Parsers/Factory.h>
19 #include <GaudiKernel/ToStream.h>
20 
21 #if ( BOOST_VERSION >= 187000 ) && ( BOOST_VERSION < 188000 )
22 # define BOOST_ALLOW_DEPRECATED_HEADERS
23 #endif
24 #include <boost/spirit/include/qi.hpp>
25 #undef BOOST_ALLOW_DEPRECATED_HEADERS
26 
36 namespace Gaudi {
37  namespace Parsers {
38 
39  namespace qi = boost::spirit::qi;
40 
41  template <typename Iterator, typename Skipper, typename Arithmetic>
42  struct AxisGrammar : qi::grammar<Iterator, Gaudi::Accumulators::Axis<Arithmetic>(), qi::locals<char>, Skipper> {
44  struct StoreNbinsOp {
45  void operator()( Axis& res, unsigned int const& nBins ) const { res.setNumBins( nBins ); }
46  };
47  struct StoreMinValueOp {
48  void operator()( Axis& res, Arithmetic const& minValue ) const { res.setMinValue( minValue ); }
49  };
50  struct StoreMaxValueOp {
51  void operator()( Axis& res, Arithmetic const& maxValue ) const { res.setMaxValue( maxValue ); }
52  };
53  struct StoreTitleOp {
54  void operator()( Axis& res, std::string const& title ) const { res.setTitle( title ); }
55  };
56  AxisGrammar() : AxisGrammar::base_type( axis ) {
57  begin = enc::char_( '[' )[qi::_val = ']'] | enc::char_( '(' )[qi::_val = ')'];
58  end = enc::char_( qi::_r1 );
59  core = qi::int_[storeNbins( qi::_val, qi::_1 )] >> "," >> qi::double_[storeMinValue( qi::_val, qi::_1 )] >>
60  "," >> qi::double_[storeMaxValue( qi::_val, qi::_1 )] >>
61  -( "," >> title[storeTitle( qi::_val, qi::_1 )] );
62  axis = begin[qi::_a = qi::_1] >> core[qi::_val = qi::_1] >> end( qi::_a );
63  }
64  qi::rule<Iterator, Axis(), qi::locals<char>, Skipper> axis;
65  qi::rule<Iterator, Axis(), Skipper> core;
66  qi::rule<Iterator, char()> begin;
67  qi::rule<Iterator, void( char )> end;
69  ph::function<StoreNbinsOp> storeNbins;
70  ph::function<StoreMinValueOp> storeMinValue;
71  ph::function<StoreMaxValueOp> storeMaxValue;
72  ph::function<StoreTitleOp> storeTitle;
73  };
74 
75  template <typename Iterator, typename Skipper, typename Arithmetic>
78  };
79 
80  // Parse function... nothing special, but it must be done explicitely.
81  template <typename Arithmetic>
82  StatusCode parse( Gaudi::Accumulators::Axis<Arithmetic>& result, const std::string& input ) {
83  return parse_( result, input );
84  }
85 
86  } // namespace Parsers
87 
88 } // namespace Gaudi
Gaudi::Parsers::AxisGrammar::title
StringGrammar< Iterator, Skipper > title
Definition: AxisAsProperty.h:68
Gaudi::Parsers::AxisGrammar::storeTitle
ph::function< StoreTitleOp > storeTitle
Definition: AxisAsProperty.h:72
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:48
Gaudi::Parsers::AxisGrammar::Axis
Gaudi::Accumulators::Axis< Arithmetic > Axis
Definition: AxisAsProperty.h:43
Gaudi::Parsers::parse_
StatusCode parse_(ResultT &result, std::string_view input)
Definition: Factory.h:26
Gaudi::Parsers::AxisGrammar::StoreMaxValueOp
Definition: AxisAsProperty.h:50
Gaudi::Accumulators::Axis::setMaxValue
void setMaxValue(Arithmetic v)
Definition: StaticHistogram.h:283
ToStream.h
Gaudi::Parsers::AxisGrammar::StoreTitleOp
Definition: AxisAsProperty.h:53
Gaudi::Parsers::AxisGrammar::end
qi::rule< Iterator, void(char)> end
Definition: AxisAsProperty.h:67
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:64
Gaudi::Parsers::AxisGrammar::storeMaxValue
ph::function< StoreMaxValueOp > storeMaxValue
Definition: AxisAsProperty.h:71
Gaudi::Parsers::AxisGrammar::storeMinValue
ph::function< StoreMinValueOp > storeMinValue
Definition: AxisAsProperty.h:70
StatusCode
Definition: StatusCode.h:64
Gaudi::Parsers::StringGrammar
Definition: Grammar.h:45
Gaudi::Parsers::AxisGrammar::core
qi::rule< Iterator, Axis(), Skipper > core
Definition: AxisAsProperty.h:65
Gaudi::Parsers::AxisGrammar
Definition: AxisAsProperty.h:42
Gaudi::Parsers::SkipperGrammar
Definition: Grammar.h:36
Gaudi::Parsers::AxisGrammar::StoreNbinsOp
Definition: AxisAsProperty.h:44
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:45
Factory.h
Gaudi::Parsers::AxisGrammar::begin
qi::rule< Iterator, char()> begin
Definition: AxisAsProperty.h:66
Gaudi::Parsers::Grammar_
Definition: Grammars.h:61
Gaudi::Parsers::AxisGrammar::StoreMinValueOp
Definition: AxisAsProperty.h:47
Gaudi::Parsers::AxisGrammar::storeNbins
ph::function< StoreNbinsOp > storeNbins
Definition: AxisAsProperty.h:69
Gaudi::Parsers::AxisGrammar::AxisGrammar
AxisGrammar()
Definition: AxisAsProperty.h:56
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:51
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:54
StaticHistogram.h
Iterator
boost::spirit::classic::position_iterator2< ForwardIterator > Iterator
Definition: Iterator.h:18