CMS 3D CMS Logo

List of all members | Classes | Public Member Functions | Private Member Functions | Private Attributes
L1TMuonBarrelKalmanSectorProcessor Class Reference

#include <L1TMuonBarrelKalmanSectorProcessor.h>

Classes

struct  bmtf_out
 
class  TrackSorter
 

Public Member Functions

 L1TMuonBarrelKalmanSectorProcessor (const edm::ParameterSet &, int sector)
 
L1MuKBMTrackCollection process (L1TMuonBarrelKalmanAlgo *, const L1MuKBMTCombinedStubRefVector &stubs, int bx)
 
void verbose (L1TMuonBarrelKalmanAlgo *, const L1MuKBMTrackCollection &)
 
 ~L1TMuonBarrelKalmanSectorProcessor ()
 

Private Member Functions

L1MuKBMTrackCollection cleanNeighbor (const L1MuKBMTrackCollection &, const L1MuKBMTrackCollection &)
 
L1MuKBMTrackCollection cleanNeighbors (const L1MuKBMTrackCollection &, const L1MuKBMTrackCollection &, const L1MuKBMTrackCollection &)
 
bmtf_out makeWord (L1TMuonBarrelKalmanAlgo *, const L1MuKBMTrackCollection &)
 
L1MuKBMTrackCollection wedgeSort (const L1MuKBMTrackCollection &, const L1MuKBMTrackCollection &, const L1MuKBMTrackCollection &, const L1MuKBMTrackCollection &, const L1MuKBMTrackCollection &)
 

Private Attributes

std::vector< L1TMuonBarrelKalmanRegionModuleregions_
 
int sector_
 
int verbose_
 

Detailed Description

Definition at line 10 of file L1TMuonBarrelKalmanSectorProcessor.h.

Constructor & Destructor Documentation

◆ L1TMuonBarrelKalmanSectorProcessor()

L1TMuonBarrelKalmanSectorProcessor::L1TMuonBarrelKalmanSectorProcessor ( const edm::ParameterSet iConfig,
int  sector 
)

◆ ~L1TMuonBarrelKalmanSectorProcessor()

L1TMuonBarrelKalmanSectorProcessor::~L1TMuonBarrelKalmanSectorProcessor ( )

Definition at line 11 of file L1TMuonBarrelKalmanSectorProcessor.cc.

11 {}

Member Function Documentation

◆ cleanNeighbor()

L1MuKBMTrackCollection L1TMuonBarrelKalmanSectorProcessor::cleanNeighbor ( const L1MuKBMTrackCollection coll1,
const L1MuKBMTrackCollection coll2 
)
private

Definition at line 221 of file L1TMuonBarrelKalmanSectorProcessor.cc.

References runTheMatrix::keep, MillePedeFileConverter_cfg::out, and groupFilesInBlocks::temp.

Referenced by wedgeSort().

222  {
224 
225  for (const auto& track1 : coll1) {
226  /*
227  if (verbose_)
228  printf(
229  "Pre Track charge=%d pt=%f eta=%f phi=%f curvature=%d curvature STA =%d stubs=%d bitmask=%d rank=%d chi=%d "
230  "pts=%f %f\n",
231  track1.charge(),
232  track1.pt(),
233  track1.eta(),
234  track1.phi(),
235  track1.curvatureAtVertex(),
236  track1.curvatureAtMuon(),
237  int(track1.stubs().size()),
238  track1.hitPattern(),
239  track1.rank(),
240  track1.approxChi2(),
241  track1.pt(),
242  track1.ptUnconstrained());
243  */
244  bool keep = true;
245  for (const auto& track2 : coll2) {
246  if (!track1.overlapTrack(track2))
247  continue;
248 
249  if (track1.rank() < track2.rank())
250  keep = false;
251 
252  if ((track1.rank() == track2.rank()) && (fabs(track1.stubs()[0]->whNum()) < fabs(track2.stubs()[0]->whNum())))
253  keep = false;
254  }
255  if (keep)
256  out.push_back(track1);
257  else {
258  L1MuKBMTrack temp = track1;
259  temp.setPtEtaPhi(0, 0, 0);
260  temp.setRank(0);
261  out.push_back(temp);
262  }
263  }
264 
265  return out;
266 }
std::vector< L1MuKBMTrack > L1MuKBMTrackCollection
Definition: L1MuKBMTrack.h:15

