16 m_r1 = m_layer.m_refCoord;
17 m_r2 = m_layer.m_refCoord;
18 m_z1 = m_layer.m_minBound;
19 m_z2 = m_layer.m_maxBound;
22 m_r1 = m_layer.m_minBound;
23 m_r2 = m_layer.m_maxBound;
24 m_z1 = m_layer.m_refCoord;
25 m_z2 = m_layer.m_refCoord;
29 float eta1 = -std::log(std::sqrt(1+t1*t1)-t1);
33 float eta2 = -std::log(std::sqrt(1+t2*t2)-t2);
48 int binCounter = bin0;
52 m_bins.push_back(binCounter++);
54 if(m_layer.m_type == 0) {
55 m_minRadius.push_back(m_layer.m_refCoord - 2.0);
56 m_maxRadius.push_back(m_layer.m_refCoord + 2.0);
57 m_minBinCoord.push_back(m_layer.m_minBound);
58 m_maxBinCoord.push_back(m_layer.m_maxBound);
61 m_minRadius.push_back(m_layer.m_minBound - 2.0);
62 m_maxRadius.push_back(m_layer.m_maxBound + 2.0);
63 m_minBinCoord.push_back(m_layer.m_minBound);
64 m_maxBinCoord.push_back(m_layer.m_maxBound);
68 float nB =
static_cast<int>(deltaEta/m_etaBinWidth);
70 if(deltaEta - m_etaBinWidth*nB > 0.5*m_etaBinWidth) m_nBins++;
72 m_etaBin = deltaEta/m_nBins;
75 m_bins.push_back(binCounter++);
76 if(m_layer.m_type == 0) {
77 m_minRadius.push_back(m_layer.m_refCoord - 2.0);
78 m_maxRadius.push_back(m_layer.m_refCoord + 2.0);
79 m_minBinCoord.push_back(m_layer.m_minBound);
80 m_maxBinCoord.push_back(m_layer.m_maxBound);
83 m_minRadius.push_back(m_layer.m_minBound - 2.0);
84 m_maxRadius.push_back(m_layer.m_maxBound + 2.0);
85 m_minBinCoord.push_back(m_layer.m_minBound);
86 m_maxBinCoord.push_back(m_layer.m_maxBound);
91 float eta = m_minEta+0.5*m_etaBin;
93 for(
int i=1;
i<=m_nBins;
i++) {
95 m_bins.push_back(binCounter++);
97 float e1 =
eta - 0.5*m_etaBin;
98 float e2 =
eta + 0.5*m_etaBin;
100 if(m_layer.m_type == 0) {
101 m_minRadius.push_back(m_layer.m_refCoord - 2.0);
102 m_maxRadius.push_back(m_layer.m_refCoord + 2.0);
103 float z1 = m_layer.m_refCoord*std::sinh(e1);
104 m_minBinCoord.push_back(z1);
105 float z2 = m_layer.m_refCoord*std::sinh(e2);
106 m_maxBinCoord.push_back(z2);
109 float r = m_layer.m_refCoord/std::sinh(e1);
110 m_minBinCoord.push_back(
r);
111 m_minRadius.push_back(
r - 2.0);
112 r = m_layer.m_refCoord/std::sinh(e2);
113 m_maxBinCoord.push_back(
r);
114 m_maxRadius.push_back(
r + 2.0);
132 const float tol = 5.0;
139 float A = r2/(r2-r1);
140 float B = r1/(r2-r1);
142 float z0_min = z1min*
A - max_b2*B;
143 float z0_max = z1max*
A - min_b2*B;
145 if(z0_max < min_z0-tol || z0_min > max_z0+tol)
return false;
152 const float tol = 10.0;
158 if(r2max <= r1)
return false;
168 z0_max = (z1max*r2max - z2*r1)/(r2max-r1);
169 z0_min = (z1min*r2min - z2*r1)/(r2min-r1);
172 z0_max = (z1max*r2min - z2*r1)/(r2min-r1);
173 z0_min = (z1min*r2max - z2*r1)/(r2max-r1);
176 if(z0_max < min_z0-tol || z0_min > max_z0+tol)
return false;
221 const float min_z0 = -168.0;
222 const float max_z0 = 168.0;
226 for(
const auto& layer : layers) {
236 for(std::map<
int, std::vector<GNNR3_FASTRACK_CONNECTION*> >
::const_iterator it = conn->m_connMap.begin();it!=conn->m_connMap.end();++it) {
238 const std::vector<GNNR3_FASTRACK_CONNECTION*>& vConn = (*it).second;
240 for(std::vector<GNNR3_FASTRACK_CONNECTION*>::const_iterator cIt=vConn.begin();cIt!=vConn.end();++cIt) {
242 unsigned int src = (*cIt)->m_src;
243 unsigned int dst = (*cIt)->m_dst;
245 const TrigFTF_GNNR3_Layer* pL1 = getTrigFTF_GNNR3_LayerByKey(dst);
246 const TrigFTF_GNNR3_Layer* pL2 = getTrigFTF_GNNR3_LayerByKey(src);
249 std::cout <<
" skipping invalid dst layer " << dst << std::endl;
253 std::cout <<
" skipping invalid src layer " << src << std::endl;
256 int nSrcBins = pL2->m_bins.size();
257 int nDstBins = pL1->m_bins.size();
259 (*cIt)->m_binTable.resize(nSrcBins*nDstBins, 0);
261 for(int b1=0;b1<nDstBins;b1++) {
262 for(int b2=0;b2<nSrcBins;b2++) {
263 if(!pL1->verifyBin(pL2, b1, b2, min_z0, max_z0)) continue;
264 int address = b1 + b2*nDstBins;
265 (*cIt)->m_binTable.at(address) = 1;
267 int bin1_idx = pL1->m_bins.at(b1);
268 int bin2_idx = pL2->m_bins.at(b2);
270 if(bin1_idx != lastBin1) {
272 std::vector<int> v2(1, bin2_idx);
273 m_binGroups.push_back(std::make_pair(bin1_idx, v2));
278 (*m_binGroups.rbegin()).second.push_back(bin2_idx);