CMS 3D CMS Logo

SiPixelCompareRecHitsSoAAlpaka.cc
Go to the documentation of this file.
19 
20 template <typename T>
22 public:
24 
26  ~SiPixelCompareRecHitsSoAAlpaka() override = default;
27  void dqmBeginRun(const edm::Run&, const edm::EventSetup&) override;
28  void bookHistograms(DQMStore::IBooker& ibooker, edm::Run const& iRun, edm::EventSetup const& iSetup) override;
29  void analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) override;
30  static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
31 
32 private:
35  const edm::EDGetTokenT<HitsOnHost> tokenSoAHitsHost_; //these two are both on Host but originally they have been
36  const edm::EDGetTokenT<HitsOnHost> tokenSoAHitsDevice_; //produced on Host or on Device
38  const float mind2cut_;
40  static constexpr float micron_ = 10000.;
41  const TrackerGeometry* tkGeom_ = nullptr;
42  const TrackerTopology* tTopo_ = nullptr;
44  MonitorElement* hBchargeL_[4]; // max 4 barrel hits
49  MonitorElement* hFchargeD_[2][12]; // max 12 endcap disks
54  //differences
65 };
66 
67 //
68 // constructors
69 //
70 template <typename T>
73  topoToken_(esConsumes<TrackerTopology, TrackerTopologyRcd, edm::Transition::BeginRun>()),
74  tokenSoAHitsHost_(consumes(iConfig.getParameter<edm::InputTag>("pixelHitsSrcHost"))),
75  tokenSoAHitsDevice_(consumes(iConfig.getParameter<edm::InputTag>("pixelHitsSrcDevice"))),
76  topFolderName_(iConfig.getParameter<std::string>("topFolderName")),
77  mind2cut_(iConfig.getParameter<double>("minD2cut")) {}
78 
79 //
80 // Begin Run
81 //
82 template <typename T>
84  tkGeom_ = &iSetup.getData(geomToken_);
85  tTopo_ = &iSetup.getData(topoToken_);
86 }
87 
88 //
89 // -- Analyze
90 //
91 template <typename T>
93  const auto& rhsoaHandleHost = iEvent.getHandle(tokenSoAHitsHost_);
94  const auto& rhsoaHandleDevice = iEvent.getHandle(tokenSoAHitsDevice_);
95  if (not rhsoaHandleHost or not rhsoaHandleDevice) {
96  edm::LogWarning out("SiPixelCompareRecHitsSoAAlpaka");
97  if (not rhsoaHandleHost) {
98  out << "reference (Host) rechits not found; ";
99  }
100  if (not rhsoaHandleDevice) {
101  out << "target (Device) rechits not found; ";
102  }
103  out << "the comparison will not run.";
104  return;
105  }
106 
107  auto const& rhsoaHost = *rhsoaHandleHost;
108  auto const& rhsoaDevice = *rhsoaHandleDevice;
109 
110  auto const& soa2dHost = rhsoaHost.const_view();
111  auto const& soa2dDevice = rhsoaDevice.const_view();
112 
113  uint32_t nHitsHost = soa2dHost.metadata().size();
114  uint32_t nHitsDevice = soa2dDevice.metadata().size();
115 
116  hnHits_->Fill(nHitsHost, nHitsDevice);
117  auto detIds = tkGeom_->detUnitIds();
118  for (uint32_t i = 0; i < nHitsHost; i++) {
119  float minD = mind2cut_;
120  uint32_t matchedHit = invalidHit_;
121  uint16_t indHost = soa2dHost[i].detectorIndex();
122  float xLocalHost = soa2dHost[i].xLocal();
123  float yLocalHost = soa2dHost[i].yLocal();
124  for (uint32_t j = 0; j < nHitsDevice; j++) {
125  if (soa2dDevice.detectorIndex(j) == indHost) {
126  float dx = xLocalHost - soa2dDevice[j].xLocal();
127  float dy = yLocalHost - soa2dDevice[j].yLocal();
128  float distance = dx * dx + dy * dy;
129  if (distance < minD) {
130  minD = distance;
131  matchedHit = j;
132  }
133  }
134  }
135  DetId id = detIds[indHost];
136  uint32_t chargeHost = soa2dHost[i].chargeAndStatus().charge;
137  int16_t sizeXHost = std::ceil(float(std::abs(soa2dHost[i].clusterSizeX()) / 8.));
138  int16_t sizeYHost = std::ceil(float(std::abs(soa2dHost[i].clusterSizeY()) / 8.));
139  uint32_t chargeDevice = 0;
140  int16_t sizeXDevice = -99;
141  int16_t sizeYDevice = -99;
142  float xLocalDevice = -999.;
143  float yLocalDevice = -999.;
144  if (matchedHit != invalidHit_) {
145  chargeDevice = soa2dDevice[matchedHit].chargeAndStatus().charge;
146  sizeXDevice = std::ceil(float(std::abs(soa2dDevice[matchedHit].clusterSizeX()) / 8.));
147  sizeYDevice = std::ceil(float(std::abs(soa2dDevice[matchedHit].clusterSizeY()) / 8.));
148  xLocalDevice = soa2dDevice[matchedHit].xLocal();
149  yLocalDevice = soa2dDevice[matchedHit].yLocal();
150  }
151  switch (id.subdetId()) {
153  hBchargeL_[tTopo_->pxbLayer(id) - 1]->Fill(chargeHost, chargeDevice);
154  hBsizexL_[tTopo_->pxbLayer(id) - 1]->Fill(sizeXHost, sizeXDevice);
155  hBsizeyL_[tTopo_->pxbLayer(id) - 1]->Fill(sizeYHost, sizeYDevice);
156  hBposxL_[tTopo_->pxbLayer(id) - 1]->Fill(xLocalHost, xLocalDevice);
157  hBposyL_[tTopo_->pxbLayer(id) - 1]->Fill(yLocalHost, yLocalDevice);
158  hBchargeDiff_->Fill(chargeHost - chargeDevice);
159  hBsizeXDiff_->Fill(sizeXHost - sizeXDevice);
160  hBsizeYDiff_->Fill(sizeYHost - sizeYDevice);
161  hBposXDiff_->Fill(micron_ * (xLocalHost - xLocalDevice));
162  hBposYDiff_->Fill(micron_ * (yLocalHost - yLocalDevice));
163  break;
165  hFchargeD_[tTopo_->pxfSide(id) - 1][tTopo_->pxfDisk(id) - 1]->Fill(chargeHost, chargeDevice);
166  hFsizexD_[tTopo_->pxfSide(id) - 1][tTopo_->pxfDisk(id) - 1]->Fill(sizeXHost, sizeXDevice);
167  hFsizeyD_[tTopo_->pxfSide(id) - 1][tTopo_->pxfDisk(id) - 1]->Fill(sizeYHost, sizeYDevice);
168  hFposxD_[tTopo_->pxfSide(id) - 1][tTopo_->pxfDisk(id) - 1]->Fill(xLocalHost, xLocalDevice);
169  hFposyD_[tTopo_->pxfSide(id) - 1][tTopo_->pxfDisk(id) - 1]->Fill(yLocalHost, yLocalDevice);
170  hFchargeDiff_->Fill(chargeHost - chargeDevice);
171  hFsizeXDiff_->Fill(sizeXHost - sizeXDevice);
172  hFsizeYDiff_->Fill(sizeYHost - sizeYDevice);
173  hFposXDiff_->Fill(micron_ * (xLocalHost - xLocalDevice));
174  hFposYDiff_->Fill(micron_ * (yLocalHost - yLocalDevice));
175  break;
176  }
177  }
178 }
179 
180 //
181 // -- Book Histograms
182 //
183 template <typename T>
185  edm::Run const& iRun,
186  edm::EventSetup const& iSetup) {
187  iBook.cd();
188  iBook.setCurrentFolder(topFolderName_);
189 
190  // clang-format off
191  //Global
192  hnHits_ = iBook.book2I("nHits", "HostvsDevice RecHits per event;#Host RecHits;#Device RecHits", 200, 0, 5000,200, 0, 5000);
193  //Barrel Layer
194  for(unsigned int il=0;il<tkGeom_->numberOfLayers(PixelSubdetector::PixelBarrel);il++){
195  hBchargeL_[il] = iBook.book2I(Form("recHitsBLay%dCharge",il+1), Form("HostvsDevice RecHits Charge Barrel Layer%d;Host Charge;Device Charge",il+1), 250, 0, 100000, 250, 0, 100000);
196  hBsizexL_[il] = iBook.book2I(Form("recHitsBLay%dSizex",il+1), Form("HostvsDevice RecHits SizeX Barrel Layer%d;Host SizeX;Device SizeX",il+1), 30, 0, 30, 30, 0, 30);
197  hBsizeyL_[il] = iBook.book2I(Form("recHitsBLay%dSizey",il+1), Form("HostvsDevice RecHits SizeY Barrel Layer%d;Host SizeY;Device SizeY",il+1), 30, 0, 30, 30, 0, 30);
198  hBposxL_[il] = iBook.book2D(Form("recHitsBLay%dPosx",il+1), Form("HostvsDevice RecHits x-pos in Barrel Layer%d;Host pos x;Device pos x",il+1), 200, -5, 5, 200,-5,5);
199  hBposyL_[il] = iBook.book2D(Form("recHitsBLay%dPosy",il+1), Form("HostvsDevice RecHits y-pos in Barrel Layer%d;Host pos y;Device pos y",il+1), 200, -5, 5, 200,-5,5);
200  }
201  //Endcaps
202  //Endcaps Disk
203  for(int is=0;is<2;is++){
204  int sign=is==0? -1:1;
205  for(unsigned int id=0;id<tkGeom_->numberOfLayers(PixelSubdetector::PixelEndcap);id++){
206  hFchargeD_[is][id] = iBook.book2I(Form("recHitsFDisk%+dCharge",id*sign+sign), Form("HostvsDevice RecHits Charge Endcaps Disk%+d;Host Charge;Device Charge",id*sign+sign), 250, 0, 100000, 250, 0, 100000);
207  hFsizexD_[is][id] = iBook.book2I(Form("recHitsFDisk%+dSizex",id*sign+sign), Form("HostvsDevice RecHits SizeX Endcaps Disk%+d;Host SizeX;Device SizeX",id*sign+sign), 30, 0, 30, 30, 0, 30);
208  hFsizeyD_[is][id] = iBook.book2I(Form("recHitsFDisk%+dSizey",id*sign+sign), Form("HostvsDevice RecHits SizeY Endcaps Disk%+d;Host SizeY;Device SizeY",id*sign+sign), 30, 0, 30, 30, 0, 30);
209  hFposxD_[is][id] = iBook.book2D(Form("recHitsFDisk%+dPosx",id*sign+sign), Form("HostvsDevice RecHits x-pos Endcaps Disk%+d;Host pos x;Device pos x",id*sign+sign), 200, -5, 5, 200, -5, 5);
210  hFposyD_[is][id] = iBook.book2D(Form("recHitsFDisk%+dPosy",id*sign+sign), Form("HostvsDevice RecHits y-pos Endcaps Disk%+d;Host pos y;Device pos y",id*sign+sign), 200, -5, 5, 200, -5, 5);
211  }
212  }
213  //1D differences
214  hBchargeDiff_ = iBook.book1D("rechitChargeDiffBpix","Charge differnce of rechits in BPix; rechit charge difference (Host - Device)", 101, -50.5, 50.5);
215  hFchargeDiff_ = iBook.book1D("rechitChargeDiffFpix","Charge differnce of rechits in FPix; rechit charge difference (Host - Device)", 101, -50.5, 50.5);
216  hBsizeXDiff_ = iBook.book1D("rechitsizeXDiffBpix","SizeX difference of rechits in BPix; rechit sizex difference (Host - Device)", 21, -10.5, 10.5);
217  hFsizeXDiff_ = iBook.book1D("rechitsizeXDiffFpix","SizeX difference of rechits in FPix; rechit sizex difference (Host - Device)", 21, -10.5, 10.5);
218  hBsizeYDiff_ = iBook.book1D("rechitsizeYDiffBpix","SizeY difference of rechits in BPix; rechit sizey difference (Host - Device)", 21, -10.5, 10.5);
219  hFsizeYDiff_ = iBook.book1D("rechitsizeYDiffFpix","SizeY difference of rechits in FPix; rechit sizey difference (Host - Device)", 21, -10.5, 10.5);
220  hBposXDiff_ = iBook.book1D("rechitsposXDiffBpix","x-position difference of rechits in BPix; rechit x-pos difference (Host - Device)", 1000, -10, 10);
221  hFposXDiff_ = iBook.book1D("rechitsposXDiffFpix","x-position difference of rechits in FPix; rechit x-pos difference (Host - Device)", 1000, -10, 10);
222  hBposYDiff_ = iBook.book1D("rechitsposYDiffBpix","y-position difference of rechits in BPix; rechit y-pos difference (Host - Device)", 1000, -10, 10);
223  hFposYDiff_ = iBook.book1D("rechitsposYDiffFpix","y-position difference of rechits in FPix; rechit y-pos difference (Host - Device)", 1000, -10, 10);
224 }
225 
226 template<typename T>
228  // monitorpixelRecHitsSoAAlpaka
230  desc.add<edm::InputTag>("pixelHitsSrcHost", edm::InputTag("siPixelRecHitsPreSplittingAlpakaSerial"));
231  desc.add<edm::InputTag>("pixelHitsSrcDevice", edm::InputTag("siPixelRecHitsPreSplittingAlpaka"));
232  desc.add<std::string>("topFolderName", "SiPixelHeterogeneous/PixelRecHitsCompareDeviceVSHost");
233  desc.add<double>("minD2cut", 0.0001);
234  descriptions.addWithDefaultLabel(desc);
235 }
236 
240 
constexpr int32_t ceil(float num)
void addWithDefaultLabel(ParameterSetDescription const &psetDescription)
ESGetTokenH3DDVariant esConsumes(std::string const &Record, edm::ConsumesCollector &)
Definition: DeDxTools.cc:283
T const & getData(const ESGetToken< T, R > &iToken) const noexcept(false)
Definition: EventSetup.h:119
SiPixelCompareRecHitsSoAAlpaka(const edm::ParameterSet &)
virtual void setCurrentFolder(std::string const &fullpath)
Definition: DQMStore.cc:36
const edm::ESGetToken< TrackerTopology, TrackerTopologyRcd > topoToken_
const edm::EDGetTokenT< HitsOnHost > tokenSoAHitsHost_
~SiPixelCompareRecHitsSoAAlpaka() override=default
int iEvent
Definition: GenABIO.cc:224
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
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
Transition
Definition: Transition.h:12
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
const edm::EDGetTokenT< HitsOnHost > tokenSoAHitsDevice_
Definition: DetId.h:17
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 analyze(const edm::Event &iEvent, const edm::EventSetup &iSetup) override
void bookHistograms(DQMStore::IBooker &ibooker, edm::Run const &iRun, edm::EventSetup const &iSetup) override
HLT enums.
void dqmBeginRun(const edm::Run &, const edm::EventSetup &) override
MonitorElement * book1D(TString const &name, TString const &title, int const nchX, double const lowX, double const highX, FUNC onbooking=NOOP())
Definition: DQMStore.h:98
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
MonitorElement * book2I(TString const &name, TString const &title, int nchX, double lowX, double highX, int nchY, double lowY, double highY, FUNC onbooking=NOOP())
Definition: DQMStore.h:296
Definition: Run.h:45
const edm::ESGetToken< TrackerGeometry, TrackerDigiGeometryRecord > geomToken_