From ec62c283dc258d690b73fbcaa0552a3d01d94407 Mon Sep 17 00:00:00 2001 From: David-Peede Date: Mon, 23 Feb 2026 13:10:52 -0500 Subject: [PATCH 1/5] Fixed the divergence times, per generation migration rates, and sanity checked the directionality of gene flow. --- .../CanFam/EarlyWolfAdmixture_6F14.csv | 26 ++++++++-------- .../catalog/CanFam/demographic_models.py | 30 +++++++++---------- 2 files changed, 28 insertions(+), 28 deletions(-) diff --git a/docs/parameter_tables/CanFam/EarlyWolfAdmixture_6F14.csv b/docs/parameter_tables/CanFam/EarlyWolfAdmixture_6F14.csv index d8ac01b70..f6727567f 100644 --- a/docs/parameter_tables/CanFam/EarlyWolfAdmixture_6F14.csv +++ b/docs/parameter_tables/CanFam/EarlyWolfAdmixture_6F14.csv @@ -10,18 +10,18 @@ Population size,"1,393","Ancestral (Israeli, Croatian) wolf pop. size" Population size,"12,627","Ancestral ((Israeli, Croatian), Chinese) wolf pop. size" Population size,"44,993","Ancestral (dog, wolf) pop. size" Population size,"18,169","Ancestral ((dog, wolf), golden jackal)root pop. size" -Migration rate,0.18,"Israeli wolf -> Basenji migration rate" -Migration rate,0.07,"Basenji -> Israeli wolf migration rate" -Migration rate,0.03,"Chinese wolf -> Dingo migration rate" -Migration rate,0.04,"Dingo -> Chinese wolf migration rate" -Migration rate,0.00,"Golden jackal -> Israeli wolf migration rate" -Migration rate,0.05,"Israeli wolf -> Golden jackal migration rate" -Migration rate,0.02,"Golden jackal -> Ancestral (dog, wolf) migration rate" -Migration rate,0.99,"Ancestral (dog, wolf) -> Golden jackal migration rate" -Time (gen.),"12,795","Ancestral ((Boxer, Basenji), Dingo) split time" -Time (gen.),"13,389","Ancestral (Israeli, Croatian) wolf split time" -Time (gen.),"13,455","Ancestral ((Israeli, Croatian), Chinese) wolf split time" -Time (gen.),"14,874","Ancestral (dog, wolf) split time" -Time (gen.),"398,262","Ancestral ((dog, wolf), golden jackal) split time" +Migration rate,0.18,"Israeli wolf -> Basenji total migration rate" +Migration rate,0.07,"Basenji -> Israeli wolf total migration rate" +Migration rate,0.03,"Chinese wolf -> Dingo total migration rate" +Migration rate,0.04,"Dingo -> Chinese wolf total migration rate" +Migration rate,0.00,"Golden jackal -> Israeli wolf total migration rate" +Migration rate,0.05,"Israeli wolf -> Golden jackal total migration rate" +Migration rate,0.02,"Golden jackal -> Ancestral (dog, wolf) total migration rate" +Migration rate,0.99,"Ancestral (dog, wolf) -> Golden jackal total migration rate" +Time (yrs.),"12,795","Ancestral ((Boxer, Basenji), Dingo) split time" +Time (yrs.),"13,389","Ancestral (Israeli, Croatian) wolf split time" +Time (yrs.),"13,455","Ancestral ((Israeli, Croatian), Chinese) wolf split time" +Time (yrs.),"14,874","Ancestral (dog, wolf) split time" +Time (yrs.),"398,262","Ancestral ((dog, wolf), golden jackal) split time" Generation time (yrs.),3,Generation time Mutation rate,1e-8,Mutation rate diff --git a/stdpopsim/catalog/CanFam/demographic_models.py b/stdpopsim/catalog/CanFam/demographic_models.py index c64eaf434..a6b0edc96 100644 --- a/stdpopsim/catalog/CanFam/demographic_models.py +++ b/stdpopsim/catalog/CanFam/demographic_models.py @@ -62,25 +62,25 @@ def _dog_wolf_admixture(): N_ancDW = 44993 # (dog, wolf) N_root = 18169 # ((dog, wolf), golden jackal)root - # Estimated (calibrated) divergence times, from Table S12 - T_ancDOG1 = 12102 # (Boxer, Basenji) - T_ancDOG = 12795 # ((Boxer, Basenji), Dingo) - T_ancWLF1 = 13389 # (Israeli, Croatian) wolf - T_ancWLF = 13455 # ((Israeli, Croatian), Chinese) wolf - T_ancDW = 14874 # (dog, wolf) - T_ancroot = 398262 # ((dog, wolf), golden jackal)root + # Estimated (calibrated) divergence times in years, from Table S12 + T_ancDOG1 = 12102 / generation_time # (Boxer, Basenji) + T_ancDOG = 12795 / generation_time # ((Boxer, Basenji), Dingo) + T_ancWLF1 = 13389 / generation_time # (Israeli, Croatian) wolf + T_ancWLF = 13455 / generation_time # ((Israeli, Croatian), Chinese) wolf + T_ancDW = 14874 / generation_time # (dog, wolf) + T_ancroot = 398262 / generation_time # ((dog, wolf), golden jackal)root # Migration rates, from Table S12 # migration is constant continuous geneflow from the start and end times of # the two populations that define it. See section S9.2.3 in S9. - m_ISW_BSJ = 0.18 - m_BSJ_ISW = 0.07 - m_CHW_DNG = 0.03 - m_DNG_CHW = 0.04 - m_GLJ_ISW = 0 - m_ISW_GLJ = 0.05 - m_GLJ_ancDW = 0.02 - m_ancDW_GLJ = 0.99 + m_ISW_BSJ = 0.18 / T_ancDOG1 + m_BSJ_ISW = 0.07 / T_ancDOG1 + m_CHW_DNG = 0.03 / T_ancDOG + m_DNG_CHW = 0.04 / T_ancDOG + m_GLJ_ISW = 0 / T_ancWLF1 + m_ISW_GLJ = 0.05 / T_ancWLF1 + m_GLJ_ancDW = 0.02 / (T_ancroot - T_ancDW) + m_ancDW_GLJ = 0.99 / (T_ancroot - T_ancDW) model = msprime.Demography() model.add_population( From 75dc7fb1fbb2c3ce8c296d3fa01749d85b8f046f Mon Sep 17 00:00:00 2001 From: David-Peede Date: Wed, 25 Feb 2026 11:28:54 -0500 Subject: [PATCH 2/5] Updated the CanFam long description and added clarifying comments --- .../catalog/CanFam/demographic_models.py | 21 ++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/stdpopsim/catalog/CanFam/demographic_models.py b/stdpopsim/catalog/CanFam/demographic_models.py index a6b0edc96..4e1f94a4f 100644 --- a/stdpopsim/catalog/CanFam/demographic_models.py +++ b/stdpopsim/catalog/CanFam/demographic_models.py @@ -28,8 +28,15 @@ def _dog_wolf_admixture(): a mutation rate of 1e-8 (page 3). Estimated (calibrated) effective population sizes, divergence times, and migration rates are given in Table S12. - Migration is constant continuous geneflow from the start and - end times of the two populations that define it (section S9.2.3 in S9). + Migration is modeled as continuous gene flow between the start and end + times of the two populations that define each migration band + (Section S9.2.3 in S9). + The values reported in Table S12 are total migration rates inferred by + G-PhoCS, equal to the per-generation migration rate multiplied by the + duration of the migration band. + In the model implementation, we divide each total migration rate by the + time span of the corresponding migration band to compute the + per-generation migration rate. While Boxer reference genome was used, no Boxer-specific parameters were estimated in the model, hence Boxer was removed from this model implementation. Thence the ancestral Basenji population with its specific @@ -63,6 +70,7 @@ def _dog_wolf_admixture(): N_root = 18169 # ((dog, wolf), golden jackal)root # Estimated (calibrated) divergence times in years, from Table S12 + # so divide by the generation time to convert to generations T_ancDOG1 = 12102 / generation_time # (Boxer, Basenji) T_ancDOG = 12795 / generation_time # ((Boxer, Basenji), Dingo) T_ancWLF1 = 13389 / generation_time # (Israeli, Croatian) wolf @@ -70,9 +78,12 @@ def _dog_wolf_admixture(): T_ancDW = 14874 / generation_time # (dog, wolf) T_ancroot = 398262 / generation_time # ((dog, wolf), golden jackal)root - # Migration rates, from Table S12 - # migration is constant continuous geneflow from the start and end times of - # the two populations that define it. See section S9.2.3 in S9. + # Total migration rates, from Table S12 + # migration is constant continuous gene flow from the start and end times of + # the two populations that define it, see section S9.2.3 in S9, where + # total migration rate = per-gen migration rate * duration of migration band + # so, total migration rate / duration of migration band, equals the + # per-gen migration rate m_ISW_BSJ = 0.18 / T_ancDOG1 m_BSJ_ISW = 0.07 / T_ancDOG1 m_CHW_DNG = 0.03 / T_ancDOG From b7ced502e2075a86eac73e5b48e717420df379f1 Mon Sep 17 00:00:00 2001 From: David Peede <56041628+David-Peede@users.noreply.github.com> Date: Wed, 25 Feb 2026 13:09:59 -0500 Subject: [PATCH 3/5] Update stdpopsim/catalog/CanFam/demographic_models.py Co-authored-by: Peter Ralph --- stdpopsim/catalog/CanFam/demographic_models.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stdpopsim/catalog/CanFam/demographic_models.py b/stdpopsim/catalog/CanFam/demographic_models.py index 4e1f94a4f..e96476257 100644 --- a/stdpopsim/catalog/CanFam/demographic_models.py +++ b/stdpopsim/catalog/CanFam/demographic_models.py @@ -28,7 +28,7 @@ def _dog_wolf_admixture(): a mutation rate of 1e-8 (page 3). Estimated (calibrated) effective population sizes, divergence times, and migration rates are given in Table S12. - Migration is modeled as continuous gene flow between the start and end + Migration is continuous gene flow between the start and end times of the two populations that define each migration band (Section S9.2.3 in S9). The values reported in Table S12 are total migration rates inferred by From 3f4dc50d6996b7085f8cfd02676effe27812dbdb Mon Sep 17 00:00:00 2001 From: David Peede <56041628+David-Peede@users.noreply.github.com> Date: Wed, 25 Feb 2026 13:10:23 -0500 Subject: [PATCH 4/5] Update stdpopsim/catalog/CanFam/demographic_models.py Co-authored-by: Peter Ralph --- stdpopsim/catalog/CanFam/demographic_models.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/stdpopsim/catalog/CanFam/demographic_models.py b/stdpopsim/catalog/CanFam/demographic_models.py index e96476257..6ffb55171 100644 --- a/stdpopsim/catalog/CanFam/demographic_models.py +++ b/stdpopsim/catalog/CanFam/demographic_models.py @@ -29,8 +29,9 @@ def _dog_wolf_admixture(): Estimated (calibrated) effective population sizes, divergence times, and migration rates are given in Table S12. Migration is continuous gene flow between the start and end - times of the two populations that define each migration band - (Section S9.2.3 in S9). + times of the two populations that define each migration band, + and are reported as reverse-time migration rates + (in the sense of msprime's migration rates; Section S9.2.3 in S9). The values reported in Table S12 are total migration rates inferred by G-PhoCS, equal to the per-generation migration rate multiplied by the duration of the migration band. From 8a504b9f88e42d7accf2dc52af9d18fed911175f Mon Sep 17 00:00:00 2001 From: David Peede <56041628+David-Peede@users.noreply.github.com> Date: Wed, 25 Feb 2026 13:11:05 -0500 Subject: [PATCH 5/5] Update stdpopsim/catalog/CanFam/demographic_models.py Co-authored-by: Peter Ralph --- stdpopsim/catalog/CanFam/demographic_models.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/stdpopsim/catalog/CanFam/demographic_models.py b/stdpopsim/catalog/CanFam/demographic_models.py index 6ffb55171..3ade38d6a 100644 --- a/stdpopsim/catalog/CanFam/demographic_models.py +++ b/stdpopsim/catalog/CanFam/demographic_models.py @@ -35,10 +35,7 @@ def _dog_wolf_admixture(): The values reported in Table S12 are total migration rates inferred by G-PhoCS, equal to the per-generation migration rate multiplied by the duration of the migration band. - In the model implementation, we divide each total migration rate by the - time span of the corresponding migration band to compute the - per-generation migration rate. - While Boxer reference genome was used, no Boxer-specific parameters + While Boxer reference genome was used, no Boxer-specific parameters were estimated in the model, hence Boxer was removed from this model implementation. Thence the ancestral Basenji population with its specific Ne is for the Ancestral (Boxer, Basenji) population.