CMS 3D CMS Logo

All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
SiPixelCablingSoAESProducer.cc
Go to the documentation of this file.
20 
22 
23  using namespace cms::alpakatools;
24 
26  public:
28  : ESProducer(iConfig), useQuality_(iConfig.getParameter<bool>("UseQualityInfo")) {
29  auto cc = setWhatProduced(this);
30  cablingMapToken_ = cc.consumes(edm::ESInputTag{"", iConfig.getParameter<std::string>("CablingMapLabel")});
31  if (useQuality_) {
32  qualityToken_ = cc.consumes();
33  }
34  geometryToken_ = cc.consumes();
35  }
36 
37  static void fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
39  desc.add<std::string>("CablingMapLabel", "")->setComment("CablingMap label");
40  desc.add<bool>("UseQualityInfo", false);
41  descriptions.addWithDefaultLabel(desc);
42  }
43 
44  std::optional<SiPixelMappingHost> produce(const SiPixelMappingSoARecord& iRecord) {
45  auto cablingMap = iRecord.getTransientHandle(cablingMapToken_);
46  const SiPixelQuality* quality = nullptr;
47  if (useQuality_) {
48  auto qualityInfo = iRecord.getTransientHandle(qualityToken_);
49  quality = qualityInfo.product();
50  }
51 
52  auto geom = iRecord.getTransientHandle(geometryToken_);
54  std::vector<unsigned int> const& fedIds = cablingMap->fedIds();
55  std::unique_ptr<SiPixelFedCablingTree> const& cabling = cablingMap->cablingTree();
56 
57  unsigned int startFed = fedIds.front();
58  unsigned int endFed = fedIds.back();
59 
61  int index = 1;
62 
63  auto mapView = product.view();
64 
65  mapView.hasQuality() = useQuality_;
66  for (unsigned int fed = startFed; fed <= endFed; fed++) {
67  for (unsigned int link = 1; link <= pixelgpudetails::MAX_LINK; link++) {
68  for (unsigned int roc = 1; roc <= pixelgpudetails::MAX_ROC; roc++) {
69  path = {fed, link, roc};
70  const sipixelobjects::PixelROC* pixelRoc = cabling->findItem(path);
71  mapView[index].fed() = fed;
72  mapView[index].link() = link;
73  mapView[index].roc() = roc;
74  if (pixelRoc != nullptr) {
75  mapView[index].rawId() = pixelRoc->rawId();
76  mapView[index].rocInDet() = pixelRoc->idInDetUnit();
77  mapView[index].modToUnpDefault() = false;
78  if (quality != nullptr)
79  mapView[index].badRocs() = quality->IsRocBad(pixelRoc->rawId(), pixelRoc->idInDetUnit());
80  else
81  mapView[index].badRocs() = false;
82  } else { // store some dummy number
83  mapView[index].rawId() = pixelClustering::invalidModuleId;
84  mapView[index].rocInDet() = pixelClustering::invalidModuleId;
85  mapView[index].badRocs() = true;
86  mapView[index].modToUnpDefault() = true;
87  }
88  index++;
89  }
90  }
91  } // end of FED loop
92  // Given FedId, Link and idinLnk; use the following formula
93  // to get the rawId and idinDU
94  // index = (FedID-1200) * MAX_LINK* MAX_ROC + (Link-1)* MAX_ROC + idinLnk;
95  // where, MAX_LINK = 48, MAX_ROC = 8
96  // FedID varies between 1200 to 1338 (In total 108 FED's)
97  // Link varies between 1 to 48
98  // idinLnk varies between 1 to 8
99 
100  auto trackerGeom = iRecord.getTransientHandle(geometryToken_);
101 
102  for (int i = 1; i < index; i++) {
103  if (mapView[i].rawId() == pixelClustering::invalidModuleId) {
104  mapView[i].moduleId() = pixelClustering::invalidModuleId;
105  } else {
106  auto gdet = trackerGeom->idToDetUnit(mapView[i].rawId());
107  if (!gdet) {
108  LogDebug("SiPixelCablingSoAESProducer") << " Not found: " << mapView[i].rawId() << std::endl;
109  continue;
110  }
111  mapView[i].moduleId() = gdet->index();
112  }
113  LogDebug("SiPixelCablingSoAESProducer")
114  << "----------------------------------------------------------------------------" << std::endl;
115  LogDebug("SiPixelCablingSoAESProducer") << i << std::setw(20) << mapView[i].fed() << std::setw(20)
116  << mapView[i].link() << std::setw(20) << mapView[i].roc() << std::endl;
117  LogDebug("SiPixelCablingSoAESProducer")
118  << i << std::setw(20) << mapView[i].rawId() << std::setw(20) << mapView[i].rocInDet() << std::setw(20)
119  << mapView[i].moduleId() << std::endl;
120  LogDebug("SiPixelCablingSoAESProducer")
121  << i << std::setw(20) << mapView[i].badRocs() << std::setw(20) << std::endl;
122  LogDebug("SiPixelCablingSoAESProducer")
123  << "----------------------------------------------------------------------------" << std::endl;
124  }
125 
126  mapView.size() = index - 1;
127 
128  return product;
129  }
130 
131  private:
135  const bool useQuality_;
136  };
137 } // namespace ALPAKA_ACCELERATOR_NAMESPACE
138 
140 DEFINE_FWK_EVENTSETUP_ALPAKA_MODULE(SiPixelCablingSoAESProducer);
ESTransientHandle< ProductT > getTransientHandle(ESGetToken< ProductT, DepRecordT > const &iToken) const
edm::ESGetToken< SiPixelFedCablingMap, SiPixelFedCablingMapRcd > cablingMapToken_
void addWithDefaultLabel(ParameterSetDescription const &psetDescription)
T getParameter(std::string const &) const
Definition: ParameterSet.h:307
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
uint32_t cc[maxCellsPerHit]
Definition: gpuFishbone.h:49
std::optional< SiPixelMappingHost > produce(const SiPixelMappingSoARecord &iRecord)
string quality
edm::ESGetToken< TrackerGeometry, TrackerDigiGeometryRecord > geometryToken_
edm::ESGetToken< SiPixelQuality, SiPixelQualityRcd > qualityToken_
constexpr unsigned int MAX_ROC
alpaka::DevCpu const & host()
Definition: host.h:14
#define DEFINE_FWK_EVENTSETUP_ALPAKA_MODULE(type)
Definition: ModuleFactory.h:17
constexpr unsigned int MAX_SIZE
constexpr unsigned int MAX_LINK
uint32_t rawId() const
return the DetUnit to which this ROC belongs to.
Definition: PixelROC.h:34
unsigned int idInDetUnit() const
id of this ROC in DetUnit etermined by token path
Definition: PixelROC.h:37
constexpr uint16_t invalidModuleId
#define LogDebug(id)