+Beta Release 0.2.2 (28 June, 2010)
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Notable changes:
+
+ * Dropped the VCF3 support. Added VCF4 support.
+
+ * Avoided the function name collision with samtools.
+
+(0.2.2: 28 June 2010, r603)
+
+
+
Beta Release 0.2.1 (3 June, 2010)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
private TIntv getIntv(final String s) {
TIntv intv = new TIntv();
int col = 0, end = 0, beg = 0;
- while ((end = s.indexOf('\t', beg)) >= 0) {
+ while ((end = s.indexOf('\t', beg)) >= 0 || end == -1) {
++col;
if (col == mSc) {
intv.tid = chr2tid(s.substring(beg, end));
else --intv.beg;
if (intv.beg < 0) intv.beg = 0;
if (intv.end < 1) intv.end = 1;
- } else { // FIXME: SAM/VCF supports are not tested yet
+ } else { // FIXME: SAM supports are not tested yet
if ((mPreset&0xffff) == 0) { // generic
if (col == mEc)
intv.end = Integer.parseInt(s.substring(beg, end));
intv.end = intv.beg + l;
}
} else if ((mPreset&0xffff) == 2) { // VCF
- if (col == 5) {
- String alt = s.substring(beg, end);
- int i, max = 1;
- for (i = 0; i < alt.length(); ++i) {
- if (alt.charAt(i) == 'D') { // deletion
- int j;
- for (j = i; j < alt.length() && alt.charAt(j) >= '0' && alt.charAt(j) <= '9'; ++j);
- int l = Integer.parseInt(alt.substring(i, j));
- if (max < l) max = l;
- i = j - 1;
- }
+ String alt;
+ alt = end >= 0? s.substring(beg, end) : s.substring(beg);
+ if (col == 4) { // REF
+ if (alt.length() > 0) intv.end = intv.beg + alt.length();
+ } else if (col == 8) { // INFO
+ int e_off = -1, i = alt.indexOf("END=");
+ if (i == 0) e_off = 4;
+ else if (i > 0) {
+ i = alt.indexOf(";END=");
+ if (i >= 0) e_off = i + 5;
+ }
+ if (e_off > 0) {
+ i = alt.indexOf(";", e_off);
+ intv.end = Integer.parseInt(i > e_off? alt.substring(e_off, i) : alt.substring(e_off));
}
- intv.end = intv.beg + max;
}
}
}
+ if (end == -1) break;
beg = end + 1;
}
return intv;
} pair64_t;
#define pair64_lt(a,b) ((a).u < (b).u)
-KSORT_INIT(off, pair64_t, pair64_lt)
+KSORT_INIT(offt, pair64_t, pair64_lt)
typedef struct {
uint32_t m, n;
}
} else if ((idx->conf.preset&0xffff) == TI_PRESET_VCF) {
// FIXME: the following is NOT tested and is likely to be buggy
- if (id == 5) { // ALT
- char *t;
- int max = 1;
- for (s = str->s + b; s < str->s + i;) {
- if (s[i] == 'D') {
- long x = strtol(s + 1, &t, 10);
- if (x > max) max = x;
- s = t + 1;
- } else ++s;
+ if (id == 4) {
+ if (b < i) intv->end = intv->beg + (i - b);
+ } else if (id == 8) { // look for "END="
+ int c = str->s[i];
+ str->s[i] = 0;
+ s = strstr(str->s + b, "END=");
+ if (s == str->s + b) s += 4;
+ else if (s) {
+ s = strstr(str->s + b, ";END=");
+ if (s) s += 5;
}
- intv->end = intv->beg + max;
+ if (s) intv->end = strtol(s, &s, 0);
+ str->s[i] = c;
}
}
}
free(bins);
{
int l;
- ks_introsort(off, n_off, off);
+ ks_introsort(offt, n_off, off);
// resolve completely contained adjacent blocks
for (i = 1, l = 0; i < n_off; ++i)
if (off[l].v < off[i].v)
#include "bgzf.h"
#include "tabix.h"
-#define PACKAGE_VERSION "0.2.1 (r582)"
+#define PACKAGE_VERSION "0.2.2 (r603)"
int main(int argc, char *argv[])
{
if (strcmp(optarg, "gff") == 0) conf = ti_conf_gff;
else if (strcmp(optarg, "bed") == 0) conf = ti_conf_bed;
else if (strcmp(optarg, "sam") == 0) conf = ti_conf_sam;
- else if (strcmp(optarg, "vcf") == 0) conf = ti_conf_vcf;
+ else if (strcmp(optarg, "vcf") == 0 || strcmp(optarg, "vcf4") == 0) conf = ti_conf_vcf;
else if (strcmp(optarg, "psltbl") == 0) conf = ti_conf_psltbl;
else {
fprintf(stderr, "[main] unrecognized preset '%s'\n", optarg);