POSC Specifications
Version 2.2
Usage Examples
Seismic Acquisition Locations

[Seismic Table of Contents]


1.4 Seismic Acquisition Locations

An important part of the acquisition of seismic data is the determination of the locations. In particular, it means the locations of the shots and the receivers. In general, it is required to describe not only these locations but also the locations of various auxiliary facilities. In addition, in order to assign these locations properly to the seismic traces, it is necessary to correlate the location data with the recording of the seismic data.

An important distinction arises between land and marine data. For land data, the receivers (geophones) are planted, and do not move from shot to shot. Therefore, we can adopt the concept of seismic stations. A seismic station is a point of importance on the surface of the earth. It is important because it is the location of a shot or of a receiver group (or both).

For marine data, the towed cable means that the receivers move from one shot to the next. Although it is generally planned, and often assumed, that the receivers "move up" to occupy the position of the previous groups, this is rarely the case. Consequently, the concept of a seismic station is replaced by the locations (separately) of the shots and of the receiver groups.

Subsidiary location information is often recorded in the field. This is particularly true of the marine surveys. Among the subsidiary information are the location of a reference point on the vessel, the location of the tail buoys of the seismic streamers, the location of the echo sounder, and possibly locations of other navigation facilities.

The sources and streamers are hooked together into a network. A conventional streamer would have a towed source, with a towed cable of receiver groups directly behind. Present day acquisition - particularly for 3d surveys - generally has more than one towed source, and more than one towed streamer. The positions of these facilities relative to the boat must be known.

Finally, it is important to consider that neither the sources nor the receiver groups are points. It is necessary to identify which point represents the source - such as the barycenter of the air guns, or the plate position of the initial vibrator, the point of the receiver group closest to the boat, etc.

The position data is generally stored separately from the trace data, and later merged. In order to perform this merger, it is necessary to know which location goes with which trace. Consequently it is necessary to know which receiver group (for which the locations are recorded) go with which recording channel (which will identify the seismic trace).

In addition to the recording information, it is useful to record information about the survey in order to give context to the data. Among this information is the time and date of recording, the general location area, and the business associates involved (client, contractor, positioning contractor, and positioning processor.). In general, this information is necessary for quality control and data history, but may also be needed for survey identification.

1.4.1 Information Content

Sufficient information to determine which seismic survey the positioning data is part of (context). Possible inclusions are:

In general, the above information is used in part or in whole to uniquely identify the survey.

Define the activity, and the participants of the activity:

Location is used in the general sense. It consists of surface locations and elevations and depths. It also includes all geodetic information necessary to make sense of the locations.

Acquisition environment: land or marine (or transitional or marsh)

At this point, the information content bifurcates depending on whether there are fixed stations (e.g., land), or a moving network (e.g., marine):

Land or Onshore:

Marine or Offshore:

 

1.4.2 Epicentre Content relative to UKOOA P1/90: Marine

NOTE: Much of the information in the UKOOA exchange set is identifier information. consequently, there may be instances already existing in the receiving database. Thus, the header data must be staged to determine if such instances exist, or if they must be created. In particular, the following must be checked first:

All locations need a coordinate system. The coordinate systems used in UKOOA are geographic, projected, and local. All of these may be pre-existing:

H1400: geographic_coordinate_system.identifier, .geodetic_datum.identifier, .geodetic_datum. ellipsoid.identifier, .geodetic_datum.ellipsoid.semimajor_axis, and .geodetic_datum.ellipsoid. inverse_flattening. Typically, these will be standard instances. (Surveyed datum)

WGS84 is an assumed geographic_coordinate_system. (Satellite datum).

H1401: Bursa-Wolf or Coordinate_system_rotation parameters from H1400 to WGS84.

H1500 and H1501 are comparable to H1400 and H1401 for the Plotting datum.

H1600 is comparable to H1401, from Surveyed datum to Plotting datum.

H1700: local_spatial_coordinate_system.identifier, .vertical_depth_system_axis.vertical_axis_orientation ('upwards' or 'downwards'), and .vertical_depth_system_axis.vertical_datum. (Depth or Elevation datum).

