Backstrip
Overview
The backstrip module is used to find tectonic subsidence from paleo water depths, and sediment decompaction over time.
Running backstrip
You can either run backstrip as a built-in script, specifying parameters as command-line options (...):
python -m pybacktrack.backstrip_cli ...
…or import pybacktrack into your own script, calling its functions and specifying parameters as function arguments (...):
import pybacktrack
pybacktrack.backstrip_and_write_well(...)
Note
You can run python -m pybacktrack.backstrip_cli --help to see a description of all command-line options available, or
see the backstripping reference section for documentation on the function parameters.
Example
To backstrip the sunrise drill site (located on shallower continental crust), and output all available parameters (via the -d option), we can run it from the command-line as:
python -m pybacktrack.backstrip_cli \
-w pybacktrack_examples/example_data/sunrise_lithology.txt \
-l primary extended \
-d age compacted_depth compacted_thickness decompacted_thickness decompacted_density decompacted_sediment_rate decompacted_depth min_tectonic_subsidence max_tectonic_subsidence average_tectonic_subsidence min_water_depth max_water_depth average_water_depth sea_level paleo_longitude paleo_latitude compacted_density composite_porosity composite_decay lithology \
-slm Haq87_SealevelCurve_Longterm \
-o sunrise_backstrip_amended.txt \
-- \
sunrise_backstrip_decompacted.txt
…or write some Python code to do the same thing:
import pybacktrack
# Input and output filenames.
input_well_filename = 'pybacktrack_examples/example_data/sunrise_lithology.txt'
amended_well_output_filename = 'sunrise_backstrip_amended.txt'
decompacted_output_filename = 'sunrise_backstrip_decompacted.txt'
# Read input well file, and write amended well and decompacted results to output files.
pybacktrack.backstrip_and_write_well(
decompacted_output_filename,
input_well_filename,
lithology_filenames=[pybacktrack.PRIMARY_BUNDLE_LITHOLOGY_FILENAME,
pybacktrack.EXTENDED_BUNDLE_LITHOLOGY_FILENAME],
sea_level_model=pybacktrack.BUNDLE_SEA_LEVEL_MODELS['Haq87_SealevelCurve_Longterm'],
decompacted_columns=[pybacktrack.BACKSTRIP_COLUMN_AGE,
pybacktrack.BACKSTRIP_COLUMN_COMPACTED_DEPTH,
pybacktrack.BACKSTRIP_COLUMN_COMPACTED_THICKNESS,
pybacktrack.BACKSTRIP_COLUMN_DECOMPACTED_THICKNESS,
pybacktrack.BACKSTRIP_COLUMN_DECOMPACTED_DENSITY,
pybacktrack.BACKSTRIP_COLUMN_DECOMPACTED_SEDIMENT_RATE,
pybacktrack.BACKSTRIP_COLUMN_DECOMPACTED_DEPTH,
pybacktrack.BACKSTRIP_COLUMN_MIN_TECTONIC_SUBSIDENCE,
pybacktrack.BACKSTRIP_COLUMN_MAX_TECTONIC_SUBSIDENCE,
pybacktrack.BACKSTRIP_COLUMN_AVERAGE_TECTONIC_SUBSIDENCE,
pybacktrack.BACKSTRIP_COLUMN_MIN_WATER_DEPTH,
pybacktrack.BACKSTRIP_COLUMN_MAX_WATER_DEPTH,
pybacktrack.BACKSTRIP_COLUMN_AVERAGE_WATER_DEPTH,
pybacktrack.BACKSTRIP_COLUMN_SEA_LEVEL,
pybacktrack.BACKSTRIP_COLUMN_PALEO_LONGITUDE,
pybacktrack.BACKSTRIP_COLUMN_PALEO_LATITUDE,
pybacktrack.BACKSTRIP_COLUMN_COMPACTED_DENSITY,
pybacktrack.BACKSTRIP_COLUMN_COMPOSITE_POROSITY,
pybacktrack.BACKSTRIP_COLUMN_COMPOSITE_DECAY,
pybacktrack.BACKSTRIP_COLUMN_LITHOLOGY],
# Might be an extra stratigraphic well layer added from well bottom to basement...
ammended_well_output_filename=amended_well_output_filename)
Note
The drill site file pybacktrack_examples/example_data/sunrise_lithology.txt is part of the example data.
Backstrip output
For each stratigraphic layer in the input drill site file, backstrip can write one or more parameters to an output file.
Running the above example on the sunrise drill site:
# SiteLatitude = -9.5901
# SiteLongitude = 128.1538
# SurfaceAge = 0.0000
#
## bottom_age bottom_depth min_water_depth max_water_depth lithology
2.000 462.000 0.000 100.000 Shale 0.20 Limestone 0.75 Dolostone 0.05
10.000 525.000 0.000 100.000 Shale 0.20 Limestone 0.75 Dolostone 0.05
24.000 822.000 0.000 100.000 Shale 0.10 Limestone 0.80 Sand 0.10
30.000 1062.000 0.000 100.000 Shale 0.30 Limestone 0.55 Dolostone 0.05 Sand 0.10
34.000 1086.000 0.000 100.000 Shale 0.20 Limestone 0.10 Sand 0.70
45.000 1366.000 0.000 100.000 Shale 0.10 Limestone 0.75 Dolostone 0.05 Sand 0.10
58.000 1442.000 0.000 100.000 Shale 0.15 Limestone 0.15 Sand 0.70
68.000 1494.000 50.000 200.000 Shale 0.45 Limestone 0.50 Sand 0.05
83.000 1521.000 20.000 200.000 Shale 0.30 Limestone 0.65 Sand 0.05
86.000 1545.000 20.000 200.000 Shale 0.55 Limestone 0.35 Sand 0.10
88.000 1582.000 20.000 200.000 Shale 0.35 Limestone 0.65
90.000 1620.000 20.000 200.000 Shale 0.70 Limestone 0.15 Sand 0.15
95.000 1890.000 20.000 200.000 Shale 0.70 Limestone 0.15 Sand 0.15
100.000 2036.000 20.000 200.000 Shale 0.70 Limestone 0.15 Sand 0.15
107.000 2062.000 20.000 200.000 Shale 0.64 Limestone 0.18 Sand 0.18
125.000 2066.000 0.000 100.000 Shale 0.40 Chalk 0.10 Sand 0.50
160.000 2068.000 0.000 100.000 Shale 0.40 Limestone 0.30 Sand 0.30
165.000 2130.000 0.000 100.000 Shale 0.40 Limestone 0.30 Sand 0.30
170.000 2176.000 0.000 100.000 Shale 0.50 Sand 0.50
177.000 2187.000 -10.000 25.000 Shale 0.30 Sand 0.70
180.000 2237.000 -10.000 25.000 Shale 0.30 Sand 0.70
190.000 2311.000 -10.000 20.000 Shale 0.30 Sand 0.70
…produces an amended drill site output file, and a decompacted output file containing the decompacted output parameters like sediment thickness and tectonic subsidence.
Amended drill site output
The amended drill site output file:
# SiteLatitude = -9.5901
# SiteLongitude = 128.1538
# SurfaceAge = 0.0000
#
## bottom_age bottom_depth min_water_depth max_water_depth lithology
2.000 462.000 0.000 100.000 Shale 0.20 Limestone 0.75 Dolostone 0.05
10.000 525.000 0.000 100.000 Shale 0.20 Limestone 0.75 Dolostone 0.05
24.000 822.000 0.000 100.000 Shale 0.10 Limestone 0.80 Sand 0.10
30.000 1062.000 0.000 100.000 Shale 0.30 Limestone 0.55 Dolostone 0.05 Sand 0.10
34.000 1086.000 0.000 100.000 Shale 0.20 Limestone 0.10 Sand 0.70
45.000 1366.000 0.000 100.000 Shale 0.10 Limestone 0.75 Dolostone 0.05 Sand 0.10
58.000 1442.000 0.000 100.000 Shale 0.15 Limestone 0.15 Sand 0.70
68.000 1494.000 50.000 200.000 Shale 0.45 Limestone 0.50 Sand 0.05
83.000 1521.000 20.000 200.000 Shale 0.30 Limestone 0.65 Sand 0.05
86.000 1545.000 20.000 200.000 Shale 0.55 Limestone 0.35 Sand 0.10
88.000 1582.000 20.000 200.000 Shale 0.35 Limestone 0.65
90.000 1620.000 20.000 200.000 Shale 0.70 Limestone 0.15 Sand 0.15
95.000 1890.000 20.000 200.000 Shale 0.70 Limestone 0.15 Sand 0.15
100.000 2036.000 20.000 200.000 Shale 0.70 Limestone 0.15 Sand 0.15
107.000 2062.000 20.000 200.000 Shale 0.64 Limestone 0.18 Sand 0.18
125.000 2066.000 0.000 100.000 Shale 0.40 Chalk 0.10 Sand 0.50
160.000 2068.000 0.000 100.000 Shale 0.40 Limestone 0.30 Sand 0.30
165.000 2130.000 0.000 100.000 Shale 0.40 Limestone 0.30 Sand 0.30
170.000 2176.000 0.000 100.000 Shale 0.50 Sand 0.50
177.000 2187.000 -10.000 25.000 Shale 0.30 Sand 0.70
180.000 2237.000 -10.000 25.000 Shale 0.30 Sand 0.70
190.000 2311.000 -10.000 20.000 Shale 0.30 Sand 0.70
Note
No extra base sediment layer is added from the bottom of the drill site (2311 metres) to the total sediment thickness at the drill site (1298.15 metres), because the former (bottom of drill site) is already deeper than the latter (total sediment thickness). This happens because the default total sediment thickness grid is not as accurate near continental margins (compared to deeper ocean basins).
Decompacted output
The decompacted output file:
# SiteLatitude = -9.5901
# SiteLongitude = 128.1538
# SurfaceAge = 0.0000
#
# age compacted_depth compacted_thickness decompacted_thickness decompacted_density decompacted_sediment_rate decompacted_depth min_tectonic_subsidence max_tectonic_subsidence average_tectonic_subsidence min_water_depth max_water_depth average_water_depth sea_level paleo_longitude paleo_latitude compacted_density composite_porosity composite_decay lithology
0.000 0.000 2311.000 2311.000 2089.479 245.712 0.000 1236.930 1336.930 1286.930 0.000 100.000 50.000 6.579 128.154 -9.590 2812.500 0.532 3975.750 Shale 0.20 Limestone 0.75 Dolostone 0.05
2.000 462.000 1849.000 1984.750 2057.304 8.922 491.425 1038.610 1138.610 1088.610 0.000 100.000 50.000 41.195 127.425 -10.822 2812.500 0.532 3975.750 Shale 0.20 Limestone 0.75 Dolostone 0.05
10.000 525.000 1786.000 1936.640 2052.112 24.613 562.801 956.290 1056.290 1006.290 0.000 100.000 50.000 82.686 124.456 -15.629 2815.000 0.520 4202.400 Shale 0.10 Limestone 0.80 Sand 0.10
24.000 822.000 1489.000 1703.149 2018.885 50.826 907.389 846.332 946.332 896.332 0.000 100.000 50.000 86.024 121.425 -23.915 2777.500 0.543 3633.150 Shale 0.30 Limestone 0.55 Dolostone 0.05 Sand 0.10
30.000 1062.000 1249.000 1493.707 1994.320 7.743 1212.348 678.295 778.295 728.295 0.000 100.000 50.000 130.642 119.896 -27.955 2680.000 0.520 3439.300 Shale 0.20 Limestone 0.10 Sand 0.70
34.000 1086.000 1225.000 1472.172 1991.762 32.462 1243.321 653.467 753.467 703.467 0.000 100.000 50.000 140.283 118.947 -30.576 2807.500 0.519 4150.150 Shale 0.10 Limestone 0.75 Dolostone 0.05 Sand 0.10
45.000 1366.000 945.000 1223.986 1937.093 7.857 1600.399 515.129 615.129 565.129 0.000 100.000 50.000 156.187 116.830 -34.454 2687.500 0.514 3568.550 Shale 0.15 Limestone 0.15 Sand 0.70
58.000 1442.000 869.000 1153.349 1921.307 7.583 1702.542 546.589 696.589 621.589 50.000 200.000 125.000 144.913 116.742 -36.016 2772.500 0.563 3339.700 Shale 0.45 Limestone 0.50 Sand 0.05
68.000 1494.000 817.000 1100.849 1911.363 2.517 1778.370 443.659 623.659 533.659 20.000 200.000 110.000 176.363 116.105 -36.584 2795.000 0.545 3727.450 Shale 0.30 Limestone 0.65 Sand 0.05
83.000 1521.000 790.000 1074.658 1904.627 12.270 1816.128 439.905 619.905 529.905 20.000 200.000 110.000 169.972 116.908 -37.499 2747.500 0.574 3039.150 Shale 0.55 Limestone 0.35 Sand 0.10
86.000 1545.000 766.000 1049.084 1900.276 26.459 1852.938 423.355 603.355 513.355 20.000 200.000 110.000 171.827 116.787 -37.582 2797.500 0.552 3640.250 Shale 0.35 Limestone 0.65
88.000 1582.000 729.000 1012.260 1890.539 31.590 1905.856 388.195 568.195 478.195 20.000 200.000 110.000 183.261 116.867 -37.758 2715.000 0.591 2609.350 Shale 0.70 Limestone 0.15 Sand 0.15
90.000 1620.000 691.000 968.032 1884.877 92.186 1969.037 343.109 523.109 433.109 20.000 200.000 110.000 196.929 116.946 -37.939 2715.000 0.591 2609.350 Shale 0.70 Limestone 0.15 Sand 0.15
95.000 1890.000 421.000 625.158 1845.618 51.506 2429.968 160.243 340.243 250.243 20.000 200.000 110.000 181.806 117.127 -38.408 2715.000 0.591 2609.350 Shale 0.70 Limestone 0.15 Sand 0.15
100.000 2036.000 275.000 412.490 1835.863 6.452 2687.497 111.343 291.343 201.343 20.000 200.000 110.000 121.990 116.493 -38.874 2718.000 0.583 2739.220 Shale 0.64 Limestone 0.18 Sand 0.18
107.000 2062.000 249.000 373.048 1835.892 0.375 2732.658 109.605 209.605 159.605 0.000 100.000 50.000 91.677 113.033 -38.529 2676.000 0.567 2776.800 Shale 0.40 Chalk 0.10 Sand 0.50
125.000 2066.000 245.000 367.097 1835.856 0.090 2739.405 145.550 245.550 195.550 0.000 100.000 50.000 64.184 108.550 -39.051 2730.000 0.552 3258.700 Shale 0.40 Limestone 0.30 Sand 0.30
160.000 2068.000 243.000 364.308 1835.425 19.655 2742.563 198.479 298.479 248.479 0.000 100.000 50.000 26.422 103.917 -42.574 2730.000 0.552 3258.700 Shale 0.40 Limestone 0.30 Sand 0.30
165.000 2130.000 181.000 276.308 1821.056 15.434 2840.839 117.435 217.435 167.435 0.000 100.000 50.000 44.094 104.068 -43.206 2675.000 0.560 2832.000 Shale 0.50 Sand 0.50
170.000 2176.000 135.000 205.283 1822.654 2.458 2918.011 116.777 151.777 134.277 -10.000 25.000 7.500 5.359 104.078 -43.462 2665.000 0.532 3180.800 Shale 0.30 Sand 0.70
177.000 2187.000 124.000 189.178 1820.541 26.161 2935.218 133.251 168.251 150.751 -10.000 25.000 7.500 -13.190 102.705 -43.655 2665.000 0.532 3180.800 Shale 0.30 Sand 0.70
180.000 2237.000 74.000 114.644 1810.669 11.696 3013.701 74.454 104.454 89.454 -10.000 20.000 5.000 -6.025 102.831 -43.820 2665.000 0.532 3180.800 Shale 0.30 Sand 0.70
190.000 2311.000 0.000 0.000 0.000 0.000 3130.665 6.998 36.998 21.998 -10.000 20.000 5.000 -11.740 103.027 -44.004 2700.000 0.630 1960.000 Shale 1.00
The age, compacted_depth, min_water_depth, max_water_depth and lithology columns are the same as the bottom_age, bottom_depth, min_water_depth, max_water_depth and lithology columns in the input drill site (except there is also a row associated with the surface age).
The compacted_thickness column is the bottom depth of the drill site (2311 metres - noting that there is no base sediment layer in the amended drill site above) minus compacted_depth. The decompacted_thickness column is the thickness of all sediment at the associated age. In other words, at each consecutive age another stratigraphic layer is essentially removed, allowing the underlying layers to expand (due to their porosity). At present day (or the surface age) the decompacted thickness is just the compacted thickness. And note that because no extra base sediment layer was added to the bottom of the drill site (2311 metres) the thickness and density is zero there. The decompacted_density column is the average density integrated over the decompacted thickness of the drill site (each stratigraphic layer contains a mixture of water and sediment according to its porosity at the decompacted depth of the layer). The decompacted_sediment_rate column is the rate of sediment deposition in units of metres/Ma. At each time it is calculated as the fully decompacted thickness (ie, using surface porosity only) of the surface stratigraphic layer (whose deposition ends at the specified time) divided by the layer’s deposition time interval. The decompacted_depth column is similar to decompacted_sediment_rate in that the stratigraphic layers are fully decompacted (using surface porosity only) as if no portion of any layer had ever been buried. It is also similar to compacted_depth except all effects of compaction have been removed.
The average_water_depth column is just the average min_water_depth and max_water_depth. And min_tectonic_subsidence, max_tectonic_subsidence and average_tectonic_subsidence are obtained from min_water_depth and max_water_depth and average_water_depth by adding an isostatic correction of the decompacted sediment thickness (to obtain the deeper isostatically compensated, sediment-free water depth also known as tectonic subsidence).
The paleo_longitude and paleo_latitude columns contain the paleo location of the drill site at each age.
Finally, the compacted_density, composite_porosity and composite_decay columns contain the density, porosity and porosity decay of the stratigraphic layer (whose deposition ends at the specified time). And since a single stratigraphic layer can have a mixture of weighted lithologies, these three values represent the density, porosity and porosity decay of the final lithology (weighted combination of mixture lithologies). Also note that compacted_density is just for a single stratigraphic layer, unlike decompacted_density which is an average density over multiple decompacted layers.
Note
The output columns are specified using the -d command-line option (run python -m pybacktrack.backstrip_cli --help to see all options), or
using the decompacted_columns argument of the pybacktrack.backstrip_and_write_well() function.
By default, only age and decompacted_thickness are output.
By default, the rows are associated with the stratigraphic ages in the input drill site.
However, you can specify your own time for each row using the -tl or -tr command-line options (run python -m pybacktrack.backstrip_cli --help for more details)
or using the times argument of the pybacktrack.backstrip_and_write_well() function.
And it’s OK to specify times that are outside the period of sediment deposition recorded in the drill site
(eg, older than the drill site’s bottom age or younger than its surface age). You will still get rows for these times.
Note
Specifying your own times (eg, using -tl or -tr command-line options) means that a time could fall inside a stratigraphic unit
(ie, not exactly on a stratigraphic boundary, as in the default case).
In this case, a sub-section of the surface stratigraphic unit (that’s at the surface at the specified time) is stripped off to create a
partial unit.
The part that’s stripped off is from the unit’s top age to the specified time (assuming a constant sediment deposition rate for the unit).
Paleo locations of drill site
The present day location of a drill site is assigned a plate ID and reconstructed back through time (using a reconstruction model consisting of static polygons and rotations). The reconstructed locations at each stratigrahic age become the paleo_longitude and paleo_latitude columns of the decompacted output file.
You can either use the default built-in reconstruction model, or specify your own static polygon and rotation files
(using the --static_polygon_filename and --rotation_filenames command-line options).
The default reconstruction model is Zahirovic 2022:
Zahirovic, S., Eleish, A., Doss, S., Pall, J., Cannon, J., Pistone, M., Tetley, M. G., Young, A., & Fox, P. (2022), Subduction kinematics and carbonate platform interactions. Geoscience Data Journal, 9(2), p.371-383, (data obtained here)
The default reference frame for the Zahirovic 2022 model is the mantle reference frame (anchor plate 0).
Alternatively you can use its paleomagnetic reference frame by specifying anchor plate 701701 (using the command-line option --anchor 701701).
This can be useful for paleoclimate-related research.
Sea level variation
A model of the variation of sea level relative to present day can optionally be used when backstripping. This adjusts the isostatic correction of the decompacted sediment thickness to take into account sea-level variations.
These are the built-in sea level models bundled inside backstrip:
Miller2024_SealevelCurve- Global Mean and Relative Sea-Level Changes Over the Past 66 Myr: Implications for Early Eocene Ice SheetsHaq2024_Hybrid_SealevelCurve- Combined Haq (2014) and Haq (2017) sea level curves for the Cretaceous and Jurassic respectively, with the Cenozoic section of Haq and Ogg (2024).0-66 Ma: Haq and Ogg (2024)
66-140 Ma: Haq (2014)
140.1-205 Ma: Haq (2017)
Haq2024_Hybrid_SealevelCurve_Longterm- Long-term curve.Note that while this is from Haq and Ogg (2024), it is digitized to follow the peaks of the shorter term curve.
Haq87_SealevelCurve- The Phanerozoic Record of Global Sea-Level ChangeHaq87_SealevelCurve_Longterm- Long-term curve.Normalised to start at zero at present-day.
A sea-level model is optional. If one is not specified then sea-level variation is assumed to be zero.
Note
A built-in sea-level model can be specified using the -slm command-line option (run python -m pybacktrack.backstrip_cli --help to see all options), or
using the sea_level_model argument of the pybacktrack.backstrip_and_write_well() function.
Note
It is also possible to specify your own sea-level model. This can be done by providing your own text file containing a column of ages (Ma) and a
corresponding column of sea levels (m), and specifying the name of this file to the -sl command-line option or to the sea_level_model argument
of the pybacktrack.backstrip_and_write_well() function.
Geohistory analysis
The Geohistory Analysis notebook shows how to visualize the decompaction of the stratigraphic layers of a drill site over time.
Note
The example notebooks are installed as part of the example data which can be installed by following these instructions.
One of the examples in that notebook demonstrates decompaction of a shallow continental drill site using backstripping. The paleo water depths (blue fill) are recorded in the drill site file and the tectonic subsidence (black dashed line) is backstripped using the paleo water depths and sediment decompaction. Note that, unlike backtracking, dynamic topography does not affect tectonic subsidence (because backstripping does not have a model of tectonic subsidence). So the image below is simply plotting dynamic topography alongside backstripped tectonic subsidence.