Full Code of PacificBiosciences/FALCON for AI

master ab80e88e1278 cached
165 files
1.4 MB
622.9k tokens
753 symbols
1 requests
Download .txt
Showing preview only (1,488K chars total). Download the full file or copy to clipboard to get everything.
Repository: PacificBiosciences/FALCON
Branch: master
Commit: ab80e88e1278
Files: 165
Total size: 1.4 MB

Directory structure:
gitextract_zc9ere_s/

├── .gitignore
├── .gitmodules
├── .travis.yml
├── LICENSE
├── MANIFEST.in
├── README.md
├── bamboo_build.sh
├── bamboo_wheel.sh
├── doc/
│   └── README
├── examples/
│   ├── build_env.sh
│   ├── build_env2.sh
│   ├── ecoli_asm_graph_exploration.ipynb
│   ├── fc_run_LG.cfg
│   ├── fc_run_arab.cfg
│   ├── fc_run_dmel.cfg
│   ├── fc_run_ecoli.cfg
│   ├── fc_run_ecoli_2.cfg
│   ├── logging.json
│   └── run_ecoli_test.sh
├── falcon.snake
├── falcon_kit/
│   ├── FastaReader.py
│   ├── __init__.py
│   ├── bash.py
│   ├── falcon_kit.py
│   ├── fc_asm_graph.py
│   ├── functional.py
│   ├── gfa_graph.py
│   ├── io.py
│   ├── mains/
│   │   ├── LAmerge.py
│   │   ├── LAsort.py
│   │   ├── __init__.py
│   │   ├── actg_coordinate.py
│   │   ├── build_pdb.py
│   │   ├── build_rdb.py
│   │   ├── calc_cutoff.py
│   │   ├── collect_contig_gfa.py
│   │   ├── collect_pread_gfa.py
│   │   ├── consensus.py
│   │   ├── consensus_gather_fasta_fofn.py
│   │   ├── consensus_scatter.py
│   │   ├── consensus_split.py
│   │   ├── consensus_task.py
│   │   ├── contig_annotate.py
│   │   ├── copy_fofn.py
│   │   ├── copy_mapped.py
│   │   ├── ctg_link_analysis.py
│   │   ├── daligner.py
│   │   ├── daligner_gather_las_list.py
│   │   ├── daligner_scatter.py
│   │   ├── daligner_split.py
│   │   ├── dazzler.py
│   │   ├── dedup_a_tigs.py
│   │   ├── fasta2fasta.py
│   │   ├── fetch_reads.py
│   │   ├── gen_gfa_v1.py
│   │   ├── gen_gfa_v2.py
│   │   ├── generate_read_to_ctg_map.py
│   │   ├── generic_gather.py
│   │   ├── generic_run_units_of_work.py
│   │   ├── generic_scatter_one_uow.py
│   │   ├── generic_unsplit.py
│   │   ├── get_read_ctg_map.py
│   │   ├── graph_to_contig.py
│   │   ├── graph_to_utgs.py
│   │   ├── hgap4_adapt.py
│   │   ├── las_merge.py
│   │   ├── las_merge_gather.py
│   │   ├── las_merge_scatter.py
│   │   ├── las_merge_split.py
│   │   ├── ovlp_filter.py
│   │   ├── ovlp_stats.py
│   │   ├── ovlp_to_graph.py
│   │   ├── pr_ctg_track.py
│   │   ├── report_pre_assembly.py
│   │   ├── rr_ctg_track.py
│   │   ├── run1.py
│   │   ├── symlink_mapped.py
│   │   ├── task_report_pre_assembly.py
│   │   └── tasks.py
│   ├── multiproc.py
│   ├── pype.py
│   ├── pype_tasks.py
│   ├── run_support.py
│   ├── snakemake.py
│   ├── stats_preassembly.py
│   ├── tiling_path.py
│   └── util/
│       ├── __init__.py
│       ├── io.py
│       └── system.py
├── makefile
├── setup.cfg
├── setup.py
├── src/
│   ├── c/
│   │   ├── DW_banded.c
│   │   ├── Makefile
│   │   ├── Makefile.osx
│   │   ├── common.h
│   │   ├── ext_falcon.c
│   │   ├── falcon.c
│   │   └── kmer_lookup.c
│   ├── py_scripts/
│   │   ├── fc_actg_coordinate.py
│   │   ├── fc_consensus.py
│   │   ├── fc_contig_annotate.py
│   │   ├── fc_ctg_link_analysis.py
│   │   ├── fc_dedup_a_tigs.py
│   │   ├── fc_graph_to_contig.py
│   │   ├── fc_graph_to_utgs.py
│   │   ├── fc_ovlp_filter.py
│   │   ├── fc_ovlp_stats.py
│   │   ├── fc_ovlp_to_graph.py
│   │   └── fc_run.py
│   └── utils/
│       └── fetch_preads.py
├── test/
│   ├── HPCdaligner_synth0.sh
│   ├── HPCdaligner_synth0_new.sh
│   ├── HPCdaligner_synth0_preads.sh
│   ├── helpers.py
│   ├── se161.sh
│   ├── test_actg_coordinate.py
│   ├── test_calc_cutoff.py
│   ├── test_collect_contig_gfa.py
│   ├── test_collect_pread_gfa.py
│   ├── test_consensus.py
│   ├── test_contig_annotate.py
│   ├── test_ctg_link_analysis.py
│   ├── test_functional.py
│   ├── test_gen_gfa_v1.py
│   ├── test_gen_gfa_v2.py
│   ├── test_gfa_graph.py
│   ├── test_graph_to_contig.py
│   ├── test_graph_to_utgs.py
│   ├── test_ovlp_filter.py
│   ├── test_ovlp_stats.py
│   ├── test_ovlp_to_graph.py
│   ├── test_run.py
│   ├── test_run_LG.py
│   ├── test_run_support.py
│   ├── test_stats_preassembly.py
│   ├── test_tiling_path.py
│   ├── test_util_io.py
│   └── test_util_system.py
├── test_data/
│   ├── calc_cutoff/
│   │   └── partial_capture.txt
│   ├── gfa-1/
│   │   ├── a_ctg.fa
│   │   ├── a_ctg_tiling_path
│   │   ├── ctg_paths
│   │   ├── expected-1-sg-r-c.gfa
│   │   ├── expected-2-tiling-r-c.gfa
│   │   ├── expected-3-tiling-no_r-c.gfa
│   │   ├── expected-4-tiling-no_r-no_c.gfa
│   │   ├── expected-5-sg-no_r-no_c.gfa
│   │   ├── expected-6-tiling-no_r-no_c-minlen.gfa
│   │   ├── expected-7-nx-no_r-no_c.gfa
│   │   ├── expected-8-nx-tiling-no_r-no_c.gfa
│   │   ├── expected-9-nx-tiling-r-c.gfa
│   │   ├── p_ctg.fa
│   │   ├── p_ctg_tiling_path
│   │   ├── preads4falcon.fasta
│   │   ├── sg.gexf
│   │   ├── sg_edges_list
│   │   └── utg_data
│   ├── p_ctg_tiling_path_1
│   ├── p_ctg_tiling_path_2
│   ├── t1.fa
│   ├── t1.fofn
│   ├── t2.fa
│   └── t2.fofn
└── travis.sh

================================================
FILE CONTENTS
================================================

================================================
FILE: .gitignore
================================================
/LOCAL/
/build/
/dist/
/.cache/
falcon_kit.egg-info/
/.coverage
*.pyc
*.pyo
*.swp
*.so
*.dylib
*.dll
*.egg
*.eggs
FALCON.tar.gz
*.xml
*.whl
.pytest_cache/


================================================
FILE: .gitmodules
================================================


================================================
FILE: .travis.yml
================================================
# Build matrix / environment variable are explained on:
# http://about.travis-ci.org/docs/user/build-configuration/
# This file can be validated on:
# http://lint.travis-ci.org/

#before_install: sudo apt-get install -y cmake
# cmake is pre-installed in Travis for both linux and osx

#before_install:
#  - sudo apt-get update -qq
#  - sudo apt-get install -qq valgrind
#sudo: required
os:
  - linux
#language: python # This seems to cause virtualenv, which we do not want. We prefer a --user install.
# But to speed-up start-up,
language: c
compiler:
  - clang  # hmm. distutils uses 'gcc' anyway
#  - gcc
script: ./travis.sh
#env:
#  matrix:
#    - SHARED_LIB=ON  STATIC_LIB=ON CMAKE_PKG=ON  BUILD_TYPE=release VERBOSE_MAKE=false
#    - SHARED_LIB=OFF STATIC_LIB=ON CMAKE_PKG=OFF BUILD_TYPE=debug   VERBOSE_MAKE=true VERBOSE
notifications:
  email: false
sudo: false


