Furlan et al. A Framework for Estimating eDNA Sensitivity

Supporting Information

Appendix S1. Marker development and eDNA laboratory methods

Marker development for eDNA detection

DNA was extracted from tissue samples of the Oriental weatherloach (Misgurnus anguillicaudatus) using the Isolate II Genomic DNA Kit (Bioline Australia), and a region of the 12S rRNA gene approximately 390 bp in length was PCR amplified between vertebrate universal PCR primers MT 1091L (5’-CAAACTGGGATTAGATACCCCACTAT-3’) and MT 1478H (5’-TGACTGCAGAGGGTGACGGGCGGTGTGT-3’) (Fuller et al. 1998). PCR of DNA from tissue samples was performed in an EppendorfMastercycler (Eppendorf, Hamburg, Germany) using 2.5 µL of DNA, 1X PCR buffer (5-Prime), 2.0mMdNTP, 0.5 units Taq polymerase (5-Prime), 0.4 µM forward primer and 0.4 µM reverse primer (total volume 25 µL). PCR cycling conditions consisted of an initial denaturation step at 94˚C (2 min) followed by 40 cycles of 94˚C (30 s), primer annealing at 55˚C (1 min) and extension at 72˚C (30 s), with a final extension at 72˚C (10 min). PCR products were sent to Macrogen Inc. (Seoul, Korea) for forward and reverse sequencing on an AB 3730xl DNA Analyzer using primers MT 1091L and MT 1478H.

Sequence reads obtained from M. anguillicaudatus tissue samples were imported into BioEdit(Hall 1999) and compared to all available 12S rRNA sequences of M. anguillicaudatusavailable on NCBI’sGenBank, all fish species from the Murray-Darling River Basin (an area encompassing >1 million km2 of southeastern Australia including all of the Australian Capital Territory; Hardy et al. 2011) and any additional closely related species that could potentially co-occur in Australia. Sequences were aligned using the clustal w algorithm. Species-specific qPCR primers and probes were designed to maximise the number of base pair mismatches between the target species and all other species that could potentially co-occur in Australia.Secondary structure was checked on Beacon DesignerTM (PremierBiosoft) and found to have ΔG within the tolerable range for all dimers. The primer/probe assaywas further tested for specificity by pairwise alignment against the nucleotide collection database on BLASTn(Altschul et al. 1990).

Estimating marker specificity, efficiency and LOD

Real-time PCRs (qPCRs) were performed to test the specificity of the primer/probe assay. qPCRs were carried out on known tissue samples (Table S2) in 20 µl reactions consisting of 10 µl TaqMan® Environmental Master Mix 2.0 (Applied Biosystems®), 1X qPCR marker assay mix, 1X TaqMan® Exogenous Internal Positive Control (IPC) Mix (Applied Biosystems®), 1X IPC DNA, 2 µl of DNA and made up to 20 µl with DNase/RNase free water (Bioline, MA USA). Thermal cycling was conducted on a ViiaTM 7 Real-Time PCR System (Applied Biosystems®, Vic., Australia) with cycling conditions set at 50°C (2min), 95°C (10 min), followed by 55 cycles of 95°C (15 s), 60°C (30 s).

Synthetic oligonucleotides of the target sequence were designed with a modification to include a single Uracil residue mid-sequence (Table S1), allowing the oligonucleotide to be inactivated by Uracil-DNA Glycosylase to prevent carry-over contamination. Oligonucleotides were diluted by a factor of 10 into solutions containing between 1,000,000 and 0.01 single-stranded copies/µL. PCR replicates were performed using 2µL of each template to obtain concentrations corresponding to double-stranded DNA. Calibration curves were generated from eleven replicate PCRs of known oligonucleotide concentrations between 1,000,000 and 100 copies/µL. Oligonucleotides were further diluted to 50, 40, 30, 20, 10 and 1 copies/µL to test the LOD of the assay. Synthetic oligonucleotides were amplified using qPCR in 20 µl reactions as detailed above.

Environmental DNA laboratory methods

Water samples were filtered in the laboratory through 1.2 µm pores on 47 mm glass fiber filters (MS® GC 50, MicroScience) using a magnetic filter funnel (Pall Australia Pty Ltd) and Geopump Series II peristaltic pump (Geotech, Colorado, USA). The filter paper was rolled using sterile forceps, placed in a 5 mL tube and stored at -20°C. Between samples, magnetic filter funnels and forceps were sterilised in 10% bleach solution and thoroughly rinsed in UV-sterilised water.

