1 #ifndef GAUDIALG_GAUDITUPLES_H 2 #define GAUDIALG_GAUDITUPLES_H 1 15 #include "boost/algorithm/string/replace.hpp" 16 #include <boost/multi_index/hashed_index.hpp> 17 #include <boost/multi_index/member.hpp> 18 #include <boost/multi_index/ordered_index.hpp> 19 #include <boost/multi_index_container.hpp> 42 template <
class PBASE>
127 Tuple
nTuple(
const TupleID& ID,
const std::string& title,
const CLID& clid = CLID_ColumnWiseTuple )
const;
159 Tuple evtCol(
const std::string& title,
const CLID& clid = CLID_ColumnWiseTuple )
const;
199 Tuple evtCol(
const TupleID& ID,
const std::string& title,
const CLID& clid = CLID_ColumnWiseTuple )
const;
241 long printTuples()
const;
245 long printEvtCols()
const;
248 bool nTupleExists(
const TupleID& ID )
const;
250 bool evtColExists(
const TupleID& ID )
const;
262 const CLID& clid )
const;
271 const CLID& clid )
const;
277 template <typename U = PBASE, typename = std::enable_if_t<std::is_base_of<GaudiHistoAlg, PBASE>::value, U>>
280 initGaudiTuplesConstructor();
284 template <typename U = PBASE, typename = std::enable_if_t<std::is_base_of<GaudiHistoTool, PBASE>::value, U>>
286 : PBASE( type, name, parent )
288 initGaudiTuplesConstructor();
299 return i_gtInitialize();
310 return i_gtFinalize();
337 "split long directory names into short pieces (suitable for HBOOK)"};
342 this,
"NTupleDir", boost::algorithm::replace_all_copy( this->
name(),
":",
"_" ),
"subdirectory for N-Tuples"};
345 "general switch to enable/disable Event Tag Collections"};
347 Gaudi::Property<bool> m_splitEvtColDir{
this,
"EvtColSplitDir",
false,
"split long directory names into short pieces"};
351 "Top-level directory for Event Tag Collections"};
353 boost::algorithm::replace_all_copy( this->
name(),
":",
"_" ),
354 "Subdirectory for Event Tag Collections"};
366 template <
typename... Ts>
368 template <
typename... Ts>
370 template <
typename... Ts>
372 template <
typename Obj,
typename Type, Type Obj::*Member>
373 using member = boost::multi_index::member<Obj, Type, Member>;
374 template <
typename T>
375 using tag = boost::multi_index::tag<T>;
376 using nTupleMap = boost::multi_index_container<
385 decltype(
auto ) nTupleByID()
const {
return m_nTupleMap.template get<id_t>(); }
386 decltype(
auto ) nTupleByTitle()
const {
return m_nTupleMap.template get<title_t>(); }
387 decltype(
auto ) nTupleOrdered()
const {
return m_nTupleMap.template get<order_t>(); }
393 decltype(
auto ) evtColByID()
const {
return m_evtColMap.template get<id_t>(); }
394 decltype(
auto ) evtColByTitle()
const {
return m_evtColMap.template get<title_t>(); }
395 decltype(
auto ) evtColOrdered()
const {
return m_evtColMap.template get<order_t>(); }
402 #endif // GAUDIALG_GAUDITUPLES_H
nTupleMap m_evtColMap
the actual storage of event collections by title and ID
The ISvcLocator is the interface implemented by the Service Factory in the Application Manager to loc...
Implementation of property with value of concrete type.
Templated base class providing common 'ntupling' methods.
bool splitEvtColDir() const
get the flag for Event Tag Collection path split (property "EvtColsSplitDir")
const std::string & evtColDir() const
get the Event Tag Collection directory (property "EvtColsDir")
Header file for class TupleObj.
const std::string & nTupleLUN() const
get the logical unit for N-Tuples (property "NTupleLUN")
Tuples::Tuple Tuple
the actual type of the tuple
boost::multi_index::indexed_by< Ts... > indexed_by
int NumericID
type for internal numeric ID
const std::string & evtColTopDir() const
get the top-level Event Tag Collection directory (property "EvtColsTopDir")
const std::string & nTupleTopDir() const
get the top-level N-Tuple directory (property "NTupleTopDir")
bool evtColsPrint() const
print event collections at finalization
GaudiTuples(const std::string &type, const std::string &name, const IInterface *parent)
Tool constructor - SFINAE-ed to insure this constructor is only defined if PBASE derives from AlgTool...
A simple wrapper class over standard Gaudi NTuple::Tuple facility.
GaudiAlg::TupleID TupleID
the actual type of N-tuple ID
boost::multi_index::ordered_unique< Ts... > ordered_unique
TupleID::NumericID nTupleOffSet() const
get the value for N-Tuple offset (property "NTupleOffSet")
This class is used for returning status codes from appropriate routines.
Definition of the basic interface.
GaudiAlg::HistoID HistoID
the actual type for histogram identifier
boost::multi_index::tag< T > tag
PropertyBase base class allowing PropertyBase* collections to be "homogeneous".
GaudiTuples(const std::string &name, ISvcLocator *pSvcLocator)
Algorithm constructor - the SFINAE constraint below ensures that this is constructor is only defined ...
nTupleMap m_nTupleMap
the actual storage of ntuples by title and ID
unsigned int CLID
Class ID definition.
bool tuplesPrint() const
print tuples at finalization
Abstract base class which allows the user to interact with the actual N tuple implementation.
void initGaudiTuplesConstructor()
Constructor initialization and job options.
boost::multi_index::member< Obj, Type, Member > member
const std::string & evtColLUN() const
get the logical unit for Event Tag Collections (property "EvtColsLUN")
const std::string & nTupleDir() const
get the N-Tuple directory (property "NTupleDir")
bool produceEvtCols() const
get the flag for Event Tag Collection production (property "EvtColsProduce")
TupleID::NumericID evtColOffSet() const
get the value for Event Tag Collection offset (property "EvtColsOffSet")
bool splitNTupleDir() const
get the flag for N-Tuple path split (property "NTupleSplitDir")
bool produceNTuples() const
get the flag for N-Tuple production (property "NTupleProduce")
std::shared_ptr< Tuples::TupleObj > tuple
boost::multi_index_container< nTupleMapItem, indexed_by< hashed_unique< tag< title_t >, member< nTupleMapItem, std::string,&nTupleMapItem::title >>, hashed_unique< tag< id_t >, member< nTupleMapItem, TupleID,&nTupleMapItem::id >>, ordered_unique< tag< order_t >, member< nTupleMapItem, TupleID,&nTupleMapItem::id >>>> nTupleMap
ID class for Histogram and Ntuples.
Header file for class : Tuple.
boost::multi_index::hashed_unique< Ts... > hashed_unique