C++InterfacetoTauola
ew_born.cxx
1 #include "TauSpinner/ew_born.h"
2 #include <fstream>
3 using namespace std;
4 
5 namespace TauSpinner {
6 
7 static 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 
16 bool 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