H1800 and H1900: Projected_coordinate_system.identifier (projected system). The information in these two cards should be sufficient to select a projected coordinate system. Typically, these will be a standard instance. The parameters of the transformation are given in H2100, H2200, H2301, H2302, H2401, H2402, H2506, H2507, H2508, H2509. Note that all of these are not necessary - the cards used depend on the projection type (card H1800).

H2600 cards may contain coordinate system information.

H1810 is an alternative to the projection. It indicates (in the US) township/range coordinate information.

NOTE: Create coordinate systems, coordinate transformations, etc. as needed. Use the coordinate_transformation_activity if needed (as a child of the positioning activity).

Next should be instantiated the parent seismic_geometry_set. If appropriate, child sets can also be instantiated. This may have been previously instantiated before the UKOOA data was received. The UKOOA header cards give the context to select the appropriate seismic_geometry_set.

seismic_geometry_set.identifier. Uses information primarily from H0100 and the tape/disk label. H2600 cards, H0101, H0200, H0203, H0300, H0400 may also contribute to the identifier. This may already have been instantiated prior to receiving the UKOOA data.

NOTE: If identifying, also instantiate

seismic_geometry_set.geophysical_acquisition_area
seismic_geometry_set.ref_seismic_geometry --> appropriate value, usually known from outside.
seismic_geometry_set.ref_survey_environment --> 'marine'

NOTE: In general, the seismic_geometry_set will already have been instantiated, with the above information known. When the UKOOA data is received, it will be necessary to update this instance. The update of seismic_geometry_set is shown in a later area.

The business associates, if not previously instantiated:

H0300: business_associate.identifier, business_associate.kind --> (usually) 'company'
H0400: business_associate.identifier, business_associate.kind --> (usually) 'company'
H0500: business_associate.identifier, business_associate.kind --> (usually) 'company'
H0600: business_associate.identifier, business_associate.kind --> (usually) 'company'

The positioning activity. This is a child of the total acquisition activity

seismic_acquisition_activity.name taken from cards H0100, H0101, H0200.
seismic_acquisition_activity.duration taken from cards H0200
seismic_acquisition_activity.start_date and .end_date taken from cards H0200
seismic_acquisition_activity.containing_activity --> possibly an already existing
    activity - the parent activity.
seismic_acquisition_activity.seismic_geometry_set --> the parent seismic_geometry_set. 
    This was either created in an earlier step, or was created considerably before
    the UKOOA data was received.

The tie between the activity and the business associates is made:

business_associate_activity_role.business_associate --> appropriate ones above
business_associate_activity_role.activity --> the positioning activity
business_associate_activity_role.ref_business_associate_activity_role --> 
             'contractor', 'processor', 'positioning contractor', etc. as appropriate.

The seismic facilities are instantiated. The boat(s), streamer(s), source(s), etc. This must be done for as many as there are. Note that each instance (in a subtype) must have a different uid.

foreach H0102 card:
  seismograph_platform.name from H0102.
  seismograph_platform.description from H0102.
  seismograph_platform.ref_existence_kind --> 'actual'
  seismograph_platform.seismic_facility_uid = vessel id code from H0102.
end H0102 card loop
foreach H0103 card
  seismic_source_facility.name = combination of vessel name and source name from H0102, H0103.
  seismic_source_facility.seismic_facility_uid = source id code from H0103.
  seismic_source_facility.ref_existence_kind --> 'actual'
  seismic_facility_assembly.whole.name --> vessel corresponding to vessel code in H0103.
  seismic_facility_assembly.part.name --> this seismic_source_facility
end H0103 card loop
foreach H0104 card:
  streamer.name = combination of vessel name and streamer name from H0102, H0104.
  streamer.ref_existence_kind --> 'actual'
  streamer.seismic_facility_uid = streamer id code from H0104.
NOTE: This id code, when used in Epicentre, must be unique within the context of
               the survey. This seems to be the case also in the P1/90 standard.
  seismic_facility_assembly.whole.name --> vessel corresponding to vessel code in H0104.
  seismic_facility_assembly.part.name --> this streamer.
  if tailbuoy id is present:
    other_seismic_facility.name = combination of tailbuoy id and other information.
    other_seismic_facility.ref_existence_kind --> 'actual'
    other_seismic_facility.ref_seismic_facility_role.kind = 'towed buoy'
    other_seismic_facility.seismic_facility_uid = tailbuoy id from H0104