◆ cleanNeighbors()

L1MuKBMTrackCollection L1TMuonBarrelKalmanSectorProcessor::cleanNeighbors ( const L1MuKBMTrackCollection coll1,
const L1MuKBMTrackCollection coll2,
const L1MuKBMTrackCollection coll3 
)
private

Definition at line 268 of file L1TMuonBarrelKalmanSectorProcessor.cc.

References runTheMatrix::keep, MillePedeFileConverter_cfg::out, and groupFilesInBlocks::temp.

Referenced by wedgeSort().

270  {
272 
273  for (const auto& track1 : coll1) {
274  // if (verbose_)
275  // printf("Pre Track charge=%d pt=%f eta=%f phi=%f curvature=%d curvature STA =%d stubs=%d bitmask=%d rank=%d chi=%d pts=%f %f\n",track1.charge(),track1.pt(),track1.eta(),track1.phi(),track1.curvatureAtVertex(),track1.curvatureAtMuon(),int(track1.stubs().size()),track1.hitPattern(),track1.rank(),track1.approxChi2(),track1.pt(),track1.ptUnconstrained());
276 
277  bool keep = true;
278  for (const auto& track2 : coll2) {
279  if (!track1.overlapTrack(track2))
280  continue;
281 
282  if (track1.rank() < track2.rank())
283  keep = false;
284 
285  if ((track1.rank() == track2.rank()) && (fabs(track1.stubs()[0]->whNum()) < fabs(track2.stubs()[0]->whNum())))
286  keep = false;
287  }
288 
289  for (const auto& track2 : coll3) {
290  if (!track1.overlapTrack(track2))
291  continue;
292 
293  if (track1.rank() < track2.rank())
294  keep = false;
295 
296  if ((track1.rank() == track2.rank()) && (fabs(track1.stubs()[0]->whNum()) < fabs(track2.stubs()[0]->whNum())))
297  keep = false;
298  }
299 
300  if (keep)
301  out.push_back(track1);
302  else {
303  L1MuKBMTrack temp = track1;
304  temp.setPtEtaPhi(0, 0, 0);
305  temp.setRank(0);
306  out.push_back(temp);
307  }
308  }
309 
310  return out;
311 }
std::vector< L1MuKBMTrack > L1MuKBMTrackCollection
Definition: L1MuKBMTrack.h:15

◆ makeWord()

L1TMuonBarrelKalmanSectorProcessor::bmtf_out L1TMuonBarrelKalmanSectorProcessor::makeWord ( L1TMuonBarrelKalmanAlgo trackMaker,
const L1MuKBMTrackCollection tracks 
)
private

Definition at line 43 of file L1TMuonBarrelKalmanSectorProcessor.cc.

References L1TMuonBarrelKalmanAlgo::convertToBMTF(), l1t::RegionalMuonCand::kStat1, l1t::RegionalMuonCand::kStat2, l1t::RegionalMuonCand::kStat3, l1t::RegionalMuonCand::kStat4, l1t::RegionalMuonCand::kWheelNum, l1t::RegionalMuonCand::kWheelSide, amptDefaultParameters_cff::mu, MillePedeFileConverter_cfg::out, and DiMuonV_cfg::tracks.

Referenced by verbose().

