Skip to content

Commit

Permalink
* samtools-0.1.5-12 (r415)
Browse files Browse the repository at this point in the history
 * FLAG now can be in HEX
  • Loading branch information
Heng Li committed Jul 24, 2009
1 parent cda19b9 commit 941542d
Show file tree
Hide file tree
Showing 7 changed files with 30 additions and 13 deletions.
10 changes: 8 additions & 2 deletions bam.c
Original file line number Diff line number Diff line change
Expand Up @@ -236,15 +236,16 @@ int bam_write1(bamFile fp, const bam1_t *b)
return bam_write1_core(fp, &b->core, b->data_len, b->data);
}

char *bam_format1(const bam_header_t *header, const bam1_t *b)
char *bam_format1_core(const bam_header_t *header, const bam1_t *b, int is_hex)
{
uint8_t *s = bam1_seq(b), *t = bam1_qual(b);
int i;
const bam1_core_t *c = &b->core;
kstring_t str;
str.l = str.m = 0; str.s = 0;

ksprintf(&str, "%s\t%d\t", bam1_qname(b), c->flag);
if (is_hex) ksprintf(&str, "%s\t0x%x\t", bam1_qname(b), c->flag);
else ksprintf(&str, "%s\t%d\t", bam1_qname(b), c->flag);
if (c->tid < 0) kputs("*\t", &str);
else ksprintf(&str, "%s\t", header->target_name[c->tid]);
ksprintf(&str, "%d\t%d\t", c->pos + 1, c->qual);
Expand Down Expand Up @@ -282,6 +283,11 @@ char *bam_format1(const bam_header_t *header, const bam1_t *b)
return str.s;
}

char *bam_format1(const bam_header_t *header, const bam1_t *b)
{
return bam_format1_core(header, b, 0);
}

