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()) {
129 rightFL.push_back( *fli);
139 float length = (**(bli+1)).surface().bounds().length();
143 if ( length + epsilon < (**i).surface().bounds().length()) {
144 reachableBL.push_back( *
i);
157 LogDebug(
"TkNavigation") <<
"SimpleNavigationSchool, Forward groups size = " << groups.size() ;
158 for (vector<FDLC>::iterator
g = groups.begin();
g != groups.end();
g++) {
159 LogDebug(
"TkNavigation") <<
"group " <<
g - groups.begin() <<
" has "
160 <<
g->size() <<
" layers " ;
163 for ( vector<FDLC>::iterator
group = groups.begin();
179 if (
group+1 != groups.end()) {
192 symFinder.
mirror(reachableFL),
218 if ( outerRadius < (**bli).specificSurface().radius() &&
219 zpos < (**bli).surface().bounds().length() / 2.) {
220 reachableBL.push_back( *bli);
232 if ( fli+1 != group.end()) {
233 reachableFL.push_back( *(fli+1));
236 float innerRThis = (**fli).specificSurface().innerRadius();
237 float innerRNext = (**(fli+1)).specificSurface().innerRadius();
240 if (innerRNext > innerRThis + epsilon) {
245 while ( (fli+i) != group.end()) {
246 if ( (**(fli+i)).specificSurface().innerRadius() <
249 reachableFL.push_back( *(fli+i));
269 if ( first != group.end()) {
274 reachableFL.insert( reachableFL.end(),
first,
last);
283 if ( biggerLayer != group.end() && biggerLayer != fl+1) {
284 reachableFL.push_back( *biggerLayer);
292 float outerRadius = (**fl).specificSurface().outerRadius();
293 while ( ++fl != group.end()) {
294 if ( (**fl).specificSurface().outerRadius() > outerRadius +
epsilon) {
301 vector<SimpleNavigationSchool::FDLC>
308 FDLI end = myRightLayers.end();
316 current.push_back( *begin);
319 LogDebug(
"TkNavigation") <<
"(**i).specificSurface().innerRadius() = "
320 << (**i).specificSurface().innerRadius() << endl
321 <<
"(**(i-1)).specificSurface().outerRadius()) = "
322 << (**(
i-1)).specificSurface().outerRadius() ;
325 if ( (**i).specificSurface().innerRadius() >
326 (**(
i-1)).specificSurface().outerRadius()) {
328 LogDebug(
"TkNavigation") <<
"found break between groups" ;
331 sort ( current.begin(), current.end(),
DetLessZ());
333 result.push_back(current);
336 current.push_back(*
i);
338 result.push_back(current);
341 for ( vector<FDLC>::iterator ivec = result.begin();
342 ivec != result.end(); ivec++) {
343 sort( ivec->begin(), ivec->end(),
DetLessZ());
354 (**i).surface().bounds().length() / 2.f);
370 typedef map<const DetLayer*, vector<const BarrelDetLayer*>, less<const DetLayer*> > BarrelMapType;
371 typedef map<const DetLayer*, vector<const ForwardDetLayer*>, less<const DetLayer*> > ForwardMapType;
374 BarrelMapType reachedBarrelLayersMap;
375 ForwardMapType reachedForwardLayersMap;
380 for (
auto i : reachedLC) {
381 reachedBarrelLayersMap[
i].push_back(bli);
387 for (
auto i : reachedLC) {
388 reachedForwardLayersMap[
i].push_back(fli);
406 navigableLayer->setInwardLinks( reachedBarrelLayersMap[dl],reachedForwardLayersMap[dl] );
virtual float length() const =0
std::vector< DetLayer const * > const & allLayers() const
std::vector< const BarrelDetLayer * > BDLC
virtual void linkNextBarrelLayer(ForwardDetLayer const *fl, BDLC &)
virtual const BoundSurface & surface() const final
GeometricSearchDet interface.
virtual DetLayer const * detLayer() const =0
std::vector< ForwardDetLayer const * > const & forwardLayers() const
const Bounds & bounds() const
virtual StateType navigableLayers() override
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 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 const BoundCylinder & specificSurface() const final
Extension of the interface.
virtual std::vector< FDLC > splitForwardLayers()
virtual void linkNextLargerLayer(BDLI, BDLI, BDLC &)
virtual const BoundDisk & specificSurface() const final
#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()