CMS 3D CMS Logo

All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
SiStripTrackerMapCreator.cc
Go to the documentation of this file.
8 
10 #include <iostream>
11 
12 //
13 // -- Constructor
14 //
16  trackerMap_ = 0;
17  if(!edm::Service<TkDetMap>().isAvailable()){
18  edm::LogError("TkHistoMap") <<
19  "\n------------------------------------------"
20  "\nUnAvailable Service TkHistoMap: please insert in the configuration file an instance like"
21  "\n\tprocess.TkDetMap = cms.Service(\"TkDetMap\")"
22  "\n------------------------------------------";
23  }
25 }
26 //
27 // -- Destructor
28 //
30  if (trackerMap_) delete trackerMap_;
31 }
32 //
33 // -- Create Geometric and Fed Tracker Map
34 //
36  const edm::ESHandle<SiStripFedCabling>& fedcabling, DQMStore* dqm_store, std::string& map_type) {
37 
38  if (trackerMap_) delete trackerMap_;
39  trackerMap_ = new TrackerMap(tkmapPset, fedcabling);
40  std::string tmap_title = " Tracker Map from " + map_type;
41  trackerMap_->setTitle(tmap_title);
42 
43  nDet = 0;
44  tkMapMax = 0.0;
45  tkMapMin = 0.0;
46 
47  if (map_type == "QTestAlarm") {
49  const std::vector<uint16_t>& feds = fedcabling->feds();
50  uint32_t detId_save = 0;
51  for(std::vector<unsigned short>::const_iterator ifed = feds.begin();
52  ifed < feds.end(); ifed++){
53  const std::vector<FedChannelConnection> fedChannels = fedcabling->connections( *ifed );
54  for(std::vector<FedChannelConnection>::const_iterator iconn = fedChannels.begin(); iconn < fedChannels.end(); iconn++){
55 
56  uint32_t detId = iconn->detId();
57  if (detId == 0 || detId == 0xFFFFFFFF) continue;
58  if (detId_save != detId) {
59  detId_save = detId;
60  paintTkMapFromAlarm(detId, dqm_store);
61  }
62  }
63  }
64  } else {
66  setTkMapFromHistogram(dqm_store, map_type);
67  setTkMapRange(map_type);
68  }
70  delete trackerMap_;
71  trackerMap_ = 0;
72 }
73 //
74 // -- Create Tracker Map for Offline process
75 //
77  DQMStore* dqm_store, std::string& map_type){
78  if (trackerMap_) delete trackerMap_;
79  trackerMap_ = new TrackerMap(tkmapPset);
80 
81  std::string tmap_title = " Tracker Map from " + map_type;
82  trackerMap_->setTitle(tmap_title);
83 
84  setTkMapFromHistogram(dqm_store, map_type);
85  setTkMapRange(map_type);
86 
87  trackerMap_->save(true, tkMapMin,tkMapMax, map_type+".svg");
88  trackerMap_->save(true, tkMapMin,tkMapMax, map_type+".png",4500,2400);
89  delete trackerMap_;
90  trackerMap_ = 0;
91 }
92 //
93 // -- Paint Tracker Map with QTest Alarms
94 //
95 void SiStripTrackerMapCreator::paintTkMapFromAlarm(uint32_t det_id, DQMStore* dqm_store) {
96 
97  std::ostringstream comment;
98  uint16_t flag = 0;
99  flag = getDetectorFlagAndComment(dqm_store, det_id, comment);
100 
101  int rval, gval, bval;
102  SiStripUtility::getDetectorStatusColor(flag, rval, gval, bval);
103  trackerMap_->setText(det_id, comment.str());
104  trackerMap_->fillc(det_id, rval, gval, bval);
105 }
106 
107 //
108 // -- Paint Tracker Map from TkHistoMap Histograms
109 void SiStripTrackerMapCreator::setTkMapFromHistogram(DQMStore* dqm_store, std::string& htype) {
110  dqm_store->cd();
111 
112  std::string mdir = "MechanicalView";
113  if (!SiStripUtility::goToDir(dqm_store, mdir)) return;
114  std::string mechanicalview_dir = dqm_store->pwd();
115 
116  std::vector<std::string> subdet_folder;
117  subdet_folder.push_back("TIB");
118  subdet_folder.push_back("TOB");
119  subdet_folder.push_back("TEC/side_1");
120  subdet_folder.push_back("TEC/side_2");
121  subdet_folder.push_back("TID/side_1");
122  subdet_folder.push_back("TID/side_2");
123 
124  nDet = 0;
125  tkMapMax = 0.0;
126  tkMapMin = 0.0;
127 
128  for (std::vector<std::string>::const_iterator it = subdet_folder.begin(); it != subdet_folder.end(); it++) {
129  std::string dname = mechanicalview_dir + "/" + (*it);
130  if (!dqm_store->dirExists(dname)) continue;
131  dqm_store->cd(dname);
132  std::vector<std::string> layerVec = dqm_store->getSubdirs();
133  for (std::vector<std::string>::const_iterator iLayer = layerVec.begin(); iLayer != layerVec.end(); iLayer++) {
134  if ((*iLayer).find("BadModuleList") !=std::string::npos) continue;
135  std::vector<MonitorElement*> meVec = dqm_store->getContents((*iLayer));
136  MonitorElement* tkhmap_me = 0;
137  std::string name;
138  for (std::vector<MonitorElement*>::const_iterator itkh = meVec.begin(); itkh != meVec.end(); itkh++) {
139  name = (*itkh)->getName();
140  if (name.find("TkHMap") == std::string::npos) continue;
141  if (htype == "QTestAlarm" ){
142  tkhmap_me = (*itkh);
143  break;
144  } else if (name.find(htype) != std::string::npos) {
145  tkhmap_me = (*itkh);
146  break;
147  }
148  }
149  if (tkhmap_me != 0) {
150  paintTkMapFromHistogram(dqm_store,tkhmap_me, htype);
151  }
152  }
153  dqm_store->cd(mechanicalview_dir);
154  }
155  dqm_store->cd();
156 }
158  std::string name = me->getName();
159  std::string lname = name.substr(name.find("TkHMap_")+7);
160  lname = lname.substr(lname.find("_T")+1);
161  std::vector<uint32_t> layer_detids;
162  tkDetMap_->getDetsForLayer(tkDetMap_->getLayerNum(lname), layer_detids);
163  for (std::vector<uint32_t>::const_iterator idet = layer_detids.begin(); idet != layer_detids.end(); idet++) {
164  uint32_t det_id= (*idet);
165  if (det_id <= 0) continue;
166  nDet++;
167  std::ostringstream comment;
168  uint32_t flag = 0;
169  flag = getDetectorFlagAndComment(dqm_store, det_id, comment);
170  trackerMap_->setText(det_id, comment.str());
171  const TkLayerMap::XYbin& xyval = tkDetMap_->getXY(det_id);
172  float fval = 0.0;
173  if ( (name.find("NumberOfOfffTrackCluster") != std::string::npos) ||
174  (name.find("NumberOfOnTrackCluster") != std::string::npos) ) {
176  TProfile2D* tp = me->getTProfile2D() ;
177  fval = tp->GetBinEntries(tp->GetBin(xyval.ix, xyval.iy)) * tp->GetBinContent(xyval.ix, xyval.iy);
178  }
179  } else fval = me->getBinContent(xyval.ix, xyval.iy);
180  if (htype == "QTestAlarm") {
181  int rval, gval, bval;
182  SiStripUtility::getDetectorStatusColor(flag, rval, gval, bval);
183  trackerMap_->fillc(det_id, rval, gval, bval);
184  } else {
185  tkMapMax += fval;
186  if (fval == 0.0) trackerMap_->fillc(det_id,255, 255, 255);
187  else {
188  trackerMap_->fill_current_val(det_id, fval);
189  }
190  }
191  }
192 }
193 //
194 // -- Get Tracker Map Fill Range
195 //
196 void SiStripTrackerMapCreator::setTkMapRange(std::string& map_type) {
197  tkMapMin = 0.0;
198  if (tkMapMax == 0.0) {
199  if (map_type.find("FractionOfBadChannels") != std::string::npos) tkMapMax = 1.0;
200  else if (map_type.find("NumberOfCluster") != std::string::npos) tkMapMax = 0.01;
201  else if (map_type.find("NumberOfDigi") != std::string::npos) tkMapMax = 0.6;
202  else if (map_type.find("NumberOfOffTrackCluster") != std::string::npos) tkMapMax = 100.0;
203  else if (map_type.find("NumberOfOnTrackCluster") != std::string::npos) tkMapMax = 50.0;
204  else if (map_type.find("StoNCorrOnTrack") != std::string::npos) tkMapMax = 200.0;
205  } else {
206  tkMapMax = tkMapMax/nDet*1.0;
207  tkMapMax = tkMapMax * 2.5;
208  }
210 }
211 //
212 // -- Get Flag and status Comment
213 //
214 uint16_t SiStripTrackerMapCreator::getDetectorFlagAndComment(DQMStore* dqm_store, uint32_t det_id, std::ostringstream& comment) {
215  comment << " DetId " << det_id << " : ";
216  uint16_t flag = 0;
217 
218  SiStripFolderOrganizer folder_organizer;
219  std::string subdet_folder, badmodule_folder;
220 
221  folder_organizer.getSubDetFolder(det_id, subdet_folder);
222  if (dqm_store->dirExists(subdet_folder)){
223  badmodule_folder = subdet_folder + "/BadModuleList";
224  } else {
225  badmodule_folder = dqm_store->pwd() + "/BadModuleList";
226  }
227  if (!dqm_store->dirExists(badmodule_folder)) return flag;
228 
229  std::ostringstream badmodule_path;
230  badmodule_path << badmodule_folder << "/" << det_id;
231 
232  MonitorElement* bad_module_me = dqm_store->get(badmodule_path.str());
233  if (bad_module_me && bad_module_me->kind() == MonitorElement::DQM_KIND_INT) {
234  flag = bad_module_me->getIntValue();
235  std::string message;
236  SiStripUtility::getBadModuleStatus(flag, message);
237  comment << message.c_str();
238  }
239  return flag;
240 }
const std::string & getName(void) const
get name of ME
void fillc_all_blank()
Definition: TrackerMap.cc:2503
long int flag
Definition: mlp_lapack.h:47
void getSubDetFolder(const uint32_t &detid, std::string &folder_name)
std::vector< std::string > getSubdirs(void) const
Definition: DQMStore.cc:1216
void setTkMapFromHistogram(DQMStore *dqm_store, std::string &htype)
TProfile2D * getTProfile2D(void) const
void cd(void)
go to top directory (ie. root)
Definition: DQMStore.cc:209
static void getDetectorStatusColor(int status, int &rval, int &gval, int &bval)
void paintTkMapFromHistogram(DQMStore *dqm_store, MonitorElement *me, std::string &map_type)
static void getBadModuleStatus(uint16_t flag, std::string &message)
void setTitle(std::string s)
Definition: TrackerMap.h:71
int getLayerNum(std::string &in)
Definition: TkDetMap.cc:759
void fill_all_blank()
Definition: TrackerMap.cc:2511
void getDetsForLayer(int layer, std::vector< uint32_t > &output)
Definition: TkDetMap.cc:677
void save(bool print_total=true, float minval=0., float maxval=0., std::string s="svgmap.svg", int width=1500, int height=800)
Definition: TrackerMap.cc:632
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:1265
std::vector< MonitorElement * > getContents(const std::string &path) const
Definition: DQMStore.cc:1294
void paintTkMapFromAlarm(uint32_t det_id, DQMStore *dqm_store)
void fillc(int idmod, int RGBcode)
Definition: TrackerMap.h:48
bool dirExists(const std::string &path) const
true if directory exists
Definition: DQMStore.cc:296
unsigned long long int rval
Definition: vlib.h:23
int64_t getIntValue(void) const
string message
Definition: argparse.py:126
void setRange(float min, float max)
Definition: TrackerMap.h:72
void createForOffline(const edm::ParameterSet &tkmapPset, DQMStore *dqm_store, std::string &htype)
double getBinContent(int binx) const
get content of bin (1-D)
void printonline()
Definition: TrackerMap.cc:2643
const TkLayerMap::XYbin & getXY(uint32_t &)
Definition: TkDetMap.cc:633
void fill_current_val(int idmod, float current_val)
Definition: TrackerMap.cc:2521
void setText(int idmod, std::string s)
Definition: TrackerMap.cc:2559
void create(const edm::ParameterSet &tkmapPset, const edm::ESHandle< SiStripFedCabling > &fedcabling, DQMStore *dqm_store, std::string &htype)
static bool goToDir(DQMStore *dqm_store, std::string name)
void setTkMapRange(std::string &map_type)
uint16_t getDetectorFlagAndComment(DQMStore *dqm_store, uint32_t det_id, std::ostringstream &comment)
const std::string & pwd(void) const
Definition: DQMStore.cc:204
#define comment(par)
Definition: vmac.h:162