Skip to content

Commit

Permalink
Merge pull request #33311 from dinyar/emtf_displacement_in_regmuoncan…
Browse files Browse the repository at this point in the history
…d_11_2_X

(Backport for 11_2_X) Add displaced muon info from EMTF to RegionalMuonCand (un)packing and to uGMT DQM
  • Loading branch information
cmsbuild committed Apr 6, 2021
2 parents 5ee4931 + 5fe1231 commit 30ab0bf
Show file tree
Hide file tree
Showing 17 changed files with 105 additions and 74 deletions.
6 changes: 5 additions & 1 deletion DQM/L1TMonitor/interface/L1TStage2RegionalMuonCandComp.h
Expand Up @@ -63,6 +63,10 @@ class L1TStage2RegionalMuonCandComp : public DQMEDAnalyzer {
RPT2
};
enum tfs { BMTFBIN = 1, OMTFNEGBIN, OMTFPOSBIN, EMTFNEGBIN, EMTFPOSBIN };
int numSummaryBins_{
TRACKADDRBAD}; // In Run-2 we didn't have the last two bins. This is incremented in source file if we configure for Run-3.
int numErrBins_{
RTRACKADDR}; // In Run-2 we didn't have the last two bins. This is incremented in source file if we configure for Run-3.
bool incBin[RPT2 + 1];

edm::EDGetTokenT<l1t::RegionalMuonCandBxCollection> muonToken1;
Expand All @@ -74,7 +78,7 @@ class L1TStage2RegionalMuonCandComp : public DQMEDAnalyzer {
bool ignoreBadTrkAddr;
std::vector<int> ignoreBin;
bool verbose;
bool isBmtf;
bool hasDisplacementInfo;

MonitorElement* summary;
MonitorElement* errorSummaryNum;
Expand Down
2 changes: 2 additions & 0 deletions DQM/L1TMonitor/interface/L1TStage2uGMT.h
Expand Up @@ -77,6 +77,8 @@ class L1TStage2uGMT : public DQMEDAnalyzer {
MonitorElement* ugmtEMTFBX;
MonitorElement* ugmtEMTFnMuons;
MonitorElement* ugmtEMTFhwPt;
MonitorElement* ugmtEMTFhwPtUnconstrained;
MonitorElement* ugmtEMTFhwDXY;
MonitorElement* ugmtEMTFhwEta;
MonitorElement* ugmtEMTFhwPhiPos;
MonitorElement* ugmtEMTFhwPhiNeg;
Expand Down
2 changes: 1 addition & 1 deletion DQM/L1TMonitor/python/L1TStage2BMTF_cff.py
Expand Up @@ -39,7 +39,7 @@
l1tStage2BmtfSecond.bmtfSource = cms.InputTag("bmtfDigis","BMTF2")
l1tStage2BmtfSecond.monitorDir = cms.untracked.string("L1T/L1TStage2BMTF/L1TStage2BMTF-Secondary")
l1tStage2BmtfSecond.verbose = cms.untracked.bool(False)
l1tStage2BmtfSecond.isBmtf = cms.untracked.bool(True)
l1tStage2BmtfSecond.hasDisplacementInfo = cms.untracked.bool(True)

# sequences
l1tStage2BmtfOnlineDQMSeq = cms.Sequence(
Expand Down
9 changes: 8 additions & 1 deletion DQM/L1TMonitor/python/L1TStage2uGMT_cff.py
Expand Up @@ -54,6 +54,10 @@
displacedQuantities = cms.untracked.bool(False)
)

## Era: Run3_2021; Displaced muons from EMTF used in uGMT from Run-3
stage2L1Trigger_2021.toModify(l1tStage2uGMTIntermediateEMTFNeg, displacedQuantities = cms.untracked.bool(True))
stage2L1Trigger_2021.toModify(l1tStage2uGMTIntermediateEMTFPos, displacedQuantities = cms.untracked.bool(True))

# zero suppression DQM
l1tStage2uGMTZeroSupp = DQMEDAnalyzer(
"L1TMP7ZeroSupp",
Expand Down Expand Up @@ -129,7 +133,7 @@

## Era: Run3_2021; Displaced muons from BMTF used in uGMT from Run-3
from Configuration.Eras.Modifier_stage2L1Trigger_2021_cff import stage2L1Trigger_2021
stage2L1Trigger_2021.toModify(l1tStage2BmtfOutVsuGMTIn, isBmtf = cms.untracked.bool(True))
stage2L1Trigger_2021.toModify(l1tStage2BmtfOutVsuGMTIn, hasDisplacementInfo = cms.untracked.bool(True))

# compares the unpacked OMTF output regional muon collection with the unpacked uGMT input regional muon collection from OMTF
# only muons that do not match are filled in the histograms
Expand Down Expand Up @@ -159,6 +163,9 @@
verbose = cms.untracked.bool(False),
)

## Era: Run3_2021; Displaced muons from EMTF used in uGMT from Run-3
stage2L1Trigger_2021.toModify(l1tStage2EmtfOutVsuGMTIn, hasDisplacementInfo = cms.untracked.bool(True))

# The five modules below compare the primary unpacked uGMT muon collection to goes to uGT board 0
# to the unpacked uGMT muon collections that are sent to uGT boards 1 to 5.
# Only muons that do not match are filled in the histograms
Expand Down
2 changes: 1 addition & 1 deletion DQM/L1TMonitor/python/L1TdeStage2BMTFSecond_cff.py
Expand Up @@ -14,7 +14,7 @@
l1tdeStage2BmtfSecond.summaryTitle = cms.untracked.string("Summary of comparison between BMTF2 muons and BMTF2 emulator muons")
l1tdeStage2BmtfSecond.ignoreBin = cms.untracked.vint32(ignoreBinsDeStage2Bmtf)
l1tdeStage2BmtfSecond.verbose = cms.untracked.bool(False)
l1tdeStage2BmtfSecond.isBmtf = cms.untracked.bool(True)
l1tdeStage2BmtfSecond.hasDisplacementInfo = cms.untracked.bool(True)



Expand Down
2 changes: 1 addition & 1 deletion DQM/L1TMonitor/python/L1TdeStage2BMTF_cfi.py
Expand Up @@ -17,6 +17,6 @@
summaryTitle = cms.untracked.string("Summary of comparison between BMTF muons and BMTF emulator muons"),
ignoreBin = cms.untracked.vint32(ignoreBinsDeStage2Bmtf),
verbose = cms.untracked.bool(False),
isBmtf = cms.untracked.bool(True)
hasDisplacementInfo = cms.untracked.bool(True)
)

4 changes: 4 additions & 0 deletions DQM/L1TMonitor/python/L1TdeStage2uGMT_cff.py
Expand Up @@ -66,6 +66,10 @@
verbose = cms.untracked.bool(False),
)

