From b87e7a53714a66ce7fe05d4401b3223cbc599c1b Mon Sep 17 00:00:00 2001 From: Mohamed Ismail Date: Mon, 25 Aug 2025 14:46:06 -0500 Subject: [PATCH 1/9] building hA2025 model --- .../2025/pipA_abs/al_abs_combined.txt | 25 + .../tot_xsec/2025/pipA_abs/al_abs_smooth.txt | 42 + .../2025/pipA_abs/ar_abs_combined.txt | 24 + .../tot_xsec/2025/pipA_abs/ar_abs_smooth.txt | 42 + .../2025/pipA_abs/ashery-pip-al-abs.dat | 7 + .../2025/pipA_abs/ashery-pip-bi-abs.dat | 7 + .../2025/pipA_abs/ashery-pip-c-abs.dat | 7 + .../2025/pipA_abs/ashery-pip-fe-abs.dat | 7 + .../2025/pipA_abs/ashery-pip-li-abs.dat | 7 + .../2025/pipA_abs/ashery-pip-nb-abs.dat | 7 + .../2025/pipA_abs/bi_abs_combined.txt | 25 + .../tot_xsec/2025/pipA_abs/bi_abs_smooth.txt | 42 + .../tot_xsec/2025/pipA_abs/c_abs_combined.txt | 30 + .../tot_xsec/2025/pipA_abs/c_abs_smooth.txt | 42 + .../2025/pipA_abs/fe_abs_combined.txt | 25 + .../tot_xsec/2025/pipA_abs/fe_abs_smooth.txt | 42 + .../2025/pipA_abs/he3_abs_combined.txt | 24 + .../tot_xsec/2025/pipA_abs/he3_abs_smooth.txt | 42 + .../2025/pipA_abs/incl-pip-al-abs.dat | 7 + .../2025/pipA_abs/incl-pip-ar-abs.dat | 7 + .../2025/pipA_abs/incl-pip-bi-abs.dat | 7 + .../tot_xsec/2025/pipA_abs/incl-pip-c-abs.dat | 7 + .../2025/pipA_abs/incl-pip-fe-abs.dat | 7 + .../2025/pipA_abs/incl-pip-he3-abs.dat | 7 + .../2025/pipA_abs/incl-pip-li-abs.dat | 7 + .../2025/pipA_abs/incl-pip-nb-abs.dat | 7 + .../2025/pipA_abs/kotlinski-pip-ar-abs.dat | 9 + .../2025/pipA_abs/kotlinski-pip-n-abs.dat | 5 + .../2025/pipA_abs/kotlinski-pip-xe-abs.dat | 5 + .../2025/pipA_abs/li_abs_combined.txt | 25 + .../tot_xsec/2025/pipA_abs/li_abs_smooth.txt | 42 + .../2025/pipA_abs/mashnik-pip-fe-abs.dat | 26 + .../pipA_abs/mashnikforextrap-pip-fe-abs.dat | 24 + .../tot_xsec/2025/pipA_abs/n_abs_combined.txt | 2 + .../tot_xsec/2025/pipA_abs/n_abs_smooth.txt | 1 + .../2025/pipA_abs/nakai-pip-al-abs.dat | 13 + .../2025/pipA_abs/nakai-pip-au-abs.dat | 13 + .../2025/pipA_abs/nakai-pip-cu-abs.dat | 13 + .../2025/pipA_abs/nakai-pip-sn-abs.dat | 13 + .../2025/pipA_abs/nakai-pip-ti-abs.dat | 13 + .../2025/pipA_abs/navon-pip-bi-abs.dat | 2 + .../2025/pipA_abs/navon-pip-c-abs.dat | 2 + .../2025/pipA_abs/navon-pip-fe-abs.dat | 2 + .../2025/pipA_abs/navon-pip-li-abs.dat | 2 + .../2025/pipA_abs/navon-pip-nb-abs.dat | 2 + .../2025/pipA_abs/nb_abs_combined.txt | 25 + .../tot_xsec/2025/pipA_abs/nb_abs_smooth.txt | 42 + .../2025/pipA_abs/pinzon-pip-c-abs.dat | 7 + .../tot_xsec/2025/pipA_abs/pip120_abs.txt | 24 + .../tot_xsec/2025/pipA_abs/pip12_abs.txt | 42 + .../tot_xsec/2025/pipA_abs/pip131_abs.txt | 1 + .../tot_xsec/2025/pipA_abs/pip14_abs.txt | 1 + .../tot_xsec/2025/pipA_abs/pip165_abs.txt | 24 + .../tot_xsec/2025/pipA_abs/pip16_abs.txt | 24 + .../tot_xsec/2025/pipA_abs/pip181_abs.txt | 24 + .../tot_xsec/2025/pipA_abs/pip1_abs.txt | 24 + .../tot_xsec/2025/pipA_abs/pip209_abs.txt | 42 + .../tot_xsec/2025/pipA_abs/pip27_abs.txt | 42 + .../tot_xsec/2025/pipA_abs/pip2_abs.txt | 24 + .../tot_xsec/2025/pipA_abs/pip3_abs.txt | 42 + .../tot_xsec/2025/pipA_abs/pip40_abs.txt | 42 + .../tot_xsec/2025/pipA_abs/pip48_abs.txt | 24 + .../tot_xsec/2025/pipA_abs/pip4_abs.txt | 24 + .../tot_xsec/2025/pipA_abs/pip56_abs.txt | 42 + .../tot_xsec/2025/pipA_abs/pip58_abs.txt | 24 + .../tot_xsec/2025/pipA_abs/pip63_abs.txt | 24 + .../tot_xsec/2025/pipA_abs/pip7_abs.txt | 42 + .../tot_xsec/2025/pipA_abs/pip93_abs.txt | 42 + .../tot_xsec/2025/pipA_abs/pip9_abs.txt | 24 + .../2025/pipA_abs/various-pip-c-abs.dat | 8 + .../2025/pipA_abs/xe_abs_combined.txt | 2 + .../tot_xsec/2025/pipA_abs/xe_abs_smooth.txt | 1 + .../2025/pipA_cex/ExtrapFromMash_CEx.C | 40 + .../tot_xsec/2025/pipA_cex/Report.txt | 234 ++ .../tot_xsec/2025/pipA_cex/TPipA_CEx.png | Bin 0 -> 10433 bytes .../2025/pipA_cex/al_cex_combined.txt | 25 + .../tot_xsec/2025/pipA_cex/al_cex_smooth.txt | 42 + .../2025/pipA_cex/ar_cex_combined.txt | 5 + .../tot_xsec/2025/pipA_cex/ar_cex_smooth.txt | 4 + .../2025/pipA_cex/ashery-pip-al-cex.dat | 7 + .../2025/pipA_cex/ashery-pip-bi-cex.dat | 7 + .../2025/pipA_cex/ashery-pip-c-cex.dat | 7 + .../2025/pipA_cex/ashery-pip-fe-cex.dat | 7 + .../2025/pipA_cex/ashery-pip-li-cex.dat | 7 + .../2025/pipA_cex/ashery-pip-nb-cex.dat | 7 + .../2025/pipA_cex/ashery-pip-pim-A-cex.dat | 12 + .../2025/pipA_cex/bi_cex_combined.txt | 25 + .../tot_xsec/2025/pipA_cex/bi_cex_smooth.txt | 42 + .../2025/pipA_cex/bowles-pip-be-cex.dat | 4 + .../2025/pipA_cex/bowles-pip-ni-cex.dat | 4 + .../2025/pipA_cex/bowles-pip-o-cex.dat | 5 + .../tot_xsec/2025/pipA_cex/c_cex_combined.txt | 25 + .../tot_xsec/2025/pipA_cex/c_cex_smooth.txt | 42 + .../tot_xsec/2025/pipA_cex/comparison.txt | 20 + .../2025/pipA_cex/extrapFromMashnik.txt | 207 ++ .../2025/pipA_cex/fe_cex_combined.txt | 25 + .../tot_xsec/2025/pipA_cex/fe_cex_smooth.txt | 42 + .../2025/pipA_cex/he3_cex_combined.txt | 24 + .../tot_xsec/2025/pipA_cex/he3_cex_smooth.txt | 42 + .../2025/pipA_cex/incl-pip-al-cex.dat | 7 + .../2025/pipA_cex/incl-pip-ar-cex.dat | 7 + .../2025/pipA_cex/incl-pip-bi-cex.dat | 7 + .../tot_xsec/2025/pipA_cex/incl-pip-c-cex.dat | 7 + .../2025/pipA_cex/incl-pip-fe-cex.dat | 7 + .../2025/pipA_cex/incl-pip-he3-cex.dat | 7 + .../2025/pipA_cex/incl-pip-li-cex.dat | 7 + .../2025/pipA_cex/incl-pip-nb-cex.dat | 7 + .../2025/pipA_cex/lehmann-pip-d-cex.dat | 8 + .../2025/pipA_cex/lehmann-pip-he-cex.dat | 8 + .../2025/pipA_cex/lehmann-pip-he3-cex.dat | 8 + .../2025/pipA_cex/li_cex_combined.txt | 25 + .../tot_xsec/2025/pipA_cex/li_cex_smooth.txt | 42 + .../2025/pipA_cex/mashnik-pip-fe-cex.dat | 14 + .../pipA_cex/mashnikforextrap-pip-fe-cex.dat | 24 + .../2025/pipA_cex/navon-pip-bi-cex.dat | 3 + .../2025/pipA_cex/navon-pip-c-cex.dat | 3 + .../2025/pipA_cex/navon-pip-fe-cex.dat | 3 + .../2025/pipA_cex/navon-pip-li-cex.dat | 3 + .../2025/pipA_cex/navon-pip-nb-cex.dat | 3 + .../2025/pipA_cex/nb_cex_combined.txt | 25 + .../tot_xsec/2025/pipA_cex/nb_cex_smooth.txt | 42 + .../tot_xsec/2025/pipA_cex/o_cex_combined.txt | 2 + .../tot_xsec/2025/pipA_cex/o_cex_smooth.txt | 1 + .../tot_xsec/2025/pipA_cex/pip120_cex.txt | 24 + .../tot_xsec/2025/pipA_cex/pip12_cex.txt | 42 + .../tot_xsec/2025/pipA_cex/pip165_cex.txt | 24 + .../tot_xsec/2025/pipA_cex/pip16_cex.txt | 1 + .../tot_xsec/2025/pipA_cex/pip181_cex.txt | 24 + .../tot_xsec/2025/pipA_cex/pip1_cex.txt | 24 + .../tot_xsec/2025/pipA_cex/pip209_cex.txt | 42 + .../tot_xsec/2025/pipA_cex/pip27_cex.txt | 42 + .../tot_xsec/2025/pipA_cex/pip2_cex.txt | 29 + .../tot_xsec/2025/pipA_cex/pip3_cex.txt | 42 + .../tot_xsec/2025/pipA_cex/pip40_cex.txt | 4 + .../tot_xsec/2025/pipA_cex/pip48_cex.txt | 24 + .../tot_xsec/2025/pipA_cex/pip4_cex.txt | 29 + .../tot_xsec/2025/pipA_cex/pip56_cex.txt | 42 + .../tot_xsec/2025/pipA_cex/pip58_cex.txt | 25 + .../tot_xsec/2025/pipA_cex/pip63_cex.txt | 24 + .../tot_xsec/2025/pipA_cex/pip7_cex.txt | 42 + .../tot_xsec/2025/pipA_cex/pip93_cex.txt | 42 + .../tot_xsec/2025/pipA_cex/pip9_cex.txt | 25 + .../2025/pipA_cex/various-pip-c-cex.dat | 8 + .../2025/pipA_inelas/ExtrapFromMash_Inelas.C | 40 + .../2025/pipA_inelas/al_inelas_combined.txt | 25 + .../2025/pipA_inelas/al_inelas_smooth.txt | 42 + .../2025/pipA_inelas/aniol-pip-c-inelas.dat | 4 + .../2025/pipA_inelas/aniol-pip-ca-inelas.dat | 4 + .../2025/pipA_inelas/aniol-pip-pb-inelas.dat | 4 + .../2025/pipA_inelas/aniol-pip-sn-inelas.dat | 4 + .../2025/pipA_inelas/ar_inelas_combined.txt | 5 + .../2025/pipA_inelas/ar_inelas_smooth.txt | 4 + .../2025/pipA_inelas/ashery-pip-al-inelas.dat | 8 + .../2025/pipA_inelas/ashery-pip-bi-inelas.dat | 7 + .../2025/pipA_inelas/ashery-pip-c-inelas.dat | 8 + .../2025/pipA_inelas/ashery-pip-fe-inelas.dat | 8 + .../2025/pipA_inelas/ashery-pip-li-inelas.dat | 8 + .../2025/pipA_inelas/ashery-pip-nb-inelas.dat | 8 + .../2025/pipA_inelas/bi_inelas_combined.txt | 24 + .../2025/pipA_inelas/bi_inelas_smooth.txt | 42 + .../2025/pipA_inelas/c_inelas_combined.txt | 25 + .../2025/pipA_inelas/c_inelas_smooth.txt | 42 + .../pipA_inelas/extrapFromMash_Inelas.txt | 207 ++ .../2025/pipA_inelas/fe_inelas_combined.txt | 25 + .../2025/pipA_inelas/fe_inelas_smooth.txt | 42 + .../2025/pipA_inelas/he3_inelas_combined.txt | 24 + .../2025/pipA_inelas/he3_inelas_smooth.txt | 42 + .../2025/pipA_inelas/incl-pip-al-inelas.dat | 7 + .../2025/pipA_inelas/incl-pip-ar-inelas.dat | 7 + .../2025/pipA_inelas/incl-pip-bi-inelas.dat | 7 + .../2025/pipA_inelas/incl-pip-c-inelas.dat | 7 + .../2025/pipA_inelas/incl-pip-fe-inelas.dat | 7 + .../2025/pipA_inelas/incl-pip-he3-inelas.dat | 7 + .../2025/pipA_inelas/incl-pip-li-inelas.dat | 7 + .../2025/pipA_inelas/incl-pip-nb-inelas.dat | 7 + .../2025/pipA_inelas/li_inelas_combined.txt | 25 + .../2025/pipA_inelas/li_inelas_smooth.txt | 42 + .../pipA_inelas/mashnik-pip-fe-inelas.dat | 26 + .../mashnikforextrap-pip-fe-inelas.dat | 24 + .../2025/pipA_inelas/nb_inelas_combined.txt | 25 + .../2025/pipA_inelas/nb_inelas_smooth.txt | 42 + .../2025/pipA_inelas/pip120_inelas.txt | 27 + .../2025/pipA_inelas/pip12_inelas.txt | 42 + .../2025/pipA_inelas/pip165_inelas.txt | 24 + .../2025/pipA_inelas/pip16_inelas.txt | 24 + .../2025/pipA_inelas/pip181_inelas.txt | 24 + .../tot_xsec/2025/pipA_inelas/pip1_inelas.txt | 24 + .../2025/pipA_inelas/pip208_inelas.txt | 6 + .../2025/pipA_inelas/pip209_inelas.txt | 42 + .../2025/pipA_inelas/pip27_inelas.txt | 42 + .../tot_xsec/2025/pipA_inelas/pip2_inelas.txt | 24 + .../tot_xsec/2025/pipA_inelas/pip3_inelas.txt | 42 + .../2025/pipA_inelas/pip40_inelas.txt | 4 + .../2025/pipA_inelas/pip48_inelas.txt | 24 + .../tot_xsec/2025/pipA_inelas/pip4_inelas.txt | 24 + .../2025/pipA_inelas/pip56_inelas.txt | 42 + .../2025/pipA_inelas/pip58_inelas.txt | 24 + .../2025/pipA_inelas/pip63_inelas.txt | 24 + .../tot_xsec/2025/pipA_inelas/pip7_inelas.txt | 42 + .../2025/pipA_inelas/pip93_inelas.txt | 42 + .../tot_xsec/2025/pipA_inelas/pip9_inelas.txt | 24 + .../2025/pipA_inelas/various-pip-c-inelas.dat | 8 + .../2025/pipA_pipro/al_pipro_combined.txt | 21 + .../2025/pipA_pipro/al_pipro_smooth.txt | 42 + .../2025/pipA_pipro/bi_pipro_combined.txt | 21 + .../2025/pipA_pipro/bi_pipro_smooth.txt | 42 + .../2025/pipA_pipro/c_pipro_combined.txt | 21 + .../2025/pipA_pipro/c_pipro_smooth.txt | 42 + .../2025/pipA_pipro/fe_pipro_combined.txt | 21 + .../2025/pipA_pipro/fe_pipro_smooth.txt | 42 + .../2025/pipA_pipro/li_pipro_combined.txt | 21 + .../2025/pipA_pipro/li_pipro_smooth.txt | 42 + .../2025/pipA_pipro/mashnik-pip-fe-pipro.dat | 18 + .../mashnikforextrap-pip-fe-pipro.dat | 24 + .../2025/pipA_pipro/nb_pipro_combined.txt | 21 + .../2025/pipA_pipro/nb_pipro_smooth.txt | 42 + .../tot_xsec/2025/pipA_pipro/pip120_pipro.txt | 24 + .../tot_xsec/2025/pipA_pipro/pip12_pipro.txt | 42 + .../tot_xsec/2025/pipA_pipro/pip165_pipro.txt | 24 + .../tot_xsec/2025/pipA_pipro/pip16_pipro.txt | 24 + .../tot_xsec/2025/pipA_pipro/pip181_pipro.txt | 24 + .../tot_xsec/2025/pipA_pipro/pip1_pipro.txt | 24 + .../tot_xsec/2025/pipA_pipro/pip209_pipro.txt | 42 + .../tot_xsec/2025/pipA_pipro/pip27_pipro.txt | 42 + .../tot_xsec/2025/pipA_pipro/pip2_pipro.txt | 24 + .../tot_xsec/2025/pipA_pipro/pip3_pipro.txt | 24 + .../tot_xsec/2025/pipA_pipro/pip48_pipro.txt | 24 + .../tot_xsec/2025/pipA_pipro/pip4_pipro.txt | 24 + .../tot_xsec/2025/pipA_pipro/pip56_pipro.txt | 42 + .../tot_xsec/2025/pipA_pipro/pip58_pipro.txt | 24 + .../tot_xsec/2025/pipA_pipro/pip63_pipro.txt | 24 + .../tot_xsec/2025/pipA_pipro/pip7_pipro.txt | 42 + .../tot_xsec/2025/pipA_pipro/pip93_pipro.txt | 42 + .../tot_xsec/2025/pipA_pipro/pip9_pipro.txt | 24 + .../2025/pipA_pipro/various-pip-c-pipro.dat | 8 + .../2025/pipA_tot/ExtrapFromMash_Tot.C | 39 + .../tot_xsec/2025/pipA_tot/TPipA_Tot.png | Bin 0 -> 10755 bytes .../2025/pipA_tot/al_tot_combined.txt | 25 + .../tot_xsec/2025/pipA_tot/al_tot_smooth.txt | 42 + .../2025/pipA_tot/ar_tot_combined.txt | 5 + .../tot_xsec/2025/pipA_tot/ar_tot_smooth.txt | 4 + .../2025/pipA_tot/ashery-pip-al-reac.dat | 7 + .../2025/pipA_tot/ashery-pip-al-tot.dat | 7 + .../2025/pipA_tot/ashery-pip-bi-reac.dat | 7 + .../2025/pipA_tot/ashery-pip-bi-tot.dat | 7 + .../2025/pipA_tot/ashery-pip-c-reac.dat | 7 + .../2025/pipA_tot/ashery-pip-c-tot.dat | 7 + .../2025/pipA_tot/ashery-pip-fe-reac.dat | 7 + .../2025/pipA_tot/ashery-pip-fe-tot.dat | 7 + .../2025/pipA_tot/ashery-pip-li-reac.dat | 7 + .../2025/pipA_tot/ashery-pip-li-tot.dat | 7 + .../2025/pipA_tot/ashery-pip-nb-reac.dat | 7 + .../2025/pipA_tot/ashery-pip-nb-tot.dat | 7 + .../2025/pipA_tot/bi_tot_combined.txt | 25 + .../tot_xsec/2025/pipA_tot/bi_tot_smooth.txt | 42 + .../2025/pipA_tot/brinkmoller-pip-he-tot.dat | 16 + .../tot_xsec/2025/pipA_tot/c_tot_combined.txt | 33 + .../tot_xsec/2025/pipA_tot/c_tot_smooth.txt | 42 + .../2025/pipA_tot/ca_tot_combined.txt | 3 + .../tot_xsec/2025/pipA_tot/ca_tot_smooth.txt | 2 + .../2025/pipA_tot/clough-pip-be-tot.dat | 15 + .../2025/pipA_tot/clough-pip-c-tot.dat | 15 + .../2025/pipA_tot/clough-pip-li-tot.dat | 15 + .../2025/pipA_tot/clough-pip-li6-tot.dat | 15 + .../2025/pipA_tot/clough-pip-o-tot.dat | 7 + .../2025/pipA_tot/extrapFromMashnik.txt | 207 ++ .../2025/pipA_tot/fe_tot_combined.txt | 25 + .../tot_xsec/2025/pipA_tot/fe_tot_smooth.txt | 42 + .../2025/pipA_tot/from_TGraph2D_pipA_tot.txt | 87 + .../2025/pipA_tot/he3_tot_combined.txt | 24 + .../tot_xsec/2025/pipA_tot/he3_tot_smooth.txt | 42 + .../2025/pipA_tot/incl-pip-al-reac.dat | 7 + .../2025/pipA_tot/incl-pip-ar-reac.dat | 7 + .../2025/pipA_tot/incl-pip-bi-reac.dat | 7 + .../2025/pipA_tot/incl-pip-c-reac.dat | 7 + .../2025/pipA_tot/incl-pip-fe-reac.dat | 7 + .../2025/pipA_tot/incl-pip-he3-reac.dat | 7 + .../2025/pipA_tot/incl-pip-li-reac.dat | 7 + .../2025/pipA_tot/incl-pip-nb-reac.dat | 7 + .../2025/pipA_tot/li_tot_combined.txt | 25 + .../tot_xsec/2025/pipA_tot/li_tot_smooth.txt | 42 + .../2025/pipA_tot/mashnik-pip-h-tot.dat | 22 + .../2025/pipA_tot/meirav-pip-ca-reac.dat | 6 + .../2025/pipA_tot/meirav-pip-o-reac.dat | 5 + .../2025/pipA_tot/meirav-pip-zr-reac.dat | 5 + .../intranuke/tot_xsec/2025/pipA_tot/mv.sh | 23 + .../2025/pipA_tot/nb_tot_combined.txt | 25 + .../tot_xsec/2025/pipA_tot/nb_tot_smooth.txt | 42 + .../tot_xsec/2025/pipA_tot/o_tot_combined.txt | 2 + .../tot_xsec/2025/pipA_tot/o_tot_smooth.txt | 1 + .../tot_xsec/2025/pipA_tot/pip120_tot.txt | 24 + .../tot_xsec/2025/pipA_tot/pip12_tot.txt | 42 + .../tot_xsec/2025/pipA_tot/pip165_tot.txt | 24 + .../tot_xsec/2025/pipA_tot/pip16_tot.txt | 1 + .../tot_xsec/2025/pipA_tot/pip181_tot.txt | 24 + .../tot_xsec/2025/pipA_tot/pip1_tot.txt | 45 + .../tot_xsec/2025/pipA_tot/pip209_tot.txt | 42 + .../tot_xsec/2025/pipA_tot/pip27_tot.txt | 42 + .../tot_xsec/2025/pipA_tot/pip28_tot.txt | 4 + .../tot_xsec/2025/pipA_tot/pip2_tot.txt | 24 + .../tot_xsec/2025/pipA_tot/pip32_tot.txt | 4 + .../tot_xsec/2025/pipA_tot/pip3_tot.txt | 42 + .../tot_xsec/2025/pipA_tot/pip40_tot.txt | 2 + .../tot_xsec/2025/pipA_tot/pip48_tot.txt | 24 + .../tot_xsec/2025/pipA_tot/pip4_tot.txt | 37 + .../tot_xsec/2025/pipA_tot/pip56_tot.txt | 42 + .../tot_xsec/2025/pipA_tot/pip58_tot.txt | 24 + .../tot_xsec/2025/pipA_tot/pip63_tot.txt | 24 + .../tot_xsec/2025/pipA_tot/pip6_tot.txt | 18 + .../tot_xsec/2025/pipA_tot/pip7_tot.txt | 42 + .../tot_xsec/2025/pipA_tot/pip93_tot.txt | 42 + .../tot_xsec/2025/pipA_tot/pip9_tot.txt | 38 + .../2025/pipA_tot/saunders-pip-al-tot.dat | 3 + .../2025/pipA_tot/saunders-pip-c-reac.dat | 12 + .../2025/pipA_tot/saunders-pip-c-tot.dat | 10 + .../2025/pipA_tot/saunders-pip-c-total.dat | 11 + .../2025/pipA_tot/saunders-pip-ca-tot.dat | 3 + .../2025/pipA_tot/saunders-pip-li6-tot.dat | 3 + .../2025/pipA_tot/saunders-pip-s-tot.dat | 3 + .../2025/pipA_tot/saunders-pip-si-tot.dat | 3 + .../2025/pipA_tot/various-pip-c-total.dat | 8 + .../2025/pipA_tot/wilkin-pip-be-tot.dat | 5 + .../2025/pipA_tot/wilkin-pip-c-tot.dat | 6 + .../2025/pipA_tot/wilkin-pip-he-tot.dat | 5 + .../2025/pipA_tot/wilkin-pip-li-tot.dat | 5 + .../2025/pipA_tot/wilkin-pip-li6-tot.dat | 6 + .../2025/pipA_tot/wilkin-pip-s-tot.dat | 6 + .../tot_xsec/pipA_abs/al_abs_combined.txt | 25 + .../tot_xsec/pipA_abs/al_abs_smooth.txt | 42 + .../tot_xsec/pipA_abs/ar_abs_combined.txt | 24 + .../tot_xsec/pipA_abs/ar_abs_smooth.txt | 42 + .../tot_xsec/pipA_abs/ashery-pip-li-abs.dat | 1 + .../tot_xsec/pipA_abs/bi_abs_combined.txt | 25 + .../tot_xsec/pipA_abs/bi_abs_smooth.txt | 42 + .../tot_xsec/pipA_abs/c_abs_combined.txt | 30 + .../tot_xsec/pipA_abs/c_abs_smooth.txt | 42 + .../tot_xsec/pipA_abs/fe_abs_combined.txt | 25 + .../tot_xsec/pipA_abs/fe_abs_smooth.txt | 42 + .../tot_xsec/pipA_abs/he3_abs_combined.txt | 24 + .../tot_xsec/pipA_abs/he3_abs_smooth.txt | 42 + .../tot_xsec/pipA_abs/incl-pip-al-abs.dat | 7 + .../tot_xsec/pipA_abs/incl-pip-ar-abs.dat | 7 + .../tot_xsec/pipA_abs/incl-pip-bi-abs.dat | 7 + .../tot_xsec/pipA_abs/incl-pip-c-abs.dat | 7 + .../tot_xsec/pipA_abs/incl-pip-fe-abs.dat | 7 + .../tot_xsec/pipA_abs/incl-pip-he3-abs.dat | 7 + .../tot_xsec/pipA_abs/incl-pip-li-abs.dat | 7 + .../tot_xsec/pipA_abs/incl-pip-nb-abs.dat | 7 + .../pipA_abs/kotlinski-pip-ar-abs.dat | 9 + .../tot_xsec/pipA_abs/kotlinski-pip-n-abs.dat | 5 + .../pipA_abs/kotlinski-pip-xe-abs.dat | 5 + .../tot_xsec/pipA_abs/li_abs_combined.txt | 25 + .../tot_xsec/pipA_abs/li_abs_smooth.txt | 42 + .../tot_xsec/pipA_abs/n_abs_combined.txt | 2 + .../tot_xsec/pipA_abs/n_abs_smooth.txt | 1 + .../tot_xsec/pipA_abs/nb_abs_combined.txt | 25 + .../tot_xsec/pipA_abs/nb_abs_smooth.txt | 42 + .../tot_xsec/pipA_abs/pinzon-pip-c-abs.dat | 7 + .../intranuke/tot_xsec/pipA_abs/pip12_abs.txt | 72 +- .../tot_xsec/pipA_abs/pip131_abs.txt | 1 + .../intranuke/tot_xsec/pipA_abs/pip14_abs.txt | 1 + .../tot_xsec/pipA_abs/pip209_abs.txt | 72 +- .../intranuke/tot_xsec/pipA_abs/pip27_abs.txt | 51 +- .../intranuke/tot_xsec/pipA_abs/pip3_abs.txt | 66 +- .../intranuke/tot_xsec/pipA_abs/pip40_abs.txt | 42 + .../intranuke/tot_xsec/pipA_abs/pip56_abs.txt | 72 +- .../intranuke/tot_xsec/pipA_abs/pip7_abs.txt | 71 +- .../intranuke/tot_xsec/pipA_abs/pip93_abs.txt | 72 +- .../tot_xsec/pipA_abs/xe_abs_combined.txt | 2 + .../tot_xsec/pipA_abs/xe_abs_smooth.txt | 1 + .../tot_xsec/pipA_cex/al_cex_combined.txt | 25 + .../tot_xsec/pipA_cex/al_cex_smooth.txt | 42 + .../tot_xsec/pipA_cex/ar_cex_combined.txt | 5 + .../tot_xsec/pipA_cex/ar_cex_smooth.txt | 4 + .../tot_xsec/pipA_cex/ashery-pip-li-cex.dat | 1 + .../pipA_cex/ashery-pip-pim-A-cex.dat | 12 + .../tot_xsec/pipA_cex/bi_cex_combined.txt | 25 + .../tot_xsec/pipA_cex/bi_cex_smooth.txt | 42 + .../tot_xsec/pipA_cex/c_cex_combined.txt | 25 + .../tot_xsec/pipA_cex/c_cex_smooth.txt | 42 + .../tot_xsec/pipA_cex/fe_cex_combined.txt | 25 + .../tot_xsec/pipA_cex/fe_cex_smooth.txt | 42 + .../tot_xsec/pipA_cex/he3_cex_combined.txt | 24 + .../tot_xsec/pipA_cex/he3_cex_smooth.txt | 42 + .../tot_xsec/pipA_cex/incl-pip-al-cex.dat | 7 + .../tot_xsec/pipA_cex/incl-pip-ar-cex.dat | 7 + .../tot_xsec/pipA_cex/incl-pip-bi-cex.dat | 7 + .../tot_xsec/pipA_cex/incl-pip-c-cex.dat | 7 + .../tot_xsec/pipA_cex/incl-pip-fe-cex.dat | 7 + .../tot_xsec/pipA_cex/incl-pip-he3-cex.dat | 7 + .../tot_xsec/pipA_cex/incl-pip-li-cex.dat | 7 + .../tot_xsec/pipA_cex/incl-pip-nb-cex.dat | 7 + .../tot_xsec/pipA_cex/li_cex_combined.txt | 25 + .../tot_xsec/pipA_cex/li_cex_smooth.txt | 42 + .../tot_xsec/pipA_cex/nb_cex_combined.txt | 25 + .../tot_xsec/pipA_cex/nb_cex_smooth.txt | 42 + .../tot_xsec/pipA_cex/o_cex_combined.txt | 2 + .../tot_xsec/pipA_cex/o_cex_smooth.txt | 1 + .../intranuke/tot_xsec/pipA_cex/pip12_cex.txt | 72 +- .../intranuke/tot_xsec/pipA_cex/pip16_cex.txt | 26 +- .../tot_xsec/pipA_cex/pip209_cex.txt | 72 +- .../intranuke/tot_xsec/pipA_cex/pip27_cex.txt | 51 +- .../intranuke/tot_xsec/pipA_cex/pip3_cex.txt | 71 +- .../intranuke/tot_xsec/pipA_cex/pip40_cex.txt | 4 + .../intranuke/tot_xsec/pipA_cex/pip56_cex.txt | 72 +- .../intranuke/tot_xsec/pipA_cex/pip7_cex.txt | 71 +- .../intranuke/tot_xsec/pipA_cex/pip93_cex.txt | 72 +- .../pipA_inelas/al_inelas_combined.txt | 25 + .../tot_xsec/pipA_inelas/al_inelas_smooth.txt | 42 + .../pipA_inelas/ar_inelas_combined.txt | 5 + .../tot_xsec/pipA_inelas/ar_inelas_smooth.txt | 4 + .../pipA_inelas/ashery-pip-al-inelas.dat | 1 + .../pipA_inelas/ashery-pip-c-inelas.dat | 1 + .../pipA_inelas/ashery-pip-fe-inelas.dat | 1 + .../pipA_inelas/ashery-pip-li-inelas.dat | 1 + .../pipA_inelas/ashery-pip-nb-inelas.dat | 1 + .../pipA_inelas/bi_inelas_combined.txt | 24 + .../tot_xsec/pipA_inelas/bi_inelas_smooth.txt | 42 + .../pipA_inelas/c_inelas_combined.txt | 25 + .../tot_xsec/pipA_inelas/c_inelas_smooth.txt | 42 + .../pipA_inelas/fe_inelas_combined.txt | 25 + .../tot_xsec/pipA_inelas/fe_inelas_smooth.txt | 42 + .../pipA_inelas/he3_inelas_combined.txt | 24 + .../pipA_inelas/he3_inelas_smooth.txt | 42 + .../pipA_inelas/incl-pip-al-inelas.dat | 7 + .../pipA_inelas/incl-pip-ar-inelas.dat | 7 + .../pipA_inelas/incl-pip-bi-inelas.dat | 7 + .../pipA_inelas/incl-pip-c-inelas.dat | 7 + .../pipA_inelas/incl-pip-fe-inelas.dat | 7 + .../pipA_inelas/incl-pip-he3-inelas.dat | 7 + .../pipA_inelas/incl-pip-li-inelas.dat | 7 + .../pipA_inelas/incl-pip-nb-inelas.dat | 7 + .../pipA_inelas/li_inelas_combined.txt | 25 + .../tot_xsec/pipA_inelas/li_inelas_smooth.txt | 42 + .../pipA_inelas/nb_inelas_combined.txt | 25 + .../tot_xsec/pipA_inelas/nb_inelas_smooth.txt | 42 + .../tot_xsec/pipA_inelas/pip12_inelas.txt | 74 +- .../tot_xsec/pipA_inelas/pip209_inelas.txt | 71 +- .../tot_xsec/pipA_inelas/pip27_inelas.txt | 50 +- .../tot_xsec/pipA_inelas/pip3_inelas.txt | 66 +- .../tot_xsec/pipA_inelas/pip40_inelas.txt | 10 +- .../tot_xsec/pipA_inelas/pip56_inelas.txt | 71 +- .../tot_xsec/pipA_inelas/pip7_inelas.txt | 71 +- .../tot_xsec/pipA_inelas/pip93_inelas.txt | 71 +- .../tot_xsec/pipA_pipro/al_pipro_combined.txt | 21 + .../tot_xsec/pipA_pipro/al_pipro_smooth.txt | 42 + .../tot_xsec/pipA_pipro/bi_pipro_combined.txt | 21 + .../tot_xsec/pipA_pipro/bi_pipro_smooth.txt | 42 + .../tot_xsec/pipA_pipro/c_pipro_combined.txt | 21 + .../tot_xsec/pipA_pipro/c_pipro_smooth.txt | 42 + .../tot_xsec/pipA_pipro/fe_pipro_combined.txt | 21 + .../tot_xsec/pipA_pipro/fe_pipro_smooth.txt | 42 + .../tot_xsec/pipA_pipro/li_pipro_combined.txt | 21 + .../tot_xsec/pipA_pipro/li_pipro_smooth.txt | 42 + .../tot_xsec/pipA_pipro/nb_pipro_combined.txt | 21 + .../tot_xsec/pipA_pipro/nb_pipro_smooth.txt | 42 + .../tot_xsec/pipA_pipro/pip12_pipro.txt | 66 +- .../tot_xsec/pipA_pipro/pip209_pipro.txt | 66 +- .../tot_xsec/pipA_pipro/pip27_pipro.txt | 42 + .../tot_xsec/pipA_pipro/pip56_pipro.txt | 66 +- .../tot_xsec/pipA_pipro/pip7_pipro.txt | 66 +- .../tot_xsec/pipA_pipro/pip93_pipro.txt | 66 +- .../tot_xsec/pipA_tot/al_tot_combined.txt | 25 + .../tot_xsec/pipA_tot/al_tot_smooth.txt | 42 + .../tot_xsec/pipA_tot/ar_tot_combined.txt | 5 + .../tot_xsec/pipA_tot/ar_tot_smooth.txt | 4 + .../tot_xsec/pipA_tot/ashery-pip-al-reac.dat | 7 + .../tot_xsec/pipA_tot/ashery-pip-bi-reac.dat | 7 + .../tot_xsec/pipA_tot/ashery-pip-c-reac.dat | 7 + .../tot_xsec/pipA_tot/ashery-pip-fe-reac.dat | 7 + .../tot_xsec/pipA_tot/ashery-pip-li-reac.dat | 7 + .../tot_xsec/pipA_tot/ashery-pip-nb-reac.dat | 7 + .../tot_xsec/pipA_tot/bi_tot_combined.txt | 25 + .../tot_xsec/pipA_tot/bi_tot_smooth.txt | 42 + .../tot_xsec/pipA_tot/c_tot_combined.txt | 33 + .../tot_xsec/pipA_tot/c_tot_smooth.txt | 42 + .../tot_xsec/pipA_tot/ca_tot_combined.txt | 3 + .../tot_xsec/pipA_tot/ca_tot_smooth.txt | 2 + .../tot_xsec/pipA_tot/fe_tot_combined.txt | 25 + .../tot_xsec/pipA_tot/fe_tot_smooth.txt | 42 + .../tot_xsec/pipA_tot/he3_tot_combined.txt | 24 + .../tot_xsec/pipA_tot/he3_tot_smooth.txt | 42 + .../tot_xsec/pipA_tot/incl-pip-al-reac.dat | 7 + .../tot_xsec/pipA_tot/incl-pip-ar-reac.dat | 7 + .../tot_xsec/pipA_tot/incl-pip-bi-reac.dat | 7 + .../tot_xsec/pipA_tot/incl-pip-c-reac.dat | 7 + .../tot_xsec/pipA_tot/incl-pip-fe-reac.dat | 7 + .../tot_xsec/pipA_tot/incl-pip-he3-reac.dat | 7 + .../tot_xsec/pipA_tot/incl-pip-li-reac.dat | 7 + .../tot_xsec/pipA_tot/incl-pip-nb-reac.dat | 7 + .../tot_xsec/pipA_tot/li_tot_combined.txt | 25 + .../tot_xsec/pipA_tot/li_tot_smooth.txt | 42 + .../tot_xsec/pipA_tot/meirav-pip-ca-reac.dat | 6 + .../tot_xsec/pipA_tot/meirav-pip-o-reac.dat | 5 + .../tot_xsec/pipA_tot/meirav-pip-zr-reac.dat | 5 + .../tot_xsec/pipA_tot/nb_tot_combined.txt | 25 + .../tot_xsec/pipA_tot/nb_tot_smooth.txt | 42 + .../tot_xsec/pipA_tot/o_tot_combined.txt | 2 + .../tot_xsec/pipA_tot/o_tot_smooth.txt | 1 + .../intranuke/tot_xsec/pipA_tot/pip12_tot.txt | 93 +- .../intranuke/tot_xsec/pipA_tot/pip16_tot.txt | 31 +- .../tot_xsec/pipA_tot/pip209_tot.txt | 72 +- .../intranuke/tot_xsec/pipA_tot/pip27_tot.txt | 52 +- .../intranuke/tot_xsec/pipA_tot/pip3_tot.txt | 66 +- .../intranuke/tot_xsec/pipA_tot/pip40_tot.txt | 6 +- .../intranuke/tot_xsec/pipA_tot/pip56_tot.txt | 72 +- .../intranuke/tot_xsec/pipA_tot/pip7_tot.txt | 86 +- .../intranuke/tot_xsec/pipA_tot/pip93_tot.txt | 72 +- .../tot_xsec/pipA_tot/saunders-pip-c-reac.dat | 12 + do_configure.sh | 26 + .../HadronTransport/2025/HAIntranuke2025.cxx | 1631 ++++++++++++++ .../HadronTransport/2025/HAIntranuke2025.h | 87 + .../HadronTransport/2025/HNIntranuke2025.cxx | 1039 +++++++++ .../HadronTransport/2025/HNIntranuke2025.h | 91 + .../2025/INukeHadroData2025.cxx | 1892 ++++++++++++++++ .../HadronTransport/2025/INukeHadroData2025.h | 265 +++ .../2025/INukeHadroFates2025.h | 123 ++ .../HadronTransport/2025/INukeUtils2025.cxx | 1950 +++++++++++++++++ .../HadronTransport/2025/INukeUtils2025.h | 123 ++ .../HadronTransport/2025/Intranuke2025.cxx | 443 ++++ .../HadronTransport/2025/Intranuke2025.h | 160 ++ .../HadronTransport/HAIntranuke2025.cxx | 1631 ++++++++++++++ src/Physics/HadronTransport/HAIntranuke2025.h | 87 + .../HadronTransport/HNIntranuke2025.cxx | 1039 +++++++++ src/Physics/HadronTransport/HNIntranuke2025.h | 91 + .../HadronTransport/INukeHadroData2025.cxx | 1892 ++++++++++++++++ .../HadronTransport/INukeHadroData2025.h | 265 +++ .../HadronTransport/INukeHadroFates2025.h | 123 ++ .../HadronTransport/INukeUtils2025.cxx | 1950 +++++++++++++++++ src/Physics/HadronTransport/INukeUtils2025.h | 123 ++ src/Physics/HadronTransport/Intranuke2025.cxx | 443 ++++ src/Physics/HadronTransport/Intranuke2025.h | 160 ++ 532 files changed, 27222 insertions(+), 953 deletions(-) create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_abs/al_abs_combined.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_abs/al_abs_smooth.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_abs/ar_abs_combined.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_abs/ar_abs_smooth.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_abs/ashery-pip-al-abs.dat create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_abs/ashery-pip-bi-abs.dat create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_abs/ashery-pip-c-abs.dat create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_abs/ashery-pip-fe-abs.dat create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_abs/ashery-pip-li-abs.dat create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_abs/ashery-pip-nb-abs.dat create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_abs/bi_abs_combined.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_abs/bi_abs_smooth.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_abs/c_abs_combined.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_abs/c_abs_smooth.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_abs/fe_abs_combined.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_abs/fe_abs_smooth.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_abs/he3_abs_combined.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_abs/he3_abs_smooth.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_abs/incl-pip-al-abs.dat create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_abs/incl-pip-ar-abs.dat create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_abs/incl-pip-bi-abs.dat create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_abs/incl-pip-c-abs.dat create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_abs/incl-pip-fe-abs.dat create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_abs/incl-pip-he3-abs.dat create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_abs/incl-pip-li-abs.dat create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_abs/incl-pip-nb-abs.dat create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_abs/kotlinski-pip-ar-abs.dat create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_abs/kotlinski-pip-n-abs.dat create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_abs/kotlinski-pip-xe-abs.dat create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_abs/li_abs_combined.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_abs/li_abs_smooth.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_abs/mashnik-pip-fe-abs.dat create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_abs/mashnikforextrap-pip-fe-abs.dat create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_abs/n_abs_combined.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_abs/n_abs_smooth.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_abs/nakai-pip-al-abs.dat create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_abs/nakai-pip-au-abs.dat create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_abs/nakai-pip-cu-abs.dat create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_abs/nakai-pip-sn-abs.dat create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_abs/nakai-pip-ti-abs.dat create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_abs/navon-pip-bi-abs.dat create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_abs/navon-pip-c-abs.dat create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_abs/navon-pip-fe-abs.dat create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_abs/navon-pip-li-abs.dat create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_abs/navon-pip-nb-abs.dat create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_abs/nb_abs_combined.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_abs/nb_abs_smooth.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_abs/pinzon-pip-c-abs.dat create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_abs/pip120_abs.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_abs/pip12_abs.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_abs/pip131_abs.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_abs/pip14_abs.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_abs/pip165_abs.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_abs/pip16_abs.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_abs/pip181_abs.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_abs/pip1_abs.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_abs/pip209_abs.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_abs/pip27_abs.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_abs/pip2_abs.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_abs/pip3_abs.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_abs/pip40_abs.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_abs/pip48_abs.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_abs/pip4_abs.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_abs/pip56_abs.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_abs/pip58_abs.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_abs/pip63_abs.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_abs/pip7_abs.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_abs/pip93_abs.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_abs/pip9_abs.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_abs/various-pip-c-abs.dat create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_abs/xe_abs_combined.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_abs/xe_abs_smooth.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_cex/ExtrapFromMash_CEx.C create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_cex/Report.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_cex/TPipA_CEx.png create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_cex/al_cex_combined.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_cex/al_cex_smooth.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_cex/ar_cex_combined.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_cex/ar_cex_smooth.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_cex/ashery-pip-al-cex.dat create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_cex/ashery-pip-bi-cex.dat create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_cex/ashery-pip-c-cex.dat create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_cex/ashery-pip-fe-cex.dat create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_cex/ashery-pip-li-cex.dat create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_cex/ashery-pip-nb-cex.dat create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_cex/ashery-pip-pim-A-cex.dat create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_cex/bi_cex_combined.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_cex/bi_cex_smooth.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_cex/bowles-pip-be-cex.dat create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_cex/bowles-pip-ni-cex.dat create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_cex/bowles-pip-o-cex.dat create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_cex/c_cex_combined.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_cex/c_cex_smooth.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_cex/comparison.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_cex/extrapFromMashnik.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_cex/fe_cex_combined.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_cex/fe_cex_smooth.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_cex/he3_cex_combined.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_cex/he3_cex_smooth.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_cex/incl-pip-al-cex.dat create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_cex/incl-pip-ar-cex.dat create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_cex/incl-pip-bi-cex.dat create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_cex/incl-pip-c-cex.dat create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_cex/incl-pip-fe-cex.dat create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_cex/incl-pip-he3-cex.dat create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_cex/incl-pip-li-cex.dat create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_cex/incl-pip-nb-cex.dat create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_cex/lehmann-pip-d-cex.dat create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_cex/lehmann-pip-he-cex.dat create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_cex/lehmann-pip-he3-cex.dat create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_cex/li_cex_combined.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_cex/li_cex_smooth.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_cex/mashnik-pip-fe-cex.dat create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_cex/mashnikforextrap-pip-fe-cex.dat create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_cex/navon-pip-bi-cex.dat create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_cex/navon-pip-c-cex.dat create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_cex/navon-pip-fe-cex.dat create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_cex/navon-pip-li-cex.dat create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_cex/navon-pip-nb-cex.dat create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_cex/nb_cex_combined.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_cex/nb_cex_smooth.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_cex/o_cex_combined.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_cex/o_cex_smooth.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_cex/pip120_cex.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_cex/pip12_cex.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_cex/pip165_cex.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_cex/pip16_cex.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_cex/pip181_cex.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_cex/pip1_cex.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_cex/pip209_cex.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_cex/pip27_cex.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_cex/pip2_cex.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_cex/pip3_cex.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_cex/pip40_cex.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_cex/pip48_cex.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_cex/pip4_cex.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_cex/pip56_cex.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_cex/pip58_cex.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_cex/pip63_cex.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_cex/pip7_cex.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_cex/pip93_cex.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_cex/pip9_cex.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_cex/various-pip-c-cex.dat create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_inelas/ExtrapFromMash_Inelas.C create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_inelas/al_inelas_combined.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_inelas/al_inelas_smooth.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_inelas/aniol-pip-c-inelas.dat create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_inelas/aniol-pip-ca-inelas.dat create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_inelas/aniol-pip-pb-inelas.dat create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_inelas/aniol-pip-sn-inelas.dat create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_inelas/ar_inelas_combined.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_inelas/ar_inelas_smooth.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_inelas/ashery-pip-al-inelas.dat create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_inelas/ashery-pip-bi-inelas.dat create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_inelas/ashery-pip-c-inelas.dat create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_inelas/ashery-pip-fe-inelas.dat create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_inelas/ashery-pip-li-inelas.dat create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_inelas/ashery-pip-nb-inelas.dat create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_inelas/bi_inelas_combined.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_inelas/bi_inelas_smooth.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_inelas/c_inelas_combined.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_inelas/c_inelas_smooth.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_inelas/extrapFromMash_Inelas.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_inelas/fe_inelas_combined.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_inelas/fe_inelas_smooth.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_inelas/he3_inelas_combined.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_inelas/he3_inelas_smooth.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_inelas/incl-pip-al-inelas.dat create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_inelas/incl-pip-ar-inelas.dat create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_inelas/incl-pip-bi-inelas.dat create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_inelas/incl-pip-c-inelas.dat create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_inelas/incl-pip-fe-inelas.dat create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_inelas/incl-pip-he3-inelas.dat create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_inelas/incl-pip-li-inelas.dat create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_inelas/incl-pip-nb-inelas.dat create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_inelas/li_inelas_combined.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_inelas/li_inelas_smooth.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_inelas/mashnik-pip-fe-inelas.dat create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_inelas/mashnikforextrap-pip-fe-inelas.dat create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_inelas/nb_inelas_combined.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_inelas/nb_inelas_smooth.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_inelas/pip120_inelas.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_inelas/pip12_inelas.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_inelas/pip165_inelas.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_inelas/pip16_inelas.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_inelas/pip181_inelas.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_inelas/pip1_inelas.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_inelas/pip208_inelas.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_inelas/pip209_inelas.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_inelas/pip27_inelas.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_inelas/pip2_inelas.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_inelas/pip3_inelas.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_inelas/pip40_inelas.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_inelas/pip48_inelas.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_inelas/pip4_inelas.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_inelas/pip56_inelas.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_inelas/pip58_inelas.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_inelas/pip63_inelas.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_inelas/pip7_inelas.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_inelas/pip93_inelas.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_inelas/pip9_inelas.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_inelas/various-pip-c-inelas.dat create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_pipro/al_pipro_combined.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_pipro/al_pipro_smooth.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_pipro/bi_pipro_combined.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_pipro/bi_pipro_smooth.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_pipro/c_pipro_combined.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_pipro/c_pipro_smooth.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_pipro/fe_pipro_combined.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_pipro/fe_pipro_smooth.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_pipro/li_pipro_combined.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_pipro/li_pipro_smooth.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_pipro/mashnik-pip-fe-pipro.dat create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_pipro/mashnikforextrap-pip-fe-pipro.dat create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_pipro/nb_pipro_combined.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_pipro/nb_pipro_smooth.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_pipro/pip120_pipro.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_pipro/pip12_pipro.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_pipro/pip165_pipro.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_pipro/pip16_pipro.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_pipro/pip181_pipro.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_pipro/pip1_pipro.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_pipro/pip209_pipro.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_pipro/pip27_pipro.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_pipro/pip2_pipro.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_pipro/pip3_pipro.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_pipro/pip48_pipro.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_pipro/pip4_pipro.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_pipro/pip56_pipro.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_pipro/pip58_pipro.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_pipro/pip63_pipro.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_pipro/pip7_pipro.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_pipro/pip93_pipro.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_pipro/pip9_pipro.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_pipro/various-pip-c-pipro.dat create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_tot/ExtrapFromMash_Tot.C create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_tot/TPipA_Tot.png create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_tot/al_tot_combined.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_tot/al_tot_smooth.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_tot/ar_tot_combined.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_tot/ar_tot_smooth.txt create mode 100755 data/evgen/intranuke/tot_xsec/2025/pipA_tot/ashery-pip-al-reac.dat create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_tot/ashery-pip-al-tot.dat create mode 100755 data/evgen/intranuke/tot_xsec/2025/pipA_tot/ashery-pip-bi-reac.dat create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_tot/ashery-pip-bi-tot.dat create mode 100755 data/evgen/intranuke/tot_xsec/2025/pipA_tot/ashery-pip-c-reac.dat create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_tot/ashery-pip-c-tot.dat create mode 100755 data/evgen/intranuke/tot_xsec/2025/pipA_tot/ashery-pip-fe-reac.dat create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_tot/ashery-pip-fe-tot.dat create mode 100755 data/evgen/intranuke/tot_xsec/2025/pipA_tot/ashery-pip-li-reac.dat create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_tot/ashery-pip-li-tot.dat create mode 100755 data/evgen/intranuke/tot_xsec/2025/pipA_tot/ashery-pip-nb-reac.dat create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_tot/ashery-pip-nb-tot.dat create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_tot/bi_tot_combined.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_tot/bi_tot_smooth.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_tot/brinkmoller-pip-he-tot.dat create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_tot/c_tot_combined.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_tot/c_tot_smooth.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_tot/ca_tot_combined.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_tot/ca_tot_smooth.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_tot/clough-pip-be-tot.dat create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_tot/clough-pip-c-tot.dat create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_tot/clough-pip-li-tot.dat create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_tot/clough-pip-li6-tot.dat create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_tot/clough-pip-o-tot.dat create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_tot/extrapFromMashnik.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_tot/fe_tot_combined.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_tot/fe_tot_smooth.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_tot/from_TGraph2D_pipA_tot.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_tot/he3_tot_combined.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_tot/he3_tot_smooth.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_tot/incl-pip-al-reac.dat create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_tot/incl-pip-ar-reac.dat create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_tot/incl-pip-bi-reac.dat create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_tot/incl-pip-c-reac.dat create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_tot/incl-pip-fe-reac.dat create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_tot/incl-pip-he3-reac.dat create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_tot/incl-pip-li-reac.dat create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_tot/incl-pip-nb-reac.dat create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_tot/li_tot_combined.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_tot/li_tot_smooth.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_tot/mashnik-pip-h-tot.dat create mode 100755 data/evgen/intranuke/tot_xsec/2025/pipA_tot/meirav-pip-ca-reac.dat create mode 100755 data/evgen/intranuke/tot_xsec/2025/pipA_tot/meirav-pip-o-reac.dat create mode 100755 data/evgen/intranuke/tot_xsec/2025/pipA_tot/meirav-pip-zr-reac.dat create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_tot/mv.sh create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_tot/nb_tot_combined.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_tot/nb_tot_smooth.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_tot/o_tot_combined.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_tot/o_tot_smooth.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_tot/pip120_tot.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_tot/pip12_tot.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_tot/pip165_tot.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_tot/pip16_tot.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_tot/pip181_tot.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_tot/pip1_tot.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_tot/pip209_tot.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_tot/pip27_tot.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_tot/pip28_tot.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_tot/pip2_tot.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_tot/pip32_tot.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_tot/pip3_tot.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_tot/pip40_tot.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_tot/pip48_tot.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_tot/pip4_tot.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_tot/pip56_tot.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_tot/pip58_tot.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_tot/pip63_tot.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_tot/pip6_tot.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_tot/pip7_tot.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_tot/pip93_tot.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_tot/pip9_tot.txt create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_tot/saunders-pip-al-tot.dat create mode 100755 data/evgen/intranuke/tot_xsec/2025/pipA_tot/saunders-pip-c-reac.dat create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_tot/saunders-pip-c-tot.dat create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_tot/saunders-pip-c-total.dat create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_tot/saunders-pip-ca-tot.dat create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_tot/saunders-pip-li6-tot.dat create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_tot/saunders-pip-s-tot.dat create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_tot/saunders-pip-si-tot.dat create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_tot/various-pip-c-total.dat create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_tot/wilkin-pip-be-tot.dat create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_tot/wilkin-pip-c-tot.dat create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_tot/wilkin-pip-he-tot.dat create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_tot/wilkin-pip-li-tot.dat create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_tot/wilkin-pip-li6-tot.dat create mode 100644 data/evgen/intranuke/tot_xsec/2025/pipA_tot/wilkin-pip-s-tot.dat create mode 100644 data/evgen/intranuke/tot_xsec/pipA_abs/al_abs_combined.txt create mode 100644 data/evgen/intranuke/tot_xsec/pipA_abs/al_abs_smooth.txt create mode 100644 data/evgen/intranuke/tot_xsec/pipA_abs/ar_abs_combined.txt create mode 100644 data/evgen/intranuke/tot_xsec/pipA_abs/ar_abs_smooth.txt create mode 100644 data/evgen/intranuke/tot_xsec/pipA_abs/bi_abs_combined.txt create mode 100644 data/evgen/intranuke/tot_xsec/pipA_abs/bi_abs_smooth.txt create mode 100644 data/evgen/intranuke/tot_xsec/pipA_abs/c_abs_combined.txt create mode 100644 data/evgen/intranuke/tot_xsec/pipA_abs/c_abs_smooth.txt create mode 100644 data/evgen/intranuke/tot_xsec/pipA_abs/fe_abs_combined.txt create mode 100644 data/evgen/intranuke/tot_xsec/pipA_abs/fe_abs_smooth.txt create mode 100644 data/evgen/intranuke/tot_xsec/pipA_abs/he3_abs_combined.txt create mode 100644 data/evgen/intranuke/tot_xsec/pipA_abs/he3_abs_smooth.txt create mode 100644 data/evgen/intranuke/tot_xsec/pipA_abs/incl-pip-al-abs.dat create mode 100644 data/evgen/intranuke/tot_xsec/pipA_abs/incl-pip-ar-abs.dat create mode 100644 data/evgen/intranuke/tot_xsec/pipA_abs/incl-pip-bi-abs.dat create mode 100644 data/evgen/intranuke/tot_xsec/pipA_abs/incl-pip-c-abs.dat create mode 100644 data/evgen/intranuke/tot_xsec/pipA_abs/incl-pip-fe-abs.dat create mode 100644 data/evgen/intranuke/tot_xsec/pipA_abs/incl-pip-he3-abs.dat create mode 100644 data/evgen/intranuke/tot_xsec/pipA_abs/incl-pip-li-abs.dat create mode 100644 data/evgen/intranuke/tot_xsec/pipA_abs/incl-pip-nb-abs.dat create mode 100644 data/evgen/intranuke/tot_xsec/pipA_abs/kotlinski-pip-ar-abs.dat create mode 100644 data/evgen/intranuke/tot_xsec/pipA_abs/kotlinski-pip-n-abs.dat create mode 100644 data/evgen/intranuke/tot_xsec/pipA_abs/kotlinski-pip-xe-abs.dat create mode 100644 data/evgen/intranuke/tot_xsec/pipA_abs/li_abs_combined.txt create mode 100644 data/evgen/intranuke/tot_xsec/pipA_abs/li_abs_smooth.txt create mode 100644 data/evgen/intranuke/tot_xsec/pipA_abs/n_abs_combined.txt create mode 100644 data/evgen/intranuke/tot_xsec/pipA_abs/n_abs_smooth.txt create mode 100644 data/evgen/intranuke/tot_xsec/pipA_abs/nb_abs_combined.txt create mode 100644 data/evgen/intranuke/tot_xsec/pipA_abs/nb_abs_smooth.txt create mode 100644 data/evgen/intranuke/tot_xsec/pipA_abs/pinzon-pip-c-abs.dat create mode 100644 data/evgen/intranuke/tot_xsec/pipA_abs/pip131_abs.txt create mode 100644 data/evgen/intranuke/tot_xsec/pipA_abs/pip14_abs.txt create mode 100644 data/evgen/intranuke/tot_xsec/pipA_abs/pip40_abs.txt create mode 100644 data/evgen/intranuke/tot_xsec/pipA_abs/xe_abs_combined.txt create mode 100644 data/evgen/intranuke/tot_xsec/pipA_abs/xe_abs_smooth.txt create mode 100644 data/evgen/intranuke/tot_xsec/pipA_cex/al_cex_combined.txt create mode 100644 data/evgen/intranuke/tot_xsec/pipA_cex/al_cex_smooth.txt create mode 100644 data/evgen/intranuke/tot_xsec/pipA_cex/ar_cex_combined.txt create mode 100644 data/evgen/intranuke/tot_xsec/pipA_cex/ar_cex_smooth.txt create mode 100644 data/evgen/intranuke/tot_xsec/pipA_cex/ashery-pip-pim-A-cex.dat create mode 100644 data/evgen/intranuke/tot_xsec/pipA_cex/bi_cex_combined.txt create mode 100644 data/evgen/intranuke/tot_xsec/pipA_cex/bi_cex_smooth.txt create mode 100644 data/evgen/intranuke/tot_xsec/pipA_cex/c_cex_combined.txt create mode 100644 data/evgen/intranuke/tot_xsec/pipA_cex/c_cex_smooth.txt create mode 100644 data/evgen/intranuke/tot_xsec/pipA_cex/fe_cex_combined.txt create mode 100644 data/evgen/intranuke/tot_xsec/pipA_cex/fe_cex_smooth.txt create mode 100644 data/evgen/intranuke/tot_xsec/pipA_cex/he3_cex_combined.txt create mode 100644 data/evgen/intranuke/tot_xsec/pipA_cex/he3_cex_smooth.txt create mode 100644 data/evgen/intranuke/tot_xsec/pipA_cex/incl-pip-al-cex.dat create mode 100644 data/evgen/intranuke/tot_xsec/pipA_cex/incl-pip-ar-cex.dat create mode 100644 data/evgen/intranuke/tot_xsec/pipA_cex/incl-pip-bi-cex.dat create mode 100644 data/evgen/intranuke/tot_xsec/pipA_cex/incl-pip-c-cex.dat create mode 100644 data/evgen/intranuke/tot_xsec/pipA_cex/incl-pip-fe-cex.dat create mode 100644 data/evgen/intranuke/tot_xsec/pipA_cex/incl-pip-he3-cex.dat create mode 100644 data/evgen/intranuke/tot_xsec/pipA_cex/incl-pip-li-cex.dat create mode 100644 data/evgen/intranuke/tot_xsec/pipA_cex/incl-pip-nb-cex.dat create mode 100644 data/evgen/intranuke/tot_xsec/pipA_cex/li_cex_combined.txt create mode 100644 data/evgen/intranuke/tot_xsec/pipA_cex/li_cex_smooth.txt create mode 100644 data/evgen/intranuke/tot_xsec/pipA_cex/nb_cex_combined.txt create mode 100644 data/evgen/intranuke/tot_xsec/pipA_cex/nb_cex_smooth.txt create mode 100644 data/evgen/intranuke/tot_xsec/pipA_cex/o_cex_combined.txt create mode 100644 data/evgen/intranuke/tot_xsec/pipA_cex/o_cex_smooth.txt create mode 100644 data/evgen/intranuke/tot_xsec/pipA_cex/pip40_cex.txt create mode 100644 data/evgen/intranuke/tot_xsec/pipA_inelas/al_inelas_combined.txt create mode 100644 data/evgen/intranuke/tot_xsec/pipA_inelas/al_inelas_smooth.txt create mode 100644 data/evgen/intranuke/tot_xsec/pipA_inelas/ar_inelas_combined.txt create mode 100644 data/evgen/intranuke/tot_xsec/pipA_inelas/ar_inelas_smooth.txt create mode 100644 data/evgen/intranuke/tot_xsec/pipA_inelas/bi_inelas_combined.txt create mode 100644 data/evgen/intranuke/tot_xsec/pipA_inelas/bi_inelas_smooth.txt create mode 100644 data/evgen/intranuke/tot_xsec/pipA_inelas/c_inelas_combined.txt create mode 100644 data/evgen/intranuke/tot_xsec/pipA_inelas/c_inelas_smooth.txt create mode 100644 data/evgen/intranuke/tot_xsec/pipA_inelas/fe_inelas_combined.txt create mode 100644 data/evgen/intranuke/tot_xsec/pipA_inelas/fe_inelas_smooth.txt create mode 100644 data/evgen/intranuke/tot_xsec/pipA_inelas/he3_inelas_combined.txt create mode 100644 data/evgen/intranuke/tot_xsec/pipA_inelas/he3_inelas_smooth.txt create mode 100644 data/evgen/intranuke/tot_xsec/pipA_inelas/incl-pip-al-inelas.dat create mode 100644 data/evgen/intranuke/tot_xsec/pipA_inelas/incl-pip-ar-inelas.dat create mode 100644 data/evgen/intranuke/tot_xsec/pipA_inelas/incl-pip-bi-inelas.dat create mode 100644 data/evgen/intranuke/tot_xsec/pipA_inelas/incl-pip-c-inelas.dat create mode 100644 data/evgen/intranuke/tot_xsec/pipA_inelas/incl-pip-fe-inelas.dat create mode 100644 data/evgen/intranuke/tot_xsec/pipA_inelas/incl-pip-he3-inelas.dat create mode 100644 data/evgen/intranuke/tot_xsec/pipA_inelas/incl-pip-li-inelas.dat create mode 100644 data/evgen/intranuke/tot_xsec/pipA_inelas/incl-pip-nb-inelas.dat create mode 100644 data/evgen/intranuke/tot_xsec/pipA_inelas/li_inelas_combined.txt create mode 100644 data/evgen/intranuke/tot_xsec/pipA_inelas/li_inelas_smooth.txt create mode 100644 data/evgen/intranuke/tot_xsec/pipA_inelas/nb_inelas_combined.txt create mode 100644 data/evgen/intranuke/tot_xsec/pipA_inelas/nb_inelas_smooth.txt create mode 100644 data/evgen/intranuke/tot_xsec/pipA_pipro/al_pipro_combined.txt create mode 100644 data/evgen/intranuke/tot_xsec/pipA_pipro/al_pipro_smooth.txt create mode 100644 data/evgen/intranuke/tot_xsec/pipA_pipro/bi_pipro_combined.txt create mode 100644 data/evgen/intranuke/tot_xsec/pipA_pipro/bi_pipro_smooth.txt create mode 100644 data/evgen/intranuke/tot_xsec/pipA_pipro/c_pipro_combined.txt create mode 100644 data/evgen/intranuke/tot_xsec/pipA_pipro/c_pipro_smooth.txt create mode 100644 data/evgen/intranuke/tot_xsec/pipA_pipro/fe_pipro_combined.txt create mode 100644 data/evgen/intranuke/tot_xsec/pipA_pipro/fe_pipro_smooth.txt create mode 100644 data/evgen/intranuke/tot_xsec/pipA_pipro/li_pipro_combined.txt create mode 100644 data/evgen/intranuke/tot_xsec/pipA_pipro/li_pipro_smooth.txt create mode 100644 data/evgen/intranuke/tot_xsec/pipA_pipro/nb_pipro_combined.txt create mode 100644 data/evgen/intranuke/tot_xsec/pipA_pipro/nb_pipro_smooth.txt create mode 100644 data/evgen/intranuke/tot_xsec/pipA_pipro/pip27_pipro.txt create mode 100644 data/evgen/intranuke/tot_xsec/pipA_tot/al_tot_combined.txt create mode 100644 data/evgen/intranuke/tot_xsec/pipA_tot/al_tot_smooth.txt create mode 100644 data/evgen/intranuke/tot_xsec/pipA_tot/ar_tot_combined.txt create mode 100644 data/evgen/intranuke/tot_xsec/pipA_tot/ar_tot_smooth.txt create mode 100755 data/evgen/intranuke/tot_xsec/pipA_tot/ashery-pip-al-reac.dat create mode 100755 data/evgen/intranuke/tot_xsec/pipA_tot/ashery-pip-bi-reac.dat create mode 100755 data/evgen/intranuke/tot_xsec/pipA_tot/ashery-pip-c-reac.dat create mode 100755 data/evgen/intranuke/tot_xsec/pipA_tot/ashery-pip-fe-reac.dat create mode 100755 data/evgen/intranuke/tot_xsec/pipA_tot/ashery-pip-li-reac.dat create mode 100755 data/evgen/intranuke/tot_xsec/pipA_tot/ashery-pip-nb-reac.dat create mode 100644 data/evgen/intranuke/tot_xsec/pipA_tot/bi_tot_combined.txt create mode 100644 data/evgen/intranuke/tot_xsec/pipA_tot/bi_tot_smooth.txt create mode 100644 data/evgen/intranuke/tot_xsec/pipA_tot/c_tot_combined.txt create mode 100644 data/evgen/intranuke/tot_xsec/pipA_tot/c_tot_smooth.txt create mode 100644 data/evgen/intranuke/tot_xsec/pipA_tot/ca_tot_combined.txt create mode 100644 data/evgen/intranuke/tot_xsec/pipA_tot/ca_tot_smooth.txt create mode 100644 data/evgen/intranuke/tot_xsec/pipA_tot/fe_tot_combined.txt create mode 100644 data/evgen/intranuke/tot_xsec/pipA_tot/fe_tot_smooth.txt create mode 100644 data/evgen/intranuke/tot_xsec/pipA_tot/he3_tot_combined.txt create mode 100644 data/evgen/intranuke/tot_xsec/pipA_tot/he3_tot_smooth.txt create mode 100644 data/evgen/intranuke/tot_xsec/pipA_tot/incl-pip-al-reac.dat create mode 100644 data/evgen/intranuke/tot_xsec/pipA_tot/incl-pip-ar-reac.dat create mode 100644 data/evgen/intranuke/tot_xsec/pipA_tot/incl-pip-bi-reac.dat create mode 100644 data/evgen/intranuke/tot_xsec/pipA_tot/incl-pip-c-reac.dat create mode 100644 data/evgen/intranuke/tot_xsec/pipA_tot/incl-pip-fe-reac.dat create mode 100644 data/evgen/intranuke/tot_xsec/pipA_tot/incl-pip-he3-reac.dat create mode 100644 data/evgen/intranuke/tot_xsec/pipA_tot/incl-pip-li-reac.dat create mode 100644 data/evgen/intranuke/tot_xsec/pipA_tot/incl-pip-nb-reac.dat create mode 100644 data/evgen/intranuke/tot_xsec/pipA_tot/li_tot_combined.txt create mode 100644 data/evgen/intranuke/tot_xsec/pipA_tot/li_tot_smooth.txt create mode 100755 data/evgen/intranuke/tot_xsec/pipA_tot/meirav-pip-ca-reac.dat create mode 100755 data/evgen/intranuke/tot_xsec/pipA_tot/meirav-pip-o-reac.dat create mode 100755 data/evgen/intranuke/tot_xsec/pipA_tot/meirav-pip-zr-reac.dat create mode 100644 data/evgen/intranuke/tot_xsec/pipA_tot/nb_tot_combined.txt create mode 100644 data/evgen/intranuke/tot_xsec/pipA_tot/nb_tot_smooth.txt create mode 100644 data/evgen/intranuke/tot_xsec/pipA_tot/o_tot_combined.txt create mode 100644 data/evgen/intranuke/tot_xsec/pipA_tot/o_tot_smooth.txt create mode 100755 data/evgen/intranuke/tot_xsec/pipA_tot/saunders-pip-c-reac.dat create mode 100644 do_configure.sh create mode 100644 src/Physics/HadronTransport/2025/HAIntranuke2025.cxx create mode 100644 src/Physics/HadronTransport/2025/HAIntranuke2025.h create mode 100644 src/Physics/HadronTransport/2025/HNIntranuke2025.cxx create mode 100644 src/Physics/HadronTransport/2025/HNIntranuke2025.h create mode 100644 src/Physics/HadronTransport/2025/INukeHadroData2025.cxx create mode 100644 src/Physics/HadronTransport/2025/INukeHadroData2025.h create mode 100644 src/Physics/HadronTransport/2025/INukeHadroFates2025.h create mode 100644 src/Physics/HadronTransport/2025/INukeUtils2025.cxx create mode 100644 src/Physics/HadronTransport/2025/INukeUtils2025.h create mode 100644 src/Physics/HadronTransport/2025/Intranuke2025.cxx create mode 100644 src/Physics/HadronTransport/2025/Intranuke2025.h create mode 100644 src/Physics/HadronTransport/HAIntranuke2025.cxx create mode 100644 src/Physics/HadronTransport/HAIntranuke2025.h create mode 100644 src/Physics/HadronTransport/HNIntranuke2025.cxx create mode 100644 src/Physics/HadronTransport/HNIntranuke2025.h create mode 100644 src/Physics/HadronTransport/INukeHadroData2025.cxx create mode 100644 src/Physics/HadronTransport/INukeHadroData2025.h create mode 100644 src/Physics/HadronTransport/INukeHadroFates2025.h create mode 100644 src/Physics/HadronTransport/INukeUtils2025.cxx create mode 100644 src/Physics/HadronTransport/INukeUtils2025.h create mode 100644 src/Physics/HadronTransport/Intranuke2025.cxx create mode 100644 src/Physics/HadronTransport/Intranuke2025.h 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 000000000..dad34a5fb --- /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/al_abs_smooth.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/al_abs_smooth.txt new file mode 100644 index 000000000..b153bd7b6 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/al_abs_smooth.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/ar_abs_combined.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/ar_abs_combined.txt new file mode 100644 index 000000000..9fc07be33 --- /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/ar_abs_smooth.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/ar_abs_smooth.txt new file mode 100644 index 000000000..a8c59e637 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/ar_abs_smooth.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/ashery-pip-al-abs.dat b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/ashery-pip-al-abs.dat new file mode 100644 index 000000000..cc79526e8 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/ashery-pip-al-abs.dat @@ -0,0 +1,7 @@ +#KE Abs Sig +85 252. 40. +125 340. 50. +165 338. 57. +205 327. 57. +245 218. 47. +315 119. 44. diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_abs/ashery-pip-bi-abs.dat b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/ashery-pip-bi-abs.dat new file mode 100644 index 000000000..84a533c62 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/ashery-pip-bi-abs.dat @@ -0,0 +1,7 @@ +#KE Abs Sig +85 1659. 655. +125 1235. 230. +165 1585. 280. +205 950. 160. +245 854. 166. +315 618. 170. diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_abs/ashery-pip-c-abs.dat b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/ashery-pip-c-abs.dat new file mode 100644 index 000000000..8e723a2ed --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/ashery-pip-c-abs.dat @@ -0,0 +1,7 @@ +#KE Abs Sig +85 109. 20. +125 166. 26. +165 194. 36. +205 157. 37. +245 95. 32. +315 64. 27. diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_abs/ashery-pip-fe-abs.dat b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/ashery-pip-fe-abs.dat new file mode 100644 index 000000000..81786d00f --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/ashery-pip-fe-abs.dat @@ -0,0 +1,7 @@ +#KE Abs Sig +85 421. 70. +125 527. 74. +165 577. 87. +205 607. 86. +245 411. 70. +315 320. 62. diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_abs/ashery-pip-li-abs.dat b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/ashery-pip-li-abs.dat new file mode 100644 index 000000000..0c7216e75 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/ashery-pip-li-abs.dat @@ -0,0 +1,7 @@ +#KE Abs Sig +85 44. 20. +125 114. 26. +165 124. 30. +205 59. 33. +245 42. 30. +315 0 0 diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_abs/ashery-pip-nb-abs.dat b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/ashery-pip-nb-abs.dat new file mode 100644 index 000000000..e9cd75b25 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/ashery-pip-nb-abs.dat @@ -0,0 +1,7 @@ +#KE Abs Sig +85 805. 143. +125 925. 140. +165 880. 160. +205 685. 100. +245 440. 105. +315 390. 90. 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 000000000..25e7d5a97 --- /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/bi_abs_smooth.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/bi_abs_smooth.txt new file mode 100644 index 000000000..6b6b2b75e --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/bi_abs_smooth.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/c_abs_combined.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/c_abs_combined.txt new file mode 100644 index 000000000..f293dd454 --- /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/c_abs_smooth.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/c_abs_smooth.txt new file mode 100644 index 000000000..901406b86 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/c_abs_smooth.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/fe_abs_combined.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/fe_abs_combined.txt new file mode 100644 index 000000000..fbaff408c --- /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/fe_abs_smooth.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/fe_abs_smooth.txt new file mode 100644 index 000000000..d86519572 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/fe_abs_smooth.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/he3_abs_combined.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/he3_abs_combined.txt new file mode 100644 index 000000000..ef76b7f90 --- /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/he3_abs_smooth.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/he3_abs_smooth.txt new file mode 100644 index 000000000..314a622ea --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/he3_abs_smooth.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/incl-pip-al-abs.dat b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/incl-pip-al-abs.dat new file mode 100644 index 000000000..edf762b39 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/incl-pip-al-abs.dat @@ -0,0 +1,7 @@ +# results from INCLv5 program - mar, 2025 - sd, mi +# to be used for hA2025 at low energy +#KE xs +1 5 +5 38 +20 134 +50 219 diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_abs/incl-pip-ar-abs.dat b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/incl-pip-ar-abs.dat new file mode 100644 index 000000000..e606d9d54 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/incl-pip-ar-abs.dat @@ -0,0 +1,7 @@ +# results from INCLv5 program - mar, 2025 - sd, mi +# to be used for hA2025 at low energy +#KE xs +1 15 +5 50 +20 206.2 +50 304.3 diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_abs/incl-pip-bi-abs.dat b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/incl-pip-bi-abs.dat new file mode 100644 index 000000000..6a4219a0a --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/incl-pip-bi-abs.dat @@ -0,0 +1,7 @@ +# results from INCLv5 program - mar, 2025 - sd, mi +# to be used for hA2025 at low energy +#KE xs +1 0 +5 0 +20 221 +50 869 diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_abs/incl-pip-c-abs.dat b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/incl-pip-c-abs.dat new file mode 100644 index 000000000..cff1fd2b8 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/incl-pip-c-abs.dat @@ -0,0 +1,7 @@ +# results from INCLv5 program - mar, 2025 - sd, mi +# to be used for hA2025 at low energy +#KE xs +1 0 +4 5.1 +20 41.2 +50 95.5 \ No newline at end of file diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_abs/incl-pip-fe-abs.dat b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/incl-pip-fe-abs.dat new file mode 100644 index 000000000..1216a0895 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/incl-pip-fe-abs.dat @@ -0,0 +1,7 @@ +# results from INCLv5 program - mar, 2025 - sd, mi +# to be used for hA2025 at low energy +#KE xs +1 0 +5 15.3 +20 218.6 +50 373.5 diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_abs/incl-pip-he3-abs.dat b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/incl-pip-he3-abs.dat new file mode 100644 index 000000000..30d3028e2 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/incl-pip-he3-abs.dat @@ -0,0 +1,7 @@ +# results from INCLv5 program - mar, 2025 - sd, mi +# to be used for hA2025 at low energy +#KE xs +1 0 +5 1.4 +20 11 +50 37 diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_abs/incl-pip-li-abs.dat b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/incl-pip-li-abs.dat new file mode 100644 index 000000000..520b50a2c --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/incl-pip-li-abs.dat @@ -0,0 +1,7 @@ +# results from INCLv5 program - mar, 2025 - sd, mi +# to be used for hA2025 at low energy +#KE xs +1 15 +5 30 +20 59.4 +50 75.4 diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_abs/incl-pip-nb-abs.dat b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/incl-pip-nb-abs.dat new file mode 100644 index 000000000..a4274ee4c --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/incl-pip-nb-abs.dat @@ -0,0 +1,7 @@ +# results from INCLv5 program - mar, 2025 - sd, mi +# to be used for hA2025 at low energy +#KE xs +1 0 +5 0 +20 324.7 +50 540.7 diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_abs/kotlinski-pip-ar-abs.dat b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/kotlinski-pip-ar-abs.dat new file mode 100644 index 000000000..342a27926 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/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/2025/pipA_abs/kotlinski-pip-n-abs.dat b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/kotlinski-pip-n-abs.dat new file mode 100644 index 000000000..a22b14489 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/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/2025/pipA_abs/kotlinski-pip-xe-abs.dat b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/kotlinski-pip-xe-abs.dat new file mode 100644 index 000000000..058ef6d12 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/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/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 000000000..5948ae254 --- /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/li_abs_smooth.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/li_abs_smooth.txt new file mode 100644 index 000000000..99e1c5c8a --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/li_abs_smooth.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/mashnik-pip-fe-abs.dat b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/mashnik-pip-fe-abs.dat new file mode 100644 index 000000000..b9a05787e --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/mashnik-pip-fe-abs.dat @@ -0,0 +1,26 @@ +#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# Mashnik's calculation on pi+Fe x-sections +# Hadron kinetic energy (KE) in MeV, x-section in millibarns +#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +#KE Abs +0.00 0. +50.00 209.02 +100.00 332.5 +150.00 304.58 +200.00 208.88 +250.00 155.35 +300.00 136.78 +350.00 123.37 +400.00 119.24 +450.00 117.95 +500.00 116.3 +550.00 111.86 +600.00 103.67 +650.00 96.39 +700.00 93.2 +750.00 92.49 +800.00 92.69 +850.00 89.58 +900.00 86.09 +950.00 82.16 +1000.00 80.31 diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_abs/mashnikforextrap-pip-fe-abs.dat b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/mashnikforextrap-pip-fe-abs.dat new file mode 100644 index 000000000..0c015395f --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/mashnikforextrap-pip-fe-abs.dat @@ -0,0 +1,24 @@ +# KE is lab energy in MeV, cross sections in lab in units of mb +# KE Abs +# Fate = 4 +#0.00 0. +#50.00 209.02 +100.00 332.5 +150.00 304.58 +200.00 208.88 +250.00 155.35 +300.00 136.78 +350.00 123.37 +400.00 119.24 +450.00 117.95 +500.00 116.3 +550.00 111.86 +600.00 103.67 +650.00 96.39 +700.00 93.2 +750.00 92.49 +800.00 92.69 +850.00 89.58 +900.00 86.09 +950.00 82.16 +1000.00 80.31 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 000000000..6f49c8fdc --- /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/n_abs_smooth.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/n_abs_smooth.txt new file mode 100644 index 000000000..066ef7ff4 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/n_abs_smooth.txt @@ -0,0 +1 @@ +239.0 119.000000 diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_abs/nakai-pip-al-abs.dat b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/nakai-pip-al-abs.dat new file mode 100644 index 000000000..6f329a65a --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/nakai-pip-al-abs.dat @@ -0,0 +1,13 @@ +# Nakai pi A, 1980 +# KE (MeV), Abs (mb), Err (mb) +23 102 35.4 +37 148 44.6 +52 220 59 +68 260 72 +83 282 76.4 +100 275 84 +125 256 71.2 +151 259 80.8 +187 256 71.2 +233 211 62.2 +280 187 62.4 diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_abs/nakai-pip-au-abs.dat b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/nakai-pip-au-abs.dat new file mode 100644 index 000000000..e580e0205 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/nakai-pip-au-abs.dat @@ -0,0 +1,13 @@ +# Nakai pi A, 1980 +# KE (MeV), Abs (mb), Err (mb) +23 557 186.4 +37 763 211.6 +52 945 249 +68 970 224 +83 1031 236.2 +100 1047 239.4 +125 1045 249 +151 1072 264.4 +187 1064 282.8 +233 885 237 +280 798 219.6 diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_abs/nakai-pip-cu-abs.dat b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/nakai-pip-cu-abs.dat new file mode 100644 index 000000000..5230b8627 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/nakai-pip-cu-abs.dat @@ -0,0 +1,13 @@ +# Nakai pi A, 1980 +# KE (MeV), Abs (mb), Err (mb) +23 332 101.4 +37 379 104.8 +52 490 123 +68 521 129.2 +83 554 130.8 +100 552 130.4 +125 571 144.2 +151 557 136.4 +187 540 138 +233 463 137.6 +280 412 112.4 diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_abs/nakai-pip-sn-abs.dat b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/nakai-pip-sn-abs.dat new file mode 100644 index 000000000..c7a2f1239 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/nakai-pip-sn-abs.dat @@ -0,0 +1,13 @@ +# Nakai pi A, 1980 +# KE (MeV), Abs (mb), Err (mb) +23 388 122.6 +37 565 148 +52 664 157.8 +68 667 158.4 +83 751 180.2 +100 753 175.6 +125 800 195 +151 800 185 +187 780 206 +233 674 174.8 +280 652 190.4 diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_abs/nakai-pip-ti-abs.dat b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/nakai-pip-ti-abs.dat new file mode 100644 index 000000000..23fd77994 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/nakai-pip-ti-abs.dat @@ -0,0 +1,13 @@ +# Nakai pi A, 1980 +# KE (MeV), Abs (mb), Err (mb) +23 200 75 +37 292 83.4 +52 395 104 +68 435 107 +83 452 110.4 +100 453 110.6 +125 495 119 +151 507 126.4 +187 442 143.4 +233 396 99.2 +280 404 135.8 diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_abs/navon-pip-bi-abs.dat b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/navon-pip-bi-abs.dat new file mode 100644 index 000000000..e616720f4 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/navon-pip-bi-abs.dat @@ -0,0 +1,2 @@ +# KE Abs Sig +50.0 1688 203 diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_abs/navon-pip-c-abs.dat b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/navon-pip-c-abs.dat new file mode 100644 index 000000000..cc015103a --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/navon-pip-c-abs.dat @@ -0,0 +1,2 @@ +# KE Abs Sig +50.0 88 27 diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_abs/navon-pip-fe-abs.dat b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/navon-pip-fe-abs.dat new file mode 100644 index 000000000..7b1e7f865 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/navon-pip-fe-abs.dat @@ -0,0 +1,2 @@ +# KE Abs Sig +50.0 443 58 diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_abs/navon-pip-li-abs.dat b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/navon-pip-li-abs.dat new file mode 100644 index 000000000..1f2ff287e --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/navon-pip-li-abs.dat @@ -0,0 +1,2 @@ +# KE Abs Sig +50.0 28 21 diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_abs/navon-pip-nb-abs.dat b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/navon-pip-nb-abs.dat new file mode 100644 index 000000000..a989cfdd2 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/navon-pip-nb-abs.dat @@ -0,0 +1,2 @@ +# KE Abs Sig +50.0 742 107 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 000000000..592a443af --- /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/nb_abs_smooth.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/nb_abs_smooth.txt new file mode 100644 index 000000000..feaeb6260 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/nb_abs_smooth.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/pinzon-pip-c-abs.dat b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/pinzon-pip-c-abs.dat new file mode 100644 index 000000000..df6375cc9 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/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/2025/pipA_abs/pip120_abs.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/pip120_abs.txt new file mode 100644 index 000000000..4dad86945 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/pip120_abs.txt @@ -0,0 +1,24 @@ +## pi+ -> sn-120 +## File generated by MakeTextFiles.cxx +## KE abs_xs +0 300 +50 880 +100 633.917 +150 580.687 +200 398.233 +250 296.178 +300 260.774 +350 235.207 +400 227.333 +450 224.874 +500 221.728 +550 213.263 +600 197.649 +650 183.769 +700 177.687 +750 176.334 +800 176.715 +850 170.786 +900 164.132 +950 156.64 +1000 153.112 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 000000000..901406b86 --- /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 000000000..9d52dcf44 --- /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 000000000..066ef7ff4 --- /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/pip165_abs.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/pip165_abs.txt new file mode 100644 index 000000000..20fc2058f --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/pip165_abs.txt @@ -0,0 +1,24 @@ +## pi+ -> ho-165 +## File generated by MakeTextFiles.cxx +## KE abs_xs +0 412.5 +50 1210 +100 830.097 +150 760.394 +200 521.476 +250 387.836 +300 341.476 +350 307.997 +400 297.687 +450 294.466 +500 290.347 +550 279.262 +600 258.816 +650 240.641 +700 232.677 +750 230.904 +800 231.404 +850 223.639 +900 214.926 +950 205.115 +1000 200.497 diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_abs/pip16_abs.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/pip16_abs.txt new file mode 100644 index 000000000..812c3be4e --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/pip16_abs.txt @@ -0,0 +1,24 @@ +## pi+ -> o-16 +## File generated by MakeTextFiles.cxx +## KE abs_xs +0 40 +50 117.333 +100 115.119 +150 105.453 +200 72.319 +250 53.7857 +300 47.3564 +350 42.7135 +400 41.2836 +450 40.837 +500 40.2657 +550 38.7285 +600 35.8929 +650 33.3724 +700 32.268 +750 32.0222 +800 32.0914 +850 31.0146 +900 29.8063 +950 28.4457 +1000 27.8052 diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_abs/pip181_abs.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/pip181_abs.txt new file mode 100644 index 000000000..d23aeb6d6 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/pip181_abs.txt @@ -0,0 +1,24 @@ +## pi+ -> ta-181 +## File generated by MakeTextFiles.cxx +## KE abs_xs +0 452.5 +50 1327.33 +100 897.76 +150 822.375 +200 563.982 +250 419.45 +300 369.31 +350 333.103 +400 321.952 +450 318.469 +500 314.014 +550 302.025 +600 279.912 +650 260.256 +700 251.643 +750 249.726 +800 250.266 +850 241.869 +900 232.446 +950 221.835 +1000 216.839 diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_abs/pip1_abs.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/pip1_abs.txt new file mode 100644 index 000000000..20f9aab0a --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/pip1_abs.txt @@ -0,0 +1,24 @@ +## pi+ -> h-1 +## File generated by MakeTextFiles.cxx +## KE abs_xs +0 2.5 +50 7.33333 +100 11.0068 +150 10.0825 +200 6.91456 +250 5.14255 +300 4.52783 +350 4.08392 +400 3.9472 +450 3.9045 +500 3.84988 +550 3.7029 +600 3.43179 +650 3.1908 +700 3.0852 +750 3.0617 +800 3.06832 +850 2.96537 +900 2.84984 +950 2.71974 +1000 2.6585 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 000000000..6b6b2b75e --- /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 000000000..b153bd7b6 --- /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/pip2_abs.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/pip2_abs.txt new file mode 100644 index 000000000..a647b98ea --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/pip2_abs.txt @@ -0,0 +1,24 @@ +## pi+ -> d-2 +## File generated by MakeTextFiles.cxx +## KE abs_xs +0 5 +50 14.6667 +100 19.7939 +150 18.1318 +200 12.4347 +250 9.24806 +300 8.14258 +350 7.34428 +400 7.09842 +450 7.02162 +500 6.9234 +550 6.65908 +600 6.17153 +650 5.73814 +700 5.54824 +750 5.50598 +800 5.51788 +850 5.33274 +900 5.12498 +950 4.89103 +1000 4.78089 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 000000000..314a622ea --- /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 000000000..a8c59e637 --- /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/pip48_abs.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/pip48_abs.txt new file mode 100644 index 000000000..1de6a4d13 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/pip48_abs.txt @@ -0,0 +1,24 @@ +## pi+ -> ti-48 +## File generated by MakeTextFiles.cxx +## KE abs_xs +0 120 +50 352 +100 291.817 +150 267.313 +200 183.322 +250 136.342 +300 120.044 +350 108.275 +400 104.65 +450 103.518 +500 102.07 +550 98.1733 +600 90.9854 +650 84.5961 +700 81.7964 +750 81.1733 +800 81.3488 +850 78.6193 +900 75.5564 +950 72.1072 +1000 70.4836 diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_abs/pip4_abs.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/pip4_abs.txt new file mode 100644 index 000000000..ac1452641 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/pip4_abs.txt @@ -0,0 +1,24 @@ +## pi+ -> he-4 +## File generated by MakeTextFiles.cxx +## KE abs_xs +0 10 +50 29.3333 +100 35.5962 +150 32.6072 +200 22.3619 +250 16.6312 +300 14.6431 +350 13.2075 +400 12.7654 +450 12.6273 +500 12.4506 +550 11.9753 +600 11.0985 +650 10.3191 +700 9.97763 +750 9.90162 +800 9.92303 +850 9.59009 +900 9.21646 +950 8.79573 +1000 8.59768 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 000000000..d86519572 --- /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/pip58_abs.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/pip58_abs.txt new file mode 100644 index 000000000..51ca2952e --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/pip58_abs.txt @@ -0,0 +1,24 @@ +## pi+ -> ni-58 +## File generated by MakeTextFiles.cxx +## KE abs_xs +0 145 +50 425.333 +100 342.527 +150 313.765 +200 215.179 +250 160.035 +300 140.905 +350 127.09 +400 122.836 +450 121.507 +500 119.807 +550 115.233 +600 106.796 +650 99.2968 +700 96.0106 +750 95.2792 +800 95.4852 +850 92.2814 +900 88.6862 +950 84.6377 +1000 82.7319 diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_abs/pip63_abs.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/pip63_abs.txt new file mode 100644 index 000000000..9015a853a --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/pip63_abs.txt @@ -0,0 +1,24 @@ +## pi+ -> cu-63 +## File generated by MakeTextFiles.cxx +## KE abs_xs +0 157.5 +50 462 +100 367.368 +150 336.52 +200 230.784 +250 171.641 +300 151.123 +350 136.307 +400 131.744 +450 130.319 +500 128.496 +550 123.59 +600 114.541 +650 106.498 +700 102.973 +750 102.189 +800 102.41 +850 98.9738 +900 95.1178 +950 90.7757 +1000 88.7317 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 000000000..99e1c5c8a --- /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 000000000..feaeb6260 --- /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/pip9_abs.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/pip9_abs.txt new file mode 100644 index 000000000..30cf85853 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/pip9_abs.txt @@ -0,0 +1,24 @@ +## pi+ -> be-9 +## File generated by MakeTextFiles.cxx +## KE abs_xs +0 22.5 +50 66 +100 70.7269 +150 64.7879 +200 44.4314 +250 33.0449 +300 29.0948 +350 26.2423 +400 25.3638 +450 25.0894 +500 24.7385 +550 23.794 +600 22.0519 +650 20.5033 +700 19.8248 +750 19.6738 +800 19.7163 +850 19.0548 +900 18.3124 +950 17.4765 +1000 17.0829 diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_abs/various-pip-c-abs.dat b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/various-pip-c-abs.dat new file mode 100644 index 000000000..50138ee63 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/various-pip-c-abs.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 30 +50.0 88 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 000000000..2dfd67d02 --- /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_abs/xe_abs_smooth.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/xe_abs_smooth.txt new file mode 100644 index 000000000..9d52dcf44 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_abs/xe_abs_smooth.txt @@ -0,0 +1 @@ +239.0 676.000000 diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_cex/ExtrapFromMash_CEx.C b/data/evgen/intranuke/tot_xsec/2025/pipA_cex/ExtrapFromMash_CEx.C new file mode 100644 index 000000000..a33d043d2 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_cex/ExtrapFromMash_CEx.C @@ -0,0 +1,40 @@ +{ +#include + double xs1[21] = { + 0.0000E+00, + 0.5400E+02, + 0.9700E+02, + 0.1105E+03, + 0.1005E+03, + 0.9200E+02, + 0.8700E+02, + 0.8350E+02, + 0.2498E+02, + 0.2167E+02, + 0.2031E+02, + 0.2187E+02, + 0.2038E+02, + 0.1464E+02, + 0.1111E+02, + 0.1160E+02, + 0.1468E+02, + 0.1735E+02, + 0.1615E+02, + 0.1184E+02, + 0.8496E+01 + } + double xs2; + double ke; + double A1 = 56; + double A2[9] = { 1, 7, 14, 40, 63, 93, 120, 208, 209 }; + for (int j=0; j<9; j++) { + cout << endl; + cout << setw(4) << "A" << setw(5) << "KE" << " " << "XSec" << endl; + for (int i=0; i<21; i++) { + xs2 = TMath::Power((A2[j]/A1),(.6667)) * xs1[i]; + ke = 50 * i; + cout << setw(4) << A2[j] << setw(5) << ke << ". " << setw(5) << xs2 << endl; + } + } + +} diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_cex/Report.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_cex/Report.txt new file mode 100644 index 000000000..0fd8c0f2e --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_cex/Report.txt @@ -0,0 +1,234 @@ +Note: Use the Quick Summary section to edit the section of $GENIE/src/HadronTransport/INukeHadroData.cxx + where the TGraph2D objects are constructed. + +---Quick Summary--- + +**abs** +Num nuclei: 7 +Nuclei: { 1, 7, 12, 27, 56, 93, 209 } +Total points: 86 + +**cex** +Num nuclei: 13 +Nuclei: { 1, 2, 3, 4, 7, 9, 12, 16, 27, 56, 58, 93, 209 } +Total points: 105 + +**elas** +Num nuclei: 7 +Nuclei: { 1, 7, 12, 27, 56, 93, 209 } +Total points: 87 + +**inelas** +Num nuclei: 7 +Nuclei: { 1, 7, 12, 27, 56, 93, 209 } +Total points: 87 + +**pipro** +Num nuclei: 3 +Nuclei: { 1, 56, 209 } +Total points: 51 + +**tot** +Num nuclei: 14 +Nuclei: { 1, 4, 6, 7, 9, 12, 16, 27, 28, 32, 40, 56, 93, 209 } +Total points: 195 + +**abs_frac** +Num nuclei: 7 +Nuclei: { 1, 7, 12, 27, 56, 93, 209 } +Total points: 86 + +**cex_frac** +Num nuclei: 13 +Nuclei: { 1, 2, 3, 4, 7, 9, 12, 16, 27, 56, 58, 93, 209 } +Total points: 105 + +**elas_frac** +Num nuclei: 7 +Nuclei: { 1, 7, 12, 27, 56, 93, 209 } +Total points: 87 + +**inelas_frac** +Num nuclei: 7 +Nuclei: { 1, 7, 12, 27, 56, 93, 209 } +Total points: 87 + +**pipro_frac** +Num nuclei: 3 +Nuclei: { 1, 56, 209 } +Total points: 51 + + + +---Data Modifications--- + +A Fate KE Factor + +27 abs_frac 315 1.5 +27 inelas_frac 165 0.95 +12 abs_frac 245 1.2 +12 abs_frac 315 1.5 +12 cex_frac 85 0.95 +12 cex_frac 125 1.05 +56 abs_frac 125 0.95 +56 cex_frac 125 1.1 +56 cex_frac 205 1.1 +7 abs_frac 125 0.85 +7 abs_frac 205 1.9 +7 abs_frac 245 2 +7 inelas_frac 315 0.65 +209 abs_frac 85 0.95 +209 abs_frac 125 1.1 +209 abs_frac 205 1.1 +209 abs_frac 315 1.1 +209 cex_frac 205 0.95 +209 inelas_frac 125 0.8 +209 inelas_frac 205 0.9 +209 inelas_frac 245 0.9 + + + +---Powers of A--- + +Absorption: 0.846667 +Charge exchange: 0.666667 +Elastic: 0.916667 +Inelastic: 0.666667 +Pion producion: 0.666667 +Total: 0.666667 + + +---Extra Details--- + +Fate: abs + Nucleus: al | A: 27 | Data points: 6 + Nucleus: bi | A: 209 | Data points: 21 + Nucleus: c | A: 12 | Data points: 6 + Nucleus: fe | A: 56 | Data points: 21 + Nucleus: li | A: 7 | Data points: 5 + Nucleus: nb | A: 93 | Data points: 6 + Nucleus: h | A: 1 | Data points: 21 + + Total points for abs: 86 + +Fate: cex + Nucleus: al | A: 27 | Data points: 6 + Nucleus: be | A: 9 | Data points: 1 + Nucleus: bi | A: 209 | Data points: 21 + Nucleus: c | A: 12 | Data points: 6 + Nucleus: d | A: 2 | Data points: 5 + Nucleus: fe | A: 56 | Data points: 21 + Nucleus: h | A: 1 | Data points: 21 + Nucleus: he3 | A: 3 | Data points: 5 + Nucleus: he | A: 4 | Data points: 5 + Nucleus: li | A: 7 | Data points: 5 + Nucleus: nb | A: 93 | Data points: 6 + Nucleus: ni | A: 58 | Data points: 1 + Nucleus: o | A: 16 | Data points: 2 + + Total points for cex: 105 + +Fate: elas + Nucleus: al | A: 27 | Data points: 6 + Nucleus: bi | A: 209 | Data points: 21 + Nucleus: c | A: 12 | Data points: 6 + Nucleus: fe | A: 56 | Data points: 21 + Nucleus: li | A: 7 | Data points: 6 + Nucleus: nb | A: 93 | Data points: 6 + Nucleus: h | A: 1 | Data points: 21 + + Total points for elas: 87 + +Fate: inelas + Nucleus: al | A: 27 | Data points: 6 + Nucleus: bi | A: 209 | Data points: 21 + Nucleus: c | A: 12 | Data points: 6 + Nucleus: fe | A: 56 | Data points: 21 + Nucleus: li | A: 7 | Data points: 6 + Nucleus: nb | A: 93 | Data points: 6 + Nucleus: h | A: 1 | Data points: 21 + + Total points for inelas: 87 + +Fate: pipro + Nucleus: h | A: 1 | Data points: 21 + Nucleus: fe | A: 56 | Data points: 15 + Nucleus: bi | A: 209 | Data points: 15 + + Total points for pipro: 51 + +Fate: tot + Nucleus: al | A: 27 | Data points: 7 + Nucleus: be | A: 9 | Data points: 19 + Nucleus: bi | A: 209 | Data points: 21 + Nucleus: c | A: 12 | Data points: 34 + Nucleus: ca | A: 40 | Data points: 1 + Nucleus: fe | A: 56 | Data points: 21 + Nucleus: h | A: 1 | Data points: 21 + Nucleus: he | A: 4 | Data points: 5 + Nucleus: li | A: 7 | Data points: 25 + Nucleus: li6 | A: 6 | Data points: 21 + Nucleus: nb | A: 93 | Data points: 6 + Nucleus: o | A: 16 | Data points: 6 + Nucleus: s | A: 32 | Data points: 7 + Nucleus: si | A: 28 | Data points: 1 + + Total points for tot: 195 + +Fate: abs_frac + Nucleus: al | A: 27 | Data points: 6 + Nucleus: bi | A: 209 | Data points: 21 + Nucleus: c | A: 12 | Data points: 6 + Nucleus: fe | A: 56 | Data points: 21 + Nucleus: li | A: 7 | Data points: 5 + Nucleus: nb | A: 93 | Data points: 6 + Nucleus: h | A: 1 | Data points: 21 + + Total points for abs_frac: 86 + +Fate: cex_frac + Nucleus: al | A: 27 | Data points: 6 + Nucleus: be | A: 9 | Data points: 1 + Nucleus: bi | A: 209 | Data points: 21 + Nucleus: c | A: 12 | Data points: 6 + Nucleus: d | A: 2 | Data points: 5 + Nucleus: fe | A: 56 | Data points: 21 + Nucleus: h | A: 1 | Data points: 21 + Nucleus: he3 | A: 3 | Data points: 5 + Nucleus: he | A: 4 | Data points: 5 + Nucleus: li | A: 7 | Data points: 5 + Nucleus: nb | A: 93 | Data points: 6 + Nucleus: ni | A: 58 | Data points: 1 + Nucleus: o | A: 16 | Data points: 2 + + Total points for cex_frac: 105 + +Fate: elas_frac + Nucleus: al | A: 27 | Data points: 6 + Nucleus: bi | A: 209 | Data points: 21 + Nucleus: c | A: 12 | Data points: 6 + Nucleus: fe | A: 56 | Data points: 21 + Nucleus: li | A: 7 | Data points: 6 + Nucleus: nb | A: 93 | Data points: 6 + Nucleus: h | A: 1 | Data points: 21 + + Total points for elas_frac: 87 + +Fate: inelas_frac + Nucleus: al | A: 27 | Data points: 6 + Nucleus: bi | A: 209 | Data points: 21 + Nucleus: c | A: 12 | Data points: 6 + Nucleus: fe | A: 56 | Data points: 21 + Nucleus: li | A: 7 | Data points: 6 + Nucleus: nb | A: 93 | Data points: 6 + Nucleus: h | A: 1 | Data points: 21 + + Total points for inelas_frac: 87 + +Fate: pipro_frac + Nucleus: h | A: 1 | Data points: 21 + Nucleus: fe | A: 56 | Data points: 15 + Nucleus: bi | A: 209 | Data points: 15 + + Total points for pipro_frac: 51 + diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_cex/TPipA_CEx.png b/data/evgen/intranuke/tot_xsec/2025/pipA_cex/TPipA_CEx.png new file mode 100644 index 0000000000000000000000000000000000000000..673a90a2882285db5a1dc9d223f3af2b91527185 GIT binary patch literal 10433 zcmb_?XIN8N+w}oNF;q1upn&M8L69yWCV(JCdc;r!=|vC(hhBq902#)pFrkA;Q+fvh z2~9w$Qly3=(o3X<&bPzNIL|!q`~Lg#Be|}Vea_zJ?E7B#TI)W~bhK2MVO%f>f|zfq z-n70lx|ugw^~gKJ>5jxr}g_qSNbR6CkATL4y({gK1kzz?Lv1N zVbVu)sSx)_XS-+p)qKKa-hQ7ik8j^Zo_7;ho5c2n5yt65C6Rap3V5*BI>Ze@Cug_G z#C^@mwe@wvVrzjz+Fn-ujB88y%USzS}QGgfZZ%=qdyil_#LfZr$r$ zQcjqn$PK`(3@=`wtCsPVP1fmkBUl>}9EqW(X=UbO7|h4?oQ#a^rt+NM-hj!yV~Y`? z7F&sokPYRNd=esb!QH3Wu7c$6S(Bi2uXk`^-4iKEp6?$VUn=VZqZ(GC<&!cpT;G!% zBr8aZ&eHSl6|U9(MAOkJGQ8hGGS()Tvb{S|Q;{nft6A<6Eq4kEn-X_{cmCm4I{1e* zr_+>|3BfvM#T0`v*2|aAxAaQrb>lvtkde{JdOY6G5Uzy$wSp9bg{oJ|t|h z`r)r`j($fVZHrkM*rRTuU~|O!h=XK$*Nm%7YWtSHTtVYA`rtY~lFQZHyuk&nblsJ_ zl0)(?X-bKVSQ%wynt-XLO&M70Zx1k-NL^ZCxg{y`r*_1zS3)jQ2UlJ(tb8@k`5o{yh@$#4Z z%10|mZPK(*(Wb9*(&nuXUfCbY2YzH^dWFa?MhiKgykHz}_vjDW2nd-3Zd|{awZ8Zz zy1nt;T)9_`>=~BbNbX^Y($_Ox=vtIE48qS%$|rd}`jB;}4~snKM;>!VG#6~oZojXu zi?+FcJh5n>B8k2Im= zzq8!*y-k3kIa2ilK?CX8%pPxps_Bj)ASnBARI+^dH5ino7?*rD86?qh>d~BB@9Dm# zV~{70J}pk7O2`-rxYUbLsR=_up1)2~M;wAd@&e%Lbf~@l`=tNlQ05~#oM3a#Lk=`t z$>DOSMV}sICNE4TllcNmOG|5bWpE6(KFY>HEUk2lcJxrt^41oY@@GW18>wW)N{#Le zOK{y7o0C4KC;cj^Yybu^J=_RWz+kp_tGwE+)yzQ5N~a=1$Csj>zfWg}I64eCapgIR z3>Bn@rGv%X;ZvLazbD;k{=uj zc{qZj)cDX2&1$=NK#P z0Z1e$T0q?2!bG9GD~lfD80>yrYg2fXFJ&$Kk)LH{q3wgpl>)G^q3*{DcbUIrEuPW0 zFDXvDUSUKNP@~C>`0kYudRe(uIJZQS@sev1E%fyCquk(!kAiLtTJLpbb2p#Q4hp~( zB44o^bS*bUkrS`zaNHtT)6#nC(9-Lf`8}>hy1@f(loilg#(H`E0_9oJ(nGKRkf(v} zU(kV|yGP+rfS!Qy+K*F-xkyY8% z^js-_DK%|>(Vp#yu)p{C?pVjuiIHyS~R{aD`H<5BSR z@rj+>%*YrZQ*1pFw9;L#Hy3D^Hqg}{nlpP&JM`%c&TD7&xUdG16lahSA}~5? zVrp8q%8BE+0N}T4rf6{CTRea6i&uw0@Hk5kbyLHple&Px1xblch+mP7{LJ*BWGu%= zxY8pek55V3kqETG5l;HD@UU8>6?_rhyVj2axVxN(Y;S+K>O>D6mau!>;b%u=I=@v) z3t2|FdRf8Xp>F_c8f?oSm4V@xp*xMCiVW=Y{EPXON%NLFw?3Nou4yTAUM8I^5)h| zlQx)*5?lUUfnW_5e^O4>1%CSmu8iT_1c$|gyPRK0)O(x#9QJPGhVI>?F|aGEPN*|1 zt>~j}@RMy;%6ipS%H=6CuzknxGB7N$K?b&D7<(_#Rv{0CB z&^4H-f}PO-o9*?6%_EUVT*1tBF^;h_K3}C>O9yPYpdc}$*CISLG+;Y%k7>Kam0q%o zC>_g*@fJG|{gD4(06?#7_69ddiq9}Q`oB+ukg?@CnHg%^mm{tFvn-4;n4#U*{EKhd zQm>qriq%}%6WLvSX<6v=y_UbV9)@VW8Cm4>eV@yV(nQ>}rZi<_tZ(o3)3o}XD4bWb z?JPAdX-MM`Z9+iRmg;DQAxp0cQp0}2f+A_?!?llWN@!z$Ck)2guwk1X2K}h+j8ahJ z1NGYG2_Lt!WExxQvEYplV4ppaiYa)^4;t z{6(OJI-*+qx0yhRju*5zPpk$<{c7C=Q=|HyIfW!d5;^CSI$P=`I@pe!QUEX{SEoeqt9pymLk0@;CT}`sin0W?VDo%CD8N*$S@Tx^&0|4w-Ssplkc@Je`c3 zaToWVrb04n?s>J4!c!|q@`;niX`EJYXf!|dF2f^Q%Uw*R3vq-@*)HniBZV-Y9WPCp zh_EZR@^semjDVQMYl>?y!vu zYo>%%XCW0rk>Q+OS)pZ6^0j;7zNEU#?JFf$PwW2$q$w8?mYO{m!r{`%_t99C$C1NgZm*q7@_P;vSP7j%5>X^OULH8e;EUYes&z*mp{z0vv!7rh z)jZ}r3WU!eKBDziJpAM05`Kc1WS}Od@Z6_lbU~&0Ww2?aD4r{Jw8uDKtO_1VM7euM`?r% z463F*s0TkwL~-q>Fvmd+BW4f7 z1Zu8lvbUjiRA``}f?D|-@(`qWz`_p*#7`)&$Axo_eOb$0e;agOqy&@>f(mW5jvfbs zfx61@!!Wmd`WUz3nYFd6B%#o6p2#3JK$=(fWDmBl4N?DKC$&6h1+WZ1luTCC?f3wF)Tu=JlkP#Be z<)p>AJ|=1$uRo(0SH)JRt(n z*-!8LdlmN#(L-1oZbgqt#-V_d{-2L753+w_#@UpFZr zsum-rHmS&}g$iFPT}=K(2MWMEn+Y_K9o-AP$rul!t9{(bX*lI=kM*O+(_OzE0+=mQ zxbMIHy*x8tDfGAy#dv2`RxOAJGGmTGD^S7$Q?#e^YQvrYVuFm#MAu?U+wK~eE00zD z@LwAl+NBLZr`%<*qqXd=T{iC(gQprQVjinHXp z3(q~ks*_H~DDFZpm zaRHPyKz;fhYI_a%0uQ(kpCdm0HVX-a?x@M|$cQ3?lao^y(p2Lp6%Cu+?)AFeoAToE zC`CTdd>*UHcMs}XZ%rZUo6Zj3Z<7oWMcXgznLuV@0PB!E_}JEq?JLsPfwYbq z30c%&FX};0|8PiVZ-6Jf*pXvg(|7SObC%oL*~i8dpQ4Moq@%jRw2T~iSlT$AA1xA6 zcv5zEwB5buNWhYYjLO)r-Z#Y0PXEo8#G~`40_h4*LS`nqM_~ER3S19VF>DsKqgh!B z#=9KkoxH!ucT70zPZZ~D8g`A%PLHJZ#w$o%Pw^LmiY#CAdBeBtLinBcV&i1xoR*F8JAZIa z4cU~R=X7p|F&r?RHhG$|a3oFm-H~*xca$w)=0Dhe!s0)w2{5E2$5^}no0mf(dBjD( z@2qnB`;8)tCaip66<-wp0b)JrRWopHDj|Ck0OHbO`d`HV&*;1)Uc0ifo?fNmziHFr zUwvpR5;;rGRrYM@dHFAnesGO|^gpZ(8OB_xGj_wRFa56bVsKQ4JP@qx&h z+%+f2k0mVn_rV}-0p+8S>)U?q|>u`)W-U8L)}^p0+D83XiDWSD5^Q5KU`=P<3kJyR9W4lK`@Xt>;v z^Zcb81>q42@`tNTj~l6_vGJBaO75{XH)3_>;YxtEGYH_cNz7GJ&RluBeE_GLbg5hE zb!n0FG>|Mv;7sq>vWovs;-`NZ8B~z|7bO21!w)j{?wFNwROgBw+84h2 z+c-(*^rJ9~C#>jI=eE$`-BzR06(<$Xb+3c#>P7v@jl^uJ;4BD8@%0KKBGeO$hDVO{ z{KJY_A?SgWt+F|B#B{hn?DX?SOM-QJ*E?GPs9F7DFvtEUp5xBI`3v@}$jG3wqEWyW zGBQB6MN%5C1HF_m<(1$h8QY)4-Q?*@tt(~V@&@~7{h~AYQ*Hzo2m=1GvDQ})FiGVBC4e4s#-}o&Zh9r8 zzxoZm(wvz+DFjt}P7ck1OE>$AaKWt*#zy9VGi$JD^Gx=x{y< zL=@0vZ?5FwZwPi)TfvJPh~k~e?9z>GZ2a2H_MGVknQt}Mvu~tQ7(L?so8`1u4n?k~ z;jQP!seRkPBi!TU`)-7*(Z?VI_`e-7J?ZE#%c}pV-;W)1e;H=LOi^rCQ)AUVW7m+O zA|Plb;iMGr^`IgvYxMTW@=YwK)>AnO$E67l+d&Qt-aF>K^zD7Q^+(Odt=l{@9Gvu! z0iGIC6_p^Q`tHC#YGwmz3RSz5bDfJLVUawAg4Y4bGO`9*aSZJE$qOmJ)Bq#o49k)` z2IF_P?lK)tcx+;p_(dfp4Eqo*d=Cz#FHh zIB*j-g43mvD_@PyR3X1rrhnwX&ZE>fbDFaYPlDXaLmr1-m8`w^^In|lwtKKH6ky=L z&{LGiyiTmDaxaoRrPIO&e8kF$KX#Ejwa`$7a zJ^Q%|S#)iwilN^@E4?e5JzXwKg&8V(rWE7k7%!s(z!#7p7XK8M)N2HfugQmjfLU8^ zn%oJ2^Ty#s5_7;{rUxZ5FuRf)Y9d3XcrJ+J>v2XQzj7Y8?oz8-ZQ{^;!v2PJ82^3N zr2U&&yn7BCwnXzMR{PJ__wTJI=6=Qc_l9+8@_yv#>Y41`XU*B?RoU;IX2lLunyR{Z zcqfXc_qld+C@&ME)}b&454>*#iZ7{$xGK=uziC!HQ>&^|N52g<#FbA zS?BlZqG~+9kD)&!TIWpnDtpbPx~*sT%kk(KyA9n1LZ=3H*6;h%gNcF9`Y#?RR@b5U z({Dw?-R>oFcQ}05S*MC)c@U`w{_0FKXlaoivIZ+AOf4k{HpgTe65_RpEzy7L3O=Qy z2M%ieAn+cCRc}490gW9$;GEZJ0(eIUMJY6`_?8Y{WtHZ^^92IbFaj0ne*MV<$#IeS zPk$2tFtbDvx4V1tfuxC^L)81qw=f&G**j3@X%LxOZjumRT3ajj+K+$t1SG+fzx~jj z%`*ER0s^Nz6xl!SZAEGrC3-P7uVsvFST@PZA_7G`m>WfB_kLfB+8sIGAT7GJSFKQJ#lRm~+!yMzR)+~keFn%@FuH)ecG4A~py|LVyo=5{Fd_*d;wjz?I z;^@SWLuTIMhhX~2ftf9Lp#U%7%>R^*zoM)Xsh&c38~W{>j0vf(Hzw>I|49SEX0hS^ ztm>#V8574V&A;wEr>hQ+Ngur(3q0dVNy(qaDsY|+3A`5}3v?RC?So46(lL$3Qxb!@ z=g;M&$BPI($K0QYxiDSQ;h07?q~SXYjrO}b-FI#$gfcS2H$D!0M&uv2j6icGZ!r6{ z7?2z$YwgcRyok|vd4k>2Ar0LY^(BP>37-(Y10=?ezRuTmJ)*ctLg-S%0f|P@;iCW4 z-?X@&Tv^-c9RdjOMglEv*PpkL-jML|I$2ojJ`fO->x#q$CZiNCC8~cJ-v?qOR{W&g zJxzH4-7ed^3v+8+`AULkI?fn}h@Xs|3DkBfD+4AFuzC|T#Tisf=gO;y{!4$FzS(Xe1eWEl>=k!a+zAVrv9>GhRBN{H+nEM~UjY_z!0N9nT2ku! zxSS}t-zsa9f)lEC-;rOM+T@&(e3H<^gWV_`OWX>w$L~J4-L`$&JL1v$^DU{fD4k*k1?lRylHVu}@A{O% zEeSjVPudZm(UrU*YUSebcqV(H-2l|X`^CVf00!L8{>kS!5PObUF+de*+9kLA=`S@S zjG2!C$LYEasHh24!eY}zZH4_+z*S?-^gtu*FF}jJv|h)OP{!mOG=nYq?{6Bg{QKy|%;luRrWa zdmJ%i7-`)1+t#I+Q?|qw>-H_4xdBhO>XP2Hp~_eg=sNz$I(et|{hyjAt@O40*sBA_ z%bFhMILEh5ZGIW)z5b6HZgLOwv6w6j9|Kwb?z=_z&a!>xdqzkk;iq^RLT&ybz5n_O z!}NVe0Tyl{J;ktsS@ST=lik*`9miqbN+Qtd^TeQHV$CV?^DnmyG9t<27jN#1ZZEuT zU%5~j_F)j+GA;bb%c{(YJ`kj(83Lr-;!;II@R|^ADScRbcfw9idTpOU#;GR}%aat+ z)zTl~6pU>eY2P@HTHvqGn?zk9Ca(1dmu7)RYV{iiYQyc{!X?|er;gXCBzmt6RJ5`$ ze>Fo6=%7806UXT{SP{~N@SpY>MNDM+ct<>u*_|t9G9i2Zva5dYcQhd*_t>mTjfS`0 z{&tb@c{%@o#{$!;6ty_dM!0ZpgYCz&i~FVKYo;oryzx@Lcui^6lZ z)J|l?k<;Ey1%k>)`2s;B*SbF&-$8KN7&4dQzSg|LGWbC>p_kDUvu`c-RQT=8WYk-wH-%w7(mM}q%<=lCRYW@`xOsIq#OfA@d^^W$G{i3 z>o4a)gv^S0_;o@+^R0pg3j1zO3uMa_Xn`T)gZazu^sc#AF!KS$6{QX=x#!m<1hjlD zyw5{S_vd9)(FE%*xUqNT#7k1z<{IEZ7b}KQEggz6FU^=}p^Gabk83X+ql3a0Uee+U z*Iw8ae~5l!Az8K+g$%TZJK|Ze^t?%Ghcd(1(xWsZoW>5>qoU@ z1S7KjLONj~I8{c`n3(uV`&CCdO0=>6IVDBU=a^Lxnq z+ZC^lG@HFJ_>#v}Ug%0ui z^i92=^!vCa=Obe+vnPF|m-In)s<}_byRXIJs&+JMx-rvq-3a-OUY_uZqu1skSh6bi zx!s<+m}SJ>-nEHE4t>_x43*xG$7( zlOEGN@u0`|3*iTCnn(C*Ea+7OYFWiDloYIqI$|AZ7M-pkW7>9dr5D7z$85_ihkT?|Gyw_kG~Ejr)R*3wg#&^||B*(0W6#k&+?IFRcDPH*he+@WPz z1H*~c&yK=_B5vE;rD=3mx-=Z`wl-Yk>eNlgs}xd1Wc7hn%scb#J<5mDX{0gR*Xiw< zRw1W8z3@sqdLmKSyg$7~p)Jy9uYvGGz=YNfe%Ph>uwleSK2si%aqpqRwR&?-RApRn zk6@;V4@D?*6xZ;FWdo1No}}D-doX6@; sn-120 +## File generated by MakeTextFiles.cxx +## KE cex_xs +0 12.5594 +50 45.214 +100 322.451 +150 367.328 +200 334.086 +250 305.83 +300 289.209 +350 277.574 +400 136.294 +450 0 +500 0 +550 0 +600 0 +650 0 +700 0 +750 0 +800 0 +850 0 +900 0 +950 0 +1000 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 000000000..196c4e016 --- /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/pip165_cex.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_cex/pip165_cex.txt new file mode 100644 index 000000000..b092df0ca --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_cex/pip165_cex.txt @@ -0,0 +1,24 @@ +## pi+ -> ho-165 +## File generated by MakeTextFiles.cxx +## KE cex_xs +0 14.2656 +50 51.3563 +100 398.718 +150 454.21 +200 413.105 +250 378.165 +300 357.613 +350 343.226 +400 168.53 +450 0 +500 0 +550 0 +600 0 +650 0 +700 0 +750 0 +800 0 +850 0 +900 0 +950 0 +1000 0 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 000000000..ddc175629 --- /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/pip181_cex.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_cex/pip181_cex.txt new file mode 100644 index 000000000..5f7b5947d --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_cex/pip181_cex.txt @@ -0,0 +1,24 @@ +## pi+ -> ta-181 +## File generated by MakeTextFiles.cxx +## KE cex_xs +0 14.8037 +50 53.2932 +100 424.094 +150 483.117 +200 439.396 +250 402.233 +300 380.373 +350 365.071 +400 179.256 +450 0 +500 0 +550 0 +600 0 +650 0 +700 0 +750 0 +800 0 +850 0 +900 0 +950 0 +1000 0 diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_cex/pip1_cex.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_cex/pip1_cex.txt new file mode 100644 index 000000000..24a479b50 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_cex/pip1_cex.txt @@ -0,0 +1,24 @@ +## pi+ -> h-1 +## File generated by MakeTextFiles.cxx +## KE cex_xs +0 1.85054 +50 6.66193 +100 13.2539 +150 15.0985 +200 13.7321 +250 12.5707 +300 11.8875 +350 11.4093 +400 5.60216 +450 0 +500 0 +550 0 +600 0 +650 0 +700 0 +750 0 +800 0 +850 0 +900 0 +950 0 +1000 0 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 000000000..bff6986e0 --- /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 000000000..9bb4ad7d2 --- /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/pip2_cex.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_cex/pip2_cex.txt new file mode 100644 index 000000000..e7a47f5ae --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_cex/pip2_cex.txt @@ -0,0 +1,29 @@ +## pi+ -> d-2 +## File generated by MakeTextFiles.cxx +## KE cex_xs +70. 4.8 +118. 18.1 +162. 35.3 +239. 26.6 +330. 14.8 +0 2.4418 +50 8.79047 +100 21.0392 +150 23.9674 +200 21.7984 +250 19.9547 +300 18.8702 +350 18.1111 +400 8.89287 +450 0 +500 0 +550 0 +600 0 +650 0 +700 0 +750 0 +800 0 +850 0 +900 0 +950 0 +1000 0 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 000000000..b5799ef98 --- /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 000000000..276e31553 --- /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/pip48_cex.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_cex/pip48_cex.txt new file mode 100644 index 000000000..d30b12d1e --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_cex/pip48_cex.txt @@ -0,0 +1,24 @@ +## pi+ -> ti-48 +## File generated by MakeTextFiles.cxx +## KE cex_xs +0 8.70551 +50 31.3398 +100 175.053 +150 199.416 +200 181.37 +250 166.03 +300 157.007 +350 150.69 +400 73.9916 +450 0 +500 0 +550 0 +600 0 +650 0 +700 0 +750 0 +800 0 +850 0 +900 0 +950 0 +1000 0 diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_cex/pip4_cex.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_cex/pip4_cex.txt new file mode 100644 index 000000000..1ea59ed2e --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_cex/pip4_cex.txt @@ -0,0 +1,29 @@ +## pi+ -> he-4 +## File generated by MakeTextFiles.cxx +## KE cex_xs +70. 5.0 +118. 18.0 +162. 34.2 +239. 33.1 +330. 34.7 +0 3.22197 +50 11.5991 +100 33.3977 +150 38.0458 +200 34.6028 +250 31.6762 +300 29.9546 +350 28.7496 +400 14.1165 +450 0 +500 0 +550 0 +600 0 +650 0 +700 0 +750 0 +800 0 +850 0 +900 0 +950 0 +1000 0 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 000000000..56a711c73 --- /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/pip58_cex.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_cex/pip58_cex.txt new file mode 100644 index 000000000..185397f74 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_cex/pip58_cex.txt @@ -0,0 +1,25 @@ +## pi+ -> ni-58 +## File generated by MakeTextFiles.cxx +## KE cex_xs +100. 104. +0 9.39007 +50 33.8042 +100 198.592 +150 226.231 +200 205.758 +250 188.355 +300 178.119 +350 170.953 +400 83.9409 +450 0 +500 0 +550 0 +600 0 +650 0 +700 0 +750 0 +800 0 +850 0 +900 0 +950 0 +1000 0 diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_cex/pip63_cex.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_cex/pip63_cex.txt new file mode 100644 index 000000000..ea4600210 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_cex/pip63_cex.txt @@ -0,0 +1,24 @@ +## pi+ -> cu-63 +## File generated by MakeTextFiles.cxx +## KE cex_xs +0 9.70585 +50 34.9411 +100 209.847 +150 239.053 +200 217.419 +250 199.03 +300 188.214 +350 180.642 +400 88.6983 +450 0 +500 0 +550 0 +600 0 +650 0 +700 0 +750 0 +800 0 +850 0 +900 0 +950 0 +1000 0 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 000000000..8b1809d78 --- /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 000000000..1d5ec9ef4 --- /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/pip9_cex.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_cex/pip9_cex.txt new file mode 100644 index 000000000..7d5b36c6e --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_cex/pip9_cex.txt @@ -0,0 +1,25 @@ +## pi+ -> be-9 +## File generated by MakeTextFiles.cxx +## KE cex_xs +100. 45. +0 4.45651 +50 16.0434 +100 57.3462 +150 65.3274 +200 59.4154 +250 54.3902 +300 51.4342 +350 49.365 +400 24.2391 +450 0 +500 0 +550 0 +600 0 +650 0 +700 0 +750 0 +800 0 +850 0 +900 0 +950 0 +1000 0 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 000000000..54aa5f1af --- /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/ExtrapFromMash_Inelas.C b/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/ExtrapFromMash_Inelas.C new file mode 100644 index 000000000..e32611fe5 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/ExtrapFromMash_Inelas.C @@ -0,0 +1,40 @@ +{ +#include + double xs1[21] = { + 12.54, + 573, + 715, + 522.8, + 359.2, + 430.3, + 408.1, + 401.4, + 399.9, + 393.9, + 384, + 371, + 356.5, + 351.5, + 345.5, + 340.5, + 338, + 339, + 342, + 346, + 349.5 + } + double xs2; + double ke; + double A1 = 56; + double A2[9] = { 1, 7, 14, 40, 63, 93, 120, 208, 209 }; + for (int j=0; j<9; j++) { + cout << endl; + cout << setw(4) << "A" << setw(5) << "KE" << " " << "XSec" << endl; + for (int i=0; i<21; i++) { + xs2 = TMath::Power((A2[j]/A1),(.6667)) * xs1[i]; + ke = 50 * i; + cout << setw(4) << A2[j] << setw(5) << ke << ". " << setw(5) << xs2 << endl; + } + } + +} 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 000000000..a766a054e --- /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/al_inelas_smooth.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/al_inelas_smooth.txt new file mode 100644 index 000000000..4bd7c705c --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/al_inelas_smooth.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/aniol-pip-c-inelas.dat b/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/aniol-pip-c-inelas.dat new file mode 100644 index 000000000..b1baec34b --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/aniol-pip-c-inelas.dat @@ -0,0 +1,4 @@ +#KE Inelas Sig +67 71 8 +85 108 11 +100 146 13 diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/aniol-pip-ca-inelas.dat b/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/aniol-pip-ca-inelas.dat new file mode 100644 index 000000000..191a45a48 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/aniol-pip-ca-inelas.dat @@ -0,0 +1,4 @@ +#KE Inelas Sig +67 159 19 +85 228 25 +100 288 26 diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/aniol-pip-pb-inelas.dat b/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/aniol-pip-pb-inelas.dat new file mode 100644 index 000000000..7f0bd4af3 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/aniol-pip-pb-inelas.dat @@ -0,0 +1,4 @@ +#KE Inelas Sig +67 246 33 +85 319 35 +100 416 38 diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/aniol-pip-sn-inelas.dat b/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/aniol-pip-sn-inelas.dat new file mode 100644 index 000000000..5fad640d1 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/aniol-pip-sn-inelas.dat @@ -0,0 +1,4 @@ +#KE Inelas Sig +67 203 25 +85 278 31 +100 364 36 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 000000000..554e72b9d --- /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/ar_inelas_smooth.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/ar_inelas_smooth.txt new file mode 100644 index 000000000..bcba698b1 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/ar_inelas_smooth.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/ashery-pip-al-inelas.dat b/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/ashery-pip-al-inelas.dat new file mode 100644 index 000000000..35004fced --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/ashery-pip-al-inelas.dat @@ -0,0 +1,8 @@ +# 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. +245 296. 62. +315 307. 54. diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/ashery-pip-bi-inelas.dat b/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/ashery-pip-bi-inelas.dat new file mode 100644 index 000000000..a69a86b08 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/ashery-pip-bi-inelas.dat @@ -0,0 +1,7 @@ +# Data at 85 MeV omitted in favor of Aniol data +# KE Inelas Sig +125 1257. 535. +165 696. 500. +205 1060. 440. +245 1100. 390. +315 1028. 380. diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/ashery-pip-c-inelas.dat b/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/ashery-pip-c-inelas.dat new file mode 100644 index 000000000..6d1ee8d91 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/ashery-pip-c-inelas.dat @@ -0,0 +1,8 @@ +# 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. +245 224. 30. +315 200. 22. diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/ashery-pip-fe-inelas.dat b/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/ashery-pip-fe-inelas.dat new file mode 100644 index 000000000..06a98b19c --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/ashery-pip-fe-inelas.dat @@ -0,0 +1,8 @@ +# 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. +245 430. 110. +315 389. 100. diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/ashery-pip-li-inelas.dat b/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/ashery-pip-li-inelas.dat new file mode 100644 index 000000000..b2f98c936 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/ashery-pip-li-inelas.dat @@ -0,0 +1,8 @@ +# 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. +245 209. 19. +315 188. 34. diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/ashery-pip-nb-inelas.dat b/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/ashery-pip-nb-inelas.dat new file mode 100644 index 000000000..1e44752fd --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/ashery-pip-nb-inelas.dat @@ -0,0 +1,8 @@ +# 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. +245 690. 240. +315 579. 220. 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 000000000..b5f3cd768 --- /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/bi_inelas_smooth.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/bi_inelas_smooth.txt new file mode 100644 index 000000000..bf34bfb67 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/bi_inelas_smooth.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/c_inelas_combined.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/c_inelas_combined.txt new file mode 100644 index 000000000..be3c23c2a --- /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/c_inelas_smooth.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/c_inelas_smooth.txt new file mode 100644 index 000000000..4bd7172a4 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/c_inelas_smooth.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/extrapFromMash_Inelas.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/extrapFromMash_Inelas.txt new file mode 100644 index 000000000..c15eab6e0 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/extrapFromMash_Inelas.txt @@ -0,0 +1,207 @@ + + A KE XSec + 1 0. 0.856605 + 1 50. 39.1415 + 1 100. 48.8415 + 1 150. 35.7124 + 1 200. 24.5369 + 1 250. 29.3937 + 1 300. 27.8772 + 1 350. 27.4196 + 1 400. 27.3171 + 1 450. 26.9072 + 1 500. 26.231 + 1 550. 25.3429 + 1 600. 24.3524 + 1 650. 24.0109 + 1 700. 23.601 + 1 750. 23.2595 + 1 800. 23.0887 + 1 850. 23.157 + 1 900. 23.362 + 1 950. 23.6352 + 1 1000. 23.8743 + + A KE XSec + 7 0. 3.13478 + 7 50. 143.24 + 7 100. 178.738 + 7 150. 130.691 + 7 200. 89.7938 + 7 250. 107.568 + 7 300. 102.018 + 7 350. 100.343 + 7 400. 99.9681 + 7 450. 98.4682 + 7 500. 95.9933 + 7 550. 92.7436 + 7 600. 89.1188 + 7 650. 87.8689 + 7 700. 86.369 + 7 750. 85.1191 + 7 800. 84.4941 + 7 850. 84.7441 + 7 900. 85.4941 + 7 950. 86.494 + 7 1000. 87.3689 + + A KE XSec + 14 0. 4.97627 + 14 50. 227.385 + 14 100. 283.735 + 14 150. 207.464 + 14 200. 142.542 + 14 250. 170.757 + 14 300. 161.947 + 14 350. 159.288 + 14 400. 158.693 + 14 450. 156.312 + 14 500. 152.383 + 14 550. 147.225 + 14 600. 141.471 + 14 650. 139.486 + 14 700. 137.105 + 14 750. 135.121 + 14 800. 134.129 + 14 850. 134.526 + 14 900. 135.717 + 14 950. 137.304 + 14 1000. 138.693 + + A KE XSec + 40 0. 10.0201 + 40 50. 457.858 + 40 100. 571.324 + 40 150. 417.746 + 40 200. 287.02 + 40 250. 343.833 + 40 300. 326.094 + 40 350. 320.741 + 40 400. 319.542 + 40 450. 314.748 + 40 500. 306.837 + 40 550. 296.449 + 40 600. 284.863 + 40 650. 280.868 + 40 700. 276.073 + 40 750. 272.078 + 40 800. 270.08 + 40 850. 270.879 + 40 900. 273.277 + 40 950. 276.473 + 40 1000. 279.27 + + A KE XSec + 63 0. 13.5644 + 63 50. 619.809 + 63 100. 773.409 + 63 150. 565.508 + 63 200. 388.544 + 63 250. 465.452 + 63 300. 441.438 + 63 350. 434.191 + 63 400. 432.568 + 63 450. 426.078 + 63 500. 415.37 + 63 550. 401.308 + 63 600. 385.623 + 63 650. 380.215 + 63 700. 373.724 + 63 750. 368.316 + 63 800. 365.612 + 63 850. 366.693 + 63 900. 369.938 + 63 950. 374.265 + 63 1000. 378.051 + + A KE XSec + 93 0. 17.586 + 93 50. 803.573 + 93 100. 1002.71 + 93 150. 733.173 + 93 200. 503.741 + 93 250. 603.451 + 93 300. 572.318 + 93 350. 562.922 + 93 400. 560.818 + 93 450. 552.404 + 93 500. 538.52 + 93 550. 520.289 + 93 600. 499.954 + 93 650. 492.942 + 93 700. 484.528 + 93 750. 477.516 + 93 800. 474.01 + 93 850. 475.412 + 93 900. 479.619 + 93 950. 485.229 + 93 1000. 490.137 + + A KE XSec + 120 0. 20.8435 + 120 50. 952.418 + 120 100. 1188.45 + 120 150. 868.978 + 120 200. 597.048 + 120 250. 715.228 + 120 300. 678.328 + 120 350. 667.192 + 120 400. 664.698 + 120 450. 654.725 + 120 500. 638.27 + 120 550. 616.662 + 120 600. 592.561 + 120 650. 584.25 + 120 700. 574.277 + 120 750. 565.966 + 120 800. 561.811 + 120 850. 563.473 + 120 900. 568.459 + 120 950. 575.108 + 120 1000. 580.925 + + A KE XSec + 208 0. 30.0769 + 208 50. 1374.33 + 208 100. 1714.91 + 208 150. 1253.92 + 208 200. 861.534 + 208 250. 1032.07 + 208 300. 978.819 + 208 350. 962.749 + 208 400. 959.152 + 208 450. 944.761 + 208 500. 921.016 + 208 550. 889.836 + 208 600. 855.058 + 208 650. 843.065 + 208 700. 828.674 + 208 750. 816.682 + 208 800. 810.686 + 208 850. 813.084 + 208 900. 820.28 + 208 950. 829.874 + 208 1000. 838.268 + + A KE XSec + 209 0. 30.1733 + 209 50. 1378.73 + 209 100. 1720.4 + 209 150. 1257.94 + 209 200. 864.293 + 209 250. 1035.37 + 209 300. 981.954 + 209 350. 965.833 + 209 400. 962.224 + 209 450. 947.787 + 209 500. 923.966 + 209 550. 892.686 + 209 600. 857.796 + 209 650. 845.765 + 209 700. 831.328 + 209 750. 819.298 + 209 800. 813.282 + 209 850. 815.688 + 209 900. 822.907 + 209 950. 832.531 + 209 1000. 840.953 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 000000000..c35b4cddf --- /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/fe_inelas_smooth.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/fe_inelas_smooth.txt new file mode 100644 index 000000000..5e9f14a8c --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/fe_inelas_smooth.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/he3_inelas_combined.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/he3_inelas_combined.txt new file mode 100644 index 000000000..ef82f2a7d --- /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/he3_inelas_smooth.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/he3_inelas_smooth.txt new file mode 100644 index 000000000..3d923e78d --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/he3_inelas_smooth.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/incl-pip-al-inelas.dat b/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/incl-pip-al-inelas.dat new file mode 100644 index 000000000..2e481bdf3 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/incl-pip-al-inelas.dat @@ -0,0 +1,7 @@ +# results from INCLv5 program - mar, 2025 - sd, mi +# to be used for hA2025 at low energy +#KE xs +1 .05 +5 .23 +20 14.8 +50 105.5 diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/incl-pip-ar-inelas.dat b/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/incl-pip-ar-inelas.dat new file mode 100644 index 000000000..4ba7fa0fe --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/incl-pip-ar-inelas.dat @@ -0,0 +1,7 @@ +# results from INCLv5 program - mar, 2025 - sd, mi +# to be used for hA2025 at low energy +#KE xs +1 .01 +5 .38 +20 29.2 +50 156.4 diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/incl-pip-bi-inelas.dat b/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/incl-pip-bi-inelas.dat new file mode 100644 index 000000000..556a7c9b8 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/incl-pip-bi-inelas.dat @@ -0,0 +1,7 @@ +# results from INCLv5 program - mar, 2025 - sd, mi +# to be used for hA2025 at low energy +#KE xs +1 0 +5 0 +20 22.9 +50 273.5 diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/incl-pip-c-inelas.dat b/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/incl-pip-c-inelas.dat new file mode 100644 index 000000000..bfc2e1f1e --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/incl-pip-c-inelas.dat @@ -0,0 +1,7 @@ +# results from INCLv5 program - mar, 2025 - sd, mi +# to be used for hA2025 at low energy +#KE xs +1 0 +4 0 +20 0.3 +50 27.6 diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/incl-pip-fe-inelas.dat b/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/incl-pip-fe-inelas.dat new file mode 100644 index 000000000..9d13d81f2 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/incl-pip-fe-inelas.dat @@ -0,0 +1,7 @@ +# results from INCLv5 program - mar, 2025 - sd, mi +# to be used for hA2025 at low energy +#KE xs +1 0 +5 0.04 +20 21.8 +50 159.5 diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/incl-pip-he3-inelas.dat b/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/incl-pip-he3-inelas.dat new file mode 100644 index 000000000..d34162605 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/incl-pip-he3-inelas.dat @@ -0,0 +1,7 @@ +# results from INCLv5 program - mar, 2025 - sd, mi +# to be used for hA2025 at low energy +#KE xs +1 0 +5 0 +20 0 +50 5 diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/incl-pip-li-inelas.dat b/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/incl-pip-li-inelas.dat new file mode 100644 index 000000000..993fb8c50 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/incl-pip-li-inelas.dat @@ -0,0 +1,7 @@ +# results from INCLv5 program - mar, 2025 - sd, mi +# to be used for hA2025 at low energy +#KE xs +1 .01 +5 .21 +20 8.7 +50 73.5 diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/incl-pip-nb-inelas.dat b/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/incl-pip-nb-inelas.dat new file mode 100644 index 000000000..1a8679867 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/incl-pip-nb-inelas.dat @@ -0,0 +1,7 @@ +# results from INCLv5 program - mar, 2025 - sd, mi +# to be used for hA2025 at low energy +#KE xs +1 0 +5 0 +20 34 +50 209.4 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 000000000..2cd246865 --- /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/li_inelas_smooth.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/li_inelas_smooth.txt new file mode 100644 index 000000000..6c4f052fb --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/li_inelas_smooth.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/mashnik-pip-fe-inelas.dat b/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/mashnik-pip-fe-inelas.dat new file mode 100644 index 000000000..4d21dd105 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/mashnik-pip-fe-inelas.dat @@ -0,0 +1,26 @@ +#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# Mashnik's calculation on pi+Fe x-sections +# Hadron kinetic energy (KE) in MeV, x-section in millibarns +#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +#KE Inelas +0.00 0. +50.00 109.87 +100.00 140.69 +150.00 127.47 +200.00 94.86 +250.00 78.58 +300.00 69.51 +350.00 65.9 +400.00 65.15 +450.00 65.77 +500.00 66.82 +550.00 64.25 +600.00 57.57 +650.00 50.42 +700.00 46.29 +750.00 45.43 +800.00 46.03 +850.00 46.23 +900.00 44.94 +950.00 42.9 +1000.00 41.27 diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/mashnikforextrap-pip-fe-inelas.dat b/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/mashnikforextrap-pip-fe-inelas.dat new file mode 100644 index 000000000..1e604d523 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/mashnikforextrap-pip-fe-inelas.dat @@ -0,0 +1,24 @@ +# KE is lab energy in MeV, cross sections in lab in units of mb +# KE Inelas +# Fate = 3 +#0.00 0. +#50.00 109.87 +100.00 140.69 +150.00 127.47 +200.00 94.86 +250.00 78.58 +300.00 69.51 +350.00 65.9 +400.00 65.15 +450.00 65.77 +500.00 66.82 +550.00 64.25 +600.00 57.57 +650.00 50.42 +700.00 46.29 +750.00 45.43 +800.00 46.03 +850.00 46.23 +900.00 44.94 +950.00 42.9 +1000.00 41.27 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 000000000..a5fba324c --- /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/nb_inelas_smooth.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/nb_inelas_smooth.txt new file mode 100644 index 000000000..f3dcc9466 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/nb_inelas_smooth.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_inelas/pip120_inelas.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/pip120_inelas.txt new file mode 100644 index 000000000..6b0962250 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/pip120_inelas.txt @@ -0,0 +1,27 @@ +## pi+ -> sn-120 +## File generated by MakeTextFiles.cxx +## KE inelas_xs +67 203 +85 278 +100 364 +0 50.2377 +50 115.547 +100 233.844 +150 211.87 +200 157.669 +250 130.609 +300 115.534 +350 109.534 +400 108.287 +450 109.318 +500 111.063 +550 106.791 +600 95.6882 +650 83.804 +700 76.9395 +750 75.5101 +800 76.5073 +850 76.8398 +900 74.6956 +950 71.3049 +1000 68.5957 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 000000000..4bd7172a4 --- /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/pip165_inelas.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/pip165_inelas.txt new file mode 100644 index 000000000..3c121771b --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/pip165_inelas.txt @@ -0,0 +1,24 @@ +## pi+ -> ho-165 +## File generated by MakeTextFiles.cxx +## KE inelas_xs +0 57.0625 +50 131.244 +100 289.153 +150 261.982 +200 194.961 +250 161.501 +300 142.86 +350 135.441 +400 133.899 +450 135.174 +500 137.332 +550 132.05 +600 118.321 +650 103.626 +700 95.1374 +750 93.3699 +800 94.603 +850 95.0141 +900 92.3628 +950 88.1701 +1000 84.82 diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/pip16_inelas.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/pip16_inelas.txt new file mode 100644 index 000000000..0f100d8d9 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/pip16_inelas.txt @@ -0,0 +1,24 @@ +## pi+ -> o-16 +## File generated by MakeTextFiles.cxx +## KE inelas_xs +0 22.4391 +50 51.6099 +100 61.0311 +150 55.2963 +200 41.1501 +250 34.0879 +300 30.1533 +350 28.5873 +400 28.262 +450 28.5309 +500 28.9864 +550 27.8715 +600 24.9738 +650 21.8721 +700 20.0805 +750 19.7075 +800 19.9677 +850 20.0545 +900 19.4949 +950 18.61 +1000 17.9029 diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/pip181_inelas.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/pip181_inelas.txt new file mode 100644 index 000000000..84f2086ae --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/pip181_inelas.txt @@ -0,0 +1,24 @@ +## pi+ -> ta-181 +## File generated by MakeTextFiles.cxx +## KE inelas_xs +0 59.2146 +50 136.194 +100 307.556 +150 278.656 +200 207.369 +250 171.78 +300 151.952 +350 144.061 +400 142.421 +450 143.777 +500 146.072 +550 140.454 +600 125.851 +650 110.221 +700 101.192 +750 99.3123 +800 100.624 +850 101.061 +900 98.2411 +950 93.7816 +1000 90.2183 diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/pip1_inelas.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/pip1_inelas.txt new file mode 100644 index 000000000..937e9029e --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/pip1_inelas.txt @@ -0,0 +1,24 @@ +## pi+ -> h-1 +## File generated by MakeTextFiles.cxx +## KE inelas_xs +0 7.40214 +50 17.0249 +100 9.6118 +150 8.70862 +200 6.48074 +250 5.3685 +300 4.74885 +350 4.50222 +400 4.45098 +450 4.49334 +500 4.56507 +550 4.38949 +600 3.93312 +650 3.44464 +700 3.16249 +750 3.10373 +800 3.14472 +850 3.15839 +900 3.07025 +950 2.93088 +1000 2.81952 diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/pip208_inelas.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/pip208_inelas.txt new file mode 100644 index 000000000..64fdeb902 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/pip208_inelas.txt @@ -0,0 +1,6 @@ +## pi+ -> pb-208 +## File generated by MakeTextFiles.cxx +## KE inelas_xs +67 246 +85 319 +100 416 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 000000000..bf34bfb67 --- /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 000000000..4bd7c705c --- /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/pip2_inelas.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/pip2_inelas.txt new file mode 100644 index 000000000..1c7d43278 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/pip2_inelas.txt @@ -0,0 +1,24 @@ +## pi+ -> d-2 +## File generated by MakeTextFiles.cxx +## KE inelas_xs +0 9.76719 +50 22.4645 +100 15.2578 +150 13.8241 +200 10.2875 +250 8.52197 +300 7.53833 +350 7.14683 +400 7.06549 +450 7.13273 +500 7.2466 +550 6.96789 +600 6.24344 +650 5.46803 +700 5.02013 +750 4.92687 +800 4.99194 +850 5.01363 +900 4.87373 +950 4.65249 +1000 4.47572 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 000000000..3d923e78d --- /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 000000000..bcba698b1 --- /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/pip48_inelas.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/pip48_inelas.txt new file mode 100644 index 000000000..c4beb9dd9 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/pip48_inelas.txt @@ -0,0 +1,24 @@ +## pi+ -> ti-48 +## File generated by MakeTextFiles.cxx +## KE inelas_xs +0 34.822 +50 80.0907 +100 126.95 +150 115.021 +200 85.5957 +250 70.9056 +300 62.7215 +350 59.464 +400 58.7873 +450 59.3467 +500 60.2942 +550 57.9752 +600 51.9475 +650 45.4958 +700 41.7692 +750 40.9932 +800 41.5346 +850 41.715 +900 40.551 +950 38.7103 +1000 37.2395 diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/pip4_inelas.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/pip4_inelas.txt new file mode 100644 index 000000000..8246d1bbc --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/pip4_inelas.txt @@ -0,0 +1,24 @@ +## pi+ -> he-4 +## File generated by MakeTextFiles.cxx +## KE inelas_xs +0 12.8879 +50 29.6421 +100 24.2202 +150 21.9443 +200 16.3304 +250 13.5278 +300 11.9664 +350 11.3449 +400 11.2158 +450 11.3225 +500 11.5033 +550 11.0608 +600 9.91085 +650 8.67996 +700 7.96896 +750 7.82091 +800 7.9242 +850 7.95863 +900 7.73656 +950 7.38536 +1000 7.10476 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 000000000..5e9f14a8c --- /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/pip58_inelas.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/pip58_inelas.txt new file mode 100644 index 000000000..d25473981 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/pip58_inelas.txt @@ -0,0 +1,24 @@ +## pi+ -> ni-58 +## File generated by MakeTextFiles.cxx +## KE inelas_xs +0 37.5603 +50 86.3886 +100 144.02 +150 130.487 +200 97.1053 +250 80.44 +300 71.1553 +350 67.4599 +400 66.6921 +450 67.3268 +500 68.4016 +550 65.7708 +600 58.9327 +650 51.6134 +700 47.3857 +750 46.5053 +800 47.1195 +850 47.3243 +900 46.0037 +950 43.9154 +1000 42.2469 diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/pip63_inelas.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/pip63_inelas.txt new file mode 100644 index 000000000..b52870950 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/pip63_inelas.txt @@ -0,0 +1,24 @@ +## pi+ -> cu-63 +## File generated by MakeTextFiles.cxx +## KE inelas_xs +0 38.8234 +50 89.2939 +100 152.183 +150 137.883 +200 102.609 +250 84.999 +300 75.1881 +350 71.2832 +400 70.4719 +450 71.1426 +500 72.2783 +550 69.4984 +600 62.2727 +650 54.5387 +700 50.0713 +750 49.141 +800 49.7901 +850 50.0064 +900 48.611 +950 46.4044 +1000 44.6412 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 000000000..6c4f052fb --- /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 000000000..f3dcc9466 --- /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_inelas/pip9_inelas.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/pip9_inelas.txt new file mode 100644 index 000000000..80d40f617 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/pip9_inelas.txt @@ -0,0 +1,24 @@ +## pi+ -> be-9 +## File generated by MakeTextFiles.cxx +## KE inelas_xs +0 17.826 +50 40.9999 +100 41.5878 +150 37.68 +200 28.0405 +250 23.2282 +300 20.5471 +350 19.48 +400 19.2583 +450 19.4415 +500 19.7519 +550 18.9922 +600 17.0176 +650 14.9041 +700 13.6833 +750 13.4291 +800 13.6064 +850 13.6655 +900 13.2842 +950 12.6812 +1000 12.1994 diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/various-pip-c-inelas.dat b/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/various-pip-c-inelas.dat new file mode 100644 index 000000000..25b421464 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_inelas/various-pip-c-inelas.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 20 +50.0 46 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 000000000..f45555d11 --- /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/al_pipro_smooth.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_pipro/al_pipro_smooth.txt new file mode 100644 index 000000000..e7fa2503b --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_pipro/al_pipro_smooth.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/bi_pipro_combined.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_pipro/bi_pipro_combined.txt new file mode 100644 index 000000000..bdcefbe6a --- /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/bi_pipro_smooth.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_pipro/bi_pipro_smooth.txt new file mode 100644 index 000000000..bc0a5ff66 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_pipro/bi_pipro_smooth.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/c_pipro_combined.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_pipro/c_pipro_combined.txt new file mode 100644 index 000000000..cb7ba7d44 --- /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/c_pipro_smooth.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_pipro/c_pipro_smooth.txt new file mode 100644 index 000000000..b89208417 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_pipro/c_pipro_smooth.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/fe_pipro_combined.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_pipro/fe_pipro_combined.txt new file mode 100644 index 000000000..801f8e912 --- /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/fe_pipro_smooth.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_pipro/fe_pipro_smooth.txt new file mode 100644 index 000000000..ba1dac6d4 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_pipro/fe_pipro_smooth.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/li_pipro_combined.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_pipro/li_pipro_combined.txt new file mode 100644 index 000000000..560b8472c --- /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/li_pipro_smooth.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_pipro/li_pipro_smooth.txt new file mode 100644 index 000000000..b3ce0cba1 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_pipro/li_pipro_smooth.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/mashnik-pip-fe-pipro.dat b/data/evgen/intranuke/tot_xsec/2025/pipA_pipro/mashnik-pip-fe-pipro.dat new file mode 100644 index 000000000..5c5ec12d4 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_pipro/mashnik-pip-fe-pipro.dat @@ -0,0 +1,18 @@ +#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# Mashnik's calculation on pi+Fe x-sections +# Hadron kinetic energy (KE) in MeV, x-section in millibarns +#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +#KE PiPro +400.00 82. +450.00 170. +500.00 184. +550.00 204. +600.00 227. +650.00 252. +700.00 279. +750.00 304. +800.00 324. +850.00 337. +900.00 346. +950.00 353. +1000.00 361. diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_pipro/mashnikforextrap-pip-fe-pipro.dat b/data/evgen/intranuke/tot_xsec/2025/pipA_pipro/mashnikforextrap-pip-fe-pipro.dat new file mode 100644 index 000000000..1a87d7ee9 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_pipro/mashnikforextrap-pip-fe-pipro.dat @@ -0,0 +1,24 @@ +# KE is lab energy in MeV, cross sections in lab in units of mb +# KE PiPro +# Fate = 5 +#0.00 0. +#50.00 0. +100.00 0. +150.00 0. +200.00 0. +250.00 0. +300.00 0. +350.00 0. +400.00 82. +450.00 170. +500.00 184. +550.00 204. +600.00 227. +650.00 252. +700.00 279. +750.00 304. +800.00 324. +850.00 337. +900.00 346. +950.00 353. +1000.00 361. 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 000000000..e37e450fa --- /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/nb_pipro_smooth.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_pipro/nb_pipro_smooth.txt new file mode 100644 index 000000000..4bbfbb006 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_pipro/nb_pipro_smooth.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_pipro/pip120_pipro.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_pipro/pip120_pipro.txt new file mode 100644 index 000000000..6e21d26e2 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_pipro/pip120_pipro.txt @@ -0,0 +1,24 @@ +## pi+ -> sn-120 +## 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 136.294 +450 282.56 +500 305.83 +550 339.072 +600 377.301 +650 418.854 +700 463.731 +750 505.284 +800 538.527 +850 560.134 +900 575.093 +950 586.728 +1000 600.025 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 000000000..b89208417 --- /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/pip165_pipro.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_pipro/pip165_pipro.txt new file mode 100644 index 000000000..766dc1f8b --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_pipro/pip165_pipro.txt @@ -0,0 +1,24 @@ +## pi+ -> ho-165 +## 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 168.53 +450 349.392 +500 378.165 +550 419.27 +600 466.541 +650 517.922 +700 573.414 +750 624.795 +800 665.9 +850 692.618 +900 711.115 +950 725.502 +1000 741.944 diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_pipro/pip16_pipro.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_pipro/pip16_pipro.txt new file mode 100644 index 000000000..475c8a85d --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_pipro/pip16_pipro.txt @@ -0,0 +1,24 @@ +## pi+ -> o-16 +## 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 35.5715 +450 73.7457 +500 79.8189 +550 88.4949 +600 98.4722 +650 109.317 +700 121.03 +750 131.875 +800 140.551 +850 146.19 +900 150.094 +950 153.131 +1000 156.601 diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_pipro/pip181_pipro.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_pipro/pip181_pipro.txt new file mode 100644 index 000000000..2d06c259a --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_pipro/pip181_pipro.txt @@ -0,0 +1,24 @@ +## pi+ -> ta-181 +## 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 179.256 +450 371.629 +500 402.233 +550 445.954 +600 496.234 +650 550.885 +700 609.908 +750 664.56 +800 708.281 +850 736.699 +900 756.374 +950 771.676 +1000 789.165 diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_pipro/pip1_pipro.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_pipro/pip1_pipro.txt new file mode 100644 index 000000000..ee4978f7f --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_pipro/pip1_pipro.txt @@ -0,0 +1,24 @@ +## pi+ -> h-1 +## 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 5.60216 +450 11.6142 +500 12.5707 +550 13.9371 +600 15.5084 +650 17.2164 +700 19.061 +750 20.769 +800 22.1353 +850 23.0235 +900 23.6384 +950 24.1166 +1000 24.6631 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 000000000..bc0a5ff66 --- /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 000000000..e7fa2503b --- /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/pip2_pipro.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_pipro/pip2_pipro.txt new file mode 100644 index 000000000..7ca899d86 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_pipro/pip2_pipro.txt @@ -0,0 +1,24 @@ +## pi+ -> d-2 +## 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 8.89287 +450 18.4364 +500 19.9547 +550 22.1237 +600 24.6181 +650 27.3293 +700 30.2574 +750 32.9687 +800 35.1377 +850 36.5475 +900 37.5236 +950 38.2827 +1000 39.1503 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 000000000..0d83cb0a3 --- /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/pip48_pipro.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_pipro/pip48_pipro.txt new file mode 100644 index 000000000..cd9065d96 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_pipro/pip48_pipro.txt @@ -0,0 +1,24 @@ +## pi+ -> ti-48 +## 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 73.9916 +450 153.397 +500 166.03 +550 184.077 +600 204.831 +650 227.389 +700 251.752 +750 274.31 +800 292.357 +850 304.088 +900 312.209 +950 318.525 +1000 325.744 diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_pipro/pip4_pipro.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_pipro/pip4_pipro.txt new file mode 100644 index 000000000..08ce41d97 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_pipro/pip4_pipro.txt @@ -0,0 +1,24 @@ +## pi+ -> he-4 +## 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 14.1165 +450 29.266 +500 31.6762 +550 35.1192 +600 39.0787 +650 43.3826 +700 48.0307 +750 52.3345 +800 55.7776 +850 58.0156 +900 59.5649 +950 60.77 +1000 62.1472 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 000000000..ba1dac6d4 --- /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/pip58_pipro.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_pipro/pip58_pipro.txt new file mode 100644 index 000000000..e0019c381 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_pipro/pip58_pipro.txt @@ -0,0 +1,24 @@ +## pi+ -> ni-58 +## 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 83.9409 +450 174.024 +500 188.355 +550 208.829 +600 232.373 +650 257.965 +700 285.604 +750 311.196 +800 331.669 +850 344.977 +900 354.19 +950 361.356 +1000 369.545 diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_pipro/pip63_pipro.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_pipro/pip63_pipro.txt new file mode 100644 index 000000000..5ac236bab --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_pipro/pip63_pipro.txt @@ -0,0 +1,24 @@ +## pi+ -> cu-63 +## 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 88.6983 +450 183.887 +500 199.03 +550 220.664 +600 245.543 +650 272.585 +700 301.791 +750 328.833 +800 350.467 +850 364.529 +900 374.264 +950 381.836 +1000 390.489 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 000000000..b3ce0cba1 --- /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 000000000..4bbfbb006 --- /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_pipro/pip9_pipro.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_pipro/pip9_pipro.txt new file mode 100644 index 000000000..bcd98e4a9 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_pipro/pip9_pipro.txt @@ -0,0 +1,24 @@ +## pi+ -> be-9 +## 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 24.2391 +450 50.2518 +500 54.3902 +550 60.3022 +600 67.101 +650 74.491 +700 82.4721 +750 89.8621 +800 95.7741 +850 99.6169 +900 102.277 +950 104.346 +1000 106.711 diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_pipro/various-pip-c-pipro.dat b/data/evgen/intranuke/tot_xsec/2025/pipA_pipro/various-pip-c-pipro.dat new file mode 100644 index 000000000..d0e7ce21f --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_pipro/various-pip-c-pipro.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 0.0 +50.0 0.0 diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_tot/ExtrapFromMash_Tot.C b/data/evgen/intranuke/tot_xsec/2025/pipA_tot/ExtrapFromMash_Tot.C new file mode 100644 index 000000000..836db5582 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_tot/ExtrapFromMash_Tot.C @@ -0,0 +1,39 @@ +{ + #include + double xs1[21] = { + 0.2762E+02, + 0.1381E+04, + 0.1945E+04, + 0.1879E+04, + 0.1757E+04, + 0.1595E+04, + 0.1445E+04, + 0.1288E+04, + 0.1218E+04, + 0.1159E+04, + 0.1111E+04, + 0.1072E+04, + 0.1042E+04, + 0.1019E+04, + 0.1003E+04, + 0.9927E+03, + 0.9874E+03, + 0.9865E+03, + 0.9894E+03, + 0.9956E+03, + 0.1004E+04 + } + double xs2; + double ke; + double A1 = 56; + double A2[9] = { 1, 7, 14, 40, 63, 93, 120, 208, 209 }; + for (int j=0; j<9; j++) { + cout << endl; + cout << setw(4) << "A" << setw(5) << "KE" << " " << "TotXS" << endl; + for (int i=0; i<21; i++) { + xs2 = TMath::Power((A2[j]/A1),(.6667)) * xs1[i]; + ke = 50 * i; + cout << setw(4) << A2[j] << setw(5) << ke << ". " << setw(5) << xs2 << endl; + } + } +} diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_tot/TPipA_Tot.png b/data/evgen/intranuke/tot_xsec/2025/pipA_tot/TPipA_Tot.png new file mode 100644 index 0000000000000000000000000000000000000000..e29a9fc1688af8046f79ec92bb7584e26c70d03d GIT binary patch literal 10755 zcmb_?c|26@|M#&oVN}*)P5BTL8xTZU z3qcfv^pxO?U?U?Ae9&5Gs9ge|;Mh`W2!J3y=*lIfo1Q6)M6sx|BVL^2mDQ9+R2~s_ zZ_b27-0`^wdwzrQ#Q1liy zLl%OfdON|X<<_kD`1rNEaTqF+^$GU|VwW)#sB!N?GE4JDbah?dORWT&rq~2;2s*~Y zt0R2{jb7pFTqT&^qpT2;_=~DZGDRU%8;y>`=*OLFJc`qF#&^VGxW?**2g-M;$ z`W+^Ym9(o{JL~(x5a*Y~2hG0nrb6s$$?TD>$x;hSH_@+e3ssNY+kG32B|6k(?Rro& zky4H#V=;*iHI+m5bw;HF^HcW|uiY-Wb#iCt<%#4W`&-LDY+uXBd2PKMvX4V>PvZ_j zrPC?gA+FZO!tts)Et7Jck(ufj_c8iy7`BtFvT@U1XtdZ@L4x?MN+wohdeuwLrTq3g z1!&wkMK1G6=$Lio&?r$d_?1c7B&Uk))dEJ+PT<-JA1*2%FIv)c?xo-av94}xZcjI# zl6SVxItDc(mJc;eN_$=6XA6;bbDTAd{V z>{a=6)aM>jlaS_hMoDT=;OXfYWUoTO!18M~z2gWsSMJP6jc%It%;2m^)sD@G#rbS{jh2OZOt*t#(V}L}(YJ?{kp)ZFYP(oe#Vcaxx-;j_flbG7uaBxCB z9fBlf8s{=FC)L36<7Qy(-l=z@fDlH8JTzQh(2sF28hT6(gA`AaFK{sa$p7o9?a?lt z8T~kn0#ljsr=99mJO87ppO)ZIj8)A@2+OGT5PEECwn3`Cx_|~Y;FO$34Q)774*BkE zI?tG_ee9+BU+;f6=s|O5bI<4f&?OGY$XGuP+<-1p0-(y*S3Zqbz9`2nh;UN2Uk3`D z)i1df2JfE?U35>z==)6t_{>vNg^cbNE%>!d;I<0q?Uwf135i&WKw7OVniVswNf--z zq$+)e5FryeYQMWS+e4j)fW|3aVCsktaNZdBC#y=i&Q-az4y%j{Ke|S@rwAP2F=;Bj zX=s<-&5-NdV3w&)@`eH%I93_KqS|zL!dF;WIHkW>lBN*A{M?8HK^s%EYx{E_Dx&Db z%E$Aws2GgtSs^pCvb_EHn`kxxp5Yo%dtSM_{Mt~UY+UG33;y8Pump_0e%vAz!(vHi zXQ%nIi!iO%FM9Q$@eFPrRq69~=0OjF0-?Zm9ah!dB@;AS)5=IV-nq%_Lh`+ukv>~C z3C?cscb@(}^9>%$r#X?JbcB=O-SGuU%2(}$B2L8V6zZ9MvA=MxWVVi1-j|b4JHPPE zu7p*kz7DI8%U`Qoa<6j(uC(|2Jl(AZ8ecd7dT9&o^VXU!70wa-Pdr_1L5)YDjwsXhXFe$sOM( z+hbPR*8Hmj@N)w_HI70q(yZ3Vq$8Yg!^ylA!!mDmoo0s`js51>a{V&tmtS8-mq3b< z*eemyC3vBjsGO{3kJ%#yp}nU_`4oYpL>cXHkB!*0L~)7v=@jFbW6;b%2~~*n#NnET zXa+j5G%=%F;ACwm#Vu6JspNA4M$$LCZaNjT#>ARHftC(D$ZX6ZvE$C=x9w|2wtP)Y zXKthWPL($Y79k)r3kMm}lU(>$?{~HC629>TPFGO2(D<>o8;L73$e`j77UlIkV+{$n znqMNe5>VHBEj88~$R`oJ*$;2V$Z#9Nxp4N5G?2H{$Di-2=FAR*?%c`tVGRk zFbP2o{?hdG9k!5xFeOf0(Ct^ge>=vz4824N8FfMzVX8XWC^5L>s#of=d&8;$MW8=Z z+(*y%$LRPep)YNsJ}3zCFc%`6^y$5sSZ>LG8sbYdOXuT*0vk0&wa2x1BBcum)J~0Q zMq4Du*GC_4(?ID@6)B**e`y19WnhH@FH`<=O7iX0Qyp=BJ9|Q3ZaNh z|6%(J8tq=G?GLwn5%B(bH}8VAFW1xLwL}3_!YYh}iwYxZ)>$dC>q1>$N#(KRaD{EQ z4B1x`9rTLOzOO}08|hhV3l^3e*qw)WHF6RIeb(_KShU|az7U$Q!zv$dzFYNm%+Bz? zpE@n(st!t^=wZPTfT5hbd^9jIU4CZH;(>X&PPhd3ynMhOH+ev9o&xS`WZvPRsry`w zhd4m(Kv|ZDfTv2kzMXd6|HJ3O6QjQ>g^EN>1{d9(+xSzTPkVj5ZO?m6oz;jk@XDi; zbZ&xI>2b*o+5tOVtE(<70Grse1o4vljC3|p7=6UKTG!qQo1-b-+D;6CVMltHzpr{3 zL5UF}t>OIDx6o{cfJRHiMw}f{cMQ&Pb$V?q5vi$YC@3KKsnG>X6J>8vEk&Vt0^qe? z16EZ=p}7*9)|N0huOM&=3#_cDEQ9ox8w-!t8b3o(XwC{9~5t$fH zpmK>0166pm&snIe?Cl(~suBRA%`E#t^Qk15uv>8%1pRfCk(HVn>WX(hB|!;gogf2Q z%V~~6I3BzIFxt9sf?hNE@IRRT7tD`pTHSPFfVRcoDk>>Lke?VJCCLMhKP^pyYGSeb z%UIm^rKz-yy`-kcyJc{djdX#_|4|^o#R41j(0#u0ofSfaiY;G%&*q_$XIvEHjcBr< z?v5W>yg;ZRI>aO1S1c^_GejeIgyeX39cTP0n$Rss^9#v~?hPbw9$q1WI3imqh~({O zJD+zw4HTRm$v23<2ZEIg)HbUsJy;T(W(XAyz#~9rqBFzXWBzWip%*vuhq_Tn;+Yo z+4gevp<*P0>St!Qzq%$@pH;4ERPqEfH1Rd0u<%nP+v$Xl^iT|N0lAaw{v?Z zxnyz&Fd82<)Zw`d;h9K_8Er=*nRIQiQvi{tr8CpVk3eutMFGwxcO&RRY3F~MWr=$KCb%KjJzC>`53OOA2;N2LuvNgv)wXi+`Lu% z<8C#xXr^dd=lm4EC8g>y{<=G1XFVl{e(ewbvIEOCb7LTwZp}l*BVD8hp@SrdUj~)n zKCl6&3{5KVY*1H&AstNYwEFq{$V}h_W=jL!GwVT$%c1Xe!Yld295ay-aXh6-sUy8G zXl*9Iju4YGLulizCPJ81Rn}_PAM}%9orolEn@Ow@EiuagZQ3hV^+}2ZStnC*A3k z7EQcNza9iV`%OwS1W`8th6cVryb0bh4$mCHj!VSe|#ITClQp2|-w^B-9KQPX#W z-bbC0p!_dhCDZO_pfdwyUtst1csjpecP7z3lz$yS4*VEjLIa08<=()=4;)-3@~7PO z5{&*W^y`h-4y)(UK=^t)?5=?61p4U3P1(M_Y6_UQ)uP;_Ot)Cu5fzKk->n1c(Y;|U z95B<8VFVT6PI~k5+b#PgW6LV^l|w>2d7Ktx?Oa0^zRL7z@_tEX>Ez`YbFxD)n?HE! zzCN$Ay1+t*;3bNCJC&j-A;u-g=+4BnlbF-Fk3uDtUl|GG zJR{i+6twGbE5hgOIur8Kwg3eTU$M?Uh9hQ<`1$A57GdRQp)AXq%qDU$OhC6ZBWTc-o|i|x#t`}yk9RXE8`Ca znTP)`R4gD?TIw;A2_kN54kogVKl{c?O`);bj(M|_fgkV+AltIiA4x>xlcu&!0iVZ6 zdlApL>T)`)R#zt5H!tqRj9ELT20RMzgz*eWofgZ!`{Aav{o_MI0@7gZaob+EvbTK! z>X+m(vr7}tjLXM>vGkTyOm});ItX~tr&R3v&SIp3tlX2gxd^NCHcv16=`Gy!7cbd7 z(5W8theI^nTOG)nmHhj5=^)5aW;_-BCL?qKS0k9%kty|O-P^TFp+E%DdoF`eI>^Dy zCW*GPUpc9IoMJoyVA0sUwKUBsl;W%eWm5~|tGNsty@k~?mnonD7jVr(9<58GFvw`B z|0K+(!6L7l9*qBUM+x`VYiu0D8y{(FA1{%Ohwq(zmeK~FJM>c9i}j>%WgS*Qp>Sr8 z*3z1OoZRpk4+^N%IuMJ90L3X2+()i+@h-D6}&8eIoQNZPJj#tFZ4i7n}2lhXKEK#?~M*Ul?|x&`hKa4P43d3!C?Uh!XFp?n=uoz$S_&M z{Cyb&b5q()A?=i!nc>2X!dlcZDaNgnA#uge)~|izq-wVMj!Y~G7^iC z5ptdL0w1SWd+Uen*G-CY(7>^8ln4O{_oDHOLrr9>1=b|*Hb0@l+b#~%K-`ZxIbx_q zR&yFU&E8m(vVj#(fNUU<{Ra)=F!BAr1@fl8r_ANF`aD6Xeli4i#3YfhIyM4-hP;<&5A%Ib=p9SHx)W$k-*@lA;O(g_D7UmA_rqlyHM5rkY*#FkIeu(+tda>GrRi z%4Fq${nGXy44M=ndZvZCX^mC&DJ_)LlBp?{E&b8#uH(z!c1dNrBv6zriH?bD16l+R zdi|1QTIb}X;NwcN7|Y_%L(C;x3&bxZGC^y0uM{(Es`wBsj2~;wvV;f;xt~Xqe0^F? z6cWOOv(}1~#&$U#Hp+5u;AHijwpDTxm23CLx<;$R?n-^^RndhE;g0}ccR737=nh)nf%A7Sn@o4Fa|HzIiju@Kb$ zMUrgWugO%2prw5}7v353LfiLy6#1F>7y7Qfs{k6NS}#5JDFoF>#eIlU(`C7H4r+Sk zAd?A7*zQuQd)t3z25KD48y_8P$k+!L=~qxU&9#NubWc1(RRW*=*ly!p?OFFI+DtsE za>HOs_zM?_olasLx4RtbV;A}v8#=jxbM@2C5*Jw5;3G4cN(-Ykai$b3)){r+*o2VwG`%ad^q^b$s& zU3qZPKX2})ejFOT__A)uzI(-2e$1hUKNv{R06BVA?{$2JY?sdR?#{N9AMWcoqI%SV z^VPSnCkG6<*JIkR)B0_U63v;~M_Z5+T|k#^79XTes83{5M=UC|Ex%orCXw9H?F`aF zGx@akhd}=-hl|{Z!|1T`2LqgfNsTwYzzm67Jvq&@{+%^ba*{>mfq$lB<;B@P~h z(_i0ZqeIi z174}TR?_``dpj33#mO1d>Y9kK*ZPF0qH&55J%7teD5tOxdnES7VXfa--gp10E7Q&n zqTs^9?QhDz?d$1;EC}lD3*+u~MtMum0a*;9fIyqbM~6V*8%FbaLKHtq3mfx2?+W+C zpO0YHDvRniYkgX;d)Wp_6{oYk7e6s7o8pv#gOdZ3HEY~z-)-9;t=YkagOS^0HIxvxfz+#FP|Ibz^426516a3e z8r|L>X7zbeG`D)jxv4J-FN|6El-X{sxvY#k`tV$g<`At-V20oEqUdCxZBfT8c|wF6 zZdGlbmUEL?9(X-jMozg-0z2$)SbK)R%pvloZUxg2O%rbqqk$Zc)sEl5Zm)T1>%2*?|VxwrY*Od}4f^mxD9#E>f@*(t0vrngAg zcs$B%ZA;2(sG)5j)6FY~$QnV$VNBvUG(-F+)t+i|^qngm=vD5{aRP+U%oVaEXwEu*q0z=*e$|s%Q#QkN?iLlgz{?dl?Ny ztkgdsv07X?N^%ZdIq%ujWR&*fmx-c(N(r#W|97G{lOem{g&!+mB_w}e-MUgjwgiFg zu9BAqeS8~;R{GT=i!#;6z&YTW(YmouXc_wFN#5A#c8tEe4LN82^I&99IM7>>DfQm` zUi3+17)$@;(L%6U;I)S2$U_O7&ePByDVEaN# z%;eBmBhDf~nLc1ER(>NMQ)f^z_c)A-7PPV|hk{wa0Ob=1Ag5IwW6%$p_GIWSMM zC|8fkhDB+W2zpFxZFvO&ry!S`iR?C0G)|ocIQ!1aeOk1-1_nwhe@YFdMZ|;Vvg2`a z{y8j1p%kkK^0$DzE&Bc)!|~=ocHxJaN&WadGW>ocIdy1c(Y^e3ubxG=YD)QeLIqyy zbuw8}61^|+t1`@!WJ)GA2~s_LO4#%Fl7`55U&?);oP-Hiq4!D^i6?9`6x_dKf3NVY zR}~vTfL0#D;!2osUd}^KZdXUt+gDRxY5RQy@uq9LK@%o(=a}cg>l}?-4&Yi_EOR#Q zCf;n^rz-OfpQLcMAMf2Qh63%5S41~Y^t0;t%;wjeXEPdJB@C|&Tor+u4nL%U30}>2 z)H;ktyXh2nm5)Drstb7%M0Mf+NH2{rE-0{vi3Q31_(=4#*ARrScT0a_%b!i%mcKVX z;r&h+1ZK+)Nm-z)YS6`LC!U*IYhQtk*fhgZT3&UN8}@dcya%Oo;8~4qpG|L>I9Toy zvVKQbssGekm5py6El)B9=|QGgVgC*dClbb712)P6T&`UoO&`DE=+Ck}cJEG;_*EiP zgZ+%a!^Q^iejD1RMu_Pz`cfNr7dgGw^OnngUBmg-uREwYUkZ3913Om?S{!1WHt9}J zbAvQ^)Q&-c%bH?j>#2C1c66Qs;*KI?Ihh?aTZ*mfjN0hP{a(PkV5K19F+(}$$xP`Jf0~DRniT-y z8c?X7uMRS59ahI`+6T%4#6uZ!4mP<3TS|jiziwl%LGi1u;$}AK4QI0?uL^31C&Ii^ z^G1A+Oa^+gkYg^8&W|_dD4M@EXk7^uB7A)q#ucrWHfRxX5(d%+C)1=QBVx8#U_w00 z(c>H-q81Q)%#~sr@j!KcM+$-%iphHc$o->V_uF0;u^TS9H%L#i;6S!iemi)KM>Idp z=?FPr+n7^Ql<}94o;f0;=}a~RSByFmroG~i?-%GFBCGPo5^@LC?e;PLQa`|U8MmGa zmV`x_R@cyy6S9T`JZIz?D}8py^@8ym24}boC!GsxovL0p*55erILHWA_Dla2d(G=| z-UnA+V*5MtB8T*HrBTvZZlDVo<4>Hea;(=oar{*-&(TbWX}-pNOjpga$pGnCuOau% z_ToORpC0&QaqaxFmi*+->2kpm>P0e! z@4hMs%i?byopio(*YA2HIlwgqx$aGLA22oKyz*t78zL@AW|)lk{s$miaMmcwx-s?c z_N)4W(r=&1k#!9-s|6|y=rcW)!qP^a?*-&6+Tmpu5ZrIx@?PUgsZZ<6+MHVUK&{S? z8CCK&;dL+1@`D!Ej5wpy#6ec(M@rH+CChuYsPgd}XmorFjOUQB-)i5`G6cm~T%w5= zF3@IzjPT)rlhW|F9GScTey05FLO0BN%%{g8n-p$fj` zI3nxcZ2}@p!FsuD+eG2e^?^}#v1_|AcEB@pz7S(Ks@K-Vw2cB_oBjNc#uGUp`}bB= z>3Dp5ym8dKo|)&j)Anp<5UxKY*F%=~MYqRVa9n=y{kv-@M*i$)>sdKr9$H{+Ngmr3 zAoT1y*Yq?l?gS}pyA4R-uCP'$`g($C?quuZu%K`64bI zQ~p_>By}2C``}jwCEi}n0D_uIsnb4m*o5&yx?G^k)_km%MWn|K zWAnEUwuqNNlsXcORldOT;Uca-vBDN+f%e)*1B&Om2L_`N4H%oQdlG|9*$8flt~B8@bEozZj(UGNjz@ z%f)woMnq2x*ZqK#IQOXCYBre4_9Z&mRhUk~tgqsHN#2RGVXl3)NqM%g=aX*(QJ|x- zmuN`dJLBLuW6y|Ue4RE6nwtS9Z%BpC-PuX-sVcx~NXhHYlQ zsSBsY9o*>~oTLu!6hFP?P-6%Jo#UgH9j8vhrafIg+rGIE+8>PVH^u{g-E|d7zsAF< z0^isMWQ|6b@6D)tC)7Wc&tG)2d~yxpuP(F0*xQ>k;##W#55u|-`*^OUjF`#_?50m{ zNj3V`uZbFi2`HIvhI#)L5EP2JG~p}e zRMc3#WLcs-zOS>+S-{d7cuy0ldXL#*9*5-#&eE5{WB9jaFP9W%IPZ+@{j^!07=3*d zmsaz}-Fr&~wV9SKmSFHUC!=>i*Qg=M%0n;{K1Q6#B)@HQ#~E?9W5;t1=`JK|#bHP& zL+eWYonXnE0zJFqPOMdbKQB1b{lzy!crhbcKB z1D}|xTr1>T&^X`GkM%PH$qF-#anmG=lz{x@AjOFrv+*LBhQFxVvVo`)TtkKCU%W;E zawgn^k;UrKqPISr3P(Z=lzYJDwMZ-42>-DkCThq*d==Uo@MO+HWF#Q8QS_^%n4 zzBF_{jfk3qldz&Br>9u~vu!^FMEw35{uTTb>`tNR3uML_la@y~8^bczIsV%9J&?KK z0ehFb-`7XGlv|4K*;zZ%__xkhTr-%ATv7|Z%`El&0PjF#HFuudXeC^T(7eiWG^$dsP*CIRTa7lk(N zI;^b~r?GC^>XM%Do{^lo(6uYVCLb+l%(p9_ZC_}a6_EkbQ{WEVFLV^{ZPh?=zJ}!)BKzbLOSbpmA z sn-120 +## File generated by MakeTextFiles.cxx +## KE tot_xs +0 362.797 +50 1040.76 +100 1190.21 +150 1159.89 +200 889.988 +250 732.617 +300 665.516 +350 622.315 +400 608.208 +450 616.752 +500 638.621 +550 659.127 +600 670.638 +650 686.427 +700 718.358 +750 757.128 +800 791.749 +850 807.76 +900 813.921 +950 814.672 +1000 821.733 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 000000000..555cb56f8 --- /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/pip165_tot.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_tot/pip165_tot.txt new file mode 100644 index 000000000..5c5b47b55 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_tot/pip165_tot.txt @@ -0,0 +1,24 @@ +## pi+ -> ho-165 +## File generated by MakeTextFiles.cxx +## KE tot_xs +0 483.828 +50 1392.6 +100 1517.97 +150 1476.59 +200 1129.54 +250 927.503 +300 841.949 +350 786.664 +400 768.646 +450 779.031 +500 805.844 +550 830.582 +600 843.677 +650 862.188 +700 901.228 +750 949.069 +800 991.907 +850 1011.27 +900 1018.4 +950 1018.79 +1000 1027.26 diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_tot/pip16_tot.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_tot/pip16_tot.txt new file mode 100644 index 000000000..60a7eae5a --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_tot/pip16_tot.txt @@ -0,0 +1 @@ +50.0 166.000000 diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_tot/pip181_tot.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_tot/pip181_tot.txt new file mode 100644 index 000000000..1142f8f05 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_tot/pip181_tot.txt @@ -0,0 +1,24 @@ +## pi+ -> ta-181 +## File generated by MakeTextFiles.cxx +## KE tot_xs +0 526.518 +50 1516.82 +100 1629.41 +150 1584.15 +200 1210.75 +250 993.463 +300 901.636 +350 842.234 +400 822.885 +450 833.874 +500 862.319 +550 888.434 +600 901.997 +650 921.362 +700 962.743 +750 1013.6 +800 1059.17 +850 1079.63 +900 1087.06 +950 1087.29 +1000 1096.22 diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_tot/pip1_tot.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_tot/pip1_tot.txt new file mode 100644 index 000000000..66cb8f10c --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_tot/pip1_tot.txt @@ -0,0 +1,45 @@ +## pi+ -> h-1 +## File generated by MakeTextFiles.cxx +## KE tot_xs +0. 1.88672 +50. 94.3358 +100. 132.863 +150. 128.354 +200. 120.02 +250. 108.954 +300. 98.7077 +350. 87.983 +400. 83.2013 +450. 79.1711 +500. 75.8922 +550. 73.2281 +600. 71.1788 +650. 69.6077 +700. 68.5147 +750. 67.8111 +800. 67.4491 +850. 67.3876 +900. 67.5857 +950. 68.0092 +1000. 68.583 +0 11.7527 +50 31.0202 +100 33.8724 +150 33.8896 +200 27.1274 +250 23.0817 +300 21.1642 +350 19.9954 +400 19.6025 +450 20.0121 +500 20.9856 +550 22.0295 +600 22.8733 +650 23.8518 +700 25.3087 +750 26.9344 +800 28.3484 +850 29.1472 +900 29.5585 +950 29.7672 +1000 30.1412 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 000000000..00fca3ece --- /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 000000000..361998c4b --- /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/pip28_tot.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_tot/pip28_tot.txt new file mode 100644 index 000000000..74626e85f --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_tot/pip28_tot.txt @@ -0,0 +1,4 @@ +## pi+ -> si-28 +## File generated by MakeTextFiles.cxx +## KE tot_xs +50.0 602.0 diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_tot/pip2_tot.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_tot/pip2_tot.txt new file mode 100644 index 000000000..19be61bf1 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_tot/pip2_tot.txt @@ -0,0 +1,24 @@ +## pi+ -> d-2 +## File generated by MakeTextFiles.cxx +## KE tot_xs +0 17.209 +50 45.9217 +100 56.0909 +150 55.9232 +200 44.5206 +250 37.7248 +300 34.5511 +350 32.6022 +400 31.9496 +450 32.5908 +500 34.1247 +550 35.7507 +600 37.033 +650 38.5355 +700 40.8258 +750 43.4015 +800 45.6475 +850 46.8939 +900 47.5223 +950 47.8262 +1000 48.4069 diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_tot/pip32_tot.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_tot/pip32_tot.txt new file mode 100644 index 000000000..8c309e5d0 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_tot/pip32_tot.txt @@ -0,0 +1,4 @@ +## pi+ -> s-32 +## File generated by MakeTextFiles.cxx +## KE tot_xs +50.0 684.8 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 000000000..b125ad30a --- /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/pip40_tot.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_tot/pip40_tot.txt new file mode 100644 index 000000000..88f6d7db3 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_tot/pip40_tot.txt @@ -0,0 +1,2 @@ +50.0 439.000000 +65.0 563.000000 diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_tot/pip48_tot.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_tot/pip48_tot.txt new file mode 100644 index 000000000..f8aee7a73 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_tot/pip48_tot.txt @@ -0,0 +1,24 @@ +## pi+ -> ti-48 +## File generated by MakeTextFiles.cxx +## KE tot_xs +0 163.528 +50 463.43 +100 593.82 +150 581.75 +200 450.288 +250 373.278 +300 339.772 +350 318.429 +400 311.421 +450 316.262 +500 328.394 +550 340.225 +600 347.763 +650 357.481 +700 375.318 +750 396.477 +800 415.241 +850 424.422 +900 428.316 +950 429.342 +1000 433.467 diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_tot/pip4_tot.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_tot/pip4_tot.txt new file mode 100644 index 000000000..6c8f90e89 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_tot/pip4_tot.txt @@ -0,0 +1,37 @@ +## pi+ -> he-4 +## File generated by MakeTextFiles.cxx +## KE tot_xs +51.0 81.2 +58.0 94.1 +61.0 100.3 +65.0 109.0 +75.0 133.3 +85.0 159.9 +95.0 187.4 +105.0 214.2 +110.0 227.0 +146.0 293.4 +189.0 300.8 +225.0 264.5 +262.0 215.3 +0 26.1099 +50 70.5746 +100 93.2141 +150 92.5973 +200 73.2951 +250 61.8351 +300 56.5641 +350 53.302 +400 52.2142 +450 53.2158 +500 55.63 +550 58.1553 +600 60.0881 +650 62.3817 +700 65.9773 +750 70.0571 +800 73.6248 +850 75.5643 +900 76.518 +950 76.9511 +1000 77.8497 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 000000000..41c599885 --- /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/pip58_tot.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_tot/pip58_tot.txt new file mode 100644 index 000000000..47a6e09c9 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_tot/pip58_tot.txt @@ -0,0 +1,24 @@ +## pi+ -> ni-58 +## File generated by MakeTextFiles.cxx +## KE tot_xs +0 191.95 +50 545.526 +100 685.139 +150 670.483 +200 518.042 +250 428.83 +300 390.179 +350 365.503 +400 357.41 +450 362.858 +500 376.564 +550 389.833 +600 398.102 +650 408.875 +700 429 +750 452.98 +800 474.274 +850 484.582 +900 488.88 +950 489.909 +1000 494.524 diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_tot/pip63_tot.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_tot/pip63_tot.txt new file mode 100644 index 000000000..8b1650b9f --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_tot/pip63_tot.txt @@ -0,0 +1,24 @@ +## pi+ -> cu-63 +## File generated by MakeTextFiles.cxx +## KE tot_xs +0 206.029 +50 586.235 +100 729.397 +150 713.455 +200 550.812 +250 455.67 +300 414.525 +350 388.232 +400 379.613 +450 385.348 +500 399.805 +550 413.753 +600 422.357 +650 433.622 +700 454.835 +750 480.163 +800 502.667 +850 513.509 +900 517.993 +950 519.016 +1000 523.862 diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_tot/pip6_tot.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_tot/pip6_tot.txt new file mode 100644 index 000000000..ac508c3e7 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_tot/pip6_tot.txt @@ -0,0 +1,18 @@ +## pi+ -> li6-6 +## File generated by MakeTextFiles.cxx +## KE tot_xs +89. 297.3 +115. 357.4 +128. 397.7 +156. 472.5 +187. 462.8 +229. 372.6 +259. 328.1 +289. 281.0 +337. 226.0 +409. 183.5 +482. 161.0 +567. 156.7 +696. 166.5 +855. 182.7 +50.0 117.0 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 000000000..a25d2c8d5 --- /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 000000000..6fcf39043 --- /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/2025/pipA_tot/pip9_tot.txt b/data/evgen/intranuke/tot_xsec/2025/pipA_tot/pip9_tot.txt new file mode 100644 index 000000000..07af030d9 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_tot/pip9_tot.txt @@ -0,0 +1,38 @@ +## pi+ -> be-9 +## File generated by MakeTextFiles.cxx +## KE tot_xs +89. 421.5 +115. 491.7 +128. 516.6 +156. 561.9 +187. 540.5 +229. 469.1 +259. 418.1 +289. 383.4 +337. 312.3 +409. 267.7 +482. 236.5 +567. 233.2 +696. 244.3 +855. 268.6 +0 44.7825 +50 123.043 +100 169.661 +150 167.795 +200 131.887 +250 110.663 +300 101.076 +350 95.0873 +400 93.1003 +450 94.7828 +500 98.8806 +550 103.088 +600 106.171 +650 109.898 +700 115.98 +750 122.965 +800 129.097 +850 132.337 +900 133.874 +950 134.504 +1000 135.994 diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_tot/saunders-pip-al-tot.dat b/data/evgen/intranuke/tot_xsec/2025/pipA_tot/saunders-pip-al-tot.dat new file mode 100644 index 000000000..d55798def --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_tot/saunders-pip-al-tot.dat @@ -0,0 +1,3 @@ +# Saunders pi A total cross sections +# KE(MeV) Tot(mb) Err(mb) +50.0 596.7 54.0 \ No newline at end of file diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_tot/saunders-pip-c-reac.dat b/data/evgen/intranuke/tot_xsec/2025/pipA_tot/saunders-pip-c-reac.dat new file mode 100755 index 000000000..fac663c44 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/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/data/evgen/intranuke/tot_xsec/2025/pipA_tot/saunders-pip-c-tot.dat b/data/evgen/intranuke/tot_xsec/2025/pipA_tot/saunders-pip-c-tot.dat new file mode 100644 index 000000000..dd15f9a33 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_tot/saunders-pip-c-tot.dat @@ -0,0 +1,10 @@ +#Saunders et al TRIUMF Phys Rev C 1995 +#pip C total xs +#KE (MeV) sig err +42. 214 18 +45. 228 19 +46.5 232 19 +48. 238 12 +49.5 259 25 +54. 253 20 +65. 329 24 diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_tot/saunders-pip-c-total.dat b/data/evgen/intranuke/tot_xsec/2025/pipA_tot/saunders-pip-c-total.dat new file mode 100644 index 000000000..fd0f74979 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_tot/saunders-pip-c-total.dat @@ -0,0 +1,11 @@ +#Saunders et al TRIUMF Phys Rev C 1995 +#pip C total xs +#KE (MeV) sig err +42. 214 18 +45. 228 19 +46.5 232 19 +48. 238 12 +49.5 259 25 +50.0 248 20 +54. 253 20 +65. 329 24 diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_tot/saunders-pip-ca-tot.dat b/data/evgen/intranuke/tot_xsec/2025/pipA_tot/saunders-pip-ca-tot.dat new file mode 100644 index 000000000..79e85d7af --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_tot/saunders-pip-ca-tot.dat @@ -0,0 +1,3 @@ +# Saunders pi A total cross sections +# KE(MeV) Tot(mb) Err(mb) +50.0 1108.0 108.0 \ No newline at end of file diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_tot/saunders-pip-li6-tot.dat b/data/evgen/intranuke/tot_xsec/2025/pipA_tot/saunders-pip-li6-tot.dat new file mode 100644 index 000000000..17fdab22f --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_tot/saunders-pip-li6-tot.dat @@ -0,0 +1,3 @@ +# Saunders pi A total cross sections +# KE(MeV) Tot(mb) Err(mb) +50.0 117.0 11.4 \ No newline at end of file diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_tot/saunders-pip-s-tot.dat b/data/evgen/intranuke/tot_xsec/2025/pipA_tot/saunders-pip-s-tot.dat new file mode 100644 index 000000000..a6a3ab554 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_tot/saunders-pip-s-tot.dat @@ -0,0 +1,3 @@ +# Saunders pi A total cross sections +# KE(MeV) Tot(mb) Err(mb) +50.0 684.8 60.8 \ No newline at end of file diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_tot/saunders-pip-si-tot.dat b/data/evgen/intranuke/tot_xsec/2025/pipA_tot/saunders-pip-si-tot.dat new file mode 100644 index 000000000..47e7f50d0 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_tot/saunders-pip-si-tot.dat @@ -0,0 +1,3 @@ +# Saunders pi A total cross sections +# KE(MeV) Tot(mb) Err(mb) +50.0 602.0 53.2 \ No newline at end of file diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_tot/various-pip-c-total.dat b/data/evgen/intranuke/tot_xsec/2025/pipA_tot/various-pip-c-total.dat new file mode 100644 index 000000000..4b9c1ab2e --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_tot/various-pip-c-total.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 65 +50.0 247 diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_tot/wilkin-pip-be-tot.dat b/data/evgen/intranuke/tot_xsec/2025/pipA_tot/wilkin-pip-be-tot.dat new file mode 100644 index 000000000..6cc744763 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_tot/wilkin-pip-be-tot.dat @@ -0,0 +1,5 @@ +106.781 454 4.47214 +141.527 564.5 4.47214 +185.877 554 3.60555 +221.496 494.5 3.60555 +259.624 422 2.23607 diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_tot/wilkin-pip-c-tot.dat b/data/evgen/intranuke/tot_xsec/2025/pipA_tot/wilkin-pip-c-tot.dat new file mode 100644 index 000000000..23e3f62d9 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_tot/wilkin-pip-c-tot.dat @@ -0,0 +1,6 @@ +78.0736 438 6.7082 +105.957 593 4.47214 +140.66 678.5 4.47214 +184.974 658 4.47214 +220.574 591.5 3.60555 +257.751 523.5 3.60555 diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_tot/wilkin-pip-he-tot.dat b/data/evgen/intranuke/tot_xsec/2025/pipA_tot/wilkin-pip-he-tot.dat new file mode 100644 index 000000000..fb0283f34 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_tot/wilkin-pip-he-tot.dat @@ -0,0 +1,5 @@ +110.087 246 3.60555 +145.878 330 2.23607 +188.59 322.5 2.23607 +225.188 272.5 2.23607 +262.436 224.5 2.23607 diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_tot/wilkin-pip-li-tot.dat b/data/evgen/intranuke/tot_xsec/2025/pipA_tot/wilkin-pip-li-tot.dat new file mode 100644 index 000000000..8611b956f --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_tot/wilkin-pip-li-tot.dat @@ -0,0 +1,5 @@ +110.087 386.5 3.60555 +145.006 483 3.60555 +188.59 487 3.60555 +224.265 425.5 2.23607 +262.436 357.5 2.23607 diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_tot/wilkin-pip-li6-tot.dat b/data/evgen/intranuke/tot_xsec/2025/pipA_tot/wilkin-pip-li6-tot.dat new file mode 100644 index 000000000..e2cb373fe --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_tot/wilkin-pip-li6-tot.dat @@ -0,0 +1,6 @@ +81.9334 223 3.60555 +110.087 339.5 3.60555 +145.006 460.5 3.60555 +188.59 459 3.60555 +224.265 394.5 2.23607 +262.436 321.5 2.23607 diff --git a/data/evgen/intranuke/tot_xsec/2025/pipA_tot/wilkin-pip-s-tot.dat b/data/evgen/intranuke/tot_xsec/2025/pipA_tot/wilkin-pip-s-tot.dat new file mode 100644 index 000000000..70498af80 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/2025/pipA_tot/wilkin-pip-s-tot.dat @@ -0,0 +1,6 @@ +80.384 1128.5 12.53 +106.781 1285.5 12.53 +141.527 1313 11.1803 +185.877 1250.5 8.94427 +221.496 1181.5 6.7082 +258.687 1079.5 6.7082 diff --git a/data/evgen/intranuke/tot_xsec/pipA_abs/al_abs_combined.txt b/data/evgen/intranuke/tot_xsec/pipA_abs/al_abs_combined.txt new file mode 100644 index 000000000..dad34a5fb --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/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/pipA_abs/al_abs_smooth.txt b/data/evgen/intranuke/tot_xsec/pipA_abs/al_abs_smooth.txt new file mode 100644 index 000000000..b153bd7b6 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/pipA_abs/al_abs_smooth.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/pipA_abs/ar_abs_combined.txt b/data/evgen/intranuke/tot_xsec/pipA_abs/ar_abs_combined.txt new file mode 100644 index 000000000..9fc07be33 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/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/pipA_abs/ar_abs_smooth.txt b/data/evgen/intranuke/tot_xsec/pipA_abs/ar_abs_smooth.txt new file mode 100644 index 000000000..a8c59e637 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/pipA_abs/ar_abs_smooth.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/pipA_abs/ashery-pip-li-abs.dat b/data/evgen/intranuke/tot_xsec/pipA_abs/ashery-pip-li-abs.dat index 91cd0cafb..0c7216e75 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/bi_abs_combined.txt b/data/evgen/intranuke/tot_xsec/pipA_abs/bi_abs_combined.txt new file mode 100644 index 000000000..25e7d5a97 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/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/pipA_abs/bi_abs_smooth.txt b/data/evgen/intranuke/tot_xsec/pipA_abs/bi_abs_smooth.txt new file mode 100644 index 000000000..6b6b2b75e --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/pipA_abs/bi_abs_smooth.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/pipA_abs/c_abs_combined.txt b/data/evgen/intranuke/tot_xsec/pipA_abs/c_abs_combined.txt new file mode 100644 index 000000000..f293dd454 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/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/pipA_abs/c_abs_smooth.txt b/data/evgen/intranuke/tot_xsec/pipA_abs/c_abs_smooth.txt new file mode 100644 index 000000000..901406b86 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/pipA_abs/c_abs_smooth.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/pipA_abs/fe_abs_combined.txt b/data/evgen/intranuke/tot_xsec/pipA_abs/fe_abs_combined.txt new file mode 100644 index 000000000..fbaff408c --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/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/pipA_abs/fe_abs_smooth.txt b/data/evgen/intranuke/tot_xsec/pipA_abs/fe_abs_smooth.txt new file mode 100644 index 000000000..d86519572 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/pipA_abs/fe_abs_smooth.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/pipA_abs/he3_abs_combined.txt b/data/evgen/intranuke/tot_xsec/pipA_abs/he3_abs_combined.txt new file mode 100644 index 000000000..ef76b7f90 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/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/pipA_abs/he3_abs_smooth.txt b/data/evgen/intranuke/tot_xsec/pipA_abs/he3_abs_smooth.txt new file mode 100644 index 000000000..314a622ea --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/pipA_abs/he3_abs_smooth.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/pipA_abs/incl-pip-al-abs.dat b/data/evgen/intranuke/tot_xsec/pipA_abs/incl-pip-al-abs.dat new file mode 100644 index 000000000..edf762b39 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/pipA_abs/incl-pip-al-abs.dat @@ -0,0 +1,7 @@ +# results from INCLv5 program - mar, 2025 - sd, mi +# to be used for hA2025 at low energy +#KE xs +1 5 +5 38 +20 134 +50 219 diff --git a/data/evgen/intranuke/tot_xsec/pipA_abs/incl-pip-ar-abs.dat b/data/evgen/intranuke/tot_xsec/pipA_abs/incl-pip-ar-abs.dat new file mode 100644 index 000000000..e606d9d54 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/pipA_abs/incl-pip-ar-abs.dat @@ -0,0 +1,7 @@ +# results from INCLv5 program - mar, 2025 - sd, mi +# to be used for hA2025 at low energy +#KE xs +1 15 +5 50 +20 206.2 +50 304.3 diff --git a/data/evgen/intranuke/tot_xsec/pipA_abs/incl-pip-bi-abs.dat b/data/evgen/intranuke/tot_xsec/pipA_abs/incl-pip-bi-abs.dat new file mode 100644 index 000000000..6a4219a0a --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/pipA_abs/incl-pip-bi-abs.dat @@ -0,0 +1,7 @@ +# results from INCLv5 program - mar, 2025 - sd, mi +# to be used for hA2025 at low energy +#KE xs +1 0 +5 0 +20 221 +50 869 diff --git a/data/evgen/intranuke/tot_xsec/pipA_abs/incl-pip-c-abs.dat b/data/evgen/intranuke/tot_xsec/pipA_abs/incl-pip-c-abs.dat new file mode 100644 index 000000000..cff1fd2b8 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/pipA_abs/incl-pip-c-abs.dat @@ -0,0 +1,7 @@ +# results from INCLv5 program - mar, 2025 - sd, mi +# to be used for hA2025 at low energy +#KE xs +1 0 +4 5.1 +20 41.2 +50 95.5 \ No newline at end of file diff --git a/data/evgen/intranuke/tot_xsec/pipA_abs/incl-pip-fe-abs.dat b/data/evgen/intranuke/tot_xsec/pipA_abs/incl-pip-fe-abs.dat new file mode 100644 index 000000000..1216a0895 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/pipA_abs/incl-pip-fe-abs.dat @@ -0,0 +1,7 @@ +# results from INCLv5 program - mar, 2025 - sd, mi +# to be used for hA2025 at low energy +#KE xs +1 0 +5 15.3 +20 218.6 +50 373.5 diff --git a/data/evgen/intranuke/tot_xsec/pipA_abs/incl-pip-he3-abs.dat b/data/evgen/intranuke/tot_xsec/pipA_abs/incl-pip-he3-abs.dat new file mode 100644 index 000000000..30d3028e2 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/pipA_abs/incl-pip-he3-abs.dat @@ -0,0 +1,7 @@ +# results from INCLv5 program - mar, 2025 - sd, mi +# to be used for hA2025 at low energy +#KE xs +1 0 +5 1.4 +20 11 +50 37 diff --git a/data/evgen/intranuke/tot_xsec/pipA_abs/incl-pip-li-abs.dat b/data/evgen/intranuke/tot_xsec/pipA_abs/incl-pip-li-abs.dat new file mode 100644 index 000000000..520b50a2c --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/pipA_abs/incl-pip-li-abs.dat @@ -0,0 +1,7 @@ +# results from INCLv5 program - mar, 2025 - sd, mi +# to be used for hA2025 at low energy +#KE xs +1 15 +5 30 +20 59.4 +50 75.4 diff --git a/data/evgen/intranuke/tot_xsec/pipA_abs/incl-pip-nb-abs.dat b/data/evgen/intranuke/tot_xsec/pipA_abs/incl-pip-nb-abs.dat new file mode 100644 index 000000000..a4274ee4c --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/pipA_abs/incl-pip-nb-abs.dat @@ -0,0 +1,7 @@ +# results from INCLv5 program - mar, 2025 - sd, mi +# to be used for hA2025 at low energy +#KE xs +1 0 +5 0 +20 324.7 +50 540.7 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 000000000..342a27926 --- /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 000000000..a22b14489 --- /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 000000000..058ef6d12 --- /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/li_abs_combined.txt b/data/evgen/intranuke/tot_xsec/pipA_abs/li_abs_combined.txt new file mode 100644 index 000000000..5948ae254 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/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/pipA_abs/li_abs_smooth.txt b/data/evgen/intranuke/tot_xsec/pipA_abs/li_abs_smooth.txt new file mode 100644 index 000000000..99e1c5c8a --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/pipA_abs/li_abs_smooth.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/pipA_abs/n_abs_combined.txt b/data/evgen/intranuke/tot_xsec/pipA_abs/n_abs_combined.txt new file mode 100644 index 000000000..6f49c8fdc --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/pipA_abs/n_abs_combined.txt @@ -0,0 +1,2 @@ +#KE XS sig +239 119 10 diff --git a/data/evgen/intranuke/tot_xsec/pipA_abs/n_abs_smooth.txt b/data/evgen/intranuke/tot_xsec/pipA_abs/n_abs_smooth.txt new file mode 100644 index 000000000..066ef7ff4 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/pipA_abs/n_abs_smooth.txt @@ -0,0 +1 @@ +239.0 119.000000 diff --git a/data/evgen/intranuke/tot_xsec/pipA_abs/nb_abs_combined.txt b/data/evgen/intranuke/tot_xsec/pipA_abs/nb_abs_combined.txt new file mode 100644 index 000000000..592a443af --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/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/pipA_abs/nb_abs_smooth.txt b/data/evgen/intranuke/tot_xsec/pipA_abs/nb_abs_smooth.txt new file mode 100644 index 000000000..feaeb6260 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/pipA_abs/nb_abs_smooth.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/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 000000000..df6375cc9 --- /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_abs/pip12_abs.txt b/data/evgen/intranuke/tot_xsec/pipA_abs/pip12_abs.txt index ef1350820..901406b86 100644 --- a/data/evgen/intranuke/tot_xsec/pipA_abs/pip12_abs.txt +++ b/data/evgen/intranuke/tot_xsec/pipA_abs/pip12_abs.txt @@ -1,30 +1,42 @@ -## pi+ -> c-12 -## File generated by MakeTextFiles.cxx -## KE abs_xs -85 109. -125 166. -165 194. -205 157. -245 95. -315 64. -0 30 -50 88 -100 90.2331 -150 82.6562 -200 56.6854 -250 42.1585 -300 37.1191 -350 33.4799 -400 32.3591 -450 32.009 -500 31.5612 -550 30.3563 -600 28.1337 -650 26.1581 -700 25.2924 -750 25.0997 -800 25.154 -850 24.31 -900 23.3629 -950 22.2964 -1000 21.7943 +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/pipA_abs/pip131_abs.txt b/data/evgen/intranuke/tot_xsec/pipA_abs/pip131_abs.txt new file mode 100644 index 000000000..9d52dcf44 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/pipA_abs/pip131_abs.txt @@ -0,0 +1 @@ +239.0 676.000000 diff --git a/data/evgen/intranuke/tot_xsec/pipA_abs/pip14_abs.txt b/data/evgen/intranuke/tot_xsec/pipA_abs/pip14_abs.txt new file mode 100644 index 000000000..066ef7ff4 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/pipA_abs/pip14_abs.txt @@ -0,0 +1 @@ +239.0 119.000000 diff --git a/data/evgen/intranuke/tot_xsec/pipA_abs/pip209_abs.txt b/data/evgen/intranuke/tot_xsec/pipA_abs/pip209_abs.txt index f04e64cc1..6b6b2b75e 100644 --- a/data/evgen/intranuke/tot_xsec/pipA_abs/pip209_abs.txt +++ b/data/evgen/intranuke/tot_xsec/pipA_abs/pip209_abs.txt @@ -1,30 +1,42 @@ -## pi+ -> bi-209 -## File generated by MakeTextFiles.cxx -## KE abs_xs -85 1659. -125 1235. -165 1585. -205 950. -245 854. -315 618. -0 522.5 -50 1532.67 -100 1014.03 -150 928.879 -200 637.023 -250 473.772 -300 417.139 -350 376.242 -400 363.647 -450 359.713 -500 354.681 -550 341.14 -600 316.163 -650 293.961 -700 284.233 -750 282.067 -800 282.677 -850 273.193 -900 262.549 -950 250.564 -1000 244.922 +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/pipA_abs/pip27_abs.txt b/data/evgen/intranuke/tot_xsec/pipA_abs/pip27_abs.txt index 35fb66178..b153bd7b6 100644 --- a/data/evgen/intranuke/tot_xsec/pipA_abs/pip27_abs.txt +++ b/data/evgen/intranuke/tot_xsec/pipA_abs/pip27_abs.txt @@ -1,9 +1,42 @@ -## pi+ -> al-27 -## File generated by MakeTextFiles.cxx -## KE abs_xs -85 252. -125 340. -165 338. -205 327. -245 218. -315 119. +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/pipA_abs/pip3_abs.txt b/data/evgen/intranuke/tot_xsec/pipA_abs/pip3_abs.txt index b8fa461fc..314a622ea 100644 --- a/data/evgen/intranuke/tot_xsec/pipA_abs/pip3_abs.txt +++ b/data/evgen/intranuke/tot_xsec/pipA_abs/pip3_abs.txt @@ -1,24 +1,42 @@ -## pi+ -> he3-3 -## File generated by MakeTextFiles.cxx -## KE abs_xs -0 7.5 -50 22 -100 27.9011 -150 25.5583 -200 17.5278 -250 13.0359 -300 11.4776 -350 10.3524 -400 10.0058 -450 9.89756 -500 9.7591 -550 9.38653 -600 8.69928 -650 8.08839 -700 7.82071 -750 7.76113 -800 7.77791 -850 7.51694 -900 7.22408 -950 6.89431 -1000 6.73907 +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/pipA_abs/pip40_abs.txt b/data/evgen/intranuke/tot_xsec/pipA_abs/pip40_abs.txt new file mode 100644 index 000000000..a8c59e637 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/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/pipA_abs/pip56_abs.txt b/data/evgen/intranuke/tot_xsec/pipA_abs/pip56_abs.txt index 307df7be7..d86519572 100644 --- a/data/evgen/intranuke/tot_xsec/pipA_abs/pip56_abs.txt +++ b/data/evgen/intranuke/tot_xsec/pipA_abs/pip56_abs.txt @@ -1,30 +1,42 @@ -## pi+ -> fe-56 -## File generated by MakeTextFiles.cxx -## KE abs_xs -85 421. -125 527. -165 577. -205 607. -245 411. -315 320. -0 140 -50 410.667 -100 332.5 -150 304.58 -200 208.88 -250 155.35 -300 136.78 -350 123.37 -400 119.24 -450 117.95 -500 116.3 -550 111.86 -600 103.67 -650 96.39 -700 93.2 -750 92.49 -800 92.69 -850 89.58 -900 86.09 -950 82.16 -1000 80.31 +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/pipA_abs/pip7_abs.txt b/data/evgen/intranuke/tot_xsec/pipA_abs/pip7_abs.txt index 5e276b022..99e1c5c8a 100644 --- a/data/evgen/intranuke/tot_xsec/pipA_abs/pip7_abs.txt +++ b/data/evgen/intranuke/tot_xsec/pipA_abs/pip7_abs.txt @@ -1,29 +1,42 @@ -## pi+ -> li-7 -## File generated by MakeTextFiles.cxx -## KE abs_xs -85 44. -125 114. -165 124. -205 59. -245 42. -0 17.5 -50 51.3333 -100 57.171 -150 52.3703 -200 35.9154 -250 26.7113 -300 23.5183 -350 21.2126 -400 20.5025 -450 20.2806 -500 19.9969 -550 19.2335 -600 17.8253 -650 16.5736 -700 16.0251 -750 15.903 -800 15.9374 -850 15.4026 -900 14.8025 -950 14.1268 -1000 13.8087 +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/pipA_abs/pip93_abs.txt b/data/evgen/intranuke/tot_xsec/pipA_abs/pip93_abs.txt index d46e8c423..feaeb6260 100644 --- a/data/evgen/intranuke/tot_xsec/pipA_abs/pip93_abs.txt +++ b/data/evgen/intranuke/tot_xsec/pipA_abs/pip93_abs.txt @@ -1,30 +1,42 @@ -## pi+ -> nb-93 -## File generated by MakeTextFiles.cxx -## KE abs_xs -85 805. -125 925. -165 880. -205 685. -245 440. -315 390. -0 232.5 -50 682 -100 510.867 -150 467.97 -200 320.932 -250 238.686 -300 210.155 -350 189.551 -400 183.205 -450 181.223 -500 178.688 -550 171.866 -600 159.283 -650 148.098 -700 143.196 -750 142.106 -800 142.413 -850 137.635 -900 132.272 -950 126.234 -1000 123.392 +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/pipA_abs/xe_abs_combined.txt b/data/evgen/intranuke/tot_xsec/pipA_abs/xe_abs_combined.txt new file mode 100644 index 000000000..2dfd67d02 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/pipA_abs/xe_abs_combined.txt @@ -0,0 +1,2 @@ +#KE XS sig +239 676 94 diff --git a/data/evgen/intranuke/tot_xsec/pipA_abs/xe_abs_smooth.txt b/data/evgen/intranuke/tot_xsec/pipA_abs/xe_abs_smooth.txt new file mode 100644 index 000000000..9d52dcf44 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/pipA_abs/xe_abs_smooth.txt @@ -0,0 +1 @@ +239.0 676.000000 diff --git a/data/evgen/intranuke/tot_xsec/pipA_cex/al_cex_combined.txt b/data/evgen/intranuke/tot_xsec/pipA_cex/al_cex_combined.txt new file mode 100644 index 000000000..3cd6a1577 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/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/pipA_cex/al_cex_smooth.txt b/data/evgen/intranuke/tot_xsec/pipA_cex/al_cex_smooth.txt new file mode 100644 index 000000000..9bb4ad7d2 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/pipA_cex/al_cex_smooth.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/pipA_cex/ar_cex_combined.txt b/data/evgen/intranuke/tot_xsec/pipA_cex/ar_cex_combined.txt new file mode 100644 index 000000000..0b6240890 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/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/pipA_cex/ar_cex_smooth.txt b/data/evgen/intranuke/tot_xsec/pipA_cex/ar_cex_smooth.txt new file mode 100644 index 000000000..276e31553 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/pipA_cex/ar_cex_smooth.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/pipA_cex/ashery-pip-li-cex.dat b/data/evgen/intranuke/tot_xsec/pipA_cex/ashery-pip-li-cex.dat index 4ef6923b3..fe0046888 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 000000000..4446767a5 --- /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_cex/bi_cex_combined.txt b/data/evgen/intranuke/tot_xsec/pipA_cex/bi_cex_combined.txt new file mode 100644 index 000000000..626ecacd5 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/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/pipA_cex/bi_cex_smooth.txt b/data/evgen/intranuke/tot_xsec/pipA_cex/bi_cex_smooth.txt new file mode 100644 index 000000000..bff6986e0 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/pipA_cex/bi_cex_smooth.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/pipA_cex/c_cex_combined.txt b/data/evgen/intranuke/tot_xsec/pipA_cex/c_cex_combined.txt new file mode 100644 index 000000000..36563c9b7 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/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/pipA_cex/c_cex_smooth.txt b/data/evgen/intranuke/tot_xsec/pipA_cex/c_cex_smooth.txt new file mode 100644 index 000000000..196c4e016 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/pipA_cex/c_cex_smooth.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/pipA_cex/fe_cex_combined.txt b/data/evgen/intranuke/tot_xsec/pipA_cex/fe_cex_combined.txt new file mode 100644 index 000000000..d2070c4ca --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/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/pipA_cex/fe_cex_smooth.txt b/data/evgen/intranuke/tot_xsec/pipA_cex/fe_cex_smooth.txt new file mode 100644 index 000000000..56a711c73 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/pipA_cex/fe_cex_smooth.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/pipA_cex/he3_cex_combined.txt b/data/evgen/intranuke/tot_xsec/pipA_cex/he3_cex_combined.txt new file mode 100644 index 000000000..309869c98 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/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/pipA_cex/he3_cex_smooth.txt b/data/evgen/intranuke/tot_xsec/pipA_cex/he3_cex_smooth.txt new file mode 100644 index 000000000..b5799ef98 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/pipA_cex/he3_cex_smooth.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/pipA_cex/incl-pip-al-cex.dat b/data/evgen/intranuke/tot_xsec/pipA_cex/incl-pip-al-cex.dat new file mode 100644 index 000000000..660537d33 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/pipA_cex/incl-pip-al-cex.dat @@ -0,0 +1,7 @@ +# results from INCLv5 program - mar, 2025 - sd, mi +# to be used for hA2025 at low energy +#KE xs +1 .1 +5 .18 +20 3.8 +50 24.9 diff --git a/data/evgen/intranuke/tot_xsec/pipA_cex/incl-pip-ar-cex.dat b/data/evgen/intranuke/tot_xsec/pipA_cex/incl-pip-ar-cex.dat new file mode 100644 index 000000000..a0e0f3f64 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/pipA_cex/incl-pip-ar-cex.dat @@ -0,0 +1,7 @@ +# results from INCLv5 program - mar, 2025 - sd, mi +# to be used for hA2025 at low energy +#KE xs +1 .1 +5 .54 +20 9.2 +50 48 diff --git a/data/evgen/intranuke/tot_xsec/pipA_cex/incl-pip-bi-cex.dat b/data/evgen/intranuke/tot_xsec/pipA_cex/incl-pip-bi-cex.dat new file mode 100644 index 000000000..fe2aeabb7 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/pipA_cex/incl-pip-bi-cex.dat @@ -0,0 +1,7 @@ +# results from INCLv5 program - mar, 2025 - sd, mi +# to be used for hA2025 at low energy +#KE xs +1 0 +5 0 +20 19 +50 107 diff --git a/data/evgen/intranuke/tot_xsec/pipA_cex/incl-pip-c-cex.dat b/data/evgen/intranuke/tot_xsec/pipA_cex/incl-pip-c-cex.dat new file mode 100644 index 000000000..c88d00fd0 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/pipA_cex/incl-pip-c-cex.dat @@ -0,0 +1,7 @@ +# results from INCLv5 program - mar, 2025 - sd, mi +# to be used for hA2025 at low energy +#KE xs +1 0 +4 0 +20 0.28 +50 8.5 \ No newline at end of file diff --git a/data/evgen/intranuke/tot_xsec/pipA_cex/incl-pip-fe-cex.dat b/data/evgen/intranuke/tot_xsec/pipA_cex/incl-pip-fe-cex.dat new file mode 100644 index 000000000..8ae46edf4 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/pipA_cex/incl-pip-fe-cex.dat @@ -0,0 +1,7 @@ +# results from INCLv5 program - mar, 2025 - sd, mi +# to be used for hA2025 at low energy +#KE xs +1 0 +5 0.08 +20 7.2 +50 42.9 diff --git a/data/evgen/intranuke/tot_xsec/pipA_cex/incl-pip-he3-cex.dat b/data/evgen/intranuke/tot_xsec/pipA_cex/incl-pip-he3-cex.dat new file mode 100644 index 000000000..1ae707f7c --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/pipA_cex/incl-pip-he3-cex.dat @@ -0,0 +1,7 @@ +# results from INCLv5 program - mar, 2025 - sd, mi +# to be used for hA2025 at low energy +#KE xs +1 0 +5 0 +20 0 +50 2.3 diff --git a/data/evgen/intranuke/tot_xsec/pipA_cex/incl-pip-li-cex.dat b/data/evgen/intranuke/tot_xsec/pipA_cex/incl-pip-li-cex.dat new file mode 100644 index 000000000..ff5633b76 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/pipA_cex/incl-pip-li-cex.dat @@ -0,0 +1,7 @@ +# results from INCLv5 program - mar, 2025 - sd, mi +# to be used for hA2025 at low energy +#KE xs +1 .05 +5 .46 +20 4.1 +50 23.3 diff --git a/data/evgen/intranuke/tot_xsec/pipA_cex/incl-pip-nb-cex.dat b/data/evgen/intranuke/tot_xsec/pipA_cex/incl-pip-nb-cex.dat new file mode 100644 index 000000000..b8645a996 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/pipA_cex/incl-pip-nb-cex.dat @@ -0,0 +1,7 @@ +# results from INCLv5 program - mar, 2025 - sd, mi +# to be used for hA2025 at low energy +#KE xs +1 0 +5 0 +20 14 +50 65 diff --git a/data/evgen/intranuke/tot_xsec/pipA_cex/li_cex_combined.txt b/data/evgen/intranuke/tot_xsec/pipA_cex/li_cex_combined.txt new file mode 100644 index 000000000..84b9261b6 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/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/pipA_cex/li_cex_smooth.txt b/data/evgen/intranuke/tot_xsec/pipA_cex/li_cex_smooth.txt new file mode 100644 index 000000000..8b1809d78 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/pipA_cex/li_cex_smooth.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/pipA_cex/nb_cex_combined.txt b/data/evgen/intranuke/tot_xsec/pipA_cex/nb_cex_combined.txt new file mode 100644 index 000000000..6ffeb8394 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/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/pipA_cex/nb_cex_smooth.txt b/data/evgen/intranuke/tot_xsec/pipA_cex/nb_cex_smooth.txt new file mode 100644 index 000000000..1d5ec9ef4 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/pipA_cex/nb_cex_smooth.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/pipA_cex/o_cex_combined.txt b/data/evgen/intranuke/tot_xsec/pipA_cex/o_cex_combined.txt new file mode 100644 index 000000000..6548828ba --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/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/pipA_cex/o_cex_smooth.txt b/data/evgen/intranuke/tot_xsec/pipA_cex/o_cex_smooth.txt new file mode 100644 index 000000000..ddc175629 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/pipA_cex/o_cex_smooth.txt @@ -0,0 +1 @@ +100.0 66.000000 diff --git a/data/evgen/intranuke/tot_xsec/pipA_cex/pip12_cex.txt b/data/evgen/intranuke/tot_xsec/pipA_cex/pip12_cex.txt index d006bd64c..196c4e016 100644 --- a/data/evgen/intranuke/tot_xsec/pipA_cex/pip12_cex.txt +++ b/data/evgen/intranuke/tot_xsec/pipA_cex/pip12_cex.txt @@ -1,30 +1,42 @@ -## pi+ -> c-12 -## File generated by MakeTextFiles.cxx -## KE cex_xs -85 35. -125 38. -165 46. -205 45. -245 47. -315 45. -0 5 -50 18 -100 69.47 -150 79.1385 -200 71.9766 -250 65.8891 -300 62.3081 -350 59.8015 -400 29.3636 -450 0 -500 0 -550 0 -600 0 -650 0 -700 0 -750 0 -800 0 -850 0 -900 0 -950 0 -1000 0 +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/pipA_cex/pip16_cex.txt b/data/evgen/intranuke/tot_xsec/pipA_cex/pip16_cex.txt index e3c124448..ddc175629 100644 --- a/data/evgen/intranuke/tot_xsec/pipA_cex/pip16_cex.txt +++ b/data/evgen/intranuke/tot_xsec/pipA_cex/pip16_cex.txt @@ -1,25 +1 @@ -## pi+ -> o-16 -## File generated by MakeTextFiles.cxx -## KE cex_xs -100. 66. -0 5.60978 -50 20.1952 -100 84.1569 -150 95.8695 -200 87.1935 -250 79.8189 -300 75.4809 -350 72.4443 -400 35.5715 -450 0 -500 0 -550 0 -600 0 -650 0 -700 0 -750 0 -800 0 -850 0 -900 0 -950 0 -1000 0 +100.0 66.000000 diff --git a/data/evgen/intranuke/tot_xsec/pipA_cex/pip209_cex.txt b/data/evgen/intranuke/tot_xsec/pipA_cex/pip209_cex.txt index 3c245ae67..bff6986e0 100644 --- a/data/evgen/intranuke/tot_xsec/pipA_cex/pip209_cex.txt +++ b/data/evgen/intranuke/tot_xsec/pipA_cex/pip209_cex.txt @@ -1,30 +1,42 @@ -## pi+ -> bi-209 -## File generated by MakeTextFiles.cxx -## KE cex_xs -85 141. -125 165. -165 196. -205 260. -245 276. -315 304. -0 15.6804 -50 56.4493 -100 466.775 -150 531.738 -200 483.617 -250 442.714 -300 418.654 -350 401.811 -400 197.296 -450 0 -500 0 -550 0 -600 0 -650 0 -700 0 -750 0 -800 0 -850 0 -900 0 -950 0 -1000 0 +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/pipA_cex/pip27_cex.txt b/data/evgen/intranuke/tot_xsec/pipA_cex/pip27_cex.txt index a7cad68d1..9bb4ad7d2 100644 --- a/data/evgen/intranuke/tot_xsec/pipA_cex/pip27_cex.txt +++ b/data/evgen/intranuke/tot_xsec/pipA_cex/pip27_cex.txt @@ -1,9 +1,42 @@ -## pi+ -> al-27 -## File generated by MakeTextFiles.cxx -## KE cex_xs -85 55. -125 58. -165 72. -205 58. -245 64. -315 73. +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/pipA_cex/pip3_cex.txt b/data/evgen/intranuke/tot_xsec/pipA_cex/pip3_cex.txt index b34fe648f..b5799ef98 100644 --- a/data/evgen/intranuke/tot_xsec/pipA_cex/pip3_cex.txt +++ b/data/evgen/intranuke/tot_xsec/pipA_cex/pip3_cex.txt @@ -1,29 +1,42 @@ -## pi+ -> he3-3 -## File generated by MakeTextFiles.cxx -## KE cex_xs -70. 2.7 -118. 13.3 -162. 24.1 -239. 24.1 -330. 15.9 -0 2.87175 -50 10.3383 -100 27.5692 -150 31.4061 -200 28.5639 -250 26.1481 -300 24.727 -350 23.7322 -400 11.653 -450 0 -500 0 -550 0 -600 0 -650 0 -700 0 -750 0 -800 0 -850 0 -900 0 -950 0 -1000 0 +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/pipA_cex/pip40_cex.txt b/data/evgen/intranuke/tot_xsec/pipA_cex/pip40_cex.txt new file mode 100644 index 000000000..276e31553 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/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/pipA_cex/pip56_cex.txt b/data/evgen/intranuke/tot_xsec/pipA_cex/pip56_cex.txt index 67cb2fe4c..56a711c73 100644 --- a/data/evgen/intranuke/tot_xsec/pipA_cex/pip56_cex.txt +++ b/data/evgen/intranuke/tot_xsec/pipA_cex/pip56_cex.txt @@ -1,30 +1,42 @@ -## pi+ -> fe-56 -## File generated by MakeTextFiles.cxx -## KE cex_xs -85 79. -125 83. -165 103. -205 83. -245 95. -315 98. -0 9.25918 -50 33.3331 -100 194 -150 221 -200 201 -250 184 -300 174 -350 167 -400 82 -450 0 -500 0 -550 0 -600 0 -650 0 -700 0 -750 0 -800 0 -850 0 -900 0 -950 0 -1000 0 +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/pipA_cex/pip7_cex.txt b/data/evgen/intranuke/tot_xsec/pipA_cex/pip7_cex.txt index 2082682be..8b1809d78 100644 --- a/data/evgen/intranuke/tot_xsec/pipA_cex/pip7_cex.txt +++ b/data/evgen/intranuke/tot_xsec/pipA_cex/pip7_cex.txt @@ -1,29 +1,42 @@ -## pi+ -> li-7 -## File generated by MakeTextFiles.cxx -## KE cex_xs -85 31. -125 43. -165 46. -205 54. -245 50. -0 4.03029 -50 14.5091 -100 48.5 -150 55.25 -200 50.25 -250 46 -300 43.5 -350 41.75 -400 20.5 -450 0 -500 0 -550 0 -600 0 -650 0 -700 0 -750 0 -800 0 -850 0 -900 0 -950 0 -1000 0 +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/pipA_cex/pip93_cex.txt b/data/evgen/intranuke/tot_xsec/pipA_cex/pip93_cex.txt index 76be69fb9..1d5ec9ef4 100644 --- a/data/evgen/intranuke/tot_xsec/pipA_cex/pip93_cex.txt +++ b/data/evgen/intranuke/tot_xsec/pipA_cex/pip93_cex.txt @@ -1,30 +1,42 @@ -## pi+ -> nb-93 -## File generated by MakeTextFiles.cxx -## KE cex_xs -85 100. -125 105. -165 130. -205 130. -245 170. -315 154. -0 11.342 -50 40.8313 -100 272.06 -150 309.924 -200 281.877 -250 258.036 -300 244.013 -350 234.196 -400 114.995 -450 0 -500 0 -550 0 -600 0 -650 0 -700 0 -750 0 -800 0 -850 0 -900 0 -950 0 -1000 0 +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/pipA_inelas/al_inelas_combined.txt b/data/evgen/intranuke/tot_xsec/pipA_inelas/al_inelas_combined.txt new file mode 100644 index 000000000..a766a054e --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/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/pipA_inelas/al_inelas_smooth.txt b/data/evgen/intranuke/tot_xsec/pipA_inelas/al_inelas_smooth.txt new file mode 100644 index 000000000..4bd7c705c --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/pipA_inelas/al_inelas_smooth.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/pipA_inelas/ar_inelas_combined.txt b/data/evgen/intranuke/tot_xsec/pipA_inelas/ar_inelas_combined.txt new file mode 100644 index 000000000..554e72b9d --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/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/pipA_inelas/ar_inelas_smooth.txt b/data/evgen/intranuke/tot_xsec/pipA_inelas/ar_inelas_smooth.txt new file mode 100644 index 000000000..bcba698b1 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/pipA_inelas/ar_inelas_smooth.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/pipA_inelas/ashery-pip-al-inelas.dat b/data/evgen/intranuke/tot_xsec/pipA_inelas/ashery-pip-al-inelas.dat index feae215c8..35004fced 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 15585822a..6d1ee8d91 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 9b97b4394..06a98b19c 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 019de68d8..b2f98c936 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 f46c1ac4d..1e44752fd 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_inelas/bi_inelas_combined.txt b/data/evgen/intranuke/tot_xsec/pipA_inelas/bi_inelas_combined.txt new file mode 100644 index 000000000..b5f3cd768 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/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/pipA_inelas/bi_inelas_smooth.txt b/data/evgen/intranuke/tot_xsec/pipA_inelas/bi_inelas_smooth.txt new file mode 100644 index 000000000..bf34bfb67 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/pipA_inelas/bi_inelas_smooth.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/pipA_inelas/c_inelas_combined.txt b/data/evgen/intranuke/tot_xsec/pipA_inelas/c_inelas_combined.txt new file mode 100644 index 000000000..be3c23c2a --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/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/pipA_inelas/c_inelas_smooth.txt b/data/evgen/intranuke/tot_xsec/pipA_inelas/c_inelas_smooth.txt new file mode 100644 index 000000000..4bd7172a4 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/pipA_inelas/c_inelas_smooth.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/pipA_inelas/fe_inelas_combined.txt b/data/evgen/intranuke/tot_xsec/pipA_inelas/fe_inelas_combined.txt new file mode 100644 index 000000000..c35b4cddf --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/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/pipA_inelas/fe_inelas_smooth.txt b/data/evgen/intranuke/tot_xsec/pipA_inelas/fe_inelas_smooth.txt new file mode 100644 index 000000000..5e9f14a8c --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/pipA_inelas/fe_inelas_smooth.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/pipA_inelas/he3_inelas_combined.txt b/data/evgen/intranuke/tot_xsec/pipA_inelas/he3_inelas_combined.txt new file mode 100644 index 000000000..ef82f2a7d --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/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/pipA_inelas/he3_inelas_smooth.txt b/data/evgen/intranuke/tot_xsec/pipA_inelas/he3_inelas_smooth.txt new file mode 100644 index 000000000..3d923e78d --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/pipA_inelas/he3_inelas_smooth.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/pipA_inelas/incl-pip-al-inelas.dat b/data/evgen/intranuke/tot_xsec/pipA_inelas/incl-pip-al-inelas.dat new file mode 100644 index 000000000..2e481bdf3 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/pipA_inelas/incl-pip-al-inelas.dat @@ -0,0 +1,7 @@ +# results from INCLv5 program - mar, 2025 - sd, mi +# to be used for hA2025 at low energy +#KE xs +1 .05 +5 .23 +20 14.8 +50 105.5 diff --git a/data/evgen/intranuke/tot_xsec/pipA_inelas/incl-pip-ar-inelas.dat b/data/evgen/intranuke/tot_xsec/pipA_inelas/incl-pip-ar-inelas.dat new file mode 100644 index 000000000..4ba7fa0fe --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/pipA_inelas/incl-pip-ar-inelas.dat @@ -0,0 +1,7 @@ +# results from INCLv5 program - mar, 2025 - sd, mi +# to be used for hA2025 at low energy +#KE xs +1 .01 +5 .38 +20 29.2 +50 156.4 diff --git a/data/evgen/intranuke/tot_xsec/pipA_inelas/incl-pip-bi-inelas.dat b/data/evgen/intranuke/tot_xsec/pipA_inelas/incl-pip-bi-inelas.dat new file mode 100644 index 000000000..556a7c9b8 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/pipA_inelas/incl-pip-bi-inelas.dat @@ -0,0 +1,7 @@ +# results from INCLv5 program - mar, 2025 - sd, mi +# to be used for hA2025 at low energy +#KE xs +1 0 +5 0 +20 22.9 +50 273.5 diff --git a/data/evgen/intranuke/tot_xsec/pipA_inelas/incl-pip-c-inelas.dat b/data/evgen/intranuke/tot_xsec/pipA_inelas/incl-pip-c-inelas.dat new file mode 100644 index 000000000..bfc2e1f1e --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/pipA_inelas/incl-pip-c-inelas.dat @@ -0,0 +1,7 @@ +# results from INCLv5 program - mar, 2025 - sd, mi +# to be used for hA2025 at low energy +#KE xs +1 0 +4 0 +20 0.3 +50 27.6 diff --git a/data/evgen/intranuke/tot_xsec/pipA_inelas/incl-pip-fe-inelas.dat b/data/evgen/intranuke/tot_xsec/pipA_inelas/incl-pip-fe-inelas.dat new file mode 100644 index 000000000..9d13d81f2 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/pipA_inelas/incl-pip-fe-inelas.dat @@ -0,0 +1,7 @@ +# results from INCLv5 program - mar, 2025 - sd, mi +# to be used for hA2025 at low energy +#KE xs +1 0 +5 0.04 +20 21.8 +50 159.5 diff --git a/data/evgen/intranuke/tot_xsec/pipA_inelas/incl-pip-he3-inelas.dat b/data/evgen/intranuke/tot_xsec/pipA_inelas/incl-pip-he3-inelas.dat new file mode 100644 index 000000000..d34162605 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/pipA_inelas/incl-pip-he3-inelas.dat @@ -0,0 +1,7 @@ +# results from INCLv5 program - mar, 2025 - sd, mi +# to be used for hA2025 at low energy +#KE xs +1 0 +5 0 +20 0 +50 5 diff --git a/data/evgen/intranuke/tot_xsec/pipA_inelas/incl-pip-li-inelas.dat b/data/evgen/intranuke/tot_xsec/pipA_inelas/incl-pip-li-inelas.dat new file mode 100644 index 000000000..993fb8c50 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/pipA_inelas/incl-pip-li-inelas.dat @@ -0,0 +1,7 @@ +# results from INCLv5 program - mar, 2025 - sd, mi +# to be used for hA2025 at low energy +#KE xs +1 .01 +5 .21 +20 8.7 +50 73.5 diff --git a/data/evgen/intranuke/tot_xsec/pipA_inelas/incl-pip-nb-inelas.dat b/data/evgen/intranuke/tot_xsec/pipA_inelas/incl-pip-nb-inelas.dat new file mode 100644 index 000000000..1a8679867 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/pipA_inelas/incl-pip-nb-inelas.dat @@ -0,0 +1,7 @@ +# results from INCLv5 program - mar, 2025 - sd, mi +# to be used for hA2025 at low energy +#KE xs +1 0 +5 0 +20 34 +50 209.4 diff --git a/data/evgen/intranuke/tot_xsec/pipA_inelas/li_inelas_combined.txt b/data/evgen/intranuke/tot_xsec/pipA_inelas/li_inelas_combined.txt new file mode 100644 index 000000000..2cd246865 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/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/pipA_inelas/li_inelas_smooth.txt b/data/evgen/intranuke/tot_xsec/pipA_inelas/li_inelas_smooth.txt new file mode 100644 index 000000000..6c4f052fb --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/pipA_inelas/li_inelas_smooth.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/pipA_inelas/nb_inelas_combined.txt b/data/evgen/intranuke/tot_xsec/pipA_inelas/nb_inelas_combined.txt new file mode 100644 index 000000000..a5fba324c --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/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/pipA_inelas/nb_inelas_smooth.txt b/data/evgen/intranuke/tot_xsec/pipA_inelas/nb_inelas_smooth.txt new file mode 100644 index 000000000..f3dcc9466 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/pipA_inelas/nb_inelas_smooth.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/pipA_inelas/pip12_inelas.txt b/data/evgen/intranuke/tot_xsec/pipA_inelas/pip12_inelas.txt index 62d3f0745..4bd7172a4 100644 --- a/data/evgen/intranuke/tot_xsec/pipA_inelas/pip12_inelas.txt +++ b/data/evgen/intranuke/tot_xsec/pipA_inelas/pip12_inelas.txt @@ -1,32 +1,42 @@ -## pi+ -> c-12 -## File generated by MakeTextFiles.cxx -## KE inelas_xs -125 213. -165 207. -205 210. -245 224. -315 200. -67 71 -85 108 -100 146 -0 20 -50 46 -100 50.3801 -150 45.6461 -200 33.9687 -250 28.1389 -300 24.891 -350 23.5983 -400 23.3297 -450 23.5518 -500 23.9278 -550 23.0075 -600 20.6154 -650 18.055 -700 16.5761 -750 16.2682 -800 16.483 -850 16.5546 -900 16.0927 -950 15.3622 -1000 14.7785 +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/pipA_inelas/pip209_inelas.txt b/data/evgen/intranuke/tot_xsec/pipA_inelas/pip209_inelas.txt index 050f1a08d..bf34bfb67 100644 --- a/data/evgen/intranuke/tot_xsec/pipA_inelas/pip209_inelas.txt +++ b/data/evgen/intranuke/tot_xsec/pipA_inelas/pip209_inelas.txt @@ -1,29 +1,42 @@ -## pi+ -> bi-209 -## File generated by MakeTextFiles.cxx -## KE inelas_xs -125 1257. -165 696. -205 1060. -245 1100. -315 1028. -0 62.7214 -50 144.259 -100 338.508 -150 306.7 -200 228.238 -250 189.068 -300 167.245 -350 158.559 -400 156.754 -450 158.246 -500 160.773 -550 154.589 -600 138.517 -650 121.313 -700 111.376 -750 109.307 -800 110.751 -850 111.232 -900 108.128 -950 103.22 -1000 99.2979 +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/pipA_inelas/pip27_inelas.txt b/data/evgen/intranuke/tot_xsec/pipA_inelas/pip27_inelas.txt index baa21b427..4bd7c705c 100644 --- a/data/evgen/intranuke/tot_xsec/pipA_inelas/pip27_inelas.txt +++ b/data/evgen/intranuke/tot_xsec/pipA_inelas/pip27_inelas.txt @@ -1,8 +1,42 @@ -## pi+ -> al-27 -## File generated by MakeTextFiles.cxx -## KE inelas_xs -125 342. -165 321. -205 269. -245 296. -315 307. +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/pipA_inelas/pip3_inelas.txt b/data/evgen/intranuke/tot_xsec/pipA_inelas/pip3_inelas.txt index fddb7ccf2..3d923e78d 100644 --- a/data/evgen/intranuke/tot_xsec/pipA_inelas/pip3_inelas.txt +++ b/data/evgen/intranuke/tot_xsec/pipA_inelas/pip3_inelas.txt @@ -1,24 +1,42 @@ -## pi+ -> he3-3 -## File generated by MakeTextFiles.cxx -## KE inelas_xs -0 11.487 -50 26.4201 -100 19.9933 -150 18.1147 -200 13.4805 -250 11.1669 -300 9.87801 -350 9.365 -400 9.25841 -450 9.34652 -500 9.49574 -550 9.13052 -600 8.18123 -650 7.16515 -700 6.57823 -750 6.45602 -800 6.54129 -850 6.56971 -900 6.38639 -950 6.09648 -1000 5.86485 +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/pipA_inelas/pip40_inelas.txt b/data/evgen/intranuke/tot_xsec/pipA_inelas/pip40_inelas.txt index 0f904a970..bcba698b1 100644 --- a/data/evgen/intranuke/tot_xsec/pipA_inelas/pip40_inelas.txt +++ b/data/evgen/intranuke/tot_xsec/pipA_inelas/pip40_inelas.txt @@ -1,6 +1,4 @@ -## pi+ -> ca-40 -## File generated by MakeTextFiles.cxx -## KE inelas_xs -67 159 -85 228 -100 288 +1.0 0.010000 +5.0 0.380000 +20.0 29.200000 +50.0 156.400000 diff --git a/data/evgen/intranuke/tot_xsec/pipA_inelas/pip56_inelas.txt b/data/evgen/intranuke/tot_xsec/pipA_inelas/pip56_inelas.txt index 407fb6b10..5e9f14a8c 100644 --- a/data/evgen/intranuke/tot_xsec/pipA_inelas/pip56_inelas.txt +++ b/data/evgen/intranuke/tot_xsec/pipA_inelas/pip56_inelas.txt @@ -1,29 +1,42 @@ -## pi+ -> fe-56 -## File generated by MakeTextFiles.cxx -## KE inelas_xs -125 644. -165 474. -205 360. -245 430. -315 389. -0 37.0367 -50 85.1845 -100 140.69 -150 127.47 -200 94.86 -250 78.58 -300 69.51 -350 65.9 -400 65.15 -450 65.77 -500 66.82 -550 64.25 -600 57.57 -650 50.42 -700 46.29 -750 45.43 -800 46.03 -850 46.23 -900 44.94 -950 42.9 -1000 41.27 +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/pipA_inelas/pip7_inelas.txt b/data/evgen/intranuke/tot_xsec/pipA_inelas/pip7_inelas.txt index 3a7e69d21..6c4f052fb 100644 --- a/data/evgen/intranuke/tot_xsec/pipA_inelas/pip7_inelas.txt +++ b/data/evgen/intranuke/tot_xsec/pipA_inelas/pip7_inelas.txt @@ -1,29 +1,42 @@ -## pi+ -> li-7 -## File generated by MakeTextFiles.cxx -## KE inelas_xs -125 131. -165 191. -205 230. -245 209. -315 188. -0 16.1212 -50 37.0787 -100 35.1725 -150 31.8675 -200 23.715 -250 19.645 -300 17.3775 -350 16.475 -400 16.2875 -450 16.4425 -500 16.705 -550 16.0625 -600 14.3925 -650 12.605 -700 11.5725 -750 11.3575 -800 11.5075 -850 11.5575 -900 11.235 -950 10.725 -1000 10.3175 +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/pipA_inelas/pip93_inelas.txt b/data/evgen/intranuke/tot_xsec/pipA_inelas/pip93_inelas.txt index c3e3e0504..f3dcc9466 100644 --- a/data/evgen/intranuke/tot_xsec/pipA_inelas/pip93_inelas.txt +++ b/data/evgen/intranuke/tot_xsec/pipA_inelas/pip93_inelas.txt @@ -1,29 +1,42 @@ -## pi+ -> nb-93 -## File generated by MakeTextFiles.cxx -## KE inelas_xs -125 652. -165 552. -205 618. -245 690. -315 579. -0 45.3681 -50 104.347 -100 197.3 -150 178.76 -200 133.029 -250 110.198 -300 97.4789 -350 92.4163 -400 91.3645 -450 92.234 -500 93.7065 -550 90.1024 -600 80.7346 -650 70.7076 -700 64.9158 -750 63.7098 -800 64.5512 -850 64.8317 -900 63.0226 -950 60.1618 -1000 57.8759 +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/pipA_pipro/al_pipro_combined.txt b/data/evgen/intranuke/tot_xsec/pipA_pipro/al_pipro_combined.txt new file mode 100644 index 000000000..f45555d11 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/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/pipA_pipro/al_pipro_smooth.txt b/data/evgen/intranuke/tot_xsec/pipA_pipro/al_pipro_smooth.txt new file mode 100644 index 000000000..e7fa2503b --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/pipA_pipro/al_pipro_smooth.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_pipro/bi_pipro_combined.txt b/data/evgen/intranuke/tot_xsec/pipA_pipro/bi_pipro_combined.txt new file mode 100644 index 000000000..bdcefbe6a --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/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/pipA_pipro/bi_pipro_smooth.txt b/data/evgen/intranuke/tot_xsec/pipA_pipro/bi_pipro_smooth.txt new file mode 100644 index 000000000..bc0a5ff66 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/pipA_pipro/bi_pipro_smooth.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/pipA_pipro/c_pipro_combined.txt b/data/evgen/intranuke/tot_xsec/pipA_pipro/c_pipro_combined.txt new file mode 100644 index 000000000..cb7ba7d44 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/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/pipA_pipro/c_pipro_smooth.txt b/data/evgen/intranuke/tot_xsec/pipA_pipro/c_pipro_smooth.txt new file mode 100644 index 000000000..b89208417 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/pipA_pipro/c_pipro_smooth.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/pipA_pipro/fe_pipro_combined.txt b/data/evgen/intranuke/tot_xsec/pipA_pipro/fe_pipro_combined.txt new file mode 100644 index 000000000..801f8e912 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/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/pipA_pipro/fe_pipro_smooth.txt b/data/evgen/intranuke/tot_xsec/pipA_pipro/fe_pipro_smooth.txt new file mode 100644 index 000000000..ba1dac6d4 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/pipA_pipro/fe_pipro_smooth.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/pipA_pipro/li_pipro_combined.txt b/data/evgen/intranuke/tot_xsec/pipA_pipro/li_pipro_combined.txt new file mode 100644 index 000000000..560b8472c --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/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/pipA_pipro/li_pipro_smooth.txt b/data/evgen/intranuke/tot_xsec/pipA_pipro/li_pipro_smooth.txt new file mode 100644 index 000000000..b3ce0cba1 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/pipA_pipro/li_pipro_smooth.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/pipA_pipro/nb_pipro_combined.txt b/data/evgen/intranuke/tot_xsec/pipA_pipro/nb_pipro_combined.txt new file mode 100644 index 000000000..e37e450fa --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/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/pipA_pipro/nb_pipro_smooth.txt b/data/evgen/intranuke/tot_xsec/pipA_pipro/nb_pipro_smooth.txt new file mode 100644 index 000000000..4bbfbb006 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/pipA_pipro/nb_pipro_smooth.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/pipA_pipro/pip12_pipro.txt b/data/evgen/intranuke/tot_xsec/pipA_pipro/pip12_pipro.txt index ac0b4ca26..b89208417 100644 --- a/data/evgen/intranuke/tot_xsec/pipA_pipro/pip12_pipro.txt +++ b/data/evgen/intranuke/tot_xsec/pipA_pipro/pip12_pipro.txt @@ -1,24 +1,42 @@ -## pi+ -> c-12 -## 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 29.3636 -450 60.8758 -500 65.8891 -550 73.0509 -600 81.287 -650 90.2394 -700 99.9079 -750 108.86 -800 116.022 -850 120.677 -900 123.9 -950 126.407 -1000 129.271 +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/pipA_pipro/pip209_pipro.txt b/data/evgen/intranuke/tot_xsec/pipA_pipro/pip209_pipro.txt index 94e108a2c..bc0a5ff66 100644 --- a/data/evgen/intranuke/tot_xsec/pipA_pipro/pip209_pipro.txt +++ b/data/evgen/intranuke/tot_xsec/pipA_pipro/pip209_pipro.txt @@ -1,24 +1,42 @@ -## pi+ -> bi-209 -## 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 197.296 -450 409.029 -500 442.714 -550 490.835 -600 546.174 -650 606.326 -700 671.289 -750 731.441 -800 779.562 -850 810.84 -900 832.495 -950 849.337 -1000 868.586 +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/pipA_pipro/pip27_pipro.txt b/data/evgen/intranuke/tot_xsec/pipA_pipro/pip27_pipro.txt new file mode 100644 index 000000000..e7fa2503b --- /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_pipro/pip56_pipro.txt b/data/evgen/intranuke/tot_xsec/pipA_pipro/pip56_pipro.txt index df358ea45..ba1dac6d4 100644 --- a/data/evgen/intranuke/tot_xsec/pipA_pipro/pip56_pipro.txt +++ b/data/evgen/intranuke/tot_xsec/pipA_pipro/pip56_pipro.txt @@ -1,24 +1,42 @@ -## pi+ -> fe-56 -## 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 82 -450 170 -500 184 -550 204 -600 227 -650 252 -700 279 -750 304 -800 324 -850 337 -900 346 -950 353 -1000 361 +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/pipA_pipro/pip7_pipro.txt b/data/evgen/intranuke/tot_xsec/pipA_pipro/pip7_pipro.txt index 545ff5f0b..b3ce0cba1 100644 --- a/data/evgen/intranuke/tot_xsec/pipA_pipro/pip7_pipro.txt +++ b/data/evgen/intranuke/tot_xsec/pipA_pipro/pip7_pipro.txt @@ -1,24 +1,42 @@ -## pi+ -> li-7 -## 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 20.5 -450 42.5 -500 46 -550 51 -600 56.75 -650 63 -700 69.75 -750 76 -800 81 -850 84.25 -900 86.5 -950 88.25 -1000 90.25 +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/pipA_pipro/pip93_pipro.txt b/data/evgen/intranuke/tot_xsec/pipA_pipro/pip93_pipro.txt index 8541808ce..4bbfbb006 100644 --- a/data/evgen/intranuke/tot_xsec/pipA_pipro/pip93_pipro.txt +++ b/data/evgen/intranuke/tot_xsec/pipA_pipro/pip93_pipro.txt @@ -1,24 +1,42 @@ -## pi+ -> nb-93 -## 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 114.995 -450 238.403 -500 258.036 -550 286.084 -600 318.338 -650 353.398 -700 391.262 -750 426.321 -800 454.369 -850 472.599 -900 485.221 -950 495.037 -1000 506.256 +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/pipA_tot/al_tot_combined.txt b/data/evgen/intranuke/tot_xsec/pipA_tot/al_tot_combined.txt new file mode 100644 index 000000000..3ea6ede51 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/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/pipA_tot/al_tot_smooth.txt b/data/evgen/intranuke/tot_xsec/pipA_tot/al_tot_smooth.txt new file mode 100644 index 000000000..361998c4b --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/pipA_tot/al_tot_smooth.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/pipA_tot/ar_tot_combined.txt b/data/evgen/intranuke/tot_xsec/pipA_tot/ar_tot_combined.txt new file mode 100644 index 000000000..76d44313d --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/pipA_tot/ar_tot_combined.txt @@ -0,0 +1,5 @@ +#KE XS sig +1 16.0 0 +5 51.2 0 +20 244.6 0 +50 511.2 0 diff --git a/data/evgen/intranuke/tot_xsec/pipA_tot/ar_tot_smooth.txt b/data/evgen/intranuke/tot_xsec/pipA_tot/ar_tot_smooth.txt new file mode 100644 index 000000000..37ddad5de --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/pipA_tot/ar_tot_smooth.txt @@ -0,0 +1,4 @@ +1.0 16.000000 +5.0 51.200000 +20.0 244.600000 +50.0 511.200000 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 000000000..31f6479df --- /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 000000000..e2fe89a8b --- /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 000000000..2882e3b0b --- /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 000000000..25a3329fb --- /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 000000000..a948b84d5 --- /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 000000000..2f9323432 --- /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/bi_tot_combined.txt b/data/evgen/intranuke/tot_xsec/pipA_tot/bi_tot_combined.txt new file mode 100644 index 000000000..2b0280641 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/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/pipA_tot/bi_tot_smooth.txt b/data/evgen/intranuke/tot_xsec/pipA_tot/bi_tot_smooth.txt new file mode 100644 index 000000000..00fca3ece --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/pipA_tot/bi_tot_smooth.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/pipA_tot/c_tot_combined.txt b/data/evgen/intranuke/tot_xsec/pipA_tot/c_tot_combined.txt new file mode 100644 index 000000000..2c5894f96 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/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/pipA_tot/c_tot_smooth.txt b/data/evgen/intranuke/tot_xsec/pipA_tot/c_tot_smooth.txt new file mode 100644 index 000000000..555cb56f8 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/pipA_tot/c_tot_smooth.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/pipA_tot/ca_tot_combined.txt b/data/evgen/intranuke/tot_xsec/pipA_tot/ca_tot_combined.txt new file mode 100644 index 000000000..39a2cf7dc --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/pipA_tot/ca_tot_combined.txt @@ -0,0 +1,3 @@ +#KE XS sig +50.0 439 66 +65.0 563 43 diff --git a/data/evgen/intranuke/tot_xsec/pipA_tot/ca_tot_smooth.txt b/data/evgen/intranuke/tot_xsec/pipA_tot/ca_tot_smooth.txt new file mode 100644 index 000000000..88f6d7db3 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/pipA_tot/ca_tot_smooth.txt @@ -0,0 +1,2 @@ +50.0 439.000000 +65.0 563.000000 diff --git a/data/evgen/intranuke/tot_xsec/pipA_tot/fe_tot_combined.txt b/data/evgen/intranuke/tot_xsec/pipA_tot/fe_tot_combined.txt new file mode 100644 index 000000000..d30f8b995 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/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/pipA_tot/fe_tot_smooth.txt b/data/evgen/intranuke/tot_xsec/pipA_tot/fe_tot_smooth.txt new file mode 100644 index 000000000..41c599885 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/pipA_tot/fe_tot_smooth.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/pipA_tot/he3_tot_combined.txt b/data/evgen/intranuke/tot_xsec/pipA_tot/he3_tot_combined.txt new file mode 100644 index 000000000..707e09107 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/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/pipA_tot/he3_tot_smooth.txt b/data/evgen/intranuke/tot_xsec/pipA_tot/he3_tot_smooth.txt new file mode 100644 index 000000000..b125ad30a --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/pipA_tot/he3_tot_smooth.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/pipA_tot/incl-pip-al-reac.dat b/data/evgen/intranuke/tot_xsec/pipA_tot/incl-pip-al-reac.dat new file mode 100644 index 000000000..12ece5924 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/pipA_tot/incl-pip-al-reac.dat @@ -0,0 +1,7 @@ +# results from INCLv5 program - mar, 2025 - sd, mi +# to be used for hA2025 at low energy +#KE xs +1 20 +5 38.4 +20 118.4 +50 350 diff --git a/data/evgen/intranuke/tot_xsec/pipA_tot/incl-pip-ar-reac.dat b/data/evgen/intranuke/tot_xsec/pipA_tot/incl-pip-ar-reac.dat new file mode 100644 index 000000000..895756253 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/pipA_tot/incl-pip-ar-reac.dat @@ -0,0 +1,7 @@ +# results from INCLv5 program - mar, 2025 - sd, mi +# to be used for hA2025 at low energy +#KE xs +1 16 +5 51.2 +20 244.6 +50 511.2 diff --git a/data/evgen/intranuke/tot_xsec/pipA_tot/incl-pip-bi-reac.dat b/data/evgen/intranuke/tot_xsec/pipA_tot/incl-pip-bi-reac.dat new file mode 100644 index 000000000..c57035324 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/pipA_tot/incl-pip-bi-reac.dat @@ -0,0 +1,7 @@ +# results from INCLv5 program - mar, 2025 - sd, mi +# to be used for hA2025 at low energy +#KE xs +1 0 +5 0 +20 448 +50 1257 diff --git a/data/evgen/intranuke/tot_xsec/pipA_tot/incl-pip-c-reac.dat b/data/evgen/intranuke/tot_xsec/pipA_tot/incl-pip-c-reac.dat new file mode 100644 index 000000000..b2e96360d --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/pipA_tot/incl-pip-c-reac.dat @@ -0,0 +1,7 @@ +# results from INCLv5 program - mar, 2025 - sd, mi +# to be used for hA2025 at low energy +#KE xs +1 0 +4 5.1 +20 41.8 +50 131.7 \ No newline at end of file diff --git a/data/evgen/intranuke/tot_xsec/pipA_tot/incl-pip-fe-reac.dat b/data/evgen/intranuke/tot_xsec/pipA_tot/incl-pip-fe-reac.dat new file mode 100644 index 000000000..fc8bd1bec --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/pipA_tot/incl-pip-fe-reac.dat @@ -0,0 +1,7 @@ +# results from INCLv5 program - mar, 2025 - sd, mi +# to be used for hA2025 at low energy +#KE xs +1 0 +5 15.4 +20 247.7 +50 578.0 diff --git a/data/evgen/intranuke/tot_xsec/pipA_tot/incl-pip-he3-reac.dat b/data/evgen/intranuke/tot_xsec/pipA_tot/incl-pip-he3-reac.dat new file mode 100644 index 000000000..4ffcc3266 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/pipA_tot/incl-pip-he3-reac.dat @@ -0,0 +1,7 @@ +# results from INCLv5 program - mar, 2025 - sd, mi +# to be used for hA2025 at low energy +#KE xs +1 0 +5 0 +20 11 +50 16 diff --git a/data/evgen/intranuke/tot_xsec/pipA_tot/incl-pip-li-reac.dat b/data/evgen/intranuke/tot_xsec/pipA_tot/incl-pip-li-reac.dat new file mode 100644 index 000000000..486151350 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/pipA_tot/incl-pip-li-reac.dat @@ -0,0 +1,7 @@ +# results from INCLv5 program - mar, 2025 - sd, mi +# to be used for hA2025 at low energy +#KE xs +1 16 +5 30.7 +20 72.3 +50 172.6 diff --git a/data/evgen/intranuke/tot_xsec/pipA_tot/incl-pip-nb-reac.dat b/data/evgen/intranuke/tot_xsec/pipA_tot/incl-pip-nb-reac.dat new file mode 100644 index 000000000..875d469e4 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/pipA_tot/incl-pip-nb-reac.dat @@ -0,0 +1,7 @@ +# results from INCLv5 program - mar, 2025 - sd, mi +# to be used for hA2025 at low energy +#KE xs +1 0 +5 0 +20 373.2 +50 818.1 diff --git a/data/evgen/intranuke/tot_xsec/pipA_tot/li_tot_combined.txt b/data/evgen/intranuke/tot_xsec/pipA_tot/li_tot_combined.txt new file mode 100644 index 000000000..4e7b7f516 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/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/pipA_tot/li_tot_smooth.txt b/data/evgen/intranuke/tot_xsec/pipA_tot/li_tot_smooth.txt new file mode 100644 index 000000000..a25d2c8d5 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/pipA_tot/li_tot_smooth.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/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 000000000..d5d1eb009 --- /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 000000000..f7b3c128f --- /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 000000000..1e3806ca7 --- /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/nb_tot_combined.txt b/data/evgen/intranuke/tot_xsec/pipA_tot/nb_tot_combined.txt new file mode 100644 index 000000000..9df1f9145 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/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/pipA_tot/nb_tot_smooth.txt b/data/evgen/intranuke/tot_xsec/pipA_tot/nb_tot_smooth.txt new file mode 100644 index 000000000..6fcf39043 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/pipA_tot/nb_tot_smooth.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/pipA_tot/o_tot_combined.txt b/data/evgen/intranuke/tot_xsec/pipA_tot/o_tot_combined.txt new file mode 100644 index 000000000..0867117e5 --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/pipA_tot/o_tot_combined.txt @@ -0,0 +1,2 @@ +#KE XS sig +50.0 166 19 diff --git a/data/evgen/intranuke/tot_xsec/pipA_tot/o_tot_smooth.txt b/data/evgen/intranuke/tot_xsec/pipA_tot/o_tot_smooth.txt new file mode 100644 index 000000000..60a7eae5a --- /dev/null +++ b/data/evgen/intranuke/tot_xsec/pipA_tot/o_tot_smooth.txt @@ -0,0 +1 @@ +50.0 166.000000 diff --git a/data/evgen/intranuke/tot_xsec/pipA_tot/pip12_tot.txt b/data/evgen/intranuke/tot_xsec/pipA_tot/pip12_tot.txt index cb984ec58..555cb56f8 100644 --- a/data/evgen/intranuke/tot_xsec/pipA_tot/pip12_tot.txt +++ b/data/evgen/intranuke/tot_xsec/pipA_tot/pip12_tot.txt @@ -1,51 +1,42 @@ -## pi+ -> c-12 -## File generated by MakeTextFiles.cxx -## KE tot_xs -85 465. -125 638. -165 670. -205 626. -245 552. -315 445. -89. 501.3 -115. 624.6 -128. 646.9 -156. 682.7 -187. 640.9 -229. 569.4 -259. 522.7 -289. 473.7 -337. 408.4 -409. 352.7 -482. 304.4 -567. 291.9 -696. 297.7 -855. 322.2 -42. 214 -45. 228 -46.5 232 -48. 238 -49.5 259 -54. 253 -65. 329 -0 55 -50 152 -100 210.083 -150 207.441 -200 162.631 -250 136.187 -300 124.318 -350 116.88 -400 114.416 -450 116.437 -500 121.378 -550 126.415 -600 130.036 -650 134.452 -700 141.776 -750 150.228 -800 157.659 -850 161.542 -900 163.356 -950 164.065 -1000 165.844 +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/pipA_tot/pip16_tot.txt b/data/evgen/intranuke/tot_xsec/pipA_tot/pip16_tot.txt index e5772975d..60a7eae5a 100644 --- a/data/evgen/intranuke/tot_xsec/pipA_tot/pip16_tot.txt +++ b/data/evgen/intranuke/tot_xsec/pipA_tot/pip16_tot.txt @@ -1,30 +1 @@ -## pi+ -> o-16 -## File generated by MakeTextFiles.cxx -## KE tot_xs -89. 674.3 -115. 749.1 -128. 783.1 -156. 818.2 -187. 772.6 -229. 688.9 -0 68.0489 -50 189.138 -100 260.307 -150 256.618 -200 200.663 -250 167.693 -300 152.991 -350 143.745 -400 140.689 -450 143.114 -500 149.071 -550 155.095 -600 159.339 -650 164.562 -700 173.378 -750 183.604 -800 192.61 -850 197.259 -900 199.395 -950 200.186 -1000 202.309 +50.0 166.000000 diff --git a/data/evgen/intranuke/tot_xsec/pipA_tot/pip209_tot.txt b/data/evgen/intranuke/tot_xsec/pipA_tot/pip209_tot.txt index d70378a96..00fca3ece 100644 --- a/data/evgen/intranuke/tot_xsec/pipA_tot/pip209_tot.txt +++ b/data/evgen/intranuke/tot_xsec/pipA_tot/pip209_tot.txt @@ -1,30 +1,42 @@ -## pi+ -> bi-209 -## File generated by MakeTextFiles.cxx -## KE tot_xs -85 4200. -125 4080. -165 3950. -205 3840. -245 3810. -315 3500. -0 600.902 -50 1733.38 -100 1819.31 -150 1767.32 -200 1348.88 -250 1105.55 -300 1003.04 -350 936.612 -400 914.994 -450 926.988 -500 958.167 -550 986.564 -600 1000.85 -650 1021.6 -700 1066.9 -750 1122.82 -800 1172.99 -850 1195.27 -900 1203.17 -950 1203.12 -1000 1212.81 +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/pipA_tot/pip27_tot.txt b/data/evgen/intranuke/tot_xsec/pipA_tot/pip27_tot.txt index dbbedfa1d..361998c4b 100644 --- a/data/evgen/intranuke/tot_xsec/pipA_tot/pip27_tot.txt +++ b/data/evgen/intranuke/tot_xsec/pipA_tot/pip27_tot.txt @@ -1,10 +1,42 @@ -## pi+ -> al-27 -## File generated by MakeTextFiles.cxx -## KE tot_xs -85 1010. -125 1140. -165 1130. -205 1065. -245 960. -315 810. -50.0 596.7 +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/pipA_tot/pip3_tot.txt b/data/evgen/intranuke/tot_xsec/pipA_tot/pip3_tot.txt index 333a6f506..b125ad30a 100644 --- a/data/evgen/intranuke/tot_xsec/pipA_tot/pip3_tot.txt +++ b/data/evgen/intranuke/tot_xsec/pipA_tot/pip3_tot.txt @@ -1,24 +1,42 @@ -## pi+ -> he3-3 -## File generated by MakeTextFiles.cxx -## KE tot_xs -0 21.8587 -50 58.7583 -100 75.4637 -150 75.0791 -200 59.5722 -250 50.3509 -300 46.0827 -350 43.4496 -400 42.5701 -450 43.4026 -500 45.4029 -550 47.5073 -600 49.1393 -650 51.0651 -700 54.0474 -750 57.4183 -800 60.3626 -850 61.9774 -900 62.7803 -950 63.1553 -1000 63.9053 +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/pipA_tot/pip40_tot.txt b/data/evgen/intranuke/tot_xsec/pipA_tot/pip40_tot.txt index 113523f82..88f6d7db3 100644 --- a/data/evgen/intranuke/tot_xsec/pipA_tot/pip40_tot.txt +++ b/data/evgen/intranuke/tot_xsec/pipA_tot/pip40_tot.txt @@ -1,4 +1,2 @@ -## pi+ -> ca-40 -## File generated by MakeTextFiles.cxx -## KE tot_xs -50.0 1108.0 +50.0 439.000000 +65.0 563.000000 diff --git a/data/evgen/intranuke/tot_xsec/pipA_tot/pip56_tot.txt b/data/evgen/intranuke/tot_xsec/pipA_tot/pip56_tot.txt index 0c727ab54..41c599885 100644 --- a/data/evgen/intranuke/tot_xsec/pipA_tot/pip56_tot.txt +++ b/data/evgen/intranuke/tot_xsec/pipA_tot/pip56_tot.txt @@ -1,30 +1,42 @@ -## pi+ -> fe-56 -## File generated by MakeTextFiles.cxx -## KE tot_xs -85 1900. -125 1915. -165 1840. -205 1750. -245 1610. -315 1400. -0 186.296 -50 529.184 -100 667.19 -150 653.05 -200 504.74 -250 417.93 -300 380.29 -350 356.27 -400 348.39 -450 353.72 -500 367.12 -550 380.11 -600 388.24 -650 398.81 -700 418.49 -750 441.92 -800 462.72 -850 472.81 -900 477.03 -950 478.06 -1000 482.58 +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/pipA_tot/pip7_tot.txt b/data/evgen/intranuke/tot_xsec/pipA_tot/pip7_tot.txt index cc97fa544..a25d2c8d5 100644 --- a/data/evgen/intranuke/tot_xsec/pipA_tot/pip7_tot.txt +++ b/data/evgen/intranuke/tot_xsec/pipA_tot/pip7_tot.txt @@ -1,44 +1,42 @@ -## pi+ -> li-7 -## File generated by MakeTextFiles.cxx -## KE tot_xs -85 260. -125 425. -165 495. -205 462. -245 394. -315 288. -89. 312.0 -115. 384.4 -128. 420.4 -156. 487.3 -187. 480.7 -229. 394.2 -259. 356.4 -289. 308.6 -337. 258.5 -409. 212.0 -482. 191.8 -567. 194.3 -696. 199.3 -855. 222.7 -0 37.6515 -50 102.921 -100 140.843 -150 139.488 -200 109.88 -250 92.3563 -300 84.3958 -350 79.4376 -400 77.79 -450 79.2231 -500 82.7019 -550 86.296 -600 88.9678 -650 92.1786 -700 97.3476 -750 103.26 -800 108.445 -850 111.21 -900 112.538 -950 113.102 -1000 114.376 +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/pipA_tot/pip93_tot.txt b/data/evgen/intranuke/tot_xsec/pipA_tot/pip93_tot.txt index 06f57cec8..6fcf39043 100644 --- a/data/evgen/intranuke/tot_xsec/pipA_tot/pip93_tot.txt +++ b/data/evgen/intranuke/tot_xsec/pipA_tot/pip93_tot.txt @@ -1,30 +1,42 @@ -## pi+ -> nb-93 -## File generated by MakeTextFiles.cxx -## KE tot_xs -85 2570. -125 2580. -165 2500. -205 2400. -245 2250. -315 2000. -0 289.21 -50 827.178 -100 980.227 -150 956.654 -200 735.838 -250 606.921 -300 551.646 -350 516.163 -400 504.559 -450 511.861 -500 530.431 -550 548.053 -600 558.356 -650 572.203 -700 599.374 -750 632.136 -800 661.333 -850 675.066 -900 680.516 -950 681.433 -1000 687.524 +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/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 000000000..fac663c44 --- /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/do_configure.sh b/do_configure.sh new file mode 100644 index 000000000..083ee3ba4 --- /dev/null +++ b/do_configure.sh @@ -0,0 +1,26 @@ +#!/bin/bash + +source ../genie_env.sh + +./configure \ + --enable-gsl \ + --enable-geant4 \ + --enable-rwght \ + --with-lhapdf6-lib=${LHAPDF_LIB} \ + --with-lhapdf6-inc=${LHAPDF_INC} \ + --disable-lhapdf5 \ + --enable-lhapdf6 \ + --with-optimiz-level=O2 \ + --with-log4cpp-inc=${LOG4CPP_INC} \ + --with-log4cpp-lib=${LOG4CPP_LIB} \ + --with-libxml2-inc=${LIBXML2_INC} \ + --with-libxml2-lib=${LIBXML2_LIB} \ + --disable-pythia8 \ + --enable-pythia6 \ + --enable-hepmc3 \ + --enable-incl \ + --with-incl-inc=${INCLXX_FQ_DIR}/include/inclxx \ + --with-incl-lib=${INCLXX_FQ_DIR}/lib \ + --with-boost-inc=${BOOST_FQ_DIR}/include \ + --with-boost-lib=${BOOST_FQ_DIR}/lib + --with-pythia6-lib=${PYTHIA_LIB} diff --git a/src/Physics/HadronTransport/2025/HAIntranuke2025.cxx b/src/Physics/HadronTransport/2025/HAIntranuke2025.cxx new file mode 100644 index 000000000..b6e398988 --- /dev/null +++ b/src/Physics/HadronTransport/2025/HAIntranuke2025.cxx @@ -0,0 +1,1631 @@ +//____________________________________________________________________________ +/* + Copyright (c) 2003-2024, The GENIE Collaboration + For the full text of the license visit http://copyright.genie-mc.org + + + Author: Steve Dytman , Pittsburgh Univ. + Aaron Meyer , Pittsburgh Univ. + Alex Bell, Pittsburgh Univ. + Hugh Gallagher , Tufts Univ. + Costas Andreopoulos , Rutherford Lab. + September 20, 2005 + + For the class documentation see the corresponding header file. + + Important revisions after version 2.0.0 : + @ Nov 30, 2007 - SD + Changed the hadron tracking algorithm to take into account the radial + nuclear density dependence. Using the somewhat empirical approach of + increasing the nuclear radius by a const (tunable) number times the tracked + particle's de Broglie wavelength as this helps getting the hadron+nucleus + cross sections right. + @ Mar 08, 2008 - CA + Fixed code retrieving the remnant nucleus which stopped working as soon as + simulation of nuclear de-excitation started pushing photons in the target + nucleus daughter list. + @ Jun 20, 2008 - CA + Fix a mem leak: The (clone of the) GHepParticle being re-scattered was not + deleted after it was added at the GHEP event record. + @ Jul 15, 2010 - AM + Major overhaul of the function of each interaction type. Absorption fates + changed to allow more than 6 particles at a time (up to 85 now). PiPro fates + now allow the pion to rescatter inside the nucleus, will be changed at a + later date. HAIntranuke class is now defined as derived from virtual class. + Intranuke. + @ Oct 10, 2011 - SD + Changes to keep reweighting alive. Add exception handling in ElasHA, InelasticHA, + and Inelastic. + @ Jan 24, 2012 - SD + Add option of doing K+. + @ Jan 9, 2015 - SD, NG, TG + Added 2014 version of INTRANUKE codes (new class) for independent development. + @ Aug 30, 2016 - SD + Fix memory leaks - Igor. +*/ +//____________________________________________________________________________ + +#include +#include +#include + +#include + +#include "Framework/Algorithm/AlgConfigPool.h" +#include "Framework/Algorithm/AlgFactory.h" +#include "Framework/Conventions/GBuild.h" +#include "Framework/Conventions/Constants.h" +#include "Framework/Conventions/Controls.h" +#include "Framework/EventGen/EVGThreadException.h" +#include "Framework/GHEP/GHepFlags.h" +#include "Framework/GHEP/GHepStatus.h" +#include "Framework/GHEP/GHepRecord.h" +#include "Framework/GHEP/GHepParticle.h" +#include "Physics/HadronTransport/INukeException.h" +#include "Physics/HadronTransport/Intranuke2025.h" +#include "Physics/HadronTransport/HAIntranuke2025.h" +#include "Physics/HadronTransport/INukeHadroData2025.h" +#include "Physics/HadronTransport/INukeUtils2025.h" +#include "Framework/Interaction/Interaction.h" +#include "Framework/Messenger/Messenger.h" +#include "Framework/Numerical/RandomGen.h" +#include "Framework/Numerical/Spline.h" +#include "Framework/ParticleData/PDGLibrary.h" +#include "Framework/ParticleData/PDGCodes.h" +#include "Framework/ParticleData/PDGCodeList.h" +#include "Framework/ParticleData/PDGUtils.h" +#include "Framework/Utils/PrintUtils.h" +#include "Physics/NuclearState/NuclearUtils.h" +#include "Physics/NuclearState/NuclearModelI.h" +#include "Physics/NuclearState/NuclearModelMap.h" +//#include "Physics/HadronTransport/INukeOset.h" + +using std::ostringstream; + +using namespace genie; +using namespace genie::utils; +using namespace genie::utils::intranuke2025; +using namespace genie::constants; +using namespace genie::controls; + +//___________________________________________________________________________ +//___________________________________________________________________________ +// Methods specific to INTRANUKE's HA-mode +//___________________________________________________________________________ +//___________________________________________________________________________ +HAIntranuke2025::HAIntranuke2025() : +Intranuke2025("genie::HAIntranuke2025") +{ + +} +//___________________________________________________________________________ +HAIntranuke2025::HAIntranuke2025(string config) : +Intranuke2025("genie::HAIntranuke2025",config) +{ + +} +//___________________________________________________________________________ +HAIntranuke2025::~HAIntranuke2025() +{ + +} +//___________________________________________________________________________ +void HAIntranuke2025::ProcessEventRecord(GHepRecord * evrec) const +{ + LOG("HAIntranuke2025", pNOTICE) + << "************ Running hA2025 MODE INTRANUKE ************"; + GHepParticle * nuclearTarget = evrec -> TargetNucleus(); + nuclA = nuclearTarget -> A(); + + Intranuke2025::ProcessEventRecord(evrec); + + LOG("HAIntranuke2025", pINFO) << "Done with this event"; +} +//___________________________________________________________________________ +void HAIntranuke2025::SimulateHadronicFinalState( + GHepRecord* ev, GHepParticle* p) const +{ +// Simulate a hadron interaction for the input particle p in HA mode +// + // check inputs + if(!p || !ev) { + LOG("HAIntranuke2025", pERROR) << "** Null input!"; + return; + } + + // get particle code and check whether this particle can be handled + int pdgc = p->Pdg(); + bool is_gamma = (pdgc==kPdgGamma); + bool is_pion = (pdgc==kPdgPiP || pdgc==kPdgPiM || pdgc==kPdgPi0); + bool is_kaon = (pdgc==kPdgKP || pdgc==kPdgKM); + bool is_baryon = (pdgc==kPdgProton || pdgc==kPdgNeutron); + bool is_handled = (is_baryon || is_pion || is_kaon || is_gamma); + if(!is_handled) { + LOG("HAIntranuke2025", pERROR) << "** Can not handle particle: " << p->Name(); + return; + } + + // select a fate for the input particle + INukeFateHA_t fate = this->HadronFateHA(p); + + // store the fate + ev->Particle(p->FirstMother())->SetRescatterCode((int)fate); + + if(fate == kIHAFtUndefined) { + LOG("HAIntranuke2025", pERROR) << "** Couldn't select a fate"; + p->SetStatus(kIStStableFinalState); + ev->AddParticle(*p); + return; + } + LOG("HAIntranuke2025", pNOTICE) + << "Selected "<< p->Name() << " fate: "<< INukeHadroFates::AsString(fate); + + // try to generate kinematics - repeat till is done (should seldom need >2) + fNumIterations = 0; + this->SimulateHadronicFinalStateKinematics(ev,p); +} +//___________________________________________________________________________ +void HAIntranuke2025::SimulateHadronicFinalStateKinematics( + GHepRecord* ev, GHepParticle* p) const +{ + // get stored fate + INukeFateHA_t fate = (INukeFateHA_t) + ev->Particle(p->FirstMother())->RescatterCode(); + + LOG("HAIntranuke2025", pINFO) + << "Generating kinematics for " << p->Name() + << " fate: "<< INukeHadroFates::AsString(fate); + + // try to generate kinematics for the selected fate + + try + { + fNumIterations++; + /* if (fate == kIHAFtElas) + { + this->ElasHA(ev,p,fate); + } + else */ + if (fate == kIHAFtInelas || fate == kIHAFtCEx) + { + this->InelasticHA(ev,p,fate); + } + else if (fate == kIHAFtAbs || fate == kIHAFtPiProd) + { + this->Inelastic(ev,p,fate); + } + else if (fate == kIHAFtCmp) //(suarez edit, 17 July, 2017: cmp) + { + LOG("HAIntranuke2025", pWARN) << "Running PreEquilibrium for kIHAFtCmp"; + utils::intranuke2025::PreEquilibrium(ev,p,fRemnA,fRemnZ,fRemnP4,fDoFermi,fFermiFac,fNuclmodel,fNucRmvE,kIMdHA); //should be kiMdHA or HN? + } + } + catch(exceptions::INukeException exception) + { + LOG("HAIntranuke2025", pNOTICE) + << exception; + if(fNumIterations <= 100) { + LOG("HAIntranuke2025", pNOTICE) + << "Failed attempt to generate kinematics for " + << p->Name() << " fate: " << INukeHadroFates::AsString(fate) + << " - After " << fNumIterations << " tries, still retrying..."; + this->SimulateHadronicFinalStateKinematics(ev,p); + } else { + LOG("HAIntranuke2025", pNOTICE) + << "Failed attempt to generate kinematics for " + << p->Name() << " fate: " << INukeHadroFates::AsString(fate) + << " after " << fNumIterations-1 + << " attempts. Trying a new fate..."; + this->SimulateHadronicFinalState(ev,p); + } + } +} +//___________________________________________________________________________ +INukeFateHA_t HAIntranuke2025::HadronFateHA(const GHepParticle * p) const +{ +// Select a hadron fate in HA mode +// + RandomGen * rnd = RandomGen::Instance(); + + // get pdgc code & kinetic energy in MeV + int pdgc = p->Pdg(); + double ke = p->KinE() / units::MeV; + + //bool isPion = (pdgc == kPdgPiP or pdgc == kPdgPi0 or pdgc == kPdgPiM); + //if (isPion and fUseOset and ke < 350.0) return this->HadronFateOset(); + + LOG("HAIntranuke2025", pINFO) + << "Selecting hA fate for " << p->Name() << " with KE = " << ke << " MeV"; + + // try to generate a hadron fate + unsigned int iter = 0; + while(iter++ < kRjMaxIterations) { + + // handle pions + // + if (pdgc==kPdgPiP || pdgc==kPdgPiM || pdgc==kPdgPi0) { + + double frac_cex = fHadroData2025->FracADep(pdgc, kIHAFtCEx, ke, nuclA); + // double frac_elas = fHadroData2025->FracADep(pdgc, kIHAFtElas, ke, nuclA); + double frac_inel = fHadroData2025->FracADep(pdgc, kIHAFtInelas, ke, nuclA); + double frac_abs = fHadroData2025->FracADep(pdgc, kIHAFtAbs, ke, nuclA); + double frac_piprod = fHadroData2025->FracADep(pdgc, kIHAFtPiProd, ke, nuclA); + LOG("HAIntranuke2025", pDEBUG) + << "\n frac{" << INukeHadroFates::AsString(kIHAFtCEx) << "} = " << frac_cex + // << "\n frac{" << INukeHadroFates::AsString(kIHAFtElas) << "} = " << frac_elas + << "\n frac{" << INukeHadroFates::AsString(kIHAFtInelas) << "} = " << frac_inel + << "\n frac{" << INukeHadroFates::AsString(kIHAFtAbs) << "} = " << frac_abs + << "\n frac{" << INukeHadroFates::AsString(kIHAFtPiProd) << "} = " << frac_piprod; + + // apply external tweaks to fractions + frac_cex *= fPionFracCExScale; + frac_inel *= fPionFracInelScale; + if (pdgc==kPdgPiP || pdgc==kPdgPiM) frac_abs *= fChPionFracAbsScale; + if (pdgc==kPdgPi0) frac_abs *= fNeutralPionFracAbsScale; + frac_piprod *= fPionFracPiProdScale; + + + // Flag to enable or disable π0/π+ ratio corrections + bool apply_pi0_ratio_correction = true; + + if (apply_pi0_ratio_correction && pdgc == kPdgPi0) { + + // Cap the kinetic energy at 1000 MeV for the correction calculation + double ke_ratio = (ke > 1000.0) ? 1000.0 : ke; + + // Define correction scale factors as a function of kinetic energy (in MeV) + double ratio_cex = 0.0008702 * ke_ratio + 1.9047; + double ratio_abs = 0.0003291 * ke_ratio + 0.82617; + double ratio_inel = -0.0003209 * ke_ratio + 0.837764; + double ratio_piprod = 0.0004402 * ke_ratio + 0.47418; + + // Apply the corrections only if kinetic energy is below 1000 MeV + + frac_cex *= ratio_cex; + frac_abs *= ratio_abs; + frac_inel *= ratio_inel; + + // Apply piprod correction only if KE is above 400 MeV + if (ke > 400.0) { + frac_piprod *= ratio_piprod; + } + + } + + + + + double frac_rescale = 1./(frac_cex + frac_inel + frac_abs + frac_piprod); + + frac_cex *= frac_rescale; + frac_inel *= frac_rescale; + frac_abs *= frac_rescale; + frac_piprod *= frac_rescale; + + + // compute total fraction (can be <1 if fates have been switched off) + double tf = frac_cex + + // frac_elas + + frac_inel + + frac_abs + + frac_piprod; + + double r = tf * rnd->RndFsi().Rndm(); +#ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__ + LOG("HAIntranuke2025", pDEBUG) << "r = " << r << " (max = " << tf << ")"; +#endif + double cf=0; // current fraction + if(r < (cf += frac_cex )) return kIHAFtCEx; // cex + // if(r < (cf += frac_elas )) return kIHAFtElas; // elas + if(r < (cf += frac_inel )) return kIHAFtInelas; // inelas + if(r < (cf += frac_abs )) return kIHAFtAbs; // abs + if(r < (cf += frac_piprod )) return kIHAFtPiProd; // pi prod + + LOG("HAIntranuke2025", pWARN) + << "No selection after going through all fates! " + << "Total fraction = " << tf << " (r = " << r << ")"; + } + + // handle nucleons + else if (pdgc==kPdgProton || pdgc==kPdgNeutron) { + double frac_cex = fHadroData2025->FracAIndep(pdgc, kIHAFtCEx, ke); + //double frac_elas = fHadroData2025->FracAIndep(pdgc, kIHAFtElas, ke); + double frac_inel = fHadroData2025->FracAIndep(pdgc, kIHAFtInelas, ke); + double frac_abs = fHadroData2025->FracAIndep(pdgc, kIHAFtAbs, ke); + double frac_pipro = fHadroData2025->FracAIndep(pdgc, kIHAFtPiProd, ke); + double frac_cmp = fHadroData2025->FracAIndep(pdgc, kIHAFtCmp , ke); + + LOG("HAIntranuke2025", pINFO) + << "\n frac{" << INukeHadroFates::AsString(kIHAFtCEx) << "} = " << frac_cex + // << "\n frac{" << INukeHadroFates::AsString(kIHAFtElas) << "} = " << frac_elas + << "\n frac{" << INukeHadroFates::AsString(kIHAFtInelas) << "} = " << frac_inel + << "\n frac{" << INukeHadroFates::AsString(kIHAFtAbs) << "} = " << frac_abs + << "\n frac{" << INukeHadroFates::AsString(kIHAFtPiProd) << "} = " << frac_pipro + << "\n frac{" << INukeHadroFates::AsString(kIHAFtCmp) << "} = " << frac_cmp; //suarez edit, cmp + + // apply external tweaks to fractions + frac_cex *= fNucleonFracCExScale; + frac_inel *= fNucleonFracInelScale; + frac_abs *= fNucleonFracAbsScale; + frac_pipro *= fNucleonFracPiProdScale; + + double frac_rescale = 1./(frac_cex + frac_inel + frac_abs + frac_pipro); + + frac_cex *= frac_rescale; + frac_inel *= frac_rescale; + frac_abs *= frac_rescale; + frac_pipro *= frac_rescale; + + // compute total fraction (can be <1 if fates have been switched off) + double tf = frac_cex + + //frac_elas + + frac_inel + + frac_abs + + frac_pipro + + frac_cmp; //suarez edit, cmp + + double r = tf * rnd->RndFsi().Rndm(); +#ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__ + LOG("HAIntranuke2025", pDEBUG) << "r = " << r << " (max = " << tf << ")"; +#endif + double cf=0; // current fraction + if(r < (cf += frac_cex )) return kIHAFtCEx; // cex + //if(r < (cf += frac_elas )) return kIHAFtElas; // elas + if(r < (cf += frac_inel )) return kIHAFtInelas; // inelas + if(r < (cf += frac_abs )) return kIHAFtAbs; // abs + if(r < (cf += frac_pipro )) return kIHAFtPiProd; // pi prod + if(r < (cf += frac_cmp )) return kIHAFtCmp; //suarez edit, cmp + + LOG("HAIntranuke2025", pWARN) + << "No selection after going through all fates! " + << "Total fraction = " << tf << " (r = " << r << ")"; + } + // handle kaons + else if (pdgc==kPdgKP || pdgc==kPdgKM) { + double frac_inel = fHadroData2025->FracAIndep(pdgc, kIHAFtInelas, ke); + double frac_abs = fHadroData2025->FracAIndep(pdgc, kIHAFtAbs, ke); + + LOG("HAIntranuke2025", pDEBUG) + << "\n frac{" << INukeHadroFates::AsString(kIHAFtInelas) << "} = " << frac_inel + << "\n frac{" << INukeHadroFates::AsString(kIHAFtAbs) << "} = " << frac_abs; + // compute total fraction (can be <1 if fates have been switched off) + double tf = frac_inel + + frac_abs; + double r = tf * rnd->RndFsi().Rndm(); +#ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__ + LOG("HAIntranuke2025", pDEBUG) << "r = " << r << " (max = " << tf << ")"; +#endif + double cf=0; // current fraction + if(r < (cf += frac_inel )) return kIHAFtInelas; // inelas + if(r < (cf += frac_abs )) return kIHAFtAbs; // abs + } + }//iterations + + return kIHAFtUndefined; +} +//___________________________________________________________________________ +double HAIntranuke2025::PiBounce(void) const +{ +// [adapted from neugen3 intranuke_bounce.F] +// [is a fortran stub / difficult to understand - needs to be improved] +// +// Generates theta in radians for elastic pion-nucleus scattering/ +// Lookup table is based on Fig 17 of Freedman, Miller and Henley, Nucl.Phys. +// A389, 457 (1982) +// + const int nprob = 25; + double dintor = 0.0174533; + double denom = 47979.453; + double rprob[nprob] = { + 5000., 4200., 3000., 2600., 2100., 1800., 1200., 750., 500., 230., 120., + 35., 9., 3., 11., 18., 29., 27., 20., 14., 10., 6., 2., 0.14, 0.19 }; + + double angles[nprob]; + for(int i=0; iRndFsi().Rndm(); + + double xsum = 0.; + double theta = 0.; + double binl = 0.; + double binh = 0.; + int tj = 0; + for(int i=0; i<60; i++) { + theta = i+0.5; + for(int j=0; j < nprob-1; j++) { + binl = angles[j]; + binh = angles[j+1]; + tj=j; + if(binl<=theta && binh>=theta) break; + tj=0; + }//j + int itj = tj; + double tfract = (theta-binl)/2.5; + double delp = rprob[itj+1] - rprob[itj]; + xsum += (rprob[itj] + tfract*delp)/denom; + if(xsum>r) break; + theta = 0.; + }//i + + theta *= dintor; + + LOG("HAIntranuke2025", pNOTICE) + << "Generated pi+A elastic scattering angle = " << theta << " radians"; + + return theta; +} +//___________________________________________________________________________ +double HAIntranuke2025::PnBounce(void) const +{ +// [adapted from neugen3 intranuke_pnbounce.F] +// [is a fortran stub / difficult to understand - needs to be improved] +// +// Generates theta in radians for elastic nucleon-nucleus scattering. +// Use 800 MeV p+O16 as template in same (highly simplified) spirit as pi+A +// from table in Adams et al., PRL 1979. Guess value at 0-2 deg based on Ni +// data. +// + const int nprob = 20; + double dintor = 0.0174533; + double denom = 11967.0; + double rprob[nprob] = { + 2400., 2350., 2200., 2000., 1728., 1261., 713., 312., 106., 35., + 6., 5., 10., 12., 11., 9., 6., 1., 1., 1. }; + + double angles[nprob]; + for(int i=0; iRndFsi().Rndm(); + + double xsum = 0.; + double theta = 0.; + double binl = 0.; + double binh = 0.; + int tj = 0; + for(int i=0; i< nprob; i++) { + theta = i+0.5; + for(int j=0; j < nprob-1; j++) { + binl = angles[j]; + binh = angles[j+1]; + tj=j; + if(binl<=theta && binh>=theta) break; + tj=0; + }//j + int itj = tj; + double tfract = (theta-binl)/2.5; + double delp = rprob[itj+1] - rprob[itj]; + xsum += (rprob[itj] + tfract*delp)/denom; + if(xsum>r) break; + theta = 0.; + }//i + + theta *= dintor; + + LOG("HAIntranuke2025", pNOTICE) + << "Generated N+A elastic scattering angle = " << theta << " radians"; + + return theta; +} +//___________________________________________________________________________ +void HAIntranuke2025::ElasHA(GHepRecord* ev, GHepParticle* p, + INukeFateHA_t fate ) const +{ + // scatters particle within nucleus, copy of hN code meant to run only once + // in hA mode + + LOG("HAIntranuke2025", pDEBUG) + << "ElasHA() is invoked for a : " << p->Name() + << " whose fate is : " << INukeHadroFates::AsString(fate); + + /* if(fate!=kIHAFtElas) + { + LOG("HAIntranuke2025", pWARN) + << "ElasHA() cannot handle fate: " << INukeHadroFates::AsString(fate); + return; + } */ + + // check remnants + if(fRemnA<0 || fRemnZ<0) // best to stop it here and not try again. + { + LOG("HAIntranuke2025", pWARN) << "Invalid Nucleus! : (A,Z) = ("<SetStatus(kIStStableFinalState); + ev->AddParticle(*p); + return; + } + + // vars for incoming particle, target, and scattered pdg codes + int pcode = p->Pdg(); + double Mp = p->Mass(); + double Mt = 0.; + if (ev->TargetNucleus()->A()==fRemnA) + { Mt = PDGLibrary::Instance()->Find(ev->TargetNucleus()->Pdg())->Mass(); } + else + { + Mt = fRemnP4.M(); + } + TLorentzVector t4PpL = *p->P4(); + TLorentzVector t4PtL = fRemnP4; + double C3CM = 0.0; + + // calculate scattering angle + if(pcode==kPdgNeutron||pcode==kPdgProton) C3CM = TMath::Cos(this->PnBounce()); + else C3CM = TMath::Cos(this->PiBounce()); + + // calculate final 4 momentum of probe + TLorentzVector t4P3L, t4P4L; + + if (!utils::intranuke2025::TwoBodyKinematics(Mp,Mt,t4PpL,t4PtL,t4P3L,t4P4L,C3CM,fRemnP4)) + { + LOG("HAIntranuke2025", pNOTICE) << "ElasHA() failed"; + exceptions::INukeException exception; + exception.SetReason("TwoBodyKinematics failed in ElasHA"); + throw exception; + } + + // Update probe particle + p->SetMomentum(t4P3L); + p->SetStatus(kIStStableFinalState); + + // Update Remnant nucleus + fRemnP4 = t4P4L; + LOG("HAIntranuke2025",pINFO) + << "C3cm = " << C3CM; + LOG("HAIntranuke2025",pINFO) + << "|p3| = " << t4P3L.Vect().Mag() << ", E3 = " << t4P3L.E() << ",Mp = " << Mp; + LOG("HAIntranuke2025",pINFO) + << "|p4| = " << fRemnP4.Vect().Mag() << ", E4 = " << fRemnP4.E() << ",Mt = " << Mt; + + ev->AddParticle(*p); + +} +//___________________________________________________________________________ +void HAIntranuke2025::InelasticHA( + GHepRecord* ev, GHepParticle* p, INukeFateHA_t fate) const +{ + // charge exch and inelastic - scatters particle within nucleus, hA version + // each are treated as quasielastic, particle scatters off single nucleon + +#ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__ + LOG("HAIntranuke2025", pDEBUG) + << "InelasticHA() is invoked for a : " << p->Name() + << " whose fate is : " << INukeHadroFates::AsString(fate); +#endif + if(ev->Probe() ) { + LOG("HAIntranuke2025", pINFO) << " probe KE = " << ev->Probe()->KinE(); + } + if(fate!=kIHAFtCEx && fate!=kIHAFtInelas) + { + LOG("HAIntranuke2025", pWARN) + << "InelasticHA() cannot handle fate: " << INukeHadroFates::AsString(fate); + return; + } + + // Random number generator + RandomGen * rnd = RandomGen::Instance(); + + // vars for incoming particle, target, and scattered pdg codes + int pcode = p->Pdg(); + int tcode, scode, s2code; + double ppcnt = (double) fRemnZ / (double) fRemnA; // % of protons + + // Select a hadron fate in HN mode + INukeFateHN_t h_fate; + if (fate == kIHAFtCEx) h_fate = kIHNFtCEx; + else h_fate = kIHNFtElas; + + // Select a target randomly, weighted to # + // -- Unless, of course, the fate is CEx, + // -- in which case the target may be deterministic + // Also assign scattered particle code + if(fate==kIHAFtCEx) + { + if(pcode==kPdgPiP) {tcode = kPdgNeutron; scode = kPdgPi0; s2code = kPdgProton;} + else if(pcode==kPdgPiM) {tcode = kPdgProton; scode = kPdgPi0; s2code = kPdgNeutron;} + else if(pcode==kPdgPi0) + { + // for pi0 + tcode = (rnd->RndFsi().Rndm()<=ppcnt)?(kPdgProton) :(kPdgNeutron); + scode = (tcode == kPdgProton) ?(kPdgPiP) :(kPdgPiM); + s2code = (tcode == kPdgProton) ?(kPdgNeutron):(kPdgProton); + } + else if(pcode==kPdgProton) {tcode = kPdgNeutron; scode = kPdgNeutron; s2code = kPdgProton;} + else if(pcode==kPdgNeutron){tcode = kPdgProton; scode = kPdgProton; s2code = kPdgNeutron;} + else + { LOG("HAIntranuke2025", pWARN) << "InelasticHA() cannot handle fate: " + << INukeHadroFates::AsString(fate) + << " for particle " << p->Name(); + return; + } + } + else + { + tcode = (rnd->RndFsi().Rndm()<=ppcnt)?(kPdgProton):(kPdgNeutron); + // if(pcode == kPdgKP || pcode == kPdgKM) tcode = kPdgProton; + scode = pcode; + s2code = tcode; + } + + // check remnants + if ( fRemnA < 1 ) //we've blown nucleus apart, no need to retry anything - exit + { + LOG("HAIntranuke2025",pNOTICE) << "InelasticHA() stops : not enough nucleons"; + p->SetStatus(kIStStableFinalState); + ev->AddParticle(*p); + return; + } + else if ( fRemnZ + (((pcode==kPdgProton)||(pcode==kPdgPiP))?1:0) - (pcode==kPdgPiM?1:0) + < ((( scode==kPdgProton)||( scode==kPdgPiP)) ?1:0) - (scode ==kPdgPiM ?1:0) + + (((s2code==kPdgProton)||(s2code==kPdgPiP)) ?1:0) - (s2code==kPdgPiM ?1:0) ) + { + LOG("HAIntranuke2025",pWARN) << "InelasticHA() failed : too few protons in nucleus"; + p->SetStatus(kIStStableFinalState); + ev->AddParticle(*p); + return; // another extreme case, best strategy is to exit and go to next event + } + + GHepParticle t(*p); + t.SetPdgCode(tcode); + + // set up fermi target + Target target(ev->TargetNucleus()->Pdg()); + double tM = t.Mass(); + + // handle fermi momentum + if(fDoFermi) + { + target.SetHitNucPdg(tcode); + fNuclmodel->GenerateNucleon(target); + TVector3 tP3 = fFermiFac * fNuclmodel->Momentum3(); + double tE = TMath::Sqrt(tP3.Mag2()+ tM*tM); + t.SetMomentum(TLorentzVector(tP3,tE)); + } + else + { + t.SetMomentum(0,0,0,tM); + } + + GHepParticle * cl = new GHepParticle(*p); // clone particle, to run IntBounce at proper energy + // calculate energy and momentum using invariant mass + double pM = p->Mass(); + double E_p = ((*p->P4() + *t.P4()).Mag2() - tM*tM - pM*pM)/(2.0*tM); + double P_p = TMath::Sqrt(E_p*E_p - pM*pM); + cl->SetMomentum(TLorentzVector(P_p,0,0,E_p)); + // momentum doesn't have to be in right direction, only magnitude + double C3CM = fHadroData2025->IntBounce(cl,tcode,scode,h_fate); + delete cl; + if (C3CM<-1.) // hope this doesn't occur too often - unphysical but we just pass it on + { + LOG("HAIntranuke2025", pWARN) << "unphysical angle chosen in InelasicHA - put particle outside nucleus"; + p->SetStatus(kIStStableFinalState); + ev->AddParticle(*p); + return; + } + double KE1L = p->KinE(); + double KE2L = t.KinE(); + LOG("HAIntranuke2025",pINFO) + << " KE1L = " << KE1L << " " << KE1L << " KE2L = " << KE2L; + GHepParticle cl1(*p); + GHepParticle cl2(t); + bool success = utils::intranuke2025::TwoBodyCollision(ev,pcode,tcode,scode,s2code,C3CM, + &cl1,&cl2,fRemnA,fRemnZ,fRemnP4,kIMdHA); + if(success) + { + double P3L = TMath::Sqrt(cl1.Px()*cl1.Px() + cl1.Py()*cl1.Py() + cl1.Pz()*cl1.Pz()); + double P4L = TMath::Sqrt(cl2.Px()*cl2.Px() + cl2.Py()*cl2.Py() + cl2.Pz()*cl2.Pz()); + double E3L = cl1.KinE(); + double E4L = cl2.KinE(); + LOG ("HAIntranuke2025",pINFO) << "Successful quasielastic scattering or charge exchange"; + LOG("HAIntranuke",pINFO) + << "C3CM = " << C3CM << "\n P3L, E3L = " + << P3L << " " << E3L << " P4L, E4L = "<< P4L << " " << E4L ; + if(ev->Probe() ) { LOG("HAIntranuke",pINFO) + << "P4L = " << P4L << " ;E4L= " << E4L << "\n probe KE = " << ev->Probe()->KinE() << "\n"; + LOG("HAIntranuke2025", pINFO) << "Nucleus : (A,Z) = ("<Find(ipdgc); + if(!remn) + { + LOG("HAIntranuke2025", pINFO) + << "NO Particle with [A = " << fRemnA << ", Z = " << fRemnZ + << ", pdgc = " << ipdgc << "] in PDGLibrary!"; + } + else + { + MassRem = remn->Mass(); + LOG("HAIntranuke2025", pINFO) + << "Particle with [A = " << fRemnA << ", Z = " << fRemnZ + << ", pdgc = " << ipdgc << "] in PDGLibrary!"; + } + double ERemn = fRemnP4.E(); + double PRemn = TMath::Sqrt(fRemnP4.Px()*fRemnP4.Px() + fRemnP4.Py()*fRemnP4.Py() + fRemnP4.Pz()*fRemnP4.Pz()); + double MRemn = TMath::Sqrt(ERemn*ERemn - PRemn*PRemn); + LOG("HAIntranuke2025",pINFO) << "PRemn = " << PRemn << " ;ERemn= " << ERemn; + LOG("HAIntranuke2025",pINFO) << "MRemn= " << MRemn << " ;true Mass= " << MassRem << " ; excitation energy= " << (MRemn-MassRem)*1000. << " MeV"; + } + if (ev->Probe() && (E3L>ev->Probe()->KinE())) //assuming E3 is most important, definitely for pion. what about pp? + { + // LOG("HAIntranuke",pINFO) + // << "E3Lagain = " << E3L << " ;E4L= " << E4L << "\n probe KE = " << ev->Probe()->KinE() << "\n"; + exceptions::INukeException exception; + exception.SetReason("TwoBodyCollison gives KE> probe KE in hA simulation"); + throw exception; + } + ev->AddParticle(cl1); + ev->AddParticle(cl2); + + LOG("HAIntranuke2025", pDEBUG) << "Nucleus : (A,Z) = ("< Reaction approximated by exponential decay in p+n (sum) space, + // gaussian in p-n (difference) space + // -fit to hN simulations p C, Fe, Pb at 200, 800 MeV + // -get n from isospin, np-nn smaller by 2 + // Pions -> Reaction approximated with a modified gaussian in p+n space, + // normal gaussian in p-n space + // -based on fits to multiplicity distributions of hN model + // for pi+ C, Fe, Pb at 250, 500 MeV + // -fit sum and diff of nn, np to Gaussian + // -get pi0 from isospin, np-nn smaller by 2 + // -get pi- from isospin, np-nn smaller by 4 + // -add 2-body absorption to better match McKeown data + // Kaons -> no guidance, use same code as pions. + // + // Normally distributed random number generated using Box-Muller transformation + // + // Pion production reactions rescatter pions in nucleus, otherwise unchanged from + // older versions of GENIE + // + +#ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__ + LOG("HAIntranuke2025", pDEBUG) + << "Inelastic() is invoked for a : " << p->Name() + << " whose fate is : " << INukeHadroFates::AsString(fate); +#endif + + bool allow_dup = true; + PDGCodeList list(allow_dup); // list of final state particles + + // only absorption/pipro fates allowed + if (fate == kIHAFtPiProd) { + + GHepParticle s1(*p); + GHepParticle s2(*p); + GHepParticle s3(*p); + + bool success = utils::intranuke2025::PionProduction( + ev,p,&s1,&s2,&s3,fRemnA,fRemnZ,fRemnP4, fDoFermi,fFermiFac,fFermiMomentum,fNuclmodel); + + if (success){ + LOG ("HAIntranuke2025",pINFO) << " successful pion production fate"; + // set status of particles and conserve charge/baryon number + s1.SetStatus(kIStStableFinalState); //should be redundant + // if (pdg::IsPion(s2->Pdg())) s2->SetStatus(kIStHadronInTheNucleus); + s2.SetStatus(kIStStableFinalState); + // if (pdg::IsPion(s3->Pdg())) s3->SetStatus(kIStHadronInTheNucleus); + s3.SetStatus(kIStStableFinalState); + + ev->AddParticle(s1); + ev->AddParticle(s2); + ev->AddParticle(s3); + + return; + } + else { + LOG("HAIntranuke2025", pNOTICE) << "Error: could not create pion production final state"; + exceptions::INukeException exception; + exception.SetReason("PionProduction kinematics failed - retry kinematics"); + throw exception; + } + } + + else if (fate==kIHAFtAbs) +// tuned for pions - mixture of 2-body and many-body +// use same for kaons as there is no guidance + { + // Instances for reference + PDGLibrary * pLib = PDGLibrary::Instance(); + RandomGen * rnd = RandomGen::Instance(); + + double ke = p->KinE() / units::MeV; + int pdgc = p->Pdg(); + + if (fRemnA<2) + { + LOG("HAIntranuke2025", pNOTICE) << "stop propagation - could not create absorption final state: too few particles"; + p->SetStatus(kIStStableFinalState); + ev->AddParticle(*p); + return; + } + if (fRemnZ<1 && (pdgc==kPdgPiM || pdgc==kPdgKM)) + { + LOG("HAIntranuke2025", pNOTICE) << "stop propagation - could not create absorption final state: Pi- or K- cannot be absorbed by only neutrons"; + p->SetStatus(kIStStableFinalState); + ev->AddParticle(*p); + return; + } + if (fRemnA-fRemnZ<1 && (pdgc==kPdgPiP || pdgc==kPdgKP)) + { + LOG("HAIntranuke2025", pINFO) << "stop propagation - could not create absorption final state: Pi+ or K+ cannot be absorbed by only protons"; + p->SetStatus(kIStStableFinalState); + ev->AddParticle(*p); + return; + } + + // for now, empirical split between multi-nucleon absorption and pi d -> N N + // + // added 03/21/11 - Aaron Meyer + // + if (pdg::IsPion(pdgc) && rnd->RndFsi().Rndm()<1.14*(.903-0.00189*fRemnA)*(1.35-0.00467*ke)) + { // pi d -> N N, probability determined empirically with McKeown data + + INukeFateHN_t fate_hN=kIHNFtAbs; + int t1code,t2code,scode,s2code; + double ppcnt = (double) fRemnZ / (double) fRemnA; // % of protons + + // choose target nucleon + // -- fates weighted by values from Engel, Mosel... + if (pdgc==kPdgPiP) { + double Prob_pipd_pp=2.*ppcnt*(1.-ppcnt); + double Prob_pipnn_pn=.083*(1.-ppcnt)*(1.-ppcnt); + if (rnd->RndFsi().Rndm()*(Prob_pipd_pp+Prob_pipnn_pn)RndFsi().Rndm()*(Prob_pimd_nn+Prob_pimpp_pn)RndFsi().Rndm(); + if (random_number*(Prob_pi0d_pn+Prob_pi0pp_pp+Prob_pi0nn_nn)Find(pdgc) ->Mass(); + double M2_1 = pLib->Find(t1code)->Mass(); + double M2_2 = pLib->Find(t2code)->Mass(); + //double M2 = M2_1 + M2_2; + double M3 = pLib->Find(scode) ->Mass(); + double M4 = pLib->Find(s2code)->Mass(); + + // handle fermi momentum + double E2_1L, E2_2L; + TVector3 tP2_1L, tP2_2L; + //TLorentzVector dNucl_P4; + Target target(ev->TargetNucleus()->Pdg()); + if(fDoFermi) + { + target.SetHitNucPdg(t1code); + fNuclmodel->GenerateNucleon(target); + //LOG("HAIntranuke2025", pNOTICE) << "Nuclmodel= " << fNuclmodel->ModelType(target) ; + tP2_1L=fFermiFac * fNuclmodel->Momentum3(); + E2_1L = TMath::Sqrt(tP2_1L.Mag2() + M2_1*M2_1); + + target.SetHitNucPdg(t2code); + fNuclmodel->GenerateNucleon(target); + tP2_2L=fFermiFac * fNuclmodel->Momentum3(); + E2_2L = TMath::Sqrt(tP2_2L.Mag2() + M2_2*M2_2); + + //dNucl_P4=TLorentzVector(tP2_1L+tP2_2L,E2_1L+E2_2L); + } + else + { + tP2_1L.SetXYZ(0.0, 0.0, 0.0); + E2_1L = M2_1; + + tP2_2L.SetXYZ(0.0, 0.0, 0.0); + E2_2L = M2_2; + } + TLorentzVector dNucl_P4=TLorentzVector(tP2_1L+tP2_2L,E2_1L+E2_2L); + + double E2L = E2_1L + E2_2L; + + // adjust p to reflect scattering + // get random scattering angle + double C3CM = fHadroData2025->IntBounce(p,t1code,scode,fate_hN); + if (C3CM<-1.) + { + LOG("HAIntranuke2025", pWARN) << "Inelastic() failed: IntBounce returned bad angle - try again"; + exceptions::INukeException exception; + exception.SetReason("unphysical angle for hN scattering"); + throw exception; + return; + } + + TLorentzVector t4P1L,t4P2L,t4P3L,t4P4L; + t4P1L=*p->P4(); + t4P2L=TLorentzVector(TVector3(tP2_1L+tP2_2L),E2L); + double bindE=0.050; // set to fit McKeown data, updated aug 18 + //double bindE=0.0; + if (utils::intranuke2025::TwoBodyKinematics(M3,M4,t4P1L,t4P2L,t4P3L,t4P4L,C3CM,fRemnP4,bindE)) + { + //construct remnant nucleus and its mass + + if (pdgc==kPdgPiP || pdgc==kPdgKP) fRemnZ++; + if (pdgc==kPdgPiM || pdgc==kPdgKM) fRemnZ--; + if (t1code==kPdgProton) fRemnZ--; + if (t2code==kPdgProton) fRemnZ--; + fRemnA-=2; + + fRemnP4-=dNucl_P4; + + TParticlePDG * remn = 0; + double MassRem = 0.; + int ipdgc = pdg::IonPdgCode(fRemnA, fRemnZ); + remn = PDGLibrary::Instance()->Find(ipdgc); + if(!remn) + { + LOG("HAIntranuke2025", pINFO) + << "NO Particle with [A = " << fRemnA << ", Z = " << fRemnZ + << ", pdgc = " << ipdgc << "] in PDGLibrary!"; + } + else + { + MassRem = remn->Mass(); + LOG("HAIntranuke2025", pINFO) + << "Particle with [A = " << fRemnA << ", Z = " << fRemnZ + << ", pdgc = " << ipdgc << "] in PDGLibrary!"; + } + double ERemn = fRemnP4.E(); + double PRemn = TMath::Sqrt(fRemnP4.Px()*fRemnP4.Px() + fRemnP4.Py()*fRemnP4.Py() + fRemnP4.Pz()*fRemnP4.Pz()); + double MRemn = TMath::Sqrt(ERemn*ERemn - PRemn*PRemn); + LOG("HAIntranuke2025",pINFO) << "PRemn = " << PRemn << " ;ERemn= " << ERemn; + LOG("HAIntranuke2025",pINFO) << "expt MRemn= " << MRemn << " ;true Mass= " << MassRem << " ; excitation energy (>0 good)= " << (MRemn-MassRem)*1000. << " MeV"; + + // create t particles w/ appropriate momenta, code, and status + // Set target's mom to be the mom of the hadron that was cloned + GHepParticle* t1 = new GHepParticle(*p); + GHepParticle* t2 = new GHepParticle(*p); + t1->SetFirstMother(p->FirstMother()); + t1->SetLastMother(p->LastMother()); + t2->SetFirstMother(p->FirstMother()); + t2->SetLastMother(p->LastMother()); + + // adjust p to reflect scattering + t1->SetPdgCode(scode); + t1->SetMomentum(t4P3L); + + t2->SetPdgCode(s2code); + t2->SetMomentum(t4P4L); + + t1->SetStatus(kIStStableFinalState); + t2->SetStatus(kIStStableFinalState); + + ev->AddParticle(*t1); + ev->AddParticle(*t2); + delete t1; + delete t2; + + return; + } + else + { + LOG("HAIntranuke2025", pNOTICE) << "Inelastic in hA failed calling TwoBodyKineamtics"; + exceptions::INukeException exception; + exception.SetReason("Pion absorption kinematics through TwoBodyKinematics failed"); + throw exception; + + } + + } // end pi d -> N N + else // multi-nucleon + { + + // declare some parameters for double gaussian and determine values chosen + // parameters for proton and pi+, others come from isospin transformations + + double ns0=0; // mean - sum of nucleons + double nd0=0; // mean - difference of nucleons + double Sig_ns=0; // std dev - sum + double Sig_nd=0; // std dev - diff + double gam_ns=0; // exponential decay rate (for nucleons) + + if ( pdg::IsNeutronOrProton (pdgc) ) // nucleon probe + { + // antisymmetric about Z=N + if (fRemnA-fRemnZ > fRemnZ) + nd0 = 135.227 * TMath::Exp(-7.124*(fRemnA-fRemnZ)/double(fRemnA)) - 2.762; + else + nd0 = -135.227 * TMath::Exp(-7.124* fRemnZ /double(fRemnA)) + 4.914; + + Sig_nd = 2.034 + fRemnA * 0.007846; + + double c1 = 0.041 + ke * 0.0001525; + double c2 = -0.003444 - ke * 0.00002324; +//change last factor from 30 to 15 so that gam_ns always larger than 0 +//add check to be certain + double c3 = 0.064 - ke * 0.000015; + gam_ns = c1 * TMath::Exp(c2*fRemnA) + c3; + if(gam_ns<0.002) gam_ns = 0.002; + //gam_ns = 10.; + LOG("HAIntranuke2025", pINFO) << "nucleon absorption"; + LOG("HAIntranuke2025", pINFO) << "--> mean diff distr = " << nd0 << ", stand dev = " << Sig_nd; + // LOG("HAIntranuke2025", pINFO) << "--> mean sum distr = " << ns0 << ", Stand dev = " << Sig_ns; + LOG("HAIntranuke2025", pINFO) << "--> gam_ns = " << gam_ns; + } + else if ( pdgc==kPdgPiP || pdgc==kPdgPi0 || pdgc==kPdgPiM) //pion probe + { + ns0 = .0001*(1.+ke/250.) * (fRemnA-10)*(fRemnA-10) + 3.5; + nd0 = (1.+ke/250.) - ((fRemnA/200.)*(1. + 2.*ke/250.)); + Sig_ns = (10. + 4. * ke/250.)*TMath::Power(fRemnA/250.,0.9); //(1. - TMath::Exp(-0.02*fRemnA)); + Sig_nd = 4*(1 - TMath::Exp(-0.03*ke)); + LOG("HAIntranuke2025", pINFO) << "pion absorption"; + LOG("HAIntranuke2025", pINFO) << "--> mean diff distr = " << nd0 << ", stand dev = " << Sig_nd; + LOG("HAIntranuke2025", pINFO) << "--> mean sum distr = " << ns0 << ", Stand dev = " << Sig_ns; + } + else if (pdgc==kPdgKP || pdgc==kPdgKM) // kaon probe + { + ns0 = (rnd->RndFsi().Rndm()>0.5?3:2); + nd0 = 1.; + Sig_ns = 0.1; + Sig_nd = 0.1; + LOG("HAIntranuke2025", pINFO) << "kaon absorption - set ns, nd later"; + // LOG("HAIntranuke2025", pINFO) << "--> mean diff distr = " << nd0 << ", stand dev = " << Sig_nd; + // LOG("HAIntranuke2025", pINFO) << "--> mean sum distr = " << ns0 << ", Stand dev = " << Sig_ns; + } + else + { + LOG("HAIntranuke2025", pWARN) << "Inelastic() cannot handle absorption reaction for " << p->Name(); + } + + // account for different isospin + if (pdgc==kPdgPi0 || pdgc==kPdgNeutron) nd0-=2.; + if (pdgc==kPdgPiM) nd0-=4.; + + int iter=0; // counter + int np=0,nn=0; // # of p, # of n + bool not_done=true; + double u1 = 0, u2 = 0; + + while (not_done) + { + // infinite loop check + if (iter>=100) { + LOG("HAIntranuke2025", pNOTICE) << "Error: could not choose absorption final state"; + LOG("HAIntranuke2025", pNOTICE) << "--> mean diff distr = " << nd0 << ", stand dev = " << Sig_nd; + LOG("HAIntranuke2025", pNOTICE) << "--> mean sum distr = " << ns0 << ", Stand dev = " << Sig_ns; + LOG("HAIntranuke2025", pNOTICE) << "--> gam_ns = " << gam_ns; + LOG("HAIntranuke2025", pNOTICE) << "--> A = " << fRemnA << ", Z = " << fRemnZ << ", Energy = " << ke; + exceptions::INukeException exception; + exception.SetReason("Absorption choice of # of p,n failed"); + throw exception; + } + //here?? + + // Box-Muller transform + // Takes two uniform distribution random variables on (0,1] + // Creates two normally distributed random variables on (0,inf) + + u1 = rnd->RndFsi().Rndm(); // uniform random variable 1 + u2 = rnd->RndFsi().Rndm(); // " " 2 + if (u1==0) u1 = rnd->RndFsi().Rndm(); + if (u2==0) u2 = rnd->RndFsi().Rndm(); // Just in case + + // normally distributed random variable + double x2 = TMath::Sqrt(-2*TMath::Log(u1))*TMath::Sin(2*kPi*u2); + + double ns = 0; + + if ( pdg::IsNeutronOrProton (pdgc) ) //nucleon probe + { + ns = -TMath::Log(rnd->RndFsi().Rndm())/gam_ns; // exponential random variable + } + if ( pdg::IsKaon (pdgc) ) //charged kaon probe - either 2 or 3 nucleons to stay simple + { + ns = (rnd->RndFsi().Rndm()<0.5?2:3); + } + else if ( pdgc==kPdgPiP || pdgc==kPdgPi0 || pdgc==kPdgPiM) //pion probe + { + // Pion fit for sum takes for xs*exp((xs-x0)^2 / 2*sig_xs0) + // Find random variable by first finding gaussian random variable + // then throwing the value against a linear P.D.F. + // + // max is the maximum value allowed for the random variable (10 std + mean) + // minimum allowed value is 0 + + double max = ns0 + Sig_ns * 10; + if(max>fRemnA) max=fRemnA; + double x1 = 0; + bool not_found = true; + int iter2 = 0; + + while (not_found) + { + // infinite loop check + if (iter2>=100) + { + LOG("HAIntranuke2025", pNOTICE) << "Error: stuck in random variable loop for ns"; + LOG("HAIntranuke2025", pNOTICE) << "--> mean of sum parent distr = " << ns0 << ", Stand dev = " << Sig_ns; + LOG("HAIntranuke2025", pNOTICE) << "--> A = " << fRemnA << ", Z = " << fRemnZ << ", Energy = " << ke; + + exceptions::INukeException exception; + exception.SetReason("Random number generator for choice of #p,n final state failed - unusual - redo kinematics"); + throw exception; + } + + // calculate exponential random variable + u1 = rnd->RndFsi().Rndm(); + u2 = rnd->RndFsi().Rndm(); + if (u1==0) u1 = rnd->RndFsi().Rndm(); + if (u2==0) u2 = rnd->RndFsi().Rndm(); + x1 = TMath::Sqrt(-2*TMath::Log(u1))*TMath::Cos(2*kPi*u2); + + ns = ns0 + Sig_ns * x1; + if ( ns>max || ns<0 ) {iter2++; continue;} + else if ( rnd->RndFsi().Rndm() > (ns/max) ) {iter2++; continue;} + else { + // accept this sum value + not_found=false; + } + } //while(not_found) + }//else pion + + double nd = nd0 + Sig_nd * x2; // difference (p-n) for both pion, nucleon probe + if (pdgc==kPdgKP) // special for KP + { if (ns==2) nd=0; + if (ns>2) nd=1; } + + np = int((ns+nd)/2.+.5); // Addition of .5 for rounding correction + nn = int((ns-nd)/2.+.5); + + LOG("HAIntranuke2025", pINFO) << "ns = "<86) // too many particles, scale down + { + double frac = 85./double(np+nn); + np = int(np*frac); + nn = int(nn*frac); + } + + if ( (np==fRemnZ +((pdg::IsProton (pdgc)||pdgc==kPdgPiP||pdgc==kPdgKP)?1:0)-(pdgc==kPdgPiM||pdgc==kPdgKM?1:0)) + &&(nn==fRemnA-fRemnZ+((pdg::IsNeutron(pdgc)||pdgc==kPdgPiM||pdgc==kPdgKM)?1:0)-(pdgc==kPdgPiP||pdgc==kPdgKP?1:0)) ) + { // leave at least one nucleon in the nucleus to prevent excess momentum + if (rnd->RndFsi().Rndm()18) + { + // code lists + PDGCodeList list0(allow_dup); + PDGCodeList list1(allow_dup); + PDGCodeList list2(allow_dup); + PDGCodeList list3(allow_dup); + PDGCodeList list4(allow_dup); + PDGCodeList* listar[5] = {&list0, &list1, &list2, &list3, &list4}; + + //set up HadronClusters + // simple for now, each (of 5) in hadron cluster has 1/5 of mom and KE + + double probM = pLib->Find(pdgc) ->Mass(); + probM -= .025; // BE correction + TVector3 pP3 = p->P4()->Vect() * (1./5.); + double probKE = p->P4()->E() -probM; + double clusKE = probKE * (1./5.); + TLorentzVector clusP4(pP3,clusKE); //no mass + LOG("HAIntranuke2025",pINFO) << "probM = " << probM << " ;clusKE= " << clusKE; + TLorentzVector X4(*p->X4()); + GHepStatus_t ist = kIStNucleonClusterTarget; + + int mom = p->FirstMother(); + + GHepParticle * p0 = new GHepParticle(kPdgCompNuclCluster,ist, mom,-1,-1,-1,clusP4,X4); + GHepParticle * p1 = new GHepParticle(kPdgCompNuclCluster,ist, mom,-1,-1,-1,clusP4,X4); + GHepParticle * p2 = new GHepParticle(kPdgCompNuclCluster,ist, mom,-1,-1,-1,clusP4,X4); + GHepParticle * p3 = new GHepParticle(kPdgCompNuclCluster,ist, mom,-1,-1,-1,clusP4,X4); + GHepParticle * p4 = new GHepParticle(kPdgCompNuclCluster,ist, mom,-1,-1,-1,clusP4,X4); + + // To conserve 4-momenta + // fRemnP4 -= probP4 + protP4*np_p + neutP4*(4-np_p) - *p->P4(); + fRemnP4 -= 5.*clusP4 - *p->P4(); + + for (int i=0;i<(np+nn);i++) + { + if (ipush_back(kPdgProton); + fRemnZ--; + } + else listar[i%5]->push_back(kPdgNeutron); + fRemnA--; + } + for (int i=0;i<5;i++) + { + LOG("HAIntranuke2025", pINFO) << "List" << i << " size: " << listar[i]->size(); + if (listar[i]->size() <2) + { + exceptions::INukeException exception; + exception.SetReason("too few particles for Phase Space decay - try again"); + throw exception; + } + } + + // commented out to better fit with absorption reactions + // Add the fermi energy of the nucleons to the phase space + /*if(fDoFermi) + { + GHepParticle* p_ar[5] = {cl, p1, p2, p3, p4}; + for (int i=0;i<5;i++) + { + Target target(ev->TargetNucleus()->Pdg()); + TVector3 pBuf = p_ar[i]->P4()->Vect(); + double mBuf = p_ar[i]->Mass(); + double eBuf = TMath::Sqrt(pBuf.Mag2() + mBuf*mBuf); + TLorentzVector tSum(pBuf,eBuf); + double mSum = 0.0; + vector::const_iterator pdg_iter; + for(pdg_iter=++(listar[i]->begin());pdg_iter!=listar[i]->end();++pdg_iter) + { + target.SetHitNucPdg(*pdg_iter); + fNuclmodel->GenerateNucleon(target); + mBuf = pLib->Find(*pdg_iter)->Mass(); + mSum += mBuf; + pBuf = fFermiFac * fNuclmodel->Momentum3(); + eBuf = TMath::Sqrt(pBuf.Mag2() + mBuf*mBuf); + tSum += TLorentzVector(pBuf,eBuf); + fRemnP4 -= TLorentzVector(pBuf,eBuf-mBuf); + } + TLorentzVector dP4 = tSum + TLorentzVector(TVector3(0,0,0),-mSum); + p_ar[i]->SetMomentum(dP4); + } + }*/ + + bool success1 = utils::intranuke2025::PhaseSpaceDecay(ev,p0,*listar[0],fRemnP4,fNucRmvE,kIMdHA); + bool success2 = utils::intranuke2025::PhaseSpaceDecay(ev,p1,*listar[1],fRemnP4,fNucRmvE,kIMdHA); + bool success3 = utils::intranuke2025::PhaseSpaceDecay(ev,p2,*listar[2],fRemnP4,fNucRmvE,kIMdHA); + bool success4 = utils::intranuke2025::PhaseSpaceDecay(ev,p3,*listar[3],fRemnP4,fNucRmvE,kIMdHA); + bool success5 = utils::intranuke2025::PhaseSpaceDecay(ev,p4,*listar[4],fRemnP4,fNucRmvE,kIMdHA); + if(success1 && success2 && success3 && success4 && success5) + { + LOG("HAIntranuke2025", pINFO)<<"Successful many-body absorption - n>=18"; + LOG("HAIntranuke2025", pDEBUG) << "Nucleus : (A,Z) = ("<Find(ipdgc); + if(!remn) + { + LOG("HAIntranuke2025", pINFO) + << "NO Particle with [A = " << fRemnA << ", Z = " << fRemnZ + << ", pdgc = " << ipdgc << "] in PDGLibrary!"; + } + else + { + MassRem = remn->Mass(); + LOG("HAIntranuke2025", pINFO) + << "Particle with [A = " << fRemnA << ", Z = " << fRemnZ + << ", pdgc = " << ipdgc << "] in PDGLibrary!"; + } + double ERemn = fRemnP4.E(); + double PRemn = TMath::Sqrt(fRemnP4.Px()*fRemnP4.Px() + fRemnP4.Py()*fRemnP4.Py() + fRemnP4.Pz()*fRemnP4.Pz()); + double MRemn = TMath::Sqrt(ERemn*ERemn - PRemn*PRemn); + LOG("HAIntranuke2025",pINFO) << "PRemn = " << PRemn << " ;ERemn= " << ERemn; + LOG("HAIntranuke2025",pINFO) << "MRemn= " << MRemn << " ;true Mass= " << MassRem << " ; excitation energy (>0 good)= " << (MRemn-MassRem)*1000. << " MeV"; + + } + else + { + // try to recover + LOG("HAIntranuke2025", pWARN) << "PhaseSpace decay fails for HadrCluster- recovery likely incorrect - rethrow event"; + p->SetStatus(kIStStableFinalState); + ev->AddParticle(*p); + fRemnA+=np+nn; + fRemnZ+=np; + if ( pdgc==kPdgProton || pdgc==kPdgPiP ) fRemnZ--; + if ( pdgc==kPdgPiM ) fRemnZ++; + if ( pdg::IsNeutronOrProton (pdgc) ) fRemnA--; + /* exceptions::INukeException exception; + exception.SetReason("Phase space generation of absorption final state failed"); + throw exception; + */ + } + + // delete cl; + delete p0; + delete p1; + delete p2; + delete p3; + delete p4; + + } + else // less than 18 particles pion + { + if (pdgc==kPdgKP) list.push_back(kPdgKP); //normally conserve strangeness + if (pdgc==kPdgKM) list.push_back(kPdgKM); + /* + TParticlePDG * remn0 = 0; + int ipdgc0 = pdg::IonPdgCode(fRemnA, fRemnZ); + remn0 = PDGLibrary::Instance()->Find(ipdgc0); + double Mass0 = remn0->Mass(); + TParticlePDG * remnt = 0; + int ipdgct = pdg::IonPdgCode(fRemnA-(nn+np), fRemnZ-np); + remnt = PDGLibrary::Instance()->Find(ipdgct); + double MassRemt = remnt->Mass(); + LOG("HAIntranuke2025",pINFO) << "Mass0 = " << Mass0 << " ;Masst= " << MassRemt << " ; diff/nucleon= "<< (Mass0-MassRemt)/(np+nn); + */ + //set up HadronCluster + + double probM = pLib->Find(pdgc) ->Mass(); + double probBE = (np+nn)*.005; // BE correction + TVector3 pP3 = p->P4()->Vect(); + double probKE = p->P4()->E() - (probM - probBE); + double clusKE = probKE; // + np*0.9383 + nn*.9396; + TLorentzVector clusP4(pP3,clusKE); //no mass is correct + LOG("HAIntranuke2025",pINFO) << "probM = " << probM << " ;clusKE= " << clusKE; + TLorentzVector X4(*p->X4()); + GHepStatus_t ist = kIStNucleonClusterTarget; + int mom = p->FirstMother(); + + GHepParticle * p0 = new GHepParticle(kPdgCompNuclCluster,ist, mom,-1,-1,-1,clusP4,X4); + + //set up remnant nucleus + fRemnP4 -= clusP4 - *p->P4(); + + for (int i=0;iTargetNucleus()->Pdg()); + TVector3 pBuf = p->P4()->Vect(); + double mBuf = p->Mass(); + double eBuf = TMath::Sqrt(pBuf.Mag2() + mBuf*mBuf); + TLorentzVector tSum(pBuf,eBuf); + double mSum = 0.0; + vector::const_iterator pdg_iter; + for(pdg_iter=++(list.begin());pdg_iter!=list.end();++pdg_iter) + { + target.SetHitNucPdg(*pdg_iter); + fNuclmodel->GenerateNucleon(target); + mBuf = pLib->Find(*pdg_iter)->Mass(); + mSum += mBuf; + pBuf = fFermiFac * fNuclmodel->Momentum3(); + eBuf = TMath::Sqrt(pBuf.Mag2() + mBuf*mBuf); + tSum += TLorentzVector(pBuf,eBuf); + fRemnP4 -= TLorentzVector(pBuf,eBuf-mBuf); + } + TLorentzVector dP4 = tSum + TLorentzVector(TVector3(0,0,0),-mSum); + p->SetMomentum(dP4); + }*/ + + LOG("HAIntranuke2025", pDEBUG) + << "Remnant nucleus (A,Z) = (" << fRemnA << ", " << fRemnZ << ")"; + LOG("HAIntranuke2025", pINFO) << " list size: " << np+nn; + if (np+nn <2) + { + exceptions::INukeException exception; + exception.SetReason("too few particles for Phase Space decay - try again"); + throw exception; + } + // GHepParticle * cl = new GHepParticle(*p); + // cl->SetPdgCode(kPdgDecayNuclCluster); + //bool success1 = utils::intranuke2025::PhaseSpaceDecay(ev,p0,*listar[0],fRemnP4,fNucRmvE,kIMdHA); + bool success = utils::intranuke2025::PhaseSpaceDecay(ev,p0,list,fRemnP4,fNucRmvE,kIMdHA); + if (success) + { + LOG ("HAIntranuke2025",pINFO) << "Successful many-body absorption, n<=18"; + LOG("HAIntranuke2025", pDEBUG) << "Nucleus : (A,Z) = ("<Find(ipdgc); + if(!remn) + { + LOG("HAIntranuke2025", pINFO) + << "NO Particle with [A = " << fRemnA << ", Z = " << fRemnZ + << ", pdgc = " << ipdgc << "] in PDGLibrary!"; + } + else + { + MassRem = remn->Mass(); + LOG("HAIntranuke2025", pINFO) + << "Particle with [A = " << fRemnA << ", Z = " << fRemnZ + << ", pdgc = " << ipdgc << "] in PDGLibrary!"; + } + double ERemn = fRemnP4.E(); + double PRemn = TMath::Sqrt(fRemnP4.Px()*fRemnP4.Px() + fRemnP4.Py()*fRemnP4.Py() + fRemnP4.Pz()*fRemnP4.Pz()); + double MRemn = TMath::Sqrt(ERemn*ERemn - PRemn*PRemn); + LOG("HAIntranuke2025",pINFO) << "PRemn = " << PRemn << " ;ERemn= " << ERemn; + LOG("HAIntranuke2025",pINFO) << "expt MRemn= " << MRemn << " ;true Mass= " << MassRem << " ; excitation energy (>0 good)= " << (MRemn-MassRem)*1000. << " MeV"; + } + else { + // recover + p->SetStatus(kIStStableFinalState); + ev->AddParticle(*p); + fRemnA+=np+nn; + fRemnZ+=np; + if ( pdgc==kPdgProton || pdgc==kPdgPiP ) fRemnZ--; + if ( pdgc==kPdgPiM ) fRemnZ++; + if ( pdg::IsNeutronOrProton (pdgc) ) fRemnA--; + exceptions::INukeException exception; + exception.SetReason("Phase space generation of absorption final state failed"); + throw exception; + } + delete p0; + } + } // end multi-nucleon FS + } + else // not absorption/pipro + { + LOG("HAIntranuke2025", pWARN) + << "Inelastic() can not handle fate: " << INukeHadroFates::AsString(fate); + return; + } +} +//___________________________________________________________________________ +int HAIntranuke2025::HandleCompoundNucleus(GHepRecord* /*ev*/, GHepParticle* /*p*/, int /*mom*/) const +{ + + // only relevant for hN mode - not anymore. + return false; + +} +//___________________________________________________________________________ +void HAIntranuke2025::LoadConfig(void) +{ + + // load hadronic cross sections + fHadroData2025 = INukeHadroData2025::Instance(); + + // fermi momentum setup + // this is specifically set in Intranuke2025::Configure(string) + fNuclmodel = dynamic_cast( this -> SubAlg("NuclearModel") ) ; + + // other intranuke config params + GetParam( "NUCL-R0", fR0 ); // fm + GetParam( "NUCL-NR", fNR ); + + GetParam( "INUKE-NucRemovalE", fNucRmvE ); // GeV + GetParam( "INUKE-HadStep", fHadStep ) ; + GetParam( "INUKE-NucAbsFac", fNucAbsFac ) ; + GetParam( "INUKE-NucCEXFac", fNucCEXFac ) ; + GetParam( "INUKE-Energy_Pre_Eq", fEPreEq ) ; + GetParam( "INUKE-FermiFac", fFermiFac ) ; + GetParam( "INUKE-FermiMomentum", fFermiMomentum ) ; + + GetParam( "INUKE-DoCompoundNucleus", fDoCompoundNucleus ) ; + GetParam( "INUKE-DoFermi", fDoFermi ) ; + GetParam( "INUKE-XsecNNCorr", fXsecNNCorr ) ; + GetParamDef( "UseOset", fUseOset, false ) ; + GetParamDef( "AltOset", fAltOset, false ) ; + + GetParam( "HAINUKE-DelRPion", fDelRPion ) ; + GetParam( "HAINUKE-DelRNucleon", fDelRNucleon ) ; + + GetParamDef( "FSI-ChargedPion-MFPScale", fChPionMFPScale, 1.0 ) ; + GetParamDef( "FSI-NeutralPion-MFPScale", fNeutralPionMFPScale, 1.0 ) ; + GetParamDef( "FSI-Pion-FracCExScale", fPionFracCExScale, 1.0 ) ; + GetParamDef( "FSI-ChargedPion-FracAbsScale", fChPionFracAbsScale, 1.0 ) ; + GetParamDef( "FSI-NeutralPion-FracAbsScale", fNeutralPionFracAbsScale,1.0 ) ; + GetParamDef( "FSI-Pion-FracInelScale", fPionFracInelScale, 1.0 ) ; + GetParamDef( "FSI-Pion-FracPiProdScale", fPionFracPiProdScale, 1.0 ) ; + GetParamDef( "FSI-Nucleon-MFPScale", fNucleonMFPScale, 1.0 ) ; + GetParamDef( "FSI-Nucleon-FracCExScale", fNucleonFracCExScale , 1.0 ) ; + GetParamDef( "FSI-Nucleon-FracInelScale", fNucleonFracInelScale, 1.0 ) ; + GetParamDef( "FSI-Nucleon-FracAbsScale", fNucleonFracAbsScale, 1.0 ) ; + GetParamDef( "FSI-Nucleon-FracPiProdScale", fNucleonFracPiProdScale, 1.0 ) ; + + // report + LOG("HAIntranuke2025", pINFO) << "Settings for INTRANUKE mode: " << INukeMode::AsString(kIMdHA); + LOG("HAIntranuke2025", pINFO) << "R0 = " << fR0 << " fermi"; + LOG("HAIntranuke2025", pINFO) << "NR = " << fNR; + LOG("HAIntranuke2025", pINFO) << "DelRPion = " << fDelRPion; + LOG("HAIntranuke2025", pINFO) << "DelRNucleon = " << fDelRNucleon; + LOG("HAIntranuke2025", pINFO) << "HadStep = " << fHadStep << " fermi"; + LOG("HAIntranuke2025", pINFO) << "EPreEq = " << fHadStep << " fermi"; + LOG("HAIntranuke2025", pINFO) << "NucAbsFac = " << fNucAbsFac; + LOG("HAIntranuke2025", pINFO) << "NucCEXFac = " << fNucCEXFac; + LOG("HAIntranuke2025", pINFO) << "FermiFac = " << fFermiFac; + LOG("HAIntranuke2025", pINFO) << "FermiMomtm = " << fFermiMomentum; + LOG("HAIntranuke2025", pINFO) << "DoFermi? = " << ((fDoFermi)?(true):(false)); + LOG("HAIntranuke2025", pINFO) << "DoCmpndNuc? = " << ((fDoCompoundNucleus)?(true):(false)); + LOG("HAIntranuke2025", pINFO) << "XsecNNCorr? = " << ((fXsecNNCorr)?(true):(false)); +} +//___________________________________________________________________________ +/* +INukeFateHA_t HAIntranuke2025::HadronFateOset () const +{ + const double fractionAbsorption = osetUtils::currentInstance-> + getAbsorptionFraction(); + const double fractionCex = osetUtils::currentInstance->getCexFraction (); + + RandomGen *randomGenerator = RandomGen::Instance(); + const double randomNumber = randomGenerator->RndFsi().Rndm(); + + LOG("HAIntranuke2025", pINFO) + << "\n frac{" << INukeHadroFates::AsString(kIHAFtCEx) << "} = " << fractionCex + << "\n frac{" << INukeHadroFates::AsString(kIHAFtInelas) << "} = " << 1-fractionCex-fractionAbsorption + << "\n frac{" << INukeHadroFates::AsString(kIHAFtAbs) << "} = " << fractionAbsorption; + if (randomNumber < fractionAbsorption && fRemnA > 1) return kIHAFtAbs; + else if (randomNumber < fractionAbsorption + fractionCex) return kIHAFtCEx; + else return kIHAFtInelas; +} +*/ diff --git a/src/Physics/HadronTransport/2025/HAIntranuke2025.h b/src/Physics/HadronTransport/2025/HAIntranuke2025.h new file mode 100644 index 000000000..ced9943d6 --- /dev/null +++ b/src/Physics/HadronTransport/2025/HAIntranuke2025.h @@ -0,0 +1,87 @@ +//____________________________________________________________________________ +/*! + +\class genie::Intranuke + +\brief The INTRANUKE intranuclear hadron transport MC. + Is a concrete implementation of the EventRecordVisitorI interface. + +\ref R.Merenyi et al., Phys.Rev.D45 (1992) + R.D.Ransome, Nucl.Phys.B 139 (2005) + + Current INTRANUKE development is led by S.Dytman and H.Gallagher. + The original INTRANUKE cascade MC was developed (in fortran) for the + NeuGEN MC by R.Edgecock, G.F.Pearce, W.A.Mann, R.Merenyi and others. + +\author Steve Dytman , Pittsburgh University + Aaron Meyer , Pittsburgh University + Alex Bell, Pittsburgh University + Hugh Gallagher , Tufts University + Costas Andreopoulos STFC, Rutherford Lab + +\created September 20, 2005 + +\cpright Copyright (c) 2003-2024, The GENIE Collaboration + For the full text of the license visit http://copyright.genie-mc.org + +*/ +//____________________________________________________________________________ + +#ifndef _HA_INTRANUKE_2025_H_ +#define _HA_INTRANUKE_2025_H_ + +#include + +#include "Physics/NuclearState/NuclearModelI.h" +#include "Framework/Algorithm/AlgFactory.h" +#include "Framework/EventGen/EventRecordVisitorI.h" +#include "Physics/HadronTransport/INukeMode.h" +#include "Physics/HadronTransport/INukeHadroFates2025.h" +#include "Physics/HadronTransport/Intranuke2025.h" + +class TLorentzVector; +class TVector3; + +namespace genie { + +class GHepParticle; +class INukeHadroData2025; +class PDGCodeList; + +class HAIntranuke2025 : public Intranuke2025 { + +friend class IntranukeTester; + +public : + HAIntranuke2025(); + HAIntranuke2025(string config); + ~HAIntranuke2025(); + + void ProcessEventRecord(GHepRecord * event_rec) const; + + virtual string GetINukeMode() const {return "hA2025";}; + virtual string GetGenINukeMode() const {return "hA";}; + +private: + + void LoadConfig (void); + + void SimulateHadronicFinalState (GHepRecord* ev, GHepParticle* p) const; + void SimulateHadronicFinalStateKinematics (GHepRecord* ev, GHepParticle* p) const; + + INukeFateHA_t HadronFateHA (const GHepParticle* p) const; + //INukeFateHA_t HadronFateOset (void) const; + void Inelastic (GHepRecord* ev, GHepParticle* p, INukeFateHA_t fate) const; + void ElasHA (GHepRecord* ev, GHepParticle* p, INukeFateHA_t fate) const; + void InelasticHA (GHepRecord* ev, GHepParticle* p, INukeFateHA_t fate) const; + double PiBounce (void) const; + double PnBounce (void) const; + int HandleCompoundNucleus(GHepRecord* ev, GHepParticle* p, int mom) const; + + mutable int nuclA; ///< value of A for the target nucleus in hA mode + mutable unsigned int fNumIterations; +}; + +} // genie namespace + +#endif // _HA_INTRANUKE_2025_H_ diff --git a/src/Physics/HadronTransport/2025/HNIntranuke2025.cxx b/src/Physics/HadronTransport/2025/HNIntranuke2025.cxx new file mode 100644 index 000000000..54a291905 --- /dev/null +++ b/src/Physics/HadronTransport/2025/HNIntranuke2025.cxx @@ -0,0 +1,1039 @@ + +//____________________________________________________________________________ +/* + Copyright (c) 2003-2024, The GENIE Collaboration + For the full text of the license visit http://copyright.genie-mc.org + + + Author: Steve Dytman , Pittsburgh Univ. + Aaron Meyer , Pittsburgh Univ. + Alex Bell, Pittsburgh Univ. + Hugh Gallagher , Tufts Univ. + Costas Andreopoulos , Rutherford Lab. + September 20, 2005 + + For the class documentation see the corresponding header file. + + Important revisions after version 2.0.0 : + @ Nov 30, 2007 - SD + Changed the hadron tracking algorithm to take into account the radial + nuclear density dependence. Using the somewhat empirical approach of + increasing the nuclear radius by a const (tunable) number times the tracked + particle's de Broglie wavelength as this helps getting the hadron+nucleus + cross sections right. + @ Mar 08, 2008 - CA + Fixed code retrieving the remnant nucleus which stopped working as soon as + simulation of nuclear de-excitation started pushing photons in the target + nucleus daughter list. + @ Jun 20, 2008 - CA + Fix a mem leak: The (clone of the) GHepParticle being re-scattered was not + deleted after it was added at the GHEP event record. + @ Jul 15, 2010 - AM + The hN mode is now implemented in Intranuke. Similar to hA mode, but particles + produced by reactions are stepped through the nucleus like probe particles. + Particles react with nucleons instead of the entire nucleus, and final states + are determined after reactions are finished, not before. + @ Dec 15, 2014 - SD, Nick Geary + Update fates to include Compound Nucleus final state correctly. + @ Jan 9, 2015 - SD, NG, Tomek Golan + Added 2014 version of INTRANUKE codes (new class) for independent development. + @ Oct, 2015 - TG + Added 2015 version of INTRANUKE codes (new class) for independent development. Include Oset model for medium corrections to piA for Tpi<350 MeV. + @ May, 2015 Flor Blaszczyk + K+ are now handled. + @ July, 2016 Nicholas Suarez, Josh Kleckner, SD + fix memory leak, fix fates, improve NNCorr binning + & Mar, 2025 Nicholas Suarez, SD + add compound nucleus option to populate KE<30 MeV +*/ +//____________________________________________________________________________ + +#include +#include + +#include + +#include "Framework/Algorithm/AlgConfigPool.h" +#include "Framework/Algorithm/AlgFactory.h" +#include "Framework/Conventions/GBuild.h" +#include "Framework/Conventions/Constants.h" +#include "Framework/Conventions/Controls.h" +#include "Framework/EventGen/EVGThreadException.h" +#include "Framework/GHEP/GHepFlags.h" +#include "Framework/GHEP/GHepStatus.h" +#include "Framework/GHEP/GHepRecord.h" +#include "Framework/GHEP/GHepParticle.h" +#include "Physics/HadronTransport/Intranuke2025.h" +#include "Physics/HadronTransport/HNIntranuke2025.h" +#include "Physics/HadronTransport/INukeException.h" +#include "Physics/HadronTransport/INukeHadroData2025.h" +#include "Physics/HadronTransport/INukeUtils2025.h" +#include "Framework/Interaction/Interaction.h" +#include "Framework/Messenger/Messenger.h" +#include "Framework/Numerical/RandomGen.h" +#include "Framework/Numerical/Spline.h" +#include "Framework/ParticleData/PDGLibrary.h" +#include "Framework/ParticleData/PDGCodes.h" +#include "Framework/ParticleData/PDGCodeList.h" +#include "Framework/ParticleData/PDGUtils.h" +#include "Framework/Utils/PrintUtils.h" +#include "Physics/NuclearState/NuclearUtils.h" +#include "Physics/HadronTransport/INukeOset.h" + +using std::ostringstream; + +using namespace genie; +using namespace genie::utils; +using namespace genie::utils::intranuke2025; +using namespace genie::constants; +using namespace genie::controls; + +//___________________________________________________________________________ +//___________________________________________________________________________ +// Methods specific to INTRANUKE's HN-mode +//___________________________________________________________________________ +//___________________________________________________________________________ +HNIntranuke2025::HNIntranuke2025() : +Intranuke2025("genie::HNIntranuke2025") +{ + +} +//___________________________________________________________________________ +HNIntranuke2025::HNIntranuke2025(string config) : +Intranuke2025("genie::HNIntranuke2025",config) +{ + +} +//___________________________________________________________________________ +HNIntranuke2025::~HNIntranuke2025() +{ + +} +//___________________________________________________________________________ +void HNIntranuke2025::ProcessEventRecord(GHepRecord * evrec) const +{ + LOG("HNIntranuke2025", pNOTICE) + << "************ Running hN2025 MODE INTRANUKE ************"; + + /* LOG("HNIntranuke2025", pWARN) + << print::PrintFramedMesg( + "Experimental code (INTRANUKE/hN model) - Run at your own risk"); + */ + + Intranuke2025::ProcessEventRecord(evrec); + + LOG("HNIntranuke2025", pINFO) << "Done with this event"; +} +//___________________________________________________________________________ +void HNIntranuke2025::SimulateHadronicFinalState(GHepRecord* ev, GHepParticle* p) const +{ +// Simulate a hadron interaction for the input particle p in HN mode +// + if(!p || !ev) + { + LOG("HNIntranuke2025", pERROR) << "** Null input!"; + return; + } + + // check particle id + int pdgc = p->Pdg(); + bool is_pion = (pdgc==kPdgPiP || pdgc==kPdgPiM || pdgc==kPdgPi0); + bool is_kaon = (pdgc==kPdgKP); + bool is_baryon = (pdgc==kPdgProton || pdgc==kPdgNeutron); + bool is_gamma = (pdgc==kPdgGamma); + if(!(is_pion || is_baryon || is_gamma || is_kaon)) + { + LOG("HNIntranuke2025", pERROR) << "** Cannot handle particle: " << p->Name(); + return; + } + try + { + // select a fate for the input particle + INukeFateHN_t fate = this->HadronFateHN(p); + + // store the fate + ev->Particle(p->FirstMother())->SetRescatterCode((int)fate); + + if(fate == kIHNFtUndefined) + { + LOG("HNIntranuke2025", pERROR) << "** Couldn't select a fate"; + LOG("HNIntranuke2025", pERROR) << "** Num Protons: " << fRemnZ + << ", Num Neutrons: "<<(fRemnA-fRemnZ); + LOG("HNIntranuke2025", pERROR) << "** Particle: " << "\n" << (*p); + //LOG("HNIntranuke2025", pERROR) << "** Event Record: " << "\n" << (*ev); + //p->SetStatus(kIStUndefined); + p->SetStatus(kIStStableFinalState); + ev->AddParticle(*p); + return; + } + + LOG("HNIntranuke2025", pNOTICE) + << "Selected " << p->Name() << " fate: " << INukeHadroFates::AsString(fate); + + // handle the reaction + if(fate == kIHNFtCEx || fate == kIHNFtElas) + { + this->ElasHN(ev,p,fate); + } + else if(fate == kIHNFtAbs) {this-> AbsorbHN(ev,p,fate);} + else if(fate == kIHNFtInelas && pdgc != kPdgGamma) + { +#ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__ + LOG("HNIntranuke2025", pDEBUG) + << "Invoking InelasticHN() for a : " << p->Name() + << " whose fate is : " << INukeHadroFates::AsString(fate); +#endif + + this-> InelasticHN(ev,p); + } + else if(fate == kIHNFtInelas && pdgc == kPdgGamma) {this-> GammaInelasticHN(ev,p,fate);} + else if(fate == kIHNFtCmp){utils::intranuke2025::PreEquilibrium(ev,p,fRemnA,fRemnZ,fRemnP4,fDoFermi,fFermiFac,fNuclmodel,fNucRmvE,kIMdHN);} + else if(fate == kIHNFtNoInteraction) + { + p->SetStatus(kIStStableFinalState); + ev->AddParticle(*p); + return; + } + } + catch(exceptions::INukeException exception) + { + this->SimulateHadronicFinalState(ev,p); + LOG("HNIntranuke2025", pNOTICE) + << "retry call to SimulateHadronicFinalState "; + LOG("HNIntranuke2025", pNOTICE) << exception; + + } +} +//___________________________________________________________________________ +INukeFateHN_t HNIntranuke2025::HadronFateHN(const GHepParticle * p) const +{ +// Select a hadron fate in HN mode +// + RandomGen * rnd = RandomGen::Instance(); + + // get pdgc code & kinetic energy in MeV + int pdgc = p->Pdg(); + double ke = p->KinE() / units::MeV; + + bool isPion = (pdgc == kPdgPiP or pdgc == kPdgPi0 or pdgc == kPdgPiM); + + if (isPion and fUseOset and ke < 350.0) return HadronFateOset (); + + LOG("HNIntranuke2025", pNOTICE) + << "Selecting hN fate for " << p->Name() << " with KE = " << ke << " MeV"; + + // try to generate a hadron fate + unsigned int iter = 0; + while(iter++ < kRjMaxIterations) { + + // handle pions + // + if (pdgc==kPdgPiP || pdgc==kPdgPiM || pdgc==kPdgPi0) { + + double frac_cex = this->FateWeight(pdgc, kIHNFtCEx) + * fHadroData2025->Frac(pdgc, kIHNFtCEx, ke, fRemnA, fRemnZ); + double frac_elas = this->FateWeight(pdgc, kIHNFtElas) + * fHadroData2025->Frac(pdgc, kIHNFtElas, ke, fRemnA, fRemnZ); + double frac_inel = this->FateWeight(pdgc, kIHNFtInelas) + * fHadroData2025->Frac(pdgc, kIHNFtInelas, ke, fRemnA, fRemnZ); + double frac_abs = this->FateWeight(pdgc, kIHNFtAbs) + * fHadroData2025->Frac(pdgc, kIHNFtAbs, ke, fRemnA, fRemnZ); + + frac_cex *= fNucCEXFac; // scaling factors + frac_abs *= fNucAbsFac; + frac_elas *= fNucQEFac; + if(pdgc==kPdgPi0) frac_abs*= 0.665; //isospin factor + + LOG("HNIntranuke2025", pNOTICE) + << "\n frac{" << INukeHadroFates::AsString(kIHNFtCEx) << "} = " << frac_cex + << "\n frac{" << INukeHadroFates::AsString(kIHNFtElas) << "} = " << frac_elas + << "\n frac{" << INukeHadroFates::AsString(kIHNFtInelas) << "} = " << frac_inel + << "\n frac{" << INukeHadroFates::AsString(kIHNFtAbs) << "} = " << frac_abs; + + // compute total fraction (can be <1 if fates have been switched off) + double tf = frac_cex + + frac_elas + + frac_inel + + frac_abs; + + double r = tf * rnd->RndFsi().Rndm(); +#ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__ + LOG("HNIntranuke2025", pDEBUG) << "r = " << r << " (max = " << tf << ")"; +#endif + + double cf=0; // current fraction + + if(r < (cf += frac_cex )) return kIHNFtCEx; //cex + if(r < (cf += frac_elas )) return kIHNFtElas; //elas + if(r < (cf += frac_inel )) return kIHNFtInelas; //inelas + if(r < (cf += frac_abs )) return kIHNFtAbs; //abs + + LOG("HNIntranuke2025", pWARN) + << "No selection after going through all fates! " + << "Total fraction = " << tf << " (r = " << r << ")"; + //////////////////////////// + return kIHNFtUndefined; + } + + // handle nucleons + else if (pdgc==kPdgProton || pdgc==kPdgNeutron) { + + double frac_elas = this->FateWeight(pdgc, kIHNFtElas) + * fHadroData2025->Frac(pdgc, kIHNFtElas, ke, fRemnA, fRemnZ); + double frac_inel = this->FateWeight(pdgc, kIHNFtInelas) + * fHadroData2025->Frac(pdgc, kIHNFtInelas, ke, fRemnA, fRemnZ); + double frac_cmp = this->FateWeight(pdgc, kIHNFtCmp) + * fHadroData2025->Frac(pdgc, kIHNFtCmp, ke, fRemnA , fRemnZ); + + LOG("HNIntranuke2025", pINFO) + << "\n frac{" << INukeHadroFates::AsString(kIHNFtElas) << "} = " << frac_elas + << "\n frac{" << INukeHadroFates::AsString(kIHNFtInelas) << "} = " << frac_inel; + + // compute total fraction (can be <1 if fates have been switched off) + double tf = frac_elas + + frac_inel + + frac_cmp; + + double r = tf * rnd->RndFsi().Rndm(); + +#ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__ + LOG("HNIntranuke2025", pDEBUG) << "r = " << r << " (max = " << tf << ")"; +#endif + + double cf=0; // current fraction + if(r < (cf += frac_elas )) return kIHNFtElas; // elas + if(r < (cf += frac_inel )) return kIHNFtInelas; // inelas + if(r < (cf += frac_cmp )) return kIHNFtCmp; // cmp + + LOG("HNIntranuke2025", pWARN) + << "No selection after going through all fates! " + << "Total fraction = " << tf << " (r = " << r << ")"; + ////////////////////////// + return kIHNFtUndefined; + } + + // handle gamma -- does not currently consider the elastic case + else if (pdgc==kPdgGamma) return kIHNFtInelas; + // Handle kaon -- elastic + charge exchange + else if (pdgc==kPdgKP){ + double frac_cex = this->FateWeight(pdgc, kIHNFtCEx) + * fHadroData2025->Frac(pdgc, kIHNFtCEx, ke, fRemnA, fRemnZ); + double frac_elas = this->FateWeight(pdgc, kIHNFtElas) + * fHadroData2025->Frac(pdgc, kIHNFtElas, ke, fRemnA, fRemnZ); + + // frac_cex *= fNucCEXFac; // scaling factors + // frac_elas *= fNucQEFac; // Flor - Correct scaling factors? + + LOG("HNIntranuke", pINFO) + << "\n frac{" << INukeHadroFates::AsString(kIHNFtCEx) << "} = " << frac_cex + << "\n frac{" << INukeHadroFates::AsString(kIHNFtElas) << "} = " << frac_elas; + + // compute total fraction (can be <1 if fates have been switched off) + double tf = frac_cex + + frac_elas; + + double r = tf * rnd->RndFsi().Rndm(); +#ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__ + LOG("HNIntranuke", pDEBUG) << "r = " << r << " (max = " << tf << ")"; +#endif + + double cf=0; // current fraction + + if(r < (cf += frac_cex )) return kIHNFtCEx; //cex + if(r < (cf += frac_elas )) return kIHNFtElas; //elas + + LOG("HNIntranuke", pWARN) + << "No selection after going through all fates! " + << "Total fraction = " << tf << " (r = " << r << ")"; + //////////////////////////// + return kIHNFtUndefined; + }//End K+ + + /*else if (pdgc==kPdgKM){ + + return kIHNFtElas; + }//End K-*/ + + }//iterations + + return kIHNFtUndefined; +} + +//___________________________________________________________________________ +double HNIntranuke2025::FateWeight(int pdgc, INukeFateHN_t fate) const +{ + // turn fates off if the remnant nucleus does not have the number of p,n + // required + + int np = fRemnZ; + int nn = fRemnA - fRemnZ; + + if (np < 1 && nn < 1) + { + LOG("HNIntranuke2025", pERROR) << "** Nothing left in nucleus!!! **"; + return 0; + } + else + { + if (fate == kIHNFtCEx && pdgc==kPdgPiP ) { return (nn>=1) ? 1. : 0.; } + if (fate == kIHNFtCEx && pdgc==kPdgPiM ) { return (np>=1) ? 1. : 0.; } + if (fate == kIHNFtCEx && pdgc==kPdgKP ) { return (nn>=1) ? 1. : 0.; } //Added, changed np to nn + if (fate == kIHNFtAbs) { return ((nn>=1) && (np>=1)) ? 1. : 0.; } + if (fate == kIHNFtCmp ) { return ((pdgc==kPdgProton||pdgc==kPdgNeutron)&&fDoCompoundNucleus&&fRemnA>5) ? 1. : 0.; } + + } + return 1.; +} +//___________________________________________________________________________ +void HNIntranuke2025::AbsorbHN( + GHepRecord * ev, GHepParticle * p, INukeFateHN_t fate) const +{ + // handles pi+d->2p, pi-d->nn, pi0 d->pn absorbtion, all using pi+d values + + int pdgc = p->Pdg(); + +#ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__ + LOG("HNIntranuke2025", pDEBUG) + << "AbsorbHN() is invoked for a : " << p->Name() + << " whose fate is : " << INukeHadroFates::AsString(fate); +#endif + + // check fate + if(fate!=kIHNFtAbs) + { + LOG("HNIntranuke2025", pWARN) + << "AbsorbHN() cannot handle fate: " << INukeHadroFates::AsString(fate); + return; + } + + // random number generator + RandomGen * rnd = RandomGen::Instance(); + + // Notes on the kinematics + // -- Simple variables are used for efficiency + // -- Variables are numbered according to particle + // -- -- #1 -> incoming particle + // -- -- #2 -> target (here, 2_1 and 2_2 for individual particles) + // -- -- #3 -> scattered incoming (Particle tracked in hA mode) + // -- -- #4 -> other scattered particle + // -- Suffix "L" is for lab frame, suffix "CM" is for center of mass frame + // -- Subscript "z" is for parallel component, "t" is for transverse + + int pcode, t1code, t2code, scode, s2code; // particles + double M1, M2_1, M2_2, M3, M4; // rest energies, in GeV + double E1L, P1L, E2L, P2L, E3L, P3L, E4L, P4L; + double P1zL, P2zL; + double beta, gm; // speed and gamma for CM frame in lab + double Et, E2CM; + double C3CM, S3CM; // cos and sin of scattering angle + double Theta1, Theta2, theta5; + double PHI3; // transverse scattering angle + double E1CM, E3CM, E4CM, P3CM; + double P3zL, P3tL, P4zL, P4tL; + double E2_1L, E2_2L; + TVector3 tP2_1L, tP2_2L, tP1L, tP2L, tPtot, P1zCM, P2zCM; + TVector3 tP3L, tP4L; + TVector3 bDir, tTrans, tbeta, tVect; + + // Library instance for reference + PDGLibrary * pLib = PDGLibrary::Instance(); + + // Handle fermi target + Target target(ev->TargetNucleus()->Pdg()); + + // Target should be a deuteron, but for now + // handling it as seperate nucleons + if(pdgc==211) // pi-plus + { + pcode = 211; + t1code = 2212; // proton + t2code = 2112; // neutron + scode = 2212; + s2code = 2212; + } + else if(pdgc==-211) // pi-minus + { + pcode = -211; + t1code = 2212; + t2code = 2112; + scode = 2112; + s2code = 2112; + } + else if(pdgc==111) // pi-zero + { + pcode = 111; + t1code = 2212; + t2code = 2112; + scode = 2212; + s2code = 2112; + } + else + { + LOG("HNIntranuke2025", pWARN) + << "AbsorbHN() cannot handle probe: " << pdgc; + return; + } + + // assign proper masses + M1 = pLib->Find(pcode) ->Mass(); + M2_1 = pLib->Find(t1code)->Mass(); + M2_2 = pLib->Find(t2code)->Mass(); + M3 = pLib->Find(scode) ->Mass(); + M4 = pLib->Find(s2code)->Mass(); + + // handle fermi momentum + if(fDoFermi) + { + target.SetHitNucPdg(t1code); + fNuclmodel->GenerateNucleon(target); + tP2_1L=fFermiFac * fNuclmodel->Momentum3(); + E2_1L = TMath::Sqrt(tP2_1L.Mag2() + M2_1*M2_1); + + target.SetHitNucPdg(t2code); + fNuclmodel->GenerateNucleon(target); + tP2_2L=fFermiFac * fNuclmodel->Momentum3(); + E2_2L = TMath::Sqrt(tP2_2L.Mag2() + M2_2*M2_2); + } + else + { + tP2_1L.SetXYZ(0.0, 0.0, 0.0); + E2_1L = M2_1; + + tP2_2L.SetXYZ(0.0, 0.0, 0.0); + E2_2L = M2_2; + } + + E2L = E2_1L + E2_2L; + + // adjust p to reflect scattering + // get random scattering angle + C3CM = fHadroData2025->IntBounce(p,t1code,scode,fate); + if (C3CM<-1.) + { + p->SetStatus(kIStStableFinalState); + ev->AddParticle(*p); + return; + } + S3CM = TMath::Sqrt(1.0 - C3CM*C3CM); + + // Get lab energy and momenta + E1L = p->E(); + if(E1L<0.001) E1L=0.001; + P1L = TMath::Sqrt(E1L*E1L - M1*M1); + tP1L = p->P4()->Vect(); + tP2L = tP2_1L + tP2_2L; + P2L = tP2L.Mag(); + tPtot = tP1L + tP2L; + + // get unit vectors and angles needed for later + bDir = tPtot.Unit(); + Theta1 = tP1L.Angle(bDir); + Theta2 = tP2L.Angle(bDir); + + // get parallel and transverse components + P1zL = P1L*TMath::Cos(Theta1); + P2zL = P2L*TMath::Cos(Theta2); + tVect.SetXYZ(1,0,0); + if(TMath::Abs((tVect - bDir).Mag())<.01) tVect.SetXYZ(0,1,0); + theta5 = tVect.Angle(bDir); + tTrans = (tVect - TMath::Cos(theta5)*bDir).Unit(); + + // calculate beta and gamma + tbeta = tPtot * (1.0 / (E1L + E2L)); + beta = tbeta.Mag(); + gm = 1.0 / TMath::Sqrt(1.0 - beta*beta); + + // boost to CM frame to get scattered particle momenta + E1CM = gm*E1L - gm*beta*P1zL; + P1zCM = gm*P1zL*bDir - gm*tbeta*E1L; + E2CM = gm*E2L - gm*beta*P2zL; + P2zCM = gm*P2zL*bDir - gm*tbeta*E2L; + Et = E1CM + E2CM; + E3CM = (Et*Et + (M3*M3) - (M4*M4)) / (2.0*Et); + E4CM = Et - E3CM; + P3CM = TMath::Sqrt(E3CM*E3CM - M3*M3); + + // boost back to lab + P3zL = gm*beta*E3CM + gm*P3CM*C3CM; + P3tL = P3CM*S3CM; + P4zL = gm*beta*E4CM + gm*P3CM*(-C3CM); + P4tL = P3CM*(-S3CM); + + P3L = TMath::Sqrt(P3zL*P3zL + P3tL*P3tL); + P4L = TMath::Sqrt(P4zL*P4zL + P4tL*P4tL); + + // check for too small values + // may introduce error, so warn if it occurs + if(!(TMath::Finite(P3L))||P3L<.001) + { + LOG("HNIntranuke2025",pINFO) + << "Particle 3 " << M3 << " momentum small or non-finite: " << P3L + << "\n" << "--> Assigning .001 as new momentum"; + P3tL = 0; + P3zL = .001; + P3L = .001; + E3L = TMath::Sqrt(P3L*P3L + M3*M3); + } + + if(!(TMath::Finite(P4L))||P4L<.001) + { + LOG("HNIntranuke2025",pINFO) + << "Particle 4 " << M4 << " momentum small or non-finite: " << P4L + << "\n" << "--> Assigning .001 as new momentum"; + P4tL = 0; + P4zL = .001; + P4L = .001; + E4L = TMath::Sqrt(P4L*P4L + M4*M4); + } + + // pauli blocking (do not apply PB for Oset) + //if(!fUseOset && (P3L < fFermiMomentum || P4L < fFermiMomentum)) + double ke = p->KinE() / units::MeV; + if((!fUseOset || ke > 350.0 ) && (P3L < fFermiMomentum || P4L < fFermiMomentum)) + { +#ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__ + LOG("HNIntranuke2025",pINFO) << "AbsorbHN failed: Pauli blocking"; +#endif + /* + p->SetStatus(kIStHadronInTheNucleus); + //disable until needed + // utils::intranuke2025::StepParticle(p,fFreeStep,fTrackingRadius); + ev->AddParticle(*p); + return; + */ + // new attempt at error handling: + LOG("HNIntranuke2025", pINFO) << "AbsorbHN failed: Pauli blocking"; + exceptions::INukeException exception; + exception.SetReason("hN absorption failed"); + throw exception; + } + + // handle remnant nucleus updates + fRemnZ--; + fRemnA -=2; + fRemnP4 -= TLorentzVector(tP2_1L,E2_1L); + fRemnP4 -= TLorentzVector(tP2_2L,E2_2L); + + // get random phi angle, distributed uniformally in 360 deg + PHI3 = 2 * kPi * rnd->RndFsi().Rndm(); + + tP3L = P3zL*bDir + P3tL*tTrans; + tP4L = P4zL*bDir + P4tL*tTrans; + + tP3L.Rotate(PHI3,bDir); // randomize transverse components + tP4L.Rotate(PHI3,bDir); + + E3L = TMath::Sqrt(P3L*P3L + M3*M3); + E4L = TMath::Sqrt(P4L*P4L + M4*M4); + + // create t particle w/ appropriate momenta, code, and status + // set target's mom to be the mom of the hadron that was cloned + GHepParticle * t = new GHepParticle(*p); + t->SetFirstMother(p->FirstMother()); + t->SetLastMother(p->LastMother()); + + TLorentzVector t4P4L(tP4L,E4L); + t->SetPdgCode(s2code); + t->SetMomentum(t4P4L); + t->SetStatus(kIStHadronInTheNucleus); + + // adjust p to reflect scattering + TLorentzVector t4P3L(tP3L,E3L); + p->SetPdgCode(scode); + p->SetMomentum(t4P3L); + p->SetStatus(kIStHadronInTheNucleus); + +#ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__ + LOG("HNIntranuke2025", pDEBUG) + << "|p3| = " << (P3L) << ", E3 = " << (E3L); + LOG("HNIntranuke2025", pDEBUG) + << "|p4| = " << (P4L) << ", E4 = " << (E4L); +#endif + + ev->AddParticle(*p); + ev->AddParticle(*t); + + delete t; // delete particle clone +} +//___________________________________________________________________________ +void HNIntranuke2025::ElasHN( + GHepRecord * ev, GHepParticle * p, INukeFateHN_t fate) const +{ + // scatters particle within nucleus + +#ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__ + LOG("HNIntranuke2025", pDEBUG) + << "ElasHN() is invoked for a : " << p->Name() + << " whose fate is : " << INukeHadroFates::AsString(fate); +#endif + + if(fate!=kIHNFtCEx && fate!=kIHNFtElas) + { + LOG("HNIntranuke2025", pWARN) + << "ElasHN() cannot handle fate: " << INukeHadroFates::AsString(fate); + return; + } + + // Random number generator + RandomGen * rnd = RandomGen::Instance(); + + // vars for incoming particle, target, and scattered pdg codes + int pcode = p->Pdg(); + int tcode, scode, s2code; + double ppcnt = (double) fRemnZ / (double) fRemnA; // % of protons + + // Select a target randomly, weighted to # + // -- Unless, of course, the fate is CEx, + // -- in which case the target may be deterministic + // Also assign scattered particle code + if(fate==kIHNFtCEx) + { + if(pcode==kPdgPiP) {tcode = kPdgNeutron; scode = kPdgPi0; s2code = kPdgProton;} + else if(pcode==kPdgPiM) {tcode = kPdgProton; scode = kPdgPi0; s2code = kPdgNeutron;} + else if(pcode==kPdgKP) {tcode = kPdgNeutron; scode = kPdgK0; s2code = kPdgProton;} + else + { + // for pi0 + tcode = (rnd->RndFsi().Rndm()<=ppcnt)?(kPdgProton) :(kPdgNeutron); + scode = (tcode == kPdgProton) ?(kPdgPiP) :(kPdgPiM); + s2code = (tcode == kPdgProton) ?(kPdgNeutron):(kPdgProton); + } + } + else + { + tcode = (rnd->RndFsi().Rndm()<=ppcnt)?(kPdgProton):(kPdgNeutron); + scode = pcode; + s2code = tcode; + } + + // get random scattering angle + double C3CM = fHadroData2025->IntBounce(p,tcode,scode,fate); + if (C3CM<-1.) + { + p->SetStatus(kIStStableFinalState); + ev->AddParticle(*p); + return; + } + + // create scattered particle + GHepParticle * t = new GHepParticle(*p); + t->SetPdgCode(tcode); + double Mt = t->Mass(); + //t->SetMomentum(TLorentzVector(0,0,0,Mt)); + t->SetRemovalEnergy(0); + // handle fermi momentum + if(fDoFermi) + { + // Handle fermi target + Target target(ev->TargetNucleus()->Pdg()); + //LOG("HAIntranuke2025", pNOTICE) << "Nuclmodel= " << fNuclmodel->ModelType(target) ; + target.SetHitNucPdg(tcode); + fNuclmodel->GenerateNucleon(target); + TVector3 tP3L = fFermiFac * fNuclmodel->Momentum3(); + double tE = TMath::Sqrt(tP3L.Mag2() + Mt*Mt); + t->SetMomentum(TLorentzVector(tP3L,tE)); + } + else + { + t->SetMomentum(TLorentzVector(0,0,0,Mt)); + } + + bool pass = utils::intranuke2025::TwoBodyCollision(ev,pcode,tcode,scode,s2code,C3CM, + p,t,fRemnA,fRemnZ,fRemnP4,kIMdHN); + +#ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__ + LOG("HNIntranuke2025",pDEBUG) + << "|p3| = " << P3L << ", E3 = " << E3L; + LOG("HNIntranuke2025",pDEBUG) + << "|p4| = " << P4L << ", E4 = " << E4L; +#endif + + if (pass==true) + { + ev->AddParticle(*p); + ev->AddParticle(*t); + } else + { + delete t; //fixes memory leak + LOG("HNIntranuke2025", pINFO) << "Elastic in hN failed calling TwoBodyCollision"; + exceptions::INukeException exception; + exception.SetReason("hN scattering kinematics through TwoBodyCollision failed"); + throw exception; + } + + delete t; + +} +//___________________________________________________________________________ +void HNIntranuke2025::InelasticHN(GHepRecord* ev, GHepParticle* p) const +{ + // Aaron Meyer (Jan 2010) + // Updated version of InelasticHN + + GHepParticle s1(*p); + GHepParticle s2(*p); + GHepParticle s3(*p); + s2.SetRemovalEnergy(0); + s3.SetRemovalEnergy(0); + + + + if (utils::intranuke2025::PionProduction(ev,p,&s1,&s2,&s3,fRemnA,fRemnZ,fRemnP4,fDoFermi,fFermiFac,fFermiMomentum,fNuclmodel)) + { + // set status of particles and return + + s1.SetStatus(kIStHadronInTheNucleus); + s2.SetStatus(kIStHadronInTheNucleus); + s3.SetStatus(kIStHadronInTheNucleus); + + ev->AddParticle(s1); + ev->AddParticle(s2); + ev->AddParticle(s3); + } + else + { + LOG("HNIntranuke2025", pNOTICE) << "Error: could not create pion production final state"; + exceptions::INukeException exception; + exception.SetReason("PionProduction in hN failed"); + throw exception; + } + return; + +} +//___________________________________________________________________________ +void HNIntranuke2025::GammaInelasticHN(GHepRecord* ev, GHepParticle* p, INukeFateHN_t fate) const +{ + // This function handles pion photoproduction reactions + +#ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__ + LOG("HNIntranuke2025", pDEBUG) + << "GammaInelasticHN() is invoked for a : " << p->Name() + << " whose fate is : " << INukeHadroFates::AsString(fate); +#endif + + if(fate!=kIHNFtInelas && p->Pdg()!=kPdgGamma) + { + LOG("HNIntranuke2025", pWARN) + << "GammaInelasticHN() cannot handle fate: " << INukeHadroFates::AsString(fate); + return; + } + + // random number generator + RandomGen * rnd = RandomGen::Instance(); + + // vars for incoming particle, target, and scattered reaction products + double ppcnt = (double) fRemnZ / (double) fRemnA; // % of protons + int pcode = p->Pdg(); + int tcode = (rnd->RndFsi().Rndm()<=ppcnt)?(kPdgProton):(kPdgNeutron); + int scode, s2code; + double ke = p->KinE() / units::MeV; + + LOG("HNIntranuke2025", pNOTICE) + << "Particle code: " << pcode << ", target: " << tcode; + + + if (rnd->RndFsi().Rndm() * (fHadroData2025 -> XSecGamp_fs() -> Evaluate(ke) + + fHadroData2025 -> XSecGamn_fs() -> Evaluate(ke) ) + <= fHadroData2025 -> XSecGamp_fs() -> Evaluate(ke) ) { scode = kPdgProton; } + else { scode = kPdgNeutron; } + + //scode=fHadroData2025->AngleAndProduct(p,tcode,C3CM,fate); + //double C3CM = 0.0; // cos of scattering angle + double C3CM = fHadroData2025->IntBounce(p,tcode,scode,fate); + + if ((tcode == kPdgProton ) && (scode==kPdgProton )) {s2code=kPdgPi0;} + else if ((tcode == kPdgProton ) && (scode==kPdgNeutron)) {s2code=kPdgPiP;} + else if ((tcode == kPdgNeutron) && (scode==kPdgProton )) {s2code=kPdgPiM;} + else if ((tcode == kPdgNeutron) && (scode==kPdgNeutron)) {s2code=kPdgPi0;} + else { + LOG("HNIntranuke2025", pERROR) + << "Error: could not determine particle final states"; + ev->AddParticle(*p); + return; + } + + LOG("HNIntranuke2025", pNOTICE) + << "GammaInelastic fate: " << INukeHadroFates::AsString(fate); + LOG("HNIntranuke2025", pNOTICE) + << " final state: " << scode << " and " << s2code; + LOG("HNIntranuke2025", pNOTICE) + << " scattering angle: " << C3CM; + + GHepParticle * t = new GHepParticle(*p); + t->SetPdgCode(tcode); + double Mt = t->Mass(); + + // handle fermi momentum + if(fDoFermi) + { + // Handle fermi target + Target target(ev->TargetNucleus()->Pdg()); + + target.SetHitNucPdg(tcode); + fNuclmodel->GenerateNucleon(target); + TVector3 tP3L = fFermiFac * fNuclmodel->Momentum3(); + double tE = TMath::Sqrt(tP3L.Mag2() + Mt*Mt); + t->SetMomentum(TLorentzVector(tP3L,tE)); + } + else + { + t->SetMomentum(TLorentzVector(0,0,0,Mt)); + } + + bool pass = utils::intranuke2025::TwoBodyCollision(ev,pcode,tcode,scode,s2code,C3CM, + p,t,fRemnA,fRemnZ,fRemnP4,kIMdHN); + +#ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__ + LOG("HNIntranuke2025",pDEBUG) + << "|p3| = " << P3L << ", E3 = " << E3L; + LOG("HNIntranuke2025",pDEBUG) + << "|p4| = " << P4L << ", E4 = " << E4L; +#endif + + if (pass==true) + { + //p->SetStatus(kIStStableFinalState); + //t->SetStatus(kIStStableFinalState); + ev->AddParticle(*p); + ev->AddParticle(*t); + } else + { + ev->AddParticle(*p); + } + + delete t; + +} +//___________________________________________________________________________ +int HNIntranuke2025::HandleCompoundNucleus(GHepRecord* ev, GHepParticle* p, int mom) const +{ + + // handle compound nucleus option + // -- Call the PreEquilibrium function + if( fDoCompoundNucleus && IsInNucleus(p) && pdg::IsNeutronOrProton(p->Pdg())) + { // random number generator + //unused var - quiet compiler warning//RandomGen * rnd = RandomGen::Instance(); + + if((p->KinE() < fEPreEq) ) + { + if(fRemnA>4) //this needs to be matched to what is in PreEq and Eq + { + GHepParticle * sp = new GHepParticle(*p); + sp->SetFirstMother(mom); + // this was PreEquilibrium - now just used for hN + //same arguement lists for PreEq and Eq + utils::intranuke2025::Equilibrium(ev,sp,fRemnA,fRemnZ,fRemnP4, + fDoFermi,fFermiFac,fNuclmodel,fNucRmvE,kIMdHN); + + delete sp; + return 2; + } + else + { + // nothing left to interact with! + LOG("HNIntranuke2025", pNOTICE) + << "*** Nothing left to interact with, escaping."; + GHepParticle * sp = new GHepParticle(*p); + sp->SetFirstMother(mom); + sp->SetStatus(kIStStableFinalState); + ev->AddParticle(*sp); + delete sp; + return 1; + } + } + } + return 0; +} +//___________________________________________________________________________ +bool HNIntranuke2025::HandleCompoundNucleusHN(GHepRecord* ev, GHepParticle* p) const +{ + return (this->HandleCompoundNucleus(ev,p,p->FirstMother())==2); +} +//___________________________________________________________________________ + +void HNIntranuke2025::LoadConfig(void) +{ + // load hadronic cross sections + fHadroData2025 = INukeHadroData2025::Instance(); + + // fermi momentum setup + // this is specifically set in Intranuke2025::Configure(string) + fNuclmodel = dynamic_cast( this -> SubAlg("NuclearModel") ) ; + + // other intranuke config params + GetParam( "NUCL-R0", fR0 ); // fm + GetParam( "NUCL-NR", fNR ); + + GetParam( "INUKE-NucRemovalE", fNucRmvE ); // GeV + GetParam( "INUKE-HadStep", fHadStep ) ; + GetParam( "INUKE-NucAbsFac", fNucAbsFac ) ; + GetParam( "INUKE-NucQEFac", fNucQEFac ) ; + GetParam( "INUKE-NucCEXFac", fNucCEXFac ) ; + GetParam( "INUKE-Energy_Pre_Eq", fEPreEq ) ; + GetParam( "INUKE-FermiFac", fFermiFac ) ; + GetParam( "INUKE-FermiMomentum", fFermiMomentum ) ; + + GetParam( "INUKE-DoCompoundNucleus", fDoCompoundNucleus ) ; + GetParam( "INUKE-DoFermi", fDoFermi ) ; + GetParam( "INUKE-XsecNNCorr", fXsecNNCorr ) ; + GetParamDef( "AltOset", fAltOset, false ) ; + + GetParam( "HNINUKE-UseOset", fUseOset ) ; + GetParam( "HNINUKE-DelRPion", fDelRPion ) ; + GetParam( "HNINUKE-DelRNucleon", fDelRNucleon ) ; + + GetParamDef( "FSI-ChargedPion-MFPScale", fChPionMFPScale, 1.0 ) ; + GetParamDef( "FSI-NeutralPion-MFPScale", fNeutralPionMFPScale, 1.0 ) ; + GetParamDef( "FSI-Nucleon-MFPScale", fNucleonMFPScale, 1.0 ) ; + + // report + LOG("HNIntranuke2025", pINFO) << "Settings for Intranuke2025 mode: " << INukeMode::AsString(kIMdHN); + LOG("HNIntranuke2025", pWARN) << "R0 = " << fR0 << " fermi"; + LOG("HNIntranuke2025", pWARN) << "NR = " << fNR; + LOG("HNIntranuke2025", pWARN) << "DelRPion = " << fDelRPion; + LOG("HNIntranuke2025", pWARN) << "DelRNucleon = " << fDelRNucleon; + LOG("HNIntranuke2025", pWARN) << "HadStep = " << fHadStep << " fermi"; + LOG("HNIntranuke2025", pWARN) << "NucAbsFac = " << fNucAbsFac; + LOG("HNIntranuke2025", pWARN) << "NucQEFac = " << fNucQEFac; + LOG("HNIntranuke2025", pWARN) << "NucCEXFac = " << fNucCEXFac; + LOG("HNIntranuke2025", pWARN) << "EPreEq = " << fEPreEq; + LOG("HNIntranuke2025", pWARN) << "FermiFac = " << fFermiFac; + LOG("HNIntranuke2025", pWARN) << "FermiMomtm = " << fFermiMomentum; + LOG("HNIntranuke2025", pWARN) << "DoFermi? = " << ((fDoFermi)?(true):(false)); + LOG("HNIntranuke2025", pWARN) << "DoCmpndNuc? = " << ((fDoCompoundNucleus)?(true):(false)); + LOG("HNIntranuke2025", pWARN) << "useOset = " << fUseOset; + LOG("HNIntranuke2025", pWARN) << "altOset = " << fAltOset; + LOG("HNIntranuke2025", pWARN) << "XsecNNCorr? = " << ((fXsecNNCorr)?(true):(false)); + LOG("HNIntranuke2025", pWARN) << "FSI-ChargedPion-MFPScale = " << fChPionMFPScale; + LOG("HNIntranuke2025", pWARN) << "FSI-NeutralPion-MFPScale = " << fNeutralPionMFPScale; +} +//___________________________________________________________________________ + +INukeFateHN_t HNIntranuke2025::HadronFateOset () const +{ + //LOG("HNIntranuke2025", pWARN) << "IN HadronFateOset"; + + //LOG("HNIntranuke2025", pWARN) << "{ frac abs = " << osetUtils::currentInstance->getAbsorptionFraction(); + //LOG("HNIntranuke2025", pWARN) << " frac cex = " << osetUtils::currentInstance->getCexFraction() << " }"; + + double fractionAbsorption = osetUtils::currentInstance->getAbsorptionFraction(); + double fractionCex = osetUtils::currentInstance->getCexFraction (); + double fractionElas = 1 - (fractionAbsorption + fractionCex); + + fractionCex *= fNucCEXFac; // scaling factors + fractionAbsorption *= fNucAbsFac; + fractionElas *= fNucQEFac; + + double totalFrac = fractionCex + fractionAbsorption + fractionElas; + + RandomGen *randomGenerator = RandomGen::Instance(); + const double randomNumber = randomGenerator->RndFsi().Rndm() * totalFrac; + + LOG("HNIntranuke2025", pNOTICE) << "{ frac abs = " << fractionAbsorption; + LOG("HNIntranuke2025", pNOTICE) << " frac cex = " << fractionCex; + LOG("HNIntranuke2025", pNOTICE) << " frac elas = " << fractionElas << " }"; + + if (randomNumber < fractionAbsorption && fRemnA > 1) return kIHNFtAbs; + else if (randomNumber < fractionAbsorption + fractionCex) return kIHNFtCEx; + else return kIHNFtElas; +} diff --git a/src/Physics/HadronTransport/2025/HNIntranuke2025.h b/src/Physics/HadronTransport/2025/HNIntranuke2025.h new file mode 100644 index 000000000..6177f55dd --- /dev/null +++ b/src/Physics/HadronTransport/2025/HNIntranuke2025.h @@ -0,0 +1,91 @@ +//____________________________________________________________________________ +/*! + +\class genie::Intranuke + +\brief The INTRANUKE intranuclear hadron transport MC. + Is a concrete implementation of the EventRecordVisitorI interface. + +\ref R.Merenyi et al., Phys.Rev.D45 (1992) + R.D.Ransome, Nucl.Phys.B 139 (2005) + + Current INTRANUKE development is led by S.Dytman and H.Gallagher. + The original INTRANUKE cascade MC was developed (in fortran) for the + NeuGEN MC by R.Edgecock, G.F.Pearce, W.A.Mann, R.Merenyi and others. + +\author Steve Dytman , Pittsburgh University + Aaron Meyer , Pittsburgh University + Alex Bell, Pittsburgh University + Hugh Gallagher , Tufts University + Costas Andreopoulos STFC, Rutherford Lab + +\created September 20, 2005 + +\cpright Copyright (c) 2003-2024, The GENIE Collaboration + For the full text of the license visit http://copyright.genie-mc.org + +*/ +//____________________________________________________________________________ + +#ifndef _HN_INTRANUKE_2025_H_ +#define _HN_INTRANUKE_2025_H_ + +#include + +#include "Physics/NuclearState/NuclearModelI.h" +#include "Framework/Algorithm/AlgFactory.h" +#include "Framework/EventGen/EventRecordVisitorI.h" +#include "Physics/HadronTransport/INukeMode.h" +#include "Physics/HadronTransport/INukeHadroFates.h" +#include "Physics/HadronTransport/Intranuke2025.h" + +class TLorentzVector; +class TVector3; + +namespace genie { + +class GHepParticle; +class INukeHadroData; +class PDGCodeList; + +class HNIntranuke2025 : public Intranuke2025 { + +friend class IntranukeTester; + +public : + HNIntranuke2025(); + HNIntranuke2025(string config); + ~HNIntranuke2025(); + + void ProcessEventRecord(GHepRecord * event_rec) const; + + virtual string GetINukeMode() const {return "hN2025";}; + virtual string GetGenINukeMode() const {return "hN";}; + +private: + + void LoadConfig (void); + + // methods specific to intranuke HN-mode + void SimulateHadronicFinalState (GHepRecord* ev, GHepParticle* p) const; + INukeFateHN_t HadronFateHN (const GHepParticle* p) const; + INukeFateHN_t HadronFateOset () const; + double FateWeight (int pdgc, INukeFateHN_t fate) const; + void ElasHN (GHepRecord* ev, GHepParticle* p, INukeFateHN_t fate) const; + void AbsorbHN (GHepRecord* ev, GHepParticle* p, INukeFateHN_t fate) const; + void InelasticHN (GHepRecord* ev, GHepParticle* p) const; + void GammaInelasticHN (GHepRecord* ev, GHepParticle* p, INukeFateHN_t fate) const; + bool HandleCompoundNucleusHN (GHepRecord* ev, GHepParticle* p) const; + int HandleCompoundNucleus(GHepRecord* ev, GHepParticle* p, int mom) const; + + mutable int nuclA; ///< value of A for the target nucleus in hA mode + + // data members specific to intranuke HN-mode + double fNucQEFac; + +}; + +} // genie namespace + +#endif // _HN_INTRANUKE_ALT_H_ + diff --git a/src/Physics/HadronTransport/2025/INukeHadroData2025.cxx b/src/Physics/HadronTransport/2025/INukeHadroData2025.cxx new file mode 100644 index 000000000..80af260c7 --- /dev/null +++ b/src/Physics/HadronTransport/2025/INukeHadroData2025.cxx @@ -0,0 +1,1892 @@ +//____________________________________________________________________________ +/* + Copyright (c) 2003-2024, The GENIE Collaboration + For the full text of the license visit http://copyright.genie-mc.org + + + Costas Andreopoulos , Rutherford Lab. + Steve Dytman , Pittsburgh Univ. + Aaron Meyer , Pittsburgh Univ. + Alex Bell, Pittsburgh Univ. + February 01, 2007 + + For the class documentation see the corresponding header file. + + Important revisions after version 2.0.0 : + @ Dec 06, 2008 - CA + Tweak dtor so as not to clutter the output if GENIE exits in err so as to + spot the fatal mesg immediately. + @ Jul 15, 2010 - AM + MeanFreePath now distinguishes between protons and neutrons. To account for + this, additional splines were added for each nucleon. Absorption fates + condensed into a single fate, splines updated accordingly. Added gamma and kaon + splines.Outdated splines were removed. Function IntBounce implemented to calculate + a CM scattering angle for given probe, target, product, and fate. AngleAndProduct + similar to IntBounce, but also determines the target nucleon. + @ May 01, 2012 - CA + Pick data from $GENIE/data/evgen/intranuke/ + @ Jan 9, 2015 - SD, Nick Geary, Tomek Golan + Added 2014 version of INTRANUKE codes for independent development. + @ Oct, 2015 - TG + Added 2015 version of INTRANUKE codes for independent development. + Include Oset data files. + @ Apr, 2016 - Flor Blasczyk + Added K+ cex data files +*/ +//____________________________________________________________________________ + +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +#include "Framework/Conventions/Constants.h" +#include "Framework/GHEP/GHepParticle.h" +#include "Physics/HadronTransport/INukeHadroData2025.h" +#include "Framework/Messenger/Messenger.h" +#include "Framework/Numerical/RandomGen.h" +#include "Framework/Numerical/Spline.h" +#include "Framework/ParticleData/PDGCodes.h" + +using std::ostringstream; +using std::ios; + +using namespace genie; +using namespace genie::constants; + +//____________________________________________________________________________ +INukeHadroData2025 * INukeHadroData2025::fInstance = 0; +//____________________________________________________________________________ +double INukeHadroData2025::fMinKinEnergy = 1.0; // MeV +double INukeHadroData2025::fMaxKinEnergyHA = 999.0; // MeV +double INukeHadroData2025::fMaxKinEnergyHN = 1799.0; // MeV +//____________________________________________________________________________ +INukeHadroData2025::INukeHadroData2025() +{ + this->LoadCrossSections(); + fInstance = 0; +} +//____________________________________________________________________________ +INukeHadroData2025::~INukeHadroData2025() +{ + + // pi+n/p hA x-section splines + delete fXSecPipn_Tot; + delete fXSecPipn_CEx; + delete fXSecPipn_Elas; + delete fXSecPipn_Reac; + delete fXSecPipp_Tot; + delete fXSecPipp_CEx; + delete fXSecPipp_Elas; + delete fXSecPipp_Reac; + delete fXSecPipd_Abs; + + delete fXSecPp_Cmp; //added to fix memory leak; no noticeable effect, but good convention. + delete fXSecPn_Cmp; + delete fXSecNn_Cmp; + delete fXSecPp_Tot; + delete fXSecPp_Elas; + delete fXSecPp_Reac; + delete fXSecPn_Tot; + delete fXSecPn_Elas; + delete fXSecPn_Reac; + delete fXSecNn_Tot; + delete fXSecNn_Elas; + delete fXSecNn_Reac; + + // pi0n/p hA x-section splines + delete fXSecPi0n_Tot; + delete fXSecPi0n_CEx; + delete fXSecPi0n_Elas; + delete fXSecPi0n_Reac; + delete fXSecPi0p_Tot; + delete fXSecPi0p_CEx; + delete fXSecPi0p_Elas; + delete fXSecPi0p_Reac; + delete fXSecPi0d_Abs; + + // K+N x-section splines + delete fXSecKpn_Elas; + delete fXSecKpp_Elas; + delete fXSecKpn_CEx; + delete fXSecKpN_Abs; + delete fXSecKpN_Tot; + + // gamma x-section splines (inelastic only) + delete fXSecGamp_fs; + delete fXSecGamn_fs; + delete fXSecGamN_Tot; + + // N+A x-section splines + delete fFracPA_Tot; + // delete fFracPA_Elas; + delete fFracPA_Inel; + delete fFracPA_CEx; + delete fFracPA_Abs; + delete fFracPA_PiPro; + delete fFracNA_Tot; + // delete fFracNA_Elas; + delete fFracNA_Inel; + delete fFracNA_CEx; + delete fFracNA_Abs; + delete fFracNA_PiPro; + + delete fFracPA_Cmp; // cmp - add support later + delete fFracNA_Cmp; + + // hN data + delete fhN2dXSecPP_Elas; + delete fhN2dXSecNP_Elas; + delete fhN2dXSecPipN_Elas; + delete fhN2dXSecPi0N_Elas; + delete fhN2dXSecPimN_Elas; + delete fhN2dXSecKpN_Elas; + delete fhN2dXSecKpP_Elas; + delete fhN2dXSecPiN_CEx; + delete fhN2dXSecPiN_Abs; + delete fhN2dXSecGamPi0P_Inelas; + delete fhN2dXSecGamPi0N_Inelas; + delete fhN2dXSecGamPipN_Inelas; + delete fhN2dXSecGamPimP_Inelas; + delete fhN2dXSecKpN_CEx; + + // delete TPipA_Tot; + delete TfracPipA_Abs; + delete TfracPipA_CEx; +// delete TfracPipA_Elas; + delete TfracPipA_Inelas; + delete TfracPipA_PiPro; + + delete TPipA_Tot; + delete TPipA_Abs; + delete TPipA_CEx; + delete TPipA_Inelas; + delete TPipA_PiPro; + + + // K+A x-section fraction splines + delete fFracKA_Tot; + delete fFracKA_Elas; + delete fFracKA_CEx; + delete fFracKA_Inel; + delete fFracKA_Abs; + +} +//____________________________________________________________________________ +INukeHadroData2025 * INukeHadroData2025::Instance() +{ + if(fInstance == 0) { + LOG("INukeData", pINFO) << "INukeHadroData2025 late initialization"; + static INukeHadroData2025::Cleaner cleaner; + cleaner.DummyMethodAndSilentCompiler(); + fInstance = new INukeHadroData2025; + } + return fInstance; +} +//____________________________________________________________________________ +void INukeHadroData2025::LoadCrossSections(void) +{ +// Loads hadronic x-section data + + //-- Get the top-level directory with input hadron cross-section data + // (search for $GINUKEHADRONDATA or use default location) + string data_dir = (gSystem->Getenv("GINUKEHADRONDATA")) ? + string(gSystem->Getenv("GINUKEHADRONDATA")) : + string(gSystem->Getenv("GENIE")) + string("/data/evgen/intranuke"); + + LOG("INukeData", pINFO) + << "Loading INTRANUKE hadron data from: " << data_dir; + + //-- Build filenames + + string datafile_NN = data_dir + "/tot_xsec/intranuke-xsections-NN2014.dat"; + string datafile_pipN = data_dir + "/tot_xsec/intranuke-xsections-pi+N.dat"; + string datafile_pi0N = data_dir + "/tot_xsec/intranuke-xsections-pi0N.dat"; + string datafile_NA = data_dir + "/tot_xsec/intranuke-fractions-NA2016.dat"; + string datafile_KA = data_dir + "/tot_xsec/intranuke-fractions-KA.dat"; + string datafile_gamN = data_dir + "/tot_xsec/intranuke-xsections-gamN.dat"; + string datafile_kN = data_dir + "/tot_xsec/intranuke-xsections-kaonN2018.dat"; + + //-- Make sure that all data files are available + + assert( ! gSystem->AccessPathName(datafile_NN. c_str()) ); + assert( ! gSystem->AccessPathName(datafile_pipN.c_str()) ); + assert( ! gSystem->AccessPathName(datafile_pi0N.c_str()) ); + assert( ! gSystem->AccessPathName(datafile_NA. c_str()) ); + assert( ! gSystem->AccessPathName(datafile_KA. c_str()) ); + assert( ! gSystem->AccessPathName(datafile_gamN.c_str()) ); + assert( ! gSystem->AccessPathName(datafile_kN. c_str()) ); + + LOG("INukeData", pINFO) << "Found all necessary data files..."; + + //-- Load data files + + TTree data_NN; + TTree data_pipN; + TTree data_pi0N; + TTree data_NA; + TTree data_KA; + TTree data_gamN; + TTree data_kN; + + data_NN.ReadFile(datafile_NN.c_str(),"ke/D:pp_tot/D:pp_elas/D:pp_reac/D:pn_tot/D:pn_elas/D:pn_reac/D:nn_tot/D:nn_elas/D:nn_reac/D:pp_cmp/D:pn_cmp/D:nn_cmp/D"); + data_pipN.ReadFile(datafile_pipN.c_str(), + "ke/D:pipn_tot/D:pipn_cex/D:pipn_elas/D:pipn_reac/D:pipp_tot/D:pipp_cex/D:pipp_elas/D:pipp_reac/D:pipd_abs"); + data_pi0N.ReadFile(datafile_pi0N.c_str(), + "ke/D:pi0n_tot/D:pi0n_cex/D:pi0n_elas/D:pi0n_reac/D:pi0p_tot/D:pi0p_cex/D:pi0p_elas/D:pi0p_reac/D:pi0d_abs"); + //data_NA.ReadFile(datafile_NA.c_str(), + //"ke/D:pA_tot/D:pA_elas/D:pA_inel/D:pA_cex/D:pA_abs/D:pA_pipro/D"); // add support for cmp here (?) + data_NA.ReadFile(datafile_NA.c_str(), + "ke/D:pA_tot/D:pA_inel/D:pA_cex/D:pA_abs/D:pA_pipro/D:pA_cmp/D"); // add support for cmp here (?) + data_gamN.ReadFile(datafile_gamN.c_str(), + "ke/D:pi0p_tot/D:pipn_tot/D:pimp_tot/D:pi0n_tot/D:gamp_fs/D:gamn_fs/D:gamN_tot/D"); + data_kN.ReadFile(datafile_kN.c_str(), + "ke/D:kpp_elas/D:kpn_elas/D:kpn_cex/D:kp_abs/D:kpN_tot/D"); + data_KA.ReadFile(datafile_KA.c_str(), + "ke/D:KA_tot/D:KA_elas/D:KA_inel/D:KA_abs/D"); + + LOG("INukeData", pDEBUG) << "Number of data rows in NN : " << data_NN.GetEntries(); + LOG("INukeData", pDEBUG) << "Number of data rows in pipN : " << data_pipN.GetEntries(); + LOG("INukeData", pDEBUG) << "Number of data rows in pi0N : " << data_pi0N.GetEntries(); + LOG("INukeData", pDEBUG) << "Number of data rows in NA : " << data_NA.GetEntries(); + LOG("INukeData", pDEBUG) << "Number of data rows in KA : " << data_KA.GetEntries(); + LOG("INukeData", pDEBUG) << "Number of data rows in gamN : " << data_gamN.GetEntries(); + LOG("INukeData", pDEBUG) << "Number of data rows in kN : " << data_kN.GetEntries(); + + LOG("INukeData", pINFO) << "Done loading all x-section files..."; + + //-- Build x-section splines + + // p/n+p/n hA x-section splines + fXSecPp_Tot = new Spline(&data_NN, "ke:pp_tot"); + fXSecPp_Elas = new Spline(&data_NN, "ke:pp_elas"); + fXSecPp_Reac = new Spline(&data_NN, "ke:pp_reac"); + fXSecPn_Tot = new Spline(&data_NN, "ke:pn_tot"); + fXSecPn_Elas = new Spline(&data_NN, "ke:pn_elas"); + fXSecPn_Reac = new Spline(&data_NN, "ke:pn_reac"); + fXSecNn_Tot = new Spline(&data_NN, "ke:nn_tot"); + fXSecNn_Elas = new Spline(&data_NN, "ke:nn_elas"); + fXSecNn_Reac = new Spline(&data_NN, "ke:nn_reac"); + fXSecPp_Cmp = new Spline(&data_NN, "ke:pp_cmp"); //for compound nucleus fate + fXSecPn_Cmp = new Spline(&data_NN, "ke:pn_cmp"); + fXSecNn_Cmp = new Spline(&data_NN, "ke:nn_cmp"); + + // pi+n/p hA x-section splines + fXSecPipn_Tot = new Spline(&data_pipN, "ke:pipn_tot"); + fXSecPipn_CEx = new Spline(&data_pipN, "ke:pipn_cex"); + fXSecPipn_Elas = new Spline(&data_pipN, "ke:pipn_elas"); + fXSecPipn_Reac = new Spline(&data_pipN, "ke:pipn_reac"); + fXSecPipp_Tot = new Spline(&data_pipN, "ke:pipp_tot"); + fXSecPipp_CEx = new Spline(&data_pipN, "ke:pipp_cex"); + fXSecPipp_Elas = new Spline(&data_pipN, "ke:pipp_elas"); + fXSecPipp_Reac = new Spline(&data_pipN, "ke:pipp_reac"); + fXSecPipd_Abs = new Spline(&data_pipN, "ke:pipd_abs"); + + // pi0n/p hA x-section splines + fXSecPi0n_Tot = new Spline(&data_pi0N, "ke:pi0n_tot"); + fXSecPi0n_CEx = new Spline(&data_pi0N, "ke:pi0n_cex"); + fXSecPi0n_Elas = new Spline(&data_pi0N, "ke:pi0n_elas"); + fXSecPi0n_Reac = new Spline(&data_pi0N, "ke:pi0n_reac"); + fXSecPi0p_Tot = new Spline(&data_pi0N, "ke:pi0p_tot"); + fXSecPi0p_CEx = new Spline(&data_pi0N, "ke:pi0p_cex"); + fXSecPi0p_Elas = new Spline(&data_pi0N, "ke:pi0p_elas"); + fXSecPi0p_Reac = new Spline(&data_pi0N, "ke:pi0p_reac"); + fXSecPi0d_Abs = new Spline(&data_pi0N, "ke:pi0d_abs"); + + // K+N x-section splines + fXSecKpn_Elas = new Spline(&data_kN, "ke:kpn_elas"); + fXSecKpp_Elas = new Spline(&data_kN, "ke:kpp_elas"); + fXSecKpn_CEx = new Spline(&data_kN, "ke:kpn_cex"); + fXSecKpN_Abs = 0; // new Spline(&data_kN, "ke:kp_abs"); why not used? + fXSecKpN_Tot = new Spline(&data_kN, "ke:kpN_tot"); + + // gamma x-section splines + fXSecGamp_fs = new Spline(&data_gamN, "ke:gamp_fs"); + fXSecGamn_fs = new Spline(&data_gamN, "ke:gamn_fs"); + fXSecGamN_Tot = new Spline(&data_gamN, "ke:gamN_tot"); + + // N+A x-section fraction splines + fFracPA_Tot = new Spline(&data_NA, "ke:pA_tot"); + // fFracPA_Elas = new Spline(&data_NA, "ke:pA_elas"); + fFracPA_Inel = new Spline(&data_NA, "ke:pA_inel"); + fFracPA_CEx = new Spline(&data_NA, "ke:pA_cex"); + fFracPA_Abs = new Spline(&data_NA, "ke:pA_abs"); + fFracPA_PiPro = new Spline(&data_NA, "ke:pA_pipro"); + fFracNA_Tot = new Spline(&data_NA, "ke:pA_tot"); // assuming nA same as pA + // fFracNA_Elas = new Spline(&data_NA, "ke:pA_elas"); + fFracNA_Inel = new Spline(&data_NA, "ke:pA_inel"); + fFracNA_CEx = new Spline(&data_NA, "ke:pA_cex"); + fFracNA_Abs = new Spline(&data_NA, "ke:pA_abs"); + fFracNA_PiPro = new Spline(&data_NA, "ke:pA_pipro"); + + fFracPA_Cmp = new Spline(&data_NA, "ke:pA_cmp"); //cmp - add support later + fFracNA_Cmp = new Spline(&data_NA, "ke:pA_cmp"); + + // K+A x-section fraction splines + fFracKA_Tot = new Spline(&data_KA, "ke:KA_tot"); + fFracKA_Elas = new Spline(&data_KA, "ke:KA_elas"); + fFracKA_CEx = 0; // new Spline(&data_KA, "ke:KA_cex"); //Added, but needs to be computed + fFracKA_Inel = new Spline(&data_KA, "ke:KA_inel"); + fFracKA_Abs = new Spline(&data_KA, "ke:KA_abs"); + // + // hN stuff + // + + + // kIHNFtElas + // pp, nn --> read from pp/pp%.txt + // pn, np --> read from pp/pn%.txt + // pi+ N --> read from pip/pip%.txt + // pi0 N --> read from pip/pip%.txt + // pi- N --> read from pim/pim%.txt + // K+ N --> read from kpn/kpn%.txt + // K+ P --> read from kpp/kpp%.txt + // kIHNFtCEx + // pi+, pi0, pi- --> read from pie/pie%.txt (using pip+n->pi0+p data) + // kIHNFtAbs + // pi+, pi0, pi- --> read from pid2p/pid2p%.txt (using pip+D->2p data) + // kIHNFtInelas + // gamma p -> p pi0 --> read from gampi0p/%-pi0p.txt + // gamma p -> n pi+ --> read from gampi+n/%-pi+n.txt + // gamma n -> n pi0 --> read from gampi0n/%-pi0n.txt + // gamma n -> p pi- --> read from gampi-p/%-pi-p.txt + + + // kIHNFtElas, pp&nn : + { + const int hN_ppelas_nfiles = 20; + const int hN_ppelas_points_per_file = 21; + const int hN_ppelas_npoints = hN_ppelas_points_per_file * hN_ppelas_nfiles; + + double hN_ppelas_energies[hN_ppelas_nfiles] = { + 50, 100, 150, 200, 250, 300, 350, 400, 450, 500, + 550, 600, 650, 700, 750, 800, 850, 900, 950, 1000 + }; + + double hN_ppelas_costh [hN_ppelas_points_per_file]; + double hN_ppelas_xsec [hN_ppelas_npoints]; + + int ipoint=0; + + for(int ifile = 0; ifile < hN_ppelas_nfiles; ifile++) { + // build filename + ostringstream hN_datafile; + double ke = hN_ppelas_energies[ifile]; + hN_datafile << data_dir << "/diff_ang/pp/pp" << ke << ".txt"; + // read data + ReadhNFile( + hN_datafile.str(), ke, hN_ppelas_points_per_file, + ipoint, hN_ppelas_costh, hN_ppelas_xsec,2); + }//loop over files + + fhN2dXSecPP_Elas = new BLI2DNonUnifGrid(hN_ppelas_nfiles,hN_ppelas_points_per_file, + hN_ppelas_energies,hN_ppelas_costh,hN_ppelas_xsec); + } + + // kIHNFtElas, pn&np : + { + const int hN_npelas_nfiles = 20; + const int hN_npelas_points_per_file = 21; + const int hN_npelas_npoints = hN_npelas_points_per_file * hN_npelas_nfiles; + + double hN_npelas_energies[hN_npelas_nfiles] = { + 50, 100, 150, 200, 250, 300, 350, 400, 450, 500, + 550, 600, 650, 700, 750, 800, 850, 900, 950, 1000 + }; + + double hN_npelas_costh [hN_npelas_points_per_file]; + double hN_npelas_xsec [hN_npelas_npoints]; + + int ipoint=0; + + for(int ifile = 0; ifile < hN_npelas_nfiles; ifile++) { + // build filename + ostringstream hN_datafile; + double ke = hN_npelas_energies[ifile]; + hN_datafile << data_dir << "/diff_ang/pn/pn" << ke << ".txt"; + // read data + ReadhNFile( + hN_datafile.str(), ke, hN_npelas_points_per_file, + ipoint, hN_npelas_costh, hN_npelas_xsec,2); + }//loop over files + + fhN2dXSecNP_Elas = new BLI2DNonUnifGrid(hN_npelas_nfiles,hN_npelas_points_per_file, + hN_npelas_energies,hN_npelas_costh,hN_npelas_xsec); + } + + // kIHNFtElas, pipN : + { + const int hN_pipNelas_nfiles = 60; + const int hN_pipNelas_points_per_file = 21; + const int hN_pipNelas_npoints = hN_pipNelas_points_per_file * hN_pipNelas_nfiles; + + double hN_pipNelas_energies[hN_pipNelas_nfiles] = { + 10, 20, 30, 40, 50, 60, 70, 80, 90, + 100, 110, 120, 130, 140, 150, 160, 170, 180, 190, + 200, 210, 220, 230, 240, 250, 260, 270, 280, 290, + 300, 340, 380, 420, 460, 500, 540, 580, 620, 660, + 700, 740, 780, 820, 860, 900, 940, 980, + 1020, 1060, 1100, 1140, 1180, 1220, 1260, + 1300, 1340, 1380, 1420, 1460, 1500 + }; + + double hN_pipNelas_costh [hN_pipNelas_points_per_file]; + double hN_pipNelas_xsec [hN_pipNelas_npoints]; + + int ipoint=0; + + for(int ifile = 0; ifile < hN_pipNelas_nfiles; ifile++) { + // build filename + ostringstream hN_datafile; + double ke = hN_pipNelas_energies[ifile]; + hN_datafile << data_dir << "/diff_ang/pip/pip" << ke << ".txt"; + // read data + ReadhNFile( + hN_datafile.str(), ke, hN_pipNelas_points_per_file, + ipoint, hN_pipNelas_costh, hN_pipNelas_xsec,2); + }//loop over files + + fhN2dXSecPipN_Elas = new BLI2DNonUnifGrid(hN_pipNelas_nfiles,hN_pipNelas_points_per_file, + hN_pipNelas_energies,hN_pipNelas_costh,hN_pipNelas_xsec); + } + + // kIHNFtElas, pi0N : + { + const int hN_pi0Nelas_nfiles = 60; + const int hN_pi0Nelas_points_per_file = 21; + const int hN_pi0Nelas_npoints = hN_pi0Nelas_points_per_file * hN_pi0Nelas_nfiles; + + double hN_pi0Nelas_energies[hN_pi0Nelas_nfiles] = { + 10, 20, 30, 40, 50, 60, 70, 80, 90, + 100, 110, 120, 130, 140, 150, 160, 170, 180, 190, + 200, 210, 220, 230, 240, 250, 260, 270, 280, 290, + 300, 340, 380, 420, 460, 500, 540, 580, 620, 660, + 700, 740, 780, 820, 860, 900, 940, 980, + 1020, 1060, 1100, 1140, 1180, 1220, 1260, + 1300, 1340, 1380, 1420, 1460, 1500 + }; + + double hN_pi0Nelas_costh [hN_pi0Nelas_points_per_file]; + double hN_pi0Nelas_xsec [hN_pi0Nelas_npoints]; + + int ipoint=0; + + for(int ifile = 0; ifile < hN_pi0Nelas_nfiles; ifile++) { + // build filename + ostringstream hN_datafile; + double ke = hN_pi0Nelas_energies[ifile]; + hN_datafile << data_dir << "/diff_ang/pip/pip" << ke << ".txt"; + // read data + ReadhNFile( + hN_datafile.str(), ke, hN_pi0Nelas_points_per_file, + ipoint, hN_pi0Nelas_costh, hN_pi0Nelas_xsec,2); + }//loop over files + + fhN2dXSecPi0N_Elas = new BLI2DNonUnifGrid(hN_pi0Nelas_nfiles,hN_pi0Nelas_points_per_file, + hN_pi0Nelas_energies,hN_pi0Nelas_costh,hN_pi0Nelas_xsec); + } + + // kIHNFtElas, pimN : + { + const int hN_pimNelas_nfiles = 60; + const int hN_pimNelas_points_per_file = 21; + const int hN_pimNelas_npoints = hN_pimNelas_points_per_file * hN_pimNelas_nfiles; + + double hN_pimNelas_energies[hN_pimNelas_nfiles] = { + 10, 20, 30, 40, 50, 60, 70, 80, 90, + 100, 110, 120, 130, 140, 150, 160, 170, 180, 190, + 200, 210, 220, 230, 240, 250, 260, 270, 280, 290, + 300, 340, 380, 420, 460, 500, 540, 580, 620, 660, + 700, 740, 780, 820, 860, 900, 940, 980, + 1020, 1060, 1100, 1140, 1180, 1220, 1260, + 1300, 1340, 1380, 1420, 1460, 1500 + }; + + double hN_pimNelas_costh [hN_pimNelas_points_per_file]; + double hN_pimNelas_xsec [hN_pimNelas_npoints]; + + int ipoint=0; + + for(int ifile = 0; ifile < hN_pimNelas_nfiles; ifile++) { + // build filename + ostringstream hN_datafile; + double ke = hN_pimNelas_energies[ifile]; + hN_datafile << data_dir << "/diff_ang/pim/pim" << ke << ".txt"; + // read data + ReadhNFile( + hN_datafile.str(), ke, hN_pimNelas_points_per_file, + ipoint, hN_pimNelas_costh, hN_pimNelas_xsec,2); + }//loop over files + + fhN2dXSecPimN_Elas = new BLI2DNonUnifGrid(hN_pimNelas_nfiles,hN_pimNelas_points_per_file, + hN_pimNelas_energies,hN_pimNelas_costh,hN_pimNelas_xsec); + } + + // kIHNFtElas, kpn : + { + const int hN_kpNelas_nfiles = 18; + const int hN_kpNelas_points_per_file = 37; + const int hN_kpNelas_npoints = hN_kpNelas_points_per_file * hN_kpNelas_nfiles; + + double hN_kpNelas_energies[hN_kpNelas_nfiles] = { + 100, 200, 300, 400, 500, 600, 700, 800, 900, 1000, + 1100, 1200, 1300, 1400, 1500, 1600, 1700, 1800 + }; + + double hN_kpNelas_costh [hN_kpNelas_points_per_file]; + double hN_kpNelas_xsec [hN_kpNelas_npoints]; + + int ipoint=0; + + for(int ifile = 0; ifile < hN_kpNelas_nfiles; ifile++) { + // build filename + ostringstream hN_datafile; + double ke = hN_kpNelas_energies[ifile]; + hN_datafile << data_dir << "/diff_ang/kpn/kpn" << ke << ".txt"; + // read data + ReadhNFile( + hN_datafile.str(), ke, hN_kpNelas_points_per_file, + ipoint, hN_kpNelas_costh, hN_kpNelas_xsec,2); + }//loop over files + + fhN2dXSecKpN_Elas = new BLI2DNonUnifGrid(hN_kpNelas_nfiles,hN_kpNelas_points_per_file, + hN_kpNelas_energies,hN_kpNelas_costh,hN_kpNelas_xsec); + } + // kIHNFtCEx, kpn : + { + const int hN_kpNcex_nfiles = 18; + const int hN_kpNcex_points_per_file = 37; + const int hN_kpNcex_npoints = hN_kpNcex_points_per_file * hN_kpNcex_nfiles; + + double hN_kpNcex_energies[hN_kpNcex_nfiles] = { + 100, 200, 300, 400, 500, 600, 700, 800, 900, 1000, + 1100, 1200, 1300, 1400, 1500, 1600, 1700, 1800 + }; + + double hN_kpNcex_costh [hN_kpNcex_points_per_file]; + double hN_kpNcex_xsec [hN_kpNcex_npoints]; + + int ipoint=0; + + for(int ifile = 0; ifile < hN_kpNcex_nfiles; ifile++) { + // build filename + ostringstream hN_datafile; + double ke = hN_kpNcex_energies[ifile]; + hN_datafile << data_dir << "/diff_ang/kpncex/kpcex" << ke << ".txt"; + // read data + ReadhNFile( + hN_datafile.str(), ke, hN_kpNcex_points_per_file, + ipoint, hN_kpNcex_costh, hN_kpNcex_xsec,2); + }//loop over files + + /*double hN_kpNcex_costh_cond [hN_kpNcex_points_per_file]; + for (int ient = 0; ient < hN_kpNcex_points_per_file; ient++) { + hN_kpNcex_costh_cond[ient] = hN_kpNcex_costh[ient]; + }*/ + + fhN2dXSecKpN_CEx = new BLI2DNonUnifGrid(hN_kpNcex_nfiles,hN_kpNcex_points_per_file, + hN_kpNcex_energies,hN_kpNcex_costh,hN_kpNcex_xsec); + } +//---------------------------------------------------------------------------------------- + + + // kIHNFtElas, kpp : + { + const int hN_kpPelas_nfiles = 18; + const int hN_kpPelas_points_per_file = 37; + const int hN_kpPelas_npoints = hN_kpPelas_points_per_file * hN_kpPelas_nfiles; + + double hN_kpPelas_energies[hN_kpPelas_nfiles] = { + 100, 200, 300, 400, 500, 600, 700, 800, 900, 1000, + 1100, 1200, 1300, 1400, 1500, 1600, 1700, 1800 + }; + + double hN_kpPelas_costh [hN_kpPelas_points_per_file]; + double hN_kpPelas_xsec [hN_kpPelas_npoints]; + + int ipoint=0; + + for(int ifile = 0; ifile < hN_kpPelas_nfiles; ifile++) { + // build filename + ostringstream hN_datafile; + double ke = hN_kpPelas_energies[ifile]; + hN_datafile << data_dir << "/diff_ang/kpp/kpp" << ke << ".txt"; + // read data + ReadhNFile( + hN_datafile.str(), ke, hN_kpPelas_points_per_file, + ipoint, hN_kpPelas_costh, hN_kpPelas_xsec,2); + }//loop over files + + fhN2dXSecKpP_Elas = new BLI2DNonUnifGrid(hN_kpPelas_nfiles,hN_kpPelas_points_per_file, + hN_kpPelas_energies,hN_kpPelas_costh,hN_kpPelas_xsec); + } + + // kIHNFtCEx, (pi+, pi0, pi-) N + { + const int hN_piNcex_nfiles = 60; + const int hN_piNcex_points_per_file = 21; + const int hN_piNcex_npoints = hN_piNcex_points_per_file * hN_piNcex_nfiles; + + double hN_piNcex_energies[hN_piNcex_nfiles] = { + 10, 20, 30, 40, 50, 60, 70, 80, 90, + 100, 110, 120, 130, 140, 150, 160, 170, 180, 190, + 200, 210, 220, 230, 240, 250, 260, 270, 280, 290, + 300, 340, 380, 420, 460, 500, 540, 580, 620, 660, + 700, 740, 780, 820, 860, 900, 940, 980, + 1020, 1060, 1100, 1140, 1180, 1220, 1260, + 1300, 1340, 1380, 1420, 1460, 1500 + }; + + double hN_piNcex_costh [hN_piNcex_points_per_file]; + double hN_piNcex_xsec [hN_piNcex_npoints]; + + int ipoint=0; + + for(int ifile = 0; ifile < hN_piNcex_nfiles; ifile++) { + // build filename + ostringstream hN_datafile; + double ke = hN_piNcex_energies[ifile]; + hN_datafile << data_dir << "/diff_ang/pie/pie" << ke << ".txt"; + // read data + ReadhNFile( + hN_datafile.str(), ke, hN_piNcex_points_per_file, + ipoint, hN_piNcex_costh, hN_piNcex_xsec,2); + }//loop over files + + fhN2dXSecPiN_CEx = new BLI2DNonUnifGrid(hN_piNcex_nfiles,hN_piNcex_points_per_file, + hN_piNcex_energies,hN_piNcex_costh,hN_piNcex_xsec); + } + + // kIHNFtAbs, (pi+, pi0, pi-) N + { + const int hN_piNabs_nfiles = 19; + const int hN_piNabs_points_per_file = 21; + const int hN_piNabs_npoints = hN_piNabs_points_per_file * hN_piNabs_nfiles; + + double hN_piNabs_energies[hN_piNabs_nfiles] = { + 50, 75, 100, 125, 150, 175, 200, 225, 250, 275, + 300, 325, 350, 375, 400, 425, 450, 475, 500 + }; + + double hN_piNabs_costh [hN_piNabs_points_per_file]; + double hN_piNabs_xsec [hN_piNabs_npoints]; + + int ipoint=0; + + for(int ifile = 0; ifile < hN_piNabs_nfiles; ifile++) { + // build filename + ostringstream hN_datafile; + double ke = hN_piNabs_energies[ifile]; + hN_datafile << data_dir << "/diff_ang/pid2p/pid2p" << ke << ".txt"; + // read data + ReadhNFile( + hN_datafile.str(), ke, hN_piNabs_points_per_file, + ipoint, hN_piNabs_costh, hN_piNabs_xsec,2); + }//loop over files + + fhN2dXSecPiN_Abs = new BLI2DNonUnifGrid(hN_piNabs_nfiles,hN_piNabs_points_per_file, + hN_piNabs_energies,hN_piNabs_costh,hN_piNabs_xsec); + } + + // kIHNFtInelas, gamma p -> p pi0 + { + const int hN_gampi0pInelas_nfiles = 29; + const int hN_gampi0pInelas_points_per_file = 37; + const int hN_gampi0pInelas_npoints = hN_gampi0pInelas_points_per_file * hN_gampi0pInelas_nfiles; + + double hN_gampi0pInelas_energies[hN_gampi0pInelas_nfiles] = { + 160, 180, 200, 220, 240, 260, 280, 300, 320, 340, + 360, 380, 400, 450, 500, 550, 600, 650, 700, 750, + 800, 850, 900, 950, 1000, 1050, 1100, 1150, 1200 + }; + + double hN_gampi0pInelas_costh [hN_gampi0pInelas_points_per_file]; + double hN_gampi0pInelas_xsec [hN_gampi0pInelas_npoints]; + + int ipoint=0; + + for(int ifile = 0; ifile < hN_gampi0pInelas_nfiles; ifile++) { + // build filename + ostringstream hN_datafile; + double ke = hN_gampi0pInelas_energies[ifile]; + hN_datafile << data_dir << "/diff_ang/gampi0p/" << ke << "-pi0p.txt"; + // read data + ReadhNFile( + hN_datafile.str(), ke, hN_gampi0pInelas_points_per_file, + ipoint, hN_gampi0pInelas_costh, hN_gampi0pInelas_xsec,3); + }//loop over files + + fhN2dXSecGamPi0P_Inelas = new BLI2DNonUnifGrid(hN_gampi0pInelas_nfiles,hN_gampi0pInelas_points_per_file, + hN_gampi0pInelas_energies,hN_gampi0pInelas_costh,hN_gampi0pInelas_xsec); + } + + // kIHNFtInelas, gamma n -> n pi0 + { + const int hN_gampi0nInelas_nfiles = 29; + const int hN_gampi0nInelas_points_per_file = 37; + const int hN_gampi0nInelas_npoints = hN_gampi0nInelas_points_per_file * hN_gampi0nInelas_nfiles; + + double hN_gampi0nInelas_energies[hN_gampi0nInelas_nfiles] = { + 160, 180, 200, 220, 240, 260, 280, 300, 320, 340, + 360, 380, 400, 450, 500, 550, 600, 650, 700, 750, + 800, 850, 900, 950, 1000, 1050, 1100, 1150, 1200 + }; + + double hN_gampi0nInelas_costh [hN_gampi0nInelas_points_per_file]; + double hN_gampi0nInelas_xsec [hN_gampi0nInelas_npoints]; + int ipoint=0; + + for(int ifile = 0; ifile < hN_gampi0nInelas_nfiles; ifile++) { + // build filename + ostringstream hN_datafile; + double ke = hN_gampi0nInelas_energies[ifile]; + hN_datafile << data_dir << "/diff_ang/gampi0n/" << ke << "-pi0n.txt"; + // read data + ReadhNFile( + hN_datafile.str(), ke, hN_gampi0nInelas_points_per_file, + ipoint, hN_gampi0nInelas_costh, hN_gampi0nInelas_xsec,3); + }//loop over files + + fhN2dXSecGamPi0N_Inelas = new BLI2DNonUnifGrid(hN_gampi0nInelas_nfiles,hN_gampi0nInelas_points_per_file, + hN_gampi0nInelas_energies,hN_gampi0nInelas_costh,hN_gampi0nInelas_xsec); + } + + // kIHNFtInelas, gamma p -> n pi+ + { + const int hN_gampipnInelas_nfiles = 29; + const int hN_gampipnInelas_points_per_file = 37; + const int hN_gampipnInelas_npoints = hN_gampipnInelas_points_per_file * hN_gampipnInelas_nfiles; + + double hN_gampipnInelas_energies[hN_gampipnInelas_nfiles] = { + 160, 180, 200, 220, 240, 260, 280, 300, 320, 340, + 360, 380, 400, 450, 500, 550, 600, 650, 700, 750, + 800, 850, 900, 950, 1000, 1050, 1100, 1150, 1200 + }; + + double hN_gampipnInelas_costh [hN_gampipnInelas_points_per_file]; + double hN_gampipnInelas_xsec [hN_gampipnInelas_npoints]; + + int ipoint=0; + + for(int ifile = 0; ifile < hN_gampipnInelas_nfiles; ifile++) { + // build filename + ostringstream hN_datafile; + double ke = hN_gampipnInelas_energies[ifile]; + hN_datafile << data_dir << "/diff_ang/gampi+n/" << ke << "-pi+n.txt"; + // read data + ReadhNFile( + hN_datafile.str(), ke, hN_gampipnInelas_points_per_file, + ipoint, hN_gampipnInelas_costh, hN_gampipnInelas_xsec,3); + }//loop over files + + fhN2dXSecGamPipN_Inelas = new BLI2DNonUnifGrid(hN_gampipnInelas_nfiles,hN_gampipnInelas_points_per_file, + hN_gampipnInelas_energies,hN_gampipnInelas_costh,hN_gampipnInelas_xsec); + } + + // kIHNFtInelas, gamma n -> p pi- + { + const int hN_gampimpInelas_nfiles = 29; + const int hN_gampimpInelas_points_per_file = 37; + const int hN_gampimpInelas_npoints = hN_gampimpInelas_points_per_file * hN_gampimpInelas_nfiles; + + double hN_gampimpInelas_energies[hN_gampimpInelas_nfiles] = { + 160, 180, 200, 220, 240, 260, 280, 300, 320, 340, + 360, 380, 400, 450, 500, 550, 600, 650, 700, 750, + 800, 850, 900, 950, 1000, 1050, 1100, 1150, 1200 + }; + + double hN_gampimpInelas_costh [hN_gampimpInelas_points_per_file]; + double hN_gampimpInelas_xsec [hN_gampimpInelas_npoints]; + + int ipoint=0; + + for(int ifile = 0; ifile < hN_gampimpInelas_nfiles; ifile++) { + // build filename + ostringstream hN_datafile; + double ke = hN_gampimpInelas_energies[ifile]; + hN_datafile << data_dir << "/diff_ang/gampi-p/" << ke << "-pi-p.txt"; + // read data + ReadhNFile( + hN_datafile.str(), ke, hN_gampimpInelas_points_per_file, + ipoint, hN_gampimpInelas_costh, hN_gampimpInelas_xsec,3); + }//loop over files + + fhN2dXSecGamPimP_Inelas = new BLI2DNonUnifGrid(hN_gampimpInelas_nfiles,hN_gampimpInelas_points_per_file, + hN_gampimpInelas_energies,hN_gampimpInelas_costh,hN_gampimpInelas_xsec); + } + + + + + TFile TGraphs_file; + bool saveTGraphsToFile = false; //true; + + if (saveTGraphsToFile) { + string filename = "TGraphs.root"; + LOG("INukeHadroData2025", pNOTICE) << "Saving INTRANUKE hadron x-section data to ROOT file: " << filename; + TGraphs_file.Open(filename.c_str(), "RECREATE"); + } + + + // kIHNFtTot, pip + A PipA_Tot + { + const int pipATot_nfiles = 7; + const int pipATot_nuclei[pipATot_nfiles] = {12,27 ,3,56, 93,209,7}; + const int pipATot_npoints = 294; + + TPipA_Tot = new TGraph2D(pipATot_npoints); + TPipA_Tot->SetNameTitle("TPipA_Tot","TPipA_Tot"); + TPipA_Tot->SetDirectory(0); + + int ipoint=0; + double x, y; + + for(int ifile=0; ifile < pipATot_nfiles; ifile++) { + ostringstream ADep_datafile; + int nucleus = pipATot_nuclei[ifile]; + ADep_datafile << data_dir << "/tot_xsec/pipA_tot/pip" << nucleus << "_tot.txt"; + TGraph * buff = new TGraph(ADep_datafile.str().c_str()); + buff->SetNameTitle("buff","buff"); + for(int i=0; i < buff->GetN(); i++) { + buff -> GetPoint(i,x,y); + if (y > 0) { + TPipA_Tot->SetPoint(ipoint, (double)nucleus, x, log(y)); + ipoint++; + } + + } + delete buff; + } + + if (saveTGraphsToFile) { + TPipA_Tot -> Write("TPipA_Tot"); // TPipA_Tot will be _key_ name + } + } + + + // kIHNFtAbs, pip + A PipA_Abs_frac + { + const int pipAAbs_f_nfiles = 18; + const int pipAAbs_f_nuclei[pipAAbs_f_nfiles] = {1, 2, 3, 4, 7, 9, 12, 16, 27, 48, 56, 58, 63, 93, 120, 165, 181, 209}; + const int pipAAbs_f_npoints = 111; + + TfracPipA_Abs = new TGraph2D(pipAAbs_f_npoints); + TfracPipA_Abs->SetNameTitle("TfracPipA_Abs","TfracPipA_Abs"); + TfracPipA_Abs->SetDirectory(0); + + int ipoint=0; + double x, y; + for(int ifile=0; ifile < pipAAbs_f_nfiles; ifile++) { + ostringstream ADep_datafile; + int nucleus = pipAAbs_f_nuclei[ifile]; + ADep_datafile << data_dir << "/tot_xsec/pipA_abs_frac/pip" << nucleus << "_abs_frac.txt"; + TGraph * buff = new TGraph(ADep_datafile.str().c_str()); + buff->SetNameTitle("buff","buff"); + for(int i=0; i < buff->GetN(); i++) { + buff -> GetPoint(i,x,y); + TfracPipA_Abs -> SetPoint(ipoint,(double)nucleus,x,y); + ipoint++; + } + delete buff; + } + if (saveTGraphsToFile) { + TfracPipA_Abs -> Write("TfracPipA_Abs"); + } + + } + + + // kIHNFtCEx, pip + A PipA_CEx_frac + { + const int pipACEx_f_nfiles = 18; + const int pipACEx_f_nuclei[pipACEx_f_nfiles] = {1, 2, 3, 4, 7, 9, 12, 16, 27, 48, 56, 58, 63, 93, 120, 165, 181, 209}; + const int pipACEx_f_npoints = 129; + + TfracPipA_CEx = new TGraph2D(pipACEx_f_npoints); + TfracPipA_CEx->SetNameTitle("TfracPipA_CEx","TfracPipA_CEx"); + TfracPipA_CEx->SetDirectory(0); + + int ipoint=0; + double x, y; + + for(int ifile=0; ifile < pipACEx_f_nfiles; ifile++) { + ostringstream ADep_datafile; + int nucleus = pipACEx_f_nuclei[ifile]; + ADep_datafile << data_dir << "/tot_xsec/pipA_cex_frac/pip" << nucleus << "_cex_frac.txt"; + TGraph * buff = new TGraph(ADep_datafile.str().c_str()); + buff->SetNameTitle("buff","buff"); + for(int i=0; i < buff->GetN(); i++) { + buff -> GetPoint(i,x,y); + TfracPipA_CEx -> SetPoint(ipoint,(double)nucleus,x,y); + ipoint++; + } + delete buff; + } + + if (saveTGraphsToFile) { + TfracPipA_CEx -> Write("TfracPipA_CEx"); + } + + } + + + + // kIHNFtCEx, pip + A PipA_CEx (just for developmental purposes) + { + + + const int pipACEx_nfiles = 7; + const int pipACEx_nuclei[pipACEx_nfiles] = {3, 27 , 12 , 56 , 93 , 209 , 7}; + const int pipACEx_npoints = 294; + + TPipA_CEx = new TGraph2D(pipACEx_npoints); + TPipA_CEx->SetNameTitle("TPipA_CEx","TPipA_CEx"); + TPipA_CEx->SetDirectory(0); + + int ipoint=0; + double x, y; + + for(int ifile=0; ifile < pipACEx_nfiles; ifile++) { + ostringstream ADep_datafile; + int nucleus = pipACEx_nuclei[ifile]; + ADep_datafile << data_dir << "/tot_xsec/pipA_cex/pip" << nucleus << "_cex.txt"; + TGraph * buff = new TGraph(ADep_datafile.str().c_str()); + buff->SetNameTitle("buff","buff"); + for(int i=0; i < buff->GetN(); i++) { + buff -> GetPoint(i,x,y); + if(y>0){ + TPipA_CEx -> SetPoint(ipoint,(double)nucleus,x,log(y)); + ipoint++; + } + } + delete buff; + } + + if (saveTGraphsToFile) { + TPipA_CEx -> Write("TPipA_CEx"); + } + + + } + + // kIHNFtAbs, pip + A PipA_Abs (just for developmental purposes) + { + + const int pipAAbs_nfiles = 7; + const int pipAAbs_nuclei[pipAAbs_nfiles] = {3, 27 , 12 , 56 , 93 , 209 , 7}; + const int pipAAbs_npoints = 294; + + TPipA_Abs = new TGraph2D(pipAAbs_npoints); + TPipA_Abs->SetNameTitle("TPipA_Abs","TPipA_Abs"); + TPipA_Abs->SetDirectory(0); + + int ipoint=0; + double x, y; + + for(int ifile=0; ifile < pipAAbs_nfiles; ifile++) { + ostringstream ADep_datafile; + int nucleus = pipAAbs_nuclei[ifile]; + ADep_datafile << data_dir << "/tot_xsec/pipA_abs/pip" << nucleus << "_abs.txt"; + TGraph * buff = new TGraph(ADep_datafile.str().c_str()); + buff->SetNameTitle("buff","buff"); + for(int i=0; i < buff->GetN(); i++) { + buff -> GetPoint(i,x,y); + if(y>0){ + TPipA_Abs -> SetPoint(ipoint,(double)nucleus,x,log(y)); + ipoint++; + } + } + delete buff; + } + + if (saveTGraphsToFile) { + TPipA_Abs -> Write("TPipA_Abs"); + } + + } + + // kIHNFtElas, pip + A PipA_Elas (just for developmental purposes) + { + TGraph2D * TPipA_Elas; + + const int pipAElas_nfiles = 18; + const int pipAElas_nuclei[pipAElas_nfiles] = {1, 2, 3, 4, 7, 9, 12, 16, 27, 48, 56, 58, 63, 93, 120, 165, 181, 209}; + const int pipAElas_npoints = 125; + + TPipA_Elas = new TGraph2D(pipAElas_npoints); + TPipA_Elas->SetNameTitle("TPipA_Elas","TPipA_Elas"); + TPipA_Elas->SetDirectory(0); + + int ipoint=0; + double x, y; + + for(int ifile=0; ifile < pipAElas_nfiles; ifile++) { + ostringstream ADep_datafile; + int nucleus = pipAElas_nuclei[ifile]; + ADep_datafile << data_dir << "/tot_xsec/pipA_elas/pip" << nucleus << "_elas.txt"; + TGraph * buff = new TGraph(ADep_datafile.str().c_str()); + buff->SetNameTitle("buff","buff"); + for(int i=0; i < buff->GetN(); i++) { + buff -> GetPoint(i,x,y); + TPipA_Elas -> SetPoint(ipoint,(double)nucleus,x,y); + ipoint++; + } + delete buff; + } + + if (saveTGraphsToFile) { + TPipA_Elas -> Write("TPipA_Elas"); + } + delete TPipA_Elas; + } + + // kIHNFtInelas, pip + A PipA_Inelas (just for developmental purposes) + { + + const int pipAInelas_nfiles = 7; + const int pipAInelas_nuclei[pipAInelas_nfiles] = {3, 27 , 12 , 56 , 93 , 209 , 7}; + const int pipAInelas_npoints = 294; + + TPipA_Inelas = new TGraph2D(pipAInelas_npoints); + TPipA_Inelas->SetNameTitle("TPipA_Inelas","TPipA_Inelas"); + TPipA_Inelas->SetDirectory(0); + + int ipoint=0; + double x, y; + + for(int ifile=0; ifile < pipAInelas_nfiles; ifile++) { + ostringstream ADep_datafile; + int nucleus = pipAInelas_nuclei[ifile]; + ADep_datafile << data_dir << "/tot_xsec/pipA_inelas/pip" << nucleus << "_inelas.txt"; + TGraph * buff = new TGraph(ADep_datafile.str().c_str()); + buff->SetNameTitle("buff","buff"); + for(int i=0; i < buff->GetN(); i++) { + buff -> GetPoint(i,x,y); + if(y>0){ + TPipA_Inelas -> SetPoint(ipoint,(double)nucleus,x,log(y)); + ipoint++; + } + } + delete buff; + } + + if (saveTGraphsToFile) { + TPipA_Inelas -> Write("TPipA_Inelas"); + } + } + + // kIHNFtPiPro, pip + A PipA_pipro (just for developmental purposes) + { + + const int pipApipro_nfiles = 6; + const int pipApipro_nuclei[pipApipro_nfiles] = { 27 , 12 , 56 , 93 , 209 , 7}; + const int pipAInelas_npoints = 252; + + TPipA_PiPro = new TGraph2D(pipAInelas_npoints); + TPipA_PiPro->SetNameTitle("TPipA_PiPro","TPipA_PiPro"); + TPipA_PiPro->SetDirectory(0); + + int ipoint=0; + double x, y; + + for(int ifile=0; ifile < pipApipro_nfiles; ifile++) { + ostringstream ADep_datafile; + int nucleus = pipApipro_nuclei[ifile]; + ADep_datafile << data_dir << "/tot_xsec/pipA_pipro/pip" << nucleus << "_pipro.txt"; + TGraph * buff = new TGraph(ADep_datafile.str().c_str()); + buff->SetNameTitle("buff","buff"); + for(int i=0; i < buff->GetN(); i++) { + buff -> GetPoint(i,x,y); + if(y>0){ + TPipA_PiPro -> SetPoint(ipoint,(double)nucleus,x,log(y)); + ipoint++; + } + } + delete buff; + } + + if (saveTGraphsToFile) { + TPipA_PiPro -> Write("TPipA_PiPro"); + } + } + + + /* + // kIHNFtElas, pip + A PipA_Elas_frac + { + const int pipAElas_f_nfiles = 18; + const int pipAElas_f_nuclei[pipAElas_f_nfiles] = {1, 2, 3, 4, 7, 9, 12, 16, 27, 48, 56, 58, 63, 93, 120, 165, 181, 209}; + const int pipAElas_f_npoints = 125; + + TfracPipA_Elas = new TGraph2D(pipAElas_f_npoints); + TfracPipA_Elas->SetNameTitle("TfracPipA_Elas","TfracPipA_Elas"); + TfracPipA_Elas->SetDirectory(0); + + int ipoint=0; + double x, y; + + for(int ifile=0; ifile < pipAElas_f_nfiles; ifile++) { + ostringstream ADep_datafile; + int nucleus = pipAElas_f_nuclei[ifile]; + ADep_datafile << data_dir << "/tot_xsec/pipA_elas_frac/pip" << nucleus << "_elas_frac.txt"; + TGraph * buff = new TGraph(ADep_datafile.str().c_str()); + buff->SetNameTitle("buff","buff"); + for(int i=0; i < buff->GetN(); i++) { + buff -> GetPoint(i,x,y); + TfracPipA_Elas -> SetPoint(ipoint,(double)nucleus,x,y); + ipoint++; + } + delete buff; + } + + if (saveTGraphsToFile) { + TfracPipA_Elas -> Write("TfracPipA_Elas"); + } + + } + */ + + // kIHNFtInelas, pip + A PipA_Inelas_frac + { + const int pipAInelas_f_nfiles = 20; + const int pipAInelas_f_nuclei[pipAInelas_f_nfiles] = {1, 2, 3, 4, 7, 9, 12, 16, 27, 40, 48, 56, 58, 63, 93, 120, 165, 181, 208, 209}; + const int pipAInelas_f_npoints = 118; + + TfracPipA_Inelas = new TGraph2D(pipAInelas_f_npoints); + TfracPipA_Inelas->SetNameTitle("TfracPipA_Inelas","TfracPipA_Inelas"); + TfracPipA_Inelas->SetDirectory(0); + + int ipoint=0; + double x, y; + + for(int ifile=0; ifile < pipAInelas_f_nfiles; ifile++) { + ostringstream ADep_datafile; + int nucleus = pipAInelas_f_nuclei[ifile]; + ADep_datafile << data_dir << "/tot_xsec/pipA_inelas_frac/pip" << nucleus << "_inelas_frac.txt"; + TGraph * buff = new TGraph(ADep_datafile.str().c_str()); + buff->SetNameTitle("buff","buff"); + for(int i=0; i < buff->GetN(); i++) { + buff -> GetPoint(i,x,y); + TfracPipA_Inelas -> SetPoint(ipoint,(double)nucleus,x,y); + ipoint++; + } + delete buff; + } + + if (saveTGraphsToFile) { + TfracPipA_Inelas -> Write("TfracPipA_Inelas"); + } + + } + + + // kIHNFtPiPro, pip + A PipA_PiPro_frac + { + const int pipAPiPro_f_nfiles = 17; + const int pipAPiPro_f_nuclei[pipAPiPro_f_nfiles] = {1, 2, 3, 4, 7, 9, 12, 16, 48, 56, 58, 63, 93, 120, 165, 181, 209}; + const int pipAPiPro_f_npoints = 76; + + TfracPipA_PiPro = new TGraph2D(pipAPiPro_f_npoints); + TfracPipA_PiPro->SetNameTitle("TfracPipA_PiPro","TfracPipA_PiPro"); + TfracPipA_PiPro->SetDirectory(0); + + int ipoint=0; + double x, y; + + for(int ifile=0; ifile < pipAPiPro_f_nfiles; ifile++) { + ostringstream ADep_datafile; + int nucleus = pipAPiPro_f_nuclei[ifile]; + ADep_datafile << data_dir << "/tot_xsec/pipA_pipro_frac/pip" << nucleus << "_pipro_frac.txt"; + TGraph * buff = new TGraph(ADep_datafile.str().c_str()); + buff->SetNameTitle("buff","buff"); + for(int i=0; i < buff->GetN(); i++) { + buff -> GetPoint(i,x,y); + TfracPipA_PiPro -> SetPoint(ipoint,(double)nucleus,x,y); + ipoint++; + } + delete buff; + } + + if (saveTGraphsToFile) { + TfracPipA_PiPro -> Write("TfracPipA_PiPro"); + } + } + + TGraphs_file.Close(); + + LOG("INukeData", pINFO) << "Done building x-section splines..."; + +} +//____________________________________________________________________________ +void INukeHadroData2025::ReadhNFile( + string filename, double ke, int npoints, int & curr_point, + double * costh_array, double * xsec_array, int cols) +{ + // open + std::ifstream hN_stream(filename.c_str(), ios::in); + if(!hN_stream.good()) { + LOG("INukeData", pERROR) + << "Error reading INTRANUKE/hN data from: " << filename; + return; + } + + if(cols<2) { + LOG("INukeData", pERROR) + << "Error reading INTRANUKE/hN data from: " << filename; + LOG("INukeData", pERROR) + << "Too few columns: " << cols; + return; + } + + LOG("INukeData", pINFO) + << "Reading INTRANUKE/hN data from: " << filename; + + // skip initial comments + char cbuf[501]; + hN_stream.getline(cbuf,400); + hN_stream.getline(cbuf,400); + hN_stream.getline(cbuf,400); + + // read + double angle = 0; + double xsec = 0; + double trash = 0; + + for(int ip = 0; ip < npoints; ip++) { + hN_stream >> angle >> xsec; + + for(int ic = 0; ic < (cols-2); ic++) { + hN_stream >> trash; + } + + LOG("INukeData", pDEBUG) + << "Adding data point: (KE = " << ke << " MeV, angle = " + << angle << ", sigma = " << xsec << " mbarn)"; + costh_array[ip] = TMath::Cos(angle*kPi/180.); + xsec_array [curr_point] = xsec; + curr_point++; + } +} +//____________________________________________________________________________ +double INukeHadroData2025::XSec( + int hpdgc, int tgtpdgc, int nppdgc, INukeFateHN_t fate, double ke, double costh) const +{ +// inputs +// fate : h+N fate code +// hpdgc : h PDG code +// tgtpdgc : N PDG code +// nppdgc : product N PDG code +// ke : kinetic energy (MeV) +// costh : cos(scattering angle) +// returns +// xsec : mbarn + + double ke_eval = ke; + double costh_eval = costh; + + costh_eval = TMath::Min(costh, 1.); + costh_eval = TMath::Max(costh_eval, -1.); + + if(fate==kIHNFtElas) { + + if( (hpdgc==kPdgProton && tgtpdgc==kPdgProton) || + (hpdgc==kPdgNeutron && tgtpdgc==kPdgNeutron) ) + { + ke_eval = TMath::Min(ke_eval, 999.); + ke_eval = TMath::Max(ke_eval, 50.); + return fhN2dXSecPP_Elas->Evaluate(ke_eval, costh_eval); + } + else + if( (hpdgc==kPdgProton && tgtpdgc==kPdgNeutron) || + (hpdgc==kPdgNeutron && tgtpdgc==kPdgProton) ) + { + ke_eval = TMath::Min(ke_eval, 999.); + ke_eval = TMath::Max(ke_eval, 50.); + return fhN2dXSecNP_Elas->Evaluate(ke_eval, costh_eval); + } + else + if(hpdgc==kPdgPiP) + { + ke_eval = TMath::Min(ke_eval, 1499.); + ke_eval = TMath::Max(ke_eval, 10.); + return fhN2dXSecPipN_Elas->Evaluate(ke_eval, costh_eval); + } + else + if(hpdgc==kPdgPi0) + { + ke_eval = TMath::Min(ke_eval, 1499.); + ke_eval = TMath::Max(ke_eval, 10.); + return fhN2dXSecPi0N_Elas->Evaluate(ke_eval, costh_eval); + } + else + if(hpdgc==kPdgPiM) + { + ke_eval = TMath::Min(ke_eval, 1499.); + ke_eval = TMath::Max(ke_eval, 10.); + return fhN2dXSecPimN_Elas->Evaluate(ke_eval, costh_eval); + } + else + if(hpdgc==kPdgKP && tgtpdgc==kPdgNeutron) + { + ke_eval = TMath::Min(ke_eval, 1799.); + ke_eval = TMath::Max(ke_eval, 100.); + return fhN2dXSecKpN_Elas->Evaluate(ke_eval, costh_eval); + } + else + if(hpdgc==kPdgKP && tgtpdgc==kPdgProton) + { + ke_eval = TMath::Min(ke_eval, 1799.); + ke_eval = TMath::Max(ke_eval, 100.); + return fhN2dXSecKpP_Elas->Evaluate(ke_eval, costh_eval); + } + } + + else if(fate == kIHNFtCEx) { + if( (hpdgc==kPdgPiP || hpdgc==kPdgPi0 || hpdgc==kPdgPiM) && + (tgtpdgc==kPdgProton || tgtpdgc==kPdgNeutron) ) + { + ke_eval = TMath::Min(ke_eval, 1499.); + ke_eval = TMath::Max(ke_eval, 10.); + return fhN2dXSecPiN_CEx->Evaluate(ke_eval, costh_eval); + } + else if( (hpdgc == kPdgProton && tgtpdgc == kPdgProton) || + (hpdgc == kPdgNeutron && tgtpdgc == kPdgNeutron) ) + { + LOG("INukeData", pWARN) << "Inelastic pp does not exist!"; + ke_eval = TMath::Min(ke_eval, 999.); + ke_eval = TMath::Max(ke_eval, 50.); + return fhN2dXSecPP_Elas->Evaluate(ke_eval, costh_eval); + } + else if( (hpdgc == kPdgProton && tgtpdgc == kPdgNeutron) || + (hpdgc == kPdgNeutron && tgtpdgc == kPdgProton) ) + { + ke_eval = TMath::Min(ke_eval, 999.); + ke_eval = TMath::Max(ke_eval, 50.); + return fhN2dXSecNP_Elas->Evaluate(ke_eval, costh_eval); + } + else if(hpdgc == kPdgKP && tgtpdgc == kPdgNeutron) { + ke_eval = TMath::Min(ke_eval, 1799.); + ke_eval = TMath::Max(ke_eval, 100.); + return fhN2dXSecKpN_CEx->Evaluate(ke_eval, costh_eval); + } + } + + else if(fate == kIHNFtAbs) { + if( (hpdgc==kPdgPiP || hpdgc==kPdgPi0 || hpdgc==kPdgPiM) && + (tgtpdgc==kPdgProton || tgtpdgc==kPdgNeutron) ) + { + ke_eval = TMath::Min(ke_eval, 499.); + ke_eval = TMath::Max(ke_eval, 50.); + return fhN2dXSecPiN_Abs->Evaluate(ke_eval, costh_eval); + } + if(hpdgc==kPdgKP) return 1.; //isotropic since no data ??? + } + + else if(fate == kIHNFtInelas) { + if( hpdgc==kPdgGamma && tgtpdgc==kPdgProton &&nppdgc==kPdgProton ) + { + ke_eval = TMath::Min(ke_eval, 1199.); + ke_eval = TMath::Max(ke_eval, 160.); + return fhN2dXSecGamPi0P_Inelas->Evaluate(ke_eval, costh_eval); + } + else + if( hpdgc==kPdgGamma && tgtpdgc==kPdgProton && nppdgc==kPdgNeutron ) + { + ke_eval = TMath::Min(ke_eval, 1199.); + ke_eval = TMath::Max(ke_eval, 160.); + return fhN2dXSecGamPipN_Inelas->Evaluate(ke_eval, costh_eval); + } + else + if( hpdgc==kPdgGamma && tgtpdgc==kPdgNeutron && nppdgc==kPdgProton ) + { + ke_eval = TMath::Min(ke_eval, 1199.); + ke_eval = TMath::Max(ke_eval, 160.); + return fhN2dXSecGamPimP_Inelas->Evaluate(ke_eval, costh_eval); + } + else + if( hpdgc==kPdgGamma && tgtpdgc==kPdgNeutron && nppdgc==kPdgNeutron ) + { + ke_eval = TMath::Min(ke_eval, 1199.); + ke_eval = TMath::Max(ke_eval, 160.); + return fhN2dXSecGamPi0N_Inelas->Evaluate(ke_eval, costh_eval); + } + } + + return 0; +} +//____________________________________________________________________________ +double INukeHadroData2025::FracADep(int hpdgc, INukeFateHA_t fate, double ke, int targA) const +{ + // return the x-section fraction for the input fate for the particle with the input pdg + // code and the target with the input mass number at the input kinetic energy + + ke = TMath::Max(fMinKinEnergy, ke); // ke >= 1 MeV + ke = TMath::Min(fMaxKinEnergyHA, ke); // ke <= 999 MeV + + targA = TMath::Min(208, targA); // A <= 208 + + LOG("INukeData", pDEBUG) << "Querying hA cross section at ke = " << ke << " and target " << targA; + + // Handle pions (currently the same cross sections are used for pi+, pi-, and pi0) + if ( hpdgc == kPdgPiP || hpdgc == kPdgPiM || hpdgc == kPdgPi0 ) { + // get log fate cross sections + double log_cex_xs = TPipA_CEx->Interpolate(targA, ke); + double log_inelas_xs = TPipA_Inelas->Interpolate(targA, ke); + double log_abs_xs = TPipA_Abs->Interpolate(targA, ke); + double log_pipro_xs = TPipA_PiPro->Interpolate(targA, ke); + double log_tot_xs = TPipA_Tot->Interpolate(targA, ke); + + + // get cross sections + double cex_xs = exp(log_cex_xs); + double inelas_xs = exp(log_inelas_xs); + double abs_xs = exp(log_abs_xs); + double pipro_xs = exp(log_pipro_xs); + double tot_xs = exp(log_tot_xs); + + // construct ratios + + double frac_cex = cex_xs / tot_xs ; + double frac_inelas = inelas_xs / tot_xs ; + double frac_abs = abs_xs / tot_xs ; + double frac_pipro = pipro_xs / tot_xs ; + + + + // Protect against unitarity violation due to interpolation problems + // by renormalizing all available fate fractions to unity. + double total = frac_cex + frac_inelas + frac_abs + frac_pipro; // + frac_elas + + if ( fate == kIHAFtCEx ) return frac_cex / total; + else if ( fate == kIHAFtInelas ) return frac_inelas / total; + else if ( fate == kIHAFtAbs ) return frac_abs / total; + else if ( fate == kIHAFtPiProd ) return frac_pipro / total; + else { + std::string sign("+"); + if ( hpdgc == kPdgPiM ) sign = "-"; + else if ( hpdgc == kPdgPi0 ) sign = "0"; + LOG("INukeData", pWARN) << "Pi" << sign << "'s don't have this fate: " << INukeHadroFates::AsString(fate); + return 0.; + } + } + + LOG("INukeData", pWARN) << "Can't handle particles with pdg code = " << hpdgc; + return 0.; +} +//____________________________________________________________________________ +double INukeHadroData2025::FracAIndep(int hpdgc, INukeFateHA_t fate, double ke) const +{ + // return the x-section fraction for the input fate for the particle with the input pdg + // code at the input kinetic energy + ke = TMath::Max(fMinKinEnergy, ke); + ke = TMath::Min(fMaxKinEnergyHA, ke); + + LOG("INukeData", pDEBUG) << "Querying hA cross section at ke = " << ke; + + // TODO: reduce code duplication here + if (hpdgc == kPdgProton) { + // handle protons + double frac_cex = fFracPA_CEx->Evaluate(ke); + double frac_inelas = fFracPA_Inel->Evaluate(ke); + double frac_abs = fFracPA_Abs->Evaluate(ke); + double frac_pipro = fFracPA_PiPro->Evaluate(ke); + double frac_comp = fFracPA_Cmp->Evaluate(ke); + + // Protect against unitarity violation due to interpolation problems + // by renormalizing all available fate fractions to unity. + double total = frac_cex + frac_inelas + frac_abs + frac_pipro + frac_comp; // + frac_elas + + if ( fate == kIHAFtCEx ) return frac_cex / total; + //else if ( fate == kIHAFtElas ) return frac_elas / total; + else if ( fate == kIHAFtInelas ) return frac_inelas / total; + else if ( fate == kIHAFtAbs ) return frac_abs / total; + else if ( fate == kIHAFtPiProd ) return frac_pipro / total; + else if ( fate == kIHAFtCmp ) return frac_comp / total; // cmp - add support for this later + else { + LOG("INukeData", pWARN) + << "Protons don't have this fate: " << INukeHadroFates::AsString(fate); + return 0; + } + } + else if (hpdgc == kPdgNeutron) { + // handle neutrons + double frac_cex = fFracNA_CEx->Evaluate(ke); + double frac_inelas = fFracNA_Inel->Evaluate(ke); + double frac_abs = fFracNA_Abs->Evaluate(ke); + double frac_pipro = fFracNA_PiPro->Evaluate(ke); + double frac_comp = fFracNA_Cmp->Evaluate(ke); + + // Protect against unitarity violation due to interpolation problems + // by renormalizing all available fate fractions to unity. + double total = frac_cex + frac_inelas + frac_abs + frac_pipro + frac_comp; // + frac_elas + + if ( fate == kIHAFtCEx ) return frac_cex / total; + //else if ( fate == kIHAFtElas ) return frac_elas / total; + else if ( fate == kIHAFtInelas ) return frac_inelas / total; + else if ( fate == kIHAFtAbs ) return frac_abs / total; + else if ( fate == kIHAFtPiProd ) return frac_pipro / total; + else if ( fate == kIHAFtCmp ) return frac_comp / total; // cmp - add support for this later + else { + LOG("INukeData", pWARN) + << "Neutrons don't have this fate: " << INukeHadroFates::AsString(fate); + return 0; + } + } + else if (hpdgc == kPdgKP) { + // handle K+ + double frac_inelas = fFracKA_Inel->Evaluate(ke); + //double frac_elas = fFracKA_Elas->Evaluate(ke); + double frac_abs = fFracKA_Abs->Evaluate(ke); + + // Protect against unitarity violation due to interpolation problems + // by renormalizing all available fate fractions to unity. + double total = frac_inelas + frac_abs; // + frac_elas + + if ( fate == kIHAFtInelas ) return frac_inelas / total; + else if ( fate == kIHAFtAbs ) return frac_abs / total; + else { + LOG("INukeData", pWARN) + << "K+'s don't have this fate: " << INukeHadroFates::AsString(fate); + return 0.; + } + } + LOG("INukeData", pWARN) << "Can't handle particles with pdg code = " << hpdgc; + return 0.; +} +//____________________________________________________________________________ +double INukeHadroData2025::XSec(int hpdgc, INukeFateHN_t fate, double ke, int targA, int targZ) const +{ +// return the x-section for the input fate for the particle with the input pdg +// code at the input kinetic energy +// + ke = TMath::Max(fMinKinEnergy, ke); + ke = TMath::Min(fMaxKinEnergyHN, ke); + + LOG("INukeData", pDEBUG) << "Querying hN cross section at ke = " << ke; + + double xsec=0; + + if (hpdgc == kPdgPiP) { + /* handle pi+ */ + if (fate == kIHNFtCEx ) {xsec = TMath::Max(0., fXSecPipp_CEx -> Evaluate(ke)) * targZ; + xsec+= TMath::Max(0., fXSecPipn_CEx -> Evaluate(ke)) * (targA-targZ); + return xsec;} + else if (fate == kIHNFtElas ) {xsec = TMath::Max(0., fXSecPipp_Elas -> Evaluate(ke)) * targZ; + xsec+= TMath::Max(0., fXSecPipn_Elas -> Evaluate(ke)) * (targA-targZ); + return xsec;} + else if (fate == kIHNFtInelas) {xsec = TMath::Max(0., fXSecPipp_Reac -> Evaluate(ke)) * targZ; + xsec+= TMath::Max(0., fXSecPipn_Reac -> Evaluate(ke)) * (targA-targZ); + return xsec;} + else if (fate == kIHNFtAbs ) {xsec = TMath::Max(0., fXSecPipd_Abs -> Evaluate(ke)) * targA; + return xsec;} + else { + LOG("INukeData", pWARN) + << "Pi+'s don't have this fate: " << INukeHadroFates::AsString(fate); + return 0; + } + + } else if (hpdgc == kPdgPiM) { + /* handle pi- */ + if (fate == kIHNFtCEx ) {xsec = TMath::Max(0., fXSecPipn_CEx -> Evaluate(ke)) * targZ; + xsec+= TMath::Max(0., fXSecPipp_CEx -> Evaluate(ke)) * (targA-targZ); + return xsec;} + else if (fate == kIHNFtElas ) {xsec = TMath::Max(0., fXSecPipn_Elas -> Evaluate(ke)) * targZ; + xsec+= TMath::Max(0., fXSecPipp_Elas -> Evaluate(ke)) * (targA-targZ); + return xsec;} + else if (fate == kIHNFtInelas) {xsec = TMath::Max(0., fXSecPipn_Reac -> Evaluate(ke)) * targZ; + xsec+= TMath::Max(0., fXSecPipp_Reac -> Evaluate(ke)) * (targA-targZ); + return xsec;} + else if (fate == kIHNFtAbs ) {xsec = TMath::Max(0., fXSecPipd_Abs -> Evaluate(ke)) * targA; + return xsec;} + else { + LOG("INukeData", pWARN) + << "Pi-'s don't have this fate: " << INukeHadroFates::AsString(fate); + return 0; + } + + } else if (hpdgc == kPdgPi0) { + /* handle pi0 */ + if (fate == kIHNFtCEx ) {xsec = TMath::Max(0., fXSecPi0p_CEx -> Evaluate(ke)) * targZ; + xsec+= TMath::Max(0., fXSecPi0n_CEx -> Evaluate(ke)) * (targA-targZ); + return xsec;} + else if (fate == kIHNFtElas ) {xsec = TMath::Max(0., fXSecPi0p_Elas -> Evaluate(ke)) * targZ; + xsec+= TMath::Max(0., fXSecPi0n_Elas -> Evaluate(ke)) * (targA-targZ); + return xsec;} + else if (fate == kIHNFtInelas) {xsec = TMath::Max(0., fXSecPi0p_Reac -> Evaluate(ke)) * targZ; + xsec+= TMath::Max(0., fXSecPi0n_Reac -> Evaluate(ke)) * (targA-targZ); + return xsec;} + else if (fate == kIHNFtAbs ) {xsec = TMath::Max(0., fXSecPi0d_Abs -> Evaluate(ke)) * targA; + return xsec;} + else { + LOG("INukeData", pWARN) + << "Pi0's don't have this fate: " << INukeHadroFates::AsString(fate); + return 0; + } + + } else if (hpdgc == kPdgProton) { + /* handle protons */ + if (fate == kIHNFtElas ) {xsec = TMath::Max(0., fXSecPp_Elas -> Evaluate(ke)) * targZ; + xsec+= TMath::Max(0., fXSecPn_Elas -> Evaluate(ke)) * (targA-targZ); + return xsec;} + else if (fate == kIHNFtInelas) {xsec = TMath::Max(0., fXSecPp_Reac -> Evaluate(ke)) * targZ; + xsec+= TMath::Max(0., fXSecPn_Reac -> Evaluate(ke)) * (targA-targZ); + return xsec;} + else if (fate == kIHNFtCmp) {xsec = TMath::Max(0., fXSecPp_Cmp -> Evaluate(ke)) * targZ; + xsec+= TMath::Max(0., fXSecPn_Cmp -> Evaluate(ke)) * (targA-targZ); + return xsec;} + else { + LOG("INukeData", pWARN) + << "Protons don't have this fate: " << INukeHadroFates::AsString(fate); + return 0; + } + + } else if (hpdgc == kPdgNeutron) { + /* handle protons */ + if (fate == kIHNFtElas ) {xsec = TMath::Max(0., fXSecPn_Elas -> Evaluate(ke)) * targZ; + xsec+= TMath::Max(0., fXSecNn_Elas -> Evaluate(ke)) * (targA-targZ); + return xsec;} + else if (fate == kIHNFtInelas) {xsec = TMath::Max(0., fXSecPn_Reac -> Evaluate(ke)) * targZ; + xsec+= TMath::Max(0., fXSecNn_Reac -> Evaluate(ke)) * (targA-targZ); + return xsec;} + else if (fate == kIHNFtCmp) {xsec = TMath::Max(0., fXSecPp_Cmp -> Evaluate(ke)) * targZ; + xsec+= TMath::Max(0., fXSecPn_Cmp -> Evaluate(ke)) * (targA-targZ); + return xsec;} + else { + LOG("INukeData", pWARN) + << "Neutrons don't have this fate: " << INukeHadroFates::AsString(fate); + return 0; + } + //Adding here kaons, why elastic only on protons? hA or hN? No _Reac for kaons... + } else if (hpdgc == kPdgKP) { + /* handle K+ */ + if (fate == kIHNFtCEx ) {xsec = TMath::Max(0., fXSecKpn_CEx -> Evaluate(ke)) * targZ; + xsec+= TMath::Max(0., fXSecKpn_CEx -> Evaluate(ke)) * (targA-targZ); + return xsec;} + else if (fate == kIHNFtElas ) {xsec = TMath::Max(0., fXSecKpn_Elas -> Evaluate(ke)) * targZ; + xsec+= TMath::Max(0., fXSecKpn_Elas -> Evaluate(ke)) * (targA-targZ); + return xsec;} + /*else if (fate == kIHNFtAbs ) {xsec = TMath::Max(0., fXSecKpd_Abs -> Evaluate(ke)) * targA; + return xsec;}*/ + else { + LOG("INukeData", pWARN) + << "K+'s don't have this fate: " << INukeHadroFates::AsString(fate); + return 0; + } + //------------------------------------------------ + /* } else if (hpdgc == kPdgGamma) { + / * handle gamma * / + if (fate == kIHNFtInelas) {xsec = TMath::Max(0., fXSecGamp_fs -> Evaluate(ke)) * targZ; + xsec+= TMath::Max(0., fXSecGamn_fs -> Evaluate(ke)) * (targA-targZ); + return xsec;} + else { + LOG("INukeData", pWARN) + << "Gamma's don't have this fate: " << INukeHadroFates::AsString(fate); + return 0; + }*/ + } + LOG("INukeData", pWARN) + << "Can't handle particles with pdg code = " << hpdgc; + + return 0; +} + +double INukeHadroData2025::Frac(int hpdgc, INukeFateHN_t fate, double ke, int targA, int targZ) const +{ +// return the x-section fraction for the input fate for the particle with the +// input pdg code at the input kinetic energy + + ke = TMath::Max(fMinKinEnergy, ke); + ke = TMath::Min(fMaxKinEnergyHN, ke); + + // get x-section + double xsec = this->XSec(hpdgc,fate,ke,targA,targZ); + + // get max x-section + double xsec_tot = 0; + if (hpdgc == kPdgPiP ){xsec_tot = TMath::Max(0., fXSecPipp_Tot -> Evaluate(ke)) * targZ; + xsec_tot+= TMath::Max(0., fXSecPipn_Tot -> Evaluate(ke)) * (targA-targZ);} + else if (hpdgc == kPdgPiM ){xsec_tot = TMath::Max(0., fXSecPipn_Tot -> Evaluate(ke)) * targZ; + xsec_tot+= TMath::Max(0., fXSecPipp_Tot -> Evaluate(ke)) * (targA-targZ);} + else if (hpdgc == kPdgPi0 ){xsec_tot = TMath::Max(0., fXSecPi0p_Tot -> Evaluate(ke)) * targZ; + xsec_tot+= TMath::Max(0., fXSecPi0n_Tot -> Evaluate(ke)) * (targA-targZ);} + else if (hpdgc == kPdgProton ){xsec_tot = TMath::Max(0., fXSecPp_Tot -> Evaluate(ke)) * targZ; + xsec_tot+= TMath::Max(0., fXSecPn_Tot -> Evaluate(ke)) * (targA-targZ);} + else if (hpdgc == kPdgNeutron){xsec_tot = TMath::Max(0., fXSecPn_Tot -> Evaluate(ke)) * targZ; + xsec_tot+= TMath::Max(0., fXSecNn_Tot -> Evaluate(ke)) * (targA-targZ);} + else if (hpdgc == kPdgGamma ) xsec_tot = TMath::Max(0., fXSecGamN_Tot -> Evaluate(ke)); + else if (hpdgc == kPdgKP ) xsec_tot = TMath::Max(0., fXSecKpN_Tot -> Evaluate(ke)); + + // compute fraction + double frac = (xsec_tot>0) ? xsec/xsec_tot : 0.; + return frac; +} +//____________________________________________________________________________ +double INukeHadroData2025::IntBounce(const GHepParticle* p, int target, int scode, INukeFateHN_t fate) +{ + // This method returns a random cos(ang) according to a distribution + // based upon the particle and fate. The sampling uses the + // Accept/Reject method, whereby a distribution is bounded above by + // an envelope, or in this case, a number of envelopes, which can be + // easily sampled (here, we use uniform distributions). + // To get a random value, first the envelope is sampled to + // obtain an x-coordinate (cos(ang)), and then another random value + // is obtained uniformally in the range [0,h(j,0)], where h(j,0) + // is the height of the j-th envelope. If the point is beneath the + // distribution, the x-coordinate is accepted, otherwise, we try + // again. + + RandomGen * rnd = RandomGen::Instance(); + + // numEnv is the number of envelopes in the total envelope, + // that is, the number of seperate simple uniform distributions + // that will be fit against the distribution in question in the + // Accept/Reject process of sampling + int numEnv = 4; + int numPoints = 1000; // The number of points to be evaluated + // for the purpose of finding the max + // value of the distribution + assert((numPoints%numEnv)==0); // numPoints/numEnv has to be an integer + double sr = 2.0 / numEnv; // Subrange, i.e., range of an envelope + double cstep = 2.0 / (numPoints); // Magnitude of the step between eval. points + + double ke = (p->E() - p->Mass()) * 1000.0; // ke in MeV + if (TMath::Abs((int)ke-ke)<.01) ke+=.3; // make sure ke isn't an integer, + // otherwise sometimes gives weird results + // due to ROOT's Interpolate() function + double avg = 0.0; // average value in envelop + + // Matrices to hold data; buff holds the distribution + // data per envelope from which the max value is + // obtained. That value is then recorded in dist, where + // the integral of the envelope to that point is + // also recorded + + double * buff = new double[numPoints/numEnv + 1]; + double ** dist = new double*[numEnv]; + for(int ih=0;ihXSec(p->Pdg(),target,scode,fate,ke,lbound+j*cstep); + avg += buff[j]; + } + + totxsec+=avg; + avg/= (double(numPoints)/double(numEnv)); + dist[i][0] = TMath::MaxElement(numPoints/numEnv+1,buff); + dist[i][1] = avg; + dist[i][2] = dist[i][1] + ((i==0)?0.0:dist[i-1][2]); + avg=0.0; + } + + + delete [] buff; + + int iter=1; // keep track of iterations + int env=0; // envelope index + double rval = 0.0; // random value + double val = 0.0; // angle value + + // Get a random point, see if its in the distribution, and if not + // then try again. + + rval = rnd->RndFsi().Rndm()*dist[numEnv-1][2]; + + env=0; + // Check which envelope it's in, to + // get proper height + while(envRndFsi().Rndm()*sr; + val += sr*env-1; + rval = rnd->RndFsi().Rndm()*dist[env][0]; + + // Test to see if point is in distribution, if it is, stop and return + if(rval < this->XSec(p->Pdg(),target,scode,fate,ke,val)) break; + + // Possibly an extremely long loop, don't want to + // hold up the program + if(iter==1000) + { + int NUM_POINTS=2000; + int pvalues=0; + double points[200]={0}; + for(int k=0;kXSec(p->Pdg(),target,scode,fate,ke,-1+(2.0/NUM_POINTS)*k); + if(points[int(k/10)]>0) pvalues++; + } + if(pvalues<(.05*NUM_POINTS)) + { + // if it reaches here, one more test...if momenta of particle is + // extremely low, just give it an angle from a uniform distribution + if(p->P4()->P()<.005) // 5 MeV + { + val = 2*rnd->RndFsi().Rndm()-1; + break; + } + else + { + LOG("Intranuke", pWARN) << "Hung-up in IntBounce method - Exiting"; + LOG("Intranuke", pWARN) << (*p); + LOG("Intranuke", pWARN) << "Target: " << target << ", Scode: " << scode << ", fate: " << INukeHadroFates::AsString(fate); + for(int ie=0;ie<200;ie+=10) { + LOG("Intranuke", pWARN) << points[ie+0] << ", " << points[ie+1] << ", " << points[ie+2] << ", " + << points[ie+3] << ", " << points[ie+4] << ", " << points[ie+5] << ", " << points[ie+6] << ", " + << points[ie+7] << ", " << points[ie+8] << ", " << points[ie+9]; + } + for(int ih=0;ih, Rutherford Lab. + Steve Dytman , Pittsburgh Univ. + Aaron Meyer , Pittsburgh Univ. + Alex Bell, Pittsburgh Univ. + +\created February 01, 2007 + +\cpright Copyright (c) 2003-2024, The GENIE Collaboration + For the full text of the license visit http://copyright.genie-mc.org + + +*/ +//____________________________________________________________________________ + +#ifndef _INTRANUKE_HADRON_CROSS_SECTIONS_2025_H_ +#define _INTRANUKE_HADRON_CROSS_SECTIONS_2025_H_ + +#include "Physics/HadronTransport/INukeHadroFates2025.h" +#include "Framework/GHEP/GHepParticle.h" +#include "Framework/Numerical/BLI2D.h" + +class TGraph2D; + +namespace genie { + +class Spline; + +class INukeHadroData2025 +{ +public: + static INukeHadroData2025 * Instance (void); + +// Note that, unlike most the rest of GENIE where everything is expressed +// in natural units, all x-section splines included here are evaluated in +// kinetic energies given in MeV and return the x-section value in mbarns + + double XSec (int hpdgc, int tgt, int nprod, INukeFateHN_t rxnType, double ke, double costh) const; + double XSec (int hpdgc, INukeFateHN_t fate, double ke, int targA, int targZ) const; + double FracADep (int hpdgc, INukeFateHA_t fate, double ke, int targA) const; + double FracAIndep (int hpdgc, INukeFateHA_t fate, double ke) const; + double Frac (int hpdgc, INukeFateHN_t fate, double ke, int targA=0, int targZ=0) const; + double IntBounce (const GHepParticle* p, int target, int s1, INukeFateHN_t fate); + + + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // hN mode hadron x-section splines + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + const Spline * XSecPipn_Tot (void) const { return fXSecPipn_Tot; } + const Spline * XSecPipn_CEx (void) const { return fXSecPipn_CEx; } + const Spline * XSecPipn_Elas (void) const { return fXSecPipn_Elas; } + const Spline * XSecPipn_Reac (void) const { return fXSecPipn_Reac; } + const Spline * XSecPipp_Tot (void) const { return fXSecPipp_Tot; } + const Spline * XSecPipp_CEx (void) const { return fXSecPipp_CEx; } + const Spline * XSecPipp_Elas (void) const { return fXSecPipp_Elas; } + const Spline * XSecPipp_Reac (void) const { return fXSecPipp_Reac; } + const Spline * XSecPipp_Abs (void) const { return fXSecPipd_Abs; } + const Spline * XSecPi0n_Tot (void) const { return fXSecPi0n_Tot; } + const Spline * XSecPi0n_CEx (void) const { return fXSecPi0n_CEx; } + const Spline * XSecPi0n_Elas (void) const { return fXSecPi0n_Elas; } + const Spline * XSecPi0n_Reac (void) const { return fXSecPi0n_Reac; } + const Spline * XSecPi0p_Tot (void) const { return fXSecPi0p_Tot; } + const Spline * XSecPi0p_CEx (void) const { return fXSecPi0p_CEx; } + const Spline * XSecPi0p_Elas (void) const { return fXSecPi0p_Elas; } + const Spline * XSecPi0p_Reac (void) const { return fXSecPi0p_Reac; } + const Spline * XSecPi0p_Abs (void) const { return fXSecPi0d_Abs; } + const Spline * XSecPp_Tot (void) const { return fXSecPp_Tot; } + const Spline * XSecPp_Elas (void) const { return fXSecPp_Elas; } + const Spline * XSecPp_Reac (void) const { return fXSecPp_Reac; } + const Spline * XSecPn_Tot (void) const { return fXSecPn_Tot; } + const Spline * XSecPn_Elas (void) const { return fXSecPn_Elas; } + const Spline * XSecPn_Reac (void) const { return fXSecPn_Reac; } + const Spline * XSecNn_Tot (void) const { return fXSecNn_Tot; } + const Spline * XSecNn_Elas (void) const { return fXSecNn_Elas; } + const Spline * XSecNn_Reac (void) const { return fXSecNn_Reac; } + const Spline * XSecKpn_Elas (void) const { return fXSecKpn_Elas; } + const Spline * XSecKpn_CEx (void) const { return fXSecKpn_CEx; } + const Spline * XSecKpp_Elas (void) const { return fXSecKpp_Elas; } + const Spline * XSecKpN_Abs (void) const { return fXSecKpN_Abs; } //not implemented + const Spline * XSecKpN_Tot (void) const { return fXSecKpN_Tot; } + const Spline * XSecGamp_fs (void) const { return fXSecGamp_fs; } + const Spline * XSecGamn_fs (void) const { return fXSecGamn_fs; } + const Spline * XSecGamN_Tot (void) const { return fXSecGamN_Tot; } + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // hA mode hadron x-section splines + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + const Spline * FracPA_Tot (void) const { return fFracPA_Tot; } + const Spline * FracPA_Elas (void) const { return fFracPA_Elas; } + const Spline * FracPA_Inel (void) const { return fFracPA_Inel; } + const Spline * FracPA_CEx (void) const { return fFracPA_CEx; } + const Spline * FracPA_Abs (void) const { return fFracPA_Abs; } + const Spline * FracPA_PiPro (void) const { return fFracPA_PiPro; } + const Spline * FracNA_Tot (void) const { return fFracNA_Tot; } + const Spline * FracNA_Elas (void) const { return fFracNA_Elas; } + const Spline * FracNA_Inel (void) const { return fFracNA_Inel; } + const Spline * FracNA_CEx (void) const { return fFracNA_CEx; } + const Spline * FracNA_Abs (void) const { return fFracNA_Abs; } + const Spline * FracNA_PiPro (void) const { return fFracNA_PiPro; } + const Spline * FracKA_Tot (void) const { return fFracKA_Tot; } + const Spline * FracKA_Elas (void) const { return fFracKA_Elas; } + const Spline * FracKA_Inel (void) const { return fFracKA_Inel; } + const Spline * FracKA_CEx (void) const { return fFracKA_CEx; } + const Spline * FracKA_Abs (void) const { return fFracKA_Abs; } + + const Spline * FracPA_Cmp (void) const { return fFracPA_Cmp; } + const Spline * FracNA_Cmp (void) const { return fFracNA_Cmp; } //suarez + + + const BLI2DNonUnifGrid * hN2dXSecPP_Elas (void) const { return fhN2dXSecPP_Elas; } + const BLI2DNonUnifGrid * hN2dXSecNP_Elas (void) const { return fhN2dXSecNP_Elas; } + const BLI2DNonUnifGrid * hN2dXSecPipN_Elas (void) const { return fhN2dXSecPipN_Elas; } + const BLI2DNonUnifGrid * hN2dXSecPi0N_Elas (void) const { return fhN2dXSecPi0N_Elas; } + const BLI2DNonUnifGrid * hN2dXSecPimN_Elas (void) const { return fhN2dXSecPimN_Elas; } + const BLI2DNonUnifGrid * hN2dXSecKpN_Elas (void) const { return fhN2dXSecKpN_Elas; } + const BLI2DNonUnifGrid * hN2dXSecKpP_Elas (void) const { return fhN2dXSecKpP_Elas; } + const BLI2DNonUnifGrid * hN2dXSecPiN_CEx (void) const { return fhN2dXSecPiN_CEx; } + const BLI2DNonUnifGrid * hN2dXSecPiN_Abs (void) const { return fhN2dXSecPiN_Abs; } + const BLI2DNonUnifGrid * hN2dXSecGamPi0P_Inelas (void) const { return fhN2dXSecGamPi0P_Inelas; } + const BLI2DNonUnifGrid * hN2dXSecGamPi0N_Inelas (void) const { return fhN2dXSecGamPi0N_Inelas; } + const BLI2DNonUnifGrid * hN2dXSecGamPipN_Inelas (void) const { return fhN2dXSecGamPipN_Inelas; } + const BLI2DNonUnifGrid * hN2dXSecGamPimP_Inelas (void) const { return fhN2dXSecGamPimP_Inelas; } + + static double fMinKinEnergy; ///< + static double fMaxKinEnergyHA; ///< + static double fMaxKinEnergyHN; ///< + +private: + INukeHadroData2025(); + INukeHadroData2025(const INukeHadroData2025 & shx); + ~INukeHadroData2025(); + + void LoadCrossSections(void); + + void ReadhNFile( + string filename, double ke, int npoints, int & curr_point, + /*double * ke_array,*/ double * costh_array, double * xsec_array, int cols); + + static INukeHadroData2025 * fInstance; + + Spline * fXSecPipn_Tot; ///< pi+n hN x-section splines + Spline * fXSecPipn_CEx; ///< + Spline * fXSecPipn_Elas; ///< + Spline * fXSecPipn_Reac; ///< + Spline * fXSecPipp_Tot; ///< pi+p hN x-section splines + Spline * fXSecPipp_CEx; ///< + Spline * fXSecPipp_Elas; ///< + Spline * fXSecPipp_Reac; ///< + Spline * fXSecPipd_Abs; ///< + Spline * fXSecPi0n_Tot; ///< pi0n hN x-section splines + Spline * fXSecPi0n_CEx; ///< + Spline * fXSecPi0n_Elas; ///< + Spline * fXSecPi0n_Reac; ///< + Spline * fXSecPi0p_Tot; ///< pi0p hN x-section splines + Spline * fXSecPi0p_CEx; ///< + Spline * fXSecPi0p_Elas; ///< + Spline * fXSecPi0p_Reac; ///< + Spline * fXSecPi0d_Abs; ///< + Spline * fXSecPp_Tot; ///< p/nN x-section splines + Spline * fXSecPp_Elas; ///< + Spline * fXSecPp_Reac; ///< + Spline * fXSecPn_Tot; ///< + Spline * fXSecPn_Elas; ///< + Spline * fXSecPn_Reac; ///< + Spline * fXSecNn_Tot; ///< + Spline * fXSecNn_Elas; ///< + Spline * fXSecNn_Reac; ///< + Spline * fXSecKpn_Elas; ///< K+N x-section splines + Spline * fXSecKpp_Elas; ///< + Spline * fXSecKpn_CEx; ///< + Spline * fXSecKpN_Abs; ///< + Spline * fXSecKpN_Tot; ///< + Spline * fFracPA_Tot; ///< N+A x-section splines + Spline * fFracPA_Elas; ///< + Spline * fFracPA_Inel; ///< + Spline * fFracPA_CEx; ///< + Spline * fFracPA_Abs; ///< + Spline * fFracPA_PiPro; ///< + Spline * fFracNA_Tot; ///< + Spline * fFracNA_Elas; ///< + Spline * fFracNA_Inel; ///< + Spline * fFracNA_CEx; ///< + Spline * fFracNA_Abs; ///< + Spline * fFracNA_PiPro; ///< + Spline * fFracKA_Tot; ///< K+A x-section splines + Spline * fFracKA_Elas; ///< + Spline * fFracKA_CEx; ///< + Spline * fFracKA_Inel; ///< + Spline * fFracKA_Abs; ///< + Spline * fXSecGamp_fs; ///< gamma A x-section splines + Spline * fXSecGamn_fs; ///< + Spline * fXSecGamN_Tot; ///< + Spline * fXSecPp_Cmp; ///< NN cmp (compound nucleus) fate + Spline * fXSecPn_Cmp; + Spline * fXSecNn_Cmp; + Spline * fFracPA_Cmp; + Spline * fFracNA_Cmp; + + // TGraph2D * TPipA_Tot; + TGraph2D * TfracPipA_CEx; +// TGraph2D * TfracPipA_Elas; + TGraph2D * TfracPipA_Inelas; + TGraph2D * TfracPipA_Abs; + TGraph2D * TfracPipA_PiPro; + + TGraph2D * TPipA_Tot; + TGraph2D * TPipA_CEx; + TGraph2D * TPipA_Inelas; + TGraph2D * TPipA_Abs; + TGraph2D * TPipA_PiPro; + + BLI2DNonUnifGrid * fhN2dXSecPP_Elas; + BLI2DNonUnifGrid * fhN2dXSecNP_Elas; + BLI2DNonUnifGrid * fhN2dXSecPipN_Elas; + BLI2DNonUnifGrid * fhN2dXSecPi0N_Elas; + BLI2DNonUnifGrid * fhN2dXSecPimN_Elas; + BLI2DNonUnifGrid * fhN2dXSecKpN_Elas; + BLI2DNonUnifGrid * fhN2dXSecKpP_Elas; + BLI2DNonUnifGrid * fhN2dXSecKpN_CEx; + BLI2DNonUnifGrid * fhN2dXSecKpN_Abs; + BLI2DNonUnifGrid * fhN2dXSecPiN_CEx; + BLI2DNonUnifGrid * fhN2dXSecPiN_Abs; + BLI2DNonUnifGrid * fhN2dXSecGamPi0P_Inelas; + BLI2DNonUnifGrid * fhN2dXSecGamPi0N_Inelas; + BLI2DNonUnifGrid * fhN2dXSecGamPipN_Inelas; + BLI2DNonUnifGrid * fhN2dXSecGamPimP_Inelas; + + //-- Sinleton cleaner + struct Cleaner { + void DummyMethodAndSilentCompiler() { } + ~Cleaner() { + if (INukeHadroData2025::fInstance !=0) { + delete INukeHadroData2025::fInstance; + INukeHadroData2025::fInstance = 0; + } + } + }; + friend struct Cleaner; +}; + +} // genie namespace +#endif //_INTRANUKE_HADRON_CROSS_SECTIONS_2015_H_ + + diff --git a/src/Physics/HadronTransport/2025/INukeHadroFates2025.h b/src/Physics/HadronTransport/2025/INukeHadroFates2025.h new file mode 100644 index 000000000..0cb89de35 --- /dev/null +++ b/src/Physics/HadronTransport/2025/INukeHadroFates2025.h @@ -0,0 +1,123 @@ +//____________________________________________________________________________ +/*! + +\class genie::INukeHadroFates + +\brief An enumeration of possible hadron "fates" taken into account by the + INTRANUKE hadron transport MC. + +\author Steve Dytman , Pittsburgh Univ. + Hugh Gallagher , Tufts Univ. + Costas Andreopoulos , Rutherford Lab. + +\created November 1, 2005 + +\cpright Copyright (c) 2003-2024, The GENIE Collaboration + For the full text of the license visit http://copyright.genie-mc.org + +*/ +//____________________________________________________________________________ + +#ifndef _INTRANUKE_FATES_H_ +#define _INTRANUKE_FATES_H_ + +#include + +using std::string; + +namespace genie { + +// Fates in INTRANUKE's HN mode +// +typedef enum EINukeFateHN_t { + + kIHNFtUndefined = 0, + kIHNFtNoInteraction, + kIHNFtCEx, // cex + kIHNFtElas, // elas + kIHNFtInelas, // inelas + kIHNFtAbs, // abs + kIHNFtCmp //cmp + +} INukeFateHN_t; + +// Fates in INTRANUKE's HA mode +// +typedef enum EINukeFateHA_t { + + kIHAFtUndefined = 0, + kIHAFtNoInteraction, // no interaction + kIHAFtCEx, // cex + // kIHAFtElas, // elas + kIHAFtInelas, // inelas + kIHAFtAbs, // abs + kIHAFtKo, // knock out + kIHAFtCmp, // compound nucleus + kIHAFtPiProd, // pi production + kIHAFtInclPip, // pi production : inclusive pi+ + kIHAFtInclPim, // pi production : inclusive pi- + kIHAFtInclPi0, // pi production : inclusive pi0 + kIHAFtDCEx // dcex + +} INukeFateHA_t; + +class INukeHadroFates { + +public: + //__________________________________________________________________________ + static string AsString(INukeFateHN_t fate) { + switch (fate) { + case kIHNFtUndefined : return "** Undefined HN-mode fate **"; break; + case kIHNFtCEx : return "HN-mode / cex"; break; + case kIHNFtElas : return "HN-mode / elas"; break; + case kIHNFtInelas : return "HN-mode / inelas"; break; + case kIHNFtAbs : return "HN-mode / abs"; break; + case kIHNFtCmp : return "HN-mode / compound"; break; + case kIHNFtNoInteraction : return "HN-mode / no interaction"; break; + default : break; + } + return "** Undefined HN-mode fate **"; + } + //__________________________________________________________________________ + static string AsString(INukeFateHA_t fate) { + switch (fate) { + case kIHAFtUndefined : return "** Undefined HA-mode fate **"; break; + case kIHAFtNoInteraction : return "HA-mode / no interaction"; break; + case kIHAFtCEx : return "HA-mode / cex"; break; + // case kIHAFtElas : return "HA-mode / elas"; break; + case kIHAFtInelas : return "HA-mode / inelas"; break; + case kIHAFtAbs : return "HA-mode / abs"; break; + case kIHAFtKo : return "HA-mode / knock-out"; break; + case kIHAFtCmp : return "HA-mode / compound"; break; + case kIHAFtPiProd : return "HA-mode / pi-production" ; break; + case kIHAFtInclPip : return "HA-mode / pi-prod incl pi+"; break; + case kIHAFtInclPim : return "HA-mode / pi-prod incl pi-"; break; + case kIHAFtInclPi0 : return "HA-mode / pi-prod incl pi0"; break; + case kIHAFtDCEx : return "HA-mode / dcex"; break; + default : break; + } + return "** Undefined HA-mode fate **"; + } + //__________________________________________________________________________ + static string AsSimpleString(INukeFateHA_t fate) { + switch (fate) { + case kIHAFtUndefined : return "undefined"; break; + case kIHAFtNoInteraction : return "no interaction"; break; + case kIHAFtCEx : return "cex"; break; + // case kIHAFtElas : return "elas"; break; + case kIHAFtInelas : return "inelas"; break; + case kIHAFtAbs : return "abs"; break; + case kIHAFtKo : return "knock out"; break; + case kIHAFtCmp : return "compound"; break; + case kIHAFtPiProd : return "pi prod"; break; + case kIHAFtDCEx : return "dcex"; break; + default : break; + } + return "undefined"; + } + //__________________________________________________________________________ + +}; + +} // genie +#endif // _INTRANUKE_FATES_H_ diff --git a/src/Physics/HadronTransport/2025/INukeUtils2025.cxx b/src/Physics/HadronTransport/2025/INukeUtils2025.cxx new file mode 100644 index 000000000..c403f6f59 --- /dev/null +++ b/src/Physics/HadronTransport/2025/INukeUtils2025.cxx @@ -0,0 +1,1950 @@ +//____________________________________________________________________________ +/* + Copyright (c) 2003-2023, The GENIE Collaboration + For the full text of the license visit http://copyright.genie-mc.org + + + Author: Jim Dobson + Imperial College London + + Costas Andreopoulos + University of Liverpool & STFC Rutherford Appleton Laboratory + + Aaron Meyer + Pittsburgh University + + For documentation see the corresponding header file. + + Important revisions after version 2.0.0 : + @ Mar 04, 2009 - JD + Was first added in v2.5.1. Adapted from the T2K GENIE reweighting tool. + @ Mar 05, 2009 - CA + Modified ReconstructHadronFateHA() to work with hadron+A event files in + addition to neutrino event files. + @ Sep 10, 2009 - CA + Added MeanFreePath(), Dist2Exit(), Dist2ExitMFP() + @ Sep 30, 2009 - CA + Added StepParticle() from Intranuke.cxx + @ Oct 02, 2009 - CA + Added test MeanFreePath_Delta(). + @ Jul 15, 2010 - AM + Added common utility functions used by both hA and hN mode. Updated + MeanFreePath to separate proton and neutron cross sections. Added general + utility functions. + @ Jan 9, 2015 - SD, NG, TG + Added 2014 version of INTRANUKE codes for v2.9.0. Uses INukeHadroData2014, + but no changes to mean free path. +*/ +//____________________________________________________________________________ + +#include +#include +#include + +#include "Framework/Algorithm/AlgConfigPool.h" +#include "Framework/Conventions/Constants.h" +#include "Framework/Conventions/Controls.h" +#include "Framework/Conventions/Units.h" +#include "Framework/Conventions/GBuild.h" +#include "Framework/EventGen/EVGThreadException.h" +#include "Framework/GHEP/GHepRecord.h" +#include "Framework/GHEP/GHepParticle.h" +#include "Physics/HadronTransport/Intranuke2025.h" +#include "Physics/HadronTransport/INukeException.h" +#include "Physics/HadronTransport/INukeUtils2025.h" +#include "Physics/HadronTransport/INukeHadroData2025.h" +#include "Framework/Messenger/Messenger.h" +#include "Framework/Numerical/RandomGen.h" +#include "Framework/Numerical/Spline.h" +#include "Framework/ParticleData/PDGLibrary.h" +#include "Framework/ParticleData/PDGUtils.h" +#include "Framework/ParticleData/PDGCodes.h" +#include "Framework/ParticleData/PDGCodeList.h" +#include "Framework/ParticleData/PDGUtils.h" +#include "Framework/Registry/Registry.h" +#include "Physics/NuclearState/NuclearUtils.h" +#include "Framework/Utils/PrintUtils.h" +#include "Physics/HadronTransport/INukeOset.h" +#include "Physics/HadronTransport/INukeOsetTable.h" +#include "Physics/HadronTransport/INukeOsetFormula.h" +#include "TComplex.h" + +using std::ostringstream; +using namespace genie; +using namespace genie::utils; +using namespace genie::constants; +using namespace genie::controls; + +//____________________________________________________________________________ +double genie::utils::intranuke2025::MeanFreePath( + int pdgc, const TLorentzVector & x4, const TLorentzVector & p4, + double A, double Z, double nRpi, double nRnuc, const bool useOset, const bool altOset, const bool xsecNNCorr, string INukeMode) +{ +// Calculate the mean free path (in fm) for a pions and nucleons in a nucleus +// +// Inputs +// pdgc : Hadron PDG code +// x4 : Hadron 4-position in the nucleus coordinate system (units: fm) +// p4 : Hadron 4-momentum (units: GeV) +// A : Nucleus atomic mass number +// nRpi : Controls the pion ring size in terms of de-Broglie wavelengths +// nRnuc: Controls the nuclepn ring size in terms of de-Broglie wavelengths +// + bool is_pion = pdgc == kPdgPiP || pdgc == kPdgPi0 || pdgc == kPdgPiM; + bool is_nucleon = pdgc == kPdgProton || pdgc == kPdgNeutron; + bool is_kaon = pdgc == kPdgKP; + bool is_gamma = pdgc == kPdgGamma; + + if(!is_pion && !is_nucleon && !is_kaon && !is_gamma) return 0.; + + // before getting the nuclear density at the current position + // check whether the nucleus has to become larger by const times the + // de Broglie wavelength -- that is somewhat empirical, but this + // is what is needed to get piA total cross sections right. + // The ring size is different for light nuclei (using gaus density) / + // heavy nuclei (using woods-saxon density). + // The ring size is different for pions / nucleons. + // + double momentum = p4.Vect().Mag(); // hadron momentum in GeV + double ring = (momentum>0) ? 1.240/momentum : 0; // de-Broglie wavelength + + if(A<=20) { ring /= 2.; } + + /* + if (is_pion ) { ring *= nRpi; } + else if (is_nucleon ) { ring *= nRnuc; } + else if (is_gamma || is_kaon || useOset) { ring = 0.; } + */ + if(INukeMode=="hN2025") + { + if (is_pion ) { ring *= nRpi; } + else if (is_nucleon ) { ring *= nRnuc; } + else if (is_gamma || is_kaon || useOset) { ring = 0.;} + } + else + { + if (is_pion || is_kaon ) { ring *= nRpi; } + else if (is_nucleon ) { ring *= nRnuc; } + else if (is_gamma ) { ring = 0.; } + } + + // get the nuclear density at the current position + double rnow = x4.Vect().Mag(); + double rho = A * utils::nuclear::Density(rnow,(int) A,ring); + + // the hadron+nucleon cross section will be evaluated within the range + // of the input spline and assumed to be const outside that range + // + double ke = (p4.Energy() - p4.M()) / units::MeV; // kinetic energy in MeV + ke = TMath::Max(INukeHadroData2025::fMinKinEnergy, ke); + ke = TMath::Min(INukeHadroData2025::fMaxKinEnergyHN, ke); + + // get total xsection for the incident hadron at its current + // kinetic energy + double sigtot = 0; + double ppcnt = (double) Z/ (double) A; // % of protons remaining + INukeHadroData2025 * fHadroData2025 = INukeHadroData2025::Instance(); + + if (is_pion and (INukeMode == "hN2025") and useOset and ke < 350.0) + sigtot = sigmaTotalOset (ke, rho, pdgc, ppcnt, altOset); + else if (pdgc == kPdgPiP) + { sigtot = fHadroData2025 -> XSecPipp_Tot() -> Evaluate(ke)*ppcnt; + sigtot+= fHadroData2025 -> XSecPipn_Tot() -> Evaluate(ke)*(1-ppcnt);} + else if (pdgc == kPdgPi0) + { sigtot = fHadroData2025 -> XSecPi0p_Tot() -> Evaluate(ke)*ppcnt; + sigtot+= fHadroData2025 -> XSecPi0n_Tot() -> Evaluate(ke)*(1-ppcnt);} + else if (pdgc == kPdgPiM) + { sigtot = fHadroData2025 -> XSecPipn_Tot() -> Evaluate(ke)*ppcnt; + sigtot+= fHadroData2025 -> XSecPipp_Tot() -> Evaluate(ke)*(1-ppcnt);} + else if (pdgc == kPdgProton) + { + sigtot = fHadroData2025 -> XSecPp_Tot() -> Evaluate(ke)*ppcnt; + //sigtot+= fHadroData2025 -> XSecPn_Tot() -> Evaluate(ke)*(1-ppcnt); + + PDGLibrary * pLib = PDGLibrary::Instance(); + double hc = 197.327; + double R0 = 1.25 * TMath::Power(A,1./3.) + 2.0 * 0.65; // should all be in units of fm + double Mp = pLib->Find(2212)->Mass(); + double M = pLib->Find(pdgc)->Mass(); + //double E = (p4.Energy() - Mp) * 1000.; // Convert GeV to MeV. + double E = ke; + if (Z*hc/137./x4.Vect().Mag() > E) // Coulomb correction (Cohen, Concepts of Nuclear Physics, pg. 259-260) + { + double z = 1.0; // charge for single proton + double Bc = z*Z*hc/137./R0; + double x = E/Bc; + double f = TMath::ACos(TMath::Power(x,0.5)) - TMath::Power(x*(1-x),0.5); + double B = 0.63*z*Z*TMath::Power((M/Mp)/E,0.5); + double Pc = TMath::Exp(-B*f); + sigtot *= Pc; + } + sigtot+= fHadroData2025 -> XSecPn_Tot() -> Evaluate(ke)*(1-ppcnt); + + double E0 = TMath::Power(A,0.2)*12.; + if (INukeMode=="hN2025"){if(ke mfp = " << lamda << " fm."; +*/ + return lamda; +} +//____________________________________________________________________________ +double genie::utils::intranuke2025::MeanFreePath_Delta( + int pdgc, const TLorentzVector & x4, const TLorentzVector & p4, double A) +{ +// +// **test** +// + +// Calculate the mean free path (in fm) for Delta's in a nucleus +// +// Inputs +// pdgc : Hadron PDG code +// x4 : Hadron 4-position in the nucleus coordinate system (units: fm) +// p4 : Hadron 4-momentum (units: GeV) +// A : Nucleus atomic mass number +// + bool is_deltapp = (pdgc==kPdgP33m1232_DeltaPP); + if(!is_deltapp) return 0.; + + // get the nuclear density at the current position + double rnow = x4.Vect().Mag(); + double rho = A * utils::nuclear::Density(rnow,(int) A); + + // the Delta+N->N+N cross section will be evaluated within the range + // of the input spline and assumed to be const outside that range + double ke = (p4.Energy() - p4.M()) / units::MeV; // kinetic energy in MeV + ke = TMath::Max(1500., ke); + ke = TMath::Min( 0., ke); + + // get the Delta+N->N+N cross section + double sig = 0; + if (ke< 500) sig=20; + else if (ke<1000) sig=40; + else sig=30; + + // value is in mb -> convert to fm^2 + sig *= (units::mb / units::fm2); + + // compute the mean free path + double lamda = 1. / (rho * sig); + + // exits if lamda is InF (if cross section is 0) + if( ! TMath::Finite(lamda) ) { + return -1; + } + + return lamda; +} +//____________________________________________________________________________ +double genie::utils::intranuke2025::ProbSurvival( + int pdgc, const TLorentzVector & x4, const TLorentzVector & p4, double A, double /*Z*/, + double mfp_scale_factor, const Intranuke2025& fsi_model ) +{ +// Calculate the survival probability for a hadron inside a nucleus +// +// Inputs +// pdgc : Hadron PDG code +// x4 : Hadron 4-position in the nucleus coordinate system (units: fm) +// p4 : Hadron 4-momentum (units: GeV) +// A : Target nucleus atomic mass number +// mfp_scale_factor: Tweaks the mean free path (mfp -> mfp*scale). Def: 1.0 + + double prob = 1.0; + + // Get extra parameters from the FSI model that we need to compute the + // mean free path + + // nRpi: Controls the pion ring size in terms of de-Broglie wavelengths + double nRpi = fsi_model.GetDelRPion(); + + // nRnuc: Controls the nuclepn ring size in terms of de-Broglie wavelengths + double nRnuc = fsi_model.GetDelRNucleon(); + + // NR: How far away to track the hadron, in terms of the corresponding + // nuclear radius. Def: 3 + double NR = fsi_model.GetNR(); + + // R0: R0 in R=R0*A^1/3 (units:fm). Def. 1.4 + double R0 = fsi_model.GetR0(); + + // step: Step size (fm) to use when tracking hadrons + double step = fsi_model.GetHadStep(); + + // Boolean model configuration options + bool useOset = fsi_model.GetUseOset(); + bool altOset = fsi_model.GetAltOset(); + bool xsecNNCorr = fsi_model.GetXsecNNCorr(); + + // Intranuke mode setting ("HA2025", etc.) + std::string inuke_mode = fsi_model.GetINukeMode(); + + // Maximum radius to use in the stepping loop. Note that Intranuke2025 uses + // the *target* mass number to choose this radius, not the value for the + // pre- or post-FSI remnant. + double R = NR * R0 * TMath::Power(A, 1./3.); + + TVector3 dr3 = p4.Vect().Unit(); // unit vector along its direction + TLorentzVector dr4(dr3,0); + + int remnA = fsi_model.GetRemnA(); + int remnZ = fsi_model.GetRemnZ(); + + LOG("INukeUtils", pDEBUG) + << "Calculating survival probability for hadron with PDG code = " << pdgc + << " and momentum = " << p4.P() << " GeV"; + LOG("INukeUtils", pDEBUG) + << "mfp scale = " << mfp_scale_factor + << ", nRpi = " << nRpi << ", nRnuc = " << nRnuc << ", NR = " << NR + << ", R0 = " << R0 << " fm"; + + TLorentzVector x4_curr(x4); // current position + + while(1) { + double rnow = x4_curr.Vect().Mag(); + if (rnow > (R+step)) break; + + x4_curr += (step*dr4); + rnow = x4_curr.Vect().Mag(); + + double mfp = genie::utils::intranuke2025::MeanFreePath( pdgc, x4_curr, p4, + remnA, remnZ, nRpi, nRnuc, useOset, altOset, xsecNNCorr, inuke_mode ); + double mfp_twk = mfp * mfp_scale_factor; + + double dprob = (mfp_twk>0) ? TMath::Exp(-step/mfp_twk) : 0.; + prob*=dprob; +/* + LOG("INukeUtils", pDEBUG) + << "+ step size = " << step << " fm, |r| = " << rnow << " fm, " + << "mfp = " << mfp_twk << "fm (nominal mfp = " << mfp << " fm): " + << "dPsurv = " << dprob << ", current Psurv = " << prob; +*/ + } + + LOG("INukeUtils", pDEBUG) << "Psurv = " << prob; + + return prob; +} +//____________________________________________________________________________ +double genie::utils::intranuke2025::Dist2Exit( + const TLorentzVector & x4, const TLorentzVector & p4, + double A, double NR, double R0) +{ +// Calculate distance within a nucleus (units: fm) before we stop tracking +// the hadron. +// See previous functions for a description of inputs. +// + double R = NR * R0 * TMath::Power(A, 1./3.); + double step = 0.05; // fermi + + TVector3 dr3 = p4.Vect().Unit(); // unit vector along its direction + TLorentzVector dr4(dr3,0); + + TLorentzVector x4_curr(x4); // current position + + double d=0; + while(1) { + double rnow = x4_curr.Vect().Mag(); + x4_curr += (step*dr4); + d+=step; + rnow = x4_curr.Vect().Mag(); + if (rnow > R) break; + } + return d; +} +//____________________________________________________________________________ +double genie::utils::intranuke2025::Dist2ExitMFP( + int pdgc, const TLorentzVector & x4, const TLorentzVector & p4, + double A, double Z, double NR, double R0) +{ +// Calculate distance within a nucleus (expressed in terms of 'mean free +// paths') before we stop tracking the hadron. +// See previous functions for a description of inputs. +// + +// distance before exiting in mean free path lengths +// + double R = NR * R0 * TMath::Power(A, 1./3.); + double step = 0.05; // fermi + + TVector3 dr3 = p4.Vect().Unit(); // unit vector along its direction + TLorentzVector dr4(dr3,0); + + TLorentzVector x4_curr(x4); // current position + + double d=0; + double d_mfp=0; + while(1) { + double rnow = x4_curr.Vect().Mag(); + x4_curr += (step*dr4); + d+=step; + rnow = x4_curr.Vect().Mag(); + + double lambda = genie::utils::intranuke2025::MeanFreePath(pdgc,x4_curr,p4,A,Z); + d_mfp += (step/lambda); + + if (rnow > R) break; + } + return d_mfp; +} +//____________________________________________________________________________ +void genie::utils::intranuke2025::StepParticle( + GHepParticle * p, double step, double nuclear_radius) +{ +// Steps a particle starting from its current position (in fm) and moving +// along the direction of its current momentum by the input step (in fm). +// The particle is stepped in a straight line. +// If a nuclear radius is set then the following check is performed: +// If the step is too large and takes the the particle far away from the +// nucleus then its position is scaled back so that the escaped particles are +// always within a ~1fm from the "outer nucleus surface" + +#ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__ + LOG("INukeUtils", pDEBUG) + << "Stepping particle [" << p->Name() << "] by dr = " << step << " fm"; +#endif + + // Step particle + TVector3 dr = p->P4()->Vect().Unit(); // unit vector along its direction + dr.SetMag(step); // spatial step size + double dt = 0; // temporal step: + TLorentzVector dx4(dr,dt); // 4-vector step + TLorentzVector x4new = *(p->X4()) + dx4; // new position + + if(nuclear_radius > 0.) { + // Check position against nuclear boundary. If the particle was stepped + // too far away outside the nuclear boundary bring it back to within + // 1fm from that boundary + double epsilon = 1; // fm + double r = x4new.Vect().Mag(); // fm + double rmax = nuclear_radius+epsilon; + if(r > rmax) { + LOG("INukeUtils", pINFO) + << "Particle was stepped too far away (r = " << r << " fm)"; + LOG("INukeUtils", pINFO) + << "Placing it " << epsilon + << " fm outside the nucleus (r' = " << rmax << " fm)"; + double scale = rmax/r; + x4new *= scale; + }//r>rmax + }//nucl radius set + +#ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__ + LOG("INukeUtils", pDEBUG) + << "\n Init direction = " << print::Vec3AsString(&dr) + << "\n Init position (in fm,nsec) = " << print::X4AsString(p->X4()) + << "\n Fin position (in fm,nsec) = " << print::X4AsString(&x4new); +#endif + + p->SetPosition(x4new); +} + + +//___________________________________________________________________________ +// Method to handle compound nucleus considerations, preequilibrium +// and equilibrium +// Alex Bell -- 6/17/2008 +void genie::utils::intranuke2025::PreEquilibrium( + GHepRecord * ev, GHepParticle * p, + int &RemnA, int &RemnZ, TLorentzVector &RemnP4, + bool /* DoFermi */, double /* FermiFac */, + const NuclearModelI* /* Nuclmodel */, double NucRmvE, EINukeMode mode) +{ + +#ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__ + LOG("INukeUtils", pDEBUG) + << "PreEquilibrium() is invoked for a : " << p->Name() + << " whose kinetic energy is : " << p->KinE(); +#endif + + // Random number generator + RandomGen * rnd = RandomGen::Instance(); + //unused PDGLibrary * pLib = PDGLibrary::Instance(); + + bool allow_dup = true; + PDGCodeList list(allow_dup); // list of final state particles + + double ppcnt = (double) RemnZ / (double) RemnA; // % of protons left + + // figure out the final state conditions + + if(p->Pdg()==kPdgProton) list.push_back(kPdgProton); + else if(p->Pdg()==kPdgNeutron) list.push_back(kPdgNeutron); + + for(int i=0;i<3;i++) + { + if(rnd->RndFsi().Rndm()TargetNucleus()->Pdg()); + TVector3 pBuf = p->P4()->Vect(); + double mBuf = p->Mass(); + double eBuf = TMath::Sqrt(pBuf.Mag2() + mBuf*mBuf); + TLorentzVector tSum(pBuf,eBuf); + double mSum = 0.0; + vector::const_iterator pdg_iter; + for(pdg_iter=++(list.begin());pdg_iter!=list.end();++pdg_iter) + { + target.SetHitNucPdg(*pdg_iter); + Nuclmodel->GenerateNucleon(target); + mBuf = pLib->Find(*pdg_iter)->Mass(); + mSum += mBuf; + pBuf = FermiFac * Nuclmodel->Momentum3(); + eBuf = TMath::Sqrt(pBuf.Mag2() + mBuf*mBuf); + tSum += TLorentzVector(pBuf,eBuf); + RemnP4 -= TLorentzVector(pBuf,eBuf-mBuf); + } + TLorentzVector dP4 = tSum + TLorentzVector(TVector3(0,0,0),-mSum); + p->SetMomentum(dP4); + } + */ + // do the phase space decay & save all f/s particles to the event record + bool success = genie::utils::intranuke2025::PhaseSpaceDecay(ev,p,list,RemnP4,NucRmvE,mode); + if(success) LOG("INukeUtils2025",pINFO) << "Successful phase space decay for pre-equilibrium nucleus FSI event"; + else + { + exceptions::INukeException exception; + exception.SetReason("Phase space generation of pre-equilibrium nucleus final state failed, details above"); + throw exception; + } + + int p_loc = 0; + while(p_locGetEntries()) + { + GHepParticle * p_ref = ev->Particle(p_loc); + if(!p->ComparePdgCodes(p_ref)) p_loc++; + else + { + if(!p->CompareStatusCodes(p_ref)) p_loc++; + else + { + if(!p->CompareMomentum(p_ref)) p_loc++; + else break; + } + } + } + +#ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__ + LOG("INukeUtils", pDEBUG) + << "Particle at: " << p_loc; +#endif + + // find the appropriate daughter + vector * descendants = ev->GetStableDescendants(p_loc); + + int loc = p_loc + 1; + int f_loc = p_loc + 1; + double energy = ev->Particle(loc)->E(); + +/* // (1) least energetic + double min_en = energy; + + for(unsigned int j=0;jsize();j++) + { + loc = (*descendants)[j]; + energy = ev->Particle(loc)->E(); + if(energysize();j++) + { + loc = (*descendants)[j]; + energy = ev->Particle(loc)->E(); + if(energy>max_en) + { + f_loc = loc; + max_en = energy; + } + } + + // (3) 1st particle + // ...just use the defaulted f_loc + + delete descendants; + + // change particle status for decaying particle - take out as test + //ev->Particle(f_loc)->SetStatus(kIStIntermediateState); + // decay a clone particle + GHepParticle * t = new GHepParticle(*(ev->Particle(f_loc))); + t->SetFirstMother(f_loc); + //next statement was in Alex Bell's original code - PreEq, then Equilibrium using particle with highest energy. Note it gets IST=kIStIntermediateState. + //genie::utils::intranuke2025::Equilibrium(ev,t,RemnA,RemnZ,RemnP4,DoFermi,FermiFac,Nuclmodel,NucRmvE,mode); + + delete t; +} +//___________________________________________________________________________ +// Method to handle Equilibrium reaction +// Alex Bell -- 6/17/2008 +void genie::utils::intranuke2025::Equilibrium( + GHepRecord * ev, GHepParticle * p, + int &RemnA, int &RemnZ, TLorentzVector &RemnP4, + bool /* DoFermi */, double /* FermiFac */, + const NuclearModelI* /* Nuclmodel */, double NucRmvE, EINukeMode mode) +{ + +#ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__ + LOG("INukeUtils", pDEBUG) + << "Equilibrium() is invoked for a : " << p->Name() + << " whose kinetic energy is : " << p->KinE(); +#endif + + // Random number generator + RandomGen * rnd = RandomGen::Instance(); + //usused PDGLibrary * pLib = PDGLibrary::Instance(); + + bool allow_dup = true; + PDGCodeList list(allow_dup); // list of final state particles + + // % of protons left + double ppcnt = (double) RemnZ / (double) RemnA; + + // figure out the final state conditions + + if(p->Pdg()==kPdgProton) list.push_back(kPdgProton); + else if(p->Pdg()==kPdgNeutron) list.push_back(kPdgNeutron); + + //add additonal particles to stack + for(int i=0;i<4;i++) + { + if(rnd->RndFsi().Rndm()TargetNucleus()->Pdg()); + TVector3 pBuf = p->P4()->Vect(); + double mBuf = p->Mass(); + double eBuf = TMath::Sqrt(pBuf.Mag2() + mBuf*mBuf); + TLorentzVector tSum(pBuf,eBuf); + double mSum = 0.0; + vector::const_iterator pdg_iter; + for(pdg_iter=++(list.begin());pdg_iter!=list.end();++pdg_iter) + { + target.SetHitNucPdg(*pdg_iter); + Nuclmodel->GenerateNucleon(target); + mBuf = pLib->Find(*pdg_iter)->Mass(); + mSum += mBuf; + pBuf = FermiFac * Nuclmodel->Momentum3(); + eBuf = TMath::Sqrt(pBuf.Mag2() + mBuf*mBuf); + tSum += TLorentzVector(pBuf,eBuf); + RemnP4 -= TLorentzVector(pBuf,eBuf-mBuf); + } + TLorentzVector dP4 = tSum + TLorentzVector(TVector3(0,0,0),-mSum); + p->SetMomentum(dP4); + } + */ + // do the phase space decay & save all f/s particles to the record + bool success = genie::utils::intranuke2025::PhaseSpaceDecay(ev,p,list,RemnP4,NucRmvE,mode); + if (success) LOG("INukeUtils",pINFO) << "successful equilibrium interaction"; + else + { + exceptions::INukeException exception; + exception.SetReason("Phase space generation of compound nucleus final state failed, details above"); + throw exception; + } + +} + + +//___________________________________________________________________________ +bool genie::utils::intranuke2025::TwoBodyCollision( + GHepRecord* ev, int pcode, int tcode, int scode, int s2code, double C3CM, + GHepParticle* p, GHepParticle* t, int &RemnA, int &RemnZ, TLorentzVector &RemnP4, EINukeMode mode) +{ + // Aaron Meyer (10/29/09) + // Adapted from kinematics in other function calls + // + // C3CM is the cosine of the scattering angle, calculated before calling + // p and t are the output particles, must be allocated before calling + // pcode,tcode,scode,s2code are initial and final particle PDG codes in scattering + // return value used for error checking + + // Kinematic variables + + double M1, /* M2, */ M3, M4; // rest energies, in GeV + double E3L, P3L, E4L, P4L; + TVector3 tP1L, tPtot, tbeta, tbetadir, tTrans, tVect; + TVector3 tP1zCM, tP2zCM, tP3L, tP4L; + + // Library instance for reference + PDGLibrary * pLib = PDGLibrary::Instance(); + + // random number generator + //RandomGen * rnd = RandomGen::Instance(); + + // handle fermi target + Target target(ev->TargetNucleus()->Pdg()); + + // get mass for particles + M1 = pLib->Find(pcode)->Mass(); + // usused // M2 = pLib->Find(tcode)->Mass(); + M3 = pLib->Find(scode)->Mass(); + M4 = pLib->Find(s2code)->Mass(); + + // get lab energy and momenta and assign to 4 vectors + TLorentzVector t4P1L = *p->P4(); + TLorentzVector t4P2L = *t->P4(); + + // binding energy + double bindE = 0.025; // empirical choice, might need to be improved + //double bindE = 0.0; + + LOG("TwoBodyCollision",pNOTICE) << "M1 = " << t4P1L.M() << " , M2 = " << t4P2L.M(); + LOG("TwoBodyCollision",pNOTICE) << "E1 = " << t4P1L.E() << " , E2 = " << t4P2L.E(); + + if ( (p->Energy()-p->Mass()) < bindE ){bindE = 0.;} // if the probe's energy is less than the binding energy, set the binding energy to 0. + + // don't use BE unless kinetic energy >> BE. + if((pcode==2112||pcode==2212)&&(t4P1L.E()-M1)<.1) bindE = 0.0; + if((pcode==211||pcode==-211||pcode==111)&&(t4P1L.E()-M1)<.08) bindE = 0.0; + if((pcode==321)&&(t4P1L.E()-M1)<.1) bindE = 0.0; + + // carry out scattering + TLorentzVector t4P3L, t4P4L; + if (!TwoBodyKinematics(M3,M4,t4P1L,t4P2L,t4P3L,t4P4L,C3CM,RemnP4,bindE)) + { + P3L = t4P3L.Vect().Mag(); + P4L = t4P4L.Vect().Mag(); + E3L = t4P3L.E(); + E4L = t4P4L.E(); + + LOG("TwoBodyCollision",pNOTICE) + << "TwoBodyKinematics fails: C3CM, P3 = " << C3CM << " " + << P3L << " " << E3L << "\n" << " P4 = " + << P4L << " " << E4L ; + return false; //covers all possiblities for now + } + + // error checking + P3L = t4P3L.Vect().Mag(); + P4L = t4P4L.Vect().Mag(); + E3L = t4P3L.E(); + E4L = t4P4L.E(); + LOG("INukeUtils",pINFO) + << "C3CM, P3 = " << C3CM << " " + << P3L << " " << E3L << "\n" << " P4 = " + << P4L << " " << E4L ; + + // handle very low momentum particles + if(!(TMath::Finite(P3L)) || P3L<.001) + { + LOG("INukeUtils",pINFO) + << "Particle 3 momentum small or non-finite: " << P3L + << "\n" << "--> Assigning .001 as new momentum"; + P3L = .001; + E3L = TMath::Sqrt(P3L*P3L + M3*M3); + } + if(!(TMath::Finite(P4L)) || P4L<.001) + { + LOG("INukeUtils",pINFO) + << "Particle 4 momentum small or non-finite: " << P4L + << "\n" << "--> Assigning .001 as new momentum"; + P4L = .001; + E4L = TMath::Sqrt(P4L*P4L + M4*M4); + } + + // if this is going to be on in the future, remember to not apply PB for Oset + /*// pauli blocking turn off for now to better match data + // if(P3LSetStatus(kIStHadronInTheNucleus); + RemnP4 -= TLorentzVector(0,0,0,bindE); + return false; + }*/ + + // update remnant nucleus + RemnP4 -= t4P2L; + LOG("INukeUtils",pINFO) + << "t4P2L= " << t4P2L.E() << " " << t4P2L.Z() + << " RemnP4= " << RemnP4.E() << " " << RemnP4.Z() ; + if (tcode==kPdgProton) {RemnZ--;RemnA--;} + else if(tcode==kPdgNeutron) RemnA--; + + // create t particle w/ appropriate momenta, code, and status + // Set target's mom to be the mom of the hadron that was cloned + t->SetFirstMother(p->FirstMother()); + t->SetLastMother(p->LastMother()); + + // adjust p to reflect scattering + p->SetPdgCode(scode); + p->SetMomentum(t4P3L); + + t->SetPdgCode(s2code); + t->SetMomentum(t4P4L); + + if (mode==kIMdHN) + { + p->SetStatus(kIStHadronInTheNucleus); + t->SetStatus(kIStHadronInTheNucleus); + } + else + { + p->SetStatus(kIStStableFinalState); + t->SetStatus(kIStStableFinalState); + } + LOG("INukeUtils",pINFO) << "Successful 2 body collision"; + return true; + +} +//___________________________________________________________________________ +bool genie::utils::intranuke2025::TwoBodyKinematics( + double M3, double M4, TLorentzVector t4P1L, TLorentzVector t4P2L, + TLorentzVector &t4P3L, TLorentzVector &t4P4L, double C3CM, TLorentzVector &RemnP4, double bindE) +{ + // Aaron Meyer (05/17/10) + // Adapted from kinematics in other function calls + // + // Outgoing particle masses M3,M4 + // Scatters particles according to normal two body collisions + // + // bindE is the binding energy (GeV) of a particle removed from the nucleus (default 0) + // For nonzero binding energy, remove the binding energy from the total energy, + // then put both of the particles back on mass shell by shifting momentum/energy + // of target + // Momentum only shifted in the direction parallel to the probe's motion + // + // Rotates final transverse component of momentum by a random angle from 0->2pi + // Return value for error checking + // Gives outgoing 4-momenta of particles 3 and 4 (t4P3L, t4P4L respectively) + // + // All 4-momenta should be on mass shell + + double E1L, E2L, P1L, P2L, E3L, P3L; + double beta, gm; // speed and gamma for CM frame in Lab + double S3CM; // sin of scattering angle + double PHI3; + double E1CM, E2CM, E3CM, P3CM;//, E4CM, P4CM; + double P3zL, P3tL;//, P4zL, P4tL; + double Et; + double theta1, theta2, theta5, P1zL, P2zL, P1tL, P2tL; + TVector3 tbeta, tbetadir, tTrans, tVect; + TVector3 tP1zCM, tP2zCM, vP3L; + TLorentzVector t4P1buf, t4P2buf, t4Ptot; + + // Library instance for reference + //PDGLibrary * pLib = PDGLibrary::Instance(); + + // random number generator + RandomGen * rnd = RandomGen::Instance(); + + // error checking + if (C3CM < -1. || C3CM > 1.) return false; + + // calculate sine from scattering angle + S3CM = TMath::Sqrt(1.0 - C3CM*C3CM); + + // fill buffers + t4P1buf = t4P1L; + t4P2buf = t4P2L; + + // get lab energy and momenta + E1L = t4P1buf.E(); + P1L = t4P1buf.P(); + E2L = t4P2buf.E(); + P2L = t4P2buf.P(); + t4Ptot = t4P1buf + t4P2buf; + + LOG("INukeUtils",pINFO) <<"M1 "< Assigning .001 as new momentum"; + P3tL = 0; + P3zL = .001; + P3L = .001; + E3L = TMath::Sqrt(P3L*P3L + M3*M3); + } + + // get random phi angle, distributed uniformally in 360 deg + PHI3 = 2 * kPi * rnd->RndFsi().Rndm(); + + vP3L = P3zL*tbetadir + P3tL*tTrans; + vP3L.Rotate(PHI3,tbetadir); + + t4P3L.SetVect(vP3L); + t4P3L.SetE(E3L); + + t4P4L = t4P1buf + t4P2buf - t4P3L; + t4P4L-= TLorentzVector(0,0,0,bindE); + /*LOG("INukeUtils",pINFO) <<"GENIE:"; + LOG("INukeUtils",pINFO) <<"E4L "<Find(p->Pdg())->Mass(); + M2 = pLib->Find(tcode)->Mass(); + M3 = pLib->Find(s1->Pdg())->Mass(); + M4 = pLib->Find(s2->Pdg())->Mass(); + M5 = pLib->Find(s3->Pdg())->Mass(); + + // set up fermi target + Target target(ev->TargetNucleus()->Pdg()); + + // handle fermi momentum + if(DoFermi) + { + target.SetHitNucPdg(tcode); + Nuclmodel->GenerateNucleon(target); + tP2L = FermiFac * Nuclmodel->Momentum3(); + P2L = tP2L.Mag(); + E2L = TMath::Sqrt(tP2L.Mag2() + M2*M2); + } + else + { + tP2L.SetXYZ(0.0, 0.0, 0.0); + P2L = 0; + E2L = M2; + } + + // first sequence, handle 4th and 5th products as composite + E1L = p->E(); + + P1L = TMath::Sqrt(E1L*E1L - M1*M1); + tP1L = p->P4()->Vect(); + tPtot = tP1L + tP2L; + + tbeta = tPtot * (1.0 / (E1L + E2L)); + tbetadir = tbeta.Unit(); + beta = tbeta.Mag(); + gm = 1.0 / TMath::Sqrt(1.0 - beta*beta); + + theta1 = tP1L.Angle(tbeta); + theta2 = tP2L.Angle(tbeta); + P1zL = P1L*TMath::Cos(theta1); + P2zL = P2L*TMath::Cos(theta2); + tVect.SetXYZ(1,0,0); + if(TMath::Abs((tVect - tbetadir).Mag())<.01) tVect.SetXYZ(0,1,0); + theta5 = tVect.Angle(tbetadir); + tTrans = (tVect - TMath::Cos(theta5)*tbetadir).Unit(); + + E1CM = gm*E1L - gm*beta*P1zL; + tP1zCM = gm*P1zL*tbetadir - gm*tbeta*E1L; + E2CM = gm*E2L - gm*beta*P2zL; + tP2zCM = gm*P2zL*tbetadir - gm*tbeta*E2L; + Et = E1CM + E2CM; + M = (rnd->RndFsi().Rndm()*(Et - M3 - M4 - M5)) + (M4 + M5); + E3CM = (Et*Et + M3*M3 - M*M)/(2*Et); + EiCM = Et - E3CM; + if(E3CM*E3CM - M3*M3<0) + { + LOG("INukeUtils",pNOTICE) + << "PionProduction P3 has non-real momentum - retry kinematics"; + LOG("INukeUtils",pNOTICE) << "Energy, masses of 3 fs particales:" + << E3CM << " " << M3 << " " << " " << M4 << " " << M5; + exceptions::INukeException exception; + exception.SetReason("PionProduction particle 3 has non-real momentum"); + throw exception; + return false; + } + P3CM = TMath::Sqrt(E3CM*E3CM - M3*M3); + + theta3 = kPi * rnd->RndFsi().Rndm(); + theta4 = kPi * rnd->RndFsi().Rndm(); + phi3 = 2*kPi * rnd->RndFsi().Rndm(); + phi4 = 2*kPi * rnd->RndFsi().Rndm(); + + P3zL = gm*beta*E3CM + gm*P3CM*TMath::Cos(theta3); + P3tL = P3CM*TMath::Sin(theta3); + PizL = gm*beta*EiCM - gm*P3CM*TMath::Cos(theta3); + PitL = -P3CM*TMath::Sin(theta3); + + P3L = TMath::Sqrt(P3zL*P3zL + P3tL*P3tL); + PiL = TMath::Sqrt(PizL*PizL + PitL*PitL); + E3L = TMath::Sqrt(P3L*P3L + M3*M3); + EiL = TMath::Sqrt(PiL*PiL + M*M); + + // handle very low momentum particles + if(!(TMath::Finite(P3L)) || P3L < .001) + { + LOG("INukeUtils",pINFO) + << "Particle 3 " << M3 << " momentum small or non-finite: " << P3L + << "\n" << "--> Assigning .001 as new momentum"; + P3tL = 0; + P3zL = .001; + P3L = .001; + E3L = TMath::Sqrt(P3L*P3L + M3*M3); + } + + tP3L = P3zL*tbetadir + P3tL*tTrans; + tPiL = PizL*tbetadir + PitL*tTrans; + tP3L.Rotate(phi3,tbetadir); + tPiL.Rotate(phi3,tbetadir); + + // second sequence, handle formally composite particles 4 and 5 + tbeta2 = tPiL * (1.0 / EiL); + tbetadir2 = tbeta2.Unit(); + beta2 = tbeta2.Mag(); + gm2 = 1.0 / TMath::Sqrt(1.0 - beta2*beta2); + + E4CM2 = (M*M + M4*M4 - M5*M5) / (2*M); + E5CM2 = M - E4CM2; + P4CM2 = TMath::Sqrt(E4CM2*E4CM2 - M4*M4); + + tVect.SetXYZ(1,0,0); + if(TMath::Abs((tVect - tbetadir2).Mag())<.01) tVect.SetXYZ(0,1,0); + theta5 = tVect.Angle(tbetadir2); + tTrans2 = (tVect - TMath::Cos(theta5)*tbetadir2).Unit(); + + P4zL = gm2*beta2*E4CM2 + gm2*P4CM2*TMath::Cos(theta4); + P4tL = P4CM2*TMath::Sin(theta4); + P5zL = gm2*beta2*E5CM2 - gm2*P4CM2*TMath::Cos(theta4); + P5tL = - P4tL; + + P4L = TMath::Sqrt(P4zL*P4zL + P4tL*P4tL); + P5L = TMath::Sqrt(P5zL*P5zL + P5tL*P5tL); + E4L = TMath::Sqrt(P4L*P4L + M4*M4); + E5L = TMath::Sqrt(P5L*P5L + M5*M5); + + // handle very low momentum particles + if(!(TMath::Finite(P4L)) || P4L < .001) + { + LOG("INukeUtils",pINFO) + << "Particle 4 " << M4 << " momentum small or non-finite: " << P4L + << "\n" << "--> Assigning .001 as new momentum"; + P4tL = 0; + P4zL = .001; + P4L = .001; + E4L = TMath::Sqrt(P4L*P4L + M4*M4); + } + if(!(TMath::Finite(P5L)) || P5L < .001) + { + LOG("INukeUtils",pINFO) + << "Particle 5 " << M5 << " momentum small or non-finite: " << P5L + << "\n" << "--> Assigning .001 as new momentum"; + P5tL = 0; + P5zL = .001; + P5L = .001; + E5L = TMath::Sqrt(P5L*P5L + M5*M5); + } + + tP4L = P4zL*tbetadir2 + P4tL*tTrans2; + tP5L = P5zL*tbetadir2 + P5tL*tTrans2; + tP4L.Rotate(phi4,tbetadir2); + tP5L.Rotate(phi4,tbetadir2); + + // pauli blocking + if(P3L < FermiMomentum || ( pdg::IsNeutronOrProton(s2->Pdg()) && P4L < FermiMomentum ) ) + { + LOG("INukeUtils",pNOTICE) + << "PionProduction fails because of Pauli blocking - retry kinematics"; + exceptions::INukeException exception; + exception.SetReason("PionProduction final state not determined"); + throw exception; + return false; + } + + // create scattered particles w/ appropriate momenta, code, and status + // Set moms to be the moms of the hadron that was cloned + s1->SetFirstMother(p->FirstMother()); + s2->SetFirstMother(p->FirstMother()); + s3->SetFirstMother(p->FirstMother()); + s1->SetLastMother(p->LastMother()); + s2->SetLastMother(p->LastMother()); + s3->SetLastMother(p->LastMother()); + + TLorentzVector(tP3L,E3L); + TLorentzVector(tP4L,E4L); + TLorentzVector(tP5L,E5L); + + s1->SetMomentum(TLorentzVector(tP3L,E3L)); + s2->SetMomentum(TLorentzVector(tP4L,E4L)); + s3->SetMomentum(TLorentzVector(tP5L,E5L)); + int mode = kIMdHA; + LOG ("INukeUtils",pDEBUG) << "in Pi Prod, mode = " << mode; + if (mode==kIMdHN) + { + s1->SetStatus(kIStHadronInTheNucleus); + s2->SetStatus(kIStHadronInTheNucleus); + s3->SetStatus(kIStHadronInTheNucleus); + } + else + { + s1->SetStatus(kIStStableFinalState); + s2->SetStatus(kIStStableFinalState); + s3->SetStatus(kIStStableFinalState); + } + return true; +} +//___________________________________________________________________________ +bool genie::utils::intranuke2025::PionProduction( + GHepRecord* ev, GHepParticle* p, GHepParticle* s1, GHepParticle* s2, GHepParticle* s3, int &RemnA, int &RemnZ, + TLorentzVector &RemnP4, bool DoFermi, double FermiFac, double FermiMomentum, const NuclearModelI* Nuclmodel) +{ + // Aaron Meyer (7/15/2010) + // + // Handles pion production reactions in both hA and hN mode + // Calculates fundamental cross sections from fit functions + // Uses isospin relations to determine the rest of cross sections + // + // p is the probe particle + // s1, s2, and s3 are the particles produced in the reaction + // must set the status and add particles to the event record after returning from this method + // return value for error checking + + + // random number generator + RandomGen * rnd = RandomGen::Instance(); + + // library reference + PDGLibrary * pLib = PDGLibrary::Instance(); + + bool ptarg = false; + int pcode = p->Pdg(); + + int p1code = p->Pdg(); + // Randomly determine target and 1st product baryons + int p3code = 0, p4code = 0, p5code = 0; + + // + // Uses a fit curve log(sigma) = a - b/(T_pi - c) for pions + // Fit parameters determined by Roman Tacik (4/3/09) + // pi- & p cross sections are assumed to be the same as pi+ & n + // + // Fit curve for nucleons: + // sigma = a*(1+b*e^(-c*(eta-d)^2))*(1-e^(-(f*eta)^g))*(1-e^(-h/eta^2)) + // 7 parameters (a,b,c,d,f,g,h) + // eta is maximum kinematically allowed momentum of the pion, normalized by the mass + // Uses isotopic spin decomposition of total cross sections + // + + if ((p1code==kPdgPi0)||(p1code==kPdgPiP)||(p1code==kPdgPiM)) { + + double kine = 1000*p->KinE(); + + // Determine cross sections + + // pion + // pi- & p + // -> pi0 & pi0 & n + // a = 8.82; b = 573.2; c = 107.3; + double xsec2pi0n = TMath::Max(0.,TMath::Exp(8.82 - (573.2/(kine-107.3)))); + // -> pi- & pi+ & n + // a = 11.06; b = 985.9; c = 88.2; + double xsecpippimn = TMath::Max(0.,TMath::Exp(11.06 - (985.9/(kine-88.2)))); + // -> pi- & pi0 & p + // a = 9.58; b = 1229.4; c = 60.5; + double xsecpimpi0p = TMath::Max(0.,TMath::Exp(9.58 - (1229.4/(kine-60.5)))); + double totpimp = xsec2pi0n + xsecpippimn + xsecpimpi0p; + + + // pi+ & p + // -> pi+ & pi+ & n + // a = 5.64; b = 222.6; c = 150.0; + double xsec2pipn = TMath::Max(0.,TMath::Exp(5.64 - (222.6/(kine-150.)))); + // -> pi+ & pi0 & p + // a = 7.95; b = 852.6; c = 77.8; + double xsecpippi0p = TMath::Max(0.,TMath::Exp(7.95 - (852.6/(kine-77.8)))); + double totpipp = xsec2pipn + xsecpippi0p; + + if (totpimp<=0 && totpipp<=0) { + LOG("INukeUtils",pNOTICE) << "InelasticHN called below threshold energy"; + p->SetStatus(kIStHadronInTheNucleus); + ev->AddParticle(*p); + return false; + } + + double xsecp, xsecn; + switch (p1code) { + case kPdgPi0: xsecp = 0.5 * (totpimp + totpipp); xsecn = xsecp; break; + case kPdgPiP: xsecp = totpipp; xsecn = totpimp; break; + case kPdgPiM: xsecp = totpimp; xsecn = totpipp; break; + default: + LOG("INukeUtils",pWARN) << "InelasticHN cannot handle probe: " + << PDGLibrary::Instance()->Find(p1code)->GetName(); + exceptions::INukeException exception; + exception.SetReason("PionProduction final state not determined"); + throw exception; + return false; + break; + } + + // Normalize cross sections by Z or A-Z + + xsecp *= RemnZ; + xsecn *= RemnA-RemnZ; + + // determine target + + double rand = rnd->RndFsi().Rndm() * (xsecp + xsecn); + if (rand < xsecp) // proton target + { rand /= RemnZ; ptarg = true;} + else // neutron target + { rand -= xsecp; rand /= RemnA-RemnZ; ptarg = false;} + + + // determine final state + + if (((ptarg==true)&&(p1code==kPdgPiP)) + || ((ptarg==false)&&(p1code==kPdgPiM))) + { + if (rand < xsec2pipn) // pi+ & pi+ & n final state + { + p3code = (ptarg ? kPdgNeutron : kPdgProton); + p4code = p1code; + p5code = p4code; + } + else { // pi+ & pi0 & p final state + p3code = (ptarg ? kPdgProton : kPdgNeutron); + p4code = p1code; + p5code = kPdgPi0; + } + } + else if (((ptarg==false)&&(p1code==kPdgPiP)) + || ((ptarg==true)&&(p1code==kPdgPiM))) + { + if (rand < xsec2pi0n) // pi0 & pi0 & n final state + { + p3code = (ptarg ? kPdgNeutron : kPdgProton); + p4code = kPdgPi0; + p5code = p4code; + } + else if (rand < (xsec2pi0n + xsecpippimn)) // pi+ & pi- & n final state + { + p3code = (ptarg ? kPdgNeutron : kPdgProton); + p4code = p1code; + p5code = ((p1code==kPdgPiP) ? kPdgPiM : kPdgPiP); + } + else // pi0 & pi- & p final state + { + p3code = (ptarg ? kPdgProton : kPdgNeutron); + p4code = p1code; + p5code = kPdgPi0; + } + } + else if (p1code==kPdgPi0) + { + rand = rnd->RndFsi().Rndm(); + if (rand < 191./270.) + { // pi+ & pi- & p final state + p3code = (ptarg ? kPdgProton : kPdgNeutron); + p4code = kPdgPiP; + p5code = kPdgPiM; + } + else if (rand < 7./135.) + { // pi0 & pi0 & p final state + p3code = (ptarg ? kPdgProton : kPdgNeutron); + p4code = kPdgPi0; + p5code = p4code; + } + else + { // pi+ & pi0 & n final state + p3code = (ptarg ? kPdgNeutron : kPdgProton); + p4code = (ptarg ? kPdgPiP : kPdgPiM); + p5code = kPdgPi0; + } + } + else // unhandled + { + LOG("INukeUtils",pNOTICE) << "Pi production final state unable to be determined, picode, ptarg = " <Find(p1code)->GetName() << " " << PDGLibrary::Instance()->Find(ptarg)->GetName(); + exceptions::INukeException exception; + exception.SetReason("PionProduction final state not determined"); + throw exception; + return false; + } + + } else if(p1code==kPdgProton||p1code==kPdgNeutron) //nucleon probes + { + + double tote = p->Energy(); + double pMass = pLib->Find(2212)->Mass(); + double nMass = pLib->Find(2112)->Mass(); + double etapp2ppPi0 = + utils::intranuke2025::CalculateEta(pMass,tote,pMass,pMass+pMass,pLib->Find(111)->Mass()); + double etapp2pnPip = + utils::intranuke2025::CalculateEta(pLib->Find(p1code)->Mass(),tote,((p1code==kPdgProton)?pMass:nMass), + pMass+nMass,pLib->Find(211)->Mass()); + double etapn2nnPip = + utils::intranuke2025::CalculateEta(pMass,tote,nMass,nMass+nMass,pLib->Find(211)->Mass()); + double etapn2ppPim = + utils::intranuke2025::CalculateEta(pMass,tote,nMass,pMass+pMass,pLib->Find(211)->Mass()); + + if ((etapp2ppPi0<=0.)&&(etapp2pnPip<=0.)&&(etapn2nnPip<=0.)&&(etapn2ppPim<=0.)) { // below threshold + LOG("INukeUtils",pNOTICE) << "PionProduction() called below threshold energy"; + exceptions::INukeException exception; + exception.SetReason("PionProduction final state not possible - below threshold"); + throw exception; + return false; + } + + // calculate cross sections + double xsecppPi0=0,xsecpnPiP=0,xsecnnPiP=0,xsecppPiM=0; + if (etapp2ppPi0>0){ + xsecppPi0 = 4511*(1-.91*TMath::Exp(-TMath::Power((etapp2ppPi0-.705),2))); + xsecppPi0 *= (1-TMath::Exp(-TMath::Power((.556*etapp2ppPi0),3.5))); + xsecppPi0 *= (1-TMath::Exp(-56.897/(etapp2ppPi0*etapp2ppPi0))); + xsecppPi0 = TMath::Max(0.,xsecppPi0);} + + if (etapp2pnPip>0){ + xsecpnPiP = 18840*(1-.808*TMath::Exp(-TMath::Power((etapp2pnPip-.371),2))); + xsecpnPiP *= (1-TMath::Exp(-TMath::Power((.568*etapp2pnPip),3.2))); + xsecpnPiP *= (1-TMath::Exp(-39.818/(etapp2pnPip*etapp2pnPip))); + xsecpnPiP = TMath::Max(0.,xsecpnPiP);} + + if (etapn2nnPip>0){ + xsecnnPiP = 7670*(1-.479*TMath::Exp(-TMath::Power((etapn2nnPip-.947),2))); + xsecnnPiP *= (1-TMath::Exp(-TMath::Power((.35*etapn2nnPip),3.2))); + xsecnnPiP *= (1-TMath::Exp(-71.53/(etapn2nnPip*etapn2nnPip))); + xsecnnPiP = TMath::Max(0.,xsecnnPiP);} + + if (etapn2ppPim>0){ + xsecppPiM = 7670*(1-.479*TMath::Exp(-TMath::Power((etapn2ppPim-.947),2))); + xsecppPiM *= (1-TMath::Exp(-TMath::Power((.35*etapn2ppPim),3.2))); + xsecppPiM *= (1-TMath::Exp(-71.53/(etapn2ppPim*etapn2ppPim))); + xsecppPiM = TMath::Max(0.,xsecppPiM);} + + // double sigma11 = xsecppPi0; + double sigma10 = TMath::Max(0.,xsecpnPiP - xsecppPi0); // Fundamental cross sections + double sigma01 = TMath::Max(0.,xsecppPiM + xsecnnPiP - xsecppPi0); + + double xsecpnPi0 = .5*(sigma10 + sigma01); + xsecpnPi0 = TMath::Max(xsecpnPi0,0.); + + LOG("INukeUtils",pDEBUG) << '\n' << "Cross section values: "<<'\n' + << xsecppPi0 << " PP pi0" <<'\n' + << xsecpnPiP << " PN pi+" <<'\n' + << xsecnnPiP << " NN pi+" <<'\n' + << xsecpnPi0 << " PN pi0"; + + double xsecp=0,xsecn=0; + switch (p1code) { + case kPdgProton: xsecp=xsecppPi0+xsecpnPiP; xsecn=xsecppPiM+xsecnnPiP+xsecpnPi0; break; + case kPdgNeutron: xsecp=xsecppPiM+xsecnnPiP+xsecpnPi0; xsecn=xsecppPi0+xsecpnPiP; break; + default: + LOG("INukeUtils",pWARN) << "InelasticHN cannot handle probe: " + << PDGLibrary::Instance()->Find(p1code)->GetName(); + return false; + break; + } + + // Normalize cross sections by Z or (A-Z) + + xsecp *= RemnZ; + xsecn *= RemnA-RemnZ; + + // determine target + + double rand = rnd->RndFsi().Rndm() * (xsecp + xsecn); + if (rand < xsecp) // proton target + { rand /= RemnZ; ptarg = true;} + else // neutron target + { rand -= xsecp; rand /= RemnA-RemnZ; ptarg = false;} + + if(p1code==kPdgProton) // Cross sections not explicitly given are calculated from isospin relations + { + if(ptarg) + { + if (randSetPdgCode(p3code); + s2->SetPdgCode(p4code); + s3->SetPdgCode(p5code); + + if(genie::utils::intranuke2025::ThreeBodyKinematics( + ev,p,(ptarg?kPdgProton:kPdgNeutron),s1,s2,s3,DoFermi,FermiFac,FermiMomentum,Nuclmodel)) + { + // okay, handle remnants and return true + // assumes first particle is always the nucleon, + // second can be either nucleon or pion + // last always pion + if (pcode==kPdgProton || pcode==kPdgPiP) RemnZ++; + if (pcode==kPdgPiM) RemnZ--; + if (pdg::IsPion(pcode)) RemnA--; + if (pdg::IsProton(p3code)) RemnZ--; + if (pdg::IsNeutronOrProton(p4code)) RemnA--; + if (p4code==kPdgPiP || p4code==kPdgProton) RemnZ--; + if (p4code==kPdgPiM) RemnZ++; + if (p5code==kPdgPiP) RemnZ--; + if (p5code==kPdgPiM) RemnZ++; + + LOG("INukeUtils",pDEBUG) << "Remnant (A,Z) = (" <P4() + *s2->P4() + *s3->P4() - *p->P4(); + return true; + } + else { + exceptions::INukeException exception; + exception.SetReason("PionProduction final state not determined"); + throw exception; + return false; + } +} +//___________________________________________________________________________ +double genie::utils::intranuke2025::CalculateEta(double Minc, double nrg, double Mtarg, + double Mtwopart, double Mpi) +{ + //Aaron Meyer (1/20/2010) + + //Used to calculate the maximum kinematically allowed CM frame pion momentum + // ke in MeV, eta normalized by pion mass + // approximated by taking two ejected nucleons to be one particle of the same mass + //For pion cross sections, in utils::intranuke2025::PionProduction + + //LOG("INukeUtils",pDEBUG) << "Input values: "< 1); + + LOG("INukeUtils",pINFO) << "probe mass: M = " << p->Mass(); + + // Get the decay product masses & names + + ostringstream state_sstream; + state_sstream << "( "; + vector::const_iterator pdg_iter; + int i = 0; + double * mass = new double[pdgv.size()]; + double mass_sum = 0; + for(pdg_iter = pdgv.begin(); pdg_iter != pdgv.end(); ++pdg_iter) { + int pdgc = *pdg_iter; + double m = PDGLibrary::Instance()->Find(pdgc)->Mass(); + string nm = PDGLibrary::Instance()->Find(pdgc)->GetName(); + mass[i++] = m; + mass_sum += m; + state_sstream << nm << " "; + } + state_sstream << ")"; + + TLorentzVector * pd = p->GetP4(); // incident particle 4p + + bool is_nuc = pdg::IsNeutronOrProton(p->Pdg()); + bool is_kaon = p->Pdg()==kPdgKP || p->Pdg()==kPdgKM; + // not used // bool is_pion = p->Pdg()==kPdgPiP || p->Pdg()==kPdgPi0 || p->Pdg()==kPdgPiM; + // update available energy -> init (mass + kinetic) + sum of f/s masses + // for pion only. Probe mass not available for nucleon, kaon + double availE = pd->Energy() + mass_sum; + if(is_nuc||is_kaon) availE -= p->Mass(); + pd->SetE(availE); + + LOG("INukeUtils",pNOTICE) + << "size, mass_sum, availE, pd mass, energy = " << pdgv.size() << " " + << mass_sum << " " << availE << " " << p->Mass() << " " << p->Energy() ; + + // compute the 4p transfer to the hadronic blob + double dE = mass_sum; + if(is_nuc||is_kaon) dE -= p->Mass(); + TLorentzVector premnsub(0,0,0,dE); + RemnP4 -= premnsub; + + LOG("INukeUtils", pINFO) + << "Final state = " << state_sstream.str() << " has N = " << pdgv.size() + << " particles / total mass = " << mass_sum; + LOG("INukeUtils", pINFO) + << "Composite system p4 = " << utils::print::P4AsString(pd); + + // Set the decay + TGenPhaseSpace GenPhaseSpace; + bool permitted = GenPhaseSpace.SetDecay(*pd, pdgv.size(), mass); + if(!permitted) { + LOG("INukeUtils", pERROR) + << " *** Phase space decay is not permitted \n" + << " Total particle mass = " << mass_sum << "\n" + << " Decaying system p4 = " << utils::print::P4AsString(pd); + + // clean-up and return + RemnP4 += premnsub; + delete [] mass; + delete pd; + return false; + } + + // The decay is permitted - add the incident particle at the event record + // and mark is as 'Nucleon Cluster Target' (used to be confusing 'Decayed State') + p->SetStatus(kIStNucleonClusterTarget); //kIStDecayedState); + p->SetPdgCode(kPdgCompNuclCluster); + ev->AddParticle(*p); + // Get the maximum weight + double wmax = -1; + for(int k=0; k<200; k++) { + double w = GenPhaseSpace.Generate(); + wmax = TMath::Max(wmax,w); + } + assert(wmax>0); + + LOG("INukeUtils", pINFO) + << "Max phase space gen. weight @ current hadronic interaction: " << wmax; + + // Generate an unweighted decay + + RandomGen * rnd = RandomGen::Instance(); + wmax *= 1.2; + + bool accept_decay=false; + unsigned int itry=0; + + while(!accept_decay) + { + itry++; + + if(itry>kMaxUnweightDecayIterations) { + // report, clean-up and return + LOG("INukeUtils", pNOTICE) + << "Couldn't generate an unweighted phase space decay after " + << itry << " attempts"; + delete [] mass; + delete pd; + return false; + } + + double w = GenPhaseSpace.Generate(); + double gw = wmax * rnd->RndFsi().Rndm(); + + if(w > wmax) { + LOG("INukeUtils", pNOTICE) + << "Decay weight = " << w << " > max decay weight = " << wmax; + } + + LOG("INukeUtils", pNOTICE) << "Decay weight = " << w << " / R = " << gw; + accept_decay = (gw<=w); + } + + // Insert final state products into the event record + // - the particles are added as daughters of the decayed state + // - the particles are marked as final stable state (in hA mode) + i=0; + int mom = ev->ParticlePosition(p); + LOG("INukeUtils", pNOTICE) << "mother index = " << mom; + GHepStatus_t ist = kIStStableFinalState; + GHepStatus_t ist_pi = kIStHadronInTheNucleus; + + TLorentzVector * v4 = p->GetX4(); + + double checkpx = p->Px(); + double checkpy = p->Py(); + double checkpz = p->Pz(); + double checkE = p->E(); + + //LOG("INukeUtils", PNOTICE) + + for(pdg_iter = pdgv.begin(); pdg_iter != pdgv.end(); ++pdg_iter) { + + //-- current PDG code + int pdgc = *pdg_iter; + bool isnuc = pdg::IsNeutronOrProton(pdgc); + + //-- get the 4-momentum of the i-th final state particle + TLorentzVector * p4fin = GenPhaseSpace.GetDecay(i++); + + //-- intranuke no longer throws "bindinos" but adds all the energy + // not going at a simulated f/s particle at a "hadronic blob" + // representing the remnant system: do the binding energy subtraction + // here & update the remnant hadronic system 4p + double M = PDGLibrary::Instance()->Find(pdgc)->Mass(); + double En = p4fin->Energy(); + + double KE = En-M; + + //double KE = En; + //if(is_pion) KE -= M; + + double dE_leftover = TMath::Min(NucRmvE, KE); + KE -= dE_leftover; + En = KE+M; + double pmag_old = p4fin->P(); + double pmag_new = TMath::Sqrt(TMath::Max(0.,En*En-M*M)); + double scale = pmag_new / pmag_old; + double pxn = scale * p4fin->Px(); + double pyn = scale * p4fin->Py(); + double pzn = scale * p4fin->Pz(); + + TLorentzVector p4n(pxn,pyn,pzn,En); + // LOG("INukeUtils", pNOTICE) << "Px = " << pxn << " Py = " << pyn + // << " Pz = " << pzn << " E = " << KE; + checkpx -= pxn; + checkpy -= pyn; + checkpz -= pzn; + checkE -= KE; + + if (mode==kIMdHA && + (pdgc==kPdgPiP || pdgc==kPdgPi0 || pdgc==kPdgPiM) ) + { + if (p4n.Vect().Mag()>=0.001) + { + GHepParticle new_particle(pdgc, ist_pi, mom,-1,-1,-1, p4n, *v4); + ev->AddParticle(new_particle); + } + else + { + // Momentum too small, assign a non-zero momentum to the particle + // Conserve momentum with the remnant nucleus + + LOG("INukeUtils", pINFO)<<"Momentum too small; assigning 0.001 as new momentum"; + + double phi = 2*kPi*rnd->RndFsi().Rndm(); + double omega = 2*rnd->RndFsi().Rndm(); + // throw number against solid angle for uniform distribution + + double E4n = TMath::Sqrt(0.001*0.001+M*M); + p4n.SetPxPyPzE(0.001,0,0,E4n); + p4n.Rotate(TMath::ACos(1-omega),TVector3(0,0,1)); + p4n.Rotate(phi,TVector3(1,0,0)); + + RemnP4 -= (p4n - TLorentzVector(0,0,0,M)); + + GHepParticle new_particle(pdgc, ist, mom,-1,-1,-1, p4n, *v4); + ev->AddParticle(new_particle); + } + } + else + { + GHepParticle new_particle(pdgc, ist, mom,-1,-1,-1, p4n, *v4); + + if(isnuc) new_particle.SetRemovalEnergy(0.); + ev->AddParticle(new_particle); + } + + double dpx = (1-scale)*p4fin->Px(); + double dpy = (1-scale)*p4fin->Py(); + double dpz = (1-scale)*p4fin->Pz(); + TLorentzVector premnadd(dpx,dpy,dpz,dE_leftover); + RemnP4 += premnadd; + } + //LOG("INukeUtils", pNOTICE) << "TEST: " << p->Mass(); + LOG("INukeUtils", pNOTICE) << "check conservation: Px = " << checkpx << " Py = " << checkpy + << " Pz = " << checkpz << " E = " << checkE; + + // Clean-up + delete [] mass; + delete pd; + delete v4; + + return true; +} + +double genie::utils::intranuke2025::sigmaTotalOset ( + const double &pionKineticEnergy, + const double &density, + const int &pionPDG, + const double &protonFraction, + const bool &isTableChosen + ) +{ + // ------ OsetCrossSection init (only first time function is called) ------ // + static INukeOset *iNukeOset = NULL; + + if (iNukeOset == NULL) + { + if (isTableChosen) + { + // set directory with data on first call + static const std::string dataDir = (gSystem->Getenv("GINUKEHADRONDATA")) ? + string(gSystem->Getenv("GINUKEHADRONDATA")) : + string(gSystem->Getenv("GENIE")) + + string("/data/evgen/intranuke/"); + // set file with Oset table on first call + static const std::string dataFile = dataDir + "tot_xsec/" + "intranuke-xsection-pi+N-Oset.dat"; + // initialize OsetCrossSection on first call + iNukeOset = new INukeOsetTable (dataFile.c_str()); + } + else iNukeOset = new INukeOsetFormula(); + } + // ------ OsetCrossSection init (only first time function is called) ------ // + + // set up Oset class (assign pion Tk, nuclear density etc) + iNukeOset->setupOset (density, pionKineticEnergy, pionPDG, protonFraction); + + return iNukeOset->getTotalCrossSection(); + +} diff --git a/src/Physics/HadronTransport/2025/INukeUtils2025.h b/src/Physics/HadronTransport/2025/INukeUtils2025.h new file mode 100644 index 000000000..eecd8b839 --- /dev/null +++ b/src/Physics/HadronTransport/2025/INukeUtils2025.h @@ -0,0 +1,123 @@ +//____________________________________________________________________________ +/*! + +\namespace genie::intranuke + +\brief INTRANUKE utilities + +\author Jim Dobson + Imperial College London + + Costas Andreopoulos + University of Liverpool + + Aaron Meyer + Pittsburgh University + +\created Mar 03, 2009 + +\cpright Copyright (c) 2003-2024, The GENIE Collaboration + For the full text of the license visit http://copyright.genie-mc.org + +*/ +//____________________________________________________________________________ + +#ifndef _INTRANUKE_UTILS_2025_H_ +#define _INTRANUKE_UTILS_2025_H_ + +#include + +#include "Physics/NuclearState/NuclearModelI.h" +#include "Physics/HadronTransport/INukeHadroFates2025.h" +#include "Physics/HadronTransport/INukeMode.h" +#include "Physics/HadronTransport/INukeNucleonCorr.h" + +class TLorentzVector; + +namespace genie { + +class GHepRecord; +class GHepParticle; +class Intranuke2025; +class PDGCodeList; + +namespace utils { +namespace intranuke2025 +{ + //! Hadron survival probability + double ProbSurvival( + int pdgc, const TLorentzVector & x4, const TLorentzVector & p4, double A, + double Z, double mfp_scale_factor, const Intranuke2025& fsi_model ); + + //! Mean free path (pions, nucleons) + double MeanFreePath( + int pdgc, const TLorentzVector & x4, const TLorentzVector & p4, double A, + double Z, double nRpi=0.5, double nRnuc=1.0, const bool useOset = false, const bool altOset = false, const bool xsecNNCorr = false, string INukeMode = "XX2025"); + + //! Mean free path (Delta++ **test**) + double MeanFreePath_Delta( + int pdgc, const TLorentzVector & x4, const TLorentzVector & p4, double A ); + + //! Distance to exit + double Dist2Exit( + const TLorentzVector & x4, const TLorentzVector & p4, + double A, double NR=3, double R0=1.4); + + //! Distance to exit + double Dist2ExitMFP( + int pdgc, const TLorentzVector & x4, const TLorentzVector & p4, + double A, double Z, double NR=3, double R0=1.4); + + //! Step particle + void StepParticle( + GHepParticle * p, double step, double nuclear_radius=-1.); + + + //! Intranuke utility functions + + bool TwoBodyCollision( + GHepRecord* ev, int pcode, int tcode, int scode, int s2code, double C3CM, GHepParticle* p, + GHepParticle* t, int &RemnA, int &RemnZ, TLorentzVector &RemnP4, EINukeMode mode=kIMdHA); + + bool TwoBodyKinematics( + double M3, double M4, TLorentzVector tP1L, TLorentzVector tP2L, + TLorentzVector &tP3L, TLorentzVector &tP4L, double C3CM, TLorentzVector &RemnP4, double bindE=0); + + bool ThreeBodyKinematics( + GHepRecord* ev, GHepParticle* p, int tcode, GHepParticle* s1, GHepParticle* s2, GHepParticle* s3, + bool DoFermi=false, double FermiFac=0, double FermiMomentum=0, const NuclearModelI* Nuclmodel=(const NuclearModelI*)0); + + bool PionProduction( + GHepRecord* ev, GHepParticle* p, GHepParticle* s1, GHepParticle* s2, GHepParticle* s3, int &RemnA, int &RemnZ, + TLorentzVector &RemnP4,bool DoFermi, double FermiFac, double FermiMomentum, const NuclearModelI* Nuclmodel); + + double CalculateEta( + double Minc, double ke, double Mtarg, double Mtwopart, double Mpi); + + void Equilibrium( + GHepRecord* ev, GHepParticle* p, int &RemnA, int &RemnZ, TLorentzVector &RemnP4, bool DoFermi, + double FermiFac, const NuclearModelI* Nuclmodel, double NucRmvE, EINukeMode mode=kIMdHN); + + void PreEquilibrium( + GHepRecord* ev, GHepParticle* p, int &RemnA, int &RemnZ, TLorentzVector &RemnP4, bool DoFermi, + double FermiFac, const NuclearModelI* Nuclmodel, double NucRmvE, EINukeMode mode=kIMdHN); + + + //! general phase space decay method + bool PhaseSpaceDecay ( + GHepRecord* ev, GHepParticle* p, const PDGCodeList & pdgv, TLorentzVector &RemnP4, + double NucRmvE, EINukeMode mode=kIMdHA); + + // calculate pion-nucleon total cross section based on Oset model + // use only for pion with kinetic energy up to 350 MeV + double sigmaTotalOset (const double &pionKineticEnergy, const double &density, + const int &pionPDG, const double &protonFraction, + const bool &isTableChosen = true + ); + +} // intranuke namespace +} // utils namespace +} // genie namespace + + +#endif // _INTRANUKE_UTILS_2025_H_ diff --git a/src/Physics/HadronTransport/2025/Intranuke2025.cxx b/src/Physics/HadronTransport/2025/Intranuke2025.cxx new file mode 100644 index 000000000..8057b5066 --- /dev/null +++ b/src/Physics/HadronTransport/2025/Intranuke2025.cxx @@ -0,0 +1,443 @@ +//____________________________________________________________________________ +/* + Copyright (c) 2003-2024, The GENIE Collaboration + For the full text of the license visit http://copyright.genie-mc.org + + + Author: Steve Dytman , Pittsburgh Univ. + Aaron Meyer , Pittsburgh Univ. + Alex Bell, Pittsburgh Univ. + Hugh Gallagher , Tufts Univ. + Costas Andreopoulos , Rutherford Lab. + September 20, 2005 + + For the class documentation see the corresponding header file. + + Important revisions after version 2.0.0 : + @ Nov 30, 2007 - SD + Changed the hadron tracking algorithm to take into account the radial + nuclear density dependence. Using the somewhat empirical approach of + increasing the nuclear radius by a const (tunable) number times the tracked + particle's de Broglie wavelength as this helps getting the hadron+nucleus + cross sections right. + @ Mar 08, 2008 - CA + Fixed code retrieving the remnant nucleus which stopped working as soon as + simulation of nuclear de-excitation started pushing photons in the target + nucleus daughter list. + @ Jun 20, 2008 - CA + Fix a mem leak: The (clone of the) GHepParticle being re-scattered was not + deleted after it was added at the GHEP event record. + @ Jan 28, 2009 - CA + The nuclear remnant is now marked as a kIStFinalStateNuclearRemnant, not + as a kIStStableFinalState. + @ Sep 15, 2009 - CA + IsFake() and IsNucleus() are no longer available in GHepParticle. + Use pdg::IsPseudoParticle() and pdg::IsIon(). + @ Sep 15, 2009 - CA + Store the rescattering code (hadron fate) in the GHEP record so as to + facilitate event reweighting. + @ Jul 15, 2010 - AM + Split Intranuke class into two separate classes, one for each interaction mode. + Intranuke.cxx now only contains methods common to both classes and associated + with the stepping of the hadrons through the nucleus and with configuration. + @ Nov 20, 2011 - CA + Tweaked the way TransportHadrons() looks-up the nuclear environment so that + it works for the nucleon decay mode as well. + @ Dec 08, 2011 - CA + Some minor structural changes. The new GEvGenMode_t is determined at the + start of the event processing and is used throughout. fInTestMode flag and + special INTRANUKE configs not needed. ProcessEventRecord() was added by + factoring out code from HNIntranuke and HAIntranuke. Some comments added. + @ Dec 23, 2014 - TG, SD + New 2014 class for latest Intranuke model + @ Apr 26, 2025 - SD + Change year 2015 to 2025 + +*/ +//____________________________________________________________________________ + +#include +#include + +#include + +#include "Framework/Algorithm/AlgConfigPool.h" +#include "Framework/Algorithm/AlgFactory.h" +#include "Framework/Conventions/GBuild.h" +#include "Framework/Conventions/Constants.h" +#include "Framework/Conventions/Controls.h" +#include "Framework/GHEP/GHepStatus.h" +#include "Framework/GHEP/GHepRecord.h" +#include "Framework/GHEP/GHepParticle.h" +#include "Physics/HadronTransport/Intranuke2025.h" +#include "Physics/HadronTransport/INukeHadroData2025.h" +#include "Physics/HadronTransport/INukeHadroFates.h" +#include "Physics/HadronTransport/INukeMode.h" +#include "Physics/HadronTransport/INukeUtils2025.h" +#include "Framework/Interaction/Interaction.h" +#include "Framework/Messenger/Messenger.h" +#include "Framework/Numerical/RandomGen.h" +#include "Framework/Numerical/Spline.h" +#include "Framework/ParticleData/PDGLibrary.h" +#include "Framework/ParticleData/PDGCodes.h" +#include "Framework/ParticleData/PDGCodeList.h" +#include "Framework/ParticleData/PDGUtils.h" +#include "Framework/Utils/PrintUtils.h" +#include "Physics/NuclearState/NuclearUtils.h" + +using std::ostringstream; + +using namespace genie; +using namespace genie::utils; +using namespace genie::constants; +using namespace genie::controls; + +//___________________________________________________________________________ +Intranuke2025::Intranuke2025() : +EventRecordVisitorI() +{ + +} +//___________________________________________________________________________ +Intranuke2025::Intranuke2025(string name) : +EventRecordVisitorI(name) +{ + +} +//___________________________________________________________________________ +Intranuke2025::Intranuke2025(string name, string config) : +EventRecordVisitorI(name, config) +{ + +} +//___________________________________________________________________________ +Intranuke2025::~Intranuke2025() +{ + +} +//___________________________________________________________________________ +void Intranuke2025::ProcessEventRecord(GHepRecord * evrec) const +{ + // Do not continue if there is no nuclear target + GHepParticle * nucltgt = evrec->TargetNucleus(); + if (!nucltgt) { + LOG("HNIntranuke2025", pINFO) << "No nuclear target found - INTRANUKE exits"; + return; + } + + // Decide tracking radius for the current nucleus (few * R0 * A^1/3) + this->SetTrackingRadius(nucltgt); + + // Understand what the event generation mode is (hadron/photon-nucleus, + // lepton-nucleus, nucleon decay) from the input event. + // The determined mode has an effect on INTRANUKE behaviour (how to lookup + // the residual nucleus, whether to set an intranuclear vtx etc) but it + // does not affect the INTRANUKE physics. + fGMode = evrec->EventGenerationMode(); + + // For lepton-nucleus scattering and for nucleon decay intranuclear vtx + // position (in the target nucleus coord system) is set elsewhere. + // This method only takes effect in hadron/photon-nucleus interactions. + // In this special mode, an interaction vertex is set at the periphery + // of the target nucleus. + if(fGMode == kGMdHadronNucleus || + fGMode == kGMdPhotonNucleus) + { + this->GenerateVertex(evrec); + } + + // Now transport all hadrons outside the tracking radius. + // Stepping part is common for both HA and HN. + // Once it has been estabished that an interaction takes place then + // HA and HN specific code takes over in order to simulate the final state. + this->TransportHadrons(evrec); +} +//___________________________________________________________________________ +void Intranuke2025::GenerateVertex(GHepRecord * evrec) const +{ +// Sets a vertex in the nucleus periphery +// Called onlt in hadron/photon-nucleus interactions. + + GHepParticle * nucltgt = evrec->TargetNucleus(); + assert(nucltgt); + + RandomGen * rnd = RandomGen::Instance(); + TVector3 vtx(999999.,999999.,999999.); + + // *** For h+A events (test mode): + // Assume a hadron beam with uniform intensity across an area, + // so we need to choose events uniformly within that area. + double x=999999., y=999999., epsilon = 0.001; + double R2 = TMath::Power(fTrackingRadius,2.); + double rp2 = TMath::Power(x,2.) + TMath::Power(y,2.); + while(rp2 > R2-epsilon) { + x = (fTrackingRadius-epsilon) * rnd->RndFsi().Rndm(); + y = -fTrackingRadius + 2*fTrackingRadius * rnd->RndFsi().Rndm(); + y -= ((y>0) ? epsilon : -epsilon); + rp2 = TMath::Power(x,2.) + TMath::Power(y,2.); + } + vtx.SetXYZ(x,y, -1.*TMath::Sqrt(TMath::Max(0.,R2-rp2)) + epsilon); + + // get the actual unit vector along the incoming hadron direction + TVector3 direction = evrec->Probe()->P4()->Vect().Unit(); + + // rotate the vtx position + vtx.RotateUz(direction); + + LOG("Intranuke2025", pNOTICE) + << "Generated vtx @ R = " << vtx.Mag() << " fm / " + << print::Vec3AsString(&vtx); + + TObjArrayIter piter(evrec); + GHepParticle * p = 0; + while( (p = (GHepParticle *) piter.Next()) ) + { + if(pdg::IsPseudoParticle(p->Pdg())) continue; + if(pdg::IsIon (p->Pdg())) continue; + + p->SetPosition(vtx.x(), vtx.y(), vtx.z(), 0.); + } +} +//___________________________________________________________________________ +void Intranuke2025::SetTrackingRadius(const GHepParticle * p) const +{ + assert(p && pdg::IsIon(p->Pdg())); + double A = p->A(); + fTrackingRadius = fR0 * TMath::Power(A, 1./3.); + + // multiply that by some input factor so that hadrons are tracked + // beyond the nuclear 'boundary' since the nuclear density distribution + // is not zero there + fTrackingRadius *= fNR; + + LOG("Intranuke2025", pNOTICE) + << "Setting tracking radius to R = " << fTrackingRadius; +} +//___________________________________________________________________________ +bool Intranuke2025::NeedsRescattering(const GHepParticle * p) const +{ +// checks whether the particle should be rescattered + + assert(p); + + if(fGMode == kGMdHadronNucleus || + fGMode == kGMdPhotonNucleus) { + // hadron/photon-nucleus scattering propagate the incoming particle + return ( + (p->Status() == kIStInitialState || p->Status() == kIStHadronInTheNucleus) + && !pdg::IsIon(p->Pdg())); + } + else { + // attempt to rescatter anything marked as 'hadron in the nucleus' + return (p->Status() == kIStHadronInTheNucleus); + } +} +//___________________________________________________________________________ +bool Intranuke2025::CanRescatter(const GHepParticle * p) const +{ +// checks whether a particle that needs to be rescattered, can in fact be +// rescattered by this cascade MC + + assert(p); + return ( p->Pdg() == kPdgPiP || + p->Pdg() == kPdgPiM || + p->Pdg() == kPdgPi0 || + p->Pdg() == kPdgProton || + p->Pdg() == kPdgNeutron || + // p->Pdg() == kPdgGamma || + p->Pdg() == kPdgKP //|| + // p->Pdg() == kPdgKM + ); +} +//___________________________________________________________________________ +bool Intranuke2025::IsInNucleus(const GHepParticle * p) const +{ +// check whether the input particle is still within the nucleus +// + return (p->X4()->Vect().Mag() < fTrackingRadius + fHadStep); +} +//___________________________________________________________________________ +void Intranuke2025::TransportHadrons(GHepRecord * evrec) const +{ +// transport all hadrons outside the nucleus + + int inucl = -1; + fRemnA = -1; + fRemnZ = -1; + + // Get 'nuclear environment' at the beginning of hadron transport + // and keep track of the remnant nucleus A,Z + + if(fGMode == kGMdHadronNucleus || + fGMode == kGMdPhotonNucleus) + { + inucl = evrec->TargetNucleusPosition(); + } + else if(fGMode == kGMdLeptonNucleus || + fGMode == kGMdDarkMatterNucleus || + fGMode == kGMdNucleonDecay) { + inucl = evrec->RemnantNucleusPosition(); + } + + LOG("Intranuke2025", pNOTICE) + << "Propagating hadrons within nucleus found in position = " << inucl; + GHepParticle * nucl = evrec->Particle(inucl); + if(!nucl) { + LOG("Intranuke2025", pERROR) + << "No nucleus found in position = " << inucl; + LOG("Intranuke2025", pERROR) + << *evrec; + return; + } + + fRemnA = nucl->A(); + fRemnZ = nucl->Z(); + + LOG("Intranuke2025", pNOTICE) + << "Nucleus (A,Z) = (" << fRemnA << ", " << fRemnZ << ")"; + + const TLorentzVector & p4nucl = *(nucl->P4()); + fRemnP4 = p4nucl; + + // Loop over GHEP and run intranuclear rescattering on handled particles + TObjArrayIter piter(evrec); + GHepParticle * p = 0; + int icurr = -1; + + while( (p = (GHepParticle *) piter.Next()) ) + { + icurr++; + + // Check whether the particle needs rescattering, otherwise skip it + if( ! this->NeedsRescattering(p) ) continue; + + LOG("Intranuke2025", pNOTICE) + << " >> Stepping a " << p->Name() + << " with kinetic E = " << p->KinE() << " GeV"; + + // Rescatter a clone, not the original particle + GHepParticle * sp = new GHepParticle(*p); + + // Set clone's mom to be the hadron that was cloned + sp->SetFirstMother(icurr); + + // Check whether the particle can be rescattered + if(!this->CanRescatter(sp)) { + + // if I can't rescatter it, I will just take it out of the nucleus + LOG("Intranuke2025", pNOTICE) + << "... Current version can't rescatter a " << sp->Name(); + sp->SetFirstMother(icurr); + sp->SetStatus(kIStStableFinalState); + evrec->AddParticle(*sp); + delete sp; + continue; // <-- skip to next GHEP entry + } + + // Start stepping particle out of the nucleus + bool has_interacted = false; + while ( this-> IsInNucleus(sp) ) + { + // advance the hadron by a step + utils::intranuke2025::StepParticle(sp, fHadStep); + + // check whether it interacts + double d = this->GenerateStep(evrec,sp); + has_interacted = (d0) { + // the particle interacts - simulate the hadronic interaction + LOG("Intranuke2025", pNOTICE) + << "Particle has interacted at location: " + << sp->X4()->Vect().Mag() << " / nucl rad= " << fTrackingRadius; + this->SimulateHadronicFinalState(evrec,sp); + } else if(has_interacted && fRemnA<=0) { + // nothing left to interact with! + LOG("Intranuke2025", pNOTICE) + << "*** Nothing left to interact with, escaping."; + sp->SetStatus(kIStStableFinalState); + evrec->AddParticle(*sp); + evrec->Particle(sp->FirstMother())->SetRescatterCode(1); + } else { + // the exits the nucleus without interacting - Done with it! + LOG("Intranuke2025", pNOTICE) + << "*** Hadron escaped the nucleus! Done with it."; + sp->SetStatus(kIStStableFinalState); + evrec->AddParticle(*sp); + evrec->Particle(sp->FirstMother())->SetRescatterCode(1); + } + delete sp; + + // Current snapshot + //LOG("Intranuke2025", pINFO) << "Current event record snapshot: " << *evrec; + + }// GHEP entries + + // Add remnant nucleus - that 'hadronic blob' has all the remaining hadronic + // 4p not put explicitly into the simulated particles + TLorentzVector v4(0.,0.,0.,0.); + GHepParticle remnant_nucleus( + kPdgHadronicBlob, kIStFinalStateNuclearRemnant, inucl,-1,-1,-1, fRemnP4, v4); + evrec->AddParticle(remnant_nucleus); + // Mark the initial remnant nucleus as an intermediate state + // Don't do that in the hadron/photon-nucleus scatterig mode since the initial + // remnant nucleus and the target nucleus coincide. + if(fGMode != kGMdHadronNucleus && + fGMode != kGMdPhotonNucleus) { + evrec->Particle(inucl)->SetStatus(kIStIntermediateState); + } +} +//___________________________________________________________________________ +double Intranuke2025::GenerateStep(GHepRecord* /*evrec*/, GHepParticle* p) const //Added ev to get tgt argument// +{ +// Generate a step (in fermis) for particle p in the input event. +// Computes the mean free path L and generate an 'interaction' distance d +// from an exp(-d/L) distribution + + int pdgc = p->Pdg(); + + double scale = 1.; + if (pdgc==kPdgPiP || pdgc==kPdgPiM) { + scale = fChPionMFPScale; + } + if (pdgc==kPdgPi0) { + scale = fNeutralPionMFPScale; + } + else if (pdgc==kPdgProton || pdgc==kPdgNeutron) { + scale = fNucleonMFPScale; + } + + RandomGen * rnd = RandomGen::Instance(); + + string fINukeMode = this->GetINukeMode(); + string fINukeModeGen = this->GetGenINukeMode(); + + double L = utils::intranuke2025::MeanFreePath(p->Pdg(), *p->X4(), *p->P4(), fRemnA, + fRemnZ, fDelRPion, fDelRNucleon, fUseOset, fAltOset, fXsecNNCorr, fINukeMode); + + LOG("Intranuke2025", pDEBUG) << "mode= " << fINukeModeGen; + L *= scale; + + double d = -1.*L * TMath::Log(rnd->RndFsi().Rndm()); + + /* LOG("Intranuke2025", pDEBUG) + << "mode= " << fINukeMode << "; Mean free path = " << L << " fm / " + << "Generated path length = " << d << " fm"; + */ + return d; +} +//___________________________________________________________________________ +void Intranuke2025::Configure(const Registry & config) +{ + Algorithm::Configure(config); + this->LoadConfig(); +} +//___________________________________________________________________________ +void Intranuke2025::Configure(string param_set) +{ + Algorithm::Configure(param_set); + this->LoadConfig(); +} +//___________________________________________________________________________ diff --git a/src/Physics/HadronTransport/2025/Intranuke2025.h b/src/Physics/HadronTransport/2025/Intranuke2025.h new file mode 100644 index 000000000..74fa5b402 --- /dev/null +++ b/src/Physics/HadronTransport/2025/Intranuke2025.h @@ -0,0 +1,160 @@ +//____________________________________________________________________________ +/*! + +\class genie::Intranuke + +\brief The INTRANUKE intranuclear hadron transport MC. + Is a concrete implementation of the EventRecordVisitorI interface. + +\ref R.Merenyi et al., Phys.Rev.D45 (1992) + R.D.Ransome, Nucl.Phys.B 139 (2005) + + Current INTRANUKE development is led by S.Dytman and H.Gallagher. + The original INTRANUKE cascade MC was developed (in fortran) for the + NeuGEN MC by R.Edgecock, G.F.Pearce, W.A.Mann, R.Merenyi and others. + +\author Steve Dytman , Pittsburgh University + Aaron Meyer , Pittsburgh University + Alex Bell, Pittsburgh University + Hugh Gallagher , Tufts University + Costas Andreopoulos STFC, Rutherford Lab + +\created September 20, 2005 + +\cpright Copyright (c) 2003-2024, The GENIE Collaboration + For the full text of the license visit http://copyright.genie-mc.org + +*/ +//____________________________________________________________________________ + +#ifndef _INTRANUKE_2025_H_ +#define _INTRANUKE_2025_H_ + +#include + +#include "Physics/NuclearState/NuclearModelI.h" + +#include "Framework/Algorithm/AlgFactory.h" +#include "Framework/EventGen/EventRecordVisitorI.h" +#include "Framework/Conventions/GMode.h" +#include "Physics/HadronTransport/INukeMode.h" +#include "Physics/HadronTransport/INukeHadroFates2025.h" + +class TLorentzVector; +class TVector3; + +namespace genie { + +class GHepParticle; +class INukeHadroData2025; +class PDGCodeList; +class HNIntranuke2025; +class HAIntranuke2025; + +class Intranuke2025 : public EventRecordVisitorI { + +friend class IntranukeTester; + +public : + Intranuke2025(); + Intranuke2025(string name); + Intranuke2025(string name, string config); + ~Intranuke2025(); + + // implement the EventRecordVisitorI interface + virtual void ProcessEventRecord(GHepRecord * event_rec) const; + + // override the Algorithm::Configure methods to load configuration + // data to protected data members + virtual void Configure (const Registry & config); + virtual void Configure (string param_set); + + virtual string GetINukeMode() const {return "XX2025";}; + virtual string GetGenINukeMode() const {return "XX";}; + + // Setters used in reweighting + inline void SetRemnA( int A ) { fRemnA = A; } + inline void SetRemnZ( int Z ) { fRemnZ = Z; } + + inline double GetRemnA() const { return fRemnA; } + inline double GetRemnZ() const { return fRemnZ; } + + inline double GetR0() const { return fR0; } + inline double GetNR() const { return fNR; } + + inline double GetDelRPion() const { return fDelRPion; } + inline double GetDelRNucleon() const { return fDelRNucleon; } + + inline double GetNucRmvE() const { return fNucRmvE; } + inline double GetHadStep() const { return fHadStep; } + + inline bool GetUseOset() const { return fUseOset; } + inline bool GetAltOset() const { return fAltOset; } + inline bool GetXsecNNCorr() const { return fXsecNNCorr; } + +protected: + + // methods for loading configuration + virtual void LoadConfig (void)=0; + + // general methods for the cascade mc structure + void TransportHadrons (GHepRecord * ev) const; + void GenerateVertex (GHepRecord * ev) const; + bool NeedsRescattering (const GHepParticle* p) const; + bool CanRescatter (const GHepParticle* p) const; + bool IsInNucleus (const GHepParticle* p) const; + void SetTrackingRadius (const GHepParticle* p) const; + double GenerateStep (GHepRecord* ev, GHepParticle* p) const; + + // virtual functions for individual modes + virtual void SimulateHadronicFinalState(GHepRecord* ev, GHepParticle* p) const = 0; + virtual int HandleCompoundNucleus(GHepRecord* ev, GHepParticle* p, int mom) const = 0; + + // utility objects & params + mutable double fTrackingRadius;///< tracking radius for the nucleus in the current event + mutable TGenPhaseSpace fGenPhaseSpace; ///< a phase space generator + INukeHadroData2025 * fHadroData2025; ///< a collection of h+N,h+A data & calculations + AlgFactory * fAlgf; ///< algorithm factory instance + const NuclearModelI * fNuclmodel; ///< nuclear model used to generate fermi momentum + mutable int fRemnA; ///< remnant nucleus A + mutable int fRemnZ; ///< remnant nucleus Z + mutable TLorentzVector fRemnP4; ///< P4 of remnant system + mutable GEvGenMode_t fGMode; ///< event generation mode (lepton+A, hadron+A, ...) + + // configuration parameters + double fR0; ///< effective nuclear size param + double fNR; ///< param multiplying the nuclear radius, determining how far to track hadrons beyond the "nuclear boundary" + double fNucRmvE; ///< binding energy to subtract from cascade nucleons + double fDelRPion; ///< factor by which Pion Compton wavelength gets multiplied to become nuclear size enhancement + double fDelRNucleon; ///< factor by which Nucleon Compton wavelength gets multiplied to become nuclear size enhancement + double fHadStep; ///< step size for intranuclear hadron transport + double fNucAbsFac; ///< absorption xsec correction factor (hN Mode) + double fNucCEXFac; ///< charge exchange xsec correction factor (hN Mode) + double fEPreEq; ///< threshold for pre-equilibrium reaction + double fFermiFac; ///< testing parameter to modify fermi momentum + double fFermiMomentum; ///< whether or not particle collision is pauli blocked + bool fDoFermi; ///< whether or not to do fermi mom. + bool fDoMassDiff; ///< whether or not to do mass diff. mode + bool fDoCompoundNucleus; ///< whether or not to do compound nucleus considerations + bool fUseOset; ///< Oset model for low energy pion in hN + bool fAltOset; ///< NuWro's table-based implementation (not recommended) + bool fXsecNNCorr; ///< use nuclear medium correction for NN cross section + + double fChPionMFPScale; ///< tweaking factors for tuning + double fNeutralPionMFPScale; + double fPionFracCExScale; + double fPionFracInelScale; + double fChPionFracAbsScale; + double fNeutralPionFracAbsScale; + double fPionFracPiProdScale; + double fNucleonMFPScale; + double fNucleonFracCExScale; + double fNucleonFracInelScale; + double fNucleonFracAbsScale; + double fNucleonFracPiProdScale; + +}; + +} // genie namespace + +#endif // _INTRANUKE_2025_H_ diff --git a/src/Physics/HadronTransport/HAIntranuke2025.cxx b/src/Physics/HadronTransport/HAIntranuke2025.cxx new file mode 100644 index 000000000..b6e398988 --- /dev/null +++ b/src/Physics/HadronTransport/HAIntranuke2025.cxx @@ -0,0 +1,1631 @@ +//____________________________________________________________________________ +/* + Copyright (c) 2003-2024, The GENIE Collaboration + For the full text of the license visit http://copyright.genie-mc.org + + + Author: Steve Dytman , Pittsburgh Univ. + Aaron Meyer , Pittsburgh Univ. + Alex Bell, Pittsburgh Univ. + Hugh Gallagher , Tufts Univ. + Costas Andreopoulos , Rutherford Lab. + September 20, 2005 + + For the class documentation see the corresponding header file. + + Important revisions after version 2.0.0 : + @ Nov 30, 2007 - SD + Changed the hadron tracking algorithm to take into account the radial + nuclear density dependence. Using the somewhat empirical approach of + increasing the nuclear radius by a const (tunable) number times the tracked + particle's de Broglie wavelength as this helps getting the hadron+nucleus + cross sections right. + @ Mar 08, 2008 - CA + Fixed code retrieving the remnant nucleus which stopped working as soon as + simulation of nuclear de-excitation started pushing photons in the target + nucleus daughter list. + @ Jun 20, 2008 - CA + Fix a mem leak: The (clone of the) GHepParticle being re-scattered was not + deleted after it was added at the GHEP event record. + @ Jul 15, 2010 - AM + Major overhaul of the function of each interaction type. Absorption fates + changed to allow more than 6 particles at a time (up to 85 now). PiPro fates + now allow the pion to rescatter inside the nucleus, will be changed at a + later date. HAIntranuke class is now defined as derived from virtual class. + Intranuke. + @ Oct 10, 2011 - SD + Changes to keep reweighting alive. Add exception handling in ElasHA, InelasticHA, + and Inelastic. + @ Jan 24, 2012 - SD + Add option of doing K+. + @ Jan 9, 2015 - SD, NG, TG + Added 2014 version of INTRANUKE codes (new class) for independent development. + @ Aug 30, 2016 - SD + Fix memory leaks - Igor. +*/ +//____________________________________________________________________________ + +#include +#include +#include + +#include + +#include "Framework/Algorithm/AlgConfigPool.h" +#include "Framework/Algorithm/AlgFactory.h" +#include "Framework/Conventions/GBuild.h" +#include "Framework/Conventions/Constants.h" +#include "Framework/Conventions/Controls.h" +#include "Framework/EventGen/EVGThreadException.h" +#include "Framework/GHEP/GHepFlags.h" +#include "Framework/GHEP/GHepStatus.h" +#include "Framework/GHEP/GHepRecord.h" +#include "Framework/GHEP/GHepParticle.h" +#include "Physics/HadronTransport/INukeException.h" +#include "Physics/HadronTransport/Intranuke2025.h" +#include "Physics/HadronTransport/HAIntranuke2025.h" +#include "Physics/HadronTransport/INukeHadroData2025.h" +#include "Physics/HadronTransport/INukeUtils2025.h" +#include "Framework/Interaction/Interaction.h" +#include "Framework/Messenger/Messenger.h" +#include "Framework/Numerical/RandomGen.h" +#include "Framework/Numerical/Spline.h" +#include "Framework/ParticleData/PDGLibrary.h" +#include "Framework/ParticleData/PDGCodes.h" +#include "Framework/ParticleData/PDGCodeList.h" +#include "Framework/ParticleData/PDGUtils.h" +#include "Framework/Utils/PrintUtils.h" +#include "Physics/NuclearState/NuclearUtils.h" +#include "Physics/NuclearState/NuclearModelI.h" +#include "Physics/NuclearState/NuclearModelMap.h" +//#include "Physics/HadronTransport/INukeOset.h" + +using std::ostringstream; + +using namespace genie; +using namespace genie::utils; +using namespace genie::utils::intranuke2025; +using namespace genie::constants; +using namespace genie::controls; + +//___________________________________________________________________________ +//___________________________________________________________________________ +// Methods specific to INTRANUKE's HA-mode +//___________________________________________________________________________ +//___________________________________________________________________________ +HAIntranuke2025::HAIntranuke2025() : +Intranuke2025("genie::HAIntranuke2025") +{ + +} +//___________________________________________________________________________ +HAIntranuke2025::HAIntranuke2025(string config) : +Intranuke2025("genie::HAIntranuke2025",config) +{ + +} +//___________________________________________________________________________ +HAIntranuke2025::~HAIntranuke2025() +{ + +} +//___________________________________________________________________________ +void HAIntranuke2025::ProcessEventRecord(GHepRecord * evrec) const +{ + LOG("HAIntranuke2025", pNOTICE) + << "************ Running hA2025 MODE INTRANUKE ************"; + GHepParticle * nuclearTarget = evrec -> TargetNucleus(); + nuclA = nuclearTarget -> A(); + + Intranuke2025::ProcessEventRecord(evrec); + + LOG("HAIntranuke2025", pINFO) << "Done with this event"; +} +//___________________________________________________________________________ +void HAIntranuke2025::SimulateHadronicFinalState( + GHepRecord* ev, GHepParticle* p) const +{ +// Simulate a hadron interaction for the input particle p in HA mode +// + // check inputs + if(!p || !ev) { + LOG("HAIntranuke2025", pERROR) << "** Null input!"; + return; + } + + // get particle code and check whether this particle can be handled + int pdgc = p->Pdg(); + bool is_gamma = (pdgc==kPdgGamma); + bool is_pion = (pdgc==kPdgPiP || pdgc==kPdgPiM || pdgc==kPdgPi0); + bool is_kaon = (pdgc==kPdgKP || pdgc==kPdgKM); + bool is_baryon = (pdgc==kPdgProton || pdgc==kPdgNeutron); + bool is_handled = (is_baryon || is_pion || is_kaon || is_gamma); + if(!is_handled) { + LOG("HAIntranuke2025", pERROR) << "** Can not handle particle: " << p->Name(); + return; + } + + // select a fate for the input particle + INukeFateHA_t fate = this->HadronFateHA(p); + + // store the fate + ev->Particle(p->FirstMother())->SetRescatterCode((int)fate); + + if(fate == kIHAFtUndefined) { + LOG("HAIntranuke2025", pERROR) << "** Couldn't select a fate"; + p->SetStatus(kIStStableFinalState); + ev->AddParticle(*p); + return; + } + LOG("HAIntranuke2025", pNOTICE) + << "Selected "<< p->Name() << " fate: "<< INukeHadroFates::AsString(fate); + + // try to generate kinematics - repeat till is done (should seldom need >2) + fNumIterations = 0; + this->SimulateHadronicFinalStateKinematics(ev,p); +} +//___________________________________________________________________________ +void HAIntranuke2025::SimulateHadronicFinalStateKinematics( + GHepRecord* ev, GHepParticle* p) const +{ + // get stored fate + INukeFateHA_t fate = (INukeFateHA_t) + ev->Particle(p->FirstMother())->RescatterCode(); + + LOG("HAIntranuke2025", pINFO) + << "Generating kinematics for " << p->Name() + << " fate: "<< INukeHadroFates::AsString(fate); + + // try to generate kinematics for the selected fate + + try + { + fNumIterations++; + /* if (fate == kIHAFtElas) + { + this->ElasHA(ev,p,fate); + } + else */ + if (fate == kIHAFtInelas || fate == kIHAFtCEx) + { + this->InelasticHA(ev,p,fate); + } + else if (fate == kIHAFtAbs || fate == kIHAFtPiProd) + { + this->Inelastic(ev,p,fate); + } + else if (fate == kIHAFtCmp) //(suarez edit, 17 July, 2017: cmp) + { + LOG("HAIntranuke2025", pWARN) << "Running PreEquilibrium for kIHAFtCmp"; + utils::intranuke2025::PreEquilibrium(ev,p,fRemnA,fRemnZ,fRemnP4,fDoFermi,fFermiFac,fNuclmodel,fNucRmvE,kIMdHA); //should be kiMdHA or HN? + } + } + catch(exceptions::INukeException exception) + { + LOG("HAIntranuke2025", pNOTICE) + << exception; + if(fNumIterations <= 100) { + LOG("HAIntranuke2025", pNOTICE) + << "Failed attempt to generate kinematics for " + << p->Name() << " fate: " << INukeHadroFates::AsString(fate) + << " - After " << fNumIterations << " tries, still retrying..."; + this->SimulateHadronicFinalStateKinematics(ev,p); + } else { + LOG("HAIntranuke2025", pNOTICE) + << "Failed attempt to generate kinematics for " + << p->Name() << " fate: " << INukeHadroFates::AsString(fate) + << " after " << fNumIterations-1 + << " attempts. Trying a new fate..."; + this->SimulateHadronicFinalState(ev,p); + } + } +} +//___________________________________________________________________________ +INukeFateHA_t HAIntranuke2025::HadronFateHA(const GHepParticle * p) const +{ +// Select a hadron fate in HA mode +// + RandomGen * rnd = RandomGen::Instance(); + + // get pdgc code & kinetic energy in MeV + int pdgc = p->Pdg(); + double ke = p->KinE() / units::MeV; + + //bool isPion = (pdgc == kPdgPiP or pdgc == kPdgPi0 or pdgc == kPdgPiM); + //if (isPion and fUseOset and ke < 350.0) return this->HadronFateOset(); + + LOG("HAIntranuke2025", pINFO) + << "Selecting hA fate for " << p->Name() << " with KE = " << ke << " MeV"; + + // try to generate a hadron fate + unsigned int iter = 0; + while(iter++ < kRjMaxIterations) { + + // handle pions + // + if (pdgc==kPdgPiP || pdgc==kPdgPiM || pdgc==kPdgPi0) { + + double frac_cex = fHadroData2025->FracADep(pdgc, kIHAFtCEx, ke, nuclA); + // double frac_elas = fHadroData2025->FracADep(pdgc, kIHAFtElas, ke, nuclA); + double frac_inel = fHadroData2025->FracADep(pdgc, kIHAFtInelas, ke, nuclA); + double frac_abs = fHadroData2025->FracADep(pdgc, kIHAFtAbs, ke, nuclA); + double frac_piprod = fHadroData2025->FracADep(pdgc, kIHAFtPiProd, ke, nuclA); + LOG("HAIntranuke2025", pDEBUG) + << "\n frac{" << INukeHadroFates::AsString(kIHAFtCEx) << "} = " << frac_cex + // << "\n frac{" << INukeHadroFates::AsString(kIHAFtElas) << "} = " << frac_elas + << "\n frac{" << INukeHadroFates::AsString(kIHAFtInelas) << "} = " << frac_inel + << "\n frac{" << INukeHadroFates::AsString(kIHAFtAbs) << "} = " << frac_abs + << "\n frac{" << INukeHadroFates::AsString(kIHAFtPiProd) << "} = " << frac_piprod; + + // apply external tweaks to fractions + frac_cex *= fPionFracCExScale; + frac_inel *= fPionFracInelScale; + if (pdgc==kPdgPiP || pdgc==kPdgPiM) frac_abs *= fChPionFracAbsScale; + if (pdgc==kPdgPi0) frac_abs *= fNeutralPionFracAbsScale; + frac_piprod *= fPionFracPiProdScale; + + + // Flag to enable or disable π0/π+ ratio corrections + bool apply_pi0_ratio_correction = true; + + if (apply_pi0_ratio_correction && pdgc == kPdgPi0) { + + // Cap the kinetic energy at 1000 MeV for the correction calculation + double ke_ratio = (ke > 1000.0) ? 1000.0 : ke; + + // Define correction scale factors as a function of kinetic energy (in MeV) + double ratio_cex = 0.0008702 * ke_ratio + 1.9047; + double ratio_abs = 0.0003291 * ke_ratio + 0.82617; + double ratio_inel = -0.0003209 * ke_ratio + 0.837764; + double ratio_piprod = 0.0004402 * ke_ratio + 0.47418; + + // Apply the corrections only if kinetic energy is below 1000 MeV + + frac_cex *= ratio_cex; + frac_abs *= ratio_abs; + frac_inel *= ratio_inel; + + // Apply piprod correction only if KE is above 400 MeV + if (ke > 400.0) { + frac_piprod *= ratio_piprod; + } + + } + + + + + double frac_rescale = 1./(frac_cex + frac_inel + frac_abs + frac_piprod); + + frac_cex *= frac_rescale; + frac_inel *= frac_rescale; + frac_abs *= frac_rescale; + frac_piprod *= frac_rescale; + + + // compute total fraction (can be <1 if fates have been switched off) + double tf = frac_cex + + // frac_elas + + frac_inel + + frac_abs + + frac_piprod; + + double r = tf * rnd->RndFsi().Rndm(); +#ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__ + LOG("HAIntranuke2025", pDEBUG) << "r = " << r << " (max = " << tf << ")"; +#endif + double cf=0; // current fraction + if(r < (cf += frac_cex )) return kIHAFtCEx; // cex + // if(r < (cf += frac_elas )) return kIHAFtElas; // elas + if(r < (cf += frac_inel )) return kIHAFtInelas; // inelas + if(r < (cf += frac_abs )) return kIHAFtAbs; // abs + if(r < (cf += frac_piprod )) return kIHAFtPiProd; // pi prod + + LOG("HAIntranuke2025", pWARN) + << "No selection after going through all fates! " + << "Total fraction = " << tf << " (r = " << r << ")"; + } + + // handle nucleons + else if (pdgc==kPdgProton || pdgc==kPdgNeutron) { + double frac_cex = fHadroData2025->FracAIndep(pdgc, kIHAFtCEx, ke); + //double frac_elas = fHadroData2025->FracAIndep(pdgc, kIHAFtElas, ke); + double frac_inel = fHadroData2025->FracAIndep(pdgc, kIHAFtInelas, ke); + double frac_abs = fHadroData2025->FracAIndep(pdgc, kIHAFtAbs, ke); + double frac_pipro = fHadroData2025->FracAIndep(pdgc, kIHAFtPiProd, ke); + double frac_cmp = fHadroData2025->FracAIndep(pdgc, kIHAFtCmp , ke); + + LOG("HAIntranuke2025", pINFO) + << "\n frac{" << INukeHadroFates::AsString(kIHAFtCEx) << "} = " << frac_cex + // << "\n frac{" << INukeHadroFates::AsString(kIHAFtElas) << "} = " << frac_elas + << "\n frac{" << INukeHadroFates::AsString(kIHAFtInelas) << "} = " << frac_inel + << "\n frac{" << INukeHadroFates::AsString(kIHAFtAbs) << "} = " << frac_abs + << "\n frac{" << INukeHadroFates::AsString(kIHAFtPiProd) << "} = " << frac_pipro + << "\n frac{" << INukeHadroFates::AsString(kIHAFtCmp) << "} = " << frac_cmp; //suarez edit, cmp + + // apply external tweaks to fractions + frac_cex *= fNucleonFracCExScale; + frac_inel *= fNucleonFracInelScale; + frac_abs *= fNucleonFracAbsScale; + frac_pipro *= fNucleonFracPiProdScale; + + double frac_rescale = 1./(frac_cex + frac_inel + frac_abs + frac_pipro); + + frac_cex *= frac_rescale; + frac_inel *= frac_rescale; + frac_abs *= frac_rescale; + frac_pipro *= frac_rescale; + + // compute total fraction (can be <1 if fates have been switched off) + double tf = frac_cex + + //frac_elas + + frac_inel + + frac_abs + + frac_pipro + + frac_cmp; //suarez edit, cmp + + double r = tf * rnd->RndFsi().Rndm(); +#ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__ + LOG("HAIntranuke2025", pDEBUG) << "r = " << r << " (max = " << tf << ")"; +#endif + double cf=0; // current fraction + if(r < (cf += frac_cex )) return kIHAFtCEx; // cex + //if(r < (cf += frac_elas )) return kIHAFtElas; // elas + if(r < (cf += frac_inel )) return kIHAFtInelas; // inelas + if(r < (cf += frac_abs )) return kIHAFtAbs; // abs + if(r < (cf += frac_pipro )) return kIHAFtPiProd; // pi prod + if(r < (cf += frac_cmp )) return kIHAFtCmp; //suarez edit, cmp + + LOG("HAIntranuke2025", pWARN) + << "No selection after going through all fates! " + << "Total fraction = " << tf << " (r = " << r << ")"; + } + // handle kaons + else if (pdgc==kPdgKP || pdgc==kPdgKM) { + double frac_inel = fHadroData2025->FracAIndep(pdgc, kIHAFtInelas, ke); + double frac_abs = fHadroData2025->FracAIndep(pdgc, kIHAFtAbs, ke); + + LOG("HAIntranuke2025", pDEBUG) + << "\n frac{" << INukeHadroFates::AsString(kIHAFtInelas) << "} = " << frac_inel + << "\n frac{" << INukeHadroFates::AsString(kIHAFtAbs) << "} = " << frac_abs; + // compute total fraction (can be <1 if fates have been switched off) + double tf = frac_inel + + frac_abs; + double r = tf * rnd->RndFsi().Rndm(); +#ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__ + LOG("HAIntranuke2025", pDEBUG) << "r = " << r << " (max = " << tf << ")"; +#endif + double cf=0; // current fraction + if(r < (cf += frac_inel )) return kIHAFtInelas; // inelas + if(r < (cf += frac_abs )) return kIHAFtAbs; // abs + } + }//iterations + + return kIHAFtUndefined; +} +//___________________________________________________________________________ +double HAIntranuke2025::PiBounce(void) const +{ +// [adapted from neugen3 intranuke_bounce.F] +// [is a fortran stub / difficult to understand - needs to be improved] +// +// Generates theta in radians for elastic pion-nucleus scattering/ +// Lookup table is based on Fig 17 of Freedman, Miller and Henley, Nucl.Phys. +// A389, 457 (1982) +// + const int nprob = 25; + double dintor = 0.0174533; + double denom = 47979.453; + double rprob[nprob] = { + 5000., 4200., 3000., 2600., 2100., 1800., 1200., 750., 500., 230., 120., + 35., 9., 3., 11., 18., 29., 27., 20., 14., 10., 6., 2., 0.14, 0.19 }; + + double angles[nprob]; + for(int i=0; iRndFsi().Rndm(); + + double xsum = 0.; + double theta = 0.; + double binl = 0.; + double binh = 0.; + int tj = 0; + for(int i=0; i<60; i++) { + theta = i+0.5; + for(int j=0; j < nprob-1; j++) { + binl = angles[j]; + binh = angles[j+1]; + tj=j; + if(binl<=theta && binh>=theta) break; + tj=0; + }//j + int itj = tj; + double tfract = (theta-binl)/2.5; + double delp = rprob[itj+1] - rprob[itj]; + xsum += (rprob[itj] + tfract*delp)/denom; + if(xsum>r) break; + theta = 0.; + }//i + + theta *= dintor; + + LOG("HAIntranuke2025", pNOTICE) + << "Generated pi+A elastic scattering angle = " << theta << " radians"; + + return theta; +} +//___________________________________________________________________________ +double HAIntranuke2025::PnBounce(void) const +{ +// [adapted from neugen3 intranuke_pnbounce.F] +// [is a fortran stub / difficult to understand - needs to be improved] +// +// Generates theta in radians for elastic nucleon-nucleus scattering. +// Use 800 MeV p+O16 as template in same (highly simplified) spirit as pi+A +// from table in Adams et al., PRL 1979. Guess value at 0-2 deg based on Ni +// data. +// + const int nprob = 20; + double dintor = 0.0174533; + double denom = 11967.0; + double rprob[nprob] = { + 2400., 2350., 2200., 2000., 1728., 1261., 713., 312., 106., 35., + 6., 5., 10., 12., 11., 9., 6., 1., 1., 1. }; + + double angles[nprob]; + for(int i=0; iRndFsi().Rndm(); + + double xsum = 0.; + double theta = 0.; + double binl = 0.; + double binh = 0.; + int tj = 0; + for(int i=0; i< nprob; i++) { + theta = i+0.5; + for(int j=0; j < nprob-1; j++) { + binl = angles[j]; + binh = angles[j+1]; + tj=j; + if(binl<=theta && binh>=theta) break; + tj=0; + }//j + int itj = tj; + double tfract = (theta-binl)/2.5; + double delp = rprob[itj+1] - rprob[itj]; + xsum += (rprob[itj] + tfract*delp)/denom; + if(xsum>r) break; + theta = 0.; + }//i + + theta *= dintor; + + LOG("HAIntranuke2025", pNOTICE) + << "Generated N+A elastic scattering angle = " << theta << " radians"; + + return theta; +} +//___________________________________________________________________________ +void HAIntranuke2025::ElasHA(GHepRecord* ev, GHepParticle* p, + INukeFateHA_t fate ) const +{ + // scatters particle within nucleus, copy of hN code meant to run only once + // in hA mode + + LOG("HAIntranuke2025", pDEBUG) + << "ElasHA() is invoked for a : " << p->Name() + << " whose fate is : " << INukeHadroFates::AsString(fate); + + /* if(fate!=kIHAFtElas) + { + LOG("HAIntranuke2025", pWARN) + << "ElasHA() cannot handle fate: " << INukeHadroFates::AsString(fate); + return; + } */ + + // check remnants + if(fRemnA<0 || fRemnZ<0) // best to stop it here and not try again. + { + LOG("HAIntranuke2025", pWARN) << "Invalid Nucleus! : (A,Z) = ("<SetStatus(kIStStableFinalState); + ev->AddParticle(*p); + return; + } + + // vars for incoming particle, target, and scattered pdg codes + int pcode = p->Pdg(); + double Mp = p->Mass(); + double Mt = 0.; + if (ev->TargetNucleus()->A()==fRemnA) + { Mt = PDGLibrary::Instance()->Find(ev->TargetNucleus()->Pdg())->Mass(); } + else + { + Mt = fRemnP4.M(); + } + TLorentzVector t4PpL = *p->P4(); + TLorentzVector t4PtL = fRemnP4; + double C3CM = 0.0; + + // calculate scattering angle + if(pcode==kPdgNeutron||pcode==kPdgProton) C3CM = TMath::Cos(this->PnBounce()); + else C3CM = TMath::Cos(this->PiBounce()); + + // calculate final 4 momentum of probe + TLorentzVector t4P3L, t4P4L; + + if (!utils::intranuke2025::TwoBodyKinematics(Mp,Mt,t4PpL,t4PtL,t4P3L,t4P4L,C3CM,fRemnP4)) + { + LOG("HAIntranuke2025", pNOTICE) << "ElasHA() failed"; + exceptions::INukeException exception; + exception.SetReason("TwoBodyKinematics failed in ElasHA"); + throw exception; + } + + // Update probe particle + p->SetMomentum(t4P3L); + p->SetStatus(kIStStableFinalState); + + // Update Remnant nucleus + fRemnP4 = t4P4L; + LOG("HAIntranuke2025",pINFO) + << "C3cm = " << C3CM; + LOG("HAIntranuke2025",pINFO) + << "|p3| = " << t4P3L.Vect().Mag() << ", E3 = " << t4P3L.E() << ",Mp = " << Mp; + LOG("HAIntranuke2025",pINFO) + << "|p4| = " << fRemnP4.Vect().Mag() << ", E4 = " << fRemnP4.E() << ",Mt = " << Mt; + + ev->AddParticle(*p); + +} +//___________________________________________________________________________ +void HAIntranuke2025::InelasticHA( + GHepRecord* ev, GHepParticle* p, INukeFateHA_t fate) const +{ + // charge exch and inelastic - scatters particle within nucleus, hA version + // each are treated as quasielastic, particle scatters off single nucleon + +#ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__ + LOG("HAIntranuke2025", pDEBUG) + << "InelasticHA() is invoked for a : " << p->Name() + << " whose fate is : " << INukeHadroFates::AsString(fate); +#endif + if(ev->Probe() ) { + LOG("HAIntranuke2025", pINFO) << " probe KE = " << ev->Probe()->KinE(); + } + if(fate!=kIHAFtCEx && fate!=kIHAFtInelas) + { + LOG("HAIntranuke2025", pWARN) + << "InelasticHA() cannot handle fate: " << INukeHadroFates::AsString(fate); + return; + } + + // Random number generator + RandomGen * rnd = RandomGen::Instance(); + + // vars for incoming particle, target, and scattered pdg codes + int pcode = p->Pdg(); + int tcode, scode, s2code; + double ppcnt = (double) fRemnZ / (double) fRemnA; // % of protons + + // Select a hadron fate in HN mode + INukeFateHN_t h_fate; + if (fate == kIHAFtCEx) h_fate = kIHNFtCEx; + else h_fate = kIHNFtElas; + + // Select a target randomly, weighted to # + // -- Unless, of course, the fate is CEx, + // -- in which case the target may be deterministic + // Also assign scattered particle code + if(fate==kIHAFtCEx) + { + if(pcode==kPdgPiP) {tcode = kPdgNeutron; scode = kPdgPi0; s2code = kPdgProton;} + else if(pcode==kPdgPiM) {tcode = kPdgProton; scode = kPdgPi0; s2code = kPdgNeutron;} + else if(pcode==kPdgPi0) + { + // for pi0 + tcode = (rnd->RndFsi().Rndm()<=ppcnt)?(kPdgProton) :(kPdgNeutron); + scode = (tcode == kPdgProton) ?(kPdgPiP) :(kPdgPiM); + s2code = (tcode == kPdgProton) ?(kPdgNeutron):(kPdgProton); + } + else if(pcode==kPdgProton) {tcode = kPdgNeutron; scode = kPdgNeutron; s2code = kPdgProton;} + else if(pcode==kPdgNeutron){tcode = kPdgProton; scode = kPdgProton; s2code = kPdgNeutron;} + else + { LOG("HAIntranuke2025", pWARN) << "InelasticHA() cannot handle fate: " + << INukeHadroFates::AsString(fate) + << " for particle " << p->Name(); + return; + } + } + else + { + tcode = (rnd->RndFsi().Rndm()<=ppcnt)?(kPdgProton):(kPdgNeutron); + // if(pcode == kPdgKP || pcode == kPdgKM) tcode = kPdgProton; + scode = pcode; + s2code = tcode; + } + + // check remnants + if ( fRemnA < 1 ) //we've blown nucleus apart, no need to retry anything - exit + { + LOG("HAIntranuke2025",pNOTICE) << "InelasticHA() stops : not enough nucleons"; + p->SetStatus(kIStStableFinalState); + ev->AddParticle(*p); + return; + } + else if ( fRemnZ + (((pcode==kPdgProton)||(pcode==kPdgPiP))?1:0) - (pcode==kPdgPiM?1:0) + < ((( scode==kPdgProton)||( scode==kPdgPiP)) ?1:0) - (scode ==kPdgPiM ?1:0) + + (((s2code==kPdgProton)||(s2code==kPdgPiP)) ?1:0) - (s2code==kPdgPiM ?1:0) ) + { + LOG("HAIntranuke2025",pWARN) << "InelasticHA() failed : too few protons in nucleus"; + p->SetStatus(kIStStableFinalState); + ev->AddParticle(*p); + return; // another extreme case, best strategy is to exit and go to next event + } + + GHepParticle t(*p); + t.SetPdgCode(tcode); + + // set up fermi target + Target target(ev->TargetNucleus()->Pdg()); + double tM = t.Mass(); + + // handle fermi momentum + if(fDoFermi) + { + target.SetHitNucPdg(tcode); + fNuclmodel->GenerateNucleon(target); + TVector3 tP3 = fFermiFac * fNuclmodel->Momentum3(); + double tE = TMath::Sqrt(tP3.Mag2()+ tM*tM); + t.SetMomentum(TLorentzVector(tP3,tE)); + } + else + { + t.SetMomentum(0,0,0,tM); + } + + GHepParticle * cl = new GHepParticle(*p); // clone particle, to run IntBounce at proper energy + // calculate energy and momentum using invariant mass + double pM = p->Mass(); + double E_p = ((*p->P4() + *t.P4()).Mag2() - tM*tM - pM*pM)/(2.0*tM); + double P_p = TMath::Sqrt(E_p*E_p - pM*pM); + cl->SetMomentum(TLorentzVector(P_p,0,0,E_p)); + // momentum doesn't have to be in right direction, only magnitude + double C3CM = fHadroData2025->IntBounce(cl,tcode,scode,h_fate); + delete cl; + if (C3CM<-1.) // hope this doesn't occur too often - unphysical but we just pass it on + { + LOG("HAIntranuke2025", pWARN) << "unphysical angle chosen in InelasicHA - put particle outside nucleus"; + p->SetStatus(kIStStableFinalState); + ev->AddParticle(*p); + return; + } + double KE1L = p->KinE(); + double KE2L = t.KinE(); + LOG("HAIntranuke2025",pINFO) + << " KE1L = " << KE1L << " " << KE1L << " KE2L = " << KE2L; + GHepParticle cl1(*p); + GHepParticle cl2(t); + bool success = utils::intranuke2025::TwoBodyCollision(ev,pcode,tcode,scode,s2code,C3CM, + &cl1,&cl2,fRemnA,fRemnZ,fRemnP4,kIMdHA); + if(success) + { + double P3L = TMath::Sqrt(cl1.Px()*cl1.Px() + cl1.Py()*cl1.Py() + cl1.Pz()*cl1.Pz()); + double P4L = TMath::Sqrt(cl2.Px()*cl2.Px() + cl2.Py()*cl2.Py() + cl2.Pz()*cl2.Pz()); + double E3L = cl1.KinE(); + double E4L = cl2.KinE(); + LOG ("HAIntranuke2025",pINFO) << "Successful quasielastic scattering or charge exchange"; + LOG("HAIntranuke",pINFO) + << "C3CM = " << C3CM << "\n P3L, E3L = " + << P3L << " " << E3L << " P4L, E4L = "<< P4L << " " << E4L ; + if(ev->Probe() ) { LOG("HAIntranuke",pINFO) + << "P4L = " << P4L << " ;E4L= " << E4L << "\n probe KE = " << ev->Probe()->KinE() << "\n"; + LOG("HAIntranuke2025", pINFO) << "Nucleus : (A,Z) = ("<Find(ipdgc); + if(!remn) + { + LOG("HAIntranuke2025", pINFO) + << "NO Particle with [A = " << fRemnA << ", Z = " << fRemnZ + << ", pdgc = " << ipdgc << "] in PDGLibrary!"; + } + else + { + MassRem = remn->Mass(); + LOG("HAIntranuke2025", pINFO) + << "Particle with [A = " << fRemnA << ", Z = " << fRemnZ + << ", pdgc = " << ipdgc << "] in PDGLibrary!"; + } + double ERemn = fRemnP4.E(); + double PRemn = TMath::Sqrt(fRemnP4.Px()*fRemnP4.Px() + fRemnP4.Py()*fRemnP4.Py() + fRemnP4.Pz()*fRemnP4.Pz()); + double MRemn = TMath::Sqrt(ERemn*ERemn - PRemn*PRemn); + LOG("HAIntranuke2025",pINFO) << "PRemn = " << PRemn << " ;ERemn= " << ERemn; + LOG("HAIntranuke2025",pINFO) << "MRemn= " << MRemn << " ;true Mass= " << MassRem << " ; excitation energy= " << (MRemn-MassRem)*1000. << " MeV"; + } + if (ev->Probe() && (E3L>ev->Probe()->KinE())) //assuming E3 is most important, definitely for pion. what about pp? + { + // LOG("HAIntranuke",pINFO) + // << "E3Lagain = " << E3L << " ;E4L= " << E4L << "\n probe KE = " << ev->Probe()->KinE() << "\n"; + exceptions::INukeException exception; + exception.SetReason("TwoBodyCollison gives KE> probe KE in hA simulation"); + throw exception; + } + ev->AddParticle(cl1); + ev->AddParticle(cl2); + + LOG("HAIntranuke2025", pDEBUG) << "Nucleus : (A,Z) = ("< Reaction approximated by exponential decay in p+n (sum) space, + // gaussian in p-n (difference) space + // -fit to hN simulations p C, Fe, Pb at 200, 800 MeV + // -get n from isospin, np-nn smaller by 2 + // Pions -> Reaction approximated with a modified gaussian in p+n space, + // normal gaussian in p-n space + // -based on fits to multiplicity distributions of hN model + // for pi+ C, Fe, Pb at 250, 500 MeV + // -fit sum and diff of nn, np to Gaussian + // -get pi0 from isospin, np-nn smaller by 2 + // -get pi- from isospin, np-nn smaller by 4 + // -add 2-body absorption to better match McKeown data + // Kaons -> no guidance, use same code as pions. + // + // Normally distributed random number generated using Box-Muller transformation + // + // Pion production reactions rescatter pions in nucleus, otherwise unchanged from + // older versions of GENIE + // + +#ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__ + LOG("HAIntranuke2025", pDEBUG) + << "Inelastic() is invoked for a : " << p->Name() + << " whose fate is : " << INukeHadroFates::AsString(fate); +#endif + + bool allow_dup = true; + PDGCodeList list(allow_dup); // list of final state particles + + // only absorption/pipro fates allowed + if (fate == kIHAFtPiProd) { + + GHepParticle s1(*p); + GHepParticle s2(*p); + GHepParticle s3(*p); + + bool success = utils::intranuke2025::PionProduction( + ev,p,&s1,&s2,&s3,fRemnA,fRemnZ,fRemnP4, fDoFermi,fFermiFac,fFermiMomentum,fNuclmodel); + + if (success){ + LOG ("HAIntranuke2025",pINFO) << " successful pion production fate"; + // set status of particles and conserve charge/baryon number + s1.SetStatus(kIStStableFinalState); //should be redundant + // if (pdg::IsPion(s2->Pdg())) s2->SetStatus(kIStHadronInTheNucleus); + s2.SetStatus(kIStStableFinalState); + // if (pdg::IsPion(s3->Pdg())) s3->SetStatus(kIStHadronInTheNucleus); + s3.SetStatus(kIStStableFinalState); + + ev->AddParticle(s1); + ev->AddParticle(s2); + ev->AddParticle(s3); + + return; + } + else { + LOG("HAIntranuke2025", pNOTICE) << "Error: could not create pion production final state"; + exceptions::INukeException exception; + exception.SetReason("PionProduction kinematics failed - retry kinematics"); + throw exception; + } + } + + else if (fate==kIHAFtAbs) +// tuned for pions - mixture of 2-body and many-body +// use same for kaons as there is no guidance + { + // Instances for reference + PDGLibrary * pLib = PDGLibrary::Instance(); + RandomGen * rnd = RandomGen::Instance(); + + double ke = p->KinE() / units::MeV; + int pdgc = p->Pdg(); + + if (fRemnA<2) + { + LOG("HAIntranuke2025", pNOTICE) << "stop propagation - could not create absorption final state: too few particles"; + p->SetStatus(kIStStableFinalState); + ev->AddParticle(*p); + return; + } + if (fRemnZ<1 && (pdgc==kPdgPiM || pdgc==kPdgKM)) + { + LOG("HAIntranuke2025", pNOTICE) << "stop propagation - could not create absorption final state: Pi- or K- cannot be absorbed by only neutrons"; + p->SetStatus(kIStStableFinalState); + ev->AddParticle(*p); + return; + } + if (fRemnA-fRemnZ<1 && (pdgc==kPdgPiP || pdgc==kPdgKP)) + { + LOG("HAIntranuke2025", pINFO) << "stop propagation - could not create absorption final state: Pi+ or K+ cannot be absorbed by only protons"; + p->SetStatus(kIStStableFinalState); + ev->AddParticle(*p); + return; + } + + // for now, empirical split between multi-nucleon absorption and pi d -> N N + // + // added 03/21/11 - Aaron Meyer + // + if (pdg::IsPion(pdgc) && rnd->RndFsi().Rndm()<1.14*(.903-0.00189*fRemnA)*(1.35-0.00467*ke)) + { // pi d -> N N, probability determined empirically with McKeown data + + INukeFateHN_t fate_hN=kIHNFtAbs; + int t1code,t2code,scode,s2code; + double ppcnt = (double) fRemnZ / (double) fRemnA; // % of protons + + // choose target nucleon + // -- fates weighted by values from Engel, Mosel... + if (pdgc==kPdgPiP) { + double Prob_pipd_pp=2.*ppcnt*(1.-ppcnt); + double Prob_pipnn_pn=.083*(1.-ppcnt)*(1.-ppcnt); + if (rnd->RndFsi().Rndm()*(Prob_pipd_pp+Prob_pipnn_pn)RndFsi().Rndm()*(Prob_pimd_nn+Prob_pimpp_pn)RndFsi().Rndm(); + if (random_number*(Prob_pi0d_pn+Prob_pi0pp_pp+Prob_pi0nn_nn)Find(pdgc) ->Mass(); + double M2_1 = pLib->Find(t1code)->Mass(); + double M2_2 = pLib->Find(t2code)->Mass(); + //double M2 = M2_1 + M2_2; + double M3 = pLib->Find(scode) ->Mass(); + double M4 = pLib->Find(s2code)->Mass(); + + // handle fermi momentum + double E2_1L, E2_2L; + TVector3 tP2_1L, tP2_2L; + //TLorentzVector dNucl_P4; + Target target(ev->TargetNucleus()->Pdg()); + if(fDoFermi) + { + target.SetHitNucPdg(t1code); + fNuclmodel->GenerateNucleon(target); + //LOG("HAIntranuke2025", pNOTICE) << "Nuclmodel= " << fNuclmodel->ModelType(target) ; + tP2_1L=fFermiFac * fNuclmodel->Momentum3(); + E2_1L = TMath::Sqrt(tP2_1L.Mag2() + M2_1*M2_1); + + target.SetHitNucPdg(t2code); + fNuclmodel->GenerateNucleon(target); + tP2_2L=fFermiFac * fNuclmodel->Momentum3(); + E2_2L = TMath::Sqrt(tP2_2L.Mag2() + M2_2*M2_2); + + //dNucl_P4=TLorentzVector(tP2_1L+tP2_2L,E2_1L+E2_2L); + } + else + { + tP2_1L.SetXYZ(0.0, 0.0, 0.0); + E2_1L = M2_1; + + tP2_2L.SetXYZ(0.0, 0.0, 0.0); + E2_2L = M2_2; + } + TLorentzVector dNucl_P4=TLorentzVector(tP2_1L+tP2_2L,E2_1L+E2_2L); + + double E2L = E2_1L + E2_2L; + + // adjust p to reflect scattering + // get random scattering angle + double C3CM = fHadroData2025->IntBounce(p,t1code,scode,fate_hN); + if (C3CM<-1.) + { + LOG("HAIntranuke2025", pWARN) << "Inelastic() failed: IntBounce returned bad angle - try again"; + exceptions::INukeException exception; + exception.SetReason("unphysical angle for hN scattering"); + throw exception; + return; + } + + TLorentzVector t4P1L,t4P2L,t4P3L,t4P4L; + t4P1L=*p->P4(); + t4P2L=TLorentzVector(TVector3(tP2_1L+tP2_2L),E2L); + double bindE=0.050; // set to fit McKeown data, updated aug 18 + //double bindE=0.0; + if (utils::intranuke2025::TwoBodyKinematics(M3,M4,t4P1L,t4P2L,t4P3L,t4P4L,C3CM,fRemnP4,bindE)) + { + //construct remnant nucleus and its mass + + if (pdgc==kPdgPiP || pdgc==kPdgKP) fRemnZ++; + if (pdgc==kPdgPiM || pdgc==kPdgKM) fRemnZ--; + if (t1code==kPdgProton) fRemnZ--; + if (t2code==kPdgProton) fRemnZ--; + fRemnA-=2; + + fRemnP4-=dNucl_P4; + + TParticlePDG * remn = 0; + double MassRem = 0.; + int ipdgc = pdg::IonPdgCode(fRemnA, fRemnZ); + remn = PDGLibrary::Instance()->Find(ipdgc); + if(!remn) + { + LOG("HAIntranuke2025", pINFO) + << "NO Particle with [A = " << fRemnA << ", Z = " << fRemnZ + << ", pdgc = " << ipdgc << "] in PDGLibrary!"; + } + else + { + MassRem = remn->Mass(); + LOG("HAIntranuke2025", pINFO) + << "Particle with [A = " << fRemnA << ", Z = " << fRemnZ + << ", pdgc = " << ipdgc << "] in PDGLibrary!"; + } + double ERemn = fRemnP4.E(); + double PRemn = TMath::Sqrt(fRemnP4.Px()*fRemnP4.Px() + fRemnP4.Py()*fRemnP4.Py() + fRemnP4.Pz()*fRemnP4.Pz()); + double MRemn = TMath::Sqrt(ERemn*ERemn - PRemn*PRemn); + LOG("HAIntranuke2025",pINFO) << "PRemn = " << PRemn << " ;ERemn= " << ERemn; + LOG("HAIntranuke2025",pINFO) << "expt MRemn= " << MRemn << " ;true Mass= " << MassRem << " ; excitation energy (>0 good)= " << (MRemn-MassRem)*1000. << " MeV"; + + // create t particles w/ appropriate momenta, code, and status + // Set target's mom to be the mom of the hadron that was cloned + GHepParticle* t1 = new GHepParticle(*p); + GHepParticle* t2 = new GHepParticle(*p); + t1->SetFirstMother(p->FirstMother()); + t1->SetLastMother(p->LastMother()); + t2->SetFirstMother(p->FirstMother()); + t2->SetLastMother(p->LastMother()); + + // adjust p to reflect scattering + t1->SetPdgCode(scode); + t1->SetMomentum(t4P3L); + + t2->SetPdgCode(s2code); + t2->SetMomentum(t4P4L); + + t1->SetStatus(kIStStableFinalState); + t2->SetStatus(kIStStableFinalState); + + ev->AddParticle(*t1); + ev->AddParticle(*t2); + delete t1; + delete t2; + + return; + } + else + { + LOG("HAIntranuke2025", pNOTICE) << "Inelastic in hA failed calling TwoBodyKineamtics"; + exceptions::INukeException exception; + exception.SetReason("Pion absorption kinematics through TwoBodyKinematics failed"); + throw exception; + + } + + } // end pi d -> N N + else // multi-nucleon + { + + // declare some parameters for double gaussian and determine values chosen + // parameters for proton and pi+, others come from isospin transformations + + double ns0=0; // mean - sum of nucleons + double nd0=0; // mean - difference of nucleons + double Sig_ns=0; // std dev - sum + double Sig_nd=0; // std dev - diff + double gam_ns=0; // exponential decay rate (for nucleons) + + if ( pdg::IsNeutronOrProton (pdgc) ) // nucleon probe + { + // antisymmetric about Z=N + if (fRemnA-fRemnZ > fRemnZ) + nd0 = 135.227 * TMath::Exp(-7.124*(fRemnA-fRemnZ)/double(fRemnA)) - 2.762; + else + nd0 = -135.227 * TMath::Exp(-7.124* fRemnZ /double(fRemnA)) + 4.914; + + Sig_nd = 2.034 + fRemnA * 0.007846; + + double c1 = 0.041 + ke * 0.0001525; + double c2 = -0.003444 - ke * 0.00002324; +//change last factor from 30 to 15 so that gam_ns always larger than 0 +//add check to be certain + double c3 = 0.064 - ke * 0.000015; + gam_ns = c1 * TMath::Exp(c2*fRemnA) + c3; + if(gam_ns<0.002) gam_ns = 0.002; + //gam_ns = 10.; + LOG("HAIntranuke2025", pINFO) << "nucleon absorption"; + LOG("HAIntranuke2025", pINFO) << "--> mean diff distr = " << nd0 << ", stand dev = " << Sig_nd; + // LOG("HAIntranuke2025", pINFO) << "--> mean sum distr = " << ns0 << ", Stand dev = " << Sig_ns; + LOG("HAIntranuke2025", pINFO) << "--> gam_ns = " << gam_ns; + } + else if ( pdgc==kPdgPiP || pdgc==kPdgPi0 || pdgc==kPdgPiM) //pion probe + { + ns0 = .0001*(1.+ke/250.) * (fRemnA-10)*(fRemnA-10) + 3.5; + nd0 = (1.+ke/250.) - ((fRemnA/200.)*(1. + 2.*ke/250.)); + Sig_ns = (10. + 4. * ke/250.)*TMath::Power(fRemnA/250.,0.9); //(1. - TMath::Exp(-0.02*fRemnA)); + Sig_nd = 4*(1 - TMath::Exp(-0.03*ke)); + LOG("HAIntranuke2025", pINFO) << "pion absorption"; + LOG("HAIntranuke2025", pINFO) << "--> mean diff distr = " << nd0 << ", stand dev = " << Sig_nd; + LOG("HAIntranuke2025", pINFO) << "--> mean sum distr = " << ns0 << ", Stand dev = " << Sig_ns; + } + else if (pdgc==kPdgKP || pdgc==kPdgKM) // kaon probe + { + ns0 = (rnd->RndFsi().Rndm()>0.5?3:2); + nd0 = 1.; + Sig_ns = 0.1; + Sig_nd = 0.1; + LOG("HAIntranuke2025", pINFO) << "kaon absorption - set ns, nd later"; + // LOG("HAIntranuke2025", pINFO) << "--> mean diff distr = " << nd0 << ", stand dev = " << Sig_nd; + // LOG("HAIntranuke2025", pINFO) << "--> mean sum distr = " << ns0 << ", Stand dev = " << Sig_ns; + } + else + { + LOG("HAIntranuke2025", pWARN) << "Inelastic() cannot handle absorption reaction for " << p->Name(); + } + + // account for different isospin + if (pdgc==kPdgPi0 || pdgc==kPdgNeutron) nd0-=2.; + if (pdgc==kPdgPiM) nd0-=4.; + + int iter=0; // counter + int np=0,nn=0; // # of p, # of n + bool not_done=true; + double u1 = 0, u2 = 0; + + while (not_done) + { + // infinite loop check + if (iter>=100) { + LOG("HAIntranuke2025", pNOTICE) << "Error: could not choose absorption final state"; + LOG("HAIntranuke2025", pNOTICE) << "--> mean diff distr = " << nd0 << ", stand dev = " << Sig_nd; + LOG("HAIntranuke2025", pNOTICE) << "--> mean sum distr = " << ns0 << ", Stand dev = " << Sig_ns; + LOG("HAIntranuke2025", pNOTICE) << "--> gam_ns = " << gam_ns; + LOG("HAIntranuke2025", pNOTICE) << "--> A = " << fRemnA << ", Z = " << fRemnZ << ", Energy = " << ke; + exceptions::INukeException exception; + exception.SetReason("Absorption choice of # of p,n failed"); + throw exception; + } + //here?? + + // Box-Muller transform + // Takes two uniform distribution random variables on (0,1] + // Creates two normally distributed random variables on (0,inf) + + u1 = rnd->RndFsi().Rndm(); // uniform random variable 1 + u2 = rnd->RndFsi().Rndm(); // " " 2 + if (u1==0) u1 = rnd->RndFsi().Rndm(); + if (u2==0) u2 = rnd->RndFsi().Rndm(); // Just in case + + // normally distributed random variable + double x2 = TMath::Sqrt(-2*TMath::Log(u1))*TMath::Sin(2*kPi*u2); + + double ns = 0; + + if ( pdg::IsNeutronOrProton (pdgc) ) //nucleon probe + { + ns = -TMath::Log(rnd->RndFsi().Rndm())/gam_ns; // exponential random variable + } + if ( pdg::IsKaon (pdgc) ) //charged kaon probe - either 2 or 3 nucleons to stay simple + { + ns = (rnd->RndFsi().Rndm()<0.5?2:3); + } + else if ( pdgc==kPdgPiP || pdgc==kPdgPi0 || pdgc==kPdgPiM) //pion probe + { + // Pion fit for sum takes for xs*exp((xs-x0)^2 / 2*sig_xs0) + // Find random variable by first finding gaussian random variable + // then throwing the value against a linear P.D.F. + // + // max is the maximum value allowed for the random variable (10 std + mean) + // minimum allowed value is 0 + + double max = ns0 + Sig_ns * 10; + if(max>fRemnA) max=fRemnA; + double x1 = 0; + bool not_found = true; + int iter2 = 0; + + while (not_found) + { + // infinite loop check + if (iter2>=100) + { + LOG("HAIntranuke2025", pNOTICE) << "Error: stuck in random variable loop for ns"; + LOG("HAIntranuke2025", pNOTICE) << "--> mean of sum parent distr = " << ns0 << ", Stand dev = " << Sig_ns; + LOG("HAIntranuke2025", pNOTICE) << "--> A = " << fRemnA << ", Z = " << fRemnZ << ", Energy = " << ke; + + exceptions::INukeException exception; + exception.SetReason("Random number generator for choice of #p,n final state failed - unusual - redo kinematics"); + throw exception; + } + + // calculate exponential random variable + u1 = rnd->RndFsi().Rndm(); + u2 = rnd->RndFsi().Rndm(); + if (u1==0) u1 = rnd->RndFsi().Rndm(); + if (u2==0) u2 = rnd->RndFsi().Rndm(); + x1 = TMath::Sqrt(-2*TMath::Log(u1))*TMath::Cos(2*kPi*u2); + + ns = ns0 + Sig_ns * x1; + if ( ns>max || ns<0 ) {iter2++; continue;} + else if ( rnd->RndFsi().Rndm() > (ns/max) ) {iter2++; continue;} + else { + // accept this sum value + not_found=false; + } + } //while(not_found) + }//else pion + + double nd = nd0 + Sig_nd * x2; // difference (p-n) for both pion, nucleon probe + if (pdgc==kPdgKP) // special for KP + { if (ns==2) nd=0; + if (ns>2) nd=1; } + + np = int((ns+nd)/2.+.5); // Addition of .5 for rounding correction + nn = int((ns-nd)/2.+.5); + + LOG("HAIntranuke2025", pINFO) << "ns = "<86) // too many particles, scale down + { + double frac = 85./double(np+nn); + np = int(np*frac); + nn = int(nn*frac); + } + + if ( (np==fRemnZ +((pdg::IsProton (pdgc)||pdgc==kPdgPiP||pdgc==kPdgKP)?1:0)-(pdgc==kPdgPiM||pdgc==kPdgKM?1:0)) + &&(nn==fRemnA-fRemnZ+((pdg::IsNeutron(pdgc)||pdgc==kPdgPiM||pdgc==kPdgKM)?1:0)-(pdgc==kPdgPiP||pdgc==kPdgKP?1:0)) ) + { // leave at least one nucleon in the nucleus to prevent excess momentum + if (rnd->RndFsi().Rndm()18) + { + // code lists + PDGCodeList list0(allow_dup); + PDGCodeList list1(allow_dup); + PDGCodeList list2(allow_dup); + PDGCodeList list3(allow_dup); + PDGCodeList list4(allow_dup); + PDGCodeList* listar[5] = {&list0, &list1, &list2, &list3, &list4}; + + //set up HadronClusters + // simple for now, each (of 5) in hadron cluster has 1/5 of mom and KE + + double probM = pLib->Find(pdgc) ->Mass(); + probM -= .025; // BE correction + TVector3 pP3 = p->P4()->Vect() * (1./5.); + double probKE = p->P4()->E() -probM; + double clusKE = probKE * (1./5.); + TLorentzVector clusP4(pP3,clusKE); //no mass + LOG("HAIntranuke2025",pINFO) << "probM = " << probM << " ;clusKE= " << clusKE; + TLorentzVector X4(*p->X4()); + GHepStatus_t ist = kIStNucleonClusterTarget; + + int mom = p->FirstMother(); + + GHepParticle * p0 = new GHepParticle(kPdgCompNuclCluster,ist, mom,-1,-1,-1,clusP4,X4); + GHepParticle * p1 = new GHepParticle(kPdgCompNuclCluster,ist, mom,-1,-1,-1,clusP4,X4); + GHepParticle * p2 = new GHepParticle(kPdgCompNuclCluster,ist, mom,-1,-1,-1,clusP4,X4); + GHepParticle * p3 = new GHepParticle(kPdgCompNuclCluster,ist, mom,-1,-1,-1,clusP4,X4); + GHepParticle * p4 = new GHepParticle(kPdgCompNuclCluster,ist, mom,-1,-1,-1,clusP4,X4); + + // To conserve 4-momenta + // fRemnP4 -= probP4 + protP4*np_p + neutP4*(4-np_p) - *p->P4(); + fRemnP4 -= 5.*clusP4 - *p->P4(); + + for (int i=0;i<(np+nn);i++) + { + if (ipush_back(kPdgProton); + fRemnZ--; + } + else listar[i%5]->push_back(kPdgNeutron); + fRemnA--; + } + for (int i=0;i<5;i++) + { + LOG("HAIntranuke2025", pINFO) << "List" << i << " size: " << listar[i]->size(); + if (listar[i]->size() <2) + { + exceptions::INukeException exception; + exception.SetReason("too few particles for Phase Space decay - try again"); + throw exception; + } + } + + // commented out to better fit with absorption reactions + // Add the fermi energy of the nucleons to the phase space + /*if(fDoFermi) + { + GHepParticle* p_ar[5] = {cl, p1, p2, p3, p4}; + for (int i=0;i<5;i++) + { + Target target(ev->TargetNucleus()->Pdg()); + TVector3 pBuf = p_ar[i]->P4()->Vect(); + double mBuf = p_ar[i]->Mass(); + double eBuf = TMath::Sqrt(pBuf.Mag2() + mBuf*mBuf); + TLorentzVector tSum(pBuf,eBuf); + double mSum = 0.0; + vector::const_iterator pdg_iter; + for(pdg_iter=++(listar[i]->begin());pdg_iter!=listar[i]->end();++pdg_iter) + { + target.SetHitNucPdg(*pdg_iter); + fNuclmodel->GenerateNucleon(target); + mBuf = pLib->Find(*pdg_iter)->Mass(); + mSum += mBuf; + pBuf = fFermiFac * fNuclmodel->Momentum3(); + eBuf = TMath::Sqrt(pBuf.Mag2() + mBuf*mBuf); + tSum += TLorentzVector(pBuf,eBuf); + fRemnP4 -= TLorentzVector(pBuf,eBuf-mBuf); + } + TLorentzVector dP4 = tSum + TLorentzVector(TVector3(0,0,0),-mSum); + p_ar[i]->SetMomentum(dP4); + } + }*/ + + bool success1 = utils::intranuke2025::PhaseSpaceDecay(ev,p0,*listar[0],fRemnP4,fNucRmvE,kIMdHA); + bool success2 = utils::intranuke2025::PhaseSpaceDecay(ev,p1,*listar[1],fRemnP4,fNucRmvE,kIMdHA); + bool success3 = utils::intranuke2025::PhaseSpaceDecay(ev,p2,*listar[2],fRemnP4,fNucRmvE,kIMdHA); + bool success4 = utils::intranuke2025::PhaseSpaceDecay(ev,p3,*listar[3],fRemnP4,fNucRmvE,kIMdHA); + bool success5 = utils::intranuke2025::PhaseSpaceDecay(ev,p4,*listar[4],fRemnP4,fNucRmvE,kIMdHA); + if(success1 && success2 && success3 && success4 && success5) + { + LOG("HAIntranuke2025", pINFO)<<"Successful many-body absorption - n>=18"; + LOG("HAIntranuke2025", pDEBUG) << "Nucleus : (A,Z) = ("<Find(ipdgc); + if(!remn) + { + LOG("HAIntranuke2025", pINFO) + << "NO Particle with [A = " << fRemnA << ", Z = " << fRemnZ + << ", pdgc = " << ipdgc << "] in PDGLibrary!"; + } + else + { + MassRem = remn->Mass(); + LOG("HAIntranuke2025", pINFO) + << "Particle with [A = " << fRemnA << ", Z = " << fRemnZ + << ", pdgc = " << ipdgc << "] in PDGLibrary!"; + } + double ERemn = fRemnP4.E(); + double PRemn = TMath::Sqrt(fRemnP4.Px()*fRemnP4.Px() + fRemnP4.Py()*fRemnP4.Py() + fRemnP4.Pz()*fRemnP4.Pz()); + double MRemn = TMath::Sqrt(ERemn*ERemn - PRemn*PRemn); + LOG("HAIntranuke2025",pINFO) << "PRemn = " << PRemn << " ;ERemn= " << ERemn; + LOG("HAIntranuke2025",pINFO) << "MRemn= " << MRemn << " ;true Mass= " << MassRem << " ; excitation energy (>0 good)= " << (MRemn-MassRem)*1000. << " MeV"; + + } + else + { + // try to recover + LOG("HAIntranuke2025", pWARN) << "PhaseSpace decay fails for HadrCluster- recovery likely incorrect - rethrow event"; + p->SetStatus(kIStStableFinalState); + ev->AddParticle(*p); + fRemnA+=np+nn; + fRemnZ+=np; + if ( pdgc==kPdgProton || pdgc==kPdgPiP ) fRemnZ--; + if ( pdgc==kPdgPiM ) fRemnZ++; + if ( pdg::IsNeutronOrProton (pdgc) ) fRemnA--; + /* exceptions::INukeException exception; + exception.SetReason("Phase space generation of absorption final state failed"); + throw exception; + */ + } + + // delete cl; + delete p0; + delete p1; + delete p2; + delete p3; + delete p4; + + } + else // less than 18 particles pion + { + if (pdgc==kPdgKP) list.push_back(kPdgKP); //normally conserve strangeness + if (pdgc==kPdgKM) list.push_back(kPdgKM); + /* + TParticlePDG * remn0 = 0; + int ipdgc0 = pdg::IonPdgCode(fRemnA, fRemnZ); + remn0 = PDGLibrary::Instance()->Find(ipdgc0); + double Mass0 = remn0->Mass(); + TParticlePDG * remnt = 0; + int ipdgct = pdg::IonPdgCode(fRemnA-(nn+np), fRemnZ-np); + remnt = PDGLibrary::Instance()->Find(ipdgct); + double MassRemt = remnt->Mass(); + LOG("HAIntranuke2025",pINFO) << "Mass0 = " << Mass0 << " ;Masst= " << MassRemt << " ; diff/nucleon= "<< (Mass0-MassRemt)/(np+nn); + */ + //set up HadronCluster + + double probM = pLib->Find(pdgc) ->Mass(); + double probBE = (np+nn)*.005; // BE correction + TVector3 pP3 = p->P4()->Vect(); + double probKE = p->P4()->E() - (probM - probBE); + double clusKE = probKE; // + np*0.9383 + nn*.9396; + TLorentzVector clusP4(pP3,clusKE); //no mass is correct + LOG("HAIntranuke2025",pINFO) << "probM = " << probM << " ;clusKE= " << clusKE; + TLorentzVector X4(*p->X4()); + GHepStatus_t ist = kIStNucleonClusterTarget; + int mom = p->FirstMother(); + + GHepParticle * p0 = new GHepParticle(kPdgCompNuclCluster,ist, mom,-1,-1,-1,clusP4,X4); + + //set up remnant nucleus + fRemnP4 -= clusP4 - *p->P4(); + + for (int i=0;iTargetNucleus()->Pdg()); + TVector3 pBuf = p->P4()->Vect(); + double mBuf = p->Mass(); + double eBuf = TMath::Sqrt(pBuf.Mag2() + mBuf*mBuf); + TLorentzVector tSum(pBuf,eBuf); + double mSum = 0.0; + vector::const_iterator pdg_iter; + for(pdg_iter=++(list.begin());pdg_iter!=list.end();++pdg_iter) + { + target.SetHitNucPdg(*pdg_iter); + fNuclmodel->GenerateNucleon(target); + mBuf = pLib->Find(*pdg_iter)->Mass(); + mSum += mBuf; + pBuf = fFermiFac * fNuclmodel->Momentum3(); + eBuf = TMath::Sqrt(pBuf.Mag2() + mBuf*mBuf); + tSum += TLorentzVector(pBuf,eBuf); + fRemnP4 -= TLorentzVector(pBuf,eBuf-mBuf); + } + TLorentzVector dP4 = tSum + TLorentzVector(TVector3(0,0,0),-mSum); + p->SetMomentum(dP4); + }*/ + + LOG("HAIntranuke2025", pDEBUG) + << "Remnant nucleus (A,Z) = (" << fRemnA << ", " << fRemnZ << ")"; + LOG("HAIntranuke2025", pINFO) << " list size: " << np+nn; + if (np+nn <2) + { + exceptions::INukeException exception; + exception.SetReason("too few particles for Phase Space decay - try again"); + throw exception; + } + // GHepParticle * cl = new GHepParticle(*p); + // cl->SetPdgCode(kPdgDecayNuclCluster); + //bool success1 = utils::intranuke2025::PhaseSpaceDecay(ev,p0,*listar[0],fRemnP4,fNucRmvE,kIMdHA); + bool success = utils::intranuke2025::PhaseSpaceDecay(ev,p0,list,fRemnP4,fNucRmvE,kIMdHA); + if (success) + { + LOG ("HAIntranuke2025",pINFO) << "Successful many-body absorption, n<=18"; + LOG("HAIntranuke2025", pDEBUG) << "Nucleus : (A,Z) = ("<Find(ipdgc); + if(!remn) + { + LOG("HAIntranuke2025", pINFO) + << "NO Particle with [A = " << fRemnA << ", Z = " << fRemnZ + << ", pdgc = " << ipdgc << "] in PDGLibrary!"; + } + else + { + MassRem = remn->Mass(); + LOG("HAIntranuke2025", pINFO) + << "Particle with [A = " << fRemnA << ", Z = " << fRemnZ + << ", pdgc = " << ipdgc << "] in PDGLibrary!"; + } + double ERemn = fRemnP4.E(); + double PRemn = TMath::Sqrt(fRemnP4.Px()*fRemnP4.Px() + fRemnP4.Py()*fRemnP4.Py() + fRemnP4.Pz()*fRemnP4.Pz()); + double MRemn = TMath::Sqrt(ERemn*ERemn - PRemn*PRemn); + LOG("HAIntranuke2025",pINFO) << "PRemn = " << PRemn << " ;ERemn= " << ERemn; + LOG("HAIntranuke2025",pINFO) << "expt MRemn= " << MRemn << " ;true Mass= " << MassRem << " ; excitation energy (>0 good)= " << (MRemn-MassRem)*1000. << " MeV"; + } + else { + // recover + p->SetStatus(kIStStableFinalState); + ev->AddParticle(*p); + fRemnA+=np+nn; + fRemnZ+=np; + if ( pdgc==kPdgProton || pdgc==kPdgPiP ) fRemnZ--; + if ( pdgc==kPdgPiM ) fRemnZ++; + if ( pdg::IsNeutronOrProton (pdgc) ) fRemnA--; + exceptions::INukeException exception; + exception.SetReason("Phase space generation of absorption final state failed"); + throw exception; + } + delete p0; + } + } // end multi-nucleon FS + } + else // not absorption/pipro + { + LOG("HAIntranuke2025", pWARN) + << "Inelastic() can not handle fate: " << INukeHadroFates::AsString(fate); + return; + } +} +//___________________________________________________________________________ +int HAIntranuke2025::HandleCompoundNucleus(GHepRecord* /*ev*/, GHepParticle* /*p*/, int /*mom*/) const +{ + + // only relevant for hN mode - not anymore. + return false; + +} +//___________________________________________________________________________ +void HAIntranuke2025::LoadConfig(void) +{ + + // load hadronic cross sections + fHadroData2025 = INukeHadroData2025::Instance(); + + // fermi momentum setup + // this is specifically set in Intranuke2025::Configure(string) + fNuclmodel = dynamic_cast( this -> SubAlg("NuclearModel") ) ; + + // other intranuke config params + GetParam( "NUCL-R0", fR0 ); // fm + GetParam( "NUCL-NR", fNR ); + + GetParam( "INUKE-NucRemovalE", fNucRmvE ); // GeV + GetParam( "INUKE-HadStep", fHadStep ) ; + GetParam( "INUKE-NucAbsFac", fNucAbsFac ) ; + GetParam( "INUKE-NucCEXFac", fNucCEXFac ) ; + GetParam( "INUKE-Energy_Pre_Eq", fEPreEq ) ; + GetParam( "INUKE-FermiFac", fFermiFac ) ; + GetParam( "INUKE-FermiMomentum", fFermiMomentum ) ; + + GetParam( "INUKE-DoCompoundNucleus", fDoCompoundNucleus ) ; + GetParam( "INUKE-DoFermi", fDoFermi ) ; + GetParam( "INUKE-XsecNNCorr", fXsecNNCorr ) ; + GetParamDef( "UseOset", fUseOset, false ) ; + GetParamDef( "AltOset", fAltOset, false ) ; + + GetParam( "HAINUKE-DelRPion", fDelRPion ) ; + GetParam( "HAINUKE-DelRNucleon", fDelRNucleon ) ; + + GetParamDef( "FSI-ChargedPion-MFPScale", fChPionMFPScale, 1.0 ) ; + GetParamDef( "FSI-NeutralPion-MFPScale", fNeutralPionMFPScale, 1.0 ) ; + GetParamDef( "FSI-Pion-FracCExScale", fPionFracCExScale, 1.0 ) ; + GetParamDef( "FSI-ChargedPion-FracAbsScale", fChPionFracAbsScale, 1.0 ) ; + GetParamDef( "FSI-NeutralPion-FracAbsScale", fNeutralPionFracAbsScale,1.0 ) ; + GetParamDef( "FSI-Pion-FracInelScale", fPionFracInelScale, 1.0 ) ; + GetParamDef( "FSI-Pion-FracPiProdScale", fPionFracPiProdScale, 1.0 ) ; + GetParamDef( "FSI-Nucleon-MFPScale", fNucleonMFPScale, 1.0 ) ; + GetParamDef( "FSI-Nucleon-FracCExScale", fNucleonFracCExScale , 1.0 ) ; + GetParamDef( "FSI-Nucleon-FracInelScale", fNucleonFracInelScale, 1.0 ) ; + GetParamDef( "FSI-Nucleon-FracAbsScale", fNucleonFracAbsScale, 1.0 ) ; + GetParamDef( "FSI-Nucleon-FracPiProdScale", fNucleonFracPiProdScale, 1.0 ) ; + + // report + LOG("HAIntranuke2025", pINFO) << "Settings for INTRANUKE mode: " << INukeMode::AsString(kIMdHA); + LOG("HAIntranuke2025", pINFO) << "R0 = " << fR0 << " fermi"; + LOG("HAIntranuke2025", pINFO) << "NR = " << fNR; + LOG("HAIntranuke2025", pINFO) << "DelRPion = " << fDelRPion; + LOG("HAIntranuke2025", pINFO) << "DelRNucleon = " << fDelRNucleon; + LOG("HAIntranuke2025", pINFO) << "HadStep = " << fHadStep << " fermi"; + LOG("HAIntranuke2025", pINFO) << "EPreEq = " << fHadStep << " fermi"; + LOG("HAIntranuke2025", pINFO) << "NucAbsFac = " << fNucAbsFac; + LOG("HAIntranuke2025", pINFO) << "NucCEXFac = " << fNucCEXFac; + LOG("HAIntranuke2025", pINFO) << "FermiFac = " << fFermiFac; + LOG("HAIntranuke2025", pINFO) << "FermiMomtm = " << fFermiMomentum; + LOG("HAIntranuke2025", pINFO) << "DoFermi? = " << ((fDoFermi)?(true):(false)); + LOG("HAIntranuke2025", pINFO) << "DoCmpndNuc? = " << ((fDoCompoundNucleus)?(true):(false)); + LOG("HAIntranuke2025", pINFO) << "XsecNNCorr? = " << ((fXsecNNCorr)?(true):(false)); +} +//___________________________________________________________________________ +/* +INukeFateHA_t HAIntranuke2025::HadronFateOset () const +{ + const double fractionAbsorption = osetUtils::currentInstance-> + getAbsorptionFraction(); + const double fractionCex = osetUtils::currentInstance->getCexFraction (); + + RandomGen *randomGenerator = RandomGen::Instance(); + const double randomNumber = randomGenerator->RndFsi().Rndm(); + + LOG("HAIntranuke2025", pINFO) + << "\n frac{" << INukeHadroFates::AsString(kIHAFtCEx) << "} = " << fractionCex + << "\n frac{" << INukeHadroFates::AsString(kIHAFtInelas) << "} = " << 1-fractionCex-fractionAbsorption + << "\n frac{" << INukeHadroFates::AsString(kIHAFtAbs) << "} = " << fractionAbsorption; + if (randomNumber < fractionAbsorption && fRemnA > 1) return kIHAFtAbs; + else if (randomNumber < fractionAbsorption + fractionCex) return kIHAFtCEx; + else return kIHAFtInelas; +} +*/ diff --git a/src/Physics/HadronTransport/HAIntranuke2025.h b/src/Physics/HadronTransport/HAIntranuke2025.h new file mode 100644 index 000000000..ced9943d6 --- /dev/null +++ b/src/Physics/HadronTransport/HAIntranuke2025.h @@ -0,0 +1,87 @@ +//____________________________________________________________________________ +/*! + +\class genie::Intranuke + +\brief The INTRANUKE intranuclear hadron transport MC. + Is a concrete implementation of the EventRecordVisitorI interface. + +\ref R.Merenyi et al., Phys.Rev.D45 (1992) + R.D.Ransome, Nucl.Phys.B 139 (2005) + + Current INTRANUKE development is led by S.Dytman and H.Gallagher. + The original INTRANUKE cascade MC was developed (in fortran) for the + NeuGEN MC by R.Edgecock, G.F.Pearce, W.A.Mann, R.Merenyi and others. + +\author Steve Dytman , Pittsburgh University + Aaron Meyer , Pittsburgh University + Alex Bell, Pittsburgh University + Hugh Gallagher , Tufts University + Costas Andreopoulos STFC, Rutherford Lab + +\created September 20, 2005 + +\cpright Copyright (c) 2003-2024, The GENIE Collaboration + For the full text of the license visit http://copyright.genie-mc.org + +*/ +//____________________________________________________________________________ + +#ifndef _HA_INTRANUKE_2025_H_ +#define _HA_INTRANUKE_2025_H_ + +#include + +#include "Physics/NuclearState/NuclearModelI.h" +#include "Framework/Algorithm/AlgFactory.h" +#include "Framework/EventGen/EventRecordVisitorI.h" +#include "Physics/HadronTransport/INukeMode.h" +#include "Physics/HadronTransport/INukeHadroFates2025.h" +#include "Physics/HadronTransport/Intranuke2025.h" + +class TLorentzVector; +class TVector3; + +namespace genie { + +class GHepParticle; +class INukeHadroData2025; +class PDGCodeList; + +class HAIntranuke2025 : public Intranuke2025 { + +friend class IntranukeTester; + +public : + HAIntranuke2025(); + HAIntranuke2025(string config); + ~HAIntranuke2025(); + + void ProcessEventRecord(GHepRecord * event_rec) const; + + virtual string GetINukeMode() const {return "hA2025";}; + virtual string GetGenINukeMode() const {return "hA";}; + +private: + + void LoadConfig (void); + + void SimulateHadronicFinalState (GHepRecord* ev, GHepParticle* p) const; + void SimulateHadronicFinalStateKinematics (GHepRecord* ev, GHepParticle* p) const; + + INukeFateHA_t HadronFateHA (const GHepParticle* p) const; + //INukeFateHA_t HadronFateOset (void) const; + void Inelastic (GHepRecord* ev, GHepParticle* p, INukeFateHA_t fate) const; + void ElasHA (GHepRecord* ev, GHepParticle* p, INukeFateHA_t fate) const; + void InelasticHA (GHepRecord* ev, GHepParticle* p, INukeFateHA_t fate) const; + double PiBounce (void) const; + double PnBounce (void) const; + int HandleCompoundNucleus(GHepRecord* ev, GHepParticle* p, int mom) const; + + mutable int nuclA; ///< value of A for the target nucleus in hA mode + mutable unsigned int fNumIterations; +}; + +} // genie namespace + +#endif // _HA_INTRANUKE_2025_H_ diff --git a/src/Physics/HadronTransport/HNIntranuke2025.cxx b/src/Physics/HadronTransport/HNIntranuke2025.cxx new file mode 100644 index 000000000..54a291905 --- /dev/null +++ b/src/Physics/HadronTransport/HNIntranuke2025.cxx @@ -0,0 +1,1039 @@ + +//____________________________________________________________________________ +/* + Copyright (c) 2003-2024, The GENIE Collaboration + For the full text of the license visit http://copyright.genie-mc.org + + + Author: Steve Dytman , Pittsburgh Univ. + Aaron Meyer , Pittsburgh Univ. + Alex Bell, Pittsburgh Univ. + Hugh Gallagher , Tufts Univ. + Costas Andreopoulos , Rutherford Lab. + September 20, 2005 + + For the class documentation see the corresponding header file. + + Important revisions after version 2.0.0 : + @ Nov 30, 2007 - SD + Changed the hadron tracking algorithm to take into account the radial + nuclear density dependence. Using the somewhat empirical approach of + increasing the nuclear radius by a const (tunable) number times the tracked + particle's de Broglie wavelength as this helps getting the hadron+nucleus + cross sections right. + @ Mar 08, 2008 - CA + Fixed code retrieving the remnant nucleus which stopped working as soon as + simulation of nuclear de-excitation started pushing photons in the target + nucleus daughter list. + @ Jun 20, 2008 - CA + Fix a mem leak: The (clone of the) GHepParticle being re-scattered was not + deleted after it was added at the GHEP event record. + @ Jul 15, 2010 - AM + The hN mode is now implemented in Intranuke. Similar to hA mode, but particles + produced by reactions are stepped through the nucleus like probe particles. + Particles react with nucleons instead of the entire nucleus, and final states + are determined after reactions are finished, not before. + @ Dec 15, 2014 - SD, Nick Geary + Update fates to include Compound Nucleus final state correctly. + @ Jan 9, 2015 - SD, NG, Tomek Golan + Added 2014 version of INTRANUKE codes (new class) for independent development. + @ Oct, 2015 - TG + Added 2015 version of INTRANUKE codes (new class) for independent development. Include Oset model for medium corrections to piA for Tpi<350 MeV. + @ May, 2015 Flor Blaszczyk + K+ are now handled. + @ July, 2016 Nicholas Suarez, Josh Kleckner, SD + fix memory leak, fix fates, improve NNCorr binning + & Mar, 2025 Nicholas Suarez, SD + add compound nucleus option to populate KE<30 MeV +*/ +//____________________________________________________________________________ + +#include +#include + +#include + +#include "Framework/Algorithm/AlgConfigPool.h" +#include "Framework/Algorithm/AlgFactory.h" +#include "Framework/Conventions/GBuild.h" +#include "Framework/Conventions/Constants.h" +#include "Framework/Conventions/Controls.h" +#include "Framework/EventGen/EVGThreadException.h" +#include "Framework/GHEP/GHepFlags.h" +#include "Framework/GHEP/GHepStatus.h" +#include "Framework/GHEP/GHepRecord.h" +#include "Framework/GHEP/GHepParticle.h" +#include "Physics/HadronTransport/Intranuke2025.h" +#include "Physics/HadronTransport/HNIntranuke2025.h" +#include "Physics/HadronTransport/INukeException.h" +#include "Physics/HadronTransport/INukeHadroData2025.h" +#include "Physics/HadronTransport/INukeUtils2025.h" +#include "Framework/Interaction/Interaction.h" +#include "Framework/Messenger/Messenger.h" +#include "Framework/Numerical/RandomGen.h" +#include "Framework/Numerical/Spline.h" +#include "Framework/ParticleData/PDGLibrary.h" +#include "Framework/ParticleData/PDGCodes.h" +#include "Framework/ParticleData/PDGCodeList.h" +#include "Framework/ParticleData/PDGUtils.h" +#include "Framework/Utils/PrintUtils.h" +#include "Physics/NuclearState/NuclearUtils.h" +#include "Physics/HadronTransport/INukeOset.h" + +using std::ostringstream; + +using namespace genie; +using namespace genie::utils; +using namespace genie::utils::intranuke2025; +using namespace genie::constants; +using namespace genie::controls; + +//___________________________________________________________________________ +//___________________________________________________________________________ +// Methods specific to INTRANUKE's HN-mode +//___________________________________________________________________________ +//___________________________________________________________________________ +HNIntranuke2025::HNIntranuke2025() : +Intranuke2025("genie::HNIntranuke2025") +{ + +} +//___________________________________________________________________________ +HNIntranuke2025::HNIntranuke2025(string config) : +Intranuke2025("genie::HNIntranuke2025",config) +{ + +} +//___________________________________________________________________________ +HNIntranuke2025::~HNIntranuke2025() +{ + +} +//___________________________________________________________________________ +void HNIntranuke2025::ProcessEventRecord(GHepRecord * evrec) const +{ + LOG("HNIntranuke2025", pNOTICE) + << "************ Running hN2025 MODE INTRANUKE ************"; + + /* LOG("HNIntranuke2025", pWARN) + << print::PrintFramedMesg( + "Experimental code (INTRANUKE/hN model) - Run at your own risk"); + */ + + Intranuke2025::ProcessEventRecord(evrec); + + LOG("HNIntranuke2025", pINFO) << "Done with this event"; +} +//___________________________________________________________________________ +void HNIntranuke2025::SimulateHadronicFinalState(GHepRecord* ev, GHepParticle* p) const +{ +// Simulate a hadron interaction for the input particle p in HN mode +// + if(!p || !ev) + { + LOG("HNIntranuke2025", pERROR) << "** Null input!"; + return; + } + + // check particle id + int pdgc = p->Pdg(); + bool is_pion = (pdgc==kPdgPiP || pdgc==kPdgPiM || pdgc==kPdgPi0); + bool is_kaon = (pdgc==kPdgKP); + bool is_baryon = (pdgc==kPdgProton || pdgc==kPdgNeutron); + bool is_gamma = (pdgc==kPdgGamma); + if(!(is_pion || is_baryon || is_gamma || is_kaon)) + { + LOG("HNIntranuke2025", pERROR) << "** Cannot handle particle: " << p->Name(); + return; + } + try + { + // select a fate for the input particle + INukeFateHN_t fate = this->HadronFateHN(p); + + // store the fate + ev->Particle(p->FirstMother())->SetRescatterCode((int)fate); + + if(fate == kIHNFtUndefined) + { + LOG("HNIntranuke2025", pERROR) << "** Couldn't select a fate"; + LOG("HNIntranuke2025", pERROR) << "** Num Protons: " << fRemnZ + << ", Num Neutrons: "<<(fRemnA-fRemnZ); + LOG("HNIntranuke2025", pERROR) << "** Particle: " << "\n" << (*p); + //LOG("HNIntranuke2025", pERROR) << "** Event Record: " << "\n" << (*ev); + //p->SetStatus(kIStUndefined); + p->SetStatus(kIStStableFinalState); + ev->AddParticle(*p); + return; + } + + LOG("HNIntranuke2025", pNOTICE) + << "Selected " << p->Name() << " fate: " << INukeHadroFates::AsString(fate); + + // handle the reaction + if(fate == kIHNFtCEx || fate == kIHNFtElas) + { + this->ElasHN(ev,p,fate); + } + else if(fate == kIHNFtAbs) {this-> AbsorbHN(ev,p,fate);} + else if(fate == kIHNFtInelas && pdgc != kPdgGamma) + { +#ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__ + LOG("HNIntranuke2025", pDEBUG) + << "Invoking InelasticHN() for a : " << p->Name() + << " whose fate is : " << INukeHadroFates::AsString(fate); +#endif + + this-> InelasticHN(ev,p); + } + else if(fate == kIHNFtInelas && pdgc == kPdgGamma) {this-> GammaInelasticHN(ev,p,fate);} + else if(fate == kIHNFtCmp){utils::intranuke2025::PreEquilibrium(ev,p,fRemnA,fRemnZ,fRemnP4,fDoFermi,fFermiFac,fNuclmodel,fNucRmvE,kIMdHN);} + else if(fate == kIHNFtNoInteraction) + { + p->SetStatus(kIStStableFinalState); + ev->AddParticle(*p); + return; + } + } + catch(exceptions::INukeException exception) + { + this->SimulateHadronicFinalState(ev,p); + LOG("HNIntranuke2025", pNOTICE) + << "retry call to SimulateHadronicFinalState "; + LOG("HNIntranuke2025", pNOTICE) << exception; + + } +} +//___________________________________________________________________________ +INukeFateHN_t HNIntranuke2025::HadronFateHN(const GHepParticle * p) const +{ +// Select a hadron fate in HN mode +// + RandomGen * rnd = RandomGen::Instance(); + + // get pdgc code & kinetic energy in MeV + int pdgc = p->Pdg(); + double ke = p->KinE() / units::MeV; + + bool isPion = (pdgc == kPdgPiP or pdgc == kPdgPi0 or pdgc == kPdgPiM); + + if (isPion and fUseOset and ke < 350.0) return HadronFateOset (); + + LOG("HNIntranuke2025", pNOTICE) + << "Selecting hN fate for " << p->Name() << " with KE = " << ke << " MeV"; + + // try to generate a hadron fate + unsigned int iter = 0; + while(iter++ < kRjMaxIterations) { + + // handle pions + // + if (pdgc==kPdgPiP || pdgc==kPdgPiM || pdgc==kPdgPi0) { + + double frac_cex = this->FateWeight(pdgc, kIHNFtCEx) + * fHadroData2025->Frac(pdgc, kIHNFtCEx, ke, fRemnA, fRemnZ); + double frac_elas = this->FateWeight(pdgc, kIHNFtElas) + * fHadroData2025->Frac(pdgc, kIHNFtElas, ke, fRemnA, fRemnZ); + double frac_inel = this->FateWeight(pdgc, kIHNFtInelas) + * fHadroData2025->Frac(pdgc, kIHNFtInelas, ke, fRemnA, fRemnZ); + double frac_abs = this->FateWeight(pdgc, kIHNFtAbs) + * fHadroData2025->Frac(pdgc, kIHNFtAbs, ke, fRemnA, fRemnZ); + + frac_cex *= fNucCEXFac; // scaling factors + frac_abs *= fNucAbsFac; + frac_elas *= fNucQEFac; + if(pdgc==kPdgPi0) frac_abs*= 0.665; //isospin factor + + LOG("HNIntranuke2025", pNOTICE) + << "\n frac{" << INukeHadroFates::AsString(kIHNFtCEx) << "} = " << frac_cex + << "\n frac{" << INukeHadroFates::AsString(kIHNFtElas) << "} = " << frac_elas + << "\n frac{" << INukeHadroFates::AsString(kIHNFtInelas) << "} = " << frac_inel + << "\n frac{" << INukeHadroFates::AsString(kIHNFtAbs) << "} = " << frac_abs; + + // compute total fraction (can be <1 if fates have been switched off) + double tf = frac_cex + + frac_elas + + frac_inel + + frac_abs; + + double r = tf * rnd->RndFsi().Rndm(); +#ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__ + LOG("HNIntranuke2025", pDEBUG) << "r = " << r << " (max = " << tf << ")"; +#endif + + double cf=0; // current fraction + + if(r < (cf += frac_cex )) return kIHNFtCEx; //cex + if(r < (cf += frac_elas )) return kIHNFtElas; //elas + if(r < (cf += frac_inel )) return kIHNFtInelas; //inelas + if(r < (cf += frac_abs )) return kIHNFtAbs; //abs + + LOG("HNIntranuke2025", pWARN) + << "No selection after going through all fates! " + << "Total fraction = " << tf << " (r = " << r << ")"; + //////////////////////////// + return kIHNFtUndefined; + } + + // handle nucleons + else if (pdgc==kPdgProton || pdgc==kPdgNeutron) { + + double frac_elas = this->FateWeight(pdgc, kIHNFtElas) + * fHadroData2025->Frac(pdgc, kIHNFtElas, ke, fRemnA, fRemnZ); + double frac_inel = this->FateWeight(pdgc, kIHNFtInelas) + * fHadroData2025->Frac(pdgc, kIHNFtInelas, ke, fRemnA, fRemnZ); + double frac_cmp = this->FateWeight(pdgc, kIHNFtCmp) + * fHadroData2025->Frac(pdgc, kIHNFtCmp, ke, fRemnA , fRemnZ); + + LOG("HNIntranuke2025", pINFO) + << "\n frac{" << INukeHadroFates::AsString(kIHNFtElas) << "} = " << frac_elas + << "\n frac{" << INukeHadroFates::AsString(kIHNFtInelas) << "} = " << frac_inel; + + // compute total fraction (can be <1 if fates have been switched off) + double tf = frac_elas + + frac_inel + + frac_cmp; + + double r = tf * rnd->RndFsi().Rndm(); + +#ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__ + LOG("HNIntranuke2025", pDEBUG) << "r = " << r << " (max = " << tf << ")"; +#endif + + double cf=0; // current fraction + if(r < (cf += frac_elas )) return kIHNFtElas; // elas + if(r < (cf += frac_inel )) return kIHNFtInelas; // inelas + if(r < (cf += frac_cmp )) return kIHNFtCmp; // cmp + + LOG("HNIntranuke2025", pWARN) + << "No selection after going through all fates! " + << "Total fraction = " << tf << " (r = " << r << ")"; + ////////////////////////// + return kIHNFtUndefined; + } + + // handle gamma -- does not currently consider the elastic case + else if (pdgc==kPdgGamma) return kIHNFtInelas; + // Handle kaon -- elastic + charge exchange + else if (pdgc==kPdgKP){ + double frac_cex = this->FateWeight(pdgc, kIHNFtCEx) + * fHadroData2025->Frac(pdgc, kIHNFtCEx, ke, fRemnA, fRemnZ); + double frac_elas = this->FateWeight(pdgc, kIHNFtElas) + * fHadroData2025->Frac(pdgc, kIHNFtElas, ke, fRemnA, fRemnZ); + + // frac_cex *= fNucCEXFac; // scaling factors + // frac_elas *= fNucQEFac; // Flor - Correct scaling factors? + + LOG("HNIntranuke", pINFO) + << "\n frac{" << INukeHadroFates::AsString(kIHNFtCEx) << "} = " << frac_cex + << "\n frac{" << INukeHadroFates::AsString(kIHNFtElas) << "} = " << frac_elas; + + // compute total fraction (can be <1 if fates have been switched off) + double tf = frac_cex + + frac_elas; + + double r = tf * rnd->RndFsi().Rndm(); +#ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__ + LOG("HNIntranuke", pDEBUG) << "r = " << r << " (max = " << tf << ")"; +#endif + + double cf=0; // current fraction + + if(r < (cf += frac_cex )) return kIHNFtCEx; //cex + if(r < (cf += frac_elas )) return kIHNFtElas; //elas + + LOG("HNIntranuke", pWARN) + << "No selection after going through all fates! " + << "Total fraction = " << tf << " (r = " << r << ")"; + //////////////////////////// + return kIHNFtUndefined; + }//End K+ + + /*else if (pdgc==kPdgKM){ + + return kIHNFtElas; + }//End K-*/ + + }//iterations + + return kIHNFtUndefined; +} + +//___________________________________________________________________________ +double HNIntranuke2025::FateWeight(int pdgc, INukeFateHN_t fate) const +{ + // turn fates off if the remnant nucleus does not have the number of p,n + // required + + int np = fRemnZ; + int nn = fRemnA - fRemnZ; + + if (np < 1 && nn < 1) + { + LOG("HNIntranuke2025", pERROR) << "** Nothing left in nucleus!!! **"; + return 0; + } + else + { + if (fate == kIHNFtCEx && pdgc==kPdgPiP ) { return (nn>=1) ? 1. : 0.; } + if (fate == kIHNFtCEx && pdgc==kPdgPiM ) { return (np>=1) ? 1. : 0.; } + if (fate == kIHNFtCEx && pdgc==kPdgKP ) { return (nn>=1) ? 1. : 0.; } //Added, changed np to nn + if (fate == kIHNFtAbs) { return ((nn>=1) && (np>=1)) ? 1. : 0.; } + if (fate == kIHNFtCmp ) { return ((pdgc==kPdgProton||pdgc==kPdgNeutron)&&fDoCompoundNucleus&&fRemnA>5) ? 1. : 0.; } + + } + return 1.; +} +//___________________________________________________________________________ +void HNIntranuke2025::AbsorbHN( + GHepRecord * ev, GHepParticle * p, INukeFateHN_t fate) const +{ + // handles pi+d->2p, pi-d->nn, pi0 d->pn absorbtion, all using pi+d values + + int pdgc = p->Pdg(); + +#ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__ + LOG("HNIntranuke2025", pDEBUG) + << "AbsorbHN() is invoked for a : " << p->Name() + << " whose fate is : " << INukeHadroFates::AsString(fate); +#endif + + // check fate + if(fate!=kIHNFtAbs) + { + LOG("HNIntranuke2025", pWARN) + << "AbsorbHN() cannot handle fate: " << INukeHadroFates::AsString(fate); + return; + } + + // random number generator + RandomGen * rnd = RandomGen::Instance(); + + // Notes on the kinematics + // -- Simple variables are used for efficiency + // -- Variables are numbered according to particle + // -- -- #1 -> incoming particle + // -- -- #2 -> target (here, 2_1 and 2_2 for individual particles) + // -- -- #3 -> scattered incoming (Particle tracked in hA mode) + // -- -- #4 -> other scattered particle + // -- Suffix "L" is for lab frame, suffix "CM" is for center of mass frame + // -- Subscript "z" is for parallel component, "t" is for transverse + + int pcode, t1code, t2code, scode, s2code; // particles + double M1, M2_1, M2_2, M3, M4; // rest energies, in GeV + double E1L, P1L, E2L, P2L, E3L, P3L, E4L, P4L; + double P1zL, P2zL; + double beta, gm; // speed and gamma for CM frame in lab + double Et, E2CM; + double C3CM, S3CM; // cos and sin of scattering angle + double Theta1, Theta2, theta5; + double PHI3; // transverse scattering angle + double E1CM, E3CM, E4CM, P3CM; + double P3zL, P3tL, P4zL, P4tL; + double E2_1L, E2_2L; + TVector3 tP2_1L, tP2_2L, tP1L, tP2L, tPtot, P1zCM, P2zCM; + TVector3 tP3L, tP4L; + TVector3 bDir, tTrans, tbeta, tVect; + + // Library instance for reference + PDGLibrary * pLib = PDGLibrary::Instance(); + + // Handle fermi target + Target target(ev->TargetNucleus()->Pdg()); + + // Target should be a deuteron, but for now + // handling it as seperate nucleons + if(pdgc==211) // pi-plus + { + pcode = 211; + t1code = 2212; // proton + t2code = 2112; // neutron + scode = 2212; + s2code = 2212; + } + else if(pdgc==-211) // pi-minus + { + pcode = -211; + t1code = 2212; + t2code = 2112; + scode = 2112; + s2code = 2112; + } + else if(pdgc==111) // pi-zero + { + pcode = 111; + t1code = 2212; + t2code = 2112; + scode = 2212; + s2code = 2112; + } + else + { + LOG("HNIntranuke2025", pWARN) + << "AbsorbHN() cannot handle probe: " << pdgc; + return; + } + + // assign proper masses + M1 = pLib->Find(pcode) ->Mass(); + M2_1 = pLib->Find(t1code)->Mass(); + M2_2 = pLib->Find(t2code)->Mass(); + M3 = pLib->Find(scode) ->Mass(); + M4 = pLib->Find(s2code)->Mass(); + + // handle fermi momentum + if(fDoFermi) + { + target.SetHitNucPdg(t1code); + fNuclmodel->GenerateNucleon(target); + tP2_1L=fFermiFac * fNuclmodel->Momentum3(); + E2_1L = TMath::Sqrt(tP2_1L.Mag2() + M2_1*M2_1); + + target.SetHitNucPdg(t2code); + fNuclmodel->GenerateNucleon(target); + tP2_2L=fFermiFac * fNuclmodel->Momentum3(); + E2_2L = TMath::Sqrt(tP2_2L.Mag2() + M2_2*M2_2); + } + else + { + tP2_1L.SetXYZ(0.0, 0.0, 0.0); + E2_1L = M2_1; + + tP2_2L.SetXYZ(0.0, 0.0, 0.0); + E2_2L = M2_2; + } + + E2L = E2_1L + E2_2L; + + // adjust p to reflect scattering + // get random scattering angle + C3CM = fHadroData2025->IntBounce(p,t1code,scode,fate); + if (C3CM<-1.) + { + p->SetStatus(kIStStableFinalState); + ev->AddParticle(*p); + return; + } + S3CM = TMath::Sqrt(1.0 - C3CM*C3CM); + + // Get lab energy and momenta + E1L = p->E(); + if(E1L<0.001) E1L=0.001; + P1L = TMath::Sqrt(E1L*E1L - M1*M1); + tP1L = p->P4()->Vect(); + tP2L = tP2_1L + tP2_2L; + P2L = tP2L.Mag(); + tPtot = tP1L + tP2L; + + // get unit vectors and angles needed for later + bDir = tPtot.Unit(); + Theta1 = tP1L.Angle(bDir); + Theta2 = tP2L.Angle(bDir); + + // get parallel and transverse components + P1zL = P1L*TMath::Cos(Theta1); + P2zL = P2L*TMath::Cos(Theta2); + tVect.SetXYZ(1,0,0); + if(TMath::Abs((tVect - bDir).Mag())<.01) tVect.SetXYZ(0,1,0); + theta5 = tVect.Angle(bDir); + tTrans = (tVect - TMath::Cos(theta5)*bDir).Unit(); + + // calculate beta and gamma + tbeta = tPtot * (1.0 / (E1L + E2L)); + beta = tbeta.Mag(); + gm = 1.0 / TMath::Sqrt(1.0 - beta*beta); + + // boost to CM frame to get scattered particle momenta + E1CM = gm*E1L - gm*beta*P1zL; + P1zCM = gm*P1zL*bDir - gm*tbeta*E1L; + E2CM = gm*E2L - gm*beta*P2zL; + P2zCM = gm*P2zL*bDir - gm*tbeta*E2L; + Et = E1CM + E2CM; + E3CM = (Et*Et + (M3*M3) - (M4*M4)) / (2.0*Et); + E4CM = Et - E3CM; + P3CM = TMath::Sqrt(E3CM*E3CM - M3*M3); + + // boost back to lab + P3zL = gm*beta*E3CM + gm*P3CM*C3CM; + P3tL = P3CM*S3CM; + P4zL = gm*beta*E4CM + gm*P3CM*(-C3CM); + P4tL = P3CM*(-S3CM); + + P3L = TMath::Sqrt(P3zL*P3zL + P3tL*P3tL); + P4L = TMath::Sqrt(P4zL*P4zL + P4tL*P4tL); + + // check for too small values + // may introduce error, so warn if it occurs + if(!(TMath::Finite(P3L))||P3L<.001) + { + LOG("HNIntranuke2025",pINFO) + << "Particle 3 " << M3 << " momentum small or non-finite: " << P3L + << "\n" << "--> Assigning .001 as new momentum"; + P3tL = 0; + P3zL = .001; + P3L = .001; + E3L = TMath::Sqrt(P3L*P3L + M3*M3); + } + + if(!(TMath::Finite(P4L))||P4L<.001) + { + LOG("HNIntranuke2025",pINFO) + << "Particle 4 " << M4 << " momentum small or non-finite: " << P4L + << "\n" << "--> Assigning .001 as new momentum"; + P4tL = 0; + P4zL = .001; + P4L = .001; + E4L = TMath::Sqrt(P4L*P4L + M4*M4); + } + + // pauli blocking (do not apply PB for Oset) + //if(!fUseOset && (P3L < fFermiMomentum || P4L < fFermiMomentum)) + double ke = p->KinE() / units::MeV; + if((!fUseOset || ke > 350.0 ) && (P3L < fFermiMomentum || P4L < fFermiMomentum)) + { +#ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__ + LOG("HNIntranuke2025",pINFO) << "AbsorbHN failed: Pauli blocking"; +#endif + /* + p->SetStatus(kIStHadronInTheNucleus); + //disable until needed + // utils::intranuke2025::StepParticle(p,fFreeStep,fTrackingRadius); + ev->AddParticle(*p); + return; + */ + // new attempt at error handling: + LOG("HNIntranuke2025", pINFO) << "AbsorbHN failed: Pauli blocking"; + exceptions::INukeException exception; + exception.SetReason("hN absorption failed"); + throw exception; + } + + // handle remnant nucleus updates + fRemnZ--; + fRemnA -=2; + fRemnP4 -= TLorentzVector(tP2_1L,E2_1L); + fRemnP4 -= TLorentzVector(tP2_2L,E2_2L); + + // get random phi angle, distributed uniformally in 360 deg + PHI3 = 2 * kPi * rnd->RndFsi().Rndm(); + + tP3L = P3zL*bDir + P3tL*tTrans; + tP4L = P4zL*bDir + P4tL*tTrans; + + tP3L.Rotate(PHI3,bDir); // randomize transverse components + tP4L.Rotate(PHI3,bDir); + + E3L = TMath::Sqrt(P3L*P3L + M3*M3); + E4L = TMath::Sqrt(P4L*P4L + M4*M4); + + // create t particle w/ appropriate momenta, code, and status + // set target's mom to be the mom of the hadron that was cloned + GHepParticle * t = new GHepParticle(*p); + t->SetFirstMother(p->FirstMother()); + t->SetLastMother(p->LastMother()); + + TLorentzVector t4P4L(tP4L,E4L); + t->SetPdgCode(s2code); + t->SetMomentum(t4P4L); + t->SetStatus(kIStHadronInTheNucleus); + + // adjust p to reflect scattering + TLorentzVector t4P3L(tP3L,E3L); + p->SetPdgCode(scode); + p->SetMomentum(t4P3L); + p->SetStatus(kIStHadronInTheNucleus); + +#ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__ + LOG("HNIntranuke2025", pDEBUG) + << "|p3| = " << (P3L) << ", E3 = " << (E3L); + LOG("HNIntranuke2025", pDEBUG) + << "|p4| = " << (P4L) << ", E4 = " << (E4L); +#endif + + ev->AddParticle(*p); + ev->AddParticle(*t); + + delete t; // delete particle clone +} +//___________________________________________________________________________ +void HNIntranuke2025::ElasHN( + GHepRecord * ev, GHepParticle * p, INukeFateHN_t fate) const +{ + // scatters particle within nucleus + +#ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__ + LOG("HNIntranuke2025", pDEBUG) + << "ElasHN() is invoked for a : " << p->Name() + << " whose fate is : " << INukeHadroFates::AsString(fate); +#endif + + if(fate!=kIHNFtCEx && fate!=kIHNFtElas) + { + LOG("HNIntranuke2025", pWARN) + << "ElasHN() cannot handle fate: " << INukeHadroFates::AsString(fate); + return; + } + + // Random number generator + RandomGen * rnd = RandomGen::Instance(); + + // vars for incoming particle, target, and scattered pdg codes + int pcode = p->Pdg(); + int tcode, scode, s2code; + double ppcnt = (double) fRemnZ / (double) fRemnA; // % of protons + + // Select a target randomly, weighted to # + // -- Unless, of course, the fate is CEx, + // -- in which case the target may be deterministic + // Also assign scattered particle code + if(fate==kIHNFtCEx) + { + if(pcode==kPdgPiP) {tcode = kPdgNeutron; scode = kPdgPi0; s2code = kPdgProton;} + else if(pcode==kPdgPiM) {tcode = kPdgProton; scode = kPdgPi0; s2code = kPdgNeutron;} + else if(pcode==kPdgKP) {tcode = kPdgNeutron; scode = kPdgK0; s2code = kPdgProton;} + else + { + // for pi0 + tcode = (rnd->RndFsi().Rndm()<=ppcnt)?(kPdgProton) :(kPdgNeutron); + scode = (tcode == kPdgProton) ?(kPdgPiP) :(kPdgPiM); + s2code = (tcode == kPdgProton) ?(kPdgNeutron):(kPdgProton); + } + } + else + { + tcode = (rnd->RndFsi().Rndm()<=ppcnt)?(kPdgProton):(kPdgNeutron); + scode = pcode; + s2code = tcode; + } + + // get random scattering angle + double C3CM = fHadroData2025->IntBounce(p,tcode,scode,fate); + if (C3CM<-1.) + { + p->SetStatus(kIStStableFinalState); + ev->AddParticle(*p); + return; + } + + // create scattered particle + GHepParticle * t = new GHepParticle(*p); + t->SetPdgCode(tcode); + double Mt = t->Mass(); + //t->SetMomentum(TLorentzVector(0,0,0,Mt)); + t->SetRemovalEnergy(0); + // handle fermi momentum + if(fDoFermi) + { + // Handle fermi target + Target target(ev->TargetNucleus()->Pdg()); + //LOG("HAIntranuke2025", pNOTICE) << "Nuclmodel= " << fNuclmodel->ModelType(target) ; + target.SetHitNucPdg(tcode); + fNuclmodel->GenerateNucleon(target); + TVector3 tP3L = fFermiFac * fNuclmodel->Momentum3(); + double tE = TMath::Sqrt(tP3L.Mag2() + Mt*Mt); + t->SetMomentum(TLorentzVector(tP3L,tE)); + } + else + { + t->SetMomentum(TLorentzVector(0,0,0,Mt)); + } + + bool pass = utils::intranuke2025::TwoBodyCollision(ev,pcode,tcode,scode,s2code,C3CM, + p,t,fRemnA,fRemnZ,fRemnP4,kIMdHN); + +#ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__ + LOG("HNIntranuke2025",pDEBUG) + << "|p3| = " << P3L << ", E3 = " << E3L; + LOG("HNIntranuke2025",pDEBUG) + << "|p4| = " << P4L << ", E4 = " << E4L; +#endif + + if (pass==true) + { + ev->AddParticle(*p); + ev->AddParticle(*t); + } else + { + delete t; //fixes memory leak + LOG("HNIntranuke2025", pINFO) << "Elastic in hN failed calling TwoBodyCollision"; + exceptions::INukeException exception; + exception.SetReason("hN scattering kinematics through TwoBodyCollision failed"); + throw exception; + } + + delete t; + +} +//___________________________________________________________________________ +void HNIntranuke2025::InelasticHN(GHepRecord* ev, GHepParticle* p) const +{ + // Aaron Meyer (Jan 2010) + // Updated version of InelasticHN + + GHepParticle s1(*p); + GHepParticle s2(*p); + GHepParticle s3(*p); + s2.SetRemovalEnergy(0); + s3.SetRemovalEnergy(0); + + + + if (utils::intranuke2025::PionProduction(ev,p,&s1,&s2,&s3,fRemnA,fRemnZ,fRemnP4,fDoFermi,fFermiFac,fFermiMomentum,fNuclmodel)) + { + // set status of particles and return + + s1.SetStatus(kIStHadronInTheNucleus); + s2.SetStatus(kIStHadronInTheNucleus); + s3.SetStatus(kIStHadronInTheNucleus); + + ev->AddParticle(s1); + ev->AddParticle(s2); + ev->AddParticle(s3); + } + else + { + LOG("HNIntranuke2025", pNOTICE) << "Error: could not create pion production final state"; + exceptions::INukeException exception; + exception.SetReason("PionProduction in hN failed"); + throw exception; + } + return; + +} +//___________________________________________________________________________ +void HNIntranuke2025::GammaInelasticHN(GHepRecord* ev, GHepParticle* p, INukeFateHN_t fate) const +{ + // This function handles pion photoproduction reactions + +#ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__ + LOG("HNIntranuke2025", pDEBUG) + << "GammaInelasticHN() is invoked for a : " << p->Name() + << " whose fate is : " << INukeHadroFates::AsString(fate); +#endif + + if(fate!=kIHNFtInelas && p->Pdg()!=kPdgGamma) + { + LOG("HNIntranuke2025", pWARN) + << "GammaInelasticHN() cannot handle fate: " << INukeHadroFates::AsString(fate); + return; + } + + // random number generator + RandomGen * rnd = RandomGen::Instance(); + + // vars for incoming particle, target, and scattered reaction products + double ppcnt = (double) fRemnZ / (double) fRemnA; // % of protons + int pcode = p->Pdg(); + int tcode = (rnd->RndFsi().Rndm()<=ppcnt)?(kPdgProton):(kPdgNeutron); + int scode, s2code; + double ke = p->KinE() / units::MeV; + + LOG("HNIntranuke2025", pNOTICE) + << "Particle code: " << pcode << ", target: " << tcode; + + + if (rnd->RndFsi().Rndm() * (fHadroData2025 -> XSecGamp_fs() -> Evaluate(ke) + + fHadroData2025 -> XSecGamn_fs() -> Evaluate(ke) ) + <= fHadroData2025 -> XSecGamp_fs() -> Evaluate(ke) ) { scode = kPdgProton; } + else { scode = kPdgNeutron; } + + //scode=fHadroData2025->AngleAndProduct(p,tcode,C3CM,fate); + //double C3CM = 0.0; // cos of scattering angle + double C3CM = fHadroData2025->IntBounce(p,tcode,scode,fate); + + if ((tcode == kPdgProton ) && (scode==kPdgProton )) {s2code=kPdgPi0;} + else if ((tcode == kPdgProton ) && (scode==kPdgNeutron)) {s2code=kPdgPiP;} + else if ((tcode == kPdgNeutron) && (scode==kPdgProton )) {s2code=kPdgPiM;} + else if ((tcode == kPdgNeutron) && (scode==kPdgNeutron)) {s2code=kPdgPi0;} + else { + LOG("HNIntranuke2025", pERROR) + << "Error: could not determine particle final states"; + ev->AddParticle(*p); + return; + } + + LOG("HNIntranuke2025", pNOTICE) + << "GammaInelastic fate: " << INukeHadroFates::AsString(fate); + LOG("HNIntranuke2025", pNOTICE) + << " final state: " << scode << " and " << s2code; + LOG("HNIntranuke2025", pNOTICE) + << " scattering angle: " << C3CM; + + GHepParticle * t = new GHepParticle(*p); + t->SetPdgCode(tcode); + double Mt = t->Mass(); + + // handle fermi momentum + if(fDoFermi) + { + // Handle fermi target + Target target(ev->TargetNucleus()->Pdg()); + + target.SetHitNucPdg(tcode); + fNuclmodel->GenerateNucleon(target); + TVector3 tP3L = fFermiFac * fNuclmodel->Momentum3(); + double tE = TMath::Sqrt(tP3L.Mag2() + Mt*Mt); + t->SetMomentum(TLorentzVector(tP3L,tE)); + } + else + { + t->SetMomentum(TLorentzVector(0,0,0,Mt)); + } + + bool pass = utils::intranuke2025::TwoBodyCollision(ev,pcode,tcode,scode,s2code,C3CM, + p,t,fRemnA,fRemnZ,fRemnP4,kIMdHN); + +#ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__ + LOG("HNIntranuke2025",pDEBUG) + << "|p3| = " << P3L << ", E3 = " << E3L; + LOG("HNIntranuke2025",pDEBUG) + << "|p4| = " << P4L << ", E4 = " << E4L; +#endif + + if (pass==true) + { + //p->SetStatus(kIStStableFinalState); + //t->SetStatus(kIStStableFinalState); + ev->AddParticle(*p); + ev->AddParticle(*t); + } else + { + ev->AddParticle(*p); + } + + delete t; + +} +//___________________________________________________________________________ +int HNIntranuke2025::HandleCompoundNucleus(GHepRecord* ev, GHepParticle* p, int mom) const +{ + + // handle compound nucleus option + // -- Call the PreEquilibrium function + if( fDoCompoundNucleus && IsInNucleus(p) && pdg::IsNeutronOrProton(p->Pdg())) + { // random number generator + //unused var - quiet compiler warning//RandomGen * rnd = RandomGen::Instance(); + + if((p->KinE() < fEPreEq) ) + { + if(fRemnA>4) //this needs to be matched to what is in PreEq and Eq + { + GHepParticle * sp = new GHepParticle(*p); + sp->SetFirstMother(mom); + // this was PreEquilibrium - now just used for hN + //same arguement lists for PreEq and Eq + utils::intranuke2025::Equilibrium(ev,sp,fRemnA,fRemnZ,fRemnP4, + fDoFermi,fFermiFac,fNuclmodel,fNucRmvE,kIMdHN); + + delete sp; + return 2; + } + else + { + // nothing left to interact with! + LOG("HNIntranuke2025", pNOTICE) + << "*** Nothing left to interact with, escaping."; + GHepParticle * sp = new GHepParticle(*p); + sp->SetFirstMother(mom); + sp->SetStatus(kIStStableFinalState); + ev->AddParticle(*sp); + delete sp; + return 1; + } + } + } + return 0; +} +//___________________________________________________________________________ +bool HNIntranuke2025::HandleCompoundNucleusHN(GHepRecord* ev, GHepParticle* p) const +{ + return (this->HandleCompoundNucleus(ev,p,p->FirstMother())==2); +} +//___________________________________________________________________________ + +void HNIntranuke2025::LoadConfig(void) +{ + // load hadronic cross sections + fHadroData2025 = INukeHadroData2025::Instance(); + + // fermi momentum setup + // this is specifically set in Intranuke2025::Configure(string) + fNuclmodel = dynamic_cast( this -> SubAlg("NuclearModel") ) ; + + // other intranuke config params + GetParam( "NUCL-R0", fR0 ); // fm + GetParam( "NUCL-NR", fNR ); + + GetParam( "INUKE-NucRemovalE", fNucRmvE ); // GeV + GetParam( "INUKE-HadStep", fHadStep ) ; + GetParam( "INUKE-NucAbsFac", fNucAbsFac ) ; + GetParam( "INUKE-NucQEFac", fNucQEFac ) ; + GetParam( "INUKE-NucCEXFac", fNucCEXFac ) ; + GetParam( "INUKE-Energy_Pre_Eq", fEPreEq ) ; + GetParam( "INUKE-FermiFac", fFermiFac ) ; + GetParam( "INUKE-FermiMomentum", fFermiMomentum ) ; + + GetParam( "INUKE-DoCompoundNucleus", fDoCompoundNucleus ) ; + GetParam( "INUKE-DoFermi", fDoFermi ) ; + GetParam( "INUKE-XsecNNCorr", fXsecNNCorr ) ; + GetParamDef( "AltOset", fAltOset, false ) ; + + GetParam( "HNINUKE-UseOset", fUseOset ) ; + GetParam( "HNINUKE-DelRPion", fDelRPion ) ; + GetParam( "HNINUKE-DelRNucleon", fDelRNucleon ) ; + + GetParamDef( "FSI-ChargedPion-MFPScale", fChPionMFPScale, 1.0 ) ; + GetParamDef( "FSI-NeutralPion-MFPScale", fNeutralPionMFPScale, 1.0 ) ; + GetParamDef( "FSI-Nucleon-MFPScale", fNucleonMFPScale, 1.0 ) ; + + // report + LOG("HNIntranuke2025", pINFO) << "Settings for Intranuke2025 mode: " << INukeMode::AsString(kIMdHN); + LOG("HNIntranuke2025", pWARN) << "R0 = " << fR0 << " fermi"; + LOG("HNIntranuke2025", pWARN) << "NR = " << fNR; + LOG("HNIntranuke2025", pWARN) << "DelRPion = " << fDelRPion; + LOG("HNIntranuke2025", pWARN) << "DelRNucleon = " << fDelRNucleon; + LOG("HNIntranuke2025", pWARN) << "HadStep = " << fHadStep << " fermi"; + LOG("HNIntranuke2025", pWARN) << "NucAbsFac = " << fNucAbsFac; + LOG("HNIntranuke2025", pWARN) << "NucQEFac = " << fNucQEFac; + LOG("HNIntranuke2025", pWARN) << "NucCEXFac = " << fNucCEXFac; + LOG("HNIntranuke2025", pWARN) << "EPreEq = " << fEPreEq; + LOG("HNIntranuke2025", pWARN) << "FermiFac = " << fFermiFac; + LOG("HNIntranuke2025", pWARN) << "FermiMomtm = " << fFermiMomentum; + LOG("HNIntranuke2025", pWARN) << "DoFermi? = " << ((fDoFermi)?(true):(false)); + LOG("HNIntranuke2025", pWARN) << "DoCmpndNuc? = " << ((fDoCompoundNucleus)?(true):(false)); + LOG("HNIntranuke2025", pWARN) << "useOset = " << fUseOset; + LOG("HNIntranuke2025", pWARN) << "altOset = " << fAltOset; + LOG("HNIntranuke2025", pWARN) << "XsecNNCorr? = " << ((fXsecNNCorr)?(true):(false)); + LOG("HNIntranuke2025", pWARN) << "FSI-ChargedPion-MFPScale = " << fChPionMFPScale; + LOG("HNIntranuke2025", pWARN) << "FSI-NeutralPion-MFPScale = " << fNeutralPionMFPScale; +} +//___________________________________________________________________________ + +INukeFateHN_t HNIntranuke2025::HadronFateOset () const +{ + //LOG("HNIntranuke2025", pWARN) << "IN HadronFateOset"; + + //LOG("HNIntranuke2025", pWARN) << "{ frac abs = " << osetUtils::currentInstance->getAbsorptionFraction(); + //LOG("HNIntranuke2025", pWARN) << " frac cex = " << osetUtils::currentInstance->getCexFraction() << " }"; + + double fractionAbsorption = osetUtils::currentInstance->getAbsorptionFraction(); + double fractionCex = osetUtils::currentInstance->getCexFraction (); + double fractionElas = 1 - (fractionAbsorption + fractionCex); + + fractionCex *= fNucCEXFac; // scaling factors + fractionAbsorption *= fNucAbsFac; + fractionElas *= fNucQEFac; + + double totalFrac = fractionCex + fractionAbsorption + fractionElas; + + RandomGen *randomGenerator = RandomGen::Instance(); + const double randomNumber = randomGenerator->RndFsi().Rndm() * totalFrac; + + LOG("HNIntranuke2025", pNOTICE) << "{ frac abs = " << fractionAbsorption; + LOG("HNIntranuke2025", pNOTICE) << " frac cex = " << fractionCex; + LOG("HNIntranuke2025", pNOTICE) << " frac elas = " << fractionElas << " }"; + + if (randomNumber < fractionAbsorption && fRemnA > 1) return kIHNFtAbs; + else if (randomNumber < fractionAbsorption + fractionCex) return kIHNFtCEx; + else return kIHNFtElas; +} diff --git a/src/Physics/HadronTransport/HNIntranuke2025.h b/src/Physics/HadronTransport/HNIntranuke2025.h new file mode 100644 index 000000000..6177f55dd --- /dev/null +++ b/src/Physics/HadronTransport/HNIntranuke2025.h @@ -0,0 +1,91 @@ +//____________________________________________________________________________ +/*! + +\class genie::Intranuke + +\brief The INTRANUKE intranuclear hadron transport MC. + Is a concrete implementation of the EventRecordVisitorI interface. + +\ref R.Merenyi et al., Phys.Rev.D45 (1992) + R.D.Ransome, Nucl.Phys.B 139 (2005) + + Current INTRANUKE development is led by S.Dytman and H.Gallagher. + The original INTRANUKE cascade MC was developed (in fortran) for the + NeuGEN MC by R.Edgecock, G.F.Pearce, W.A.Mann, R.Merenyi and others. + +\author Steve Dytman , Pittsburgh University + Aaron Meyer , Pittsburgh University + Alex Bell, Pittsburgh University + Hugh Gallagher , Tufts University + Costas Andreopoulos STFC, Rutherford Lab + +\created September 20, 2005 + +\cpright Copyright (c) 2003-2024, The GENIE Collaboration + For the full text of the license visit http://copyright.genie-mc.org + +*/ +//____________________________________________________________________________ + +#ifndef _HN_INTRANUKE_2025_H_ +#define _HN_INTRANUKE_2025_H_ + +#include + +#include "Physics/NuclearState/NuclearModelI.h" +#include "Framework/Algorithm/AlgFactory.h" +#include "Framework/EventGen/EventRecordVisitorI.h" +#include "Physics/HadronTransport/INukeMode.h" +#include "Physics/HadronTransport/INukeHadroFates.h" +#include "Physics/HadronTransport/Intranuke2025.h" + +class TLorentzVector; +class TVector3; + +namespace genie { + +class GHepParticle; +class INukeHadroData; +class PDGCodeList; + +class HNIntranuke2025 : public Intranuke2025 { + +friend class IntranukeTester; + +public : + HNIntranuke2025(); + HNIntranuke2025(string config); + ~HNIntranuke2025(); + + void ProcessEventRecord(GHepRecord * event_rec) const; + + virtual string GetINukeMode() const {return "hN2025";}; + virtual string GetGenINukeMode() const {return "hN";}; + +private: + + void LoadConfig (void); + + // methods specific to intranuke HN-mode + void SimulateHadronicFinalState (GHepRecord* ev, GHepParticle* p) const; + INukeFateHN_t HadronFateHN (const GHepParticle* p) const; + INukeFateHN_t HadronFateOset () const; + double FateWeight (int pdgc, INukeFateHN_t fate) const; + void ElasHN (GHepRecord* ev, GHepParticle* p, INukeFateHN_t fate) const; + void AbsorbHN (GHepRecord* ev, GHepParticle* p, INukeFateHN_t fate) const; + void InelasticHN (GHepRecord* ev, GHepParticle* p) const; + void GammaInelasticHN (GHepRecord* ev, GHepParticle* p, INukeFateHN_t fate) const; + bool HandleCompoundNucleusHN (GHepRecord* ev, GHepParticle* p) const; + int HandleCompoundNucleus(GHepRecord* ev, GHepParticle* p, int mom) const; + + mutable int nuclA; ///< value of A for the target nucleus in hA mode + + // data members specific to intranuke HN-mode + double fNucQEFac; + +}; + +} // genie namespace + +#endif // _HN_INTRANUKE_ALT_H_ + diff --git a/src/Physics/HadronTransport/INukeHadroData2025.cxx b/src/Physics/HadronTransport/INukeHadroData2025.cxx new file mode 100644 index 000000000..80af260c7 --- /dev/null +++ b/src/Physics/HadronTransport/INukeHadroData2025.cxx @@ -0,0 +1,1892 @@ +//____________________________________________________________________________ +/* + Copyright (c) 2003-2024, The GENIE Collaboration + For the full text of the license visit http://copyright.genie-mc.org + + + Costas Andreopoulos , Rutherford Lab. + Steve Dytman , Pittsburgh Univ. + Aaron Meyer , Pittsburgh Univ. + Alex Bell, Pittsburgh Univ. + February 01, 2007 + + For the class documentation see the corresponding header file. + + Important revisions after version 2.0.0 : + @ Dec 06, 2008 - CA + Tweak dtor so as not to clutter the output if GENIE exits in err so as to + spot the fatal mesg immediately. + @ Jul 15, 2010 - AM + MeanFreePath now distinguishes between protons and neutrons. To account for + this, additional splines were added for each nucleon. Absorption fates + condensed into a single fate, splines updated accordingly. Added gamma and kaon + splines.Outdated splines were removed. Function IntBounce implemented to calculate + a CM scattering angle for given probe, target, product, and fate. AngleAndProduct + similar to IntBounce, but also determines the target nucleon. + @ May 01, 2012 - CA + Pick data from $GENIE/data/evgen/intranuke/ + @ Jan 9, 2015 - SD, Nick Geary, Tomek Golan + Added 2014 version of INTRANUKE codes for independent development. + @ Oct, 2015 - TG + Added 2015 version of INTRANUKE codes for independent development. + Include Oset data files. + @ Apr, 2016 - Flor Blasczyk + Added K+ cex data files +*/ +//____________________________________________________________________________ + +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +#include "Framework/Conventions/Constants.h" +#include "Framework/GHEP/GHepParticle.h" +#include "Physics/HadronTransport/INukeHadroData2025.h" +#include "Framework/Messenger/Messenger.h" +#include "Framework/Numerical/RandomGen.h" +#include "Framework/Numerical/Spline.h" +#include "Framework/ParticleData/PDGCodes.h" + +using std::ostringstream; +using std::ios; + +using namespace genie; +using namespace genie::constants; + +//____________________________________________________________________________ +INukeHadroData2025 * INukeHadroData2025::fInstance = 0; +//____________________________________________________________________________ +double INukeHadroData2025::fMinKinEnergy = 1.0; // MeV +double INukeHadroData2025::fMaxKinEnergyHA = 999.0; // MeV +double INukeHadroData2025::fMaxKinEnergyHN = 1799.0; // MeV +//____________________________________________________________________________ +INukeHadroData2025::INukeHadroData2025() +{ + this->LoadCrossSections(); + fInstance = 0; +} +//____________________________________________________________________________ +INukeHadroData2025::~INukeHadroData2025() +{ + + // pi+n/p hA x-section splines + delete fXSecPipn_Tot; + delete fXSecPipn_CEx; + delete fXSecPipn_Elas; + delete fXSecPipn_Reac; + delete fXSecPipp_Tot; + delete fXSecPipp_CEx; + delete fXSecPipp_Elas; + delete fXSecPipp_Reac; + delete fXSecPipd_Abs; + + delete fXSecPp_Cmp; //added to fix memory leak; no noticeable effect, but good convention. + delete fXSecPn_Cmp; + delete fXSecNn_Cmp; + delete fXSecPp_Tot; + delete fXSecPp_Elas; + delete fXSecPp_Reac; + delete fXSecPn_Tot; + delete fXSecPn_Elas; + delete fXSecPn_Reac; + delete fXSecNn_Tot; + delete fXSecNn_Elas; + delete fXSecNn_Reac; + + // pi0n/p hA x-section splines + delete fXSecPi0n_Tot; + delete fXSecPi0n_CEx; + delete fXSecPi0n_Elas; + delete fXSecPi0n_Reac; + delete fXSecPi0p_Tot; + delete fXSecPi0p_CEx; + delete fXSecPi0p_Elas; + delete fXSecPi0p_Reac; + delete fXSecPi0d_Abs; + + // K+N x-section splines + delete fXSecKpn_Elas; + delete fXSecKpp_Elas; + delete fXSecKpn_CEx; + delete fXSecKpN_Abs; + delete fXSecKpN_Tot; + + // gamma x-section splines (inelastic only) + delete fXSecGamp_fs; + delete fXSecGamn_fs; + delete fXSecGamN_Tot; + + // N+A x-section splines + delete fFracPA_Tot; + // delete fFracPA_Elas; + delete fFracPA_Inel; + delete fFracPA_CEx; + delete fFracPA_Abs; + delete fFracPA_PiPro; + delete fFracNA_Tot; + // delete fFracNA_Elas; + delete fFracNA_Inel; + delete fFracNA_CEx; + delete fFracNA_Abs; + delete fFracNA_PiPro; + + delete fFracPA_Cmp; // cmp - add support later + delete fFracNA_Cmp; + + // hN data + delete fhN2dXSecPP_Elas; + delete fhN2dXSecNP_Elas; + delete fhN2dXSecPipN_Elas; + delete fhN2dXSecPi0N_Elas; + delete fhN2dXSecPimN_Elas; + delete fhN2dXSecKpN_Elas; + delete fhN2dXSecKpP_Elas; + delete fhN2dXSecPiN_CEx; + delete fhN2dXSecPiN_Abs; + delete fhN2dXSecGamPi0P_Inelas; + delete fhN2dXSecGamPi0N_Inelas; + delete fhN2dXSecGamPipN_Inelas; + delete fhN2dXSecGamPimP_Inelas; + delete fhN2dXSecKpN_CEx; + + // delete TPipA_Tot; + delete TfracPipA_Abs; + delete TfracPipA_CEx; +// delete TfracPipA_Elas; + delete TfracPipA_Inelas; + delete TfracPipA_PiPro; + + delete TPipA_Tot; + delete TPipA_Abs; + delete TPipA_CEx; + delete TPipA_Inelas; + delete TPipA_PiPro; + + + // K+A x-section fraction splines + delete fFracKA_Tot; + delete fFracKA_Elas; + delete fFracKA_CEx; + delete fFracKA_Inel; + delete fFracKA_Abs; + +} +//____________________________________________________________________________ +INukeHadroData2025 * INukeHadroData2025::Instance() +{ + if(fInstance == 0) { + LOG("INukeData", pINFO) << "INukeHadroData2025 late initialization"; + static INukeHadroData2025::Cleaner cleaner; + cleaner.DummyMethodAndSilentCompiler(); + fInstance = new INukeHadroData2025; + } + return fInstance; +} +//____________________________________________________________________________ +void INukeHadroData2025::LoadCrossSections(void) +{ +// Loads hadronic x-section data + + //-- Get the top-level directory with input hadron cross-section data + // (search for $GINUKEHADRONDATA or use default location) + string data_dir = (gSystem->Getenv("GINUKEHADRONDATA")) ? + string(gSystem->Getenv("GINUKEHADRONDATA")) : + string(gSystem->Getenv("GENIE")) + string("/data/evgen/intranuke"); + + LOG("INukeData", pINFO) + << "Loading INTRANUKE hadron data from: " << data_dir; + + //-- Build filenames + + string datafile_NN = data_dir + "/tot_xsec/intranuke-xsections-NN2014.dat"; + string datafile_pipN = data_dir + "/tot_xsec/intranuke-xsections-pi+N.dat"; + string datafile_pi0N = data_dir + "/tot_xsec/intranuke-xsections-pi0N.dat"; + string datafile_NA = data_dir + "/tot_xsec/intranuke-fractions-NA2016.dat"; + string datafile_KA = data_dir + "/tot_xsec/intranuke-fractions-KA.dat"; + string datafile_gamN = data_dir + "/tot_xsec/intranuke-xsections-gamN.dat"; + string datafile_kN = data_dir + "/tot_xsec/intranuke-xsections-kaonN2018.dat"; + + //-- Make sure that all data files are available + + assert( ! gSystem->AccessPathName(datafile_NN. c_str()) ); + assert( ! gSystem->AccessPathName(datafile_pipN.c_str()) ); + assert( ! gSystem->AccessPathName(datafile_pi0N.c_str()) ); + assert( ! gSystem->AccessPathName(datafile_NA. c_str()) ); + assert( ! gSystem->AccessPathName(datafile_KA. c_str()) ); + assert( ! gSystem->AccessPathName(datafile_gamN.c_str()) ); + assert( ! gSystem->AccessPathName(datafile_kN. c_str()) ); + + LOG("INukeData", pINFO) << "Found all necessary data files..."; + + //-- Load data files + + TTree data_NN; + TTree data_pipN; + TTree data_pi0N; + TTree data_NA; + TTree data_KA; + TTree data_gamN; + TTree data_kN; + + data_NN.ReadFile(datafile_NN.c_str(),"ke/D:pp_tot/D:pp_elas/D:pp_reac/D:pn_tot/D:pn_elas/D:pn_reac/D:nn_tot/D:nn_elas/D:nn_reac/D:pp_cmp/D:pn_cmp/D:nn_cmp/D"); + data_pipN.ReadFile(datafile_pipN.c_str(), + "ke/D:pipn_tot/D:pipn_cex/D:pipn_elas/D:pipn_reac/D:pipp_tot/D:pipp_cex/D:pipp_elas/D:pipp_reac/D:pipd_abs"); + data_pi0N.ReadFile(datafile_pi0N.c_str(), + "ke/D:pi0n_tot/D:pi0n_cex/D:pi0n_elas/D:pi0n_reac/D:pi0p_tot/D:pi0p_cex/D:pi0p_elas/D:pi0p_reac/D:pi0d_abs"); + //data_NA.ReadFile(datafile_NA.c_str(), + //"ke/D:pA_tot/D:pA_elas/D:pA_inel/D:pA_cex/D:pA_abs/D:pA_pipro/D"); // add support for cmp here (?) + data_NA.ReadFile(datafile_NA.c_str(), + "ke/D:pA_tot/D:pA_inel/D:pA_cex/D:pA_abs/D:pA_pipro/D:pA_cmp/D"); // add support for cmp here (?) + data_gamN.ReadFile(datafile_gamN.c_str(), + "ke/D:pi0p_tot/D:pipn_tot/D:pimp_tot/D:pi0n_tot/D:gamp_fs/D:gamn_fs/D:gamN_tot/D"); + data_kN.ReadFile(datafile_kN.c_str(), + "ke/D:kpp_elas/D:kpn_elas/D:kpn_cex/D:kp_abs/D:kpN_tot/D"); + data_KA.ReadFile(datafile_KA.c_str(), + "ke/D:KA_tot/D:KA_elas/D:KA_inel/D:KA_abs/D"); + + LOG("INukeData", pDEBUG) << "Number of data rows in NN : " << data_NN.GetEntries(); + LOG("INukeData", pDEBUG) << "Number of data rows in pipN : " << data_pipN.GetEntries(); + LOG("INukeData", pDEBUG) << "Number of data rows in pi0N : " << data_pi0N.GetEntries(); + LOG("INukeData", pDEBUG) << "Number of data rows in NA : " << data_NA.GetEntries(); + LOG("INukeData", pDEBUG) << "Number of data rows in KA : " << data_KA.GetEntries(); + LOG("INukeData", pDEBUG) << "Number of data rows in gamN : " << data_gamN.GetEntries(); + LOG("INukeData", pDEBUG) << "Number of data rows in kN : " << data_kN.GetEntries(); + + LOG("INukeData", pINFO) << "Done loading all x-section files..."; + + //-- Build x-section splines + + // p/n+p/n hA x-section splines + fXSecPp_Tot = new Spline(&data_NN, "ke:pp_tot"); + fXSecPp_Elas = new Spline(&data_NN, "ke:pp_elas"); + fXSecPp_Reac = new Spline(&data_NN, "ke:pp_reac"); + fXSecPn_Tot = new Spline(&data_NN, "ke:pn_tot"); + fXSecPn_Elas = new Spline(&data_NN, "ke:pn_elas"); + fXSecPn_Reac = new Spline(&data_NN, "ke:pn_reac"); + fXSecNn_Tot = new Spline(&data_NN, "ke:nn_tot"); + fXSecNn_Elas = new Spline(&data_NN, "ke:nn_elas"); + fXSecNn_Reac = new Spline(&data_NN, "ke:nn_reac"); + fXSecPp_Cmp = new Spline(&data_NN, "ke:pp_cmp"); //for compound nucleus fate + fXSecPn_Cmp = new Spline(&data_NN, "ke:pn_cmp"); + fXSecNn_Cmp = new Spline(&data_NN, "ke:nn_cmp"); + + // pi+n/p hA x-section splines + fXSecPipn_Tot = new Spline(&data_pipN, "ke:pipn_tot"); + fXSecPipn_CEx = new Spline(&data_pipN, "ke:pipn_cex"); + fXSecPipn_Elas = new Spline(&data_pipN, "ke:pipn_elas"); + fXSecPipn_Reac = new Spline(&data_pipN, "ke:pipn_reac"); + fXSecPipp_Tot = new Spline(&data_pipN, "ke:pipp_tot"); + fXSecPipp_CEx = new Spline(&data_pipN, "ke:pipp_cex"); + fXSecPipp_Elas = new Spline(&data_pipN, "ke:pipp_elas"); + fXSecPipp_Reac = new Spline(&data_pipN, "ke:pipp_reac"); + fXSecPipd_Abs = new Spline(&data_pipN, "ke:pipd_abs"); + + // pi0n/p hA x-section splines + fXSecPi0n_Tot = new Spline(&data_pi0N, "ke:pi0n_tot"); + fXSecPi0n_CEx = new Spline(&data_pi0N, "ke:pi0n_cex"); + fXSecPi0n_Elas = new Spline(&data_pi0N, "ke:pi0n_elas"); + fXSecPi0n_Reac = new Spline(&data_pi0N, "ke:pi0n_reac"); + fXSecPi0p_Tot = new Spline(&data_pi0N, "ke:pi0p_tot"); + fXSecPi0p_CEx = new Spline(&data_pi0N, "ke:pi0p_cex"); + fXSecPi0p_Elas = new Spline(&data_pi0N, "ke:pi0p_elas"); + fXSecPi0p_Reac = new Spline(&data_pi0N, "ke:pi0p_reac"); + fXSecPi0d_Abs = new Spline(&data_pi0N, "ke:pi0d_abs"); + + // K+N x-section splines + fXSecKpn_Elas = new Spline(&data_kN, "ke:kpn_elas"); + fXSecKpp_Elas = new Spline(&data_kN, "ke:kpp_elas"); + fXSecKpn_CEx = new Spline(&data_kN, "ke:kpn_cex"); + fXSecKpN_Abs = 0; // new Spline(&data_kN, "ke:kp_abs"); why not used? + fXSecKpN_Tot = new Spline(&data_kN, "ke:kpN_tot"); + + // gamma x-section splines + fXSecGamp_fs = new Spline(&data_gamN, "ke:gamp_fs"); + fXSecGamn_fs = new Spline(&data_gamN, "ke:gamn_fs"); + fXSecGamN_Tot = new Spline(&data_gamN, "ke:gamN_tot"); + + // N+A x-section fraction splines + fFracPA_Tot = new Spline(&data_NA, "ke:pA_tot"); + // fFracPA_Elas = new Spline(&data_NA, "ke:pA_elas"); + fFracPA_Inel = new Spline(&data_NA, "ke:pA_inel"); + fFracPA_CEx = new Spline(&data_NA, "ke:pA_cex"); + fFracPA_Abs = new Spline(&data_NA, "ke:pA_abs"); + fFracPA_PiPro = new Spline(&data_NA, "ke:pA_pipro"); + fFracNA_Tot = new Spline(&data_NA, "ke:pA_tot"); // assuming nA same as pA + // fFracNA_Elas = new Spline(&data_NA, "ke:pA_elas"); + fFracNA_Inel = new Spline(&data_NA, "ke:pA_inel"); + fFracNA_CEx = new Spline(&data_NA, "ke:pA_cex"); + fFracNA_Abs = new Spline(&data_NA, "ke:pA_abs"); + fFracNA_PiPro = new Spline(&data_NA, "ke:pA_pipro"); + + fFracPA_Cmp = new Spline(&data_NA, "ke:pA_cmp"); //cmp - add support later + fFracNA_Cmp = new Spline(&data_NA, "ke:pA_cmp"); + + // K+A x-section fraction splines + fFracKA_Tot = new Spline(&data_KA, "ke:KA_tot"); + fFracKA_Elas = new Spline(&data_KA, "ke:KA_elas"); + fFracKA_CEx = 0; // new Spline(&data_KA, "ke:KA_cex"); //Added, but needs to be computed + fFracKA_Inel = new Spline(&data_KA, "ke:KA_inel"); + fFracKA_Abs = new Spline(&data_KA, "ke:KA_abs"); + // + // hN stuff + // + + + // kIHNFtElas + // pp, nn --> read from pp/pp%.txt + // pn, np --> read from pp/pn%.txt + // pi+ N --> read from pip/pip%.txt + // pi0 N --> read from pip/pip%.txt + // pi- N --> read from pim/pim%.txt + // K+ N --> read from kpn/kpn%.txt + // K+ P --> read from kpp/kpp%.txt + // kIHNFtCEx + // pi+, pi0, pi- --> read from pie/pie%.txt (using pip+n->pi0+p data) + // kIHNFtAbs + // pi+, pi0, pi- --> read from pid2p/pid2p%.txt (using pip+D->2p data) + // kIHNFtInelas + // gamma p -> p pi0 --> read from gampi0p/%-pi0p.txt + // gamma p -> n pi+ --> read from gampi+n/%-pi+n.txt + // gamma n -> n pi0 --> read from gampi0n/%-pi0n.txt + // gamma n -> p pi- --> read from gampi-p/%-pi-p.txt + + + // kIHNFtElas, pp&nn : + { + const int hN_ppelas_nfiles = 20; + const int hN_ppelas_points_per_file = 21; + const int hN_ppelas_npoints = hN_ppelas_points_per_file * hN_ppelas_nfiles; + + double hN_ppelas_energies[hN_ppelas_nfiles] = { + 50, 100, 150, 200, 250, 300, 350, 400, 450, 500, + 550, 600, 650, 700, 750, 800, 850, 900, 950, 1000 + }; + + double hN_ppelas_costh [hN_ppelas_points_per_file]; + double hN_ppelas_xsec [hN_ppelas_npoints]; + + int ipoint=0; + + for(int ifile = 0; ifile < hN_ppelas_nfiles; ifile++) { + // build filename + ostringstream hN_datafile; + double ke = hN_ppelas_energies[ifile]; + hN_datafile << data_dir << "/diff_ang/pp/pp" << ke << ".txt"; + // read data + ReadhNFile( + hN_datafile.str(), ke, hN_ppelas_points_per_file, + ipoint, hN_ppelas_costh, hN_ppelas_xsec,2); + }//loop over files + + fhN2dXSecPP_Elas = new BLI2DNonUnifGrid(hN_ppelas_nfiles,hN_ppelas_points_per_file, + hN_ppelas_energies,hN_ppelas_costh,hN_ppelas_xsec); + } + + // kIHNFtElas, pn&np : + { + const int hN_npelas_nfiles = 20; + const int hN_npelas_points_per_file = 21; + const int hN_npelas_npoints = hN_npelas_points_per_file * hN_npelas_nfiles; + + double hN_npelas_energies[hN_npelas_nfiles] = { + 50, 100, 150, 200, 250, 300, 350, 400, 450, 500, + 550, 600, 650, 700, 750, 800, 850, 900, 950, 1000 + }; + + double hN_npelas_costh [hN_npelas_points_per_file]; + double hN_npelas_xsec [hN_npelas_npoints]; + + int ipoint=0; + + for(int ifile = 0; ifile < hN_npelas_nfiles; ifile++) { + // build filename + ostringstream hN_datafile; + double ke = hN_npelas_energies[ifile]; + hN_datafile << data_dir << "/diff_ang/pn/pn" << ke << ".txt"; + // read data + ReadhNFile( + hN_datafile.str(), ke, hN_npelas_points_per_file, + ipoint, hN_npelas_costh, hN_npelas_xsec,2); + }//loop over files + + fhN2dXSecNP_Elas = new BLI2DNonUnifGrid(hN_npelas_nfiles,hN_npelas_points_per_file, + hN_npelas_energies,hN_npelas_costh,hN_npelas_xsec); + } + + // kIHNFtElas, pipN : + { + const int hN_pipNelas_nfiles = 60; + const int hN_pipNelas_points_per_file = 21; + const int hN_pipNelas_npoints = hN_pipNelas_points_per_file * hN_pipNelas_nfiles; + + double hN_pipNelas_energies[hN_pipNelas_nfiles] = { + 10, 20, 30, 40, 50, 60, 70, 80, 90, + 100, 110, 120, 130, 140, 150, 160, 170, 180, 190, + 200, 210, 220, 230, 240, 250, 260, 270, 280, 290, + 300, 340, 380, 420, 460, 500, 540, 580, 620, 660, + 700, 740, 780, 820, 860, 900, 940, 980, + 1020, 1060, 1100, 1140, 1180, 1220, 1260, + 1300, 1340, 1380, 1420, 1460, 1500 + }; + + double hN_pipNelas_costh [hN_pipNelas_points_per_file]; + double hN_pipNelas_xsec [hN_pipNelas_npoints]; + + int ipoint=0; + + for(int ifile = 0; ifile < hN_pipNelas_nfiles; ifile++) { + // build filename + ostringstream hN_datafile; + double ke = hN_pipNelas_energies[ifile]; + hN_datafile << data_dir << "/diff_ang/pip/pip" << ke << ".txt"; + // read data + ReadhNFile( + hN_datafile.str(), ke, hN_pipNelas_points_per_file, + ipoint, hN_pipNelas_costh, hN_pipNelas_xsec,2); + }//loop over files + + fhN2dXSecPipN_Elas = new BLI2DNonUnifGrid(hN_pipNelas_nfiles,hN_pipNelas_points_per_file, + hN_pipNelas_energies,hN_pipNelas_costh,hN_pipNelas_xsec); + } + + // kIHNFtElas, pi0N : + { + const int hN_pi0Nelas_nfiles = 60; + const int hN_pi0Nelas_points_per_file = 21; + const int hN_pi0Nelas_npoints = hN_pi0Nelas_points_per_file * hN_pi0Nelas_nfiles; + + double hN_pi0Nelas_energies[hN_pi0Nelas_nfiles] = { + 10, 20, 30, 40, 50, 60, 70, 80, 90, + 100, 110, 120, 130, 140, 150, 160, 170, 180, 190, + 200, 210, 220, 230, 240, 250, 260, 270, 280, 290, + 300, 340, 380, 420, 460, 500, 540, 580, 620, 660, + 700, 740, 780, 820, 860, 900, 940, 980, + 1020, 1060, 1100, 1140, 1180, 1220, 1260, + 1300, 1340, 1380, 1420, 1460, 1500 + }; + + double hN_pi0Nelas_costh [hN_pi0Nelas_points_per_file]; + double hN_pi0Nelas_xsec [hN_pi0Nelas_npoints]; + + int ipoint=0; + + for(int ifile = 0; ifile < hN_pi0Nelas_nfiles; ifile++) { + // build filename + ostringstream hN_datafile; + double ke = hN_pi0Nelas_energies[ifile]; + hN_datafile << data_dir << "/diff_ang/pip/pip" << ke << ".txt"; + // read data + ReadhNFile( + hN_datafile.str(), ke, hN_pi0Nelas_points_per_file, + ipoint, hN_pi0Nelas_costh, hN_pi0Nelas_xsec,2); + }//loop over files + + fhN2dXSecPi0N_Elas = new BLI2DNonUnifGrid(hN_pi0Nelas_nfiles,hN_pi0Nelas_points_per_file, + hN_pi0Nelas_energies,hN_pi0Nelas_costh,hN_pi0Nelas_xsec); + } + + // kIHNFtElas, pimN : + { + const int hN_pimNelas_nfiles = 60; + const int hN_pimNelas_points_per_file = 21; + const int hN_pimNelas_npoints = hN_pimNelas_points_per_file * hN_pimNelas_nfiles; + + double hN_pimNelas_energies[hN_pimNelas_nfiles] = { + 10, 20, 30, 40, 50, 60, 70, 80, 90, + 100, 110, 120, 130, 140, 150, 160, 170, 180, 190, + 200, 210, 220, 230, 240, 250, 260, 270, 280, 290, + 300, 340, 380, 420, 460, 500, 540, 580, 620, 660, + 700, 740, 780, 820, 860, 900, 940, 980, + 1020, 1060, 1100, 1140, 1180, 1220, 1260, + 1300, 1340, 1380, 1420, 1460, 1500 + }; + + double hN_pimNelas_costh [hN_pimNelas_points_per_file]; + double hN_pimNelas_xsec [hN_pimNelas_npoints]; + + int ipoint=0; + + for(int ifile = 0; ifile < hN_pimNelas_nfiles; ifile++) { + // build filename + ostringstream hN_datafile; + double ke = hN_pimNelas_energies[ifile]; + hN_datafile << data_dir << "/diff_ang/pim/pim" << ke << ".txt"; + // read data + ReadhNFile( + hN_datafile.str(), ke, hN_pimNelas_points_per_file, + ipoint, hN_pimNelas_costh, hN_pimNelas_xsec,2); + }//loop over files + + fhN2dXSecPimN_Elas = new BLI2DNonUnifGrid(hN_pimNelas_nfiles,hN_pimNelas_points_per_file, + hN_pimNelas_energies,hN_pimNelas_costh,hN_pimNelas_xsec); + } + + // kIHNFtElas, kpn : + { + const int hN_kpNelas_nfiles = 18; + const int hN_kpNelas_points_per_file = 37; + const int hN_kpNelas_npoints = hN_kpNelas_points_per_file * hN_kpNelas_nfiles; + + double hN_kpNelas_energies[hN_kpNelas_nfiles] = { + 100, 200, 300, 400, 500, 600, 700, 800, 900, 1000, + 1100, 1200, 1300, 1400, 1500, 1600, 1700, 1800 + }; + + double hN_kpNelas_costh [hN_kpNelas_points_per_file]; + double hN_kpNelas_xsec [hN_kpNelas_npoints]; + + int ipoint=0; + + for(int ifile = 0; ifile < hN_kpNelas_nfiles; ifile++) { + // build filename + ostringstream hN_datafile; + double ke = hN_kpNelas_energies[ifile]; + hN_datafile << data_dir << "/diff_ang/kpn/kpn" << ke << ".txt"; + // read data + ReadhNFile( + hN_datafile.str(), ke, hN_kpNelas_points_per_file, + ipoint, hN_kpNelas_costh, hN_kpNelas_xsec,2); + }//loop over files + + fhN2dXSecKpN_Elas = new BLI2DNonUnifGrid(hN_kpNelas_nfiles,hN_kpNelas_points_per_file, + hN_kpNelas_energies,hN_kpNelas_costh,hN_kpNelas_xsec); + } + // kIHNFtCEx, kpn : + { + const int hN_kpNcex_nfiles = 18; + const int hN_kpNcex_points_per_file = 37; + const int hN_kpNcex_npoints = hN_kpNcex_points_per_file * hN_kpNcex_nfiles; + + double hN_kpNcex_energies[hN_kpNcex_nfiles] = { + 100, 200, 300, 400, 500, 600, 700, 800, 900, 1000, + 1100, 1200, 1300, 1400, 1500, 1600, 1700, 1800 + }; + + double hN_kpNcex_costh [hN_kpNcex_points_per_file]; + double hN_kpNcex_xsec [hN_kpNcex_npoints]; + + int ipoint=0; + + for(int ifile = 0; ifile < hN_kpNcex_nfiles; ifile++) { + // build filename + ostringstream hN_datafile; + double ke = hN_kpNcex_energies[ifile]; + hN_datafile << data_dir << "/diff_ang/kpncex/kpcex" << ke << ".txt"; + // read data + ReadhNFile( + hN_datafile.str(), ke, hN_kpNcex_points_per_file, + ipoint, hN_kpNcex_costh, hN_kpNcex_xsec,2); + }//loop over files + + /*double hN_kpNcex_costh_cond [hN_kpNcex_points_per_file]; + for (int ient = 0; ient < hN_kpNcex_points_per_file; ient++) { + hN_kpNcex_costh_cond[ient] = hN_kpNcex_costh[ient]; + }*/ + + fhN2dXSecKpN_CEx = new BLI2DNonUnifGrid(hN_kpNcex_nfiles,hN_kpNcex_points_per_file, + hN_kpNcex_energies,hN_kpNcex_costh,hN_kpNcex_xsec); + } +//---------------------------------------------------------------------------------------- + + + // kIHNFtElas, kpp : + { + const int hN_kpPelas_nfiles = 18; + const int hN_kpPelas_points_per_file = 37; + const int hN_kpPelas_npoints = hN_kpPelas_points_per_file * hN_kpPelas_nfiles; + + double hN_kpPelas_energies[hN_kpPelas_nfiles] = { + 100, 200, 300, 400, 500, 600, 700, 800, 900, 1000, + 1100, 1200, 1300, 1400, 1500, 1600, 1700, 1800 + }; + + double hN_kpPelas_costh [hN_kpPelas_points_per_file]; + double hN_kpPelas_xsec [hN_kpPelas_npoints]; + + int ipoint=0; + + for(int ifile = 0; ifile < hN_kpPelas_nfiles; ifile++) { + // build filename + ostringstream hN_datafile; + double ke = hN_kpPelas_energies[ifile]; + hN_datafile << data_dir << "/diff_ang/kpp/kpp" << ke << ".txt"; + // read data + ReadhNFile( + hN_datafile.str(), ke, hN_kpPelas_points_per_file, + ipoint, hN_kpPelas_costh, hN_kpPelas_xsec,2); + }//loop over files + + fhN2dXSecKpP_Elas = new BLI2DNonUnifGrid(hN_kpPelas_nfiles,hN_kpPelas_points_per_file, + hN_kpPelas_energies,hN_kpPelas_costh,hN_kpPelas_xsec); + } + + // kIHNFtCEx, (pi+, pi0, pi-) N + { + const int hN_piNcex_nfiles = 60; + const int hN_piNcex_points_per_file = 21; + const int hN_piNcex_npoints = hN_piNcex_points_per_file * hN_piNcex_nfiles; + + double hN_piNcex_energies[hN_piNcex_nfiles] = { + 10, 20, 30, 40, 50, 60, 70, 80, 90, + 100, 110, 120, 130, 140, 150, 160, 170, 180, 190, + 200, 210, 220, 230, 240, 250, 260, 270, 280, 290, + 300, 340, 380, 420, 460, 500, 540, 580, 620, 660, + 700, 740, 780, 820, 860, 900, 940, 980, + 1020, 1060, 1100, 1140, 1180, 1220, 1260, + 1300, 1340, 1380, 1420, 1460, 1500 + }; + + double hN_piNcex_costh [hN_piNcex_points_per_file]; + double hN_piNcex_xsec [hN_piNcex_npoints]; + + int ipoint=0; + + for(int ifile = 0; ifile < hN_piNcex_nfiles; ifile++) { + // build filename + ostringstream hN_datafile; + double ke = hN_piNcex_energies[ifile]; + hN_datafile << data_dir << "/diff_ang/pie/pie" << ke << ".txt"; + // read data + ReadhNFile( + hN_datafile.str(), ke, hN_piNcex_points_per_file, + ipoint, hN_piNcex_costh, hN_piNcex_xsec,2); + }//loop over files + + fhN2dXSecPiN_CEx = new BLI2DNonUnifGrid(hN_piNcex_nfiles,hN_piNcex_points_per_file, + hN_piNcex_energies,hN_piNcex_costh,hN_piNcex_xsec); + } + + // kIHNFtAbs, (pi+, pi0, pi-) N + { + const int hN_piNabs_nfiles = 19; + const int hN_piNabs_points_per_file = 21; + const int hN_piNabs_npoints = hN_piNabs_points_per_file * hN_piNabs_nfiles; + + double hN_piNabs_energies[hN_piNabs_nfiles] = { + 50, 75, 100, 125, 150, 175, 200, 225, 250, 275, + 300, 325, 350, 375, 400, 425, 450, 475, 500 + }; + + double hN_piNabs_costh [hN_piNabs_points_per_file]; + double hN_piNabs_xsec [hN_piNabs_npoints]; + + int ipoint=0; + + for(int ifile = 0; ifile < hN_piNabs_nfiles; ifile++) { + // build filename + ostringstream hN_datafile; + double ke = hN_piNabs_energies[ifile]; + hN_datafile << data_dir << "/diff_ang/pid2p/pid2p" << ke << ".txt"; + // read data + ReadhNFile( + hN_datafile.str(), ke, hN_piNabs_points_per_file, + ipoint, hN_piNabs_costh, hN_piNabs_xsec,2); + }//loop over files + + fhN2dXSecPiN_Abs = new BLI2DNonUnifGrid(hN_piNabs_nfiles,hN_piNabs_points_per_file, + hN_piNabs_energies,hN_piNabs_costh,hN_piNabs_xsec); + } + + // kIHNFtInelas, gamma p -> p pi0 + { + const int hN_gampi0pInelas_nfiles = 29; + const int hN_gampi0pInelas_points_per_file = 37; + const int hN_gampi0pInelas_npoints = hN_gampi0pInelas_points_per_file * hN_gampi0pInelas_nfiles; + + double hN_gampi0pInelas_energies[hN_gampi0pInelas_nfiles] = { + 160, 180, 200, 220, 240, 260, 280, 300, 320, 340, + 360, 380, 400, 450, 500, 550, 600, 650, 700, 750, + 800, 850, 900, 950, 1000, 1050, 1100, 1150, 1200 + }; + + double hN_gampi0pInelas_costh [hN_gampi0pInelas_points_per_file]; + double hN_gampi0pInelas_xsec [hN_gampi0pInelas_npoints]; + + int ipoint=0; + + for(int ifile = 0; ifile < hN_gampi0pInelas_nfiles; ifile++) { + // build filename + ostringstream hN_datafile; + double ke = hN_gampi0pInelas_energies[ifile]; + hN_datafile << data_dir << "/diff_ang/gampi0p/" << ke << "-pi0p.txt"; + // read data + ReadhNFile( + hN_datafile.str(), ke, hN_gampi0pInelas_points_per_file, + ipoint, hN_gampi0pInelas_costh, hN_gampi0pInelas_xsec,3); + }//loop over files + + fhN2dXSecGamPi0P_Inelas = new BLI2DNonUnifGrid(hN_gampi0pInelas_nfiles,hN_gampi0pInelas_points_per_file, + hN_gampi0pInelas_energies,hN_gampi0pInelas_costh,hN_gampi0pInelas_xsec); + } + + // kIHNFtInelas, gamma n -> n pi0 + { + const int hN_gampi0nInelas_nfiles = 29; + const int hN_gampi0nInelas_points_per_file = 37; + const int hN_gampi0nInelas_npoints = hN_gampi0nInelas_points_per_file * hN_gampi0nInelas_nfiles; + + double hN_gampi0nInelas_energies[hN_gampi0nInelas_nfiles] = { + 160, 180, 200, 220, 240, 260, 280, 300, 320, 340, + 360, 380, 400, 450, 500, 550, 600, 650, 700, 750, + 800, 850, 900, 950, 1000, 1050, 1100, 1150, 1200 + }; + + double hN_gampi0nInelas_costh [hN_gampi0nInelas_points_per_file]; + double hN_gampi0nInelas_xsec [hN_gampi0nInelas_npoints]; + int ipoint=0; + + for(int ifile = 0; ifile < hN_gampi0nInelas_nfiles; ifile++) { + // build filename + ostringstream hN_datafile; + double ke = hN_gampi0nInelas_energies[ifile]; + hN_datafile << data_dir << "/diff_ang/gampi0n/" << ke << "-pi0n.txt"; + // read data + ReadhNFile( + hN_datafile.str(), ke, hN_gampi0nInelas_points_per_file, + ipoint, hN_gampi0nInelas_costh, hN_gampi0nInelas_xsec,3); + }//loop over files + + fhN2dXSecGamPi0N_Inelas = new BLI2DNonUnifGrid(hN_gampi0nInelas_nfiles,hN_gampi0nInelas_points_per_file, + hN_gampi0nInelas_energies,hN_gampi0nInelas_costh,hN_gampi0nInelas_xsec); + } + + // kIHNFtInelas, gamma p -> n pi+ + { + const int hN_gampipnInelas_nfiles = 29; + const int hN_gampipnInelas_points_per_file = 37; + const int hN_gampipnInelas_npoints = hN_gampipnInelas_points_per_file * hN_gampipnInelas_nfiles; + + double hN_gampipnInelas_energies[hN_gampipnInelas_nfiles] = { + 160, 180, 200, 220, 240, 260, 280, 300, 320, 340, + 360, 380, 400, 450, 500, 550, 600, 650, 700, 750, + 800, 850, 900, 950, 1000, 1050, 1100, 1150, 1200 + }; + + double hN_gampipnInelas_costh [hN_gampipnInelas_points_per_file]; + double hN_gampipnInelas_xsec [hN_gampipnInelas_npoints]; + + int ipoint=0; + + for(int ifile = 0; ifile < hN_gampipnInelas_nfiles; ifile++) { + // build filename + ostringstream hN_datafile; + double ke = hN_gampipnInelas_energies[ifile]; + hN_datafile << data_dir << "/diff_ang/gampi+n/" << ke << "-pi+n.txt"; + // read data + ReadhNFile( + hN_datafile.str(), ke, hN_gampipnInelas_points_per_file, + ipoint, hN_gampipnInelas_costh, hN_gampipnInelas_xsec,3); + }//loop over files + + fhN2dXSecGamPipN_Inelas = new BLI2DNonUnifGrid(hN_gampipnInelas_nfiles,hN_gampipnInelas_points_per_file, + hN_gampipnInelas_energies,hN_gampipnInelas_costh,hN_gampipnInelas_xsec); + } + + // kIHNFtInelas, gamma n -> p pi- + { + const int hN_gampimpInelas_nfiles = 29; + const int hN_gampimpInelas_points_per_file = 37; + const int hN_gampimpInelas_npoints = hN_gampimpInelas_points_per_file * hN_gampimpInelas_nfiles; + + double hN_gampimpInelas_energies[hN_gampimpInelas_nfiles] = { + 160, 180, 200, 220, 240, 260, 280, 300, 320, 340, + 360, 380, 400, 450, 500, 550, 600, 650, 700, 750, + 800, 850, 900, 950, 1000, 1050, 1100, 1150, 1200 + }; + + double hN_gampimpInelas_costh [hN_gampimpInelas_points_per_file]; + double hN_gampimpInelas_xsec [hN_gampimpInelas_npoints]; + + int ipoint=0; + + for(int ifile = 0; ifile < hN_gampimpInelas_nfiles; ifile++) { + // build filename + ostringstream hN_datafile; + double ke = hN_gampimpInelas_energies[ifile]; + hN_datafile << data_dir << "/diff_ang/gampi-p/" << ke << "-pi-p.txt"; + // read data + ReadhNFile( + hN_datafile.str(), ke, hN_gampimpInelas_points_per_file, + ipoint, hN_gampimpInelas_costh, hN_gampimpInelas_xsec,3); + }//loop over files + + fhN2dXSecGamPimP_Inelas = new BLI2DNonUnifGrid(hN_gampimpInelas_nfiles,hN_gampimpInelas_points_per_file, + hN_gampimpInelas_energies,hN_gampimpInelas_costh,hN_gampimpInelas_xsec); + } + + + + + TFile TGraphs_file; + bool saveTGraphsToFile = false; //true; + + if (saveTGraphsToFile) { + string filename = "TGraphs.root"; + LOG("INukeHadroData2025", pNOTICE) << "Saving INTRANUKE hadron x-section data to ROOT file: " << filename; + TGraphs_file.Open(filename.c_str(), "RECREATE"); + } + + + // kIHNFtTot, pip + A PipA_Tot + { + const int pipATot_nfiles = 7; + const int pipATot_nuclei[pipATot_nfiles] = {12,27 ,3,56, 93,209,7}; + const int pipATot_npoints = 294; + + TPipA_Tot = new TGraph2D(pipATot_npoints); + TPipA_Tot->SetNameTitle("TPipA_Tot","TPipA_Tot"); + TPipA_Tot->SetDirectory(0); + + int ipoint=0; + double x, y; + + for(int ifile=0; ifile < pipATot_nfiles; ifile++) { + ostringstream ADep_datafile; + int nucleus = pipATot_nuclei[ifile]; + ADep_datafile << data_dir << "/tot_xsec/pipA_tot/pip" << nucleus << "_tot.txt"; + TGraph * buff = new TGraph(ADep_datafile.str().c_str()); + buff->SetNameTitle("buff","buff"); + for(int i=0; i < buff->GetN(); i++) { + buff -> GetPoint(i,x,y); + if (y > 0) { + TPipA_Tot->SetPoint(ipoint, (double)nucleus, x, log(y)); + ipoint++; + } + + } + delete buff; + } + + if (saveTGraphsToFile) { + TPipA_Tot -> Write("TPipA_Tot"); // TPipA_Tot will be _key_ name + } + } + + + // kIHNFtAbs, pip + A PipA_Abs_frac + { + const int pipAAbs_f_nfiles = 18; + const int pipAAbs_f_nuclei[pipAAbs_f_nfiles] = {1, 2, 3, 4, 7, 9, 12, 16, 27, 48, 56, 58, 63, 93, 120, 165, 181, 209}; + const int pipAAbs_f_npoints = 111; + + TfracPipA_Abs = new TGraph2D(pipAAbs_f_npoints); + TfracPipA_Abs->SetNameTitle("TfracPipA_Abs","TfracPipA_Abs"); + TfracPipA_Abs->SetDirectory(0); + + int ipoint=0; + double x, y; + for(int ifile=0; ifile < pipAAbs_f_nfiles; ifile++) { + ostringstream ADep_datafile; + int nucleus = pipAAbs_f_nuclei[ifile]; + ADep_datafile << data_dir << "/tot_xsec/pipA_abs_frac/pip" << nucleus << "_abs_frac.txt"; + TGraph * buff = new TGraph(ADep_datafile.str().c_str()); + buff->SetNameTitle("buff","buff"); + for(int i=0; i < buff->GetN(); i++) { + buff -> GetPoint(i,x,y); + TfracPipA_Abs -> SetPoint(ipoint,(double)nucleus,x,y); + ipoint++; + } + delete buff; + } + if (saveTGraphsToFile) { + TfracPipA_Abs -> Write("TfracPipA_Abs"); + } + + } + + + // kIHNFtCEx, pip + A PipA_CEx_frac + { + const int pipACEx_f_nfiles = 18; + const int pipACEx_f_nuclei[pipACEx_f_nfiles] = {1, 2, 3, 4, 7, 9, 12, 16, 27, 48, 56, 58, 63, 93, 120, 165, 181, 209}; + const int pipACEx_f_npoints = 129; + + TfracPipA_CEx = new TGraph2D(pipACEx_f_npoints); + TfracPipA_CEx->SetNameTitle("TfracPipA_CEx","TfracPipA_CEx"); + TfracPipA_CEx->SetDirectory(0); + + int ipoint=0; + double x, y; + + for(int ifile=0; ifile < pipACEx_f_nfiles; ifile++) { + ostringstream ADep_datafile; + int nucleus = pipACEx_f_nuclei[ifile]; + ADep_datafile << data_dir << "/tot_xsec/pipA_cex_frac/pip" << nucleus << "_cex_frac.txt"; + TGraph * buff = new TGraph(ADep_datafile.str().c_str()); + buff->SetNameTitle("buff","buff"); + for(int i=0; i < buff->GetN(); i++) { + buff -> GetPoint(i,x,y); + TfracPipA_CEx -> SetPoint(ipoint,(double)nucleus,x,y); + ipoint++; + } + delete buff; + } + + if (saveTGraphsToFile) { + TfracPipA_CEx -> Write("TfracPipA_CEx"); + } + + } + + + + // kIHNFtCEx, pip + A PipA_CEx (just for developmental purposes) + { + + + const int pipACEx_nfiles = 7; + const int pipACEx_nuclei[pipACEx_nfiles] = {3, 27 , 12 , 56 , 93 , 209 , 7}; + const int pipACEx_npoints = 294; + + TPipA_CEx = new TGraph2D(pipACEx_npoints); + TPipA_CEx->SetNameTitle("TPipA_CEx","TPipA_CEx"); + TPipA_CEx->SetDirectory(0); + + int ipoint=0; + double x, y; + + for(int ifile=0; ifile < pipACEx_nfiles; ifile++) { + ostringstream ADep_datafile; + int nucleus = pipACEx_nuclei[ifile]; + ADep_datafile << data_dir << "/tot_xsec/pipA_cex/pip" << nucleus << "_cex.txt"; + TGraph * buff = new TGraph(ADep_datafile.str().c_str()); + buff->SetNameTitle("buff","buff"); + for(int i=0; i < buff->GetN(); i++) { + buff -> GetPoint(i,x,y); + if(y>0){ + TPipA_CEx -> SetPoint(ipoint,(double)nucleus,x,log(y)); + ipoint++; + } + } + delete buff; + } + + if (saveTGraphsToFile) { + TPipA_CEx -> Write("TPipA_CEx"); + } + + + } + + // kIHNFtAbs, pip + A PipA_Abs (just for developmental purposes) + { + + const int pipAAbs_nfiles = 7; + const int pipAAbs_nuclei[pipAAbs_nfiles] = {3, 27 , 12 , 56 , 93 , 209 , 7}; + const int pipAAbs_npoints = 294; + + TPipA_Abs = new TGraph2D(pipAAbs_npoints); + TPipA_Abs->SetNameTitle("TPipA_Abs","TPipA_Abs"); + TPipA_Abs->SetDirectory(0); + + int ipoint=0; + double x, y; + + for(int ifile=0; ifile < pipAAbs_nfiles; ifile++) { + ostringstream ADep_datafile; + int nucleus = pipAAbs_nuclei[ifile]; + ADep_datafile << data_dir << "/tot_xsec/pipA_abs/pip" << nucleus << "_abs.txt"; + TGraph * buff = new TGraph(ADep_datafile.str().c_str()); + buff->SetNameTitle("buff","buff"); + for(int i=0; i < buff->GetN(); i++) { + buff -> GetPoint(i,x,y); + if(y>0){ + TPipA_Abs -> SetPoint(ipoint,(double)nucleus,x,log(y)); + ipoint++; + } + } + delete buff; + } + + if (saveTGraphsToFile) { + TPipA_Abs -> Write("TPipA_Abs"); + } + + } + + // kIHNFtElas, pip + A PipA_Elas (just for developmental purposes) + { + TGraph2D * TPipA_Elas; + + const int pipAElas_nfiles = 18; + const int pipAElas_nuclei[pipAElas_nfiles] = {1, 2, 3, 4, 7, 9, 12, 16, 27, 48, 56, 58, 63, 93, 120, 165, 181, 209}; + const int pipAElas_npoints = 125; + + TPipA_Elas = new TGraph2D(pipAElas_npoints); + TPipA_Elas->SetNameTitle("TPipA_Elas","TPipA_Elas"); + TPipA_Elas->SetDirectory(0); + + int ipoint=0; + double x, y; + + for(int ifile=0; ifile < pipAElas_nfiles; ifile++) { + ostringstream ADep_datafile; + int nucleus = pipAElas_nuclei[ifile]; + ADep_datafile << data_dir << "/tot_xsec/pipA_elas/pip" << nucleus << "_elas.txt"; + TGraph * buff = new TGraph(ADep_datafile.str().c_str()); + buff->SetNameTitle("buff","buff"); + for(int i=0; i < buff->GetN(); i++) { + buff -> GetPoint(i,x,y); + TPipA_Elas -> SetPoint(ipoint,(double)nucleus,x,y); + ipoint++; + } + delete buff; + } + + if (saveTGraphsToFile) { + TPipA_Elas -> Write("TPipA_Elas"); + } + delete TPipA_Elas; + } + + // kIHNFtInelas, pip + A PipA_Inelas (just for developmental purposes) + { + + const int pipAInelas_nfiles = 7; + const int pipAInelas_nuclei[pipAInelas_nfiles] = {3, 27 , 12 , 56 , 93 , 209 , 7}; + const int pipAInelas_npoints = 294; + + TPipA_Inelas = new TGraph2D(pipAInelas_npoints); + TPipA_Inelas->SetNameTitle("TPipA_Inelas","TPipA_Inelas"); + TPipA_Inelas->SetDirectory(0); + + int ipoint=0; + double x, y; + + for(int ifile=0; ifile < pipAInelas_nfiles; ifile++) { + ostringstream ADep_datafile; + int nucleus = pipAInelas_nuclei[ifile]; + ADep_datafile << data_dir << "/tot_xsec/pipA_inelas/pip" << nucleus << "_inelas.txt"; + TGraph * buff = new TGraph(ADep_datafile.str().c_str()); + buff->SetNameTitle("buff","buff"); + for(int i=0; i < buff->GetN(); i++) { + buff -> GetPoint(i,x,y); + if(y>0){ + TPipA_Inelas -> SetPoint(ipoint,(double)nucleus,x,log(y)); + ipoint++; + } + } + delete buff; + } + + if (saveTGraphsToFile) { + TPipA_Inelas -> Write("TPipA_Inelas"); + } + } + + // kIHNFtPiPro, pip + A PipA_pipro (just for developmental purposes) + { + + const int pipApipro_nfiles = 6; + const int pipApipro_nuclei[pipApipro_nfiles] = { 27 , 12 , 56 , 93 , 209 , 7}; + const int pipAInelas_npoints = 252; + + TPipA_PiPro = new TGraph2D(pipAInelas_npoints); + TPipA_PiPro->SetNameTitle("TPipA_PiPro","TPipA_PiPro"); + TPipA_PiPro->SetDirectory(0); + + int ipoint=0; + double x, y; + + for(int ifile=0; ifile < pipApipro_nfiles; ifile++) { + ostringstream ADep_datafile; + int nucleus = pipApipro_nuclei[ifile]; + ADep_datafile << data_dir << "/tot_xsec/pipA_pipro/pip" << nucleus << "_pipro.txt"; + TGraph * buff = new TGraph(ADep_datafile.str().c_str()); + buff->SetNameTitle("buff","buff"); + for(int i=0; i < buff->GetN(); i++) { + buff -> GetPoint(i,x,y); + if(y>0){ + TPipA_PiPro -> SetPoint(ipoint,(double)nucleus,x,log(y)); + ipoint++; + } + } + delete buff; + } + + if (saveTGraphsToFile) { + TPipA_PiPro -> Write("TPipA_PiPro"); + } + } + + + /* + // kIHNFtElas, pip + A PipA_Elas_frac + { + const int pipAElas_f_nfiles = 18; + const int pipAElas_f_nuclei[pipAElas_f_nfiles] = {1, 2, 3, 4, 7, 9, 12, 16, 27, 48, 56, 58, 63, 93, 120, 165, 181, 209}; + const int pipAElas_f_npoints = 125; + + TfracPipA_Elas = new TGraph2D(pipAElas_f_npoints); + TfracPipA_Elas->SetNameTitle("TfracPipA_Elas","TfracPipA_Elas"); + TfracPipA_Elas->SetDirectory(0); + + int ipoint=0; + double x, y; + + for(int ifile=0; ifile < pipAElas_f_nfiles; ifile++) { + ostringstream ADep_datafile; + int nucleus = pipAElas_f_nuclei[ifile]; + ADep_datafile << data_dir << "/tot_xsec/pipA_elas_frac/pip" << nucleus << "_elas_frac.txt"; + TGraph * buff = new TGraph(ADep_datafile.str().c_str()); + buff->SetNameTitle("buff","buff"); + for(int i=0; i < buff->GetN(); i++) { + buff -> GetPoint(i,x,y); + TfracPipA_Elas -> SetPoint(ipoint,(double)nucleus,x,y); + ipoint++; + } + delete buff; + } + + if (saveTGraphsToFile) { + TfracPipA_Elas -> Write("TfracPipA_Elas"); + } + + } + */ + + // kIHNFtInelas, pip + A PipA_Inelas_frac + { + const int pipAInelas_f_nfiles = 20; + const int pipAInelas_f_nuclei[pipAInelas_f_nfiles] = {1, 2, 3, 4, 7, 9, 12, 16, 27, 40, 48, 56, 58, 63, 93, 120, 165, 181, 208, 209}; + const int pipAInelas_f_npoints = 118; + + TfracPipA_Inelas = new TGraph2D(pipAInelas_f_npoints); + TfracPipA_Inelas->SetNameTitle("TfracPipA_Inelas","TfracPipA_Inelas"); + TfracPipA_Inelas->SetDirectory(0); + + int ipoint=0; + double x, y; + + for(int ifile=0; ifile < pipAInelas_f_nfiles; ifile++) { + ostringstream ADep_datafile; + int nucleus = pipAInelas_f_nuclei[ifile]; + ADep_datafile << data_dir << "/tot_xsec/pipA_inelas_frac/pip" << nucleus << "_inelas_frac.txt"; + TGraph * buff = new TGraph(ADep_datafile.str().c_str()); + buff->SetNameTitle("buff","buff"); + for(int i=0; i < buff->GetN(); i++) { + buff -> GetPoint(i,x,y); + TfracPipA_Inelas -> SetPoint(ipoint,(double)nucleus,x,y); + ipoint++; + } + delete buff; + } + + if (saveTGraphsToFile) { + TfracPipA_Inelas -> Write("TfracPipA_Inelas"); + } + + } + + + // kIHNFtPiPro, pip + A PipA_PiPro_frac + { + const int pipAPiPro_f_nfiles = 17; + const int pipAPiPro_f_nuclei[pipAPiPro_f_nfiles] = {1, 2, 3, 4, 7, 9, 12, 16, 48, 56, 58, 63, 93, 120, 165, 181, 209}; + const int pipAPiPro_f_npoints = 76; + + TfracPipA_PiPro = new TGraph2D(pipAPiPro_f_npoints); + TfracPipA_PiPro->SetNameTitle("TfracPipA_PiPro","TfracPipA_PiPro"); + TfracPipA_PiPro->SetDirectory(0); + + int ipoint=0; + double x, y; + + for(int ifile=0; ifile < pipAPiPro_f_nfiles; ifile++) { + ostringstream ADep_datafile; + int nucleus = pipAPiPro_f_nuclei[ifile]; + ADep_datafile << data_dir << "/tot_xsec/pipA_pipro_frac/pip" << nucleus << "_pipro_frac.txt"; + TGraph * buff = new TGraph(ADep_datafile.str().c_str()); + buff->SetNameTitle("buff","buff"); + for(int i=0; i < buff->GetN(); i++) { + buff -> GetPoint(i,x,y); + TfracPipA_PiPro -> SetPoint(ipoint,(double)nucleus,x,y); + ipoint++; + } + delete buff; + } + + if (saveTGraphsToFile) { + TfracPipA_PiPro -> Write("TfracPipA_PiPro"); + } + } + + TGraphs_file.Close(); + + LOG("INukeData", pINFO) << "Done building x-section splines..."; + +} +//____________________________________________________________________________ +void INukeHadroData2025::ReadhNFile( + string filename, double ke, int npoints, int & curr_point, + double * costh_array, double * xsec_array, int cols) +{ + // open + std::ifstream hN_stream(filename.c_str(), ios::in); + if(!hN_stream.good()) { + LOG("INukeData", pERROR) + << "Error reading INTRANUKE/hN data from: " << filename; + return; + } + + if(cols<2) { + LOG("INukeData", pERROR) + << "Error reading INTRANUKE/hN data from: " << filename; + LOG("INukeData", pERROR) + << "Too few columns: " << cols; + return; + } + + LOG("INukeData", pINFO) + << "Reading INTRANUKE/hN data from: " << filename; + + // skip initial comments + char cbuf[501]; + hN_stream.getline(cbuf,400); + hN_stream.getline(cbuf,400); + hN_stream.getline(cbuf,400); + + // read + double angle = 0; + double xsec = 0; + double trash = 0; + + for(int ip = 0; ip < npoints; ip++) { + hN_stream >> angle >> xsec; + + for(int ic = 0; ic < (cols-2); ic++) { + hN_stream >> trash; + } + + LOG("INukeData", pDEBUG) + << "Adding data point: (KE = " << ke << " MeV, angle = " + << angle << ", sigma = " << xsec << " mbarn)"; + costh_array[ip] = TMath::Cos(angle*kPi/180.); + xsec_array [curr_point] = xsec; + curr_point++; + } +} +//____________________________________________________________________________ +double INukeHadroData2025::XSec( + int hpdgc, int tgtpdgc, int nppdgc, INukeFateHN_t fate, double ke, double costh) const +{ +// inputs +// fate : h+N fate code +// hpdgc : h PDG code +// tgtpdgc : N PDG code +// nppdgc : product N PDG code +// ke : kinetic energy (MeV) +// costh : cos(scattering angle) +// returns +// xsec : mbarn + + double ke_eval = ke; + double costh_eval = costh; + + costh_eval = TMath::Min(costh, 1.); + costh_eval = TMath::Max(costh_eval, -1.); + + if(fate==kIHNFtElas) { + + if( (hpdgc==kPdgProton && tgtpdgc==kPdgProton) || + (hpdgc==kPdgNeutron && tgtpdgc==kPdgNeutron) ) + { + ke_eval = TMath::Min(ke_eval, 999.); + ke_eval = TMath::Max(ke_eval, 50.); + return fhN2dXSecPP_Elas->Evaluate(ke_eval, costh_eval); + } + else + if( (hpdgc==kPdgProton && tgtpdgc==kPdgNeutron) || + (hpdgc==kPdgNeutron && tgtpdgc==kPdgProton) ) + { + ke_eval = TMath::Min(ke_eval, 999.); + ke_eval = TMath::Max(ke_eval, 50.); + return fhN2dXSecNP_Elas->Evaluate(ke_eval, costh_eval); + } + else + if(hpdgc==kPdgPiP) + { + ke_eval = TMath::Min(ke_eval, 1499.); + ke_eval = TMath::Max(ke_eval, 10.); + return fhN2dXSecPipN_Elas->Evaluate(ke_eval, costh_eval); + } + else + if(hpdgc==kPdgPi0) + { + ke_eval = TMath::Min(ke_eval, 1499.); + ke_eval = TMath::Max(ke_eval, 10.); + return fhN2dXSecPi0N_Elas->Evaluate(ke_eval, costh_eval); + } + else + if(hpdgc==kPdgPiM) + { + ke_eval = TMath::Min(ke_eval, 1499.); + ke_eval = TMath::Max(ke_eval, 10.); + return fhN2dXSecPimN_Elas->Evaluate(ke_eval, costh_eval); + } + else + if(hpdgc==kPdgKP && tgtpdgc==kPdgNeutron) + { + ke_eval = TMath::Min(ke_eval, 1799.); + ke_eval = TMath::Max(ke_eval, 100.); + return fhN2dXSecKpN_Elas->Evaluate(ke_eval, costh_eval); + } + else + if(hpdgc==kPdgKP && tgtpdgc==kPdgProton) + { + ke_eval = TMath::Min(ke_eval, 1799.); + ke_eval = TMath::Max(ke_eval, 100.); + return fhN2dXSecKpP_Elas->Evaluate(ke_eval, costh_eval); + } + } + + else if(fate == kIHNFtCEx) { + if( (hpdgc==kPdgPiP || hpdgc==kPdgPi0 || hpdgc==kPdgPiM) && + (tgtpdgc==kPdgProton || tgtpdgc==kPdgNeutron) ) + { + ke_eval = TMath::Min(ke_eval, 1499.); + ke_eval = TMath::Max(ke_eval, 10.); + return fhN2dXSecPiN_CEx->Evaluate(ke_eval, costh_eval); + } + else if( (hpdgc == kPdgProton && tgtpdgc == kPdgProton) || + (hpdgc == kPdgNeutron && tgtpdgc == kPdgNeutron) ) + { + LOG("INukeData", pWARN) << "Inelastic pp does not exist!"; + ke_eval = TMath::Min(ke_eval, 999.); + ke_eval = TMath::Max(ke_eval, 50.); + return fhN2dXSecPP_Elas->Evaluate(ke_eval, costh_eval); + } + else if( (hpdgc == kPdgProton && tgtpdgc == kPdgNeutron) || + (hpdgc == kPdgNeutron && tgtpdgc == kPdgProton) ) + { + ke_eval = TMath::Min(ke_eval, 999.); + ke_eval = TMath::Max(ke_eval, 50.); + return fhN2dXSecNP_Elas->Evaluate(ke_eval, costh_eval); + } + else if(hpdgc == kPdgKP && tgtpdgc == kPdgNeutron) { + ke_eval = TMath::Min(ke_eval, 1799.); + ke_eval = TMath::Max(ke_eval, 100.); + return fhN2dXSecKpN_CEx->Evaluate(ke_eval, costh_eval); + } + } + + else if(fate == kIHNFtAbs) { + if( (hpdgc==kPdgPiP || hpdgc==kPdgPi0 || hpdgc==kPdgPiM) && + (tgtpdgc==kPdgProton || tgtpdgc==kPdgNeutron) ) + { + ke_eval = TMath::Min(ke_eval, 499.); + ke_eval = TMath::Max(ke_eval, 50.); + return fhN2dXSecPiN_Abs->Evaluate(ke_eval, costh_eval); + } + if(hpdgc==kPdgKP) return 1.; //isotropic since no data ??? + } + + else if(fate == kIHNFtInelas) { + if( hpdgc==kPdgGamma && tgtpdgc==kPdgProton &&nppdgc==kPdgProton ) + { + ke_eval = TMath::Min(ke_eval, 1199.); + ke_eval = TMath::Max(ke_eval, 160.); + return fhN2dXSecGamPi0P_Inelas->Evaluate(ke_eval, costh_eval); + } + else + if( hpdgc==kPdgGamma && tgtpdgc==kPdgProton && nppdgc==kPdgNeutron ) + { + ke_eval = TMath::Min(ke_eval, 1199.); + ke_eval = TMath::Max(ke_eval, 160.); + return fhN2dXSecGamPipN_Inelas->Evaluate(ke_eval, costh_eval); + } + else + if( hpdgc==kPdgGamma && tgtpdgc==kPdgNeutron && nppdgc==kPdgProton ) + { + ke_eval = TMath::Min(ke_eval, 1199.); + ke_eval = TMath::Max(ke_eval, 160.); + return fhN2dXSecGamPimP_Inelas->Evaluate(ke_eval, costh_eval); + } + else + if( hpdgc==kPdgGamma && tgtpdgc==kPdgNeutron && nppdgc==kPdgNeutron ) + { + ke_eval = TMath::Min(ke_eval, 1199.); + ke_eval = TMath::Max(ke_eval, 160.); + return fhN2dXSecGamPi0N_Inelas->Evaluate(ke_eval, costh_eval); + } + } + + return 0; +} +//____________________________________________________________________________ +double INukeHadroData2025::FracADep(int hpdgc, INukeFateHA_t fate, double ke, int targA) const +{ + // return the x-section fraction for the input fate for the particle with the input pdg + // code and the target with the input mass number at the input kinetic energy + + ke = TMath::Max(fMinKinEnergy, ke); // ke >= 1 MeV + ke = TMath::Min(fMaxKinEnergyHA, ke); // ke <= 999 MeV + + targA = TMath::Min(208, targA); // A <= 208 + + LOG("INukeData", pDEBUG) << "Querying hA cross section at ke = " << ke << " and target " << targA; + + // Handle pions (currently the same cross sections are used for pi+, pi-, and pi0) + if ( hpdgc == kPdgPiP || hpdgc == kPdgPiM || hpdgc == kPdgPi0 ) { + // get log fate cross sections + double log_cex_xs = TPipA_CEx->Interpolate(targA, ke); + double log_inelas_xs = TPipA_Inelas->Interpolate(targA, ke); + double log_abs_xs = TPipA_Abs->Interpolate(targA, ke); + double log_pipro_xs = TPipA_PiPro->Interpolate(targA, ke); + double log_tot_xs = TPipA_Tot->Interpolate(targA, ke); + + + // get cross sections + double cex_xs = exp(log_cex_xs); + double inelas_xs = exp(log_inelas_xs); + double abs_xs = exp(log_abs_xs); + double pipro_xs = exp(log_pipro_xs); + double tot_xs = exp(log_tot_xs); + + // construct ratios + + double frac_cex = cex_xs / tot_xs ; + double frac_inelas = inelas_xs / tot_xs ; + double frac_abs = abs_xs / tot_xs ; + double frac_pipro = pipro_xs / tot_xs ; + + + + // Protect against unitarity violation due to interpolation problems + // by renormalizing all available fate fractions to unity. + double total = frac_cex + frac_inelas + frac_abs + frac_pipro; // + frac_elas + + if ( fate == kIHAFtCEx ) return frac_cex / total; + else if ( fate == kIHAFtInelas ) return frac_inelas / total; + else if ( fate == kIHAFtAbs ) return frac_abs / total; + else if ( fate == kIHAFtPiProd ) return frac_pipro / total; + else { + std::string sign("+"); + if ( hpdgc == kPdgPiM ) sign = "-"; + else if ( hpdgc == kPdgPi0 ) sign = "0"; + LOG("INukeData", pWARN) << "Pi" << sign << "'s don't have this fate: " << INukeHadroFates::AsString(fate); + return 0.; + } + } + + LOG("INukeData", pWARN) << "Can't handle particles with pdg code = " << hpdgc; + return 0.; +} +//____________________________________________________________________________ +double INukeHadroData2025::FracAIndep(int hpdgc, INukeFateHA_t fate, double ke) const +{ + // return the x-section fraction for the input fate for the particle with the input pdg + // code at the input kinetic energy + ke = TMath::Max(fMinKinEnergy, ke); + ke = TMath::Min(fMaxKinEnergyHA, ke); + + LOG("INukeData", pDEBUG) << "Querying hA cross section at ke = " << ke; + + // TODO: reduce code duplication here + if (hpdgc == kPdgProton) { + // handle protons + double frac_cex = fFracPA_CEx->Evaluate(ke); + double frac_inelas = fFracPA_Inel->Evaluate(ke); + double frac_abs = fFracPA_Abs->Evaluate(ke); + double frac_pipro = fFracPA_PiPro->Evaluate(ke); + double frac_comp = fFracPA_Cmp->Evaluate(ke); + + // Protect against unitarity violation due to interpolation problems + // by renormalizing all available fate fractions to unity. + double total = frac_cex + frac_inelas + frac_abs + frac_pipro + frac_comp; // + frac_elas + + if ( fate == kIHAFtCEx ) return frac_cex / total; + //else if ( fate == kIHAFtElas ) return frac_elas / total; + else if ( fate == kIHAFtInelas ) return frac_inelas / total; + else if ( fate == kIHAFtAbs ) return frac_abs / total; + else if ( fate == kIHAFtPiProd ) return frac_pipro / total; + else if ( fate == kIHAFtCmp ) return frac_comp / total; // cmp - add support for this later + else { + LOG("INukeData", pWARN) + << "Protons don't have this fate: " << INukeHadroFates::AsString(fate); + return 0; + } + } + else if (hpdgc == kPdgNeutron) { + // handle neutrons + double frac_cex = fFracNA_CEx->Evaluate(ke); + double frac_inelas = fFracNA_Inel->Evaluate(ke); + double frac_abs = fFracNA_Abs->Evaluate(ke); + double frac_pipro = fFracNA_PiPro->Evaluate(ke); + double frac_comp = fFracNA_Cmp->Evaluate(ke); + + // Protect against unitarity violation due to interpolation problems + // by renormalizing all available fate fractions to unity. + double total = frac_cex + frac_inelas + frac_abs + frac_pipro + frac_comp; // + frac_elas + + if ( fate == kIHAFtCEx ) return frac_cex / total; + //else if ( fate == kIHAFtElas ) return frac_elas / total; + else if ( fate == kIHAFtInelas ) return frac_inelas / total; + else if ( fate == kIHAFtAbs ) return frac_abs / total; + else if ( fate == kIHAFtPiProd ) return frac_pipro / total; + else if ( fate == kIHAFtCmp ) return frac_comp / total; // cmp - add support for this later + else { + LOG("INukeData", pWARN) + << "Neutrons don't have this fate: " << INukeHadroFates::AsString(fate); + return 0; + } + } + else if (hpdgc == kPdgKP) { + // handle K+ + double frac_inelas = fFracKA_Inel->Evaluate(ke); + //double frac_elas = fFracKA_Elas->Evaluate(ke); + double frac_abs = fFracKA_Abs->Evaluate(ke); + + // Protect against unitarity violation due to interpolation problems + // by renormalizing all available fate fractions to unity. + double total = frac_inelas + frac_abs; // + frac_elas + + if ( fate == kIHAFtInelas ) return frac_inelas / total; + else if ( fate == kIHAFtAbs ) return frac_abs / total; + else { + LOG("INukeData", pWARN) + << "K+'s don't have this fate: " << INukeHadroFates::AsString(fate); + return 0.; + } + } + LOG("INukeData", pWARN) << "Can't handle particles with pdg code = " << hpdgc; + return 0.; +} +//____________________________________________________________________________ +double INukeHadroData2025::XSec(int hpdgc, INukeFateHN_t fate, double ke, int targA, int targZ) const +{ +// return the x-section for the input fate for the particle with the input pdg +// code at the input kinetic energy +// + ke = TMath::Max(fMinKinEnergy, ke); + ke = TMath::Min(fMaxKinEnergyHN, ke); + + LOG("INukeData", pDEBUG) << "Querying hN cross section at ke = " << ke; + + double xsec=0; + + if (hpdgc == kPdgPiP) { + /* handle pi+ */ + if (fate == kIHNFtCEx ) {xsec = TMath::Max(0., fXSecPipp_CEx -> Evaluate(ke)) * targZ; + xsec+= TMath::Max(0., fXSecPipn_CEx -> Evaluate(ke)) * (targA-targZ); + return xsec;} + else if (fate == kIHNFtElas ) {xsec = TMath::Max(0., fXSecPipp_Elas -> Evaluate(ke)) * targZ; + xsec+= TMath::Max(0., fXSecPipn_Elas -> Evaluate(ke)) * (targA-targZ); + return xsec;} + else if (fate == kIHNFtInelas) {xsec = TMath::Max(0., fXSecPipp_Reac -> Evaluate(ke)) * targZ; + xsec+= TMath::Max(0., fXSecPipn_Reac -> Evaluate(ke)) * (targA-targZ); + return xsec;} + else if (fate == kIHNFtAbs ) {xsec = TMath::Max(0., fXSecPipd_Abs -> Evaluate(ke)) * targA; + return xsec;} + else { + LOG("INukeData", pWARN) + << "Pi+'s don't have this fate: " << INukeHadroFates::AsString(fate); + return 0; + } + + } else if (hpdgc == kPdgPiM) { + /* handle pi- */ + if (fate == kIHNFtCEx ) {xsec = TMath::Max(0., fXSecPipn_CEx -> Evaluate(ke)) * targZ; + xsec+= TMath::Max(0., fXSecPipp_CEx -> Evaluate(ke)) * (targA-targZ); + return xsec;} + else if (fate == kIHNFtElas ) {xsec = TMath::Max(0., fXSecPipn_Elas -> Evaluate(ke)) * targZ; + xsec+= TMath::Max(0., fXSecPipp_Elas -> Evaluate(ke)) * (targA-targZ); + return xsec;} + else if (fate == kIHNFtInelas) {xsec = TMath::Max(0., fXSecPipn_Reac -> Evaluate(ke)) * targZ; + xsec+= TMath::Max(0., fXSecPipp_Reac -> Evaluate(ke)) * (targA-targZ); + return xsec;} + else if (fate == kIHNFtAbs ) {xsec = TMath::Max(0., fXSecPipd_Abs -> Evaluate(ke)) * targA; + return xsec;} + else { + LOG("INukeData", pWARN) + << "Pi-'s don't have this fate: " << INukeHadroFates::AsString(fate); + return 0; + } + + } else if (hpdgc == kPdgPi0) { + /* handle pi0 */ + if (fate == kIHNFtCEx ) {xsec = TMath::Max(0., fXSecPi0p_CEx -> Evaluate(ke)) * targZ; + xsec+= TMath::Max(0., fXSecPi0n_CEx -> Evaluate(ke)) * (targA-targZ); + return xsec;} + else if (fate == kIHNFtElas ) {xsec = TMath::Max(0., fXSecPi0p_Elas -> Evaluate(ke)) * targZ; + xsec+= TMath::Max(0., fXSecPi0n_Elas -> Evaluate(ke)) * (targA-targZ); + return xsec;} + else if (fate == kIHNFtInelas) {xsec = TMath::Max(0., fXSecPi0p_Reac -> Evaluate(ke)) * targZ; + xsec+= TMath::Max(0., fXSecPi0n_Reac -> Evaluate(ke)) * (targA-targZ); + return xsec;} + else if (fate == kIHNFtAbs ) {xsec = TMath::Max(0., fXSecPi0d_Abs -> Evaluate(ke)) * targA; + return xsec;} + else { + LOG("INukeData", pWARN) + << "Pi0's don't have this fate: " << INukeHadroFates::AsString(fate); + return 0; + } + + } else if (hpdgc == kPdgProton) { + /* handle protons */ + if (fate == kIHNFtElas ) {xsec = TMath::Max(0., fXSecPp_Elas -> Evaluate(ke)) * targZ; + xsec+= TMath::Max(0., fXSecPn_Elas -> Evaluate(ke)) * (targA-targZ); + return xsec;} + else if (fate == kIHNFtInelas) {xsec = TMath::Max(0., fXSecPp_Reac -> Evaluate(ke)) * targZ; + xsec+= TMath::Max(0., fXSecPn_Reac -> Evaluate(ke)) * (targA-targZ); + return xsec;} + else if (fate == kIHNFtCmp) {xsec = TMath::Max(0., fXSecPp_Cmp -> Evaluate(ke)) * targZ; + xsec+= TMath::Max(0., fXSecPn_Cmp -> Evaluate(ke)) * (targA-targZ); + return xsec;} + else { + LOG("INukeData", pWARN) + << "Protons don't have this fate: " << INukeHadroFates::AsString(fate); + return 0; + } + + } else if (hpdgc == kPdgNeutron) { + /* handle protons */ + if (fate == kIHNFtElas ) {xsec = TMath::Max(0., fXSecPn_Elas -> Evaluate(ke)) * targZ; + xsec+= TMath::Max(0., fXSecNn_Elas -> Evaluate(ke)) * (targA-targZ); + return xsec;} + else if (fate == kIHNFtInelas) {xsec = TMath::Max(0., fXSecPn_Reac -> Evaluate(ke)) * targZ; + xsec+= TMath::Max(0., fXSecNn_Reac -> Evaluate(ke)) * (targA-targZ); + return xsec;} + else if (fate == kIHNFtCmp) {xsec = TMath::Max(0., fXSecPp_Cmp -> Evaluate(ke)) * targZ; + xsec+= TMath::Max(0., fXSecPn_Cmp -> Evaluate(ke)) * (targA-targZ); + return xsec;} + else { + LOG("INukeData", pWARN) + << "Neutrons don't have this fate: " << INukeHadroFates::AsString(fate); + return 0; + } + //Adding here kaons, why elastic only on protons? hA or hN? No _Reac for kaons... + } else if (hpdgc == kPdgKP) { + /* handle K+ */ + if (fate == kIHNFtCEx ) {xsec = TMath::Max(0., fXSecKpn_CEx -> Evaluate(ke)) * targZ; + xsec+= TMath::Max(0., fXSecKpn_CEx -> Evaluate(ke)) * (targA-targZ); + return xsec;} + else if (fate == kIHNFtElas ) {xsec = TMath::Max(0., fXSecKpn_Elas -> Evaluate(ke)) * targZ; + xsec+= TMath::Max(0., fXSecKpn_Elas -> Evaluate(ke)) * (targA-targZ); + return xsec;} + /*else if (fate == kIHNFtAbs ) {xsec = TMath::Max(0., fXSecKpd_Abs -> Evaluate(ke)) * targA; + return xsec;}*/ + else { + LOG("INukeData", pWARN) + << "K+'s don't have this fate: " << INukeHadroFates::AsString(fate); + return 0; + } + //------------------------------------------------ + /* } else if (hpdgc == kPdgGamma) { + / * handle gamma * / + if (fate == kIHNFtInelas) {xsec = TMath::Max(0., fXSecGamp_fs -> Evaluate(ke)) * targZ; + xsec+= TMath::Max(0., fXSecGamn_fs -> Evaluate(ke)) * (targA-targZ); + return xsec;} + else { + LOG("INukeData", pWARN) + << "Gamma's don't have this fate: " << INukeHadroFates::AsString(fate); + return 0; + }*/ + } + LOG("INukeData", pWARN) + << "Can't handle particles with pdg code = " << hpdgc; + + return 0; +} + +double INukeHadroData2025::Frac(int hpdgc, INukeFateHN_t fate, double ke, int targA, int targZ) const +{ +// return the x-section fraction for the input fate for the particle with the +// input pdg code at the input kinetic energy + + ke = TMath::Max(fMinKinEnergy, ke); + ke = TMath::Min(fMaxKinEnergyHN, ke); + + // get x-section + double xsec = this->XSec(hpdgc,fate,ke,targA,targZ); + + // get max x-section + double xsec_tot = 0; + if (hpdgc == kPdgPiP ){xsec_tot = TMath::Max(0., fXSecPipp_Tot -> Evaluate(ke)) * targZ; + xsec_tot+= TMath::Max(0., fXSecPipn_Tot -> Evaluate(ke)) * (targA-targZ);} + else if (hpdgc == kPdgPiM ){xsec_tot = TMath::Max(0., fXSecPipn_Tot -> Evaluate(ke)) * targZ; + xsec_tot+= TMath::Max(0., fXSecPipp_Tot -> Evaluate(ke)) * (targA-targZ);} + else if (hpdgc == kPdgPi0 ){xsec_tot = TMath::Max(0., fXSecPi0p_Tot -> Evaluate(ke)) * targZ; + xsec_tot+= TMath::Max(0., fXSecPi0n_Tot -> Evaluate(ke)) * (targA-targZ);} + else if (hpdgc == kPdgProton ){xsec_tot = TMath::Max(0., fXSecPp_Tot -> Evaluate(ke)) * targZ; + xsec_tot+= TMath::Max(0., fXSecPn_Tot -> Evaluate(ke)) * (targA-targZ);} + else if (hpdgc == kPdgNeutron){xsec_tot = TMath::Max(0., fXSecPn_Tot -> Evaluate(ke)) * targZ; + xsec_tot+= TMath::Max(0., fXSecNn_Tot -> Evaluate(ke)) * (targA-targZ);} + else if (hpdgc == kPdgGamma ) xsec_tot = TMath::Max(0., fXSecGamN_Tot -> Evaluate(ke)); + else if (hpdgc == kPdgKP ) xsec_tot = TMath::Max(0., fXSecKpN_Tot -> Evaluate(ke)); + + // compute fraction + double frac = (xsec_tot>0) ? xsec/xsec_tot : 0.; + return frac; +} +//____________________________________________________________________________ +double INukeHadroData2025::IntBounce(const GHepParticle* p, int target, int scode, INukeFateHN_t fate) +{ + // This method returns a random cos(ang) according to a distribution + // based upon the particle and fate. The sampling uses the + // Accept/Reject method, whereby a distribution is bounded above by + // an envelope, or in this case, a number of envelopes, which can be + // easily sampled (here, we use uniform distributions). + // To get a random value, first the envelope is sampled to + // obtain an x-coordinate (cos(ang)), and then another random value + // is obtained uniformally in the range [0,h(j,0)], where h(j,0) + // is the height of the j-th envelope. If the point is beneath the + // distribution, the x-coordinate is accepted, otherwise, we try + // again. + + RandomGen * rnd = RandomGen::Instance(); + + // numEnv is the number of envelopes in the total envelope, + // that is, the number of seperate simple uniform distributions + // that will be fit against the distribution in question in the + // Accept/Reject process of sampling + int numEnv = 4; + int numPoints = 1000; // The number of points to be evaluated + // for the purpose of finding the max + // value of the distribution + assert((numPoints%numEnv)==0); // numPoints/numEnv has to be an integer + double sr = 2.0 / numEnv; // Subrange, i.e., range of an envelope + double cstep = 2.0 / (numPoints); // Magnitude of the step between eval. points + + double ke = (p->E() - p->Mass()) * 1000.0; // ke in MeV + if (TMath::Abs((int)ke-ke)<.01) ke+=.3; // make sure ke isn't an integer, + // otherwise sometimes gives weird results + // due to ROOT's Interpolate() function + double avg = 0.0; // average value in envelop + + // Matrices to hold data; buff holds the distribution + // data per envelope from which the max value is + // obtained. That value is then recorded in dist, where + // the integral of the envelope to that point is + // also recorded + + double * buff = new double[numPoints/numEnv + 1]; + double ** dist = new double*[numEnv]; + for(int ih=0;ihXSec(p->Pdg(),target,scode,fate,ke,lbound+j*cstep); + avg += buff[j]; + } + + totxsec+=avg; + avg/= (double(numPoints)/double(numEnv)); + dist[i][0] = TMath::MaxElement(numPoints/numEnv+1,buff); + dist[i][1] = avg; + dist[i][2] = dist[i][1] + ((i==0)?0.0:dist[i-1][2]); + avg=0.0; + } + + + delete [] buff; + + int iter=1; // keep track of iterations + int env=0; // envelope index + double rval = 0.0; // random value + double val = 0.0; // angle value + + // Get a random point, see if its in the distribution, and if not + // then try again. + + rval = rnd->RndFsi().Rndm()*dist[numEnv-1][2]; + + env=0; + // Check which envelope it's in, to + // get proper height + while(envRndFsi().Rndm()*sr; + val += sr*env-1; + rval = rnd->RndFsi().Rndm()*dist[env][0]; + + // Test to see if point is in distribution, if it is, stop and return + if(rval < this->XSec(p->Pdg(),target,scode,fate,ke,val)) break; + + // Possibly an extremely long loop, don't want to + // hold up the program + if(iter==1000) + { + int NUM_POINTS=2000; + int pvalues=0; + double points[200]={0}; + for(int k=0;kXSec(p->Pdg(),target,scode,fate,ke,-1+(2.0/NUM_POINTS)*k); + if(points[int(k/10)]>0) pvalues++; + } + if(pvalues<(.05*NUM_POINTS)) + { + // if it reaches here, one more test...if momenta of particle is + // extremely low, just give it an angle from a uniform distribution + if(p->P4()->P()<.005) // 5 MeV + { + val = 2*rnd->RndFsi().Rndm()-1; + break; + } + else + { + LOG("Intranuke", pWARN) << "Hung-up in IntBounce method - Exiting"; + LOG("Intranuke", pWARN) << (*p); + LOG("Intranuke", pWARN) << "Target: " << target << ", Scode: " << scode << ", fate: " << INukeHadroFates::AsString(fate); + for(int ie=0;ie<200;ie+=10) { + LOG("Intranuke", pWARN) << points[ie+0] << ", " << points[ie+1] << ", " << points[ie+2] << ", " + << points[ie+3] << ", " << points[ie+4] << ", " << points[ie+5] << ", " << points[ie+6] << ", " + << points[ie+7] << ", " << points[ie+8] << ", " << points[ie+9]; + } + for(int ih=0;ih, Rutherford Lab. + Steve Dytman , Pittsburgh Univ. + Aaron Meyer , Pittsburgh Univ. + Alex Bell, Pittsburgh Univ. + +\created February 01, 2007 + +\cpright Copyright (c) 2003-2024, The GENIE Collaboration + For the full text of the license visit http://copyright.genie-mc.org + + +*/ +//____________________________________________________________________________ + +#ifndef _INTRANUKE_HADRON_CROSS_SECTIONS_2025_H_ +#define _INTRANUKE_HADRON_CROSS_SECTIONS_2025_H_ + +#include "Physics/HadronTransport/INukeHadroFates2025.h" +#include "Framework/GHEP/GHepParticle.h" +#include "Framework/Numerical/BLI2D.h" + +class TGraph2D; + +namespace genie { + +class Spline; + +class INukeHadroData2025 +{ +public: + static INukeHadroData2025 * Instance (void); + +// Note that, unlike most the rest of GENIE where everything is expressed +// in natural units, all x-section splines included here are evaluated in +// kinetic energies given in MeV and return the x-section value in mbarns + + double XSec (int hpdgc, int tgt, int nprod, INukeFateHN_t rxnType, double ke, double costh) const; + double XSec (int hpdgc, INukeFateHN_t fate, double ke, int targA, int targZ) const; + double FracADep (int hpdgc, INukeFateHA_t fate, double ke, int targA) const; + double FracAIndep (int hpdgc, INukeFateHA_t fate, double ke) const; + double Frac (int hpdgc, INukeFateHN_t fate, double ke, int targA=0, int targZ=0) const; + double IntBounce (const GHepParticle* p, int target, int s1, INukeFateHN_t fate); + + + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // hN mode hadron x-section splines + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + const Spline * XSecPipn_Tot (void) const { return fXSecPipn_Tot; } + const Spline * XSecPipn_CEx (void) const { return fXSecPipn_CEx; } + const Spline * XSecPipn_Elas (void) const { return fXSecPipn_Elas; } + const Spline * XSecPipn_Reac (void) const { return fXSecPipn_Reac; } + const Spline * XSecPipp_Tot (void) const { return fXSecPipp_Tot; } + const Spline * XSecPipp_CEx (void) const { return fXSecPipp_CEx; } + const Spline * XSecPipp_Elas (void) const { return fXSecPipp_Elas; } + const Spline * XSecPipp_Reac (void) const { return fXSecPipp_Reac; } + const Spline * XSecPipp_Abs (void) const { return fXSecPipd_Abs; } + const Spline * XSecPi0n_Tot (void) const { return fXSecPi0n_Tot; } + const Spline * XSecPi0n_CEx (void) const { return fXSecPi0n_CEx; } + const Spline * XSecPi0n_Elas (void) const { return fXSecPi0n_Elas; } + const Spline * XSecPi0n_Reac (void) const { return fXSecPi0n_Reac; } + const Spline * XSecPi0p_Tot (void) const { return fXSecPi0p_Tot; } + const Spline * XSecPi0p_CEx (void) const { return fXSecPi0p_CEx; } + const Spline * XSecPi0p_Elas (void) const { return fXSecPi0p_Elas; } + const Spline * XSecPi0p_Reac (void) const { return fXSecPi0p_Reac; } + const Spline * XSecPi0p_Abs (void) const { return fXSecPi0d_Abs; } + const Spline * XSecPp_Tot (void) const { return fXSecPp_Tot; } + const Spline * XSecPp_Elas (void) const { return fXSecPp_Elas; } + const Spline * XSecPp_Reac (void) const { return fXSecPp_Reac; } + const Spline * XSecPn_Tot (void) const { return fXSecPn_Tot; } + const Spline * XSecPn_Elas (void) const { return fXSecPn_Elas; } + const Spline * XSecPn_Reac (void) const { return fXSecPn_Reac; } + const Spline * XSecNn_Tot (void) const { return fXSecNn_Tot; } + const Spline * XSecNn_Elas (void) const { return fXSecNn_Elas; } + const Spline * XSecNn_Reac (void) const { return fXSecNn_Reac; } + const Spline * XSecKpn_Elas (void) const { return fXSecKpn_Elas; } + const Spline * XSecKpn_CEx (void) const { return fXSecKpn_CEx; } + const Spline * XSecKpp_Elas (void) const { return fXSecKpp_Elas; } + const Spline * XSecKpN_Abs (void) const { return fXSecKpN_Abs; } //not implemented + const Spline * XSecKpN_Tot (void) const { return fXSecKpN_Tot; } + const Spline * XSecGamp_fs (void) const { return fXSecGamp_fs; } + const Spline * XSecGamn_fs (void) const { return fXSecGamn_fs; } + const Spline * XSecGamN_Tot (void) const { return fXSecGamN_Tot; } + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // hA mode hadron x-section splines + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + const Spline * FracPA_Tot (void) const { return fFracPA_Tot; } + const Spline * FracPA_Elas (void) const { return fFracPA_Elas; } + const Spline * FracPA_Inel (void) const { return fFracPA_Inel; } + const Spline * FracPA_CEx (void) const { return fFracPA_CEx; } + const Spline * FracPA_Abs (void) const { return fFracPA_Abs; } + const Spline * FracPA_PiPro (void) const { return fFracPA_PiPro; } + const Spline * FracNA_Tot (void) const { return fFracNA_Tot; } + const Spline * FracNA_Elas (void) const { return fFracNA_Elas; } + const Spline * FracNA_Inel (void) const { return fFracNA_Inel; } + const Spline * FracNA_CEx (void) const { return fFracNA_CEx; } + const Spline * FracNA_Abs (void) const { return fFracNA_Abs; } + const Spline * FracNA_PiPro (void) const { return fFracNA_PiPro; } + const Spline * FracKA_Tot (void) const { return fFracKA_Tot; } + const Spline * FracKA_Elas (void) const { return fFracKA_Elas; } + const Spline * FracKA_Inel (void) const { return fFracKA_Inel; } + const Spline * FracKA_CEx (void) const { return fFracKA_CEx; } + const Spline * FracKA_Abs (void) const { return fFracKA_Abs; } + + const Spline * FracPA_Cmp (void) const { return fFracPA_Cmp; } + const Spline * FracNA_Cmp (void) const { return fFracNA_Cmp; } //suarez + + + const BLI2DNonUnifGrid * hN2dXSecPP_Elas (void) const { return fhN2dXSecPP_Elas; } + const BLI2DNonUnifGrid * hN2dXSecNP_Elas (void) const { return fhN2dXSecNP_Elas; } + const BLI2DNonUnifGrid * hN2dXSecPipN_Elas (void) const { return fhN2dXSecPipN_Elas; } + const BLI2DNonUnifGrid * hN2dXSecPi0N_Elas (void) const { return fhN2dXSecPi0N_Elas; } + const BLI2DNonUnifGrid * hN2dXSecPimN_Elas (void) const { return fhN2dXSecPimN_Elas; } + const BLI2DNonUnifGrid * hN2dXSecKpN_Elas (void) const { return fhN2dXSecKpN_Elas; } + const BLI2DNonUnifGrid * hN2dXSecKpP_Elas (void) const { return fhN2dXSecKpP_Elas; } + const BLI2DNonUnifGrid * hN2dXSecPiN_CEx (void) const { return fhN2dXSecPiN_CEx; } + const BLI2DNonUnifGrid * hN2dXSecPiN_Abs (void) const { return fhN2dXSecPiN_Abs; } + const BLI2DNonUnifGrid * hN2dXSecGamPi0P_Inelas (void) const { return fhN2dXSecGamPi0P_Inelas; } + const BLI2DNonUnifGrid * hN2dXSecGamPi0N_Inelas (void) const { return fhN2dXSecGamPi0N_Inelas; } + const BLI2DNonUnifGrid * hN2dXSecGamPipN_Inelas (void) const { return fhN2dXSecGamPipN_Inelas; } + const BLI2DNonUnifGrid * hN2dXSecGamPimP_Inelas (void) const { return fhN2dXSecGamPimP_Inelas; } + + static double fMinKinEnergy; ///< + static double fMaxKinEnergyHA; ///< + static double fMaxKinEnergyHN; ///< + +private: + INukeHadroData2025(); + INukeHadroData2025(const INukeHadroData2025 & shx); + ~INukeHadroData2025(); + + void LoadCrossSections(void); + + void ReadhNFile( + string filename, double ke, int npoints, int & curr_point, + /*double * ke_array,*/ double * costh_array, double * xsec_array, int cols); + + static INukeHadroData2025 * fInstance; + + Spline * fXSecPipn_Tot; ///< pi+n hN x-section splines + Spline * fXSecPipn_CEx; ///< + Spline * fXSecPipn_Elas; ///< + Spline * fXSecPipn_Reac; ///< + Spline * fXSecPipp_Tot; ///< pi+p hN x-section splines + Spline * fXSecPipp_CEx; ///< + Spline * fXSecPipp_Elas; ///< + Spline * fXSecPipp_Reac; ///< + Spline * fXSecPipd_Abs; ///< + Spline * fXSecPi0n_Tot; ///< pi0n hN x-section splines + Spline * fXSecPi0n_CEx; ///< + Spline * fXSecPi0n_Elas; ///< + Spline * fXSecPi0n_Reac; ///< + Spline * fXSecPi0p_Tot; ///< pi0p hN x-section splines + Spline * fXSecPi0p_CEx; ///< + Spline * fXSecPi0p_Elas; ///< + Spline * fXSecPi0p_Reac; ///< + Spline * fXSecPi0d_Abs; ///< + Spline * fXSecPp_Tot; ///< p/nN x-section splines + Spline * fXSecPp_Elas; ///< + Spline * fXSecPp_Reac; ///< + Spline * fXSecPn_Tot; ///< + Spline * fXSecPn_Elas; ///< + Spline * fXSecPn_Reac; ///< + Spline * fXSecNn_Tot; ///< + Spline * fXSecNn_Elas; ///< + Spline * fXSecNn_Reac; ///< + Spline * fXSecKpn_Elas; ///< K+N x-section splines + Spline * fXSecKpp_Elas; ///< + Spline * fXSecKpn_CEx; ///< + Spline * fXSecKpN_Abs; ///< + Spline * fXSecKpN_Tot; ///< + Spline * fFracPA_Tot; ///< N+A x-section splines + Spline * fFracPA_Elas; ///< + Spline * fFracPA_Inel; ///< + Spline * fFracPA_CEx; ///< + Spline * fFracPA_Abs; ///< + Spline * fFracPA_PiPro; ///< + Spline * fFracNA_Tot; ///< + Spline * fFracNA_Elas; ///< + Spline * fFracNA_Inel; ///< + Spline * fFracNA_CEx; ///< + Spline * fFracNA_Abs; ///< + Spline * fFracNA_PiPro; ///< + Spline * fFracKA_Tot; ///< K+A x-section splines + Spline * fFracKA_Elas; ///< + Spline * fFracKA_CEx; ///< + Spline * fFracKA_Inel; ///< + Spline * fFracKA_Abs; ///< + Spline * fXSecGamp_fs; ///< gamma A x-section splines + Spline * fXSecGamn_fs; ///< + Spline * fXSecGamN_Tot; ///< + Spline * fXSecPp_Cmp; ///< NN cmp (compound nucleus) fate + Spline * fXSecPn_Cmp; + Spline * fXSecNn_Cmp; + Spline * fFracPA_Cmp; + Spline * fFracNA_Cmp; + + // TGraph2D * TPipA_Tot; + TGraph2D * TfracPipA_CEx; +// TGraph2D * TfracPipA_Elas; + TGraph2D * TfracPipA_Inelas; + TGraph2D * TfracPipA_Abs; + TGraph2D * TfracPipA_PiPro; + + TGraph2D * TPipA_Tot; + TGraph2D * TPipA_CEx; + TGraph2D * TPipA_Inelas; + TGraph2D * TPipA_Abs; + TGraph2D * TPipA_PiPro; + + BLI2DNonUnifGrid * fhN2dXSecPP_Elas; + BLI2DNonUnifGrid * fhN2dXSecNP_Elas; + BLI2DNonUnifGrid * fhN2dXSecPipN_Elas; + BLI2DNonUnifGrid * fhN2dXSecPi0N_Elas; + BLI2DNonUnifGrid * fhN2dXSecPimN_Elas; + BLI2DNonUnifGrid * fhN2dXSecKpN_Elas; + BLI2DNonUnifGrid * fhN2dXSecKpP_Elas; + BLI2DNonUnifGrid * fhN2dXSecKpN_CEx; + BLI2DNonUnifGrid * fhN2dXSecKpN_Abs; + BLI2DNonUnifGrid * fhN2dXSecPiN_CEx; + BLI2DNonUnifGrid * fhN2dXSecPiN_Abs; + BLI2DNonUnifGrid * fhN2dXSecGamPi0P_Inelas; + BLI2DNonUnifGrid * fhN2dXSecGamPi0N_Inelas; + BLI2DNonUnifGrid * fhN2dXSecGamPipN_Inelas; + BLI2DNonUnifGrid * fhN2dXSecGamPimP_Inelas; + + //-- Sinleton cleaner + struct Cleaner { + void DummyMethodAndSilentCompiler() { } + ~Cleaner() { + if (INukeHadroData2025::fInstance !=0) { + delete INukeHadroData2025::fInstance; + INukeHadroData2025::fInstance = 0; + } + } + }; + friend struct Cleaner; +}; + +} // genie namespace +#endif //_INTRANUKE_HADRON_CROSS_SECTIONS_2015_H_ + + diff --git a/src/Physics/HadronTransport/INukeHadroFates2025.h b/src/Physics/HadronTransport/INukeHadroFates2025.h new file mode 100644 index 000000000..0cb89de35 --- /dev/null +++ b/src/Physics/HadronTransport/INukeHadroFates2025.h @@ -0,0 +1,123 @@ +//____________________________________________________________________________ +/*! + +\class genie::INukeHadroFates + +\brief An enumeration of possible hadron "fates" taken into account by the + INTRANUKE hadron transport MC. + +\author Steve Dytman , Pittsburgh Univ. + Hugh Gallagher , Tufts Univ. + Costas Andreopoulos , Rutherford Lab. + +\created November 1, 2005 + +\cpright Copyright (c) 2003-2024, The GENIE Collaboration + For the full text of the license visit http://copyright.genie-mc.org + +*/ +//____________________________________________________________________________ + +#ifndef _INTRANUKE_FATES_H_ +#define _INTRANUKE_FATES_H_ + +#include + +using std::string; + +namespace genie { + +// Fates in INTRANUKE's HN mode +// +typedef enum EINukeFateHN_t { + + kIHNFtUndefined = 0, + kIHNFtNoInteraction, + kIHNFtCEx, // cex + kIHNFtElas, // elas + kIHNFtInelas, // inelas + kIHNFtAbs, // abs + kIHNFtCmp //cmp + +} INukeFateHN_t; + +// Fates in INTRANUKE's HA mode +// +typedef enum EINukeFateHA_t { + + kIHAFtUndefined = 0, + kIHAFtNoInteraction, // no interaction + kIHAFtCEx, // cex + // kIHAFtElas, // elas + kIHAFtInelas, // inelas + kIHAFtAbs, // abs + kIHAFtKo, // knock out + kIHAFtCmp, // compound nucleus + kIHAFtPiProd, // pi production + kIHAFtInclPip, // pi production : inclusive pi+ + kIHAFtInclPim, // pi production : inclusive pi- + kIHAFtInclPi0, // pi production : inclusive pi0 + kIHAFtDCEx // dcex + +} INukeFateHA_t; + +class INukeHadroFates { + +public: + //__________________________________________________________________________ + static string AsString(INukeFateHN_t fate) { + switch (fate) { + case kIHNFtUndefined : return "** Undefined HN-mode fate **"; break; + case kIHNFtCEx : return "HN-mode / cex"; break; + case kIHNFtElas : return "HN-mode / elas"; break; + case kIHNFtInelas : return "HN-mode / inelas"; break; + case kIHNFtAbs : return "HN-mode / abs"; break; + case kIHNFtCmp : return "HN-mode / compound"; break; + case kIHNFtNoInteraction : return "HN-mode / no interaction"; break; + default : break; + } + return "** Undefined HN-mode fate **"; + } + //__________________________________________________________________________ + static string AsString(INukeFateHA_t fate) { + switch (fate) { + case kIHAFtUndefined : return "** Undefined HA-mode fate **"; break; + case kIHAFtNoInteraction : return "HA-mode / no interaction"; break; + case kIHAFtCEx : return "HA-mode / cex"; break; + // case kIHAFtElas : return "HA-mode / elas"; break; + case kIHAFtInelas : return "HA-mode / inelas"; break; + case kIHAFtAbs : return "HA-mode / abs"; break; + case kIHAFtKo : return "HA-mode / knock-out"; break; + case kIHAFtCmp : return "HA-mode / compound"; break; + case kIHAFtPiProd : return "HA-mode / pi-production" ; break; + case kIHAFtInclPip : return "HA-mode / pi-prod incl pi+"; break; + case kIHAFtInclPim : return "HA-mode / pi-prod incl pi-"; break; + case kIHAFtInclPi0 : return "HA-mode / pi-prod incl pi0"; break; + case kIHAFtDCEx : return "HA-mode / dcex"; break; + default : break; + } + return "** Undefined HA-mode fate **"; + } + //__________________________________________________________________________ + static string AsSimpleString(INukeFateHA_t fate) { + switch (fate) { + case kIHAFtUndefined : return "undefined"; break; + case kIHAFtNoInteraction : return "no interaction"; break; + case kIHAFtCEx : return "cex"; break; + // case kIHAFtElas : return "elas"; break; + case kIHAFtInelas : return "inelas"; break; + case kIHAFtAbs : return "abs"; break; + case kIHAFtKo : return "knock out"; break; + case kIHAFtCmp : return "compound"; break; + case kIHAFtPiProd : return "pi prod"; break; + case kIHAFtDCEx : return "dcex"; break; + default : break; + } + return "undefined"; + } + //__________________________________________________________________________ + +}; + +} // genie +#endif // _INTRANUKE_FATES_H_ diff --git a/src/Physics/HadronTransport/INukeUtils2025.cxx b/src/Physics/HadronTransport/INukeUtils2025.cxx new file mode 100644 index 000000000..c403f6f59 --- /dev/null +++ b/src/Physics/HadronTransport/INukeUtils2025.cxx @@ -0,0 +1,1950 @@ +//____________________________________________________________________________ +/* + Copyright (c) 2003-2023, The GENIE Collaboration + For the full text of the license visit http://copyright.genie-mc.org + + + Author: Jim Dobson + Imperial College London + + Costas Andreopoulos + University of Liverpool & STFC Rutherford Appleton Laboratory + + Aaron Meyer + Pittsburgh University + + For documentation see the corresponding header file. + + Important revisions after version 2.0.0 : + @ Mar 04, 2009 - JD + Was first added in v2.5.1. Adapted from the T2K GENIE reweighting tool. + @ Mar 05, 2009 - CA + Modified ReconstructHadronFateHA() to work with hadron+A event files in + addition to neutrino event files. + @ Sep 10, 2009 - CA + Added MeanFreePath(), Dist2Exit(), Dist2ExitMFP() + @ Sep 30, 2009 - CA + Added StepParticle() from Intranuke.cxx + @ Oct 02, 2009 - CA + Added test MeanFreePath_Delta(). + @ Jul 15, 2010 - AM + Added common utility functions used by both hA and hN mode. Updated + MeanFreePath to separate proton and neutron cross sections. Added general + utility functions. + @ Jan 9, 2015 - SD, NG, TG + Added 2014 version of INTRANUKE codes for v2.9.0. Uses INukeHadroData2014, + but no changes to mean free path. +*/ +//____________________________________________________________________________ + +#include +#include +#include + +#include "Framework/Algorithm/AlgConfigPool.h" +#include "Framework/Conventions/Constants.h" +#include "Framework/Conventions/Controls.h" +#include "Framework/Conventions/Units.h" +#include "Framework/Conventions/GBuild.h" +#include "Framework/EventGen/EVGThreadException.h" +#include "Framework/GHEP/GHepRecord.h" +#include "Framework/GHEP/GHepParticle.h" +#include "Physics/HadronTransport/Intranuke2025.h" +#include "Physics/HadronTransport/INukeException.h" +#include "Physics/HadronTransport/INukeUtils2025.h" +#include "Physics/HadronTransport/INukeHadroData2025.h" +#include "Framework/Messenger/Messenger.h" +#include "Framework/Numerical/RandomGen.h" +#include "Framework/Numerical/Spline.h" +#include "Framework/ParticleData/PDGLibrary.h" +#include "Framework/ParticleData/PDGUtils.h" +#include "Framework/ParticleData/PDGCodes.h" +#include "Framework/ParticleData/PDGCodeList.h" +#include "Framework/ParticleData/PDGUtils.h" +#include "Framework/Registry/Registry.h" +#include "Physics/NuclearState/NuclearUtils.h" +#include "Framework/Utils/PrintUtils.h" +#include "Physics/HadronTransport/INukeOset.h" +#include "Physics/HadronTransport/INukeOsetTable.h" +#include "Physics/HadronTransport/INukeOsetFormula.h" +#include "TComplex.h" + +using std::ostringstream; +using namespace genie; +using namespace genie::utils; +using namespace genie::constants; +using namespace genie::controls; + +//____________________________________________________________________________ +double genie::utils::intranuke2025::MeanFreePath( + int pdgc, const TLorentzVector & x4, const TLorentzVector & p4, + double A, double Z, double nRpi, double nRnuc, const bool useOset, const bool altOset, const bool xsecNNCorr, string INukeMode) +{ +// Calculate the mean free path (in fm) for a pions and nucleons in a nucleus +// +// Inputs +// pdgc : Hadron PDG code +// x4 : Hadron 4-position in the nucleus coordinate system (units: fm) +// p4 : Hadron 4-momentum (units: GeV) +// A : Nucleus atomic mass number +// nRpi : Controls the pion ring size in terms of de-Broglie wavelengths +// nRnuc: Controls the nuclepn ring size in terms of de-Broglie wavelengths +// + bool is_pion = pdgc == kPdgPiP || pdgc == kPdgPi0 || pdgc == kPdgPiM; + bool is_nucleon = pdgc == kPdgProton || pdgc == kPdgNeutron; + bool is_kaon = pdgc == kPdgKP; + bool is_gamma = pdgc == kPdgGamma; + + if(!is_pion && !is_nucleon && !is_kaon && !is_gamma) return 0.; + + // before getting the nuclear density at the current position + // check whether the nucleus has to become larger by const times the + // de Broglie wavelength -- that is somewhat empirical, but this + // is what is needed to get piA total cross sections right. + // The ring size is different for light nuclei (using gaus density) / + // heavy nuclei (using woods-saxon density). + // The ring size is different for pions / nucleons. + // + double momentum = p4.Vect().Mag(); // hadron momentum in GeV + double ring = (momentum>0) ? 1.240/momentum : 0; // de-Broglie wavelength + + if(A<=20) { ring /= 2.; } + + /* + if (is_pion ) { ring *= nRpi; } + else if (is_nucleon ) { ring *= nRnuc; } + else if (is_gamma || is_kaon || useOset) { ring = 0.; } + */ + if(INukeMode=="hN2025") + { + if (is_pion ) { ring *= nRpi; } + else if (is_nucleon ) { ring *= nRnuc; } + else if (is_gamma || is_kaon || useOset) { ring = 0.;} + } + else + { + if (is_pion || is_kaon ) { ring *= nRpi; } + else if (is_nucleon ) { ring *= nRnuc; } + else if (is_gamma ) { ring = 0.; } + } + + // get the nuclear density at the current position + double rnow = x4.Vect().Mag(); + double rho = A * utils::nuclear::Density(rnow,(int) A,ring); + + // the hadron+nucleon cross section will be evaluated within the range + // of the input spline and assumed to be const outside that range + // + double ke = (p4.Energy() - p4.M()) / units::MeV; // kinetic energy in MeV + ke = TMath::Max(INukeHadroData2025::fMinKinEnergy, ke); + ke = TMath::Min(INukeHadroData2025::fMaxKinEnergyHN, ke); + + // get total xsection for the incident hadron at its current + // kinetic energy + double sigtot = 0; + double ppcnt = (double) Z/ (double) A; // % of protons remaining + INukeHadroData2025 * fHadroData2025 = INukeHadroData2025::Instance(); + + if (is_pion and (INukeMode == "hN2025") and useOset and ke < 350.0) + sigtot = sigmaTotalOset (ke, rho, pdgc, ppcnt, altOset); + else if (pdgc == kPdgPiP) + { sigtot = fHadroData2025 -> XSecPipp_Tot() -> Evaluate(ke)*ppcnt; + sigtot+= fHadroData2025 -> XSecPipn_Tot() -> Evaluate(ke)*(1-ppcnt);} + else if (pdgc == kPdgPi0) + { sigtot = fHadroData2025 -> XSecPi0p_Tot() -> Evaluate(ke)*ppcnt; + sigtot+= fHadroData2025 -> XSecPi0n_Tot() -> Evaluate(ke)*(1-ppcnt);} + else if (pdgc == kPdgPiM) + { sigtot = fHadroData2025 -> XSecPipn_Tot() -> Evaluate(ke)*ppcnt; + sigtot+= fHadroData2025 -> XSecPipp_Tot() -> Evaluate(ke)*(1-ppcnt);} + else if (pdgc == kPdgProton) + { + sigtot = fHadroData2025 -> XSecPp_Tot() -> Evaluate(ke)*ppcnt; + //sigtot+= fHadroData2025 -> XSecPn_Tot() -> Evaluate(ke)*(1-ppcnt); + + PDGLibrary * pLib = PDGLibrary::Instance(); + double hc = 197.327; + double R0 = 1.25 * TMath::Power(A,1./3.) + 2.0 * 0.65; // should all be in units of fm + double Mp = pLib->Find(2212)->Mass(); + double M = pLib->Find(pdgc)->Mass(); + //double E = (p4.Energy() - Mp) * 1000.; // Convert GeV to MeV. + double E = ke; + if (Z*hc/137./x4.Vect().Mag() > E) // Coulomb correction (Cohen, Concepts of Nuclear Physics, pg. 259-260) + { + double z = 1.0; // charge for single proton + double Bc = z*Z*hc/137./R0; + double x = E/Bc; + double f = TMath::ACos(TMath::Power(x,0.5)) - TMath::Power(x*(1-x),0.5); + double B = 0.63*z*Z*TMath::Power((M/Mp)/E,0.5); + double Pc = TMath::Exp(-B*f); + sigtot *= Pc; + } + sigtot+= fHadroData2025 -> XSecPn_Tot() -> Evaluate(ke)*(1-ppcnt); + + double E0 = TMath::Power(A,0.2)*12.; + if (INukeMode=="hN2025"){if(ke mfp = " << lamda << " fm."; +*/ + return lamda; +} +//____________________________________________________________________________ +double genie::utils::intranuke2025::MeanFreePath_Delta( + int pdgc, const TLorentzVector & x4, const TLorentzVector & p4, double A) +{ +// +// **test** +// + +// Calculate the mean free path (in fm) for Delta's in a nucleus +// +// Inputs +// pdgc : Hadron PDG code +// x4 : Hadron 4-position in the nucleus coordinate system (units: fm) +// p4 : Hadron 4-momentum (units: GeV) +// A : Nucleus atomic mass number +// + bool is_deltapp = (pdgc==kPdgP33m1232_DeltaPP); + if(!is_deltapp) return 0.; + + // get the nuclear density at the current position + double rnow = x4.Vect().Mag(); + double rho = A * utils::nuclear::Density(rnow,(int) A); + + // the Delta+N->N+N cross section will be evaluated within the range + // of the input spline and assumed to be const outside that range + double ke = (p4.Energy() - p4.M()) / units::MeV; // kinetic energy in MeV + ke = TMath::Max(1500., ke); + ke = TMath::Min( 0., ke); + + // get the Delta+N->N+N cross section + double sig = 0; + if (ke< 500) sig=20; + else if (ke<1000) sig=40; + else sig=30; + + // value is in mb -> convert to fm^2 + sig *= (units::mb / units::fm2); + + // compute the mean free path + double lamda = 1. / (rho * sig); + + // exits if lamda is InF (if cross section is 0) + if( ! TMath::Finite(lamda) ) { + return -1; + } + + return lamda; +} +//____________________________________________________________________________ +double genie::utils::intranuke2025::ProbSurvival( + int pdgc, const TLorentzVector & x4, const TLorentzVector & p4, double A, double /*Z*/, + double mfp_scale_factor, const Intranuke2025& fsi_model ) +{ +// Calculate the survival probability for a hadron inside a nucleus +// +// Inputs +// pdgc : Hadron PDG code +// x4 : Hadron 4-position in the nucleus coordinate system (units: fm) +// p4 : Hadron 4-momentum (units: GeV) +// A : Target nucleus atomic mass number +// mfp_scale_factor: Tweaks the mean free path (mfp -> mfp*scale). Def: 1.0 + + double prob = 1.0; + + // Get extra parameters from the FSI model that we need to compute the + // mean free path + + // nRpi: Controls the pion ring size in terms of de-Broglie wavelengths + double nRpi = fsi_model.GetDelRPion(); + + // nRnuc: Controls the nuclepn ring size in terms of de-Broglie wavelengths + double nRnuc = fsi_model.GetDelRNucleon(); + + // NR: How far away to track the hadron, in terms of the corresponding + // nuclear radius. Def: 3 + double NR = fsi_model.GetNR(); + + // R0: R0 in R=R0*A^1/3 (units:fm). Def. 1.4 + double R0 = fsi_model.GetR0(); + + // step: Step size (fm) to use when tracking hadrons + double step = fsi_model.GetHadStep(); + + // Boolean model configuration options + bool useOset = fsi_model.GetUseOset(); + bool altOset = fsi_model.GetAltOset(); + bool xsecNNCorr = fsi_model.GetXsecNNCorr(); + + // Intranuke mode setting ("HA2025", etc.) + std::string inuke_mode = fsi_model.GetINukeMode(); + + // Maximum radius to use in the stepping loop. Note that Intranuke2025 uses + // the *target* mass number to choose this radius, not the value for the + // pre- or post-FSI remnant. + double R = NR * R0 * TMath::Power(A, 1./3.); + + TVector3 dr3 = p4.Vect().Unit(); // unit vector along its direction + TLorentzVector dr4(dr3,0); + + int remnA = fsi_model.GetRemnA(); + int remnZ = fsi_model.GetRemnZ(); + + LOG("INukeUtils", pDEBUG) + << "Calculating survival probability for hadron with PDG code = " << pdgc + << " and momentum = " << p4.P() << " GeV"; + LOG("INukeUtils", pDEBUG) + << "mfp scale = " << mfp_scale_factor + << ", nRpi = " << nRpi << ", nRnuc = " << nRnuc << ", NR = " << NR + << ", R0 = " << R0 << " fm"; + + TLorentzVector x4_curr(x4); // current position + + while(1) { + double rnow = x4_curr.Vect().Mag(); + if (rnow > (R+step)) break; + + x4_curr += (step*dr4); + rnow = x4_curr.Vect().Mag(); + + double mfp = genie::utils::intranuke2025::MeanFreePath( pdgc, x4_curr, p4, + remnA, remnZ, nRpi, nRnuc, useOset, altOset, xsecNNCorr, inuke_mode ); + double mfp_twk = mfp * mfp_scale_factor; + + double dprob = (mfp_twk>0) ? TMath::Exp(-step/mfp_twk) : 0.; + prob*=dprob; +/* + LOG("INukeUtils", pDEBUG) + << "+ step size = " << step << " fm, |r| = " << rnow << " fm, " + << "mfp = " << mfp_twk << "fm (nominal mfp = " << mfp << " fm): " + << "dPsurv = " << dprob << ", current Psurv = " << prob; +*/ + } + + LOG("INukeUtils", pDEBUG) << "Psurv = " << prob; + + return prob; +} +//____________________________________________________________________________ +double genie::utils::intranuke2025::Dist2Exit( + const TLorentzVector & x4, const TLorentzVector & p4, + double A, double NR, double R0) +{ +// Calculate distance within a nucleus (units: fm) before we stop tracking +// the hadron. +// See previous functions for a description of inputs. +// + double R = NR * R0 * TMath::Power(A, 1./3.); + double step = 0.05; // fermi + + TVector3 dr3 = p4.Vect().Unit(); // unit vector along its direction + TLorentzVector dr4(dr3,0); + + TLorentzVector x4_curr(x4); // current position + + double d=0; + while(1) { + double rnow = x4_curr.Vect().Mag(); + x4_curr += (step*dr4); + d+=step; + rnow = x4_curr.Vect().Mag(); + if (rnow > R) break; + } + return d; +} +//____________________________________________________________________________ +double genie::utils::intranuke2025::Dist2ExitMFP( + int pdgc, const TLorentzVector & x4, const TLorentzVector & p4, + double A, double Z, double NR, double R0) +{ +// Calculate distance within a nucleus (expressed in terms of 'mean free +// paths') before we stop tracking the hadron. +// See previous functions for a description of inputs. +// + +// distance before exiting in mean free path lengths +// + double R = NR * R0 * TMath::Power(A, 1./3.); + double step = 0.05; // fermi + + TVector3 dr3 = p4.Vect().Unit(); // unit vector along its direction + TLorentzVector dr4(dr3,0); + + TLorentzVector x4_curr(x4); // current position + + double d=0; + double d_mfp=0; + while(1) { + double rnow = x4_curr.Vect().Mag(); + x4_curr += (step*dr4); + d+=step; + rnow = x4_curr.Vect().Mag(); + + double lambda = genie::utils::intranuke2025::MeanFreePath(pdgc,x4_curr,p4,A,Z); + d_mfp += (step/lambda); + + if (rnow > R) break; + } + return d_mfp; +} +//____________________________________________________________________________ +void genie::utils::intranuke2025::StepParticle( + GHepParticle * p, double step, double nuclear_radius) +{ +// Steps a particle starting from its current position (in fm) and moving +// along the direction of its current momentum by the input step (in fm). +// The particle is stepped in a straight line. +// If a nuclear radius is set then the following check is performed: +// If the step is too large and takes the the particle far away from the +// nucleus then its position is scaled back so that the escaped particles are +// always within a ~1fm from the "outer nucleus surface" + +#ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__ + LOG("INukeUtils", pDEBUG) + << "Stepping particle [" << p->Name() << "] by dr = " << step << " fm"; +#endif + + // Step particle + TVector3 dr = p->P4()->Vect().Unit(); // unit vector along its direction + dr.SetMag(step); // spatial step size + double dt = 0; // temporal step: + TLorentzVector dx4(dr,dt); // 4-vector step + TLorentzVector x4new = *(p->X4()) + dx4; // new position + + if(nuclear_radius > 0.) { + // Check position against nuclear boundary. If the particle was stepped + // too far away outside the nuclear boundary bring it back to within + // 1fm from that boundary + double epsilon = 1; // fm + double r = x4new.Vect().Mag(); // fm + double rmax = nuclear_radius+epsilon; + if(r > rmax) { + LOG("INukeUtils", pINFO) + << "Particle was stepped too far away (r = " << r << " fm)"; + LOG("INukeUtils", pINFO) + << "Placing it " << epsilon + << " fm outside the nucleus (r' = " << rmax << " fm)"; + double scale = rmax/r; + x4new *= scale; + }//r>rmax + }//nucl radius set + +#ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__ + LOG("INukeUtils", pDEBUG) + << "\n Init direction = " << print::Vec3AsString(&dr) + << "\n Init position (in fm,nsec) = " << print::X4AsString(p->X4()) + << "\n Fin position (in fm,nsec) = " << print::X4AsString(&x4new); +#endif + + p->SetPosition(x4new); +} + + +//___________________________________________________________________________ +// Method to handle compound nucleus considerations, preequilibrium +// and equilibrium +// Alex Bell -- 6/17/2008 +void genie::utils::intranuke2025::PreEquilibrium( + GHepRecord * ev, GHepParticle * p, + int &RemnA, int &RemnZ, TLorentzVector &RemnP4, + bool /* DoFermi */, double /* FermiFac */, + const NuclearModelI* /* Nuclmodel */, double NucRmvE, EINukeMode mode) +{ + +#ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__ + LOG("INukeUtils", pDEBUG) + << "PreEquilibrium() is invoked for a : " << p->Name() + << " whose kinetic energy is : " << p->KinE(); +#endif + + // Random number generator + RandomGen * rnd = RandomGen::Instance(); + //unused PDGLibrary * pLib = PDGLibrary::Instance(); + + bool allow_dup = true; + PDGCodeList list(allow_dup); // list of final state particles + + double ppcnt = (double) RemnZ / (double) RemnA; // % of protons left + + // figure out the final state conditions + + if(p->Pdg()==kPdgProton) list.push_back(kPdgProton); + else if(p->Pdg()==kPdgNeutron) list.push_back(kPdgNeutron); + + for(int i=0;i<3;i++) + { + if(rnd->RndFsi().Rndm()TargetNucleus()->Pdg()); + TVector3 pBuf = p->P4()->Vect(); + double mBuf = p->Mass(); + double eBuf = TMath::Sqrt(pBuf.Mag2() + mBuf*mBuf); + TLorentzVector tSum(pBuf,eBuf); + double mSum = 0.0; + vector::const_iterator pdg_iter; + for(pdg_iter=++(list.begin());pdg_iter!=list.end();++pdg_iter) + { + target.SetHitNucPdg(*pdg_iter); + Nuclmodel->GenerateNucleon(target); + mBuf = pLib->Find(*pdg_iter)->Mass(); + mSum += mBuf; + pBuf = FermiFac * Nuclmodel->Momentum3(); + eBuf = TMath::Sqrt(pBuf.Mag2() + mBuf*mBuf); + tSum += TLorentzVector(pBuf,eBuf); + RemnP4 -= TLorentzVector(pBuf,eBuf-mBuf); + } + TLorentzVector dP4 = tSum + TLorentzVector(TVector3(0,0,0),-mSum); + p->SetMomentum(dP4); + } + */ + // do the phase space decay & save all f/s particles to the event record + bool success = genie::utils::intranuke2025::PhaseSpaceDecay(ev,p,list,RemnP4,NucRmvE,mode); + if(success) LOG("INukeUtils2025",pINFO) << "Successful phase space decay for pre-equilibrium nucleus FSI event"; + else + { + exceptions::INukeException exception; + exception.SetReason("Phase space generation of pre-equilibrium nucleus final state failed, details above"); + throw exception; + } + + int p_loc = 0; + while(p_locGetEntries()) + { + GHepParticle * p_ref = ev->Particle(p_loc); + if(!p->ComparePdgCodes(p_ref)) p_loc++; + else + { + if(!p->CompareStatusCodes(p_ref)) p_loc++; + else + { + if(!p->CompareMomentum(p_ref)) p_loc++; + else break; + } + } + } + +#ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__ + LOG("INukeUtils", pDEBUG) + << "Particle at: " << p_loc; +#endif + + // find the appropriate daughter + vector * descendants = ev->GetStableDescendants(p_loc); + + int loc = p_loc + 1; + int f_loc = p_loc + 1; + double energy = ev->Particle(loc)->E(); + +/* // (1) least energetic + double min_en = energy; + + for(unsigned int j=0;jsize();j++) + { + loc = (*descendants)[j]; + energy = ev->Particle(loc)->E(); + if(energysize();j++) + { + loc = (*descendants)[j]; + energy = ev->Particle(loc)->E(); + if(energy>max_en) + { + f_loc = loc; + max_en = energy; + } + } + + // (3) 1st particle + // ...just use the defaulted f_loc + + delete descendants; + + // change particle status for decaying particle - take out as test + //ev->Particle(f_loc)->SetStatus(kIStIntermediateState); + // decay a clone particle + GHepParticle * t = new GHepParticle(*(ev->Particle(f_loc))); + t->SetFirstMother(f_loc); + //next statement was in Alex Bell's original code - PreEq, then Equilibrium using particle with highest energy. Note it gets IST=kIStIntermediateState. + //genie::utils::intranuke2025::Equilibrium(ev,t,RemnA,RemnZ,RemnP4,DoFermi,FermiFac,Nuclmodel,NucRmvE,mode); + + delete t; +} +//___________________________________________________________________________ +// Method to handle Equilibrium reaction +// Alex Bell -- 6/17/2008 +void genie::utils::intranuke2025::Equilibrium( + GHepRecord * ev, GHepParticle * p, + int &RemnA, int &RemnZ, TLorentzVector &RemnP4, + bool /* DoFermi */, double /* FermiFac */, + const NuclearModelI* /* Nuclmodel */, double NucRmvE, EINukeMode mode) +{ + +#ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__ + LOG("INukeUtils", pDEBUG) + << "Equilibrium() is invoked for a : " << p->Name() + << " whose kinetic energy is : " << p->KinE(); +#endif + + // Random number generator + RandomGen * rnd = RandomGen::Instance(); + //usused PDGLibrary * pLib = PDGLibrary::Instance(); + + bool allow_dup = true; + PDGCodeList list(allow_dup); // list of final state particles + + // % of protons left + double ppcnt = (double) RemnZ / (double) RemnA; + + // figure out the final state conditions + + if(p->Pdg()==kPdgProton) list.push_back(kPdgProton); + else if(p->Pdg()==kPdgNeutron) list.push_back(kPdgNeutron); + + //add additonal particles to stack + for(int i=0;i<4;i++) + { + if(rnd->RndFsi().Rndm()TargetNucleus()->Pdg()); + TVector3 pBuf = p->P4()->Vect(); + double mBuf = p->Mass(); + double eBuf = TMath::Sqrt(pBuf.Mag2() + mBuf*mBuf); + TLorentzVector tSum(pBuf,eBuf); + double mSum = 0.0; + vector::const_iterator pdg_iter; + for(pdg_iter=++(list.begin());pdg_iter!=list.end();++pdg_iter) + { + target.SetHitNucPdg(*pdg_iter); + Nuclmodel->GenerateNucleon(target); + mBuf = pLib->Find(*pdg_iter)->Mass(); + mSum += mBuf; + pBuf = FermiFac * Nuclmodel->Momentum3(); + eBuf = TMath::Sqrt(pBuf.Mag2() + mBuf*mBuf); + tSum += TLorentzVector(pBuf,eBuf); + RemnP4 -= TLorentzVector(pBuf,eBuf-mBuf); + } + TLorentzVector dP4 = tSum + TLorentzVector(TVector3(0,0,0),-mSum); + p->SetMomentum(dP4); + } + */ + // do the phase space decay & save all f/s particles to the record + bool success = genie::utils::intranuke2025::PhaseSpaceDecay(ev,p,list,RemnP4,NucRmvE,mode); + if (success) LOG("INukeUtils",pINFO) << "successful equilibrium interaction"; + else + { + exceptions::INukeException exception; + exception.SetReason("Phase space generation of compound nucleus final state failed, details above"); + throw exception; + } + +} + + +//___________________________________________________________________________ +bool genie::utils::intranuke2025::TwoBodyCollision( + GHepRecord* ev, int pcode, int tcode, int scode, int s2code, double C3CM, + GHepParticle* p, GHepParticle* t, int &RemnA, int &RemnZ, TLorentzVector &RemnP4, EINukeMode mode) +{ + // Aaron Meyer (10/29/09) + // Adapted from kinematics in other function calls + // + // C3CM is the cosine of the scattering angle, calculated before calling + // p and t are the output particles, must be allocated before calling + // pcode,tcode,scode,s2code are initial and final particle PDG codes in scattering + // return value used for error checking + + // Kinematic variables + + double M1, /* M2, */ M3, M4; // rest energies, in GeV + double E3L, P3L, E4L, P4L; + TVector3 tP1L, tPtot, tbeta, tbetadir, tTrans, tVect; + TVector3 tP1zCM, tP2zCM, tP3L, tP4L; + + // Library instance for reference + PDGLibrary * pLib = PDGLibrary::Instance(); + + // random number generator + //RandomGen * rnd = RandomGen::Instance(); + + // handle fermi target + Target target(ev->TargetNucleus()->Pdg()); + + // get mass for particles + M1 = pLib->Find(pcode)->Mass(); + // usused // M2 = pLib->Find(tcode)->Mass(); + M3 = pLib->Find(scode)->Mass(); + M4 = pLib->Find(s2code)->Mass(); + + // get lab energy and momenta and assign to 4 vectors + TLorentzVector t4P1L = *p->P4(); + TLorentzVector t4P2L = *t->P4(); + + // binding energy + double bindE = 0.025; // empirical choice, might need to be improved + //double bindE = 0.0; + + LOG("TwoBodyCollision",pNOTICE) << "M1 = " << t4P1L.M() << " , M2 = " << t4P2L.M(); + LOG("TwoBodyCollision",pNOTICE) << "E1 = " << t4P1L.E() << " , E2 = " << t4P2L.E(); + + if ( (p->Energy()-p->Mass()) < bindE ){bindE = 0.;} // if the probe's energy is less than the binding energy, set the binding energy to 0. + + // don't use BE unless kinetic energy >> BE. + if((pcode==2112||pcode==2212)&&(t4P1L.E()-M1)<.1) bindE = 0.0; + if((pcode==211||pcode==-211||pcode==111)&&(t4P1L.E()-M1)<.08) bindE = 0.0; + if((pcode==321)&&(t4P1L.E()-M1)<.1) bindE = 0.0; + + // carry out scattering + TLorentzVector t4P3L, t4P4L; + if (!TwoBodyKinematics(M3,M4,t4P1L,t4P2L,t4P3L,t4P4L,C3CM,RemnP4,bindE)) + { + P3L = t4P3L.Vect().Mag(); + P4L = t4P4L.Vect().Mag(); + E3L = t4P3L.E(); + E4L = t4P4L.E(); + + LOG("TwoBodyCollision",pNOTICE) + << "TwoBodyKinematics fails: C3CM, P3 = " << C3CM << " " + << P3L << " " << E3L << "\n" << " P4 = " + << P4L << " " << E4L ; + return false; //covers all possiblities for now + } + + // error checking + P3L = t4P3L.Vect().Mag(); + P4L = t4P4L.Vect().Mag(); + E3L = t4P3L.E(); + E4L = t4P4L.E(); + LOG("INukeUtils",pINFO) + << "C3CM, P3 = " << C3CM << " " + << P3L << " " << E3L << "\n" << " P4 = " + << P4L << " " << E4L ; + + // handle very low momentum particles + if(!(TMath::Finite(P3L)) || P3L<.001) + { + LOG("INukeUtils",pINFO) + << "Particle 3 momentum small or non-finite: " << P3L + << "\n" << "--> Assigning .001 as new momentum"; + P3L = .001; + E3L = TMath::Sqrt(P3L*P3L + M3*M3); + } + if(!(TMath::Finite(P4L)) || P4L<.001) + { + LOG("INukeUtils",pINFO) + << "Particle 4 momentum small or non-finite: " << P4L + << "\n" << "--> Assigning .001 as new momentum"; + P4L = .001; + E4L = TMath::Sqrt(P4L*P4L + M4*M4); + } + + // if this is going to be on in the future, remember to not apply PB for Oset + /*// pauli blocking turn off for now to better match data + // if(P3LSetStatus(kIStHadronInTheNucleus); + RemnP4 -= TLorentzVector(0,0,0,bindE); + return false; + }*/ + + // update remnant nucleus + RemnP4 -= t4P2L; + LOG("INukeUtils",pINFO) + << "t4P2L= " << t4P2L.E() << " " << t4P2L.Z() + << " RemnP4= " << RemnP4.E() << " " << RemnP4.Z() ; + if (tcode==kPdgProton) {RemnZ--;RemnA--;} + else if(tcode==kPdgNeutron) RemnA--; + + // create t particle w/ appropriate momenta, code, and status + // Set target's mom to be the mom of the hadron that was cloned + t->SetFirstMother(p->FirstMother()); + t->SetLastMother(p->LastMother()); + + // adjust p to reflect scattering + p->SetPdgCode(scode); + p->SetMomentum(t4P3L); + + t->SetPdgCode(s2code); + t->SetMomentum(t4P4L); + + if (mode==kIMdHN) + { + p->SetStatus(kIStHadronInTheNucleus); + t->SetStatus(kIStHadronInTheNucleus); + } + else + { + p->SetStatus(kIStStableFinalState); + t->SetStatus(kIStStableFinalState); + } + LOG("INukeUtils",pINFO) << "Successful 2 body collision"; + return true; + +} +//___________________________________________________________________________ +bool genie::utils::intranuke2025::TwoBodyKinematics( + double M3, double M4, TLorentzVector t4P1L, TLorentzVector t4P2L, + TLorentzVector &t4P3L, TLorentzVector &t4P4L, double C3CM, TLorentzVector &RemnP4, double bindE) +{ + // Aaron Meyer (05/17/10) + // Adapted from kinematics in other function calls + // + // Outgoing particle masses M3,M4 + // Scatters particles according to normal two body collisions + // + // bindE is the binding energy (GeV) of a particle removed from the nucleus (default 0) + // For nonzero binding energy, remove the binding energy from the total energy, + // then put both of the particles back on mass shell by shifting momentum/energy + // of target + // Momentum only shifted in the direction parallel to the probe's motion + // + // Rotates final transverse component of momentum by a random angle from 0->2pi + // Return value for error checking + // Gives outgoing 4-momenta of particles 3 and 4 (t4P3L, t4P4L respectively) + // + // All 4-momenta should be on mass shell + + double E1L, E2L, P1L, P2L, E3L, P3L; + double beta, gm; // speed and gamma for CM frame in Lab + double S3CM; // sin of scattering angle + double PHI3; + double E1CM, E2CM, E3CM, P3CM;//, E4CM, P4CM; + double P3zL, P3tL;//, P4zL, P4tL; + double Et; + double theta1, theta2, theta5, P1zL, P2zL, P1tL, P2tL; + TVector3 tbeta, tbetadir, tTrans, tVect; + TVector3 tP1zCM, tP2zCM, vP3L; + TLorentzVector t4P1buf, t4P2buf, t4Ptot; + + // Library instance for reference + //PDGLibrary * pLib = PDGLibrary::Instance(); + + // random number generator + RandomGen * rnd = RandomGen::Instance(); + + // error checking + if (C3CM < -1. || C3CM > 1.) return false; + + // calculate sine from scattering angle + S3CM = TMath::Sqrt(1.0 - C3CM*C3CM); + + // fill buffers + t4P1buf = t4P1L; + t4P2buf = t4P2L; + + // get lab energy and momenta + E1L = t4P1buf.E(); + P1L = t4P1buf.P(); + E2L = t4P2buf.E(); + P2L = t4P2buf.P(); + t4Ptot = t4P1buf + t4P2buf; + + LOG("INukeUtils",pINFO) <<"M1 "< Assigning .001 as new momentum"; + P3tL = 0; + P3zL = .001; + P3L = .001; + E3L = TMath::Sqrt(P3L*P3L + M3*M3); + } + + // get random phi angle, distributed uniformally in 360 deg + PHI3 = 2 * kPi * rnd->RndFsi().Rndm(); + + vP3L = P3zL*tbetadir + P3tL*tTrans; + vP3L.Rotate(PHI3,tbetadir); + + t4P3L.SetVect(vP3L); + t4P3L.SetE(E3L); + + t4P4L = t4P1buf + t4P2buf - t4P3L; + t4P4L-= TLorentzVector(0,0,0,bindE); + /*LOG("INukeUtils",pINFO) <<"GENIE:"; + LOG("INukeUtils",pINFO) <<"E4L "<Find(p->Pdg())->Mass(); + M2 = pLib->Find(tcode)->Mass(); + M3 = pLib->Find(s1->Pdg())->Mass(); + M4 = pLib->Find(s2->Pdg())->Mass(); + M5 = pLib->Find(s3->Pdg())->Mass(); + + // set up fermi target + Target target(ev->TargetNucleus()->Pdg()); + + // handle fermi momentum + if(DoFermi) + { + target.SetHitNucPdg(tcode); + Nuclmodel->GenerateNucleon(target); + tP2L = FermiFac * Nuclmodel->Momentum3(); + P2L = tP2L.Mag(); + E2L = TMath::Sqrt(tP2L.Mag2() + M2*M2); + } + else + { + tP2L.SetXYZ(0.0, 0.0, 0.0); + P2L = 0; + E2L = M2; + } + + // first sequence, handle 4th and 5th products as composite + E1L = p->E(); + + P1L = TMath::Sqrt(E1L*E1L - M1*M1); + tP1L = p->P4()->Vect(); + tPtot = tP1L + tP2L; + + tbeta = tPtot * (1.0 / (E1L + E2L)); + tbetadir = tbeta.Unit(); + beta = tbeta.Mag(); + gm = 1.0 / TMath::Sqrt(1.0 - beta*beta); + + theta1 = tP1L.Angle(tbeta); + theta2 = tP2L.Angle(tbeta); + P1zL = P1L*TMath::Cos(theta1); + P2zL = P2L*TMath::Cos(theta2); + tVect.SetXYZ(1,0,0); + if(TMath::Abs((tVect - tbetadir).Mag())<.01) tVect.SetXYZ(0,1,0); + theta5 = tVect.Angle(tbetadir); + tTrans = (tVect - TMath::Cos(theta5)*tbetadir).Unit(); + + E1CM = gm*E1L - gm*beta*P1zL; + tP1zCM = gm*P1zL*tbetadir - gm*tbeta*E1L; + E2CM = gm*E2L - gm*beta*P2zL; + tP2zCM = gm*P2zL*tbetadir - gm*tbeta*E2L; + Et = E1CM + E2CM; + M = (rnd->RndFsi().Rndm()*(Et - M3 - M4 - M5)) + (M4 + M5); + E3CM = (Et*Et + M3*M3 - M*M)/(2*Et); + EiCM = Et - E3CM; + if(E3CM*E3CM - M3*M3<0) + { + LOG("INukeUtils",pNOTICE) + << "PionProduction P3 has non-real momentum - retry kinematics"; + LOG("INukeUtils",pNOTICE) << "Energy, masses of 3 fs particales:" + << E3CM << " " << M3 << " " << " " << M4 << " " << M5; + exceptions::INukeException exception; + exception.SetReason("PionProduction particle 3 has non-real momentum"); + throw exception; + return false; + } + P3CM = TMath::Sqrt(E3CM*E3CM - M3*M3); + + theta3 = kPi * rnd->RndFsi().Rndm(); + theta4 = kPi * rnd->RndFsi().Rndm(); + phi3 = 2*kPi * rnd->RndFsi().Rndm(); + phi4 = 2*kPi * rnd->RndFsi().Rndm(); + + P3zL = gm*beta*E3CM + gm*P3CM*TMath::Cos(theta3); + P3tL = P3CM*TMath::Sin(theta3); + PizL = gm*beta*EiCM - gm*P3CM*TMath::Cos(theta3); + PitL = -P3CM*TMath::Sin(theta3); + + P3L = TMath::Sqrt(P3zL*P3zL + P3tL*P3tL); + PiL = TMath::Sqrt(PizL*PizL + PitL*PitL); + E3L = TMath::Sqrt(P3L*P3L + M3*M3); + EiL = TMath::Sqrt(PiL*PiL + M*M); + + // handle very low momentum particles + if(!(TMath::Finite(P3L)) || P3L < .001) + { + LOG("INukeUtils",pINFO) + << "Particle 3 " << M3 << " momentum small or non-finite: " << P3L + << "\n" << "--> Assigning .001 as new momentum"; + P3tL = 0; + P3zL = .001; + P3L = .001; + E3L = TMath::Sqrt(P3L*P3L + M3*M3); + } + + tP3L = P3zL*tbetadir + P3tL*tTrans; + tPiL = PizL*tbetadir + PitL*tTrans; + tP3L.Rotate(phi3,tbetadir); + tPiL.Rotate(phi3,tbetadir); + + // second sequence, handle formally composite particles 4 and 5 + tbeta2 = tPiL * (1.0 / EiL); + tbetadir2 = tbeta2.Unit(); + beta2 = tbeta2.Mag(); + gm2 = 1.0 / TMath::Sqrt(1.0 - beta2*beta2); + + E4CM2 = (M*M + M4*M4 - M5*M5) / (2*M); + E5CM2 = M - E4CM2; + P4CM2 = TMath::Sqrt(E4CM2*E4CM2 - M4*M4); + + tVect.SetXYZ(1,0,0); + if(TMath::Abs((tVect - tbetadir2).Mag())<.01) tVect.SetXYZ(0,1,0); + theta5 = tVect.Angle(tbetadir2); + tTrans2 = (tVect - TMath::Cos(theta5)*tbetadir2).Unit(); + + P4zL = gm2*beta2*E4CM2 + gm2*P4CM2*TMath::Cos(theta4); + P4tL = P4CM2*TMath::Sin(theta4); + P5zL = gm2*beta2*E5CM2 - gm2*P4CM2*TMath::Cos(theta4); + P5tL = - P4tL; + + P4L = TMath::Sqrt(P4zL*P4zL + P4tL*P4tL); + P5L = TMath::Sqrt(P5zL*P5zL + P5tL*P5tL); + E4L = TMath::Sqrt(P4L*P4L + M4*M4); + E5L = TMath::Sqrt(P5L*P5L + M5*M5); + + // handle very low momentum particles + if(!(TMath::Finite(P4L)) || P4L < .001) + { + LOG("INukeUtils",pINFO) + << "Particle 4 " << M4 << " momentum small or non-finite: " << P4L + << "\n" << "--> Assigning .001 as new momentum"; + P4tL = 0; + P4zL = .001; + P4L = .001; + E4L = TMath::Sqrt(P4L*P4L + M4*M4); + } + if(!(TMath::Finite(P5L)) || P5L < .001) + { + LOG("INukeUtils",pINFO) + << "Particle 5 " << M5 << " momentum small or non-finite: " << P5L + << "\n" << "--> Assigning .001 as new momentum"; + P5tL = 0; + P5zL = .001; + P5L = .001; + E5L = TMath::Sqrt(P5L*P5L + M5*M5); + } + + tP4L = P4zL*tbetadir2 + P4tL*tTrans2; + tP5L = P5zL*tbetadir2 + P5tL*tTrans2; + tP4L.Rotate(phi4,tbetadir2); + tP5L.Rotate(phi4,tbetadir2); + + // pauli blocking + if(P3L < FermiMomentum || ( pdg::IsNeutronOrProton(s2->Pdg()) && P4L < FermiMomentum ) ) + { + LOG("INukeUtils",pNOTICE) + << "PionProduction fails because of Pauli blocking - retry kinematics"; + exceptions::INukeException exception; + exception.SetReason("PionProduction final state not determined"); + throw exception; + return false; + } + + // create scattered particles w/ appropriate momenta, code, and status + // Set moms to be the moms of the hadron that was cloned + s1->SetFirstMother(p->FirstMother()); + s2->SetFirstMother(p->FirstMother()); + s3->SetFirstMother(p->FirstMother()); + s1->SetLastMother(p->LastMother()); + s2->SetLastMother(p->LastMother()); + s3->SetLastMother(p->LastMother()); + + TLorentzVector(tP3L,E3L); + TLorentzVector(tP4L,E4L); + TLorentzVector(tP5L,E5L); + + s1->SetMomentum(TLorentzVector(tP3L,E3L)); + s2->SetMomentum(TLorentzVector(tP4L,E4L)); + s3->SetMomentum(TLorentzVector(tP5L,E5L)); + int mode = kIMdHA; + LOG ("INukeUtils",pDEBUG) << "in Pi Prod, mode = " << mode; + if (mode==kIMdHN) + { + s1->SetStatus(kIStHadronInTheNucleus); + s2->SetStatus(kIStHadronInTheNucleus); + s3->SetStatus(kIStHadronInTheNucleus); + } + else + { + s1->SetStatus(kIStStableFinalState); + s2->SetStatus(kIStStableFinalState); + s3->SetStatus(kIStStableFinalState); + } + return true; +} +//___________________________________________________________________________ +bool genie::utils::intranuke2025::PionProduction( + GHepRecord* ev, GHepParticle* p, GHepParticle* s1, GHepParticle* s2, GHepParticle* s3, int &RemnA, int &RemnZ, + TLorentzVector &RemnP4, bool DoFermi, double FermiFac, double FermiMomentum, const NuclearModelI* Nuclmodel) +{ + // Aaron Meyer (7/15/2010) + // + // Handles pion production reactions in both hA and hN mode + // Calculates fundamental cross sections from fit functions + // Uses isospin relations to determine the rest of cross sections + // + // p is the probe particle + // s1, s2, and s3 are the particles produced in the reaction + // must set the status and add particles to the event record after returning from this method + // return value for error checking + + + // random number generator + RandomGen * rnd = RandomGen::Instance(); + + // library reference + PDGLibrary * pLib = PDGLibrary::Instance(); + + bool ptarg = false; + int pcode = p->Pdg(); + + int p1code = p->Pdg(); + // Randomly determine target and 1st product baryons + int p3code = 0, p4code = 0, p5code = 0; + + // + // Uses a fit curve log(sigma) = a - b/(T_pi - c) for pions + // Fit parameters determined by Roman Tacik (4/3/09) + // pi- & p cross sections are assumed to be the same as pi+ & n + // + // Fit curve for nucleons: + // sigma = a*(1+b*e^(-c*(eta-d)^2))*(1-e^(-(f*eta)^g))*(1-e^(-h/eta^2)) + // 7 parameters (a,b,c,d,f,g,h) + // eta is maximum kinematically allowed momentum of the pion, normalized by the mass + // Uses isotopic spin decomposition of total cross sections + // + + if ((p1code==kPdgPi0)||(p1code==kPdgPiP)||(p1code==kPdgPiM)) { + + double kine = 1000*p->KinE(); + + // Determine cross sections + + // pion + // pi- & p + // -> pi0 & pi0 & n + // a = 8.82; b = 573.2; c = 107.3; + double xsec2pi0n = TMath::Max(0.,TMath::Exp(8.82 - (573.2/(kine-107.3)))); + // -> pi- & pi+ & n + // a = 11.06; b = 985.9; c = 88.2; + double xsecpippimn = TMath::Max(0.,TMath::Exp(11.06 - (985.9/(kine-88.2)))); + // -> pi- & pi0 & p + // a = 9.58; b = 1229.4; c = 60.5; + double xsecpimpi0p = TMath::Max(0.,TMath::Exp(9.58 - (1229.4/(kine-60.5)))); + double totpimp = xsec2pi0n + xsecpippimn + xsecpimpi0p; + + + // pi+ & p + // -> pi+ & pi+ & n + // a = 5.64; b = 222.6; c = 150.0; + double xsec2pipn = TMath::Max(0.,TMath::Exp(5.64 - (222.6/(kine-150.)))); + // -> pi+ & pi0 & p + // a = 7.95; b = 852.6; c = 77.8; + double xsecpippi0p = TMath::Max(0.,TMath::Exp(7.95 - (852.6/(kine-77.8)))); + double totpipp = xsec2pipn + xsecpippi0p; + + if (totpimp<=0 && totpipp<=0) { + LOG("INukeUtils",pNOTICE) << "InelasticHN called below threshold energy"; + p->SetStatus(kIStHadronInTheNucleus); + ev->AddParticle(*p); + return false; + } + + double xsecp, xsecn; + switch (p1code) { + case kPdgPi0: xsecp = 0.5 * (totpimp + totpipp); xsecn = xsecp; break; + case kPdgPiP: xsecp = totpipp; xsecn = totpimp; break; + case kPdgPiM: xsecp = totpimp; xsecn = totpipp; break; + default: + LOG("INukeUtils",pWARN) << "InelasticHN cannot handle probe: " + << PDGLibrary::Instance()->Find(p1code)->GetName(); + exceptions::INukeException exception; + exception.SetReason("PionProduction final state not determined"); + throw exception; + return false; + break; + } + + // Normalize cross sections by Z or A-Z + + xsecp *= RemnZ; + xsecn *= RemnA-RemnZ; + + // determine target + + double rand = rnd->RndFsi().Rndm() * (xsecp + xsecn); + if (rand < xsecp) // proton target + { rand /= RemnZ; ptarg = true;} + else // neutron target + { rand -= xsecp; rand /= RemnA-RemnZ; ptarg = false;} + + + // determine final state + + if (((ptarg==true)&&(p1code==kPdgPiP)) + || ((ptarg==false)&&(p1code==kPdgPiM))) + { + if (rand < xsec2pipn) // pi+ & pi+ & n final state + { + p3code = (ptarg ? kPdgNeutron : kPdgProton); + p4code = p1code; + p5code = p4code; + } + else { // pi+ & pi0 & p final state + p3code = (ptarg ? kPdgProton : kPdgNeutron); + p4code = p1code; + p5code = kPdgPi0; + } + } + else if (((ptarg==false)&&(p1code==kPdgPiP)) + || ((ptarg==true)&&(p1code==kPdgPiM))) + { + if (rand < xsec2pi0n) // pi0 & pi0 & n final state + { + p3code = (ptarg ? kPdgNeutron : kPdgProton); + p4code = kPdgPi0; + p5code = p4code; + } + else if (rand < (xsec2pi0n + xsecpippimn)) // pi+ & pi- & n final state + { + p3code = (ptarg ? kPdgNeutron : kPdgProton); + p4code = p1code; + p5code = ((p1code==kPdgPiP) ? kPdgPiM : kPdgPiP); + } + else // pi0 & pi- & p final state + { + p3code = (ptarg ? kPdgProton : kPdgNeutron); + p4code = p1code; + p5code = kPdgPi0; + } + } + else if (p1code==kPdgPi0) + { + rand = rnd->RndFsi().Rndm(); + if (rand < 191./270.) + { // pi+ & pi- & p final state + p3code = (ptarg ? kPdgProton : kPdgNeutron); + p4code = kPdgPiP; + p5code = kPdgPiM; + } + else if (rand < 7./135.) + { // pi0 & pi0 & p final state + p3code = (ptarg ? kPdgProton : kPdgNeutron); + p4code = kPdgPi0; + p5code = p4code; + } + else + { // pi+ & pi0 & n final state + p3code = (ptarg ? kPdgNeutron : kPdgProton); + p4code = (ptarg ? kPdgPiP : kPdgPiM); + p5code = kPdgPi0; + } + } + else // unhandled + { + LOG("INukeUtils",pNOTICE) << "Pi production final state unable to be determined, picode, ptarg = " <Find(p1code)->GetName() << " " << PDGLibrary::Instance()->Find(ptarg)->GetName(); + exceptions::INukeException exception; + exception.SetReason("PionProduction final state not determined"); + throw exception; + return false; + } + + } else if(p1code==kPdgProton||p1code==kPdgNeutron) //nucleon probes + { + + double tote = p->Energy(); + double pMass = pLib->Find(2212)->Mass(); + double nMass = pLib->Find(2112)->Mass(); + double etapp2ppPi0 = + utils::intranuke2025::CalculateEta(pMass,tote,pMass,pMass+pMass,pLib->Find(111)->Mass()); + double etapp2pnPip = + utils::intranuke2025::CalculateEta(pLib->Find(p1code)->Mass(),tote,((p1code==kPdgProton)?pMass:nMass), + pMass+nMass,pLib->Find(211)->Mass()); + double etapn2nnPip = + utils::intranuke2025::CalculateEta(pMass,tote,nMass,nMass+nMass,pLib->Find(211)->Mass()); + double etapn2ppPim = + utils::intranuke2025::CalculateEta(pMass,tote,nMass,pMass+pMass,pLib->Find(211)->Mass()); + + if ((etapp2ppPi0<=0.)&&(etapp2pnPip<=0.)&&(etapn2nnPip<=0.)&&(etapn2ppPim<=0.)) { // below threshold + LOG("INukeUtils",pNOTICE) << "PionProduction() called below threshold energy"; + exceptions::INukeException exception; + exception.SetReason("PionProduction final state not possible - below threshold"); + throw exception; + return false; + } + + // calculate cross sections + double xsecppPi0=0,xsecpnPiP=0,xsecnnPiP=0,xsecppPiM=0; + if (etapp2ppPi0>0){ + xsecppPi0 = 4511*(1-.91*TMath::Exp(-TMath::Power((etapp2ppPi0-.705),2))); + xsecppPi0 *= (1-TMath::Exp(-TMath::Power((.556*etapp2ppPi0),3.5))); + xsecppPi0 *= (1-TMath::Exp(-56.897/(etapp2ppPi0*etapp2ppPi0))); + xsecppPi0 = TMath::Max(0.,xsecppPi0);} + + if (etapp2pnPip>0){ + xsecpnPiP = 18840*(1-.808*TMath::Exp(-TMath::Power((etapp2pnPip-.371),2))); + xsecpnPiP *= (1-TMath::Exp(-TMath::Power((.568*etapp2pnPip),3.2))); + xsecpnPiP *= (1-TMath::Exp(-39.818/(etapp2pnPip*etapp2pnPip))); + xsecpnPiP = TMath::Max(0.,xsecpnPiP);} + + if (etapn2nnPip>0){ + xsecnnPiP = 7670*(1-.479*TMath::Exp(-TMath::Power((etapn2nnPip-.947),2))); + xsecnnPiP *= (1-TMath::Exp(-TMath::Power((.35*etapn2nnPip),3.2))); + xsecnnPiP *= (1-TMath::Exp(-71.53/(etapn2nnPip*etapn2nnPip))); + xsecnnPiP = TMath::Max(0.,xsecnnPiP);} + + if (etapn2ppPim>0){ + xsecppPiM = 7670*(1-.479*TMath::Exp(-TMath::Power((etapn2ppPim-.947),2))); + xsecppPiM *= (1-TMath::Exp(-TMath::Power((.35*etapn2ppPim),3.2))); + xsecppPiM *= (1-TMath::Exp(-71.53/(etapn2ppPim*etapn2ppPim))); + xsecppPiM = TMath::Max(0.,xsecppPiM);} + + // double sigma11 = xsecppPi0; + double sigma10 = TMath::Max(0.,xsecpnPiP - xsecppPi0); // Fundamental cross sections + double sigma01 = TMath::Max(0.,xsecppPiM + xsecnnPiP - xsecppPi0); + + double xsecpnPi0 = .5*(sigma10 + sigma01); + xsecpnPi0 = TMath::Max(xsecpnPi0,0.); + + LOG("INukeUtils",pDEBUG) << '\n' << "Cross section values: "<<'\n' + << xsecppPi0 << " PP pi0" <<'\n' + << xsecpnPiP << " PN pi+" <<'\n' + << xsecnnPiP << " NN pi+" <<'\n' + << xsecpnPi0 << " PN pi0"; + + double xsecp=0,xsecn=0; + switch (p1code) { + case kPdgProton: xsecp=xsecppPi0+xsecpnPiP; xsecn=xsecppPiM+xsecnnPiP+xsecpnPi0; break; + case kPdgNeutron: xsecp=xsecppPiM+xsecnnPiP+xsecpnPi0; xsecn=xsecppPi0+xsecpnPiP; break; + default: + LOG("INukeUtils",pWARN) << "InelasticHN cannot handle probe: " + << PDGLibrary::Instance()->Find(p1code)->GetName(); + return false; + break; + } + + // Normalize cross sections by Z or (A-Z) + + xsecp *= RemnZ; + xsecn *= RemnA-RemnZ; + + // determine target + + double rand = rnd->RndFsi().Rndm() * (xsecp + xsecn); + if (rand < xsecp) // proton target + { rand /= RemnZ; ptarg = true;} + else // neutron target + { rand -= xsecp; rand /= RemnA-RemnZ; ptarg = false;} + + if(p1code==kPdgProton) // Cross sections not explicitly given are calculated from isospin relations + { + if(ptarg) + { + if (randSetPdgCode(p3code); + s2->SetPdgCode(p4code); + s3->SetPdgCode(p5code); + + if(genie::utils::intranuke2025::ThreeBodyKinematics( + ev,p,(ptarg?kPdgProton:kPdgNeutron),s1,s2,s3,DoFermi,FermiFac,FermiMomentum,Nuclmodel)) + { + // okay, handle remnants and return true + // assumes first particle is always the nucleon, + // second can be either nucleon or pion + // last always pion + if (pcode==kPdgProton || pcode==kPdgPiP) RemnZ++; + if (pcode==kPdgPiM) RemnZ--; + if (pdg::IsPion(pcode)) RemnA--; + if (pdg::IsProton(p3code)) RemnZ--; + if (pdg::IsNeutronOrProton(p4code)) RemnA--; + if (p4code==kPdgPiP || p4code==kPdgProton) RemnZ--; + if (p4code==kPdgPiM) RemnZ++; + if (p5code==kPdgPiP) RemnZ--; + if (p5code==kPdgPiM) RemnZ++; + + LOG("INukeUtils",pDEBUG) << "Remnant (A,Z) = (" <P4() + *s2->P4() + *s3->P4() - *p->P4(); + return true; + } + else { + exceptions::INukeException exception; + exception.SetReason("PionProduction final state not determined"); + throw exception; + return false; + } +} +//___________________________________________________________________________ +double genie::utils::intranuke2025::CalculateEta(double Minc, double nrg, double Mtarg, + double Mtwopart, double Mpi) +{ + //Aaron Meyer (1/20/2010) + + //Used to calculate the maximum kinematically allowed CM frame pion momentum + // ke in MeV, eta normalized by pion mass + // approximated by taking two ejected nucleons to be one particle of the same mass + //For pion cross sections, in utils::intranuke2025::PionProduction + + //LOG("INukeUtils",pDEBUG) << "Input values: "< 1); + + LOG("INukeUtils",pINFO) << "probe mass: M = " << p->Mass(); + + // Get the decay product masses & names + + ostringstream state_sstream; + state_sstream << "( "; + vector::const_iterator pdg_iter; + int i = 0; + double * mass = new double[pdgv.size()]; + double mass_sum = 0; + for(pdg_iter = pdgv.begin(); pdg_iter != pdgv.end(); ++pdg_iter) { + int pdgc = *pdg_iter; + double m = PDGLibrary::Instance()->Find(pdgc)->Mass(); + string nm = PDGLibrary::Instance()->Find(pdgc)->GetName(); + mass[i++] = m; + mass_sum += m; + state_sstream << nm << " "; + } + state_sstream << ")"; + + TLorentzVector * pd = p->GetP4(); // incident particle 4p + + bool is_nuc = pdg::IsNeutronOrProton(p->Pdg()); + bool is_kaon = p->Pdg()==kPdgKP || p->Pdg()==kPdgKM; + // not used // bool is_pion = p->Pdg()==kPdgPiP || p->Pdg()==kPdgPi0 || p->Pdg()==kPdgPiM; + // update available energy -> init (mass + kinetic) + sum of f/s masses + // for pion only. Probe mass not available for nucleon, kaon + double availE = pd->Energy() + mass_sum; + if(is_nuc||is_kaon) availE -= p->Mass(); + pd->SetE(availE); + + LOG("INukeUtils",pNOTICE) + << "size, mass_sum, availE, pd mass, energy = " << pdgv.size() << " " + << mass_sum << " " << availE << " " << p->Mass() << " " << p->Energy() ; + + // compute the 4p transfer to the hadronic blob + double dE = mass_sum; + if(is_nuc||is_kaon) dE -= p->Mass(); + TLorentzVector premnsub(0,0,0,dE); + RemnP4 -= premnsub; + + LOG("INukeUtils", pINFO) + << "Final state = " << state_sstream.str() << " has N = " << pdgv.size() + << " particles / total mass = " << mass_sum; + LOG("INukeUtils", pINFO) + << "Composite system p4 = " << utils::print::P4AsString(pd); + + // Set the decay + TGenPhaseSpace GenPhaseSpace; + bool permitted = GenPhaseSpace.SetDecay(*pd, pdgv.size(), mass); + if(!permitted) { + LOG("INukeUtils", pERROR) + << " *** Phase space decay is not permitted \n" + << " Total particle mass = " << mass_sum << "\n" + << " Decaying system p4 = " << utils::print::P4AsString(pd); + + // clean-up and return + RemnP4 += premnsub; + delete [] mass; + delete pd; + return false; + } + + // The decay is permitted - add the incident particle at the event record + // and mark is as 'Nucleon Cluster Target' (used to be confusing 'Decayed State') + p->SetStatus(kIStNucleonClusterTarget); //kIStDecayedState); + p->SetPdgCode(kPdgCompNuclCluster); + ev->AddParticle(*p); + // Get the maximum weight + double wmax = -1; + for(int k=0; k<200; k++) { + double w = GenPhaseSpace.Generate(); + wmax = TMath::Max(wmax,w); + } + assert(wmax>0); + + LOG("INukeUtils", pINFO) + << "Max phase space gen. weight @ current hadronic interaction: " << wmax; + + // Generate an unweighted decay + + RandomGen * rnd = RandomGen::Instance(); + wmax *= 1.2; + + bool accept_decay=false; + unsigned int itry=0; + + while(!accept_decay) + { + itry++; + + if(itry>kMaxUnweightDecayIterations) { + // report, clean-up and return + LOG("INukeUtils", pNOTICE) + << "Couldn't generate an unweighted phase space decay after " + << itry << " attempts"; + delete [] mass; + delete pd; + return false; + } + + double w = GenPhaseSpace.Generate(); + double gw = wmax * rnd->RndFsi().Rndm(); + + if(w > wmax) { + LOG("INukeUtils", pNOTICE) + << "Decay weight = " << w << " > max decay weight = " << wmax; + } + + LOG("INukeUtils", pNOTICE) << "Decay weight = " << w << " / R = " << gw; + accept_decay = (gw<=w); + } + + // Insert final state products into the event record + // - the particles are added as daughters of the decayed state + // - the particles are marked as final stable state (in hA mode) + i=0; + int mom = ev->ParticlePosition(p); + LOG("INukeUtils", pNOTICE) << "mother index = " << mom; + GHepStatus_t ist = kIStStableFinalState; + GHepStatus_t ist_pi = kIStHadronInTheNucleus; + + TLorentzVector * v4 = p->GetX4(); + + double checkpx = p->Px(); + double checkpy = p->Py(); + double checkpz = p->Pz(); + double checkE = p->E(); + + //LOG("INukeUtils", PNOTICE) + + for(pdg_iter = pdgv.begin(); pdg_iter != pdgv.end(); ++pdg_iter) { + + //-- current PDG code + int pdgc = *pdg_iter; + bool isnuc = pdg::IsNeutronOrProton(pdgc); + + //-- get the 4-momentum of the i-th final state particle + TLorentzVector * p4fin = GenPhaseSpace.GetDecay(i++); + + //-- intranuke no longer throws "bindinos" but adds all the energy + // not going at a simulated f/s particle at a "hadronic blob" + // representing the remnant system: do the binding energy subtraction + // here & update the remnant hadronic system 4p + double M = PDGLibrary::Instance()->Find(pdgc)->Mass(); + double En = p4fin->Energy(); + + double KE = En-M; + + //double KE = En; + //if(is_pion) KE -= M; + + double dE_leftover = TMath::Min(NucRmvE, KE); + KE -= dE_leftover; + En = KE+M; + double pmag_old = p4fin->P(); + double pmag_new = TMath::Sqrt(TMath::Max(0.,En*En-M*M)); + double scale = pmag_new / pmag_old; + double pxn = scale * p4fin->Px(); + double pyn = scale * p4fin->Py(); + double pzn = scale * p4fin->Pz(); + + TLorentzVector p4n(pxn,pyn,pzn,En); + // LOG("INukeUtils", pNOTICE) << "Px = " << pxn << " Py = " << pyn + // << " Pz = " << pzn << " E = " << KE; + checkpx -= pxn; + checkpy -= pyn; + checkpz -= pzn; + checkE -= KE; + + if (mode==kIMdHA && + (pdgc==kPdgPiP || pdgc==kPdgPi0 || pdgc==kPdgPiM) ) + { + if (p4n.Vect().Mag()>=0.001) + { + GHepParticle new_particle(pdgc, ist_pi, mom,-1,-1,-1, p4n, *v4); + ev->AddParticle(new_particle); + } + else + { + // Momentum too small, assign a non-zero momentum to the particle + // Conserve momentum with the remnant nucleus + + LOG("INukeUtils", pINFO)<<"Momentum too small; assigning 0.001 as new momentum"; + + double phi = 2*kPi*rnd->RndFsi().Rndm(); + double omega = 2*rnd->RndFsi().Rndm(); + // throw number against solid angle for uniform distribution + + double E4n = TMath::Sqrt(0.001*0.001+M*M); + p4n.SetPxPyPzE(0.001,0,0,E4n); + p4n.Rotate(TMath::ACos(1-omega),TVector3(0,0,1)); + p4n.Rotate(phi,TVector3(1,0,0)); + + RemnP4 -= (p4n - TLorentzVector(0,0,0,M)); + + GHepParticle new_particle(pdgc, ist, mom,-1,-1,-1, p4n, *v4); + ev->AddParticle(new_particle); + } + } + else + { + GHepParticle new_particle(pdgc, ist, mom,-1,-1,-1, p4n, *v4); + + if(isnuc) new_particle.SetRemovalEnergy(0.); + ev->AddParticle(new_particle); + } + + double dpx = (1-scale)*p4fin->Px(); + double dpy = (1-scale)*p4fin->Py(); + double dpz = (1-scale)*p4fin->Pz(); + TLorentzVector premnadd(dpx,dpy,dpz,dE_leftover); + RemnP4 += premnadd; + } + //LOG("INukeUtils", pNOTICE) << "TEST: " << p->Mass(); + LOG("INukeUtils", pNOTICE) << "check conservation: Px = " << checkpx << " Py = " << checkpy + << " Pz = " << checkpz << " E = " << checkE; + + // Clean-up + delete [] mass; + delete pd; + delete v4; + + return true; +} + +double genie::utils::intranuke2025::sigmaTotalOset ( + const double &pionKineticEnergy, + const double &density, + const int &pionPDG, + const double &protonFraction, + const bool &isTableChosen + ) +{ + // ------ OsetCrossSection init (only first time function is called) ------ // + static INukeOset *iNukeOset = NULL; + + if (iNukeOset == NULL) + { + if (isTableChosen) + { + // set directory with data on first call + static const std::string dataDir = (gSystem->Getenv("GINUKEHADRONDATA")) ? + string(gSystem->Getenv("GINUKEHADRONDATA")) : + string(gSystem->Getenv("GENIE")) + + string("/data/evgen/intranuke/"); + // set file with Oset table on first call + static const std::string dataFile = dataDir + "tot_xsec/" + "intranuke-xsection-pi+N-Oset.dat"; + // initialize OsetCrossSection on first call + iNukeOset = new INukeOsetTable (dataFile.c_str()); + } + else iNukeOset = new INukeOsetFormula(); + } + // ------ OsetCrossSection init (only first time function is called) ------ // + + // set up Oset class (assign pion Tk, nuclear density etc) + iNukeOset->setupOset (density, pionKineticEnergy, pionPDG, protonFraction); + + return iNukeOset->getTotalCrossSection(); + +} diff --git a/src/Physics/HadronTransport/INukeUtils2025.h b/src/Physics/HadronTransport/INukeUtils2025.h new file mode 100644 index 000000000..eecd8b839 --- /dev/null +++ b/src/Physics/HadronTransport/INukeUtils2025.h @@ -0,0 +1,123 @@ +//____________________________________________________________________________ +/*! + +\namespace genie::intranuke + +\brief INTRANUKE utilities + +\author Jim Dobson + Imperial College London + + Costas Andreopoulos + University of Liverpool + + Aaron Meyer + Pittsburgh University + +\created Mar 03, 2009 + +\cpright Copyright (c) 2003-2024, The GENIE Collaboration + For the full text of the license visit http://copyright.genie-mc.org + +*/ +//____________________________________________________________________________ + +#ifndef _INTRANUKE_UTILS_2025_H_ +#define _INTRANUKE_UTILS_2025_H_ + +#include + +#include "Physics/NuclearState/NuclearModelI.h" +#include "Physics/HadronTransport/INukeHadroFates2025.h" +#include "Physics/HadronTransport/INukeMode.h" +#include "Physics/HadronTransport/INukeNucleonCorr.h" + +class TLorentzVector; + +namespace genie { + +class GHepRecord; +class GHepParticle; +class Intranuke2025; +class PDGCodeList; + +namespace utils { +namespace intranuke2025 +{ + //! Hadron survival probability + double ProbSurvival( + int pdgc, const TLorentzVector & x4, const TLorentzVector & p4, double A, + double Z, double mfp_scale_factor, const Intranuke2025& fsi_model ); + + //! Mean free path (pions, nucleons) + double MeanFreePath( + int pdgc, const TLorentzVector & x4, const TLorentzVector & p4, double A, + double Z, double nRpi=0.5, double nRnuc=1.0, const bool useOset = false, const bool altOset = false, const bool xsecNNCorr = false, string INukeMode = "XX2025"); + + //! Mean free path (Delta++ **test**) + double MeanFreePath_Delta( + int pdgc, const TLorentzVector & x4, const TLorentzVector & p4, double A ); + + //! Distance to exit + double Dist2Exit( + const TLorentzVector & x4, const TLorentzVector & p4, + double A, double NR=3, double R0=1.4); + + //! Distance to exit + double Dist2ExitMFP( + int pdgc, const TLorentzVector & x4, const TLorentzVector & p4, + double A, double Z, double NR=3, double R0=1.4); + + //! Step particle + void StepParticle( + GHepParticle * p, double step, double nuclear_radius=-1.); + + + //! Intranuke utility functions + + bool TwoBodyCollision( + GHepRecord* ev, int pcode, int tcode, int scode, int s2code, double C3CM, GHepParticle* p, + GHepParticle* t, int &RemnA, int &RemnZ, TLorentzVector &RemnP4, EINukeMode mode=kIMdHA); + + bool TwoBodyKinematics( + double M3, double M4, TLorentzVector tP1L, TLorentzVector tP2L, + TLorentzVector &tP3L, TLorentzVector &tP4L, double C3CM, TLorentzVector &RemnP4, double bindE=0); + + bool ThreeBodyKinematics( + GHepRecord* ev, GHepParticle* p, int tcode, GHepParticle* s1, GHepParticle* s2, GHepParticle* s3, + bool DoFermi=false, double FermiFac=0, double FermiMomentum=0, const NuclearModelI* Nuclmodel=(const NuclearModelI*)0); + + bool PionProduction( + GHepRecord* ev, GHepParticle* p, GHepParticle* s1, GHepParticle* s2, GHepParticle* s3, int &RemnA, int &RemnZ, + TLorentzVector &RemnP4,bool DoFermi, double FermiFac, double FermiMomentum, const NuclearModelI* Nuclmodel); + + double CalculateEta( + double Minc, double ke, double Mtarg, double Mtwopart, double Mpi); + + void Equilibrium( + GHepRecord* ev, GHepParticle* p, int &RemnA, int &RemnZ, TLorentzVector &RemnP4, bool DoFermi, + double FermiFac, const NuclearModelI* Nuclmodel, double NucRmvE, EINukeMode mode=kIMdHN); + + void PreEquilibrium( + GHepRecord* ev, GHepParticle* p, int &RemnA, int &RemnZ, TLorentzVector &RemnP4, bool DoFermi, + double FermiFac, const NuclearModelI* Nuclmodel, double NucRmvE, EINukeMode mode=kIMdHN); + + + //! general phase space decay method + bool PhaseSpaceDecay ( + GHepRecord* ev, GHepParticle* p, const PDGCodeList & pdgv, TLorentzVector &RemnP4, + double NucRmvE, EINukeMode mode=kIMdHA); + + // calculate pion-nucleon total cross section based on Oset model + // use only for pion with kinetic energy up to 350 MeV + double sigmaTotalOset (const double &pionKineticEnergy, const double &density, + const int &pionPDG, const double &protonFraction, + const bool &isTableChosen = true + ); + +} // intranuke namespace +} // utils namespace +} // genie namespace + + +#endif // _INTRANUKE_UTILS_2025_H_ diff --git a/src/Physics/HadronTransport/Intranuke2025.cxx b/src/Physics/HadronTransport/Intranuke2025.cxx new file mode 100644 index 000000000..8057b5066 --- /dev/null +++ b/src/Physics/HadronTransport/Intranuke2025.cxx @@ -0,0 +1,443 @@ +//____________________________________________________________________________ +/* + Copyright (c) 2003-2024, The GENIE Collaboration + For the full text of the license visit http://copyright.genie-mc.org + + + Author: Steve Dytman , Pittsburgh Univ. + Aaron Meyer , Pittsburgh Univ. + Alex Bell, Pittsburgh Univ. + Hugh Gallagher , Tufts Univ. + Costas Andreopoulos , Rutherford Lab. + September 20, 2005 + + For the class documentation see the corresponding header file. + + Important revisions after version 2.0.0 : + @ Nov 30, 2007 - SD + Changed the hadron tracking algorithm to take into account the radial + nuclear density dependence. Using the somewhat empirical approach of + increasing the nuclear radius by a const (tunable) number times the tracked + particle's de Broglie wavelength as this helps getting the hadron+nucleus + cross sections right. + @ Mar 08, 2008 - CA + Fixed code retrieving the remnant nucleus which stopped working as soon as + simulation of nuclear de-excitation started pushing photons in the target + nucleus daughter list. + @ Jun 20, 2008 - CA + Fix a mem leak: The (clone of the) GHepParticle being re-scattered was not + deleted after it was added at the GHEP event record. + @ Jan 28, 2009 - CA + The nuclear remnant is now marked as a kIStFinalStateNuclearRemnant, not + as a kIStStableFinalState. + @ Sep 15, 2009 - CA + IsFake() and IsNucleus() are no longer available in GHepParticle. + Use pdg::IsPseudoParticle() and pdg::IsIon(). + @ Sep 15, 2009 - CA + Store the rescattering code (hadron fate) in the GHEP record so as to + facilitate event reweighting. + @ Jul 15, 2010 - AM + Split Intranuke class into two separate classes, one for each interaction mode. + Intranuke.cxx now only contains methods common to both classes and associated + with the stepping of the hadrons through the nucleus and with configuration. + @ Nov 20, 2011 - CA + Tweaked the way TransportHadrons() looks-up the nuclear environment so that + it works for the nucleon decay mode as well. + @ Dec 08, 2011 - CA + Some minor structural changes. The new GEvGenMode_t is determined at the + start of the event processing and is used throughout. fInTestMode flag and + special INTRANUKE configs not needed. ProcessEventRecord() was added by + factoring out code from HNIntranuke and HAIntranuke. Some comments added. + @ Dec 23, 2014 - TG, SD + New 2014 class for latest Intranuke model + @ Apr 26, 2025 - SD + Change year 2015 to 2025 + +*/ +//____________________________________________________________________________ + +#include +#include + +#include + +#include "Framework/Algorithm/AlgConfigPool.h" +#include "Framework/Algorithm/AlgFactory.h" +#include "Framework/Conventions/GBuild.h" +#include "Framework/Conventions/Constants.h" +#include "Framework/Conventions/Controls.h" +#include "Framework/GHEP/GHepStatus.h" +#include "Framework/GHEP/GHepRecord.h" +#include "Framework/GHEP/GHepParticle.h" +#include "Physics/HadronTransport/Intranuke2025.h" +#include "Physics/HadronTransport/INukeHadroData2025.h" +#include "Physics/HadronTransport/INukeHadroFates.h" +#include "Physics/HadronTransport/INukeMode.h" +#include "Physics/HadronTransport/INukeUtils2025.h" +#include "Framework/Interaction/Interaction.h" +#include "Framework/Messenger/Messenger.h" +#include "Framework/Numerical/RandomGen.h" +#include "Framework/Numerical/Spline.h" +#include "Framework/ParticleData/PDGLibrary.h" +#include "Framework/ParticleData/PDGCodes.h" +#include "Framework/ParticleData/PDGCodeList.h" +#include "Framework/ParticleData/PDGUtils.h" +#include "Framework/Utils/PrintUtils.h" +#include "Physics/NuclearState/NuclearUtils.h" + +using std::ostringstream; + +using namespace genie; +using namespace genie::utils; +using namespace genie::constants; +using namespace genie::controls; + +//___________________________________________________________________________ +Intranuke2025::Intranuke2025() : +EventRecordVisitorI() +{ + +} +//___________________________________________________________________________ +Intranuke2025::Intranuke2025(string name) : +EventRecordVisitorI(name) +{ + +} +//___________________________________________________________________________ +Intranuke2025::Intranuke2025(string name, string config) : +EventRecordVisitorI(name, config) +{ + +} +//___________________________________________________________________________ +Intranuke2025::~Intranuke2025() +{ + +} +//___________________________________________________________________________ +void Intranuke2025::ProcessEventRecord(GHepRecord * evrec) const +{ + // Do not continue if there is no nuclear target + GHepParticle * nucltgt = evrec->TargetNucleus(); + if (!nucltgt) { + LOG("HNIntranuke2025", pINFO) << "No nuclear target found - INTRANUKE exits"; + return; + } + + // Decide tracking radius for the current nucleus (few * R0 * A^1/3) + this->SetTrackingRadius(nucltgt); + + // Understand what the event generation mode is (hadron/photon-nucleus, + // lepton-nucleus, nucleon decay) from the input event. + // The determined mode has an effect on INTRANUKE behaviour (how to lookup + // the residual nucleus, whether to set an intranuclear vtx etc) but it + // does not affect the INTRANUKE physics. + fGMode = evrec->EventGenerationMode(); + + // For lepton-nucleus scattering and for nucleon decay intranuclear vtx + // position (in the target nucleus coord system) is set elsewhere. + // This method only takes effect in hadron/photon-nucleus interactions. + // In this special mode, an interaction vertex is set at the periphery + // of the target nucleus. + if(fGMode == kGMdHadronNucleus || + fGMode == kGMdPhotonNucleus) + { + this->GenerateVertex(evrec); + } + + // Now transport all hadrons outside the tracking radius. + // Stepping part is common for both HA and HN. + // Once it has been estabished that an interaction takes place then + // HA and HN specific code takes over in order to simulate the final state. + this->TransportHadrons(evrec); +} +//___________________________________________________________________________ +void Intranuke2025::GenerateVertex(GHepRecord * evrec) const +{ +// Sets a vertex in the nucleus periphery +// Called onlt in hadron/photon-nucleus interactions. + + GHepParticle * nucltgt = evrec->TargetNucleus(); + assert(nucltgt); + + RandomGen * rnd = RandomGen::Instance(); + TVector3 vtx(999999.,999999.,999999.); + + // *** For h+A events (test mode): + // Assume a hadron beam with uniform intensity across an area, + // so we need to choose events uniformly within that area. + double x=999999., y=999999., epsilon = 0.001; + double R2 = TMath::Power(fTrackingRadius,2.); + double rp2 = TMath::Power(x,2.) + TMath::Power(y,2.); + while(rp2 > R2-epsilon) { + x = (fTrackingRadius-epsilon) * rnd->RndFsi().Rndm(); + y = -fTrackingRadius + 2*fTrackingRadius * rnd->RndFsi().Rndm(); + y -= ((y>0) ? epsilon : -epsilon); + rp2 = TMath::Power(x,2.) + TMath::Power(y,2.); + } + vtx.SetXYZ(x,y, -1.*TMath::Sqrt(TMath::Max(0.,R2-rp2)) + epsilon); + + // get the actual unit vector along the incoming hadron direction + TVector3 direction = evrec->Probe()->P4()->Vect().Unit(); + + // rotate the vtx position + vtx.RotateUz(direction); + + LOG("Intranuke2025", pNOTICE) + << "Generated vtx @ R = " << vtx.Mag() << " fm / " + << print::Vec3AsString(&vtx); + + TObjArrayIter piter(evrec); + GHepParticle * p = 0; + while( (p = (GHepParticle *) piter.Next()) ) + { + if(pdg::IsPseudoParticle(p->Pdg())) continue; + if(pdg::IsIon (p->Pdg())) continue; + + p->SetPosition(vtx.x(), vtx.y(), vtx.z(), 0.); + } +} +//___________________________________________________________________________ +void Intranuke2025::SetTrackingRadius(const GHepParticle * p) const +{ + assert(p && pdg::IsIon(p->Pdg())); + double A = p->A(); + fTrackingRadius = fR0 * TMath::Power(A, 1./3.); + + // multiply that by some input factor so that hadrons are tracked + // beyond the nuclear 'boundary' since the nuclear density distribution + // is not zero there + fTrackingRadius *= fNR; + + LOG("Intranuke2025", pNOTICE) + << "Setting tracking radius to R = " << fTrackingRadius; +} +//___________________________________________________________________________ +bool Intranuke2025::NeedsRescattering(const GHepParticle * p) const +{ +// checks whether the particle should be rescattered + + assert(p); + + if(fGMode == kGMdHadronNucleus || + fGMode == kGMdPhotonNucleus) { + // hadron/photon-nucleus scattering propagate the incoming particle + return ( + (p->Status() == kIStInitialState || p->Status() == kIStHadronInTheNucleus) + && !pdg::IsIon(p->Pdg())); + } + else { + // attempt to rescatter anything marked as 'hadron in the nucleus' + return (p->Status() == kIStHadronInTheNucleus); + } +} +//___________________________________________________________________________ +bool Intranuke2025::CanRescatter(const GHepParticle * p) const +{ +// checks whether a particle that needs to be rescattered, can in fact be +// rescattered by this cascade MC + + assert(p); + return ( p->Pdg() == kPdgPiP || + p->Pdg() == kPdgPiM || + p->Pdg() == kPdgPi0 || + p->Pdg() == kPdgProton || + p->Pdg() == kPdgNeutron || + // p->Pdg() == kPdgGamma || + p->Pdg() == kPdgKP //|| + // p->Pdg() == kPdgKM + ); +} +//___________________________________________________________________________ +bool Intranuke2025::IsInNucleus(const GHepParticle * p) const +{ +// check whether the input particle is still within the nucleus +// + return (p->X4()->Vect().Mag() < fTrackingRadius + fHadStep); +} +//___________________________________________________________________________ +void Intranuke2025::TransportHadrons(GHepRecord * evrec) const +{ +// transport all hadrons outside the nucleus + + int inucl = -1; + fRemnA = -1; + fRemnZ = -1; + + // Get 'nuclear environment' at the beginning of hadron transport + // and keep track of the remnant nucleus A,Z + + if(fGMode == kGMdHadronNucleus || + fGMode == kGMdPhotonNucleus) + { + inucl = evrec->TargetNucleusPosition(); + } + else if(fGMode == kGMdLeptonNucleus || + fGMode == kGMdDarkMatterNucleus || + fGMode == kGMdNucleonDecay) { + inucl = evrec->RemnantNucleusPosition(); + } + + LOG("Intranuke2025", pNOTICE) + << "Propagating hadrons within nucleus found in position = " << inucl; + GHepParticle * nucl = evrec->Particle(inucl); + if(!nucl) { + LOG("Intranuke2025", pERROR) + << "No nucleus found in position = " << inucl; + LOG("Intranuke2025", pERROR) + << *evrec; + return; + } + + fRemnA = nucl->A(); + fRemnZ = nucl->Z(); + + LOG("Intranuke2025", pNOTICE) + << "Nucleus (A,Z) = (" << fRemnA << ", " << fRemnZ << ")"; + + const TLorentzVector & p4nucl = *(nucl->P4()); + fRemnP4 = p4nucl; + + // Loop over GHEP and run intranuclear rescattering on handled particles + TObjArrayIter piter(evrec); + GHepParticle * p = 0; + int icurr = -1; + + while( (p = (GHepParticle *) piter.Next()) ) + { + icurr++; + + // Check whether the particle needs rescattering, otherwise skip it + if( ! this->NeedsRescattering(p) ) continue; + + LOG("Intranuke2025", pNOTICE) + << " >> Stepping a " << p->Name() + << " with kinetic E = " << p->KinE() << " GeV"; + + // Rescatter a clone, not the original particle + GHepParticle * sp = new GHepParticle(*p); + + // Set clone's mom to be the hadron that was cloned + sp->SetFirstMother(icurr); + + // Check whether the particle can be rescattered + if(!this->CanRescatter(sp)) { + + // if I can't rescatter it, I will just take it out of the nucleus + LOG("Intranuke2025", pNOTICE) + << "... Current version can't rescatter a " << sp->Name(); + sp->SetFirstMother(icurr); + sp->SetStatus(kIStStableFinalState); + evrec->AddParticle(*sp); + delete sp; + continue; // <-- skip to next GHEP entry + } + + // Start stepping particle out of the nucleus + bool has_interacted = false; + while ( this-> IsInNucleus(sp) ) + { + // advance the hadron by a step + utils::intranuke2025::StepParticle(sp, fHadStep); + + // check whether it interacts + double d = this->GenerateStep(evrec,sp); + has_interacted = (d0) { + // the particle interacts - simulate the hadronic interaction + LOG("Intranuke2025", pNOTICE) + << "Particle has interacted at location: " + << sp->X4()->Vect().Mag() << " / nucl rad= " << fTrackingRadius; + this->SimulateHadronicFinalState(evrec,sp); + } else if(has_interacted && fRemnA<=0) { + // nothing left to interact with! + LOG("Intranuke2025", pNOTICE) + << "*** Nothing left to interact with, escaping."; + sp->SetStatus(kIStStableFinalState); + evrec->AddParticle(*sp); + evrec->Particle(sp->FirstMother())->SetRescatterCode(1); + } else { + // the exits the nucleus without interacting - Done with it! + LOG("Intranuke2025", pNOTICE) + << "*** Hadron escaped the nucleus! Done with it."; + sp->SetStatus(kIStStableFinalState); + evrec->AddParticle(*sp); + evrec->Particle(sp->FirstMother())->SetRescatterCode(1); + } + delete sp; + + // Current snapshot + //LOG("Intranuke2025", pINFO) << "Current event record snapshot: " << *evrec; + + }// GHEP entries + + // Add remnant nucleus - that 'hadronic blob' has all the remaining hadronic + // 4p not put explicitly into the simulated particles + TLorentzVector v4(0.,0.,0.,0.); + GHepParticle remnant_nucleus( + kPdgHadronicBlob, kIStFinalStateNuclearRemnant, inucl,-1,-1,-1, fRemnP4, v4); + evrec->AddParticle(remnant_nucleus); + // Mark the initial remnant nucleus as an intermediate state + // Don't do that in the hadron/photon-nucleus scatterig mode since the initial + // remnant nucleus and the target nucleus coincide. + if(fGMode != kGMdHadronNucleus && + fGMode != kGMdPhotonNucleus) { + evrec->Particle(inucl)->SetStatus(kIStIntermediateState); + } +} +//___________________________________________________________________________ +double Intranuke2025::GenerateStep(GHepRecord* /*evrec*/, GHepParticle* p) const //Added ev to get tgt argument// +{ +// Generate a step (in fermis) for particle p in the input event. +// Computes the mean free path L and generate an 'interaction' distance d +// from an exp(-d/L) distribution + + int pdgc = p->Pdg(); + + double scale = 1.; + if (pdgc==kPdgPiP || pdgc==kPdgPiM) { + scale = fChPionMFPScale; + } + if (pdgc==kPdgPi0) { + scale = fNeutralPionMFPScale; + } + else if (pdgc==kPdgProton || pdgc==kPdgNeutron) { + scale = fNucleonMFPScale; + } + + RandomGen * rnd = RandomGen::Instance(); + + string fINukeMode = this->GetINukeMode(); + string fINukeModeGen = this->GetGenINukeMode(); + + double L = utils::intranuke2025::MeanFreePath(p->Pdg(), *p->X4(), *p->P4(), fRemnA, + fRemnZ, fDelRPion, fDelRNucleon, fUseOset, fAltOset, fXsecNNCorr, fINukeMode); + + LOG("Intranuke2025", pDEBUG) << "mode= " << fINukeModeGen; + L *= scale; + + double d = -1.*L * TMath::Log(rnd->RndFsi().Rndm()); + + /* LOG("Intranuke2025", pDEBUG) + << "mode= " << fINukeMode << "; Mean free path = " << L << " fm / " + << "Generated path length = " << d << " fm"; + */ + return d; +} +//___________________________________________________________________________ +void Intranuke2025::Configure(const Registry & config) +{ + Algorithm::Configure(config); + this->LoadConfig(); +} +//___________________________________________________________________________ +void Intranuke2025::Configure(string param_set) +{ + Algorithm::Configure(param_set); + this->LoadConfig(); +} +//___________________________________________________________________________ diff --git a/src/Physics/HadronTransport/Intranuke2025.h b/src/Physics/HadronTransport/Intranuke2025.h new file mode 100644 index 000000000..74fa5b402 --- /dev/null +++ b/src/Physics/HadronTransport/Intranuke2025.h @@ -0,0 +1,160 @@ +//____________________________________________________________________________ +/*! + +\class genie::Intranuke + +\brief The INTRANUKE intranuclear hadron transport MC. + Is a concrete implementation of the EventRecordVisitorI interface. + +\ref R.Merenyi et al., Phys.Rev.D45 (1992) + R.D.Ransome, Nucl.Phys.B 139 (2005) + + Current INTRANUKE development is led by S.Dytman and H.Gallagher. + The original INTRANUKE cascade MC was developed (in fortran) for the + NeuGEN MC by R.Edgecock, G.F.Pearce, W.A.Mann, R.Merenyi and others. + +\author Steve Dytman , Pittsburgh University + Aaron Meyer , Pittsburgh University + Alex Bell, Pittsburgh University + Hugh Gallagher , Tufts University + Costas Andreopoulos STFC, Rutherford Lab + +\created September 20, 2005 + +\cpright Copyright (c) 2003-2024, The GENIE Collaboration + For the full text of the license visit http://copyright.genie-mc.org + +*/ +//____________________________________________________________________________ + +#ifndef _INTRANUKE_2025_H_ +#define _INTRANUKE_2025_H_ + +#include + +#include "Physics/NuclearState/NuclearModelI.h" + +#include "Framework/Algorithm/AlgFactory.h" +#include "Framework/EventGen/EventRecordVisitorI.h" +#include "Framework/Conventions/GMode.h" +#include "Physics/HadronTransport/INukeMode.h" +#include "Physics/HadronTransport/INukeHadroFates2025.h" + +class TLorentzVector; +class TVector3; + +namespace genie { + +class GHepParticle; +class INukeHadroData2025; +class PDGCodeList; +class HNIntranuke2025; +class HAIntranuke2025; + +class Intranuke2025 : public EventRecordVisitorI { + +friend class IntranukeTester; + +public : + Intranuke2025(); + Intranuke2025(string name); + Intranuke2025(string name, string config); + ~Intranuke2025(); + + // implement the EventRecordVisitorI interface + virtual void ProcessEventRecord(GHepRecord * event_rec) const; + + // override the Algorithm::Configure methods to load configuration + // data to protected data members + virtual void Configure (const Registry & config); + virtual void Configure (string param_set); + + virtual string GetINukeMode() const {return "XX2025";}; + virtual string GetGenINukeMode() const {return "XX";}; + + // Setters used in reweighting + inline void SetRemnA( int A ) { fRemnA = A; } + inline void SetRemnZ( int Z ) { fRemnZ = Z; } + + inline double GetRemnA() const { return fRemnA; } + inline double GetRemnZ() const { return fRemnZ; } + + inline double GetR0() const { return fR0; } + inline double GetNR() const { return fNR; } + + inline double GetDelRPion() const { return fDelRPion; } + inline double GetDelRNucleon() const { return fDelRNucleon; } + + inline double GetNucRmvE() const { return fNucRmvE; } + inline double GetHadStep() const { return fHadStep; } + + inline bool GetUseOset() const { return fUseOset; } + inline bool GetAltOset() const { return fAltOset; } + inline bool GetXsecNNCorr() const { return fXsecNNCorr; } + +protected: + + // methods for loading configuration + virtual void LoadConfig (void)=0; + + // general methods for the cascade mc structure + void TransportHadrons (GHepRecord * ev) const; + void GenerateVertex (GHepRecord * ev) const; + bool NeedsRescattering (const GHepParticle* p) const; + bool CanRescatter (const GHepParticle* p) const; + bool IsInNucleus (const GHepParticle* p) const; + void SetTrackingRadius (const GHepParticle* p) const; + double GenerateStep (GHepRecord* ev, GHepParticle* p) const; + + // virtual functions for individual modes + virtual void SimulateHadronicFinalState(GHepRecord* ev, GHepParticle* p) const = 0; + virtual int HandleCompoundNucleus(GHepRecord* ev, GHepParticle* p, int mom) const = 0; + + // utility objects & params + mutable double fTrackingRadius;///< tracking radius for the nucleus in the current event + mutable TGenPhaseSpace fGenPhaseSpace; ///< a phase space generator + INukeHadroData2025 * fHadroData2025; ///< a collection of h+N,h+A data & calculations + AlgFactory * fAlgf; ///< algorithm factory instance + const NuclearModelI * fNuclmodel; ///< nuclear model used to generate fermi momentum + mutable int fRemnA; ///< remnant nucleus A + mutable int fRemnZ; ///< remnant nucleus Z + mutable TLorentzVector fRemnP4; ///< P4 of remnant system + mutable GEvGenMode_t fGMode; ///< event generation mode (lepton+A, hadron+A, ...) + + // configuration parameters + double fR0; ///< effective nuclear size param + double fNR; ///< param multiplying the nuclear radius, determining how far to track hadrons beyond the "nuclear boundary" + double fNucRmvE; ///< binding energy to subtract from cascade nucleons + double fDelRPion; ///< factor by which Pion Compton wavelength gets multiplied to become nuclear size enhancement + double fDelRNucleon; ///< factor by which Nucleon Compton wavelength gets multiplied to become nuclear size enhancement + double fHadStep; ///< step size for intranuclear hadron transport + double fNucAbsFac; ///< absorption xsec correction factor (hN Mode) + double fNucCEXFac; ///< charge exchange xsec correction factor (hN Mode) + double fEPreEq; ///< threshold for pre-equilibrium reaction + double fFermiFac; ///< testing parameter to modify fermi momentum + double fFermiMomentum; ///< whether or not particle collision is pauli blocked + bool fDoFermi; ///< whether or not to do fermi mom. + bool fDoMassDiff; ///< whether or not to do mass diff. mode + bool fDoCompoundNucleus; ///< whether or not to do compound nucleus considerations + bool fUseOset; ///< Oset model for low energy pion in hN + bool fAltOset; ///< NuWro's table-based implementation (not recommended) + bool fXsecNNCorr; ///< use nuclear medium correction for NN cross section + + double fChPionMFPScale; ///< tweaking factors for tuning + double fNeutralPionMFPScale; + double fPionFracCExScale; + double fPionFracInelScale; + double fChPionFracAbsScale; + double fNeutralPionFracAbsScale; + double fPionFracPiProdScale; + double fNucleonMFPScale; + double fNucleonFracCExScale; + double fNucleonFracInelScale; + double fNucleonFracAbsScale; + double fNucleonFracPiProdScale; + +}; + +} // genie namespace + +#endif // _INTRANUKE_2025_H_ From eb96d78729951e618ea50cb4899e40bfbdec91ca Mon Sep 17 00:00:00 2001 From: Mohamed Saad <46623331+M7medS3d@users.noreply.github.com> Date: Fri, 26 Sep 2025 11:24:57 -0400 Subject: [PATCH 2/9] Update HAIntranuke2025.h --- src/Physics/HadronTransport/HAIntranuke2025.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/Physics/HadronTransport/HAIntranuke2025.h b/src/Physics/HadronTransport/HAIntranuke2025.h index ced9943d6..ddd41bd7d 100644 --- a/src/Physics/HadronTransport/HAIntranuke2025.h +++ b/src/Physics/HadronTransport/HAIntranuke2025.h @@ -23,6 +23,9 @@ \cpright Copyright (c) 2003-2024, The GENIE Collaboration For the full text of the license visit http://copyright.genie-mc.org + +\changes made on september 20,2025 by Mohamed Ismail + */ //____________________________________________________________________________ From 5ff8e0298294124be75bdb164fa9a17755057d68 Mon Sep 17 00:00:00 2001 From: Mohamed Saad <46623331+M7medS3d@users.noreply.github.com> Date: Fri, 26 Sep 2025 11:28:35 -0400 Subject: [PATCH 3/9] Update HAIntranuke2025.h --- src/Physics/HadronTransport/HAIntranuke2025.h | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/Physics/HadronTransport/HAIntranuke2025.h b/src/Physics/HadronTransport/HAIntranuke2025.h index ddd41bd7d..10e13059b 100644 --- a/src/Physics/HadronTransport/HAIntranuke2025.h +++ b/src/Physics/HadronTransport/HAIntranuke2025.h @@ -24,9 +24,8 @@ \cpright Copyright (c) 2003-2024, The GENIE Collaboration For the full text of the license visit http://copyright.genie-mc.org -\changes made on september 20,2025 by Mohamed Ismail - - +\created on september,2025 by Mohamed Ismail +no changes from the 2018 class version, major changed made in INukeHadroData2025 */ //____________________________________________________________________________ From 7fd5f503db6898b8fdf552b0db2f9b87c5300189 Mon Sep 17 00:00:00 2001 From: Mohamed Saad <46623331+M7medS3d@users.noreply.github.com> Date: Fri, 26 Sep 2025 11:31:35 -0400 Subject: [PATCH 4/9] Update INukeHadroData2025.h --- src/Physics/HadronTransport/INukeHadroData2025.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Physics/HadronTransport/INukeHadroData2025.h b/src/Physics/HadronTransport/INukeHadroData2025.h index e38278722..934e8fe73 100644 --- a/src/Physics/HadronTransport/INukeHadroData2025.h +++ b/src/Physics/HadronTransport/INukeHadroData2025.h @@ -30,7 +30,8 @@ \cpright Copyright (c) 2003-2024, The GENIE Collaboration For the full text of the license visit http://copyright.genie-mc.org - + \created on september,2025 by Mohamed Ismail + For hA2025, we rely now on total cross sections TGraph2d not the fractions TGraph2d. */ //____________________________________________________________________________ From 7c651074814a4617333e1b6cc0085f5ca460b804 Mon Sep 17 00:00:00 2001 From: Mohamed Saad <46623331+M7medS3d@users.noreply.github.com> Date: Fri, 26 Sep 2025 11:32:11 -0400 Subject: [PATCH 5/9] Update INukeHadroData2025.h --- src/Physics/HadronTransport/INukeHadroData2025.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Physics/HadronTransport/INukeHadroData2025.h b/src/Physics/HadronTransport/INukeHadroData2025.h index 934e8fe73..c50e74b5e 100644 --- a/src/Physics/HadronTransport/INukeHadroData2025.h +++ b/src/Physics/HadronTransport/INukeHadroData2025.h @@ -30,7 +30,7 @@ \cpright Copyright (c) 2003-2024, The GENIE Collaboration For the full text of the license visit http://copyright.genie-mc.org - \created on september,2025 by Mohamed Ismail + \modified on september,2025 by Mohamed Ismail For hA2025, we rely now on total cross sections TGraph2d not the fractions TGraph2d. */ From 040863233c0166848a502f5ca536e420ab7fbc3b Mon Sep 17 00:00:00 2001 From: Mohamed Saad <46623331+M7medS3d@users.noreply.github.com> Date: Fri, 26 Sep 2025 11:33:10 -0400 Subject: [PATCH 6/9] Update INukeHadroFates2025.h --- src/Physics/HadronTransport/INukeHadroFates2025.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/Physics/HadronTransport/INukeHadroFates2025.h b/src/Physics/HadronTransport/INukeHadroFates2025.h index 0cb89de35..81e2ee62a 100644 --- a/src/Physics/HadronTransport/INukeHadroFates2025.h +++ b/src/Physics/HadronTransport/INukeHadroFates2025.h @@ -14,6 +14,9 @@ \cpright Copyright (c) 2003-2024, The GENIE Collaboration For the full text of the license visit http://copyright.genie-mc.org + + \modified on september,2025 by Mohamed Ismail + */ //____________________________________________________________________________ From 68bf8fc8d0bc971a1d9ec903e06bb29af58b8ffe Mon Sep 17 00:00:00 2001 From: Mohamed Saad <46623331+M7medS3d@users.noreply.github.com> Date: Fri, 26 Sep 2025 11:34:41 -0400 Subject: [PATCH 7/9] Update INukeHadroData2025.cxx --- src/Physics/HadronTransport/INukeHadroData2025.cxx | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/Physics/HadronTransport/INukeHadroData2025.cxx b/src/Physics/HadronTransport/INukeHadroData2025.cxx index 80af260c7..1ffa535b5 100644 --- a/src/Physics/HadronTransport/INukeHadroData2025.cxx +++ b/src/Physics/HadronTransport/INukeHadroData2025.cxx @@ -32,6 +32,9 @@ Include Oset data files. @ Apr, 2016 - Flor Blasczyk Added K+ cex data files + + @ Sep, 2025 - Mohamed Ismail + added total cross sections TGraph2d for hA2025 model + corsspondsing data */ //____________________________________________________________________________ From cfc8f5df5f8a55ea42db3ada8f08400ebea59416 Mon Sep 17 00:00:00 2001 From: Mohamed Saad <46623331+M7medS3d@users.noreply.github.com> Date: Fri, 26 Sep 2025 11:35:11 -0400 Subject: [PATCH 8/9] Update INukeHadroData2025.cxx --- src/Physics/HadronTransport/INukeHadroData2025.cxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Physics/HadronTransport/INukeHadroData2025.cxx b/src/Physics/HadronTransport/INukeHadroData2025.cxx index 1ffa535b5..fd0f2094b 100644 --- a/src/Physics/HadronTransport/INukeHadroData2025.cxx +++ b/src/Physics/HadronTransport/INukeHadroData2025.cxx @@ -34,7 +34,7 @@ Added K+ cex data files @ Sep, 2025 - Mohamed Ismail - added total cross sections TGraph2d for hA2025 model + corsspondsing data + added total cross sections TGraph2d for hA2025 model + corresponding data */ //____________________________________________________________________________ From e39f7e72845960b7dfaf7c86dd2bc4004a581f5b Mon Sep 17 00:00:00 2001 From: Mohamed Saad <46623331+M7medS3d@users.noreply.github.com> Date: Fri, 26 Sep 2025 11:36:32 -0400 Subject: [PATCH 9/9] Update HAIntranuke2025.cxx --- src/Physics/HadronTransport/HAIntranuke2025.cxx | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/Physics/HadronTransport/HAIntranuke2025.cxx b/src/Physics/HadronTransport/HAIntranuke2025.cxx index b6e398988..d606a40b0 100644 --- a/src/Physics/HadronTransport/HAIntranuke2025.cxx +++ b/src/Physics/HadronTransport/HAIntranuke2025.cxx @@ -42,6 +42,9 @@ Added 2014 version of INTRANUKE codes (new class) for independent development. @ Aug 30, 2016 - SD Fix memory leaks - Igor. + @ sep 2025 - Mohamed Ismail + new class for hA2025 + */ //____________________________________________________________________________