38 theCategory =
"TSGForRoadSearch|TrackerSeedGenerator";
90 std::vector<TrajectorySeed> &
result) {
122 if (fts.position().mag() == 0 && fts.momentum().mag() == 0) {
149 if (!
inner.isValid()) {
158 double z =
inner.globalPosition().z();
166 if (fabs(
z) < ptidc.front()->surface().position().z()) {
167 inLayer = blc.front();
168 }
else if (fabs(
z) < ptecc.front()->surface().position().z()) {
169 inLayer = (
z < 0) ? ntidc.front() : ptidc.front();
171 inLayer = (
z < 0) ? ntecc.front() : ptecc.front();
175 std::vector<DetLayer::DetWithState> compatible;
176 compatible.reserve(10);
181 while (compatible.empty()) {
191 inLayer = (
z < 0) ? ntidc.front() : ptidc.front();
194 inLayer = (
z < 0) ? ntecc.front() : ptecc.front();
235 if (!
outer.isValid()) {
244 double z =
outer.globalPosition().z();
250 <<
"TEC1 z: " << ptecc.front()->surface().position().z();
252 unsigned int layerShift = 0;
254 if (fabs(
z) < ptecc.front()->surface().position().z()) {
255 inLayer = *(blc.rbegin() + layerShift);
258 unsigned int tecIt = 1;
259 for (; tecIt != ptecc.size(); tecIt++) {
261 <<
"z: " << ptecc[tecIt]->surface().position().z();
262 if (fabs(
z) < ptecc[tecIt]->surface().
position().
z()) {
263 inLayer = (
z < 0) ? ntecc[tecIt - 1] : ptecc[tecIt - 1];
264 layerShift = tecIt - 1;
271 inLayer = (
z < 0) ? ntecc.back() : ptecc.back();
277 std::vector<DetLayer::DetWithState> compatible;
278 compatible.reserve(10);
283 while (compatible.empty()) {
291 if (layerShift >= blc.size()) {
292 LogDebug(
theCategory) <<
"all barrel layers are exhausted to find starting state. no seed,";
295 inLayer = *(blc.rbegin() + layerShift);
298 if (layerShift == 0) {
299 LogDebug(
theCategory) <<
"failed to get a compatible module on a TEC layer, using the last TOB layer.";
300 inLayer = *(blc.rbegin() + layerShift);
304 inLayer = (
z < 0) ? ntecc[layerShift] : ptecc[layerShift];
339 if (!
inner.isValid()) {
348 double z =
inner.globalPosition().z();
357 if ((ppxlc.empty() || npxlc.empty()) && (ptidc.empty() || ptecc.empty())) {
364 std::vector<const ForwardDetLayer *>::const_iterator layerIt;
369 if (fz < fabs(((
z > 0) ? ppxlc : npxlc).front()->surface().
position().
z())) {
370 inLayer = blc.front();
371 }
else if (fz < fabs(((
z > 0) ? ppxlc : npxlc).back()->surface().
position().
z())) {
372 layerIt = ((
z > 0) ? ppxlc : npxlc).begin();
374 }
else if (fz < fabs(((
z > 0) ? ptidc : ntidc).front()->surface().
position().
z())) {
375 layerIt = ((
z > 0) ? ppxlc : npxlc).end() - 1;
377 }
else if (fz < fabs(((
z > 0) ? ptecc : ntecc).front()->surface().
position().
z())) {
378 layerIt = ((
z > 0) ? ptidc : ntidc).begin();
380 }
else if (fz < fabs(((
z > 0) ? ptecc : ntecc).back()->surface().
position().
z())) {
381 layerIt = ((
z > 0) ? ptecc : ntecc).begin();
389 std::vector<DetLayer::DetWithState> compatible;
390 compatible.reserve(10);
395 if (compatible.empty()) {
396 std::vector<const ForwardDetLayer *>::const_iterator pxlEnd = (
z > 0) ? ppxlc.end() : npxlc.end();
397 std::vector<const ForwardDetLayer *>::const_iterator tidEnd = (
z > 0) ? ptidc.end() : ntidc.end();
398 std::vector<const ForwardDetLayer *>::const_iterator tecEnd = (
z > 0) ? ptecc.end() : ntecc.end();
399 std::vector<const ForwardDetLayer *>::const_iterator pxlBegin = (
z > 0) ? ppxlc.begin() : npxlc.begin();
400 std::vector<const ForwardDetLayer *>::const_iterator tidBegin = (
z > 0) ? ptidc.begin() : ntidc.begin();
401 std::vector<const ForwardDetLayer *>::const_iterator tecBegin = (
z > 0) ? ptecc.begin() : ntecc.begin();
404 if (!dynamic_cast<const ForwardDetLayer *>(inLayer))
405 layerIt = pxlBegin--;
407 while (compatible.empty()) {
412 if (layerIt == pxlEnd)
419 if (layerIt == tidEnd)
425 if (layerIt == tecEnd) {
433 <<
"this should not happen... ever. Please report. GeomDetEnumerators::PixelBarrel. no seed.";
438 <<
"this should not happen... ever. Please report. GeomDetEnumerators::TIB. no seed.";
443 <<
"this should not happen... ever. Please report. GeomDetEnumerators::TOB. no seed.";
452 (*layerIt)->compatibleDetsV(
466 std::vector<DetLayer::DetWithState> &compatible,
468 std::vector<TrajectorySeed> &
result)
const {
469 if (compatible.empty()) {
476 for (std::vector<DetLayer::DetWithState>::iterator DWSit = compatible.begin(); DWSit != compatible.end(); ++DWSit) {
477 bool aBareTS =
false;
478 const GeomDet *gd = DWSit->first;
488 for (std::vector<TrajectoryMeasurement>::iterator Mit =
tmp.begin(); Mit !=
tmp.end(); ++Mit) {
500 if (
hit->isValid()) {
534 compatible.front().second, compatible.front().first->geographicalId().rawId());
536 << compatible.front().second
537 <<
"on detector: " << compatible.front().first->geographicalId().rawId();