CMS 3D CMS Logo

List of all members | Public Member Functions | Static Public Member Functions | Private Types | Private Member Functions | Private Attributes
tmtt::TMTrackProducer Class Reference

#include <TMTrackProducer.h>

Inheritance diagram for tmtt::TMTrackProducer:
edm::stream::EDProducer< edm::GlobalCache< GlobalCacheTMTT > >

Public Member Functions

 TMTrackProducer (const edm::ParameterSet &, GlobalCacheTMTT const *globalCacheTMTT)
 
 ~TMTrackProducer () override
 
- Public Member Functions inherited from edm::stream::EDProducer< edm::GlobalCache< GlobalCacheTMTT > >
 EDProducer ()=default
 
bool hasAbilityToProduceInBeginLumis () const final
 
bool hasAbilityToProduceInBeginRuns () const final
 
bool hasAbilityToProduceInEndLumis () const final
 
bool hasAbilityToProduceInEndRuns () const final
 

Static Public Member Functions

static void globalEndJob (GlobalCacheTMTT *globalCacheTMTT)
 
static std::unique_ptr< GlobalCacheTMTTinitializeGlobalCache (edm::ParameterSet const &iConfig)
 

Private Types

typedef std::vector< TTTrack< Ref_Phase2TrackerDigi_ > > TTTrackCollection
 

Private Member Functions

void beginRun (const edm::Run &, const edm::EventSetup &) override
 
void produce (edm::Event &, const edm::EventSetup &) override
 

Private Attributes

edm::EDGetTokenT< TTClusterAssMapclusterTruthToken_
 
bool debug_
 
std::unique_ptr< DegradeBenddegradeBend_
 
std::map< std::string, std::unique_ptr< TrackFitGeneric > > fitterWorkerMap_
 
edm::EDGetTokenT< reco::GenJetCollectiongenJetToken_
 
Histoshists_
 
HTrphi::ErrorMonitorhtRphiErrMon_
 
std::list< TrackerModulelistTrackerModule_
 
edm::ESGetToken< MagneticField, IdealMagneticFieldRecordmagneticFieldToken_
 
bool runRZfilter_
 
Settings settings_
 
const StubAlgorithmOfficialstubAlgo_
 
std::unique_ptr< StubFEWindowsstubFEWindows_
 
edm::EDGetTokenT< TTStubDetSetVecstubToken_
 
edm::EDGetTokenT< TTStubAssMapstubTruthToken_
 
StubWindowSuggeststubWindowSuggest_
 
edm::EDGetTokenT< TrackingParticleCollectiontpToken_
 
const TrackerGeometrytrackerGeometry_
 
edm::ESGetToken< TrackerGeometry, TrackerDigiGeometryRecordtrackerGeometryToken_
 
const TrackerTopologytrackerTopology_
 
edm::ESGetToken< TrackerTopology, TrackerTopologyRcdtrackerTopologyToken_
 
std::vector< std::string > trackFitters_
 
edm::ESGetToken< StubAlgorithm, TTStubAlgorithmRecordttStubAlgoToken_
 
std::vector< std::string > useRZfilter_
 

Additional Inherited Members

- Public Types inherited from edm::stream::EDProducer< edm::GlobalCache< GlobalCacheTMTT > >
typedef CacheContexts< T... > CacheTypes
 
typedef CacheTypes::GlobalCache GlobalCache
 
typedef AbilityChecker< T... > HasAbility
 
typedef CacheTypes::LuminosityBlockCache LuminosityBlockCache
 
typedef LuminosityBlockContextT< LuminosityBlockCache, RunCache, GlobalCacheLuminosityBlockContext
 
typedef CacheTypes::LuminosityBlockSummaryCache LuminosityBlockSummaryCache
 
typedef CacheTypes::RunCache RunCache
 
typedef RunContextT< RunCache, GlobalCacheRunContext
 
typedef CacheTypes::RunSummaryCache RunSummaryCache
 

Detailed Description

Definition at line 42 of file TMTrackProducer.h.

Member Typedef Documentation

◆ TTTrackCollection

Definition at line 52 of file TMTrackProducer.h.

Constructor & Destructor Documentation

◆ TMTrackProducer()

tmtt::TMTrackProducer::TMTrackProducer ( const edm::ParameterSet iConfig,
GlobalCacheTMTT const *  globalCacheTMTT 
)
explicit

Definition at line 41 of file TMTrackProducer.cc.