To confirm amplification of the target species, forty-five percent of all positively amplified PCR products were purified using the MinElute PCR Purification Kit (Qiagen Pty Ltd, Vic., Australia) and sequenced on an AB 3730xl DNA Analyzer (at the ACRFBiomolecular Resource Facility, The John Curtin School of Medical Research, Australian National University).

References

Altschul SF, Gish W, Miller W, Myers EW, Lipman DJ (1990) Basic local alignment search tool. Journal of Molecular Biology215, 403-410.

Fuller S, Baverstock P, King D (1998) Biogeographic origins of goannas (Varanidae): a molecular perspective. Molecular Phylogenetics and Evolution9, 294-307.

Hall TA (1999) BioEdit: a user-friendly biological sequence alignment editor and analysis, Department of Microbiology. North Carolina State University.

Hardy CM, Adams M, Jerry DR, et al. (2011) DNA barcoding to support conservation: species identification, genetic structure and biogeography of fishes in the Murray-Darling River Basin, Australia. Marine and Freshwater Research62, 887-901.

Furlan et al. A Framework for Estimating eDNA Sensitivity

Appendix S2. Data and R code for drawing Figures 2-6

library(R2jags)

load.module("glm")

library(mcmcplots)

library(dplyr)

library(ggplot2)

library(reshape2)

library(grid)

################################################################################

# Run the dilution assay model to get a value for phi

# Dilution assay data:

# expected number of molecules in dilution assay

n_mol <- c(1000000, 100000, 10000, 1000, 100, 10, 1, 0.1, 0.01)

# number of PCR reps run per dilution assay

n_pcr_reps <- c(5, 6, 11, 11, 11, 11, 11, 11, 11)

# number of positive amplifications from the PCR reps

n_pos <- c(5, 6, 11, 11, 11, 7, 3, 0, 0)

N <- length(n_mol)

# put into a dataframe for use in ggplot

dd <- data.frame(n_mol = n_mol, n_pcr_reps = n_pcr_reps, n_pos = n_pos)

dd$av_prob <- dd$n_pos / dd$n_pcr_reps

dd

################################################################################

# Assay dilution JAGS model

mod.assay <- "model

{

for(i in 1:N) {

n_pos[i] ~ dbin(mu[i], n_pcr_reps[i])

mu[i] <- 1 - (1 - p[i]) ^ n[i]

n[i] ~ dpois(n_mol[i])

logit(p[i]) <- lp

}

lp ~ dnorm(0, 0.00001)

logit(p_out) <- lp

}"

################################################################################

# Run the model

write(mod.assay, "model.txt")

out.assay <- jags(model = "model.txt",

data = list(N=N, n_mol = n_mol, n_pos = n_pos,

n_pcr_reps = n_pcr_reps),

inits = function() list(lp = rnorm(1)),

param = c("lp", "p_out"),

n.chains = 3,

n.iter =20000,

n.burnin = 10000)

################################################################################

# Print and plot results

all.sum <- out.assay$BUGSoutput$summary

all.sum[, c(1,2,3,7,8)]

# extract value for p and its standard deviation

p.mean <- all.sum[3, 1]

p.se <- all.sum[3, 2]

# extract value for logit p and its standard deviation

logit.p.mean <- all.sum[2, 1]

logit.p.se <- all.sum[2, 2]

# data to draw curve

lxx <- seq(round(log(min(dd$n_mol))) , round(log(max(dd$n_mol))), 0.1)

xx <- exp(lxx)

crve <- data.frame(y = (1 - (1 - p.mean) ^ xx), x = xx)

# Draw Figure 1

p1 <- ggplot(dd, aes(y = av_prob, x = n_mol)) +

geom_point(size = 5) +

scale_x_log10() +

xlab("\nExpected number of molecules in PCR replicate") +

ylab("Proportion of successful amplifications\n") +

geom_line(data = crve, aes(y = y, x = x), lwd = 1) +

theme_classic(18)

## inset the posterior distribution of p

p.out <- data.frame(p.post = out.assay$BUGSoutput$sims.matrix[, 3])

vp <- viewport(width = 0.4, height = 0.4, x = 0.75, y = 0.4)

p2 <- ggplot(p.out, aes(x = p.post)) +

# geom_histogram(aes(y = ..density..), binwidth = 0.01, fill = "grey") +

geom_density(fill = "grey") +

xlab(expression(italic(phi))) + ylab("Density") +

theme_classic(14)

print(p1)

print(p2, vp = vp)

################################################################################

################################################################################

# Survey data

y <- c(0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,

0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1,

1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0,

0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,

0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,

1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0,

0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,

0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,

1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0,

0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,

0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,

1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0,

0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,

0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,

1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0,

0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,

0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,

1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0)