44  {
46  out.pt_1 = 0;
47  out.qual_1 = 0;
48  out.eta_1 = 0;
49  out.HF_1 = 0;
50  out.phi_1 = 0;
51  out.bx0_1 = 0;
52  out.charge_1 = 0;
53  out.chargeValid_1 = 0;
54  out.dxy_1 = 0;
55  out.addr1_1 = 3;
56  out.addr2_1 = 15;
57  out.addr3_1 = 15;
58  out.addr4_1 = 15;
59  out.reserved_1 = 0;
60  out.wheel_1 = 0;
61  out.ptSTA_1 = 0;
62  out.SE_1 = 0;
63 
64  out.pt_2 = 0;
65  out.qual_2 = 0;
66  out.eta_2 = 0;
67  out.HF_2 = 0;
68  out.phi_2 = 0;
69  out.bx0_2 = 0;
70  out.charge_2 = 0;
71  out.chargeValid_2 = 0;
72  out.dxy_2 = 0;
73  out.addr1_2 = 3;
74  out.addr2_2 = 15;
75  out.addr3_2 = 15;
76  out.addr4_2 = 15;
77  out.reserved_2 = 0;
78  out.wheel_2 = 0;
79  out.ptSTA_2 = 0;
80  out.SE_2 = 0;
81 
82  out.pt_3 = 0;
83  out.qual_3 = 0;
84  out.eta_3 = 0;
85  out.HF_3 = 0;
86  out.phi_3 = 0;
87  out.bx0_3 = 0;
88  out.charge_3 = 0;
89  out.chargeValid_3 = 0;
90  out.dxy_3 = 0;
91  out.addr1_3 = 3;
92  out.addr2_3 = 15;
93  out.addr3_3 = 15;
94  out.addr4_3 = 15;
95  out.reserved_3 = 0;
96  out.wheel_3 = 0;
97  out.ptSTA_3 = 0;
98  out.SE_3 = 0;
99 
100  if (!tracks.empty()) {
101  l1t::RegionalMuonCand mu = trackMaker->convertToBMTF(tracks[0]);
102  out.pt_1 = mu.hwPt();
103  out.qual_1 = mu.hwQual();
104  out.eta_1 = mu.hwEta();
105  out.HF_1 = mu.hwHF();
106  out.phi_1 = mu.hwPhi();
107  out.bx0_1 = 0;
108  out.charge_1 = mu.hwSign();
109  out.chargeValid_1 = mu.hwSignValid();
110  out.dxy_1 = mu.hwDXY();
111  out.addr1_1 = mu.trackSubAddress(l1t::RegionalMuonCand::kStat1);
112  out.addr2_1 = mu.trackSubAddress(l1t::RegionalMuonCand::kStat2);
113  out.addr3_1 = mu.trackSubAddress(l1t::RegionalMuonCand::kStat3);
114  out.addr4_1 = mu.trackSubAddress(l1t::RegionalMuonCand::kStat4);
115  out.wheel_1 = mu.trackSubAddress(l1t::RegionalMuonCand::kWheelSide) * (1 << 2) +
116  mu.trackSubAddress(l1t::RegionalMuonCand::kWheelNum);
117  out.ptSTA_1 = mu.hwPtUnconstrained();
118  }
119 
120  if (tracks.size() > 1) {
121  l1t::RegionalMuonCand mu = trackMaker->convertToBMTF(tracks[1]);
122  out.pt_2 = mu.hwPt();
123  out.qual_2 = mu.hwQual();
124  out.eta_2 = mu.hwEta();
125  out.HF_2 = mu.hwHF();
126  out.phi_2 = mu.hwPhi();
127  out.bx0_2 = 0;
128  out.charge_2 = mu.hwSign();
129  out.chargeValid_2 = mu.hwSignValid();
130  out.dxy_2 = mu.hwDXY();
131  out.addr1_2 = mu.trackSubAddress(l1t::RegionalMuonCand::kStat1);
132  out.addr2_2 = mu.trackSubAddress(l1t::RegionalMuonCand::kStat2);
133  out.addr3_2 = mu.trackSubAddress(l1t::RegionalMuonCand::kStat3);
134  out.addr4_2 = mu.trackSubAddress(l1t::RegionalMuonCand::kStat4);
135  out.wheel_2 = mu.trackSubAddress(l1t::RegionalMuonCand::kWheelSide) * (1 << 2) +
136  mu.trackSubAddress(l1t::RegionalMuonCand::kWheelNum);
137 
138  out.ptSTA_2 = mu.hwPtUnconstrained();
139  }
140 
141  if (tracks.size() > 2) {
142  l1t::RegionalMuonCand mu = trackMaker->convertToBMTF(tracks[2]);
143  out.pt_3 = mu.hwPt();
144  out.qual_3 = mu.hwQual();
145  out.eta_3 = mu.hwEta();
146  out.HF_3 = mu.hwHF();
147  out.phi_3 = mu.hwPhi();
148  out.bx0_3 = 0;
149  out.charge_3 = mu.hwSign();
150  out.chargeValid_3 = mu.hwSignValid();
151  out.dxy_3 = mu.hwDXY();
152  out.addr1_3 = mu.trackSubAddress(l1t::RegionalMuonCand::kStat1);
153  out.addr2_3 = mu.trackSubAddress(l1t::RegionalMuonCand::kStat2);
154  out.addr3_3 = mu.trackSubAddress(l1t::RegionalMuonCand::kStat3);
155  out.addr4_3 = mu.trackSubAddress(l1t::RegionalMuonCand::kStat4);
156  out.wheel_3 = mu.trackSubAddress(l1t::RegionalMuonCand::kWheelSide) * (1 << 2) +
157  mu.trackSubAddress(l1t::RegionalMuonCand::kWheelNum);
158  out.ptSTA_3 = mu.hwPtUnconstrained();
159  }
160  return out;
161 }
l1t::RegionalMuonCand convertToBMTF(const L1MuKBMTrack &track)