42  : settings_(iConfig), // Set configuration parameters
43  stubWindowSuggest_(globalCacheTMTT->stubWindowSuggest()), // For tuning FE stub window sizes
44  hists_(globalCacheTMTT->hists()), // Initialize histograms
45  htRphiErrMon_(globalCacheTMTT->htRphiErrMon()), // rphi HT error monitoring
46  debug_(true) // Debug printout
47  {
48  using namespace edm;
49 
50  // Get tokens for ES data access.
52  esConsumes<MagneticField, IdealMagneticFieldRecord, Transition::BeginRun>(settings_.magneticFieldInputTag());
53  trackerGeometryToken_ = esConsumes<TrackerGeometry, TrackerDigiGeometryRecord, Transition::BeginRun>(
56  esConsumes<TrackerTopology, TrackerTopologyRcd, Transition::BeginRun>(settings_.trackerTopologyInputTag());
58  esConsumes<StubAlgorithm, TTStubAlgorithmRecord, Transition::BeginRun>(settings_.ttStubAlgoInputTag());
59 
60  // Get tokens for ED data access.
61  stubToken_ = consumes<TTStubDetSetVec>(settings_.stubInputTag());
62  if (settings_.enableMCtruth()) {
63  // These lines use lots of CPU, even if no use of truth info is made later.
64  tpToken_ = consumes<TrackingParticleCollection>(settings_.tpInputTag());
65  stubTruthToken_ = consumes<TTStubAssMap>(settings_.stubTruthInputTag());
66  clusterTruthToken_ = consumes<TTClusterAssMap>(settings_.clusterTruthInputTag());
67  genJetToken_ = consumes<reco::GenJetCollection>(settings_.genJetInputTag());
68  }
69 
72  runRZfilter_ = (not useRZfilter_.empty()); // Do any fitters require an r-z track filter to be run?
73 
74  // Book histograms.
75  //hists_.book();
76 
77  // Create track fitting algorithm
78  for (const string& fitterName : trackFitters_) {
79  fitterWorkerMap_[fitterName] = trackFitFactory::create(fitterName, &settings_);
80  }
81 
82  //--- Define EDM output to be written to file (if required)
83 
85  // L1 tracks found by Hough Transform
86  produces<TTTrackCollection>("TML1TracksHT").setBranchAlias("TML1TracksHT");
87  // L1 tracks found by r-z track filter.
88  if (runRZfilter_)
89  produces<TTTrackCollection>("TML1TracksRZ").setBranchAlias("TML1TracksRZ");
90  }
91  // L1 tracks after track fit by each of the fitting algorithms under study
92  for (const string& fitterName : trackFitters_) {
93  string edmName = string("TML1Tracks") + fitterName;
94  produces<TTTrackCollection>(edmName).setBranchAlias(edmName);
95  }
96  }

References tmtt::Settings::clusterTruthInputTag(), clusterTruthToken_, tmtt::trackFitFactory::create(), ZCounting_cff::edmName, tmtt::Settings::enableMCtruth(), tmtt::Settings::enableOutputIntermediateTTTracks(), fitterWorkerMap_, tmtt::Settings::genJetInputTag(), genJetToken_, tmtt::Settings::magneticFieldInputTag(), magneticFieldToken_, runRZfilter_, settings_, AlCaHLTBitMon_QueryRunRegistry::string, tmtt::Settings::stubInputTag(), stubToken_, tmtt::Settings::stubTruthInputTag(), stubTruthToken_, tmtt::Settings::tpInputTag(), tpToken_, tmtt::Settings::trackerGeometryInputTag(), trackerGeometryToken_, tmtt::Settings::trackerTopologyInputTag(), trackerTopologyToken_, tmtt::Settings::trackFitters(), trackFitters_, tmtt::Settings::ttStubAlgoInputTag(), ttStubAlgoToken_, tmtt::Settings::useRZfilter(), and useRZfilter_.

◆ ~TMTrackProducer()

tmtt::TMTrackProducer::~TMTrackProducer ( )
inlineoverride

Definition at line 45 of file TMTrackProducer.h.

45 {}

Member Function Documentation

◆ beginRun()

void tmtt::TMTrackProducer::beginRun ( const edm::Run iRun,
const edm::EventSetup iSetup 
)
overrideprivate

Definition at line 100 of file TMTrackProducer.cc.

100  {
101  // Get the B-field and store its value in the Settings class.
102  const MagneticField* theMagneticField = &(iSetup.getData(magneticFieldToken_));
103  float bField = theMagneticField->inTesla(GlobalPoint(0, 0, 0)).z(); // B field in Tesla.
105 
106  // Set also B field in GlobalCacheTMTT (used only for Histogramming)
107  globalCache()->settings().setMagneticField(bField);
108 
109  std::stringstream text;
110  text << "\n--- B field = " << bField << " Tesla ---\n";
111  std::call_once(
112  printOnce, [](string t) { PrintL1trk() << t; }, text.str());
113 
114  // Get tracker geometry
117 
118  // Loop over tracker modules to get module info.
119 
120  // Identifies tracker module type for firmware.
121  TrackerModule::ModuleTypeCfg moduleTypeCfg;
122  moduleTypeCfg.pitchVsType = settings_.pitchVsType();
123  moduleTypeCfg.spaceVsType = settings_.spaceVsType();
124  moduleTypeCfg.barrelVsType = settings_.barrelVsType();
125  moduleTypeCfg.psVsType = settings_.psVsType();
126  moduleTypeCfg.tiltedVsType = settings_.tiltedVsType();
127 
128  listTrackerModule_.clear();
129  for (const GeomDet* gd : trackerGeometry_->dets()) {
130  DetId detId = gd->geographicalId();
131  // Phase 2 Outer Tracker uses TOB for entire barrel & TID for entire endcap.
132  if (detId.subdetId() != StripSubdetector::TOB && detId.subdetId() != StripSubdetector::TID)
133  continue;
134  if (trackerTopology_->isLower(detId)) { // Select only lower of the two sensors in a module.
135  // Store info about this tracker module.
136  listTrackerModule_.emplace_back(trackerGeometry_, trackerTopology_, moduleTypeCfg, detId);
137  }
138  }
139 
140  // Takes one copy of this to GlobalCacheTMTT for later histogramming.
141  globalCache()->setListTrackerModule(listTrackerModule_);
142 
143  // Get TTStubProducerAlgorithm algorithm, to adjust stub bend FE encoding.
144  stubAlgo_ = dynamic_cast<const StubAlgorithmOfficial*>(&iSetup.getData(ttStubAlgoToken_));
145  // Get FE stub window size from TTStub producer configuration
146  const edm::ESHandle<StubAlgorithm> stubAlgoHandle = iSetup.getHandle(ttStubAlgoToken_);
147  const edm::ParameterSet& pSetStubAlgo = getParameterSet(stubAlgoHandle.description()->pid_);
148  stubFEWindows_ = std::make_unique<StubFEWindows>(pSetStubAlgo);
149  // Initialize utilities needing FE window size.
151  degradeBend_ = std::make_unique<DegradeBend>(trackerTopology_, stubFEWindows_.get(), stubAlgo_);
152  }

