跳转到主要内容

Phenopacket Schema

项目描述

Phenopacket模式

Build Status Maven Central Documentation Status

这是作为GA4GH 临床表型数据捕获工作流的一部分产生的,它将现有的GA4GH元数据模式工作与来自phenopacket-reference-implementation的更专注的模型合并。

这是对原始phenopacket的重新定义版本,采用更以个人为中心的方法。采取这种新方法是为了简化表示和处理数据所需的代码,并且更好地表示这种在日常生活中使用的此类数据。

文档

核心文档可以在文档中找到

此README中的文档主要是为phenopacket-schema java库的用户编写的。

范围和目的

phenopacket-schema 的目标是在罕见病或癌症基因组诊断的背景下定义患者/样本的表型描述。它旨在提供足够且可共享的信息,以便临床医生或临床遗传学家能够在护理点捕获足够的数据结构,以便与其他实验室共享或在临床或研究环境中对数据进行计算分析,而无需在 EHR(电子健康记录)之外的数据。

该模式旨在定义一组共同、有限的数据类型,这些类型可以组成更专业的类型,以便使用共同的模式(如 base.proto 中定义)在资源之间进行数据共享。

此通用模式已用于定义“Phenopacket”,这是一个数据类型的汇总集合,专门用于表示罕见病或癌症样本,旨在进行初始数据捕获和分析。Phenopacket 设计为既适合人类阅读也适合机器阅读,并且可以与 HL7 快速医疗互操作性资源规范(即 FHIR®)互操作。

版本控制

该库使用语义版本控制。有关详细信息,请参阅 https://semver.org

邮件列表

有关 Phenopackets 的公告的低量邮件列表位于 phenopackets@groups.io。有关此列表的更多信息可在 https://groups.io/g/phenopackets 找到。

用法

Phenopacket 模式使用 Protobuf 定义,它是一种“一种语言中性、平台中性、可扩展的序列化结构化数据机制”。有两种使用此库的方法,首先是将 Phenopacket 用作交换机制,其次是将它作为构建更专业消息的基本类型模式,同时允许与其他使用 Phenopackets 模式的资源轻松互操作。以下各节将描述如何实现这两件事。

将 phenopackets 包含到您的项目中

Java 开发者可以通过使用 Maven 导入 jar 将 phenopackets 纳入其代码中

<dependency>
    <groupId>org.phenopackets</groupId>
    <artifactId>phenopacket-schema</artifactId>
    <version>${phenopacket-schema.version}</version>
</dependency>

Python 中使用 phenopackets 也同样简单

pip install phenopackets

直接交换 Phenopackets

如何使用这些的示例可以在测试目录中找到。phenopacket 中的字段之间(除了家系之外)没有定义显式关系,因此交换 phenopackets 的资源必须同意哪些是有效的,以及字段与 phenopacket 中其他字段的关系意味着什么。例如,Phenopacket.genes 字段可能被同意代表一个基因面板的基因,或者一组候选基因,或者可能是诊断的致病基因。

JSON/YAML 格式

可以使用来自 protobuf-java-util 库的 JsonFormat 类将 Phenopacket 之间在原生二进制格式和 JSON 之间转换。这也需要添加到您的 pom.xml 中

<dependency>
    <groupId>com.google.protobuf</groupId>
    <artifactId>protobuf-java-util</artifactId>
    <version>${protobuf.version}</version>
</dependency>
pip install protobuf

protobuf-java-util 为 Java 和 protobuf 为 Python 包含执行这些转换的简单实用方法。使用示例在此处展示

// Transform a Phenopacket into JSON
Phenopacket original = TestExamples.rareDiseasePhenopacket();

String asJson = JsonFormat.printer().print(original);
System.out.println(asJson);

// Convert the JSON back to a Phenopacket
Phenopacket.Builder phenoPacketBuilder = Phenopacket.newBuilder();
JsonFormat.parser().merge(jsonString, phenoPacketBuilder);
Phenopacket fromJson = phenoPacketBuilder.build();

