From 0ff66f926b936b396f8550a13c03f157154573d7 Mon Sep 17 00:00:00 2001 From: jberger7 <31707684+jberger7@users.noreply.github.com> Date: Tue, 6 Jan 2026 16:21:13 -0500 Subject: [PATCH 1/7] Update dissonant_higgs.fcl Add a parameter to determine whether new form factor is used --- sbncode/EventGenerator/MeVPrtl/config/Higgs/dissonant_higgs.fcl | 1 + 1 file changed, 1 insertion(+) diff --git a/sbncode/EventGenerator/MeVPrtl/config/Higgs/dissonant_higgs.fcl b/sbncode/EventGenerator/MeVPrtl/config/Higgs/dissonant_higgs.fcl index eb91ecdd0..0aa2b8d21 100644 --- a/sbncode/EventGenerator/MeVPrtl/config/Higgs/dissonant_higgs.fcl +++ b/sbncode/EventGenerator/MeVPrtl/config/Higgs/dissonant_higgs.fcl @@ -8,6 +8,7 @@ kaon2higgs: { tool_type: Kaon2HiggsFlux M: @local::higgsM MixingAngle: 1e-5 + NewFormFactorModel: True KDAROnly: false #as written this only includes KDAR from absorber (not all KDAR) KDIFOnly: false #includes KDIF (from absorber or beamline) KDIFandBeamline: false #inlcudes KDIF from beamline, KDIF from absorber, and KDAR from beamline (this option orthogonal to "KDAROnly") From 8bb0792f07cbd5d9e0343a99e96f63b2de5b4137 Mon Sep 17 00:00:00 2001 From: jberger7 <31707684+jberger7@users.noreply.github.com> Date: Tue, 6 Jan 2026 16:33:05 -0500 Subject: [PATCH 2/7] Update HiggsMakeDecay_tool.cc Added an optional new form factor to use for determining decays of Higgs portal scalar to pions --- .../MeVPrtl/Tools/Higgs/HiggsMakeDecay_tool.cc | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/sbncode/EventGenerator/MeVPrtl/Tools/Higgs/HiggsMakeDecay_tool.cc b/sbncode/EventGenerator/MeVPrtl/Tools/Higgs/HiggsMakeDecay_tool.cc index 24f2fabe7..f43c54ee0 100644 --- a/sbncode/EventGenerator/MeVPrtl/Tools/Higgs/HiggsMakeDecay_tool.cc +++ b/sbncode/EventGenerator/MeVPrtl/Tools/Higgs/HiggsMakeDecay_tool.cc @@ -73,6 +73,7 @@ class HiggsMakeDecay : public IMeVPrtlDecay { double fReferenceRayDistance; double fReferenceHiggsMass; double fReferenceHiggsMixing; + bool fNewFormFactor; double fReferenceHiggsEnergy; double fReferenceHiggsKaonEnergy; @@ -132,7 +133,17 @@ double PionPartialWidth(double pion_mass, double higs_mass, double mixing) { double higgs_vev = Constants::Instance().higgs_vev; - double form_factor = (2. / 9.) * higs_mass * higs_mass + (11. / 9.) * pion_mass * pion_mass; + double form_factor = 0.; + if (fNewFormFactor) { + // New, improved form factor based on the plot in arXiv:1909.11670v4 + // This form factor is significnatly different than in older versions + // The expression is a fit to the Fig. 1 left panel in arXiv:1909.11670v4 + form_factor = 0.289 * pow(higs_mass - 2 * Constants::Instance().pizero_mass,1.5); + } + else { + // Old form factor + (2. / 9.) * higs_mass * higs_mass + (11. / 9.) * pion_mass * pion_mass; + } double width = (mixing * mixing * 3 * form_factor * form_factor / (32 * M_PI * higgs_vev * higgs_vev * higs_mass)) * pow(1- 4. * pion_mass * pion_mass / (higs_mass * higs_mass), 1. / 2.); @@ -166,6 +177,7 @@ void HiggsMakeDecay::configure(fhicl::ParameterSet const &pset) fReferenceRayDistance = pset.get("ReferenceRayDistance", 0.); fReferenceHiggsMass = pset.get("ReferenceHiggsMass", -1); fReferenceHiggsMixing = pset.get("ReferenceHiggsMixing", -1); + fReferenceHiggsMass = pset.get("NewFormFactor", -1); fReferenceHiggsEnergy = pset.get("ReferenceHiggsEnergy", -1); fReferenceHiggsKaonEnergy = pset.get("ReferenceHiggsEnergyFromKaonEnergy", -1.); From 6b09cf50aaf0c5ef533451757994455b3cf2d0db Mon Sep 17 00:00:00 2001 From: jberger7 <31707684+jberger7@users.noreply.github.com> Date: Tue, 6 Jan 2026 16:35:49 -0500 Subject: [PATCH 3/7] Update HiggsMakeDecay_tool.cc Fixed an error with the new form factor implementation --- .../EventGenerator/MeVPrtl/Tools/Higgs/HiggsMakeDecay_tool.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sbncode/EventGenerator/MeVPrtl/Tools/Higgs/HiggsMakeDecay_tool.cc b/sbncode/EventGenerator/MeVPrtl/Tools/Higgs/HiggsMakeDecay_tool.cc index f43c54ee0..12f85fb65 100644 --- a/sbncode/EventGenerator/MeVPrtl/Tools/Higgs/HiggsMakeDecay_tool.cc +++ b/sbncode/EventGenerator/MeVPrtl/Tools/Higgs/HiggsMakeDecay_tool.cc @@ -138,7 +138,7 @@ double PionPartialWidth(double pion_mass, double higs_mass, double mixing) { // New, improved form factor based on the plot in arXiv:1909.11670v4 // This form factor is significnatly different than in older versions // The expression is a fit to the Fig. 1 left panel in arXiv:1909.11670v4 - form_factor = 0.289 * pow(higs_mass - 2 * Constants::Instance().pizero_mass,1.5); + form_factor = pow(0.289 * pow(higs_mass - 2 * Constants::Instance().pizero_mass,1.5),0.5); } else { // Old form factor From 4f161a8f513d5ac022425c671ce6e838d698951a Mon Sep 17 00:00:00 2001 From: jberger7 <31707684+jberger7@users.noreply.github.com> Date: Tue, 6 Jan 2026 19:54:33 -0500 Subject: [PATCH 4/7] Update HiggsMakeDecay_tool.cc Corrected a typo in setting the Boolean for the new form factor. --- .../EventGenerator/MeVPrtl/Tools/Higgs/HiggsMakeDecay_tool.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sbncode/EventGenerator/MeVPrtl/Tools/Higgs/HiggsMakeDecay_tool.cc b/sbncode/EventGenerator/MeVPrtl/Tools/Higgs/HiggsMakeDecay_tool.cc index 12f85fb65..c48ef57b7 100644 --- a/sbncode/EventGenerator/MeVPrtl/Tools/Higgs/HiggsMakeDecay_tool.cc +++ b/sbncode/EventGenerator/MeVPrtl/Tools/Higgs/HiggsMakeDecay_tool.cc @@ -177,7 +177,7 @@ void HiggsMakeDecay::configure(fhicl::ParameterSet const &pset) fReferenceRayDistance = pset.get("ReferenceRayDistance", 0.); fReferenceHiggsMass = pset.get("ReferenceHiggsMass", -1); fReferenceHiggsMixing = pset.get("ReferenceHiggsMixing", -1); - fReferenceHiggsMass = pset.get("NewFormFactor", -1); + fNewFormFactor = pset.get("NewFormFactor", -1); fReferenceHiggsEnergy = pset.get("ReferenceHiggsEnergy", -1); fReferenceHiggsKaonEnergy = pset.get("ReferenceHiggsEnergyFromKaonEnergy", -1.); From 95f6a37a4cb890e110215f4e7dc17f5143764fbe Mon Sep 17 00:00:00 2001 From: jberger7 <31707684+jberger7@users.noreply.github.com> Date: Tue, 6 Jan 2026 20:24:33 -0500 Subject: [PATCH 5/7] Update dissonant_higgs.fcl Corrected a typo in the new parameter name for the form factor selection --- sbncode/EventGenerator/MeVPrtl/config/Higgs/dissonant_higgs.fcl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sbncode/EventGenerator/MeVPrtl/config/Higgs/dissonant_higgs.fcl b/sbncode/EventGenerator/MeVPrtl/config/Higgs/dissonant_higgs.fcl index 0aa2b8d21..bfb5bb05b 100644 --- a/sbncode/EventGenerator/MeVPrtl/config/Higgs/dissonant_higgs.fcl +++ b/sbncode/EventGenerator/MeVPrtl/config/Higgs/dissonant_higgs.fcl @@ -8,7 +8,6 @@ kaon2higgs: { tool_type: Kaon2HiggsFlux M: @local::higgsM MixingAngle: 1e-5 - NewFormFactorModel: True KDAROnly: false #as written this only includes KDAR from absorber (not all KDAR) KDIFOnly: false #includes KDIF (from absorber or beamline) KDIFandBeamline: false #inlcudes KDIF from beamline, KDIF from absorber, and KDAR from beamline (this option orthogonal to "KDAROnly") @@ -42,6 +41,7 @@ decay_higgs: { ReferenceRayLength: 2100 # 21m ReferenceHiggsMass: @local::higgsM ReferenceHiggsMixing: 1e-5 + NewFormFactor: true ReferenceRayDistance: 80000 # 800m ReferenceHiggsEnergyFromKaonEnergy: 15. # GeV AddTimeOfFlight: true From 442253e1a8b0a9ca69d784493b568cace3bdb3bd Mon Sep 17 00:00:00 2001 From: jberger7 <31707684+jberger7@users.noreply.github.com> Date: Wed, 7 Jan 2026 10:17:41 -0500 Subject: [PATCH 6/7] Update HiggsMakeDecay_tool.cc Fixed a bug with setting the boolean for the new form factor --- .../Tools/Higgs/HiggsMakeDecay_tool.cc | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/sbncode/EventGenerator/MeVPrtl/Tools/Higgs/HiggsMakeDecay_tool.cc b/sbncode/EventGenerator/MeVPrtl/Tools/Higgs/HiggsMakeDecay_tool.cc index c48ef57b7..f0551f1cc 100644 --- a/sbncode/EventGenerator/MeVPrtl/Tools/Higgs/HiggsMakeDecay_tool.cc +++ b/sbncode/EventGenerator/MeVPrtl/Tools/Higgs/HiggsMakeDecay_tool.cc @@ -73,7 +73,6 @@ class HiggsMakeDecay : public IMeVPrtlDecay { double fReferenceRayDistance; double fReferenceHiggsMass; double fReferenceHiggsMixing; - bool fNewFormFactor; double fReferenceHiggsEnergy; double fReferenceHiggsKaonEnergy; @@ -83,6 +82,7 @@ class HiggsMakeDecay : public IMeVPrtlDecay { bool fAllowMuonDecay; bool fAllowPionDecay; bool fAllowPi0Decay; + bool fNewFormFactor; bool fAddTimeOfFlight; }; @@ -128,13 +128,13 @@ double MuonPartialWidth(double higs_mass, double mixing) { return LeptonPartialWidth(Constants::Instance().muon_mass, higs_mass, mixing); } -double PionPartialWidth(double pion_mass, double higs_mass, double mixing) { +double PionPartialWidth(double pion_mass, double higs_mass, double mixing, bool use_new_ff) { if (pion_mass * 2 >= higs_mass) return 0.; double higgs_vev = Constants::Instance().higgs_vev; double form_factor = 0.; - if (fNewFormFactor) { + if (use_new_ff) { // New, improved form factor based on the plot in arXiv:1909.11670v4 // This form factor is significnatly different than in older versions // The expression is a fit to the Fig. 1 left panel in arXiv:1909.11670v4 @@ -142,7 +142,7 @@ double PionPartialWidth(double pion_mass, double higs_mass, double mixing) { } else { // Old form factor - (2. / 9.) * higs_mass * higs_mass + (11. / 9.) * pion_mass * pion_mass; + form_factor = (2. / 9.) * higs_mass * higs_mass + (11. / 9.) * pion_mass * pion_mass; } double width = (mixing * mixing * 3 * form_factor * form_factor / (32 * M_PI * higgs_vev * higgs_vev * higs_mass)) * pow(1- 4. * pion_mass * pion_mass / (higs_mass * higs_mass), 1. / 2.); @@ -150,12 +150,12 @@ double PionPartialWidth(double pion_mass, double higs_mass, double mixing) { return width; } -double PiPlusPartialWidth(double higs_mass, double mixing) { - return 2*PionPartialWidth(Constants::Instance().piplus_mass, higs_mass, mixing); +double PiPlusPartialWidth(double higs_mass, double mixing, bool use_new_ff) { + return 2*PionPartialWidth(Constants::Instance().piplus_mass, higs_mass, mixing, use_new_ff); } -double PiZeroPartialWidth(double higs_mass, double mixing) { - return PionPartialWidth(Constants::Instance().pizero_mass, higs_mass, mixing); +double PiZeroPartialWidth(double higs_mass, double mixing, bool use_new_ff) { + return PionPartialWidth(Constants::Instance().pizero_mass, higs_mass, mixing, use_new_ff); } HiggsMakeDecay::HiggsMakeDecay(fhicl::ParameterSet const &pset): @@ -177,7 +177,6 @@ void HiggsMakeDecay::configure(fhicl::ParameterSet const &pset) fReferenceRayDistance = pset.get("ReferenceRayDistance", 0.); fReferenceHiggsMass = pset.get("ReferenceHiggsMass", -1); fReferenceHiggsMixing = pset.get("ReferenceHiggsMixing", -1); - fNewFormFactor = pset.get("NewFormFactor", -1); fReferenceHiggsEnergy = pset.get("ReferenceHiggsEnergy", -1); fReferenceHiggsKaonEnergy = pset.get("ReferenceHiggsEnergyFromKaonEnergy", -1.); @@ -185,6 +184,7 @@ void HiggsMakeDecay::configure(fhicl::ParameterSet const &pset) fAllowMuonDecay = pset.get("AllowMuonDecay", true); fAllowPionDecay = pset.get("AllowPionDecay", true); fAllowPi0Decay = pset.get("AllowPi0Decay", true); + fNewFormFactor = pset.get("NewFormFactor", true); fAddTimeOfFlight = pset.get("AddTimeOfFlight", true); if (fReferenceHiggsEnergy < 0. && fReferenceHiggsKaonEnergy > 0.) { @@ -197,8 +197,8 @@ void HiggsMakeDecay::configure(fhicl::ParameterSet const &pset) // Get each partial width double width_elec = ElectronPartialWidth(fReferenceHiggsMass, fReferenceHiggsMixing); double width_muon = MuonPartialWidth(fReferenceHiggsMass, fReferenceHiggsMixing); - double width_piplus = PiPlusPartialWidth(fReferenceHiggsMass, fReferenceHiggsMixing); - double width_pizero = PiZeroPartialWidth(fReferenceHiggsMass, fReferenceHiggsMixing); + double width_piplus = PiPlusPartialWidth(fReferenceHiggsMass, fReferenceHiggsMixing, fNewFormFactor); + double width_pizero = PiZeroPartialWidth(fReferenceHiggsMass, fReferenceHiggsMixing, fNewFormFactor); // total lifetime double lifetime_ns = Constants::Instance().hbar / (width_elec + width_muon + width_piplus + width_pizero); @@ -253,8 +253,8 @@ bool HiggsMakeDecay::Decay(const MeVPrtlFlux &flux, const TVector3 &in, const TV // Get each partial width double width_elec = ElectronPartialWidth(flux.mass, mixing); double width_muon = MuonPartialWidth(flux.mass, mixing); - double width_piplus = PiPlusPartialWidth(flux.mass, mixing); - double width_pizero = PiZeroPartialWidth(flux.mass, mixing); + double width_piplus = PiPlusPartialWidth(flux.mass, mixing, fNewFormFactor); + double width_pizero = PiZeroPartialWidth(flux.mass, mixing, fNewFormFactor); // total lifetime double lifetime_ns = Constants::Instance().hbar / (width_elec + width_muon + width_piplus + width_pizero); From 2ff1bf60f144cb13bd7417f3a746955184bd42f7 Mon Sep 17 00:00:00 2001 From: jberger7 <31707684+jberger7@users.noreply.github.com> Date: Wed, 7 Jan 2026 10:45:23 -0500 Subject: [PATCH 7/7] Update HiggsMakeDecay_tool.cc Simplified the form factor calculation (with some speed improvement) --- .../EventGenerator/MeVPrtl/Tools/Higgs/HiggsMakeDecay_tool.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sbncode/EventGenerator/MeVPrtl/Tools/Higgs/HiggsMakeDecay_tool.cc b/sbncode/EventGenerator/MeVPrtl/Tools/Higgs/HiggsMakeDecay_tool.cc index f0551f1cc..172e42cf2 100644 --- a/sbncode/EventGenerator/MeVPrtl/Tools/Higgs/HiggsMakeDecay_tool.cc +++ b/sbncode/EventGenerator/MeVPrtl/Tools/Higgs/HiggsMakeDecay_tool.cc @@ -138,7 +138,7 @@ double PionPartialWidth(double pion_mass, double higs_mass, double mixing, bool // New, improved form factor based on the plot in arXiv:1909.11670v4 // This form factor is significnatly different than in older versions // The expression is a fit to the Fig. 1 left panel in arXiv:1909.11670v4 - form_factor = pow(0.289 * pow(higs_mass - 2 * Constants::Instance().pizero_mass,1.5),0.5); + form_factor = 0.537569 * pow(higs_mass - 2 * Constants::Instance().pizero_mass,0.75); } else { // Old form factor