IAP GITLAB

Skip to content
Snippets Groups Projects
Commit e07751da authored by Felix Riehn's avatar Felix Riehn Committed by ralfulrich
Browse files

added getter for kinetic energy

parent b9cf4902
No related branches found
No related tags found
1 merge request!337Resolve "Add kinetic energy getter for particles"
......@@ -121,6 +121,13 @@ namespace corsika::nuclear_stack {
return super_type::getCharge();
}
template <template <typename> class InnerParticleInterface,
typename StackIteratorInterface>
inline HEPEnergyType NuclearParticleInterface<
InnerParticleInterface, StackIteratorInterface>::getKineticEnergy() const {
return this->getEnergy() - this->getMass();
}
template <template <typename> class InnerParticleInterface,
typename StackIteratorInterface>
inline int16_t NuclearParticleInterface<
......
......@@ -92,10 +92,17 @@ namespace corsika::nuclear_stack {
* Overwrite normal getParticleMass function with nuclear version
*/
HEPMassType getMass() const;
/**
* Overwrite normal getParticleCharge function with nuclear version
*/
ElectricChargeType getCharge() const;
/**
* Overwrite normal getKineticEnergy function with nuclear version
*/
HEPMassType getKineticEnergy() const;
/**
* Overwirte normal getChargeNumber function with nuclear version
**/
......
......@@ -95,6 +95,8 @@ namespace corsika {
ElectricChargeType getCharge() const { return get_charge(this->getPID()); }
HEPEnergyType getKineticEnergy() const { return this->getEnergy() - this->getMass(); }
int16_t getChargeNumber() const { return get_charge_number(this->getPID()); }
///@}
};
......
......@@ -17,6 +17,14 @@ using namespace corsika;
#include <iostream>
using namespace std;
template <typename TParticle>
HEPEnergyType kineticEnergy(TParticle const p) {
if (p.getPID() == Code::Nucleus)
return p.getEnergy() - get_nucleus_mass(p.getNuclearA(), p.getNuclearZ());
else
return p.getEnergy() - get_mass(p.getPID());
}
TEST_CASE("NuclearStackExtension", "[stack]") {
logging::set_level(logging::level::info);
......@@ -64,13 +72,18 @@ TEST_CASE("NuclearStackExtension", "[stack]") {
}
SECTION("read nucleus") {
auto const A = 10;
auto const Z = 9;
nuclear_stack::ParticleDataStack s;
s.addParticle(std::make_tuple(
Code::Nucleus, 1.5_GeV, MomentumVector(dummyCS, {1_GeV, 1_GeV, 1_GeV}),
Point(dummyCS, {1 * meter, 1 * meter, 1 * meter}), 100_s, 10, 9));
Point(dummyCS, {1 * meter, 1 * meter, 1 * meter}), 100_s, A, Z));
const auto pout = s.getNextParticle();
CHECK(pout.getPID() == Code::Nucleus);
CHECK(pout.getEnergy() == 1.5_GeV);
CHECK(pout.getMass() == get_nucleus_mass(A, Z));
CHECK(pout.getKineticEnergy() == kineticEnergy(pout));
CHECK(pout.getKineticEnergy() > 0_GeV);
CHECK(pout.getTime() == 100_s);
CHECK(pout.getNuclearA() == 10);
CHECK(pout.getNuclearZ() == 9);
......
......@@ -17,6 +17,11 @@
using namespace corsika;
using namespace std;
template <typename TParticle>
HEPEnergyType kineticEnergy(TParticle const p) {
return p.getEnergy() - get_mass(p.getPID());
}
TEST_CASE("VectorStack", "[stack]") {
logging::set_level(logging::level::info);
......@@ -37,6 +42,7 @@ TEST_CASE("VectorStack", "[stack]") {
auto pout = s.getNextParticle();
CHECK(pout.getPID() == Code::Electron);
CHECK(pout.getEnergy() == 1.5_GeV);
CHECK(pout.getKineticEnergy() == kineticEnergy(pout));
CHECK(pout.getTime() == 100_s);
}
......
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