CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
SiStripDaqInfo.cc
Go to the documentation of this file.
4 
7 
11 
13 
14 //Run Info
18 // FED cabling and numbering
22 
23 #include <iostream>
24 #include <iomanip>
25 #include <stdio.h>
26 #include <string>
27 #include <sstream>
28 #include <math.h>
29 #include <vector>
30 
31 //
32 // -- Contructor
33 //
35  m_cacheID_(0) {
36 
37  // Create MessageSender
38  edm::LogInfo( "SiStripDaqInfo") << "SiStripDaqInfo::Deleting SiStripDaqInfo ";
39 
40  // get back-end interface
42  nFedTotal = 0;
43  bookedStatus_ = false;
44 }
46  edm::LogInfo("SiStripDaqInfo") << "SiStripDaqInfo::Deleting SiStripDaqInfo ";
47 
48 }
49 //
50 // -- Begin Job
51 //
53 
54 }
55 //
56 // -- Book MEs for SiStrip Daq Fraction
57 //
59  edm::LogInfo( "SiStripDcsInfo") << " SiStripDaqInfo::bookStatus " << bookedStatus_;
60  if (!bookedStatus_) {
61  dqmStore_->cd();
62  std::string strip_dir = "";
63  SiStripUtility::getTopFolderPath(dqmStore_, "SiStrip", strip_dir);
64  if (strip_dir.size() > 0) dqmStore_->setCurrentFolder(strip_dir+"/EventInfo");
65  else dqmStore_->setCurrentFolder("SiStrip/EventInfo");
66 
67 
68  DaqFraction_= dqmStore_->bookFloat("DAQSummary");
69 
70  dqmStore_->cd();
71  if (strip_dir.size() > 0) dqmStore_->setCurrentFolder(strip_dir+"/EventInfo/DAQContents");
72  else dqmStore_->setCurrentFolder("SiStrip/EventInfo/DAQContents");
73 
74  std::vector<std::string> det_type;
75  det_type.push_back("TIB");
76  det_type.push_back("TOB");
77  det_type.push_back("TIDF");
78  det_type.push_back("TIDB");
79  det_type.push_back("TECF");
80  det_type.push_back("TECB");
81 
82  for ( std::vector<std::string>::iterator it = det_type.begin(); it != det_type.end(); it++) {
83  std::string det = (*it);
84 
85  SubDetMEs local_mes;
86  std::string me_name;
87  me_name = "SiStrip_" + det;
88  local_mes.DaqFractionME = dqmStore_->bookFloat(me_name);
89  local_mes.ConnectedFeds = 0;
90  SubDetMEsMap.insert(make_pair(det, local_mes));
91  }
92  bookedStatus_ = true;
93  dqmStore_->cd();
94  }
95 }
96 //
97 // -- Fill with Dummy values
98 //
100  if (!bookedStatus_) bookStatus();
101  if (bookedStatus_) {
102  for (std::map<std::string, SubDetMEs>::iterator it = SubDetMEsMap.begin(); it != SubDetMEsMap.end(); it++) {
103  it->second.DaqFractionME->Reset();
104  it->second.DaqFractionME->Fill(-1.0);
105  }
106  DaqFraction_->Reset();
107  DaqFraction_->Fill(-1.0);
108  }
109 }
110 //
111 // -- Begin Run
112 //
114  edm::LogInfo ("SiStripDaqInfo") <<"SiStripDaqInfo:: Begining of Run";
115 
116  // Check latest Fed cabling and create TrackerMapCreator
117  unsigned long long cacheID = eSetup.get<SiStripFedCablingRcd>().cacheIdentifier();
118  if (m_cacheID_ != cacheID) {
119  m_cacheID_ = cacheID;
120 
121  eSetup.get<SiStripFedCablingRcd>().get(fedCabling_);
122 
123  readFedIds(fedCabling_, eSetup);
124  }
125  if (!bookedStatus_) bookStatus();
126  if (nFedTotal == 0) {
127  fillDummyStatus();
128  edm::LogInfo ("SiStripDaqInfo") <<" SiStripDaqInfo::No FEDs Connected!!!";
129  return;
130  }
131 
132  float nFEDConnected = 0.0;
133  const int siStripFedIdMin = FEDNumbering::MINSiStripFEDID;
134  const int siStripFedIdMax = FEDNumbering::MAXSiStripFEDID;
135 
137  if( eSetup.find( recordKey ) != 0) {
138 
139  edm::ESHandle<RunInfo> sumFED;
140  eSetup.get<RunInfoRcd>().get(sumFED);
141 
142  if ( sumFED.isValid() ) {
143  std::vector<int> FedsInIds= sumFED->m_fed_in;
144  for(unsigned int it = 0; it < FedsInIds.size(); ++it) {
145  int fedID = FedsInIds[it];
146 
147  if(fedID>=siStripFedIdMin && fedID<=siStripFedIdMax) ++nFEDConnected;
148  }
149  edm::LogInfo ("SiStripDaqInfo") <<" SiStripDaqInfo::Total # of FEDs " << nFedTotal
150  << " Connected FEDs " << nFEDConnected;
151  if (nFEDConnected > 0) {
152  DaqFraction_->Reset();
153  DaqFraction_->Fill(nFEDConnected/nFedTotal);
154  readSubdetFedFractions(FedsInIds,eSetup);
155  }
156  }
157  }
158 }
159 //
160 // -- Analyze
161 //
163 }
164 
165 //
166 // -- End Luminosity Block
167 //
169  edm::LogInfo( "SiStripDaqInfo") << "SiStripDaqInfo::endLuminosityBlock";
170 }
171 //
172 // -- End Run
173 //
175  edm::LogInfo ("SiStripDaqInfo") <<"SiStripDaqInfo::EndRun";
176 }
177 //
178 // -- Read Sub Detector FEDs
179 //
181 
182  //Retrieve tracker topology from geometry
183  edm::ESHandle<TrackerTopology> tTopoHandle;
184  iSetup.get<TrackerTopologyRcd>().get(tTopoHandle);
185  const TrackerTopology* const tTopo = tTopoHandle.product();
186 
187  auto feds = fedCabling_->fedIds();
188 
189  nFedTotal = feds.size();
190  for(std::vector<unsigned short>::const_iterator ifed = feds.begin(); ifed != feds.end(); ifed++){
191  auto fedChannels = fedCabling_->fedConnections( *ifed );
192  for (auto iconn = fedChannels.begin(); iconn < fedChannels.end(); iconn++){
193  if (!iconn->isConnected()) continue;
194  uint32_t detId = iconn->detId();
195  if (detId == 0 || detId == 0xFFFFFFFF) continue;
197  SiStripUtility::getSubDetectorTag(detId,subdet_tag,tTopo);
198  subDetFedMap[subdet_tag].push_back(*ifed);
199  break;
200  }
201  }
202 }
203 //
204 // -- Fill Subdet FEDIds
205 //
206 void SiStripDaqInfo::readSubdetFedFractions(std::vector<int>& fed_ids, edm::EventSetup const& iSetup) {
207 
208  //Retrieve tracker topology from geometry
209  edm::ESHandle<TrackerTopology> tTopoHandle;
210  iSetup.get<TrackerTopologyRcd>().get(tTopoHandle);
211  const TrackerTopology* const tTopo = tTopoHandle.product();
212 
213  const int siStripFedIdMin = FEDNumbering::MINSiStripFEDID;
214  const int siStripFedIdMax = FEDNumbering::MAXSiStripFEDID;
215 
216  // initialiase
217  for (std::map<std::string, std::vector<unsigned short> >::const_iterator it = subDetFedMap.begin();
218  it != subDetFedMap.end(); it++) {
219  std::string name = it->first;
220  std::map<std::string, SubDetMEs>::iterator iPos = SubDetMEsMap.find(name);
221  if (iPos == SubDetMEsMap.end()) continue;
222  iPos->second.ConnectedFeds = 0;
223  }
224  // count sub detector feds
225 
226 
227  for (std::map<std::string, std::vector<unsigned short> >::const_iterator it = subDetFedMap.begin();
228  it != subDetFedMap.end(); it++) {
229  std::string name = it->first;
230  std::vector<unsigned short> subdetIds = it->second;
231  std::map<std::string, SubDetMEs>::iterator iPos = SubDetMEsMap.find(name);
232  if (iPos == SubDetMEsMap.end()) continue;
233  iPos->second.ConnectedFeds = 0;
234  for (std::vector<unsigned short>::iterator iv = subdetIds.begin();
235  iv != subdetIds.end(); iv++) {
236  bool fedid_found = false;
237  for(unsigned int it = 0; it < fed_ids.size(); ++it) {
238  unsigned short fedID = fed_ids[it];
239  if(fedID < siStripFedIdMin || fedID > siStripFedIdMax) continue;
240  if ((*iv) == fedID) {
241  fedid_found = true;
242  iPos->second.ConnectedFeds++;
243  break;
244  }
245  }
246  if (!fedid_found) findExcludedModule((*iv),tTopo);
247  }
248  int nFedsConnected = iPos->second.ConnectedFeds;
249  int nFedSubDet = subdetIds.size();
250  if (nFedSubDet > 0) {
251  iPos->second.DaqFractionME->Reset();
252  iPos->second.DaqFractionME->Fill(nFedsConnected*1.0/nFedSubDet);
253  }
254  }
255 }
256 //
257 // -- find Excluded Modules
258 //
259 void SiStripDaqInfo::findExcludedModule(unsigned short fed_id, const TrackerTopology* tTopo) {
260  dqmStore_->cd();
261  std::string mdir = "MechanicalView";
262  if (!SiStripUtility::goToDir(dqmStore_, mdir)) {
263  dqmStore_->setCurrentFolder("SiStrip/"+mdir);
264  }
265  std::string mechanical_dir = dqmStore_->pwd();
266  auto fedChannels = fedCabling_->fedConnections(fed_id);
267  int ichannel = 0;
268  std::string tag = "ExcludedFedChannel";
269  std::string bad_module_folder;
270  for (std::vector<FedChannelConnection>::const_iterator iconn = fedChannels.begin();
271  iconn < fedChannels.end(); iconn++){
272  if (!iconn->isConnected()) continue;
273  uint32_t detId = iconn->detId();
274  if (detId == 0 || detId == 0xFFFFFFFF) continue;
275 
276  ichannel++;
277  if (ichannel == 1) {
278  std::string subdet_folder ;
279  SiStripFolderOrganizer folder_organizer;
280  folder_organizer.getSubDetFolder(detId,tTopo,subdet_folder);
281  if (!dqmStore_->dirExists(subdet_folder)) {
282  subdet_folder = mechanical_dir + subdet_folder.substr(subdet_folder.find(mdir)+mdir.size());
283  }
284  bad_module_folder = subdet_folder + "/" + "BadModuleList";
285  dqmStore_->setCurrentFolder(bad_module_folder);
286  }
287  std::ostringstream detid_str;
288  detid_str << detId;
289  std::string full_path = bad_module_folder + "/" + detid_str.str();
290  MonitorElement* me = dqmStore_->get(full_path);
291  uint16_t flag = 0;
292  if (me) {
293  flag = me->getIntValue();
294  me->Reset();
295  } else me = dqmStore_->bookInt(detid_str.str());
297  me->Fill(flag);
298  }
299  dqmStore_->cd();
300 }
static void setBadModuleFlag(std::string &hname, uint16_t &flg)
void getSubDetFolder(const uint32_t &detid, const TrackerTopology *tTopo, std::string &folder_name)
void readFedIds(const edm::ESHandle< SiStripFedCabling > &fedcabling, edm::EventSetup const &iSetup)
void endLuminosityBlock(edm::LuminosityBlock const &lumiSeg, edm::EventSetup const &iSetup)
End Of Luminosity.
void cd(void)
go to top directory (ie. root)
Definition: DQMStore.cc:684
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:17
void endRun(edm::Run const &run, edm::EventSetup const &eSetup)
EndRun.
virtual ~SiStripDaqInfo()
Destructor.
void findExcludedModule(unsigned short fed_id, const TrackerTopology *tTopo)
MonitorElement * bookFloat(const char *name)
Book float.
Definition: DQMStore.cc:931
const eventsetup::EventSetupRecord * find(const eventsetup::EventSetupRecordKey &) const
Definition: EventSetup.cc:91
void Fill(long long x)
edm::ESHandle< SiStripFedCabling > fedCabling_
const std::string subdet_tag("SubDet")
SiStripDaqInfo(const edm::ParameterSet &ps)
Constructor.
MonitorElement * get(const std::string &path) const
get ME from full pathname (e.g. &quot;my/long/dir/my_histo&quot;)
Definition: DQMStore.cc:1748
void analyze(edm::Event const &, edm::EventSetup const &)
Analyze.
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
DQMStore * dqmStore_
std::map< std::string, SubDetMEs > SubDetMEsMap
bool dirExists(const std::string &path) const
true if directory exists
Definition: DQMStore.cc:772
std::map< std::string, std::vector< unsigned short > > subDetFedMap
int64_t getIntValue(void) const
const T & get() const
Definition: EventSetup.h:56
MonitorElement * DaqFractionME
T const * product() const
Definition: ESHandle.h:86
void readSubdetFedFractions(std::vector< int > &fed_ids, edm::EventSetup const &iSetup)
void beginRun(edm::Run const &run, edm::EventSetup const &eSetup)
Begin Run.
static void getSubDetectorTag(uint32_t det_id, std::string &subdet_tag, const TrackerTopology *tTopo)
void fillDummyStatus()
MonitorElement * DaqFraction_
bool isValid() const
Definition: ESHandle.h:47
MonitorElement * bookInt(const char *name)
Book int.
Definition: DQMStore.cc:901
unsigned long long m_cacheID_
void Reset(void)
reset ME (ie. contents, errors, etc)
static bool goToDir(DQMStore *dqm_store, std::string name)
void beginJob()
BeginJob.
static void getTopFolderPath(DQMStore *dqm_store, std::string top_dir, std::string &path)
void setCurrentFolder(const std::string &fullpath)
Definition: DQMStore.cc:707
Definition: Run.h:43
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:679