Compare commits
14
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
bc4d7dc190 | ||
|
|
8c995a47a0 | ||
|
|
02232d6453 | ||
|
|
9a9a968116 | ||
|
|
feca46cbfd | ||
|
|
5ea47205c5 | ||
|
|
bca9928ade | ||
|
|
8cafb794b0 | ||
|
|
cb13a8d228 | ||
|
|
83beecb6ec | ||
|
|
73030ff54f | ||
|
|
51ff099cca | ||
|
|
171920398c | ||
|
|
edb0106cc0 |
+102
@@ -0,0 +1,102 @@
|
||||
FROM python:2.7.17-alpine AS builder
|
||||
|
||||
RUN apk add --no-cache \
|
||||
bash flex build-base curl openssl-dev bzip2-dev readline-dev sqlite-dev zlib-dev xz-dev tk-dev libffi-dev make ncurses-dev git
|
||||
|
||||
RUN pip install Cython==0.29
|
||||
|
||||
RUN mkdir -p /app
|
||||
WORKDIR /app
|
||||
COPY src .
|
||||
|
||||
RUN gcc -o littlebigman littlebigman.c
|
||||
RUN python setup.py build_ext --inplace
|
||||
RUN python setup.py install
|
||||
RUN ./install.sh
|
||||
|
||||
WORKDIR /app
|
||||
RUN git clone https://forge.metabarcoding.org/obitools/ecopcr.git
|
||||
WORKDIR /app/ecopcr/src
|
||||
RUN make clean && make \
|
||||
&& cp ecoPCR ecofind ecogrep /usr/local/bin
|
||||
|
||||
WORKDIR /app
|
||||
RUN git clone https://forge.metabarcoding.org/obitools/ecoprimers.git
|
||||
WORKDIR /app/ecoprimers/src
|
||||
RUN make clean && make \
|
||||
&& cp ecoPrimers /usr/local/bin \
|
||||
&& cp ../tools/ecoPCRFormat.py /usr/local/bin/ecoPCRFormat \
|
||||
&& chmod +x /usr/local/bin/ecoPCRFormat
|
||||
|
||||
WORKDIR /app
|
||||
RUN git clone --recurse-submodules https://forge.metabarcoding.org/obitools/sumatra.git
|
||||
WORKDIR /app/sumatra
|
||||
RUN make clean && make \
|
||||
&& cp sumatra /usr/local/bin
|
||||
|
||||
WORKDIR /app
|
||||
RUN git clone --recurse-submodules https://forge.metabarcoding.org/obitools/sumaclust.git
|
||||
WORKDIR /app/sumaclust
|
||||
RUN make clean && make \
|
||||
&& cp sumaclust /usr/local/bin
|
||||
|
||||
RUN find /usr/local/bin /usr/local/python2/bin /usr/local/python2/lib -type f -exec file {} \; | \
|
||||
grep -E 'ELF (32-bit|64-bit) (executable|shared object)' | \
|
||||
cut -d: -f1 | \
|
||||
xargs -r strip --strip-unneeded || true
|
||||
|
||||
RUN pip install "virtualenv<20" && \
|
||||
virtualenv --system-site-packages /obitools-doc
|
||||
|
||||
ENV PATH="/obitools-doc/bin:${PATH}"
|
||||
RUN pip install "sphinx==1.8.5"
|
||||
|
||||
COPY doc /obitools-doc/doc
|
||||
|
||||
RUN echo "/doc" > /obitools-doc/doc/sphinx/build_dir.txt
|
||||
|
||||
ENV PYTHONPATH="/app"
|
||||
|
||||
WORKDIR /obitools-doc/doc/sphinx
|
||||
RUN make html
|
||||
RUN cp /app/docserver.sh /usr/local/bin/docserver
|
||||
RUN chmod +x /usr/local/bin/docserver
|
||||
|
||||
|
||||
#--- Image finale minimaliste ---
|
||||
FROM python:2.7.17-alpine
|
||||
LABEL org.opencontainers.image.title="OBITools2 (legacy)"
|
||||
LABEL org.opencontainers.image.description="Legacy OBITools2 environment for compatibility with older pipelines and benchmarks. Includes OBITools2, ecoPCR, ecoPrimers, sumatra, and sumaclust. Python 2-based software stack. Full documentation embedded in the image."
|
||||
LABEL org.opencontainers.image.version="latest"
|
||||
LABEL org.opencontainers.image.authors="Eric Coissac <eric.coissac@metabarcoding.org>"
|
||||
LABEL org.opencontainers.image.url="https://registry.metabarcoding.org/image/obitools%2Fobitools2"
|
||||
LABEL org.opencontainers.image.documentation="https://metabarcoding.org/en/obitools/obitools2"
|
||||
LABEL org.opencontainers.image.source="https://forge.metabarcoding.org/obitools/obitools"
|
||||
|
||||
# Dépendances runtime seulement (exemple)
|
||||
RUN apk add --no-cache \
|
||||
openssl \
|
||||
zlib \
|
||||
libgomp
|
||||
|
||||
# Copier Python compilé et libs depuis le builder
|
||||
COPY --from=builder /usr/local/lib/python2.7/site-packages /usr/local/lib/python2.7/site-packages
|
||||
COPY --from=builder /usr/local/bin /usr/local/bin
|
||||
COPY --from=builder /obitools-doc/doc/sphinx/build/html /doc
|
||||
|
||||
RUN rm -rf /usr/local/share /usr/local/include /usr/local/lib/pkgconfig /usr/local/lib/python2.7/test && \
|
||||
find /usr/local/bin /usr/local/python2/bin /usr/local/python2/lib -type f -exec file {} \; | \
|
||||
grep -E 'ELF (32-bit|64-bit) (executable|shared object)' | \
|
||||
cut -d: -f1 | \
|
||||
xargs -r strip --strip-unneeded || true
|
||||
|
||||
RUN mkdir -p /data
|
||||
|
||||
ENV LD_LIBRARY_PATH=/usr/local/lib
|
||||
ENV PATH="/usr/local/bin:${PATH}"
|
||||
|
||||
VOLUME ["/data"]
|
||||
|
||||
WORKDIR /data
|
||||
|
||||
CMD ["ash"]
|
||||
@@ -0,0 +1,11 @@
|
||||
# Legacy OBITools status
|
||||
|
||||
Legacy OBITools is 20 years old. It was developed using Python 2, a language that is no longer supported. Therefore, maintaining this code is impossible. It has now been superseded by OBITools4, the latest version in the OBITools lineage.
|
||||
|
||||
In order to enable users to continue using Legacy OBITools, a Docker image has been created and made available on the [metabarcoding.org registry](https://registry.metabarcoding.org). While we discourage using this old version for new projects, being able to run it can still be useful for reproducibility purposes.
|
||||
|
||||
You can find more information about using this Docker image on the [relevant page](https://metabarcoding.org/en/obitools/obitools2) of the [new metabarcoding website](https://metabarcoding.org).
|
||||
|
||||
All the best,
|
||||
|
||||
Eric Coissac
|
||||
@@ -35,115 +35,6 @@ and all the sources can be downloaded from our subversion server
|
||||
Prerequisites
|
||||
.............
|
||||
|
||||
To install the ``OBITools``, you need that these softwares are installed on your
|
||||
system:
|
||||
|
||||
* Python 2.7 (installed by default on most ``Unix`` systems, available from
|
||||
`the Python website <http://www.python.org/>`_)
|
||||
* ``gcc`` (installed by default on most ``Unix`` systems, available from the
|
||||
GNU sites dedicated to `GCC <https://www.gnu.org/software/gcc/>`_ and
|
||||
`GMake <https://www.gnu.org/software/make/>`_)
|
||||
|
||||
On a linux system
|
||||
^^^^^^^^^^^^^^^^^
|
||||
|
||||
You have to take care that the Python-dev packages are installed.
|
||||
|
||||
On MacOSX
|
||||
^^^^^^^^^
|
||||
|
||||
The C compiler and all the other compilation tools are included in the `XCode <https://itunes.apple.com/fr/app/xcode/id497799835?mt=12>`_
|
||||
application not installed by default. The Python included in the system is not
|
||||
suitable for running the ``OBITools``. You have to install a complete distribution
|
||||
of Python that you can download as a `MacOSX package from the Python website <https://www.python.org/downloads/>`_.
|
||||
|
||||
Downloading and installing the ``OBITools``
|
||||
...........................................
|
||||
|
||||
The ``OBITools`` are downloaded and installed using the :download:`get-obitools.py <../../../get_obitools/get-obitools.py>` script.
|
||||
This is a user level installation that does not need administrator privilege.
|
||||
|
||||
Once downloaded, move the file :download:`get-obitools.py <../../../get_obitools/get-obitools.py>` in the directory where you want to install
|
||||
the ``OBITools``. From a Unix terminal you must now run the command :
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
> python get-obitools.py
|
||||
|
||||
The script will create a new directory at the place you are running it in which all the
|
||||
``OBITools`` will be installed. No system privilege are required, and you system will not
|
||||
be altered in any way by the obitools installation.
|
||||
|
||||
The newly created directory is named OBITools-VERSION where version is substituted by the
|
||||
latest version number available.
|
||||
|
||||
Inside the newly created directory all the ``OBITools`` are installed. Close to this directory
|
||||
there is a shell script named ``obitools``. Running this script activate the ``OBITools``
|
||||
by reconfiguring your Unix environment.
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
> ./obitools
|
||||
|
||||
Once activated you can desactivate the ``OBITools`` byt typing the command ``exit``.
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
> exit
|
||||
|
||||
OBITools are no more activated, Bye...
|
||||
======================================
|
||||
|
||||
|
||||
System level installation
|
||||
.........................
|
||||
|
||||
To install the ``OBITools`` at the system level you can follow two options :
|
||||
|
||||
- copy the ``obitools`` script in a usual directory for installing program like ``/usr/local/bin``
|
||||
but never move the ``OBITools`` directory itself after the installation by the
|
||||
:download:`get-obitools.py <../../../get_obitools/get-obitools.py>`.
|
||||
|
||||
- The other solution is to add the ``export/bin`` directory located in the ``OBITools`` directory
|
||||
to the ``PATH``environment variable.
|
||||
|
||||
Retrieving the sources of the OBITools
|
||||
......................................
|
||||
|
||||
If you want to compile by yourself the ``OBITools``, you will need to install the same
|
||||
prerequisite:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
> pip install -U virtualenv
|
||||
|
||||
> pip install -U sphinx
|
||||
|
||||
> pip install -U cython
|
||||
|
||||
moreover you need to install any subversion client (a list of clients is available from `Wikipedia <http://en.wikipedia.org/wiki/Comparison_of_Subversion_clients>`_)
|
||||
|
||||
Then you can download the
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
> svn co http://www.grenoble.prabi.fr/public-svn/OBISofts/OBITools/branches/OBITools-1.00/ OBITools
|
||||
|
||||
This command will create a new directory called ``OBITools``.
|
||||
|
||||
Compiling and installing the ``OBITools``
|
||||
.........................................
|
||||
|
||||
From the directory where you retrieved the sources, execute the following commands:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
> cd OBITools
|
||||
|
||||
> python setup.py --serenity install
|
||||
|
||||
Once installed, you can test your installation by running the commands of the
|
||||
:doc:`tutorials <./tutorials>`.
|
||||
|
||||
|
||||
Introduction
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
#!/bin/ash
|
||||
|
||||
# Par défaut : /doc
|
||||
DOC_DIR="${1:-/doc}"
|
||||
PORT="${2:-8080}"
|
||||
|
||||
echo "Serving documentation from $DOC_DIR on port $PORT..."
|
||||
cd "$DOC_DIR" || { echo "Directory not found: $DOC_DIR"; exit 1; }
|
||||
|
||||
python -m SimpleHTTPServer "$PORT"
|
||||
Executable
+30
@@ -0,0 +1,30 @@
|
||||
#!/bin/ash
|
||||
|
||||
set -e
|
||||
|
||||
SRC_DIR="/app"
|
||||
DEST_DIR="/usr/local/bin"
|
||||
PYTHON_INTERPRETER="$DEST_DIR/python2"
|
||||
|
||||
mkdir -p "$DEST_DIR"
|
||||
|
||||
for f in "$SRC_DIR"/*.py; do
|
||||
[ -e "$f" ] || continue # skip if no .py files
|
||||
|
||||
# skip setup.py explicitly
|
||||
case "$(basename "$f")" in
|
||||
setup.py) continue ;;
|
||||
esac
|
||||
|
||||
base=$(basename "$f" .py)
|
||||
dest="$DEST_DIR/$base"
|
||||
|
||||
# rewrite shebang line
|
||||
{
|
||||
echo "#!$PYTHON_INTERPRETER"
|
||||
tail -n +2 "$f"
|
||||
} > "$dest"
|
||||
|
||||
chmod +x "$dest"
|
||||
echo "Installed script: $dest"
|
||||
done
|
||||
@@ -0,0 +1,24 @@
|
||||
/*
|
||||
* littlebigman.c
|
||||
*
|
||||
* Created on: 11 juil. 2012
|
||||
* Author: coissac
|
||||
*/
|
||||
|
||||
#include<stdio.h>
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
union { int entier;
|
||||
char caractere[4] ;
|
||||
} test;
|
||||
|
||||
test.entier=0x01020304;
|
||||
|
||||
if (test.caractere[3] == 1)
|
||||
printf("-DLITTLE_END");
|
||||
else
|
||||
printf("-DBIG_END");
|
||||
|
||||
return 0;
|
||||
}
|
||||
+3
-1
@@ -348,6 +348,8 @@ if __name__=='__main__':
|
||||
entryIterator = SILVAIterator
|
||||
entries = entryIterator(entries, tax)
|
||||
options.tagname = 'species_name'
|
||||
else:
|
||||
raise Exception("Invalid database format (see --format option)")
|
||||
|
||||
openFiles(options)
|
||||
|
||||
@@ -395,7 +397,7 @@ if __name__=='__main__':
|
||||
|
||||
elif ((options.db_type =='UNITE_FULL') or (options.db_type =='UNITE_GENERAL')) :
|
||||
|
||||
restricting_ancestor = tax.findTaxonByName('Fungi')[0][0]
|
||||
restricting_ancestor = None
|
||||
|
||||
for s in entries :
|
||||
|
||||
|
||||
@@ -156,11 +156,9 @@
|
||||
* a data set that will trigger the worst case is nonexistent. Heapsort's
|
||||
* only advantage over quicksort is that it requires little additional memory.
|
||||
*/
|
||||
int
|
||||
heapsort(vbase, nmemb, size, compar)
|
||||
void *vbase;
|
||||
size_t nmemb, size;
|
||||
int (*compar) __P((const void *, const void *));
|
||||
|
||||
int heapsort(void *vbase, size_t nmemb, size_t size,
|
||||
int (*compar)(const void *, const void *))
|
||||
{
|
||||
register int cnt, i, j, l;
|
||||
register char tmp, *tmp1, *tmp2;
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <errno.h>
|
||||
#include <unistd.h>
|
||||
#include <limits.h>
|
||||
|
||||
int main(int argc, char* argv[])
|
||||
{
|
||||
if (argc < 2) {
|
||||
fprintf(stderr, "Usage: %s <pid>\n", argv[0]);
|
||||
return 1;
|
||||
}
|
||||
|
||||
pid_t pid = (pid_t)atoi(argv[1]);
|
||||
char pathbuf[PATH_MAX];
|
||||
char proc_path[64];
|
||||
|
||||
// Construire le chemin vers le lien symbolique de l'exécutable
|
||||
snprintf(proc_path, sizeof(proc_path), "/proc/%d/exe", pid);
|
||||
|
||||
// Lire le chemin via le lien symbolique
|
||||
ssize_t len = readlink(proc_path, pathbuf, sizeof(pathbuf) - 1);
|
||||
|
||||
if (len == -1) {
|
||||
fprintf(stderr, "PID %d: readlink() failed\n", pid);
|
||||
fprintf(stderr, " %s\n", strerror(errno));
|
||||
return 1;
|
||||
}
|
||||
|
||||
// Terminer la chaîne correctement
|
||||
pathbuf[len] = '\0';
|
||||
printf("proc %d: %s\n", pid, pathbuf);
|
||||
return 0;
|
||||
}
|
||||
+117
@@ -0,0 +1,117 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
import os
|
||||
import glob
|
||||
import subprocess
|
||||
from setuptools import setup, Extension, find_packages
|
||||
from Cython.Build import cythonize
|
||||
|
||||
def find_cython_modules(base_dir):
|
||||
"""
|
||||
Find Cython modules recursively in `base_dir`, following these rules:
|
||||
- For each _toto.pyx file:
|
||||
* Include _toto*.c files except _toto.c
|
||||
* Parse _toto.lnk to compile listed .c files into .o if not yet compiled
|
||||
* Include .o files from the .lnk file
|
||||
* Include include_dirs listed in _toto.cfiles
|
||||
Returns a list of setuptools.Extension instances.
|
||||
"""
|
||||
extensions = []
|
||||
|
||||
for dirpath, _, filenames in os.walk(base_dir):
|
||||
for filename in filenames:
|
||||
if not filename.endswith(".pyx"):
|
||||
continue
|
||||
|
||||
pyx_path = os.path.join(dirpath, filename)
|
||||
prefix = pyx_path[:-4] # remove ".pyx"
|
||||
|
||||
# Find all _toto*.c except _toto.c itself
|
||||
c_files = sorted([
|
||||
f for f in glob.glob(prefix + "*.c")
|
||||
if f != prefix + ".c"
|
||||
])
|
||||
|
||||
# Read include directories from _toto.cfiles if exists
|
||||
cfiles_path = prefix + ".cfiles"
|
||||
include_dirs = []
|
||||
if os.path.isfile(cfiles_path):
|
||||
with open(cfiles_path) as f:
|
||||
include_dirs = [line.strip() for line in f if line.strip()]
|
||||
|
||||
# Read .lnk file listing additional source .c files to compile into .o
|
||||
lnk_path = prefix + ".lnk"
|
||||
o_files = []
|
||||
if os.path.isfile(lnk_path):
|
||||
with open(lnk_path) as f:
|
||||
for line in f:
|
||||
line = line.strip()
|
||||
if not line:
|
||||
continue
|
||||
# If line ends with .c, compile it to .o if needed
|
||||
if line.endswith(".c"):
|
||||
c_file = line
|
||||
# If relative path, resolve relative to pyx_path dir
|
||||
if not os.path.isabs(c_file):
|
||||
c_file = os.path.join(dirpath, c_file)
|
||||
o_file = os.path.splitext(c_file)[0] + ".o"
|
||||
if not os.path.isfile(o_file):
|
||||
print("Compiling to object:", c_file)
|
||||
cmd = ["gcc", "-c", "-fPIC", "-O2", c_file, "-o", o_file]
|
||||
for inc in include_dirs:
|
||||
cmd.extend(["-I", inc])
|
||||
subprocess.check_call(cmd)
|
||||
o_files.append(o_file)
|
||||
else:
|
||||
# For non-.c lines in .lnk, ignore or raise?
|
||||
# Here just ignore
|
||||
pass
|
||||
|
||||
# Module name relative to base_dir, convert path to dotted module name
|
||||
relpath = os.path.relpath(pyx_path, ".") # <-- par rapport à la racine du projet
|
||||
modname = os.path.splitext(relpath)[0].replace(os.sep, ".")
|
||||
|
||||
assert modname.startswith("obitools."), "Module name should start with 'obitools.'"
|
||||
|
||||
print("Extension module name:", modname)
|
||||
print("Expected output path:", modname.replace('.', os.sep) + ".so")
|
||||
|
||||
print("Building extension:", modname)
|
||||
print(" Sources:")
|
||||
for s in [pyx_path] + c_files + o_files:
|
||||
print(" -", s)
|
||||
print(" Include dirs:")
|
||||
for inc in include_dirs:
|
||||
print(" -", inc)
|
||||
|
||||
ext = Extension(
|
||||
modname,
|
||||
sources=[pyx_path] + c_files + o_files,
|
||||
include_dirs=include_dirs,
|
||||
)
|
||||
extensions.append(ext)
|
||||
|
||||
print("Cython modules:", extensions)
|
||||
|
||||
return extensions
|
||||
|
||||
print("Packages found:", find_packages())
|
||||
|
||||
|
||||
setup(
|
||||
name="obitools",
|
||||
version="2.0.0",
|
||||
description="OBITools metabarcoding toolkit",
|
||||
author="Eric Coissac <eric.coissac@metabarcoding.org>",
|
||||
packages=find_packages(),
|
||||
# package_dir option can be removed if obitools/ is in current dir
|
||||
ext_modules=cythonize(
|
||||
find_cython_modules("obitools"),
|
||||
compiler_directives={'embedsignature': True},
|
||||
language_level=2,
|
||||
include_path=["obitools"]
|
||||
),
|
||||
# Remove ext_package here!
|
||||
zip_safe=False,
|
||||
include_package_data=True,
|
||||
options={'build_ext': {'force': True}},
|
||||
)
|
||||
@@ -0,0 +1,278 @@
|
||||
```markdown
|
||||
/ 📂 app
|
||||
├── 📄 ali2consensus.py
|
||||
├── 📄 ecodbtaxstat.py
|
||||
├── 📄 ecotag.py
|
||||
├── 📄 ecotaxspecificity.py
|
||||
├── 📄 ecotaxstat.py
|
||||
├── 📄 extractreads.py
|
||||
├── 📄 extractreads2.py
|
||||
├── 📄 illuminapairedend.py
|
||||
├── 📄 ngsfilter.py
|
||||
├── 📄 obiaddtaxids.py
|
||||
├── 📄 obiannotate.py
|
||||
├── 📄 obiclean.py
|
||||
├── 📄 obicomplement.py
|
||||
├── 📄 obiconvert.py
|
||||
├── 📄 obicount.py
|
||||
├── 📄 obicut.py
|
||||
├── 📄 obidistribute.py
|
||||
├── 📄 obiextract.py
|
||||
├── 📄 obigrep.py
|
||||
├── 📄 obihead.py
|
||||
├── 📄 obijoinpairedend.py
|
||||
├── 📄 obipr2.py
|
||||
├── 📄 obisample.py
|
||||
├── 📄 obiselect.py
|
||||
├── 📄 obisilva.py
|
||||
├── 📄 obisort.py
|
||||
├── 📄 obisplit.py
|
||||
├── 📄 obistat.py
|
||||
├── 📄 obisubset.py
|
||||
├── 📄 obitab.py
|
||||
├── 📄 obitail.py
|
||||
├── 📄 obitaxonomy.py
|
||||
└── 📂 obitools/
|
||||
│ ├── 📄 SVGdraw.py
|
||||
│ ├── 📄 __init__.py
|
||||
│ ├── 📄 _obitools.h
|
||||
│ ├── 📄 _obitools.pxd
|
||||
│ ├── 📄 _obitools.pyx
|
||||
│ └── 📂 align/
|
||||
│ ├── 📄 __init__.py
|
||||
│ ├── 📄 _assemble.pxd
|
||||
│ ├── 📄 _assemble.pyx
|
||||
│ ├── 📄 _codonnws.pxd
|
||||
│ ├── 📄 _codonnws.pyx
|
||||
│ ├── 📄 _dynamic.pxd
|
||||
│ ├── 📄 _dynamic.pyx
|
||||
│ ├── 📄 _freeendgap.pxd
|
||||
│ ├── 📄 _freeendgap.pyx
|
||||
│ ├── 📄 _freeendgapfm.pxd
|
||||
│ ├── 📄 _freeendgapfm.pyx
|
||||
│ ├── 📄 _gprofilenws.pxd
|
||||
│ ├── 📄 _gprofilenws.pyx
|
||||
│ ├── 📄 _lcs.cfiles
|
||||
│ ├── 📄 _lcs.ext.1.c
|
||||
│ ├── 📄 _lcs.ext.2.c
|
||||
│ ├── 📄 _lcs.ext.3.c
|
||||
│ ├── 📄 _lcs.ext.4.c
|
||||
│ ├── 📄 _lcs.h
|
||||
│ ├── 📄 _lcs.lnk
|
||||
│ ├── 📄 _lcs.pxd
|
||||
│ ├── 📄 _lcs.pyx
|
||||
│ ├── 📄 _lcs_fast.h
|
||||
│ ├── 📄 _nws.pxd
|
||||
│ ├── 📄 _nws.pyx
|
||||
│ ├── 📄 _nwsdnabyprot.pxd
|
||||
│ ├── 📄 _nwsdnabyprot.pyx
|
||||
│ ├── 📄 _profilenws.pxd
|
||||
│ ├── 📄 _profilenws.pyx
|
||||
│ ├── 📄 _qsassemble.pyx
|
||||
│ ├── 📄 _qsrassemble.pyx
|
||||
│ ├── 📄 _rassemble.pxd
|
||||
│ ├── 📄 _rassemble.pyx
|
||||
│ ├── 📄 _sse.h
|
||||
│ ├── 📄 _upperbond.cfiles
|
||||
│ ├── 📄 _upperbond.ext.1.c
|
||||
│ ├── 📄 _upperbond.h
|
||||
│ ├── 📄 _upperbond.pxd
|
||||
│ ├── 📄 _upperbond.pyx
|
||||
│ ├── 📄 homopolymere.py
|
||||
│ ├── 📄 ssearch.py
|
||||
│ └── 📂 alignment/
|
||||
│ ├── 📄 __init__.py
|
||||
│ ├── 📄 ace.py
|
||||
│ └── 📂 barcodecoverage/
|
||||
│ ├── 📄 __init__.py
|
||||
│ ├── 📄 calcBc.py
|
||||
│ ├── 📄 drawBcTree.py
|
||||
│ ├── 📄 findErrors.py
|
||||
│ ├── 📄 readFiles.py
|
||||
│ ├── 📄 writeBcTree.py
|
||||
│ └── 📂 blast/
|
||||
│ ├── 📄 __init__.py
|
||||
│ └── 📂 carto/
|
||||
│ ├── 📄 __init__.py
|
||||
│ ├── 📄 truc.svg
|
||||
│ ├── 📄 truc2.svg
|
||||
│ ├── 📄 collections.py
|
||||
│ ├── 📄 decorator.py
|
||||
│ └── 📂 distances/
|
||||
│ ├── 📄 __init__.py
|
||||
│ ├── 📄 observed.py
|
||||
│ ├── 📄 phylip.py
|
||||
│ ├── 📄 r.py
|
||||
│ └── 📂 dnahash/
|
||||
│ ├── 📄 __init__.py
|
||||
│ └── 📂 ecobarcode/
|
||||
│ ├── 📄 __init__.py
|
||||
│ ├── 📄 databases.py
|
||||
│ ├── 📄 ecotag.py
|
||||
│ ├── 📄 options.py
|
||||
│ ├── 📄 rawdata.py
|
||||
│ ├── 📄 taxonomy.py
|
||||
│ └── 📂 ecopcr/
|
||||
│ ├── 📄 __init__.py
|
||||
│ ├── 📄 annotation.py
|
||||
│ ├── 📄 options.py
|
||||
│ ├── 📄 sequence.py
|
||||
│ ├── 📄 taxonomy.py
|
||||
│ └── 📂 ecotag/
|
||||
│ ├── 📄 __init__.py
|
||||
│ ├── 📄 parser.py
|
||||
│ └── 📂 eutils/
|
||||
│ ├── 📄 __init__.py
|
||||
│ ├── 📄 fast.py
|
||||
│ └── 📂 fasta/
|
||||
│ ├── 📄 __init__.py
|
||||
│ ├── 📄 _fasta.pxd
|
||||
│ ├── 📄 _fasta.pyx
|
||||
│ └── 📂 fastq/
|
||||
│ ├── 📄 __init__.py
|
||||
│ ├── 📄 _fastq.pyx
|
||||
│ └── 📂 fnaqual/
|
||||
│ ├── 📄 __init__.py
|
||||
│ ├── 📄 fasta.py
|
||||
│ ├── 📄 quality.py
|
||||
│ └── 📂 format/
|
||||
│ ├── 📄 __init__.py
|
||||
│ ├── 📄 _format.pyx
|
||||
│ └── 📂 genericparser/
|
||||
│ ├── 📄 __init__.py
|
||||
│ ├── 📄 _genericparser.pyx
|
||||
│ └── 📂 ontology/
|
||||
│ ├── 📄 __init__.py
|
||||
│ ├── 📄 go_obo.py
|
||||
│ ├── 📄 options.py
|
||||
│ └── 📂 sequence/
|
||||
│ ├── 📄 __init__.py
|
||||
│ ├── 📄 embl.py
|
||||
│ ├── 📄 fasta.py
|
||||
│ ├── 📄 fastq.py
|
||||
│ ├── 📄 fnaqual.py
|
||||
│ ├── 📄 genbank.py
|
||||
│ ├── 📄 tagmatcher.py
|
||||
│ └── 📂 goa/
|
||||
│ ├── 📄 __init__.py
|
||||
│ ├── 📄 parser.py
|
||||
│ └── 📂 graph/
|
||||
│ ├── 📄 __init__.py
|
||||
│ └── 📂 algorithms/
|
||||
│ ├── 📄 __init__.py
|
||||
│ ├── 📄 clique.py
|
||||
│ ├── 📄 compact.py
|
||||
│ ├── 📄 component.py
|
||||
│ ├── 📄 dag.py
|
||||
│ └── 📂 layout/
|
||||
│ ├── 📄 __init__.py
|
||||
│ ├── 📄 radialtree.py
|
||||
│ ├── 📄 rootedtree.py
|
||||
│ ├── 📄 tree.py
|
||||
│ ├── 📄 gzip.py
|
||||
│ └── 📂 interactive/
|
||||
│ ├── 📄 __init__.py
|
||||
│ └── 📂 location/
|
||||
│ ├── 📄 __init__.py
|
||||
│ ├── 📄 feature.py
|
||||
│ └── 📂 metabarcoding/
|
||||
│ ├── 📄 __init__.py
|
||||
│ ├── 📄 options.py
|
||||
│ └── 📂 obischemas/
|
||||
│ ├── 📄 __init__.py
|
||||
│ └── 📂 kb/
|
||||
│ ├── 📄 __init__.py
|
||||
│ ├── 📄 extern.py
|
||||
│ ├── 📄 options.py
|
||||
│ └── 📂 obo/
|
||||
│ ├── 📄 __init__.py
|
||||
│ └── 📂 go/
|
||||
│ ├── 📄 __init__.py
|
||||
│ ├── 📄 parser.py
|
||||
│ ├── 📄 parser.py
|
||||
│ └── 📂 options/
|
||||
│ ├── 📄 __init__.py
|
||||
│ ├── 📄 _bioseqfilter.pyx
|
||||
│ ├── 📄 _options.pyx
|
||||
│ ├── 📄 bioseqcutter.py
|
||||
│ ├── 📄 bioseqedittag.py
|
||||
│ ├── 📄 bioseqfilter.py
|
||||
│ ├── 📄 taxonomyfilter.py
|
||||
│ └── 📂 parallel/
|
||||
│ ├── 📄 __init__.py
|
||||
│ ├── 📄 jobqueue.py
|
||||
│ └── 📂 phylogeny/
|
||||
│ ├── 📄 __init__.py
|
||||
│ ├── 📄 newick.py
|
||||
│ └── 📂 profile/
|
||||
│ ├── 📄 __init__.py
|
||||
│ ├── 📄 _profile.pxd
|
||||
│ ├── 📄 _profile.pyx
|
||||
│ ├── 📄 sample.py
|
||||
│ └── 📂 seqdb/
|
||||
│ ├── 📄 __init__.py
|
||||
│ └── 📂 blastdb/
|
||||
│ ├── 📄 __init__.py
|
||||
│ ├── 📄 dnaparser.py
|
||||
│ └── 📂 embl/
|
||||
│ ├── 📄 __init__.py
|
||||
│ ├── 📄 parser.py
|
||||
│ └── 📂 genbank/
|
||||
│ ├── 📄 __init__.py
|
||||
│ ├── 📄 ncbi.py
|
||||
│ ├── 📄 parser.py
|
||||
│ └── 📂 sequenceencoder/
|
||||
│ ├── 📄 __init__.py
|
||||
│ └── 📂 solexa/
|
||||
│ ├── 📄 __init__.py
|
||||
│ ├── 📄 solexaPairEnd.py
|
||||
│ └── 📂 statistics/
|
||||
│ ├── 📄 __init__.py
|
||||
│ ├── 📄 hypergeometric.py
|
||||
│ ├── 📄 noncentralhypergeo.py
|
||||
│ ├── 📄 svg.py
|
||||
│ └── 📂 table/
|
||||
│ ├── 📄 __init__.py
|
||||
│ ├── 📄 csv.py
|
||||
│ └── 📂 tagmatcher/
|
||||
│ ├── 📄 __init__.py
|
||||
│ ├── 📄 options.py
|
||||
│ ├── 📄 parser.py
|
||||
│ └── 📂 thermo/
|
||||
│ ├── 📄 __init__.py
|
||||
│ └── 📂 tools/
|
||||
│ ├── 📄 __init__.py
|
||||
│ ├── 📄 _solexapairend.pyx
|
||||
│ ├── 📄 solexapairend.py
|
||||
│ └── 📂 tree/
|
||||
│ ├── 📄 __init__.py
|
||||
│ ├── 📄 dot.py
|
||||
│ ├── 📄 layout.py
|
||||
│ ├── 📄 newick.py
|
||||
│ ├── 📄 svg.py
|
||||
│ ├── 📄 unrooted.py
|
||||
│ └── 📂 unit/
|
||||
│ ├── 📄 __init__.py
|
||||
│ └── 📂 obitools/
|
||||
│ ├── 📄 __init__.py
|
||||
│ └── 📂 utils/
|
||||
│ ├── 📄 __init__.py
|
||||
│ ├── 📄 _utils.pxd
|
||||
│ ├── 📄 _utils.pyx
|
||||
│ ├── 📄 bioseq.py
|
||||
│ ├── 📄 crc64.py
|
||||
│ ├── 📄 iterator.py
|
||||
│ ├── 📄 version.py
|
||||
│ └── 📂 word/
|
||||
│ ├── 📄 __init__.py
|
||||
│ ├── 📄 _binary.pyx
|
||||
│ ├── 📄 _readindex.cfiles
|
||||
│ ├── 📄 _readindex.ext.1.c
|
||||
│ ├── 📄 _readindex.h
|
||||
│ ├── 📄 _readindex.pyx
|
||||
│ ├── 📄 options.py
|
||||
│ ├── 📄 predicate.py
|
||||
│ ├── 📄 zipfile.py
|
||||
├── 📄 obiuniq.py
|
||||
└── 📄 oligotag.py
|
||||
```
|
||||
+181104
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user