CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
SiStripDcsInfo.cc
Go to the documentation of this file.
4 
7 
11 
16 
17 //Run Info
21 
22 #include <iostream>
23 #include <iomanip>
24 #include <stdio.h>
25 #include <string>
26 #include <sstream>
27 #include <math.h>
28 
29 //
30 // -- Contructor
31 //
33  dqmStore_(edm::Service<DQMStore>().operator->()),
34  m_cacheIDCabling_(0),
35  m_cacheIDDcs_(0),
36  bookedStatus_(false),
37  nLumiAnalysed_(0)
38 {
39  // Create MessageSender
40  LogDebug( "SiStripDcsInfo") << "SiStripDcsInfo::Deleting SiStripDcsInfo ";
41 }
42 //
43 // -- Destructor
44 //
46  LogDebug("SiStripDcsInfo") << "SiStripDcsInfo::Deleting SiStripDcsInfo ";
47 
48 }
49 //
50 // -- Begin Job
51 //
53  std::string tag;
54  SubDetMEs local_mes;
55 
56  tag = "TIB";
57  local_mes.folder_name = "TIB";
58  local_mes.DcsFractionME = 0;
59  local_mes.TotalDetectors = 0;
60  local_mes.FaultyDetectors.clear();
61  SubDetMEsMap.insert(std::pair<std::string, SubDetMEs >(tag, local_mes));
62 
63  tag = "TOB";
64  local_mes.folder_name = "TOB";
65  local_mes.DcsFractionME = 0;
66  local_mes.TotalDetectors = 0;
67  local_mes.FaultyDetectors.clear();
68  SubDetMEsMap.insert(std::pair<std::string, SubDetMEs >(tag, local_mes));
69 
70  tag = "TECB";
71  local_mes.folder_name = "TEC/side_1";
72  local_mes.DcsFractionME = 0;
73  local_mes.TotalDetectors = 0;
74  local_mes.FaultyDetectors.clear();
75  SubDetMEsMap.insert(std::pair<std::string, SubDetMEs >(tag, local_mes));
76 
77  tag = "TECF";
78  local_mes.folder_name = "TEC/side_2";
79  local_mes.DcsFractionME = 0;
80  local_mes.TotalDetectors = 0;
81  local_mes.FaultyDetectors.clear();
82  SubDetMEsMap.insert(std::pair<std::string, SubDetMEs >(tag, local_mes));
83 
84  tag = "TIDB";
85  local_mes.folder_name = "TID/side_1";
86  local_mes.DcsFractionME = 0;
87  local_mes.TotalDetectors = 0;
88  local_mes.FaultyDetectors.clear();
89  SubDetMEsMap.insert(std::pair<std::string, SubDetMEs >(tag, local_mes));
90 
91  tag = "TIDF";
92  local_mes.folder_name = "TID/side_2";
93  local_mes.DcsFractionME = 0;
94  local_mes.TotalDetectors = 0;
95  local_mes.FaultyDetectors.clear();
96  SubDetMEsMap.insert(std::pair<std::string, SubDetMEs >(tag, local_mes));
97 }
98 //
99 // -- Begin Run
100 //
102  LogDebug ("SiStripDcsInfo") <<"SiStripDcsInfo:: Begining of Run";
103  nFEDConnected_ = 0;
104  const FEDNumbering numbering;
105  const int siStripFedIdMin = numbering.MINSiStripFEDID;
106  const int siStripFedIdMax = numbering.MAXSiStripFEDID;
107 
108  // Count Tracker FEDs from RunInfo
110  if( eSetup.find( recordKey ) != 0) {
111 
112  edm::ESHandle<RunInfo> sumFED;
113  eSetup.get<RunInfoRcd>().get(sumFED);
114 
115  if ( sumFED.isValid() ) {
116  std::vector<int> FedsInIds= sumFED->m_fed_in;
117  for(unsigned int it = 0; it < FedsInIds.size(); ++it) {
118  int fedID = FedsInIds[it];
119  if(fedID>=siStripFedIdMin && fedID<=siStripFedIdMax) ++nFEDConnected_;
120  }
121  LogDebug ("SiStripDcsInfo") << " SiStripDcsInfo :: Connected FEDs " << nFEDConnected_;
122  }
123  }
124 
125  bookStatus();
126  fillDummyStatus();
127  if (nFEDConnected_ > 0) readCabling(eSetup);
128 }
129 //
130 // -- Analyze
131 //
133 }
134 //
135 // -- Begin Luminosity Block
136 //
138  LogDebug( "SiStripDcsInfo") << "SiStripDcsInfo::beginLuminosityBlock";
139 
140  if (nFEDConnected_ == 0) return;
141 
142  // initialise BadModule list
143  for (std::map<std::string, SubDetMEs>::iterator it = SubDetMEsMap.begin(); it != SubDetMEsMap.end(); it++) {
144  it->second.FaultyDetectors.clear();
145  }
146  readStatus(eSetup);
147  nLumiAnalysed_++;
148 }
149 
150 //
151 // -- End Luminosity Block
152 //
154  LogDebug( "SiStripDcsInfo") << "SiStripDcsInfo::endLuminosityBlock";
155 
156  if (nFEDConnected_ == 0) return;
157  readStatus(eSetup);
158  fillStatus();
159 }
160 //
161 // -- End Run
162 //
164  LogDebug ("SiStripDcsInfo") <<"SiStripDcsInfo::EndRun";
165 
166  if (nFEDConnected_ == 0) return;
167 
168  for (std::map<std::string, SubDetMEs>::iterator it = SubDetMEsMap.begin(); it != SubDetMEsMap.end(); it++) {
169  it->second.FaultyDetectors.clear();
170  }
171  readStatus(eSetup);
172  fillStatus();
173  addBadModules();
174 }
175 //
176 // -- Book MEs for SiStrip Dcs Fraction
177 //
179  if (!bookedStatus_) {
180  std::string strip_dir = "";
181  SiStripUtility::getTopFolderPath(dqmStore_, "SiStrip", strip_dir);
182  if (strip_dir.size() > 0) dqmStore_->setCurrentFolder(strip_dir+"/EventInfo");
183  else dqmStore_->setCurrentFolder("SiStrip/EventInfo");
184 
185  DcsFraction_= dqmStore_->bookFloat("DCSSummary");
186 
188 
189  dqmStore_->cd();
190  if (strip_dir.size() > 0) dqmStore_->setCurrentFolder(strip_dir+"/EventInfo/DCSContents");
191  else dqmStore_->setCurrentFolder("SiStrip/EventInfo/DCSContents");
192  for (std::map<std::string,SubDetMEs>::iterator it = SubDetMEsMap.begin(); it != SubDetMEsMap.end(); it++) {
193  SubDetMEs local_mes;
194  std::string me_name;
195  me_name = "SiStrip_" + it->first;
196  it->second.DcsFractionME = dqmStore_->bookFloat(me_name);
197  it->second.DcsFractionME->setLumiFlag();
198  }
199  bookedStatus_ = true;
200  dqmStore_->cd();
201  }
202 }
203 //
204 // -- Read Cabling
205 //
207  unsigned long long cacheID = eSetup.get<SiStripFedCablingRcd>().cacheIdentifier();
208  if (m_cacheIDCabling_ != cacheID) {
209  m_cacheIDCabling_ = cacheID;
210  LogDebug("SiStripDcsInfo") <<"SiStripDcsInfo::readCabling : "
211  << " Change in Cache";
212  eSetup.get<SiStripDetCablingRcd>().get(detCabling_);
213 
214  std::vector<uint32_t> SelectedDetIds;
215  detCabling_->addActiveDetectorsRawIds(SelectedDetIds);
216  LogDebug( "SiStripDcsInfo") << " SiStripDcsInfo::readCabling : "
217  << " Total Detectors " << SelectedDetIds.size();
218 
219 
220  // initialise total # of detectors first
221  for (std::map<std::string, SubDetMEs>::iterator it = SubDetMEsMap.begin(); it != SubDetMEsMap.end(); it++) {
222  it->second.TotalDetectors = 0;
223  }
224 
225  for (std::vector<uint32_t>::const_iterator idetid=SelectedDetIds.begin(); idetid != SelectedDetIds.end(); ++idetid){
226  uint32_t detId = *idetid;
227  if (detId == 0 || detId == 0xFFFFFFFF) continue;
228  std::string subdet_tag;
229  SiStripUtility::getSubDetectorTag(detId,subdet_tag);
230 
231  std::map<std::string, SubDetMEs>::iterator iPos = SubDetMEsMap.find(subdet_tag);
232  if (iPos != SubDetMEsMap.end()){
233  iPos->second.TotalDetectors++;
234  }
235  }
236  }
237 }
238 //
239 // -- Get Faulty Detectors
240 //
242 
243  eSetup.get<SiStripDetVOffRcd>().get(siStripDetVOff_);
244  std::vector <uint32_t> FaultyDetIds;
245  siStripDetVOff_->getDetIds(FaultyDetIds);
246  LogDebug( "SiStripDcsInfo") << " SiStripDcsInfo::readStatus : "
247  << " Faulty Detectors " << FaultyDetIds.size();
248  // Read and fille bad modules
249  for (std::vector<uint32_t>::const_iterator ihvoff=FaultyDetIds.begin(); ihvoff!=FaultyDetIds.end();++ihvoff){
250  uint32_t detId_hvoff = (*ihvoff);
251  if (!detCabling_->IsConnected(detId_hvoff)) continue;
252  std::string subdet_tag;
253  SiStripUtility::getSubDetectorTag(detId_hvoff,subdet_tag);
254 
255  std::map<std::string, SubDetMEs>::iterator iPos = SubDetMEsMap.find(subdet_tag);
256  if (iPos != SubDetMEsMap.end()){
257  std::vector<uint32_t>::iterator ibad = std::find(iPos->second.FaultyDetectors.begin(), iPos->second.FaultyDetectors.end(), detId_hvoff);
258  if (ibad == iPos->second.FaultyDetectors.end()) iPos->second.FaultyDetectors.push_back( detId_hvoff);
259  }
260  }
261 }
262 //
263 // -- Fill Status
264 //
266  if (!bookedStatus_) bookStatus();
267  if (bookedStatus_) {
268  float total_det = 0.0;
269  float faulty_det = 0.0;
270  float fraction;
271  for (std::map<std::string,SubDetMEs>::iterator it = SubDetMEsMap.begin(); it != SubDetMEsMap.end(); it++) {
272  int total_subdet = it->second.TotalDetectors;
273  int faulty_subdet = it->second.FaultyDetectors.size();
274  if (nFEDConnected_ == 0 || total_subdet == 0) fraction = -1;
275  else fraction = 1.0 - faulty_subdet*1.0/total_subdet;
276  it->second.DcsFractionME->Reset();
277  it->second.DcsFractionME->Fill(fraction);
278  edm::LogInfo( "SiStripDcsInfo") << " SiStripDcsInfo::fillStatus : Sub Detector "
279  << it->first << " Total Number " << total_subdet
280  << " Faulty ones " << faulty_subdet;
281  total_det += total_subdet;
282  faulty_det += faulty_subdet;
283  }
284  if (nFEDConnected_ == 0 || total_det == 0) fraction = -1.0;
285  else fraction = 1 - faulty_det/total_det;
286  DcsFraction_->Reset();
287  DcsFraction_->Fill(fraction);
288  }
289 }
290 //
291 // -- Fill with Dummy values
292 //
294  if (!bookedStatus_) bookStatus();
295  if (bookedStatus_) {
296  for (std::map<std::string, SubDetMEs>::iterator it = SubDetMEsMap.begin(); it != SubDetMEsMap.end(); it++) {
297  it->second.DcsFractionME->Reset();
298  it->second.DcsFractionME->Fill(-1.0);
299  }
300  DcsFraction_->Reset();
301  DcsFraction_->Fill(-1.0);
302  }
303 }
304 //
305 // -- Add Bad Modules
306 //
308 
309  dqmStore_->cd();
310  std::string mdir = "MechanicalView";
311  if (!SiStripUtility::goToDir(dqmStore_, mdir)) {
312  dqmStore_->setCurrentFolder("SiStrip/"+mdir);
313  }
314  std::string mechanical_dir = dqmStore_->pwd();
315  std::string tag = "DCSError";
316 
317  for (std::map<std::string, SubDetMEs>::iterator it = SubDetMEsMap.begin(); it != SubDetMEsMap.end(); it++) {
318  std::vector<uint32_t> badModules = it->second.FaultyDetectors;
319  for (std::vector<uint32_t>::iterator ibad = badModules.begin();
320  ibad != badModules.end(); ibad++) {
321 
322  std::string bad_module_folder = mechanical_dir + "/" +
323  it->second.folder_name + "/"
324  "BadModuleList";
325  dqmStore_->setCurrentFolder(bad_module_folder);
326 
327  std::ostringstream detid_str;
328  detid_str << (*ibad);
329  std::string full_path = bad_module_folder + "/" + detid_str.str();
330  MonitorElement* me = dqmStore_->get(full_path);
331  uint16_t flag = 0;
332  if (me) {
333  flag = me->getIntValue();
334  me->Reset();
335  } else me = dqmStore_->bookInt(detid_str.str());
337  me->Fill(flag);
338  }
339  }
340  dqmStore_->cd();
341 }
342 
#define LogDebug(id)
static void setBadModuleFlag(std::string &hname, uint16_t &flg)
DQMStore * dqmStore_
long int flag
Definition: mlp_lapack.h:47
void beginLuminosityBlock(edm::LuminosityBlock const &lumiSeg, edm::EventSetup const &eSetup)
Begin Luminosity Block.
void beginRun(edm::Run const &run, edm::EventSetup const &eSetup)
Begin Run.
SiStripDcsInfo(const edm::ParameterSet &ps)
Constructor.
void cd(void)
go to top directory (ie. root)
Definition: DQMStore.cc:209
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:17
void endLuminosityBlock(edm::LuminosityBlock const &lumiSeg, edm::EventSetup const &iSetup)
End Of Luminosity.
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
Definition: FindCaloHit.cc:7
void analyze(edm::Event const &, edm::EventSetup const &)
Analyze.
MonitorElement * bookFloat(const char *name)
Book float.
Definition: DQMStore.cc:451
static void getSubDetectorTag(uint32_t det_id, std::string &subdet_tag)
const eventsetup::EventSetupRecord * find(const eventsetup::EventSetupRecordKey &) const
Definition: EventSetup.cc:90
void Fill(long long x)
std::map< std::string, SubDetMEs > SubDetMEsMap
virtual ~SiStripDcsInfo()
Destructor.
const std::string subdet_tag("SubDet")
void endRun(edm::Run const &run, edm::EventSetup const &eSetup)
EndRun.
MonitorElement * DcsFractionME
MonitorElement * get(const std::string &path) const
get ME from full pathname (e.g. &quot;my/long/dir/my_histo&quot;)
Definition: DQMStore.cc:1265
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
edm::ESHandle< SiStripDetVOff > siStripDetVOff_
void readCabling(edm::EventSetup const &)
int64_t getIntValue(void) const
const T & get() const
Definition: EventSetup.h:55
MonitorElement * DcsFraction_
edm::ESHandle< SiStripDetCabling > detCabling_
unsigned long long m_cacheIDCabling_
std::vector< uint32_t > FaultyDetectors
void beginJob()
BeginJob.
void setLumiFlag(void)
this ME is meant to be stored for each luminosity section
bool isValid() const
Definition: ESHandle.h:37
MonitorElement * bookInt(const char *name)
Book int.
Definition: DQMStore.cc:421
void Reset(void)
reset ME (ie. contents, errors, etc)
void readStatus(edm::EventSetup const &)
static bool goToDir(DQMStore *dqm_store, std::string name)
void setCurrentFolder(const std::string &fullpath)
Definition: DQMStore.cc:232
Definition: Run.h:32
static HCTypeTag findType(char const *iTypeName)
find a type based on the types name, if not found will return default HCTypeTag
Definition: HCTypeTag.cc:126
const std::string & pwd(void) const
Definition: DQMStore.cc:204
static void getTopFolderPath(DQMStore *dqm_store, std::string type, std::string &path)