================================================
FILE: LICENSE
================================================
#################################################################################$$
# Copyright (c) 2011-2015, Pacific Biosciences of California, Inc.
#
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted (subject to the limitations in the
# disclaimer below) provided that the following conditions are met:
#
#  * Redistributions of source code must retain the above copyright
#  notice, this list of conditions and the following disclaimer.
#
#  * Redistributions in binary form must reproduce the above
#  copyright notice, this list of conditions and the following
#  disclaimer in the documentation and/or other materials provided
#  with the distribution.
#
#  * Neither the name of Pacific Biosciences nor the names of its
#  contributors may be used to endorse or promote products derived
#  from this software without specific prior written permission.
#
# NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE
# GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY PACIFIC
# BIOSCIENCES AND ITS CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED
# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL PACIFIC BIOSCIENCES OR ITS
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
#################################################################################$$


================================================
FILE: MANIFEST.in
================================================
include src/c/*


================================================
FILE: README.md
================================================
Falcon
===========

Falcon: a set of tools for fast aligning long reads for consensus and assembly

The Falcon tool kit is a set of simple code collection which I use for studying
efficient assembly algorithm for haploid and diploid genomes. It has some back-end 
code implemented in C for speed and some simple front-end written in Python for
convenience. 


DOCUMENTATION
-------------

The default branch is now "master" which contained the latest code.

The current latest intergrated release is v0.3.0. Check [v0.3+ Integration Installation Guide](https://github.com/PacificBiosciences/FALCON-integrate/wiki/Installation) for installation.

For the pre-Jun 2015 v0.2.2 version, please check [v0.2.2 release github repository](https://github.com/PacificBiosciences/FALCON/tree/v0.2.2). We will no longer address issues that are specific to that branch unless they also impact the current master branch.

- [wiki pages](https://github.com/PacificBiosciences/FALCON/wiki)
- [Developer Installation Guide](https://github.com/PacificBiosciences/FALCON/wiki/Setup:-Installation-and-Environment)
- [v0.3+ Integration Installation Guide](https://github.com/PacificBiosciences/FALCON-integrate/wiki/Installation)
- [Documentation is here.](https://github.com/PacificBiosciences/FALCON/wiki/Manual)
- [FAQs](https://github.com/PacificBiosciences/FALCON/wiki/FAQs)
- [v0.2.2 release github repository](https://github.com/PacificBiosciences/FALCON/tree/v0.2.2)

ABOUT THE LICENSE
------------------

Standard PacBio ["Open Source License"](LICENSE).

July 9th, 2015

DISCLAIMER
----------
THIS WEBSITE AND CONTENT AND ALL SITE-RELATED SERVICES, INCLUDING ANY DATA, ARE PROVIDED "AS IS," WITH ALL FAULTS, WITH NO REPRESENTATIONS OR WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, ANY WARRANTIES OF MERCHANTABILITY, SATISFACTORY QUALITY, NON-INFRINGEMENT OR FITNESS FOR A PARTICULAR PURPOSE. YOU ASSUME TOTAL RESPONSIBILITY AND RISK FOR YOUR USE OF THIS SITE, ALL SITE-RELATED SERVICES, AND ANY THIRD PARTY WEBSITES OR APPLICATIONS. NO ORAL OR WRITTEN INFORMATION OR ADVICE SHALL CREATE A WARRANTY OF ANY KIND. ANY REFERENCES TO SPECIFIC PRODUCTS OR SERVICES ON THE WEBSITES DO NOT CONSTITUTE OR IMPLY A RECOMMENDATION OR ENDORSEMENT BY PACIFIC BIOSCIENCES.


================================================
FILE: bamboo_build.sh
================================================
#!/bin/bash

type module >& /dev/null || . /mnt/software/Modules/current/init/bash
module purge
module load git
module load gcc
module load ccache
module load python/2
#module load make

set -vex
git --version
which gcc
which g++
gcc --version
which python

rm -rf LOCAL
mkdir -p LOCAL
export PYTHONUSERBASE=$(pwd)/LOCAL
export PATH=${PYTHONUSERBASE}/bin:${PATH}

# We need latest local pypeFLOW, not from PyPI.
pushd ../pypeFLOW
pip install --user --edit .
popd
# Back to FALCON.

# Unfortunately, we need pypeflow for pylint.
python -c 'import pypeflow as p; print p'
python -c 'import pypeflow.sample_tasks as p; print p'

make install-edit
# Note: no --edit because we might be building artifacts.
# ... Scratch that. We have trouble getting coverage for
#  source=falcon_kit
# but maybe it will work with a --edit install.

export MY_TEST_FLAGS="-v -s --durations=0 --cov=falcon_kit --cov-report=term-missing --cov-report=xml:coverage.xml --cov-branch"
make test
sed -i -e 's@filename="@filename="./falcon_kit/@g' coverage.xml

make pylint


================================================
FILE: bamboo_wheel.sh
================================================
#!/bin/bash
type module >& /dev/null || . /mnt/software/Modules/current/init/bash
module purge
module load gcc
module load ccache
set -vex
ls -larth ..
ls -larth
pwd


module load python/2-UCS2
make wheel WHEELHOUSE=artifacts/gcc-6.4.0/wheelhouse

# For now, we have only "any" wheels, so we do not need to build again.

module unload python

module load python/2-UCS4
make wheel WHEELHOUSE=artifacts/gcc-6.4.0/wheelhouse


================================================
FILE: doc/README
================================================
The images here are used by

  https://github.com/PacificBiosciences/FALCON/wiki/Manual


================================================
FILE: examples/build_env.sh
================================================
virtualenv --no-site-packages  --always-copy   $PWD/fc_env
. $PWD/fc_env/bin/activate
git clone https://github.com/pb-jchin/pypeFLOW
cd pypeFLOW
python setup.py install

cd ..
git clone https://github.com/PacificBiosciences/FALCON.git
cd FALCON
python setup.py install

cd ..
git clone https://github.com/pb-jchin/DAZZ_DB.git
cd DAZZ_DB/
make
cp DBrm DBshow DBsplit DBstats fasta2DB ../fc_env/bin/

cd ..
git clone https://github.com/pb-jchin/DALIGNER.git
cd DALIGNER
make
cp daligner daligner_p DB2Falcon HPCdaligner LA4Falcon LAmerge LAsort  ../fc_env/bin


================================================
FILE: examples/build_env2.sh
================================================
virtualenv --no-site-packages  --always-copy   $PWD/fc_env
. $PWD/fc_env/bin/activate

cd FALCON
git submodule init
git submodule update

cd pypeFLOW
python setup.py install
cd ..

python setup.py install

cd DAZZ_DB/
make
cp DBrm DBshow DBsplit DBstats fasta2DB ../../fc_env/bin/
cd ..

cd DALIGNER
make
cp daligner daligner_p DB2Falcon HPCdaligner LA4Falcon LAmerge LAsort  ../../fc_env/bin
cd ../..


================================================
FILE: examples/ecoli_asm_graph_exploration.ipynb
================================================
{
 "metadata": {
  "name": "",
  "signature": "sha256:585e8268126c8365dec7b581d0673bd9a5a1e83a88800e51c0f9028479318042"
 },
 "nbformat": 3,
 "nbformat_minor": 0,
 "worksheets": [
  {
   "cells": [
    {
     "cell_type": "heading",
     "level": 1,
     "metadata": {},
     "source": [
      "FALCON Assembly Graph Processing and Visulization Example\n"
     ]
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "This notebook shows how to fetch the graph data from the assembler and show how to examine the bubbles in the assembly graph."
     ]
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "You will need to have `matplotlib`, `networkx` and `pygraphviz` as Python libraries. Of course, you will need to have `graphviz` command line tool install in your system too. "
     ]
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "Some setup to change the working directory to where the data is."
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "%cd /mnt/projects/bifxanalysis/jchin_asm_jobs/DA_develop_test/Ecoli/2-asm-falcon/\n",
      "%matplotlib inline\n",
      "%pylab inline"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "/mnt/projects/bifxanalysis/jchin_asm_jobs/DA_develop_test/Ecoli/2-asm-falcon\n",
        "Populating the interactive namespace from numpy and matplotlib\n"
       ]
      }
     ],
     "prompt_number": 1
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "Some boilerplate code for loading the necessary module and classes"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "import networkx as nx\n",
      "from IPython.display import display, HTML, SVG, Image"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 2
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "Load the `AsmGraph` class which parse the graph data files and load them into python objects. "
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "from falcon_kit.fc_asm_graph import AsmGraph"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 3
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "Load data into `G_asm`. "
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "G_asm = AsmGraph(\"sg_edges_list\", \"utg_data\", \"ctg_paths\")"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 4
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "Show all contig identifiers. The `000000R` is the dual contig of `000000F`."
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "print G_asm.ctg_data.keys()"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "['000000F', '000000R']\n"
       ]
      }
     ],
     "prompt_number": 5
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "Print out the content of the contig `000000F`. The output is a tuple of `contig identifier`, `start_utg`, `end_node`, `number of base`, `number of overlapped base`, `unitigs`."
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "print G_asm.ctg_data[\"000000F\"]\n",
      "print\n",
      "print \"number of unitigs in the contig:\", len(G_asm.ctg_data[\"000000F\"][-1])"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "('ctg_linear', '000011445:B~NA~000003425:E', '000011445:B', 4642293, 28970832, (['000011445:B', 'NA', '000003425:E'], ['000003425:E', '000009719:E', '000006955:E'], ['000006955:E', 'NA', '000017147:B'], ['000017147:B', '000012473:B', '000010757:B'], ['000010757:B', 'NA', '000015636:E'], ['000015636:E', '000004093:E', '000015696:B'], ['000015696:B', 'NA', '000016941:B'], ['000016941:B', '000003353:B', '000008783:B'], ['000008783:B', 'NA', '000006338:B'], ['000006338:B', '000004932:B', '000010623:B'], ['000010623:B', 'NA', '000014991:B'], ['000014991:B', '000013790:E', '000002926:B'], ['000002926:B', 'NA', '000011761:B'], ['000011761:B', '000003659:E', '000014184:E'], ['000014184:E', 'NA', '000012028:E'], ['000012028:E', '000013461:E', '000011445:B']))\n",
        "\n",
        "number of unitigs in the contig: 16\n"
       ]
      }
     ],
     "prompt_number": 6
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "If the starting node is the same of the ending node, then the contig may be circular too. (The contig type only applys to \"simple unitig\". Any contig contains more than one single unitig is classfied as `ctg_linear`. This convention may change in the futrue."
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "utgs = G_asm.ctg_data[\"000000F\"][-1]\n",
      "if utgs[0][0] == utgs[-1][-1]:\n",
      "    print \"the contig is a cirular\"\n",
      "else:\n",
      "    print \"thec contig is not circular\""
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "the contig is a cirular\n"
       ]
      }
     ],
     "prompt_number": 7
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "Check the number of node in the string subgraph for this contig. We can get the full string subgraph using the method `get_sg_for_ctg()`.  This is full string graph. Each node is 5' or 3' ends of a read."
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "sg = G_asm.get_sg_for_ctg(\"000000F\")\n",
      "print \"number of nodes:\", len(sg.nodes())\n",
      "print \"number of edges:\", len(sg.edges())"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "number of nodes: 1361\n",
        "number of edges: 1369\n"
       ]
      }
     ],
     "prompt_number": 8
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "Call `neato` layout code from Graphviz to layout the contig string graph. We can see a circle with a couple of small bubbles."
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "position=nx.graphviz_layout(sg, prog='neato') "
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 9
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "figure(figsize=(10,10))\n",
      "ax=subplot(1,1,1)\n",
      "minx = 10\n",
      "miny = 10\n",
      "count = 0\n",
      "for e in sg.edges():\n",
      "    yy, xx = zip(position[e[0]], position[e[1]]) \n",
      "\n",
      "    xx = -array(xx)\n",
      "    yy = -array(yy)\n",
      "    ax.plot( xx, yy, \".-b\" ) \n",
      "\n",
      "    if min(xx) < minx:\n",
      "        minx = min(xx)\n",
      "    if min(yy) < miny:\n",
      "        miny = min(yy)\n",
      "\n",
      "    #print x,y\n",
      "xlim(minx*1.1,-minx*0.1)\n",
      "ylim(miny*1.1,-miny*0.1)\n",
      "ax.get_xaxis().set_visible(False)\n",
      "ax.get_yaxis().set_visible(False)"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "metadata": {},
       "output_type": "display_data",
       "png": "iVBORw0KGgoAAAANSUhEUgAAAjwAAAI8CAYAAAD1D3GaAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3U13HNWZB/CnLQdhiGNJSIkA2y1b2NZq1iwI38KLfMKc\nIxazmy8gLziD59iZ1WCDsYCJjV+wgYRX2z2LSo+6ql+klrq7qu79/c7hRFUtoIIl9V/P89x7O71e\nLwAAUnaq7gcAAJg3gQcASJ7AAwAkT+ABAJIn8AAAyRN4AIDknZ70YqfTsWYdAGiNXq/XGXV/YuD5\n1984+6cBAJixTmdk1okILS0AIAMCDwCQPIEHAEiewAMAJE/gAQCSJ/AAAMkTeACA5Ak8AEDyBB4A\nIHkCDwCQPIEHAEiewAMAJE/gAQCSJ/AAAMkTeACA5Ak8AEDyBB4AIHkCDwCQPIEHAEiewAMAJE/g\nAQCSJ/AAAMkTeACA5Ak8AEDyBB4AIHkCDwCQPIEHAEiewAMAJE/gAQCSJ/AAAMkTeACA5Ak8AEDy\nBB4AIHkCDwCQPIEHAEiewAMAJE/gAQCSJ/AAAMkTeACA5Ak8AEDyBB4AIHkCDwCQPIEHAEiewAMA\nJE/gAU5sZyfi1KmITmdxf62tRezv1/3/HGiLTq/XG/9ip9Ob9DqQpp2diDt3IlL69l9djbh1K6Lb\nrftJgHnpdDrR6/U6I18TeCA/KQaakxKIoP0EHsjUjz9GXLsW8fXXi/n3ra0Vra3TpyM++iji+vWI\nFy+KFtTgj5L+dfXzBl8b/NylpfLnPX26uLC2shJx+7YgBG0g8EDiNjcjvvlm9v/c1dUibIwKKC9f\nHoSO06cjPv54caFgfz/i/fcPQlLfqAAVMZ+ApCIEzSPwQGK2tyPu3Tv5P6cfaKpBZmlpsQFm3qoB\nqfr/9/Hjk/87BCCon8ADLfbqVcSlSxFffnmyf85gtSa1QHNSg4FosKV2ksrQ738f8frrETdv+u8M\niyLwQIucdKD43LmI1147mHv5y18ibtzwpnsc+/sRH3wQ8de/lttkxw1CqkAwXwIPNNylSxH370//\n962uFkPCP/xQDNf+5396M12EfkWoP8f05Mn0/wzD0DB7Ag80zK+/Rly8ePRB49deKyo3vZ6WVBMN\ntsT680EffjhdFUj1B05O4IEGuHw54osvjv75gwPFwk37VAelj9oG63SK+Z/lZfM/MC2BB2qwsxPx\n6afT/T1ra0U1R8BJz2AAmrYFpvoDRyPwwAJtbU13xtPKSrGaR8jJx3GrPxFmf2ASgQfm7CghZ3k5\n4uzZ8iZ+Qg4RBwEo4ujzP6o+MEzggTl4772Izz8//PNUcJjW4Cqwo2yKKPxAQeCBGfn114jz54/2\nJrSxEfHJJ96EOJnB9tdhrS/tLnIn8MAJXbwY8dVXh3+eag7z1A8/33yj5QWjCDxwDD//HPHuuxHf\nfjv581ZXi/kcIYdFmablde5cxN/+5muTPAg8MIWj7nqsZUUTqPrAAYEHDvHqVcQ77xy+87GWFU01\nzT4/DjYlVQIPjPGPf0RcuBDx/Pnkz1tf9+ZAe/TDz8OHh3+uqg8pEXigYns74t69yZ+jmkPbTbPC\nS/AhBZMCz6lFPwzUZWen2PSv05kcdtbXixmeZ88iHjzwBkB7dbvF1/Djx8U5bufPR+ztFd8DVc+e\nFRtodjrFESfT7BYObaDCQ/IOO9OqvwOynY/JxVFbXqo+tI2WFlk6yuGdZnPI2VGDjw0NaQuBh6wc\nFnTM5kDZ4L4+T56Mn/VR8aHpBB6ycFjQUc2Bwx1lXx/Bh6YSeEhetxvx5ZejX7NBIEzvKO0uwYem\nEXhI1qRdkVV04OQOq/h0OsUKMN9nNIFl6STn0aOIN98cH3b29oqluH4Iw8n0l7Z/8UXE5ubw671e\n8YuHZew0nQoPrfLrr0Xl5ocfRr+uqgPztb9f7NczihYXdVPhIQkbG8WeOaPCTn+zQFUdmK9ut/he\n29wc3sCwv3mhjQtpIhUeGu/ChYivvx7/+t5exAcfLO55gML+ftHOspqLplDhoZXee6/4DXJc2OlX\ndYQdqEe3ezDbM+m4ChUfmkCFh8Z59SrirbfGn2BuTgeax2oumkCFh9a4cCFiaWl02DGnA81VXc1V\nrfj0eqo91EvgoRGuXh3fvhJ0oD0OW8auzUVdtLSo3eZmUQYfxUAytNukwWZtLmZNS4tG2t4ufuCN\nCjsGkiENg4PNVdpcLJLAw8Lt7BRB59694de0ryA9/TbXYfv33LhRx9ORCy0tFurvf494993Rr2lf\nQR4mtbnu3/fLDsenpUUjbGyMDjsbG9pXkJNJbS4tLuZF4GHurlwpSthPngy/trdXHATqNzrIS7/N\ntbc3/Fq/xSX0MEtaWszV229HPHw4+jUtLCBicovL8RRMQ0uLhbt2rajqjAo7WljAoElHVNi3h1lR\n4WHmxpWiHQkBHMa+PZyECg8Ls7Q0Ouzs7VlqDhxuUrWnv2+P5eschwoPM/HTT0XJ+eefy/c3NiI+\n+UTQAabXP5B0VGvc8nVGUeFhrrrdiDfeGA47u7tWYAHHN7hhYdXWVjHQbK6HoxJ4OJH19Ygvvxy+\nv7sbcf364p8HSE+3O3r5+vPnxbyP0MNRaGlxLDs7EZ9+Ovo1y82BebB8ncNoaTFT29ujw44DP4F5\nmrRD87Nnqj1MpsLDVE6fjnj5cvi+qg6wSOOqPZubxdwPeVLhYSbeems47KjqAHUYV+15+NAwM6Op\n8HCoV68izp6N+PHH8n2DyUATrK0VLa1BNinMkwoPx3b1arGZoLADNNWtW+M3Kex0IlZWVHwQeJhg\nayvi7t3h+3t7wg7QHJOGmSMivvvOeVxoaTHGhQsRX389fN9wMtBkk5auR2h1pW5SS0vgYcgf/1ic\nezXIDwmgLfb3i4rOOFZypcsMD0e2sjIcdpaXhR2gPQ77WfXbb4t5DppF4CEiip2TO52i1z1ofb3Y\nZFDYAdpkdXX8a0+fmuXJkZYW8dtvEa+9NnzfvA7QVmZ58qSlxVg//BBx5szwfWEHaLPBlVvr68UK\nrUH9Zes3btTyeNRAhSdjV65EfPbZ8H1hB0jRuKrP/fsqPalQ4WHI5cvCDpCXftWnyqGjeRB4MnTp\n0uhvemEHSF23W/ysG9Rvb9mYMG1aWpnpdiO+/LJ8b3094uZNJV0gH05bT5ONB4mIiIsXI776qnxv\nYyPi0aN6ngegTqNCj9Vb7WaGh5FhZ3k54pNP6nkegLr1Z3oGDx7t9cz0pErgycC4yo4NBYHcjQs9\nZnrSo6WVuFFhZ319+PgIgJyZ6UmDllamxrWxbt6s53kAmmpUpSci4ptvVHlSIfAkamtLGwtgGmZ6\n0ibwJGjUN+feXrEaS9gBGG/STI9jKNrNDE9iLl8e3lTQzA7AdBxD0U5meDLx3nvDYcfMDsD0HEOR\nHoEnEf/4R8Tnn5fvra+b2QE4rnHHUAg97aSllYBr1yLu3Cnfs4MywGxob7WHllbCdnaGw06EHZQB\nZmVce2trK+K//3vhj8MxqfC0XHXPiAinngPMw+9+F/HiRfne8nLEzz/X8zwMU+FJ1Llzw/fu3xd2\nAObhv/5r+N6vv5rnaQuBp6U2NiK+/758Tz8ZYH7+7d+Kn7M2JmwngaeFTp+OePKkfG9vT9gBmDcb\nE7aXwNMyly5FvHxZvmdmB2Bxxp279ec/q/Q0mcDTIleuFOXUQbu7wg7AotmYsH2s0mqJFy+KFQKD\ndncjrl+v53kAKNpYf/5z+d7mZsSDB/U8T+4mrdISeFrizJny0kfnYwE0w/5+McMzyCKSeliW3nLr\n68P7PDgfC6AZut2IlZXyPa2t5hF4Gu7ChYinT8v3rMgCaJbbt0ev3BJ6mkNLq8G2tyPu3Svfc0YW\nQDONam11OsVws19SF0NLq4V2dobDzvKyM7IAmqrbjVhdLd/r9SLef7+e56FM4GmoTz8tX6+vF/f8\nlgDQXLduFau0Bn3zjdZWE2hpNdDGRnknZSuyANplbS3i2bODa62txdDSapGtreFjI6zIAmiXW7eG\nh5i1tuol8DTIzz8Plz2tyAJon1E7MT98qLVVJy2thtjZGT23o5UF0F6rqxHPnx9ca23Nl52WW6B6\nCF2EnToB2m5/v9iEsPpW6uf7fJjhabhLl4bvaWUBtJ9DRptDhadmo1pZe3tOQAdISXXVVoRDRudB\nhafBhB2A9Nmfp34qPDV6992Iv//94NqQMkDaqkPMqjyzpcLTQN9/Xw47EfbbAUjd7dvla0vVF0eF\npyZnzhT77vQ5FBQgD3Zhnh8VnoZZWiqHnQiHggLkwi7M9RB4Fuy99yJevSrfswQdIB+jlqobYJ4/\ngWeBdnYiPv+8fG9316osgNx0uxErKwfXqjzzZ4Zngaq7Ke/uRly/Xs+zAFCv/f3iwOhBdmA+GUdL\nNMCVKxGffXZwbQk6AAaYZ0vgaYBqdUeKB8BZW7NllVbNqrtrbmz4QgZg/Flb5nlmT+CZs2vXiun7\nQZagA9DX7RY7MA+yIeHsCTxzdudO+doSdACqbt0avqfKM1sCzxxdvFi+Xl+3BB2AYd1uMbczyN48\ns2VoeY4MKgMwDau2TsbQcg3W18vXBpUBOIxjJ+ZH4JmD77+PePq0fM+gMgCHcezE/GhpzcEbb0T8\n9NPBtU0GAZhGtbW1uRnx4EF9z9MWWloLtLVVDjsRETdv1vIoALRUddWWKs/JCTwztLMz/AVpGToA\n06ruzWOW5+S0tGbo1Kny9uAbGxGPHtX3PAC0l8NFp6eltQA7O8NnoRhUBuC4Ru3ArMpzfALPjHz6\naflaKwuAkzLLMztaWjNw9WrE3bsH11pZAMyKFVtHp6U1Z4NhJ0IrC4DZqVZ5HCx6PALPCW1vl6/t\nqAzALJnlmQ2B54Tu3Stfq+4AMGtmeU5O4DmBS5fK1+vrqjsAzJ59eU5O4DmB+/fL13ZUBmBeVHlO\nRuA5pmolR3UHgHlS5TkZgeeYvvyyfK26A8C8WbF1fALPMVy8WL62MguARbBi6/gEnmP46qvytZVZ\nACyKWZ7jEXimpLoDQJ3M8hyPwDMl1R0A6maWZ3oCzxS2tsrXqjsA1MEsz/QEnilU07PqDgB1UeWZ\njsBzRNVdlVV3AKhTtxuxslK+p8oznsBzRNVdlVV3AKjb7dvl6xcv6nmONhB4juDKlfK1XZUBaILq\ne9HTp9pa43R6vd74Fzud3qTXc9HplK/v3xd4AGiGtbWIZ88Orjc3Ix48qO956tTpdKLX63VGvabC\nc4idnfK16g4ATWIjwqNR4TmE6g4ATafKU1DhmZHVVWEHgOZR5TmcwDPBhQvl6+Xlep4DACapLlF3\n3MQwgWeCr78uX3/8cT3PAQCHsUR9MoFnjO3t8rWNBgFosup71JMn2lqDDC2PYVgZgLbJfXjZ0PKU\nLEUHoI0ML4+nwjOC6g4AbZVzlUeF5wQsRQegTapVHsPLBYGnonpulqXoALSJ4eXRtLQqtLMAaLvV\n1Yjnzw+uc2lraWkdkWFlAFJQ3ZPn5ct6nqNJVHgGnDpV7E7Zp7oDQFvl2LFQ4TmiwbBjWBmANltd\nLV/nftSEwPMv1XaWYWUA2qy6Wuvhw7yHl7W0/iXH0h8AaVtZifjuu4Pr1IeXtbSmtLIi7ADQfn/7\nW/k65+FlgScifvihfP366/U8BwDMUvWX98eP821rCTwRcfnywcfLyxEff1zfswDALJ07V77OdXhZ\n4IliF8q+s2e1swBIR7WtlavsA8/gMFfE8PAyALRZ9Zf4jz6q5znqln3gGWxnRUQsLdXzHAAwL2++\nefDxhx/mOceTfeD59tvytfkdAFJz5szBx71ennM8WQeeH38sX1uODkCKbt4sX794Uc9z1CnrwLO1\nVb62HB2AFPllPvPA8/hx+Vo7C4AcPHmS3xxPtoHn1avy9dqaBAxAunI/TDTbwHP+fPn6tdfqeQ4A\nWITqYaK5zfFke3iow0IByM3ge1+nE/HFF2m99zk89BBWZwGQg8G2Vm7L07MMPNXNBq3OAiAHObe1\nsmxpaWcBkKvB98CNjYhHj+p7llnT0ppAOwuAXD1+nM/y9OwCz85O+Vo7C4Cc5Lo8PbvA8+mn5Wub\nDQKQk1zneLILPIO0swDITfV9rzrXmqqsA8/p03U/AQDUa2mp7idYjKwCT7VsJ/AAkKPBOZ6ff85j\ncDmrwDNYxlteNr8DQJ4G53ieP89jcDmrfXgG+5Tr68OnpQNALlJ8T7QPDwCQtWwCz6tXdT8BADTT\n06fpz/FkE3iqy/AMLAOQs9wOEs0m8Hz9dfnawDIAOcttA8JsAs+g1VUbDgKQt9zeB7MMPLlssgQA\nR5X6HE8Wgefq1fK1+R0AKI5Y6kt9jieLwPPZZ+Vr8zsAEHH7dvk65TmeLALP4N6J5ncAoJDT+2EW\ngWeQ+R0AyE92gQcAGC3lGdfkA8+1a+XrlP8wAWBag2dqffRRfc8xb8kfHvrmmxE//nhwff9+Xj1L\nAJjkD3+I+OGH4uNOJ+KLL9r7Ppn14aGDYWd3t71/iAAwD8vLBx+nvDQ9+QrPYKluczPiwYP6ngUA\nmmZ/P2Jr6+B6YyPi0aPaHudEsq7wDEp5fwEAOI5q56PldY6xsgo8nZGZDwBIXdKBp7pCyx48ADBZ\nqsWBpGd4Tp0ql+as0AKAYdWQ09b3y2xneBwpAQCHW10tX6e4UivpwDPIhoMAMNqtW+XrFBf5ZBN4\nWtyZA4C5yqEDkk3gAQDyJfAAACUpjoEkG3h++618neIfHgDMQ4qHiCYbeK5cOfh4eTni44/rexYA\naJPr1+t+gtlLNvDs7x98fPZsHgNZADALL1/W/QSzl2zgAQCO5/HjcuEgBQIPAJD85oMCDwCQ/OaD\nWQSeVA9CA4BZSX3WNYvAY5dlAMhbFoEHAJhOat2RJAPPzk752qaDADCd1LojSQaeO3fK1zYdBIDp\npFYsSDLwDKbS1dX0B7EAYNZSO14iycAzaHm57icAgPZJ7XiJ5ANPagkVABbBPjwtk1pCBQCml3zg\nSfEANABgOskHntSW1QEA00s+8KS2cRIALEJq75/JBx4VHgCYXmrvn8kHntQSKgAsQmrvn8kHntQS\nKgAsQmrvn8kHHgBgeo6WAACSl9rGvckHntR6kAAwL4Pvmalt3Jt84FlaqvsJAKAdBud2Utu4N/nA\nk1pJDgAWwdByy6RWkgMAppd84EnttFcAWITUZmCTDzwAwPS0tAAAWib5wJNaSQ4AFiG198/kA09q\nJTkAWITU3j+TDzypJVQAYHrJB57UEioALIKztACA5KW2cW/ygSe1hAoAi5Daxr3JB57UEioALIKz\ntFomtYQKAIuQ2gxs8oEntYQKAEwv+cCTWkIFgEVIbVuX5AMPADC91AoGAg8AkDyBBwBIXvKBJ7Ue\nJAAsQmrvn8kHntR6kACwCEtLdT/BbCUfeFJLqAAwD1evHny8vBzx8cf1Pcs8JB94UkuoADAPn312\n8PHZsxHdbn3PMg/JBx5HSwDA4QZHQFLsjiQZeN588+DjDz+M2N+v71kAoG1SnH9NMvCcOXPwca8X\n8f779T0LAFC/JAPPzZvl6xcv6nkOAGgjLa2WSG3QCgAWSUurpVJMqgDA0WUReFJMqgAwKzs75evT\np+t5jnnKIvAAAOPduVO+Tm3TwYhMAo+WFgCMN9gJWV1NcxY2i8CjpQUAR7O8XPcTzEcWgefpU5sP\nAsBRpHpCQac3ofzR6XR6k15vsrW1iGfPDq7Pn4/46qv6ngcAmmpw9GNzM+LBg/qe5SQ6nU70er2R\ngyzJVnhu3Spf//Wv9TwHALRJqpv1JlvhiUgnsQLAPA2+X25sRDx6VN+znESWFZ6qly/rfgIAaJ5L\nl8rXS0v1PMe8ZRN4WlyoAoC5uX+/fJ3iHjwRGQUeAGCyVPfgicgo8Nh8EAAmS7WdFZFR4HnyxF48\nADBJysWBpAPP6urBx71exPvv1/csANA01UNDVXhaqroXj5VaAHAgh0ND+5IOPNXBKyu1AOBADoeG\n9iUdeACAo0n10NC+rAKPQ0QBYLRUDw3tS/poiYiiRPf8+cG1Q0QBoGhnnRooe6RwBFPWR0vcvl2+\ndogoAAwfKZG65Cs8EQ4RBYCq6p479++3f2g56wpPVarH3gPAcaW+Qisiw8ADAJSlvOFgX3aBx0ot\nAHJ39Wr5+vTpep5jkbKY4Vlbi3j27ODaHA8AOUtxfifCDM/QERPmeACgsLKSRtg5TBaBJ4c/SAA4\njhzaWRGZBJ6qJ0/M8QCQpxzndyIymeGJMMcDABHpzu9EmOGJCHM8AFC1tpZO2DlMNoEnlz9QADiq\nU9mkgIwCT5U5HgByc+VK+TqX+Z2IzALP6mr5+v3363kOAKjDV1+Vrz/+uJ7nqENWgcccDwA5++WX\ng493d/Ma98hmlVafk9MByFXq74FWaY3x0Ud1PwEALMbFi3U/Qb2yq/CcPRvxj38UH3c6EV98kVdJ\nD4A8pbz/Tp8Kz4DXXz/4uNczuAxAfnI5P2tQdoHn5s3ytcFlAFJXXY4++Mt/LrJraUXkUdYDgL5c\n3ve0tCrsxwNArlZX0ww7h8ky8FT343n5sp7nAIB5u3atfL28XM9z1C3LllZEuby3vh7x+HF9zwIA\n85JLOytCS+tQztUCIAc5nY5elW3gMccDQOqq7azXXqvnOZog28BjjgeA1N25U77O6bDQqmxneCLK\nfU27LgOQmsH3ubW1iKdP63uWRTDDM8ZgW8uuywCk5OrV8nXO7ayIzAOPthYAqbp7t3ydczsrIvOW\nVkRey/UAyMfg+9vKSsSzZ/U9y6JoaU1gtRYAqdneLl/neHZWVfaBp9rWcpgoAG137175Ovd2VoTA\nM9S+sgkhAG22s1O+Xl83qhFhhiciiqV6g73Nzc2IBw/qex4AOK6cZ1PN8Byi2tZ6+FCVB4D2y/Vk\n9FEEnii+GFZWyvcMLwPQNk5GH0/g+Zfbt+t+AgA4GUdJjCfw/Eu15PfRR/U8BwDMgmHlMoFnwO9/\nf/Dxhx+a4wGgPba2Dj5eXo64ebO2R2kkgWfA4MZMztYCoE0Gf0k/e1Z1p0rgGVBNwzYhBKAN/vnP\nup+g+QSeATYhBKCNzp8vX58+Xc9zNJnAU+FsLQDa5vnz8rXVWcMEnorqJoTffKPKA0Bzvf12+drq\nrNEcLTGCoyYAaIucj5KocrTElBw1AUAbDC5Fj4jY2Mg37BxGhWcMVR4Amk51p0yF5xiqVR5L1AFo\nkuov4Q4KnUzgGcMSdQCa7MqV8rWDQicTeCawRB2AJvrhh+HNBi1Fn0zgmcASdQCaqLrRoKXohzO0\nfAjDywA0yU8/RbzxRvle7sPKfYaWT8ASdQCaZHOzfK26czQqPEegygNAE/z8c8SZM+V7qjsHVHhO\nyCwPAE1Qre7YaPDoVHiOSJUHgDr98kvE66+X76nulKnwzICNCAGoU7WVpbozHYHniKpfVE+famsB\nsBhXr0ZUGy6ffFLPs7SVwDOFwY0Iez0bEQKwGHfvlq93d1V3pmWGZwr7+8Mn0+qfAjBP770X8fnn\nB9erqxHfflvf8zTZpBkegWdKhpcBWCQnoh+doeUZskQdgEW5fLl8bZPB41PhOQZVHgAWQXVnOio8\nM+a4CQDm7eLF8rVl6Ccj8BxDt1tesRURcemS0APAbOzsRHz1VfmeZegnI/AcU7XKY5k6ALPy6afl\n67091Z2TEniOaVSVR2sLgJO6dq18vb4e8cEH9TxLSgwtn8D+ftHKGvxPZIAZgJMwqHx8hpbnpNuN\n+OKL8j3L1AE4ru3t8rVl6LOjwjMDlqkDMAuqOyejwjNnlqkDcFLvvlu+tgx9tlR4ZqRa5el0inaX\nL1YADvPqVcTSUvme6s70VHgW4NatcinSMnUAjmptrXxtdmf2BJ4ZMcAMwHFcvhzx3Xflezdv1vMs\nKdPSmjEDzABMozqovLdn353j0tJaIKepA3BUf/pT+domg/OjwjMHqjwAHObZs+HZHYPKJ6PCs2CW\nqQMwyc6OQeVFU+GZE1UeAMapzu1EqO7MggpPDVR5ABjl6tXhe05Dnz8VnjmyGSEAVVZlzY8KT01G\nbUZ46ZJKD0Cu3n67fL2xIewsisAzR6M2I7QDM0CerlwpxhsGffJJPc+SI4FnzrrdiNXV8j178wDk\n57PPytfmdhbLDM8C7O8XrazB/5RWbQHkY2Mj4smTg+v19YjHj+t7nlSZ4anZqNaWVVsAedjeLoed\nCGdl1UGFZ4Gs2gLIy6tXEUtL5XtWZc3PpAqPwLNAWlsAeTl1qvwzXytrvrS0GkJrCyAf58+Xw06E\nVladBJ4FG7VqyzJ1gLRcuRLxv/9bvre7a4ShTlpaNdjfj9jaKt9zhgpAOqq7Ke/uRly/Xs+z5MQM\nTwMZYAZI08pKxHffHVyb21kcMzwN5NgJgPS880457ESY22kKgacmk46dePky4sWLep4LgOP5+uvh\nVbd2U24OLa2aVVtbVaurRTXINwxAc+3sRHz6afnexkbEo0f1PE+uzPA02Ki9earM9wA0W3VIOcJi\nlDqY4Wmwfmtr1DdLX69nV06AptrYGL6nldU8Ak8DjJrnqbpxYzHPAsDRXbgwfE6WoyOaSeBpiG63\nWMo4it8UAJpne7sYVB4k7DSXGZ4GGbUhof0bAJrn558jzpwp3xN26meGpyW63Yi//a187+lTe/MA\nNMnOznDY2dgQdppOhaeBRi1V95sDQDNYkdVcKjwtU92FOSLiz39W6QGomxVZ7SXwNNC4VVuOngCo\nzzvvWJHVZgJPQ3W7xTfSIOdtAdRja2v0sRHCTnuY4Wm4USu3IvSLARZlezvi3r3yPWGnmRwt0XKj\nQo/jJgDm7+rViLt3y/eckdVcAk8CRq3c2twcLrECMBu//hqxvFy+t7xcHBLql81mskorAbduFQFn\n0DffmOcBmIdXryJ+//vyvU5H2Gkzgaclut2imrO6enCv1ytaXWtrgg/ArOzsRCwtRfz2W/m+MYJ2\nE3haZtQePc+eRbz/fj3PA5CSnZ2iilNlr532M8PTQvv7xfL0wT8aQ8wAJzdqF2UrstrD0HKChB6A\n2Tp3LuLsOULPAAAJlUlEQVT778v3bAHSLoaWE9TfjXnwtxEzPQDT29kpfpYKO2lT4Wm5UZWeCEvW\nAY5KGysdKjwJG1XpiYh4+FCVB+Awa2vD94SdNAk8CRgXerS3AMZ7663hDV2FnXRpaSVkXHvLMDNA\n2dJSsbngIGGn/bS0MjGu0tPr2acHoG91VdjJkcCTmH7ocQwFwLCzZyOePy/f290VdnKgpZWw6oGj\nWltArsbtoLy7G3H9+uKfh/mw8WCmRs30WK4O5ObVq2Jmp0obKz1meDLV7RYrtQY9fFj0r7W3gBz8\n9lvEmTPD94Wd/KjwJOzHHyPefHP0a3/8YzHXA5Cqq1cj7t4dvi/spEuFJ1OjNtTqe/RIlQdI1/a2\nsEOZwJOwX36Z/PqlS0IPkJ6trYh794bvCzt5E3gy1j9s9MaNup8EYDbefXf4F7n19eIgUGEnb2Z4\nEjbqQLyVlYjvvhvejdmpwEDbbWxEPHlSvre+HvH4cT3Pw+KZ4cnU6mr5+vXXI27fLvbiqXLuFtBW\nOzvFL3jVsLO8HHHzZj3PRPMIPAm7dSvi/Pmib33+fMT//E9Rxel2i3tVz56Z6wHa5dq10RsKbmwU\n91Wu6dPSypjDRoE2+/LL0T+nDCfny07LjLW/Xxws+vDh8GvmeoCmunAh4uuvh+/7uZU3gYdD7e8P\n78qs0gM00VtvRXz77fB9YQdDyxyq2x0ecu4vWzfMDDRBfzh5VNjZ2xN2mEzg4f/dulUcLlplmBmo\n2/b26OFke+xwVFpaDDHMDDTJ6dMRL18O3zecTJWWFlPpdotgU6329HoqPcDi9HoR584Nhx1VHY5D\n4GGkbjfiwYPRcz1CDzBvV65EnDoV8f335fu7u8XOySrNTEvgYaL+XM/gMRWGmYF5evfdiM8+G76/\nuxtx/frin4c0mOHhSMz1APO2szN6MDnCvA5HYx8eZkLoAebl8uXR5/xtbER88omfLxyNoWVmYtIw\n89aW9hZwPEtLo8PO3l7Eo0fCDrOhwsOxrK0V+/NUra4Wcz9+QAGH+f77iD/+MeKXX8r319eLU879\nHGFaKjzM3Khh5ogiBBloBg7z9tvFkvNq2LEKi3lR4eFExs31RJjtAYZdvRpx9+7o16zC4qRUeJib\nwbmearWnP9tz40YtjwY0zDvvjA87e3vCDvOlwsPM7O9HvP9+xMOHw685xRjyNamqYxUWs2RZOgu1\nv19UdqoMNENeJu2rI+gwD1paLFS3W5Snq5y6DvkYd7p5hOXm1EOFh7mZNNCs2gNpevUq4ne/K/63\nynJz5k2Fh1qM26gwwvJ1SNHFi8UmgtWw0z/d3HJz6iTwMFf9U9fv3x9exRWhzQUpePQo4o03Ir76\navg1++rQFAIPCzGp2tPrCT3QRq9eFe3pP/0p4qefhl+3rw5NYoaHhZu0fN1sD7TD22+P/h6OMKtD\nfSxLp5HGncdlh2ZorsMOCt7bi/jgg4U9DpQYWqaR+udxVfV3aDbQDM1x5Urxy8i478mNjWJWT9ih\nqVR4qN2kFpdqD9Tr2rWIO3fGv24DQZpEhYdGm7SSq1/t2dhQ7YFF2tkpvh/HhZ1+RccGgrSFwENj\nTFrJ9eSJ4AOL0A86k46EEHRoI4GHRul2I05N+KrsB59Ox4wPzNJhQae/eaCgQ1uZ4aFxRm1QOIml\n7HB8kw74jLDEnHYxw0PSHFMB0ztq68ouyaRC4KFxVleH7+3tFT98NzeL3zhHEXzgcNeuaV2RJy0t\nGqd6yvqojcz6S9m/+Wb0aex92l1QuHIl4rPPxr+udUUK7LRM6+zvFyHnxo3JP4AFH5js8uVi9eM4\n9tEhJQIPyZu0eeEgwYdcvPtuxN//Pv51FR1SJPCQjX7wefGiWMI+ifBDag7bFTlCRYe0CTxkSdWH\nXBx2oGeEig55sCydLA0eWTFq9+a+/uoumxnSJv1l5ZMO9IywvBz6VHjIxmC76+lTQ86001GqOaur\nEcvLER9/7GuYvGhpQcVRV3dFCD/U7+rViLt3D/88bStyJ/DAGP3g8/JlUfI/jPDDorx8GfHOO8UG\ngJOo5sABgQeO4KhDzoMEIGbhwoWI77+PeO21iNOnj/Y1qJoDwwQemMI0sz6DhB+O49Spo3+Nra0V\noUg1B0YTeOCYptnXZ5DwwyRH2S9nkGoOHI1l6XBM/aXtjx8XS3vPny/O9trcLJYDj2OpO1Xd7sEy\n8qOEnZWV4uvMknKYDRUeOKbjtL5UfvJx2GGdo7z2WhGQtazgeFR4YA4Gqz9ffFH8Nr6+PvnvGaz8\nnDoVcfZssTGcClD7/fOfEX/600EV5yhhZ2WlWGH1H/9RVA/v3Cm+poQdmD0VHpix48799KkCtcNx\nKjgRRch5/XVVHJgHQ8tQk+Ou+BokANXv1auIS5civvxy+r93ZaVYan76tJAD86alBTUZ1/ba3CyG\nnycNPve1uQ328uXBgHf/rzYMcV+6VH7mpaXpws7gwPGzZ8Wfv1YV1EuFB2o0WAGKOH4VKKKZlaC3\n3or49tvh+5ubRQCo27VrxZENJ/kxt74e8e//HnH9enGtigP10dKClhg86qLXO94M0KC6Q9C4Ctai\nA8/2dsS9e7P5Z62tFZU2LSpoHoEHWmqwAnT6dMRHH0V8+OHJKhJ9iwhD4wLP3l7EBx/M7t9z9Wox\nQDzrH1f9cBMh4EAbCDyQkGobrNM52sGnR7WyEnH79mze2E9a4dnZKZZqz/vH0OpqMafTD5V/+UvE\njRvCDbSNwAOJq4agiJPNA00yTSA6ylD2IvVXTEUcDCOr2kA6BB7I0P5+0Tb661+LgdrBitCTJ/Ov\nmtRhsAXVDzQqNpAPgQcoGVUR6geEX34pllI3yeCg8EcfDQc4lRogQuABpjAYhjqdciXoJG2yc+ci\nfvwx4g9/KLe6BkNMf3VahCADTE/gAWZi1KqxwWrLIAPAwKIJPABA8hwtAQBkTeABAJIn8AAAyRN4\nAIDkCTwAQPIEHgAgeQIPAJA8gQcASJ7AAwAkT+ABAJIn8AAAyRN4AIDkCTwAQPIEHgAgeQIPAJA8\ngQcASJ7AAwAkT+ABAJIn8AAAyRN4AIDkCTwAQPIEHgAgeQIPAJA8gQcASJ7AAwAkT+ABAJIn8AAA\nyRN4AIDkCTwAQPIEHgAgeQIPAJA8gQcASJ7AAwAkT+ABAJIn8AAAyRN4AIDkCTwAQPIEHgAgeQIP\nAJA8gQcASJ7AAwAkT+ABAJIn8AAAyTt92Cd0Op1FPAcAwNx0er1e3c8AADBXWloAQPIEHgAgeQIP\nAJA8gQcASJ7AAwAk7/8AuOqfZzqePy4AAAAASUVORK5CYII=\n",
       "text": [
        "<matplotlib.figure.Figure at 0x7fc1a28ac310>"
       ]
      }
     ],
     "prompt_number": 10
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "Create the assembly graph which each edge is a simple or a compound unitig rather than a raw string graph edge. "
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "utgs = G_asm.ctg_data[\"000000F\"][-1]\n",
      "utg_g = nx.DiGraph()\n",
      "for s,v,t in utgs:\n",
      "    utg_g.add_edge(s,t)\n",
      "position=nx.graphviz_layout(utg_g, prog='neato') \n",
      "figure(figsize=(10,10))\n",
      "ax=subplot(1,1,1)\n",
      "minx = 10\n",
      "miny = 10\n",
      "count = 0\n",
      "for e in utg_g.edges():\n",
      "    yy, xx = zip(position[e[0]], position[e[1]]) \n",
      "\n",
      "    xx = -array(xx)\n",
      "    yy = -array(yy)\n",
      "\n",
      "    ax.plot( xx, yy, \".-b\" ) \n",
      "\n",
      "    if min(xx) < minx:\n",
      "        minx = min(xx)\n",
      "    if min(yy) < miny:\n",
      "        miny = min(yy)\n",
      "\n",
      "    #print x,y\n",
      "xlim(minx*1.1,-minx*0.1)\n",
      "ylim(miny*1.1,-miny*0.1)\n",
      "ax.get_xaxis().set_visible(False)\n",
      "ax.get_yaxis().set_visible(False)"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "metadata": {},
       "output_type": "display_data",
       "png": "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\nvf8Pu2r4C/+hBTQAAAAASUVORK5CYII=\n",
       "text": [
        "<matplotlib.figure.Figure at 0x7fc19bc98550>"
       ]
      }
     ],
     "prompt_number": 11
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "Load sequences for each string graph edges so we can generate sequence given a path in the graph."
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "G_asm.load_sg_seq(\"preads4falcon.fasta\")"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 12
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "This shows how to get sequences for each simple or compound unitigs with a contig."
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "compound_path_seqs = {}\n",
      "print \"s\", \"v\", \"t\", \"type\", \"seq len\", \"path len\"\n",
      "for s,v,t in G_asm.ctg_data[\"000000F\"][-1]:\n",
      "    utg_data = G_asm.utg_data[(s,t,v)]\n",
      "    type_, length, score, path_or_edges = utg_data\n",
      "    \n",
      "    if type_ == \"simple\":\n",
      "        path = path_or_edges.split(\"~\")\n",
      "        seq = G_asm.get_seq_from_path( path )\n",
      "        print s, v, t, utg_data[0], len(seq)\n",
      "    else:\n",
      "        c_graph = nx.DiGraph()\n",
      "        simple_utgs = [ e.split(\"~\") for e in path_or_edges.split(\"|\")]\n",
      "        \n",
      "        for ss, tt, vv in simple_utgs:\n",
      "            type_, length, score, sub_path = G_asm.utg_data[ (ss,vv,tt) ]\n",
      "            sub_path = sub_path.split(\"~\")\n",
      "            v1 = sub_path[0]\n",
      "            for v2 in sub_path[1:]:\n",
      "                c_graph.add_edge( v1, v2, score = 10000000 - G_asm.sg_edges[ (v1, v2) ][1]  )\n",
      "                v1 = v2\n",
      "        seqs = []\n",
      "        while 1:\n",
      "            try:\n",
      "                shortest_path = nx.shortest_path( c_graph, s, t, weight = \"score\" )\n",
      "            except nx.exception.NetworkXNoPath:\n",
      "                break\n",
      "            seq = G_asm.get_seq_from_path( shortest_path )\n",
      "            seqs.append( (seq, shortest_path) )\n",
      "            \n",
      "            n0 = shortest_path[0]\n",
      "            for n1 in shortest_path[1:]:\n",
      "                c_graph.remove_edge(n0, n1)\n",
      "                n0 = n1\n",
      "        \n",
      "        compound_path_seqs[(s,v,t)] = seqs\n",
      "        for seq, subpath in seqs:            \n",
      "            print s, v, t, utg_data[0], len(seq), len(subpath)\n"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "s v t type seq len path len\n",
        "000011445:B NA 000003425:E compound 2736 3\n",
        "000011445:B NA 000003425:E compound 2681 3\n",
        "000003425:E 000009719:E 000006955:E simple 84196\n",
        "000006955:E NA 000017147:B compound 26315 7\n",
        "000006955:E NA 000017147:B compound 26357 7\n",
        "000017147:B 000012473:B 000010757:B simple 601191\n",
        "000010757:B NA 000015636:E compound 16169 3\n",
        "000010757:B NA 000015636:E compound 16194 3\n",
        "000015636:E 000004093:E 000015696:B simple 1469288\n",
        "000015696:B NA 000016941:B compound 16458 3\n",
        "000015696:B NA 000016941:B compound 16438 8\n",
        "000016941:B 000003353:B 000008783:B simple 88381\n",
        "000008783:B NA 000006338:B compound 26074 3\n",
        "000008783:B NA 000006338:B compound 26058 10\n",
        "000006338:B 000004932:B 000010623:B simple 206164\n",
        "000010623:B NA 000014991:B compound 30158 3\n",
        "000010623:B NA 000014991:B compound 30148 8\n",
        "000014991:B 000013790:E 000002926:B simple 392373\n",
        "000002926:B NA 000011761:B compound 25736 3\n",
        "000002926:B NA 000011761:B compound 25814 12\n",
        "000011761:B 000003659:E 000014184:E simple 184084\n",
        "000014184:E NA 000012028:E compound 14792 3\n",
        "000014184:E NA 000012028:E compound 14895 4\n",
        "000012028:E 000013461:E 000011445:B simple 1447372\n"
       ]
      }
     ],
     "prompt_number": 13
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      " Boilerplate code for using an aligner within `falcon_kit` for dot plots and alignment."
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "from falcon_kit import kup, falcon, DWA\n",
      "rcmap = dict(zip(\"ACGTacgtNn-\",\"TGCATGCANN-\"))\n",
      "def rc(seq):\n",
      "    return \"\".join([rcmap[c] for c in seq[::-1]])\n",
      "\n",
      "def get_aln_data(t_seq, q_seq):\n",
      "    aln_data = []\n",
      "    K = 8\n",
      "    seq0 = t_seq\n",
      "    lk_ptr = kup.allocate_kmer_lookup( 1 << (K * 2) )\n",
      "    sa_ptr = kup.allocate_seq( len(seq0) )\n",
      "    sda_ptr = kup.allocate_seq_addr( len(seq0) )\n",
      "    kup.add_sequence( 0, K, seq0, len(seq0), sda_ptr, sa_ptr, lk_ptr)\n",
      "    q_id = \"dummy\"\n",
      "    \n",
      "    kmer_match_ptr = kup.find_kmer_pos_for_seq(q_seq, len(q_seq), K, sda_ptr, lk_ptr)\n",
      "    kmer_match = kmer_match_ptr[0]\n",
      "    aln_range_ptr = kup.find_best_aln_range(kmer_match_ptr, K, K*5, 12)\n",
      "    aln_range = aln_range_ptr[0]\n",
      "    x,y = zip( * [ (kmer_match.query_pos[i], kmer_match.target_pos[i]) for i in range(kmer_match.count)] )\n",
      "    kup.free_kmer_match(kmer_match_ptr)\n",
      "    s1, e1, s2, e2 = aln_range.s1, aln_range.e1, aln_range.s2, aln_range.e2\n",
      "    \n",
      "    if e1 - s1 > 100:\n",
      "\n",
      "        alignment = DWA.align(q_seq[s1:e1], e1-s1,\n",
      "                              seq0[s2:e2], e2-s2,\n",
      "                              100,1)\n",
      "\n",
      "        if alignment[0].aln_str_size > 100:\n",
      "            aln_data.append( ( q_id, 0, s1, e1, len(q_seq), s2, e2, len(seq0), alignment[0].aln_str_size, alignment[0].dist ) )\n",
      "            aln_str1 = alignment[0].q_aln_str\n",
      "            aln_str0 = alignment[0].t_aln_str\n",
      "\n",
      "        DWA.free_alignment(alignment)\n",
      "\n",
      "    kup.free_kmer_lookup(lk_ptr)\n",
      "    kup.free_seq_array(sa_ptr)\n",
      "    kup.free_seq_addr_array(sda_ptr)\n",
      "    return aln_data, x, y"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 14
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "Plot the subgraph of each compound path and do alignment between different subpaths within the compound path.  One can see 7 out of 8 compound path might caused by errors where the identity between the alternative paths are high. However, the path starts at `000006955:E` and ends at `000017147:B` shows a 2kb inversion. This appears to be realy bioligcal polymorphism in a population of E. coli cells."
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "print \"s\", \"v\", \"t\", \"aln_identity\", \"aln_coverage\"\n",
      "\n",
      "for s,v,t in compound_path_seqs:\n",
      "    \n",
      "    sg = G_asm.get_sg_for_utg((s,t,v))\n",
      "    position=nx.graphviz_layout(sg, prog='dot') \n",
      "    figure(figsize=(10,4))\n",
      "    ax=subplot(1,2,1)\n",
      "    minx = 10\n",
      "    miny = 10\n",
      "    count = 0\n",
      "    for e in sg.edges():\n",
      "        yy, xx = zip(position[e[0]], position[e[1]]) \n",
      "        col = \"k\"\n",
      "        xx = -array(xx)\n",
      "        yy = -array(yy)\n",
      "        ax.plot( xx, yy, \".-\"+col ) \n",
      "        if min(xx) < minx:\n",
      "            minx = min(xx)\n",
      "        if min(yy) < miny:\n",
      "            miny = min(yy)\n",
      "\n",
      "        #print x,y\n",
      "    xlim(minx*1.1,-minx*0.1)\n",
      "    ylim(miny*1.1,-miny*0.1)\n",
      "    ax.get_xaxis().set_visible(False)\n",
      "    ax.get_yaxis().set_visible(False)\n",
      "    \n",
      "    seqs = compound_path_seqs[(s,v,t)]\n",
      "    seq0 = seqs[0][0]\n",
      "    ax=subplot(1,2,2)\n",
      "    for seq, path in seqs[1:]:\n",
      "        aln_data, x, y = get_aln_data(seq0, seq)\n", # OUT OF DATE!
      "        print s,v,t, 1.0-1.0*aln_data[-1][-1] / aln_data[-1][-2], 1.0*(aln_data[-1][3]-aln_data[-1][2])/aln_data[-1][4]\n",
      "        \n",
      "        plot(x, y,'.b', markersize=0.2)\n",
      "        seq = rc(seq)\n",
      "        aln_data, rx, ry = get_aln_data(seq0, seq)\n",
      "        rx = np.array(rx)\n",
      "        rx = len(seq) - rx\n",
      "        plot(rx, ry,'.r', markersize=0.2)\n",
      "        text(0, 0, \"%s %s %s\" % (s, v, t))\n",
      "        \n",
      "        \n",
      "        \n"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "s v t aln_identity aln_coverage\n",
        "000011445:B"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        " NA 000003425:E 0.97798972854 0.995151063036\n",
        "000010757:B"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        " NA 000015636:E 0.99697456162 0.999382487341\n",
        "000014184:E"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        " NA 000012028:E 0.98953722334 0.999261497147\n",
        "000006955:E"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        " NA 000017147:B 0.9952 0.923473839967\n",
        "000015696:B"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        " NA 000016941:B 0.995871782419 0.999391653486\n",
        "000002926:B"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        " NA 000011761:B 0.990612686394 0.999612613311\n",
        "000008783:B"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        " NA 000006338:B 0.99254387642 0.999616240694\n",
        "000010623:B"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        " NA 000014991:B 0.992332352844 0.999601963646\n"
       ]
      },
      {
       "metadata": {},
       "output_type": "display_data",
       "png": "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\nOYPd2zPyH44uswlIf0bOUUBy2L59+7j77rt59913iYuL46mnniIsLDB+LdWrV2flypV07tyZ5s2b\nM23aNE0uKRLAdDrnD545jo78mkG1shlqOQpBgfFJHKQ+//xzoqKiaNiwIRs3bqRBgwZOl3TJwsLC\nePrpp1m1ahVvv/02nTt3Jj093emyRETyzROOMjOhdkRJqte/jCYcNQEFLAUkB/z222888sgjPP30\n03zyySe88sorFC1a1OmyLkujRo3YuHEj9erVIyoqikWLFjldkohf8udWGn2Wu4bxp6S4wlH16lCx\npnZKqFJA8rG1a9cSGRlJWFgYSUlJ3HTTTU6X5DVXXHEFr732GvPmzWPIkCH069ePY8eOOV2WiMhF\nuewJICWoKCD5yIkTJxgxYgT3338/b775JpMnT6Z06dJOl1Ugbr75ZpKSksjKyiIqKor169c7XZKI\n31ArjX/SBJCSmwKSD/zwww80b96clJQUkpKS6NSpk9MlFbgrr7ySqVOn8ve//50uXbrw7LPPcuLE\nCafLEhE5iyaAlLwoIBWg06dP88Ybb9C6dWsGDx7MggULqBhiX0vuuecekpOT2bJlCzfccAMpKSlO\nlyRyfv7cSUi8zqkJIMX/aaLIAvLLL7/Qt29fTpw4wcaNG7nuuuucLskxlSpVYuHChUydOpVWrVrx\n7LPPMnjw4ICZzkBEgo9npNrBg5oAUvKmTygvs9YyZ84cmjZtSrt27fj6669DOhx5GGN49NFH+fbb\nb/noo49o27YtO3fudLoskbOpk1DQ84Sjw7syuLac5jiSvCkgedHBgwe5//77ee2111i+fDnDhw/X\nJThyqVWrFmvWrKFNmzY0adKEDz74QJNLiojPpKe7whFA3bqu02qSt1A/26yA5CVLly4lIiKCa6+9\nlvj4eKKiopwuyW8VLlyYkSNHsnTpUl566SW6d+/OoUOHnC5LRIKcpzM2uIKR5jiS81FAukwZGRkM\nGDCAxx9/nDlz5vD6669TrFgxp8sKCI0bNyYhIYEqVaoQERHB8uXLnS5JRIKUOmNfulA/26yAdBk2\nbtxIdHQ0v/32G8nJybRu3drpkgJO8eLFGT9+PDNnzuTRRx9l0KBBZGZmOl2WiAQRTziqVg0aNAjt\nD325eApI+XDy5ElGjx5Np06dePnll5k1axZlypRxuqyA1qZNG5KTkzl06BCNGzcmPj7e6ZJEJMBl\n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\nTIy703avHI+Ry+Q5TaNwJKEuIFqQcjp16hRjxozhrbfe4q233qJHjx5OlyRB5NChQ/Tv358ffviB\nOXPmEB2QhwDjAAAe6klEQVQd7XRJPleQLUjGmLlAK6A8rv5GfwM+Bz4CrgXSgPuttUfc248EHgZO\nAUOstcvc65sAM4DiwJfW2sHneD2/O4b5K09n7BIlXMFI/bDzz6l5PbNfF/+ZWNTXvHn8CriA5JGQ\nkEDPnj2Jiorivffey77ulUh+LVu2jEceeYSuXbvyyiuvULx4cadLcoRm0g5NqamuofxqObp8CkjO\nUUBy+/333xk+fDiffvop06ZNo23btk6XJAEoMzOToUOHsnDhQqZPn06bNm2cLslRCkihJT3d9cHq\nmcUgBD9TJYiEXB+kcylevDhvvfUW06ZN4+GHH2bIkCH8/vvvTpclAWTz5s00btyYI0eOsGXLlpAP\nRxJkLjD22zM7dmamwpFIbgEdkDzatm3Lli1b2L9/P40bNyYhIcHpksTPnTp1ihdeeIGOHTvywgsv\nMGfOHMqUKXPhB4oEidRU2LnTNTu2rqsmcraAPsWWl7lz5zJkyBAGDx7M8OHDKVzYr6d6Egds376d\nXr16UaZMGaZNm0bVqppjMCedYgt+nnBUrRrUrOl0NSLeo1Ns59GjRw++++47vv76a26++WZ++ukn\np0sSP2GtZcKECdx444307t2bpUuXKhxJ0LnQjMoZGa5TagpHIucXlM0r4eHhLFu2jHfffZcWLVrw\n0ksv0a9fP82AHML27NnDI488wv79+1m7di316tVzuiQRn0tNdYUjnVITubCga0HyCAsLY9CgQaxZ\ns4Z//vOfdOzYkb179zpdljhg/vz5REdH06xZM9avX69wJEEtr87WGRmu0WqZma55jhSORC4saAOS\nx/XXX8+GDRto3LgxUVFRfPrpp06XJD5y9OhRevfuzYgRI/j88895/vnnKVKkiNNlifiU59Ih+/e7\nWo50Wk3k4gR9QAIoWrQoL774Ip999hnDhg2jb9++HD161OmypADFxcURERFBqVKlSExMJCYmxumS\nRBzhaTmqUEEtRyKXIiQCkkeLFi1ITEykWLFiREVFsWbNGqdLEi87fvw4zzzzDA8++CATJ07kvffe\no6Q+FSQEeTprlyx5gdmxL9SrWyREhVRAAihVqhQTJ07knXfeoXv37gwdOpT//e9/TpclXpCUlESz\n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\nbt261UZGRtoTJ07Y1NRUW6tWLXv69GlrrbXNmjWzGzdutNZa2759e7tkyRJrrbVpaWl2y5Yttnfv\n3vaTTz45Y3+uXLnSLlq0yHbs2PGsfb1582bbq1cvW7p06TPWnzp1yrZu3dp26NDhjOerUaOGPXjw\nYF6/tmwzZsywgwYNyv75gQcesNOnTz9ru+nTp9trr73WduvWLXtdw4YN7Y4dO7J/Hjp0qL3rrrts\nnz59zvl659on7777ru3fv7+11toPP/ww+3UOHjxor7vuOnv48GF7+PBhe91119kjR45Ya63t2rWr\nnTdvnrXW2ieeeMJOmDDBWmvt4sWLbfv27a211n777bc2JiYm+/UzMjKstdaePHnSxsTE2G+++Sb7\nvl9++cXefvvtZ+y3xMREu2fPHmuttT/88IOtWrVq9vaxsbE2ISHhnO/VWmtXf/mlvevOO8+7jTjH\nm8cvtSCJSFCrXbs2NWrUoEiRInTv3p2lSz+nenX4+uuF9OnTB4A+ffqwYMECAD7//HN69OhBkSJF\nqFGjBrVr12bjxo3s2bOH3377Lbvlpnfv3tmPqV69Oo0aNSIs7OxD6q233kqpUqXOWp+VlcXQoUMZ\nO3asJ8xl+8c//sF9991HhQoVznpc7m3z4tnm1KlTZGRkULZs2bO2McbQsWNHtm7dyvbt2/N8jk8/\n/ZSJEyeyatUq/ve//521zfn2ycKFf+zfe++9l5UrVwKwbNky2rVrR5kyZShTpgxt27ZlyZIlWGtZ\nvXo19913H3D278TzXDExMRw5coR9+/YBUKJECQBOnDhBVlbWGe/16aefZuzYsWfUHBUVxTXXXANA\n/fr1+f33389oqbqU/Ss5BOFEoApIIhKwjDF3GGO2GWN+NMYMy2ubatWqAa7TaldcEc7Ro7upWBH2\n7dtHpUqVAKhUqVL2B+6vv/5KeHh49uPDw8PZvXv3WeurVq3K7t278137O++8w9133539Ye2xe/du\nPv/8c/r37+95jznfL7fddhtNmzZl8uTJ2esnTZrEpEmTANeH97x584iOjiY8PJzDhw/TsWPHPGsI\nCwtj6NChvPLKK2fdt379emrVqkWVKlWIjY1l8eLFZ22ze/fuc+6T3bt3Z+/7woULc9VVV3Hw4MFz\n7t9Dhw5RpkyZ7JCZ87l+/fXX7OfyPGbXrl2AK2hGRUVRqVIlWrduTf369QFXqAoPDyciIiLP9w4w\n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\nkVz+H2u0gdemx5O1AAAAAElFTkSuQmCC\n",
       "text": [
        "<matplotlib.figure.Figure at 0x7fc1a3fb6750>"
       ]
      },
      {
       "metadata": {},
       "output_type": "display_data",
       "png": "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\nH29rjcBSPel9AAAAAElFTkSuQmCC\n",
       "text": [
        "<matplotlib.figure.Figure at 0x7fc19bb58850>"
       ]
      },
      {
       "metadata": {},
       "output_type": "display_data",
       "png": "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\njUaj0Wi88H9a1PCNPEKs2gAAAABJRU5ErkJggg==\n",
       "text": [
        "<matplotlib.figure.Figure at 0x7fc1a2a7f050>"
       ]
      },
      {
       "metadata": {},
       "output_type": "display_data",
       "png": "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\nmf1WmauyVNrX9ut
Download .txt
gitextract_zc9ere_s/

├── .gitignore
├── .gitmodules
├── .travis.yml
├── LICENSE
├── MANIFEST.in
├── README.md
├── bamboo_build.sh
├── bamboo_wheel.sh
├── doc/
│   └── README
├── examples/
│   ├── build_env.sh
│   ├── build_env2.sh
│   ├── ecoli_asm_graph_exploration.ipynb
│   ├── fc_run_LG.cfg
│   ├── fc_run_arab.cfg
│   ├── fc_run_dmel.cfg
│   ├── fc_run_ecoli.cfg
│   ├── fc_run_ecoli_2.cfg
│   ├── logging.json
│   └── run_ecoli_test.sh
├── falcon.snake
├── falcon_kit/
│   ├── FastaReader.py
│   ├── __init__.py
│   ├── bash.py
│   ├── falcon_kit.py
│   ├── fc_asm_graph.py
│   ├── functional.py
│   ├── gfa_graph.py
│   ├── io.py
│   ├── mains/
│   │   ├── LAmerge.py
│   │   ├── LAsort.py
│   │   ├── __init__.py
│   │   ├── actg_coordinate.py
│   │   ├── build_pdb.py
│   │   ├── build_rdb.py
│   │   ├── calc_cutoff.py
│   │   ├── collect_contig_gfa.py
│   │   ├── collect_pread_gfa.py
│   │   ├── consensus.py
│   │   ├── consensus_gather_fasta_fofn.py
│   │   ├── consensus_scatter.py
│   │   ├── consensus_split.py
│   │   ├── consensus_task.py
│   │   ├── contig_annotate.py
│   │   ├── copy_fofn.py
│   │   ├── copy_mapped.py
│   │   ├── ctg_link_analysis.py
│   │   ├── daligner.py
│   │   ├── daligner_gather_las_list.py
│   │   ├── daligner_scatter.py
│   │   ├── daligner_split.py
│   │   ├── dazzler.py
│   │   ├── dedup_a_tigs.py
│   │   ├── fasta2fasta.py
│   │   ├── fetch_reads.py
│   │   ├── gen_gfa_v1.py
│   │   ├── gen_gfa_v2.py
│   │   ├── generate_read_to_ctg_map.py
│   │   ├── generic_gather.py
│   │   ├── generic_run_units_of_work.py
│   │   ├── generic_scatter_one_uow.py
│   │   ├── generic_unsplit.py
│   │   ├── get_read_ctg_map.py
│   │   ├── graph_to_contig.py
│   │   ├── graph_to_utgs.py
│   │   ├── hgap4_adapt.py
│   │   ├── las_merge.py
│   │   ├── las_merge_gather.py
│   │   ├── las_merge_scatter.py
│   │   ├── las_merge_split.py
│   │   ├── ovlp_filter.py
│   │   ├── ovlp_stats.py
│   │   ├── ovlp_to_graph.py
│   │   ├── pr_ctg_track.py
│   │   ├── report_pre_assembly.py
│   │   ├── rr_ctg_track.py
│   │   ├── run1.py
│   │   ├── symlink_mapped.py
│   │   ├── task_report_pre_assembly.py
│   │   └── tasks.py
│   ├── multiproc.py
│   ├── pype.py
│   ├── pype_tasks.py
│   ├── run_support.py
│   ├── snakemake.py
│   ├── stats_preassembly.py
│   ├── tiling_path.py
│   └── util/
│       ├── __init__.py
│       ├── io.py
│       └── system.py
├── makefile
├── setup.cfg
├── setup.py
├── src/
│   ├── c/
│   │   ├── DW_banded.c
│   │   ├── Makefile
│   │   ├── Makefile.osx
│   │   ├── common.h
│   │   ├── ext_falcon.c
│   │   ├── falcon.c
│   │   └── kmer_lookup.c
│   ├── py_scripts/
│   │   ├── fc_actg_coordinate.py
│   │   ├── fc_consensus.py
│   │   ├── fc_contig_annotate.py
│   │   ├── fc_ctg_link_analysis.py
│   │   ├── fc_dedup_a_tigs.py
│   │   ├── fc_graph_to_contig.py
│   │   ├── fc_graph_to_utgs.py
│   │   ├── fc_ovlp_filter.py
│   │   ├── fc_ovlp_stats.py
│   │   ├── fc_ovlp_to_graph.py
│   │   └── fc_run.py
│   └── utils/
│       └── fetch_preads.py
├── test/
│   ├── HPCdaligner_synth0.sh
│   ├── HPCdaligner_synth0_new.sh
│   ├── HPCdaligner_synth0_preads.sh
│   ├── helpers.py
│   ├── se161.sh
│   ├── test_actg_coordinate.py
│   ├── test_calc_cutoff.py
│   ├── test_collect_contig_gfa.py
│   ├── test_collect_pread_gfa.py
│   ├── test_consensus.py
│   ├── test_contig_annotate.py
│   ├── test_ctg_link_analysis.py
│   ├── test_functional.py
│   ├── test_gen_gfa_v1.py
│   ├── test_gen_gfa_v2.py
│   ├── test_gfa_graph.py
│   ├── test_graph_to_contig.py
│   ├── test_graph_to_utgs.py
│   ├── test_ovlp_filter.py
│   ├── test_ovlp_stats.py
│   ├── test_ovlp_to_graph.py
│   ├── test_run.py
│   ├── test_run_LG.py
│   ├── test_run_support.py
│   ├── test_stats_preassembly.py
│   ├── test_tiling_path.py
│   ├── test_util_io.py
│   └── test_util_system.py
├── test_data/
│   ├── calc_cutoff/
│   │   └── partial_capture.txt
│   ├── gfa-1/
│   │   ├── a_ctg.fa
│   │   ├── a_ctg_tiling_path
│   │   ├── ctg_paths
│   │   ├── expected-1-sg-r-c.gfa
│   │   ├── expected-2-tiling-r-c.gfa
│   │   ├── expected-3-tiling-no_r-c.gfa
│   │   ├── expected-4-tiling-no_r-no_c.gfa
│   │   ├── expected-5-sg-no_r-no_c.gfa
│   │   ├── expected-6-tiling-no_r-no_c-minlen.gfa
│   │   ├── expected-7-nx-no_r-no_c.gfa
│   │   ├── expected-8-nx-tiling-no_r-no_c.gfa
│   │   ├── expected-9-nx-tiling-r-c.gfa
│   │   ├── p_ctg.fa
│   │   ├── p_ctg_tiling_path
│   │   ├── preads4falcon.fasta
│   │   ├── sg.gexf
│   │   ├── sg_edges_list
│   │   └── utg_data
│   ├── p_ctg_tiling_path_1
│   ├── p_ctg_tiling_path_2
│   ├── t1.fa
│   ├── t1.fofn
│   ├── t2.fa
│   └── t2.fofn
└── travis.sh
Download .txt
SYMBOL INDEX (753 symbols across 88 files)

FILE: falcon_kit/FastaReader.py
  function wrap (line 20) | def wrap(s, columns):
  function splitFastaHeader (line 25) | def splitFastaHeader(name):
  function splitFileContents (line 38) | def splitFileContents(f, delimiter, BLOCKSIZE=8192):
  class FastaRecord (line 57) | class FastaRecord(object):
    method __init__ (line 64) | def __init__(self, name, sequence):
    method name (line 77) | def name(self):
    method id (line 85) | def id(self):
    method metadata (line 93) | def metadata(self):
    method sequence (line 101) | def sequence(self):
    method length (line 110) | def length(self):
    method md5 (line 117) | def md5(self):
    method fromString (line 124) | def fromString(cls, s):
    method __eq__ (line 139) | def __eq__(self, other):
    method __ne__ (line 146) | def __ne__(self, other):
    method __str__ (line 149) | def __str__(self):
  function yield_fasta_records (line 160) | def yield_fasta_records(f, fn):
  function stream_stdout (line 174) | def stream_stdout(call, fn):
  function open_fasta_reader (line 181) | def open_fasta_reader(fn):
  class FastaReader (line 215) | class FastaReader(object):
    method __iter__ (line 219) | def __iter__(self):
    method __init__ (line 224) | def __init__(self, f):

FILE: falcon_kit/bash.py
  function mkdir (line 22) | def mkdir(d):
  function make_executable (line 27) | def make_executable(path):
  function write_sub_script (line 35) | def write_sub_script(ofs, script):
  function write_script (line 59) | def write_script(script, script_fn, job_done_fn=None):
  function write_script_and_wrapper_top (line 66) | def write_script_and_wrapper_top(script, wrapper_fn, job_done):
  function select_rundir (line 99) | def select_rundir(tmpdir, wdir, script):
  function write_script_and_wrapper_for_tmp (line 105) | def write_script_and_wrapper_for_tmp(tmpdir, script, wrapper_fn, job_done):
  function filter_DBsplit_option (line 133) | def filter_DBsplit_option(opt):
  function update_dict_entry (line 142) | def update_dict_entry(d, key, func):
  function get_last_block (line 146) | def get_last_block(fn):
  function script_build_rdb (line 164) | def script_build_rdb(config, input_fofn_fn, run_jobs_bfn, length_cutoff_...
  function script_build_pdb (line 215) | def script_build_pdb(config, input_fofn_bfn, run_jobs_bfn):
  function script_run_DB2Falcon (line 240) | def script_run_DB2Falcon(config, preads4falcon_fn, preads_db):
  function scripts_daligner (line 254) | def scripts_daligner(run_jobs_fn, db_prefix, rdb_build_done, nblock, pre...
  function scripts_merge (line 288) | def scripts_merge(config, db_prefix, run_jobs_fn):
  function script_run_consensus (line 335) | def script_run_consensus(config, db_fn, las_fn, out_file_bfn):
  function script_run_falcon_asm (line 374) | def script_run_falcon_asm(config, las_fofn_fn, preads4falcon_fasta_fn, d...
  function script_run_report_pre_assembly (line 422) | def script_run_report_pre_assembly(i_raw_reads_db_fn, i_preads_fofn_fn, ...

FILE: falcon_kit/falcon_kit.py
  class KmerLookup (line 19) | class KmerLookup(Structure):
  class KmerMatch (line 25) | class KmerMatch(Structure):
  class AlnRange (line 31) | class AlnRange(Structure):
  class ConsensusData (line 39) | class ConsensusData(Structure):
  class Alignment (line 86) | class Alignment(Structure):
  function get_alignment (line 125) | def get_alignment(seq1, seq0):

FILE: falcon_kit/fc_asm_graph.py
  function reverse_end (line 11) | def reverse_end(node_id):
  class AsmGraph (line 17) | class AsmGraph(object):
    method __init__ (line 19) | def __init__(self, sg_file, utg_file, ctg_file):
    method load_sg_data (line 34) | def load_sg_data(self, sg_file):
    method load_sg_seq (line 47) | def load_sg_seq(self, fasta_fn):
    method get_seq_from_path (line 81) | def get_seq_from_path(self, path):
    method load_utg_data (line 91) | def load_utg_data(self, utg_file):
    method load_ctg_data (line 103) | def load_ctg_data(self, ctg_file):
    method get_sg_for_utg (line 128) | def get_sg_for_utg(self, utg_id):
    method get_sg_for_ctg (line 142) | def get_sg_for_ctg(self, ctg_id):
    method build_node_map (line 163) | def build_node_map(self):

FILE: falcon_kit/functional.py
  function _verify_pairs (line 17) | def _verify_pairs(pairs1, pairs2):
  function skip_LAcheck (line 28) | def skip_LAcheck(bash):
  function get_daligner_job_descriptions_sans_LAcheck (line 40) | def get_daligner_job_descriptions_sans_LAcheck(run_jobs_stream, db_prefi...
  function get_daligner_job_descriptions (line 56) | def get_daligner_job_descriptions(run_jobs_stream, db_prefix, single=Fal...
  function first_block_las (line 99) | def first_block_las(line):
  function get_las_filenames (line 112) | def get_las_filenames(mjob_data, db_prefix):
  function get_mjob_data (line 152) | def get_mjob_data(run_jobs_stream):
  function yield_args_from_line (line 191) | def yield_args_from_line(bash_line):
  function xform_script_for_preads (line 204) | def xform_script_for_preads(script):
  function xform_script_for_raw_reads (line 210) | def xform_script_for_raw_reads(script):
  function get_script_xformer (line 214) | def get_script_xformer(pread_aln):
  class GenomeCoverageError (line 221) | class GenomeCoverageError(Exception):
  function calc_cutoff_from_reverse_sorted_readlength_counts (line 225) | def calc_cutoff_from_reverse_sorted_readlength_counts(rl_counts, target):
  function num2int (line 247) | def num2int(num):
  function get_reverse_sorted_readlength_counts_from_DBstats (line 255) | def get_reverse_sorted_readlength_counts_from_DBstats(DBstats_output):
  function calc_cutoff (line 277) | def calc_cutoff(target, DBstats_output):
  function parse_2columns_of_ints (line 286) | def parse_2columns_of_ints(data):
  function weighted_average (line 301) | def weighted_average(cols):
  function parsed_readlengths_from_dbdump_output (line 311) | def parsed_readlengths_from_dbdump_output(output):
  function mapped_readlengths_from_dbdump_output (line 325) | def mapped_readlengths_from_dbdump_output(output):
  function average_difference (line 352) | def average_difference(dictA, dictB):
  function calc_metric_fragmentation (line 365) | def calc_metric_fragmentation(perl_counts_output):
  function calc_metric_truncation (line 372) | def calc_metric_truncation(dbdump_output, length_pairs_output):
  function choose_cat_fasta (line 381) | def choose_cat_fasta(fofn):
  function dash_flags (line 404) | def dash_flags(val):
  function cfg_tobool (line 419) | def cfg_tobool(v):
  class LowerDict (line 456) | class LowerDict(dict):  # dicts take a mapping or iterable as their opti...
    method __init__ (line 458) | def __init__(self):
    method __getitem__ (line 461) | def __getitem__(self, k):
    method __setitem__ (line 463) | def __setitem__(self, k, v):
    method __delitem__ (line 465) | def __delitem__(self, k):
    method get (line 467) | def get(self, k, default=None):
    method setdefault (line 469) | def setdefault(self, k, default=None):
    method pop (line 471) | def pop(self, k, v=_RaiseKeyError):
    method __contains__ (line 477) | def __contains__(self, k):
    method fromkeys (line 482) | def fromkeys(cls, keys, v=None):
    method __repr__ (line 484) | def __repr__(self):
  function toLowerDict (line 490) | def toLowerDict(cfg):

FILE: falcon_kit/gfa_graph.py
  class GFAGraph (line 50) | class GFAGraph:
    method __init__ (line 51) | def __init__(self):
    method add_node (line 63) | def add_node(self, node_name, node_len, node_seq='*', tags={}, labels=...
    method add_edge (line 83) | def add_edge(self, edge_name, source, source_orient, sink, sink_orient...
    method add_path (line 129) | def add_path(self, path_name, path_nodes, path_cigars, tags={}, labels...
    method write_gfa_v1 (line 158) | def write_gfa_v1(self, fp_out):
    method write_gfa_v2 (line 189) | def write_gfa_v2(self, fp_out):
  function serialize_gfa (line 225) | def serialize_gfa(gfa_graph):
  function deserialize_gfa (line 232) | def deserialize_gfa(fp_in):

FILE: falcon_kit/io.py
  function log (line 21) | def log(*msgs):
  function validate_config (line 25) | def validate_config(config):
  function update_env_from_config (line 48) | def update_env_from_config(config, fn):
  function eng (line 57) | def eng(number):
  function read_as_msgpack (line 61) | def read_as_msgpack(stream):
  function read_as_json (line 68) | def read_as_json(stream):
  function write_as_msgpack (line 75) | def write_as_msgpack(stream, val):
  function write_as_json (line 82) | def write_as_json(stream, val):
  function deserialize (line 89) | def deserialize(fn):
  function serialize (line 103) | def serialize(fn, val):
  function yield_bam_fn (line 119) | def yield_bam_fn(input_bam_fofn_fn):
  function yield_abspath_from_fofn (line 132) | def yield_abspath_from_fofn(fofn_fn):
  function rmdirs (line 148) | def rmdirs(*dirnames):
  function rmdir (line 153) | def rmdir(d):
  function rm_force (line 156) | def rm_force(*fns):

FILE: falcon_kit/mains/LAmerge.py
  function log (line 18) | def log(msg):
  function system (line 22) | def system(call, checked=False):
  function main (line 33) | def main(argv=sys.argv):

FILE: falcon_kit/mains/LAsort.py
  function log (line 15) | def log(msg):
  function system (line 19) | def system(call, checked=False):
  function main (line 30) | def main(argv=sys.argv):

FILE: falcon_kit/mains/actg_coordinate.py
  function main (line 8) | def main(argv=sys.argv):

FILE: falcon_kit/mains/build_pdb.py
  function run (line 12) | def run(config_fn, input_fofn_fn, job_done_fn, run_jobs_fn):
  class HelpF (line 24) | class HelpF(argparse.RawTextHelpFormatter, argparse.ArgumentDefaultsHelp...
  function parse_args (line 28) | def parse_args(argv):
  function main (line 56) | def main(argv=sys.argv):

FILE: falcon_kit/mains/build_rdb.py
  function run (line 13) | def run(config_fn, length_cutoff_fn, input_fofn_fn, job_done_fn, run_job...
  class HelpF (line 31) | class HelpF(argparse.RawTextHelpFormatter, argparse.ArgumentDefaultsHelp...
  function parse_args (line 35) | def parse_args(argv):
  function main (line 67) | def main(argv=sys.argv):

FILE: falcon_kit/mains/calc_cutoff.py
  function main (line 11) | def main(argv=sys.argv):

FILE: falcon_kit/mains/collect_contig_gfa.py
  function run (line 10) | def run(fp_out, p_ctg_tiling_path, a_ctg_tiling_path,
  function parse_args (line 64) | def parse_args(argv):
  function main (line 86) | def main(argv=sys.argv):

FILE: falcon_kit/mains/collect_pread_gfa.py
  function load_seqs (line 11) | def load_seqs(fasta_fn, store_only_seq_len):
  function load_pread_overlaps (line 26) | def load_pread_overlaps(fp_in):
  function load_sg_edges (line 42) | def load_sg_edges(fp_in):
  function add_node (line 57) | def add_node(gfa_graph, v, preads_dict):
  function add_edge (line 62) | def add_edge(gfa_graph, v, w, edge_split_line, preads_overlap_dict, sg_e...
  function add_tiling_paths_to_gfa (line 93) | def add_tiling_paths_to_gfa(gfa_graph, tiling_paths, preads_dict, preads...
  function add_string_graph_to_gfa (line 128) | def add_string_graph_to_gfa(gfa_graph, sg_edges_list, utg_data, ctg_path...
  function run (line 141) | def run(fp_out, p_ctg_tiling_path, a_ctg_tiling_path,
  function parse_args (line 201) | def parse_args(argv):
  function main (line 237) | def main(argv=sys.argv):

FILE: falcon_kit/mains/consensus.py
  function get_longest_reads (line 26) | def get_longest_reads(seqs, max_n_read, max_cov_aln, sort=True):
  function get_alignment (line 48) | def get_alignment(seq1, seq0, edge_tolerance=1000):
  function get_consensus_without_trim (line 102) | def get_consensus_without_trim(c_input):
  function get_consensus_with_trim (line 123) | def get_consensus_with_trim(c_input):
  function get_seq_data (line 161) | def get_seq_data(config, min_n_read, min_len_aln):
  function format_seq (line 212) | def format_seq(seq, col):
  function parse_args (line 216) | def parse_args(argv):
  function run (line 253) | def run(args):
  function main (line 301) | def main(argv=sys.argv):

FILE: falcon_kit/mains/consensus_gather_fasta_fofn.py
  function run (line 17) | def run(gathered_fn, preads_fofn_fn):
  class HelpF (line 32) | class HelpF(argparse.RawTextHelpFormatter, argparse.ArgumentDefaultsHelp...
  function parse_args (line 36) | def parse_args(argv):
  function main (line 55) | def main(argv=sys.argv):

FILE: falcon_kit/mains/consensus_scatter.py
  function corrected_relpath (line 15) | def corrected_relpath(p, was_rel_to):
  function read_gathered_las (line 21) | def read_gathered_las(path):
  function run (line 37) | def run(las_fopfn_fn, db_fn, length_cutoff_fn, config_fn, wildcards, sca...
  class HelpF (line 81) | class HelpF(argparse.RawTextHelpFormatter, argparse.ArgumentDefaultsHelp...
  function parse_args (line 85) | def parse_args(argv):
  function main (line 121) | def main(argv=sys.argv):

FILE: falcon_kit/mains/consensus_split.py
  function corrected_relpath (line 16) | def corrected_relpath(p, was_rel_to):
  function read_gathered_las (line 22) | def read_gathered_las(path):
  function run (line 37) | def run(p_id2las_fn, db_fn, length_cutoff_fn, config_fn, wildcards,
  class HelpF (line 90) | class HelpF(argparse.RawTextHelpFormatter, argparse.ArgumentDefaultsHelp...
  function parse_args (line 94) | def parse_args(argv):
  function main (line 127) | def main(argv=sys.argv):

FILE: falcon_kit/mains/consensus_task.py
  function get_option_with_proper_nproc (line 14) | def get_option_with_proper_nproc(regexp, opt, opt_name, nproc, cpu_count...
  function get_falcon_sense_option (line 44) | def get_falcon_sense_option(opt, nproc):
  function get_pa_dazcon_option (line 56) | def get_pa_dazcon_option(opt, nproc):
  function script_run_consensus (line 70) | def script_run_consensus(config, db_fn, las_fn, out_file_fn, nproc):
  function run (line 107) | def run(config_fn, length_cutoff_fn, las_fn, db_fn, nproc,
  class HelpF (line 123) | class HelpF(argparse.RawTextHelpFormatter, argparse.ArgumentDefaultsHelp...
  function parse_args (line 127) | def parse_args(argv):
  function main (line 162) | def main(argv=sys.argv):

FILE: falcon_kit/mains/contig_annotate.py
  function main (line 8) | def main(argv=sys.argv):

FILE: falcon_kit/mains/copy_fofn.py
  function run (line 12) | def run(abs, in_fn, out_fn):
  class HelpF (line 24) | class HelpF(argparse.RawTextHelpFormatter, argparse.ArgumentDefaultsHelp...
  function parse_args (line 28) | def parse_args(argv):
  function main (line 52) | def main(argv=sys.argv):

FILE: falcon_kit/mains/copy_mapped.py
  function deserialize (line 16) | def deserialize(fn):
  function assert_exists (line 20) | def assert_exists(fn):
  function mkdir (line 24) | def mkdir(dirname):
  function copy (line 35) | def copy(name, rel_src):
  function run (line 48) | def run(special_split_fn, fn_patterns):
  function parse_args (line 82) | def parse_args(argv):
  function main (line 95) | def main(argv=sys.argv):

FILE: falcon_kit/mains/ctg_link_analysis.py
  function main (line 8) | def main(argv=sys.argv):

FILE: falcon_kit/mains/daligner.py
  function run (line 12) | def run(daligner_settings_fn, daligner_script_fn, job_done_fn):
  class HelpF (line 24) | class HelpF(argparse.RawTextHelpFormatter, argparse.ArgumentDefaultsHelp...
  function parse_args (line 28) | def parse_args(argv):
  function main (line 52) | def main(argv=sys.argv):

FILE: falcon_kit/mains/daligner_gather_las_list.py
  function run (line 18) | def run(gathered_fn, las_paths_fn):
  class HelpF (line 45) | class HelpF(argparse.RawTextHelpFormatter, argparse.ArgumentDefaultsHelp...
  function parse_args (line 49) | def parse_args(argv):
  function main (line 69) | def main(argv=sys.argv):

FILE: falcon_kit/mains/daligner_scatter.py
  function run (line 14) | def run(db_prefix, pread_aln, skip_checks, run_jobs_fn, db_fn, stage, wi...
  class HelpF (line 50) | class HelpF(argparse.RawTextHelpFormatter, argparse.ArgumentDefaultsHelp...
  function parse_args (line 54) | def parse_args(argv):
  function main (line 98) | def main(argv=sys.argv):

FILE: falcon_kit/mains/daligner_split.py
  function run (line 15) | def run(bash_template_fn, db_prefix, pread_aln, skip_checks, run_jobs_fn...
  class HelpF (line 60) | class HelpF(argparse.RawTextHelpFormatter, argparse.ArgumentDefaultsHelp...
  function parse_args (line 64) | def parse_args(argv):
  function main (line 104) | def main(argv=sys.argv):

FILE: falcon_kit/mains/dazzler.py
  function filter_DBsplit_option (line 69) | def filter_DBsplit_option(opt):
  function script_build_db (line 76) | def script_build_db(config, input_fofn_fn, db):
  function script_length_cutoff (line 99) | def script_length_cutoff(config, db, length_cutoff_fn='length_cutoff'):
  function script_DBsplit (line 112) | def script_DBsplit(config, db):
  function build_db (line 122) | def build_db(config, input_fofn_fn, db_fn, length_cutoff_fn):
  function script_HPC_daligner (line 143) | def script_HPC_daligner(config, db, length_cutoff_fn, tracks, prefix='da...
  function script_HPC_TANmask (line 157) | def script_HPC_TANmask(db, prefix):
  function symlink (line 171) | def symlink(actual, symbolic=None, force=True):
  function symlink_db (line 201) | def symlink_db(db_fn):
  function tan_split (line 220) | def tan_split(config_fn, db_fn, uows_fn, bash_template_fn):
  function tan_apply (line 294) | def tan_apply(db_fn, script_fn, job_done_fn):
  function tan_combine (line 303) | def tan_combine(db_fn, gathered_fn, new_db_fn):
  function split_db (line 329) | def split_db(config_fn, daligner_uows_fn, db_fn):
  function get_tracks (line 331) | def get_tracks(db_fn):
  function daligner_split (line 339) | def daligner_split(config, config_fn, db_fn, nproc, wildcards, length_cu...
  function daligner_apply (line 422) | def daligner_apply(db_fn, script_fn, job_done_fn):
  class MissingLas (line 427) | class MissingLas(Exception):
  function is_perfect_square (line 430) | def is_perfect_square(n):
  function daligner_combine (line 435) | def daligner_combine(db_fn, gathered_fn, las_paths_fn):
  function merge_split (line 484) | def merge_split(config_fn, dbname, las_paths_fn, split_fn, bash_template...
  function ichunked (line 533) | def ichunked(seq, chunksize):
  function merge_apply (line 542) | def merge_apply(las_paths_fn, las_fn):
  function merge_combine (line 576) | def merge_combine(gathered_fn, las_paths_fn, block2las_fn):
  function setup_logging (line 650) | def setup_logging(log_level):
  function cmd_build (line 658) | def cmd_build(args):
  function cmd_tan_split (line 661) | def cmd_tan_split(args):
  function cmd_tan_apply (line 663) | def cmd_tan_apply(args):
  function cmd_tan_combine (line 665) | def cmd_tan_combine(args):
  function cmd_daligner_split (line 667) | def cmd_daligner_split(args):
  function cmd_daligner_apply (line 670) | def cmd_daligner_apply(args):
  function cmd_daligner_combine (line 672) | def cmd_daligner_combine(args):
  function cmd_merge_split (line 674) | def cmd_merge_split(args):
  function cmd_merge_apply (line 676) | def cmd_merge_apply(args):
  function cmd_merge_combine (line 678) | def cmd_merge_combine(args):
  function get_ours (line 698) | def get_ours(config_fn, db_fn):
  function add_build_arguments (line 720) | def add_build_arguments(parser):
  function add_tan_split_arguments (line 729) | def add_tan_split_arguments(parser):
  function add_tan_apply_arguments (line 738) | def add_tan_apply_arguments(parser):
  function add_tan_combine_arguments (line 747) | def add_tan_combine_arguments(parser):
  function add_daligner_split_arguments (line 756) | def add_daligner_split_arguments(parser):
  function add_daligner_apply_arguments (line 773) | def add_daligner_apply_arguments(parser):
  function add_daligner_combine_arguments (line 782) | def add_daligner_combine_arguments(parser):
  function add_merge_split_arguments (line 790) | def add_merge_split_arguments(parser):
  function add_merge_apply_arguments (line 807) | def add_merge_apply_arguments(parser):
  function add_merge_combine_arguments (line 815) | def add_merge_combine_arguments(parser):
  function add_split_arguments (line 827) | def add_split_arguments(parser):
  class HelpF (line 845) | class HelpF(argparse.RawTextHelpFormatter, argparse.ArgumentDefaultsHelp...
  function parse_args (line 848) | def parse_args(argv):
  function main (line 970) | def main(argv=sys.argv):

FILE: falcon_kit/mains/dedup_a_tigs.py
  function parse_args (line 9) | def parse_args(argv):
  function main (line 22) | def main(argv=sys.argv):

FILE: falcon_kit/mains/fasta2fasta.py
  function complement (line 39) | def complement(x): return (COMPLEMENT[base] for base in x)
  function WriteSplit (line 45) | def WriteSplit(write, seq, split=8000):
  function parse_header (line 54) | def parse_header(header, zmw_counter=None):
  function process_fasta (line 83) | def process_fasta(ifs, movie2write):
  function process_fastq (line 116) | def process_fastq(ifs, movie2write):
  function process_try_both (line 136) | def process_try_both(ifs, movie2write):
  function process (line 144) | def process(ifn, movie2write):
  class WriterMap (line 168) | class WriterMap(object):
    method basenames (line 169) | def basenames(self):
    method close (line 172) | def close(self):
    method __getitem__ (line 176) | def __getitem__(self, movie):
    method __init__ (line 191) | def __init__(self, Basename, Open):
  function get_writer (line 198) | def get_writer(Gzip=False):
  function fixall (line 214) | def fixall(ifns, Gzip=False):
  function main (line 227) | def main():

FILE: falcon_kit/mains/fetch_reads.py
  function fetch_ref_and_reads (line 15) | def fetch_ref_and_reads(base_dir, fofn, ctg_id, out_dir, min_ctg_lenth):
  function parse_args (line 129) | def parse_args(argv):
  function main (line 152) | def main(argv=sys.argv):

FILE: falcon_kit/mains/gen_gfa_v1.py
  function run (line 9) | def run(fp_out, collected_gfa):
  function parse_args (line 15) | def parse_args(argv):
  function main (line 23) | def main(argv=sys.argv):

FILE: falcon_kit/mains/gen_gfa_v2.py
  function run (line 9) | def run(fp_out, collected_gfa):
  function parse_args (line 15) | def parse_args(argv):
  function main (line 23) | def main(argv=sys.argv):

FILE: falcon_kit/mains/generate_read_to_ctg_map.py
  function run (line 12) | def run(rawread_id_fn, pread_id_fn, sg_edges_list_fn, utg_data_fn, ctg_p...
  class HelpF (line 44) | class HelpF(argparse.RawTextHelpFormatter, argparse.ArgumentDefaultsHelp...
  function parse_args (line 48) | def parse_args(argv):
  function main (line 90) | def main(argv=sys.argv):

FILE: falcon_kit/mains/generic_gather.py
  function run (line 12) | def run(gathered_fn, scattered_fn):
  class HelpF (line 37) | class HelpF(argparse.RawTextHelpFormatter, argparse.ArgumentDefaultsHelp...
  function parse_args (line 41) | def parse_args(argv):
  function main (line 61) | def main(argv=sys.argv):

FILE: falcon_kit/mains/generic_run_units_of_work.py
  function validate (line 16) | def validate(bash_template, inputs, outputs, parameterss):
  function update_values_rel_to (line 30) | def update_values_rel_to(things, dn):
  function run (line 39) | def run(bash_template_fn, units_of_work_fn, nproc,
  class HelpF (line 80) | class HelpF(argparse.RawTextHelpFormatter, argparse.ArgumentDefaultsHelp...
  function parse_args (line 84) | def parse_args(argv):
  function main (line 108) | def main(argv=sys.argv):

FILE: falcon_kit/mains/generic_scatter_one_uow.py
  function validate (line 16) | def validate(bash_template, inputs, outputs, parameterss):
  function run (line 31) | def run(all_uow_list_fn, split_idx, one_uow_list_fn):
  class HelpF (line 51) | class HelpF(argparse.RawTextHelpFormatter, argparse.ArgumentDefaultsHelp...
  function parse_args (line 55) | def parse_args(argv):
  function main (line 76) | def main(argv=sys.argv):

FILE: falcon_kit/mains/generic_unsplit.py
  function run (line 12) | def run(result_fn_list_fn, gathered_fn):
  class HelpF (line 38) | class HelpF(argparse.RawTextHelpFormatter, argparse.ArgumentDefaultsHelp...
  function parse_args (line 42) | def parse_args(argv):
  function main (line 61) | def main(argv=sys.argv):

FILE: falcon_kit/mains/get_read_ctg_map.py
  function make_dirs (line 19) | def make_dirs(d):
  function get_read_ctg_map (line 25) | def get_read_ctg_map(rawread_dir, pread_dir, asm_dir):
  function parse_args (line 84) | def parse_args(argv):
  function main (line 94) | def main(argv=sys.argv):

FILE: falcon_kit/mains/graph_to_contig.py
  class TooLongError (line 40) | class TooLongError(Exception): pass
  function log (line 43) | def log(msg):
  function rc (line 48) | def rc(seq):
  function get_aln_data (line 52) | def get_aln_data(t_seq, q_seq):
  function reverse_end (line 107) | def reverse_end(node_id):
  function yield_first_seq (line 113) | def yield_first_seq(one_path_edges, seqs):
  function run (line 127) | def run(improper_p_ctg, proper_a_ctg):
  function main (line 397) | def main(argv=sys.argv):

FILE: falcon_kit/mains/graph_to_utgs.py
  function rc (line 15) | def rc(seq):
  function get_aln_data (line 19) | def get_aln_data(t_seq, q_seq):
  function main (line 59) | def main(argv=sys.argv):

FILE: falcon_kit/mains/hgap4_adapt.py
  function mkcd (line 167) | def mkcd(newdir):
  function symlink (line 173) | def symlink(jo):
  function get_parser (line 425) | def get_parser():
  function main (line 464) | def main(argv=sys.argv):

FILE: falcon_kit/mains/las_merge.py
  function run (line 12) | def run(p_id_num, las_paths_fn, merge_script_fn, las_merged_fn_fn,
  class HelpF (line 44) | class HelpF(argparse.RawTextHelpFormatter, argparse.ArgumentDefaultsHelp...
  function parse_args (line 48) | def parse_args(argv):
  function main (line 81) | def main(argv=sys.argv):

FILE: falcon_kit/mains/las_merge_gather.py
  function run (line 17) | def run(gathered_fn, las_fn, p_id2las_fn):
  class HelpF (line 33) | class HelpF(argparse.RawTextHelpFormatter, argparse.ArgumentDefaultsHelp...
  function parse_args (line 37) | def parse_args(argv):
  function main (line 58) | def main(argv=sys.argv):

FILE: falcon_kit/mains/las_merge_scatter.py
  function read_gathered_las (line 13) | def read_gathered_las(path):
  function run (line 26) | def run(run_jobs_fn, gathered_las_fn, db_prefix, stage, wildcards, scatt...
  class HelpF (line 75) | class HelpF(argparse.RawTextHelpFormatter, argparse.ArgumentDefaultsHelp...
  function parse_args (line 79) | def parse_args(argv):
  function main (line 116) | def main(argv=sys.argv):

FILE: falcon_kit/mains/las_merge_split.py
  function get_block (line 19) | def get_block(las_fn):
  function read_gathered_las (line 33) | def read_gathered_las(las_fns):
  function run (line 44) | def run(run_jobs_fn, gathered_las_fn, db_prefix, wildcards,
  class HelpF (line 109) | class HelpF(argparse.RawTextHelpFormatter, argparse.ArgumentDefaultsHelp...
  function parse_args (line 113) | def parse_args(argv):
  function main (line 143) | def main(argv=sys.argv):

FILE: falcon_kit/mains/ovlp_filter.py
  function run_filter_stage1 (line 14) | def run_filter_stage1(db_fn, fn, max_diff, max_ovlp, min_ovlp, min_len):
  function filter_stage1 (line 21) | def filter_stage1(readlines, max_diff, max_ovlp, min_ovlp, min_len):
  function run_filter_stage2 (line 71) | def run_filter_stage2(db_fn, fn, max_diff, max_ovlp, min_ovlp, min_len, ...
  function filter_stage2 (line 78) | def filter_stage2(readlines, max_diff, max_ovlp, min_ovlp, min_len, igno...
  function run_filter_stage3 (line 105) | def run_filter_stage3(db_fn, fn, max_diff, max_ovlp, min_ovlp, min_len, ...
  function filter_stage3 (line 112) | def filter_stage3(readlines, max_diff, max_ovlp, min_ovlp, min_len, igno...
  function run_ovlp_filter (line 194) | def run_ovlp_filter(outs, exe_pool, file_list, max_diff, max_cov, min_co...
  function try_run_ovlp_filter (line 235) | def try_run_ovlp_filter(out_fn, n_core, fofn, max_diff, max_cov, min_cov...
  function ovlp_filter (line 255) | def ovlp_filter(out_fn, n_core, las_fofn, max_diff, max_cov, min_cov, mi...
  function parse_args (line 268) | def parse_args(argv):
  function main (line 319) | def main(argv=sys.argv):

FILE: falcon_kit/mains/ovlp_stats.py
  function filter_stats (line 16) | def filter_stats(readlines, min_len):
  function run_filter_stats (line 67) | def run_filter_stats(db_fn, fn, min_len):
  function run_ovlp_stats (line 78) | def run_ovlp_stats(exe_pool, db_fn, file_list, min_len):
  function try_run_ovlp_stats (line 88) | def try_run_ovlp_stats(n_core, db_fn, fofn, min_len):
  function ovlp_stats (line 103) | def ovlp_stats(db_fn, fofn, min_len, n_core, stream, debug, silent):
  function parse_args (line 115) | def parse_args(argv):
  function main (line 136) | def main(argv=sys.argv):

FILE: falcon_kit/mains/ovlp_to_graph.py
  class SGNode (line 17) | class SGNode(object):
    method __init__ (line 22) | def __init__(self, node_name):
    method add_out_edge (line 27) | def add_out_edge(self, out_edge):
    method add_in_edge (line 30) | def add_in_edge(self, in_edge):
  class SGEdge (line 34) | class SGEdge(object):
    method __init__ (line 39) | def __init__(self, in_node, out_node):
    method set_attribute (line 44) | def set_attribute(self, attr, value):
  function reverse_end (line 48) | def reverse_end(node_name):
  class StringGraph (line 59) | class StringGraph(object):
    method __init__ (line 64) | def __init__(self):
    method add_node (line 73) | def add_node(self, node_name):
    method add_edge (line 80) | def add_edge(self, in_node_name, out_node_name, **attributes):
    method init_reduce_dict (line 99) | def init_reduce_dict(self):
    method bfs_nodes (line 103) | def bfs_nodes(self, n, exclude=None, depth=5):
    method mark_chimer_edges (line 123) | def mark_chimer_edges(self):
    method mark_spur_edge (line 193) | def mark_spur_edge(self):
    method mark_tr_edges (line 219) | def mark_tr_edges(self):
    method mark_best_overlap (line 279) | def mark_best_overlap(self):
    method resolve_repeat_edges (line 323) | def resolve_repeat_edges(self):
    method get_out_edges_for_node (line 411) | def get_out_edges_for_node(self, name, mask=True):
    method get_in_edges_for_node (line 420) | def get_in_edges_for_node(self, name, mask=True):
    method get_best_out_edge_for_node (line 429) | def get_best_out_edge_for_node(self, name, mask=True):
    method get_best_in_edge_for_node (line 440) | def get_best_in_edge_for_node(self, name, mask=True):
  function reverse_edge (line 451) | def reverse_edge(e):
  function reverse_path (line 456) | def reverse_path(p):
  function find_bundle (line 461) | def find_bundle(ug, u_edge_data, start_node, depth_cutoff, width_cutoff,...
  function generate_string_graph (line 654) | def generate_string_graph(args):
  function construct_compound_paths (line 907) | def construct_compound_paths(ug, u_edge_data):
  function identify_simple_paths (line 1029) | def identify_simple_paths(sg2, edge_data):
  function identify_spurs (line 1143) | def identify_spurs(ug, u_edge_data, spur_len):
  function remove_dup_simple_path (line 1219) | def remove_dup_simple_path(ug, u_edge_data):
  function construct_c_path_from_utgs (line 1246) | def construct_c_path_from_utgs(ug, u_edge_data, sg):
  function ovlp_to_graph (line 1359) | def ovlp_to_graph(args):
  function main (line 1554) | def main(argv=sys.argv):

FILE: falcon_kit/mains/pr_ctg_track.py
  function get_pid_to_ctg (line 16) | def get_pid_to_ctg(fn):
  function run_tr_stage1 (line 27) | def run_tr_stage1(db_fn, fn, min_len, bestn, pid_to_ctg):
  function tr_stage1 (line 34) | def tr_stage1(readlines, min_len, bestn, pid_to_ctg):
  function run_track_reads (line 60) | def run_track_reads(exe_pool, base_dir, file_list, min_len, bestn, db_fn):
  function try_run_track_reads (line 118) | def try_run_track_reads(n_core, base_dir, min_len, bestn):
  function track_reads (line 135) | def track_reads(n_core, base_dir, min_len, bestn, debug, silent, stream):
  function parse_args (line 147) | def parse_args(argv):
  function main (line 172) | def main(argv=sys.argv):

FILE: falcon_kit/mains/report_pre_assembly.py
  function do_report (line 12) | def do_report(db, preads_fofn, genome_length, length_cutoff, out):
  function main (line 25) | def main():

FILE: falcon_kit/mains/rr_ctg_track.py
  function get_rid_to_ctg (line 15) | def get_rid_to_ctg(fn):
  function run_tr_stage1 (line 26) | def run_tr_stage1(db_fn, fn, min_len, bestn, rid_to_ctg):
  function tr_stage1 (line 33) | def tr_stage1(readlines, min_len, bestn, rid_to_ctg):
  function run_track_reads (line 59) | def run_track_reads(exe_pool, base_dir, file_list, min_len, bestn, db_fn):
  function try_run_track_reads (line 119) | def try_run_track_reads(n_core, base_dir, min_len, bestn):
  function track_reads (line 141) | def track_reads(n_core, base_dir, min_len, bestn, debug, silent, stream):
  function parse_args (line 154) | def parse_args(argv):
  function main (line 179) | def main(argv=sys.argv):

FILE: falcon_kit/mains/run1.py
  function create_daligner_tasks (line 24) | def create_daligner_tasks(basedir, scatter_fn):
  function create_merge_tasks (line 53) | def create_merge_tasks(basedir, scatter_fn):
  function create_consensus_tasks (line 78) | def create_consensus_tasks(basedir, scatter_fn):
  function create_merge_gather_task (line 102) | def create_merge_gather_task(wd, inputs):
  function create_consensus_gather_task (line 115) | def create_consensus_gather_task(wd, inputs):
  function main1 (line 127) | def main1(prog_name, input_config_fn, logger_config_fn=None):
  function run (line 160) | def run(wf, config, rule_writer,
  function main (line 685) | def main(argv=sys.argv):

FILE: falcon_kit/mains/symlink_mapped.py
  function deserialize (line 12) | def deserialize(fn):
  function assert_exists (line 16) | def assert_exists(fn):
  function mkdir (line 20) | def mkdir(dirname):
  function symlink (line 25) | def symlink(name, target):
  function run (line 31) | def run(special_split_fn, fn_patterns):
  function parse_args (line 65) | def parse_args(argv):
  function main (line 78) | def main(argv=sys.argv):

FILE: falcon_kit/mains/task_report_pre_assembly.py
  function run (line 14) | def run(config_fn, length_cutoff_fn, raw_reads_db_fn, preads_fofn_fn, pr...
  class HelpF (line 33) | class HelpF(argparse.RawTextHelpFormatter, argparse.ArgumentDefaultsHelp...
  function parse_args (line 37) | def parse_args(argv):
  function main (line 69) | def main(argv=sys.argv):

FILE: falcon_kit/mains/tasks.py
  function help (line 14) | def help():
  function main_make_fofn_abs (line 25) | def main_make_fofn_abs(i_fofn_fn, o_fofn_fn):
  function main (line 29) | def main(argv=sys.argv):

FILE: falcon_kit/multiproc.py
  class FakePool (line 10) | class FakePool(object):
    method map (line 14) | def map(self, func, iterable, chunksize=None):
    method imap (line 17) | def imap(self, func, iterable, chunksize=None):
    method terminate (line 20) | def terminate(self):
    method __init__ (line 23) | def __init__(self, initializer=None, initargs=[], *args, **kwds):
  function Pool (line 28) | def Pool(processes, *args, **kwds):

FILE: falcon_kit/pype.py
  function wrap_gen_task (line 31) | def wrap_gen_task(rule_writer, script, inputs, outputs, parameters=None,...
  function gen_parallel_tasks (line 62) | def gen_parallel_tasks(
  function dict_rel_paths (line 184) | def dict_rel_paths(dict_paths):

FILE: falcon_kit/pype_tasks.py
  function fn (line 167) | def fn(p): return p
  function system (line 170) | def system(call, check=False):
  function remove (line 183) | def remove(*fns):
  function mkdir (line 192) | def mkdir(d):
  function task_make_fofn_abs_raw (line 197) | def task_make_fofn_abs_raw(self):
  function task_make_fofn_abs_preads (line 204) | def task_make_fofn_abs_preads(self):
  function task_build_rdb (line 211) | def task_build_rdb(self):
  function task_build_pdb (line 233) | def task_build_pdb(self):
  function task_run_db2falcon (line 254) | def task_run_db2falcon(self):
  function task_run_falcon_asm (line 274) | def task_run_falcon_asm(self):
  function task_report_pre_assembly (line 297) | def task_report_pre_assembly(self):
  function task_run_daligner (line 326) | def task_run_daligner(self):
  function read_gathered_las (line 346) | def read_gathered_las(path):
  function task_run_las_merge (line 360) | def task_run_las_merge(self):
  function task_run_consensus (line 395) | def task_run_consensus(self):
  function task_daligner_scatter (line 421) | def task_daligner_scatter(self):
  function task_merge_scatter (line 459) | def task_merge_scatter(self):
  function task_consensus_scatter (line 498) | def task_consensus_scatter(self):
  function task_daligner_gather (line 549) | def task_daligner_gather(self):
  function task_cns_gather (line 563) | def task_cns_gather(self):
  function task_merge_gather (line 570) | def task_merge_gather(self):
  function task_dump_rawread_ids (line 587) | def task_dump_rawread_ids(self):
  function task_dump_pread_ids (line 597) | def task_dump_pread_ids(self):
  function task_generate_read_to_ctg_map (line 607) | def task_generate_read_to_ctg_map(self):

FILE: falcon_kit/run_support.py
  function _prepend_env_paths (line 26) | def _prepend_env_paths(content, names):
  function update_env_in_script (line 42) | def update_env_in_script(fn, names):
  function use_tmpdir_for_files (line 52) | def use_tmpdir_for_files(basenames, src_dir, link_dir):
  function make_job_data (line 78) | def make_job_data(url, script_fn):
  function update_HPCdaligner_option (line 95) | def update_HPCdaligner_option(option):
  function clean_falcon_options (line 107) | def clean_falcon_options(fc):
  function get_config (line 120) | def get_config(config):
  function dict2config (line 131) | def dict2config(jdict, section):
  function parse_config (line 140) | def parse_config(config_fn):
  function parse_cfg_file (line 146) | def parse_cfg_file(config_fn):
  function process_job_defaults (line 165) | def process_job_defaults(job_defaults):
  function update_job_defaults_section (line 177) | def update_job_defaults_section(config):
  function update_job_sections (line 256) | def update_job_sections(config):
  function parse_cfg_with_sections (line 278) | def parse_cfg_with_sections(stream):
  function check_config_sections (line 311) | def check_config_sections(cfg):
  function update_dash_flags (line 332) | def update_dash_flags(cfg, key):
  function update_defaults (line 347) | def update_defaults(cfg):
  function check_unexpected_keys (line 432) | def check_unexpected_keys(cfg):
  function _setup_logging (line 497) | def _setup_logging(logging_config_fn):
  function setup_logger (line 517) | def setup_logger(logging_config_fn):
  function get_nblock (line 537) | def get_nblock(db_file):
  function daligner_gather_las (line 554) | def daligner_gather_las(job_rundirs):
  function get_length_cutoff (line 570) | def get_length_cutoff(length_cutoff, fn):
  function build_rdb (line 577) | def build_rdb(input_fofn_fn, config, job_done, script_fn, run_jobs_fn):
  function build_pdb (line 583) | def build_pdb(input_fofn_fn, config, job_done, script_fn, run_jobs_fn):
  function run_db2falcon (line 589) | def run_db2falcon(config, preads4falcon_fn, preads_db, job_done, script_...
  function run_falcon_asm (line 594) | def run_falcon_asm(config, las_fofn_fn, preads4falcon_fasta_fn, db_file_...
  function run_report_pre_assembly (line 600) | def run_report_pre_assembly(i_raw_reads_db_fn, i_preads_fofn_fn, genome_...
  function run_daligner (line 606) | def run_daligner(daligner_script, db_prefix, config, job_done, script_fn):
  function run_las_merge (line 610) | def run_las_merge(script, job_done, config, script_fn):
  function run_consensus (line 614) | def run_consensus(db_fn, las_fn, out_file_fn, config, job_done, script_fn):

FILE: falcon_kit/snakemake.py
  function find_wildcards (line 16) | def find_wildcards(pattern):
  class SnakemakeRuleWriter (line 25) | class SnakemakeRuleWriter(object):
    method legalize (line 26) | def legalize(self, rule_name):
    method unique_rule_name (line 28) | def unique_rule_name(self, basename):
    method write_dynamic_rules (line 37) | def write_dynamic_rules(self, rule_name, input_json, inputs, shell_tem...
    method write_script_rule (line 126) | def write_script_rule(self, inputs, outputs, parameters, shell_templat...
    method __call__ (line 160) | def __call__(self, inputs, outputs, parameters, shell_template, rule_n...
    method __init__ (line 162) | def __init__(self, writer):
  class SnakemakeDynamic (line 232) | class SnakemakeDynamic(object):
    method __init__ (line 234) | def __init__(self, path):
  function snake_string_path (line 236) | def snake_string_path(p):
  function snake_shell (line 245) | def snake_shell(template, rundir):

FILE: falcon_kit/stats_preassembly.py
  function get_fasta_readlengths (line 35) | def get_fasta_readlengths(fasta_file):
  function get_db_readlengths (line 48) | def get_db_readlengths(fn):
  class FastaContainer (line 56) | class FastaContainer(object):
    method __init__ (line 58) | def __init__(self, nreads, total, file_name):
    method from_file (line 64) | def from_file(file_name):
    method __str__ (line 71) | def __str__(self):
  function _validate_file (line 75) | def _validate_file(file_name):
  function cutoff_reads (line 84) | def cutoff_reads(read_lens, min_read_len):
  function read_len_above (line 88) | def read_len_above(read_lens, threshold):
  function percentile (line 97) | def percentile(read_lens, p):
  function stats_from_sorted_readlengths (line 102) | def stats_from_sorted_readlengths(read_lens):
  function read_lens_from_fofn (line 114) | def read_lens_from_fofn(fofn_fn):
  function read_lens_from_db (line 122) | def read_lens_from_db(db_fn):
  function abs_filenames (line 128) | def abs_filenames(fofn_fn):
  function metric_fragmentation (line 139) | def metric_fragmentation(preads_fofn):
  function metric_truncation (line 149) | def metric_truncation(db, preads_fofn):
  function stats_dict (line 161) | def stats_dict(stats_raw_reads, stats_seed_reads, stats_corrected_reads,...
  function make_dict (line 209) | def make_dict(
  function calc_dict (line 237) | def calc_dict(

FILE: falcon_kit/tiling_path.py
  class TilingPathEdge (line 1) | class TilingPathEdge:
    method __init__ (line 3) | def __init__(self, split_line = None):
    method set_from (line 10) | def set_from(self, split_line):
    method get_split_line (line 23) | def get_split_line(self):
  class TilingPath (line 29) | class TilingPath:
    method __init__ (line 30) | def __init__(self, tiling_edge_list, contig_sequence_len = None):
    method dump_as_split_lines (line 64) | def dump_as_split_lines(self):
    method get_subpath (line 67) | def get_subpath(self, start_coord, end_coord):
  function calc_node_coords (line 111) | def calc_node_coords(tiling_edge_list, first_node_offset=0):
  function yield_split_line (line 138) | def yield_split_line(fp_in):
  function load_tiling_paths (line 145) | def load_tiling_paths(tp_file, contig_lens=None, whitelist_seqs=None):
  function load_tiling_paths_from_stream (line 150) | def load_tiling_paths_from_stream(fp_in, contig_lens=None, whitelist_seq...
  function load_tiling_paths_from_split_lines (line 154) | def load_tiling_paths_from_split_lines(split_lines, contig_lens=None, wh...
  function find_a_ctg_placement (line 182) | def find_a_ctg_placement(p_paths, a_paths):

FILE: falcon_kit/util/io.py
  function write_nothing (line 17) | def write_nothing(*args):
  function write_with_pid (line 24) | def write_with_pid(*args):
  function logstats (line 32) | def logstats():
  function reprarg (line 38) | def reprarg(arg):
  function run_func (line 46) | def run_func(args):
  function system (line 73) | def system(call, check=False):
  function syscall (line 86) | def syscall(cmd):
  function slurplines (line 100) | def slurplines(cmd):
  function streamlines (line 104) | def streamlines(cmd):
  class DataReaderContext (line 115) | class DataReaderContext(object):
    method readlines (line 116) | def readlines(self):
    method __enter__ (line 121) | def __enter__(self):
    method __exit__ (line 124) | def __exit__(self, *args):
    method __init__ (line 127) | def __init__(self, data):
  class ProcessReaderContext (line 131) | class ProcessReaderContext(object):
    method readlines (line 134) | def readlines(self):
    method __enter__ (line 140) | def __enter__(self):
    method __exit__ (line 144) | def __exit__(self, etype, evalue, etb):
    method __init__ (line 157) | def __init__(self, cmd):
  function splitlines_iter (line 161) | def splitlines_iter(text):
  class CapturedProcessReaderContext (line 177) | class CapturedProcessReaderContext(ProcessReaderContext):
    method readlines (line 178) | def readlines(self):
  class StreamedProcessReaderContext (line 197) | class StreamedProcessReaderContext(ProcessReaderContext):
    method readlines (line 198) | def readlines(self):
  function filesize (line 221) | def filesize(fn):
  function validated_fns (line 229) | def validated_fns(fofn):
  function yield_validated_fns (line 233) | def yield_validated_fns(fofn):

FILE: falcon_kit/util/system.py
  function only_these_symlinks (line 14) | def only_these_symlinks(dir2paths):
  function lfs_setstripe_maybe (line 45) | def lfs_setstripe_maybe(path='.', stripe=12):
  function find_files (line 57) | def find_files(root_path, pattern):
  function abs_fns (line 71) | def abs_fns(ifofns, idir=None):
  function make_fofn_abs (line 84) | def make_fofn_abs(i_fofn_fn, o_fofn_fn):
  function make_dirs (line 95) | def make_dirs(d):
  function touch (line 101) | def touch(*paths):

FILE: src/c/DW_banded.c
  function compare_d_path (line 65) | int compare_d_path(const void * a, const void * b)
  function d_path_sort (line 77) | void d_path_sort( d_path_data2 * base, unsigned long max_idx) {
  function d_path_data2 (line 81) | d_path_data2 * get_dpath_idx( seq_coor_t d, seq_coor_t k, unsigned long ...
  function print_d_path (line 93) | void print_d_path(  d_path_data2 * base, unsigned long max_idx) {
  function alignment (line 115) | alignment * align(char * query_seq, seq_coor_t q_len,
  function free_alignment (line 333) | void free_alignment(alignment * aln) {

FILE: src/c/common.h
  type seq_coor_t (line 57) | typedef int seq_coor_t;
  type alignment (line 59) | typedef struct {
  type d_path_data (line 72) | typedef struct {
  type d_path_data2 (line 80) | typedef struct {
  type path_point (line 90) | typedef struct {
  type kmer_lookup (line 95) | typedef struct {
  type base (line 101) | typedef unsigned char base;
  type base (line 102) | typedef base * seq_array;
  type seq_coor_t (line 103) | typedef seq_coor_t seq_addr;
  type seq_addr (line 104) | typedef seq_addr * seq_addr_array;
  type kmer_match (line 107) | typedef struct {
  type aln_range (line 114) | typedef struct {
  type consensus_data (line 123) | typedef struct {

FILE: src/c/ext_falcon.c
  function PyMODINIT_FUNC (line 5) | PyMODINIT_FUNC

FILE: src/c/falcon.c
  type align_tag_t (line 64) | typedef struct {
  type align_tags_t (line 74) | typedef struct {
  type align_tag_col_t (line 80) | typedef struct {
  type msa_base_group_t (line 94) | typedef struct {
  type msa_delta_group_t (line 98) | typedef struct {
  type msa_delta_group_t (line 104) | typedef msa_delta_group_t * msa_pos_t;
  function align_tags_t (line 106) | align_tags_t * get_align_tags( char * aln_q_seq,
  function free_align_tags (line 164) | void free_align_tags( align_tags_t * tags) {
  function allocate_aln_col (line 170) | void allocate_aln_col( align_tag_col_t * col) {
  function realloc_aln_col (line 177) | void realloc_aln_col( align_tag_col_t * col ) {
  function free_aln_col (line 184) | void free_aln_col( align_tag_col_t * col) {
  function allocate_delta_group (line 192) | void allocate_delta_group( msa_delta_group_t * g) {
  function realloc_delta_group (line 205) | void realloc_delta_group( msa_delta_group_t * g, uint16_t new_size ) {
  function free_delta_group (line 220) | void free_delta_group( msa_delta_group_t * g) {
  function update_col (line 232) | void update_col( align_tag_col_t * col, seq_coor_t p_t_pos, uint8_t p_de...
  function msa_pos_t (line 266) | msa_pos_t * get_msa_working_sapce(unsigned int max_t_len) {
  function clean_msa_working_space (line 278) | void clean_msa_working_space( msa_pos_t * msa_array, unsigned int max_t_...
  function consensus_data (line 308) | consensus_data * get_cns_from_align_tags( align_tags_t ** tag_seqs,
  function consensus_data (line 562) | consensus_data * generate_consensus( char ** input_seq,
  function consensus_data (line 668) | consensus_data * generate_utg_consensus( char ** input_seq,
  function free_consensus_data (line 776) | void free_consensus_data( consensus_data * consensus ){

FILE: src/c/kmer_lookup.c
  function compare_seq_coor (line 64) | int compare_seq_coor(const void * a, const void * b) {
  function kmer_lookup (line 71) | kmer_lookup * allocate_kmer_lookup ( seq_coor_t size ) {
  function init_kmer_lookup (line 80) | void init_kmer_lookup ( kmer_lookup * kl,  seq_coor_t size ) {
  function free_kmer_lookup (line 91) | void free_kmer_lookup( kmer_lookup *  ptr) {
  function seq_array (line 95) | seq_array allocate_seq(seq_coor_t size) {
  function init_seq_array (line 102) | void init_seq_array( seq_array sa, seq_coor_t size) {
  function free_seq_array (line 109) | void free_seq_array( seq_array sa) {
  function seq_addr_array (line 113) | seq_addr_array allocate_seq_addr(seq_coor_t size) {
  function free_seq_addr_array (line 117) | void free_seq_addr_array(seq_addr_array sda) {
  function seq_coor_t (line 121) | seq_coor_t get_kmer_bitvector(seq_array sa, unsigned int K) {
  function add_sequence (line 140) | void add_sequence ( seq_coor_t start,
  function mask_k_mer (line 195) | void mask_k_mer(seq_coor_t size, kmer_lookup * kl, seq_coor_t threshold) {
  function kmer_match (line 207) | kmer_match * find_kmer_pos_for_seq( char * seq, seq_coor_t seq_len, unsi...
  function free_kmer_match (line 288) | void free_kmer_match( kmer_match * ptr) {
  function aln_range (line 294) | aln_range* find_best_aln_range(kmer_match * km_ptr,
  function aln_range (line 429) | aln_range* find_best_aln_range2(kmer_match * km_ptr,
  function free_aln_range (line 587) | void free_aln_range( aln_range * arange) {

FILE: test/helpers.py
  function equal_list (line 11) | def equal_list(a, b):
  function equal_dict (line 15) | def equal_dict(a, b):
  function equal_multiline (line 22) | def equal_multiline(a, b):
  function get_test_data_dir (line 28) | def get_test_data_dir():
  function assert_filecmp (line 32) | def assert_filecmp(got, expected_path):

FILE: test/test_calc_cutoff.py
  function test_help (line 9) | def test_help():
  function test_calc_cutoff (line 18) | def test_calc_cutoff(capsys):
  function test_calc_cutoff_err (line 35) | def test_calc_cutoff_err():
  function test_calc_cutoff_errfile (line 44) | def test_calc_cutoff_errfile(monkeypatch, tmpdir):

FILE: test/test_collect_contig_gfa.py
  function test_help (line 13) | def test_help():
  function generate_seq (line 42) | def generate_seq(seq_len):
  function setup_test (line 45) | def setup_test(fp_p_ctg, fp_p_tp, fp_a_ctg, fp_a_tp):
  function test_main_1 (line 135) | def test_main_1(tmpdir, capsys):
  function test_main_2 (line 163) | def test_main_2(tmpdir, capsys):
  function test_main_3 (line 196) | def test_main_3(tmpdir, capsys):
  function test_main_4 (line 238) | def test_main_4(tmpdir, capsys):

FILE: test/test_collect_pread_gfa.py
  function test_help (line 6) | def test_help():
  function test_load_seqs (line 12) | def test_load_seqs():
  function test_load_pread_overlaps (line 16) | def test_load_pread_overlaps():
  function test_load_sg_edges (line 20) | def test_load_sg_edges():
  function test_add_node (line 24) | def test_add_node():
  function test_add_edge (line 28) | def test_add_edge():
  function test_add_tiling_paths_to_gfa (line 32) | def test_add_tiling_paths_to_gfa():
  function test_add_string_graph_to_gfa (line 36) | def test_add_string_graph_to_gfa():
  function test_main_1 (line 40) | def test_main_1():

FILE: test/test_consensus.py
  function test_help (line 5) | def test_help():

FILE: test/test_functional.py
  function eq_ (line 14) | def eq_(a, b):
  function test_get_daligner_job_descriptions (line 18) | def test_get_daligner_job_descriptions():
  function test_get_daligner_job_descriptions_with_bad_arg (line 30) | def test_get_daligner_job_descriptions_with_bad_arg():
  function test_get_daligner_job_descriptions_small (line 37) | def test_get_daligner_job_descriptions_small():
  function test_get_daligner_job_descriptions_se161 (line 50) | def test_get_daligner_job_descriptions_se161():
  function test_get_mjob_data (line 57) | def test_get_mjob_data():
  function test_skip_LAcheck (line 70) | def test_skip_LAcheck():
  function test_first_block_las (line 93) | def test_first_block_las():
  function test_xform_script_for_preads (line 109) | def test_xform_script_for_preads():
  function check (line 131) | def check(target, expected):
  function test_calc_cutoff_from_reverse_sorted_readlength_counts (line 145) | def test_calc_cutoff_from_reverse_sorted_readlength_counts(n_target, n_e...
  function test_calc_cutoff_from_reverse_sorted_readlength_counts_raises (line 149) | def test_calc_cutoff_from_reverse_sorted_readlength_counts_raises():
  function test_get_reverse_sorted_readlength_counts_from_DBstats (line 174) | def test_get_reverse_sorted_readlength_counts_from_DBstats():
  function test_num2int (line 180) | def test_num2int():
  function test_calc_cutoff (line 195) | def test_calc_cutoff():
  function test_calc_cutoff_bad_coverage (line 202) | def test_calc_cutoff_bad_coverage():
  function test_parsed_readlengths_from_dbdump_output (line 226) | def test_parsed_readlengths_from_dbdump_output():
  function test_mapped_readlengths_from_dbdump_output (line 232) | def test_mapped_readlengths_from_dbdump_output():
  function test_average_difference (line 237) | def test_average_difference():
  function test_calc_metric_truncation (line 254) | def test_calc_metric_truncation():
  function test_calc_metric_fragmentation (line 267) | def test_calc_metric_fragmentation():
  function test_args_from_line (line 272) | def test_args_from_line():
  function test_splitlines_iter (line 285) | def test_splitlines_iter():
  function test_Readers (line 290) | def test_Readers():
  function test_get_falcon_sense_option (line 303) | def test_get_falcon_sense_option():
  function test_get_pa_dazcon_option (line 307) | def test_get_pa_dazcon_option():
  function test_get_option_with_proper_nproc (line 311) | def test_get_option_with_proper_nproc():

FILE: test/test_gen_gfa_v1.py
  function test_help (line 6) | def test_help():
  function test_main_1 (line 12) | def test_main_1(tmpdir, capsys):

FILE: test/test_gen_gfa_v2.py
  function test_help (line 6) | def test_help():
  function test_main_1 (line 12) | def test_main_1(tmpdir, capsys):

FILE: test/test_gfa_graph.py
  function test_gfa_graph (line 15) | def test_gfa_graph():
  function test_add_node_1 (line 18) | def test_add_node_1():
  function test_add_node_2 (line 29) | def test_add_node_2():
  function test_add_edge_1 (line 47) | def test_add_edge_1():
  function test_add_edge_2 (line 68) | def test_add_edge_2():
  function test_add_path_1 (line 104) | def test_add_path_1():
  function test_add_path_2 (line 118) | def test_add_path_2():
  function test_write_gfa_v1 (line 154) | def test_write_gfa_v1():
  function test_write_gfa_v2 (line 173) | def test_write_gfa_v2():
  function test_serialize (line 192) | def test_serialize():
  function test_deserialize (line 204) | def test_deserialize():

FILE: test/test_ovlp_filter.py
  function assert_equal (line 5) | def assert_equal(expected, got):
  function test_help (line 9) | def test_help():
  function test_several (line 19) | def test_several():
  function test_one_not_ignored (line 41) | def test_one_not_ignored():
  function test_one_line_ignored (line 54) | def test_one_line_ignored():
  function test_empty (line 67) | def test_empty():

FILE: test/test_ovlp_stats.py
  function test_help (line 5) | def test_help():
  function test (line 12) | def test():

FILE: test/test_ovlp_to_graph.py
  function test_help (line 6) | def test_help():
  function test_reverse_end (line 13) | def test_reverse_end():

FILE: test/test_run_support.py
  function parse_config (line 6) | def parse_config(content):
  function test_check_config_sections (line 95) | def test_check_config_sections():
  function test_check_config_sections_foo (line 106) | def test_check_config_sections_foo():
  function test_update_job_sections0 (line 125) | def test_update_job_sections0():
  function test_update_job_sections1 (line 140) | def test_update_job_sections1():
  function test_update_job_sections2 (line 157) | def test_update_job_sections2():
  function test_update_job_sections3 (line 171) | def test_update_job_sections3():
  function test_clean_falcon_options (line 177) | def test_clean_falcon_options():

FILE: test/test_stats_preassembly.py
  function test_stats_from_sorted_readlengths (line 7) | def test_stats_from_sorted_readlengths():
  function test_stats_dict (line 13) | def test_stats_dict():

FILE: test/test_tiling_path.py
  function test_tiling_path_1 (line 62) | def test_tiling_path_1():
  function test_tiling_path_2 (line 103) | def test_tiling_path_2():
  function test_tiling_path_3 (line 143) | def test_tiling_path_3():
  function test_tiling_path_4_expect_crash (line 178) | def test_tiling_path_4_expect_crash():
  function test_tiling_path_5 (line 199) | def test_tiling_path_5(tmpdir):
  function test_calc_node_coords_1 (line 226) | def test_calc_node_coords_1():
  function test_calc_node_coords_2 (line 257) | def test_calc_node_coords_2():
  function test_calc_node_coords_3 (line 266) | def test_calc_node_coords_3():
  function test_calc_node_coords_1 (line 305) | def test_calc_node_coords_1():
  function test_find_a_ctg_placement_1 (line 317) | def test_find_a_ctg_placement_1():
  function test_find_a_ctg_placement_2 (line 335) | def test_find_a_ctg_placement_2():
  function test_find_a_ctg_placement_3 (line 347) | def test_find_a_ctg_placement_3():
  function test_get_subpath_1 (line 359) | def test_get_subpath_1():
  function test_get_subpath_2 (line 379) | def test_get_subpath_2():
  function test_get_subpath_3 (line 399) | def test_get_subpath_3():
  function test_get_subpath_4 (line 420) | def test_get_subpath_4():
  function test_get_subpath_5 (line 440) | def test_get_subpath_5():
  function test_get_subpath_6 (line 461) | def test_get_subpath_6():
  function test_get_subpath_7 (line 482) | def test_get_subpath_7():
  function test_get_subpath_8 (line 502) | def test_get_subpath_8():

FILE: test/test_util_io.py
  function test_io_se1331 (line 8) | def test_io_se1331():
  function test_str_type (line 24) | def test_str_type(Context):

FILE: test/test_util_system.py
  function touchtree (line 12) | def touchtree(*fns):
  function dirtree (line 21) | def dirtree(tmpdir_factory):
  function picture (line 29) | def picture(fns):
  function test_system_find_files (line 44) | def test_system_find_files(dirtree):
  function test_make_fofn_abs (line 84) | def test_make_fofn_abs(tmpdir):
Condensed preview — 165 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (1,502K chars).
[
  {
    "path": ".gitignore",
    "chars": 155,
    "preview": "/LOCAL/\n/build/\n/dist/\n/.cache/\nfalcon_kit.egg-info/\n/.coverage\n*.pyc\n*.pyo\n*.swp\n*.so\n*.dylib\n*.dll\n*.egg\n*.eggs\nFALCON"
  },
  {
    "path": ".gitmodules",
    "chars": 0,
    "preview": ""
  },
  {
    "path": ".travis.yml",
    "chars": 869,
    "preview": "# Build matrix / environment variable are explained on:\n# http://about.travis-ci.org/docs/user/build-configuration/\n# Th"
  },
  {
    "path": "LICENSE",
    "chars": 1898,
    "preview": "#################################################################################$$\n# Copyright (c) 2011-2015, Pacific B"
  },
  {
    "path": "MANIFEST.in",
    "chars": 16,
    "preview": "include src/c/*\n"
  },
  {
    "path": "README.md",
    "chars": 2283,
    "preview": "Falcon\n===========\n\nFalcon: a set of tools for fast aligning long reads for consensus and assembly\n\nThe Falcon tool kit "
  },
  {
    "path": "bamboo_build.sh",
    "chars": 1045,
    "preview": "#!/bin/bash\n\ntype module >& /dev/null || . /mnt/software/Modules/current/init/bash\nmodule purge\nmodule load git\nmodule l"
  },
  {
    "path": "bamboo_wheel.sh",
    "chars": 422,
    "preview": "#!/bin/bash\ntype module >& /dev/null || . /mnt/software/Modules/current/init/bash\nmodule purge\nmodule load gcc\nmodule lo"
  },
  {
    "path": "doc/README",
    "chars": 88,
    "preview": "The images here are used by\n\n  https://github.com/PacificBiosciences/FALCON/wiki/Manual\n"
  },
  {
    "path": "examples/build_env.sh",
    "chars": 558,
    "preview": "virtualenv --no-site-packages  --always-copy   $PWD/fc_env\n. $PWD/fc_env/bin/activate\ngit clone https://github.com/pb-jc"
  },
  {
    "path": "examples/build_env2.sh",
    "chars": 402,
    "preview": "virtualenv --no-site-packages  --always-copy   $PWD/fc_env\n. $PWD/fc_env/bin/activate\n\ncd FALCON\ngit submodule init\ngit "
  },
  {
    "path": "examples/ecoli_asm_graph_exploration.ipynb",
    "chars": 457370,
    "preview": "{\n \"metadata\": {\n  \"name\": \"\",\n  \"signature\": \"sha256:585e8268126c8365dec7b581d0673bd9a5a1e83a88800e51c0f9028479318042\"\n"
  },
  {
    "path": "examples/fc_run_LG.cfg",
    "chars": 1041,
    "preview": "[General]\n# list of files of the initial bas.h5 files\ninput_fofn = input.fofn\n#input_fofn = preads.fofn\n\ninput_type = ra"
  },
  {
    "path": "examples/fc_run_arab.cfg",
    "chars": 1079,
    "preview": "[General]\n# list of files of the initial bas.h5 files\ninput_fofn = input.fofn\n#input_fofn = preads.fofn\n\ninput_type = ra"
  },
  {
    "path": "examples/fc_run_dmel.cfg",
    "chars": 1066,
    "preview": "[General]\n# list of files of the initial bas.h5 files\ninput_fofn = input.fofn\n#input_fofn = preads.fofn\n\ninput_type = ra"
  },
  {
    "path": "examples/fc_run_ecoli.cfg",
    "chars": 1025,
    "preview": "[General]\n# list of files of the initial bas.h5 files\ninput_fofn = input.fofn\n#input_fofn = preads.fofn\n\ninput_type = ra"
  },
  {
    "path": "examples/fc_run_ecoli_2.cfg",
    "chars": 1029,
    "preview": "[General]\n# list of files of the initial bas.h5 files\ninput_fofn = input.fofn\n#input_fofn = preads.fofn\n\ninput_type = ra"
  },
  {
    "path": "examples/logging.json",
    "chars": 876,
    "preview": "{\n    \"version\": 1,\n    \"formatters\": {\n        \"format_full\": {\n            \"format\": \"%(asctime)s - %(name)s - %(level"
  },
  {
    "path": "examples/run_ecoli_test.sh",
    "chars": 553,
    "preview": "mkdir ecoli_test/\ncd ecoli_test/\nmkdir data\ncd data\nwget https://www.dropbox.com/s/tb78i5i3nrvm6rg/m140913_050931_42139_"
  },
  {
    "path": "falcon.snake",
    "chars": 22530,
    "preview": "\nimport json\nimport os\n#import snakemake.utils\n\ndef snake_merge_dynamic_dict(reldir, input_fns, pattern, wildcards):\n   "
  },
  {
    "path": "falcon_kit/FastaReader.py",
    "chars": 6279,
    "preview": "from __future__ import absolute_import\n\n\nfrom builtins import next\nfrom builtins import range\nfrom builtins import objec"
  },
  {
    "path": "falcon_kit/__init__.py",
    "chars": 211,
    "preview": "from __future__ import absolute_import\n\nfrom .falcon_kit import *\n\ntry:\n    import sys, pkg_resources\n    sys.stderr.wri"
  },
  {
    "path": "falcon_kit/bash.py",
    "chars": 15298,
    "preview": "\"\"\"Most bash-scripting is generated here.\n\"\"\"\nfrom __future__ import absolute_import\n\n\nfrom future.utils import viewitem"
  },
  {
    "path": "falcon_kit/falcon_kit.py",
    "chars": 5917,
    "preview": "from __future__ import absolute_import\n\n__all__ = [\n    'kup', 'DWA', 'falcon',\n    'KmerLookup', 'KmerMatch', 'AlnRange"
  },
  {
    "path": "falcon_kit/fc_asm_graph.py",
    "chars": 5697,
    "preview": "from __future__ import absolute_import\n\nfrom builtins import zip\nfrom builtins import object\nfrom .FastaReader import op"
  },
  {
    "path": "falcon_kit/functional.py",
    "chars": 16305,
    "preview": "\"\"\"Purely functional code.\n\"\"\"\nfrom __future__ import absolute_import\nfrom __future__ import division\nfrom __future__ im"
  },
  {
    "path": "falcon_kit/gfa_graph.py",
    "chars": 10327,
    "preview": "from __future__ import absolute_import\nimport os\nimport sys\nimport json\n\nGFA_H_TAG = 'H'\nGFA_S_TAG = 'S'\nGFA_L_TAG = 'L'"
  },
  {
    "path": "falcon_kit/io.py",
    "chars": 4349,
    "preview": "from __future__ import absolute_import\nfrom __future__ import division\n\nfrom pypeflow.io import (\n        syscall, captu"
  },
  {
    "path": "falcon_kit/mains/LAmerge.py",
    "chars": 1370,
    "preview": "#!/usr/bin/env python\n\"\"\"Usage:\n\n    LAmerge.py DB <args>\n\nRun LAcheck on each input in args. Exclude any failures from\n"
  },
  {
    "path": "falcon_kit/mains/LAsort.py",
    "chars": 1094,
    "preview": "#!/usr/bin/env python\n\"\"\"Usage:\n\n    LAsort.py DB <args>\n\nRun LAcheck on each input in args. Exclude any failures from\nt"
  },
  {
    "path": "falcon_kit/mains/__init__.py",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "falcon_kit/mains/actg_coordinate.py",
    "chars": 1137,
    "preview": "from __future__ import absolute_import\nfrom __future__ import print_function\n\nfrom falcon_kit.FastaReader import open_fa"
  },
  {
    "path": "falcon_kit/mains/build_pdb.py",
    "chars": 1796,
    "preview": "from __future__ import absolute_import\n\nimport argparse\nimport logging\nimport os\nimport sys\nfrom .. import io\nfrom .. im"
  },
  {
    "path": "falcon_kit/mains/build_rdb.py",
    "chars": 2312,
    "preview": "from __future__ import absolute_import\n\nimport argparse\nimport logging\nimport os\nimport sys\nfrom ..util.io import yield_"
  },
  {
    "path": "falcon_kit/mains/calc_cutoff.py",
    "chars": 2086,
    "preview": "from __future__ import absolute_import\n\n\nfrom .. import functional as f\nimport argparse\nimport os\nimport sys\nimport trac"
  },
  {
    "path": "falcon_kit/mains/collect_contig_gfa.py",
    "chars": 4657,
    "preview": "import argparse\nimport os\nimport sys\nimport json\n\nfrom falcon_kit.gfa_graph import GFAGraph, serialize_gfa, deserialize_"
  },
  {
    "path": "falcon_kit/mains/collect_pread_gfa.py",
    "chars": 10892,
    "preview": "import argparse\nimport os\nimport sys\nimport json\n\nfrom falcon_kit.fc_asm_graph import AsmGraph\nfrom falcon_kit.FastaRead"
  },
  {
    "path": "falcon_kit/mains/consensus.py",
    "chars": 12167,
    "preview": "from __future__ import absolute_import\nfrom __future__ import print_function\nfrom __future__ import division\n\nfrom built"
  },
  {
    "path": "falcon_kit/mains/consensus_gather_fasta_fofn.py",
    "chars": 1521,
    "preview": "\"\"\"\n\"\"\"\nfrom __future__ import absolute_import\nfrom __future__ import print_function\n\n\nfrom future.utils import viewitem"
  },
  {
    "path": "falcon_kit/mains/consensus_scatter.py",
    "chars": 4013,
    "preview": "from __future__ import absolute_import\n\n\nfrom future.utils import viewitems\nimport argparse\nimport collections\nimport lo"
  },
  {
    "path": "falcon_kit/mains/consensus_split.py",
    "chars": 4628,
    "preview": "from __future__ import absolute_import\n\n\nfrom future.utils import viewitems\nimport argparse\nimport collections\nimport lo"
  },
  {
    "path": "falcon_kit/mains/consensus_task.py",
    "chars": 5558,
    "preview": "from __future__ import absolute_import\n\nimport argparse\nimport logging\nimport multiprocessing\nimport os\nimport re\nimport"
  },
  {
    "path": "falcon_kit/mains/contig_annotate.py",
    "chars": 1256,
    "preview": "from __future__ import absolute_import\nfrom __future__ import print_function\n\nfrom falcon_kit.fc_asm_graph import AsmGra"
  },
  {
    "path": "falcon_kit/mains/copy_fofn.py",
    "chars": 1560,
    "preview": "from __future__ import absolute_import\n\nimport argparse\nimport logging\nimport os\nimport sys\nfrom .. import io\n\nLOG = log"
  },
  {
    "path": "falcon_kit/mains/copy_mapped.py",
    "chars": 3598,
    "preview": "#!/bin/env python2.7\nfrom __future__ import absolute_import\n\n\nfrom future.utils import viewitems\n\nimport argparse\nimport"
  },
  {
    "path": "falcon_kit/mains/ctg_link_analysis.py",
    "chars": 3050,
    "preview": "from __future__ import absolute_import\nfrom __future__ import print_function\n\nfrom falcon_kit import fc_asm_graph\nimport"
  },
  {
    "path": "falcon_kit/mains/daligner.py",
    "chars": 1812,
    "preview": "from __future__ import absolute_import\n\nimport argparse\nimport logging\nimport os\nimport sys\nfrom .. import io\nfrom .. im"
  },
  {
    "path": "falcon_kit/mains/daligner_gather_las_list.py",
    "chars": 2161,
    "preview": "\"\"\"Not sure anything uses the fopfn anymore.\n\"\"\"\nfrom __future__ import absolute_import\n\n\n#from future.utils import view"
  },
  {
    "path": "falcon_kit/mains/daligner_scatter.py",
    "chars": 3409,
    "preview": "from __future__ import absolute_import\n\nimport argparse\nimport collections\nimport logging\nimport os\nimport sys\nfrom .. i"
  },
  {
    "path": "falcon_kit/mains/daligner_split.py",
    "chars": 3864,
    "preview": "from __future__ import absolute_import\n\nimport argparse\nimport collections\nimport logging\nimport os\nimport sys\nfrom .. i"
  },
  {
    "path": "falcon_kit/mains/dazzler.py",
    "chars": 37418,
    "preview": "'''\n    # DAMASKER options\n    \"\"\"\n    Example config usage:\n    pa_use_tanmask = true\n    pa_use_repmask = true\n    pa_"
  },
  {
    "path": "falcon_kit/mains/dedup_a_tigs.py",
    "chars": 1573,
    "preview": "from __future__ import absolute_import\nfrom __future__ import print_function\n\nfrom falcon_kit.FastaReader import open_fa"
  },
  {
    "path": "falcon_kit/mains/fasta2fasta.py",
    "chars": 7373,
    "preview": "#!/usr/bin/env python2.7\n\"\"\"A pre-processor for DAZZ_DB/fasta2DB.\n\nSince fasta2DB has several constraints\n(a single movi"
  },
  {
    "path": "falcon_kit/mains/fetch_reads.py",
    "chars": 6015,
    "preview": "from __future__ import absolute_import\nfrom __future__ import print_function\n\nfrom __future__ import division\n\nfrom falc"
  },
  {
    "path": "falcon_kit/mains/gen_gfa_v1.py",
    "chars": 930,
    "preview": "import argparse\nimport os\nimport sys\n\nfrom falcon_kit.fc_asm_graph import AsmGraph\nfrom falcon_kit.FastaReader import Fa"
  },
  {
    "path": "falcon_kit/mains/gen_gfa_v2.py",
    "chars": 930,
    "preview": "import argparse\nimport os\nimport sys\n\nfrom falcon_kit.fc_asm_graph import AsmGraph\nfrom falcon_kit.FastaReader import Fa"
  },
  {
    "path": "falcon_kit/mains/generate_read_to_ctg_map.py",
    "chars": 2653,
    "preview": "from __future__ import absolute_import\nfrom __future__ import print_function\n\nfrom __future__ import division\n\nimport ar"
  },
  {
    "path": "falcon_kit/mains/generic_gather.py",
    "chars": 1906,
    "preview": "from __future__ import absolute_import\n\nimport argparse\nimport logging\nimport os\nimport sys\nfrom .. import io\n\nLOG = log"
  },
  {
    "path": "falcon_kit/mains/generic_run_units_of_work.py",
    "chars": 4254,
    "preview": "from __future__ import absolute_import\n\nimport argparse\nimport collections\nimport glob\nimport logging\nimport os\nimport s"
  },
  {
    "path": "falcon_kit/mains/generic_scatter_one_uow.py",
    "chars": 2337,
    "preview": "from __future__ import absolute_import\n\nimport argparse\nimport collections\nimport glob\nimport logging\nimport os\nimport s"
  },
  {
    "path": "falcon_kit/mains/generic_unsplit.py",
    "chars": 2292,
    "preview": "from __future__ import absolute_import\n\nimport argparse\nimport logging\nimport os\nimport sys\nfrom .. import io\n\nLOG = log"
  },
  {
    "path": "falcon_kit/mains/get_read_ctg_map.py",
    "chars": 3626,
    "preview": "from __future__ import absolute_import\n\nfrom .. import pype_tasks\n# pylint: disable=no-name-in-module, import-error, fix"
  },
  {
    "path": "falcon_kit/mains/graph_to_contig.py",
    "chars": 16808,
    "preview": "\"\"\"\nTODO: (from convo w/ Ivan)\nthe issue with this script (but would still like to re-read it to refresh my memory). The"
  },
  {
    "path": "falcon_kit/mains/graph_to_utgs.py",
    "chars": 6601,
    "preview": "from __future__ import absolute_import\nfrom __future__ import print_function\n\n\nfrom builtins import zip\nfrom builtins im"
  },
  {
    "path": "falcon_kit/mains/hgap4_adapt.py",
    "chars": 15415,
    "preview": "\"\"\"Given a full HGAP4 run,\n\ngenerate directories and symlinks to make it look like\na pypeflow run.\n\nThen, fc_run/fc_unzi"
  },
  {
    "path": "falcon_kit/mains/las_merge.py",
    "chars": 3319,
    "preview": "from __future__ import absolute_import\n\nimport argparse\nimport logging\nimport os\nimport sys\nfrom .. import io\nfrom .. im"
  },
  {
    "path": "falcon_kit/mains/las_merge_gather.py",
    "chars": 1763,
    "preview": "\"\"\"Not sure anything uses the fopfn anymore.\n\"\"\"\nfrom __future__ import absolute_import\nfrom __future__ import print_fun"
  },
  {
    "path": "falcon_kit/mains/las_merge_scatter.py",
    "chars": 4274,
    "preview": "from __future__ import absolute_import\n\nimport argparse\nimport collections\nimport logging\nimport os\nimport sys\nfrom .. i"
  },
  {
    "path": "falcon_kit/mains/las_merge_split.py",
    "chars": 5400,
    "preview": "from __future__ import absolute_import\n\nimport argparse\nimport collections\nimport logging\nimport os\nimport re\nimport sys"
  },
  {
    "path": "falcon_kit/mains/ovlp_filter.py",
    "chars": 10435,
    "preview": "from __future__ import absolute_import\n\n\nfrom builtins import range\nfrom falcon_kit.multiproc import Pool\nimport falcon_"
  },
  {
    "path": "falcon_kit/mains/ovlp_stats.py",
    "chars": 4628,
    "preview": "from __future__ import absolute_import\nfrom __future__ import print_function\n\n\nfrom falcon_kit.multiproc import Pool\nimp"
  },
  {
    "path": "falcon_kit/mains/ovlp_to_graph.py",
    "chars": 53945,
    "preview": "from __future__ import absolute_import\nfrom __future__ import print_function\n\n\nfrom future.utils import viewitems\nfrom f"
  },
  {
    "path": "falcon_kit/mains/pr_ctg_track.py",
    "chars": 6588,
    "preview": "from __future__ import absolute_import\nfrom __future__ import print_function\n\n\nfrom falcon_kit.multiproc import Pool\nimp"
  },
  {
    "path": "falcon_kit/mains/report_pre_assembly.py",
    "chars": 1613,
    "preview": "#!/usr/bin/env python2.7\nfrom __future__ import absolute_import\n\nfrom .. import stats_preassembly\nimport argparse\nimport"
  },
  {
    "path": "falcon_kit/mains/rr_ctg_track.py",
    "chars": 6849,
    "preview": "from __future__ import absolute_import\nfrom __future__ import print_function\n\nfrom falcon_kit.multiproc import Pool\nimpo"
  },
  {
    "path": "falcon_kit/mains/run1.py",
    "chars": 26777,
    "preview": "from __future__ import absolute_import\n\nfrom ..pype import (wrap_gen_task as gen_task, gen_parallel_tasks, Dist)\nfrom .."
  },
  {
    "path": "falcon_kit/mains/symlink_mapped.py",
    "chars": 3154,
    "preview": "#!/bin/env python2.7\nfrom __future__ import absolute_import\n\n\nfrom future.utils import viewitems\n\nimport argparse\nimport"
  },
  {
    "path": "falcon_kit/mains/task_report_pre_assembly.py",
    "chars": 2423,
    "preview": "from __future__ import absolute_import\n\nimport argparse\nimport logging\nimport os\nimport sys\nfrom .. import io\nfrom .. im"
  },
  {
    "path": "falcon_kit/mains/tasks.py",
    "chars": 694,
    "preview": "\"\"\"Executable tasks.\n\nTo be called by pbsmrtpipe.\n\npypeFLOW uses its own adaptors instead.\n\"\"\"\nfrom __future__ import ab"
  },
  {
    "path": "falcon_kit/multiproc.py",
    "chars": 862,
    "preview": "\"\"\"Job pools for multiprocessing.\n\"\"\"\nfrom __future__ import absolute_import\n\nfrom builtins import map\nfrom builtins imp"
  },
  {
    "path": "falcon_kit/pype.py",
    "chars": 7291,
    "preview": "\"\"\"This was copied from falcon_unzip, but we\nneeded to modify the TASK SCRIPT to use our copy of\ngeneric_gather.py (not "
  },
  {
    "path": "falcon_kit/pype_tasks.py",
    "chars": 24328,
    "preview": "from __future__ import absolute_import\nfrom __future__ import print_function\n\n\nfrom future.utils import viewitems\nfrom f"
  },
  {
    "path": "falcon_kit/run_support.py",
    "chars": 22097,
    "preview": "from __future__ import absolute_import\n\n\nfrom future.utils import viewitems\n\nfrom . import bash, functional\nfrom .functi"
  },
  {
    "path": "falcon_kit/snakemake.py",
    "chars": 10485,
    "preview": "\"\"\"Exact copy of falcon_unzip/tasks/snakemake.py\nTODO: Consolidate.\n\"\"\"\nfrom __future__ import absolute_import\n\n\nfrom fu"
  },
  {
    "path": "falcon_kit/stats_preassembly.py",
    "chars": 9530,
    "preview": "#!/usr/bin/env python2.7\n\"\"\" PreAssembly Report.\n\nSee FALCON-pbsmrtpipe/pbfalcon/report_preassembly.py for XML version.\n"
  },
  {
    "path": "falcon_kit/tiling_path.py",
    "chars": 8445,
    "preview": "class TilingPathEdge:\n\n    def __init__(self, split_line = None):\n        self.ctg_id, self.v, self.w, self.wrid, self.b"
  },
  {
    "path": "falcon_kit/util/__init__.py",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "falcon_kit/util/io.py",
    "chars": 7090,
    "preview": "\"\"\"I/O utilities\nNot specific to FALCON.\n\"\"\"\nfrom __future__ import absolute_import\n\n#from builtins import str\nfrom buil"
  },
  {
    "path": "falcon_kit/util/system.py",
    "chars": 3801,
    "preview": "from __future__ import absolute_import\n\n\nfrom future.utils import viewitems\nfrom pypeflow.io import cd, capture\nimport l"
  },
  {
    "path": "makefile",
    "chars": 1255,
    "preview": "# Feel free to override this.\nifndef PYTHONUSERBASE\n  PYTHONUSERBASE:=LOCAL\n  PATH:=${PYTHONUSERBASE}/bin:${PATH}\n  expo"
  },
  {
    "path": "setup.cfg",
    "chars": 50,
    "preview": "[tool:pytest]\ndoctest_optionflags = ALLOW_UNICODE\n"
  },
  {
    "path": "setup.py",
    "chars": 3214,
    "preview": "#!/usr/bin/env python2.7\n\nfrom setuptools import setup, Extension\nimport subprocess\nimport sys\nimport glob\n\ninstall_requ"
  },
  {
    "path": "src/c/DW_banded.c",
    "chars": 11692,
    "preview": "\n/*\n * =====================================================================================\n *\n *       Filename:  DW_b"
  },
  {
    "path": "src/c/Makefile",
    "chars": 622,
    "preview": "DW_align.so: DW_banded.c common.h\n\tgcc DW_banded.c -O3 -shared -fPIC -o DW_align.so\n\nkmer_lookup.so: kmer_lookup.c commo"
  },
  {
    "path": "src/c/Makefile.osx",
    "chars": 1365,
    "preview": "DW_align.so: DW_banded.c common.h\n\tgcc DW_banded.c -O3 -shared -fPIC -o DW_align.so -I/Applications/Xcode.app/Contents/D"
  },
  {
    "path": "src/c/common.h",
    "chars": 4962,
    "preview": "\n/*\n * =====================================================================================\n *\n *       Filename:  comm"
  },
  {
    "path": "src/c/ext_falcon.c",
    "chars": 251,
    "preview": "#include \"Python.h\"\nstatic PyMethodDef SpamMethods[] = {\n    {NULL, NULL, 0, NULL}        /* Sentinel */\n};\nPyMODINIT_FU"
  },
  {
    "path": "src/c/falcon.c",
    "chars": 28929,
    "preview": "/*\n * =====================================================================================\n *\n *       Filename:  fastc"
  },
  {
    "path": "src/c/kmer_lookup.c",
    "chars": 18213,
    "preview": "/*\n * =====================================================================================\n *\n *       Filename:  kmer_"
  },
  {
    "path": "src/py_scripts/fc_actg_coordinate.py",
    "chars": 148,
    "preview": "from __future__ import absolute_import\n\nfrom falcon_kit.mains.actg_coordinate import main\nimport sys\n\nif __name__ == \"__"
  },
  {
    "path": "src/py_scripts/fc_consensus.py",
    "chars": 142,
    "preview": "from __future__ import absolute_import\n\nfrom falcon_kit.mains.consensus import main\nimport sys\n\nif __name__ == \"__main__"
  },
  {
    "path": "src/py_scripts/fc_contig_annotate.py",
    "chars": 148,
    "preview": "from __future__ import absolute_import\n\nfrom falcon_kit.mains.contig_annotate import main\nimport sys\n\nif __name__ == \"__"
  },
  {
    "path": "src/py_scripts/fc_ctg_link_analysis.py",
    "chars": 150,
    "preview": "from __future__ import absolute_import\n\nfrom falcon_kit.mains.ctg_link_analysis import main\nimport sys\n\nif __name__ == \""
  },
  {
    "path": "src/py_scripts/fc_dedup_a_tigs.py",
    "chars": 145,
    "preview": "from __future__ import absolute_import\n\nfrom falcon_kit.mains.dedup_a_tigs import main\nimport sys\n\nif __name__ == \"__mai"
  },
  {
    "path": "src/py_scripts/fc_graph_to_contig.py",
    "chars": 148,
    "preview": "from __future__ import absolute_import\n\nfrom falcon_kit.mains.graph_to_contig import main\nimport sys\n\nif __name__ == \"__"
  },
  {
    "path": "src/py_scripts/fc_graph_to_utgs.py",
    "chars": 146,
    "preview": "from __future__ import absolute_import\n\nfrom falcon_kit.mains.graph_to_utgs import main\nimport sys\n\nif __name__ == \"__ma"
  },
  {
    "path": "src/py_scripts/fc_ovlp_filter.py",
    "chars": 144,
    "preview": "from __future__ import absolute_import\n\nfrom falcon_kit.mains.ovlp_filter import main\nimport sys\n\nif __name__ == \"__main"
  },
  {
    "path": "src/py_scripts/fc_ovlp_stats.py",
    "chars": 143,
    "preview": "from __future__ import absolute_import\n\nfrom falcon_kit.mains.ovlp_stats import main\nimport sys\n\nif __name__ == \"__main_"
  },
  {
    "path": "src/py_scripts/fc_ovlp_to_graph.py",
    "chars": 146,
    "preview": "from __future__ import absolute_import\n\nfrom falcon_kit.mains.ovlp_to_graph import main\nimport sys\n\nif __name__ == \"__ma"
  },
  {
    "path": "src/py_scripts/fc_run.py",
    "chars": 137,
    "preview": "from __future__ import absolute_import\n\nfrom falcon_kit.mains.run1 import main\nimport sys\n\nif __name__ == \"__main__\":\n  "
  },
  {
    "path": "src/utils/fetch_preads.py",
    "chars": 1864,
    "preview": "from __future__ import absolute_import\nfrom __future__ import print_function\n\nfrom pbcore.io import FastaReader\nimport n"
  },
  {
    "path": "test/HPCdaligner_synth0.sh",
    "chars": 1196,
    "preview": "# Daligner jobs (2)\ndaligner -v -h1 -t16 -H1 -e0.7 -l1 -s1000 raw_reads.1 raw_reads.1\ndaligner -v -h1 -t16 -H1 -e0.7 -l1"
  },
  {
    "path": "test/HPCdaligner_synth0_new.sh",
    "chars": 862,
    "preview": "# Daligner jobs (2)\ndaligner -v -w1 -h1 -t50 -H2000 -e0.99 -l1 -s1000 -P=. -mdust raw_reads.1 raw_reads.1\ndaligner -v -w"
  },
  {
    "path": "test/HPCdaligner_synth0_preads.sh",
    "chars": 1037,
    "preview": "# Daligner jobs (1)\ndaligner -v -h1 -t50 -H1 -e0.99 -l1 -s1000 preads.1 preads.1\n# Initial sort jobs (1)\nLAsort -v pread"
  },
  {
    "path": "test/helpers.py",
    "chars": 1172,
    "preview": "\"\"\"\nThe equal_*() funcs are not really needed with pytest,\nbut they do not hurt.\n\"\"\"\nfrom builtins import bytes\nfrom fal"
  },
  {
    "path": "test/se161.sh",
    "chars": 223978,
    "preview": "daligner -v -k18 -h70 -t14 -H7000 -e0.75 raw_reads.92 raw_reads.1 raw_reads.2 raw_reads.3 raw_reads.4 raw_reads.5 raw_re"
  },
  {
    "path": "test/test_actg_coordinate.py",
    "chars": 156,
    "preview": "\nimport falcon_kit.mains.actg_coordinate as mod\n\n'''\ndef test_help():\n    try:\n        mod.main(['prog', '--help'])\n    "
  },
  {
    "path": "test/test_calc_cutoff.py",
    "chars": 1633,
    "preview": "\n\nimport falcon_kit.mains.calc_cutoff as mod\nimport helpers\nimport os.path\nimport pytest\n\n\ndef test_help():\n    try:\n   "
  },
  {
    "path": "test/test_collect_contig_gfa.py",
    "chars": 9068,
    "preview": "import falcon_kit.mains.collect_contig_gfa as mod\nimport helpers\nimport pytest\nimport os\nimport falcon_kit.tiling_path\nf"
  },
  {
    "path": "test/test_collect_pread_gfa.py",
    "chars": 944,
    "preview": "import falcon_kit.mains.collect_pread_gfa as mod\nimport helpers\nimport pytest\nimport os\n\ndef test_help():\n    try:\n     "
  },
  {
    "path": "test/test_consensus.py",
    "chars": 143,
    "preview": "\nimport falcon_kit.mains.consensus as mod\n\n\ndef test_help():\n    try:\n        mod.main(['prog', '--help'])\n    except Sy"
  },
  {
    "path": "test/test_contig_annotate.py",
    "chars": 156,
    "preview": "\nimport falcon_kit.mains.contig_annotate as mod\n\n'''\ndef test_help():\n    try:\n        mod.main(['prog', '--help'])\n    "
  },
  {
    "path": "test/test_ctg_link_analysis.py",
    "chars": 158,
    "preview": "\nimport falcon_kit.mains.ctg_link_analysis as mod\n\n'''\ndef test_help():\n    try:\n        mod.main(['prog', '--help'])\n  "
  },
  {
    "path": "test/test_functional.py",
    "chars": 9489,
    "preview": "import helpers\nimport pytest\nimport falcon_kit.functional as f\nimport collections\nimport os\nimport re\n\nthisdir = os.path"
  },
  {
    "path": "test/test_gen_gfa_v1.py",
    "chars": 1720,
    "preview": "import falcon_kit.mains.gen_gfa_v1 as mod\nimport helpers\nimport pytest\nimport os\n\ndef test_help():\n    try:\n        mod."
  },
  {
    "path": "test/test_gen_gfa_v2.py",
    "chars": 1618,
    "preview": "import falcon_kit.mains.gen_gfa_v2 as mod\nimport helpers\nimport pytest\nimport os\n\ndef test_help():\n    try:\n        mod."
  },
  {
    "path": "test/test_gfa_graph.py",
    "chars": 8678,
    "preview": "from StringIO import StringIO\nimport os\n\nimport pytest\nimport networkx as nx\n\nfrom falcon_kit.fc_asm_graph import AsmGra"
  },
  {
    "path": "test/test_graph_to_contig.py",
    "chars": 156,
    "preview": "\nimport falcon_kit.mains.graph_to_contig as mod\n\n'''\ndef test_help():\n    try:\n        mod.main(['prog', '--help'])\n    "
  },
  {
    "path": "test/test_graph_to_utgs.py",
    "chars": 154,
    "preview": "\nimport falcon_kit.mains.graph_to_utgs as mod\n\n'''\ndef test_help():\n    try:\n        mod.main(['prog', '--help'])\n    ex"
  },
  {
    "path": "test/test_ovlp_filter.py",
    "chars": 2542,
    "preview": "\nimport falcon_kit.mains.ovlp_filter as mod\n\n\ndef assert_equal(expected, got):\n    assert expected == got\n\n\ndef test_hel"
  },
  {
    "path": "test/test_ovlp_stats.py",
    "chars": 1256,
    "preview": "\nimport falcon_kit.mains.ovlp_stats as mod\n\n\ndef test_help():\n    try:\n        mod.main(['prog', '--help'])\n    except S"
  },
  {
    "path": "test/test_ovlp_to_graph.py",
    "chars": 853,
    "preview": "\nimport falcon_kit.mains.ovlp_to_graph as mod\nimport pytest\n\n\ndef test_help():\n    try:\n        mod.main(['prog', '--hel"
  },
  {
    "path": "test/test_run.py",
    "chars": 145,
    "preview": "#import falcon_kit.mains.run as mod\n\n'''\ndef test_help():\n    try:\n        mod.main(['prog', '--help'])\n    except Syste"
  },
  {
    "path": "test/test_run_LG.py",
    "chars": 148,
    "preview": "#import falcon_kit.mains.run_LG as mod\n\n'''\ndef test_help():\n    try:\n        mod.main(['prog', '--help'])\n    except Sy"
  },
  {
    "path": "test/test_run_support.py",
    "chars": 5064,
    "preview": "import pytest\nimport StringIO\nimport falcon_kit.run_support as mod\n\n\ndef parse_config(content):\n    \"\"\"Used by tests.\n  "
  },
  {
    "path": "test/test_stats_preassembly.py",
    "chars": 1623,
    "preview": "\n\nimport falcon_kit.stats_preassembly as M\nimport helpers\n\n\ndef test_stats_from_sorted_readlengths():\n    stats = M.stat"
  },
  {
    "path": "test/test_tiling_path.py",
    "chars": 20778,
    "preview": "import falcon_kit.tiling_path as mod\nimport helpers\nimport pytest\nimport os\nfrom StringIO import StringIO\n\n#############"
  },
  {
    "path": "test/test_util_io.py",
    "chars": 696,
    "preview": "\nimport time\nimport pytest\n\nimport falcon_kit.util.io as M\n\n\ndef test_io_se1331():\n    \"\"\"Regression test for unicode co"
  },
  {
    "path": "test/test_util_system.py",
    "chars": 2439,
    "preview": "\n\nimport falcon_kit.util.system as mod\nfrom falcon_kit.run_support import cd\nfrom falcon_kit.bash import mkdir\nimport he"
  },
  {
    "path": "test_data/calc_cutoff/partial_capture.txt",
    "chars": 258,
    "preview": "        Bin:      Count  % Reads  % Bases     Average\n          4:          2      0.0      0.0      xxx\n          3:   "
  },
  {
    "path": "test_data/gfa-1/a_ctg.fa",
    "chars": 517,
    "preview": ">0-1\nCTTTTGTAAGTCAACTAAGATCGCCAGTCGATTGTGCCTAAGTCCCGCTACATCATGTCGTCCCTGGTCGTCATTTCCTTGTTGCGAGTGTGGGCCGCGCATGTGGGATGGCGAT"
  },
  {
    "path": "test_data/gfa-1/a_ctg_tiling_path",
    "chars": 216,
    "preview": "0-1 000000007:B 000000005:B 000000005 9 0 1980 99.95\n0-1 000000005:B 000000016:B 000000016 502 0 1487 99.93\n0-2 00000000"
  },
  {
    "path": "test_data/gfa-1/ctg_paths",
    "chars": 113,
    "preview": "     0 ctg_linear 000000007:B~000000018:B~000000004:B 000000007:B 5000 94450 000000007:B~000000018:B~000000004:B\n"
  },
  {
    "path": "test_data/gfa-1/expected-1-sg-r-c.gfa",
    "chars": 16222,
    "preview": "H\tVN:Z:1.0\nS\t000000004\tCAGACGCCGCGTCCTGGTTATTATCGAAAGGTCGGAGTGACAATTCAGTCAATCTCTCACGTTGTCTCAGACATAATTTTACTTGAACAGGGCTCAC"
  },
  {
    "path": "test_data/gfa-1/expected-2-tiling-r-c.gfa",
    "chars": 14135,
    "preview": "H\tVN:Z:1.0\nS\t000000004\tCAGACGCCGCGTCCTGGTTATTATCGAAAGGTCGGAGTGACAATTCAGTCAATCTCTCACGTTGTCTCAGACATAATTTTACTTGAACAGGGCTCAC"
  },
  {
    "path": "test_data/gfa-1/expected-3-tiling-no_r-c.gfa",
    "chars": 2207,
    "preview": "H\tVN:Z:1.0\nS\t000000004\t*\tLN:i:1989\nS\t000000005\t*\tLN:i:1989\nS\t000000007\t*\tLN:i:1989\nS\t000000016\t*\tLN:i:1989\nS\t000000018\t*"
  },
  {
    "path": "test_data/gfa-1/expected-4-tiling-no_r-no_c.gfa",
    "chars": 669,
    "preview": "H\tVN:Z:1.0\nS\t000000004\t*\tLN:i:1989\nS\t000000005\t*\tLN:i:1989\nS\t000000007\t*\tLN:i:1989\nS\t000000016\t*\tLN:i:1989\nS\t000000018\t*"
  },
  {
    "path": "test_data/gfa-1/expected-5-sg-no_r-no_c.gfa",
    "chars": 768,
    "preview": "H\tVN:Z:1.0\nS\t000000004\t*\tLN:i:1989\nS\t000000005\t*\tLN:i:1989\nS\t000000007\t*\tLN:i:1989\nS\t000000016\t*\tLN:i:1989\nS\t000000018\t*"
  },
  {
    "path": "test_data/gfa-1/expected-6-tiling-no_r-no_c-minlen.gfa",
    "chars": 11,
    "preview": "H\tVN:Z:1.0\n"
  },
  {
    "path": "test_data/gfa-1/expected-7-nx-no_r-no_c.gfa",
    "chars": 425,
    "preview": "H\tVN:Z:1.0\nS\t000000004\t*\tLN:i:1989\nS\t000000005\t*\tLN:i:1989\nS\t000000007\t*\tLN:i:1989\nS\t000000016\t*\tLN:i:1989\nS\t000000018\t*"
  },
  {
    "path": "test_data/gfa-1/expected-8-nx-tiling-no_r-no_c.gfa",
    "chars": 744,
    "preview": "H\tVN:Z:1.0\nS\t000000004\t*\tLN:i:1989\nS\t000000005\t*\tLN:i:1989\nS\t000000007\t*\tLN:i:1989\nS\t000000016\t*\tLN:i:1989\nS\t000000018\t*"
  },
  {
    "path": "test_data/gfa-1/expected-9-nx-tiling-r-c.gfa",
    "chars": 14210,
    "preview": "H\tVN:Z:1.0\nS\t000000004\tCAGACGCCGCGTCCTGGTTATTATCGAAAGGTCGGAGTGACAATTCAGTCAATCTCTCACGTTGTCTCAGACATAATTTTACTTGAACAGGGCTCAC"
  },
  {
    "path": "test_data/gfa-1/p_ctg.fa",
    "chars": 1174,
    "preview": ">0 000000007:B~000000034:B~000000044:B~000000044:B ctg_linear 997 94450\nCTTTTGTAAGTCAACTAAGATCGCCAGTCGATTGTGCCTAAGTCCCGC"
  },
  {
    "path": "test_data/gfa-1/p_ctg_tiling_path",
    "chars": 261,
    "preview": "0 000000007:B 000000005:B 000000005 9 0 1980 99.95\n0 000000005:B 000000016:B 000000016 502 0 1487 99.93\n0 000000016:B 00"
  },
  {
    "path": "test_data/gfa-1/preads4falcon.fasta",
    "chars": 18009,
    "preview": ">000000004\nCAGACGCCGCGTCCTGGTTATTATCGAAAGGTCGGAGTGACAATTCAGTCAATCTCTCACGTTGTCTCAGACATAATTTTACTTGAACAGGGCTCACATGGCGCAGATT"
  },
  {
    "path": "test_data/gfa-1/sg.gexf",
    "chars": 4921,
    "preview": "<?xml version='1.0' encoding='utf-8'?>\n<gexf version=\"1.1\" xmlns=\"http://www.gexf.net/1.1draft\" xmlns:viz=\"http://www.ge"
  },
  {
    "path": "test_data/gfa-1/sg_edges_list",
    "chars": 437,
    "preview": "000000007:B 000000005:B 000000005 9 0 1980 99.95 G\n000000005:B 000000016:B 000000016 502 0 1487 99.93 G\n000000016:B 0000"
  },
  {
    "path": "test_data/gfa-1/utg_data",
    "chars": 250,
    "preview": "000000007:B 000000018:B 000000004:B simple 997 94450 000000007:B~000000005:B~000000016:B~000000025:B~000000018:B~0000000"
  },
  {
    "path": "test_data/p_ctg_tiling_path_1",
    "chars": 1846,
    "preview": "000000F 000092122:B 000081654:B 000081654 33726 0 16258 99.45\n000000F 000081654:B 000034462:B 000034462 10123 0 25619 99"
  },
  {
    "path": "test_data/p_ctg_tiling_path_2",
    "chars": 989,
    "preview": "000000F 000092122:B 000081654:B 000081654 33726 0 16258 99.45\n000000F 000081654:B 000034462:B 000034462 10123 0 25619 99"
  },
  {
    "path": "test_data/t1.fa",
    "chars": 9168,
    "preview": ">30a5633d_129405_0\nAAAAGAGAGAGATCGCCCAATTTGGATTACAGTTAGGCACGCCGCTTGTTTTTTTTTTTATTTGCTTTTCGCAGAAAGGTTCTTTCCTTTAATCAGCGCCT"
  },
  {
    "path": "test_data/t1.fofn",
    "chars": 8,
    "preview": "./t1.fa\n"
  },
  {
    "path": "test_data/t2.fa",
    "chars": 30860,
    "preview": ">5d64830a_48915_0\nAGTAGAGATCATCTAAACTTTGGTGGTATTTGGCTAACTTGCTTATGTACACATATTAATTTAATTATACGAGTAAACTATTTCCATATTAGCGTATAGCAG"
  },
  {
    "path": "test_data/t2.fofn",
    "chars": 8,
    "preview": "./t2.fa\n"
  },
  {
    "path": "travis.sh",
    "chars": 346,
    "preview": "#!/bin/sh\n# -e: fail on error\n# -v: show commands\n# -x: show expanded commands\nset -vex\n\n#env | sort\nmkdir -p LOCAL\nexpo"
  }
]

About this extraction

This page contains the full source code of the PacificBiosciences/FALCON GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 165 files (1.4 MB), approximately 622.9k tokens, and a symbol index with 753 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!