void bam_view1(const bam_header_t *header, const bam1_t *b)
{
char *s = bam_format1(header, b);
Expand Down
2 changes: 2 additions & 0 deletions bam.h
Original file line number Diff line number Diff line change
Expand Up @@ -431,6 +431,8 @@ extern "C" {
*/
char *bam_format1(const bam_header_t *header, const bam1_t *b);

char *bam_format1_core(const bam_header_t *header, const bam1_t *b, int is_hex);

/*! @typedef
@abstract Structure for one alignment covering the pileup position.
@field b pointer to the alignment
Expand Down
6 changes: 5 additions & 1 deletion bam_import.c
Original file line number Diff line number Diff line change
Expand Up @@ -297,7 +297,11 @@ int sam_read1(tamFile fp, bam_header_t *header, bam1_t *b)
doff += c->l_qname;
}
{ // flag, tid, pos, qual
ret = ks_getuntil(ks, KS_SEP_TAB, str, &dret); z += str->l + 1; c->flag = atoi(str->s);
long flag;
char *s;
ret = ks_getuntil(ks, KS_SEP_TAB, str, &dret); z += str->l + 1;
flag = strtol((char*)str->s, &s, 0);
c->flag = flag;
ret = ks_getuntil(ks, KS_SEP_TAB, str, &dret); z += str->l + 1; c->tid = bam_get_tid(header, str->s);
if (c->tid < 0 && strcmp(str->s, "*")) {
if (header->n_targets == 0) {
Expand Down
2 changes: 1 addition & 1 deletion bamtk.c
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
#include "bam.h"

#ifndef PACKAGE_VERSION
#define PACKAGE_VERSION "0.1.5-11 (r408)"
#define PACKAGE_VERSION "0.1.5-12 (r415)"
#endif

int bam_taf2baf(int argc, char *argv[]);
Expand Down
4 changes: 3 additions & 1 deletion sam.c
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@

#define TYPE_BAM 1
#define TYPE_READ 2
#define TYPE_HEX 4

bam_header_t *bam_header_dup(const bam_header_t *h0)
{
Expand Down Expand Up @@ -75,6 +76,7 @@ samfile_t *samopen(const char *fn, const char *mode, const void *aux)
// open file
fp->x.tamw = strcmp(fn, "-")? fopen(fn, "w") : stdout;
if (fp->x.tamr == 0) goto open_err_ret;
if (strstr(mode, "x")) fp->type |= TYPE_HEX;
// write header
if (strstr(mode, "h")) {
int i;
Expand Down Expand Up @@ -126,7 +128,7 @@ int samwrite(samfile_t *fp, const bam1_t *b)
if (fp == 0 || (fp->type & TYPE_READ)) return -1; // not open for writing
if (fp->type & TYPE_BAM) return bam_write1(fp->x.bam, b);
else {
char *s = bam_format1(fp->header, b);
char *s = bam_format1_core(fp->header, b, fp->type & TYPE_HEX);
int l = strlen(s);
fputs(s, fp->x.tamw); fputc('\n', fp->x.tamw);
free(s);
Expand Down
12 changes: 6 additions & 6 deletions sam.h
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@

/*! @typedef
@abstract SAM/BAM file handler
@field type type of the handler; bit 1 for BAM and bit 2 for reading
@field type type of the handler; bit 1 for BAM, 2 for reading and bit 3 for is_hex
@field bam BAM file handler; valid if (type&1) == 1
@field tamr SAM file handler for reading; valid if type == 2
@field tamw SAM file handler for writing; valid if type == 0
Expand All @@ -41,11 +41,11 @@ extern "C" {
@param fn SAM/BAM file name; "-" is recognized as stdin (for
reading) or stdout (for writing).
@param mode open mode /[rw](b?)(u?)(h?)/: 'r' for reading, 'w' for
writing, 'b' for BAM I/O, 'u' for uncompressed BAM output and 'h'
for outputing header in SAM. If 'b' present, it must immediately
follow 'r' or 'w'. Valid modes are "r", "w", "wh", "rb", "wb" and
"wbu" exclusively.
@param mode open mode /[rw](b?)(u?)(h?)(x?)/: 'r' for reading, 'w'
for writing, 'b' for BAM I/O, 'u' for uncompressed BAM output, 'h'
for outputing header in SAM and 'x' for HEX flag. If 'b' present,
it must immediately follow 'r' or 'w'. Valid modes are "r", "w",
"wh", "wx", "whx", "rb", "wb" and "wbu" exclusively.
@param aux auxiliary data; if mode[0]=='w', aux points to
bam_header_t; if strcmp(mode, "rb")!=0 and @SQ header lines in SAM
Expand Down
7 changes: 5 additions & 2 deletions sam_view.c
Original file line number Diff line number Diff line change
Expand Up @@ -35,13 +35,13 @@ static int usage(void);

int main_samview(int argc, char *argv[])
{
int c, is_header = 0, is_header_only = 0, is_bamin = 1, ret = 0, is_uncompressed = 0, is_bamout = 0;
int c, is_header = 0, is_header_only = 0, is_bamin = 1, ret = 0, is_uncompressed = 0, is_bamout = 0, is_hex = 0;
samfile_t *in = 0, *out = 0;
char in_mode[5], out_mode[5], *fn_out = 0, *fn_list = 0;

/* parse command-line options */
strcpy(in_mode, "r"); strcpy(out_mode, "w");
while ((c = getopt(argc, argv, "Sbt:hHo:q:f:F:ul:r:")) >= 0) {
while ((c = getopt(argc, argv, "Sbt:hHo:q:f:F:ul:r:x")) >= 0) {
switch (c) {
case 'S': is_bamin = 0; break;
case 'b': is_bamout = 1; break;
Expand All @@ -55,6 +55,7 @@ int main_samview(int argc, char *argv[])
case 'u': is_uncompressed = 1; break;
case 'l': g_library = strdup(optarg); break;
case 'r': g_rg = strdup(optarg); break;
case 'x': is_hex = 1; break;
default: return usage();
}
}
Expand All @@ -64,6 +65,7 @@ int main_samview(int argc, char *argv[])
if (is_bamin) strcat(in_mode, "b");
if (is_header) strcat(out_mode, "h");
if (is_uncompressed) strcat(out_mode, "u");
if (is_hex && !is_bamout) strcat(out_mode, "x");
if (argc == optind) return usage();

// open file handlers
Expand Down Expand Up @@ -123,6 +125,7 @@ static int usage()
fprintf(stderr, " -H print header only (no alignments)\n");
fprintf(stderr, " -S input is SAM\n");
fprintf(stderr, " -u uncompressed BAM output (force -b)\n");
fprintf(stderr, " -x output FLAG in HEX (samtools-C specific)\n");
fprintf(stderr, " -t FILE list of reference names and lengths (force -S) [null]\n");
fprintf(stderr, " -o FILE output file name [stdout]\n");
fprintf(stderr, " -f INT required flag, 0 for unset [0]\n");
Expand Down

0 comments on commit 941542d

Please sign in to comment.