Skip to content
Saulo edited this page Jun 5, 2015 · 15 revisions

Welcome to the cnidaria wiki!

Please visit:

http://sauloal.github.io/cnidaria

It has been tested with:

To run

Ubuntu >= 12+

To compile

libboost >= 1.50 gcc >= 4.8

Cnidaria

View the Project on GitHub sauloal/cnidaria

CNIDARIA: fast, reference-free phylogenomic clustering

Motivation: Identification of biological specimens is a major requirement for a range of applications. Reference-free methods analyse unprocessed sequencing data without relying on prior knowledge, but these do not scale to arbitrarily large genomes and arbitrarily large phylogenetic distances.

Results: We present Cnidaria, a practical tool for clustering genomic and transcriptomic data with no limitation on ge-nome size or phylogenetic distances. We successfully simultaneously clustered 169 genomic and transcriptomic datasets from 4 kingdoms, achieving 100% accuracy at supra-species level and 78% accuracy for species level.

Availability and Implementation: Cnidaria is written in C++ and Python and is available at http://www.ab.wur.nl/cnidaria.

Contact: Saulo Aflitos - [email protected]

Supplementary information: Supplementary data are available at Bioinformatics online.

How to get

Your own Ubuntu machine

git clone https://github.com/sauloal/cnidaria

Docker

You can find the docker recipes at src/docker.

You can download Cnidaria on docker by running:

$ docker pull sauloal/cnidaria_full

To run Cnidaria on a folder called INPUT:

docker run -it --rm -v $PWD/INPUT/:/home/cnidaria/cnidaria/data sauloal/cnidaria_full bash

To verify:

$ pwd
/home/cnidaria/cnidaria
$ ls data
./ ../ YOUR_DATA

Once inside the VM, as long as you save it on the data/ folder, all files (result or configuration) will be permanent.

Files created outside the data/ folder will be deleted.

To leave the VM type 'exit'.

To install new programs use 'sudo'.

Username: cnidaria Password: cnidaria

How to test

Either inside Docker or in your own installation:

 make test

It will decompress 15 fungi genomes, extract their 21-mers and run cnidaria on it. The test takes approx. 30 min to run The raw data amounts to 301 Mb The Jellyfish data amounts to 2.0 Gb The Cnidaria data amounts to 1.7 Mb

The output should be: Input fasta and Jellyfish databases:

$ ls -sh1 test/data/fungi
total 2.3G
4.0K Aspergillus_fumigatus_uid14003
 29M Aspergillus_fumigatus_uid14003.fasta
189M Aspergillus_fumigatus_uid14003.fasta.21.jf
4.0K Aspergillus_fumigatus_uid14003.fasta.21.jf.timming
4.0K Aspergillus_fumigatus_uid14003.sh
4.0K Aspergillus_nidulans_FGSC_A4_uid13961
 29M Aspergillus_nidulans_FGSC_A4_uid13961.fasta
194M Aspergillus_nidulans_FGSC_A4_uid13961.fasta.21.jf
4.0K Aspergillus_nidulans_FGSC_A4_uid13961.fasta.21.jf.timming
4.0K Aspergillus_nidulans_FGSC_A4_uid13961.sh
4.0K Aspergillus_niger_CBS_513_88_uid19263
 33M Aspergillus_niger_CBS_513_88_uid19263.fasta
226M Aspergillus_niger_CBS_513_88_uid19263.fasta.21.jf
4.0K Aspergillus_niger_CBS_513_88_uid19263.fasta.21.jf.timming
4.0K Aspergillus_niger_CBS_513_88_uid19263.sh
4.0K Aspergillus_oryzae_RIB40_uid28175
 36M Aspergillus_oryzae_RIB40_uid28175.fasta
246M Aspergillus_oryzae_RIB40_uid28175.fasta.21.jf
4.0K Aspergillus_oryzae_RIB40_uid28175.fasta.21.jf.timming
4.0K Aspergillus_oryzae_RIB40_uid28175.sh
4.0K Candida_dubliniensis_CD36_uid38659
 15M Candida_dubliniensis_CD36_uid38659.fasta
 93M Candida_dubliniensis_CD36_uid38659.fasta.21.jf
4.0K Candida_dubliniensis_CD36_uid38659.fasta.21.jf.timming
4.0K Candida_dubliniensis_CD36_uid38659.sh
4.0K Candida_glabrata
4.0K Candida_glabrata_CBS138_uid12376
 12M Candida_glabrata_CBS138_uid12376.fasta
 81M Candida_glabrata_CBS138_uid12376.fasta.21.jf
