#7663 Ensemble Statistics Plot: Add user input for number of histogram bins.

This commit is contained in:
Kristian Bendiksen 2021-05-12 10:48:29 +02:00
parent 7c7f319e41
commit 647f7834f0
5 changed files with 41 additions and 10 deletions

View File

@ -96,6 +96,8 @@ void RimEnsembleFractureStatisticsPlot::defineUiOrdering( QString uiConfigName,
uiOrdering.add( &m_ensembleFractureStatistics ); uiOrdering.add( &m_ensembleFractureStatistics );
uiOrdering.add( &m_property ); uiOrdering.add( &m_property );
RimStatisticsPlot::uiOrderingForHistogram( uiConfigName, uiOrdering );
caf::PdmUiGroup* plotLayoutGroup = uiOrdering.addNewGroup( "Plot Layout" ); caf::PdmUiGroup* plotLayoutGroup = uiOrdering.addNewGroup( "Plot Layout" );
RimStatisticsPlot::uiOrderingForPlotLayout( uiConfigName, *plotLayoutGroup ); RimStatisticsPlot::uiOrderingForPlotLayout( uiConfigName, *plotLayoutGroup );
@ -138,7 +140,9 @@ bool RimEnsembleFractureStatisticsPlot::hasStatisticsData() const
RigHistogramData RimEnsembleFractureStatisticsPlot::createStatisticsData() const RigHistogramData RimEnsembleFractureStatisticsPlot::createStatisticsData() const
{ {
RigHistogramData histogramData = RigHistogramData histogramData =
RigEnsembleFractureStatisticsCalculator::createStatisticsData( m_ensembleFractureStatistics(), m_property() ); RigEnsembleFractureStatisticsCalculator::createStatisticsData( m_ensembleFractureStatistics(),
m_property(),
m_numHistogramBins() );
return histogramData; return histogramData;
} }

View File

@ -30,8 +30,11 @@
#include "RigHistogramData.h" #include "RigHistogramData.h"
#include "cafPdmFieldScriptingCapability.h" #include "cafPdmFieldScriptingCapability.h"
#include "cafPdmObject.h"
#include "cafPdmObjectScriptingCapability.h" #include "cafPdmObjectScriptingCapability.h"
#include "cafPdmUiComboBoxEditor.h" #include "cafPdmUiComboBoxEditor.h"
#include "cafPdmUiLineEditor.h"
#include "cvfAssert.h" #include "cvfAssert.h"
#include <QtCharts/QBarSeries> #include <QtCharts/QBarSeries>
@ -51,10 +54,12 @@ CAF_PDM_ABSTRACT_SOURCE_INIT( RimStatisticsPlot, "StatisticsPlot" );
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
RimStatisticsPlot::RimStatisticsPlot() RimStatisticsPlot::RimStatisticsPlot()
{ {
// CAF_PDM_InitObject( "Grid Statistics Plot", "", "", "A Plot of Grid Statistics" );
CAF_PDM_InitField( &m_plotWindowTitle, "PlotDescription", QString( "" ), "Name", "", "", "" ); CAF_PDM_InitField( &m_plotWindowTitle, "PlotDescription", QString( "" ), "Name", "", "", "" );
m_plotWindowTitle.xmlCapability()->setIOWritable( false ); m_plotWindowTitle.xmlCapability()->setIOWritable( false );
CAF_PDM_InitField( &m_numHistogramBins, "NumHistogramBins", 50, "Number of Bins", "", "", "" );
m_numHistogramBins.uiCapability()->setUiEditorTypeName( caf::PdmUiLineEditor::uiEditorTypeName() );
m_plotLegendsHorizontal.uiCapability()->setUiHidden( true ); m_plotLegendsHorizontal.uiCapability()->setUiHidden( true );
setDeletable( true ); setDeletable( true );
@ -176,10 +181,26 @@ void RimStatisticsPlot::cleanupBeforeClose()
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
void RimStatisticsPlot::defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrdering ) void RimStatisticsPlot::defineEditorAttribute( const caf::PdmFieldHandle* field,
QString uiConfigName,
caf::PdmUiEditorAttribute* attribute )
{ {
caf::PdmUiGroup* plotLayoutGroup = uiOrdering.addNewGroup( "Plot Layout" ); caf::PdmUiLineEditorAttribute* lineEditorAttr = dynamic_cast<caf::PdmUiLineEditorAttribute*>( attribute );
RimPlotWindow::uiOrderingForPlotLayout( uiConfigName, *plotLayoutGroup ); if ( field == &m_numHistogramBins && lineEditorAttr != nullptr )
{
// Limit histogram bins to something resonable
QIntValidator* validator = new QIntValidator( 20, 1000, nullptr );
lineEditorAttr->validator = validator;
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimStatisticsPlot::uiOrderingForHistogram( QString uiConfigName, caf::PdmUiOrdering& uiOrdering )
{
caf::PdmUiGroup* histogramGroup = uiOrdering.addNewGroup( "Histogram" );
histogramGroup->add( &m_numHistogramBins );
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------

View File

@ -54,8 +54,11 @@ protected:
QWidget* createViewWidget( QWidget* mainWindowParent ) override; QWidget* createViewWidget( QWidget* mainWindowParent ) override;
void deleteViewWidget() override; void deleteViewWidget() override;
// Overridden PDM methods void defineEditorAttribute( const caf::PdmFieldHandle* field,
void defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrdering ) override; QString uiConfigName,
caf::PdmUiEditorAttribute* attribute ) override;
void uiOrderingForHistogram( QString uiConfigName, caf::PdmUiOrdering& uiOrdering );
void onLoadDataAndUpdate() override; void onLoadDataAndUpdate() override;
void updatePlots(); void updatePlots();
@ -77,4 +80,5 @@ protected:
QPointer<RiuQtChartView> m_viewer; QPointer<RiuQtChartView> m_viewer;
caf::PdmField<QString> m_plotWindowTitle; caf::PdmField<QString> m_plotWindowTitle;
caf::PdmField<int> m_numHistogramBins;
}; };

View File

@ -58,7 +58,8 @@ void caf::AppEnum<RigEnsembleFractureStatisticsCalculator::PropertyType>::setUp(
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
RigHistogramData RigEnsembleFractureStatisticsCalculator::createStatisticsData( const RimEnsembleFractureStatistics* esf, RigHistogramData RigEnsembleFractureStatisticsCalculator::createStatisticsData( const RimEnsembleFractureStatistics* esf,
PropertyType propertyType ) PropertyType propertyType,
int numBins )
{ {
std::vector<cvf::ref<RigStimPlanFractureDefinition>> defs = esf->readFractureDefinitions(); std::vector<cvf::ref<RigStimPlanFractureDefinition>> defs = esf->readFractureDefinitions();
@ -113,7 +114,7 @@ RigHistogramData RigEnsembleFractureStatisticsCalculator::createStatisticsData(
RigStatisticsMath::calculateStatisticsCurves( samples, &histogramData.p10, &p50, &histogramData.p90, &mean ); RigStatisticsMath::calculateStatisticsCurves( samples, &histogramData.p10, &p50, &histogramData.p90, &mean );
std::vector<size_t> histogram; std::vector<size_t> histogram;
RigHistogramCalculator histogramCalculator( histogramData.min, histogramData.max, 20, &histogram ); RigHistogramCalculator histogramCalculator( histogramData.min, histogramData.max, numBins, &histogram );
for ( auto s : samples ) for ( auto s : samples )
histogramCalculator.addValue( s ); histogramCalculator.addValue( s );

View File

@ -49,7 +49,8 @@ public:
FORMATION_DIP FORMATION_DIP
}; };
static RigHistogramData createStatisticsData( const RimEnsembleFractureStatistics* esf, PropertyType propertyType ); static RigHistogramData
createStatisticsData( const RimEnsembleFractureStatistics* esf, PropertyType propertyType, int numBins );
private: private:
static std::vector<double> calculateGridStatistics( const std::vector<cvf::ref<RigStimPlanFractureDefinition>>& defs, static std::vector<double> calculateGridStatistics( const std::vector<cvf::ref<RigStimPlanFractureDefinition>>& defs,