htsjdk库SAMProgramRecord类介绍

SAMProgramRecord 是 htsjdk 库中的一个类,用于处理 SAM/BAM 文件中的程序记录。htsjdk 是一个用于处理高通量测序数据的 Java 库,其中 SAM/BAM 文件格式是存储序列比对数据的标准格式。

SAMProgramRecord 类用于描述程序的元数据,这些数据通常在 SAM/BAM 文件的头部部分(SAMFileHeader)中记录。程序记录包含以下主要信息:

  1. ID: 程序的唯一标识符。
  2. Name: 程序的名称。
  3. Version: 程序的版本号。
  4. Command Line: 执行程序时使用的命令行参数。
  5. Description: 程序的简短描述。

这些记录有助于在数据处理和分析过程中追溯使用的工具和版本,确保数据的可重现性和透明度。通过 SAMProgramRecord 类,用户可以读取、修改或创建这些程序记录,以便在处理 SAM/BAM 文件时维护准确的程序信息。

SAMProgramRecord源码:

/*
 * The MIT License
 *
 * Copyright (c) 2009 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.samtools;

import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;

/**
 * In-memory representation of @PG SAM header record.
 */
public class SAMProgramRecord extends AbstractSAMHeaderRecord {
    public static final String PROGRAM_GROUP_ID_TAG = "ID";
    public static final String PROGRAM_NAME_TAG = "PN";
    public static final String PROGRAM_VERSION_TAG = "VN";
    public static final String COMMAND_LINE_TAG = "CL";
    public static final String PREVIOUS_PROGRAM_GROUP_ID_TAG = "PP";
    private String mProgramGroupId;
    public static final Set<String> STANDARD_TAGS = Collections.unmodifiableSet(
            new HashSet<String>(Arrays.asList(PROGRAM_GROUP_ID_TAG,
                    PROGRAM_NAME_TAG,
                    PROGRAM_VERSION_TAG,
                    COMMAND_LINE_TAG,
                    PREVIOUS_PROGRAM_GROUP_ID_TAG)) );

    public SAMProgramRecord(final String programGroupId) {
        this.mProgramGroupId = programGroupId;
    }

    public SAMProgramRecord(final String id, SAMProgramRecord srcProgramRecord) {
        mProgramGroupId = id;
        for (final Map.Entry<String, String> entry : srcProgramRecord.getAttributes()) {
            setAttribute(entry.getKey(), entry.getValue());
        }
    }

    @Override
    public String getId() {
        return getProgramGroupId();
    }

    public String getProgramGroupId() {
        return mProgramGroupId;
    }

    public String getProgramName() {
        return (String)getAttribute(PROGRAM_NAME_TAG);
    }

    public void setProgramName(final String name) {
        setAttribute(PROGRAM_NAME_TAG, name);
    }

    public String getProgramVersion() {
        return (String)getAttribute(PROGRAM_VERSION_TAG);
    }

    public void setProgramVersion(final String version) {
        setAttribute(PROGRAM_VERSION_TAG, version);
    }

    public String getCommandLine() {
        return (String)getAttribute(COMMAND_LINE_TAG);
    }

    public void setCommandLine(final String commandLine) {
        setAttribute(COMMAND_LINE_TAG, commandLine);
    }

    public String getPreviousProgramGroupId() {
        return (String)getAttribute(PREVIOUS_PROGRAM_GROUP_ID_TAG);
    }

    public void setPreviousProgramGroupId(final String id) {
        setAttribute(PREVIOUS_PROGRAM_GROUP_ID_TAG, id);
    }



    /**
     * @return true if this == that except for the program group ID, which is arbitrary
     */
    public boolean equivalent(final SAMProgramRecord that) {
        return attributesEqual(that);
    }

    @Override
    public boolean equals(final Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        final SAMProgramRecord that = (SAMProgramRecord) o;

        if (!attributesEqual(that)) return false;
        if (mProgramGroupId != null ? !mProgramGroupId.equals(that.mProgramGroupId) : that.mProgramGroupId != null) return false;

        return true;
    }

    @Override
    public int hashCode() {
        int result = mProgramGroupId != null ? mProgramGroupId.hashCode() : 0;
        result = 31 * result + attributesHashCode();
        return result;
    }

    @Override
    Set<String> getStandardTags() {
        return STANDARD_TAGS;
    }


    @Override
    public String getSAMString() {
        return new SAMTextHeaderCodec().getPGLine(this);
    }
}

AbstractSAMHeaderRecord源码:

/*
 * The MIT License
 *
 * Copyright (c) 2009 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.samtools;


import java.io.Serializable;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Set;

/**
 * Base class for the various concrete records in a SAM header, providing uniform
 * access to the attributes.
 */

public abstract class AbstractSAMHeaderRecord implements Serializable {
    public static final long serialVersionUID = 1L;

    private final Map<String,String> mAttributes = new LinkedHashMap<String, String>();

    public String getAttribute(final String key) {
        return mAttributes.get(key);
    }

    /**
     * Set the given value for the attribute named 'key'.  Replaces an existing value, if any.
     * If value is null, the attribute is removed.
     * Otherwise, the value will be converted to a String with toString.
     * @param key attribute name
     * @param value attribute value
     * @deprecated Use {@link #setAttribute(String, String) instead
     */
    @Deprecated
    public void setAttribute(final String key, final Object value) {
        setAttribute(key, value == null? null: value.toString());
    }

