HepMC3 event record library
Selector.h
Go to the documentation of this file.
1// -*- C++ -*-
2//
3// This file is part of HepMC
4// Copyright (C) 2014-2021 The HepMC collaboration (see AUTHORS for details)
5//
6///
7/// @file Selector.h
8/// @brief definition of /b Selector class
9///
10#ifndef HEPMC3_SELECTOR_H
11#define HEPMC3_SELECTOR_H
12
13#include <string>
14#include <memory>
15#include "HepMC3/Filter.h"
16#include "HepMC3/Feature.h"
18
19namespace HepMC3 {
20/** @brief Forward declaration of SelectorWrapper */
21template<typename T>
22class SelectorWrapper;
23
24class Selector;
25/** @brief Declaration of ConstSelectorPtr */
26using ConstSelectorPtr = std::shared_ptr<const Selector>;
27
28/**
29 * @brief Selector is an interface to "standard" Features that are valid
30 * for both integral and floating point comparisons
31 *
32 * You would use this in preference to the more general
33 * Feature<> templated type. A Selector is constructed from a
34 * function to extract features from particles, e.g.
35 *
36 * ConstSelectorPtr status = std::make_shared<SelectorWrapper<int> >([](ConstParticlePtr p)->int{return p->status();});
37 * ConstSelectorPtr pt = std::make_shared<SelectorWrapper<double> >([](ConstParticlePtr p)->double{return p->momentum().pt();});
38 *
39 * You can then use the Selector to construct Filter functions that
40 * evaluate on particles, e.g.
41 * Filter is_stable = (*status) == 1;
42 * bool stable = is_stable(p);
43 * bool beam = (*status == 4)(p);
44 *
45 * StandardSelector contains a few standard Selectors already defined, e.g.
46 *
47 * ConstGenParticlePtr p;
48 * (StandardSelector::STATUS == 1)(p);
49 * (StandardSelector::PT > 15.)(p);
50 * (abs(StandardSelector::RAPIDITY) < 2.5)(p);
51 *
52 * you can also combined them e.g.
53 *
54 * Filter myCuts = (StandardSelector::PT > 15.) && (*abs(StandardSelector::RAPIDITY) < 2.5) || (StandardSelector::PT > 100.);
55 * bool passCuts = myCuts(p);
56 */
57class Selector {
58public:
59/** @brief Destructor */
60 virtual ~Selector() {};
61
62 virtual Filter operator > (int value) const = 0; ///< Operator >
63 virtual Filter operator > (double value) const = 0; ///< Operator >
64
65 virtual Filter operator >= (int value) const = 0; ///< Operator >=
66 virtual Filter operator >= (double value) const = 0; ///< Operator >=
67
68 virtual Filter operator < (int value) const = 0; ///< Operator <
69 virtual Filter operator < (double value) const = 0; ///< Operator <
70
71 virtual Filter operator <= (int value) const = 0; ///< Operator <=
72 virtual Filter operator <= (double value) const = 0; ///< Operator <=
73
74 virtual Filter operator == (int value) const = 0; ///< Equality
75 virtual Filter operator == (double value) const = 0; ///< Equality
76
77 virtual Filter operator != (int value) const = 0; ///< NonEquality
78 virtual Filter operator != (double value) const = 0; ///< NonEquality
79
80 virtual ConstSelectorPtr abs() const = 0; ///< abs function
81 static AttributeFeature ATTRIBUTE(const std::string &name); ///< ATTRIBUTE function
82};
83/** @brief SelectorWrapper */
84template<typename Feature_type>
85class SelectorWrapper : public Selector {
86public:
87 /// @brief Constructor
89
90 /// @brief Operator >
91 Filter operator > (int value) const override {
92 return m_internal > value;
93 }
94
95 /// @brief Operator >
96 Filter operator > (double value) const override {
97 return m_internal > value;
98 }
99
100 /// @brief Operator >=
101 Filter operator >= (int value) const override {
102 return m_internal >= value;
103 }
104
105 /// @brief Operator >=
106 Filter operator >= (double value) const override {
107 return m_internal >= value;
108 }
109
110 /// @brief Operator <
111 Filter operator < (int value) const override {
112 return m_internal < value;
113 }
114
115 /// @brief Operator <
116 Filter operator < (double value) const override {
117 return m_internal < value;
118 }
119
120 /// @brief Operator <=
121 Filter operator <= (int value) const override {
122 return m_internal <= value;
123 }
124
125 /// @brief Operator <=
126 Filter operator <= (double value) const override {
127 return m_internal <= value;
128 }
129
130 /// @brief Operator ==
131 Filter operator == (int value) const override {
132 return m_internal == value;
133 }
134
135 /// @brief Operator ==
136 Filter operator == (double value) const override {
137 return m_internal == value;
138 }
139
140 /// @brief Operator !=
141 Filter operator != (int value) const override {
142 return m_internal != value;
143 }
144
145 /// @brief Operator !=
146 Filter operator != (double value) const override {
147 return m_internal != value;
148 }
149
150 /// @brief Function abs
151 ConstSelectorPtr abs() const override {
153 copy->m_internal = m_internal.abs();
154 return ConstSelectorPtr(copy);
155 }
156
157private:
158 Feature<Feature_type> m_internal; ///< Internal feauture holder
159};
160/** @brief ConstSelectorPtr abs*/
161ConstSelectorPtr abs(const Selector &input);
162
163#if defined(WIN32) && !defined(HEPMC3search_NO_StandardSelector_EXPORTS)
164#ifdef HepMC3search_EXPORTS
165#define HEPMC3search_StandardSelector_EXPORT_API __declspec(dllexport)
166#else
167#define HEPMC3search_StandardSelector_EXPORT_API __declspec(dllimport)
168#endif
169#else
170#define HEPMC3search_StandardSelector_EXPORT_API
171#endif
172
173/** @brief StandardSelector */
175public:
176 HEPMC3search_StandardSelector_EXPORT_API static const SelectorWrapper<int> STATUS; ///< Status
177 HEPMC3search_StandardSelector_EXPORT_API static const SelectorWrapper<int> PDG_ID; ///< PDG ID
178 HEPMC3search_StandardSelector_EXPORT_API static const SelectorWrapper<double> PT; ///< Transverse momentum
179 HEPMC3search_StandardSelector_EXPORT_API static const SelectorWrapper<double> ENERGY; ///< Energy
180 HEPMC3search_StandardSelector_EXPORT_API static const SelectorWrapper<double> RAPIDITY; ///< Rapidity
181 HEPMC3search_StandardSelector_EXPORT_API static const SelectorWrapper<double> ETA; ///< Pseudorapidity
182 HEPMC3search_StandardSelector_EXPORT_API static const SelectorWrapper<double> PHI; ///< Azimuthal angle
183 HEPMC3search_StandardSelector_EXPORT_API static const SelectorWrapper<double> ET; ///< Transverse energy
184 HEPMC3search_StandardSelector_EXPORT_API static const SelectorWrapper<double> MASS; ///< Mass
185};
186
187}
188#endif
Defines AttributeFeature for obtaining Filters to search by Attribute.
Defines Feature interface for selecting Particles according to extracted Features.
Defines Filter operations for combingin Filters.
Filter for the attributes.
Expose GenericFeature interface to derived Feature class.
Definition: Feature.h:162
std::function< Feature_type(ConstGenParticlePtr)> Evaluator_type
evaluator type
Definition: Feature.h:62
Forward declaration of SelectorWrapper.
Definition: Selector.h:85
Filter operator==(int value) const override
Operator ==.
Definition: Selector.h:131
Filter operator>(int value) const override
Operator >
Definition: Selector.h:91
ConstSelectorPtr abs() const override
Function abs.
Definition: Selector.h:151
Filter operator<=(int value) const override
Operator <=.
Definition: Selector.h:121
Filter operator!=(int value) const override
Operator !=.
Definition: Selector.h:141
Feature< Feature_type > m_internal
Internal feauture holder.
Definition: Selector.h:158
Filter operator>=(int value) const override
Operator >=.
Definition: Selector.h:101
SelectorWrapper(typename Feature< Feature_type >::Evaluator_type functor)
Constructor.
Definition: Selector.h:88
Filter operator<(int value) const override
Operator <.
Definition: Selector.h:111
Selector is an interface to "standard" Features that are valid for both integral and floating point c...
Definition: Selector.h:57
virtual ~Selector()
Destructor.
Definition: Selector.h:60
virtual ConstSelectorPtr abs() const =0
abs function
virtual Filter operator>(int value) const =0
Operator >
virtual Filter operator<(int value) const =0
Operator <.
virtual Filter operator>=(int value) const =0
Operator >=.
virtual Filter operator!=(int value) const =0
NonEquality.
virtual Filter operator<=(int value) const =0
Operator <=.
virtual Filter operator==(int value) const =0
Equality.
StandardSelector.
Definition: Selector.h:174
static HEPMC3search_StandardSelector_EXPORT_API const SelectorWrapper< double > MASS
Mass.
Definition: Selector.h:184
static HEPMC3search_StandardSelector_EXPORT_API const SelectorWrapper< double > PT
Transverse momentum.
Definition: Selector.h:178
static HEPMC3search_StandardSelector_EXPORT_API const SelectorWrapper< int > PDG_ID
PDG ID.
Definition: Selector.h:177
static HEPMC3search_StandardSelector_EXPORT_API const SelectorWrapper< double > PHI
Azimuthal angle.
Definition: Selector.h:182
static HEPMC3search_StandardSelector_EXPORT_API const SelectorWrapper< double > ETA
Pseudorapidity.
Definition: Selector.h:181
static HEPMC3search_StandardSelector_EXPORT_API const SelectorWrapper< double > ET
Transverse energy.
Definition: Selector.h:183
static HEPMC3search_StandardSelector_EXPORT_API const SelectorWrapper< int > STATUS
Status.
Definition: Selector.h:176
static HEPMC3search_StandardSelector_EXPORT_API const SelectorWrapper< double > RAPIDITY
Rapidity.
Definition: Selector.h:180
static HEPMC3search_StandardSelector_EXPORT_API const SelectorWrapper< double > ENERGY
Energy.
Definition: Selector.h:179
HepMC3 main namespace.
std::function< bool(ConstGenParticlePtr)> Filter
type of Filter
Definition: Filter.h:19
std::shared_ptr< const Selector > ConstSelectorPtr
Declaration of ConstSelectorPtr.
Definition: Selector.h:26
Feature< Feature_type > abs(const Feature< Feature_type > &input)
Obtain the absolute value of a Feature. This works as you'd expect. If foo is a valid Feature,...
Definition: Feature.h:323