ATLAS Offline Software
Loading...
Searching...
No Matches
TwissFile.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
3*/
4
8
9#include <fstream>
10#include <iomanip>
11
12namespace ForwardTracker {
13
14 std::shared_ptr<std::ifstream> TwissFile(const ConfigData& cData, const Side& side) {
15
16 if (side != beam1 && side != beam2) throw std::runtime_error("Allowed side values are beam1 or beam2.");
17
18 std::string fn = (side == beam1) ? cData.twissFile1 : cData.twissFile2;
19
20 std::shared_ptr<std::ifstream> twissFile(new std::ifstream);
21
22 ForwardTracker::openFile(fn, twissFile);
23
25
26 return twissFile;
27 }
28
29 void TwissFilePrint(std::ifstream& pfile, double endMarker) {
30
31 std::ios::fmtflags cout_flags = std::cout.flags();
32
33 std::cout << std::left
34 << std::setw(15) << "NAME"
35 << std::setw(15) << "KEYWORD"
36 << std::right
37 << std::setw( 8) << "S"
38 << std::setw( 8) << "L"
39 << std::setw( 8) << "BETX"
40 << std::setw( 8) << "BETY"
41 << std::setw(10) << "HKICK"
42 << std::setw(10) << "VKICK"
43 << std::setw(10) << "K0L"
44 << std::setw(10) << "K1L"
45 << std::setw(10) << "K2L"
46 << std::setw(10) << "K3L"
47 << std::setw(15) << "APERTYPE"
48 << std::setw( 8) << "APER_1"
49 << std::setw( 8) << "APER_2"
50 << std::setw( 8) << "APER_3"
51 << std::setw( 8) << "APER_4"
52 << std::endl;
53
54 while (pfile.peek() == '@' || pfile.peek() == '*' || pfile.peek() == '$') pfile.ignore(1000, '\n');
55
56 while (true) {
57
58 std::string NAME, KEYWORD, PARENT;
59 double ENDPOS, LENGTH;
60 double HKICK, VKICK;
61 double K0L, K1L, K2L, K3L;
62 double X, PX, BETX, ALFX, MUX, DX, DPX;
63 double Y, PY, BETY, ALFY, MUY, DY, DPY;
64 std::string APERTYPE;
65 double APER_1, APER_2, APER_3, APER_4;
66
67 pfile >> NAME >> KEYWORD >> PARENT >> ENDPOS >> LENGTH
68 >> HKICK >> VKICK
69 >> K0L >> K1L >> K2L >> K3L
70 >> X >> Y >> PX >> PY
71 >> BETX >> BETY >> ALFX >> ALFY >> MUX >> MUY
72 >> DX >> DY >> DPX >> DPY
73 >> APERTYPE
74 >> APER_1 >> APER_2 >> APER_3 >> APER_4;
75
76 if (ENDPOS > endMarker) break;
77
78 if (NAME.find("DRIFT") == 1) continue;
79
80 std::cout.precision(2);
81 std::cout << std::fixed
82 << std::left
83 << std::setw(15) << NAME
84 << std::setw(15) << KEYWORD
85 << std::right
86 << std::setw( 8) << ENDPOS
87 << std::setw( 8) << LENGTH
88 << std::setw( 8) << BETX
89 << std::setw( 8) << BETY;
90 std::cout.precision(6);
91 std::cout << std::setw(10) << HKICK
92 << std::setw(10) << VKICK
93 << std::setw(10) << K0L
94 << std::setw(10) << K1L
95 << std::setw(10) << K2L
96 << std::setw(10) << K3L;
97 std::cout.precision(4);
98 std::cout << std::setw(15) << APERTYPE
99 << std::setw( 8) << APER_1
100 << std::setw( 8) << APER_2
101 << std::setw( 8) << APER_3
102 << std::setw( 8) << APER_4
103 << std::endl;
104 }
105
106 std::cout.flags(cout_flags);
107
108 pfile.clear();
109 pfile.seekg(0, std::ios::beg);
110 }
111
112 double GetBeamEnergy(std::ifstream& pfile) {
113
114 double beamEnergy = -1;
115 std::string dummy;
116
117 while (pfile >> dummy) { if (dummy == "ENERGY") { pfile >> dummy; pfile >> beamEnergy; break; } }
118
119 if (beamEnergy == -1) throw std::runtime_error("Could not read beamEnergy from twiss file");
120
121 pfile.clear();
122 pfile.seekg(0, std::ios::beg);
123
124 return beamEnergy;
125 }
126}
static const int K0L
Definition AtlasPID.h:112
void TwissFilePrint(std::ifstream &, double endMarker)
Definition TwissFile.cxx:29
double GetBeamEnergy(std::ifstream &)
void openFile(const std::string &fname, streamptr &strm)
std::shared_ptr< std::ifstream > TwissFile(const ConfigData &, const Side &)
Definition TwissFile.cxx:14