This major release focuses on an extensive code refactoring of PROPOSAL, next to the release of several new features and bug fixes.
Due to these restructurings of large parts of the code, most scripts using PROPOSAL need to be adapted.
The following points have been implemented in the commits listed in PR 137.
Note that PROPOSAL now requires a C++14 compatible compiler.
Major Features
- Calculation of stochastic deflections, i.e. the deflection of the initial particle direction during stochastic interactions (PR 121)
- Improved `Secondaries` class for the output of the `Propagator` class. It provides possibilities such as Queries for arbitrary geometries and/or interaction types as well as the possibility to "repropagate" particles to a certain, arbitrary particle state (PR 114, related issue 71).
- Installation of PROPOSAL with package manager conan (PR 130)
- Using spdlog instead of log4cplus as a logger (related issue 44, commit 6e83249)
- New dependency on the [CubicInterpolation](https://github.com/MaxSac/cubic_interpolation) library for better stability and maintainability using [boost](https://www.boost.org/) and [Eigen](https://gitlab.com/libeigen/eigen) (related issue #48) to outsource the interpolation tasks. Therefore boost and Eigen are indirectly new dependencies.
Minor features
- Provide (recommended) default CrossSections for different particles
- Add function to set logging level in python (related issue 106, related commit b4ba0c0)
- Add "hierarchy condition" as a new termination condition for `Propagator::Propagate` (see commit 3051774)
- Provide the possibility to apply multipliers to multiple scattering and stochastic deflection
- Vectorization of many functions in Python, which allows calling these functions directly with an array
Code refactoring
- Modularization of physical calculations in PROPOSAL into separate modules. This makes the individual modules usable for users which are not interested in the whole `Propagator` class but only individual calculation steps (see [this proceeding](https://iopscience.iop.org/article/10.1088/1742-6596/1690/1/012021) for more information about this process). Furthermore, this gives PROPOSAL a more clear code structure (related issue #40)
- Implement a more intuitive structure of the geometry class `Vector3D` by creating two separate subclasses `Cartesian3D` and `Spherical3D` (PR 122). This will take away the responsibility from to user to pay attention to whether certain transformations between coordinate systems have actually been calculated (related issues: 119, 45).
- More intuitive implementation of classes describing particles and particles losses by creating and/or refactoring the classes `ParticleState`, `StochasticLoss`, `ContinuousLoss`(PR 114, related issue 104)
- Calculations in PROPOSAL are now done using grammage instead of distances (transformation is done inside Propagator class)
- Consistent use of smart pointers to avoid memory leaks (related issue 109)
- New structure of json configuration file (see [here](https://github.com/tudo-astroparticlephysics/PROPOSAL/blob/master/docs/config_docu.md) for a documentation of the new structure)
- Special `EnergyCutSettings` options have been changed to be more intuitive: Using no absolute EnergyCut now corresponds to `INF` (formerly `-1`), using no relative EnergyCut now corresponds to `1` (formerly `-1`)
Fixes
- Fix uninitalized values in ManyBodyPhaseSpace::SampleEstimateMaxWeight (PR 132)
- False documentation of `Interpolant::Exp` method and unclear variable name (related issue 39, commit 1e5b851)
- Fix underestimation of dE2dx (and therefore ContinousRandomization) for ionization (see commit a916cc6)
- Geometries in PROPOSAL are now intialized in `cm` instead of `m` to have consistent usage of units throughout PROPOSAL (see commit db516bd)