Skip to content

Commit 82b554f

Browse files
committed
Speedup of mkFit hit converters, and update of HLT customization
1 parent 68318d6 commit 82b554f

21 files changed

+502
-182
lines changed

RecoTracker/IterativeTracking/python/InitialStepPreSplitting_cff.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,8 @@
156156
import RecoTracker.MkFit.mkFitProducer_cfi as _mkFitProducer_cfi
157157
import RecoTracker.MkFit.mkFitOutputConverter_cfi as _mkFitOutputConverter_cfi
158158
mkFitSiPixelHitsPreSplitting = _mkFitSiPixelHitConverter_cfi.mkFitSiPixelHitConverter.clone(
159-
hits = 'siPixelRecHitsPreSplitting'
159+
hits = 'siPixelRecHitsPreSplitting',
160+
clusters = 'siPixelClustersPreSplitting'
160161
)
161162
mkFitSiStripHits = _mkFitSiStripHitConverter_cfi.mkFitSiStripHitConverter.clone() # TODO: figure out better place for this module?
162163
mkFitEventOfHitsPreSplitting = _mkFitEventOfHitsProducer_cfi.mkFitEventOfHitsProducer.clone(

RecoTracker/MkFit/plugins/MkFitEventOfHitsProducer.cc

Lines changed: 11 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
#include "Geometry/CommonTopologies/interface/StripTopology.h"
1919
#include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h"
2020

21-
#include "RecoTracker/MkFit/interface/MkFitClusterIndexToHit.h"
2221
#include "RecoTracker/MkFit/interface/MkFitEventOfHits.h"
2322
#include "RecoTracker/MkFit/interface/MkFitGeometry.h"
2423
#include "RecoTracker/MkFit/interface/MkFitHitWrapper.h"
@@ -39,15 +38,13 @@ class MkFitEventOfHitsProducer : public edm::global::EDProducer<> {
3938
private:
4039
void produce(edm::StreamID, edm::Event& iEvent, const edm::EventSetup& iSetup) const override;
4140

42-
void fill(const std::vector<const TrackingRecHit*>& hits,
43-
mkfit::EventOfHits& eventOfHits,
44-
const MkFitGeometry& mkFitGeom) const;
41+
void fill(const std::vector<int>& hits, mkfit::EventOfHits& eventOfHits, const MkFitGeometry& mkFitGeom) const;
4542

4643
const edm::EDGetTokenT<reco::BeamSpot> beamSpotToken_;
4744
const edm::EDGetTokenT<MkFitHitWrapper> pixelHitsToken_;
4845
const edm::EDGetTokenT<MkFitHitWrapper> stripHitsToken_;
49-
const edm::EDGetTokenT<MkFitClusterIndexToHit> pixelClusterIndexToHitToken_;
50-
const edm::EDGetTokenT<MkFitClusterIndexToHit> stripClusterIndexToHitToken_;
46+
const edm::EDGetTokenT<std::vector<int>> pixelLayerIndexToHitToken_;
47+
const edm::EDGetTokenT<std::vector<int>> stripLayerIndexToHitToken_;
5148
const edm::ESGetToken<MkFitGeometry, TrackerRecoGeometryRecord> mkFitGeomToken_;
5249
edm::ESGetToken<SiPixelQuality, SiPixelQualityRcd> pixelQualityToken_;
5350
edm::ESGetToken<SiStripQuality, SiStripQualityRcd> stripQualityToken_;
@@ -61,8 +58,8 @@ MkFitEventOfHitsProducer::MkFitEventOfHitsProducer(edm::ParameterSet const& iCon
6158
: beamSpotToken_{consumes(iConfig.getParameter<edm::InputTag>("beamSpot"))},
6259
pixelHitsToken_{consumes(iConfig.getParameter<edm::InputTag>("pixelHits"))},
6360
stripHitsToken_{consumes(iConfig.getParameter<edm::InputTag>("stripHits"))},
64-
pixelClusterIndexToHitToken_{consumes(iConfig.getParameter<edm::InputTag>("pixelHits"))},
65-
stripClusterIndexToHitToken_{consumes(iConfig.getParameter<edm::InputTag>("stripHits"))},
61+
pixelLayerIndexToHitToken_{consumes(iConfig.getParameter<edm::InputTag>("pixelHits"))},
62+
stripLayerIndexToHitToken_{consumes(iConfig.getParameter<edm::InputTag>("stripHits"))},
6663
mkFitGeomToken_{esConsumes()},
6764
putToken_{produces<MkFitEventOfHits>()},
6865
usePixelQualityDB_{iConfig.getParameter<bool>("usePixelQualityDB")},
@@ -171,8 +168,8 @@ void MkFitEventOfHitsProducer::produce(edm::StreamID iID, edm::Event& iEvent, co
171168
mkfit::StdSeq::loadDeads(*eventOfHits, deadvectors);
172169
}
173170

174-
fill(iEvent.get(pixelClusterIndexToHitToken_).hits(), *eventOfHits, mkFitGeom);
175-
fill(iEvent.get(stripClusterIndexToHitToken_).hits(), *eventOfHits, mkFitGeom);
171+
fill(iEvent.get(pixelLayerIndexToHitToken_), *eventOfHits, mkFitGeom);
172+
fill(iEvent.get(stripLayerIndexToHitToken_), *eventOfHits, mkFitGeom);
176173

177174
mkfit::StdSeq::cmssw_LoadHits_End(*eventOfHits);
178175

@@ -183,13 +180,12 @@ void MkFitEventOfHitsProducer::produce(edm::StreamID iID, edm::Event& iEvent, co
183180
iEvent.emplace(putToken_, std::move(eventOfHits));
184181
}
185182

186-
void MkFitEventOfHitsProducer::fill(const std::vector<const TrackingRecHit*>& hits,
183+
void MkFitEventOfHitsProducer::fill(const std::vector<int>& layerToHits,
187184
mkfit::EventOfHits& eventOfHits,
188185
const MkFitGeometry& mkFitGeom) const {
189-
for (unsigned int i = 0, end = hits.size(); i < end; ++i) {
190-
const auto* hit = hits[i];
191-
if (hit != nullptr) {
192-
const auto ilay = mkFitGeom.mkFitLayerNumber(hit->geographicalId());
186+
for (unsigned int i = 0, end = layerToHits.size(); i < end; ++i) {
187+
const auto ilay = layerToHits[i];
188+
if (ilay >= 0) {
193189
eventOfHits[ilay].registerHit(i);
194190
}
195191
}

RecoTracker/MkFit/plugins/MkFitPhase2HitConverter.cc

Lines changed: 27 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,16 @@
2020
namespace {
2121
class ConvertHitTraitsPhase2 {
2222
public:
23+
using Clusters = Phase2TrackerCluster1DCollectionNew;
24+
using Cluster = Clusters::data_type;
25+
2326
static constexpr bool applyCCC() { return false; }
24-
static std::nullptr_t clusterCharge(const Phase2TrackerRecHit1D& hit, DetId hitId) { return nullptr; }
27+
static float chargeScale(DetId id) { return 0; }
28+
static const Cluster& cluster(const Clusters& prod, unsigned int index) { return prod.data()[index]; }
29+
static std::nullptr_t clusterCharge(const Cluster&, float) { return nullptr; }
2530
static bool passCCC(std::nullptr_t) { return true; }
26-
static void setDetails(mkfit::Hit& mhit, const Phase2TrackerCluster1D& cluster, int shortId, std::nullptr_t) {
27-
mhit.setupAsStrip(shortId, (1 << 8) - 1, cluster.size());
31+
static void setDetails(mkfit::Hit& mhit, const Cluster& clu, int shortId, std::nullptr_t) {
32+
mhit.setupAsStrip(shortId, (1 << 8) - 1, clu.size());
2833
}
2934
};
3035
} // namespace
@@ -40,31 +45,34 @@ class MkFitPhase2HitConverter : public edm::global::EDProducer<> {
4045
void produce(edm::StreamID, edm::Event& iEvent, const edm::EventSetup& iSetup) const override;
4146

4247
const edm::EDGetTokenT<Phase2TrackerRecHit1DCollectionNew> siPhase2RecHitToken_;
48+
const edm::EDGetTokenT<Phase2TrackerCluster1DCollectionNew> siPhase2ClusterToken_;
4349
const edm::ESGetToken<TransientTrackingRecHitBuilder, TransientRecHitRecord> ttrhBuilderToken_;
4450
const edm::ESGetToken<TrackerTopology, TrackerTopologyRcd> ttopoToken_;
4551
const edm::ESGetToken<MkFitGeometry, TrackerRecoGeometryRecord> mkFitGeomToken_;
4652
const edm::EDPutTokenT<MkFitHitWrapper> wrapperPutToken_;
4753
const edm::EDPutTokenT<MkFitClusterIndexToHit> clusterIndexPutToken_;
54+
const edm::EDPutTokenT<std::vector<int>> layerIndexPutToken_;
4855
const edm::EDPutTokenT<std::vector<float>> clusterChargePutToken_;
4956
const ConvertHitTraitsPhase2 convertTraits_;
5057
};
5158

5259
MkFitPhase2HitConverter::MkFitPhase2HitConverter(edm::ParameterSet const& iConfig)
53-
: siPhase2RecHitToken_{consumes<Phase2TrackerRecHit1DCollectionNew>(
54-
iConfig.getParameter<edm::InputTag>("siPhase2Hits"))},
55-
ttrhBuilderToken_{esConsumes<TransientTrackingRecHitBuilder, TransientRecHitRecord>(
56-
iConfig.getParameter<edm::ESInputTag>("ttrhBuilder"))},
57-
ttopoToken_{esConsumes<TrackerTopology, TrackerTopologyRcd>()},
58-
mkFitGeomToken_{esConsumes<MkFitGeometry, TrackerRecoGeometryRecord>()},
59-
wrapperPutToken_{produces<MkFitHitWrapper>()},
60-
clusterIndexPutToken_{produces<MkFitClusterIndexToHit>()},
61-
clusterChargePutToken_{produces<std::vector<float>>()},
60+
: siPhase2RecHitToken_{consumes(iConfig.getParameter<edm::InputTag>("hits"))},
61+
siPhase2ClusterToken_{consumes(iConfig.getParameter<edm::InputTag>("clusters"))},
62+
ttrhBuilderToken_{esConsumes(iConfig.getParameter<edm::ESInputTag>("ttrhBuilder"))},
63+
ttopoToken_{esConsumes()},
64+
mkFitGeomToken_{esConsumes()},
65+
wrapperPutToken_{produces()},
66+
clusterIndexPutToken_{produces()},
67+
layerIndexPutToken_{produces()},
68+
clusterChargePutToken_{produces()},
6269
convertTraits_{} {}
6370

6471
void MkFitPhase2HitConverter::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
6572
edm::ParameterSetDescription desc;
6673

67-
desc.add("siPhase2Hits", edm::InputTag{"siPhase2RecHits"});
74+
desc.add("hits", edm::InputTag{"siPhase2RecHits"});
75+
desc.add("clusters", edm::InputTag{"siPhase2Clusters"});
6876
desc.add("ttrhBuilder", edm::ESInputTag{"", "WithTrackAngle"});
6977

7078
descriptions.add("mkFitPhase2HitConverterDefault", desc);
@@ -77,6 +85,7 @@ void MkFitPhase2HitConverter::produce(edm::StreamID iID, edm::Event& iEvent, con
7785

7886
MkFitHitWrapper hitWrapper;
7987
MkFitClusterIndexToHit clusterIndexToHit;
88+
std::vector<int> layerIndexToHit;
8089
std::vector<float> clusterCharge;
8190

8291
edm::ProductID stripClusterID;
@@ -85,18 +94,22 @@ void MkFitPhase2HitConverter::produce(edm::StreamID iID, edm::Event& iEvent, con
8594
if (not phase2Hits.empty()) {
8695
stripClusterID = mkfit::convertHits(ConvertHitTraitsPhase2{},
8796
phase2Hits,
97+
iEvent.get(siPhase2ClusterToken_),
8898
hitWrapper.hits(),
8999
clusterIndexToHit.hits(),
100+
layerIndexToHit,
90101
dummy,
91102
ttopo,
92103
ttrhBuilder,
93-
mkFitGeom);
104+
mkFitGeom,
105+
phase2Hits.dataSize());
94106
}
95107

96108
hitWrapper.setClustersID(stripClusterID);
97109

98110
iEvent.emplace(wrapperPutToken_, std::move(hitWrapper));
99111
iEvent.emplace(clusterIndexPutToken_, std::move(clusterIndexToHit));
112+
iEvent.emplace(layerIndexPutToken_, std::move(layerIndexToHit));
100113
iEvent.emplace(clusterChargePutToken_, std::move(clusterCharge));
101114
}
102115

RecoTracker/MkFit/plugins/MkFitProducer.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -177,7 +177,7 @@ void MkFitProducer::produce(edm::StreamID iID, edm::Event& iEvent, const edm::Ev
177177
stripContainerMask.copyMaskTo(stripMask);
178178
}
179179
} else {
180-
if (mkFitGeom.isPhase1())
180+
if (mkFitGeom.isPhase1() && minGoodStripCharge_ > 0)
181181
stripClusterChargeCut(iEvent.get(stripClusterChargeToken_), stripMask);
182182
}
183183

RecoTracker/MkFit/plugins/MkFitSiPixelHitConverter.cc

Lines changed: 27 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,16 @@
1919

2020
namespace {
2121
struct ConvertHitTraits {
22+
using Clusters = SiPixelClusterCollectionNew;
23+
using Cluster = Clusters::data_type;
24+
2225
static constexpr bool applyCCC() { return false; }
23-
static std::nullptr_t clusterCharge(const SiPixelRecHit& hit, DetId hitId) { return nullptr; }
26+
static float chargeScale(DetId) { return 0; }
27+
static const Cluster& cluster(const Clusters& prod, unsigned int index) { return prod.data()[index]; }
28+
static std::nullptr_t clusterCharge(const Cluster&, float) { return nullptr; }
2429
static bool passCCC(std::nullptr_t) { return true; }
25-
static void setDetails(mkfit::Hit& mhit, const SiPixelCluster& cluster, int shortId, std::nullptr_t) {
26-
mhit.setupAsPixel(shortId, cluster.sizeX(), cluster.sizeY());
30+
static void setDetails(mkfit::Hit& mhit, const Cluster& clu, int shortId, std::nullptr_t) {
31+
mhit.setupAsPixel(shortId, clu.sizeX(), clu.sizeY());
2732
}
2833
};
2934
} // namespace
@@ -39,26 +44,30 @@ class MkFitSiPixelHitConverter : public edm::global::EDProducer<> {
3944
void produce(edm::StreamID, edm::Event& iEvent, const edm::EventSetup& iSetup) const override;
4045

4146
const edm::EDGetTokenT<SiPixelRecHitCollection> pixelRecHitToken_;
47+
const edm::EDGetTokenT<SiPixelClusterCollectionNew> pixelClusterToken_;
4248
const edm::ESGetToken<TransientTrackingRecHitBuilder, TransientRecHitRecord> ttrhBuilderToken_;
4349
const edm::ESGetToken<TrackerTopology, TrackerTopologyRcd> ttopoToken_;
4450
const edm::ESGetToken<MkFitGeometry, TrackerRecoGeometryRecord> mkFitGeomToken_;
4551
const edm::EDPutTokenT<MkFitHitWrapper> wrapperPutToken_;
4652
const edm::EDPutTokenT<MkFitClusterIndexToHit> clusterIndexPutToken_;
53+
const edm::EDPutTokenT<std::vector<int>> layerIndexPutToken_;
4754
};
4855

4956
MkFitSiPixelHitConverter::MkFitSiPixelHitConverter(edm::ParameterSet const& iConfig)
50-
: pixelRecHitToken_{consumes<SiPixelRecHitCollection>(iConfig.getParameter<edm::InputTag>("hits"))},
51-
ttrhBuilderToken_{esConsumes<TransientTrackingRecHitBuilder, TransientRecHitRecord>(
52-
iConfig.getParameter<edm::ESInputTag>("ttrhBuilder"))},
53-
ttopoToken_{esConsumes<TrackerTopology, TrackerTopologyRcd>()},
54-
mkFitGeomToken_{esConsumes<MkFitGeometry, TrackerRecoGeometryRecord>()},
55-
wrapperPutToken_{produces<MkFitHitWrapper>()},
56-
clusterIndexPutToken_{produces<MkFitClusterIndexToHit>()} {}
57+
: pixelRecHitToken_{consumes(iConfig.getParameter<edm::InputTag>("hits"))},
58+
pixelClusterToken_{consumes(iConfig.getParameter<edm::InputTag>("clusters"))},
59+
ttrhBuilderToken_{esConsumes(iConfig.getParameter<edm::ESInputTag>("ttrhBuilder"))},
60+
ttopoToken_{esConsumes()},
61+
mkFitGeomToken_{esConsumes()},
62+
wrapperPutToken_{produces()},
63+
clusterIndexPutToken_{produces()},
64+
layerIndexPutToken_{produces()} {}
5765

5866
void MkFitSiPixelHitConverter::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
5967
edm::ParameterSetDescription desc;
6068

6169
desc.add("hits", edm::InputTag{"siPixelRecHits"});
70+
desc.add("clusters", edm::InputTag{"siPixelClusters"});
6271
desc.add("ttrhBuilder", edm::ESInputTag{"", "WithTrackAngle"});
6372

6473
descriptions.addWithDefaultLabel(desc);
@@ -71,21 +80,27 @@ void MkFitSiPixelHitConverter::produce(edm::StreamID iID, edm::Event& iEvent, co
7180

7281
MkFitHitWrapper hitWrapper;
7382
MkFitClusterIndexToHit clusterIndexToHit;
83+
std::vector<int> layerIndexToHit;
7484

7585
std::vector<float> dummy;
86+
auto const& hits = iEvent.get(pixelRecHitToken_);
7687
auto pixelClusterID = mkfit::convertHits(ConvertHitTraits{},
77-
iEvent.get(pixelRecHitToken_),
88+
hits,
89+
iEvent.get(pixelClusterToken_),
7890
hitWrapper.hits(),
7991
clusterIndexToHit.hits(),
92+
layerIndexToHit,
8093
dummy,
8194
ttopo,
8295
ttrhBuilder,
83-
mkFitGeom);
96+
mkFitGeom,
97+
hits.dataSize());
8498

8599
hitWrapper.setClustersID(pixelClusterID);
86100

87101
iEvent.emplace(wrapperPutToken_, std::move(hitWrapper));
88102
iEvent.emplace(clusterIndexPutToken_, std::move(clusterIndexToHit));
103+
iEvent.emplace(layerIndexPutToken_, std::move(layerIndexToHit));
89104
}
90105

91106
DEFINE_FWK_MODULE(MkFitSiPixelHitConverter);

RecoTracker/MkFit/plugins/MkFitSiStripHitConverter.cc

Lines changed: 39 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -22,14 +22,16 @@ namespace {
2222
class ConvertHitTraits {
2323
public:
2424
ConvertHitTraits(float minCharge) : minGoodStripCharge_(minCharge) {}
25+
using Clusters = edmNew::DetSetVector<SiStripCluster>;
26+
using Cluster = Clusters::data_type;
2527

2628
static constexpr bool applyCCC() { return true; }
27-
static float clusterCharge(const SiStripRecHit2D& hit, DetId hitId) {
28-
return siStripClusterTools::chargePerCM(hitId, hit.firstClusterRef().stripCluster());
29-
}
29+
static float chargeScale(DetId id) { return siStripClusterTools::sensorThicknessInverse(id); }
30+
static const Cluster& cluster(const Clusters& prod, unsigned int index) { return prod.data()[index]; }
31+
static float clusterCharge(const Cluster& clu, float scale) { return clu.charge() * scale; }
3032
bool passCCC(float charge) const { return charge > minGoodStripCharge_; }
31-
static void setDetails(mkfit::Hit& mhit, const SiStripCluster& cluster, int shortId, float charge) {
32-
mhit.setupAsStrip(shortId, charge, cluster.amplitudes().size());
33+
static void setDetails(mkfit::Hit& mhit, const Cluster& clu, int shortId, float charge) {
34+
mhit.setupAsStrip(shortId, charge, clu.size());
3335
}
3436

3537
private:
@@ -49,25 +51,28 @@ class MkFitSiStripHitConverter : public edm::global::EDProducer<> {
4951

5052
const edm::EDGetTokenT<SiStripRecHit2DCollection> stripRphiRecHitToken_;
5153
const edm::EDGetTokenT<SiStripRecHit2DCollection> stripStereoRecHitToken_;
54+
const edm::EDGetTokenT<edmNew::DetSetVector<SiStripCluster>> stripClusterToken_;
5255
const edm::ESGetToken<TransientTrackingRecHitBuilder, TransientRecHitRecord> ttrhBuilderToken_;
5356
const edm::ESGetToken<TrackerTopology, TrackerTopologyRcd> ttopoToken_;
5457
const edm::ESGetToken<MkFitGeometry, TrackerRecoGeometryRecord> mkFitGeomToken_;
5558
const edm::EDPutTokenT<MkFitHitWrapper> wrapperPutToken_;
5659
const edm::EDPutTokenT<MkFitClusterIndexToHit> clusterIndexPutToken_;
60+
const edm::EDPutTokenT<std::vector<int>> layerIndexPutToken_;
5761
const edm::EDPutTokenT<std::vector<float>> clusterChargePutToken_;
5862
const ConvertHitTraits convertTraits_;
5963
};
6064

6165
MkFitSiStripHitConverter::MkFitSiStripHitConverter(edm::ParameterSet const& iConfig)
62-
: stripRphiRecHitToken_{consumes<SiStripRecHit2DCollection>(iConfig.getParameter<edm::InputTag>("rphiHits"))},
63-
stripStereoRecHitToken_{consumes<SiStripRecHit2DCollection>(iConfig.getParameter<edm::InputTag>("stereoHits"))},
64-
ttrhBuilderToken_{esConsumes<TransientTrackingRecHitBuilder, TransientRecHitRecord>(
65-
iConfig.getParameter<edm::ESInputTag>("ttrhBuilder"))},
66-
ttopoToken_{esConsumes<TrackerTopology, TrackerTopologyRcd>()},
67-
mkFitGeomToken_{esConsumes<MkFitGeometry, TrackerRecoGeometryRecord>()},
68-
wrapperPutToken_{produces<MkFitHitWrapper>()},
69-
clusterIndexPutToken_{produces<MkFitClusterIndexToHit>()},
70-
clusterChargePutToken_{produces<std::vector<float>>()},
66+
: stripRphiRecHitToken_{consumes(iConfig.getParameter<edm::InputTag>("rphiHits"))},
67+
stripStereoRecHitToken_{consumes(iConfig.getParameter<edm::InputTag>("stereoHits"))},
68+
stripClusterToken_{consumes(iConfig.getParameter<edm::InputTag>("clusters"))},
69+
ttrhBuilderToken_{esConsumes(iConfig.getParameter<edm::ESInputTag>("ttrhBuilder"))},
70+
ttopoToken_{esConsumes()},
71+
mkFitGeomToken_{esConsumes()},
72+
wrapperPutToken_{produces()},
73+
clusterIndexPutToken_{produces()},
74+
layerIndexPutToken_{produces()},
75+
clusterChargePutToken_{produces()},
7176
convertTraits_{static_cast<float>(
7277
iConfig.getParameter<edm::ParameterSet>("minGoodStripCharge").getParameter<double>("value"))} {}
7378

@@ -76,6 +81,7 @@ void MkFitSiStripHitConverter::fillDescriptions(edm::ConfigurationDescriptions&
7681

7782
desc.add("rphiHits", edm::InputTag{"siStripMatchedRecHits", "rphiRecHit"});
7883
desc.add("stereoHits", edm::InputTag{"siStripMatchedRecHits", "stereoRecHit"});
84+
desc.add("clusters", edm::InputTag{"siStripClusters"});
7985
desc.add("ttrhBuilder", edm::ESInputTag{"", "WithTrackAngle"});
8086

8187
edm::ParameterSetDescription descCCC;
@@ -92,16 +98,29 @@ void MkFitSiStripHitConverter::produce(edm::StreamID iID, edm::Event& iEvent, co
9298

9399
MkFitHitWrapper hitWrapper;
94100
MkFitClusterIndexToHit clusterIndexToHit;
101+
std::vector<int> layerIndexToHit;
95102
std::vector<float> clusterCharge;
96103

97-
auto convert = [&](auto& hits) {
98-
return mkfit::convertHits(
99-
convertTraits_, hits, hitWrapper.hits(), clusterIndexToHit.hits(), clusterCharge, ttopo, ttrhBuilder, mkFitGeom);
100-
};
101-
102104
edm::ProductID stripClusterID;
103105
const auto& stripRphiHits = iEvent.get(stripRphiRecHitToken_);
104106
const auto& stripStereoHits = iEvent.get(stripStereoRecHitToken_);
107+
const auto maxSizeGuess(stripRphiHits.dataSize() + stripStereoHits.dataSize());
108+
auto const& clusters = iEvent.get(stripClusterToken_);
109+
110+
auto convert = [&](auto& hits) {
111+
return mkfit::convertHits(convertTraits_,
112+
hits,
113+
clusters,
114+
hitWrapper.hits(),
115+
clusterIndexToHit.hits(),
116+
layerIndexToHit,
117+
clusterCharge,
118+
ttopo,
119+
ttrhBuilder,
120+
mkFitGeom,
121+
maxSizeGuess);
122+
};
123+
105124
if (not stripRphiHits.empty()) {
106125
stripClusterID = convert(stripRphiHits);
107126
}
@@ -119,6 +138,7 @@ void MkFitSiStripHitConverter::produce(edm::StreamID iID, edm::Event& iEvent, co
119138

120139
iEvent.emplace(wrapperPutToken_, std::move(hitWrapper));
121140
iEvent.emplace(clusterIndexPutToken_, std::move(clusterIndexToHit));
141+
iEvent.emplace(layerIndexPutToken_, std::move(layerIndexToHit));
122142
iEvent.emplace(clusterChargePutToken_, std::move(clusterCharge));
123143
}
124144

0 commit comments

Comments
 (0)