20 int myIronVolumes[126] = {6,9,11,14,15,18,22,23,26,29,30,33,36,37,43,46,49,53,56,57,60,62,
21 63,65,71,77,105,106,107,111,112,113,114,115,116,117,118,122,123,
22 125,126,128,129,130,131,132,133,135,137,141,145,147,148,149,153,
23 154,155,156,157,158,159,160,164,165,167,168,170,171,172,173,174,
24 175,177,178,179,180,184,185,186,187,188,189,190,191,195,196,198,
25 200,204,208,210,211,212,216,217,218,219,220,221,222,223,227,228,
26 230,231,233,234,235,236,237,238,240,241,242,243,247,248,249,250,
27 251,252,253,254,258,259,261};
44 std::pair<TrajectoryStateOnSurface,double>
46 const Plane& targetPlane)
const
49 LogDebug(
"NavPropagator") <<
"NavPropagator::propagateWithPath(TrajectoryStateOnSurface, Plane) called with "
53 TSOS startingState = inputState;
54 TSOS TempState = inputState;
61 LogDebug(
"NavPropagator") <<
"NavPropagator:: at beginning of while loop at iteration " <<
count ;
63 startingState = TempState;
64 bool isReflected =
false;
66 if (exitState.
volume() != 0) {
67 currentVolume = exitState.
volume();
86 if (currentVolume == 0) {
87 std::cout <<
"NavPropagator: findVolume failed to find volume containing point "
89 return std::pair<TrajectoryStateOnSurface,double>(
noNextVolume( startingState), 0);
95 LogDebug(
"NavPropagator") <<
"NavPropagator: calling crossToNextVolume" ;
97 LogDebug(
"NavPropagator") <<
"NavPropagator: crossToNextVolume returned" ;
98 LogDebug(
"NavPropagator") <<
"Volume pointer: " << exitState.
volume() <<
" and new ";
100 LogDebug(
"NavPropagator") <<
"So that was a path length " << exitState.
path() ;
105 std::cout <<
"NavPropagator: failed to crossToNextVolume in volume at pos "
110 LogDebug(
"NavPropagator") <<
"NavPropagator: crossToNextVolume reached volume ";
111 if (exitState.
volume() != 0) {
112 LogDebug(
"NavPropagator") <<
" at pos "
114 <<
"with state " << exitState.
tsos() ;
116 else LogDebug(
"NavPropagator") <<
" unknown";
119 TempState = exitState.
tsos();
121 if (fabs(exitState.
path())<0.01) {
131 TempState = ShiftedState;
133 LogDebug(
"NavPropagator") <<
"Shifted to new position " << TempState.globalPosition();
154 TempState = ReflectedState;
159 if (count > maxCount) {
160 LogDebug(
"NavPropagator") <<
"Ohoh, NavPropagator in infinite loop, count = " <<
count;
178 LogDebug(
"NavPropagator") <<
"NavPropagator: calling theField->findVolume ";
186 LogDebug(
"NavPropagator") <<
"NavPropagator: got MagVolume* " << magVolume
187 <<
" when searching with pos " << gpSym ;
191 cout <<
"Got invalid volume pointer " << magVolume <<
" at position " << gpSym;
210 std::stringstream ss(pVol6->
name.substr(5));
214 std::cout <<
"Error (NavVolume6Faces) failed to get MagVolume6Faces pointer" << std::endl;
217 std::cout <<
"Error (NavVolume6Faces) unexpected Volume number!" << std::endl;
225 else result = i->second;
229 std::pair<TrajectoryStateOnSurface,double>
232 const Plane& targetPlane)
const
237 bool isReflected =
false;
238 TSOS okState = startingState;
240 Plane okPlane = targetPlane;
253 TSOS ReflectedState( fts, startingState.
surface());
254 okState = ReflectedState;
266 ReflectedPlane = pb.plane( gpSym, rot);
268 okPlane = *ReflectedPlane;
278 if (isReflected && res.first.isValid()) {
281 TSOS TempState = res.first;
292 res.first = ReflectedState;
297 if (res.first.isValid()) {
302 if (currentVolume->
inside( gpSym )) {
314 const TSOS& endState,
const Plane& plane)
const
336 LogDebug(
"NavPropagator") << std::endl
337 <<
"Propagation reached end of volume geometry without crossing target surface"
339 <<
"starting state of last propagation " << startingState;
346 std::pair<TrajectoryStateOnSurface,double>
350 LogDebug(
"NavPropagator") <<
"propagateWithPath(const FreeTrajectoryState&) not implemented yet in NavPropagator" ;
353 std::pair<TrajectoryStateOnSurface,double>
355 const Plane& cylinder)
const
357 LogDebug(
"NavPropagator") <<
"propagateWithPath(const FreeTrajectoryState&) not implemented yet in NavPropagator" ;
std::pair< TrajectoryStateOnSurface, double > propagateInVolume(const NavVolume *currentVolume, const TrajectoryStateOnSurface &startingState, const Plane &targetPlane) const
const VolumeBasedMagneticField * theField
MagVolumeMap theNavVolumeMap
GlobalVector normalVector() const
Global3DPoint GlobalPoint
TrajectoryStateOnSurface TSOS
NavPropagator(const MagneticField *field, PropagationDirection dir=alongMomentum)
virtual VolumeCrossReturnType crossToNextVolume(const TrajectoryStateOnSurface ¤tState, const Propagator &prop) const =0
double path() const
Access to actual NavSurface pointer.
const MagVolume * findVolume(const GlobalPoint &gp) const
GlobalPoint globalPosition() const
virtual const MagneticField * magneticField() const
const NavVolume * navVolume(const MagVolume *magVolume) const
bool destinationCrossed(const TSOS &startState, const TSOS &endState, const Plane &plane) const
const NavVolume * findVolume(const TrajectoryStateOnSurface &inputState) const
const TSOS & tsos() const
Access to actual Bounds pointer.
const NavVolume * volume() const
Access to actual NavVolume pointer.
virtual bool inside(const GlobalPoint &gp, double tolerance=0.) const =0
virtual std::pair< TrajectoryStateOnSurface, double > propagateWithPath(const FreeTrajectoryState &, const Plane &) const
Vector3DBase< typename PreciseFloatType< T, U >::Type, FrameTag > cross(const Vector3DBase< U, FrameTag > &v) const
std::pair< TrajectoryStateOnSurface, double > TsosWP
Vector3DBase unit() const
const GlobalTrajectoryParameters & globalParameters() const
std::pair< TrajectoryStateOnSurface, double > propagateWithPath(const TrajectoryStateOnSurface &, const Plane &plane) const
propagation of TSOS to plane with path length
GlobalVector globalMomentum() const
TkRotation< float > RotationType
virtual SurfaceOrientation::Side side(const LocalPoint &p, Scalar toler) const
const Surface & surface() const
TrajectoryStateOnSurface noNextVolume(TrajectoryStateOnSurface startingState) const
TrackCharge charge() const
const PositionType & position() const
Global3DVector GlobalVector
virtual const MagneticField * magneticField() const