## Era: Run3_2021; Displaced muons from EMTF used in uGMT from Run-3
stage2L1Trigger_2021.toModify(l1tStage2uGMTIntermediateEMTFNegEmul, displacedQuantities = cms.untracked.bool(True))
stage2L1Trigger_2021.toModify(l1tStage2uGMTIntermediateEMTFPosEmul, displacedQuantities = cms.untracked.bool(True))

# compares the unpacked uGMT muon collection to the emulated uGMT muon collection
# only muons that do not match are filled in the histograms
l1tdeStage2uGMT = DQMEDAnalyzer(
Expand Down
8 changes: 4 additions & 4 deletions DQM/L1TMonitor/src/L1TStage2MuonComp.cc
Expand Up @@ -12,8 +12,11 @@ L1TStage2MuonComp::L1TStage2MuonComp(const edm::ParameterSet& ps)
enable2DComp(
ps.getUntrackedParameter<bool>("enable2DComp")), // When true eta-phi comparison plots are also produced
displacedQuantities_(ps.getUntrackedParameter<bool>("displacedQuantities")) {
if (displacedQuantities_) {
numErrBins_ += 2;
}
// First include all bins
for (unsigned int i = 1; i <= RIDX; i++) {
for (int i = 1; i <= numErrBins_; i++) {
incBin[i] = true;
}
// Then check the list of bins to ignore
Expand Down Expand Up @@ -74,9 +77,6 @@ void L1TStage2MuonComp::bookHistograms(DQMStore::IBooker& ibooker, const edm::Ru
summary->setBinLabel(DXYBAD, "dXY mismatch", 1);
}

if (displacedQuantities_) {
numErrBins_ += 2;
}
errorSummaryNum = ibooker.book1D(
"errorSummaryNum", summaryTitle.c_str(), numErrBins_, 1, numErrBins_ + 1); // range to match bin numbering
errorSummaryNum->setBinLabel(RBXRANGE, "BX range mismatch", 1);
Expand Down
62 changes: 25 additions & 37 deletions DQM/L1TMonitor/src/L1TStage2RegionalMuonCandComp.cc
Expand Up @@ -12,9 +12,13 @@ L1TStage2RegionalMuonCandComp::L1TStage2RegionalMuonCandComp(const edm::Paramete
ignoreBadTrkAddr(ps.getUntrackedParameter<bool>("ignoreBadTrackAddress")),
ignoreBin(ps.getUntrackedParameter<std::vector<int>>("ignoreBin")),
verbose(ps.getUntrackedParameter<bool>("verbose")),
isBmtf(ps.getUntrackedParameter<bool>("isBmtf")) {
hasDisplacementInfo(ps.getUntrackedParameter<bool>("hasDisplacementInfo")) {
if (hasDisplacementInfo) {
numErrBins_ += 2;
numSummaryBins_ += 2;
}
// First include all bins
for (unsigned int i = 1; i <= RPT2; i++) {
for (int i = 1; i <= numErrBins_; i++) {
incBin[i] = true;
}
// Then check the list of bins to ignore
Expand All @@ -41,7 +45,7 @@ void L1TStage2RegionalMuonCandComp::fillDescriptions(edm::ConfigurationDescripti
desc.addUntracked<bool>("ignoreBadTrackAddress", false)->setComment("Ignore muon track address mismatches.");
desc.addUntracked<std::vector<int>>("ignoreBin", std::vector<int>())->setComment("List of bins to ignore");
desc.addUntracked<bool>("verbose", false);
desc.addUntracked<bool>("isBmtf", false);
desc.addUntracked<bool>("hasDisplacementInfo", false);
descriptions.add("l1tStage2RegionalMuonCandComp", desc);
}

Expand All @@ -53,16 +57,14 @@ void L1TStage2RegionalMuonCandComp::bookHistograms(DQMStore::IBooker& ibooker,
trkAddrIgnoreText = " (Bad track addresses ignored)";
}

int nbins = 17;
if (isBmtf) {
nbins += 2;
}

// Subsystem Monitoring and Muon Output
ibooker.setCurrentFolder(monitorDir);

summary = ibooker.book1D(
"summary", (summaryTitle + trkAddrIgnoreText).c_str(), nbins, 1, nbins + 1); // range to match bin numbering
summary = ibooker.book1D("summary",
(summaryTitle + trkAddrIgnoreText).c_str(),
numSummaryBins_,
1,
numSummaryBins_ + 1); // range to match bin numbering
summary->setBinLabel(BXRANGEGOOD, "BX range match", 1);
summary->setBinLabel(BXRANGEBAD, "BX range mismatch", 1);
summary->setBinLabel(NMUONGOOD, "muon collection size match", 1);
Expand All @@ -80,21 +82,16 @@ void L1TStage2RegionalMuonCandComp::bookHistograms(DQMStore::IBooker& ibooker,
summary->setBinLabel(PROCBAD, "processor mismatch", 1);
summary->setBinLabel(TFBAD, "track finder type mismatch", 1);
summary->setBinLabel(TRACKADDRBAD, "track address mismatch", 1);
if (isBmtf) {
if (hasDisplacementInfo) {
summary->setBinLabel(DXYBAD, "DXY mismatch", 1);
summary->setBinLabel(PT2BAD, "P_{T} unconstrained mismatch", 1);
}

int nbinsNum = 14;
if (isBmtf) {
nbinsNum += 2;
}

errorSummaryNum = ibooker.book1D("errorSummaryNum",
(summaryTitle + trkAddrIgnoreText).c_str(),
nbinsNum,
numErrBins_,
1,
nbinsNum + 1); // range to match bin numbering
numErrBins_ + 1); // range to match bin numbering
errorSummaryNum->setBinLabel(RBXRANGE, "BX range mismatch", 1);
errorSummaryNum->setBinLabel(RNMUON, "muon collection size mismatch", 1);
errorSummaryNum->setBinLabel(RMUON, "mismatching muons", 1);
Expand All @@ -109,7 +106,7 @@ void L1TStage2RegionalMuonCandComp::bookHistograms(DQMStore::IBooker& ibooker,
errorSummaryNum->setBinLabel(RPROC, "processor mismatch", 1);
errorSummaryNum->setBinLabel(RTF, "track finder type mismatch", 1);
errorSummaryNum->setBinLabel(RTRACKADDR, "track address mismatch", 1);
if (isBmtf) {
if (hasDisplacementInfo) {
errorSummaryNum->setBinLabel(RDXY, "DXY mismatch", 1);
errorSummaryNum->setBinLabel(RPT2, "P_{T} unconstrained mismatch", 1);
}
Expand All @@ -125,8 +122,8 @@ void L1TStage2RegionalMuonCandComp::bookHistograms(DQMStore::IBooker& ibooker,
// This needs to come after the calls to setBinLabel.
errorSummaryNum->getTH1F()->GetXaxis()->SetCanExtend(false);

errorSummaryDen =
ibooker.book1D("errorSummaryDen", "denominators", nbinsNum, 1, nbinsNum + 1); // range to match bin numbering
errorSummaryDen = ibooker.book1D(
"errorSummaryDen", "denominators", numErrBins_, 1, numErrBins_ + 1); // range to match bin numbering
errorSummaryDen->setBinLabel(RBXRANGE, "# events", 1);
errorSummaryDen->setBinLabel(RNMUON, "# muon collections", 1);
for (int i = RMUON; i <= errorSummaryDen->getNbinsX(); ++i) {
Expand Down Expand Up @@ -195,7 +192,7 @@ void L1TStage2RegionalMuonCandComp::bookHistograms(DQMStore::IBooker& ibooker,
15.5);
muColl1TrkAddr->setAxisTitle("key", 1);
muColl1TrkAddr->setAxisTitle("value", 2);
if (isBmtf) {
if (hasDisplacementInfo) {
muColl1hwDXY = ibooker.book1D("muhwDXYColl1", (muonColl1Title + " HW DXY" + trkAddrIgnoreText).c_str(), 4, 0, 4);
muColl1hwDXY->setAxisTitle("Hardware DXY", 1);
muColl1hwPtUnconstrained = ibooker.book1D("muhwPtUnconstrainedColl1",
Expand Down Expand Up @@ -266,7 +263,7 @@ void L1TStage2RegionalMuonCandComp::bookHistograms(DQMStore::IBooker& ibooker,
15.5);
muColl2TrkAddr->setAxisTitle("key", 1);
muColl2TrkAddr->setAxisTitle("value", 2);
if (isBmtf) {
if (hasDisplacementInfo) {
muColl2hwDXY = ibooker.book1D("muhwDXYColl2", (muonColl2Title + " HW DXY" + trkAddrIgnoreText).c_str(), 4, 0, 4);
muColl2hwDXY->setAxisTitle("Hardware DXY", 1);
muColl2hwPtUnconstrained = ibooker.book1D("muhwPtUnconstrainedColl2",
Expand Down Expand Up @@ -337,7 +334,7 @@ void L1TStage2RegionalMuonCandComp::analyze(const edm::Event& e, const edm::Even
muColl1trackFinderType->Fill(muonIt1->trackFinderType());
muColl1hwHF->Fill(muonIt1->hwHF());
muColl1TrkAddrSize->Fill(muon1TrackAddr.size());
if (isBmtf) {
if (hasDisplacementInfo) {
muColl1hwDXY->Fill(muonIt1->hwDXY());
muColl1hwPtUnconstrained->Fill(muonIt1->hwPtUnconstrained());
}
Expand All @@ -361,7 +358,7 @@ void L1TStage2RegionalMuonCandComp::analyze(const edm::Event& e, const edm::Even
muColl2trackFinderType->Fill(muonIt2->trackFinderType());
muColl2hwHF->Fill(muonIt2->hwHF());
muColl2TrkAddrSize->Fill(muon2TrackAddr.size());
if (isBmtf) {
if (hasDisplacementInfo) {
muColl2hwDXY->Fill(muonIt2->hwDXY());
muColl2hwPtUnconstrained->Fill(muonIt2->hwPtUnconstrained());
}
Expand All @@ -377,16 +374,7 @@ void L1TStage2RegionalMuonCandComp::analyze(const edm::Event& e, const edm::Even

muonIt1 = muonBxColl1->begin(iBx);
muonIt2 = muonBxColl2->begin(iBx);
//std::cout << "Analysing muons from BX " << iBx << std::endl;
while (muonIt1 != muonBxColl1->end(iBx) && muonIt2 != muonBxColl2->end(iBx)) {
//std::cout << "Coll 1 muon: hwPt=" << muonIt1->hwPt() << ", hwEta=" << muonIt1->hwEta() << ", hwPhi=" << muonIt1->hwPhi()
// << ", hwSign=" << muonIt1->hwSign() << ", hwSignValid=" << muonIt1->hwSignValid()
// << ", hwQual=" << muonIt1->hwQual() << ", link=" << muonIt1->link() << ", processor=" << muonIt1->processor()
// << ", trackFinderType=" << muonIt1->trackFinderType() << std::endl;
//std::cout << "Coll 2 muon: hwPt=" << muonIt2->hwPt() << ", hwEta=" << muonIt2->hwEta() << ", hwPhi=" << muonIt2->hwPhi()
// << ", hwSign=" << muonIt2->hwSign() << ", hwSignValid=" << muonIt2->hwSignValid()
// << ", hwQual=" << muonIt2->hwQual() << ", link=" << muonIt2->link() << ", processor=" << muonIt2->processor()
// << ", trackFinderType=" << muonIt2->trackFinderType() << std::endl;
summary->Fill(MUONALL);
for (int i = RMUON; i <= errorSummaryDen->getNbinsX(); ++i) {
errorSummaryDen->Fill(i);
Expand Down Expand Up @@ -503,7 +491,7 @@ void L1TStage2RegionalMuonCandComp::analyze(const edm::Event& e, const edm::Even
errorSummaryNum->Fill(RTRACKADDR);
}

if (isBmtf) {
if (hasDisplacementInfo) {
if (muonIt1->hwDXY() != muonIt2->hwDXY()) {
muonMismatch = true;
summary->Fill(DXYBAD);
Expand Down Expand Up @@ -538,7 +526,7 @@ void L1TStage2RegionalMuonCandComp::analyze(const edm::Event& e, const edm::Even
muColl1trackFinderType->Fill(muonIt1->trackFinderType());
muColl1hwHF->Fill(muonIt1->hwHF());
muColl1TrkAddrSize->Fill(muon1TrackAddr.size());
if (isBmtf) {
if (hasDisplacementInfo) {
muColl1hwDXY->Fill(muonIt1->hwDXY());
muColl1hwPtUnconstrained->Fill(muonIt1->hwPtUnconstrained());
}
Expand All @@ -558,7 +546,7 @@ void L1TStage2RegionalMuonCandComp::analyze(const edm::Event& e, const edm::Even
muColl2trackFinderType->Fill(muonIt2->trackFinderType());
muColl2hwHF->Fill(muonIt2->hwHF());
muColl2TrkAddrSize->Fill(muon2TrackAddr.size());
if (isBmtf) {
if (hasDisplacementInfo) {
muColl2hwDXY->Fill(muonIt2->hwDXY());
muColl2hwPtUnconstrained->Fill(muonIt2->hwPtUnconstrained());
}
Expand Down
13 changes: 13 additions & 0 deletions DQM/L1TMonitor/src/L1TStage2uGMT.cc
Expand Up @@ -176,6 +176,15 @@ void L1TStage2uGMT::bookHistograms(DQMStore::IBooker& ibooker, const edm::Run&,
ugmtEMTFhwPt = ibooker.book1D("ugmtEMTFhwPt", "uGMT EMTF HW p_{T}", 512, -0.5, 511.5);
ugmtEMTFhwPt->setAxisTitle("Hardware p_{T}", 1);

if (displacedQuantities_) {
ugmtEMTFhwPtUnconstrained =
ibooker.book1D("ugmtEMTFhwPtUnconstrained", "uGMT EMTF Input HW p_{T} unconstrained", 256, -0.5, 255.5);
ugmtEMTFhwPtUnconstrained->setAxisTitle("Hardware p_{T} unconstrained", 1);

ugmtEMTFhwDXY = ibooker.book1D("ugmtEMTFhwDXY", "uGMT EMTF Input HW impact parameter", 4, -0.5, 3.5);
ugmtEMTFhwDXY->setAxisTitle("Hardware dXY", 1);
}

ugmtEMTFhwEta = ibooker.book1D("ugmtEMTFhwEta", "uGMT EMTF HW #eta", 461, -230.5, 230.5);
ugmtEMTFhwEta->setAxisTitle("Hardware #eta", 1);

Expand Down Expand Up @@ -790,6 +799,10 @@ void L1TStage2uGMT::analyze(const edm::Event& e, const edm::EventSetup& c) {
++EMTF) {
ugmtEMTFBX->Fill(itBX);
ugmtEMTFhwPt->Fill(EMTF->hwPt());
if (displacedQuantities_) {
ugmtEMTFhwPtUnconstrained->Fill(EMTF->hwPtUnconstrained());
ugmtEMTFhwDXY->Fill(EMTF->hwDXY());
}
ugmtEMTFhwEta->Fill(EMTF->hwEta());
ugmtEMTFhwSign->Fill(EMTF->hwSign());
ugmtEMTFhwSignValid->Fill(EMTF->hwSignValid());
Expand Down
Expand Up @@ -44,7 +44,7 @@ namespace l1t {
auto gmt_in_packer = static_pointer_cast<l1t::stage2::RegionalMuonGMTPacker>(
PackerFactory::get()->make("stage2::RegionalMuonGMTPacker"));
if (fw >= 0x6000000) {
gmt_in_packer->setKalmanAlgoTrue();
gmt_in_packer->setIsRun3();
}
auto gmt_out_packer =
static_pointer_cast<l1t::stage2::GMTMuonPacker>(PackerFactory::get()->make("stage2::GMTMuonPacker"));
Expand Down Expand Up @@ -87,7 +87,7 @@ namespace l1t {
auto gmt_in_unp = static_pointer_cast<l1t::stage2::RegionalMuonGMTUnpacker>(
UnpackerFactory::get()->make("stage2::RegionalMuonGMTUnpacker"));
if (fw >= 0x6000000) {
gmt_in_unp->setKalmanAlgoTrue();
gmt_in_unp->setIsRun3();
}

for (int iLink = 72; iLink < 144; iLink += 2) {
Expand Down
Expand Up @@ -54,7 +54,7 @@ namespace l1t {
uint32_t msw = 0;
uint32_t lsw = 0;

RegionalMuonRawDigiTranslator::generatePackedDataWords(*mu, lsw, msw, isKalman_);
RegionalMuonRawDigiTranslator::generatePackedDataWords(*mu, lsw, msw, isRun3_);

payloadMap[linkTimes2].push_back(lsw);
payloadMap[linkTimes2].push_back(msw);
Expand Down
Expand Up @@ -13,13 +13,13 @@ namespace l1t {
class RegionalMuonGMTPacker : public Packer {
public:
Blocks pack(const edm::Event&, const PackerTokens*) override;
void setKalmanAlgoTrue() { isKalman_ = true; };
void setIsRun3() { isRun3_ = true; };

private:
typedef std::map<unsigned int, std::vector<uint32_t>> PayloadMap;
void packTF(const edm::Event&, const edm::EDGetTokenT<RegionalMuonCandBxCollection>&, Blocks&);

bool isKalman_{false};
bool isRun3_{false};
};
} // namespace stage2
} // namespace l1t
Expand Down
Expand Up @@ -102,7 +102,7 @@ namespace l1t {
RegionalMuonCand mu;

RegionalMuonRawDigiTranslator::fillRegionalMuonCand(
mu, raw_data_00_31, raw_data_32_63, processor, trackFinder, isKalman_);
mu, raw_data_00_31, raw_data_32_63, processor, trackFinder, isRun3_);

LogDebug("L1T") << "Mu" << nWord / 2 << ": eta " << mu.hwEta() << " phi " << mu.hwPhi() << " pT "
<< mu.hwPt() << " qual " << mu.hwQual() << " sign " << mu.hwSign() << " sign valid "
Expand Down
Expand Up @@ -10,13 +10,13 @@ namespace l1t {
class RegionalMuonGMTUnpacker : public Unpacker {
public:
bool unpack(const Block& block, UnpackerCollections* coll) override;
void setKalmanAlgoTrue() { isKalman_ = true; }
void setIsRun3() { isRun3_ = true; }

private:
static constexpr unsigned nWords_ = 6; // every link transmits 6 words (3 muons) per bx
static constexpr unsigned bxzs_enable_shift_ = 1;

bool isKalman_{false};
bool isRun3_{false};
};
} // namespace stage2
} // namespace l1t
Expand Down

0 comments on commit 30ab0bf

Please sign in to comment.