From 7fbb4a9bb549ce0290c6293be085a3fa29f290d0 Mon Sep 17 00:00:00 2001
From: Jean-Marco Alameddine <jean-marco.alameddine@udo.edu>
Date: Mon, 22 May 2023 17:05:20 +0200
Subject: [PATCH] start refactoring variable names in InteractionModel.inl

---
 .../modules/proposal/InteractionModel.inl     | 97 ++++++++++---------
 1 file changed, 52 insertions(+), 45 deletions(-)

diff --git a/corsika/detail/modules/proposal/InteractionModel.inl b/corsika/detail/modules/proposal/InteractionModel.inl
index 7a34c1365..3f531f2bd 100644
--- a/corsika/detail/modules/proposal/InteractionModel.inl
+++ b/corsika/detail/modules/proposal/InteractionModel.inl
@@ -64,19 +64,19 @@ namespace corsika::proposal {
     if (canInteract(projectileId)) {
 
       // get or build corresponding calculators
-      auto c = getCalculator(projectile, calc_);
+      auto calculator = getCalculator(projectile, calc_);
 
       // get the rates of the interaction types for every component.
       std::uniform_real_distribution<double> distr(0., 1.);
 
-      // sample a interaction-type, loss and component
+      // sample an interaction-type, loss and component
       auto rates =
-          std::get<eINTERACTION>(c->second)->Rates(projectile.getEnergy() / 1_MeV);
-      auto [type, target_hash, v] = std::get<eINTERACTION>(c->second)->SampleLoss(
+          std::get<eINTERACTION>(calculator->second)->Rates(projectile.getEnergy() / 1_MeV);
+      auto [interaction_type, interaction_target_hash, v] = std::get<eINTERACTION>(calculator->second)->SampleLoss(
           projectile.getEnergy() / 1_MeV, rates, distr(RNG_));
 
       // TODO: This should become obsolete as soon #482 is fixed
-      if (type == PROPOSAL::InteractionType::Undefined) {
+      if (interaction_type == PROPOSAL::InteractionType::Undefined) {
         CORSIKA_LOG_WARN(
             "PROPOSAL: No particle interaction possible. "
             "Put initial particle back on stack.");
@@ -86,57 +86,64 @@ namespace corsika::proposal {
         return ProcessReturn::Ok;
       }
 
-      // Read how much random numbers are required to calculate the secondaries.
-      // Calculate the secondaries and deploy them on the corsika stack.
-      auto rnd = std::vector<double>(
-          std::get<eSECONDARIES>(c->second)->RequiredRandomNumbers(type));
-      for (auto& it : rnd) it = distr(RNG_);
-      Point const& place = projectile.getPosition();
-      CoordinateSystemPtr const& labCS = place.getCoordinateSystem();
-
-      auto point = PROPOSAL::Cartesian3D(
-          place.getX(labCS) / 1_cm, place.getY(labCS) / 1_cm, place.getZ(labCS) / 1_cm);
-      auto projectile_dir = projectile.getDirection();
-      auto d = projectile_dir.getComponents(labCS);
-      auto direction = PROPOSAL::Cartesian3D(d.getX().magnitude(), d.getY().magnitude(),
-                                             d.getZ().magnitude());
-
-      auto loss = PROPOSAL::StochasticLoss(
-          static_cast<int>(type), v * projectile.getEnergy() / 1_MeV, point, direction,
+      // Read how much random numbers are required by proposal to sample the secondary particles
+      auto random_numbers_secondaries = std::vector<double>(
+          std::get<eSECONDARIES>(calculator->second)->RequiredRandomNumbers(interaction_type));
+      for (auto& it : random_numbers_secondaries) it = distr(RNG_);
+
+      // calculate position of interaction
+      Point const& interaction_position = projectile.getPosition();
+      CoordinateSystemPtr const& labCS = interaction_position.getCoordinateSystem();
+      auto interaction_position_pp = PROPOSAL::Cartesian3D(
+          interaction_position.getX(labCS) / 1_cm,
+          interaction_position.getY(labCS) / 1_cm,
+          interaction_position.getZ(labCS) / 1_cm);
+
+      // calculate direction of initial projection
+      auto projectile_direction = projectile.getDirection();
+      auto projectile_direction_components = projectile_direction.getComponents(labCS);
+      auto projectile_direction_pp = PROPOSAL::Cartesian3D(
+          projectile_direction_components.getX().magnitude(),
+          projectile_direction_components.getY().magnitude(),
+          projectile_direction_components.getZ().magnitude());
+
+      // calculate secondary particles from interaction
+      auto energy_loss_interaction = PROPOSAL::StochasticLoss(
+          static_cast<int>(interaction_type), v * projectile.getEnergy() / 1_MeV, interaction_position_pp, projectile_direction_pp,
           projectile.getTime() / 1_s, 0., projectile.getEnergy() / 1_MeV);
-      PROPOSAL::Component target;
-      if (type != PROPOSAL::InteractionType::Ioniz)
-        target = PROPOSAL::Component::GetComponentForHash(target_hash);
-
-      auto sec =
-          std::get<eSECONDARIES>(c->second)->CalculateSecondaries(loss, target, rnd);
-      for (auto& s : sec) {
-        auto E = s.energy * 1_MeV;
-        auto vecProposal = s.direction;
-        auto dir = DirectionVector(
-            labCS, {vecProposal.GetX(), vecProposal.GetY(), vecProposal.GetZ()});
-
-        if (static_cast<PROPOSAL::ParticleType>(s.type) ==
+      PROPOSAL::Component interaction_target;
+      if (interaction_type != PROPOSAL::InteractionType::Ioniz)
+        interaction_target = PROPOSAL::Component::GetComponentForHash(interaction_target_hash);
+      auto secondary_particles =
+          std::get<eSECONDARIES>(calculator->second)->CalculateSecondaries(energy_loss_interaction, interaction_target, random_numbers_secondaries);
+
+      // deploy sampled secondary particles on stack
+      for (auto& secondary_particle : secondary_particles) {
+        auto energy = secondary_particle.energy * 1_MeV;
+        auto direction_pp = secondary_particle.direction;
+        auto direction = DirectionVector(
+            labCS, {direction_pp.GetX(), direction_pp.GetY(), direction_pp.GetZ()});
+
+        if (static_cast<PROPOSAL::ParticleType>(secondary_particle.type) ==
             PROPOSAL::ParticleType::Hadron) {
-          FourMomentum const photonP4(E, E * dir);
+          FourMomentum const photonP4(energy, energy * direction);
           // for PROPOSAL media target.GetAtomicNum() returns the atomic number in units
           // of atomic mass, so Nitrogen is 14.0067. When using media in CORSIKA the same
           // field is filled with the number of nucleons (ie. 14 for Nitrogen) To be sure
           // we explicitly cast to int
-          auto const A = int(target.GetAtomicNum());
-          auto const Z = int(target.GetNucCharge());
+          auto const A = int(interaction_target.GetAtomicNum());
+          auto const Z = int(interaction_target.GetNucCharge());
           Code const targetId = get_nucleus_code(A, Z);
           CORSIKA_LOGGER_DEBUG(
               logger_,
               "photo-hadronic interaction of projectile={} with target={}! Energy={} GeV",
-              projectileId, targetId, E / 1_GeV);
+              projectileId, targetId, energy / 1_GeV);
           this->doHadronicPhotonInteraction(view, labCS, photonP4, targetId);
         } else {
-          auto sec_code = convert_from_PDG(static_cast<PDGCode>(s.type));
+          auto sec_code = convert_from_PDG(static_cast<PDGCode>(secondary_particle.type));
           // use mass provided by PROPOSAL to ensure correct conversion to kinetic energy
-          auto massProposal =
-              PROPOSAL::ParticleDef::GetParticleDefForType(s.type).mass * 1_MeV;
-          view.addSecondary(std::make_tuple(sec_code, E - massProposal, dir));
+          auto mass = PROPOSAL::ParticleDef::GetParticleDefForType(secondary_particle.type).mass * 1_MeV;
+          view.addSecondary(std::make_tuple(sec_code, energy - mass, direction));
         }
       }
     }
@@ -161,8 +168,8 @@ namespace corsika::proposal {
     // ==============================================
 
     if (canInteract(projectileId)) {
-      auto c = getCalculator(projectile, calc_);
-      return meanMass / (std::get<eINTERACTION>(c->second)->MeanFreePath(
+      auto calculator = getCalculator(projectile, calc_);
+      return meanMass / (std::get<eINTERACTION>(calculator->second)->MeanFreePath(
                              projectileP4.getTimeLikeComponent() / 1_MeV) *
                          1_g / (1_cm * 1_cm));
     }
-- 
GitLab