4.0K Candida_glabrata_CBS138_uid12376.fasta.21.jf.timming
4.0K Candida_glabrata_CBS138_uid12376.sh
 12M Candida_glabrata.fasta
 81M Candida_glabrata.fasta.21.jf
4.0K Candida_glabrata.fasta.21.jf.timming
4.0K Candida_glabrata.sh
4.0K Cryptococcus_gattii_WM276
 18M Cryptococcus_gattii_WM276.fasta
118M Cryptococcus_gattii_WM276.fasta.21.jf
4.0K Cryptococcus_gattii_WM276.fasta.21.jf.timming
4.0K Cryptococcus_gattii_WM276.sh
4.0K Cryptococcus_neoformans_var_JEC21_uid10698
 19M Cryptococcus_neoformans_var_JEC21_uid10698.fasta
122M Cryptococcus_neoformans_var_JEC21_uid10698.fasta.21.jf
4.0K Cryptococcus_neoformans_var_JEC21_uid10698.fasta.21.jf.timming
4.0K Cryptococcus_neoformans_var_JEC21_uid10698.sh
4.0K Kluyveromyces_lactis_NRRL_Y-1140_uid12377
 11M Kluyveromyces_lactis_NRRL_Y-1140_uid12377.fasta
 71M Kluyveromyces_lactis_NRRL_Y-1140_uid12377.fasta.21.jf
4.0K Kluyveromyces_lactis_NRRL_Y-1140_uid12377.fasta.21.jf.timming
4.0K Kluyveromyces_lactis_NRRL_Y-1140_uid12377.sh
 44K Neurospora_crassa_uid132
 37M Neurospora_crassa_uid132.fasta
250M Neurospora_crassa_uid132.fasta.21.jf
4.0K Neurospora_crassa_uid132.fasta.21.jf.timming
4.0K Neurospora_crassa_uid132.sh
4.0K Saccharomyces_cerevisiae_uid128
 12M Saccharomyces_cerevisiae_uid128.fasta
 77M Saccharomyces_cerevisiae_uid128.fasta.21.jf
4.0K Saccharomyces_cerevisiae_uid128.fasta.21.jf.timming
4.0K Saccharomyces_cerevisiae_uid128.sh
   0 Schizosaccharomyces_pombe_uid127
 13M Schizosaccharomyces_pombe_uid127.fasta
 82M Schizosaccharomyces_pombe_uid127.fasta.21.jf
4.0K Schizosaccharomyces_pombe_uid127.fasta.21.jf.timming
4.0K Schizosaccharomyces_pombe_uid127.sh
4.0K Yarrowia_lipolytica_CLIB122_uid12414
 20M Yarrowia_lipolytica_CLIB122_uid12414.fasta
134M Yarrowia_lipolytica_CLIB122_uid12414.fasta.21.jf
4.0K Yarrowia_lipolytica_CLIB122_uid12414.fasta.21.jf.timming
4.0K Yarrowia_lipolytica_CLIB122_uid12414.sh
4.0K Zygosaccharomyces_rouxii_CBS_732_uid39573
9.5M Zygosaccharomyces_rouxii_CBS_732_uid39573.fasta
 65M Zygosaccharomyces_rouxii_CBS_732_uid39573.fasta.21.jf
4.0K Zygosaccharomyces_rouxii_CBS_732_uid39573.fasta.21.jf.timming
4.0K Zygosaccharomyces_rouxii_CBS_732_uid39573.sh

The output:

$ ls test/out/
Makefile
test/

$ ls test/out/test/
total 1.2M
 12K Makefile
 28K test_0001_0001.cnm
 16K test_0001_0001.json
4.0K test_0001_0001.json.count.csv
4.0K test_0001_0001.json.csv
4.0K test_0001_0001.json.no_scale.jaccard_dissimilarity.matrix
4.0K test_0001_0001.json.no_scale.jaccard_dissimilarity.nj
 72K test_0001_0001.json.no_scale.jaccard_dissimilarity.nj.png
4.0K test_0001_0001.json.no_scale.jaccard_dissimilarity.nj.tree
4.0K test_0001_0001.json.no_scale.jaccard_dissimilarity_sqrt.matrix
4.0K test_0001_0001.json.no_scale.jaccard_dissimilarity_sqrt.nj
 76K test_0001_0001.json.no_scale.jaccard_dissimilarity_sqrt.nj.png
