From c1dd792630d5de1b69d15f3e7d8bc1905fa0cb93 Mon Sep 17 00:00:00 2001
From: ralfulrich <ralf.ulrich@kit.edu>
Date: Wed, 7 Oct 2020 22:10:02 +0200
Subject: [PATCH] better interface for CONEX, better output

---
 .../Examples/cascade_proton_example.cc        |  7 ++--
 Documentation/Examples/hybrid_MC.cc           | 23 +++++------
 Documentation/Examples/vertical_EAS.cc        |  4 +-
 .../LayeredSphericalAtmosphereBuilder.h       |  4 +-
 Environment/MediumTypes.h                     |  6 +--
 Environment/testEnvironment.cc                |  4 +-
 Processes/CONEXSourceCut/CONEXSourceCut.cc    | 41 ++++++++++---------
 Processes/CONEXSourceCut/CONEXSourceCut.h     |  5 +--
 Processes/EnergyLoss/EnergyLoss.cc            | 12 ++++++
 Processes/EnergyLoss/EnergyLoss.h             |  5 +++
 .../testInteractionCounter.cc                 |  7 ++--
 Processes/Proposal/ContinuousProcess.cc       |  4 +-
 Processes/Proposal/ContinuousProcess.h        |  6 +--
 Processes/Pythia/testPythia8.cc               | 15 ++++---
 Processes/QGSJetII/testQGSJetII.cc            |  8 ++--
 Processes/Sibyll/NuclearInteraction.cc        |  9 ++--
 Processes/Sibyll/testSibyll.cc                | 22 ++++++----
 Processes/UrQMD/testUrQMD.cc                  | 26 +++++++-----
 Setup/SetupStack.h                            | 24 +++++------
 19 files changed, 129 insertions(+), 103 deletions(-)

