#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_property );
RimStatisticsPlot::uiOrderingForHistogram( uiConfigName, uiOrdering );
caf::PdmUiGroup* plotLayoutGroup = uiOrdering.addNewGroup( "Plot Layout" );
RimStatisticsPlot::uiOrderingForPlotLayout( uiConfigName, *plotLayoutGroup );
@ -138,7 +140,9 @@ bool RimEnsembleFractureStatisticsPlot::hasStatisticsData() const
RigHistogramData RimEnsembleFractureStatisticsPlot::createStatisticsData() const
{
RigHistogramData histogramData =
RigEnsembleFractureStatisticsCalculator::createStatisticsData( m_ensembleFractureStatistics(), m_property() );
RigEnsembleFractureStatisticsCalculator::createStatisticsData( m_ensembleFractureStatistics(),
m_property(),
m_numHistogramBins() );
return histogramData;
}

View File

@ -30,8 +30,11 @@
#include "RigHistogramData.h"
#include "cafPdmFieldScriptingCapability.h"
#include "cafPdmObject.h"
#include "cafPdmObjectScriptingCapability.h"
#include "cafPdmUiComboBoxEditor.h"
#include "cafPdmUiLineEditor.h"
#include "cvfAssert.h"
#include <QtCharts/QBarSeries>
@ -51,10 +54,12 @@ CAF_PDM_ABSTRACT_SOURCE_INIT( RimStatisticsPlot, "StatisticsPlot" );
//--------------------------------------------------------------------------------------------------
RimStatisticsPlot::RimStatisticsPlot()
{
// CAF_PDM_InitObject( "Grid Statistics Plot", "", "", "A Plot of Grid Statistics" );
CAF_PDM_InitField( &m_plotWindowTitle, "PlotDescription", QString( "" ), "Name", "", "", "" );
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 );
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" );
RimPlotWindow::uiOrderingForPlotLayout( uiConfigName, *plotLayoutGroup );
caf::PdmUiLineEditorAttribute* lineEditorAttr = dynamic_cast<caf::PdmUiLineEditorAttribute*>( attribute );
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;
void deleteViewWidget() override;
// Overridden PDM methods
void defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrdering ) override;
void defineEditorAttribute( const caf::PdmFieldHandle* field,
QString uiConfigName,
caf::PdmUiEditorAttribute* attribute ) override;
void uiOrderingForHistogram( QString uiConfigName, caf::PdmUiOrdering& uiOrdering );
void onLoadDataAndUpdate() override;
void updatePlots();
@ -77,4 +80,5 @@ protected:
QPointer<RiuQtChartView> m_viewer;
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,
PropertyType propertyType )
PropertyType propertyType,
int numBins )
{
std::vector<cvf::ref<RigStimPlanFractureDefinition>> defs = esf->readFractureDefinitions();
@ -113,7 +114,7 @@ RigHistogramData RigEnsembleFractureStatisticsCalculator::createStatisticsData(
RigStatisticsMath::calculateStatisticsCurves( samples, &histogramData.p10, &p50, &histogramData.p90, &mean );
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 )
histogramCalculator.addValue( s );

View File

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