4.0K test_0001_0001.json.no_scale.jaccard_dissimilarity_sqrt.nj.tree
4.0K test_0001_0001.json.no_scale.jaccard_dissimilarity_sqrt.upgma
 76K test_0001_0001.json.no_scale.jaccard_dissimilarity_sqrt.upgma.png
4.0K test_0001_0001.json.no_scale.jaccard_dissimilarity_sqrt.upgma.tree
4.0K test_0001_0001.json.no_scale.jaccard_dissimilarity.upgma
 76K test_0001_0001.json.no_scale.jaccard_dissimilarity.upgma.png
4.0K test_0001_0001.json.no_scale.jaccard_dissimilarity.upgma.tree
   0 test_0001_0001.json.pngok
416K test_0001_0001.log
   0 test_0001_0001.ok
4.0K test.all.count.csv
8.0K test.all.csv
   0 test.cnm
   0 test.json
4.0K test.json.count.csv
4.0K test.json.csv
4.0K test.json.no_scale.jaccard_dissimilarity.matrix
4.0K test.json.no_scale.jaccard_dissimilarity.nj
 72K test.json.no_scale.jaccard_dissimilarity.nj.png
4.0K test.json.no_scale.jaccard_dissimilarity.nj.tree
4.0K test.json.no_scale.jaccard_dissimilarity_sqrt.matrix
4.0K test.json.no_scale.jaccard_dissimilarity_sqrt.nj
 72K test.json.no_scale.jaccard_dissimilarity_sqrt.nj.png
4.0K test.json.no_scale.jaccard_dissimilarity_sqrt.nj.tree
4.0K test.json.no_scale.jaccard_dissimilarity_sqrt.upgma
 76K test.json.no_scale.jaccard_dissimilarity_sqrt.upgma.png
4.0K test.json.no_scale.jaccard_dissimilarity_sqrt.upgma.tree
4.0K test.json.no_scale.jaccard_dissimilarity.upgma
 72K test.json.no_scale.jaccard_dissimilarity.upgma.png
4.0K test.json.no_scale.jaccard_dissimilarity.upgma.tree
   0 test.json.pngok
4.0K test.log
   0 test.ok

The phylogenetic trees:

$ cat test.json.no_scale.jaccard_dissimilarity.nj.tree
                              /-Cryptococcus neoformans var JEC21 uid10698
                    /edge.0--|
                   |          \-Cryptococcus gattii WM276
                   |
          /edge.4--|                              /-Aspergillus niger CBS 513 88 uid19263
         |         |                    /edge.1--|
         |         |          /edge.2--|          \-Aspergillus oryzae RIB40 uid28175
         |         |         |         |
         |          \edge.3--|          \-Aspergillus fumigatus uid14003
         |                   |
         |                    \-Aspergillus nidulans FGSC A4 uid13961
         |
-root----|          /-Neurospora crassa uid132
         |-edge.5--|
         |          \-Yarrowia lipolytica CLIB122 uid12414
         |
         |                    /-Candida dubliniensis CD36 uid38659
         |          /edge.9--|
         |         |         |          /-Zygosaccharomyces rouxii CBS 732 uid39573
         |         |          \edge.8--|
         |         |                   |          /-Kluyveromyces lactis NRRL Y-1140 uid12377
          \edge.10-|                    \edge.7--|
                   |                             |          /-Candida glabrata CBS138 uid12376
                   |                              \edge.6--|
                   |                                        \-Saccharomyces cerevisiae uid128
                   |
                    \-Schizosaccharomyces pombe uid127

$ cat test.json.no_scale.jaccard_dissimilarity.nj
(((Cryptococcus_neoformans_var_JEC21_uid10698:0.0178604557174,Cryptococcus_gattii_WM276:0.0173134981567):0.4993077284,(((Aspergillus_niger_CBS_513_88_uid19263:0.345930782661,Aspergillus_oryzae_RIB40_uid28175:0.346370249728):0.034782079948,Aspergillus_fumigatus_uid14003:0.385379378235):0.0393350255391,Aspergillus_nidulans_FGSC_A4_uid13961:0.426129781102):0.0548021380182):0.0111478680149,('Neurospora crassa uid132':0.432396815528,Yarrowia_lipolytica_CLIB122_uid12414:0.44897381579):0.0177549831691,((Candida_dubliniensis_CD36_uid38659:0.416702677849,(Zygosaccharomyces_rouxii_CBS_732_uid39573:0.408443601479,(Kluyveromyces_lactis_NRRL_Y-1140_uid12377:0.395501824207,(Candida_glabrata_CBS138_uid12376:0.383440146903,Saccharomyces_cerevisiae_uid128:0.373946775161):0.0135771064445):0.0234388374394):0.0488771035835):0.0164746506052,Schizosaccharomyces_pombe_uid127:0.469881795743):0.013057881288);

