diff --git a/corsika/detail/framework/core/ParticleProperties.inl b/corsika/detail/framework/core/ParticleProperties.inl index 7339a81ee2c948827533d24c92f3a671539639f6..f91c4c3c472f564f2b6060c1a94b83fcdc1a8399 100644 --- a/corsika/detail/framework/core/ParticleProperties.inl +++ b/corsika/detail/framework/core/ParticleProperties.inl @@ -33,7 +33,7 @@ namespace corsika { } inline PDGCode constexpr get_PDG(unsigned int A, unsigned int Z) { - return static_cast<PDGCode>(1000000000 + Z * 10000 + A + 10); // 10LZZZAAAI + return static_cast<PDGCode>(1000000000 + Z * 10000 + A * 10); // 10LZZZAAAI } inline int16_t constexpr get_charge_number(Code const code) { diff --git a/corsika/detail/modules/LongitudinalProfile.inl b/corsika/detail/modules/LongitudinalProfile.inl index 6987e3d80f0367cc45a57b8f1b04cf332652e97d..5c9b54c60f7bd913ed78d36c1965ea4df56161ab 100644 --- a/corsika/detail/modules/LongitudinalProfile.inl +++ b/corsika/detail/modules/LongitudinalProfile.inl @@ -55,6 +55,8 @@ namespace corsika { profiles_.at(b)[ProfileIndex::MuMinus]++; } else if (is_hadron(pid)) { profiles_.at(b)[ProfileIndex::Hadron]++; + } else if (is_neutrino(pid)) { + profiles_.at(b)[ProfileIndex::Invisible]++; } } @@ -65,7 +67,7 @@ namespace corsika { const int precision) { CORSIKA_LOG_DEBUG("Write longprof to {}", filename); std::ofstream f{filename}; - f << "# X / g·cm¯², photon, e+, e-, mu+, mu-, all hadrons" << std::endl; + f << "# X / g·cm¯², photon, e+, e-, mu+, mu-, all hadrons, neutrinos" << std::endl; for (size_t b = 0; b < profiles_.size(); ++b) { f << std::setprecision(5) << std::setw(11) << b * (dX_ / (1_g / 1_cm / 1_cm)); for (auto const& N : profiles_.at(b)) { diff --git a/corsika/detail/modules/ParticleCut.inl b/corsika/detail/modules/ParticleCut.inl index 97afbd0b360d71565296cb0d9288a1fc6c4029a1..af19f42f09e043c3d5a248c4d2c67f6cd70e262c 100644 --- a/corsika/detail/modules/ParticleCut.inl +++ b/corsika/detail/modules/ParticleCut.inl @@ -23,7 +23,8 @@ namespace corsika { , energy_emcut_(0_GeV) , energy_invcut_(0_GeV) , em_count_(0) - , inv_count_(0) { + , inv_count_(0) + , energy_count_() { for (auto p : get_all_particles()) if (is_hadron(p)) // nuclei are also hadrons set_kinetic_energy_threshold(p, eHadCut); @@ -49,7 +50,8 @@ namespace corsika { , energy_emcut_(0_GeV) , energy_invcut_(0_GeV) , em_count_(0) - , inv_count_(0) { + , inv_count_(0) + , energy_count_(0) { for (auto p : get_all_particles()) if (is_hadron(p)) @@ -70,7 +72,8 @@ namespace corsika { , energy_emcut_(0_GeV) , energy_invcut_(0_GeV) , em_count_(0) - , inv_count_(0) { + , inv_count_(0) + , energy_count_(0) { for (auto p : get_all_particles()) set_kinetic_energy_threshold(p, eCut); CORSIKA_LOG_DEBUG("setting kinetic energy threshold for all particles to {} GeV", eCut / 1_GeV); @@ -86,7 +89,8 @@ namespace corsika { , energy_emcut_(0_GeV) , energy_invcut_(0_GeV) , em_count_(0) - , inv_count_(0) { + , inv_count_(0) + , energy_count_(0) { set_kinetic_energy_thresholds(eCuts); CORSIKA_LOG_DEBUG("setting threshold particles individually"); } @@ -116,26 +120,34 @@ namespace corsika { HEPEnergyType const kine_energy = particle.getKineticEnergy(); HEPEnergyType const energy = particle.getEnergy(); CORSIKA_LOG_DEBUG( - "ParticleCut: checking {}, E_kin= {} GeV, EcutTot={} GeV", pid, - kine_energy / 1_GeV, - (energy_emcut_ + energy_invcut_ + energy_cut_ + energy_timecut_) / 1_GeV); + "ParticleCut: checking {} ({}), E_kin= {} GeV, EcutTot={} GeV, E={} GeV, m={} " + "GeV", + pid, particle.getPDG(), kine_energy / 1_GeV, + (energy_emcut_ + energy_invcut_ + energy_cut_ + energy_timecut_) / 1_GeV, + energy / 1_GeV, particle.getMass() / 1_GeV); + CORSIKA_LOG_DEBUG("p={}", particle.asString()); if (doCutEm_ && is_em(pid)) { CORSIKA_LOG_DEBUG("removing em. particle..."); energy_emcut_ += energy; em_count_ += 1; + energy_event_ += energy; return true; } else if (doCutInv_ && is_neutrino(pid)) { CORSIKA_LOG_DEBUG("removing inv. particle..."); energy_invcut_ += energy; inv_count_ += 1; + energy_event_ += energy; return true; } else if (isBelowEnergyCut(particle)) { CORSIKA_LOG_DEBUG("removing low en. particle..."); energy_cut_ += energy; + energy_count_ += 1; + energy_event_ += energy; return true; } else if (particle.getTime() > 10_ms) { CORSIKA_LOG_DEBUG("removing OLD particle..."); energy_timecut_ += energy; + energy_event_ += energy; return true; } return false; // this particle will not be removed/cut @@ -143,11 +155,13 @@ namespace corsika { template <typename TStackView> inline void ParticleCut::doSecondaries(TStackView& vS) { + energy_event_ = 0_GeV; // per event counting for printout auto particle = vS.begin(); while (particle != vS.end()) { if (checkCutParticle(particle)) { particle.erase(); } ++particle; // next entry in SecondaryView } + CORSIKA_LOG_DEBUG("Event cut: {} GeV", energy_event_ / 1_GeV); } template <typename TParticle, typename TTrajectory> @@ -172,16 +186,14 @@ namespace corsika { inline void ParticleCut::showResults() { CORSIKA_LOG_INFO( - " ******************************\n" - " energy removed by cut of electromagnetic (GeV): {} \n " - " no. of em. particles removed : {} \n " - " energy removed by cut of invisible (GeV): {} \n " - " no. of invisible particles removed : {} \n " - " energy removed by kinetic energy cut (GeV): {} \n" + "\n ******************************\n " + " energy removed by cut of electromagnetic (GeV): {} (number: {})\n " + " energy removed by cut of invisible (GeV): {} (number: {})\n " + " energy removed by kinetic energy cut (GeV): {} (number: {}) \n " " energy removed by time cut (GeV): {} \n" " ******************************", energy_emcut_ / 1_GeV, em_count_, energy_invcut_ / 1_GeV, inv_count_, - energy_cut_ / 1_GeV, energy_timecut_ / 1_GeV); + energy_cut_ / 1_GeV, energy_count_, energy_timecut_ / 1_GeV); } inline void ParticleCut::reset() { @@ -190,6 +202,7 @@ namespace corsika { energy_invcut_ = 0_GeV; inv_count_ = 0; energy_cut_ = 0_GeV; + energy_count_ = 0; energy_timecut_ = 0_GeV; } diff --git a/corsika/detail/modules/StackInspector.inl b/corsika/detail/modules/StackInspector.inl index e339b2e89858a233112b9c6a5f126d6d5ab5851f..5ab9fb6a8a258e9f1747fdb02abb8ffe6d27869c 100644 --- a/corsika/detail/modules/StackInspector.inl +++ b/corsika/detail/modules/StackInspector.inl @@ -65,20 +65,26 @@ namespace corsika { double const progress = dE / E0_; double const eta_seconds = elapsed_seconds.count() / progress; + std::time_t const start_time = std::chrono::system_clock::to_time_t(StartTime_); std::time_t const eta_time = std::chrono::system_clock::to_time_t( StartTime_ + std::chrono::seconds((int)eta_seconds)); + int const yday0 = std::localtime(&start_time)->tm_yday; + int const yday1 = std::localtime(&eta_time)->tm_yday; + int const dyday = yday1 - yday0; + CORSIKA_LOG_INFO( "StackInspector: " " time={}" ", running={} seconds" - " ( {}%)" + " ( {:.1f}%)" ", nStep={}" ", stackSize={}" ", Estack={} GeV" - ", ETA={}", + ", ETA={}{}", std::put_time(std::localtime(&now_time), "%T"), elapsed_seconds.count(), - int(progress * 100), getStep(), vS.getSize(), Etot / 1_GeV, + (progress * 100), getStep(), vS.getSize(), Etot / 1_GeV, + (dyday == 0 ? "" : fmt::format("+{}d ", dyday)), std::put_time(std::localtime(&eta_time), "%T")); } diff --git a/corsika/detail/modules/conex/CONEXhybrid.inl b/corsika/detail/modules/conex/CONEXhybrid.inl index 3990a6225e9c5d34afa0361465e6d8f8795252c6..3a8109f631d41275567bda02e713e3d47b404a8f 100644 --- a/corsika/detail/modules/conex/CONEXhybrid.inl +++ b/corsika/detail/modules/conex/CONEXhybrid.inl @@ -112,7 +112,7 @@ namespace corsika { theta, phi); int ipart = static_cast<int>(primaryPDG); - auto rng = RNGManager<>::getInstance().getRandomStream("cascade"); + auto rng = RNGManager<>::getInstance().getRandomStream("conex"); double dimpact = 0.; // valid only if shower core is fixed on the observation plane; // for skimming showers an offset is needed like in CONEX diff --git a/corsika/detail/modules/epos/Interaction.inl b/corsika/detail/modules/epos/Interaction.inl index 90676948bcecb22c9658256d38b0a6318567147b..058dd2c7f21c3961c1de0030d3a0c86942123a28 100644 --- a/corsika/detail/modules/epos/Interaction.inl +++ b/corsika/detail/modules/epos/Interaction.inl @@ -28,8 +28,8 @@ using SetupParticle = setup::Stack::stack_iterator_type; namespace corsika::epos { - inline Interaction::Interaction(const std::string& dataPath, - const bool epos_printout_on) + inline Interaction::Interaction(std::string const& dataPath, + bool const epos_printout_on) : data_path_(dataPath) , epos_listing_(epos_printout_on) { if (dataPath == "") { @@ -89,8 +89,9 @@ namespace corsika::epos { ::epos::aaset_(iarg); // debug output settings - ::epos::prnt1_.ish = 0; // debug level in epos, 0: off, 6: medium output - ::epos::files_.ifch = 6; // output unit, 6: screen + ::epos::prnt1_.ish = 0; // debug level in epos, 0: off, 6: medium output + ::epos::prnt3_.iwseed = 0; // 1: printout seeds, 0: off + ::epos::files_.ifch = 6; // output unit, 6: screen // dummy set seeds for random number generator in epos. need to fool epos checks... // we will use external generator @@ -336,7 +337,7 @@ namespace corsika::epos { BeamId, BeamA, BeamZ, TargetId, EnergyLab / 1_GeV); // read cross section from epos internal tables - int Abeam; + int Abeam = 0; float Ekin = -1; if (is_nucleus(BeamId)) { @@ -364,11 +365,8 @@ namespace corsika::epos { throw std::runtime_error("Epos cross section failed! Negative kinetic energy!"); } - int Atarget; - if (is_nucleus(TargetId)) - Atarget = get_nucleus_A(TargetId); - else - Atarget = 1; + int Atarget = 1; + if (is_nucleus(TargetId)) { Atarget = get_nucleus_A(TargetId); } int iMode = 3; // 0: air, >0 not air @@ -466,7 +464,8 @@ namespace corsika::epos { auto const projectile = view.getProjectile(); auto const corsikaBeamId = projectile.getPID(); - CORSIKA_LOGGER_DEBUG(logger_, "DoInteraction: {} interaction ", corsikaBeamId); + CORSIKA_LOGGER_DEBUG(logger_, "doInteraction: {} interaction, Elab={} ", + corsikaBeamId, projectile.getEnergy()); if (corsika::epos::canInteract(corsikaBeamId)) { count_ = count_ + 1; @@ -539,7 +538,7 @@ namespace corsika::epos { if (epos_listing_) { char nam[9] = "EPOSLHC&"; - ::epos::alistf_(nam); + ::epos::alistf_(nam, 9); } // NSTORE-part @@ -580,10 +579,10 @@ namespace corsika::epos { A = 4; Z = 2; } else { - // 10AAAZZZ0 + // 100ZZZAAA0 -> std. pdg code EposCodeIntType const eposPdg = static_cast<EposCodeIntType>(eposId); - Z = int(eposPdg / 10) % 1000; - A = int(eposPdg / 10000) % 1000; + Z = int(abs(eposPdg) / 10000) % 1000; + A = int(abs(eposPdg) / 10) % 1000; } auto pnew = view.addSecondary( std::make_tuple(Code::Nucleus, momentum, pOrig, tOrig, A, Z)); diff --git a/corsika/detail/modules/urqmd/UrQMD.inl b/corsika/detail/modules/urqmd/UrQMD.inl index 9c9bcfe1ac5f84824c446f4ee0dc9f0f201c5808..12b9edbc372705ce20151b77fe855f8dc1e65024 100644 --- a/corsika/detail/modules/urqmd/UrQMD.inl +++ b/corsika/detail/modules/urqmd/UrQMD.inl @@ -29,7 +29,8 @@ namespace corsika::urqmd { - inline UrQMD::UrQMD(boost::filesystem::path xs_file) { + inline UrQMD::UrQMD(boost::filesystem::path xs_file, int const retryFlag) + : iflb_(retryFlag) { readXSFile(xs_file); ::urqmd::iniurqmdc8_(); } @@ -292,7 +293,8 @@ namespace corsika::urqmd { ::urqmd::inputs_.spiso3[1] = iso3; } - int iflb = 0; // flag for retrying interaction in case of empty event, 0 means retry + int iflb = + iflb_; // flag for retrying interaction in case of empty event, 0 means retry ::urqmd::urqmd_(iflb); // now retrieve secondaries from UrQMD @@ -406,7 +408,7 @@ namespace corsika::urqmd { std::getline(file, line); std::stringstream ss(line); - char dummy; + char dummy; // this is '#' int nTargets, nProjectiles, nSupports; ss >> dummy >> nTargets >> nProjectiles >> nSupports; diff --git a/corsika/modules/LongitudinalProfile.hpp b/corsika/modules/LongitudinalProfile.hpp index 5dc2729b4c3d2bcb78e6451f4268e25249c06827..1d84462b0573f5407efb9a531ce5299df2b9cd58 100644 --- a/corsika/modules/LongitudinalProfile.hpp +++ b/corsika/modules/LongitudinalProfile.hpp @@ -55,14 +55,15 @@ namespace corsika { private: GrammageType const dX_; ShowerAxis const& shower_axis_; - using ProfileEntry = std::array<uint32_t, 6>; + using ProfileEntry = std::array<uint32_t, 7>; enum ProfileIndex { Photon = 0, Positron = 1, Electron = 2, MuPlus = 3, MuMinus = 4, - Hadron = 5 + Hadron = 5, + Invisible = 6, }; std::vector<ProfileEntry> profiles_; // longitudinal profile }; diff --git a/corsika/modules/ParticleCut.hpp b/corsika/modules/ParticleCut.hpp index e9df7a602ec974963e8e3bc2ef566c56f19a9020..bb26ddfa8004de4d593eb8c2376060bc677f62ca 100644 --- a/corsika/modules/ParticleCut.hpp +++ b/corsika/modules/ParticleCut.hpp @@ -111,6 +111,9 @@ namespace corsika { HEPEnergyType energy_invcut_ = 0 * electronvolt; unsigned int em_count_ = 0; unsigned int inv_count_ = 0; + unsigned int energy_count_ = 0; + + HEPEnergyType energy_event_; // per event sum }; } // namespace corsika diff --git a/corsika/modules/Random.hpp b/corsika/modules/Random.hpp index 116cba6b8ca86d0a5437f0226ae9ffcc00cea850..0ab888ab85ae975471bee142dd93147cd5a25319 100644 --- a/corsika/modules/Random.hpp +++ b/corsika/modules/Random.hpp @@ -20,3 +20,4 @@ #include <corsika/modules/epos/Random.hpp> #include <corsika/modules/urqmd/Random.hpp> #include <corsika/modules/qgsjetII/Random.hpp> +#include <corsika/modules/conex/Random.hpp> diff --git a/corsika/modules/conex/CONEX_f.hpp b/corsika/modules/conex/CONEX_f.hpp index 3baba085ea27c185ce6796691840fb48e029ed56..493f427ea5bd404bb670bb53d8c2ca1acb0deebb 100644 --- a/corsika/modules/conex/CONEX_f.hpp +++ b/corsika/modules/conex/CONEX_f.hpp @@ -18,6 +18,32 @@ #include <array> namespace conex { + + // the CORSIKA 8 random number interface + + /** + * \function epos::rndm_interface + * + * this is the random number hook to external packages. + * + * CORSIKA8, for example, has to provide an implementation of this. + **/ + extern float rndm_interface(); + + /** + * \function epos::double_rndm_interface + * + * this is the random number hook to external packages. + * + * CORSIKA8, for example, has to provide an implementation of this. + **/ + + extern double double_rndm_interface(); + + extern "C" {} + + // the CONEX fortran interface + extern "C" { extern struct { std::array<double, 16> dptl; } cxoptl_; diff --git a/corsika/modules/conex/Random.hpp b/corsika/modules/conex/Random.hpp new file mode 100644 index 0000000000000000000000000000000000000000..a638a330857ebc2c011c82237df2dd4a1a1f08eb --- /dev/null +++ b/corsika/modules/conex/Random.hpp @@ -0,0 +1,38 @@ +/* + * (c) Copyright 2018 CORSIKA Project, corsika-project@lists.kit.edu + * + * This software is distributed under the terms of the GNU General Public + * Licence version 3 (GPL Version 3). See file LICENSE for a full version of + * the license. + */ + +#pragma once + +#include <corsika/framework/random/RNGManager.hpp> +#include <random> + +/** + * \file conex/Random.hpp + * + * This file is an integral part of the epos interface. It must be + * linked to the executable linked to epos exactly once + * + */ + +namespace conex { + + float rndm_interface() { + static corsika::default_prng_type& rng = + corsika::RNGManager<>::getInstance().getRandomStream("conex"); + std::uniform_real_distribution<float> dist; + return dist(rng); + } + + double double_rndm_interface() { + static corsika::default_prng_type& rng = + corsika::RNGManager<>::getInstance().getRandomStream("conex"); + std::uniform_real_distribution<double> dist; + return dist(rng); + } + +} // namespace conex diff --git a/corsika/modules/epos/Interaction.hpp b/corsika/modules/epos/Interaction.hpp index 69d5a7186ec2f289f23ddb726f071ac3979c751b..efaac0705f33174fa1910c780791e59651eaf1c1 100644 --- a/corsika/modules/epos/Interaction.hpp +++ b/corsika/modules/epos/Interaction.hpp @@ -22,7 +22,7 @@ namespace corsika::epos { bool epos_listing_; public: - Interaction(const std::string& dataPath = "", const bool epos_printout_on = false); + Interaction(std::string const& dataPath = "", bool const epos_printout_on = false); ~Interaction(); //! returns production and elastic cross section for hadrons in epos. Inputs are: diff --git a/corsika/modules/urqmd/UrQMD.hpp b/corsika/modules/urqmd/UrQMD.hpp index e83c6e8c0f1b71a1987378d9ccf0068736c72953..2f3c278043fa83728d36fdc52b8ca181053031ad 100644 --- a/corsika/modules/urqmd/UrQMD.hpp +++ b/corsika/modules/urqmd/UrQMD.hpp @@ -25,7 +25,13 @@ namespace corsika::urqmd { class UrQMD : public InteractionProcess<UrQMD> { public: - UrQMD(boost::filesystem::path const path = corsika_data("UrQMD/UrQMD-1.3.1-xs.dat")); + /** + * @param path Location of UrQMD XS data file + * @param retryFlag Internal UrQMD flag for retrying interaction in case of empty + * event, 0 means retry + */ + UrQMD(boost::filesystem::path const path = corsika_data("UrQMD/UrQMD-1.3.1-xs.dat"), + int const retryFlag = 0); template <typename TParticle> GrammageType getInteractionLength(TParticle const&) const; @@ -42,13 +48,15 @@ namespace corsika::urqmd { void blob(int) {} - private: static CrossSectionType getCrossSection(Code, Code, HEPEnergyType, int); + + private: void readXSFile(boost::filesystem::path); // data members default_prng_type& RNG_ = RNGManager<>::getInstance().getRandomStream("urqmd"); std::uniform_int_distribution<int> booleanDist_{0, 1}; + int iflb_; //! // flag for retrying interaction in case of empty event, 0 means retry boost::multi_array<CrossSectionType, 3> xs_interp_support_table_; }; diff --git a/examples/corsika.cpp b/examples/corsika.cpp index 275ca88e26daebf256a57ce540152e3cb21957d1..09d997c5d7d343165874964418063fb6ce211d8a 100644 --- a/examples/corsika.cpp +++ b/examples/corsika.cpp @@ -48,6 +48,7 @@ #include <corsika/modules/ParticleCut.hpp> #include <corsika/modules/Pythia8.hpp> #include <corsika/modules/Sibyll.hpp> +#include <corsika/modules/Epos.hpp> #include <corsika/modules/UrQMD.hpp> #include <corsika/modules/PROPOSAL.hpp> #include <corsika/modules/QGSJetII.hpp> @@ -83,13 +84,16 @@ void registerRandomStreams(int seed) { RNGManager<>::getInstance().registerRandomStream("cascade"); RNGManager<>::getInstance().registerRandomStream("qgsjet"); RNGManager<>::getInstance().registerRandomStream("sibyll"); + RNGManager<>::getInstance().registerRandomStream("epos"); RNGManager<>::getInstance().registerRandomStream("pythia"); RNGManager<>::getInstance().registerRandomStream("urqmd"); RNGManager<>::getInstance().registerRandomStream("proposal"); if (seed == 0) { std::random_device rd; seed = rd(); - cout << "new random seed (auto) " << seed << endl; + CORSIKA_LOG_INFO("random seed (auto) {} ", seed); + } else { + CORSIKA_LOG_INFO("random seed {} ", seed); } RNGManager<>::getInstance().setSeed(seed); } @@ -143,10 +147,12 @@ int main(int argc, char** argv) { ->check(CLI::NonexistentPath) ->group("Library/Output"); app.add_option("-s,--seed", "The random number seed.") - ->default_val(12351739) + ->default_val(0) ->check(CLI::NonNegativeNumber) ->group("Misc."); - app.add_flag("--force-interaction", "Force the location of the first interaction.") + bool force_interaction = false; + app.add_flag("--force-interaction", force_interaction, + "Force the location of the first interaction.") ->group("Misc."); app.add_option("-v,--verbosity", "Verbosity level") ->default_str("info") @@ -222,8 +228,6 @@ int main(int argc, char** argv) { /* === START: CONSTRUCT PRIMARY PARTICLE === */ - /* === START: CONSTRUCT PRIMARY PARTICLE === */ - // parse the primary ID as a PDG or A/Z code Code beamCode; HEPEnergyType mass; @@ -278,11 +282,15 @@ int main(int argc, char** argv) { OutputManager output(app["--filename"]->as<std::string>()); /* === START: SETUP PROCESS LIST === */ + // corsika::epos::Interaction heModel; + // corsika::qgsjetII::Interaction heModel; + // InteractionCounter heModelCounted(heModel); + corsika::sibyll::Interaction sibyll; InteractionCounter sibyllCounted(sibyll); - corsika::sibyll::NuclearInteraction sibyllNuc(sibyll, env); InteractionCounter sibyllNucCounted(sibyllNuc); + auto heModelCounted = make_sequence(sibyllNucCounted, sibyllCounted); corsika::pythia8::Decay decayPythia; @@ -309,16 +317,21 @@ int main(int argc, char** argv) { // decaySibyll.printDecayConfig(); - ParticleCut cut{1_GeV, 1_GeV, 1_GeV, 1_GeV, false}; + HEPEnergyType const emcut = 1_GeV; + HEPEnergyType const hadcut = 1_GeV; + ParticleCut cut(emcut, emcut, hadcut, hadcut, true); corsika::proposal::Interaction emCascade(env); - corsika::proposal::ContinuousProcess emContinuous(env); InteractionCounter emCascadeCounted(emCascade); + // corsika::proposal::ContinuousProcess emContinuous(env); + BetheBlochPDG emContinuous(showerAxis); + + // cut.printThresholds(); - LongitudinalProfile longprof{showerAxis}; + LongitudinalProfile longprof(showerAxis); corsika::urqmd::UrQMD urqmd; - InteractionCounter urqmdCounted{urqmd}; - StackInspector<setup::Stack> stackInspect(5000, false, E0); + InteractionCounter urqmdCounted(urqmd); + StackInspector<setup::Stack> stackInspect(50000, false, E0); // assemble all processes into an ordered process list struct EnergySwitch { @@ -327,8 +340,7 @@ int main(int argc, char** argv) { : cutE_(cutE) {} bool operator()(const Particle& p) { return (p.getKineticEnergy() < cutE_); } }; - auto hadronSequence = make_select(EnergySwitch(80_GeV), urqmdCounted, - make_sequence(sibyllNucCounted, sibyllCounted)); + auto hadronSequence = make_select(EnergySwitch(63.1_GeV), urqmdCounted, heModelCounted); auto decaySequence = make_sequence(decayPythia, decaySibyll); // track writer @@ -343,9 +355,9 @@ int main(int argc, char** argv) { output.add("particles", observationLevel); // assemble the final process sequence - auto sequence = - make_sequence(stackInspect, hadronSequence, decaySequence, emCascadeCounted, - emContinuous, cut, trackWriter, observationLevel, longprof); + auto sequence = make_sequence(stackInspect, hadronSequence, decaySequence, + emCascadeCounted, cut, emContinuous, // trackWriter, + observationLevel, longprof); /* === END: SETUP PROCESS LIST === */ // create the cascade object using the default stack and tracking implementation @@ -392,7 +404,10 @@ int main(int argc, char** argv) { } // if we want to fix the first location of the shower - if (app["--force-interaction"]) EAS.forceInteraction(); + if (force_interaction) { + CORSIKA_LOG_INFO("Fixing first interaction at injection point."); + EAS.forceInteraction(); + } // run the shower EAS.run(); @@ -409,6 +424,7 @@ int main(int argc, char** argv) { cut.reset(); // emContinuous.reset(); + // auto const hists = heModelCounted.getHistogram() + urqmdCounted.getHistogram(); auto const hists = sibyllCounted.getHistogram() + sibyllNucCounted.getHistogram() + urqmdCounted.getHistogram(); diff --git a/examples/em_shower.cpp b/examples/em_shower.cpp index d8b8385f3696ff1fee4f48518253bd24e97fbdb0..4730561718a80dd962729670a726cf71407ae387 100644 --- a/examples/em_shower.cpp +++ b/examples/em_shower.cpp @@ -159,7 +159,7 @@ int main(int argc, char** argv) { output.add("tracks", trackWriter); // register TrackWriter // long. profile; columns for photon, e+, e- still need to be added - LongitudinalProfile longprof{showerAxis}; + LongitudinalProfile longprof(showerAxis); Plane const obsPlane(showerCore, DirectionVector(rootCS, {0., 0., 1.})); ObservationPlane<setup::Tracking> observationLevel( diff --git a/examples/hybrid_MC.cpp b/examples/hybrid_MC.cpp index 4674512cc4d0f204538999c6bf6a3eb384704ea2..3619b99bb5cdc885840bc3bfd971a698011f3c32 100644 --- a/examples/hybrid_MC.cpp +++ b/examples/hybrid_MC.cpp @@ -71,9 +71,11 @@ void registerRandomStreams(uint64_t seed) { RNGManager<>::getInstance().registerRandomStream("cascade"); RNGManager<>::getInstance().registerRandomStream("qgsjet"); RNGManager<>::getInstance().registerRandomStream("sibyll"); + RNGManager<>::getInstance().registerRandomStream("epos"); RNGManager<>::getInstance().registerRandomStream("pythia"); RNGManager<>::getInstance().registerRandomStream("urqmd"); RNGManager<>::getInstance().registerRandomStream("proposal"); + RNGManager<>::getInstance().registerRandomStream("conex"); if (seed == 0) { std::random_device rd; seed = rd(); @@ -237,15 +239,15 @@ int main(int argc, char** argv) { decaySibyll.printDecayConfig(); - ParticleCut cut{3_GeV, false, true}; - BetheBlochPDG eLoss{showerAxis}; + ParticleCut cut(3_GeV, false, true); + BetheBlochPDG eLoss(showerAxis); CONEXhybrid conex_model(center, showerAxis, t, injectionHeight, E0, get_PDG(Code::Proton)); OnShellCheck reset_particle_mass(1.e-3, 1.e-1, false); - LongitudinalProfile longprof{showerAxis}; + LongitudinalProfile longprof(showerAxis); Plane const obsPlane(showerCore, DirectionVector(rootCS, {0., 0., 1.})); ObservationPlane<setup::Tracking> observationLevel( diff --git a/examples/mars.cpp b/examples/mars.cpp index 92ed62ad9cd76578ebbbaeddf4c42702e1b64416..2d0d7ce5bcaca3233c567fc185c6178158346762 100644 --- a/examples/mars.cpp +++ b/examples/mars.cpp @@ -117,7 +117,9 @@ void registerRandomStreams(int seed) { if (seed == 0) { std::random_device rd; seed = rd(); - cout << "new random seed (auto) " << seed << endl; + CORSIKA_LOG_INFO("random seed (auto) {} ", seed); + } else { + CORSIKA_LOG_INFO("random seed {} ", seed); } RNGManager<>::getInstance().setSeed(seed); } @@ -171,11 +173,9 @@ int main(int argc, char** argv) { ->check(CLI::NonexistentPath) ->group("Library/Output"); app.add_option("-s,--seed", "The random number seed.") - ->default_val(12351739) + ->default_val(0) ->check(CLI::NonNegativeNumber) ->group("Misc."); - app.add_flag("--force-interaction", "Force the location of the first interaction.") - ->group("Misc."); app.add_option("-v,--verbosity", "Verbosity level: warn, info, debug, trace.") ->default_val("info") ->check(CLI::IsMember({"warn", "info", "debug", "trace"})) @@ -313,9 +313,9 @@ int main(int argc, char** argv) { /* === START: SETUP PROCESS LIST === */ corsika::sibyll::Interaction sibyll; InteractionCounter sibyllCounted(sibyll); - corsika::sibyll::NuclearInteraction sibyllNuc(sibyll, env); InteractionCounter sibyllNucCounted(sibyllNuc); + auto heModelCounted = make_sequence(sibyllNucCounted, sibyllCounted); corsika::pythia8::Decay decayPythia; @@ -342,10 +342,13 @@ int main(int argc, char** argv) { // decaySibyll.printDecayConfig(); - ParticleCut cut{1_GeV, 1_GeV, 1_GeV, 1_GeV, false}; + HEPEnergyType const emcut = 1_GeV; + HEPEnergyType const hadcut = 1_GeV; + ParticleCut cut(emcut, emcut, hadcut, hadcut, true); corsika::proposal::Interaction emCascade(env); - corsika::proposal::ContinuousProcess emContinuous(env); InteractionCounter emCascadeCounted(emCascade); + // corsika::proposal::ContinuousProcess emContinuous(env); + BetheBlochPDG emContinuous(showerAxis); LongitudinalProfile longprof{showerAxis, 1_g / square(1_cm)}; @@ -360,8 +363,7 @@ int main(int argc, char** argv) { : cutE_(cutE) {} bool operator()(const Particle& p) { return (p.getKineticEnergy() < cutE_); } }; - auto hadronSequence = make_select(EnergySwitch(80_GeV), urqmdCounted, - make_sequence(sibyllNucCounted, sibyllCounted)); + auto hadronSequence = make_select(EnergySwitch(63.1_GeV), urqmdCounted, heModelCounted); auto decaySequence = make_sequence(decayPythia, decaySibyll); // track writer @@ -411,7 +413,7 @@ int main(int argc, char** argv) { string const outdir(app["--filename"]->as<std::string>()); string const labHist_file = outdir + "/inthist_lab_" + to_string(i_shower) + ".npz"; string const cMSHist_file = outdir + "/inthist_cms_" + to_string(i_shower) + ".npz"; - string const longprof_file = outdir + "/longprof" + to_string(i_shower) + ".txt"; + string const longprof_file = outdir + "/longprof_" + to_string(i_shower) + ".txt"; // setup particle stack, and add primary particle stack.clear(); @@ -423,9 +425,6 @@ int main(int argc, char** argv) { stack.addParticle(std::make_tuple(beamCode, plab, injectionPos, 0_ns)); } - // if we want to fix the first location of the shower - if (app["--force-interaction"]) EAS.forceInteraction(); - // run the shower EAS.run(); diff --git a/modules/conex b/modules/conex index e7d82b2c96fee3c233d7954506123ab6c5bd15e8..dd4f4dcf325b40f76bb7e60bf61e77ebf99fa098 160000 --- a/modules/conex +++ b/modules/conex @@ -1 +1 @@ -Subproject commit e7d82b2c96fee3c233d7954506123ab6c5bd15e8 +Subproject commit dd4f4dcf325b40f76bb7e60bf61e77ebf99fa098 diff --git a/modules/epos/epos.cpp b/modules/epos/epos.cpp index 1d374bfdc84026a688236bf2a39f24c38678ec21..b77da647ecb2cf1958fc52f91e9e7b1b8a6a8f6b 100644 --- a/modules/epos/epos.cpp +++ b/modules/epos/epos.cpp @@ -3,12 +3,26 @@ namespace epos { + // this is needed as linker object, but it is not needed to do anything + void ranfst_(int&) {} + + // this is needed as linker object, but it is not needed to do anything + void ranfgt_(int&) {} + + // this is needed as linker object, but it is not needed to do anything + void rmmaqd_(int[3], int&, char*, int) {} + // this is needed as linker object, but it is not needed to do anything void ranfini_(double&, int&, int&) {} // this is needed as linker object, but it is not needed to do anything void ranfcv_(double&) {} // LCOV_EXCL_LINE + void rmmard_(double rvec[], int& lenv, int& /*iseq*/) { + // we ignore iseq and draw all numbers from same C8 sequence + for (int i = 0; i < lenv; ++i) { rvec[i] = ::epos::double_rndm_interface(); } + } + float rangen_() { return ::epos::rndm_interface(); } double drangen_() { return ::epos::double_rndm_interface(); } diff --git a/modules/epos/epos.hpp b/modules/epos/epos.hpp index ed6be8bd1723650ca572a0c92909c96c3cefaec7..48320b2a1d9c0abac2037f20be20d1e74df286ab 100644 --- a/modules/epos/epos.hpp +++ b/modules/epos/epos.hpp @@ -39,20 +39,31 @@ namespace epos { extern "C" { + // random number and seed functions + void ranfst_(int& seed); + void ranfgt_(int& seed); + void rmmard_(double rvec[], int& lenv, int& /*iseq*/); + void rmmaqd_(int seed[3], int&, char*, int); + + // additional random number functions + void ranfini_(double&, int&, int&); + void ranfcv_(double&); + + float rangen_(); + double drangen_(); + void aaset_(int&); void atitle_(); void ainit_(); void aepos_(int&); void afinal_(); - void alistf_(char[7]); + void alistf_(char* str, int str_length); // hidden str length double lhcparameters_(); - void hdecin_(bool&); void hnbspd_(int&); void hnbpajini_(); void conini_(); void psaini_(); - void emsini_(double&, int&, int&); void paramini_(int&); void xsigma_(); @@ -74,7 +85,7 @@ namespace epos { // calculate cross section // c------------------------------------------------------------------------------ // subroutine crseaaEpos(sigt,sigi,sigc,sige) - // c------------------------------------------------------------------------------ + // c----------------------------------eposela-------------------------------------------- // c nucleus-nucleus (hadron) cross section of epos from simplified (realistic) // c simulations // c (id=0 corresponds to air) @@ -104,12 +115,6 @@ namespace epos { // convert id from one format to another int idtrafo_(char[3], char[3], int&); - // additional random number functions - void ranfini_(double&, int&, int&); - void ranfcv_(double&); - - float rangen_(); - double drangen_(); // common blocks as // defined in epos.inc @@ -369,6 +374,15 @@ namespace epos { int modsho; int idensi; } prnt1_; + + extern struct { + int ishevt; + int ixtau; + int iwseed; //! 1: printout seed + int jwseed; + int ixgeometry; + } prnt3_; + unsigned int constexpr mmry = 1; unsigned int constexpr mxptl = 200000 / mmry; extern struct { diff --git a/modules/urqmd/urqmd.f b/modules/urqmd/urqmd.f index 32a85ef53c09129e950da892bbf5119cde57b080..21bbc3be944d0cf3a3a1d85aef2b4eee1da4cf2a 100644 --- a/modules/urqmd/urqmd.f +++ b/modules/urqmd/urqmd.f @@ -334,18 +334,32 @@ c print *,"noc",noc,bdist,ctag,bimp cdh write(*,*)'(W) No collision in event ',event noc=noc+1 if(noc.ge.1000 .and. mod(noc,1000) .eq. 0)then - print *,'no collision problem in UrQMD' +c RU Mi 23. Jun 08:47:32 CEST 2021 +c switch off printout of number of collision counter warning: +c print *,'no collision problem in UrQMD' c~ stop endif if (noc.ge.50000) then - print *,'UrQMD terminating...' + print *,'UrQMD terminating without collision !? ...' + print *,' ebeam=', ebeam + print *,' projectile mass=', Ap + print *,' projectile charge=', Zp + print *,' target mass=', At + print *, 'target charge=', Zt + write(*,*) ' iterations =', noc +c RU Mi 23. Jun 08:53:43 CEST 2021 +c MAYBE do not quit: just assume this is very rate and resembles an elastic FS call exit(333) ! think of a better way to hand over the error - ! to C++ + ! to C++ +c return ! RU !!!!! back to C8 +c RU Mi 23. Jun 08:54:25 CEST 2021 endif goto 1 endif - - write(*,*) 'iterations =', noc + +c RU Mi 23. Jun 08:37:22 CEST 2021 +c switch off printout of number of collision counter: +c write(*,*) 'iterations =', noc c end of event loop cdh 10 continue diff --git a/tests/modules/conex_fit_REF.txt b/tests/modules/conex_fit_REF.txt index 4930ab8259be9a50c912a3db2251169dc39e7f83..b9d071745e5daa1b371971d0e698a90477d9db1c 100644 --- a/tests/modules/conex_fit_REF.txt +++ b/tests/modules/conex_fit_REF.txt @@ -1,13 +1,13 @@ 15 # log10(eprima/eV) 60 # theta 1e+30 # X1 (first interaction) -1093.9 # Nmax -475.585 # X0 -50.3301 # P1 --0.00584492 # P2 -3.55546e-06 # P3 -4.49378e-05 # chi^2 / sqrt(Nmax) -880.549 # Xmax +1156.19 # Nmax +471.873 # X0 +48.4425 # P1 +-0.00311659 # P2 +2.89514e-06 # P3 +0.000124814 # chi^2 / sqrt(Nmax) +833.734 # Xmax -0 # phi -1 # inelasticity 1st int. 100000 # ??? diff --git a/tests/modules/conex_output_REF.txt b/tests/modules/conex_output_REF.txt index 847249499ab21a65dbef849f1e8f09c12ac1c9cf..191f7fe5d90deccaf36dee714ef9176b46b38962 100644 --- a/tests/modules/conex_output_REF.txt +++ b/tests/modules/conex_output_REF.txt @@ -52,157 +52,157 @@ 500.00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 510.00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 520.00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 - 530.00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 - 540.00 0.00000e+00 6.19543e-04 0.00000e+00 0.00000e+00 1.00000e+00 0.00000e+00 0.00000e+00 - 550.00 5.11672e-01 2.45887e-03 7.84133e-04 8.01824e-04 1.69319e+00 2.71772e-01 5.18178e-03 - 560.00 1.44787e+00 5.98174e-03 3.26388e-03 2.55890e-03 4.23261e+00 7.87482e-01 9.85013e-03 - 570.00 3.22644e+00 1.23139e-02 7.19207e-03 4.10591e-03 9.26161e+00 1.77940e+00 1.45338e-02 - 580.00 6.29649e+00 2.27002e-02 1.25642e-02 5.68681e-03 1.79860e+01 3.50640e+00 1.94858e-02 - 590.00 1.11661e+01 3.84553e-02 1.94164e-02 7.34362e-03 3.20264e+01 6.26548e+00 2.47827e-02 - 600.00 1.83976e+01 6.12584e-02 2.77669e-02 9.05895e-03 5.33385e+01 1.03883e+01 3.04222e-02 - 610.00 2.85835e+01 9.25218e-02 3.76004e-02 1.07993e-02 8.41411e+01 1.62278e+01 3.63635e-02 - 620.00 4.23143e+01 1.33699e-01 4.88659e-02 1.25275e-02 1.26829e+02 2.41390e+01 4.25453e-02 - 630.00 6.01403e+01 1.86097e-01 6.14778e-02 1.42066e-02 1.83865e+02 3.44572e+01 4.88946e-02 - 640.00 8.25344e+01 2.50784e-01 7.53194e-02 1.58026e-02 2.57657e+02 4.74757e+01 5.53321e-02 - 650.00 1.09858e+02 3.27507e-01 9.02480e-02 1.72847e-02 3.50424e+02 6.34254e+01 6.17754e-02 - 660.00 1.42331e+02 4.16146e-01 1.06100e-01 1.86272e-02 4.64061e+02 8.24564e+01 6.81417e-02 - 670.00 1.80012e+02 5.17644e-01 1.22695e-01 1.98093e-02 6.00019e+02 1.04625e+02 7.43503e-02 - 680.00 2.22787e+02 6.31511e-01 1.39844e-01 2.08155e-02 7.59194e+02 1.29886e+02 8.03241e-02 - 690.00 2.70363e+02 7.56833e-01 1.57355e-01 2.16359e-02 9.41847e+02 1.58087e+02 8.59916e-02 - 700.00 3.22277e+02 8.92293e-01 1.75036e-01 2.22657e-02 1.14756e+03 1.88977e+02 9.12885e-02 - 710.00 3.77914e+02 1.03622e+00 1.92699e-01 2.27051e-02 1.37520e+03 2.22206e+02 9.61583e-02 - 720.00 4.36522e+02 1.18663e+00 2.10169e-01 2.29584e-02 1.62297e+03 2.57345e+02 1.00554e-01 - 730.00 4.97246e+02 1.34133e+00 2.27283e-01 2.30336e-02 1.88839e+03 2.93897e+02 1.04437e-01 - 740.00 5.59157e+02 1.49795e+00 2.43891e-01 2.29419e-02 2.16845e+03 3.31314e+02 1.07781e-01 - 750.00 6.21282e+02 1.65409e+00 2.59863e-01 2.26966e-02 2.45963e+03 3.69022e+02 1.10566e-01 - 760.00 6.82642e+02 1.80733e+00 2.75087e-01 2.23129e-02 2.75807e+03 4.06434e+02 1.12783e-01 - 770.00 7.42280e+02 1.95534e+00 2.89470e-01 2.18069e-02 3.05965e+03 4.42971e+02 1.14433e-01 - 780.00 7.99287e+02 2.09594e+00 3.02935e-01 2.11953e-02 3.36014e+03 4.78082e+02 1.15524e-01 - 790.00 8.52831e+02 2.22712e+00 3.15427e-01 2.04950e-02 3.65530e+03 5.11253e+02 1.16070e-01 - 800.00 9.02172e+02 2.34717e+00 3.26907e-01 1.97221e-02 3.94103e+03 5.42024e+02 1.16093e-01 - 810.00 9.46679e+02 2.45462e+00 3.37349e-01 1.88925e-02 4.21344e+03 5.69997e+02 1.15621e-01 - 820.00 9.85840e+02 2.54830e+00 3.46746e-01 1.80208e-02 4.46898e+03 5.94842e+02 1.14684e-01 - 830.00 1.01926e+03 2.62733e+00 3.55101e-01 1.71205e-02 4.70447e+03 6.16302e+02 1.13318e-01 - 840.00 1.04669e+03 2.69117e+00 3.62430e-01 1.62041e-02 4.91718e+03 6.34194e+02 1.11561e-01 - 850.00 1.06796e+03 2.73956e+00 3.68758e-01 1.52825e-02 5.10489e+03 6.48405e+02 1.09450e-01 - 860.00 1.08306e+03 2.77250e+00 3.74118e-01 1.43653e-02 5.26586e+03 6.58894e+02 1.07026e-01 - 870.00 1.09205e+03 2.79024e+00 3.78550e-01 1.34609e-02 5.39889e+03 6.65683e+02 1.04329e-01 - 880.00 1.09510e+03 2.79328e+00 3.82100e-01 1.25763e-02 5.50327e+03 6.68853e+02 1.01398e-01 - 890.00 1.09247e+03 2.78228e+00 3.84816e-01 1.17171e-02 5.57878e+03 6.68534e+02 9.82721e-02 - 900.00 1.08446e+03 2.75806e+00 3.86749e-01 1.08851e-02 5.62564e+03 6.64902e+02 9.49872e-02 - 910.00 1.07146e+03 2.72161e+00 3.87956e-01 1.00934e-02 5.64450e+03 6.58168e+02 9.15781e-02 - 920.00 1.05388e+03 2.67395e+00 3.88488e-01 9.33491e-03 5.63636e+03 6.48571e+02 8.80778e-02 - 930.00 1.03216e+03 2.61622e+00 3.88400e-01 8.61473e-03 5.60252e+03 6.36372e+02 8.45165e-02 - 940.00 1.00677e+03 2.54959e+00 3.87746e-01 7.93401e-03 5.54457e+03 6.21846e+02 8.09223e-02 - 950.00 9.78183e+02 2.47525e+00 3.86577e-01 7.29324e-03 5.46429e+03 6.05274e+02 7.73203e-02 - 960.00 9.46875e+02 2.39437e+00 3.84944e-01 6.69235e-03 5.36363e+03 5.86940e+02 7.37333e-02 - 970.00 9.13309e+02 2.30809e+00 3.82895e-01 6.13084e-03 5.24462e+03 5.67124e+02 7.01815e-02 - 980.00 8.77933e+02 2.21753e+00 3.80476e-01 5.60784e-03 5.10940e+03 5.46100e+02 6.66826e-02 - 990.00 8.41172e+02 2.12372e+00 3.77729e-01 5.12216e-03 4.96010e+03 5.24127e+02 6.32518e-02 - 1000.00 8.03429e+02 2.02767e+00 3.74696e-01 4.67242e-03 4.79885e+03 5.01455e+02 5.99022e-02 - 1010.00 7.65075e+02 1.93026e+00 3.71415e-01 4.25702e-03 4.62771e+03 4.78312e+02 5.66446e-02 - 1020.00 7.26450e+02 1.83235e+00 3.67919e-01 3.87429e-03 4.44870e+03 4.54913e+02 5.34881e-02 - 1030.00 6.87864e+02 1.73468e+00 3.64243e-01 3.52244e-03 4.26374e+03 4.31450e+02 5.04396e-02 - 1040.00 6.49592e+02 1.63791e+00 3.60415e-01 3.19965e-03 4.07460e+03 4.08100e+02 4.75045e-02 - 1050.00 6.11877e+02 1.54266e+00 3.56463e-01 2.90411e-03 3.88298e+03 3.85015e+02 4.46867e-02 - 1060.00 5.74928e+02 1.44943e+00 3.52411e-01 2.63399e-03 3.69040e+03 3.62333e+02 4.19888e-02 - 1070.00 5.38927e+02 1.35865e+00 3.48281e-01 2.38752e-03 3.49827e+03 3.40170e+02 3.94120e-02 - 1080.00 5.04023e+02 1.27069e+00 3.44093e-01 2.16298e-03 3.30782e+03 3.18625e+02 3.69567e-02 - 1090.00 4.70338e+02 1.18584e+00 3.39866e-01 1.95870e-03 3.12017e+03 2.97779e+02 3.46221e-02 - 1100.00 4.37968e+02 1.10434e+00 3.35615e-01 1.77310e-03 2.93629e+03 2.77698e+02 3.24069e-02 - 1110.00 4.06985e+02 1.02635e+00 3.31355e-01 1.60466e-03 2.75700e+03 2.58432e+02 3.03088e-02 - 1120.00 3.77442e+02 9.52000e-01 3.27098e-01 1.45197e-03 2.58300e+03 2.40020e+02 2.83252e-02 - 1130.00 3.49371e+02 8.81364e-01 3.22854e-01 1.31369e-03 2.41487e+03 2.22486e+02 2.64530e-02 - 1140.00 3.22785e+02 8.14472e-01 3.18634e-01 1.18857e-03 2.25306e+03 2.05846e+02 2.46887e-02 - 1150.00 2.97686e+02 7.51318e-01 3.14445e-01 1.07544e-03 2.09793e+03 1.90103e+02 2.30284e-02 - 1160.00 2.74060e+02 6.91870e-01 3.10296e-01 9.73216e-04 1.94972e+03 1.75255e+02 2.14681e-02 - 1170.00 2.51884e+02 6.36067e-01 3.06191e-01 8.80908e-04 1.80862e+03 1.61290e+02 2.00037e-02 - 1180.00 2.31125e+02 5.83821e-01 3.02136e-01 7.97591e-04 1.67469e+03 1.48193e+02 1.86309e-02 - 1190.00 2.11741e+02 5.35030e-01 2.98135e-01 7.22419e-04 1.54797e+03 1.35941e+02 1.73454e-02 - 1200.00 1.93685e+02 4.89574e-01 2.94191e-01 6.54618e-04 1.42841e+03 1.24507e+02 1.61429e-02 - 1210.00 1.76905e+02 4.47322e-01 2.90309e-01 5.93477e-04 1.31590e+03 1.13863e+02 1.50191e-02 - 1220.00 1.61346e+02 4.08134e-01 2.86488e-01 5.38349e-04 1.21031e+03 1.03976e+02 1.39699e-02 - 1230.00 1.46950e+02 3.71864e-01 2.82733e-01 4.88646e-04 1.11147e+03 9.48123e+01 1.29910e-02 - 1240.00 1.33656e+02 3.38362e-01 2.79043e-01 4.43832e-04 1.01915e+03 8.63363e+01 1.20786e-02 - 1250.00 1.21405e+02 3.07478e-01 2.75419e-01 4.03424e-04 9.33117e+02 7.85121e+01 1.12286e-02 - 1260.00 1.10136e+02 2.79059e-01 2.71858e-01 3.67446e-04 8.53127e+02 7.13035e+01 1.04364e-02 - 1270.00 9.97892e+01 2.52956e-01 2.68359e-01 3.35063e-04 7.78906e+02 6.46742e+01 9.69931e-03 - 1280.00 9.03054e+01 2.29021e-01 2.64926e-01 3.05068e-04 7.10178e+02 5.85886e+01 9.01424e-03 - 1290.00 8.16275e+01 2.07111e-01 2.61559e-01 2.78111e-04 6.46659e+02 5.30115e+01 8.37771e-03 - 1300.00 7.36999e+01 1.87088e-01 2.58257e-01 2.53807e-04 5.88063e+02 4.79091e+01 7.78654e-03 - 1310.00 6.64692e+01 1.68817e-01 2.55021e-01 2.31861e-04 5.34107e+02 4.32483e+01 7.23770e-03 - 1320.00 5.98842e+01 1.52170e-01 2.51848e-01 2.12027e-04 4.84510e+02 3.89974e+01 6.72837e-03 - 1330.00 5.38959e+01 1.37025e-01 2.48738e-01 1.94085e-04 4.38994e+02 3.51263e+01 6.25585e-03 - 1340.00 4.84580e+01 1.23266e-01 2.45691e-01 1.77843e-04 3.97294e+02 3.16061e+01 5.81763e-03 - 1350.00 4.35267e+01 1.10782e-01 2.42705e-01 1.63128e-04 3.59148e+02 2.84094e+01 5.41133e-03 - 1360.00 3.90608e+01 9.94717e-02 2.39779e-01 1.49785e-04 3.24306e+02 2.55105e+01 5.03473e-03 - 1370.00 3.50216e+01 8.92366e-02 2.36913e-01 1.37676e-04 2.92530e+02 2.28850e+01 4.68572e-03 - 1380.00 3.13728e+01 7.99863e-02 2.34104e-01 1.26678e-04 2.63590e+02 2.05102e+01 4.36235e-03 - 1390.00 2.80808e+01 7.16362e-02 2.31351e-01 1.16679e-04 2.37271e+02 1.83648e+01 4.06278e-03 - 1400.00 2.51141e+01 6.41074e-02 2.28655e-01 1.07580e-04 2.13366e+02 1.64290e+01 3.78530e-03 - 1410.00 2.24437e+01 5.73269e-02 2.26012e-01 9.92933e-05 1.91683e+02 1.46843e+01 3.52831e-03 - 1420.00 2.00427e+01 5.12269e-02 2.23422e-01 9.17381e-05 1.72040e+02 1.31137e+01 3.29032e-03 - 1430.00 1.78862e+01 4.57452e-02 2.20883e-01 8.48436e-05 1.54267e+02 1.17014e+01 3.06993e-03 - 1440.00 1.59513e+01 4.08242e-02 2.18396e-01 7.85457e-05 1.38205e+02 1.04327e+01 2.86585e-03 - 1450.00 1.42171e+01 3.64112e-02 2.15957e-01 7.27872e-05 1.23707e+02 9.29435e+00 2.67688e-03 - 1460.00 1.26642e+01 3.24574e-02 2.13566e-01 6.75169e-05 1.10634e+02 8.27389e+00 2.50190e-03 - 1470.00 1.12751e+01 2.89187e-02 2.11222e-01 6.26885e-05 9.88610e+01 7.36004e+00 2.33987e-03 - 1480.00 1.00337e+01 2.57542e-02 2.08924e-01 5.82607e-05 8.82687e+01 6.54246e+00 2.18983e-03 - 1490.00 8.92519e+00 2.29270e-02 2.06670e-01 5.41966e-05 7.87490e+01 5.81168e+00 2.05087e-03 - 1500.00 7.93628e+00 2.04033e-02 2.04459e-01 5.04625e-05 7.02022e+01 5.15910e+00 1.92218e-03 - 1510.00 7.05482e+00 1.81525e-02 2.02291e-01 4.70287e-05 6.25363e+01 4.57686e+00 1.80298e-03 - 1520.00 6.26978e+00 1.61467e-02 2.00164e-01 4.38680e-05 5.56672e+01 4.05784e+00 1.69257e-03 - 1530.00 5.57119e+00 1.43607e-02 1.98077e-01 4.09563e-05 4.95179e+01 3.59557e+00 1.59027e-03 - 1540.00 4.95000e+00 1.27716e-02 1.96029e-01 3.82714e-05 4.40182e+01 3.18417e+00 1.49549e-03 - 1550.00 4.39806e+00 1.13588e-02 1.94019e-01 3.57937e-05 3.91037e+01 2.81835e+00 1.40766e-03 - 1560.00 3.90801e+00 1.01036e-02 1.92046e-01 3.35054e-05 3.47161e+01 2.49331e+00 1.32625e-03 - 1570.00 3.47322e+00 8.98921e-03 1.90110e-01 3.13901e-05 3.08023e+01 2.20473e+00 1.25079e-03 - 1580.00 3.08773e+00 8.00052e-03 1.88208e-01 2.94335e-05 2.73140e+01 1.94871e+00 1.18082e-03 - 1590.00 2.74615e+00 7.12391e-03 1.86341e-01 2.76221e-05 2.42074e+01 1.72174e+00 1.11594e-03 - 1600.00 2.44370e+00 6.34716e-03 1.84508e-01 2.59441e-05 2.14430e+01 1.52067e+00 1.05576e-03 - 1610.00 2.17604e+00 5.65931e-03 1.82707e-01 2.43885e-05 1.89851e+01 1.34266e+00 9.99925e-04 - 1620.00 1.93930e+00 5.05051e-03 1.80938e-01 2.29454e-05 1.68013e+01 1.18518e+00 9.48116e-04 - 1630.00 1.73004e+00 4.51198e-03 1.79201e-01 2.16058e-05 1.48624e+01 1.04594e+00 9.00029e-04 - 1640.00 1.54515e+00 4.03583e-03 1.77493e-01 2.03615e-05 1.31422e+01 9.22914e-01 8.55385e-04 - 1650.00 1.38188e+00 3.61503e-03 1.75815e-01 1.92050e-05 1.16172e+01 8.14278e-01 8.13928e-04 - 1660.00 1.23776e+00 3.24332e-03 1.74166e-01 1.81294e-05 1.02661e+01 7.18405e-01 7.75419e-04 - 1670.00 1.11060e+00 2.91508e-03 1.72546e-01 1.71031e-05 9.06984e+00 6.33844e-01 7.39643e-04 - 1680.00 9.98444e-01 2.62534e-03 1.70952e-01 1.61977e-05 8.01138e+00 5.59300e-01 7.06389e-04 - 1690.00 8.99554e-01 2.36967e-03 1.69385e-01 1.53297e-05 7.07543e+00 4.93623e-01 6.75474e-04 - 1700.00 8.12385e-01 2.14411e-03 1.67845e-01 1.45208e-05 6.24831e+00 4.35787e-01 6.46725e-04 - 1710.00 7.35568e-01 1.94516e-03 1.66329e-01 1.37664e-05 5.51779e+00 3.84880e-01 6.19980e-04 - 1720.00 6.67884e-01 1.76970e-03 1.64839e-01 1.30626e-05 4.87296e+00 3.40092e-01 5.95093e-04 - 1730.00 6.08256e-01 1.61498e-03 1.63373e-01 1.24056e-05 4.30407e+00 3.00706e-01 5.71926e-04 - 1740.00 5.55728e-01 1.47854e-03 1.61931e-01 1.17920e-05 3.80245e+00 2.66083e-01 5.50354e-04 - 1750.00 5.09455e-01 1.35823e-03 1.60511e-01 1.12188e-05 3.36037e+00 2.35660e-01 5.30258e-04 - 1760.00 4.68687e-01 1.25212e-03 1.59115e-01 1.06830e-05 2.97094e+00 2.08936e-01 5.11532e-04 - 1770.00 4.32765e-01 1.15851e-03 1.57740e-01 1.01819e-05 2.62804e+00 1.85469e-01 4.94075e-04 - 1780.00 4.01105e-01 1.07592e-03 1.56388e-01 9.71307e-06 2.32626e+00 1.64868e-01 4.77795e-04 - 1790.00 3.73191e-01 1.00301e-03 1.55056e-01 9.27423e-06 2.06076e+00 1.46787e-01 4.62606e-04 - 1800.00 3.48568e-01 9.38608e-04 1.53745e-01 8.86329e-06 1.82727e+00 1.30922e-01 4.48429e-04 - 1810.00 3.26836e-01 8.81694e-04 1.52454e-01 8.47829e-06 1.62200e+00 1.17002e-01 4.35192e-04 - 1820.00 3.07642e-01 8.31356e-04 1.51183e-01 8.11742e-06 1.44160e+00 1.04791e-01 4.22826e-04 - 1830.00 2.90676e-01 7.86793e-04 1.49931e-01 7.77903e-06 1.28310e+00 9.40795e-02 4.11270e-04 - 1840.00 2.75664e-01 7.47301e-04 1.48698e-01 7.46157e-06 1.14387e+00 8.46836e-02 4.00464e-04 - 1850.00 2.62366e-01 7.12261e-04 1.47483e-01 7.16361e-06 1.02159e+00 7.64412e-02 3.90356e-04 - 1860.00 2.50571e-01 6.81127e-04 1.46286e-01 6.88382e-06 9.14222e-01 6.92098e-02 3.80895e-04 - 1870.00 2.40093e-01 6.53420e-04 1.45107e-01 6.62096e-06 8.19948e-01 6.28640e-02 3.72036e-04 - 1880.00 2.30770e-01 6.28720e-04 1.43946e-01 6.37391e-06 7.37179e-01 5.72940e-02 3.63737e-04 - 1890.00 2.22458e-01 6.06658e-04 1.42801e-01 6.14158e-06 6.64509e-01 5.24030e-02 3.55957e-04 - 1900.00 2.15034e-01 5.86909e-04 1.41673e-01 5.92301e-06 6.00702e-01 4.81063e-02 3.48660e-04 - 1910.00 2.08386e-01 5.69188e-04 1.40560e-01 5.71727e-06 5.44669e-01 4.43296e-02 3.41813e-04 - 1920.00 2.02419e-01 5.53247e-04 1.39464e-01 5.52351e-06 4.95452e-01 4.10077e-02 3.35383e-04 - 1930.00 1.97049e-01 5.38868e-04 1.38383e-01 5.34094e-06 4.52209e-01 3.80834e-02 3.29342e-04 - 1940.00 1.92201e-01 5.25858e-04 1.37318e-01 5.16882e-06 4.14199e-01 3.55068e-02 3.23663e-04 - 1950.00 1.87812e-01 5.14052e-04 1.36267e-01 5.00648e-06 3.80774e-01 3.32341e-02 3.18321e-04 - 1960.00 1.83825e-01 5.03301e-04 1.35231e-01 4.85326e-06 3.51363e-01 3.12270e-02 3.13293e-04 - 1970.00 1.80190e-01 4.93478e-04 1.34209e-01 4.70859e-06 3.25465e-01 2.94519e-02 3.08556e-04 - 1980.00 1.76865e-01 4.84470e-04 1.33201e-01 4.57190e-06 3.02642e-01 2.78795e-02 3.04092e-04 - 1990.00 1.73811e-01 4.76180e-04 1.32207e-01 4.44268e-06 2.82508e-01 2.64843e-02 2.99881e-04 - 2000.00 1.70996e-01 4.68520e-04 1.31226e-01 4.32045e-06 2.64727e-01 2.52440e-02 2.95907e-04 - 2010.00 1.68392e-01 4.61416e-04 1.30259e-01 4.20476e-06 2.49004e-01 2.41388e-02 2.92153e-04 - 2020.00 1.65972e-01 4.54803e-04 1.29304e-01 4.09521e-06 2.35080e-01 2.31519e-02 2.88605e-04 - 2030.00 1.63715e-01 4.48623e-04 1.28362e-01 3.99139e-06 2.22730e-01 2.22683e-02 2.85249e-04 - 2040.00 1.61603e-01 4.42826e-04 1.27432e-01 3.89295e-06 2.11756e-01 2.14751e-02 2.82072e-04 - 2050.00 1.59617e-01 4.37369e-04 1.26515e-01 3.79956e-06 2.01985e-01 2.07609e-02 2.79062e-04 - 2060.00 1.57744e-01 0.00000e+00 1.25609e-01 3.71089e-06 1.93266e-01 2.01159e-02 2.76208e-04 + 530.00 0.00000e+00 5.85428e-04 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 + 540.00 2.00000e+00 7.23527e-03 0.00000e+00 0.00000e+00 1.00000e+00 1.00000e+00 0.00000e+00 + 550.00 3.81570e+00 1.48925e-02 4.38481e-07 4.38546e-07 1.00348e+01 2.09494e+00 2.25571e-03 + 560.00 7.86774e+00 2.91240e-02 2.46741e-03 2.56643e-03 2.24061e+01 4.37781e+00 7.06821e-03 + 570.00 1.46622e+01 5.15114e-02 7.23749e-03 5.02553e-03 4.18262e+01 8.22011e+00 1.32594e-02 + 580.00 2.49442e+01 8.40423e-02 1.43304e-02 7.56723e-03 7.16470e+01 1.40716e+01 2.01365e-02 + 590.00 3.95547e+01 1.28990e-01 2.35811e-02 1.00024e-02 1.15230e+02 2.24381e+01 2.73808e-02 + 600.00 5.92836e+01 1.88109e-01 3.47690e-02 1.22697e-02 1.75963e+02 3.38002e+01 3.48011e-02 + 610.00 8.47925e+01 2.62836e-01 4.76464e-02 1.43355e-02 2.57126e+02 4.85679e+01 4.22585e-02 + 620.00 1.16562e+02 3.53494e-01 6.19492e-02 1.61758e-02 3.61702e+02 6.70496e+01 4.96374e-02 + 630.00 1.54849e+02 4.58394e-01 7.74028e-02 1.77721e-02 4.92175e+02 8.94260e+01 5.68348e-02 + 640.00 1.99661e+02 5.79214e-01 9.37289e-02 1.91123e-02 6.50346e+02 1.15733e+02 6.37563e-02 + 650.00 2.50742e+02 7.15031e-01 1.10652e-01 2.01905e-02 8.37183e+02 1.45850e+02 7.03164e-02 + 660.00 3.07580e+02 8.64314e-01 1.27904e-01 2.10073e-02 1.05271e+03 1.79506e+02 7.64387e-02 + 670.00 3.69423e+02 1.02499e+00 1.45234e-01 2.15693e-02 1.29596e+03 2.16284e+02 8.20578e-02 + 680.00 4.35321e+02 1.19454e+00 1.62408e-01 2.18886e-02 1.56498e+03 2.55644e+02 8.71198e-02 + 690.00 5.04157e+02 1.37009e+00 1.79217e-01 2.19816e-02 1.85688e+03 2.96943e+02 9.15828e-02 + 700.00 5.74706e+02 1.54853e+00 1.95474e-01 2.18680e-02 2.16794e+03 3.39463e+02 9.54178e-02 + 710.00 6.45681e+02 1.72668e+00 2.11024e-01 2.15699e-02 2.49374e+03 3.82446e+02 9.86077e-02 + 720.00 7.15785e+02 1.90135e+00 2.25734e-01 2.11107e-02 2.82933e+03 4.25116e+02 1.01147e-01 + 730.00 7.83757e+02 2.06950e+00 2.39502e-01 2.05143e-02 3.16942e+03 4.66716e+02 1.03042e-01 + 740.00 8.48418e+02 2.22833e+00 2.52250e-01 1.98043e-02 3.50857e+03 5.06525e+02 1.04307e-01 + 750.00 9.08702e+02 2.37527e+00 2.63924e-01 1.90035e-02 3.84134e+03 5.43889e+02 1.04967e-01 + 760.00 9.63684e+02 2.50823e+00 2.74491e-01 1.81332e-02 4.16251e+03 5.78228e+02 1.05051e-01 + 770.00 1.01260e+03 2.62546e+00 2.83941e-01 1.72132e-02 4.46718e+03 6.09058e+02 1.04598e-01 + 780.00 1.05486e+03 2.72563e+00 2.92276e-01 1.62613e-02 4.75092e+03 6.35992e+02 1.03648e-01 + 790.00 1.09003e+03 2.80785e+00 2.99518e-01 1.52932e-02 5.00989e+03 6.58744e+02 1.02245e-01 + 800.00 1.11787e+03 2.87163e+00 3.05698e-01 1.43228e-02 5.24086e+03 6.77133e+02 1.00437e-01 + 810.00 1.13829e+03 2.91686e+00 3.10857e-01 1.33618e-02 5.44130e+03 6.91071e+02 9.82693e-02 + 820.00 1.15134e+03 2.94378e+00 3.15045e-01 1.24199e-02 5.60935e+03 7.00563e+02 9.57902e-02 + 830.00 1.15722e+03 2.95295e+00 3.18317e-01 1.15052e-02 5.74386e+03 7.05695e+02 9.30460e-02 + 840.00 1.15623e+03 2.94522e+00 3.20732e-01 1.06240e-02 5.84432e+03 7.06625e+02 9.00815e-02 + 850.00 1.14877e+03 2.92161e+00 3.22352e-01 9.78106e-03 5.91085e+03 7.03570e+02 8.69393e-02 + 860.00 1.13531e+03 2.88337e+00 3.23239e-01 8.97989e-03 5.94413e+03 6.96795e+02 8.36597e-02 + 870.00 1.11638e+03 2.83181e+00 3.23457e-01 8.22282e-03 5.94531e+03 6.86605e+02 8.02802e-02 + 880.00 1.09255e+03 2.76838e+00 3.23066e-01 7.51114e-03 5.91600e+03 6.73331e+02 7.68350e-02 + 890.00 1.06441e+03 2.69455e+00 3.22126e-01 6.84533e-03 5.85811e+03 6.57319e+02 7.33554e-02 + 900.00 1.03257e+03 2.61178e+00 3.20696e-01 6.22346e-03 5.77386e+03 6.38924e+02 6.98695e-02 + 910.00 9.97596e+02 2.52155e+00 3.18830e-01 5.64994e-03 5.66565e+03 6.18502e+02 6.64019e-02 + 920.00 9.60081e+02 2.42526e+00 3.16581e-01 5.11810e-03 5.53603e+03 5.96399e+02 6.29744e-02 + 930.00 9.20573e+02 2.32427e+00 3.13997e-01 4.62818e-03 5.38760e+03 5.72952e+02 5.96059e-02 + 940.00 8.79591e+02 2.21986e+00 3.11123e-01 4.17830e-03 5.22300e+03 5.48479e+02 5.63122e-02 + 950.00 8.37617e+02 2.11321e+00 3.08002e-01 3.76640e-03 5.04482e+03 5.23279e+02 5.31067e-02 + 960.00 7.95094e+02 2.00540e+00 3.04671e-01 3.39029e-03 4.85560e+03 4.97627e+02 5.00003e-02 + 970.00 7.52424e+02 1.89740e+00 3.01165e-01 3.04773e-03 4.65775e+03 4.71774e+02 4.70016e-02 + 980.00 7.09961e+02 1.79009e+00 2.97517e-01 2.73647e-03 4.45357e+03 4.45946e+02 4.41172e-02 + 990.00 6.68019e+02 1.68421e+00 2.93755e-01 2.45427e-03 4.24517e+03 4.20342e+02 4.13518e-02 + 1000.00 6.26870e+02 1.58043e+00 2.89906e-01 2.19892e-03 4.03453e+03 3.95135e+02 3.87087e-02 + 1010.00 5.86742e+02 1.47931e+00 2.85992e-01 1.96832e-03 3.82342e+03 3.70476e+02 3.61895e-02 + 1020.00 5.47828e+02 1.38130e+00 2.82033e-01 1.76043e-03 3.61345e+03 3.46490e+02 3.37946e-02 + 1030.00 5.10281e+02 1.28677e+00 2.78049e-01 1.57333e-03 3.40603e+03 3.23282e+02 3.15236e-02 + 1040.00 4.74226e+02 1.19603e+00 2.74054e-01 1.40519e-03 3.20238e+03 3.00934e+02 2.93748e-02 + 1050.00 4.39753e+02 1.10930e+00 2.70063e-01 1.25431e-03 3.00358e+03 2.79511e+02 2.73459e-02 + 1060.00 4.06926e+02 1.02672e+00 2.66088e-01 1.11909e-03 2.81051e+03 2.59060e+02 2.54341e-02 + 1070.00 3.75785e+02 9.48386e-01 2.62139e-01 9.98042e-04 2.62389e+03 2.39612e+02 2.36358e-02 + 1080.00 3.46349e+02 8.74343e-01 2.58225e-01 8.89812e-04 2.44433e+03 2.21186e+02 2.19472e-02 + 1090.00 3.18617e+02 8.04583e-01 2.54353e-01 7.93136e-04 2.27225e+03 2.03787e+02 2.03642e-02 + 1100.00 2.92572e+02 7.39061e-01 2.50531e-01 7.06860e-04 2.10799e+03 1.87411e+02 1.88823e-02 + 1110.00 2.68184e+02 6.77698e-01 2.46763e-01 6.29929e-04 1.95177e+03 1.72044e+02 1.74971e-02 + 1120.00 2.45412e+02 6.20389e-01 2.43053e-01 5.61380e-04 1.80368e+03 1.57665e+02 1.62040e-02 + 1130.00 2.24206e+02 5.67007e-01 2.39405e-01 5.00341e-04 1.66377e+03 1.44248e+02 1.49982e-02 + 1140.00 2.04507e+02 5.17406e-01 2.35821e-01 4.46019e-04 1.53198e+03 1.31761e+02 1.38752e-02 + 1150.00 1.86253e+02 4.71427e-01 2.32304e-01 3.97698e-04 1.40820e+03 1.20166e+02 1.28304e-02 + 1160.00 1.69377e+02 4.28904e-01 2.28855e-01 3.54733e-04 1.29227e+03 1.09427e+02 1.18594e-02 + 1170.00 1.53809e+02 3.89663e-01 2.25475e-01 3.16542e-04 1.18395e+03 9.95019e+01 1.09577e-02 + 1180.00 1.39478e+02 3.53525e-01 2.22164e-01 2.82602e-04 1.08302e+03 9.03487e+01 1.01211e-02 + 1190.00 1.26312e+02 3.20312e-01 2.18922e-01 2.52446e-04 9.89185e+02 8.19248e+01 9.34560e-03 + 1200.00 1.14240e+02 2.89845e-01 2.15750e-01 2.25652e-04 9.02145e+02 7.41873e+01 8.62722e-03 + 1210.00 1.03191e+02 2.61948e-01 2.12646e-01 2.01848e-04 8.21584e+02 6.70937e+01 7.96222e-03 + 1220.00 9.30964e+01 2.36449e-01 2.09611e-01 1.80696e-04 7.47176e+02 6.06020e+01 7.34704e-03 + 1230.00 8.38898e+01 2.13181e-01 2.06643e-01 1.61899e-04 6.78587e+02 5.46717e+01 6.77829e-03 + 1240.00 7.55069e+01 1.91985e-01 2.03742e-01 1.45190e-04 6.15484e+02 4.92631e+01 6.25275e-03 + 1250.00 6.78859e+01 1.72705e-01 2.00906e-01 1.30335e-04 5.57535e+02 4.43383e+01 5.76739e-03 + 1260.00 6.09683e+01 1.55195e-01 1.98130e-01 1.17262e-04 5.04414e+02 3.98611e+01 5.31903e-03 + 1270.00 5.46984e+01 1.39317e-01 1.95414e-01 1.05646e-04 4.55802e+02 3.57970e+01 4.90530e-03 + 1280.00 4.90237e+01 1.24937e-01 1.92757e-01 9.50727e-05 4.11389e+02 3.21130e+01 4.52379e-03 + 1290.00 4.38947e+01 1.11933e-01 1.90160e-01 8.56932e-05 3.70878e+02 2.87785e+01 4.17206e-03 + 1300.00 3.92651e+01 1.00189e-01 1.87622e-01 7.73455e-05 3.33983e+02 2.57642e+01 3.84789e-03 + 1310.00 3.50918e+01 8.95957e-02 1.85139e-01 6.99040e-05 3.00431e+02 2.30432e+01 3.54919e-03 + 1320.00 3.13345e+01 8.00532e-02 1.82712e-01 6.32628e-05 2.69963e+02 2.05899e+01 3.27403e-03 + 1330.00 2.79558e+01 7.14672e-02 1.80339e-01 5.73299e-05 2.42335e+02 1.83808e+01 3.02062e-03 + 1340.00 2.49210e+01 6.37509e-02 1.78018e-01 5.20245e-05 2.17316e+02 1.63939e+01 2.78728e-03 + 1350.00 2.21984e+01 5.68239e-02 1.75748e-01 4.72756e-05 1.94688e+02 1.46089e+01 2.57247e-03 + 1360.00 1.97584e+01 5.06124e-02 1.73528e-01 4.30204e-05 1.74250e+02 1.30072e+01 2.37474e-03 + 1370.00 1.75741e+01 4.50483e-02 1.71356e-01 3.92036e-05 1.55812e+02 1.15715e+01 2.19276e-03 + 1380.00 1.56207e+01 4.00694e-02 1.69230e-01 3.57762e-05 1.39199e+02 1.02860e+01 2.02529e-03 + 1390.00 1.38756e+01 3.56186e-02 1.67151e-01 3.26950e-05 1.24247e+02 9.13605e+00 1.87120e-03 + 1400.00 1.23181e+01 3.16437e-02 1.65116e-01 2.99219e-05 1.10806e+02 8.10852e+00 1.72942e-03 + 1410.00 1.09293e+01 2.80972e-02 1.63124e-01 2.74231e-05 9.87358e+01 7.19123e+00 1.59898e-03 + 1420.00 9.69209e+00 2.49358e-02 1.61173e-01 2.51687e-05 8.79087e+01 6.37315e+00 1.47897e-03 + 1430.00 8.59095e+00 2.21202e-02 1.59264e-01 2.31324e-05 7.82066e+01 5.64421e+00 1.36856e-03 + 1440.00 7.61175e+00 1.96149e-02 1.57394e-01 2.12909e-05 6.95215e+01 4.99530e+00 1.26699e-03 + 1450.00 6.74172e+00 1.73874e-02 1.55562e-01 1.96233e-05 6.17545e+01 4.41814e+00 1.17354e-03 + 1460.00 5.96934e+00 1.54087e-02 1.53768e-01 1.81115e-05 5.48152e+01 3.90523e+00 1.08757e-03 + 1470.00 5.28418e+00 1.36522e-02 1.52010e-01 1.67391e-05 4.86213e+01 3.44980e+00 1.00846e-03 + 1480.00 4.67687e+00 1.20943e-02 1.50287e-01 1.54917e-05 4.30977e+01 3.04574e+00 9.35681e-04 + 1490.00 4.13896e+00 1.07135e-02 1.48599e-01 1.43566e-05 3.81763e+01 2.68754e+00 8.68707e-04 + 1500.00 3.66287e+00 9.49054e-03 1.46944e-01 1.33223e-05 3.37953e+01 2.37024e+00 8.07074e-04 + 1510.00 3.24178e+00 8.40815e-03 1.45321e-01 1.23789e-05 2.98986e+01 2.08938e+00 7.50350e-04 + 1520.00 2.86960e+00 7.45080e-03 1.43730e-01 1.15172e-05 2.64355e+01 1.84096e+00 6.98138e-04 + 1530.00 2.54085e+00 6.60460e-03 1.42170e-01 1.07293e-05 2.33603e+01 1.62139e+00 6.50074e-04 + 1540.00 2.25066e+00 5.85710e-03 1.40639e-01 1.00080e-05 2.06317e+01 1.42745e+00 6.05822e-04 + 1550.00 1.99465e+00 5.19718e-03 1.39137e-01 9.34691e-06 1.82125e+01 1.25627e+00 5.65075e-04 + 1560.00 1.76892e+00 4.61490e-03 1.37664e-01 8.74037e-06 1.60693e+01 1.10527e+00 5.27549e-04 + 1570.00 1.57000e+00 4.10140e-03 1.36218e-01 8.18326e-06 1.41718e+01 9.72171e-01 4.92983e-04 + 1580.00 1.39481e+00 3.64879e-03 1.34798e-01 7.67099e-06 1.24932e+01 8.54913e-01 4.61139e-04 + 1590.00 1.24058e+00 3.25004e-03 1.33405e-01 7.19948e-06 1.10092e+01 7.51676e-01 4.31797e-04 + 1600.00 1.10487e+00 2.89890e-03 1.32037e-01 6.76504e-06 9.69811e+00 6.60838e-01 4.04754e-04 + 1610.00 9.85502e-01 2.58981e-03 1.30694e-01 6.36435e-06 8.54061e+00 5.80955e-01 3.79826e-04 + 1620.00 8.80554e-01 2.31783e-03 1.29374e-01 5.99444e-06 7.51933e+00 5.10743e-01 3.56842e-04 + 1630.00 7.88315e-01 2.07858e-03 1.28079e-01 5.65261e-06 6.61881e+00 4.49065e-01 3.35645e-04 + 1640.00 7.07268e-01 1.86819e-03 1.26806e-01 5.33645e-06 5.82525e+00 3.94912e-01 3.16092e-04 + 1650.00 6.36076e-01 1.68321e-03 1.25555e-01 5.04376e-06 5.12635e+00 3.47387e-01 2.98051e-04 + 1660.00 5.73552e-01 1.52061e-03 1.24326e-01 4.77255e-06 4.51117e+00 3.05700e-01 2.81401e-04 + 1670.00 5.18650e-01 1.37770e-03 1.23118e-01 4.51430e-06 3.96997e+00 2.69148e-01 2.66030e-04 + 1680.00 4.70446e-01 1.25210e-03 1.21931e-01 4.28779e-06 3.49412e+00 2.37114e-01 2.51835e-04 + 1690.00 4.28124e-01 1.14171e-03 1.20764e-01 4.07094e-06 3.07594e+00 2.09051e-01 2.38723e-04 + 1700.00 3.90965e-01 1.04469e-03 1.19616e-01 3.86932e-06 2.70861e+00 1.84474e-01 2.26607e-04 + 1710.00 3.58335e-01 9.59401e-04 1.18487e-01 3.68171e-06 2.38611e+00 1.62958e-01 2.15408e-04 + 1720.00 3.29677e-01 8.84409e-04 1.17377e-01 3.50700e-06 2.10309e+00 1.44128e-01 2.05053e-04 + 1730.00 3.04500e-01 8.18446e-04 1.16285e-01 3.34418e-06 1.85482e+00 1.27653e-01 1.95475e-04 + 1740.00 2.82373e-01 7.60401e-04 1.15211e-01 3.19232e-06 1.63712e+00 1.13242e-01 1.86612e-04 + 1750.00 2.62916e-01 7.09294e-04 1.14155e-01 3.05057e-06 1.44629e+00 1.00639e-01 1.78408e-04 + 1760.00 2.45797e-01 6.64265e-04 1.13115e-01 2.91817e-06 1.27908e+00 8.96182e-02 1.70811e-04 + 1770.00 2.30724e-01 6.24560e-04 1.12092e-01 2.79438e-06 1.13261e+00 7.99830e-02 1.63773e-04 + 1780.00 2.17439e-01 5.89514e-04 1.11085e-01 2.67858e-06 1.00434e+00 7.15593e-02 1.57251e-04 + 1790.00 2.05719e-01 5.58545e-04 1.10094e-01 2.57016e-06 8.92035e-01 6.41948e-02 1.51202e-04 + 1800.00 1.95366e-01 5.31144e-04 1.09118e-01 2.46858e-06 7.93727e-01 5.77558e-02 1.45591e-04 + 1810.00 1.86208e-01 5.06864e-04 1.08157e-01 2.37332e-06 7.07685e-01 5.21255e-02 1.40384e-04 + 1820.00 1.78094e-01 4.85312e-04 1.07211e-01 2.28394e-06 6.32386e-01 4.72011e-02 1.35548e-04 + 1830.00 1.70892e-01 4.66147e-04 1.06280e-01 2.19999e-06 5.66493e-01 4.28930e-02 1.31056e-04 + 1840.00 1.64488e-01 4.49069e-04 1.05363e-01 2.12111e-06 5.08829e-01 3.91226e-02 1.26880e-04 + 1850.00 1.58779e-01 4.33815e-04 1.04459e-01 2.04691e-06 4.58364e-01 3.58211e-02 1.22996e-04 + 1860.00 1.53678e-01 4.20156e-04 1.03569e-01 1.97707e-06 4.14192e-01 3.29287e-02 1.19381e-04 + 1870.00 1.49108e-01 4.07891e-04 1.02692e-01 1.91129e-06 3.75521e-01 3.03928e-02 1.16015e-04 + 1880.00 1.45002e-01 3.96847e-04 1.01828e-01 1.84927e-06 3.41655e-01 2.81676e-02 1.12879e-04 + 1890.00 1.41301e-01 3.86870e-04 1.00976e-01 1.79077e-06 3.11984e-01 2.62131e-02 1.09955e-04 + 1900.00 1.37954e-01 3.77827e-04 1.00137e-01 1.73553e-06 2.85978e-01 2.44944e-02 1.07226e-04 + 1910.00 1.34917e-01 3.69600e-04 9.93102e-02 1.68334e-06 2.63168e-01 2.29812e-02 1.04679e-04 + 1920.00 1.32151e-01 3.62090e-04 9.84951e-02 1.63399e-06 2.43147e-01 2.16468e-02 1.02300e-04 + 1930.00 1.29621e-01 3.55208e-04 9.76915e-02 1.58728e-06 2.25560e-01 2.04683e-02 1.00075e-04 + 1940.00 1.27300e-01 3.48876e-04 9.68993e-02 1.54304e-06 2.10094e-01 1.94254e-02 9.79931e-05 + 1950.00 1.25160e-01 3.43027e-04 9.61182e-02 1.50111e-06 1.96479e-01 1.85007e-02 9.60438e-05 + 1960.00 1.23180e-01 3.37603e-04 9.53480e-02 1.46134e-06 1.84475e-01 1.76789e-02 9.42171e-05 + 1970.00 1.21340e-01 3.32552e-04 9.45885e-02 1.42358e-06 1.73878e-01 1.69467e-02 9.25038e-05 + 1980.00 1.19623e-01 3.27831e-04 9.38394e-02 1.38771e-06 1.64506e-01 1.62925e-02 9.08956e-05 + 1990.00 1.18015e-01 3.23400e-04 9.31006e-02 1.35360e-06 1.56201e-01 1.57064e-02 8.93848e-05 + 2000.00 1.16502e-01 3.19225e-04 9.23718e-02 1.32114e-06 1.48827e-01 1.51796e-02 8.79642e-05 + 2010.00 1.15074e-01 3.15278e-04 9.16528e-02 1.29022e-06 1.42265e-01 1.47044e-02 8.66273e-05 + 2020.00 1.13721e-01 3.11533e-04 9.09435e-02 1.26076e-06 1.36409e-01 1.42744e-02 8.53680e-05 + 2030.00 1.12434e-01 3.07967e-04 9.02437e-02 1.23266e-06 1.31169e-01 1.38838e-02 8.41806e-05 + 2040.00 1.11206e-01 3.04561e-04 8.95531e-02 1.20583e-06 1.26468e-01 1.35276e-02 8.30601e-05 + 2050.00 1.10031e-01 3.01297e-04 8.88716e-02 1.18021e-06 1.22235e-01 1.32015e-02 8.20016e-05 + 2060.00 1.08903e-01 0.00000e+00 8.81990e-02 1.15571e-06 1.18412e-01 1.29018e-02 8.10008e-05 diff --git a/tests/modules/testCONEX.cpp b/tests/modules/testCONEX.cpp index 05e76b8b7c4c601268b24de4f5fbe30040781915..f86dd7b2d642c58278995823b9a250d27b36926c 100644 --- a/tests/modules/testCONEX.cpp +++ b/tests/modules/testCONEX.cpp @@ -29,6 +29,16 @@ #include <catch2/catch.hpp> +/* + NOTE, WARNING, ATTENTION + + The epos/Random.hpp implements the hook of epos to the C8 random + number generator. It has to occur excatly ONCE per linked + executable. If you include the header below in multiple "tests" and + link them togehter, it will fail. + */ +#include <corsika/modules/conex/Random.hpp> + using namespace corsika; const std::string refDataDir = std::string(REFDATADIR); // from cmake @@ -40,8 +50,9 @@ TEST_CASE("CONEXSourceCut") { logging::set_level(logging::level::info); - RNGManager<>::getInstance().registerRandomStream("cascade"); + RNGManager<>::getInstance().registerRandomStream("conex"); RNGManager<>::getInstance().registerRandomStream("sibyll"); + RNGManager<>::getInstance().registerRandomStream("epos"); feenableexcept(FE_INVALID);