File indexing completed on 2023-10-25 10:06:55
0001 #include <iostream>
0002 #include "TCanvas.h"
0003 #include "TDirectoryFile.h"
0004 #include "TFile.h"
0005 #include "TH1F.h"
0006 #include "TH2F.h"
0007 #include "TIterator.h"
0008 #include "TKey.h"
0009 #include "TLegend.h"
0010 #include "TList.h"
0011 #include "TObjString.h"
0012 #include "TPaveStats.h"
0013 #include "TPRegexp.h"
0014 #include "TRegexp.h"
0015 #include "TROOT.h"
0016 #include "TString.h"
0017 #include "TStyle.h"
0018
0019 void muonIdVal(char* filename1, char* filename2 = 0, bool make2DPlots = true, bool printPng = true, bool printHtml = true, bool printEps = false) {
0020 TFile* f1 = TFile::Open(filename1);
0021 if (! f1) {
0022 std::cout << "Error: unable to open " << filename1 << std::endl;
0023 return;
0024 }
0025 TDirectoryFile* d1 = (TDirectoryFile*)f1->FindObjectAny("MuonIdVal");
0026 if (! d1)
0027 if (f1->cd("/DQMData/Run 1/MuonIdentificationV/Run summary"))
0028 d1 = (TDirectoryFile*)gDirectory;
0029 if (! d1)
0030 if (f1->cd("/DQMData/Run 1/Muons/Run summary/MuonIdentificationV"))
0031 d1 = (TDirectoryFile*)gDirectory;
0032 if (! d1) {
0033 std::cout << "Error: MuonIdVal/MuonIdentificationV not found in " << filename1 << std::endl;
0034 return;
0035 }
0036
0037 TFile* f2 = 0;
0038 TDirectoryFile* d2 = 0;
0039 if (filename2) {
0040 f2 = TFile::Open(filename2);
0041 if (! f2) {
0042 std::cout << "Error: unable to open " << filename2 << std::endl;
0043 return;
0044 }
0045 d2 = (TDirectoryFile*)f2->FindObjectAny("MuonIdVal");
0046 if (! d2)
0047 if (f2->cd("/DQMData/Run 1/MuonIdentificationV/Run summary"))
0048 d2 = (TDirectoryFile*)gDirectory;
0049 if (! d2)
0050 if (f2->cd("/DQMData/Run 1/Muons/Run summary/MuonIdentificationV"))
0051 d2 = (TDirectoryFile*)gDirectory;
0052 if (! d2) {
0053 std::cout << "Error: MuonIdVal/MuonIdentificationV not found in " << filename2 << std::endl;
0054 return;
0055 }
0056 }
0057
0058 TList* list = 0;
0059 TIterator* iter = 0;
0060 TKey* key = 0;
0061 TObject* obj1 = 0;
0062 TObject* obj2 = 0;
0063
0064 gROOT->ForceStyle();
0065 gROOT->SetStyle("Plain");
0066 gStyle->SetOptStat(111111);
0067 gStyle->SetOptFit(1);
0068
0069
0070 TString version1 = ((TObjString*)f1->GetListOfKeys()->At(0))->GetString().Remove(TString::kLeading, '"').Remove(TString::kTrailing, '"');
0071 TString version2 = "";
0072 if (f2)
0073 version2 = ((TObjString*)f2->GetListOfKeys()->At(0))->GetString().Remove(TString::kLeading, '"').Remove(TString::kTrailing, '"');
0074
0075
0076
0077 TDirectoryFile* tmd1 = (TDirectoryFile*)d1->Get("TrackerMuons");
0078 TDirectoryFile* gmd1 = (TDirectoryFile*)d1->Get("GlobalMuons");
0079 TDirectoryFile* tmngmd1 = (TDirectoryFile*)d1->Get("TrackerMuonsNotGlobalMuons");
0080 TDirectoryFile* gmntmd1 = (TDirectoryFile*)d1->Get("GlobalMuonsNotTrackerMuons");
0081 TDirectoryFile* tmd2 = 0;
0082 TDirectoryFile* gmd2 = 0;
0083 TDirectoryFile* tmngmd2 = 0;
0084 TDirectoryFile* gmntmd2 = 0;
0085 if (d2) {
0086 tmd2 = (TDirectoryFile*)d2->Get("TrackerMuons");
0087 gmd2 = (TDirectoryFile*)d2->Get("GlobalMuons");
0088 tmngmd2 = (TDirectoryFile*)d2->Get("TrackerMuonsNotGlobalMuons");
0089 gmntmd2 = (TDirectoryFile*)d2->Get("GlobalMuonsNotGlobalMuons");
0090 }
0091
0092 TCanvas* c1 = new TCanvas("c1");
0093 c1->Draw();
0094 TPaveStats* s1 = 0;
0095 TPaveStats* s2 = 0;
0096 TLegend* leg = 0;
0097 TRegexp re("*Pull[dxy]*", kTRUE);
0098
0099
0100
0101
0102
0103
0104
0105 char pfx[5][7] = {"", "tm_", "gm_", "tmngm_", "gmntm_"};
0106
0107 for(unsigned int i = 0; i < 5; i++) {
0108 if (i == 0) {}
0109 else if (i == 1 && tmd1) { d1 = tmd1; d2 = tmd2; }
0110 else if (i == 2 && gmd1) { d1 = gmd1; d2 = gmd2; }
0111 else if (i == 3 && tmngmd1) { d1 = tmngmd1; d2 = tmngmd2; }
0112 else if (i == 4 && gmntmd1) { d1 = gmntmd1; d2 = gmntmd2; }
0113 else continue;
0114
0115 list = d1->GetListOfKeys();
0116 iter = list->MakeIterator();
0117 while((key = (TKey*)iter->Next())) {
0118 obj1 = key->ReadObj();
0119 obj2 = 0;
0120 s2 = 0;
0121 if (d2) {
0122 obj2 = d2->Get(obj1->GetName());
0123
0124
0125
0126
0127
0128 if (! obj2 && i == 0)
0129 obj2 = f2->FindObjectAny(obj1->GetName());
0130 }
0131
0132 if (obj1->InheritsFrom(TH1::Class()) || (obj1->InheritsFrom(TH2::Class()) && make2DPlots)) {
0133 ((TH1*)obj1)->Sumw2();
0134 if (obj2) ((TH1*)obj2)->Sumw2();
0135
0136
0137 if (obj2 && obj1->InheritsFrom(TH1F::Class())) {
0138 ((TH1F*)obj1)->Scale(1./((TH1F*)obj1)->Integral());
0139 ((TH1F*)obj2)->Scale(1./((TH1F*)obj2)->Integral());
0140 }
0141
0142 if ((TString(obj1->GetName()).Index(re) >= 0)) {
0143 ((TH1F*)obj1)->Fit("gaus", "", "", -2., 2.);
0144 if (obj2)
0145 ((TH1F*)obj2)->Fit("gaus", "", "", -2., 2.);
0146 }
0147
0148 ((TH1*)obj1)->SetLineColor(4);
0149 ((TH1*)obj1)->SetMarkerColor(4);
0150 ((TH1*)obj1)->Draw("hist");
0151 ((TH1*)obj1)->Draw("funcsame");
0152 c1->Update();
0153 s1 = (TPaveStats*)obj1->FindObject("stats");
0154 s1->SetTextColor(4);
0155 s1->SetFillStyle(0);
0156
0157 if (obj2) {
0158 ((TH1*)obj2)->SetLineColor(2);
0159 ((TH1*)obj2)->SetMarkerColor(2);
0160 ((TH1*)obj2)->Draw("histsame");
0161 ((TH1*)obj2)->Draw("funcsames");
0162 c1->Update();
0163
0164 s2 = (TPaveStats*)obj2->FindObject("stats");
0165 s2->SetTextColor(2);
0166 s2->SetFillStyle(0);
0167 double height = s2->GetY2NDC()-s2->GetY1NDC();
0168 s2->SetY2NDC(s1->GetY1NDC()-.005);
0169 s2->SetY1NDC(s2->GetY2NDC()-height);
0170
0171
0172
0173 if (obj2->InheritsFrom(TH1F::Class()))
0174 if (((TH1F*)obj2)->GetMaximum() > ((TH1F*)obj1)->GetMaximum())
0175 ((TH1F*)obj1)->SetMaximum(((TH1F*)obj2)->GetMaximum()*1.05);
0176 }
0177
0178 leg = 0;
0179 leg = new TLegend(0., 0., .22, .06);
0180 leg->SetFillColor(0);
0181 leg->AddEntry(obj1, version1.Data(), "l");
0182 if (obj2)
0183 leg->AddEntry(obj2, version2.Data(), "l");
0184 leg->Draw();
0185 c1->Update();
0186
0187
0188 if (printPng)
0189 c1->Print(Form("%s%s.png", pfx[i], obj1->GetName()));
0190
0191 delete leg;
0192 }
0193 }
0194 }
0195
0196 f1->Close();
0197 if (f2)
0198 f2->Close();
0199
0200 TPRegexp preg = TPRegexp("(\\S+).root");
0201 TString output = ((TObjString*)preg.MatchS(TString(filename1))->At(1))->GetString();
0202
0203
0204 if (printHtml) {
0205 }
0206
0207
0208 if (printEps) {
0209 }
0210 }