From cd05ecd40ade91767f829a96868154dffcd3dda9 Mon Sep 17 00:00:00 2001 From: ralfulrich <ralf.ulrich@kit.edu> Date: Fri, 17 Dec 2021 17:32:48 +0100 Subject: [PATCH] examples --- corsika/detail/framework/core/Cascade.inl | 7 +++++++ corsika/detail/output/OutputManager.inl | 9 +++++++++ examples/boundary_example.cpp | 6 ++---- examples/cascade_example.cpp | 6 ++---- examples/cascade_proton_example.cpp | 6 ++---- examples/corsika.cpp | 4 ---- examples/em_shower.cpp | 6 ++---- examples/hybrid_MC.cpp | 6 ++---- 8 files changed, 26 insertions(+), 24 deletions(-) diff --git a/corsika/detail/framework/core/Cascade.inl b/corsika/detail/framework/core/Cascade.inl index 82b6887a3..bcbcf45ec 100644 --- a/corsika/detail/framework/core/Cascade.inl +++ b/corsika/detail/framework/core/Cascade.inl @@ -35,6 +35,10 @@ namespace corsika { template <typename TTracking, typename TProcessList, typename TOutput, typename TStack> inline void Cascade<TTracking, TProcessList, TOutput, TStack>::run() { + + // trigger the start of the outputs for this shower + output.startOfShower(); + setNodes(); // put each particle on stack in correct environment volume while (!stack_.isEmpty()) { @@ -60,6 +64,9 @@ namespace corsika { // thus, the double loop sequence_.doCascadeEquations(stack_); } + + // indicate end of shower + output.endOfShower(); } template <typename TTracking, typename TProcessList, typename TOutput, typename TStack> diff --git a/corsika/detail/output/OutputManager.inl b/corsika/detail/output/OutputManager.inl index 1b19136cc..47c5169a8 100644 --- a/corsika/detail/output/OutputManager.inl +++ b/corsika/detail/output/OutputManager.inl @@ -46,6 +46,15 @@ namespace corsika { template <typename TOutput> inline void OutputManager::add(std::string const& name, TOutput& output) { + + if (state_ == OutputState::NoInit) { + // if "add" is called after the ouptput has started, this is an ERROR. + CORSIKA_LOGGER_ERROR( + logger_, "Cannot add more outputs to OutputManager after output was started."); + throw std::runtime_error( + "Cannot add more outputs to OutputManager after output was started."); + } + // check if that name is already in the map if (outputs_.count(name) > 0) { CORSIKA_LOGGER_ERROR( diff --git a/examples/boundary_example.cpp b/examples/boundary_example.cpp index 8402dcd95..bffda918f 100644 --- a/examples/boundary_example.cpp +++ b/examples/boundary_example.cpp @@ -166,11 +166,9 @@ int main() { // define air shower object, run simulation Cascade EAS(env, tracking, sequence, output, stack); - output.startOfShower(); + output.startOfLibrary(); EAS.run(); - output.endOfShower(); + output.endOfLibrary(); CORSIKA_LOG_INFO("Done"); - - output.endOfLibrary(); } diff --git a/examples/cascade_example.cpp b/examples/cascade_example.cpp index 4a33fba50..b43428ae5 100644 --- a/examples/cascade_example.cpp +++ b/examples/cascade_example.cpp @@ -155,9 +155,9 @@ int main() { // define air shower object, run simulation Cascade EAS(env, tracking, sequence, output, stack); - output.startOfShower(); + output.startOfLibrary(); EAS.run(); - output.endOfShower(); + output.endOfLibrary(); const HEPEnergyType Efinal = dEdX.getEnergyLost(); CORSIKA_LOG_INFO( @@ -168,6 +168,4 @@ int main() { "relative difference (%): {}\n", Efinal / 1_GeV, (Efinal / E0 - 1) * 100, dEdX.getEnergyLost() / 1_GeV, dEdX.getEnergyLost() / E0 * 100); - - output.endOfLibrary(); } diff --git a/examples/cascade_proton_example.cpp b/examples/cascade_proton_example.cpp index 3d878acd6..7f41162b2 100644 --- a/examples/cascade_proton_example.cpp +++ b/examples/cascade_proton_example.cpp @@ -147,11 +147,9 @@ int main() { // define air shower object, run simulation Cascade EAS(env, tracking, sequence, output, stack); - output.startOfShower(); + output.startOfLibrary(); EAS.run(); - output.endOfShower(); + output.endOfLibrary(); CORSIKA_LOG_INFO("Done"); - - output.endOfLibrary(); } diff --git a/examples/corsika.cpp b/examples/corsika.cpp index 392f7cd22..ffda47268 100644 --- a/examples/corsika.cpp +++ b/examples/corsika.cpp @@ -380,9 +380,6 @@ int main(int argc, char** argv) { CORSIKA_LOG_INFO("Shower {} / {} ", i_shower, nevent); - // trigger the start of the outputs for this shower - output.startOfShower(); - // directory for outputs string const outdir(app["--filename"]->as<std::string>()); string const labHist_file = outdir + "/inthist_lab_" + to_string(i_shower) + ".npz"; @@ -420,7 +417,6 @@ int main(int argc, char** argv) { save_hist(hists.labHist(), labHist_file, true); save_hist(hists.CMSHist(), cMSHist_file, true); - output.endOfShower(); } // and finalize the output on disk diff --git a/examples/em_shower.cpp b/examples/em_shower.cpp index 979960925..cdd171e5e 100644 --- a/examples/em_shower.cpp +++ b/examples/em_shower.cpp @@ -183,9 +183,9 @@ int main(int argc, char** argv) { // EAS.setNodes(); // EAS.forceInteraction(); - output.startOfShower(); + output.startOfLibrary(); EAS.run(); - output.endOfShower(); + output.endOfLibrary(); HEPEnergyType const Efinal = dEdX.getEnergyLost() + observationLevel.getEnergyGround(); @@ -193,6 +193,4 @@ int main(int argc, char** argv) { "total energy budget (GeV): {}, " "relative difference (%): {}", Efinal / 1_GeV, (Efinal / E0 - 1) * 100); - - output.endOfLibrary(); } diff --git a/examples/hybrid_MC.cpp b/examples/hybrid_MC.cpp index eaf4f9881..4e6950634 100644 --- a/examples/hybrid_MC.cpp +++ b/examples/hybrid_MC.cpp @@ -316,9 +316,9 @@ int main(int argc, char** argv) { // EAS.SetNodes(); // EAS.forceInteraction(); - output.startOfShower(); + output.startOfLibrary(); EAS.run(); - output.endOfShower(); + output.endOfLibrary(); const HEPEnergyType Efinal = dEdX.getEnergyLost() + observationLevel.getEnergyGround(); CORSIKA_LOG_INFO( @@ -332,7 +332,5 @@ int main(int argc, char** argv) { save_hist(hists.labHist(), "inthist_lab_hybrid.npz", true); save_hist(hists.CMSHist(), "inthist_cms_hybrid.npz", true); - output.endOfLibrary(); - CORSIKA_LOG_INFO("done"); } -- GitLab