00001 #ifndef __SEQUENCE_COALESCENT_MUTATION_HPP__
00002 #define __SEQUENCE_COALESCENT_MUTATION_HPP__
00003
00004 #include <Sequence/Coalescent/SimTypes.hpp>
00005 #include <Sequence/SimData.hpp>
00006 #include <vector>
00007 #include <string>
00008 #include <utility>
00009 #include <cstdio>
00010
00011 namespace Sequence
00012 {
00019 extern int MAX_SEGSITES;
00026 extern int MAX_SEGS_INC;
00027
00039 typedef std::pair< std::vector<double>,
00040 std::vector<std::string> > gamete_storage_type;
00041
00042 template<typename uniform_generator>
00043 void add_S_inf_sites ( uniform_generator & uni ,
00044 marginal::const_iterator history,
00045 const double & tt,
00046 const int & beg, const int & end,
00047 const int & nsam,
00048 const int & nsites,
00049 const int & S ,
00050 const int & first_snp_index,
00051 gamete_storage_type * gametes );
00052
00053 template<typename uniform_generator>
00054 void add_S_inf_sites ( const uniform_generator & uni,
00055 marginal::const_iterator history,
00056 const double & tt,
00057 const int & beg, const int & end,
00058 const int & nsam,
00059 const int & nsites,
00060 const int & S ,
00061 const int & first_snp_index,
00062 gamete_storage_type * gametes );
00063
00064 template<typename poisson_generator,
00065 typename uniform_generator>
00066 int infinite_sites( poisson_generator & poiss,
00067 uniform_generator & uni,
00068 gamete_storage_type * gametes,
00069 const int & nsites,
00070 const arg & history,
00071 const double & theta );
00072
00073 template<typename poisson_generator,
00074 typename uniform_generator>
00075 int infinite_sites( const poisson_generator & poiss,
00076 const uniform_generator & uni,
00077 gamete_storage_type * gametes,
00078 const int & nsites,
00079 const arg & history,
00080 const double & theta );
00081
00082 template<typename uniform_generator>
00083 int infinite_sites( uniform_generator & uni,
00084 gamete_storage_type * gametes,
00085 const int & nsites,
00086 const arg & history,
00087 const double * total_times,
00088 const unsigned * segsites );
00089
00090 template<typename uniform_generator>
00091 int infinite_sites( const uniform_generator & uni,
00092 gamete_storage_type * gametes,
00093 const int & nsites,
00094 const arg & history,
00095 const double * total_times,
00096 const unsigned * segsites );
00097
00098 template<typename poisson_generator,
00099 typename uniform_generator>
00100 SimData infinite_sites_sim_data( poisson_generator & poiss,
00101 uniform_generator & uni,
00102 const int & nsites,
00103 const arg & history,
00104 const double & theta);
00105
00106 template<typename poisson_generator,
00107 typename uniform_generator>
00108 SimData infinite_sites_sim_data( const poisson_generator & poiss,
00109 const uniform_generator & uni,
00110 const int & nsites,
00111 const arg & history,
00112 const double & theta);
00113
00114 template<typename uniform_generator>
00115 SimData infinite_sites_sim_data( uniform_generator & uni,
00116 const int & nsites,
00117 const arg & history,
00118 const double * total_times,
00119 const unsigned * segsites);
00120
00121 template<typename uniform_generator>
00122 SimData infinite_sites_sim_data( const uniform_generator & uni,
00123 const int & nsites,
00124 const arg & history,
00125 const double * total_times,
00126 const unsigned * segsites);
00127
00128 void output_gametes(FILE * fp,const unsigned & segsites,
00129 const unsigned & nsam,
00130 const gamete_storage_type & gametes);
00131 }
00132 #endif
00133 #include <Sequence/Coalescent/bits/Mutation.tcc>