htsjdk库Genotype及相关类介绍
在 HTSJDK 库中,处理基因型的主要类包括 Genotype、FastGenotype、GenotypeBuilder 以及相关的类和接口。以下是这些类和接口的详细介绍:
Genotype 类
主要功能
- 表示基因型:
Genotype类用于表示个体在特定变异位置上的基因型。基因型是对个体在变异位置上的等位基因组合的描述。 - 包含样本信息:它包括与样本相关的基因型信息,例如基因型的等位基因、深度、质量等。
源码:
/*
* Copyright (c) 2012 The Broad Institute
*
* Permission is hereby granted, free of charge, to any person
* obtaining a copy of this software and associated documentation
* files (the "Software"), to deal in the Software without
* restriction, including without limitation the rights to use,
* copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following
* conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
* THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/package htsjdk.variant.variantcontext;import htsjdk.tribble.util.ParsingUtils;
import htsjdk.variant.vcf.VCFConstants;
import htsjdk.variant.vcf.VCFUtils;import java.io.Serializable;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.TreeSet;/*** This class encompasses all the basic information about a genotype. It is immutable.** @author Mark DePristo*/
public abstract class Genotype implements Comparable<Genotype>, Serializable {public static final long serialVersionUID = 1L;/*** A list of genotype field keys corresponding to values we* manage inline in the Genotype object. They must not appear in the* extended attributes map*/public final static Collection<String> PRIMARY_KEYS = Arrays.asList(VCFConstants.GENOTYPE_FILTER_KEY,VCFConstants.GENOTYPE_KEY,VCFConstants.GENOTYPE_QUALITY_KEY,VCFConstants.DEPTH_KEY,VCFConstants.GENOTYPE_ALLELE_DEPTHS,VCFConstants.GENOTYPE_PL_KEY);public final static String PHASED_ALLELE_SEPARATOR = "|";public final static String UNPHASED_ALLELE_SEPARATOR = "/";private final String sampleName;private GenotypeType type = null;private final String filters;protected Genotype(final String sampleName, final String filters) {this.sampleName = sampleName;this.filters = filters == null || filters.isEmpty() ? null : filters;}/*** @return the alleles for this genotype. Cannot be null. May be empty*/public abstract List<Allele> getAlleles();/*** @return true if any allele is REF*/public boolean hasRefAllele() {return getAlleles().stream().anyMatch(A->A.isReference());};/*** @return true if any allele is ALT, (NO_CALL are ignored)*/public boolean hasAltAllele() {return getAlleles().stream().anyMatch(A->!(A.isReference() || A.isNoCall()));};/*** Returns how many times allele appears in this genotype object?** @param allele* @return a value >= 0 indicating how many times the allele occurred in this sample's genotype*/public int countAllele(final Allele allele) {int c = 0;for ( final Allele a : getAlleles() )if ( a.equals(allele) )c++;return c;}/*** Get the ith allele in this genotype** @param i the ith allele, must be < the ploidy, starting with 0* @return the allele at position i, which cannot be null*/public abstract Allele getAllele(int i);/*** Are the alleles phased w.r.t. the global phasing system?** @return true if yes*/public abstract boolean isPhased();/*** What is the ploidy of this sample?** @return the ploidy of this genotype. 0 if the site is no-called.*/public int getPloidy() {return getAlleles().size();}/*** @return the sequencing depth of this sample, or -1 if this value is missing*/public abstract int getDP();/*** @return the count of reads, one for each allele in the surrounding Variant context,* matching the corresponding allele, or null if this value is missing. MUST* NOT BE MODIFIED!*/public abstract int[] getAD();/*** Returns the name associated with this sample.** @return a non-null String*/public String getSampleName() {return sampleName;}/*** Returns a phred-scaled quality score, or -1 if none is available* @return*/public abstract int getGQ();/*** Does the PL field have a value?* @return true if there's a PL field value*/public boolean hasPL() {return getPL() != null;}/*** Does the AD field have a value?* @return true if there's a AD field value*/public boolean hasAD() {return getAD() != null;}/*** Does the GQ field have a value?* @return true if there's a GQ field value*/public boolean hasGQ() {return getGQ() != -1;}/*** Does the DP field have a value?* @return true if there's a DP field value*/public boolean hasDP() {return getDP() != -1;}// ---------------------------------------------------------------------------------------------------------//// The type of this genotype//// ---------------------------------------------------------------------------------------------------------/*** @return the high-level type of this sample's genotype*/public GenotypeType getType() {if ( type == null ) {type = determineType();}return type;}/*** Internal code to determine the type of the genotype from the alleles vector* @return the type*/protected GenotypeType determineType() {// TODO -- this code is slow and could be optimized for the diploid casefinal List<Allele> alleles = getAlleles();if ( alleles.isEmpty() ) {return GenotypeType.UNAVAILABLE;}boolean sawNoCall = false, sawMultipleAlleles = false;Allele firstCallAllele = null;for ( int i = 0; i < alleles.size(); i++ ) {final Allele allele = alleles.get(i);if ( allele.isNoCall() ) {sawNoCall = true;} else if ( firstCallAllele == null ) {firstCallAllele = allele;} else if ( !allele.equals(firstCallAllele) )sawMultipleAlleles = true;}if ( sawNoCall ) {if ( firstCallAllele == null )return GenotypeType.NO_CALL;return GenotypeType.MIXED;}if ( firstCallAllele == null )throw new IllegalStateException("BUG: there are no alleles present in this genotype but the alleles list is not null");return sawMultipleAlleles ? GenotypeType.HET : firstCallAllele.isReference() ? GenotypeType.HOM_REF : GenotypeType.HOM_VAR;}/*** @return true if all observed alleles are the same (regardless of whether they are ref or alt); if any alleles are no-calls, this method will return false.*/public boolean isHom() { return isHomRef() || isHomVar(); }/*** @return true if all observed alleles are ref; if any alleles are no-calls, this method will return false.*/public boolean isHomRef() { return getType() == GenotypeType.HOM_REF; }/*** @return true if all observed alleles are alt; if any alleles are no-calls, this method will return false.*/public boolean isHomVar() { return getType() == GenotypeType.HOM_VAR; }/*** @return true if we're het (observed alleles differ); if the ploidy is less than 2 or if any alleles are no-calls, this method will return false.*/public boolean isHet() { return getType() == GenotypeType.HET; }/*** @return true if we're het (observed alleles differ) and neither allele is reference; if the ploidy is less than 2 or if any alleles are no-calls, this method will return false.*/public boolean isHetNonRef() { return (getType() == GenotypeType.HET && getAllele(0).isNonReference() && getAllele(1).isNonReference()); }/*** @return true if this genotype is not actually a genotype but a "no call" (e.g相关文章:
htsjdk库Genotype及相关类介绍
在 HTSJDK 库中,处理基因型的主要类包括 Genotype、FastGenotype、GenotypeBuilder 以及相关的类和接口。以下是这些类和接口的详细介绍: Genotype 类 主要功能 表示基因型:Genotype 类用于表示个体在特定变异位置上的基因型。基因型是对个体在变异位置上的等位基因组合的…...
C++ 最短路(spfa) 洛谷
拉近距离 题目背景 我是源点,你是终点。我们之间有负权环。 ——小明 题目描述 在小明和小红的生活中,有 N 个关键的节点。有 M 个事件,记为一个三元组 (Si,Ti,Wi),表示从节点 Si 有一个事件可以转移到 Ti,事件…...
MySQL的数据类型
文章目录 数据类型分类整型bit类型浮点类型字符串类型charvarchar 日期和时间类型enum和set find_ in_ set 数据类型分类 整型 在MySQL中,整型可以指定是有符号的和无符号的,默认是有符号的。 可以通过UNSIGNED来说明某个字段是无符号的。 在MySQL中如…...
xss漏洞(四,xss常见类型)
本文仅作为学习参考使用,本文作者对任何使用本文进行渗透攻击破坏不负任何责任。 前言: 1,本文基于dvwa靶场以及PHP study进行操作,靶场具体搭建参考上一篇: xss漏洞(二,xss靶场搭建以及简单…...
繁简之争:为什么手机芯片都是 ARM
RISC 和 CISC 指令集 之前的文章《揭秘 CPU 是如何执行计算机指令的》中说到,如果从软件的角度来讲,CPU 就是一个执行各种计算机指令(Instruction Code)的逻辑机器。 计算机指令集是计算机指令的集合,包括各种类型的…...
【nnUNetv2进阶】十九、nnUNetv2 使用ResidualEncoder训练模型
nnunet使用及改进教程。 【nnUNetv2实践】一、nnUNetv2安装 【nnUNetv2实践】二、nnUNetv2快速入门-训练验证推理集成一条龙教程 【nnUNetv2进阶】三、nnUNetv2 自定义网络-发paper必会-CSDN博客 其他网络改进参考: 【nnUNetv2进阶】四、nnUNetv2 魔改网络-小试牛刀-加入…...
Unity3D ShaderGraph 场景扫描光效果实现详解
引言 在Unity3D游戏开发中,创建吸引人的视觉效果是提升游戏沉浸感的关键之一。场景扫描光效果,作为一种动态且富有表现力的视觉元素,能够为游戏场景增添不少亮点。通过Unity的ShaderGraph工具,我们可以轻松地实现这种效果&#x…...
JS中运算符优先级
优先级顺序从高到低为: 括号 ()成员访问 . 和 函数调用 ()一元运算符 !、、-、~乘法 *、除法 /、取余 %加法 、减法 -位移运算符 <<、>>、>>>比较运算符 <、<、>、>等于 、不等于 !、严格等于 、严格不等于 !位与 &位异或 ^位…...
分享6款有助于写论文能用到的软件app!
在学术写作中,选择合适的软件和工具可以大大提高效率和质量。以下是六款有助于写论文的软件app推荐,其中特别重点介绍千笔-AIPassPaPer这款AI原创论文写作平台。 1. 千笔-AIPassPaPer 千笔-AIPassPaPer是一款功能全面且高效的AI原创论文写作平台。它能…...
Python图形验证码的识别:一步步详解
在Web开发和自动化测试中,图形验证码的识别是一项常见且重要的任务。图形验证码作为防止自动化攻击的一种手段,通过随机生成包含字符或数字的图片来增加用户验证的难度。然而,对于需要自动化处理的场景,如Web自动化测试或爬虫&…...
Jenkins未授权访问漏洞
Jenkins未授权访问漏洞 默认情况下 Jenkins面板中用户可以选择执行脚本界面来操作一些系统层命令,攻击者可通过未授权访问漏洞或者暴力破解用户密码等进入后台管理服务,通过脚本执行界面从而获取服务器权限。 一、使用以下fofa语法进行产品搜索 port&…...
什么情况下跑代码内存才会爆
内存爆掉(即内存溢出)通常是由于代码在处理数据或计算时消耗了过多的内存资源,导致系统内存不足。以下是一些常见场景和代码示例,可能会导致内存爆掉: 1. 超大数据集加载: 加载非常大的数据集到内存中(特…...
基于arcpro3.0.2运行报错问题:不能加载文件System.Text.Encoding.CodePages, Version=8.0.0.0
基于arcpro3.0.2运行报错问题:不能加载文件System.Text.Encoding.CodePages, Version8.0.0.0 报错问题描述: 基于arcpro3.0.2运行报错问题: Could not load file or assembly System.Text.Encoding.CodePages, Version8.0.0.0 解决办法: 重新拷贝打包生…...
elk+filebeat+kafka集群部署
实验框架图 192.168.124.10 es1 192.168.124.20 es2 192.168.124.30 losgtash kibana 192.168.124.50 MySQL nginx httpd 上一篇做完es1和es2以及192.168.124.30的部署 在192.168.124.50做配置部署 开启MySQL、nginx、http 因为nginx和http默认端口为80࿰…...
C++生化危机1.5源码
代码特别长,如若报错,请把1e9改成1000000000。 //1.5.12 #include <conio.h> #include <string.h> #include <stdio.h> #include <stdlib.h> #include <windows.h> #include <time.h> #include <direct.h> i…...
RMAN-06618不同版本之间RMAN无法连接
RMAN Active Duplicate Between Two Oracle Versions (Doc ID 2346507.1)编辑To Bottom In this Document Goal Solution References APPLIES TO: Oracle Database Cloud Schema Service - Version N/A and later Oracle Database Exadata Cloud Machine - Version N/A and…...
鸿蒙HarmonyOS开发:多种内置弹窗及自定义弹窗的详细使用指南
文章目录 一、消息提示框(showToast)1、导入模块2、语法3、参数4、示例5、效果 二、对话框(showDialog)1、导入模块2、语法3、参数4、示例5、效果 三、警告弹窗(AlertDialog)1、语法2、参数3、AlertDialogP…...
Python文件
一、文件的基本概念 1.1 文件类型 文件类型主要分为文本文件和二进制文件。文本文件是由一组特定编码的字符构成的文件,可以由某种文本编辑器对内容进行识别、处理、修改等操作。二进制文件由二进制数“0”和“1”构成,没有统一的字符编码,…...
超越标注:合成数据引领下的文本嵌入技术革新
论文:https://arxiv.org/pdf/2401.00368代码:https://github.com/microsoft/unilm/tree/master/e5机构:微软领域:嵌入模型发表:BAAI 2024这篇论文的标题是《Improving Text Embeddings with Large Language Models》,由微软公司的Liang Wang, Nan Yang, Xiaolong Huang, …...
IT运维中,如何快速进行故障排查?(以银行APP交易故障为例)
一、事件背景 正值"五一"黄金周旅游高峰期,某城商行的手机APP突然出现大面积交易失败和严重卡顿现象。据初步统计,从上午10点开始APP的交易成功率从正常的99%骤降至75%左右,用户反馈的交易失败投诉量在短短2小时内激增了500%。与此…...
ESP32-WROOM-32E开发板快速上手:5分钟搞定Arduino环境配置与LED灯控制
ESP32-WROOM-32E开发板极速入门:5分钟玩转LED控制 刚拿到ESP32-WROOM-32E开发板时,最让人兴奋的莫过于立刻让它"活"起来。作为乐鑫推出的明星级物联网开发板,它集Wi-Fi/蓝牙双模、丰富外设接口和超低功耗于一身,而Ardui…...
QML与QWidget混合开发:实现高效UI集成的实战指南
1. 为什么需要QML与QWidget混合开发 在Qt开发中,QML和QWidget是两种完全不同的UI构建方式。QML凭借其声明式语法和强大的动画效果,在现代UI开发中越来越受欢迎。但现实情况是,很多成熟的功能模块都是基于QWidget开发的,比如一些第…...
基于TINA的英飞凌功率MOSFET SPICE瞬态仿真与损耗优化实战
1. 功率MOSFET仿真基础与TINA软件入门 电力电子工程师在设计电源系统时,最头疼的问题之一就是如何准确预测功率MOSFET的损耗。我刚开始接触这个领域时,曾经因为低估了开关损耗导致整个电源模块过热报废,损失惨重。后来发现,TINA-T…...
ZeroOmega:下一代浏览器代理管理的架构革命
ZeroOmega:下一代浏览器代理管理的架构革命 【免费下载链接】ZeroOmega Manage and switch between multiple proxies quickly & easily. 项目地址: https://gitcode.com/gh_mirrors/ze/ZeroOmega 在当今复杂的网络环境中,代理管理已成为开发…...
SpringAI实践(07) - 本地向量嵌入模型集成指南
SpringAI实践(07) - 本地向量嵌入模型集成指南 1.概述 本文档详细说明如何在 SpringBoot 应用中集成本地部署的 ONNX 格式向量嵌入模型(如 bge-small-zh),通过 spring-ai-starter-model-transformers 模块调用 ONNX …...
告别视图切换混乱:用快马平台和cc-switch提升前端开发效率
告别视图切换混乱:用快马平台和cc-switch提升前端开发效率 最近在开发一个需要多工作模式切换的项目时,遇到了视图管理混乱的问题。不同模式下的UI组件互相干扰,状态管理变得异常复杂。经过一番摸索,我发现cc-switch这个方案能很…...
3大维度解析开源下载工具:如何让网盘效率提升80%
3大维度解析开源下载工具:如何让网盘效率提升80% 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼云盘 …...
新手必看:Sambert多情感语音合成镜像部署与使用全攻略
新手必看:Sambert多情感语音合成镜像部署与使用全攻略 1. 引言:为什么选择这个语音合成镜像 语音合成技术正在改变我们与数字世界的互动方式。想象一下,你的智能助手不仅能说话,还能根据场景切换不同的情感和音色——这正是Samb…...
5分钟快速掌握Bypass Paywalls Clean:终极内容解锁工具完整指南
5分钟快速掌握Bypass Paywalls Clean:终极内容解锁工具完整指南 【免费下载链接】bypass-paywalls-chrome-clean 项目地址: https://gitcode.com/GitHub_Trending/by/bypass-paywalls-chrome-clean 你是否经常遇到想阅读优质文章却被付费墙阻挡的烦恼&#…...
基于FireRedASR-AED-L与AIGC技术:自动生成语音错误分析报告
基于FireRedASR-AED-L与AIGC技术:自动生成语音错误分析报告 想象一下这个场景:你的团队刚刚完成了一轮大规模的语音识别系统测试,收集了上千小时的音频数据。接下来,你需要从海量的识别结果中,找出哪些词识别错了&…...
