File indexing completed on 2023-10-25 09:56:34
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011 #include "TROOT.h"
0012 #include "TStyle.h"
0013 #include "TLatex.h"
0014 #include "TFile.h"
0015 #include "TTree.h"
0016 #include "TChain.h"
0017 #include "TBranch.h"
0018 #include "TLeaf.h"
0019 #include "TCanvas.h"
0020 #include "TLegend.h"
0021 #include "TH1.h"
0022 #include "TH2.h"
0023 #include "TF1.h"
0024 #include "TProfile.h"
0025 #include "TProfile2D.h"
0026 #include "TMath.h"
0027 #include "TGraph.h"
0028 #include "TError.h"
0029 #include "TGraphErrors.h"
0030 #include "TGraphPainter.h"
0031 #include "TSystem.h"
0032
0033 #include <iostream>
0034 #include <string>
0035 #include <vector>
0036 #include <algorithm>
0037 #include <cmath>
0038
0039 using namespace std;
0040
0041 void SetPlotStyle();
0042
0043
0044
0045
0046
0047 void L1TrackQualityPlot(TString type, TString type_dir = "", TString treeName = "") {
0048
0049
0050
0051 gROOT->SetBatch();
0052 gErrorIgnoreLevel = kWarning;
0053
0054 SetPlotStyle();
0055 gSystem->mkdir("MVA_plots");
0056
0057
0058
0059
0060
0061 int L1Tk_minNstub = 4;
0062 float L1Tk_maxChi2 = 999999;
0063 float L1Tk_maxChi2dof = 999999.;
0064
0065
0066
0067 TChain* tree = new TChain("L1TrackNtuple" + treeName + "/eventTree");
0068 tree->Add(type_dir + type + ".root");
0069
0070 if (tree->GetEntries() == 0) {
0071 cout << "File doesn't exist or is empty, returning..."
0072 << endl;
0073 return;
0074 }
0075
0076
0077
0078
0079 vector<float>* trk_pt;
0080 vector<float>* trk_eta;
0081 vector<float>* trk_phi;
0082 vector<float>* trk_chi2;
0083 vector<float>* trk_chi2rphi;
0084 vector<float>* trk_chi2rz;
0085 vector<int>* trk_nstub;
0086 vector<int>* trk_lhits;
0087 vector<int>* trk_dhits;
0088 vector<int>* trk_seed;
0089 vector<int>* trk_hitpattern;
0090 vector<unsigned int>* trk_phiSector;
0091 vector<int>* trk_fake;
0092 vector<int>* trk_genuine;
0093 vector<int>* trk_loose;
0094 vector<float>* trk_MVA1;
0095 vector<float>* trk_matchtp_pdgid;
0096
0097 TBranch* b_trk_pt;
0098 TBranch* b_trk_eta;
0099 TBranch* b_trk_phi;
0100 TBranch* b_trk_chi2;
0101 TBranch* b_trk_chi2rphi;
0102 TBranch* b_trk_chi2rz;
0103 TBranch* b_trk_nstub;
0104 TBranch* b_trk_lhits;
0105 TBranch* b_trk_dhits;
0106 TBranch* b_trk_phiSector;
0107 TBranch* b_trk_seed;
0108 TBranch* b_trk_hitpattern;
0109 TBranch* b_trk_fake;
0110 TBranch* b_trk_genuine;
0111 TBranch* b_trk_loose;
0112 TBranch* b_trk_MVA1;
0113 TBranch* b_trk_matchtp_pdgid;
0114
0115 trk_pt = 0;
0116 trk_eta = 0;
0117 trk_phi = 0;
0118 trk_chi2 = 0;
0119 trk_chi2rphi = 0;
0120 trk_chi2rz = 0;
0121 trk_nstub = 0;
0122 trk_lhits = 0;
0123 trk_dhits = 0;
0124 trk_phiSector = 0;
0125 trk_seed = 0;
0126 trk_hitpattern = 0;
0127 trk_fake = 0;
0128 trk_genuine = 0;
0129 trk_loose = 0;
0130 trk_MVA1 = 0;
0131 trk_matchtp_pdgid = 0;
0132
0133 tree->SetBranchAddress("trk_pt", &trk_pt, &b_trk_pt);
0134 tree->SetBranchAddress("trk_eta", &trk_eta, &b_trk_eta);
0135 tree->SetBranchAddress("trk_phi", &trk_phi, &b_trk_phi);
0136 tree->SetBranchAddress("trk_chi2", &trk_chi2, &b_trk_chi2);
0137 tree->SetBranchAddress("trk_chi2rphi", &trk_chi2rphi, &b_trk_chi2rphi);
0138 tree->SetBranchAddress("trk_chi2rz", &trk_chi2rz, &b_trk_chi2rz);
0139 tree->SetBranchAddress("trk_nstub", &trk_nstub, &b_trk_nstub);
0140 tree->SetBranchAddress("trk_lhits", &trk_lhits, &b_trk_lhits);
0141 tree->SetBranchAddress("trk_dhits", &trk_dhits, &b_trk_dhits);
0142 tree->SetBranchAddress("trk_phiSector", &trk_phiSector, &b_trk_phiSector);
0143 tree->SetBranchAddress("trk_seed", &trk_seed, &b_trk_seed);
0144 tree->SetBranchAddress("trk_hitpattern", &trk_hitpattern, &b_trk_hitpattern);
0145 tree->SetBranchAddress("trk_fake", &trk_fake, &b_trk_fake);
0146 tree->SetBranchAddress("trk_genuine", &trk_genuine, &b_trk_genuine);
0147 tree->SetBranchAddress("trk_loose", &trk_loose, &b_trk_loose);
0148 tree->SetBranchAddress("trk_MVA1", &trk_MVA1, &b_trk_MVA1);
0149 tree->SetBranchAddress("trk_matchtp_pdgid", &trk_matchtp_pdgid, &b_trk_matchtp_pdgid);
0150
0151
0152
0153
0154
0155 TH1F* h_trk_MVA1 = new TH1F("trk_MVA1", "; MVA1; L1 tracks", 50, 0, 1);
0156
0157 TH1F* h_trk_MVA1_real = new TH1F("trk_MVA1_real", ";MVA1; L1 tracks", 50, 0, 1);
0158 h_trk_MVA1_real->SetLineColor(3);
0159 TH1F* h_trk_MVA1_fake = new TH1F("trk_MVA1_fake", ";MVA1; L1 tracks", 50, 0, 1);
0160 h_trk_MVA1_fake->SetLineColor(4);
0161
0162
0163
0164
0165
0166 int nevt = tree->GetEntries();
0167 cout << "number of events = " << nevt << endl;
0168
0169
0170
0171 vector<float> MVA1s;
0172 vector<float> fakes;
0173 vector<float> etas;
0174 vector<float> pts;
0175 vector<int> pdgids;
0176 for (int i = 0; i < nevt; i++) {
0177 tree->GetEntry(i, 0);
0178
0179 for (int it = 0; it < (int)trk_pt->size(); it++) {
0180
0181
0182
0183 float MVA1 = trk_MVA1->at(it);
0184 float fake = trk_fake->at(it);
0185 float eta = trk_eta->at(it);
0186 float pt = trk_pt->at(it);
0187 float pdgid = trk_matchtp_pdgid->at(it);
0188
0189 MVA1s.push_back(MVA1);
0190 fakes.push_back(fake);
0191 etas.push_back(eta);
0192 pts.push_back(pt);
0193 pdgids.push_back(pdgid);
0194
0195 h_trk_MVA1->Fill(MVA1);
0196 if (fake == 1.)
0197 h_trk_MVA1_real->Fill(MVA1);
0198 else if (fake == 0.)
0199 h_trk_MVA1_fake->Fill(MVA1);
0200 }
0201 }
0202
0203
0204
0205
0206
0207
0208
0209
0210
0211 vector<float> TPR, TPR_mu, TPR_el, TPR_had;
0212 vector<float> FPR;
0213 vector<float> dec_thresh;
0214 int n = 100;
0215 for (int i = 0; i < n; i++) {
0216 float dt = (float)i / (n - 1);
0217 float TP = 0, TP_mu = 0, TP_el = 0, TP_had = 0;
0218 float FP = 0;
0219 float P = 0, P_mu = 0, P_el = 0, P_had = 0;
0220 float N = 0;
0221 for (int k = 0; k < (int)MVA1s.size(); k++) {
0222 if (fakes.at(k)) {
0223 P++;
0224 if (MVA1s.at(k) > dt)
0225 TP++;
0226 if (abs(pdgids.at(k)) == 13) {
0227 P_mu++;
0228 if (MVA1s.at(k) > dt)
0229 TP_mu++;
0230 } else if (abs(pdgids.at(k)) == 11) {
0231 P_el++;
0232 if (MVA1s.at(k) > dt)
0233 TP_el++;
0234 } else if (abs(pdgids.at(k)) > 37 && abs(pdgids.at(k)) != 999) {
0235 P_had++;
0236 if (MVA1s.at(k) > dt)
0237 TP_had++;
0238 }
0239 } else {
0240 N++;
0241 if (MVA1s.at(k) > dt)
0242 FP++;
0243 }
0244 }
0245 TPR.push_back((float)TP / P);
0246 TPR_mu.push_back((float)TP_mu / P_mu);
0247 TPR_el.push_back((float)TP_el / P_el);
0248 TPR_had.push_back((float)TP_had / P_had);
0249 FPR.push_back((float)FP / N);
0250 dec_thresh.push_back(dt);
0251 }
0252
0253
0254 float AUC = 0., AUC_mu = 0., AUC_el = 0., AUC_had = 0.;
0255 for (int i = 0; i < n - 1; i++) {
0256 AUC += (TPR[i] + TPR[i + 1]) / 2 * (FPR[i] - FPR[i + 1]);
0257 AUC_mu += (TPR_mu[i] + TPR_mu[i + 1]) / 2 * (FPR[i] - FPR[i + 1]);
0258 AUC_el += (TPR_el[i] + TPR_el[i + 1]) / 2 * (FPR[i] - FPR[i + 1]);
0259 AUC_had += (TPR_had[i] + TPR_had[i + 1]) / 2 * (FPR[i] - FPR[i + 1]);
0260 }
0261
0262 TGraph* ROC = new TGraph(n, FPR.data(), TPR.data());
0263 ROC->SetName("ROC");
0264 ROC->SetTitle(("ROC curve (AUC = " + to_string(AUC) + "); FPR; TPR").c_str());
0265 ROC->SetLineWidth(4);
0266
0267 TGraph* ROC_mu = new TGraph(n, FPR.data(), TPR_mu.data());
0268 ROC_mu->SetName("ROC_mu");
0269 ROC_mu->SetTitle(("ROC curve (muons, AUC = " + to_string(AUC_mu) + "); FPR; TPR").c_str());
0270 ROC_mu->SetLineWidth(4);
0271
0272 TGraph* ROC_el = new TGraph(n, FPR.data(), TPR_el.data());
0273 ROC_el->SetName("ROC_el");
0274 ROC_el->SetTitle(("ROC curve (electrons, AUC = " + to_string(AUC_el) + "); FPR; TPR").c_str());
0275 ROC_el->SetLineWidth(4);
0276
0277 TGraph* ROC_had = new TGraph(n, FPR.data(), TPR_had.data());
0278 ROC_had->SetName("ROC_had");
0279 ROC_had->SetTitle(("ROC curve (hadrons, AUC = " + to_string(AUC_had) + "); FPR; TPR").c_str());
0280 ROC_had->SetLineWidth(4);
0281
0282 TGraph* TPR_vs_dt = new TGraph(n, dec_thresh.data(), TPR.data());
0283 TPR_vs_dt->SetName("TPR_vs_dt");
0284 TPR_vs_dt->SetTitle("TPR vs decision threshold; decision thresh.; TPR");
0285 TPR_vs_dt->SetLineColor(3);
0286 TPR_vs_dt->SetLineWidth(4);
0287
0288 TGraph* FPR_vs_dt = new TGraph(n, dec_thresh.data(), FPR.data());
0289 FPR_vs_dt->SetName("FPR_vs_dt");
0290 FPR_vs_dt->SetTitle("FPR vs decision threshold; decision thresh.; FPR");
0291 FPR_vs_dt->SetLineColor(4);
0292 FPR_vs_dt->SetLineWidth(4);
0293
0294 TGraph* TPR_vs_dt_mu = new TGraph(n, dec_thresh.data(), TPR_mu.data());
0295 TPR_vs_dt_mu->SetName("TPR_vs_dt_mu");
0296 TPR_vs_dt_mu->SetTitle("TPR vs decision threshold (muons); decision thresh.; TPR");
0297 TPR_vs_dt_mu->SetLineColor(3);
0298 TPR_vs_dt_mu->SetLineWidth(4);
0299
0300 TGraph* TPR_vs_dt_el = new TGraph(n, dec_thresh.data(), TPR_el.data());
0301 TPR_vs_dt_el->SetName("TPR_vs_dt_el");
0302 TPR_vs_dt_el->SetTitle("TPR vs decision threshold (electrons); decision thresh.; TPR");
0303 TPR_vs_dt_el->SetLineColor(3);
0304 TPR_vs_dt_el->SetLineWidth(4);
0305
0306 TGraph* TPR_vs_dt_had = new TGraph(n, dec_thresh.data(), TPR_had.data());
0307 TPR_vs_dt_had->SetName("TPR_vs_dt_had");
0308 TPR_vs_dt_had->SetTitle("TPR vs decision threshold (hadrons); decision thresh.; TPR");
0309 TPR_vs_dt_had->SetLineColor(3);
0310 TPR_vs_dt_had->SetLineWidth(4);
0311
0312
0313
0314
0315
0316 vector<float> TPR_eta, TPR_eta_mu, TPR_eta_el, TPR_eta_had;
0317 vector<float> TPR_eta_err, TPR_eta_err_mu, TPR_eta_err_el, TPR_eta_err_had;
0318 vector<float> FPR_eta, FPR_eta_err;
0319 vector<float> eta_range, eta_range_err;
0320 n = 20;
0321 float eta_low = -2.4;
0322 float eta_high = 2.4;
0323 float eta_temp = eta_low;
0324 float eta_step = (eta_high - eta_low) / n;
0325 float dt = .5;
0326 for (int ct = 0; ct < n; ct++) {
0327 float TP = 0, TP_mu = 0, TP_el = 0, TP_had = 0;
0328 float FP = 0;
0329 float P = 0, P_mu = 0, P_el = 0, P_had = 0;
0330 float N = 0;
0331 for (int k = 0; k < (int)etas.size(); k++) {
0332 if (etas.at(k) > eta_temp && etas.at(k) <= (eta_temp + eta_step)) {
0333 if (fakes.at(k)) {
0334 P++;
0335 if (MVA1s.at(k) > dt)
0336 TP++;
0337 if (abs(pdgids.at(k)) == 13) {
0338 P_mu++;
0339 if (MVA1s.at(k) > dt)
0340 TP_mu++;
0341 } else if (abs(pdgids.at(k)) == 11) {
0342 P_el++;
0343 if (MVA1s.at(k) > dt)
0344 TP_el++;
0345 } else if (abs(pdgids.at(k)) > 37 && abs(pdgids.at(k)) != 999) {
0346 P_had++;
0347 if (MVA1s.at(k) > dt)
0348 TP_had++;
0349 }
0350 } else {
0351 N++;
0352 if (MVA1s.at(k) > dt)
0353 FP++;
0354 }
0355 }
0356 }
0357
0358
0359 TPR_eta.push_back(min(TP / P, P));
0360 TPR_eta_mu.push_back(min(TP_mu / P_mu, P_mu));
0361 TPR_eta_el.push_back(min(TP_el / P_el, P_el));
0362 TPR_eta_had.push_back(min(TP_had / P_had, P_had));
0363 TPR_eta_err.push_back(min((float)sqrt(TP * (P - TP) / pow(P, 3)), P));
0364 TPR_eta_err_mu.push_back(min((float)sqrt(TP_mu * (P_mu - TP_mu) / pow(P_mu, 3)), P_mu));
0365 TPR_eta_err_el.push_back(min((float)sqrt(TP_mu * (P_el - TP_el) / pow(P_el, 3)), P_el));
0366 TPR_eta_err_had.push_back(min((float)sqrt(TP_had * (P_had - TP_had) / pow(P_had, 3)), P_had));
0367
0368 FPR_eta.push_back(min(FP / N, N));
0369 FPR_eta_err.push_back(min((float)sqrt(FP * (N - FP) / pow(N, 3)), N));
0370
0371
0372 eta_range.push_back(eta_temp + eta_step / 2);
0373 eta_range_err.push_back(eta_step / 2);
0374
0375 eta_temp += eta_step;
0376 }
0377
0378 TGraphErrors* TPR_vs_eta =
0379 new TGraphErrors(n, eta_range.data(), TPR_eta.data(), eta_range_err.data(), TPR_eta_err.data());
0380 TPR_vs_eta->SetName("TPR_vs_eta");
0381 TPR_vs_eta->SetTitle("TPR vs. #eta; #eta; TPR");
0382
0383 TGraphErrors* FPR_vs_eta =
0384 new TGraphErrors(n, eta_range.data(), FPR_eta.data(), eta_range_err.data(), FPR_eta_err.data());
0385 FPR_vs_eta->SetName("FPR_vs_eta");
0386 FPR_vs_eta->SetTitle("FPR vs. #eta; #eta; FPR");
0387
0388 TGraphErrors* TPR_vs_eta_mu =
0389 new TGraphErrors(n, eta_range.data(), TPR_eta_mu.data(), eta_range_err.data(), TPR_eta_err_mu.data());
0390 TPR_vs_eta_mu->SetName("TPR_vs_eta_mu");
0391 TPR_vs_eta_mu->SetTitle("TPR vs. #eta (muons); #eta; TPR");
0392
0393 TGraphErrors* TPR_vs_eta_el =
0394 new TGraphErrors(n, eta_range.data(), TPR_eta_el.data(), eta_range_err.data(), TPR_eta_err_el.data());
0395 TPR_vs_eta_el->SetName("TPR_vs_eta_el");
0396 TPR_vs_eta_el->SetTitle("TPR vs. #eta (electrons); #eta; TPR");
0397
0398 TGraphErrors* TPR_vs_eta_had =
0399 new TGraphErrors(n, eta_range.data(), TPR_eta_had.data(), eta_range_err.data(), TPR_eta_err_had.data());
0400 TPR_vs_eta_had->SetName("TPR_vs_eta_had");
0401 TPR_vs_eta_had->SetTitle("TPR vs. #eta (hadrons); #eta; TPR");
0402
0403
0404
0405
0406
0407 vector<float> TPR_pt, TPR_pt_mu, TPR_pt_el, TPR_pt_had;
0408 vector<float> TPR_pt_err, TPR_pt_err_mu, TPR_pt_err_el, TPR_pt_err_had;
0409 vector<float> FPR_pt, FPR_pt_err;
0410 vector<float> pt_range, pt_range_err;
0411 n = 10;
0412 float logpt_low = log10(2);
0413 float logpt_high = log10(100);
0414 float logpt_temp = logpt_low;
0415 float logpt_step = (logpt_high - logpt_low) / n;
0416 dt = .5;
0417 for (int ct = 0; ct < n; ct++) {
0418 float TP = 0, TP_mu = 0, TP_el = 0, TP_had = 0;
0419 float FP = 0;
0420 float P = 0, P_mu = 0, P_el = 0, P_had = 0;
0421 float N = 0;
0422 for (int k = 0; k < (int)pts.size(); k++) {
0423 if (pts.at(k) > pow(10, logpt_temp) && pts.at(k) <= (pow(10, logpt_temp + logpt_step))) {
0424 if (fakes.at(k)) {
0425 P++;
0426 if (MVA1s.at(k) > dt)
0427 TP++;
0428 if (abs(pdgids.at(k)) == 13) {
0429 P_mu++;
0430 if (MVA1s.at(k) > dt)
0431 TP_mu++;
0432 } else if (abs(pdgids.at(k)) == 11) {
0433 P_el++;
0434 if (MVA1s.at(k) > dt)
0435 TP_el++;
0436 } else if (abs(pdgids.at(k)) > 37 && abs(pdgids.at(k)) != 999) {
0437 P_had++;
0438 if (MVA1s.at(k) > dt)
0439 TP_had++;
0440 }
0441 } else {
0442 N++;
0443 if (MVA1s.at(k) > dt)
0444 FP++;
0445 }
0446 }
0447 }
0448
0449
0450 TPR_pt.push_back(min(TP / P, P));
0451 TPR_pt_mu.push_back(min(TP_mu / P_mu, P_mu));
0452 TPR_pt_el.push_back(min(TP_el / P_el, P_el));
0453 TPR_pt_had.push_back(min(TP_had / P_had, P_had));
0454 TPR_pt_err.push_back(min((float)sqrt(TP * (P - TP) / pow(P, 3)), P));
0455 TPR_pt_err_mu.push_back(min((float)sqrt(TP_mu * (P_mu - TP_mu) / pow(P_mu, 3)), P_mu));
0456 TPR_pt_err_el.push_back(min((float)sqrt(TP_el * (P_el - TP_el) / pow(P_el, 3)), P_el));
0457 TPR_pt_err_had.push_back(min((float)sqrt(TP_had * (P_had - TP_had) / pow(P_had, 3)), P_had));
0458
0459 FPR_pt.push_back(min(FP / N, N));
0460 FPR_pt_err.push_back(min((float)sqrt(FP * (N - FP) / pow(N, 3)), N));
0461
0462
0463 pt_range.push_back((pow(10, logpt_temp) + pow(10, logpt_temp + logpt_step)) / 2);
0464 pt_range_err.push_back((pow(10, logpt_temp + logpt_step) - pow(10, logpt_temp)) / 2);
0465
0466 logpt_temp += logpt_step;
0467 }
0468
0469 TGraphErrors* TPR_vs_pt = new TGraphErrors(n, pt_range.data(), TPR_pt.data(), pt_range_err.data(), TPR_pt_err.data());
0470 TPR_vs_pt->SetName("TPR_vs_pt");
0471 TPR_vs_pt->SetTitle("TPR vs. p_{T}; p_{T}; TPR");
0472
0473 TGraphErrors* FPR_vs_pt = new TGraphErrors(n, pt_range.data(), FPR_pt.data(), pt_range_err.data(), FPR_pt_err.data());
0474 FPR_vs_pt->SetName("FPR_vs_pt");
0475 FPR_vs_pt->SetTitle("FPR vs. p_{T}; p_{T}; FPR");
0476
0477 TGraphErrors* TPR_vs_pt_mu =
0478 new TGraphErrors(n, pt_range.data(), TPR_pt_mu.data(), pt_range_err.data(), TPR_pt_err_mu.data());
0479 TPR_vs_pt_mu->SetName("TPR_vs_pt_mu");
0480 TPR_vs_pt_mu->SetTitle("TPR vs. p_{T} (muons); p_{T}; TPR");
0481
0482 TGraphErrors* TPR_vs_pt_el =
0483 new TGraphErrors(n, pt_range.data(), TPR_pt_el.data(), pt_range_err.data(), TPR_pt_err_el.data());
0484 TPR_vs_pt_el->SetName("TPR_vs_pt_el");
0485 TPR_vs_pt_el->SetTitle("TPR vs. p_{T} (electrons); p_{T}; TPR");
0486
0487 TGraphErrors* TPR_vs_pt_had =
0488 new TGraphErrors(n, pt_range.data(), TPR_pt_had.data(), pt_range_err.data(), TPR_pt_err_had.data());
0489 TPR_vs_pt_had->SetName("TPR_vs_pt_had");
0490 TPR_vs_pt_had->SetTitle("TPR vs. p_{T} (hadrons); p_{T}; TPR");
0491
0492
0493
0494
0495
0496 TFile* fout = new TFile(type_dir + "MVAoutput_" + type + treeName + ".root", "recreate");
0497 TCanvas c;
0498
0499
0500
0501
0502
0503 h_trk_MVA1->Draw();
0504 h_trk_MVA1->Write();
0505 c.SaveAs("MVA_plots/trk_MVA.pdf");
0506
0507 h_trk_MVA1_real->Draw();
0508 h_trk_MVA1_fake->Draw("same");
0509 h_trk_MVA1_fake->SetTitle("Performance vs. decision threshold; decision thresh.; performance measure");
0510 TLegend* leg1 = new TLegend();
0511 leg1->AddEntry(h_trk_MVA1_real, "real", "l");
0512 leg1->AddEntry(h_trk_MVA1_fake, "fake", "l");
0513 leg1->Draw("same");
0514 c.Write("trk_MVA_rf");
0515 c.SaveAs("MVA_plots/trk_MVA_rf.pdf");
0516
0517 ROC->Draw("AL");
0518 ROC->Write();
0519 c.SaveAs("MVA_plots/ROC.pdf");
0520
0521 ROC_mu->Draw("AL");
0522 ROC_mu->Write();
0523 c.SaveAs("MVA_plots/ROC_mu.pdf");
0524
0525 ROC_el->Draw("AL");
0526 ROC_el->Write();
0527 c.SaveAs("MVA_plots/ROC_el.pdf");
0528
0529 ROC_had->Draw("AL");
0530 ROC_had->Write();
0531 c.SaveAs("MVA_plots/ROC_had.pdf");
0532 c.Clear();
0533
0534 TPR_vs_dt->Draw();
0535 FPR_vs_dt->Draw("same");
0536 TPR_vs_dt->SetTitle("Performance vs. decision threshold; decision thresh.; performance measure");
0537 TLegend* leg2 = new TLegend();
0538 leg2->AddEntry(TPR_vs_dt, "TPR", "l");
0539 leg2->AddEntry(FPR_vs_dt, "FPR", "l");
0540 leg2->Draw("same");
0541 c.Write("TPR_FPR_vs_dt");
0542 c.SaveAs("MVA_plots/TPR_FPR_vs_dt.pdf");
0543 c.Clear();
0544
0545 TPR_vs_dt_mu->Draw();
0546 FPR_vs_dt->Draw("same");
0547 TPR_vs_dt_mu->SetTitle("Performance vs. decision threshold (muons); decision thresh.; performance measure");
0548 TLegend* leg3 = new TLegend();
0549 leg3->AddEntry(TPR_vs_dt_mu, "TPR", "l");
0550 leg3->AddEntry(FPR_vs_dt, "FPR", "l");
0551 leg3->Draw("same");
0552 c.Write("TPR_FPR_vs_dt_mu");
0553 c.SaveAs("MVA_plots/TPR_FPR_vs_dt_mu.pdf");
0554 c.Clear();
0555
0556 TPR_vs_dt_el->Draw();
0557 FPR_vs_dt->Draw("same");
0558 TPR_vs_dt_el->SetTitle("Performance vs. decision threshold (electrons); decision thresh.; performance measure");
0559 TLegend* leg4 = new TLegend();
0560 leg4->AddEntry(TPR_vs_dt_el, "TPR", "l");
0561 leg4->AddEntry(FPR_vs_dt, "FPR", "l");
0562 leg4->Draw("same");
0563 c.Write("TPR_FPR_vs_dt_el");
0564 c.SaveAs("MVA_plots/TPR_FPR_vs_dt_el.pdf");
0565 c.Clear();
0566
0567 TPR_vs_dt_had->Draw();
0568 FPR_vs_dt->Draw("same");
0569 TPR_vs_dt_had->SetTitle("Performance vs. decision threshold (hadrons); decision thresh.; performance measure");
0570 TLegend* leg5 = new TLegend();
0571 leg5->AddEntry(TPR_vs_dt_had, "TPR", "l");
0572 leg5->AddEntry(FPR_vs_dt, "FPR", "l");
0573 leg5->Draw("same");
0574 c.Write("TPR_FPR_vs_dt_had");
0575 c.SaveAs("MVA_plots/TPR_FPR_vs_dt_had.pdf");
0576 c.Clear();
0577
0578 TPR_vs_eta->Draw("ap");
0579 TPR_vs_eta->Write();
0580 c.SaveAs("MVA_plots/TPR_vs_eta.pdf");
0581
0582 TPR_vs_eta_mu->Draw("ap");
0583 TPR_vs_eta_mu->Write();
0584 c.SaveAs("MVA_plots/TPR_vs_eta_mu.pdf");
0585
0586 TPR_vs_eta_el->Draw("ap");
0587 TPR_vs_eta_el->Write();
0588 c.SaveAs("MVA_plots/TPR_vs_eta_el.pdf");
0589
0590 TPR_vs_eta_had->Draw("ap");
0591 TPR_vs_eta_had->Write();
0592 c.SaveAs("MVA_plots/TPR_vs_eta_had.pdf");
0593
0594 FPR_vs_eta->Draw("ap");
0595 FPR_vs_eta->Write();
0596 c.SaveAs("MVA_plots/FPR_vs_eta.pdf");
0597
0598 TPR_vs_pt->Draw("ap");
0599 TPR_vs_pt->Write();
0600 c.SaveAs("MVA_plots/TPR_vs_pt.pdf");
0601
0602 TPR_vs_pt_mu->Draw("ap");
0603 TPR_vs_pt_mu->Write();
0604 c.SaveAs("MVA_plots/TPR_vs_pt_mu.pdf");
0605
0606 TPR_vs_pt_el->Draw("ap");
0607 TPR_vs_pt_el->Write();
0608 c.SaveAs("MVA_plots/TPR_vs_pt_el.pdf");
0609
0610 TPR_vs_pt_had->Draw("ap");
0611 TPR_vs_pt_had->Write();
0612 c.SaveAs("MVA_plots/TPR_vs_pt_had.pdf");
0613
0614 FPR_vs_pt->Draw("ap");
0615 FPR_vs_pt->Write();
0616 c.SaveAs("MVA_plots/FPR_vs_pt.pdf");
0617
0618 fout->Close();
0619 }
0620
0621 void SetPlotStyle() {
0622
0623
0624
0625 gStyle->SetFrameBorderMode(0);
0626 gStyle->SetFrameFillColor(0);
0627 gStyle->SetCanvasBorderMode(0);
0628 gStyle->SetCanvasColor(0);
0629 gStyle->SetPadBorderMode(0);
0630 gStyle->SetPadColor(0);
0631 gStyle->SetStatColor(0);
0632 gStyle->SetHistLineColor(1);
0633
0634 gStyle->SetPalette(1);
0635
0636
0637 gStyle->SetPaperSize(20, 26);
0638 gStyle->SetPadTopMargin(0.05);
0639 gStyle->SetPadRightMargin(0.05);
0640 gStyle->SetPadBottomMargin(0.16);
0641 gStyle->SetPadLeftMargin(0.16);
0642
0643
0644 gStyle->SetTitleXOffset(1.4);
0645 gStyle->SetTitleYOffset(1.4);
0646
0647
0648 gStyle->SetTextFont(42);
0649 gStyle->SetTextSize(0.05);
0650 gStyle->SetLabelFont(42, "x");
0651 gStyle->SetTitleFont(42, "x");
0652 gStyle->SetLabelFont(42, "y");
0653 gStyle->SetTitleFont(42, "y");
0654 gStyle->SetLabelFont(42, "z");
0655 gStyle->SetTitleFont(42, "z");
0656 gStyle->SetLabelSize(0.05, "x");
0657 gStyle->SetTitleSize(0.05, "x");
0658 gStyle->SetLabelSize(0.05, "y");
0659 gStyle->SetTitleSize(0.05, "y");
0660 gStyle->SetLabelSize(0.05, "z");
0661 gStyle->SetTitleSize(0.05, "z");
0662
0663
0664
0665 gStyle->SetMarkerSize(1.2);
0666 gStyle->SetHistLineWidth(4.);
0667 gStyle->SetLineStyleString(4, "[12 12]");
0668
0669
0670 gStyle->SetEndErrorSize(0.);
0671
0672
0673 gStyle->SetOptTitle(0);
0674 gStyle->SetOptStat(0);
0675 gStyle->SetOptFit(0);
0676
0677
0678 gStyle->SetPadTickX(1);
0679 gStyle->SetPadTickY(1);
0680 }