diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..02cc6a1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +__pycache__/ +*.so +*.egg-info/ diff --git a/fraglets.cpp b/fraglets.cpp index 5601d52..658c0cb 100644 --- a/fraglets.cpp +++ b/fraglets.cpp @@ -942,6 +942,27 @@ void fraglets::drawGraphViz(){ gvFreeContext(graphContext); } +std::vector fraglets::getSorted(){ + std::vector result; + auto extract = [&result](keyMultisetMap &km){ + for(auto &kv : km){ + moleculeMultiset *mset = kv.second; + for(auto mol : mset->multiset){ + if(!mol->vector.empty() && *(mol->vector[0]) == "sorted"){ + for(size_t i=1;ivector.size();++i){ + result.push_back(*(mol->vector[i])); + } + return true; + } + } + } + return false; + }; + if(extract(this->active.keyMap)) return result; + extract(this->passive.keyMap); + return result; +} + diff --git a/fraglets.h b/fraglets.h index df04245..f24f6a0 100644 --- a/fraglets.h +++ b/fraglets.h @@ -86,6 +86,7 @@ class fraglets { void interpret(std::string filename); void trace(); void drawGraphViz(); + std::vector getSorted(); int iter = 0; diff --git a/fraglets.py b/fraglets.py index e8103ff..3f005dd 100644 --- a/fraglets.py +++ b/fraglets.py @@ -34,6 +34,9 @@ def parse(self, line): def drawGraphViz(self): cFraglets.drawGraphViz(self.cfraglets) + def get_sorted(self): + return cFraglets.getSorted(self.cfraglets) + def __delete__(self): cFraglets.delete_object(self.cfraglets) diff --git a/fragletsToPy.cpp b/fragletsToPy.cpp index 26af75e..dba690c 100644 --- a/fragletsToPy.cpp +++ b/fragletsToPy.cpp @@ -108,6 +108,31 @@ PyObject* getUnimolTags(PyObject* self, PyObject* args) return tags; } +PyObject* getSorted(PyObject* self, PyObject* args) +{ + PyObject* fragletsCapsule_; + + PyArg_ParseTuple(args, "O", + &fragletsCapsule_); + + fraglets* frag = (fraglets*)PyCapsule_GetPointer(fragletsCapsule_, "fragletsPtr"); + + std::vector vec = frag->getSorted(); + PyObject* list = PyList_New(vec.size()); + for(size_t i=0;i