CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
SiStripCertificationInfo.cc
Go to the documentation of this file.
4 
10 
14 
18 
19 //Run Info
23 
24 #include <iostream>
25 #include <iomanip>
26 #include <stdio.h>
27 #include <string>
28 #include <sstream>
29 #include <math.h>
30 //
31 // -- Contructor
32 //
34  // Create MessageSender
35  edm::LogInfo( "SiStripCertificationInfo") << "SiStripCertificationInfo::Deleting SiStripCertificationInfo ";
36  // get back-end interface
39 }
41  edm::LogInfo("SiStripCertificationInfo") << "SiStripCertificationInfo::Deleting SiStripCertificationInfo ";
42 
43 }
44 //
45 // -- Begin Job
46 //
48 
49 }
50 //
51 // -- Begin Run
52 //
54 
55  edm::LogInfo ("SiStripCertificationInfo") <<"SiStripCertificationInfo:: Begining of Run";
56  unsigned long long cacheID = eSetup.get<SiStripDetCablingRcd>().cacheIdentifier();
57  if (m_cacheID_ != cacheID) {
58  m_cacheID_ = cacheID;
59  }
60  eSetup.get<SiStripDetCablingRcd>().get(detCabling_);
61 
62  nFEDConnected_ = 0;
63  const int siStripFedIdMin = FEDNumbering::MINSiStripFEDID;
64  const int siStripFedIdMax = FEDNumbering::MAXSiStripFEDID;
65 
67  if( eSetup.find( recordKey ) != 0) {
68 
70  eSetup.get<RunInfoRcd>().get(sumFED);
71 
72  if ( sumFED.isValid() ) {
73  std::vector<int> FedsInIds= sumFED->m_fed_in;
74  for(unsigned int it = 0; it < FedsInIds.size(); ++it) {
75  int fedID = FedsInIds[it];
76  if(fedID>=siStripFedIdMin && fedID<=siStripFedIdMax) ++nFEDConnected_;
77  }
78  LogDebug ("SiStripDcsInfo") << " SiStripDcsInfo :: Connected FEDs " << nFEDConnected_;
79  }
80  }
81 
84 
85 }
86 //
87 // -- Book MEs for SiStrip Sertification fractions
88 //
91  dqmStore_->cd();
92  std::string strip_dir = "";
93  SiStripUtility::getTopFolderPath(dqmStore_, "SiStrip", strip_dir);
94  if (strip_dir.size() > 0) dqmStore_->setCurrentFolder(strip_dir+"/EventInfo");
95  else dqmStore_->setCurrentFolder("SiStrip/EventInfo");
96 
97  SiStripCertification = dqmStore_->bookFloat("CertificationSummary");
98 
99  std::string hname = "CertificationReportMap";
100  std::string htitle = "SiStrip Certification for Good Detector Fraction";
101  SiStripCertificationSummaryMap = dqmStore_->book2D(hname, htitle, 6,0.5,6.5,9,0.5,9.5);
102  SiStripCertificationSummaryMap->setAxisTitle("Sub Detector Type", 1);
103  SiStripCertificationSummaryMap->setAxisTitle("Layer/Disc Number", 2);
104  int ibin = 0;
105  for (std::map<std::string, SubDetMEs>::const_iterator it = SubDetMEsMap.begin();
106  it != SubDetMEsMap.end(); it++) {
107  ibin++;
108  std::string det = it->first;
110  }
111 
112  SubDetMEs local_mes;
114  dqmStore_->cd();
115  if (strip_dir.size() > 0) dqmStore_->setCurrentFolder(strip_dir+"/EventInfo/CertificationContents");
116  else dqmStore_->setCurrentFolder("SiStrip/EventInfo/CertificationContents");
117  tag = "TIB";
118 
119  local_mes.folder_name = "TIB";
120  local_mes.subdet_tag = "TIB";
121  local_mes.n_layer = 4;
122  local_mes.det_fractionME = dqmStore_->bookFloat("SiStrip_"+tag);
123  SubDetMEsMap.insert(std::pair<std::string, SubDetMEs >(tag, local_mes));
124 
125  tag = "TOB";
126  local_mes.folder_name = "TOB";
127  local_mes.subdet_tag = "TOB";
128  local_mes.n_layer = 6;
129  local_mes.det_fractionME = dqmStore_->bookFloat("SiStrip_"+tag);
130  SubDetMEsMap.insert(std::pair<std::string, SubDetMEs >(tag, local_mes));
131 
132  tag = "TECF";
133  local_mes.folder_name = "TEC/PLUS";
134  local_mes.subdet_tag = "TEC+";
135  local_mes.n_layer = 9;
136  local_mes.det_fractionME = dqmStore_->bookFloat("SiStrip_"+tag);
137  SubDetMEsMap.insert(std::pair<std::string, SubDetMEs >(tag, local_mes));
138 
139  tag = "TECB";
140  local_mes.folder_name = "TEC/MINUS";
141  local_mes.subdet_tag = "TEC-";
142  local_mes.n_layer = 9;
143  local_mes.det_fractionME = dqmStore_->bookFloat("SiStrip_"+tag);
144  SubDetMEsMap.insert(std::pair<std::string, SubDetMEs >(tag, local_mes));
145 
146  tag = "TIDF";
147  local_mes.folder_name = "TID/PLUS";
148  local_mes.subdet_tag = "TID+";
149  local_mes.n_layer = 3;
150  local_mes.det_fractionME = dqmStore_->bookFloat("SiStrip_"+tag);
151  SubDetMEsMap.insert(std::pair<std::string, SubDetMEs >(tag, local_mes));
152 
153  tag = "TIDB";
154  local_mes.folder_name = "TID/MINUS";
155  local_mes.subdet_tag = "TID-";
156  local_mes.n_layer = 3;
157  local_mes.det_fractionME = dqmStore_->bookFloat("SiStrip_"+tag);
158  SubDetMEsMap.insert(std::pair<std::string, SubDetMEs >(tag, local_mes));
159 
160  dqmStore_->cd();
161  if (strip_dir.size() > 0) dqmStore_->setCurrentFolder(strip_dir+"/EventInfo");
162 
164  dqmStore_->cd();
165  }
166 }
167 //
168 // -- Analyze
169 //
171 }
172 //
173 // -- End Luminosity Block
174 //
176  edm::LogInfo( "SiStripDaqInfo") << "SiStripDaqInfo::endLuminosityBlock";
177 
178  if (nFEDConnected_ > 0) {
180  }
181 }
182 
183 //
184 // -- End of Run
185 //
187  edm::LogInfo ("SiStripCertificationInfo") <<"SiStripCertificationInfo:: End Run";
188 
189  if (nFEDConnected_ > 0) {
191  }
192 }
193 //
194 // --Fill SiStrip Certification
195 //
198  edm::LogError("SiStripCertificationInfo") << " SiStripCertificationInfo::fillSiStripCertificationMEs : MEs missing ";
199  return;
200  }
201 
202  //Retrieve tracker topology from geometry
203  edm::ESHandle<TrackerTopology> tTopoHandle;
204  eSetup.get<IdealGeometryRecord>().get(tTopoHandle);
205  const TrackerTopology* const tTopo = tTopoHandle.product();
206 
208  std::string mdir = "MechanicalView";
209  dqmStore_->cd();
210  if (!SiStripUtility::goToDir(dqmStore_, mdir)) return;
211  std::string mechanical_dir = dqmStore_->pwd();
212  uint16_t nDetTot = 0;
213  uint16_t nFaultyTot = 0;
214  uint16_t nSToNTot = 0;
215  float sToNTot = 0.0;
216  SiStripFolderOrganizer folder_organizer;
217  int xbin = 0;
218  for (std::map<std::string, SubDetMEs>::iterator it = SubDetMEsMap.begin();
219  it != SubDetMEsMap.end(); it++) {
220  xbin++;
221  std::string name = it->first;
222  std::string tag = it->second.subdet_tag;
223  MonitorElement* me = it->second.det_fractionME;
224  if (!me) continue;
225  std::string bad_module_folder = mechanical_dir+"/"+it->second.folder_name+"/"+"BadModuleList";
226  std::vector<MonitorElement *> faulty_detMEs = dqmStore_->getContents(bad_module_folder);
227 
228  uint16_t ndet_subdet = 0;
229  uint16_t nfaulty_subdet = 0;
230  int nlayer = it->second.n_layer;
231  int ybin = 0;
232  for (int ilayer = 0; ilayer < nlayer; ilayer++) {
233  uint16_t ndet_layer = detCabling_->connectedNumber(tag, ilayer+1);
234  ndet_subdet += ndet_layer;
235  ybin++;
236  uint16_t nfaulty_layer = 0;
237  for (std::vector<MonitorElement *>::iterator im = faulty_detMEs.begin(); im != faulty_detMEs.end(); im++) {
238  if ((*im)->kind() != MonitorElement::DQM_KIND_INT ) continue;
239  if ((*im)->getIntValue() == 0) continue;
240  uint32_t detId = atoi((*im)->getName().c_str());
241  std::pair<std::string,int32_t> det_layer_pair = folder_organizer.GetSubDetAndLayer(detId, tTopo, false);
242  if (abs(det_layer_pair.second) == ilayer+1) nfaulty_layer++;
243  }
244 
245  nfaulty_subdet += nfaulty_layer;
246  float fraction_layer = -1.0;
247  if ( ndet_layer > 0) fraction_layer = 1 - ((nfaulty_layer*1.0)/ndet_layer);
248  if (SiStripCertificationSummaryMap) SiStripCertificationSummaryMap->Fill(xbin, ilayer+1,fraction_layer);
249  }
250  if (ybin <= SiStripCertificationSummaryMap->getNbinsY()) {
251  for (int k = ybin+1; k <= SiStripCertificationSummaryMap->getNbinsY(); k++) SiStripCertificationSummaryMap->Fill(xbin, k, -1.0);
252  }
253  float fraction_subdet = -1.0;
254  if (ndet_subdet > 0) fraction_subdet = 1 - ((nfaulty_subdet*1.0)/ndet_subdet);
255  // Check S/N status flag and use the minimum between the two
256  std::string full_path = mechanical_dir.substr(0, mechanical_dir.find_last_of("/"))
257  + "/EventInfo/reportSummaryContents/SiStrip_SToNFlag_"+name;
258  MonitorElement* me_ston = dqmStore_->get(full_path);
259  me->Reset();
260  if (me_ston && me_ston->kind()==MonitorElement::DQM_KIND_REAL) {
261  float ston_flg = me_ston->getFloatValue();
262  sToNTot += ston_flg;
263  nSToNTot++;
264  me->Fill(fminf(fraction_subdet,ston_flg));
265  } else me->Fill(fraction_subdet);
266  nDetTot += ndet_subdet ;
267  nFaultyTot += nfaulty_subdet;
268  }
269  float fraction_global = -1.0;
270  if (nDetTot > 0) fraction_global = 1.0 - ((nFaultyTot*1.0)/nDetTot);
271  float ston_frac_global = 1.0;
272  if (nSToNTot > 0) ston_frac_global = sToNTot/nSToNTot;
273  SiStripCertification->Fill(fminf(fraction_global,ston_frac_global));
274 }
275 //
276 // --Fill SiStrip Certification
277 //
282  for (std::map<std::string, SubDetMEs>::iterator it = SubDetMEsMap.begin();
283  it != SubDetMEsMap.end(); it++) {
284  it->second.det_fractionME->Reset();
285  }
287  }
288 }
289 //
290 // -- Fill Dummy SiStrip Certification
291 //
295  SiStripCertification->Fill(-1.0);
296  for (std::map<std::string, SubDetMEs>::iterator it = SubDetMEsMap.begin();
297  it != SubDetMEsMap.end(); it++) {
298  it->second.det_fractionME->Reset();
299  it->second.det_fractionME->Fill(-1.0);
300  }
301 
302  for (int xbin = 1; xbin < SiStripCertificationSummaryMap->getNbinsX()+1; xbin++) {
303  for (int ybin = 1; ybin < SiStripCertificationSummaryMap->getNbinsY()+1; ybin++) {
304  SiStripCertificationSummaryMap->Fill(xbin, ybin, -1.0);
305  }
306  }
307  }
308 }
309 //
310 // --Fill SiStrip Certification
311 //
314  edm::LogError("SiStripCertificationInfo") << " SiStripCertificationInfo::fillSiStripCertificationMEsAtLumi : MEs missing ";
315  return;
316  }
318  dqmStore_->cd();
319  std::string strip_dir = "";
320  SiStripUtility::getTopFolderPath(dqmStore_, "SiStrip", strip_dir);
321  if (strip_dir.size() == 0) strip_dir = "SiStrip";
322 
323  std::string full_path;
324  float dcs_flag = 1.0;
325  float dqm_flag = 1.0;
326  for (std::map<std::string, SubDetMEs>::iterator it = SubDetMEsMap.begin();
327  it != SubDetMEsMap.end(); it++) {
328  std::string type = it->first;
329  full_path = strip_dir + "/EventInfo/DCSContents/SiStrip_" + type;
330  MonitorElement* me_dcs = dqmStore_->get(full_path);
331  if (me_dcs && me_dcs->kind() == MonitorElement::DQM_KIND_REAL) dcs_flag = me_dcs->getFloatValue();
332  full_path = strip_dir + "/EventInfo/reportSummaryContents/SiStrip_" + type;
333  MonitorElement* me_dqm = dqmStore_->get(full_path);
334  if (me_dqm && me_dqm->kind() == MonitorElement::DQM_KIND_REAL) dqm_flag = me_dqm->getFloatValue();
335  it->second.det_fractionME->Reset();
336  it->second.det_fractionME->Fill(fminf(dqm_flag,dcs_flag));
337  }
338  dcs_flag = 1.0;
339  dqm_flag = 1.0;
340  full_path = strip_dir + "/EventInfo/reportSummary";
341  MonitorElement* me_dqm = dqmStore_->get(full_path);
342  if (me_dqm && me_dqm->kind() == MonitorElement::DQM_KIND_REAL) dqm_flag = me_dqm->getFloatValue();
343  full_path = strip_dir + "/EventInfo/DCSSummary";
344  MonitorElement* me_dcs = dqmStore_->get(full_path);
345  if (me_dcs && me_dcs->kind() == MonitorElement::DQM_KIND_REAL) dcs_flag = me_dcs->getFloatValue();
347  SiStripCertification->Fill(fminf(dqm_flag,dcs_flag));
348 }
#define LogDebug(id)
type
Definition: HCALResponse.h:21
void cd(void)
go to top directory (ie. root)
Definition: DQMStore.cc:696
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:17
void setBinLabel(int bin, const std::string &label, int axis=1)
set bin label for x, y or z axis (axis=1, 2, 3 respectively)
void analyze(edm::Event const &, edm::EventSetup const &)
Analyze.
void fillSiStripCertificationMEs(edm::EventSetup const &eSetup)
std::pair< std::string, int32_t > GetSubDetAndLayer(const uint32_t &detid, const TrackerTopology *tTopo, bool ring_flag=0)
MonitorElement * bookFloat(const char *name)
Book float.
Definition: DQMStore.cc:943
const eventsetup::EventSetupRecord * find(const eventsetup::EventSetupRecordKey &) const
Definition: EventSetup.cc:90
int getNbinsY(void) const
get # of bins in Y-axis
void Fill(long long x)
void endLuminosityBlock(edm::LuminosityBlock const &lumiSeg, edm::EventSetup const &iSetup)
End Of Luminosity.
std::map< std::string, SubDetMEs > SubDetMEsMap
double getFloatValue(void) const
SiStripCertificationInfo(const edm::ParameterSet &ps)
Constructor.
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
Kind kind(void) const
Get the type of the monitor element.
MonitorElement * get(const std::string &path) const
get ME from full pathname (e.g. &quot;my/long/dir/my_histo&quot;)
Definition: DQMStore.cc:1760
How EventSelector::AcceptEvent() decides whether to accept an event for output otherwise it is excluding the probing of A single or multiple positive and the trigger will pass if any such matching triggers are PASS or EXCEPTION[A criterion thatmatches no triggers at all is detected and causes a throw.] A single negative with an expectation of appropriate bit checking in the decision and the trigger will pass if any such matching triggers are FAIL or EXCEPTION A wildcarded negative criterion that matches more than one trigger in the trigger but the state exists so we define the behavior If all triggers are the negative crieriion will lead to accepting the event(this again matches the behavior of"!*"before the partial wildcard feature was incorporated).The per-event"cost"of each negative criterion with multiple relevant triggers is about the same as!*was in the past
std::vector< MonitorElement * > getContents(const std::string &path) const
Definition: DQMStore.cc:1789
virtual ~SiStripCertificationInfo()
Destructor.
void endRun(edm::Run const &run, edm::EventSetup const &eSetup)
EndRun.
void beginRun(edm::Run const &run, edm::EventSetup const &eSetup)
Begin Run.
const T & get() const
Definition: EventSetup.h:55
T const * product() const
Definition: ESHandle.h:86
MonitorElement * SiStripCertificationSummaryMap
int getNbinsX(void) const
get # of bins in X-axis
edm::ESHandle< SiStripDetCabling > detCabling_
bool isValid() const
Definition: ESHandle.h:47
MonitorElement * book2D(const char *name, const char *title, int nchX, double lowX, double highX, int nchY, double lowY, double highY)
Book 2D histogram.
Definition: DQMStore.cc:1134
void setAxisTitle(const std::string &title, int axis=1)
set x-, y- or z-axis title (axis=1, 2, 3 respectively)
void Reset(void)
reset ME (ie. contents, errors, etc)
static bool goToDir(DQMStore *dqm_store, std::string name)
static void getTopFolderPath(DQMStore *dqm_store, std::string top_dir, std::string &path)
void setCurrentFolder(const std::string &fullpath)
Definition: DQMStore.cc:719
Definition: Run.h:41
static HCTypeTag findType(char const *iTypeName)
find a type based on the types name, if not found will return default HCTypeTag
Definition: HCTypeTag.cc:125
const std::string & pwd(void) const
Definition: DQMStore.cc:691