Преобразование файла SEG-Y в ZGY

В этой статье вы узнаете, как преобразовать отформатированные данные SEG-Y в формат ZGY. Сейсмические данные, хранящиеся в стандартном формате SEG-Y, можно преобразовать в ZGY для использования в таких приложениях, как Петрель через сейсмический DMS. См. здесь сведения о часто задаваемых вопросых о преобразованиях ZGY и дополнительные сведения см. в сообществе OSDU® здесь: SEG-Y в ZGY. Это пошаговое руководство по выполнению преобразования. Обратите внимание, что фактический рабочий процесс может отличаться и использовать его в качестве руководства для требуемого набора шагов для достижения преобразования.

Необходимые компоненты

  • Подписка Azure
  • Экземпляр Azure Data Manager для энергетики , созданный в подписке Azure
  • Средство командной строки cURL, установленное на компьютере
  • Субъект-служба access_token вызывать API-интерфейсы сейсмической активности. Узнайте , как создать маркер проверки подлинности.
  • Файл SEG-Y

Узнайте подробности об экземпляре Azure Data Manager для энергетики

  • Для работы с этим руководством вам потребуются следующие параметры:
Параметр Значение для использования Пример Где найти это значение
DNS УРИ <instance>.energy.azure.com Найдите это значение на странице обзора экземпляра Azure Data Manager для энергетики.
data-partition-id Раздел данных <data-partition-id> Найдите это значение в разделе секции данных в экземпляре Azure Data Manager для энергетики.
access_token значение access_token 0.ATcA01-XWHdJ0ES-qDevC6r........... Следуйте инструкциям по созданию маркера проверки подлинности , чтобы создать access_token и сохранить его.

Следуйте руководству по управлению пользователями, чтобы добавить соответствующие права для пользователя, выполняющего это руководство.

Настройка среды

Убедитесь, что вы cURL установили в системе. Вы используете его для вызова API.

Пошаговый процесс преобразования файла SEG-Y в ZGY-файл

Создайте юридический тег для соответствия данным.

Создание юридического тега для SDMS

cURL --request POST \
  --url https://<DNS>/api/legal/v1/legaltags \
  --header 'Authorization: Bearer {access_token}' \
  --header 'Content-Type: application/json' \
  --header 'Data-Partition-Id:  {data_partition_id}' \
  --data '{
    "name": "{legal_tag_name}",
    "description": "Legal Tag added for Seismic",
    "properties": {
        "countryOfOrigin": [
            "US"
        ],
        "contractId": "No Contract Related",
        "expirationDate": "2099-01-01",
        "dataType": "Public Domain Data",
        "originator": "OSDU",
        "securityClassification": "Public",
        "exportClassification": "EAR99",
        "personalData": "No Personal Data"
    }
}'

Пример ответа:

{
	"name": "opendes-Seismic-Legal-Tag-Test999588567444",
	"description": "Legal Tag added for Seismic",
	"properties": {
		"countryOfOrigin": [
			"US"
		],
		"contractId": "No Contract Related",
		"expirationDate": "2099-01-01",
		"originator": "OSDU",
		"dataType": "Public Domain Data",
		"securityClassification": "Public",
		"personalData": "No Personal Data",
		"exportClassification": "EAR99"
	}
}

Дополнительные сведения см. в разделе "Управление юридическими тегами".

Подготовка файлов набора данных

Подготовьте метаданные/ файл манифеста / файл записей для набора данных. Файл манифеста включает:

  • WorkProduct
  • SeismicBinGrid
  • FileCollection
  • SeismicTraceData

