86 tokenSoAHitsHost_(consumes(iConfig.getParameter<
edm::
InputTag>(
"pixelHitsSrcCPU"))),
87 tokenSoAHitsDevice_(consumes(iConfig.getParameter<
edm::
InputTag>(
"pixelHitsSrcGPU"))),
88 topFolderName_(iConfig.getParameter<
std::
string>(
"topFolderName")),
89 mind2cut_(iConfig.getParameter<double>(
"minD2cut")) {}
95 tkGeom_ = &iSetup.
getData(geomToken_);
96 tTopo_ = &iSetup.
getData(topoToken_);
102 template <
typename T>
104 const auto& rhsoaHandleHost =
iEvent.getHandle(tokenSoAHitsHost_);
105 const auto& rhsoaHandleDevice =
iEvent.getHandle(tokenSoAHitsDevice_);
106 if (not rhsoaHandleHost
or not rhsoaHandleDevice) {
108 if (not rhsoaHandleHost) {
109 out <<
"reference (Host) rechits not found; ";
111 if (not rhsoaHandleDevice) {
112 out <<
"target (Device) rechits not found; ";
114 out <<
"the comparison will not run.";
118 auto const& rhsoaHost = *rhsoaHandleHost;
119 auto const& rhsoaDevice = *rhsoaHandleDevice;
121 auto const& soa2dHost = rhsoaHost.const_view();
122 auto const& soa2dDevice = rhsoaDevice.const_view();
124 uint32_t nHitsHost = soa2dHost.nHits();
125 uint32_t nHitsDevice = soa2dDevice.nHits();
127 hnHits_->Fill(nHitsHost, nHitsDevice);
128 auto detIds = tkGeom_->detUnitIds();
129 for (uint32_t
i = 0;
i < nHitsHost;
i++) {
130 float minD = mind2cut_;
131 uint32_t matchedHit = invalidHit_;
132 uint16_t indHost = soa2dHost[
i].detectorIndex();
133 float xLocalHost = soa2dHost[
i].xLocal();
134 float yLocalHost = soa2dHost[
i].yLocal();
135 for (uint32_t
j = 0;
j < nHitsDevice;
j++) {
136 if (soa2dDevice.detectorIndex(
j) == indHost) {
137 float dx = xLocalHost - soa2dDevice[
j].xLocal();
138 float dy = yLocalHost - soa2dDevice[
j].yLocal();
146 DetId id = detIds[indHost];
147 uint32_t chargeHost = soa2dHost[
i].chargeAndStatus().charge;
150 uint32_t chargeDevice = 0;
151 int16_t sizeXDevice = -99;
152 int16_t sizeYDevice = -99;
153 float xLocalDevice = -999.;
154 float yLocalDevice = -999.;
155 if (matchedHit != invalidHit_) {
156 chargeDevice = soa2dDevice[matchedHit].chargeAndStatus().charge;
157 sizeXDevice =
std::ceil(
float(
std::abs(soa2dDevice[matchedHit].clusterSizeX()) / 8.));
158 sizeYDevice =
std::ceil(
float(
std::abs(soa2dDevice[matchedHit].clusterSizeY()) / 8.));
159 xLocalDevice = soa2dDevice[matchedHit].xLocal();
160 yLocalDevice = soa2dDevice[matchedHit].yLocal();
162 switch (
id.subdetId()) {
164 hBchargeL_[tTopo_->pxbLayer(
id) - 1]->Fill(chargeHost, chargeDevice);
165 hBsizexL_[tTopo_->pxbLayer(
id) - 1]->Fill(sizeXHost, sizeXDevice);
166 hBsizeyL_[tTopo_->pxbLayer(
id) - 1]->Fill(sizeYHost, sizeYDevice);
167 hBposxL_[tTopo_->pxbLayer(
id) - 1]->Fill(xLocalHost, xLocalDevice);
168 hBposyL_[tTopo_->pxbLayer(
id) - 1]->Fill(yLocalHost, yLocalDevice);
169 hBchargeDiff_->Fill(chargeHost - chargeDevice);
170 hBsizeXDiff_->Fill(sizeXHost - sizeXDevice);
171 hBsizeYDiff_->Fill(sizeYHost - sizeYDevice);
172 hBposXDiff_->Fill(micron_ * (xLocalHost - xLocalDevice));
173 hBposYDiff_->Fill(micron_ * (yLocalHost - yLocalDevice));
176 hFchargeD_[tTopo_->pxfSide(
id) - 1][tTopo_->pxfDisk(
id) - 1]->Fill(chargeHost, chargeDevice);
177 hFsizexD_[tTopo_->pxfSide(
id) - 1][tTopo_->pxfDisk(
id) - 1]->Fill(sizeXHost, sizeXDevice);
178 hFsizeyD_[tTopo_->pxfSide(
id) - 1][tTopo_->pxfDisk(
id) - 1]->Fill(sizeYHost, sizeYDevice);
179 hFposxD_[tTopo_->pxfSide(
id) - 1][tTopo_->pxfDisk(
id) - 1]->Fill(xLocalHost, xLocalDevice);
180 hFposyD_[tTopo_->pxfSide(
id) - 1][tTopo_->pxfDisk(
id) - 1]->Fill(yLocalHost, yLocalDevice);
181 hFchargeDiff_->Fill(chargeHost - chargeDevice);
182 hFsizeXDiff_->Fill(sizeXHost - sizeXDevice);
183 hFsizeYDiff_->Fill(sizeYHost - sizeYDevice);
184 hFposXDiff_->Fill(micron_ * (xLocalHost - xLocalDevice));
185 hFposYDiff_->Fill(micron_ * (yLocalHost - yLocalDevice));
194 template <
typename T>
203 hnHits_ = iBook.
book2I(
"nHits",
"HostvsDevice RecHits per event;#Host RecHits;#Device RecHits", 200, 0, 5000,200, 0, 5000);
206 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);
207 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);
208 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);
209 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);
210 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);
214 for(
int is=0;is<2;is++){
215 int sign=is==0? -1:1;
217 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);
218 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);
219 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);
220 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);
221 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);
225 hBchargeDiff_ = iBook.
book1D(
"rechitChargeDiffBpix",
"Charge differnce of rechits in BPix; rechit charge difference (Host - Device)", 101, -50.5, 50.5);
226 hFchargeDiff_ = iBook.
book1D(
"rechitChargeDiffFpix",
"Charge differnce of rechits in FPix; rechit charge difference (Host - Device)", 101, -50.5, 50.5);
227 hBsizeXDiff_ = iBook.
book1D(
"rechitsizeXDiffBpix",
"SizeX difference of rechits in BPix; rechit sizex difference (Host - Device)", 21, -10.5, 10.5);
228 hFsizeXDiff_ = iBook.
book1D(
"rechitsizeXDiffFpix",
"SizeX difference of rechits in FPix; rechit sizex difference (Host - Device)", 21, -10.5, 10.5);
229 hBsizeYDiff_ = iBook.
book1D(
"rechitsizeYDiffBpix",
"SizeY difference of rechits in BPix; rechit sizey difference (Host - Device)", 21, -10.5, 10.5);
230 hFsizeYDiff_ = iBook.
book1D(
"rechitsizeYDiffFpix",
"SizeY difference of rechits in FPix; rechit sizey difference (Host - Device)", 21, -10.5, 10.5);
231 hBposXDiff_ = iBook.
book1D(
"rechitsposXDiffBpix",
"x-position difference of rechits in BPix; rechit x-pos difference (Host - Device)", 1000, -10, 10);
232 hFposXDiff_ = iBook.
book1D(
"rechitsposXDiffFpix",
"x-position difference of rechits in FPix; rechit x-pos difference (Host - Device)", 1000, -10, 10);
233 hBposYDiff_ = iBook.
book1D(
"rechitsposYDiffBpix",
"y-position difference of rechits in BPix; rechit y-pos difference (Host - Device)", 1000, -10, 10);
234 hFposYDiff_ = iBook.
book1D(
"rechitsposYDiffFpix",
"y-position difference of rechits in FPix; rechit y-pos difference (Host - Device)", 1000, -10, 10);
243 desc.add<
std::string>(
"topFolderName",
"SiPixelHeterogeneous/PixelRecHitsCompareDevicevsHost");
244 desc.add<
double>(
"minD2cut", 0.0001);
TrackingRecHitSoAView< T > HitSoA
constexpr int32_t ceil(float num)
void addWithDefaultLabel(ParameterSetDescription const &psetDescription)
static constexpr float micron_
MonitorElement * hBsizexL_[4]
MonitorElement * hBposxL_[4]
T const & getData(const ESGetToken< T, R > &iToken) const noexcept(false)
SiPixelCompareRecHitsSoA(const edm::ParameterSet &)
MonitorElement * hFsizexD_[2][12]
MonitorElement * hFposYDiff_
virtual void setCurrentFolder(std::string const &fullpath)
const edm::EDGetTokenT< HitsOnHost > tokenSoAHitsHost_
MonitorElement * hFchargeDiff_
const edm::ESGetToken< TrackerGeometry, TrackerDigiGeometryRecord > geomToken_
static constexpr uint32_t invalidHit_
MonitorElement * hFposXDiff_
void bookHistograms(DQMStore::IBooker &ibooker, edm::Run const &iRun, edm::EventSetup const &iSetup) override
const std::string topFolderName_
const edm::ESGetToken< TrackerTopology, TrackerTopologyRcd > topoToken_
MonitorElement * hBsizeXDiff_
MonitorElement * hFsizeYDiff_
const TrackerGeometry * tkGeom_
MonitorElement * hBposYDiff_
MonitorElement * hBsizeyL_[4]
~SiPixelCompareRecHitsSoA() override=default
const edm::EDGetTokenT< HitsOnHost > tokenSoAHitsDevice_
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
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
Abs< T >::type abs(const T &t)
MonitorElement * hFposyD_[2][12]
#define DEFINE_FWK_MODULE(type)
MonitorElement * hBchargeDiff_
void dqmBeginRun(const edm::Run &, const edm::EventSetup &) override
MonitorElement * hBchargeL_[4]
MonitorElement * hBposXDiff_
MonitorElement * hFchargeD_[2][12]
MonitorElement * book2D(TString const &name, TString const &title, int nchX, double lowX, double highX, int nchY, double lowY, double highY, FUNC onbooking=NOOP())
const TrackerTopology * tTopo_
void analyze(const edm::Event &iEvent, const edm::EventSetup &iSetup) override
MonitorElement * hBsizeYDiff_
typename TrackingRecHitSoA< TrackerTraits >::template TrackingRecHitSoALayout<>::View TrackingRecHitSoAView
MonitorElement * hFsizeyD_[2][12]
MonitorElement * book1D(TString const &name, TString const &title, int const nchX, double const lowX, double const highX, FUNC onbooking=NOOP())
MonitorElement * hBposyL_[4]
MonitorElement * book2I(TString const &name, TString const &title, int nchX, double lowX, double highX, int nchY, double lowY, double highY, FUNC onbooking=NOOP())
MonitorElement * hFposxD_[2][12]
MonitorElement * hFsizeXDiff_