204 for (
int iHit = 0; iHit <
m_segmentHits.getEntries(); iHit++) {
210 if (iSL % 2)
continue;
218 if (iSL == 0)nhitpattern = 15;
219 else nhitpattern = 11;
220 for (
int i = 0; i < nhitpattern; i++) {
221 if ((hitpattern & (1 << i)) != 0) {
223 if (iSL != 0 && i == 0) phi = phi - 1;
224 else if (iSL != 0 && i == 1) phi = phi + 0;
225 else if (iSL != 0 && i == 2) phi = phi + 1;
226 else if (iSL != 0 && i == 3) phi = phi - 0.5;
227 else if (iSL != 0 && i == 4) phi = phi + 0.5;
228 else if (iSL != 0 && i == 5) phi = phi + 0;
229 else if (iSL != 0 && i == 6) phi = phi - 0.5;
230 else if (iSL != 0 && i == 7) phi = phi + 0.5;
231 else if (iSL != 0 && i == 8) phi = phi - 1;
232 else if (iSL != 0 && i == 9) phi = phi + 0;
233 else if (iSL != 0 && i == 10) phi = phi + 1;
234 else if (iSL == 0 && i == 0) phi = phi + 0;
235 else if (iSL == 0 && i == 1) phi = phi - 0.5;
236 else if (iSL == 0 && i == 2) phi = phi + 0.5;
237 else if (iSL == 0 && i == 3) phi = phi - 1;
238 else if (iSL == 0 && i == 4) phi = phi + 0;
239 else if (iSL == 0 && i == 5) phi = phi + 1;
240 else if (iSL == 0 && i == 6) phi = phi - 1.5;
241 else if (iSL == 0 && i == 7) phi = phi - 0.5;
242 else if (iSL == 0 && i == 8) phi = phi + 0.5;
243 else if (iSL == 0 && i == 9) phi = phi + 1.5;
244 else if (iSL == 0 && i == 10) phi = phi - 2;
245 else if (iSL == 0 && i == 11) phi = phi - 1;
246 else if (iSL == 0 && i == 12) phi = phi + 0;
247 else if (iSL == 0 && i == 13) phi = phi + 1;
248 else if (iSL == 0 && i == 14) phi = phi + 2;
251 if (iSL != 0 && i == 0) iLayer = 0;
252 else if (iSL != 0 && i == 1) iLayer = 0;
253 else if (iSL != 0 && i == 2) iLayer = 0;
254 else if (iSL != 0 && i == 3) iLayer = 1;
255 else if (iSL != 0 && i == 4) iLayer = 1;
256 else if (iSL != 0 && i == 5) iLayer = 2;
257 else if (iSL != 0 && i == 6) iLayer = 3;
258 else if (iSL != 0 && i == 7) iLayer = 3;
259 else if (iSL != 0 && i == 8) iLayer = 4;
260 else if (iSL != 0 && i == 9) iLayer = 4;
261 else if (iSL != 0 && i == 10) iLayer = 4;
262 else if (iSL == 0 && i == 0) iLayer = 0;
263 else if (iSL == 0 && i == 1) iLayer = 1;
264 else if (iSL == 0 && i == 2) iLayer = 1;
265 else if (iSL == 0 && i == 3) iLayer = 2;
266 else if (iSL == 0 && i == 4) iLayer = 2;
267 else if (iSL == 0 && i == 5) iLayer = 2;
268 else if (iSL == 0 && i == 6) iLayer = 3;
269 else if (iSL == 0 && i == 7) iLayer = 3;
270 else if (iSL == 0 && i == 8) iLayer = 3;
271 else if (iSL == 0 && i == 9) iLayer = 3;
272 else if (iSL == 0 && i == 10) iLayer = 4;
273 else if (iSL == 0 && i == 11) iLayer = 4;
274 else if (iSL == 0 && i == 12) iLayer = 4;
275 else if (iSL == 0 && i == 13) iLayer = 4;
276 else if (iSL == 0 && i == 14) iLayer = 4;
278 double r =
radius[iSL][iLayer];
279 ROOT::Math::XYVector pos(cos(phi) / r, sin(phi) / r);
280 hitMap.insert(std::make_pair(iHit * 15 + i, std::make_pair(iSL * 5 + iLayer, pos)));
286 phi += 0.5 * (((
m_segmentHits[iHit]->getPriorityPosition() >> 1) & 1)
292 ROOT::Math::XYVector pos(cos(phi) / r, sin(phi) / r);
293 hitMap.insert(std::make_pair(iHit, std::make_pair(iSL, pos)));
314 B2DEBUG(50,
"extending Hough plane to " <<
maxIterations <<
" iterations, "
315 <<
nCells <<
" cells: phi in ["
316 << -rectX * 180. / M_PI <<
", " << rectX * 180. / M_PI
317 <<
"] deg, 1/r in [" << -rectY +
shiftR <<
", " << rectY +
shiftR <<
"] /cm");
334 typedef pair<int, cdcPair> cdcHitPair;
336 typedef vector<cdcHitPair> cdcSeqMap;
340 seqHitMap.push_back(hit);
342 sort(seqHitMap.begin(), seqHitMap.end(), [
this](cdcHitPair i, cdcHitPair j) {
343 return m_segmentHits[i.first]->foundTime() < m_segmentHits[j.first]->foundTime();
345 auto seqHitItr = seqHitMap.begin();
347 vector<bool> layerHit(CDC_SUPER_LAYERS,
false);
350 short firstTick =
m_segmentHits[(*seqHitMap.begin()).first]->foundTime() / period + 1;
351 short lastTick =
m_segmentHits[(*(seqHitMap.end() - 1)).first]->foundTime() / period + 1;
353 for (
auto tick = firstTick * period; tick < lastTick * period; tick += period) {
355 for (
auto itr = seqHitItr; itr < seqHitMap.end(); ++itr) {
356 cdcHitPair currentHit = *itr;
358 if (count(layerHit.begin(), layerHit.end(),
true) >=
m_minHits &&
363 layerHit[
m_segmentHits[currentHit.first]->getISuperLayer()] =
true;
365 copy_n(seqHitItr, nHitInCycle, inserter(fastHitMap, fastHitMap.end()));
367 B2DEBUG(20,
"at tick " << tick <<
", number of candidates: " <<
houghCand.size());
369 B2DEBUG(10,
"found a track at clock " << tick <<
" with "
370 << fastHitMap.size() <<
"hits");
373 advance(seqHitItr, nHitInCycle);
379 B2DEBUG(10,
"found a track with " <<
hitMap.size() <<
"hits");
391 for (
int i = 0; i <
m_tracks.getEntries(); ++i) {
394 testFile << round(2 * ix) / 2. <<
" " << round(2 * iy) / 2. <<
" "
395 <<
m_tracks[i]->getChargeSign() << endl;
399 for (
unsigned ihit = 0; ihit < hits.size(); ++ihit) {
400 unsigned short iSL = hits[ihit]->getISuperLayer();
402 << hits[ihit]->getPriorityPosition() <<
" "
403 << hits.weight(ihit) << endl;