diff --git a/Documentation/Examples/cascade_example.cc b/Documentation/Examples/cascade_example.cc index 1e240145b65201a9b1b6448e75d7ea1cdc1b4cf9..64ed627e03c8c7687a2b75330dd50d46e1168627 100644 --- a/Documentation/Examples/cascade_example.cc +++ b/Documentation/Examples/cascade_example.cc @@ -57,7 +57,7 @@ using namespace corsika::units::si; // int main() { - logging::SetLevel(logging::level::info); + logging::SetLevel(logging::level::debug); std::cout << "cascade_example" << std::endl; diff --git a/Framework/Analytics/testClassTimer.cc b/Framework/Analytics/testClassTimer.cc index 290eabc0e3e8362c126ca2b6a13ee3b47e1b19b8..95f82b4b2caa93394634e5c39ee542dacda94f2f 100644 --- a/Framework/Analytics/testClassTimer.cc +++ b/Framework/Analytics/testClassTimer.cc @@ -110,7 +110,7 @@ TEST_CASE("Analytics", "[Timer]") { tc.call(); - REQUIRE(tc.getTime().count() == Approx(100000).margin(1000)); + CHECK(tc.getTime().count() == Approx(100000).margin(10000)); } SECTION("Measure runtime of a function with arguments") { @@ -120,7 +120,7 @@ TEST_CASE("Analytics", "[Timer]") { tc.call(1); - REQUIRE(tc.getTime().count() == Approx(100000).margin(1000)); + CHECK(tc.getTime().count() == Approx(100000).margin(10000)); } SECTION("Measure runtime of a const function without arguments") { @@ -131,17 +131,17 @@ TEST_CASE("Analytics", "[Timer]") { tc.call(); - REQUIRE(tc.getTime().count() == Approx(100000).margin(1000)); + CHECK(tc.getTime().count() == Approx(100000).margin(10000)); } SECTION("Measure runtime of function inside class") { auto test = foo(); - REQUIRE(test.inside() == 123); + CHECK(test.inside() == 123); } SECTION("Measure runtime of function inside class") { auto test = fooT3<fooT1>(); - REQUIRE(test.inside_t(1, 'a', 'b') == 123); + CHECK(test.inside_t(1, 'a', 'b') == 123); } } diff --git a/Framework/Particles/testParticles.cc b/Framework/Particles/testParticles.cc index e01f0b1fb8f93ab0db33c4cf4b270eab19720fbb..8b3f7184c6b31d5b447dbdb173847cdfc0d080ae 100644 --- a/Framework/Particles/testParticles.cc +++ b/Framework/Particles/testParticles.cc @@ -18,123 +18,126 @@ using namespace corsika::particles; TEST_CASE("ParticleProperties", "[Particles]") { SECTION("Types") { - REQUIRE(Electron::GetCode() == Code::Electron); - REQUIRE(Positron::GetCode() == Code::Positron); - REQUIRE(Proton::GetCode() == Code::Proton); - REQUIRE(Neutron::GetCode() == Code::Neutron); - REQUIRE(Gamma::GetCode() == Code::Gamma); - REQUIRE(PiPlus::GetCode() == Code::PiPlus); + CHECK(Electron::GetCode() == Code::Electron); + CHECK(Positron::GetCode() == Code::Positron); + CHECK(Proton::GetCode() == Code::Proton); + CHECK(Neutron::GetCode() == Code::Neutron); + CHECK(Gamma::GetCode() == Code::Gamma); + CHECK(PiPlus::GetCode() == Code::PiPlus); } SECTION("Masses") { - REQUIRE(Electron::GetMass() / (511_keV) == Approx(1)); - REQUIRE(Electron::GetMass() / GetMass(Code::Electron) == Approx(1)); + CHECK(Electron::GetMass() / (511_keV) == Approx(1)); + CHECK(Electron::GetMass() / GetMass(Code::Electron) == Approx(1)); - REQUIRE((Proton::GetMass() + Neutron::GetMass()) / - corsika::units::constants::nucleonMass == - Approx(2)); + CHECK((Proton::GetMass() + Neutron::GetMass()) / + corsika::units::constants::nucleonMass == + Approx(2)); } SECTION("Charges") { - REQUIRE(Electron::GetCharge() / constants::e == Approx(-1)); - REQUIRE(Positron::GetCharge() / constants::e == Approx(+1)); - REQUIRE(GetCharge(Positron::GetAntiParticle()) / constants::e == Approx(-1)); + CHECK(Electron::GetCharge() / constants::e == Approx(-1)); + CHECK(Positron::GetCharge() / constants::e == Approx(+1)); + CHECK(GetCharge(Positron::GetAntiParticle()) / constants::e == Approx(-1)); } SECTION("Names") { - REQUIRE(Electron::GetName() == "e-"); - REQUIRE(PiMinus::GetName() == "pi-"); - REQUIRE(Nucleus::GetName() == "nucleus"); - REQUIRE(Iron::GetName() == "iron"); + CHECK(Electron::GetName() == "e-"); + CHECK(PiMinus::GetName() == "pi-"); + CHECK(Nucleus::GetName() == "nucleus"); + CHECK(Iron::GetName() == "iron"); } SECTION("PDG") { - REQUIRE(GetPDG(Code::PiPlus) == PDGCode::PiPlus); - REQUIRE(GetPDG(Code::DPlus) == PDGCode::DPlus); - REQUIRE(GetPDG(Code::NuMu) == PDGCode::NuMu); - REQUIRE(GetPDG(Code::NuE) == PDGCode::NuE); - REQUIRE(GetPDG(Code::MuMinus) == PDGCode::MuMinus); - - REQUIRE(static_cast<int>(GetPDG(Code::PiPlus)) == 211); - REQUIRE(static_cast<int>(GetPDG(Code::DPlus)) == 411); - REQUIRE(static_cast<int>(GetPDG(Code::NuMu)) == 14); - REQUIRE(static_cast<int>(GetPDG(Code::NuEBar)) == -12); - REQUIRE(static_cast<int>(GetPDG(Code::MuMinus)) == 13); + CHECK(GetPDG(Code::PiPlus) == PDGCode::PiPlus); + CHECK(GetPDG(Code::DPlus) == PDGCode::DPlus); + CHECK(GetPDG(Code::NuMu) == PDGCode::NuMu); + CHECK(GetPDG(Code::NuE) == PDGCode::NuE); + CHECK(GetPDG(Code::MuMinus) == PDGCode::MuMinus); + + CHECK(static_cast<int>(GetPDG(Code::PiPlus)) == 211); + CHECK(static_cast<int>(GetPDG(Code::DPlus)) == 411); + CHECK(static_cast<int>(GetPDG(Code::NuMu)) == 14); + CHECK(static_cast<int>(GetPDG(Code::NuEBar)) == -12); + CHECK(static_cast<int>(GetPDG(Code::MuMinus)) == 13); } SECTION("Conversion PDG -> internal") { - REQUIRE(ConvertFromPDG(PDGCode::KStarMinus) == Code::KStarMinus); - REQUIRE(ConvertFromPDG(PDGCode::MuPlus) == Code::MuPlus); - REQUIRE(ConvertFromPDG(PDGCode::SigmaStarCMinusBar) == Code::SigmaStarCMinusBar); + CHECK(ConvertFromPDG(PDGCode::KStarMinus) == Code::KStarMinus); + CHECK(ConvertFromPDG(PDGCode::MuPlus) == Code::MuPlus); + CHECK(ConvertFromPDG(PDGCode::SigmaStarCMinusBar) == Code::SigmaStarCMinusBar); } SECTION("Lifetimes") { - REQUIRE(GetLifetime(Code::Electron) == - std::numeric_limits<double>::infinity() * corsika::units::si::second); - REQUIRE(GetLifetime(Code::DPlus) < GetLifetime(Code::Gamma)); - REQUIRE(GetLifetime(Code::RhoPlus) / corsika::units::si::second == - (Approx(4.414566727909413e-24).epsilon(1e-3))); - REQUIRE(GetLifetime(Code::SigmaMinusBar) / corsika::units::si::second == - (Approx(8.018880848563575e-11).epsilon(1e-5))); - REQUIRE(GetLifetime(Code::MuPlus) / corsika::units::si::second == - (Approx(2.1970332555864364e-06).epsilon(1e-5))); + CHECK(GetLifetime(Code::Electron) == + std::numeric_limits<double>::infinity() * corsika::units::si::second); + CHECK(GetLifetime(Code::DPlus) < GetLifetime(Code::Gamma)); + CHECK(GetLifetime(Code::RhoPlus) / corsika::units::si::second == + (Approx(4.414566727909413e-24).epsilon(1e-3))); + CHECK(GetLifetime(Code::SigmaMinusBar) / corsika::units::si::second == + (Approx(8.018880848563575e-11).epsilon(1e-5))); + CHECK(GetLifetime(Code::MuPlus) / corsika::units::si::second == + (Approx(2.1970332555864364e-06).epsilon(1e-5))); } SECTION("Particle groups: electromagnetic") { - REQUIRE(IsEM(Code::Gamma)); - REQUIRE(IsEM(Code::Electron)); - REQUIRE_FALSE(IsEM(Code::MuPlus)); - REQUIRE_FALSE(IsEM(Code::NuE)); - REQUIRE_FALSE(IsEM(Code::Proton)); - REQUIRE_FALSE(IsEM(Code::PiPlus)); - REQUIRE_FALSE(IsEM(Code::Oxygen)); + CHECK(IsEM(Code::Gamma)); + CHECK(IsEM(Code::Electron)); + CHECK_FALSE(IsEM(Code::MuPlus)); + CHECK_FALSE(IsEM(Code::NuE)); + CHECK_FALSE(IsEM(Code::Proton)); + CHECK_FALSE(IsEM(Code::PiPlus)); + CHECK_FALSE(IsEM(Code::Oxygen)); } SECTION("Particle groups: hadrons") { - REQUIRE_FALSE(IsHadron(Code::Gamma)); - REQUIRE_FALSE(IsHadron(Code::Electron)); - REQUIRE_FALSE(IsHadron(Code::MuPlus)); - REQUIRE_FALSE(IsHadron(Code::NuE)); - REQUIRE(IsHadron(Code::Proton)); - REQUIRE(IsHadron(Code::PiPlus)); - REQUIRE(IsHadron(Code::Oxygen)); - REQUIRE(IsHadron(Code::Nucleus)); + CHECK_FALSE(IsHadron(Code::Gamma)); + CHECK_FALSE(IsHadron(Code::Electron)); + CHECK_FALSE(IsHadron(Code::MuPlus)); + CHECK_FALSE(IsHadron(Code::NuE)); + CHECK(IsHadron(Code::Proton)); + CHECK(IsHadron(Code::PiPlus)); + CHECK(IsHadron(Code::Oxygen)); + CHECK(IsHadron(Code::Nucleus)); } SECTION("Particle groups: muons") { - REQUIRE_FALSE(IsMuon(Code::Gamma)); - REQUIRE_FALSE(IsMuon(Code::Electron)); - REQUIRE(IsMuon(Code::MuPlus)); - REQUIRE_FALSE(IsMuon(Code::NuE)); - REQUIRE_FALSE(IsMuon(Code::Proton)); - REQUIRE_FALSE(IsMuon(Code::PiPlus)); - REQUIRE_FALSE(IsMuon(Code::Oxygen)); + CHECK_FALSE(IsMuon(Code::Gamma)); + CHECK_FALSE(IsMuon(Code::Electron)); + CHECK(IsMuon(Code::MuPlus)); + CHECK_FALSE(IsMuon(Code::NuE)); + CHECK_FALSE(IsMuon(Code::Proton)); + CHECK_FALSE(IsMuon(Code::PiPlus)); + CHECK_FALSE(IsMuon(Code::Oxygen)); } SECTION("Particle groups: neutrinos") { - REQUIRE_FALSE(IsNeutrino(Code::Gamma)); - REQUIRE_FALSE(IsNeutrino(Code::Electron)); - REQUIRE_FALSE(IsNeutrino(Code::MuPlus)); - REQUIRE(IsNeutrino(Code::NuE)); - REQUIRE_FALSE(IsNeutrino(Code::Proton)); - REQUIRE_FALSE(IsNeutrino(Code::PiPlus)); - REQUIRE_FALSE(IsNeutrino(Code::Oxygen)); + CHECK_FALSE(IsNeutrino(Code::Gamma)); + CHECK_FALSE(IsNeutrino(Code::Electron)); + CHECK_FALSE(IsNeutrino(Code::MuPlus)); + CHECK(IsNeutrino(Code::NuE)); + CHECK_FALSE(IsNeutrino(Code::Proton)); + CHECK_FALSE(IsNeutrino(Code::PiPlus)); + CHECK_FALSE(IsNeutrino(Code::Oxygen)); } SECTION("Nuclei") { - REQUIRE_FALSE(IsNucleus(Code::Gamma)); - REQUIRE(IsNucleus(Code::Argon)); - REQUIRE_FALSE(IsNucleus(Code::Proton)); - REQUIRE(IsNucleus(Code::Hydrogen)); - REQUIRE(Argon::IsNucleus()); - REQUIRE_FALSE(EtaC::IsNucleus()); - - REQUIRE(GetNucleusA(Code::Hydrogen) == 1); - REQUIRE(GetNucleusA(Code::Tritium) == 3); - REQUIRE(Hydrogen::GetNucleusZ() == 1); - REQUIRE(Tritium::GetNucleusA() == 3); - - REQUIRE_THROWS(GetNucleusA(Code::Nucleus)); - REQUIRE_THROWS(GetNucleusZ(Code::Nucleus)); + CHECK_FALSE(IsNucleus(Code::Gamma)); + CHECK(IsNucleus(Code::Argon)); + CHECK_FALSE(IsNucleus(Code::Proton)); + CHECK(IsNucleus(Code::Hydrogen)); + CHECK(Argon::IsNucleus()); + CHECK_FALSE(EtaC::IsNucleus()); + + CHECK(GetNucleusA(Code::Hydrogen) == 1); + CHECK(GetNucleusA(Code::Tritium) == 3); + CHECK(Hydrogen::GetNucleusZ() == 1); + CHECK(Tritium::GetNucleusA() == 3); + + // Nucleus is a generic object, it has no specific properties + CHECK_THROWS(GetNucleusA(Code::Nucleus)); + CHECK_THROWS(GetNucleusZ(Code::Nucleus)); + CHECK_THROWS(GetMass(Code::Nucleus)); + CHECK_THROWS(GetCharge(Code::Nucleus)); } } diff --git a/Processes/AnalyticProcessors/testExecTime.cc b/Processes/AnalyticProcessors/testExecTime.cc index dbda248c889279e58a0feb4be6650e02eb02bb7a..e2fc710e7a201096184edac399befe01a8d04356 100644 --- a/Processes/AnalyticProcessors/testExecTime.cc +++ b/Processes/AnalyticProcessors/testExecTime.cc @@ -33,86 +33,86 @@ TEST_CASE("Timing process", "[proccesses][analytic_processors ExecTime]") { SECTION("BoundaryCrossing") { ExecTime<DummyBoundaryCrossingProcess<10>> execTime; auto start = std::chrono::steady_clock::now(); - REQUIRE(execTime.DoBoundaryCrossing(tmp, 0, 0) == EProcessReturn::eOk); + CHECK(execTime.DoBoundaryCrossing(tmp, 0, 0) == EProcessReturn::eOk); auto end = std::chrono::steady_clock::now(); - REQUIRE(std::chrono::duration_cast<std::chrono::milliseconds>(end - start).count() == - Approx(10).margin(5)); + CHECK(std::chrono::duration_cast<std::chrono::milliseconds>(end - start).count() == + Approx(10).margin(5)); for (int i = 0; i < 100; i++) execTime.DoBoundaryCrossing(tmp, 0, 0); - REQUIRE(execTime.mean() == Approx(10 * 1000).margin(2 * 1000)); + CHECK(execTime.mean() == Approx(10 * 1000).margin(2 * 1000)); - REQUIRE(execTime.sumTime() == Approx(10 * 100 * 1000).margin((10 * 100) * 1000)); + CHECK(execTime.sumTime() == Approx(10 * 100 * 1000).margin((10 * 100) * 1000)); - REQUIRE(fabs(execTime.var()) < 20000); + CHECK(fabs(execTime.var()) < 100000); } SECTION("Continuous") { ExecTime<DummyContinuousProcess<50>> execTime; auto start = std::chrono::steady_clock::now(); - REQUIRE(execTime.DoContinuous(tmp, tmp) == EProcessReturn::eOk); + CHECK(execTime.DoContinuous(tmp, tmp) == EProcessReturn::eOk); auto end = std::chrono::steady_clock::now(); - REQUIRE(std::chrono::duration_cast<std::chrono::milliseconds>(end - start).count() == - Approx(50).margin(5)); + CHECK(std::chrono::duration_cast<std::chrono::milliseconds>(end - start).count() == + Approx(50).margin(5)); for (int i = 0; i < 100; i++) execTime.DoContinuous(tmp, tmp); - REQUIRE(execTime.mean() == Approx(50 * 1000).margin(2 * 1000)); + CHECK(execTime.mean() == Approx(50 * 1000).margin(2 * 1000)); - REQUIRE(execTime.sumTime() == Approx(50 * 100 * 1000).margin((10 * 100) * 1000)); + CHECK(execTime.sumTime() == Approx(50 * 100 * 1000).margin((10 * 100) * 1000)); - REQUIRE(fabs(execTime.var()) < 20000); + CHECK(fabs(execTime.var()) < 100000); } SECTION("Decay") { ExecTime<DummyDecayProcess<10>> execTime; auto start = std::chrono::steady_clock::now(); - REQUIRE(execTime.DoDecay(tmp) == EProcessReturn::eOk); + CHECK(execTime.DoDecay(tmp) == EProcessReturn::eOk); auto end = std::chrono::steady_clock::now(); - REQUIRE(std::chrono::duration_cast<std::chrono::milliseconds>(end - start).count() == - Approx(10).margin(5)); + CHECK(std::chrono::duration_cast<std::chrono::milliseconds>(end - start).count() == + Approx(10).margin(5)); for (int i = 0; i < 100; i++) execTime.DoDecay(tmp); - REQUIRE(execTime.mean() == Approx(10 * 1000).margin(2 * 1000)); + CHECK(execTime.mean() == Approx(10 * 1000).margin(2 * 1000)); - REQUIRE(execTime.sumTime() == Approx(10 * 100 * 100).margin((10 * 100) * 1000)); + CHECK(execTime.sumTime() == Approx(10 * 100 * 100).margin((10 * 100) * 1000)); - REQUIRE(fabs(execTime.var()) < 20000); + CHECK(fabs(execTime.var()) < 100000); } SECTION("Interaction") { ExecTime<DummyInteractionProcess<10>> execTime; auto start = std::chrono::steady_clock::now(); - REQUIRE(execTime.DoInteraction(tmp) == EProcessReturn::eOk); + CHECK(execTime.DoInteraction(tmp) == EProcessReturn::eOk); auto end = std::chrono::steady_clock::now(); - REQUIRE(std::chrono::duration_cast<std::chrono::milliseconds>(end - start).count() == - Approx(10).margin(5)); + CHECK(std::chrono::duration_cast<std::chrono::milliseconds>(end - start).count() == + Approx(10).margin(5)); for (int i = 0; i < 100; i++) execTime.DoInteraction(tmp); - REQUIRE(execTime.mean() == Approx(10 * 1000).margin(2 * 1000)); + CHECK(execTime.mean() == Approx(10 * 1000).margin(2 * 1000)); - REQUIRE(execTime.sumTime() == Approx(10 * 100 * 1000).margin((10 * 100) * 1000)); + CHECK(execTime.sumTime() == Approx(10 * 100 * 1000).margin((10 * 100) * 1000)); - REQUIRE(fabs(execTime.var()) < 20000); + CHECK(fabs(execTime.var()) < 100000); } SECTION("Secondaries") { ExecTime<DummySecondariesProcess<10>> execTime; auto start = std::chrono::steady_clock::now(); - REQUIRE(execTime.DoSecondaries(tmp) == EProcessReturn::eOk); + CHECK(execTime.DoSecondaries(tmp) == EProcessReturn::eOk); auto end = std::chrono::steady_clock::now(); - REQUIRE(std::chrono::duration_cast<std::chrono::milliseconds>(end - start).count() == - Approx(10).margin(5)); + CHECK(std::chrono::duration_cast<std::chrono::milliseconds>(end - start).count() == + Approx(10).margin(5)); for (int i = 0; i < 100; i++) execTime.DoSecondaries(tmp); - REQUIRE(execTime.mean() == Approx(10 * 1000).margin(2 * 1000)); + CHECK(execTime.mean() == Approx(10 * 1000).margin(2 * 1000)); - REQUIRE(execTime.sumTime() == Approx(10 * 100 * 1000).margin((10 * 100) * 1000)); + CHECK(execTime.sumTime() == Approx(10 * 100 * 1000).margin((10 * 100) * 1000)); - REQUIRE(fabs(execTime.var()) < 20000); + CHECK(fabs(execTime.var()) < 100000); } SECTION("TestMeanAlgo") { @@ -128,7 +128,7 @@ TEST_CASE("Timing process", "[proccesses][analytic_processors ExecTime]") { std::vector<double> elems; - for (int i = 0; i < 1000000; i++) { + for (int i = 0; i < 1000; i++) { double timeDiv = distribution(generator); elems.push_back(timeDiv); @@ -148,7 +148,7 @@ TEST_CASE("Timing process", "[proccesses][analytic_processors ExecTime]") { fMean2 += delta * delta2; } - REQUIRE(fN == 1000000); + CHECK(fN == 1000); double mean = 0; std::for_each(elems.begin(), elems.end(), [&](double i) { mean += i; }); @@ -159,10 +159,10 @@ TEST_CASE("Timing process", "[proccesses][analytic_processors ExecTime]") { [&](double i) { var += (mean - i) * (mean - i); }); var = var / fN; - REQUIRE(mean == Approx(10000.0).margin(10)); - REQUIRE(var == Approx(200.0 * 200).margin(200)); + CHECK(mean == Approx(10000.0).margin(10)); + CHECK(var == Approx(200.0 * 200).margin(2000)); - REQUIRE(fMean2 / fN == Approx(200 * 200).margin(200)); // Varianz - REQUIRE(fMean == Approx(10000).margin(10)); + CHECK(fMean2 / fN == Approx(200 * 200).margin(2000)); // Varianz + CHECK(fMean == Approx(10000).margin(10)); } } diff --git a/Processes/EnergyLoss/EnergyLoss.cc b/Processes/EnergyLoss/EnergyLoss.cc index 42efc08a51303fb3bc347d527053cd9a74e0247b..336294d8e97ee9be5fdc3c82b46b30365849e826 100644 --- a/Processes/EnergyLoss/EnergyLoss.cc +++ b/Processes/EnergyLoss/EnergyLoss.cc @@ -170,7 +170,7 @@ process::EProcessReturn EnergyLoss::DoContinuous(SetupParticle& p, SetupTrack co dX / 1_g * square(1_cm)); HEPEnergyType dE = TotalEnergyLoss(p, dX); auto E = p.GetEnergy(); - const auto Ekin = E - p.GetMass(); + [[maybe_unused]] const auto Ekin = E - p.GetMass(); auto Enew = E + dE; C8LOG_DEBUG("EnergyLoss dE={} MeV, E={} GeV, Ekin={} GeV, Enew={} GeV", dE / 1_MeV, E / 1_GeV, Ekin / 1_GeV, Enew / 1_GeV); @@ -220,31 +220,33 @@ void EnergyLoss::FillProfile(SetupTrack const& vTrack, const HEPEnergyType dE) { GrammageType const grammageEnd = shower_axis_.projectedX(vTrack.GetPosition(1)); const auto deltaX = grammageEnd - grammageStart; - const int binStart = grammageStart / dX_; - const int binEnd = grammageEnd / dX_; + int binStart = grammageStart / dX_; + if (binStart < 0) return; + int binEnd = grammageEnd / dX_; + if (binEnd > int(profile_.size() - 1)) return; + if (deltaX < dX_threshold_) return; C8LOG_DEBUG("energy deposit of -dE={} between {} and {}", -dE, grammageStart, grammageEnd); auto energyCount = HEPEnergyType::zero(); - auto fill = [&](int bin, GrammageType weight) { - if (deltaX > dX_threshold_) { - auto const increment = -dE * weight / deltaX; - profile_[bin] += increment; - energyCount += increment; + auto fill = [&](const int bin, const double weight) { + auto const increment = -dE * weight; + profile_[bin] += increment; + energyCount += increment; - C8LOG_DEBUG("filling bin {} with weight {} : {} ", bin, weight, increment); - } + C8LOG_DEBUG("filling bin {} with weight {} : {} ", bin, weight, increment); }; // fill longitudinal profile - fill(binStart, (1 + binStart) * dX_ - grammageStart); - fill(binEnd, grammageEnd - binEnd * dX_); - - if (binStart == binEnd) { fill(binStart, -dX_); } - - for (int bin = binStart + 1; bin < binEnd; ++bin) { fill(bin, dX_); } + if (binStart == binEnd) { + fill(binStart, 1); + } else { + fill(binStart, ((1 + binStart) * dX_ - grammageStart) / deltaX); + fill(binEnd, (grammageEnd - binEnd * dX_) / deltaX); + for (int bin = binStart + 1; bin < binEnd; ++bin) { fill(bin, 1); } + } C8LOG_DEBUG("total energy added to histogram: {} ", energyCount); } diff --git a/Processes/Sibyll/Decay.cc b/Processes/Sibyll/Decay.cc index a85541adca9b3ba6a21382ec552129907cd4f9ad..8297739b793e33d7b4fe9b65bfd66def992f372e 100644 --- a/Processes/Sibyll/Decay.cc +++ b/Processes/Sibyll/Decay.cc @@ -122,9 +122,9 @@ namespace corsika::process::sibyll { for (int i = 0; i < 99; ++i) s_csydec_.idb[i] = abs(s_csydec_.idb[i]); } - void Decay::PrintDecayConfig(const particles::Code vCode) { - const int sibCode = process::sibyll::ConvertToSibyllRaw(vCode); - const int absSibCode = abs(sibCode); + void Decay::PrintDecayConfig([[maybe_unused]] const particles::Code vCode) { + [[maybe_unused]] const int sibCode = process::sibyll::ConvertToSibyllRaw(vCode); + [[maybe_unused]] const int absSibCode = abs(sibCode); C8LOG_DEBUG("Decay: Sibyll decay configuration: {} is {}", vCode, (s_csydec_.idb[absSibCode - 1] <= 0) ? "stable" : "unstable"); } @@ -134,7 +134,7 @@ namespace corsika::process::sibyll { if (handleAllDecays_) { C8LOG_DEBUG(" all particles known to Sibyll are handled by Sibyll::Decay!"); } else { - for (auto& pCode : handledDecays_) { + for ([[maybe_unused]] auto& pCode : handledDecays_) { C8LOG_DEBUG(" Decay of {} is handled by Sibyll!", pCode); } } @@ -154,7 +154,7 @@ namespace corsika::process::sibyll { const TimeType t0 = particles::GetLifetime(vP.GetPID()); auto const lifetime = gamma * t0; - const auto mkin = + [[maybe_unused]] const auto mkin = (E * E - vP.GetMomentum().squaredNorm()); // delta_mass(vP.GetMomentum(), E, m); C8LOG_DEBUG("Sibyll::Decay: code: {} ", vP.GetPID()); C8LOG_DEBUG("Sibyll::Decay: MinStep: t0: {} ", t0); @@ -163,7 +163,7 @@ namespace corsika::process::sibyll { vP.GetMomentum().GetComponents() / 1_GeV); C8LOG_DEBUG("Sibyll::Decay: momentum: shell mass-kin. inv. mass {} {}", mkin / 1_GeV / 1_GeV, m / 1_GeV * m / 1_GeV); - auto sib_id = process::sibyll::ConvertToSibyllRaw(vP.GetPID()); + [[maybe_unused]] auto sib_id = process::sibyll::ConvertToSibyllRaw(vP.GetPID()); C8LOG_DEBUG("Sibyll::Decay: sib mass: {}", get_sibyll_mass2(sib_id)); C8LOG_DEBUG("Sibyll::Decay: MinStep: gamma: {}", gamma); C8LOG_DEBUG("Sibyll::Decay: MinStep: tau {} s: ", lifetime / 1_s); diff --git a/Processes/Sibyll/Interaction.cc b/Processes/Sibyll/Interaction.cc index f020922f077f2e0b70093746b66099f7dddc0a0e..aa222b7f65ced91a80b5e6402a0ae5a45926c6dc 100644 --- a/Processes/Sibyll/Interaction.cc +++ b/Processes/Sibyll/Interaction.cc @@ -218,10 +218,10 @@ namespace corsika::process::sibyll { // just for show: // boost projecticle - auto const PprojCoM = boost.toCoM(PprojLab); + [[maybe_unused]] auto const PprojCoM = boost.toCoM(PprojLab); // boost target - auto const PtargCoM = boost.toCoM(PtargLab); + [[maybe_unused]] auto const PtargCoM = boost.toCoM(PtargLab); C8LOG_DEBUG( "Interaction: ebeam CoM: {} GeV " diff --git a/Processes/Sibyll/NuclearInteraction.cc b/Processes/Sibyll/NuclearInteraction.cc index c53beeae7a6934dd090af9ea5302deacf342b681..de77d5d33a32b1cb4461abb88552ee14bea415a0 100644 --- a/Processes/Sibyll/NuclearInteraction.cc +++ b/Processes/Sibyll/NuclearInteraction.cc @@ -235,7 +235,7 @@ namespace corsika::process::sibyll { pTotLab += pTarget; auto const pTotLabNorm = pTotLab.norm(); // calculate cm. energy - const HEPEnergyType ECoM = sqrt( + [[maybe_unused]] const HEPEnergyType ECoM = sqrt( (Elab + pTotLabNorm) * (Elab - pTotLabNorm)); // binomial for numerical accuracy auto const ECoMNN = sqrt(2. * ElabNuc * constants::nucleonMass); C8LOG_DEBUG( @@ -406,10 +406,10 @@ namespace corsika::process::sibyll { // define boost to NUCLEON-NUCLEON frame COMBoost const boost(PprojNucLab, constants::nucleonMass); // boost projecticle - auto const PprojNucCoM = boost.toCoM(PprojNucLab); + [[maybe_unused]] auto const PprojNucCoM = boost.toCoM(PprojNucLab); // boost target - auto const PtargNucCoM = boost.toCoM(PtargNucLab); + [[maybe_unused]] auto const PtargNucCoM = boost.toCoM(PtargNucLab); C8LOG_DEBUG( fmt::format("Interaction: ebeam CoM: {} " diff --git a/Stack/NuclearStackExtension/NuclearStackExtension.h b/Stack/NuclearStackExtension/NuclearStackExtension.h index 4409a215eed0c331e922b311235f37e10ded24d8..c2ac33e2e0f25079dbd535ed52360bbb0c1e6244 100644 --- a/Stack/NuclearStackExtension/NuclearStackExtension.h +++ b/Stack/NuclearStackExtension/NuclearStackExtension.h @@ -190,7 +190,9 @@ namespace corsika::stack { return InnerParticleInterface<StackIteratorInterface>::GetChargeNumber(); } - int GetNucleusRef() const { return GetStackData().GetNucleusRef(GetIndex()); } + int GetNucleusRef() const { + return GetStackData().GetNucleusRef(GetIndex()); + } // LCOV_EXCL_LINE protected: void SetNucleusRef(const int vR) { GetStackData().SetNucleusRef(GetIndex(), vR); } diff --git a/Stack/NuclearStackExtension/testNuclearStackExtension.cc b/Stack/NuclearStackExtension/testNuclearStackExtension.cc index 6896953a6079ba0c66b4ba630cf96a2c78a3bd48..72017c91a05c70d9c062fd72c20f0ff31cc4e246 100644 --- a/Stack/NuclearStackExtension/testNuclearStackExtension.cc +++ b/Stack/NuclearStackExtension/testNuclearStackExtension.cc @@ -119,6 +119,7 @@ TEST_CASE("NuclearStackExtension", "[stack]") { ParticleDataStack s; // add 99 particles, each 10th particle is a nucleus with A=i and Z=A/2! + // i=9, 19, 29, etc. are nuclei for (int i = 0; i < 99; ++i) { if ((i + 1) % 10 == 0) { s.AddParticle(std::make_tuple( @@ -167,6 +168,21 @@ TEST_CASE("NuclearStackExtension", "[stack]") { CHECK(p93.GetTime() == 100_s); } + // copy + { + s.Copy(s.begin() + 89, s.begin() + 79); // nuclei to nuclei + const auto& p89 = s.cbegin() + 89; + const auto& p79 = s.cbegin() + 79; + + CHECK(p89.GetPID() == particles::Code::Nucleus); + CHECK(p89.GetEnergy() == 89 * 15_GeV); + CHECK(p89.GetTime() == 100_s); + + CHECK(p79.GetPID() == particles::Code::Nucleus); + CHECK(p79.GetEnergy() == 89 * 15_GeV); + CHECK(p79.GetTime() == 100_s); + } + // swap { s.Swap(s.begin() + 11, s.begin() + 10); @@ -206,4 +222,37 @@ TEST_CASE("NuclearStackExtension", "[stack]") { for (int i = 0; i < 99; ++i) s.last().Delete(); CHECK(s.getEntries() == 0); } + + SECTION("not allowed") { + NuclearStackExtension<corsika::stack::super_stupid::SuperStupidStack, + ExtendedParticleInterfaceType> + s; + + // not valid: + CHECK_THROWS(s.AddParticle(std::make_tuple( + particles::Code::Oxygen, 1.5_GeV, + corsika::stack::MomentumVector(dummyCS, {1_GeV, 1_GeV, 1_GeV}), + Point(dummyCS, {1 * meter, 1 * meter, 1 * meter}), 100_s, 16, 8))); + + // valid + auto particle = s.AddParticle( + std::make_tuple(particles::Code::Nucleus, 1.5_GeV, + corsika::stack::MomentumVector(dummyCS, {1_GeV, 1_GeV, 1_GeV}), + Point(dummyCS, {1 * meter, 1 * meter, 1 * meter}), 100_s, 10, 9)); + + // not valid + CHECK_THROWS(particle.AddSecondary(std::make_tuple( + particles::Code::Oxygen, 1.5_GeV, + corsika::stack::MomentumVector(dummyCS, {1_GeV, 1_GeV, 1_GeV}), + Point(dummyCS, {1 * meter, 1 * meter, 1 * meter}), 100_s, 16, 8))); + + // add a another nucleus, so there are two now + s.AddParticle( + std::make_tuple(particles::Code::Nucleus, 1.5_GeV, + corsika::stack::MomentumVector(dummyCS, {1_GeV, 1_GeV, 1_GeV}), + Point(dummyCS, {1 * meter, 1 * meter, 1 * meter}), 100_s, 10, 9)); + + // not valid, since end() is not a valid entry + CHECK_THROWS(s.Swap(s.begin(), s.end())); + } }