seedbank.slim model overview

Population parameters

  • L: maximum seed age
  • b: baseline germination rate
  • m: age-dependence germination parameter, controlling how quickly germination rates decline with seed age
  • d: baseline survival rate
  • q: age-dependence survival parameter, controlling how quickly survival rates decline with seed age
  • K: carrying capacity of plants
  • BASELINE_OVULE_AVG: average effective ovule count per female
  • BASELINE_EFFECTIVE_POLLEN_AVG: average effective pollen count per male at wild-type equilibrium

Drive parameters

  • CAIN: if T, CAIN is simulated. If F, ClvR is simulated.
  • MALE_FERTILITY_SUPPRESSION_DRIVE: if T, males with 2 drive alleles are sterile.
    • Set T for CAIN male suppression or ClvR male suppression. Otherwise, set F.
  • FEMALE_FERTILITY_SUPPRESSION_DRIVE: if T, females with 2 drive alleles are sterile.
    • Set T for ClvR female suppression. Otherwise, set F.
  • s_g: drive fitness cost reducing gamete viability (probability that a drive-carrying gamete is nonviable)
  • s_s: drive fitness cost reducing seed survival (baseline survival rate is d - s_s/2 for drive heterozygous seeds and d-s_s for drive homozygous seeds)
  • GERMLINE_CLEAVAGE_RATE_FEMALE: probability that an undisrupted target gene is cleaved in the germline of a drive-carrying female
  • GERMLINE_CLEAVAGE_RATE_MALE: probability that an undisrupted target gene is cleaved in the germline of a drive-carrying male
  • CAIN_PENETRANCE_RATE: if CAIN=T, this is the probability that a male gamete with no functional copies of the target gene is not viable (always set to 96%)
  • `CLVR_PENETRANCE_RATE``: if CAIN=F, this is the probability that a male or female gamete with no functional copies of the target gene (and no maternal carryover if female) is nonviable (always set to 100%)
  • INTRODUCTION_FREQUENCY: the starting frequency of the drive in plants.
  • DROP_GEN: the time at which the drive is released (set to 2L by default)
  • HETERZYGOUS_DROP: if T, drive heterozygous plants are released. If F, drive homozygous plants are released.

Optional output setting

  • TRACK_FREQUENCIES: if this is set to T, a csv file is created in the same directory as the SLiM file, containing allele and genotype frequencies in the plant population, the drive allele frequency in the seedbank population, and the number of plants, effective pollen grains, effective ovules, and seeds at each timestep after the drive was released.

Order of events:

1 first(): population set-up at year 1.

  • We create a population p1 of K plants, a population p2 starting with 0 seeds, and proxy populations of males (p3) and females (p4) with each of the 6 possible gametic genotypes for future usage in the reproduction callback.

  • Instead of using mutation objects in SLiM, we speed up the model by storing each individual’s alleles with tag values. For each individual, we track:

    • Their allele at the drive locus (either 1 for wild-type or 2 for drive)
      • drive_chrom_g1: maternal drive locus allele
      • drive_chrom_g2: paternal drive locus allele
    • Their allele at the target locus (either 7 for undisrupted, 8 for disrupted, or 9 for functionally resistant (r1))
      • target_chrom_g1: maternal target locus allele
      • target_chrom_g2: paternal target locus allele
    • Each individual also gets a tag integer value equal to their number of drive alleles (0, 1, or 2)

reproduction(p1): pollination, drive processes, and seed production

  • We start by discarding any sterile males or females, as they are assumed to produce no effective gametes.
  • We then determine the avg_effective_pollen_count (n_p(t)) that year, based on how close the current number of fertile females is to K/2
  • For each fertile male plant, we:
    • Draw his effective pollen count from the Poisson(avg_effective_pollen_count)
    • Determine which drive locus alleles and target locus alleles each effective pollen grain randomly inherited.
    • Use Binomial sampling to determine whether undisrupted target alleles were cleaved in the germline (if the male had a drive allele)
    • Use Binomial sampling to determine which gametes became nonviable due to the drive mechanism or potential drive fitness cost reducing gamete viability (s_g)
    • Store all of his viable effective pollen in a big vector, surviving_male_gametes
  • We then shuffle the surviving_male_gametes vector to simulate randomly mixed pollen in the population. We draw from the Multinomial distribution to determine how much effective pollen each fertile female receives. We discard any fertile females who didn’t receive pollen.
  • For each remaining fertile female, we:
    • Draw her effective ovule count from the Poisson(BASELINE_OVULE_AVG)
    • Determine which drive locus alleles and target locus alleles each effective ovule randomly inherited.
    • Use Binomial sampling to determine whether undisrupted target alleles were cleaved in the germline (if the female had a drive allele)
    • Use Binomial sampling to determine which gametes became nonviable due to the drive mechanism or potential drive fitness cost reducing gamete viability (s_g)
    • Retrieve her effective pollen pool.
      • If her effective pollen pool count is greater than or equal to her effective ovule count, each effective ovule is fertilized using a random effective pollen.
      • If not, each effective pollen grain randomly samples one of her effective ovules to fertilize.
      • A fertilized ovule becomes a seed and is added to the seedbank (p2). We use the proxy female (from p4) with the same genotype as this effective ovule to act as the “mother” and proxy male (from p3) with the same genotype as the effective pollen to act as the “father” of this cross.

modifyChild: tag assignments

  • We set each seed’s drive_chrom_g1 and target_chrom_g1 based on the genotype of their proxy mother (aka effective ovule)
  • We set each seed’s drive_chrom_g2 and target_chrom_g2 based on the genotype of their proxy father (aka effective pollen grain)
  • We also assign each seed a tag value representing their number of drive alleles.

1:early: survival

  • Plants are killed off since they have now reproduced.
  • Seeds survive at a rate of d/(a^q), where “a” represents seed age. The baseline survival rate is decreased if the drive has a fitness cost reducing seed survival (s_s) and the seed has a drive allele.

1:late: germination, seedling competition, drive release, output, and end-conditions

  • Seeds germinate at a rate of b/(a^m), where “a” represents seed age.
  • Germinated seeds are deemed “seedlings”, who must compete for resources. Seedlings survive at a rate of min(K/num_seedlings, 1). Surviving seedlings are moved into p1, becoming the plants of the next year, and all other seedlings are removed.
  • If it’s the DROP_GEN year, we convert random plants to drive heterozygotes (if HETEROZYGOUS_DROP is T) or homozygotes (if HETEROZYGOUS_DROP is F). Homozygous releases are sex-specific when MALE_FERTILITY_SUPPRESSION_DRIVE or FEMALE_FERTILITY_SUPPRESSION_DRIVE is T to avoid releasing sterile females or males. The drive starts at the INTRODUCTION_FREQUENCY
  • We also include an option to release some functionally resistant (r1) alleles, though this was not ultimately explored in our study. r1 alleles are functional target genes that cannot be cleaved by the drive. If PRESEED_R1_ALLELES is T and the year is PRESEED_R1_GEN, we randomly convert seeds (if PRESEED_ALLELES_IN_SEEDBANK is T) or plants (if PRESEED_ALLELES_IN_SEEDBANK is F) to r1 heterozygotes, such that the r1 allele starts at a frequency of R1_INITIAL_FREQUENCY
  • For output, we print out all relevant counts and allele frequencies in the plant and seed populations.
    • Before the drive is released, output lines include (1) the current year (in relation to the drive release year), (2) the current number of plants, and (3) the current number of seeds.
    • After the drive is released, output lines include (1) the current year (in relation to the drive release year), (2) the current number of plants, (3) the current drive frequency in plants, (4) the current disrupted target gene frequency in plants, (5) the current functional resistance allele frequency in plants, (6) the current number of seeds, (7) the current drive frequency in seeds, and (8) the current functional resistance allele frequency in seeds.
  • We end the simulation if:
    • We are simulating a suppression drive and all plants and seeds have been eliminated.
    • We are simulating a modification drive and the drive has fixed in plants and seeds.
    • The drive has been lost in plants and seeds.
    • The population collapses before the drive is released (due to an insufficient number of germinated seeds).
    • 500 years have past since the DROP_GEN.

This repeats. Each tick of the model represents a year.