Selection scans (Drosophila DGRP)
The tutorials target the JBrowse v5 beta, and the v4.3.0 release
on the download page lacks some of what they show. To install the
beta of JBrowse Web, run npm install -g @jbrowse/cli@next, then
jbrowse create jbrowse2 --branch v5.0.0-beta.13. Desktop beta builds are coming soon.
In Drosophila melanogaster, a selective sweep at the insecticide-resistance
gene Cyp6g1 (Daborn et al. 2002)
and the In(2L)t inversion on chromosome 2L each leave a mark in
population-genetic statistics: π dips at the sweep and Fst rises across the
inversion. The inversion flips a stretch of 2L end to end and suppresses
recombination between the inverted and standard arrangements in a heterozygote
(Corbett-Detig & Hartl 2012).
From a multi-sample VCF of 205 inbred lines we compute three statistics per
window:
- Fst, how far apart two groups' allele frequencies sit
- nucleotide diversity (π), how much sequences differ within a group
- Tajima's D, below zero where rare variants are in excess, as after a sweep
We load each as a quantitative track on dm6, read the Cyp6g1 sweep against the genes, then read the inversion.
Prerequisites
- a JBrowse to open them in: Desktop takes a local file by path, Web through Add track
curlnode, for the JBrowse CLI- vcftools, for the windowed statistics
- bcftools, to read the VCF header and sample list
- htslib (
bgzip,tabix), to index the VCF built in the per-sample section bedGraphToBigWig, to pack a bedGraph into a bigWig
On Debian/Ubuntu, apt install vcftools bcftools tabix curl covers everything
but node and bedGraphToBigWig, a
single static binary from UCSC.
Homebrew has the first three tools (brew install vcftools bcftools htslib),
and bioconda has all four.
Where the data comes from
The Drosophila Genetic Reference Panel (DGRP) has 205 inbred lines (Mackay et al. 2012), lifted to dm6. The build script fetches these files, so there is nothing to download by hand.
- the DGRP freeze-2 genotype calls: resources.aertslab.org/…/DGRP2.source_NCSU.dm6.final.SNPs_only.vcf.gzhttps://resources.aertslab.org/DGRP2/NCSU/final/dm6/DGRP2.source_NCSU.dm6.final.SNPs_only.vcf.gz
- the
In(2L)tinversion karyotype for each line, from DGRPool's phenotype record: dgrpool.epfl.ch/…/downloadhttps://dgrpool.epfl.ch/phenotypes/1520/download
The dm6 assembly and gene track come from the hosted UCSC hub.
Building Fst, π and Tajima's D bigWigs with vcftools
DGRPool records each line's In(2L)t arrangement
(Gardeux et al. 2023), harmonizing the
typing of Huang et al. 2015: 0 for
standard homozygotes, 2 for inverted and 1 for heterozygotes.
build_dgrp_popgen.sh
drops the heterozygotes and writes the two sample lists, one name per line, that
vcftools takes for --weir-fst-pop and --keep.
It also renames DGRPool's DGRP_021 to the VCF's DGRP-021. DGRPool types
In(3R)Payne too, so the same grouping on that phenotype scans 3R.
Each scan is a vcftools run, an awk step that turns its table into a bedGraph,
and a bedGraphToBigWig pack. Fst uses the Weir & Cockerham estimator1
(Weir & Cockerham 1984):
# chrom.sizes from the VCF header, so it uses the contig names of the scans
bcftools view -h dgrp2.vcf.gz |
awk -F'[=,>]' '/^##contig/{print $3"\t"$5}' > dm6.chrom.sizes
# window equal to step, so windows tile the genome
vcftools --gzvcf dgrp2.vcf.gz \
--weir-fst-pop In2Lt_INV.txt --weir-fst-pop In2Lt_STD.txt \
--fst-window-size 2000 --fst-window-step 2000 --out fst_In2Lt
# BIN_START is 1-based here, hence -1
# negative Fst is an estimator artifact at low-differentiation sites; floor at 0
# $5 is WEIGHTED_FST, the ratio of summed variance components
# $6, MEAN_FST, averages per-site ratios and swings on a few uninformative sites
# BIN_END is the nominal window end, so the last window of a contig passes its
# end; clamp it, or bedGraphToBigWig refuses the whole file
awk -F'\t' 'NR==FNR{len[$1]=$2; next}
FNR>1 && $5!="nan" && $5!="-nan" {
v=$5+0; if (v<0) v=0
end=$3; if (end>len[$1]) end=len[$1]
if (end>$2-1) print $1"\t"($2-1)"\t"end"\t"v
}' dm6.chrom.sizes fst_In2Lt.windowed.weir.fst |
sort -k1,1 -k2,2n > fst_In2Lt.bedgraph
bedGraphToBigWig fst_In2Lt.bedgraph dm6.chrom.sizes fst_In2Lt.bwDiversity is the same three steps with --window-pi 2000, reading $5 of
pi_all.windowed.pi, with --keep restricting it to one arrangement:
vcftools --gzvcf dgrp2.vcf.gz --window-pi 2000 --out pi_all
vcftools --gzvcf dgrp2.vcf.gz --keep In2Lt_INV.txt --window-pi 2000 --out pi_INV$4 of the same table is the called-variant count the figure below stacks under
π, packed into a bigWig by the same awk and bedGraphToBigWig pair.
Tajima's D (Tajima 1989) reports
BIN_START 0-based, so there is no -1 shift, and has no BIN_END, so the
awk builds the window end before the clamp:
vcftools --gzvcf dgrp2.vcf.gz --TajimaD 2000 --out tajimad_all
# BIN_START is already 0-based, and there is no BIN_END
# build the end here and clamp it to the contig length
awk -F'\t' 'NR==FNR{len[$1]=$2; next}
FNR>1 && $4!="nan" && $4!="-nan" {
end=$2+2000; if (end>len[$1]) end=len[$1]
if (end>$2) print $1"\t"$2"\t"end"\t"$4
}' dm6.chrom.sizes tajimad_all.Tajima.D |
sort -k1,1 -k2,2n > tajimad_all.bedgraph
bedGraphToBigWig tajimad_all.bedgraph dm6.chrom.sizes tajimad_all.bw2 kb windows resolve a single-gene sweep like Cyp6g1; widen toward 5-10 kb for genome-wide overviews.
The bigWigs take contig names from the VCF header (2L, 2R, X, FlyBase
style) while UCSC dm6 writes chr2L, and
refname aliasing maps one to the
other. A mismatch with no alias draws an empty track and raises no error.
The DGRP VCF holds variant sites only, so --window-pi counts every position
missing from the file as invariant and callable, and a window that lost sites to
filtering shows low diversity.2 Filtering also shifts the whole baseline
of Tajima's D, so read D at a locus against the genome-wide background of the
205 lines.
Loading the scans in JBrowse
We load dm6 from UCSC, whose reference names the arms chr2L. The alias file
maps them to the bare 2L the scans use:
Goes in the assemblies array of config.json. See Assemblies.
{
"name": "dm6",
"aliases": ["BDGP6"],
"sequence": {
"adapter": {
"type": "TwoBitAdapter",
"uri": "https://hgdownload.soe.ucsc.edu/goldenPath/dm6/bigZips/dm6.2bit"
}
},
"refNameAliases": {
"uri": "https://hgdownload.soe.ucsc.edu/goldenPath/dm6/bigZips/dm6.chromAlias.txt"
}
}jbrowse add-assembly https://hgdownload.soe.ucsc.edu/goldenPath/dm6/bigZips/dm6.2bit \
--name dm6 \
--alias BDGP6 \
--refNameAliases https://hgdownload.soe.ucsc.edu/goldenPath/dm6/bigZips/dm6.chromAlias.txtThe gene track is UCSC's RefSeq annotation of dm6:
Goes in the tracks array of config.json. See Tracks.
{
"type": "FeatureTrack",
"trackId": "dm6_ncbiRefSeq",
"name": "NCBI RefSeq genes",
"assemblyNames": ["dm6"],
"adapter": {
"type": "Gff3TabixAdapter",
"uri": "https://jbrowse.org/ucsc/dm6/ncbiRefSeq.gff.gz"
}
}jbrowse add-track https://jbrowse.org/ucsc/dm6/ncbiRefSeq.gff.gz \
--trackId dm6_ncbiRefSeq \
--name "NCBI RefSeq genes" \
--assemblyNames dm6In JBrowse Desktop, or in any running JBrowse Web session, open a view on this track’s assembly, then File → Open track... and, in Add a track from file or URL, enter:
- Main file:
https://jbrowse.org/ucsc/dm6/ncbiRefSeq.gff.gz
Click Next. JBrowse reads the adapter and track type off the file name. Then fill in:
- Track name:
NCBI RefSeq genes - Assembly:
dm6
Click Add.
Each scan is a quantitative track over its bigWig. To load your own, swap uri
for the bigWig your build wrote, whose contig names must match the assembly or
its aliases.
Goes in the tracks array of config.json. See Tracks.
{
"type": "QuantitativeTrack",
"trackId": "fst_in2lt",
"name": "Fst (In(2L)t vs standard, 2kb windows)",
"assemblyNames": ["dm6"],
"adapter": {
"type": "BigWigAdapter",
"uri": "https://jbrowse.org/demos/popgen/fst_In2Lt.bw"
}
}jbrowse add-track https://jbrowse.org/demos/popgen/fst_In2Lt.bw \
--trackId fst_in2lt \
--name "Fst (In(2L)t vs standard, 2kb windows)" \
--assemblyNames dm6In JBrowse Desktop, or in any running JBrowse Web session, open a view on this track’s assembly, then File → Open track... and, in Add a track from file or URL, enter:
- Main file:
https://jbrowse.org/demos/popgen/fst_In2Lt.bw
Click Next. JBrowse reads the adapter and track type off the file name. Then fill in:
- Track name:
Fst (In(2L)t vs standard, 2kb windows) - Assembly:
dm6
Click Add.
Fst and π are on different scales, so each gets a track and a y-axis. A multi-wiggle track shares one axis across rows, which suits one statistic across groups, so the per-group π bigWigs load as one track:
Goes in the tracks array of config.json. See Tracks.
{
"type": "MultiQuantitativeTrack",
"trackId": "pi_by_arrangement",
"name": "π by In(2L)t arrangement",
"assemblyNames": ["dm6"],
"adapter": {
"type": "MultiWiggleAdapter",
"subadapters": [
{
"type": "BigWigAdapter",
"source": "π In(2L)t",
"uri": "https://jbrowse.org/demos/popgen/pi_INV.bw"
},
{
"type": "BigWigAdapter",
"source": "π standard",
"uri": "https://jbrowse.org/demos/popgen/pi_STD.bw"
}
]
}
}jbrowse add-track-json '{
"type": "MultiQuantitativeTrack",
"trackId": "pi_by_arrangement",
"name": "π by In(2L)t arrangement",
"assemblyNames": ["dm6"],
"adapter": {
"type": "MultiWiggleAdapter",
"subadapters": [
{
"type": "BigWigAdapter",
"source": "π In(2L)t",
"uri": "https://jbrowse.org/demos/popgen/pi_INV.bw"
},
{
"type": "BigWigAdapter",
"source": "π standard",
"uri": "https://jbrowse.org/demos/popgen/pi_STD.bw"
}
]
}
}'In JBrowse Desktop, or in any running JBrowse Web session, open a view on this track’s assembly, then File → Open track..., choose Add track from pasted JSON, and paste:
{
"type": "MultiQuantitativeTrack",
"trackId": "pi_by_arrangement",
"name": "π by In(2L)t arrangement",
"assemblyNames": ["dm6"],
"adapter": {
"type": "MultiWiggleAdapter",
"subadapters": [
{
"type": "BigWigAdapter",
"source": "π In(2L)t",
"uri": "https://jbrowse.org/demos/popgen/pi_INV.bw"
},
{
"type": "BigWigAdapter",
"source": "π standard",
"uri": "https://jbrowse.org/demos/popgen/pi_STD.bw"
}
]
}
}Each arrangement's π swings several fold between 2 kb windows, far more than the
two arrangements differ, so two rows of it look alike. Pooling into 250 kb bins
and taking log2 of inverted over standard gives one track that sits at zero
where the arrangements have equal diversity. An awk step writes it from the
two π bedGraphs:
# B: bin width; each bin's pi is the length-weighted mean of its 2 kb windows
awk -F'\t' -v OFS='\t' -v B=250000 '
NR==FNR { len[$1]=$2; next }
FNR==1 { g++ }
{ k=$1 SUBSEP int($2/B); w=$3-$2; s[g,k]+=$4*w; n[g,k]+=w; seen[k] }
END {
for (k in seen) if (s[1,k]>0 && s[2,k]>0) {
split(k, a, SUBSEP); end=(a[2]+1)*B; if (end>len[a[1]]) end=len[a[1]]
print a[1], a[2]*B, end, log((s[1,k]/n[1,k])/(s[2,k]/n[2,k]))/log(2)
}
}' dm6.chrom.sizes pi_INV.bedgraph pi_STD.bedgraph |
sort -k1,1 -k2,2n > pi_ratio_In2Lt.bedgraph
bedGraphToBigWig pi_ratio_In2Lt.bedgraph dm6.chrom.sizes pi_ratio_In2Lt.bwIn grammar-of-graphics terms, color is a color scale: a field mapped through
a domain to a range of colors. Here a threshold scale colors each bin by
its side of zero, and scales.y pins the y scale to ±1.5:
Goes in the tracks array of config.json. See Tracks.
{
"type": "QuantitativeTrack",
"trackId": "pi_ratio_in2lt",
"name": "π, In(2L)t over standard (log2, 250 kb bins)",
"assemblyNames": ["dm6"],
"adapter": {
"type": "BigWigAdapter",
"uri": "https://jbrowse.org/demos/popgen/pi_ratio_In2Lt.bw"
},
"displayDefaults": {
"color": {
"field": "score",
"scale": "threshold",
"domain": [0],
"range": ["#e66100", "#1f78b4"],
"labels": ["inverted lower", "inverted higher"],
"title": "π, In(2L)t vs standard"
},
"scales": {
"y": { "domainMin": -1.5, "domainMax": 1.5, "title": "log2 ratio" }
}
}
}jbrowse add-track https://jbrowse.org/demos/popgen/pi_ratio_In2Lt.bw \
--trackId pi_ratio_in2lt \
--name "π, In(2L)t over standard (log2, 250 kb bins)" \
--assemblyNames dm6 \
--displayDefaults '{"color":{"field":"score","scale":"threshold","domain":[0],"range":["#e66100","#1f78b4"],"labels":["inverted lower","inverted higher"],"title":"π, In(2L)t vs standard"},"scales":{"y":{"domainMin":-1.5,"domainMax":1.5,"title":"log2 ratio"}}}'In JBrowse Desktop, or in any running JBrowse Web session, open a view on this track’s assembly, then File → Open track..., choose Add track from pasted JSON, and paste:
{
"type": "QuantitativeTrack",
"trackId": "pi_ratio_in2lt",
"name": "π, In(2L)t over standard (log2, 250 kb bins)",
"assemblyNames": ["dm6"],
"adapter": {
"type": "BigWigAdapter",
"uri": "https://jbrowse.org/demos/popgen/pi_ratio_In2Lt.bw"
},
"displayDefaults": {
"color": {
"field": "score",
"scale": "threshold",
"domain": [0],
"range": ["#e66100", "#1f78b4"],
"labels": ["inverted lower", "inverted higher"],
"title": "π, In(2L)t vs standard"
},
"scales": {
"y": { "domainMin": -1.5, "domainMax": 1.5, "title": "log2 ratio" }
}
}
}Advanced → Edit plot... in the track menu shows color and scales as text
and applies edits live.
Reading the Cyp6g1 sweep in Tajima's D and π
Search Cyp6g1 in the location box and add three QuantitativeTracks shaped
like the Fst track above, each over all 205 lines: Tajima's D, π, and the
called-variant count per window (column 4 of the table π comes from).
Goes in the tracks array of config.json. See Tracks.
{
"type": "QuantitativeTrack",
"trackId": "tajd_all",
"name": "Tajima's D (whole panel)",
"assemblyNames": ["dm6"],
"adapter": {
"type": "BigWigAdapter",
"uri": "https://jbrowse.org/demos/popgen/tajimad_all.bw"
}
}jbrowse add-track https://jbrowse.org/demos/popgen/tajimad_all.bw \
--trackId tajd_all \
--name "Tajima's D (whole panel)" \
--assemblyNames dm6In JBrowse Desktop, or in any running JBrowse Web session, open a view on this track’s assembly, then File → Open track... and, in Add a track from file or URL, enter:
- Main file:
https://jbrowse.org/demos/popgen/tajimad_all.bw
Click Next. JBrowse reads the adapter and track type off the file name. Then fill in:
- Track name:
Tajima's D (whole panel) - Assembly:
dm6
Click Add.
Open this track in JBrowse Web ↗
Open this track in JBrowse Desktop ↗ (JBrowse Desktop 5.0+)
Goes in the tracks array of config.json. See Tracks.
{
"type": "QuantitativeTrack",
"trackId": "pi_all",
"name": "π (whole panel)",
"assemblyNames": ["dm6"],
"adapter": {
"type": "BigWigAdapter",
"uri": "https://jbrowse.org/demos/popgen/pi_all.bw"
}
}jbrowse add-track https://jbrowse.org/demos/popgen/pi_all.bw \
--trackId pi_all \
--name "π (whole panel)" \
--assemblyNames dm6In JBrowse Desktop, or in any running JBrowse Web session, open a view on this track’s assembly, then File → Open track... and, in Add a track from file or URL, enter:
- Main file:
https://jbrowse.org/demos/popgen/pi_all.bw
Click Next. JBrowse reads the adapter and track type off the file name. Then fill in:
- Track name:
π (whole panel) - Assembly:
dm6
Click Add.
Open this track in JBrowse Web ↗
Open this track in JBrowse Desktop ↗ (JBrowse Desktop 5.0+)
Goes in the tracks array of config.json. See Tracks.
{
"type": "QuantitativeTrack",
"trackId": "sites_all",
"name": "Called variants per window",
"assemblyNames": ["dm6"],
"adapter": {
"type": "BigWigAdapter",
"uri": "https://jbrowse.org/demos/popgen/sites_all.bw"
}
}jbrowse add-track https://jbrowse.org/demos/popgen/sites_all.bw \
--trackId sites_all \
--name "Called variants per window" \
--assemblyNames dm6In JBrowse Desktop, or in any running JBrowse Web session, open a view on this track’s assembly, then File → Open track... and, in Add a track from file or URL, enter:
- Main file:
https://jbrowse.org/demos/popgen/sites_all.bw
Click Next. JBrowse reads the adapter and track type off the file name. Then fill in:
- Track name:
Called variants per window - Assembly:
dm6
Click Add.
Open this track in JBrowse Web ↗
Open this track in JBrowse Desktop ↗ (JBrowse Desktop 5.0+)
To band the swept window, drag across chr2R:12,130,000-12,200,000 on the
scalebar and pick Highlight region.
Called variants fall under the sweep because a duplication of Cyp6g1 segregates alongside the resistance allele (Schmidt et al. 2010), and the duplicated sequence lowers the number of sites called in the window.
The In(2L)t inversion, genome-wide and within each arrangement
Open the assembly with no location to lay the six arms out side by side, with
the In(2L)t Fst track across all of them.
The inversion itself is one <INV> record spanning the published breakpoints,
genotyped 1/1 in the inverted lines and 0/0 in the standard ones. The END
field holds the far breakpoint:
#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT DGRP-026 DGRP-032
2L 2225744 In2Lt N <INV> . PASS SVTYPE=INV;END=13154180 GT 1/1 0/0The samples TSV pairs each line with its karyotype (standard or inverted). In
grammar-of-graphics terms, facet splits the display into sections, one per
karyotype value, facet.domain orders them, and rowColor is a color scale
on each row's label bar:
Goes in the tracks array of config.json. See Tracks.
{
"type": "VariantTrack",
"trackId": "dgrp_In2Lt_sv",
"name": "In(2L)t inversion genotyped across DGRP lines",
"assemblyNames": ["dm6"],
"adapter": {
"type": "VcfTabixAdapter",
"uri": "https://jbrowse.org/demos/popgen/dgrp_In2Lt_sv.vcf.gz",
"samplesTsvLocation": {
"uri": "https://jbrowse.org/demos/popgen/dgrp_In2Lt_samples.tsv"
}
},
"displays": [
{
"type": "LinearMultiSampleVariantDisplay",
"facet": { "field": "karyotype", "domain": ["Standard", "In(2L)t"] },
"rowColor": "karyotype"
}
]
}jbrowse add-track-json '{
"type": "VariantTrack",
"trackId": "dgrp_In2Lt_sv",
"name": "In(2L)t inversion genotyped across DGRP lines",
"assemblyNames": ["dm6"],
"adapter": {
"type": "VcfTabixAdapter",
"uri": "https://jbrowse.org/demos/popgen/dgrp_In2Lt_sv.vcf.gz",
"samplesTsvLocation": {
"uri": "https://jbrowse.org/demos/popgen/dgrp_In2Lt_samples.tsv"
}
},
"displays": [
{
"type": "LinearMultiSampleVariantDisplay",
"facet": { "field": "karyotype", "domain": ["Standard", "In(2L)t"] },
"rowColor": "karyotype"
}
]
}'In JBrowse Desktop, or in any running JBrowse Web session, open a view on this track’s assembly, then File → Open track..., choose Add track from pasted JSON, and paste:
{
"type": "VariantTrack",
"trackId": "dgrp_In2Lt_sv",
"name": "In(2L)t inversion genotyped across DGRP lines",
"assemblyNames": ["dm6"],
"adapter": {
"type": "VcfTabixAdapter",
"uri": "https://jbrowse.org/demos/popgen/dgrp_In2Lt_sv.vcf.gz",
"samplesTsvLocation": {
"uri": "https://jbrowse.org/demos/popgen/dgrp_In2Lt_samples.tsv"
}
},
"displays": [
{
"type": "LinearMultiSampleVariantDisplay",
"facet": { "field": "karyotype", "domain": ["Standard", "In(2L)t"] },
"rowColor": "karyotype"
}
]
}The track above Fst in the figure marks the published extent with one inline feature:
Goes in the tracks array of config.json. See Tracks.
{
"type": "FeatureTrack",
"trackId": "in2lt_inversion",
"name": "In(2L)t inversion",
"assemblyNames": ["dm6"],
"adapter": {
"type": "FromConfigAdapter",
"features": [
{
"uniqueId": "in2lt",
"refName": "chr2L",
"start": 2225744,
"end": 13154180,
"name": "In(2L)t"
}
]
}
}jbrowse add-track-json '{
"type": "FeatureTrack",
"trackId": "in2lt_inversion",
"name": "In(2L)t inversion",
"assemblyNames": ["dm6"],
"adapter": {
"type": "FromConfigAdapter",
"features": [
{
"uniqueId": "in2lt",
"refName": "chr2L",
"start": 2225744,
"end": 13154180,
"name": "In(2L)t"
}
]
}
}'In JBrowse Desktop, or in any running JBrowse Web session, open a view on this track’s assembly, then File → Open track..., choose Add track from pasted JSON, and paste:
{
"type": "FeatureTrack",
"trackId": "in2lt_inversion",
"name": "In(2L)t inversion",
"assemblyNames": ["dm6"],
"adapter": {
"type": "FromConfigAdapter",
"features": [
{
"uniqueId": "in2lt",
"refName": "chr2L",
"start": 2225744,
"end": 13154180,
"name": "In(2L)t"
}
]
}
}Open chr2L alone, with the π ratio track under Fst:
The inverted lines have less diversity than the standard ones across the inverted region, most near the breakpoints, where the suppressed recombination is strongest. Toward the centromere past the inversion, where the arrangements recombine freely, the ratio sits at zero. Differentiation decays gradually outside the breakpoints (Corbett-Detig & Hartl).
Reproduce it end to end
build_dgrp_popgen.sh
wraps every step above and writes a ready-to-serve config:
curl -fO https://raw.githubusercontent.com/GMOD/jbrowse-components/main/scripts/build_dgrp_popgen.sh
bash build_dgrp_popgen.sh # builds ./dgrp_popgen_build/jbrowse2
npx --yes serve dgrp_popgen_build/jbrowse2 # then open the printed URLThe config opens on In(2L)t across arm 2L. The .bw and .vcf.gz files are
written next to it, to host elsewhere or
open as local track files in
JBrowse Desktop.
See also
- Tutorial: LD at a selective sweep (human)
- Tutorial: LD across an inversion (mosquitoes)
- Tutorial: A selected haplotype (Dog10K)
- User guide: Quantitative track
- User guide: Multi-sample variant display
- User guide: GWAS / Manhattan track
- Config guide: Assemblies
- Config guide: Grouping and lane order
- Docs: jbrowse-anywidget
Citations
- Bhatia et al. (2013). Estimating and interpreting FST: the impact of rare variants
- Corbett-Detig & Hartl (2012). Population genomics of inversion polymorphisms in Drosophila melanogaster
- Daborn et al. (2002). A single P450 allele associated with insecticide resistance in Drosophila
- Danecek et al. (2011). The variant call format and VCFtools
- Gardeux et al. (2023). DGRPool: A web tool leveraging harmonized Drosophila Genetic Reference Panel phenotyping data
- Huang et al. (2015). Linkage disequilibrium and inversion-typing of the Drosophila melanogaster Genome Reference Panel
- Korunes & Samuk (2021). pixy: Unbiased estimation of nucleotide diversity and divergence in the presence of missing data
- Mackay et al. (2012). The Drosophila melanogaster Genetic Reference Panel
- Schmidt et al. (2010). Copy number variation and transposable elements feature in recent, ongoing adaptation at the Cyp6g1 locus
- Tajima (1989). Statistical method for testing the neutral mutation hypothesis by DNA polymorphism
- Weir & Cockerham (1984). Estimating F-statistics for the analysis of population structure
Notes
-
The inverted and standard groups are very unequal in size, since the inverted arrangement is the rarer one. Hudson's estimator is the usual recommendation where groups differ this much (Bhatia et al. 2013); A selected haplotype (Dog10K) scans with that one. ↩
-
pixy (Korunes & Samuk 2021) takes an allSites VCF and reports π, dxy and Fst per window without that bias, and its output packs into a bigWig the same way. ↩
Feedback on this tutorial is welcome: contact us.