◆ process()

L1MuKBMTrackCollection L1TMuonBarrelKalmanSectorProcessor::process ( L1TMuonBarrelKalmanAlgo trackMaker,
const L1MuKBMTCombinedStubRefVector stubs,
int  bx 
)

Definition at line 13 of file L1TMuonBarrelKalmanSectorProcessor.cc.

References nano_mu_digi_cff::bx, MillePedeFileConverter_cfg::out, nano_mu_digi_cff::region, regions_, createJobs::tmp, verbose(), verbose_, and wedgeSort().

15  {
16  L1MuKBMTrackCollection tracksM2;
17  L1MuKBMTrackCollection tracksM1;
18  L1MuKBMTrackCollection tracks0;
19  L1MuKBMTrackCollection tracksP1;
20  L1MuKBMTrackCollection tracksP2;
21 
22  for (auto& region : regions_) {
23  L1MuKBMTrackCollection tmp = region.process(trackMaker, stubsAll, bx);
24  if (region.wheel() == -2)
25  tracksM2.insert(tracksM2.end(), tmp.begin(), tmp.end());
26  if (region.wheel() == -1)
27  tracksM1.insert(tracksM1.end(), tmp.begin(), tmp.end());
28  if (region.wheel() == 0)
29  tracks0.insert(tracks0.end(), tmp.begin(), tmp.end());
30  if (region.wheel() == 1)
31  tracksP1.insert(tracksP1.end(), tmp.begin(), tmp.end());
32  if (region.wheel() == 2)
33  tracksP2.insert(tracksP2.end(), tmp.begin(), tmp.end());
34  }
35 
36  L1MuKBMTrackCollection out = wedgeSort(tracksM2, tracksM1, tracks0, tracksP1, tracksP2);
37  if (verbose_ == 1)
38  verbose(trackMaker, out);
39 
40  return out;
41 }
std::vector< L1TMuonBarrelKalmanRegionModule > regions_
void verbose(L1TMuonBarrelKalmanAlgo *, const L1MuKBMTrackCollection &)
std::vector< L1MuKBMTrack > L1MuKBMTrackCollection
Definition: L1MuKBMTrack.h:15
L1MuKBMTrackCollection wedgeSort(const L1MuKBMTrackCollection &, const L1MuKBMTrackCollection &, const L1MuKBMTrackCollection &, const L1MuKBMTrackCollection &, const L1MuKBMTrackCollection &)
tmp
align.sh
Definition: createJobs.py:716

◆ verbose()

void L1TMuonBarrelKalmanSectorProcessor::verbose ( L1TMuonBarrelKalmanAlgo algo,
const L1MuKBMTrackCollection tracks 
)

Definition at line 163 of file L1TMuonBarrelKalmanSectorProcessor.cc.

References gather_cfg::cout, makeWord(), MillePedeFileConverter_cfg::out, sector_, and DiMuonV_cfg::tracks.

Referenced by process().