Преобразование использует файл манифеста, который вы отправляете в учетную запись хранения позже, чтобы запустить преобразование. Этот файл манифеста создается с помощью нескольких JSON-файлов и выполнения скрипта. ФАЙЛЫ JSON для этого процесса хранятся здесь для набора данных Volve. Дополнительные сведения о Volve, например о том, откуда приходят определения набора данных, посетите свой веб-сайт. Выполните следующие действия, чтобы создать файл манифеста:

  1. Клонируйте репозиторий и перейдите в папкуdoc/sample-records/volve
  2. Измените значения в скрипте prepare-records.sh Bash. Помните, что формат юридического тега префиксируется с именем экземпляра Azure Data Manager для энергетики и именем секции данных, поэтому выглядит следующим <instancename>-<datapartitionname>-<legaltagname>образом.
    DATA_PARTITION_ID=<data-partition-id>
    ACL_OWNER=data.default.owners@<data-partition-id>.<domain>
    ACL_VIEWER=data.default.viewers@<data-partition-id>.<domain>
    LEGAL_TAG=<legal_tag_name>
    
  3. Выполните скрипт prepare-records.sh.
  4. Выходные данные — это массив JSON со всеми объектами и сохраняется в all_records.json файле.
  5. Сохраните filecollection_segy_idwork_product_id значения в этом JSON-файле для использования на шаге преобразования. Таким образом преобразователь знает, где искать это содержимое вашего all_records.json.

Примечание.

Файл all_records.json также должен содержать соответствующие данные для каждого элемента.

Пример. Следующие параметры используются при вычислении координат ZGY для SeismicBinGrid:

  • P6BinGridOriginEasting
  • P6BinGridOriginI
  • P6BinGridOriginJ
  • P6BinGridOriginNorthing
  • P6ScaleFactorOfBinGrid
  • P6BinNodeIncrementOnIaxis
  • P6BinNodeIncrementOnJaxis
  • P6BinWidthOnIaxis
  • P6BinWidthOnJaxis
  • P6MapGridBearingOfBinGridJaxis
  • P6TransformationMethod
  • persistableReferenceCrs asIngestedCoordinates из блока, если SeismicBinGrid у него есть параметры P6 и CRS, указанные в разделеAsIngestedCoordinates, само преобразование должно быть в состоянии успешно завершиться, но Петрель не понимает геометрию опроса файла, если он также не получает пять угловых точек под SpatialArea,AsIngestedCoordinates, SpatialAreaи Wgs84Coordinates.

Доступ пользователей

Проверка доступа пользователей

Чтобы получить группы пользователей, используйте следующую cURL команду:

cURL -X GET "https://<DNS>/api/entitlements/v2/groups" \
     -H "Authorization: Bearer <access_token>" \
     -H "Content-Type: application/json" \
     -H "data-partition-id: <data_partition_id>"

Пример ответа:

{
  "groups": [
    "data.default.owners@<data_partition_id>.<domain>",
    "data.default.viewers@<data_partition_id>.<domain>",
    "users.datalake.admins@<data_partition_id>.<domain>"
  ]
}

Добавление пользователя в группу администрирования

Используйте следующую cURL команду, чтобы добавить пользователя в группу администрирования — users.datalake.admins:

cURL -X POST "https://<DNS>/api/entitlements/v2/groups/users.datalake.admins@<data_partition_id>.<domain>/members" \
     -H "Authorization: Bearer <access_token>" \
     -H "Content-Type: application/json" \
     -H "data-partition-id: <data_partition_id>"
     -d '{
           "email": "<client_id>",
           "role": "OWNER"
       }'

Пример ответа:

{
  "status": "Success",
  "message": "User added to admin group successfully."
}

Если вы не создали группы прав, следуйте указаниям, описанным в разделе "Управление пользователями". Если вы хотите узнать, какие группы у вас есть, используйте группы прав получения для данного пользователя. Изоляция доступа к данным достигается с помощью выделенного списка ACL (списка управления доступом) для каждого объекта в заданной секции данных.

Подготовка подпроекта

Следуйте инструкциям из этого руководства , чтобы подготовить подпроект, который включает в себя следующие действия.

  1. Регистрация секции данных в Seismic — создание клиента
  2. Создание подпроекта
  3. Регистрация набора данных

Отправка файла

