86 if ( mode_ !=
"STANDARD" && mode_ !=
"STRAIGHT-LINE" ) {
90 std::string
tmp = conf.
getParameter<std::string>(
"InnerSeedRecHitAccessMode");
91 if ( tmp ==
"STANDARD" ) {
93 }
else if ( tmp ==
"RPHI" ) {
101 tmp = conf.
getParameter<std::string>(
"OuterSeedRecHitAccessMode");
102 if ( tmp ==
"STANDARD" ) {
104 }
else if ( tmp ==
"RPHI" ) {
175 std::vector<RoadSearchCircleSeed> localCircleSeeds;
180 localCircleSeeds.clear();
186 double r =
std::abs((*seed->first.begin())->getrmax() + (*seed->first.begin())->getrmin())/2.;
187 double z =
std::abs((*seed->first.begin())->getzmax() + (*seed->first.begin())->getzmin())/2.;
193 }
else if ( (eta >= 1.1) && (eta < 1.6) ) {
196 }
else if ( eta >= 1.6 ) {
201 if (
mode_ ==
"STRAIGHT-LINE" ) {
205 for ( std::vector<const Ring*>::const_iterator innerSeedRing = seed->first.begin();
206 innerSeedRing != seed->first.end();
208 for ( std::vector<const Ring*>::const_iterator outerSeedRing = seed->second.begin();
209 outerSeedRing != seed->second.end();
219 }
else if (
mode_ ==
"STANDARD" ) {
222 for ( std::vector<const Ring*>::const_iterator innerSeedRing1 = seed->first.begin();
223 innerSeedRing1 != seed->first.end();
226 for ( std::vector<const Ring*>::const_iterator innerSeedRing2 = innerSeedRing1+1;
227 innerSeedRing2 != seed->first.end();
230 for ( std::vector<const Ring*>::const_iterator outerSeedRing = seed->second.begin();
231 outerSeedRing != seed->second.end();
234 unsigned int identifier = (*innerSeedRing1)->getindex() * 1000000 +
235 (*innerSeedRing2)->getindex() * 1000 +
236 (*outerSeedRing)->getindex();
241 if ( identifier == *alreadyChecked ) {
260 for ( std::vector<const Ring*>::const_iterator outerSeedRing1 = seed->second.begin();
261 outerSeedRing1 != seed->second.end();
263 for ( std::vector<const Ring*>::const_iterator outerSeedRing2 = outerSeedRing1+1;
264 outerSeedRing2 != seed->second.end();
268 unsigned int identifier = (*innerSeedRing1)->getindex() * 1000000 +
269 (*outerSeedRing1)->getindex() * 1000 +
270 (*outerSeedRing2)->getindex();
275 if ( identifier == *alreadyChecked ) {
297 for ( std::vector<RoadSearchCircleSeed>::iterator localCircle = localCircleSeeds.begin(),
298 localCircleEnd = localCircleSeeds.end();
299 localCircle != localCircleEnd;
302 seed.
setSet(localCircle->getSet());
303 seed.
setSeed(localCircle->getSeed());
305 bool allPositive =
true;
306 bool allNegative =
true;
308 for (std::vector<const TrackingRecHit*>::const_iterator
hit = localCircle->begin_hits();
309 hit != localCircle->end_hits();
313 double seedY = builder.
build(*hit)->globalPosition().y();
314 if (seedY>0) allNegative =
false;
315 if (seedY<0) allPositive =
false;
327 edm::LogError(
"TooManySeeds") <<
"Found too many seeds, bailing out.\n";
334 edm::LogInfo(
"RoadSearch") <<
"Found " << output.size() <<
" seeds.";
355 ring1DetIdIterator != ring1->
end();
356 ++ring1DetIdIterator ) {
358 DetId ring1DetId = ring1DetIdIterator->second;
362 for (std::vector<TrackingRecHit*>::const_iterator ring1RecHit = ring1RecHits.begin();
363 ring1RecHit != ring1RecHits.end();
369 double innerphi = ring1GlobalPoint.
phi();
376 std::vector<TrackingRecHit*> ring2RecHits;
377 std::vector<TrackingRecHit*> ring3RecHits;
379 if (lowerPhiRangeBorder <= upperPhiRangeBorder ) {
381 outerRingDetId != ring2->
upper_bound(upperPhiRangeBorder);
384 ring2RecHits.insert(ring2RecHits.end(),
389 outerRingDetId != ring3->
upper_bound(upperPhiRangeBorder);
392 ring3RecHits.insert(ring3RecHits.end(),
398 outerRingDetId != ring2->
upper_bound(upperPhiRangeBorder);
401 ring2RecHits.insert(ring2RecHits.end(),
406 outerRingDetId != ring3->
upper_bound(upperPhiRangeBorder);
409 ring3RecHits.insert(ring3RecHits.end(),
414 outerRingDetId != ring2->
end();
417 ring2RecHits.insert(ring2RecHits.end(),
422 outerRingDetId != ring3->
end();
425 ring3RecHits.insert(ring3RecHits.end(),
431 if ( ring2RecHits.size() > 0 &&
432 ring3RecHits.size() > 0 ) {
460 ring1DetIdIterator != ring1->
end();
461 ++ring1DetIdIterator ) {
463 DetId ring1DetId = ring1DetIdIterator->second;
467 for (std::vector<TrackingRecHit*>::const_iterator ring1RecHit = ring1RecHits.begin();
468 ring1RecHit != ring1RecHits.end();
474 double innerphi = ring1GlobalPoint.
phi();
481 std::vector<TrackingRecHit*> ring2RecHits;
482 std::vector<TrackingRecHit*> ring3RecHits;
484 if (lowerPhiRangeBorder <= upperPhiRangeBorder ) {
486 outerRingDetId != ring2->
upper_bound(upperPhiRangeBorder);
489 ring2RecHits.insert(ring2RecHits.end(),
494 outerRingDetId != ring3->
upper_bound(upperPhiRangeBorder);
497 ring3RecHits.insert(ring3RecHits.end(),
503 outerRingDetId != ring2->
upper_bound(upperPhiRangeBorder);
506 ring2RecHits.insert(ring2RecHits.end(),
511 outerRingDetId != ring3->
upper_bound(upperPhiRangeBorder);
514 ring3RecHits.insert(ring3RecHits.end(),
519 outerRingDetId != ring2->
end();
522 ring2RecHits.insert(ring2RecHits.end(),
527 outerRingDetId != ring3->
end();
530 ring3RecHits.insert(ring3RecHits.end(),
536 if ( ring2RecHits.size() > 0 &&
537 ring3RecHits.size() > 0 ) {
564 ring1DetIdIterator != ring1->
end();
565 ++ring1DetIdIterator ) {
567 DetId ring1DetId = ring1DetIdIterator->second;
571 for (std::vector<TrackingRecHit*>::const_iterator ring1RecHit = ring1RecHits.begin();
572 ring1RecHit != ring1RecHits.end();
578 double innerphi = ring1GlobalPoint.
phi();
585 std::vector<TrackingRecHit*> ring2RecHits;
587 if (lowerPhiRangeBorder <= upperPhiRangeBorder ) {
589 outerRingDetId != ring2->
upper_bound(upperPhiRangeBorder);
592 ring2RecHits.insert(ring2RecHits.end(),
598 outerRingDetId != ring2->
upper_bound(upperPhiRangeBorder);
601 ring2RecHits.insert(ring2RecHits.end(),
606 outerRingDetId != ring2->
end();
609 ring2RecHits.insert(ring2RecHits.end(),
615 if ( ring2RecHits.size() > 0 ) {
631 std::vector<TrackingRecHit*> ring2RecHits,
632 std::vector<TrackingRecHit*> ring3RecHits) {
642 for ( std::vector<TrackingRecHit*>::iterator ring2RecHit = ring2RecHits.begin();
643 ring2RecHit != ring2RecHits.end();
646 for ( std::vector<TrackingRecHit*>::iterator ring3RecHit = ring3RecHits.begin();
647 ring3RecHit != ring3RecHits.end();
670 for (std::vector<RoadSearchCircleSeed>::iterator alreadyContainedCircle = circleSeeds.begin(),
671 alreadyContainedCircleEnd = circleSeeds.end();
672 alreadyContainedCircle != alreadyContainedCircleEnd;
673 ++alreadyContainedCircle ) {
674 if ( circle.
Compare(&*alreadyContainedCircle,
688 circleSeeds.push_back(circle);
701 std::vector<TrackingRecHit*> ring2RecHits) {
710 for ( std::vector<TrackingRecHit*>::iterator ring2RecHit = ring2RecHits.begin();
711 ring2RecHit != ring2RecHits.end();
721 circleSeeds.push_back(circle);
759 if ( id1TIB.layer() == id2TIB.layer() ) {
768 if ( id1TOB.layer() == id2TOB.layer() ) {
777 if ( id1TID.wheel() == id2TID.wheel() ) {
786 if ( id1TEC.wheel() == id2TEC.wheel() ) {
795 if ( id1PXB.layer() == id2PXB.layer() ) {
804 if ( id1PXF.disk() == id2PXF.disk() ) {
817 unsigned int totalClusters = 0;
821 totalClusters+=DSViter->
size();
824 return totalClusters;
T getParameter(std::string const &) const
bool Compare(const RoadSearchCircleSeed *circle, double centerCut, double radiusCut, unsigned int differentHitsCut) const
double mergeSeedsRadiusCut_A_
boost::transform_iterator< IterHelp, const_IdIter > const_iterator
const_iterator begin() const
DetHitAccess innerSeedHitVector_
unsigned int ClusterCounter(const edmNew::DetSetVector< SiStripCluster > *clusters)
void setCollections(const SiStripRecHit2DCollection *rphiRecHits, const SiStripRecHit2DCollection *stereoRecHits, const SiStripMatchedRecHit2DCollection *matchedRecHits, const SiPixelRecHitCollection *pixelRecHits)
const_iterator upper_bound(double phi) const
bool calculateCircleSeedsFromRingsTwoInnerOneOuter(std::vector< RoadSearchCircleSeed > &circleSeeds, const Roads::RoadSeed *seed, const Roads::RoadSet *set, const Ring *ring1, const Ring *ring2, const Ring *ring3)
virtual GlobalVector inTesla(const GlobalPoint &gp) const =0
Field value ad specified global point, in Tesla.
void use_rphiRecHits(bool input)
double mergeSeedsCenterCut_B_
const TrackerGeometry * tracker_
GlobalPoint toGlobal(const Local2DPoint &lp) const
Conversion to the global R.F. from the R.F. of the GeomDet.
bool innerSeedHitAccessUseRPhi_
Geom::Phi< T > phi() const
Global3DPoint GlobalPoint
const double unitCorrection
void setSeed(const Roads::RoadSeed *input)
double maxEndcapImpactParameter_
void setSet(const Roads::RoadSet *input)
std::vector< RoadSearchSeed > RoadSearchSeedCollection
bool ringsOnSameLayer(const Ring *ring1, const Ring *ring2)
void setSeed(const Roads::RoadSeed *input)
std::vector< std::vector< const Ring * > > RoadSet
uint32_t rawId() const
get the raw id
const_iterator lower_bound(double phi) const
bool calculateCircleSeedsFromHits(std::vector< RoadSearchCircleSeed > &circleSeeds, const Roads::RoadSeed *seed, const Roads::RoadSet *set, GlobalPoint ring1GlobalPoint, TrackingRecHit *ring1RecHit, std::vector< TrackingRecHit * > ring2RecHits, std::vector< TrackingRecHit * > ring3RecHits)
DetHitAccess outerSeedHitVector_
bool outerSeedHitAccessUseRPhi_
const_iterator begin() const
DetHitAccess::accessMode innerSeedHitAccessMode_
bool detIdsOnSameLayer(DetId id1, DetId id2)
bool check(const DataFrame &df, bool capcheck, bool dvercheck)
double mergeSeedsRadiusCut_B_
double mergeSeedsCenterCut_A_
Tan< T >::type tan(const T &t)
double ImpactParameter() const
void addCircle(double eta, double phi, double radius, const unsigned int nLineSegments, TEveElement *comp, FWProxyBuilderBase *pb)
const_iterator end() const
void run(const SiStripRecHit2DCollection *rphiRecHits, const SiStripRecHit2DCollection *stereoRecHits, const SiStripMatchedRecHit2DCollection *matchedRecHits, const SiPixelRecHitCollection *pixelRecHits, const edm::EventSetup &es, RoadSearchSeedCollection &output)
std::vector< TrackingRecHit * > getHitVector(const DetId *detid)
int subdetId() const
get the contents of the subdetector field (not cast into any detector's numbering enum) ...
double phiRangeDetIdLookup_
virtual const GeomDet * idToDet(DetId) const
bool outerSeedHitAccessUseStereo_
double maxBarrelImpactParameter_
std::pair< std::vector< const Ring * >, std::vector< const Ring * > > RoadSeed
void use_stereoRecHits(bool input)
unsigned int mergeSeedsDifferentHitsCut_
RoadMap::const_iterator const_iterator
double beamSpotZMagneticField_
Log< T >::type log(const T &t)
void setSet(const Roads::RoadSet *input)
RoadSearchSeedFinderAlgorithm(const edm::ParameterSet &conf)
void setMode(accessMode input)
bool calculateCircleSeedsFromRingsOneInnerOneOuter(std::vector< RoadSearchCircleSeed > &circleSeeds, const Roads::RoadSeed *seed, const Roads::RoadSet *set, const Ring *ring1, const Ring *ring2)
T const * product() const
double mergeSeedsRadiusCut_C_
void addHit(const TrackingRecHit *input)
const_iterator end() const
const MagneticField * magnet_
std::vector< std::vector< double > > tmp
bool innerSeedHitAccessUseStereo_
DetHitAccess::accessMode outerSeedHitAccessMode_
std::vector< unsigned int > usedSeedRingCombinations_
DetIdMap::const_iterator const_iterator
bool calculateCircleSeedsFromRingsOneInnerTwoOuter(std::vector< RoadSearchCircleSeed > &circleSeeds, const Roads::RoadSeed *seed, const Roads::RoadSet *set, const Ring *ring1, const Ring *ring2, const Ring *ring3)
double mergeSeedsRadiusCut_
double mergeSeedsCenterCut_
double mergeSeedsCenterCut_C_
const double speedOfLight
~RoadSearchSeedFinderAlgorithm()
TransientTrackingRecHit::RecHitPointer build(const TrackingRecHit *p) const
build a tracking rechit from an existing rechit