CMS 3D CMS Logo

All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
MuonRecoTest.cc
Go to the documentation of this file.
1 
2 /*
3  * See header file for a description of this class.
4  *
5  * \author G. Mila - INFN Torino
6  */
7 
9 
10 // Framework
17 
21 
22 #include <iostream>
23 #include <cstdio>
24 #include <string>
25 #include <cmath>
26 #include "TF1.h"
27 
28 using namespace edm;
29 using namespace std;
30 
32  parameters = ps;
33 
34  prescaleFactor = parameters.getUntrackedParameter<int>("diagnosticPrescale", 1);
35 
36  // Parameters
37  etaBin = parameters.getParameter<int>("etaBin");
38  etaMin = parameters.getParameter<double>("etaMin");
39  etaMax = parameters.getParameter<double>("etaMax");
40 
41  phiBin = parameters.getParameter<int>("phiBin");
42  phiMin = parameters.getParameter<double>("phiMin");
43  phiMax = parameters.getParameter<double>("phiMax");
44 
45  EfficiencyCriterionName = parameters.getUntrackedParameter<string>("efficiencyTestName", "EfficiencyInRange");
46 }
49  ibooker.setCurrentFolder("Muons/Tests/muonRecoTest");
50  // efficiency plot
51  etaEfficiency = ibooker.book1D("etaEfficiency_staMuon", "#eta_{STA} efficiency", etaBin, etaMin, etaMax);
52  phiEfficiency = ibooker.book1D("phiEfficiency_staMuon", "#phi_{STA} efficiency", phiBin, phiMin, phiMax);
53 
54  // alignment plots
55  globalRotation.push_back(ibooker.book1D(
56  "muVStkSytemRotation_posMu_profile", "pT_{TK} / pT_{GLB} vs pT_{GLB} profile for #mu^{+}", 50, 0, 200));
57  globalRotation.push_back(ibooker.book1D(
58  "muVStkSytemRotation_negMu_profile", "pT_{TK} / pT_{GLB} vs pT_{GLB} profile for #mu^{-}", 50, 0, 200));
59  globalRotation.push_back(ibooker.book1D(
60  "muVStkSytemRotation_profile", "pT_{TK} / pT_{GLB} vs pT_{GLB} profile for #mu^{+}-#mu^{-}", 50, 0, 200));
61 
63  string path = "Muons/MuonRecoAnalyzer/StaEta_ifCombinedAlso";
64  MonitorElement* staEtaIfComb_histo = igetter.get(path);
65  path = "Muons/MuonRecoAnalyzer/StaEta";
66  MonitorElement* staEta_histo = igetter.get(path);
67 
68  if (staEtaIfComb_histo && staEta_histo) {
69  TH1F* staEtaIfComb_root = staEtaIfComb_histo->getTH1F();
70  TH1F* staEta_root = staEta_histo->getTH1F();
71 
72  if (staEtaIfComb_root->GetXaxis()->GetNbins() != etaBin || staEtaIfComb_root->GetXaxis()->GetXmax() != etaMax ||
73  staEtaIfComb_root->GetXaxis()->GetXmin() != etaMin) {
74  LogTrace(metname) << "[MuonRecoTest] wrong histo binning on eta histograms";
75  return;
76  }
77 
78  for (int i = 1; i <= etaBin; i++) {
79  if (staEta_root->GetBinContent(i) != 0) {
80  double efficiency = double(staEtaIfComb_root->GetBinContent(i)) / double(staEta_root->GetBinContent(i));
81  etaEfficiency->setBinContent(i, efficiency);
82  }
83  }
84  }
85 
86  path = "Muons/MuonRecoAnalyzer/StaPhi_ifCombinedAlso";
87  MonitorElement* staPhiIfComb_histo = igetter.get(path);
88  path = "Muons/MuonRecoAnalyzer/StaPhi";
89  MonitorElement* staPhi_histo = igetter.get(path);
90 
91  if (staPhiIfComb_histo && staPhi_histo) {
92  TH1F* staPhiIfComb_root = staPhiIfComb_histo->getTH1F();
93  TH1F* staPhi_root = staPhi_histo->getTH1F();
94 
95  if (staPhiIfComb_root->GetXaxis()->GetNbins() != phiBin || staPhiIfComb_root->GetXaxis()->GetXmax() != phiMax ||
96  staPhiIfComb_root->GetXaxis()->GetXmin() != phiMin) {
97  LogTrace(metname) << "[MuonRecoTest] wrong histo binning on phi histograms";
98  return;
99  }
100 
101  for (int i = 1; i <= etaBin; i++) {
102  if (staPhi_root->GetBinContent(i) != 0) {
103  double efficiency = double(staPhiIfComb_root->GetBinContent(i)) / double(staPhi_root->GetBinContent(i));
104  phiEfficiency->setBinContent(i, efficiency);
105  }
106  }
107  }
108 
109  // efficiency test
110 
111  // eta efficiency
112  const QReport* theEtaQReport = etaEfficiency->getQReport(EfficiencyCriterionName);
113  if (theEtaQReport) {
114  vector<dqm::me_util::Channel> badChannels = theEtaQReport->getBadChannels();
115  for (vector<dqm::me_util::Channel>::iterator channel = badChannels.begin(); channel != badChannels.end();
116  channel++) {
117  LogTrace(metname) << "[etaEfficiency test] bad ranges: " << (*channel).getBin()
118  << " Contents : " << (*channel).getContents() << endl;
119  }
120  LogTrace(metname) << "-------- type: [etaEfficiency] " << theEtaQReport->getMessage() << " ------- "
121  << theEtaQReport->getStatus() << endl;
122  }
123  // phi efficiency
124  const QReport* thePhiQReport = phiEfficiency->getQReport(EfficiencyCriterionName);
125  if (thePhiQReport) {
126  vector<dqm::me_util::Channel> badChannels = thePhiQReport->getBadChannels();
127  for (vector<dqm::me_util::Channel>::iterator channel = badChannels.begin(); channel != badChannels.end();
128  channel++) {
129  LogTrace(metname) << "[phiEfficiency test] bad ranges: " << (*channel).getBin()
130  << " Contents : " << (*channel).getContents() << endl;
131  }
132  LogTrace(metname) << "-------- type: [phiEfficiency] " << thePhiQReport->getMessage() << " ------- "
133  << thePhiQReport->getStatus() << endl;
134  }
135 
136  //alignment plot
137  string pathPos = "Muons/MuonRecoAnalyzer/muVStkSytemRotation_posMu";
138  MonitorElement* muVStkSytemRotation_posMu_histo = igetter.get(pathPos);
139  string pathNeg = "Muons/MuonRecoAnalyzer/muVStkSytemRotation_negMu";
140  MonitorElement* muVStkSytemRotation_negMu_histo = igetter.get(pathNeg);
141  if (muVStkSytemRotation_posMu_histo && muVStkSytemRotation_negMu_histo) {
142  TH2F* muVStkSytemRotation_posMu_root = muVStkSytemRotation_posMu_histo->getTH2F();
143  TProfile* muVStkSytemRotation_posMu_profile = muVStkSytemRotation_posMu_root->ProfileX("", 1, 100);
144  TH2F* muVStkSytemRotation_negMu_root = muVStkSytemRotation_negMu_histo->getTH2F();
145  TProfile* muVStkSytemRotation_negMu_profile = muVStkSytemRotation_negMu_root->ProfileX("", 1, 100);
146 
147  for (int x = 1; x < 50; x++) {
148  globalRotation[0]->Fill((x * 4) - 1, muVStkSytemRotation_posMu_profile->GetBinContent(x));
149  globalRotation[0]->setBinError(x, muVStkSytemRotation_posMu_profile->GetBinError(x));
150  globalRotation[1]->Fill((x * 4) - 1, muVStkSytemRotation_negMu_profile->GetBinContent(x));
151  globalRotation[1]->setBinError(x, muVStkSytemRotation_negMu_profile->GetBinError(x));
152  globalRotation[2]->Fill(
153  (x * 4) - 1,
154  muVStkSytemRotation_posMu_profile->GetBinContent(x) - muVStkSytemRotation_negMu_profile->GetBinContent(x));
155  globalRotation[2]->setBinError(
156  x,
157  sqrt(
158  (muVStkSytemRotation_posMu_profile->GetBinError(x) * muVStkSytemRotation_posMu_profile->GetBinError(x)) +
159  (muVStkSytemRotation_negMu_profile->GetBinError(x) * muVStkSytemRotation_negMu_profile->GetBinError(x))));
160  }
161  }
162 }
MonitorElement * book1D(TString const &name, TString const &title, int const nchX, double const lowX, double const highX)
Definition: DQMStore.cc:239
virtual TH2F * getTH2F() const
const std::vector< DQMChannel > & getBadChannels() const
Definition: QReport.h:37
const std::string metname
void setCurrentFolder(std::string const &fullpath)
Definition: DQMStore.cc:418
virtual TH1F * getTH1F() const
T sqrt(T t)
Definition: SSEVec.h:19
const std::string & getMessage() const
get message attached to test
Definition: QReport.h:30
#define LogTrace(id)
void dqmEndJob(DQMStore::IBooker &, DQMStore::IGetter &) override
Endjob.
Definition: MuonRecoTest.cc:47
int getStatus() const
get test status (see Core/interface/QTestStatus.h)
Definition: QReport.h:24
HLT enums.
MuonRecoTest(const edm::ParameterSet &ps)
Constructor.
Definition: MuonRecoTest.cc:31
MonitorElement * get(std::string const &path)
Definition: DQMStore.cc:437