Существует два способа отправки SEGY-файла. Один из вариантов — использовать URL-адрес SAS через вызов cURL. Необходимо настроить cURL в ОС. Второй метод — использовать SDUTIL. Чтобы войти в экземпляр ADME с помощью средства, необходимо создать маркер обновления для экземпляра. Узнайте , как создать маркер проверки подлинности. Кроме того, можно изменить код SDUTIL, чтобы использовать учетные данные клиента вместо входа. Если вы еще не сделали этого, необходимо настроить SDUTIL. Ознакомьтесь с руководством по настройке SDUTIL. Скачайте базу кода и измените ее config.yaml в корневом каталоге. Замените содержимое этого файла конфигурации следующим yaml.

seistore:
    service: '{"azure": {"azureEnv":{"url": "<instance url>/seistore-svc/api/v3", "appkey": "">}'
    url: '<instance url>/seistore-svc/api/v3'
    cloud_provider: azure
    env: glab
    auth-mode: JWT Token
    ssl_verify: false
auth_provider:
    azure: '{ 
        "provider": "azure", 
        "authorize_url": "https://login.microsoftonline.com/", "oauth_token_host_end": "/oauth2/v2.0/token", 
        "scope_end":"/.default openid profile offline_access",
        "redirect_uri":"http://localhost:8080",
        "login_grant_type": "refresh_token",
        "refresh_token": "<RefreshToken acquired earlier>" 
        }'
azure:
    empty: none

Метод 1. Использование cURL для отправки файла

Получение URL-адреса gcs:
cURL -X GET \
    -H "content-type: application/json" \
    -H "Authorization: Bearer <access_token>" \
    "https://<DNS>/seistore-svc/api/v3/dataset/tenant/<data-partition-id>/subproject/<subprojectname>/dataset/<datasetname>"

Пример ответа: Должен быть строкой. Мы называем ее gcsstring.

Получите URL-адрес SAS:

Чтобы получить URL-адрес отправки SAS, используйте следующую cURL команду:

cURL -X 'GET' \
  'https://<DNS>/seistore-svc/api/v3/utility/upload-connection-string?sdpath=sd://<tenant>/<subprojectname>' \
  -H 'accept: application/json' \
  -H 'Authorization: Bearer <access_token>'

Пример ответа:

{
  "access_token": "<SAS token>",
  "expires_in": <duration>,
  "token_type": "SASUrl"
}

Измените URL-адрес SAS. Замените имя контейнера в URL-адресе SAS на filepath, то есть gcsstring

filepath="<gcsstring>"
container=$(echo "$filepath" | cut -d'/' -f1)
SASurl=$(echo "<SAS token>" | sed "s|$container|$filepath|")
Отправьте файл SEG-Y:

Используйте следующую команду cURL:

cURL -X PUT -T "<local_file_path>" "<SAS_url>" \
     -H "x-ms-blob-type: BlockBlob"

Пример ответа:

{
  "status": "Success",
  "message": "File uploaded successfully."
}
Проверка отправки

Чтобы проверить отправку файла, используйте следующую cURL команду:

cURL -X 'GET' \
  'https://<DNS>/seistore-svc/api/v3/utility/ls?sdpath=sd://<tenant>/<subprojectname>' \
  -H 'accept: application/json' \
  -H 'Authorization: Bearer <access_token>'

Пример ответа:

[
  list of files.
]

Метод 2. SDUTIL

sdutil — это программа рабочего стола OSDU для доступа к сейсмической службе. Мы используем его для отправки и скачивания файлов. Используйте тег azure-stable из SDUTIL.

Примечание.

При выполнении python sdutil config initInsert the azure (azureGlabEnv) application key:не нужно вводить ничего при появлении запроса.

python sdutil config init
python sdutil auth login
python sdutil ls sd://<data-partition-id>/<subprojectname>/

Отправьте сейсмический файл в хранилище Сейсмических данных. Ниже приведен пример с именем SEGY-format file source.segy:

python sdutil cp <local folder>/source.segy sd://<data-partition-id>/<subprojectname>/destination.segy

Например:

python sdutil cp ST10010ZC11_PZ_PSDM_KIRCH_FULL_T.MIG_FIN.POST_STACK.3D.JS-017536.segy sd://<data-partition-id>/<subprojectname>/destination.segy

Создание записей хранилища

