From 83bf21d62c52f5395d670ecd474d4238fcf933b7 Mon Sep 17 00:00:00 2001
From: Maximilian Reininghaus <maximilian.reininghaus@kit.edu>
Date: Wed, 23 Sep 2020 17:37:54 +0200
Subject: [PATCH] adapted testHistoryView to new semantics

---
 Framework/Cascade/History.h      | 70 -------------------------------
 Stack/History/testHistoryView.cc | 71 ++++++++++----------------------
 2 files changed, 22 insertions(+), 119 deletions(-)
 delete mode 100644 Framework/Cascade/History.h

diff --git a/Framework/Cascade/History.h b/Framework/Cascade/History.h
deleted file mode 100644
index 530e5917a..000000000
--- a/Framework/Cascade/History.h
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * (c) Copyright 2020 CORSIKA Project, corsika-project@lists.kit.edu
- *
- * This software is distributed under the terms of the GNU General Public
- * Licence version 3 (GPL Version 3). See file LICENSE for a full version of
- * the license.
- */
-
-#include <memory>
-#include <utility>
-#include <variant>
-
-using ParticleCode = std::variant<corsika::particles::ParticleCode, std::pair<int, int>>;
-
-class SecondaryParticle {
-  corsika::units::si::HEPEnergyType const energy_;
-  corsika::geometry::Vector<corsika::units::si::hepmomentum_d> const momentum_;
-  ParticleCode const pid_;
-
-  // what else...?
-  // - polarization
-
-public:
-  SecondaryParticle(energy, momentum, pid)
-      : energy_{energy}
-      , momentum_{momentum}
-      , pid_{pid} {}
-};
-
-class Event; // forward declaration
-using EventPtr = std::shared_ptr<Event>;
-
-struct ProjectileParticle {
-  std::pair<EventPtr, size_t> origin;
-  corsika::geometry::Point position;
-  coriska::units::si::TimeType time;
-  corsika::geometry::Vector<corsika::units::si::hepmomentum_d> momentum;
-  corsika::units::si::HEPEnergyType energy;
-
-  // weight
-};
-
-struct Event {
-  corsika::particles::ParticleCode targetCode; // cannot be const...
-  ProjectileParticle projectile;
-
-  std::vector<SecondaryParticle> secondaries;
-};
-
-template <typename TStackView>
-class EventBuilder {
-  TStackView& stackView_;
-  EventPtr event_;
-
-public:
-  EventBuilder(TStackView& view)
-      : stackView_{stackView}
-      , event_{std::make_shared<Event>()} {}
-
-  template <typename... Args>
-  void AddSecondary(Args&&... args) {
-    auto const s = stackView.AddSecondary(std::forward<Args>(args), event);
-    event->secondaries.emplace_back(s.GetEnergy(), s.GetMomentum(), s.GetParticleID());
-  }
-
-  void SetProjectile() {}
-  void SetTarget(corsika::particles::ParticleCode targetCode) {
-    event_->targetCode = targetCode;
-  }
-};
diff --git a/Stack/History/testHistoryView.cc b/Stack/History/testHistoryView.cc
index 9ef0a2f48..bba09b71c 100644
--- a/Stack/History/testHistoryView.cc
+++ b/Stack/History/testHistoryView.cc
@@ -19,7 +19,6 @@
 #include <iostream>
 
 using namespace corsika;
-using namespace corsika::stack;
 using namespace corsika::geometry;
 using namespace corsika::units::si;
 
@@ -31,8 +30,8 @@ using namespace corsika::units::si;
 // combine dummy stack with geometry information for tracking
 template <typename TStackIter>
 using StackWithHistoryInterface = corsika::stack::CombinedParticleInterface<
-  stack::nuclear_extension::ParticleDataStack::PIType, history::HistoryEventDataInterface,
-    TStackIter>;
+    stack::nuclear_extension::ParticleDataStack::PIType,
+    history::HistoryEventDataInterface, TStackIter>;
 
 using TestStack = corsika::stack::CombinedStack<
     typename stack::nuclear_extension::ParticleDataStack::StackImpl,
@@ -62,25 +61,25 @@ TEST_CASE("HistoryStackExtension", "[stack]") {
       geometry::RootCoordinateSystem::GetInstance().GetRootCoordinateSystem();
 
   // in this test we only use one singel stack !
-  TestStack s;
+  TestStack stack;
 
   // add primary particle
-  auto p0 = s.AddParticle(
+  auto p0 = stack.AddParticle(
       std::tuple<particles::Code, units::si::HEPEnergyType,
                  corsika::stack::MomentumVector, geometry::Point, units::si::TimeType>{
           particles::Code::Electron, 1.5_GeV,
           corsika::stack::MomentumVector(dummyCS, {1_GeV, 1_GeV, 1_GeV}),
           Point(dummyCS, {1 * meter, 1 * meter, 1 * meter}), 100_s});
 
-  CHECK(s.getEntries() == 1);
-  corsika::history::EvtPtr evt = p0.GetEvent();
+  CHECK(stack.getEntries() == 1);
+  corsika::history::EventPtr evt = p0.GetEvent();
   CHECK(evt == nullptr);
 
   // add secondaries, 1st generation
   history::HistorySecondaryView<TestStackView> hview0(p0);
 
-  auto ev0 = p0.GetEvent();
-  CHECK(ev0 != nullptr);
+  auto const ev0 = p0.GetEvent();
+  CHECK(ev0 == nullptr);
   // CHECK(ev0->projectile(s.begin()) == p0);
 
   // add 5 secondaries
@@ -92,16 +91,17 @@ TEST_CASE("HistoryStackExtension", "[stack]") {
             corsika::stack::MomentumVector(dummyCS, {1_GeV, 1_GeV, 1_GeV}),
             Point(dummyCS, {1 * meter, 1 * meter, 1 * meter}), 100_s});
 
-    CHECK(sec.GetEvent()->parentEvent() == ev0);
-    CHECK(sec.GetEvent()->parentEvent()->parentEvent() == nullptr);
+    CHECK(sec.GetParentEventIndex() == i);
+    CHECK(sec.GetEvent() != nullptr);
+    CHECK(sec.GetEvent()->parentEvent() == nullptr);
   }
 
   // read 1st genertion particle particle
