Skip to content

Commit

Permalink
Channel Assignment TrackBuilder output Tracks + Stubs and InputRouter…
Browse files Browse the repository at this point in the history
… input Stubs (cms-sw#110)

* track builder channel upgraded to assign stubs to channel.

* code format

* readded missing pieces.

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

* name change in L1Trigger/TrackFindingTracklet/python/ProducerKF_cff.py

* bug fix

* name change of config parameter

* code-format

* namespace change and consitency check added.

* addressing ians comments

* addressing ians comments
  • Loading branch information
tschuh authored and tomalin committed Jun 10, 2022
1 parent 37b59c8 commit 1418e19
Show file tree
Hide file tree
Showing 28 changed files with 416 additions and 226 deletions.
63 changes: 63 additions & 0 deletions L1Trigger/TrackFindingTracklet/interface/ChannelAssignment.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
#ifndef L1Trigger_TrackFindingTracklet_ChannelAssignment_h
#define L1Trigger_TrackFindingTracklet_ChannelAssignment_h

#include "FWCore/Framework/interface/data_default_record_trait.h"
#include "L1Trigger/TrackFindingTracklet/interface/ChannelAssignmentRcd.h"
#include "FWCore/ParameterSet/interface/ParameterSet.h"
#include "DataFormats/L1TrackTrigger/interface/TTTypes.h"
#include "L1Trigger/TrackTrigger/interface/Setup.h"

#include <vector>

namespace trklet {

/*! \class trklet::ChannelAssignment
* \brief Class to assign tracklet tracks and stubs to output channel
* based on their Pt or seed type as well as DTC stubs to input channel
* \author Thomas Schuh
* \date 2020, Nov; updated 2021 Oct
*/
class ChannelAssignment {
public:
ChannelAssignment() {}
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);
// number of used channels
int numChannels() const { return numChannels_; }
// sets layerId (0-7 in sequence the seed type projects to) 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_; }
// map of used DTC tfp channels in InputRouter
std::vector<int> channelEncoding() const { return channelEncoding_; }

private:
// helper class to store configurations
const tt::Setup* setup_;
// 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_;
// map of used DTC tfp channels in InputRouter
std::vector<int> channelEncoding_;
};

} // namespace trklet

EVENTSETUP_DATA_DEFAULT_RECORD(trklet::ChannelAssignment, trklet::ChannelAssignmentRcd);

#endif
17 changes: 17 additions & 0 deletions L1Trigger/TrackFindingTracklet/interface/ChannelAssignmentRcd.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
#ifndef L1Trigger_TrackFindingTracklet_ChannelAssignmentRcd_h
#define L1Trigger_TrackFindingTracklet_ChannelAssignmentRcd_h

#include "FWCore/Framework/interface/DependentRecordImplementation.h"
#include "FWCore/Utilities/interface/mplVector.h"
#include "L1Trigger/TrackTrigger/interface/SetupRcd.h"

namespace trklet {

typedef edm::mpl::Vector<tt::SetupRcd> RcdsChannelAssignment;

class ChannelAssignmentRcd
: public edm::eventsetup::DependentRecordImplementation<ChannelAssignmentRcd, RcdsChannelAssignment> {};

} // namespace trklet

#endif
9 changes: 9 additions & 0 deletions L1Trigger/TrackFindingTracklet/interface/Settings.h
Original file line number Diff line number Diff line change
Expand Up @@ -434,6 +434,15 @@ namespace trklet {
return fact * bendcut(ibend, layerdisk, isPSmodule);
}

//layers/disks used by each seed
std::array<std::array<int, 3>, N_SEED> seedlayers() const { return seedlayers_; }

//projection layers by seed index. For each seeding index (row) the list of layers that we consider projections to
std::array<std::array<unsigned int, N_LAYER - 2>, N_SEED> projlayers() const { return projlayers_; }

//projection disks by seed index. For each seeding index (row) the list of diks that we consider projections to
std::array<std::array<unsigned int, N_DISK>, N_SEED> projdisks() const { return projdisks_; }

private:
std::string fitPatternFile_;
std::string processingModulesFile_;
Expand Down
42 changes: 0 additions & 42 deletions L1Trigger/TrackFindingTracklet/interface/TrackBuilderChannel.h

This file was deleted.

17 changes: 0 additions & 17 deletions L1Trigger/TrackFindingTracklet/interface/TrackBuilderChannelRcd.h

This file was deleted.

