Find crossovers in rotation features.
A time-sorted list, from most recent (youngest) to least recent (oldest), of crossover named-tuple ‘Crossover’ (see table below)
list of named-tuple ‘Crossover’
A crossover occurs when the motion of a (moving) plate crosses over from one (fixed) plate to move relative to another (fixed) plate at a particular geological time.
A crossover is represented as a named-tuple ‘Crossover’ with the following named elements:
|type||int||One of the enumerated values of CrossoverType (see table below).|
|time||float||The crossover time.|
|moving_plate_id||int||The moving plate ID.|
|young_crossover_fixed_plate_id||int||The fixed plate ID after (younger than) the crossover.|
|old_crossover_fixed_plate_id||int||The fixed plate ID before (older than) the crossover.|
|young_crossover_rotation_sequence||list of GpmlFiniteRotation||The time sequence of enabled finite rotations after (younger than) the crossover.|
|old_crossover_rotation_sequence||list of GpmlFiniteRotation||The time sequence of enabled finite rotations before (older than) the crossover.|
Younger means more recent (smaller time values) and older means less recent (larger time values).
Both the young and old crossover rotation sequences will each have at least one enabled time sample. And the disabled time samples are not included.
The returned list of crossovers is sorted by time from most recent (younger) to least recent (older). The returned list is also optionally filtered if crossover_filter is specified.
A rotation feature has a feature type of total reconstruction sequence and contains a time sequence of finite rotations (see total reconstruction pole) for a specific fixed/moving plate pair. Each crossover essentially returns information of the total reconstruction pole for the rotation feature after the crossover and for the rotation feature before the crossover, as well as the time and type of the crossover - note that both rotation features will have the same moving plate ID but differing fixed plate IDs. In some cases a single moving/fixed rotation sequence is separated into two (or more) rotation features in the rotation file. In this case a crossover will return all finite rotations in the sequence (ie, correspond to more than one feature before and/or after the crossover).
Modifying the rotation sequences in the returned crossovers will modify the finite rotations in the rotation features. This is what happens if the returned crossovers are passed into synchronise_crossovers(). The modified rotation features can then be used to create a new RotationModel with updated rotations.
If any rotation filenames are specified then this method uses FeatureCollectionFileFormatRegistry internally to read the rotation files.
CrossoverType supports the following enumeration values:
|CrossoverType.unknown||The crossover is of unknown type (it will not be synchronised).|
|CrossoverType.ignore||The crossover will be ignored (it will not be synchronised).|
|CrossoverType.synch_old_crossover_and_stages||All finite rotations in the old crossover sequence will be synchronised (such that old stage rotations are preserved). All finite rotations in the young crossover sequence are preserved.|
|CrossoverType.synch_old_crossover_only||Only the crossover finite rotation in the old crossover sequence will be synchronised (such that the older finite rotations are preserved). All finite rotations in the young crossover sequence are preserved.|
|CrossoverType.synch_young_crossover_and_stages||All finite rotations in the young crossover sequence will be synchronised (such that young stage rotations are preserved). All finite rotations in the old crossover sequence are preserved. Note: This can result in non-zero finite rotations at present day if the younger sequence includes present day.|
|CrossoverType.synch_young_crossover_only||Only the crossover finite rotation in the young crossover sequence will be synchronised (such that the younger finite rotations are preserved). All finite rotations in the old crossover sequence are preserved.|
crossover_type_function supports the following arguments:
|Arbitrary callable (function)||
A callable accepting the following arguments:
...and returning a CrossoverType enumerated value.
A callable (with same arguments as arbitrary callable) that uses the comment/description field of the young crossover pole to determine the crossover type according to the presence of the following strings/tags:
...and if none of those tags are present then the crossover type is CrossoverType.unknown.
This is the default for crossover_type_function.
|CrossoverTypeFunction.type_from_xo_tags_in_comment_default_xo_ys||Same as CrossoverTypeFunction.type_from_xo_tags_in_comment except defaults to CrossoverType.synch_old_crossover_and_stages if no tags are present in the comment/description field of the young crossover pole.|
|CrossoverTypeFunction.type_from_xo_tags_in_comment_default_xo_ig||Same as CrossoverTypeFunction.type_from_xo_tags_in_comment except defaults to CrossoverType.ignore if no tags are present in the comment/description field of the young crossover pole.|
|CrossoverType.unknown||All crossovers will be of type CrossoverType.unknown.|
|CrossoverType.ignore||All crossovers will be of type CrossoverType.ignore.|
|CrossoverType.synch_old_crossover_and_stages||All crossovers will be of type CrossoverType.synch_old_crossover_and_stages.|
|CrossoverType.synch_old_crossover_only||All crossovers will be of type CrossoverType.synch_old_crossover_only.|
|CrossoverType.synch_young_crossover_and_stages||All crossovers will be of type CrossoverType.synch_young_crossover_and_stages.|
|CrossoverType.synch_young_crossover_only||All crossovers will be of type CrossoverType.synch_young_crossover_only.|
Find all crossovers in a rotation file where crossover types are determined by ‘@xo_’ tags in the young crossover description/comment:
crossovers = pygplates.find_crossovers('rotations.rot') for crossover in crossovers: print 'Crossover time: %f' % crossover.time print 'Crossover moving plate ID: %d' % crossover.moving_plate_id print 'Crossover younger fixed plate ID: %d' % crossover.young_crossover_fixed_plate_id print 'Crossover older fixed ID: %d' % crossover.old_crossover_fixed_plate_id print 'Crossover younger finite rotation: %d' % \ crossover.young_crossover_rotation_sequence[-1] \ .get_finite_rotation().get_lat_lon_euler_pole_and_angle_degrees() print 'Crossover older finite rotation: %d' % \ crossover.old_crossover_rotation_sequence \ .get_finite_rotation().get_lat_lon_euler_pole_and_angle_degrees()
Find crossovers affecting moving plate 801 assuming all crossovers are of type CrossoverType.synch_old_crossover_and_stages:
crossovers_801 = pygplates.find_crossovers( rotation_feature_collection, lambda crossover: crossover.moving_plate_id==801, pygplates.CrossoverType.synch_old_crossover_and_stages)