Giter VIP home page Giter VIP logo

hybridlambda / hybrid-lambda Goto Github PK

View Code? Open in Web Editor NEW
6.0 5.0 4.0 2.99 MB

Hybrid-Lambda is a software package that can simulate gene trees within a rooted species network or a rooted species tree under the Kingman's coalescent or Lambda coalescent process.

Home Page: http://hybridlambda.github.io/

License: GNU General Public License v3.0

Shell 0.67% Makefile 0.03% C++ 98.57% C 0.54% R 0.05% M4 0.14%

hybrid-lambda's Introduction

Hybrid-Lambda

Hybrid-Lambda is a software package that can simulate gene trees within a rooted species network or a rooted species tree under the coalescent process. The main feature of this program is that users can choose to use the standard Kingman coalescent process, which produces bifurcating genealogies, or two other Lambda coalescent processes, which produce multifurcating genealo- gies. The other feature is that hybrid sim uses extended Newick formatted strings to make it easier to represent hybridization events between species.

travis CircleCI

DOCUMENTATION

Download

INSTALLATION

User only

To install hybrid-Lambda, simply type make within the directory src/:

cd src/
make

For developers

To install hybrid-Lambda, first install the following packages and libraries

on Debian/Ubuntu based systems:

apt-get install build-essential autoconf autoconf-archive libcppunit-dev libboost-all-dev doxygen graphviz

on Mac OS:

port install automake autoconf autoconf-archive cppunit boost doxygen graphviz

then type the following commands:

./bootstrap
make

ASSUMPTION

Input network files are written in extended newick format.

Citation

hybrid-Lambda is described in the manuscript

Sha Zhu, James H Degnan, Sharyn J Goldstien, Bjarki Eldon. Hybrid-Lambda: simulation of multiple merger and Kingman gene genealogies in species networks and species trees. BMC Bioinformatics 2015, 16:292 doi: http://doi:10.1186/s12859-015-0721-y.

LICENCE

You can freely use all code in this project under the conditions of the GNU GPL Version 3 or later.

HOW IT WORKS

Program parameters and options:

Options Useage
-h or -help Help. List the following content.
-spcu STR Input the species network/tree string through command line or a file. Branch lengths of the INPUT are in coalescent unit.
-spng STR Input the species network/tree string through command line or a file. Branch lengths of the INPUT are in number of generation.
-pop STR/FLT Population sizes are defined by a single numerical constant, or a string which specifies the population size on each branch. The string can be input through command line or a file. By default, population size 10,000 is used.
-mm STR/FLT Multiple merger parameters are defined by a single numerical constant, or a string which speifies the parameter on each branch. The string can be input through command line or a file. By default, Kingman coalescent is used.
-S INT INT ... Specify the number of samples for each taxon.
-num INT The number of gene trees will be simulated.
-seed INT User define random seed
-mu FLT User defined constant mutation rate per locus. By default mutation rate 0.00005 is used.
-o STR [option] Specify the file name prefix for simulated gene trees. Prefix is set as "OUT" by default, When options are not specified, only output trees with branch lengths are in coalescent unit.
-sim_mut_unit Convert the simulated gene tree branch lengths to mutation unit.
-sim_num_gener Convert the simulated gene tree branch lengths to number of generations.
-sim_num_mut Simulate numbers of mutations on each branch of simulated gene trees.
-sim_Si_num Generate a table, which includes the number of segregating sites and the total branch length of the gene tree, as well as the TMRCA.
-f Generate a topology frequency table of a set of input trees or simulated gene trees.
-gt STR Specify the FILE NAME of trees to analyse tree topology frequencies.
-seg Generate segregating site data.
-mt STR Specify the FILE NAME of trees to generate segregating site data. Tree branch lengths indicate number of mutations on the branch.
-mono Generate a frequency table of monophyletic, paraphyletic and polyphyletic trees.
-plot/-dot [option] Use LaTEX(-plot) or Dot (-dot) to draw the input (defined by -spcu) network(tree).
-branch Branch lengths will be labelled in the figure.

Examples:

hybrid-Lambda -spcu '((1:1,2:1):1,3:2);' -num 3 -seed 2 -o example1
hybrid-Lambda -spcu trees/4_tax_sp_nt1_para -o example2 -num 2 -mu 0.00003 -sim mut unit -sim num mut
hybrid-Lambda -spcu '((1:1,2:1):1,3:2);' -num N -pop 25000 -sim num gener
hybrid-Lambda -spng '(A:50000,B:50000)r;' -pop '(A:50000,B:50000)r:40000;'
hybrid-Lambda -spcu '((((A:1.1,B:1.1):2.1,a:2.2):1.1,13D:.2):.3,4:.3);' -S 2 4 3 6 5
hybrid-Lambda -spcu '(A:1,B:1)r;' -mm '(A:1.9,B:.2)r:2;' -S 3 4
hybrid-Lambda -spcu trees/7_tax_sp_nt1_para -dot -branch
hybrid-Lambda -spcu trees/4_tax_sp1 -num 1000 -o GENE_TREE_FILE -f
hybrid-Lambda -spcu trees/4_tax_sp1 -num 1000 -o GENE_TREE_FILE -fF FRENQUENCY_FILE
hybrid-Lambda -spcu '((1:1,2:1):1,3:2);' -num 1000 -o GENE -fF OUTPUT
hybrid-Lambda -gt GENE_coal_unit -f
hybrid-Lambda -spcu '(A:5,B:5)r;'-mono -num 100 -mm .1 -S 4 4

hybrid-lambda's People

Contributors

cecileane avatar downloadico avatar shajoezhu avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

hybrid-lambda's Issues

Custom network induces an additional leaf

Hello Joe,

I have noted that when using a custom network hybrid-Lambda generates gene trees where the hybrid edge "detaches" and becomes a leaf, that is, for the network including the hybrid edge h1#.5:4.0, the leaf h1#.5_1 is present in the gene trees. This behaviour is not recovered in some of the networks available in the trees directory that comes with the program. I tested both versions 0.6.2 and 0.6.3 and the behaviour is independent of the version. v0.6.2 was slightly modified for returning the magnitude of the diff between branches when testing the ultrametricity (see here).

The script:

#!/usr/bin/bash

