Skip to content

Commit

Permalink
customize L1FPGATrackProducer (#112)
Browse files Browse the repository at this point in the history
* track builder channel upgraded to assign stubs to channel.

* renamed TrackBuilderChannel to ChannelAssignment now also containing DTC to IR mapping

* StreamsStub added as EDProduct of L1FPGATrackProducer

* code format.

* convert only finally accepted Tracklets to StreamsStub.

* undo last commit, adding trackword ed product and adding gaps to stubs and tracks to get clock accurate emulation.

* swap bugfix.

* rebased and name change of TrackBuilderChannel adopted.

* fixing rebase errors.

* fixing more rebase errors.

* fixing even more rebase errors.

* track builder channel upgraded to assign stubs to channel.

* renamed TrackBuilderChannel to ChannelAssignment now also containing DTC to IR mapping

* StreamsStub added as EDProduct of L1FPGATrackProducer

* rebased and name change of TrackBuilderChannel adopted.

* criteria to build track updated, TBout works now for all seed types.

* StreamsStub added as EDProduct of L1FPGATrackProducer

* use customize function to manipulate L1FPGATrackProducer configuration

* rebase to tschuh_SummerChain, customize updated to set EmulateTB, demonstrator counts now the amount of passed events.

* initial counter values fixed.

* rebase and reduce config customize function extended

* fixing merge errors.

* Ians first comments.

* rebase and Ians secodn comments.

* Update ChannelAssignment_cfi.py

* Ians third comments.

* Ians fourth comments.

Co-authored-by: Ian Tomalin <ian.tomalin@stfc.ac.uk>
  • Loading branch information
tschuh and tomalin committed Jul 8, 2022
1 parent 59011c0 commit ed16fcc
Show file tree
Hide file tree
Showing 25 changed files with 148 additions and 89 deletions.
6 changes: 3 additions & 3 deletions L1Trigger/TrackFindingTracklet/interface/ChannelAssignment.h
Original file line number Diff line number Diff line change
Expand Up @@ -23,10 +23,10 @@ namespace trklet {
ChannelAssignment(const edm::ParameterSet& iConfig, const tt::Setup* setup);
~ChannelAssignment() {}
// sets channelId of given TTTrackRef from TrackBuilder or PurgeDuplicate (if enabled), return false if track outside pt range
bool channelId(const TTTrackRef& ttTrackRef, int& channelId);
bool channelId(const TTTrackRef& ttTrackRef, int& channelId) const;
// number of used channels
int numChannels() const { return numChannels_; }
// sets layerId (0-7 in sequence the seed type projects to) of given TTStubRef and seedType, returns false if seeed stub
// sets layerId (0-7 in sequence the seed type projects to) aka stub channel id of given TTStubRef and seedType, returns false if seeed stub
bool layerId(int seedType, const TTStubRef& ttStubRef, int& layerId) const;
// return tracklet layerId (barrel: [0-5], endcap: [6-10]) for given TTStubRef
int trackletLayerId(const TTStubRef& ttStubRef) const { return setup_->trackletLayerId(ttStubRef); };
Expand All @@ -48,7 +48,7 @@ namespace trklet {
int numSeedTypes_;
// number of used channels
int numChannels_;
// max number layers a sedd type may project to
// max number layers a seed type may project to
int maxNumProjectionLayers_;
// seeding layers of seed types using default layer id [barrel: 1-6, discs: 11-15]
std::vector<std::vector<int>> seedTypesSeedLayers_;
Expand Down
2 changes: 2 additions & 0 deletions L1Trigger/TrackFindingTracklet/interface/Settings.h
Original file line number Diff line number Diff line change
Expand Up @@ -245,6 +245,8 @@ namespace trklet {
void setStoreTrackBuilderOutput(bool storeTrackBuilderOutput) {
storeTrackBuilderOutput_ = storeTrackBuilderOutput;
}
void setRemovalType(std::string removalType) { removalType_ = removalType; }
void setDoMultipleMatches(bool doMultipleMatches) { doMultipleMatches_ = doMultipleMatches; }

// configurable
unsigned int nHelixPar() const { return nHelixPar_; }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -260,7 +260,6 @@ L1FPGATrackProducer::L1FPGATrackProducer(edm::ParameterSet const& iConfig)

// book ES product to assign tracks and stubs to InputRouter input channel and TrackBuilder output channel
esGetTokenChannelAssignment_ = esConsumes<ChannelAssignment, ChannelAssignmentRcd, Transition::BeginRun>();
// book ES product for track trigger cinfiguration
esGetToken_ = esConsumes<tt::Setup, tt::SetupRcd, edm::Transition::BeginRun>();
// initial ES products
channelAssignment_ = nullptr;
Expand All @@ -280,6 +279,8 @@ L1FPGATrackProducer::L1FPGATrackProducer(edm::ParameterSet const& iConfig)

settings.setFakefit(iConfig.getParameter<bool>("Fakefit"));
settings.setStoreTrackBuilderOutput(iConfig.getParameter<bool>("StoreTrackBuilderOutput"));
settings.setRemovalType(iConfig.getParameter<string>("RemovalType"));
settings.setDoMultipleMatches(iConfig.getParameter<bool>("DoMultipleMatches"));

if (extended_) {
settings.setTableTEDFile(tableTEDFile.fullPath());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,4 +42,4 @@ namespace trklet {

} // namespace trklet

DEFINE_FWK_EVENTSETUP_MODULE(trklet::ProducerChannelAssignment);
DEFINE_FWK_EVENTSETUP_MODULE(trklet::ProducerChannelAssignment);
12 changes: 6 additions & 6 deletions L1Trigger/TrackFindingTracklet/python/Analyzer_cff.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
import FWCore.ParameterSet.Config as cms

from L1Trigger.TrackFindingTracklet.Analyzer_cfi import TrackFindingTrackletAnalyzer_params
from L1Trigger.TrackFindingTracklet.ProducerKF_cfi import TrackFindingTrackletProducerKF_params
from L1Trigger.TrackFindingTracklet.Producer_cfi import TrackFindingTrackletProducer_params

TrackFindingTrackletAnalyzerTracklet = cms.EDAnalyzer( 'trklet::AnalyzerTracklet', TrackFindingTrackletAnalyzer_params, TrackFindingTrackletProducerKF_params )
TrackFindingTrackletAnalyzerKFin = cms.EDAnalyzer( 'trklet::AnalyzerKFin', TrackFindingTrackletAnalyzer_params, TrackFindingTrackletProducerKF_params )
TrackFindingTrackletAnalyzerKF = cms.EDAnalyzer( 'trackerTFP::AnalyzerKF', TrackFindingTrackletAnalyzer_params, TrackFindingTrackletProducerKF_params )
TrackFindingTrackletAnalyzerKFout = cms.EDAnalyzer( 'trklet::AnalyzerKFout', TrackFindingTrackletAnalyzer_params, TrackFindingTrackletProducerKF_params )
TrackFindingTrackletAnalyzerTT = cms.EDAnalyzer( 'trklet::AnalyzerTT', TrackFindingTrackletAnalyzer_params, TrackFindingTrackletProducerKF_params )
TrackFindingTrackletAnalyzerTracklet = cms.EDAnalyzer( 'trklet::AnalyzerTracklet', TrackFindingTrackletAnalyzer_params, TrackFindingTrackletProducer_params )
TrackFindingTrackletAnalyzerKFin = cms.EDAnalyzer( 'trklet::AnalyzerKFin', TrackFindingTrackletAnalyzer_params, TrackFindingTrackletProducer_params )
TrackFindingTrackletAnalyzerKF = cms.EDAnalyzer( 'trackerTFP::AnalyzerKF', TrackFindingTrackletAnalyzer_params, TrackFindingTrackletProducer_params )
TrackFindingTrackletAnalyzerKFout = cms.EDAnalyzer( 'trklet::AnalyzerKFout', TrackFindingTrackletAnalyzer_params, TrackFindingTrackletProducer_params )
TrackFindingTrackletAnalyzerTT = cms.EDAnalyzer( 'trklet::AnalyzerTT', TrackFindingTrackletAnalyzer_params, TrackFindingTrackletProducer_params )
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,4 @@

from L1Trigger.TrackFindingTracklet.ChannelAssignment_cfi import ChannelAssignment_params

ChannelAssignment = cms.ESProducer("trklet::ProducerChannelAssignment", ChannelAssignment_params)
ChannelAssignment = cms.ESProducer("trklet::ProducerChannelAssignment", ChannelAssignment_params)
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@

SeedTypesReduced = cms.vstring( "L1L2", "L2L3", "L3L4", "L5L6", "D1D2", "D3D4", "L1D1", "L2D1" ), # seed types used in reduced tracklet algorithm (position gives int value)

MaxNumProjectionLayers = cms.int32( 8 ), # max number layers a sedd type may project to
MaxNumProjectionLayers = cms.int32( 8 ), # max number layers a seed type may project to
SeedTypesSeedLayersReduced = cms.PSet ( # seeding layers of seed types in reduced config using default layer id [barrel: 1-6, discs: 11-15]
L1L2 = cms.vint32( 1, 2 ),
L2L3 = cms.vint32( 2, 3 ),
Expand All @@ -30,6 +30,6 @@
L2D1 = cms.vint32( 1, 12, 13, 14 )
),

IRChannelsIn = cms.vint32( range(0, 48) ) # map of used DTC tfp channels in InputRouter
IRChannelsIn = cms.vint32( range(0, 48) ) # vector of DTC id indexed by connected IR module id (from order in processingmodules.dat)

)
)
31 changes: 31 additions & 0 deletions L1Trigger/TrackFindingTracklet/python/Customize_cff.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
import FWCore.ParameterSet.Config as cms

# configures track finding s/w to use KF emulator instead of KF simulator
def newKFConfig(process):
process.TTTracksFromTrackletEmulation.Fakefit = True

# configures track finding s/w to behave as track finding f/w
def fwConfig(process):
newKFConfig(process)
process.TrackTriggerSetup.Firmware.FreqBE = 240
process.TTTracksFromTrackletEmulation.RemovalType = ""
process.TTTracksFromTrackletEmulation.DoMultipleMatches = False
process.TTTracksFromTrackletEmulation.EmulateTB = True
process.ChannelAssignment.UseDuplicateRemoval = False

# configures track finding s/w to behave as a subchain of processing steps
def reducedConfig(process):
fwConfig(process)
process.TrackTriggerSetup.KalmanFilter.NumWorker = 1
process.ChannelAssignment.SeedTypes = cms.vstring( "L1L2" )
process.ChannelAssignment.SeedTypesSeedLayers = cms.PSet( L1L2 = cms.vint32( 1, 2 ) )
process.ChannelAssignment.SeedTypesProjectionLayers = cms.PSet( L1L2 = cms.vint32( 3, 4, 5, 6 ) )
process.ChannelAssignment.MaxNumProjectionLayers = 4
# this are tt::Setup::dtcId in order as in process.TTTracksFromTrackletEmulation.processingModulesFile translated by
# reverssing naming logic described in L1FPGATrackProducer
# TO DO: Eliminate cfg param IRChannelsIn by taking this info from Tracklet wiring map.
process.ChannelAssignment.IRChannelsIn = cms.vint32( 0, 1, 25, 2, 26, 4, 28, 5, 29, 6, 30, 7, 31, 8, 32, 9, 33 )
process.TTTracksFromTrackletEmulation.Reduced = True
process.TTTracksFromTrackletEmulation.memoryModulesFile = 'L1Trigger/TrackFindingTracklet/data/reduced_memorymodules.dat'
process.TTTracksFromTrackletEmulation.processingModulesFile = 'L1Trigger/TrackFindingTracklet/data/reduced_processingmodules.dat'
process.TTTracksFromTrackletEmulation.wiresFile = 'L1Trigger/TrackFindingTracklet/data/reduced_wires.dat'
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@
# prompt hybrid emulation
TTTrackAssociatorFromPixelDigis.TTTracks = cms.VInputTag(cms.InputTag("TTTracksFromTrackletEmulation", "Level1TTTracks") )

L1TrackletTracks = cms.Sequence(offlineBeamSpot*TrackletTracksFromTrackletEmulation)
L1HybridTracks = cms.Sequence(offlineBeamSpot*TTTracksFromTrackletEmulation)
L1HybridTracksWithAssociators = cms.Sequence(offlineBeamSpot*TTTracksFromTrackletEmulation*TrackTriggerAssociatorTracks)

Expand All @@ -24,11 +23,3 @@
# 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)

Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,12 @@
from L1Trigger.TrackerTFP.ProducerLayerEncoding_cff import TrackTriggerLayerEncoding
from L1Trigger.TrackerTFP.KalmanFilterFormats_cff import TrackTriggerKalmanFilterFormats
from L1Trigger.TrackFindingTracklet.ChannelAssignment_cff import ChannelAssignment
from L1Trigger.TrackFindingTracklet.ProducerKF_cfi import TrackFindingTrackletProducerKF_params
from L1Trigger.TrackFindingTracklet.Producer_cfi import TrackFindingTrackletProducer_params

TrackFindingTrackletProducerIRin = cms.EDProducer( 'trklet::ProducerIRin', TrackFindingTrackletProducerKF_params )
TrackFindingTrackletProducerTBout = cms.EDProducer( 'trklet::ProducerTBout', TrackFindingTrackletProducerKF_params )
TrackFindingTrackletProducerKFin = cms.EDProducer( 'trklet::ProducerKFin', TrackFindingTrackletProducerKF_params )
TrackFindingTrackletProducerKF = cms.EDProducer( 'trackerTFP::ProducerKF', TrackFindingTrackletProducerKF_params )
TrackFindingTrackletProducerTT = cms.EDProducer( 'trklet::ProducerTT', TrackFindingTrackletProducerKF_params )
TrackFindingTrackletProducerAS = cms.EDProducer( 'trklet::ProducerAS', TrackFindingTrackletProducerKF_params )
TrackFindingTrackletProducerKFout = cms.EDProducer( 'trklet::ProducerKFout', TrackFindingTrackletProducerKF_params )
TrackFindingTrackletProducerIRin = cms.EDProducer( 'trklet::ProducerIRin', TrackFindingTrackletProducer_params )
TrackFindingTrackletProducerTBout = cms.EDProducer( 'trklet::ProducerTBout', TrackFindingTrackletProducer_params )
TrackFindingTrackletProducerKFin = cms.EDProducer( 'trklet::ProducerKFin', TrackFindingTrackletProducer_params )
TrackFindingTrackletProducerKF = cms.EDProducer( 'trackerTFP::ProducerKF', TrackFindingTrackletProducer_params )
TrackFindingTrackletProducerTT = cms.EDProducer( 'trklet::ProducerTT', TrackFindingTrackletProducer_params )
TrackFindingTrackletProducerAS = cms.EDProducer( 'trklet::ProducerAS', TrackFindingTrackletProducer_params )
TrackFindingTrackletProducerKFout = cms.EDProducer( 'trklet::ProducerKFout', TrackFindingTrackletProducer_params )
Original file line number Diff line number Diff line change
@@ -1,19 +1,19 @@
import FWCore.ParameterSet.Config as cms

TrackFindingTrackletProducerKF_params = cms.PSet (
TrackFindingTrackletProducer_params = cms.PSet (

InputTag = cms.InputTag( "TTTracksFromTrackletEmulation", "Level1TTTracks"), #
InputTagDTC = cms.InputTag( "TrackerDTCProducer", "StubAccepted"), #
LabelKFin = cms.string ( "TrackFindingTrackletProducerKFin" ), #
LabelKF = cms.string ( "TrackFindingTrackletProducerKF" ), #
LabelTT = cms.string ( "TrackFindingTrackletProducerTT" ), #
LabelAS = cms.string ( "TrackFindingTrackletProducerAS" ), #
LabelKFout = cms.string ( "TrackFindingTrackletProducerKFout" ), #
BranchAcceptedStubs = cms.string ( "StubAccepted" ), #
BranchAcceptedTracks = cms.string ( "TrackAccepted" ), #
BranchLostStubs = cms.string ( "StubLost" ), #
BranchLostTracks = cms.string ( "TrackLost" ), #
CheckHistory = cms.bool ( False ), # checks if input sample production is configured as current process
EnableTruncation = cms.bool ( True ), # enable emulation of truncation, lost stubs are filled in BranchLost
InputTagDTC = cms.InputTag( "TrackerDTCProducer", "StubAccepted"), #
LabelKFin = cms.string ( "TrackFindingTrackletProducerKFin" ), #
LabelKF = cms.string ( "TrackFindingTrackletProducerKF" ), #
LabelTT = cms.string ( "TrackFindingTrackletProducerTT" ), #
LabelAS = cms.string ( "TrackFindingTrackletProducerAS" ), #
LabelKFout = cms.string ( "TrackFindingTrackletProducerKFout" ), #
BranchAcceptedStubs = cms.string ( "StubAccepted" ), #
BranchAcceptedTracks = cms.string ( "TrackAccepted" ), #
BranchLostStubs = cms.string ( "StubLost" ), #
BranchLostTracks = cms.string ( "TrackLost" ), #
CheckHistory = cms.bool ( False ), # checks if input sample production is configured as current process
EnableTruncation = cms.bool ( True ), # enable emulation of truncation, lost stubs are filled in BranchLost

)
18 changes: 3 additions & 15 deletions L1Trigger/TrackFindingTracklet/python/Tracklet_cfi.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,9 @@
TrackQuality = cms.bool(True),
TrackQualityPSet = cms.PSet(TrackQualityParams),
Fakefit = cms.bool(False), # True causes Tracklet reco to output TTTracks before DR & KF
StoreTrackBuilderOutput = cms.bool(False) # if True EDProducts for TrackBuilder tracks and stubs will be filled
StoreTrackBuilderOutput = cms.bool(False), # if True EDProducts for TrackBuilder tracks and stubs will be filled
RemovalType = cms.string("merge"), # Duplicate track removal
DoMultipleMatches = cms.bool(True) # Allow tracklet tracks multiple stubs per layer
)

TTTracksFromExtendedTrackletEmulation = TTTracksFromTrackletEmulation.clone(
Expand All @@ -36,18 +38,4 @@
# Quality Flag and Quality params
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'),
)

# this is to run Tracklet pattern reco with new KF
TrackletTracksFromTrackletEmulation = TTTracksFromTrackletEmulation.clone(
Fakefit = cms.bool(True)
)
4 changes: 2 additions & 2 deletions L1Trigger/TrackFindingTracklet/src/ChannelAssignment.cc
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,7 @@ namespace trklet {
}

// sets channelId of given TTTrackRef, return false if track outside pt range
bool ChannelAssignment::channelId(const TTTrackRef& ttTrackRef, int& channelId) {
bool ChannelAssignment::channelId(const TTTrackRef& ttTrackRef, int& channelId) const {
if (!useDuplicateRemoval_) {
const int seedType = ttTrackRef->trackSeedType();
if (seedType >= numSeedTypes_) {
Expand Down Expand Up @@ -161,4 +161,4 @@ namespace trklet {
return true;
}

} // namespace trklet
} // namespace trklet
2 changes: 1 addition & 1 deletion L1Trigger/TrackFindingTracklet/src/ChannelAssignmentRcd.cc
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
#include "L1Trigger/TrackFindingTracklet/interface/ChannelAssignmentRcd.h"
#include "FWCore/Framework/interface/eventsetuprecord_registration_macro.h"

EVENTSETUP_RECORD_REG(trklet::ChannelAssignmentRcd);
EVENTSETUP_RECORD_REG(trklet::ChannelAssignmentRcd);
2 changes: 1 addition & 1 deletion L1Trigger/TrackFindingTracklet/src/ES_ChannelAssignment.cc
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
#include "FWCore/Utilities/interface/typelookup.h"
#include "L1Trigger/TrackFindingTracklet/interface/ChannelAssignment.h"

TYPELOOKUP_DATA_REG(trklet::ChannelAssignment);
TYPELOOKUP_DATA_REG(trklet::ChannelAssignment);
3 changes: 1 addition & 2 deletions L1Trigger/TrackFindingTracklet/src/FitTrack.cc
Original file line number Diff line number Diff line change
Expand Up @@ -1034,8 +1034,7 @@ void FitTrack::execute(const ChannelAssignment* channelAssignment,
// store bit and clock accurate TB output
if (settings_.storeTrackBuilderOutput() && bestTracklet) {
// add gap if enough layer to form track
static constexpr int limit = 4;
if ((int)bestTracklet->getL1Stubs().size() < limit) {
if (!bestTracklet->fit()) {
streamTrack.emplace_back(tt::Frame());
for (auto& stream : streamsStub)
stream.emplace_back(tt::FrameStub());
Expand Down
2 changes: 2 additions & 0 deletions L1Trigger/TrackFindingTracklet/src/TrackletEventProcessor.cc
Original file line number Diff line number Diff line change
Expand Up @@ -184,6 +184,8 @@ void TrackletEventProcessor::event(SLHCEvent& ev) {
globals_->event() = &ev;

tracks_.clear();
for (tt::StreamStub& streamStub : streamsStub_)
streamStub.clear();

eventnum_++;
bool first = (eventnum_ == 1);
Expand Down
Loading

0 comments on commit ed16fcc

Please sign in to comment.