Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
211 commits
Select commit Hold shift + click to select a range
bf3c7c2
initial commit
lachlangrose Jun 17, 2025
ef6deba
adding pyproject.toml for ruff
lachlangrose Jun 17, 2025
bfd0a9c
change linter to ruff
lachlangrose Jun 17, 2025
70aafd5
adding release please action
lachlangrose Jun 17, 2025
a330933
linting
lachlangrose Jun 17, 2025
720bbf5
Bump dawidd6/action-download-artifact from 9 to 11
dependabot[bot] Jun 17, 2025
0122b59
ci: fix formatting of release-please
lachlangrose Jun 17, 2025
1a5e7b7
Merge pull request #2 from Loop3D/main
lachlangrose Jun 17, 2025
90ebef3
Update linter.yml
lachlangrose Jun 17, 2025
ec42a79
Update release-please.yml
lachlangrose Jun 17, 2025
d85b581
fixing syntax
lachlangrose Jun 17, 2025
8ad1c4e
adding release please files
lachlangrose Jun 17, 2025
387086f
Merge pull request #1 from Loop3D/dependabot/github_actions/dawidd6/a…
lachlangrose Jun 17, 2025
6ae8d3f
fix: import typo
lachlangrose Jun 17, 2025
7bf312d
Merge branch 'main' of github.com:Loop3D/plugin_map2loop
lachlangrose Jun 17, 2025
c0bb5f2
template for basal contacts processing tool
lachlangrose Jun 17, 2025
f9878b0
Update linter.yml
lachlangrose Jun 17, 2025
b51f758
disable qgis testing for now
lachlangrose Jun 17, 2025
b3fc47d
Update release-please.yml
lachlangrose Jun 17, 2025
56a20ae
Update release-please.yml
lachlangrose Jun 17, 2025
043ea5c
Merge remote-tracking branch 'origin/processing/basal_contacts' into …
rabii-chaarani Jun 20, 2025
773ef48
feature: Implement StratigraphySorterAlgorithm
rabii-chaarani Jun 23, 2025
e7bb9f6
feature: functions to convert layers to GeoDataFrame and DataFrame
rabii-chaarani Aug 18, 2025
95ba89b
feature: add geodataframe to qgsLayer conversion
rabii-chaarani Aug 18, 2025
f744d83
refactor: update GeoDataFrameToQgsLayer
rabii-chaarani Aug 18, 2025
ea67c2e
fix: GeoDataFrameToQgsLayer to FeatureSink
rabii-chaarani Aug 18, 2025
f11d713
refactor: clean up imports in vectorLayerWrapper.py
rabii-chaarani Aug 18, 2025
d718b96
feature: add basal contacts extraction algorithm
rabii-chaarani Aug 18, 2025
0c7e768
refactor: add imports in sorter.py
rabii-chaarani Aug 18, 2025
aeed68b
feature: implement sampler algorithm
rabii-chaarani Aug 25, 2025
78f1511
feature: add thickness calculator algorithms
rabii-chaarani Aug 25, 2025
4069406
fix: correct return value
rabii-chaarani Aug 25, 2025
f67be33
feature: add support SamplerSpacing
rabii-chaarani Aug 25, 2025
3c46553
fix: update sampler type strings for consistency
rabii-chaarani Aug 25, 2025
7e76267
fix: convert dataframe to qgis layer
rabii-chaarani Aug 26, 2025
c42a4dd
feature: add dataframe to point sink conversion
rabii-chaarani Aug 27, 2025
54a0bc9
fix: add input parameters
rabii-chaarani Aug 27, 2025
df54c1b
refactor: rename to dataframeToQgsLayer
rabii-chaarani Aug 27, 2025
703a89c
refactor: update thickness calculator parameters and processing logic
rabii-chaarani Aug 27, 2025
8bb0c99
update BasalContactsAlgorithm
noellehmcheng Aug 27, 2025
359e45a
Merge branch 'processing/processing_tools' of https://github.com/Loop…
noellehmcheng Aug 27, 2025
fcdf4a2
fix import in vectorLayerWrapper.py
noellehmcheng Aug 28, 2025
7aaa076
rename unused loop idx in vectorLayerWrapper
noellehmcheng Aug 28, 2025
d0d9e77
rename directory to m2l to avoid import conflicts
noellehmcheng Aug 29, 2025
34f3d25
fix linter.yml
noellehmcheng Aug 29, 2025
76df4b2
Merge pull request #12 from Loop3D/processing/processing_tools_basal-…
rabii-chaarani Sep 1, 2025
52ee4ad
Merge branch 'processing/processing_tools' into processing-tools-rename
rabii-chaarani Sep 1, 2025
b72fbf4
fix: add QgsPoint import
rabii-chaarani Sep 1, 2025
04d3937
fix: add QgsPointXY import
rabii-chaarani Sep 1, 2025
ffe7f98
Merge branch 'processing/processing_tools' into processing-tools-rename
rabii-chaarani Sep 1, 2025
bf0ab2d
Merge pull request #14 from Loop3D/processing-tools-rename
rabii-chaarani Sep 1, 2025
d4a1d7d
fix: enforce str type
rabii-chaarani Sep 1, 2025
cf8321e
refactor: handling of string fields
rabii-chaarani Sep 1, 2025
60bd84e
fix: add missing import for wkb_loads
rabii-chaarani Sep 1, 2025
1c72667
refactor: implementation and enforce string dtype
rabii-chaarani Sep 1, 2025
3dd9aea
fix: QGIS string fields are converted to str
rabii-chaarani Sep 1, 2025
86e3f7b
fix: remove type conversion issues
rabii-chaarani Sep 1, 2025
2c37667
fix: simplify string field handling
rabii-chaarani Sep 1, 2025
510d82f
fix: ensure string fields are explicitly converted
rabii-chaarani Sep 1, 2025
c028237
sampler
noellehmcheng Sep 1, 2025
cb1ac9d
Merge branch 'processing-tools-rename' into processing/processing_too…
noellehmcheng Sep 1, 2025
bc99ec9
fix: enhance contact rextraction tool
rabii-chaarani Sep 1, 2025
af2056d
fix: update algorithm imports and registration in provider
rabii-chaarani Sep 1, 2025
546724b
fix: correct parameter types
rabii-chaarani Sep 1, 2025
671fed2
fix: standardize algorithm group ID
rabii-chaarani Sep 1, 2025
8cc49af
fix: add user-defined sorting option
rabii-chaarani Sep 3, 2025
ffeb1bc
input files
noellehmcheng Sep 3, 2025
2f070c9
Merge branch 'processing/processing_tools' into processing/processing…
noellehmcheng Sep 3, 2025
7b11408
fix: change stratigraphic column QgsProcessingParameterFeatureSink de…
noellehmcheng Sep 3, 2025
27d2ee5
feat add formation column mapping and validation for strat column
noellehmcheng Sep 4, 2025
03a6ffc
delete input files
noellehmcheng Sep 4, 2025
e23f023
fix sorter
noellehmcheng Sep 4, 2025
ccd1c93
fix data type of spacing and decimator in sampler
noellehmcheng Sep 4, 2025
26233f0
rename unused loop idx in sampler
noellehmcheng Sep 4, 2025
1709581
add dtm to input
noellehmcheng Sep 6, 2025
2488fab
add validation in sampler
noellehmcheng Sep 6, 2025
38a552a
spacing decimator test
noellehmcheng Sep 8, 2025
9341a8e
refactor sampler tests for cicd compatibility
noellehmcheng Sep 8, 2025
096a13e
update tester.yml workflow for all branches
noellehmcheng Sep 8, 2025
5fa83ad
change image
noellehmcheng Sep 8, 2025
a6c14b2
update testing.txt
noellehmcheng Sep 8, 2025
378f9ae
install map2loop in tester.yml
noellehmcheng Sep 8, 2025
cf91e1f
Merge branch 'processing/processing_tools_sampler_test' into processi…
noellehmcheng Sep 8, 2025
06fc7ec
tester.yml
noellehmcheng Sep 8, 2025
a2b96f6
input file
noellehmcheng Sep 8, 2025
79b28ad
test_basal_contacts
noellehmcheng Sep 8, 2025
82532dc
fix import in test_basal_contacts.py
noellehmcheng Sep 8, 2025
02f9cb9
fix strati_column in test_basal_contacts
noellehmcheng Sep 8, 2025
5cab785
Merge branch 'processing/processing_tools' into processing/processing…
noellehmcheng Sep 10, 2025
91bcc09
add structure and dtm parameters for SorterObservationProjections and…
noellehmcheng Sep 10, 2025
f527e91
Merge branch 'processing/processing_tools' into processing/processing…
noellehmcheng Sep 12, 2025
9273c17
add contact as output layer
noellehmcheng Sep 12, 2025
3576bd7
change contacts_df and relationships_df
noellehmcheng Sep 12, 2025
70fbefc
merge processing/processing_tools_sampler
noellehmcheng Sep 12, 2025
06d4ebc
merge with processing_tools_sampler_test
noellehmcheng Sep 12, 2025
ebb88f0
merge with processing_tools_basal-contacts-v2
noellehmcheng Sep 12, 2025
a471265
Merge branch 'processing/processing_tools_basal-contacts_test' into n…
noellehmcheng Sep 12, 2025
fb873f3
add contact layer in sorter
noellehmcheng Sep 12, 2025
a9092f4
handle dip, dipdir, orientation type for structure in sorter.py
noellehmcheng Sep 15, 2025
cfd09ec
fix syntax in sampler
noellehmcheng Sep 16, 2025
1e28eb7
update basal contact test
noellehmcheng Sep 16, 2025
856cb42
update basal contact test to include contacts layer
noellehmcheng Sep 16, 2025
73b6e22
feat: thickness calculator tool
rabii-chaarani Sep 17, 2025
b483f00
feat: raster and dataframe handling
rabii-chaarani Sep 17, 2025
9ee2ac7
fix clean up process for tests
noellehmcheng Sep 17, 2025
beef36d
fix remove duplicated units_df in sorter
noellehmcheng Sep 18, 2025
81f2670
fix build_input_frames in sorter
noellehmcheng Sep 18, 2025
a3a7082
add contacts and basal contacts data for testing
noellehmcheng Sep 19, 2025
a3fe1de
add validation in sorter
noellehmcheng Sep 19, 2025
170c1b8
handle user defined strati column and add validation
noellehmcheng Sep 19, 2025
569f39b
add json file output for sorter
noellehmcheng Sep 19, 2025
9435579
refactor: remove user defined column
rabii-chaarani Sep 22, 2025
a660002
feat: add qvariantToFloat function
rabii-chaarani Sep 22, 2025
b74bc79
feat: Processing/processing tools sampler (#19)
noellehmcheng Sep 22, 2025
26399b2
Processing/processing tools basal contacts test (#21)
noellehmcheng Sep 22, 2025
1235856
Merge branch 'noelle/sorter' into processing/processing_tools
rabii-chaarani Sep 22, 2025
72f5949
fix: fix syntac error
rabii-chaarani Sep 22, 2025
30c7e20
fix: remove redundant parameters in SamplerAlgorithm
rabii-chaarani Sep 22, 2025
5dbcfca
fix: remove redundant imports
rabii-chaarani Sep 22, 2025
09091a4
Merge branch 'processing/processing_tools' into processing/thickness_…
rabii-chaarani Sep 22, 2025
90663cf
fix: remove unused QgsSettings
rabii-chaarani Sep 22, 2025
4ff7546
fix: updated tearDownClass
rabii-chaarani Sep 22, 2025
14db8d0
fix: add pass statement
rabii-chaarani Sep 22, 2025
ec993bb
update sampler tests
noellehmcheng Sep 22, 2025
83c1703
update sampler
noellehmcheng Sep 22, 2025
747abef
Merge branch 'processing/thickness_calculator' of https://github.com/…
noellehmcheng Sep 22, 2025
5205cf5
update strati column and bounding box
noellehmcheng Sep 23, 2025
a259cae
fix sample contacts data type
noellehmcheng Sep 23, 2025
00d4bb8
add orientation type for structure data
noellehmcheng Sep 23, 2025
d2d2925
Processing/thickness calculator (#23)
rabii-chaarani Sep 24, 2025
17cd45b
feat: add UserDefinedStratigraphyAlgorithm to provider
rabii-chaarani Sep 24, 2025
4395880
feat: import UserDefinedStratigraphyAlgorithm
rabii-chaarani Sep 24, 2025
2d4eff6
refactor: update BasalContactsAlgorithm
rabii-chaarani Sep 24, 2025
09034f1
refactor: update SamplerAlgorithm
rabii-chaarani Sep 24, 2025
932b95c
refactor: update sorter
rabii-chaarani Sep 24, 2025
476eadb
refactor: update ThicknessCalculatorAlgorithm
rabii-chaarani Sep 24, 2025
9e890d5
feat: implement UserDefinedStratigraphyAlgorithm
rabii-chaarani Sep 24, 2025
3b61ed6
refactor: remove redundant algo
rabii-chaarani Sep 24, 2025
248040d
fix: use correct strati table
rabii-chaarani Sep 24, 2025
9cacb9b
fix: correct variable assignment
rabii-chaarani Sep 24, 2025
f59f4f8
fix units in ThicknessCalculatorAlgorithm
noellehmcheng Sep 24, 2025
b1bb23f
update extract_basal_contacts and test_basal_contacts
noellehmcheng Sep 24, 2025
ec389b3
Revert "update extract_basal_contacts and test_basal_contacts"
noellehmcheng Sep 24, 2025
e6fa63c
fix test_basal_contacts
noellehmcheng Sep 24, 2025
d4d6d83
fix input file name in test_basal_contacts
noellehmcheng Sep 24, 2025
2cd4c53
feat dynamic field handling in Sampler
noellehmcheng Oct 6, 2025
97c5274
fix strat column data in ThicknessCalculator
noellehmcheng Oct 6, 2025
fe429df
merge with processing/processing_tools
noellehmcheng Oct 7, 2025
53917e3
add user defined boundingbox in ThicknessCalculatorAlgorithm
noellehmcheng Oct 15, 2025
c94b40c
replace QMetaType with QVariant in sampler
noellehmcheng Oct 15, 2025
b32baec
change orientation type variable name in ThicknessCalculatorAlgorithm
noellehmcheng Oct 15, 2025
291de7a
Merge branch 'processing/processing_tools' into noelle/thickness_calc…
noellehmcheng Oct 16, 2025
d5e5862
Merge pull request #25 from Loop3D/noelle/thickness_calculator
noellehmcheng Oct 16, 2025
b34340c
Initial commit
lachlangrose Oct 16, 2025
57dec36
Merge remote-tracking branch 'plugin_loopstructural/main'
lachlangrose Oct 16, 2025
d866175
rename for folder for merge with loopstructural plugin
lachlangrose Oct 16, 2025
4ada6b3
Merge remote-tracking branch 'plugin_map2loop/ls_merge'
lachlangrose Oct 16, 2025
83c4dfa
add agent.md file with initial content. (#53)
lachlangrose Oct 22, 2025
96fa040
Initial plan
Copilot Oct 22, 2025
9fce47c
Add separate GUI widgets for map2loop processing tools
Copilot Oct 22, 2025
4cb593b
Add documentation for map2loop tools widgets
Copilot Oct 22, 2025
bd81685
fix: remove QgsProxyModel from .ui file and move to .py file
lachlangrose Oct 22, 2025
8a3dbeb
refactor: Convert widgets to dialogs and call map2loop classes directly
Copilot Oct 22, 2025
909610d
fix: loopstructural/map2loop share the same stratigraphic column widg…
lachlangrose Nov 26, 2025
2d13552
fix: change basal contacts from processing call to a shared api
lachlangrose Nov 26, 2025
2f695b0
fix: pass data manager to all widgets
lachlangrose Nov 26, 2025
b5a3532
fix: use api for samplers, sorters and calculators
lachlangrose Nov 26, 2025
558e6fa
fix: add automatic column guessing framework
lachlangrose Nov 27, 2025
7b585b4
fix: pass data manager to widgets
lachlangrose Nov 27, 2025
64be0b8
fix: guess sorter columns/layers
lachlangrose Nov 27, 2025
dc6730a
fix: find layer can work with other layer types
lachlangrose Nov 27, 2025
18c46ca
fix: add geodataframetoproject for calculating contacts and guess col…
lachlangrose Nov 27, 2025
00a4f89
fix: guess layers/colum names
lachlangrose Nov 27, 2025
64952ea
fix: get list of units from datamanager for extracting contacts out
lachlangrose Dec 1, 2025
366e37f
fix: adding helpers for stratigraphic column to data manager
lachlangrose Dec 1, 2025
b443e29
fix: mapping stratigraphic column sorters to qgis fields/layers
lachlangrose Dec 1, 2025
f21e4c8
fix: use options manager for getting debug mode
lachlangrose Dec 2, 2025
45f97d2
fix: add debug mode to sampler
lachlangrose Dec 2, 2025
a9ef752
fix: debug mode to thickness calc
lachlangrose Dec 2, 2025
6e05ec7
fix: remove stratigraphic column layers
lachlangrose Dec 2, 2025
1d0d0b2
merge
lachlangrose Dec 3, 2025
ffa4dd4
fix: add get debug mode
lachlangrose Dec 15, 2025
3503c7e
fix: set default sorter to age based
lachlangrose Dec 15, 2025
7abe2bf
docs: remove copilot doc
lachlangrose Dec 15, 2025
e153ec6
fix: add all m2l tools as toolbar buttons
lachlangrose Dec 15, 2025
db4342f
fix: add image for basal contacts
lachlangrose Dec 15, 2025
cae7e21
fix: get logging from m2l
lachlangrose Dec 15, 2025
9e1b915
chore: adding precommit to avoid print statements
lachlangrose Dec 16, 2025
e5125bb
fix: use layer crs for sampler
lachlangrose Dec 16, 2025
9c6d4a9
fix: update strat column thickness after thickness calc
lachlangrose Dec 16, 2025
01dfbd4
fix: connect up thickness calc
lachlangrose Dec 16, 2025
06e586f
fix: store location tracking and lines for thickness calculators
lachlangrose Dec 16, 2025
3a37ae0
style: ruff check --fix
lachlangrose Dec 16, 2025
dc726d8
style: ruff check
lachlangrose Dec 16, 2025
19d5070
Merge branch 'main' into copilot/create-separate-gui-components
lachlangrose Dec 16, 2025
70fdbbb
fix: incorrect field name
lachlangrose Dec 16, 2025
351a96a
fix: convert unit_name_field to 'UNITNAME'
lachlangrose Dec 17, 2025
2ec3fcd
fix: updating unload to prevent error when missing dock widgets
lachlangrose Dec 17, 2025
24cc539
fix: rename unit_name_column to unit_name_field
lachlangrose Dec 17, 2025
56ceb77
fix: update stratigraphic column with calculated thicknesses
lachlangrose Dec 17, 2025
5fba7c8
fix: update stratigraphic unit to prevent missing widget error
lachlangrose Dec 17, 2025
4a0ba19
style: formatting
lachlangrose Dec 17, 2025
400434c
Add debug directory preference and DebugManager for structured loggin…
Copilot Jan 14, 2026
1fb1539
Fault feature panel upgrade (#63)
lachlangrose Jan 14, 2026
f995ffc
Merge branch 'dev-0.1.12' of github.com:Loop3D/plugin_loopstructural …
lachlangrose Jan 15, 2026
bb9cbf0
ci: updating pre-commit yaml
lachlangrose Jan 15, 2026
ddd955c
style: pre-commit/ruff
lachlangrose Jan 15, 2026
d197176
style: ruff
lachlangrose Jan 15, 2026
c7d9b8e
fix: add topology calculator widget
lachlangrose Jan 15, 2026
dea0075
fix: bump loopstructural version
lachlangrose Jan 18, 2026
39437bd
fix: applying some copilot suggestions
lachlangrose Jan 19, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion .github/workflows/linter.yml
Original file line number Diff line number Diff line change
Expand Up @@ -48,4 +48,3 @@ jobs:
# - uses: stefanzweifel/git-auto-commit-action@v6
# with:
# commit_message: "style: style fixes by ruff and autoformatting by black"

2 changes: 1 addition & 1 deletion .github/workflows/package_and_release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -165,4 +165,4 @@ jobs:
--create-plugin-repo
--github-token ${{ secrets.GITHUB_TOKEN }}
--osgeo-username ${{ secrets.OSGEO_USER }}
--osgeo-password ${{ secrets.OSGEO_PASSWORD }}
--osgeo-password ${{ secrets.OSGEO_PASSWORD }}
13 changes: 13 additions & 0 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,19 @@ repos:
- --target-version=py39


# Local hook to forbid print statements in Python files (excluding tests)
- repo: local
hooks:
- id: forbid-print-statements
name: Forbid print statements
entry: grep -nH -E '\bprint\s*\('
language: system
types: [python]
exclude: 'tests/'
pass_filenames: true
description: 'Fail if print statements are found in Python files.'



ci:
autoupdate_schedule: quarterly
Expand Down
2 changes: 1 addition & 1 deletion .release-please-manifest.json
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
{
".": "0.0.1",
"loopstructural": "0.1.11"
}
}
3 changes: 0 additions & 3 deletions docs/usage/3d-modeling.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,3 @@ In LoopStructural stratigraphic surfaces can be modelled using implicit function

### Fault modelling
Faults are modelled in LoopStructural by building three implicit functions defining the fault surface, fault slip vector and the fault extent. Combined with a parametric representation of the fault displacement within these coordinates a kinematic model.



2 changes: 1 addition & 1 deletion docs/usage/install/linux.md
Original file line number Diff line number Diff line change
Expand Up @@ -40,4 +40,4 @@
1. Restart QGIS if necessary.
2. Confirm that the plugin is available under the **Plugins** menu.

You are now ready to use the plugin on your Linux system!
You are now ready to use the plugin on your Linux system!
4 changes: 2 additions & 2 deletions docs/usage/install/macosx.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
```bash
brew install qgis
```

### Step 2: Install Dependencies Using pip
1. Ensure you have `pip` installed. If not, install it using:
```bash
Expand All @@ -33,4 +33,4 @@
1. Restart QGIS if necessary.
2. Confirm that the plugin is available under the **Plugins** menu.

You are now ready to use the plugin on your MacOS system!
You are now ready to use the plugin on your MacOS system!
6 changes: 2 additions & 4 deletions docs/usage/installation.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,12 @@

This plugin is published on the official QGIS plugins repository: <https://plugins.qgis.org/plugins/loopstructural/>.

LoopStructural plugin requires the installation of `LoopStructural, loopsolver, pyvista, pyvistaqt and pyqtgraph`. Optionally meshio and geoh5py can also be installed for exporting surfaces/models into different formats.
LoopStructural plugin requires the installation of `LoopStructural, loopsolver, pyvista, pyvistaqt and pyqtgraph`. Optionally meshio and geoh5py can also be installed for exporting surfaces/models into different formats.

To install these dependencies you can follow the instructions below for your operating system.

### Using QPIP
You can also use the experimental QGIS plugin QPIP which is developed by OPENGIS.ch <https://plugins.qgis.org/plugins/qpip/> that manages the Python dependencies for your QGIS environment and keeps the dependencies up to date.
You can also use the experimental QGIS plugin QPIP which is developed by OPENGIS.ch <https://plugins.qgis.org/plugins/qpip/> that manages the Python dependencies for your QGIS environment and keeps the dependencies up to date.


----
Expand All @@ -23,5 +23,3 @@ install/linux
install/macosx

```


12 changes: 6 additions & 6 deletions docs/usage/interface.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
The LoopStructural plugin interfaces with QGIS to define the model input data and parameters.

### Bounding box
The bounding box defines the spatial extent of the model and can be either specified manually or automatically by calculating the extent from a selected layer or the current view. Not that the bounding box currently has to be axis aligned, meaning that the bounding box is defined by the minimum and maximum x, y and z coordinates.
The bounding box defines the spatial extent of the model and can be either specified manually or automatically by calculating the extent from a selected layer or the current view. Not that the bounding box currently has to be axis aligned, meaning that the bounding box is defined by the minimum and maximum x, y and z coordinates.


![Bounding Box](../static/bounding_box_widget.png)
Expand All @@ -17,22 +17,22 @@ If the points being modelled contain a Z coordinate, this can be used instead of
### Fault layers
The faults trace layer is usually a line layer that contains the trace of the fault. The fault trace is used to define the location of the fault in the model. Optional attributes can be used to further constrain the model:
- **fault name** the name of the fault to be used in the model, if this is left blank the feature ID will be used instead.
- **Dip** the dip of the fault, if this is left blank the fault will be assumed to be vertical.
- **Dip** the dip of the fault, if this is left blank the fault will be assumed to be vertical.
- **Displacement** - The maximum displacement magnitude of the fault. If this is not specified, a default value will be used.
- **Pitch** - defines the pitch of the fault slip vector in the fault surface. If this is left blank a vertical slip vector is assumed and projected onto the fault surface.
- **Pitch** - defines the pitch of the fault slip vector in the fault surface. If this is left blank a vertical slip vector is assumed and projected onto the fault surface.

![Fault Layer](../static/fault_layers.png)
### Stratigraphy
Two layers can be used to constrain the stratigraphy of the model:
1. Basal contacts - this layer defines the basal contacts of the stratigraphy. The layer should contain a line layer with the contact traces. The attributes can be used to define the name of the contact.
2. Structural data - this layer defines the structural data that is used to constrain the model. The layer should contain a point layer with the structural data. The attributes can be used to define the orientation of the data, such as dip and dip direction.
2. Structural data - this layer defines the structural data that is used to constrain the model. The layer should contain a point layer with the structural data. The attributes can be used to define the orientation of the data, such as dip and dip direction.

![Stratigraphic Layer](../static/stratigraphic_layer.png)

## Stratigraphic Column
The stratigraphic column defines the order of the contacts and any unconformable relationships between them. The column is defined by a list of units - these units are ordered from oldest at the bottom to youngest at the top. Unconformities can be inserted between units to define an unconformable relationship. The thicknesses define the true thickness of each unit and are used to parameterise the interpolation. The unit names should match the names of the contacts in the basal contacts layer. Units without basal contacts can be included in the stratigraphic column but will not be constrained by any data.

The stratigraphic column can be initialised from the basal contacts layer by clicking the "Initialise from Layer" button. This will create a column with the contacts in the order they are found in the layer. The column can then be edited to add unconformities or change the order of the units. To change the order of units simply drag the units in the list. To add an unconformity, click the "Add Unconformity" button and drag the unconformity the location in the column.
The stratigraphic column can be initialised from the basal contacts layer by clicking the "Initialise from Layer" button. This will create a column with the contacts in the order they are found in the layer. The column can then be edited to add unconformities or change the order of the units. To change the order of units simply drag the units in the list. To add an unconformity, click the "Add Unconformity" button and drag the unconformity the location in the column.


![Stratigraphic Column](../static/stratigraphic_column_04.png)
Expand All @@ -45,7 +45,7 @@ The fault-fault relationship table defines the interaction between faults in the
![Fault Topology](../static/fault_topology_hamersley.png)

## Model parameters
Once the layers have been selected, stratigraphic column defined and the fault topology relationships set, the LoopStructural model can be initialised.
Once the layers have been selected, stratigraphic column defined and the fault topology relationships set, the LoopStructural model can be initialised.

Initialise model will create a LoopStructural model with all of the geological features in the model. For each feature in the model the number of interpolation elements (degrees of freedom), the weighting of the regularisation, contact points and orientation weight can be changed.
![Model Parameters](../static/model-setup.png)
Loading