projects
/
samtools.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
updated main loop to not duplicate hash key
[samtools.git]
/
sample.c
diff --git
a/sample.c
b/sample.c
index 3efc559dfda52ff5b8a706feb4036a79a7d1c6f8..830b9d1cb9f1aad1230c82dd8d24ad958645c7ff 100644
(file)
--- a/
sample.c
+++ b/
sample.c
@@
-52,10
+52,15
@@
static void add_pair(bam_sample_t *sm, khash_t(sm) *sm2id, const char *key, cons
int bam_smpl_add(bam_sample_t *sm, const char *fn, const char *txt)
{
const char *p = txt, *q, *r;
int bam_smpl_add(bam_sample_t *sm, const char *fn, const char *txt)
{
const char *p = txt, *q, *r;
- kstring_t buf;
+ kstring_t buf
, first_sm
;
int n = 0;
khash_t(sm) *sm2id = (khash_t(sm)*)sm->sm2id;
int n = 0;
khash_t(sm) *sm2id = (khash_t(sm)*)sm->sm2id;
+ if (txt == 0) {
+ add_pair(sm, sm2id, fn, fn);
+ return 0;
+ }
memset(&buf, 0, sizeof(kstring_t));
memset(&buf, 0, sizeof(kstring_t));
+ memset(&first_sm, 0, sizeof(kstring_t));
while ((q = strstr(p, "@RG")) != 0) {
p = q + 3;
r = q = 0;
while ((q = strstr(p, "@RG")) != 0) {
p = q + 3;
r = q = 0;
@@
-69,12
+74,21
@@
int bam_smpl_add(bam_sample_t *sm, const char *fn, const char *txt)
oq = *u; or = *v; *u = *v = '\0';
buf.l = 0; kputs(fn, &buf); kputc('/', &buf); kputs(q, &buf);
add_pair(sm, sm2id, buf.s, r);
oq = *u; or = *v; *u = *v = '\0';
buf.l = 0; kputs(fn, &buf); kputc('/', &buf); kputs(q, &buf);
add_pair(sm, sm2id, buf.s, r);
+ if ( !first_sm.s )
+ kputs(r,&first_sm);
*u = oq; *v = or;
} else break;
p = q > r? q : r;
++n;
}
if (n == 0) add_pair(sm, sm2id, fn, fn);
*u = oq; *v = or;
} else break;
p = q > r? q : r;
++n;
}
if (n == 0) add_pair(sm, sm2id, fn, fn);
+ // If there is only one RG tag present in the header and reads are not annotated, don't refuse to work but
+ // use the tag instead.
+ else if ( n==1 && first_sm.s )
+ add_pair(sm,sm2id,fn,first_sm.s);
+ if ( first_sm.s )
+ free(first_sm.s);
+
// add_pair(sm, sm2id, fn, fn);
free(buf.s);
return 0;
// add_pair(sm, sm2id, fn, fn);
free(buf.s);
return 0;