31 theBarrelLength(0),theField(field), theTracker(theInputTracker)
63 for ( vector< SimpleBarrelNavigableLayer*>::const_iterator
68 for ( vector< SimpleForwardNavigableLayer*>::const_iterator
79 for ( vector< SimpleBarrelNavigableLayer*>::const_iterator
81 result.push_back( *
ib);
83 for ( vector< SimpleForwardNavigableLayer*>::const_iterator
85 result.push_back( *ifl);
114 symFinder.
mirror(rightFL),
127 if ( length < (**fli).position().z() &&
128 radius < (**fli).specificSurface().outerRadius()) {
131 if ( (**fliNext).position().z() < (**fli).position().z() && (**fliNext).specificSurface().innerRadius() < (**fli).specificSurface().outerRadius()) {
132 rightFL.push_back( *fliNext);
136 rightFL.push_back( *fli);
146 float length = (**(bli+1)).surface().bounds().length();
150 if ( length + epsilon < (**i).surface().bounds().length()) {
151 reachableBL.push_back( *
i);
164 LogDebug(
"TkNavigation") <<
"SimpleNavigationSchool, Forward groups size = " << groups.size() ;
165 for (vector<FDLC>::iterator
g = groups.begin();
g != groups.end();
g++) {
166 LogDebug(
"TkNavigation") <<
"group " <<
g - groups.begin() <<
" has " 167 <<
g->size() <<
" layers " ;
170 for ( vector<FDLC>::iterator
group = groups.begin();
186 if (
group+1 != groups.end()) {
199 symFinder.
mirror(reachableFL),
225 if ( outerRadius < (**bli).specificSurface().radius() &&
226 zpos < (**bli).surface().bounds().length() / 2.) {
227 reachableBL.push_back( *bli);
239 if ( fli+1 != group.end()) {
240 reachableFL.push_back( *(fli+1));
243 float innerRThis = (**fli).specificSurface().innerRadius();
244 float innerRNext = (**(fli+1)).specificSurface().innerRadius();
247 if (innerRNext > innerRThis + epsilon) {
252 while ( (fli+i) != group.end()) {
253 if ( (**(fli+i)).specificSurface().innerRadius() <
256 reachableFL.push_back( *(fli+i));
276 if ( first != group.end()) {
281 reachableFL.insert( reachableFL.end(),
first,
last);
290 if ( biggerLayer != group.end() && biggerLayer != fl+1) {
291 reachableFL.push_back( *biggerLayer);
299 float outerRadius = (**fl).specificSurface().outerRadius();
300 while ( ++fl != group.end()) {
301 if ( (**fl).specificSurface().outerRadius() > outerRadius +
epsilon) {
308 vector<SimpleNavigationSchool::FDLC>
315 FDLI end = myRightLayers.end();
323 current.push_back( *begin);
327 LogDebug(
"TkNavigation") <<
"(**i).specificSurface().innerRadius() = " 328 << (**i).specificSurface().innerRadius() << endl
329 <<
"(**(i-1)).specificSurface().outerRadius()) = " 330 << (**(
i-1)).specificSurface().outerRadius() ;
331 LogDebug(
"TkNavigation") <<
"(**i).specificSurface().position().z() = " 332 << (**i).specificSurface().position().z() << endl
333 <<
"(**(i-1)).specificSurface().position().z() = " 334 << (**(
i-1)).specificSurface().position().z() ;
340 if ( (**i).specificSurface().innerRadius() > (**(
i-1)).specificSurface().outerRadius() ||
342 (**i).specificSurface().position().z() < (**(
i-1)).specificSurface().position().z()) ){
344 LogDebug(
"TkNavigation") <<
"found break between groups" ;
347 stable_sort ( current.begin(), current.end(),
DetLessZ());
349 result.push_back(current);
352 current.push_back(*
i);
354 result.push_back(current);
357 for ( vector<FDLC>::iterator ivec = result.begin();
358 ivec != result.end(); ivec++) {
359 stable_sort( ivec->begin(), ivec->end(),
DetLessZ());
370 (**i).surface().bounds().length() / 2.f);
386 typedef map<const DetLayer*, vector<const BarrelDetLayer*>, less<const DetLayer*> > BarrelMapType;
387 typedef map<const DetLayer*, vector<const ForwardDetLayer*>, less<const DetLayer*> > ForwardMapType;
390 BarrelMapType reachedBarrelLayersMap;
391 ForwardMapType reachedForwardLayersMap;
396 for (
auto i : reachedLC) {
397 reachedBarrelLayersMap[
i].push_back(bli);
403 for (
auto i : reachedLC) {
404 reachedForwardLayersMap[
i].push_back(fli);
422 navigableLayer->setInwardLinks( reachedBarrelLayersMap[dl],reachedForwardLayersMap[dl] );
virtual float length() const =0
std::vector< DetLayer const * > const & allLayers() const
std::vector< const BarrelDetLayer * > BDLC
std::vector< ForwardDetLayer const * > const & posPixelForwardLayers() const
virtual void linkNextBarrelLayer(ForwardDetLayer const *fl, BDLC &)
virtual const BoundSurface & surface() const final
GeometricSearchDet interface.
std::vector< ForwardDetLayer const * > const & forwardLayers() const
const Bounds & bounds() const
virtual StateType navigableLayers() override
virtual const BoundCylinder & specificSurface() const final
Extension of the interface.
const GeometricSearchTracker * theTracker
The Signals That Services Can Subscribe To This is based on ActivityRegistry and is current per Services can connect to the signals distributed by the ActivityRegistry in order to monitor the activity of the application Each possible callback has some defined which we here list in angle e g
const ForwardDetLayer * mirror(const ForwardDetLayer *layer)
FDLC::const_iterator ConstFDLI
virtual void linkNextLayerInGroup(FDLI fli, const FDLC &group, FDLC &reachableFL)
StateType theAllNavigableLayer
std::vector< NavigableLayer * > StateType
virtual void linkWithinGroup(FDLI fl, const FDLC &group, FDLC &reachableFL)
virtual void linkForwardLayers(SymmetricLayerFinder &symFinder)
virtual void establishInverseRelations()
std::vector< const ForwardDetLayer * > FDLC
const std::vector< const DetLayer * > * theAllDetLayersInSystem
const MagneticField * theField
virtual void linkBarrelLayers(SymmetricLayerFinder &symFinder)
virtual const BoundDisk & specificSurface() const final
virtual const Surface::PositionType & position() const
Returns position of the surface.
virtual ConstFDLI outerRadiusIncrease(FDLI fl, const FDLC &group)
std::vector< const DetLayer * > nextLayers(const DetLayer &detLayer, Args &&...args) const
NavigationDirection.
virtual std::vector< FDLC > splitForwardLayers()
std::vector< ForwardDetLayer const * > const & posTidLayers() const
virtual void linkNextLargerLayer(BDLI, BDLI, BDLC &)
virtual DetLayer const * detLayer() const =0
#define DEFINE_EDM_PLUGIN(factory, type, name)
virtual void linkNextForwardLayer(BarrelDetLayer const *, FDLC &)
void setState(const StateType &state)
virtual void linkOuterGroup(ForwardDetLayer const *fl, const FDLC &group, FDLC &reachableFL)
std::vector< BarrelDetLayer const * > const & barrelLayers() const
virtual float barrelLength()