Draft: Added example of pruning a HepMC event
The header examples/PruneExample/prune.h
defines the generic function
template
template <typename Select>
void prune(HepMC3::GenEvent& event, Select select, int verb=0)
which will remove all particles that are not selected by the functor
argument select. The prototype of select
is expected to be
bool select(HepMC3::ConstGenParticlePtr p);
and can be defined as a lambda-expression, for example,
auto select = [](HepMC3::ConstGenParticlePtr p) {
switch(p->status()) {
case 1: // final state
case 2: // decayed
case 4: // beam
return true;
}
return false;
};
Particles that are not selected by select
are removed from the
event.
If the removed particle has an end-vertex, then all out-going particles of that end vertex is moved to be out-going of the removed particles production vertex.
If there are more than one in-coming particle to the removed particles end-vertex, then those are also moved to be incoming of the removed particles production vertex.
In this way, the event topology is kept which can be quite important for a number of applications (e.g., Rivet), while at the same time removing, f.ex., event generator specific particles which are of no use in the application.
The example prune_example.cc
reads in data from file or standard
input, prunes the events with the above selection, and then outputs the
events to file (or standard output). The execution is timed. After
processing an event, the a line containing
- The original number of particles in the event,
- the number of particles in the event after pruning,
- and the time it took, in nanoseconds, to prune the event is written to standard error.
This is separated out of this MR