CMS 3D CMS Logo

SiPixelPhase2DigiToCluster.cc
Go to the documentation of this file.
1 // C++ includes
2 #include <memory>
3 #include <stdexcept>
4 #include <string>
5 #include <utility>
6 #include <vector>
7 
8 #include <alpaka/alpaka.hpp>
9 
27 
29 
31 
33  public:
34  explicit SiPixelPhase2DigiToCluster(const edm::ParameterSet& iConfig);
35  ~SiPixelPhase2DigiToCluster() override = default;
36 
37  static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
39 
40  private:
41  void acquire(device::Event const& iEvent, device::EventSetup const& iSetup) override;
42  void produce(device::Event& iEvent, device::EventSetup const& iSetup) override;
43 
46 
50 
52 
53  const bool includeErrors_;
55  uint32_t nDigis_ = 0;
56 
58  };
59 
61  : geomToken_(esConsumes()),
62  pixelDigiToken_(consumes<edm::DetSetVector<PixelDigi>>(iConfig.getParameter<edm::InputTag>("InputDigis"))),
63  digiPutToken_(produces()),
64  clusterPutToken_(produces()),
65  includeErrors_(iConfig.getParameter<bool>("IncludeErrors")),
66  clusterThresholds_{iConfig.getParameter<int32_t>("clusterThreshold_layer1"),
67  iConfig.getParameter<int32_t>("clusterThreshold_otherLayers"),
68  static_cast<float>(iConfig.getParameter<double>("ElectronPerADCGain")),
69  static_cast<int8_t>(iConfig.getParameter<int>("Phase2ReadoutMode")),
70  static_cast<uint16_t>(iConfig.getParameter<uint32_t>("Phase2DigiBaseline")),
71  static_cast<uint8_t>(iConfig.getParameter<uint32_t>("Phase2KinkADC"))} {
72  if (includeErrors_) {
73  digiErrorPutToken_ = produces();
74  }
75  }
76 
79 
80  desc.add<bool>("IncludeErrors", true);
81  desc.add<int32_t>("clusterThreshold_layer1",
83  desc.add<int32_t>("clusterThreshold_otherLayers", pixelClustering::clusterThresholdPhase2OtherLayers);
84  desc.add<double>("ElectronPerADCGain", 1500.);
85  desc.add<int32_t>("Phase2ReadoutMode", 3);
86  desc.add<uint32_t>("Phase2DigiBaseline", 1000);
87  desc.add<uint32_t>("Phase2KinkADC", 8);
88  desc.add<edm::InputTag>("InputDigis", edm::InputTag("simSiPixelDigis:Pixel"));
89  descriptions.addWithDefaultLabel(desc);
90  }
91 
93  auto const& input = iEvent.get(pixelDigiToken_);
94 
95  const TrackerGeometry* geom_ = &iSetup.getData(geomToken_);
96 
97  uint32_t nDigis = 0;
98 
99  for (const auto& det : input) {
100  nDigis += det.size();
101  }
102 
103  if (nDigis_ == 0)
104  return;
105 
106  SiPixelDigisHost digis_h(nDigis, iEvent.queue());
107  nDigis_ = nDigis;
108 
109  nDigis = 0;
110  for (const auto& det : input) {
111  unsigned int detid = det.detId();
112  DetId detIdObject(detid);
113  const GeomDetUnit* genericDet = geom_->idToDetUnit(detIdObject);
114  auto const gind = genericDet->index();
115  for (auto const& px : det) {
116  digis_h.view()[nDigis].moduleId() = uint16_t(gind);
117 
118  digis_h.view()[nDigis].xx() = uint16_t(px.row());
119  digis_h.view()[nDigis].yy() = uint16_t(px.column());
120  digis_h.view()[nDigis].adc() = uint16_t(px.adc());
121 
122  digis_h.view()[nDigis].pdigi() = uint32_t(px.packedData());
123 
124  digis_h.view()[nDigis].rawIdArr() = uint32_t(detid);
125 
126  nDigis++;
127  }
128  }
129 
130  digis_d = SiPixelDigisSoACollection(nDigis, iEvent.queue());
131  alpaka::memcpy(iEvent.queue(), digis_d.buffer(), digis_h.buffer());
132 
134  }
135 
137  if (nDigis_ == 0) {
140  iEvent.emplace(clusterPutToken_, std::move(clusters_d));
141  if (includeErrors_) {
143  }
144  return;
145  }
146 
147  digis_d.setNModulesDigis(Algo_.nModules(), nDigis_);
148 
151  if (includeErrors_) {
153  }
154  }
155 
156 } // namespace ALPAKA_ACCELERATOR_NAMESPACE
157 
158 // define as framework plugin
160 DEFINE_FWK_ALPAKA_MODULE(SiPixelPhase2DigiToCluster);
device::EDPutToken< SiPixelDigisSoACollection > digiPutToken_
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:307
const TrackerGeomDet * idToDetUnit(DetId) const override
Return the pointer to the GeomDetUnit corresponding to a given DetId.
device::EDPutToken< SiPixelDigiErrorsSoACollection > digiErrorPutToken_
int index() const
Definition: GeomDet.h:83
constexpr uint16_t clusterThresholdPhase2LayerOne
void makePhase2ClustersAsync(Queue &queue, const SiPixelClusterThresholds clusterThresholds, SiPixelDigisSoAView &digis_view, const uint32_t numDigis)
static std::string const input
Definition: EdmProvDump.cc:50
int iEvent
Definition: GenABIO.cc:224
std::conditional_t< std::is_same_v< Device, alpaka::DevCpu >, SiPixelDigisHost, SiPixelDigisDevice< Device > > SiPixelDigisSoACollection
void acquire(device::Event const &iEvent, device::EventSetup const &iSetup) override
device::EDPutToken< SiPixelClustersSoACollection > clusterPutToken_
const edm::ESGetToken< TrackerGeometry, TrackerDigiGeometryRecord > geomToken_
T const & getData(edm::ESGetToken< T, R > const &iToken) const
Definition: EventSetup.h:32
Definition: DetId.h:17
void produce(device::Event &iEvent, device::EventSetup const &iSetup) override
HLT enums.
constexpr uint16_t clusterThresholdPhase2OtherLayers
#define DEFINE_FWK_ALPAKA_MODULE(name)
Definition: MakerMacros.h:16
std::conditional_t< std::is_same_v< Device, alpaka::DevCpu >, SiPixelDigiErrorsHost, SiPixelDigiErrorsDevice< Device > > SiPixelDigiErrorsSoACollection
const edm::EDGetTokenT< edm::DetSetVector< PixelDigi > > pixelDigiToken_
def move(src, dest)
Definition: eostools.py:511
std::conditional_t< std::is_same_v< Device, alpaka::DevCpu >, SiPixelClustersHost, SiPixelClustersDevice< Device > > SiPixelClustersSoACollection
static constexpr uint16_t numberOfModules
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)