diff --git a/Documentation/Examples/cascade_example.cc b/Documentation/Examples/cascade_example.cc index 8b1f90be659916eb1d5e014f198bca484acdb82e..555b64c0bcf3791de0c50d3b038373a65c20792f 100644 --- a/Documentation/Examples/cascade_example.cc +++ b/Documentation/Examples/cascade_example.cc @@ -223,7 +223,7 @@ struct MyBoundaryCrossingProcess MyBoundaryCrossingProcess() {} //~ MyBoundaryCrossingProcess(environment::BaseNodeType const& a, - //environment::BaseNodeType const& b) : fA(a), fB(b) {} + // environment::BaseNodeType const& b) : fA(a), fB(b) {} template <typename Particle> EProcessReturn DoBoundaryCrossing(Particle& p, @@ -241,6 +241,19 @@ struct MyBoundaryCrossingProcess void Init() {} }; +template <class T> +class TheNameModel : public T { + std::string const fName; + +public: + template <typename... Args> + TheNameModel(std::string const& name, Args&&... args) + : T(std::forward<Args>(args)...) + , fName(name) {} + + std::string const& GetName() const override { return fName; } +}; + // // The example main program for a particle cascade // @@ -254,24 +267,25 @@ int main() { EnvType env; auto& universe = *(env.GetUniverse()); - auto outerMedium = environment::Environment<EnvType>::CreateNode<Sphere>( - Point{env.GetCoordinateSystem(), 0_m, 0_m, 0_m}, - 1_km * std::numeric_limits<double>::infinity()); + auto outerMedium = + EnvType::CreateNode<Sphere>(Point{env.GetCoordinateSystem(), 0_m, 0_m, 0_m}, + 1_km * std::numeric_limits<double>::infinity()); // fraction of oxygen const float fox = 0.20946; - using MyHomogeneousModel = environment::HomogeneousMedium<setup::IEnvironmentModel>; - outerMedium->SetModelProperties<setup::IEnvironmentModel>( + outerMedium->SetModelProperties< + TheNameModel<environment::HomogeneousMedium<setup::IEnvironmentModel>>>( "outer", 1_kg / (1_m * 1_m * 1_m), environment::NuclearComposition( std::vector<particles::Code>{particles::Code::Nitrogen, particles::Code::Oxygen}, std::vector<float>{(float)1. - fox, fox})); - auto innerMedium = environment::Environment<EnvType>::CreateNode<Sphere>( + auto innerMedium = EnvType::CreateNode<Sphere>( Point{env.GetCoordinateSystem(), 0_m, 0_m, 0_m}, 2000_m); - innerMedium->SetModelProperties<setup::IEnvironmentModel>( + innerMedium->SetModelProperties< + TheNameModel<environment::HomogeneousMedium<setup::IEnvironmentModel>>>( "inner", 1_kg / (1_m * 1_m * 1_m), environment::NuclearComposition( std::vector<particles::Code>{particles::Code::Nitrogen, @@ -285,17 +299,17 @@ int main() { const CoordinateSystem& rootCS = env.GetCoordinateSystem(); // setup processes, decays and interactions - tracking_line::TrackingLine<setup::Stack, setup::Trajectory> tracking(env); + tracking_line::TrackingLine tracking; stack_inspector::StackInspector<setup::Stack> p0(true); random::RNGManager::GetInstance().RegisterRandomStream("s_rndm"); - process::sibyll::Interaction sibyll(env); - process::sibyll::NuclearInteraction sibyllNuc(env, sibyll); + process::sibyll::Interaction sibyll; + process::sibyll::NuclearInteraction sibyllNuc(sibyll); process::sibyll::Decay decay; ProcessCut cut(20_GeV); random::RNGManager::GetInstance().RegisterRandomStream("HadronicElasticModel"); - process::HadronicElasticModel::HadronicElasticInteraction hadronicElastic(env); + process::HadronicElasticModel::HadronicElasticInteraction hadronicElastic; process::TrackWriter::TrackWriter trackWriter("tracks.dat"); diff --git a/Environment/NameModel.h b/Environment/NameModel.h index 29321e5cea6d9820483d5a56b0a328e953af6bad..458c07819e75c6553c6fda4235bd445605218ec6 100644 --- a/Environment/NameModel.h +++ b/Environment/NameModel.h @@ -18,16 +18,8 @@ namespace corsika::environment { template <typename T> struct NameModel : public T { - - template <typename... Args> - NameModel(std::string const& name, Args&&... args) : T(std::forward<Args>(args)...), fName(name) {} - - std::string const& GetName() const { - return fName; - } - - private: - std::string fName; + virtual std::string const& GetName() const = 0; + virtual ~NameModel() = default; }; } // namespace corsika::environment