CMS 3D CMS Logo

Projection.cc
Go to the documentation of this file.
1 
4 
6 #include <algorithm>
7 
8 using namespace std;
9 using namespace trklet;
10 
11 void Projection::init(Settings const& settings,
12  unsigned int layerdisk,
13  int iphiproj,
14  int irzproj,
15  int iphider,
16  int irzder,
17  double phiproj,
18  double rzproj,
19  double phiprojder,
20  double rzprojder,
21  double phiprojapprox,
22  double rzprojapprox,
23  double phiprojderapprox,
24  double rzprojderapprox,
25  bool isPSseed) {
26  assert(layerdisk < N_LAYER + N_DISK);
27 
28  valid_ = true;
29 
30  fpgaphiproj_.set(iphiproj, settings.nphibitsstub(layerdisk), true, __LINE__, __FILE__);
31 
32  if (layerdisk < N_LAYER) {
33  fpgarzproj_.set(irzproj, settings.nzbitsstub(layerdisk), false, __LINE__, __FILE__);
34  } else {
35  fpgarzproj_.set(irzproj, settings.nrbitsstub(layerdisk), false, __LINE__, __FILE__);
36  }
37 
38  if (layerdisk < N_LAYER) {
39  if (layerdisk < N_PSLAYER) {
40  fpgaphiprojder_.set(iphider, settings.nbitsphiprojderL123(), false, __LINE__, __FILE__);
41  fpgarzprojder_.set(irzder, settings.nbitszprojderL123(), false, __LINE__, __FILE__);
42  } else {
43  fpgaphiprojder_.set(iphider, settings.nbitsphiprojderL456(), false, __LINE__, __FILE__);
44  fpgarzprojder_.set(irzder, settings.nbitszprojderL456(), false, __LINE__, __FILE__);
45  }
46  } else {
47  fpgaphiprojder_.set(iphider, settings.nbitsphiprojderL123(), false, __LINE__, __FILE__);
48  fpgarzprojder_.set(irzder, settings.nrbitsprojderdisk(), false, __LINE__, __FILE__);
49  }
50 
51  if (layerdisk < N_LAYER) {
56  int offset = isPSseed ? 1 : 4;
57 
58  int ztemp = fpgarzproj_.value() >> (fpgarzproj_.nbits() - settings.MEBinsBits() - NFINERZBITS);
59  unsigned int zbin1 = (1 << (settings.MEBinsBits() - 1)) + ((ztemp - offset) >> NFINERZBITS);
60  unsigned int zbin2 = (1 << (settings.MEBinsBits() - 1)) + ((ztemp + offset) >> NFINERZBITS);
61 
62  if (zbin1 >= settings.MEBins()) {
63  zbin1 = 0; //note that zbin1 is unsigned
64  }
65  if (zbin2 >= settings.MEBins()) {
66  zbin2 = settings.MEBins() - 1;
67  }
68 
69  assert(zbin1 <= zbin2);
70  assert(zbin2 - zbin1 <= 1);
71 
72  fpgarzbin1projvm_.set(zbin1, settings.MEBinsBits(), true, __LINE__, __FILE__); // first z bin
73 
74  int nextbin = zbin1 != zbin2;
75  fpgarzbin2projvm_.set(nextbin, 1, true, __LINE__, __FILE__); // need to check adjacent z bin?
76 
77  //fine vm z bits. Use 4 bits for fine position. starting at zbin 1
78  int finez = ((1 << (settings.MEBinsBits() + NFINERZBITS - 1)) + ztemp) - (zbin1 << NFINERZBITS);
79 
80  fpgafinerzvm_.set(finez, NFINERZBITS + 1, true, __LINE__, __FILE__); // fine z postions starting at zbin1
81 
82  } else {
83  //TODO the -3 and +3 should be evaluated and efficiency for matching hits checked.
84  //This code should be migrated in the ProjectionRouter
85  double roffset = 3.0;
86  int rbin1 = 8.0 * (irzproj * settings.krprojshiftdisk() - roffset - settings.rmindiskvm()) /
87  (settings.rmaxdisk() - settings.rmindiskvm());
88  int rbin2 = 8.0 * (irzproj * settings.krprojshiftdisk() + roffset - settings.rmindiskvm()) /
89  (settings.rmaxdisk() - settings.rmindiskvm());
90 
91  if (rbin1 < 0) {
92  rbin1 = 0;
93  }
94  rbin2 = clamp(rbin2, 0, 7);
95 
96  assert(rbin1 <= rbin2);
97  assert(rbin2 - rbin1 <= 1);
98 
99  int finer = 64 *
100  ((irzproj * settings.krprojshiftdisk() - settings.rmindiskvm()) -
101  rbin1 * (settings.rmaxdisk() - settings.rmindiskvm()) / 8.0) /
102  (settings.rmaxdisk() - settings.rmindiskvm());
103 
104  finer = clamp(finer, 0, 15);
105 
106  int diff = rbin1 != rbin2;
107  if (irzder < 0)
108  rbin1 += 8;
109 
110  fpgarzbin1projvm_.set(rbin1, 4, true, __LINE__, __FILE__); // first r bin
111  fpgarzbin2projvm_.set(diff, 1, true, __LINE__, __FILE__); // need to check adjacent r bin
112 
113  fpgafinerzvm_.set(finer, 4, true, __LINE__, __FILE__); // fine r postions starting at rbin1
114  }
115 
116  //fine phi bits
117  int projfinephi =
118  (fpgaphiproj_.value() >>
119  (fpgaphiproj_.nbits() - (settings.nbitsallstubs(layerdisk) + settings.nbitsvmme(layerdisk) + NFINEPHIBITS))) &
120  ((1 << NFINEPHIBITS) - 1);
121  fpgafinephivm_.set(projfinephi, NFINEPHIBITS, true, __LINE__, __FILE__); // fine phi postions
122 
123  phiproj_ = phiproj;
124  rzproj_ = rzproj;
125  phiprojder_ = phiprojder;
126  rzprojder_ = rzprojder;
127 
128  phiprojapprox_ = phiprojapprox;
129  rzprojapprox_ = rzprojapprox;
130  phiprojderapprox_ = phiprojderapprox;
131  rzprojderapprox_ = rzprojderapprox;
132 }
Settings.h
trklet::N_PSLAYER
constexpr unsigned int N_PSLAYER
Definition: Settings.h:23
change_name.diff
diff
Definition: change_name.py:13
init
int init
Definition: HydjetWrapper.h:64
trklet::Settings::rmindiskvm
double rmindiskvm() const
Definition: Settings.h:315
MessageLogger.h
trklet::Settings::krprojshiftdisk
double krprojshiftdisk() const
Definition: Settings.h:400
trklet::Settings
Definition: Settings.h:52
trklet::Settings::nbitsallstubs
unsigned int nbitsallstubs(unsigned int layerdisk) const
Definition: Settings.h:106
cms::cuda::assert
assert(be >=bs)
trklet::Settings::nrbitsprojderdisk
unsigned int nrbitsprojderdisk() const
Definition: Settings.h:86
trklet::Settings::nbitszprojderL123
unsigned int nbitszprojderL123() const
Definition: Settings.h:89
trklet::N_DISK
constexpr int N_DISK
Definition: Settings.h:22
trklet::Settings::nrbitsstub
unsigned int nrbitsstub(unsigned int layerdisk) const
Definition: Settings.h:84
sistrip::valid_
static const uint16_t valid_
Definition: Constants.h:17
trklet::Settings::MEBins
unsigned int MEBins() const
Definition: Settings.h:222
trklet::NFINEPHIBITS
constexpr unsigned int NFINEPHIBITS
Definition: Settings.h:34
trklet::Settings::nbitsvmme
unsigned int nbitsvmme(unsigned int layerdisk) const
Definition: Settings.h:103
trklet::N_LAYER
constexpr int N_LAYER
Definition: Settings.h:21
trklet::Settings::nbitszprojderL456
unsigned int nbitszprojderL456() const
Definition: Settings.h:90
trklet::Settings::rmaxdisk
double rmaxdisk() const
Definition: Settings.h:125
trklet::Settings::nbitsphiprojderL456
unsigned int nbitsphiprojderL456() const
Definition: Settings.h:88
trklet::Settings::nzbitsstub
unsigned int nzbitsstub(unsigned int layerdisk) const
Definition: Settings.h:82
trklet::Settings::nphibitsstub
unsigned int nphibitsstub(unsigned int layerdisk) const
Definition: Settings.h:83
trklet
Definition: AllInnerStubsMemory.h:10
std
Definition: JetResolutionObject.h:76
trklet::NFINERZBITS
constexpr unsigned int NFINERZBITS
Definition: Settings.h:33
trklet::Settings::MEBinsBits
unsigned int MEBinsBits() const
Definition: Settings.h:221
Projection.h
trklet::Settings::nbitsphiprojderL123
unsigned int nbitsphiprojderL123() const
Definition: Settings.h:87
hltrates_dqm_sourceclient-live_cfg.offset
offset
Definition: hltrates_dqm_sourceclient-live_cfg.py:82