C++ Interface to Tauola
ew_born.cxx
1#include "TauSpinner/ew_born.h"
2#include <fstream>
3using namespace std;
4
5namespace TauSpinner {
6
7static EWborn::complex ParseComplex(std::ifstream &in)
8{
9 double x, y;
10
11 in >> x >> y;
12
13 return EWborn::complex(x, y);
14}
15
16bool EWborn::FillFromTable(const char *tableLocation)
17{
18 ifstream in(tableLocation);
19
20 if (!in.is_open())
21 return false;
22
23 /* Parse HEADER */
24 in >> MZ >> MH >> MT >> SWSQ >> GZ >> MW >> GW;
25
26 if (in.fail())
27 return false;
28
29 /* Buffers */
30 char buf[16];
31 int idx, idx2;
32
33 /* Parse SECTION A */
34 for (int n = 0; n < NA; ++n)
35 {
36 in >> buf >> idx >> EEa[n];
37
38 if (in.fail() || idx != n)
39 return false;
40
41 for (int ff = 0; ff < FF_LEN; ++ff)
42 {
43 FFa[n][ff] = ParseComplex(in);
44
45 if (in.fail())
46 return false;
47 }
48
49 for (int fs = 0; fs < FS_LEN; ++fs)
50 {
51 in >> FSa[n][fs];
52
53 if (in.fail())
54 return false;
55 }
56 }
57
58 /* Parse SECTION B */
59 for (int n = 0; n < NB; ++n)
60 {
61 for (int m = 0; m < MB; ++m)
62 {
63 in >> buf >> idx >> EEb[n] >> idx2;
64
65 if (in.fail() || idx != n || idx2 != m)
66 return false;
67
68 for (int ff = 0; ff < FF_LEN; ++ff)
69 {
70 FFb[n][m][ff] = ParseComplex(in);
71
72 if (in.fail())
73 return false;
74 }
75 }
76
77 for (int fs = 0; fs < FS_LEN; ++fs)
78 {
79 in >> FSb[n][fs];
80
81 if (in.fail())
82 return false;
83 }
84 }
85
86 /* Parse SECTION C */
87 for (int n = 0; n < NC; ++n)
88 {
89 for (int m = 0; m < MC; ++m)
90 {
91 in >> buf >> idx >> EEc[n] >> idx2 >> COSc[m];
92
93 if (in.fail() || idx != n || idx2 != m)
94 return false;
95
96 for (int ff = 0; ff < FF_LEN; ++ff)
97 {
98 FFc[n][m][ff] = ParseComplex(in);
99
100 if (in.fail())
101 return false;
102 }
103 }
104
105 for (int fs = 0; fs < FS_LEN; ++fs)
106 {
107 in >> FSc[n][fs];
108
109 if (in.fail())
110 return false;
111 }
112 }
113
114 /* Parse SECTION D */
115 for (int n = 0; n < ND; ++n)
116 {
117 for (int m = 0; m < MD; ++m)
118 {
119 in >> buf >> idx >> EEd[n] >> idx2 >> COSd[m];
120
121 if (in.fail() || idx != n || idx2 != m)
122 return false;
123
124 for (int ff = 0; ff < FF_LEN; ++ff)
125 {
126 FFd[n][m][ff] = ParseComplex(in);
127
128 if (in.fail())
129 return false;
130 }
131 }
132
133 for (int fs = 0; fs < FS_LEN; ++fs)
134 {
135 in >> FSd[n][fs];
136
137 if (in.fail())
138 return false;
139 }
140 }
141
142 return true;
143}
144
145} // namespace TauSpinner