Extend the python mussa interface.
[mussa.git] / py / sequence.cpp
index e340fe630fc96e356a5845cc5d455b22e1b24e81..a4ef37981360b0b00c31b08ad82b5dbf04b08cb8 100644 (file)
@@ -6,6 +6,9 @@
 #include <boost/python/register_ptr_to_python.hpp>
 using namespace boost::python;
 
+#include <boost/filesystem/path.hpp>
+namespace fs = boost::filesystem;
+
 #include <boost/shared_ptr.hpp>
 
 #include <string>
@@ -13,18 +16,33 @@ using namespace boost::python;
 
 void export_sequence()
 {
+  void (Sequence::*load_fasta_piii)(const fs::path, int, int, int) = &Sequence::load_fasta;
+  void (Sequence::*add_annotation_ssii)(
+          std::string, 
+          std::string, 
+          Sequence::size_type,
+          Sequence::size_type
+       ) = &Sequence::add_annotation;
+  
   class_<Sequence>("Sequence")
     .def(init<std::string>())
-    .def("__str__", &Sequence::get_sequence, "cast to string")
-    .def("__repr__", &Sequence::get_sequence, "display as string")
-    .def("size", &Sequence::size, "return the length of the sequence")
+    .def("__getitem__", &Sequence::at, "return base pair at specified location",
+         return_value_policy<return_by_value>())
     .def("__len__", &Sequence::size, "return the length of the sequence")
+    .def("__repr__", &Sequence::get_sequence, "display as string")
+    .def("__str__", &Sequence::get_sequence, "cast to string")
+    .def("add_annotation", add_annotation_ssii, 
+         "create an annotation from name, type, start, stop")
+    //.def("annotations", &Sequence::annotations, "return list of annotations")
+    .def("add_motif", &Sequence::add_motif, "add a motif sequenence")
     .def("clear", &Sequence::clear, "clear the sequence and its annotations")
+    .def("empty", &Sequence::empty, "Is the sequence empty")
+    .def("load_fasta", load_fasta_piii, "Load fasta")
     .add_property("header", &Sequence::get_fasta_header, &Sequence::set_fasta_header, "the fasta header")
-    .add_property("species", &Sequence::get_species, &Sequence::set_species)
-    .def("add_annotation", &Sequence::add_annotation, "append an annotation")
-    //.def("annotations", &Sequence::annotations, "return list of annotations")
     .def("rcseq", &Sequence::rev_comp, return_value_policy<return_by_value>())
+    .def("size", &Sequence::size, "return the length of the sequence")
+    .add_property("species", &Sequence::get_species, &Sequence::set_species)
+    .def("subseq", &Sequence::subseq, "return a subsequence")
   ;
 
   register_ptr_to_python< boost::shared_ptr<Sequence> >();