ATLAS Offline Software
Loading...
Searching...
No Matches
MagnetFactory.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3*/
4
9
10#include <string>
11#include <stdexcept>
12
13namespace ForwardTracker {
14
15 std::string label(Magnet::Type type) {
16
17 if (type == Magnet::hbDipole) return "hbDipole";
18 if (type == Magnet::vbDipole) return "vbDipole";
19 if (type == Magnet::hfQuadrupole) return "hfQuadrupole";
20 if (type == Magnet::vfQuadrupole) return "vfQuadrupole";
21
22 return "NONE";
23 }
24
26 Side side,
27 double length,
28 double strength,
29 double beamEnergy) {
30
31 if (type == Magnet::hbDipole) return IBender::ConstPtr_t(new BenderDipole (side, length, strength, beamEnergy, hBendplane));
32 if (type == Magnet::vbDipole) return IBender::ConstPtr_t(new BenderDipole (side, length, strength, beamEnergy, vBendplane));
33 if (type == Magnet::hfQuadrupole) return IBender::ConstPtr_t(new BenderQuadrupole(side, length, strength, beamEnergy, hBendplane));
34 if (type == Magnet::vfQuadrupole) return IBender::ConstPtr_t(new BenderQuadrupole(side, length, strength, beamEnergy, vBendplane));
35
36 throw std::logic_error("unknown magnet type");
37 }
38
40 double y,
41 double z,
42 double strength,
43 double length,
44 const std::string& aperType,
45 double aper1,
46 double aper2,
47 double aper3,
48 double aper4,
49 double beamEnergy,
50 Side side,
52
53 IBender::ConstPtr_t bender(benderFactory(type, side, length, strength, beamEnergy));
54
55 return Magnet::ConstPtr_t(new Magnet(x, y, z, length, aperType, aper1, aper2, aper3, aper4, side, bender.get(), label(type)));
56 }
57}
double length(const pvec &v)
#define y
#define x
#define z
std::shared_ptr< const Magnet > ConstPtr_t
Magnet::ConstPtr_t MagnetFactory(double x, double y, double z, double strength, double length, const std::string &aperType, double A1, double A2, double A3, double A4, double beamEnergy, Side side, Magnet::Type type)
IBender::ConstPtr_t benderFactory(Magnet::Type type, Side side, double length, double strength, double beamEnergy)
std::string label(Magnet::Type type)