163  {
165  std::cout << "O " << sector_ << " " << out.pt_1 << " " << out.qual_1 << " " << out.eta_1 << " " << out.HF_1 << " "
166  << out.phi_1 << " " << out.charge_1 << " " << out.chargeValid_1 << " " << out.dxy_1 << " " << out.addr1_1
167  << " " << out.addr2_1 << " " << out.addr3_1 << " " << out.addr4_1 << " " << out.wheel_1 << " "
168  << out.ptSTA_1 << " " << out.pt_2 << " " << out.qual_2 << " " << out.eta_2 << " " << out.HF_2 << " "
169  << out.phi_2 << " " << out.charge_2 << " " << out.chargeValid_2 << " " << out.dxy_2 << " " << out.addr1_2
170  << " " << out.addr2_2 << " " << out.addr3_2 << " " << out.addr4_2 << " " << out.wheel_2 << " "
171  << out.ptSTA_2 << " " << out.pt_3 << " " << out.qual_3 << " " << out.eta_3 << " " << out.HF_3 << " "
172  << out.phi_3 << " " << out.charge_3 << " " << out.chargeValid_3 << " " << out.dxy_3 << " " << out.addr1_3
173  << " " << out.addr2_3 << " " << out.addr3_3 << " " << out.addr4_3 << " " << out.wheel_3 << " "
174  << out.ptSTA_3 << std::endl;
175 }
bmtf_out makeWord(L1TMuonBarrelKalmanAlgo *, const L1MuKBMTrackCollection &)

◆ wedgeSort()

L1MuKBMTrackCollection L1TMuonBarrelKalmanSectorProcessor::wedgeSort ( const L1MuKBMTrackCollection preminus2,
const L1MuKBMTrackCollection preminus1,
const L1MuKBMTrackCollection prezero,
const L1MuKBMTrackCollection preone,
const L1MuKBMTrackCollection pretwo 
)
private

Definition at line 332 of file L1TMuonBarrelKalmanSectorProcessor.cc.

References cleanNeighbor(), cleanNeighbors(), mps_fire::i, MillePedeFileConverter_cfg::out, swap(), parallelization::uint, and SiPixelPI::zero.

Referenced by process().

