Back to home page

Project CMSSW displayed by LXR

 
 

    


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 ```