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