Pysam BAM操作

SAM/BAM/CRAM files

class pysam.AlignmentFile

AlignmentFile(filepath_or_object, mode=None, template=None, \\
reference_names=None, reference_lengths=None, text=NULL, header=None, \\
add_sq_text=False, check_header=True, check_sq=True, reference_filename=None, \\
filename=None, index_filename=None, filepath_index=None, require_index=False, \\
duplicate_filehandle=True, ignore_truncation=False, threads=1)

filepath_or_object 既可以是 文件路径,也可以是文件对象;

如果输入的文件没有 index 将无法使用 fetch()pileup()

如果是写文件:

  • 给了 template ,header 拷贝来源的 AlignmentFile (template 必须是 AlignmentFile).
  • 若给了 header , header 就有这个多层字典构建

默认'r' mode 下,会检查头文件(check_header = True)和染色体名称的定义(check_sq = True).

参数:

  • mode (string)-

    'r' 表示 reading、'w' 表示 writing。对于二进制的BAM文件要添加'b',合法的值一般为'r','w','rb','wb'。例如:

    f = pysam.AlignmentFile('ex1.bam','rb')
    
    
  • template (AlignmentFile) - writing 时从 template 拷贝 header信息

  • threads (integer) - 压缩或解压BAM文件的线程数,默认为1

check_index(self)

存在 index时会返回 True

Raise:

  • AttributeError - 是SAM文件,没有index
  • ValueError - 文件无法打开或index 无法打开

close(self)

关闭 pysam.AlignmentFile .

count(self, contig=None, start=None, stop=None, region=None, until_eof=False, read_callback='nofilter', reference=None, end=None)

计算给定区间内的reads 数量

这个区间通过 contig 、start、stop 进行描述,也支持 samtools regin 格式的描述(‘chr1:10000:20000’)

不支持SAM格式的文件

Parameters:

  • contig (string) – 染色体号
  • start (int) – 起始位点 (0-based inclusive)
  • stop (int) – 结束位点 (0-based exclusive)
  • region (string) – samtools regin 格式的描述

Raises: ValueError — 基因组的坐标超过范围或无效的

count_coverage(self, contig, start=None, stop=None, region=None, quality_threshold=15, read_callback='all', reference=None, end=None)

计算reads在这个基因区间的覆盖度,结果是 four array.arrays of the same length in order A C G T

参数:

  • contig (string) – 染色体号

  • start (int) – 起始位点 (0-based inclusive)

  • stop (int) – 结束位点 (0-based exclusive)

  • quality_threshold (int) – 最低的质量值

  • read_callback (string or function) – 选择一个 call-back 用于过滤reads

    all

    跳过flag:BAM_FUNMAP, BAM_FSECONDARY, BAM_FQCFAIL, BAM_FDUP 的reads

    nofilter

    不进行过滤

    此外,可以自行创建一个check_read(read) 的模块,对想要计算的read 返回 True 即可。

Raises: ValueError – if the genomic coordinates are out of range or invalid.

Returns: four array.arrays of the same length in order A C G T

Return type: tuple

例子:

pysam01.png

fetch(self, contig=None, start=None, stop=None, region=None, tid=None, until_eof=False, multiple_iterators=False, reference=None, end=None)

获取指定区域内的reads, 返回一个 AlignedSegment 对象 的 iteration

不指定 contig 或 region 就会获取文件中所有的reads,reads的顺序按参考序列排序,不一定和文件中的顺序相同。 如果没有index,则 until_eof = True

如果只设定了 contig ,则整个contig中的reads都会获取

不支持 SAM文件

参数

  • until_eof (bool) – 设定为True 时,reads返回顺序和文件中的一致,同时也会返回unmapped的reads
  • multiple_iterators (bool) – 设定为True时, 同时可以使用多个iterator,但是会增加开销

Return type: An iterator over a collection of reads.

例子:

pysam05.png

find_introns(self, read_iterator)

返回一个字典 {(start, stop): count} ,列出reads中的 intronic sites( 通过ciger值中的'N'来辨认 ),支持度是reads的数量 。

read_iterator 可以是 fetch(…) 的结果,也可以是对这些reads再进行过滤的生成器。

Ex. samfile.find_introns((read for read in samfile.fetch(…) if read.is_reverse))

get_index_statistics(self)

返回每个染色体 mapped/unmapped reads 的统计。

Returns: list – ‘mapped’, ‘unmapped’ and ‘total’.

Return type: a list of records for each chromosome. Each record has the attributes ‘contig’,

例子:

pysam03.png

head(self, n, multiple_iterators=True)

返回包含文件前几行的 iterator

参数:

  • multiple_iterators (bool) – is set to True by default in order to avoid changing the current file position.

Return type: an iterator over a collection of reads

例子:

pysam04.png

mate(self, AlignedSegment read)