// Convert the JSON into YAML (using Jackson)
JsonNode jsonNodeTree = new ObjectMapper().readTree(jsonString);
String yamlPhenopacket = new YAMLMapper().writeValueAsString(jsonNodeTree);

// Convert the YAML back into JSON (using Jackson)
JsonNode jsonNodeTree = new YAMLMapper().readTree(yamlString);
String jsonPhenopacket = new ObjectMapper().writeValueAsString(jsonNodeTree);

// And finally back into a Java object
Phenopacket.Builder phenoPacketBuilder2 = Phenopacket.newBuilder();
JsonFormat.parser().merge(jsonPhenopacket, phenoPacketBuilder2);
Phenopacket fromJson2 = phenoPacketBuilder2.build();
from google.protobuf.json_format import Parse, MessageToJson
from google.protobuf.timestamp_pb2 import Timestamp
from phenopackets import Phenopacket, Individual, PhenotypicFeature, OntologyClass

# Parsing phenopackets from json
with open('file.json', 'r') as jsfile:
    phenopacket = Parse(message=Phenopacket(), text=jsfile.read())

# Writing phenopackets to json
with open('file.json', 'w') as jsfile:
    subject = Individual(id="Zaphod", sex="MALE", date_of_birth=Timestamp(seconds=-123456798))
    phenotypic_features = [PhenotypicFeature(type=OntologyClass(id="HG2G:00001", label="Hoopy")),
                           PhenotypicFeature(type=OntologyClass(id="HG2G:00002", label="Frood"))]

    phenopacket = Phenopacket(id="PPKT:1", subject=subject, phenotypic_features=phenotypic_features)

    json = MessageToJson(phenopacket)
    jsfile.write(json)

从模式构建新消息

mme.proto 文件中包含了如何执行此操作的示例。在此处,Matchmaker Exchange (MME) API 已使用 phenopackets 模式实现,根据需要定义了自定义消息,但在适用的情况下重新使用了来自 base.proto 的消息。使用上述示例,也许 Phenopacket.genes 是一个问题,因为您不仅想记录已订购的基因面板,还想在两个单独的字段中记录发现的候选基因。在这种情况下,可以创建一个全新的定制消息,使用 Gene 作为构建块。

Git 子模块

此仓库使用 git 子模块 导入 VRS protobuf 实现。在克隆/更新后,您可能需要使用以下命令才能正确构建

$ git submodule update --init --recursive

构建

可以使用酷炫的 Takari maven wrapper 构建项目,无需本地安装 Maven。构建的唯一要求是拥有一个正常工作的 Java 安装和网络访问。

要执行此操作,请在项目根目录下运行包装脚本

$ ./mvnw clean install

$ ./mvnw.cmd clean install

为发布签名工件

有一个针对 Javarelease-sign-artifacts 配置文件,可以通过以下命令触发

$ ./mvnw clean install -DperformRelease=true

运行以下命令以发布 Python 工件

测试

$ bash deploy-python.sh release-test

生产

$ bash deploy-python.sh release-prod

Java、Python 和 C++ 工件

构建项目将自动编译 Java、Python 和 C++ 工件。Java jar 文件可以直接用于任何 Java 项目。对于 Python 或 C++,构建工件可以在以下位置找到

target/generated-sources/protobuf/python

target/generated-sources/protobuf/cpp

其他语言需要将 src/main/proto 中的文件编译成它们期望的语言。protobuf 开发者网站提供了如何进行此操作的示例,例如 GOC#。Protobuf 还支持许多其他语言。

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源分布

phenopackets-2.0.2.post4.tar.gz (38.3 kB 查看散列)

上传时间

构建分布

phenopackets-2.0.2.post4-py3-none-any.whl (53.0 kB 查看散列)

上传时间 Python 3

由以下机构支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面