From 00102e43920e1708fe06d3538b119b160900d68b Mon Sep 17 00:00:00 2001
From: Maximilian Reininghaus <maximilian.reininghaus@kit.edu>
Date: Tue, 5 Apr 2022 15:04:32 +0200
Subject: [PATCH] write time

---
 corsika/detail/modules/ObservationPlane.inl         |  2 +-
 .../modules/writers/ParticleWriterParquet.inl       | 13 ++++++++-----
 corsika/modules/writers/ParticleWriterParquet.hpp   |  7 ++++---
 tests/output/testWriterObservationPlane.cpp         | 10 +++++-----
 4 files changed, 18 insertions(+), 14 deletions(-)

diff --git a/corsika/detail/modules/ObservationPlane.inl b/corsika/detail/modules/ObservationPlane.inl
index 8f4a658b5..23e5837ad 100644
--- a/corsika/detail/modules/ObservationPlane.inl
+++ b/corsika/detail/modules/ObservationPlane.inl
@@ -53,7 +53,7 @@ namespace corsika {
     // add our particles to the output file stream
     double const weight = 1.; // particle.getWeight()
     this->write(particle.getPID(), energy, displacement.dot(xAxis_),
-                displacement.dot(yAxis_), 0_m, weight);
+                displacement.dot(yAxis_), 0_m, particle.getTime(), weight);
 
     CORSIKA_LOG_TRACE("Particle detected absorbed={}", deleteOnHit_);
 
diff --git a/corsika/detail/modules/writers/ParticleWriterParquet.inl b/corsika/detail/modules/writers/ParticleWriterParquet.inl
index 4c6a49ada..271346417 100644
--- a/corsika/detail/modules/writers/ParticleWriterParquet.inl
+++ b/corsika/detail/modules/writers/ParticleWriterParquet.inl
@@ -37,6 +37,8 @@ namespace corsika {
                      parquet::ConvertedType::NONE);
     output_.addField("z", parquet::Repetition::REQUIRED, parquet::Type::FLOAT,
                      parquet::ConvertedType::NONE);
+    output_.addField("time", parquet::Repetition::REQUIRED, parquet::Type::DOUBLE,
+                     parquet::ConvertedType::NONE);
     output_.addField("weight", parquet::Repetition::REQUIRED, parquet::Type::FLOAT,
                      parquet::ConvertedType::NONE);
 
@@ -59,16 +61,17 @@ namespace corsika {
 
   inline void ParticleWriterParquet::endOfLibrary() { output_.closeStreamer(); }
 
-  inline void ParticleWriterParquet::write(Code const& pid, HEPEnergyType const& energy,
-                                           LengthType const& x, LengthType const& y,
-                                           LengthType const& z, double const weight) {
+  inline void ParticleWriterParquet::write(Code const pid, HEPEnergyType const energy,
+                                           LengthType const x, LengthType const y,
+                                           LengthType const z, TimeType const t,
+                                           double const weight) {
 
     // write the next row - we must write `shower_` first.
     *(output_.getWriter()) << showerId_ << static_cast<int>(get_PDG(pid))
                            << static_cast<float>(energy / 1_GeV)
                            << static_cast<float>(x / 1_m) << static_cast<float>(y / 1_m)
-                           << static_cast<float>(z / 1_m) << static_cast<float>(weight)
-                           << parquet::EndRow;
+                           << static_cast<float>(z / 1_m) << static_cast<double>(t / 1_s)
+                           << static_cast<float>(weight) << parquet::EndRow;
 
     totalEnergy_ += energy;
 
diff --git a/corsika/modules/writers/ParticleWriterParquet.hpp b/corsika/modules/writers/ParticleWriterParquet.hpp
index 12451f4ed..d28abdd1c 100644
--- a/corsika/modules/writers/ParticleWriterParquet.hpp
+++ b/corsika/modules/writers/ParticleWriterParquet.hpp
@@ -49,9 +49,10 @@ namespace corsika {
     /**
      * Write a PDG/corsika::Code particle to the file.
      */
-    void write(Code const& pid, units::si::HEPEnergyType const& energy,
-               units::si::LengthType const& x, units::si::LengthType const& y,
-               units::si::LengthType const& z, const double weight);
+    void write(Code const pid, units::si::HEPEnergyType const energy,
+               units::si::LengthType const x, units::si::LengthType const y,
+               units::si::LengthType const z, units::si::TimeType const time,
+               const double weight);
 
     /**
      * Return collected library-level summary for output.
diff --git a/tests/output/testWriterObservationPlane.cpp b/tests/output/testWriterObservationPlane.cpp
index c58861f52..5b2483cf9 100644
--- a/tests/output/testWriterObservationPlane.cpp
+++ b/tests/output/testWriterObservationPlane.cpp
@@ -22,11 +22,11 @@ struct TestWriterPlane : public ParticleWriterParquet {
   YAML::Node getConfig() const { return YAML::Node(); }
 
   void checkWrite() {
-    ParticleWriterParquet::write(Code::Unknown, 1_GeV, 2_m, 3_m, 0_m, 1.0);
-    ParticleWriterParquet::write(Code::Proton, 1_GeV, 2_m, 3_m, 0_m, 1.0);
-    ParticleWriterParquet::write(Code::MuPlus, 1_GeV, 2_m, 3_m, 0_m, 1.0);
-    ParticleWriterParquet::write(Code::MuMinus, 1_GeV, 2_m, 3_m, 0_m, 1.0);
-    ParticleWriterParquet::write(Code::Photon, 1_GeV, 2_m, 3_m, 0_m, 1.0);
+    ParticleWriterParquet::write(Code::Unknown, 1_GeV, 2_m, 3_m, 0_m, 1_us, 1.0);
+    ParticleWriterParquet::write(Code::Proton, 1_GeV, 2_m, 3_m, 0_m, 1_us, 1.0);
+    ParticleWriterParquet::write(Code::MuPlus, 1_GeV, 2_m, 3_m, 0_m, 1_us, 1.0);
+    ParticleWriterParquet::write(Code::MuMinus, 1_GeV, 2_m, 3_m, 0_m, 1_us, 1.0);
+    ParticleWriterParquet::write(Code::Photon, 1_GeV, 2_m, 3_m, 0_m, 1_us, 1.0);
   }
 };
 
-- 
GitLab