GamYields.cpp
Go to the documentation of this file.
74 (*Dep::TH_ProcessCatalog).getProcess(DMid, DMbarid) : (*Dep::TH_ProcessCatalog).getProcess(DMid); 171 ->set_epsabs(0)->set_limit(100)->set_epsrel(1e-3)->set_use_log_fallback(true)->set("Ep", daFunk::var("E")); 173 // Note: integration over lnE causes problems in the WIMP example (3) as the singularity is dropped. 174 // return (integrand*E)->set("E", exp(lnE))->gsl_integration("lnE", log(Ep*gamma-halfBox_bound), log(Ep*gamma+halfBox_bound)) 306 std::vector<std::string> test1 = initVector<std::string> ("h0_1_test","h0_2_test","h0_2_test","h0_1_test","WH_test", "A0_test", "h0_1_test", "W+"); 307 std::vector<std::string> test2 = initVector<std::string> ("A0_test", "A0_test", "Z0_test", "Z0_test", "WH_test", "Z0_test", "h0_2_test", "W-"); 359 DarkBit_warning().raise(LOCAL_INFO, "Second and/or third primary gamma rays in three-body final states ignored."); 433 DarkBit_error().raise(LOCAL_INFO, "Annihilation process not found. For decaying DM please use GA_DecayYield_General."); 436 // DarkBit_error().raise(LOCAL_INFO, "Process is not an annihilation. Please use GA_DecayYield_General."); 485 DarkBit_error().raise(LOCAL_INFO, "Decay process not found. For annihilating DM please use GA_AnnYield_General."); 489 // DarkBit_error().raise(LOCAL_INFO, "Process is not a decay. Please use GA_AnnYield_General."); 499 daFunk::Funk Yield = getYield(decayProc, Ecm, mass, *Dep::TH_ProcessCatalog, *Dep::SimYieldTable, 524 mDM_min = 0.0; // in this case, the minimally allowed dark matter mass will later be set to be the mass of the final state particle, 536 daFunk::Funk dNdE = daFunk::func_fromThreadsafe(BEreq::dshayield.pointer(), daFunk::var("mwimp"), 541 // The following routine adds an annihilation channel, for which the yields are extrapolated below Ecm_ToScale 543 auto add_channel_with_scaling = [&](int ch, str P1, str P2, str FINAL, double EcmMin, double EcmMax, double Ecm_ToScale) 547 daFunk::Funk dNdE = ScalingFactor * daFunk::func_fromThreadsafe(BEreq::dshayield.pointer(), daFunk::var("mwimp"), 575 dNdE = daFunk::func_fromThreadsafe(BEreq::dshayield.pointer(), daFunk::var("Ecm"), daFunk::var("E"), 12, yieldk, flag); 577 dNdE = daFunk::func_fromThreadsafe(BEreq::dshayield.pointer(), daFunk::var("Ecm"), daFunk::var("E"), 13, yieldk, flag); 580 dNdE = daFunk::func_fromThreadsafe(BEreq::dshayield.pointer(), daFunk::var("Ecm"), daFunk::var("E"), 15, yieldk, flag); 583 dNdE = daFunk::func_fromThreadsafe(BEreq::dshayield.pointer(), daFunk::var("Ecm"), daFunk::var("E"), 17, yieldk, flag); 586 dNdE = daFunk::func_fromThreadsafe(BEreq::dshayield.pointer(), daFunk::var("Ecm"), daFunk::var("E"), 19, yieldk, flag); 587 result.addChannel(dNdE/2, str_flav_to_mass("tau+"), "gamma", std::max(mDM_min, 1.7841), mDM_max); 588 result.addChannel(dNdE/2, str_flav_to_mass("tau-"), "gamma", std::max(mDM_min, 1.7841), mDM_max); 593 dNdE = ScalingFactor_top * daFunk::func_fromThreadsafe(BEreq::dshayield.pointer(), Ecm_ToUse_top, 598 // add channels with "mixed final states", i.e. final state particles with (potentially) different masses 600 auto add_channel_mixedmasses = [&](int ch1, int ch2, str P1, str P2, str FINAL, double m1, double m2, double EcmMin, double EcmMax) 602 daFunk::Funk dNdE_1 = daFunk::func_fromThreadsafe(BEreq::dshayield.pointer(), daFunk::var("E1"), 604 daFunk::Funk dNdE_2 = daFunk::func_fromThreadsafe(BEreq::dshayield.pointer(), daFunk::var("E2"), 606 result.addChannel(0.5*(dNdE_1 + dNdE_2), str_flav_to_mass(P1), str_flav_to_mass(P2), FINAL, EcmMin, EcmMax); 610 // - The numerical values for EcmMin and EcmMax are obtained from applying the corresponding two-body kinematics 611 // to the minimally/maximally allowed center-of-mass energies. Hence, EcmMin depends on the flag allow_yield_extrapolation. 614 add_channel_mixedmasses(22, 22, "u", "dbar", "gamma", 0.0, 0.0, (allow_yield_extrapolation ? 2*1.35 : 20.0), 2*mDM_max); 615 add_channel_mixedmasses(22, 22, "d", "ubar", "gamma", 0.0, 0.0, (allow_yield_extrapolation ? 2*1.35 : 20.0), 2*mDM_max); 616 add_channel_mixedmasses(22, 22, "u", "sbar", "gamma", 0.0, 0.0, (allow_yield_extrapolation ? 2*1.35 : 20.0), 2*mDM_max); 617 add_channel_mixedmasses(22, 22, "s", "ubar", "gamma", 0.0, 0.0, (allow_yield_extrapolation ? 2*1.35 : 20.0), 2*mDM_max); 618 add_channel_mixedmasses(22, 25, "u", "bbar", "gamma", 0.0, 5.0, (allow_yield_extrapolation ? 6.530 : 21.181), 2*mDM_max); 619 add_channel_mixedmasses(25, 22, "b", "ubar", "gamma", 5.0, 0.0, (allow_yield_extrapolation ? 6.530 : 21.181), 2*mDM_max); 621 add_channel_mixedmasses(22, 22, "c", "dbar", "gamma", 1.35, 0.0, (allow_yield_extrapolation ? 3.260 : 20.091), 2*mDM_max); 622 add_channel_mixedmasses(22, 22, "d", "cbar", "gamma", 0.0, 1.35, (allow_yield_extrapolation ? 3.260 : 20.091), 2*mDM_max); 623 add_channel_mixedmasses(22, 22, "c", "sbar", "gamma", 1.35, 0.0, (allow_yield_extrapolation ? 3.260 : 20.091), 2*mDM_max); 624 add_channel_mixedmasses(22, 22, "s", "cbar", "gamma", 0.0, 1.35, (allow_yield_extrapolation ? 3.260 : 20.091), 2*mDM_max); 625 add_channel_mixedmasses(22, 25, "c", "bbar", "gamma", 1.35, 5.0, (allow_yield_extrapolation ? 6.35 : 21.099), 2*mDM_max); 626 add_channel_mixedmasses(25, 22, "b", "cbar", "gamma", 5.0, 1.35, (allow_yield_extrapolation ? 6.35 : 21.099), 2*mDM_max); 628 add_channel_mixedmasses(24, 22, "t", "dbar", "gamma", 175.0, 0.0, (allow_yield_extrapolation ? 176.355 : 185.285), 2*mDM_max); 629 add_channel_mixedmasses(22, 24, "d", "tbar", "gamma", 0.0, 175.0, (allow_yield_extrapolation ? 176.355 : 185.285), 2*mDM_max); 630 add_channel_mixedmasses(24, 22, "t", "sbar", "gamma", 175.0, 0.0, (allow_yield_extrapolation ? 176.355 : 185.285), 2*mDM_max); 631 add_channel_mixedmasses(22, 24, "s", "tbar", "gamma", 0.0, 175.0, (allow_yield_extrapolation ? 176.355 : 185.285), 2*mDM_max); 632 add_channel_mixedmasses(24, 25, "t", "bbar", "gamma", 175.0, 5.0, (allow_yield_extrapolation ? 180.0 : 185.214), 2*mDM_max); 633 add_channel_mixedmasses(25, 24, "b", "tbar", "gamma", 5.0, 175.0, (allow_yield_extrapolation ? 180.0 : 185.214), 2*mDM_max); 659 mDM_min = 0.0; // in this case, the minimally allowed dark matter mass will later be set to be the mass of the final state particle, 671 daFunk::Funk dNdE = daFunk::func_fromThreadsafe(BEreq::dsanyield_sim.pointer(), daFunk::var("mwimp"), 676 // The following routine adds an annihilation channel, for which the yields are extrapolated below Ecm_ToScale 678 auto add_channel_with_scaling = [&](int pdg, str P1, str P2, str FINAL, double EcmMin, double EcmMax, double Ecm_ToScale) 682 daFunk::Funk dNdE = ScalingFactor * daFunk::func_fromThreadsafe(BEreq::dsanyield_sim.pointer(), daFunk::var("mwimp"), 710 dNdE = daFunk::func_fromThreadsafe(BEreq::dsanyield_sim.pointer(), daFunk::var("Ecm"), daFunk::var("E"), 23, hel,yieldpdg, diff,flag); 712 dNdE = daFunk::func_fromThreadsafe(BEreq::dsanyield_sim.pointer(), daFunk::var("Ecm"), daFunk::var("E"), 24, hel,yieldpdg, diff, flag); 715 dNdE = daFunk::func_fromThreadsafe(BEreq::dsanyield_sim.pointer(), daFunk::var("Ecm"), daFunk::var("E"), 11, hel, yieldpdg, diff, flag); 718 dNdE = daFunk::func_fromThreadsafe(BEreq::dsanyield_sim.pointer(), daFunk::var("Ecm"), daFunk::var("E"), 13, hel, yieldpdg, diff, flag); 721 dNdE = daFunk::func_fromThreadsafe(BEreq::dsanyield_sim.pointer(), daFunk::var("Ecm"), daFunk::var("E"), 15, hel, yieldpdg, diff, flag); 722 result.addChannel(dNdE/2, str_flav_to_mass("tau+"), "gamma", std::max(mDM_min, 1.7841), mDM_max); 723 result.addChannel(dNdE/2, str_flav_to_mass("tau-"), "gamma", std::max(mDM_min, 1.7841), mDM_max); 728 dNdE = ScalingFactor_top * daFunk::func_fromThreadsafe(BEreq::dsanyield_sim.pointer(), Ecm_ToUse_top, 733 // Add channels with "mixed final states", i.e. final state particles with (potentially) different masses 735 auto add_channel_mixedmasses = [&](int pdg1, int pdg2, str P1, str P2, str FINAL, double m1, double m2, double EcmMin, double EcmMax) 737 daFunk::Funk dNdE_1 = daFunk::func_fromThreadsafe(BEreq::dsanyield_sim.pointer(), daFunk::var("E1"), 739 daFunk::Funk dNdE_2 = daFunk::func_fromThreadsafe(BEreq::dsanyield_sim.pointer(), daFunk::var("E2"), 741 result.addChannel(0.5*(dNdE_1 + dNdE_2), str_flav_to_mass(P1), str_flav_to_mass(P2), FINAL, EcmMin, EcmMax); 744 // - The numerical values for EcmMin and EcmMax are obtained from applying the corresponding two-body kinematics 745 // to the minimally/maximally allowed center-of-mass energies. Hence, EcmMin depends on the flag allow_yield_extrapolation. 747 add_channel_mixedmasses(2, -1, "u", "dbar", "gamma", 0.0, 0.0, (allow_yield_extrapolation ? 2*1.35 : 20.0), 2*mDM_max); 748 add_channel_mixedmasses(1, -2, "d", "ubar", "gamma", 0.0, 0.0, (allow_yield_extrapolation ? 2*1.35 : 20.0), 2*mDM_max); 749 add_channel_mixedmasses(2, -3, "u", "sbar", "gamma", 0.0, 0.0, (allow_yield_extrapolation ? 2*1.35 : 20.0), 2*mDM_max); 750 add_channel_mixedmasses(3, -2, "s", "ubar", "gamma", 0.0, 0.0, (allow_yield_extrapolation ? 2*1.35 : 20.0), 2*mDM_max); 751 add_channel_mixedmasses(2, -5, "u", "bbar", "gamma", 0.0, 5.0, (allow_yield_extrapolation ? 6.530 : 21.181), 2*mDM_max); 752 add_channel_mixedmasses(5, -2, "b", "ubar", "gamma", 5.0, 0.0, (allow_yield_extrapolation ? 6.530 : 21.181), 2*mDM_max); 754 add_channel_mixedmasses(4, -1, "c", "dbar", "gamma", 1.35, 0.0, (allow_yield_extrapolation ? 3.260 : 20.091), 2*mDM_max); 755 add_channel_mixedmasses(1, -4, "d", "cbar", "gamma", 0.0, 1.35, (allow_yield_extrapolation ? 3.260 : 20.091), 2*mDM_max); 756 add_channel_mixedmasses(4, -3, "c", "sbar", "gamma", 1.35, 0.0, (allow_yield_extrapolation ? 3.260 : 20.091), 2*mDM_max); 757 add_channel_mixedmasses(3, -4, "s", "cbar", "gamma", 0.0, 1.35, (allow_yield_extrapolation ? 3.260 : 20.091), 2*mDM_max); 758 add_channel_mixedmasses(4, -5, "c", "bbar", "gamma", 1.35, 5.0, (allow_yield_extrapolation ? 6.35 : 21.099), 2*mDM_max); 759 add_channel_mixedmasses(5, -4, "b", "cbar", "gamma", 5.0, 1.35, (allow_yield_extrapolation ? 6.35 : 21.099), 2*mDM_max); 761 add_channel_mixedmasses(6, -1, "t", "dbar", "gamma", 175.0, 0.0, (allow_yield_extrapolation ? 176.355 : 185.285), 2*mDM_max); 762 add_channel_mixedmasses(1, -6, "d", "tbar", "gamma", 0.0, 175.0, (allow_yield_extrapolation ? 176.355 : 185.285), 2*mDM_max); 763 add_channel_mixedmasses(6, -3, "t", "sbar", "gamma", 175.0, 0.0, (allow_yield_extrapolation ? 176.355 : 185.285), 2*mDM_max); 764 add_channel_mixedmasses(3, -6, "s", "tbar", "gamma", 0.0, 175.0, (allow_yield_extrapolation ? 176.355 : 185.285), 2*mDM_max); 765 add_channel_mixedmasses(6, -5, "t", "bbar", "gamma", 175.0, 5.0, (allow_yield_extrapolation ? 180.0 : 185.214), 2*mDM_max); 766 add_channel_mixedmasses(5, -6, "b", "tbar", "gamma", 5.0, 175.0, (allow_yield_extrapolation ? 180.0 : 185.214), 2*mDM_max); 795 daFunk::Funk dNdE = daFunk::func_fromThreadsafe(BEreq::dNdE.pointer(), daFunk::var("Ecm"), daFunk::var("E"), inP, outN)/daFunk::var("E"); 796 result.addChannel(dNdE, str_flav_to_mass(P1), str_flav_to_mass(P2), FINAL, EcmMin, EcmMax); // specifies also center of mass energy range 799 // The following routine adds an annihilation channel, for which the yields are extrapolated below Ecm_ToScale 801 auto add_channel_with_scaling = [&](int inP, str P1, str P2, str FINAL, double EcmMin, double EcmMax, double Ecm_ToScale) 805 daFunk::Funk dNdE = ScalingFactor * daFunk::func_fromThreadsafe(BEreq::dNdE.pointer(), Ecm_ToUse, 829 dNdE = (daFunk::func_fromThreadsafe(BEreq::dNdE.pointer(), daFunk::var("_Ecm"), daFunk::var("E"), 8, outN) 833 dNdE = (daFunk::func_fromThreadsafe(BEreq::dNdE.pointer(), daFunk::var("_Ecm"), daFunk::var("E"), 9, outN) 837 dNdE = (daFunk::func_fromThreadsafe(BEreq::dNdE.pointer(), daFunk::var("_Ecm"), daFunk::var("E"), 10, outN) 840 dNdE = (daFunk::func_fromThreadsafe(BEreq::dNdE.pointer(), daFunk::var("_Ecm"), daFunk::var("E"), 13, outN) 845 // Add single particle lookup for t tbar to prevent them from being tagged as missing final states for cascades. 849 dNdE = ScalingFactor_top * (daFunk::func_fromThreadsafe(BEreq::dNdE.pointer(), daFunk::var("_Ecm"), ScalingFactor_top * daFunk::var("E"), 6, outN) 854 // Add channels with "mixed final states", i.e. final state particles with (potentially) different masses 856 auto add_channel_mixedmasses = [&](int inP1, int inP2, str P1, str P2, str FINAL, double m1, double m2, double EcmMin, double EcmMax) 862 result.addChannel(0.5*(dNdE_1 + dNdE_2), str_flav_to_mass(P1), str_flav_to_mass(P2), FINAL, EcmMin, EcmMax); 865 // - The numerical values for EcmMin and EcmMax are obtained from applying the corresponding two-body kinematics
error & DarkBit_error() void GA_missingFinalStates(std::vector< std::string > &result) Identification of final states that are not yet tabulated. Definition: GamYields.cpp:61 TH_ParticleProperty getParticleProperty(str) const Retrieve properties of a given particle involved in one or more processes in this catalog... Definition: ProcessCatalog.cpp:161 template double gamma3bdy_limits< 0 >(double, double, double, double) void SimYieldTable_DS5(SimYieldTable &result) SimYieldTable based on DarkSUSY5 tabulated results. (DS6 below) Definition: GamYields.cpp:507 Simple reader for ASCII tables. void SimYieldTable_DarkSUSY(SimYieldTable &result) SimYieldTable based on DarkSUSY6 tabulated results. Definition: GamYields.cpp:640 void SimYieldTable_MicrOmegas(SimYieldTable &result) SimYieldTable based on MicrOmegas tabulated results. Definition: GamYields.cpp:773 void addChannel(daFunk::Funk dNdE, std::string p1, std::string p2, std::string finalState, double Ecm_min, double Ecm_max) Definition: DarkBit_types.cpp:91 void cascadeMC_gammaSpectra(std::map< std::string, daFunk::Funk > &spectra) Function requesting and returning gamma ray spectra from cascade decays. Definition: Cascades.cpp:687 bool hasChannel(std::string p1, std::string p2, std::string finalState) const Definition: DarkBit_types.cpp:106 bool isSelfConj Does the process contain self-conjugate DM? (accounting for correct factors of 1/2 in annihilation sp... Definition: ProcessCatalog.hpp:150 std::map< str, daFunk::Funk > stringFunkMap Definition: SimpleHist.hpp:101 Definition: log_tags.hpp:35 Funk func_fromThreadsafe(double(*f)(funcargs...), Args... args) Definition: daFunk.hpp:773 daFunk::Funk boost_dNdE(daFunk::Funk dNdE, double gamma, double mass) Boosts an energy spectrum of isotropic particles into another frame (and isotropizes again)... Definition: GamYields.cpp:154 void GA_AnnYield_General(daFunk::Funk &result) General routine to derive annihilation yield. Definition: GamYields.cpp:420 const TH_Channel * find(std::vector< str >) const Check for given channel. Return a pointer to it if found, NULL if not. Definition: ProcessCatalog.cpp:123 A container holding all annihilation and decay initial states relevant for DarkBit. Definition: ProcessCatalog.hpp:163 std::vector< double > logspace(double x0, double x1, unsigned int n) Definition: daFunk.hpp:186 template double gamma3bdy_limits< 1 >(double, double, double, double) Header file that includes all GAMBIT headers required for a module source file. void GA_DecayYield_General(daFunk::Funk &result) General routine to derive yield from decaying DM. Definition: GamYields.cpp:473 daFunk::Funk getYield(TH_Process process, double Ecm, double mass, TH_ProcessCatalog catalog, SimYieldTable table, double line_width, stringFunkMap cascadeMC_gammaSpectra) Helper function returning yield from a given DM process. Definition: GamYields.cpp:182 double gamma3bdy_limits(double Eg, double M_DM, double m1, double m2) Calculate kinematical limits for three-body final states. Definition: DarkBit_utils.cpp:41 Rollcall header for module DarkBit. warning & DarkBit_warning() Channel container Object containing tabularized yields for particle decay and two-body final states... Definition: DarkBit_types.hpp:155 std::string str_flav_to_mass(std::string flav) Definition: DarkBit_utils.cpp:72 void SimYieldTable_PPPC(SimYieldTable &) SimYieldTable based on PPPC4DMID Cirelli et al. 2010. Definition: GamYields.cpp:920 double E(const double x, const double y) Definition: flav_loop_functions.hpp:280 Utility functions for DarkBit. |