All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
StatisticsDialog.cpp
Go to the documentation of this file.
1 /* Copyright (C) 2008 National Institute For Space Research (INPE) - Brazil.
2 
3  This file is part of the TerraLib - a Framework for building GIS enabled applications.
4 
5  TerraLib is free software: you can redistribute it and/or modify
6  it under the terms of the GNU Lesser General Public License as published by
7  the Free Software Foundation, either version 3 of the License,
8  or (at your option) any later version.
9 
10  TerraLib is distributed in the hope that it will be useful,
11  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  GNU Lesser General Public License for more details.
14 
15  You should have received a copy of the GNU Lesser General Public License
16  along with TerraLib. See COPYING. If not, write to
17  TerraLib Team at <terralib-team@terralib.org>.
18  */
19 
20 /*!
21  \file terralib/vp/AggregationDialog.cpp
22 
23  \brief A dialog for aggregation operation
24 */
25 
26 // TerraLib
27 #include "../../dataaccess/dataset/DataSet.h"
28 #include "../../dataaccess/utils/Utils.h"
29 #include "../../datatype/Enums.h"
30 #include "../../datatype/Property.h"
31 #include "../core/Config.h"
32 #include "../core/Exception.h"
33 #include "../core/NumericStatisticalSummary.h"
34 #include "../core/StringStatisticalSummary.h"
35 #include "../core/SummaryFunctions.h"
36 #include "../core/Utils.h"
37 #include "StatisticsDialog.h"
38 #include "ui_StatisticsDialogForm.h"
39 
40 // Qt
41 #include <QListWidget>
42 #include <QMessageBox>
43 
44 // Boost
45 #include <boost/lexical_cast.hpp>
46 
47 te::stat::StatisticsDialog::StatisticsDialog(QWidget* parent, Qt::WindowFlags f)
48  :QDialog(parent, f),
49  m_ui(new Ui::StatisticsDialogForm),
50  m_dset(0)
51 {
52  m_ui->setupUi(this);
53 
54  connect(m_ui->m_savePushButton, SIGNAL(clicked()), this, SLOT(onSavePushButtonClicked()));
55  connect(m_ui->m_cancelPushButton, SIGNAL(clicked()), this, SLOT(onCancelPushButtonClicked()));
56 
57 }
58 
60 {
61 }
62 
63 void te::stat::StatisticsDialog::setStatistics(te::da::DataSet* dataSet, const std::string prop)
64 {
65  m_dset = dataSet;
66  m_prop = prop;
67  int index = te::da::GetPropertyIndex(m_dset, m_prop);
68  int propType = m_dset->getPropertyDataType(index);
69 
70  m_ui->m_datasourceTypeTitleLabel->setText("Statistics: " + QString(prop.c_str()));
71 
72  if(propType == te::dt::STRING_TYPE)
73  {
74  std::vector<std::string> values = te::stat::GetStringData(m_dset, m_prop);
75 
77 
78  if(!values.empty())
79  {
81  m_ui->m_statTableWidget->setRowCount(0);
82 
83  m_ui->m_statTableWidget->insertRow(0);
84  QTableWidgetItem* itemParameter = new QTableWidgetItem(QString(te::stat::GetStatSummaryFullName(te::stat::MIN_VALUE).c_str()));
85  QTableWidgetItem* itemValue = new QTableWidgetItem(QString(ss.m_minVal.c_str()));
86  m_ui->m_statTableWidget->setItem(0, 0, itemParameter);
87  m_ui->m_statTableWidget->setItem(0, 1, itemValue);
88 
89  m_ui->m_statTableWidget->insertRow(1);
90  itemParameter = new QTableWidgetItem(QString(te::stat::GetStatSummaryFullName(te::stat::MAX_VALUE).c_str()));
91  itemValue = new QTableWidgetItem(QString(ss.m_maxVal.c_str()));
92  m_ui->m_statTableWidget->setItem(1, 0, itemParameter);
93  m_ui->m_statTableWidget->setItem(1, 1, itemValue);
94 
95  m_ui->m_statTableWidget->insertRow(2);
96  itemParameter = new QTableWidgetItem(QString(te::stat::GetStatSummaryFullName(te::stat::COUNT).c_str()));
97  itemValue = new QTableWidgetItem(QString(QString(boost::lexical_cast<std::string>(m_dset->size()).c_str())));
98  m_ui->m_statTableWidget->setItem(2, 0, itemParameter);
99  m_ui->m_statTableWidget->setItem(2, 1, itemValue);
100 
101  m_ui->m_statTableWidget->insertRow(3);
102  itemParameter = new QTableWidgetItem(QString(te::stat::GetStatSummaryFullName(te::stat::VALID_COUNT).c_str()));
103  itemValue = new QTableWidgetItem(QString(QString(boost::lexical_cast<std::string>(values.size()).c_str())));
104  m_ui->m_statTableWidget->setItem(3, 0, itemParameter);
105  m_ui->m_statTableWidget->setItem(3, 1, itemValue);
106  }
107  else
108  QMessageBox::information(this, "Warning", "The input vector of values is empty.");
109  }
110  else
111  {
112  std::vector<double> values = te::stat::GetNumericData(m_dset, m_prop);
113 
115 
116  if(!values.empty())
117  {
119 
120  m_ui->m_statTableWidget->insertRow(0);
121  QTableWidgetItem* itemParameter = new QTableWidgetItem(QString(te::stat::GetStatSummaryFullName(te::stat::MIN_VALUE).c_str()));
122  QTableWidgetItem* itemValue = new QTableWidgetItem(QString(boost::lexical_cast<std::string>(ss.m_minVal).c_str()));
123  m_ui->m_statTableWidget->setItem(0, 0, itemParameter);
124  m_ui->m_statTableWidget->setItem(0, 1, itemValue);
125 
126  m_ui->m_statTableWidget->insertRow(1);
127  itemParameter = new QTableWidgetItem(QString(te::stat::GetStatSummaryFullName(te::stat::MAX_VALUE).c_str()));
128  itemValue = new QTableWidgetItem(QString(boost::lexical_cast<std::string>(ss.m_maxVal).c_str()));
129  m_ui->m_statTableWidget->setItem(1, 0, itemParameter);
130  m_ui->m_statTableWidget->setItem(1, 1, itemValue);
131 
132  m_ui->m_statTableWidget->insertRow(2);
133  itemParameter = new QTableWidgetItem(QString(te::stat::GetStatSummaryFullName(te::stat::COUNT).c_str()));
134  itemValue = new QTableWidgetItem(QString(boost::lexical_cast<std::string>(m_dset->size()).c_str()));
135  m_ui->m_statTableWidget->setItem(2, 0, itemParameter);
136  m_ui->m_statTableWidget->setItem(2, 1, itemValue);
137 
138  m_ui->m_statTableWidget->insertRow(3);
139  itemParameter = new QTableWidgetItem(QString(te::stat::GetStatSummaryFullName(te::stat::VALID_COUNT).c_str()));
140  itemValue = new QTableWidgetItem(QString(boost::lexical_cast<std::string>(values.size()).c_str()));
141  m_ui->m_statTableWidget->setItem(3, 0, itemParameter);
142  m_ui->m_statTableWidget->setItem(3, 1, itemValue);
143 
144  m_ui->m_statTableWidget->insertRow(4);
145  itemParameter = new QTableWidgetItem(QString(te::stat::GetStatSummaryFullName(te::stat::MEAN).c_str()));
146  itemValue = new QTableWidgetItem(QString(boost::lexical_cast<std::string>(ss.m_mean).c_str()));
147  m_ui->m_statTableWidget->setItem(4, 0, itemParameter);
148  m_ui->m_statTableWidget->setItem(4, 1, itemValue);
149 
150  m_ui->m_statTableWidget->insertRow(5);
151  itemParameter = new QTableWidgetItem(QString(te::stat::GetStatSummaryFullName(te::stat::SUM).c_str()));
152  itemValue = new QTableWidgetItem(QString(boost::lexical_cast<std::string>(ss.m_sum).c_str()));
153  m_ui->m_statTableWidget->setItem(5, 0, itemParameter);
154  m_ui->m_statTableWidget->setItem(5, 1, itemValue);
155 
156  m_ui->m_statTableWidget->insertRow(6);
157  itemParameter = new QTableWidgetItem(QString(te::stat::GetStatSummaryFullName(te::stat::STANDARD_DEVIATION).c_str()));
158  itemValue = new QTableWidgetItem(QString(boost::lexical_cast<std::string>(ss.m_stdDeviation).c_str()));
159  m_ui->m_statTableWidget->setItem(6, 0, itemParameter);
160  m_ui->m_statTableWidget->setItem(6, 1, itemValue);
161 
162  m_ui->m_statTableWidget->insertRow(7);
163  itemParameter = new QTableWidgetItem(QString(te::stat::GetStatSummaryFullName(te::stat::VARIANCE).c_str()));
164  itemValue = new QTableWidgetItem(QString(boost::lexical_cast<std::string>(ss.m_variance).c_str()));
165  m_ui->m_statTableWidget->setItem(7, 0, itemParameter);
166  m_ui->m_statTableWidget->setItem(7, 1, itemValue);
167 
168  m_ui->m_statTableWidget->insertRow(8);
169  itemParameter = new QTableWidgetItem(QString(te::stat::GetStatSummaryFullName(te::stat::SKEWNESS).c_str()));
170  itemValue = new QTableWidgetItem(QString(boost::lexical_cast<std::string>(ss.m_skewness).c_str()));
171  m_ui->m_statTableWidget->setItem(8, 0, itemParameter);
172  m_ui->m_statTableWidget->setItem(8, 1, itemValue);
173 
174  m_ui->m_statTableWidget->insertRow(9);
175  itemParameter = new QTableWidgetItem(QString(te::stat::GetStatSummaryFullName(te::stat::KURTOSIS).c_str()));
176  itemValue = new QTableWidgetItem(QString(boost::lexical_cast<std::string>(ss.m_kurtosis).c_str()));
177  m_ui->m_statTableWidget->setItem(9, 0, itemParameter);
178  m_ui->m_statTableWidget->setItem(9, 1, itemValue);
179 
180  m_ui->m_statTableWidget->insertRow(10);
181  itemParameter = new QTableWidgetItem(QString(te::stat::GetStatSummaryFullName(te::stat::AMPLITUDE).c_str()));
182  itemValue = new QTableWidgetItem(QString(boost::lexical_cast<std::string>(ss.m_amplitude).c_str()));
183  m_ui->m_statTableWidget->setItem(10, 0, itemParameter);
184  m_ui->m_statTableWidget->setItem(10, 1, itemValue);
185 
186  m_ui->m_statTableWidget->insertRow(11);
187  itemParameter = new QTableWidgetItem(QString(te::stat::GetStatSummaryFullName(te::stat::MEDIAN).c_str()));
188  itemValue = new QTableWidgetItem(QString(boost::lexical_cast<std::string>(ss.m_median).c_str()));
189  m_ui->m_statTableWidget->setItem(11, 0, itemParameter);
190  m_ui->m_statTableWidget->setItem(11, 1, itemValue);
191 
192  m_ui->m_statTableWidget->insertRow(12);
193  itemParameter = new QTableWidgetItem(QString(te::stat::GetStatSummaryFullName(te::stat::VAR_COEFF).c_str()));
194  itemValue = new QTableWidgetItem(QString(boost::lexical_cast<std::string>(ss.m_varCoeff).c_str()));
195  m_ui->m_statTableWidget->setItem(12, 0, itemParameter);
196  m_ui->m_statTableWidget->setItem(12, 1, itemValue);
197 
198  m_ui->m_statTableWidget->insertRow(13);
199  itemParameter = new QTableWidgetItem(QString(te::stat::GetStatSummaryFullName(te::stat::MODE).c_str()));
200  if(ss.m_mode.size() == 0)
201  itemValue = new QTableWidgetItem(QString(""));
202  else
203  {
204  std::string value;
205  for(std::size_t i = 0; i < ss.m_mode.size(); ++i)
206  value += ", "+ boost::lexical_cast<std::string>(ss.m_mode[i]);
207 
208  value.erase(0,2);
209  itemValue = new QTableWidgetItem(QString(value.c_str()));
210  }
211  m_ui->m_statTableWidget->setItem(13, 0, itemParameter);
212  m_ui->m_statTableWidget->setItem(13, 1, itemValue);
213 
214  }
215  else
216  QMessageBox::information(this, "Warning", "The input vector of values is empty.");
217  }
218  m_ui->m_statTableWidget->resizeColumnToContents(0);
219 }
220 
222 {
223  QMessageBox::information(this, "Save", "Under development - It should save the result...");
224 }
225 
227 {
228  reject();
229 }
TESTATEXPORT void GetNumericStatisticalSummary(std::vector< double > &values, te::stat::NumericStatisticalSummary &ss, double nullVal)
Mean.
Definition: Enums.h:43
A structure to hold the set of statistics from a set of numerical values.
A dialog statistics.
Skewness.
Definition: Enums.h:49
Total not null values.
Definition: Enums.h:46
Total number of values.
Definition: Enums.h:45
void setStatistics(te::da::DataSet *dataSet, const std::string prop)
TEDATAACCESSEXPORT int GetPropertyIndex(te::da::DataSet *dataSet, const std::string propName)
Definition: Utils.cpp:919
TESTATEXPORT std::vector< double > GetNumericData(te::da::DataSet *dataSet, const std::string propName)
Returns the values of a numeric type property in a vector of values.
Definition: Utils.cpp:158
Minimum value.
Definition: Enums.h:41
Median.
Definition: Enums.h:52
TESTATEXPORT std::vector< std::string > GetStringData(te::da::DataSet *dataSet, const std::string propName)
Returns the values of a string type property in a vector of values.
Definition: Utils.cpp:139
Kurtosis.
Definition: Enums.h:50
Standard deviation.
Definition: Enums.h:47
Sum of values.
Definition: Enums.h:44
TESTATEXPORT std::string GetStatSummaryFullName(const int &e)
Get the statistical parameter full name ffrom its enumerator.
Definition: Utils.cpp:88
TESTATEXPORT void GetStringStatisticalSummary(std::vector< std::string > &values, te::stat::StringStatisticalSummary &ss)
Coefficient variation.
Definition: Enums.h:53
A dataset is the unit of information manipulated by the data access module of TerraLib.
Definition: DataSet.h:112
A structure to hold the set of statistics from a set of categorical (sample) values.
Mode.
Definition: Enums.h:54
std::auto_ptr< Ui::StatisticsDialogForm > m_ui
StatisticsDialog(QWidget *parent=0, Qt::WindowFlags f=0)
Variance.
Definition: Enums.h:48
Maximum value.
Definition: Enums.h:42
Amplitude.
Definition: Enums.h:51