    /**
     * Set the given value for the SAMTag 'tag'.  Replaces an existing value, if any.
     * If value is null, the attribute is removed.
     * @param tag attribute name
     * @param value attribute value
     */
    public void setAttribute(final SAMTag tag, final String value) {
        setAttribute(tag.name(), value);
    }

    /**
     * Set the given value for the attribute named 'key'.  Replaces an existing value, if any.
     * If value is null, the attribute is removed.
     * @param key attribute name
     * @param value attribute value
     */
    public void setAttribute(final String key, final String value) {
        if (value == null) {
            mAttributes.remove(key);
        } else {
            mAttributes.put(key, value);
        }
    }

    /**
     * Returns the Set of attributes.
     */
    public Set<Map.Entry<String,String>> getAttributes() {
        return mAttributes.entrySet();
    }


    /**
     * Returns the ID tag (or equivalent) for this header record. The
     * default implementation throws a SAMException to indicate "not implemented".
     */
    public String getId() {
        throw new UnsupportedOperationException("Method not implemented for: " + this.getClass());
    }

    /**
     * For use in the equals() method of the concrete class.
     */
    protected boolean attributesEqual(final AbstractSAMHeaderRecord that) {
        return mAttributes.equals(that.mAttributes);
    }

    /**
     * For use in the hashCode() method of the concrete class.
     */
    protected int attributesHashCode() {
        return (mAttributes != null ? mAttributes.hashCode() : 0);
    }

    /**
     * Standard tags are the tags defined in SAM spec.  These do not have type information in the test
     * representation, because the type information is predefined for each tag.
     * @return list of predefined tags for the concrete SAMHeader record type.
     */
    abstract Set<String> getStandardTags();

    /** Simple to String that outputs the concrete class name and the set of attributes stored. */
    @Override public String toString() {
        return getClass().getSimpleName() + this.mAttributes.toString();
    }

    /**
     * Returns the record in the SAM line-based text format.  Fields are
     * separated by '\t' characters. The String is NOT terminated by '\n'.
     */
    abstract public String getSAMString();
}

使用GATK的combinegvcf模块合并gvcf文件,可是到了这一步Using GATK jar /stor9000/apps/users/NWSUAF/2022050434/biosoft/gatk4.3/gatk-4.3.0.0/gatk-package-4.3.0.0-local.jar Running: java -Dsamjdk.use_async_io_read_samtools=false -Dsamjdk.use_async_io_write_samtools=true -Dsamjdk.use_async_io_write_tribble=false -Dsamjdk.compression_level=2 -jar /stor9000/apps/users/NWSUAF/2022050434/biosoft/gatk4.3/gatk-4.3.0.0/gatk-package-4.3.0.0-local.jar CombineGVCFs -R /stor9000/apps/users/NWSUAF/2008115251/genomes/ARS-UCD1.2_Btau5.0.1Y.fa --variant /stor9000/apps/users/NWSUAF/2020055419/home/xncattle/03.GVCF/01_out_GVCF/XN_22/1_XN_22.g.vcf.gz --variant /stor9000/apps/users/NWSUAF/2020055419/home/xncattle/03.GVCF/01_out_GVCF/XN_18/1_XN_18.g.vcf.gz -O /stor9000/apps/users/NWSUAF/2022050469/candy/bwa/gatk/Combine/chr1.g.vcf.gz 09:10:40.524 INFO NativeLibraryLoader - Loading libgkl_compression.so from jar:file:/stor9000/apps/users/NWSUAF/2022050434/biosoft/gatk4.3/gatk-4.3.0.0/gatk-package-4.3.0.0-local.jar!/com/intel/gkl/native/libgkl_compression.so 09:10:50.696 INFO CombineGVCFs - ------------------------------------------------------------ 09:10:50.697 INFO CombineGVCFs - The Genome Analysis Toolkit (GATK) v4.3.0.0 09:10:50.697 INFO CombineGVCFs - For support and documentation go to https://software.broadinstitute.org/gatk/ 09:10:50.698 INFO CombineGVCFs - Executing as 2022050469@node54 on Linux v3.10.0-1127.el7.x86_64 amd64 09:10:50.698 INFO CombineGVCFs - Java runtime: Java HotSpot(TM) 64-Bit Server VM v1.8.0_72-b15 09:10:50.698 INFO CombineGVCFs - Start Date/Time: July 21, 2023 9:10:40 AM CST 09:10:50.698 INFO CombineGVCFs - ------------------------------------------------------------ 09:10:50.698 INFO CombineGVCFs - ------------------------------------------------------------ 09:10:50.698 INFO CombineGVCFs - HTSJDK Version: 3.0.1 09:10:50.699 INFO CombineGVCFs - Picard Version: 2.27.5 09:10:50.699 INFO CombineGVCFs - Built for Spark Version: 2.4.5 09:10:50.699 INFO CombineGVCFs - HTSJDK Defaults.COMPRESSION_LEVEL : 2 09:10:50.699 INFO CombineGVCFs - HTSJDK Defa就停止了,没有输出文件,也没有报错文件
07-22
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值