INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR})
ADD_SUBDIRECTORY( alg )
ADD_SUBDIRECTORY( gui )
+ADD_SUBDIRECTORY( py )
ADD_SUBDIRECTORY( qui )
void clear();
//! set parameters from a file - 'mupa' ~ mussa parameters
+ void load_mupa_file(std::string para_file_path) { load_mupa_file(boost::filesystem::path(para_file_path));}
void load_mupa_file(boost::filesystem::path para_file_path);
// set parameters individually (eg from user input into gui classes)
void save_old(boost::filesystem::path save_file_path);
void print(std::list<std::vector<int> >&);
+ // The following iterator functions are mostly for the python interface
+ // they'll have problems when being called from within a const object
std::list<ConservedPath>::iterator pbegin() { return pathz.begin() ; }
std::list<ConservedPath>::iterator pend() { return pathz.end() ; }
- std::list<ConservedPath>::const_iterator pbegin() const { return pathz.begin() ; }
- std::list<ConservedPath>::const_iterator pend() const { return pathz.end() ; }
size_t path_size() const { return refined_pathz.size(); }
std::list<ExtendedConservedPath>::iterator rpbegin() { return refined_pathz.begin() ; }
- std::list<ExtendedConservedPath>::const_iterator rpend() const { return refined_pathz.end() ; }
- std::list<ExtendedConservedPath>::const_iterator rpbegin() const { return refined_pathz.begin() ; }
std::list<ExtendedConservedPath>::iterator rpend() { return refined_pathz.end() ; }
size_t refined_path_size() const { return refined_pathz.size(); }
+
// these probably shouldn't be public, but lets start
// simple
std::list<ConservedPath> pathz;
--- /dev/null
+FIND_PACKAGE(Boost)
+FIND_PACKAGE(OpenGL)
+FIND_PACKAGE(PythonLibs)
+FIND_PACKAGE(PythonInterp)
+
+# IF(BOOST_PYTHON_LIB)
+ INCLUDE_DIRECTORIES(${PYTHON_INCLUDE_PATH})
+ SET(SOURCES
+ conserved_path.cpp
+ glsequence.cpp
+ module.cpp
+ mussa.cpp
+ nway_paths.cpp
+ sequence.cpp
+ )
+
+ #SET_SOURCE_FILES_PROPERTIES(${SOURCES} COM
+
+ ADD_LIBRARY(mussa MODULE ${SOURCES})
+ ADD_CUSTOM_COMMAND(TARGET mussa
+ COMMAND rm mussa.so
+ COMMAND ln -s libmussa.so mussa.so)
+ LINK_DIRECTORIES(${MUSSA_BINARY_DIR}/alg)
+ TARGET_LINK_LIBRARIES(mussa
+ mussa_core
+ ${BOOST_PYTHON_LIBRARY}
+ ${BOOST_FILESYSTEM_LIBRARY}
+ ${OPENGL_gl_LIBRARY}
+ ${PYTHON_LIBRARIES}
+ )
+
+ IF(PYTHON_EXECUTABLE)
+ SET(PYTHON_TEST_DIR ${CMAKE_SOURCE_DIR}/py/test/)
+ ADD_TEST(sequence ${PYTHON_EXECUTABLE} ${PYTHON_TEST_DIR}/TestSequence.py)
+ ENDIF(PYTHON_EXECUTABLE)
+#ELSE(BOOST_PYTHON_LIB)
+#ENDIF(BOOST_PYTHON_LIB)
+
//BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS(mussa_analyze_overloads,
// &Mussa::analyze, 0, 4);
+ void (Mussa::*load_mupa_string)(std::string) = &Mussa::load_mupa_file;
class_<Mussa>("Mussa")
.def("save", &Mussa::save)
.def("load", &Mussa::load, "Load previous run analysis")
- .def("load_mupa", &Mussa::load_mupa_file, "Load mussa parameter file")
+ .def("load_mupa", load_mupa_string, "Load mussa parameter file")
.def("clear", &Mussa::clear, "Clear the current analysis")
.add_property("name", &Mussa::get_name, &Mussa::set_name)
.def("size", &Mussa::size, "Number of sequences to be used "
void export_nway_paths()
{
class_<NwayPaths>("NwayPaths")
- .add_property("pathz", range(&NwayPaths::pbegin,
- &NwayPaths::pend))
- .add_property("refinedPathz", range(&NwayPaths::rpbegin,
- &NwayPaths::rpend))
- ;
+ .add_property("pathz", range(&NwayPaths::pbegin, &NwayPaths::pend))
+ .add_property("refinedPathz", range(&NwayPaths::rpbegin, &NwayPaths::rpend)) ;
}
{
class_<Sequence>("Sequence")
.def(init<std::string>())
- .def("__str__", &Sequence::get_seq)
+ .def("__str__", &Sequence::get_seq, return_value_policy<return_by_value>())
.def("size", &Sequence::size)
.def("__len__", &Sequence::size)
//.add_property("header", &Sequence::get_header)
--- /dev/null
+import os
+import sys
+import unittest
+
+# kinda hackish but it makes it possible to runi under ctest
+sys.path.append(os.getcwd())
+
+import mussa
+
+class TestSequence(unittest.TestCase):
+ def testSimple(self):
+ seq_text = "AGCT"
+ s = mussa.Sequence(seq_text)
+ self.failUnless(len(seq_text) == len(s))
+ self.failUnless(len(s) == s.size())
+ self.failUnless(str(s) == seq_text)
+
+def suite():
+ return unittest.makeSuite(TestSequence, 'test')
+
+if __name__ == "__main__":
+ sys.exit(unittest.main(defaultTest='suite'))
{
// sets are sorted
set<int>::iterator sel_i = sel_paths.begin();
- list<ExtendedConservedPath>::const_iterator path_i = m.paths().rpbegin();
- list<ExtendedConservedPath>::const_iterator path_end = m.paths().rpend();
+ list<ExtendedConservedPath>::const_iterator path_i = m.paths().refined_pathz.begin();
+ list<ExtendedConservedPath>::const_iterator path_end = m.paths().refined_pathz.end();
size_t path_size = m.paths().refined_pathz.size();
size_t pathid=0;