NOTE: same comment as above for seismic_facility_uid.
    seismic_facility_assembly.whole.name --> streamer in H0104.
    seismic_facility_assembly.part.name --> this tailbuoy
  end if
end H0104 card loop
NOTE: other cards, such as H0105, may contain references to other equipment and facilities.
NOTE: other facility information may be in H2600 cards, or in H0700 card.

Reference points of the facilities should be noted. In particular, the vessel reference point, the source reference point, and the receiver group reference points. UKOOA P1/90 does not record the receiver group reference points. Nor does it specify the vessel reference point1. It does allow one reference point (the coordinated location, card H0800), which can take many forms: center of source, shotpoint, common mid point, etc. Thus it is necessary to look at card H0800. Note that the data cards will be giving locations of this coordinated point. Assume for this example, it is "center of source." (Note: one is needed for each source, or each appropriate facility).

Note 1: One company mentioned that they always use the "center of the stern" as the vessel reference point. But he warned that this was not universal.

seismic_facility_node.name = string value from H0800 ('center of source')
seismic_facility_node.seismic_facility --> the source
NOTE: must specify the unknown vessel reference point.
seismic_facility_node.name = 'unknown vessel reference point'
seismic_facility_node.seismic_facility --> the vessel

In addition to the above coordinate systems, there needs to be a moving "boat" coordinate system for the marine case. This has a local name, and has an origin, which is the ship's reference point. UKOOA P1/90 does not specify what the ship's reference point is. The above has created the "unknown node" that will be used.

if H0900: code == 1 (rectangular coordinate system)
  general_coordinate_system_axis.ref_quantity_property --> 'x'
  general_coordinate_system_axis.ref_quantity_property --> 'y'
  local_spatial_coordinate_system.ref_coordinate_system_constraint --> 'geometry 2d'
  local_spatial_coordinate_system.coordinate_system_axis --> {the x axis, the y axis}
else H0900: code == 2 (polar coordinate system)
  general_coordinate_system_axis.ref_quantity_property --> 'length'
  general_coordinate_system_axis.ref_quantity_property --> 'plane angle'
  local_spatial_coordinate_system.ref_coordinate_system_constraint --> 'polar system'
  local_spatial_coordinate_system.coordinate_system_axis --> {the length axis, the angle axis}
end if
  local_spatial_coordinate_system.identifier = a combination of survey and vessel, to be unique.
  local_spatial_coordinate_system.vertex --> the unknown vessel reference point.
  local_spatial_coordinate_system.source --> the appropriate ref_source.name

Locate the coordinated point(s) with reference to the vessel, in the local coordinate system. Use all H09xx cards

pty_location_2d.seismic_facility_node --> the coordinated point.
pty_location_2d.data_value = 
if H09xx:code == 1, {--> the local spatial coord system, H09xx:A unit, H09xx: B unit} 
else if H09xx:code == 2, {--> the local spatial coord system, H09xx:R unit, H09xx: angle unit}
where unit is taken as appropriate from cards H2000 (length), and H2002 (angle).

Update seismic_geometry_set to add the additional information from this UKOOA survey.

seismic_geometry_set.seismic_facility --> { all the vessels, sources, streamers, etc. }

The following deals with the data cards. This part is a major bifurcation from the land case.

If Type S cards: need source event grid

If Type S cards and Type R cards, and/or Type V, A, T, E cards, need

  1. source event grid,
  2. channel grid,
  3. field trace grid.

If Type C or Type Q cards: need bin cards. 2d needs only bin point, 3d needs bin point, bin line, and binset.

Create the grids for storing the data. The following grids will be formed, but their use will depend on the cards in the data section of the UKOOA exchange set. All of the axes may be pre-existing.

general_coordinate_system_axis.ref_quantity_property --> 'source event uid'
general_coordinate_system_axis.ref_quantity_property --> 'channel uid'
general_coordinate_system_axis.ref_quantity_property --> 'bin point index'
general_coordinate_system_axis.ref_quantity_property --> ''bin line index'

