CMS 3D CMS Logo

TkHistoMap.cc
Go to the documentation of this file.
3 
4 //#define debug_TkHistoMap
5 
6 TkHistoMap::TkHistoMap(const TkDetMap* tkDetMap) : HistoNumber(35) {
7  LogTrace("TkHistoMap") << "TkHistoMap::constructor without parameters";
8  load(tkDetMap, "", 0.0f, false, false, false);
9 }
10 
12  const TkDetMap* tkDetMap, const std::string& path, const std::string& MapName, float baseline, bool mechanicalView)
13  : HistoNumber(35), MapName_(MapName) {
14  LogTrace("TkHistoMap") << "TkHistoMap::constructor with parameters";
15  load(tkDetMap, path, baseline, mechanicalView, false);
16  dqmStore_->meBookerGetter([this, &path, &baseline, mechanicalView](DQMStore::IBooker& ibooker, DQMStore::IGetter&) {
17  this->createTkHistoMap(ibooker, path, MapName_, baseline, mechanicalView);
18  });
19 }
20 
22  const std::string& path,
23  const std::string& MapName,
24  float baseline,
25  bool mechanicalView,
26  bool isTH2F)
27  : HistoNumber(35), MapName_(MapName) {
28  LogTrace("TkHistoMap") << "TkHistoMap::constructor with parameters";
29  load(tkDetMap, path, baseline, mechanicalView, isTH2F);
30  dqmStore_->meBookerGetter([this, &path, &baseline, mechanicalView](DQMStore::IBooker& ibooker, DQMStore::IGetter&) {
31  this->createTkHistoMap(ibooker, path, MapName_, baseline, mechanicalView);
32  });
33 }
34 
36  DQMStore::IBooker& ibooker,
37  const std::string& path,
38  const std::string& MapName,
39  float baseline,
40  bool mechanicalView,
41  bool isTH2F)
42  : HistoNumber(35), MapName_(MapName) {
43  LogTrace("TkHistoMap") << "TkHistoMap::constructor with parameters";
44  load(tkDetMap, path, baseline, mechanicalView, isTH2F);
45  createTkHistoMap(ibooker, path, MapName_, baseline, mechanicalView);
46 }
47 
48 void TkHistoMap::load(const TkDetMap* tkDetMap,
49  const std::string& path,
50  float baseline,
51  bool mechanicalView,
52  bool isTH2F,
53  bool createTkMap) {
54  // cannot pass nullptr, otherwise methods making use of TrackerTopology will segfault
55  if (tkDetMap == nullptr) {
56  throw cms::Exception("LogicError") << " expected pointer to TkDetMap is null!\n";
57  }
58 
59  cached_detid = 0;
60  cached_layer = 0;
61  loadServices();
62  tkdetmap_ = tkDetMap;
63  isTH2F_ = isTH2F;
64 }
65 
67  if (!edm::Service<DQMStore>().isAvailable()) {
68  edm::LogError("TkHistoMap")
69  << "\n------------------------------------------"
70  "\nUnAvailable Service DQMStore: please insert in the configuration file an instance like"
71  "\n\tprocess.load(\"DQMServices.Core.DQMStore_cfg\")"
72  "\n------------------------------------------";
73  }
75 }
76 
78  // dqmStore_ only for saving
80 }
81 
82 void TkHistoMap::loadTkHistoMap(const std::string& path, const std::string& MapName, bool mechanicalView) {
83  MapName_ = MapName;
84  tkHistoMap_.resize(HistoNumber);
85  auto loadMap = [this, &path, mechanicalView](DQMStore::IBooker& ibooker, DQMStore::IGetter& igetter) {
87  for (int layer = 1; layer < HistoNumber; ++layer) {
88  folder = folderDefinition(ibooker, path, MapName_, layer, mechanicalView, fullName);
89 #ifdef debug_TkHistoMap
90  LogTrace("TkHistoMap") << "[TkHistoMap::loadTkHistoMap] folder " << folder << " histoName " << fullName
91  << " find " << folder.find_last_of("/") << " length " << folder.length();
92 #endif
93  if (folder.find_last_of('/') != folder.length() - 1)
94  folder += "/";
95  tkHistoMap_[layer] = igetter.get(folder + fullName);
96 #ifdef debug_TkHistoMap
97  LogTrace("TkHistoMap") << "[TkHistoMap::loadTkHistoMap] folder " << folder << " histoName " << fullName
98  << " layer " << layer << " ptr " << tkHistoMap_[layer] << " find "
99  << folder.find_last_of("/") << " length " << folder.length();
100 #endif
101  }
102  };
103  dqmStore_->meBookerGetter(loadMap);
104 }
105 
107  const std::string& path,
108  const std::string& MapName,
109  float baseline,
110  bool mechanicalView) {
111  int nchX;
112  int nchY;
113  double lowX, highX;
114  double lowY, highY;
116 
117  tkHistoMap_.resize(HistoNumber);
118  const bool bookTH2F = isTH2F_;
119  for (int layer = 1; layer < HistoNumber; ++layer) {
120  folder = folderDefinition(ibooker, path, MapName, layer, mechanicalView, fullName);
121  tkdetmap_->getComponents(layer, nchX, lowX, highX, nchY, lowY, highY);
123  if (bookTH2F == false) {
124  me = ibooker.bookProfile2D(fullName.c_str(), fullName.c_str(), nchX, lowX, highX, nchY, lowY, highY, 0.0, 0.0);
125  } else {
126  me = ibooker.book2D(fullName.c_str(), fullName.c_str(), nchX, lowX, highX, nchY, lowY, highY);
127  }
128  //initialize bin content for the not assigned bins
129  if (baseline != 0) {
130  for (size_t ix = 1; ix <= (unsigned int)nchX; ++ix)
131  for (size_t iy = 1; iy <= (unsigned int)nchY; ++iy)
132  if (!tkdetmap_->getDetFromBin(layer, ix, iy))
133  me->Fill(1. * (lowX + ix - .5), 1. * (lowY + iy - .5), baseline);
134  }
135 
136  tkHistoMap_[layer] = me;
137 #ifdef debug_TkHistoMap
138  LogTrace("TkHistoMap") << "[TkHistoMap::createTkHistoMap] folder " << folder << " histoName " << fullName
139  << " layer " << layer << " ptr " << tkHistoMap_[layer];
140 #endif
141  }
142 }
143 
146  const std::string& MapName,
147  int layer,
148  bool mechanicalView,
152 
153  if (mechanicalView) {
154  std::stringstream ss;
155 
156  SiStripFolderOrganizer folderOrg;
157  folderOrg.setSiStripFolderName(folder);
158 
160  uint32_t subdetlayer = 0, side = 0;
161  TkDetMap::getSubDetLayerSide(layer, subDet, subdetlayer, side);
162  folderOrg.getSubDetLayerFolderName(ss, subDet, subdetlayer, side);
163  folder = ss.str();
164  }
165  ibooker.setCurrentFolder(folder);
166  return folder;
167 }
168 
169 #include <iostream>
171  std::ifstream file;
172  file.open(filename.c_str());
173 
174  if (file.fail()) {
175  throw cms::Exception("LogicError") << "failed to open input file" << std::endl;
176  }
177 
178  float value;
179  uint32_t detid;
180  while (file.good()) {
181  file >> detid >> value;
182  fill(detid, value);
183  }
184  file.close();
185 }
186 
187 void TkHistoMap::fill(DetId detid, float value) {
189  if (layer == TkLayerMap::INVALID) {
190  edm::LogError("TkHistoMap") << " could not fill for detid " << detid.rawId() << ", as the layer is invalid";
191  return;
192  }
193 
195 #ifdef debug_TkHistoMap
196  LogTrace("TkHistoMap") << "[TkHistoMap::fill] Fill detid " << detid.rawId() << " Layer " << layer << " value "
197  << value << " ix,iy " << xybin.ix << " " << xybin.iy << " " << xybin.x << " " << xybin.y << " "
198  << tkHistoMap_[layer]->getTProfile2D()->GetName();
199 #endif
201  tkHistoMap_[layer]->getTProfile2D()->Fill(xybin.x, xybin.y, value);
203  tkHistoMap_[layer]->getTH2F()->Fill(xybin.x, xybin.y, value);
204 #ifdef debug_TkHistoMap
205  LogTrace("TkHistoMap") << "[TkHistoMap::fill] "
206  << tkHistoMap_[layer]->getTProfile2D()->GetBinContent(xybin.ix, xybin.iy);
207  for (size_t ii = 0; ii < 4; ii++)
208  for (size_t jj = 0; jj < 11; jj++) {
210  LogTrace("TkHistoMap") << "[TkHistoMap::fill] " << ii << " " << jj << " "
211  << tkHistoMap_[layer]->getTProfile2D()->GetBinContent(ii, jj);
213  LogTrace("TkHistoMap") << "[TkHistoMap::fill] " << ii << " " << jj << " "
214  << tkHistoMap_[layer]->getTH2F()->GetBinContent(ii, jj);
215  }
216 #endif
217 }
218 
221  if (layer == TkLayerMap::INVALID) {
222  edm::LogError("TkHistoMap") << " could not setBinContent for detid " << detid.rawId()
223  << ", as the layer is invalid";
224  return;
225  }
227 
229  tkHistoMap_[layer]->getTProfile2D()->SetBinEntries(tkHistoMap_[layer]->getTProfile2D()->GetBin(xybin.ix, xybin.iy),
230  1);
231  tkHistoMap_[layer]->getTProfile2D()->SetBinContent(tkHistoMap_[layer]->getTProfile2D()->GetBin(xybin.ix, xybin.iy),
232  value);
233  } else if (tkHistoMap_[layer]->kind() == MonitorElement::Kind::TH2F) {
234  tkHistoMap_[layer]->setBinContent(xybin.ix, xybin.iy, value);
235  }
236 
237 #ifdef debug_TkHistoMap
238  LogTrace("TkHistoMap") << "[TkHistoMap::setbincontent] setBinContent detid " << detid.rawId() << " Layer " << layer
239  << " value " << value << " ix,iy " << xybin.ix << " " << xybin.iy << " " << xybin.x << " "
240  << xybin.y << " " << tkHistoMap_[layer]->getTProfile2D()->GetName() << " bin "
241  << tkHistoMap_[layer]->getTProfile2D()->GetBin(xybin.ix, xybin.iy);
242 
243  LogTrace("TkHistoMap") << "[TkHistoMap::setbincontent] "
244  << tkHistoMap_[layer]->getTProfile2D()->GetBinContent(xybin.ix, xybin.iy);
245  for (size_t ii = 0; ii < 4; ii++)
246  for (size_t jj = 0; jj < 11; jj++) {
247  LogTrace("TkHistoMap") << "[TkHistoMap::setbincontent] " << ii << " " << jj << " "
248  << tkHistoMap_[layer]->getTProfile2D()->GetBinContent(ii, jj);
249  }
250 #endif
251 }
252 
253 void TkHistoMap::add(DetId detid, float value) {
254 #ifdef debug_TkHistoMap
255  LogTrace("TkHistoMap") << "[TkHistoMap::add]";
256 #endif
258  if (layer == TkLayerMap::INVALID) {
259  edm::LogError("TkHistoMap") << " could not add for detid " << detid.rawId() << ", as the layer is invalid";
260  return;
261  }
264  setBinContent(detid,
265  tkHistoMap_[layer]->getTProfile2D()->GetBinContent(
266  tkHistoMap_[layer]->getTProfile2D()->GetBin(xybin.ix, xybin.iy)) +
267  value);
270  detid,
271  tkHistoMap_[layer]->getTH2F()->GetBinContent(tkHistoMap_[layer]->getTH2F()->GetBin(xybin.ix, xybin.iy)) +
272  value);
273 }
274 
277  if (layer == TkLayerMap::INVALID) {
278  edm::LogError("TkHistoMap") << " could not getValue for detid " << detid.rawId() << ", as the layer is invalid";
279  return -99999.f;
280  }
281 
283 
285  return tkHistoMap_[layer]->getTH2F()->GetBinContent(tkHistoMap_[layer]->getTH2F()->GetBin(xybin.ix, xybin.iy));
286  else
287  return tkHistoMap_[layer]->getTProfile2D()->GetBinContent(
288  tkHistoMap_[layer]->getTProfile2D()->GetBin(xybin.ix, xybin.iy));
289 }
292  if (layer == TkLayerMap::INVALID) {
293  edm::LogError("TkHistoMap") << " could not getValue for detid " << detid.rawId() << ", as the layer is invalid";
294  return -99999.f;
295  }
296 
298  return 1;
299  } else {
301  return tkHistoMap_[layer]->getTProfile2D()->GetBinEntries(
302  tkHistoMap_[layer]->getTProfile2D()->GetBin(xybin.ix, xybin.iy));
303  }
304 }
305 
306 void TkHistoMap::dumpInTkMap(TrackerMap* tkmap, bool dumpEntries) {
307  for (int layer = 1; layer < HistoNumber; ++layer) {
308  // std::vector<uint32_t> dets;
309  // tkdetmap_->getDetsForLayer(layer,dets);
310  std::vector<DetId> dets = tkdetmap_->getDetsForLayer(layer);
311  for (size_t i = 0; i < dets.size(); ++i) {
312  if (dets[i] > 0) {
313  if (getEntries(dets[i]) > 0) {
314  tkmap->fill(dets[i], dumpEntries ? getEntries(dets[i]) : getValue(dets[i]));
315  }
316  }
317  }
318  }
319 }
320 
321 #include "TCanvas.h"
322 #include "TFile.h"
324  // TCanvas C(MapName_,MapName_,200,10,900,700);
325  TCanvas* CTIB =
326  new TCanvas(std::string("Canvas_" + MapName_ + "TIB").c_str(), std::string("Canvas_" + MapName_ + "TIB").c_str());
327  TCanvas* CTOB =
328  new TCanvas(std::string("Canvas_" + MapName_ + "TOB").c_str(), std::string("Canvas_" + MapName_ + "TOB").c_str());
329  TCanvas* CTIDP = new TCanvas(std::string("Canvas_" + MapName_ + "TIDP").c_str(),
330  std::string("Canvas_" + MapName_ + "TIDP").c_str());
331  TCanvas* CTIDM = new TCanvas(std::string("Canvas_" + MapName_ + "TIDM").c_str(),
332  std::string("Canvas_" + MapName_ + "TIDM").c_str());
333  TCanvas* CTECP = new TCanvas(std::string("Canvas_" + MapName_ + "TECP").c_str(),
334  std::string("Canvas_" + MapName_ + "TECP").c_str());
335  TCanvas* CTECM = new TCanvas(std::string("Canvas_" + MapName_ + "TECM").c_str(),
336  std::string("Canvas_" + MapName_ + "TECM").c_str());
337  CTIB->Divide(2, 2);
338  CTOB->Divide(2, 3);
339  CTIDP->Divide(1, 3);
340  CTIDM->Divide(1, 3);
341  CTECP->Divide(3, 3);
342  CTECM->Divide(3, 3);
343 
344  int i;
345  i = 0;
346  CTIB->cd(++i);
347  tkHistoMap_[TkLayerMap::TIB_L1]->getTProfile2D()->Draw(options.c_str());
348  CTIB->cd(++i);
349  tkHistoMap_[TkLayerMap::TIB_L2]->getTProfile2D()->Draw(options.c_str());
350  CTIB->cd(++i);
351  tkHistoMap_[TkLayerMap::TIB_L3]->getTProfile2D()->Draw(options.c_str());
352  CTIB->cd(++i);
353  tkHistoMap_[TkLayerMap::TIB_L4]->getTProfile2D()->Draw(options.c_str());
354 
355  i = 0;
356  CTIDP->cd(++i);
357  tkHistoMap_[TkLayerMap::TIDP_D1]->getTProfile2D()->Draw(options.c_str());
358  CTIDP->cd(++i);
359  tkHistoMap_[TkLayerMap::TIDP_D2]->getTProfile2D()->Draw(options.c_str());
360  CTIDP->cd(++i);
361  tkHistoMap_[TkLayerMap::TIDP_D3]->getTProfile2D()->Draw(options.c_str());
362 
363  i = 0;
364  CTIDM->cd(++i);
365  tkHistoMap_[TkLayerMap::TIDM_D1]->getTProfile2D()->Draw(options.c_str());
366  CTIDM->cd(++i);
367  tkHistoMap_[TkLayerMap::TIDM_D2]->getTProfile2D()->Draw(options.c_str());
368  CTIDM->cd(++i);
369  tkHistoMap_[TkLayerMap::TIDM_D3]->getTProfile2D()->Draw(options.c_str());
370 
371  i = 0;
372  CTOB->cd(++i);
373  tkHistoMap_[TkLayerMap::TOB_L1]->getTProfile2D()->Draw(options.c_str());
374  CTOB->cd(++i);
375  tkHistoMap_[TkLayerMap::TOB_L2]->getTProfile2D()->Draw(options.c_str());
376  CTOB->cd(++i);
377  tkHistoMap_[TkLayerMap::TOB_L3]->getTProfile2D()->Draw(options.c_str());
378  CTOB->cd(++i);
379  tkHistoMap_[TkLayerMap::TOB_L4]->getTProfile2D()->Draw(options.c_str());
380  CTOB->cd(++i);
381  tkHistoMap_[TkLayerMap::TOB_L5]->getTProfile2D()->Draw(options.c_str());
382  CTOB->cd(++i);
383  tkHistoMap_[TkLayerMap::TOB_L6]->getTProfile2D()->Draw(options.c_str());
384 
385  i = 0;
386  CTECP->cd(++i);
387  tkHistoMap_[TkLayerMap::TECP_W1]->getTProfile2D()->Draw(options.c_str());
388  CTECP->cd(++i);
389  tkHistoMap_[TkLayerMap::TECP_W2]->getTProfile2D()->Draw(options.c_str());
390  CTECP->cd(++i);
391  tkHistoMap_[TkLayerMap::TECP_W3]->getTProfile2D()->Draw(options.c_str());
392  CTECP->cd(++i);
393  tkHistoMap_[TkLayerMap::TECP_W4]->getTProfile2D()->Draw(options.c_str());
394  CTECP->cd(++i);
395  tkHistoMap_[TkLayerMap::TECP_W5]->getTProfile2D()->Draw(options.c_str());
396  CTECP->cd(++i);
397  tkHistoMap_[TkLayerMap::TECP_W6]->getTProfile2D()->Draw(options.c_str());
398  CTECP->cd(++i);
399  tkHistoMap_[TkLayerMap::TECP_W7]->getTProfile2D()->Draw(options.c_str());
400  CTECP->cd(++i);
401  tkHistoMap_[TkLayerMap::TECP_W8]->getTProfile2D()->Draw(options.c_str());
402  CTECP->cd(++i);
403  tkHistoMap_[TkLayerMap::TECP_W9]->getTProfile2D()->Draw(options.c_str());
404 
405  i = 0;
406  CTECM->cd(++i);
407  tkHistoMap_[TkLayerMap::TECM_W1]->getTProfile2D()->Draw(options.c_str());
408  CTECM->cd(++i);
409  tkHistoMap_[TkLayerMap::TECM_W2]->getTProfile2D()->Draw(options.c_str());
410  CTECM->cd(++i);
411  tkHistoMap_[TkLayerMap::TECM_W3]->getTProfile2D()->Draw(options.c_str());
412  CTECM->cd(++i);
413  tkHistoMap_[TkLayerMap::TECM_W4]->getTProfile2D()->Draw(options.c_str());
414  CTECM->cd(++i);
415  tkHistoMap_[TkLayerMap::TECM_W5]->getTProfile2D()->Draw(options.c_str());
416  CTECM->cd(++i);
417  tkHistoMap_[TkLayerMap::TECM_W6]->getTProfile2D()->Draw(options.c_str());
418  CTECM->cd(++i);
419  tkHistoMap_[TkLayerMap::TECM_W7]->getTProfile2D()->Draw(options.c_str());
420  CTECM->cd(++i);
421  tkHistoMap_[TkLayerMap::TECM_W8]->getTProfile2D()->Draw(options.c_str());
422  CTECM->cd(++i);
423  tkHistoMap_[TkLayerMap::TECM_W9]->getTProfile2D()->Draw(options.c_str());
424 
425  TFile* f = new TFile(filename.c_str(), mode.c_str());
426  CTIB->Write();
427  CTIDP->Write();
428  CTIDM->Write();
429  CTOB->Write();
430  CTECP->Write();
431  CTECM->Write();
432  f->Close();
433  delete f;
434 }
void loadServices()
Definition: TkHistoMap.cc:66
MonitorElement * bookProfile2D(TString const &name, TString const &title, int nchX, double lowX, double highX, int nchY, double lowY, double highY, double lowZ, double highZ, char const *option="s", FUNC onbooking=NOOP())
Definition: DQMStore.h:476
void setSiStripFolderName(std::string name)
static std::string getLayerName(int in)
Definition: TkDetMap.cc:237
static void getSubDetLayerSide(int in, SiStripDetId::SubDetector &, uint32_t &layer, uint32_t &side)
Definition: TkDetMap.cc:383
DetId cached_detid
Definition: TkHistoMap.h:92
void setBinContent(DetId detid, float value)
Definition: TkHistoMap.cc:219
virtual void setCurrentFolder(std::string const &fullpath)
Definition: DQMStore.cc:36
void fillFromAscii(const std::string &filename)
Definition: TkHistoMap.cc:170
void load(const TkDetMap *tkDetMap, const std::string &path, float baseline, bool mechanicalView, bool isTH2F, bool createTkMap=true)
Definition: TkHistoMap.cc:48
int16_t cached_layer
Definition: TkHistoMap.h:93
int HistoNumber
Definition: TkHistoMap.h:96
Log< level::Error, false > LogError
DQMStore * dqmStore_
Definition: TkHistoMap.h:89
#define LogTrace(id)
std::vector< MonitorElement * > tkHistoMap_
Definition: TkHistoMap.h:95
std::vector< DetId > getDetsForLayer(int layer) const
Definition: TkDetMap.h:196
constexpr std::array< uint8_t, layerIndexSize< TrackerTraits > > layer
void getSubDetLayerFolderName(std::stringstream &ss, SiStripDetId::SubDetector subDet, uint32_t layer, uint32_t side=0)
void save(const std::string &filename)
Definition: TkHistoMap.cc:77
std::string MapName_
Definition: TkHistoMap.h:97
const TkLayerMap::XYbin & getXY(DetId detid, DetId &cached_detid, int16_t &cached_layer, TkLayerMap::XYbin &cached_XYbin) const
Definition: TkDetMap.cc:548
int16_t findLayer(DetId detid, DetId &cached_detid, int16_t &cached_layer, TkLayerMap::XYbin &cached_XYbin) const
Definition: TkDetMap.cc:568
void createTkHistoMap(DQMStore::IBooker &ibooker, const std::string &path, const std::string &MapName, float baseline, bool mechanicalView)
Definition: TkHistoMap.cc:106
TkLayerMap::XYbin cached_XYbin
Definition: TkHistoMap.h:94
void meBookerGetter(iFunc f)
Definition: DQMStore.h:709
double f[11][100]
DetId getDetFromBin(int layer, int ix, int iy) const
Definition: TkDetMap.h:191
Definition: value.py:1
void dumpInTkMap(TrackerMap *tkmap, bool dumpEntries=false)
Definition: TkHistoMap.cc:306
ii
Definition: cuy.py:589
Definition: DetId.h:17
void getComponents(int layer, int &nchX, double &lowX, double &highX, int &nchY, double &lowY, double &highY) const
Definition: TkDetMap.cc:594
constexpr uint32_t rawId() const
get the raw id
Definition: DetId.h:57
bool isTH2F_
Definition: TkHistoMap.h:98
MonitorElement * book2D(TString const &name, TString const &title, int nchX, double lowX, double highX, int nchY, double lowY, double highY, FUNC onbooking=NOOP())
Definition: DQMStore.h:212
void fill(DetId detid, float value)
Definition: TkHistoMap.cc:187
const TkDetMap * tkdetmap_
Definition: TkHistoMap.h:91
void saveAsCanvas(const std::string &filename, const std::string &options="", const std::string &mode="RECREATE")
Definition: TkHistoMap.cc:323
TkHistoMap(const TkDetMap *tkDetMap, DQMStore::IBooker &ibooker, const std::string &path, const std::string &MapName, float baseline=0, bool mechanicalView=false, bool isTH2F=false)
Definition: TkHistoMap.cc:35
DQM_DEPRECATED void save(std::string const &filename, std::string const &path="")
Definition: DQMStore.cc:824
void loadTkHistoMap(const std::string &path, const std::string &MapName, bool mechanicalView=false)
Definition: TkHistoMap.cc:82
void add(DetId detid, float value)
Definition: TkHistoMap.cc:253
float getEntries(DetId detid)
Definition: TkHistoMap.cc:290
float getValue(DetId detid)
Definition: TkHistoMap.cc:275
void fill(int layer, int ring, int nmod, float x)
Definition: TrackerMap.cc:3289
std::string folderDefinition(DQMStore::IBooker &ibooker, std::string folder, const std::string &MapName, int layer, bool mechanicalView, std::string &fullName)
Definition: TkHistoMap.cc:144