ATLAS Offline Software
Loading...
Searching...
No Matches
ForwardTracker::BenderQuadrupole Class Reference

#include <BenderQuadrupole.h>

Inheritance diagram for ForwardTracker::BenderQuadrupole:
Collaboration diagram for ForwardTracker::BenderQuadrupole:

Public Types

typedef std::shared_ptr< IBenderConstPtr_t

Public Member Functions

 BenderQuadrupole (Side side, double length, double strength, double beamEnergy, Bendplane bendplane)
void bend (IParticle &) const

Private Attributes

Side m_side
double m_length
double m_strength
double m_beamEnergy
Bendplane m_bendplane

Detailed Description

Definition at line 15 of file BenderQuadrupole.h.

Member Typedef Documentation

◆ ConstPtr_t

typedef std::shared_ptr<IBender> ForwardTracker::IBender::ConstPtr_t
inherited

Definition at line 21 of file ForwardTracker/ForwardTracker/IBender.h.

Constructor & Destructor Documentation

◆ BenderQuadrupole()

ForwardTracker::BenderQuadrupole::BenderQuadrupole ( Side side,
double length,
double strength,
double beamEnergy,
Bendplane bendplane )

Member Function Documentation

◆ bend()

void ForwardTracker::BenderQuadrupole::bend ( IParticle & particle) const
virtual

Implements ForwardTracker::IBender.

Definition at line 20 of file BenderQuadrupole.cxx.

20 {
21
22 // Calculates (x, y) position and direction after deflection (charge dependent).
23 // Particle is at magnet front face and is moved to the rear face.
24
26 Point& direction = particle.direction_nc();
27 TransversePoint displacement = particle.displacement();
28
29 if (!particle.charged()) displacement += m_length*aside/direction[2]*direction.transverse(); // Linear drift
30 else {
31
32 double exitPos[2];
33 double exitDir[2];
34
35 double qk = std::sqrt(m_beamEnergy*std::fabs(m_strength)/m_length/particle.momentum());
36 double qkl = aside*qk*m_length;
37
38 exitPos[ m_bendplane] = std::cos (qkl)*displacement[ m_bendplane] + std::sin (qkl)*direction[ m_bendplane]/direction[2]/qk;
39 exitDir[ m_bendplane] = -qk*std::sin (qkl)*displacement[ m_bendplane] + std::cos (qkl)*direction[ m_bendplane]/direction[2];
40
41 exitPos[!m_bendplane] = std::cosh(qkl)*displacement[!m_bendplane] + std::sinh(qkl)*direction[!m_bendplane]/direction[2]/qk;
42 exitDir[!m_bendplane] = +qk*std::sinh(qkl)*displacement[!m_bendplane] + std::cosh(qkl)*direction[!m_bendplane]/direction[2];
43
44 displacement[ m_bendplane] = exitPos[ m_bendplane];
45 displacement[!m_bendplane] = exitPos[!m_bendplane];
46
47 direction[ m_bendplane] = exitDir[ m_bendplane];
48 direction[!m_bendplane] = exitDir[!m_bendplane];
49
50 direction[2] = aside/std::sqrt(1 + direction[0]*direction[0] + direction[1]*direction[1]);
51
52 direction[0] *= direction[2];
53 direction[1] *= direction[2];
54 }
55
56 particle.updatePositionFromDisplacement(displacement);
57 }
ChargedTracksWeightFilter::Spline::Point Point
constexpr ParticleHypothesis particle[PARTICLEHYPOTHESES]
the array of masses

Member Data Documentation

◆ m_beamEnergy

double ForwardTracker::BenderQuadrupole::m_beamEnergy
private

Definition at line 28 of file BenderQuadrupole.h.

◆ m_bendplane

Bendplane ForwardTracker::BenderQuadrupole::m_bendplane
private

Definition at line 29 of file BenderQuadrupole.h.

◆ m_length

double ForwardTracker::BenderQuadrupole::m_length
private

Definition at line 26 of file BenderQuadrupole.h.

◆ m_side

Side ForwardTracker::BenderQuadrupole::m_side
private

Definition at line 25 of file BenderQuadrupole.h.

◆ m_strength

double ForwardTracker::BenderQuadrupole::m_strength
private

Definition at line 27 of file BenderQuadrupole.h.


The documentation for this class was generated from the following files: