IAP GITLAB

Skip to content
Snippets Groups Projects
Commit 1e778920 authored by ralfulrich's avatar ralfulrich Committed by Ralf Ulrich
Browse files

examples

parent 2077c0d6
No related branches found
No related tags found
No related merge requests found
......@@ -14,11 +14,15 @@ namespace corsika {
// test for doBoundaryCrossing method
template <class TProcess, typename TReturn, typename... TArg>
template <class TProcess, typename TReturn, typename TParticle>
struct has_method_doBoundaryCrossing
: public detail::has_method_signature<TReturn, TArg...> {
: public detail::has_method_signature<TReturn, TParticle&,
typename TParticle::node_type const&,
typename TParticle::node_type const&> {
using detail::has_method_signature<TReturn, TArg...>::testSignature;
using detail::has_method_signature<
TReturn, TParticle&, typename TParticle::node_type const&,
typename TParticle::node_type const&>::testSignature;
// the default value
template <class T>
......@@ -26,7 +30,7 @@ namespace corsika {
// templated parameter option
template <class T>
static decltype(testSignature(&T::template doBoundaryCrossing<TArg...>)) test(
static decltype(testSignature(&T::template doBoundaryCrossing<TParticle>)) test(
std::nullptr_t);
// non templated parameter option
......@@ -38,8 +42,8 @@ namespace corsika {
static const bool value = type::value;
};
template <class TProcess, typename TReturn, typename... TArg>
template <class TProcess, typename TReturn, typename TParticle>
bool constexpr has_method_doBoundaryCrossing_v =
has_method_doBoundaryCrossing<TProcess, TReturn, TArg...>::value;
has_method_doBoundaryCrossing<TProcess, TReturn, TParticle>::value;
} // namespace corsika
......@@ -45,11 +45,13 @@ namespace corsika {
// interface checking on TProcess1
static_assert(
has_method_doBoundaryCrossing_v<TProcess1, ProcessReturn, TParticle&,
typename TParticle::node_type const&,
typename TParticle::node_type const&>,
has_method_doBoundaryCrossing_v<TProcess1, ProcessReturn, TParticle>,
// typename TParticle::node_type
// const&,
// typename TParticle::node_type const&>,
"TDerived has no method with correct signature \"ProcessReturn "
"doBoundaryCrossing(TParticle&, VolumeNode&, VolumeNode&)\" required for "
"doBoundaryCrossing(TParticle&, VolumeNode const&, VolumeNode const&)\" "
"required for "
"BoundaryCrossingProcess<TDerived>. ");
}
......@@ -64,11 +66,13 @@ namespace corsika {
process2_type>) {
// interface checking on TProcess2
static_assert(
has_method_doBoundaryCrossing_v<TProcess2, ProcessReturn, TParticle&,
typename TParticle::node_type const&,
typename TParticle::node_type const&>,
has_method_doBoundaryCrossing_v<TProcess2, ProcessReturn, TParticle&>,
// typename TParticle::node_type
// const&,
// typename TParticle::node_type const&>,
"TDerived has no method with correct signature \"ProcessReturn "
"doBoundaryCrossing(TParticle&, VolumeNode&, VolumeNode&)\" required for "
"doBoundaryCrossing(TParticle&, VolumeNode const&, VolumeNode const&)\" "
"required for "
"BoundaryCrossingProcess<TDerived>. ");
}
......@@ -93,9 +97,13 @@ namespace corsika {
// interface checking on TProcess1
static_assert(
has_method_doContinuous_v<TProcess1, ProcessReturn, TParticle&, TTrack&>,
has_method_doContinuous_v<TProcess1, ProcessReturn, TParticle&, TTrack&> ||
has_method_doContinuous_v<TProcess1, ProcessReturn, TParticle&,
TTrack const&> ||
has_method_doContinuous_v<TProcess1, ProcessReturn, TParticle const&,
TTrack const&>,
"TDerived has no method with correct signature \"ProcessReturn "
"doContinuous(TParticle&,TTrack&,bool)\" required for "
"doContinuous(TParticle [const]&,TTrack [const]&,bool)\" required for "
"ContinuousProcess<TDerived>. ");
ret |=
......@@ -108,9 +116,13 @@ namespace corsika {
// interface checking on TProcess2
static_assert(
has_method_doContinuous_v<TProcess2, ProcessReturn, TParticle&, TTrack&>,
has_method_doContinuous_v<TProcess2, ProcessReturn, TParticle&, TTrack&> ||
has_method_doContinuous_v<TProcess2, ProcessReturn, TParticle&,
TTrack const&> ||
has_method_doContinuous_v<TProcess2, ProcessReturn, TParticle const&,
TTrack const&>,
"TDerived has no method with correct signature \"ProcessReturn "
"doContinuous(TParticle&,TTrack&,bool)\" required for "
"doContinuous(TParticle [const]&,TTrack [const]&,bool)\" required for "
"ContinuousProcess<TDerived>. ");
ret |=
......@@ -129,9 +141,10 @@ namespace corsika {
t1ProcSeq) {
// interface checking on TProcess1
static_assert(has_method_doSecondaries_v<TProcess1, void, TSecondaries&>,
static_assert(has_method_doSecondaries_v<TProcess1, void, TSecondaries&> ||
has_method_doSecondaries_v<TProcess1, void, TSecondaries const&>,
"TDerived has no method with correct signature \"void "
"doSecondaries(TStackView&)\" required for "
"doSecondaries(TStackView [const]&)\" required for "
"SecondariesProcessProcess<TDerived>. ");
A_.doSecondaries(vS);
......@@ -140,9 +153,10 @@ namespace corsika {
t2ProcSeq) {
// interface checking on TProcess2
static_assert(has_method_doSecondaries_v<TProcess2, void, TSecondaries&>,
static_assert(has_method_doSecondaries_v<TProcess2, void, TSecondaries&> ||
has_method_doSecondaries_v<TProcess2, void, TSecondaries const&>,
"TDerived has no method with correct signature \"void "
"doSecondaries(TStackView&)\" required for "
"doSecondaries(TStackView [const]&)\" required for "
"SecondariesProcessProcess<TDerived>. ");
B_.doSecondaries(vS);
......@@ -177,7 +191,7 @@ namespace corsika {
static_assert(has_method_doStack_v<TProcess1, void, TStack&> ||
has_method_doStack_v<TProcess1, void, TStack const&>,
"TDerived has no method with correct signature \"void "
"doStack(TStackx&)\" required for "
"doStack(TStack [const]&)\" required for "
"StackProcess<TDerived>. ");
if (A_.checkStep()) { A_.doStack(stack); }
......@@ -189,7 +203,7 @@ namespace corsika {
static_assert(has_method_doStack_v<TProcess2, void, TStack&> ||
has_method_doStack_v<TProcess2, void, TStack const&>,
"TDerived has no method with correct signature \"void "
"doStack(TStack&)\" required for "
"doStack(TStack [const]&)\" required for "
"StackProcess<TDerived>. ");
if (B_.checkStep()) { B_.doStack(stack); }
......@@ -212,28 +226,27 @@ namespace corsika {
} else if constexpr (is_continuous_process_v<process1_type>) {
// interface checking on TProcess1
static_assert(
has_method_getMaxStepLength_v<TProcess1, LengthType, TParticle&, TTrack&>,
"TDerived has no method with correct signature \"Grammage "
"getMaxStepLength(TParticle&, TTrack&)\" required for "
"ContinuousProcess<TDerived>. ");
static_assert(has_method_getMaxStepLength_v<TProcess1, LengthType, TParticle const&,
TTrack const&>,
"TDerived has no method with correct signature \"LengthType "
"getMaxStepLength(TParticle const&, TTrack const&)\" required for "
"ContinuousProcess<TDerived>. ");
ContinuousProcessStepLength const step(A_.getMaxStepLength(particle, vTrack),
ContinuousProcessIndex(IndexProcess1));
max_length = std::min(max_length, step);
}
// return ContinuousProcessStepLength(std::min(max_length, len), IndexProcess1);
if constexpr (t2ProcSeq) {
ContinuousProcessStepLength const step = B_.getMaxStepLength(particle, vTrack);
max_length = std::min(max_length, step);
} else if constexpr (is_continuous_process_v<process2_type>) {
// interface checking on TProcess2
static_assert(
has_method_getMaxStepLength_v<TProcess2, LengthType, TParticle&, TTrack&>,
"TDerived has no method with correct signature \"Grammage "
"getMaxStepLength(TParticle&, TTrack&)\" required for "
"ContinuousProcess<TDerived>. ");
static_assert(has_method_getMaxStepLength_v<TProcess2, LengthType, TParticle const&,
TTrack const&>,
"TDerived has no method with correct signature \"LengthType "
"getMaxStepLength(TParticle const&, TTrack const&)\" required for "
"ContinuousProcess<TDerived>. ");
ContinuousProcessStepLength const step(B_.getMaxStepLength(particle, vTrack),
ContinuousProcessIndex(IndexProcess2));
......
......@@ -46,11 +46,11 @@ namespace corsika {
process1_type>) {
static_assert(
has_method_doBoundaryCrossing_v<TProcess1, ProcessReturn, TParticle&,
typename TParticle::node_type const&,
typename TParticle::node_type const&>,
has_method_doBoundaryCrossing_v<TProcess1, ProcessReturn, TParticle&>,
// typename TParticle::node_type const&,
// typename TParticle::node_type const&>,
"TDerived has no method with correct signature \"ProcessReturn "
"doBoundaryCrossing(TParticle&, VolumeNode&, VolumeNode&)\" required for "
"doBoundaryCrossing(TParticle&, VolumeNode const&, VolumeNode const&)\" required for "
"BoundaryCrossingProcess<TDerived>. ");
}
......@@ -68,11 +68,11 @@ namespace corsika {
process2_type>) {
static_assert(
has_method_doBoundaryCrossing_v<TProcess2, ProcessReturn, TParticle&,
typename TParticle::node_type const&,
typename TParticle::node_type const&>,
has_method_doBoundaryCrossing_v<TProcess2, ProcessReturn, TParticle&>,
//typename TParticle::node_type const&,
// typename TParticle::node_type const&>,
"TDerived has no method with correct signature \"ProcessReturn "
"doBoundaryCrossing(TParticle&, VolumeNode&, VolumeNode&)\" required for "
"doBoundaryCrossing(TParticle&, VolumeNode const&, VolumeNode const&)\" required for "
"BoundaryCrossingProcess<TDerived>. ");
}
......@@ -97,9 +97,11 @@ namespace corsika {
if constexpr (is_continuous_process_v<process1_type>) {
static_assert(
has_method_doContinuous_v<TProcess1, ProcessReturn, TParticle&, TTrack&>,
has_method_doContinuous_v<TProcess1, ProcessReturn, TParticle&, TTrack&> ||
has_method_doContinuous_v<TProcess1, ProcessReturn, TParticle&, TTrack const&> ||
has_method_doContinuous_v<TProcess1, ProcessReturn, TParticle const&, TTrack const&>,
"TDerived has no method with correct signature \"ProcessReturn "
"doContinuous(TParticle&,TTrack&,bool)\" required for "
"doContinuous(TParticle[const]&,TTrack[const]&,bool)\" required for "
"ContinuousProcess<TDerived>. ");
return A_.doContinuous(particle, vT,
......@@ -113,9 +115,11 @@ namespace corsika {
// interface checking on TProcess2
static_assert(
has_method_doContinuous_v<TProcess2, ProcessReturn, TParticle&, TTrack&>,
has_method_doContinuous_v<TProcess2, ProcessReturn, TParticle&, TTrack&> ||
has_method_doContinuous_v<TProcess2, ProcessReturn, TParticle&, TTrack const&> ||
has_method_doContinuous_v<TProcess2, ProcessReturn, TParticle const&, TTrack const&>,
"TDerived has no method with correct signature \"ProcessReturn "
"doContinuous(TParticle&,TTrack&,bool)\" required for "
"doContinuous(TParticle [const]&,TTrack[const]&,bool)\" required for "
"ContinuousProcess<TDerived>. ");
return B_.doContinuous(particle, vT,
......@@ -141,10 +145,12 @@ namespace corsika {
t1ProcSeq) {
// interface checking on TProcess1
static_assert(has_method_doSecondaries_v<TProcess1, void, TSecondaries&>,
"TDerived has no method with correct signature \"void "
"doSecondaries(TStackView&)\" required for "
"SecondariesProcessProcess<TDerived>. ");
static_assert(
has_method_doSecondaries_v<TProcess1, void, TSecondaries&> ||
has_method_doSecondaries_v<TProcess1, void, TSecondaries const&>,
"TDerived has no method with correct signature \"void "
"doSecondaries(TStackView [const]&)\" required for "
"SecondariesProcessProcess<TDerived>. ");
A_.doSecondaries(vS);
}
......@@ -156,10 +162,12 @@ namespace corsika {
t2ProcSeq) {
// interface checking on TProcess2
static_assert(has_method_doSecondaries_v<TProcess2, void, TSecondaries&>,
"TDerived has no method with correct signature \"void "
"doSecondaries(TStackView&)\" required for "
"SecondariesProcessProcess<TDerived>. ");
static_assert(
has_method_doSecondaries_v<TProcess2, void, TSecondaries&> ||
has_method_doSecondaries_v<TProcess2, void, TSecondaries const&>,
"TDerived has no method with correct signature \"void "
"doSecondaries(TStackView [const]&)\" required for "
"SecondariesProcessProcess<TDerived>. ");
B_.doSecondaries(vS);
}
......@@ -182,9 +190,9 @@ namespace corsika {
// interface checking on TProcess1
static_assert(
has_method_getMaxStepLength_v<TProcess1, LengthType, TParticle&, TTrack&>,
"TDerived has no method with correct signature \"Grammage "
"getMaxStepLength(TParticle&, TTrack&)\" required for "
has_method_getMaxStepLength_v<TProcess1, LengthType, TParticle const&, TTrack const&>,
"TDerived has no method with correct signature \"LengthType "
"getMaxStepLength(TParticle const&, TTrack const&)\" required for "
"ContinuousProcess<TDerived>. ");
return ContinuousProcessStepLength(A_.getMaxStepLength(particle, vTrack),
......@@ -198,9 +206,9 @@ namespace corsika {
// interface checking on TProcess2
static_assert(
has_method_getMaxStepLength_v<TProcess2, LengthType, TParticle&, TTrack&>,
"TDerived has no method with correct signature \"Grammage "
"getMaxStepLength(TParticle&, TTrack&)\" required for "
has_method_getMaxStepLength_v<TProcess2, LengthType, TParticle const&, TTrack const&>,
"TDerived has no method with correct signature \"LengthType "
"getMaxStepLength(TParticle const&, TTrack const&)\" required for "
"ContinuousProcess<TDerived>. ");
return ContinuousProcessStepLength(B_.getMaxStepLength(particle, vTrack),
......
......@@ -47,6 +47,6 @@ namespace corsika {
public:
};
//! @}
/** @} */
} // namespace corsika
......@@ -99,8 +99,8 @@ void qgconf_();
@parameter e0n lab. energy per projectile nucleon (hadron)
@parameter icz hadron class (1 - pion, 2 - nucleon, 3 - kaon)
@parameter iap projectile mass number (1=<iap<=iapmax),
@parameter iat target mass number (1=<iat<=iapmax)
@parameter iap0 projectile mass number (1=<iap0<=iapmax),
@parameter iat0 target mass number (1=<iat0<=iapmax)
*/
double qgsect_(const double& e0n, const int& icz, const int& iap0, const int& iat0);
......
......@@ -437,6 +437,7 @@ def gen_classes(particle_db):
string += " * - nuclear Z=" + str(particle_db[cname]['Z']) + "\n"
string += "*/\n\n"
string += "class " + cname + " {\n"
string += " /** @cond EXCLUDE_DOXY */ \n"
string += " public:\n"
string += " " + cname + "() = delete;\n"
string += " static constexpr Code code{Code::" + cname + "};\n"
......@@ -451,6 +452,7 @@ def gen_classes(particle_db):
string += " static constexpr int nucleus_Z{corsika::get_nucleus_Z(code)};\n"
string += " private:\n"
string += " static constexpr CodeIntType TypeIndex = static_cast<CodeIntType>(code);\n"
string += " /** @endcond */ \n"
string += "};\n"
string += " //! @}\n";
......
......@@ -289,6 +289,7 @@ def gen_classes(media_db):
**/
class {cname} {{
/** @cond EXCLUDE_DOXY */
public:
static constexpr Medium medium() {{ return Medium::{cname}; }}
......@@ -319,6 +320,7 @@ def gen_classes(media_db):
{weight_significant_figure}, {weight_error_last_digit}, {Z_over_A},
{sternheimer_density}, {corrected_density}, State::{state},
MediumType::{type}, "{symbol}", {Ieff}, {Cbar}, {x0}, {x1}, {aa}, {sk}, {dlt0} }};
/** @endcond */
}};
""".format(cname=cname,
......
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