Warning, /L1Trigger/Phase2L1GT/README.md is written in an unsupported language. File is not indexed.
0001 # Menu configuration manual
0002
0003 ## Conditions
0004
0005 The basic building blocks of a Phase-2 Global Trigger menu are conditions. In order to start writing a menu one should first pull the standard definitions for the conditions into the configuration. These standard definitions contain the scale parameters (c.f. [l1tGTScales.py](python/l1tGTScales.py)) as well as the values for the $\cos$ and $\cosh$ LUT (computed in [l1tGTSingleInOutLUT.py](python/l1tGTSingleInOutLUT.py)).
0006
0007 ```python
0008 from L1Trigger.Phase2L1GT.l1tGTSingleObjectCond_cfi import l1tGTSingleObjectCond
0009 from L1Trigger.Phase2L1GT.l1tGTDoubleObjectCond_cfi import l1tGTDoubleObjectCond
0010 from L1Trigger.Phase2L1GT.l1tGTTripleObjectCond_cfi import l1tGTTripleObjectCond
0011 from L1Trigger.Phase2L1GT.l1tGTQuadObjectCond_cfi import l1tGTQuadObjectCond
0012 ```
0013 One can utilize the standard definitions by invoking the `clone` function and specifying a cut configuration as well as the collection(s) the condition should act on. This is done by setting the corresponding input tag(s) to use, `tag = cms.InputTag("l1tGTProducer", "XXX")`, with `XXX` as the collection name. Available collections are:
0014
0015 | GCT | GMT | GTT | Correlator Layer 2 |
0016 |:-----|:----------|:-------------|:--------|
0017 | ~~`GCTNonIsoEg`~~ | `GMTSaPromptMuons` | `GTTPromptJets` | `CL2JetsSC4` |
0018 | ~~`GCTIsoEg`~~ | `GMTSaDisplacedMuons` | `GTTDisplacedJets` | `CL2JetsSC8` |
0019 | ~~`GCTJets`~~ | `GMTTkMuons` | ~~`GTTPhiCandidates`~~ | `CL2Taus` |
0020 | ~~`GCTTaus`~~ | ~~`GMTTopo`~~ | ~~`GTTRhoCandidates`~~ | `CL2Electrons` |
0021 | ~~`GCTHtSum`~~ | | ~~`GTTBsCandidates`~~ | `CL2Photons` |
0022 | ~~`GCTEtSum`~~ | | ~~`GTTHadronicTaus`~~ | `CL2HtSum` |
0023 | | | `GTTPrimaryVert` | `CL2EtSum` |
0024 | | | ~~`GTTPromptHtSum`~~ | |
0025 | | | ~~`GTTDisplacedHtSum`~~ | |
0026 | | | ~~`GTTEtSum`~~ | |
0027
0028 ~~`XXX`~~: Not yet available from upstream emulator.
0029
0030 A condition can have any number of cuts. Cuts omitted from the configuration are regarded as disabled. They can either be applied to single objects of a collection or to topological correlations within one or between multiple collections. In general the configuration follows an ambiguity scheme, as long as there are no ambiguities the configuration should be specified in the top level `PSet`. If there are ambiguities the configuration requires either a `collectionX` sub `PSet` for single object cuts or a `correlXY`/`correlXYZ` sub `PSet` for correlations. For illustration the following shows some examples:
0031
0032 ```python
0033 process.SingleTkMuon22 = l1tGTSingleObjectCond.clone(
0034 # No ambiguities, thus everything in the top level PSet
0035 tag = cms.InputTag("l1tGTProducer", "GMTTkMuons"),
0036 maxAbsEta = cms.double(2.4),
0037 regionsAbsEtaLowerBounds = cms.vdouble(0, 0.83, 1.24),
0038 regionsMinPt = cms.vdouble(20, 20, 20)
0039 )
0040 ```
0041
0042 ```python
0043 process.DoubleTkEle2512 = l1tGTDoubleObjectCond.clone(
0044 # 2 single cuts, thus cuts are ambiguous and require collectionX PSets.
0045 collection1 = cms.PSet(
0046 tag = cms.InputTag("l1tGTProducer", "CL2Electrons"),
0047 minPt = cms.double(20),
0048 maxAbsEta = cms.double(2.4),
0049 regionsAbsEtaLowerBounds = cms.vdouble(0, 1.479),
0050 regionsQualityFlags = cms.vuint32(0b0010, 0b0000)
0051 ),
0052 collection2 = cms.PSet(
0053 tag = cms.InputTag("l1tGTProducer", "CL2Electrons"),
0054 minPt = cms.double(9),
0055 maxAbsEta = cms.double(2.4),
0056 regionsAbsEtaLowerBounds = cms.vdouble(0, 1.479),
0057 regionsQualityFlags = cms.vuint32(0b0010, 0b0000)
0058 ),
0059 # Correlation can only be between 1 and 2 -> no ambiguities
0060 maxDz = cms.double(1),
0061 )
0062 ```
0063
0064 ```python
0065 process.TripleTkMuon533 = l1tGTTripleObjectCond.clone(
0066 # 3 single cuts, thus cuts are ambiguous and require collectionX PSets.
0067 collection1 = cms.PSet(
0068 tag = cms.InputTag("l1tGTProducer", "GMTTkMuons"),
0069 minPt = cms.double(5),
0070 maxAbsEta = cms.double(2.4),
0071 qualityFlags = cms.uint32(0b0001)
0072 ),
0073 collection2 = cms.PSet(
0074 tag = cms.InputTag("l1tGTProducer", "GMTTkMuons"),
0075 minPt = cms.double(3),
0076 maxAbsEta = cms.double(2.4),
0077 qualityFlags = cms.uint32(0b0001)
0078 ),
0079 collection3 = cms.PSet(
0080 tag = cms.InputTag("l1tGTProducer", "GMTTkMuons"),
0081 minPt = cms.double(3),
0082 maxAbsEta = cms.double(2.4),
0083 qualityFlags = cms.uint32(0b0001)
0084 ),
0085 # Correlations are ambiguous (can be {1,2}, {1,3}, or {2,3}), correlXY PSets are thus required.
0086 correl12 = cms.PSet(
0087 maxDz = cms.double(1)
0088 ),
0089 )
0090 ```
0091
0092 ### Single cuts
0093
0094 Possible cuts on single quantities are:
0095
0096 | Name | Expression | Datatype | Hardware conversion |
0097 |:-----|:----------:|:-------------:|:--------:|
0098 | `minPt` | $p_T > X$ or $\| \sum \vec p_T \| > X$ | `cms.double` | `floor(X / pT_lsb)` |
0099 | `maxPt` | $p_T < X$ or $\| \sum \vec p_T \| < X$ | `cms.double` | `ceil(X / pT_lsb)` |
0100 | `minEta` | $\eta > X$ | `cms.double` | `floor(X / eta_lsb)` |
0101 | `maxEta` | $\eta < X$ | `cms.double` | `ceil(X / eta_lsb)` |
0102 | `minPhi` | $\phi > X$ | `cms.double` | `floor(X / phi_lsb)` |
0103 | `maxPhi` | $\phi < X$ | `cms.double` | `ceil(X / phi_lsb)` |
0104 | `minZ0` | $z_0 > X$ | `cms.double` | `floor(X / z0_lsb)` |
0105 | `maxZ0` | $z_0 < X$ | `cms.double` | `ceil(X / z0_lsb)` |
0106 | `minScalarSumPt` | $\sum p_T > X$ | `cms.double` | `floor(X / scalarSumPT_lsb)` |
0107 | `maxScalarSumPt` | $\sum p_T < X$ | `cms.double` | `ceil(X / scalarSumPT_lsb)` |
0108 | `minQualityScore` | $\mathrm{qualityScore} > X$ | `cms.uint32` | `X` |
0109 | `maxQualityScore` | $\mathrm{qualityScore} < X$ | `cms.uint32` | `X` |
0110 | `qualityFlags` | $\mathrm{qualityFlags} \wedge X = X$ | `cms.uint32` | `X` |
0111 | `minAbsEta` | $\| \eta \| > X $ | `cms.double` | `floor(X / eta_lsb)` |
0112 | `maxAbsEta` | $\| \eta \| < X $ | `cms.double` | `ceil(X / eta_lsb)` |
0113 | `minIsolationPt` | $\mathrm{isolationPT} > X$ | `cms.double` | `floor(X / isolationPT_lsb)` |
0114 | `maxIsolationPt` | $\mathrm{isolationPT} < X$ | `cms.double` | `ceil(X / isolationPT_lsb)` |
0115 | `minRelIsolationPt` | $\mathrm{isolationPT} > X \cdot p_T$ | `cms.double` | `floor(X * pT_lsb * 2**18 / isolationPT)` |
0116 | `maxRelIsolationPt` | $\mathrm{isolationPT} < X \cdot p_T$ | `cms.double` | `ceil(X * pT_lsb * 2**18 / isolationPT)` |
0117 | `minPrimVertDz`* | $\| z_0 - Z_{0,i} \| > X $ | `cms.double` | `floor(X / z0_lsb)` |
0118 | `maxPrimVertDz`* | $\| z_0 - Z_{0,i} \| < X $ | `cms.double` | `ceil(X / z0_lsb)` |
0119 | `minPtMultiplicityCut`** | $\sum \left( p_T > X\right) \geq N$ | `cms.double` | `floor(X / pT_lsb)` |
0120
0121 \* : 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.
0122
0123 \** : Requires additional parameter $N$ with `minPtMultiplicityN = cms.uint32(N)`.
0124
0125 ### $\eta$-regional cuts
0126
0127 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:
0128
0129 | Name | Expression | Datatype | Hardware conversion |
0130 |:-----|:----------:|:-------------:|:--------:|
0131 | `regionsMinPt` | $p_T > X$ or $\| \sum \vec p_T \| > X$ | `cms.vdouble` | `floor(X / pT_lsb)` |
0132 | `regionsQualityFlags` | $\mathrm{qualityFlags} \wedge X = X$ | `cms.vuint32` | `X` |
0133 | `regionsMaxRelIsolationPt` | $\mathrm{isolationPT} < X \cdot p_T$ | `cms.vdouble` | `ceil(X * pT_lsb * 2**18 / isolationPT)` |
0134
0135 Note: The vector parameters for the $\eta$-region cuts must have the same length as the number of $\eta$-regions initially set via `regionsAbsEtaLowerBounds`.
0136
0137 ### Correlational cuts
0138
0139 Cuts can also be performed on topological correlations. The following 2-body correlational cuts are available:
0140
0141 | Name | Expression | Datatype | Hardware conversion |
0142 |:-----|:----------:|:-------------:|:--------:|
0143 | `minDEta` | $\|\eta_1 - \eta_2\| > X$ | `cms.double` | `floor(X / eta_lsb)` |
0144 | `maxDEta` | $\|\eta_1 - \eta_2\| < X$ | `cms.double` | `ceil(X / eta_lsb)` |
0145 | `minDPhi` | $\Delta \phi > X$ | `cms.double` | `floor(X / phi_lsb)` |
0146 | `maxDPhi` | $\Delta \phi < X$ | `cms.double` | `ceil(X / phi_lsb)` |
0147 | `minDz` | $\|z_{0,1} - z_{0,2}\| > X$ | `cms.double` | `floor(X / z0_lsb)` |
0148 | `maxDz` | $\|z_{0,1} - z_{0,2}\| < X$ | `cms.double` | `ceil(X / z0_lsb)` |
0149 | `minDR` | $\Delta \phi ^2 + \Delta \eta^2 > X^2$ | `cms.double` | `floor(X**2 / eta_lsb**2)` |
0150 | `maxDR` | $\Delta \phi ^2 + \Delta \eta^2 < X^2$ | `cms.double` | `ceil(X**2 / eta_lsb**2)` |
0151 | `minInvMass` | $p_{T,1} \, p_{T,2} \left[ \cosh(\Delta \eta) - \cos(\Delta \phi) \right] > X^2/2$ | `cms.double` | `floor(X**2 * LUT_Scale / (2 * pT_lsb**2))` |
0152 | `maxInvMass` | $p_{T,1} \, p_{T,2} \left[ \cosh(\Delta \eta) - \cos(\Delta \phi) \right] < X^2/2$ | `cms.double` | `ceil(X**2 * LUT_Scale / (2 * pT_lsb**2))` |
0153 | `minTransMass` | $p_{T,1} \, p_{T,2} \left[1 - \cos(\Delta \phi) \right] > X^2/2$ | `cms.double` | `floor(X**2 * LUT_Scale / (2 * pT_lsb**2))` |
0154 | `maxTransMass` | $p_{T,1} \, p_{T,2} \left[1 - \cos(\Delta \phi) \right] < X^2/2$ | `cms.double` | `ceil(X**2 * LUT_Scale / (2 * pT_lsb**2))` |
0155 | `minCombPt` | $p_{T,1}^2 + p_{T,2}^2 + 2 p_{T,1} \, p_{T,2} \cos(\Delta \phi) > X^2$ | `cms.double` | `floor(X**2 * LUT_Scale / pT_lsb**2)` |
0156 | `maxCombPt` | $p_{T,1}^2 + p_{T,2}^2 + 2 p_{T,1} \, p_{T,2} \cos(\Delta \phi) < X^2$ | `cms.double` | `ceil(X**2 * LUT_Scale / pT_lsb**2)` |
0157 | `minInvMassOverDR` | $m^2/2 > X^2 \cdot \Delta R^2/2$ | `cms.double` | `floor(X**2 * LUT_Scale * 2**19 * eta_lsb**2 / (2 * pT_lsb**2))` |
0158 | `maxInvMassOverDR` | $m^2/2 < X^2 \cdot \Delta R^2/2$ | `cms.double` | `ceil(X**2 * LUT_Scale * 2**19 * eta_lsb**2 / (2 * pT_lsb**2))` |
0159 | `os` | $q_1 \neq q_2$ | `cms.bool` | |
0160 | `ss` | $q_1 = q_2$ | `cms.bool` | |
0161
0162 Note: $\Delta \eta = |\eta_1 - \eta_2|$, $\Delta \phi$ is the smallest angle between two legs, also taking into account that $\phi$ wraps around i.e. $\phi = \pi = - \pi$.
0163
0164 The following 3-body correlational cuts are available:
0165
0166 | Name | Expression | Datatype | Hardware conversion |
0167 |:-----|:----------:|:-------------:|:--------:|
0168 | `minInvMass` | $\frac{m_{1,2}^2}{2} + \frac{m_{1,3}^2}{2} + \frac{m_{2,3}^2}{2} > \frac{X^2}{2}$ | `cms.double` | `floor(X**2 * LUT_Scale / (2 * pT_lsb**2))` |
0169 | `maxInvMass` | $\frac{m_{1,2}^2}{2} + \frac{m_{1,3}^2}{2} + \frac{m_{2,3}^2}{2} < \frac{X^2}{2}$ | `cms.double` | `ceil(X**2 * LUT_Scale / (2 * pT_lsb**2))` |
0170 | `minTransMass` | $\frac{m_{T,1,2}^2}{2} + \frac{m_{T,1,3}^2}{2} + \frac{m_{T,2,3}^2}{2} > \frac{X^2}{2}$ | `cms.double` | `floor(X**2 * LUT_Scale / (2 * pT_lsb**2))` |
0171 | `maxTransMass` | $\frac{m_{T,1,2}^2}{2} + \frac{m_{T,1,3}^2}{2} + \frac{m_{T,2,3}^2}{2} < \frac{X^2}{2}$ | `cms.double` | `ceil(X**2 * LUT_Scale / (2 * pT_lsb**2))` |
0172
0173 ## Algorithms
0174
0175 Conditions are combined to algorithms via the [`L1GTAlgoBlockProducer`](plugins/L1GTAlgoBlockProducer.cc). To configure this behavior, a `cms.PSet` algorithm configuration should be added to the `algorithms` `cms.VPset`, included via:
0176
0177 ```python
0178 from L1Trigger.Phase2L1GT.l1tGTAlgoBlockProducer_cff import algorithms
0179 ```
0180 A minimal configuration just includes an `expression` of `cms.Path`s. The available configuration parameters are:
0181
0182 | Name | Datatype | Description |
0183 |:-----|:----------:|:--------------|
0184 | `name` | `cms.string` | A unique algorithm identifier (default: `expression`) |
0185 | `expression` | `cms.string` | `cms.Path` expression (required) |
0186 | `prescale` | `cms.double` | Prescale value: 0 or in [1, $2^{24} - 1$) (default: 1) |
0187 | `prescalePreview` | `cms.double` | Prescale preview value: 0 or in [1, $2^{24} - 1$) (default: 1) |
0188 | `bunchMask` | `cms.vuint32` | Vector of bunch crossing numbers to mask (default: empty) |
0189 | `triggerTypes` | `cms.vint32` | Vector of trigger type numbers assigned to this algorithm (default: 1) |
0190 | `veto` | `cms.bool` | Indicates whether the algorithm is a veto (default: false) |
0191
0192 Utilizing the examples from the [Conditions section](#conditions) one could define an algorithm as follows:
0193
0194 ```python
0195 from L1Trigger.Phase2L1GT.l1tGTAlgoBlockProducer_cff import algorithms
0196
0197 process.pSingleTkMuon22 = cms.Path(process.SingleTkMuon22)
0198 process.pDoubleTkEle25_12 = cms.Path(process.DoubleTkEle2512)
0199
0200 algorithms.append(cms.PSet(expression = cms.string("pSingleTkMuon22 or pDoubleTkEle25_12")))
0201 ```
0202
0203 ## Firmware pattern writers
0204
0205 There are 3 types of Global Trigger pattern writers currently implemented.
0206
0207 * `L1GTAlgoBoardWriter`: Used to write out the algorithm bits into 2 channels. With config
0208
0209 | Name | Datatype | Description |
0210 |:-----|:----------:|:--------------|
0211 | `filename` | `cms.string` | The filename prefix to use for pattern files (required) |
0212 | `fileExtension` | `cms.string` | `txt`, `txt.gz` or `txt.xz` (default: `txt`) |
0213 | `algoBlocksTag` | `cms.InputTag` | AlgoBlock producer input tag to use (required) |
0214 | `maxFrames` | `cms.unit32` | Maximum number of frames (default: 1024) |
0215 | `maxEvents` | `cms.unit32` | Maximum number of events (default: events that fit into `maxFrames`) |
0216 | `channels` | `cms.vuint32` | Vector of 2 channel numbers for output (required) |
0217 | `algoBitMask` | `cms.vuint64` | Vector of 9 64 bit masks (default: all set to 1) |
0218 | `patternFormat` | `cms.string` | `APx`, `EMPv1`, `EMPv2` or `X2O` (default: `EMPv2`) |
0219
0220 * `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:
0221
0222 | Name | Datatype | Description |
0223 |:-----|:----------:|:--------------|
0224 | `filename` | `cms.string` | The filename prefix to use for pattern files (required) |
0225 | `fileExtension` | `cms.string` | `txt`, `txt.gz` or `txt.xz` (default: `txt`) |
0226 | `algoBlocksTag` | `cms.InputTag` | AlgoBlock producer input tag to use (required) |
0227 | `maxFrames` | `cms.unit32` | Maximum number of frames (default: 1024) |
0228 | `maxEvents` | `cms.unit32` | Maximum number of events (default: events that fit into `maxFrames`) |
0229 | `channelsLow` | `cms.vuint32` | Vector of 3 channel numbers for low bits (0 - 575) (required) |
0230 | `channelsMid` | `cms.vuint32` | Vector of 3 channel numbers for mid bits (576 - 1151) (required) |
0231 | `channelsHigh` | `cms.vuint32` | Vector of 3 channel numbers for high bits (1152 - 1727) (required) |
0232 | `channelFinOr` | `cms.uint32` | Channel for FinalOr trigger types (required) |
0233 | `patternFormat` | `cms.string` | `APx`, `EMPv1`, `EMPv2` or `X2O` (default: `EMPv2`) |
0234
0235 * `L1GTObjectBoardWriter`: Used to write input and output object patterns using the upstream provided pack functions.
0236
0237 | Name | Datatype | Description |
0238 |:-----|:----------:|:--------------|
0239 | `filename` | `cms.string` | The filename prefix to use for pattern files (required) |
0240 | `fileExtension` | `cms.string` | `txt`, `txt.gz` or `txt.xz` (default: `txt`) |
0241 | `maxFrames` | `cms.unit32` | Maximum number of frames (default: 1024) |
0242 | `maxEvents` | `cms.unit32` | Maximum number of events (default: events that fit into `maxFrames`) |
0243 | `patternFormat` | `cms.string` | `APx`, `EMPv1`, `EMPv2` or `X2O` (default: `EMPv2`) |
0244 | `bufferFileType`| `cms.string` | Either `input` or `output` (required) |
0245 | `InputChannels.GCT_1` | `cms.vuint32` | Channels for GCT link 1 (required if `bufferFileType` = `input`) |
0246 | `InputChannels.GMT_1` | `cms.vuint32` | Channels for GMT link 1 (required if `bufferFileType` = `input`) |
0247 | `InputChannels.GTT_1` | `cms.vuint32` | Channels for GTT link 1 (required if `bufferFileType` = `input`) |
0248 | `InputChannels.GTT_2` | `cms.vuint32` | Channels for GTT link 2 (required if `bufferFileType` = `input`) |
0249 | `InputChannels.GTT_3` | `cms.vuint32` | Channels for GTT link 3 (required if `bufferFileType` = `input`) |
0250 | `InputChannels.GTT_4` | `cms.vuint32` | Channels for GTT link 4 (required if `bufferFileType` = `input`) |
0251 | `InputChannels.CL2_1` | `cms.vuint32` | Channels for CL2 link 1 (required if `bufferFileType` = `input`) |
0252 | `InputChannels.CL2_2` | `cms.vuint32` | Channels for CL2 link 2 (required if `bufferFileType` = `input`) |
0253 | `InputChannels.CL2_3` | `cms.vuint32` | Channels for CL2 link 3 (required if `bufferFileType` = `input`) |
0254 | `OutputChannels.GTTPromptJets` | `cms.vuint32` | Channels for collection GTTPromptJets (required if `bufferFileType` = `output`) |
0255 | `OutputChannels.GTTDisplacedJets` | `cms.vuint32` | Channels for collection GTTDisplacedJets (required if `bufferFileType` = `output`) |
0256 | `OutputChannels.GTTPromptHtSum` | `cms.vuint32` | Channels for collection GTTPromptHtSum (required if `bufferFileType` = `output`) |
0257 | `OutputChannels.GTTDisplacedHtSum` | `cms.vuint32` | Channels for collection GTTDisplacedHtSum (required if `bufferFileType` = `output`) |
0258 | `OutputChannels.GTTEtSum` | `cms.vuint32` | Channels for collection GTTEtSum (required if `bufferFileType` = `output`) |
0259 | `OutputChannels.GTTPrimaryVert` | `cms.vuint32` | Channels for collection GTTPrimaryVert (required if `bufferFileType` = `output`) |
0260 | `OutputChannels.GMTSaPromptMuons` | `cms.vuint32` | Channels for collection GMTSaPromptMuons (required if `bufferFileType` = `output`) |
0261 | `OutputChannels.GMTSaDisplacedMuons` | `cms.vuint32` | Channels for collection GMTSaDisplacedMuons (required if `bufferFileType` = `output`) |
0262 | `OutputChannels.GMTTkMuons` | `cms.vuint32` | Channels for collection GMTTkMuons (required if `bufferFileType` = `output`) |
0263 | `OutputChannels.CL2JetsSC4` | `cms.vuint32` | Channels for collection CL2JetsSC4 (required if `bufferFileType` = `output`) |
0264 | `OutputChannels.CL2JetsSC8` | `cms.vuint32` | Channels for collection CL2JetsSC8 (required if `bufferFileType` = `output`) |
0265 | `OutputChannels.CL2Photons` | `cms.vuint32` | Channels for collection CL2Photons (required if `bufferFileType` = `output`) |
0266 | `OutputChannels.CL2Electrons` | `cms.vuint32` | Channels for collection CL2Electrons (required if `bufferFileType` = `output`) |
0267 | `OutputChannels.CL2Taus` | `cms.vuint32` | Channels for collection CL2Taus (required if `bufferFileType` = `output`) |
0268 | `OutputChannels.CL2EtSum` | `cms.vuint32` | Channels for collection CL2EtSum (required if `bufferFileType` = `output`) |
0269 | `OutputChannels.CL2HtSum` | `cms.vuint32` | Channels for collection CL2HtSum (required if `bufferFileType` = `output`) |
0270
0271 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`).
0272
0273 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:
0274
0275 ```python
0276 # Serenity VU9P prototype board
0277 process.load('L1Trigger.Phase2L1GT.l1tGTBoardWriterVU9P_cff')
0278
0279 process.pBoardDataInputVU9P = cms.EndPath(process.BoardDataInputVU9P)
0280 process.pBoardDataOutputObjectsVU9P = cms.EndPath(process.BoardDataOutputObjectsVU9P)
0281 process.pAlgoBitBoardDataVU9P = cms.EndPath(process.AlgoBitBoardDataVU9P)
0282 ```
0283
0284 ```python
0285 # Serenity VU13P prototype board
0286 process.load('L1Trigger.Phase2L1GT.l1tGTBoardWriterVU13P_cff')
0287
0288 process.pBoardDataInputVU13P = cms.EndPath(process.BoardDataInputVU13P)
0289 process.pBoardDataOutputObjectsVU13P = cms.EndPath(process.BoardDataOutputObjectsVU13P)
0290 process.pAlgoBitBoardDataVU13P = cms.EndPath(process.AlgoBitBoardDataVU13P)
0291 ```