-  auto p1 = s.GetNextParticle();
+  auto p1 = stack.GetNextParticle();
 
   history::HistorySecondaryView<TestStackView> hview1(p1);
 
-  auto ev1 = p1.GetEvent();
+  auto const ev1 = p1.GetEvent();
 
   // add second generation of secondaries
   // add 10 secondaries
@@ -113,17 +113,20 @@ TEST_CASE("HistoryStackExtension", "[stack]") {
             corsika::stack::MomentumVector(dummyCS, {1_GeV, 1_GeV, 1_GeV}),
             Point(dummyCS, {1 * meter, 1 * meter, 1 * meter}), 100_s});
 
+    CHECK(sec.GetParentEventIndex() == i);
     CHECK(sec.GetEvent()->parentEvent() == ev1);
     CHECK(sec.GetEvent()->parentEvent()->parentEvent() == ev0);
-    CHECK(sec.GetEvent()->parentEvent()->parentEvent()->parentEvent() == nullptr);
+
+    CHECK((stack.begin() + sec.GetEvent()->projectileIndex()).GetEvent() ==
+          sec.GetEvent()->parentEvent());
   }
 
   // read 2nd genertion particle particle
-  auto p2 = s.GetNextParticle();
+  auto p2 = stack.GetNextParticle();
 
   history::HistorySecondaryView<TestStackView> hview2(p2);
 
-  auto ev2 = p2.GetEvent();
+  auto const ev2 = p2.GetEvent();
 
   // add third generation of secondaries
   // add 15 secondaries
@@ -135,41 +138,10 @@ TEST_CASE("HistoryStackExtension", "[stack]") {
             corsika::stack::MomentumVector(dummyCS, {1_GeV, 1_GeV, 1_GeV}),
             Point(dummyCS, {1 * meter, 1 * meter, 1 * meter}), 100_s});
 
+    CHECK(sec.GetParentEventIndex() == i);
     CHECK(sec.GetEvent()->parentEvent() == ev2);
     CHECK(sec.GetEvent()->parentEvent()->parentEvent() == ev1);
     CHECK(sec.GetEvent()->parentEvent()->parentEvent()->parentEvent() == ev0);
-    CHECK(sec.GetEvent()->parentEvent()->parentEvent()->parentEvent()->parentEvent() ==
-          nullptr);
-  }
-
-  // read 3rd genertion particle particle
-  auto p3 = s.GetNextParticle();
-
-  history::HistorySecondaryView<TestStackView> hview3(p3);
-
-  auto ev3 = p3.GetEvent();
-
-  // add fourth generation of secondaries
-  // add 20 secondaries
-  for (int i = 0; i < 20; ++i) {
-    auto sec = hview3.AddSecondary(
-        std::tuple<particles::Code, units::si::HEPEnergyType,
-                   corsika::stack::MomentumVector, geometry::Point, units::si::TimeType>{
-            particles::Code::Electron, 1.5_GeV,
-            corsika::stack::MomentumVector(dummyCS, {1_GeV, 1_GeV, 1_GeV}),
-            Point(dummyCS, {1 * meter, 1 * meter, 1 * meter}), 100_s});
-
-    CHECK(sec.GetEvent()->parentEvent() == ev3);
-    CHECK(sec.GetEvent()->parentEvent()->parentEvent() == ev2);
-    CHECK(sec.GetEvent()->parentEvent()->parentEvent()->parentEvent() == ev1);
-    CHECK(sec.GetEvent()->parentEvent()->parentEvent()->parentEvent()->parentEvent() ==
-          ev0);
-    CHECK(sec.GetEvent()
-              ->parentEvent()
-              ->parentEvent()
-              ->parentEvent()
-              ->parentEvent()
-              ->parentEvent() == nullptr);
   }
 
   /*
@@ -179,7 +151,7 @@ TEST_CASE("HistoryStackExtension", "[stack]") {
     secondaries), with another projectil (with 10 secondaries), with
     antother projectil (5 secondaries), with NO parent
 
-  **/
+
   {
     auto test_ev3 = p3.GetEvent();
     auto test_sec3 = test_ev3->secondaries();
@@ -203,4 +175,5 @@ TEST_CASE("HistoryStackExtension", "[stack]") {
     CHECK(test_proj1.GetEvent()->parentEvent() == ev0);
     CHECK(test_proj1.GetEvent()->parentEvent()->parentEvent() == nullptr);
   }
+  */
 }
-- 
GitLab