References tmtt::TrackerModule::ModuleTypeCfg::barrelVsType, tmtt::Settings::barrelVsType(), Calorimetry_cff::bField, degradeBend_, TrackerGeometry::dets(), edm::EventSetup::getData(), edm::EventSetup::getHandle(), edm::getParameterSet(), MagneticField::inTesla(), TrackerTopology::isLower(), listTrackerModule_, magneticFieldToken_, tmtt::TrackerModule::ModuleTypeCfg::pitchVsType, tmtt::Settings::pitchVsType(), tmtt::TrackerModule::ModuleTypeCfg::psVsType, tmtt::Settings::psVsType(), tmtt::StubWindowSuggest::setFEWindows(), tmtt::Settings::setMagneticField(), settings_, tmtt::TrackerModule::ModuleTypeCfg::spaceVsType, tmtt::Settings::spaceVsType(), stubAlgo_, stubFEWindows_, stubWindowSuggest_, DetId::subdetId(), OrderedSet::t, runonSM::text, StripSubdetector::TID, tmtt::TrackerModule::ModuleTypeCfg::tiltedVsType, tmtt::Settings::tiltedVsType(), StripSubdetector::TOB, trackerGeometry_, trackerGeometryToken_, trackerTopology_, trackerTopologyToken_, ttStubAlgoToken_, and PV3DBase< T, PVType, FrameType >::z().

◆ globalEndJob()

void tmtt::TMTrackProducer::globalEndJob ( GlobalCacheTMTT globalCacheTMTT)
static

Definition at line 405 of file TMTrackProducer.cc.

405  {
406  const Settings& settings = globalCacheTMTT->settings();
407 
408  // Print stub window sizes that TMTT recommends CMS uses in FE chips.
409  if (settings.printStubWindows())
410  globalCacheTMTT->stubWindowSuggest().printResults();
411 
412  // Print (once) info about tracker geometry.
413  globalCacheTMTT->hists().trackerGeometryAnalysis(globalCacheTMTT->listTrackerModule());
414 
415  PrintL1trk() << "\n Number of (eta,phi) sectors used = (" << settings.numEtaRegions() << ","
416  << settings.numPhiSectors() << ")";
417 
418  // Print job summary
419  globalCacheTMTT->hists().endJobAnalysis(&(globalCacheTMTT->htRphiErrMon()));
420  }

References tmtt::Histos::endJobAnalysis(), tmtt::GlobalCacheTMTT::hists(), tmtt::GlobalCacheTMTT::htRphiErrMon(), tmtt::GlobalCacheTMTT::listTrackerModule(), tmtt::Settings::numEtaRegions(), tmtt::Settings::numPhiSectors(), tmtt::StubWindowSuggest::printResults(), tmtt::Settings::printStubWindows(), tmtt::GlobalCacheTMTT::settings(), tmtt::GlobalCacheTMTT::stubWindowSuggest(), and tmtt::Histos::trackerGeometryAnalysis().

◆ initializeGlobalCache()

std::unique_ptr< GlobalCacheTMTT > tmtt::TMTrackProducer::initializeGlobalCache ( edm::ParameterSet const &  iConfig)
static

Definition at line 37 of file TMTrackProducer.cc.

37  {
38  return std::make_unique<GlobalCacheTMTT>(iConfig);
39  }

◆ produce()

void tmtt::TMTrackProducer::produce ( edm::Event iEvent,
const edm::EventSetup iSetup 
)
overrideprivate

Definition at line 156 of file TMTrackProducer.cc.