Form the source event grid

grid_1d_equal.name = a unique name + 'source grid'
grid_1d_equal.origin = { 1. Euc }
grid_1d_equal.step = { 1. Euc }
grid_1d_equal.point_count = number of source events
grid_1d_equal.connected = 'False'
grid_1d_equal.coordinate_system_axis --> the above source event uid axis.

Form the channel grid

grid_1d_equal.name = a unique name + 'channel grid'
grid_1d_equal.origin = { 1. Euc }
grid_1d_equal.step = { 1. Euc }
grid_1d_equal.point_count = number of recording channels
grid_1d_equal.connected = 'False'
grid_1d_equal.coordinate_system_axis --> the above channel uid axis.

Form the field trace grid

grid_defined_grid.name = a unique name + 'field trace grid'
grid_defined_grid --> { the source event grid, the channel grid }

Form the bin point grid

NOTE: The bin point grid values contain semantic meaning. So more care must be taken in setting it up.

grid_1d_equal.name = a unique name + 'bin point grid'
grid_1d_equal.origin = "first point number"
grid_1d_equal.step = "difference between first and second point numbers"
grid_1d_equal.point_count = number of bin point (common midpoint) events
grid_1d_equal.connected = 'False'
grid_1d_equal.coordinate_system_axis --> the above bin point index axis.

Form the bin line grid

grid_1d_equal.name = a unique name + 'bin line grid'
grid_1d_equal.origin = "first line number"
grid_1d_equal.step = "difference between first and second bin line numbers."
grid_1d_equal.point_count = number of binned lines.
grid_1d_equal.connected = 'False'
grid_1d_equal.coordinate_system_axis --> the above bin line index axis.

Form the binset_grid

grid_defined_grid.name = a unique name + 'binset grid'
grid_defined_grid --> { the bin line grid, the bin point grid }

Update the seismic_geometry_set (use only the attributes and grids that will be needed).

seismic_geometry_set.source_event_uid --> the source event grid
seismic_geometry_set.field_trace_grid --> the field trace grid

if (coordinated point is common mid point or bin) create a binset_grid, and use it.

binset_grid.name = a unique name + 'binset'
binset_grid.seismic_geometry_set --> the appropriate seismic_geometry_set.
binset_grid.grid_structured --> either bin point grid (for line) or binset grid (for 3d)
binset_grid.ref_binset_geometry_class --> 'regular'
if (Type V, A, T, E cards present) form a seismic_facility_track for each facility.
  seismic_facility_track.seismic_facility --> the appropriate seismic facility
  seismic_facility_track.seismic_geometry_set --> the appropriate seismic_geometry_set.
endif

Collect and store the data in frames. Note: must read all cards to form the final arrays to be stored in a single "data value". (NOTE: Many of these attributes occur as pty_... entities, for which the data array is the data_value attribute of the pty_...)

A Type S card will give the following information. The data will be stored in seismic_geometry_set attributes:

source_event_name = (cols 20-25) (store using source event grid)
source_location = lat/long (cols 26-46) (store using source event grid)
source_location = easting/northing (cols 47-64) (store using source event grid)
pty_source_start_time = (cols 71-79) (store using source event grid)
source_water_depth = (cols 65-70) (store using source event grid)

