10 #include "TEfficiency.h"
16 TCanvas
gVtxEffCanvas(
"vtx_eff",
"Vertex Finding Efficiencies, Std and TMVA ranking", 800, 800);
20 {
"STD",
"mytestout.root"},
21 {
"TMVA",
"mytestout.root"}
24 const std::vector<Style_t>
myMarkerStyles = {kFullCross, kFullTriangleDown, kFullCircle, kFullStar};
27 int VxEff(
const std::vector<std::string> &vtx_file_keys,
const std::vector<std::string> &vtx_file_names)
30 if (vtx_file_keys.size() != vtx_file_names.size()) {
31 std::cout <<
"ERROR: Different number of keys and files" << std::endl;
35 if (vtx_file_keys.size() > 4) {
36 std::cout <<
"ERROR: Too many histograms to overlay on one plot. Specify at most four files" << std::endl;
40 std::map<std::string, std::string> myVertexFiles;
42 auto fname = vtx_file_names.begin();
44 for (
auto key=vtx_file_keys.begin(); key!=vtx_file_keys.end(); ++key, ++fname)
46 myVertexFiles.insert( std::pair<std::string, std::string>(*key, *fname) );
58 int VxEff(
const std::map<std::string, std::string> & vtx_file_names)
61 if (vtx_file_names.empty()) {
62 std::cout <<
"ERROR: No input files provided" << std::endl;
67 std::cout <<
"User provided files with histograms:\n";
69 for (
const auto& key2FileName : vtx_file_names) {
70 std::cout <<
"key => file: "
71 << key2FileName.first <<
" => " << key2FileName.second <<
"\n";
74 std::cout << std::endl;
77 frame->SetTitle(
"Vertex Finding Efficiency");
78 frame->SetYTitle(
"Efficiency/Impurity");
79 frame->SetXTitle(
"Vertex Track Multiplicity");
84 for (
const auto& key2FileName : vtx_file_names)
86 TFile file(key2FileName.second.c_str());
88 TH1D *hMcRecMulT = (TH1D *) file.Get(
"McRecMulT");
90 if (!hMcRecMulT)
continue;
92 TH1D *hMcRecMulAny = (TH1D*) file.Get(
"McRecMulAny");
93 TH1D *hMcRecMulGood = (TH1D*) file.Get(
"McRecMulGood");
94 TH1D *hMcRecMulBad = (TH1D*) file.Get(
"McRecMulBad");
96 double T = hMcRecMulT->GetEntries();
97 double A = hMcRecMulAny->GetEntries();
98 double G = hMcRecMulGood->GetEntries();
99 double B = hMcRecMulBad->GetEntries();
104 gStyle->SetMarkerSize(1.5);
107 TEfficiency *eff_total =
new TEfficiency(*hMcRecMulAny, *hMcRecMulT);
108 eff_total->SetMarkerColor(kBlack);
109 eff_total->Draw(
"same p");
110 gVtxEffLegend.AddEntry(eff_total, Form(
"%s Overall Efficiency = %4.2f", key2FileName.first.c_str(), A / T));
112 TEfficiency *efficiency =
new TEfficiency(*hMcRecMulGood, *hMcRecMulT);
113 efficiency->SetMarkerColor(kRed);
114 gVtxEffLegend.AddEntry(efficiency, Form(
"%s Max Rank Efficiency = %4.2f", key2FileName.first.c_str(), G / T));
115 efficiency->Draw(
"same p");
117 TEfficiency *impurity =
new TEfficiency(*hMcRecMulBad, *hMcRecMulT);
118 impurity->SetMarkerColor(kGreen);
119 gVtxEffLegend.AddEntry(impurity, Form(
"%s Impurity = %4.2f", key2FileName.first.c_str(), B / T));
120 impurity->Draw(
"same p");
const std::map< std::string, std::string > myDefaultVertexFiles
int VxEff(const std::vector< std::string > &vtx_file_keys, const std::vector< std::string > &vtx_file_names)
TCanvas gVtxEffCanvas("vtx_eff","Vertex Finding Efficiencies, Std and TMVA ranking", 800, 800)
TLegend gVtxEffLegend(0.6, 0.30, 0.98, 0.50)
const std::vector< Style_t > myMarkerStyles