IAP GITLAB

Skip to content
Snippets Groups Projects
Commit a4738ea3 authored by Maximilian Reininghaus's avatar Maximilian Reininghaus :vulcan:
Browse files

made environment work with Ralf's recent changes

parent cd66e584
No related branches found
No related tags found
No related merge requests found
/**
* (c) Copyright 2018 CORSIKA Project, corsika-project@lists.kit.edu
*
* See file AUTHORS for a list of contributors.
*
* 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.
*/
#ifndef _include_HomogeneousMedium_h_
#define _include_HomogeneousMedium_h_
#include <corsika/environment/NuclearComposition.h>
#include <corsika/geometry/BaseTrajectory.h>
#include <corsika/geometry/Point.h>
#include <corsika/particles/ParticleProperties.h>
#include <corsika/units/PhysicalUnits.h>
#include <corsika/geometry/Trajectory.h>
#include <corsika/geometry/Line.h>
#include <corsika/geometry/Point.h>
/**
* a homogeneous medium
......@@ -31,14 +42,14 @@ namespace corsika::environment {
NuclearComposition const& GetNuclearComposition() const override { return fNuclComp; }
corsika::units::si::GrammageType IntegratedGrammage(
corsika::geometry::BaseTrajectory const& pTraj,
corsika::geometry::Trajectory<corsika::geometry::Line> const& pTraj,
corsika::units::si::TimeType pTo) const override {
using namespace corsika::units::si;
return pTraj.DistanceBetween(0_s, pTo) * fDensity;
return pTraj.ArcLength(0_s, pTo) * fDensity;
}
corsika::units::si::TimeType FromGrammage(
corsika::geometry::BaseTrajectory const& pTraj,
corsika::geometry::Trajectory<corsika::geometry::Line> const& pTraj,
corsika::units::si::GrammageType pGrammage) const override {
return pTraj.TimeFromArclength(pGrammage / fDensity);
}
......
#ifndef _include_IMediumModel_h
#define _include_IMediumModels_h
#define _include_IMediumModel_h
#include <corsika/environment/NuclearComposition.h>
#include <corsika/geometry/BaseTrajectory.h>
#include <corsika/geometry/Trajectory.h>
#include <corsika/geometry/Point.h>
#include <corsika/units/PhysicalUnits.h>
#include <tuple>
#include <vector>
namespace corsika::environment {
......@@ -16,11 +14,16 @@ namespace corsika::environment {
virtual corsika::units::si::MassDensityType GetMassDensity(
corsika::geometry::Point const&) const = 0;
// todo: think about the mixin inheritance of the trajectory vs the BaseTrajectory approach
// for now, only lines are supported
virtual corsika::units::si::GrammageType IntegratedGrammage(
corsika::geometry::BaseTrajectory const&, corsika::units::si::TimeType) const = 0;
corsika::geometry::Trajectory<corsika::geometry::Line> const&, corsika::units::si::TimeType) const = 0;
virtual corsika::units::si::TimeType FromGrammage(
corsika::geometry::BaseTrajectory const&,
corsika::geometry::Trajectory<corsika::geometry::Line> const&,
corsika::units::si::GrammageType) const = 0;
virtual NuclearComposition const& GetNuclearComposition() const = 0;
};
......
/**
* (c) Copyright 2018 CORSIKA Project, corsika-project@lists.kit.edu
*
* See file AUTHORS for a list of contributors.
*
* 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.
*/
#ifndef _include_VolumeTreeNode_H
#define _include_VolumeTreeNode_H
......
......@@ -45,7 +45,7 @@ namespace corsika::geometry {
virtual corsika::units::si::TimeType TimeFromArclength(
corsika::units::si::LengthType) const = 0;
virtual LengthType GetDistance(corsika::units::si::TimeType t1,
virtual LengthType ArcLength(corsika::units::si::TimeType t1,
corsika::units::si::TimeType t2) const = 0;
virtual corsika::units::si::TimeType GetDuration(
......
......@@ -58,7 +58,7 @@ namespace corsika::geometry {
auto GetRadius() const { return radius; }
corsika::units::si::LengthType DistanceBetween(
corsika::units::si::LengthType ArcLength(
corsika::units::si::TimeType t1, corsika::units::si::TimeType t2) const {
return (vPar + vPerp).norm() * (t2 - t1);
}
......
......@@ -32,7 +32,7 @@ namespace corsika::geometry {
Point GetPosition(corsika::units::si::TimeType t) const { return r0 + v0 * t; }
LengthType DistanceBetween(corsika::units::si::TimeType t1,
LengthType ArcLength(corsika::units::si::TimeType t1,
corsika::units::si::TimeType t2) const {
return v0.norm() * (t2 - t1);
}
......
......@@ -13,6 +13,7 @@
#define _include_TRAJECTORY_H
#include <corsika/units/PhysicalUnits.h>
#include <corsika/geometry/Point.h>
using corsika::units::si::LengthType;
using corsika::units::si::TimeType;
......@@ -25,7 +26,7 @@ namespace corsika::geometry {
corsika::units::si::TimeType fTimeLength;
public:
using T::GetDistanceBetween;
using T::ArcLength;
using T::GetPosition;
Trajectory(T const& theT, corsika::units::si::TimeType timeLength)
......@@ -36,14 +37,14 @@ namespace corsika::geometry {
return fTraj.GetPosition(t + fTStart);
}*/
Point GetPosition(const double u) const { return T::GetPosition(fTimeLength * u); }
Point GetPosition(double u) const { return T::GetPosition(fTimeLength * u); }
TimeType GetDuration() const { return fTimeLength; }
LengthType GetDistance(const corsika::units::si::TimeType t) const {
LengthType GetDistance(corsika::units::si::TimeType t) const {
assert(t > fTimeLength);
assert(t >= 0 * corsika::units::si::second);
return T::DistanceBetween(0, t);
return T::ArcLength(0, t);
}
};
......
......@@ -152,11 +152,12 @@ TEST_CASE("Trajectories") {
.norm()
.magnitude() == Approx(0).margin(absMargin));
Trajectory<Line> base(line, 1_s);
CHECK(line.GetPosition(2_s).GetCoordinates() ==
base.GetPosition(2_s).GetCoordinates());
auto const t = 1_s;
Trajectory<Line> base(line, t);
CHECK(line.GetPosition(t).GetCoordinates() ==
base.GetPosition(1.).GetCoordinates());
CHECK(base.GetDistanceBetween(1_s, 2_s) / 1_m == Approx(1));
CHECK(base.ArcLength(1_s, 2_s) / 1_m == Approx(1));
}
SECTION("Helix") {
......@@ -180,10 +181,11 @@ TEST_CASE("Trajectories") {
.norm()
.magnitude() == Approx(0).margin(absMargin));
Trajectory<Helix> const base(helix, 1_s);
CHECK(helix.GetPosition(1234_s).GetCoordinates() ==
base.GetPosition(1234_s).GetCoordinates());
auto const t = 1234_s;
Trajectory<Helix> const base(helix, t);
CHECK(helix.GetPosition(t).GetCoordinates() ==
base.GetPosition(1.).GetCoordinates());
CHECK(base.GetDistanceBetween(1_s, 2_s) / 1_m == Approx(5));
CHECK(base.ArcLength(1_s, 2_s) / 1_m == Approx(5));
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment