Hex  1.0
Hydrogen-electron collision solver
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
variables.h
Go to the documentation of this file.
1 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\
2  * *
3  * / / / / __ \ \ / / *
4  * / /__ / / / _ \ \ \/ / *
5  * / ___ / | |/_/ / /\ \ *
6  * / / / / \_\ / / \ \ *
7  * *
8  * Jakub Benda (c) 2014 *
9  * Charles University in Prague *
10  * *
11 \* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
12 
13 #ifndef HEX_VARIABLES
14 #define HEX_VARIABLES
15 
16 #include <iostream>
17 #include <string>
18 #include <map>
19 #include <vector>
20 
21 #include <sqlitepp/sqlitepp.hpp>
22 
23 #include "arrays.h"
24 #include "hex-db.h"
25 #include "vec3d.h"
26 
33 double change_units (eUnit A, eUnit B);
34 
41 double change_units (lUnit A, lUnit B);
42 
49 double change_units (aUnit A, aUnit B);
50 
56 std::string unit_name (eUnit u);
57 
63 std::string unit_name (lUnit u);
64 
70 std::string unit_name (aUnit u);
71 
75 inline std::ostream & operator << (std::ostream & os, std::pair<vec3d,vec3d> const & p)
76 {
77  os << p.first << " " << p.second;
78  return os;
79 }
80 
84 inline std::istream & operator >> (std::istream & is, std::pair<vec3d,vec3d> & p)
85 {
86  is >> p.first;
87  is >> p.second;
88  return is;
89 }
90 
94 template<typename T> std::vector<T> readStandardInput ()
95 {
96  std::vector<T> data;
97 
98  T x;
99  while (not std::cin.eof())
100  {
101  std::cin >> std::ws;
102  std::cin >> x;
103  std::cin >> std::ws;
104  data.push_back(x);
105  }
106 
107  return data;
108 }
109 
121 template <typename T> T As
122 (
123  std::map<std::string,std::string> const & dict,
124  std::string const & keyword,
125  std::string const & name
126 )
127 {
128  // check existence of the keyword
129  std::map<std::string,std::string>::const_iterator it = dict.find(keyword);
130  if (it == dict.end())
131  throw exception ("ERROR: \"%s\" requires specifying the parameter \"--%s\"!\n", name.c_str(), keyword.c_str());
132 
133  // convert to int
134  T x;
135  std::istringstream ss(it->second);
136  ss >> x;
137  return x;
138 }
139 
146 class Variable
147 {
148 public:
149 
151  virtual ~Variable() {}
152 
153  // getters
154 
156  virtual std::string const & id() const = 0;
157 
159  virtual std::string const & description() const = 0;
160 
162  virtual std::vector<std::string> const & SQL_CreateTable() const = 0;
163 
165  virtual std::vector<std::string> const & SQL_Update() const = 0;
166 
168  virtual std::vector<std::string> const & deps() const = 0;
169 
171  virtual std::vector<std::string> const & vdeps() const = 0;
172 
173  // others
174 
176  virtual bool initialize (sqlitepp::session & db) const = 0;
177 
179  virtual bool run
180  (
181  sqlitepp::session & db,
182  std::map<std::string,std::string> const & params
183  ) const = 0;
184 };
185 
193 {
194 public:
195 
196  VariableList();
197  ~VariableList();
198 
199  Variable const * get (std::string const & id) const;
200 
201  //
202  // STL vector interface
203  //
204  typedef std::vector<Variable*>::iterator iterator;
205  typedef std::vector<Variable*>::const_iterator const_iterator;
206  inline iterator begin() { return list.begin(); }
207  inline iterator end() { return list.end(); }
208  inline const_iterator begin() const { return list.begin(); }
209  inline const_iterator end() const { return list.end(); }
210 
211 private:
212 
213  std::vector<Variable*> list;
214 };
215 
234 #define AddNewVariableClass(ClassName) \
235  class ClassName : public Variable \
236 { \
237  public: \
238 \
239  bool initialize (sqlitepp::session & db) const; \
240 \
241  static const std::string Id; \
242  std::string const & id () const { return Id; } \
243 \
244  static const std::string Description; \
245  std::string const & description () const { return Description; } \
246 \
247  static const std::vector<std::string> Dependencies; \
248  std::vector<std::string> const & deps () const { return Dependencies; } \
249 \
250  static const std::vector<std::string> VecDependencies; \
251  std::vector<std::string> const & vdeps () const { return VecDependencies; } \
252 \
253  std::vector<std::string> const & SQL_CreateTable () const; \
254  std::vector<std::string> const & SQL_Update () const; \
255 \
256  bool run \
257  ( \
258  sqlitepp::session & db, \
259  std::map<std::string,std::string> const & params \
260  ) const; \
261 };
262 
264 AddNewVariableClass(TMatrix);
265 
267 AddNewVariableClass(ScatteringAmplitude);
268 
270 AddNewVariableClass(DifferentialCrossSection);
271 
273 AddNewVariableClass(IntegralCrossSection);
274 
276 AddNewVariableClass(CompleteCrossSection);
277 
279 AddNewVariableClass(ExtrapolatedCrossSection);
280 
282 AddNewVariableClass(CollisionStrength);
283 
285 AddNewVariableClass(MomentumTransfer);
286 
288 AddNewVariableClass(TotalCrossSection);
289 
291 AddNewVariableClass(IonizationF);
292 
294 AddNewVariableClass(BornFullTMatrix);
295 
297 AddNewVariableClass(IonizationAmplitude);
298 
300 AddNewVariableClass(TripleDifferentialCrossSection);
301 
303 AddNewVariableClass(StokesParameters);
304 
306 AddNewVariableClass(SpinAsymmetry);
307 
309 extern VariableList vlist;
310 
311 #endif
double change_units(eUnit A, eUnit B)
Energy units change.
Definition: variables.cpp:66
std::vector< Variable * >::iterator iterator
Definition: variables.h:204
virtual std::vector< std::string > const & vdeps() const =0
List of vectorizable scattering event parameters that have to be specified by user.
virtual std::vector< std::string > const & SQL_Update() const =0
SQL statements that update the table after insetion of new data.
const_iterator begin() const
Definition: variables.h:208
std::istream & operator>>(std::istream &is, std::pair< vec3d, vec3d > &p)
Definition: variables.h:84
std::string unit_name(eUnit u)
Energy unit name.
Definition: variables.cpp:126
Base class for scatering variables.
Definition: variables.h:146
aUnit
Definition: hex-db.h:40
virtual ~Variable()
destructor
Definition: variables.h:151
eUnit
Energy units.
Definition: hex-db.h:25
std::vector< T > readStandardInput()
Definition: variables.h:94
iterator end()
Definition: variables.h:207
List of variables.
Definition: variables.h:192
sqlitepp::session db
Definition: hex-db.cpp:31
#define AddNewVariableClass(ClassName)
Create class for a given variable name.
Definition: variables.h:234
virtual std::vector< std::string > const & SQL_CreateTable() const =0
SQL statements that create the required table, or empty vector if not needed.
iterator begin()
Definition: variables.h:206
T As(std::map< std::string, std::string > const &dict, std::string const &keyword, std::string const &name)
Convert dictionary entry to a numeric type.
Definition: variables.h:122
virtual bool initialize(sqlitepp::session &db) const =0
initialize (e.g.) by defining external routines for SQLite
VariableList vlist
forward declaration of the variable list &quot;vlist&quot;
Definition: hex-db.cpp:32
Exception class.
Definition: misc.h:39
virtual std::string const & id() const =0
String identification of the variable.
~VariableList()
Definition: variables.cpp:41
virtual std::string const & description() const =0
Longer description text for use in program help.
std::vector< Variable * >::const_iterator const_iterator
Definition: variables.h:205
const_iterator end() const
Definition: variables.h:209
lUnit
Output (length) units.
Definition: hex-db.h:33
virtual std::vector< std::string > const & deps() const =0
List of all scattering event parameters that have to be specified by user.
virtual bool run(sqlitepp::session &db, std::map< std::string, std::string > const &params) const =0
write out requested data
VariableList()
Definition: variables.cpp:19