9 using namespace ctfseeding;
14 theLsb(conf.getParameter<edm::
ParameterSet>(
"LayerPSet")){
15 edm::LogInfo(
"CtfSpecialSeedGenerator|GenericTripletGenerator") <<
"Constructing GenericTripletGenerator";
33 SeedingLayerSets::const_iterator iLss;
34 std::map<float, OrderedHitTriplet> radius_triplet_map;
35 for (iLss = lss.begin(); iLss != lss.end(); iLss++){
38 throw cms::Exception(
"CtfSpecialSeedGenerator") <<
"You are using " << ls.size() <<
" layers in set instead of 3 ";
40 std::vector<SeedingHit> innerHits = region.
hits(e, es, &ls[0]);
42 std::vector<SeedingHit> middleHits = region.
hits(e, es, &ls[1]);
44 std::vector<SeedingHit> outerHits = region.
hits(e, es, &ls[2]);
47 std::vector<SeedingHit>::const_iterator iOuterHit;
48 for (iOuterHit = outerHits.begin(); iOuterHit != outerHits.end(); iOuterHit++){
49 std::vector<SeedingHit>::const_iterator iMiddleHit;
50 for (iMiddleHit = middleHits.begin(); iMiddleHit != middleHits.end(); iMiddleHit++){
51 std::vector<SeedingHit>::const_iterator iInnerHit;
52 for (iInnerHit = innerHits.begin(); iInnerHit != innerHits.end(); iInnerHit++){
61 std::pair<bool,float> val_radius =
qualityFilter(oht,radius_triplet_map,ls);
62 if (val_radius.first){
68 radius_triplet_map.insert(std::make_pair(val_radius.second,oht));
79 const std::map<float, OrderedHitTriplet>&
map,
85 std::vector<const TrackingRecHit*> ohttrh;
86 ohttrh.push_back(&(*(oht.
inner()))); ohttrh.push_back(&(*(oht.
middle()))); ohttrh.push_back(&(*(oht.
outer())));
87 std::vector<const TrackingRecHit*>::const_iterator ioht;
90 float limit_phi_distance1 =
sqrt((middlepos.
x()-outerpos.
x())*(middlepos.
x()-outerpos.
x()) +
91 (middlepos.
y()-outerpos.
y())*(middlepos.
y()-outerpos.
y()))/middlepos.
mag();
92 float limit_phi_distance2 =
sqrt((middlepos.
x()-innerpos.
x())*(middlepos.
x()-innerpos.
x()) +
93 (middlepos.
y()-innerpos.
y())*(middlepos.
y()-innerpos.
y()))/innerpos.
mag();
96 if (fabs(outerpos.
phi()-middlepos.
phi())>fabs(atan(limit_phi_distance1)) ||
97 fabs(innerpos.
phi()-middlepos.
phi())>fabs(atan(limit_phi_distance2)) ) {
99 return std::make_pair(
false, 0.);
119 FastCircle circle(innerpos, middlepos, outerpos);
120 if (circle.
rho() < 200 && circle.
rho() != 0)
return std::make_pair(
false, circle.
rho());
123 std::map<float, OrderedHitTriplet>::const_iterator lower_bound = map.lower_bound((1-0.01)*circle.
rho());
124 std::map<float, OrderedHitTriplet>::const_iterator upper_bound = map.upper_bound((1+0.01)*circle.
rho());
125 std::map<float, OrderedHitTriplet>::const_iterator iter;
126 for (iter = lower_bound; iter != upper_bound && iter->first <= upper_bound->first; iter++){
128 std::vector<const TrackingRecHit*> curtrh;
129 curtrh.push_back(&*(iter->second.inner()));curtrh.push_back(&*(iter->second.middle()));curtrh.push_back(&*(iter->second.outer()));
130 std::vector<const TrackingRecHit*>::const_iterator curiter;
131 for (curiter = curtrh.begin(); curiter != curtrh.end(); curiter++){
132 for (ioht = ohttrh.begin(); ioht != ohttrh.end(); ioht++){
133 if ((*ioht)->geographicalId()==(*curiter)->geographicalId() &&
134 ((*ioht)->localPosition()-(*curiter)->localPosition()).
mag()<1
e-5) shared++;
137 if (shared>1)
return std::make_pair(
false, circle.
rho());
140 return std::make_pair(
true,circle.
rho());
GenericTripletGenerator(const edm::ParameterSet &conf)
SeedingLayerSetsBuilder theLsb
const OuterRecHit & outer() const
OrderedHitTriplets hitTriplets
virtual Hits hits(const edm::Event &ev, const edm::EventSetup &es, const ctfseeding::SeedingLayer *layer) const =0
get hits from layer compatible with region constraints
Geom::Phi< T > phi() const
const InnerRecHit & inner() const
const MiddleRecHit & middle() const
T mag() const
The vector magnitude. Equivalent to sqrt(vec.mag2())
std::pair< bool, float > qualityFilter(const OrderedHitTriplet &oht, const std::map< float, OrderedHitTriplet > &map, const ctfseeding::SeedingLayers &ls) const
ctfseeding::SeedingLayerSets init(const edm::EventSetup &es)
ctfseeding::SeedingLayerSets layers(const edm::EventSetup &es) const
TransientTrackingRecHit::ConstRecHitPointer SeedingHit
virtual const OrderedSeedingHits & run(const TrackingRegion ®ion, const edm::Event &ev, const edm::EventSetup &es)
std::vector< SeedingLayer > SeedingLayers
std::vector< std::vector< SeedingLayer > > SeedingLayerSets