# # custom network, not triggering ultrametricity warning, with or without root string
#  "(((h1#0.5:4.0,D:4.0):3.0,((A:2.0,B:2.0):3.0,(C:2.0)h1#0.5:3.0):2.0):2.0,E:9.0);"
#  "(((h1#0.5:4.0,D:4.0):3.0,((A:2.0,B:2.0):3.0,(C:2.0)h1#0.5:3.0):2.0):2.0,E:9.0)r;"
# # custom network, triggering ultrametricity warning, with or without root string
#  "(((h1#0.5:2.0,D:4.0):3.0,((A:2.0,B:2.0):3.0,(C:2.0)h1#0.5:3.0):2.0):2.0,E:9.0);"
#  "(((h1#0.5:2.0,D:4.0):3.0,((A:2.0,B:2.0):3.0,(C:2.0)h1#0.5:3.0):2.0):2.0,E:9.0)r;"
# # 3_tax_multi_tax_test_hybrid1, with or without root string
#  "(((B:.6)h1#.5:.6,A:1.2)s1:.6,(h1#.5:.6,C:1.2)s2:.6)r;"
#  "(((B:.6)h1#.5:.6,A:1.2)s1:.6,(h1#.5:.6,C:1.2)s2:.6);"
# # 6_tax_multi_tax_test_hybrid1_topo1, with or without root string
#  "((((B:1,(D:0.6,(E:0.6,F:0.6)s5:0.6)s4:0.6)s3:.6)h1#.5:.6,A:1.2)s1:.6,(h1#.5:.6,C:1.2)s2:.6)r;"
#  "((((B:1,(D:0.6,(E:0.6,F:0.6)s5:0.6)s4:0.6)s3:.6)h1#.5:.6,A:1.2)s1:.6,(h1#.5:.6,C:1.2)s2:.6);"

VARS=("(((h1#0.5:4.0,D:4.0):3.0,((A:2.0,B:2.0):3.0,(C:2.0)h1#0.5:3.0):2.0):2.0,E:9.0);" "(((h1#0.5:4.0,D:4.0):3.0,((A:2.0,B:2.0):3.0,(C:2.0)h1#0.5:3.0):2.0):2.0,E:9.0)r;" "(((h1#0.5:2.0,D:4.0):3.0,((A:2.0,B:2.0):3.0,(C:2.0)h1#0.5:3.0):2.0):2.0,E:9.0);" "(((h1#0.5:2.0,D:4.0):3.0,((A:2.0,B:2.0):3.0,(C:2.0)h1#0.5:3.0):2.0):2.0,E:9.0)r;" "(((B:.6)h1#.5:.6,A:1.2)s1:.6,(h1#.5:.6,C:1.2)s2:.6)r;" "(((B:.6)h1#.5:.6,A:1.2)s1:.6,(h1#.5:.6,C:1.2)s2:.6);" "((((B:1,(D:0.6,(E:0.6,F:0.6)s5:0.6)s4:0.6)s3:.6)h1#.5:.6,A:1.2)s1:.6,(h1#.5:.6,C:1.2)s2:.6)r;" "((((B:1,(D:0.6,(E:0.6,F:0.6)s5:0.6)s4:0.6)s3:.6)h1#.5:.6,A:1.2)s1:.6,(h1#.5:.6,C:1.2)s2:.6);")

for i in ${VARS[@]}; do
    echo $i
done

for i in ${VARS[@]}; do
    printf "\nProcessing $i...\n"
    hybrid-Lambdav0.6.2-pathdiff -spcu $i -num 3 -seed 2 -o out0.6.2
    grep "#" out0.6.2_coal_unit
#    cat out0.6.2_coal_unit
    hybrid-Lambdav0.6.3 -spcu $i -num 3 -seed 2 -o out0.6.3
    grep "#" out0.6.3_coal_unit
#    cat out0.6.3_coal_unit
done

rm out0*

generates this output:

