CMS 3D CMS Logo

L1TrackTripletEmulatorProducer.cc
Go to the documentation of this file.
1 // Original Author: George Karathanasis,
2 // georgios.karathanasis@cern.ch, CU Boulder
3 //
4 // Created: Tue, 05 Dec 2023 14:01:41 GMT
5 //
6 // Three track candidates (triplets) producer with arbitary track mass. Aimed to
7 // run in the GTT stage. Triplets are created using the 3 most energetic tracks.
8 // Selection cuts are applied both on each track individually and in the final
9 // triplet. Initially created for W->3pi search.
10 // Link https://indico.cern.ch/event/1356822/contributions/5712593/attachments/2773493/4833005/L1T_w3pi_emulator.pdf
11 
12 // L1T include files
21 
22 // system include files
34 
35 //own headers
36 #include "L1TrackUnpacker.h"
37 
38 //general
39 #include <ap_int.h>
40 
41 using namespace std;
42 using namespace edm;
43 using namespace l1t;
44 using namespace l1trackunpacker;
45 
47 public:
49  ~L1TrackTripletEmulatorProducer() override = default;
51  typedef vector<L1TTTrackType> L1TTTrackCollectionType;
53  static void fillDescriptions(ConfigurationDescriptions &descriptions);
54 
55 private:
56  void produce(Event &, const EventSetup &) override;
57 
58  // ----------member data ---------------------------
59 
60  std::vector<edm::Ptr<L1TTTrackType>> L1TrkPtrs_;
61  vector<int> tdtrk_;
62  const double trk1_pt_;
63  const double trk1_eta_;
64  const double trk1_mva_;
65  const double trk1_nstub_;
66  const double trk1_dz_;
67  const double trk1_mass_;
68  const double trk2_pt_;
69  const double trk2_eta_;
70  const double trk2_mva_;
71  const double trk2_nstub_;
72  const double trk2_dz_;
73  const double trk2_mass_;
74  const double trk3_pt_;
75  const double trk3_eta_;
76  const double trk3_mva_;
77  const double trk3_nstub_;
78  const double trk3_dz_;
79  const double trk3_mass_;
80  const bool displaced_;
81  const double triplet_massMin_;
82  const double triplet_massMax_;
83  const double triplet_ptMin_;
84  const double triplet_ptMax_;
85  const double triplet_etaMin_;
86  const double triplet_etaMax_;
87  const int triplet_abscharge_;
88  const double triplet_massOver_;
89  const double pair1_massMin_;
90  const double pair1_massMax_;
91  const double pair2_massMin_;
92  const double pair2_massMax_;
93  const double pair1_dzMin_;
94  const double pair1_dzMax_;
95  const double pair2_dzMin_;
96  const double pair2_dzMax_;
98 
99  struct L1track {
100  double Pt;
101  double Eta;
102  double Phi;
103  int Charge;
104  double MVA;
105  int Nstubs;
106  double Z0;
107  unsigned int Index;
108  };
109  // L1TTTrackType track;
110  bool TrackSelector(L1track &, double, double, double, double, double, int);
111  double FloatPtFromBits(const L1TTTrackType &);
112  double FloatEtaFromBits(const L1TTTrackType &);
113  double FloatPhiFromBits(const L1TTTrackType &);
114  double FloatZ0FromBits(const L1TTTrackType &);
115 
118 };
119 
120 //constructor
122  : trk1_pt_(iConfig.getParameter<double>("trk1_ptMin")),
123  trk1_eta_(iConfig.getParameter<double>("trk1_absEtaMax")),
124  trk1_mva_(iConfig.getParameter<double>("trk1_mvaMin")),
125  trk1_nstub_(iConfig.getParameter<int>("trk1_nstubMin")),
126  trk1_dz_(iConfig.getParameter<double>("trk1_dzMax")),
127  trk1_mass_(iConfig.getParameter<double>("trk1_mass")),
128  trk2_pt_(iConfig.getParameter<double>("trk2_ptMin")),
129  trk2_eta_(iConfig.getParameter<double>("trk2_absEtaMax")),
130  trk2_mva_(iConfig.getParameter<double>("trk2_mvaMin")),
131  trk2_nstub_(iConfig.getParameter<int>("trk2_nstubMin")),
132  trk2_dz_(iConfig.getParameter<double>("trk2_dzMax")),
133  trk2_mass_(iConfig.getParameter<double>("trk2_mass")),
134  trk3_pt_(iConfig.getParameter<double>("trk3_ptMin")),
135  trk3_eta_(iConfig.getParameter<double>("trk3_absEtaMax")),
136  trk3_mva_(iConfig.getParameter<double>("trk3_mvaMin")),
137  trk3_nstub_(iConfig.getParameter<int>("trk3_nstubMin")),
138  trk3_dz_(iConfig.getParameter<double>("trk3_dzMax")),
139  trk3_mass_(iConfig.getParameter<double>("trk3_mass")),
140  displaced_(iConfig.getParameter<bool>("displaced")),
141  triplet_massMin_(iConfig.getParameter<double>("triplet_massMin")),
142  triplet_massMax_(iConfig.getParameter<double>("triplet_massMax")),
143  triplet_ptMin_(iConfig.getParameter<double>("triplet_ptMin")),
144  triplet_ptMax_(iConfig.getParameter<double>("triplet_ptMax")),
145  triplet_etaMin_(iConfig.getParameter<double>("triplet_absEtaMin")),
146  triplet_etaMax_(iConfig.getParameter<double>("triplet_absEtaMax")),
147  triplet_abscharge_(iConfig.getParameter<int>("triplet_absCharge")),
148  triplet_massOver_(iConfig.getParameter<double>("triplet_massOverflow")),
149  pair1_massMin_(iConfig.getParameter<double>("pair1_massMin")),
150  pair1_massMax_(iConfig.getParameter<double>("pair1_massMax")),
151  pair2_massMin_(iConfig.getParameter<double>("pair2_massMin")),
152  pair2_massMax_(iConfig.getParameter<double>("pair2_massMax")),
153  pair1_dzMin_(iConfig.getParameter<double>("pair1_dzMin")),
154  pair1_dzMax_(iConfig.getParameter<double>("pair1_dzMax")),
155  pair2_dzMin_(iConfig.getParameter<double>("pair2_dzMin")),
156  pair2_dzMax_(iConfig.getParameter<double>("pair2_dzMax")),
157  use_float_track_precision_(iConfig.getParameter<bool>("float_precision")),
158  trackToken_(consumes<L1TTTrackRefCollectionType>(iConfig.getParameter<InputTag>("L1TrackInputTag"))),
159  PVtxToken_(consumes<l1t::VertexWordCollection>(iConfig.getParameter<InputTag>("L1PVertexInputTag"))) {
160  if (displaced_) {
161  produces<l1t::TkTripletCollection>("L1TrackTripletExtended");
162  produces<l1t::TkTripletWordCollection>("L1TrackTripletWordExtended");
163  } else {
164  produces<l1t::TkTripletCollection>("L1TrackTriplet");
165  produces<l1t::TkTripletWordCollection>("L1TrackTripletWord");
166  }
167 }
168 
170  unique_ptr<l1t::TkTripletCollection> L1TrackTripletContainer(new l1t::TkTripletCollection);
171  unique_ptr<l1t::TkTripletWordCollection> L1TrackTripletWordContainer(new l1t::TkTripletWordCollection);
172 
173  // Read inputs
175  iEvent.getByToken(trackToken_, TTTrackHandle);
176 
178  iEvent.getByToken(PVtxToken_, PVtx);
179  double PVz = (PVtx->at(0)).z0();
180 
181  std::string OutputDigisName = "L1TrackTriplet";
182  std::string OutputWordName = "L1TrackTripletWord";
183 
184  if (displaced_)
185  OutputDigisName += "Extended";
186 
187  if (TTTrackHandle->size() < 3) {
188  iEvent.put(std::move(L1TrackTripletContainer), OutputDigisName);
189  iEvent.put(std::move(L1TrackTripletWordContainer), OutputWordName);
190  return;
191  }
192 
193  // Finding the 3 highest pT tracks
194  L1track trk1{-99, -99, -99, -99, -99, -99, -99, 0};
195  L1track trk2{-99, -99, -99, -99, -99, -99, -99, 0};
196  L1track trk3{-99, -99, -99, -99, -99, -99, -99, 0};
197 
198  int current_track_idx = -1;
199  for (auto current_track : *TTTrackHandle) {
200  current_track_idx += 1;
201  double current_track_pt = 0;
203  current_track_pt = current_track->momentum().perp();
204  else
205  current_track_pt = FloatPtFromBits(*current_track);
206  if (current_track_pt < trk1.Pt)
207  continue;
208  trk3 = trk2;
209  trk2 = trk1;
211  trk1.Pt = current_track->momentum().perp();
212  trk1.Eta = current_track->eta();
213  trk1.Phi = current_track->phi();
214  trk1.Charge = (int)(current_track->rInv() / fabs(current_track->rInv()));
215  trk1.MVA = current_track->trkMVA1();
216  trk1.Nstubs = current_track->getStubRefs().size();
217  trk1.Z0 = current_track->z0();
218  trk1.Index = current_track_idx;
219  } else {
220  trk1.Pt = FloatPtFromBits(*current_track);
221  trk1.Eta = FloatEtaFromBits(*current_track);
222  trk1.Phi = FloatPhiFromBits(*current_track);
223  trk1.Charge = (int)(current_track->rInv() / fabs(current_track->rInv()));
224  trk1.MVA = current_track->trkMVA1();
225  trk1.Nstubs = current_track->getStubRefs().size();
226  trk1.Z0 = FloatZ0FromBits(*current_track);
227  trk1.Index = current_track_idx;
228  }
229  }
230 
231  // track selection
232  bool track1_pass = TrackSelector(trk1, PVz, trk1_pt_, trk1_eta_, trk1_mva_, trk1_dz_, trk1_nstub_);
233  bool track2_pass = TrackSelector(trk2, PVz, trk2_pt_, trk2_eta_, trk2_mva_, trk2_dz_, trk2_nstub_);
234  bool track3_pass = TrackSelector(trk3, PVz, trk3_pt_, trk3_eta_, trk3_mva_, trk3_dz_, trk3_nstub_);
235  if (!track1_pass || !track2_pass || !track3_pass) {
236  iEvent.put(std::move(L1TrackTripletContainer), OutputDigisName);
237  iEvent.put(std::move(L1TrackTripletWordContainer), OutputWordName);
238  return;
239  }
240 
241  // create Lorentz Vectors
242  math::PtEtaPhiMLorentzVectorD pion1(trk1.Pt, trk1.Eta, trk1.Phi, trk1_mass_);
243  math::PtEtaPhiMLorentzVectorD pion2(trk2.Pt, trk2.Eta, trk2.Phi, trk2_mass_);
244  math::PtEtaPhiMLorentzVectorD pion3(trk3.Pt, trk3.Eta, trk3.Phi, trk3_mass_);
245 
246  bool event_pass = true;
247 
248  // create triplets
249  double triplet_mass = (pion1 + pion2 + pion3).M();
250  if (triplet_mass > triplet_massOver_)
251  triplet_mass = triplet_massOver_;
252  double triplet_eta = (pion1 + pion2 + pion3).Eta();
253  double triplet_pt = (pion1 + pion2 + pion3).Pt();
254  int triplet_charge = trk1.Charge + trk2.Charge + trk3.Charge;
255  std::vector<double> pair_masses{(pion1 + pion2).M(), (pion2 + pion3).M(), (pion1 + pion3).M()};
256  std::sort(pair_masses.begin(), pair_masses.end(), [](auto &a, auto &b) { return a > b; });
257  std::vector<double> pair_dzs{fabs(trk1.Z0 - trk2.Z0), fabs(trk2.Z0 - trk3.Z0), fabs(trk1.Z0 - trk3.Z0)};
258  std::sort(pair_dzs.begin(), pair_dzs.end(), [](auto &a, auto &b) { return a > b; });
259 
260  //triplet selection
261  if (triplet_mass < triplet_massMin_ || triplet_mass > triplet_massMax_)
262  event_pass = false;
263  if (fabs(triplet_eta) < triplet_etaMin_ || fabs(triplet_eta) > triplet_etaMax_)
264  event_pass = false;
265  if (triplet_pt < triplet_ptMin_ || triplet_pt > triplet_ptMax_)
266  event_pass = false;
267  if (fabs(triplet_charge) != triplet_abscharge_ && triplet_abscharge_ > -1)
268  event_pass = false;
269  if (pair_masses[2] < pair2_massMin_ || pair_masses[2] > pair2_massMax_)
270  event_pass = false;
271  if (pair_masses[0] < pair1_massMin_ || pair_masses[0] > pair1_massMax_)
272  event_pass = false;
273  if (pair_dzs[2] < pair2_dzMin_ || pair_dzs[2] > pair2_dzMax_)
274  event_pass = false;
275  if (pair_dzs[0] < pair1_dzMin_ || pair_dzs[0] > pair1_dzMax_)
276  event_pass = false;
277 
278  if (!event_pass) {
279  iEvent.put(std::move(L1TrackTripletContainer), OutputDigisName);
280  iEvent.put(std::move(L1TrackTripletWordContainer), OutputWordName);
281  return;
282  }
283  float tripletPx = (pion1 + pion2 + pion3).Pt() * cos((pion1 + pion2 + pion3).Phi());
284  float tripletPy = (pion1 + pion2 + pion3).Pt() * sin((pion1 + pion2 + pion3).Phi());
285  float tripletPz = (pion1 + pion2 + pion3).Pt() * sinh((pion1 + pion2 + pion3).Eta());
286  float tripletE =
287  sqrt(tripletPx * tripletPx + tripletPy * tripletPy + tripletPz * tripletPz + triplet_mass * triplet_mass);
288  TkTriplet trkTriplet(math::XYZTLorentzVector(tripletPx, tripletPy, tripletPz, tripletE),
289  triplet_charge,
290  pair_masses[0],
291  pair_masses[2],
292  pair_dzs[0],
293  pair_dzs[2],
294  {edm::Ptr<L1TTTrackType>(TTTrackHandle, trk1.Index),
295  edm::Ptr<L1TTTrackType>(TTTrackHandle, trk2.Index),
296  edm::Ptr<L1TTTrackType>(TTTrackHandle, trk3.Index)});
297  L1TrackTripletContainer->push_back(trkTriplet);
298 
299  iEvent.put(std::move(L1TrackTripletContainer), OutputDigisName);
300 
301  // bit assignment
303  l1t::TkTripletWord::pt_t bitPt = pt_intern((pion1 + pion2 + pion3).Pt());
305  DoubleToBit((pion1 + pion2 + pion3).Eta(),
306  TkTripletWord::TkTripletBitWidths::kGlbEtaSize,
307  TkTripletWord::MAX_ETA / (1 << TkTripletWord::TkTripletBitWidths::kGlbEtaSize));
309  DoubleToBit((pion1 + pion2 + pion3).Phi(),
310  TkTripletWord::TkTripletBitWidths::kGlbPhiSize,
311  (2. * std::abs(M_PI)) / (1 << TkTripletWord::TkTripletBitWidths::kGlbPhiSize));
312  l1t::TkTripletWord::charge_t bitCharge =
313  DoubleToBit(double(triplet_charge),
314  TkTripletWord::TkTripletBitWidths::kChargeSize,
315  TkTripletWord::MAX_CHARGE / (1 << TkTripletWord::TkTripletBitWidths::kChargeSize));
317  DoubleToBit((pion1 + pion2 + pion3).M(),
318  TkTripletWord::TkTripletBitWidths::kMassSize,
319  TkTripletWord::MAX_MASS / (1 << TkTripletWord::TkTripletBitWidths::kMassSize));
320  l1t::TkTripletWord::ditrack_minmass_t bitDiTrackMinMass =
321  DoubleToBit(pair_masses[2],
322  TkTripletWord::TkTripletBitWidths::kDiTrackMinMassSize,
323  TkTripletWord::MAX_MASS / (1 << TkTripletWord::TkTripletBitWidths::kDiTrackMinMassSize));
324  l1t::TkTripletWord::ditrack_maxmass_t bitDiTrackMaxMass =
325  DoubleToBit(pair_masses[0],
326  TkTripletWord::TkTripletBitWidths::kDiTrackMaxMassSize,
327  TkTripletWord::MAX_MASS / (1 << TkTripletWord::TkTripletBitWidths::kDiTrackMaxMassSize));
328 
329  l1t::TkTripletWord::ditrack_minz0_t bitDiTrackMinZ0 =
330  DoubleToBit(pair_dzs[2],
331  TkTripletWord::TkTripletBitWidths::kDiTrackMinZ0Size,
332  TkTripletWord::MAX_Z0 / (1 << TkTripletWord::TkTripletBitWidths::kDiTrackMinZ0Size));
333  l1t::TkTripletWord::ditrack_maxz0_t bitDiTrackMaxZ0 =
334  DoubleToBit(pair_dzs[0],
335  TkTripletWord::TkTripletBitWidths::kDiTrackMaxZ0Size,
336  TkTripletWord::MAX_Z0 / (1 << TkTripletWord::TkTripletBitWidths::kDiTrackMaxZ0Size));
337 
338  l1t::TkTripletWord::unassigned_t unassigned = 0;
339  l1t::TkTripletWord bitTriplet(val,
340  bitPt,
341  bitEta,
342  bitPhi,
343  bitMass,
344  bitCharge,
345  bitDiTrackMinZ0,
346  bitDiTrackMaxMass,
347  bitDiTrackMinZ0,
348  bitDiTrackMaxZ0,
349  unassigned);
350 
351  L1TrackTripletWordContainer->push_back(bitTriplet);
352 
353  iEvent.put(std::move(L1TrackTripletWordContainer), OutputWordName);
354 }
355 
357  double PVz,
358  double pt_min_cut,
359  double eta_max_cut,
360  double mva_min_cut,
361  double dz_max_cut,
362  int nstub_min_cut) {
363  return (track.Pt >= pt_min_cut) && (fabs(track.Eta) <= eta_max_cut) && (track.MVA >= mva_min_cut) &&
364  (fabs(track.Z0 - PVz) <= dz_max_cut) && (track.Nstubs >= nstub_min_cut);
365 }
366 
368  ap_uint<TTTrack_TrackWord::TrackBitWidths::kRinvSize - 1> ptBits = track.getRinvWord();
369  pt_intern digipt;
370  digipt.V = ptBits.range();
371  return (double)digipt;
372 }
373 
375  TTTrack_TrackWord::tanl_t etaBits = track.getTanlWord();
376  glbeta_intern digieta;
377  digieta.V = etaBits.range();
378  return (double)digieta;
379 }
380 
382  int Sector = track.phiSector();
383  double sector_phi_value = 0;
384  if (Sector < 5) {
385  sector_phi_value = 2.0 * M_PI * Sector / 9.0;
386  } else {
387  sector_phi_value = (-1.0 * M_PI + M_PI / 9.0 + (Sector - 5) * 2.0 * M_PI / 9.0);
388  }
389  glbphi_intern trkphiSector = DoubleToBit(
390  sector_phi_value, TTTrack_TrackWord::TrackBitWidths::kPhiSize + kExtraGlobalPhiBit, TTTrack_TrackWord::stepPhi0);
391  glbphi_intern local_phiBits = 0;
392  local_phiBits.V = track.getPhiWord();
393 
394  glbphi_intern local_phi =
395  DoubleToBit(BitToDouble(local_phiBits, TTTrack_TrackWord::TrackBitWidths::kPhiSize, TTTrack_TrackWord::stepPhi0),
396  TTTrack_TrackWord::TrackBitWidths::kPhiSize + kExtraGlobalPhiBit,
398  glbphi_intern digiphi = local_phi + trkphiSector;
399  return BitToDouble(
400  digiphi, TTTrack_TrackWord::TrackBitWidths::kPhiSize + kExtraGlobalPhiBit, TTTrack_TrackWord::stepPhi0);
401 }
402 
404  z0_intern trkZ = track.getZ0Word();
405  return BitToDouble(trkZ, TTTrack_TrackWord::TrackBitWidths::kZ0Size, TTTrack_TrackWord::stepZ0);
406 }
407 
409  //The following says we do not know what parameters are allowed so do no validation
410  // Please change this to state exactly what you do use, even if it is no parameters
412  desc.add<edm::InputTag>("L1TrackInputTag", edm::InputTag("l1tTTTracksFromTrackletEmulation", "Level1TTTracks"));
413  desc.add<edm::InputTag>("L1PVertexInputTag", edm::InputTag("l1tVertexFinderEmulator", "L1VerticesEmulation"));
414  desc.add<double>("trk1_ptMin", -1.0);
415  desc.add<double>("trk1_absEtaMax", 10e7);
416  desc.add<double>("trk1_mvaMin", -1.0);
417  desc.add<int>("trk1_nstubMin", -1);
418  desc.add<double>("trk1_dzMax", 10e7);
419  desc.add<double>("trk1_mass", 0.139);
420  desc.add<double>("trk2_ptMin", -1.0);
421  desc.add<double>("trk2_absEtaMax", 10e7);
422  desc.add<double>("trk2_mvaMin", -1.0);
423  desc.add<int>("trk2_nstubMin", -1);
424  desc.add<double>("trk2_dzMax", 10e7);
425  desc.add<double>("trk2_mass", 0.139);
426  desc.add<double>("trk3_ptMin", -1.0);
427  desc.add<double>("trk3_absEtaMax", 10e7);
428  desc.add<double>("trk3_mvaMin", -1.0);
429  desc.add<int>("trk3_nstubMin", 0);
430  desc.add<double>("trk3_dzMax", 10e7);
431  desc.add<double>("trk3_mass", 0.139);
432  desc.add<bool>("displaced", false);
433  desc.add<double>("triplet_massMin", -1.0);
434  desc.add<double>("triplet_massMax", 10e7);
435  desc.add<double>("triplet_absEtaMin", -1.0);
436  desc.add<double>("triplet_absEtaMax", 10e7);
437  desc.add<double>("triplet_ptMin", -1.0);
438  desc.add<double>("triplet_ptMax", 10e7);
439  desc.add<int>("triplet_absCharge", -1);
440  desc.add<double>("triplet_massOverflow", 1000);
441  desc.add<double>("pair1_massMin", -1);
442  desc.add<double>("pair1_massMax", 10e7);
443  desc.add<double>("pair2_massMin", -1);
444  desc.add<double>("pair2_massMax", 10e7);
445  desc.add<double>("pair1_dzMin", -1);
446  desc.add<double>("pair1_dzMax", 10e7);
447  desc.add<double>("pair2_dzMin", -1);
448  desc.add<double>("pair2_dzMax", 10e7);
449  desc.add<bool>("float_precision", false);
450  descriptions.add("l1tTrackTripletEmulator", desc);
451 }
452 
453 //define this as a plug-in
bool TrackSelector(L1track &, double, double, double, double, double, int)
ap_int< kChargeSize > charge_t
Definition: TkTripletWord.h:76
ROOT::Math::LorentzVector< ROOT::Math::PtEtaPhiM4D< double > > PtEtaPhiMLorentzVectorD
Lorentz vector with cartesian internal representation.
Definition: LorentzVector.h:10
const unsigned int kExtraGlobalPhiBit
const unsigned int DoubleToBit(double value, unsigned int maxBits, double step)
void produce(Event &, const EventSetup &) override
Sin< T >::type sin(const T &t)
Definition: Sin.h:22
SingleObjectSelector< reco::TrackCollection, StringCutObjectSelector< reco::Track > > TrackSelector
delete x;
Definition: CaloConfig.h:22
ap_int< kGlbEtaSize > glbeta_t
Definition: TkTripletWord.h:73
std::vector< TkTriplet > TkTripletCollection
Definition: TkTripletFwd.h:22
const double BitToDouble(unsigned int bits, unsigned int maxBits, double step)
double FloatPtFromBits(const L1TTTrackType &)
XYZTLorentzVectorD XYZTLorentzVector
Lorentz vector with cylindrical internal representation using pseudorapidity.
Definition: LorentzVector.h:29
double FloatEtaFromBits(const L1TTTrackType &)
int iEvent
Definition: GenABIO.cc:224
TTTrack< Ref_Phase2TrackerDigi_ > L1TTTrackType
ap_int< kMassSize > mass_t
Definition: TkTripletWord.h:75
ap_ufixed< TTTrack_TrackWord::TrackBitWidths::kRinvSize - 1, PT_INTPART_BITS, AP_TRN, AP_SAT > pt_intern
ap_int< kDiTrackMinMassSize > ditrack_minmass_t
Definition: TkTripletWord.h:77
T sqrt(T t)
Definition: SSEVec.h:23
double FloatZ0FromBits(const L1TTTrackType &)
Cos< T >::type cos(const T &t)
Definition: Cos.h:22
ap_uint< TkTripletBitWidths::kUnassignedSize > unassigned_t
Definition: TkTripletWord.h:81
double FloatPhiFromBits(const L1TTTrackType &)
std::vector< l1t::TkTripletWord > TkTripletWordCollection
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
ap_ufixed< TTTrack_TrackWord::TrackBitWidths::kRinvSize - 1, PT_INTPART_BITS, AP_TRN, AP_SAT > pt_intern
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
ap_int< TTTrack_TrackWord::TrackBitWidths::kZ0Size > z0_intern
std::vector< VertexWord > VertexWordCollection
Definition: VertexWord.h:197
std::vector< edm::Ptr< L1TTTrackType > > L1TrkPtrs_
static void fillDescriptions(ConfigurationDescriptions &descriptions)
ap_int< kDiTrackMinZ0Size > ditrack_minz0_t
Definition: TkTripletWord.h:79
ap_int< kGlbPhiSize > glbphi_t
Definition: TkTripletWord.h:74
#define M_PI
edm::RefVector< L1TTTrackCollectionType > L1TTTrackRefCollectionType
const EDGetTokenT< L1TTTrackRefCollectionType > trackToken_
ap_ufixed< kPtSize, kPtMagSize, AP_TRN, AP_SAT > pt_t
Definition: TkTripletWord.h:72
size_type size() const
Size of the RefVector.
Definition: RefVector.h:102
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
Class to store the L1 Track Trigger tracks.
Definition: TTTrack.h:29
double b
Definition: hdecay.h:120
void add(std::string const &label, ParameterSetDescription const &psetDescription)
static constexpr double stepPhi0
ap_int< TTTrack_TrackWord::TrackBitWidths::kPhiSize+kExtraGlobalPhiBit > glbphi_intern
HLT enums.
ap_uint< TrackBitWidths::kTanlSize > tanl_t
ap_int< kDiTrackMaxMassSize > ditrack_maxmass_t
Definition: TkTripletWord.h:78
double a
Definition: hdecay.h:121
ap_int< kDiTrackMaxZ0Size > ditrack_maxz0_t
Definition: TkTripletWord.h:80
const EDGetTokenT< l1t::VertexWordCollection > PVtxToken_
ap_fixed< TTTrack_TrackWord::TrackBitWidths::kTanlSize, ETA_INTPART_BITS, AP_TRN, AP_SAT > glbeta_intern
static constexpr double stepZ0
def move(src, dest)
Definition: eostools.py:511
ap_uint< kValidSize > valid_t
Definition: TkTripletWord.h:71