ImageD  v2_7_5 (24.06.22)
ImageD is an image processing software designed for rapid prototyping and implementing algorithms and solutions for science, research and teaching.
d_makro_curvefitting.h
Go to the documentation of this file.
1 /************************************
2  * added: 08.08.2019 *
3  * author: David Eilenstein *
4  * contact: D.Eilenstein@gsi.de *
5  * project: ImageD *
6  * facility: GSI Darmstadt, Ger *
7  ************************************/
8 
9 #ifndef D_MAKRO_CURVEFITTING_H
10 #define D_MAKRO_CURVEFITTING_H
11 
12 //own
13 #include <d_enum.h>
14 #include <d_error_handler.h>
15 #include <d_plot.h>
16 #include <d_stat.h>
17 #include <d_table.h>
18 #include <d_storage.h>
19 #include <d_viewer.h>
20 
21 //Qt
22 #include <QMainWindow>
23 #include <QFileDialog>
24 #include <QFileInfo>
25 #include <QFileInfoList>
26 #include <QDir>
27 #include <QDateTime>
28 #include <QComboBox>
29 #include <QCloseEvent>
30 #include <QResizeEvent>
31 #include <QInputDialog>
32 #include <QSpinBox>
33 #include <QDoubleSpinBox>
34 #include <QPlainTextEdit>
35 
36 //Qt::Charts
37 #include <QChartView>
38 #include <QChart>
39 
40 //general
41 #include <iostream>
42 #include <sstream>
43 #include <fstream>
44 #include <vector>
45 #include <algorithm>
46 
47 //openCV
48 #include <opencv2/core/core.hpp>
49 #include <opencv2/highgui/highgui.hpp>
50 #include <opencv2/imgproc/imgproc.hpp>
51 
52 //namespaces
53 using namespace std;
54 //using namespace cv; (prohibited because of abigous names with qtdatavisualization)
55 #include <d_opencv_typedefs.h>
56 
57 namespace Ui {
59 }
60 
61 class D_MAKRO_CurveFitting : public QMainWindow
62 {
63  Q_OBJECT
64 
65 public:
66  explicit D_MAKRO_CurveFitting(D_Storage *pStorage ,QWidget *parent = 0);
68 
69  void closeEvent(QCloseEvent *event);
70  void resizeEvent(QResizeEvent *event);
71  void set_ClosingPossible(bool closeable) {ClosingPossible = closeable;}
72 
73  void UpdateUi();
74 
75  void Populate_CB_Single(QComboBox *CB, QStringList QSL, int index_init);
76  void Populate_CB();
77  void ParamInitUiVectors();
78  void DataInitUiVectors();
79 
80 private slots:
81  void FittingStart();
82  void DataRead();
83  void DataWeightsRead();
84  void ParametersRead();
85  void ParametersCount();
86  void ParameterSpaceInit();
87  void FittingLoop();
88  void ParameterSpaceShow();
89  void ParameterSpaceWrite(int i_d1, int i_w1, int i_d2, int i_w2, double val);
90 
91 
92  void Update_View();
93 
94  void PlotTest_PbBi();
95 
96  void on_doubleSpinBox_step_d1_valueChanged(double arg1);
97 
98  void on_doubleSpinBox_step_w1_valueChanged(double arg1);
99 
100  void on_doubleSpinBox_step_d2_valueChanged(double arg1);
101 
102  void on_doubleSpinBox_step_w2_valueChanged(double arg1);
103 
104 
105  void on_doubleSpinBox_range_t_max_valueChanged(double arg1);
106 
107  void on_doubleSpinBox_range_a_max_valueChanged(double arg1);
108 
109  void on_spinBox_VisDispPlane_d1_valueChanged(int arg1);
110 
111  void on_spinBox_VisDispPlane_w1_valueChanged(int arg1);
112 
113  void on_spinBox_VisDispPlane_d2_valueChanged(int arg1);
114 
115  void on_spinBox_VisDispPlane_w2_valueChanged(int arg1);
116 
117  void on_comboBox_VisDispPlane_Plane_currentIndexChanged(int index);
118 
119 private:
120  Ui::D_MAKRO_CurveFitting *ui;
121 
122  bool ClosingPossible = false;
123 
124  bool state_function_selected = false;
125  bool state_data_read = false;
126  bool state_parameters_read = false;
127 
128  //Store
129  D_Storage *pStore;
130 
131  //Data
132  vector<vector<vector<double>>> vvv_Data_Set_TA;
133  vector<int> v_number_of_points;
134  vector<double> v_data_score_weights;
135  vector<QSpinBox*> v_data_score_weights_ui;
136  vector<QPlainTextEdit*> v_Data_ui;
137 
138 
139 
140  //Parameters
141  vector<QLabel*> v_param_cur_ui;
142  vector<QLabel*> v_param_opt_ui;
143  vector<QDoubleSpinBox*> v_param_min_ui;
144  vector<QDoubleSpinBox*> v_param_max_ui;
145  vector<QDoubleSpinBox*> v_param_step_ui;
146  vector<double> v_param_cur;
147  vector<double> v_param_min;
148  vector<double> v_param_max;
149  vector<double> v_param_step;
150  vector<double> v_param_opt;
151  vector<int> v_param_count;
152  int param_space_size = 0;
153 
154  //Parameter Space
155  D_Viewer View_ParamSpace;
156  D_VisDat_Obj VD_ParamSpace;
157  Mat MA_ParamSpaceSlice;
158 
159  //Functions
160 
161  //Testing
162  long double Test_Combi(long double t, long double w1, long double d1, long double w2, long double d2, int set);
163  long double Test_F3_Pb(long double t, long double w1, long double d1, long double w2, long double d2);
164  long double Test_F4_Bi(long double t, long double w1, long double d1, long double w2, long double d2);
165 
166  //DGL
167  long double Franzi_Combi(long double t, long double w1, long double d1, long double w2, long double d2, int set, bool past);
168  long double Franzi_Pb_Combi(long double t, long double w1, long double d1, long double w2, long double d2);
169  long double Franzi_Bi_Combi(long double t, long double w1, long double d1, long double w2, long double d2);
170 
171  //pre 60 min
172  long double Franzi_n1_Rn_pre60min(long double t, long double ld);
173  long double Franzi_n2_Po_pre60min(long double t, long double ld);
174  long double Franzi_n3_Pb_pre60min(long double t, long double ld);
175  long double Franzi_n4_Bi_pre60min(long double t, long double ld);
176 
177  //past 60min
178  long double Franzi_n1_Rn_past60min(long double t, long double ld, long double n10);
179  long double Franzi_n2_Po_past60min(long double t, long double ld, long double n10, long double n20);
180  long double Franzi_n3_Pb_past60min(long double t, long double ld, long double n10, long double n20, long double n30);
181  long double Franzi_n4_Bi_past60min(long double t, long double ld, long double n10, long double n20, long double n30, long double n40);
182 
183  long double Franzi_n1_Rn_past60min_single(long double t, long double ld);
184  long double Franzi_n2_Po_past60min_single(long double t, long double ld);
185  long double Franzi_n3_Pb_past60min_single(long double t, long double ld);
186  long double Franzi_n4_Bi_past60min_single(long double t, long double ld);
187 
188  //60min
189  long double Franzi_n10_Rn_60min(long double w1, long double d1, long double w2, long double d2);
190  long double Franzi_n20_Po_60min(long double w1, long double d1, long double w2, long double d2);
191  long double Franzi_n30_Pb_60min(long double w1, long double d1, long double w2, long double d2);
192  long double Franzi_n40_Bi_60min(long double w1, long double d1, long double w2, long double d2);
193 
194  long double Franzi_n10_Rn_60min_single(long double ld);
195  long double Franzi_n20_Po_60min_single(long double ld);
196  long double Franzi_n30_Pb_60min_single(long double ld);
197  long double Franzi_n40_Bi_60min_single(long double ld);
198 
199 
200 
201 
202  QChartView *pChartView;
203 
204  //Error handler
205  D_Error_Handler ER;
206  void ERR(int err, QString func = "not specified", QString detail = "not specified");
207 
208  //CONSTANTS
209  const double t_fix = 60; //minutes
210  const double t_min = 0; //minutes (min displayed)
211  double t_max = 240; //minutes (max displayed)
212  double a_display_min_max = 2000;
213  const double l1 = log(2) / (3.80 * 60.0 * 24.0);
214  const double l2 = log(2) / (3.10);
215  const double l3 = log(2) / (26.80);
216  const double l4 = log(2) / (19.80);
217 
218  enum C_PARAM
219  {
220  c_PARAM_D1,
221  c_PARAM_W1,
222  c_PARAM_D2,
223  c_PARAM_W2,
224  c_PARAM_NUMBER_OF
225  };
226 
227  enum C_KOORD
228  {
229  c_KOORD_T,
230  c_KOORD_A,
231  c_KOORD_NUMBER_OF
232  };
233 
234  enum C_DATASET
235  {
236  c_DATA_PB_295,
237  c_DATA_PB_352,
238  c_DATA_BI,
239  c_DATA_NUMBER_OF
240  };
241  QStringList QSL_DataSet =
242  {
243  "Plumbum 295",
244  "Plumbum 352",
245  "Bismut"
246  };
247 
248  enum C_PLANES_DW
249  {
250  c_PLANE_DW_D1_W1,
251  c_PLANE_DW_D1_D2,
252  c_PLANE_DW_D1_W2,
253  c_PLANE_DW_W1_D2,
254  c_PLANE_DW_W1_W2,
255  c_PLANE_DW_D2_W2,
256  c_PLANE_DW_NUMBER_OF
257  };
258  const QStringList QSL_PlanesDW =
259  {
260  "x_d1 y_w1",
261  "x_d1 y_d2",
262  "x_d1 y_w2",
263  "x_w1 y_d2",
264  "x_w1 y_w2",
265  "x_d2 y_w2"
266  };
267 };
268 
269 #endif // D_MAKRO_CURVEFITTING_H
Mat
cv::Mat Mat
Definition: d_opencv_typedefs.h:28
D_Storage::set_dir_M_RadonCurveFit
void set_dir_M_RadonCurveFit(QString path)
Definition: d_storage.h:111
D_Viewer::Update_View
void Update_View()
D_Viewer::Update_View Starts the workflow to show an image.
Definition: d_viewer.cpp:2096
D_Stat::Optimize_Init
static double Optimize_Init(int opt_type)
Definition: d_stat.cpp:4185
D_MAKRO_CurveFitting::Populate_CB_Single
void Populate_CB_Single(QComboBox *CB, QStringList QSL, int index_init)
Definition: d_makro_curvefitting.cpp:100
D_VisDat_Dim::set_size_X
void set_size_X(int X)
Definition: d_visdat_dim.h:90
d_viewer.h
d_plot.h
D_MAKRO_CurveFitting::Populate_CB
void Populate_CB()
Definition: d_makro_curvefitting.cpp:109
D_Viewer
The D_Viewer class Display images (Mat) in QGraphicsView in the user interface.
Definition: d_viewer.h:58
D_Storage
The D_Storage class Used for storing data. There is only one instance in D_MainWindow .
Definition: d_storage.h:49
D_Viewer::Update_Image
void Update_Image(Mat *MA_new)
D_Viewer::Update_Image Set and show image.
Definition: d_viewer.cpp:2079
d_table.h
D_VisDat_Proc::Read_2D_Plane
static int Read_2D_Plane(Mat *pMA_Out, D_VisDat_Obj *pVD_In, D_VisDat_Slice_2D InPlane)
Definition: d_visdat_proc.cpp:2946
QSL_Optimize_1D
const QStringList QSL_Optimize_1D
Definition: d_enum.h:963
D_Viewer::Set_Transformation_Mode
void Set_Transformation_Mode(bool smooth)
D_Viewer::Set_Transformation_Mode Set transformation mode to fit an image to a viewer of different si...
Definition: d_viewer.cpp:2213
c_OPT_1D_MINIMUM
@ c_OPT_1D_MINIMUM
Definition: d_enum.h:957
D_MAKRO_CurveFitting::UpdateUi
void UpdateUi()
Definition: d_makro_curvefitting.cpp:92
D_VisDat_Dim
The D_VisDat_Dim class Represents a 6D volume.
Definition: d_visdat_dim.h:49
D_VisDat_Dim::set_size_P
void set_size_P(int P)
Definition: d_visdat_dim.h:95
D_Error_Handler::ERR
void ERR(int err, QString sender, QString func, QString detail)
D_Error_Handler::ERR pops an error message if an error occured and/or streams it to a csv file.
Definition: d_error_handler.cpp:23
D_MAKRO_CurveFitting
Definition: d_makro_curvefitting.h:62
D_MAKRO_CurveFitting::ParamInitUiVectors
void ParamInitUiVectors()
Definition: d_makro_curvefitting.cpp:116
D_VisDat_Obj
The D_VisDat_Obj class Represents a 6D image.
Definition: d_visdat_obj.h:51
D_VisDat_Obj::pMA_full
Mat * pMA_full()
Definition: d_visdat_obj.h:61
D_MAKRO_CurveFitting::set_ClosingPossible
void set_ClosingPossible(bool closeable)
Definition: d_makro_curvefitting.h:71
D_Stat::Optimize
static bool Optimize(double val, double *opt, int opt_type)
Definition: d_stat.cpp:4140
D_VisDat_Dim::set_size_Y
void set_size_Y(int Y)
Definition: d_visdat_dim.h:91
D_Plot::Plot_XY_Fit
static int Plot_XY_Fit(QChartView *pChartView, vector< vector< vector< double >>> vvv_XY_Data_Measure, vector< vector< vector< double >>> vvv_XY_Data_Fit, QString name_title, QStringList qsl_name_series, QString name_x, QString name_y)
Definition: d_plot.cpp:3307
D_Error_Handler
The D_Error_Handler class takes error codes from D_ERROR_ENUM and shows a popup if an error occures.
Definition: d_error_handler.h:38
D_MAKRO_CurveFitting::~D_MAKRO_CurveFitting
~D_MAKRO_CurveFitting()
Definition: d_makro_curvefitting.cpp:67
D_VisDat_Dim::set_size_T
void set_size_T(int T)
Definition: d_visdat_dim.h:93
D_Storage::dir_M_RadonCurveFit
QDir * dir_M_RadonCurveFit()
Definition: d_storage.h:83
D_MAKRO_CurveFitting::DataInitUiVectors
void DataInitUiVectors()
Definition: d_makro_curvefitting.cpp:173
D_VisDat_Slice_2D
The D_VisDat_Slice_2D class Represents a 2D slice through a D_VisDat_Obj.
Definition: d_visdat_slice_2d.h:18
D_VisDat_Obj::Info_Dims
QString Info_Dims()
Definition: d_visdat_obj.cpp:216
D_Viewer::set_GV
void set_GV(QGraphicsView *GV_ui)
Definition: d_viewer.cpp:49
D_Plot::Plot_Empty
static int Plot_Empty(QChartView *pChartView, QString QS_Text="No_Additional_Information")
Definition: d_plot.cpp:16
D_VisDat_Dim::set_size_Z
void set_size_Z(int Z)
Definition: d_visdat_dim.h:92
D_VisDat_Dim::set_size_S
void set_size_S(int S)
Definition: d_visdat_dim.h:94
Ui
Definition: d_analysiswindow.h:58
d_storage.h
d_makro_curvefitting.h
c_DIM_NUMBER_OF
@ c_DIM_NUMBER_OF
Definition: d_enum.h:241
d_opencv_typedefs.h
QSL_StatList2D
const QStringList QSL_StatList2D
Definition: d_enum.h:877
d_enum.h
D_Viewer::Save_Image
QString Save_Image()
D_Viewer::Save_Image Saves the image at FI_LastSaved.
Definition: d_viewer.cpp:2157
D_MAKRO_CurveFitting::D_MAKRO_CurveFitting
D_MAKRO_CurveFitting(D_Storage *pStorage, QWidget *parent=0)
Definition: d_makro_curvefitting.cpp:12
Vec
cv::Vec< T, N > Vec
Definition: d_opencv_typedefs.h:44
d_error_handler.h
c_STAT_2D_DIFF_REL_MEAN
@ c_STAT_2D_DIFF_REL_MEAN
Definition: d_enum.h:866
D_MAKRO_CurveFitting::closeEvent
void closeEvent(QCloseEvent *event)
Definition: d_makro_curvefitting.cpp:72
D_MAKRO_CurveFitting::resizeEvent
void resizeEvent(QResizeEvent *event)
Definition: d_makro_curvefitting.cpp:86
d_stat.h
D_Stat::Calc_Stats_2D
static int Calc_Stats_2D(vector< double > *v_stats, vector< double > v_data_x, vector< double > v_data_y)
Definition: d_stat.cpp:348