Page MenuHomeHEPForge

No OneTemporary

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 <http://www.gnu.org/licenses/>.
*******************************************************************************/
/**
* 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 <http://www.gnu.org/licenses/>.
*******************************************************************************/
/**
* 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 <http://www.gnu.org/licenses/>.
*******************************************************************************/
#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 <http://www.gnu.org/licenses/>.
*******************************************************************************/
#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 <http://www.gnu.org/licenses/>.
################################################################################
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 <http://www.gnu.org/licenses/>.
*******************************************************************************/
#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<EventRecord*>(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<EventRecord*>(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<GHepRecord*>(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<GHepRecord*>(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 <http://www.gnu.org/licenses/>.
*******************************************************************************/
#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 <http://www.gnu.org/licenses/>.
*******************************************************************************/
#include "FitUtils.h"
/*
MISC Functions
*/
//********************************************************************
double *FitUtils::GetArrayFromMap(std::vector<std::string> invals,
std::map<std::string, double> 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<FitParticle *> 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<FitParticle *> 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 <http://www.gnu.org/licenses/>.
*******************************************************************************/
#ifndef FITUTILS_H_SEEN
#define FITUTILS_H_SEEN
#include <math.h>
#include <stdlib.h>
#include <unistd.h>
#include <ctime>
#include <iostream>
#include <numeric>
#include <TChain.h>
#include <TFile.h>
#include <TH1D.h>
#include <TH2D.h>
#include <THStack.h>
#include <TKey.h>
#include <TLegend.h>
#include <TList.h>
#include <TLorentzVector.h>
#include <TObjArray.h>
#include <TROOT.h>
#include <TRandom3.h>
#include <TTree.h>
#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<std::string> invals,
std::map<std::string, double> 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<FitParticle *> const fps);
double SumTE_PartVect(std::vector<FitParticle *> 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

File Metadata

Mime Type
text/x-diff
Expires
Wed, May 14, 11:38 AM (10 h, 44 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
5084781
Default Alt Text
(159 KB)

Event Timeline