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);
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()) {
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 &)
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
Scalar radius() const
Radius of the cylinder.
const T & max(const T &a, const T &b)
virtual void linkNextLayerInGroup(FDLI fli, const FDLC &group, FDLC &reachableFL)
virtual const BoundDisk & specificSurface() const
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
const Bounds & bounds() const
virtual void linkBarrelLayers(SymmetricLayerFinder &symFinder)
virtual const BoundSurface & surface() const
GeometricSearchDet interface.
virtual const Surface::PositionType & position() const
Returns position of the surface.
virtual ConstFDLI outerRadiusIncrease(FDLI fl, const FDLC &group)
virtual const BoundCylinder & specificSurface() const
Extension of the interface.
virtual std::vector< FDLC > splitForwardLayers()
virtual void linkNextLargerLayer(BDLI, BDLI, BDLC &)
float outerRadius() const
The outer radius of the disk.
std::vector< BarrelDetLayer * > BDLC
const std::vector< DetLayer * > * theAllDetLayersInSystem
std::vector< ForwardDetLayer * > const & forwardLayers() const
virtual float barrelLength()
ForwardDetLayer * mirror(const ForwardDetLayer *layer)