返回 AlignedSegment 的配对

会改变文件指针位置,会干扰不是re-opened 文件的 iterators

大量处理时会很慢,推荐使用readname sorted BAM

Raises: ValueError – if the read is unpaired or the mate is unmapped

例子:

pysam06.png

pileup(*self, contig=None, start=None, stop=None, region=None, reference=None, end=None, *kwargs)

pileup()方法可以获得特定区域的每个碱基;每次迭代会生成一个PileupColumn对象。该对象包含了覆盖到该位点的所有reads,这些reads 在 PileupColumn.pileups中被记录为 PileupRead对象

若没有指定 contig 和 region 则用所有reads 进行pileup。

不支持SAM文件

覆盖指定区域的所有reads都会返回;返回的第一个碱基,是第一条read的第一个碱基所以不一定是 query region的第一个碱基

参数:

  • truncate (bool) – 默认情况下会返回覆盖区间内所有的reads ,但是truncate 设定为True 则,仅返回query 区间内的碱基

  • max_depth(int) - 允许的最大 read 深度,默认是 8000

  • stepper(string) - 控制iterator 如何前进,可选的参数为:

    all : 跳过 flag为BAM_FUNMAP, BAM_FSECONDARY, BAM_FQCFAIL, BAM_FDUP 的reads

    **nofilter** : 不过滤

    samtools: 与csamtoos pileup 相同的过滤过程,为了完全兼容需要 fastafile ,下面的选项后这个过滤有关。

  • fastafile (FastaFile object.) - 对于某些steppers 必须

  • ignore_overlaps (bool) – 设定为True 时,若 read pairs 有 overlap ,仅取高质量的碱基,这是默认的

  • flag_filter (int) – 过滤 BAM_FUNMAP | BAM_FSECONDARY | BAM_FQCFAIL | BAM_FDUP (应该是根据二进制flag值进行识别)

  • flag_require (int) – 只保留给定flag值得reads ,默认 0

  • ignore_orphans (bool) – 默认开启,过滤paired reads that are not in a proper pair

  • min_base_quality (int) – Minimum base quality. Bases below the minimum quality will not be output.

  • adjust_capq_threshold (int) – 调整mapping quality, 默认0 不调整,推荐的值是 50

  • min_mapping_quality (int) – only use reads above a minimum mapping quality. The default is 0.

  • compute_baq (bool) – re-alignment 计算 per-Base Alignment Qualities (BAQ). 默认会做re-alignment。 需要reference sequence, 如果没有,就不做了

  • redo_baq (bool) – 重新计算 BAQ ,默认不做

Return type: an iterator over genomic positions.



pysam07.png

class pysam.AlignedSegment(AlignmentHeader header=None)**

表示 SAM 或 BAM文件中的一个 aligned segment

cigarstring

得到这条read 的cigar值,string 格式

cigartuples

得到tuples 形式的cigar值

pysam09.png

get_blocks(self)

没有间隔的区间,比对结果的起始、终止位点的列表,若两个块之间有插入,则会相邻。

pysam08.png

flag

得到 flag 值

get_forward_sequence(self)

获得reads的序列。如果是mapping到反链,得到是反向互补的序列,

get_forward_qualities(self)

同上,得到的是质量值,结果是 arrary

pysam10.png

get_overlap(self, uint32_t start, uint32_t end)

得到read 在指定区间内的碱基覆盖数量

get_reference_positions(self, full_length=False)

得到read 每个碱基比对到参考基因组的位置,当full_length=True 时,会显示soft-clip的位置None

get_reference_sequence(self)

得到read 比对到参考基因位置的,参考基因碱基序列

pysam11.png

get_tags(self, with_value_type=False)

has_tag(self, tag)

获取optional aligment section

pysam12.png

infer_query_length(self, always=False)

infer_read_length(self)

根据CIGAR 值推导 query length 和 read length,但是不包含 hard-clipped bases

pysam13.png

一些reads 属性 (只记录了部分)

pysam14.png

class pysam.PileupColumn

A pileup of reads at a particular reference sequence position (column). A pileup column contains all the reads that map to a certain target base.

覆盖到指定区域的reads 集合。所以返回的第一个值不一定是指定的区间最左侧,而是能覆盖到指定区间最左侧的reads,最靠左的碱基。

pysam15.png

class pysam.PileupRead

alignment

返回 pysam.AlignedSegment object

indel

indel length for the position following the current pileup site.

接下来是ins 则为正数,del 则为 负数,不是indel 是 0

其它

  • is_del
  • is_head
  • is _refskip
  • is_tail
  • query_position : position of the read base at the pileup site, 0-based. None if is_del or is_refskip is set.
  • query_position_or_next: position of the read base at the pileup site, 0-based. If the current position is a deletion, returns the next aligned base.
pysam16.png
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342