156  {
157  // Note useful info about MC truth particles and about reconstructed stubs .
158  InputData inputData(iEvent,
159  iSetup,
160  &settings_,
162  degradeBend_.get(),
166  tpToken_,
167  stubToken_,
170  genJetToken_);
171 
172  const list<TP>& vTPs = inputData.getTPs();
173  const list<Stub*>& vStubs = inputData.stubs();
174 
175  // Creates matrix of Sector objects, which decide which stubs are in which (eta,phi) sector
176  matrix<unique_ptr<Sector>> mSectors(settings_.numPhiSectors(), settings_.numEtaRegions());
177  // Create matrix of r-phi Hough-Transform arrays, with one-to-one correspondence to sectors.
178  matrix<unique_ptr<HTrphi>> mHtRphis(settings_.numPhiSectors(), settings_.numEtaRegions());
179  // Create matrix of Make3Dtracks objects, to run optional r-z track filter, with one-to-one correspondence to sectors.
180  matrix<unique_ptr<Make3Dtracks>> mMake3Dtrks(settings_.numPhiSectors(), settings_.numEtaRegions());
181  // Create matrix of tracks from each fitter in each sector
182  matrix<map<string, std::list<L1fittedTrack>>> mapmFitTrks(settings_.numPhiSectors(), settings_.numEtaRegions());
183  // Final tracks after duplicate removal from each track fitter in entire tracker.
184  map<string, list<const L1fittedTrack*>> mapFinalTracks;
185 
186  //=== Initialization
187  // Create utility for converting L1 tracks from our private format to official CMSSW EDM format.
188  const ConverterToTTTrack converter(&settings_);
189 
190  // Pointers to TTTrack collections for ED output.
191  auto htTTTracksForOutput = std::make_unique<TTTrackCollection>();
192  auto rzTTTracksForOutput = std::make_unique<TTTrackCollection>();
193  map<string, unique_ptr<TTTrackCollection>> allFitTTTracksForOutput;
194  for (const string& fitterName : trackFitters_) {
195  auto fitTTTracksForOutput = std::make_unique<TTTrackCollection>();
196  allFitTTTracksForOutput[fitterName] = std::move(fitTTTracksForOutput);
197  }
198 
199  //=== Do tracking in the r-phi Hough transform within each sector.
200 
201  // Fill Hough-Transform arrays with stubs.
202  for (unsigned int iPhiSec = 0; iPhiSec < settings_.numPhiSectors(); iPhiSec++) {
203  for (unsigned int iEtaReg = 0; iEtaReg < settings_.numEtaRegions(); iEtaReg++) {
204  // Initialize constants for this sector.
205  mSectors(iPhiSec, iEtaReg) = std::make_unique<Sector>(&settings_, iPhiSec, iEtaReg);
206  Sector* sector = mSectors(iPhiSec, iEtaReg).get();
207 
208  mHtRphis(iPhiSec, iEtaReg) = std::make_unique<HTrphi>(
209  &settings_, iPhiSec, iEtaReg, sector->etaMin(), sector->etaMax(), sector->phiCentre(), &htRphiErrMon_);
210  HTrphi* htRphi = mHtRphis(iPhiSec, iEtaReg).get();
211 
212  // Check sector is enabled (always true, except if user disabled some for special studies).
213  if (settings_.isHTRPhiEtaRegWhitelisted(iEtaReg)) {
214  for (Stub* stub : vStubs) {
215  // Digitize stub as would be at input to GP. This doesn't need the nonant number, since we assumed an integer number of
216  // phi digitisation bins inside an nonant. N.B. This changes the coordinates & bend stored in the stub.
217 
219  stub->digitize(iPhiSec, Stub::DigiStage::GP);
220 
221  // Check if stub is inside this sector
222  bool inside = sector->inside(stub);
223 
224  if (inside) {
225  // Check which eta subsectors within the sector the stub is compatible with (if subsectors being used).
226  const vector<bool> inEtaSubSecs = sector->insideEtaSubSecs(stub);
227 
228  // Digitize stub if as would be at input to HT, which slightly degrades its coord. & bend resolution, affecting the HT performance.
230  stub->digitize(iPhiSec, Stub::DigiStage::HT);
231 
232  // Store stub in Hough transform array for this sector, indicating its compatibility with eta subsectors with sector.
233  htRphi->store(stub, inEtaSubSecs);
234  }
235  }
236  }
237 
238  // Find tracks in r-phi HT array.
239  htRphi->end(); // Calls htArrayRphi_.end() -> HTBase::end()
240  }
241  }
242 
243  if (settings_.muxOutputsHT() > 0) {
244  // Multiplex outputs of several HT onto one pair of output opto-links.
245  // This only affects tracking performance if option busySectorKill is enabled, so that tracks that
246  // can't be sent down the link within the time-multiplexed period are killed.
247  MuxHToutputs muxHT(&settings_);
248  muxHT.exec(mHtRphis);
249  }
250 
251  // Optionally, run 2nd stage mini HT -- WITHOUT TRUNCATION ???
252  if (settings_.miniHTstage()) {
253  MiniHTstage miniHTstage(&settings_);
254  miniHTstage.exec(mHtRphis);
255  }
256 
257  //=== Make 3D tracks, optionally running r-z track filters (such as Seed Filter) & duplicate track removal.
258 
259  for (unsigned int iPhiSec = 0; iPhiSec < settings_.numPhiSectors(); iPhiSec++) {
260  for (unsigned int iEtaReg = 0; iEtaReg < settings_.numEtaRegions(); iEtaReg++) {
261  const Sector* sector = mSectors(iPhiSec, iEtaReg).get();
262 
263  // Get tracks found by r-phi HT.
264  const HTrphi* htRphi = mHtRphis(iPhiSec, iEtaReg).get();
265  const list<L1track2D>& vecTracksRphi = htRphi->trackCands2D();
266 
267  // Initialize utility for making 3D tracks from 2D ones.
268  mMake3Dtrks(iPhiSec, iEtaReg) = std::make_unique<Make3Dtracks>(
269  &settings_, iPhiSec, iEtaReg, sector->etaMin(), sector->etaMax(), sector->phiCentre());
270  Make3Dtracks* make3Dtrk = mMake3Dtrks(iPhiSec, iEtaReg).get();
271 
272  // Convert 2D tracks found by HT to 3D tracks (optionally by running r-z filters & duplicate track removal)
273  make3Dtrk->run(vecTracksRphi);
274 
276  // Convert these tracks to EDM format for output (used for collaborative work outside TMTT group).
277  // Do this for tracks output by HT & optionally also for those output by r-z track filter.
278  const list<L1track3D>& vecTrk3D_ht = make3Dtrk->trackCands3D(false);
279  for (const L1track3D& trk : vecTrk3D_ht) {
280  TTTrack<Ref_Phase2TrackerDigi_> htTTTrack = converter.makeTTTrack(&trk, iPhiSec, iEtaReg);
281  htTTTracksForOutput->push_back(htTTTrack);
282  }
283 
284  if (runRZfilter_) {
285  const list<L1track3D>& vecTrk3D_rz = make3Dtrk->trackCands3D(true);
286  for (const L1track3D& trk : vecTrk3D_rz) {
287  TTTrack<Ref_Phase2TrackerDigi_> rzTTTrack = converter.makeTTTrack(&trk, iPhiSec, iEtaReg);
288  rzTTTracksForOutput->push_back(rzTTTrack);
289  }
290  }
291  }
292  }
293  }
294 
295  //=== Do a helix fit to all the track candidates.
296 
297  // Loop over all the fitting algorithms we are trying.
298  for (const string& fitterName : trackFitters_) {
299  for (unsigned int iPhiSec = 0; iPhiSec < settings_.numPhiSectors(); iPhiSec++) {
300  for (unsigned int iEtaReg = 0; iEtaReg < settings_.numEtaRegions(); iEtaReg++) {
301  const Make3Dtracks* make3Dtrk = mMake3Dtrks(iPhiSec, iEtaReg).get();
302 
303  // Does this fitter require r-z track filter to be run before it?
304  bool useRZfilt = (std::count(useRZfilter_.begin(), useRZfilter_.end(), fitterName) > 0);
305 
306  // Get 3D track candidates found by Hough transform (plus optional r-z filters/duplicate removal) in this sector.
307  const list<L1track3D>& vecTrk3D = make3Dtrk->trackCands3D(useRZfilt);
308 
309  // Find list where fitted tracks will be stored.
310  list<L1fittedTrack>& fitTrksInSec = mapmFitTrks(iPhiSec, iEtaReg)[fitterName];
311 
312  // Fit all tracks in this sector
313  for (const L1track3D& trk : vecTrk3D) {
314  // Ensure stubs assigned to this track is digitized with respect to the phi sector the track is in.
315  if (settings_.enableDigitize()) {
316  const vector<Stub*>& stubsOnTrk = trk.stubs();
317  for (Stub* s : stubsOnTrk) {
318  // Also digitize stub in way this specific track fitter uses it.
319  s->digitize(iPhiSec, Stub::DigiStage::TF);
320  }
321  }
322 
323  L1fittedTrack fitTrk = fitterWorkerMap_[fitterName]->fit(trk);
324 
325  if (fitTrk.accepted()) { // If fitter accepted track, then store it.
326  // Optionally digitize fitted track, degrading slightly resolution.
328  fitTrk.digitizeTrack(fitterName);
329  // Store fitted tracks, such that there is one fittedTracks corresponding to each HT tracks.
330  fitTrksInSec.push_back(fitTrk);
331  }
332  }
333  }
334  }
335  }
336 
337  // Run duplicate track removal on the fitted tracks if requested.
338 
339  // Initialize the duplicate track removal algorithm that can optionally be run after the track fit.
340  DupFitTrkKiller killDupFitTrks(&settings_);
341 
342  // Loop over all the fitting algorithms we used.
343  for (const string& fitterName : trackFitters_) {
344  for (unsigned int iPhiSec = 0; iPhiSec < settings_.numPhiSectors(); iPhiSec++) {
345  for (unsigned int iEtaReg = 0; iEtaReg < settings_.numEtaRegions(); iEtaReg++) {
346  // Get fitted tracks in sector
347  const list<L1fittedTrack>& fitTrksInSec = mapmFitTrks(iPhiSec, iEtaReg)[fitterName];
348 
349  // Run duplicate removal
350  list<const L1fittedTrack*> filteredFitTrksInSec = killDupFitTrks.filter(fitTrksInSec);
351 
352  // Prepare TTTrack collection.
353  for (const L1fittedTrack* fitTrk : filteredFitTrksInSec) {
354  // Convert these fitted tracks to EDM format for output (used for collaborative work outside TMTT group).
355  TTTrack<Ref_Phase2TrackerDigi_> fitTTTrack = converter.makeTTTrack(fitTrk, iPhiSec, iEtaReg);
356  allFitTTTracksForOutput[fitterName]->push_back(fitTTTrack);
357  }
358 
359  // Store fitted tracks from entire tracker.
360  mapFinalTracks[fitterName].insert(
361  mapFinalTracks[fitterName].end(), filteredFitTrksInSec.begin(), filteredFitTrksInSec.end());
362  }
363  }
364  }
365 
366  // Debug printout
367  if (debug_) {
368  PrintL1trk() << "INPUT #TPs = " << vTPs.size() << " #STUBs = " << vStubs.size();
369  unsigned int numHTtracks = 0;
370  for (unsigned int iPhiSec = 0; iPhiSec < settings_.numPhiSectors(); iPhiSec++) {
371  for (unsigned int iEtaReg = 0; iEtaReg < settings_.numEtaRegions(); iEtaReg++) {
372  const Make3Dtracks* make3Dtrk = mMake3Dtrks(iPhiSec, iEtaReg).get();
373  numHTtracks += make3Dtrk->trackCands3D(false).size();
374  }
375  }
376  PrintL1trk() << "Number of tracks after HT = " << numHTtracks;
377  for (const auto& p : mapFinalTracks) {
378  const string& fitName = p.first;
379  const list<const L1fittedTrack*> fittedTracks = p.second;
380  PrintL1trk() << "Number of tracks after " << fitName << " track helix fit = " << fittedTracks.size();
381  }
382  }
383 
384  // Allow histogramming to plot undigitized variables.
385  for (Stub* stub : vStubs) {
387  stub->setDigitizeWarningsOn(false);
388  }
389 
390  // Fill histograms to monitor input data & tracking performance.
391  hists_.fill(inputData, mSectors, mHtRphis, mMake3Dtrks, mapFinalTracks);
392 
393  //=== Store output EDM track and hardware stub collections.
395  iEvent.put(std::move(htTTTracksForOutput), "TML1TracksHT");
396  if (runRZfilter_)
397  iEvent.put(std::move(rzTTTracksForOutput), "TML1TracksRZ");
398  }
399  for (const string& fitterName : trackFitters_) {
400  string edmName = string("TML1Tracks") + fitterName;
401  iEvent.put(std::move(allFitTTTracksForOutput[fitterName]), edmName);
402  }
403  }

