Skip to content

Commit

Permalink
rebased and name change of TrackBuilderChannel adopted.
Browse files Browse the repository at this point in the history
  • Loading branch information
tschuh committed Dec 8, 2021
1 parent 4f5efaf commit 1a9bceb
Show file tree
Hide file tree
Showing 11 changed files with 84 additions and 83 deletions.
7 changes: 5 additions & 2 deletions L1Trigger/TrackFindingTracklet/interface/ChannelAssignment.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,14 +29,17 @@ namespace trklet {
int numChannels() const { return numChannels_; }
// sets layerId of given TTStubRef and seedType, returns false if seeed stub
bool layerId(int seedType, const TTStubRef& ttStubRef, int& layerId) const;
// sets layerId of given TTStubRef and TTTrackRef, returns false if seeed stub
bool layerId(const TTTrackRef& ttTrackRef, const TTStubRef& ttStubRef, int& layerId) const;
// return tracklet layerId (barrel: [0-5], endcap: [6-10]) for given TTStubRef
int trackletLayerId(const TTStubRef& ttStubRef) const;
// max number layers a sedd type may project to
int maxNumProjectionLayers() const { return maxNumProjectionLayers_; }
// map of used DTC tfp channels in InputRouter
std::vector<int> channelEncoding() const { return channelEncoding_; }

private:
// checks is seedType is supported
void checkSeedType(int seedType) const;

// helper class to store configurations
const tt::Setup* setup_;
// use tracklet seed type as channel id if False, binned track pt used if True
Expand Down
4 changes: 2 additions & 2 deletions L1Trigger/TrackFindingTracklet/interface/FitTrack.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
#include "L1Trigger/TrackFindingTracklet/interface/TrackletParametersMemory.h"
#include "L1Trigger/TrackFindingTracklet/interface/FullMatchMemory.h"
#include "L1Trigger/TrackFindingTracklet/interface/TrackFitMemory.h"
#include "L1Trigger/TrackFindingTracklet/interface/TrackBuilderChannel.h"
#include "L1Trigger/TrackFindingTracklet/interface/ChannelAssignment.h"

#include <vector>
#include <deque>
Expand Down Expand Up @@ -40,7 +40,7 @@ namespace trklet {

std::vector<Tracklet*> orderedMatches(std::vector<FullMatchMemory*>& fullmatch);

void execute(TrackBuilderChannel* trackBuilderChannel,
void execute(ChannelAssignment* channelAssignment,
std::deque<tt::Frame>& streamTrack,
std::vector<std::deque<tt::FrameStub>>& streamsStub,
unsigned int iSector);
Expand Down
4 changes: 2 additions & 2 deletions L1Trigger/TrackFindingTracklet/interface/Sector.h
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

#include "L1Trigger/TrackFindingTracklet/interface/L1TStub.h"
#include "L1Trigger/TrackFindingTracklet/interface/SLHCEvent.h"
#include "L1Trigger/TrackFindingTracklet/interface/TrackBuilderChannel.h"
#include "L1Trigger/TrackFindingTracklet/interface/ChannelAssignment.h"

#include <string>
#include <map>
Expand Down Expand Up @@ -115,7 +115,7 @@ namespace trklet {
void executeME();
void executeMC();
void executeMP();
void executeFT(TrackBuilderChannel* trackBuilderChannel, tt::Streams& streamsTrack, tt::StreamsStub& streamsStub);
void executeFT(ChannelAssignment* channelAssignment, tt::Streams& streamsTrack, tt::StreamsStub& streamsStub);
void executePD(std::vector<Track>& tracks);

std::vector<Tracklet*> getAllTracklets() const;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
#define L1Trigger_TrackFindingTracklet_interface_TrackletEventProcessor_h

#include "L1Trigger/TrackFindingTracklet/interface/Timer.h"
#include "L1Trigger/TrackFindingTracklet/interface/TrackBuilderChannel.h"
#include "L1Trigger/TrackFindingTracklet/interface/ChannelAssignment.h"

#include <map>
#include <memory>
Expand All @@ -26,7 +26,7 @@ namespace trklet {

~TrackletEventProcessor();

void init(Settings const& theSettings, TrackBuilderChannel* trackBuilderChannel);
void init(Settings const& theSettings, ChannelAssignment* channelAssignment);

void event(SLHCEvent& ev);

Expand All @@ -40,7 +40,7 @@ namespace trklet {
void configure(std::istream& inwire, std::istream& inmem, std::istream& inproc);

const Settings* settings_{nullptr};
TrackBuilderChannel* trackBuilderChannel_{nullptr};
ChannelAssignment* channelAssignment_{nullptr};

std::unique_ptr<Globals> globals_;

Expand Down
20 changes: 10 additions & 10 deletions L1Trigger/TrackFindingTracklet/plugins/L1FPGATrackProducer.cc
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@
#include "L1Trigger/TrackFindingTracklet/interface/Sector.h"
#include "L1Trigger/TrackFindingTracklet/interface/Track.h"
#include "L1Trigger/TrackFindingTracklet/interface/TrackletEventProcessor.h"
#include "L1Trigger/TrackFindingTracklet/interface/TrackBuilderChannel.h"
#include "L1Trigger/TrackFindingTracklet/interface/ChannelAssignment.h"
#include "L1Trigger/TrackFindingTracklet/interface/Tracklet.h"
#include "L1Trigger/TrackFindingTracklet/interface/Residual.h"
#include "L1Trigger/TrackFindingTracklet/interface/Stub.h"
Expand Down Expand Up @@ -194,10 +194,10 @@ class L1FPGATrackProducer : public edm::one::EDProducer<edm::one::WatchRuns> {
EDPutTokenT<Streams> edPutTokenTracks_;
// ED output token for clock and bit accurate stubs
EDPutTokenT<StreamsStub> edPutTokenStubs_;
// TrackBuilderChannel token
ESGetToken<TrackBuilderChannel, TrackBuilderChannelRcd> esGetTokenTrackBuilderChannel_;
// ChannelAssignment token
ESGetToken<ChannelAssignment, ChannelAssignmentRcd> esGetTokenChannelAssignment_;
// helper class to assign tracks to channel
TrackBuilderChannel* trackBuilderChannel_;
ChannelAssignment* channelAssignment_;

// helper class to store DTC configuration
tt::Setup setup_;
Expand Down Expand Up @@ -253,10 +253,10 @@ L1FPGATrackProducer::L1FPGATrackProducer(edm::ParameterSet const& iConfig)
// book ED output token for clock and bit accurate stubs
edPutTokenStubs_ = produces<StreamsStub>("Level1TTTracks");
// book ES product
esGetTokenTrackBuilderChannel_ = esConsumes<TrackBuilderChannel, TrackBuilderChannelRcd, Transition::BeginRun>();
esGetTokenChannelAssignment_ = esConsumes<ChannelAssignment, ChannelAssignmentRcd, Transition::BeginRun>();
esGetToken_ = esConsumes<tt::Setup, tt::SetupRcd, edm::Transition::BeginRun>();
// initial ES products
trackBuilderChannel_ = nullptr;
channelAssignment_ = nullptr;

// --------------------------------------------------------------------------------
// set options in Settings based on inputs from configuration files
Expand Down Expand Up @@ -339,10 +339,10 @@ void L1FPGATrackProducer::beginRun(const edm::Run& run, const edm::EventSetup& i
settings.setBfield(mMagneticFieldStrength);

setup_ = iSetup.getData(esGetToken_);
trackBuilderChannel_ = const_cast<TrackBuilderChannel*>(&iSetup.getData(esGetTokenTrackBuilderChannel_));
channelAssignment_ = const_cast<ChannelAssignment*>(&iSetup.getData(esGetTokenChannelAssignment_));

// initialize the tracklet event processing (this sets all the processing & memory modules, wiring, etc)
eventProcessor.init(settings, trackBuilderChannel_);
eventProcessor.init(settings, channelAssignment_);
}

//////////
Expand Down Expand Up @@ -679,9 +679,9 @@ void L1FPGATrackProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSe

// produce clock and bit output tracks and stubs
// number of track channel
const int numStreamsTrack = N_SECTOR * trackBuilderChannel_->numChannels();
const int numStreamsTrack = N_SECTOR * channelAssignment_->numChannels();
// number of stub channel
const int numStreamsStub = numStreamsTrack * trackBuilderChannel_->maxNumProjectionLayers();
const int numStreamsStub = numStreamsTrack * channelAssignment_->maxNumProjectionLayers();
Streams streamsTrack(numStreamsTrack);
StreamsStub streamsStub(numStreamsStub);
eventProcessor.produce(streamsTrack, streamsStub);
Expand Down
2 changes: 1 addition & 1 deletion L1Trigger/TrackFindingTracklet/python/Tracklet_cfi.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import FWCore.ParameterSet.Config as cms
from L1Trigger.TrackTrigger.TrackQualityParams_cfi import *
from L1Trigger.TrackFindingTracklet.ProducerTrackBuilderChannel_cff import TrackBuilderChannel
from L1Trigger.TrackFindingTracklet.ChannelAssignment_cff import ChannelAssignment

TTTracksFromTrackletEmulation = cms.EDProducer("L1FPGATrackProducer",
TTStubSource = cms.InputTag("TTStubsFromPhase2TrackerDigis","StubAccepted"),
Expand Down
76 changes: 37 additions & 39 deletions L1Trigger/TrackFindingTracklet/src/ChannelAssignment.cc
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ namespace trklet {
numSeedTypes_(seedTypeNames_.size()),
numChannels_(useDuplicateRemoval_ ? 2 * boundaries_.size() : numSeedTypes_),
maxNumProjectionLayers_(iConfig.getParameter<int>("MaxNumProjectionLayers")),
channelEncoding_(iConfig.getParameter<int>("IRChannelsIn")) {
channelEncoding_(iConfig.getParameter<vector<int>>("IRChannelsIn")) {
const ParameterSet& pSetSeedTypesSeedLayers = iConfig.getParameter<ParameterSet>("SeedTypesSeedLayers");
const ParameterSet& pSetSeedTypesProjectionLayers = iConfig.getParameter<ParameterSet>("SeedTypesProjectionLayers");
seedTypesSeedLayers_.reserve(numSeedTypes_);
Expand All @@ -28,45 +28,35 @@ 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 {
const int phiSector = ttTrackRef->phiSector();
bool valid(true);
channelId = -1;
if (!useDuplicateRemoval_) {
const int seedType = ttTrackRef->trackSeedType();
if (seedType >= numSeedTypes_) {
cms::Exception exception("logic_error");
exception << "TTTracks form seed type" << seedType << " not in supported list: (";
for (const auto& s : seedTypeNames_)
exception << s << " ";
exception << ").";
exception.addContext("trackFindingTracklet:ChannelAssignment:channelId");
throw exception;
checkSeedType(seedType);
channelId = seedType;
} else {
const double rInv = ttTrackRef->rInv();
const double pt = 2. * setup_->invPtToDphi() / abs(rInv);
for (double boundary : boundaries_) {
if (pt < boundary)
break;
else
channelId++;
}
channelId = ttTrackRef->phiSector() * numSeedTypes_ + seedType;
return true;
}
const double pt = 2. * setup_->invPtToDphi() / abs(rInv);
channelId = -1;
for (double boundary : boundaries_) {
if (pt < boundary)
break;
else
channelId++;
if (channelId == -1)
valid = false;
channelId = rInv < 0. ? channelId : numChannels_ - channelId - 1;
}
if (channelId == -1)
return false;
channelId = rInv < 0. ? channelId : numChannels_ - channelId - 1;
channelId += phiSector * numChannels_;
return true;
return valid;
}

// sets layerId of given TTStubRef and TTTrackRef, returns false if seeed stub
bool ChannelAssignment::layerId(const TTTrackRef& ttTrackRef, const TTStubRef& ttStubRef, int& layerId) {
// sets layerId of given TTStubRef and seedType, returns false if seeed stub
bool ChannelAssignment::layerId(int seedType, const TTStubRef& ttStubRef, int& layerId) const {
layerId = -1;
if (seedType < 0 || seedType >= numSeedTypes_) {
cms::Exception exception("logic_error");
exception.addContext("trackFindingTracklet::ChannelAssignment::layerId");
exception << "TTTracks with with seed type " << seedType << " not supported.";
throw exception;
}
checkSeedType(seedType);
const int layer = setup_->layerId(ttStubRef);
const vector<int>& seedingLayers = seedTypesSeedLayers_[seedType];
if (find(seedingLayers.begin(), seedingLayers.end(), layer) != seedingLayers.end())
Expand All @@ -76,7 +66,7 @@ namespace trklet {
if (pos == projectingLayers.end()) {
const string& name = seedTypeNames_[seedType];
cms::Exception exception("logic_error");
exception.addContext("trackFindingTracklet::ChannelAssignment::layerId");
exception.addContext("ChannelAssignment::ChannelAssignment::layerId");
exception << "TTStub from layer " << layer << " (barrel: 1-6; discs: 11-15) from seed type " << name
<< " not supported.";
throw exception;
Expand All @@ -85,16 +75,24 @@ namespace trklet {
return true;
}

// sets layerId of given TTStubRef and TTTrackRef, returns false if seeed stub
bool TrackBuilderChannel::layerId(const TTTrackRef& ttTrackRef, const TTStubRef& ttStubRef, int& layerId) const {
return this->layerId(ttTrackRef->trackSeedType(), ttStubRef, layerId);
}

// return tracklet layerId (barrel: [0-5], endcap: [6-10]) for given TTStubRef
int TrackBuilderChannel::trackletLayerId(const TTStubRef& ttStubRef) const {
int ChannelAssignment::trackletLayerId(const TTStubRef& ttStubRef) const {
static constexpr int offsetBarrel = 1;
static constexpr int offsetDisks = 5;
return setup_->layerId(ttStubRef) - (setup_->barrel(ttStubRef) ? offsetBarrel : offsetDisks);
}

// checks is seedType is supported
void ChannelAssignment::checkSeedType(int seedType) const {
if (seedType >= 0 && seedType < numSeedTypes_)
return;
cms::Exception exception("logic_error");
exception << "TTTracks form seed type" << seedType << " not in supported list: (";
for (const auto& s : seedTypeNames_)
exception << s << " ";
exception << ").";
exception.addContext("ChannelAssignment:checkSeedType:channelId");
throw exception;
}

} // namespace trklet
8 changes: 4 additions & 4 deletions L1Trigger/TrackFindingTracklet/src/FitTrack.cc
Original file line number Diff line number Diff line change
Expand Up @@ -867,7 +867,7 @@ std::vector<Tracklet*> FitTrack::orderedMatches(vector<FullMatchMemory*>& fullma
return tmp;
}

void FitTrack::execute(TrackBuilderChannel* trackBuilderChannel,
void FitTrack::execute(ChannelAssignment* channelAssignment,
deque<tt::Frame>& streamTrack,
vector<deque<tt::FrameStub>>& streamsStub,
unsigned int iSector) {
Expand Down Expand Up @@ -1043,19 +1043,19 @@ void FitTrack::execute(TrackBuilderChannel* trackBuilderChannel,
const string t = bestTracklet->fpgat().str();
streamTrack.emplace_back(valid + seed + rinv + phi0 + z0 + t);
// hitMap used to remember whcih layer had no stub to fill them with gaps
TTBV hitMap(0, trackBuilderChannel->maxNumProjectionLayers());
TTBV hitMap(0, channelAssignment->maxNumProjectionLayers());
// convert and fill stubs on this track into streamsStub
for (const auto& stub : bestTracklet->getL1Stubs()) {
// get TTStubRef of this stub
const TTStubRef& ttStubRef = stub->ttStubRef();
// get layerId and skip over seeding layer
int layerId(-1);
if (!trackBuilderChannel->layerId(seedType, ttStubRef, layerId))
if (!channelAssignment->layerId(seedType, ttStubRef, layerId))
continue;
// mark layerId
hitMap.set(layerId);
// tracklet layerId
const int trackletLayerId = trackBuilderChannel->trackletLayerId(ttStubRef);
const int trackletLayerId = channelAssignment->trackletLayerId(ttStubRef);
// get stub Residual
const Residual& resid = bestTracklet->resid(trackletLayerId);
// create bit accurate 64 bit word
Expand Down
10 changes: 5 additions & 5 deletions L1Trigger/TrackFindingTracklet/src/Sector.cc
Original file line number Diff line number Diff line change
Expand Up @@ -412,16 +412,16 @@ void Sector::executeMP() {
}
}

void Sector::executeFT(TrackBuilderChannel* trackBuilderChannel, tt::Streams& streamsTrack, tt::StreamsStub& streamsStub) {
void Sector::executeFT(ChannelAssignment* channelAssignment, tt::Streams& streamsTrack, tt::StreamsStub& streamsStub) {
int channelTrack(0);
const int offsetTrack = isector_ * trackBuilderChannel->numChannels();
const int offsetTrack = isector_ * channelAssignment->numChannels();
for (auto& i : FT_) {
deque<tt::Frame> streamsTrackTmp;
vector<deque<tt::FrameStub>> streamsStubTmp(trackBuilderChannel->maxNumProjectionLayers());
i->execute(trackBuilderChannel, streamsTrackTmp, streamsStubTmp, isector_);
vector<deque<tt::FrameStub>> streamsStubTmp(channelAssignment->maxNumProjectionLayers());
i->execute(channelAssignment, streamsTrackTmp, streamsStubTmp, isector_);
if (!settings_.emulateTB())
continue;
const int offestStub = (offsetTrack + channelTrack) * trackBuilderChannel->maxNumProjectionLayers();
const int offestStub = (offsetTrack + channelTrack) * channelAssignment->maxNumProjectionLayers();
streamsTrack[offsetTrack + channelTrack++] = tt::Stream(streamsTrackTmp.begin(), streamsTrackTmp.end());
int channelStub(0);
for (deque<tt::FrameStub>& stream : streamsStubTmp)
Expand Down
10 changes: 5 additions & 5 deletions L1Trigger/TrackFindingTracklet/src/TrackletEventProcessor.cc
Original file line number Diff line number Diff line change
Expand Up @@ -24,13 +24,13 @@ TrackletEventProcessor::~TrackletEventProcessor() {
}
}

void TrackletEventProcessor::init(Settings const& theSettings, TrackBuilderChannel* trackBuilderChannel) {
void TrackletEventProcessor::init(Settings const& theSettings, ChannelAssignment* channelAssignment) {
settings_ = &theSettings;
trackBuilderChannel_ = trackBuilderChannel;
channelAssignment_ = channelAssignment;
// number of track channel
const int numStreamsTrack = N_SECTOR * trackBuilderChannel_->numChannels();
const int numStreamsTrack = N_SECTOR * channelAssignment_->numChannels();
// number of stub channel
const int numStreamsStub = numStreamsTrack * trackBuilderChannel_->maxNumProjectionLayers();
const int numStreamsStub = numStreamsTrack * channelAssignment_->maxNumProjectionLayers();
streamsTrack_ = tt::Streams(numStreamsTrack);
streamsStub_ = tt::StreamsStub(numStreamsStub);

Expand Down Expand Up @@ -371,7 +371,7 @@ void TrackletEventProcessor::event(SLHCEvent& ev) {

// fit track
FTTimer_.start();
sector_->executeFT(trackBuilderChannel_, streamsTrack_, streamsStub_);
sector_->executeFT(channelAssignment_, streamsTrack_, streamsStub_);
if ((settings_->writeMem() || settings_->writeMonitorData("IFit")) && k == settings_->writememsect()) {
sector_->writeTF(first);
}
Expand Down
Loading

0 comments on commit 1a9bceb

Please sign in to comment.