y <- matrix(y, ncol = 6)

creek_name <- rep(rep(c("Ginninderra", "Tuggeranong", "Queanbeyan"),

each = 12), 2)

season_name <- rep(c("autumn", "spring"), each = 36)

# put in a data frame for use in ggplot

dat <- data.frame(creek = creek_name, sample = rep(1:12, 6),

season = season_name, y = y)

names(dat)[4:9] <- paste("pcr_rep_", 1:6, sep = "")

dat

creek <- as.numeric(factor(creek_name))

season <- as.numeric(factor(season_name))

N_creek <- max(creek)

N_season <- max(season)

N_samples <- nrow(y)

N_pcr_reps <- ncol(y)

sample_vol <- 2

pcr_dilution <- 0.02

## data for calculating sensitivity at different concentrations

log_conc <- seq(-3, 3, 0.01)

conc <- 10^(log_conc)

N_conc <- length(conc)

################################################################################

## Concentration JAGS model

mod <- "model {

# y is binary taking values 1 (the jkth PCR replicate amplified)

# or 0 (the jkth PCR replicate failed to amplify)

# loop through the samples & PCR reps

for(j in 1:N_samples) {

n_mol_sample[j] ~ dnegbin(prob_nb[j], r)

prob_nb[j] <- r / (r + mu[j])

mu[j] <- concentration[creek[j], season[j]] * sample_vol

for(k in 1:N_pcr_reps) {

n_mol_pcr[j, k] ~ dpois(n_mol_sample[j] * pcr_dilution)

y[j, k] ~ dbern(1 - (1 - p[j, k]) ^ n_mol_pcr[j, k])

logit(p[j, k]) <- lp

}

}

# prior probability of p from the assay dilution - on logit scale

p.prec <- 1 / logit.p.se^2

lp ~ dnorm(logit.p.mean, p.prec)

logit(p_out) <- lp

# wide uniform prior for r, the negative binomial dispersion parameter

r ~ dunif(0, 500)

# independent non-informative priors for each creek by season

for(i in 1:N_creek) {

for(j in 1:N_season) {

log(concentration[i, j]) <- lc[i, j]

lc[i, j] ~ dnorm(mean.c, tau.c)

}

}

mean.c ~ dnorm(0, 0.00001)

tau.c <- sigma.c ^ -2

sigma.c ~ dunif(0, 100)

# calculate sensitivity at different concentrations given 12 samples per site

# and 6 PCR replicates per sample

for(i in 1:N_conc) {

theta[i] <- 1 - (r / (r + conc[i] * sample_vol)) ^ r

eta[i] <- 1 - (r / (r + conc[i] * sample_vol * pcr_dilution * p_out)) ^ r

sens[i] <- 1 - ((1 - theta[i]) + theta[i] * (1 - eta[i]) ^ 6) ^ 12

}

}"

################################################################################

write(mod, "model.txt")

# Run the model in JAGS with three chains

mod1 <- jags(model = "model.txt",

data = list(y = y, season = season, creek = creek,

N_samples = N_samples, N_pcr_reps = N_pcr_reps,

N_season = N_season, N_creek = N_creek,

logit.p.mean = logit.p.mean, logit.p.se = logit.p.se,

pcr_dilution = pcr_dilution, sample_vol = sample_vol,

N_conc = N_conc, conc = conc),

inits = function() list(n_mol_pcr = y),

param = c("concentration", "p_out", "r", "sens", "theta", "eta",

"mean.c", "sigma.c"),

n.chains = 3,

n.iter =20000,

n.burnin = 10000)

################################################################################

# Print and plot results

out <- as.mcmc(mod1)

mcmcplot(out, parms=c("concentration", "p_out", "r"))

mod1.sum <- mod1$BUGSoutput$summary

# function to extract variables from model summary

ext <- function(x, mod) {

a <- mod[substr(rownames(mod),1,nchar(x))==x, , drop=F]

return(data.frame(mean=a[ , 5], lcl=a[ , 3], ucl=a[ , 7], lcl50=a[ , 4],

ucl50=a[ , 6]))

}

# extract estimated concentration for each stream by season

conc1 <- data.frame(ext("concentration", mod1.sum))

conc1$creek <- rep(levels(dat$creek), 2)

conc1$season <- rep(levels(dat$season), each = 3)

conc1$parm <- "concentration"

conc1

# define breaks for plotting

brk = 10**(-10:10)

# Draw Figure 2

ggplot(conc1, aes(y = mean, x = creek)) +

geom_point(size = 4) +

facet_wrap(~ season) +

