name.clear();
// be nice if glsequence was a subclass of sequence so we could
// just attach colors directly to the motif.
- Color c(red, green, blue);
+ Color c(red, green, blue, alpha);
color_mapper->appendInstanceColor("motif", seq.c_str(), c);
+ alpha = 1.0;
motifs.insert(seq);
++parsed;
};
}
// parse our string
bool ok = spirit::parse(data.begin(), data.end(),
- *(
+ *(
(
(
(+spirit::chset<>(alphabet))[spirit::assign_a(seq)] >>
+spirit::space_p
) >>
!(
- (spirit::alpha_p >> *spirit::graph_p)[spirit::assign_a(name)]
- >> +spirit::space_p
+ (
+ // names can either be letter followed by non-space characters
+ (spirit::alpha_p >> *spirit::graph_p)[spirit::assign_a(name)]
+ |
+ // or a quoted string
+ (
+ spirit::ch_p('"') >>
+ (+(~spirit::ch_p('"')))[spirit::assign_a(name)] >>
+ spirit::ch_p('"')
+ )
+ ) >> +spirit::space_p
) >>
spirit::real_p[spirit::assign_a(red)] >> +spirit::space_p >>
spirit::real_p[spirit::assign_a(green)] >> +spirit::space_p >>
- spirit::real_p[spirit::assign_a(blue)] >> +spirit::space_p
+ spirit::real_p[spirit::assign_a(blue)] >> +spirit::space_p >>
+ !(spirit::real_p[spirit::assign_a(alpha)] >> +spirit::space_p)
)[push_back_motif(motif_sequences, color_mapper, seq, name, red, green, blue, alpha, parsed)]
)).full;
if (not ok) {
update_sequences_motifs();
}
+void Mussa::save_motifs(fs::path filename)
+{
+ fs::ofstream out_stream;
+ out_stream.open(filename, ofstream::out);
+ save_motifs(out_stream);
+}
+
+void Mussa::save_motifs(std::ostream& out)
+{
+ for(motif_set::iterator motif_i = motif_sequences.begin();
+ motif_i != motif_sequences.end();
+ ++motif_i)
+ {
+ out << motif_i->get_sequence() << " ";
+ if (motif_i->get_name().size() > 0) {
+ out << "\"" << motif_i->get_name() << "\" ";
+ }
+ out << color_mapper->lookup("motif", motif_i->get_sequence());
+ out << std::endl;
+ }
+}
+
void Mussa::update_sequences_motifs()
{
// once we've loaded all the motifs from the file,