ATLAS Offline Software
ForwardDetectors
ForwardTracker
src
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
5
#include "
ForwardTracker/BenderDipole.h
"
6
#include "
ForwardTracker/IParticle.h
"
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
21
void
BenderDipole::bend
(
IParticle
&
particle
)
const
{
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
Generated on Mon Dec 23 2024 21:07:27 for ATLAS Offline Software by
1.8.18