Skip to content

Commit 58c198d

Browse files
authored
Merge pull request #45606 from p2l1-gtEmulator/pattern-writing
Phase-2 GT interface update and slice test pattern writers
2 parents 20dc5ff + 20188f2 commit 58c198d

26 files changed

+1249
-578
lines changed

DataFormats/L1Trigger/interface/P2GTCandidate.h

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ namespace l1t {
3232
typedef ap_int<14> hwEta_t;
3333
typedef ap_int<18> hwZ0_t;
3434
typedef ap_uint<11> hwIsolationPT_t;
35-
typedef ap_uint<4> hwQualityFlags_t;
35+
typedef ap_uint<6> hwQualityFlags_t;
3636
typedef ap_uint<10> hwQualityScore_t;
3737
typedef ap_uint<1> hwCharge_t;
3838
typedef ap_int<12> hwD0_t;
@@ -43,6 +43,7 @@ namespace l1t {
4343
typedef ap_int<10> hwSeed_z0_t;
4444
typedef ap_uint<16> hwScalarSumPT_t;
4545
typedef ap_uint<5> hwNumber_of_tracks_t;
46+
typedef ap_uint<4> hwNumber_of_displaced_tracks_t;
4647
typedef ap_uint<12> hwSum_pT_pv_t;
4748
typedef ap_uint<2> hwType_t;
4849
typedef ap_uint<8> hwNumber_of_tracks_in_pv_t;
@@ -117,6 +118,10 @@ namespace l1t {
117118
hwNumber_of_tracks_ = hwNumber_of_tracks.to_int();
118119
}
119120

121+
void setHwNumber_of_displaced_tracks(hwNumber_of_displaced_tracks_t hwNumber_of_displaced_tracks) {
122+
hwNumber_of_displaced_tracks_ = hwNumber_of_displaced_tracks.to_int();
123+
}
124+
120125
void setHwSum_pT_pv(hwSum_pT_pv_t hwSum_pT_pv) { hwSum_pT_pv_ = hwSum_pT_pv.to_int(); }
121126
void setHwType(hwType_t hwType) { hwType_ = hwType.to_int(); }
122127
void setHwNumber_of_tracks_in_pv(hwNumber_of_tracks_in_pv_t hwNumber_of_tracks_in_pv) {
@@ -238,6 +243,13 @@ namespace l1t {
238243
return static_cast<int>(hwNumber_of_tracks_);
239244
}
240245

246+
hwNumber_of_displaced_tracks_t hwNumber_of_displaced_tracks() const {
247+
if (!hwNumber_of_displaced_tracks_) {
248+
throw std::invalid_argument("Object doesn't have hwNumber_of_displaced_tracks");
249+
}
250+
return static_cast<int>(hwNumber_of_displaced_tracks_);
251+
}
252+
241253
hwSum_pT_pv_t hwSum_pT_pv() const {
242254
if (!hwSum_pT_pv_) {
243255
throw std::invalid_argument("Object doesn't have sum_pT_pv");
@@ -285,6 +297,7 @@ namespace l1t {
285297
int hwSeed_z0_toInt() const { return hwSeed_z0().to_int(); }
286298
int hwScalarSumPT_toInt() const { return hwScalarSumPT().to_int(); }
287299
int hwNumber_of_tracks_toInt() const { return hwNumber_of_tracks().to_int(); }
300+
int hwNumber_of_displaced_tracks_toInt() const { return hwNumber_of_displaced_tracks().to_int(); }
288301
int hwSum_pT_pv_toInt() const { return hwSum_pT_pv().to_int(); }
289302
int hwType_toInt() const { return hwType().to_int(); }
290303
int hwNumber_of_tracks_in_pv_toInt() const { return hwNumber_of_tracks_in_pv().to_int(); }
@@ -329,6 +342,7 @@ namespace l1t {
329342
Optional<int> hwSeed_z0_;
330343
Optional<int> hwScalarSumPT_;
331344
Optional<int> hwNumber_of_tracks_;
345+
Optional<int> hwNumber_of_displaced_tracks_;
332346

333347
// TODO ?
334348
Optional<int> hwSum_pT_pv_;

DataFormats/L1Trigger/src/P2GTCandidate.cc

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@ namespace l1t {
88
hwQualityFlags_ == rhs.hwQualityFlags_ && hwCharge_ == rhs.hwCharge_ && hwD0_ == rhs.hwD0_ &&
99
hwBeta_ == rhs.hwBeta_ && hwMass_ == rhs.hwMass_ && hwIndex_ == rhs.hwIndex_ &&
1010
hwSeed_pT_ == rhs.hwSeed_pT_ && hwSeed_z0_ == rhs.hwSeed_z0_ && hwScalarSumPT_ == rhs.hwScalarSumPT_ &&
11-
hwNumber_of_tracks_ == rhs.hwNumber_of_tracks_ && hwSum_pT_pv_ == rhs.hwSum_pT_pv_ &&
11+
hwNumber_of_tracks_ == rhs.hwNumber_of_tracks_ &&
12+
hwNumber_of_displaced_tracks_ == rhs.hwNumber_of_displaced_tracks_ && hwSum_pT_pv_ == rhs.hwSum_pT_pv_ &&
1213
hwType_ == rhs.hwType_ && hwNumber_of_tracks_in_pv_ == rhs.hwNumber_of_tracks_in_pv_ &&
1314
hwNumber_of_tracks_not_in_pv_ == rhs.hwNumber_of_tracks_not_in_pv_;
1415
}

DataFormats/L1Trigger/src/classes_def.xml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,8 @@
1616

1717

1818
<class name="l1t::P2GTCandidate::Optional<int>"/>
19-
<class name="l1t::P2GTCandidate" ClassVersion="10">
19+
<class name="l1t::P2GTCandidate" ClassVersion="11">
20+
<version ClassVersion="11" checksum="2947772579"/>
2021
<version ClassVersion="10" checksum="2728416623"/>
2122
</class>
2223
<class name="l1t::P2GTCandidateCollection"/>

L1Trigger/Phase2L1GT/README.md

Lines changed: 96 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -68,19 +68,19 @@ process.TripleTkMuon533 = l1tGTTripleObjectCond.clone(
6868
tag = cms.InputTag("l1tGTProducer", "GMTTkMuons"),
6969
minPt = cms.double(5),
7070
maxAbsEta = cms.double(2.4),
71-
minQualityScore = cms.uint32(0)
71+
qualityFlags = cms.uint32(0b0001)
7272
),
7373
collection2 = cms.PSet(
7474
tag = cms.InputTag("l1tGTProducer", "GMTTkMuons"),
7575
minPt = cms.double(3),
7676
maxAbsEta = cms.double(2.4),
77-
minQualityScore = cms.uint32(0)
77+
qualityFlags = cms.uint32(0b0001)
7878
),
7979
collection3 = cms.PSet(
8080
tag = cms.InputTag("l1tGTProducer", "GMTTkMuons"),
8181
minPt = cms.double(3),
8282
maxAbsEta = cms.double(2.4),
83-
minQualityScore = cms.uint32(0)
83+
qualityFlags = cms.uint32(0b0001)
8484
),
8585
# Correlations are ambiguous (can be {1,2}, {1,3}, or {2,3}), correlXY PSets are thus required.
8686
correl12 = cms.PSet(
@@ -116,9 +116,12 @@ Possible cuts on single quantities are:
116116
| `maxRelIsolationPt` | $\mathrm{isolationPT} < X \cdot p_T$ | `cms.double` | `ceil(X * pT_lsb * 2**18 / isolationPT)` |
117117
| `minPrimVertDz`* | $\| z_0 - Z_{0,i} \| > X $ | `cms.double` | `floor(X / z0_lsb)` |
118118
| `maxPrimVertDz`* | $\| z_0 - Z_{0,i} \| < X $ | `cms.double` | `ceil(X / z0_lsb)` |
119+
| `minPtMultiplicityCut`** | $\sum \left( p_T > X\right) \geq N$ | `cms.double` | `floor(X / pT_lsb)` |
119120

120121
\* : To select a $Z_0$ index $i$ from the `GTTPrimaryVert` collection for the comparison use `primVertex = cms.uint32(i)`. This parameter is mandatory when using a `maxPrimVertDz` cut.
121122

123+
\** : Requires additional parameter $N$ with `minPtMultiplicityN = cms.uint32(N)`.
124+
122125
### $\eta$-regional cuts
123126

124127
Certain cuts can also be specified $\eta$-region dependent, to allow different thresholds in different regions. In order to use this feature, one has to first provide the lower bounds for the regions via `regionsAbsEtaLowerBounds`. This parameter takes an `cms.vdouble`, whose length determines the number of $\eta$-regions. A region then ranges from the specified lower bound (inclusive) up to the next region's lower bound (exclusive). The last region's upper bound is always the maximum allowed $|\eta| = 2\pi$. One can use additional global $\eta$ or $|\eta|$ cuts to exclude large $|\eta|$ values, effectively overriding the last region's upper bound. The following cuts can be specified per each $\eta$-region:
@@ -196,3 +199,93 @@ process.pDoubleTkEle25_12 = cms.Path(process.DoubleTkEle2512)
196199

197200
algorithms.append(cms.PSet(expression = cms.string("pSingleTkMuon22 or pDoubleTkEle25_12")))
198201
```
202+
203+
## Firmware pattern writers
204+
205+
There are 3 types of Global Trigger pattern writers currently implemented.
206+
207+
* `L1GTAlgoBoardWriter`: Used to write out the algorithm bits into 2 channels. With config
208+
209+
| Name | Datatype | Description |
210+
|:-----|:----------:|:--------------|
211+
| `filename` | `cms.string` | The filename prefix to use for pattern files (required) |
212+
| `fileExtension` | `cms.string` | `txt`, `txt.gz` or `txt.xz` (default: `txt`) |
213+
| `algoBlocksTag` | `cms.InputTag` | AlgoBlock producer input tag to use (required) |
214+
| `maxFrames` | `cms.unit32` | Maximum number of frames (default: 1024) |
215+
| `maxEvents` | `cms.unit32` | Maximum number of events (default: events that fit into `maxFrames`) |
216+
| `channels` | `cms.vuint32` | Vector of 2 channel numbers for output (required) |
217+
| `algoBitMask` | `cms.vuint64` | Vector of 9 64 bit masks (default: all set to 1) |
218+
| `patternFormat` | `cms.string` | `APx`, `EMPv1`, `EMPv2` or `X2O` (default: `EMPv2`) |
219+
220+
* `L1GTFinOrBoardWriter`: Used to write out Final OR bits (beforeBxMaskAndPrescale, beforePrescale and final) each on a different channel for the low bits (0 - 575), mid bits (576 - 1151) and high bits (1152 - 1727). 9 channels in total + one channel for the passing Final OR trigger types. Config:
221+
222+
| Name | Datatype | Description |
223+
|:-----|:----------:|:--------------|
224+
| `filename` | `cms.string` | The filename prefix to use for pattern files (required) |
225+
| `fileExtension` | `cms.string` | `txt`, `txt.gz` or `txt.xz` (default: `txt`) |
226+
| `algoBlocksTag` | `cms.InputTag` | AlgoBlock producer input tag to use (required) |
227+
| `maxFrames` | `cms.unit32` | Maximum number of frames (default: 1024) |
228+
| `maxEvents` | `cms.unit32` | Maximum number of events (default: events that fit into `maxFrames`) |
229+
| `channelsLow` | `cms.vuint32` | Vector of 3 channel numbers for low bits (0 - 575) (required) |
230+
| `channelsMid` | `cms.vuint32` | Vector of 3 channel numbers for mid bits (576 - 1151) (required) |
231+
| `channelsHigh` | `cms.vuint32` | Vector of 3 channel numbers for high bits (1152 - 1727) (required) |
232+
| `channelFinOr` | `cms.uint32` | Channel for FinalOr trigger types (required) |
233+
| `patternFormat` | `cms.string` | `APx`, `EMPv1`, `EMPv2` or `X2O` (default: `EMPv2`) |
234+
235+
* `L1GTObjectBoardWriter`: Used to write input and output object patterns using the upstream provided pack functions.
236+
237+
| Name | Datatype | Description |
238+
|:-----|:----------:|:--------------|
239+
| `filename` | `cms.string` | The filename prefix to use for pattern files (required) |
240+
| `fileExtension` | `cms.string` | `txt`, `txt.gz` or `txt.xz` (default: `txt`) |
241+
| `maxFrames` | `cms.unit32` | Maximum number of frames (default: 1024) |
242+
| `maxEvents` | `cms.unit32` | Maximum number of events (default: events that fit into `maxFrames`) |
243+
| `patternFormat` | `cms.string` | `APx`, `EMPv1`, `EMPv2` or `X2O` (default: `EMPv2`) |
244+
| `bufferFileType`| `cms.string` | Either `input` or `output` (required) |
245+
| `InputChannels.GCT_1` | `cms.vuint32` | Channels for GCT link 1 (required if `bufferFileType` = `input`) |
246+
| `InputChannels.GMT_1` | `cms.vuint32` | Channels for GMT link 1 (required if `bufferFileType` = `input`) |
247+
| `InputChannels.GTT_1` | `cms.vuint32` | Channels for GTT link 1 (required if `bufferFileType` = `input`) |
248+
| `InputChannels.GTT_2` | `cms.vuint32` | Channels for GTT link 2 (required if `bufferFileType` = `input`) |
249+
| `InputChannels.GTT_3` | `cms.vuint32` | Channels for GTT link 3 (required if `bufferFileType` = `input`) |
250+
| `InputChannels.GTT_4` | `cms.vuint32` | Channels for GTT link 4 (required if `bufferFileType` = `input`) |
251+
| `InputChannels.CL2_1` | `cms.vuint32` | Channels for CL2 link 1 (required if `bufferFileType` = `input`) |
252+
| `InputChannels.CL2_2` | `cms.vuint32` | Channels for CL2 link 2 (required if `bufferFileType` = `input`) |
253+
| `InputChannels.CL2_3` | `cms.vuint32` | Channels for CL2 link 3 (required if `bufferFileType` = `input`) |
254+
| `OutputChannels.GTTPromptJets` | `cms.vuint32` | Channels for collection GTTPromptJets (required if `bufferFileType` = `output`) |
255+
| `OutputChannels.GTTDisplacedJets` | `cms.vuint32` | Channels for collection GTTDisplacedJets (required if `bufferFileType` = `output`) |
256+
| `OutputChannels.GTTPromptHtSum` | `cms.vuint32` | Channels for collection GTTPromptHtSum (required if `bufferFileType` = `output`) |
257+
| `OutputChannels.GTTDisplacedHtSum` | `cms.vuint32` | Channels for collection GTTDisplacedHtSum (required if `bufferFileType` = `output`) |
258+
| `OutputChannels.GTTEtSum` | `cms.vuint32` | Channels for collection GTTEtSum (required if `bufferFileType` = `output`) |
259+
| `OutputChannels.GTTPrimaryVert` | `cms.vuint32` | Channels for collection GTTPrimaryVert (required if `bufferFileType` = `output`) |
260+
| `OutputChannels.GMTSaPromptMuons` | `cms.vuint32` | Channels for collection GMTSaPromptMuons (required if `bufferFileType` = `output`) |
261+
| `OutputChannels.GMTSaDisplacedMuons` | `cms.vuint32` | Channels for collection GMTSaDisplacedMuons (required if `bufferFileType` = `output`) |
262+
| `OutputChannels.GMTTkMuons` | `cms.vuint32` | Channels for collection GMTTkMuons (required if `bufferFileType` = `output`) |
263+
| `OutputChannels.CL2JetsSC4` | `cms.vuint32` | Channels for collection CL2JetsSC4 (required if `bufferFileType` = `output`) |
264+
| `OutputChannels.CL2JetsSC8` | `cms.vuint32` | Channels for collection CL2JetsSC8 (required if `bufferFileType` = `output`) |
265+
| `OutputChannels.CL2Photons` | `cms.vuint32` | Channels for collection CL2Photons (required if `bufferFileType` = `output`) |
266+
| `OutputChannels.CL2Electrons` | `cms.vuint32` | Channels for collection CL2Electrons (required if `bufferFileType` = `output`) |
267+
| `OutputChannels.CL2Taus` | `cms.vuint32` | Channels for collection CL2Taus (required if `bufferFileType` = `output`) |
268+
| `OutputChannels.CL2EtSum` | `cms.vuint32` | Channels for collection CL2EtSum (required if `bufferFileType` = `output`) |
269+
| `OutputChannels.CL2HtSum` | `cms.vuint32` | Channels for collection CL2HtSum (required if `bufferFileType` = `output`) |
270+
271+
Note: In order to get consistency across multiple pattern files written by multiple writers it is recommended to produce patterns in single threaded mode only (i.e. `process.options.numberOfThreads = 1`).
272+
273+
Default configurations for `L1GTAlgoBoardWriter` and `L1GTObjectBoardWriter` in input and output direction can be pulled into the configuration for each of the two prototype implementations VU9P and VU13P via:
274+
275+
```python
276+
# Serenity VU9P prototype board
277+
process.load('L1Trigger.Phase2L1GT.l1tGTBoardWriterVU9P_cff')
278+
279+
process.pBoardDataInputVU9P = cms.EndPath(process.BoardDataInputVU9P)
280+
process.pBoardDataOutputObjectsVU9P = cms.EndPath(process.BoardDataOutputObjectsVU9P)
281+
process.pAlgoBitBoardDataVU9P = cms.EndPath(process.AlgoBitBoardDataVU9P)
282+
```
283+
284+
```python
285+
# Serenity VU13P prototype board
286+
process.load('L1Trigger.Phase2L1GT.l1tGTBoardWriterVU13P_cff')
287+
288+
process.pBoardDataInputVU13P = cms.EndPath(process.BoardDataInputVU13P)
289+
process.pBoardDataOutputObjectsVU13P = cms.EndPath(process.BoardDataOutputObjectsVU13P)
290+
process.pAlgoBitBoardDataVU13P = cms.EndPath(process.AlgoBitBoardDataVU13P)
291+
```

L1Trigger/Phase2L1GT/plugins/L1GTAlgoBoardWriter.cc

Lines changed: 51 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
#include "L1Trigger/DemonstratorTools/interface/utilities.h"
1717

1818
#include "FWCore/Utilities/interface/EDGetToken.h"
19+
#include "FWCore/Utilities/interface/EDMException.h"
1920

2021
#include "DataFormats/L1Trigger/interface/P2GTAlgoBlock.h"
2122

@@ -24,6 +25,7 @@
2425
#include <vector>
2526
#include <algorithm>
2627
#include <string>
28+
#include <array>
2729

2830
using namespace l1t;
2931

@@ -37,6 +39,9 @@ class L1GTAlgoBoardWriter : public edm::one::EDAnalyzer<> {
3739
void analyze(const edm::Event&, const edm::EventSetup&) override;
3840
void endJob() override;
3941

42+
unsigned int eventCounter_;
43+
unsigned int maxEvents_;
44+
4045
const std::array<unsigned int, 2> channels_;
4146
const std::array<unsigned long long, 9> algoBitMask_;
4247
const edm::EDGetTokenT<P2GTAlgoBlockMap> algoBlocksToken_;
@@ -46,17 +51,33 @@ class L1GTAlgoBoardWriter : public edm::one::EDAnalyzer<> {
4651
std::size_t tmuxCounter_;
4752
};
4853

54+
template <typename T, std::size_t N>
55+
static std::array<T, N> convert(std::vector<T> vec, const char* name) {
56+
if (vec.size() != N) {
57+
throw edm::Exception(edm::errors::Configuration)
58+
<< "The parameter '" << name << "' should have " << N << " elements, but has " << vec.size()
59+
<< " elements in the configuration.\n";
60+
}
61+
std::array<T, N> a;
62+
std::copy_n(std::make_move_iterator(vec.begin()), N, a.begin());
63+
return a;
64+
}
65+
4966
L1GTAlgoBoardWriter::L1GTAlgoBoardWriter(const edm::ParameterSet& config)
50-
: channels_(config.getParameter<std::array<unsigned int, 2>>("channels")),
51-
algoBitMask_(config.getParameter<std::array<unsigned long long, 9>>("algoBitMask")),
52-
algoBlocksToken_(consumes<P2GTAlgoBlockMap>(config.getParameter<edm::InputTag>("algoBlocksTag"))),
67+
: eventCounter_(0),
68+
maxEvents_(config.getUntrackedParameter<unsigned int>("maxEvents")),
69+
channels_(
70+
convert<unsigned int, 2>(config.getUntrackedParameter<std::vector<unsigned int>>("channels"), "channels")),
71+
algoBitMask_(convert<unsigned long long, 9>(
72+
config.getUntrackedParameter<std::vector<unsigned long long>>("algoBitMask"), "algoBitMask")),
73+
algoBlocksToken_(consumes<P2GTAlgoBlockMap>(config.getUntrackedParameter<edm::InputTag>("algoBlocksTag"))),
5374
boardDataWriter_(
54-
l1t::demo::parseFileFormat(config.getParameter<std::string>("patternFormat")),
55-
config.getParameter<std::string>("outputFilename"),
56-
config.getParameter<std::string>("outputFileExtension"),
75+
l1t::demo::parseFileFormat(config.getUntrackedParameter<std::string>("patternFormat")),
76+
config.getUntrackedParameter<std::string>("filename"),
77+
config.getUntrackedParameter<std::string>("fileExtension"),
5778
9,
5879
2,
59-
config.getParameter<unsigned int>("maxLines"),
80+
config.getUntrackedParameter<unsigned int>("maxFrames"),
6081
[](const std::array<unsigned int, 2>& channels) {
6182
l1t::demo::BoardDataWriter::ChannelMap_t channelMap;
6283
for (unsigned int channel : channels) {
@@ -94,6 +115,12 @@ void L1GTAlgoBoardWriter::analyze(const edm::Event& event, const edm::EventSetup
94115
}
95116

96117
tmuxCounter_ = (tmuxCounter_ + 1) % 2;
118+
eventCounter_++;
119+
120+
if (maxEvents_ != 0 && eventCounter_ == maxEvents_) {
121+
boardDataWriter_.flush();
122+
eventCounter_ = 0;
123+
}
97124
}
98125

99126
void L1GTAlgoBoardWriter::endJob() {
@@ -106,22 +133,23 @@ void L1GTAlgoBoardWriter::endJob() {
106133

107134
void L1GTAlgoBoardWriter::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
108135
edm::ParameterSetDescription desc;
109-
desc.add<std::string>("outputFilename");
110-
desc.add<std::string>("outputFileExtension", "txt");
111-
desc.add<edm::InputTag>("algoBlocksTag");
112-
desc.add<std::vector<unsigned int>>("channels");
113-
desc.add<std::vector<unsigned long long>>("algoBitMask",
114-
{0xffffffffffffffffull,
115-
0xffffffffffffffffull,
116-
0xffffffffffffffffull,
117-
0xffffffffffffffffull,
118-
0xffffffffffffffffull,
119-
0xffffffffffffffffull,
120-
0xffffffffffffffffull,
121-
0xffffffffffffffffull,
122-
0xffffffffffffffffull});
123-
desc.add<unsigned int>("maxLines", 1024);
124-
desc.add<std::string>("patternFormat", "EMPv2");
136+
desc.addUntracked<std::string>("filename");
137+
desc.addUntracked<std::string>("fileExtension", "txt");
138+
desc.addUntracked<edm::InputTag>("algoBlocksTag");
139+
desc.addUntracked<unsigned int>("maxEvents", 0);
140+
desc.addUntracked<std::vector<unsigned int>>("channels");
141+
desc.addUntracked<std::vector<unsigned long long>>("algoBitMask",
142+
{0xffffffffffffffffull,
143+
0xffffffffffffffffull,
144+
0xffffffffffffffffull,
145+
0xffffffffffffffffull,
146+
0xffffffffffffffffull,
147+
0xffffffffffffffffull,
148+
0xffffffffffffffffull,
149+
0xffffffffffffffffull,
150+
0xffffffffffffffffull});
151+
desc.addUntracked<unsigned int>("maxFrames", 1024);
152+
desc.addUntracked<std::string>("patternFormat", "EMPv2");
125153

126154
descriptions.addDefault(desc);
127155
}

L1Trigger/Phase2L1GT/plugins/L1GTDoubleObjectCond.cc

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,9 @@ bool L1GTDoubleObjectCond::filter(edm::StreamID, edm::Event& event, const edm::E
142142
}
143143
}
144144

145+
condition_result &= collection1Cuts_.checkCollection(*col1);
146+
condition_result &= collection2Cuts_.checkCollection(*col2);
147+
145148
if (condition_result) {
146149
std::unique_ptr<P2GTCandidateVectorRef> triggerCol1 = std::make_unique<P2GTCandidateVectorRef>();
147150

0 commit comments

Comments
 (0)