From fd619816684370d40086fca0631d61717ddd58a0 Mon Sep 17 00:00:00 2001 From: Tova Holmes Date: Fri, 15 Oct 2021 18:38:22 +0200 Subject: [PATCH] Reduced configuration (#87) * Modified code to support a reduced config (the summer chain) * Updates from running code checker. * Reverted to standard configuration options. * Reverted to standard configuration options. * Settings used to make TV for event 1912 * Reverted to default settings for PR. * Made some of the TV changes in issue 85, and created output TVs 2021-08-04-TTbar-SimpleFWHarmonization. * Clarified comments * Include commit from fw_synch_210611 (#86) * Fixes to remove unused TPROJ memory and fix problem with VMR LUT in L6 * apply code-formats and code-checks Co-authored-by: Anders * Returning to standard config. * Returning to standard config. * Returning to standard config. * Update geometry and MC files (#91) * Included reduced variable in non-reduced setups for consistency. * Updated settings to match default configuration rather than HLS compatibility * Added comment about reduced config files Co-authored-by: Tova Holmes Co-authored-by: Louise Skinnari Co-authored-by: Anders Co-authored-by: Ian Tomalin --- .../TrackFindingTracklet/interface/Settings.h | 4 ++ .../plugins/L1FPGATrackProducer.cc | 3 ++ .../python/L1HybridEmulationTracks_cff.py | 11 ++++- .../python/Tracklet_cfi.py | 13 +++++- .../src/InputLinkMemory.cc | 1 + .../TrackFindingTracklet/src/InputRouter.cc | 3 +- L1Trigger/TrackFindingTracklet/src/Sector.cc | 3 +- .../src/TrackletEngine.cc | 1 + .../src/TrackletEventProcessor.cc | 2 +- .../TrackFindingTracklet/src/VMRouter.cc | 12 +++--- .../test/L1TrackNtupleMaker_cfg.py | 42 ++++++++++++------- 11 files changed, 69 insertions(+), 26 deletions(-) diff --git a/L1Trigger/TrackFindingTracklet/interface/Settings.h b/L1Trigger/TrackFindingTracklet/interface/Settings.h index b9ea36d2e33f5..4df68d4b7e734 100644 --- a/L1Trigger/TrackFindingTracklet/interface/Settings.h +++ b/L1Trigger/TrackFindingTracklet/interface/Settings.h @@ -249,6 +249,8 @@ namespace trklet { void setExtended(bool extended) { extended_ = extended; } bool combined() const { return combined_; } void setCombined(bool combined) { combined_ = combined; } + bool reduced() const { return reduced_; } + void setReduced(bool reduced) { reduced_ = reduced; } double bfield() const { return bfield_; } void setBfield(double bfield) { bfield_ = bfield; } @@ -751,6 +753,7 @@ namespace trklet { unsigned int maxstepoffset_{0}; //Number of processing steps for one event (108=18TM*240MHz/40MHz) + //IR should be set to 108 to match the FW for the summer chain, but ultimately should be at 156 std::unordered_map maxstep_{{"IR", 156}, //IR will run at a higher clock speed to handle //input links running at 25 Gbits/s {"VMR", 108}, @@ -890,6 +893,7 @@ namespace trklet { unsigned int nHelixPar_{4}; // 4 or 5 param helix fit bool extended_{false}; // turn on displaced tracking bool combined_{false}; // use combined TP (TE+TC) and MP (PR+ME+MC) configuration + bool reduced_{false}; // use reduced (Summer Chain) config std::string skimfile_{""}; //if not empty events will be written out in ascii format to this file diff --git a/L1Trigger/TrackFindingTracklet/plugins/L1FPGATrackProducer.cc b/L1Trigger/TrackFindingTracklet/plugins/L1FPGATrackProducer.cc index 2c050b4ca6932..149fc8651584b 100644 --- a/L1Trigger/TrackFindingTracklet/plugins/L1FPGATrackProducer.cc +++ b/L1Trigger/TrackFindingTracklet/plugins/L1FPGATrackProducer.cc @@ -165,6 +165,7 @@ class L1FPGATrackProducer : public edm::one::EDProducer { unsigned int nHelixPar_; bool extended_; + bool reduced_; bool trackQuality_; std::unique_ptr trackQualityModel_; @@ -227,6 +228,7 @@ L1FPGATrackProducer::L1FPGATrackProducer(edm::ParameterSet const& iConfig) wiresFile = iConfig.getParameter("wiresFile"); extended_ = iConfig.getParameter("Extended"); + reduced_ = iConfig.getParameter("Reduced"); nHelixPar_ = iConfig.getParameter("Hnpar"); if (extended_) { @@ -243,6 +245,7 @@ L1FPGATrackProducer::L1FPGATrackProducer(edm::ParameterSet const& iConfig) // -------------------------------------------------------------------------------- settings.setExtended(extended_); + settings.setReduced(reduced_); settings.setNHelixPar(nHelixPar_); settings.setFitPatternFile(fitPatternFile.fullPath()); diff --git a/L1Trigger/TrackFindingTracklet/python/L1HybridEmulationTracks_cff.py b/L1Trigger/TrackFindingTracklet/python/L1HybridEmulationTracks_cff.py index dcaea4d59c4ed..01b71d755f179 100644 --- a/L1Trigger/TrackFindingTracklet/python/L1HybridEmulationTracks_cff.py +++ b/L1Trigger/TrackFindingTracklet/python/L1HybridEmulationTracks_cff.py @@ -14,7 +14,7 @@ L1HybridTracks = cms.Sequence(offlineBeamSpot*TTTracksFromTrackletEmulation) L1HybridTracksWithAssociators = cms.Sequence(offlineBeamSpot*TTTracksFromTrackletEmulation*TrackTriggerAssociatorTracks) -# extended hybrid emulation +# extended hybrid (=displaced tracking) emulation TTTrackAssociatorFromPixelDigisExtended = TTTrackAssociatorFromPixelDigis.clone( TTTracks = cms.VInputTag(cms.InputTag("TTTracksFromExtendedTrackletEmulation", "Level1TTTracks") ) ) @@ -22,7 +22,14 @@ L1ExtendedHybridTracks = cms.Sequence(offlineBeamSpot*TTTracksFromExtendedTrackletEmulation) L1ExtendedHybridTracksWithAssociators = cms.Sequence(offlineBeamSpot*TTTracksFromExtendedTrackletEmulation*TTTrackAssociatorFromPixelDigisExtended) -# both (prompt + extended) hybrid emulation +# both (prompt + extended) hybrid emulation L1PromptExtendedHybridTracks = cms.Sequence(offlineBeamSpot*TTTracksFromTrackletEmulation*TTTracksFromExtendedTrackletEmulation) L1PromptExtendedHybridTracksWithAssociators = cms.Sequence(offlineBeamSpot*TTTracksFromTrackletEmulation*TrackTriggerAssociatorTracks*TTTracksFromExtendedTrackletEmulation*TTTrackAssociatorFromPixelDigisExtended) +# reduced hybrid (=summer chain) emuluation +TTTrackAssociatorFromPixelDigisReduced = TTTrackAssociatorFromPixelDigis.clone( + TTTracks = cms.VInputTag(cms.InputTag("TTTracksFromReducedTrackletEmulation", "Level1TTTracks") ) + ) +L1ReducedHybridTracks = cms.Sequence(offlineBeamSpot*TTTracksFromReducedTrackletEmulation) +L1ReducedHybridTracksWithAssociators = cms.Sequence(offlineBeamSpot*TTTracksFromReducedTrackletEmulation*TTTrackAssociatorFromPixelDigisReduced) + diff --git a/L1Trigger/TrackFindingTracklet/python/Tracklet_cfi.py b/L1Trigger/TrackFindingTracklet/python/Tracklet_cfi.py index d317d03649f10..b1e3f763327d8 100644 --- a/L1Trigger/TrackFindingTracklet/python/Tracklet_cfi.py +++ b/L1Trigger/TrackFindingTracklet/python/Tracklet_cfi.py @@ -3,7 +3,7 @@ TTTracksFromTrackletEmulation = cms.EDProducer("L1FPGATrackProducer", TTStubSource = cms.InputTag("TTStubsFromPhase2TrackerDigis","StubAccepted"), - InputTagTTDTC = cms.InputTag("TrackerDTCProducer", "StubAccepted"), + InputTagTTDTC = cms.InputTag("TrackerDTCProducer", "StubAccepted"), readMoreMcTruth = cms.bool(True), MCTruthClusterInputTag = cms.InputTag("TTClusterAssociatorFromPixelDigis", "ClusterAccepted"), MCTruthStubInputTag = cms.InputTag("TTStubAssociatorFromPixelDigis", "StubAccepted"), @@ -11,6 +11,7 @@ BeamSpotSource = cms.InputTag("offlineBeamSpot"), asciiFileName = cms.untracked.string(""), Extended = cms.bool(False), + Reduced = cms.bool(False), Hnpar = cms.uint32(4), # (if running on CRAB use "../../fitpattern.txt" etc instead) fitPatternFile = cms.FileInPath('L1Trigger/TrackFindingTracklet/data/fitpattern.txt'), @@ -24,6 +25,7 @@ TTTracksFromExtendedTrackletEmulation = TTTracksFromTrackletEmulation.clone( Extended = cms.bool(True), + Reduced = cms.bool(False), Hnpar = cms.uint32(5), # specifying where the TrackletEngineDisplaced(TED)/TripletEngine(TRE) tables are located tableTEDFile = cms.FileInPath('L1Trigger/TrackFindingTracklet/data/table_TED/table_TED_D1PHIA1_D2PHIA1.txt'), @@ -32,4 +34,13 @@ TrackQuality = cms.bool(False), TrackQualityPSet = cms.PSet(TrackQualityParams) ) +# The included files correspond to the reduced "Summer Chain" configuration +# These files can be modified to emulate any other reduced configuration +TTTracksFromReducedTrackletEmulation = TTTracksFromTrackletEmulation.clone( + Reduced = cms.bool(True), + # specifying where the reduced configuration files are + memoryModulesFile = cms.FileInPath('L1Trigger/TrackFindingTracklet/data/reduced_memorymodules.dat'), + processingModulesFile = cms.FileInPath('L1Trigger/TrackFindingTracklet/data/reduced_processingmodules.dat'), + wiresFile = cms.FileInPath('L1Trigger/TrackFindingTracklet/data/reduced_wires.dat'), + ) diff --git a/L1Trigger/TrackFindingTracklet/src/InputLinkMemory.cc b/L1Trigger/TrackFindingTracklet/src/InputLinkMemory.cc index d9bcb6589d513..bb34f5c94eaa0 100644 --- a/L1Trigger/TrackFindingTracklet/src/InputLinkMemory.cc +++ b/L1Trigger/TrackFindingTracklet/src/InputLinkMemory.cc @@ -23,6 +23,7 @@ void InputLinkMemory::writeStubs(bool first, unsigned int iSector) { for (unsigned int j = 0; j < stubs_.size(); j++) { string stub = stubs_[j]->str(); + out_ << "0x"; out_ << std::setfill('0') << std::setw(2); out_ << hex << j << dec; out_ << " " << stub << " " << trklet::hexFormat(stub) << endl; diff --git a/L1Trigger/TrackFindingTracklet/src/InputRouter.cc b/L1Trigger/TrackFindingTracklet/src/InputRouter.cc index 2ee8e965a90c1..93b98ca20c0f8 100644 --- a/L1Trigger/TrackFindingTracklet/src/InputRouter.cc +++ b/L1Trigger/TrackFindingTracklet/src/InputRouter.cc @@ -74,6 +74,7 @@ void InputRouter::execute() { iadd++; } } - assert(iadd == 1); + if (!(settings_.reduced())) + assert(iadd == 1); } } diff --git a/L1Trigger/TrackFindingTracklet/src/Sector.cc b/L1Trigger/TrackFindingTracklet/src/Sector.cc index 8a61892bc3bae..8c169f58b125e 100644 --- a/L1Trigger/TrackFindingTracklet/src/Sector.cc +++ b/L1Trigger/TrackFindingTracklet/src/Sector.cc @@ -93,7 +93,8 @@ bool Sector::addStub(L1TStub stub, string dtc) { nadd++; } - assert(nadd == 1); + if (!(settings_.reduced())) + assert(nadd == 1); return true; } diff --git a/L1Trigger/TrackFindingTracklet/src/TrackletEngine.cc b/L1Trigger/TrackFindingTracklet/src/TrackletEngine.cc index 1c70057008575..7f32e78191fbc 100644 --- a/L1Trigger/TrackFindingTracklet/src/TrackletEngine.cc +++ b/L1Trigger/TrackFindingTracklet/src/TrackletEngine.cc @@ -134,6 +134,7 @@ void TrackletEngine::execute() { if (settings_.debugTracklet()) edm::LogVerbatim("Tracklet") << "Adding stub pair in " << getName(); + assert(stubpairs_ != nullptr); stubpairs_->addStubPair(innervmstub, outervmstub); countpass++; } diff --git a/L1Trigger/TrackFindingTracklet/src/TrackletEventProcessor.cc b/L1Trigger/TrackFindingTracklet/src/TrackletEventProcessor.cc index 5674fb0ff972f..5c002b5e5311d 100644 --- a/L1Trigger/TrackFindingTracklet/src/TrackletEventProcessor.cc +++ b/L1Trigger/TrackFindingTracklet/src/TrackletEventProcessor.cc @@ -80,7 +80,7 @@ void TrackletEventProcessor::init(Settings const& theSettings) { sector_ = make_unique(*settings_, globals_.get()); - if (settings_->extended()) { + if (settings_->extended() || settings_->reduced()) { ifstream inmem(settings_->memoryModulesFile().c_str()); assert(inmem.good()); diff --git a/L1Trigger/TrackFindingTracklet/src/VMRouter.cc b/L1Trigger/TrackFindingTracklet/src/VMRouter.cc index bef76f3ac5e41..8ba7cf4c39770 100644 --- a/L1Trigger/TrackFindingTracklet/src/VMRouter.cc +++ b/L1Trigger/TrackFindingTracklet/src/VMRouter.cc @@ -272,15 +272,16 @@ void VMRouter::execute() { FPGAWord(stub->bend().value(), nbendbits, true, __LINE__, __FILE__), allStubIndex); - assert(vmstubsMEPHI_[ivmPlus] != nullptr); - vmstubsMEPHI_[ivmPlus]->addStub(vmstub, vmbin); + if (!(settings_.reduced())) + assert(vmstubsMEPHI_[ivmPlus] != nullptr); + if (vmstubsMEPHI_[ivmPlus] != nullptr) + vmstubsMEPHI_[ivmPlus]->addStub(vmstub, vmbin); if (settings_.debugTracklet()) { edm::LogVerbatim("Tracklet") << getName() << " adding stub to " << vmstubsMEPHI_[ivmPlus]->getName() << " ivmPlus" << ivmPlus << " bin=" << vmbin; } - if (ivmMinus != ivmPlus) { - assert(vmstubsMEPHI_[ivmMinus] != nullptr); + if (ivmMinus != ivmPlus && vmstubsMEPHI_[ivmMinus] != nullptr) { vmstubsMEPHI_[ivmMinus]->addStub(vmstub, vmbin); if (settings_.debugTracklet()) { edm::LogVerbatim("Tracklet") << getName() << " adding stub to " << vmstubsMEPHI_[ivmMinus]->getName() @@ -363,7 +364,8 @@ void VMRouter::execute() { unsigned int nmem = ivmstubTEPHI.vmstubmem[ivmte].size(); - assert(nmem > 0); + if (!(settings_.reduced())) + assert(nmem > 0); for (unsigned int l = 0; l < nmem; l++) { if (settings_.debugTracklet()) { diff --git a/L1Trigger/TrackFindingTracklet/test/L1TrackNtupleMaker_cfg.py b/L1Trigger/TrackFindingTracklet/test/L1TrackNtupleMaker_cfg.py index a0b767205942d..66e71ffdc6a81 100644 --- a/L1Trigger/TrackFindingTracklet/test/L1TrackNtupleMaker_cfg.py +++ b/L1Trigger/TrackFindingTracklet/test/L1TrackNtupleMaker_cfg.py @@ -12,10 +12,11 @@ ############################################################ GEOMETRY = "D76" -# Set L1 tracking algorithm: -# 'HYBRID' (baseline, 4par fit) or 'HYBRID_DISPLACED' (extended, 5par fit). +# Set L1 tracking algorithm: +# 'HYBRID' (baseline, 4par fit) or 'HYBRID_DISPLACED' (extended, 5par fit). +# 'HYBRID_REDUCED' to use the "Summer Chain" configuration with reduced inputs # (Or legacy algos 'TMTT' or 'TRACKLET'). -L1TRKALGO = 'HYBRID' +L1TRKALGO = 'HYBRID' WRITE_DATA = False @@ -32,11 +33,11 @@ process.MessageLogger.Tracklet = dict(limit = -1) process.MessageLogger.TrackTriggerHPH = dict(limit = -1) -if GEOMETRY == "D49": +if GEOMETRY == "D49": print("using geometry " + GEOMETRY + " (tilted)") process.load('Configuration.Geometry.GeometryExtended2026D49Reco_cff') process.load('Configuration.Geometry.GeometryExtended2026D49_cff') -elif GEOMETRY == "D76": +elif GEOMETRY == "D76": print("using geometry " + GEOMETRY + " (tilted)") process.load('Configuration.Geometry.GeometryExtended2026D76Reco_cff') process.load('Configuration.Geometry.GeometryExtended2026D76_cff') @@ -84,8 +85,10 @@ else: print("this is not a valid geometry!!!") - + process.source = cms.Source("PoolSource", fileNames = cms.untracked.vstring(*inputMC)) +# Use skipEvents to select particular single events for test vectors +#process.source = cms.Source("PoolSource", fileNames = cms.untracked.vstring(*inputMC), skipEvents = cms.untracked.uint32(11)) process.TFileService = cms.Service("TFileService", fileName = cms.string('TTbar_PU200_'+GEOMETRY+'.root'), closeFileFast = cms.untracked.bool(True)) process.Timing = cms.Service("Timing", summaryOnly = cms.untracked.bool(True)) @@ -97,7 +100,7 @@ process.load('L1Trigger.TrackTrigger.TrackTrigger_cff') -# remake stubs? +# remake stubs? #from L1Trigger.TrackTrigger.TTStubAlgorithmRegister_cfi import * #process.load("SimTracker.TrackTriggerAssociation.TrackTriggerAssociator_cff") @@ -105,7 +108,7 @@ #TTClusterAssociatorFromPixelDigis.digiSimLinks = cms.InputTag("simSiPixelDigis","Tracker") #process.TTClusterStub = cms.Path(process.TrackTriggerClustersStubs) -#process.TTClusterStubTruth = cms.Path(process.TrackTriggerAssociatorClustersStubs) +#process.TTClusterStubTruth = cms.Path(process.TrackTriggerAssociatorClustersStubs) # DTC emulation @@ -145,8 +148,17 @@ L1TRK_NAME = "TTTracksFromExtendedTrackletEmulation" L1TRK_LABEL = "Level1TTTracks" L1TRUTH_NAME = "TTTrackAssociatorFromPixelDigisExtended" - -# LEGACY ALGORITHM (EXPERTS ONLY): TRACKLET + +# HYBRID: prompt tracking, reduced chain +elif (L1TRKALGO == 'HYBRID_REDUCED'): + process.TTTracksEmulation = cms.Path(process.L1ReducedHybridTracks) + process.TTTracksEmulationWithTruth = cms.Path(process.L1ReducedHybridTracksWithAssociators) + NHELIXPAR = 4 + L1TRK_NAME = "TTTracksFromReducedTrackletEmulation" + L1TRK_LABEL = "Level1TTTracks" + L1TRUTH_NAME = "TTTrackAssociatorFromPixelDigisReduced" + +# LEGACY ALGORITHM (EXPERTS ONLY): TRACKLET elif (L1TRKALGO == 'TRACKLET'): print("\n WARNING: This is not the baseline algorithm! Prefer HYBRID or HYBRID_DISPLACED!") print("\n To run the Tracklet-only algorithm, ensure you have commented out 'CXXFLAGS=-DUSEHYBRID' in BuildFile.xml & recompiled! \n") @@ -157,7 +169,7 @@ L1TRK_LABEL = "Level1TTTracks" L1TRUTH_NAME = "TTTrackAssociatorFromPixelDigis" -# LEGACY ALGORITHM (EXPERTS ONLY): TMTT +# LEGACY ALGORITHM (EXPERTS ONLY): TMTT elif (L1TRKALGO == 'TMTT'): print("\n WARNING: This is not the baseline algorithm! Prefer HYBRID or HYBRID_DISPLACED! \n") process.load("L1Trigger.TrackFindingTMTT.TMTrackProducer_Ultimate_cff") @@ -183,7 +195,7 @@ # Define the track ntuple process, MyProcess is the (unsigned) PDGID corresponding to the process which is run # e.g. single electron/positron = 11 # single pion+/pion- = 211 -# single muon+/muon- = 13 +# single muon+/muon- = 13 # pions in jets = 6 # taus = 15 # all TPs = 1 @@ -202,7 +214,7 @@ TP_maxEta = cms.double(2.5), # only save TPs with |eta| < X TP_maxZ0 = cms.double(30.0), # only save TPs with |z0| < X cm L1TrackInputTag = cms.InputTag(L1TRK_NAME, L1TRK_LABEL), # TTTrack input - MCTruthTrackInputTag = cms.InputTag(L1TRUTH_NAME, L1TRK_LABEL), # MCTruth input + MCTruthTrackInputTag = cms.InputTag(L1TRUTH_NAME, L1TRK_LABEL), # MCTruth input # other input collections L1StubInputTag = cms.InputTag("TTStubsFromPhase2TrackerDigis","StubAccepted"), MCTruthClusterInputTag = cms.InputTag("TTClusterAssociatorFromPixelDigis", "ClusterAccepted"), @@ -224,7 +236,7 @@ # use this if you want to re-run the stub making # process.schedule = cms.Schedule(process.TTClusterStub,process.TTClusterStubTruth,process.dtc,process.TTTracksEmulationWithTruth,process.ana) -# use this if cluster/stub associators not available +# use this if cluster/stub associators not available # process.schedule = cms.Schedule(process.TTClusterStubTruth,process.dtc,process.TTTracksEmulationWithTruth,process.ana) # use this to only run tracking + track associator @@ -251,4 +263,4 @@ process.pd = cms.EndPath(process.writeDataset) process.schedule.append(process.pd) - +