ATLAS Offline Software
BenderDipole.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
3 */
4 
7 #include "ForwardTracker/Point.h"
8 
9 #include <iostream>
10 
11 namespace ForwardTracker {
12 
13  BenderDipole::BenderDipole(Side side, double length, double strength, double beamEnergy, Bendplane bendplane):
14  m_side (side),
15  m_length (length),
16  m_strength (strength),
17  m_beamEnergy(beamEnergy),
18  m_bendplane (bendplane)
19  {}
20 
22 
23  // Calculate (x, y) position and direction after deflection (charge dependent).
24  // Particle is at magnet front face and is moved to the rear face.
25 
26  // -----------------------------------------------------------------------------------------
27  // m_strength = k0 = L/R = L*B*speedoflight/momentum = deflection angle[rad]
28  //
29  // Separation dipoles bring beams to collision from nominal separation (194mm = 2*0.097m)
30  // Main bending dipoles guide beams along the LHC arc (first @ ~270 m)
31  // MBXW separation dipoles (D1): 6 normal conducting (3.40m long, from 59.622m to 84.352m)
32  // MBRC separation dipoles (D2): 1 super conducting (9.45m long, from 153.175m to 162.625m)
33  // MB bending dipoles: 1232 super conducting (14.30m long, first @ ~270m)
34  //
35  // Special case: MB dipoles
36  // k0 = L/radiusLHC/fLHCfilled = (14.3 m)/(4300 m)/(0.8*22km/27km) = 0.0033/0.65 = 0.0051
37  // = L*B*speedoflight/momentum = (14.3 m)*(8.33 Tesla)*(3e8 m/s)/(7e12eV) = 0.0051
38  // = 2*pi/(number of dipoles) = 6.28/1232 = 0.0051
39  //
40  // Position and direction are in the LHC arc frame (relative to on-momentum particles)
41  // -> for on-momentum particles: direction=(0,0,0) and position=(0.097m,0,0) for z>155m
42  // -----------------------------------------------------------------------------------------
43 
44  double aside = ForwardTrackerConstants::aside[m_side];
45  Point& direction = particle.direction_nc();
46  TransversePoint displacement = particle.displacement();
47 
48  displacement += m_length*aside/direction[2]*direction.transverse(); // Linear drift
49 
50  if (particle.charged()) { // Add effect of bending
51 
52  double angleB_on = -m_strength; // Deflection of on-momentum particles (strength<0 => bend in)
53  double angleB_off = angleB_on*m_beamEnergy/particle.momentum(); // Deflection of off-momentum particles (momentum rescaling)
54  bool isMBdipole = (m_length > 10.); // MB dipoles are identified by their length (14.3 m)
55 
56  displacement[m_bendplane] -= m_length*tan(aside*angleB_off/2);
57  displacement[m_bendplane] += m_length*tan(aside*angleB_on/2)*isMBdipole;
58 
59  direction.rotat(angleB_off - angleB_on*isMBdipole, m_bendplane);
60  }
61 
62  particle.updatePositionFromDisplacement(displacement);
63  }
64 }
Trk::ParticleSwitcher::particle
constexpr ParticleHypothesis particle[PARTICLEHYPOTHESES]
the array of masses
Definition: ParticleHypothesis.h:76
ForwardTracker::BenderDipole::m_bendplane
Bendplane m_bendplane
Definition: BenderDipole.h:31
ForwardTracker::BenderDipole::m_side
Side m_side
Definition: BenderDipole.h:27
ForwardTracker::BenderDipole::BenderDipole
BenderDipole(Side side, double length, double strength, double beamEnergy, Bendplane bendplane)
Definition: BenderDipole.cxx:13
ForwardTracker::ForwardTrackerConstants::aside
static const double aside[2]
Definition: ForwardTrackerConstants.h:20
ForwardTracker::Bendplane
Bendplane
Definition: ForwardTrackerConstants.h:12
ForwardTracker::Point
Definition: ForwardTracker/ForwardTracker/Point.h:15
IParticle.h
TRT::Hit::side
@ side
Definition: HitInfo.h:83
ForwardTracker::BenderDipole::bend
void bend(IParticle &) const
Definition: BenderDipole.cxx:21
Side
Definition: WaferTree.h:36
ForwardTracker::TransversePoint
Definition: ForwardTracker/ForwardTracker/TransversePoint.h:13
ForwardTracker::BenderDipole::m_length
double m_length
Definition: BenderDipole.h:28
drawFromPickle.tan
tan
Definition: drawFromPickle.py:36
ForwardTracker::IParticle
Definition: ForwardDetectors/ForwardTracker/ForwardTracker/IParticle.h:16
BenderDipole.h
ForwardTracker::BenderDipole::m_strength
double m_strength
Definition: BenderDipole.h:29
ForwardTracker::Point::transverse
TransversePoint transverse() const
Definition: ForwardTracker/ForwardTracker/Point.h:28
RunTileTBMonitoring.beamEnergy
beamEnergy
Definition: RunTileTBMonitoring.py:248
ForwardTracker::BenderDipole::m_beamEnergy
double m_beamEnergy
Definition: BenderDipole.h:30
ForwardTracker::Point::rotat
void rotat(double angle, bool bendplane)
Definition: ForwardTracker/src/Point.cxx:12
Point.h
ForwardTracker
Definition: ForwardTracker/ForwardTracker/Beamline.h:12
length
double length(const pvec &v)
Definition: FPGATrackSimLLPDoubletHoughTransformTool.cxx:26