File indexing completed on 2024-04-06 12:20:29
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010 #include "FWCore/Utilities/interface/EDGetToken.h"
0011 #include "FWCore/Framework/interface/Frameworkfwd.h"
0012 #include "FWCore/Framework/interface/one/EDAnalyzer.h"
0013 #include "FWCore/Framework/interface/Event.h"
0014 #include "FWCore/Framework/interface/EventSetup.h"
0015 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0016 #include "FWCore/Framework/interface/MakerMacros.h"
0017 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0018 #include "FWCore/ServiceRegistry/interface/Service.h"
0019 #include "CommonTools/UtilAlgos/interface/TFileService.h"
0020
0021 #include "TH1F.h"
0022 #include "TPostScript.h"
0023 #include "TCanvas.h"
0024 #include "TFile.h"
0025 #include "TText.h"
0026 #include "TPaveLabel.h"
0027 #include "TLegend.h"
0028 #include "TStyle.h"
0029 #include "TROOT.h"
0030
0031 #include <iostream>
0032 #include <string>
0033
0034 class GEMTriggerPrimitivesAnalyzer : public edm::one::EDAnalyzer<edm::one::SharedResources> {
0035 public:
0036
0037 explicit GEMTriggerPrimitivesAnalyzer(const edm::ParameterSet &conf);
0038
0039
0040 ~GEMTriggerPrimitivesAnalyzer() override {}
0041
0042
0043 void analyze(const edm::Event &event, const edm::EventSetup &setup) override;
0044
0045
0046 void endJob() override;
0047
0048 private:
0049 void makePlot(TH1F *dataMon,
0050 TH1F *emulMon,
0051 TH1F *diffMon,
0052 TString lcts,
0053 TString lct,
0054 TString var,
0055 TString chamber,
0056 TPostScript *ps,
0057 TCanvas *c1) const;
0058
0059
0060 std::string rootFileName_;
0061 unsigned runNumber_;
0062 std::string monitorDir_;
0063 std::vector<std::string> chambers_;
0064 std::vector<std::string> clusterVars_;
0065 bool dataVsEmulatorPlots_;
0066 void makeDataVsEmulatorPlots();
0067
0068
0069
0070
0071
0072
0073 bool B904Setup_;
0074
0075 std::string B904RunNumber_;
0076 };
0077
0078 GEMTriggerPrimitivesAnalyzer::GEMTriggerPrimitivesAnalyzer(const edm::ParameterSet &conf)
0079 : rootFileName_(conf.getParameter<std::string>("rootFileName")),
0080 runNumber_(conf.getParameter<unsigned>("runNumber")),
0081 monitorDir_(conf.getParameter<std::string>("monitorDir")),
0082 chambers_(conf.getParameter<std::vector<std::string>>("chambers")),
0083 clusterVars_(conf.getParameter<std::vector<std::string>>("clusterVars")),
0084 dataVsEmulatorPlots_(conf.getParameter<bool>("dataVsEmulatorPlots")),
0085 B904Setup_(conf.getParameter<bool>("B904Setup")),
0086 B904RunNumber_(conf.getParameter<std::string>("B904RunNumber")) {
0087 usesResource("TFileService");
0088 }
0089
0090 void GEMTriggerPrimitivesAnalyzer::analyze(const edm::Event &ev, const edm::EventSetup &setup) {}
0091
0092 void GEMTriggerPrimitivesAnalyzer::endJob() {
0093 if (dataVsEmulatorPlots_)
0094 makeDataVsEmulatorPlots();
0095 }
0096
0097 void GEMTriggerPrimitivesAnalyzer::makeDataVsEmulatorPlots() {
0098
0099 edm::Service<TFileService> fs;
0100
0101
0102 std::string delimiter = "/";
0103 int pos = monitorDir_.find(delimiter);
0104 std::string superDir = monitorDir_.substr(0, pos);
0105 monitorDir_.erase(0, pos + delimiter.length());
0106 std::string subDir = monitorDir_;
0107 std::string path = "DQMData/Run " + std::to_string(runNumber_) + "/" + superDir + "/Run summary/" + subDir + "/";
0108
0109 TFile *theFile = new TFile(rootFileName_.c_str());
0110 if (!theFile) {
0111 edm::LogError("GEMTriggerPrimitivesAnalyzer") << "Unable to load DQM ROOT file: " << rootFileName_;
0112 return;
0113 }
0114
0115 TDirectory *directory = theFile->GetDirectory(path.c_str());
0116 if (!directory) {
0117 edm::LogError("GEMTriggerPrimitivesAnalyzer") << "Unable to navigate to directory: " << path;
0118 return;
0119 }
0120
0121 TString runTitle = "CMS_Run_" + std::to_string(runNumber_);
0122 if (B904Setup_)
0123 runTitle = "B904_Cosmic_Run_" + TString(B904RunNumber_);
0124
0125 TPostScript *ps = new TPostScript("GEM_dataVsEmul_" + runTitle + ".ps", 111);
0126 TCanvas *c1 = new TCanvas("c1", "", 800, 800);
0127 c1->Clear();
0128 c1->Divide(1, 2);
0129
0130
0131 for (unsigned iVar = 0; iVar < clusterVars_.size(); iVar++) {
0132
0133 for (unsigned iType = 0; iType < chambers_.size(); iType++) {
0134 const std::string key("cluster_" + clusterVars_[iVar]);
0135 const std::string histData(key + "_data_" + chambers_[iType]);
0136 const std::string histEmul(key + "_emul_" + chambers_[iType]);
0137 const std::string histDiff(key + "_diff_" + chambers_[iType]);
0138
0139 TH1F *dataMon = (TH1F *)directory->Get(histData.c_str());
0140 TH1F *emulMon = (TH1F *)directory->Get(histEmul.c_str());
0141 TH1F *diffMon = (TH1F *)directory->Get(histDiff.c_str());
0142
0143
0144
0145 if (dataMon && emulMon && diffMon) {
0146 makePlot(dataMon,
0147 emulMon,
0148 diffMon,
0149 "GEM Cluster",
0150 "gemcluster_",
0151 TString(clusterVars_[iVar]),
0152 TString(chambers_[iType]),
0153 ps,
0154 c1);
0155 }
0156 }
0157 }
0158
0159 ps->Close();
0160
0161 theFile->Close();
0162 delete c1;
0163 delete ps;
0164 }
0165
0166 void GEMTriggerPrimitivesAnalyzer::makePlot(TH1F *dataMon,
0167 TH1F *emulMon,
0168 TH1F *diffMon,
0169 TString lcts,
0170 TString lct,
0171 TString var,
0172 TString chamber,
0173 TPostScript *ps,
0174 TCanvas *c1) const {
0175 ps->NewPage();
0176
0177 TString runTitle = "(CMS Run " + std::to_string(runNumber_) + ")";
0178 if (B904Setup_)
0179 runTitle = "(B904 Cosmic Run " + TString(B904RunNumber_) + ")";
0180 const TString title(chamber + " " + lcts + " " + var + " " + runTitle);
0181 c1->cd(1);
0182 gPad->SetGridx();
0183 gPad->SetGridy();
0184 gStyle->SetOptStat(1111);
0185 dataMon->SetTitle(title);
0186 dataMon->GetXaxis()->SetTitle(lcts + " " + var);
0187 dataMon->GetYaxis()->SetTitle("Entries");
0188 dataMon->SetMarkerColor(kBlack);
0189 dataMon->SetMarkerStyle(kPlus);
0190 dataMon->SetMarkerSize(3);
0191
0192 dataMon->SetMaximum(dataMon->GetBinContent(dataMon->GetMaximumBin()) * 1.6);
0193 dataMon->Draw("histp");
0194 dataMon->GetXaxis()->SetLabelSize(0.05);
0195 dataMon->GetYaxis()->SetLabelSize(0.05);
0196 dataMon->GetXaxis()->SetTitleSize(0.05);
0197 dataMon->GetYaxis()->SetTitleSize(0.05);
0198 emulMon->SetLineColor(kRed);
0199 emulMon->Draw("histsame");
0200 auto legend = new TLegend(0.6, 0.7, 0.9, 0.9);
0201 legend->AddEntry(dataMon, TString("Data (" + std::to_string((int)dataMon->GetEntries()) + ")"), "p");
0202 legend->AddEntry(emulMon, TString("Emulator (" + std::to_string((int)emulMon->GetEntries()) + ")"), "l");
0203 legend->Draw();
0204
0205 c1->cd(2);
0206 gPad->SetGridx();
0207 gPad->SetGridy();
0208 gStyle->SetOptStat(0);
0209 diffMon->SetLineColor(kBlack);
0210 diffMon->SetTitle(title);
0211 diffMon->GetXaxis()->SetTitle(lcts + " " + var);
0212 diffMon->GetYaxis()->SetTitle("Emul - Data");
0213 diffMon->GetXaxis()->SetLabelSize(0.05);
0214 diffMon->GetYaxis()->SetLabelSize(0.05);
0215 diffMon->GetXaxis()->SetTitleSize(0.05);
0216 diffMon->GetYaxis()->SetTitleSize(0.05);
0217 diffMon->Draw("ep");
0218 c1->Update();
0219 }
0220
0221 DEFINE_FWK_MODULE(GEMTriggerPrimitivesAnalyzer);