8 changes: 4 additions & 4 deletions L1Trigger/TrackFindingTracklet/plugins/ProducerAS.cc
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,9 @@ using namespace std;
using namespace edm;
using namespace tt;

namespace trackFindingTracklet {
namespace trklet {

/*! \class trackFindingTracklet::ProducerAS
/*! \class trklet::ProducerAS
* \brief Associate the TTTracks output by KF fitter with the tracks input to KF fitter.
* \author Thomas Schuh
* \date 2020, Oct
Expand Down Expand Up @@ -94,6 +94,6 @@ namespace trackFindingTracklet {
iEvent.emplace(edPutToken_, move(ttTrackMap));
}

} // namespace trackFindingTracklet
} // namespace trklet

DEFINE_FWK_MODULE(trackFindingTracklet::ProducerAS);
DEFINE_FWK_MODULE(trklet::ProducerAS);
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
#include "FWCore/Framework/interface/ESProducer.h"
#include "FWCore/Framework/interface/ModuleFactory.h"
#include "FWCore/ParameterSet/interface/ParameterSet.h"
#include "FWCore/Utilities/interface/ESGetToken.h"
#include "L1Trigger/TrackFindingTracklet/interface/ChannelAssignment.h"
#include "L1Trigger/TrackTrigger/interface/Setup.h"

#include <memory>

using namespace std;
using namespace edm;
using namespace tt;

namespace trklet {

/*! \class trklet::ProducerChannelAssignment
* \brief Creates ChannelAssignment class that assigns tracklet tracks and stubs
* to output channel as well as DTC stubs to input channel
* \author Thomas Schuh
* \date 2020, Nov
*/
class ProducerChannelAssignment : public ESProducer {
public:
ProducerChannelAssignment(const ParameterSet& iConfig);
~ProducerChannelAssignment() override {}
unique_ptr<ChannelAssignment> produce(const ChannelAssignmentRcd& rcd);

private:
const ParameterSet* iConfig_;
ESGetToken<Setup, SetupRcd> esGetToken_;
};

ProducerChannelAssignment::ProducerChannelAssignment(const ParameterSet& iConfig) : iConfig_(&iConfig) {
auto cc = setWhatProduced(this);
esGetToken_ = cc.consumes();
}

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

} // namespace trklet

DEFINE_FWK_EVENTSETUP_MODULE(trklet::ProducerChannelAssignment);
41 changes: 22 additions & 19 deletions L1Trigger/TrackFindingTracklet/plugins/ProducerKFin.cc
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
#include "L1Trigger/TrackTrigger/interface/Setup.h"
#include "L1Trigger/TrackerTFP/interface/DataFormats.h"
#include "L1Trigger/TrackerTFP/interface/LayerEncoding.h"
#include "L1Trigger/TrackFindingTracklet/interface/TrackBuilderChannel.h"
#include "L1Trigger/TrackFindingTracklet/interface/ChannelAssignment.h"

#include <string>
#include <vector>
Expand All @@ -27,9 +27,9 @@ using namespace edm;
using namespace trackerTFP;
using namespace tt;

namespace trackFindingTracklet {
namespace trklet {

/*! \class trackFindingTracklet::ProducerKFin
/*! \class trklet::ProducerKFin
* \brief Transforms format of TTTracks from Tracklet pattern reco. to that expected by KF input.
* \author Thomas Schuh
* \date 2020, Oct
Expand Down Expand Up @@ -58,8 +58,8 @@ namespace trackFindingTracklet {
ESGetToken<DataFormats, DataFormatsRcd> esGetTokenDataFormats_;
// LayerEncoding token
ESGetToken<LayerEncoding, LayerEncodingRcd> esGetTokenLayerEncoding_;
// TrackBuilderChannel token
ESGetToken<TrackBuilderChannel, TrackBuilderChannelRcd> esGetTokenTrackBuilderChannel_;
// ChannelAssignment token
ESGetToken<ChannelAssignment, ChannelAssignmentRcd> esGetTokenChannelAssignment_;
// configuration
ParameterSet iConfig_;
// helper class to store configurations
Expand All @@ -69,7 +69,7 @@ namespace trackFindingTracklet {
// helper class to encode layer
const LayerEncoding* layerEncoding_;
// helper class to assign tracks to channel
TrackBuilderChannel* trackBuilderChannel_;
ChannelAssignment* channelAssignment_;
//
bool enableTruncation_;
};
Expand All @@ -90,12 +90,12 @@ namespace trackFindingTracklet {
esGetTokenSetup_ = esConsumes<Setup, SetupRcd, Transition::BeginRun>();
esGetTokenDataFormats_ = esConsumes<DataFormats, DataFormatsRcd, Transition::BeginRun>();
esGetTokenLayerEncoding_ = esConsumes<LayerEncoding, LayerEncodingRcd, Transition::BeginRun>();
esGetTokenTrackBuilderChannel_ = esConsumes<TrackBuilderChannel, TrackBuilderChannelRcd, Transition::BeginRun>();
esGetTokenChannelAssignment_ = esConsumes<ChannelAssignment, ChannelAssignmentRcd, Transition::BeginRun>();
// initial ES products
setup_ = nullptr;
dataFormats_ = nullptr;
layerEncoding_ = nullptr;
trackBuilderChannel_ = nullptr;
channelAssignment_ = nullptr;
//
enableTruncation_ = iConfig.getParameter<bool>("EnableTruncation");
}
Expand All @@ -113,7 +113,7 @@ namespace trackFindingTracklet {
// helper class to encode layer
layerEncoding_ = &iSetup.getData(esGetTokenLayerEncoding_);
// helper class to assign tracks to channel
trackBuilderChannel_ = const_cast<TrackBuilderChannel*>(&iSetup.getData(esGetTokenTrackBuilderChannel_));
channelAssignment_ = const_cast<ChannelAssignment*>(&iSetup.getData(esGetTokenChannelAssignment_));
}

void ProducerKFin::produce(Event& iEvent, const EventSetup& iSetup) {
Expand All @@ -125,7 +125,7 @@ namespace trackFindingTracklet {
const DataFormat& dfinv2R = dataFormats_->format(Variable::inv2R, Process::kfin);
// dataformat used for track phi at radius schoenRofPhi wrt phi sector centre
const DataFormat& dfphiT = dataFormats_->format(Variable::phiT, Process::kfin);
const int numStreamsTracks = setup_->numRegions() * trackBuilderChannel_->numChannels();
const int numStreamsTracks = setup_->numRegions() * channelAssignment_->numChannels();
const int numStreamsStubs = numStreamsTracks * setup_->numLayers();
// empty KFin products
StreamsStub streamAcceptedStubs(numStreamsStubs);
Expand All @@ -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 (channelAssignment_->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 (channelAssignment_->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 Expand Up @@ -279,6 +282,6 @@ namespace trackFindingTracklet {
iEvent.emplace(edPutTokenLostTracks_, move(streamLostTracks));
}

} // namespace trackFindingTracklet
} // namespace trklet

DEFINE_FWK_MODULE(trackFindingTracklet::ProducerKFin);
DEFINE_FWK_MODULE(trklet::ProducerKFin);
8 changes: 4 additions & 4 deletions L1Trigger/TrackFindingTracklet/plugins/ProducerKFout.cc
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,9 @@ using namespace edm;
using namespace trackerTFP;
using namespace tt;

namespace trackFindingTracklet {
namespace trklet {

/*! \class trackFindingTracklet::ProducerKFout
/*! \class trklet::ProducerKFout
* \brief Converts KF output into TFP output
* \author Thomas Schuh
* \date 2021, Aug
Expand Down Expand Up @@ -329,6 +329,6 @@ namespace trackFindingTracklet {
iEvent.emplace(edPutTokenAccepted_, move(accepted));
iEvent.emplace(edPutTokenLost_, move(lost));
}
} // namespace trackFindingTracklet
} // namespace trklet

DEFINE_FWK_MODULE(trackFindingTracklet::ProducerKFout);
DEFINE_FWK_MODULE(trklet::ProducerKFout);
8 changes: 4 additions & 4 deletions L1Trigger/TrackFindingTracklet/plugins/ProducerTT.cc
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,9 @@ using namespace edm;
using namespace trackerTFP;
using namespace tt;

namespace trackFindingTracklet {
namespace trklet {

/*! \class trackFindingTracklet::ProducerTT
/*! \class trklet::ProducerTT
* \brief Converts KF output into TTTracks
* \author Thomas Schuh
* \date 2021, Aug
Expand Down Expand Up @@ -129,6 +129,6 @@ namespace trackFindingTracklet {
iEvent.emplace(edPutToken_, move(ttTracks));
}

} // namespace trackFindingTracklet
} // namespace trklet

DEFINE_FWK_MODULE(trackFindingTracklet::ProducerTT);
DEFINE_FWK_MODULE(trklet::ProducerTT);

0 comments on commit 1418e19

Please sign in to comment.