[GPlates-discuss] Reverse reconstruction in pyGPlates

Ben Mather ben.mather at sydney.edu.au
Thu May 2 14:40:51 AEST 2019


Hi John,

Thanks for your detailed response, and for your explanation of the inner workings of GPlates. I had thought that one of these reconstruction calculations could be avoided in pyGPlates, since all of the required information to move a point from one time to another is stored in the rotation files, but now it makes more sense in the context of how GPlates operates.

Many thanks,
Ben
--
Dr. Ben Mather | Computational Geophysicist
Room 418, Madsen Building F09
School of Geoscience, Faculty of Science
The University of Sydney, NSW 2006
m +61 422 470 117
w benmather.info<https://protect-au.mimecast.com/s/0VMSC0YZWVFPGMW7fwpbDH?domain=benmather.info>
t https://protect-au.mimecast.com/s/DE_0CgZowLHQAmWosopvni?domain=twitter.com<https://protect-au.mimecast.com/s/nQknCjZrzqHNn3JBI5nmA3?domain=twitter.com>


On 2019-05-01 23:40:23+10:00 GPlates-discuss wrote:
Hi Ben,

Your approach is currently the way to do this.  That is, first convert the geometry to its present-day position and then reconstruct from there.

This is more complicated than expected because all features in GPlates must contain *present* day geometries (this is essentially a requirement of GPlates/pyGPlates). If we consider GPlates first, then when you create a feature at a past time (such as using a digitization tool) GPlates automatically reverse reconstructs to present day before actually creating the feature. However, in pyGPlates it’s possible to directly create a feature with a *non*-present day geometry, and this is what the pygplates.reverse_reconstruct()<https://protect-au.mimecast.com/s/toliCk8vAZtGOr0Ks9k62c?domain=gplates.org> function is for – to fix this up by making it present-day.

Then, once a feature has a present-day geometry, pygplates.reconstruct()<https://protect-au.mimecast.com/s/rcMuClxwB5C42AKVH1G--f?domain=gplates.org> can reconstruct it to any past geological time.


Here’s a slightly easier (but still complicated) way that avoids pygplates.reverse_reconstruct() and instead uses pygplates.Feature.set_geometry()<https://protect-au.mimecast.com/s/BFpYCmOxDQt4jAYgHD7hFx?domain=gplates.org> to do the reverse reconstruction…


from_time = 10
to_time = 9
point_at_from_time = ...

rotation_model = pygplates.RotationModel('rotations.rot')

# Find plate ID of the point at the 'from' time.
plate_partitioner_at_from_time = pygplates.PlatePartitioner('static_polygons.gpml', rotation_model, from_time)
polygon_containing_point = plate_partitioner_at_from_time.partition_point(point_at_from_time)
point_plate_id = 0
if polygon_containing_point:
    point_plate_id = polygon_containing_point.get_feature().get_reconstruction_plate_id()

# Create the point feature with a present-day geometry that is reverse reconstructed from the 'from' time to present day.
point_feature = pygplates.Feature()
point_feature.set_reconstruction_plate_id(point_plate_id)
point_feature.set_geometry(
    point_at_from_time,
    reverse_reconstruct=(rotation_model, from_time))

# Reconstruct from present day to the ‘to’ time.
reconstructed_points = []
pygplates.reconstruct(point_feature, rotation_model, reconstructed_points, to_time)

point_at_to_time = reconstructed_points[0].get_reconstructed_geometry()


I’ll look into adding a new reconstruct function with a ‘from’ and ‘to’ time that can reconstruct in either direction (backward or forward in time) but does not require creating a pygplates.Feature<https://protect-au.mimecast.com/s/estLCnxyErCB7KLPTpfWdm?domain=gplates.org> …


# Reconstruct from the ‘from’ time to the ‘to’ time.
points_at_to_time = []
pygplates.reconstruct_geometries(point_at_from_time, rotation_model, points_at_to_time, point_plate_id, to_time, from_time)

point_at_to_time = points_at_to_time[0]

Regards,
John

From: GPlates-discuss <gplates-discuss-bounces at mailman.sydney.edu.au> On Behalf Of Ben Mather
Sent: Wednesday, 1 May 2019 2:40 PM
To: gplates-discuss at mailman.sydney.edu.au
Subject: [GPlates-discuss] Reverse reconstruction in pyGPlates

Hi team!

This is quite a basic question... Say that I have some point data from 10 Ma that I want to move to 9Ma. Is there a simple way to do this? Currently I create a point feature, assign plate IDs from reconstructed polygons at 10 Ma, use pygplates.reverse_reconstruct to move the points to the present day location, then use pygplates.reconstruct to move them back to 9Ma.

I was expecting that pygplates.reverse_reconstruct would have an optional 'to' argument to accept times other than the present day, or perhaps the Feature class would have a 'set_reconstruction_time' method that would be compatible with the reconstruct function. Is there a suggested workflow for this that I haven't discovered?

Many thanks,
Ben

--
Dr. Ben Mather | Computational Geophysicist
Room 418, Madsen Building F09
School of Geoscience, Faculty of Science
The University of Sydney, NSW 2006
m +61 422 470 117
w benmather.info<https://protect-au.mimecast.com/s/0VMSC0YZWVFPGMW7fwpbDH?domain=benmather.info>
t https://protect-au.mimecast.com/s/DE_0CgZowLHQAmWosopvni?domain=twitter.com<https://protect-au.mimecast.com/s/nQknCjZrzqHNn3JBI5nmA3?domain=twitter.com>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.sydney.edu.au/pipermail/gplates-discuss/attachments/20190502/735cdb45/attachment-0001.html>


More information about the GPlates-discuss mailing list