geom_errorbar(aes(ymin = lcl, ymax = ucl), width = 0) +

geom_errorbar(aes(ymin = lcl50, ymax = ucl50), lwd=2, width = 0) +

scale_y_log10(breaks = brk, labels = brk) +

ylab("\nConcentration (molecules / litre)") + xlab(" ") +

theme_bw(18) +

theme(axis.text.x = element_text(angle = 45, hjust = 1)) +

theme(panel.grid.major.x = element_blank(),

panel.grid.minor.x = element_blank())

################################################################################

### Sensitivity

# extract sensitivity results from summary

sens.out <- as.data.frame(ext("sens", mod1.sum))

sens.out$conc <- conc

sens.mean <- sens.out$conc[which(sens.out$mean >= 0.95)[1]]

sens.ucl <- sens.out$conc[which(sens.out$lcl >= 0.95)[1]]

sens.lcl <- sens.out$conc[which(sens.out$ucl >= 0.95)[1]]

# Draw Figure 3

ggplot(sens.out, aes(y = mean, x = conc)) +

geom_line(lwd = 1.2) +

geom_hline(yintercept = 0.95, lty=2, size = 1) +

geom_segment(aes(y = 0.95, yend = 0, x = sens.mean, xend = sens.mean),

lwd = 1) +

xlab("\nConcentration (molecules / litre)") +

ylab("Probability of detection\n") +

coord_cartesian(xlim = c(0, 15)) +

theme_bw(18) +

theme(panel.border = element_blank()) +

theme(axis.line = element_line(color = 'black', size = 1)) +

theme(panel.grid.major.x = element_blank(),

panel.grid.minor.x = element_blank())

################################################################################

## At what concentration do you get 95% sensitivity for different Ns and Na?

# extract data from summary for theta, eta and r

theta <- ext("theta", mod1.sum)[, 1]

eta <- ext("eta", mod1.sum)[, 1]

r <- ext("r", mod1.sum)[, 1]

# construct a matrix representing different values of Na and Ns

# and calculate sensitivity for each combination of these using theta and eta

sens.mat <- array(dim = c(length(conc), 25, 10))

for(Na in 1:10) {

for(Ns in 1:25) {

sens.mat[, Ns, Na] <- 1 - ((1 - theta) + theta * (1 - eta) ^ Na) ^ Ns

}

}

## for each Ns and Na what is the concentration at which sensitiviey = 0.95?

sens.all <- matrix(nrow = 25, ncol = 10)

for(i in 1:10) {

sens.all[, i] <- apply(sens.mat[, , i], 2,

function(x) conc[which(x >= 0.95)[1]])

}

# put into a dataframe for plotting and convert from wide to long format

sens.all <- data.frame(sens.all)

names(sens.all) <- paste("a", 1:10, sep="")

sens.all$n_samp <- 1:25

sens.all <- melt(sens.all, id.vars = c("n_samp"))

sens.all$n_aliq <- rep(1:10, each = 25)

sens.all <- arrange(sens.all, n_samp, n_aliq)

# Draw Figure 4

ggplot(sens.all, aes(y = value, x = n_samp, group = variable)) +

geom_line(size = 1) +

scale_y_log10() +

geom_segment(aes(y = 10.4, yend = 0, x = 12, xend = 12), lty = 3, lwd = 1) +

geom_segment(aes(y = 10.4, yend = 10.4, x = 12, xend = 0),

lty = 3, lwd = 1) +

ylab("\nConcentration (molecules / litre)") +

xlab("\nNumber of samples") +

geom_text(data = NULL, y = 1.48, x = 25.5, label = "1") +

geom_text(data = NULL, y = 0.77, x = 25.5, label = "5") +

geom_text(data = NULL, y = 0.51, x = 25.5, label = "10") +

theme_bw(18) +

theme(panel.border = element_blank()) +

theme(axis.line = element_line(color = 'black', size = 1))

################################################################################

## Sensitivity in relation to r calculation

# extract mean value for p

m.p <- ext("p_out", mod1.sum)[1, 1]

# set up a matrix with different concentration and r combinations

# with r = 100000 being sufficiently large to be random (Poisson) dispersion

conc <- seq(0, 30, 0.01)

m.r <- c(0.1, 0.31, 1, 100000)

out <- matrix(nrow = length(conc), ncol = length(m.r))

# compute sensitivity for each combination

