IAP GITLAB

Skip to content
Snippets Groups Projects
Commit 11a8fcc7 authored by ralfulrich's avatar ralfulrich
Browse files

updated process interface

parent 7c9a67b7
No related branches found
No related tags found
No related merge requests found
...@@ -11,8 +11,9 @@ class Process1 : public BaseProcess<Process1> { ...@@ -11,8 +11,9 @@ class Process1 : public BaseProcess<Process1> {
public: public:
Process1() {} Process1() {}
template <typename D, typename T, typename S> template <typename D, typename T, typename S>
void DoContinuous(D& d, T& t, S& s) const { EProcessReturn DoContinuous(D& d, T& t, S& s) const {
for (int i = 0; i < 10; ++i) d.p[i] += 1; for (int i = 0; i < 10; ++i) d.p[i] += 1;
return EProcessReturn::eOk;
} }
}; };
...@@ -21,8 +22,9 @@ public: ...@@ -21,8 +22,9 @@ public:
Process2() {} Process2() {}
template <typename D, typename T, typename S> template <typename D, typename T, typename S>
inline void DoContinuous(D& d, T& t, S& s) const { inline EProcessReturn DoContinuous(D& d, T& t, S& s) const {
// for (int i=0; i<10; ++i) d.p[i] *= 2; // for (int i=0; i<10; ++i) d.p[i] *= 2;
return EProcessReturn::eOk;
} }
}; };
...@@ -32,8 +34,9 @@ public: ...@@ -32,8 +34,9 @@ public:
Process3() {} Process3() {}
template <typename D, typename T, typename S> template <typename D, typename T, typename S>
inline void DoContinuous(D& d, T& t, S& s) const { inline EProcessReturn DoContinuous(D& d, T& t, S& s) const {
// for (int i=0; i<10; ++i) d.p[i] += fV; // for (int i=0; i<10; ++i) d.p[i] += fV;
return EProcessReturn::eOk;
} }
private: private:
...@@ -45,8 +48,9 @@ public: ...@@ -45,8 +48,9 @@ public:
// Process4(const int v) : fV(v) {} // Process4(const int v) : fV(v) {}
Process4() {} Process4() {}
template <typename D, typename T, typename S> template <typename D, typename T, typename S>
inline void DoContinuous(D& d, T& t, S& s) const { inline EProcessReturn DoContinuous(D& d, T& t, S& s) const {
// for (int i=0; i<10; ++i) d.p[i] /= fV; // for (int i=0; i<10; ++i) d.p[i] /= fV;
return EProcessReturn::eOk;
} }
private: private:
......
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
#include <corsika/geometry/LineTrajectory.h> // to be removed #include <corsika/geometry/LineTrajectory.h> // to be removed
#include <corsika/geometry/Point.h> // to be removed #include <corsika/geometry/Point.h> // to be removed
#include <corsika/units/PhysicalUnits.h> #include <corsika/units/PhysicalUnits.h>
#include <corsika/process/ProcessReturn.h>
using namespace corsika::units::si; using namespace corsika::units::si;
...@@ -47,7 +48,7 @@ namespace corsika::cascade { ...@@ -47,7 +48,7 @@ namespace corsika::cascade {
// DoCascadeEquations(); // // DoCascadeEquations(); //
} }
} }
void Step(Particle& particle) { void Step(Particle& particle) {
double nextStep = fProcesseList.MinStepLength(particle); double nextStep = fProcesseList.MinStepLength(particle);
corsika::geometry::CoordinateSystem root; corsika::geometry::CoordinateSystem root;
...@@ -55,13 +56,12 @@ namespace corsika::cascade { ...@@ -55,13 +56,12 @@ namespace corsika::cascade {
corsika::geometry::Point(root, {0_m, 0_m, 0_m}), corsika::geometry::Point(root, {0_m, 0_m, 0_m}),
corsika::geometry::Vector<corsika::units::si::SpeedType::dimension_type>( corsika::geometry::Vector<corsika::units::si::SpeedType::dimension_type>(
root, 0 * 1_m / second, 0 * 1_m / second, 1 * 1_m / second)); root, 0 * 1_m / second, 0 * 1_m / second, 1 * 1_m / second));
fProcesseList.DoContinuous(particle, trajectory, fStack); corsika::process::EProcessReturn status = fProcesseList.DoContinuous(particle, trajectory, fStack);
// if (particle.IsMarkedToBeDeleted()) if (status==corsika::process::EProcessReturn::eParticleAbsorbed) {
{ fStack.Delete(particle);
// std::cout << "DELETET THISSKSKJD!" << std::endl; } else {
// fStack.Delete(particle); fProcesseList.DoDiscrete(particle, fStack);
} }
fProcesseList.DoDiscrete(particle, fStack);
} }
private: private:
......
...@@ -25,7 +25,8 @@ public: ...@@ -25,7 +25,8 @@ public:
} }
template <typename Particle, typename Trajectory, typename Stack> template <typename Particle, typename Trajectory, typename Stack>
void DoContinuous(Particle& p, Trajectory& t, Stack& s) const {} EProcessReturn DoContinuous(Particle& p, Trajectory& t, Stack& s) const { return EProcessReturn::eOk;
}
template <typename Particle, typename Stack> template <typename Particle, typename Stack>
void DoDiscrete(Particle& p, Stack& s) const { void DoDiscrete(Particle& p, Stack& s) const {
...@@ -59,9 +60,9 @@ public: ...@@ -59,9 +60,9 @@ public:
} }
template <typename Particle, typename Trajectory, typename Stack> template <typename Particle, typename Trajectory, typename Stack>
void DoContinuous(Particle& p, Trajectory& t, Stack& s) const { EProcessReturn DoContinuous(Particle& p, Trajectory& t, Stack& s) const {
static int countStep = 0; static int countStep = 0;
if (!fReport) return; if (!fReport) return EProcessReturn::eOk;
//std::cout << "generation " << countStep << std::endl; //std::cout << "generation " << countStep << std::endl;
int i = 0; int i = 0;
EnergyType Etot = 0_GeV; EnergyType Etot = 0_GeV;
...@@ -76,6 +77,7 @@ public: ...@@ -76,6 +77,7 @@ public:
countStep++; countStep++;
//cout << "#=" << countStep << " " << s.GetSize() << " " << Etot/1_GeV << endl; //cout << "#=" << countStep << " " << s.GetSize() << " " << Etot/1_GeV << endl;
cout << countStep << " " << s.GetSize() << " " << Etot/1_GeV << " " << fCount << endl; cout << countStep << " " << s.GetSize() << " " << Etot/1_GeV << " " << fCount << endl;
return EProcessReturn::eOk;
} }
template <typename Particle, typename Stack> template <typename Particle, typename Stack>
......
...@@ -11,6 +11,7 @@ set ( ...@@ -11,6 +11,7 @@ set (
set ( set (
CORSIKAprocesssequence_HEADERS CORSIKAprocesssequence_HEADERS
ProcessSequence.h ProcessSequence.h
ProcessReturn.h
) )
CORSIKA_COPY_HEADERS_TO_NAMESPACE (CORSIKAprocesssequence ${CORSIKAprocesssequence_NAMESPACE} ${CORSIKAprocesssequence_HEADERS}) CORSIKA_COPY_HEADERS_TO_NAMESPACE (CORSIKAprocesssequence ${CORSIKAprocesssequence_NAMESPACE} ${CORSIKAprocesssequence_HEADERS})
......
#ifndef _include_ProcessReturn_h_
#define _include_ProcessReturn_h_
namespace corsika::process {
/**
since in a process sequence many status updates can accumulate
for a single particle, this enum should define only bit-flags
that can be accumulated easily with "|="
*/
enum class EProcessReturn {
eOk = 1,
eParticleAbsorbed = 2,
};
}
#endif
#ifndef _include_ProcessSequence_h_ #ifndef _include_ProcessSequence_h_
#define _include_ProcessSequence_h_ #define _include_ProcessSequence_h_
#include <corsika/process/ProcessReturn.h>
#include <cmath> #include <cmath>
#include <iostream> #include <iostream>
#include <typeinfo> #include <typeinfo>
namespace corsika::process { namespace corsika::process {
/** /**
\class BaseProcess \class BaseProcess
...@@ -44,9 +46,11 @@ namespace corsika::process { ...@@ -44,9 +46,11 @@ namespace corsika::process {
, B(in_B) {} , B(in_B) {}
template <typename Particle, typename Trajectory, typename Stack> template <typename Particle, typename Trajectory, typename Stack>
inline void DoContinuous(Particle& p, Trajectory& t, Stack& s) const { inline EProcessReturn DoContinuous(Particle& p, Trajectory& t, Stack& s) const {
A.DoContinuous(p, t, s); EProcessReturn ret = EProcessReturn::eOk;
B.DoContinuous(p, t, s); /*ret |=*/ A.DoContinuous(p, t, s);
/*ret |=*/ B.DoContinuous(p, t, s);
return ret;
} // add trajectory } // add trajectory
template <typename D> template <typename D>
...@@ -54,9 +58,11 @@ namespace corsika::process { ...@@ -54,9 +58,11 @@ namespace corsika::process {
return std::min(A.MinStepLength(d), B.MinStepLength(d)); return std::min(A.MinStepLength(d), B.MinStepLength(d));
} }
// template<typename D> template <typename Particle, typename Trajectory>
// inline Trajectory Transport(D& d, double& length) const { A.Transport(d, length); inline Trajectory Transport(Particle& p, double& length) const {
// B.Transport(d, length); } A.Transport(p, length); // todo: maybe check (?) if there is more than one Transport process implemented??
return B.Transport(p, length); // need to do this also to decide which Trajectory to return!!!!
}
template <typename Particle, typename Stack> template <typename Particle, typename Stack>
void DoDiscrete(Particle& p, Stack& s) const { void DoDiscrete(Particle& p, Stack& s) const {
......
...@@ -16,8 +16,9 @@ public: ...@@ -16,8 +16,9 @@ public:
Process1() {} Process1() {}
void Init() {} // cout << "Process1::Init" << endl; } void Init() {} // cout << "Process1::Init" << endl; }
template <typename D, typename T, typename S> template <typename D, typename T, typename S>
void DoContinuous(D& d, T& t, S& s) const { inline EProcessReturn DoContinuous(D& d, T& t, S& s) const {
for (int i = 0; i < 10; ++i) d.p[i] += 1 + i; for (int i = 0; i < 10; ++i) d.p[i] += 1 + i;
return EProcessReturn::eOk;
} }
}; };
...@@ -26,8 +27,9 @@ public: ...@@ -26,8 +27,9 @@ public:
Process2() {} Process2() {}
void Init() {} // cout << "Process2::Init" << endl; } void Init() {} // cout << "Process2::Init" << endl; }
template <typename D, typename T, typename S> template <typename D, typename T, typename S>
inline void DoContinuous(D& d, T& t, S& s) const { inline EProcessReturn DoContinuous(D& d, T& t, S& s) const {
for (int i = 0; i < 10; ++i) d.p[i] *= 0.7; for (int i = 0; i < 10; ++i) d.p[i] *= 0.7;
return EProcessReturn::eOk;
} }
}; };
...@@ -36,8 +38,9 @@ public: ...@@ -36,8 +38,9 @@ public:
Process3() {} Process3() {}
void Init() {} // cout << "Process3::Init" << endl; } void Init() {} // cout << "Process3::Init" << endl; }
template <typename D, typename T, typename S> template <typename D, typename T, typename S>
inline void DoContinuous(D& d, T& t, S& s) const { inline EProcessReturn DoContinuous(D& d, T& t, S& s) const {
for (int i = 0; i < 10; ++i) d.p[i] += 0.933; for (int i = 0; i < 10; ++i) d.p[i] += 0.933;
return EProcessReturn::eOk;
} }
}; };
...@@ -46,9 +49,10 @@ public: ...@@ -46,9 +49,10 @@ public:
Process4() {} Process4() {}
void Init() {} // cout << "Process4::Init" << endl; } void Init() {} // cout << "Process4::Init" << endl; }
template <typename D, typename T, typename S> template <typename D, typename T, typename S>
inline void DoContinuous(D& d, T& t, S& s) const { inline EProcessReturn DoContinuous(D& d, T& t, S& s) const {
for (int i = 0; i < 10; ++i) d.p[i] /= 1.2; for (int i = 0; i < 10; ++i) d.p[i] /= 1.2;
} return EProcessReturn::eOk;
}
// inline double MinStepLength(D& d) { // inline double MinStepLength(D& d) {
// void DoDiscrete(Particle& p, Stack& s) const { // void DoDiscrete(Particle& p, Stack& s) const {
}; };
......
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