LoopStructural 1.0.4__zip → 1.0.71.dev0__zip
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/__init__.py +12 -7
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/__pycache__/__init__.cpython-36.pyc +0 -0
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/datasets/__pycache__/{__init__.cpython-37.pyc → __init__.cpython-36.pyc} +0 -0
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/datasets/__pycache__/{_base.cpython-37.pyc → _base.cpython-36.pyc} +0 -0
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/interpolators/__init__.py +3 -0
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/interpolators/__pycache__/__init__.cpython-36.pyc +0 -0
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/interpolators/__pycache__/base_structured_3d_support.cpython-36.pyc +0 -0
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/interpolators/__pycache__/discrete_fold_interpolator.cpython-36.pyc +0 -0
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/interpolators/__pycache__/discrete_interpolator.cpython-36.pyc +0 -0
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/interpolators/__pycache__/finite_difference_interpolator.cpython-36.pyc +0 -0
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/interpolators/__pycache__/geological_interpolator.cpython-36.pyc +0 -0
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/interpolators/__pycache__/operator.cpython-36.pyc +0 -0
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/interpolators/__pycache__/piecewiselinear_interpolator.cpython-36.pyc +0 -0
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/interpolators/__pycache__/structured_grid.cpython-36.pyc +0 -0
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/interpolators/__pycache__/structured_tetra.cpython-36.pyc +0 -0
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/interpolators/__pycache__/surfe_wrapper.cpython-36.pyc +0 -0
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/interpolators/base_structured_3d_support.py +101 -0
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/interpolators/cython/__pycache__/__init__.cpython-36.pyc +0 -0
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/interpolators/cython/dsi_helper.c +3899 -2455
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/interpolators/cython/dsi_helper.cp36-win_amd64.pyd +0 -0
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/interpolators/discrete_fold_interpolator.py +53 -22
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/interpolators/discrete_interpolator.py +61 -28
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/interpolators/finite_difference_interpolator.py +68 -11
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/interpolators/geological_interpolator.py +8 -1
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/interpolators/operator.py +2 -1
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/interpolators/piecewiselinear_interpolator.py +97 -8
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/interpolators/structured_grid.py +25 -69
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/interpolators/structured_tetra.py +86 -43
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/interpolators/surfe_wrapper.py +4 -3
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/__pycache__/{__init__.cpython-37.pyc → __init__.cpython-36.pyc} +0 -0
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/core/__pycache__/__init__.cpython-36.pyc +0 -0
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/core/__pycache__/geological_model.cpython-36.pyc +0 -0
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/core/__pycache__/geological_model_graph.cpython-36.pyc +0 -0
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/core/__pycache__/stratigraphic_column.cpython-36.pyc +0 -0
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/core/geological_model.py +303 -150
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/core/geological_model_graph.py +881 -0
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/core/stratigraphic_column.py +5 -0
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/fault/__init__.py +1 -0
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/fault/__pycache__/__init__.cpython-36.pyc +0 -0
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/fault/__pycache__/fault_builder.cpython-36.pyc +0 -0
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/fault/__pycache__/fault_function.cpython-36.pyc +0 -0
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/fault/__pycache__/fault_function_feature.cpython-36.pyc +0 -0
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/fault/__pycache__/fault_segment.cpython-36.pyc +0 -0
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/fault/fault_builder.py +127 -0
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/fault/fault_function.py +2 -1
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/fault/fault_function_feature.py +2 -1
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/fault/fault_segment.py +30 -3
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/features/__init__.py +1 -0
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/features/__pycache__/__init__.cpython-36.pyc +0 -0
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/features/__pycache__/cross_product_geological_feature.cpython-36.pyc +0 -0
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/features/__pycache__/geological_feature.cpython-36.pyc +0 -0
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/features/__pycache__/geological_feature_builder.cpython-36.pyc +0 -0
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/features/__pycache__/lambda_geological_feature.cpython-36.pyc +0 -0
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/features/__pycache__/{region_feature.cpython-37.pyc → region_feature.cpython-36.pyc} +0 -0
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/features/__pycache__/structural_frame.cpython-36.pyc +0 -0
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/features/__pycache__/structural_frame_builder.cpython-36.pyc +0 -0
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/features/__pycache__/unconformity_feature.cpython-36.pyc +0 -0
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/features/cross_product_geological_feature.py +18 -5
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/features/geological_feature.py +10 -44
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/features/geological_feature_builder.py +127 -43
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/features/lambda_geological_feature.py +31 -0
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/features/structural_frame.py +28 -11
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/features/structural_frame_builder.py +25 -15
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/features/unconformity_feature.py +6 -1
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/fold/__pycache__/{__init__.cpython-37.pyc → __init__.cpython-36.pyc} +0 -0
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/fold/__pycache__/fold.cpython-36.pyc +0 -0
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/fold/__pycache__/fold_rotation_angle.cpython-36.pyc +0 -0
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/fold/__pycache__/fold_rotation_angle_feature.cpython-36.pyc +0 -0
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/fold/__pycache__/foldframe.cpython-36.pyc +0 -0
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/fold/__pycache__/svariogram.cpython-36.pyc +0 -0
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/fold/fold.py +13 -5
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/fold/fold_rotation_angle.py +5 -4
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/fold/fold_rotation_angle_feature.py +2 -1
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/fold/foldframe.py +6 -5
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/fold/svariogram.py +2 -1
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/utils/__init__.py +5 -1
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/utils/__pycache__/__init__.cpython-36.pyc +0 -0
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/utils/__pycache__/bounding_box.cpython-36.pyc +0 -0
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/utils/__pycache__/exceptions.cpython-36.pyc +0 -0
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/utils/__pycache__/helper.cpython-36.pyc +0 -0
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/utils/__pycache__/logging.cpython-36.pyc +0 -0
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/utils/__pycache__/map2loop.cpython-36.pyc +0 -0
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/utils/__pycache__/regions.cpython-36.pyc +0 -0
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/utils/__pycache__/utils.cpython-36.pyc +0 -0
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/utils/bounding_box.py +21 -0
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/utils/exceptions.py +2 -1
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/utils/helper.py +5 -1
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/utils/logging.py +60 -0
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/utils/map2loop.py +47 -19
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/utils/regions.py +11 -0
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/utils/utils.py +2 -53
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/visualisation/__pycache__/{__init__.cpython-37.pyc → __init__.cpython-36.pyc} +0 -0
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/visualisation/__pycache__/map_viewer.cpython-36.pyc +0 -0
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/visualisation/__pycache__/model_plotter.cpython-36.pyc +0 -0
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/visualisation/__pycache__/model_visualisation.cpython-36.pyc +0 -0
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/visualisation/__pycache__/rotation_angle_plotter.cpython-36.pyc +0 -0
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/visualisation/__pycache__/{sphinx_scraper.cpython-37.pyc → sphinx_scraper.cpython-36.pyc} +0 -0
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/visualisation/__pycache__/stratigraphic_column.cpython-36.pyc +0 -0
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/visualisation/map_viewer.py +17 -2
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/visualisation/model_plotter.py +2 -1
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/visualisation/model_visualisation.py +152 -84
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/visualisation/rotation_angle_plotter.py +2 -1
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/visualisation/stratigraphic_column.py +60 -0
- Miniconda/envs/loop/Lib/site-packages/{LoopStructural-1.0.4-py3.7.egg-info → LoopStructural-1.0.71.dev0-py3.6.egg-info}/PKG-INFO +1 -1
- Miniconda/envs/loop/Lib/site-packages/{LoopStructural-1.0.4-py3.7.egg-info → LoopStructural-1.0.71.dev0-py3.6.egg-info}/SOURCES.txt +10 -5
- Miniconda/envs/loop/Lib/site-packages/{LoopStructural-1.0.4-py3.7.egg-info → LoopStructural-1.0.71.dev0-py3.6.egg-info}/requires.txt +1 -1
- Miniconda/envs/loop/Lib/site-packages/tests/__pycache__/__init__.cpython-36.pyc +0 -0
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/__pycache__/__init__.cpython-37.pyc +0 -0
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/interpolators/__pycache__/__init__.cpython-37.pyc +0 -0
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/interpolators/__pycache__/discrete_fold_interpolator.cpython-37.pyc +0 -0
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/interpolators/__pycache__/discrete_interpolator.cpython-37.pyc +0 -0
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/interpolators/__pycache__/finite_difference_interpolator.cpython-37.pyc +0 -0
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/interpolators/__pycache__/geological_interpolator.cpython-37.pyc +0 -0
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/interpolators/__pycache__/operator.cpython-37.pyc +0 -0
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/interpolators/__pycache__/piecewiselinear_interpolator.cpython-37.pyc +0 -0
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/interpolators/__pycache__/structured_grid.cpython-37.pyc +0 -0
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/interpolators/__pycache__/structured_tetra.cpython-37.pyc +0 -0
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/interpolators/__pycache__/surfe_wrapper.cpython-37.pyc +0 -0
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/interpolators/cython/__pycache__/__init__.cpython-37.pyc +0 -0
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/interpolators/cython/dsi_helper.cp37-win_amd64.pyd +0 -0
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/core/__pycache__/__init__.cpython-37.pyc +0 -0
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/core/__pycache__/geological_model.cpython-37.pyc +0 -0
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/fault/__pycache__/__init__.cpython-37.pyc +0 -0
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/fault/__pycache__/fault_function.cpython-37.pyc +0 -0
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/fault/__pycache__/fault_function_feature.cpython-37.pyc +0 -0
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/fault/__pycache__/fault_segment.cpython-37.pyc +0 -0
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/features/__pycache__/__init__.cpython-37.pyc +0 -0
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/features/__pycache__/cross_product_geological_feature.cpython-37.pyc +0 -0
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/features/__pycache__/geological_feature.cpython-37.pyc +0 -0
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/features/__pycache__/geological_feature_builder.cpython-37.pyc +0 -0
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/features/__pycache__/structural_frame.cpython-37.pyc +0 -0
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/features/__pycache__/structural_frame_builder.cpython-37.pyc +0 -0
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/features/__pycache__/unconformity_feature.cpython-37.pyc +0 -0
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/fold/__pycache__/fold.cpython-37.pyc +0 -0
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/fold/__pycache__/fold_rotation_angle.cpython-37.pyc +0 -0
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/fold/__pycache__/fold_rotation_angle_feature.cpython-37.pyc +0 -0
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/fold/__pycache__/foldframe.cpython-37.pyc +0 -0
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/fold/__pycache__/svariogram.cpython-37.pyc +0 -0
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/utils/__pycache__/__init__.cpython-37.pyc +0 -0
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/utils/__pycache__/exceptions.cpython-37.pyc +0 -0
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/utils/__pycache__/helper.cpython-37.pyc +0 -0
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/utils/__pycache__/map2loop.cpython-37.pyc +0 -0
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/utils/__pycache__/utils.cpython-37.pyc +0 -0
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/visualisation/__pycache__/map_viewer.cpython-37.pyc +0 -0
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/visualisation/__pycache__/model_plotter.cpython-37.pyc +0 -0
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/visualisation/__pycache__/model_visualisation.cpython-37.pyc +0 -0
- Miniconda/envs/loop/Lib/site-packages/LoopStructural/visualisation/__pycache__/rotation_angle_plotter.cpython-37.pyc +0 -0
- Miniconda/envs/loop/Lib/site-packages/tests/__pycache__/__init__.cpython-37.pyc +0 -0
- Miniconda/envs/loop/Lib/site-packages/tests/__pycache__/test_faults.cpython-37.pyc +0 -0
- Miniconda/envs/loop/Lib/site-packages/tests/__pycache__/test_fold.cpython-37.pyc +0 -0
- Miniconda/envs/loop/Lib/site-packages/tests/__pycache__/test_interpolator.cpython-37.pyc +0 -0
- Miniconda/envs/loop/Lib/site-packages/tests/__pycache__/test_refolded.cpython-37.pyc +0 -0
- Miniconda/envs/loop/Lib/site-packages/tests/test_faults.py +0 -17
- Miniconda/envs/loop/Lib/site-packages/tests/test_fold.py +0 -57
- Miniconda/envs/loop/Lib/site-packages/tests/test_interpolator.py +0 -88
- Miniconda/envs/loop/Lib/site-packages/tests/test_refolded.py +0 -22
- /Miniconda/envs/loop/Lib/site-packages/{LoopStructural-1.0.4-py3.7.egg-info → LoopStructural-1.0.71.dev0-py3.6.egg-info}/dependency_links.txt +0 -0
- /Miniconda/envs/loop/Lib/site-packages/{LoopStructural-1.0.4-py3.7.egg-info → LoopStructural-1.0.71.dev0-py3.6.egg-info}/top_level.txt +0 -0
|
@@ -7,13 +7,15 @@ import logging
|
|
|
7
7
|
import numpy as np
|
|
8
8
|
import pandas as pd
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
from LoopStructural.utils import getLogger
|
|
11
|
+
logger = getLogger(__name__)
|
|
11
12
|
|
|
12
13
|
from LoopStructural.utils.helper import xyz_names, val_name, normal_vec_names, \
|
|
13
14
|
weight_name, gradient_vec_names, tangent_vec_names, interface_name
|
|
14
15
|
from LoopStructural.modelling.features import GeologicalFeature
|
|
15
16
|
from LoopStructural.utils.helper import get_data_bounding_box_map as get_data_bounding_box
|
|
16
|
-
|
|
17
|
+
from LoopStructural.utils import get_data_axis_aligned_bounding_box
|
|
18
|
+
from LoopStructural.utils import RegionEverywhere
|
|
17
19
|
|
|
18
20
|
class GeologicalFeatureInterpolator:
|
|
19
21
|
"""[summary]
|
|
@@ -32,12 +34,12 @@ class GeologicalFeatureInterpolator:
|
|
|
32
34
|
defining whether the location (xyz) should be included in the
|
|
33
35
|
kwargs - name of the feature, region to interpolate the feature
|
|
34
36
|
"""
|
|
35
|
-
self.
|
|
36
|
-
self.
|
|
37
|
-
self.
|
|
37
|
+
self._interpolator = interpolator
|
|
38
|
+
self._name = name
|
|
39
|
+
self._interpolator.set_property_name(self._name)
|
|
38
40
|
# everywhere region is just a lambda that returns true for all locations
|
|
39
41
|
if region is None:
|
|
40
|
-
self.region =
|
|
42
|
+
self.region = RegionEverywhere()
|
|
41
43
|
else:
|
|
42
44
|
self.region = region
|
|
43
45
|
header = xyz_names()+val_name()+gradient_vec_names()+\
|
|
@@ -45,11 +47,51 @@ class GeologicalFeatureInterpolator:
|
|
|
45
47
|
self.data = pd.DataFrame(columns=header)
|
|
46
48
|
self.faults = []
|
|
47
49
|
self.data_added = False
|
|
48
|
-
self.
|
|
50
|
+
self._interpolator.set_region(region=self.region)
|
|
51
|
+
self._feature = None
|
|
52
|
+
self._up_to_date = False
|
|
53
|
+
self._build_arguments = {}
|
|
54
|
+
self.fold = None
|
|
55
|
+
self._feature = GeologicalFeature(self._name,
|
|
56
|
+
self._interpolator,
|
|
57
|
+
builder=self,
|
|
58
|
+
region=self.region,
|
|
59
|
+
faults=self.faults,
|
|
60
|
+
fold = self.fold
|
|
61
|
+
)
|
|
62
|
+
self._orthogonal_features = {}
|
|
63
|
+
@property
|
|
64
|
+
def feature(self):
|
|
65
|
+
return self._feature
|
|
66
|
+
|
|
67
|
+
@property
|
|
68
|
+
def build_arguments(self):
|
|
69
|
+
return self._build_arguments
|
|
70
|
+
|
|
71
|
+
@build_arguments.setter
|
|
72
|
+
def build_arguments(self, build_arguments):
|
|
73
|
+
# self._build_arguments = {}
|
|
74
|
+
for k, i in build_arguments.items():
|
|
75
|
+
self._build_arguments[k] = i
|
|
49
76
|
|
|
50
77
|
def update(self):
|
|
51
|
-
|
|
52
|
-
|
|
78
|
+
self.build(**self.build_arguments)
|
|
79
|
+
@property
|
|
80
|
+
def name(self):
|
|
81
|
+
return self._name
|
|
82
|
+
@property
|
|
83
|
+
def interpolator(self):
|
|
84
|
+
return self._interpolator
|
|
85
|
+
|
|
86
|
+
def up_to_date(self):
|
|
87
|
+
#has anything changed in the builder since we built the feature? if so update
|
|
88
|
+
if self._up_to_date == False:
|
|
89
|
+
self.update()
|
|
90
|
+
#check if the interpolator is up to date, if not solve
|
|
91
|
+
if self._interpolator.up_to_date == False:
|
|
92
|
+
self.update()
|
|
93
|
+
|
|
94
|
+
|
|
53
95
|
def add_fault(self, fault):
|
|
54
96
|
"""
|
|
55
97
|
Add a fault to the geological feature builder
|
|
@@ -63,9 +105,10 @@ class GeologicalFeatureInterpolator:
|
|
|
63
105
|
-------
|
|
64
106
|
|
|
65
107
|
"""
|
|
108
|
+
self._up_to_date = False
|
|
66
109
|
self.faults.append(fault)
|
|
67
110
|
|
|
68
|
-
def add_data_from_data_frame(self, data_frame):
|
|
111
|
+
def add_data_from_data_frame(self, data_frame, overwrite = False):
|
|
69
112
|
"""
|
|
70
113
|
Extract data from a pandas dataframe with columns for
|
|
71
114
|
|
|
@@ -80,7 +123,7 @@ class GeologicalFeatureInterpolator:
|
|
|
80
123
|
"""
|
|
81
124
|
self.data = data_frame.copy()
|
|
82
125
|
|
|
83
|
-
def add_orthogonal_feature(self, feature, w=1., region=None):
|
|
126
|
+
def add_orthogonal_feature(self, feature, w=1., region=None,step=1,B=0):
|
|
84
127
|
"""
|
|
85
128
|
Add a constraint to the interpolator so that the gradient of an exisitng feature is orthogonal
|
|
86
129
|
to the feature being built. E.g. dot product between gradients should be = 0
|
|
@@ -92,17 +135,21 @@ class GeologicalFeatureInterpolator:
|
|
|
92
135
|
w : double
|
|
93
136
|
how much to weight in least squares sense
|
|
94
137
|
region : unused
|
|
95
|
-
|
|
138
|
+
step : int
|
|
139
|
+
numpy slicing step size to see how many tetras to add
|
|
140
|
+
|
|
96
141
|
Returns
|
|
97
142
|
-------
|
|
98
143
|
|
|
144
|
+
Notes
|
|
145
|
+
-----
|
|
146
|
+
The constraint can be applied to a random subset of the tetrahedral elements in the mesh
|
|
147
|
+
in theory this shu
|
|
99
148
|
"""
|
|
100
|
-
self.
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
)
|
|
105
|
-
|
|
149
|
+
self._orthogonal_features[feature.name] = [feature,w,region,step,B]
|
|
150
|
+
self._up_to_date = False
|
|
151
|
+
|
|
152
|
+
|
|
106
153
|
def add_data_to_interpolator(self, constrained=False, force_constrained=False, **kwargs):
|
|
107
154
|
"""
|
|
108
155
|
Iterates through the list of data and applies any faults active on the
|
|
@@ -161,7 +208,6 @@ class GeologicalFeatureInterpolator:
|
|
|
161
208
|
logger.error("Not enough constraints for scalar field add more")
|
|
162
209
|
# self.interpolator.reset()
|
|
163
210
|
mask = ~np.isnan(data.loc[:,val_name()].to_numpy())
|
|
164
|
-
|
|
165
211
|
# add value constraints
|
|
166
212
|
if mask.shape[0]>0:
|
|
167
213
|
value_data = data.loc[mask[:,0],xyz_names()+val_name()+weight_name()].to_numpy()
|
|
@@ -196,7 +242,21 @@ class GeologicalFeatureInterpolator:
|
|
|
196
242
|
self.interpolator.set_interface_constraints(interface_data)
|
|
197
243
|
|
|
198
244
|
self.data_added = True
|
|
199
|
-
|
|
245
|
+
self._up_to_date = False
|
|
246
|
+
|
|
247
|
+
def install_gradient_constraint(self):
|
|
248
|
+
for g in self._orthogonal_features.values():
|
|
249
|
+
feature,w,region,step,B = g
|
|
250
|
+
vector = feature.evaluate_gradient(self.interpolator.support.barycentre())
|
|
251
|
+
vector /= np.linalg.norm(vector,axis=1)[:,None]
|
|
252
|
+
element_idx = np.arange(self.interpolator.support.n_elements)
|
|
253
|
+
np.random.shuffle(element_idx)
|
|
254
|
+
self.interpolator.add_gradient_orthogonal_constraint(
|
|
255
|
+
self.interpolator.support.barycentre()[element_idx[::step],:],
|
|
256
|
+
vector[element_idx[::step],:],
|
|
257
|
+
w=w,
|
|
258
|
+
B=B
|
|
259
|
+
)
|
|
200
260
|
def get_value_constraints(self):
|
|
201
261
|
"""
|
|
202
262
|
Get the value constraints for this geological feature
|
|
@@ -225,7 +285,7 @@ class GeologicalFeatureInterpolator:
|
|
|
225
285
|
mask, xyz_names() + gradient_vec_names() + weight_name(
|
|
226
286
|
)].to_numpy()
|
|
227
287
|
else:
|
|
228
|
-
return np.zeros(0, 7)
|
|
288
|
+
return np.zeros((0, 7))
|
|
229
289
|
|
|
230
290
|
def get_tangent_constraints(self):
|
|
231
291
|
"""
|
|
@@ -242,7 +302,7 @@ class GeologicalFeatureInterpolator:
|
|
|
242
302
|
mask, xyz_names() + tangent_vec_names() + weight_name(
|
|
243
303
|
)].to_numpy()
|
|
244
304
|
else:
|
|
245
|
-
return np.zeros(0, 7)
|
|
305
|
+
return np.zeros((0, 7))
|
|
246
306
|
|
|
247
307
|
def get_norm_constraints(self):
|
|
248
308
|
"""
|
|
@@ -260,7 +320,7 @@ class GeologicalFeatureInterpolator:
|
|
|
260
320
|
|
|
261
321
|
)].to_numpy()
|
|
262
322
|
else:
|
|
263
|
-
return np.zeros(0,7)
|
|
323
|
+
return np.zeros((0,7))
|
|
264
324
|
|
|
265
325
|
def get_interface_constraints(self):
|
|
266
326
|
mask = np.all(~np.isnan(self.data.loc[:, interface_name()].to_numpy()), axis=1)
|
|
@@ -268,7 +328,7 @@ class GeologicalFeatureInterpolator:
|
|
|
268
328
|
return self.data.loc[
|
|
269
329
|
mask, xyz_names() + interface_name() + weight_name()].to_numpy()
|
|
270
330
|
else:
|
|
271
|
-
return np.zeros(0,5)
|
|
331
|
+
return np.zeros((0,5))
|
|
272
332
|
|
|
273
333
|
def get_data_locations(self):
|
|
274
334
|
"""
|
|
@@ -279,8 +339,25 @@ class GeologicalFeatureInterpolator:
|
|
|
279
339
|
|
|
280
340
|
"""
|
|
281
341
|
return self.data.loc[:, xyz_names()].to_numpy()
|
|
342
|
+
def set_interpolation_geometry(self,origin,maximum):
|
|
343
|
+
"""Update the interpolation support geometry to new bounding box
|
|
282
344
|
|
|
283
|
-
|
|
345
|
+
Parameters
|
|
346
|
+
----------
|
|
347
|
+
origin : np.array(3)
|
|
348
|
+
origin vector
|
|
349
|
+
maximum : np.array(3)
|
|
350
|
+
maximum vector
|
|
351
|
+
"""
|
|
352
|
+
logger.info("Setting mesh origin: {} {} {} ".format(origin[0],origin[1],origin[2]))
|
|
353
|
+
logger.info("Setting mesh maximum: {} {} {}".format(maximum[0],maximum[1],maximum[2]))
|
|
354
|
+
self.interpolator.support.origin = origin
|
|
355
|
+
self.interpolator.support.maximum = maximum
|
|
356
|
+
|
|
357
|
+
|
|
358
|
+
self._up_to_date = False
|
|
359
|
+
|
|
360
|
+
def build(self, fold=None, fold_weights={}, data_region=None, **kwargs):
|
|
284
361
|
"""
|
|
285
362
|
Runs the interpolation and builds the geological feature
|
|
286
363
|
|
|
@@ -298,32 +375,39 @@ class GeologicalFeatureInterpolator:
|
|
|
298
375
|
|
|
299
376
|
"""
|
|
300
377
|
|
|
378
|
+
|
|
379
|
+
self.add_data_to_interpolator(**kwargs)
|
|
301
380
|
if data_region is not None:
|
|
302
|
-
xyz = self.get_data_locations()
|
|
303
|
-
bb, region = get_data_bounding_box(xyz, data_region)
|
|
381
|
+
xyz = self.interpolator.get_data_locations()
|
|
382
|
+
bb, region = get_data_bounding_box(xyz, data_region)
|
|
383
|
+
# if self.model.reuse_supports == False:
|
|
384
|
+
if np.any(np.min(bb[0,:])< self.interpolator.support.origin):
|
|
385
|
+
neworigin = np.min([self.interpolator.support.origin,bb[0,:]],axis=0)
|
|
386
|
+
logger.info("Changing origin of support for {} from {} {} {} to {} {} {}"\
|
|
387
|
+
.format(self.name,self.interpolator.support.origin[0],\
|
|
388
|
+
self.interpolator.support.origin[1],self.interpolator.support.origin[2],\
|
|
389
|
+
neworigin[0],neworigin[1],neworigin[2]))
|
|
390
|
+
self.interpolator.support.origin = neworigin
|
|
391
|
+
if np.any(np.max(bb[0,:])< self.interpolator.support.maximum):
|
|
392
|
+
newmax = np.max([self.interpolator.support.maximum,bb[0,:]],axis=0)
|
|
393
|
+
logger.info("Changing origin of support for {} from {} {} {} to {} {} {}"\
|
|
394
|
+
.format(self.name,self.interpolator.support.maximum[0],
|
|
395
|
+
self.interpolator.support.maximum[1],self.interpolator.support.maximum[2],\
|
|
396
|
+
newmax[0],newmax[1],newmax[2]))
|
|
397
|
+
|
|
398
|
+
self.interpolator.support.maximum = newmax
|
|
304
399
|
self.interpolator.set_region(region=region)
|
|
305
|
-
if not self.data_added:
|
|
306
|
-
self.add_data_to_interpolator(**kwargs)
|
|
307
|
-
|
|
308
400
|
# moving this to init because it needs to be done before constraints
|
|
309
401
|
# are added?
|
|
310
402
|
if fold is not None:
|
|
311
403
|
logger.info("Adding fold to %s" % self.name)
|
|
312
404
|
self.interpolator.fold = fold
|
|
313
405
|
# if we have fold weights use those, otherwise just use default
|
|
314
|
-
|
|
315
|
-
self.interpolator.add_fold_constraints()
|
|
316
|
-
else:
|
|
317
|
-
self.interpolator.add_fold_constraints(fold_weights)
|
|
406
|
+
self.interpolator.add_fold_constraints(**fold_weights)
|
|
318
407
|
if 'cgw' not in kwargs:
|
|
319
|
-
|
|
320
|
-
|
|
408
|
+
# try adding very small cg
|
|
409
|
+
kwargs['cgw'] = 0.0
|
|
321
410
|
self.interpolator.setup_interpolator(**kwargs)
|
|
322
411
|
self.interpolator.solve_system(**kwargs)
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
builder=self, data=self.data,
|
|
326
|
-
region=self.region,
|
|
327
|
-
faults=self.faults,
|
|
328
|
-
fold = fold
|
|
329
|
-
)
|
|
412
|
+
self._up_to_date = True
|
|
413
|
+
return self._feature
|
Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/features/lambda_geological_feature.py
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Geological features
|
|
3
|
+
"""
|
|
4
|
+
import logging
|
|
5
|
+
|
|
6
|
+
import numpy as np
|
|
7
|
+
|
|
8
|
+
logger = logging.getLogger(__name__)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class LambdaGeologicalFeature:
|
|
12
|
+
def __init__(self,function = None,name = 'unnamed_lambda', gradient_function = None):
|
|
13
|
+
self.function = function
|
|
14
|
+
self.name = name
|
|
15
|
+
self.gradient_function = gradient_function
|
|
16
|
+
def evaluate_value(self, xyz):
|
|
17
|
+
v = np.zeros((xyz.shape[0]))
|
|
18
|
+
if self.function is None:
|
|
19
|
+
v[:] = np.nan
|
|
20
|
+
else:
|
|
21
|
+
v[:] = self.function(xyz)
|
|
22
|
+
return v
|
|
23
|
+
def evaluate_gradient(self,xyz):
|
|
24
|
+
v = np.zeros((xyz.shape[0],3))
|
|
25
|
+
if self.gradient_function is None:
|
|
26
|
+
v[:,:] = np.nan
|
|
27
|
+
else:
|
|
28
|
+
v[:,:] = self.gradient_function(xyz)
|
|
29
|
+
return v
|
|
30
|
+
|
|
31
|
+
|
|
@@ -2,8 +2,9 @@
|
|
|
2
2
|
Structural frames
|
|
3
3
|
"""
|
|
4
4
|
import logging
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
import numpy as np
|
|
6
|
+
from LoopStructural.utils import getLogger
|
|
7
|
+
logger = getLogger(__name__)
|
|
7
8
|
|
|
8
9
|
|
|
9
10
|
class StructuralFrame:
|
|
@@ -14,8 +15,7 @@ class StructuralFrame:
|
|
|
14
15
|
def __init__(self, name, features, fold=None):
|
|
15
16
|
"""
|
|
16
17
|
Structural frame is a curvilinear coordinate system defined by
|
|
17
|
-
structural
|
|
18
|
-
observations associated with a fault or fold.
|
|
18
|
+
structural observations associated with a fault or fold.
|
|
19
19
|
|
|
20
20
|
Parameters
|
|
21
21
|
----------
|
|
@@ -26,6 +26,7 @@ class StructuralFrame:
|
|
|
26
26
|
self.features = features
|
|
27
27
|
self.data = None
|
|
28
28
|
self.fold = fold
|
|
29
|
+
|
|
29
30
|
def __getitem__(self, item):
|
|
30
31
|
"""
|
|
31
32
|
|
|
@@ -39,6 +40,21 @@ class StructuralFrame:
|
|
|
39
40
|
"""
|
|
40
41
|
return self.features[item]
|
|
41
42
|
|
|
43
|
+
def set_model(self, model):
|
|
44
|
+
"""Link the model that created the frame to the frame
|
|
45
|
+
and the features that make up the frame
|
|
46
|
+
|
|
47
|
+
Parameters
|
|
48
|
+
----------
|
|
49
|
+
model : GeologicalModel
|
|
50
|
+
the geological model that created the fold frame
|
|
51
|
+
"""
|
|
52
|
+
self.model = model
|
|
53
|
+
for f in self.features:
|
|
54
|
+
if f is None:
|
|
55
|
+
continue
|
|
56
|
+
f.set_model(model)
|
|
57
|
+
|
|
42
58
|
def add_region(self, region):
|
|
43
59
|
for i in range(3):
|
|
44
60
|
self.features[i].add_region(region)
|
|
@@ -71,7 +87,7 @@ class StructuralFrame:
|
|
|
71
87
|
"""
|
|
72
88
|
self.data = data
|
|
73
89
|
|
|
74
|
-
def evaluate_value(self, evaluation_points
|
|
90
|
+
def evaluate_value(self, evaluation_points):
|
|
75
91
|
"""
|
|
76
92
|
Evaluate the value of the structural frame for the points.
|
|
77
93
|
Can optionally only evaluate one coordinate
|
|
@@ -85,12 +101,13 @@ class StructuralFrame:
|
|
|
85
101
|
-------
|
|
86
102
|
|
|
87
103
|
"""
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
104
|
+
v = np.zeros(evaluation_points.shape) #create new 3d array of correct length
|
|
105
|
+
v[:] = np.nan
|
|
106
|
+
v[:,0] = self.features[0].evaluate_value(evaluation_points)
|
|
107
|
+
v[:,1] = self.features[1].evaluate_value(evaluation_points)
|
|
108
|
+
v[:,2] = self.features[2].evaluate_value(evaluation_points)
|
|
109
|
+
return v
|
|
110
|
+
|
|
94
111
|
def evaluate_gradient(self, evaluation_points, i=None):
|
|
95
112
|
"""
|
|
96
113
|
Evaluate the gradient of the structural frame.
|
Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/features/structural_frame_builder.py
CHANGED
|
@@ -6,7 +6,8 @@ import logging
|
|
|
6
6
|
|
|
7
7
|
import numpy as np
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
from LoopStructural.utils import getLogger
|
|
10
|
+
logger = getLogger(__name__)
|
|
10
11
|
|
|
11
12
|
from LoopStructural.modelling.features.cross_product_geological_feature \
|
|
12
13
|
import \
|
|
@@ -106,12 +107,14 @@ class StructuralFrameBuilder:
|
|
|
106
107
|
gxxgy = 1
|
|
107
108
|
gxxgz = 1
|
|
108
109
|
gyxgz = 1
|
|
110
|
+
step = kwargs.get('step', 10)
|
|
109
111
|
if 'gxxgy' in kwargs:
|
|
110
112
|
gxxgy = kwargs['gxxgy']
|
|
111
113
|
if 'gxxgz' in kwargs:
|
|
112
114
|
gxxgz = kwargs['gxxgz']
|
|
113
115
|
if 'gyxgz' in kwargs:
|
|
114
116
|
gyxgz = kwargs['gyxgz']
|
|
117
|
+
|
|
115
118
|
# set regularisation so the the main surface (foliation, fault) is smooth
|
|
116
119
|
# and the fields are allowed to vary more
|
|
117
120
|
regularisation = kwargs.pop('regularisation', [1., 1., 1.])
|
|
@@ -122,19 +125,21 @@ class StructuralFrameBuilder:
|
|
|
122
125
|
fold = None
|
|
123
126
|
if len(self.builders[0].data) > 0:
|
|
124
127
|
logger.info("Building %s coordinate 0"%self.name)
|
|
125
|
-
gx_feature = self.builders[0].
|
|
126
|
-
|
|
128
|
+
gx_feature = self.builders[0].feature
|
|
129
|
+
kwargs['regularisation']=regularisation[0]
|
|
130
|
+
self.builders[0].build_arguments = kwargs
|
|
131
|
+
|
|
127
132
|
# remove fold from kwargs
|
|
128
133
|
|
|
129
|
-
fold = kwargs.pop('fold',
|
|
134
|
+
fold = kwargs.pop('fold', None)
|
|
130
135
|
if gx_feature is None:
|
|
131
136
|
logger.warning(
|
|
132
137
|
"Not enough constraints for structural frame coordinate 0, \n"
|
|
133
138
|
"Add some more and try again.")
|
|
134
139
|
# make sure that all of the coordinates are using the same region
|
|
135
|
-
if gx_feature is not None and gx_feature.
|
|
136
|
-
self.builders[1].interpolator.set_region(gx_feature.
|
|
137
|
-
self.builders[2].interpolator.set_region(gx_feature.
|
|
140
|
+
if gx_feature is not None and gx_feature.interpolator.region_function is not None:
|
|
141
|
+
self.builders[1].interpolator.set_region(gx_feature.interpolator.region_function)
|
|
142
|
+
self.builders[2].interpolator.set_region(gx_feature.interpolator.region_function)
|
|
138
143
|
if 'data_region' in kwargs:
|
|
139
144
|
kwargs.pop('data_region')
|
|
140
145
|
if 'region' in kwargs:
|
|
@@ -147,17 +152,22 @@ class StructuralFrameBuilder:
|
|
|
147
152
|
# np.arange(0, self.support.n_elements),
|
|
148
153
|
# gy_feature.evaluate_gradient(self.support.barycentre),
|
|
149
154
|
# w=gyxgz)
|
|
150
|
-
if gx_feature is not None:
|
|
151
|
-
self.builders[2].add_orthogonal_feature(gx_feature, gxxgz)
|
|
152
|
-
gz_feature = self.builders[2].
|
|
155
|
+
if gx_feature is not None and gxxgz>0:
|
|
156
|
+
self.builders[2].add_orthogonal_feature(gx_feature, gxxgz,step=step)
|
|
157
|
+
gz_feature = self.builders[2].feature
|
|
158
|
+
kwargs['regularisation'] = regularisation[2]
|
|
159
|
+
self.builders[2].build_arguments = kwargs
|
|
153
160
|
|
|
154
161
|
if len(self.builders[1].data) > 0:
|
|
155
162
|
logger.info("Building %s coordinate 1"%self.name)
|
|
156
|
-
if gx_feature is not None:
|
|
157
|
-
self.builders[1].add_orthogonal_feature(gx_feature, gxxgy)
|
|
158
|
-
if gz_feature is not None:
|
|
159
|
-
self.builders[1].add_orthogonal_feature(gz_feature, gyxgz)
|
|
160
|
-
gy_feature = self.builders[1].
|
|
163
|
+
if gx_feature is not None and gxxgy>0:
|
|
164
|
+
self.builders[1].add_orthogonal_feature(gx_feature, gxxgy,step=step)
|
|
165
|
+
if gz_feature is not None and gyxgz>0:
|
|
166
|
+
self.builders[1].add_orthogonal_feature(gz_feature, gyxgz,step=step)
|
|
167
|
+
gy_feature = self.builders[1].feature
|
|
168
|
+
kwargs['regularisation'] = regularisation[1]
|
|
169
|
+
self.builders[1].build_arguments = kwargs
|
|
170
|
+
|
|
161
171
|
|
|
162
172
|
if gy_feature is None:
|
|
163
173
|
logger.warning(
|
Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/features/unconformity_feature.py
CHANGED
|
@@ -17,7 +17,7 @@ class UnconformityFeature:
|
|
|
17
17
|
self.value = value
|
|
18
18
|
self.type = 'unconformity'
|
|
19
19
|
self.name = '{}_unconformity'.format(feature.name)
|
|
20
|
-
|
|
20
|
+
self.builder = self.feature.builder
|
|
21
21
|
def add_region(self, region):
|
|
22
22
|
# self.feature.add_region(region)
|
|
23
23
|
pass
|
|
@@ -67,3 +67,8 @@ class UnconformityFeature:
|
|
|
67
67
|
"""
|
|
68
68
|
return self.feature.evaluate_gradient(pos)
|
|
69
69
|
|
|
70
|
+
def min(self):
|
|
71
|
+
return self.feature.min()
|
|
72
|
+
|
|
73
|
+
def max(self):
|
|
74
|
+
return self.feature.max()
|
|
Binary file
|
Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/fold/__pycache__/fold.cpython-36.pyc
ADDED
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -2,7 +2,8 @@ import logging
|
|
|
2
2
|
|
|
3
3
|
import numpy as np
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
from LoopStructural.utils import getLogger
|
|
6
|
+
logger = getLogger(__name__)
|
|
6
7
|
|
|
7
8
|
|
|
8
9
|
class FoldEvent:
|
|
@@ -26,7 +27,7 @@ class FoldEvent:
|
|
|
26
27
|
self.fold_limb_rotation = fold_limb_rotation
|
|
27
28
|
self.fold_axis = fold_axis
|
|
28
29
|
self.name = name
|
|
29
|
-
|
|
30
|
+
|
|
30
31
|
def get_fold_axis_orientation(self, points):
|
|
31
32
|
"""
|
|
32
33
|
gets the fold axis orientation for evaluation points
|
|
@@ -61,7 +62,7 @@ class FoldEvent:
|
|
|
61
62
|
|
|
62
63
|
def get_deformed_orientation(self, points):
|
|
63
64
|
"""
|
|
64
|
-
Calculate the
|
|
65
|
+
Calculate the direction vectors of the fold
|
|
65
66
|
|
|
66
67
|
Parameters
|
|
67
68
|
----------
|
|
@@ -70,6 +71,13 @@ class FoldEvent:
|
|
|
70
71
|
|
|
71
72
|
Returns
|
|
72
73
|
-------
|
|
74
|
+
fold_direction : np.array
|
|
75
|
+
a vector parallel to the fold
|
|
76
|
+
fold axis : np.array
|
|
77
|
+
the fold axis
|
|
78
|
+
dgz : np.array
|
|
79
|
+
the X direction of the finite strain ellipsoid, perpendicular to both
|
|
80
|
+
fold axis and fold direction
|
|
73
81
|
|
|
74
82
|
"""
|
|
75
83
|
fold_axis = self.get_fold_axis_orientation(points)
|
|
@@ -89,8 +97,8 @@ class FoldEvent:
|
|
|
89
97
|
dgz[d < 0] = -dgz[d < 0]
|
|
90
98
|
return fold_direction, fold_axis, dgz
|
|
91
99
|
|
|
92
|
-
def get_regularisation_direction(self, points):
|
|
93
|
-
|
|
100
|
+
# def get_regularisation_direction(self, points):
|
|
101
|
+
# self.foldframe.features[2].evaluate_gradient(points)
|
|
94
102
|
|
|
95
103
|
def rot_mat(self, axis, angle):
|
|
96
104
|
"""
|
|
@@ -7,7 +7,8 @@ from LoopStructural.modelling.fold.fold_rotation_angle_feature import \
|
|
|
7
7
|
fourier_series
|
|
8
8
|
from LoopStructural.modelling.fold import SVariogram
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
from LoopStructural.utils import getLogger
|
|
11
|
+
logger = getLogger(__name__)
|
|
11
12
|
|
|
12
13
|
|
|
13
14
|
class FoldRotationAngle:
|
|
@@ -31,7 +32,7 @@ class FoldRotationAngle:
|
|
|
31
32
|
self.svario = SVariogram(self.fold_frame_coordinate, self.rotation_angle)
|
|
32
33
|
self.fitted_params = None
|
|
33
34
|
|
|
34
|
-
def fit_fourier_series(self, wl = None, lags = None, nlag = None, lag = None):
|
|
35
|
+
def fit_fourier_series(self, wl = None, lags = None, nlag = None, lag = None, skip_variogram=False,**kwargs):
|
|
35
36
|
"""
|
|
36
37
|
|
|
37
38
|
Parameters
|
|
@@ -48,8 +49,8 @@ class FoldRotationAngle:
|
|
|
48
49
|
if self.svario is None:
|
|
49
50
|
self.svario = SVariogram(self.fold_frame_coordinate,
|
|
50
51
|
self.rotation_angle)
|
|
51
|
-
|
|
52
|
-
|
|
52
|
+
if skip_variogram == False:
|
|
53
|
+
self.svario.calc_semivariogram(lags=lags, nlag=nlag, lag=lag)
|
|
53
54
|
if wl is None:
|
|
54
55
|
wl = self.svario.find_wavelengths(lags=lags, nlag=nlag, lag=lag)
|
|
55
56
|
# for now only consider single fold wavelength
|
|
@@ -4,7 +4,8 @@ import numpy as np
|
|
|
4
4
|
|
|
5
5
|
from LoopStructural.modelling.features.structural_frame import StructuralFrame
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
from LoopStructural.utils import getLogger
|
|
8
|
+
logger = getLogger(__name__)
|
|
8
9
|
|
|
9
10
|
|
|
10
11
|
class FoldFrame(StructuralFrame):
|
|
@@ -21,10 +22,7 @@ class FoldFrame(StructuralFrame):
|
|
|
21
22
|
super().__init__(name, features, fold)
|
|
22
23
|
self.model = None
|
|
23
24
|
|
|
24
|
-
def
|
|
25
|
-
self.model = model
|
|
26
|
-
|
|
27
|
-
def calculate_fold_axis_rotation(self, feature_builder):
|
|
25
|
+
def calculate_fold_axis_rotation(self, feature_builder,fold_axis=None):
|
|
28
26
|
"""
|
|
29
27
|
Calculate the fold axis rotation angle by finding the angle between the
|
|
30
28
|
intersection lineation and the gradient to the 1st coordinate of the
|
|
@@ -45,6 +43,9 @@ class FoldFrame(StructuralFrame):
|
|
|
45
43
|
points.append(gpoints)
|
|
46
44
|
if npoints.shape[0] > 0:
|
|
47
45
|
points.append(npoints)
|
|
46
|
+
if fold_axis is not None:
|
|
47
|
+
if fold_axis.shape[0] > 0 and fold_axis.shape[1] == 6:
|
|
48
|
+
points.append(fold_axis)
|
|
48
49
|
if len(points) == 0:
|
|
49
50
|
return 0, 0
|
|
50
51
|
points = np.vstack(points)
|
|
@@ -11,4 +11,8 @@ Submodules
|
|
|
11
11
|
utils
|
|
12
12
|
|
|
13
13
|
"""
|
|
14
|
-
from .
|
|
14
|
+
from .logging import getLogger, log_to_file, log_to_console
|
|
15
|
+
from .map2loop import process_map2loop, build_model
|
|
16
|
+
from .helper import get_data_axis_aligned_bounding_box, get_data_bounding_box, get_data_bounding_box_map
|
|
17
|
+
from .helper import get_dip_vector,get_strike_vector, get_vectors
|
|
18
|
+
from .regions import RegionEverywhere
|
Miniconda/envs/loop/Lib/site-packages/LoopStructural/utils/__pycache__/__init__.cpython-36.pyc
ADDED
|
Binary file
|
Miniconda/envs/loop/Lib/site-packages/LoopStructural/utils/__pycache__/bounding_box.cpython-36.pyc
ADDED
|
Binary file
|