diff --git a/Documentation/Examples/cascade_proton_example.cc b/Documentation/Examples/cascade_proton_example.cc
index 51433db11..44e2bfa01 100644
--- a/Documentation/Examples/cascade_proton_example.cc
+++ b/Documentation/Examples/cascade_proton_example.cc
@@ -74,14 +74,13 @@ int main() {
   auto& universe = *(env.GetUniverse());
   const CoordinateSystem& rootCS = env.GetCoordinateSystem();
 
-  auto theMedium =
-      EnvType::CreateNode<Sphere>(Point{rootCS, 0_m, 0_m, 0_m},
-                                  1_km * std::numeric_limits<double>::infinity());
+  auto theMedium = EnvType::CreateNode<Sphere>(
+      Point{rootCS, 0_m, 0_m, 0_m}, 1_km * std::numeric_limits<double>::infinity());
 
   using MyHomogeneousModel =
       environment::UniformMediumType<environment::UniformMagneticField<
           environment::HomogeneousMedium<setup::EnvironmentInterface>>>;
-  
+
   theMedium->SetModelProperties<MyHomogeneousModel>(
       environment::EMediumType::eAir, geometry::Vector(rootCS, 0_T, 0_T, 1_T),
       1_kg / (1_m * 1_m * 1_m),
diff --git a/Documentation/Examples/hybrid_MC.cc b/Documentation/Examples/hybrid_MC.cc
index 407107f63..bad8cee91 100644
--- a/Documentation/Examples/hybrid_MC.cc
+++ b/Documentation/Examples/hybrid_MC.cc
@@ -23,18 +23,17 @@
 #include <corsika/logging/Logging.h>
 #include <corsika/process/ProcessSequence.h>
 #include <corsika/process/StackProcess.h>
+#include <corsika/process/conex_source_cut/CONEXSourceCut.h>
 #include <corsika/process/energy_loss/EnergyLoss.h>
 #include <corsika/process/longitudinal_profile/LongitudinalProfile.h>
 #include <corsika/process/observation_plane/ObservationPlane.h>
 #include <corsika/process/on_shell_check/OnShellCheck.h>
-#include <corsika/process/energy_loss/EnergyLoss.h>
 #include <corsika/process/particle_cut/ParticleCut.h>
 #include <corsika/process/pythia/Decay.h>
 #include <corsika/process/sibyll/Decay.h>
 #include <corsika/process/sibyll/Interaction.h>
 #include <corsika/process/sibyll/NuclearInteraction.h>
 #include <corsika/process/switch_process/SwitchProcess.h>
-#include <corsika/process/conex_source_cut/CONEXSourceCut.h>
 #include <corsika/process/tracking_line/TrackingLine.h>
 #include <corsika/process/urqmd/UrQMD.h>
 #include <corsika/random/RNGManager.h>
@@ -76,7 +75,6 @@ void registerRandomStreams(const int seed) {
 template <typename T>
 using MEnv = environment::UniformMediumType<environment::UniformMagneticField<T>>;
 
-
 int main(int argc, char** argv) {
 
   logging::SetLevel(logging::level::info);
@@ -100,7 +98,8 @@ int main(int argc, char** argv) {
   EnvType env;
   const CoordinateSystem& rootCS = env.GetCoordinateSystem();
   Point const center{rootCS, 0_m, 0_m, 0_m};
-  environment::LayeredSphericalAtmosphereBuilder<setup::EnvironmentInterface> builder{center};
+  environment::LayeredSphericalAtmosphereBuilder<setup::EnvironmentInterface> builder{
+      center};
   builder.setNuclearComposition(
       {{particles::Code::Nitrogen, particles::Code::Oxygen},
        {0.7847f, 1.f - 0.7847f}}); // values taken from AIRES manual, Ar removed for now
@@ -216,8 +215,7 @@ int main(int argc, char** argv) {
   process::energy_loss::EnergyLoss eLoss{showerAxis, cut.GetECut()};
 
   corsika::process::conex_source_cut::CONEXSourceCut conex(
-      center, showerAxis, t, injectionHeight, E0,
-      particles::GetPDG(particles::Code::Proton));
+      center, showerAxis, t, injectionHeight, E0, particles::Code::Proton);
 
   process::on_shell_check::OnShellCheck reset_particle_mass(1.e-3, 1.e-1, false);
 
@@ -237,8 +235,8 @@ int main(int argc, char** argv) {
                                                        55_GeV);
   auto decaySequence = decayPythia << decaySibyll;
 
-  auto sequence = switchProcess << reset_particle_mass << decaySequence 
-                                <<  eLoss << cut << conex << longprof << observationLevel;
+  auto sequence = switchProcess << reset_particle_mass << decaySequence << eLoss << cut
+                                << conex << longprof << observationLevel;
 
   // define air shower object, run simulation
   tracking_line::TrackingLine tracking;
@@ -251,22 +249,21 @@ int main(int argc, char** argv) {
   EAS.Run();
 
   cut.ShowResults();
-  //eLoss.ShowResults();
+  eLoss.showResults();
   observationLevel.ShowResults();
   const HEPEnergyType Efinal = cut.GetCutEnergy() + cut.GetInvEnergy() +
-    cut.GetEmEnergy() + //eLoss.GetEnergyLost() +
+                               cut.GetEmEnergy() + eLoss.energyLost() +
                                observationLevel.GetEnergyGround();
   cout << "total cut energy (GeV): " << Efinal / 1_GeV << endl
        << "relative difference (%): " << (Efinal / E0 - 1) * 100 << endl;
   observationLevel.Reset();
   cut.Reset();
-  //eLoss.Reset();
+  eLoss.reset();
 
-  //conex.addParticle(0, E0, 0_eV, emPosition, momentum.normalized(), 0_s);
   conex.SolveCE();
 
   auto const hists = sibyllCounted.GetHistogram() + sibyllNucCounted.GetHistogram() +
-    urqmdCounted.GetHistogram();
+                     urqmdCounted.GetHistogram();
 
   hists.saveLab("inthist_lab.txt");
   hists.saveCMS("inthist_cms.txt");
diff --git a/Documentation/Examples/vertical_EAS.cc b/Documentation/Examples/vertical_EAS.cc
index 6c602705b..2d2a1b7cb 100644
--- a/Documentation/Examples/vertical_EAS.cc
+++ b/Documentation/Examples/vertical_EAS.cc
@@ -78,7 +78,6 @@ void registerRandomStreams(const int seed) {
 template <typename T>
 using MEnv = environment::UniformMediumType<environment::UniformMagneticField<T>>;
 
-
 int main(int argc, char** argv) {
 
   logging::SetLevel(logging::level::info);
@@ -102,7 +101,8 @@ int main(int argc, char** argv) {
   EnvType env;
   const CoordinateSystem& rootCS = env.GetCoordinateSystem();
   Point const center{rootCS, 0_m, 0_m, 0_m};
-  environment::LayeredSphericalAtmosphereBuilder<setup::EnvironmentInterface> builder{center};
+  environment::LayeredSphericalAtmosphereBuilder<setup::EnvironmentInterface> builder{
+      center};
   builder.setNuclearComposition(
       {{particles::Code::Nitrogen, particles::Code::Oxygen},
        {0.7847f, 1.f - 0.7847f}}); // values taken from AIRES manual, Ar removed for now
diff --git a/Environment/LayeredSphericalAtmosphereBuilder.h b/Environment/LayeredSphericalAtmosphereBuilder.h
index cbb705bbf..01f4855af 100644
--- a/Environment/LayeredSphericalAtmosphereBuilder.h
+++ b/Environment/LayeredSphericalAtmosphereBuilder.h
@@ -7,12 +7,12 @@
  */
 
 #include <corsika/environment/Environment.h>
+#include <corsika/environment/FlatExponential.h>
+#include <corsika/environment/HomogeneousMedium.h>
 #include <corsika/environment/IMediumModel.h>
 #include <corsika/environment/NuclearComposition.h>
 #include <corsika/environment/SlidingPlanarExponential.h>
 #include <corsika/environment/VolumeTreeNode.h>
-#include <corsika/environment/FlatExponential.h>
-#include <corsika/environment/HomogeneousMedium.h>
 
 #include <corsika/geometry/Point.h>
 #include <corsika/units/PhysicalConstants.h>
diff --git a/Environment/MediumTypes.h b/Environment/MediumTypes.h
index b2f7a0aaa..bc44560fd 100644
--- a/Environment/MediumTypes.h
+++ b/Environment/MediumTypes.h
@@ -14,9 +14,9 @@ namespace corsika::environment {
    * Medium types are useful most importantly for effective models
    * like energy losses. a particular medium (mixture of components)
    * may have specif properties not reflected by its mixture of
-   * components. 
+   * components.
    */
-  
+
   enum class EMediumType { eUnknown, eAir, eWater, eIce, eRock };
 
-}
+} // namespace corsika::environment
diff --git a/Environment/testEnvironment.cc b/Environment/testEnvironment.cc
index 99aec33f0..5480aec94 100644
--- a/Environment/testEnvironment.cc
+++ b/Environment/testEnvironment.cc
@@ -327,12 +327,12 @@ TEST_CASE("LayeredSphericalAtmosphereBuilder w/ magnetic field") {
   auto const R = builder.getEarthRadius();
 
   // check magnetic field at several locations
-  const Point pTest(gCS, -10_m, 4_m, R+35_m);
+  const Point pTest(gCS, -10_m, 4_m, R + 35_m);
   CHECK(B0.GetComponents(gCS) == univ->GetContainingNode(pTest)
                                      ->GetModelProperties()
                                      .GetMagneticField(pTest)
                                      .GetComponents(gCS));
-  const Point pTest2(gCS, 10_m, -4_m, R+15_km);
+  const Point pTest2(gCS, 10_m, -4_m, R + 15_km);
   CHECK(B1.GetComponents(gCS) == univ->GetContainingNode(pTest2)
                                      ->GetModelProperties()
                                      .GetMagneticField(pTest2)
diff --git a/Processes/CONEXSourceCut/CONEXSourceCut.cc b/Processes/CONEXSourceCut/CONEXSourceCut.cc
index 94059e886..f8d7b0911 100644
--- a/Processes/CONEXSourceCut/CONEXSourceCut.cc
+++ b/Processes/CONEXSourceCut/CONEXSourceCut.cc
@@ -6,10 +6,12 @@
  * the license.
  */
 
+#include <corsika/logging/Logging.h>
 #include <corsika/process/conex_source_cut/CONEXSourceCut.h>
 #include <corsika/process/conex_source_cut/CONEX_f.h>
 #include <corsika/random/RNGManager.h>
 #include <corsika/units/PhysicalConstants.h>
+
 #include <algorithm>
 #include <fstream>
 #include <iomanip>
@@ -23,32 +25,28 @@ using namespace corsika::setup;
 corsika::process::EProcessReturn CONEXSourceCut::DoSecondaries(
     corsika::setup::StackView& vS) {
   auto p = vS.begin();
-
   while (p != vS.end()) {
     Code const pid = p.GetPID();
-
-    auto const it = std::find_if(egs_em_codes_.cbegin(), egs_em_codes_.cend(),
-                                 [=](auto const& p) { return pid == p.first; });
-    if (it != egs_em_codes_.cend()) {
-      // EM particle
-
-      auto const egs_pid = it->second;
-
-      addParticle(egs_pid, p.GetEnergy(), p.GetMass(), p.GetPosition(),
-                  p.GetMomentum().normalized(), p.GetTime());
-
+    if (addParticle(pid, p.GetEnergy(), p.GetMass(), p.GetPosition(),
+                    p.GetMomentum().normalized(), p.GetTime())) {
       p.Delete();
     }
     ++p;
   }
-
   return corsika::process::EProcessReturn::eOk;
 }
 
-void CONEXSourceCut::addParticle(int egs_pid, HEPEnergyType energy, HEPEnergyType mass,
-                                 geometry::Point const& position,
+bool CONEXSourceCut::addParticle(particles::Code pid, HEPEnergyType energy,
+                                 HEPEnergyType mass, geometry::Point const& position,
                                  geometry::Vector<dimensionless_d> const& direction,
                                  TimeType t) {
+
+  auto const it = std::find_if(egs_em_codes_.cbegin(), egs_em_codes_.cend(),
+                               [=](auto const& p) { return pid == p.first; });
+  if (it == egs_em_codes_.cend()) { return false; }
+
+  // EM particle
+  auto const egs_pid = it->second;
   std::cout << "position conexObs: " << position.GetCoordinates(conexObservationCS_)
             << std::endl;
 
@@ -122,6 +120,8 @@ void CONEXSourceCut::addParticle(int egs_pid, HEPEnergyType energy, HEPEnergyTyp
 
   int n = 1, i = 1;
   conex::cegs4_(n, i);
+
+  return true;
 }
 
 void CONEXSourceCut::SolveCE() {
@@ -160,9 +160,12 @@ void CONEXSourceCut::SolveCE() {
   conex::get_shower_hadron_(icuth, nX, Hadrons[0]);
 
   std::ofstream file{"conex_output.txt"};
+  file << fmt::format("#{:>8} {:>13} {:>13} {:>13} {:>13} {:>13} {:>13} {:>13}\n", "X",
+                      "N", "dEdX", "Mu", "dMu", "Gamma", "El", "Had");
   for (int i = 0; i < nX; ++i) {
-    file << X[i] << " " << N[i] << " " << dEdX[i] << " " << Mu[i] << " " << dMu[i] << " "
-         << Gamma[i] << " " << Electrons[i] << " " << Hadrons[i] << std::endl;
+    file << fmt::format(
+        " {:>8.2f} {:>13.3} {:>13.3} {:>13.3} {:>13.3} {:>13.3} {:>13.3} {:>13.3}\n",
+        X[i], N[i], dEdX[i], Mu[i], dMu[i], Gamma[i], Electrons[i], Hadrons[i]);
   }
 
   std::ofstream fitout{"conex_fit.txt"};
@@ -186,7 +189,7 @@ CONEXSourceCut::CONEXSourceCut(geometry::Point center,
                                units::si::LengthType groundDist,
                                units::si::LengthType injectionHeight,
                                units::si::HEPEnergyType primaryEnergy,
-                               particles::PDGCode primaryID)
+                               particles::Code primaryPID)
     : center_{center}
     , showerAxis_{showerAxis}
     , groundDist_{groundDist}
@@ -278,7 +281,7 @@ CONEXSourceCut::CONEXSourceCut(geometry::Point center,
 
   std::cout << "theta (deg) = " << theta << "; phi (deg) = " << phi << std::endl;
 
-  int ipart = static_cast<int>(primaryID);
+  int ipart = static_cast<int>(particles::GetPDG(primaryPID));
   auto rng = corsika::random::RNGManager::GetInstance().GetRandomStream("cascade");
 
   double dimpact = 0.; // valid only if shower core is fixed on the observation plane; for
diff --git a/Processes/CONEXSourceCut/CONEXSourceCut.h b/Processes/CONEXSourceCut/CONEXSourceCut.h
index 121d8c163..5923cdbf0 100644
--- a/Processes/CONEXSourceCut/CONEXSourceCut.h
+++ b/Processes/CONEXSourceCut/CONEXSourceCut.h
@@ -31,13 +31,12 @@ namespace corsika::process {
       CONEXSourceCut(geometry::Point center, environment::ShowerAxis const& showerAxis,
                      units::si::LengthType groundDist,
                      units::si::LengthType injectionHeight,
-                     units::si::HEPEnergyType primaryEnergy,
-                     particles::PDGCode primaryID);
+                     units::si::HEPEnergyType primaryEnergy, particles::Code pid);
       corsika::process::EProcessReturn DoSecondaries(corsika::setup::StackView&);
 
       void SolveCE();
 
-      void addParticle(int egs_pid, units::si::HEPEnergyType energy,
+      bool addParticle(particles::Code pid, units::si::HEPEnergyType energy,
                        units::si::HEPEnergyType mass, geometry::Point const& position,
                        geometry::Vector<units::si::dimensionless_d> const& direction,
                        units::si::TimeType t);
diff --git a/Processes/EnergyLoss/EnergyLoss.cc b/Processes/EnergyLoss/EnergyLoss.cc
index 336294d8e..66c8a76e2 100644
--- a/Processes/EnergyLoss/EnergyLoss.cc
+++ b/Processes/EnergyLoss/EnergyLoss.cc
@@ -265,3 +265,15 @@ void EnergyLoss::PrintProfile() const {
 HEPEnergyType EnergyLoss::GetTotal() const {
   return std::accumulate(profile_.cbegin(), profile_.cend(), HEPEnergyType::zero());
 }
+
+void EnergyLoss::showResults() const {
+  using namespace corsika::units::si; // required for operator::_MeV
+  std::cout << " ******************************" << std::endl
+            << " PROCESS::ContinuousProcess: " << std::endl;
+  std::cout << " energy lost dE (GeV)      :  " << energy_lost_ / 1_GeV << std::endl;
+}
+
+void EnergyLoss::reset() {
+  using namespace corsika::units::si; // required for operator::_MeV
+  energy_lost_ = 0_GeV;
+}
diff --git a/Processes/EnergyLoss/EnergyLoss.h b/Processes/EnergyLoss/EnergyLoss.h
index 89d20bf05..f60e16b35 100644
--- a/Processes/EnergyLoss/EnergyLoss.h
+++ b/Processes/EnergyLoss/EnergyLoss.h
@@ -45,6 +45,10 @@ namespace corsika::process::energy_loss {
     static units::si::HEPEnergyType TotalEnergyLoss(setup::Stack::ParticleType const&,
                                                     const units::si::GrammageType);
 
+    void showResults() const;
+    void reset();
+    corsika::units::si::HEPEnergyType energyLost() const { return energy_lost_; }
+
   private:
     void FillProfile(setup::Trajectory const&, units::si::HEPEnergyType);
 
@@ -57,6 +61,7 @@ namespace corsika::process::energy_loss {
     environment::ShowerAxis const& shower_axis_;
     corsika::units::si::HEPEnergyType emCut_;
     std::vector<units::si::HEPEnergyType> profile_; // longitudinal profile
+    units::si::HEPEnergyType energy_lost_ = 0 * units::si::electronvolt;
   };
 
   units::si::GrammageType const dX_threshold_ = std::invoke([]() {
diff --git a/Processes/InteractionCounter/testInteractionCounter.cc b/Processes/InteractionCounter/testInteractionCounter.cc
index f8ded748c..762c615cd 100644
--- a/Processes/InteractionCounter/testInteractionCounter.cc
+++ b/Processes/InteractionCounter/testInteractionCounter.cc
@@ -27,7 +27,6 @@ using namespace corsika::process::interaction_counter;
 using namespace corsika::units;
 using namespace corsika::units::si;
 
-
 struct DummyProcess {
   template <typename TParticle>
   GrammageType GetInteractionLength([[maybe_unused]] TParticle const& particle) {
@@ -56,7 +55,8 @@ TEST_CASE("InteractionCounter") {
 
   SECTION("DoInteraction nucleus") {
     unsigned short constexpr A = 14, Z = 7;
-    auto [stackPtr, secViewPtr] = setup::testing::setupStack(particles::Code::Nucleus, A, Z, 105_TeV, nodePtr, *csPtr);
+    auto [stackPtr, secViewPtr] = setup::testing::setupStack(particles::Code::Nucleus, A,
+                                                             Z, 105_TeV, nodePtr, *csPtr);
     REQUIRE(stackPtr->getEntries() == 1);
     REQUIRE(secViewPtr->getEntries() == 0);
 
@@ -76,7 +76,8 @@ TEST_CASE("InteractionCounter") {
   SECTION("DoInteraction Lambda") {
     auto constexpr code = particles::Code::Lambda0;
     auto constexpr codeInt = static_cast<particles::CodeIntType>(code);
-    auto [stackPtr, secViewPtr] = setup::testing::setupStack(code, 0,0, 105_TeV, nodePtr, *csPtr);
+    auto [stackPtr, secViewPtr] =
+        setup::testing::setupStack(code, 0, 0, 105_TeV, nodePtr, *csPtr);
     REQUIRE(stackPtr->getEntries() == 1);
     REQUIRE(secViewPtr->getEntries() == 0);
 
diff --git a/Processes/Proposal/ContinuousProcess.cc b/Processes/Proposal/ContinuousProcess.cc
index 5d758be3b..fb4d528fa 100644
--- a/Processes/Proposal/ContinuousProcess.cc
+++ b/Processes/Proposal/ContinuousProcess.cc
@@ -146,14 +146,14 @@ namespace corsika::process::proposal {
     return dist;
   }
 
-  void ContinuousProcess::ShowResults() const {
+  void ContinuousProcess::showResults() const {
     using namespace corsika::units::si; // required for operator::_MeV
     std::cout << " ******************************" << std::endl
               << " PROCESS::ContinuousProcess: " << std::endl;
     std::cout << " energy lost dE (GeV)      :  " << energy_lost_ / 1_GeV << std::endl;
   }
 
-  void ContinuousProcess::Reset() {
+  void ContinuousProcess::reset() {
     using namespace corsika::units::si; // required for operator::_MeV
     energy_lost_ = 0_GeV;
   }
diff --git a/Processes/Proposal/ContinuousProcess.h b/Processes/Proposal/ContinuousProcess.h
index 7d9a88d28..6d6641e52 100644
--- a/Processes/Proposal/ContinuousProcess.h
+++ b/Processes/Proposal/ContinuousProcess.h
@@ -72,8 +72,8 @@ namespace corsika::process::proposal {
     template <typename Particle, typename Track>
     corsika::units::si::LengthType MaxStepLength(Particle const&, Track const&);
 
-    void ShowResults() const;
-    void Reset();
-    corsika::units::si::HEPEnergyType GetEnergyLost() const { return energy_lost_; }
+    void showResults() const;
+    void reset();
+    corsika::units::si::HEPEnergyType energyLost() const { return energy_lost_; }
   };
 } // namespace corsika::process::proposal
diff --git a/Processes/Pythia/testPythia8.cc b/Processes/Pythia/testPythia8.cc
index f64de2b0c..063d318bb 100644
--- a/Processes/Pythia/testPythia8.cc
+++ b/Processes/Pythia/testPythia8.cc
@@ -77,15 +77,15 @@ TEST_CASE("Pythia", "[processes]") {
 #include <corsika/units/PhysicalUnits.h>
 
 #include <corsika/particles/ParticleProperties.h>
+#include <corsika/setup/SetupEnvironment.h>
 #include <corsika/setup/SetupStack.h>
 #include <corsika/setup/SetupTrajectory.h>
-#include <corsika/setup/SetupEnvironment.h>
 
 #include <corsika/environment/Environment.h>
 #include <corsika/environment/HomogeneousMedium.h>
 #include <corsika/environment/NuclearComposition.h>
-#include <corsika/environment/UniformMediumType.h>
 #include <corsika/environment/UniformMagneticField.h>
+#include <corsika/environment/UniformMediumType.h>
 
 using namespace corsika;
 using namespace corsika::units::si;
@@ -105,12 +105,14 @@ TEST_CASE("pythia process") {
   auto const& cs = *csPtr;
   [[maybe_unused]] auto const& env_dummy = env;
   [[maybe_unused]] auto const& node_dummy = nodePtr;
-  
+
   SECTION("pythia decay") {
     feenableexcept(FE_INVALID);
     const HEPEnergyType P0 = 10_GeV;
-    auto [stackPtr, secViewPtr] = setup::testing::setupStack(particles::Code::PiPlus, 0, 0, P0, nodePtr, *csPtr);
-    const auto plab = corsika::stack::MomentumVector(cs, {P0, 0_eV, 0_eV}); // this is secret knowledge about setupStack
+    auto [stackPtr, secViewPtr] =
+        setup::testing::setupStack(particles::Code::PiPlus, 0, 0, P0, nodePtr, *csPtr);
+    const auto plab = corsika::stack::MomentumVector(
+        cs, {P0, 0_eV, 0_eV}); // this is secret knowledge about setupStack
     auto& stack = *stackPtr;
     auto& view = *secViewPtr;
     auto particle = stackPtr->first();
@@ -154,7 +156,8 @@ TEST_CASE("pythia process") {
   SECTION("pythia interaction") {
 
     feenableexcept(FE_INVALID);
-    auto [stackPtr, secViewPtr] = setup::testing::setupStack(particles::Code::PiPlus, 0, 0, 100_GeV, nodePtr, *csPtr);
+    auto [stackPtr, secViewPtr] = setup::testing::setupStack(particles::Code::PiPlus, 0,
+                                                             0, 100_GeV, nodePtr, *csPtr);
     auto& view = *secViewPtr;
     auto particle = stackPtr->first();
 
diff --git a/Processes/QGSJetII/testQGSJetII.cc b/Processes/QGSJetII/testQGSJetII.cc
index c281d9908..0dd569b50 100644
--- a/Processes/QGSJetII/testQGSJetII.cc
+++ b/Processes/QGSJetII/testQGSJetII.cc
@@ -110,15 +110,15 @@ TEST_CASE("QgsjetII", "[processes]") {
 #include <corsika/units/PhysicalUnits.h>
 
 #include <corsika/particles/ParticleProperties.h>
-#include <corsika/setup/SetupStack.h>
 #include <corsika/setup/SetupEnvironment.h>
+#include <corsika/setup/SetupStack.h>
 #include <corsika/setup/SetupTrajectory.h>
 
 #include <corsika/environment/Environment.h>
 #include <corsika/environment/HomogeneousMedium.h>
 #include <corsika/environment/NuclearComposition.h>
-#include <corsika/environment/UniformMediumType.h>
 #include <corsika/environment/UniformMagneticField.h>
+#include <corsika/environment/UniformMediumType.h>
 
 using namespace corsika::units::si;
 using namespace corsika::units;
@@ -134,8 +134,8 @@ TEST_CASE("QgsjetIIInterface", "[processes]") {
 
   SECTION("InteractionInterface") {
 
-    auto [stackPtr, secViewPtr] =
-      setup::testing::setupStack(particles::Code::Proton, 0,0, 110_GeV, nodePtr, *csPtr);
+    auto [stackPtr, secViewPtr] = setup::testing::setupStack(particles::Code::Proton, 0,
+                                                             0, 110_GeV, nodePtr, *csPtr);
     setup::StackView& view = *(secViewPtr.get());
     auto particle = stackPtr->first();
     auto projectile = secViewPtr->GetProjectile();
diff --git a/Processes/Sibyll/NuclearInteraction.cc b/Processes/Sibyll/NuclearInteraction.cc
index 51d33a614..4c22491a4 100644
--- a/Processes/Sibyll/NuclearInteraction.cc
+++ b/Processes/Sibyll/NuclearInteraction.cc
@@ -133,7 +133,8 @@ namespace corsika::process::sibyll {
   }
 
   template <>
-  units::si::CrossSectionType NuclearInteraction<setup::Environment>::ReadCrossSectionTable(
+  units::si::CrossSectionType
+  NuclearInteraction<setup::Environment>::ReadCrossSectionTable(
       const int ia, particles::Code pTarget, units::si::HEPEnergyType elabnuc) {
     using namespace corsika::particles;
     using namespace units::si;
@@ -153,8 +154,8 @@ namespace corsika::process::sibyll {
   template <>
   template <>
   tuple<units::si::CrossSectionType, units::si::CrossSectionType>
-  NuclearInteraction<setup::Environment>::GetCrossSection(Particle const& vP,
-                                                        const particles::Code TargetId) {
+  NuclearInteraction<setup::Environment>::GetCrossSection(
+      Particle const& vP, const particles::Code TargetId) {
     using namespace units::si;
     if (vP.GetPID() != particles::Code::Nucleus)
       throw std::runtime_error(
@@ -615,7 +616,7 @@ namespace corsika::process::sibyll {
 
   template <>
   NuclearInteraction<setup::Environment>::NuclearInteraction(
-								 process::sibyll::Interaction& hadint, setup::Environment const& env)
+      process::sibyll::Interaction& hadint, setup::Environment const& env)
       : environment_(env)
       , hadronicInteraction_(hadint) {
 
diff --git a/Processes/Sibyll/testSibyll.cc b/Processes/Sibyll/testSibyll.cc
index 69cde670f..950977e70 100644
--- a/Processes/Sibyll/testSibyll.cc
+++ b/Processes/Sibyll/testSibyll.cc
@@ -106,12 +106,14 @@ TEST_CASE("SibyllInterface", "[processes]") {
   SECTION("InteractionInterface - low energy") {
 
     const HEPEnergyType P0 = 60_GeV;
-    auto [stack, viewPtr] = setup::testing::setupStack(particles::Code::Proton, 0,0, P0, nodePtr, cs);
-    const auto plab = corsika::stack::MomentumVector(cs, {P0, 0_eV, 0_eV}); // this is secret knowledge about setupStack
+    auto [stack, viewPtr] =
+        setup::testing::setupStack(particles::Code::Proton, 0, 0, P0, nodePtr, cs);
+    const auto plab = corsika::stack::MomentumVector(
+        cs, {P0, 0_eV, 0_eV}); // this is secret knowledge about setupStack
     setup::StackView& view = *viewPtr;
-    
+
     auto particle = stack->first();
-    
+
     Interaction model;
 
     [[maybe_unused]] const process::EProcessReturn ret = model.DoInteraction(view);
@@ -180,13 +182,14 @@ TEST_CASE("SibyllInterface", "[processes]") {
     CHECK((pSum - plab).norm() / 1_GeV == Approx(0).margin(plab.norm() * 0.05 / 1_GeV));
     CHECK(pSum.norm() / P0 == Approx(1).margin(0.05));
     [[maybe_unused]] const GrammageType length = model.GetInteractionLength(particle);
-    CHECK(length/1_g*1_cm*1_cm == Approx(88.7).margin(0.1));
+    CHECK(length / 1_g * 1_cm * 1_cm == Approx(88.7).margin(0.1));
     CHECK(view.getSize() == 20);
   }
 
   SECTION("NuclearInteractionInterface") {
 
-    auto [stack, viewPtr] = setup::testing::setupStack(particles::Code::Nucleus, 4, 2, 500_GeV, nodePtr, cs);
+    auto [stack, viewPtr] =
+        setup::testing::setupStack(particles::Code::Nucleus, 4, 2, 500_GeV, nodePtr, cs);
     setup::StackView& view = *viewPtr;
     auto particle = stack->first();
 
@@ -195,15 +198,16 @@ TEST_CASE("SibyllInterface", "[processes]") {
 
     [[maybe_unused]] const process::EProcessReturn ret = model.DoInteraction(view);
     [[maybe_unused]] const GrammageType length = model.GetInteractionLength(particle);
-    CHECK(length/1_g*1_cm*1_cm == Approx(44.2).margin(.1));
+    CHECK(length / 1_g * 1_cm * 1_cm == Approx(44.2).margin(.1));
     CHECK(view.getSize() == 11);
   }
 
   SECTION("DecayInterface") {
 
-    auto [stackPtr, viewPtr] = setup::testing::setupStack(particles::Code::Lambda0, 0,0, 10_GeV, nodePtr, cs);
+    auto [stackPtr, viewPtr] =
+        setup::testing::setupStack(particles::Code::Lambda0, 0, 0, 10_GeV, nodePtr, cs);
     setup::StackView& view = *viewPtr;
-    auto& stack = *stackPtr; 
+    auto& stack = *stackPtr;
     auto particle = stack.first();
 
     Decay model;
diff --git a/Processes/UrQMD/testUrQMD.cc b/Processes/UrQMD/testUrQMD.cc
index 85616887e..17a010c2f 100644
--- a/Processes/UrQMD/testUrQMD.cc
+++ b/Processes/UrQMD/testUrQMD.cc
@@ -53,7 +53,6 @@ auto sumMomentum(TStackView const& view, geometry::CoordinateSystem const& vCS)
   return sum;
 }
 
-
 TEST_CASE("UrQMD") {
   SECTION("conversion") {
     REQUIRE_THROWS(process::UrQMD::ConvertFromUrQMD(106, 0));
@@ -67,7 +66,8 @@ TEST_CASE("UrQMD") {
   UrQMD urqmd;
 
   SECTION("interaction length") {
-    auto [env, csPtr, nodePtr] = setup::testing::setupEnvironment(particles::Code::Nitrogen);
+    auto [env, csPtr, nodePtr] =
+        setup::testing::setupEnvironment(particles::Code::Nitrogen);
     auto const& cs = *csPtr;
     [[maybe_unused]] auto const& env_dummy = env;
     [[maybe_unused]] auto const& node_dummy = nodePtr;
@@ -78,7 +78,7 @@ TEST_CASE("UrQMD") {
         particles::Code::K0,      particles::Code::K0Bar,   particles::Code::K0Long};
 
     for (auto code : validProjectileCodes) {
-      auto [stack, view] = setup::testing::setupStack(code, 0,0, 100_GeV, nodePtr, cs);
+      auto [stack, view] = setup::testing::setupStack(code, 0, 0, 100_GeV, nodePtr, cs);
       REQUIRE(stack->getEntries() == 1);
       REQUIRE(view->getEntries() == 0);
 
@@ -89,12 +89,14 @@ TEST_CASE("UrQMD") {
   }
 
   SECTION("nucleus projectile") {
-    auto [env, csPtr, nodePtr] = setup::testing::setupEnvironment(particles::Code::Oxygen);
+    auto [env, csPtr, nodePtr] =
+        setup::testing::setupEnvironment(particles::Code::Oxygen);
     [[maybe_unused]] auto const& env_dummy = env;      // against warnings
     [[maybe_unused]] auto const& node_dummy = nodePtr; // against warnings
 
     unsigned short constexpr A = 14, Z = 7;
-    auto [stackPtr, secViewPtr] = setup::testing::setupStack(particles::Code::Nucleus, A, Z, 400_GeV, nodePtr, *csPtr);
+    auto [stackPtr, secViewPtr] = setup::testing::setupStack(particles::Code::Nucleus, A,
+                                                             Z, 400_GeV, nodePtr, *csPtr);
     REQUIRE(stackPtr->getEntries() == 1);
     REQUIRE(secViewPtr->getEntries() == 0);
 
@@ -113,12 +115,13 @@ TEST_CASE("UrQMD") {
   }
 
   SECTION("\"special\" projectile") {
-    auto [env, csPtr, nodePtr] = setup::testing::setupEnvironment(particles::Code::Oxygen);
+    auto [env, csPtr, nodePtr] =
+        setup::testing::setupEnvironment(particles::Code::Oxygen);
     [[maybe_unused]] auto const& env_dummy = env;      // against warnings
     [[maybe_unused]] auto const& node_dummy = nodePtr; // against warnings
 
-    auto [stackPtr, secViewPtr] =
-      setup::testing::setupStack(particles::Code::PiPlus, 0,0, 400_GeV, nodePtr, *csPtr);
+    auto [stackPtr, secViewPtr] = setup::testing::setupStack(particles::Code::PiPlus, 0,
+                                                             0, 400_GeV, nodePtr, *csPtr);
     REQUIRE(stackPtr->getEntries() == 1);
     REQUIRE(secViewPtr->getEntries() == 0);
 
@@ -139,12 +142,13 @@ TEST_CASE("UrQMD") {
   }
 
   SECTION("K0Long projectile") {
-    auto [env, csPtr, nodePtr] = setup::testing::setupEnvironment(particles::Code::Oxygen);
+    auto [env, csPtr, nodePtr] =
+        setup::testing::setupEnvironment(particles::Code::Oxygen);
     [[maybe_unused]] auto const& env_dummy = env;      // against warnings
     [[maybe_unused]] auto const& node_dummy = nodePtr; // against warnings
 
-    auto [stackPtr, secViewPtr] =
-      setup::testing::setupStack(particles::Code::K0Long,0,0, 400_GeV, nodePtr, *csPtr);
+    auto [stackPtr, secViewPtr] = setup::testing::setupStack(particles::Code::K0Long, 0,
+                                                             0, 400_GeV, nodePtr, *csPtr);
     REQUIRE(stackPtr->getEntries() == 1);
     REQUIRE(secViewPtr->getEntries() == 0);
 
diff --git a/Setup/SetupStack.h b/Setup/SetupStack.h
index 9b4cb8712..f06aaf760 100644
--- a/Setup/SetupStack.h
+++ b/Setup/SetupStack.h
@@ -131,17 +131,17 @@ namespace corsika::setup {
 
 } // namespace corsika::setup
 
-  /**
-   * standard stack setup for unit tests. This can be moved to "test"
-   * directory, when available.
-   */
+/**
+ * standard stack setup for unit tests. This can be moved to "test"
+ * directory, when available.
+ */
 
 namespace corsika::setup::testing {
 
   inline auto setupStack(particles::Code vProjectileType, int vA, int vZ,
-			 units::si::HEPEnergyType vMomentum,
-			 const setup::Environment::BaseNodeType* vNodePtr,
-			 geometry::CoordinateSystem const& cs) {
+                         units::si::HEPEnergyType vMomentum,
+                         const setup::Environment::BaseNodeType* vNodePtr,
+                         geometry::CoordinateSystem const& cs) {
 
     using namespace corsika;
     using namespace corsika::units::si;
@@ -157,18 +157,16 @@ namespace corsika::setup::testing {
       auto particle = stack->AddParticle(
           std::make_tuple(particles::Code::Nucleus, E0, pLab, origin, 0_ns, vA, vZ));
       particle.SetNode(vNodePtr);
-      return std::make_tuple(
-          std::move(stack),
-          std::make_unique<setup::StackView>(particle));
+      return std::make_tuple(std::move(stack),
+                             std::make_unique<setup::StackView>(particle));
     } else { // not a nucleus
       HEPEnergyType const E0 = sqrt(
           units::static_pow<2>(particles::GetMass(vProjectileType)) + pLab.squaredNorm());
       auto particle =
           stack->AddParticle(std::make_tuple(vProjectileType, E0, pLab, origin, 0_ns));
       particle.SetNode(vNodePtr);
-      return std::make_tuple(
-          std::move(stack),
-          std::make_unique<setup::StackView>(particle));
+      return std::make_tuple(std::move(stack),
+                             std::make_unique<setup::StackView>(particle));
     }
   }
 
-- 
GitLab