From a5d290bc5296218575032fb01f333395eee4972e Mon Sep 17 00:00:00 2001 From: Maximilian Reininghaus <maximilian.reininghaus@kit.edu> Date: Fri, 17 Jul 2020 17:21:12 +0200 Subject: [PATCH] x,y coordinates for ObservationPlane --- Documentation/Examples/vertical_EAS.cc | 20 +++++++++++++++---- .../ObservationPlane/ObservationPlane.cc | 13 +++++++++--- Processes/ObservationPlane/ObservationPlane.h | 5 ++++- 3 files changed, 30 insertions(+), 8 deletions(-) diff --git a/Documentation/Examples/vertical_EAS.cc b/Documentation/Examples/vertical_EAS.cc index 388255bfc..0f4d57c87 100644 --- a/Documentation/Examples/vertical_EAS.cc +++ b/Documentation/Examples/vertical_EAS.cc @@ -162,8 +162,20 @@ int main(int argc, char** argv) { stack.AddParticle(std::make_tuple(beamCode, E0, plab, injectionPos, 0_ns, A, Z)); } else { - stack.AddParticle( - std::make_tuple(particles::Code::Proton, E0, plab, injectionPos, 0_ns)); + if (Z == 1) { + stack.AddParticle(std::tuple<particles::Code, units::si::HEPEnergyType, + corsika::stack::MomentumVector, geometry::Point, + units::si::TimeType>{particles::Code::Proton, E0, plab, + injectionPos, 0_ns}); + } else if (Z == 0) { + stack.AddParticle(std::tuple<particles::Code, units::si::HEPEnergyType, + corsika::stack::MomentumVector, geometry::Point, + units::si::TimeType>{particles::Code::Neutron, E0, + plab, injectionPos, 0_ns}); + } else { + std::cerr << "illegal parameters" << std::endl; + return EXIT_FAILURE; + } } // we make the axis much longer than the inj-core distance since the @@ -217,8 +229,8 @@ int main(int argc, char** argv) { process::longitudinal_profile::LongitudinalProfile longprof{showerAxis}; Plane const obsPlane(showerCore, Vector<dimensionless_d>(rootCS, {0., 0., 1.})); - process::observation_plane::ObservationPlane observationLevel(obsPlane, - "particles.dat"); + process::observation_plane::ObservationPlane observationLevel( + obsPlane, Vector<dimensionless_d>(rootCS, {1., 0., 0.}), "particles.dat"); process::UrQMD::UrQMD urqmd; process::interaction_counter::InteractionCounter urqmdCounted{urqmd}; diff --git a/Processes/ObservationPlane/ObservationPlane.cc b/Processes/ObservationPlane/ObservationPlane.cc index ab3a80232..7abff3513 100644 --- a/Processes/ObservationPlane/ObservationPlane.cc +++ b/Processes/ObservationPlane/ObservationPlane.cc @@ -14,14 +14,18 @@ using namespace corsika::process::observation_plane; using namespace corsika::units::si; -ObservationPlane::ObservationPlane(geometry::Plane const& obsPlane, - std::string const& filename, bool deleteOnHit) +ObservationPlane::ObservationPlane( + geometry::Plane const& obsPlane, + geometry::Vector<units::si::dimensionless_d> const& x_axis, + std::string const& filename, bool deleteOnHit) : plane_(obsPlane) , outputStream_(filename) , deleteOnHit_(deleteOnHit) , energy_ground_(0_GeV) , count_ground_(0) { - outputStream_ << "#PDG code, energy / eV, distance to center / m" << std::endl; + , xAxis_(x_axis.normalized()) + , yAxis_(obsPlane.GetNormal().cross(xAxis_)) { + outputStream_ << "#PDG code, energy / eV, x distance / m, y distance / m" << std::endl; } corsika::process::EProcessReturn ObservationPlane::DoContinuous( @@ -37,8 +41,11 @@ corsika::process::EProcessReturn ObservationPlane::DoContinuous( } const auto energy = particle.GetEnergy(); + auto const displacement = trajectory.GetPosition(1) - plane_.GetCenter(); + outputStream_ << static_cast<int>(particles::GetPDG(particle.GetPID())) << ' ' << energy / 1_eV << ' ' + << displacement.dot(xAxis_) / 1_m << ' ' << displacement.dot(yAxis_) / 1_m << (trajectory.GetPosition(1) - plane_.GetCenter()).norm() / 1_m << std::endl; diff --git a/Processes/ObservationPlane/ObservationPlane.h b/Processes/ObservationPlane/ObservationPlane.h index 86c5ba0f2..3b530f621 100644 --- a/Processes/ObservationPlane/ObservationPlane.h +++ b/Processes/ObservationPlane/ObservationPlane.h @@ -26,7 +26,9 @@ namespace corsika::process::observation_plane { class ObservationPlane : public corsika::process::ContinuousProcess<ObservationPlane> { public: - ObservationPlane(geometry::Plane const&, std::string const&, bool = true); + ObservationPlane(geometry::Plane const&, + geometry::Vector<units::si::dimensionless_d> const&, + std::string const&, bool = true); corsika::process::EProcessReturn DoContinuous( corsika::setup::Stack::ParticleType& vParticle, @@ -47,5 +49,6 @@ namespace corsika::process::observation_plane { units::si::HEPEnergyType energy_ground_ = 0 * units::si::electronvolt; unsigned int count_ground_ = 0; + geometry::Vector<units::si::dimensionless_d> const xAxis_, yAxis_; }; } // namespace corsika::process::observation_plane -- GitLab