How to run:

from inside cnidaria folder, add scripts folder to your path:

  • add script folder to your PATH by:
    • type, from this folder, every time you open a new terminal
export PATH=$PWD/scripts:$PATH
- add (only once) cnidaria/scripts to your $HOME/.bashrc and restart (only once) your terminal
echo "export PATH=$PWD/scripts:$PATH" >> $HOME/.bashrc

choose kmer size

Edit scripts/jf_opts and select k-mer size

verify if samtools is installed (only if working with BAM/CRAM)

Make sure samtools is in your PATH

samtools

how to generate jf database files:

  • jf_from_fasta.sh converts FASTA to JF.
  • jf_from_fastq.sh converts FASTA to JF.
  • jf_from_cram.sh converts CRAM to JF (requires samtools >= 1.1 in PATH).
  • jf_from_bam.sh converts BAM to JF (requires samtools >= 1.1 in PATH).

Go to the folder where your fasta files are:

Run ./run.sh

It will search for all fasta/cram/bam under the current folder and convert them to JF.

Create a filelist.csv file

Create a filelist.csv file, a tab delimited file containg the name of your JF files and their "pretty" name:

/home/user/cnidaria/data/input/spp1.fas.21.jf	Species 01
/home/user/cnidaria/data/input/spp2.fas.21.jf	Species 02
/home/user/cnidaria/data/input/spp3.fas.21.jf	Species 03
/home/user/cnidaria/data/input/spp4.fas.21.jf	Species 04
/home/user/cnidaria/data/input/spp5.fas.21.jf	Species 05

Create a test_def.csv file

Create a test_def.csv file, a tab delimited file containing the run names

test01	/home/user/cnidaria/data/input/spp1.fas.21.jf
test01	/home/user/cnidaria/data/input/spp2.fas.21.jf
test01  /home/user/cnidaria/data/input/spp3.fas.21.jf
test01  /home/user/cnidaria/data/input/spp4.fas.21.jf
test01  /home/user/cnidaria/data/input/spp5.fas.21.jf

Run

Automatically

Create a Makefile

Create a Makefile for your runs by using scripts/gen_mkfile.py.

It will create a Makefile for your analysis calling all programs in the correct order for: split, calculate, merge, generate statistics and plot graphs in one go

$ scripts/gen_mkfile.py -h
#usage: gen_mkfile.py [-h] [-thr [NUM_THREADS]] [-min [MINVAL]]
#                     [-se [SAVE_EVERY]] [-me] [-nm] [-ec] [-nem]
#                     file_list def_file out_dir kmer_size num_pieces

# ./gen_mkfile.py file_list def_file out_folder kmer_size number_of_pieces
$ ./gen_mkfile.py /home/user/cnidaria/data/filelist.csv \
  /home/user/cnidaria/data/test_def.csv \
  /home/user/cnidaria/data/output 21 20

Run Makefile

Go to the output folder ( /home/user/cnidaria/data/output ) and run:

$ make all

Or do a specific run:

$ make test01

the makefile contains:

# Run Cnidaria for each of the pieces
ulimit -c unlimited && time /home/user/cnidaria/scripts/cnidaria.py --export-complete \
--num-pieces 20 --piece-num 1 --outfile test01 /home/user/cnidaria/data/input/spp{1,2,3,4,5}.fas.21.jf

# Merge all the pieces
ulimit -c unlimited && time /home/user/cnidaria/scripts/cnidaria.py --export-complete \
--num-pieces 20 --merge-only --outfile test01 /home/user/cnidaria/data/input/spp{1,2,3,4,5}.fas.21.jf

# Create statistics of the results
/home/user/cnidaria/scripts/cnidaria_stats.py test01_0001_0020.json /home/user/cnidaria/data/filelist.csv
...
/home/user/cnidaria/scripts/cnidaria_stats.py test01_0020_0020.json /home/user/cnidaria/data/filelist.csv

# Verify if the merging occured well
/home/user/cnidaria/scripts/verify_csvs.py test01_00{01,02,...,19,20}_0020.json.csv test01.json.csv

# Merge statistics in single files
cat test*.json.csv               > test01.all.csv
cat test01_*_0020.json.count.csv > test01.all.count.csv