References tmtt::L1fittedTrack::accepted(), clusterTruthToken_, KineDebug3::count(), debug_, degradeBend_, tmtt::L1fittedTrack::digitizeTrack(), ZCounting_cff::edmName, tmtt::Settings::enableDigitize(), tmtt::Settings::enableOutputIntermediateTTTracks(), end, tmtt::Sector::etaMax(), tmtt::Sector::etaMin(), tmtt::MiniHTstage::exec(), tmtt::MuxHToutputs::exec(), tmtt::Histos::fill(), tmtt::DupFitTrkKiller::filter(), fitterWorkerMap_, genJetToken_, tmtt::InputData::getTPs(), tmtt::Stub::GP, hists_, tmtt::Stub::HT, htRphiErrMon_, iEvent, tmtt::Sector::inside(), tmtt::Sector::insideEtaSubSecs(), tmtt::Settings::isHTRPhiEtaRegWhitelisted(), listTrackerModule_, tmtt::Settings::miniHTstage(), eostools::move(), tmtt::Settings::muxOutputsHT(), tmtt::Settings::numEtaRegions(), tmtt::Settings::numPhiSectors(), AlCaHLTBitMon_ParallelJobs::p, tmtt::Sector::phiCentre(), tmtt::Make3Dtracks::run(), runRZfilter_, alignCSCRings::s, settings_, AlCaHLTBitMon_QueryRunRegistry::string, stubToken_, stubTruthToken_, stubWindowSuggest_, tmtt::Stub::TF, tpToken_, tmtt::HTbase::trackCands2D(), tmtt::Make3Dtracks::trackCands3D(), trackerGeometry_, trackerTopology_, trackFitters_, and useRZfilter_.

Member Data Documentation

◆ clusterTruthToken_

edm::EDGetTokenT<TTClusterAssMap> tmtt::TMTrackProducer::clusterTruthToken_
private

Definition at line 68 of file TMTrackProducer.h.

Referenced by produce(), and TMTrackProducer().

◆ debug_

bool tmtt::TMTrackProducer::debug_
private

Definition at line 93 of file TMTrackProducer.h.

Referenced by produce().

◆ degradeBend_

std::unique_ptr<DegradeBend> tmtt::TMTrackProducer::degradeBend_
private

Definition at line 86 of file TMTrackProducer.h.

Referenced by beginRun(), and produce().

◆ fitterWorkerMap_

std::map<std::string, std::unique_ptr<TrackFitGeneric> > tmtt::TMTrackProducer::fitterWorkerMap_
private

Definition at line 91 of file TMTrackProducer.h.

Referenced by produce(), and TMTrackProducer().

◆ genJetToken_

edm::EDGetTokenT<reco::GenJetCollection> tmtt::TMTrackProducer::genJetToken_
private

Definition at line 69 of file TMTrackProducer.h.

Referenced by produce(), and TMTrackProducer().

◆ hists_

Histos& tmtt::TMTrackProducer::hists_
private

Definition at line 88 of file TMTrackProducer.h.

Referenced by produce().

◆ htRphiErrMon_

HTrphi::ErrorMonitor& tmtt::TMTrackProducer::htRphiErrMon_
private

Definition at line 89 of file TMTrackProducer.h.

Referenced by produce().

◆ listTrackerModule_

std::list<TrackerModule> tmtt::TMTrackProducer::listTrackerModule_
private

Definition at line 74 of file TMTrackProducer.h.

Referenced by beginRun(), and produce().

◆ magneticFieldToken_

edm::ESGetToken<MagneticField, IdealMagneticFieldRecord> tmtt::TMTrackProducer::magneticFieldToken_
private

Definition at line 60 of file TMTrackProducer.h.

Referenced by beginRun(), and TMTrackProducer().

◆ runRZfilter_

bool tmtt::TMTrackProducer::runRZfilter_
private

Definition at line 80 of file TMTrackProducer.h.

Referenced by produce(), and TMTrackProducer().

◆ settings_

Settings tmtt::TMTrackProducer::settings_
private

Definition at line 77 of file TMTrackProducer.h.

Referenced by beginRun(), produce(), and TMTrackProducer().

◆ stubAlgo_

const StubAlgorithmOfficial* tmtt::TMTrackProducer::stubAlgo_
private

Definition at line 83 of file TMTrackProducer.h.

Referenced by beginRun().

◆ stubFEWindows_

std::unique_ptr<StubFEWindows> tmtt::TMTrackProducer::stubFEWindows_
private

Definition at line 84 of file TMTrackProducer.h.

Referenced by beginRun().

◆ stubToken_

edm::EDGetTokenT<TTStubDetSetVec> tmtt::TMTrackProducer::stubToken_
private

Definition at line 65 of file TMTrackProducer.h.

Referenced by produce(), and TMTrackProducer().

◆ stubTruthToken_

edm::EDGetTokenT<TTStubAssMap> tmtt::TMTrackProducer::stubTruthToken_
private

Definition at line 67 of file TMTrackProducer.h.

Referenced by produce(), and TMTrackProducer().

◆ stubWindowSuggest_

StubWindowSuggest& tmtt::TMTrackProducer::stubWindowSuggest_
private

Definition at line 85 of file TMTrackProducer.h.

Referenced by beginRun(), and produce().

◆ tpToken_

edm::EDGetTokenT<TrackingParticleCollection> tmtt::TMTrackProducer::tpToken_
private

Definition at line 66 of file TMTrackProducer.h.

Referenced by produce(), and TMTrackProducer().

◆ trackerGeometry_

const TrackerGeometry* tmtt::TMTrackProducer::trackerGeometry_
private

Definition at line 72 of file TMTrackProducer.h.

Referenced by beginRun(), and produce().

◆ trackerGeometryToken_

edm::ESGetToken<TrackerGeometry, TrackerDigiGeometryRecord> tmtt::TMTrackProducer::trackerGeometryToken_
private

Definition at line 61 of file TMTrackProducer.h.

Referenced by beginRun(), and TMTrackProducer().

◆ trackerTopology_

const TrackerTopology* tmtt::TMTrackProducer::trackerTopology_
private

Definition at line 73 of file TMTrackProducer.h.

Referenced by beginRun(), and produce().

◆ trackerTopologyToken_

edm::ESGetToken<TrackerTopology, TrackerTopologyRcd> tmtt::TMTrackProducer::trackerTopologyToken_
private

