#define FLAG_FIX_CHIMERA 0x1
#define FLAG_LIST_EXCL 0x4
+#define FLAG_DROP_AMBI 0x8
typedef struct {
// configurations, initialized in the main function
f->phase = c[0] > c[1]? 0 : 1;
f->in = c[f->phase]; f->out = c[1 - f->phase];
f->phased = f->in == f->out? 0 : 1;
- f->ambig = (f->in && f->out && f->in <= f->out + 1)? 1 : 0;
+ f->ambig = (f->in && f->out && f->out < 3 && f->in <= f->out + 1)? 1 : 0;
// fix chimera
f->flip = 0;
if (flip && c[0] >= 3 && c[1] >= 3) {
static void dump_aln(phaseg_t *g, int min_pos, const nseq_t *hash)
{
- int i, is_flip;
+ int i, is_flip, drop_ambi;
+ drop_ambi = g->flag & FLAG_DROP_AMBI;
is_flip = (drand48() < 0.5);
for (i = 0; i < g->n; ++i) {
int end, which;
if (k == kh_end(hash)) which = 3;
else {
frag_t *f = &kh_val(hash, k);
- if (f->ambig) which = 2;
+ if (f->ambig) which = drop_ambi? 2 : 3;
else if (f->phased && f->flip) which = 2;
else if (f->phased == 0) which = 3;
else { // phased and not flipped
memset(&g, 0, sizeof(phaseg_t));
g.flag = FLAG_FIX_CHIMERA;
g.min_varLOD = 37; g.k = 13; g.min_baseQ = 13; g.max_depth = 256;
- while ((c = getopt(argc, argv, "Q:eFq:k:b:l:D:")) >= 0) {
+ while ((c = getopt(argc, argv, "Q:eFq:k:b:l:D:A:")) >= 0) {
switch (c) {
case 'D': g.max_depth = atoi(optarg); break;
case 'q': g.min_varLOD = atoi(optarg); break;
case 'k': g.k = atoi(optarg); break;
case 'F': g.flag &= ~FLAG_FIX_CHIMERA; break;
case 'e': g.flag |= FLAG_LIST_EXCL; break;
+ case 'A': g.flag |= FLAG_DROP_AMBI; break;
case 'b': g.pre = strdup(optarg); break;
case 'l': fn_list = strdup(optarg); break;
}
fprintf(stderr, " -D INT max read depth [%d]\n", g.max_depth);
// fprintf(stderr, " -l FILE list of sites to phase [null]\n");
fprintf(stderr, " -F do not attempt to fix chimeras\n");
+ fprintf(stderr, " -A drop reads with ambiguous phase\n");
// fprintf(stderr, " -e do not discover SNPs (effective with -l)\n");
fprintf(stderr, "\n");
return 1;