# Convert trees into PNG
/home/user/cnidaria/scripts/newick_to_png.py test01_00{01,02,...,19,20}_0020.json.no_scale.jaccard_dissimilarity.nj

The output files are:

# Results of individual pieces
test01_0001_0020.cne
test01_0001_0020.cnm
test01_0001_0020.json
test01_0001_0020.json.count.csv
test01_0001_0020.json.csv
test01_0001_0020.json.no_scale.jaccard_dissimilarity.matrix
test01_0001_0020.json.no_scale.jaccard_dissimilarity.nj
test01_0001_0020.json.no_scale.jaccard_dissimilarity.nj.png
test01_0001_0020.json.no_scale.jaccard_dissimilarity.nj.tree

# Global results
test01.all.count.csv
test01.all.csv
test01.cne
test01.cnm
test01.json
test01.json.count.csv
test01.json.csv
test01.json.no_scale.jaccard_dissimilarity.matrix
test01.json.no_scale.jaccard_dissimilarity.nj
test01.json.no_scale.jaccard_dissimilarity.nj.png
test01.json.no_scale.jaccard_dissimilarity.nj.tree

CNE - a Cnidaria Complete Database file containing both k-mer and presence/absence list

JSON - a Cnidaria Summary Database file containing only the matrix of shared/total k-mers counts

MATRIX - a jaccard distance matrix calculated from the JSON file

NJ - a NEWICK neighbour-joining tree based in MATRIX

PNG - a tree image beased in NJ

TREE - an ASCII art tree based in NJ

To create HTML report

$ /home/user/cnidaria/scripts/report/stats_report.py test01.json \
  /home/user/cnidaria/data/filelist.csv \
  test01.json.no_scale.jaccard_dissimilarity.nj

#which will generate:
#test01_kmer_stats_report.html

Manually

Alternatively, you can run scripts/cnidaria.py, the main program, for the analysis.

$ scripts/cnidaria.py -h

#usage: cnidaria.py [-h] [-out [OUT_FILE]] [-thr [NUM_THREADS]] [-min [MINVAL]]
#                   [-se [SAVE_EVERY]] [-np [NUM_PIECES]] [-pn [PIECE_NUM]]
#                   [-n] [-d] [-me] [-nm] [-ec] [-nem]
#                   infiles [infiles ...]

Output Files

JSON File