for(i in 1:length(conc)) {

for(j in 1:length(m.r)) {

m.eta <- 1 - (m.r[j] / (m.r[j] + conc[i] * sample_vol *

pcr_dilution * m.p)) ^ m.r[j]

m.theta <- 1 - (m.r[j] / (m.r[j] + conc[i] * sample_vol)) ^ m.r[j]

m.sens <- 1 - ((1 - m.theta) + m.theta * (1 - m.eta) ^ 6) ^ 12

out[i, j] <- m.sens

}

}

# put into a dataframe for plotting and convert from wide to long format

out <- data.frame(out)

names(out) <- m.r

mout <- melt(out)

mout$conc <- rep(conc, length(m.r))

# concentrations at which they achieve 95% sensitivity

sens <- group_by(mout, variable) %>%

summarise(conc = min(conc[value >= 0.95]))

# Draw Figure 5

ggplot(mout, aes(y = value, x = conc, group = variable)) +

geom_line(size = 1) +

geom_hline(yintercept = 0.95, lty=2, size = 1) +

geom_segment(data = sens, aes(y = 0.95, yend = 0, x = conc, xend = conc),

lty = 3, lwd = 1) +

xlab("\nConcentration (molecules / litre)") +

ylab("Probability of detection\n") +

geom_text(data = NULL, y = 0.3, x = 3.7, label = "0.1") +

geom_text(data = NULL, y = 0.6, x = 4.7, label = "0.31") +

geom_text(data = NULL, y = 0.75, x = 4, label = "1") +

geom_text(data = NULL, y = 0.85, x = 1.5, label = "Random") +

theme_bw(18) +

theme(panel.border = element_blank()) +

theme(axis.line = element_line(color = 'black', size = 1)) +

theme(panel.grid.major.x = element_blank(),

panel.grid.minor.x = element_blank()

Furlan et al. A Framework for Estimating eDNA Sensitivity

Table S1. Details of primers and hydrolysis probe designed to amplify a short fragment of the 12S mitochondrial DNA region forthe Oriental weatherloach, Misgurnus anguillicaudatus. The synthetic oligonucleotide generated with a modified Uracil residue (U, underlined) is also given

Target species / Label / Sequence (5'-3') / Fragment length (bp)
Misgurnus anguillicaudatus / M.ang_12S_F / GTAGCGAACGAAGTGGGAAGA
M.ang_12S_R / AAATCCTCCTTCGAGCACTAAGTTT
M.ang_12S_probe / ATGGGCTACATTTTCT
M.ang_12S_synth_oligo / GTAGCGAACGAAGTGGGAAGAAATGGGCTACATTTTCTAGTATCACAACAGGCAUCATGAACAATAATAAACTTAGTGCTCGAAGGAGGATTT / 93

Furlan et al. A Framework for Estimating eDNA Sensitivity

Table S2.Specificity of Misgurnus anguillicaudatus species-specific marker tested on tissue samples derived from species listed. Amplification success or failure is indicated

Species Tested / DNA Amplification Success / 12S rRNA Genbank Accession Number
Misgurnus anguillicaudatus – Ginninderra Ck, ACT. / Yes / KJ774847
Misgurnus anguillicaudatus – Murrumbidgee R., ACT. / Yes / FJ710961
Cyprinus carpio / No / FJ710924
Carassius carassius / No / HQ615467
Salmotrutta / No / FJ710985
Rutilusrutilus / No / FJ710983
Tincatinca / No / FJ710992
Pseudomugilmellis / No / KJ774902

Table S3. PCR amplification efficiencies for Misgurnus anguillicaudatus species-specific marker calculated from calibration curves using synthetic oligonucleotides

Target species / r2 / Slope / y-intercept / Efficiency % / LOD (copies/µL)
Misgurnus anguillicaudatus / 0.998 / -3.505 / 44.251 / 92.9 / 30

LOD: Limit of Detection

Furlan et al. A Framework for Estimating eDNA Sensitivity

Table S4. Number of environmental DNA water samples (and associated PCR replicates) producing a positive detection result for the Oriental weatherloach, Misgurnusanguillicaudatus, in autumn and spring at three field sites

Positive detection
Location / Autumn / Spring
Ginninderra Creek / 2 (1,2) / 3 (1, 1, 5)
Tuggeranong Creek / 1 (2) / 10 (6, 6, 6, 4, 1, 6, 6, 4, 6, 6)
Queanbeyan River / 3 (1,1,1) / 10 (6, 6, 6, 6, 6, 6, 6, 6, 6, 6)

Figure S1. Environmental DNA sampling site locations within the A.C.T., Australia. Black dots indicate sampling sites along waterways with known presence ofMisgurnus anguillicaudatus. GC: Ginninderra Creek, QR: Queanbeyan River, TC: Tuggeranong Creek.