Definition at line 62 of file TMTrackProducer.h.

Referenced by beginRun(), and TMTrackProducer().

◆ trackFitters_

std::vector<std::string> tmtt::TMTrackProducer::trackFitters_
private

Definition at line 78 of file TMTrackProducer.h.

Referenced by produce(), and TMTrackProducer().

◆ ttStubAlgoToken_

edm::ESGetToken<StubAlgorithm, TTStubAlgorithmRecord> tmtt::TMTrackProducer::ttStubAlgoToken_
private

Definition at line 63 of file TMTrackProducer.h.

Referenced by beginRun(), and TMTrackProducer().

◆ useRZfilter_

std::vector<std::string> tmtt::TMTrackProducer::useRZfilter_
private

Definition at line 79 of file TMTrackProducer.h.

Referenced by produce(), and TMTrackProducer().

tmtt::Histos::fill
virtual void fill(const InputData &inputData, const matrix< std::unique_ptr< Sector >> &mSectors, const matrix< std::unique_ptr< HTrphi >> &mHtPhis, const matrix< std::unique_ptr< Make3Dtracks >> &mGet3Dtrks, const std::map< std::string, std::list< const L1fittedTrack * >> &mapFinalTracks)
Definition: Histos.cc:83
tmtt::TMTrackProducer::stubWindowSuggest_
StubWindowSuggest & stubWindowSuggest_
Definition: TMTrackProducer.h:85
tmtt::Settings::numEtaRegions
unsigned int numEtaRegions() const
Definition: Settings.h:125
MagneticField::inTesla
virtual GlobalVector inTesla(const GlobalPoint &gp) const =0
Field value ad specified global point, in Tesla.
tmtt::TMTrackProducer::degradeBend_
std::unique_ptr< DegradeBend > degradeBend_
Definition: TMTrackProducer.h:86
GeomDet
Definition: GeomDet.h:27
tmtt::TMTrackProducer::genJetToken_
edm::EDGetTokenT< reco::GenJetCollection > genJetToken_
Definition: TMTrackProducer.h:69
tmtt::TMTrackProducer::stubFEWindows_
std::unique_ptr< StubFEWindows > stubFEWindows_
Definition: TMTrackProducer.h:84
TrackerTopology::isLower
bool isLower(const DetId &id) const
Definition: TrackerTopology.cc:195
converter
Definition: CandidateProducer.h:25
tmtt::Settings::trackFitters
const std::vector< std::string > & trackFitters() const
Definition: Settings.h:248
tmtt::TMTrackProducer::useRZfilter_
std::vector< std::string > useRZfilter_
Definition: TMTrackProducer.h:79
edm
HLT enums.
Definition: AlignableModifier.h:19
tmtt::trackFitFactory::create
std::unique_ptr< TrackFitGeneric > create(const std::string &fitterName, const Settings *settings)
Definition: TrackFitFactory.cc:19
AlCaHLTBitMon_ParallelJobs.p
p
Definition: AlCaHLTBitMon_ParallelJobs.py:153
tmtt::TMTrackProducer::htRphiErrMon_
HTrphi::ErrorMonitor & htRphiErrMon_
Definition: TMTrackProducer.h:89
tmtt::TMTrackProducer::fitterWorkerMap_
std::map< std::string, std::unique_ptr< TrackFitGeneric > > fitterWorkerMap_
Definition: TMTrackProducer.h:91
tmtt::TMTrackProducer::tpToken_
edm::EDGetTokenT< TrackingParticleCollection > tpToken_
Definition: TMTrackProducer.h:66
tmtt::Settings::enableDigitize
bool enableDigitize() const
Definition: Settings.h:80
TTTrack
Class to store the L1 Track Trigger tracks.
Definition: TTTrack.h:26
tmtt::Settings::trackerTopologyInputTag
edm::ESInputTag trackerTopologyInputTag() const
Definition: Settings.h:28
tmtt::TMTrackProducer::trackerGeometryToken_
edm::ESGetToken< TrackerGeometry, TrackerDigiGeometryRecord > trackerGeometryToken_
Definition: TMTrackProducer.h:61
TMTrackProducer_Defaults_cfi.MiniHTstage
MiniHTstage
Definition: TMTrackProducer_Defaults_cfi.py:152
tmtt::Settings::miniHTstage
bool miniHTstage() const
Definition: Settings.h:149
end
#define end
Definition: vmac.h:39
tmtt::Settings::trackerGeometryInputTag
edm::ESInputTag trackerGeometryInputTag() const
Definition: Settings.h:27
PV3DBase::z
T z() const
Definition: PV3DBase.h:61
tmtt::TMTrackProducer::trackerTopology_
const TrackerTopology * trackerTopology_
Definition: TMTrackProducer.h:73
tmtt::Settings::genJetInputTag
edm::InputTag genJetInputTag() const
Definition: Settings.h:35
DetId
Definition: DetId.h:17
alignCSCRings.s
s
Definition: alignCSCRings.py:92
tmtt::TMTrackProducer::runRZfilter_
bool runRZfilter_
Definition: TMTrackProducer.h:80
tmtt::TMTrackProducer::trackFitters_
std::vector< std::string > trackFitters_
Definition: TMTrackProducer.h:78
tmtt::Settings::useRZfilter
const std::vector< std::string > & useRZfilter() const
Definition: Settings.h:251
tmtt::TMTrackProducer::settings_
Settings settings_
Definition: TMTrackProducer.h:77
tmtt::TMTrackProducer::trackerGeometry_
const TrackerGeometry * trackerGeometry_
Definition: TMTrackProducer.h:72
edm::ESHandle
Definition: DTSurvey.h:22
tmtt::Stub::DigiStage::TF
tmtt::TMTrackProducer::clusterTruthToken_
edm::EDGetTokenT< TTClusterAssMap > clusterTruthToken_
Definition: TMTrackProducer.h:68
tmtt::TMTrackProducer::stubTruthToken_
edm::EDGetTokenT< TTStubAssMap > stubTruthToken_
Definition: TMTrackProducer.h:67
tmtt::Settings::psVsType
const std::vector< bool > & psVsType() const
Definition: Settings.h:98
GlobalPoint
Global3DPoint GlobalPoint
Definition: GlobalPoint.h:10
OrderedSet.t
t
Definition: OrderedSet.py:90
DetId::subdetId
constexpr int subdetId() const
get the contents of the subdetector field (not cast into any detector's numbering enum)
Definition: DetId.h:48
AlCaHLTBitMon_QueryRunRegistry.string
string
Definition: AlCaHLTBitMon_QueryRunRegistry.py:256
tmtt::TMTrackProducer::hists_
Histos & hists_
Definition: TMTrackProducer.h:88
edm::ParameterSet
Definition: ParameterSet.h:36
tmtt::Settings::enableMCtruth
bool enableMCtruth() const
Definition: Settings.h:40
tmtt::TMTrackProducer::trackerTopologyToken_
edm::ESGetToken< TrackerTopology, TrackerTopologyRcd > trackerTopologyToken_
Definition: TMTrackProducer.h:62
KineDebug3::count
void count()
Definition: KinematicConstrainedVertexUpdatorT.h:21
iEvent
int iEvent
Definition: GenABIO.cc:224
ZCounting_cff.edmName
edmName
Definition: ZCounting_cff.py:8
tmtt::Settings::stubTruthInputTag
edm::InputTag stubTruthInputTag() const
Definition: Settings.h:33
edm::EventSetup::getHandle
ESHandle< T > getHandle(const ESGetToken< T, R > &iToken) const
Definition: EventSetup.h:141
tmtt::Settings::barrelVsType
const std::vector< bool > & barrelVsType() const
Definition: Settings.h:97
tmtt::Settings::numPhiSectors
unsigned int numPhiSectors() const
Definition: Settings.h:110
TrackerGeometry::dets
const DetContainer & dets() const override
Returm a vector of all GeomDet (including all GeomDetUnits)
Definition: TrackerGeometry.h:62
edm::EventSetup::getData
bool getData(T &iHolder) const
Definition: EventSetup.h:113
tmtt::TMTrackProducer::magneticFieldToken_
edm::ESGetToken< MagneticField, IdealMagneticFieldRecord > magneticFieldToken_
Definition: TMTrackProducer.h:60
tmtt::StubWindowSuggest::setFEWindows
void setFEWindows(const StubFEWindows *sw)
Definition: StubWindowSuggest.cc:18
tmtt::Stub::DigiStage::HT
edm::getParameterSet
ParameterSet const & getParameterSet(ParameterSetID const &id)
Definition: ParameterSet.cc:855
eostools.move
def move(src, dest)
Definition: eostools.py:511
Calorimetry_cff.bField
bField
Definition: Calorimetry_cff.py:292
tmtt::TMTrackProducer::ttStubAlgoToken_
edm::ESGetToken< StubAlgorithm, TTStubAlgorithmRecord > ttStubAlgoToken_
Definition: TMTrackProducer.h:63
tmtt::Settings::spaceVsType
const std::vector< double > & spaceVsType() const
Definition: Settings.h:96
tmtt::Settings::magneticFieldInputTag
edm::ESInputTag magneticFieldInputTag() const
Definition: Settings.h:26
tmtt::TMTrackProducer::debug_
bool debug_
Definition: TMTrackProducer.h:93
StripSubdetector::TOB
static constexpr auto TOB
Definition: StripSubdetector.h:18
tmtt::Settings::muxOutputsHT
unsigned int muxOutputsHT() const
Definition: Settings.h:189
tmtt::TMTrackProducer::stubAlgo_
const StubAlgorithmOfficial * stubAlgo_
Definition: TMTrackProducer.h:83
tmtt::Settings::tpInputTag
edm::InputTag tpInputTag() const
Definition: Settings.h:32
runonSM.text
text
Definition: runonSM.py:43
tmtt::Settings::stubInputTag
edm::InputTag stubInputTag() const
Definition: Settings.h:31
tmtt::TMTrackProducer::listTrackerModule_
std::list< TrackerModule > listTrackerModule_
Definition: TMTrackProducer.h:74
tmtt::Settings::ttStubAlgoInputTag
edm::ESInputTag ttStubAlgoInputTag() const
Definition: Settings.h:29
MagneticField
Definition: MagneticField.h:19
tmtt::Settings::setMagneticField
void setMagneticField(float magneticField) const
Definition: Settings.h:398
tmtt::Settings::enableOutputIntermediateTTTracks
bool enableOutputIntermediateTTTracks() const
Definition: Settings.h:44
tmtt::Settings::tiltedVsType
const std::vector< bool > & tiltedVsType() const
Definition: Settings.h:99
tmtt::Settings::pitchVsType
const std::vector< double > & pitchVsType() const
Definition: Settings.h:95
tmtt::TMTrackProducer::stubToken_
edm::EDGetTokenT< TTStubDetSetVec > stubToken_
Definition: TMTrackProducer.h:65
tmtt::Stub::DigiStage::GP
StripSubdetector::TID
static constexpr auto TID
Definition: StripSubdetector.h:17
tmtt::Settings::clusterTruthInputTag
edm::InputTag clusterTruthInputTag() const
Definition: Settings.h:34
tmtt::Settings::isHTRPhiEtaRegWhitelisted
bool isHTRPhiEtaRegWhitelisted(unsigned const iEtaReg) const
Definition: Settings.cc:463