31 theBarrelLength(0),theField(field), theTracker(theInputTracker)
38 for ( vector<BarrelDetLayer*>::iterator
i = blc.begin();
i != blc.end();
i++) {
44 for ( vector<ForwardDetLayer*>::iterator
i = flc.begin();
i != flc.end();
i++) {
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);
113 SimpleBarrelNavigableLayer( *
i, reachableBL,
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();
164 group != groups.end(); group++) {
166 for (
FDLI i = group->begin();
i != group->end();
i++) {
179 if ( group+1 != groups.end()) {
186 theForwardNLC.push_back(
new SimpleForwardNavigableLayer( *
i,reachableBL,
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" ;
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++) {
354 (**i).surface().bounds().length() / 2.f);
368 typedef map<const DetLayer*, vector<BarrelDetLayer*>, less<const DetLayer*> > BarrelMapType;
369 typedef map<const DetLayer*, vector<ForwardDetLayer*>, less<const DetLayer*> > ForwardMapType;
372 BarrelMapType reachedBarrelLayersMap;
373 ForwardMapType reachedForwardLayersMap;
379 for (
DLI i = reachedLC.begin();
i != reachedLC.end();
i++) {
380 reachedBarrelLayersMap[*
i].push_back( *bli);
387 for (
DLI i = reachedLC.begin();
i != reachedLC.end();
i++) {
388 reachedForwardLayersMap[*
i].push_back( *fli);
394 for ( vector<DetLayer*>::iterator
i = lc.begin();
i != lc.end();
i++) {
397 navigableLayer->
setInwardLinks( reachedBarrelLayersMap[*
i],reachedForwardLayersMap[*i] );
virtual float length() const =0
virtual void linkOuterGroup(ForwardDetLayer *fl, const FDLC &group, FDLC &reachableFL)
virtual void linkNextForwardLayer(BarrelDetLayer *, FDLC &)
virtual const BoundSurface & surface() const GCC11_FINAL
GeometricSearchDet interface.
const Bounds & bounds() const
const GeometricSearchTracker * theTracker
virtual void setInwardLinks(const BDLC &, const FDLC &, TkLayerLess sorter=TkLayerLess(outsideIn))=0
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
virtual StateType navigableLayers() const
std::vector< BarrelDetLayer * > const & barrelLayers() const
virtual void linkNextBarrelLayer(ForwardDetLayer *fl, BDLC &)
FDLC::const_iterator ConstFDLI
std::vector< ForwardDetLayer * > FDLC
std::vector< const DetLayer * > DLC
const T & max(const T &a, const T &b)
virtual void linkNextLayerInGroup(FDLI fli, const FDLC &group, FDLC &reachableFL)
std::vector< NavigableLayer * > StateType
virtual void linkWithinGroup(FDLI fl, const FDLC &group, FDLC &reachableFL)
virtual void linkForwardLayers(SymmetricLayerFinder &symFinder)
virtual void establishInverseRelations()
std::vector< DetLayer * > const & allLayers() const
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)
virtual std::vector< FDLC > splitForwardLayers()
virtual const BoundDisk & specificSurface() const GCC11_FINAL
virtual void linkNextLargerLayer(BDLI, BDLI, BDLC &)
std::vector< BarrelDetLayer * > BDLC
const std::vector< DetLayer * > * theAllDetLayersInSystem
std::vector< ForwardDetLayer * > const & forwardLayers() const
virtual const BoundCylinder & specificSurface() const GCC11_FINAL
Extension of the interface.
virtual float barrelLength()
ForwardDetLayer * mirror(const ForwardDetLayer *layer)