diff --git a/ForwardDetectors/FPTracker/src/Magnet.cxx b/ForwardDetectors/FPTracker/src/Magnet.cxx index 89ed90a0055e44ced8fba0b9476d3b8442ee15c2..33e44912859f703dc8425253fcdd1ba6f6a5a9c6 100644 --- a/ForwardDetectors/FPTracker/src/Magnet.cxx +++ b/ForwardDetectors/FPTracker/src/Magnet.cxx @@ -46,7 +46,7 @@ namespace FPTracker{ m_bender(bender), m_label(label){ if (m_apertype == 1){ assert(m_aper_A1 != 0.);} - if (m_apertype == 2){ assert(m_aper_A3 != 0. and m_aper_A4 != 0.);} + if (m_apertype == 2 || m_apertype == 3){ assert(m_aper_A3 != 0. and m_aper_A4 != 0.);} } IBeamElement::ConstPtr_t Magnet::clone() const{ IBeamElement::ConstPtr_t pm(new Magnet(*this)); @@ -175,8 +175,50 @@ namespace FPTracker{ return false; } + if(m_apertype == 3) + { + double part_x = offCenter.x(); + double part_y = offCenter.y(); + + if ( m_aper_A1 > 0. ) + { + if( std::fabs(part_x)>m_aper_A1 ) + { + std::ostringstream ost; + ost<<"outside for aperture type 3 x test: particle x "<<part_x<<" m_aper_A1 "<<m_aper_A1<<"\n"; + particle.addMsg( ost.str() ); + return true; + } + } + if ( m_aper_A2 > 0. ) + { + if( std::fabs(part_y)>m_aper_A2) + { + std::ostringstream ost; + ost<<"outside for aperture type 3 y test: particle y "<<part_y<<" m_aper_A2 "<<m_aper_A2<<"\n"; + particle.addMsg( ost.str() ); + return true; + } + } + if ( m_aper_A3 > 0. && m_aper_A4 > 0. ) + { + float B3=std::tan(m_aper_A3)*m_aper_A1; + float B4=m_aper_A2/std::tan(m_aper_A4); + float d=(m_aper_A1-std::fabs(part_x))/(m_aper_A1-B4)+(m_aper_A2-std::fabs(part_y))/(m_aper_A2-B3); + + if(d<1.) + { + std::ostringstream ost; + ost<<"outside for aperture type 3 test: particle x "<<part_x<<" particle y "<<part_y<<"; m_aper_A1 "<<m_aper_A1<<" m_aper_A2 "<<m_aper_A2<<" m_aper_A3 "<<m_aper_A3<<" m_aper_A4 "<<m_aper_A4<<"\n"; + particle.addMsg( ost.str() ); + return true; + } + } + + return false; + } - // aperture is checked anly if aperture type i s 1 or 2 + // aperture is checked anly if aperture type i s 1, 2, or 3 return false; } diff --git a/ForwardDetectors/FPTracker/src/magnetSet.cxx b/ForwardDetectors/FPTracker/src/magnetSet.cxx index 505e1cc5c8f39a67e2bd03f7881a41dc9edc3c17..9ecfc8ce0dba7b87cd2d99000f9584c5d574e796 100644 --- a/ForwardDetectors/FPTracker/src/magnetSet.cxx +++ b/ForwardDetectors/FPTracker/src/magnetSet.cxx @@ -237,6 +237,10 @@ namespace FPTracker { mmagapertype =2; } + else if(aperture == "\"OCTAGON\"") + { + mmagapertype =3; + } else { std::stringstream sstr; diff --git a/ForwardDetectors/ForwardTracker/src/Magnet.cxx b/ForwardDetectors/ForwardTracker/src/Magnet.cxx index 9b75576077011bc4fd418f18c258389e1efc0442..13220d74ec518cad64a9ff3e2c168620e56ceb1f 100644 --- a/ForwardDetectors/ForwardTracker/src/Magnet.cxx +++ b/ForwardDetectors/ForwardTracker/src/Magnet.cxx @@ -112,6 +112,45 @@ namespace ForwardTracker { return false; } + else if (m_aperType == "\"OCTAGON\"") { + + if ( m_A1 > 0. ) { + if( std::fabs(offCenter.x())>m_A1 ) { + + std::ostringstream ost; ost << m_label << " isOutOfAperture "; + + ost << " |x|: " << std::fabs(offCenter.x()) << " > A1: " << m_A1; + particle.addMsg(ost.str()); + return true; + } + } + if ( m_A2 > 0. ) { + if( std::fabs(offCenter.y())>m_A2) { + + std::ostringstream ost; ost << m_label << " isOutOfAperture "; + + ost << " |y|: " << std::fabs(offCenter.y()) << " > A2: " << m_A2; + particle.addMsg(ost.str()); + return true; + } + } + if ( m_A3 > 0. && m_A4 > 0. ) { + + float B3=std::tan(m_A3)*m_A1; + float B4=m_A2/std::tan(m_A4); + float d=(m_A1-std::fabs(offCenter.x()))/(m_A1-B4)+(m_A2-std::fabs(offCenter.y()))/(m_A2-B3); + + if(d<1.) { + std::ostringstream ost; ost << m_label << " isOutOfAperture "; + + ost<<" x: "<<offCenter.x()<<" y: "<<offCenter.y()<<" m_A1 "<<m_A1<<" m_A2 "<<m_A2<<" m_A3 "<<m_A3<<" m_A4 "<<m_A4<<" d: "<<d; + particle.addMsg( ost.str() ); + return true; + } + } + + return false; + } else { std::stringstream sstr; sstr << " Unknown magnet aperture type " << m_aperType << "\n";