{
"num_infiles":3,                 => number of sequences
"num_srcfiles":3,                => number of files (might not be the same as number of sequences)
"num_combinations":0,            => not used
"complete_registers":1406959993, => number of kmers
"min_val":2,                     => minimum number of species having a kmer to generate the JSON report (nothing to do with the CNE report)
"max_val":3,                     => maximum number of species having a kmer to generate the JSON report (nothing to do with the CNE report)
"save_every":1,                  => sampling (1 = no sampliing)
"num_pieces":1,                  => if the merging was split, what was the number of pieces
"piece_num":0,                   => if the merging was split, what is this piece position
"kmer_size":31,                  => kmer size in bp
"kmer_bytes":8,                  => kmer size in bp (2 bits per bp)
"data_bytes":1,                  => size, in bytes, of presence/absence list
"block_bytes":9,                 => size, in bytes, of a block containing k-mer and presence/absence list
"j_offset":1896,                 => jellyfish hashing internals
"j_size":4294967296,             => jellyfish hashing internals
"j_matrices_size":1,             => jellyfish hashing internals 
"j_matrices":[{                  => jellyfish hashing internals
"r":32,
"c":62,
"l":62,
"columns":[4076151366,297922355,2914987773,1818276056,4017113960,2118333886,2094414662,3625528161,
961333575,2834678692,2952312046,4226838616,3262593030,3335110749,2180498335,3545008600,3886083536]}],
"version":8,                       => cnidaria file version
"filetype":"cnidaria/json_matrix", => cnidaria file type
"in_filenames":[                   => input k-mer files
"/home/user/cnidaria/data/input/spp1.fas.21.jf", 
"/home/user/cnidaria/data/input/spp2.fas.21.jf", 
"/home/user/cnidaria/data/input/spp3.fas.21.jf", ],
"src_filenames":[                  => input merge files (might not be the same as k-mer input files
"/home/user/cnidaria/data/input/spp1.fas.21.jf", 
"/home/user/cnidaria/data/input/spp2.fas.21.jf", 
"/home/user/cnidaria/data/input/spp3.fas.21.jf", ],
"num_kmer_total_spp":              => total number of k-mers per species
[351226445,749965518,634623046],
"num_kmer_valid_spp":              => total number of valid k-mers per species ( min_val >= count >= max_val )
[324515342,326347640,4555453], 
"matrix":                          => matrix (num_infiles X num_infiles X num_infiles) of valid k-mers with subcells containing the number of species in which such combination happened
[[[0,0,0],
[0,322007966,2291597],
[0,0,0]]]}

Complete File (.cne)

[JSON_POS][ [KMER_BYTES][DATA_BYTES] X complete_registers ][JSON][/EOF]

JSON_POS           = [INT64] coordinates, in byte, for JSON in the END of current file
KMER_BYTES         = obtained from JSON (for 31, 8)
DATA_BYTES         = obtained from JSON (for  3, 1)
complete_registers = obtained from JSON
JSON               = JSON string until the end of file (EOF) containing all variables

Filter For Presence/Absence

srcipts cnidaria_cne_filter.py

usage: cnidaria_cne_filter.py [-h] [--dry] [--titles TITLES] [--sep SEP]
                              [--out OUT] [--format {fasta,lst,tab}]
                              [--print_every PRINT_EVERY] [--piece PIECE]
                              [--pieces PIECES]
                              [--require [REQUIRE [REQUIRE ...]]]
                              [--requires REQUIRES]
                              [--forbid [FORBID [FORBID ...]]]
                              [--forbids FORBIDS] --infile INFILE

Cnidaria CNE file filter

optional arguments:
  -h, --help            show this help message and exit
  --dry                 Dry run
  --titles TITLES       Titles file
  --sep SEP             List separator
  --out OUT             Output basename (default: out.[format])
  --format {fasta,lst,tab}
                        Output Format (fasta, lst, tab)
  --print_every PRINT_EVERY
                        Piece number
  --piece PIECE         Piece number
  --pieces PIECES       Number of Pieces
  --require [REQUIRE [REQUIRE ...]]
                        Required sample
  --requires REQUIRES   Required samples (comma separated)
  --forbid [FORBID [FORBID ...]]
                        Forbidden sample
  --forbids FORBIDS     Forbidden samples (comma separated)
  --infile INFILE       Input CNE file

Example: This will generate a fasta file containing all k-mers present in species 1 and absent in species 2 and 3.

scripts/cnidaria_cne_filter.py --infile test01.cne --require "Species 01" --forbids "Species 02,Species 03" --out "test01_s1_not_s23"

Compile from source

For ubuntu 12:

sudo apt-add-repository ppa:boost-latest -y

sudo apt-add-repository ppa:mapnik/boost-backports-1-54 -y

sudo add-apt-repository ppa:ubuntu-toolchain-r/test -y

sudo apt-get clean -qq

sudo apt-get update -qq

sudo apt-get install -y libboost1.54-all-dev swig libc6-i386 lib32stdc++6 make git

sudo apt-get install -y python python-setuptools python-numpy python-pandas python-matplotlib python-cogent python-imaging python-qt4 python-pip python-lxml

sudo apt-get install g++-4.8

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 50

sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 50

sudo easy_install ete2

sudo easy_install hcluster

git clone [email protected]:sauloal/cnidaria.git

cd cnidaria

sed -i 's/TIME_UTC/TIME_UTC_/' src/libs/threadpool/boost/./threadpool/./detail/../task_adaptors.hpp

Minimum requirements:

Ubuntu >= 13.4

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 14.04.2 LTS
Release:        14.04
Codename:       trusty

libboost >= 1.50

$ dpkg -s libboost-dev | grep 'Version'
Version: 1.54.0.1ubuntu1

$ cat /usr/include/boost/version.hpp | grep "BOOST_LIB_VERSION"
//  BOOST_LIB_VERSION must be defined to be the same as BOOST_VERSION
#define BOOST_LIB_VERSION "1_54"

gcc >= 4.8

$ gcc -v  
gcc version 4.8.2 (Ubuntu 4.8.2-19ubuntu1)

To re-compile code:

$ bash INSTALL.2.compile

To install the system requirements:

$ sudo bash INSTALL.1.requirements

The compilation creates a python library called _cnidariapy.so, a shared library for python.

This project is maintained by sauloal

Hosted on GitHub Pages — Theme by orderedlist

<script type="text/javascript">var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www."); document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));</script> <script type="text/javascript">try { var pageTracker = _gat._getTracker("UA-5291039-10"); pageTracker._trackPageview(); } catch(err) {}</script>
Clone this wiki locally