File indexing completed on 2023-10-25 10:06:55
0001 #include "TCanvas.h"
0002 #include "TDirectoryFile.h"
0003 #include "TFile.h"
0004 #include "TH1F.h"
0005 #include "TLegend.h"
0006 #include "TObjString.h"
0007 #include "TROOT.h"
0008 #include "TString.h"
0009 #include "TStyle.h"
0010 #include <iostream>
0011
0012 void effic(char* filename1, char* filename2 = 0) {
0013 TFile* f1 = TFile::Open(filename1);
0014 if (! f1) {
0015 std::cout << "Error: unable to open " << filename1 << std::endl;
0016 return;
0017 }
0018 TDirectoryFile* d1 = (TDirectoryFile*)f1->FindObjectAny("MuonIdVal");
0019 if (! d1)
0020 if (f1->cd("/DQMData/Run 1/MuonIdentificationV/Run summary"))
0021 d1 = (TDirectoryFile*)gDirectory;
0022 if (! d1)
0023 if (f1->cd("/DQMData/Run 1/Muons/Run summary/MuonIdentificationV"))
0024 d1 = (TDirectoryFile*)gDirectory;
0025 if (! d1) {
0026 std::cout << "Error: MuonIdVal/MuonIdentificationV not found in " << filename1 << std::endl;
0027 return;
0028 }
0029
0030 TFile* f2 = 0;
0031 TDirectoryFile* d2 = 0;
0032 if (filename2) {
0033 f2 = TFile::Open(filename2);
0034 if (! f2) {
0035 std::cout << "Error: unable to open " << filename2 << std::endl;
0036 return;
0037 }
0038 d2 = (TDirectoryFile*)f2->FindObjectAny("MuonIdVal");
0039 if (! d2)
0040 if (f2->cd("/DQMData/Run 1/MuonIdentificationV/Run summary"))
0041 d2 = (TDirectoryFile*)gDirectory;
0042 if (! d2)
0043 if (f2->cd("/DQMData/Run 1/Muons/Run summary/MuonIdentificationV"))
0044 d2 = (TDirectoryFile*)gDirectory;
0045 if (! d2) {
0046 std::cout << "Error: MuonIdVal/MuonIdentificationV not found in " << filename2 << std::endl;
0047 return;
0048 }
0049 }
0050
0051 gROOT->ForceStyle();
0052 gStyle->SetOptStat(0);
0053
0054
0055 TString version1 = ((TObjString*)f1->GetListOfKeys()->At(0))->GetString().Remove(TString::kLeading, '"').Remove(TString::kTrailing, '"');
0056 TString version2 = "";
0057 if (f2)
0058 version2 = ((TObjString*)f2->GetListOfKeys()->At(0))->GetString().Remove(TString::kLeading, '"').Remove(TString::kTrailing, '"');
0059
0060
0061
0062 TDirectoryFile* tmd1 = (TDirectoryFile*)d1->Get("TrackerMuons");
0063 TDirectoryFile* gmd1 = (TDirectoryFile*)d1->Get("GlobalMuons");
0064 TDirectoryFile* tmd2 = 0;
0065 TDirectoryFile* gmd2 = 0;
0066 if (d2) {
0067 tmd2 = (TDirectoryFile*)d2->Get("TrackerMuons");
0068 gmd2 = (TDirectoryFile*)d2->Get("GlobalMuons");
0069 }
0070
0071 TCanvas* c = new TCanvas("c");
0072 c->Draw();
0073 TLegend* leg = 0;
0074
0075
0076
0077
0078
0079 char pfx[2][4] = {"tm_", "gm_"};
0080 char det[2][4] = {"DT", "CSC"};
0081
0082 TH1F* eff1 = 0;
0083 TH1F* num1 = 0;
0084 TH1F* den1 = 0;
0085 TH1F* eff2 = 0;
0086 TH1F* num2 = 0;
0087 TH1F* den2 = 0;
0088
0089 for(unsigned int i = 0; i < 2; i++) {
0090 if (i == 0 && tmd1) { d1 = tmd1; d2 = tmd2; }
0091 else if (i == 1 && gmd1) { d1 = gmd1; d2 = gmd2; }
0092 else continue;
0093
0094 for(unsigned int j = 0; j < 2; j++) {
0095 eff1 = (TH1F*)d1->Get(Form("h%s1DistWithSegment", det[j]))->Clone(Form("%sh%sDistEffic1", pfx[i], det[j]));
0096 eff1->Reset();
0097 num1 = (TH1F*)eff1->Clone(Form("%sh%sDistNum1", pfx[i], det[j]));
0098 den1 = (TH1F*)eff1->Clone(Form("%sh%sDistDen1", pfx[i], det[j]));
0099 eff1->Sumw2();
0100 num1->Sumw2();
0101 den1->Sumw2();
0102
0103 if (d2) {
0104 eff2 = (TH1F*)eff1->Clone(Form("%sh%sDistEffic2", pfx[i], det[j]));
0105 num2 = (TH1F*)eff1->Clone(Form("%sh%sDistNum2", pfx[i], det[j]));
0106 den2 = (TH1F*)eff1->Clone(Form("%sh%sDistDen2", pfx[i], det[j]));
0107 if (eff2 && num2 && den2) {
0108 eff2->Sumw2();
0109 num2->Sumw2();
0110 den2->Sumw2();
0111 } else
0112 eff2 = 0;
0113 }
0114
0115 for (int k = 1; k <= 4; k++) {
0116 num1->Add((TH1F*)d1->Get(Form("h%s%iDistWithSegment", det[j], k)));
0117 den1->Add((TH1F*)d1->Get(Form("h%s%iDistWithSegment", det[j], k)));
0118 den1->Add((TH1F*)d1->Get(Form("h%s%iDistWithNoSegment", det[j], k)));
0119 if (eff2) {
0120 num2->Add((TH1F*)d2->Get(Form("h%s%iDistWithSegment", det[j], k)));
0121 den2->Add((TH1F*)d2->Get(Form("h%s%iDistWithSegment", det[j], k)));
0122 den2->Add((TH1F*)d2->Get(Form("h%s%iDistWithNoSegment", det[j], k)));
0123 }
0124 }
0125
0126 eff1->SetTitle("");
0127 eff1->GetXaxis()->SetTitle("distance to nearest chamber edge [cm]");
0128 eff1->GetYaxis()->SetTitle("efficiency");
0129 eff1->GetYaxis()->SetTitleOffset(1.1);
0130 eff1->Divide(num1, den1, 1., 1., "B");
0131 eff1->SetLineColor(1);
0132 eff1->SetLineStyle(1);
0133 eff1->Draw("histe");
0134 eff1->SetMaximum(1.1);
0135 if (eff2) {
0136 eff2->Divide(num2, den2, 1., 1., "B");
0137 eff2->SetLineColor(2);
0138 eff2->SetLineStyle(2);
0139 eff2->Draw("histesame");
0140 double ks = eff1->KolmogorovTest(eff2);
0141 eff1->SetTitle(Form("KS: %f", ks));
0142 }
0143
0144 leg = 0;
0145 leg = new TLegend(0., 0., .22, .06);
0146 leg->SetFillColor(0);
0147 leg->AddEntry(eff1, version1.Data(), "l");
0148 if (eff2)
0149 leg->AddEntry(eff2, version2.Data(), "l");
0150 leg->Draw();
0151 c->Update();
0152 c->Print(Form("%sh%sDistEffic.png", pfx[i], det[j]));
0153 }
0154 }
0155 }