|
@@ -8,14 +7,14 @@
|
- The GENIE Generator is a leading simulation tool used by nearly all modern neutrino experiments.
- It features a modular framework with state-of-the-art physics for neutrino and charged-lepton interactions,
- and several BSM channels. It incorporates results from GENIE’s global data analysis and includes multiple tuned models.
- GENIE supports all neutrino types, targets, and energy scales from MeV to PeV,
+ The GENIE Generator is a leading simulation tool used by nearly all modern neutrino experiments.
+ It features a modular framework with state-of-the-art physics for neutrino and charged-lepton interactions,
+ and several BSM channels. It incorporates results from GENIE’s global data analysis and includes multiple tuned models.
+ GENIE supports all neutrino types, targets, and energy scales from MeV to PeV,
and provides tools for flux handling, geometry, event generation, and reweighting.
- For more information, visit
+ For more information, visit
http://genie-mc.org |
https://genie-mc.github.io.
@@ -27,7 +26,7 @@
Luis Alvarez-Ruso (*IFIC*), Costas Andreopoulos (*Liverpool*), Adi Ashkenazi (*Tel Aviv*), Joshua Barrow (*Minnesota*), Steve Dytman (*Pittsburgh*), Hugh Gallagher (*Tufts*), Alfonso Andres Garcia Soto (*IFIC*), Steven Gardiner (*Fermilab*), Matan Goldenberg (*Tel Aviv*), Robert Hatcher (*Fermilab*), Or Hen (*MIT*), Igor Kakorin (*JINR*), Konstantin Kuzmin (*ITEP and JINR*), Liang Liu (*Fermilab*), Xianguo Lu (*Warwick*), Anselmo Meregaglia (*Bordeaux, CNRS/IN2P3*), Vadim Naumov (*JINR*), Afroditi Papadopoulou (*Argonne*), Gabriel Perdue (*Fermilab*), Komninos-John Plows (*Oxford*), Marco Roda (*Liverpool*), Alon Sportes (*Tel Aviv*), Júlia Tena Vidal (*Tel Aviv*), Jeremy Wolcott (*Tufts*), Qiyu Yan (*UCAS and Warwick*)
-**Past authors:** Christopher Barry (*Liverpool*), Steve Dennis (*Liverpool*), Walter Giele (*Fermilab*), Timothy Hobbs (*Fermilab*), Libo Jiang (*Pittsburgh*), Rhiannon Jones (*Liverpool*), Weijun Li (*Oxford*), Donna Naples (*Pittsburgh*), Beth Slater (*Liverpool*), Noah Steinberg (*Fermilab*), Vladyslav Syrotenko (*Tufts*), Julia Yarba (*Fermilab*)
+**Past authors:** Christopher Barry (*Liverpool*), Steve Dennis (*Liverpool*), Walter Giele (*Fermilab*), Timothy Hobbs (*Fermilab*), Libo Jiang (*Pittsburgh*), Rhiannon Jones (*Liverpool*), Weijun Li (*Oxford*), Donna Naples (*Pittsburgh*), Beth Slater (*Liverpool*), Noah Steinberg (*Fermilab*), Vladyslav Syrotenko (*Tufts*), Julia Yarba (*Fermilab*)
For more details on the GENIE collaboration please visit [this page](https://genie-mc.github.io/collaboration.html).
@@ -54,7 +53,7 @@ DOIs for recent releases of the GENIE Event Generator are listed below:
## Physics & User manual
-For installation and usage information, as well as information on the GENIE framework, event generator modules and tuning,
+For installation and usage information, as well as information on the GENIE framework, event generator modules and tuning,
see the [latest version of the GENIE Physics & User Manual](https://www.overleaf.com/read/rqmbqzzvsvmb#5ab475), originally published as arXiv:1510.05494.
## Public releases and physics tunes
@@ -63,7 +62,7 @@ For a list of public releases and a summary information, see [this page](https:/
A list of model configurations and tunes supported in each release is maintained [here](https://genie-mc.github.io/tunes.html).
Details on the naming conventions for releases, model configurations and tunes can be found [here](https://genie-mc.github.io/naming_conventions.html).
-[Recent publications and talks](https://genie-mc.github.io/pub.html)
+[Recent publications and talks](https://genie-mc.github.io/pub.html)
by GENIE authors highlight key modeling advances and results from our global analysis of scattering data.
## Contribution guidelines
diff --git a/config/CommonParam.xml b/config/CommonParam.xml
index 2d24e8e061..2134a0b17c 100644
--- a/config/CommonParam.xml
+++ b/config/CommonParam.xml
@@ -276,18 +276,21 @@ Or changing the name of this parameter set
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Set the coupling of dark matter to nucleons
-->
- 0.1
+
+ 1.0
1.0
- 1.0
+ -1.0
1.0
+
1.0
- 1.0
+ -1.0
1.0
- 1.0
+ -1.0
1.0
- 1.0
+ -1.0
1.0
- 1.0
+ -1.0
+
1.0
1.0
1.441
diff --git a/config/DMRESHadronicSystemGenerator.xml b/config/DMRESHadronicSystemGenerator.xml
new file mode 100644
index 0000000000..05c1dfffea
--- /dev/null
+++ b/config/DMRESHadronicSystemGenerator.xml
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+ genie::UnstableParticleDecayer/BeforeHadronTransport
+
+
+
+
diff --git a/config/DMRESInteractionListGenerator.xml b/config/DMRESInteractionListGenerator.xml
new file mode 100644
index 0000000000..77f20ea85f
--- /dev/null
+++ b/config/DMRESInteractionListGenerator.xml
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+ Resonances
+
+
+
+ true
+
+
+
diff --git a/config/DMRESKinematicsGenerator.xml b/config/DMRESKinematicsGenerator.xml
new file mode 100644
index 0000000000..23676f1f1e
--- /dev/null
+++ b/config/DMRESKinematicsGenerator.xml
@@ -0,0 +1,35 @@
+
+
+
+
+
+
+
+ NonResBackground
+
+
+
+
+
+ 1.400
+ 0.500
+
+
+
+ 1.400
+
+
+
diff --git a/config/DMRESOutgoingDarkGenerator.xml b/config/DMRESOutgoingDarkGenerator.xml
new file mode 100644
index 0000000000..549e3c7a23
--- /dev/null
+++ b/config/DMRESOutgoingDarkGenerator.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+ Lepton
+
+
+
+
diff --git a/config/DMRESPXSec.xml b/config/DMRESPXSec.xml
new file mode 100644
index 0000000000..767076139a
--- /dev/null
+++ b/config/DMRESPXSec.xml
@@ -0,0 +1,64 @@
+
+
+
+
+
+
+
+ WeakInt,NonResBackground,CKM,FermiGas,BoostedDarkMatter
+
+ genie::DMRESXSecFast/Default
+
+ 0
+ 1.000
+ 1.05
+ 0.76338
+ 1.120
+ 0.840
+
+
+
+ WeakInt,NonResBackground,CKM,FermiGas,BoostedDarkMatter
+
+ genie::DMRESXSecFast/Default
+
+ 2
+ 1.000
+ 1.05
+ 0.76338
+ 1.120
+ 0.840
+
+
+
+
diff --git a/config/DMRESXSec.xml b/config/DMRESXSec.xml
new file mode 100644
index 0000000000..0bf5b2961e
--- /dev/null
+++ b/config/DMRESXSec.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+ Resonances
+ 500
+ adaptive
+ 1000000000
+ 1e-9
+
+ false
+
+
diff --git a/config/DMRESXSecFast.xml b/config/DMRESXSecFast.xml
new file mode 100644
index 0000000000..10ea7583f7
--- /dev/null
+++ b/config/DMRESXSecFast.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+ Resonances
+ 500
+ adaptive
+ 1000000000
+ 1e-9
+
+ false
+
+
diff --git a/config/EventGenerator.xml b/config/EventGenerator.xml
index 9187896319..1b77db6b18 100644
--- a/config/EventGenerator.xml
+++ b/config/EventGenerator.xml
@@ -114,6 +114,37 @@ XSecModel alg Yes Cross section model used at the thread
genie::DMDISInteractionListGenerator/DM-Default
+
@@ -847,7 +894,7 @@ XSecModel alg Yes Cross section model used at the thread
-
+
4
@@ -858,7 +905,7 @@ XSecModel alg Yes Cross section model used at the thread
genie::DummyHNLInteractionListGenerator/Default
-
+
3
@@ -868,5 +915,5 @@ XSecModel alg Yes Cross section model used at the thread
genie::NormInteractionListGenerator/Default
genie::NormXSec/Default
-
+
diff --git a/config/EventGeneratorListAssembler.xml b/config/EventGeneratorListAssembler.xml
index 8f98d98d40..b2e6e78495 100644
--- a/config/EventGeneratorListAssembler.xml
+++ b/config/EventGeneratorListAssembler.xml
@@ -7,31 +7,31 @@
..........................................................................................................................
NOTE:
-The GENIE authors would like to caution users against using anything but a comprehensive
+The GENIE authors would like to caution users against using anything but a comprehensive
GENIE mode (`Default' setting below) for physics studies.
No detector measures generator-level reaction modes like CCQE or NCRES.
-Detectors measure final states / topologies like {1mu-,0pi}, {1mu-,1pi+}, {0mu-, 1pi0},
+Detectors measure final states / topologies like {1mu-,0pi}, {1mu-,1pi+}, {0mu-, 1pi0},
{1 track, 1 shower}, {1 mu-like ring} etc depending on granularity, thresholds and PID capabilities.
No final state / topology is a proxy for any particular reaction mode.
Intranuclear re-scattering in particular causes significant migration between states
(see Table 8.1 in the Physics and User manual).
-The Default configuration depends on the tune and it is defined in TuneGeneratorList.xml,
+The Default configuration depends on the tune and it is defined in TuneGeneratorList.xml,
which is defined in each Tune subdirectory.
Examples:
- {1mu-,0pi} is mostly numuCCQE, but can also be caused by numu resonance production followed by pion absorption.
- numuCCQE gives mostly {1mu-,0pi} but occasionaly can give {1mu-,1pi} if the recoil nucleon re-interacts.
-- NC1pi0 final states can be caused by all a) NC elastic followed by nucleon rescattering,
+- NC1pi0 final states can be caused by all a) NC elastic followed by nucleon rescattering,
b) NC resonance neutrino-production, c) NC non-resonance background, d) low-W NC DIS
e) NC coherent scattering. Each source contributes differently in the pion momentum distribution.
-We also recommend that you treat the generator-level reaction modes largely as as an internal degree of freedom.
+We also recommend that you treat the generator-level reaction modes largely as as an internal degree of freedom.
Consequently, try to define your selection efficiencies and purities in terms of observable final states _only_.
For example, if you define as `numuCCQE-like' := {1mu-,0pi} then define your selection efficiency
as:
efficiency = (`numuCCQE-like' events passing cuts) / (all true {1mu-,0pi} events)
-and not as:
+and not as:
efficiency = (`numuCCQE-like' events passing cuts) / (all true numuCCQE events)
..........................................................................................................................
@@ -47,44 +47,44 @@ Generator-%d alg No
-->
-
+
1
genie::EventGenerator/AM-NUGAMMA
-
+
1
genie::EventGenerator/CEvNS
-
+
2
genie::EventGenerator/DFR-CC
genie::EventGenerator/DFR-NC
-
+
1
genie::EventGenerator/DFR-CC
-
+
1
genie::EventGenerator/DFR-NC
-
+
2
genie::EventGenerator/QEL-CC-CHARM
genie::EventGenerator/DIS-CC-CHARM
-
+
1
genie::EventGenerator/DIS-CC-CHARM
-
+
1
genie::EventGenerator/QEL-CC-CHARM
@@ -103,48 +103,48 @@ Generator-%d alg No
1
genie::EventGenerator/IBD
-
-
+
+
2
genie::EventGenerator/IMD
genie::EventGenerator/IMD-ANH
-
+
1
genie::EventGenerator/NUE-EL
-
+
3
genie::EventGenerator/NUE-EL
genie::EventGenerator/IMD
genie::EventGenerator/IMD-ANH
-
+
2
genie::EventGenerator/QEL-CC
genie::EventGenerator/QEL-NC
-
+
1
genie::EventGenerator/QEL-CC
-
+
1
genie::EventGenerator/QEL-NC
-
+
1
genie::EventGenerator/MEC-CC
-
+
1
genie::EventGenerator/MEC-NC
@@ -156,13 +156,13 @@ Generator-%d alg No
-
+
2
genie::EventGenerator/MEC-CC
genie::EventGenerator/QEL-CC
-
+
2
genie::EventGenerator/MEC-NC
genie::EventGenerator/QEL-NC
@@ -174,55 +174,55 @@ Generator-%d alg No
genie::EventGenerator/QEL-EM
-
+
2
genie::EventGenerator/RES-CC
genie::EventGenerator/RES-NC
-
+
1
genie::EventGenerator/RES-CC
-
+
1
genie::EventGenerator/RES-NC
-
+
2
genie::EventGenerator/COH-CC-PION
genie::EventGenerator/COH-NC-PION
-
+
1
genie::EventGenerator/COH-CC-PION
-
+
1
genie::EventGenerator/COH-NC-PION
-
+
2
genie::EventGenerator/DIS-CC
genie::EventGenerator/DIS-NC
-
+
1
genie::EventGenerator/DIS-CC
-
+
1
genie::EventGenerator/DIS-NC
-
+
6
genie::EventGenerator/QEL-NC
genie::EventGenerator/RES-NC
@@ -232,7 +232,7 @@ Generator-%d alg No
genie::EventGenerator/DFR-NC
-
+
9
genie::EventGenerator/QEL-CC
genie::EventGenerator/RES-CC
@@ -245,7 +245,7 @@ Generator-%d alg No
genie::EventGenerator/QEL-CC-LAMBDA
-
+
5
genie::EventGenerator/QEL-CC
genie::EventGenerator/RES-CC
@@ -266,26 +266,26 @@ Generator-%d alg No
genie::EventGenerator/NUE-EL
-
-
+
1
genie::EventGenerator/QEL-EM
-
+
1
genie::EventGenerator/MEC-EM
-
+
1
genie::EventGenerator/RES-EM
-
+
1
genie::EventGenerator/DIS-EM
@@ -293,7 +293,7 @@ Generator-%d alg No
-
+
4
genie::EventGenerator/QEL-EM
genie::EventGenerator/RES-EM
@@ -301,11 +301,11 @@ Generator-%d alg No
genie::EventGenerator/MEC-EM
-
-
+
2
genie::EventGenerator/RES-CC
genie::EventGenerator/DIS-CC
@@ -313,7 +313,7 @@ Generator-%d alg No
-
+
9
genie::EventGenerator/QEL-CC
@@ -323,8 +323,8 @@ Generator-%d alg No
genie::EventGenerator/IMD-ANH
genie::EventGenerator/QEL-CC-LAMBDA
genie::EventGenerator/DIS-CC-SINGLEK
- genie::EventGenerator/QEL-CC-CHARM
- genie::EventGenerator/DIS-CC-CHARM
+ genie::EventGenerator/QEL-CC-CHARM
+ genie::EventGenerator/DIS-CC-CHARM
@@ -379,7 +379,7 @@ Generator-%d alg No
genie::EventGenerator/QEL-CC-LAMBDA
genie::EventGenerator/DIS-CC-SINGLEK
genie::EventGenerator/MEC-CC
- genie::EventGenerator/MEC-NC
+ genie::EventGenerator/MEC-NC
genie::EventGenerator/QEL-CC-CHARM
genie::EventGenerator/DIS-CC-CHARM
@@ -397,6 +397,11 @@ Generator-%d alg No
genie::EventGenerator/DMDIS
+
+ 1
+ genie::EventGenerator/DMRES
+
+
1
genie::EventGenerator/DME
@@ -409,10 +414,11 @@ Generator-%d alg No
- 3
+ 4
genie::EventGenerator/DMEL
genie::EventGenerator/DMDIS
genie::EventGenerator/DME
+ genie::EventGenerator/DMRES
@@ -420,10 +426,16 @@ Generator-%d alg No
genie::EventGenerator/COHDNu
+
+ 3
+ genie::EventGenerator/DMEL
+ genie::EventGenerator/DMDIS
+ genie::EventGenerator/DME
+
-
+
13
genie::EventGenerator/HEDIS-CC
genie::EventGenerator/HEDIS-NC
@@ -440,7 +452,7 @@ Generator-%d alg No
genie::EventGenerator/PhotonCOH
-
+
11
genie::EventGenerator/GLRES-Mu
genie::EventGenerator/GLRES-Tau
@@ -455,7 +467,7 @@ Generator-%d alg No
genie::EventGenerator/PhotonCOH
-
+
6
genie::EventGenerator/HEDIS-CC
genie::EventGenerator/HEDIS-NC
@@ -465,7 +477,7 @@ Generator-%d alg No
genie::EventGenerator/GLRES-Had
-
+
5
genie::EventGenerator/HEDIS-CC
genie::EventGenerator/GLRES-Mu
@@ -474,23 +486,23 @@ Generator-%d alg No
genie::EventGenerator/GLRES-Had
-
+
2
genie::EventGenerator/HEDIS-CC
genie::EventGenerator/HEDIS-NC
-
+
1
genie::EventGenerator/HEDIS-CC
-
+
1
genie::EventGenerator/HEDIS-NC
-
+
4
genie::EventGenerator/GLRES-Mu
genie::EventGenerator/GLRES-Tau
@@ -498,43 +510,43 @@ Generator-%d alg No
genie::EventGenerator/GLRES-Had
-
+
1
genie::EventGenerator/GLRES-Mu
-
+
1
genie::EventGenerator/GLRES-Tau
-
+
1
genie::EventGenerator/GLRES-Ele
-
+
1
genie::EventGenerator/GLRES-Had
-
+
2
genie::EventGenerator/HENuEl-CC
genie::EventGenerator/HENuEl-NC
-
+
1
genie::EventGenerator/HENuEl-CC
-
+
1
genie::EventGenerator/HENuEl-NC
-
+
4
genie::EventGenerator/PhotonRES-Mu
genie::EventGenerator/PhotonRES-Tau
@@ -542,41 +554,40 @@ Generator-%d alg No
genie::EventGenerator/PhotonRES-Had
-
+
1
genie::EventGenerator/PhotonRES-Mu
-
+
1
genie::EventGenerator/PhotonRES-Tau
-
+
1
genie::EventGenerator/PhotonRES-Ele
-
+
1
genie::EventGenerator/PhotonRES-Had
-
+
1
genie::EventGenerator/PhotonCOH
-
+
1
genie::EventGenerator/NORM
-
-
+
+
2
genie::EventGenerator/QEL-CC
genie::EventGenerator/NORM
-
diff --git a/config/GDM18_00a/ModelConfiguration.xml b/config/GDM18_00a/ModelConfiguration.xml
index e562596913..3b37566680 100644
--- a/config/GDM18_00a/ModelConfiguration.xml
+++ b/config/GDM18_00a/ModelConfiguration.xml
@@ -4,7 +4,7 @@
-
+
-
-
-
-
+
-
+
genie::ReinSehgalRESPXSec/NoPauliBlock
genie::ReinSehgalRESPXSec/NoPauliBlock
- genie::ReinSehgalRESPXSec/Default
-
+ genie::ReinSehgalRESPXSec/EM-NoPauliBlock
+
genie::KNOTunedQPMDISPXSec/Default
genie::KNOTunedQPMDISPXSec/Default
genie::KNOTunedQPMDISPXSec/Default
-
genie::ReinSehgalCOHPiPXSec/Default
genie::ReinSehgalCOHPiPXSec/Default
@@ -138,6 +138,8 @@ University of Liverpool
genie::AhrensDMELPXSec/Velocity0
genie::QPMDMDISPXSec/Velocity0
genie::DMElectronPXSec/Velocity0
+ genie::DMRESPXSec/Velocity0
+
diff --git a/config/GDM18_00a/TuneGeneratorList.xml b/config/GDM18_00a/TuneGeneratorList.xml
index 60161680c5..b7b9946f45 100644
--- a/config/GDM18_00a/TuneGeneratorList.xml
+++ b/config/GDM18_00a/TuneGeneratorList.xml
@@ -9,10 +9,10 @@ This xml files contains the default configuration for the tune
..........................................................................................................................
NOTE:
-The GENIE authors would like to caution users against using anything but a comprehensive
+The GENIE authors would like to caution users against using anything but a comprehensive
GENIE mode (`Default' setting below) for physics studies.
No detector measures generator-level reaction modes like CCQE or NCRES.
-Detectors measure final states / topologies like {1mu-,0pi}, {1mu-,1pi+}, {0mu-, 1pi0},
+Detectors measure final states / topologies like {1mu-,0pi}, {1mu-,1pi+}, {0mu-, 1pi0},
{1 track, 1 shower}, {1 mu-like ring} etc depending on granularity, thresholds and PID capabilities.
No final state / topology is a proxy for any particular reaction mode.
Intranuclear re-scattering in particular causes significant migration between states
@@ -21,16 +21,16 @@ Intranuclear re-scattering in particular causes significant migration between st
Examples:
- {1mu-,0pi} is mostly numuCCQE, but can also be caused by numu resonance production followed by pion absorption.
- numuCCQE gives mostly {1mu-,0pi} but occasionaly can give {1mu-,1pi} if the recoil nucleon re-interacts.
-- NC1pi0 final states can be caused by all a) NC elastic followed by nucleon rescattering,
+- NC1pi0 final states can be caused by all a) NC elastic followed by nucleon rescattering,
b) NC resonance neutrino-production, c) NC non-resonance background, d) low-W NC DIS
e) NC coherent scattering. Each source contributes differently in the pion momentum distribution.
-We also recommend that you treat the generator-level reaction modes largely as as an internal degree of freedom.
+We also recommend that you treat the generator-level reaction modes largely as as an internal degree of freedom.
Consequently, try to define your selection efficiencies and purities in terms of observable final states _only_.
For example, if you define as `numuCCQE-like' := {1mu-,0pi} then define your selection efficiency
as:
efficiency = (`numuCCQE-like' events passing cuts) / (all true {1mu-,0pi} events)
-and not as:
+and not as:
efficiency = (`numuCCQE-like' events passing cuts) / (all true numuCCQE events)
..........................................................................................................................
@@ -46,12 +46,42 @@ Generator-%d alg No
-->
-
+
+ 4
+ genie::EventGenerator/DMEL
+ genie::EventGenerator/DMDIS
+ genie::EventGenerator/DME
+ genie::EventGenerator/DMRES
+
+
+
3
genie::EventGenerator/DMEL
- genie::EventGenerator/DMDIS
- genie::EventGenerator/DME
+ genie::EventGenerator/DMDIS
+ genie::EventGenerator/DME
+
+
+
+ 18
+ genie::EventGenerator/QEL-CC
+ genie::EventGenerator/QEL-NC
+ genie::EventGenerator/RES-CC
+ genie::EventGenerator/RES-NC
+ genie::EventGenerator/DIS-CC
+ genie::EventGenerator/DIS-NC
+ genie::EventGenerator/COH-CC-PION
+ genie::EventGenerator/COH-NC-PION
+ genie::EventGenerator/DIS-CC-CHARM
+ genie::EventGenerator/QEL-CC-CHARM
+ genie::EventGenerator/NUE-EL
+ genie::EventGenerator/IMD
+ genie::EventGenerator/IMD-ANH
+ genie::EventGenerator/DFR-CC
+ genie::EventGenerator/DFR-NC
+ genie::EventGenerator/QEL-CC-LAMBDA
+ genie::EventGenerator/MEC-CC
+ genie::EventGenerator/MEC-NC
-
+
diff --git a/config/GDM18_00b/ModelConfiguration.xml b/config/GDM18_00b/ModelConfiguration.xml
index 3d7c2ff72e..0dee032efe 100644
--- a/config/GDM18_00b/ModelConfiguration.xml
+++ b/config/GDM18_00b/ModelConfiguration.xml
@@ -4,7 +4,7 @@
-
+
-
-
-
-
+
-
+
genie::ReinSehgalRESPXSec/NoPauliBlock
genie::ReinSehgalRESPXSec/NoPauliBlock
genie::ReinSehgalRESPXSec/Default
-
+
genie::KNOTunedQPMDISPXSec/Default
genie::KNOTunedQPMDISPXSec/Default
genie::KNOTunedQPMDISPXSec/Default
-
genie::ReinSehgalCOHPiPXSec/Default
genie::ReinSehgalCOHPiPXSec/Default
@@ -138,6 +138,8 @@ University of Liverpool
genie::AhrensDMELPXSec/Velocity2
genie::QPMDMDISPXSec/Velocity2
genie::DMElectronPXSec/Velocity2
+ genie::DMRESPXSec/Velocity2
+
diff --git a/config/GDM18_00b/TuneGeneratorList.xml b/config/GDM18_00b/TuneGeneratorList.xml
index 60161680c5..3805e309ab 100644
--- a/config/GDM18_00b/TuneGeneratorList.xml
+++ b/config/GDM18_00b/TuneGeneratorList.xml
@@ -9,10 +9,10 @@ This xml files contains the default configuration for the tune
..........................................................................................................................
NOTE:
-The GENIE authors would like to caution users against using anything but a comprehensive
+The GENIE authors would like to caution users against using anything but a comprehensive
GENIE mode (`Default' setting below) for physics studies.
No detector measures generator-level reaction modes like CCQE or NCRES.
-Detectors measure final states / topologies like {1mu-,0pi}, {1mu-,1pi+}, {0mu-, 1pi0},
+Detectors measure final states / topologies like {1mu-,0pi}, {1mu-,1pi+}, {0mu-, 1pi0},
{1 track, 1 shower}, {1 mu-like ring} etc depending on granularity, thresholds and PID capabilities.
No final state / topology is a proxy for any particular reaction mode.
Intranuclear re-scattering in particular causes significant migration between states
@@ -21,16 +21,16 @@ Intranuclear re-scattering in particular causes significant migration between st
Examples:
- {1mu-,0pi} is mostly numuCCQE, but can also be caused by numu resonance production followed by pion absorption.
- numuCCQE gives mostly {1mu-,0pi} but occasionaly can give {1mu-,1pi} if the recoil nucleon re-interacts.
-- NC1pi0 final states can be caused by all a) NC elastic followed by nucleon rescattering,
+- NC1pi0 final states can be caused by all a) NC elastic followed by nucleon rescattering,
b) NC resonance neutrino-production, c) NC non-resonance background, d) low-W NC DIS
e) NC coherent scattering. Each source contributes differently in the pion momentum distribution.
-We also recommend that you treat the generator-level reaction modes largely as as an internal degree of freedom.
+We also recommend that you treat the generator-level reaction modes largely as as an internal degree of freedom.
Consequently, try to define your selection efficiencies and purities in terms of observable final states _only_.
For example, if you define as `numuCCQE-like' := {1mu-,0pi} then define your selection efficiency
as:
efficiency = (`numuCCQE-like' events passing cuts) / (all true {1mu-,0pi} events)
-and not as:
+and not as:
efficiency = (`numuCCQE-like' events passing cuts) / (all true numuCCQE events)
..........................................................................................................................
@@ -46,12 +46,41 @@ Generator-%d alg No
-->
-
+
+ 4
+ genie::EventGenerator/DMEL
+ genie::EventGenerator/DMDIS
+ genie::EventGenerator/DME
+ genie::EventGenerator/DMRES
+
+
+
3
genie::EventGenerator/DMEL
- genie::EventGenerator/DMDIS
- genie::EventGenerator/DME
+ genie::EventGenerator/DMDIS
+ genie::EventGenerator/DME
-
+
+ 18
+ genie::EventGenerator/QEL-CC
+ genie::EventGenerator/QEL-NC
+ genie::EventGenerator/RES-CC
+ genie::EventGenerator/RES-NC
+ genie::EventGenerator/DIS-CC
+ genie::EventGenerator/DIS-NC
+ genie::EventGenerator/COH-CC-PION
+ genie::EventGenerator/COH-NC-PION
+ genie::EventGenerator/DIS-CC-CHARM
+ genie::EventGenerator/QEL-CC-CHARM
+ genie::EventGenerator/NUE-EL
+ genie::EventGenerator/IMD
+ genie::EventGenerator/IMD-ANH
+ genie::EventGenerator/DFR-CC
+ genie::EventGenerator/DFR-NC
+ genie::EventGenerator/QEL-CC-LAMBDA
+ genie::EventGenerator/MEC-CC
+ genie::EventGenerator/MEC-NC
+
+
diff --git a/config/HAIntranuke2025.xml b/config/HAIntranuke2025.xml
new file mode 100644
index 0000000000..9db9957e63
--- /dev/null
+++ b/config/HAIntranuke2025.xml
@@ -0,0 +1,80 @@
+
+
+
+
+
+
+
+
+ NUCL
+
+ genie::NuclearModelMap/Default
+
+
+ 0.00
+ 0.05
+ 1.0
+ 1.0
+ 1.0
+ 0.041
+ 1.0
+ 0.0
+ 0.250
+
+ true
+ true
+ true
+
+
+
+ 0.0
+ 0.0
+
+
+
+
+
+
+
+
diff --git a/config/HNIntranuke2025.xml b/config/HNIntranuke2025.xml
new file mode 100644
index 0000000000..bc3952e304
--- /dev/null
+++ b/config/HNIntranuke2025.xml
@@ -0,0 +1,81 @@
+
+
+
+
+
+
+
+ NUCL
+
+ genie::NuclearModelMap/Default
+
+
+ true
+ false
+ true
+
+ 0.00
+ 0.05
+ 1.0
+ 1.0
+ 1.0
+ 0.075
+ 1.0
+ 0.250
+
+ true
+ true
+
+ 0.0
+ 0.0
+
+
+
+
+
+
+
diff --git a/config/Messenger.xml b/config/Messenger.xml
index 713a15a71f..68723e2a0d 100644
--- a/config/Messenger.xml
+++ b/config/Messenger.xml
@@ -86,6 +86,13 @@
NOTICE
WARN
NOTICE
+ INFO
+ INFO
+ WARN
+ WARN
+ NOTICE
+ NOTICE
+ WARN
WARN
NOTICE
INFO
@@ -121,19 +128,19 @@
NOTICE
WARN
WARN
- WARN
+ WARN
WARN
WARN
- WARN
+ WARN
NOTICE
NOTICE
- NOTICE
+ NOTICE
NOTICE
NOTICE
- NOTICE
+ NOTICE
NOTICE
NOTICE
- NOTICE
+ NOTICE
NOTICE
NOTICE
NOTICE
@@ -231,7 +238,7 @@
WARN
WARN
ERROR
- FATAL
+ FATAL
NOTICE
NOTICE
diff --git a/config/Messenger_inuke_verbose.xml b/config/Messenger_inuke_verbose.xml
index e53bb4f358..b2c64edb4c 100644
--- a/config/Messenger_inuke_verbose.xml
+++ b/config/Messenger_inuke_verbose.xml
@@ -100,18 +100,18 @@
NOTICE
INFO
INFO
- INFO
+ INFO
INFO
INFO
- NOTICE
+ NOTICE
INFO
- NOTICE
+ NOTICE
NOTICE
NOTICE
- NOTICE
+ NOTICE
INFO
INFO
- INFO
+ INFO
INFO
INFO
INFO
diff --git a/config/Messenger_laconic.xml b/config/Messenger_laconic.xml
index 1cfaf6590e..68ea0e1163 100644
--- a/config/Messenger_laconic.xml
+++ b/config/Messenger_laconic.xml
@@ -21,7 +21,7 @@
same stream is listed twice with conflicting priority then the
one found last is used
-->
- WARN
+ WARN
WARN
WARN
WARN
@@ -79,6 +79,13 @@
WARN
WARN
WARN
+ INFO
+ INFO
+ WARN
+ WARN
+ NOTICE
+ NOTICE
+ WARN
WARN
WARN
WARN
@@ -115,19 +122,19 @@
WARN
WARN
WARN
- WARN
+ WARN
WARN
WARN
- WARN
+ WARN
WARN
WARN
- WARN
+ WARN
WARN
WARN
- WARN
+ WARN
WARN
WARN
- WARN
+ WARN
WARN
WARN
WARN
diff --git a/config/Messenger_rambling.xml b/config/Messenger_rambling.xml
index e591abc5e9..96086459dc 100644
--- a/config/Messenger_rambling.xml
+++ b/config/Messenger_rambling.xml
@@ -80,6 +80,13 @@
NOTICE
NOTICE
NOTICE
+ INFO
+ INFO
+ WARN
+ WARN
+ NOTICE
+ NOTICE
+ WARN
NOTICE
INFO
INFO
@@ -93,7 +100,7 @@
WARN
NOTICE
NOTICE
- NOTICE
+ NOTICE
INFO
INFO
WARN
@@ -116,20 +123,20 @@
NOTICE
NOTICE
NOTICE
- NOTICE
+ NOTICE
NOTICE
NOTICE
- NOTICE
+ NOTICE
NOTICE
NOTICE
NOTICE
- NOTICE
+ NOTICE
NOTICE
NOTICE
- NOTICE
+ NOTICE
NOTICE
NOTICE
- NOTICE
+ NOTICE
NOTICE
NOTICE
NOTICE
diff --git a/config/Messenger_whisper.xml b/config/Messenger_whisper.xml
index c8d945a861..82732e5bd5 100644
--- a/config/Messenger_whisper.xml
+++ b/config/Messenger_whisper.xml
@@ -80,6 +80,13 @@
NOTICE
WARN
NOTICE
+ INFO
+ INFO
+ WARN
+ WARN
+ NOTICE
+ NOTICE
+ WARN
FATAL
FATAL
FATAL
@@ -116,20 +123,20 @@
FATAL
FATAL
FATAL
- FATAL
+ FATAL
FATAL
FATAL
- FATAL
+ FATAL
FATAL
FATAL
FATAL
- FATAL
+ FATAL
FATAL
FATAL
- FATAL
+ FATAL
FATAL
FATAL
- FATAL
+ FATAL
FATAL
FATAL
FATAL
diff --git a/config/RSHelicityAmplModelDMn.xml b/config/RSHelicityAmplModelDMn.xml
new file mode 100644
index 0000000000..49ca01898d
--- /dev/null
+++ b/config/RSHelicityAmplModelDMn.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+ BoostedDarkMatter
+
+
+
diff --git a/config/RSHelicityAmplModelDMp.xml b/config/RSHelicityAmplModelDMp.xml
new file mode 100644
index 0000000000..4ba3606acd
--- /dev/null
+++ b/config/RSHelicityAmplModelDMp.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+ BoostedDarkMatter
+
+
+
diff --git a/config/master_config.xml b/config/master_config.xml
index 8bfe6aa53f..0dabf07fe2 100644
--- a/config/master_config.xml
+++ b/config/master_config.xml
@@ -9,6 +9,8 @@
HAIntranuke.xml
HAIntranuke2018.xml
HNIntranuke2018.xml
+ HAIntranuke2025.xml
+ HNIntranuke2025.xml
HINCLCascadeIntranuke.xml
HG4BertCascIntranuke.xml
CascadeReweight.xml
@@ -25,6 +27,7 @@
QELPrimaryLeptonGenerator.xml
DISPrimaryLeptonGenerator.xml
RESPrimaryLeptonGenerator.xml
+ DMRESOutgoingDarkGenerator.xml
NuEPrimaryLeptonGenerator.xml
DMEOutgoingDarkGenerator.xml
COHPrimaryLeptonGenerator.xml
@@ -43,6 +46,7 @@
SKKinematicsGenerator.xml
DMELKinematicsGenerator.xml
DMDISKinematicsGenerator.xml
+ DMRESKinematicsGenerator.xml
HELeptonKinematicsGenerator.xml
HEDISKinematicsGenerator.xml
IBDHadronicSystemGenerator.xml
@@ -51,6 +55,7 @@
DFRHadronicSystemGenerator.xml
DISHadronicSystemGenerator.xml
RESHadronicSystemGenerator.xml
+ DMRESHadronicSystemGenerator.xml
RSPPHadronicSystemGenerator.xml
SKHadronicSystemGenerator.xml
NuETargetRemnantGenerator.xml
@@ -91,6 +96,7 @@
SKInteractionListGenerator.xml
DMELInteractionListGenerator.xml
DMDISInteractionListGenerator.xml
+ DMRESInteractionListGenerator.xml
IBDInteractionListGenerator.xml
CEvNSInteractionListGenerator.xml
COHDNuInteractionListGenerator.xml
@@ -154,6 +160,8 @@
RSHelicityAmplModelNCn.xml
RSHelicityAmplModelEMp.xml
RSHelicityAmplModelEMn.xml
+ RSHelicityAmplModelDMn.xml
+ RSHelicityAmplModelDMp.xml
EngelFormFactor.xml
@@ -170,6 +178,7 @@
AlamSimoAtharVacasSKXSec.xml
IMDXSec.xml
RESXSec.xml
+ DMRESXSec.xml
MECXSec.xml
NuElectronXSec.xml
DMElectronXSec.xml
@@ -207,6 +216,7 @@
PattonCEvNSPXSec.xml
NuElectronPXSec.xml
DMElectronPXSec.xml
+ DMRESPXSec.xml
GLRESPXSec.xml
HENuElPXSec.xml
PhotonCOHPXSec.xml
@@ -230,6 +240,7 @@
Default.xml
Default.xml
ReinSehgalRESXSecFast.xml
+ DMRESXSecFast.xml
BertuzzoDNuCOHPXSec.xml
HybridXSecAlgorithm.xml
HEDISPXSec.xml
diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_abs/al_abs_combined.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/al_abs_combined.txt
new file mode 100644
index 0000000000..dad34a5fb2
--- /dev/null
+++ b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/al_abs_combined.txt
@@ -0,0 +1,25 @@
+#KE XS sig
+1.0 5.0 0.0
+5.0 38.0 0.0
+20.0 134.0 0.0
+50.0 219.0 0.0
+85.0 252.0 40.0
+125.0 340.0 50.0
+165.0 338.0 57.0
+205.0 327.0 57.0
+245.0 218.0 47.0
+315.0 119.0 44.0
+350.0 139.353 2.59927
+400.0 88.9288 2.08718
+450.0 57.2077 1.67945
+500.0 41.1476 1.42666
+550.0 35.4119 1.32426
+600.0 36.7586 1.34902
+650.0 32.0203 1.25968
+700.0 31.0727 1.24102
+750.0 34.0653 1.29901
+800.0 31.8707 1.25675
+850.0 29.5764 1.21095
+900.0 28.1799 1.18218
+950.0 25.0876 1.11578
+1000.0 23.9404 1.0901
diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_abs/ar_abs_combined.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/ar_abs_combined.txt
new file mode 100644
index 0000000000..9fc07be335
--- /dev/null
+++ b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/ar_abs_combined.txt
@@ -0,0 +1,24 @@
+#KE XS sig
+1.0 15.0 0.0
+5.0 50.0 0.0
+20.0 206.2 0.0
+50.0 304.3 0.0
+70.0 180.0 43.0
+118.0 320.0 65.0
+162.0 351.0 49.0
+239.0 283.0 28.0
+330.0 225.0 17.0
+350.0 209.294 3.62322
+400.0 139.94 2.97903
+450.0 100.79 2.53601
+500.0 74.2802 2.18161
+550.0 62.1594 1.99758
+600.0 63.1317 2.01299
+650.0 58.076 1.93147
+700.0 58.1408 1.93254
+750.0 60.7983 1.9758
+800.0 58.789 1.94318
+850.0 55.937 1.89588
+900.0 52.5017 1.83724
+950.0 46.4089 1.72816
+1000.0 45.307 1.70767
diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_abs/bi_abs_combined.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/bi_abs_combined.txt
new file mode 100644
index 0000000000..25e7d5a97a
--- /dev/null
+++ b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/bi_abs_combined.txt
@@ -0,0 +1,25 @@
+#KE XS sig
+1.0 0.0 0.0
+5.0 0.0 0.0
+20.0 221.0 0.0
+50.0 869.0 0.0
+85.0 1659.0 655.0
+125.0 1235.0 230.0
+165.0 1585.0 280.0
+205.0 950.0 160.0
+245.0 854.0 166.0
+315.0 618.0 170.0
+350.0 919.445 13.0765
+400.0 744.963 11.8256
+450.0 639.962 10.9912
+500.0 550.379 10.2171
+550.0 498.659 9.73841
+600.0 485.973 9.61694
+650.0 459.625 9.35908
+700.0 468.212 9.44398
+750.0 427.422 9.03288
+800.0 414.931 8.90283
+850.0 398.927 8.7331
+900.0 402.245 8.76858
+950.0 386.436 8.5981
+1000.0 359.112 8.29447
diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_abs/c_abs_combined.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/c_abs_combined.txt
new file mode 100644
index 0000000000..f293dd4546
--- /dev/null
+++ b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/c_abs_combined.txt
@@ -0,0 +1,30 @@
+#KE XS sig
+1.0 0.0 0.0
+4.0 5.1 0.0
+20.0 41.2 0.0
+50.0 95.5 0.0
+85.0 109.0 20.0
+125.0 166.0 26.0
+165.0 194.0 36.0
+205.0 157.0 37.0
+245.0 95.0 32.0
+315.0 64.0 27.0
+105.6 153.8 12.0
+118.1 182.1 19.2
+135.6 160.8 16.6
+160.5 161.4 15.7
+186.9 159.4 15.3
+350.0 53.4176 1.23414
+400.0 29.8023 0.925629
+450.0 17.2249 0.705242
+500.0 12.6064 0.603814
+550.0 9.03364 0.511454
+600.0 7.37796 0.462346
+650.0 7.31987 0.460527
+700.0 7.90081 0.478405
+750.0 7.34891 0.461437
+800.0 8.19128 0.487095
+850.0 8.56889 0.498164
+900.0 7.31987 0.460527
+950.0 6.39036 0.430364
+1000.0 6.18703 0.423477
diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_abs/fe_abs_combined.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/fe_abs_combined.txt
new file mode 100644
index 0000000000..fbaff408ca
--- /dev/null
+++ b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/fe_abs_combined.txt
@@ -0,0 +1,25 @@
+#KE XS sig
+1.0 0.0 0.0
+5.0 15.3 0.0
+20.0 218.6 0.0
+50.0 373.5 0.0
+85.0 421.0 70.0
+125.0 527.0 74.0
+165.0 577.0 87.0
+205.0 607.0 86.0
+245.0 411.0 70.0
+315.0 320.0 62.0
+350.0 287.394 4.74198
+400.0 201.168 3.98915
+450.0 154.445 3.50563
+500.0 118.105 3.07258
+550.0 104.964 2.89899
+600.0 102.287 2.86226
+650.0 95.6359 2.76878
+700.0 91.5801 2.71012
+750.0 93.608 2.73962
+800.0 91.5801 2.71012
+850.0 81.5217 2.55857
+900.0 88.3354 2.66222
+950.0 78.926 2.51791
+1000.0 74.2212 2.44243
diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_abs/he3_abs_combined.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/he3_abs_combined.txt
new file mode 100644
index 0000000000..ef76b7f903
--- /dev/null
+++ b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/he3_abs_combined.txt
@@ -0,0 +1,24 @@
+#KE XS sig
+1.0 0.0 0.0
+5.0 1.4 0.0
+20.0 11.0 0.0
+50.0 37.0 0.0
+100.0 24.7723 0.528604
+150.0 28.7723 0.568673
+200.0 23.4005 0.514072
+250.0 17.3141 0.443382
+300.0 12.1383 0.372087
+350.0 8.46107 0.311156
+400.0 3.41209 0.19803
+450.0 1.93659 0.149286
+500.0 1.16426 0.11579
+550.0 0.979824 0.106232
+600.0 0.691641 0.0892636
+650.0 0.645531 0.0862386
+700.0 0.622477 0.0846855
+750.0 0.610949 0.0838981
+800.0 0.634004 0.0854656
+850.0 0.576367 0.0814903
+900.0 0.553313 0.0798446
+950.0 0.553313 0.0798446
+1000.0 0.414984 0.0691516
diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_abs/li_abs_combined.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/li_abs_combined.txt
new file mode 100644
index 0000000000..5948ae254c
--- /dev/null
+++ b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/li_abs_combined.txt
@@ -0,0 +1,25 @@
+#KE XS sig
+85.0 44.0 20.0
+125.0 114.0 26.0
+165.0 124.0 30.0
+205.0 59.0 33.0
+245.0 42.0 30.0
+315.0 0.0 0.0
+1.0 15.0 0.0
+5.0 30.0 0.0
+20.0 59.4 0.0
+50.0 75.4 0.0
+350.0 19.25 0.590374
+400.0 9.8629 0.423679
+450.0 5.98362 0.330353
+500.0 4.51973 0.287228
+550.0 3.16564 0.240471
+600.0 2.4154 0.210095
+650.0 2.59839 0.217897
+700.0 2.5069 0.214032
+750.0 2.61669 0.218662
+800.0 2.61669 0.218662
+850.0 2.67158 0.22094
+900.0 2.54349 0.215586
+950.0 1.90305 0.186512
+1000.0 1.79325 0.181057
diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_abs/n_abs_combined.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/n_abs_combined.txt
new file mode 100644
index 0000000000..6f49c8fdc6
--- /dev/null
+++ b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/n_abs_combined.txt
@@ -0,0 +1,2 @@
+#KE XS sig
+239 119 10
diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_abs/nb_abs_combined.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/nb_abs_combined.txt
new file mode 100644
index 0000000000..592a443af2
--- /dev/null
+++ b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/nb_abs_combined.txt
@@ -0,0 +1,25 @@
+#KE XS sig
+1.0 0.0 0.0
+5.0 0.0 0.0
+20.0 324.7 0.0
+50.0 540.7 0.0
+85.0 805.0 143.0
+125.0 925.0 140.0
+165.0 880.0 160.0
+205.0 685.0 100.0
+245.0 440.0 105.0
+315.0 390.0 90.0
+350.0 481.866 7.24519
+400.0 356.167 6.26476
+450.0 284.387 5.6162
+500.0 221.481 4.97031
+550.0 210.788 4.85117
+600.0 190.881 4.62053
+650.0 183.942 4.53717
+700.0 175.183 4.42956
+750.0 167.561 4.33361
+800.0 186.331 4.56605
+850.0 173.704 4.41112
+900.0 156.299 4.18755
+950.0 153.228 4.14676
+1000.0 151.294 4.12087
diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_abs/pip12_abs.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/pip12_abs.txt
new file mode 100644
index 0000000000..901406b869
--- /dev/null
+++ b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/pip12_abs.txt
@@ -0,0 +1,42 @@
+0.0 6.455978
+25.0 40.980631
+50.0 77.028825
+75.0 113.750466
+100.0 145.201299
+125.0 164.980104
+150.0 170.135874
+175.0 163.273128
+200.0 152.262087
+225.0 133.103706
+250.0 113.241520
+275.0 97.647882
+300.0 82.054243
+325.0 66.972608
+350.0 52.658979
+375.0 44.475557
+400.0 36.292136
+425.0 30.354552
+450.0 24.416968
+475.0 19.813004
+500.0 15.209040
+525.0 12.960797
+550.0 10.712554
+575.0 9.780145
+600.0 8.847736
+625.0 8.321987
+650.0 7.796238
+675.0 7.712002
+700.0 7.627766
+725.0 7.746859
+750.0 7.865952
+775.0 7.865952
+800.0 7.865952
+825.0 7.714907
+850.0 7.563862
+875.0 7.447674
+900.0 7.331486
+925.0 7.022135
+950.0 6.712783
+975.0 6.403432
+1000.0 6.094080
+1025.0 5.784729
diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_abs/pip131_abs.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/pip131_abs.txt
new file mode 100644
index 0000000000..9d52dcf44d
--- /dev/null
+++ b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/pip131_abs.txt
@@ -0,0 +1 @@
+239.0 676.000000
diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_abs/pip14_abs.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/pip14_abs.txt
new file mode 100644
index 0000000000..066ef7ff44
--- /dev/null
+++ b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/pip14_abs.txt
@@ -0,0 +1 @@
+239.0 119.000000
diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_abs/pip209_abs.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/pip209_abs.txt
new file mode 100644
index 0000000000..6b6b2b75ea
--- /dev/null
+++ b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/pip209_abs.txt
@@ -0,0 +1,42 @@
+0.0 0.000000
+25.0 371.300719
+50.0 711.469045
+75.0 975.524439
+100.0 1148.028014
+125.0 1259.497043
+150.0 1257.686391
+175.0 1210.928625
+200.0 1096.750186
+225.0 1048.278440
+250.0 1007.289542
+275.0 930.525343
+300.0 853.761143
+325.0 793.129889
+350.0 756.698051
+375.0 727.103941
+400.0 697.509831
+425.0 684.095716
+450.0 670.681600
+475.0 627.334400
+500.0 583.987200
+525.0 555.453400
+550.0 526.919600
+575.0 509.744600
+600.0 492.569600
+625.0 480.273900
+650.0 467.978200
+675.0 459.605400
+700.0 451.232600
+725.0 442.528000
+750.0 433.823400
+775.0 428.085400
+800.0 422.347400
+825.0 414.169800
+850.0 405.992200
+875.0 399.161200
+900.0 392.330200
+925.0 386.123750
+950.0 379.917300
+975.0 373.710850
+1000.0 367.504400
+1025.0 361.297950
diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_abs/pip27_abs.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/pip27_abs.txt
new file mode 100644
index 0000000000..b153bd7b65
--- /dev/null
+++ b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/pip27_abs.txt
@@ -0,0 +1,42 @@
+0.0 36.377668
+25.0 108.675490
+50.0 180.654250
+75.0 230.812530
+100.0 267.209154
+125.0 294.431340
+150.0 294.786753
+175.0 290.229322
+200.0 278.302625
+225.0 259.101683
+250.0 236.753342
+275.0 209.089648
+300.0 181.425955
+325.0 153.723917
+350.0 125.964359
+375.0 108.319858
+400.0 90.675357
+425.0 81.542579
+450.0 72.409800
+475.0 62.150360
+500.0 51.890920
+525.0 46.200070
+550.0 40.509220
+575.0 37.895720
+600.0 35.282220
+625.0 34.573990
+650.0 33.865760
+675.0 33.511640
+700.0 33.157520
+725.0 32.439300
+750.0 31.721080
+775.0 31.337040
+800.0 30.953000
+825.0 30.354490
+850.0 29.755980
+875.0 28.743490
+900.0 27.731000
+925.0 26.713530
+950.0 25.696060
+975.0 24.678590
+1000.0 23.661120
+1025.0 22.643650
diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_abs/pip3_abs.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/pip3_abs.txt
new file mode 100644
index 0000000000..314a622eac
--- /dev/null
+++ b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/pip3_abs.txt
@@ -0,0 +1,42 @@
+0.0 4.671263
+25.0 11.755438
+50.0 18.303596
+75.0 21.594818
+100.0 24.886040
+125.0 25.568940
+150.0 26.251840
+175.0 23.765670
+200.0 21.279500
+225.0 19.648377
+250.0 18.017254
+275.0 15.481233
+300.0 12.945212
+325.0 10.798821
+350.0 8.652430
+375.0 7.037446
+400.0 5.422462
+425.0 4.306614
+450.0 3.190767
+475.0 2.413824
+500.0 1.636881
+525.0 1.360225
+550.0 1.083569
+575.0 0.952158
+600.0 0.820747
+625.0 0.765415
+650.0 0.710084
+675.0 0.675502
+700.0 0.640920
+725.0 0.629393
+750.0 0.617866
+775.0 0.608644
+800.0 0.599422
+825.0 0.592506
+850.0 0.585589
+875.0 0.565993
+900.0 0.546396
+925.0 0.523342
+950.0 0.500287
+975.0 0.477232
+1000.0 0.454177
+1025.0 0.431123
diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_abs/pip40_abs.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/pip40_abs.txt
new file mode 100644
index 0000000000..a8c59e6370
--- /dev/null
+++ b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/pip40_abs.txt
@@ -0,0 +1,42 @@
+0.0 67.966712
+25.0 138.663849
+50.0 207.446495
+75.0 261.568135
+100.0 275.188919
+125.0 282.952060
+150.0 275.652690
+175.0 273.155172
+200.0 275.090134
+225.0 277.025096
+250.0 270.316393
+275.0 252.606662
+300.0 234.896932
+325.0 217.187201
+350.0 195.001164
+375.0 175.206307
+400.0 155.411450
+425.0 136.352085
+450.0 117.292720
+475.0 102.676490
+500.0 88.060260
+525.0 79.873860
+550.0 71.687460
+575.0 67.422540
+600.0 63.157620
+625.0 61.809430
+650.0 60.461240
+675.0 60.124200
+700.0 59.787160
+725.0 59.067690
+750.0 58.348220
+775.0 57.790790
+800.0 57.233360
+825.0 56.060170
+850.0 54.886980
+875.0 53.337850
+900.0 51.788720
+925.0 49.964115
+950.0 48.139510
+975.0 46.314905
+1000.0 44.490300
+1025.0 42.665695
diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_abs/pip56_abs.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/pip56_abs.txt
new file mode 100644
index 0000000000..d865195727
--- /dev/null
+++ b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/pip56_abs.txt
@@ -0,0 +1,42 @@
+0.0 38.456145
+25.0 166.025721
+50.0 284.544858
+75.0 377.012015
+100.0 446.063524
+125.0 499.504599
+150.0 505.189225
+175.0 505.519238
+200.0 497.817333
+225.0 478.304754
+250.0 451.934987
+275.0 409.947136
+300.0 367.959286
+325.0 324.078128
+350.0 277.357010
+375.0 248.499373
+400.0 219.641735
+425.0 196.428468
+450.0 173.215200
+475.0 154.704500
+500.0 136.193800
+525.0 125.640590
+550.0 115.087380
+575.0 108.800890
+600.0 102.514400
+625.0 100.064700
+650.0 97.615000
+675.0 96.276610
+700.0 94.938220
+725.0 92.861690
+750.0 90.785160
+775.0 90.055110
+800.0 89.325060
+825.0 88.059650
+850.0 86.794240
+875.0 84.855560
+900.0 82.916880
+925.0 81.051205
+950.0 79.185530
+975.0 77.319855
+1000.0 75.454180
+1025.0 73.588505
diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_abs/pip7_abs.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/pip7_abs.txt
new file mode 100644
index 0000000000..99e1c5c8a5
--- /dev/null
+++ b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/pip7_abs.txt
@@ -0,0 +1,42 @@
+0.0 34.019924
+25.0 44.093802
+50.0 61.108919
+75.0 75.653515
+100.0 82.104049
+125.0 83.158541
+150.0 79.059453
+175.0 75.406087
+200.0 72.421306
+225.0 63.390359
+250.0 52.669351
+275.0 41.234264
+300.0 29.799177
+325.0 20.870132
+350.0 15.700152
+375.0 11.834032
+400.0 7.967911
+425.0 8.262145
+450.0 8.556378
+475.0 6.872918
+500.0 5.189458
+525.0 4.463007
+550.0 3.736556
+575.0 3.388884
+600.0 3.041212
+625.0 2.850908
+650.0 2.660604
+675.0 2.605709
+700.0 2.550814
+725.0 2.576432
+750.0 2.602050
+775.0 2.596560
+800.0 2.591070
+825.0 2.530685
+850.0 2.470300
+875.0 2.387956
+900.0 2.305612
+925.0 2.184842
+950.0 2.064071
+975.0 1.943301
+1000.0 1.822530
+1025.0 1.701760
diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_abs/pip93_abs.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/pip93_abs.txt
new file mode 100644
index 0000000000..feaeb62601
--- /dev/null
+++ b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/pip93_abs.txt
@@ -0,0 +1,42 @@
+0.0 21.810276
+25.0 257.793350
+50.0 467.926967
+75.0 618.753041
+100.0 711.774221
+125.0 766.258804
+150.0 754.222052
+175.0 731.032993
+200.0 691.115474
+225.0 641.410509
+250.0 589.402241
+275.0 537.968209
+300.0 486.534177
+325.0 437.452660
+350.0 391.899915
+375.0 371.103643
+400.0 350.307371
+425.0 330.622586
+450.0 310.937800
+475.0 281.839300
+500.0 252.740800
+525.0 235.518300
+550.0 218.295800
+575.0 207.375400
+600.0 196.455000
+625.0 191.063000
+650.0 185.671000
+675.0 183.225300
+700.0 180.779600
+725.0 179.061900
+750.0 177.344200
+775.0 174.579900
+800.0 171.815600
+825.0 169.620100
+850.0 167.424600
+875.0 165.797900
+900.0 164.171200
+925.0 159.643700
+950.0 155.116200
+975.0 150.588700
+1000.0 146.061200
+1025.0 141.533700
diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_abs/xe_abs_combined.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/xe_abs_combined.txt
new file mode 100644
index 0000000000..2dfd67d02f
--- /dev/null
+++ b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/xe_abs_combined.txt
@@ -0,0 +1,2 @@
+#KE XS sig
+239 676 94
diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_cex/al_cex_combined.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_cex/al_cex_combined.txt
new file mode 100644
index 0000000000..3cd6a1577f
--- /dev/null
+++ b/data/evgen/intranuke/tot_xsec/2025/pipA_cex/al_cex_combined.txt
@@ -0,0 +1,25 @@
+#KE XS sig
+85.0 55.0 27.0
+125.0 58.0 29.0
+165.0 72.0 36.0
+205.0 58.0 30.0
+245.0 64.0 32.0
+315.0 73.0 36.0
+1.0 0.1 0.0
+5.0 0.18 0.0
+20.0 3.8 0.0
+50.0 24.9 0.0
+350.0 73.0184 1.89434
+400.0 73.5171 1.90071
+450.0 71.1729 1.8706
+500.0 72.9186 1.89307
+550.0 75.562 1.92656
+600.0 71.2228 1.87125
+650.0 58.1055 1.69242
+700.0 50.2251 1.57474
+750.0 48.7787 1.55212
+800.0 52.7189 1.61295
+850.0 58.8037 1.70244
+900.0 50.7238 1.58246
+950.0 49.3772 1.56152
+1000.0 40.6988 1.41892
diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_cex/ar_cex_combined.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_cex/ar_cex_combined.txt
new file mode 100644
index 0000000000..0b62408901
--- /dev/null
+++ b/data/evgen/intranuke/tot_xsec/2025/pipA_cex/ar_cex_combined.txt
@@ -0,0 +1,5 @@
+#KE XS sig
+1 0.1 0
+5 0.54 0
+20 9.2 0
+50 48.0 0
diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_cex/bi_cex_combined.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_cex/bi_cex_combined.txt
new file mode 100644
index 0000000000..626ecacd57
--- /dev/null
+++ b/data/evgen/intranuke/tot_xsec/2025/pipA_cex/bi_cex_combined.txt
@@ -0,0 +1,25 @@
+#KE XS sig
+85.0 141.0 70.0
+125.0 165.0 82.0
+165.0 196.0 100.0
+205.0 260.0 130.0
+245.0 276.0 140.0
+315.0 304.0 150.0
+1.0 0.0 0.0
+5.0 0.0 0.0
+20.0 19.0 0.0
+50.0 107.0 0.0
+350.0 209.222 6.35579
+400.0 242.206 6.83261
+450.0 245.133 6.87326
+500.0 259.966 7.07543
+550.0 270.505 7.21545
+600.0 268.944 7.19489
+650.0 244.548 6.86515
+700.0 216.053 6.45757
+750.0 215.272 6.44602
+800.0 228.154 6.63386
+850.0 242.986 6.84348
+900.0 222.494 6.55202
+950.0 217.029 6.47198
+1000.0 202.001 6.24631
diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_cex/c_cex_combined.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_cex/c_cex_combined.txt
new file mode 100644
index 0000000000..36563c9b70
--- /dev/null
+++ b/data/evgen/intranuke/tot_xsec/2025/pipA_cex/c_cex_combined.txt
@@ -0,0 +1,25 @@
+#KE XS sig
+85.0 35.0 12.0
+125.0 38.0 12.0
+165.0 46.0 23.0
+205.0 45.0 23.0
+245.0 47.0 23.0
+315.0 45.0 22.0
+1.0 0.0 0.0
+4.0 0.0 0.0
+20.0 0.28 0.0
+50.0 8.5 0.0
+350.0 41.6826 1.09242
+400.0 42.7573 1.10621
+450.0 39.2426 1.06042
+500.0 38.3131 1.04795
+550.0 41.7988 1.09392
+600.0 38.1098 1.04521
+650.0 29.018 0.913493
+700.0 24.3415 0.837331
+750.0 25.3 0.853517
+800.0 25.1548 0.851085
+850.0 27.4205 0.888237
+900.0 27.13 0.883565
+950.0 22.7729 0.810124
+1000.0 18.8516 0.737583
diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_cex/fe_cex_combined.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_cex/fe_cex_combined.txt
new file mode 100644
index 0000000000..d2070c4ca4
--- /dev/null
+++ b/data/evgen/intranuke/tot_xsec/2025/pipA_cex/fe_cex_combined.txt
@@ -0,0 +1,25 @@
+#KE XS sig
+85.0 79.0 40.0
+125.0 83.0 41.0
+165.0 103.0 50.0
+205.0 83.0 40.0
+245.0 95.0 50.0
+315.0 98.0 50.0
+1.0 0.0 0.0
+5.0 0.08 0.0
+20.0 7.2 0.0
+50.0 42.9 0.0
+350.0 113.076 3.00739
+400.0 114.211 3.02224
+450.0 117.051 3.05903
+500.0 121.674 3.11796
+550.0 123.134 3.13633
+600.0 126.784 3.18175
+650.0 107.073 2.92758
+700.0 93.6891 2.74079
+750.0 87.6054 2.65131
+800.0 99.4484 2.82276
+850.0 99.2861 2.82048
+900.0 94.1758 2.74781
+950.0 88.0921 2.65859
+1000.0 80.7105 2.54593
diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_cex/he3_cex_combined.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_cex/he3_cex_combined.txt
new file mode 100644
index 0000000000..309869c98e
--- /dev/null
+++ b/data/evgen/intranuke/tot_xsec/2025/pipA_cex/he3_cex_combined.txt
@@ -0,0 +1,24 @@
+#KE XS sig
+1.0 0.0 0.0
+5.0 0.0 0.0
+20.0 0.0 0.0
+50.0 2.3 0.0
+70.0 2.7 0.6
+118.0 13.3 1.2
+162.0 24.1 2.0
+239.0 24.1 2.0
+330.0 15.9 1.4
+350.0 10.317 0.343312
+400.0 9.60228 0.331311
+450.0 8.219 0.306705
+500.0 7.9654 0.301969
+550.0 8.16136 0.305635
+600.0 7.66568 0.296272
+650.0 5.92506 0.26067
+700.0 4.81843 0.235184
+750.0 4.74927 0.233497
+800.0 5.54465 0.252206
+850.0 6.00575 0.26243
+900.0 5.24494 0.245327
+950.0 4.21901 0.220127
+1000.0 3.18155 0.191242
diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_cex/li_cex_combined.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_cex/li_cex_combined.txt
new file mode 100644
index 0000000000..84b9261b60
--- /dev/null
+++ b/data/evgen/intranuke/tot_xsec/2025/pipA_cex/li_cex_combined.txt
@@ -0,0 +1,25 @@
+#KE XS sig
+1.0 0.05 0.0
+5.0 0.46 0.0
+20.0 4.1 0.0
+50.0 23.3 0.0
+85.0 31.0 15.0
+125.0 43.0 21.0
+165.0 46.0 23.0
+205.0 54.0 27.0
+245.0 50.0 25.0
+315.0 0.0 0.0
+350.0 30.6134 0.742165
+400.0 26.1852 0.687236
+450.0 23.2025 0.647447
+500.0 22.434 0.63677
+550.0 24.8128 0.669239
+600.0 22.1412 0.632652
+650.0 17.8411 0.568579
+700.0 13.7971 0.500562
+750.0 13.1932 0.489567
+800.0 15.4257 0.529044
+850.0 17.1823 0.558085
+900.0 16.798 0.551867
+950.0 13.2115 0.489904
+1000.0 11.2536 0.452391
diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_cex/nb_cex_combined.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_cex/nb_cex_combined.txt
new file mode 100644
index 0000000000..6ffeb83947
--- /dev/null
+++ b/data/evgen/intranuke/tot_xsec/2025/pipA_cex/nb_cex_combined.txt
@@ -0,0 +1,25 @@
+#KE XS sig
+85.0 100.0 50.0
+125.0 105.0 52.0
+165.0 130.0 65.0
+205.0 130.0 65.0
+245.0 170.0 85.0
+315.0 154.0 80.0
+1.0 0.0 0.0
+5.0 0.0 0.0
+20.0 14.0 0.0
+50.0 65.0 0.0
+350.0 142.421 3.99979
+400.0 149.702 4.09941
+450.0 159.257 4.22642
+500.0 169.609 4.35961
+550.0 171.656 4.38544
+600.0 165.969 4.31327
+650.0 151.635 4.12545
+700.0 131.615 3.84689
+750.0 127.974 3.79394
+800.0 139.236 3.95537
+850.0 137.757 3.93457
+900.0 136.278 3.91365
+950.0 127.064 3.78057
+1000.0 114.21 3.5863
diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_cex/o_cex_combined.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_cex/o_cex_combined.txt
new file mode 100644
index 0000000000..6548828ba1
--- /dev/null
+++ b/data/evgen/intranuke/tot_xsec/2025/pipA_cex/o_cex_combined.txt
@@ -0,0 +1,2 @@
+#KE XS sig
+100.0 66.0 10.0
diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_cex/pip12_cex.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_cex/pip12_cex.txt
new file mode 100644
index 0000000000..196c4e0160
--- /dev/null
+++ b/data/evgen/intranuke/tot_xsec/2025/pipA_cex/pip12_cex.txt
@@ -0,0 +1,42 @@
+0.0 0.000000
+25.0 5.618014
+50.0 13.878380
+75.0 21.284997
+100.0 28.012695
+125.0 34.287779
+150.0 39.232917
+175.0 42.656506
+200.0 43.797770
+225.0 44.581468
+250.0 45.059311
+275.0 44.671297
+300.0 44.283283
+325.0 43.809655
+350.0 43.207607
+375.0 42.353184
+400.0 41.498761
+425.0 41.128820
+450.0 40.758880
+475.0 40.401600
+500.0 40.044320
+525.0 38.670390
+550.0 37.296460
+575.0 35.806350
+600.0 34.316240
+625.0 33.014930
+650.0 31.713620
+675.0 30.049220
+700.0 28.384820
+725.0 27.315890
+750.0 26.246960
+775.0 26.058160
+800.0 25.869360
+825.0 25.712500
+850.0 25.555640
+875.0 24.910800
+900.0 24.265960
+925.0 23.403260
+950.0 22.540560
+975.0 21.677860
+1000.0 20.815160
+1025.0 19.952460
diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_cex/pip16_cex.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_cex/pip16_cex.txt
new file mode 100644
index 0000000000..ddc1756296
--- /dev/null
+++ b/data/evgen/intranuke/tot_xsec/2025/pipA_cex/pip16_cex.txt
@@ -0,0 +1 @@
+100.0 66.000000
diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_cex/pip209_cex.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_cex/pip209_cex.txt
new file mode 100644
index 0000000000..bff6986e00
--- /dev/null
+++ b/data/evgen/intranuke/tot_xsec/2025/pipA_cex/pip209_cex.txt
@@ -0,0 +1,42 @@
+0.0 0.000000
+25.0 38.557839
+50.0 76.325289
+75.0 108.361344
+100.0 140.562302
+125.0 172.873193
+150.0 194.577447
+175.0 214.618448
+200.0 232.164568
+225.0 241.540495
+250.0 248.027820
+275.0 251.130932
+300.0 254.234044
+325.0 256.000225
+350.0 255.761009
+375.0 254.056926
+400.0 252.352843
+425.0 248.879622
+450.0 245.406400
+475.0 251.378600
+500.0 257.350800
+525.0 257.585000
+550.0 257.819200
+575.0 254.911200
+600.0 252.003200
+625.0 247.533800
+650.0 243.064400
+675.0 238.829300
+700.0 234.594200
+725.0 231.998400
+750.0 229.402600
+775.0 227.197200
+800.0 224.991800
+825.0 225.089400
+850.0 225.187000
+875.0 223.859900
+900.0 222.532800
+925.0 218.619650
+950.0 214.706500
+975.0 210.793350
+1000.0 206.880200
+1025.0 202.967050
diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_cex/pip27_cex.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_cex/pip27_cex.txt
new file mode 100644
index 0000000000..9bb4ad7d26
--- /dev/null
+++ b/data/evgen/intranuke/tot_xsec/2025/pipA_cex/pip27_cex.txt
@@ -0,0 +1,42 @@
+0.0 0.000000
+25.0 11.354138
+50.0 24.586055
+75.0 36.248169
+100.0 45.584670
+125.0 53.370762
+150.0 58.389036
+175.0 62.221933
+200.0 64.276766
+225.0 66.120062
+250.0 67.677111
+275.0 68.300706
+300.0 68.924301
+325.0 69.749263
+350.0 70.876275
+375.0 71.807350
+400.0 72.738425
+425.0 72.988112
+450.0 73.237800
+475.0 73.058240
+500.0 72.878680
+525.0 71.337520
+550.0 69.796360
+575.0 67.701580
+600.0 65.606800
+625.0 63.192810
+650.0 60.778820
+675.0 58.494510
+700.0 56.210200
+725.0 54.968290
+750.0 53.726380
+775.0 52.988210
+800.0 52.250040
+825.0 52.165250
+850.0 52.080460
+875.0 51.272470
+900.0 50.464480
+925.0 48.791145
+950.0 47.117810
+975.0 45.444475
+1000.0 43.771140
+1025.0 42.097805
diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_cex/pip3_cex.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_cex/pip3_cex.txt
new file mode 100644
index 0000000000..b5799ef983
--- /dev/null
+++ b/data/evgen/intranuke/tot_xsec/2025/pipA_cex/pip3_cex.txt
@@ -0,0 +1,42 @@
+0.0 0.000000
+25.0 1.053474
+50.0 3.360812
+75.0 6.656912
+100.0 9.767197
+125.0 12.484986
+150.0 14.193501
+175.0 15.443794
+200.0 16.271111
+225.0 17.098428
+250.0 17.184449
+275.0 16.327001
+300.0 15.469553
+325.0 14.612106
+350.0 13.922304
+375.0 12.273089
+400.0 10.623875
+425.0 9.738441
+450.0 8.853008
+475.0 8.587876
+500.0 8.322744
+525.0 7.955022
+550.0 7.587300
+575.0 7.247243
+600.0 6.907186
+625.0 6.585573
+650.0 6.263960
+675.0 6.002289
+700.0 5.740618
+725.0 5.574625
+750.0 5.408632
+775.0 5.340620
+800.0 5.272608
+825.0 5.212666
+850.0 5.152724
+875.0 4.995952
+900.0 4.839180
+925.0 4.513533
+950.0 4.187886
+975.0 3.862239
+1000.0 3.536592
+1025.0 3.210945
diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_cex/pip40_cex.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_cex/pip40_cex.txt
new file mode 100644
index 0000000000..276e31553f
--- /dev/null
+++ b/data/evgen/intranuke/tot_xsec/2025/pipA_cex/pip40_cex.txt
@@ -0,0 +1,4 @@
+1.0 0.100000
+5.0 0.540000
+20.0 9.200000
+50.0 48.000000
diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_cex/pip56_cex.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_cex/pip56_cex.txt
new file mode 100644
index 0000000000..56a711c732
--- /dev/null
+++ b/data/evgen/intranuke/tot_xsec/2025/pipA_cex/pip56_cex.txt
@@ -0,0 +1,42 @@
+0.0 0.000000
+25.0 17.793867
+50.0 37.084900
+75.0 53.829845
+100.0 67.049042
+125.0 77.917740
+150.0 84.594152
+175.0 89.476952
+200.0 91.669331
+225.0 94.846375
+250.0 97.940447
+275.0 99.717963
+300.0 101.495479
+325.0 103.895751
+350.0 107.230158
+375.0 109.857750
+400.0 112.485342
+425.0 115.157271
+450.0 117.829200
+475.0 119.200000
+500.0 120.570800
+525.0 119.857000
+550.0 119.143200
+575.0 116.807010
+600.0 114.470820
+625.0 111.063960
+650.0 107.657100
+675.0 105.288540
+700.0 102.919980
+725.0 100.170190
+750.0 97.420400
+775.0 96.130680
+800.0 94.840960
+825.0 94.281260
+850.0 93.721560
+875.0 93.032070
+900.0 92.342580
+925.0 89.909090
+950.0 87.475600
+975.0 85.042110
+1000.0 82.608620
+1025.0 80.175130
diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_cex/pip7_cex.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_cex/pip7_cex.txt
new file mode 100644
index 0000000000..8b1809d789
--- /dev/null
+++ b/data/evgen/intranuke/tot_xsec/2025/pipA_cex/pip7_cex.txt
@@ -0,0 +1,42 @@
+0.0 0.000000
+25.0 8.722758
+50.0 17.835488
+75.0 25.356245
+100.0 32.452037
+125.0 39.264520
+150.0 42.724195
+175.0 43.559340
+200.0 40.457691
+225.0 39.067836
+250.0 37.713811
+275.0 34.791308
+300.0 31.868804
+325.0 28.983016
+350.0 26.152302
+375.0 23.213785
+400.0 20.275268
+425.0 22.862424
+450.0 25.449580
+475.0 24.602360
+500.0 23.755140
+525.0 22.920730
+550.0 22.086320
+575.0 21.145780
+600.0 20.205240
+625.0 19.281160
+650.0 18.357080
+675.0 17.418370
+700.0 16.479660
+725.0 15.983770
+750.0 15.487880
+775.0 15.383570
+800.0 15.279260
+825.0 15.220700
+850.0 15.162140
+875.0 14.968180
+900.0 14.774220
+925.0 14.158470
+950.0 13.542720
+975.0 12.926970
+1000.0 12.311220
+1025.0 11.695470
diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_cex/pip93_cex.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_cex/pip93_cex.txt
new file mode 100644
index 0000000000..1d5ec9ef4c
--- /dev/null
+++ b/data/evgen/intranuke/tot_xsec/2025/pipA_cex/pip93_cex.txt
@@ -0,0 +1,42 @@
+0.0 0.000000
+25.0 25.375815
+50.0 50.213536
+75.0 71.404103
+100.0 89.522569
+125.0 105.592970
+150.0 118.972364
+175.0 129.281366
+200.0 134.984782
+225.0 140.199272
+250.0 144.642804
+275.0 146.491421
+300.0 148.340038
+325.0 151.088750
+350.0 155.187602
+375.0 154.931222
+400.0 154.674842
+425.0 156.601921
+450.0 158.529000
+475.0 160.883800
+500.0 163.238600
+525.0 163.431900
+550.0 163.625200
+575.0 160.861000
+600.0 158.096800
+625.0 153.933300
+650.0 149.769800
+675.0 146.527800
+700.0 143.285800
+725.0 140.464600
+750.0 137.643400
+775.0 136.107700
+800.0 134.572000
+825.0 134.116900
+850.0 133.661800
+875.0 132.285400
+900.0 130.909000
+925.0 127.871750
+950.0 124.834500
+975.0 121.797250
+1000.0 118.760000
+1025.0 115.722750
diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_cex/various-pip-c-cex.dat b/data/evgen/intranuke/tot_xsec/2025/pipA_cex/various-pip-c-cex.dat
new file mode 100644
index 0000000000..54aa5f1afd
--- /dev/null
+++ b/data/evgen/intranuke/tot_xsec/2025/pipA_cex/various-pip-c-cex.dat
@@ -0,0 +1,8 @@
+# values from Dytman calculations using various authors
+# inel: various
+# elas: saunders
+# abs: navon
+# cex: navon, bowles
+# KE (MeV) sig (mb)
+0.0 5
+50.0 18
diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/al_inelas_combined.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/al_inelas_combined.txt
new file mode 100644
index 0000000000..a766a054e9
--- /dev/null
+++ b/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/al_inelas_combined.txt
@@ -0,0 +1,25 @@
+#KE XS sig
+85.0 331.0 56.0
+125.0 342.0 70.0
+165.0 321.0 72.0
+205.0 269.0 72.0
+245.0 296.0 62.0
+315.0 307.0 54.0
+1.0 0.05 0.0
+5.0 0.23 0.0
+20.0 14.8 0.0
+50.0 105.5 0.0
+350.0 218.008 3.2246
+400.0 195.314 3.05941
+450.0 180.8 2.948
+500.0 177.459 2.92164
+550.0 172.621 2.88299
+600.0 175.264 2.90418
+650.0 157.907 2.7616
+700.0 132.77 2.53885
+750.0 132.371 2.53513
+800.0 154.815 2.7353
+850.0 166.336 2.83187
+900.0 168.88 2.85269
+950.0 155.613 2.74211
+1000.0 147.034 2.66782
diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/ar_inelas_combined.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/ar_inelas_combined.txt
new file mode 100644
index 0000000000..554e72b9da
--- /dev/null
+++ b/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/ar_inelas_combined.txt
@@ -0,0 +1,5 @@
+#KE XS sig
+1 0.01 0
+5 0.38 0
+20 29.2 0
+50 156.4 0
diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/bi_inelas_combined.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/bi_inelas_combined.txt
new file mode 100644
index 0000000000..b5f3cd7682
--- /dev/null
+++ b/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/bi_inelas_combined.txt
@@ -0,0 +1,24 @@
+#KE XS sig
+1.0 0.0 0.0
+5.0 0.0 0.0
+20.0 22.9 0.0
+50.0 273.5 0.0
+125.0 1257.0 535.0
+165.0 696.0 500.0
+205.0 1060.0 440.0
+245.0 1100.0 390.0
+315.0 1028.0 380.0
+350.0 469.383 9.45549
+400.0 444.792 9.21041
+450.0 477.385 9.53374
+500.0 484.607 9.60376
+550.0 489.291 9.64887
+600.0 495.926 9.71239
+650.0 473.482 9.49566
+700.0 440.889 9.17084
+750.0 439.132 9.15298
+800.0 465.285 9.41513
+850.0 498.854 9.74026
+900.0 513.101 9.87467
+950.0 487.144 9.62822
+1000.0 457.478 9.33772
diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/c_inelas_combined.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/c_inelas_combined.txt
new file mode 100644
index 0000000000..be3c23c2a3
--- /dev/null
+++ b/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/c_inelas_combined.txt
@@ -0,0 +1,25 @@
+#KE XS sig
+1.0 0.0 0.0
+4.0 0.0 0.0
+20.0 0.3 0.0
+50.0 27.6 0.0
+85.0 143.0 26.0
+125.0 213.0 33.0
+165.0 207.0 33.0
+205.0 210.0 51.0
+245.0 224.0 30.0
+315.0 200.0 22.0
+350.0 142.999 1.98726
+400.0 115.52 1.79501
+450.0 109.449 1.74911
+500.0 99.312 1.66916
+550.0 100.474 1.67855
+600.0 96.2621 1.64422
+650.0 84.498 1.5437
+700.0 74.1863 1.44909
+750.0 75.4353 1.46091
+800.0 86.9089 1.5649
+850.0 95.1002 1.63461
+900.0 96.872 1.64924
+950.0 90.5688 1.59648
+1000.0 85.6308 1.55371
diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/fe_inelas_combined.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/fe_inelas_combined.txt
new file mode 100644
index 0000000000..c35b4cddfc
--- /dev/null
+++ b/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/fe_inelas_combined.txt
@@ -0,0 +1,25 @@
+#KE XS sig
+1.0 0.0 0.0
+5.0 0.04 0.0
+20.0 21.8 0.0
+50.0 159.5 0.0
+85.0 784.0 115.0
+125.0 644.0 123.0
+165.0 474.0 130.0
+205.0 360.0 125.0
+245.0 430.0 110.0
+315.0 389.0 100.0
+350.0 313.757 4.94634
+400.0 290.315 4.76512
+450.0 277.742 4.66454
+500.0 274.254 4.63619
+550.0 274.254 4.63619
+600.0 280.418 4.68616
+650.0 250.649 4.43885
+700.0 223.718 4.20079
+750.0 223.232 4.19635
+800.0 254.218 4.46933
+850.0 264.682 4.55735
+900.0 273.118 4.62691
+950.0 258.679 4.5071
+1000.0 231.262 4.26899
diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/he3_inelas_combined.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/he3_inelas_combined.txt
new file mode 100644
index 0000000000..ef82f2a7d1
--- /dev/null
+++ b/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/he3_inelas_combined.txt
@@ -0,0 +1,24 @@
+#KE XS sig
+1.0 0.0 0.0
+5.0 0.0 0.0
+20.0 0.0 0.0
+50.0 5.0 0.0
+100.0 28.0806 0.561969
+150.0 87.7923 0.966921
+200.0 101.856 1.03459
+250.0 85.775 0.956653
+300.0 74.9047 0.898524
+350.0 67.9883 0.858778
+400.0 46.8702 0.719945
+450.0 40.1613 0.668449
+500.0 35.0431 0.625839
+550.0 32.6916 0.605111
+600.0 30.6743 0.586672
+650.0 25.8558 0.539781
+700.0 21.2103 0.489898
+750.0 23.1815 0.51171
+800.0 27.7809 0.559037
+850.0 32.242 0.601057
+900.0 32.8299 0.606352
+950.0 30.3976 0.584092
+1000.0 28.4149 0.565221
diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/li_inelas_combined.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/li_inelas_combined.txt
new file mode 100644
index 0000000000..2cd2468659
--- /dev/null
+++ b/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/li_inelas_combined.txt
@@ -0,0 +1,25 @@
+#KE XS sig
+85.0 74.0 18.0
+125.0 131.0 23.0
+165.0 191.0 26.0
+205.0 230.0 24.0
+245.0 209.0 19.0
+315.0 188.0 34.0
+1.0 0.01 0.0
+5.0 0.21 0.0
+20.0 8.7 0.0
+50.0 73.5 0.0
+350.0 105.875 1.35102
+400.0 79.196 1.17748
+450.0 68.3084 1.09694
+500.0 63.7154 1.0608
+550.0 62.8188 1.05358
+600.0 62.709 1.05269
+650.0 53.944 0.978773
+700.0 46.6429 0.911998
+750.0 48.6741 0.931113
+800.0 59.3055 1.02471
+850.0 67.1007 1.08757
+900.0 66.936 1.08629
+950.0 62.5809 1.05165
+1000.0 57.5122 1.00961
diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/nb_inelas_combined.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/nb_inelas_combined.txt
new file mode 100644
index 0000000000..a5fba324c3
--- /dev/null
+++ b/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/nb_inelas_combined.txt
@@ -0,0 +1,25 @@
+#KE XS sig
+85.0 848.0 350.0
+125.0 652.0 270.0
+165.0 552.0 280.0
+205.0 618.0 250.0
+245.0 690.0 240.0
+315.0 579.0 220.0
+1.0 0.0 0.0
+5.0 0.0 0.0
+20.0 34.0 0.0
+50.0 209.4 0.0
+350.0 345.019 6.16905
+400.0 339.559 6.12156
+450.0 338.535 6.11261
+500.0 348.659 6.20049
+550.0 348.773 6.20147
+600.0 335.577 6.08666
+650.0 316.125 5.91282
+700.0 291.554 5.68469
+750.0 282.681 5.59976
+800.0 329.662 6.03439
+850.0 334.781 6.07966
+900.0 336.146 6.09166
+950.0 314.191 5.89522
+1000.0 312.712 5.88173
diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/pip12_inelas.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/pip12_inelas.txt
new file mode 100644
index 0000000000..4bd7172a44
--- /dev/null
+++ b/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/pip12_inelas.txt
@@ -0,0 +1,42 @@
+0.0 0.000000
+25.0 23.046597
+50.0 63.821634
+75.0 98.005187
+100.0 129.437854
+125.0 159.036597
+150.0 184.263724
+175.0 202.297677
+200.0 209.541868
+225.0 205.491738
+250.0 197.998749
+275.0 188.028651
+300.0 178.058553
+325.0 168.522547
+350.0 159.637679
+375.0 147.273720
+400.0 134.909761
+425.0 124.230281
+450.0 113.550800
+475.0 108.877110
+500.0 104.203420
+525.0 101.101220
+550.0 97.999020
+575.0 94.472750
+600.0 90.946480
+625.0 88.558810
+650.0 86.171140
+675.0 84.814630
+700.0 83.458120
+725.0 83.341930
+750.0 83.225740
+775.0 84.463140
+800.0 85.700540
+825.0 87.338790
+850.0 88.977040
+875.0 89.996590
+900.0 91.016140
+925.0 90.661760
+950.0 90.307380
+975.0 89.953000
+1000.0 89.598620
+1025.0 89.244240
diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/pip209_inelas.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/pip209_inelas.txt
new file mode 100644
index 0000000000..bf34bfb67f
--- /dev/null
+++ b/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/pip209_inelas.txt
@@ -0,0 +1,42 @@
+0.0 0.000000
+25.0 134.524897
+50.0 303.329482
+75.0 444.482059
+100.0 585.634636
+125.0 726.787213
+150.0 836.236663
+175.0 933.630726
+200.0 1012.941707
+225.0 955.570912
+250.0 874.792090
+275.0 837.062939
+300.0 799.333788
+325.0 757.946675
+350.0 711.072616
+375.0 649.147217
+400.0 587.221818
+425.0 530.156709
+450.0 473.091600
+475.0 475.745900
+500.0 478.400200
+525.0 481.269200
+550.0 484.138200
+575.0 480.488600
+600.0 476.839000
+625.0 472.291500
+650.0 467.744000
+675.0 465.343400
+700.0 462.942800
+725.0 463.235600
+750.0 463.528400
+775.0 467.490300
+800.0 471.452200
+825.0 476.077700
+850.0 480.703200
+875.0 482.537800
+900.0 484.372400
+925.0 483.006200
+950.0 481.640000
+975.0 480.273800
+1000.0 478.907600
+1025.0 477.541400
diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/pip27_inelas.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/pip27_inelas.txt
new file mode 100644
index 0000000000..4bd7c705c2
--- /dev/null
+++ b/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/pip27_inelas.txt
@@ -0,0 +1,42 @@
+0.0 0.000000
+25.0 58.659614
+50.0 135.769843
+75.0 191.513095
+100.0 235.977301
+125.0 272.922142
+150.0 297.220803
+175.0 310.864870
+200.0 308.527045
+225.0 296.918334
+250.0 283.357001
+275.0 271.256065
+300.0 259.155128
+325.0 248.710000
+350.0 240.748585
+375.0 229.141674
+400.0 217.534763
+425.0 203.187582
+450.0 188.840400
+475.0 184.566000
+500.0 180.291600
+525.0 176.550900
+550.0 172.810200
+575.0 168.007200
+600.0 163.204200
+625.0 158.695400
+650.0 154.186600
+675.0 152.406000
+700.0 150.625400
+725.0 149.732600
+750.0 148.839800
+775.0 149.937100
+800.0 151.034400
+825.0 153.318700
+850.0 155.603000
+875.0 157.069300
+900.0 158.535600
+925.0 157.221350
+950.0 155.907100
+975.0 154.592850
+1000.0 153.278600
+1025.0 151.964350
diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/pip3_inelas.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/pip3_inelas.txt
new file mode 100644
index 0000000000..3d923e78d6
--- /dev/null
+++ b/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/pip3_inelas.txt
@@ -0,0 +1,42 @@
+0.0 0.000000
+25.0 4.515613
+50.0 15.394685
+75.0 28.709979
+100.0 42.025274
+125.0 51.863027
+150.0 61.700780
+175.0 68.691250
+200.0 75.681720
+225.0 79.672490
+250.0 83.663260
+275.0 79.571050
+300.0 75.478840
+325.0 69.309370
+350.0 63.139900
+375.0 58.066710
+400.0 52.993520
+425.0 48.772210
+450.0 44.550900
+475.0 40.819500
+500.0 37.088100
+525.0 34.986660
+550.0 32.885220
+575.0 30.990120
+600.0 29.095020
+625.0 27.908860
+650.0 26.722700
+675.0 26.231630
+700.0 25.740560
+725.0 25.897330
+750.0 26.054100
+775.0 26.751510
+800.0 27.448920
+825.0 28.367650
+850.0 29.286380
+875.0 29.809720
+900.0 30.333060
+925.0 30.304240
+950.0 30.275420
+975.0 30.246600
+1000.0 30.217780
+1025.0 30.188960
diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/pip40_inelas.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/pip40_inelas.txt
new file mode 100644
index 0000000000..bcba698b17
--- /dev/null
+++ b/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/pip40_inelas.txt
@@ -0,0 +1,4 @@
+1.0 0.010000
+5.0 0.380000
+20.0 29.200000
+50.0 156.400000
diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/pip56_inelas.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/pip56_inelas.txt
new file mode 100644
index 0000000000..5e9f14a8c9
--- /dev/null
+++ b/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/pip56_inelas.txt
@@ -0,0 +1,42 @@
+0.0 0.000000
+25.0 116.724276
+50.0 274.991637
+75.0 365.851601
+100.0 432.935070
+125.0 484.167543
+150.0 518.062829
+175.0 520.341822
+200.0 475.196375
+225.0 433.009306
+250.0 396.324702
+275.0 378.691585
+300.0 361.058468
+325.0 347.990511
+350.0 341.770295
+375.0 326.208599
+400.0 310.646903
+425.0 298.355652
+450.0 286.064400
+475.0 282.730500
+500.0 279.396600
+525.0 275.430000
+550.0 271.463400
+575.0 266.061000
+600.0 260.658600
+625.0 255.556400
+650.0 250.454200
+675.0 248.450600
+700.0 246.447000
+725.0 244.873400
+750.0 243.299800
+775.0 245.546700
+800.0 247.793600
+825.0 251.289700
+850.0 254.785800
+875.0 255.588800
+900.0 256.391800
+925.0 253.796050
+950.0 251.200300
+975.0 248.604550
+1000.0 246.008800
+1025.0 243.413050
diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/pip7_inelas.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/pip7_inelas.txt
new file mode 100644
index 0000000000..6c4f052fb7
--- /dev/null
+++ b/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/pip7_inelas.txt
@@ -0,0 +1,42 @@
+0.0 0.000000
+25.0 23.963741
+50.0 50.039318
+75.0 79.305496
+100.0 108.929375
+125.0 138.791721
+150.0 156.421896
+175.0 172.335734
+200.0 185.675070
+225.0 189.003721
+250.0 187.033593
+275.0 173.879032
+300.0 160.724471
+325.0 146.769901
+350.0 131.615315
+375.0 117.196448
+400.0 102.777581
+425.0 89.380151
+450.0 75.982720
+475.0 71.666120
+500.0 67.349520
+525.0 64.824320
+550.0 62.299120
+575.0 60.132570
+600.0 57.966020
+625.0 56.461890
+650.0 54.957760
+675.0 54.606430
+700.0 54.255100
+725.0 54.694270
+750.0 55.133440
+775.0 56.432640
+800.0 57.731840
+825.0 59.325640
+850.0 60.919440
+875.0 61.803250
+900.0 62.687060
+925.0 62.281740
+950.0 61.876420
+975.0 61.471100
+1000.0 61.065780
+1025.0 60.660460
diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/pip93_inelas.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/pip93_inelas.txt
new file mode 100644
index 0000000000..f3dcc94665
--- /dev/null
+++ b/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/pip93_inelas.txt
@@ -0,0 +1,42 @@
+0.0 0.000000
+25.0 133.582085
+50.0 300.674397
+75.0 402.811661
+100.0 492.778086
+125.0 574.630618
+150.0 635.486482
+175.0 658.654275
+200.0 625.289963
+225.0 593.075359
+250.0 562.190552
+275.0 535.475224
+300.0 508.759896
+325.0 484.002102
+350.0 462.180609
+375.0 427.555621
+400.0 392.930633
+425.0 368.519817
+450.0 344.109000
+475.0 343.164800
+500.0 342.220600
+525.0 339.877200
+550.0 337.533800
+575.0 332.835700
+600.0 328.137600
+625.0 321.539800
+650.0 314.942000
+675.0 313.030900
+700.0 311.119800
+725.0 311.040200
+750.0 310.960600
+775.0 312.962700
+800.0 314.964800
+825.0 317.228500
+850.0 319.492200
+875.0 322.495300
+900.0 325.498400
+925.0 322.773900
+950.0 320.049400
+975.0 317.324900
+1000.0 314.600400
+1025.0 311.875900
diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_pipro/al_pipro_combined.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_pipro/al_pipro_combined.txt
new file mode 100644
index 0000000000..f45555d112
--- /dev/null
+++ b/data/evgen/intranuke/tot_xsec/2025/pipA_pipro/al_pipro_combined.txt
@@ -0,0 +1,21 @@
+#KE XS sig
+50.0 1.2469 0.249348
+100.0 1.94516 0.311414
+150.0 4.03995 0.448701
+200.0 8.92779 0.666697
+250.0 11.3717 0.752251
+300.0 10.6734 0.728841
+350.0 10.5737 0.725434
+400.0 43.0429 1.45886
+450.0 59.2027 1.70814
+500.0 73.3176 1.89816
+550.0 96.5099 2.17264
+600.0 126.386 2.47868
+650.0 137.707 2.58431
+700.0 157.857 2.76118
+750.0 169.229 2.85553
+800.0 183.344 2.96788
+850.0 199.603 3.09144
+900.0 207.384 3.14855
+950.0 199.803 3.09292
+1000.0 205.439 3.13439
diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_pipro/bi_pipro_combined.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_pipro/bi_pipro_combined.txt
new file mode 100644
index 0000000000..bdcefbe6a9
--- /dev/null
+++ b/data/evgen/intranuke/tot_xsec/2025/pipA_pipro/bi_pipro_combined.txt
@@ -0,0 +1,21 @@
+#KE XS sig
+50.0 8.78264 1.30894
+100.0 12.686 1.573
+150.0 22.8349 2.10985
+200.0 37.4726 2.70175
+250.0 52.3055 3.19078
+300.0 57.3799 3.34154
+350.0 58.3558 3.36975
+400.0 162.381 5.60609
+450.0 209.808 6.36458
+500.0 273.823 7.25894
+550.0 356.77 8.26789
+600.0 422.543 8.98232
+650.0 457.868 9.34161
+700.0 491.242 9.6676
+750.0 531.838 10.0484
+800.0 553.306 10.2434
+850.0 626.495 10.8788
+900.0 610.882 10.7468
+950.0 636.839 10.9652
+1000.0 655.575 11.1198
diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_pipro/c_pipro_combined.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_pipro/c_pipro_combined.txt
new file mode 100644
index 0000000000..cb7ba7d442
--- /dev/null
+++ b/data/evgen/intranuke/tot_xsec/2025/pipA_pipro/c_pipro_combined.txt
@@ -0,0 +1,21 @@
+#KE XS sig
+50.0 0.580942 0.12989
+100.0 1.01665 0.171815
+150.0 2.06234 0.244668
+200.0 3.97945 0.339754
+250.0 6.15798 0.422483
+300.0 5.83846 0.411399
+350.0 5.08324 0.38392
+400.0 21.4077 0.785652
+450.0 30.3252 0.933628
+500.0 41.6826 1.09242
+550.0 55.1023 1.25308
+600.0 73.402 1.44161
+650.0 82.4356 1.52531
+700.0 88.6227 1.57978
+750.0 98.0339 1.65876
+800.0 107.068 1.73071
+850.0 112.528 1.77257
+900.0 117.612 1.81051
+950.0 115.782 1.79696
+1000.0 117.931 1.81287
diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_pipro/fe_pipro_combined.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_pipro/fe_pipro_combined.txt
new file mode 100644
index 0000000000..801f8e9125
--- /dev/null
+++ b/data/evgen/intranuke/tot_xsec/2025/pipA_pipro/fe_pipro_combined.txt
@@ -0,0 +1,21 @@
+#KE XS sig
+50.0 4.13692 0.579137
+100.0 4.21804 0.584785
+150.0 9.00389 0.854137
+200.0 15.2498 1.11116
+250.0 19.4679 1.25514
+300.0 24.0915 1.39585
+350.0 24.0104 1.39351
+400.0 71.6255 2.39973
+450.0 95.0681 2.76065
+500.0 124.351 3.15155
+550.0 163.692 3.60696
+600.0 201.979 3.99697
+650.0 224.043 4.20375
+700.0 252.92 4.45827
+750.0 271.982 4.61762
+800.0 301.022 4.84887
+850.0 312.865 4.93959
+900.0 332.495 5.08578
+950.0 317.894 4.97753
+1000.0 333.955 5.09646
diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_pipro/li_pipro_combined.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_pipro/li_pipro_combined.txt
new file mode 100644
index 0000000000..560b8472cc
--- /dev/null
+++ b/data/evgen/intranuke/tot_xsec/2025/pipA_pipro/li_pipro_combined.txt
@@ -0,0 +1,21 @@
+#KE XS sig
+50.0 0.109791 0.0448207
+100.0 0.274478 0.0708645
+150.0 1.00642 0.135668
+200.0 1.93964 0.188295
+250.0 2.4703 0.212466
+300.0 2.452 0.211679
+350.0 2.28731 0.204456
+400.0 12.8822 0.483803
+450.0 17.8594 0.568867
+500.0 22.6353 0.639585
+550.0 32.9922 0.769951
+600.0 43.1662 0.878205
+650.0 49.8086 0.941602
+700.0 54.7309 0.985667
+750.0 63.9167 1.06242
+800.0 68.345 1.09722
+850.0 73.5235 1.13636
+900.0 74.969 1.147
+950.0 73.5966 1.1369
+1000.0 73.2307 1.13419
diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_pipro/nb_pipro_combined.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_pipro/nb_pipro_combined.txt
new file mode 100644
index 0000000000..e37e450fa2
--- /dev/null
+++ b/data/evgen/intranuke/tot_xsec/2025/pipA_pipro/nb_pipro_combined.txt
@@ -0,0 +1,21 @@
+#KE XS sig
+50.0 3.41265 0.622968
+100.0 5.23273 0.771346
+150.0 12.1718 1.17606
+200.0 18.7696 1.46
+250.0 24.5711 1.67004
+300.0 31.7376 1.89743
+350.0 34.4678 1.97712
+400.0 99.5356 3.35016
+450.0 135.482 3.90234
+500.0 165.4 4.30598
+550.0 213.632 4.88317
+600.0 264.025 5.41637
+650.0 302.361 5.78626
+700.0 312.94 5.88381
+750.0 338.649 6.1136
+800.0 361.968 6.31391
+850.0 394.616 6.58273
+900.0 411.566 6.71742
+950.0 405.081 6.66627
+1000.0 430.449 6.86388
diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_pipro/pip12_pipro.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_pipro/pip12_pipro.txt
new file mode 100644
index 0000000000..b89208417a
--- /dev/null
+++ b/data/evgen/intranuke/tot_xsec/2025/pipA_pipro/pip12_pipro.txt
@@ -0,0 +1,42 @@
+0.0 0.000000
+25.0 0.000000
+50.0 0.000000
+75.0 0.641941
+100.0 1.347785
+125.0 2.053629
+150.0 2.759472
+175.0 3.285224
+200.0 3.810976
+225.0 4.217635
+250.0 4.624294
+275.0 6.558830
+300.0 8.493366
+325.0 11.127941
+350.0 13.762516
+375.0 17.314978
+400.0 20.867440
+425.0 25.793824
+450.0 30.720208
+475.0 37.552084
+500.0 44.383960
+525.0 50.486750
+550.0 56.589540
+575.0 62.419290
+600.0 68.249040
+625.0 73.884170
+650.0 79.519300
+675.0 84.715870
+700.0 89.912440
+725.0 93.825040
+750.0 97.737640
+775.0 101.255280
+800.0 104.772920
+825.0 107.488850
+850.0 110.204780
+875.0 112.194490
+900.0 114.184200
+925.0 115.433200
+950.0 116.682200
+975.0 117.931200
+1000.0 119.180200
+1025.0 120.429200
diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_pipro/pip209_pipro.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_pipro/pip209_pipro.txt
new file mode 100644
index 0000000000..bc0a5ff667
--- /dev/null
+++ b/data/evgen/intranuke/tot_xsec/2025/pipA_pipro/pip209_pipro.txt
@@ -0,0 +1,42 @@
+0.0 0.000000
+25.0 0.000000
+50.0 4.449864
+75.0 10.041480
+100.0 15.633096
+125.0 21.224712
+150.0 26.816328
+175.0 31.676054
+200.0 36.535780
+225.0 41.102760
+250.0 45.669740
+275.0 59.624350
+300.0 73.578960
+325.0 90.812500
+350.0 108.046040
+375.0 130.197790
+400.0 152.349540
+425.0 182.288550
+450.0 212.227560
+475.0 248.646280
+500.0 285.065000
+525.0 314.613700
+550.0 344.162400
+575.0 372.305800
+600.0 400.449200
+625.0 426.250700
+650.0 452.052200
+675.0 471.705800
+700.0 491.359400
+725.0 511.754600
+750.0 532.149800
+775.0 547.451200
+800.0 562.752600
+825.0 577.312300
+850.0 591.872000
+875.0 604.245700
+900.0 616.619400
+925.0 627.363500
+950.0 638.107600
+975.0 648.851700
+1000.0 659.595800
+1025.0 670.339900
diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_pipro/pip27_pipro.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_pipro/pip27_pipro.txt
new file mode 100644
index 0000000000..e7fa2503bf
--- /dev/null
+++ b/data/evgen/intranuke/tot_xsec/2025/pipA_pipro/pip27_pipro.txt
@@ -0,0 +1,42 @@
+0.0 0.000000
+25.0 0.000000
+50.0 0.059854
+75.0 1.421466
+100.0 2.783077
+125.0 4.144689
+150.0 5.506300
+175.0 6.448950
+200.0 7.391600
+225.0 8.254454
+250.0 9.117308
+275.0 13.017603
+300.0 16.917898
+325.0 21.945389
+350.0 26.972880
+375.0 33.167470
+400.0 39.362060
+425.0 47.945710
+450.0 56.529360
+475.0 68.110590
+500.0 79.691820
+525.0 89.158230
+550.0 98.624640
+575.0 108.490070
+600.0 118.355500
+625.0 127.946640
+650.0 137.537780
+675.0 146.221190
+700.0 154.904600
+725.0 162.226300
+750.0 169.548000
+775.0 176.515700
+800.0 183.483400
+825.0 187.678000
+850.0 191.872600
+875.0 195.493600
+900.0 199.114600
+925.0 201.334100
+950.0 203.553600
+975.0 205.773100
+1000.0 207.992600
+1025.0 210.212100
diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_pipro/pip3_pipro.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_pipro/pip3_pipro.txt
new file mode 100644
index 0000000000..0d83cb0a3d
--- /dev/null
+++ b/data/evgen/intranuke/tot_xsec/2025/pipA_pipro/pip3_pipro.txt
@@ -0,0 +1,24 @@
+## pi+ -> he3-3
+## File generated by MakeTextFiles.cxx
+## KE pipro_xs
+0 0
+50 0
+100 0
+150 0
+200 0
+250 0
+300 0
+350 0
+400 11.653
+450 24.1586
+500 26.1481
+550 28.9903
+600 32.2588
+650 35.8115
+700 39.6485
+750 43.2012
+800 46.0434
+850 47.8908
+900 49.1698
+950 50.1645
+1000 51.3014
diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_pipro/pip56_pipro.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_pipro/pip56_pipro.txt
new file mode 100644
index 0000000000..ba1dac6d46
--- /dev/null
+++ b/data/evgen/intranuke/tot_xsec/2025/pipA_pipro/pip56_pipro.txt
@@ -0,0 +1,42 @@
+0.0 0.000000
+25.0 0.000000
+50.0 2.076566
+75.0 4.161252
+100.0 6.245938
+125.0 8.330624
+150.0 10.415310
+175.0 12.410768
+200.0 14.406226
+225.0 16.385462
+250.0 18.364698
+275.0 24.626859
+300.0 30.889020
+325.0 38.870850
+350.0 46.852680
+375.0 57.340990
+400.0 67.829300
+425.0 81.789350
+450.0 95.749400
+475.0 113.546260
+500.0 131.343120
+525.0 146.584870
+550.0 161.826620
+575.0 177.611810
+600.0 193.397000
+625.0 208.160100
+650.0 222.923200
+675.0 236.656200
+700.0 250.389200
+725.0 261.477800
+750.0 272.566400
+775.0 283.411600
+800.0 294.256800
+825.0 300.754200
+850.0 307.251600
+875.0 313.448900
+900.0 319.646200
+925.0 323.190950
+950.0 326.735700
+975.0 330.280450
+1000.0 333.825200
+1025.0 337.369950
diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_pipro/pip7_pipro.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_pipro/pip7_pipro.txt
new file mode 100644
index 0000000000..b3ce0cba10
--- /dev/null
+++ b/data/evgen/intranuke/tot_xsec/2025/pipA_pipro/pip7_pipro.txt
@@ -0,0 +1,42 @@
+0.0 0.000000
+25.0 0.000000
+50.0 0.000000
+75.0 0.202199
+100.0 0.521508
+125.0 0.840817
+150.0 1.160126
+175.0 1.394347
+200.0 1.628568
+225.0 1.829851
+250.0 2.031134
+275.0 3.218712
+300.0 4.406290
+325.0 5.998266
+350.0 7.590242
+375.0 9.606742
+400.0 11.623242
+425.0 14.677262
+450.0 17.731282
+475.0 21.819171
+500.0 25.907060
+525.0 29.599700
+550.0 33.292340
+575.0 36.979490
+600.0 40.666640
+625.0 44.794780
+650.0 48.922920
+675.0 52.458200
+700.0 55.993480
+725.0 59.029210
+750.0 62.064940
+775.0 64.580980
+800.0 67.097020
+825.0 68.983590
+850.0 70.870160
+875.0 71.801560
+900.0 72.732960
+925.0 73.225185
+950.0 73.717410
+975.0 74.209635
+1000.0 74.701860
+1025.0 75.194085
diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_pipro/pip93_pipro.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_pipro/pip93_pipro.txt
new file mode 100644
index 0000000000..4bbfbb0062
--- /dev/null
+++ b/data/evgen/intranuke/tot_xsec/2025/pipA_pipro/pip93_pipro.txt
@@ -0,0 +1,42 @@
+0.0 0.000000
+25.0 0.000000
+50.0 1.660822
+75.0 4.453511
+100.0 7.246199
+125.0 10.038888
+150.0 12.831576
+175.0 15.664071
+200.0 18.496566
+225.0 21.420073
+250.0 24.343580
+275.0 33.079960
+300.0 41.816340
+325.0 53.487580
+350.0 65.158820
+375.0 79.241710
+400.0 93.324600
+425.0 111.514040
+450.0 129.703480
+475.0 152.659200
+500.0 175.614920
+525.0 195.897460
+550.0 216.180000
+575.0 233.925800
+600.0 251.671600
+625.0 268.996500
+650.0 286.321400
+675.0 301.155000
+700.0 315.988600
+725.0 329.047700
+750.0 342.106800
+775.0 353.027300
+800.0 363.947800
+825.0 373.161900
+850.0 382.376000
+875.0 391.556000
+900.0 400.736000
+925.0 408.107350
+950.0 415.478700
+975.0 422.850050
+1000.0 430.221400
+1025.0 437.592750
diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_tot/al_tot_combined.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_tot/al_tot_combined.txt
new file mode 100644
index 0000000000..3ea6ede51e
--- /dev/null
+++ b/data/evgen/intranuke/tot_xsec/2025/pipA_tot/al_tot_combined.txt
@@ -0,0 +1,25 @@
+#KE XS sig
+85.0 638.0 47.63
+125.0 740.0 56.57
+165.0 719.0 57.28
+205.0 654.0 53.91
+245.0 578.0 51.66
+315.0 499.0 47.42
+1.0 20.0 0.0
+5.0 38.4 0.0
+20.0 118.4 0.0
+50.0 350.0 0.0
+350.0 440.953 4.68966
+400.0 400.803 4.47106
+450.0 368.384 4.28643
+500.0 364.842 4.26578
+550.0 380.104 4.35409
+600.0 409.631 4.52004
+650.0 385.74 4.38625
+700.0 371.925 4.30698
+750.0 384.444 4.37887
+800.0 422.748 4.59184
+850.0 454.32 4.76021
+900.0 455.168 4.76465
+950.0 429.881 4.63041
+1000.0 417.112 4.56113
diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_tot/bi_tot_combined.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_tot/bi_tot_combined.txt
new file mode 100644
index 0000000000..2b02806417
--- /dev/null
+++ b/data/evgen/intranuke/tot_xsec/2025/pipA_tot/bi_tot_combined.txt
@@ -0,0 +1,25 @@
+#KE XS sig
+85.0 2980.0 646.22
+125.0 2660.0 488.26
+165.0 2446.0 424.26
+205.0 2270.0 431.39
+245.0 2230.0 377.36
+315.0 1950.0 368.92
+1.0 0.0 0.0
+5.0 0.0 0.0
+20.0 448.0 0.0
+50.0 1257.0 0.0
+350.0 1656.41 17.98
+400.0 1594.34 17.6399
+450.0 1572.29 17.5175
+500.0 1568.77 17.4979
+550.0 1615.23 17.7551
+600.0 1673.39 18.0719
+650.0 1635.52 17.8663
+700.0 1616.4 17.7615
+750.0 1613.66 17.7465
+800.0 1661.68 18.0086
+850.0 1767.26 18.5719
+900.0 1748.72 18.4742
+950.0 1727.45 18.3615
+1000.0 1674.17 18.0761
diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_tot/c_tot_combined.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_tot/c_tot_combined.txt
new file mode 100644
index 0000000000..2c5894f964
--- /dev/null
+++ b/data/evgen/intranuke/tot_xsec/2025/pipA_tot/c_tot_combined.txt
@@ -0,0 +1,33 @@
+#KE XS sig
+1.0 0.0 0.0
+4.0 5.1 0.0
+20.0 41.8 0.0
+50.0 131.7 0.0
+85.0 287.0 21.63
+125.0 417.0 24.17
+165.0 447.0 23.41
+205.0 412.0 21.84
+245.0 366.0 21.19
+315.0 309.0 15.65
+42.0 125.0 14.0
+45.0 135.0 15.0
+46.5 137.0 14.0
+48.0 140.0 20.0
+49.5 158.0 19.0
+50.0 152.0 14.0
+54.0 147.0 14.0
+65.0 202.0 17.0
+350.0 243.182 2.65777
+400.0 209.488 2.46678
+450.0 196.242 2.38752
+500.0 191.914 2.36105
+550.0 206.409 2.44859
+600.0 215.152 2.49991
+650.0 203.272 2.42991
+700.0 195.051 2.38027
+750.0 206.118 2.44686
+800.0 227.323 2.56964
+850.0 243.618 2.66015
+900.0 248.934 2.68901
+950.0 235.514 2.61553
+1000.0 228.601 2.57686
diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_tot/fe_tot_combined.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_tot/fe_tot_combined.txt
new file mode 100644
index 0000000000..d30f8b9959
--- /dev/null
+++ b/data/evgen/intranuke/tot_xsec/2025/pipA_tot/fe_tot_combined.txt
@@ -0,0 +1,25 @@
+#KE XS sig
+1.0 0.0 0.0
+5.0 15.4 0.0
+20.0 247.7 0.0
+50.0 578.0 0.0
+85.0 1284.0 100.6
+125.0 1254.0 106.3
+165.0 1154.0 106.3
+205.0 1050.0 98.99
+245.0 936.0 98.99
+315.0 807.0 92.2
+350.0 738.238 7.73841
+400.0 677.32 7.41226
+450.0 644.305 7.22935
+500.0 638.384 7.19606
+550.0 666.044 7.3503
+600.0 711.469 7.59682
+650.0 677.401 7.4127
+700.0 661.907 7.32744
+750.0 676.427 7.40737
+800.0 746.268 7.78038
+850.0 758.355 7.84314
+900.0 788.124 7.9956
+950.0 743.591 7.76642
+1000.0 720.149 7.64301
diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_tot/he3_tot_combined.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_tot/he3_tot_combined.txt
new file mode 100644
index 0000000000..707e091075
--- /dev/null
+++ b/data/evgen/intranuke/tot_xsec/2025/pipA_tot/he3_tot_combined.txt
@@ -0,0 +1,24 @@
+#KE XS sig
+1.0 0.0 0.0
+5.0 0.0 0.0
+20.0 11.0 0.0
+50.0 16.0 0.0
+100.0 58.5128 0.821278
+150.0 127.711 1.21333
+200.0 138.766 1.26476
+250.0 115.861 1.15567
+300.0 98.1553 1.06371
+350.0 86.7663 1.00009
+400.0 64.5762 0.862782
+450.0 57.2217 0.812167
+500.0 54.2016 0.790443
+550.0 54.9509 0.795888
+600.0 58.2592 0.819496
+650.0 55.1583 0.797389
+700.0 53.948 0.788592
+750.0 59.0661 0.825152
+800.0 67.3427 0.881069
+850.0 73.3831 0.919735
+900.0 73.8211 0.922476
+950.0 69.2217 0.893276
+1000.0 65.7289 0.870448
diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_tot/li_tot_combined.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_tot/li_tot_combined.txt
new file mode 100644
index 0000000000..4e7b7f5167
--- /dev/null
+++ b/data/evgen/intranuke/tot_xsec/2025/pipA_tot/li_tot_combined.txt
@@ -0,0 +1,25 @@
+#KE XS sig
+1.0 16.0 0.0
+5.0 30.7 0.0
+20.0 72.3 0.0
+50.0 172.6 0.0
+85.0 149.0 11.7
+125.0 288.0 16.12
+165.0 361.0 16.12
+205.0 343.0 12.65
+245.0 301.0 9.49
+315.0 228.0 7.21
+350.0 158.026 1.70048
+400.0 128.126 1.53118
+450.0 115.354 1.45286
+500.0 113.304 1.4399
+550.0 123.789 1.50505
+600.0 130.432 1.5449
+650.0 124.192 1.50749
+700.0 117.678 1.46742
+750.0 128.401 1.53282
+800.0 145.693 1.63278
+850.0 160.478 1.71362
+900.0 161.247 1.71772
+950.0 151.292 1.66386
+1000.0 143.79 1.62208
diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_tot/nb_tot_combined.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_tot/nb_tot_combined.txt
new file mode 100644
index 0000000000..9df1f91454
--- /dev/null
+++ b/data/evgen/intranuke/tot_xsec/2025/pipA_tot/nb_tot_combined.txt
@@ -0,0 +1,25 @@
+#KE XS sig
+85.0 1753.0 340.0
+125.0 1682.0 234.31
+165.0 1562.0 234.31
+205.0 1433.0 233.24
+245.0 1300.0 233.24
+315.0 1123.0 216.33
+1.0 0.0 0.0
+5.0 0.0 0.0
+20.0 373.2 0.0
+50.0 818.1 0.0
+350.0 1003.77 10.6857
+400.0 944.963 10.3679
+450.0 917.661 10.2171
+500.0 905.148 10.1472
+550.0 944.849 10.3673
+600.0 956.452 10.4308
+650.0 954.063 10.4177
+700.0 911.291 10.1815
+750.0 916.865 10.2126
+800.0 1017.2 10.7569
+850.0 1040.86 10.8813
+900.0 1040.29 10.8783
+950.0 999.565 10.6633
+1000.0 1008.67 10.7117
diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_tot/pip12_tot.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_tot/pip12_tot.txt
new file mode 100644
index 0000000000..555cb56f83
--- /dev/null
+++ b/data/evgen/intranuke/tot_xsec/2025/pipA_tot/pip12_tot.txt
@@ -0,0 +1,42 @@
+0.0 0.000000
+25.0 69.563360
+50.0 145.294109
+75.0 228.853232
+100.0 293.829802
+125.0 346.847561
+150.0 371.192835
+175.0 387.897862
+200.0 393.142519
+225.0 380.621682
+250.0 361.922982
+275.0 336.278314
+300.0 310.633646
+325.0 287.046311
+350.0 266.544974
+375.0 249.125471
+400.0 231.705968
+425.0 220.576484
+450.0 209.447000
+475.0 206.644000
+500.0 203.841000
+525.0 203.219400
+550.0 202.597800
+575.0 202.478700
+600.0 202.359600
+625.0 203.780000
+650.0 205.200400
+675.0 207.291800
+700.0 209.383200
+725.0 212.229800
+750.0 215.076400
+775.0 219.642600
+800.0 224.208800
+825.0 228.255100
+850.0 232.301400
+875.0 234.549700
+900.0 236.798000
+925.0 236.520600
+950.0 236.243200
+975.0 235.965800
+1000.0 235.688400
+1025.0 235.411000
diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_tot/pip209_tot.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_tot/pip209_tot.txt
new file mode 100644
index 0000000000..00fca3ece6
--- /dev/null
+++ b/data/evgen/intranuke/tot_xsec/2025/pipA_tot/pip209_tot.txt
@@ -0,0 +1,42 @@
+0.0 0.000000
+25.0 639.732111
+50.0 1293.489507
+75.0 1727.722614
+100.0 2058.020751
+125.0 2319.028909
+150.0 2442.885841
+175.0 2471.016636
+200.0 2355.558225
+225.0 2243.203861
+250.0 2135.346561
+275.0 2042.373467
+300.0 1949.400374
+325.0 1868.971143
+350.0 1807.357703
+375.0 1740.436797
+400.0 1673.515890
+425.0 1637.461945
+450.0 1601.408000
+475.0 1603.106000
+500.0 1604.804000
+525.0 1608.922000
+550.0 1613.040000
+575.0 1617.451000
+600.0 1621.862000
+625.0 1626.351000
+650.0 1630.840000
+675.0 1635.485000
+700.0 1640.130000
+725.0 1649.517000
+750.0 1658.904000
+775.0 1670.224000
+800.0 1681.544000
+825.0 1692.649000
+850.0 1703.754000
+875.0 1709.805000
+900.0 1715.856000
+925.0 1715.114500
+950.0 1714.373000
+975.0 1713.631500
+1000.0 1712.890000
+1025.0 1712.148500
diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_tot/pip27_tot.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_tot/pip27_tot.txt
new file mode 100644
index 0000000000..361998c4b0
--- /dev/null
+++ b/data/evgen/intranuke/tot_xsec/2025/pipA_tot/pip27_tot.txt
@@ -0,0 +1,42 @@
+0.0 0.000000
+25.0 174.359686
+50.0 333.361385
+75.0 449.569756
+100.0 541.962436
+125.0 618.477989
+150.0 648.054246
+175.0 660.877649
+200.0 648.571770
+225.0 620.228526
+250.0 587.536797
+275.0 553.488497
+300.0 519.440196
+325.0 487.727622
+350.0 459.518637
+375.0 438.224777
+400.0 416.930917
+425.0 403.974059
+450.0 391.017200
+475.0 387.885000
+500.0 384.752800
+525.0 383.246500
+550.0 381.740200
+575.0 382.094300
+600.0 382.448400
+625.0 384.408600
+650.0 386.368800
+675.0 390.633200
+700.0 394.897600
+725.0 399.366500
+750.0 403.835400
+775.0 410.778200
+800.0 417.721000
+825.0 423.516600
+850.0 429.312200
+875.0 432.579000
+900.0 435.845800
+925.0 434.060250
+950.0 432.274700
+975.0 430.489150
+1000.0 428.703600
+1025.0 426.918050
diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_tot/pip3_tot.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_tot/pip3_tot.txt
new file mode 100644
index 0000000000..b125ad30a2
--- /dev/null
+++ b/data/evgen/intranuke/tot_xsec/2025/pipA_tot/pip3_tot.txt
@@ -0,0 +1,42 @@
+0.0 0.000000
+25.0 11.965821
+50.0 29.880722
+75.0 48.528254
+100.0 67.175785
+125.0 79.272973
+150.0 91.370160
+175.0 99.585690
+200.0 107.801220
+225.0 110.626570
+250.0 113.451920
+275.0 107.138440
+300.0 100.824960
+325.0 92.670530
+350.0 84.516100
+375.0 78.350160
+400.0 72.184220
+425.0 67.863780
+450.0 63.543340
+475.0 60.692630
+500.0 57.841920
+525.0 56.900130
+550.0 55.958340
+575.0 55.630970
+600.0 55.303600
+625.0 55.790050
+650.0 56.276500
+675.0 57.515680
+700.0 58.754860
+725.0 60.267250
+750.0 61.779640
+775.0 63.645920
+800.0 65.512200
+825.0 67.039570
+850.0 68.566940
+875.0 69.233220
+900.0 69.899500
+925.0 69.530050
+950.0 69.160600
+975.0 68.791150
+1000.0 68.421700
+1025.0 68.052250
diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_tot/pip56_tot.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_tot/pip56_tot.txt
new file mode 100644
index 0000000000..41c5998854
--- /dev/null
+++ b/data/evgen/intranuke/tot_xsec/2025/pipA_tot/pip56_tot.txt
@@ -0,0 +1,42 @@
+0.0 0.000000
+25.0 300.906858
+50.0 597.070147
+75.0 797.154939
+100.0 946.500673
+125.0 1062.020368
+150.0 1108.007638
+175.0 1115.338011
+200.0 1064.683039
+225.0 1008.029216
+250.0 951.316894
+275.0 900.369427
+300.0 849.421961
+325.0 803.029811
+350.0 763.470637
+375.0 733.610491
+400.0 703.750346
+425.0 688.304273
+450.0 672.858200
+475.0 670.181300
+500.0 667.504400
+525.0 667.512500
+550.0 667.520600
+575.0 669.280800
+600.0 671.041000
+625.0 674.845300
+650.0 678.649600
+675.0 686.672000
+700.0 694.694400
+725.0 699.383000
+750.0 704.071600
+775.0 715.143900
+800.0 726.216200
+825.0 734.384600
+850.0 742.553000
+875.0 746.925200
+900.0 751.297400
+925.0 747.947300
+950.0 744.597200
+975.0 741.247100
+1000.0 737.897000
+1025.0 734.546900
diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_tot/pip7_tot.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_tot/pip7_tot.txt
new file mode 100644
index 0000000000..a25d2c8d50
--- /dev/null
+++ b/data/evgen/intranuke/tot_xsec/2025/pipA_tot/pip7_tot.txt
@@ -0,0 +1,42 @@
+0.0 31.567210
+25.0 77.093580
+50.0 129.095645
+75.0 180.423470
+100.0 223.582918
+125.0 261.296781
+150.0 278.236293
+175.0 293.011199
+200.0 304.539196
+225.0 298.503431
+250.0 284.994095
+275.0 259.154243
+300.0 233.314390
+325.0 209.293791
+350.0 188.002074
+375.0 169.121417
+400.0 150.240760
+425.0 138.980280
+450.0 127.719800
+475.0 124.960400
+500.0 122.201000
+525.0 121.807600
+550.0 121.414200
+575.0 121.646600
+600.0 121.879000
+625.0 123.388700
+650.0 124.898400
+675.0 127.088800
+700.0 129.279200
+725.0 132.283800
+750.0 135.288400
+775.0 138.993900
+800.0 142.699400
+825.0 146.060800
+850.0 149.422200
+875.0 150.961100
+900.0 152.500000
+925.0 151.850400
+950.0 151.200800
+975.0 150.551200
+1000.0 149.901600
+1025.0 149.252000
diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_tot/pip93_tot.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_tot/pip93_tot.txt
new file mode 100644
index 0000000000..6fcf39043f
--- /dev/null
+++ b/data/evgen/intranuke/tot_xsec/2025/pipA_tot/pip93_tot.txt
@@ -0,0 +1,42 @@
+0.0 0.000000
+25.0 417.359266
+50.0 819.543914
+75.0 1093.709470
+100.0 1294.771322
+125.0 1447.097372
+150.0 1508.911514
+175.0 1518.968634
+200.0 1451.390218
+225.0 1377.367480
+250.0 1303.522138
+275.0 1236.830704
+300.0 1170.139269
+325.0 1110.577360
+350.0 1061.709737
+375.0 1021.927369
+400.0 982.145002
+425.0 962.711601
+450.0 943.278200
+475.0 938.546400
+500.0 933.814600
+525.0 934.724600
+550.0 935.634600
+575.0 934.997600
+600.0 934.360600
+625.0 935.532300
+650.0 936.704000
+675.0 943.939100
+700.0 951.174200
+725.0 959.615000
+750.0 968.055800
+775.0 976.678500
+800.0 985.301200
+825.0 994.128600
+850.0 1002.956000
+875.0 1012.136500
+900.0 1021.317000
+925.0 1018.399250
+950.0 1015.481500
+975.0 1012.563750
+1000.0 1009.646000
+1025.0 1006.728250
diff --git a/data/evgen/intranuke/tot_xsec/README.md b/data/evgen/intranuke/tot_xsec/README.md
new file mode 100644
index 0000000000..917e7c29cc
--- /dev/null
+++ b/data/evgen/intranuke/tot_xsec/README.md
@@ -0,0 +1,28 @@
+
+The first spline files for pion-nucleus total cross sections were made at Univ. of Pittsburgh in 2018.
+Those results had issues wihch made certain cases (e.g. pi charge exchange for Ar40) give odd results
+that aren't consistent with the undelying data. In addition, only CEM03 was available for the first
+effort and it has proven unable to fit data. Finally, the code was still using pion-nucleus elastic
+cross sections and this has been discontinued. The new effort (2025) was undertaken by
+Mohamed Ismail (mis90@pitt.edu) and Steve Dytman (dytman@pitt.edu) at Univ., of Pittsburgh
+to fix these and other issues. Dytman should be contacted for all questions.
+
+The normalizing cross sections are now total reaction cross sections instead of the total cross
+sections used for the 2018 versions. Ashery (A>4) and Lehmann (A<=4) are used for 50400 MeV where there is presently no data and calculations are mostly
+reliable (minimal nuclear effects).
+
+Splines are built at A=3, 7, 12, 27, 56, 93, and 209 for charge exchange (cex), inelastic (inel),
+absorption, and pion production (pipro). Files labeled e,g. c_pip_combined_abs.txt have the
+amalgam of the 3 sources of input data. Files labeled e.g. pip12_abs.txt have the
+results of smoothing via ROOT. These files are all read into GENIE via INukeHadroData2025.
+If probe is pi0, cross sections are modified inside HAIntranuke2025 according to results from hN.
+
+Only hA pionA splines have been modified. Similar updates of pA and nA splines are anticipated
+in the future.
+
+references:
+Ashery, et al., Phys Rev C 23, 2173 (1981)
+Lehmann, et al., Phys Rev C 55, 2391 (1997)
+SAID: downloaded from web site httphttps://gwdac.phys.gwu.edu/ 2009-2018.
diff --git a/data/evgen/intranuke/tot_xsec/pipA_abs/ashery-pip-li-abs.dat b/data/evgen/intranuke/tot_xsec/pipA_abs/ashery-pip-li-abs.dat
index 91cd0cafb3..0c7216e755 100644
--- a/data/evgen/intranuke/tot_xsec/pipA_abs/ashery-pip-li-abs.dat
+++ b/data/evgen/intranuke/tot_xsec/pipA_abs/ashery-pip-li-abs.dat
@@ -4,3 +4,4 @@
165 124. 30.
205 59. 33.
245 42. 30.
+315 0 0
diff --git a/data/evgen/intranuke/tot_xsec/pipA_abs/kotlinski-pip-ar-abs.dat b/data/evgen/intranuke/tot_xsec/pipA_abs/kotlinski-pip-ar-abs.dat
new file mode 100644
index 0000000000..342a279269
--- /dev/null
+++ b/data/evgen/intranuke/tot_xsec/pipA_abs/kotlinski-pip-ar-abs.dat
@@ -0,0 +1,9 @@
+
+#Kotlinski - LADS - Eur. Phys. J. A9. 537 (2000)
+# pi+ Ar total abs cross section
+#KEpi sigma (mb) uncertainty (mb)
+70 180 43
+118 320 65
+162 351 49
+239 283 28
+330 225 17
diff --git a/data/evgen/intranuke/tot_xsec/pipA_abs/kotlinski-pip-n-abs.dat b/data/evgen/intranuke/tot_xsec/pipA_abs/kotlinski-pip-n-abs.dat
new file mode 100644
index 0000000000..a22b144890
--- /dev/null
+++ b/data/evgen/intranuke/tot_xsec/pipA_abs/kotlinski-pip-n-abs.dat
@@ -0,0 +1,5 @@
+
+#Kotlinski - LADS - Eur. Phys. J. A9. 537 (2000)
+# pi+ N total abs cross section
+#KEpi sigma (mb) uncertainty (mb)
+239 119 10
diff --git a/data/evgen/intranuke/tot_xsec/pipA_abs/kotlinski-pip-xe-abs.dat b/data/evgen/intranuke/tot_xsec/pipA_abs/kotlinski-pip-xe-abs.dat
new file mode 100644
index 0000000000..058ef6d12c
--- /dev/null
+++ b/data/evgen/intranuke/tot_xsec/pipA_abs/kotlinski-pip-xe-abs.dat
@@ -0,0 +1,5 @@
+
+#Kotlinski - LADS - Eur. Phys. J. A9. 537 (2000)
+# pi+ Xe total abs cross section
+#KEpi sigma (mb) uncertainty (mb)
+239 676 94
diff --git a/data/evgen/intranuke/tot_xsec/pipA_abs/pinzon-pip-c-abs.dat b/data/evgen/intranuke/tot_xsec/pipA_abs/pinzon-pip-c-abs.dat
new file mode 100644
index 0000000000..df6375cc93
--- /dev/null
+++ b/data/evgen/intranuke/tot_xsec/pipA_abs/pinzon-pip-c-abs.dat
@@ -0,0 +1,7 @@
+#DUET expt - Pinzon et al. PR C95, 045203 (2019)
+# pip C total absorption
+105.6 153.8 12.0
+118.1 182.1 19.2
+135.6 160.8 16.6
+160.5 161.4 15.7
+186.9 159.4 15.3
diff --git a/data/evgen/intranuke/tot_xsec/pipA_cex/ashery-pip-li-cex.dat b/data/evgen/intranuke/tot_xsec/pipA_cex/ashery-pip-li-cex.dat
index 4ef6923b3e..fe0046888d 100644
--- a/data/evgen/intranuke/tot_xsec/pipA_cex/ashery-pip-li-cex.dat
+++ b/data/evgen/intranuke/tot_xsec/pipA_cex/ashery-pip-li-cex.dat
@@ -4,3 +4,4 @@
165 46. 23.
205 54. 27.
245 50. 25.
+315 0 0
diff --git a/data/evgen/intranuke/tot_xsec/pipA_cex/ashery-pip-pim-A-cex.dat b/data/evgen/intranuke/tot_xsec/pipA_cex/ashery-pip-pim-A-cex.dat
new file mode 100644
index 0000000000..4446767a5f
--- /dev/null
+++ b/data/evgen/intranuke/tot_xsec/pipA_cex/ashery-pip-pim-A-cex.dat
@@ -0,0 +1,12 @@
+#Ashery (LAMPF) 160 MeV
+# PRC 30, 946 (1984)
+probe target xs (mb) error (mb)
+
+pi+/- 12C 64 10
+pi+/- 16O 80 12
+pi+ Ni 158 20
+pi+ Pb 252 30
+
+pi- 18O 73 15
+pi- 129Sn 127 25
+pi- Pb 113 16
diff --git a/data/evgen/intranuke/tot_xsec/pipA_inelas/ashery-pip-al-inelas.dat b/data/evgen/intranuke/tot_xsec/pipA_inelas/ashery-pip-al-inelas.dat
index feae215c82..35004fcedd 100644
--- a/data/evgen/intranuke/tot_xsec/pipA_inelas/ashery-pip-al-inelas.dat
+++ b/data/evgen/intranuke/tot_xsec/pipA_inelas/ashery-pip-al-inelas.dat
@@ -1,5 +1,6 @@
# Data at 85 MeV omitted in favor of Aniol data
# KE Inelas Sig
+85 331 56
125 342. 70.
165 321. 72.
205 269. 72.
diff --git a/data/evgen/intranuke/tot_xsec/pipA_inelas/ashery-pip-c-inelas.dat b/data/evgen/intranuke/tot_xsec/pipA_inelas/ashery-pip-c-inelas.dat
index 15585822a1..6d1ee8d913 100644
--- a/data/evgen/intranuke/tot_xsec/pipA_inelas/ashery-pip-c-inelas.dat
+++ b/data/evgen/intranuke/tot_xsec/pipA_inelas/ashery-pip-c-inelas.dat
@@ -1,5 +1,6 @@
# Data at 85 MeV omitted in favor of Aniol data
# KE Inelas Sig
+85 143 26
125 213. 33.
165 207. 33.
205 210. 51.
diff --git a/data/evgen/intranuke/tot_xsec/pipA_inelas/ashery-pip-fe-inelas.dat b/data/evgen/intranuke/tot_xsec/pipA_inelas/ashery-pip-fe-inelas.dat
index 9b97b43942..06a98b19c1 100644
--- a/data/evgen/intranuke/tot_xsec/pipA_inelas/ashery-pip-fe-inelas.dat
+++ b/data/evgen/intranuke/tot_xsec/pipA_inelas/ashery-pip-fe-inelas.dat
@@ -1,5 +1,6 @@
# Data at 85 MeV omitted in favor of Aniol data
# KE Inelas Sig
+85 784 115
125 644. 123.
165 474. 130.
205 360. 125.
diff --git a/data/evgen/intranuke/tot_xsec/pipA_inelas/ashery-pip-li-inelas.dat b/data/evgen/intranuke/tot_xsec/pipA_inelas/ashery-pip-li-inelas.dat
index 019de68d88..b2f98c936f 100644
--- a/data/evgen/intranuke/tot_xsec/pipA_inelas/ashery-pip-li-inelas.dat
+++ b/data/evgen/intranuke/tot_xsec/pipA_inelas/ashery-pip-li-inelas.dat
@@ -1,5 +1,6 @@
# Data at 85 MeV omitted in favor of Aniol data
# KE Inelas Sig
+85 74 18
125 131. 23.
165 191. 26.
205 230. 24.
diff --git a/data/evgen/intranuke/tot_xsec/pipA_inelas/ashery-pip-nb-inelas.dat b/data/evgen/intranuke/tot_xsec/pipA_inelas/ashery-pip-nb-inelas.dat
index f46c1ac4d2..1e44752fda 100644
--- a/data/evgen/intranuke/tot_xsec/pipA_inelas/ashery-pip-nb-inelas.dat
+++ b/data/evgen/intranuke/tot_xsec/pipA_inelas/ashery-pip-nb-inelas.dat
@@ -1,5 +1,6 @@
# Data at 85 MeV omitted in favor of Aniol data
# KE Inelas Sig
+85 848 350
125 652. 270.
165 552. 280.
205 618. 250.
diff --git a/data/evgen/intranuke/tot_xsec/pipA_pipro/pip27_pipro.txt b/data/evgen/intranuke/tot_xsec/pipA_pipro/pip27_pipro.txt
new file mode 100644
index 0000000000..e7fa2503bf
--- /dev/null
+++ b/data/evgen/intranuke/tot_xsec/pipA_pipro/pip27_pipro.txt
@@ -0,0 +1,42 @@
+0.0 0.000000
+25.0 0.000000
+50.0 0.059854
+75.0 1.421466
+100.0 2.783077
+125.0 4.144689
+150.0 5.506300
+175.0 6.448950
+200.0 7.391600
+225.0 8.254454
+250.0 9.117308
+275.0 13.017603
+300.0 16.917898
+325.0 21.945389
+350.0 26.972880
+375.0 33.167470
+400.0 39.362060
+425.0 47.945710
+450.0 56.529360
+475.0 68.110590
+500.0 79.691820
+525.0 89.158230
+550.0 98.624640
+575.0 108.490070
+600.0 118.355500
+625.0 127.946640
+650.0 137.537780
+675.0 146.221190
+700.0 154.904600
+725.0 162.226300
+750.0 169.548000
+775.0 176.515700
+800.0 183.483400
+825.0 187.678000
+850.0 191.872600
+875.0 195.493600
+900.0 199.114600
+925.0 201.334100
+950.0 203.553600
+975.0 205.773100
+1000.0 207.992600
+1025.0 210.212100
diff --git a/data/evgen/intranuke/tot_xsec/pipA_tot/ashery-pip-al-reac.dat b/data/evgen/intranuke/tot_xsec/pipA_tot/ashery-pip-al-reac.dat
new file mode 100755
index 0000000000..31f6479df7
--- /dev/null
+++ b/data/evgen/intranuke/tot_xsec/pipA_tot/ashery-pip-al-reac.dat
@@ -0,0 +1,7 @@
+#KE (MeV) Reac (mb) Err (mb)
+85 638 47.63
+125 740 56.57
+165 719 57.28
+205 654 53.91
+245 578 51.66
+315 499 47.42
diff --git a/data/evgen/intranuke/tot_xsec/pipA_tot/ashery-pip-bi-reac.dat b/data/evgen/intranuke/tot_xsec/pipA_tot/ashery-pip-bi-reac.dat
new file mode 100755
index 0000000000..e2fe89a8b0
--- /dev/null
+++ b/data/evgen/intranuke/tot_xsec/pipA_tot/ashery-pip-bi-reac.dat
@@ -0,0 +1,7 @@
+#KE (MeV) Reac (mb) Err (mb)
+85 2980 646.22
+125 2660 488.26
+165 2446 424.26
+205 2270 431.39
+245 2230 377.36
+315 1950 368.92
diff --git a/data/evgen/intranuke/tot_xsec/pipA_tot/ashery-pip-c-reac.dat b/data/evgen/intranuke/tot_xsec/pipA_tot/ashery-pip-c-reac.dat
new file mode 100755
index 0000000000..2882e3b0bb
--- /dev/null
+++ b/data/evgen/intranuke/tot_xsec/pipA_tot/ashery-pip-c-reac.dat
@@ -0,0 +1,7 @@
+#KE (MeV) Reac (mb) Err (mb)
+85 287 21.63
+125 417 24.17
+165 447 23.41
+205 412 21.84
+245 366 21.19
+315 309 15.65
diff --git a/data/evgen/intranuke/tot_xsec/pipA_tot/ashery-pip-fe-reac.dat b/data/evgen/intranuke/tot_xsec/pipA_tot/ashery-pip-fe-reac.dat
new file mode 100755
index 0000000000..25a3329fba
--- /dev/null
+++ b/data/evgen/intranuke/tot_xsec/pipA_tot/ashery-pip-fe-reac.dat
@@ -0,0 +1,7 @@
+#KE (MeV) Reac (mb) Err (mb)
+85 1284 100.60
+125 1254 106.30
+165 1154 106.30
+205 1050 98.99
+245 936 98.99
+315 807 92.20
diff --git a/data/evgen/intranuke/tot_xsec/pipA_tot/ashery-pip-li-reac.dat b/data/evgen/intranuke/tot_xsec/pipA_tot/ashery-pip-li-reac.dat
new file mode 100755
index 0000000000..a948b84d50
--- /dev/null
+++ b/data/evgen/intranuke/tot_xsec/pipA_tot/ashery-pip-li-reac.dat
@@ -0,0 +1,7 @@
+#KE (MeV) Reac (mb) Err (mb)
+85 149 11.70
+125 288 16.12
+165 361 16.12
+205 343 12.65
+245 301 9.49
+315 228 7.21
diff --git a/data/evgen/intranuke/tot_xsec/pipA_tot/ashery-pip-nb-reac.dat b/data/evgen/intranuke/tot_xsec/pipA_tot/ashery-pip-nb-reac.dat
new file mode 100755
index 0000000000..2f93234329
--- /dev/null
+++ b/data/evgen/intranuke/tot_xsec/pipA_tot/ashery-pip-nb-reac.dat
@@ -0,0 +1,7 @@
+#KE (MeV) Reac (mb) Err (mb)
+85 1753 340.00
+125 1682 234.31
+165 1562 234.31
+205 1433 233.24
+245 1300 233.24
+315 1123 216.33
diff --git a/data/evgen/intranuke/tot_xsec/pipA_tot/meirav-pip-ca-reac.dat b/data/evgen/intranuke/tot_xsec/pipA_tot/meirav-pip-ca-reac.dat
new file mode 100755
index 0000000000..d5d1eb009e
--- /dev/null
+++ b/data/evgen/intranuke/tot_xsec/pipA_tot/meirav-pip-ca-reac.dat
@@ -0,0 +1,6 @@
+#pi+ Ca total reaction xsec
+#Meirav, et al. Phys Rev C36, 1066 (1987)
+#Tpi (MeV) sig (mb) err (mb)
+ 50. 439 66
+ 65. 563 43
+
diff --git a/data/evgen/intranuke/tot_xsec/pipA_tot/meirav-pip-o-reac.dat b/data/evgen/intranuke/tot_xsec/pipA_tot/meirav-pip-o-reac.dat
new file mode 100755
index 0000000000..f7b3c128ff
--- /dev/null
+++ b/data/evgen/intranuke/tot_xsec/pipA_tot/meirav-pip-o-reac.dat
@@ -0,0 +1,5 @@
+#pi+ O total reaction xsec
+#Meirav, et al. Phys Rev C36, 1066 (1987)
+#Tpi (MeV) sig (mb) err (mb)
+ 50. 166 19
+
diff --git a/data/evgen/intranuke/tot_xsec/pipA_tot/meirav-pip-zr-reac.dat b/data/evgen/intranuke/tot_xsec/pipA_tot/meirav-pip-zr-reac.dat
new file mode 100755
index 0000000000..1e3806ca71
--- /dev/null
+++ b/data/evgen/intranuke/tot_xsec/pipA_tot/meirav-pip-zr-reac.dat
@@ -0,0 +1,5 @@
+#pi+ Zr total reaction xsec
+#Meirav, et al. Phys Rev C36,1066(1987)
+#Tpi (MeV) sig (mb) err (mb)
+ 50. 949 61
+
diff --git a/data/evgen/intranuke/tot_xsec/pipA_tot/saunders-pip-c-reac.dat b/data/evgen/intranuke/tot_xsec/pipA_tot/saunders-pip-c-reac.dat
new file mode 100755
index 0000000000..fac663c445
--- /dev/null
+++ b/data/evgen/intranuke/tot_xsec/pipA_tot/saunders-pip-c-reac.dat
@@ -0,0 +1,12 @@
+#Saunders et al
+#source: Phys Rev C 1996
+#pip C total reaction xs
+#KE (MeV) sig err
+42. 125 14
+45. 135 15
+46.5 137 14
+48. 140 20
+49.5 158 19
+50.0 152 14
+54. 147 14
+65. 202 17
diff --git a/src/Apps/gAtmoEvGen.cxx b/src/Apps/gAtmoEvGen.cxx
index 1872f3170e..57d74dbdfc 100644
--- a/src/Apps/gAtmoEvGen.cxx
+++ b/src/Apps/gAtmoEvGen.cxx
@@ -376,6 +376,7 @@ int main(int argc, char** argv)
* option. */
mcj_driver->ForceSingleProbScale();
+
// initialize an ntuple writer
NtpWriter ntpw(kDefOptNtpFormat, gOptRunNu, gOptRanSeed);
ntpw.CustomizeFilenamePrefix(gOptEvFilePrefix);
diff --git a/src/Apps/gEvGenDM.cxx b/src/Apps/gEvGenDM.cxx
index 6f48039bd1..9d2015cac5 100644
--- a/src/Apps/gEvGenDM.cxx
+++ b/src/Apps/gEvGenDM.cxx
@@ -300,14 +300,17 @@ void GenerateEventsAtFixedInitState(void)
// Create init state
InitialState init_state(target, dark_matter);
-
+
+//
+/*
bool unitary = CheckUnitarityLimit();
if (!unitary) {
LOG("gevgen_dm", pFATAL)
<< "Cross-section risks exceeding unitarity limit - Exiting";
exit(1);
}
-
+*/
+//
// Create/config event generation driver
GEVGDriver evg_driver;
diff --git a/src/Apps/gEvGenHadronNucleus.cxx b/src/Apps/gEvGenHadronNucleus.cxx
index c66194bdb8..471d64f4d0 100644
--- a/src/Apps/gEvGenHadronNucleus.cxx
+++ b/src/Apps/gEvGenHadronNucleus.cxx
@@ -245,11 +245,11 @@ const EventRecordVisitorI * GetIntranuke(void)
} else if ( gOptMode.compare("hN") == 0 ) {
sname = "genie::HNIntranuke";
sconf = "Default";
- } else if ( gOptMode.compare("hA2019") == 0 ) {
- sname = "genie::HAIntranuke2019";
+ } else if ( gOptMode.compare("hA2025") == 0 ) {
+ sname = "genie::HAIntranuke2025";
sconf = "Default";
- } else if ( gOptMode.compare("hN2019") == 0 ) {
- sname = "genie::HNIntranuke2019";
+ } else if ( gOptMode.compare("hN2025") == 0 ) {
+ sname = "genie::HNIntranuke2025";
sconf = "Default";
} else if ( gOptMode.compare("hA2018") == 0 ) {
sname = "genie::HAIntranuke2018";
diff --git a/src/Framework/Conventions/KinePhaseSpace.h b/src/Framework/Conventions/KinePhaseSpace.h
index ef211a8964..436c9919c0 100644
--- a/src/Framework/Conventions/KinePhaseSpace.h
+++ b/src/Framework/Conventions/KinePhaseSpace.h
@@ -67,7 +67,7 @@ typedef enum EKinePhaseSpace {
// TODO: rename this value when the correct variables are identified
kPSTAfE,
kPSEgTlOgfE,
- kPSDMELEvGen, // Equivalent to kPSQELEvGen for Dark Matter scattering
+ kPSDMELEvGen, // Equivalent to kPSQELEvGen for Dark Matter scattering
kPSxQ2fE,
kPSlog10xlog10Q2fE,
kPSEDNufE, // Used for Dark Neutrinos, two body final state
diff --git a/src/Framework/EventGen/GMCJDriver.cxx b/src/Framework/EventGen/GMCJDriver.cxx
index 4e9e2041d4..87d633705a 100644
--- a/src/Framework/EventGen/GMCJDriver.cxx
+++ b/src/Framework/EventGen/GMCJDriver.cxx
@@ -130,7 +130,7 @@ void GMCJDriver::SetXSecSplineNbins(int nbins)
fXSecSplineNbins = nbins;
LOG("GMCJDriver", pNOTICE)
- << "Number of bins in energy used for the xsec splines: "
+ << "Number of bins in energy used for the xsec splines: "
<< fXSecSplineNbins;
}
//___________________________________________________________________________
@@ -147,7 +147,7 @@ void GMCJDriver::SetPmaxNbins(int nbins)
fPmaxNbins = nbins;
LOG("GMCJDriver", pNOTICE)
- << "Number of bins in energy used for maximum int. probability: "
+ << "Number of bins in energy used for maximum int. probability: "
<< fPmaxNbins;
}
//___________________________________________________________________________
@@ -654,11 +654,11 @@ void GMCJDriver::BootstrapXSecSplineSummation(void)
// knots with zero y values (although the GENIE Spline object handles it)
double min = rE.min;
double max = TMath::Min(rE.max, fEmax);
-
+
// Because of edge issue (see GENIE docdb 297) these lines are commented out
// double dE = fEmax/10.;
// double max = (fEmax+dE < rE.max) ? fEmax+dE : rE.max;
-
+
// in the logaritmic binning is important to have a narrow binning to
// describe better the glashow resonance peak.
evgdriver->CreateXSecSumSpline(fXSecSplineNbins,min,max,true);
@@ -747,7 +747,7 @@ void GMCJDriver::ComputeProbScales(void)
// get xsec sum over all modelled processes for given neutrino+target)
double sxsecLow = evgdriver->XSecSumSpline()->Evaluate(EvLow);
- double sxsecHigh = evgdriver->XSecSumSpline()->Evaluate(EvHigh);
+ double sxsecHigh = evgdriver->XSecSumSpline()->Evaluate(EvHigh);
// get max{path-length x density}
double plmax = fMaxPathLengths.PathLength(target_pdgc);
@@ -860,11 +860,11 @@ EventRecord * GMCJDriver::GenerateEvent1Try(void)
}
if (fForceInteraction) {
- bool pl_ok = this->ComputePathLengths();
- if(!pl_ok) {
- LOG("GMCJDriver", pFATAL) << "** Cannot calculate path lenths!";
- exit(1);
- }
+ bool pl_ok = this->ComputePathLengths();
+ if(!pl_ok) {
+ LOG("GMCJDriver", pFATAL) << "** Cannot calculate path lenths!";
+ exit(1);
+ }
if(fCurPathLengths.AreAllZero()) {
LOG("GMCJDriver", pNOTICE)
<< "** Rejecting current flux neutrino (misses generation volume)";
@@ -877,53 +877,53 @@ EventRecord * GMCJDriver::GenerateEvent1Try(void)
}
else {
// Compute the interaction probabilities assuming max. path lengths
- // and decide whether the neutrino would interact --
- // Many flux neutrinos should be rejected here, drastically reducing
- // the number of neutrinos that I need to propagate through the
- // actual detector geometry (this is skipped when using
+ // and decide whether the neutrino would interact --
+ // Many flux neutrinos should be rejected here, drastically reducing
+ // the number of neutrinos that I need to propagate through the
+ // actual detector geometry (this is skipped when using
// pre-calculated flux interaction probabilities)
if(fPreSelect) {
- LOG("GMCJDriver", pNOTICE)
+ LOG("GMCJDriver", pNOTICE)
<< "Computing interaction probabilities for max. path lengths";
Psum = this->ComputeInteractionProbabilities(true /* <- max PL*/);
Pno = 1-Psum;
LOG("GMCJDriver", pNOTICE)
- << "The no-interaction probability (max. path lengths) is: "
+ << "The no-interaction probability (max. path lengths) is: "
<< 100*Pno << " %";
if(Pno<0.) {
- LOG("GMCJDriver", pFATAL)
+ LOG("GMCJDriver", pFATAL)
<< "Negative no-interaction probability! (P = " << 100*Pno << " %)"
<< " Particle E=" << fFluxDriver->Momentum().E() << " type=" << fFluxDriver->PdgCode() << "Psum=" << Psum;
gAbortingInErr=true;
exit(1);
}
if(R>=1-Pno) {
- LOG("GMCJDriver", pNOTICE)
+ LOG("GMCJDriver", pNOTICE)
<< "** Rejecting current flux neutrino";
return 0;
}
- } // preselect
+ } // preselect
bool pl_ok = false;
- // If possible use pre-generated flux neutrino interaction probabilities
+ // If possible use pre-generated flux neutrino interaction probabilities
if(fFluxIntTree){
- Psum = this->PreGenFluxInteractionProbability();
- }
+ Psum = this->PreGenFluxInteractionProbability();
+ }
// Else compute them in the usual manner
else {
// Compute (pathLength x density x weight fraction) for all materials
// in the input geometry, for the neutrino generated by the flux driver
pl_ok = this->ComputePathLengths();
if(!pl_ok) {
- LOG("GMCJDriver", pERROR)
+ LOG("GMCJDriver", pERROR)
<< "** Rejecting current flux neutrino (err computing path-lengths)";
return 0;
}
if(fCurPathLengths.AreAllZero()) {
- LOG("GMCJDriver", pNOTICE)
+ LOG("GMCJDriver", pNOTICE)
<< "** Rejecting current flux neutrino (misses generation volume)";
return 0;
}
@@ -935,14 +935,14 @@ EventRecord * GMCJDriver::GenerateEvent1Try(void)
LOG("GMCJDriver", pNOTICE)
<< "** Rejecting current flux neutrino (has null interaction probability)";
return 0;
- }
+ }
// Now decide whether the current neutrino interacts
Pno = 1-Psum;
LOG("GMCJDriver", pNOTICE)
<< "The actual 'no interaction' probability is: " << 100*Pno << " %";
if(Pno<0.) {
- LOG("GMCJDriver", pFATAL)
+ LOG("GMCJDriver", pFATAL)
<< "Negative no interactin probability! (P = " << 100*Pno << " %)";
// print info about what caused the problem
@@ -966,27 +966,27 @@ EventRecord * GMCJDriver::GenerateEvent1Try(void)
exit(1);
}
if(R>=1-Pno) {
- LOG("GMCJDriver", pNOTICE)
+ LOG("GMCJDriver", pNOTICE)
<< "** Rejecting current flux neutrino";
return 0;
}
//
- // The flux neutrino interacts!
+ // The flux neutrino interacts!
//
- // Calculate path lengths for first time and check potential mismatch if
+ // Calculate path lengths for first time and check potential mismatch if
// used pre-generated flux interaction probabilities
if(fFluxIntTree){
- pl_ok = this->ComputePathLengths();
- if(!pl_ok) {
- LOG("GMCJDriver", pFATAL) << "** Cannot calculate path lenths!";
- exit(1);
- }
+ pl_ok = this->ComputePathLengths();
+ if(!pl_ok) {
+ LOG("GMCJDriver", pFATAL) << "** Cannot calculate path lenths!";
+ exit(1);
+ }
double Psum_curr = this->ComputeInteractionProbabilities(false /* <- actual PL */);
- bool mismatch = TMath::Abs(Psum-Psum_curr) > controls::kASmallNum;
+ bool mismatch = TMath::Abs(Psum-Psum_curr) > controls::kASmallNum;
if(mismatch){
- LOG("GMCJDriver", pFATAL) <<
+ LOG("GMCJDriver", pFATAL) <<
"** Mismatch between pre-calculated and current interaction "<<
"probabilities!";
exit(1);
diff --git a/src/Framework/Interaction/Interaction.cxx b/src/Framework/Interaction/Interaction.cxx
index f3456f6676..55cb4bddf8 100644
--- a/src/Framework/Interaction/Interaction.cxx
+++ b/src/Framework/Interaction/Interaction.cxx
@@ -915,7 +915,7 @@ Interaction * Interaction::MECNC(
Interaction * Interaction::MECEM(int tgt, int probe, double E)
{
- Interaction * interaction =
+ Interaction * interaction =
Interaction::Create(tgt, probe, kScMEC, kIntEM);
InitialState * init_state = interaction->InitStatePtr();
@@ -1093,6 +1093,31 @@ Interaction * Interaction::DMDI(
return interaction;
}
//___________________________________________________________________________
+Interaction * Interaction::RESDM(int target, int hitnuc, int probe, double E)
+{
+ Interaction * interaction =
+ Interaction::Create(target,probe,kScDarkMatterResonant, kIntDarkMatter);
+
+ InitialState * init_state = interaction->InitStatePtr();
+ init_state->SetProbeE(E);
+ init_state->TgtPtr()->SetHitNucPdg(hitnuc);
+
+ return interaction;
+}
+//___________________________________________________________________________
+Interaction * Interaction::RESDM(
+ int target, int hitnuc, int probe, const TLorentzVector & p4probe)
+{
+ Interaction * interaction =
+ Interaction::Create(target,probe,kScDarkMatterResonant, kIntDarkMatter);
+
+ InitialState * init_state = interaction->InitStatePtr();
+ init_state->SetProbeP4(p4probe);
+ init_state->TgtPtr()->SetHitNucPdg(hitnuc);
+
+ return interaction;
+}
+//___________________________________________________________________________
Interaction * Interaction::HNL(int probe, double E, int decayed_mode)
{
Interaction * interaction =
diff --git a/src/Framework/Interaction/Interaction.h b/src/Framework/Interaction/Interaction.h
index 0336a21076..e7d46bc5a5 100644
--- a/src/Framework/Interaction/Interaction.h
+++ b/src/Framework/Interaction/Interaction.h
@@ -11,7 +11,7 @@
\author Costas Andreopoulos
University of Liverpool
- Changes required to implement the GENIE Boosted Dark Matter module
+ Changes required to implement the GENIE Boosted Dark Matter module
were installed by Josh Berger (Univ. of Wisconsin)
\created April 25, 2004
@@ -48,16 +48,16 @@ const UInt_t kISkipProcessChk = 1<<17; ///< if set, skip process validity c
const UInt_t kISkipKinematicChk = 1<<16; ///< if set, skip kinematic validity checks
const UInt_t kIAssumeFreeNucleon = 1<<15; ///<
const UInt_t kIAssumeFreeElectron = 1<<15; ///<
-const UInt_t kINoNuclearCorrection = 1<<14; ///< if set, inhibit nuclear corrections
+const UInt_t kINoNuclearCorrection = 1<<14; ///< if set, inhibit nuclear corrections
class Interaction;
-ostream & operator << (ostream & stream, const Interaction & i);
+ostream & operator << (ostream & stream, const Interaction & i);
class Interaction : public TObject {
public:
using TObject::Print; // suppress clang 'hides overloaded virtual function [-Woverloaded-virtual]' warnings
- using TObject::Copy; //
+ using TObject::Copy; //
Interaction();
Interaction(const InitialState & init, const ProcessInfo & proc);
@@ -88,7 +88,7 @@ class Interaction : public TObject {
int FSPrimLeptonPdg (void) const; ///< final state primary lepton pdg
int RecoilNucleonPdg (void) const; ///< recoil nucleon pdg
TParticlePDG * FSPrimLepton (void) const; ///< final state primary lepton
- TParticlePDG * RecoilNucleon (void) const; ///< recoil nucleon
+ TParticlePDG * RecoilNucleon (void) const; ///< recoil nucleon
// Copy, reset, print itself and build string code
void Reset (void);
@@ -132,10 +132,10 @@ class Interaction : public TObject {
static Interaction * DFRCC (int tgt, int nuc, int probe, double E=0);
static Interaction * DFRCC (int tgt, int nuc, int probe, const TLorentzVector & p4probe);
static Interaction * COHCC (int tgt, int probe, unsigned int prod_pdg, double E=0);
- static Interaction * COHCC (int tgt, int probe, unsigned int prod_pdg,
+ static Interaction * COHCC (int tgt, int probe, unsigned int prod_pdg,
const TLorentzVector & p4probe);
static Interaction * COHNC (int tgt, int probe, unsigned int prod_pdg, double E=0);
- static Interaction * COHNC (int tgt, int probe, unsigned int prod_pdg,
+ static Interaction * COHNC (int tgt, int probe, unsigned int prod_pdg,
const TLorentzVector & p4probe);
static Interaction * CEvNS (int tgt, int probe, double E=0);
static Interaction * CEvNS (int tgt, int probe, const TLorentzVector & p4probe);
@@ -164,6 +164,8 @@ class Interaction : public TObject {
static Interaction * DMDI (int tgt, int nuc, int qrk, bool sea, int probe, double E=0);
static Interaction * DMDI (int tgt, int nuc, int probe, const TLorentzVector & p4probe);
static Interaction * DMDI (int tgt, int nuc, int qrk, bool sea, int probe, const TLorentzVector & p4probe);
+ static Interaction * RESDM (int tgt, int nuc, int probe, double E=0);
+ static Interaction * RESDM (int tgt, int nuc, int probe, const TLorentzVector & p4probe);
static Interaction * HNL (int probe, double E=0, int decayed_mode=-1);
private:
@@ -181,7 +183,7 @@ class Interaction : public TObject {
Kinematics * fKinematics; ///< kinematical variables
XclsTag * fExclusiveTag; ///< Additional info for exclusive channels
KPhaseSpace * fKinePhSp; ///< Kinematic phase space
-
+
ClassDef(Interaction,2)
};
diff --git a/src/Framework/Interaction/KPhaseSpace.cxx b/src/Framework/Interaction/KPhaseSpace.cxx
index 989297803e..6c5592f9da 100644
--- a/src/Framework/Interaction/KPhaseSpace.cxx
+++ b/src/Framework/Interaction/KPhaseSpace.cxx
@@ -8,6 +8,7 @@
Changes required to implement the GENIE Boosted Dark Matter module
were installed by Josh Berger (Univ. of Wisconsin)
+ and Zachary Orr (Colorado State Univ.)
*/
//____________________________________________________________________________
@@ -107,9 +108,9 @@ double KPhaseSpace::Threshold(void) const
double Ethresh = (mtot*mtot - Mi*Mi - mi*mi)/2/Mi;
return Ethresh;
}
-
+
if (pi.IsNorm() ) return 0;
-
+
if (pi.IsSingleKaon()) {
int kaon_pdgc = xcls.StrangeHadronPdg();
double Mi = tgt.HitNucP4Ptr()->M(); // initial nucleon mass
@@ -149,6 +150,7 @@ double KPhaseSpace::Threshold(void) const
pi.IsDarkMatterElastic() ||
pi.IsInverseBetaDecay() ||
pi.IsResonant() ||
+ pi.IsDarkMatterResonant() ||
pi.IsDeepInelastic() ||
pi.IsDarkMatterDeepInelastic() ||
pi.IsDiffractive())
@@ -184,7 +186,7 @@ double KPhaseSpace::Threshold(void) const
double smin = TMath::Power(Wmin+ml,2.);
double Ethr = 0.5*(smin-Mn2)/Mn;
// threshold is different for dark matter case
- if(pi.IsDarkMatterElastic() || pi.IsDarkMatterDeepInelastic()) {
+ if(pi.IsDarkMatterElastic() || pi.IsDarkMatterDeepInelastic() || pi.IsDarkMatterResonant()) {
// Correction to minimum kinematic variables
Wmin = Mn;
smin = TMath::Power(Wmin+ml,2);
@@ -307,6 +309,7 @@ bool KPhaseSpace::IsAboveThreshold(void) const
pi.IsDarkMatterElastic() ||
pi.IsInverseBetaDecay() ||
pi.IsResonant() ||
+ pi.IsDarkMatterResonant() ||
pi.IsDeepInelastic() ||
pi.IsDarkMatterDeepInelastic() ||
pi.IsDiffractive() ||
@@ -346,7 +349,7 @@ bool KPhaseSpace::IsAllowed(void) const
// RES
// Check the running W vs the W limits
// & the running Q2 vs Q2 limits for the given W
- if(pi.IsResonant()) {
+ if(pi.IsResonant() || pi.IsDarkMatterResonant()) {
Range1D_t Wl = this->WLim();
Range1D_t Q2l = this->Q2Lim_W();
double W = kine.W();
@@ -454,7 +457,7 @@ Range1D_t KPhaseSpace::WLim(void) const
bool is_em = pi.IsEM();
bool is_qel = pi.IsQuasiElastic() || pi.IsInverseBetaDecay() || pi.IsDarkMatterElastic();
bool is_inel = pi.IsDeepInelastic() || pi.IsResonant() || pi.IsDiffractive();
- bool is_dmdis = pi.IsDarkMatterDeepInelastic();
+ bool is_dmdis = pi.IsDarkMatterDeepInelastic() || pi.IsDarkMatterResonant();
if(is_qel) {
double MR = fInteraction->RecoilNucleon()->Mass();
@@ -530,7 +533,7 @@ Range1D_t KPhaseSpace::Q2Lim_W(void) const
bool is_inel = pi.IsDeepInelastic() || pi.IsResonant() || pi.IsDiffractive();
bool is_coh = pi.IsCoherentProduction();
bool is_dme = pi.IsDarkMatterElastic();
- bool is_dmdis = pi.IsDarkMatterDeepInelastic();
+ bool is_dmdis = pi.IsDarkMatterDeepInelastic() || pi.IsDarkMatterResonant();
if(!is_qel && !is_inel && !is_coh && !is_dme && !is_dmdis) return Q2l;
@@ -587,7 +590,7 @@ Range1D_t KPhaseSpace::Q2Lim(void) const
bool is_coh = pi.IsCoherentProduction();
bool is_cevns = pi.IsCoherentElastic();
bool is_dme = pi.IsDarkMatterElastic();
- bool is_dmdis = pi.IsDarkMatterDeepInelastic();
+ bool is_dmdis = pi.IsDarkMatterDeepInelastic() || pi.IsDarkMatterResonant();
if(!is_qel && !is_inel && !is_coh && !is_cevns && !is_dme && !is_dmdis) return Q2l;
@@ -711,7 +714,7 @@ Range1D_t KPhaseSpace::XLim(void) const
return xl;
}
//DMDIS
- bool is_dmdis = pi.IsDarkMatterDeepInelastic();
+ bool is_dmdis = pi.IsDarkMatterDeepInelastic() || pi.IsDarkMatterResonant();
if(is_dmdis) {
const InitialState & init_state = fInteraction->InitState();
double Ev = init_state.ProbeE(kRfHitNucRest);
@@ -763,7 +766,7 @@ Range1D_t KPhaseSpace::YLim(void) const
return yl;
}
//DMDIS
- bool is_dmdis = pi.IsDarkMatterDeepInelastic();
+ bool is_dmdis = pi.IsDarkMatterDeepInelastic() || pi.IsDarkMatterResonant();
if(is_dmdis) {
const InitialState & init_state = fInteraction->InitState();
double Ev = init_state.ProbeE(kRfHitNucRest);
@@ -836,7 +839,7 @@ Range1D_t KPhaseSpace::YLim_X(void) const
return yl;
}
//DMDIS
- bool is_dmdis = pi.IsDarkMatterDeepInelastic();
+ bool is_dmdis = pi.IsDarkMatterDeepInelastic() || pi.IsDarkMatterResonant();
if(is_dmdis) {
const InitialState & init_state = fInteraction->InitState();
double Ev = init_state.ProbeE(kRfHitNucRest);
@@ -1001,7 +1004,7 @@ double KPhaseSpace::Threshold_SPP_iso(void) const
{
const InitialState & init_state = fInteraction->InitState();
PDGLibrary * pdglib = PDGLibrary::Instance();
-
+
// imply isospin symmetry
double mpi = (pdglib->Find(kPdgPiP)->Mass() + pdglib->Find(kPdgPi0)->Mass() + pdglib->Find(kPdgPiM)->Mass())/3;
double M = (pdglib->Find(kPdgProton)->Mass() + pdglib->Find(kPdgNeutron)->Mass())/2;
@@ -1025,7 +1028,7 @@ Range1D_t KPhaseSpace::WLim_SPP(void) const
// kinematic W-limits
Wl.min = Mf + mpi;
Wl.max = ECM - mf;
-
+
if ( (Wl.max - Wl.min) < (Wl.max + Wl.min)*std::numeric_limits::epsilon() )
{
Wl.min = 2*Wl.max*Wl.min/(Wl.max + Wl.min);
@@ -1036,7 +1039,7 @@ Range1D_t KPhaseSpace::WLim_SPP(void) const
Wl.min *= 1. + std::numeric_limits::epsilon();
Wl.max *= 1. - std::numeric_limits::epsilon();
}
-
+
return Wl;
}
//____________________________________________________________________________
@@ -1055,7 +1058,7 @@ Range1D_t KPhaseSpace::WLim_SPP_iso(void) const
// kinematic W-limits
Wl.min = M + mpi;
Wl.max = ECM - mf;
-
+
if ( (Wl.max - Wl.min) < (Wl.max + Wl.min)*std::numeric_limits::epsilon() )
{
Wl.min = 2*Wl.max*Wl.min/(Wl.max + Wl.min);
@@ -1066,7 +1069,7 @@ Range1D_t KPhaseSpace::WLim_SPP_iso(void) const
Wl.min *= 1. + std::numeric_limits::epsilon();
Wl.max *= 1. - std::numeric_limits::epsilon();
}
-
+
return Wl;
}
//____________________________________________________________________________
@@ -1093,7 +1096,7 @@ Range1D_t KPhaseSpace::Q2Lim_W_SPP (void) const
// kinematic Q2-limits
Q2l.min = 2*(Ei_CM*Ef_CM - Pi_CM*Pf_CM) - mi2 - mf2;
Q2l.max = 2*(Ei_CM*Ef_CM + Pi_CM*Pf_CM) - mi2 - mf2;
-
+
if ( (Q2l.max - Q2l.min) < (Q2l.max + Q2l.min)*std::numeric_limits::epsilon() )
{
Q2l.min = 2*Q2l.max*Q2l.min/(Q2l.max + Q2l.min);
@@ -1120,11 +1123,11 @@ Range1D_t KPhaseSpace::Q2Lim_W_SPP_iso(void) const
double mi2 = mi*mi;
double mf2 = mf*mf;
double W = kinematics::W(fInteraction);
-
+
double Ei = init_state.ProbeE(kRfHitNucRest);
double s = M*(M + 2*Ei) + mi2;
double ECM = TMath::Sqrt(s);
-
+
double Ei_CM = (s + mi2 - M*M)/2/ECM;
double Ef_CM = (s + mf2 - W*W)/2/ECM;
double Pi_CM = (Ei_CM - mi)<0?0:TMath::Sqrt(Ei_CM*Ei_CM - mi2);
@@ -1132,7 +1135,7 @@ Range1D_t KPhaseSpace::Q2Lim_W_SPP_iso(void) const
// kinematic Q2-limits
Q2l.min = 2*(Ei_CM*Ef_CM - Pi_CM*Pf_CM) - mi2 - mf2;
Q2l.max = 2*(Ei_CM*Ef_CM + Pi_CM*Pf_CM) - mi2 - mf2;
-
+
if ( (Q2l.max - Q2l.min) < (Q2l.max + Q2l.min)*std::numeric_limits::epsilon() )
{
Q2l.min = 2*Q2l.max*Q2l.min/(Q2l.max + Q2l.min);
@@ -1143,8 +1146,7 @@ Range1D_t KPhaseSpace::Q2Lim_W_SPP_iso(void) const
Q2l.min *= 1. + std::numeric_limits::epsilon();
Q2l.max *= 1. - std::numeric_limits::epsilon();
}
-
+
return Q2l;
}
//____________________________________________________________________________
-
diff --git a/src/Framework/Interaction/ProcessInfo.cxx b/src/Framework/Interaction/ProcessInfo.cxx
index 1456b9c383..01aba4c372 100644
--- a/src/Framework/Interaction/ProcessInfo.cxx
+++ b/src/Framework/Interaction/ProcessInfo.cxx
@@ -8,6 +8,7 @@
Changes required to implement the GENIE Boosted Dark Matter module
were installed by Josh Berger (Univ. of Wisconsin)
+ and Zachary Orr (Colorado State Univ.)
Changes required to implement the GENIE Dark Neutrino module
were installed by Iker de Icaza (Univ. of Sussex)
@@ -101,6 +102,11 @@ bool ProcessInfo::IsResonant(void) const
return (fScatteringType == kScResonant);
}
//____________________________________________________________________________
+bool ProcessInfo::IsDarkMatterResonant(void) const
+{
+ return (fScatteringType == kScDarkMatterResonant);
+}
+//____________________________________________________________________________
bool ProcessInfo::IsCoherentProduction(void) const
{
return (fScatteringType == kScCoherentProduction);
diff --git a/src/Framework/Interaction/ProcessInfo.h b/src/Framework/Interaction/ProcessInfo.h
index cf2548089c..69d2cbfe49 100644
--- a/src/Framework/Interaction/ProcessInfo.h
+++ b/src/Framework/Interaction/ProcessInfo.h
@@ -13,6 +13,7 @@
Changes required to implement the GENIE Boosted Dark Matter module
were installed by Josh Berger (Univ. of Wisconsin)
+ and Zachary Orr (Colorado State Univ.)
Changes required to implement the GENIE Dark Neutrino module
were installed by Iker de Icaza (Univ. of Sussex)
@@ -64,6 +65,7 @@ class ProcessInfo : public TObject {
bool IsDeepInelastic (void) const;
bool IsDarkMatterDeepInelastic (void) const;
bool IsResonant (void) const;
+ bool IsDarkMatterResonant (void) const;
bool IsCoherentProduction (void) const;
bool IsCoherentElastic (void) const;
bool IsSinglePion (void) const;
diff --git a/src/Framework/Interaction/ScatteringType.h b/src/Framework/Interaction/ScatteringType.h
index bd4f80b231..9acfab8e73 100644
--- a/src/Framework/Interaction/ScatteringType.h
+++ b/src/Framework/Interaction/ScatteringType.h
@@ -34,7 +34,7 @@ namespace genie {
// append to the end of the total list and set a new enum counter value.
typedef enum EScatteringType {
- kScUnknown = -100,
+ kScUnknown = -100,
kScNull = 0,
kScQuasiElastic,
kScSingleKaon,
@@ -56,7 +56,8 @@ typedef enum EScatteringType {
kScDarkMatterElastic = 101,
kScDarkMatterDeepInelastic,
kScDarkMatterElectron,
- kScNorm
+ kScDarkMatterResonant,
+ kScNorm = 110
} ScatteringType_t;
class ScatteringType
@@ -89,6 +90,7 @@ class ScatteringType
case(kScDarkMatterElastic) : return "DMEL"; break;
case(kScDarkMatterDeepInelastic) : return "DMDIS"; break;
case(kScDarkMatterElectron) : return "DME"; break;
+ case(kScDarkMatterResonant) : return "DMRES"; break;
default : return "Unknown"; break;
}
return "Unknown";
diff --git a/src/Physics/BoostedDarkMatter/EventGen/DMRESHadronicSystemGenerator.cxx b/src/Physics/BoostedDarkMatter/EventGen/DMRESHadronicSystemGenerator.cxx
new file mode 100644
index 0000000000..8441a688a9
--- /dev/null
+++ b/src/Physics/BoostedDarkMatter/EventGen/DMRESHadronicSystemGenerator.cxx
@@ -0,0 +1,236 @@
+//____________________________________________________________________________
+/*
+ Copyright (c) 2003-2023, The GENIE Collaboration
+ For the full text of the license visit http://copyright.genie-mc.org
+
+ Zachary W. Orr
+ Colorado State University
+
+ based on code by
+ Costas Andreopoulos
+ University of Liverpool & STFC Rutherford Appleton Laboratory
+*/
+//____________________________________________________________________________
+
+// #include
+// #if ROOT_VERSION_CODE >= ROOT_VERSION(5,15,6)
+// #include
+// #else
+// #include
+// #endif
+
+#include "Framework/Algorithm/AlgConfigPool.h"
+#include "Framework/Conventions/Constants.h"
+#include "Framework/EventGen/EVGThreadException.h"
+#include "Framework/GHEP/GHepStatus.h"
+#include "Framework/GHEP/GHepRecord.h"
+#include "Framework/GHEP/GHepParticle.h"
+#include "Framework/GHEP/GHepFlags.h"
+#include "Framework/Interaction/Interaction.h"
+#include "Framework/Interaction/SppChannel.h"
+#include "Framework/Messenger/Messenger.h"
+#include "Framework/ParticleData/BaryonResonance.h"
+#include "Framework/ParticleData/BaryonResUtils.h"
+#include "Framework/ParticleData/PDGLibrary.h"
+#include "Framework/ParticleData/PDGCodes.h"
+#include "Framework/ParticleData/PDGUtils.h"
+#include "Framework/Utils/PrintUtils.h"
+// #include "Physics/Decay/DecayModelI.h"
+#include "Physics/BoostedDarkMatter/EventGen/DMRESHadronicSystemGenerator.h"
+
+using namespace genie;
+using namespace genie::constants;
+
+//___________________________________________________________________________
+DMRESHadronicSystemGenerator::DMRESHadronicSystemGenerator() :
+HadronicSystemGenerator("genie::DMRESHadronicSystemGenerator")
+{
+
+}
+//___________________________________________________________________________
+DMRESHadronicSystemGenerator::DMRESHadronicSystemGenerator(string config):
+HadronicSystemGenerator("genie::DMRESHadronicSystemGenerator", config)
+{
+
+}
+//___________________________________________________________________________
+DMRESHadronicSystemGenerator::~DMRESHadronicSystemGenerator()
+{
+
+}
+//___________________________________________________________________________
+void DMRESHadronicSystemGenerator::ProcessEventRecord(GHepRecord * evrec) const
+{
+// This method generates the final state hadronic system
+
+ // Get the right resonance PDG code so that the selected resonance
+ // conserves charge
+ int pdgc = GetResonancePdgCode(evrec);
+
+ // Add the selected resonance
+ this->AddResonance(evrec,pdgc);
+
+ // Decay the resonance (and its decay products, if they include resonances)
+ fResonanceDecayer->ProcessEventRecord(evrec);
+
+ // Add the baryon resonance decay products at the event record
+ //this->AddResonanceDecayProducts(evrec,pdgc);
+
+ // Handle resonance decay channels to other resonances or short-living
+ // partices
+ //LOG("RESHadronicVtx", pNOTICE)
+ // << "Decay any resonance in the initial resonance decay products";
+ //this->PreHadronTransportDecays(evrec);
+}
+//___________________________________________________________________________
+int DMRESHadronicSystemGenerator::GetResonancePdgCode(GHepRecord * evrec) const
+{
+// In the RES thread the resonance is specifed when selecting interaction
+// This method adds it to the GHEP record.
+
+ Interaction * interaction = evrec->Summary();
+
+ // Get resonance id
+ const XclsTag & xcls = interaction->ExclTag();
+ assert(xcls.KnownResonance());
+ Resonance_t res = xcls.Resonance();
+
+ // Get resonance charge
+ int q_res = this->ResonanceCharge(evrec);
+
+ // Find resonance PDG code from resonance charge and id
+ int pdgc = utils::res::PdgCode(res, q_res);
+
+ LOG("RESHadronicVtx", pNOTICE)
+ << "Selected event has RES with PDGC = " << pdgc << ", Q = " << q_res;
+
+ return pdgc;
+}
+//___________________________________________________________________________
+void DMRESHadronicSystemGenerator::AddResonance(
+ GHepRecord * evrec, int pdgc) const
+{
+ //-- Compute RES p4 = p4(neutrino) + p4(hit nucleon) - p4(primary lepton)
+ TLorentzVector p4 = this->Hadronic4pLAB(evrec);
+
+ //-- Add the resonance at the EventRecord
+ GHepStatus_t ist = kIStPreDecayResonantState;
+ int mom = evrec->HitNucleonPosition();
+
+ //-- Get vtx position
+ GHepParticle * neutrino = evrec->Probe();
+ const TLorentzVector & vtx = *(neutrino->X4());
+
+ evrec->AddParticle(pdgc, ist, mom,-1,-1,-1, p4, vtx);
+}
+//___________________________________________________________________________
+// void RESHadronicSystemGenerator::AddResonanceDecayProducts(
+// GHepRecord * evrec, int pdgc) const
+// {
+// // Decay the baryon resonance, take the decay products, boost them in the LAB
+// // and add them in the GHEP record.
+// // Unlike the SPP thread where the resonance decay products are determined
+// // from the selected SPP channel, in the RES thread we can any of the the
+// // resonance's kinematically available(the RES is not on the mass shell)decay
+// // channels
+//
+// // find the resonance position
+// int irpos = evrec->ParticlePosition(pdgc, kIStPreDecayResonantState, 0);
+// assert(irpos>0);
+//
+// // access the GHEP entry
+// GHepParticle * resonance = evrec->Particle(irpos);
+// assert(resonance);
+//
+// // resonance location
+// const TLorentzVector & x4 = *(resonance->X4());
+//
+// // prepare the decayer inputs
+// DecayerInputs_t dinp;
+// dinp.PdgCode = pdgc;
+// dinp.P4 = resonance->P4();
+//
+// // do the decay
+// TClonesArray * decay_products = fResonanceDecayer->Decay(dinp);
+// if(!decay_products) {
+// LOG("RESHadronicVtx", pWARN) << "Got an empty decay product list!";
+// LOG("RESHadronicVtx", pWARN)
+// << "Quitting the current event generation thread";
+//
+// evrec->EventFlags()->SetBitNumber(kHadroSysGenErr, true);
+//
+// genie::exceptions::EVGThreadException exception;
+// exception.SetReason("Not enough phase space for hadronizer");
+// exception.SwitchOnFastForward();
+// throw exception;
+//
+// return;
+// }
+//
+// // get the decay weight (if any)
+// double wght = fResonanceDecayer->Weight();
+//
+// // update the event weight
+// evrec->SetWeight(wght * evrec->Weight());
+//
+// // decide the istatus of decay products
+// GHepParticle * nuc = evrec->TargetNucleus();
+// GHepStatus_t dpist = (nuc) ? kIStHadronInTheNucleus : kIStStableFinalState;
+//
+// // if the list is not empty, boost and copy the decay products in GHEP
+// if(decay_products) {
+//
+// // first, mark the resonance as decayed
+// resonance->SetStatus(kIStDecayedState);
+//
+// // loop over the daughter and add them to the event record
+// TMCParticle * dpmc = 0;
+// TObjArrayIter decay_iter(decay_products);
+//
+// while( (dpmc = (TMCParticle *) decay_iter.Next()) ) {
+//
+// int dppdg = dpmc->GetKF();
+// double px = dpmc->GetPx();
+// double py = dpmc->GetPy();
+// double pz = dpmc->GetPz();
+// double E = dpmc->GetEnergy();
+// TLorentzVector p4(px,py,pz,E);
+//
+// //-- Only add the decay products - the mother particle already exists
+// if(dpmc->GetKS()==1) {
+// evrec->AddParticle(dppdg,dpist,irpos,-1,-1,-1, p4, x4);
+// }
+// }
+//
+// // done, release the original list
+// decay_products->Delete();
+// delete decay_products;
+// }// !=0
+// }
+//___________________________________________________________________________
+void DMRESHadronicSystemGenerator::Configure(const Registry & config)
+{
+ Algorithm::Configure(config);
+ this->LoadConfig();
+}
+//___________________________________________________________________________
+void DMRESHadronicSystemGenerator::Configure(string config)
+{
+ Algorithm::Configure(config);
+ this->LoadConfig();
+}
+//___________________________________________________________________________
+void DMRESHadronicSystemGenerator::LoadConfig(void)
+{
+ fResonanceDecayer = 0;
+ //fPreINukeDecayer = 0;
+
+ // Get the specified decayers
+ fResonanceDecayer =
+ dynamic_cast (this->SubAlg("Decayer"));
+ assert(fResonanceDecayer);
+ // fPreINukeDecayer =
+ // dynamic_cast (this->SubAlg("PreTransportDecayer"));
+ // assert(fPreINukeDecayer);
+}
+//___________________________________________________________________________
diff --git a/src/Physics/BoostedDarkMatter/EventGen/DMRESHadronicSystemGenerator.h b/src/Physics/BoostedDarkMatter/EventGen/DMRESHadronicSystemGenerator.h
new file mode 100644
index 0000000000..960a8e7188
--- /dev/null
+++ b/src/Physics/BoostedDarkMatter/EventGen/DMRESHadronicSystemGenerator.h
@@ -0,0 +1,67 @@
+//____________________________________________________________________________
+/*!
+
+\class genie::DMRESHadronicSystemGenerator
+
+\brief Generates the 'final state' hadronic system in DM RES interactions. (same as v RES)
+ It adds the remnant nucleus (if any), the pre-selected resonance
+ and the resonance decay products at the GHEP record.
+ Unlike the SPP thread, in the RES thread the resonance is specified
+ at the time an interaction is selected but its decay products not
+ (semi-inclusive resonance reactions). The off the mass-shell baryon
+ resonance is decayed using a phase space generator. All kinematically
+ available decay channels are being used (not just 1 pi channels).
+ Is a concrete implementation of the EventRecordVisitorI interface.
+
+\author Zachary W. Orr
+ Colorado State University
+
+ based on code by
+ Costas Andreopoulos
+ University of Liverpool & STFC Rutherford Appleton Laboratory
+
+
+\created November 23, 2004
+
+\cpright Copyright (c) 2003-2023, The GENIE Collaboration
+ For the full text of the license visit http://copyright.genie-mc.org
+*/
+//____________________________________________________________________________
+
+#ifndef _DMRES_HADRONIC_SYSTEM_GENERATOR_H_
+#define _DMRES_HADRONIC_SYSTEM_GENERATOR_H_
+
+#include "Physics/Common/HadronicSystemGenerator.h"
+
+namespace genie {
+
+class Decayer;
+
+class DMRESHadronicSystemGenerator : public HadronicSystemGenerator {
+
+public :
+ DMRESHadronicSystemGenerator();
+ DMRESHadronicSystemGenerator(string config);
+ ~DMRESHadronicSystemGenerator();
+
+ // implement the EventRecordVisitorI interface
+ void ProcessEventRecord(GHepRecord * event_rec) const;
+
+ // overload the Algorithm::Configure() methods to load private data
+ // members from configuration options
+ void Configure(const Registry & config);
+ void Configure(string config);
+
+private:
+
+ void LoadConfig (void);
+ int GetResonancePdgCode (GHepRecord * evrec) const;
+ void AddResonance (GHepRecord * evrec, int pdgc) const;
+ // void AddResonanceDecayProducts (GHepRecord * evrec, int pdgc) const;
+
+ const EventRecordVisitorI * fResonanceDecayer;
+};
+
+} // genie namespace
+
+#endif // _DMRES_HADRONIC_SYSTEM_GENERATOR_H_
diff --git a/src/Physics/BoostedDarkMatter/EventGen/DMRESInteractionListGenerator.cxx b/src/Physics/BoostedDarkMatter/EventGen/DMRESInteractionListGenerator.cxx
new file mode 100644
index 0000000000..f71d47c700
--- /dev/null
+++ b/src/Physics/BoostedDarkMatter/EventGen/DMRESInteractionListGenerator.cxx
@@ -0,0 +1,169 @@
+//____________________________________________________________________________
+/*
+ Copyright (c) 2003-2023, The GENIE Collaboration
+ For the full text of the license visit http://copyright.genie-mc.org
+
+ Zachary W. Orr
+ Colorado State University
+
+ based on code by
+ Costas Andreopoulos
+ University of Liverpool & STFC Rutherford Appleton Laboratory
+*/
+//____________________________________________________________________________
+
+#include "Framework/Algorithm/AlgConfigPool.h"
+#include "Framework/EventGen/InteractionList.h"
+#include "Framework/Interaction/Interaction.h"
+#include "Framework/Messenger/Messenger.h"
+#include "Framework/ParticleData/BaryonResUtils.h"
+#include "Framework/ParticleData/PDGCodes.h"
+#include "Framework/ParticleData/PDGUtils.h"
+#include "Physics/BoostedDarkMatter/EventGen/DMRESInteractionListGenerator.h"
+
+using namespace genie;
+
+//___________________________________________________________________________
+DMRESInteractionListGenerator::DMRESInteractionListGenerator() :
+InteractionListGeneratorI("genie::DMRESInteractionListGenerator")
+{
+
+}
+//___________________________________________________________________________
+DMRESInteractionListGenerator::DMRESInteractionListGenerator(string config) :
+InteractionListGeneratorI("genie::DMRESInteractionListGenerator", config)
+{
+
+}
+//___________________________________________________________________________
+DMRESInteractionListGenerator::~DMRESInteractionListGenerator()
+{
+
+}
+//___________________________________________________________________________
+InteractionList * DMRESInteractionListGenerator::CreateInteractionList(
+ const InitialState & init_state) const
+{
+ LOG("IntLst", pINFO) << "InitialState = " << init_state.AsString();
+
+ // In the thread generating interactions from the list produced here (RES),
+ // we simulate (for free and nuclear targets) semi-inclusive resonance
+ // interactions: v + N -> v(l) + R -> v(l) + X
+ // Specifically, the RES thread generates:
+ //
+ // CC:
+ // nu + p (A) -> l- R (A), for all resonances with Q=+2
+ // nu + n (A) -> l- R (A), for all resonances with Q=+1
+ // \bar{nu} + p (A) -> l+ R (A), for all resonances with Q= 0
+ // \bar{nu} + n (A) -> l+ R (A), for all resonances with Q=-1
+ // NC:
+ // nu + p (A) -> nu R (A), for all resonances with Q=+1
+ // nu + n (A) -> nu R (A), for all resonances with Q= 0
+ // \bar{nu} + p (A) -> \bar{nu} R (A), for all resonances with Q=+1
+ // \bar{nu} + n (A) -> \bar{nu} R (A), for all resonances with Q= 0
+ //
+ // and then the resonance R should be allowed to decay to get the full
+ // hadronic final state X. All decay channels kinematically accessible
+ // to the (off the mass-shell produced) resonance can be allowed.
+
+ // specify the requested interaction type
+ InteractionType_t inttype;
+ // Only accept DM scattering here
+ if (fIsDM) inttype = kIntDarkMatter;
+ else {
+ LOG("IntLst", pWARN)
+ << "Unknown InteractionType! Returning NULL InteractionList "
+ << "for init-state: " << init_state.AsString();
+ return 0;
+ }
+
+ // create a process information object
+ ProcessInfo proc_info(kScDarkMatterResonant, inttype);
+
+ // learn whether the input nuclear or free target has avail. p and n
+ const Target & inp_target = init_state.Tgt();
+ bool hasP = (inp_target.Z() > 0);
+ bool hasN = (inp_target.N() > 0);
+
+ // possible hit nucleons
+ const int hit_nucleon[2] = {kPdgProton, kPdgNeutron};
+
+ // create an interaction list
+ InteractionList * intlist = new InteractionList;
+
+ // loop over all baryon resonances considered in current MC job
+ unsigned int nres = fResList.NResonances();
+ for(unsigned int ires = 0; ires < nres; ires++) {
+
+ //get current resonance
+ Resonance_t res = fResList.ResonanceId(ires);
+
+ // loop over hit nucleons
+ for(int i=0; i<2; i++) {
+
+ // proceed only if the hit nucleon exists in the current init state
+ if(hit_nucleon[i]==kPdgProton && !hasP) continue;
+ if(hit_nucleon[i]==kPdgNeutron && !hasN) continue;
+
+ // proceed only if the current resonance conserves charge
+ // (the only problematic case is when the RES charge has to be +2
+ // because then only Delta resonances are possible)
+// bool skip_res = proc_info.IsWeakCC() &&
+// pdg::IsNeutrino(init_state.ProbePdg()) &&
+// (hit_nucleon[i]==kPdgProton) &&
+// (!utils::res::IsDelta(res));
+// if(skip_res) continue;
+
+ // create an interaction
+ Interaction * interaction = new Interaction(init_state, proc_info);
+
+ // add the struck nucleon
+ Target * target = interaction->InitStatePtr()->TgtPtr();
+ target->SetHitNucPdg(hit_nucleon[i]);
+
+ // add the baryon resonance in the exclusive tag
+ XclsTag * xcls = interaction->ExclTagPtr();
+ xcls->SetResonance(res);
+
+ // add the interaction at the interaction list
+ intlist->push_back(interaction);
+
+ }//hit nucleons
+ } //resonances
+
+ if(intlist->size() == 0) {
+ LOG("IntLst", pERROR)
+ << "Returning NULL InteractionList for init-state: "
+ << init_state.AsString();
+ delete intlist;
+ return 0;
+ }
+
+ return intlist;
+}
+//___________________________________________________________________________
+void DMRESInteractionListGenerator::Configure(const Registry & config)
+{
+ Algorithm::Configure(config);
+ this->LoadConfigData();
+}
+//____________________________________________________________________________
+void DMRESInteractionListGenerator::Configure(string config)
+{
+ Algorithm::Configure(config);
+ this->LoadConfigData();
+}
+//____________________________________________________________________________
+void DMRESInteractionListGenerator::LoadConfigData(void)
+{
+ string resonances = "";
+ this->GetParam("ResonanceNameList", resonances);
+ SLOG("IntLst", pDEBUG) << "Resonance list: " << resonances;
+
+ fResList.Clear();
+ fResList.DecodeFromNameList(resonances);
+ LOG("IntLst", pDEBUG) << fResList;
+
+ this->GetParamDef("is-DM", fIsDM, false);
+}
+//____________________________________________________________________________
diff --git a/src/Physics/BoostedDarkMatter/EventGen/DMRESInteractionListGenerator.h b/src/Physics/BoostedDarkMatter/EventGen/DMRESInteractionListGenerator.h
new file mode 100644
index 0000000000..558ab01cd2
--- /dev/null
+++ b/src/Physics/BoostedDarkMatter/EventGen/DMRESInteractionListGenerator.h
@@ -0,0 +1,54 @@
+//____________________________________________________________________________
+/*!
+
+\class genie::DMRESInteractionListGenerator
+
+\brief Creates a list of all the interactions that can be generated by the
+ RES thread (generates semi-inclusive resonance reactions).
+ Concrete implementations of the InteractionListGeneratorI interface.
+ follows same procedure as RESInteractionListGenerator.h
+
+\author Zach Orr
+ Colorado State University
+
+
+\created Jan 27, 2024
+
+\cpright Copyright (c) 2003-2023, The GENIE Collaboration
+ For the full text of the license visit http://copyright.genie-mc.org
+*/
+//____________________________________________________________________________
+
+#ifndef _DMRES_INTERACTION_LIST_GENERATOR_H_
+#define _DMRES_INTERACTION_LIST_GENERATOR_H_
+
+#include "Framework/ParticleData/BaryonResList.h"
+#include "Framework/EventGen/InteractionListGeneratorI.h"
+
+namespace genie {
+
+class DMRESInteractionListGenerator : public InteractionListGeneratorI {
+
+public :
+ DMRESInteractionListGenerator();
+ DMRESInteractionListGenerator(string config);
+ ~DMRESInteractionListGenerator();
+
+ // implement the InteractionListGeneratorI interface
+ InteractionList * CreateInteractionList(const InitialState & init) const;
+
+ // overload the Algorithm::Configure() methods to load private data
+ // members from configuration options
+ void Configure(const Registry & config);
+ void Configure(string config);
+
+private:
+
+ void LoadConfigData(void);
+
+ bool fIsDM;
+ BaryonResList fResList;
+};
+
+} // genie namespace
+#endif // _DMRES_INTERACTION_LIST_GENERATOR_H_
diff --git a/src/Physics/BoostedDarkMatter/EventGen/DMRESKinematicsGenerator.cxx b/src/Physics/BoostedDarkMatter/EventGen/DMRESKinematicsGenerator.cxx
new file mode 100644
index 0000000000..bac01c3af7
--- /dev/null
+++ b/src/Physics/BoostedDarkMatter/EventGen/DMRESKinematicsGenerator.cxx
@@ -0,0 +1,372 @@
+//____________________________________________________________________________
+/*
+ Copyright (c) 2003-2023, The GENIE Collaboration
+ For the full text of the license visit http://copyright.genie-mc.org
+
+ /author Zach Orr
+ Colorado State University
+ follows same procedure as RESKinematicsGenerator.cxx
+
+ Costas Andreopoulos
+ University of Liverpool & STFC Rutherford Appleton Laboratory
+*/
+//____________________________________________________________________________
+
+#include
+#include
+#include
+
+#include "Framework/Algorithm/AlgConfigPool.h"
+#include "Framework/Conventions/GBuild.h"
+#include "Framework/Conventions/Controls.h"
+#include "Framework/Conventions/KineVar.h"
+#include "Framework/Conventions/KinePhaseSpace.h"
+#include "Framework/EventGen/EVGThreadException.h"
+#include "Framework/EventGen/EventGeneratorI.h"
+#include "Framework/EventGen//RunningThreadInfo.h"
+#include "Framework/GHEP/GHepRecord.h"
+#include "Framework/GHEP/GHepFlags.h"
+#include "Framework/Messenger/Messenger.h"
+#include "Framework/Numerical/RandomGen.h"
+#include "Framework/Numerical/MathUtils.h"
+#include "Framework/ParticleData/BaryonResonance.h"
+#include "Framework/ParticleData/BaryonResUtils.h"
+#include "Framework/Utils/KineUtils.h"
+#include "Physics/BoostedDarkMatter/EventGen/DMRESKinematicsGenerator.h"
+
+using namespace genie;
+using namespace genie::controls;
+using namespace genie::utils;
+
+//___________________________________________________________________________
+DMRESKinematicsGenerator::DMRESKinematicsGenerator() :
+KineGeneratorWithCache("genie::DMRESKinematicsGenerator")
+{
+ fEnvelope = 0;
+}
+//___________________________________________________________________________
+DMRESKinematicsGenerator::DMRESKinematicsGenerator(string config) :
+KineGeneratorWithCache("genie::DMRESKinematicsGenerator", config)
+{
+ fEnvelope = 0;
+}
+//___________________________________________________________________________
+DMRESKinematicsGenerator::~DMRESKinematicsGenerator()
+{
+ if(fEnvelope) delete fEnvelope;
+}
+//___________________________________________________________________________
+void DMRESKinematicsGenerator::ProcessEventRecord(GHepRecord * evrec) const
+{
+ if(fGenerateUniformly) {
+ LOG("DMRESKinematics", pNOTICE)
+ << "Generating kinematics uniformly over the allowed phase space";
+ }
+
+ //-- Get the random number generators
+ RandomGen * rnd = RandomGen::Instance();
+
+ //-- Access cross section algorithm for running thread
+ RunningThreadInfo * rtinfo = RunningThreadInfo::Instance();
+ const EventGeneratorI * evg = rtinfo->RunningThread();
+ fXSecModel = evg->CrossSectionAlg();
+
+ //-- Get the interaction from the GHEP record
+ Interaction * interaction = evrec->Summary();
+ interaction->SetBit(kISkipProcessChk);
+
+ //-- DM process
+ bool is_DM = interaction->ProcInfo().IsDarkMatterResonant();
+
+ //-- Compute the W limits
+ // (the physically allowed W's, unless an external cut is imposed)
+ const KPhaseSpace & kps = interaction->PhaseSpace();
+ Range1D_t W = kps.Limits(kKVW);
+
+ if(W.max <=0 || W.min>=W.max) {
+ LOG("DMRESKinematics", pWARN) << "No available phase space";
+ evrec->EventFlags()->SetBitNumber(kKineGenErr, true);
+ genie::exceptions::EVGThreadException exception;
+ exception.SetReason("No available phase space");
+ exception.SwitchOnFastForward();
+ throw exception;
+ }
+
+ const InitialState & init_state = interaction -> InitState();
+ double E = init_state.ProbeE(kRfHitNucRest);
+
+ //-- For the subsequent kinematic selection with the rejection method:
+ // Calculate the max differential cross section or retrieve it from the
+ // cache. Throw an exception and quit the evg thread if a non-positive
+ // value is found.
+ // If the kinematics are generated uniformly over the allowed phase
+ // space the max xsec is irrelevant
+ double xsec_max = (fGenerateUniformly) ? -1 : this->MaxXSec(evrec);
+
+ //-- Try to select a valid W, Q2 pair using the rejection method
+ double dW = W.max - W.min;
+ double xsec = -1;
+
+ unsigned int iter = 0;
+ bool accept = false;
+ while(1) {
+ iter++;
+ if(iter > kRjMaxIterations) {
+ LOG("DMRESKinematics", pWARN)
+ << "*** Could not select a valid (W,Q^2) pair after "
+ << iter << " iterations";
+ evrec->EventFlags()->SetBitNumber(kKineGenErr, true);
+ genie::exceptions::EVGThreadException exception;
+ exception.SetReason("Couldn't select kinematics");
+ exception.SwitchOnFastForward();
+ throw exception;
+ }
+
+ double gW = 0; // current hadronic invariant mass
+ double gQ2 = 0; // current momentum transfer
+ double gQD2 = 0; // tranformed Q2 to take out dipole form
+
+ if(fGenerateUniformly)
+ {
+ //-- Generate a W uniformly in the kinematically allowed range.
+ // For the generated W, compute the Q2 range and generate a value
+ // uniformly over that range
+ gW = W.min + dW * rnd->RndKine().Rndm();
+ interaction->KinePtr()->SetW(gW);
+ Range1D_t Q2 = kps.Q2Lim_W();
+ if(Q2.max<=0. || Q2.min>=Q2.max) continue;
+ gQ2 = Q2.min + (Q2.max-Q2.min) * rnd->RndKine().Rndm();
+ interaction->SetBit(kISkipKinematicChk);
+ }
+ else
+ {
+
+ // dm scattering
+ // Selecting unweighted event kinematics using an importance sampling
+ // method. Q2 with be transformed to QD2 to take out the dipole form.
+ interaction->KinePtr()->SetW(W.min);
+ Range1D_t Q2 = kps.Q2Lim_W();
+ double Q2min = -99.;
+ if (is_DM)
+ Q2min = Q2.min + kASmallNum;
+ else
+ Q2min = 0 + kASmallNum;
+ double Q2max = Q2.max - kASmallNum;
+
+ // In unweighted mode - use transform that takes out the dipole form
+ double QD2min = utils::kinematics::Q2toQD2(Q2max);
+ double QD2max = utils::kinematics::Q2toQD2(Q2min);
+
+ gW = W.min + dW * rnd->RndKine().Rndm();
+ gQD2 = QD2min + (QD2max - QD2min) * rnd->RndKine().Rndm();
+
+ // QD2 -> Q2
+ gQ2 = utils::kinematics::QD2toQ2(gQD2);
+ } // uniformly over phase space?
+
+ LOG("DMRESKinematics", pINFO) << "Trying: W = " << gW << ", Q2 = " << gQ2;
+
+ //-- Set kinematics for current trial
+ interaction->KinePtr()->SetW(gW);
+ interaction->KinePtr()->SetQ2(gQ2);
+
+ //-- Computing cross section for the current kinematics
+ xsec = fXSecModel->XSec(interaction, kPSWQD2fE);
+ //-- Decide whether to accept the current kinematics
+ if(!fGenerateUniformly)
+ {
+ // unified neutrino / electron scattering
+ double t = xsec_max * rnd->RndKine().Rndm();
+ this->AssertXSecLimits(interaction, xsec, xsec_max);
+ accept = (t < xsec);
+ } // charged lepton or neutrino scattering?
+ else
+ {
+ accept = (xsec>0);
+ } // uniformly over phase space
+
+ //-- If the generated kinematics are accepted, finish-up module's job
+ if(accept) {
+ LOG("DMRESKinematics", pINFO)
+ << "Selected: W = " << gW << ", Q2 = " << gQ2;
+ // reset 'trust' bits
+ interaction->ResetBit(kISkipProcessChk);
+ interaction->ResetBit(kISkipKinematicChk);
+
+ // compute x,y for selected W,Q2
+ // note: hit nucleon can be off the mass-shell
+ double gx=-1, gy=-1;
+ double M = init_state.Tgt().HitNucP4().M();
+ kinematics::WQ2toXY(E,M,gW,gQ2,gx,gy);
+
+ // set the cross section for the selected kinematics
+ evrec->SetDiffXSec(xsec,kPSWQ2fE);
+
+ // for uniform kinematics, compute an event weight as
+ // wght = (phase space volume)*(differential xsec)/(event total xsec)
+ if(fGenerateUniformly) {
+ double vol = kinematics::PhaseSpaceVolume(interaction,kPSWQ2fE);
+ double totxsec = evrec->XSec();
+ double wght = (vol/totxsec)*xsec;
+ LOG("DMRESKinematics", pNOTICE) << "Kinematics wght = "<< wght;
+
+ // apply computed weight to the current event weight
+ wght *= evrec->Weight();
+ LOG("DMRESKinematics", pNOTICE) << "Current event wght = " << wght;
+ evrec->SetWeight(wght);
+ }
+
+ // lock selected kinematics & clear running values
+ interaction->KinePtr()->SetQ2(gQ2, true);
+ interaction->KinePtr()->SetW (gW, true);
+ interaction->KinePtr()->Setx (gx, true);
+ interaction->KinePtr()->Sety (gy, true);
+ interaction->KinePtr()->ClearRunningValues();
+
+ return;
+ } // accept
+ } // iterations
+}
+//___________________________________________________________________________
+void DMRESKinematicsGenerator::Configure(const Registry & config)
+{
+ Algorithm::Configure(config);
+ this->LoadConfig();
+}
+//____________________________________________________________________________
+void DMRESKinematicsGenerator::Configure(string config)
+{
+ Algorithm::Configure(config);
+ this->LoadConfig();
+}
+//____________________________________________________________________________
+void DMRESKinematicsGenerator::LoadConfig(void)
+{
+ // Safety factor for the maximum differential cross section
+ this->GetParamDef("MaxXSec-SafetyFactor", fSafetyFactor, 1.25);
+
+ // Minimum energy for which max xsec would be cached, forcing explicit
+ // calculation for lower eneries
+ this->GetParamDef("Cache-MinEnergy", fEMin, 0.5);
+
+ // Load Wcut used in DIS/RES join scheme
+ this->GetParam("Wcut", fWcut);
+
+ // Maximum allowed fractional cross section deviation from maxim cross
+ // section used in rejection method
+ this->GetParamDef("MaxXSec-DiffTolerance", fMaxXSecDiffTolerance, 999999.);
+ assert(fMaxXSecDiffTolerance>=0);
+
+ // Generate kinematics uniformly over allowed phase space and compute
+ // an event weight?
+ this->GetParamDef("UniformOverPhaseSpace", fGenerateUniformly, false);
+
+ // Envelope employed when importance sampling is used
+ // (initialize with dummy range)
+ if(fEnvelope) delete fEnvelope;
+ fEnvelope = new TF2("res-envelope",
+ kinematics::RESImportanceSamplingEnvelope,0.01,1,0.01,1,4);
+ // stop ROOT from deleting this object of its own volition
+ gROOT->GetListOfFunctions()->Remove(fEnvelope);
+}
+
+double DMRESKinematicsGenerator::ComputeMaxXSec(
+ const Interaction * interaction) const
+{
+// Computes the maximum differential cross section in the requested phase
+// space. This method overloads KineGeneratorWithCache::ComputeMaxXSec
+// method and the value is cached at a circular cache branch for retrieval
+// during subsequent event generation.
+// The computed max differential cross section does not need to be the exact
+// maximum. The number used in the rejection method will be scaled up by a
+// safety factor. But this needs to be fast - do not use a very fine grid.
+
+ double max_xsec = 0.;
+
+ const InitialState & init_state = interaction -> InitState();
+ double E = init_state.ProbeE(kRfHitNucRest);
+ bool is_em = interaction->ProcInfo().IsEM();
+ double Q2Thres = is_em ? utils::kinematics::electromagnetic::kMinQ2Limit : controls::kMinQ2Limit;
+
+ double md;
+ if(!interaction->ExclTag().KnownResonance()) md=1.23;
+ else {
+ Resonance_t res = interaction->ExclTag().Resonance();
+ md=res::Mass(res);
+ }
+
+ // ** 2-D Scan
+ const KPhaseSpace & kps = interaction->PhaseSpace();
+ Range1D_t rW = kps.WLim();
+
+ int NW = 20;
+ double Wmin = rW.min + kASmallNum;
+ double Wmax = rW.max - kASmallNum;
+
+ Wmax = TMath::Min(Wmax,fWcut);
+
+ Wmin = TMath::Max(Wmin, md-.3);
+ Wmax = TMath::Min(Wmax, md+.3);
+
+ if(Wmax-Wmin<0.05) { NW=1; Wmin=Wmax; }
+
+ double dW = (NW>1) ? (Wmax-Wmin)/(NW-1) : 0.;
+
+ for(int iw=0; iwKinePtr()->SetW(W);
+
+ int NQ2 = 25;
+ int NQ2b = 4;
+
+ Range1D_t rQ2 = kps.Q2Lim_W();
+ if( rQ2.max < Q2Thres || rQ2.min <=0 ) continue;
+ if( rQ2.max-rQ2.min<0.02 ) {NQ2=5; NQ2b=3;}
+
+ double logQ2min = TMath::Log(rQ2.min+kASmallNum);
+ double logQ2max = TMath::Log(rQ2.max-kASmallNum);
+ double dlogQ2 = (logQ2max - logQ2min) /(NQ2-1);
+ double xseclast = -1;
+ bool increasing = true;
+
+ for(int iq2=0; iq2KinePtr()->SetQ2(Q2);
+ double xsec = fXSecModel->XSec(interaction, kPSWQD2fE);
+ LOG("DMRESKinematics", pDEBUG)
+ << "xsec(W= " << W << ", Q2= " << Q2 << ") = " << xsec;
+ max_xsec = TMath::Max(xsec, max_xsec);
+ increasing = xsec-xseclast>=0;
+ xseclast=xsec;
+
+ // once the cross section stops increasing, I reduce the step size and
+ // step backwards a little bit to handle cases that the max cross section
+ // is grossly underestimated (very peaky distribution & large step)
+ if(!increasing)
+ {
+ dlogQ2/=NQ2b;
+ for(int iq2b=0; iq2bKinePtr()->SetQ2(Q2);
+ xsec = fXSecModel->XSec(interaction, kPSWQD2fE);
+ LOG("DMRESKinematics", pDEBUG)
+ << "xsec(W= " << W << ", Q2= " << Q2 << ") = " << xsec;
+ max_xsec = TMath::Max(xsec, max_xsec);
+ }
+ break;
+ }
+ } // Q2
+ }//W
+
+ // Apply safety factor, since value retrieved from the cache might
+ // correspond to a slightly different energy
+ // Apply larger safety factor for smaller energies.
+ max_xsec *= ( (El+Resonance) kinematics.
+ Is a concrete implementation of the EventRecordVisitorI interface.
+ Follows same procedure as RESKinematicsGenerator.h
+
+\author Zach Orr
+ Colorado State University
+
+\created November 18, 2004
+
+\cpright Copyright (c) 2003-2023, The GENIE Collaboration
+ For the full text of the license visit http://copyright.genie-mc.org
+*/
+//____________________________________________________________________________
+
+#ifndef _DMRES_KINEMATICS_GENERATOR_H_
+#define _DMRES_KINEMATICS_GENERATOR_H_
+
+#include "Framework/Utils/Range1.h"
+#include "Physics/Common/KineGeneratorWithCache.h"
+
+class TF2;
+
+namespace genie {
+
+class DMRESKinematicsGenerator : public KineGeneratorWithCache {
+
+public :
+ DMRESKinematicsGenerator();
+ DMRESKinematicsGenerator(string config);
+ ~DMRESKinematicsGenerator();
+
+ // implement the EventRecordVisitorI interface
+ void ProcessEventRecord(GHepRecord * event_rec) const;
+
+ // overload the Algorithm::Configure() methods to load private data
+ // members from configuration options
+ void Configure(const Registry & config);
+ void Configure(string config);
+
+private:
+ void LoadConfig (void);
+ double ComputeMaxXSec (const Interaction * interaction) const;
+
+ mutable TF2 * fEnvelope; ///< 2-D envelope used for importance sampling
+ double fWcut; ///< Wcut parameter in DIS/RES join scheme
+};
+
+} // genie namespace
+#endif // _DMRES_KINEMATICS_GENERATOR_H_
diff --git a/src/Physics/BoostedDarkMatter/EventGen/DMRESOutgoingDarkGenerator.cxx b/src/Physics/BoostedDarkMatter/EventGen/DMRESOutgoingDarkGenerator.cxx
new file mode 100644
index 0000000000..4b0d2bbcb9
--- /dev/null
+++ b/src/Physics/BoostedDarkMatter/EventGen/DMRESOutgoingDarkGenerator.cxx
@@ -0,0 +1,51 @@
+//____________________________________________________________________________
+/*
+ Copyright (c) 2003-2023, The GENIE Collaboration
+ For the full text of the license visit http://copyright.genie-mc.org
+
+
+ Author: Zach Orr
+ Colorado State University
+
+ Costas Andreopoulos
+ University of Liverpool & STFC Rutherford Appleton Laboratory
+*/
+//____________________________________________________________________________
+
+#include
+
+#include "Physics/BoostedDarkMatter/EventGen/DMRESOutgoingDarkGenerator.h"
+#include "Framework/EventGen/EVGThreadException.h"
+#include "Framework/GHEP/GHepRecord.h"
+#include "Framework/GHEP/GHepParticle.h"
+#include "Framework/GHEP/GHepFlags.h"
+#include "Framework/Messenger/Messenger.h"
+
+using namespace genie;
+
+//___________________________________________________________________________
+DMRESOutgoingDarkGenerator::DMRESOutgoingDarkGenerator() :
+OutgoingDarkGenerator("genie::DMRESOutgoingDarkGenerator")
+{
+
+}
+//___________________________________________________________________________
+DMRESOutgoingDarkGenerator::DMRESOutgoingDarkGenerator(string config) :
+OutgoingDarkGenerator("genie::DMRESOutgoingDarkGenerator", config)
+{
+
+}
+//___________________________________________________________________________
+DMRESOutgoingDarkGenerator::~DMRESOutgoingDarkGenerator()
+{
+
+}
+//___________________________________________________________________________
+void DMRESOutgoingDarkGenerator::ProcessEventRecord(GHepRecord * evrec) const
+{
+// This method generates the final state primary lepton in RES events
+
+ // no modification is required to the std implementation
+ OutgoingDarkGenerator::ProcessEventRecord(evrec);
+}
+//___________________________________________________________________________
diff --git a/src/Physics/BoostedDarkMatter/EventGen/DMRESOutgoingDarkGenerator.h b/src/Physics/BoostedDarkMatter/EventGen/DMRESOutgoingDarkGenerator.h
new file mode 100644
index 0000000000..df482b736f
--- /dev/null
+++ b/src/Physics/BoostedDarkMatter/EventGen/DMRESOutgoingDarkGenerator.h
@@ -0,0 +1,37 @@
+//____________________________________________________________________________
+/*!
+
+\class genie::DMRESPrimaryLeptonGenerator
+
+\brief Generates the final state primary lepton in DM RES interactions.
+ Is a concrete implementation of the EventRecordVisitorI interface.
+
+\author Zach Orr Colorado State
+
+\created Jan 27 2024
+
+\cpright Copyright (c) 2003-2023, The GENIE Collaboration
+ For the full text of the license visit http://copyright.genie-mc.org
+*/
+//____________________________________________________________________________
+
+#ifndef _DMRES_OUTGOING_DARK_GENERATOR_H_
+#define _DMRES_OUTGOING_DARK_GENERATOR_H_
+
+#include "Physics/Common/OutgoingDarkGenerator.h"
+
+namespace genie {
+
+ class DMRESOutgoingDarkGenerator : public OutgoingDarkGenerator {
+
+public :
+ DMRESOutgoingDarkGenerator();
+ DMRESOutgoingDarkGenerator(string config);
+ ~DMRESOutgoingDarkGenerator();
+
+ // implement the EventRecordVisitorI interface
+ void ProcessEventRecord(GHepRecord * event_rec) const;
+};
+
+} // genie namespace
+#endif // _DMRES_OUTGOING_DARK_GENERATOR_H_
diff --git a/src/Physics/BoostedDarkMatter/EventGen/LinkDef.h b/src/Physics/BoostedDarkMatter/EventGen/LinkDef.h
index 1a89a5ca5f..06dcfac82d 100644
--- a/src/Physics/BoostedDarkMatter/EventGen/LinkDef.h
+++ b/src/Physics/BoostedDarkMatter/EventGen/LinkDef.h
@@ -10,9 +10,16 @@
#pragma link C++ class genie::DMELInteractionListGenerator;
#pragma link C++ class genie::DMELKinematicsGenerator;
#pragma link C++ class genie::DMELOutgoingDarkGenerator;
+
#pragma link C++ class genie::DMDISOutgoingDarkGenerator;
#pragma link C++ class genie::DMDISInteractionListGenerator;
#pragma link C++ class genie::DMDISKinematicsGenerator;
+
+#pragma link C++ class genie::DMRESInteractionListGenerator;
+#pragma link C++ class genie::DMRESKinematicsGenerator;
+#pragma link C++ class genie::DMRESOutgoingDarkGenerator;
+#pragma link C++ class genie::DMRESHadronicSystemGenerator;
+
#pragma link C++ class genie::DMEOutgoingDarkGenerator;
#pragma link C++ class genie::DMEInteractionListGenerator;
#pragma link C++ class genie::DMEKinematicsGenerator;
diff --git a/src/Physics/BoostedDarkMatter/XSection/DMRESPXSec.cxx b/src/Physics/BoostedDarkMatter/XSection/DMRESPXSec.cxx
new file mode 100644
index 0000000000..224c401e94
--- /dev/null
+++ b/src/Physics/BoostedDarkMatter/XSection/DMRESPXSec.cxx
@@ -0,0 +1,514 @@
+//____________________________________________________________________________
+/*
+ Copyright (c) 2003-2023, The GENIE Collaboration
+ For the full text of the license visit http://copyright.genie-mc.org
+
+ Zachary W. Orr
+ Colorado State University
+
+based on code by
+ Costas Andreopoulos
+ University of Liverpool & STFC Rutherford Appleton Laboratory
+*/
+//____________________________________________________________________________
+
+#include
+#include
+
+#include "Framework/Algorithm/AlgFactory.h"
+#include "Framework/Algorithm/AlgConfigPool.h"
+#include "Framework/ParticleData/BaryonResUtils.h"
+#include "Framework/Conventions/GBuild.h"
+#include "Framework/Conventions/Constants.h"
+#include "Framework/Conventions/RefFrame.h"
+#include "Framework/Conventions/KineVar.h"
+#include "Framework/Conventions/Units.h"
+#include "Framework/Messenger/Messenger.h"
+#include "Framework/Numerical/Spline.h"
+#include "Framework/ParticleData/PDGCodes.h"
+#include "Framework/ParticleData/PDGUtils.h"
+#include "Framework/ParticleData/PDGLibrary.h"
+#include "Framework/Utils/KineUtils.h"
+#include "Framework/Numerical/MathUtils.h"
+#include "Framework/Utils/Range1.h"
+#include "Framework/Utils/BWFunc.h"
+#include "Physics/BoostedDarkMatter/XSection/DMRESPXSec.h"
+#include "Physics/BoostedDarkMatter/XSection/RSHelicityAmplModelDMI.h"
+#include "Physics/BoostedDarkMatter/XSection/RSHelicityAmplDM.h"
+#include "Physics/XSectionIntegration/XSecIntegratorI.h"
+#include "Physics/NuclearState/FermiMomentumTablePool.h"
+#include "Physics/NuclearState/FermiMomentumTable.h"
+#include "Physics/NuclearState/NuclearUtils.h"
+
+using namespace genie;
+using namespace genie::constants;
+
+//____________________________________________________________________________
+DMRESPXSec::DMRESPXSec() :
+XSecAlgorithmI("genie::DMRESPXSec")
+{
+
+}
+//____________________________________________________________________________
+DMRESPXSec::DMRESPXSec(string config) :
+XSecAlgorithmI("genie::DMRESPXSec", config)
+{
+
+}
+//____________________________________________________________________________
+DMRESPXSec::~DMRESPXSec()
+{
+
+}
+//____________________________________________________________________________
+double DMRESPXSec::XSec(
+ const Interaction * interaction, KinePhaseSpace_t kps) const
+{
+ if(! this -> ValidProcess (interaction) ) return 0.;
+ if(! this -> ValidKinematics (interaction) ) return 0.;
+
+ const InitialState & init_state = interaction -> InitState();
+ const ProcessInfo & proc_info = interaction -> ProcInfo();
+ const Target & target = init_state.Tgt();
+
+ const Kinematics & kinematics = interaction -> Kine();
+ LOG("DMRESPXSec", pDEBUG) << "Using v^" << fVelMode << " dependence";
+
+//Get Kinematic Parameters:
+ double W = kinematics.W();
+ double W2 = TMath::Power(W, 2); //W^2
+ double q2 = kinematics.q2();
+
+//Rejection Sampling from Kinematics:
+// Under the DIS/RES joining scheme, xsec(RES)=0 for W>=Wcut
+ if(fUsingDisResJoin) {
+ if(W>=fWcut) {
+#ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__
+ LOG("DMRES", pDEBUG)
+ << "RES/DIS Join Scheme: XSec[RES, W=" << W
+ << " >= Wcut=" << fWcut << "] = 0";
+#endif
+ return 0;
+ }
+ }
+//Pass: Resonance XSec
+
+//Probe Res Interaction:
+// Get the input baryon resonance:
+ Resonance_t resonance = interaction->ExclTag().Resonance();
+ string resname = utils::res::AsString(resonance);
+ bool is_delta = utils::res::IsDelta (resonance);
+
+// Get the dark matter, target nucleon & DM current:
+ int nucpdgc = target.HitNucPdg();
+ int probepdgc = init_state.ProbePdg();
+ bool is_dm = pdg::IsDarkMatter (probepdgc);
+ bool is_dmbar = pdg::IsAntiDarkMatter (probepdgc);
+
+
+ bool is_p = pdg::IsProton (nucpdgc);
+ bool is_n = pdg::IsNeutron (nucpdgc);
+ bool is_dmres = proc_info.IsDarkMatterResonant();
+
+ //Need break for is not DM
+ if(!is_dmres) {
+ return 0;
+ }
+
+ // Get baryon resonance parameters
+ int IR = utils::res::ResonanceIndex (resonance);
+ int LR = utils::res::OrbitalAngularMom (resonance);
+ double MR = utils::res::Mass (resonance);
+ double WR = utils::res::Width (resonance);
+ double NR = fNormBW?utils::res::BWNorm (resonance,fN0ResMaxNWidths,fN2ResMaxNWidths,fGnResMaxNWidths):1;
+
+ // Following NeuGEN, avoid problems with underlying unphysical
+ // model assumptions by restricting the allowed W phase space
+ // around the resonance peak
+ if (fNormBW) {
+ if (W > MR + fN0ResMaxNWidths * WR && IR==0) return 0.;
+ else if (W > MR + fN2ResMaxNWidths * WR && IR==2) return 0.;
+ else if (W > MR + fGnResMaxNWidths * WR) return 0.;
+ }
+
+ //Auxillary Kinematic factors
+ double E = init_state.ProbeE(kRfHitNucRest); //E1
+ double E2 = TMath::Power(E,2); //E1^2
+ double Mnuc = target.HitNucMass(); //Nucleon mass
+ double Mnuc2 = TMath::Power(Mnuc, 2); //m^2
+
+ //Scalar Charge
+ double fQchiS2 = TMath::Power(fQchiS,2); //QS^2
+ // L and R charges
+ double fQchiL = fQchiV-fQchiA;
+ double fQchiR = fQchiV+fQchiA;
+
+ // Compute kinematic factors
+ double k = 0.5 * (W2 - Mnuc2)/Mnuc;
+ double v = k - 0.5 * q2/Mnuc;
+ double v2 = TMath::Power(v, 2);
+ double Q2 = v2 - q2;
+ double Q = TMath::Sqrt(Q2);
+ double Eprime = E - v;
+
+ double U = 0.5 * (E + Eprime + Q) / E;
+ double V = 0.5 * (E + Eprime - Q) / E;
+ double U2 = TMath::Power(U, 2);
+ double V2 = TMath::Power(V, 2);
+ double UV = U*V;
+
+
+// Masses
+ double mchi = init_state.GetProbeP4(kRfHitNucRest)->M(); //DM mass: mx
+ double mchi2 = TMath::Power(mchi, 2); // mx^2
+ double mZprime2 = TMath::Power(fMedMass, 2); // mZ'^2
+ double mZprime4 = TMath::Power(mZprime2, 2); //mZ'^4
+//DM charge auxillary factors
+ double fQchiLmR = fQchiL-fQchiR; // QL - QR
+ double fQchiLR = fQchiL * fQchiR; // QL*QR
+ double fQchiLmR2 = TMath::Power(fQchiLmR, 2); //(QL - QR)^2
+ double fQchiL2 = TMath::Power(fQchiL, 2); //QL^2
+ double fQchiR2 = TMath::Power(fQchiR, 2); //QR^2
+//DM mass auxillary factors
+ double mZ_q2 = TMath::Power(mZprime2 - q2, 2)/mZprime4; //(mZ'^2 - q^2)^2 / mZ'^4
+ double mchiTerm = (mchi2 * Q2)/(E2 * q2); //mchi^2 * Q^2 / E^2 * q^2
+
+ //Spin average over incident DM = 0.5
+ double AL = U2*fQchiL2 + V2*fQchiR2 + 2*mchiTerm*fQchiLR;
+ double AR = V2*fQchiL2 + U2*fQchiR2 + 2*mchiTerm*fQchiLR;
+ double AS = 2*UV*(fQchiL2 + fQchiR2) + mchiTerm*fQchiLmR2;
+ //DM term
+ double AZ = 0.0;
+ if (mZprime2 != 0.0){
+ AZ = -mchiTerm*mZ_q2*fQchiLmR2;
+ }
+
+ //For Scalar DM: spin average = 1
+ if(fVelMode == 2){
+ AL = fQchiS2 * (2*UV + 2*mchiTerm);
+ AR = fQchiS2 * (2*UV + 2*mchiTerm);
+ AS = fQchiS2 * (TMath::Power((U+V), 2));
+ AZ = 0.0;
+}
+ // Calculate the Feynman-Kislinger-Ravndall parameters
+ double Go = TMath::Power(1 - 0.25 * q2/Mnuc2, 0.5-IR);
+ double GV = Go * TMath::Power( 1./(1-q2/fMv2), 2);
+ double GA = Go * TMath::Power( 1./(1-q2/fMa2), 2);
+ if(mZprime2 == 0.){
+ GA = 0;
+ }
+
+ double d = TMath::Power(W+Mnuc,2.) - q2;
+ double d2 = W2 - Mnuc2 + q2;
+ double sq2omg = TMath::Sqrt(2./fOmega);
+ double nomg = IR * fOmega;
+ double mq_w = Mnuc*Q/W;
+ double BC = (2*W*mq_w) / (W2 - Mnuc2 + q2);
+ fFKRDM.Lamda = sq2omg * mq_w;
+ fFKRDM.Tv = GV / (3.*W*sq2omg);
+ fFKRDM.Rv = kSqrt2 * mq_w*(W+Mnuc)*GV / d;
+ fFKRDM.S = (-q2/Q2) * (3*W*Mnuc + q2 - Mnuc2) * GV / (6*Mnuc2);
+ fFKRDM.Ta = (2./3.) * (fZeta/sq2omg) * mq_w * GA / d;
+ fFKRDM.Ra = (kSqrt2/6.) * fZeta * (GA/W) * (W+Mnuc + 2*nomg*W/d );
+ fFKRDM.Bs = fZeta/(3.*W*sq2omg) * (1 + (W2-Mnuc2+q2)/ d) * GA;
+ fFKRDM.Cs = fZeta/(6.*Q) * (W2 - Mnuc2 + nomg*(W2-Mnuc2+q2)/d) * (GA/Mnuc);
+ fFKRDM.Bz = ((fZeta * GA) * (W - Mnuc)) / (2 * W * mq_w * sq2omg);
+ fFKRDM.Cz = ((fZeta * GA)/3) * (1 + ((3*q2 + nomg) / d));
+
+#ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__
+ LOG("FKR", pDEBUG)
+ << "FKR params for DMRES = " << resname << " : " << fFKRDM;
+#endif
+
+ // Calculate the Rein-Sehgal Helicity Amplitudes
+
+ const RSHelicityAmplModelDMI * hamplmod = 0;
+ if(is_dmres) {
+ if (is_p) { hamplmod = fHAmplModelDMp;}
+ else { hamplmod = fHAmplModelDMn;}
+ }
+ assert(hamplmod);
+
+ const RSHelicityAmplDM & hampl = hamplmod->Compute(resonance, fFKRDM);
+
+#ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__
+ LOG("DMHAmpl", pDEBUG)
+ << "Helicity Amplitudes for DMRES = " << resname << " : " << hampl;
+#endif
+
+ // Compute the cross section structure factors
+ double gZp4 = TMath::Power(fgZp, 4.0);
+ double XoEn = 1.0-(mchi2/E2); //1 - (mchi/E)^2
+ double XoPropMass = TMath::Power(q2 - mZprime2, 2); //(q^2 - mZ'^2)^2
+ double Xo = gZp4/(XoEn*XoPropMass);
+ double sig0 = 0.0625*(Xo/kPi)*(-q2/Q2)*(W/Mnuc);
+ double scLR = 0.5*W/Mnuc;
+ double scS = 0.5*(Mnuc/W)*(Q2/(-q2));
+ double sigL = 0.0;
+ double sigR = 0.0;
+ double sigS = 0.0;
+ double sigZ = 0.0;
+
+//Including Hadron spin avg and res-rest frame transformations
+ sigL = scLR* (hampl.Amp2Plus3() + hampl.Amp2Plus1());
+ sigR = scLR* (hampl.Amp2Minus3 () + hampl.Amp2Minus1 ());
+ sigS = scS * (hampl.Amp20Plus () + hampl.Amp20Minus());
+ sigZ = scS *(hampl.Ampz20Plus () + hampl.Ampz20Minus());
+
+#ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__
+ LOG("DMRES", pDEBUG) << "sig_{0} = " << sig0;
+ LOG("DMRES", pDEBUG) << "sig_{L} = " << sigL;
+ LOG("DMRES", pDEBUG) << "sig_{R} = " << sigR;
+ LOG("DMRES", pDEBUG) << "sig_{S} = " << sigS;
+ LOG("DMRES", pDEBUG) << "sig_{Z} = " << sigZ;
+#endif
+
+//DM Cross Section Calculation:
+
+//XSec calc:
+ double xsec = 0.0;
+ if (is_dm) {
+ xsec = sig0*(AL*sigL + AR*sigR + AS*sigS + AZ*sigZ);
+ }
+ else
+ if (is_dmbar) {
+ xsec = sig0*(AL*sigR + AR*sigL + AS*sigS + AZ*sigZ);
+ }
+ xsec = TMath::Max(0.,xsec);
+
+
+//________________________________________________________________________________________
+//X-Sec scaling by BreitWigner,Jacobian,free-nucleon,Pauli-Blocking
+//________________________________________________________________________________________
+
+
+ // Check whether the cross section is to be weighted with a
+ // Breit-Wigner distribution (default: true)
+ double bw = 1.0;
+ if(fWghtBW) {
+ bw = utils::bwfunc::BreitWignerL(W,LR,MR,WR,NR);
+
+ }
+#ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__
+ LOG("DMRES", pDEBUG)
+ << "BreitWigner(RES=" << resname << ", W=" << W << ") = " << bw;
+#endif
+ xsec *= bw;
+
+
+ //Apply given scaling factor
+ double xsec_scale = 1.;
+ if (is_dmres) { xsec_scale = fXSecScaleDM; }
+ xsec *= xsec_scale;
+
+#ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__
+ LOG("DMRES", pINFO)
+ << "\n d2xsec/dQ2dW" << "[" << interaction->AsString()
+ << "](W=" << W << ", q2=" << q2 << ", E=" << E << ") = " << xsec;
+#endif
+
+ // The algorithm computes d^2xsec/dWdQ2
+ // Check whether variable tranformation is needed
+ if(kps!=kPSWQ2fE) {
+ double J = utils::kinematics::Jacobian(interaction,kPSWQ2fE,kps);
+ xsec *= J;
+ }
+
+ // If requested return the free nucleon xsec even for input nuclear tgt
+ if( interaction->TestBit(kIAssumeFreeNucleon) ) return xsec;
+
+ int Z = target.Z();
+ int A = target.A();
+ int N = A-Z;
+
+ // Take into account the number of scattering centers in the target
+ int NNucl = (is_p) ? Z : N;
+
+ xsec*=NNucl; // nuclear xsec (no nuclear suppression factor)
+
+ if (fUsePauliBlocking && A!=1)
+ {
+ // Calculation of Pauli blocking according references:
+ //
+ // [1] S.L. Adler, S. Nussinov, and E.A. Paschos, "Nuclear
+ // charge exchange corrections to leptonic pion production
+ // in the (3,3) resonance region," Phys. Rev. D 9 (1974)
+ // 2125-2143 [Erratum Phys. Rev. D 10 (1974) 1669].
+ // [2] J.Y. Yu, "Neutrino interactions and nuclear effects in
+ // oscillation experiments and the nonperturbative disper-
+ // sive sector in strong (quasi-)abelian fields," Ph. D.
+ // Thesis, Dortmund U., Dortmund, 2002 (unpublished).
+ // [3] E.A. Paschos, J.Y. Yu, and M. Sakuda, "Neutrino pro-
+ // duction of resonances," Phys. Rev. D 69 (2004) 014013
+ // [arXiv: hep-ph/0308130].
+
+ double P_Fermi = 0.0;
+
+ // Maximum value of Fermi momentum of target nucleon (GeV)
+ if (A<6 || !fUseRFGParametrization)
+ {
+ // Look up the Fermi momentum for this target
+ FermiMomentumTablePool * kftp = FermiMomentumTablePool::Instance();
+ const FermiMomentumTable * kft = kftp->GetTable(fKFTable);
+ P_Fermi = kft->FindClosestKF(pdg::IonPdgCode(A, Z), nucpdgc);
+ }
+ else {
+ // Define the Fermi momentum for this target
+ P_Fermi = utils::nuclear::FermiMomentumForIsoscalarNucleonParametrization(target);
+ // Correct the Fermi momentum for the struck nucleon
+ if(is_p) { P_Fermi *= TMath::Power( 2.*Z/A, 1./3); }
+ else { P_Fermi *= TMath::Power( 2.*N/A, 1./3); }
+ }
+
+ double FactorPauli_RES = 1.0;
+
+ double k0 = 0., q = 0., q0 = 0.;
+
+ if (P_Fermi > 0.)
+ {
+ k0 = (W2-Mnuc2-Q2)/(2*W);
+ k = TMath::Sqrt(k0*k0+Q2); // previous value of k is overridden
+ q0 = (W2-Mnuc2+kPionMass2)/(2*W);
+ q = TMath::Sqrt(q0*q0-kPionMass2);
+ }
+
+ if (2*P_Fermi < k-q)
+ FactorPauli_RES = 1.0;
+ if (2*P_Fermi >= k+q)
+ FactorPauli_RES = ((3*k*k+q*q)/(2*P_Fermi)-(5*TMath::Power(k,4)+TMath::Power(q,4)+10*k*k*q*q)/(40*TMath::Power(P_Fermi,3)))/(2*k);
+ if (2*P_Fermi >= k-q && 2*P_Fermi <= k+q)
+ FactorPauli_RES = ((q+k)*(q+k)-4*P_Fermi*P_Fermi/5-TMath::Power(k-q, 3)/(2*P_Fermi)+TMath::Power(k-q, 5)/(40*TMath::Power(P_Fermi, 3)))/(4*q*k);
+
+ xsec *= FactorPauli_RES;
+ }
+
+ return xsec;
+}
+//________________________________________________________________________________________
+//________________________________________________________________________________________
+
+
+//____________________________________________________________________________
+double DMRESPXSec::Integral(const Interaction * interaction) const
+{
+ double xsec = fXSecIntegrator->Integrate(this,interaction);
+ return xsec;
+}
+//____________________________________________________________________________
+bool DMRESPXSec::ValidProcess(const Interaction * interaction) const
+{
+ if(interaction->TestBit(kISkipProcessChk)) return true;
+
+ const InitialState & init_state = interaction->InitState();
+ const ProcessInfo & proc_info = interaction->ProcInfo();
+ const XclsTag & xcls = interaction->ExclTag();
+
+ if(!proc_info.IsDarkMatterResonant()) return false;
+ if(!xcls.KnownResonance()) return false;
+
+ int hitnuc = init_state.Tgt().HitNucPdg();
+ bool is_pn = (pdg::IsProton(hitnuc) || pdg::IsNeutron(hitnuc));
+
+ if (!is_pn) return false;
+
+ int probe = init_state.ProbePdg();
+ bool is_dmres = proc_info.IsDarkMatterResonant();
+ bool is_dm = proc_info.IsDarkMatter();
+
+ if (!is_dm && !is_dmres) return false;
+
+ return true;
+}
+//____________________________________________________________________________
+void DMRESPXSec::Configure(const Registry & config)
+{
+ Algorithm::Configure(config);
+ this->LoadConfig();
+}
+//____________________________________________________________________________
+void DMRESPXSec::Configure(string config)
+{
+ Algorithm::Configure(config);
+ this->LoadConfig();
+}
+//____________________________________________________________________________
+void DMRESPXSec::LoadConfig(void)
+{
+ // Cross section scaling factor
+ this->GetParam( "RES-DM-XSecScale", fXSecScaleDM ) ;
+
+ //FKR Params
+ this->GetParam( "RES-Zeta", fZeta ) ;
+ this->GetParam( "RES-Omega", fOmega ) ;
+
+ // velocity dependence of interaction: fermion/scalar DM
+ this->GetParamDef("velocity-mode", fVelMode, 0 );
+ //DM mass
+ double ma, mv ;
+ this->GetParam( "RES-Ma", ma ) ;
+ this->GetParam( "RES-Mv", mv ) ;
+ fMa2 = TMath::Power(ma,2);
+ fMv2 = TMath::Power(mv,2);
+ //DM Charges
+ double QchiL, QchiR;
+ this->GetParam( "DarkLeftCharge", QchiL ) ;
+ this->GetParam( "DarkRightCharge", QchiR ) ;
+ this->GetParam( "DarkScalarCharge", fQchiS ) ;
+ fQchiV = 0.5*(QchiL + QchiR);
+ fQchiA = 0.5*(- QchiL + QchiR);
+ // DM Mediator
+ this->GetParam("ZpCoupling", fgZp ) ;
+ fMedMass = PDGLibrary::Instance()->Find(kPdgMediator)->Mass();
+
+ this->GetParamDef( "BreitWignerWeight", fWghtBW, true ) ;
+ this->GetParamDef( "BreitWignerNorm", fNormBW, true);
+
+
+ this->GetParam("FermiMomentumTable", fKFTable);
+ this->GetParam("RFG-UseParametrization", fUseRFGParametrization);
+ this->GetParam("UsePauliBlockingForRES", fUsePauliBlocking);
+
+ // Load all the sub-algorithms needed
+
+ fHAmplModelDMp = 0;
+ fHAmplModelDMn = 0;
+
+ AlgFactory * algf = AlgFactory::Instance();
+
+ fHAmplModelDMp = dynamic_cast (
+ algf->GetAlgorithm("genie::RSHelicityAmplModelDMp","Default")); //DM + p
+ fHAmplModelDMn = dynamic_cast (
+ algf->GetAlgorithm("genie::RSHelicityAmplModelDMn","Default")); //DM + n
+
+ assert( fHAmplModelDMp );
+ assert( fHAmplModelDMn );
+
+ // Use algorithm within a DIS/RES join scheme. If yes get Wcut
+ this->GetParam( "UseDRJoinScheme", fUsingDisResJoin ) ;
+ fWcut = 999999;
+ if(fUsingDisResJoin) {
+ this->GetParam( "Wcut", fWcut ) ;
+ }
+
+ double thw ;
+ this->GetParam( "WeinbergAngle", thw ) ;
+ fSin48w = TMath::Power( TMath::Sin(thw), 4 );
+ // NeuGEN limits in the allowed resonance phase space:
+ // W < min{ Wmin(physical), (res mass) + x * (res width) }
+ // It limits the integration area around the peak and avoids the
+ // problem with huge xsec increase at low Q2 and high W.
+ // In correspondence with Hugh, Rein said that the underlying problem
+ // are unphysical assumptions in the model.
+ this->GetParamDef( "MaxNWidthForN2Res", fN2ResMaxNWidths, 2.0 ) ;
+ this->GetParamDef( "MaxNWidthForN0Res", fN0ResMaxNWidths, 6.0 ) ;
+ this->GetParamDef( "MaxNWidthForGNRes", fGnResMaxNWidths, 4.0 ) ;
+
+//______________________________________________________________________________________
+
+
+ // load the differential cross section integrator
+ fXSecIntegrator =
+ dynamic_cast (this->SubAlg("XSec-Integrator"));
+ assert(fXSecIntegrator);
+}
+//____________________________________________________________________________
diff --git a/src/Physics/BoostedDarkMatter/XSection/DMRESPXSec.h b/src/Physics/BoostedDarkMatter/XSection/DMRESPXSec.h
new file mode 100644
index 0000000000..3ee8456c21
--- /dev/null
+++ b/src/Physics/BoostedDarkMatter/XSection/DMRESPXSec.h
@@ -0,0 +1,107 @@
+//____________________________________________________________________________
+/*!
+
+\class genie::DMRESPXSec
+
+\brief Computes the double differential cross section for resonance
+ DM-production according to the Rein-Sehgal model.
+
+ The computed cross section is the d^2 xsec/ dQ^2 dW \n
+
+ where \n
+ \li \c Q^2 : momentum transfer ^ 2
+ \li \c W : invariant mass of the final state hadronic system
+
+ Is a concrete implementation of the XSecAlgorithmI interface.
+
+\ref D.Rein and L.M.Sehgal, Neutrino Excitation of Baryon Resonances
+ and Single Pion Production, Ann.Phys.133, 79 (1981)
+
+\author Costas Andreopoulos
+ University of Liverpool & STFC Rutherford Appleton Laboratory
+
+ Changes made for Dark Matter - Zach Orr, Colorado State University
+
+\created May 05, 2004
+
+\cpright Copyright (c) 2003-2023, The GENIE Collaboration
+ For the full text of the license visit http://copyright.genie-mc.org
+*/
+//____________________________________________________________________________
+
+#ifndef _DM_RES_PXSEC_H_
+#define _DM_RES_PXSEC_H_
+
+#include "Framework/EventGen/XSecAlgorithmI.h"
+#include "Framework/ParticleData/BaryonResonance.h"
+#include "Physics/BoostedDarkMatter/XSection/FKRDM.h"
+
+namespace genie {
+
+class RSHelicityAmplModelDMI;
+class Spline;
+class XSecIntegratorI;
+
+class DMRESPXSec : public XSecAlgorithmI {
+
+public:
+ DMRESPXSec();
+ DMRESPXSec(string config);
+ virtual ~DMRESPXSec();
+
+ // implement the XSecAlgorithmI interface
+ double XSec (const Interaction * i, KinePhaseSpace_t k) const;
+ double Integral (const Interaction * i) const;
+ bool ValidProcess (const Interaction * i) const;
+
+ // overload the Algorithm::Configure() methods to load private data
+ // members from configuration options
+ void Configure(const Registry & config);
+ void Configure(string config);
+
+private:
+
+ void LoadConfig (void);
+
+ mutable FKRDM fFKRDM;
+
+ const RSHelicityAmplModelDMI * fHAmplModelDMp;
+ const RSHelicityAmplModelDMI * fHAmplModelDMn;
+
+ // configuration data
+ double fQchiV; ///< DM vector charge
+ double fQchiA; ///< DM axial charge
+ double fQchiS; ///< DM scalar charge
+ int fVelMode; ///< DM (scalar/fermion)
+ double fMedMass; ///< DM mediator mass
+ double fgZp; ///< DM mediator coupling
+ bool fWghtBW; ///< weight with resonance breit-wigner?
+ bool fNormBW; ///< normalize resonance breit-wigner to 1?
+ double fZeta; ///< FKR parameter Zeta
+ double fOmega; ///< FKR parameter Omega
+ double fMa2; ///< (axial mass)^2
+ double fMv2; ///< (vector mass)^2
+ bool fUsingDisResJoin; ///< use a DIS/RES joining scheme?
+ double fWcut; ///< apply DIS/RES joining scheme < Wcut
+ double fN2ResMaxNWidths; ///< limits allowed phase space for n=2 res
+ double fN0ResMaxNWidths; ///< limits allowed phase space for n=0 res
+ double fGnResMaxNWidths; ///< limits allowed phase space for other res
+ string fKFTable; ///< table of Fermi momentum (kF) constants for various nuclei
+ bool fUseRFGParametrization; ///< use parametrization for fermi momentum insted of table?
+ bool fUsePauliBlocking; ///< account for Pauli blocking?
+
+ double fSin48w; ///< sin^4(Weingberg angle)
+
+// bool fUsingNuTauScaling; ///< use NeuGEN nutau xsec reduction factors?
+// Spline * fNuTauRdSpl; ///< xsec reduction spline for nu_tau
+// Spline * fNuTauBarRdSpl; ///< xsec reduction spline for nu_tau_bar
+
+ double fXSecScaleDM; ///< external DM xsec scaling factor
+
+
+ const XSecIntegratorI * fXSecIntegrator;
+};
+
+} // genie namespace
+
+#endif // _DM_RES_PXSEC_H_
diff --git a/src/Physics/BoostedDarkMatter/XSection/DMRESXSec.cxx b/src/Physics/BoostedDarkMatter/XSection/DMRESXSec.cxx
new file mode 100644
index 0000000000..ec6712987d
--- /dev/null
+++ b/src/Physics/BoostedDarkMatter/XSection/DMRESXSec.cxx
@@ -0,0 +1,121 @@
+//____________________________________________________________________________
+/*
+ Copyright (c) 2003-2023, The GENIE Collaboration
+ For the full text of the license visit http://copyright.genie-mc.org
+
+ based on code of
+ Costas Andreopoulos
+ University of Liverpool & STFC Rutherford Appleton Laboratory
+
+
+ Changes made for RES DM by Zach Orr, Colorado State University
+ */
+ //____________________________________________________________________________
+
+ #include
+ #include |