336  {
337  //first clean
338 
339  L1MuKBMTrackCollection minus2 = cleanNeighbor(preminus2, preminus1);
340  L1MuKBMTrackCollection minus1 = cleanNeighbors(preminus1, preminus2, prezero);
341  L1MuKBMTrackCollection zero = cleanNeighbors(prezero, preminus1, preone);
342  L1MuKBMTrackCollection plus1 = cleanNeighbors(preone, prezero, pretwo);
343  L1MuKBMTrackCollection plus2 = cleanNeighbor(pretwo, preone);
344 
345  std::map<uint, L1MuKBMTrack> trackInfo;
346  std::map<uint, double> ptInfo;
347 
348  for (uint i = 0; i < 10; ++i)
349  ptInfo[i] = 0.0;
350 
351  if (minus2.size() > 1) {
352  ptInfo[0] = minus2[0].pt();
353  trackInfo[0] = minus2[0];
354  ptInfo[1] = minus2[1].pt();
355  trackInfo[1] = minus2[1];
356  } else if (minus2.size() == 1) {
357  if (minus2[0].stubs()[0]->tag()) {
358  ptInfo[1] = minus2[0].pt();
359  trackInfo[1] = minus2[0];
360  } else {
361  ptInfo[0] = minus2[0].pt();
362  trackInfo[0] = minus2[0];
363  }
364  }
365 
366  if (minus1.size() > 1) {
367  ptInfo[2] = minus1[0].pt();
368  trackInfo[2] = minus1[0];
369  ptInfo[3] = minus1[1].pt();
370  trackInfo[3] = minus1[1];
371  } else if (minus1.size() == 1) {
372  if (minus1[0].stubs()[0]->tag()) {
373  ptInfo[3] = minus1[0].pt();
374  trackInfo[3] = minus1[0];
375  } else {
376  ptInfo[2] = minus1[0].pt();
377  trackInfo[2] = minus1[0];
378  }
379  }
380 
381  if (zero.size() > 1) {
382  ptInfo[4] = zero[0].pt();
383  trackInfo[4] = zero[0];
384  ptInfo[5] = zero[1].pt();
385  trackInfo[5] = zero[1];
386  } else if (zero.size() == 1) {
387  if (zero[0].stubs()[0]->tag()) {
388  ptInfo[5] = zero[0].pt();
389  trackInfo[5] = zero[0];
390  } else {
391  ptInfo[4] = zero[0].pt();
392  trackInfo[4] = zero[0];
393  }
394  }
395 
396  if (plus1.size() > 1) {
397  ptInfo[6] = plus1[0].pt();
398  trackInfo[6] = plus1[0];
399  ptInfo[7] = plus1[1].pt();
400  trackInfo[7] = plus1[1];
401  } else if (plus1.size() == 1) {
402  if (plus1[0].stubs()[0]->tag()) {
403  ptInfo[7] = plus1[0].pt();
404  trackInfo[7] = plus1[0];
405  } else {
406  ptInfo[6] = plus1[0].pt();
407  trackInfo[6] = plus1[0];
408  }
409  }
410 
411  if (plus2.size() > 1) {
412  ptInfo[8] = plus2[0].pt();
413  trackInfo[8] = plus2[0];
414  ptInfo[9] = plus2[1].pt();
415  trackInfo[9] = plus2[1];
416  } else if (plus2.size() == 1) {
417  if (plus2[0].stubs()[0]->tag()) {
418  ptInfo[9] = plus2[0].pt();
419  trackInfo[9] = plus2[0];
420  } else {
421  ptInfo[8] = plus2[0].pt();
422  trackInfo[8] = plus2[0];
423  }
424  }
425 
426  //Now my glorious partial bitonic != power of two sorter
427  swap(ptInfo, trackInfo, 0, 5);
428  swap(ptInfo, trackInfo, 1, 6);
429  swap(ptInfo, trackInfo, 2, 7);
430  swap(ptInfo, trackInfo, 3, 8);
431  swap(ptInfo, trackInfo, 4, 9);
432 
433  swap(ptInfo, trackInfo, 0, 3);
434  swap(ptInfo, trackInfo, 1, 4);
435  swap(ptInfo, trackInfo, 5, 8);
436  swap(ptInfo, trackInfo, 6, 9);
437 
438  swap(ptInfo, trackInfo, 0, 2);
439  swap(ptInfo, trackInfo, 3, 6);
440  swap(ptInfo, trackInfo, 7, 9);
441 
442  swap(ptInfo, trackInfo, 0, 1);
443  swap(ptInfo, trackInfo, 2, 4);
444  swap(ptInfo, trackInfo, 5, 7);
445  swap(ptInfo, trackInfo, 8, 9);
446 
447  swap(ptInfo, trackInfo, 1, 2);
448  swap(ptInfo, trackInfo, 3, 5);
449  swap(ptInfo, trackInfo, 4, 6);
450  swap(ptInfo, trackInfo, 7, 8);
451 
452  swap(ptInfo, trackInfo, 1, 3);
453  swap(ptInfo, trackInfo, 2, 5);
454  swap(ptInfo, trackInfo, 4, 7);
455  swap(ptInfo, trackInfo, 6, 8);
456 
457  swap(ptInfo, trackInfo, 2, 3);
458 
460  if (ptInfo[0] != 0.0)
461  out.push_back(trackInfo[0]);
462  if (ptInfo[1] != 0.0)
463  out.push_back(trackInfo[1]);
464  if (ptInfo[2] != 0.0)
465  out.push_back(trackInfo[2]);
466 
467  return out;
468 }
L1MuKBMTrackCollection cleanNeighbors(const L1MuKBMTrackCollection &, const L1MuKBMTrackCollection &, const L1MuKBMTrackCollection &)
void swap(std::map< uint, double > &info, std::map< uint, L1MuKBMTrack > &trackInfo, uint i, uint j)
L1MuKBMTrackCollection cleanNeighbor(const L1MuKBMTrackCollection &, const L1MuKBMTrackCollection &)
std::vector< L1MuKBMTrack > L1MuKBMTrackCollection
Definition: L1MuKBMTrack.h:15

Member Data Documentation

◆ regions_

std::vector<L1TMuonBarrelKalmanRegionModule> L1TMuonBarrelKalmanSectorProcessor::regions_
private

◆ sector_

int L1TMuonBarrelKalmanSectorProcessor::sector_
private

Definition at line 31 of file L1TMuonBarrelKalmanSectorProcessor.h.

Referenced by verbose().

◆ verbose_

int L1TMuonBarrelKalmanSectorProcessor::verbose_
private

Definition at line 30 of file L1TMuonBarrelKalmanSectorProcessor.h.

Referenced by process().