///////////////////////////////////////////////////////////////////////////////// // // Copyright (C) 2024- Equinor ASA // // ResInsight is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY // WARRANTY; without even the implied warranty of MERCHANTABILITY or // FITNESS FOR A PARTICULAR PURPOSE. // // See the GNU General Public License at // for more details. // ///////////////////////////////////////////////////////////////////////////////// #pragma once #include "RimNamedObject.h" #include "cafPdmChildArrayField.h" #include "cafPdmField.h" #include "ContourMap/RimContourMapResolutionTools.h" #include "RimContourMapProjection.h" #include class RimEclipseCase; class RimEclipseResultDefinition; class RimEclipseCaseEnsemble; class RimEclipseContourMapView; class RimStatisticsContourMapView; //================================================================================================== // // // //================================================================================================== class RimStatisticsContourMap : public RimNamedObject { CAF_PDM_HEADER_INIT; public: enum class StatisticsType { P10, P50, P90, MEAN, MIN, MAX }; RimStatisticsContourMap(); void setEclipseCase( RimEclipseCase* eclipseCase ); RimEclipseCase* eclipseCase() const; RimEclipseCaseEnsemble* ensemble() const; RigContourMapGrid* contourMapGrid() const; std::vector result( size_t timeStep, StatisticsType statisticsType ) const; void addView( RimStatisticsContourMapView* view ); std::vector views() const; void ensureResultsComputed(); QString resultAggregationText() const; QString resultVariable() const; double sampleSpacingFactor() const; bool isColumnResult() const; std::vector selectedTimeSteps() const; QString timeStepName( int timeStep ) const; protected: void defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrdering ) override; void fieldChangedByUi( const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue ) override; void defineEditorAttribute( const caf::PdmFieldHandle* field, QString uiConfigName, caf::PdmUiEditorAttribute* attribute ) override; void initAfterRead() override; void appendMenuItems( caf::CmdFeatureMenuBuilder& menuBuilder ) const override; QList calculateValueOptions( const caf::PdmFieldHandle* fieldNeedingOptions ) override; RimEclipseCase* switchToSelectedSourceCase(); private: void computeStatistics(); void doStatisticsCalculation( std::map>>& timestep_results ); caf::PdmField m_boundingBoxExpPercent; caf::PdmField m_resultAggregation; caf::PdmField> m_selectedTimeSteps; caf::PdmChildField m_resultDefinition; caf::PdmField m_computeStatisticsButton; caf::PdmField m_primaryCase; caf::PdmField> m_resolution; std::unique_ptr m_contourMapGrid; std::map>> m_timeResults; std::vector>> m_gridMapping; caf::PdmChildArrayField m_views; };