CMS 3D CMS Logo

TrackerRemapper.cc
Go to the documentation of this file.
1 //
2 // Original Author: Pawel Jurgielewicz
3 // Created: Tue, 21 Nov 2017 13:38:45 GMT
4 //
5 // Modified by: Marco Musich
6 //
7 
8 // system include files
9 #include <array>
10 #include <memory>
11 #include <fstream>
12 #include <utility>
13 #include <iostream>
14 #include <vector>
15 #include <map>
16 #include <string>
17 
18 // user include files
43 
44 // root include files
45 #include "TGraph.h"
46 #include "TObjString.h"
47 #include "TObjArray.h"
48 #include "TH2Poly.h"
49 #include "TProfile2D.h"
50 #include "TColor.h"
51 
52 using namespace edm;
53 
54 class TrackerRemapper : public edm::one::EDAnalyzer<edm::one::SharedResources> {
55 public:
56  explicit TrackerRemapper(const edm::ParameterSet&);
57  ~TrackerRemapper() override;
58 
59  static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
60 
62  INVALID = 0,
63 
68 
70  PXF_R2
71  };
72 
73  enum AnalyzeData {
74  RECHITS = 1,
77  };
78 
79  enum OpMode { MODE_ANALYZE = 0, MODE_REMAP = 1 };
80 
81 private:
82  void beginJob() override;
83  void analyze(const edm::Event&, const edm::EventSetup&) override;
84  void endJob() override;
85 
86  void readVertices(double& minx, double& maxx, double& miny, double& maxy);
87 
88  void prepareStripNames();
89  void preparePixelNames();
90 
91  void bookBins();
92 
93  template <class T>
94  void analyzeGeneric(const edm::Event& iEvent, const edm::EDGetTokenT<T>& src);
95  void analyzeRechits(const edm::Event& iEvent, const edm::EDGetTokenT<reco::TrackCollection>& src);
96 
97  void fillStripRemap();
98  void fillPixelRemap(const TrackerGeometry* theTrackerGeometry, const TrackerTopology* tt);
99  void fillBarrelRemap(TFile* rootFileHandle, const TrackerGeometry* theTrackerGeometry, const TrackerTopology* tt);
100  void fillEndcapRemap(TFile* rootFileHandle, const TrackerGeometry* theTrackerGeometry, const TrackerTopology* tt);
101 
105 
108 
109  int m_opMode;
111 
112  std::map<long, TGraph*> m_bins;
113  std::vector<unsigned> m_detIdVector;
114 
116 
117  std::map<unsigned, std::string> m_stripHistnameMap;
118  std::map<unsigned, std::string> m_pixelHistnameMap;
119  std::map<unsigned, std::string> m_analyzeModeNameMap;
120 
123 
125  std::string m_pixelBaseDir, m_pixelDesiredHistogramBarrel, m_pixelDesiredHistogramDisk;
126 
128 
129  TH2Poly* trackerMap{nullptr};
130 
134 };
135 
136 template <class T>
137 //***************************************************************//
139 //***************************************************************//
140 {
142  iEvent.getByToken(src, input);
143 
144  if (!input.isValid()) {
145  edm::LogError("TrackerRemapper") << "<GENERIC> not found... Aborting...\n";
146  return;
147  }
148 
149  typename T::const_iterator it;
150  for (it = input->begin(); it != input->end(); ++it) {
151  auto id = DetId(it->detId());
152  trackerMap->Fill(TString::Format("%ld", (long)id.rawId()), it->size());
153  }
154 }
155 
156 template <>
157 //***************************************************************//
159 //***************************************************************//
160 {
161  analyzeRechits(iEvent, t);
162 }
163 
164 //***************************************************************//
166  : geomToken_(esConsumes()),
167  topoToken_(esConsumes()),
168  tkDetMapToken_(esConsumes()),
169  iConfig(iConfig),
170  m_opMode(iConfig.getParameter<int>("opMode")),
171  m_analyzeMode(iConfig.getParameter<int>("analyzeMode")) {
172  usesResource("TFileService");
173 
174  if (m_opMode == MODE_REMAP) {
175  m_stripRemapFile = iConfig.getParameter<std::string>("stripRemapFile");
177  runString = iConfig.getParameter<std::string>("runString");
178 
179  m_pixelRemapFile = std::string("DQM_V0001_PixelPhase1_R000305516.root");
180 
181  m_stripBaseDir = std::string("DQMData/Run " + runString + "/SiStrip/Run summary/MechanicalView/");
182  m_pixelBaseDir = std::string("DQMData/Run " + runString + "/PixelPhase1/Run summary/Phase1_MechanicalView/");
183 
184  m_pixelDesiredHistogramBarrel = std::string("adc_per_SignedModule_per_SignedLadder");
185  m_pixelDesiredHistogramDisk = std::string("adc_per_PXDisk_per_SignedBladePanel");
186 
189  } else if (m_opMode == MODE_ANALYZE) {
190  m_analyzeModeNameMap[RECHITS] = "# Rechits";
191  m_analyzeModeNameMap[DIGIS] = "# Digis";
192  m_analyzeModeNameMap[CLUSTERS] = "# Clusters";
193 
194  switch (m_analyzeMode) {
195  case RECHITS:
196  rechitSrcToken = consumes<reco::TrackCollection>(iConfig.getParameter<edm::InputTag>("src"));
197  break;
198  case DIGIS:
199  digiSrcToken = consumes<edmNew::DetSetVector<SiStripDigi>>(iConfig.getParameter<edm::InputTag>("src"));
200  break;
201  case CLUSTERS:
202  clusterSrcToken = consumes<edmNew::DetSetVector<SiStripCluster>>(iConfig.getParameter<edm::InputTag>("src"));
203  break;
204  default:
205  edm::LogError("LogicError") << "Unrecognized analyze mode!" << std::endl;
206  }
207  } else {
208  throw cms::Exception("TrackerRemapper") << "Unrecognized operations mode!" << std::endl;
209  }
210 
211  // TColor::SetPalette(1);
212 }
213 
214 //***************************************************************//
216 //***************************************************************//
217 {
218  m_stripHistnameMap[TkLayerMap::TkLayerEnum::TIB_L1] =
219  m_stripBaseDir + "TIB/layer_1/" + m_stripDesiredHistogram + "_TIB_L1;1";
220  m_stripHistnameMap[TkLayerMap::TkLayerEnum::TIB_L2] =
221  m_stripBaseDir + "TIB/layer_2/" + m_stripDesiredHistogram + "_TIB_L2;1";
222  m_stripHistnameMap[TkLayerMap::TkLayerEnum::TIB_L3] =
223  m_stripBaseDir + "TIB/layer_3/" + m_stripDesiredHistogram + "_TIB_L3;1";
224  m_stripHistnameMap[TkLayerMap::TkLayerEnum::TIB_L4] =
225  m_stripBaseDir + "TIB/layer_4/" + m_stripDesiredHistogram + "_TIB_L4;1";
226 
227  m_stripHistnameMap[TkLayerMap::TkLayerEnum::TIDM_D1] =
228  m_stripBaseDir + "TID/MINUS/wheel_1/" + m_stripDesiredHistogram + "_TIDM_D1;1";
229  m_stripHistnameMap[TkLayerMap::TkLayerEnum::TIDM_D2] =
230  m_stripBaseDir + "TID/MINUS/wheel_2/" + m_stripDesiredHistogram + "_TIDM_D2;1";
231  m_stripHistnameMap[TkLayerMap::TkLayerEnum::TIDM_D3] =
232  m_stripBaseDir + "TID/MINUS/wheel_3/" + m_stripDesiredHistogram + "_TIDM_D3;1";
233  m_stripHistnameMap[TkLayerMap::TkLayerEnum::TIDP_D1] =
234  m_stripBaseDir + "TID/PLUS/wheel_1/" + m_stripDesiredHistogram + "_TIDP_D1;1";
235  m_stripHistnameMap[TkLayerMap::TkLayerEnum::TIDP_D2] =
236  m_stripBaseDir + "TID/PLUS/wheel_2/" + m_stripDesiredHistogram + "_TIDP_D2;1";
237  m_stripHistnameMap[TkLayerMap::TkLayerEnum::TIDP_D3] =
238  m_stripBaseDir + "TID/PLUS/wheel_3/" + m_stripDesiredHistogram + "_TIDP_D3;1";
239 
240  m_stripHistnameMap[TkLayerMap::TkLayerEnum::TOB_L1] =
241  m_stripBaseDir + "TOB/layer_1/" + m_stripDesiredHistogram + "_TOB_L1;1";
242  m_stripHistnameMap[TkLayerMap::TkLayerEnum::TOB_L2] =
243  m_stripBaseDir + "TOB/layer_2/" + m_stripDesiredHistogram + "_TOB_L2;1";
244  m_stripHistnameMap[TkLayerMap::TkLayerEnum::TOB_L3] =
245  m_stripBaseDir + "TOB/layer_3/" + m_stripDesiredHistogram + "_TOB_L3;1";
246  m_stripHistnameMap[TkLayerMap::TkLayerEnum::TOB_L4] =
247  m_stripBaseDir + "TOB/layer_4/" + m_stripDesiredHistogram + "_TOB_L4;1";
248  m_stripHistnameMap[TkLayerMap::TkLayerEnum::TOB_L5] =
249  m_stripBaseDir + "TOB/layer_5/" + m_stripDesiredHistogram + "_TOB_L5;1";
250  m_stripHistnameMap[TkLayerMap::TkLayerEnum::TOB_L6] =
251  m_stripBaseDir + "TOB/layer_6/" + m_stripDesiredHistogram + "_TOB_L6;1";
252 
253  m_stripHistnameMap[TkLayerMap::TkLayerEnum::TECM_W1] =
254  m_stripBaseDir + "TEC/MINUS/wheel_1/" + m_stripDesiredHistogram + "_TECM_W1;1";
255  m_stripHistnameMap[TkLayerMap::TkLayerEnum::TECM_W2] =
256  m_stripBaseDir + "TEC/MINUS/wheel_2/" + m_stripDesiredHistogram + "_TECM_W2;1";
257  m_stripHistnameMap[TkLayerMap::TkLayerEnum::TECM_W3] =
258  m_stripBaseDir + "TEC/MINUS/wheel_3/" + m_stripDesiredHistogram + "_TECM_W3;1";
259  m_stripHistnameMap[TkLayerMap::TkLayerEnum::TECM_W4] =
260  m_stripBaseDir + "TEC/MINUS/wheel_4/" + m_stripDesiredHistogram + "_TECM_W4;1";
261  m_stripHistnameMap[TkLayerMap::TkLayerEnum::TECM_W5] =
262  m_stripBaseDir + "TEC/MINUS/wheel_5/" + m_stripDesiredHistogram + "_TECM_W5;1";
263  m_stripHistnameMap[TkLayerMap::TkLayerEnum::TECM_W6] =
264  m_stripBaseDir + "TEC/MINUS/wheel_6/" + m_stripDesiredHistogram + "_TECM_W6;1";
265  m_stripHistnameMap[TkLayerMap::TkLayerEnum::TECM_W7] =
266  m_stripBaseDir + "TEC/MINUS/wheel_7/" + m_stripDesiredHistogram + "_TECM_W7;1";
267  m_stripHistnameMap[TkLayerMap::TkLayerEnum::TECM_W8] =
268  m_stripBaseDir + "TEC/MINUS/wheel_8/" + m_stripDesiredHistogram + "_TECM_W8;1";
269  m_stripHistnameMap[TkLayerMap::TkLayerEnum::TECM_W9] =
270  m_stripBaseDir + "TEC/MINUS/wheel_9/" + m_stripDesiredHistogram + "_TECM_W9;1";
271 
272  m_stripHistnameMap[TkLayerMap::TkLayerEnum::TECP_W1] =
273  m_stripBaseDir + "TEC/PLUS/wheel_1/" + m_stripDesiredHistogram + "_TECP_W1;1";
274  m_stripHistnameMap[TkLayerMap::TkLayerEnum::TECP_W2] =
275  m_stripBaseDir + "TEC/PLUS/wheel_2/" + m_stripDesiredHistogram + "_TECP_W2;1";
276  m_stripHistnameMap[TkLayerMap::TkLayerEnum::TECP_W3] =
277  m_stripBaseDir + "TEC/PLUS/wheel_3/" + m_stripDesiredHistogram + "_TECP_W3;1";
278  m_stripHistnameMap[TkLayerMap::TkLayerEnum::TECP_W4] =
279  m_stripBaseDir + "TEC/PLUS/wheel_4/" + m_stripDesiredHistogram + "_TECP_W4;1";
280  m_stripHistnameMap[TkLayerMap::TkLayerEnum::TECP_W5] =
281  m_stripBaseDir + "TEC/PLUS/wheel_5/" + m_stripDesiredHistogram + "_TECP_W5;1";
282  m_stripHistnameMap[TkLayerMap::TkLayerEnum::TECP_W6] =
283  m_stripBaseDir + "TEC/PLUS/wheel_6/" + m_stripDesiredHistogram + "_TECP_W6;1";
284  m_stripHistnameMap[TkLayerMap::TkLayerEnum::TECP_W7] =
285  m_stripBaseDir + "TEC/PLUS/wheel_7/" + m_stripDesiredHistogram + "_TECP_W7;1";
286  m_stripHistnameMap[TkLayerMap::TkLayerEnum::TECP_W8] =
287  m_stripBaseDir + "TEC/PLUS/wheel_8/" + m_stripDesiredHistogram + "_TECP_W8;1";
288  m_stripHistnameMap[TkLayerMap::TkLayerEnum::TECP_W9] =
289  m_stripBaseDir + "TEC/PLUS/wheel_9/" + m_stripDesiredHistogram + "_TECP_W9;1";
290 }
291 
292 //***************************************************************//
294 //***************************************************************//
295 {
296  m_pixelHistnameMap[PixelLayerEnum::PXB_L1] =
297  m_pixelBaseDir + "PXBarrel/" + m_pixelDesiredHistogramBarrel + "_PXLayer_1;1";
298  m_pixelHistnameMap[PixelLayerEnum::PXB_L2] =
299  m_pixelBaseDir + "PXBarrel/" + m_pixelDesiredHistogramBarrel + "_PXLayer_2;1";
300  m_pixelHistnameMap[PixelLayerEnum::PXB_L3] =
301  m_pixelBaseDir + "PXBarrel/" + m_pixelDesiredHistogramBarrel + "_PXLayer_3;1";
302  m_pixelHistnameMap[PixelLayerEnum::PXB_L4] =
303  m_pixelBaseDir + "PXBarrel/" + m_pixelDesiredHistogramBarrel + "_PXLayer_4;1";
304 
305  m_pixelHistnameMap[PixelLayerEnum::PXF_R1] =
306  m_pixelBaseDir + "PXForward/" + m_pixelDesiredHistogramDisk + "_PXRing_1;1";
307  m_pixelHistnameMap[PixelLayerEnum::PXF_R2] =
308  m_pixelBaseDir + "PXForward/" + m_pixelDesiredHistogramDisk + "_PXRing_2;1";
309 }
310 
312 
313 //***************************************************************//
315 //***************************************************************//
316 {
317  // get the ES products
318 
319  const TrackerGeometry* theTrackerGeometry = &iSetup.getData(geomToken_);
320  const TrackerTopology* tt = &iSetup.getData(topoToken_);
321  m_tkdetmap = &iSetup.getData(tkDetMapToken_);
322 
323  if (!trackerMap)
324  bookBins();
325 
326  if (m_opMode == MODE_ANALYZE) {
327  switch (m_analyzeMode) {
328  case AnalyzeData::RECHITS:
330  break;
331  case AnalyzeData::DIGIS:
333  break;
334  case AnalyzeData::CLUSTERS:
336  break;
337  default:
338  edm::LogError("LogicError") << "Unrecognized Analyze mode!" << std::endl;
339  return;
340  }
341  } else if (m_opMode == MODE_REMAP) {
342  fillStripRemap();
343  fillPixelRemap(theTrackerGeometry, tt);
344  }
345 }
346 
347 //***************************************************************//
349 //***************************************************************//
350 {
352  iEvent.getByToken(src, tracks);
353  if (!tracks.isValid()) {
354  LogInfo("Analyzer") << "reco::TrackCollection not found... Aborting...\n";
355  return;
356  }
357 
358  for (auto const& track : *tracks) {
359  auto recHitsBegin = track.recHitsBegin();
360  for (unsigned i = 0; i < track.recHitsSize(); ++i) {
361  auto recHit = *(recHitsBegin + i);
362  if (!recHit->isValid())
363  continue;
364 
365  DetId id = recHit->geographicalId();
366  unsigned subdetId = id.subdetId();
367 
368  //reject Pixel
369  if (subdetId == PixelSubdetector::PixelBarrel || subdetId == PixelSubdetector::PixelEndcap)
370  continue;
371 
372  // NRECHITS
373  trackerMap->Fill(TString::Format("%ld", (long)id.rawId()), 1);
374  }
375  }
376 }
377 
378 //***************************************************************//
380 //***************************************************************//
381 {
382  // Read vertices from file
383  double minx = 0xFFFFFF, maxx = -0xFFFFFF, miny = 0xFFFFFF, maxy = -0xFFFFFFF;
384  readVertices(minx, maxx, miny, maxy);
385 
386  TObject* ghostObj = fs->make<TH2Poly>("ghost", "ghost", -1, 1, -1, 1);
387 
388  TDirectory* topDir = fs->getBareDirectory();
389  topDir->cd();
390 
391  int margin = 50;
392  std::string mapTitle;
393  switch (m_opMode) {
394  case MODE_ANALYZE:
396  break;
397  case MODE_REMAP:
398  mapTitle = std::string(m_stripDesiredHistogram + " - " + runString);
399  break;
400  }
401 
402  trackerMap = new TH2Poly("Tracker Map", mapTitle.c_str(), minx - margin, maxx + margin, miny - margin, maxy + margin);
403  trackerMap->SetFloat();
404  trackerMap->SetOption("COLZ");
405  trackerMap->SetStats(false);
406 
407  for (auto pair : m_bins) {
408  trackerMap->AddBin(pair.second->Clone());
409  }
410 
411  topDir->Add(trackerMap);
412 
413  ghostObj->Delete(); //not needed any more
414 }
415 
416 //***************************************************************//
417 void TrackerRemapper::readVertices(double& minx, double& maxx, double& miny, double& maxy)
418 //***************************************************************//
419 {
420  std::ifstream in;
421 
422  // TPolyline vertices stored at https://github.com/cms-data/DQM-SiStripMonitorClient
423  in.open(edm::FileInPath("DQM/SiStripMonitorClient/data/Geometry/tracker_map_bare").fullPath().c_str());
424 
425  if (!in.good()) {
426  throw cms::Exception("TrackerRemapper") << "Error Reading File" << std::endl;
427  }
428  while (in.good()) {
429  long detid = 0;
430  double x[5], y[5];
431 
433  std::getline(in, line);
434 
435  TString string(line);
436  TObjArray* array = string.Tokenize(" ");
437  int ix{0}, iy{0};
438  bool isPixel{false};
439  for (int i = 0; i < array->GetEntries(); ++i) {
440  if (i == 0) {
441  detid = static_cast<TObjString*>(array->At(i))->String().Atoll();
442 
443  // Drop Pixel Data
444  DetId detId(detid);
445  if (detId.subdetId() == PixelSubdetector::PixelBarrel || detId.subdetId() == PixelSubdetector::PixelEndcap) {
446  isPixel = true;
447  break;
448  }
449  } else {
450  if (i % 2 == 0) {
451  x[ix] = static_cast<TObjString*>(array->At(i))->String().Atof();
452 
453  if (x[ix] < minx)
454  minx = x[ix];
455  if (x[ix] > maxx)
456  maxx = x[ix];
457 
458  ++ix;
459  } else {
460  y[iy] = static_cast<TObjString*>(array->At(i))->String().Atof();
461 
462  if (y[iy] < miny)
463  miny = y[iy];
464  if (y[iy] > maxy)
465  maxy = y[iy];
466 
467  ++iy;
468  }
469  }
470  }
471 
472  if (isPixel)
473  continue;
474 
475  m_detIdVector.push_back(detid);
476  m_bins[detid] = new TGraph(ix, x, y);
477  m_bins[detid]->SetName(TString::Format("%ld", detid));
478  m_bins[detid]->SetTitle(TString::Format("Module ID=%ld", detid));
479  }
480 }
481 
482 //***************************************************************//
484 //***************************************************************//
485 {
486  int nchX;
487  int nchY;
488  double lowX, highX;
489  double lowY, highY;
490 
491  TFile* rootFileHandle = new TFile(m_stripRemapFile.c_str());
492 
493  for (int layer = TkLayerMap::TkLayerEnum::TIB_L1; layer <= TkLayerMap::TkLayerEnum::TECP_W9; ++layer) {
494  m_tkdetmap->getComponents(layer, nchX, lowX, highX, nchY, lowY, highY);
495 
496  const TProfile2D* histHandle = (TProfile2D*)rootFileHandle->Get(m_stripHistnameMap[layer].c_str());
497 
498  if (!histHandle) {
499  edm::LogError("TrackerRemapper") << "Could not find histogram:\n\t" << m_stripHistnameMap[layer] << std::endl;
500  return;
501  }
502 
503  for (unsigned binx = 1; binx <= (unsigned)nchX; ++binx) {
504  for (unsigned biny = 1; biny <= (unsigned)nchY; ++biny) {
505  long rawid = m_tkdetmap->getDetFromBin(layer, binx, biny);
506 
507  if (rawid) //bin represents real module -> go to file
508  {
509  double val = histHandle->GetBinContent(binx, biny);
510 
511  // edm::LogInfo("TrackerRemapper") << rawid << " " << val << "\n";
512 
513  trackerMap->Fill(TString::Format("%ld", rawid), val);
514  }
515  }
516  }
517  }
518 
519  rootFileHandle->Close();
520 }
521 
522 //***************************************************************//
523 void TrackerRemapper::fillPixelRemap(const TrackerGeometry* theTrackerGeometry, const TrackerTopology* tt)
524 //***************************************************************//
525 {
526  TFile* rootFileHandle = new TFile(m_pixelRemapFile.c_str());
527 
528  if (!rootFileHandle) {
529  edm::LogError("TrackerRemapper") << "Could not find file:\n\t" << m_pixelRemapFile << std::endl;
530  return;
531  }
532  fillBarrelRemap(rootFileHandle, theTrackerGeometry, tt);
533  fillEndcapRemap(rootFileHandle, theTrackerGeometry, tt);
534 
535  rootFileHandle->Close();
536 }
537 
538 //***************************************************************//
539 void TrackerRemapper::fillBarrelRemap(TFile* rootFileHandle,
540  const TrackerGeometry* theTrackerGeometry,
541  const TrackerTopology* tt)
542 //***************************************************************//
543 {
544  TrackingGeometry::DetContainer pxb = theTrackerGeometry->detsPXB();
545 
546  for (auto& i : pxb) {
547  const GeomDet* det = i;
548 
549  PXBDetId id = det->geographicalId();
550  long rawid = id.rawId();
551 
552  int module = tt->pxbModule(id);
553  int layer = tt->pxbLayer(id);
554 
555  int signedOnlineModule = module - 4;
556  if (signedOnlineModule <= 0)
557  --signedOnlineModule;
558 
559  PixelBarrelName pixelBarrelName = PixelBarrelName(id, tt, true);
560  int onlineShell = pixelBarrelName.shell();
561 
562  int signedOnlineLadder = ((onlineShell & 1) ? -pixelBarrelName.ladderName() : pixelBarrelName.ladderName());
563 
564  const TProfile2D* histHandle = (TProfile2D*)rootFileHandle->Get(m_pixelHistnameMap[layer].c_str());
565 
566  unsigned nx = histHandle->GetNbinsX();
567  unsigned ny = histHandle->GetNbinsY();
568 
569  unsigned binX = signedOnlineModule + ((nx + 1) >> 1);
570  unsigned binY = (signedOnlineLadder) + ((ny + 1) >> 1);
571 
572  double val = histHandle->GetBinContent(binX, binY);
573 
574  trackerMap->Fill(TString::Format("%ld", rawid), val);
575  }
576 }
577 
578 //***************************************************************//
579 void TrackerRemapper::fillEndcapRemap(TFile* rootFileHandle,
580  const TrackerGeometry* theTrackerGeometry,
581  const TrackerTopology* tt)
582 //***************************************************************//
583 {
584  TrackingGeometry::DetContainer pxf = theTrackerGeometry->detsPXF();
585 
586  for (auto& i : pxf) {
587  const GeomDet* det = i;
588 
589  PXFDetId id = det->geographicalId();
590 
591  int side = tt->side(id);
592  int disk = tt->layer(id);
593 
594  long rawid = id.rawId();
595 
596  PixelEndcapName pixelEndcapName = PixelEndcapName(PXFDetId(rawid), tt, true);
597 
598  unsigned layer = pixelEndcapName.ringName() - 1 + PixelLayerEnum::PXF_R1;
599  const TProfile2D* histHandle = (TProfile2D*)rootFileHandle->Get(m_pixelHistnameMap[layer].c_str());
600 
601  // ---- REMAP (Online -> Offline)
602  unsigned nx = histHandle->GetNbinsX();
603  unsigned ny = histHandle->GetNbinsY();
604 
605  int onlineBlade = pixelEndcapName.bladeName();
606  bool isInnerOnlineBlade = !(pixelEndcapName.halfCylinder() & 1); // inner -> blade > 0 (?)
607 
608  int signedOnlineBlade = (isInnerOnlineBlade) ? onlineBlade : -onlineBlade;
609  int signedDisk = (side == 2) ? disk : -disk;
610  int pannel = pixelEndcapName.pannelName() - 1;
611 
612  unsigned binX = signedDisk + ((nx + 1) >> 1);
613  unsigned binY = (signedOnlineBlade * 2) + (ny >> 1);
614 
615  double val = histHandle->GetBinContent(binX, binY + pannel);
616 
617  trackerMap->Fill(TString::Format("%ld", rawid), val);
618  }
619 }
620 
622 
624 
625 //***************************************************************//
627 //***************************************************************//
628 {
630  desc.setComment(
631  "Creates TH2Poly Strip Tracker maps by either analyzing the event or remapping exising DQM historams");
632  desc.add<edm::InputTag>("src", edm::InputTag("generalTracks"));
633  desc.ifValue(edm::ParameterDescription<int>("opMode", 0, true),
635  1 >> (edm::ParameterDescription<std::string>("stripRemapFile", "", true) and
636  edm::ParameterDescription<std::string>("stripHistogram", "", true) and
637  edm::ParameterDescription<std::string>("runString", "", true)))
638  ->setComment("0 for Analyze, 1 for Remap");
639 
640  desc.ifValue(edm::ParameterDescription<int>("analyzeMode", 1, true), edm::allowedValues<int>(1, 2, 3))
641  ->setComment("1=Rechits, 2=Digis, 3=Clusters");
642 
643  //desc.add<unsigned int>("analyzeMode", 1)->setComment("1=Rechits, 2=Digis, 3=Clusters");
644  //desc.add<unsigned int>("opMode", 0)->setComment("0 for Analyze, 1 for Remap");
645  //desc.addOptional<std::string>("stripRemapFile","" )->setComment("file name to analyze, will come from the config file");
646  //desc.addOptional<std::string>("stripHistogram","TkHMap_NumberValidHits" )->setComment("histogram to use to remap");
647  //desc.addOptional<std::string>("runString", "")->setComment("run number, will come form config file");
648  descriptions.addWithDefaultLabel(desc);
649 }
650 
651 //define this as a plug-in
void addWithDefaultLabel(ParameterSetDescription const &psetDescription)
ESGetTokenH3DDVariant esConsumes(std::string const &Record, edm::ConsumesCollector &)
Definition: DeDxTools.cc:283
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
std::string m_stripBaseDir
T const & getData(const ESGetToken< T, R > &iToken) const noexcept(false)
Definition: EventSetup.h:119
int ringName() const
ring Id
edm::EDGetTokenT< reco::TrackCollection > rechitSrcToken
std::string m_stripRemapFile
const DetContainer & detsPXB() const
edm::EDGetTokenT< edmNew::DetSetVector< SiStripCluster > > clusterSrcToken
int bladeName() const
blade id
std::string m_pixelRemapFile
void analyzeGeneric(const edm::Event &iEvent, const edm::EDGetTokenT< T > &src)
std::map< unsigned, std::string > m_stripHistnameMap
const DetContainer & detsPXF() const
TrackerRemapper(const edm::ParameterSet &)
const edm::ESGetToken< TrackerTopology, TrackerTopologyRcd > topoToken_
Log< level::Error, false > LogError
const edm::ESGetToken< TrackerGeometry, TrackerDigiGeometryRecord > geomToken_
std::map< unsigned, std::string > m_pixelHistnameMap
example_stream void analyze(const edm::Event &, const edm::EventSetup &) override
void beginJob()
Definition: Breakpoints.cc:14
static std::string const input
Definition: EdmProvDump.cc:50
std::vector< const GeomDet * > DetContainer
void fillEndcapRemap(TFile *rootFileHandle, const TrackerGeometry *theTrackerGeometry, const TrackerTopology *tt)
int iEvent
Definition: GenABIO.cc:224
Definition: TTTypes.h:54
std::string m_pixelDesiredHistogramDisk
The Signals That Services Can Subscribe To This is based on ActivityRegistry and is current per Services can connect to the signals distributed by the ActivityRegistry in order to monitor the activity of the application Each possible callback has some defined which we here list in angle e< void, edm::EventID const &, edm::Timestamp const & > We also list in braces which AR_WATCH_USING_METHOD_ is used for those or
Definition: Activities.doc:12
HalfCylinder halfCylinder() const
Double_t margin
DetId getDetFromBin(int layer, int ix, int iy) const
Definition: TkDetMap.h:191
std::string m_stripDesiredHistogram
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
void fillPixelRemap(const TrackerGeometry *theTrackerGeometry, const TrackerTopology *tt)
~TrackerRemapper() override
TDirectory * getBareDirectory(const std::string &subdir="") const
Definition: TFileService.h:52
DetId geographicalId() const
The label of this GeomDet.
Definition: GeomDet.h:64
const TkDetMap * m_tkdetmap
edm::EDGetTokenT< edmNew::DetSetVector< SiStripDigi > > digiSrcToken
Shell shell() const
Log< level::Info, false > LogInfo
Definition: DetId.h:17
void endJob() override
const edm::ParameterSet & iConfig
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
const edm::ESGetToken< TkDetMap, TrackerTopologyRcd > tkDetMapToken_
void getComponents(int layer, int &nchX, double &lowX, double &highX, int &nchY, double &lowY, double &highY) const
Definition: TkDetMap.cc:594
void analyzeRechits(const edm::Event &iEvent, const edm::EDGetTokenT< reco::TrackCollection > &src)
constexpr uint32_t rawId() const
get the raw id
Definition: DetId.h:57
void fillBarrelRemap(TFile *rootFileHandle, const TrackerGeometry *theTrackerGeometry, const TrackerTopology *tt)
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
edm::Service< TFileService > fs
HLT enums.
void analyze(const edm::Event &, const edm::EventSetup &) override
bool isPixel(HitType hitType)
int ladderName() const
ladder id (index in phi)
T * make(const Args &...args) const
make new ROOT object
Definition: TFileService.h:64
void readVertices(double &minx, double &maxx, double &miny, double &maxy)
std::string runString
std::map< unsigned, std::string > m_analyzeModeNameMap
std::map< long, TGraph * > m_bins
void beginJob() override
std::string m_pixelDesiredHistogramBarrel
int pannelName() const
pannel id
std::string m_pixelBaseDir
std::vector< unsigned > m_detIdVector