13 0.25,0.25,0.25,0.25,0.25,0.25,0.25,
19 (TH2F* da,std::vector<TH2F*> templates,std::vector<TH2F*> analysis,
20 TH2F*
cv,std::vector<TH2F*> systs_up,
21 std::vector<TH2F*> systs_down,std::vector<TH2F*> systs_oneside,
22 std::vector<TH2F*> multiverse,std::vector<TH2F*> ppfx,
int numbins)
24 hTemplates2D(templates),
25 hAnalysis2D(analysis),
28 hSystsDown2D(systs_down),
29 hSystsOneSided(systs_oneside),
30 hSystsMultiverse(multiverse),
32 NumberTemplateBins(numbins)
35 hSignalWeights1D = (TH1F*)hCV2D->ProjectionX();
36 hSignalWeights1D->SetName(
"hSignalWeights2D");
37 hNumuCCWeights1D = (TH1F*)hCV2D->ProjectionX();
38 hNumuCCWeights1D->SetName(
"hNumuCCWeights2D");
39 hNCWeights1D = (TH1F*)hCV2D->ProjectionX();
40 hNCWeights1D->SetName(
"hNCWeights2D");
41 hSignalError1D = (TH1F*)hCV2D->ProjectionX();
42 hSignalError1D->SetName(
"hSignalError2D");
43 hNumuCCError1D = (TH1F*)hCV2D->ProjectionX();
44 hNumuCCError1D->SetName(
"hNumuCCError2D");
45 hNCError1D = (TH1F*)hCV2D->ProjectionX();
46 hNCError1D->SetName(
"hNCError2D");
47 hChiSquaredResults1D = (TH1F*)hCV2D->ProjectionX();
48 hChiSquaredResults1D->SetName(
"hChiSquaredResults");
79 (
hData2D->GetXaxis()->GetNbins() ==
hCV2D->GetXaxis()->GetNbins())
81 (
hData2D->GetYaxis()->GetNbins() ==
hCV2D->GetYaxis()->GetNbins()));
86 std::vector<TH2F*> hResults;
94 std::stringstream low_X;
95 low_X << std::fixed << std::setprecision(2) <<
96 hCV2D->GetXaxis()->GetBinLowEdge(binx);
97 std::stringstream hi_X;
98 hi_X << std::fixed << std::setprecision(2) <<
99 hCV2D->GetXaxis()->GetBinUpEdge(binx);
109 int signal_region_bin = 0;
110 if(useSlidingSignalRegion)
112 hCV2D->GetYaxis()->FindBin(sliding_signal_region[binx])-1;
115 hCV2D->GetYaxis()->FindBin(signal_region) - 1;
118 float signal_amount = 0;
119 float bkgd_amount = 0;
127 << signal_amount <<
"\t" << signal_amount/bkgd_amount
132 return ( ((signal_amount > 80) && (signal_amount/bkgd_amount > 0.25)) ||
133 (signal_amount > 300));
139 std::vector<TH1F*> hResults;
147 for(
int bin = 1;
bin <= hHolder->GetXaxis()->GetNbins();
bin++){
148 double err = hHolder->GetBinContent(
bin);
149 double cv =
hCV2D->GetBinContent(binx,
bin);
151 hHolder->SetBinContent(
bin, err-cv);
162 for(
int bin = 1;
bin <= hHolder_up->GetXaxis()->GetNbins();
bin++){
163 double hi = hHolder_up->GetBinContent(
bin);
164 double lo = hHolder_down->GetBinContent(
bin);
165 double cv =
hCV2D->GetBinContent(binx,
bin);
166 double value_hi =
fabs(hi - cv);
167 double value_lo =
fabs(lo - cv);
172 if(value_lo > value_hi) value =
fabs(lo - cv)*(hi-
cv)/
fabs(hi-cv);
173 else value = hi -
cv;
174 hHolder_up->SetBinContent(
bin, value);
181 hResults.push_back((TH1F*)hHolder_up->Clone(
ana::UniqueName().c_str()));
192 if(
hCV2D->Integral(binx,binx,1,
hCV2D->GetYaxis()->GetNbins()) ==
197 std::vector<TH1F*> hSystsShifts =
258 std::map<std::string,TH2F*> mapCovariances;
259 std::map<std::string,TH2F*> mapCorrelations;
269 std::vector<std::string> vSystNames = {
"ckv",
"calib_shape",
"light",
270 "calib",
"multiverse"};
272 for(
uint systNum = 0; systNum < hSystsShifts.size(); systNum++){
277 ";Template Bins;Template Bins; Covariance (Events^{2})",
278 numPIDBins,0,numPIDBins,
279 numPIDBins,0,numPIDBins);
283 ";Template Bins;Template Bins; Correlation",
284 numPIDBins,0,numPIDBins,
285 numPIDBins,0,numPIDBins);
289 double diffi=hSystsShifts[systNum]->GetBinContent(
i+1);
291 double diffj=hSystsShifts[systNum]->GetBinContent(
j+1);
292 double this_value = (diffi)*(diffj);
293 hCovHolder->SetBinContent(
i+1,
j+1,this_value);
300 hCovHolder->SetBinContent(
j+1,
i+1,
301 hCovHolder->GetBinContent(
i+1,
j+1));
302 hCorHolder->SetBinContent(
j+1,
i+1,hCovHolder->GetBinContent(
i+1,
j+1)/(
sqrt(hCovHolder->GetBinContent(
j+1,
j+1)*hCovHolder->GetBinContent(
i+1,
i+1))));
303 hCorHolder->SetBinContent(
i+1,
j+1,hCovHolder->GetBinContent(
i+1,
j+1)/(
sqrt(hCovHolder->GetBinContent(
j+1,
j+1)*hCovHolder->GetBinContent(
i+1,
i+1))));
318 ";Template Bins;Template Bins; Covariance (Events^{2})",
319 numPIDBins,0,numPIDBins,
320 numPIDBins,0,numPIDBins);
324 ";Template Bins;Template Bins; Correlation",
325 numPIDBins,0,numPIDBins,
326 numPIDBins,0,numPIDBins);
329 std::vector<TH1D*> hMultiverseHistsGENIE;
335 float ymax = hHolder->Integral();
337 float cvmax = hCV_Tester->Integral();
338 hHolder->Scale(cvmax/ymax);
339 hMultiverseHistsGENIE.push_back(hHolder);
344 for(
uint iu = 1; iu < hMultiverseHistsGENIE.size(); iu++){
346 double xi=hMultiverseHistsGENIE[iu]->GetBinContent(
i+1);
348 double ximean=hMultiverseHistsGENIE[0]->GetBinContent(
i+1);
350 double xj=hMultiverseHistsGENIE[iu]->GetBinContent(
j+1);
352 double xjmean=hMultiverseHistsGENIE[0]->GetBinContent(
j+1);
353 double current_value = hCovHolder->GetBinContent(
i+1,
j+1);
354 double this_value = (xi-ximean)*(xj-xjmean);
355 hCovHolder->SetBinContent(
i+1,
j+1,current_value+this_value);
363 hCovHolder->Scale(1.0/(N-1.0));
366 hCovHolder->SetBinContent(
j+1,
i+1,
367 hCovHolder->GetBinContent(
i+1,
j+1));
368 hCorHolder->SetBinContent(
j+1,
i+1,hCovHolder->GetBinContent(
i+1,
j+1)/(
sqrt(hCovHolder->GetBinContent(
j+1,
j+1)*hCovHolder->GetBinContent(
i+1,
i+1))));
369 hCorHolder->SetBinContent(
i+1,
j+1,hCovHolder->GetBinContent(
i+1,
j+1)/(
sqrt(hCovHolder->GetBinContent(
j+1,
j+1)*hCovHolder->GetBinContent(
i+1,
i+1))));
384 ";Template Bins;Template Bins; Covariance (Events^{2})",
385 numPIDBins,0,numPIDBins,
386 numPIDBins,0,numPIDBins);
390 ";Template Bins;Template Bins; Correlation",
391 numPIDBins,0,numPIDBins,
392 numPIDBins,0,numPIDBins);
395 std::vector<TH1D*> hMultiverseHistsPPFX;
401 float ymax = hHolder->Integral();
403 float cvmax = hCV_Tester->Integral();
404 hHolder->Scale(cvmax/ymax);
405 hMultiverseHistsPPFX.push_back(hHolder);
410 for(
uint iu = 1; iu < hMultiverseHistsPPFX.size(); iu++){
412 double xi=hMultiverseHistsPPFX[iu]->GetBinContent(
i+1);
414 double ximean=hMultiverseHistsPPFX[0]->GetBinContent(
i+1);
416 double xj=hMultiverseHistsPPFX[iu]->GetBinContent(
j+1);
418 double xjmean=hMultiverseHistsPPFX[0]->GetBinContent(
j+1);
419 double current_value = hCovHolder->GetBinContent(
i+1,
j+1);
420 double this_value = (xi-ximean)*(xj-xjmean);
421 hCovHolder->SetBinContent(
i+1,
j+1,current_value+this_value);
427 hCovHolder->Scale(1.0/(N-1.0));
430 hCovHolder->SetBinContent(
j+1,
i+1,
431 hCovHolder->GetBinContent(
i+1,
j+1));
432 hCorHolder->SetBinContent(
j+1,
i+1,hCovHolder->GetBinContent(
i+1,
j+1)/(
sqrt(hCovHolder->GetBinContent(
j+1,
j+1)*hCovHolder->GetBinContent(
i+1,
i+1))));
433 hCorHolder->SetBinContent(
i+1,
j+1,hCovHolder->GetBinContent(
i+1,
j+1)/(
sqrt(hCovHolder->GetBinContent(
j+1,
j+1)*hCovHolder->GetBinContent(
i+1,
i+1))));
444 for(
auto pair: mapCovariances){
445 hCovariance->Add(pair.second);
453 if((
i ==
j) && hCovariance->GetBinContent(
i+1,
j+1) < 1)
457 for(
uint i = 0;
i < hSystsShifts.size();
i++){
458 delete hSystsShifts[
i];
460 hSystsShifts.clear();
470 +
hCV2D->GetBinError(binx,
i)*
hCV2D->GetBinError(binx,
i);
490 Double_t &
f, Double_t *
par,
531 if( (data < 20) || (signal + cc0pi + other < 20)){
533 FitVector2[
i][0] = 0;
537 FitVector[0][
i] = ( data - (signal_par*signal + cc0pi_par*cc0pi + other_par*
other));
539 FitVector2[
i][0] = ( data - (signal_par*signal + cc0pi_par*cc0pi + other_par*
other));
552 float chisquare = Chi2(0,0);
557 Double_t &
f, Double_t *
par,
596 if( (data < 20) || (signal + cc0pi + other < 20)){
598 FitVector2[
i][0] = 0;
602 FitVector[0][
i] = ( data - (signal_par*signal + bkgd_par*(cc0pi +
other) ));
604 FitVector2[
i][0] = ( data -(signal_par*signal + bkgd_par*(cc0pi +
other) ));
609 float chisquare = Chi2(0,0);
637 for(
int zbin = 1; zbin <=
hAnalysis2D[0]->GetYaxis()->GetNbins();zbin++){
638 float nsig =
hAnalysis2D[1]->GetBinContent(binx,zbin);
639 float ncc0pi =
hAnalysis2D[2]->GetBinContent(binx,zbin);
640 float nother =
hAnalysis2D[3]->GetBinContent(binx,zbin);
685 binErr2 = nsig + ncc0pi + nother;
691 float binCont = nsig;
709 hAnalysis2D[numChn]->SetBinContent(binx,zbin,binCont);
710 hAnalysis2D[numChn]->SetBinError(binx,zbin,binErr);
713 float binCont = ncc0pi *
cc0pi_wei.first;
716 hAnalysis2D[numChn]->SetBinContent(binx,zbin,binCont);
717 hAnalysis2D[numChn]->SetBinError(binx,zbin,binErr);
720 float binCont = nother *
other_wei.first;
723 hAnalysis2D[numChn]->SetBinContent(binx,zbin,binCont);
724 hAnalysis2D[numChn]->SetBinError(binx,zbin,binErr);
730 std::vector<std::pair<double,double>>
733 std::vector<std::pair<double,double>> vResult;
747 std::vector<TH1F*> hResults;
762 TH2F* hResultBad =
new TH2F(
ana::UniqueName().c_str(),
";",1,0,1,1,0,1);
763 if(
hCV2D->Integral(binx,binx,1,
hCV2D->GetYaxis()->GetNbins()) ==
764 0)
return hResultBad;
768 std::vector<TH1F*> hSystsShifts =
771 std::vector<std::pair<std::string,std::vector<double>>> hSysts_Pairs;
773 std::vector<std::string>
names = {
"Cherenkov",
"Cal. Shape",
774 "Light",
"Cal. Norm.",
777 TRandom *r0 =
new TRandom();
782 for(
int j = 0;
j < (
int)hSystsShifts.size();
j++){
783 std::vector<double> vPseudoExp;
784 for(
int i = 0;
i < 100;
i++){
790 double wei = r0->Gaus(0,1);
791 hClone->Add(hSystsShifts[
j],wei);
792 vPseudoExp.push_back(hClone->Integral());
798 std::vector<double> vPPFX_Values;
799 std::vector<double> vGenie_Values;
804 if(systNum < 100) vPPFX_Values.push_back(integral);
805 else vGenie_Values.push_back(integral);
815 const int systNum = (
int)hSysts_Pairs.size();
816 double syst_covariance[systNum][systNum];
817 for(
int i = 0;
i < systNum;
i++){
818 for(
int j = 0;
j < systNum;
j++){
819 double numerator_term = 0;
820 double counter = hSysts_Pairs[
i].second.size();
821 for(
int nUniv = 0; nUniv <
counter; nUniv++){
822 double term_i = hSysts_Pairs[
i].second[nUniv] -
823 hCV2D->Integral(binx,binx,1,-1);
824 double term_j = hSysts_Pairs[
j].second[nUniv] -
825 hCV2D->Integral(binx,binx,1,-1);
826 numerator_term += term_i*term_j * (1.0/(counter - 1));
835 systNum,0,systNum,systNum,0,systNum);
838 for(
int i = 0;
i < systNum;
i++){
839 for(
int j = 0;
j < systNum;
j++){
840 hResult->SetBinContent(
i+1,
j+1,syst_covariance[
i][
j]);
841 hResult->GetXaxis()->SetBinLabel(
i+1,names[
i].c_str());
842 hResult->GetYaxis()->SetBinLabel(j+1,names[j].c_str());
846 hResult->GetZaxis()->SetTitle(
"Covariance (Events^{2})");
878 std::vector<TH2F*> badentry;
885 std::vector<TH2F*> hResults =
889 for(
int xbin = 1; xbin <= hResults[0]->GetXaxis()->GetNbins(); xbin++){
906 bool shouldSwitchTo2VarFit =
false;
913 std::vector<float> signal_starting_points;
914 std::vector<float> other_starting_points;
915 std::vector<float> cc0pi_starting_points;
917 for(
float fillVal = 0.6; fillVal < 1.8; fillVal+=0.15){
918 signal_starting_points.push_back(fillVal);
919 other_starting_points.push_back(fillVal);
920 cc0pi_starting_points.push_back(fillVal);
933 std::vector<std::pair<float,std::vector<float>>>
934 pairFitResultStartPts3Var;
936 std::vector<std::vector<double>> vUncertainties;
937 std::vector<std::vector<double>> vNormalizations;
939 std::cout << signal_starting_points.size() <<
940 "\t" << cc0pi_starting_points.size() <<
"\t" 941 << other_starting_points.size() <<
std::endl;
948 for(
auto nuestart : signal_starting_points){
949 if(shouldSwitchTo2VarFit)
continue;
950 for(
auto numustart : other_starting_points){
951 for(
auto ncstart : cc0pi_starting_points){
955 TMinuit *gMinuit =
new TMinuit(3);
956 gMinuit->SetPrintLevel(-1);
963 gMinuit->mnexcm(
"SET ERR", arglist,1,ierflg);
967 gMinuit->mnparm(0,
"Other Scaling",
968 numustart, 0.15, 0, 0, ierflg);
969 gMinuit->mnparm(1,
"Signal Scaling",
970 nuestart, 0.15, 0, 0, ierflg);
971 gMinuit->mnparm(2,
"CC0Pi Scaling",
972 ncstart, 0.15, 0, 0, ierflg);
977 gMinuit->mnexcm(
"SIMPLEX", arglist, 2, ierflg);
982 gMinuit->mnexcm(
"SET STR", arglist,1,ierflg);
984 gMinuit->mnexcm(
"SIMPLEX", arglist, 3, ierflg);
985 gMinuit->mnexcm(
"MIGRAD", arglist, 5, ierflg);
987 gMinuit->mnexcm(
"HESSE", arglist,4,ierflg);
988 gMinuit->mnexcm(
"MINOS", arglist, 4, ierflg);
998 gMinuit->GetParameter(0,fParNewStart,fParNewErr);
999 vstart[0] = fParNewStart;
1000 verror[0] = fParNewErr;
1001 gMinuit->GetParameter(1,fParNewStart,fParNewErr);
1002 vstart[1] = fParNewStart;
1003 verror[1] = fParNewErr;
1004 gMinuit->GetParameter(2,fParNewStart,fParNewErr);
1005 vstart[2] = fParNewStart;
1006 verror[2] = fParNewErr;
1009 bool troubleFitting =
false;
1010 Double_t
fmin = 0,fedm = 0,ferrdef = 0;
1011 Int_t npari =0, nparx = 0, istat = 0;
1012 gMinuit->mnstat(fmin,fedm,ferrdef,npari,nparx,istat);
1014 Double_t corr_mat_test[3][3];
1015 gMinuit->mnemat(*corr_mat_test,3);
1019 corr_mat_test[0][1]/(
pow(corr_mat_test[0][0],0.5) *
1020 pow(corr_mat_test[1][1],0.5));
1022 corr_mat_test[0][2]/((
pow(corr_mat_test[0][0],0.5) *
1023 pow(corr_mat_test[2][2],0.5)));
1025 corr_mat_test[1][2]/((
pow(corr_mat_test[1][1],0.5) *
1026 pow(corr_mat_test[2][2],0.5)));
1029 if(istat != 3 || verror[0]/vstart[0] > 1.0 ||
1030 verror[1]/vstart[1] > 1.0 || verror[2]/vstart[2] > 1.0 ||
1031 vstart[0] < 0 || vstart[1] < 0 || vstart[2] < 0 ||
1032 vstart[0] > 2 || vstart[1] > 2 || vstart[2] > 2 ||
1033 fabs(corr_01) > 0.92 ||
fabs(corr_02) > 0.92 ||
1034 fabs(corr_12) > 0.92)
1035 troubleFitting =
true;
1044 std::vector<double> vUncert = {verror[0]/vstart[0],
1045 verror[1]/vstart[1],
1046 verror[2]/vstart[2]};
1047 std::vector<double> vNormal = {vstart[0],vstart[1],vstart[2]};
1049 std::vector<float> vStarts = {nuestart,numustart,ncstart};
1051 if(!troubleFitting){
1055 vUncertainties.push_back(vUncert);
1056 vNormalizations.push_back(vNormal);
1065 if(pairFitResultStartPts3Var.size()==0){
1069 if(printVerbose && pairFitResultStartPts3Var.size()!=0){
1072 for(
uint i = 0;
i < pairFitResultStartPts3Var.size();
i++){
1073 std::cout << pairFitResultStartPts3Var[
i].first <<
"\t" 1074 << vNormalizations[
i][0] <<
"\t" 1075 << vUncertainties[
i][0] <<
"\t" 1076 << vNormalizations[
i][1] <<
"\t" 1077 << vUncertainties[
i][1] <<
"\t" 1078 << vNormalizations[
i][0] <<
"\t" 1079 << vUncertainties[
i][2] <<
"\t" <<
std::endl;
1090 if(pairFitResultStartPts3Var.size() > 0){
1092 for(
uint i = 0;
i < pairFitResultStartPts3Var.size();
i++)
1094 if(
floor(pairFitResultStartPts3Var[saveIndex].first*1e5) >
1095 floor(pairFitResultStartPts3Var[
i].first*1e5))
1098 chisquared = pairFitResultStartPts3Var[saveIndex].first;
1100 if(
floor(pairFitResultStartPts3Var[saveIndex].first*1e5) ==
1101 floor(pairFitResultStartPts3Var[
i].first*1e5))
1103 if(vUncertainties[
i][0] <
1104 vUncertainties[saveIndex][0] &&
1105 vUncertainties[
i][1] <
1106 vUncertainties[saveIndex][1] &&
1107 vUncertainties[
i][2] <
1108 vUncertainties[saveIndex][2])
1116 else shouldSwitchTo2VarFit =
true;
1119 if(!shouldSwitchTo2VarFit){
1122 TMinuit *gMinuit =
new TMinuit(3);
1123 gMinuit->SetPrintLevel(-1);
1124 if(printVerbose)gMinuit->SetPrintLevel(1);
1126 Double_t arglist[4];
1129 gMinuit->mnexcm(
"SET ERR", arglist, 1, ierflg);
1132 double vstart[3] = {0.8,0.9,1.15};
1133 double verror[3] = {0,0,0};
1134 double vstep[3] = {0.15,0.15,0.15};
1137 gMinuit->mnparm(0,
"Other Scaling",
1138 pairFitResultStartPts3Var[saveIndex].
second[1],
1139 vstep[0], 0, 0, ierflg);
1140 gMinuit->mnparm(1,
"Signal Scaling",
1141 pairFitResultStartPts3Var[saveIndex].second[0],
1142 vstep[1], 0, 0, ierflg);
1143 gMinuit->mnparm(2,
"CC0Pi Scaling",
1144 pairFitResultStartPts3Var[saveIndex].second[2],
1145 vstep[2], 0, 0, ierflg);
1150 gMinuit->mnexcm(
"SIMPLEX", arglist, 2, ierflg);
1154 gMinuit->mnexcm(
"SET STR", arglist,1,ierflg);
1155 gMinuit->mnexcm(
"SIMPLEX", arglist, 3, ierflg);
1156 gMinuit->mnexcm(
"MIGRAD", arglist, 5, ierflg);
1158 Double_t
fmin = 0,fedm = 0,ferrdef = 0;
1159 Int_t npari =0, nparx = 0, istat = 0;
1160 gMinuit->mnstat(fmin,fedm,ferrdef,npari,nparx,istat);
1162 gMinuit->mnexcm(
"HESSE", arglist,4,ierflg);
1164 gMinuit->mnexcm(
"MINOS", arglist, 4, ierflg);
1167 double fParNewStart;
1169 gMinuit->GetParameter(0,fParNewStart,fParNewErr);
1170 vstart[0] = fParNewStart;
1171 verror[0] = fParNewErr;
1172 gMinuit->GetParameter(1,fParNewStart,fParNewErr);
1173 vstart[1] = fParNewStart;
1174 verror[1] = fParNewErr;
1175 gMinuit->GetParameter(2,fParNewStart,fParNewErr);
1176 vstart[2] = fParNewStart;
1177 verror[2] = fParNewErr;
1182 gMinuit->mnstat(fmin,fedm,ferrdef,npari,nparx,istat);
1184 Double_t corr_mat_test[3][3];
1185 gMinuit->mnemat(*corr_mat_test,3);
1189 corr_mat_test[0][1]/(
pow(corr_mat_test[0][0],0.5) *
1190 pow(corr_mat_test[1][1],0.5));
1192 corr_mat_test[0][2]/((
pow(corr_mat_test[0][0],0.5) *
1193 pow(corr_mat_test[2][2],0.5)));
1195 corr_mat_test[1][2]/((
pow(corr_mat_test[1][1],0.5) *
1196 pow(corr_mat_test[2][2],0.5)));
1199 if(istat != 3 || verror[0]/vstart[0] > 1.0 ||
1200 verror[1]/vstart[1] > 1.0 || verror[2]/vstart[2] > 1.0 ||
1201 vstart[0] < 0 || vstart[1] < 0 || vstart[2] < 0 ||
1202 vstart[0] > 2 || vstart[1] > 2 || vstart[2] > 2 ||
1203 fabs(corr_01) > 0.92 ||
fabs(corr_02) > 0.92 ||
1204 fabs(corr_12) > 0.92)
1205 shouldSwitchTo2VarFit =
true;
1209 Double_t emat[3][3];
1210 gMinuit->mnemat(*emat,3);
1229 std::vector<std::pair<float,std::vector<float>>>
1230 pairFitResultStartPts2Var;
1232 std::vector<std::vector<double>> vUncertainties2Var;
1233 std::vector<std::vector<double>> vNormalizations2Var;
1236 std::vector<float> background_starting_points;
1238 for(
float fillVal = 0.6; fillVal < 1.8; fillVal+=0.15){
1239 signal_starting_points.push_back(fillVal);
1240 background_starting_points.push_back(fillVal);
1249 if(shouldSwitchTo2VarFit){
1255 for(
auto nuestart : signal_starting_points){
1256 for(
auto bkgstart : background_starting_points){
1257 bool isGoodResult =
true;
1258 Double_t
fmin = 0,fedm = 0,ferrdef = 0;
1259 Int_t npari =0, nparx = 0, istat = 0;
1260 Double_t arglist[4];
1262 TMinuit *jMinuit =
new TMinuit(2);
1263 jMinuit->SetPrintLevel(-1);
1266 jMinuit->mnexcm(
"SET ERR", arglist, 1, ierflg);
1268 jMinuit->mnparm(0,
"Background Scaling",bkgstart,
1270 jMinuit->mnparm(1,
"Signal Scaling",
1271 nuestart, 0.15, 0,0, ierflg);
1276 jMinuit->mnexcm(
"SIMPLEX", arglist, 2, ierflg);
1277 jMinuit->mnexcm(
"MIGRAD", arglist, 3, ierflg);
1281 jMinuit->mnexcm(
"SET STR", arglist,1,ierflg);
1283 jMinuit->mnexcm(
"SIMPLEX", arglist, 3, ierflg);
1284 jMinuit->mnexcm(
"MIGRAD", arglist, 5, ierflg);
1285 jMinuit->mnexcm(
"SEEk", arglist, 3, ierflg);
1286 jMinuit->mnexcm(
"HESSE", arglist,4,ierflg);
1287 jMinuit->mnexcm(
"MINOS", arglist, 4, ierflg);
1290 jMinuit->mnstat(fmin,fedm,ferrdef,npari,nparx,istat);
1300 if(istat != 3) isGoodResult =
false;
1305 Double_t corr_mat_test[2][2];
1306 jMinuit->mnemat(*corr_mat_test,2);
1311 corr_mat_test[0][1]/(
pow(corr_mat_test[0][0],0.5) *
1312 pow(corr_mat_test[1][1],0.5));
1314 if(
fabs(corr_01) > 0.93) isGoodResult =
false;
1318 std::vector<double> vUncert;
1319 std::vector<double> vNormal;
1320 for(
int i = 0;
i < 2;
i++){
1321 double fParNormalization,fParError;
1322 jMinuit->GetParameter(
i,fParNormalization,fParError);
1323 vUncert.push_back(fParError);
1324 vNormal.push_back(fParNormalization);
1326 if(!isGoodResult)
break;
1329 std::vector<float> vStart = {nuestart,bkgstart};
1334 vUncertainties2Var.push_back(vUncert);
1335 vNormalizations2Var.push_back(vNormal);
1344 std::cout<<
"Number of saved good 2Var fits: "<<pairFitResultStartPts2Var.size()<<
std::endl;
1348 for(
uint i = 0;
i < pairFitResultStartPts2Var.size();
i++){
1349 std::cout << pairFitResultStartPts2Var[
i].first <<
"\t" 1350 << vNormalizations2Var[
i][0] <<
"\t" 1351 << vUncertainties2Var[
i][0] <<
"\t" 1352 << vNormalizations2Var[
i][1] <<
"\t" 1364 TH1F* hUncertaintyAverage =
new TH1F(
"hUncertaintyAverage",
1365 ";Signal Fit Uncertainty;Count",
1369 if(shouldSwitchTo2VarFit){
1370 for(
uint i = 0;
i < pairFitResultStartPts2Var.size();
i++)
1372 hUncertaintyAverage->Fill(vUncertainties2Var[
i][1]);
1373 if(
floor(pairFitResultStartPts2Var[saveIndex].first*1e4) >
1374 floor(pairFitResultStartPts2Var[i].first*1e4))
1377 chisquared = pairFitResultStartPts2Var[saveIndex].first;
1378 shouldSwitchTo2VarFit =
true;
1380 if(
floor(pairFitResultStartPts2Var[saveIndex].first*1e4) ==
1381 floor(pairFitResultStartPts2Var[i].first*1e4))
1383 if(vUncertainties2Var[i][0] <
1384 vUncertainties2Var[saveIndex][0] &&
1385 vUncertainties2Var[i][1] <
1386 vUncertainties2Var[saveIndex][1])
1396 if(shouldSwitchTo2VarFit)
1397 std::cout << hUncertaintyAverage->GetMean() <<
"\t" <<
1398 hUncertaintyAverage->GetStdDev() <<
"\t" <<
1399 vUncertainties2Var[saveIndex][1] <<
std::endl;
1401 delete hUncertaintyAverage;
1404 if(shouldSwitchTo2VarFit){
1409 double vstart[3] = {0.8,0.9,1.15};
1410 double verror[3] = {0,0,0};
1411 double vstep[3] = {0.15,0.15,0.15};
1413 Double_t arglist[4];
1415 TMinuit *jMinuit =
new TMinuit(2);
1416 jMinuit->SetPrintLevel(-1);
1417 if(printVerbose)jMinuit->SetPrintLevel(1);
1420 jMinuit->mnexcm(
"SET ERR", arglist, 1, ierflg);
1422 double nue_start = 1.0;
1423 double bkgd_start = 1.0;
1425 if(pairFitResultStartPts2Var.size() > 0){
1426 nue_start = pairFitResultStartPts2Var[saveIndex].second[1];
1427 bkgd_start = pairFitResultStartPts2Var[saveIndex].second[0];
1433 jMinuit->mnparm(0,
"Background Scaling",
1435 vstep[0], 0, 0, ierflg);
1436 jMinuit->mnparm(1,
"Signal Scaling",
1438 vstep[1], 0, 0, ierflg);
1443 jMinuit->mnexcm(
"SIMPLEX", arglist, 2, ierflg);
1444 jMinuit->mnexcm(
"MIGRAD", arglist, 3, ierflg);
1448 jMinuit->mnexcm(
"SET STR", arglist,1,ierflg);
1450 jMinuit->mnexcm(
"SIMPLEX",arglist, 3, ierflg);
1452 for(
int i = 0;
i < 2;
i++){
1453 double fParNewStart = 0;
1454 double fParNewErr = 0;
1455 jMinuit->GetParameter(
i,fParNewStart,fParNewErr);
1456 std::cout <<
"SIMPLEX" <<
"\t" << fParNewStart <<
"\t" 1459 jMinuit->mnexcm(
"MIGRAD", arglist, 5, ierflg);
1460 for(
int i = 0;
i < 2;
i++){
1461 double fParNewStart = 0;
1462 double fParNewErr = 0;
1463 jMinuit->GetParameter(
i,fParNewStart,fParNewErr);
1464 std::cout <<
"MIGRAD" <<
"\t" << fParNewStart <<
"\t" 1467 jMinuit->mnexcm(
"SEEk", arglist, 3, ierflg);
1468 for(
int i = 0;
i < 2;
i++){
1469 double fParNewStart = 0;
1470 double fParNewErr = 0;
1471 jMinuit->GetParameter(
i,fParNewStart,fParNewErr);
1472 std::cout <<
"SEEK" <<
"\t" << fParNewStart <<
"\t" 1483 jMinuit->mnexcm(
"MINOS", arglist, 4, ierflg);
1484 for(
int i = 0;
i < 2;
i++){
1485 double fParNewStart = 0;
1486 double fParNewErr = 0;
1487 jMinuit->GetParameter(
i,fParNewStart,fParNewErr);
1488 std::cout <<
"MINOS" <<
"\t" << fParNewStart <<
"\t" 1495 double fParNewStart;
1497 jMinuit->GetParameter(0,fParNewStart,fParNewErr);
1498 vstart[0] = fParNewStart;
1499 verror[0] = fParNewErr;
1500 jMinuit->GetParameter(0,fParNewStart,fParNewErr);
1501 vstart[2] = fParNewStart;
1502 verror[2] = fParNewErr;
1503 jMinuit->GetParameter(1,fParNewStart,fParNewErr);
1504 vstart[1] = fParNewStart;
1505 verror[1] = fParNewErr;
1507 Double_t emat[2][2];
1508 jMinuit->mnemat(*emat,2);
1523 "\tMade it Here, 2Var Fit true" <<
std::endl;
1568 return hResultsPostFit;
1577 std::vector<TH1F*> hResults =
1581 std::vector<std::pair<double,double>> vWeights =
1583 for(
int bin = 1;
bin <= hResults[0]->GetXaxis()->GetNbins();
bin++){
1584 double signal = hResults[1]->GetBinContent(
bin) *vWeights[0].first;
1585 double cc0pi = hResults[2]->GetBinContent(
bin) *vWeights[1].first;
1586 double other = hResults[3]->GetBinContent(
bin) *vWeights[2].first;
1588 hResults[0]->SetBinContent(
bin,signal+cc0pi+other);
1589 hResults[1]->SetBinContent(
bin,signal);
1590 hResults[2]->SetBinContent(
bin,cc0pi);
1591 hResults[3]->SetBinContent(
bin,other);
1593 hResults[0]->SetTitle(caption.c_str());
1597 std::vector<std::pair<TH2F*,TH2F*>>
1600 std::vector<std::pair<TH2F*,TH2F*>> hResults;
1602 std::vector<TH2F*> vAnalysisBinning =
1605 TH2F* hTemplate = (TH2F*)vAnalysisBinning.front()->ProjectionX();
1606 hTemplate->SetName(
"hFitWeightsErrorTemplate");
1608 TH2F* hSignalNorm = (TH2F*)hTemplate->Clone(
ana::UniqueName().c_str());
1609 TH2F* hSignalError = (TH2F*)hTemplate->Clone(
ana::UniqueName().c_str());
1612 TH2F* hNumuError = (TH2F*)hTemplate->Clone(
ana::UniqueName().c_str());
1617 for(
int xbin = 1; xbin <= hTemplate->GetXaxis()->GetNbins(); xbin++){
1619 std::vector<std::pair<double,double>> fit_results =
1621 hSignalNorm->SetBinContent(xbin,fit_results[0].first);
1622 hSignalError->SetBinContent(xbin,fit_results[0].
second);
1623 hNumuNorm->SetBinContent(xbin,fit_results[1].first);
1624 hNumuError->SetBinContent(xbin,fit_results[1].second);
1625 hNCNorm->SetBinContent(xbin,fit_results[2].first);
1626 hNCError->SetBinContent(xbin,fit_results[2].second);
1640 std::vector<TH1F*> hResults =
1644 hResults[0]->SetTitle(caption.c_str());
1652 std::vector<TH1F*> hPIDAxis =
1657 ";Template Bins;Template Bins;Covariance (Events^{2})",
1658 hPIDAxis[0]->
GetXaxis()->GetNbins(),0,
1659 hPIDAxis[0]->
GetXaxis()->GetNbins(),
1660 hPIDAxis[0]->
GetXaxis()->GetNbins(),0,
1661 hPIDAxis[0]->
GetXaxis()->GetNbins());
1663 for(
int i = 1;
i <= hCovariance->GetXaxis()->GetNbins();
i++){
1664 for(
int j = 1;
j <= hCovariance->GetYaxis()->GetNbins();
j++){
1667 hCovariance->SetBinContent(
i,
j,val);
1674 hCovariance->SetTitle(caption.c_str());
1685 std::vector<TH1F*> hPIDAxis =
1690 ";Template Bins;Template Bins;Covariance (Events^{2})",
1691 hPIDAxis[0]->
GetXaxis()->GetNbins(),0,
1692 hPIDAxis[0]->
GetXaxis()->GetNbins(),
1693 hPIDAxis[0]->
GetXaxis()->GetNbins(),0,
1694 hPIDAxis[0]->
GetXaxis()->GetNbins());
1696 TH2F* hCorrelation =
1698 ";Template Bins;Template Bins;Correlation",
1699 hPIDAxis[0]->
GetXaxis()->GetNbins(),0,
1700 hPIDAxis[0]->
GetXaxis()->GetNbins(),
1701 hPIDAxis[0]->
GetXaxis()->GetNbins(),0,
1702 hPIDAxis[0]->
GetXaxis()->GetNbins());
1704 for(
int i = 1;
i <= hCovariance->GetXaxis()->GetNbins();
i++){
1705 for(
int j = 1;
j <= hCovariance->GetYaxis()->GetNbins();
j++){
1708 hCovariance->SetBinContent(
i,
j,val);
1712 for(
int i = 1;
i <= hCovariance->GetXaxis()->GetNbins();
i++){
1713 for(
int j = 1;
j <= hCovariance->GetYaxis()->GetNbins();
j++){
1714 double val = hCovariance->GetBinContent(
i,
j);
1715 double dia_i =
sqrt(hCovariance->GetBinContent(
i,
i));
1716 double dia_j =
sqrt(hCovariance->GetBinContent(
j,
j));
1718 if(val==0||dia_i==0||dia_j==0) hCorrelation->SetBinContent(
i,
j,0);
1719 else hCorrelation->SetBinContent(
i,
j,val/(dia_i*dia_j));
1725 hCorrelation->SetTitle(caption.c_str());
1727 return ((TH2F*)hCorrelation->Clone(
"hCorrelation"));
1746 for(
int i = 1;
i <= hCovariance->GetXaxis()->GetNbins();
i++){
1747 for(
int j = 1;
j <= hCovariance->GetYaxis()->GetNbins();
j++){
1748 double val = hCovariance->GetBinContent(
i,
j);
1749 double dia_i =
sqrt(hCovariance->GetBinContent(
i,
i));
1750 double dia_j =
sqrt(hCovariance->GetBinContent(
j,
j));
1752 hResult->SetBinContent(
i,
j,val/(dia_i*dia_j));
1756 hResult->GetZaxis()->SetTitle(
"Correlation");
1767 if(
hCV2D->Integral(binx,binx,1,
hCV2D->GetYaxis()->GetNbins()) ==
1772 std::vector<TH1F*> hSystsShifts =
1777 std::map<std::string,TH2F*> mapCovariances;
1778 std::map<std::string,TH2F*> mapCorrelations;
1779 std::map<std::string,TH2F*> mapCovariances2;
1780 std::map<std::string,TH2F*> mapCorrelations2;
1790 std::vector<std::string> vSystNames = {
"ckv",
"calib_shape",
"light",
1791 "calib",
"multiverse"};
1792 TRandom *r0 =
new TRandom(0);
1794 for(
uint systNum = 0; systNum < hSystsShifts.size(); systNum++){
1796 if(vSystNames[systNum] ==
"ckv"){
1804 hCV1D->GetYaxis()->SetTitle(
"Events/8.09 #times 10^{20} (POT)");
1805 hCV1D->GetYaxis()->SetTitle(
"Template Bins");
1807 hCV1D->Draw(
"hist");
1808 hSyst->Draw(
"hist same");
1810 leg->AddEntry(hSyst,
"Sigma Shift",
"fl");
1811 leg->AddEntry(hCV1D,
"Central Value",
"fl");
1813 c1->SaveAs(Form(
"%s%s_%s_%i_only.png",
"Covariance/",
1814 "standard_template", vSystNames[systNum].c_str(),
1820 if(vSystNames[systNum] ==
"calib_shape"){
1828 hCV1D->GetYaxis()->SetTitle(
"Events/8.09 #times 10^{20} (POT)");
1829 hCV1D->GetYaxis()->SetTitle(
"Template Bins");
1831 hCV1D->Draw(
"hist");
1832 hSyst->Draw(
"hist same");
1834 leg->AddEntry(hSyst,
"Sigma Shift",
"fl");
1835 leg->AddEntry(hCV1D,
"Central Value",
"fl");
1837 c1->SaveAs(Form(
"%s%s_%s_%i_only.png",
"Covariance/",
1838 "standard_template", vSystNames[systNum].c_str(),
1844 else if(vSystNames[systNum] ==
"light"){
1856 hCV1D->GetYaxis()->SetTitle(
"Events/8.09 #times 10^{20} (POT)");
1857 hCV1D->GetYaxis()->SetTitle(
"Template Bins");
1859 hCV1D->Draw(
"hist");
1860 hSystsUp->Draw(
"hist same");
1861 hSystsDown->Draw(
"hist same");
1863 leg->AddEntry(hSystsUp,
"Sigma Up",
"fl");
1864 leg->AddEntry(hSystsDown,
"Sigma Down",
"fl");
1865 leg->AddEntry(hCV1D,
"Central Value",
"fl");
1867 c1->SaveAs(Form(
"%s%s_%s_%i_only.png",
"Covariance/",
1868 "standard_template", vSystNames[systNum].c_str(),
1874 else if(vSystNames[systNum] ==
"calib"){
1886 hCV1D->GetYaxis()->SetTitle(
"Events/8.09 #times 10^{20} (POT)");
1887 hCV1D->GetYaxis()->SetTitle(
"Template Bins");
1889 hCV1D->Draw(
"hist");
1890 hSystsUp->Draw(
"hist same");
1891 hSystsDown->Draw(
"hist same");
1893 leg->AddEntry(hSystsUp,
"Sigma Up",
"fl");
1894 leg->AddEntry(hSystsDown,
"Sigma Down",
"fl");
1895 leg->AddEntry(hCV1D,
"Central Value",
"fl");
1897 c1->SaveAs(Form(
"%s%s_%s_%i_only.png",
"Covariance/",
1898 "standard_template", vSystNames[systNum].c_str(),
1907 std::vector<TH1F*> vPseudoExp;
1908 for(
int i = 0;
i < 1000;
i++){
1911 double wei = r0->Gaus(0,1);
1912 hClone->Add(hSystsShifts[systNum],wei);
1913 vPseudoExp.push_back(hClone);
1921 hCV1D->Draw(
"hist");
1922 for(
uint i = 0;
i < vPseudoExp.size();
i++){
1923 vPseudoExp[
i]->SetLineColorAlpha(
kBlue+3,0.50);
1924 vPseudoExp[
i]->Draw(
"hist same");
1926 hCV1D->Draw(
"hist same");
1927 c1->SaveAs(Form(
"%s%s_%s_%i_only.png",
"Covariance/",
1928 "standard_template_pseudo_exp",
1929 vSystNames[systNum].c_str(),binx));
1934 ";Template Bins;Template Bins; Covariance (Events^{2})",
1935 numPIDBins,0,numPIDBins,
1936 numPIDBins,0,numPIDBins);
1940 ";Template Bins;Template Bins; Correlation",
1941 numPIDBins,0,numPIDBins,
1942 numPIDBins,0,numPIDBins);
1946 ";Template Bins;Template Bins; Covariance (Events^{2})",
1947 numPIDBins,0,numPIDBins,
1948 numPIDBins,0,numPIDBins);
1952 ";Template Bins;Template Bins; Correlation",
1953 numPIDBins,0,numPIDBins,
1954 numPIDBins,0,numPIDBins);
1958 for(
uint iu = 0; iu < vPseudoExp.size(); iu++){
1960 double xi=vPseudoExp[iu]->GetBinContent(
i+1);
1961 double ximean=hCV1D->GetBinContent(
i+1);
1963 double xj=vPseudoExp[iu]->GetBinContent(
j+1);
1964 double xjmean=hCV1D->GetBinContent(
j+1);
1965 double current_value = hCovHolder->GetBinContent(
i+1,
j+1);
1966 double this_value = (xi-ximean)*(xj-xjmean);
1967 hCovHolder->SetBinContent(
i+1,
j+1,current_value+this_value);
1969 hCovHolder2->SetBinContent(
i+1,
j+1,hSystsShifts[systNum]->GetBinContent(
i+1)*hSystsShifts[systNum]->GetBinContent(
j+1));
1977 const double N=double(vPseudoExp.size());
1980 hCovHolder->Scale(1.0/(N-1.0));
1984 hCovHolder->SetBinContent(
j+1,
i+1,
1985 hCovHolder->GetBinContent(
i+1,
j+1));
1986 hCovHolder2->SetBinContent(
j+1,
i+1,
1987 hCovHolder2->GetBinContent(
i+1,
j+1));
1988 hCorHolder->SetBinContent(
j+1,
i+1,hCovHolder->GetBinContent(
i+1,
j+1)/(
sqrt(hCovHolder->GetBinContent(
j+1,
j+1)*hCovHolder->GetBinContent(
i+1,
i+1))));
1989 hCorHolder->SetBinContent(
i+1,
j+1,hCovHolder->GetBinContent(
i+1,
j+1)/(
sqrt(hCovHolder->GetBinContent(
j+1,
j+1)*hCovHolder->GetBinContent(
i+1,
i+1))));
1990 hCorHolder2->SetBinContent(
j+1,
i+1,hCovHolder2->GetBinContent(
i+1,
j+1)/(
sqrt(hCovHolder2->GetBinContent(
j+1,
j+1)*hCovHolder2->GetBinContent(
i+1,
i+1))));
1991 hCorHolder2->SetBinContent(
i+1,
j+1,hCovHolder2->GetBinContent(
i+1,
j+1)/(
sqrt(hCovHolder2->GetBinContent(
j+1,
j+1)*hCovHolder2->GetBinContent(
i+1,
i+1))));
2013 ";Template Bins;Template Bins; Covariance (Events^{2})",
2014 numPIDBins,0,numPIDBins,
2015 numPIDBins,0,numPIDBins);
2019 ";Template Bins;Template Bins; Correlation",
2020 numPIDBins,0,numPIDBins,
2021 numPIDBins,0,numPIDBins);
2024 std::vector<TH1D*> hMultiverseHistsGENIE;
2030 float ymax = hHolder->Integral();
2032 float cvmax = hCV_Tester->Integral();
2033 hHolder->Scale(cvmax/ymax);
2034 hMultiverseHistsGENIE.push_back(hHolder);
2039 for(
uint iu = 1; iu < hMultiverseHistsGENIE.size(); iu++){
2041 double xi=hMultiverseHistsGENIE[iu]->GetBinContent(
i+1);
2043 double ximean=hMultiverseHistsGENIE[0]->GetBinContent(
i+1);
2045 double xj=hMultiverseHistsGENIE[iu]->GetBinContent(
j+1);
2047 double xjmean=hMultiverseHistsGENIE[0]->GetBinContent(
j+1);
2048 double current_value = hCovHolder->GetBinContent(
i+1,
j+1);
2049 double this_value = (xi-ximean)*(xj-xjmean);
2050 hCovHolder->SetBinContent(
i+1,
j+1,current_value+this_value);
2077 hCovHolder->Scale(1.0/(N-1.0));
2080 hCovHolder->SetBinContent(
j+1,
i+1,
2081 hCovHolder->GetBinContent(
i+1,
j+1));
2082 hCorHolder->SetBinContent(
j+1,
i+1,hCovHolder->GetBinContent(
i+1,
j+1)/(
sqrt(hCovHolder->GetBinContent(
j+1,
j+1)*hCovHolder->GetBinContent(
i+1,
i+1))));
2083 hCorHolder->SetBinContent(
i+1,
j+1,hCovHolder->GetBinContent(
i+1,
j+1)/(
sqrt(hCovHolder->GetBinContent(
j+1,
j+1)*hCovHolder->GetBinContent(
i+1,
i+1))));
2100 for(
auto pair: mapCovariances){
2102 if(binx==1) {pair.second->SetMinimum(-1000000);pair.second->SetMaximum(4000000);}
2103 if(binx==2) {pair.second->SetMinimum(-2000000);pair.second->SetMaximum(6000000);}
2104 if(binx==3) {pair.second->SetMinimum(-750000);pair.second->SetMaximum(1600000);}
2105 if(binx==4) {pair.second->SetMinimum(-210000);pair.second->SetMaximum(400000);}
2106 if(binx==5) {pair.second->SetMinimum(-50000);pair.second->SetMaximum(150000);}
2107 if(binx==6) {pair.second->SetMinimum(-9000);pair.second->SetMaximum(18000);}
2108 pair.second->Draw(
"COLZ");
2110 c3->SetRightMargin(0.15);
2111 c3->SaveAs(Form(
"%s%s_%s_%i_only.png",
"Covariance/",
2112 "covariance_single",
2113 pair.first.c_str(),
binx));
2117 if(binx==1) {mapCovariances2[pair.first.c_str()]->SetMinimum(-1300000);mapCovariances2[pair.first.c_str()]->SetMaximum(4000000);}
2118 if(binx==2) {mapCovariances2[pair.first.c_str()]->SetMinimum(-2000000);mapCovariances2[pair.first.c_str()]->SetMaximum(6000000);}
2119 if(binx==3) {mapCovariances2[pair.first.c_str()]->SetMinimum(-750000);mapCovariances2[pair.first.c_str()]->SetMaximum(1600000);}
2120 if(binx==4) {mapCovariances2[pair.first.c_str()]->SetMinimum(-250000);mapCovariances2[pair.first.c_str()]->SetMaximum(300000);}
2121 if(binx==5) {mapCovariances2[pair.first.c_str()]->SetMinimum(-50000);mapCovariances2[pair.first.c_str()]->SetMaximum(100000);}
2122 if(binx==6) {mapCovariances2[pair.first.c_str()]->SetMinimum(-12000);mapCovariances2[pair.first.c_str()]->SetMaximum(18000);}
2124 mapCovariances2[pair.first.c_str()]->Draw(
"COLZ");
2126 c4->SetRightMargin(0.15);
2127 c4->SaveAs(Form(
"%s%s_%s_%i_only_2.png",
"Covariance/",
2128 "covariance_single",
2129 pair.first.c_str(),
binx));
2132 if(pair.first==
"multiverse")
continue;
2134 c5->SetRightMargin(0.15);
2135 TH2F* diff_hist = (TH2F*) mapCovariances2[pair.first.c_str()]->Clone(
ana::UniqueName().c_str());
2136 diff_hist->SetTitle(
";Template Bins;Template Bins;Percent Diff (%)");
2137 diff_hist->Add(pair.second,-1);
2138 diff_hist->Divide( (TH2F*) mapCovariances2[pair.first.c_str()]);
2140 diff_hist->Scale(100);
2141 diff_hist->Draw(
"colz");
2142 c5->SaveAs(Form(
"%s%s_%s_%i_only.png",
"Covariance/",
2143 "covariance_percentdiff_single",
2144 pair.first.c_str(),
binx));
2151 for(
auto pair: mapCorrelations){
2153 if(pair.first==
"multiverse") pair.second->SetMinimum(-1);
2154 pair.second->Draw(
"COLZ");
2157 c3->SetRightMargin(0.15);
2158 c3->SaveAs(Form(
"%s%s_%s_%i_only.png",
"Covariance/",
2159 "correlation_single",
2160 pair.first.c_str(),
binx));
2169 for(
auto pair: mapCovariances){
2173 hCovariance->Add(pair.second);
2175 hCovariance->Draw(
"COLZ");
2176 c3->SaveAs(Form(
"%s_%i.png",output.c_str(),
binx));
2186 if((
i ==
j) && hCovariance->GetBinContent(
i+1,
j+1) < 1)
2191 for(
uint i = 0;
i < hSystsShifts.size();
i++){
2192 delete hSystsShifts[
i];
2194 hSystsShifts.clear();
std::string GetAnalysisBinCaption(int binx)
fvar< T > fmin(const fvar< T > &x1, const fvar< T > &x2)
TSpline3 lo("lo", xlo, ylo, 12,"0")
Cuts and Vars for the 2020 FD DiF Study.
double myFunction3Vars(double numu_par, double nue_par, double nc_par)
fvar< T > fabs(const fvar< T > &x)
const float sliding_signal_region[13]
double StatCovarianceMatrix[25][25]
double GetStatisticCovarianceMatrixValue(int binx, int biny)
void PrintValueHolders(int binx)
NumuCCIncPionTemplateFitter * Fitter_obj
TH2F * getCovarianceMatrixTemplateBins(int binx)
double covariance(Eigen::VectorXd x, Eigen::VectorXd y)
TH2F * getCorrelationBetweenSysts(int binx)
TH2F * FillCovarianceBetweenSysts(int binx)
static void fcn3Var(Int_t &npar, Double_t *gin, Double_t &f, Double_t *par, Int_t iflag)
std::pair< Spectrum *, CheatDecomp * > make_pair(SpectrumLoaderBase &loader_data, SpectrumLoaderBase &loader_mc, HistAxis *axis, Cut *cut, const SystShifts &shift, const Var &wei)
void SetBinWeightsAndErrors2D(int binx)
static void fcn2Var(Int_t &npar, Double_t *gin, Double_t &f, Double_t *par, Int_t iflag)
void FillCovarianceMatrixExtra(int binx)
const XML_Char const XML_Char * data
TSpline3 hi("hi", xhi, yhi, 18,"0")
const bool useSlidingSignalRegion
const float signal_region
double myFunction2Vars(double bkgd_par, double nue_par)
double GetCovarianceMatrixValue(int binx, int biny)
const XML_Char int const XML_Char * value
void PropagateFitUncertainty3D(int binx)
std::vector< TH2F * > GetAnalysisTemplates()
std::pair< double, double > other_wei
correl_xv GetXaxis() -> SetDecimals()
const std::string cv[Ncv]
TH2F * getCovarianceBetweenSysts(int binx)
NumuCCIncPionTemplateFitter(TH2F *da, std::vector< TH2F * > templates, std::vector< TH2F * > analysis, TH2F *cv, std::vector< TH2F * > systs_up, std::vector< TH2F * > systs_down, std::vector< TH2F * > systs_oneside, std::vector< TH2F * > multiverse, std::vector< TH2F * > ppfx, int numbins)
std::vector< std::pair< TH2F *, TH2F * > > getFitNormalizationAndErrors()
std::vector< TH2F * > hSystsDown2D
void FillValueHolders(int binx)
std::vector< TH2F * > hSystsOneSided
TH1F * hChiSquaredResults1D
bool CheckIfBinShouldBeUsed(int binx)
TMatrixT< double > TMatrixD
std::vector< TH2F * > hAnalysis2D
std::vector< TH1F * > GetTemplates(int binx, std::string name)
std::vector< std::pair< double, double > > GetTemplateWeightsAndErrors(int binx)
std::vector< TH1F * > getPIDTemplates(int binx)
std::vector< TH1F * > getPIDFitTemplates(int binx)
std::vector< TH1F * > CalculateOneSigmaShift(int binx)
Eigen::ArrayXd ProjectionY(const Eigen::MatrixXd &mat)
Helper for WeightingVariable.
std::pair< double, double > signal_wei
fvar< T > floor(const fvar< T > &x)
void FillStatisticCovarianceMatrix(int binx)
std::vector< TH2F * > hSystsUp2D
TH2F * getCorrelationMatrixTemplateBins(int binx)
double SignalLike_Values[25]
double fit_covariance_matrix[3][3]
void FillCovarianceMatrix(int binx)
TLegend * AutoPlaceLegend(double dx, double dy, double yPin)
Create a legend, maximizing distance from all histograms.
std::pair< double, double > cc0pi_wei
std::string UniqueName()
Return a different string each time, for creating histograms.
double CovarianceMatrix[25][25]
std::vector< TH2F * > doFullFit()
std::vector< TH2F * > hTemplates2D
std::vector< TH2F * > hSystsPPFX
const int NumberTemplateBins
std::vector< TH2F * > hSystsMultiverse