diff --git a/data/MINERvA/CC1pi0/2017_nu/corr/Correlation_Table_Delta_pi_phi_xsec.csv b/data/MINERvA/CC1pi0/2017_nu/corr/Correlation_Table_Delta_pi_phi_xsec.csv new file mode 100755 index 0000000..de6ad46 --- /dev/null +++ b/data/MINERvA/CC1pi0/2017_nu/corr/Correlation_Table_Delta_pi_phi_xsec.csv @@ -0,0 +1,8 @@ +1.0000 0.7551 0.7954 0.4031 0.6946 0.6541 0.5751 0.8834 +0.7551 1.0000 0.8918 0.5419 0.7185 0.7853 0.6566 0.8065 +0.7954 0.8918 1.0000 0.5994 0.7319 0.7890 0.6980 0.8104 +0.4031 0.5419 0.5994 1.0000 0.7704 0.7303 0.7335 0.6346 +0.6946 0.7185 0.7319 0.7704 1.0000 0.6866 0.6478 0.7405 +0.6541 0.7853 0.7890 0.7303 0.6866 1.0000 0.7989 0.7732 +0.5751 0.6566 0.6980 0.7335 0.6478 0.7989 1.0000 0.7237 +0.8834 0.8065 0.8104 0.6346 0.7405 0.7732 0.7237 1.0000 diff --git a/data/MINERvA/CC1pi0/2017_nu/corr/Correlation_Table_Delta_pi_theta_xsec.csv b/data/MINERvA/CC1pi0/2017_nu/corr/Correlation_Table_Delta_pi_theta_xsec.csv new file mode 100755 index 0000000..9d1b8d2 --- /dev/null +++ b/data/MINERvA/CC1pi0/2017_nu/corr/Correlation_Table_Delta_pi_theta_xsec.csv @@ -0,0 +1,10 @@ +1.0000 0.8270 0.7806 0.8058 0.7789 0.6888 0.5792 0.3831 0.2354 0.2427 +0.8270 1.0000 0.9103 0.8787 0.7744 0.7824 0.6199 0.4824 0.2403 0.2507 +0.7806 0.9103 1.0000 0.8994 0.7570 0.7543 0.6495 0.5182 0.2264 0.2536 +0.8058 0.8787 0.8994 1.0000 0.8506 0.8027 0.6888 0.5938 0.4161 0.3540 +0.7789 0.7744 0.7570 0.8506 1.0000 0.9164 0.8352 0.6761 0.4859 0.4205 +0.6888 0.7824 0.7543 0.8027 0.9164 1.0000 0.8555 0.7058 0.4772 0.4954 +0.5792 0.6199 0.6495 0.6888 0.8352 0.8555 1.0000 0.7957 0.6591 0.6767 +0.3831 0.4824 0.5182 0.5938 0.6761 0.7058 0.7957 1.0000 0.8844 0.7545 +0.2354 0.2403 0.2264 0.4161 0.4859 0.4772 0.6591 0.8844 1.0000 0.8149 +0.2427 0.2507 0.2536 0.3540 0.4205 0.4954 0.6767 0.7545 0.8149 1.0000 diff --git a/data/MINERvA/CC1pi0/2017_nu/corr/Correlation_Table_Enu_xsec.csv b/data/MINERvA/CC1pi0/2017_nu/corr/Correlation_Table_Enu_xsec.csv new file mode 100755 index 0000000..60244ea --- /dev/null +++ b/data/MINERvA/CC1pi0/2017_nu/corr/Correlation_Table_Enu_xsec.csv @@ -0,0 +1,10 @@ +1.0000 0.6649 -0.0840 -0.3894 -0.1217 0.1483 0.1622 0.0765 0.1177 -0.4642 +0.6649 1.0000 0.5805 0.2108 0.2546 0.2290 0.2183 0.2061 0.1711 -0.1266 +-0.0840 0.5805 1.0000 0.8601 0.5748 -0.0079 -0.0461 0.0101 -0.0786 0.0647 +-0.3894 0.2108 0.8601 1.0000 0.7304 0.0151 -0.0804 -0.0500 -0.1120 0.1627 +-0.1217 0.2546 0.5748 0.7304 1.0000 0.5583 0.4139 0.3710 0.3083 0.3293 +0.1483 0.2290 -0.0079 0.0151 0.5583 1.0000 0.8416 0.7116 0.7865 0.5736 +0.1622 0.2183 -0.0461 -0.0804 0.4139 0.8416 1.0000 0.8929 0.8941 0.5991 +0.0765 0.2061 0.0101 -0.0500 0.3710 0.7116 0.8929 1.0000 0.8905 0.6844 +0.1177 0.1711 -0.0786 -0.1120 0.3083 0.7865 0.8941 0.8905 1.0000 0.6809 +-0.4642 -0.1266 0.0647 0.1627 0.3293 0.5736 0.5991 0.6844 0.6809 1.0000 diff --git a/data/MINERvA/CC1pi0/2017_nu/corr/Correlation_Table_QSq_xsec.csv b/data/MINERvA/CC1pi0/2017_nu/corr/Correlation_Table_QSq_xsec.csv new file mode 100755 index 0000000..541b83d --- /dev/null +++ b/data/MINERvA/CC1pi0/2017_nu/corr/Correlation_Table_QSq_xsec.csv @@ -0,0 +1,8 @@ +1.0000 0.8945 0.6991 0.4436 0.0654 -0.1590 -0.2359 -0.3167 +0.8945 1.0000 0.8540 0.5864 0.1982 -0.0762 -0.2024 -0.3814 +0.6991 0.8540 1.0000 0.8524 0.5658 0.3308 0.2144 -0.0223 +0.4436 0.5864 0.8524 1.0000 0.7953 0.6330 0.5405 0.3327 +0.0654 0.1982 0.5658 0.7953 1.0000 0.9043 0.8283 0.6956 +-0.1590 -0.0762 0.3308 0.6330 0.9043 1.0000 0.9436 0.8575 +-0.2359 -0.2024 0.2144 0.5405 0.8283 0.9436 1.0000 0.9176 +-0.3167 -0.3814 -0.0223 0.3327 0.6956 0.8575 0.9176 1.0000 diff --git a/data/MINERvA/CC1pi0/2017_nu/corr/Correlation_Table_QSq_xsec_HighEnu.csv b/data/MINERvA/CC1pi0/2017_nu/corr/Correlation_Table_QSq_xsec_HighEnu.csv new file mode 100755 index 0000000..959a47c --- /dev/null +++ b/data/MINERvA/CC1pi0/2017_nu/corr/Correlation_Table_QSq_xsec_HighEnu.csv @@ -0,0 +1,8 @@ +1.0000 0.7545 0.5531 0.4876 0.1916 0.1307 -0.0911 -0.1402 +0.7545 1.0000 0.8116 0.6338 0.3504 0.1632 -0.2233 -0.4114 +0.5531 0.8116 1.0000 0.8450 0.6544 0.4504 0.2069 -0.0653 +0.4876 0.6338 0.8450 1.0000 0.7552 0.5296 0.3665 0.0508 +0.1916 0.3504 0.6544 0.7552 1.0000 0.7792 0.6410 0.4757 +0.1307 0.1632 0.4504 0.5296 0.7792 1.0000 0.7405 0.6436 +-0.0911 -0.2233 0.2069 0.3665 0.6410 0.7405 1.0000 0.8252 +-0.1402 -0.4114 -0.0653 0.0508 0.4757 0.6436 0.8252 1.0000 diff --git a/data/MINERvA/CC1pi0/2017_nu/corr/Correlation_Table_QSq_xsec_LowEnu.csv b/data/MINERvA/CC1pi0/2017_nu/corr/Correlation_Table_QSq_xsec_LowEnu.csv new file mode 100755 index 0000000..d228c80 --- /dev/null +++ b/data/MINERvA/CC1pi0/2017_nu/corr/Correlation_Table_QSq_xsec_LowEnu.csv @@ -0,0 +1,8 @@ +1.0000 0.9016 0.6036 0.2085 -0.0665 -0.3070 -0.3550 0.2579 +0.9016 1.0000 0.7653 0.3268 0.0832 -0.2120 -0.3315 0.2850 +0.6036 0.7653 1.0000 0.6999 0.5061 0.2409 0.1604 0.0542 +0.2085 0.3268 0.6999 1.0000 0.8694 0.7126 0.6587 0.0023 +-0.0665 0.0832 0.5061 0.8694 1.0000 0.8523 0.7616 0.0408 +-0.3070 -0.2120 0.2409 0.7126 0.8523 1.0000 0.8315 -0.0658 +-0.3550 -0.3315 0.1604 0.6587 0.7616 0.8315 1.0000 -0.1999 +0.2579 0.2850 0.0542 0.0023 0.0408 -0.0658 -0.1999 1.0000 diff --git a/data/MINERvA/CC1pi0/2017_nu/corr/Correlation_Table_W_xsec.csv b/data/MINERvA/CC1pi0/2017_nu/corr/Correlation_Table_W_xsec.csv new file mode 100755 index 0000000..9d32f17 --- /dev/null +++ b/data/MINERvA/CC1pi0/2017_nu/corr/Correlation_Table_W_xsec.csv @@ -0,0 +1,10 @@ +1.0000 0.9571 0.8665 0.4905 -0.1848 -0.3564 -0.3660 -0.3962 -0.4097 -0.5517 +0.9571 1.0000 0.9431 0.5882 -0.1706 -0.3473 -0.3543 -0.3706 -0.3780 -0.5264 +0.8665 0.9431 1.0000 0.7623 -0.0371 -0.2673 -0.2732 -0.2847 -0.3114 -0.4568 +0.4905 0.5882 0.7623 1.0000 0.5270 0.2171 0.1687 0.1231 0.0279 -0.1392 +-0.1848 -0.1706 -0.0371 0.5270 1.0000 0.8933 0.8036 0.7155 0.5933 0.4032 +-0.3564 -0.3473 -0.2673 0.2171 0.8933 1.0000 0.9557 0.8984 0.8123 0.5995 +-0.3660 -0.3543 -0.2732 0.1687 0.8036 0.9557 1.0000 0.9764 0.9005 0.6547 +-0.3962 -0.3706 -0.2847 0.1231 0.7155 0.8984 0.9764 1.0000 0.9613 0.7555 +-0.4097 -0.3780 -0.3114 0.0279 0.5933 0.8123 0.9005 0.9613 1.0000 0.8713 +-0.5517 -0.5264 -0.4568 -0.1392 0.4032 0.5995 0.6547 0.7555 0.8713 1.0000 diff --git a/data/MINERvA/CC1pi0/2017_nu/corr/Correlation_Table_deltaInvMass_xsec.csv b/data/MINERvA/CC1pi0/2017_nu/corr/Correlation_Table_deltaInvMass_xsec.csv new file mode 100755 index 0000000..9566fee --- /dev/null +++ b/data/MINERvA/CC1pi0/2017_nu/corr/Correlation_Table_deltaInvMass_xsec.csv @@ -0,0 +1,8 @@ +1.0000 0.9756 0.8176 0.3901 0.1345 0.1264 -0.2020 -0.2446 +0.9756 1.0000 0.8982 0.4595 0.2186 0.2456 -0.1020 -0.2136 +0.8176 0.8982 1.0000 0.6937 0.5074 0.4992 0.1744 -0.0506 +0.3901 0.4595 0.6937 1.0000 0.9013 0.7926 0.6489 0.3860 +0.1345 0.2186 0.5074 0.9013 1.0000 0.9176 0.8379 0.6175 +0.1264 0.2456 0.4992 0.7926 0.9176 1.0000 0.8240 0.5351 +-0.2020 -0.1020 0.1744 0.6489 0.8379 0.8240 1.0000 0.8508 +-0.2446 -0.2136 -0.0506 0.3860 0.6175 0.5351 0.8508 1.0000 diff --git a/data/MINERvA/CC1pi0/2017_nu/corr/Correlation_Table_deltaInvMass_xsec_DeltaRich.csv b/data/MINERvA/CC1pi0/2017_nu/corr/Correlation_Table_deltaInvMass_xsec_DeltaRich.csv new file mode 100755 index 0000000..b117948 --- /dev/null +++ b/data/MINERvA/CC1pi0/2017_nu/corr/Correlation_Table_deltaInvMass_xsec_DeltaRich.csv @@ -0,0 +1,7 @@ +1.0000 0.9251 0.6374 0.1129 -0.1836 0.0957 0.0379 +0.9251 1.0000 0.8207 0.2414 -0.1515 -0.0040 -0.0950 +0.6374 0.8207 1.0000 0.6146 0.2096 0.0140 -0.1690 +0.1129 0.2414 0.6146 1.0000 0.8227 0.4101 0.2648 +-0.1836 -0.1515 0.2096 0.8227 1.0000 0.6932 0.5369 +0.0957 -0.0040 0.0140 0.4101 0.6932 1.0000 0.9123 +0.0379 -0.0950 -0.1690 0.2648 0.5369 0.9123 1.0000 diff --git a/data/MINERvA/CC1pi0/2017_nu/corr/Correlation_Table_muon_P_xsec.csv b/data/MINERvA/CC1pi0/2017_nu/corr/Correlation_Table_muon_P_xsec.csv new file mode 100755 index 0000000..1591e98 --- /dev/null +++ b/data/MINERvA/CC1pi0/2017_nu/corr/Correlation_Table_muon_P_xsec.csv @@ -0,0 +1,8 @@ +1.0000 0.9011 0.5251 -0.1997 -0.3380 -0.2946 0.0947 0.0649 +0.9011 1.0000 0.7950 0.1666 -0.0016 0.0141 0.3061 0.3013 +0.5251 0.7950 1.0000 0.6962 0.5666 0.5397 0.4964 0.5433 +-0.1997 0.1666 0.6962 1.0000 0.9645 0.8862 0.4821 0.5288 +-0.3380 -0.0016 0.5666 0.9645 1.0000 0.9274 0.4699 0.4946 +-0.2946 0.0141 0.5397 0.8862 0.9274 1.0000 0.6831 0.5986 +0.0947 0.3061 0.4964 0.4821 0.4699 0.6831 1.0000 0.8371 +0.0649 0.3013 0.5433 0.5288 0.4946 0.5986 0.8371 1.0000 diff --git a/data/MINERvA/CC1pi0/2017_nu/corr/Correlation_Table_muon_theta_xsec.csv b/data/MINERvA/CC1pi0/2017_nu/corr/Correlation_Table_muon_theta_xsec.csv new file mode 100755 index 0000000..42a3260 --- /dev/null +++ b/data/MINERvA/CC1pi0/2017_nu/corr/Correlation_Table_muon_theta_xsec.csv @@ -0,0 +1,9 @@ +1.0000 0.9606 0.8724 0.8064 0.6734 0.6045 0.5072 0.3725 0.3390 +0.9606 1.0000 0.9321 0.8605 0.7530 0.6807 0.5862 0.4658 0.3859 +0.8724 0.9321 1.0000 0.9658 0.8941 0.8512 0.7746 0.6424 0.5572 +0.8064 0.8605 0.9658 1.0000 0.9510 0.9136 0.8551 0.7398 0.6752 +0.6734 0.7530 0.8941 0.9510 1.0000 0.9678 0.9460 0.8817 0.7909 +0.6045 0.6807 0.8512 0.9136 0.9678 1.0000 0.9793 0.9030 0.8459 +0.5072 0.5862 0.7746 0.8551 0.9460 0.9793 1.0000 0.9456 0.8884 +0.3725 0.4658 0.6424 0.7398 0.8817 0.9030 0.9456 1.0000 0.9509 +0.3390 0.3859 0.5572 0.6752 0.7909 0.8459 0.8884 0.9509 1.0000 diff --git a/data/MINERvA/CC1pi0/2017_nu/corr/Correlation_Table_pi0_KE_xsec.csv b/data/MINERvA/CC1pi0/2017_nu/corr/Correlation_Table_pi0_KE_xsec.csv new file mode 100755 index 0000000..95b06c4 --- /dev/null +++ b/data/MINERvA/CC1pi0/2017_nu/corr/Correlation_Table_pi0_KE_xsec.csv @@ -0,0 +1,7 @@ +1.0000 0.7498 0.2174 0.0613 0.2618 0.2688 0.1138 +0.7498 1.0000 0.7250 0.6070 0.6531 0.5901 0.4528 +0.2174 0.7250 1.0000 0.9347 0.8606 0.8006 0.7595 +0.0613 0.6070 0.9347 1.0000 0.9055 0.8161 0.7710 +0.2618 0.6531 0.8606 0.9055 1.0000 0.9267 0.7907 +0.2688 0.5901 0.8006 0.8161 0.9267 1.0000 0.8417 +0.1138 0.4528 0.7595 0.7710 0.7907 0.8417 1.0000 diff --git a/data/MINERvA/CC1pi0/2017_nu/corr/Correlation_Table_pi0_theta_xsec.csv b/data/MINERvA/CC1pi0/2017_nu/corr/Correlation_Table_pi0_theta_xsec.csv new file mode 100755 index 0000000..346909a --- /dev/null +++ b/data/MINERvA/CC1pi0/2017_nu/corr/Correlation_Table_pi0_theta_xsec.csv @@ -0,0 +1,11 @@ +1.0000 0.9253 0.8221 0.7625 0.6427 0.5885 0.5511 0.3667 0.3621 0.4444 0.3518 +0.9253 1.0000 0.9120 0.8755 0.8134 0.7110 0.6719 0.5570 0.4676 0.5896 0.4649 +0.8221 0.9120 1.0000 0.9342 0.8194 0.7848 0.7212 0.6059 0.4937 0.5916 0.6029 +0.7625 0.8755 0.9342 1.0000 0.9165 0.8528 0.7988 0.7193 0.5874 0.7408 0.7605 +0.6427 0.8134 0.8194 0.9165 1.0000 0.8883 0.8523 0.7985 0.6443 0.7121 0.6585 +0.5885 0.7110 0.7848 0.8528 0.8883 1.0000 0.9515 0.8550 0.8100 0.7776 0.6797 +0.5511 0.6719 0.7212 0.7988 0.8523 0.9515 1.0000 0.9294 0.8821 0.8164 0.6432 +0.3667 0.5570 0.6059 0.7193 0.7985 0.8550 0.9294 1.0000 0.8974 0.8808 0.6651 +0.3621 0.4676 0.4937 0.5874 0.6443 0.8100 0.8821 0.8974 1.0000 0.7952 0.5143 +0.4444 0.5896 0.5916 0.7408 0.7121 0.7776 0.8164 0.8808 0.7952 1.0000 0.8277 +0.3518 0.4649 0.6029 0.7605 0.6585 0.6797 0.6432 0.6651 0.5143 0.8277 1.0000 diff --git a/data/MINERvA/CC1pi0/2017_nu/data/XSec_Table_Delta_pi_phi_xsec.csv b/data/MINERvA/CC1pi0/2017_nu/data/XSec_Table_Delta_pi_phi_xsec.csv new file mode 100755 index 0000000..3503235 --- /dev/null +++ b/data/MINERvA/CC1pi0/2017_nu/data/XSec_Table_Delta_pi_phi_xsec.csv @@ -0,0 +1,9 @@ +0.00 0.0140 34 +45.00 0.0118 34 +90.00 0.0125 30 +135.00 0.0209 21 +180.00 0.0225 20 +225.00 0.0198 22 +270.00 0.0202 23 +315.00 0.0175 29 +360.00 0.00 0.00 diff --git a/data/MINERvA/CC1pi0/2017_nu/data/XSec_Table_Delta_pi_theta_xsec.csv b/data/MINERvA/CC1pi0/2017_nu/data/XSec_Table_Delta_pi_theta_xsec.csv new file mode 100755 index 0000000..0cb5fab --- /dev/null +++ b/data/MINERvA/CC1pi0/2017_nu/data/XSec_Table_Delta_pi_theta_xsec.csv @@ -0,0 +1,11 @@ +-1.00 3.86 21 +-0.80 2.92 22 +-0.60 2.70 25 +-0.40 2.92 23 +-0.20 2.95 23 +0.00 3.27 23 +0.20 3.06 25 +0.40 2.94 27 +0.60 3.39 29 +0.80 4.51 26 +1.00 0.00 0.00 diff --git a/data/MINERvA/CC1pi0/2017_nu/data/XSec_Table_Enu_xsec.csv b/data/MINERvA/CC1pi0/2017_nu/data/XSec_Table_Enu_xsec.csv new file mode 100755 index 0000000..929d2a9 --- /dev/null +++ b/data/MINERvA/CC1pi0/2017_nu/data/XSec_Table_Enu_xsec.csv @@ -0,0 +1,12 @@ +0.00 0.00 0 +1.50 11.80 19 +3.00 15.47 11 +3.50 15.47 13 +4.00 15.96 19 +5.00 20.77 18 +6.00 21.96 20 +8.00 31.90 18 +10.00 33.46 20 +12.00 25.30 23 +15.00 25.59 31 +20.00 0.00 0.00 diff --git a/data/MINERvA/CC1pi0/2017_nu/data/XSec_Table_QSq_xsec.csv b/data/MINERvA/CC1pi0/2017_nu/data/XSec_Table_QSq_xsec.csv new file mode 100755 index 0000000..c75662e --- /dev/null +++ b/data/MINERvA/CC1pi0/2017_nu/data/XSec_Table_QSq_xsec.csv @@ -0,0 +1,9 @@ +0.00 9.04 19 +0.10 18.24 12 +0.25 19.02 10 +0.40 14.86 11 +0.60 11.27 12 +0.85 6.53 16 +1.15 4.65 19 +1.55 1.57 36 +2.00 0.00 0 diff --git a/data/MINERvA/CC1pi0/2017_nu/data/XSec_Table_QSq_xsec_HighEnu.csv b/data/MINERvA/CC1pi0/2017_nu/data/XSec_Table_QSq_xsec_HighEnu.csv new file mode 100755 index 0000000..cc40458 --- /dev/null +++ b/data/MINERvA/CC1pi0/2017_nu/data/XSec_Table_QSq_xsec_HighEnu.csv @@ -0,0 +1,9 @@ +0.00 3.72 45 +0.10 10.37 19 +0.25 14.02 16 +0.40 11.94 15 +0.60 9.50 17 +0.85 6.66 20 +1.15 7.14 23 +1.55 3.07 42 +2.00 0.00 0.00 diff --git a/data/MINERvA/CC1pi0/2017_nu/data/XSec_Table_QSq_xsec_LowEnu.csv b/data/MINERvA/CC1pi0/2017_nu/data/XSec_Table_QSq_xsec_LowEnu.csv new file mode 100755 index 0000000..3b6d60b --- /dev/null +++ b/data/MINERvA/CC1pi0/2017_nu/data/XSec_Table_QSq_xsec_LowEnu.csv @@ -0,0 +1,9 @@ +0.00 10.28 19 +0.10 19.69 12 +0.25 21.64 12 +0.40 14.16 16 +0.60 10.97 20 +0.85 6.08 33 +1.15 2.34 60 +1.55 0.22 129 +2.00 0.00 0.00 diff --git a/data/MINERvA/CC1pi0/2017_nu/data/XSec_Table_W_xsec.csv b/data/MINERvA/CC1pi0/2017_nu/data/XSec_Table_W_xsec.csv new file mode 100755 index 0000000..87a3250 --- /dev/null +++ b/data/MINERvA/CC1pi0/2017_nu/data/XSec_Table_W_xsec.csv @@ -0,0 +1,11 @@ +0.60 0.72 50 +0.90 3.23 43 +1.00 11.01 24 +1.10 25.45 12 +1.20 29.45 10 +1.30 22.24 12 +1.40 17.82 12 +1.50 18.77 13 +1.60 16.66 15 +1.70 11.80 21 +1.80 0.00 0 diff --git a/data/MINERvA/CC1pi0/2017_nu/data/XSec_Table_deltaInvMass_xsec.csv b/data/MINERvA/CC1pi0/2017_nu/data/XSec_Table_deltaInvMass_xsec.csv new file mode 100755 index 0000000..5d423e8 --- /dev/null +++ b/data/MINERvA/CC1pi0/2017_nu/data/XSec_Table_deltaInvMass_xsec.csv @@ -0,0 +1,9 @@ +1.00 3.61 43 +1.10 26.38 24 +1.15 40.21 14 +1.20 43.36 11 +1.25 27.32 11 +1.30 15.74 12 +1.40 10.03 13 +1.60 3.45 25 +1.80 0.00 0 diff --git a/data/MINERvA/CC1pi0/2017_nu/data/XSec_Table_deltaInvMass_xsec_DeltaRich.csv b/data/MINERvA/CC1pi0/2017_nu/data/XSec_Table_deltaInvMass_xsec_DeltaRich.csv new file mode 100755 index 0000000..296d3a3 --- /dev/null +++ b/data/MINERvA/CC1pi0/2017_nu/data/XSec_Table_deltaInvMass_xsec_DeltaRich.csv @@ -0,0 +1,8 @@ +1.00 2.05 60 +1.10 21.55 24 +1.15 32.67 15 +1.20 31.23 14 +1.25 15.37 18 +1.30 5.91 30 +1.40 2.06 57 +1.60 0.00 0.00 diff --git a/data/MINERvA/CC1pi0/2017_nu/data/XSec_Table_muon_P_xsec.csv b/data/MINERvA/CC1pi0/2017_nu/data/XSec_Table_muon_P_xsec.csv new file mode 100755 index 0000000..e0f3c01 --- /dev/null +++ b/data/MINERvA/CC1pi0/2017_nu/data/XSec_Table_muon_P_xsec.csv @@ -0,0 +1,9 @@ +1.00 3.55 21 +2.00 5.24 13 +2.50 5.08 10 +3.00 3.13 12 +3.50 1.82 14 +4.00 0.96 14 +5.00 0.55 15 +7.00 0.45 13 +10.00 0.00 0 diff --git a/data/MINERvA/CC1pi0/2017_nu/data/XSec_Table_muon_theta_xsec.csv b/data/MINERvA/CC1pi0/2017_nu/data/XSec_Table_muon_theta_xsec.csv new file mode 100755 index 0000000..5eee04c --- /dev/null +++ b/data/MINERvA/CC1pi0/2017_nu/data/XSec_Table_muon_theta_xsec.csv @@ -0,0 +1,10 @@ +0.00 0.166 19 +2.00 0.488 12 +4.00 0.771 10 +6.00 0.846 10 +8.00 0.921 9 +10.00 0.856 10 +12.00 0.879 9 +16.00 0.830 11 +20.00 0.566 19 +25.00 0.00 0 diff --git a/data/MINERvA/CC1pi0/2017_nu/data/XSec_Table_pi0_KE_xsec.csv b/data/MINERvA/CC1pi0/2017_nu/data/XSec_Table_pi0_KE_xsec.csv new file mode 100755 index 0000000..993dc60 --- /dev/null +++ b/data/MINERvA/CC1pi0/2017_nu/data/XSec_Table_pi0_KE_xsec.csv @@ -0,0 +1,8 @@ +0.00 29.80 22 +0.05 42.78 11 +0.15 27.14 10 +0.25 16.95 10 +0.40 10.11 11 +0.55 7.96 11 +0.75 4.44 14 +1.00 0.00 0 diff --git a/data/MINERvA/CC1pi0/2017_nu/data/XSec_Table_pi0_theta_xsec.csv b/data/MINERvA/CC1pi0/2017_nu/data/XSec_Table_pi0_theta_xsec.csv new file mode 100755 index 0000000..a5fab8f --- /dev/null +++ b/data/MINERvA/CC1pi0/2017_nu/data/XSec_Table_pi0_theta_xsec.csv @@ -0,0 +1,12 @@ +0.00 0.039 30 +10.00 0.112 18 +20.00 0.175 14 +30.00 0.200 12 +40.00 0.169 12 +50.00 0.155 13 +60.00 0.149 13 +70.00 0.133 14 +80.00 0.077 19 +90.00 0.064 13 +120.00 0.028 13 +180.00 0.00 0.00 diff --git a/data/MINERvA/CC1pi0/2017_nu/errors/Errors_Table_Delta_pi_phi_xsec.csv b/data/MINERvA/CC1pi0/2017_nu/errors/Errors_Table_Delta_pi_phi_xsec.csv new file mode 100755 index 0000000..bdc638b --- /dev/null +++ b/data/MINERvA/CC1pi0/2017_nu/errors/Errors_Table_Delta_pi_phi_xsec.csv @@ -0,0 +1,10 @@ +Delta_pi_phi_xsec +Bin Min , Bin Max , Detector, X-Sec Model, FSI, Flux, Other, Total +0.00 , 45.00 , 4.8 , 6.2 , 13.2 , 3.2 , 2.2 , 15.9 +45.00 , 90.00 , 6.5 , 8.2 , 10.0 , 2.6 , 2.5 , 14.9 +90.00 , 135.00 , 5.2 , 6.6 , 8.5 , 2.8 , 2.2 , 12.5 +135.00 , 180.00 , 3.4 , 3.8 , 2.5 , 4.9 , 1.3 , 7.7 +180.00 , 225.00 , 2.8 , 3.9 , 4.6 , 4.5 , 1.3 , 8.2 +225.00 , 270.00 , 5.2 , 5.1 , 5.6 , 4.2 , 1.5 , 10.2 +270.00 , 315.00 , 3.3 , 4.4 , 3.8 , 4.6 , 1.5 , 8.3 +315.00 , 360.00 , 5.7 , 5.9 , 7.6 , 4.0 , 1.8 , 12.0 diff --git a/data/MINERvA/CC1pi0/2017_nu/errors/Errors_Table_Delta_pi_theta_xsec.csv b/data/MINERvA/CC1pi0/2017_nu/errors/Errors_Table_Delta_pi_theta_xsec.csv new file mode 100755 index 0000000..5e87a27 --- /dev/null +++ b/data/MINERvA/CC1pi0/2017_nu/errors/Errors_Table_Delta_pi_theta_xsec.csv @@ -0,0 +1,12 @@ +Delta_pi_theta_xsec +Bin Min , Bin Max , Detector, X-Sec Model, FSI, Flux, Other, Total +-1.00 , -0.80 , 6.2 , 3.9 , 2.4 , 5.4 , 1.2 , 9.5 +-0.80 , -0.60 , 5.7 , 4.8 , 6.3 , 4.8 , 1.3 , 10.9 +-0.60 , -0.40 , 7.1 , 5.0 , 7.6 , 4.6 , 1.6 , 12.5 +-0.40 , -0.20 , 5.0 , 5.1 , 5.2 , 4.8 , 1.6 , 10.2 +-0.20 , 0.00 , 5.6 , 5.5 , 4.5 , 4.1 , 1.8 , 10.1 +0.00 , 0.20 , 4.3 , 5.5 , 4.4 , 3.7 , 1.7 , 9.2 +0.20 , 0.40 , 4.7 , 6.4 , 7.3 , 3.1 , 2.0 , 11.4 +0.40 , 0.60 , 6.7 , 6.3 , 9.2 , 3.0 , 2.1 , 13.5 +0.60 , 0.80 , 7.0 , 6.7 , 10.5 , 2.8 , 2.1 , 14.7 +0.80 , 1.00 , 5.5 , 6.7 , 7.5 , 3.8 , 1.8 , 12.2 diff --git a/data/MINERvA/CC1pi0/2017_nu/errors/Errors_Table_Enu_xsec.csv b/data/MINERvA/CC1pi0/2017_nu/errors/Errors_Table_Enu_xsec.csv new file mode 100755 index 0000000..6725496 --- /dev/null +++ b/data/MINERvA/CC1pi0/2017_nu/errors/Errors_Table_Enu_xsec.csv @@ -0,0 +1,13 @@ +Enu_xsec +Bin Min , Bin Max , Detector, X-Sec Model, FSI, Flux, Other, Total +0.00 , 1.50 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 +1.50 , 3.00 , 14.9 , 3.9 , 2.5 , 7.2 , 0.7 , 17.2 +3.00 , 3.50 , 4.7 , 3.8 , 1.8 , 5.4 , 0.7 , 8.4 +3.50 , 4.00 , 5.3 , 4.0 , 2.5 , 7.5 , 0.6 , 10.3 +4.00 , 5.00 , 8.7 , 4.8 , 3.4 , 12.9 , 0.4 , 16.7 +5.00 , 6.00 , 4.2 , 5.7 , 4.5 , 8.5 , 0.4 , 11.9 +6.00 , 8.00 , 5.0 , 8.4 , 6.6 , 9.4 , 0.1 , 15.1 +8.00 , 10.00 , 3.2 , 4.2 , 4.0 , 10.3 , 0.5 , 12.3 +10.00 , 12.00 , 4.5 , 4.3 , 3.7 , 10.2 , 0.6 , 12.6 +12.00 , 15.00 , 4.7 , 4.9 , 3.8 , 10.6 , 0.5 , 13.1 +15.00 , 20.00 , 17.0 , 7.0 , 6.3 , 13.4 , 0.2 , 23.6 diff --git a/data/MINERvA/CC1pi0/2017_nu/errors/Errors_Table_QSq_xsec.csv b/data/MINERvA/CC1pi0/2017_nu/errors/Errors_Table_QSq_xsec.csv new file mode 100755 index 0000000..d480185 --- /dev/null +++ b/data/MINERvA/CC1pi0/2017_nu/errors/Errors_Table_QSq_xsec.csv @@ -0,0 +1,10 @@ +QSq_xsec +Bin Min , Bin Max , Detector, X-Sec Model, FSI, Flux, Other, Total +0.00 , 0.10 , 12.4 , 8.6 , 4.5 , 3.6 , 0.5 , 16.2 +0.10 , 0.25 , 7.2 , 4.2 , 3.1 , 4.4 , 0.6 , 9.9 +0.25 , 0.40 , 3.6 , 3.6 , 2.6 , 4.1 , 0.6 , 7.1 +0.40 , 0.60 , 3.3 , 3.3 , 2.9 , 4.0 , 0.5 , 6.8 +0.60 , 0.85 , 5.0 , 2.7 , 4.1 , 4.4 , 0.5 , 8.3 +0.85 , 1.15 , 7.7 , 4.5 , 4.4 , 4.3 , 0.5 , 10.8 +1.15 , 1.55 , 10.9 , 4.5 , 4.8 , 5.4 , 0.5 , 13.9 +1.55 , 2.00 , 24.2 , 9.2 , 10.7 , 6.8 , 0.2 , 28.8 diff --git a/data/MINERvA/CC1pi0/2017_nu/errors/Errors_Table_QSq_xsec_HighEnu.csv b/data/MINERvA/CC1pi0/2017_nu/errors/Errors_Table_QSq_xsec_HighEnu.csv new file mode 100755 index 0000000..7f30aca --- /dev/null +++ b/data/MINERvA/CC1pi0/2017_nu/errors/Errors_Table_QSq_xsec_HighEnu.csv @@ -0,0 +1,10 @@ +QSq_xsec +Bin Min , Bin Max , Detector, X-Sec Model, FSI, Flux, Other, Total +0.00 , 0.10 , 18.5 , 20.6 , 8.7 , 3.8 , 2.6 , 29.4 +0.10 , 0.25 , 9.0 , 6.6 , 3.7 , 4.0 , 1.2 , 12.5 +0.25 , 0.40 , 3.9 , 4.3 , 4.1 , 4.7 , 1.2 , 8.6 +0.40 , 0.60 , 3.5 , 4.0 , 4.0 , 4.6 , 1.3 , 8.1 +0.60 , 0.85 , 4.3 , 2.6 , 4.5 , 4.4 , 1.3 , 8.2 +0.85 , 1.15 , 5.6 , 4.9 , 4.8 , 3.5 , 1.5 , 9.7 +1.15 , 1.55 , 10.4 , 4.9 , 5.0 , 4.2 , 1.4 , 13.3 +1.55 , 2.00 , 22.3 , 8.6 , 12.7 , 4.9 , 2.4 , 27.6 diff --git a/data/MINERvA/CC1pi0/2017_nu/errors/Errors_Table_QSq_xsec_LowEnu.csv b/data/MINERvA/CC1pi0/2017_nu/errors/Errors_Table_QSq_xsec_LowEnu.csv new file mode 100755 index 0000000..46a4dc6 --- /dev/null +++ b/data/MINERvA/CC1pi0/2017_nu/errors/Errors_Table_QSq_xsec_LowEnu.csv @@ -0,0 +1,10 @@ +QSq_xsec +Bin Min , Bin Max , Detector, X-Sec Model, FSI, Flux, Other, Total +0.00 , 0.10 , 10.8 , 7.6 , 4.8 , 3.5 , 0.5 , 14.5 +0.10 , 0.25 , 6.3 , 3.8 , 3.7 , 4.2 , 0.6 , 9.3 +0.25 , 0.40 , 3.1 , 3.5 , 3.0 , 4.0 , 0.6 , 6.9 +0.40 , 0.60 , 5.9 , 4.2 , 4.2 , 3.1 , 0.4 , 8.9 +0.60 , 0.85 , 8.0 , 4.0 , 5.6 , 3.6 , 0.5 , 11.2 +0.85 , 1.15 , 17.5 , 8.1 , 8.0 , 3.1 , 0.4 , 21.1 +1.15 , 1.55 , 33.4 , 10.2 , 11.3 , 3.2 , 0.4 , 36.8 +1.55 , 2.00 , 64.6 , 20.7 , 17.5 , 1.7 , 0.4 , 70.1 diff --git a/data/MINERvA/CC1pi0/2017_nu/errors/Errors_Table_W_xsec.csv b/data/MINERvA/CC1pi0/2017_nu/errors/Errors_Table_W_xsec.csv new file mode 100755 index 0000000..5749e9f --- /dev/null +++ b/data/MINERvA/CC1pi0/2017_nu/errors/Errors_Table_W_xsec.csv @@ -0,0 +1,12 @@ +W_xsec +Bin Min , Bin Max , Detector, X-Sec Model, FSI, Flux, Other, Total +0.60 , 0.90 , 35.5 , 10.0 , 12.3 , 4.1 , 0.4 , 39.1 +0.90 , 1.00 , 33.3 , 8.8 , 10.1 , 4.0 , 0.3 , 36.1 +1.00 , 1.10 , 17.8 , 4.8 , 7.4 , 3.6 , 0.4 , 20.2 +1.10 , 1.20 , 6.3 , 3.1 , 5.1 , 4.4 , 0.6 , 9.8 +1.20 , 1.30 , 5.1 , 3.8 , 3.2 , 4.6 , 0.6 , 8.5 +1.30 , 1.40 , 5.0 , 5.1 , 5.5 , 3.9 , 0.5 , 9.8 +1.40 , 1.50 , 5.1 , 6.2 , 5.4 , 3.5 , 0.5 , 10.3 +1.50 , 1.60 , 5.4 , 6.6 , 5.3 , 3.5 , 0.4 , 10.6 +1.60 , 1.70 , 6.5 , 7.5 , 6.3 , 3.2 , 0.4 , 12.2 +1.70 , 1.80 , 11.3 , 8.9 , 8.7 , 2.7 , 0.3 , 17.0 diff --git a/data/MINERvA/CC1pi0/2017_nu/errors/Errors_Table_deltaInvMass_xsec.csv b/data/MINERvA/CC1pi0/2017_nu/errors/Errors_Table_deltaInvMass_xsec.csv new file mode 100755 index 0000000..8802c0b --- /dev/null +++ b/data/MINERvA/CC1pi0/2017_nu/errors/Errors_Table_deltaInvMass_xsec.csv @@ -0,0 +1,10 @@ +deltaInvMass_xsec +Bin Min , Bin Max , Detector, X-Sec Model, FSI, Flux, Other, Total +1.00 , 1.10 , 21.7 , 14.2 , 12.2 , 4.1 , 2.9 , 29.1 +1.10 , 1.15 , 14.6 , 9.3 , 6.4 , 1.7 , 2.0 , 18.7 +1.15 , 1.20 , 7.1 , 5.2 , 3.2 , 3.5 , 1.4 , 10.0 +1.20 , 1.25 , 2.8 , 3.9 , 4.0 , 4.4 , 1.3 , 7.7 +1.25 , 1.30 , 3.4 , 3.5 , 3.0 , 4.3 , 1.5 , 7.3 +1.30 , 1.40 , 2.9 , 4.2 , 2.4 , 4.2 , 1.5 , 7.2 +1.40 , 1.60 , 5.0 , 4.7 , 2.3 , 4.4 , 1.3 , 8.6 +1.60 , 1.80 , 11.7 , 8.7 , 6.9 , 2.5 , 1.8 , 16.5 diff --git a/data/MINERvA/CC1pi0/2017_nu/errors/Errors_Table_deltaInvMass_xsec_DeltaRich.csv b/data/MINERvA/CC1pi0/2017_nu/errors/Errors_Table_deltaInvMass_xsec_DeltaRich.csv new file mode 100755 index 0000000..5274c90 --- /dev/null +++ b/data/MINERvA/CC1pi0/2017_nu/errors/Errors_Table_deltaInvMass_xsec_DeltaRich.csv @@ -0,0 +1,9 @@ +deltaInvMass_xsec +Bin Min , Bin Max , Detector, X-Sec Model, FSI, Flux, Other, Total +1.00 , 1.10 , 26.6 , 14.5 , 14.2 , 2.9 , 4.2 , 33.9 +1.10 , 1.15 , 13.7 , 5.9 , 5.4 , 3.4 , 2.0 , 16.3 +1.15 , 1.20 , 6.1 , 3.2 , 3.7 , 5.6 , 1.2 , 9.7 +1.20 , 1.25 , 3.1 , 3.0 , 4.8 , 5.6 , 1.2 , 8.6 +1.25 , 1.30 , 7.3 , 4.3 , 5.8 , 4.7 , 1.5 , 11.4 +1.30 , 1.40 , 10.1 , 12.4 , 10.1 , 3.0 , 3.2 , 19.4 +1.40 , 1.60 , 19.7 , 22.9 , 19.7 , 6.2 , 5.1 , 36.9 diff --git a/data/MINERvA/CC1pi0/2017_nu/errors/Errors_Table_muon_P_xsec.csv b/data/MINERvA/CC1pi0/2017_nu/errors/Errors_Table_muon_P_xsec.csv new file mode 100755 index 0000000..d444c0f --- /dev/null +++ b/data/MINERvA/CC1pi0/2017_nu/errors/Errors_Table_muon_P_xsec.csv @@ -0,0 +1,10 @@ +muon_P_xsec +Bin Min , Bin Max , Detector, X-Sec Model, FSI, Flux, Other, Total +1.00 , 2.00 , 17.7 , 4.5 , 2.6 , 5.5 , 0.6 , 19.3 +2.00 , 2.50 , 8.5 , 4.3 , 2.2 , 5.2 , 0.6 , 11.1 +2.50 , 3.00 , 3.9 , 3.8 , 2.4 , 4.8 , 0.6 , 7.7 +3.00 , 3.50 , 6.4 , 3.9 , 2.8 , 5.1 , 0.6 , 9.5 +3.50 , 4.00 , 7.6 , 4.1 , 2.8 , 5.7 , 0.5 , 10.7 +4.00 , 5.00 , 6.9 , 5.5 , 3.7 , 4.9 , 0.4 , 10.7 +5.00 , 7.00 , 4.2 , 7.9 , 6.3 , 3.7 , 0.2 , 11.6 +7.00 , 10.00 , 3.9 , 4.5 , 3.3 , 5.5 , 0.5 , 8.7 diff --git a/data/MINERvA/CC1pi0/2017_nu/errors/Errors_Table_muon_theta_xsec.csv b/data/MINERvA/CC1pi0/2017_nu/errors/Errors_Table_muon_theta_xsec.csv new file mode 100755 index 0000000..1cba579 --- /dev/null +++ b/data/MINERvA/CC1pi0/2017_nu/errors/Errors_Table_muon_theta_xsec.csv @@ -0,0 +1,11 @@ +muon_theta_xsec +Bin Min , Bin Max , Detector, X-Sec Model, FSI, Flux, Other, Total +0.00 , 2.00 , 7.5 , 7.9 , 5.7 , 3.8 , 0.4 , 12.9 +2.00 , 4.00 , 4.4 , 6.5 , 3.3 , 3.4 , 0.4 , 9.2 +4.00 , 6.00 , 3.0 , 5.1 , 3.4 , 3.5 , 0.5 , 7.7 +6.00 , 8.00 , 3.5 , 4.2 , 3.3 , 4.0 , 0.5 , 7.5 +8.00 , 10.00 , 3.0 , 3.3 , 2.9 , 4.5 , 0.6 , 7.0 +10.00 , 12.00 , 3.0 , 3.1 , 3.5 , 4.3 , 0.5 , 7.0 +12.00 , 16.00 , 3.2 , 2.6 , 3.3 , 4.6 , 0.6 , 7.0 +16.00 , 20.00 , 3.0 , 3.0 , 3.4 , 4.5 , 0.6 , 7.1 +20.00 , 25.00 , 4.0 , 3.3 , 4.4 , 4.8 , 0.6 , 8.3 diff --git a/data/MINERvA/CC1pi0/2017_nu/errors/Errors_Table_pi0_KE_xsec.csv b/data/MINERvA/CC1pi0/2017_nu/errors/Errors_Table_pi0_KE_xsec.csv new file mode 100755 index 0000000..4de320b --- /dev/null +++ b/data/MINERvA/CC1pi0/2017_nu/errors/Errors_Table_pi0_KE_xsec.csv @@ -0,0 +1,9 @@ +pi0_KE_xsec +Bin Min , Bin Max , Detector, X-Sec Model, FSI, Flux, Other, Total +0.00 , 0.05 , 14.3 , 9.2 , 7.1 , 1.4 , 0.1 , 18.5 +0.05 , 0.15 , 5.0 , 4.9 , 4.2 , 3.4 , 0.5 , 8.9 +0.15 , 0.25 , 3.5 , 3.4 , 2.3 , 4.5 , 0.6 , 7.1 +0.25 , 0.40 , 3.7 , 3.5 , 1.8 , 4.6 , 0.6 , 7.2 +0.40 , 0.55 , 2.7 , 3.5 , 2.9 , 4.9 , 0.6 , 7.3 +0.55 , 0.75 , 2.4 , 2.9 , 3.4 , 5.7 , 0.7 , 7.6 +0.75 , 1.00 , 3.7 , 4.7 , 5.2 , 4.8 , 0.6 , 9.3 diff --git a/data/MINERvA/CC1pi0/2017_nu/errors/Errors_Table_pi0_theta_xsec.csv b/data/MINERvA/CC1pi0/2017_nu/errors/Errors_Table_pi0_theta_xsec.csv new file mode 100755 index 0000000..a37d116 --- /dev/null +++ b/data/MINERvA/CC1pi0/2017_nu/errors/Errors_Table_pi0_theta_xsec.csv @@ -0,0 +1,13 @@ +pi0_theta_xsec +Bin Min , Bin Max , Detector, X-Sec Model, FSI, Flux, Other, Total +0.00 , 10.00 , 8.5 , 9.0 , 5.5 , 2.5 , 0.4 , 13.8 +10.00 , 20.00 , 6.1 , 6.4 , 5.3 , 3.7 , 0.5 , 10.9 +20.00 , 30.00 , 5.2 , 4.8 , 3.2 , 4.0 , 0.5 , 8.7 +30.00 , 40.00 , 3.6 , 3.9 , 2.4 , 4.4 , 0.6 , 7.3 +40.00 , 50.00 , 2.3 , 3.5 , 3.4 , 4.0 , 0.5 , 6.8 +50.00 , 60.00 , 2.3 , 4.1 , 3.6 , 3.6 , 0.5 , 6.9 +60.00 , 70.00 , 2.1 , 5.2 , 3.3 , 3.0 , 0.4 , 7.2 +70.00 , 80.00 , 3.5 , 4.9 , 4.6 , 3.3 , 0.5 , 8.3 +80.00 , 90.00 , 4.4 , 6.2 , 6.9 , 2.4 , 0.4 , 10.6 +90.00 , 120.00 , 5.6 , 4.6 , 3.6 , 3.8 , 0.5 , 9.0 +120.00 , 180.00 , 5.1 , 3.2 , 2.1 , 5.5 , 0.7 , 8.4 diff --git a/data/MINERvA/CC1pi0/2017_nu/flux/Flux_Table.csv b/data/MINERvA/CC1pi0/2017_nu/flux/Flux_Table.csv new file mode 100755 index 0000000..b103441 --- /dev/null +++ b/data/MINERvA/CC1pi0/2017_nu/flux/Flux_Table.csv @@ -0,0 +1,31 @@ +Bin Min, Bin Max, Neutrino flux (nu/m^2/GeV/POT) + 0.0 , 0.5 , 8.58e-10 + 0.5 , 1.0 , 1.38e-09 + 1.0 , 1.5 , 3.45e-09 + 1.5 , 2.0 , 5.06e-09 + 2.0 , 2.5 , 6.66e-09 + 2.5 , 3.0 , 8.18e-09 + 3.0 , 3.5 , 8.53e-09 + 3.5 , 4.0 , 6.81e-09 + 4.0 , 4.5 , 4.06e-09 + 4.5 , 5.0 , 2.20e-09 + 5.0 , 5.5 , 1.35e-09 + 5.5 , 6.0 , 9.72e-10 + 6.0 , 6.5 , 7.90e-10 + 6.5 , 7.0 , 6.67e-10 + 7.0 , 7.5 , 5.82e-10 + 7.5 , 8.0 , 5.09e-10 + 8.0 , 8.5 , 4.58e-10 + 8.5 , 9.0 , 4.10e-10 + 9.0 , 9.5 , 3.71e-10 + 9.5 , 10.0 , 3.40e-10 + 10.0 , 11.0 , 2.95e-10 + 11.0 , 12.0 , 2.46e-10 + 12.0 , 13.0 , 2.06e-10 + 13.0 , 14.0 , 1.75e-10 + 14.0 , 15.0 , 1.45e-10 + 15.0 , 16.0 , 1.20e-10 + 16.0 , 17.0 , 1.01e-10 + 17.0 , 18.0 , 8.42e-11 + 18.0 , 19.0 , 7.11e-11 + 19.0 , 20.0 , 6.07e-11 diff --git a/src/ANL/ANL_CC1ppip_Evt_1DcosthAdler_nu.cxx b/src/ANL/ANL_CC1ppip_Evt_1DcosthAdler_nu.cxx index 06be048..6e52217 100644 --- a/src/ANL/ANL_CC1ppip_Evt_1DcosthAdler_nu.cxx +++ b/src/ANL/ANL_CC1ppip_Evt_1DcosthAdler_nu.cxx @@ -1,135 +1,118 @@ // Copyright 2016 L. Pickering, P Stowell, R. Terri, C. Wilkinson, C. Wret /******************************************************************************* * This file is part of NUISANCE. * * NUISANCE is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * NUISANCE is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with NUISANCE. If not, see . *******************************************************************************/ /** * Radecky et al. Phys Rev D, 3rd series, Vol 25, No 5, 1 March 1982, p 1161-1173 */ #include "ANL_CC1ppip_Evt_1DcosthAdler_nu.h" //******************************************************************** ANL_CC1ppip_Evt_1DcosthAdler_nu::ANL_CC1ppip_Evt_1DcosthAdler_nu(nuiskey samplekey) { //******************************************************************** // Sample overview --------------------------------------------------- std::string descrip = "ANL CC1ppip Event Rate 1DcosmuStar nu sample. \n" \ "Target: D2 \n" \ "Flux: \n" \ "Signal: \n"; // Setup common settings fSettings = LoadSampleSettings(samplekey); fSettings.SetDescription(descrip); fSettings.SetXTitle("cos#theta_{Adler}"); fSettings.SetYTitle("Number of events"); fSettings.SetAllowedTypes("EVT/SHAPE/DIAG", "EVT/SHAPE/DIAG"); fSettings.SetEnuRange(0.0, 6.0); fSettings.DefineAllowedTargets("D,H"); // CCQELike plot information fSettings.SetTitle("ANL #nu_mu CC1n#pi^{+}"); fSettings.SetDataInput( FitPar::GetDataBase() + "/ANL/CC1pip_on_p/ANL_CC1pip_on_p_noEvents_costhAdler_1982.csv" ); fSettings.DefineAllowedSpecies("numu"); FinaliseSampleSettings(); // Scaling Setup --------------------------------------------------- // ScaleFactor automatically setup for DiffXSec/cm2/Nucleon fScaleFactor = GetEventHistogram()->Integral("width") / (fNEvents + 0.) * 2. / 1.; // Plot Setup ------------------------------------------------------- SetDataFromTextFile( fSettings.GetDataInput() ); SetPoissonErrors(); SetCovarFromDiagonal(); // Final setup --------------------------------------------------- FinaliseMeasurement(); }; void ANL_CC1ppip_Evt_1DcosthAdler_nu::FillEventVariables(FitEvent *event) { + fXVar = -999.99; + if (event->NumFSParticle(2212) == 0 || event->NumFSParticle(211) == 0 || event->NumFSParticle(13) == 0) return; TLorentzVector Pnu = event->GetNeutrinoIn()->fP; TLorentzVector Pp = event->GetHMFSParticle(2212)->fP; TLorentzVector Ppip = event->GetHMFSParticle(211)->fP; TLorentzVector Pmu = event->GetHMFSParticle(13)->fP; // Get the hadronic mass double hadMass = FitUtils::MpPi(Pp, Ppip); - // Need to boost pion and muon into resonance rest-frame to get phi (e.g. see F. Sanchez arxiv 1511.00501v2) - // - // Get the resonance 4-vector - TLorentzVector Pres = Ppip + Pp; - // Boost in/outgoing particles into rest frame - Ppip.Boost(-Pres.BoostVector()); - Pmu.Boost(-Pres.BoostVector()); - Pnu.Boost(Pres.BoostVector()); - // Define the vectors - TVector3 PpipVect = Ppip.Vect(); - TVector3 PnuVect = Pnu.Vect(); - TVector3 PmuVect = Pmu.Vect(); - // Define the z-direction; should be same as Pres - TVector3 zVect = (PnuVect - PmuVect); - zVect *= 1 / double(zVect.Mag()); - - // Then finally construct phi as the angle between pion projection and x axis - double cosThAdler = -999; - // ANL has a M(pi, p) < 1.4 GeV cut imposed - if (hadMass < 1400) cosThAdler = cos(PpipVect.Angle(zVect)); + if (hadMass > 1400) return; + // Get Adler cos theta + double cosThAdler = FitUtils::CosThAdler(Pnu, Pmu, Ppip, Pp); fXVar = cosThAdler; - - return; }; bool ANL_CC1ppip_Evt_1DcosthAdler_nu::isSignal(FitEvent *event) { return SignalDef::isCC1pi3Prong(event, 14, 211, 2212, EnuMin, EnuMax); } /* void ANL_CC1ppip_Evt_1DcosthAdler_nu::FillHistograms() { if (makeHadronicMassHist) { hadMassHist->Fill(hadMass); } Measurement1D::FillHistograms(); } void ANL_CC1ppip_Evt_1DcosthAdler_nu::ScaleEvents() { PlotUtils::FluxUnfoldedScaling(fMCHist, GetFluxHistogram()); PlotUtils::FluxUnfoldedScaling(fMCFine, GetFluxHistogram()); fMCHist->Scale(fScaleFactor); fMCFine->Scale(fScaleFactor); return; } */ diff --git a/src/ANL/ANL_CC1ppip_Evt_1Dphi_nu.cxx b/src/ANL/ANL_CC1ppip_Evt_1Dphi_nu.cxx index 1a41fb5..c4a27c7 100644 --- a/src/ANL/ANL_CC1ppip_Evt_1Dphi_nu.cxx +++ b/src/ANL/ANL_CC1ppip_Evt_1Dphi_nu.cxx @@ -1,164 +1,117 @@ // Copyright 2016 L. Pickering, P Stowell, R. Terri, C. Wilkinson, C. Wret /******************************************************************************* * This file is part of NUISANCE. * * NUISANCE is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * NUISANCE is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with NUISANCE. If not, see . *******************************************************************************/ /** * Radecky et al. Phys Rev D, 3rd series, Vol 25, No 5, 1 March 1982, p 1161-1173 */ #include "ANL_CC1ppip_Evt_1Dphi_nu.h" //******************************************************************** ANL_CC1ppip_Evt_1Dphi_nu::ANL_CC1ppip_Evt_1Dphi_nu(nuiskey samplekey) { //******************************************************************** // Sample overview --------------------------------------------------- std::string descrip = "ANL CC1npip Event Rate 1DcosmuStar nu sample. \n" \ "Target: D2 \n" \ "Flux: \n" \ "Signal: \n"; // Setup common settings fSettings = LoadSampleSettings(samplekey); fSettings.SetDescription(descrip); fSettings.SetXTitle(" #phi_{Adler}"); fSettings.SetYTitle("Number of events"); fSettings.SetAllowedTypes("EVT/SHAPE/DIAG", "EVT/SHAPE/DIAG"); fSettings.SetEnuRange(0.0, 6.0); fSettings.DefineAllowedTargets("D,H"); // CCQELike plot information fSettings.SetTitle("ANL #nu_mu CC1n#pi^{+}"); fSettings.SetDataInput( FitPar::GetDataBase() + "/ANL/CC1pip_on_p/ANL_CC1pip_on_p_noEvents_phiAdler_1982.csv" ); fSettings.DefineAllowedSpecies("numu"); FinaliseSampleSettings(); // Scaling Setup --------------------------------------------------- // ScaleFactor automatically setup for DiffXSec/cm2/Nucleon fScaleFactor = GetEventHistogram()->Integral("width")/(fNEvents+0.)*2./1.; // Plot Setup ------------------------------------------------------- SetDataFromTextFile( fSettings.GetDataInput() ); SetPoissonErrors(); SetCovarFromDiagonal(); // Final setup --------------------------------------------------- FinaliseMeasurement(); }; void ANL_CC1ppip_Evt_1Dphi_nu::FillEventVariables(FitEvent *event) { + fXVar = -999.99; + if (event->NumFSParticle(2212) == 0 || event->NumFSParticle(211) == 0 || event->NumFSParticle(13) == 0) return; TLorentzVector Pnu = event->GetNeutrinoIn()->fP; TLorentzVector Pp = event->GetHMFSParticle(2212)->fP; TLorentzVector Ppip = event->GetHMFSParticle(211)->fP; TLorentzVector Pmu = event->GetHMFSParticle(13)->fP; // Get the hadronic mass double hadMass = FitUtils::MpPi(Pp, Ppip); - // Need to boost pion and muon into resonance rest-frame to get phi (e.g. see F. Sanchez arxiv 1511.00501v2) - // - // Get the resonance 4-vector - TLorentzVector Pres = Ppip + Pp; - // Boost the outgoing and incoming particles into the resonance frame - Pnu.Boost(Pres.BoostVector()); - Pmu.Boost(-Pres.BoostVector()); - Ppip.Boost(-Pres.BoostVector()); - - // Get the vectors from the 4-vector - TVector3 PmuVect = Pmu.Vect(); - TVector3 PnuVect = Pnu.Vect(); - TVector3 PresVect = Pres.Vect(); - TVector3 PpipVect = Ppip.Vect(); - - // Define the z-direction - TVector3 zVect = (PnuVect-PmuVect); - zVect *= 1/double(zVect.Mag()); - // Define y direction as being z (resonance direction) x pmu* - TVector3 yVect = zVect.Cross(PmuVect); - // Normalise yVector - yVect *= 1/double(yVect.Mag()); - // define x direction as being y X z - TVector3 xVect = yVect.Cross(zVect); - // Normalise zVector - xVect *= 1/double(xVect.Mag()); - - // Project pion onto z axis - TVector3 PpipVectZ = zVect * PpipVect.Dot(zVect); - // Then subtract this vector off the pion vector - TVector3 PpipVectPlane = PpipVect - PpipVectZ; - - // Then finally construct phi as the angle between pion projection and x axis - double phi = -999; - - // ANL has a M(pi, p) < 1.4 GeV cut imposed - if (hadMass < 1400) { - if (PpipVectPlane.Y() > 0) { - phi = (180./M_PI)*PpipVectPlane.Angle(xVect); - } else if (PpipVectPlane.Y() < 0) { - phi = (180./M_PI)*(2*M_PI-PpipVectPlane.Angle(xVect)); - } else if (PpipVectPlane.Y() == 0) { - double randNo = rand.Rndm(); - if (randNo > 0.5) { - phi = (180./M_PI)*PpipVectPlane.Angle(xVect); - } else { - phi = (180./M_PI)*(2*M_PI-PpipVectPlane.Angle(xVect)); - } - } - } + if (hadMass > 1400) return; + // Get phi Adler + double phi = FitUtils::PhiAdler(Pnu, Pmu, Ppip, Pp); fXVar = phi; - - return; }; bool ANL_CC1ppip_Evt_1Dphi_nu::isSignal(FitEvent *event) { return SignalDef::isCC1pi3Prong(event, 14, 211, 2212, EnuMin, EnuMax); } /* void ANL_CC1ppip_Evt_1Dphi_nu::FillHistograms() { if (makeHadronicMassHist) { hadMassHist->Fill(hadMass); } Measurement1D::FillHistograms(); } void ANL_CC1ppip_Evt_1Dphi_nu::ScaleEvents() { PlotUtils::FluxUnfoldedScaling(fMCHist, GetFluxHistogram()); PlotUtils::FluxUnfoldedScaling(fMCFine, GetFluxHistogram()); fMCHist->Scale(fScaleFactor); fMCFine->Scale(fScaleFactor); return; } */ diff --git a/src/BNL/BNL_CC1ppip_Evt_1DcosthAdler_nu.cxx b/src/BNL/BNL_CC1ppip_Evt_1DcosthAdler_nu.cxx index 0d2f6eb..306cc6a 100644 --- a/src/BNL/BNL_CC1ppip_Evt_1DcosthAdler_nu.cxx +++ b/src/BNL/BNL_CC1ppip_Evt_1DcosthAdler_nu.cxx @@ -1,109 +1,90 @@ // Copyright 2016 L. Pickering, P Stowell, R. Terri, C. Wilkinson, C. Wret /******************************************************************************* * This file is part of NUISANCE. * * NUISANCE is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * NUISANCE is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with NUISANCE. If not, see . *******************************************************************************/ #include "BNL_CC1ppip_Evt_1DcosthAdler_nu.h" //******************************************************************** BNL_CC1ppip_Evt_1DcosthAdler_nu::BNL_CC1ppip_Evt_1DcosthAdler_nu(nuiskey samplekey) { //******************************************************************** // Sample overview --------------------------------------------------- std::string descrip = "BNL_CC1ppip_Evt_1DcosthAdler_nu sample. \n" \ "Target: D2 \n" \ "Flux: \n" \ "Signal: \n"; // Setup common settings fSettings = LoadSampleSettings(samplekey); fSettings.SetDescription(descrip); fSettings.SetXTitle("cos#theta_{Adler}"); fSettings.SetYTitle("Number of events"); fSettings.SetAllowedTypes("EVT/SHAPE/DIAG", "EVT/SHAPE/DIAG"); fSettings.SetEnuRange(0.5, 6.0); fSettings.DefineAllowedTargets("D,H"); // CCQELike plot information fSettings.SetTitle("BNL_CC1ppip_Evt_1DcosthAdler_nu"); fSettings.SetDataInput( FitPar::GetDataBase() + "/BNL/CC1pip_on_p/BNL_CC1ppip_W14_cosThAdler.csv" ); fSettings.DefineAllowedSpecies("numu"); FinaliseSampleSettings(); // Scaling Setup --------------------------------------------------- // ScaleFactor automatically setup for DiffXSec/cm2/Nucleon fScaleFactor =GetEventHistogram()->Integral("width")/(fNEvents+0.)*2./1.; // Plot Setup ------------------------------------------------------- SetDataFromTextFile( fSettings.GetDataInput() ); SetPoissonErrors(); SetCovarFromDiagonal(); // Final setup --------------------------------------------------- FinaliseMeasurement(); }; void BNL_CC1ppip_Evt_1DcosthAdler_nu::FillEventVariables(FitEvent *event) { + fXVar = -999.99; + if (event->NumFSParticle(2212) == 0 || event->NumFSParticle(211) == 0 || event->NumFSParticle(13) == 0) return; TLorentzVector Pnu = event->GetNeutrinoIn()->fP; TLorentzVector Pp = event->GetHMFSParticle(2212)->fP; TLorentzVector Ppip = event->GetHMFSParticle(211)->fP; TLorentzVector Pmu = event->GetHMFSParticle(13)->fP; // Get the hadronic mass double hadMass = FitUtils::MpPi(Pp, Ppip); - // Need to boost pion and muon into resonance rest-frame to get phi (e.g. see F. Sanchez arxiv 1511.00501v2) - // - // Get the resonance 4-vector - TLorentzVector Pres = Ppip + Pp; - Ppip.Boost(-Pres.BoostVector()); - Pmu.Boost(-Pres.BoostVector()); - Pnu.Boost(Pres.BoostVector()); - // Define the vectors - TVector3 PpipVect = Ppip.Vect(); - TVector3 PnuVect = Pnu.Vect(); - TVector3 PmuVect = Pmu.Vect(); - // Define the z-direction; should be same as Pres - TVector3 zVect = (PnuVect-PmuVect); - zVect *= 1/double(zVect.Mag()); - - // Then finally construct phi as the angle between pion projection and x axis - double cosThAdler = -999; - - // BNL has a M(pi, p) < 1.4 GeV cut imposed - if (hadMass < 1400) { - cosThAdler = cos(PpipVect.Angle(zVect)); - } + if (hadMass > 1400) return; + // Get Adler cos theta + double cosThAdler = FitUtils::CosThAdler(Pnu, Pmu, Ppip, Pp); fXVar = cosThAdler; - - return; }; bool BNL_CC1ppip_Evt_1DcosthAdler_nu::isSignal(FitEvent *event) { return SignalDef::isCC1pi3Prong(event, 14, 211, 2212,EnuMin,EnuMax); } diff --git a/src/BNL/BNL_CC1ppip_Evt_1Dphi_nu.cxx b/src/BNL/BNL_CC1ppip_Evt_1Dphi_nu.cxx index 977e295..03b4826 100644 --- a/src/BNL/BNL_CC1ppip_Evt_1Dphi_nu.cxx +++ b/src/BNL/BNL_CC1ppip_Evt_1Dphi_nu.cxx @@ -1,159 +1,113 @@ // Copyright 2016 L. Pickering, P Stowell, R. Terri, C. Wilkinson, C. Wret /******************************************************************************* * This file is part of NUISANCE. * * NUISANCE is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * NUISANCE is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with NUISANCE. If not, see . *******************************************************************************/ #include "BNL_CC1ppip_Evt_1Dphi_nu.h" //******************************************************************** BNL_CC1ppip_Evt_1Dphi_nu::BNL_CC1ppip_Evt_1Dphi_nu(nuiskey samplekey) { //******************************************************************** // Sample overview --------------------------------------------------- std::string descrip = "BNL_CC1ppip_Evt_1Dphi_nu sample. \n" \ "Target: D2 \n" \ "Flux: \n" \ "Signal: \n"; // Setup common settings fSettings = LoadSampleSettings(samplekey); fSettings.SetDescription(descrip); fSettings.SetXTitle("#phi_{Adler}"); fSettings.SetYTitle("Number of events"); fSettings.SetAllowedTypes("EVT/SHAPE/DIAG", "EVT/SHAPE/DIAG"); fSettings.SetEnuRange(0.0, 6.0); fSettings.DefineAllowedTargets("D,H"); // CCQELike plot information fSettings.SetTitle("BNL_CC1ppip_Evt_1Dphi_nu"); fSettings.SetDataInput( FitPar::GetDataBase() + "/BNL/CC1pip_on_p/BNL_CC1ppip_W14_phiAdler.csv" ); fSettings.DefineAllowedSpecies("numu"); FinaliseSampleSettings(); // Scaling Setup --------------------------------------------------- // ScaleFactor automatically setup for DiffXSec/cm2/Nucleon fScaleFactor =GetEventHistogram()->Integral("width")/(fNEvents+0.)*2./1.; // Plot Setup ------------------------------------------------------- SetDataFromTextFile( fSettings.GetDataInput() ); SetPoissonErrors(); SetCovarFromDiagonal(); // Final setup --------------------------------------------------- FinaliseMeasurement(); }; void BNL_CC1ppip_Evt_1Dphi_nu::FillEventVariables(FitEvent *event) { + fXVar = -999.99; + if (event->NumFSParticle(2212) == 0 || event->NumFSParticle(211) == 0 || event->NumFSParticle(13) == 0) return; TLorentzVector Pnu = event->GetNeutrinoIn()->fP; TLorentzVector Pp = event->GetHMFSParticle(2212)->fP; TLorentzVector Ppip = event->GetHMFSParticle(211)->fP; TLorentzVector Pmu = event->GetHMFSParticle(13)->fP; // Get the hadronic mass double hadMass = FitUtils::MpPi(Pp, Ppip); - // Need to boost pion and muon into resonance rest-frame to get phi (e.g. see F. Sanchez arxiv 1511.00501v2) - // - // Get the resonance 4-vector - TLorentzVector Pres = Ppip + Pp; - // Boost the pion 4-vector into the resonance 4-vector rest-frame - Ppip.Boost(Pres.BoostVector()); - Pmu.Boost(-Pres.BoostVector()); - Pp.Boost(-Pres.BoostVector()); - - // Get the vectors from the 4-vector - TVector3 PmuVect = Pmu.Vect(); - TVector3 PnuVect = Pnu.Vect(); - TVector3 PresVect = Pres.Vect(); - TVector3 PpipVect = Ppip.Vect(); - - // Define y direction as being z (resonance direction) x pmu* - TVector3 zVect = (PnuVect-PmuVect); - zVect *= 1/double(zVect.Mag()); - TVector3 yVect = zVect.Cross(PmuVect); - // Normalise yVector - yVect *= 1/double(yVect.Mag()); - // define x direction as being y X z - TVector3 xVect = yVect.Cross(zVect); - // Normalise zVector - xVect *= 1/double(xVect.Mag()); - - // Project pion onto z axis - TVector3 PpipVectZ = zVect * PpipVect.Dot(zVect); - // Then subtract this vector off the pion vector - TVector3 PpipVectPlane = PpipVect - PpipVectZ; - - // Then finally construct phi as the angle between pion projection and x axis - double phi = -999; - - // BNL has a M(pi, p) < 1.4 GeV cut imposed - if (hadMass < 1400) { - if (PpipVectPlane.Y() > 0) { - phi = (180./M_PI)*PpipVectPlane.Angle(xVect); - } else if (PpipVectPlane.Y() < 0) { - phi = (180./M_PI)*(2*M_PI-PpipVectPlane.Angle(xVect)); - } else if (PpipVectPlane.Y() == 0) { - double randNo = rand.Rndm(); - if (randNo > 0.5) { - phi = (180./M_PI)*PpipVectPlane.Angle(xVect); - } else { - phi = (180./M_PI)*(2*M_PI-PpipVectPlane.Angle(xVect)); - } - } - } + if (hadMass > 1400) return; + // Get phi Adler + double phi = FitUtils::PhiAdler(Pnu, Pmu, Ppip, Pp); fXVar = phi; - - return; }; bool BNL_CC1ppip_Evt_1Dphi_nu::isSignal(FitEvent *event) { return SignalDef::isCC1pi3Prong(event, 14, 211, 2212,EnuMin,EnuMax); } /* void BNL_CC1ppip_Evt_1Dphi_nu::FillHistograms() { if (makeHadronicMassHist) { hadMassHist->Fill(hadMass); } Measurement1D::FillHistograms(); } void BNL_CC1ppip_Evt_1Dphi_nu::ScaleEvents() { PlotUtils::FluxUnfoldedScaling(fMCHist, GetFluxHistogram()); PlotUtils::FluxUnfoldedScaling(fMCFine, GetFluxHistogram()); fMCHist->Scale(fScaleFactor); fMCFine->Scale(fScaleFactor); return; } */ diff --git a/src/FCN/SampleList.cxx b/src/FCN/SampleList.cxx index 57475fc..7de82f8 100644 --- a/src/FCN/SampleList.cxx +++ b/src/FCN/SampleList.cxx @@ -1,1028 +1,1046 @@ #include "SampleList.h" #ifndef __NO_ANL__ #include "ANL_CCQE_Evt_1DQ2_nu.h" #include "ANL_CCQE_XSec_1DEnu_nu.h" // ANL CC1ppip #include "ANL_CC1ppip_Evt_1DQ2_nu.h" #include "ANL_CC1ppip_Evt_1DcosmuStar_nu.h" #include "ANL_CC1ppip_Evt_1DcosmuStar_nu.h" #include "ANL_CC1ppip_Evt_1DcosthAdler_nu.h" #include "ANL_CC1ppip_Evt_1Dphi_nu.h" #include "ANL_CC1ppip_Evt_1Dppi_nu.h" #include "ANL_CC1ppip_Evt_1Dthpr_nu.h" #include "ANL_CC1ppip_XSec_1DEnu_nu.h" #include "ANL_CC1ppip_XSec_1DQ2_nu.h" // ANL CC1npip #include "ANL_CC1npip_Evt_1DQ2_nu.h" #include "ANL_CC1npip_Evt_1DcosmuStar_nu.h" #include "ANL_CC1npip_Evt_1Dppi_nu.h" #include "ANL_CC1npip_XSec_1DEnu_nu.h" // ANL CC1pi0 #include "ANL_CC1pi0_Evt_1DQ2_nu.h" #include "ANL_CC1pi0_Evt_1DcosmuStar_nu.h" #include "ANL_CC1pi0_XSec_1DEnu_nu.h" // ANL NC1npip (mm, exotic!) #include "ANL_NC1npip_Evt_1Dppi_nu.h" // ANL NC1ppim (mm, exotic!) #include "ANL_NC1ppim_Evt_1DcosmuStar_nu.h" #include "ANL_NC1ppim_XSec_1DEnu_nu.h" // ANL CC2pi 1pim1pip (mm, even more exotic!) #include "ANL_CC2pi_1pim1pip_Evt_1Dpmu_nu.h" #include "ANL_CC2pi_1pim1pip_Evt_1Dppim_nu.h" #include "ANL_CC2pi_1pim1pip_Evt_1Dppip_nu.h" #include "ANL_CC2pi_1pim1pip_Evt_1Dpprot_nu.h" #include "ANL_CC2pi_1pim1pip_XSec_1DEnu_nu.h" // ANL CC2pi 1pip1pip (mm, even more exotic!) #include "ANL_CC2pi_1pip1pip_Evt_1Dpmu_nu.h" #include "ANL_CC2pi_1pip1pip_Evt_1Dpneut_nu.h" #include "ANL_CC2pi_1pip1pip_Evt_1DppipHigh_nu.h" #include "ANL_CC2pi_1pip1pip_Evt_1DppipLow_nu.h" #include "ANL_CC2pi_1pip1pip_XSec_1DEnu_nu.h" // ANL CC2pi 1pip1pi0 (mm, even more exotic!) #include "ANL_CC2pi_1pip1pi0_Evt_1Dpmu_nu.h" #include "ANL_CC2pi_1pip1pi0_Evt_1Dppi0_nu.h" #include "ANL_CC2pi_1pip1pi0_Evt_1Dppip_nu.h" #include "ANL_CC2pi_1pip1pi0_Evt_1Dpprot_nu.h" #include "ANL_CC2pi_1pip1pi0_XSec_1DEnu_nu.h" #endif #ifndef __NO_ArgoNeuT__ // ArgoNeuT CC-inclusive #include "ArgoNeuT_CCInc_XSec_1Dpmu_antinu.h" #include "ArgoNeuT_CCInc_XSec_1Dpmu_nu.h" #include "ArgoNeuT_CCInc_XSec_1Dthetamu_antinu.h" #include "ArgoNeuT_CCInc_XSec_1Dthetamu_nu.h" #endif #ifndef __NO_BNL__ // BNL CCQE #include "BNL_CCQE_Evt_1DQ2_nu.h" #include "BNL_CCQE_XSec_1DEnu_nu.h" // BNL CC1ppip #include "BNL_CC1ppip_Evt_1DQ2_nu.h" #include "BNL_CC1ppip_Evt_1DQ2_nu.h" #include "BNL_CC1ppip_Evt_1DcosthAdler_nu.h" #include "BNL_CC1ppip_Evt_1Dphi_nu.h" #include "BNL_CC1ppip_XSec_1DEnu_nu.h" // BNL CC1npip #include "BNL_CC1npip_Evt_1DQ2_nu.h" #include "BNL_CC1npip_XSec_1DEnu_nu.h" // BNL CC1pi0 #include "BNL_CC1pi0_Evt_1DQ2_nu.h" #include "BNL_CC1pi0_XSec_1DEnu_nu.h" #endif #ifndef __NO_FNAL__ // FNAL CCQE #include "FNAL_CCQE_Evt_1DQ2_nu.h" // FNAL CC1ppip #include "FNAL_CC1ppip_Evt_1DQ2_nu.h" #include "FNAL_CC1ppip_XSec_1DEnu_nu.h" #include "FNAL_CC1ppip_XSec_1DQ2_nu.h" // FNAL CC1ppim #include "FNAL_CC1ppim_XSec_1DEnu_antinu.h" #endif #ifndef __NO_BEBC__ // BEBC CCQE #include "BEBC_CCQE_XSec_1DQ2_nu.h" // BEBC CC1ppip #include "BEBC_CC1ppip_XSec_1DEnu_nu.h" #include "BEBC_CC1ppip_XSec_1DQ2_nu.h" // BEBC CC1npip #include "BEBC_CC1npip_XSec_1DEnu_nu.h" #include "BEBC_CC1npip_XSec_1DQ2_nu.h" // BEBC CC1pi0 #include "BEBC_CC1pi0_XSec_1DEnu_nu.h" #include "BEBC_CC1pi0_XSec_1DQ2_nu.h" // BEBC CC1npim #include "BEBC_CC1npim_XSec_1DEnu_antinu.h" #include "BEBC_CC1npim_XSec_1DQ2_antinu.h" // BEBC CC1ppim #include "BEBC_CC1ppim_XSec_1DEnu_antinu.h" #include "BEBC_CC1ppim_XSec_1DQ2_antinu.h" #endif #ifndef __NO_GGM__ // GGM CC1ppip #include "GGM_CC1ppip_Evt_1DQ2_nu.h" #include "GGM_CC1ppip_XSec_1DEnu_nu.h" #endif #ifndef __NO_MiniBooNE__ // MiniBooNE CCQE #include "MiniBooNE_CCQE_XSec_1DQ2_antinu.h" #include "MiniBooNE_CCQE_XSec_1DQ2_nu.h" #include "MiniBooNE_CCQE_XSec_2DTcos_antinu.h" #include "MiniBooNE_CCQE_XSec_2DTcos_antinu.h" #include "MiniBooNE_CCQE_XSec_2DTcos_nu.h" // MiniBooNE CC1pi+ 1D #include "MiniBooNE_CC1pip_XSec_1DEnu_nu.h" #include "MiniBooNE_CC1pip_XSec_1DQ2_nu.h" #include "MiniBooNE_CC1pip_XSec_1DTpi_nu.h" #include "MiniBooNE_CC1pip_XSec_1DTu_nu.h" // MiniBooNE CC1pi+ 2D #include "MiniBooNE_CC1pip_XSec_2DQ2Enu_nu.h" #include "MiniBooNE_CC1pip_XSec_2DTpiCospi_nu.h" #include "MiniBooNE_CC1pip_XSec_2DTpiEnu_nu.h" #include "MiniBooNE_CC1pip_XSec_2DTuCosmu_nu.h" #include "MiniBooNE_CC1pip_XSec_2DTuEnu_nu.h" // MiniBooNE CC1pi0 #include "MiniBooNE_CC1pi0_XSec_1DEnu_nu.h" #include "MiniBooNE_CC1pi0_XSec_1DQ2_nu.h" #include "MiniBooNE_CC1pi0_XSec_1DTu_nu.h" #include "MiniBooNE_CC1pi0_XSec_1Dcosmu_nu.h" #include "MiniBooNE_CC1pi0_XSec_1Dcospi0_nu.h" #include "MiniBooNE_CC1pi0_XSec_1Dppi0_nu.h" #include "MiniBooNE_NC1pi0_XSec_1Dcospi0_antinu.h" #include "MiniBooNE_NC1pi0_XSec_1Dcospi0_nu.h" #include "MiniBooNE_NC1pi0_XSec_1Dppi0_antinu.h" #include "MiniBooNE_NC1pi0_XSec_1Dppi0_nu.h" // MiniBooNE NC1pi0 //#include "MiniBooNE_NCpi0_XSec_1Dppi0_nu.h" // MiniBooNE NCEL #include "MiniBooNE_NCEL_XSec_Treco_nu.h" #endif #ifndef __NO_MINERvA__ // MINERvA CCQE #include "MINERvA_CCQE_XSec_1DQ2_antinu.h" #include "MINERvA_CCQE_XSec_1DQ2_joint.h" #include "MINERvA_CCQE_XSec_1DQ2_nu.h" // MINERvA CC0pi #include "MINERvA_CC0pi_XSec_1DEe_nue.h" #include "MINERvA_CC0pi_XSec_1DQ2_nu_proton.h" #include "MINERvA_CC0pi_XSec_1DQ2_nue.h" #include "MINERvA_CC0pi_XSec_1DThetae_nue.h" // MINERvA CC1pi+ #include "MINERvA_CC1pip_XSec_1DTpi_20deg_nu.h" #include "MINERvA_CC1pip_XSec_1DTpi_nu.h" #include "MINERvA_CC1pip_XSec_1Dth_20deg_nu.h" #include "MINERvA_CC1pip_XSec_1Dth_nu.h" +// 2017 data update +#include "MINERvA_CC1pip_XSec_1D_2017Update.h" // MINERvA CCNpi+ #include "MINERvA_CCNpip_XSec_1DEnu_nu.h" #include "MINERvA_CCNpip_XSec_1DQ2_nu.h" #include "MINERvA_CCNpip_XSec_1DTpi_nu.h" #include "MINERvA_CCNpip_XSec_1Dpmu_nu.h" #include "MINERvA_CCNpip_XSec_1Dth_nu.h" #include "MINERvA_CCNpip_XSec_1Dthmu_nu.h" // MINERvA CC1pi0 #include "MINERvA_CC1pi0_XSec_1DEnu_antinu.h" #include "MINERvA_CC1pi0_XSec_1DQ2_antinu.h" #include "MINERvA_CC1pi0_XSec_1DTpi0_antinu.h" #include "MINERvA_CC1pi0_XSec_1Dpmu_antinu.h" #include "MINERvA_CC1pi0_XSec_1Dppi0_antinu.h" #include "MINERvA_CC1pi0_XSec_1Dth_antinu.h" #include "MINERvA_CC1pi0_XSec_1Dthmu_antinu.h" +// MINERvA CC1pi0 neutrino +#include "MINERvA_CC1pi0_XSec_1D_nu.h" + // MINERvA CCINC #include "MINERvA_CCinc_XSec_1DEnu_ratio.h" #include "MINERvA_CCinc_XSec_1Dx_ratio.h" #include "MINERvA_CCinc_XSec_2DEavq3_nu.h" // MINERvA CCDIS #include "MINERvA_CCDIS_XSec_1DEnu_ratio.h" #include "MINERvA_CCDIS_XSec_1Dx_ratio.h" // MINERvA CCCOH pion #include "MINERvA_CCCOHPI_XSec_1DEnu_antinu.h" #include "MINERvA_CCCOHPI_XSec_1DEnu_nu.h" #include "MINERvA_CCCOHPI_XSec_1DEpi_antinu.h" #include "MINERvA_CCCOHPI_XSec_1DQ2_antinu.h" #include "MINERvA_CCCOHPI_XSec_1DEpi_nu.h" #include "MINERvA_CCCOHPI_XSec_1Dth_antinu.h" #include "MINERvA_CCCOHPI_XSec_1Dth_nu.h" #include "MINERvA_CCCOHPI_XSec_1DQ2_nu.h" #include "MINERvA_CC0pi_XSec_1DQ2_TgtRatio_nu.h" #include "MINERvA_CC0pi_XSec_1DQ2_Tgt_nu.h" -#include "MINERvA_CC1pip_XSec_1D_2017Update.h" #include "MINERvA_CC0pi_XSec_2Dptpx_nu.h" #include "MINERvA_CC0pi_XSec_2Dptpx_antinu.h" #endif #ifndef __NO_T2K__ // T2K CC0pi #include "T2K_CC0pi_XSec_2DPcos_nu.h" // T2K CC1pi+ on CH #include "T2K_CC1pip_CH_XSec_1DQ2_nu.h" #include "T2K_CC1pip_CH_XSec_1DWrec_nu.h" #include "T2K_CC1pip_CH_XSec_1Dpmu_nu.h" #include "T2K_CC1pip_CH_XSec_1Dppi_nu.h" #include "T2K_CC1pip_CH_XSec_1Dq3_nu.h" #include "T2K_CC1pip_CH_XSec_1Dthmupi_nu.h" #include "T2K_CC1pip_CH_XSec_1Dthpi_nu.h" #include "T2K_CC1pip_CH_XSec_1Dthq3pi_nu.h" // T2K CC1pi+ on H2O #include "T2K_CC1pip_H2O_XSec_1DEnuDelta_nu.h" #include "T2K_CC1pip_H2O_XSec_1DEnuMB_nu.h" #include "T2K_CC1pip_H2O_XSec_1Dcosmu_nu.h" #include "T2K_CC1pip_H2O_XSec_1Dcosmupi_nu.h" #include "T2K_CC1pip_H2O_XSec_1Dcospi_nu.h" #include "T2K_CC1pip_H2O_XSec_1Dpmu_nu.h" #include "T2K_CC1pip_H2O_XSec_1Dppi_nu.h" // T2K STV CC0pi #include "T2K_CC0pinp_STV_XSec_1Ddpt_nu.h" #include "T2K_CC0pi_XSec_2DPcos_nu_nonuniform.h" #endif #ifndef __NO_SciBooNE__ // SciBooNE COH studies #include "SciBooNE_CCCOH_1TRK_1DQ2_nu.h" #include "SciBooNE_CCCOH_MuPiNoVA_1DQ2_nu.h" #include "SciBooNE_CCCOH_MuPiNoVA_1Dthetapi_nu.h" #include "SciBooNE_CCCOH_MuPiNoVA_1Dthetapr_nu.h" #include "SciBooNE_CCCOH_MuPiVA_1DQ2_nu.h" #include "SciBooNE_CCCOH_MuPr_1DQ2_nu.h" #include "SciBooNE_CCCOH_STOPFINAL_1DQ2_nu.h" #include "SciBooNE_CCCOH_STOP_NTrks_nu.h" #endif #ifndef __NO_K2K__ // K2K NC1pi0 #include "K2K_NC1pi0_Evt_1Dppi0_nu.h" #endif // MC Studies #include "ExpMultDist_CCQE_XSec_1DVar_FakeStudy.h" #include "ExpMultDist_CCQE_XSec_2DVar_FakeStudy.h" #include "MCStudy_CCQEHistograms.h" #include "GenericFlux_Tester.h" #include "GenericFlux_Vectors.h" #include "ElectronFlux_FlatTree.h" #include "ElectronScattering_DurhamData.h" #include "MCStudy_KaonPreSelection.h" #include "MCStudy_MuonValidation.h" #include "OfficialNIWGPlots.h" #include "T2K2017_FakeData.h" #include "Simple_Osc.h" #include "Smear_SVDUnfold_Propagation_Osc.h" #include "FitWeight.h" #include "NuisConfig.h" #include "NuisKey.h" //! Functions to make it easier for samples to be created and handled. namespace SampleUtils { //! Create a given sample given its name, file, type, fakdata(fkdt) file and the //! current rw engine and push it back into the list fChain. MeasurementBase* CreateSample(std::string name, std::string file, std::string type, std::string fkdt, FitWeight* rw) { nuiskey samplekey = Config::CreateKey("sample"); samplekey.AddS("name", name); samplekey.AddS("input", file); samplekey.AddS("type", type); return CreateSample(samplekey); } MeasurementBase* CreateSample(nuiskey samplekey) { FitWeight* rw = FitBase::GetRW(); std::string name = samplekey.GetS("name"); std::string file = samplekey.GetS("input"); std::string type = samplekey.GetS("type"); std::string fkdt = ""; /* ANL CCQE Samples */ #ifndef __NO_ANL__ if (!name.compare("ANL_CCQE_XSec_1DEnu_nu") || !name.compare("ANL_CCQE_XSec_1DEnu_nu_PRD26") || !name.compare("ANL_CCQE_XSec_1DEnu_nu_PRL31") || !name.compare("ANL_CCQE_XSec_1DEnu_nu_PRD16")) { return (new ANL_CCQE_XSec_1DEnu_nu(samplekey)); } else if (!name.compare("ANL_CCQE_Evt_1DQ2_nu") || !name.compare("ANL_CCQE_Evt_1DQ2_nu_PRL31") || !name.compare("ANL_CCQE_Evt_1DQ2_nu_PRD26") || !name.compare("ANL_CCQE_Evt_1DQ2_nu_PRD16")) { return (new ANL_CCQE_Evt_1DQ2_nu(samplekey)); /* ANL CC1ppip samples */ } else if (!name.compare("ANL_CC1ppip_XSec_1DEnu_nu") || !name.compare("ANL_CC1ppip_XSec_1DEnu_nu_W14Cut") || !name.compare("ANL_CC1ppip_XSec_1DEnu_nu_Uncorr") || !name.compare("ANL_CC1ppip_XSec_1DEnu_nu_W14Cut_Uncorr") || !name.compare("ANL_CC1ppip_XSec_1DEnu_nu_W16Cut_Uncorr")) { return (new ANL_CC1ppip_XSec_1DEnu_nu(samplekey)); } else if (!name.compare("ANL_CC1ppip_XSec_1DQ2_nu")) { return (new ANL_CC1ppip_XSec_1DQ2_nu(samplekey)); } else if (!name.compare("ANL_CC1ppip_Evt_1DQ2_nu") || !name.compare("ANL_CC1ppip_Evt_1DQ2_nu_W14Cut")) { return (new ANL_CC1ppip_Evt_1DQ2_nu(samplekey)); } else if (!name.compare("ANL_CC1ppip_Evt_1Dppi_nu")) { return (new ANL_CC1ppip_Evt_1Dppi_nu(samplekey)); } else if (!name.compare("ANL_CC1ppip_Evt_1Dthpr_nu")) { return (new ANL_CC1ppip_Evt_1Dthpr_nu(samplekey)); } else if (!name.compare("ANL_CC1ppip_Evt_1DcosmuStar_nu")) { return (new ANL_CC1ppip_Evt_1DcosmuStar_nu(samplekey)); } else if (!name.compare("ANL_CC1ppip_Evt_1DcosthAdler_nu")) { return (new ANL_CC1ppip_Evt_1DcosthAdler_nu(samplekey)); } else if (!name.compare("ANL_CC1ppip_Evt_1Dphi_nu")) { return (new ANL_CC1ppip_Evt_1Dphi_nu(samplekey)); /* ANL CC1npip sample */ } else if (!name.compare("ANL_CC1npip_XSec_1DEnu_nu") || !name.compare("ANL_CC1npip_XSec_1DEnu_nu_W14Cut") || !name.compare("ANL_CC1npip_XSec_1DEnu_nu_Uncorr") || !name.compare("ANL_CC1npip_XSec_1DEnu_nu_W14Cut_Uncorr") || !name.compare("ANL_CC1npip_XSec_1DEnu_nu_W16Cut_Uncorr")) { return (new ANL_CC1npip_XSec_1DEnu_nu(samplekey)); } else if (!name.compare("ANL_CC1npip_Evt_1DQ2_nu") || !name.compare("ANL_CC1npip_Evt_1DQ2_nu_W14Cut")) { return (new ANL_CC1npip_Evt_1DQ2_nu(samplekey)); } else if (!name.compare("ANL_CC1npip_Evt_1Dppi_nu")) { return (new ANL_CC1npip_Evt_1Dppi_nu(samplekey)); } else if (!name.compare("ANL_CC1npip_Evt_1DcosmuStar_nu")) { return (new ANL_CC1npip_Evt_1DcosmuStar_nu(samplekey)); /* ANL CC1pi0 sample */ } else if (!name.compare("ANL_CC1pi0_XSec_1DEnu_nu") || !name.compare("ANL_CC1pi0_XSec_1DEnu_nu_W14Cut") || !name.compare("ANL_CC1pi0_XSec_1DEnu_nu_Uncorr") || !name.compare("ANL_CC1pi0_XSec_1DEnu_nu_W14Cut_Uncorr") || !name.compare("ANL_CC1pi0_XSec_1DEnu_nu_W16Cut_Uncorr")) { return (new ANL_CC1pi0_XSec_1DEnu_nu(samplekey)); } else if (!name.compare("ANL_CC1pi0_Evt_1DQ2_nu") || !name.compare("ANL_CC1pi0_Evt_1DQ2_nu_W14Cut")) { return (new ANL_CC1pi0_Evt_1DQ2_nu(samplekey)); } else if (!name.compare("ANL_CC1pi0_Evt_1DcosmuStar_nu")) { return (new ANL_CC1pi0_Evt_1DcosmuStar_nu(samplekey)); /* ANL NC1npip sample */ } else if (!name.compare("ANL_NC1npip_Evt_1Dppi_nu")) { return (new ANL_NC1npip_Evt_1Dppi_nu(samplekey)); /* ANL NC1ppim sample */ } else if (!name.compare("ANL_NC1ppim_XSec_1DEnu_nu")) { return (new ANL_NC1ppim_XSec_1DEnu_nu(samplekey)); } else if (!name.compare("ANL_NC1ppim_Evt_1DcosmuStar_nu")) { return (new ANL_NC1ppim_Evt_1DcosmuStar_nu(samplekey)); /* ANL CC2pi sample */ } else if (!name.compare("ANL_CC2pi_1pim1pip_XSec_1DEnu_nu")) { return (new ANL_CC2pi_1pim1pip_XSec_1DEnu_nu(samplekey)); } else if (!name.compare("ANL_CC2pi_1pim1pip_Evt_1Dpmu_nu")) { return (new ANL_CC2pi_1pim1pip_Evt_1Dpmu_nu(samplekey)); } else if (!name.compare("ANL_CC2pi_1pim1pip_Evt_1Dppip_nu")) { return (new ANL_CC2pi_1pim1pip_Evt_1Dppip_nu(samplekey)); } else if (!name.compare("ANL_CC2pi_1pim1pip_Evt_1Dppim_nu")) { return (new ANL_CC2pi_1pim1pip_Evt_1Dppim_nu(samplekey)); } else if (!name.compare("ANL_CC2pi_1pim1pip_Evt_1Dpprot_nu")) { return (new ANL_CC2pi_1pim1pip_Evt_1Dpprot_nu(samplekey)); } else if (!name.compare("ANL_CC2pi_1pip1pip_XSec_1DEnu_nu")) { return (new ANL_CC2pi_1pip1pip_XSec_1DEnu_nu(samplekey)); } else if (!name.compare("ANL_CC2pi_1pip1pip_Evt_1Dpmu_nu")) { return (new ANL_CC2pi_1pip1pip_Evt_1Dpmu_nu(samplekey)); } else if (!name.compare("ANL_CC2pi_1pip1pip_Evt_1Dpneut_nu")) { return (new ANL_CC2pi_1pip1pip_Evt_1Dpneut_nu(samplekey)); } else if (!name.compare("ANL_CC2pi_1pip1pip_Evt_1DppipHigh_nu")) { return (new ANL_CC2pi_1pip1pip_Evt_1DppipHigh_nu(samplekey)); } else if (!name.compare("ANL_CC2pi_1pip1pip_Evt_1DppipLow_nu")) { return (new ANL_CC2pi_1pip1pip_Evt_1DppipLow_nu(samplekey)); } else if (!name.compare("ANL_CC2pi_1pip1pi0_XSec_1DEnu_nu")) { return (new ANL_CC2pi_1pip1pi0_XSec_1DEnu_nu(samplekey)); } else if (!name.compare("ANL_CC2pi_1pip1pi0_Evt_1Dpmu_nu")) { return (new ANL_CC2pi_1pip1pi0_Evt_1Dpmu_nu(samplekey)); } else if (!name.compare("ANL_CC2pi_1pip1pi0_Evt_1Dppip_nu")) { return (new ANL_CC2pi_1pip1pi0_Evt_1Dppip_nu(samplekey)); } else if (!name.compare("ANL_CC2pi_1pip1pi0_Evt_1Dppi0_nu")) { return (new ANL_CC2pi_1pip1pi0_Evt_1Dppi0_nu(samplekey)); } else if (!name.compare("ANL_CC2pi_1pip1pi0_Evt_1Dpprot_nu")) { return (new ANL_CC2pi_1pip1pi0_Evt_1Dpprot_nu(samplekey)); /* ArgoNeut Samples */ } else #endif #ifndef __NO_ArgoNeuT__ if (!name.compare("ArgoNeuT_CCInc_XSec_1Dpmu_antinu")) { return (new ArgoNeuT_CCInc_XSec_1Dpmu_antinu(samplekey)); } else if (!name.compare("ArgoNeuT_CCInc_XSec_1Dpmu_nu")) { return (new ArgoNeuT_CCInc_XSec_1Dpmu_nu(samplekey)); } else if (!name.compare("ArgoNeuT_CCInc_XSec_1Dthetamu_antinu")) { return (new ArgoNeuT_CCInc_XSec_1Dthetamu_antinu(samplekey)); } else if (!name.compare("ArgoNeuT_CCInc_XSec_1Dthetamu_nu")) { return (new ArgoNeuT_CCInc_XSec_1Dthetamu_nu(samplekey)); /* BNL Samples */ } else #endif #ifndef __NO_BNL__ if (!name.compare("BNL_CCQE_XSec_1DEnu_nu")) { return (new BNL_CCQE_XSec_1DEnu_nu(samplekey)); } else if (!name.compare("BNL_CCQE_Evt_1DQ2_nu")) { return (new BNL_CCQE_Evt_1DQ2_nu(samplekey)); /* BNL CC1ppip samples */ } else if (!name.compare("BNL_CC1ppip_XSec_1DEnu_nu") || !name.compare("BNL_CC1ppip_XSec_1DEnu_nu_Uncorr") || !name.compare("BNL_CC1ppip_XSec_1DEnu_nu_W14Cut") || !name.compare("BNL_CC1ppip_XSec_1DEnu_nu_W14Cut_Uncorr")) { return (new BNL_CC1ppip_XSec_1DEnu_nu(samplekey)); } else if (!name.compare("BNL_CC1ppip_Evt_1DQ2_nu") || !name.compare("BNL_CC1ppip_Evt_1DQ2_nu_W14Cut")) { return (new BNL_CC1ppip_Evt_1DQ2_nu(samplekey)); } else if (!name.compare("BNL_CC1ppip_Evt_1DcosthAdler_nu")) { return (new BNL_CC1ppip_Evt_1DcosthAdler_nu(samplekey)); } else if (!name.compare("BNL_CC1ppip_Evt_1Dphi_nu")) { return (new BNL_CC1ppip_Evt_1Dphi_nu(samplekey)); /* BNL CC1npip samples */ } else if (!name.compare("BNL_CC1npip_XSec_1DEnu_nu") || !name.compare("BNL_CC1npip_XSec_1DEnu_nu_Uncorr")) { return (new BNL_CC1npip_XSec_1DEnu_nu(samplekey)); } else if (!name.compare("BNL_CC1npip_Evt_1DQ2_nu")) { return (new BNL_CC1npip_Evt_1DQ2_nu(samplekey)); /* BNL CC1pi0 samples */ } else if (!name.compare("BNL_CC1pi0_XSec_1DEnu_nu")) { return (new BNL_CC1pi0_XSec_1DEnu_nu(samplekey)); } else if (!name.compare("BNL_CC1pi0_Evt_1DQ2_nu")) { return (new BNL_CC1pi0_Evt_1DQ2_nu(samplekey)); /* FNAL Samples */ } else #endif #ifndef __NO_FNAL__ if (!name.compare("FNAL_CCQE_Evt_1DQ2_nu")) { return (new FNAL_CCQE_Evt_1DQ2_nu(samplekey)); /* FNAL CC1ppip */ } else if (!name.compare("FNAL_CC1ppip_XSec_1DEnu_nu")) { return (new FNAL_CC1ppip_XSec_1DEnu_nu(samplekey)); } else if (!name.compare("FNAL_CC1ppip_XSec_1DQ2_nu")) { return (new FNAL_CC1ppip_XSec_1DQ2_nu(samplekey)); } else if (!name.compare("FNAL_CC1ppip_Evt_1DQ2_nu")) { return (new FNAL_CC1ppip_Evt_1DQ2_nu(samplekey)); /* FNAL CC1ppim */ } else if (!name.compare("FNAL_CC1ppim_XSec_1DEnu_antinu")) { return (new FNAL_CC1ppim_XSec_1DEnu_antinu(samplekey)); /* BEBC Samples */ } else #endif #ifndef __NO_BEBC__ if (!name.compare("BEBC_CCQE_XSec_1DQ2_nu")) { return (new BEBC_CCQE_XSec_1DQ2_nu(samplekey)); /* BEBC CC1ppip samples */ } else if (!name.compare("BEBC_CC1ppip_XSec_1DEnu_nu")) { return (new BEBC_CC1ppip_XSec_1DEnu_nu(samplekey)); } else if (!name.compare("BEBC_CC1ppip_XSec_1DQ2_nu")) { return (new BEBC_CC1ppip_XSec_1DQ2_nu(samplekey)); /* BEBC CC1npip samples */ } else if (!name.compare("BEBC_CC1npip_XSec_1DEnu_nu")) { return (new BEBC_CC1npip_XSec_1DEnu_nu(samplekey)); } else if (!name.compare("BEBC_CC1npip_XSec_1DQ2_nu")) { return (new BEBC_CC1npip_XSec_1DQ2_nu(samplekey)); /* BEBC CC1pi0 samples */ } else if (!name.compare("BEBC_CC1pi0_XSec_1DEnu_nu")) { return (new BEBC_CC1pi0_XSec_1DEnu_nu(samplekey)); } else if (!name.compare("BEBC_CC1pi0_XSec_1DQ2_nu")) { return (new BEBC_CC1pi0_XSec_1DQ2_nu(samplekey)); /* BEBC CC1npim samples */ } else if (!name.compare("BEBC_CC1npim_XSec_1DEnu_antinu")) { return (new BEBC_CC1npim_XSec_1DEnu_antinu(samplekey)); } else if (!name.compare("BEBC_CC1npim_XSec_1DQ2_antinu")) { return (new BEBC_CC1npim_XSec_1DQ2_antinu(samplekey)); /* BEBC CC1ppim samples */ } else if (!name.compare("BEBC_CC1ppim_XSec_1DEnu_antinu")) { return (new BEBC_CC1ppim_XSec_1DEnu_antinu(samplekey)); } else if (!name.compare("BEBC_CC1ppim_XSec_1DQ2_antinu")) { return (new BEBC_CC1ppim_XSec_1DQ2_antinu(samplekey)); /* GGM CC1ppip samples */ } else #endif #ifndef __NO_GGM__ if (!name.compare("GGM_CC1ppip_XSec_1DEnu_nu")) { return (new GGM_CC1ppip_XSec_1DEnu_nu(samplekey)); } else if (!name.compare("GGM_CC1ppip_Evt_1DQ2_nu")) { return (new GGM_CC1ppip_Evt_1DQ2_nu(samplekey)); /* MiniBooNE Samples */ /* CCQE */ } else #endif #ifndef __NO_MiniBooNE__ if (!name.compare("MiniBooNE_CCQE_XSec_1DQ2_nu") || !name.compare("MiniBooNE_CCQELike_XSec_1DQ2_nu")) { return (new MiniBooNE_CCQE_XSec_1DQ2_nu(samplekey)); } else if (!name.compare("MiniBooNE_CCQE_XSec_1DQ2_antinu") || !name.compare("MiniBooNE_CCQELike_XSec_1DQ2_antinu") || !name.compare("MiniBooNE_CCQE_CTarg_XSec_1DQ2_antinu")) { return (new MiniBooNE_CCQE_XSec_1DQ2_antinu(samplekey)); } else if (!name.compare("MiniBooNE_CCQE_XSec_2DTcos_nu") || !name.compare("MiniBooNE_CCQELike_XSec_2DTcos_nu")) { return (new MiniBooNE_CCQE_XSec_2DTcos_nu(samplekey)); } else if (!name.compare("MiniBooNE_CCQE_XSec_2DTcos_antinu") || !name.compare("MiniBooNE_CCQELike_XSec_2DTcos_antinu")) { return (new MiniBooNE_CCQE_XSec_2DTcos_antinu(samplekey)); /* MiniBooNE CC1pi+ */ // 1D } else if (!name.compare("MiniBooNE_CC1pip_XSec_1DEnu_nu")) { return (new MiniBooNE_CC1pip_XSec_1DEnu_nu(samplekey)); } else if (!name.compare("MiniBooNE_CC1pip_XSec_1DQ2_nu")) { return (new MiniBooNE_CC1pip_XSec_1DQ2_nu(samplekey)); } else if (!name.compare("MiniBooNE_CC1pip_XSec_1DTpi_nu")) { return (new MiniBooNE_CC1pip_XSec_1DTpi_nu(samplekey)); } else if (!name.compare("MiniBooNE_CC1pip_XSec_1DTu_nu")) { return (new MiniBooNE_CC1pip_XSec_1DTu_nu(samplekey)); // 2D } else if (!name.compare("MiniBooNE_CC1pip_XSec_2DQ2Enu_nu")) { return (new MiniBooNE_CC1pip_XSec_2DQ2Enu_nu(samplekey)); } else if (!name.compare("MiniBooNE_CC1pip_XSec_2DTpiCospi_nu")) { return (new MiniBooNE_CC1pip_XSec_2DTpiCospi_nu(samplekey)); } else if (!name.compare("MiniBooNE_CC1pip_XSec_2DTpiEnu_nu")) { return (new MiniBooNE_CC1pip_XSec_2DTpiEnu_nu(samplekey)); } else if (!name.compare("MiniBooNE_CC1pip_XSec_2DTuCosmu_nu")) { return (new MiniBooNE_CC1pip_XSec_2DTuCosmu_nu(samplekey)); } else if (!name.compare("MiniBooNE_CC1pip_XSec_2DTuEnu_nu")) { return (new MiniBooNE_CC1pip_XSec_2DTuEnu_nu(samplekey)); /* MiniBooNE CC1pi0 */ } else if (!name.compare("MiniBooNE_CC1pi0_XSec_1DEnu_nu")) { return (new MiniBooNE_CC1pi0_XSec_1DEnu_nu(samplekey)); } else if (!name.compare("MiniBooNE_CC1pi0_XSec_1DQ2_nu")) { return (new MiniBooNE_CC1pi0_XSec_1DQ2_nu(samplekey)); } else if (!name.compare("MiniBooNE_CC1pi0_XSec_1DTu_nu")) { return (new MiniBooNE_CC1pi0_XSec_1DTu_nu(samplekey)); } else if (!name.compare("MiniBooNE_CC1pi0_XSec_1Dcosmu_nu")) { return (new MiniBooNE_CC1pi0_XSec_1Dcosmu_nu(samplekey)); } else if (!name.compare("MiniBooNE_CC1pi0_XSec_1Dcospi0_nu")) { return (new MiniBooNE_CC1pi0_XSec_1Dcospi0_nu(samplekey)); } else if (!name.compare("MiniBooNE_CC1pi0_XSec_1Dppi0_nu")) { return (new MiniBooNE_CC1pi0_XSec_1Dppi0_nu(samplekey)); } else if (!name.compare("MiniBooNE_NC1pi0_XSec_1Dcospi0_antinu") || !name.compare("MiniBooNE_NC1pi0_XSec_1Dcospi0_rhc")) { return (new MiniBooNE_NC1pi0_XSec_1Dcospi0_antinu(samplekey)); } else if (!name.compare("MiniBooNE_NC1pi0_XSec_1Dcospi0_nu") || !name.compare("MiniBooNE_NC1pi0_XSec_1Dcospi0_fhc")) { return (new MiniBooNE_NC1pi0_XSec_1Dcospi0_nu(samplekey)); } else if (!name.compare("MiniBooNE_NC1pi0_XSec_1Dppi0_antinu") || !name.compare("MiniBooNE_NC1pi0_XSec_1Dppi0_rhc")) { return (new MiniBooNE_NC1pi0_XSec_1Dppi0_antinu(samplekey)); } else if (!name.compare("MiniBooNE_NC1pi0_XSec_1Dppi0_nu") || !name.compare("MiniBooNE_NC1pi0_XSec_1Dppi0_fhc")) { return (new MiniBooNE_NC1pi0_XSec_1Dppi0_nu(samplekey)); /* MiniBooNE NCEL */ } else if (!name.compare("MiniBooNE_NCEL_XSec_Treco_nu")) { return (new MiniBooNE_NCEL_XSec_Treco_nu(samplekey)); /* MINERvA Samples */ } else #endif #ifndef __NO_MINERvA__ if (!name.compare("MINERvA_CCQE_XSec_1DQ2_nu") || !name.compare("MINERvA_CCQE_XSec_1DQ2_nu_20deg") || !name.compare("MINERvA_CCQE_XSec_1DQ2_nu_oldflux") || !name.compare("MINERvA_CCQE_XSec_1DQ2_nu_20deg_oldflux")) { return (new MINERvA_CCQE_XSec_1DQ2_nu(samplekey)); } else if (!name.compare("MINERvA_CCQE_XSec_1DQ2_antinu") || !name.compare("MINERvA_CCQE_XSec_1DQ2_antinu_20deg") || !name.compare("MINERvA_CCQE_XSec_1DQ2_antinu_oldflux") || !name.compare("MINERvA_CCQE_XSec_1DQ2_antinu_20deg_oldflux")) { return (new MINERvA_CCQE_XSec_1DQ2_antinu(samplekey)); } else if (!name.compare("MINERvA_CCQE_XSec_1DQ2_joint_oldflux") || !name.compare("MINERvA_CCQE_XSec_1DQ2_joint_20deg_oldflux") || !name.compare("MINERvA_CCQE_XSec_1DQ2_joint") || !name.compare("MINERvA_CCQE_XSec_1DQ2_joint_20deg")) { return (new MINERvA_CCQE_XSec_1DQ2_joint(samplekey)); } else if (!name.compare("MINERvA_CC0pi_XSec_1DEe_nue")) { return (new MINERvA_CC0pi_XSec_1DEe_nue(samplekey)); } else if (!name.compare("MINERvA_CC0pi_XSec_1DQ2_nue")) { return (new MINERvA_CC0pi_XSec_1DQ2_nue(samplekey)); } else if (!name.compare("MINERvA_CC0pi_XSec_1DThetae_nue")) { return (new MINERvA_CC0pi_XSec_1DThetae_nue(samplekey)); } else if (!name.compare("MINERvA_CC0pi_XSec_1DQ2_nu_proton")) { return (new MINERvA_CC0pi_XSec_1DQ2_nu_proton(samplekey)); } else if (!name.compare("MINERvA_CC0pi_XSec_1DQ2_TgtC_nu") || !name.compare("MINERvA_CC0pi_XSec_1DQ2_TgtCH_nu") || !name.compare("MINERvA_CC0pi_XSec_1DQ2_TgtFe_nu") || !name.compare("MINERvA_CC0pi_XSec_1DQ2_TgtPb_nu")) { return (new MINERvA_CC0pi_XSec_1DQ2_Tgt_nu(samplekey)); } else if (!name.compare("MINERvA_CC0pi_XSec_1DQ2_TgtRatioC_nu") || !name.compare("MINERvA_CC0pi_XSec_1DQ2_TgtRatioFe_nu") || !name.compare("MINERvA_CC0pi_XSec_1DQ2_TgtRatioPb_nu")) { return (new MINERvA_CC0pi_XSec_1DQ2_TgtRatio_nu(samplekey)); } else if (!name.compare("MINERvA_CC0pi_XSec_2Dptpx_nu")){ return (new MINERvA_CC0pi_XSec_2Dptpx_nu(samplekey)); } else if (!name.compare("MINERvA_CC0pi_XSec_2Dptpx_antinu")){ return (new MINERvA_CC0pi_XSec_2Dptpx_antinu(samplekey)); /* CC1pi+ */ // DONE } else if (!name.compare("MINERvA_CC1pip_XSec_1DTpi_nu") || !name.compare("MINERvA_CC1pip_XSec_1DTpi_nu_20deg") || !name.compare("MINERvA_CC1pip_XSec_1DTpi_nu_fluxcorr") || !name.compare("MINERvA_CC1pip_XSec_1DTpi_nu_20deg_fluxcorr")) { return (new MINERvA_CC1pip_XSec_1DTpi_nu(samplekey)); // DONE } else if (!name.compare("MINERvA_CC1pip_XSec_1Dth_nu") || !name.compare("MINERvA_CC1pip_XSec_1Dth_nu_20deg") || !name.compare("MINERvA_CC1pip_XSec_1Dth_nu_fluxcorr") || !name.compare("MINERvA_CC1pip_XSec_1Dth_nu_20deg_fluxcorr")) { return (new MINERvA_CC1pip_XSec_1Dth_nu(samplekey)); } else if (!name.compare("MINERvA_CC1pip_XSec_1DTpi_nu_2017") || !name.compare("MINERvA_CC1pip_XSec_1Dth_nu_2017") || !name.compare("MINERvA_CC1pip_XSec_1Dpmu_nu_2017") || !name.compare("MINERvA_CC1pip_XSec_1Dthmu_nu_2017") || !name.compare("MINERvA_CC1pip_XSec_1DQ2_nu_2017") || !name.compare("MINERvA_CC1pip_XSec_1DEnu_nu_2017")) { return (new MINERvA_CC1pip_XSec_1D_2017Update(samplekey)); /* CCNpi+ */ } else if (!name.compare("MINERvA_CCNpip_XSec_1Dth_nu") || !name.compare("MINERvA_CCNpip_XSec_1Dth_nu_2015") || !name.compare("MINERvA_CCNpip_XSec_1Dth_nu_2016") || !name.compare("MINERvA_CCNpip_XSec_1Dth_nu_2015_20deg") || !name.compare("MINERvA_CCNpip_XSec_1Dth_nu_2015_fluxcorr") || !name.compare("MINERvA_CCNpip_XSec_1Dth_nu_2015_20deg_fluxcorr")) { return (new MINERvA_CCNpip_XSec_1Dth_nu(samplekey)); } else if (!name.compare("MINERvA_CCNpip_XSec_1DTpi_nu") || !name.compare("MINERvA_CCNpip_XSec_1DTpi_nu_2015") || !name.compare("MINERvA_CCNpip_XSec_1DTpi_nu_2016") || !name.compare("MINERvA_CCNpip_XSec_1DTpi_nu_2015_20deg") || !name.compare("MINERvA_CCNpip_XSec_1DTpi_nu_2015_fluxcorr") || !name.compare( "MINERvA_CCNpip_XSec_1DTpi_nu_2015_20deg_fluxcorr")) { return (new MINERvA_CCNpip_XSec_1DTpi_nu(samplekey)); // Done } else if (!name.compare("MINERvA_CCNpip_XSec_1Dthmu_nu")) { return (new MINERvA_CCNpip_XSec_1Dthmu_nu(samplekey)); // Done } else if (!name.compare("MINERvA_CCNpip_XSec_1Dpmu_nu")) { return (new MINERvA_CCNpip_XSec_1Dpmu_nu(samplekey)); // Done } else if (!name.compare("MINERvA_CCNpip_XSec_1DQ2_nu")) { return (new MINERvA_CCNpip_XSec_1DQ2_nu(samplekey)); // Done } else if (!name.compare("MINERvA_CCNpip_XSec_1DEnu_nu")) { return (new MINERvA_CCNpip_XSec_1DEnu_nu(samplekey)); /* - CC1pi0 + MINERvA CC1pi0 anti-nu */ // Done } else if (!name.compare("MINERvA_CC1pi0_XSec_1Dth_antinu") || !name.compare("MINERvA_CC1pi0_XSec_1Dth_antinu_2015") || !name.compare("MINERvA_CC1pi0_XSec_1Dth_antinu_2016") || !name.compare("MINERvA_CC1pi0_XSec_1Dth_antinu_fluxcorr") || !name.compare("MINERvA_CC1pi0_XSec_1Dth_antinu_2015_fluxcorr") || !name.compare("MINERvA_CC1pi0_XSec_1Dth_antinu_2016_fluxcorr")) { return (new MINERvA_CC1pi0_XSec_1Dth_antinu(samplekey)); } else if (!name.compare("MINERvA_CC1pi0_XSec_1Dppi0_antinu") || !name.compare("MINERvA_CC1pi0_XSec_1Dppi0_antinu_fluxcorr")) { return (new MINERvA_CC1pi0_XSec_1Dppi0_antinu(samplekey)); } else if (!name.compare("MINERvA_CC1pi0_XSec_1DTpi0_antinu")) { return (new MINERvA_CC1pi0_XSec_1DTpi0_antinu(samplekey)); // Done } else if (!name.compare("MINERvA_CC1pi0_XSec_1DQ2_antinu")) { return (new MINERvA_CC1pi0_XSec_1DQ2_antinu(samplekey)); // Done } else if (!name.compare("MINERvA_CC1pi0_XSec_1Dthmu_antinu")) { return (new MINERvA_CC1pi0_XSec_1Dthmu_antinu(samplekey)); // Done } else if (!name.compare("MINERvA_CC1pi0_XSec_1Dpmu_antinu")) { return (new MINERvA_CC1pi0_XSec_1Dpmu_antinu(samplekey)); // Done } else if (!name.compare("MINERvA_CC1pi0_XSec_1DEnu_antinu")) { return (new MINERvA_CC1pi0_XSec_1DEnu_antinu(samplekey)); + // MINERvA CC1pi0 nu + } else if (!name.compare("MINERvA_CC1pi0_XSec_1DTpi_nu") || + !name.compare("MINERvA_CC1pi0_XSec_1Dth_nu") || + !name.compare("MINERvA_CC1pi0_XSec_1Dpmu_nu") || + !name.compare("MINERvA_CC1pi0_XSec_1Dthmu_nu") || + !name.compare("MINERvA_CC1pi0_XSec_1DQ2_nu") || + !name.compare("MINERvA_CC1pi0_XSec_1DEnu_nu") || + !name.compare("MINERvA_CC1pi0_XSec_1DWexp_nu") || + !name.compare("MINERvA_CC1pi0_XSec_1DPPi0Mass_nu") || + !name.compare("MINERvA_CC1pi0_XSec_1DPPi0MassDelta_nu") || + !name.compare("MINERvA_CC1pi0_XSec_1DCosAdler_nu") || + !name.compare("MINERvA_CC1pi0_XSec_1DPhiAdler_nu")) { + return (new MINERvA_CC1pi0_XSec_1D_nu(samplekey)); + /* CCINC */ } else if (!name.compare("MINERvA_CCinc_XSec_2DEavq3_nu")) { return (new MINERvA_CCinc_XSec_2DEavq3_nu(samplekey)); } else if (!name.compare("MINERvA_CCinc_XSec_1Dx_ratio_C12_CH") || !name.compare("MINERvA_CCinc_XSec_1Dx_ratio_Fe56_CH") || !name.compare("MINERvA_CCinc_XSec_1Dx_ratio_Pb208_CH")) { return (new MINERvA_CCinc_XSec_1Dx_ratio(samplekey)); } else if (!name.compare("MINERvA_CCinc_XSec_1DEnu_ratio_C12_CH") || !name.compare("MINERvA_CCinc_XSec_1DEnu_ratio_Fe56_CH") || !name.compare("MINERvA_CCinc_XSec_1DEnu_ratio_Pb208_CH")) { return (new MINERvA_CCinc_XSec_1DEnu_ratio(samplekey)); /* CCDIS */ } else if (!name.compare("MINERvA_CCDIS_XSec_1Dx_ratio_C12_CH") || !name.compare("MINERvA_CCDIS_XSec_1Dx_ratio_Fe56_CH") || !name.compare("MINERvA_CCDIS_XSec_1Dx_ratio_Pb208_CH")) { return (new MINERvA_CCDIS_XSec_1Dx_ratio(samplekey)); } else if (!name.compare("MINERvA_CCDIS_XSec_1DEnu_ratio_C12_CH") || !name.compare("MINERvA_CCDIS_XSec_1DEnu_ratio_Fe56_CH") || !name.compare("MINERvA_CCDIS_XSec_1DEnu_ratio_Pb208_CH")) { return (new MINERvA_CCDIS_XSec_1DEnu_ratio(samplekey)); /* CC-COH */ } else if (!name.compare("MINERvA_CCCOHPI_XSec_1DEnu_nu")) { return (new MINERvA_CCCOHPI_XSec_1DEnu_nu(samplekey)); } else if (!name.compare("MINERvA_CCCOHPI_XSec_1DEpi_nu")) { return (new MINERvA_CCCOHPI_XSec_1DEpi_nu(samplekey)); } else if (!name.compare("MINERvA_CCCOHPI_XSec_1Dth_nu")) { return (new MINERvA_CCCOHPI_XSec_1Dth_nu(samplekey)); } else if (!name.compare("MINERvA_CCCOHPI_XSec_1DQ2_nu")) { return (new MINERvA_CCCOHPI_XSec_1DQ2_nu(samplekey)); } else if (!name.compare("MINERvA_CCCOHPI_XSec_1DEnu_antinu")) { return (new MINERvA_CCCOHPI_XSec_1DEnu_antinu(samplekey)); } else if (!name.compare("MINERvA_CCCOHPI_XSec_1DEpi_antinu")) { return (new MINERvA_CCCOHPI_XSec_1DEpi_antinu(samplekey)); } else if (!name.compare("MINERvA_CCCOHPI_XSec_1Dth_antinu")) { return (new MINERvA_CCCOHPI_XSec_1Dth_antinu(samplekey)); } else if (!name.compare("MINERvA_CCCOHPI_XSec_1DQ2_antinu")) { return (new MINERvA_CCCOHPI_XSec_1DQ2_antinu(samplekey)); /* T2K Samples */ } else #endif #ifndef __NO_T2K__ if (!name.compare("T2K_CC0pi_XSec_2DPcos_nu") || !name.compare("T2K_CC0pi_XSec_2DPcos_nu_I") || !name.compare("T2K_CC0pi_XSec_2DPcos_nu_II")) { return (new T2K_CC0pi_XSec_2DPcos_nu(samplekey)); } else if (!name.compare("T2K_CC0pi_XSec_2DPcos_nu_nonuniform")) { return (new T2K_CC0pi_XSec_2DPcos_nu_nonuniform(samplekey)); /* T2K CC1pi+ CH samples */ // Comment these out for now because we don't have the proper data /* } else if (!name.compare("T2K_CC1pip_CH_XSec_1Dpmu_nu")) { return (new T2K_CC1pip_CH_XSec_1Dpmu_nu(file, rw, type, fkdt)); } else if (!name.compare("T2K_CC1pip_CH_XSec_1Dppi_nu")) { return (new T2K_CC1pip_CH_XSec_1Dppi_nu(file, rw, type, fkdt)); } else if (!name.compare("T2K_CC1pip_CH_XSec_1DQ2_nu")) { return (new T2K_CC1pip_CH_XSec_1DQ2_nu(file, rw, type, fkdt)); } else if (!name.compare("T2K_CC1pip_CH_XSec_1Dq3_nu")) { return (new T2K_CC1pip_CH_XSec_1Dq3_nu(file, rw, type, fkdt)); } else if (!name.compare("T2K_CC1pip_CH_XSec_1Dthmupi_nu")) { return (new T2K_CC1pip_CH_XSec_1Dthmupi_nu(file, rw, type, fkdt)); } else if (!name.compare("T2K_CC1pip_CH_XSec_1Dthpi_nu")) { return (new T2K_CC1pip_CH_XSec_1Dthpi_nu(file, rw, type, fkdt)); } else if (!name.compare("T2K_CC1pip_CH_XSec_1Dthq3pi_nu")) { return (new T2K_CC1pip_CH_XSec_1Dthq3pi_nu(file, rw, type, fkdt)); } else if (!name.compare("T2K_CC1pip_CH_XSec_1DWrec_nu")) { return (new T2K_CC1pip_CH_XSec_1DWrec_nu(file, rw, type, fkdt)); */ /* T2K CC1pi+ H2O samples */ } else if (!name.compare("T2K_CC1pip_H2O_XSec_1DEnuDelta_nu")) { return (new T2K_CC1pip_H2O_XSec_1DEnuDelta_nu(samplekey)); } else if (!name.compare("T2K_CC1pip_H2O_XSec_1DEnuMB_nu")) { return (new T2K_CC1pip_H2O_XSec_1DEnuMB_nu(samplekey)); } else if (!name.compare("T2K_CC1pip_H2O_XSec_1Dcosmu_nu")) { return (new T2K_CC1pip_H2O_XSec_1Dcosmu_nu(samplekey)); } else if (!name.compare("T2K_CC1pip_H2O_XSec_1Dcosmupi_nu")) { return (new T2K_CC1pip_H2O_XSec_1Dcosmupi_nu(samplekey)); } else if (!name.compare("T2K_CC1pip_H2O_XSec_1Dcospi_nu")) { return (new T2K_CC1pip_H2O_XSec_1Dcospi_nu(samplekey)); } else if (!name.compare("T2K_CC1pip_H2O_XSec_1Dpmu_nu")) { return (new T2K_CC1pip_H2O_XSec_1Dpmu_nu(samplekey)); } else if (!name.compare("T2K_CC1pip_H2O_XSec_1Dppi_nu")) { return (new T2K_CC1pip_H2O_XSec_1Dppi_nu(samplekey)); /* T2K CC0pi + np CH samples */ } else if (!name.compare("T2K_CC0pinp_STV_XSec_1Ddpt_nu")) { return (new T2K_CC0pinp_STV_XSec_1Ddpt_nu(samplekey)); // SciBooNE COH studies } else #endif #ifndef __NO_SciBooNE__ if (!name.compare("SciBooNE_CCCOH_STOP_NTrks_nu")) { return (new SciBooNE_CCCOH_STOP_NTrks_nu(samplekey)); } else if (!name.compare("SciBooNE_CCCOH_1TRK_1DQ2_nu")) { return (new SciBooNE_CCCOH_1TRK_1DQ2_nu(samplekey)); } else if (!name.compare("SciBooNE_CCCOH_MuPr_1DQ2_nu")) { return (new SciBooNE_CCCOH_MuPr_1DQ2_nu(samplekey)); } else if (!name.compare("SciBooNE_CCCOH_MuPiVA_1DQ2_nu")) { return (new SciBooNE_CCCOH_MuPiVA_1DQ2_nu(samplekey)); } else if (!name.compare("SciBooNE_CCCOH_MuPiNoVA_1DQ2_nu")) { return (new SciBooNE_CCCOH_MuPiNoVA_1DQ2_nu(samplekey)); } else if (!name.compare("SciBooNE_CCCOH_MuPiNoVA_1Dthetapr_nu")) { return (new SciBooNE_CCCOH_MuPiNoVA_1Dthetapr_nu(samplekey)); } else if (!name.compare("SciBooNE_CCCOH_MuPiNoVA_1Dthetapi_nu")) { return (new SciBooNE_CCCOH_MuPiNoVA_1Dthetapi_nu(samplekey)); } else if (!name.compare("SciBooNE_CCCOH_STOPFINAL_1DQ2_nu")) { return (new SciBooNE_CCCOH_STOPFINAL_1DQ2_nu(samplekey)); /* K2K Samples */ /* NC1pi0 */ } else #endif #ifndef __NO_K2K__ if (!name.compare("K2K_NC1pi0_Evt_1Dppi0_nu")) { return (new K2K_NC1pi0_Evt_1Dppi0_nu(samplekey)); /* Fake Studies */ } else #endif if (name.find("ExpMultDist_CCQE_XSec_1D") != std::string::npos && name.find("_FakeStudy") != std::string::npos) { return ( new ExpMultDist_CCQE_XSec_1DVar_FakeStudy(name, file, rw, type, fkdt)); } else if (name.find("ExpMultDist_CCQE_XSec_2D") != std::string::npos && name.find("_FakeStudy") != std::string::npos) { return ( new ExpMultDist_CCQE_XSec_2DVar_FakeStudy(name, file, rw, type, fkdt)); } else if (name.find("GenericFlux_") != std::string::npos) { return (new GenericFlux_Tester(name, file, rw, type, fkdt)); } else if (name.find("GenericVectors_") != std::string::npos) { return (new GenericFlux_Vectors(name, file, rw, type, fkdt)); } else if (!name.compare("T2K2017_FakeData")) { return (new T2K2017_FakeData(samplekey)); } else if (!name.compare("MCStudy_CCQE")) { return (new MCStudy_CCQEHistograms(name, file, rw, type, fkdt)); } else if (!name.compare("ElectronFlux_FlatTree")) { return (new ElectronFlux_FlatTree(name, file, rw, type, fkdt)); } else if (name.find("ElectronData_") != std::string::npos) { return new ElectronScattering_DurhamData(samplekey); } else if (name.find("MuonValidation_") != std::string::npos) { return (new MCStudy_MuonValidation(name, file, rw, type, fkdt)); } else if (!name.compare("NIWGOfficialPlots")) { return (new OfficialNIWGPlots(samplekey)); }else if (!name.compare("Simple_Osc")) { return (new Simple_Osc(samplekey)); }else if (!name.compare("Smear_SVDUnfold_Propagation_Osc")) { return (new Smear_SVDUnfold_Propagation_Osc(samplekey)); } else { ERR(FTL) << "Error: No such sample: " << name << std::endl; exit(-1); return NULL; } // Return NULL if no sample loaded. return NULL; } } diff --git a/src/MINERvA/CMakeLists.txt b/src/MINERvA/CMakeLists.txt index 18ee3ba..d8a5008 100644 --- a/src/MINERvA/CMakeLists.txt +++ b/src/MINERvA/CMakeLists.txt @@ -1,164 +1,167 @@ # Copyright 2016 L. Pickering, P Stowell, R. Terri, C. Wilkinson, C. Wret ################################################################################ # This file is part of NUISANCE. # # NUISANCE is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # NUISANCE is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with NUISANCE. If not, see . ################################################################################ set(IMPLFILES MINERvA_CCQE_XSec_1DQ2_antinu.cxx MINERvA_CCQE_XSec_1DQ2_joint.cxx MINERvA_CCQE_XSec_1DQ2_nu.cxx MINERvA_CC0pi_XSec_1DEe_nue.cxx MINERvA_CC0pi_XSec_1DQ2_nue.cxx MINERvA_CC0pi_XSec_1DQ2_nu_proton.cxx MINERvA_CC0pi_XSec_1DThetae_nue.cxx MINERvA_CC1pi0_XSec_1DEnu_antinu.cxx MINERvA_CC1pi0_XSec_1DQ2_antinu.cxx MINERvA_CC1pi0_XSec_1Dpmu_antinu.cxx MINERvA_CC1pi0_XSec_1Dppi0_antinu.cxx MINERvA_CC1pi0_XSec_1DTpi0_antinu.cxx MINERvA_CC1pi0_XSec_1Dth_antinu.cxx MINERvA_CC1pi0_XSec_1Dthmu_antinu.cxx +MINERvA_CC1pi0_XSec_1D_nu.cxx + + + MINERvA_CC1pip_XSec_1DTpi_20deg_nu.cxx MINERvA_CC1pip_XSec_1DTpi_nu.cxx MINERvA_CC1pip_XSec_1Dth_20deg_nu.cxx MINERvA_CC1pip_XSec_1Dth_nu.cxx +MINERvA_CC1pip_XSec_1D_2017Update.cxx MINERvA_CCNpip_XSec_1DEnu_nu.cxx MINERvA_CCNpip_XSec_1DQ2_nu.cxx MINERvA_CCNpip_XSec_1DTpi_nu.cxx MINERvA_CCNpip_XSec_1Dpmu_nu.cxx MINERvA_CCNpip_XSec_1Dth_nu.cxx MINERvA_CCNpip_XSec_1Dthmu_nu.cxx MINERvA_CCinc_XSec_2DEavq3_nu.cxx MINERvA_CCinc_XSec_1Dx_ratio.cxx MINERvA_CCinc_XSec_1DEnu_ratio.cxx MINERvA_CCinc_XSec_1Dx_nu.cxx MINERvA_CCinc_XSec_1DEnu_nu.cxx MINERvA_CCDIS_XSec_1Dx_ratio.cxx MINERvA_CCDIS_XSec_1DEnu_ratio.cxx MINERvA_CCDIS_XSec_1Dx_nu.cxx MINERvA_CCDIS_XSec_1DEnu_nu.cxx MINERvA_CC0pi_XSec_1DQ2_Tgt_nu.cxx MINERvA_CC0pi_XSec_1DQ2_TgtRatio_nu.cxx MINERvA_CC0pi_XSec_2Dptpx_nu.cxx MINERvA_CC0pi_XSec_2Dptpx_antinu.cxx -MINERvA_CC1pip_XSec_1D_2017Update.cxx - MINERvA_CCCOHPI_XSec_1DEnu_nu.cxx MINERvA_CCCOHPI_XSec_1DEpi_nu.cxx MINERvA_CCCOHPI_XSec_1Dth_nu.cxx MINERvA_CCCOHPI_XSec_1DQ2_nu.cxx MINERvA_CCCOHPI_XSec_1DEnu_antinu.cxx MINERvA_CCCOHPI_XSec_1DEpi_antinu.cxx MINERvA_CCCOHPI_XSec_1Dth_antinu.cxx MINERvA_CCCOHPI_XSec_1DQ2_antinu.cxx MINERvAUtils.cxx MINERvA_SignalDef.cxx ) set(HEADERFILES MINERvA_CCQE_XSec_1DQ2_antinu.h MINERvA_CCQE_XSec_1DQ2_joint.h MINERvA_CCQE_XSec_1DQ2_nu.h MINERvA_CC0pi_XSec_1DEe_nue.h MINERvA_CC0pi_XSec_1DQ2_nue.h MINERvA_CC0pi_XSec_1DQ2_nu_proton.h MINERvA_CC0pi_XSec_1DThetae_nue.h MINERvA_CC1pi0_XSec_1DEnu_antinu.h MINERvA_CC1pi0_XSec_1DQ2_antinu.h MINERvA_CC1pi0_XSec_1Dpmu_antinu.h MINERvA_CC1pi0_XSec_1Dppi0_antinu.h MINERvA_CC1pi0_XSec_1DTpi0_antinu.h MINERvA_CC1pi0_XSec_1Dth_antinu.h MINERvA_CC1pi0_XSec_1Dthmu_antinu.h MINERvA_CC1pip_XSec_1DTpi_20deg_nu.h MINERvA_CC1pip_XSec_1DTpi_nu.h MINERvA_CC1pip_XSec_1Dth_20deg_nu.h MINERvA_CC1pip_XSec_1Dth_nu.h MINERvA_CCNpip_XSec_1DEnu_nu.h MINERvA_CCNpip_XSec_1DQ2_nu.h MINERvA_CCNpip_XSec_1DTpi_nu.h MINERvA_CCNpip_XSec_1Dpmu_nu.h MINERvA_CCNpip_XSec_1Dth_nu.h MINERvA_CCNpip_XSec_1Dthmu_nu.h MINERvA_CCinc_XSec_2DEavq3_nu.h MINERvA_CCinc_XSec_1Dx_ratio.h MINERvA_CCinc_XSec_1DEnu_ratio.h MINERvA_CCinc_XSec_1Dx_nu.h MINERvA_CCinc_XSec_1DEnu_nu.h MINERvA_CCDIS_XSec_1Dx_ratio.h MINERvA_CCDIS_XSec_1DEnu_ratio.h MINERvA_CCDIS_XSec_1Dx_nu.h MINERvA_CCDIS_XSec_1DEnu_nu.h MINERvA_CC0pi_XSec_1DQ2_Tgt_nu.h MINERvA_CC0pi_XSec_1DQ2_TgtRatio_nu.h MINERvA_CC0pi_XSec_2Dptpx_nu.h MINERvA_CC0pi_XSec_2Dptpx_antinu.h MINERvA_CC1pip_XSec_1D_2017Update.h MINERvA_CCCOHPI_XSec_1DEnu_nu.h MINERvA_CCCOHPI_XSec_1DEpi_nu.h MINERvA_CCCOHPI_XSec_1Dth_nu.h MINERvA_CCCOHPI_XSec_1DEnu_antinu.h MINERvA_CCCOHPI_XSec_1DEpi_antinu.h MINERvA_CCCOHPI_XSec_1Dth_antinu.h MINERvAUtils.h MINERvA_SignalDef.h MINERvAVariableBoxes.h ) set(LIBNAME expMINERvA) if(CMAKE_BUILD_TYPE MATCHES DEBUG) add_library(${LIBNAME} STATIC ${IMPLFILES}) else(CMAKE_BUILD_TYPE MATCHES RELEASE) add_library(${LIBNAME} SHARED ${IMPLFILES}) endif() include_directories(${MINIMUM_INCLUDE_DIRECTORIES}) set_target_properties(${LIBNAME} PROPERTIES VERSION "${NUISANCE_VERSION_MAJOR}.${NUISANCE_VERSION_MINOR}.${NUISANCE_VERSION_REVISION}") #set_target_properties(${LIBNAME} PROPERTIES LINK_FLAGS ${ROOT_LD_FLAGS}) if(DEFINED PROJECTWIDE_EXTRA_DEPENDENCIES) add_dependencies(${LIBNAME} ${PROJECTWIDE_EXTRA_DEPENDENCIES}) endif() install(TARGETS ${LIBNAME} DESTINATION lib) #Can uncomment this to install the headers... but is it really neccessary? #install(FILES ${HEADERFILES} DESTINATION include) set(MODULETargets ${MODULETargets} ${LIBNAME} PARENT_SCOPE) diff --git a/src/MINERvA/MINERvA_SignalDef.cxx b/src/MINERvA/MINERvA_SignalDef.cxx index 7d62827..bdc368c 100644 --- a/src/MINERvA/MINERvA_SignalDef.cxx +++ b/src/MINERvA/MINERvA_SignalDef.cxx @@ -1,384 +1,390 @@ // Copyright 2016 L. Pickering, P Stowell, R. Terri, C. Wilkinson, C. Wret /******************************************************************************* * This file is part of NUISANCE. * * NUISANCE is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * NUISANCE is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with NUISANCE. If not, see . *******************************************************************************/ #include "SignalDef.h" #include "FitUtils.h" #include "MINERvA_SignalDef.h" namespace SignalDef { -// ********************************* -// MINERvA CC1pi+/- signal definition (2015 release) -// Note: There is a 2016 release which is different to this (listed below), but -// it is CCNpi+ and has a different W cut -// Note2: The W cut is implemented in the class implementation in MINERvA/ -// rather than here so we can draw events that don't pass the W cut (W cut is -// 1.4 GeV) -// Could possibly be changed for slight speed increase since less events -// would be used -// -// MINERvA signal is slightly different to MiniBooNE -// -// Exactly one negative muon -// Exactly one charged pion (both + and -); however, there is a Michel e- -// requirement but UNCLEAR IF UNFOLDED OR NOT (so don't know if should be -// applied) -// Exactly 1 charged pion exits (so + and - charge), however, has Michel -// electron requirement, so look for + only here? -// No restriction on neutral pions or other mesons -// MINERvA has unfolded and not unfolded muon phase space for 2015 -// -// Possible issues with the data: -// 1) pi- is allowed in signal even when Michel cut included; most pi- is efficiency corrected in GENIE -// 2) There is a T_pi < 350 MeV cut coming from requiring a stopping pion; this is efficiency corrected in GENIE -// 3) There is a 1.5 < Enu < 10.0 cut in signal definition -// 4) There is an angular muon cut which is sometimes efficiency corrected (why we have bool isRestricted below) -// -// Nice things: -// Much data given: with and without muon angle cuts and with and without shape -// only data + covariance -// -bool isCC1pip_MINERvA(FitEvent *event, double EnuMin, double EnuMax, - bool isRestricted) { // ********************************* + // MINERvA CC1pi+/- signal definition (2015 release) + // Note: There is a 2016 release which is different to this (listed below), but + // it is CCNpi+ and has a different W cut + // Note2: The W cut is implemented in the class implementation in MINERvA/ + // rather than here so we can draw events that don't pass the W cut (W cut is + // 1.4 GeV) + // Could possibly be changed for slight speed increase since less events + // would be used + // + // MINERvA signal is slightly different to MiniBooNE + // + // Exactly one negative muon + // Exactly one charged pion (both + and -); however, there is a Michel e- + // requirement but UNCLEAR IF UNFOLDED OR NOT (so don't know if should be + // applied) + // Exactly 1 charged pion exits (so + and - charge), however, has Michel + // electron requirement, so look for + only here? + // No restriction on neutral pions or other mesons + // MINERvA has unfolded and not unfolded muon phase space for 2015 + // + // Possible issues with the data: + // 1) pi- is allowed in signal even when Michel cut included; most pi- is efficiency corrected in GENIE + // 2) There is a T_pi < 350 MeV cut coming from requiring a stopping pion; this is efficiency corrected in GENIE + // 3) There is a 1.5 < Enu < 10.0 cut in signal definition + // 4) There is an angular muon cut which is sometimes efficiency corrected (why we have bool isRestricted below) + // + // Nice things: + // Much data given: with and without muon angle cuts and with and without shape + // only data + covariance + // + bool isCC1pip_MINERvA(FitEvent *event, double EnuMin, double EnuMax, + bool isRestricted) { + // ********************************* + + // Signal is both pi+ and pi- + // WARNING: PI- CONTAMINATION IS FULLY GENIE BECAUSE THE MICHEL TAG + // First, make sure it's CCINC + if (!isCCINC(event, 14, EnuMin, EnuMax)) return false; + + // Allow pi+/pi- + int piPDG[] = {211, -211}; + int nLeptons = event->NumFSLeptons(); + int nPion = event->NumFSParticle(piPDG); + + // Check that the desired pion exists and is the only meson + if (nPion != 1) return false; + + // Check that there is only one final state lepton + if (nLeptons != 1) return false; + + // MINERvA released another CC1pi+ xsec without muon unfolding! + // here the muon angle is < 20 degrees (seen in MINOS) + TLorentzVector pnu = event->GetHMISParticle(14)->fP; + TLorentzVector pmu = event->GetHMFSParticle(13)->fP; - // Signal is both pi+ and pi- - // WARNING: PI- CONTAMINATION IS FULLY GENIE BECAUSE THE MICHEL TAG - // First, make sure it's CCINC - if (!isCCINC(event, 14, EnuMin, EnuMax)) return false; - - // Allow pi+/pi- - int piPDG[] = {211, -211}; - int nLeptons = event->NumFSLeptons(); - int nPion = event->NumFSParticle(piPDG); - - // Check that the desired pion exists and is the only meson - if (nPion != 1) return false; - - // Check that there is only one final state lepton - if (nLeptons != 1) return false; - - // MINERvA released another CC1pi+ xsec without muon unfolding! - // here the muon angle is < 20 degrees (seen in MINOS) - TLorentzVector pnu = event->GetHMISParticle(14)->fP; - TLorentzVector pmu = event->GetHMFSParticle(13)->fP; - - if (isRestricted) { - double th_nu_mu = FitUtils::th(pmu, pnu) * 180. / M_PI; - if (th_nu_mu >= 20) return false; - } + if (isRestricted) { + double th_nu_mu = FitUtils::th(pmu, pnu) * 180. / M_PI; + if (th_nu_mu >= 20) return false; + } - // Extract Hadronic Mass - double hadMass = FitUtils::Wrec(pnu, pmu); + // Extract Hadronic Mass + double hadMass = FitUtils::Wrec(pnu, pmu); - // Actual cut is True GENIE Ws! Arg.! Use gNtpcConv definition. + // Actual cut is True GENIE Ws! Arg.! Use gNtpcConv definition. #ifdef __GENIE_ENABLED__ - if (event->fType == kGENIE){ - EventRecord * gevent = static_cast(event->genie_event->event); - const Interaction * interaction = gevent->Summary(); - const Kinematics & kine = interaction->Kine(); - double Ws = kine.W (true); - // std::cout << "Ws versus WRec = " << Ws << " vs " << hadMass << " " << kine.W(false) << std::endl; - hadMass = Ws * 1000.0; - } + if (event->fType == kGENIE){ + EventRecord * gevent = static_cast(event->genie_event->event); + const Interaction * interaction = gevent->Summary(); + const Kinematics & kine = interaction->Kine(); + double Ws = kine.W (true); + // std::cout << "Ws versus WRec = " << Ws << " vs " << hadMass << " " << kine.W(false) << std::endl; + hadMass = Ws * 1000.0; + } #endif - if (hadMass > 1400.0) return false; + if (hadMass > 1400.0) return false; - return true; -}; + return true; + }; // Updated MINERvA 2017 Signal using Wexp and no restriction on angle -bool isCC1pip_MINERvA_2017(FitEvent *event, double EnuMin, double EnuMax){ - - // Signal is both pi+ and pi- - // WARNING: PI- CONTAMINATION IS FULLY GENIE BECAUSE THE MICHEL TAG - // First, make sure it's CCINC - if (!isCCINC(event, 14, EnuMin, EnuMax)) return false; - - // Allow pi+/pi- - int piPDG[] = {211, -211}; - int nLeptons = event->NumFSLeptons(); - int nPion = event->NumFSParticle(piPDG); - - // Check that the desired pion exists and is the only meson - if (nPion != 1) return false; - - // Check that there is only one final state lepton - if (nLeptons != 1) return false; - - // Get Muon and Lepton Kinematics - TLorentzVector pnu = event->GetHMISParticle(14)->fP; - TLorentzVector pmu = event->GetHMFSParticle(13)->fP; - - // Extract Hadronic Mass - double hadMass = FitUtils::Wrec(pnu, pmu); - if (hadMass > 1400.0) return false; - - return true; -}; - -// ********************************* -// MINERvA CCNpi+/- signal definition from 2016 publication -// Different to CC1pi+/- listed above; additional has W < 1.8 GeV -// -// For notes on strangeness of signal definition, see CC1pip_MINERvA -// -// One negative muon -// At least one charged pion -// 1.5 < Enu < 10 -// No restrictions on pi0 or other mesons or baryons -// W_reconstructed (ignoring initial state motion) cut at 1.8 GeV -// -// Also writes number of pions (nPions) if studies on this want to be done... -bool isCCNpip_MINERvA(FitEvent *event, double EnuMin, - double EnuMax, bool isRestricted, bool isWtrue) { - // ********************************* + bool isCC1pip_MINERvA_2017(FitEvent *event, double EnuMin, double EnuMax){ - // First, make sure it's CCINC - if (!isCCINC(event, 14, EnuMin, EnuMax)) return false; + // Signal is both pi+ and pi- + // WARNING: PI- CONTAMINATION IS FULLY GENIE BECAUSE THE MICHEL TAG + // First, make sure it's CCINC + if (!isCCINC(event, 14, EnuMin, EnuMax)) return false; - int nLeptons = event->NumFSLeptons(); + // Allow pi+/pi- + int piPDG[] = {211, -211}; + int nLeptons = event->NumFSLeptons(); + int nPion = event->NumFSParticle(piPDG); - // Write the number of pions to the measurement class... - // Maybe better to just do that inside the class? - int nPions = event->NumFSParticle(PhysConst::pdg_charged_pions); + // Check that the desired pion exists and is the only meson + if (nPion != 1) return false; - // Check that there is a pion! - if (nPions == 0) return false; + // Check that there is only one final state lepton + if (nLeptons != 1) return false; - // Check that there is only one final state lepton - if (nLeptons != 1) return false; + // Get Muon and Lepton Kinematics + TLorentzVector pnu = event->GetHMISParticle(14)->fP; + TLorentzVector pmu = event->GetHMFSParticle(13)->fP; - // Need the muon and the neutrino to check angles and W + // Extract Hadronic Mass + double hadMass = FitUtils::Wrec(pnu, pmu); + if (hadMass > 1400.0) return false; - TLorentzVector pnu = event->GetNeutrinoIn()->fP; - TLorentzVector pmu = event->GetHMFSParticle(13)->fP; - // MINERvA released some data with restricted muon angle - // Here the muon angle is < 20 degrees (seen in MINOS) - if (isRestricted) { + return true; + }; - double th_nu_mu = FitUtils::th(pmu, pnu) * 180. / M_PI; - if (th_nu_mu >= 20.) return false; - } + // ********************************* + // MINERvA CCNpi+/- signal definition from 2016 publication + // Different to CC1pi+/- listed above; additional has W < 1.8 GeV + // + // For notes on strangeness of signal definition, see CC1pip_MINERvA + // + // One negative muon + // At least one charged pion + // 1.5 < Enu < 10 + // No restrictions on pi0 or other mesons or baryons + // W_reconstructed (ignoring initial state motion) cut at 1.8 GeV + // + // Also writes number of pions (nPions) if studies on this want to be done... + bool isCCNpip_MINERvA(FitEvent *event, double EnuMin, + double EnuMax, bool isRestricted, bool isWtrue) { + // ********************************* + + // First, make sure it's CCINC + if (!isCCINC(event, 14, EnuMin, EnuMax)) return false; + + int nLeptons = event->NumFSLeptons(); + + // Write the number of pions to the measurement class... + // Maybe better to just do that inside the class? + int nPions = event->NumFSParticle(PhysConst::pdg_charged_pions); + + // Check that there is a pion! + if (nPions == 0) return false; + + // Check that there is only one final state lepton + if (nLeptons != 1) return false; + + // Need the muon and the neutrino to check angles and W + + TLorentzVector pnu = event->GetNeutrinoIn()->fP; + TLorentzVector pmu = event->GetHMFSParticle(13)->fP; + // MINERvA released some data with restricted muon angle + // Here the muon angle is < 20 degrees (seen in MINOS) + if (isRestricted) { + + double th_nu_mu = FitUtils::th(pmu, pnu) * 180. / M_PI; + if (th_nu_mu >= 20.) return false; + } - // Lastly check the W cut (always at 1.8 GeV) - double Wrec = FitUtils::Wrec(pnu, pmu) + 0.; + // Lastly check the W cut (always at 1.8 GeV) + double Wrec = FitUtils::Wrec(pnu, pmu) + 0.; - // Actual cut is True GENIE Ws! Arg.! Use gNtpcConv definition. - if (isWtrue){ + // Actual cut is True GENIE Ws! Arg.! Use gNtpcConv definition. + if (isWtrue){ #ifdef __GENIE_ENABLED__ - if (event->fType == kGENIE){ - GHepRecord* ghep = static_cast(event->genie_event->event); - const Interaction * interaction = ghep->Summary(); - const Kinematics & kine = interaction->Kine(); - double Ws = kine.W (true); - Wrec = Ws * 1000.0; // Say Wrec is Ws - } + if (event->fType == kGENIE){ + GHepRecord* ghep = static_cast(event->genie_event->event); + const Interaction * interaction = ghep->Summary(); + const Kinematics & kine = interaction->Kine(); + double Ws = kine.W (true); + Wrec = Ws * 1000.0; // Say Wrec is Ws + } #endif - } + } - if (Wrec > 1800. || Wrec < 0.0) return false; + if (Wrec > 1800. || Wrec < 0.0) return false; - return true; -}; + return true; + }; -//******************************************************************** -bool isCCQEnumu_MINERvA(FitEvent *event, double EnuMin, double EnuMax, - bool fullphasespace) { //******************************************************************** + bool isCCQEnumu_MINERvA(FitEvent *event, double EnuMin, double EnuMax, + bool fullphasespace) { + //******************************************************************** - if (!isCCQELike(event, 14, EnuMin, EnuMax)) return false; + if (!isCCQELike(event, 14, EnuMin, EnuMax)) return false; - TLorentzVector pnu = event->GetHMISParticle(14)->fP; - TLorentzVector pmu = event->GetHMFSParticle(13)->fP; + TLorentzVector pnu = event->GetHMISParticle(14)->fP; + TLorentzVector pmu = event->GetHMFSParticle(13)->fP; - double ThetaMu = pnu.Vect().Angle(pmu.Vect()); - double Enu_rec = FitUtils::EnuQErec(pmu, cos(ThetaMu), 34., true); + double ThetaMu = pnu.Vect().Angle(pmu.Vect()); + double Enu_rec = FitUtils::EnuQErec(pmu, cos(ThetaMu), 34., true); - // If Restricted phase space - if (!fullphasespace && ThetaMu > 0.34906585) return false; + // If Restricted phase space + if (!fullphasespace && ThetaMu > 0.34906585) return false; - // restrict energy range - if (Enu_rec < EnuMin || Enu_rec > EnuMax) return false; + // restrict energy range + if (Enu_rec < EnuMin || Enu_rec > EnuMax) return false; - return true; -}; + return true; + }; -//******************************************************************** -bool isCCQEnumubar_MINERvA(FitEvent *event, double EnuMin, double EnuMax, - bool fullphasespace) { //******************************************************************** + bool isCCQEnumubar_MINERvA(FitEvent *event, double EnuMin, double EnuMax, + bool fullphasespace) { + //******************************************************************** - if (!isCCQELike(event, -14, EnuMin, EnuMax)) return false; + if (!isCCQELike(event, -14, EnuMin, EnuMax)) return false; - TLorentzVector pnu = event->GetHMISParticle(-14)->fP; - TLorentzVector pmu = event->GetHMFSParticle(-13)->fP; + TLorentzVector pnu = event->GetHMISParticle(-14)->fP; + TLorentzVector pmu = event->GetHMFSParticle(-13)->fP; - double ThetaMu = pnu.Vect().Angle(pmu.Vect()); - double Enu_rec = FitUtils::EnuQErec(pmu, cos(ThetaMu), 30., true); + double ThetaMu = pnu.Vect().Angle(pmu.Vect()); + double Enu_rec = FitUtils::EnuQErec(pmu, cos(ThetaMu), 30., true); - // If Restricted phase space - if (!fullphasespace && ThetaMu > 0.34906585) return false; + // If Restricted phase space + if (!fullphasespace && ThetaMu > 0.34906585) return false; - // restrict energy range - if (Enu_rec < EnuMin || Enu_rec > EnuMax) return false; + // restrict energy range + if (Enu_rec < EnuMin || Enu_rec > EnuMax) return false; - return true; -} + return true; + } -//******************************************************************** -bool isCCincLowRecoil_MINERvA(FitEvent *event, double EnuMin, double EnuMax) { //******************************************************************** + bool isCCincLowRecoil_MINERvA(FitEvent *event, double EnuMin, double EnuMax) { + //******************************************************************** - if (!isCCINC(event, 14, EnuMin, EnuMax)) return false; + if (!isCCINC(event, 14, EnuMin, EnuMax)) return false; - // Need at least one muon - if (event->NumFSParticle(13) < 1) return false; - TLorentzVector pmu = event->GetHMFSParticle(13)->fP; - TLorentzVector pnu = event->GetHMISParticle(14)->fP; + // Need at least one muon + if (event->NumFSParticle(13) < 1) return false; + TLorentzVector pmu = event->GetHMFSParticle(13)->fP; + TLorentzVector pnu = event->GetHMISParticle(14)->fP; - // Cut on muon angle greated than 20deg - if (cos(pnu.Vect().Angle(pmu.Vect())) < 0.93969262078) return false; + // Cut on muon angle greated than 20deg + if (cos(pnu.Vect().Angle(pmu.Vect())) < 0.93969262078) return false; - // Cut on muon energy < 1.5 GeV - if (pmu.E()/1000.0 < 1.5) return false; + // Cut on muon energy < 1.5 GeV + if (pmu.E()/1000.0 < 1.5) return false; - return true; -} + return true; + } -bool isCC0pi1p_MINERvA(FitEvent *event, double enumin, double enumax) { - // Require numu CC0pi event with a proton above threshold - bool signal = (isCC0pi(event, 14, enumin, enumax) && - HasProtonKEAboveThreshold(event, 110.0)); + bool isCC0pi1p_MINERvA(FitEvent *event, double enumin, double enumax) { + // Require numu CC0pi event with a proton above threshold + bool signal = (isCC0pi(event, 14, enumin, enumax) && + HasProtonKEAboveThreshold(event, 110.0)); - return signal; -} + return signal; + } -// 2015 analysis just asks for 1pi0 and no pi+/pi- -bool isCC1pi0_MINERvA_2015(FitEvent *event, double EnuMin, double EnuMax) { - bool CC1pi0_anu = SignalDef::isCC1pi(event, -14, 111, EnuMin, EnuMax); - return CC1pi0_anu; -} + // 2015 analysis just asks for 1pi0 and no pi+/pi- + bool isCC1pi0_MINERvA_2015(FitEvent *event, double EnuMin, double EnuMax) { + bool CC1pi0_anu = SignalDef::isCC1pi(event, -14, 111, EnuMin, EnuMax); + return CC1pi0_anu; + } + + // 2016 analysis just asks for 1pi0 and no other charged tracks. Half-open to interpretation: we go with "charged tracks" meaning pions. You'll be forgiven for thinking proton tracks should be included here too but we checked with MINERvA + bool isCC1pi0_MINERvA_2016(FitEvent *event, double EnuMin, double EnuMax) { + bool CC1pi0_anu = SignalDef::isCC1pi(event, -14, 111, EnuMin, EnuMax); -// 2016 analysis just asks for 1pi0 and no other charged tracks -bool isCC1pi0_MINERvA_2016(FitEvent *event, double EnuMin, double EnuMax) { - bool CC1pi0_anu = SignalDef::isCC1pi(event, -14, 111, EnuMin, EnuMax); - - /* - // Additionally look for charged proton track - bool HasProton = event->HasFSParticle(2212); + /* + // Additionally look for charged proton track + bool HasProton = event->HasFSParticle(2212); - - if (CC1pi0_anu) { + if (CC1pi0_anu) { if (!HasProton) { - return true; + return true; } else { - return false; + return false; } - } else { + } else { return false; + } + */ + + return CC1pi0_anu; + } + + // 2016 analysis just asks for 1pi0 and no other charged tracks + bool isCC1pi0_MINERvA_nu(FitEvent *event, double EnuMin, double EnuMax) { + bool CC1pi0_nu = SignalDef::isCC1pi(event, 14, 111, EnuMin, EnuMax); + return CC1pi0_nu; } - */ - return CC1pi0_anu; -} //******************************************************************** bool isCC0pi_MINERvAPTPZ(FitEvent* event, int nuPDG, double emin, double emax){ //******************************************************************** // Check it's CCINC if (!SignalDef::isCCINC(event, nuPDG, emin, emax)) return false; // Make Angle Cut > 20.0 TLorentzVector pnu = event->GetHMISParticle(14)->fP; TLorentzVector pmu = event->GetHMFSParticle(13)->fP; double th_nu_mu = FitUtils::th(pmu, pnu) * 180. / M_PI; if (th_nu_mu >= 20.0) return false; int genie_n_muons = 0; int genie_n_mesons = 0; int genie_n_heavy_baryons_plus_pi0s = 0; int genie_n_photons = 0; for(int i = 0; i < event->NParticles(); ++i) { FitParticle* p = event->GetParticle(i); if (p->Status() != kFinalState) continue; int pdg = p->fPID; double energy = p->fP.E(); if( abs(pdg) == 13 ) - genie_n_muons++; + genie_n_muons++; else if( pdg == 22 && energy > 10.0 ) - genie_n_photons++; + genie_n_photons++; else if( abs(pdg) == 211 || abs(pdg) == 321 || abs(pdg) == 323 || pdg == 111 || pdg == 130 || pdg == 310 || pdg == 311 || pdg == 313 ) - genie_n_mesons++; + genie_n_mesons++; else if( pdg == 3112 || pdg == 3122 || pdg == 3212 || pdg == 3222 || pdg == 4112 || - pdg == 4122 || pdg == 4212 || pdg == 4222 || pdg == 411 || pdg == 421 || pdg == 111 ) - genie_n_heavy_baryons_plus_pi0s++; + pdg == 4122 || pdg == 4212 || pdg == 4222 || pdg == 411 || pdg == 421 || pdg == 111 ) + genie_n_heavy_baryons_plus_pi0s++; } if( genie_n_muons == 1 && - genie_n_mesons == 0 && - genie_n_heavy_baryons_plus_pi0s == 0 && - genie_n_photons == 0 ) return true; + genie_n_mesons == 0 && + genie_n_heavy_baryons_plus_pi0s == 0 && + genie_n_photons == 0 ) return true; return false; } bool isCC0pi_anti_MINERvAPTPZ(FitEvent* event, int nuPDG, double emin, double emax){ // Check it's CCINC if (!SignalDef::isCCINC(event, nuPDG, emin, emax)) return false; // Make Angle Cut > 20.0 TLorentzVector pnu = event->GetHMISParticle(-14)->fP; TLorentzVector pmu = event->GetHMFSParticle(-13)->fP; double th_nu_mu = FitUtils::th(pmu, pnu) * 180. / M_PI; if (th_nu_mu >= 20.0) return false; int genie_n_muons = 0; int genie_n_mesons = 0; int genie_n_heavy_baryons_plus_pi0s = 0; int genie_n_photons = 0; for(int i = 0; i < event->NParticles(); ++i) { FitParticle* p = event->GetParticle(i); if (p->Status() != kFinalState) continue; int pdg = p->fPID; double energy = p->fP.E(); if( abs(pdg) == 13 ) genie_n_muons++; else if( pdg == 22 && energy > 10.0 ) genie_n_photons++; else if( abs(pdg) == 211 || abs(pdg) == 321 || abs(pdg) == 323 || abs(pdg) == 111 || abs(pdg) == 130 || abs(pdg) == 310 || abs(pdg) == 311 || abs(pdg) == 313 ) genie_n_mesons++; else if( abs(pdg) == 3112 || abs(pdg) == 3122 || abs(pdg) == 3212 || abs(pdg) == 3222 || abs(pdg) == 4112 || - abs(pdg) == 4122 || abs(pdg) == 4212 || abs(pdg) == 4222 || abs(pdg) == 411 || abs(pdg) == 421 || - abs(pdg) == 111 ) + abs(pdg) == 4122 || abs(pdg) == 4212 || abs(pdg) == 4222 || abs(pdg) == 411 || abs(pdg) == 421 || + abs(pdg) == 111 ) genie_n_heavy_baryons_plus_pi0s++; } - + if( genie_n_muons == 1 && genie_n_mesons == 0 && genie_n_heavy_baryons_plus_pi0s == 0 && genie_n_photons == 0 ) return true; return false; } } diff --git a/src/MINERvA/MINERvA_SignalDef.h b/src/MINERvA/MINERvA_SignalDef.h index 66f2799..65ad493 100644 --- a/src/MINERvA/MINERvA_SignalDef.h +++ b/src/MINERvA/MINERvA_SignalDef.h @@ -1,98 +1,99 @@ // Copyright 2016 L. Pickering, P Stowell, R. Terri, C. Wilkinson, C. Wret /******************************************************************************* * This file is part of NUISANCE. * * NUISANCE is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * NUISANCE is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with NUISANCE. If not, see . *******************************************************************************/ #ifndef MINERVA_SIGNALDEF_H_SEEN #define MINERVA_SIGNALDEF_H_SEEN #include "FitEvent.h" namespace SignalDef { // ********************************* /// MINERvA CC1pi+/- signal definition (2015 release) /// Note: There is a 2016 release which is different to this (listed below), /// but /// it is CCNpi+ and has a different W cut /// Note2: The W cut is implemented in the class implementation in MINERvA/ /// rather than here so we can draw events that don't pass the W cut (W cut is /// 1.4 GeV) /// Could possibly be changed for slight speed increase since less events /// would be used /// /// MINERvA signal is slightly different to MiniBooNE /// /// Exactly one negative muon /// Exactly one charged pion (both + and -); however, there is a Michel e- /// requirement but UNCLEAR IF UNFOLDED OR NOT (so don't know if should be /// applied) /// Exactly 1 charged pion exits (so + and - charge), however, has Michel /// electron requirement, so look for + only here? /// No restriction on neutral pions or other mesons /// MINERvA has unfolded and not unfolded muon phase space for 2015 /// /// Possible problems: /// 1) Should there be a pi+ only cut implemented due to Michel requirement, or /// is pi- events filled from MC? /// 2) There is a T_pi < 350 MeV cut coming from requiring a stopping pion so /// the /// Michel e is seen, this is also unclear if it's unfolded so any pion is OK /// /// Nice things: /// Much data given: with and without muon angle cuts and with and without shape /// only data + covariance bool isCC1pip_MINERvA(FitEvent *event, double EnuMin, double EnuMax, bool isRestricted = false); bool isCC1pip_MINERvA_2017(FitEvent *event, double EnuMin, double EnuMax); // ********************************* /// MINERvA CCNpi+/- signal definition from 2016 publication /// Different to CC1pi+/- listed above; additional has W < 1.8 GeV /// /// Still asks for a Michel e and still unclear if this is unfolded or not /// Says stuff like "requirement that a Michel e isolates a subsample that is /// more nearly a pi+ prodution", yet the signal definition is both pi+ and pi-? /// /// One negative muon /// At least one charged pion /// 1.5 < Enu < 10 /// No restrictions on pi0 or other mesons or baryons /// /// Also writes number of pions (nPions) if studies on this want to be done... bool isCCNpip_MINERvA(FitEvent *event, double EnuMin, double EnuMax, bool isRestricted = false, bool isWtrue=false); bool isCCQEnumu_MINERvA(FitEvent *event, double EnuMin, double EnuMax, bool fullphasespace = true); bool isCCQEnumubar_MINERvA(FitEvent *event, double EnuMin, double EnuMax, bool fullphasespace = true); bool isCCincLowRecoil_MINERvA(FitEvent *event, double EnuMin, double EnuMax); bool isCC0pi1p_MINERvA(FitEvent *event, double enumin, double enumax); bool isCC1pi0_MINERvA_2015(FitEvent *event, double EnuMin, double EnuMax); bool isCC1pi0_MINERvA_2016(FitEvent *event, double EnuMin, double EnuMax); +bool isCC1pi0_MINERvA_nu(FitEvent *event, double EnuMin, double EnuMax); bool isCC0pi_MINERvAPTPZ(FitEvent *event, int nuPDG, double EnuMin = 0, double EnuMax = 0); bool isCC0pi_anti_MINERvAPTPZ(FitEvent* event, int nuPDG, double EnuMin = 0, double EnuMax = 0); } #endif diff --git a/src/Utils/FitUtils.cxx b/src/Utils/FitUtils.cxx index b22c89c..cc447c5 100644 --- a/src/Utils/FitUtils.cxx +++ b/src/Utils/FitUtils.cxx @@ -1,764 +1,830 @@ // Copyright 2016 L. Pickering, P Stowell, R. Terri, C. Wilkinson, C. Wret /******************************************************************************* * This file is part of NUISANCE. * * NUISANCE is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * NUISANCE is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with NUISANCE. If not, see . *******************************************************************************/ #include "FitUtils.h" /* MISC Functions */ //******************************************************************** double *FitUtils::GetArrayFromMap(std::vector invals, std::map inmap) { //******************************************************************** double *outarr = new double[invals.size()]; int count = 0; for (size_t i = 0; i < invals.size(); i++) { outarr[count++] = inmap[invals.at(i)]; } return outarr; } /* MISC Event */ //******************************************************************** // Returns the kinetic energy of a particle in GeV double FitUtils::T(TLorentzVector part) { //******************************************************************** double E_part = part.E() / 1000.; double p_part = part.Vect().Mag() / 1000.; double m_part = sqrt(E_part * E_part - p_part * p_part); double KE_part = E_part - m_part; return KE_part; }; //******************************************************************** // Returns the momentum of a particle in GeV double FitUtils::p(TLorentzVector part) { //******************************************************************** double p_part = part.Vect().Mag() / 1000.; return p_part; }; double FitUtils::p(FitParticle *part) { return FitUtils::p(part->fP); }; //******************************************************************** // Returns the angle between two particles in radians double FitUtils::th(TLorentzVector part1, TLorentzVector part2) { //******************************************************************** double th = part1.Vect().Angle(part2.Vect()); return th; }; double FitUtils::th(FitParticle *part1, FitParticle *part2) { return FitUtils::th(part1->fP, part2->fP); }; // T2K CC1pi+ helper functions // //******************************************************************** // Returns the angle between q3 and the pion defined in Raquel's CC1pi+ on CH // paper // Uses "MiniBooNE formula" for Enu, here called EnuCC1pip_T2K_MB //******************************************************************** double FitUtils::thq3pi_CC1pip_T2K(TLorentzVector pnu, TLorentzVector pmu, TLorentzVector ppi) { // Want this in GeV TVector3 p_mu = pmu.Vect() * (1. / 1000.); // Get the reconstructed Enu // We are not using Michel e sample, so we have pion kinematic information double Enu = EnuCC1piprec(pnu, pmu, ppi, true); // Get neutrino unit direction, multiply by reconstructed Enu TVector3 p_nu = pnu.Vect() * (1. / (pnu.Vect().Mag())) * Enu; TVector3 p_pi = ppi.Vect() * (1. / 1000.); // This is now in GeV TVector3 q3 = (p_nu - p_mu); // Want this in GeV double th_q3_pi = q3.Angle(p_pi); return th_q3_pi; } //******************************************************************** // Returns the q3 defined in Raquel's CC1pi+ on CH paper // Uses "MiniBooNE formula" for Enu //******************************************************************** double FitUtils::q3_CC1pip_T2K(TLorentzVector pnu, TLorentzVector pmu, TLorentzVector ppi) { // Can't use the true Enu here; need to reconstruct it // We do have Michel e- here so reconstruct Enu by "MiniBooNE formula" without // pion kinematics // The bool false refers to that we don't have pion kinematics // Last bool refers to if we have pion kinematic information or not double Enu = EnuCC1piprec(pnu, pmu, ppi, false); TVector3 p_mu = pmu.Vect() * (1. / 1000.); TVector3 p_nu = pnu.Vect() * (1. / pnu.Vect().Mag()) * Enu; double q3 = (p_nu - p_mu).Mag(); return q3; } //******************************************************************** // Returns the W reconstruction from Raquel CC1pi+ CH thesis // Uses the MiniBooNE formula Enu //******************************************************************** double FitUtils::WrecCC1pip_T2K_MB(TLorentzVector pnu, TLorentzVector pmu, TLorentzVector ppi) { double E_mu = pmu.E() / 1000.; double p_mu = pmu.Vect().Mag() / 1000.; double E_nu = EnuCC1piprec(pnu, pmu, ppi, false); double a1 = (E_nu + PhysConst::mass_neutron) - E_mu; double a2 = E_nu - p_mu; double wrec = sqrt(a1 * a1 - a2 * a2); return wrec; } //******************************************************** double FitUtils::ProtonQ2QErec(double pE, double binding) { //******************************************************** const double V = binding / 1000.; // binding potential const double mn = PhysConst::mass_neutron; // neutron mass const double mp = PhysConst::mass_proton; // proton mass const double mn_eff = mn - V; // effective proton mass const double pki = (pE / 1000.0) - mp; double q2qe = mn_eff * mn_eff - mp * mp + 2 * mn_eff * (pki + mp - mn_eff); return q2qe; }; //******************************************************************** double FitUtils::EnuQErec(TLorentzVector pmu, double costh, double binding, bool neutrino) { //******************************************************************** // Convert all values to GeV const double V = binding / 1000.; // binding potential const double mn = PhysConst::mass_neutron; // neutron mass const double mp = PhysConst::mass_proton; // proton mass double mN_eff = mn - V; double mN_oth = mp; if (!neutrino) { mN_eff = mp - V; mN_oth = mn; } double el = pmu.E() / 1000.; double pl = (pmu.Vect().Mag()) / 1000.; // momentum of lepton double ml = sqrt(el * el - pl * pl); // lepton mass double rEnu = (2 * mN_eff * el - ml * ml + mN_oth * mN_oth - mN_eff * mN_eff) / (2 * (mN_eff - el + pl * costh)); return rEnu; }; double FitUtils::Q2QErec(TLorentzVector pmu, double costh, double binding, bool neutrino) { double el = pmu.E() / 1000.; double pl = (pmu.Vect().Mag()) / 1000.; // momentum of lepton double ml = sqrt(el * el - pl * pl); // lepton mass double rEnu = EnuQErec(pmu, costh, binding, neutrino); double q2 = -ml * ml + 2. * rEnu * (el - pl * costh); return q2; }; double FitUtils::EnuQErec(double pl, double costh, double binding, bool neutrino) { if (pl < 0) return 0.; // Make sure nobody is silly double mN_eff = PhysConst::mass_neutron - binding / 1000.; double mN_oth = PhysConst::mass_proton; if (!neutrino) { mN_eff = PhysConst::mass_proton - binding / 1000.; mN_oth = PhysConst::mass_neutron; } double ml = PhysConst::mass_muon; double el = sqrt(pl * pl + ml * ml); double rEnu = (2 * mN_eff * el - ml * ml + mN_oth * mN_oth - mN_eff * mN_eff) / (2 * (mN_eff - el + pl * costh)); return rEnu; }; double FitUtils::Q2QErec(double pl, double costh, double binding, bool neutrino) { if (pl < 0) return 0.; // Make sure nobody is silly double ml = PhysConst::mass_muon; double el = sqrt(pl * pl + ml * ml); double rEnu = EnuQErec(pl, costh, binding, neutrino); double q2 = -ml * ml + 2. * rEnu * (el - pl * costh); return q2; }; //******************************************************************** // Reconstructs Enu for CC1pi0 // Very similar for CC1pi+ reconstruction double FitUtils::EnuCC1pi0rec(TLorentzVector pnu, TLorentzVector pmu, TLorentzVector ppi0) { //******************************************************************** double E_mu = pmu.E() / 1000; double p_mu = pmu.Vect().Mag() / 1000; double m_mu = sqrt(E_mu * E_mu - p_mu * p_mu); double th_nu_mu = pnu.Vect().Angle(pmu.Vect()); double E_pi0 = ppi0.E() / 1000; double p_pi0 = ppi0.Vect().Mag() / 1000; double m_pi0 = sqrt(E_pi0 * E_pi0 - p_pi0 * p_pi0); double th_nu_pi0 = pnu.Vect().Angle(ppi0.Vect()); const double m_n = PhysConst::mass_neutron; // neutron mass const double m_p = PhysConst::mass_proton; // proton mass double th_pi0_mu = ppi0.Vect().Angle(pmu.Vect()); double rEnu = (m_mu * m_mu + m_pi0 * m_pi0 + m_n * m_n - m_p * m_p - 2 * m_n * (E_pi0 + E_mu) + 2 * E_pi0 * E_mu - 2 * p_pi0 * p_mu * cos(th_pi0_mu)) / (2 * (E_pi0 + E_mu - p_pi0 * cos(th_nu_pi0) - p_mu * cos(th_nu_mu) - m_n)); return rEnu; }; //******************************************************************** // Reconstruct Q2 for CC1pi0 // Beware: uses true Enu, not reconstructed Enu double FitUtils::Q2CC1pi0rec(TLorentzVector pnu, TLorentzVector pmu, TLorentzVector ppi0) { //******************************************************************** double E_mu = pmu.E() / 1000.; // energy of lepton in GeV double p_mu = pmu.Vect().Mag() / 1000.; // momentum of lepton double m_mu = sqrt(E_mu * E_mu - p_mu * p_mu); // lepton mass double th_nu_mu = pnu.Vect().Angle(pmu.Vect()); // double rEnu = EnuCC1pi0rec(pnu, pmu, ppi0); //reconstructed neutrino energy // Use true neutrino energy double rEnu = pnu.E() / 1000.; double q2 = -m_mu * m_mu + 2. * rEnu * (E_mu - p_mu * cos(th_nu_mu)); return q2; }; //******************************************************************** // Reconstruct Enu for CC1pi+ // pionInfo reflects if we're using pion kinematics or not // In T2K CC1pi+ CH the Michel tag is used for pion in which pion kinematic info // is lost and Enu is reconstructed without pion kinematics double FitUtils::EnuCC1piprec(TLorentzVector pnu, TLorentzVector pmu, TLorentzVector ppi, bool pionInfo) { //******************************************************************** double E_mu = pmu.E() / 1000.; double p_mu = pmu.Vect().Mag() / 1000.; double m_mu = sqrt(E_mu * E_mu - p_mu * p_mu); double E_pi = ppi.E() / 1000.; double p_pi = ppi.Vect().Mag() / 1000.; double m_pi = sqrt(E_pi * E_pi - p_pi * p_pi); const double m_n = PhysConst::mass_neutron; // neutron/proton mass // should really take proton mass for proton interaction, neutron for neutron // interaction. However, difference is pretty much negligable here! // need this angle too double th_nu_pi = pnu.Vect().Angle(ppi.Vect()); double th_nu_mu = pnu.Vect().Angle(pmu.Vect()); double th_pi_mu = ppi.Vect().Angle(pmu.Vect()); double rEnu = -999; // If experiment doesn't have pion kinematic information (T2K CC1pi+ CH // example of this; Michel e sample has no directional information on pion) // We'll need to modify the reconstruction variables if (!pionInfo) { // Assumes that pion angle contribution contributes net zero // Also assumes the momentum of reconstructed pions when using Michel // electrons is 130 MeV // So need to redefine E_pi and p_pi // It's a little unclear what happens to the pmu . ppi term (4-vector); do // we include the angular contribution? // This below doesn't th_nu_pi = M_PI / 2.; p_pi = 0.130; E_pi = sqrt(p_pi * p_pi + m_pi * m_pi); // rEnu = (m_mu*m_mu + m_pi*m_pi - 2*m_n*(E_mu + E_pi) + 2*E_mu*E_pi - // 2*p_mu*p_pi) / (2*(E_mu + E_pi - p_mu*cos(th_nu_mu) - m_n)); } rEnu = (m_mu * m_mu + m_pi * m_pi - 2 * m_n * (E_pi + E_mu) + 2 * E_pi * E_mu - 2 * p_pi * p_mu * cos(th_pi_mu)) / (2 * (E_pi + E_mu - p_pi * cos(th_nu_pi) - p_mu * cos(th_nu_mu) - m_n)); return rEnu; }; //******************************************************************** // Reconstruct neutrino energy from outgoing particles; will differ from the // actual neutrino energy. Here we use assumption of a Delta resonance double FitUtils::EnuCC1piprecDelta(TLorentzVector pnu, TLorentzVector pmu) { //******************************************************************** const double m_Delta = PhysConst::mass_delta; // PDG value for Delta mass in GeV const double m_n = PhysConst::mass_neutron; // neutron/proton mass // should really take proton mass for proton interaction, neutron for neutron // interaction. However, difference is pretty much negligable here! double E_mu = pmu.E() / 1000; double p_mu = pmu.Vect().Mag() / 1000; double m_mu = sqrt(E_mu * E_mu - p_mu * p_mu); double th_nu_mu = pnu.Vect().Angle(pmu.Vect()); double rEnu = (m_Delta * m_Delta - m_n * m_n - m_mu * m_mu + 2 * m_n * E_mu) / (2 * (m_n - E_mu + p_mu * cos(th_nu_mu))); return rEnu; }; // MOVE TO T2K UTILS! //******************************************************************** // Reconstruct Enu using "extended MiniBooNE" as defined in Raquel's T2K TN // // Supposedly includes pion direction and binding energy of target nucleon // I'm not convinced (yet), maybe double FitUtils::EnuCC1piprec_T2K_eMB(TLorentzVector pnu, TLorentzVector pmu, TLorentzVector ppi) { //******************************************************************** // Unit vector for neutrino momentum TVector3 p_nu_vect_unit = pnu.Vect() * (1. / pnu.E()); double E_mu = pmu.E() / 1000.; TVector3 p_mu_vect = pmu.Vect() * (1. / 1000.); double E_pi = ppi.E() / 1000.; TVector3 p_pi_vect = ppi.Vect() * (1. / 1000.); double E_bind = 27. / 1000.; // This should be roughly correct for CH; but not clear! double m_p = PhysConst::mass_proton; // Makes life a little easier, gonna square this one double a1 = m_p - E_bind - E_mu - E_pi; // Just gets the magnitude square of the muon and pion momentum vectors double a2 = (p_mu_vect + p_pi_vect).Mag2(); // Gets the somewhat complicated scalar product between neutrino and // (p_mu+p_pi), scaled to Enu double a3 = p_nu_vect_unit * (p_mu_vect + p_pi_vect); double rEnu = (m_p * m_p - a1 * a1 + a2) / (2 * (m_p - E_bind - E_mu - E_pi + a3)); return rEnu; } //******************************************************************** // Reconstructed Q2 for CC1pi+ // // enuType describes how the neutrino energy is reconstructed // 0 uses true neutrino energy; case for MINERvA and MiniBooNE // 1 uses "extended MiniBooNE" reconstructed (T2K CH) // 2 uses "MiniBooNE" reconstructed (EnuCC1piprec with pionInfo = true) (T2K CH) // "MiniBooNE" reconstructed (EnuCC1piprec with pionInfo = false, the // case for T2K when using Michel tag) (T2K CH) // 3 uses Delta for reconstruction (T2K CH) double FitUtils::Q2CC1piprec(TLorentzVector pnu, TLorentzVector pmu, TLorentzVector ppi, int enuType, bool pionInfo) { //******************************************************************** double E_mu = pmu.E() / 1000.; // energy of lepton in GeV double p_mu = pmu.Vect().Mag() / 1000.; // momentum of lepton double m_mu = sqrt(E_mu * E_mu - p_mu * p_mu); // lepton mass double th_nu_mu = pnu.Vect().Angle(pmu.Vect()); // Different ways of reconstructing the neutrino energy; default is just to // use the truth (case 0) double rEnu = -999; switch (enuType) { case 0: // True neutrino energy, default; this is the case for when Q2 // defined as Q2 true (MiniBooNE, MINERvA) rEnu = pnu.E() / 1000.; break; case 1: // Extended MiniBooNE reconstructed, as defined by Raquel's CC1pi+ // CH T2K analysis // Definitely uses pion info :) rEnu = EnuCC1piprec_T2K_eMB(pnu, pmu, ppi); break; case 2: // MiniBooNE reconstructed, as defined by MiniBooNE and Raquel's // CC1pi+ CH T2K analysis and Linda's CC1pi+ H2O // Can have this with and without pion info, depending on if Michel tag // used (Raquel) rEnu = EnuCC1piprec(pnu, pmu, ppi, pionInfo); break; case 3: rEnu = EnuCC1piprecDelta(pnu, pmu); break; } // No need for default here since default value of enuType = 0, defined in // header double q2 = -m_mu * m_mu + 2. * rEnu * (E_mu - p_mu * cos(th_nu_mu)); return q2; }; //******************************************************************** // Returns the reconstructed W from a nucleon and an outgoing pion // // Could do this a lot more clever (pp + ppi).Mag() would do the job, but this // would be less instructive //******************************************************************** double FitUtils::MpPi(TLorentzVector pp, TLorentzVector ppi) { double E_p = pp.E(); double p_p = pp.Vect().Mag(); double m_p = sqrt(E_p * E_p - p_p * p_p); double E_pi = ppi.E(); double p_pi = ppi.Vect().Mag(); double m_pi = sqrt(E_pi * E_pi - p_pi * p_pi); double th_p_pi = pp.Vect().Angle(ppi.Vect()); // fairly easy thing to derive since bubble chambers measure the proton! double invMass = sqrt(m_p * m_p + m_pi * m_pi + 2 * E_p * E_pi - 2 * p_pi * p_p * cos(th_p_pi)); return invMass; }; //******************************************************** // Reconstruct the hadronic mass using neutrino and muon // Could technically do E_nu = EnuCC1pipRec(pnu,pmu,ppi) too, but this wwill be // reconstructed Enu; so gives reconstructed Wrec which most of the time isn't // used! // // Only MINERvA uses this so far; and the Enu is Enu_true // If we want W_true need to take initial state nucleon motion into account // Return value is in MeV!!! double FitUtils::Wrec(TLorentzVector pnu, TLorentzVector pmu) { //******************************************************** double E_mu = pmu.E(); double p_mu = pmu.Vect().Mag(); double m_mu = sqrt(E_mu * E_mu - p_mu * p_mu); double th_nu_mu = pnu.Vect().Angle(pmu.Vect()); // The factor of 1000 is necessary for downstream functions const double m_p = PhysConst::mass_proton * 1000; // MINERvA cut on W_exp which is tuned to W_true; so use true Enu from // generators double E_nu = pnu.E(); double w_rec = sqrt(m_p * m_p + m_mu * m_mu - 2 * m_p * E_mu + 2 * E_nu * (m_p - E_mu + p_mu * cos(th_nu_mu))); return w_rec; }; //******************************************************** // Reconstruct the true hadronic mass using the initial state and muon // Could technically do E_nu = EnuCC1pipRec(pnu,pmu,ppi) too, but this wwill be // reconstructed Enu; so gives reconstructed Wrec which most of the time isn't // used! // // No one seems to use this because it's fairly MC dependent! // Return value is in MeV!!! double FitUtils::Wtrue(TLorentzVector pnu, TLorentzVector pmu, TLorentzVector pnuc) { //******************************************************** // Could simply do the TLorentzVector operators here but this is more // instructive? // ... and prone to errors ... double E_mu = pmu.E(); double p_mu = pmu.Vect().Mag(); double m_mu = sqrt(E_mu * E_mu - p_mu * p_mu); double th_nu_mu = pnu.Vect().Angle(pmu.Vect()); double E_nuc = pnuc.E(); double p_nuc = pnuc.Vect().Mag(); double m_nuc = sqrt(E_nuc * E_nuc - p_nuc * p_nuc); double th_nuc_mu = pmu.Vect().Angle(pnuc.Vect()); double th_nu_nuc = pnu.Vect().Angle(pnuc.Vect()); double E_nu = pnu.E(); double w_rec = sqrt(m_nuc * m_nuc + m_mu * m_mu - 2 * E_nu * E_mu + 2 * E_nu * p_mu * cos(th_nu_mu) - 2 * E_nuc * E_mu + 2 * p_nuc * p_mu * cos(th_nuc_mu) + 2 * E_nu * E_nuc - 2 * E_nu * p_nuc * cos(th_nu_nuc)); return w_rec; }; double FitUtils::SumKE_PartVect(std::vector const fps) { double sum = 0.0; for (size_t p_it = 0; p_it < fps.size(); ++p_it) { sum += fps[p_it]->KE(); } return sum; } double FitUtils::SumTE_PartVect(std::vector const fps) { double sum = 0.0; for (size_t p_it = 0; p_it < fps.size(); ++p_it) { sum += fps[p_it]->E(); } return sum; } /* E Recoil */ double FitUtils::GetErecoil_TRUE(FitEvent *event) { // Get total energy of hadronic system. double Erecoil = 0.0; for (unsigned int i = 2; i < event->Npart(); i++) { // Only final state if (!event->PartInfo(i)->fIsAlive) continue; if (event->PartInfo(i)->fNEUTStatusCode != 0) continue; // Skip Lepton if (abs(event->PartInfo(i)->fPID) == abs(event->PartInfo(0)->fPID) - 1) continue; // Add Up KE of protons and TE of everything else if (event->PartInfo(i)->fPID == 2212 || event->PartInfo(i)->fPID == 2112) { Erecoil += fabs(event->PartInfo(i)->fP.E()) - fabs(event->PartInfo(i)->fP.Mag()); } else { Erecoil += event->PartInfo(i)->fP.E(); } } return Erecoil; } double FitUtils::GetErecoil_CHARGED(FitEvent *event) { // Get total energy of hadronic system. double Erecoil = 0.0; for (unsigned int i = 2; i < event->Npart(); i++) { // Only final state if (!event->PartInfo(i)->fIsAlive) continue; if (event->PartInfo(i)->fNEUTStatusCode != 0) continue; // Skip Lepton if (abs(event->PartInfo(i)->fPID) == abs(event->PartInfo(0)->fPID) - 1) continue; // Skip Neutral particles if (event->PartInfo(i)->fPID == 2112 || event->PartInfo(i)->fPID == 111 || event->PartInfo(i)->fPID == 22) continue; // Add Up KE of protons and TE of everything else if (event->PartInfo(i)->fPID == 2212) { Erecoil += fabs(event->PartInfo(i)->fP.E()) - fabs(event->PartInfo(i)->fP.Mag()); } else { Erecoil += event->PartInfo(i)->fP.E(); } } return Erecoil; } // MOVE TO MINERVA Utils! double FitUtils::GetErecoil_MINERvA_LowRecoil(FitEvent *event) { // Get total energy of hadronic system. double Erecoil = 0.0; for (unsigned int i = 2; i < event->Npart(); i++) { // Only final state if (!event->PartInfo(i)->fIsAlive) continue; if (event->PartInfo(i)->fNEUTStatusCode != 0) continue; // Skip Lepton if (abs(event->PartInfo(i)->fPID) == 13) continue; // Skip Neutrons particles if (event->PartInfo(i)->fPID == 2112) continue; int PID = event->PartInfo(i)->fPID; // KE of Protons and charged pions if (PID == 2212 or PID == 211 or PID == -211) { // Erecoil += FitUtils::T(event->PartInfo(i)->fP); Erecoil += fabs(event->PartInfo(i)->fP.E()) - fabs(event->PartInfo(i)->fP.Mag()); // Total Energy of non-neutrons // } else if (PID != 2112 and PID < 999 and PID != 22 and abs(PID) != // 14) { } else if (PID == 111 || PID == 11 || PID == -11 || PID == 22) { Erecoil += (event->PartInfo(i)->fP.E()); } } return Erecoil; } TVector3 GetVectorInTPlane(const TVector3 &inp, const TVector3 &planarNormal) { TVector3 pnUnit = planarNormal.Unit(); double inpProjectPN = inp.Dot(pnUnit); TVector3 InPlanarInput = inp - (inpProjectPN * pnUnit); return InPlanarInput; } TVector3 GetUnitVectorInTPlane(const TVector3 &inp, const TVector3 &planarNormal) { return GetVectorInTPlane(inp, planarNormal).Unit(); } Double_t GetDeltaPhiT(TVector3 const &V_lepton, TVector3 const &V_other, TVector3 const &Normal, bool PiMinus = false) { TVector3 V_lepton_T = GetUnitVectorInTPlane(V_lepton, Normal); TVector3 V_other_T = GetUnitVectorInTPlane(V_other, Normal); return PiMinus ? acos(V_lepton_T.Dot(V_other_T)) : (M_PI - acos(V_lepton_T.Dot(V_other_T))); } TVector3 GetDeltaPT(TVector3 const &V_lepton, TVector3 const &V_other, TVector3 const &Normal) { TVector3 V_lepton_T = GetVectorInTPlane(V_lepton, Normal); TVector3 V_other_T = GetVectorInTPlane(V_other, Normal); return V_lepton_T + V_other_T; } Double_t GetDeltaAlphaT(TVector3 const &V_lepton, TVector3 const &V_other, TVector3 const &Normal, bool PiMinus = false) { TVector3 DeltaPT = GetDeltaPT(V_lepton, V_other, Normal); return GetDeltaPhiT(V_lepton, DeltaPT, Normal, PiMinus); } double FitUtils::Get_STV_dpt(FitEvent *event, int ISPDG, bool Is0pi) { // Check that the neutrino exists if (event->NumISParticle(ISPDG) == 0) { return -9999; } // Return 0 if the proton or muon are missing if (event->NumFSParticle(2212) == 0 || event->NumFSParticle(ISPDG + ((ISPDG < 0) ? 1 : -1)) == 0) { return -9999; } // Now get the TVector3s for each particle TVector3 const &NuP = event->GetHMISParticle(14)->fP.Vect(); TVector3 const &LeptonP = event->GetHMFSParticle(ISPDG + ((ISPDG < 0) ? 1 : -1))->fP.Vect(); TVector3 HadronP = event->GetHMFSParticle(2212)->fP.Vect(); if (!Is0pi) { if (event->NumFSParticle(PhysConst::pdg_pions) == 0) { return -9999; } TLorentzVector pp = event->GetHMFSParticle(PhysConst::pdg_pions)->fP; HadronP += pp.Vect(); } return GetDeltaPT(LeptonP, HadronP, NuP).Mag(); } double FitUtils::Get_STV_dphit(FitEvent *event, int ISPDG, bool Is0pi) { // Check that the neutrino exists if (event->NumISParticle(ISPDG) == 0) { return -9999; } // Return 0 if the proton or muon are missing if (event->NumFSParticle(2212) == 0 || event->NumFSParticle(ISPDG + ((ISPDG < 0) ? 1 : -1)) == 0) { return -9999; } // Now get the TVector3s for each particle TVector3 const &NuP = event->GetHMISParticle(ISPDG)->fP.Vect(); TVector3 const &LeptonP = event->GetHMFSParticle(ISPDG + ((ISPDG < 0) ? 1 : -1))->fP.Vect(); TVector3 HadronP = event->GetHMFSParticle(2212)->fP.Vect(); if (!Is0pi) { if (event->NumFSParticle(PhysConst::pdg_pions) == 0) { return -9999; } TLorentzVector pp = event->GetHMFSParticle(PhysConst::pdg_pions)->fP; HadronP += pp.Vect(); } return GetDeltaPhiT(LeptonP, HadronP, NuP); } double FitUtils::Get_STV_dalphat(FitEvent *event, int ISPDG, bool Is0pi) { // Check that the neutrino exists if (event->NumISParticle(ISPDG) == 0) { return -9999; } // Return 0 if the proton or muon are missing if (event->NumFSParticle(2212) == 0 || event->NumFSParticle(ISPDG + ((ISPDG < 0) ? 1 : -1)) == 0) { return -9999; } // Now get the TVector3s for each particle TVector3 const &NuP = event->GetHMISParticle(ISPDG)->fP.Vect(); TVector3 const &LeptonP = event->GetHMFSParticle(ISPDG + ((ISPDG < 0) ? 1 : -1))->fP.Vect(); TVector3 HadronP = event->GetHMFSParticle(2212)->fP.Vect(); if (!Is0pi) { if (event->NumFSParticle(PhysConst::pdg_pions) == 0) { return -9999; } TLorentzVector pp = event->GetHMFSParticle(PhysConst::pdg_pions)->fP; HadronP += pp.Vect(); } return GetDeltaAlphaT(LeptonP, HadronP, NuP); } + +// Get Cos theta with Adler angles +double FitUtils::CosThAdler(TLorentzVector Pnu, TLorentzVector Pmu, TLorentzVector Ppi, TLorentzVector Pprot) { + // Get the "resonance" lorentz vector (pion proton system) + TLorentzVector Pres = Pprot + Ppi; + // Boost the particles into the resonance rest frame so we can define the x,y,z axis + Pnu.Boost(Pres.BoostVector()); + Pmu.Boost(-Pres.BoostVector()); + Ppi.Boost(-Pres.BoostVector()); + + // The z-axis is defined as the axis of three-momentum transfer, \vec{k} + // Also unit normalise the axis + TVector3 zAxis = (Pnu.Vect()-Pmu.Vect())*(1.0/((Pnu.Vect()-Pmu.Vect()).Mag())); + + // Then the angle between the pion in the "resonance" rest-frame and the z-axis is the theta Adler angle + double costhAdler = cos(Ppi.Vect().Angle(zAxis)); + + return costhAdler; +} + +// Get phi with Adler angles, a bit more complicated... +double FitUtils::PhiAdler(TLorentzVector Pnu, TLorentzVector Pmu, TLorentzVector Ppi, TLorentzVector Pprot) { + + // Get the "resonance" lorentz vector (pion proton system) + TLorentzVector Pres = Pprot + Ppi; + // Boost the particles into the resonance rest frame so we can define the x,y,z axis + Pnu.Boost(Pres.BoostVector()); + Pmu.Boost(-Pres.BoostVector()); + Ppi.Boost(-Pres.BoostVector()); + + // The z-axis is defined as the axis of three-momentum transfer, \vec{k} + // Also unit normalise the axis + TVector3 zAxis = (Pnu.Vect()-Pmu.Vect())*(1.0/((Pnu.Vect()-Pmu.Vect()).Mag())); + + // The y-axis is then defined perpendicular to z and muon momentum in the resonance frame + TVector3 yAxis = Pnu.Vect().Cross(Pmu.Vect()); + yAxis *= 1.0/double(yAxis.Mag()); + + // And the x-axis is then simply perpendicular to z and x + TVector3 xAxis = yAxis.Cross(zAxis); + xAxis *= 1.0/double(xAxis.Mag()); + + // Get the project of the pion momentum on to the zaxis + TVector3 PiVectZ = zAxis*Ppi.Vect().Dot(zAxis); + // The subtract the projection off the pion vector to get to get the plane + TVector3 PiPlane = Ppi.Vect() - PiVectZ; + + // Then finally construct phi as the angle between pion projection and x axis + double phi = -999.99; + + if (PiPlane.Y() > 0) { + phi = (180./M_PI)*PiPlane.Angle(xAxis); + } else if (PiPlane.Y() < 0) { + phi = (180./M_PI)*(2*M_PI-PiPlane.Angle(xAxis)); + } else if (PiPlane.Y() == 0) { + TRandom3 rand; + double randNo = rand.Rndm(); + if (randNo > 0.5) { + phi = (180./M_PI)*PiPlane.Angle(xAxis); + } else { + phi = (180./M_PI)*(2*M_PI-PiPlane.Angle(xAxis)); + } + } + + return phi; +} diff --git a/src/Utils/FitUtils.h b/src/Utils/FitUtils.h index e37700c..bcb5729 100644 --- a/src/Utils/FitUtils.h +++ b/src/Utils/FitUtils.h @@ -1,174 +1,177 @@ // Copyright 2016 L. Pickering, P Stowell, R. Terri, C. Wilkinson, C. Wret /******************************************************************************* * This file is part of NUISANCE. * * NUISANCE is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * NUISANCE is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with NUISANCE. If not, see . *******************************************************************************/ #ifndef FITUTILS_H_SEEN #define FITUTILS_H_SEEN #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "FitEvent.h" #include "TGraph.h" #include "TH2Poly.h" #include "FitEvent.h" #include "FitParameters.h" #include "FitLogger.h" /*! * \addtogroup Utils * @{ */ /// Functions needed by individual samples for calculating kinematic quantities. namespace FitUtils { /// Return a vector of all values saved in map double *GetArrayFromMap(std::vector invals, std::map inmap); /// Returns kinetic energy of particle double T(TLorentzVector part); /// Returns momentum of particle double p(TLorentzVector part); double p(FitParticle* part); /// Returns angle between particles (_NOT_ cosine!) double th(TLorentzVector part, TLorentzVector part2); double th(FitParticle* part1, FitParticle* part2); /// Hadronic mass reconstruction double Wrec(TLorentzVector pnu, TLorentzVector pmu); /// Hadronic mass true from initial state particles and muon; useful if the full /// FSI vectors aren't not saved and we for some reasons need W_true double Wtrue(TLorentzVector pnu, TLorentzVector pmu, TLorentzVector pnuc); double SumKE_PartVect(std::vector const fps); double SumTE_PartVect(std::vector const fps); /// Return E Hadronic for all FS Particles in Hadronic System double GetErecoil_TRUE(FitEvent *event); /// Return E Hadronic for all Charged FS Particles in Hadronic System double GetErecoil_CHARGED(FitEvent *event); /* CCQE MiniBooNE/MINERvA */ /// Function to calculate the reconstructed Q^{2}_{QE} double Q2QErec(TLorentzVector pmu, double costh, double binding, bool neutrino = true); /// Function returns the reconstructed E_{nu} values double EnuQErec(TLorentzVector pmu, double costh, double binding, bool neutrino = true); //! Function to calculate the reconstructed Q^{2}_{QE} double Q2QErec(double pl, double costh, double binding, bool neutrino = true); //! Function returns the reconstructed E_{nu} values double EnuQErec(double pl, double costh, double binding, bool neutrino = true); /* CCQE1p MINERvA */ /// Reconstruct Q2QE given just the maximum energy proton. double ProtonQ2QErec(double pE, double binding); /* E Recoil MINERvA */ double GetErecoil_MINERvA_LowRecoil(FitEvent *event); /* CC1pi0 MiniBooNE */ /// Reconstruct Enu from CCpi0 vectors and binding energy double EnuCC1pi0rec(TLorentzVector pnu, TLorentzVector pmu, TLorentzVector ppi0 = TLorentzVector(0, 0, 0, 0)); /// Reconstruct Q2 from CCpi0 vectors and binding energy double Q2CC1pi0rec(TLorentzVector pnu, TLorentzVector pmu, TLorentzVector ppi0 = TLorentzVector(0, 0, 0, 0)); /* CC1pi+ MiniBooNE */ /// returns reconstructed Enu a la MiniBooNE CCpi+ /// returns reconstructed Enu a la MiniBooNE CCpi+ // Also for when not having pion info (so when we have a Michel tag in T2K) double EnuCC1piprec(TLorentzVector pnu, TLorentzVector pmu, TLorentzVector ppip, bool pionInfo = true); /// returns reconstructed Enu assumming resonance interaction where intermediate /// resonance was a Delta double EnuCC1piprecDelta(TLorentzVector pnu, TLorentzVector pmu); /// returns reconstructed in a variety of flavours double Q2CC1piprec(TLorentzVector pnu, TLorentzVector pmu, TLorentzVector ppip, int enuType = 0, bool pionInfo = true); /* T2K CC1pi+ on CH */ double thq3pi_CC1pip_T2K(TLorentzVector pnu, TLorentzVector pmu, TLorentzVector ppi); double q3_CC1pip_T2K(TLorentzVector pnu, TLorentzVector pmu, TLorentzVector ppi); double WrecCC1pip_T2K_MB(TLorentzVector pnu, TLorentzVector pmu, TLorentzVector ppip); double EnuCC1piprec_T2K_eMB(TLorentzVector pnu, TLorentzVector pmu, TLorentzVector ppi); /* nucleon single pion */ double MpPi(TLorentzVector pp, TLorentzVector ppi); /// Gets delta p T as defined in Phys.Rev. C94 (2016) no.1, 015503 double Get_STV_dpt(FitEvent *event, int ISPDG, bool Is0pi); /// Gets delta phi T as defined in Phys.Rev. C94 (2016) no.1, 015503 double Get_STV_dphit(FitEvent *event, int ISPDG, bool Is0pi); /// Gets delta alpha T as defined in Phys.Rev. C94 (2016) no.1, 015503 double Get_STV_dalphat(FitEvent *event, int ISPDG, bool Is0pi); + +double CosThAdler(TLorentzVector Pnu, TLorentzVector Pmu, TLorentzVector Ppi, TLorentzVector Pprot); +double PhiAdler(TLorentzVector Pnu, TLorentzVector Pmu, TLorentzVector Ppi, TLorentzVector Pprot); } /*! @} */ #endif