A Type R card will give the following information. (Note: these receiver groups correspond to the source event of the previous card. Each card has three groups of values: Store on field trace grid as a single source with all the channels. seismic_geometry_set attributes:

pty_receiver_location - easting/northing (cols 6-23, 32-49, 58-76) respectively
pty_receiver_vertical_location - (cols 24-27, 50-53, 76-79) respectively.

A Type Q or Type C card will give the same information as a Type S card. But the data will be stored on the bin point grid (2d) or binset grid (3d). For 3d, the "event name" must be converted to a line index and point index. Store in binset_grid attribute:

bin_node_name = (cols 20-25).
pty_geometry_2d_edge or pty_geometry_2d_face. Two sets corresponding as above to the lat/long and the easting/northing.
pty_water_depth_array = (cols 65-70).

Type V, A, T, E cards will give the same information as a Type S card. But the data will be stored on source_event_uid. Note that columns 17, 18, 19 allow the proper seismic facility to be chosen. They will be stored in the appropriate seismic_facility_track attributes:

pty_location_array.data_value = two arrays: lat/long and easting/northing
pty_water_depth_array.data_value = (cols 71-79).

1.4.3 Epicentre Content relative to UKOOA P1/90: Land

Differences:

The parent seismic_geometry_set would have

seismic_geometry_set.ref_survey_environment --> 'land'

rather than 'marine'.

The seismic facilities would not be vessels and streamers. They would be land facilities. UKOOA P1/90 does not cover the facilities for the land case, except possibly in the H2600 comment cards.

The business_associate_activity_roles may be different (e.g., surveyor).

The main difference comes from the grids and data cards:

There will be three files of cards:

Type S: source description

Type G: receiver groups

Type X: cross references shot number, source event, and receiver group.

Source and receiver positions are fixed, and will be called seismic stations. The locations of the seismic stations will be given. Then source events will be defined which point to the station at which it occurred. The receiver groups will be tied to their stations. Finally, for each shot, and each recording channel, the receiver group recorded on that channel will be referenced.

Create the grids for storing the data. The following grids will be formed. All of the axes may be pre-existing.

general_coordinate_system_axis.ref_quantity_property --> 'seismic station uid'
general_coordinate_system_axis.ref_quantity_property --> 'source event uid'
general_coordinate_system_axis.ref_quantity_property --> 'channel uid'
general_coordinate_system_axis.ref_quantity_property --> 'receiver uid'

Form the seismic station grid

grid_1d_equal.name = a unique name + 'seismic station grid'
grid_1d_equal.origin = { 1. Euc }
grid_1d_equal.step = { 1. Euc }
grid_1d_equal.point_count = number of seismic stations
grid_1d_equal.connected = 'False'
grid_1d_equal.coordinate_system_axis --> the above seismic station uid axis.

Form the source event grid

grid_1d_equal.name = a unique name + 'source grid'
grid_1d_equal.origin = { 1. Euc }
grid_1d_equal.step = { 1. Euc }
grid_1d_equal.point_count = number of source events
grid_1d_equal.connected = 'False'
grid_1d_equal.coordinate_system_axis --> the above source event uid axis.

Form the channel grid

grid_1d_equal.name = a unique name + 'channel grid'
grid_1d_equal.origin = { 1. Euc }
grid_1d_equal.step = { 1. Euc }
grid_1d_equal.point_count = number of recording channels
grid_1d_equal.connected = 'False'
grid_1d_equal.coordinate_system_axis --> the above channel uid axis.

Form the field_trace_grid

grid_defined_grid.name = a unique name + 'field trace grid'
grid_defined_grid --> { the source event grid, the channel grid }

Form the bin point grid

grid_1d_equal.name = a unique name + 'receiver grid'
grid_1d_equal.origin = { 1. Euc }
grid_1d_equal.step = { 1. Euc }
grid_1d_equal.point_count = number of receiver stations
grid_1d_equal.connected = 'False'
grid_1d_equal.coordinate_system_axis --> the above receiver uid axis.

Update the seismic_geometry_set to include these grids:

seismic_geometry_set.source_event_uid --> the source event grid
seismic_geometry_set.field_trace_grid --> the field trace grid
seismic_geometry_set.receiver_uid --> the receiver grid
seismic_geometry_set.seismic_station_uid --> the seismic station grid

COMMENT: For a 3d onshore survey, the acquisition location information can be treated in one of two ways. We may want to consider the survey as a whole (one seismic_geometry_set) with each line/ point combination forming a separate station. The second way is to consider the 3d survey to be made up of many lines. In this case, we will form a "child" seismic_geometry_set for each line. Then we will store information for each separate line as attributes of the appropriate "line" seismic_geometry_set.

The following considers the first way only. That is, the whole survey is a single seismic_geometry_set, and the information that can be used to "break" the acquisition into multiple lines is contained in the arrays. For example, the acquisition_index array will be used to define a "line index" and "point index" for each station.

Collect and store the data in frames. Note: must read all cards to form the final arrays. The data will be in seismic_geometry_set attributes:

station_name: Card S: (2-13) and (20-25) . Card G: (2-13) and (20-25). 
     Option to sort out stations which are shared for sources and receivers. The name array
     uses the seismic station grid.
source_station: Card S: (2-13) and (20-25). Each source event ties to a station.
     Store the station_uid using the source event grid.
receiver_station: Card G: (2-13) and (20-25). Each receiver group ties to a station.
     Store the station_uid using the receiver grid.
acquisition_index: Cards S and G: (2-13) and (20-25). These define the "bin line index"
     and "bin point index" for each station. The array will use the seismic station grid,
     and will store one or both of line index and point index.
channel_connection: Uses the 2d grid (field trace grid) of source event uid vs channel
     uid. The value stored is receiver uid. Use the X card to obtain this relationship,
     for each source event.
station_location: Cards S, G contain lat/long and easting/northing. The result is stored
     in two pty_location_array instances. Uses the seismic station grid.
station_vertical_location: Cards S, G contain the elevations. The result is stored in--: pty_location_array. Uses the seismic station grid.
pty_source_start_time: Card S: (71-79). Result is stored in pty_source_start_time instance.
     Uses the source event grid.

The following considers the second way. The second way contains the line and point information in the seismic_geometry_set hierarchy rather than in the arrays. In particular, the second way will break the survey into lines and points within the line. In general, columns 2-13 and 20-25 contain this information. Note that the S and G cards may differ as to which is considered the line (column s 2-13) and which is considered the point (columns 20-25). This example follows the concept that the S cards will define a group of "shot line" seismic_geometry_set and the G cards will define a group of "receiver line" seismic_geometry_set. Where the S and G cards define the same line, only one instance need be created.

seismic_station_uid --> the seismic station grid (instance in the "parent"
     seismic_geometry_set).
station_name: Concatenation of information from S and G cards, (2-13)
     and (20-25).
acquisition_index: Cards S and G: (2-13) and (20-25). These define the
     "bin line index" and "bin point index" for each station. The array will
     use the seismic station grid, and will store one or both of line index
     and point index.

Foreach (different value in column 2-13 of S card)
  seismic_geometry_set.identifier = column 2-13
  seismic_geometry_set.part_of --> the parent seismic_geometry_set
  seismic_geometry_set.ref_seismic_geometry --> 'source line'
  seismic_geometry_set_uid --> "line number" portion of columns 2-13.
           (must be unique for the survey)
  seismic_geometry_set.source_event_uid --> the source event grid
  seismic_geometry_set.source_event_station: an array of seismic station uid
           values obtained from the parent seimsic_geometry_set grid.
  seismic_geometry_set.field_trace_grid --> the field trace grid
  seismic_geometry_set.channel_connection: see below for details
end foreach
Foreach (different value in column 2-13 of G card)
  seismic_geometry_set.identifier = column 2-13
  seismic_geometry_set.part_of --> the parent seismic_geometry_set
  seismic_geometry_set.ref_seismic_geometry --> 'receiver line'
  seismic_geometry_set_uid --> "line number" portion of columns 2-13.
           (must be unique for the survey)
  seismic_geometry_set.receiver_uid --> the receiver grid
  seismic_geometry_set.receiver_station: an array of seismic station uid
           values obtained from the   parent seismic_geometry_set grid.
end foreach

The channel_connection attribute is an attribute of the child seismic_geometry_set, of type source line. An X card will give a source line and point value. This value can lead to the appropriate seismic_geometry_set, and the proper row within the field trace grid. The X card then defines the line and point values for the receivers. The value that actually goes into the channel_connection grid will be the geometry set uid (which represents the appropriate "receiver line"), and the receiver point uid within that line.

In addition, it is necessary that the source line seismic_geometry_set reference the receiver line seismic_geometry_set that it uses in these arrays. This is done through the uid_definition attribute:

seismic_geometry_set.uid_definition --> {set of seismic_geometry_sets referred to}.


[Seismic Table of Contents]


Last modified: 05 August 1997
© Copyright 1997 POSC. All rights reserved.