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 
107 
108  int m_opMode;
110 
111  std::map<long, TGraph*> m_bins;
112  std::vector<unsigned> m_detIdVector;
113 
115 
116  std::map<unsigned, std::string> m_stripHistnameMap;
117  std::map<unsigned, std::string> m_pixelHistnameMap;
118  std::map<unsigned, std::string> m_analyzeModeNameMap;
119 
122 
124  std::string m_pixelBaseDir, m_pixelDesiredHistogramBarrel, m_pixelDesiredHistogramDisk;
125 
127 
128  TH2Poly* trackerMap{nullptr};
129 
133 };
134 
135 template <class T>
136 //***************************************************************//
138 //***************************************************************//
139 {
141  iEvent.getByToken(src, input);
142 
143  if (!input.isValid()) {
144  edm::LogError("TrackerRemapper") << "<GENERIC> not found... Aborting...\n";
145  return;
146  }
147 
148  typename T::const_iterator it;
149  for (it = input->begin(); it != input->end(); ++it) {
150  auto id = DetId(it->detId());
151  trackerMap->Fill(TString::Format("%ld", (long)id.rawId()), it->size());
152  }
153 }
154 
155 template <>
156 //***************************************************************//
158 //***************************************************************//
159 {
160  analyzeRechits(iEvent, t);
161 }
162 
163 //***************************************************************//
165  : geomToken_(esConsumes()),
166  topoToken_(esConsumes()),
167  tkDetMapToken_(esConsumes()),
168  m_opMode(iConfig.getParameter<int>("opMode")),
169  m_analyzeMode(iConfig.getParameter<int>("analyzeMode")) {
170  usesResource("TFileService");
171 
172  if (m_opMode == MODE_REMAP) {
173  m_stripRemapFile = iConfig.getParameter<std::string>("stripRemapFile");
174  m_stripDesiredHistogram = iConfig.getParameter<std::string>("stripHistogram");
175  runString = iConfig.getParameter<std::string>("runString");
176 
177  m_pixelRemapFile = std::string("DQM_V0001_PixelPhase1_R000305516.root");
178 
179  m_stripBaseDir = std::string("DQMData/Run " + runString + "/SiStrip/Run summary/MechanicalView/");
180  m_pixelBaseDir = std::string("DQMData/Run " + runString + "/PixelPhase1/Run summary/Phase1_MechanicalView/");
181 
182  m_pixelDesiredHistogramBarrel = std::string("adc_per_SignedModule_per_SignedLadder");
183  m_pixelDesiredHistogramDisk = std::string("adc_per_PXDisk_per_SignedBladePanel");
184 
187  } else if (m_opMode == MODE_ANALYZE) {
188  m_analyzeModeNameMap[RECHITS] = "# Rechits";
189  m_analyzeModeNameMap[DIGIS] = "# Digis";
190  m_analyzeModeNameMap[CLUSTERS] = "# Clusters";
191 
192  switch (m_analyzeMode) {
193  case RECHITS:
194  rechitSrcToken = consumes<reco::TrackCollection>(iConfig.getParameter<edm::InputTag>("src"));
195  break;
196  case DIGIS:
197  digiSrcToken = consumes<edmNew::DetSetVector<SiStripDigi>>(iConfig.getParameter<edm::InputTag>("src"));
198  break;
199  case CLUSTERS:
200  clusterSrcToken = consumes<edmNew::DetSetVector<SiStripCluster>>(iConfig.getParameter<edm::InputTag>("src"));
201  break;
202  default:
203  edm::LogError("LogicError") << "Unrecognized analyze mode!" << std::endl;
204  }
205  } else {
206  throw cms::Exception("TrackerRemapper") << "Unrecognized operations mode!" << std::endl;
207  }
208 
209  // TColor::SetPalette(1);
210 }
211 
212 //***************************************************************//
214 //***************************************************************//
215 {
216  m_stripHistnameMap[TkLayerMap::TkLayerEnum::TIB_L1] =
217  m_stripBaseDir + "TIB/layer_1/" + m_stripDesiredHistogram + "_TIB_L1;1";
218  m_stripHistnameMap[TkLayerMap::TkLayerEnum::TIB_L2] =
219  m_stripBaseDir + "TIB/layer_2/" + m_stripDesiredHistogram + "_TIB_L2;1";
220  m_stripHistnameMap[TkLayerMap::TkLayerEnum::TIB_L3] =
221  m_stripBaseDir + "TIB/layer_3/" + m_stripDesiredHistogram + "_TIB_L3;1";
222  m_stripHistnameMap[TkLayerMap::TkLayerEnum::TIB_L4] =
223  m_stripBaseDir + "TIB/layer_4/" + m_stripDesiredHistogram + "_TIB_L4;1";
224 
225  m_stripHistnameMap[TkLayerMap::TkLayerEnum::TIDM_D1] =
226  m_stripBaseDir + "TID/MINUS/wheel_1/" + m_stripDesiredHistogram + "_TIDM_D1;1";
227  m_stripHistnameMap[TkLayerMap::TkLayerEnum::TIDM_D2] =
228  m_stripBaseDir + "TID/MINUS/wheel_2/" + m_stripDesiredHistogram + "_TIDM_D2;1";
229  m_stripHistnameMap[TkLayerMap::TkLayerEnum::TIDM_D3] =
230  m_stripBaseDir + "TID/MINUS/wheel_3/" + m_stripDesiredHistogram + "_TIDM_D3;1";
231  m_stripHistnameMap[TkLayerMap::TkLayerEnum::TIDP_D1] =
232  m_stripBaseDir + "TID/PLUS/wheel_1/" + m_stripDesiredHistogram + "_TIDP_D1;1";
233  m_stripHistnameMap[TkLayerMap::TkLayerEnum::TIDP_D2] =
234  m_stripBaseDir + "TID/PLUS/wheel_2/" + m_stripDesiredHistogram + "_TIDP_D2;1";
235  m_stripHistnameMap[TkLayerMap::TkLayerEnum::TIDP_D3] =
236  m_stripBaseDir + "TID/PLUS/wheel_3/" + m_stripDesiredHistogram + "_TIDP_D3;1";
237 
238  m_stripHistnameMap[TkLayerMap::TkLayerEnum::TOB_L1] =
239  m_stripBaseDir + "TOB/layer_1/" + m_stripDesiredHistogram + "_TOB_L1;1";
240  m_stripHistnameMap[TkLayerMap::TkLayerEnum::TOB_L2] =
241  m_stripBaseDir + "TOB/layer_2/" + m_stripDesiredHistogram + "_TOB_L2;1";
242  m_stripHistnameMap[TkLayerMap::TkLayerEnum::TOB_L3] =
243  m_stripBaseDir + "TOB/layer_3/" + m_stripDesiredHistogram + "_TOB_L3;1";
244  m_stripHistnameMap[TkLayerMap::TkLayerEnum::TOB_L4] =
245  m_stripBaseDir + "TOB/layer_4/" + m_stripDesiredHistogram + "_TOB_L4;1";
246  m_stripHistnameMap[TkLayerMap::TkLayerEnum::TOB_L5] =
247  m_stripBaseDir + "TOB/layer_5/" + m_stripDesiredHistogram + "_TOB_L5;1";
248  m_stripHistnameMap[TkLayerMap::TkLayerEnum::TOB_L6] =
249  m_stripBaseDir + "TOB/layer_6/" + m_stripDesiredHistogram + "_TOB_L6;1";
250 
251  m_stripHistnameMap[TkLayerMap::TkLayerEnum::TECM_W1] =
252  m_stripBaseDir + "TEC/MINUS/wheel_1/" + m_stripDesiredHistogram + "_TECM_W1;1";
253  m_stripHistnameMap[TkLayerMap::TkLayerEnum::TECM_W2] =
254  m_stripBaseDir + "TEC/MINUS/wheel_2/" + m_stripDesiredHistogram + "_TECM_W2;1";
255  m_stripHistnameMap[TkLayerMap::TkLayerEnum::TECM_W3] =
256  m_stripBaseDir + "TEC/MINUS/wheel_3/" + m_stripDesiredHistogram + "_TECM_W3;1";
257  m_stripHistnameMap[TkLayerMap::TkLayerEnum::TECM_W4] =
258  m_stripBaseDir + "TEC/MINUS/wheel_4/" + m_stripDesiredHistogram + "_TECM_W4;1";
259  m_stripHistnameMap[TkLayerMap::TkLayerEnum::TECM_W5] =
260  m_stripBaseDir + "TEC/MINUS/wheel_5/" + m_stripDesiredHistogram + "_TECM_W5;1";
261  m_stripHistnameMap[TkLayerMap::TkLayerEnum::TECM_W6] =
262  m_stripBaseDir + "TEC/MINUS/wheel_6/" + m_stripDesiredHistogram + "_TECM_W6;1";
263  m_stripHistnameMap[TkLayerMap::TkLayerEnum::TECM_W7] =
264  m_stripBaseDir + "TEC/MINUS/wheel_7/" + m_stripDesiredHistogram + "_TECM_W7;1";
265  m_stripHistnameMap[TkLayerMap::TkLayerEnum::TECM_W8] =
266  m_stripBaseDir + "TEC/MINUS/wheel_8/" + m_stripDesiredHistogram + "_TECM_W8;1";
267  m_stripHistnameMap[TkLayerMap::TkLayerEnum::TECM_W9] =
268  m_stripBaseDir + "TEC/MINUS/wheel_9/" + m_stripDesiredHistogram + "_TECM_W9;1";
269 
270  m_stripHistnameMap[TkLayerMap::TkLayerEnum::TECP_W1] =
271  m_stripBaseDir + "TEC/PLUS/wheel_1/" + m_stripDesiredHistogram + "_TECP_W1;1";
272  m_stripHistnameMap[TkLayerMap::TkLayerEnum::TECP_W2] =
273  m_stripBaseDir + "TEC/PLUS/wheel_2/" + m_stripDesiredHistogram + "_TECP_W2;1";
274  m_stripHistnameMap[TkLayerMap::TkLayerEnum::TECP_W3] =
275  m_stripBaseDir + "TEC/PLUS/wheel_3/" + m_stripDesiredHistogram + "_TECP_W3;1";
276  m_stripHistnameMap[TkLayerMap::TkLayerEnum::TECP_W4] =
277  m_stripBaseDir + "TEC/PLUS/wheel_4/" + m_stripDesiredHistogram + "_TECP_W4;1";
278  m_stripHistnameMap[TkLayerMap::TkLayerEnum::TECP_W5] =
279  m_stripBaseDir + "TEC/PLUS/wheel_5/" + m_stripDesiredHistogram + "_TECP_W5;1";
280  m_stripHistnameMap[TkLayerMap::TkLayerEnum::TECP_W6] =
281  m_stripBaseDir + "TEC/PLUS/wheel_6/" + m_stripDesiredHistogram + "_TECP_W6;1";
282  m_stripHistnameMap[TkLayerMap::TkLayerEnum::TECP_W7] =
283  m_stripBaseDir + "TEC/PLUS/wheel_7/" + m_stripDesiredHistogram + "_TECP_W7;1";
284  m_stripHistnameMap[TkLayerMap::TkLayerEnum::TECP_W8] =
285  m_stripBaseDir + "TEC/PLUS/wheel_8/" + m_stripDesiredHistogram + "_TECP_W8;1";
286  m_stripHistnameMap[TkLayerMap::TkLayerEnum::TECP_W9] =
287  m_stripBaseDir + "TEC/PLUS/wheel_9/" + m_stripDesiredHistogram + "_TECP_W9;1";
288 }
289 
290 //***************************************************************//
292 //***************************************************************//
293 {
294  m_pixelHistnameMap[PixelLayerEnum::PXB_L1] =
295  m_pixelBaseDir + "PXBarrel/" + m_pixelDesiredHistogramBarrel + "_PXLayer_1;1";
296  m_pixelHistnameMap[PixelLayerEnum::PXB_L2] =
297  m_pixelBaseDir + "PXBarrel/" + m_pixelDesiredHistogramBarrel + "_PXLayer_2;1";
298  m_pixelHistnameMap[PixelLayerEnum::PXB_L3] =
299  m_pixelBaseDir + "PXBarrel/" + m_pixelDesiredHistogramBarrel + "_PXLayer_3;1";
300  m_pixelHistnameMap[PixelLayerEnum::PXB_L4] =
301  m_pixelBaseDir + "PXBarrel/" + m_pixelDesiredHistogramBarrel + "_PXLayer_4;1";
302 
303  m_pixelHistnameMap[PixelLayerEnum::PXF_R1] =
304  m_pixelBaseDir + "PXForward/" + m_pixelDesiredHistogramDisk + "_PXRing_1;1";
305  m_pixelHistnameMap[PixelLayerEnum::PXF_R2] =
306  m_pixelBaseDir + "PXForward/" + m_pixelDesiredHistogramDisk + "_PXRing_2;1";
307 }
308 
310 
311 //***************************************************************//
313 //***************************************************************//
314 {
315  // get the ES products
316 
317  const TrackerGeometry* theTrackerGeometry = &iSetup.getData(geomToken_);
318  const TrackerTopology* tt = &iSetup.getData(topoToken_);
319  m_tkdetmap = &iSetup.getData(tkDetMapToken_);
320 
321  if (!trackerMap)
322  bookBins();
323 
324  if (m_opMode == MODE_ANALYZE) {
325  switch (m_analyzeMode) {
326  case AnalyzeData::RECHITS:
328  break;
329  case AnalyzeData::DIGIS:
331  break;
332  case AnalyzeData::CLUSTERS:
334  break;
335  default:
336  edm::LogError("LogicError") << "Unrecognized Analyze mode!" << std::endl;
337  return;
338  }
339  } else if (m_opMode == MODE_REMAP) {
340  fillStripRemap();
341  fillPixelRemap(theTrackerGeometry, tt);
342  }
343 }
344 
345 //***************************************************************//
347 //***************************************************************//
348 {
350  iEvent.getByToken(src, tracks);
351  if (!tracks.isValid()) {
352  LogInfo("Analyzer") << "reco::TrackCollection not found... Aborting...\n";
353  return;
354  }
355 
356  for (auto const& track : *tracks) {
357  auto recHitsBegin = track.recHitsBegin();
358  for (unsigned i = 0; i < track.recHitsSize(); ++i) {
359  auto recHit = *(recHitsBegin + i);
360  if (!recHit->isValid())
361  continue;
362 
363  DetId id = recHit->geographicalId();
364  unsigned subdetId = id.subdetId();
365 
366  //reject Pixel
367  if (subdetId == PixelSubdetector::PixelBarrel || subdetId == PixelSubdetector::PixelEndcap)
368  continue;
369 
370  // NRECHITS
371  trackerMap->Fill(TString::Format("%ld", (long)id.rawId()), 1);
372  }
373  }
374 }
375 
376 //***************************************************************//
378 //***************************************************************//
379 {
380  // Read vertices from file
381  double minx = 0xFFFFFF, maxx = -0xFFFFFF, miny = 0xFFFFFF, maxy = -0xFFFFFFF;
382  readVertices(minx, maxx, miny, maxy);
383 
384  TObject* ghostObj = fs->make<TH2Poly>("ghost", "ghost", -1, 1, -1, 1);
385 
386  TDirectory* topDir = fs->getBareDirectory();
387  topDir->cd();
388 
389  int margin = 50;
390  std::string mapTitle;
391  switch (m_opMode) {
392  case MODE_ANALYZE:
394  break;
395  case MODE_REMAP:
396  mapTitle = std::string(m_stripDesiredHistogram + " - " + runString);
397  break;
398  }
399 
400  trackerMap = new TH2Poly("Tracker Map", mapTitle.c_str(), minx - margin, maxx + margin, miny - margin, maxy + margin);
401  trackerMap->SetFloat();
402  trackerMap->SetOption("COLZ");
403  trackerMap->SetStats(false);
404 
405  for (auto pair : m_bins) {
406  trackerMap->AddBin(pair.second->Clone());
407  }
408 
409  topDir->Add(trackerMap);
410 
411  ghostObj->Delete(); //not needed any more
412 }
413 
414 //***************************************************************//
415 void TrackerRemapper::readVertices(double& minx, double& maxx, double& miny, double& maxy)
416 //***************************************************************//
417 {
418  std::ifstream in;
419 
420  // TPolyline vertices stored at https://github.com/cms-data/DQM-SiStripMonitorClient
421  in.open(edm::FileInPath("DQM/SiStripMonitorClient/data/Geometry/tracker_map_bare").fullPath().c_str());
422 
423  if (!in.good()) {
424  throw cms::Exception("TrackerRemapper") << "Error Reading File" << std::endl;
425  }
426  while (in.good()) {
427  long detid = 0;
428  double x[5], y[5];
429 
431  std::getline(in, line);
432 
433  TString string(line);
434  TObjArray* array = string.Tokenize(" ");
435  int ix{0}, iy{0};
436  bool isPixel{false};
437  for (int i = 0; i < array->GetEntries(); ++i) {
438  if (i == 0) {
439  detid = static_cast<TObjString*>(array->At(i))->String().Atoll();
440 
441  // Drop Pixel Data
442  DetId detId(detid);
443  if (detId.subdetId() == PixelSubdetector::PixelBarrel || detId.subdetId() == PixelSubdetector::PixelEndcap) {
444  isPixel = true;
445  break;
446  }
447  } else {
448  if (i % 2 == 0) {
449  x[ix] = static_cast<TObjString*>(array->At(i))->String().Atof();
450 
451  if (x[ix] < minx)
452  minx = x[ix];
453  if (x[ix] > maxx)
454  maxx = x[ix];
455 
456  ++ix;
457  } else {
458  y[iy] = static_cast<TObjString*>(array->At(i))->String().Atof();
459 
460  if (y[iy] < miny)
461  miny = y[iy];
462  if (y[iy] > maxy)
463  maxy = y[iy];
464 
465  ++iy;
466  }
467  }
468  }
469 
470  if (isPixel)
471  continue;
472 
473  m_detIdVector.push_back(detid);
474  m_bins[detid] = new TGraph(ix, x, y);
475  m_bins[detid]->SetName(TString::Format("%ld", detid));
476  m_bins[detid]->SetTitle(TString::Format("Module ID=%ld", detid));
477  }
478 }
479 
480 //***************************************************************//
482 //***************************************************************//
483 {
484  int nchX;
485  int nchY;
486  double lowX, highX;
487  double lowY, highY;
488 
489  TFile* rootFileHandle = new TFile(m_stripRemapFile.c_str());
490 
491  for (int layer = TkLayerMap::TkLayerEnum::TIB_L1; layer <= TkLayerMap::TkLayerEnum::TECP_W9; ++layer) {
492  m_tkdetmap->getComponents(layer, nchX, lowX, highX, nchY, lowY, highY);
493 
494  const TProfile2D* histHandle = (TProfile2D*)rootFileHandle->Get(m_stripHistnameMap[layer].c_str());
495 
496  if (!histHandle) {
497  edm::LogError("TrackerRemapper") << "Could not find histogram:\n\t" << m_stripHistnameMap[layer] << std::endl;
498  return;
499  }
500 
501  for (unsigned binx = 1; binx <= (unsigned)nchX; ++binx) {
502  for (unsigned biny = 1; biny <= (unsigned)nchY; ++biny) {
503  long rawid = m_tkdetmap->getDetFromBin(layer, binx, biny);
504 
505  if (rawid) //bin represents real module -> go to file
506  {
507  double val = histHandle->GetBinContent(binx, biny);
508 
509  // edm::LogInfo("TrackerRemapper") << rawid << " " << val << "\n";
510 
511  trackerMap->Fill(TString::Format("%ld", rawid), val);
512  }
513  }
514  }
515  }
516 
517  rootFileHandle->Close();
518 }
519 
520 //***************************************************************//
521 void TrackerRemapper::fillPixelRemap(const TrackerGeometry* theTrackerGeometry, const TrackerTopology* tt)
522 //***************************************************************//
523 {
524  TFile* rootFileHandle = new TFile(m_pixelRemapFile.c_str());
525 
526  if (!rootFileHandle) {
527  edm::LogError("TrackerRemapper") << "Could not find file:\n\t" << m_pixelRemapFile << std::endl;
528  return;
529  }
530  fillBarrelRemap(rootFileHandle, theTrackerGeometry, tt);
531  fillEndcapRemap(rootFileHandle, theTrackerGeometry, tt);
532 
533  rootFileHandle->Close();
534 }
535 
536 //***************************************************************//
537 void TrackerRemapper::fillBarrelRemap(TFile* rootFileHandle,
538  const TrackerGeometry* theTrackerGeometry,
539  const TrackerTopology* tt)
540 //***************************************************************//
541 {
542  TrackingGeometry::DetContainer pxb = theTrackerGeometry->detsPXB();
543 
544  for (auto& i : pxb) {
545  const GeomDet* det = i;
546 
547  PXBDetId id = det->geographicalId();
548  long rawid = id.rawId();
549 
550  int module = tt->pxbModule(id);
551  int layer = tt->pxbLayer(id);
552 
553  int signedOnlineModule = module - 4;
554  if (signedOnlineModule <= 0)
555  --signedOnlineModule;
556 
557  PixelBarrelName pixelBarrelName = PixelBarrelName(id, tt, true);
558  int onlineShell = pixelBarrelName.shell();
559 
560  int signedOnlineLadder = ((onlineShell & 1) ? -pixelBarrelName.ladderName() : pixelBarrelName.ladderName());
561 
562  const TProfile2D* histHandle = (TProfile2D*)rootFileHandle->Get(m_pixelHistnameMap[layer].c_str());
563 
564  unsigned nx = histHandle->GetNbinsX();
565  unsigned ny = histHandle->GetNbinsY();
566 
567  unsigned binX = signedOnlineModule + ((nx + 1) >> 1);
568  unsigned binY = (signedOnlineLadder) + ((ny + 1) >> 1);
569 
570  double val = histHandle->GetBinContent(binX, binY);
571 
572  trackerMap->Fill(TString::Format("%ld", rawid), val);
573  }
574 }
575 
576 //***************************************************************//
577 void TrackerRemapper::fillEndcapRemap(TFile* rootFileHandle,
578  const TrackerGeometry* theTrackerGeometry,
579  const TrackerTopology* tt)
580 //***************************************************************//
581 {
582  TrackingGeometry::DetContainer pxf = theTrackerGeometry->detsPXF();
583 
584  for (auto& i : pxf) {
585  const GeomDet* det = i;
586 
587  PXFDetId id = det->geographicalId();
588 
589  int side = tt->side(id);
590  int disk = tt->layer(id);
591 
592  long rawid = id.rawId();
593 
594  PixelEndcapName pixelEndcapName = PixelEndcapName(PXFDetId(rawid), tt, true);
595 
596  unsigned layer = pixelEndcapName.ringName() - 1 + PixelLayerEnum::PXF_R1;
597  const TProfile2D* histHandle = (TProfile2D*)rootFileHandle->Get(m_pixelHistnameMap[layer].c_str());
598 
599  // ---- REMAP (Online -> Offline)
600  unsigned nx = histHandle->GetNbinsX();
601  unsigned ny = histHandle->GetNbinsY();
602 
603  int onlineBlade = pixelEndcapName.bladeName();
604  bool isInnerOnlineBlade = !(pixelEndcapName.halfCylinder() & 1); // inner -> blade > 0 (?)
605 
606  int signedOnlineBlade = (isInnerOnlineBlade) ? onlineBlade : -onlineBlade;
607  int signedDisk = (side == 2) ? disk : -disk;
608  int pannel = pixelEndcapName.pannelName() - 1;
609 
610  unsigned binX = signedDisk + ((nx + 1) >> 1);
611  unsigned binY = (signedOnlineBlade * 2) + (ny >> 1);
612 
613  double val = histHandle->GetBinContent(binX, binY + pannel);
614 
615  trackerMap->Fill(TString::Format("%ld", rawid), val);
616  }
617 }
618 
620 
622 
623 //***************************************************************//
625 //***************************************************************//
626 {
628  desc.setComment(
629  "Creates TH2Poly Strip Tracker maps by either analyzing the event or remapping exising DQM historams");
630  desc.add<edm::InputTag>("src", edm::InputTag("generalTracks"));
631  desc.ifValue(edm::ParameterDescription<int>("opMode", 0, true),
633  1 >> (edm::ParameterDescription<std::string>("stripRemapFile", "", true) and
634  edm::ParameterDescription<std::string>("stripHistogram", "", true) and
635  edm::ParameterDescription<std::string>("runString", "", true)))
636  ->setComment("0 for Analyze, 1 for Remap");
637 
638  desc.ifValue(edm::ParameterDescription<int>("analyzeMode", 1, true), edm::allowedValues<int>(1, 2, 3))
639  ->setComment("1=Rechits, 2=Digis, 3=Clusters");
640 
641  //desc.add<unsigned int>("analyzeMode", 1)->setComment("1=Rechits, 2=Digis, 3=Clusters");
642  //desc.add<unsigned int>("opMode", 0)->setComment("0 for Analyze, 1 for Remap");
643  //desc.addOptional<std::string>("stripRemapFile","" )->setComment("file name to analyze, will come from the config file");
644  //desc.addOptional<std::string>("stripHistogram","TkHMap_NumberValidHits" )->setComment("histogram to use to remap");
645  //desc.addOptional<std::string>("runString", "")->setComment("run number, will come form config file");
646  descriptions.addWithDefaultLabel(desc);
647 }
648 
649 //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
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