@@ -15,10 +15,24 @@ This is an as detailed as possible outline of the requirement list for physics p
1. Internally, we must distinguish different types of contained ```Processes``` which is driven by the fact that particle can be modified in very different ways:
1. continuous processes modify the properties of one particle
1. stochastic processes produce new particles, AND remove the current beam particle. This is typical for collisions, or decays.
1. (we also need continuous processes that can _also_ produce extra secondaries, e.g. Bremsstrahlung, maybe Cherenkov photons, etc. - but this is maybe beyond what we need to define here)
1. processes that act on new secondaries produced, typical applications are:
1. processes that act on new secondaries produced (SecondariesProcess), typical applications are:
1. thinning, re-weighting
1. low-energy cuts etc.
1. survey processes that act on all currently existing particles (from time-to-time) to determine combined statistical properties, etc. (energy conservation, run-time, ETA, sanity checks)
1. boundary crossing process: when a particle is moving from one volume into another there may be interface-physics there (refraction, absorption, reflection, etc.)
1. The detailed interface to all the above processes is slightly different and driven by the underlying physics.
1. In addition we need a machinery to switch between two "branches" in the sequence based on phase-space regions, the most simple use-case is switching fro hadrons between low- and high- energy interaction model. But this can include small process-sequences by itself (switching between (sub-) process lists)
1. processes lists are ordered. They are executed in the order of appearance in the code.
1. in particular thinking about point 6.4.1/2 we have to either further break down the interface, or we define a way to let "SecondariesProcesses" act only in specific cases. Consider a ```thinning``` SecondariesProcess, which should act on the output of ```collisons``` but *not* on the output of ```decays``` etc. Thus, logically we would like to distinguish ```interaction << decay << thinning``` from ```(interaction << thinning) << decay```