|
POSC Specifications Version 2.2 |
Usage Manual Seismic Interpretation |
[Usage Document Table of Contents]
This section deals with the business process of interpreting seismic lines (or 3d survey). In particular, the scenario will be that the final section (stacked or migrated) has been interpreted to give one or more interpreted events. The trace data may be stored in the database itself, but whether it is or not will be irrelevant to the rest of the problem.
The approach will support a business process. The business process will begin with a single interpreted horizon on a single line. As the seismic is worked further, additional interpretations of the horizon, as well as additional horizons, will be added. Also supported in this article will be the case that alternate interpretations will be given.
Given the business scenario, it is clear that the single tracked event will not be the only one, but will be a part of a larger project. It is useful to set up a structure to support the growth of the project. This section will identify this project infrastructure that will be developed so that the individual interpretations can be easily stored, and will instantiate some of these "background preparation" instances.
The first is the project activity. Epicentre allows the construction of an activity hierarchy through the use of the "contained_activity, containing_activity" relationship. Although the use of this hierarchy is optional, it is a useful way to group all activities related to a particular project together.
For the purposes of this article, we will develop an activity called "Anumu Seismic Interpretation." In its simplest form, this name, along with a ref_existence_kind = 'actual', will be the only attributes. Depending on other information and company guidelines, a start_time and end_time may also be known. Also, it may be a part of a larger activity (such as "The Anumu Prospect"), in which case the containing_activity attribute will be instantiated. The details of the 'Anumu Seismic Interpretation' are less important for this section than the fact that we are creating the "parent" activity.
It is also useful to identify the interpreters that are working on the project. This will be done by instantiating business_associates, identifying them as being on the project, identify the company(ies) they work for, and their positions within the company(ies). This particular "business_associate structure" can be pre-built, but can also be easily changed to add or subtract workers.
The interpretation will refer to a lithostratigraphic_marker. In general, this marker will already be stored. Other articles deal with storing a "geologic column," so this article will assume such storage, and will use these "preloaded" markers for the interpretation.
For purposes of this section, an example data set will be used, and will be interpreted by an example project team. Following is a description:
There are 6 lines over the Anumu area. They will be called AN-1, AN-3, AN-5, and AN-7, which run mostly East-West (dip lines), and AN-2, and AN-4 which run mostly North-South (strike lines). These lines are located Pecos County, Texas, in the Permian Basin.
The first line to be interpreted will be the AN-3 line. It will be interpreted by Joe, who works for MyCompany. Also on the project team are Bill and Mary, the leader of the team. Based on early work, the team may also contract out some of the interpretation to "Pretty Good Interpretations," a consulting group they have used in the past with pretty good success. The team is formed on 1 March 1999, with Joe doing the initial work.
----> Begin Example: Seismic Interpretation Background
(* Presumably, all three of these people and their relationship to the
company were previously instantiated, as follows *)
Joe = BUSINESS_ASSOCIATE {
identifier(M,K) --> 'Joe';
ref_naming_system(O) --> @PRV_nickname; };
Bill = BUSINESS_ASSOCIATE {
identifier(M,K) --> 'Bill';
ref_naming_system(O) --> @PRV_nickname; };
Mary = BUSINESS_ASSOCIATE {
identifier(M,K) --> 'Mary';
ref_naming_system(O) --> @PRV_nickname; };
(* Now give the company, and make Joe, Bill, and Mary employees. Again,
this was probably previously instantiated. *)
MyCompany = BUSINESS_ASSOCIATE {
identifier (M,K) --> 'My Company';
ref_naming_system(O) --> @PRV_common_name; };
JoeWork = BUSINESS_ASSOCIATION {
ref_business_association_role (M,K) --> @PRV_employee;
business_associate (M,K) --> @Joe;
associated_with (M,K) --> @MyCompany; };
BillWork = BUSINESS_ASSOCIATION {
ref_business_association_role (M,K) --> @PRV_employee;
business_associate (M,K) --> @Bill;
associated_with (M,K) --> @MyCompany; };
MaryWork = BUSINESS_ASSOCIATION {
ref_business_association_role (M,K) --> @PRV_employee;
business_associate (M,K) --> @Joe;
associated_with (M,K) --> @MyCompany; };
(* For later use, also create the consulting company *)
PrettyGood = BUSINESS_ASSOCIATE {
identifier (M,K) --> 'Pretty Good Interpretations';
ref_naming_system(O) --> @PRV_common_name;};
consultant = BUSINESS_ASSOCIATION {
ref_business_association_role (M,K) --> @PRV_consultant;
business_associate (M,K) --> @PrettyGood;
associated_with (M,K) --> @MyCompany; };
(* Note that a lot more information could be given about the employees,
the consultant, and their business relationships, their services, etc.
This detail is a part of the business associate portion, and is ancillary
to the discussion of the seismic interpretation. *)
----> Pause Example: Seismic Interpretation Background
Another part of the background to instantiate is the project team. This will be done when the project is formed. I.e., this presumably will not already exist, and must be instantiated when the team is formed.
----> Continue Example: Seismic Interpretation Background
AnumuTeam = BUSINESS_ASSOCIATE {
identifier (M,K) --> 'Anumu Project Team';
ref_naming_system (O) --> @PRV_project_name; };
team = BUSINESS_ASSOCIATION {
ref_business_association_role (M,K) --> @PRV_work_group;
business_associate (M,K) --> @AnumuTeam;
associated_with (M,K) --> @MyCompany;
start_time --> '1999-MAR-01' };
(* Now put members on the team *)
JoeTeam = BUSINESS_ASSOCIATION {
ref_business_association_role (M,K) --> @PRV_work_group_member;
business_associate (M,K) --> @Joe;
associated_with (M,K) --> @AnumuTeam; };
BillTeam = BUSINESS_ASSOCIATION {
ref_business_association_role (M,K) --> @PRV_work_group_member;
business_associate (M,K) --> @Bill;
associated_with (M,K) --> @AnumuTeam; };
MaryTeam = BUSINESS_ASSOCIATION {
ref_business_association_role (M,K) --> @PRV_work_group_member;
business_associate (M,K) --> @Mary;
associated_with (M,K) --> @AnumuTeam; };
(* Give Mary the title of "Team Leader" *)
MaryLeader = BUSINESS_ASSOCIATE_JOB_TITLE {
ref_business_associate_job_title (M) --> @RV_Team_Leader;
start_time --> '1999-MAR-01';
business_association --> @MaryTeam; };
----> Pause Example: Seismic Interpretation Background
The final background part to instantiate is the parent activity, 'Anumu Seismic Interpretation'. This is done using a geoscience_interpretation.
----> Continue Example: Seismic Interpretation Background
parentactivity = GEOSCIENCE_INTERPRETATION {
ref_existence_kind --> @PRV_actual;
name --> 'Anumu Seismic Interpretation';
description --> 'The parent activity for the Anumu interpretation
project. All activities that are a part of this
project will reference this activity using the
containing_activity relationship.';
start_time --> '1999-MAR-01'; };
----> End Example: Seismic Interpretation Background
Let the project begin.
The seismic trace data need not be loaded into Epicentre in order to record the tracked horizon. As a first pass, then, we will load the seismic information, but will not consider loading the seismic trace data.
This means, of course, that the "horizon track" must come from another application. Therefore, the horizon track must be loaded into Epicentre using a special application. This article does not deal with those details. It is intended only to show where the data will be loaded - whether it is generated from using Epicentre-stored data or using data from outside Epicentre.
The main entity in seismic is the seismic_geometry_set. This is where the line will receive its identification.
The binset information will be carried in a binset_grid, which consists of a grid_structured for which we can define information about the bin points. In this example, the only information we want to record are the names and locations of the bin nodes (CDP's).
Previous industry practice would work with shot points for the locations. This means that it is often necessary to relate the shot points to the bin nodes. The reason for this need is that base maps of the seismic lines were typically made which labelled the shot point locations only. Today, the locations of bin nodes are generally given in earth coordinates so this relationship is no longer necessary. The method for instantiating this relationship is given in the article on 2d Seismic Line.
In addition to the above entities, it is also necessary to instantiate a seismic_data_set. This will define the data (whether the traces are loaded or not) that is being interpreted. In general, for horizon tracks, it will be the "stacked" or "migrated" data.
----> Begin Example: Seismic Interpretation
(* Since we are contemplating expansion of this example, it is
useful also to form the parent seismic_geometry_set - the one that
represents the 2d survey. Then each line will be a child *)
parent_sgs = SEISMIC_GEOMETRY_SET {
identifier(M,K) --> 'Anumu 2d survey';
description --> 'Six lines from the Anumu prospective area.';
ref_seismic_geometry(M) --> @PRV_2d_survey;
ref_survey_environment --> @PRV_land; };
2dline3 = SEISMIC_GEOMETRY_SET {
identifier(M,K) --> 'AN-3';
description --> 'Dominantly E-W (dip) line in the Anumu
prospective area.';
ref_seismic_geometry(M) --> @PRV_2d_line;
ref_survey_environment --> @PRV_land;
part_of (K) --> @parent_sgs; };
(* Now create the binset. Begin with the axis and grid. Note that
the term CDP is often used interchangeably with bin point index *)
(* This example will create the needed axis. In general, there should
already be an axis that can be used. *)
bpaxis = GENERAL_COORDINATE_SYSTEM_AXIS {
ref_quantity_property --> @PRV_binset_point_index;
source --> @PRV_ilab; };
binpointgrid = GRID_1D_EQUAL {
name = 'AN-3 bin point grid';
origin --> QUANTITY {
real_value --> 101;
ref_unit_of_measure --> @PRV_Euc; }; -- First bin point is '101'
step --> QUANTITY {
real_value --> 1;
ref_unit_of_measure --> @PRV_Euc; }; -- And it increases by 1.
point_count --> 683; -- And there are 683 bin points
connected --> FALSE ;
coordinate_system_axis --> @bpaxis; };
(* Now form the regular_binset *)
binset3 = BINSET_GRID {
name = 'AN-3 binset';
seismic_geometry_set --> @2dline3;
grid_structured --> @binpointgrid;
ref_binset_geometry_class --> @PRV_regular; };
(* Now give the locations of the bin points *)
binlocs = PTY_GEOMETRY_2D_EDGE {
binset(K) --> @binset3;
data_value --> LINE_GRID { --ndt_geometry_2d_edge
blocframe = GEOMETRY_FRAME {
detailed_type --> 'FT_LINE';
descriptor --> LIST( @blocdescr);
leaf_frame --> SET( @bnorvalues, @beastvalues );
grid_or_mesh --> @binpointgrid;
coordinate_system --> @PRV_NAD27_/_Texas_North_Central; };
blocdescr = DESCRIPTOR {
dimension --> 'INDEX_I';
lower_bound --> 1;
count --> 683; }; -- number of points on line.
bnorvalues = LEAF_FRAME { -- array of northing values
data_type --> 'DAE_C_FLOAT';
coordinate_system_axis --> @PRV_northing_in_ftUS;
ref_unit_of_measure --> @PRV_ftUS;
data_values(M) --> [ here is an array of 683 northing values ]; };
beastvalues = LEAF_FRAME {
data_type --> 'DAE_C_FLOAT';
coordinate_system_axis --> @PRV_easting_in_ftUS;
ref_unit_of_measure --> @PRV_ftUS;
data_values(M) --> [ here is an array of 683 easting values ];
}; }; }; };
(* the data_value attribute is an array of 683 pairs of location values.
All share the same projected coordinate system and the same units pair *)
----> Pause Example: 2D Line
The seismic data itself (in this example) will not be stored, or even "checked in." This means that we make reference to the data only. The purpose of this reference is so that we can indicate which "version" of the data was used for the interpretation. For this example, assume that it is the final migration that is used.
--> Continue example: Seismic Interpretation
mig_data = SEISMIC_DATA_SET {
name (M,K) = 'final migration';
seismic_geometry_set (M,K)--> @2dline3
binset --> @binset3;
description --> 'The final, poststack time-migrated version of
AN-3. Not actually stored in the data store.'; };
----> Pause Example: 2D Line
This information is not quite complete. It is also important to give some information about the seismic data, even though it will not be physically stored. In particular, we will give the information that there are 4 sec of data, at a 4 msec sampling interval; and that the data is datumed to 800 ft elevation. The method of storing the datum is covered in detail in another section. The datum is stored as part of the coordinate system that will be used by the seismic data set. In order to use this information, assume that the coordinate system that is stored for the seismic data is called 'AN-3 post stack migrated', and will be referenced using the instance reference value: @section_cs_3.
----> Continue Example: 2D Line
(* The sample interval, number of samples and number of traces will
be recorded in the grid *)
time_grid_axis = GRID_1D_EQUAL {
name --> 'migrated time grid AN-3';
connected = FALSE;
coordinate_system_axis --> @time_axis;
(* the time axis used in the section_cs coordinate system *)
origin --> QUANTITY {
real_value --> 0.;
ref_unit_of_measure --> @PRV_ms; };
step --> QUANTITY {
real_value --> 4.;
ref_unit_of_measure --> @PRV_ms; };
point_count --> 1000; };
(* Note that the bin point grid instantiated earlier can
be reused. *)
(* Now the time grid axis can be combined with the bin point
grid axis to form a grid_defined_grid *)
section_grid = GRID_DEFINED_GRID {
name --> 'AN-3 migrated seismic section grid';
grid_structured --> LIST( @binpointgrid, @time_grid_axis ); };
(* Now add more information to the seismic_data_set created above.
The additional information is the data_value, which will contain
the datum information above (through the relationship to the axis),
the sample interval and number of samples and number of traces. *)
data_info = PTY_GEOMETRY_2D_FACE {
seismic_data_set --> @mig_data;
data_value --> SURFACE_GRID {
g_frame_1 = GEOMETRY_FRAME {
detailed_type --> 'FT_SURFACE';
descriptor --> LIST( @descr_m1, @descr_m2 );
grid_or_mesh --> @section_grid;
coordinate_system --> @section_cs_3;
leaf_frame --> SET( @t_leaf, bp_leaf ); };
descr_m1 = DESCRIPTOR { -- time_axis
dimension --> 'INDEX_I';
lower_bound --> 1;
count --> 1000; };
descr_m2 = DESCRIPTOR { -- bin point axis
dimension --> 'INDEX_J';
lower_bound --> 1;
count --> 683; };
t_leaf --> LEAF_FRAME {
ref_property_kind --> @PRV_seismic_time;
data_type --> 'DAE_C_FLOAT';
ref_unit_of_measure --> @PRV_ms;
data_values --> LIST( Use The Grid_1d_equal Values ); }; }; };
bp_leaf --> LEAF_FRAME {
ref_property_kind --> @PRV_bin_point_index;
data_type --> 'DAE_C_FLOAT';
ref_unit_of_measure --> @PRV_Euc;
data_values --> LIST( Use The Grid_1d_equal Values ); }; }; };
----> Pause Example: 2D Line
Joe picks an horizon on the line AN-3, which he interprets as the Top of Strawn. The picks are presented as a set of CDP vs time.
Before actually going into the details for this step, it is worthwhile looking at the total process of interpretation that will be represented. It is intended that the above set of seismic picks will be one part of the interpreted surface. It is intended that later work will add to the "Top of Strawn." Using this foresight, it is best to think of the Top of Strawn as being a composite spatial object (earth_position_composite), and the set of picks for line AN-3 as being one part of this composite. So we will instantiate an earth_position_composite to which we will add the picked lines when they become available.
The thing we are picking is the Top of the Strawn. Presumably, the appropriate geologic_feature (subtype: lithostratigraphic_marker) will have been instantiated. For this example, though, we will instantiate the lithostratigraphic_marker, "Top of Strawn." Note that we are not picking this directly. We are actually picking a seismic_feature. We may call it "Top of Strawn" to indicate our expected interpretation, but we could also call it "seismic doublet." The name of the seismic_feature is not intended to have any semantic meaning. The association we make that this seismic feature is the Top of Strawn will be done as an interpretation step, and that will give semantic meaning to the event
Finally, it should be noted that we will be getting bunches of these picks together to form the surface, "Top of Strawn." Each new pick will be assigned not only to the lithostratigraphic_marker as mentioned above, but also to the "group" of picks that are the earth_position_composite. We are in essence compositing these lines into a surface.
It may seem like we are going through an extra step by making the picks represent a seismic_feature rather than directly making them represent a lithostratigraphic_marker. But this extra step allows us to change the interpretation, or to give alternate interpretations.
Assume, for example, that we pick AN-4 and make the pick (earth_position_edge) a representation of the lithostratigraphic_marker, "Top of Strawn." But later knowledge shows us that it is NOT Top of Strawn, but instead is Top of Number 2 shale. In many data models, this change in the interpretation would be done by deleting the relationship between the earth_position_edge (the picks) and the lithostratigraphic_marker, "Top of Strawn." A new relationship would then be added to "Top of Number 2 shale." But this is not in the spirit of Epicentre. Epicentre allows the database to keep track of all the interpretations. For Epicentre, the seismic_feature does not change. What does change is the association of the feature with the "Top of Strawn." This association, which will keep a history of changed interpretations, is realized in the entity interpreted_feature_association.
Now onto the details. These comments will be repeated at the appropriate place.
----> Begin Example: AN-3 picked horizon.
(* First set up the lithostratigraphic_marker *)
Top_Strawn = LITHOSTRATIGRAPHIC_MARKER {
identifier --> 'Top of Strawn'; };
(* Record the picking activity *)
pickAN-3 = GEOSCIENCE_INTERPRETATION {
ref_existence_kind --> @PRV_actual;
containing_activity --> @parentactivity; -- instantiated earlier
start_time --> TIMESTAMP { -- 1999-Mar-06: 3:27 pm
date1 = DATE {
year --> 1999;
month --> 3;
day --> 6; };
time1 = TIME {
hour --> 15;
minute --> 27;
second --> 0.0;
uct_offset --> DAYTIMEINTERVAL { -- local time
days --> 0;
hours --> -6; -- Houston is 6 hours behind UCT
minutes --> 0;
seconds --> 0.0; }; }; };
(* Record the person who did the picks *)
joeDidIt3 = BUSINESS_ASSOCIATE_ACTIVITY_ROLE {
ref_business_associate_activity_role --> @PRV_interpreter;
business_associate --> @Joe
activity --> @pickAN-3; };
(* Now form the seismic feature *)
AN-3pick1 = SEISMIC_FEATURE {
identifier --> 'AN-3 doublet horizon (Strawn)';
seismic_geometry_set --> @2dline3; };
(* Now form the edge *)
AN-3edge1 = EARTH_POSITION_EDGE {
identifier --> 'AN-3 doublet picks (Strawn)';
geoscience_interpretation --> @pickAN-3;
geologic_feature --> @AN-3pick1;
binset --> @binset3; };
(* Note that the binset relationship tells the earth_position_edge
how to make sense of the bin point index values. It does NOT mean
that the geometry will use the grid from the binset. It may, but
it does not have to *)
geometry31 = PTY_GEOMETRY_2D_EDGE{
edge --> @AN-3edge1;
activity --> @pickAN-3;
data_value --> LINE_GRID {
gframe3 = GEOMETRY_FRAME {
detailed_type --> 'FT_LINE';
grid_or_mesh --> @binpointgrid; -- from the binset
coordinate_system --> @section_cs_3;
(* This is the coordinate system created in another section that includes
the datum in the time axis. It can be used, in general, only for this
seismic_data_set *)
descriptor --> LIST( @descr_31 );
leaf_frame --> SET(@leaf_31, @LEAF_32 ); };
descr_31 = DESCRIPTOR {
dimension --> 'INDEX_I';
lower_bound --> 7;
count --> 664; };
(* Note. This descriptor says that the "picks" do not include the
first 6 bin point indexes, or some at the end. Probably, the picks
at the ends of the line were not reliable. *)
leaf_31 = LEAF_FRAME {
data_type --> 'DAE_C_FLOAT';
ref_unit_of_measure --> @PRV_bin_point_axis;
coordinate_system_axis --> 1;
data_values --> (use the grid_1d_equal values); };
leaf_32 = LEAF_FRAME {
data_type --> 'DAE_C_FLOAT';
ref_unit_of_measure --> @PRV_ms;
coordinate_system_axis --> 2;
data_values --> LIST( here are the 664 time picks ); }; };
(* Now it is necessary to "interpret" the seismic_feature as the Top
of Strawn. Note that I will use the same geoscience_interpretation
activity, although it is possible to instantiate another one to do
the interpretation part. *)
interpTieAN-31 = INTERPRETED_FEATURE_ASSOCIATION {
start_time --> TIMESTAMP { -- 1999-Mar-06: 3:27 pm
date1 = DATE {
year --> 1999;
month --> 3;
day --> 6; };
time1 = TIME {
hour --> 15;
minute --> 27;
second --> 0.0;
uct_offset --> DAYTIMEINTERVAL { -- local time
days --> 0;
hours --> -6; -- Houston is 6 hours behind UCT
mintues --> 0;
seconds --> 0.0; }; };
seismic_feature --> @AN-3pick1;
geologic_feature --> @Top_Strawn;
caused_by --> @pickAN-3; };
----> End Example: AN-3 picked horizon.
Now it is time to interpret line AN-7. Much of what is done for AN-7 is just a repeat of what has been done for line AN-3. What is the same will be repeated without comment. What is different will be highlighted.
First is the question of what can be reused. The whole interpretation team can be reused for this part. The parent seismic_geometry_set, and the parent activity can be reused. But there will be a different seismic_geometry_set for the line, as well as a different binset and a different seismic_data_set.
There may be a choice for the seismic section coordinate system. Recall that this coordinate system contained the seismic datum for the time axis. That is, the time axis included the information that zero time corresponded to 800 ft. If the datum for line AN-7 is also 800 ft, the seismic coordinate system can be reused. But it doesn't have to be. For this example, assume that a new Seismic_coordinate_system, @section_cs_7, was developed for line AN-7. Note that in general, there must be a "seismic section coordinate system" for each seismic_data_set.
It is useful to force a difference for illustrative purposes. The geometry of the first interpreted surface was straightforward. For every bin point there was at most one picked time. Now it is useful to vary that interpretation by having more than one pick for some bin point indexes. This occurs frequently in the thrust belt when a formation folds back under (or over) itself. It can also occur when there are reverse faults, although I will show another way to handle that case later.
Epicentre has no problem with this situation. To see this, let's review how the previous picks were stored.
The Pty_geometry instance was a 2d_edge. This says that I will give you the description of an edge (line) in a 2d coordinate system. The coordinate system used was time vs bin point index. The instance of the data_value indicated that the grid used was the same as the one used for the binset, and that the bin point index values are to be given by implication, and not given explicitly. That is, look at the grid_1d_equal axis that was used as the binset grid. It contains the information that allows the computation of the bin point index values at each grid node. (In particular, they are 101., 102., ..., 783.).
The time values had to be given explicitly. By pairing up the time values with the implied bin point index values, the edge can be traced out on a map.
A key point in the above semantics is that a bin point index appears only once. When the seismic event "doubles back" on itself, a bin point index will appear more than once. So the above strategy will not work. For this case, it will be necessary to explicitly give the bin point index values, and a corresponding list of time values.
To do this, a grid_1d_parametric is used. This axis will have a number of points that is at least the length of the lists of data. Then the two lists of data will be given. Since it is permissible for the bin point index to appear more than once, it is possible for the event to double back.
----> Begin example: Another picked line AN-7
pickAN-7 = GEOSCIENCE_INTERPRETATION {
ref_existence_kind --> @PRV_actual;
containing_activity --> @parentactivity; -- instantiated earlier
start_time --> TIMESTAMP { -- 1999-Apr-12: 2:08 pm
date1 = DATE {
year --> 1999;
month --> 4;
day --> 12; };
time1 = TIME {
hour --> 14;
minute --> 8;
second --> 0.0;
uct_offset --> DAYTIMEINTERVAL { -- local time (EDT)
days --> 0;
hours --> -5; -- Houston is 5 hours behind UCT
mintues --> 0;
seconds --> 0.0; }; }; };
joeDidIt7 = BUSINESS_ASSOCIATE_ACTIVITY_ROLE {
ref_business_associate_activity_role --> @PRV_interpreter;
business_associate --> @Joe;
activity --> @pickAN-7; };
AN-7pick1 = SEISMIC_FEATURE {
identifier --> 'AN-7 doublet horizon (Strawn)';
seismic_geometry_set --> @2dline7; };
AN-7edge1 = EARTH_POSITION_EDGE {
identifier --> 'AN-7 doublet picks (Strawn)';
geoscience_interpretation --> @pickAN-7;
geologic_feature --> @AN-7pick1;
binset --> @binset7; };
(* Now instantiate the parametric grid axis *)
param7 = GRID_1D_PARAMETRIC {
name --> 'AN-7 Strawn parametric grid';
connected --> FALSE;
point_count --> 692; };
(* The pty geometry will use this grid *)
geometry71 = PTY_GEOMETRY_2D_EDGE{
edge --> @AN-7edge1;
activity --> @pickAN-7;
data_value --> LINE_GRID {
gframe7 = GEOMETRY_FRAME {
detailed_type --> 'FT_LINE';
grid_or_mesh --> @param7;
coordinate_system --> @section_cs_7;
(* This is a coordinate system instantiated earlier *)
descriptor --> LIST( @descr_71 );
leaf_frame --> SET(@leaf_71, @LEAF_72 ); };
descr_71 = DESCRIPTOR {
dimension --> 'INDEX_I';
lower_bound --> 1;
count --> 692; };
leaf_71 = LEAF_FRAME {
data_type --> 'DAE_C_FLOAT';
ref_unit_of_measure --> @PRV_bin_point_axis;
coordinate_system_axis --> 1;
data_values --> LIST(here are the 692 bin point axis values); };
leaf_72 = LEAF_FRAME {
data_type --> 'DAE_C_FLOAT';
ref_unit_of_measure --> @PRV_ms;
coordinate_system_axis --> 2;
data_values --> LIST( here are the 692 time picks ); }; };
(* Now back to "copying" the previous example *)
interpTieAN-71 = INTERPRETED_FEATURE_ASSOCIATION {
start_time --> TIMESTAMP { -- 1999-Apr-12: 2:08 pm
date1 = DATE {
year --> 1999;
month --> 4;
day --> 12; };
time1 = TIME {
hour --> 14;
minute --> 8;
second --> 0.0;
uct_offset --> DAYTIMEINTERVAL { -- local time (EDT)
days --> 0;
hours --> -5; -- Houston is 5 hours behind UCT
mintues --> 0;
seconds --> 0.0; }; };
seismic_feature --> @AN-7pick1;
geologic_feature --> @Top_Strawn;
caused_by --> @pickAN-7; };
----> End example: Another picked line AN-7
In this example (crossing line AN-2), the variation will be that the picked line is in segments. It may be in segments because there is a fault (normal or reverse, it doesn't matter), or because there is a bad data area that is not picked.
Epicentre has an easy way to combine these segments. Two earth_position_edges will be instantiated. They will then be combined into an earth_position_composite.
For this example, the geometry of the edges will be given as for AN-3. That is, the binset grid will be used, and the bin point indexes will be given by implication.
----> Begin Example: Another line AN-2
pickAN-2 = GEOSCIENCE_INTERPRETATION {
ref_existence_kind --> @PRV_actual;
containing_activity --> @parentactivity; -- instantiated earlier
start_time --> TIMESTAMP { -- 1999-Apr-26: 10:15 am
date1 = DATE {
year --> 1999;
month --> 4;
day --> 26; };
time1 = TIME {
hour --> 10;
minute --> 15;
second --> 0.0;
uct_offset --> DAYTIMEINTERVAL { -- local time (EDT)
days --> 0;
hours --> -5; -- Houston is 5 hours behind UCT
mintues --> 0;
seconds --> 0.0; }; }; };
joeDidIt2 = BUSINESS_ASSOCIATE_ACTIVITY_ROLE {
ref_business_associate_activity_role --> @PRV_interpreter;
business_associate --> @Joe;
activity --> @pickAN-2; };
AN-2pick1 = SEISMIC_FEATURE {
identifier --> 'AN-2 doublet horizon (Strawn)';
seismic_geometry_set --> @2dline2; };
(* Create the composite edge which will combine the two segments *)
AN-2_edgecomp = EARTH_POSITION_COMPOSITE {
identifier --> 'AN-2 composite pick (Strawn)';
geoscience_interpretation --> @pickAN-2;
part --> SET( @AN-2edge1, @AN-2edge2 );
geologic_feature --> @AN-2pick1;
binset --> @binset2; };
(* Need two edges, two pty_geometries *)
AN-2edge1 = EARTH_POSITION_EDGE {
identifier --> 'AN-2 doublet picks (Strawn) first seg';
identifying_whole --> @AN-2_edgecomp; --this is new
geoscience_interpretation --> @pickAN-2;
geologic_feature --> @AN-2pick1;
binset --> @binset2; };
geometry21 = PTY_GEOMETRY_2D_EDGE{
edge --> @AN-2edge1;
activity --> @pickAN-2;
data_value --> LINE_GRID {
gframe21 = GEOMETRY_FRAME {
detailed_type --> 'FT_LINE';
grid_or_mesh --> @binpointgrid; -- from the binset
coordinate_system --> @section_cs_2;
(* This is a coordinate system particular to this seismic data set *)
descriptor --> LIST( @descr_21 );
leaf_frame --> SET(@leaf_21, @LEAF_22 ); };
descr_21 = DESCRIPTOR {
dimension --> 'INDEX_I';
lower_bound --> 12;
count --> 213; };
(* Note. This descriptor says that the "picks" do not include the
first 11 bin point indexes. There are 213 of them, which takes
it less than halfway across the line. *)
leaf_21 = LEAF_FRAME {
data_type --> 'DAE_C_FLOAT';
ref_unit_of_measure --> @PRV_bin_point_axis;
coordinate_system_axis --> 1;
data_values --> (use the grid_1d_equal values); };
leaf_22 = LEAF_FRAME {
data_type --> 'DAE_C_FLOAT';
ref_unit_of_measure --> @PRV_ms;
coordinate_system_axis --> 2;
data_values --> LIST( here are the 213 time picks ); }; };
(* Now the second edge *)
AN-2edge2 = EARTH_POSITION_EDGE {
identifier --> 'AN-2 doublet picks (Strawn) second seg';
identifying_whole --> @AN-2_edgecomp; --this is new
geoscience_interpretation --> @pickAN-2;
geologic_feature --> @AN-2pick1;
binset --> @binset2; };
geometry22 = PTY_GEOMETRY_2D_EDGE{
edge --> @AN-2edge2;
activity --> @pickAN-2;
data_value --> LINE_GRID {
gframe22 = GEOMETRY_FRAME {
detailed_type --> 'FT_LINE';
grid_or_mesh --> @binpointgrid; -- from the binset
coordinate_system --> @section_cs_2;
(* This is the same coordinate system as for the first edge *)
descriptor --> LIST( @descr_22 );
leaf_frame --> SET(@leaf_23, @LEAF_24 ); };
descr_22 = DESCRIPTOR {
dimension --> 'INDEX_I';
lower_bound --> 248;
count --> 412; };
(* Note. This descriptor picks up from the 248th point. (the first
segment only went through 224), and goes through to 659 *)
leaf_23 = LEAF_FRAME {
data_type --> 'DAE_C_FLOAT';
ref_unit_of_measure --> @PRV_bin_point_axis;
coordinate_system_axis --> 1;
data_values --> (use the grid_1d_equal values); };
leaf_24 = LEAF_FRAME {
data_type --> 'DAE_C_FLOAT';
ref_unit_of_measure --> @PRV_ms;
coordinate_system_axis --> 2;
data_values --> LIST( here are the 412 time picks ); };
};
----> Pause Example: Another line AN-2
A careful reading shows that the earth_position_composite references the two earth_position_edges. Likewise, the earth_position_edges each reference the earth_position_composite (for identity purposes). Typically the way this would work would be that the earth_position_edges would be instantiated first. (In general, you probably don't know that you will be combining segments). When it becomes clear that there will be segments that will be combined, the earth_position_composite will be instantiated. Then the various edges will be updated to reference the composite.
It can also be noted that the two edge segments were related to the seismic_feature. They need not be, since they get their identity from the composite. But it is possible for them to be. In general, if these segments are from separate interpretations, they will be separately related, and the composite will also be related.
The final step is to tie the seismic_feature to the geologic_feature (The Top of Strawn).
----> Continue Example: Another line AN-2
interpTieAN-21 = INTERPRETED_FEATURE_ASSOCIATION {
start_time --> TIMESTAMP { -- 1999-Apr-26: 10:15 am
date1 = DATE {
year --> 1999;
month --> 4;
day --> 26; };
time1 = TIME {
hour --> 10;
minute --> 15;
second --> 0.0;
uct_offset --> DAYTIMEINTERVAL { -- local time (EDT)
days --> 0;
hours --> -5; -- Houston is 5 hours behind UCT
mintues --> 0;
seconds --> 0.0; }; };
seismic_feature --> @AN-2pick1;
geologic_feature --> @Top_Strawn;
caused_by --> @pickAN-2; };
----> End example: Another line AN-2
The three edges (one of which is a composite) above implicitly represent a surface. We want to indicate that. We can do that by combining the three edges together into an earth_position_composite. This composite would form another seismic_feature. In this case the seismic_feature would be the "Top of Strawn," as have all the others, but it would not be identified by the seismic line from which an edge was picked. We will need to identify it by the parent seismic_geometry_set, "Anumu 2d survey."
Note that it is still a seismic_feature. As a final step, the seismic_feature will be related to a geologic_feature (lithostratigraphic_marker), "Top of Strawn." This is an interpretation stage.
----> Begin Example: Combining edges
group_Strawn = GEOSCIENCE_INTERPRETATION {
name --> 'Group Strawn picks into surface';
ref_existence_kind --> @PRV_actual;
containing_activity --> @parentactivity; -- instantiated earlier
start_time --> TIMESTAMP { -- 1999-Apr-26: 10:25 am
date1 = DATE {
year --> 1999;
month --> 4;
day --> 26; };
time1 = TIME {
hour --> 10;
minute --> 25;
second --> 0.0;
uct_offset --> DAYTIMEINTERVAL { -- local time (EDT)
days --> 0;
hours --> -5; -- Houston is 5 hours behind UCT
mintues --> 0;
seconds --> 0.0; }; }; };
Strawn_pick_group1 = SEISMIC_FEATURE {
identifier --> 'Anumu Strawn surface';
description --> 'This is a group of edges that implicitly define
the surface of the Strawn in the Anumu prospect area.';
seismic_geometry_set --> @parent_sgs; }; };
Strawn_epc1 = EARTH_POSITION_COMPOSITE {
identifier --> 'Anumu Strawn Picks';
geoscience_interpretation --> @group_Strawn;
geologic_feature --> @Strawn_pick_group1;
part --> SET( @AN-2_edgecomp, @AN-7edge1, @AN-3edge1 ); };
(* Now use the interpreted_feature_association to indicate that this group represents the Strawn *)
interpTieAN-21 = INTERPRETED_FEATURE_ASSOCIATION {
start_time --> TIMESTAMP { -- 1999-Apr-26: 10:25 am
date1 = DATE {
year --> 1999;
month --> 4;
day --> 26; };
time1 = TIME {
hour --> 10;
minute --> 25;
second --> 0.0;
uct_offset --> DAYTIMEINTERVAL { -- local time (EDT)
days --> 0;
hours --> -5; -- Houston is 5 hours behind UCT
mintues --> 0;
seconds --> 0.0; }; };
seismic_feature --> @Strawn_pick_group;
geologic_feature --> @Top_Strawn;
caused_by --> @group_Strawn; };
----> End Example: Combining Edges
It is unimportant that every pick was assigned to Joe. This was for convenience. If someone else made the picks, the activity could be assigned to that person. Alternatively, the activity could be assigned to the Anumu Team, which is a business_associate.
The picks were never related directly to a geologic_feature. That is, the picks themselves are a Seismic_feature. The relationship to a geologic_feature (lithostratigraphic_marker) is done through the use of the interpreted_feature_association. This was done deliberately. It is an attempt to separate the operation of making the picks from the activity of interpreting them. In the next section, we will see how this allows us to change the interpretation.
Note that the geometry of the edge was always given in bin point index vs time coordinates. It is also possible to give the geometry of the edges in other coordinate systems (for example, (x, y, z); or (lat, long, depth), or (bin point index, depth)). Some of these may require an operation to convert the data. The details of the operation can be recorded with the process model.
The breakpoint at the last chapter was the instantiation of the "group of picks" into a single instance. This is the recognition that we are putting together information from several lines to create a single object (The Top of Strawn). This chapter will build on that. We expect the set of lines to grow. That is, as more lines are available and picked, the information will be added to the composite to give a more complete picture of the surface.
The additional edges are added to the already created composite. This loses some information. For example, the instance, @Strawn_pick_group1, was created in the last section as a group of 3 edges. The date and interpreter were recorded as part of the interpretation activity. When a fourth edge is added to the set, there is no easy way to determine that it is an additional edge that was added later.
Will there ever be a second composite of edges? There may be. The semantics of the choice is as follows: As long as the original interpretation holds true, there will be only one composite. It may grow with time as additional edges are added to it. It is only when the interpretation changes, or a second interpretation needs to be considered alongside it. A second instance of the composite (which may also be interpreted as the Top of Strawn) will spawn a new composite.
For example, consider if it is found later that the edge picked from line AN-2 is not correct. Later evaluation shows that the line was processed poorly (the data was phase shifted about 100 degrees). The doublet pick remains a valid seismic_feature, but it can no longer be considered the Top of Strawn. Instead, assume that another pick was made and there are another set of pick values for AN-2 (that are interpreted as Top of Strawn). Then a new instance of earth_position_composite will be instantiated (with its activity and interpreter recorded) that represents this new interpretation.
An example of such a case is considered later in this chapter.
Line AN-5 is picked. The pick is to be added to be recorded and added to the composite.
----> Begin Example: Add to composite
(* Add a fourth pick from line AN-5 *)
pickAN-5 = GEOSCIENCE_INTERPRETATION {
ref_existence_kind --> @PRV_actual;
containing_activity --> @parentactivity; -- instantiated earlier
start_time --> TIMESTAMP { -- 1999-May-03: 9:18 am
date1 = DATE {
year --> 1999;
month --> 5;
day --> 3; };
time1 = TIME {
hour --> 9;
minute --> 18;
second --> 0.0;
uct_offset --> DAYTIMEINTERVAL { -- local time EDT
days --> 0;
hours --> -5; -- Houston is 6 hours behind UCT
mintues --> 0;
seconds --> 0.0; }; }; };
billDidIt5 = BUSINESS_ASSOCIATE_ACTIVITY_ROLE {
ref_business_associate_activity_role --> @PRV_interpreter;
business_associate --> @Bill;
activity --> @pickAN-5; };
AN-5pick1 = SEISMIC_FEATURE {
identifier --> 'AN-5 doublet horizon (Strawn)';
seismic_geometry_set --> @2dline5; };
AN-5edge1 = EARTH_POSITION_EDGE {
identifier --> 'AN-5 doublet picks (Strawn)';
geoscience_interpretation --> @pickAN-5;
geologic_feature --> @AN-5pick1;
binset --> @binset5; };
geometry31 = PTY_GEOMETRY_2D_EDGE{
edge --> @AN-5edge1;
activity --> @pickAN-5;
data_value --> LINE_GRID {
gframe5 = GEOMETRY_FRAME {
detailed_type --> 'FT_LINE';
grid_or_mesh --> @binpointgrid; -- from the binset
coordinate_system --> @section_cs_5;
descriptor --> LIST( @descr_51 );
leaf_frame --> SET(@leaf_51, @LEAF_52 ); };
descr_51 = DESCRIPTOR {
dimension --> 'INDEX_I';
lower_bound --> 7;
count --> 718; };
leaf_51 = LEAF_FRAME {
data_type --> 'DAE_C_FLOAT';
ref_unit_of_measure --> @PRV_bin_point_axis;
coordinate_system_axis --> 1;
data_values --> (use the grid_1d_equal values); };
leaf_52 = LEAF_FRAME {
data_type --> 'DAE_C_FLOAT';
ref_unit_of_measure --> @PRV_ms;
coordinate_system_axis --> 2;
data_values --> LIST( here are the 718 time picks ); }; };
interpTieAN-51 = INTERPRETED_FEATURE_ASSOCIATION {
start_time --> TIMESTAMP { -- 1999-May-03: 9:18 am
date1 = DATE {
year --> 1999;
month --> 5;
day --> 3; };
time1 = TIME {
hour --> 9;
minute --> 18;
second --> 0.0;
uct_offset --> DAYTIMEINTERVAL { -- local time EDT
days --> 0;
hours --> -5; -- Houston is 6 hours behind UCT
mintues --> 0;
seconds --> 0.0; }; };
seismic_feature --> @AN-3pick1;
geologic_feature --> @Top_Strawn;
caused_by --> @pickAN-3; };
(* Now add the edge to the existing composite. *)
update @Strawn_epc1
set part = part + ( @AN-5edge1 );
----> End Example: Add to composite
Continue this update process as long as new picked lines are to be added to the existing set of picks.
Assume all lines have been processed, picked, and the results stored in Epicentre. Furthermore, the six edges for the Top of Strawn have been collected in @Strawn_epc1 as instantiated and updated in these examples.
When the data is compared to well logs, it becomes clear that the pick for AN-2 is wrong. The data is reprocessed to shift it 100 degrees, and a new pick is made.
The following example will store the new pick. It will then create a new composite with the correct set of picks, and will indicate that the previous composite is no longer active.
----> Begin Example: Change Interpretation
pickAN-2b = GEOSCIENCE_INTERPRETATION {
ref_existence_kind --> @PRV_actual;
name --> 'Strawn AN-2 repick';
description --> 'Repick of the Strawn on AN-2';
containing_activity --> @parentactivity; -- instantiated earlier
start_time --> TIMESTAMP { -- 1999-May 21: 11:01 am
date1 = DATE {
year --> 1999;
month --> 5;
day --> 21; };
time1 = TIME {
hour --> 11;
minute --> 1;
second --> 0.0;
uct_offset --> DAYTIMEINTERVAL { -- local time (EDT)
days --> 0;
hours --> -5; -- Houston is 5 hours behind UCT
mintues --> 0;
seconds --> 0.0; }; }; };
billDidIt2b = BUSINESS_ASSOCIATE_ACTIVITY_ROLE {
ref_business_associate_activity_role --> @PRV_interpreter;
business_associate --> @Bill;
activity --> @pickAN-2b; };
AN-2pick2b = SEISMIC_FEATURE {
identifier --> 'AN-2 doublet horizon repick (Strawn)';
seismic_geometry_set --> @2dline2; };
(* Note: line AN-2 was reprocessed. The seismic_geometry_set was
the same, as was the binset. But the seismic_data_set was different *)
AN-2edge2b = EARTH_POSITION_EDGE {
identifier --> 'AN-2 repick (Strawn)';
geoscience_interpretation --> @pickAN-2b;
geologic_feature --> @AN-2pick2b;
binset --> @binset2; }; -- the same binset
geometry2b = PTY_GEOMETRY_2D_EDGE{
edge --> @AN-2edge2b;
activity --> @pickAN-2b;
data_value --> LINE_GRID {
gframe2b = GEOMETRY_FRAME {
detailed_type --> 'FT_LINE';
grid_or_mesh --> @binpointgrid; -- from the binset
coordinate_system --> @section_cs_2;
(* This is a coordinate system particular to this seismic data set *)
descriptor --> LIST( @descr_21b );
leaf_frame --> SET(@leaf_21b, @LEAF_22b ); };
descr_21b = DESCRIPTOR {
dimension --> 'INDEX_I';
lower_bound --> 7;
count --> 671; };
leaf_21b = LEAF_FRAME {
data_type --> 'DAE_C_FLOAT';
ref_unit_of_measure --> @PRV_bin_point_axis;
coordinate_system_axis --> 1;
data_values --> (use the grid_1d_equal values); };
leaf_22b = LEAF_FRAME {
data_type --> 'DAE_C_FLOAT';
ref_unit_of_measure --> @PRV_ms;
coordinate_system_axis --> 2;
data_values --> LIST( here are the 671 time picks ); }; };
interpTieAN-2b = INTERPRETED_FEATURE_ASSOCIATION {
start_time --> TIMESTAMP { -- 1999-May 21: 11:01 am
date1 = DATE {
year --> 1999;
month --> 5;
day --> 21; };
time1 = TIME {
hour --> 11;
minute --> 1;
second --> 0.0;
uct_offset --> DAYTIMEINTERVAL { -- local time (EDT)
days --> 0;
hours --> -5; -- Houston is 5 hours behind UCT
mintues --> 0;
seconds --> 0.0; }; };
seismic_feature --> @AN-2pick2b;
geologic_feature --> @Top_Strawn;
caused_by --> @pickAN-2b; };
(* Now the reinterpretation starts. Begin by instantiating a new
activity - the reinterpretation activity *)
redo_Strawn = GEOSCIENCE_INTERPRETATION {
ref_existence_kind --> @PRV_actual;
name --> 'reinterpretation of AN-2 Strawn';
description --> 'Reinterpret the Strawn picks on AN-2. Remove
original picks, and use this one.';
containing_activity --> @parentactivity; -- instantiated earlier
start_time --> TIMESTAMP { -- 1999-May 21: 11:01 am
date1 = DATE {
year --> 1999;
month --> 5;
day --> 21; };
time1 = TIME {
hour --> 11;
minute --> 1;
second --> 0.0;
uct_offset --> DAYTIMEINTERVAL { -- local time (EDT)
days --> 0;
hours --> -5; -- Houston is 5 hours behind UCT
mintues --> 0;
seconds --> 0.0; }; }; };
(* And say that Bill did it *)
billDidIt2c = BUSINESS_ASSOCIATE_ACTIVITY_ROLE {
ref_business_associate_activity_role --> @PRV_interpreter;
business_associate --> @Bill;
activity --> @redo_Strawn; };
(* create the new composite *)
Strawn_epc2 = EARTH_POSITION_COMPOSITE {
identifier --> 'Anumu Strawn Picks b';
geoscience_interpretation --> @redo_Strawn;
part --> SET( @AN-7edge1, @AN-3edge1, @AN-2edge2b, @AN-4edge1,
@AN-5edge1, @AN-1edge1 );
geologic_feature --> @Strawn_pick_group;
binset --> @binset2; }; };
(* This is tied to the seismic_feature that was used earlier.
This is another interpretation (representation) of it *)
(* Tie this to the Strawn *)
interpTieStrawnb = INTERPRETED_FEATURE_ASSOCIATION {
start_time --> TIMESTAMP { -- 1999-May-21: 11:01 am
date1 = DATE {
year --> 1999;
month --> 5;
day --> 21; };
time1 = TIME {
hour --> 11;
minute --> 1;
second --> 0.0;
uct_offset --> DAYTIMEINTERVAL { -- local time (EDT)
days --> 0;
hours --> -5; -- Houston is 5 hours behind UCT
mintues --> 0;
seconds --> 0.0; }; };
seismic_feature --> @Strawn_pick_group;
geologic_feature --> @Top_Strawn;
caused_by --> @pickAN-2b; };
(* This represents a second interpretation of the Strawn. If the
first is still valid (an alternate interpretation), the work
would stop here. But in this case, we want to invalidate the
first interpretation. This is done by updating the earlier
interpreted_feature_ association with an end_time and a
terminated_by, which is the activity which terminated the association. *)
update @interpTieAN-21
set end_time --> 1999-May-21 11:01 am
AND set terminate_by --> @redo_Strawn;
----> End Example: Change Interpretation
The addition of new horizons to the database is straightforward. There is no difference between these new horizons and the Top of Strawn as produced in the above. Also note that there is no implication of time ordering. These additional horizons may be picked and added to the database before, simultaneous with, or after the Top of Strawn picks.
The parent activity will be the same as the one already used. That is because we defined the parent activity to be the seismic interpretation, to include all lines and all horizons. The lithostratigraphic_marker, of course, will be different.
The next section is the part that ties these horizons together. This will be done using by developing an earth model.
[Seismic Table of Contents] [Usage Document Table of Contents]