# pygplates.find_crossovers¶

pygplates.find_crossovers(rotation_features[, crossover_filter][, crossover_type_function=CrossoverTypeFunction.type_from_xo_tags_in_comment])

Find crossovers in rotation features.

Parameters: rotation_features (FeatureCollection, or string, or Feature, or sequence of Feature, or sequence of any combination of those four types) – A rotation feature collection, or rotation filename, or rotation feature, or sequence of rotation features, or a sequence (eg, list or tuple) of any combination of those four types crossover_filter (a callable accepting a single named-tuple ‘Crossover’ argument, or None) – A predicate function to determine which crossovers to return crossover_type_function (a callable, or a CrossoverType enumerated value) – A function that determines a crossover’s type, or one of the CrossoverType enumerated values, or CrossoverTypeFunction.type_from_xo_tags_in_comment if using default scheme for determining crossover type (see below) - default is CrossoverTypeFunction.type_from_xo_tags_in_comment 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:

Name Type Description
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.

Note

Younger means more recent (smaller time values) and older means less recent (larger time values).

Note

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.

Note

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).

Note

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:

Value Description
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:

Type Description
Arbitrary callable (function)

A callable accepting the following arguments:

• crossover_time
• moving_plate_id
• young_crossover_fixed_plate_id
• old_crossover_fixed_plate_id
• young_crossover_rotation_sequence
• old_crossover_rotation_sequence

...and returning a CrossoverType enumerated value.

CrossoverTypeFunction.type_from_xo_tags_in_comment

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:

• @xo_ig : CrossoverType.ignore
• @xo_ys : CrossoverType.synch_old_crossover_and_stages
• @xo_yf : CrossoverType.synch_old_crossover_only
• @xo_os : CrossoverType.synch_young_crossover_and_stages
• @xo_of : CrossoverType.synch_young_crossover_only

...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[0] \
.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)


#### Previous topic

pygplates.ReconstructionTreeEdge

#### Next topic

pygplates.synchronise_crossovers