}
char consensus() {
+ unsigned int N = size();
+ if(N == 0) { return ' '; }
unsigned int max = 0; unsigned int max_idx = 0;
for(unsigned int i = 0; i < 4; i++) { if(n[i] > max) { max = n[i]; max_idx = i; } }
}
}
- unsigned int N = size();
- if(N == 0) { return ' '; } else if(N < 10) { return tolower(c); } else { return c; }
+ if(N < 10) { return tolower(c); } else { return c; }
}
};
this->name = name;
this->length = length;
this->sequence = "";
+
+ if(length > 10000) { cerr << "ERROR: window of size " << length << endl; exit(1); }
seq.resize(length);
this->reads = 0;
}
Window& operator=(const Window& r) {
+ if (this == &r) return *this;
Loci::operator=(r);
this->name = r.name;
this->length = r.length;
this->reads++;
for(unsigned int i = 0; i < r.length(); i++) {
int seq_idx = offset + i;
+ if(seq_idx > 0 && (unsigned)seq_idx >= seq.size()) { cerr << "Error: offset: " << offset << " seq_idx " << seq_idx << " size: " << seq.size() << " seqlen: " << sequence.length() << endl; }
if(seq_idx < 0 || (seq_idx >= 0 && (unsigned)seq_idx > this->length) ) { continue; }
seq[offset + i].add_nuc(r[i]);
}
unsigned int max_len = sequence.length() - offset;
unsigned int len = (line_len > max_len)?max_len:line_len;
for(unsigned int i = offset; i < offset+len; i++) {
+ if(i >= seq.size()) {
+ cerr << "Error: offset of " << i << " exceeds read data: " << seq.size() << " in string of " << sequence.length() << endl;
+ exit(1);
+ }
char con = toupper(seq[i].consensus());
// weak consensus if lowercase.
bool weak_con = seq[i].consensus() != con;
if(con == ' ' || weak_con || toupper(con) == toupper(sequence[i])) {
- output += sequence[i];
+ output.append(1,sequence[i]);
} else {
- output += con;
+ output.append(1,con);
char buff[128];
sprintf(buff,"%d:%c>%c",i,sequence[i],con);
string var = buff;
//stop if we have run out of features.
if(wind_it == windows.end()) { break; }
- if(i->pos + i->length > wind_it->pos && i->pos < (wind_it->pos + wind_it->length)) {
+ if(i->pos + i->length() > wind_it->pos && i->pos < (wind_it->pos + wind_it->length)) {
wind_it->add_read(*i);
}
}
offset = chrom_file.gcount();
}
unsigned int begin = i->pos - 1;
- unsigned int end = i->pos+i->length-2;
+ unsigned int end = i->pos+i->length;
unsigned int begin_pos = offset + (int)begin/50 + begin;
unsigned int end_pos = offset + (int)end/50 + end;