22 bool checkCrossingSide) :
24 areAllReachableLayersSet(
false),
25 theDetLayer(detLayer),
26 theOuterBarrelLayers(outerBL),
27 theInnerBarrelLayers(0),
28 theOuterForwardLayers(outerFL),
29 theInnerForwardLayers(0),
36 for (
ConstBDLI bl = outerBL.begin(); bl != outerBL.end(); bl++ )
38 for (
ConstFDLI fl = outerFL.begin(); fl != outerFL.end(); fl++ )
51 const BDLC& allOuterBL,
53 const BDLC& allInnerBL,
55 const FDLC& allOuterFL,
57 const FDLC& allInnerFL,
60 bool checkCrossingSide) :
62 areAllReachableLayersSet(
true),
63 theDetLayer(detLayer),
64 theOuterBarrelLayers(outerBL),
65 theAllOuterBarrelLayers(allOuterBL),
66 theInnerBarrelLayers(innerBL),
67 theAllInnerBarrelLayers(allInnerBL),
68 theOuterForwardLayers(outerFL),
69 theAllOuterForwardLayers(allOuterFL),
70 theInnerForwardLayers(innerFL),
71 theAllInnerForwardLayers(allInnerFL),
80 for (
ConstBDLI bl = outerBL.begin(); bl != outerBL.end(); bl++ )
82 for (
ConstFDLI fl = outerFL.begin(); fl != outerFL.end(); fl++ )
86 for (
ConstBDLI bl = allOuterBL.begin(); bl != allOuterBL.end(); bl++ )
88 for (
ConstFDLI fl = allOuterFL.begin(); fl != allOuterFL.end(); fl++ )
92 for (
ConstBDLI bl = innerBL.begin(); bl != innerBL.end(); bl++ )
94 for (
ConstFDLI fl = innerFL.begin(); fl != innerFL.end(); fl++ )
98 for (
ConstBDLI bl = allInnerBL.begin(); bl != allInnerBL.end(); bl++ )
100 for (
ConstFDLI fl = allInnerFL.begin(); fl != allInnerFL.end(); fl++ )
119 vector<const DetLayer*>
122 vector<const DetLayer*>
result;
137 vector<const DetLayer*>
145 vector<const DetLayer*>
result;
154 bool isInOutTrackFWD = fts.
momentum().
z()*zpos>0;
156 bool isInOutTrackBarrel = (transversePosition.dot(fts.
momentum())>0) ? 1 : 0;
164 if ( dirOppositeXORisInOutTrackFWD && dirOppositeXORisInOutTrackBarrel ) {
170 else if (!dirOppositeXORisInOutTrackFWD && !dirOppositeXORisInOutTrackBarrel){
175 }
else if (!dirOppositeXORisInOutTrackFWD && dirOppositeXORisInOutTrackBarrel ) {
201 vector<const DetLayer*>
205 edm::LogError(
"TkNavigation") <<
"ERROR: compatibleLayers() method used without all reachableLayers are set" ;
206 throw DetLayerException(
"compatibleLayers() method used without all reachableLayers are set");
209 vector<const DetLayer*>
result;
221 vector<const DetLayer*>
232 vector<const DetLayer*>
result;
255 bool isInOutTrackFWD = fts.
momentum().
z()*zpos>0;
257 bool isInOutTrackBarrel = (transversePosition.dot(fts.
momentum())>0) ? 1 : 0;
265 if ( dirOppositeXORisInOutTrackFWD && dirOppositeXORisInOutTrackBarrel ) {
271 else if (!dirOppositeXORisInOutTrackFWD && !dirOppositeXORisInOutTrackBarrel){
276 }
else if (!dirOppositeXORisInOutTrackFWD && dirOppositeXORisInOutTrackBarrel ) {
294 cerr <<
"Warning: SimpleForwardNavigableLayer::setDetLayer called."
295 << endl <<
"This should never happen!" << endl;
307 for (
ConstBDLI bl = innerBL.begin(); bl != innerBL.end(); bl++ )
309 for (
ConstFDLI fl = innerFL.begin(); fl != innerFL.end(); fl++ )
335 }
else if (fadditional){
349 edm::LogError(
"TkNavigation") <<
"trying to add neither a ForwardDetLayer nor a BarrelDetLayer";
virtual std::vector< const DetLayer * > nextLayers(NavigationDirection direction) const
FDLC theAllInnerForwardLayers
virtual std::vector< const DetLayer * > compatibleLayers(NavigationDirection direction) const
BDLC theAllInnerBarrelLayers
const GlobalTrajectoryParameters & parameters() const
ForwardDetLayer * theDetLayer
std::vector< BarrelDetLayer * > BDLC
virtual void setAdditionalLink(DetLayer *, NavigationDirection direction=insideOut)
bool areAllReachableLayersSet
FDLC theAllOuterForwardLayers
virtual void setDetLayer(DetLayer *dl)
virtual DetLayer * detLayer() const
virtual std::vector< const DetLayer * > compatibleLayers(const FreeTrajectoryState &fts, PropagationDirection timeDirection, int &counter) const
BDLC theInnerBarrelLayers
FDLC::const_iterator ConstFDLI
GlobalVector momentum() const
GlobalPoint position() const
bool wellInside(const FreeTrajectoryState &fts, PropagationDirection dir, const BarrelDetLayer *bl, DLC &result) const
FDLC theOuterForwardLayers
std::vector< ForwardDetLayer * > FDLC
BDLC theAllOuterBarrelLayers
virtual void setInwardLinks(const BDLC &, const FDLC &, TkLayerLess sorter=TkLayerLess(outsideIn))
BDLC theOuterBarrelLayers
FDLC theInnerForwardLayers
BDLC::const_iterator ConstBDLI
SimpleForwardNavigableLayer(ForwardDetLayer *detLayer, const BDLC &outerBL, const FDLC &outerFL, const MagneticField *field, float epsilon, bool checkCrossingSide=true)