(((h1#0.5:4.0,D:4.0):3.0,((A:2.0,B:2.0):3.0,(C:2.0)h1#0.5:3.0):2.0):2.0,E:9.0);
(((h1#0.5:4.0,D:4.0):3.0,((A:2.0,B:2.0):3.0,(C:2.0)h1#0.5:3.0):2.0):2.0,E:9.0)r;
(((h1#0.5:2.0,D:4.0):3.0,((A:2.0,B:2.0):3.0,(C:2.0)h1#0.5:3.0):2.0):2.0,E:9.0);
(((h1#0.5:2.0,D:4.0):3.0,((A:2.0,B:2.0):3.0,(C:2.0)h1#0.5:3.0):2.0):2.0,E:9.0)r;
(((B:.6)h1#.5:.6,A:1.2)s1:.6,(h1#.5:.6,C:1.2)s2:.6)r;
(((B:.6)h1#.5:.6,A:1.2)s1:.6,(h1#.5:.6,C:1.2)s2:.6);
((((B:1,(D:0.6,(E:0.6,F:0.6)s5:0.6)s4:0.6)s3:.6)h1#.5:.6,A:1.2)s1:.6,(h1#.5:.6,C:1.2)s2:.6)r;
((((B:1,(D:0.6,(E:0.6,F:0.6)s5:0.6)s4:0.6)s3:.6)h1#.5:.6,A:1.2)s1:.6,(h1#.5:.6,C:1.2)s2:.6);

Processing (((h1#0.5:4.0,D:4.0):3.0,((A:2.0,B:2.0):3.0,(C:2.0)h1#0.5:3.0):2.0):2.0,E:9.0);...
Default Kingman coalescent on all branches.
Default population size of 10000 on all branches. 
Random seed: 2
Produced gene tree files: 
out0.6.2_coal_unit
((((A_1:2.291561,B_1:2.291561):2.813411,C_1:5.104972):2.956590,(D_1:5.898695,h1#0.5_1:5.898695):2.162867):1.080899,E_1:9.142461);
((D_1:7.822784,(((A_1:2.834647,B_1:2.834647):2.224355,C_1:5.059002):2.132514,h1#0.5_1:7.191516):0.631268):1.370331,E_1:9.193115);
(E_1:10.983763,((h1#0.5_1:8.657187,(C_1:6.141945,(A_1:2.412703,B_1:2.412703):3.729242):2.515241):0.759950,D_1:9.417136):1.566627);
Default Kingman coalescent on all branches.
Default population size of 10000 on all branches. 
Random seed: 2
Produced gene tree files: 
out0.6.3_coal_unit
((((A_1:2.291561,B_1:2.291561):2.813411,C_1:5.104972):2.956590,(D_1:5.898695,h1#0.5_1:5.898695):2.162867):1.080899,E_1:9.142461);
((D_1:7.822784,(((A_1:2.834647,B_1:2.834647):2.224355,C_1:5.059002):2.132514,h1#0.5_1:7.191516):0.631268):1.370331,E_1:9.193115);
(E_1:10.983763,((h1#0.5_1:8.657187,(C_1:6.141945,(A_1:2.412703,B_1:2.412703):3.729242):2.515241):0.759950,D_1:9.417136):1.566627);

Processing (((h1#0.5:4.0,D:4.0):3.0,((A:2.0,B:2.0):3.0,(C:2.0)h1#0.5:3.0):2.0):2.0,E:9.0)r;...
Default Kingman coalescent on all branches.
Default population size of 10000 on all branches. 
Random seed: 2
Produced gene tree files: 
out0.6.2_coal_unit
((((A_1:2.291561,B_1:2.291561):2.813411,C_1:5.104972):2.956590,(D_1:5.898695,h1#0.5_1:5.898695):2.162867):1.080899,E_1:9.142461);
((D_1:7.822784,(((A_1:2.834647,B_1:2.834647):2.224355,C_1:5.059002):2.132514,h1#0.5_1:7.191516):0.631268):1.370331,E_1:9.193115);
(E_1:10.983763,((h1#0.5_1:8.657187,(C_1:6.141945,(A_1:2.412703,B_1:2.412703):3.729242):2.515241):0.759950,D_1:9.417136):1.566627);
Default Kingman coalescent on all branches.
Default population size of 10000 on all branches. 
Random seed: 2
Produced gene tree files: 
out0.6.3_coal_unit
((((A_1:2.291561,B_1:2.291561):2.813411,C_1:5.104972):2.956590,(D_1:5.898695,h1#0.5_1:5.898695):2.162867):1.080899,E_1:9.142461);
((D_1:7.822784,(((A_1:2.834647,B_1:2.834647):2.224355,C_1:5.059002):2.132514,h1#0.5_1:7.191516):0.631268):1.370331,E_1:9.193115);
(E_1:10.983763,((h1#0.5_1:8.657187,(C_1:6.141945,(A_1:2.412703,B_1:2.412703):3.729242):2.515241):0.759950,D_1:9.417136):1.566627);

Processing (((h1#0.5:2.0,D:4.0):3.0,((A:2.0,B:2.0):3.0,(C:2.0)h1#0.5:3.0):2.0):2.0,E:9.0);...
Default Kingman coalescent on all branches.
Default population size of 10000 on all branches. 
Square diff in paths: 4
Absolute diff in paths: 2
WARNING! NOT ULTRAMETRIC!!!
Random seed: 2
WARNING: Gene tree is not ultrametric
WARNING: Gene tree is not ultrametric
WARNING: Gene tree is not ultrametric
Produced gene tree files: 
out0.6.2_coal_unit
((((A_1:2.291561,B_1:2.291561):2.813411,C_1:5.104972):2.956590,(D_1:5.898695,h1#0.5_1:3.898695):2.162867):1.080899,E_1:9.142461);
((D_1:7.822784,(((A_1:2.834647,B_1:2.834647):2.224355,C_1:5.059002):2.132514,h1#0.5_1:5.191516):0.631268):1.370331,E_1:9.193115);
(E_1:10.983763,((h1#0.5_1:6.657187,(C_1:6.141945,(A_1:2.412703,B_1:2.412703):3.729242):2.515241):0.759950,D_1:9.417136):1.566627);
Default Kingman coalescent on all branches.
Default population size of 10000 on all branches. 
WARNING! NOT ULTRAMETRIC!!!
Random seed: 2
WARNING: Gene tree is not ultrametric
WARNING: Gene tree is not ultrametric
WARNING: Gene tree is not ultrametric
Produced gene tree files: 
out0.6.3_coal_unit
((((A_1:2.291561,B_1:2.291561):2.813411,C_1:5.104972):2.956590,(D_1:5.898695,h1#0.5_1:3.898695):2.162867):1.080899,E_1:9.142461);
((D_1:7.822784,(((A_1:2.834647,B_1:2.834647):2.224355,C_1:5.059002):2.132514,h1#0.5_1:5.191516):0.631268):1.370331,E_1:9.193115);
(E_1:10.983763,((h1#0.5_1:6.657187,(C_1:6.141945,(A_1:2.412703,B_1:2.412703):3.729242):2.515241):0.759950,D_1:9.417136):1.566627);

Processing (((h1#0.5:2.0,D:4.0):3.0,((A:2.0,B:2.0):3.0,(C:2.0)h1#0.5:3.0):2.0):2.0,E:9.0)r;...
Default Kingman coalescent on all branches.
Default population size of 10000 on all branches. 
Square diff in paths: 4
Absolute diff in paths: 2
WARNING! NOT ULTRAMETRIC!!!
Random seed: 2
WARNING: Gene tree is not ultrametric
WARNING: Gene tree is not ultrametric
WARNING: Gene tree is not ultrametric
Produced gene tree files: 
out0.6.2_coal_unit
((((A_1:2.291561,B_1:2.291561):2.813411,C_1:5.104972):2.956590,(D_1:5.898695,h1#0.5_1:3.898695):2.162867):1.080899,E_1:9.142461);
((D_1:7.822784,(((A_1:2.834647,B_1:2.834647):2.224355,C_1:5.059002):2.132514,h1#0.5_1:5.191516):0.631268):1.370331,E_1:9.193115);
(E_1:10.983763,((h1#0.5_1:6.657187,(C_1:6.141945,(A_1:2.412703,B_1:2.412703):3.729242):2.515241):0.759950,D_1:9.417136):1.566627);
Default Kingman coalescent on all branches.
Default population size of 10000 on all branches. 
WARNING! NOT ULTRAMETRIC!!!
Random seed: 2
WARNING: Gene tree is not ultrametric
WARNING: Gene tree is not ultrametric
WARNING: Gene tree is not ultrametric
Produced gene tree files: 
out0.6.3_coal_unit
((((A_1:2.291561,B_1:2.291561):2.813411,C_1:5.104972):2.956590,(D_1:5.898695,h1#0.5_1:3.898695):2.162867):1.080899,E_1:9.142461);
((D_1:7.822784,(((A_1:2.834647,B_1:2.834647):2.224355,C_1:5.059002):2.132514,h1#0.5_1:5.191516):0.631268):1.370331,E_1:9.193115);
(E_1:10.983763,((h1#0.5_1:6.657187,(C_1:6.141945,(A_1:2.412703,B_1:2.412703):3.729242):2.515241):0.759950,D_1:9.417136):1.566627);

Processing (((B:.6)h1#.5:.6,A:1.2)s1:.6,(h1#.5:.6,C:1.2)s2:.6)r;...
Default Kingman coalescent on all branches.
Default population size of 10000 on all branches. 
Random seed: 2
Produced gene tree files: 
out0.6.2_coal_unit
Default Kingman coalescent on all branches.
Default population size of 10000 on all branches. 
Random seed: 2
Produced gene tree files: 
out0.6.3_coal_unit

Processing (((B:.6)h1#.5:.6,A:1.2)s1:.6,(h1#.5:.6,C:1.2)s2:.6);...
Default Kingman coalescent on all branches.
Default population size of 10000 on all branches. 
Square diff in paths: 0.36
Absolute diff in paths: 0.6
WARNING! NOT ULTRAMETRIC!!!
Random seed: 2
WARNING: Gene tree is not ultrametric
WARNING: Gene tree is not ultrametric
WARNING: Gene tree is not ultrametric
Produced gene tree files: 
out0.6.2_coal_unit
((h1#.5_1:1.717184,C_1:2.317184):1.157862,(A_1:2.232417,B_1:2.232417):1.242629);
(C_1:4.405919,(h1#.5_1:3.321777,(B_1:1.342461,A_1:1.342461):2.579316):0.484142);
(C_1:2.203538,((A_1:1.774547,B_1:1.774547):0.235875,h1#.5_1:1.410423):0.193115);
Default Kingman coalescent on all branches.
Default population size of 10000 on all branches. 
WARNING! NOT ULTRAMETRIC!!!
Random seed: 2
WARNING: Gene tree is not ultrametric
WARNING: Gene tree is not ultrametric
WARNING: Gene tree is not ultrametric
Produced gene tree files: 
out0.6.3_coal_unit
((h1#.5_1:1.717184,C_1:2.317184):1.157862,(A_1:2.232417,B_1:2.232417):1.242629);
(C_1:4.405919,(h1#.5_1:3.321777,(B_1:1.342461,A_1:1.342461):2.579316):0.484142);
(C_1:2.203538,((A_1:1.774547,B_1:1.774547):0.235875,h1#.5_1:1.410423):0.193115);

Processing ((((B:1,(D:0.6,(E:0.6,F:0.6)s5:0.6)s4:0.6)s3:.6)h1#.5:.6,A:1.2)s1:.6,(h1#.5:.6,C:1.2)s2:.6)r;...
Default Kingman coalescent on all branches.
Default population size of 10000 on all branches. 
Square diff in paths: 0.04
Absolute diff in paths: 0.2
WARNING! NOT ULTRAMETRIC!!!
Random seed: 2
WARNING: Gene tree is not ultrametric
WARNING: Gene tree is not ultrametric
WARNING: Gene tree is not ultrametric
Produced gene tree files: 
out0.6.2_coal_unit
Default Kingman coalescent on all branches.
Default population size of 10000 on all branches. 
WARNING! NOT ULTRAMETRIC!!!
Random seed: 2
WARNING: Gene tree is not ultrametric
WARNING: Gene tree is not ultrametric
WARNING: Gene tree is not ultrametric
Produced gene tree files: 
out0.6.3_coal_unit

Processing ((((B:1,(D:0.6,(E:0.6,F:0.6)s5:0.6)s4:0.6)s3:.6)h1#.5:.6,A:1.2)s1:.6,(h1#.5:.6,C:1.2)s2:.6);...
Default Kingman coalescent on all branches.
Default population size of 10000 on all branches. 
Square diff in paths: 0.04
Absolute diff in paths: 0.2
WARNING! NOT ULTRAMETRIC!!!
Random seed: 2
WARNING: Gene tree is not ultrametric
WARNING: Gene tree is not ultrametric
WARNING: Gene tree is not ultrametric
Produced gene tree files: 
out0.6.2_coal_unit
((h1#.5_1:2.260888,(F_1:3.542078,(E_1:1.883584,(B_1:1.048594,D_1:1.248594):0.034991):1.658494):1.118810):0.785922,(A_1:3.022269,C_1:3.022269):0.624541);
(((h1#.5_1:1.056655,C_1:1.656655):0.655545,(((E_1:0.996610,F_1:0.996610):0.646552,D_1:1.043162):0.628633,B_1:1.471795):1.840405):1.390280,A_1:3.702480);
((A_1:1.862379,(C_1:1.385222,h1#.5_1:0.785222):0.477157):1.079919,(B_1:1.495700,((E_1:1.098141,F_1:1.098141):0.265469,D_1:0.763609):0.932091):2.446598);
Default Kingman coalescent on all branches.
Default population size of 10000 on all branches. 
WARNING! NOT ULTRAMETRIC!!!
Random seed: 2
WARNING: Gene tree is not ultrametric
WARNING: Gene tree is not ultrametric
WARNING: Gene tree is not ultrametric
Produced gene tree files: 
out0.6.3_coal_unit
((h1#.5_1:2.260888,(F_1:3.542078,(E_1:1.883584,(B_1:1.048594,D_1:1.248594):0.034991):1.658494):1.118810):0.785922,(A_1:3.022269,C_1:3.022269):0.624541);
(((h1#.5_1:1.056655,C_1:1.656655):0.655545,(((E_1:0.996610,F_1:0.996610):0.646552,D_1:1.043162):0.628633,B_1:1.471795):1.840405):1.390280,A_1:3.702480);
((A_1:1.862379,(C_1:1.385222,h1#.5_1:0.785222):0.477157):1.079919,(B_1:1.495700,((E_1:1.098141,F_1:1.098141):0.265469,D_1:0.763609):0.932091):2.446598);

Thus, the following networks induce hybrid-Lambda to "detach" the hybrid edge and become a leaf:

(((h1#0.5:4.0,D:4.0):3.0,((A:2.0,B:2.0):3.0,(C:2.0)h1#0.5:3.0):2.0):2.0,E:9.0);
(((h1#0.5:4.0,D:4.0):3.0,((A:2.0,B:2.0):3.0,(C:2.0)h1#0.5:3.0):2.0):2.0,E:9.0)r;
(((h1#0.5:2.0,D:4.0):3.0,((A:2.0,B:2.0):3.0,(C:2.0)h1#0.5:3.0):2.0):2.0,E:9.0);
(((h1#0.5:2.0,D:4.0):3.0,((A:2.0,B:2.0):3.0,(C:2.0)h1#0.5:3.0):2.0):2.0,E:9.0)r;
(((B:.6)h1#.5:.6,A:1.2)s1:.6,(h1#.5:.6,C:1.2)s2:.6);
((((B:1,(D:0.6,(E:0.6,F:0.6)s5:0.6)s4:0.6)s3:.6)h1#.5:.6,A:1.2)s1:.6,(h1#.5:.6,C:1.2)s2:.6);

From there I see that on your networks from the trees directory these leaves only appear when the r root string is missing. However, on my custom networks these are present with or without the r string.

Any suggestion would be really appreciated to build my own custom networks as input for hybrid-Lambda.

Best wishes,

Gustavo

issue with terminal nodes labelling

All the examples above run well with the version on your new branch. So I tried on 9-taxon network that had lead me to the 3-taxon example above. Unfortunately I hit the same bug again... and a new one. (sorry for being the messenger of bad news!). Here is a reproducible example.

I used 4 networks: all with the same topology: 9 taxa, 2 reticulations, level 1, ultrametric.

  • n2: everything works fine
  • n3: same as n2, but with daughter edges "rotated" around a particular node
  • n2s: same as n2, but with species names modified to be "s1" through "s9"
  • n3s: same as n3, but with species names modified to be "s1" through "s9"

nets_n2n3n2sn3s

Simulations look good on n2 but the bug appears on n3: see warnings below. (this is using your bug fix on commit 781eb35)

% hybrid-Lambda -spcu '(((HS03:6.12,TMS01:6.12)I1:0.71,(NBLZG:5.98,H18#0.21:0.0)I2:0.85)I3:0.47,((AYEM:7.13,(XYBX:5.98)H18#0.21:1.15)I4:0.1,ZGQCS:7.23)I5:0.07,((YNEM:5.64,(DLYQCS:0.0,H19#0.11:0.0)I6:5.64)I7:0.56,(JYYJFS:0.0)H19#0.11:6.2)I8:1.1)I9;' -num 10 -seed 42 -o n2

Default Kingman coalescent on all branches.
Default population size of 10000 on all branches. 
Random seed: 42
Produced gene tree files: 
n2_coal_unit

gt_n2

% hybrid-Lambda -spcu '(((HS03:6.12,TMS01:6.12)I1:0.71,(NBLZG:5.98,H18#0.21:0.0)I2:0.85)I3:0.47,((AYEM:7.13,(XYBX:5.98)H18#0.21:1.15)I4:0.1,ZGQCS:7.23)I5:0.07,((JYYJFS:0.0)H19#0.89:6.2,(YNEM:5.64,(DLYQCS:0.0,H19#0.89:0.0)I6:5.64)I7:0.56)I8:1.1)I9;' -num 10 -seed 42 -o n3

Default Kingman coalescent on all branches.
Default population size of 10000 on all branches. 
WARNING! NOT ULTRAMETRIC!!!
Random seed: 42
WARNING: Gene tree is not ultrametric
WARNING: Gene tree is not ultrametric
WARNING: Gene tree is not ultrametric
WARNING: Gene tree is not ultrametric
WARNING: Gene tree is not ultrametric
WARNING: Gene tree is not ultrametric
WARNING: Gene tree is not ultrametric
WARNING: Gene tree is not ultrametric
WARNING: Gene tree is not ultrametric
WARNING: Gene tree is not ultrametric
Produced gene tree files: 
n3_coal_unit

gt_n3

The taxon JYYJFS (just below the "second" reticulation) is not aligned with the other taxa: the external branch to this taxon is either too short or too long by 6.2 exactly. This looks like the same bug as before, as if the parents edges at that reticulations had their branch lengths switched (6.2 and 0).

I then wanted to modify the tip labels to write this bug report. And then surprise: the behavior changed after changing the tip labels. On n2s, no warnings (as expected). But on n3s, the warnings disappeared and the gene trees were ultrametric!

%hybrid-Lambda -spcu '(((s1:6.12,s2:6.12)I1:0.71,(s3:5.98,H18#0.21:0.0)I2:0.85)I3:0.47,((s4:7.13,(s5:5.98)H18#0.21:1.15)I4:0.1,s6:7.23)I5:0.07,((s7:5.64,(s8:0.0,H19#0.11:0.0)I6:5.64)I7:0.56,(s9:0.0)H19#0.11:6.2)I8:1.1)I9;' -num 10 -seed 42 -o n2s

Default Kingman coalescent on all branches.
Default population size of 10000 on all branches. 
Random seed: 42
Produced gene tree files: 
n2s_coal_unit

gt_n2s

% hybrid-Lambda -spcu '(((s1:6.12,s2:6.12)I1:0.71,(s3:5.98,H18#0.21:0.0)I2:0.85)I3:0.47,((s4:7.13,(s5:5.98)H18#0.21:1.15)I4:0.1,s6:7.23)I5:0.07,((s9:0.0)H19#0.89:6.2,(s7:5.64,(s8:0.0,H19#0.89:0.0)I6:5.64)I7:0.56)I8:1.1)I9;' -num 10 -seed 42 -o n3s

Default Kingman coalescent on all branches.
Default population size of 10000 on all branches. 
Random seed: 42
Produced gene tree files: 
n3s_coal_unit

gt_n3s

Why the taxon labels affect the simulations?? It looks like whether the branch lengths are switched, or not, is affected by the branch labels.

For completeness, here is the julia code that I used to make the plots, with networks in extended newick format. (I also used julia to modify taxon names, rotate edges around a node, and get the network string for hybrid-Lambda).

using PhyloNetworks # v0.12.0
using RCall         # v0.13.10
using PhyloPlots    # add PhyloPlots#master

n2 = readTopology("(((HS03:6.12,TMS01:6.12):0.71,(NBLZG:5.98,#H18:0.0::0.21):0.85):0.47,((AYEM:7.13,(XYBX:5.98)#H18:1.15::0.79):0.1,ZGQCS:7.23):0.07,((YNEM:5.64,(DLYQCS:0.0,#H19:0.0::0.11):5.64):0.56,(JYYJFS:0.0)#H19:6.2::0.89):1.1);")
hybridlambdaformat(n2) # to get format required by hybrid-Lambda: "(((HS03:6.12,TMS01:6.12)I1:0.71,(NBLZG:5.98,H18#0.21:0.0)I2:0.85)I3:0.47,((AYEM:7.13,(XYBX:5.98)H18#0.21:1.15)I4:0.1,ZGQCS:7.23)I5:0.07,((YNEM:5.64,(DLYQCS:0.0,H19#0.11:0.0)I6:5.64)I7:0.56,(JYYJFS:0.0)H19#0.11:6.2)I8:1.1)I9;"
n3 = readTopology("(((HS03:6.12,TMS01:6.12):0.71,(NBLZG:5.98,#H18:0.0::0.21):0.85):0.47,((AYEM:7.13,(XYBX:5.98)#H18:1.15::0.79):0.1,ZGQCS:7.23):0.07,((JYYJFS:0.0)#H19:6.2::0.89,(YNEM:5.64,(DLYQCS:0.0,#H19:0.0::0.11):5.64):0.56):1.1);")
n2s = readTopology("(((s1:6.12,s2:6.12):0.71,(s3:5.98,#H18:0.0::0.21):0.85):0.47,((s4:7.13,(s5:5.98)#H18:1.15::0.79):0.1,s6:7.23):0.07,((s7:5.64,(s8:0.0,#H19:0.0::0.11):5.64):0.56,(s9:0.0)#H19:6.2::0.89):1.1);")
n3s = readTopology("(((s1:6.12,s2:6.12):0.71,(s3:5.98,#H18:0.0::0.21):0.85):0.47,((s4:7.13,(s5:5.98)#H18:1.15::0.79):0.1,s6:7.23):0.07,((s9:0.0)#H19:6.2::0.89,(s7:5.64,(s8:0.0,#H19:0.0::0.11):5.64):0.56):1.1);")

R"layout"([1 2; 3 4])
plot(n2,:R; showEdgeLength=true, useEdgeLength=true);
R"mtext"("n2", line=-2, adj=0.1);
plot(n3,:R; showEdgeLength=true, useEdgeLength=true);
R"mtext"("n3", line=-2, adj=0.1);
plot(n2s,:R; showEdgeLength=true, useEdgeLength=true);
R"mtext"("n2s", line=-2, adj=0.1);
plot(n3s,:R; showEdgeLength=true, useEdgeLength=true);
R"mtext"("n3s", line=-2, adj=0.1);

R"layout"([1 2]); R"par"(mar=[0,0,0,1]);
for gt in readMultiTopology("n2_coal_unit")[1:2]
    plot(gt,:R; showEdgeLength=true, useEdgeLength=true)
end
R"mtext"("first 2 gene trees from n2", line=-1, adj=0.05, outer=true);
# and similar for gene trees from n3, n2s and n3s.

Originally posted by @cecileane in #36 (comment)

Level-2 networks sometimes cause segfault or warnings about ultrametricity

Hello,

We have been simulating phylogenetic networks with SiPhyNetwork in R, and are trying to use hybrid-Lambda to simulate gene trees on these. However, when using some of our level-2 networks as input for hybrid-Lambda we get (1) segmentation faults, (2) a warning on lack of ultrametricity, or (3) both at the same time.

We have used the approach below for network generation:

### script.R

library(SiPhyNetwork)
library(ape)
set.seed(10)

# simulate networks under the birth-death hybridization process
numbsim = 500
n1 <- 15
bdNS <- SiPhyNetwork::sim.bdh.taxa.ssa(
    n = n1,
    numbsim = numbsim,
    lambda = 0.9,
    mu = 0,
    nu = 0.03,
    hybprops = c(0.5, 0.25, 0.25),
    hyb.inher.fxn = SiPhyNetwork::make.beta.draw(1, 1),
    frac = 1,
    mrca = FALSE,
    complete = TRUE,
    stochsampling = FALSE,
    hyb.rate.fxn = NULL,
    trait.model = NULL
    )

# here some code testing whether the networks are level-1 or not
out <- # indices to networks that are not level-1

# check that all non-level-1 networks are ultrametric using ape
if (sum(sapply(X = bdNS[out], FUN = ape::is.ultrametric) == length(out))) {
    cat("All networks to be written to nets_not_level1.extnex are ultrametric\n")
}

# write all the networks above level-1 to a file (all of them are)
SiPhyNetwork::write.net(net = bdNS[out], file = "nets_not_level1.extnex")

The content of net_not_level1.extnex is found attached to this issue.

Then, we use PhyloNetworks for conversion of format between extended newick and hybridlambda and write them to the file nets_not_level1.hybridlambda (also available in the attachment):

### script.jl

using PhyloNetworks
nets_not_level1 = readMultiTopology("nets_not_level1.extnex")

# bulk format conversion of networks read in nets_not_level1
open("nets_not_level1.hybridlambda", "w") do io    
    for i = 1:length(nets_not_level1)
        hyblambFormatted = hybridlambdaformat(nets_not_level1[i])
        write(io, "$hyblambFormatted\n")
        flush(io)
    end
end

And finally iterate over each network to simulate a set of three loci with some arbitrary parameters:

### script.sh
#!/usr/bin/bash

# run the r script
Rscript script.r

# run the julia script
julia script.jl

# iterate over the content of nets_not_level1.hybridlambda and
# run hybrid-Lambda on each line in order to check issues
# with ultrametricity
while read line
do
    let LNUM+=1
    echo "Processing network in line $LNUM:"
    hybrid-Lambda -spcu $line -num 3 -seed 2 -o level2_2
done < nets_not_level1.hybridlambda

The above is run redirecting std out and err to a file (also attached):

./script.sh > outerr.txt 2>&1

The whole procedure returns 63 networks stored in nets_not_level1.hybridlambda, some of which show the problems already mentioned:

  • segfault networks: 5, 6, 14, 16, 20, 27, 28, 29, 32, 36, 40, 43, 44, 50, 56, 59, 63
  • ultrametric and segfault networks: 34, 52, 57, 58, 61

We would like to know if we are missing something on the way hybrid-Lambda should be run, e.g., whether level-2 networks are not guaranteed to work.

Also, we would like to understand better the warning about lack of ultrametricity, and whether it is safe to ignore it due to the fact that the simulated network is by definition ultrametric, and tested positive with ape.

Finally, we would like to understand why the segfault is happening sometimes, and whether it can be solved somehow.

Thanks in advance for your time and feedback.

Best wishes,

Gustavo (@gaballench), Carlos (@acosta187), and Claudia (@crsl4).
nets_not_level1_extnew.txt
nets_not_level1_hybridlambda.txt
outerr.txt

bug with reading network, else question about network format

Hi @shajoezhu and @jamdeg, I gave a time-consistent (ultrametric) network as input, but hybrid-lambda complains that it's not ultrametric, and the simulated gene trees are not ultrametric. So here is the example:

hybrid-Lambda -spcu '((A:1.0)H19#0.6:4.0,(B:3.0,(C:1.0,H19#0.6:0.0)I1:2.0)I2:2.0)I3;' -num 10 -seed 1234 -o net8trial

Default Kingman coalescent on all branches.
Default population size of 10000 on all branches. 
WARNING! NOT ULTRAMETRIC!!!
Random seed: 1234
WARNING: Gene tree is not ultrametric
WARNING: Gene tree is not ultrametric
...
Produced gene tree files: 
net8trial_coal_unit

Here is a plot of the network, with edges labelled by their lengths: it is ultrametric (contrary to hybrid-lambda's warning), so it seems that my network string description is wrong, or that it's bug:
species network

This network image, the standard Newick string for the network and the network string used as input to hybrid-lambda were obtained in julia like this:

using PhyloNetworks
net8 = readTopology("((A:1)#H19:4::0.6,(B:3,(C:1,#H19:0.0::0.4):2):2);")
plot(net8,:R; showEdgeLength=true, useEdgeLength=true);
netHL = hybridlambdaformat(net8) # "((A:1.0)H19#0.6:4.0,(B:3.0,(C:1.0,H19#0.6:0.0)I1:2.0)I2:2.0)I3;"

The first 6 gene trees look like this, where we can see a pattern of species A being too "far" by 4 units, or too close to the root by 4 units, depending on how it was inherited at the reticulation.
6 simulated gene trees

If I misunderstand the format required by hybrid-lambda to write the network, I would love to learn more! Many thanks. @RC0515

random number generator seeding is not right

run script of

#!/bin/bash                                                                     

for((i=1; i<=10; i++))
do
#R CMD BATCH ST4.r
./hybrid-Lambda -spcu temp1 -num 1 -seed $i\55
#rm -f temp
#cp temp4 temp
cat temp1 >> tempST
cat OUT_coal_unit >> tempGT
R CMD BATCH bal.r
cat output.out >> foo
echo $i
echo $i >> log
echo 4 >> log
done

tempGT returns

((t2_1:0.967026,(t3_1:0.698811,t4_1:0.698811):0.268215):0.190127,t1_1:1.157153);
((t2_1:0.528222,(t3_1:0.317560,t4_1:0.317560):0.210662):0.388938,t1_1:0.917160);
((t2_1:0.379231,(t3_1:0.375773,t4_1:0.375773):0.003458):2.841594,t1_1:3.220825);
((t2_1:1.284799,(t3_1:0.349129,t4_1:0.349129):0.935671):0.398095,t1_1:1.682895);
((t2_1:0.343714,(t3_1:0.283673,t4_1:0.283673):0.060041):2.890867,t1_1:3.234581);
((t2_1:0.857172,(t3_1:0.469486,t4_1:0.469486):0.387686):2.711487,t1_1:3.568659);
((t2_1:0.446177,(t3_1:0.395222,t4_1:0.395222):0.050955):1.163103,t1_1:1.609280);
((t2_1:1.154513,(t3_1:0.619523,t4_1:0.619523):0.534990):1.036833,t1_1:2.191346);
((t2_1:0.926482,(t3_1:0.701243,t4_1:0.701243):0.225239):0.259924,t1_1:1.186406);
((t2_1:0.821960,(t3_1:0.293566,t4_1:0.293566):0.528394):1.998747,t1_1:2.820707);

all of the first tree have the same topology ( regardless what seed was given)

distance between taxa is not right, compare with theoretical values

./hybrid-Lambda -spng "((t1:1000,t2:1000)int:1000,t3:2000);" -pop "((t1:1000,t2:1000)int:2000,t3:1000)r:1000;" -sim_num_gener -num 10000 -o sim 
library(ape)
gt <- read.tree("sim_num_gener")
hist(unlist(lapply(gt, function(x){sum(x$edge.length[which.edge(x,c("t2_1", "t3_1"))])})), breaks = 30)
l = 1:20000
fl = 1/2000*exp(-(l-1000-1000-2000)/2000)
lines(l,fl, col="red")

tmp

Problems with networks with no single hybridization

Hello Joe,

I am working with networks simulated in R with "SiPhyNetwork" and then converted in hybrid lambda format with julia, but when I use hybrid lambda it can not produce gene tree in some "networks with no single hybridization", and give me that mesage: "Segmentation fault (core dumped)", and "Error: basic_string::substr: __pos (which is 926) > this->size() (which is 925)" in other verssion. This is one network that give in trouble.

((t7:1.824787754,(t5:0.2492040851,(t4:0.2492040851)#H40:0::0.5816295845):1.575583669):1.078315079,((((t2:0.2492040851,#H40:0::0.4183704155):0.06211284012,((t14:0.2158261544)#H27:1.059040005::0.8200520216)#H37:0::0.57750146):0.5830225755,#H28:0::0.2386303903):0.5672588079,(((((t10:0.1232252345,t1:0.1232252345):0.2897578393,#H32:0::0.1421666984):0.4381590085,((((t12:0.03763745742,t9:0.03763745742):0.2237957877,t11:0.2614332451):0.1515498287)#H32:0.1323027591::0.8578333016,(t8:0.4706204227,(t6:0.3113169253,#H37:0::0.42249854):0.1593034974):0.0746654102):0.3058562494):0.4948735151,((t17:0.6072760223,t16:0.6072760223):0.667590137,#H27:2.022589239::0.1799479784):0.07114943811):0.01714427292,(t3:0.8795085707)#H28:0.01483093012::0.7613696097):0.09843843841):1.441504524):1.695735038);

bug

hybrid-Lambda -spcu trees/4_tax_sp_nt1_para -o example2 -num 2 -mu 0.00003 -sim_mut_unit -sim_num_mut -mm 1.1 -seed 1410225409

returns seg fault

download zip archive, and compile

.../checkfiles.sh: line 21: wget: command not found
Error: Download package from https://github.com/hybridLambda/plot/archive/master.tar.gz failed
Jamess-MacBook-Pro:src superjames$ make
rm -f .o hybrid-Lambda
g++ -O3 -g -std=c++0x -DNDEBUG -DVERSION="v-0.5-beta" -I../src/ -c plot/figure.cpp
clang: error: no such file or directory: 'plot/figure.cpp'
clang: error: no input files
make: *
* [figure.o] Error 1
Jamess-MacBook-Pro:src superjames$

I think the README.md file is not very clear -- it says to simply type make, but then it says shows running checkfiles.sh first (is this script necessary to for the installation?)

There is also a typo that it should say "simply type make" rather than "simply make". Directory is also mispelled as "Direcotry".

I get similar error messages when I download the .tgz file instead:

Jamess-MacBook-Pro:src superjames$ ./checkfiles.sh
.../checkfiles.sh: line 21: wget: command not found
Error: Download package from https://github.com/hybridLambda/plot/archive/master.tar.gz failed
Jamess-MacBook-Pro:src superjames$ make
rm -f .o hybrid-Lambda
g++ -O3 -g -std=c++0x -DNDEBUG -DVERSION="v-0.5-beta" -I../src/ -c plot/figure.cpp
clang: error: no such file or directory: 'plot/figure.cpp'
clang: error: no input files
make: *
* [figure.o] Error 1

segmentation fault with hybrid ladder

Hi there, when running Hybrid-Lambda through Julia package QuartetNetworkGoodnessFit (cc: @cecileane) the command

/Users/laurenfrankel/.julia/packages/QuartetNetworkGoodnessFit/NhwsJ/deps/usr/bin/hybrid-Lambda -spcu "'((t3:1.123916174,((t4:0.4459935601,((t13:0.02953586373,t7:0.02953586373)I1:0.2529580411,t6:0.2824939049)I2:0.1634996552)I3:0.6268849558,(((t10:0.2528263692,((t5:0.02957738207)H26#0.5164631303:0.2232489871)H24#0.9067618483:0.0)I4:0.1281591885,(((t1:0.02957738207,H26#0.5164631303:0.0)I5:0.2232489871,H24#0.9067618483:0.0)I6:0.1281591885)H20#0.662992664:0.0)I7:0.07706148448,(t12:0.3809855577,H20#0.662992664:0.0)I8:0.07706148448)I9:0.6148314737)I10:0.05103765815)I11:1.604201279,t8:2.728117453)I12;'" -num 100 -seed 6724

results in Segmentation fault: 11.

Visualizing this network, you can see it is a hybrid ladder. Perhaps this is causing the seg fault?
Screen Shot 2022-03-27 at 7 09 47 PM

to do list

  • check simulation data for long branch length
  • include boost library
  • fst
  • use graph structure

mac compiling issue

../src/boost/cstdint.hpp:380:13: error: no member named 'intptr_t' in the global namespace
using ::intptr_t;
~~^
../src/boost/cstdint.hpp:381:13: error: no member named 'uintptr_t' in the global namespace
using ::uintptr_t;

tree topology distribution

I think this is ok

$./hybrid-Lambda -spng "((t1:1000,t2:1000)int:1000,t3:2000);" -pop "((t1:1000,t2:1000)int:2000,t3:1000)r:2000;" -sim_num_gener -num 10000 -o sim -f

$cat sim_frequencies 
1 ((t1_1,t2_1),t3_1);  5982
2 ((t3_1,t2_1),t1_1);  2051
3 (t2_1,(t3_1,t1_1));  1967

seg fault

hybrid-Lambda -spcu '((((A1:1,A2:1)x1:.2)h_1#.5:4,h_1#.5:4)x2:.2,B:5.4)r;' -seed 1

Use lambada in Windows 10 x64

Hi dear
I have Windows 10 x64 on my laptop.
Is there any compatible C++ compiler that I use it?
If not, is there a pre installed Linux virtual machine (VMWare) that I use it without full installation of Linux? I mean something like TurnKeyLinux (www.turnkeylinux.org)
If not, which version of Debian Linux need to install on VMWare to use this code?
Thank you,

Wdeprecated-register on Mac

In file included from src/boost/math/special_functions/lanczos.hpp:1288:
src/boost/math/special_functions/detail/lanczos_sse2.hpp:54:4: warning: 'register' storage class specifier is deprecated [-Wdeprecated-register]
register __m128d vx = _mm_load1_pd(&x);
^~~~~~~~~
src/boost/math/special_functions/detail/lanczos_sse2.hpp:55:4: warning: 'register' storage class specifier is deprecated [-Wdeprecated-register]
register __m128d sum_even = _mm_load_pd(coeff);
^~~~~~~~~
src/boost/math/special_functions/detail/lanczos_sse2.hpp:56:4: warning: 'register' storage class specifier is deprecated [-Wdeprecated-register]
register __m128d sum_odd = _mm_load_pd(coeff+2);
^~~~~~~~~
src/boost/math/special_functions/detail/lanczos_sse2.hpp:57:4: warning: 'register' storage class specifier is deprecated [-Wdeprecated-register]
register __m128d nc_odd, nc_even;
^~~~~~~~~
src/boost/math/special_functions/detail/lanczos_sse2.hpp:57:4: warning: 'register' storage class specifier is deprecated [-Wdeprecated-register]
register __m128d nc_odd, nc_even;
^~~~~~~~~
src/boost/math/special_functions/detail/lanczos_sse2.hpp:58:4: warning: 'register' storage class specifier is deprecated [-Wdeprecated-register]
register __m128d vx2 = _mm_mul_pd(vx, vx);
^~~~~~~~~
src/boost/math/special_functions/detail/lanczos_sse2.hpp:139:4: warning: 'register' storage class specifier is deprecated [-Wdeprecated-register]
register __m128d vx = _mm_load1_pd(&x);
^~~~~~~~~
src/boost/math/special_functions/detail/lanczos_sse2.hpp:140:4: warning: 'register' storage class specifier is deprecated [-Wdeprecated-register]
register __m128d sum_even = _mm_load_pd(coeff);
^~~~~~~~~
src/boost/math/special_functions/detail/lanczos_sse2.hpp:141:4: warning: 'register' storage class specifier is deprecated [-Wdeprecated-register]
register __m128d sum_odd = _mm_load_pd(coeff+2);
^~~~~~~~~
src/boost/math/special_functions/detail/lanczos_sse2.hpp:142:4: warning: 'register' storage class specifier is deprecated [-Wdeprecated-register]
register __m128d nc_odd, nc_even;
^~~~~~~~~
src/boost/math/special_functions/detail/lanczos_sse2.hpp:142:4: warning: 'register' storage class specifier is deprecated [-Wdeprecated-register]
register __m128d nc_odd, nc_even;
^~~~~~~~~
src/boost/math/special_functions/detail/lanczos_sse2.hpp:143:4: warning: 'register' storage class specifier is deprecated [-Wdeprecated-register]
register __m128d vx2 = _mm_mul_pd(vx, vx);
^~~~~~~~~

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.