CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
MuonTrackResidualsTest.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  parameters = ps;
37 
38  theDbe = edm::Service<DQMStore>().operator->();
39 
40  prescaleFactor = parameters.getUntrackedParameter<int>("diagnosticPrescale", 1);
41 
42 }
43 
44 
46 
47  LogTrace(metname) << "DTResolutionTest: analyzed " << nevents << " events";
48 
49 }
50 
51 
53 
54  metname = "trackResidualsTest";
55  theDbe->setCurrentFolder("Muons/Tests/trackResidualsTest");
56 
57  LogTrace(metname) << "[MuonTrackResidualsTest] beginJob: Parameters initialization"<<endl;
58 
59 
60  string histName, MeanHistoName, SigmaHistoName, MeanHistoTitle, SigmaHistoTitle;
61  vector<string> type;
62  type.push_back("eta");
63  type.push_back("theta");
64  type.push_back("phi");
65 
66 
67  for(unsigned int c=0; c<type.size(); c++){
68 
69  MeanHistoName = "MeanTest_" + type[c];
70  SigmaHistoName = "SigmaTest_" + type[c];
71 
72  MeanHistoTitle = "Mean of the #" + type[c] + " residuals distribution";
73  SigmaHistoTitle = "Sigma of the #" + type[c] + " residuals distribution";
74 
75  histName = "Res_GlbSta_"+type[c];
76  histoNames[type[c]].push_back(histName);
77  histName = "Res_TkGlb_"+type[c];
78  histoNames[type[c]].push_back(histName);
79  histName = "Res_TkSta_"+type[c];
80  histoNames[type[c]].push_back(histName);
81 
82 
83  MeanHistos[type[c]] = theDbe->book1D(MeanHistoName.c_str(),MeanHistoTitle.c_str(),3,0.5,3.5);
84  (MeanHistos[type[c]])->setBinLabel(1,"Res_StaGlb",1);
85  (MeanHistos[type[c]])->setBinLabel(2,"Res_TkGlb",1);
86  (MeanHistos[type[c]])->setBinLabel(3,"Res_TkSta",1);
87 
88 
89  SigmaHistos[type[c]] = theDbe->book1D(SigmaHistoName.c_str(),SigmaHistoTitle.c_str(),3,0.5,3.5);
90  (SigmaHistos[type[c]])->setBinLabel(1,"Res_StaGlb",1);
91  (SigmaHistos[type[c]])->setBinLabel(2,"Res_TkGlb",1);
92  (SigmaHistos[type[c]])->setBinLabel(3,"Res_TkSta",1);
93 
94  }
95 
96  nevents = 0;
97 
98 }
99 
100 
101 void MuonTrackResidualsTest::beginRun(Run const& run, EventSetup const& eSetup) {
102 
103  LogTrace(metname)<<"[MuonTrackResidualsTest]: beginRun";
104 
105 }
106 
108 
109  // LogTrace(metname)<<"[MuonTrackResidualsTest]: beginLuminosityBlock";
110 
111  // Get the run number
112  // run = lumiSeg.run();
113 
114 }
115 
116 
118 
119  nevents++;
120  LogTrace(metname)<< "[MuonTrackResidualsTest]: "<<nevents<<" events";
121 
122 }
123 
124 
125 
127 
128  // LogTrace(metname)<<"[MuonTrackResidualsTest]: endLuminosityBlock, performing the DQM LS client operation"<<endl;
129 
130  // counts number of lumiSegs
131  nLumiSegs = lumiSeg.id().luminosityBlock();
132 
133  // prescale factor
134  if ( nLumiSegs%prescaleFactor != 0 ) return;
135 
136 
137 }
138 
139 
140 void MuonTrackResidualsTest::endRun(Run const& run, EventSetup const& eSetup) {
141 
142  LogTrace(metname)<<"[MuonTrackResidualsTest]: endRun, performing the DQM end of run client operation";
143 
144  for(map<string, vector<string> > ::const_iterator histo = histoNames.begin();
145  histo != histoNames.end();
146  histo++) {
147 
148  for (unsigned int type=0; type< (*histo).second.size(); type++){
149 
150  string path = "Muons/MuonRecoAnalyzer/" + (*histo).second[type];
151  MonitorElement * res_histo = theDbe->get(path);
152  if (res_histo) {
153 
154  // gaussian test
155  string GaussianCriterionName =
156  parameters.getUntrackedParameter<string>("resDistributionTestName",
157  "ResidualsDistributionGaussianTest");
158  const QReport * GaussianReport = res_histo->getQReport(GaussianCriterionName);
159  if(GaussianReport){
160  LogTrace(metname) << "-------- histo : "<<(*histo).second[type]<<" "<<GaussianReport->getMessage()<<" ------- "<<GaussianReport->getStatus();
161  }
162  int BinNumber = type+1;
163  float mean = (*res_histo).getMean(1);
164  float sigma = (*res_histo).getRMS(1);
165  MeanHistos.find((*histo).first)->second->setBinContent(BinNumber, mean);
166  SigmaHistos.find((*histo).first)->second->setBinContent(BinNumber, sigma);
167  }
168  }
169  }
170 
171 
172  // Mean test
173  string MeanCriterionName = parameters.getUntrackedParameter<string>("meanTestName","ResidualsMeanInRange");
174  for(map<string, MonitorElement*>::const_iterator hMean = MeanHistos.begin();
175  hMean != MeanHistos.end();
176  hMean++) {
177  const QReport * theMeanQReport = (*hMean).second->getQReport(MeanCriterionName);
178  if(theMeanQReport) {
179  vector<dqm::me_util::Channel> badChannels = theMeanQReport->getBadChannels();
180  for (vector<dqm::me_util::Channel>::iterator channel = badChannels.begin();
181  channel != badChannels.end(); channel++) {
182  LogTrace(metname)<< "type:"<<(*hMean).first<<" Bad mean channels: "<<(*channel).getBin()<<" Contents : "<<(*channel).getContents()<<endl;
183  }
184  LogTrace(metname)<< "-------- type: "<<(*hMean).first<<" "<<theMeanQReport->getMessage()<<" ------- "<<theMeanQReport->getStatus()<<endl;
185  }
186  }
187 
188  // Sigma test
189  string SigmaCriterionName = parameters.getUntrackedParameter<string>("sigmaTestName","ResidualsSigmaInRange");
190  for(map<string, MonitorElement*>::const_iterator hSigma = SigmaHistos.begin();
191  hSigma != SigmaHistos.end();
192  hSigma++) {
193  const QReport * theSigmaQReport = (*hSigma).second->getQReport(SigmaCriterionName);
194  if(theSigmaQReport) {
195  vector<dqm::me_util::Channel> badChannels = theSigmaQReport->getBadChannels();
196  for (vector<dqm::me_util::Channel>::iterator channel = badChannels.begin();
197  channel != badChannels.end(); channel++) {
198  LogTrace(metname)<< "type:"<<(*hSigma).first<<" Bad sigma channels: "<<(*channel).getBin()<<" Contents : "<<(*channel).getContents()<<endl;
199  }
200  LogTrace(metname) << "-------- type: "<<(*hSigma).first<<" "<<theSigmaQReport->getMessage()<<" ------- "<<theSigmaQReport->getStatus()<<endl;
201  }
202  }
203 }
204 
206 
207  LogTrace(metname)<< "[MuonTrackResidualsTest] endJob called!";
208  theDbe->rmdir("Muons/Tests/trackResidualsTest");
209 
210 }
211 
212 
213 
LuminosityBlockID id() const
type
Definition: HCALResponse.h:21
void endLuminosityBlock(edm::LuminosityBlock const &lumiSeg, edm::EventSetup const &c)
DQM Client Diagnostic.
dictionary parameters
Definition: Parameters.py:2
const QReport * getQReport(const std::string &qtname) const
get QReport corresponding to &lt;qtname&gt; (null pointer if QReport does not exist)
void beginJob(void)
BeginJob.
const std::string metname
void endRun(edm::Run const &run, edm::EventSetup const &eSetup)
const std::string & getMessage(void) const
get message attached to test
Definition: QReport.h:24
void analyze(const edm::Event &e, const edm::EventSetup &c)
Analyze.
MuonTrackResidualsTest(const edm::ParameterSet &ps)
Constructor.
int getStatus(void) const
get test status (see Core/interface/QTestStatus.h)
Definition: QReport.h:16
virtual ~MuonTrackResidualsTest()
Destructor.
int nevents
const std::vector< DQMChannel > & getBadChannels(void) const
Definition: QReport.h:33
#define LogTrace(id)
LuminosityBlockNumber_t luminosityBlock() const
void beginLuminosityBlock(edm::LuminosityBlock const &lumiSeg, edm::EventSetup const &context)
void beginRun(edm::Run const &run, edm::EventSetup const &eSetup)
Definition: Run.h:41