template<typename Feature_type, typename Dummy = void>
class HepMC3::Feature< Feature_type, Dummy >
Expose GenericFeature interface to derived Feature class.
This will get used for generic class types that aren't integral or floating point types.
A Feature wraps a function object that can extract a generic Feature_type from a ConstGenParticlePtr. Usually the Feature_type would be something like int (e.g. status) or double (e.g. pT), but it could in principle be any attribute of a particle so long as there are well defined <, <=, >, >=, == and != operators for that attribute, as well as an abs function.
Once a Feature is defined, you can obtain Filters that select Particles according to that Feature by e.g. Feature<int> status([](ConstGenParticlePtr p)->int{return p->status();}); bool is_stable = (status == 1)(p); Filter is_beam = (status == 4); bool beam = is_beam(p);
An abs function is also defined, so abs(Feature) works as you'd expect, e.g. Feature<double> rapidity([](ConstGenParticlePtr p)->double{return p->momentum().rap();}); Filter rapCut = abs(rapidity) < 2.5;
Please also see the Selector interface, which defines an abstract interface to Feature that is free of the template params and also includes some standard Features such as
Selector::STATUS; Selector::PDG_ID; Selector::PT; Selector::RAPIDITY;
Definition at line 161 of file Feature.h.