Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Summerchain new KF #107

Closed
wants to merge 2 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions L1Trigger/TrackFindingTracklet/interface/Settings.h
Original file line number Diff line number Diff line change
Expand Up @@ -241,6 +241,8 @@ namespace trklet {
bool doMultipleMatches() const { return doMultipleMatches_; }
bool fakefit() const { return fakefit_; }
void setFakefit(bool fakefit) { fakefit_ = fakefit; }
void setRemovalType(std::string removalType) { removalType_ = removalType; }
void setDoMultipleMatches(bool doMultipleMatches) { doMultipleMatches_ = doMultipleMatches; }

// configurable
unsigned int nHelixPar() const { return nHelixPar_; }
Expand Down
31 changes: 25 additions & 6 deletions L1Trigger/TrackFindingTracklet/interface/TrackBuilderChannel.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,34 +5,53 @@
#include "L1Trigger/TrackFindingTracklet/interface/TrackBuilderChannelRcd.h"
#include "FWCore/ParameterSet/interface/ParameterSet.h"
#include "DataFormats/L1TrackTrigger/interface/TTTypes.h"
#include "L1Trigger/TrackTrigger/interface/Setup.h"

#include <vector>

namespace trackFindingTracklet {

/*! \class trackFindingTracklet::TrackBuilderChannel
* \brief Class to assign tracklet tracks to channel
* based on ther Pt or seed type,
* \brief Class to assign tracklet tracks ans stubs to channel
* based on their Pt or seed type
* \author Thomas Schuh
* \date 2020, Nov
* \date 2020, Nov; updated 2021 Oct
*/
class TrackBuilderChannel {
public:
TrackBuilderChannel() {}
TrackBuilderChannel(const edm::ParameterSet& iConfig);
TrackBuilderChannel(const edm::ParameterSet& iConfig, const tt::Setup* setup);
~TrackBuilderChannel() {}
// sets channelId of given TTTrack, return false if track outside pt range
bool channelId(const TTTrack<Ref_Phase2TrackerDigi_>& ttTrack, int& channelId);
// sets channelId of given TTTrackRef, return false if track outside pt range
bool channelId(const TTTrackRef& ttTrackRef, int& channelId);
// number of used channels
int numChannels() const { return numChannels_; }
// sets layerId of given TTStubRef and TTTrackRef, returns false if seeed stub
bool layerId(const TTTrackRef& ttTrackRef, const TTStubRef& ttStubRef, int& layerId);
// max number layers a sedd type may project to
int maxNumProjectionLayers() const { return maxNumProjectionLayers_; }

private:
// helper class to store configurations
const tt::Setup* setup_;
// reduce l1 tracking to summer chain configuration
bool summerChain_;
// use tracklet seed type as channel id if False, binned track pt used if True
bool useDuplicateRemoval_;
// pt Boundaries in GeV, last boundary is infinity
std::vector<double> boundaries_;
// seed type names
std::vector<std::string> seedTypeNames_;
// number of used seed types in tracklet algorithm
int numSeedTypes_;
// number of used channels
int numChannels_;
// max number layers a sedd 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_;
// layers a seed types can project to using default layer id [barrel: 1-6, discs: 11-15]
std::vector<std::vector<int>> seedTypesProjectionLayers_;
};

} // namespace trackFindingTracklet
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
#ifndef L1Trigger_TrackFindingTracklet_LayerEncodingRcd_h
#define L1Trigger_TrackFindingTracklet_LayerEncodingRcd_h
#ifndef L1Trigger_TrackFindingTracklet_TrackBuilderChannelRcd_h
#define L1Trigger_TrackFindingTracklet_TrackBuilderChannelRcd_h

#include "FWCore/Framework/interface/DependentRecordImplementation.h"
#include "FWCore/Utilities/interface/mplVector.h"
Expand Down
2 changes: 2 additions & 0 deletions L1Trigger/TrackFindingTracklet/plugins/L1FPGATrackProducer.cc
Original file line number Diff line number Diff line change
Expand Up @@ -250,6 +250,8 @@ L1FPGATrackProducer::L1FPGATrackProducer(edm::ParameterSet const& iConfig)
settings.setWiresFile(wiresFile.fullPath());

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

if (extended_) {
settings.setTableTEDFile(tableTEDFile.fullPath());
Expand Down
17 changes: 10 additions & 7 deletions L1Trigger/TrackFindingTracklet/plugins/ProducerKFin.cc
Original file line number Diff line number Diff line change
Expand Up @@ -134,23 +134,26 @@ namespace trackFindingTracklet {
StreamsTrack streamLostTracks(numStreamsTracks);
// read in hybrid track finding product and produce KFin product
if (setup_->configurationSupported()) {
// create TTrackRefs
Handle<TTTracks> handleTTTracks;
iEvent.getByToken<TTTracks>(edGetTokenTTTracks_, handleTTTracks);
const TTTracks& ttTracks = *handleTTTracks;
vector<TTTrackRef> ttTrackRefs;
ttTrackRefs.reserve(handleTTTracks->size());
for (int i = 0; i < (int)handleTTTracks->size(); i++)
ttTrackRefs.emplace_back(TTTrackRef(handleTTTracks, i));
// Assign input tracks to channels according to TrackBuilder step.
vector<vector<TTTrackRef>> ttTrackRefsStreams(numStreamsTracks);
vector<int> nTTTracksStreams(numStreamsTracks, 0);
int channelId;
for (const TTTrack<Ref_Phase2TrackerDigi_>& ttTrack : ttTracks)
if (trackBuilderChannel_->channelId(ttTrack, channelId))
for (const TTTrackRef& ttTrackRef : ttTrackRefs)
if (trackBuilderChannel_->channelId(ttTrackRef, channelId))
nTTTracksStreams[channelId]++;
channelId = 0;
for (int nTTTracksStream : nTTTracksStreams)
ttTrackRefsStreams[channelId++].reserve(nTTTracksStream);
int i(0);
for (const TTTrack<Ref_Phase2TrackerDigi_>& ttTrack : ttTracks)
if (trackBuilderChannel_->channelId(ttTrack, channelId))
ttTrackRefsStreams[channelId].emplace_back(TTTrackRef(handleTTTracks, i++));
for (const TTTrackRef& ttTrackRef : ttTrackRefs)
if (trackBuilderChannel_->channelId(ttTrackRef, channelId))
ttTrackRefsStreams[channelId].push_back(ttTrackRef);
for (channelId = 0; channelId < numStreamsTracks; channelId++) {
// Create vector of stubs/tracks in KF format from TTTracks
deque<FrameTrack> streamTracks;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,8 @@ namespace trackFindingTracklet {
}

unique_ptr<TrackBuilderChannel> ProducerTrackBuilderChannel::produce(const TrackBuilderChannelRcd& rcd) {
return make_unique<TrackBuilderChannel>(*iConfig_);
const Setup* setup = &rcd.get(esGetToken_);
return make_unique<TrackBuilderChannel>(*iConfig_, setup);
}

} // namespace trackFindingTracklet
Expand Down
19 changes: 19 additions & 0 deletions L1Trigger/TrackFindingTracklet/python/Customize_cff.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
import FWCore.ParameterSet.Config as cms

def summerChainConfig(process):
process.TrackTriggerSetup.Firmware.FreqBE = 240
process.TrackTriggerSetup.KalmanFilter.NumWorker = 1
process.TrackBuilderChannel.SummerChain = True
process.TrackBuilderChannel.MaxNumProjectionLayers = 4
process.TrackFindingTrackletProducerIRin.SummerChain = True
process.TTTracksFromTrackletEmulation.Fakefit = True
process.TTTracksFromTrackletEmulation.RemovalType = ""
process.TTTracksFromTrackletEmulation.DoMultipleMatches = False
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'
return process

def newKFConfig(process):
process.TTTracksFromTrackletEmulation.Fakefit = True
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 Down
2 changes: 2 additions & 0 deletions L1Trigger/TrackFindingTracklet/python/ProducerKF_cff.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@
from L1Trigger.TrackFindingTracklet.ProducerTrackBuilderChannel_cff import TrackBuilderChannel
from L1Trigger.TrackFindingTracklet.ProducerKF_cfi import TrackFindingTrackletProducerKF_params

TrackFindingTrackletProducerIRin = cms.EDProducer( 'trackFindingTracklet::ProducerIRin', TrackFindingTrackletProducerKF_params )
TrackFindingTrackletProducerTBout = cms.EDProducer( 'trackFindingTracklet::ProducerTBout', TrackFindingTrackletProducerKF_params )
TrackFindingTrackletProducerKFin = cms.EDProducer( 'trackFindingTracklet::ProducerKFin', TrackFindingTrackletProducerKF_params )
TrackFindingTrackletProducerKF = cms.EDProducer( 'trackerTFP::ProducerKF', TrackFindingTrackletProducerKF_params )
TrackFindingTrackletProducerTT = cms.EDProducer( 'trackFindingTracklet::ProducerTT', TrackFindingTrackletProducerKF_params )
Expand Down
28 changes: 16 additions & 12 deletions L1Trigger/TrackFindingTracklet/python/ProducerKF_cfi.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,21 @@

TrackFindingTrackletProducerKF_params = cms.PSet (

InputTag = cms.InputTag( "TrackletTracksFromTrackletEmulation", "Level1TTTracks"), #
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
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

SummerChain = cms.bool ( False ), # reduce l1 tracking to summer chain configuration
SummerChainChannels = cms.vint32( 0, 1, 25, 2, 26, 4, 28, 5, 29, 6, 30, 7, 31, 8, 32, 9, 33 ) # map of used tfp channels in summer chain config

)
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import FWCore.ParameterSet.Config as cms

from L1Trigger.TrackFindingTracklet.ProducerTrackBuilderChannel_cfi import TrackBuilderChannel_params
from L1Trigger.TrackFindingTracklet.ProducerKF_cfi import TrackFindingTrackletProducerKF_params

TrackBuilderChannel = cms.ESProducer("trackFindingTracklet::ProducerTrackBuilderChannel", TrackBuilderChannel_params)
TrackBuilderChannel = cms.ESProducer("trackFindingTracklet::ProducerTrackBuilderChannel", TrackBuilderChannel_params, TrackFindingTrackletProducerKF_params)
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,31 @@

TrackBuilderChannel_params = cms.PSet (

UseDuplicateRemoval = cms.bool ( True ), # use tracklet seed type as channel id if False, binned track pt used if True
NumSeedTypes = cms.int32 ( 8 ), # number of used seed types in tracklet algorithm
#PtBoundaries = cms.vdouble( 1.8, 2.16, 2.7, 3.6, 5.4, 10.8 ), # pt Boundaries in GeV, last boundary is infinity
PtBoundaries = cms.vdouble( 1.34 ), # pt Boundaries in GeV, last boundary is infinity
UseDuplicateRemoval = cms.bool ( True ), # use tracklet seed type as channel id if False, binned track pt used if True
SeedTypes = cms.vstring( "L1L2", "L2L3", "L3L4", "L5L6", "D1D2", "D3D4", "L1D1", "L1D2" ), # seed types used in tracklet algorithm (position gives int value)
#PtBoundaries = cms.vdouble( 1.8, 2.16, 2.7, 3.6, 5.4, 10.8 ), # pt Boundaries in GeV, last boundary is infinity
PtBoundaries = cms.vdouble( 1.34 ), # pt Boundaries in GeV, last boundary is infinity

MaxNumProjectionLayers = cms.int32( 8 ), # max number layers a sedd type may project to
SeedTypesSeedLayers = cms.PSet ( # seeding layers of seed types using default layer id [barrel: 1-6, discs: 11-15]
L1L2 = cms.vint32( 1, 2 ),
L2L3 = cms.vint32( 2, 3 ),
L3L4 = cms.vint32( 3, 4 ),
L5L6 = cms.vint32( 5, 6 ),
D1D2 = cms.vint32( 11, 12 ),
D3D4 = cms.vint32( 13, 14 ),
L1D1 = cms.vint32( 1, 11 ),
L1D2 = cms.vint32( 1, 12 )
),
SeedTypesProjectionLayers = cms.PSet ( # layers a seed types can project to using default layer id [barrel: 1-6, discs: 11-15]
L1L2 = cms.vint32( 3, 4, 5, 6, 11, 12, 13, 14 ),
L2L3 = cms.vint32( 1, 4, 5, 6, 11, 12, 13, 14 ),
L3L4 = cms.vint32( 1, 2, 5, 6, 11, 12 ),
L5L6 = cms.vint32( 1, 2, 3, 4 ),
D1D2 = cms.vint32( 1, 2, 13, 14, 15 ),
D3D4 = cms.vint32( 1, 11, 12, 15 ),
L1D1 = cms.vint32( 12, 13, 14, 15 ),
L1D2 = cms.vint32( 1, 12, 13, 14 )
)

)
9 changes: 3 additions & 6 deletions L1Trigger/TrackFindingTracklet/python/Tracklet_cfi.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,9 @@
# Quality Flag and Quality params
TrackQuality = cms.bool(True),
TrackQualityPSet = cms.PSet(TrackQualityParams),
Fakefit = cms.bool(False)
Fakefit = cms.bool(False),
RemovalType = cms.string("merge"),
DoMultipleMatches = cms.bool(True)
)

TTTracksFromExtendedTrackletEmulation = TTTracksFromTrackletEmulation.clone(
Expand All @@ -43,9 +45,4 @@
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)
)
Loading