706 if (compIndices.size() == 0 && !
optHelper.IgnoreNoMatch())
707 printf(
"WARNING: empty vector passed to getQuadratureSumUncertainty\n");
712 if (compIndices.size() == 1 && (compIndices.at(0) == 8888 || compIndices.at(0) == 9999))
714 if (compIndices.at(0) == 8888)
719 else if (compIndices.size() == 1 && (compIndices.at(0) == 6666 || compIndices.at(0) == 7777))
721 std::vector<jet::CompScaleVar::TypeEnum> scaleVars =
optHelper.GetScaleVars();
722 if (scaleVars.size() != 1)
723 printf(
"WARNING: cannot parse multiple scale variable resolutions at once, using index 0");
727 if (compIndices.at(0) == 6666)
732 else if (compIndices.size() == 1 && !
optHelper.AbsValue())
735 const double inverted = compIndices.at(0) < 0 ? -1 : 1;
737 for (
size_t iScaleVar = 0; iScaleVar <
optHelper.GetScaleVars().size(); ++iScaleVar)
739 unc = factor*localUnc*inverted;
743 for (
size_t iComp = 0; iComp < compIndices.size(); ++iComp)
745 if (compIndices.at(iComp) == 8888 || compIndices.at(iComp) == 9999)
continue;
746 if (compIndices.at(iComp) == 6666 || compIndices.at(iComp) == 7777)
continue;
750 for (
size_t iScaleVar = 0; iScaleVar <
optHelper.GetScaleVars().size(); ++iScaleVar)
752 const double inverted = compIndices.at(iComp) < 0 ? -1 : 1;
754 unc += factor*factor*localUnc*localUnc*inverted;
771 std::vector<TString> provNames;
776 const TString namePrefix =
optHelper.GetNamePrefix();
780 std::vector<int> indices;
781 for (
size_t iSubComp = 0; iSubComp < subComponents.size(); ++iSubComp)
784 const bool beginWild = subComponents.at(iSubComp).BeginsWith(
"#");
785 const bool endWild = subComponents.at(iSubComp).EndsWith(
"#");
786 const bool midWild = !beginWild && !endWild && subComponents.at(iSubComp).Contains(
"#");
787 const bool ALLCOMP = !subComponents.at(iSubComp).CompareTo(
"total",TString::kIgnoreCase) || !subComponents.at(iSubComp).CompareTo(
"#");
788 const bool CALOWEIGHT = !subComponents.at(iSubComp).CompareTo(
"caloweight",TString::kIgnoreCase);
789 const bool TAWEIGHT = !subComponents.at(iSubComp).CompareTo(
"taweight",TString::kIgnoreCase);
790 const bool NOMRESMC = !subComponents.at(iSubComp).CompareTo(
"nominalresmc",TString::kIgnoreCase);
791 const bool NOMRESDATA = !subComponents.at(iSubComp).CompareTo(
"nominalresdata",TString::kIgnoreCase);
792 const bool inverted = subComponents.at(iSubComp).BeginsWith(
"INV__");
793 const TString toFind = midWild ? subComponents.at(iSubComp) : TString(subComponents.at(iSubComp)).ReplaceAll(
"#",
"").ReplaceAll(
"INV__",
"");
796 std::vector<TString> tokensToFind;
798 if (midWild && tokensToFind.size() != 2)
800 printf(
"Only one middle-wildcard is currently supported\n");
801 printf(
"Cannot handle string: %s\n",toFind.Data());
806 bool foundIndex =
false;
807 for (
size_t iProvComp = 0; iProvComp < provNames.size(); ++iProvComp)
816 indices.push_back(iProvComp);
821 indices.push_back(8888);
827 indices.push_back(9999);
833 indices.push_back(6666);
839 indices.push_back(7777);
847 if ( ( provNames.at(iProvComp).BeginsWith(tokensToFind.at(0),TString::kIgnoreCase) || (namePrefix !=
"" && provNames.at(iProvComp).BeginsWith(namePrefix+tokensToFind.at(0),TString::kIgnoreCase)) ) && provNames.at(iProvComp).EndsWith(tokensToFind.at(1),TString::kIgnoreCase))
851 indices.push_back(iProvComp);
854 else if (!beginWild && !endWild)
857 if (!provNames.at(iProvComp).CompareTo(toFind,TString::kIgnoreCase) || ( namePrefix !=
"" && !provNames.at(iProvComp).CompareTo(namePrefix+toFind,TString::kIgnoreCase) ) )
861 indices.push_back(iProvComp);
865 else if (beginWild && !endWild)
868 if (provNames.at(iProvComp).EndsWith(toFind,TString::kIgnoreCase))
872 indices.push_back(iProvComp);
875 else if (!beginWild && endWild)
878 if (provNames.at(iProvComp).BeginsWith(toFind,TString::kIgnoreCase) || ( namePrefix !=
"" && provNames.at(iProvComp).BeginsWith(namePrefix+toFind,TString::kIgnoreCase) ) )
882 indices.push_back(iProvComp);
889 if (provNames.at(iProvComp).Contains(toFind,TString::kIgnoreCase))
893 indices.push_back(iProvComp);
898 printf(
"WARNING: Failed to find match for sub/component: %s\n",toFind.Data());
900 indices.back() *= -1;
903 if (!indices.size() && !
optHelper.IgnoreNoMatch())
905 printf(
"Failed to find any indices for component: %s\n",compName.Data());
938void MakeUncertaintyPlots(
const TString& outFile,TCanvas* canvas,
const std::vector<JetUncertaintiesTool*>& providers,
const std::vector< std::vector< std::vector<int> > >& compSetIndices,
const std::vector< std::vector<TString> >& labelNames,TH1D* frame,
const double fixedValue,
const std::vector<double>& scanBins,
const bool fixedIsEta,
const float mOverPt,
const bool doComparison,
const bool doCompareOnly,
const bool mOverPtIsMass)
956 std::vector<TH1D*> totalHists;
957 std::vector<TGraphErrors*> totalGraphs;
958 std::vector< std::vector<TGraphErrors*> > compGraphs;
972 IsBjet(*
jet) =
false;
982 size_t indexHelper = 0;
985 for (
size_t iProv = 0; iProv < providers.size(); ++iProv)
1003 jet->setAttribute(
"PartonTruthLabelID",
optHelper.FixedTruthLabel());
1004 std::cout <<
"Fixed PartonTruthLabelID to " <<
optHelper.FixedTruthLabel() << std::endl;
1011 std::cout <<
"Fixed LargeRJetTruthLabel" << std::endl;
1027 totalHists.push_back(
new TH1D(Form(
"Total_%zu_hist",iProv),
"",scanBins.size()-1,&scanBins[0]));
1028 TH1D* totalHist = totalHists.back();
1029 totalHist->SetFillColor(590);
1030 totalHist->SetLineWidth(0);
1033 totalGraphs.push_back(
new TGraphErrors());
1034 TGraphErrors* totalGraph = totalGraphs.back();
1035 totalGraph->SetName(Form(
"Total_%zu_graph",iProv));
1036 totalGraph->SetLineStyle(1);
1037 totalGraph->SetLineWidth(2);
1038 totalGraph->SetLineColor(kBlack);
1044 int PTindex =
static_cast<int>(allIndices.size());
1046 if (TString(provider->
getComponentName(iComp).c_str()).Contains(
"PunchThrough",TString::kIgnoreCase))
1053 std::vector<TGraphErrors*> provCompGraphs;
1056 for (
size_t iComp = 0; iComp < compSetIndices.at(iProv).size(); ++iComp)
1059 provCompGraphs.push_back(
new TGraphErrors());
1060 TGraphErrors* compGraph = provCompGraphs.back();
1061 compGraph->SetName(labelNames.at(iProv).at(iComp));
1062 compGraph->SetLineStyle(indexHelper+1);
1063 compGraph->SetLineColor(indexHelper+2 < 5 ? indexHelper+2 : indexHelper+3 < 13 ? indexHelper+3 : indexHelper+4);
1064 if (indexHelper+3 == 10) compGraph->SetLineColor(kYellow-9);
1065 compGraph->SetLineWidth(doComparison?3:4);
1072 for (
int iScan = 1; iScan < frame->GetNbinsX()+2; ++iScan)
1074 const double binValue = iScan == 1 ? frame->GetBinLowEdge(iScan)+1.e-3 : iScan == frame->GetNbinsX()+1 ? frame->GetBinLowEdge(iScan)-1.e-3 : frame->GetBinLowEdge(iScan);
1077 const double pt = (fixedIsEta ? binValue : fixedValue)*1.e3;
1078 const double eta = (fixedIsEta ? fixedValue : binValue);
1079 const double mass = mOverPtIsMass ? mOverPt*1.e3 : mOverPt*pt;
1089 scaleTAMoment(*
jet) = mass ;
1093 bool isZero =
false;
1094 if (
optHelper.DoCompare() && TString(provider->
getRelease().c_str()).Contains(
"2015_Prerec_"))
1095 if (pt > 1.5e6) isZero =
true;
1099 std::vector<jet::CompScaleVar::TypeEnum> scaleVars =
optHelper.GetScaleVars();
1100 if (
optHelper.TagScaleFactorName() !=
"")
1102 jet->setAttribute(
optHelper.TagScaleFactorName().Data(),1.0);
1107 for (
size_t iComp = 0; iComp < compSetIndices.at(iProv).size(); ++iComp)
1111 TGraphErrors* compGraph = provCompGraphs.at(iComp);
1113 compGraph->SetPoint(iScan-1,binValue,compUnc);
1118 totalGraph->SetPoint(iScan-1,binValue,totalUnc);
1123 compGraphs.push_back(provCompGraphs);
1126 for (
int iScan = 1; iScan < frame->GetNbinsX()+1; ++iScan)
1128 const double binValue = frame->GetBinCenter(iScan);
1131 const double pt = (fixedIsEta ? binValue : fixedValue)*1.e3;
1132 const double eta = (fixedIsEta ? fixedValue : binValue);
1133 const double mass = mOverPtIsMass ? mOverPt*1.e3 : mOverPt*pt;
1143 scaleTAMoment(*
jet) = mass ;
1146 bool isZero =
false;
1147 if (
optHelper.DoCompare() && TString(provider->
getRelease().c_str()).Contains(
"2015_Prerec_"))
1148 if (pt > 1.5e6) isZero =
true;
1165 for (
size_t iProv = 0; iProv < providers.size(); ++iProv)
1167 TH1D* totalHist = totalHists.at(iProv);
1170 TH1D* rebinnedTotal =
new TH1D(Form(
"Rebinned_%s",totalHist->GetName()),
"",rebinnedBins.size()-1,&rebinnedBins[0]);
1171 rebinnedTotal->SetFillColor(590);
1172 rebinnedTotal->SetLineWidth(0);
1173 for(
int iBin = 1; iBin < rebinnedTotal->GetNbinsX()+1; ++iBin)
1174 rebinnedTotal->SetBinContent(iBin,totalHist->Interpolate(rebinnedTotal->GetBinCenter(iBin)));
1175 delete totalHists[iProv];
1176 totalHists[iProv] = rebinnedTotal;
1183 if (fixedIsEta &&
optHelper.LogPt()) canvas->SetLogx(
true);
1184 else canvas->SetLogx(
false);
1190 frame->GetXaxis()->SetRangeUser(
xrange.first,
xrange.second);
1192 else if (
optHelper.IsLargeR()) frame->GetXaxis()->SetRangeUser(200,3.e3);
1193 else if (fixedIsEta) frame->GetXaxis()->SetRangeUser(17,3.0e3);
1194 else frame->GetXaxis()->SetRangeUser(-4.5,4.5);
1199 frame->GetYaxis()->SetRangeUser(0,
maxYuser);
1209 TH1D* comparisonHist = 0;
1210 TGraphErrors * comparisonGraph = 0;
1212 comparisonHist = totalHists.at(providers.size()-1);
1213 totalHists.pop_back();
1214 comparisonGraph = totalGraphs.at(providers.size()-1);
1215 totalGraphs.pop_back();
1221 if (doCompareOnly) {
1223 totalGraphs.at(
index)->SetLineColor(1000+
index);
1224 totalGraphs.at(
index)->SetLineStyle(1);
1225 totalGraphs.at(
index)->SetLineWidth(2);
1226 totalHists.at(
index)->SetLineColor(1000+
index);
1227 totalHists.at(
index)->SetLineStyle(1);
1228 totalHists.at(
index)->SetLineWidth(2);
1229 totalGraphs.at(
index)->Draw(
"l same");
1231 }
else if (providers.size() == 1 &&
optHelper.DrawTotal())
1232 totalHists.at(0)->Draw(
"histF same");
1233 else if ((providers.size() == 2) && doComparison) {
1249 comparisonGraph->SetLineWidth(6);
1254 comparisonHist->SetLineColor(kGreen+3);
1255 comparisonHist->SetFillColor(kTeal+5);
1259 comparisonHist->SetLineColor(kTeal+5);
1260 comparisonHist->SetFillColor(kTeal-9);
1263 comparisonHist->Draw(
"histF same");
1264 totalHists.at(0)->Draw(
"histF same");
1268 if (!doCompareOnly) {
1269 for (
size_t iProv = 0; iProv < providers.size(); ++iProv)
1272 if (iProv == providers.size()-1)
continue;
1274 comparisonGraph->SetLineColor(comparisonHist->GetLineColor());
1275 comparisonGraph->Draw(
"l same");
1276 totalGraphs.at(0)->Draw(
"l same");
1277 }
else if (
optHelper.DrawTotal()) totalGraphs.at(iProv)->Draw(
"l same");
1278 for (
size_t iComp = 0; iComp < compGraphs.at(iProv).size(); ++iComp)
1279 compGraphs.at(iProv).at(iComp)->Draw(
"l same");
1287 for (
size_t i=0; i<providers.size(); i++) {
1288 const TString thisconfname = providers.at(i)->getConfigFile().c_str();
1289 if (!(thisconfname.Contains(
"_2012/")))
sign =
false;
1291 bool sameRelease =
true;
1292 const TString release0 = providers.at(0)->getRelease();
1293 for (
size_t i=1; i<providers.size(); ++i)
1294 if (providers.at(i)->getRelease() != release0)
1295 sameRelease =
false;
1299 if (providers.size() == 1 || (providers.size()==2 && doComparison) ||
sign || sameRelease)
1303 DrawText(Form(
"|#eta_{jet}| < 2, m = %.0f GeV%s",mOverPt,
optHelper.SpecifyTagger()?Form(
", %s tagged",
getTagType(providers.at(0)).Data()):
""),kBlack,0.73);
1305 DrawText(Form(
"|#eta_{jet}| < 2, m_{jet}/#it{p}_{T}^{jet} = %.2f%s",mOverPt,
optHelper.SpecifyTagger()?Form(
", %s tagged",
getTagType(providers.at(0)).Data()):
""),kBlack,0.73);
1317 if (providers.size() == 1 || (providers.size()==2 && doComparison) ||
sign || sameRelease)
1320 DrawText(fixedIsEta?Form(
"#eta = %.1f, m = %.0f GeV",fixedValue,mOverPt):Form(
"#it{p}_{T}^{jet} = %.0f GeV",fixedValue),kBlack,TString(providers.at(0)->getJetDef().c_str()).Contains(
"Trimmed") ? 0.74 : 0.805);
1321 else if (
optHelper.GetFixedMoverPtVals().size() > 1)
1322 DrawText(fixedIsEta?Form(
"#eta = %.1f, m/p_{T} = %.2f",fixedValue,mOverPt):Form(
"#it{p}_{T}^{jet} = %.0f GeV",fixedValue),kBlack,TString(providers.at(0)->getJetDef().c_str()).Contains(
"Trimmed") ? 0.74 : 0.805);
1324 DrawText(fixedIsEta?Form(
"#eta = %.1f",fixedValue):Form(
"#it{p}_{T}^{jet} = %.0f GeV",fixedValue),kBlack,TString(providers.at(0)->getJetDef().c_str()).Contains(
"Trimmed") ? 0.74 : 0.805);
1330 double legx=0.41, legy=0.78, dy = 0.045;
1333 else if (TString(providers.at(0)->getJetDef().c_str()).Contains(
"Trimmed"))
1336 if (doCompareOnly) {
1337 for (
size_t i=0; i < totalGraphs.size(); i++) {
1338 const TString title = labelNames.at(i).at(0);
1342 if ((providers.size() == 1 || (providers.size() == 2 && doComparison)) &&
optHelper.DrawTotal()) {
1347 const TString title = labelNames.at(providers.size()-1).at(0);
1352 if (fixedIsEta)
DrawFillLabel(title,legx,legy-=dy,comparisonHist);
1353 else DrawFillLabel(title,legx,legy-=dy,comparisonHist,
false);
1356 for (
size_t iProv = 0; iProv < providers.size(); ++iProv)
1357 for (
size_t iComp = 0; iComp < compGraphs.at(iProv).size(); ++iComp)
1359 const TGraphErrors* compGraph = compGraphs.at(iProv).at(iComp);
1360 const TString
label = compGraph->GetName();
1361 if (
label.Contains(
"#splitline"))
1378 frame->Draw(
"axis same");
1383 if (!outFile.EndsWith(
".eps") && !outFile.EndsWith(
".png"))
1384 canvas->Print(outFile);
1386 canvas->Print(TString(outFile).ReplaceAll(outFile.EndsWith(
".eps")?
".eps":
".png",Form(
"/fig_%s_%s.%s",fixedIsEta?
"eta":
"pt",fixedIsEta?Form(
"%.1f",fixedValue):Form(
"%.0f",fixedValue),outFile.EndsWith(
".eps")?
"eps":
"png")));
1391 printf(
"Preparing to dump to file: %s\n",
optHelper.GetDumpFile().Data());
1392 TFile* dumpFile = TFile::Open(
optHelper.GetDumpFile(),
"NEW");
1394 for (
size_t iSet = 0; iSet < compGraphs.size(); ++iSet)
1396 for (
size_t iComp = 0 ; iComp < compGraphs.at(iSet).size(); ++iComp)
1398 compGraphs.at(iSet).at(iComp)->Write();
1405 for (
size_t iProv = 0; iProv < providers.size(); ++iProv)
1407 if (doComparison && iProv == providers.size()-1)
continue;
1409 delete totalHists.at(iProv);
1410 delete totalGraphs.at(iProv);
1412 for (
size_t iComp = 0; iComp < compGraphs.at(iProv).size(); ++iComp)
1413 delete compGraphs.at(iProv).at(iComp);
1415 delete comparisonHist;
1416 delete comparisonGraph;
1420void MakeUncertaintyPlots(
const TString& outFile,TCanvas* canvas,
const std::vector<JetUncertaintiesTool*>& providers,
const std::vector< std::vector<TString> >& compSetComponents,
const std::vector< std::vector<TString> >& labelNames,
const bool doComparison,
const bool doCompareOnly)
1423 const std::vector<double> ptValuesForEtaScan =
optHelper.GetFixedPtVals();
1424 const std::vector<double> etaValuesForPtScan =
optHelper.GetFixedEtaVals();
1425 const std::vector<double> mOverPtValuesForPtScan =
optHelper.GetFixedMoverPtVals();
1426 const std::vector<double> massValuesForPtScan =
optHelper.GetFixedMassVals();
1429 const std::vector<double> etaScanValues =
optHelper.GetEtaBins();
1430 const std::vector<double> ptScanValues =
optHelper.GetPtBins();
1433 TH1D* frameEtaScan =
new TH1D(
"frameEtaScan",
"",etaScanValues.size()-1,&etaScanValues[0]);
1434 TH1D* framePtScan =
new TH1D(
"framePtScan",
"",ptScanValues.size()-1,&ptScanValues[0]);
1436 TString yAxisVar =
"";
1437 if (
optHelper.GetScaleVars().size() == 1)
1446 yAxisVar =
"#it{p}_{T}";
1451 yAxisVar =
"#it{p}_{T}";
1459 yAxisVar =
"D_{12}";
1462 yAxisVar =
"D_{23}";
1465 yAxisVar =
"#tau_{21}";
1468 yAxisVar =
"#tau_{21}^{wta}";
1471 yAxisVar =
"#tau_{32}";
1474 yAxisVar =
"#tau_{32}^{wta}";
1490 const TString yAxisLabel =
optHelper.GetScaleVars().size() != 1 ?
"Unknown" :
1492 Form(
"Fractional J%sS uncertainty",yAxisVar.Data())
1494 Form(
"Uncertainty on #sigma(%s)/%s",yAxisVar.Data(),yAxisVar.Data())
1495 :
"Unknown scale type";
1496 frameEtaScan->GetXaxis()->SetTitleOffset(1.4);
1498 frameEtaScan->GetXaxis()->SetTitle(
"#eta");
1499 frameEtaScan->GetYaxis()->SetTitle(yAxisLabel.Data());
1500 framePtScan->GetXaxis()->SetTitleOffset(1.4);
1502 framePtScan->GetXaxis()->SetTitle(
"#it{p}_{T}^{jet} [GeV]");
1503 framePtScan->GetYaxis()->SetTitle(yAxisLabel.Data());
1504 framePtScan->GetXaxis()->SetMoreLogLabels();
1507 for (
int iBin = 1; iBin <= frameEtaScan->GetNbinsX(); ++iBin)
1508 frameEtaScan->SetBinContent(iBin,-1);
1509 for (
int iBin = 1; iBin <= framePtScan->GetNbinsX(); ++iBin)
1510 framePtScan->SetBinContent(iBin,-1);
1514 std::vector< std::vector< std::vector<int> > > compSetIndices;
1515 for (
size_t iProv = 0; iProv < providers.size(); ++iProv)
1521 for (
size_t iFixed = 0; iFixed < etaValuesForPtScan.size(); ++iFixed)
1522 MakeUncertaintyPlots(outFile,canvas,providers,compSetIndices,labelNames,framePtScan,etaValuesForPtScan.at(iFixed),ptScanValues,
true,mOverPtValuesForPtScan.at(0),doComparison, doCompareOnly,
false);
1523 for (
size_t iFixed = 0; iFixed < ptValuesForEtaScan.size(); ++iFixed)
1524 MakeUncertaintyPlots(outFile,canvas,providers,compSetIndices,labelNames,frameEtaScan,ptValuesForEtaScan.at(iFixed),etaScanValues,
false,mOverPtValuesForPtScan.at(0),doComparison, doCompareOnly,
false);
1525 if (massValuesForPtScan.size())
1527 for (
size_t iFixed = 0; iFixed < massValuesForPtScan.size(); ++iFixed)
1528 MakeUncertaintyPlots(outFile,canvas,providers,compSetIndices,labelNames,framePtScan,etaValuesForPtScan.size() ? etaValuesForPtScan.at(0) : 0,ptScanValues,
true,massValuesForPtScan.at(iFixed),doComparison,doCompareOnly,
true);
1530 if (mOverPtValuesForPtScan.size() > 1)
1532 for (
size_t iFixed = 0; iFixed < mOverPtValuesForPtScan.size(); ++iFixed)
1533 MakeUncertaintyPlots(outFile,canvas,providers,compSetIndices,labelNames,framePtScan,etaValuesForPtScan.size() ? etaValuesForPtScan.at(0) : 0,ptScanValues,
true,mOverPtValuesForPtScan.at(iFixed),doComparison,doCompareOnly,
false);
1538 if (massValuesForPtScan.size())
1540 for (
size_t iFixed = 0; iFixed < massValuesForPtScan.size(); ++iFixed)
1541 MakeUncertaintyPlots(outFile,canvas,providers,compSetIndices,labelNames,framePtScan,etaValuesForPtScan.at(0),ptScanValues,
true,massValuesForPtScan.at(iFixed),doComparison,doCompareOnly,
true);
1545 for (
size_t iFixed = 0; iFixed < mOverPtValuesForPtScan.size(); ++iFixed)
1546 MakeUncertaintyPlots(outFile,canvas,providers,compSetIndices,labelNames,framePtScan,etaValuesForPtScan.at(0),ptScanValues,
true,mOverPtValuesForPtScan.at(iFixed),doComparison, doCompareOnly,
false);
1552 delete frameEtaScan;
1558 if (argc != 7 && argc != 8)
1560 printf(
"Expected arguments:\n");
1561 printf(
"\t1. Output file (ps, pdf, eps)\n");
1562 printf(
"\t2. Jet definition(s), semicolon delimited\n");
1563 printf(
"\t3. MC type(s), semicolon delimited (one for all configs, or one per config)\n");
1564 printf(
"\t4. Config file(s), semicolon delimited\n");
1565 printf(
"\t5. Component list, special formatting (one for all configs, or one per config):\n");
1566 printf(
"\t\tComma-delimited means combine components\n");
1567 printf(
"\t\tSemicolon-delimited means new component\n");
1568 printf(
"\t\tAmpersand-delimited means new config\n");
1569 printf(
"\t\tTOTAL to get the total uncertainty as one term\n");
1570 printf(
"\t\t# is wildcard, so InSitu# is everything starting with InSitu\n");
1571 printf(
"\t6. Component labels, special formatting (one for all configs, or one per config)\n");
1572 printf(
"\t\tSemicolon-delimited for each component label\n");
1573 printf(
"\t\tAmpersand-delimited for each config\n");
1574 printf(
"\t7. Options (optional argument), semi-colon delimited, examples:\n");
1575 printf(
"\t\tisDijet=false\n");
1576 printf(
"\t\tisLargeR=false\n");
1579 TString outFile = argv[1];
1586 else optHelper.Initialize(std::vector<TString>());
1588 StatusCode::enableFailure();
1590 bool doComparison =
false;
1591 bool compareJetDefs =
false;
1592 TString compareMCType =
"";
1593 TString totalLabel =
"";
1594 TString otherJetDef =
"";
1595 TString doCompConfig =
optHelper.DoCompare();
1596 if (doCompConfig !=
"") {
1597 doComparison =
true;
1599 if (comparisons.size() < 3)
1601 printf(
"Failed to parse comparison request: %s\n",doCompConfig.Data());
1604 doCompConfig = comparisons.at(0);
1605 compareMCType = comparisons.at(1);
1606 totalLabel = comparisons.at(2).Strip(TString::kBoth,
'"');
1607 configs.push_back(doCompConfig);
1608 mcTypes.push_back(compareMCType);
1609 compSets.push_back(
"");
1610 labelSets.push_back(totalLabel);
1611 if (comparisons.size()>3)
1613 compareJetDefs =
true;
1614 jetDefs.push_back(comparisons.at(3));
1618 bool doCompareOnly =
optHelper.CompareOnly();
1619 if (doCompareOnly) {
1626 std::vector<TString> compareconfigs =
optHelper.GetCompareVals();
1627 for (
size_t item = 0; item < compareconfigs.size(); item++) {
1629 doCompConfig = comparisons.at(0);
1630 compareMCType = comparisons.at(1);
1631 totalLabel = comparisons.at(2).Strip(TString::kBoth,
'"');
1632 configs.push_back(doCompConfig);
1633 mcTypes.push_back(compareMCType);
1634 compSets.push_back(
"");
1635 labelSets.push_back(totalLabel);
1636 if (comparisons.size()>3) jetDefs.push_back(comparisons.at(3));
1642 if (mcTypes.size() != 1 && mcTypes.size() != configs.size())
1644 printf(
"Expected either 1 MC type for all configs, or 1 MC type per config\n");
1645 printf(
"Instead, got %zu MC types and %zu configs\n",mcTypes.size(),configs.size());
1649 else if (mcTypes.size() == 1 && configs.size() != 1)
1650 for (
size_t iConfig = 1; iConfig < configs.size(); ++iConfig)
1651 mcTypes.push_back(mcTypes.at(0));
1654 if (compSets.size() != labelSets.size())
1656 printf(
"Expected matching numbers of component lists and labels\n");
1657 printf(
"Instead, got %zu component lists and %zu labels\n",compSets.size(),labelSets.size());
1662 if (compSets.size() != 1 && compSets.size() != configs.size())
1664 printf(
"Expected either 1 component list for all configs, or 1 component list per config\n");
1665 printf(
"Instead, got %zu component lists and %zu configs\n",compSets.size(),configs.size());
1669 else if (compSets.size() == 1 && configs.size() != 1)
1670 for (
size_t iConfig = 1; iConfig < configs.size(); ++iConfig)
1672 compSets.push_back(compSets.at(0));
1673 labelSets.push_back(labelSets.at(0));
1678 std::vector< std::vector<TString> > compSetComponents;
1679 std::vector< std::vector<TString> > labelNames;
1680 for (
size_t iSet = 0; iSet < compSets.size(); ++iSet)
1689 gStyle->SetPalette(1);
1690 TCanvas* canvas =
new TCanvas(
"canvas");
1691 canvas->SetMargin(0.12,0.04,0.15,0.04);
1692 canvas->SetFillStyle(4000);
1693 canvas->SetFillColor(0);
1694 canvas->SetFrameBorderMode(0);
1701 if (!outFile.EndsWith(
".eps") && !outFile.EndsWith(
".png"))
1702 canvas->Print(outFile+
"[");
1705 system(Form(
"mkdir -p %s",TString(outFile).ReplaceAll(outFile.EndsWith(
".eps")?
".eps":
".png",
"").Data()));
1710 if (!(jetDefs.size() == configs.size() && jetDefs.size() != 1) || (doComparison && jetDefs.size() != 1 && !compareJetDefs))
1712 std::cout <<
"Going to process for multiple jet types!" << std::endl;
1714 for (
size_t iJetDef = 0; iJetDef < jetDefs.size(); ++iJetDef)
1716 const TString jetDef = jetDefs.at(iJetDef);
1717 std::cout <<
"Running for jet type " << jetDef << std::endl;
1720 std::vector<JetUncertaintiesTool*> providers;
1721 for (
size_t iConfig = 0; iConfig < configs.size(); ++iConfig)
1727 if (providers.back()->setProperty(
"JetDefinition",jetDef.Data()).isFailure())
1729 printf(
"Failed to set JetDefinition to %s\n",jetDef.Data());
1732 if (providers.back()->setProperty(
"MCType",mcTypes.at(iConfig).Data()).isFailure())
1734 printf(
"Failed to set MCType to %s\n",mcTypes.at(iConfig).Data());
1737 if (providers.back()->setProperty(
"ConfigFile",configs.at(iConfig).Data()).isFailure())
1739 printf(
"Failed to set ConfigFile to %s\n",configs.at(iConfig).Data());
1742 if (providers.back()->setProperty(
"IsData",
optHelper.GetIsData()).isFailure())
1744 printf(
"Failed to set IsData to %s\n",
optHelper.GetIsData() ?
"true" :
"false");
1749 const TString analysisFile =
optHelper.GetCompositionPath();
1753 if (providers.back()->setProperty(
"AnalysisFile",analysisFile.Data()).isFailure())
1755 printf(
"Failed to set AnalysisFile to %s\n",analysisFile.Data());
1763 if (providers.back()->setProperty(
"CalibArea",
optHelper.GetCalibArea().Data()).isFailure())
1765 printf(
"Failed to set CalibArea to %s\n",
optHelper.GetCalibArea().Data());
1773 if (providers.back()->setProperty(
"Path",
optHelper.GetPath().Data()).isFailure())
1775 printf(
"Failed to set Path to %s\n",
optHelper.GetPath().Data());
1782 if (
optHelper.VariablesToShift().size())
1784 if (providers.back()->setProperty(
"VariablesToShift",
optHelper.VariablesToShift()).isFailure())
1786 printf(
"Failed to set VariablesToShift\n");
1792 if (providers.back()->initialize().isFailure())
1794 printf(
"Failed to initialize tool for config: %s\n",configs.at(iConfig).Data());
1800 MakeUncertaintyPlots(outFile,canvas,providers,compSetComponents,labelNames,doComparison,doCompareOnly);
1803 for (
size_t iProv = 0; iProv < providers.size(); ++iProv)
1804 delete providers.at(iProv);
1811 std::vector<JetUncertaintiesTool*> providers;
1814 for (
size_t iJetDef = 0; iJetDef < jetDefs.size(); ++iJetDef)
1816 const TString jetDef = jetDefs.at(iJetDef);
1817 const TString
config = configs.at(iJetDef);
1823 if (providers.back()->setProperty(
"JetDefinition",jetDef.Data()).isFailure())
1825 printf(
"Failed to set JetDefinition to %s\n",jetDef.Data());
1828 if (providers.back()->setProperty(
"MCType",mcTypes.at(iJetDef).Data()).isFailure())
1830 printf(
"Failed to set MCType to %s\n",mcTypes.at(iJetDef).Data());
1833 if (providers.back()->setProperty(
"ConfigFile",configs.at(iJetDef).Data()).isFailure())
1835 printf(
"Failed to set ConfigFile to %s\n",configs.at(iJetDef).Data());
1838 if (providers.back()->setProperty(
"IsData",
optHelper.GetIsData()).isFailure())
1840 printf(
"Failed to set IsData to %s\n",
optHelper.GetIsData() ?
"true" :
"false");
1845 const TString analysisFile =
optHelper.GetCompositionPath();
1849 if (providers.back()->setProperty(
"AnalysisFile",analysisFile.Data()).isFailure())
1851 printf(
"Failed to set AnalysisFile to %s\n",analysisFile.Data());
1860 if (providers.back()->setProperty(
"CalibArea",
optHelper.GetCalibArea().Data()).isFailure())
1862 printf(
"Failed to set CalibArea to %s\n",
optHelper.GetCalibArea().Data());
1870 if (providers.back()->setProperty(
"Path",
optHelper.GetPath().Data()).isFailure())
1872 printf(
"Failed to set Path to %s\n",
optHelper.GetPath().Data());
1879 if (
optHelper.VariablesToShift().size())
1881 if (providers.back()->setProperty(
"VariablesToShift",
optHelper.VariablesToShift()).isFailure())
1883 printf(
"Failed to set VariablesToShift\n");
1889 if (providers.back()->initialize().isFailure())
1891 printf(
"Failed to initialize tool for config: %s\n",configs.at(iJetDef).Data());
1897 MakeUncertaintyPlots(outFile,canvas,providers,compSetComponents,labelNames,doComparison,doCompareOnly);
1900 for (
size_t iProv = 0; iProv < providers.size(); ++iProv)
1901 delete providers.at(iProv);
1909 if (!outFile.EndsWith(
".eps") && !outFile.EndsWith(
".png"))
1910 canvas->Print(outFile+
"]");