From a4f8f2c59e191dd122890eb260838f651efe4c84 Mon Sep 17 00:00:00 2001 From: Remy Prechelt <prechelt@hawaii.edu> Date: Fri, 5 Feb 2021 21:32:53 -1000 Subject: [PATCH] Move writer implementation into inline file. --- .../writers/ObservationPlaneWriterParquet.inl | 54 +++++++++++++++++++ .../writers/ObservationPlaneWriterParquet.hpp | 48 ++++------------- 2 files changed, 64 insertions(+), 38 deletions(-) create mode 100644 corsika/detail/modules/writers/ObservationPlaneWriterParquet.inl diff --git a/corsika/detail/modules/writers/ObservationPlaneWriterParquet.inl b/corsika/detail/modules/writers/ObservationPlaneWriterParquet.inl new file mode 100644 index 000000000..814d5ac0b --- /dev/null +++ b/corsika/detail/modules/writers/ObservationPlaneWriterParquet.inl @@ -0,0 +1,54 @@ +/* + * (c) Copyright 2021 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. + */ + +#pragma once + +namespace corsika { + + ObservationPlaneWriterParquet::ObservationPlaneWriterParquet() + : ParquetStreamer(){}; + + void ObservationPlaneWriterParquet::startOfLibrary( + std::filesystem::path const& directory) { + + // setup the streamer + initStreamer((directory / "particles.parquet").string()); + + // build the schema + addField("pdg", parquet::Repetition::REQUIRED, parquet::Type::INT32, + parquet::ConvertedType::INT_32); + addField("energy", parquet::Repetition::REQUIRED, parquet::Type::DOUBLE, + parquet::ConvertedType::NONE); + addField("x", parquet::Repetition::REQUIRED, parquet::Type::DOUBLE, + parquet::ConvertedType::NONE); + addField("y", parquet::Repetition::REQUIRED, parquet::Type::DOUBLE, + parquet::ConvertedType::NONE); + addField("radius", parquet::Repetition::REQUIRED, parquet::Type::DOUBLE, + parquet::ConvertedType::NONE); + + // and build the streamer + buildStreamer(); + } + + void ObservationPlaneWriterParquet::endOfShower() { ++shower_; } + + void ObservationPlaneWriterParquet::endOfLibrary() { closeStreamer(); } + + void ObservationPlaneWriterParquet::write(Code const& pid, + units::si::HEPEnergyType const& energy, + units::si::LengthType const& x, + units::si::LengthType const& y, + units::si::LengthType const& radius) { + using namespace units::si; + + // write the next row - we must write `shower_` first. + (*writer_) _ << shower_ << static_cast<int>(get_PDG(pid)) << energy / 1_eV << x / 1_m + << y / 1_m << radius / 1_m << parquet::EndRow; + } + +} // namespace corsika diff --git a/corsika/modules/writers/ObservationPlaneWriterParquet.hpp b/corsika/modules/writers/ObservationPlaneWriterParquet.hpp index 25a961ac2..217b57032 100644 --- a/corsika/modules/writers/ObservationPlaneWriterParquet.hpp +++ b/corsika/modules/writers/ObservationPlaneWriterParquet.hpp @@ -23,48 +23,25 @@ namespace corsika { * * @param name The name of this output. */ - ObservationPlaneWriterParquet() - : ParquetStreamer(){}; + ObservationPlaneWriterParquet(); /** - * Called at the start of each run. + * Called at the start of each library. */ - void startOfRun(std::filesystem::path const& directory) final override { - - // setup the streamer - initStreamer((directory / "particles.parquet").string()); - - // build the schema - addField("pdg", parquet::Repetition::REQUIRED, parquet::Type::INT32, - parquet::ConvertedType::INT_32); - addField("energy", parquet::Repetition::REQUIRED, parquet::Type::DOUBLE, - parquet::ConvertedType::NONE); - addField("x", parquet::Repetition::REQUIRED, parquet::Type::DOUBLE, - parquet::ConvertedType::NONE); - addField("y", parquet::Repetition::REQUIRED, parquet::Type::DOUBLE, - parquet::ConvertedType::NONE); - addField("radius", parquet::Repetition::REQUIRED, parquet::Type::DOUBLE, - parquet::ConvertedType::NONE); - - // and build the streamer - buildStreamer(); - } + void startOfLibrary(std::filesystem::path const& directory) final override; /** - * Called at the end of each event/shower. + * Called at the end of each shower. */ - void endOfEvent() final override { ++event_; } + void endOfShower() final override; /** - * Called at the end of each run. + * Called at the end of each library. * * This must also increment the run number since we override * the default behaviour of BaseOutput. */ - void endOfRun() final override { - closeStreamer(); - ++run_; - } + void endOfLibrary() final override; protected: /** @@ -72,15 +49,10 @@ namespace corsika { */ void write(Code const& pid, units::si::HEPEnergyType const& energy, units::si::LengthType const& x, units::si::LengthType const& y, - units::si::LengthType const& radius) { - using namespace units::si; - - // write the next row - // NOTE: we must write run_ and then event_ first - (*writer_) << run_ << event_ << static_cast<int>(get_PDG(pid)) << energy / 1_eV - << x / 1_m << y / 1_m << radius / 1_m << parquet::EndRow; - } + units::si::LengthType const& radius); }; // class ObservationPlaneWriterParquet } // namespace corsika + +#include <corsika/details/modules/writers/ObservationPlaneWriterParquet.inl> -- GitLab