Kindfield
 All Classes Namespaces Files Functions Variables Enumerations Enumerator Properties Friends Pages
hartreefock.h
Go to the documentation of this file.
1 #ifndef POSITIONREADER_H
2 #define POSITIONREADER_H
3 
4 #include <armadillo>
5 #include <QObject>
6 #include <QQuickItem>
7 #include <QVector3D>
8 #include <GL/gl.h>
9 
10 using namespace arma;
11 
12 class HartreeFock : public QQuickItem
13 {
14  Q_OBJECT
15  Q_PROPERTY(int nSampleSteps READ nSampleSteps NOTIFY nSampleStepsChanged)
16  Q_PROPERTY(double voxelEdgeMin READ voxelEdgeMin WRITE setVoxelEdgeMin NOTIFY voxelEdgeMinChanged)
17  Q_PROPERTY(double voxelEdgeMax READ voxelEdgeMax WRITE setVoxelEdgeMax NOTIFY voxelEdgeMaxChanged)
18  Q_PROPERTY(double energy READ energy NOTIFY energyChanged)
19  Q_PROPERTY(QVector3D center READ center WRITE setCenter NOTIFY centerChanged)
20  Q_PROPERTY(int orbital READ orbital WRITE setOrbital NOTIFY orbitalChanged)
21  Q_PROPERTY(int orbitalCount READ orbitalCount NOTIFY orbitalCountChanged)
22  Q_PROPERTY(double contrast READ contrast WRITE setContrast NOTIFY contrastChanged)
23 public:
24  HartreeFock(QQuickItem* parent = 0);
25  virtual ~HartreeFock();
26  const cube& positions() const;
27  void generateRandomPoints();
28  int nSampleSteps() const
29  {
30  return m_nSampleSteps;
31  }
32  uint voxelDataWidth();
33  uint voxelDataHeight();
34  uint voxelDataDepth();
35 
36  GLuint *voxelData() const;
37 
38  double voxelEdgeMax() const
39  {
40  return m_voxelEdgeMax;
41  }
42 
43  double voxelEdgeMin() const
44  {
45  return m_voxelEdgeMin;
46  }
47 
48  QVector3D center() const
49  {
50  return m_center;
51  }
52 
53  double energy() const
54  {
55  return m_energy;
56  }
57 
58  int orbital() const
59  {
60  return m_orbital;
61  }
62 
63  int orbitalCount() const
64  {
65  return m_orbitalDensities.n_elem;
66  }
67 
68  double contrast() const
69  {
70  return m_contrast;
71  }
72 
73 public slots:
74  void setVoxelEdgeMax(double arg)
75  {
76  if (m_voxelEdgeMax != arg) {
77  m_voxelEdgeMax = arg;
78  emit voxelEdgeMaxChanged(arg);
79  }
80  }
81 
82  void setVoxelEdgeMin(double arg)
83  {
84  if (m_voxelEdgeMin != arg) {
85  m_voxelEdgeMin = arg;
86  emit voxelEdgeMinChanged(arg);
87  }
88  }
89 
90  void setCenter(QVector3D arg)
91  {
92  if (m_center != arg) {
93  m_center = arg;
94  emit centerChanged(arg);
95  }
96  }
97 
98  void setOrbital(int arg);
99 
100  void setContrast(double arg)
101  {
102  if (m_contrast != arg) {
103  m_contrast = arg;
104  if(arg != 0) {
105  m_contrastInverse = 1.0 / arg;
106  } else {
107  m_contrastInverse = 1e9;
108  }
109 // setupVoxelData();
110  emit contrastChanged(arg);
111  }
112  }
113 
114 signals:
115  void nSampleStepsChanged(int arg);
116  void dataChanged();
117 
118  void voxelEdgeMaxChanged(double arg);
119 
120  void voxelEdgeMinChanged(double arg);
121 
122  void centerChanged(QVector3D arg);
123 
124  void energyChanged(double arg);
125 
126  void orbitalChanged(int arg);
127 
128  void orbitalCountChanged(int arg);
129 
130  void contrastChanged(double arg);
131 
132 protected:
133  void loadPointsFromFile();
134  void setupVoxelData();
135 private:
136  cube m_filePositions;
137  field<cube> m_orbitalDensities;
138  cube m_totalDensity;
139  int m_nSampleSteps;
140  GLuint *m_voxelData;
141  double m_voxelEdgeMin;
142  double m_voxelEdgeMax;
143  QVector3D m_center;
144  double m_energy;
145  int m_orbital;
146  double m_contrast;
147  double m_contrastInverse;
148 };
149 
150 #endif // POSITIONREADER_H