Skip to content

Commit 9b802c2

Browse files
authored
Merge pull request #49272 from Parsifal-2045/fixOffsetBPIX2
[NGT] Add support for older geometries in PixelTracking CA
2 parents 65e9377 + 2b0d16b commit 9b802c2

File tree

3 files changed

+55
-4
lines changed

3 files changed

+55
-4
lines changed

RecoLocalTracker/SiPixelClusterizer/plugins/alpaka/SiPixelPhase2DigiToCluster.cc

Lines changed: 50 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,17 @@
1313
#include "DataFormats/SiPixelDigi/interface/PixelDigi.h"
1414
#include "DataFormats/SiPixelDigiSoA/interface/alpaka/SiPixelDigiErrorsSoACollection.h"
1515
#include "DataFormats/SiPixelDigiSoA/interface/alpaka/SiPixelDigisSoACollection.h"
16+
#include "FWCore/MessageLogger/interface/MessageLogger.h"
1617
#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h"
1718
#include "FWCore/ParameterSet/interface/ParameterSet.h"
1819
#include "FWCore/ParameterSet/interface/ParameterSetDescription.h"
1920
#include "FWCore/Utilities/interface/ESGetToken.h"
2021
#include "FWCore/Utilities/interface/InputTag.h"
22+
#include "Geometry/CommonTopologies/interface/GeomDetEnumerators.h"
2123
#include "Geometry/Records/interface/TrackerDigiGeometryRecord.h"
24+
#include "Geometry/Records/interface/TrackerTopologyRcd.h"
2225
#include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h"
26+
#include "DataFormats/TrackerCommon/interface/TrackerTopology.h"
2327
#include "HeterogeneousCore/AlpakaCore/interface/alpaka/EDPutToken.h"
2428
#include "HeterogeneousCore/AlpakaCore/interface/alpaka/Event.h"
2529
#include "HeterogeneousCore/AlpakaCore/interface/alpaka/stream/SynchronizingEDProducer.h"
@@ -41,8 +45,12 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE {
4145
private:
4246
void acquire(device::Event const& iEvent, device::EventSetup const& iSetup) override;
4347
void produce(device::Event& iEvent, device::EventSetup const& iSetup) override;
48+
void beginRun(edm::Run const&, edm::EventSetup const& iSetup) override;
4449

4550
const edm::ESGetToken<TrackerGeometry, TrackerDigiGeometryRecord> geomToken_;
51+
const edm::ESGetToken<TrackerGeometry, TrackerDigiGeometryRecord> geomTokenBeginRun_; // For BeginRun
52+
const edm::ESGetToken<TrackerTopology, TrackerTopologyRcd> topoToken_;
53+
4654
const edm::EDGetTokenT<edm::DetSetVector<PixelDigi>> pixelDigiToken_;
4755
const device::EDPutToken<SiPixelDigisSoACollection> digiPutToken_;
4856
const device::EDPutToken<SiPixelClustersSoACollection> clusterPutToken_;
@@ -51,11 +59,14 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE {
5159
Algo algo_;
5260
uint32_t nDigis_ = 0;
5361
std::optional<SiPixelDigisSoACollection> digis_d_;
62+
mutable uint32_t offsetBPIX2_ = pixelTopology::Phase2::layerStart[1];
5463
};
5564

5665
SiPixelPhase2DigiToCluster::SiPixelPhase2DigiToCluster(const edm::ParameterSet& iConfig)
5766
: SynchronizingEDProducer(iConfig),
5867
geomToken_(esConsumes()),
68+
geomTokenBeginRun_(esConsumes<TrackerGeometry, TrackerDigiGeometryRecord, edm::Transition::BeginRun>()),
69+
topoToken_(esConsumes<TrackerTopology, TrackerTopologyRcd, edm::Transition::BeginRun>()),
5970
pixelDigiToken_(consumes<edm::DetSetVector<PixelDigi>>(iConfig.getParameter<edm::InputTag>("InputDigis"))),
6071
digiPutToken_(produces()),
6172
clusterPutToken_(produces()),
@@ -80,6 +91,44 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE {
8091
desc.add<edm::InputTag>("InputDigis", edm::InputTag("simSiPixelDigis:Pixel"));
8192
descriptions.addWithDefaultLabel(desc);
8293
}
94+
void SiPixelPhase2DigiToCluster::beginRun(edm::Run const&, edm::EventSetup const& iSetup) {
95+
using namespace pixelTopology;
96+
97+
auto const& trackerGeometry = iSetup.getData(geomTokenBeginRun_);
98+
auto const& trackerTopology = iSetup.getData(topoToken_);
99+
100+
auto const& dets = trackerGeometry.detUnits();
101+
102+
uint32_t n_modules = 0;
103+
uint32_t oldLayer = std::numeric_limits<uint32_t>::max();
104+
uint32_t layerCount = 0;
105+
uint32_t bpix2Start = 0;
106+
107+
// Loop over detector modules to find where BPIX2 starts
108+
for (auto& det : dets) {
109+
if (!GeomDetEnumerators::isInnerTracker(det->subDetector()))
110+
continue;
111+
112+
DetId detId = det->geographicalId();
113+
auto layer = trackerTopology.layer(detId);
114+
115+
if (layer != oldLayer) {
116+
if (layerCount == 1) {
117+
// layer 1 is BPIX2
118+
bpix2Start = n_modules;
119+
}
120+
layerCount++;
121+
oldLayer = layer;
122+
}
123+
n_modules++;
124+
}
125+
126+
offsetBPIX2_ = bpix2Start;
127+
128+
LogDebug("SiPixelPhase2DigiToCluster")
129+
<< "beginRun: BPIX2 module start = " << offsetBPIX2_ << " (total pixel modules: " << n_modules
130+
<< "). Offset from simplePixelTopology = " << pixelTopology::Phase2::layerStart[1] << '\n';
131+
}
83132

84133
void SiPixelPhase2DigiToCluster::acquire(device::Event const& iEvent, device::EventSetup const& iSetup) {
85134
auto const& input = iEvent.get(pixelDigiToken_);
@@ -117,7 +166,7 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE {
117166
assert(nDigis == nDigis_);
118167

119168
alpaka::memcpy(iEvent.queue(), digis_d_->buffer(), digis_h.buffer());
120-
algo_.makePhase2ClustersAsync(iEvent.queue(), clusterThresholds_, digis_d_->view(), nDigis_);
169+
algo_.makePhase2ClustersAsync(iEvent.queue(), clusterThresholds_, digis_d_->view(), nDigis_, offsetBPIX2_);
121170
}
122171

123172
void SiPixelPhase2DigiToCluster::produce(device::Event& iEvent, device::EventSetup const& iSetup) {

RecoLocalTracker/SiPixelClusterizer/plugins/alpaka/SiPixelRawToClusterKernel.dev.cc

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -661,7 +661,8 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE {
661661
Queue &queue,
662662
const SiPixelClusterThresholds clusterThresholds,
663663
SiPixelDigisSoAView &digis_view,
664-
const uint32_t numDigis) {
664+
const uint32_t numDigis,
665+
const uint32_t offsetBPIX2) {
665666
using namespace pixelClustering;
666667
using pixelTopology::Phase2;
667668
nDigis = numDigis;
@@ -744,7 +745,7 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE {
744745
// last element holds the number of all clusters
745746
const auto clusModuleStartLastElement = cms::alpakatools::make_device_view(
746747
queue, clusters_d->const_view().clusModuleStart().data() + numberOfModules, 1u);
747-
constexpr int startBPIX2 = pixelTopology::Phase2::layerStart[1];
748+
const int startBPIX2 = offsetBPIX2;
748749
// element startBPIX2 hold the number of clusters until BPIX2
749750
const auto bpix2ClusterStart =
750751
cms::alpakatools::make_device_view(queue, clusters_d->const_view().clusModuleStart().data() + startBPIX2, 1u);

RecoLocalTracker/SiPixelClusterizer/plugins/alpaka/SiPixelRawToClusterKernel.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,8 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE {
168168
void makePhase2ClustersAsync(Queue& queue,
169169
const SiPixelClusterThresholds clusterThresholds,
170170
SiPixelDigisSoAView& digis_view,
171-
const uint32_t numDigis);
171+
const uint32_t numDigis,
172+
const uint32_t offsetBPIX2);
172173

173174
SiPixelDigisSoACollection getDigis() {
174175
digis_d->setNModules(nModules_Clusters_h[0]);

0 commit comments

Comments
 (0)