C++使用htslib库读入和写出bam文件的实例

2025-05-27 0 28

有时候我们需要使用C++处理bam文件,比如取出read1或者read2等符合特定条件的序列,根据cigar值对序列指定位置的碱基进行统计或者对序列进行处理并输出等,这时我们可以使用htslib库。htslib可以用来处理SAM, BAM,CRAM 和VCF文件,是samtools、bcftools的核心库。

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50
#include <stdio.h>

#include <stdlib.h>

#include <htslib/sam.h>

using namespace std;

#define bam_is_read1(b) (((b)->core.flag&BAM_FREAD1) != 0)

uint8_t Base[16] = {0,65,67,0,71,0,0,0,84,0,0,0,0,0,0,78};

int main(int argc, char **argv)

{

bam_hdr_t *header;

bam1_t *aln = bam_init1();

samFile *in = sam_open(argv[1], "r");

htsFile *outR1 = hts_open(argv[2], "wb");

header = sam_hdr_read(in);

if (sam_hdr_write(outR1, header) < 0) {

fprintf(stderr, "Error writing output.\\n");

exit(-1);

}

uint8_t *seq;

int32_t lseq;

uint32_t *cigar;

char* qname;

while (sam_read1(in, header, aln) >= 0) {

if (bam_is_read1(aln)){

sam_write1(outR1, header, aln);

}

else {

seq = bam_get_seq(aln);

lseq = aln->core.l_qseq;

qname = bam_get_qname(aln);

printf("%s\\n",qname);

cigar = bam_get_cigar(aln);

for(int i=0; i < aln->core.n_cigar;++i){

int icigar = cigar[i];

printf("%d%d\\n",bam_cigar_op(icigar),bam_cigar_oplen(icigar));

}

for(int i=0; i < lseq;++i){

printf("%c", Base[bam_seqi(seq, i)]);

}

printf("\\n");

}

}

sam_close(in);

sam_close(outR1);

}

cigar值存储形式

32位int,通过bam_get_cigar获得地址,aln->core.n_cigar返回cigar operation的个数

•低 4位存储cigar operation;通过函数bam_cigar_op()获得operation

C++使用htslib库读入和写出bam文件的实例

•高28位存储cigar值的长度;通过函数,bam_cigar_oplen获得

seq存储形式

8位int,4位存储一个碱基,1,2,4,8,15分别代表A、C、G、T、N,高四位存储坐标数较小的碱基,可通过bam_seqi(seq,i)遍历。

以上这篇C++使用htslib库读入写出bam文件的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持快网idc。

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 C++使用htslib库读入和写出bam文件的实例 https://www.kuaiidc.com/72690.html

相关文章

发表评论
暂无评论