CMS 3D CMS Logo

TMTrackProducer.cc
Go to the documentation of this file.
15 
17 
18 #include <iostream>
19 #include <vector>
20 #include <list>
21 #include <set>
22 #include <sstream>
23 #include <mutex>
24 
25 using namespace std;
26 
27 namespace tmtt {
28 
29  namespace {
30  std::once_flag printOnce;
31  } // namespace
32 
33  std::unique_ptr<GlobalCacheTMTT> TMTrackProducer::initializeGlobalCache(edm::ParameterSet const& iConfig) {
34  return std::make_unique<GlobalCacheTMTT>(iConfig);
35  }
36 
37  TMTrackProducer::TMTrackProducer(const edm::ParameterSet& iConfig, GlobalCacheTMTT const* globalCacheTMTT)
38  : settings_(iConfig), // Set configuration parameters
39  stubWindowSuggest_(globalCacheTMTT->stubWindowSuggest()), // For tuning FE stub window sizes
40  hists_(globalCacheTMTT->hists()), // Initialize histograms
41  htRphiErrMon_(globalCacheTMTT->htRphiErrMon()), // rphi HT error monitoring
42  debug_(true) // Debug printout
43  {
44  using namespace edm;
45 
46  // Get tokens for ES data access.
48  esConsumes<MagneticField, IdealMagneticFieldRecord, Transition::BeginRun>(settings_.magneticFieldInputTag());
49  trackerGeometryToken_ = esConsumes<TrackerGeometry, TrackerDigiGeometryRecord, Transition::BeginRun>(
52  esConsumes<TrackerTopology, TrackerTopologyRcd, Transition::BeginRun>(settings_.trackerTopologyInputTag());
54  esConsumes<StubAlgorithm, TTStubAlgorithmRecord, Transition::BeginRun>(settings_.ttStubAlgoInputTag());
55 
56  // Get tokens for ED data access.
57  stubToken_ = consumes<TTStubDetSetVec>(settings_.stubInputTag());
58  if (settings_.enableMCtruth()) {
59  // These lines use lots of CPU, even if no use of truth info is made later.
60  tpToken_ = consumes<TrackingParticleCollection>(settings_.tpInputTag());
61  stubTruthToken_ = consumes<TTStubAssMap>(settings_.stubTruthInputTag());
62  clusterTruthToken_ = consumes<TTClusterAssMap>(settings_.clusterTruthInputTag());
63  genJetToken_ = consumes<reco::GenJetCollection>(settings_.genJetInputTag());
64  }
65 
68  runRZfilter_ = (not useRZfilter_.empty()); // Do any fitters require an r-z track filter to be run?
69 
70  // Book histograms.
71  //hists_.book();
72 
73  // Create track fitting algorithm
74  for (const string& fitterName : trackFitters_) {
75  fitterWorkerMap_[fitterName] = trackFitFactory::create(fitterName, &settings_);
76  }
77 
78  //--- Define EDM output to be written to file (if required)
79 
81  // L1 tracks found by Hough Transform
82  produces<TTTrackCollection>("TML1TracksHT").setBranchAlias("TML1TracksHT");
83  // L1 tracks found by r-z track filter.
84  if (runRZfilter_)
85  produces<TTTrackCollection>("TML1TracksRZ").setBranchAlias("TML1TracksRZ");
86  }
87  // L1 tracks after track fit by each of the fitting algorithms under study
88  for (const string& fitterName : trackFitters_) {
89  string edmName = string("TML1Tracks") + fitterName;
90  produces<TTTrackCollection>(edmName).setBranchAlias(edmName);
91  }
92  }
93 
94  //=== Run every run
95 
96  void TMTrackProducer::beginRun(const edm::Run& iRun, const edm::EventSetup& iSetup) {
97  // Get the B-field and store its value in the Settings class.
98  const MagneticField* theMagneticField = &(iSetup.getData(magneticFieldToken_));
99  float bField = theMagneticField->inTesla(GlobalPoint(0, 0, 0)).z(); // B field in Tesla.
101 
102  // Set also B field in GlobalCacheTMTT (used only for Histogramming)
103  globalCache()->settings().setMagneticField(bField);
104 
105  std::stringstream text;
106  text << "\n--- B field = " << bField << " Tesla ---\n";
107  std::call_once(printOnce, [](string t) { PrintL1trk() << t; }, text.str());
108 
109  // Get tracker geometry
112 
113  // Loop over tracker modules to get module info.
114 
115  // Identifies tracker module type for firmware.
116  TrackerModule::ModuleTypeCfg moduleTypeCfg;
117  moduleTypeCfg.pitchVsType = settings_.pitchVsType();
118  moduleTypeCfg.spaceVsType = settings_.spaceVsType();
119  moduleTypeCfg.barrelVsType = settings_.barrelVsType();
120  moduleTypeCfg.psVsType = settings_.psVsType();
121  moduleTypeCfg.tiltedVsType = settings_.tiltedVsType();
122 
123  listTrackerModule_.clear();
124  for (const GeomDet* gd : trackerGeometry_->dets()) {
125  DetId detId = gd->geographicalId();
126  // Phase 2 Outer Tracker uses TOB for entire barrel & TID for entire endcap.
127  if (detId.subdetId() != StripSubdetector::TOB && detId.subdetId() != StripSubdetector::TID)
128  continue;
129  if (trackerTopology_->isLower(detId)) { // Select only lower of the two sensors in a module.
130  // Store info about this tracker module.
131  listTrackerModule_.emplace_back(trackerGeometry_, trackerTopology_, moduleTypeCfg, detId);
132  }
133  }
134 
135  // Takes one copy of this to GlobalCacheTMTT for later histogramming.
136  globalCache()->setListTrackerModule(listTrackerModule_);
137 
138  // Get TTStubProducerAlgorithm algorithm, to adjust stub bend FE encoding.
139  stubAlgo_ = dynamic_cast<const StubAlgorithmOfficial*>(&iSetup.getData(ttStubAlgoToken_));
140  // Get FE stub window size from TTStub producer configuration
141  const edm::ESHandle<StubAlgorithm> stubAlgoHandle = iSetup.getHandle(ttStubAlgoToken_);
142  const edm::ParameterSet& pSetStubAlgo = getParameterSet(stubAlgoHandle.description()->pid_);
143  stubFEWindows_ = std::make_unique<StubFEWindows>(pSetStubAlgo);
144  // Initialize utilities needing FE window size.
146  degradeBend_ = std::make_unique<DegradeBend>(trackerTopology_, stubFEWindows_.get(), stubAlgo_);
147  }
148 
149  //=== Run every event
150 
152  // Note useful info about MC truth particles and about reconstructed stubs .
153  InputData inputData(iEvent,
154  iSetup,
155  &settings_,
157  degradeBend_.get(),
161  tpToken_,
162  stubToken_,
165  genJetToken_);
166 
167  const list<TP>& vTPs = inputData.getTPs();
168  const list<Stub*>& vStubs = inputData.stubs();
169 
170  // Creates matrix of Sector objects, which decide which stubs are in which (eta,phi) sector
172  // Create matrix of r-phi Hough-Transform arrays, with one-to-one correspondence to sectors.
174  // Create matrix of Make3Dtracks objects, to run optional r-z track filter, with one-to-one correspondence to sectors.
176  // Create matrix of tracks from each fitter in each sector
178  // Final tracks after duplicate removal from each track fitter in entire tracker.
179  map<string, list<const L1fittedTrack*>> mapFinalTracks;
180 
181  //=== Initialization
182  // Create utility for converting L1 tracks from our private format to official CMSSW EDM format.
184 
185  // Pointers to TTTrack collections for ED output.
186  auto htTTTracksForOutput = std::make_unique<TTTrackCollection>();
187  auto rzTTTracksForOutput = std::make_unique<TTTrackCollection>();
188  map<string, unique_ptr<TTTrackCollection>> allFitTTTracksForOutput;
189  for (const string& fitterName : trackFitters_) {
190  auto fitTTTracksForOutput = std::make_unique<TTTrackCollection>();
191  allFitTTTracksForOutput[fitterName] = std::move(fitTTTracksForOutput);
192  }
193 
194  //=== Do tracking in the r-phi Hough transform within each sector.
195 
196  // Fill Hough-Transform arrays with stubs.
197  for (unsigned int iPhiSec = 0; iPhiSec < settings_.numPhiSectors(); iPhiSec++) {
198  for (unsigned int iEtaReg = 0; iEtaReg < settings_.numEtaRegions(); iEtaReg++) {
199  // Initialize constants for this sector.
200  mSectors(iPhiSec, iEtaReg) = std::make_unique<Sector>(&settings_, iPhiSec, iEtaReg);
201  Sector* sector = mSectors(iPhiSec, iEtaReg).get();
202 
203  mHtRphis(iPhiSec, iEtaReg) = std::make_unique<HTrphi>(
204  &settings_, iPhiSec, iEtaReg, sector->etaMin(), sector->etaMax(), sector->phiCentre(), &htRphiErrMon_);
205  HTrphi* htRphi = mHtRphis(iPhiSec, iEtaReg).get();
206 
207  // Check sector is enabled (always true, except if user disabled some for special studies).
208  if (settings_.isHTRPhiEtaRegWhitelisted(iEtaReg)) {
209  for (Stub* stub : vStubs) {
210  // Digitize stub as would be at input to GP. This doesn't need the nonant number, since we assumed an integer number of
211  // phi digitisation bins inside an nonant. N.B. This changes the coordinates & bend stored in the stub.
212 
214  stub->digitize(iPhiSec, Stub::DigiStage::GP);
215 
216  // Check if stub is inside this sector
217  bool inside = sector->inside(stub);
218 
219  if (inside) {
220  // Check which eta subsectors within the sector the stub is compatible with (if subsectors being used).
221  const vector<bool> inEtaSubSecs = sector->insideEtaSubSecs(stub);
222 
223  // Digitize stub if as would be at input to HT, which slightly degrades its coord. & bend resolution, affecting the HT performance.
225  stub->digitize(iPhiSec, Stub::DigiStage::HT);
226 
227  // Store stub in Hough transform array for this sector, indicating its compatibility with eta subsectors with sector.
228  htRphi->store(stub, inEtaSubSecs);
229  }
230  }
231  }
232 
233  // Find tracks in r-phi HT array.
234  htRphi->end(); // Calls htArrayRphi_.end() -> HTBase::end()
235  }
236  }
237 
238  if (settings_.muxOutputsHT() > 0) {
239  // Multiplex outputs of several HT onto one pair of output opto-links.
240  // This only affects tracking performance if option busySectorKill is enabled, so that tracks that
241  // can't be sent down the link within the time-multiplexed period are killed.
242  MuxHToutputs muxHT(&settings_);
243  muxHT.exec(mHtRphis);
244  }
245 
246  // Optionally, run 2nd stage mini HT -- WITHOUT TRUNCATION ???
247  if (settings_.miniHTstage()) {
248  MiniHTstage miniHTstage(&settings_);
249  miniHTstage.exec(mHtRphis);
250  }
251 
252  //=== Make 3D tracks, optionally running r-z track filters (such as Seed Filter) & duplicate track removal.
253 
254  for (unsigned int iPhiSec = 0; iPhiSec < settings_.numPhiSectors(); iPhiSec++) {
255  for (unsigned int iEtaReg = 0; iEtaReg < settings_.numEtaRegions(); iEtaReg++) {
256  const Sector* sector = mSectors(iPhiSec, iEtaReg).get();
257 
258  // Get tracks found by r-phi HT.
259  const HTrphi* htRphi = mHtRphis(iPhiSec, iEtaReg).get();
260  const list<L1track2D>& vecTracksRphi = htRphi->trackCands2D();
261 
262  // Initialize utility for making 3D tracks from 2D ones.
263  mMake3Dtrks(iPhiSec, iEtaReg) = std::make_unique<Make3Dtracks>(
264  &settings_, iPhiSec, iEtaReg, sector->etaMin(), sector->etaMax(), sector->phiCentre());
265  Make3Dtracks* make3Dtrk = mMake3Dtrks(iPhiSec, iEtaReg).get();
266 
267  // Convert 2D tracks found by HT to 3D tracks (optionally by running r-z filters & duplicate track removal)
268  make3Dtrk->run(vecTracksRphi);
269 
271  // Convert these tracks to EDM format for output (used for collaborative work outside TMTT group).
272  // Do this for tracks output by HT & optionally also for those output by r-z track filter.
273  const list<L1track3D>& vecTrk3D_ht = make3Dtrk->trackCands3D(false);
274  for (const L1track3D& trk : vecTrk3D_ht) {
275  TTTrack<Ref_Phase2TrackerDigi_> htTTTrack = converter.makeTTTrack(&trk, iPhiSec, iEtaReg);
276  htTTTracksForOutput->push_back(htTTTrack);
277  }
278 
279  if (runRZfilter_) {
280  const list<L1track3D>& vecTrk3D_rz = make3Dtrk->trackCands3D(true);
281  for (const L1track3D& trk : vecTrk3D_rz) {
282  TTTrack<Ref_Phase2TrackerDigi_> rzTTTrack = converter.makeTTTrack(&trk, iPhiSec, iEtaReg);
283  rzTTTracksForOutput->push_back(rzTTTrack);
284  }
285  }
286  }
287  }
288  }
289 
290  //=== Do a helix fit to all the track candidates.
291 
292  // Loop over all the fitting algorithms we are trying.
293  for (const string& fitterName : trackFitters_) {
294  for (unsigned int iPhiSec = 0; iPhiSec < settings_.numPhiSectors(); iPhiSec++) {
295  for (unsigned int iEtaReg = 0; iEtaReg < settings_.numEtaRegions(); iEtaReg++) {
296  const Make3Dtracks* make3Dtrk = mMake3Dtrks(iPhiSec, iEtaReg).get();
297 
298  // Does this fitter require r-z track filter to be run before it?
299  bool useRZfilt = (std::count(useRZfilter_.begin(), useRZfilter_.end(), fitterName) > 0);
300 
301  // Get 3D track candidates found by Hough transform (plus optional r-z filters/duplicate removal) in this sector.
302  const list<L1track3D>& vecTrk3D = make3Dtrk->trackCands3D(useRZfilt);
303 
304  // Find list where fitted tracks will be stored.
305  list<L1fittedTrack>& fitTrksInSec = mapmFitTrks(iPhiSec, iEtaReg)[fitterName];
306 
307  // Fit all tracks in this sector
308  for (const L1track3D& trk : vecTrk3D) {
309  // Ensure stubs assigned to this track is digitized with respect to the phi sector the track is in.
310  if (settings_.enableDigitize()) {
311  const vector<Stub*>& stubsOnTrk = trk.stubs();
312  for (Stub* s : stubsOnTrk) {
313  // Also digitize stub in way this specific track fitter uses it.
314  s->digitize(iPhiSec, Stub::DigiStage::TF);
315  }
316  }
317 
318  L1fittedTrack fitTrk = fitterWorkerMap_[fitterName]->fit(trk);
319 
320  if (fitTrk.accepted()) { // If fitter accepted track, then store it.
321  // Optionally digitize fitted track, degrading slightly resolution.
323  fitTrk.digitizeTrack(fitterName);
324  // Store fitted tracks, such that there is one fittedTracks corresponding to each HT tracks.
325  fitTrksInSec.push_back(fitTrk);
326  }
327  }
328  }
329  }
330  }
331 
332  // Run duplicate track removal on the fitted tracks if requested.
333 
334  // Initialize the duplicate track removal algorithm that can optionally be run after the track fit.
335  DupFitTrkKiller killDupFitTrks(&settings_);
336 
337  // Loop over all the fitting algorithms we used.
338  for (const string& fitterName : trackFitters_) {
339  for (unsigned int iPhiSec = 0; iPhiSec < settings_.numPhiSectors(); iPhiSec++) {
340  for (unsigned int iEtaReg = 0; iEtaReg < settings_.numEtaRegions(); iEtaReg++) {
341  // Get fitted tracks in sector
342  const list<L1fittedTrack>& fitTrksInSec = mapmFitTrks(iPhiSec, iEtaReg)[fitterName];
343 
344  // Run duplicate removal
345  list<const L1fittedTrack*> filteredFitTrksInSec = killDupFitTrks.filter(fitTrksInSec);
346 
347  // Prepare TTTrack collection.
348  for (const L1fittedTrack* fitTrk : filteredFitTrksInSec) {
349  // Convert these fitted tracks to EDM format for output (used for collaborative work outside TMTT group).
350  TTTrack<Ref_Phase2TrackerDigi_> fitTTTrack = converter.makeTTTrack(fitTrk, iPhiSec, iEtaReg);
351  allFitTTTracksForOutput[fitterName]->push_back(fitTTTrack);
352  }
353 
354  // Store fitted tracks from entire tracker.
355  mapFinalTracks[fitterName].insert(
356  mapFinalTracks[fitterName].end(), filteredFitTrksInSec.begin(), filteredFitTrksInSec.end());
357  }
358  }
359  }
360 
361  // Debug printout
362  if (debug_) {
363  PrintL1trk() << "INPUT #TPs = " << vTPs.size() << " #STUBs = " << vStubs.size();
364  unsigned int numHTtracks = 0;
365  for (unsigned int iPhiSec = 0; iPhiSec < settings_.numPhiSectors(); iPhiSec++) {
366  for (unsigned int iEtaReg = 0; iEtaReg < settings_.numEtaRegions(); iEtaReg++) {
367  const Make3Dtracks* make3Dtrk = mMake3Dtrks(iPhiSec, iEtaReg).get();
368  numHTtracks += make3Dtrk->trackCands3D(false).size();
369  }
370  }
371  PrintL1trk() << "Number of tracks after HT = " << numHTtracks;
372  for (const auto& p : mapFinalTracks) {
373  const string& fitName = p.first;
374  const list<const L1fittedTrack*> fittedTracks = p.second;
375  PrintL1trk() << "Number of tracks after " << fitName << " track helix fit = " << fittedTracks.size();
376  }
377  }
378 
379  // Allow histogramming to plot undigitized variables.
380  for (Stub* stub : vStubs) {
382  stub->setDigitizeWarningsOn(false);
383  }
384 
385  // Fill histograms to monitor input data & tracking performance.
386  hists_.fill(inputData, mSectors, mHtRphis, mMake3Dtrks, mapFinalTracks);
387 
388  //=== Store output EDM track and hardware stub collections.
390  iEvent.put(std::move(htTTTracksForOutput), "TML1TracksHT");
391  if (runRZfilter_)
392  iEvent.put(std::move(rzTTTracksForOutput), "TML1TracksRZ");
393  }
394  for (const string& fitterName : trackFitters_) {
395  string edmName = string("TML1Tracks") + fitterName;
396  iEvent.put(std::move(allFitTTTracksForOutput[fitterName]), edmName);
397  }
398  }
399 
401  const Settings& settings = globalCacheTMTT->settings();
402 
403  // Print stub window sizes that TMTT recommends CMS uses in FE chips.
404  if (settings.printStubWindows())
405  globalCacheTMTT->stubWindowSuggest().printResults();
406 
407  // Print (once) info about tracker geometry.
408  globalCacheTMTT->hists().trackerGeometryAnalysis(globalCacheTMTT->listTrackerModule());
409 
410  PrintL1trk() << "\n Number of (eta,phi) sectors used = (" << settings.numEtaRegions() << ","
411  << settings.numPhiSectors() << ")";
412 
413  // Print job summary
414  globalCacheTMTT->hists().endJobAnalysis(&(globalCacheTMTT->htRphiErrMon()));
415  }
416 
417 } // namespace tmtt
418 
Class for "official" algorithm to be used in TTStubBuilder.
const std::list< TrackerModule > & listTrackerModule() const
const StubAlgorithmOfficial * stubAlgo_
bool miniHTstage() const
Definition: Settings.h:149
bool enableDigitize() const
Definition: Settings.h:80
Histos & hists() const
const Settings & settings() const
T const & getData(const ESGetToken< T, R > &iToken) const noexcept(false)
Definition: EventSetup.h:119
HTrphi::ErrorMonitor & htRphiErrMon_
std::unique_ptr< DegradeBend > degradeBend_
const std::list< TP > & getTPs() const
Definition: InputData.h:40
T z() const
Definition: PV3DBase.h:61
virtual GlobalVector inTesla(const GlobalPoint &gp) const =0
Field value ad specified global point, in Tesla.
const std::vector< std::string > & useRZfilter() const
Definition: Settings.h:251
StubWindowSuggest & stubWindowSuggest() const
const TrackerTopology * trackerTopology_
void exec(Array2D< std::unique_ptr< HTrphi >> &mHtRphis) const
Definition: MuxHToutputs.cc:56
HTrphi::ErrorMonitor & htRphiErrMon() const
Global3DPoint GlobalPoint
Definition: GlobalPoint.h:10
const std::vector< double > & pitchVsType() const
Definition: Settings.h:95
Trktree trk
Definition: Trktree.cc:2
void setFEWindows(const StubFEWindows *sw)
const DetContainer & dets() const override
Returm a vector of all GeomDet (including all GeomDetUnits)
std::unique_ptr< StubFEWindows > stubFEWindows_
bool printStubWindows() const
Definition: Settings.h:68
void digitizeTrack(const std::string &fitterName)
virtual void endJobAnalysis(const HTrphi::ErrorMonitor *htRphiErrMon=nullptr)
Definition: Histos.cc:1562
unsigned int numEtaRegions() const
Definition: Settings.h:125
void setMagneticField(float magneticField) const
Definition: Settings.h:400
const std::list< L1track3D > & trackCands3D(bool rzFiltered) const
Definition: Make3Dtracks.h:49
std::map< std::string, std::unique_ptr< TrackFitGeneric > > fitterWorkerMap_
edm::ESGetToken< TrackerGeometry, TrackerDigiGeometryRecord > trackerGeometryToken_
edm::EDGetTokenT< TrackingParticleCollection > tpToken_
edm::ESInputTag trackerGeometryInputTag() const
Definition: Settings.h:27
const std::vector< bool > & psVsType() const
Definition: Settings.h:98
std::vector< bool > tiltedVsType
Definition: TrackerModule.h:34
edm::EDGetTokenT< TTClusterAssMap > clusterTruthToken_
edm::EDGetTokenT< TTStubAssMap > stubTruthToken_
static void globalEndJob(GlobalCacheTMTT *globalCacheTMTT)
int iEvent
Definition: GenABIO.cc:224
void produce(edm::Event &, const edm::EventSetup &) override
std::vector< std::string > trackFitters_
edm::ESGetToken< TrackerTopology, TrackerTopologyRcd > trackerTopologyToken_
const std::vector< bool > & barrelVsType() const
Definition: Settings.h:97
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
edm::InputTag tpInputTag() const
Definition: Settings.h:32
void exec(Array2D< std::unique_ptr< HTrphi >> &mHtRphis)
Definition: MiniHTstage.cc:45
static constexpr auto TOB
std::unique_ptr< TrackFitGeneric > create(const std::string &fitterName, const Settings *settings)
edm::ESGetToken< MagneticField, IdealMagneticFieldRecord > magneticFieldToken_
edm::ESInputTag ttStubAlgoInputTag() const
Definition: Settings.h:29
const TrackerGeometry * trackerGeometry_
ESHandle< T > getHandle(const ESGetToken< T, R > &iToken) const
Definition: EventSetup.h:130
edm::InputTag genJetInputTag() const
Definition: Settings.h:35
edm::ESGetToken< StubAlgorithm, TTStubAlgorithmRecord > ttStubAlgoToken_
Definition: DetId.h:17
bool isLower(const DetId &id) const
edm::ESInputTag magneticFieldInputTag() const
Definition: Settings.h:26
bool enableOutputIntermediateTTTracks() const
Definition: Settings.h:44
=== This is the base class for the linearised chi-squared track fit algorithms.
Definition: Array2D.h:16
edm::eventsetup::ComponentDescription const * description() const
Definition: ESHandle.cc:9
void run(const std::list< L1track2D > &vecTracksRphi)
Definition: Make3Dtracks.h:38
Class to store the L1 Track Trigger tracks.
Definition: TTTrack.h:29
edm::InputTag clusterTruthInputTag() const
Definition: Settings.h:34
void beginRun(const edm::Run &, const edm::EventSetup &) override
virtual const std::list< L1track2D > & trackCands2D() const
Definition: HTbase.h:54
edm::InputTag stubTruthInputTag() const
Definition: Settings.h:33
std::list< TrackerModule > listTrackerModule_
std::vector< double > pitchVsType
Definition: TrackerModule.h:30
ParameterSet const & getParameterSet(ParameterSetID const &id)
HLT enums.
bool enableMCtruth() const
Definition: Settings.h:40
std::vector< double > spaceVsType
Definition: TrackerModule.h:31
std::list< const L1fittedTrack * > filter(const std::list< L1fittedTrack > &vecTracks) const
bool accepted() const
unsigned int muxOutputsHT() const
Definition: Settings.h:189
virtual void trackerGeometryAnalysis(const std::list< TrackerModule > &listTrackerModule)
Definition: Histos.cc:1704
bool isHTRPhiEtaRegWhitelisted(unsigned const iEtaReg) const
Definition: Settings.cc:467
StubWindowSuggest & stubWindowSuggest_
const std::vector< std::string > & trackFitters() const
Definition: Settings.h:248
std::vector< bool > barrelVsType
Definition: TrackerModule.h:32
edm::EDGetTokenT< TTStubDetSetVec > stubToken_
const std::vector< double > & spaceVsType() const
Definition: Settings.h:96
unsigned int numPhiSectors() const
Definition: Settings.h:110
virtual void fill(const InputData &inputData, const Array2D< std::unique_ptr< Sector >> &mSectors, const Array2D< std::unique_ptr< HTrphi >> &mHtPhis, const Array2D< std::unique_ptr< Make3Dtracks >> &mGet3Dtrks, const std::map< std::string, std::list< const L1fittedTrack *>> &mapFinalTracks)
static constexpr auto TID
edm::InputTag stubInputTag() const
Definition: Settings.h:31
edm::EDGetTokenT< reco::GenJetCollection > genJetToken_
def move(src, dest)
Definition: eostools.py:511
const std::vector< bool > & tiltedVsType() const
Definition: Settings.h:99
Definition: Run.h:45
std::vector< std::string > useRZfilter_
edm::ESInputTag trackerTopologyInputTag() const
Definition: Settings.h:28