Page Menu
Home
HEPForge
Search
Configure Global Search
Log In
Files
F11222241
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
159 KB
Subscribers
None
View Options
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
Details
Attached
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)
Attached To
rNUISANCEGIT nuisancegit
Event Timeline
Log In to Comment