Вставьте содержимое all_records.json файла в хранилище для рабочих продуктов, данных сейсмической трассировки, сейсмической сетки и сбора файлов. Скопируйте и вставьте содержимое этого файла в раздел данных вызова API.

Чтобы создать записи хранения, используйте следующую cURL команду:

cURL --request PUT \
  --url 'https://<DNS>/api/storage/v2/records' \
  --header 'Accept: application/json' \
  --header 'Authorization: Bearer {{access_token}}' \
  --header 'data-partition-id: {{DATA_PARTITION_ID}}' \
  --data '[
    { 
        "data": {
            --put your data here
        },
        "meta": [],
        "kind": "osdu:wks:work-product--WorkProduct:1.0.0",
        "id": "{{work-product-id}}",
        "acl": {
            "owners": [
                "data.default.owners@{{DATA_PARTITION_ID}}{{domain}}"
            ],
            "viewers": [
                "data.default.viewers@{{DATA_PARTITION_ID}}{{domain}}"
            ]
        },
        "legal": {
            "legaltags": [
                "{{vds_legal_tag_id}}"
            ],
            "otherRelevantDataCountries": [
                "NO"
            ],
            "status": "compliant"
        }
    },
    
    
]'
       

Пример ответа:

{
  "status": "Created"
}

Запуск конвертера

  1. Активируйте DAG преобразования ZGY, чтобы преобразовать данные с помощью значений контекста выполнения, сохраненных на предыдущем шаге.

    Извлеките маркер идентификатора из sdutil для отправленного файла или используйте маркер доступа или носителя.

    python sdutil auth idtoken
    

    Чтобы активировать рабочий процесс, используйте следующую cURL команду:

        cURL -X POST "https://<DNS>/api/workflow/v1/workflow/<segy-to-zgy-conversion dag id>" \
            -H "Authorization: Bearer <access_token>" \
            -H "Content-Type: application/json" \
            -d '{
                "executionContext": {
                    "data_partition_id": "{{DATA_PARTITION_ID}}",
                    "sd_svc_api_key": "no",
                    "storage_svc_api_key": "no",
                    "filecollection_segy_id": "{{DATA_PARTITION_ID}}:dataset--FileCollection.SEGY:e4a9fc6241610b3a0327f7ace99b9c6f",
                    "work_product_id":"{{DATA_PARTITION_ID}}:work-product--WorkProduct:819c76be31892652773f5dacd642b0e8",
                    "id_token": "{{access_token}}"
                }
    
        }'
    

    Пример ответа:

    {
    "runId": "workflow-12345",
    "status": "Running",
    "message": "Workflow triggered successfully."
    }
    
  2. Пусть DAG запускается в succeeded состояние. Вы можете проверить состояние с помощью вызова состояния рабочего процесса. Идентификатор выполнения находится в ответе предыдущего вызова.

    Используйте следующую команду cURL:

    cURL -X GET "https://<DNS>/api/workflow/v1/workflow/segy-to-vds-conversion/<vds_run_id>" \
        -H "Authorization: Bearer <access_token>" \
        -H "Content-Type: application/json"
    

    Пример ответа:

    {
    "runId": "workflow-12345",
    "status": "Completed",
    "message": "Workflow completed successfully."
    }
    
  3. Чтобы проверить преобразование файлов, используйте следующую cURL команду:

    cURL --request GET \
    --url 'http://{{seismic_ddms_host}}/utility/ls?sdpath=sd://{{tenant}}/{{vdsTestSubprojectName}}' \
    --header 'Authorization: Bearer {{access_token}}'
    
    

    Пример ответа:

    {
    List of datasets
    }
    
  4. Можно увидеть, присутствует ли преобразованный файл с помощью следующей команды в sdutil.

    python sdutil ls sd://<data-partition-id>/<subprojectname>
    
  5. Вы можете скачать и проверить файл с помощью команды sdutilcp:

    python sdutil cp sd://<data-partition-id>/<subproject>/<filename.zgy> <local/destination/path>
    

OSDU® — это товарный знак Open Group.

Следующие шаги