Parallel PopGen Package
Sim_Model::migration_piecewise< Functor_m1, Functor_m2 > Struct Template Reference

functor: migration function changes from m1 to m2 at generation inflection_point More...

Public Member Functions

 migration_piecewise ()
 default constructor More...
 
 migration_piecewise (Functor_m1 m1_in, Functor_m2 m2_in, int inflection_point, int generation_shift=0)
 constructor More...
 
__host__ __device__ __forceinline__ float operator() (const int pop_FROM, const int pop_TO, const int generation) const
 Migration operator, returns migration rate, mig_rate, which is the proportion of chromosomes in pop_TO from pop_FROM for a given generation More...
 

Public Attributes

int inflection_point
 generation in which the migration function switches from m1 to m2 More...
 
int generation_shift
 number of generations to shift function backwards More...
 
Functor_m1 m1
 first migration function More...
 
Functor_m2 m2
 second migration function More...
 

Detailed Description

template<typename Functor_m1, typename Functor_m2>
struct Sim_Model::migration_piecewise< Functor_m1, Functor_m2 >

functor: migration function changes from m1 to m2 at generation inflection_point

Takes in two template types: the function to be returned before the inflection_point and the function for after the inflection_point.
Piecewise migration functors can be nested within each other and with constant directional migration functors for multiple migration directions and multiple time functions, e.g.:

Using both demographic and migration functors, population 0 splits in two, forming population 1 in the first generation. Population 1's size increases exponentially afterwards with no further migration between the groups

typedef Sim_Model::demography_constant dem_constant;
dem_constant d_pop0(100000), d_pop1(0);
dem_pop_constant_constant d_generation_0(d_pop0,d_pop1,1); //at the start of the simulation, the first population pop0 starts out at 100,000 individuals, pop1 doesn't exist yet
dem_constant d_pop0_1(90000); dem_exponential d_pop1_1(0.01, 10000, 1); //shifts exponential back one generation so it starts at 10,000
dem_pop_constant_exponential d_remaining_generations(d_pop0_1,d_pop1_1,1); //in the first generation, 10,000 individuals from pop0 move to start pop1, which grows exponentially afterwards at a rate of 1%
Sim_Model::demography_piecewise<dem_pop_constant_constant,dem_pop_constant_exponential> demography_model(d_generation_0,d_remaining_generations,1);
typedef Sim_Model::migration_constant_equal mig_const_equal;
mig_const_equal m0; //no migration
mig_const_equal_const_dir m_pop0_pop1(1.f,0,1,m0); //pop1 made up entirely of individuals from pop0, no other population contributing to pop0
mig_const_equal_const_dir_const_dir m_pop1_pop1(0.f,1,1,m_pop0_pop1); //pop1 made up entirely of individuals from pop0 (since pop1 previously did not exist, no migration from previous pop1 generation!)
split_pop0_gen1 m_generation_1(m0,m_pop1_pop1,1); //no migration in generation 0, splits pop1 off from pop0 in generation 1
Sim_Model::migration_piecewise<split_pop0_gen1,mig_const_equal> migration_model(m_generation_1,m0,2); //no further migration between groups

The modularity of these functor templates allow parameter models to be extended to any number of populations and piecewise parameter functions (including user defined functions).

Examples:
Example2-DaDi.

Definition at line 256 of file go_fish.cuh.

Constructor & Destructor Documentation

§ migration_piecewise() [1/2]

template<typename Functor_m1 , typename Functor_m2 >
Sim_Model::migration_piecewise< Functor_m1, Functor_m2 >::migration_piecewise ( )
inline

default constructor

inflection_point = 0
generation_shift = 0
Function m1 assigned default constructor of Functor_m1
Function m2 assigned default constructor of Functor_m2

Definition at line 514 of file template_inline_simulation_functors.cuh.

§ migration_piecewise() [2/2]

template<typename Functor_m1 , typename Functor_m2 >
Sim_Model::migration_piecewise< Functor_m1, Functor_m2 >::migration_piecewise ( Functor_m1  m1_in,
Functor_m2  m2_in,
int  inflection_point,
int  generation_shift = 0 
)
inline

constructor

Parameters
generation_shift(optional input) default 0

Definition at line 517 of file template_inline_simulation_functors.cuh.

Member Function Documentation

§ operator()()

template<typename Functor_m1 , typename Functor_m2 >
__host__ __device__ __forceinline__ float Sim_Model::migration_piecewise< Functor_m1, Functor_m2 >::operator() ( const int  pop_FROM,
const int  pop_TO,
const int  generation 
) const

Migration operator, returns migration rate, mig_rate, which is the proportion of chromosomes in pop_TO from pop_FROM for a given generation

if(generation >= inflection_point+generation_shift) mig_rate = m2(pop_FROM, pop_TO, generation-generation_shift)
else mig_rate = m1(pop_FROM, pop_TO, generation-generation_shift)

Definition at line 521 of file template_inline_simulation_functors.cuh.

Member Data Documentation

§ inflection_point

template<typename Functor_m1, typename Functor_m2>
int Sim_Model::migration_piecewise< Functor_m1, Functor_m2 >::inflection_point

generation in which the migration function switches from m1 to m2

Definition at line 258 of file go_fish.cuh.

§ generation_shift

template<typename Functor_m1, typename Functor_m2>
int Sim_Model::migration_piecewise< Functor_m1, Functor_m2 >::generation_shift

number of generations to shift function backwards

useful if you are starting the simulation from a previous simulation state and this function is expecting to start at 0 or any scenario where you want to shift the generation of the function relative to the simulation generation

Definition at line 259 of file go_fish.cuh.

§ m1

template<typename Functor_m1, typename Functor_m2>
Functor_m1 Sim_Model::migration_piecewise< Functor_m1, Functor_m2 >::m1

first migration function

Definition at line 260 of file go_fish.cuh.

§ m2

template<typename Functor_m1, typename Functor_m2>
Functor_m2 Sim_Model::migration_piecewise< Functor_m1, Functor_m2 >::m2

second migration function

Definition at line 261 of file go_fish.cuh.


The documentation for this struct was generated from the following files: