31 for (
const auto& surfaceTriple : m_referenceSurfaceTriples) {
32 for (
const auto* surface : surfaceTriple) {
52 if (m_referenceSurfaceRadius.size() == m_referenceSurfaceHalflength.size()) {
54 m_referenceSurfaces = m_referenceSurfaceRadius.size();
60 for ( ; radiusIter != radiusIterEnd; ++radiusIter, ++halfZIter){
62 std::vector< const Trk::Surface*> surfaceTriplet;
67 ATH_MSG_INFO(
"Creating surfaces: R " << *radiusIter <<
" Z " << *halfZIter);
68 m_referenceSurfaceTriples.push_back(surfaceTriplet);
70 m_referenceSurfaceNegativeBoundary.push_back(atan2(*radiusIter,-(*halfZIter)));
71 m_referenceSurfacePositiveBoundary.push_back(atan2(*radiusIter,(*halfZIter)));
76 m_gaussDist =
new Rndm::Numbers(randSvc(), Rndm::Gauss(0.,1.));
77 m_flatDist =
new Rndm::Numbers(randSvc(), Rndm::Flat(0.,1.));
79 msg(MSG::INFO) <<
"initialize() successful in " <<
endmsg;
81 if( m_eventsPerExecute > 0 ){
82 m_perigees.reserve(m_eventsPerExecute);
83 for(
int i=0;
i<m_eventsPerExecute;++
i ) m_perigees.push_back(generatePerigee());
86 return StatusCode::SUCCESS;
94 return StatusCode::SUCCESS;
99 double d0 = m_gaussDist->shoot() * m_sigmaD0;
100 double z0 = m_gaussDist->shoot() * m_sigmaZ0;
101 double phi = m_minPhi + (m_maxPhi-m_minPhi)* m_flatDist->shoot();
102 double eta = m_minEta + m_flatDist->shoot()*(m_maxEta-m_minEta);
104 double p = m_minP + m_flatDist->shoot()*(m_maxP-m_minP);
105 double charge = (m_flatDist->shoot() > 0.5 ) ? -1. : 1.;
116 if( m_eventsPerExecute <= 0 ) runTest(generatePerigee());
117 else for(
int i=0;
i<m_eventsPerExecute;++
i ) runTest(m_perigees[
i]);
118 return StatusCode::SUCCESS;
130 std::vector< std::vector< const Trk::Surface* > >::const_iterator surfaceTripleIter = m_referenceSurfaceTriples.begin();
131 std::vector< std::vector< const Trk::Surface* > >::const_iterator surfaceTripleIterEnd = m_referenceSurfaceTriples.end();
138 const EventContext& ctx = Gaudi::Hive::currentContext();
139 for (
int refSurface = 0 ; surfaceTripleIter != surfaceTripleIterEnd; ++surfaceTripleIter, ++negRefIter, ++posRefIter ){
141 refSurface =
theta < (*posRefIter) ? 2 : 1;
142 refSurface =
theta > (*negRefIter) ? 0 : 1;
144 const Trk::Surface* destinationSurface = (*surfaceTripleIter)[refSurface];
146 const auto* destParameters =
148 ? m_extrapolator->extrapolate(
152 propagationDirection,
161 propagationDirection,
163 *m_magFieldProperties,
167 if (destParameters) {
170 destParameters->position().x() <<
", " <<
171 destParameters->position().y() <<
", " <<
172 destParameters->position().z() );
173 }
else if (!destParameters)
176 delete destParameters;