How to Set the Ct Threshold in qPCR Analysis
The Ct threshold should be placed in the exponential phase of amplification, above the baseline noise and below the plateau — typically where the amplification curves are parallel and log-linear. For most SYBR Green or TaqMan assays, this lands somewhere between 0.01 and 0.2 in normalized fluorescence (ΔRn), though the exact number depends on your instrument, your master mix, and your assay. The goal is simple: you want the threshold to intersect every curve at the point where fluorescence increases are proportional to the amount of template. Move it too low and you're reading noise. Move it too high and you're in the plateau where amplification efficiency has collapsed.
Most instruments — QuantStudio, CFX96, LightCycler 480 — set an auto-threshold by default, and honestly, it's fine about 80% of the time. The other 20% is where experiments go sideways. Auto-threshold algorithms differ between platforms and software versions, they can be thrown off by noisy baselines or aberrant wells, and they don't always place the line consistently across plates. If you're comparing Ct values between runs, between instruments, or between labs, you need to understand what the threshold is doing and when to override it.
What the threshold is actually measuring
The Ct (or Cq — "quantification cycle" per MIQE guidelines, Bustin et al. 2009) is the fractional cycle number at which a sample's fluorescence crosses the threshold line. It's an interpolated value: your instrument fits the amplification curve and calculates where it intersects the horizontal line you've set.
This works because during the exponential phase, fluorescence doubles (approximately) every cycle. A sample with twice as much starting template reaches any given fluorescence level one cycle earlier. That proportional relationship — one Ct difference ≈ twofold difference in template — only holds when the threshold sits squarely in the exponential region. In the baseline region, fluorescence is dominated by background and instrument noise. In the plateau, reagents are depleted, product re-annealing competes with primer annealing, and the relationship between fluorescence and template amount breaks down.
The practical consequence: if your threshold is in the right place, technical replicates will have a standard deviation of < 0.3 Ct (ideally < 0.2 Ct), and your standard curve R² will be > 0.98 with an efficiency between 90–110%. If moving the threshold slightly up or down dramatically changes your Ct values or blows up your replicate SD, that's a sign the threshold is sitting at the edge of the exponential phase — or your data has deeper problems.
How to set it manually
Here's the process I use, and it's the same approach recommended in Applied Biosystems' technical notes and Bio-Rad's CFX Maestro documentation:
Look at the amplification plot in log scale. Switch your Y-axis to log(ΔRn) or log(RFU). In this view, the exponential phase appears as a straight line with a steep positive slope. The baseline is the flat, noisy region at the bottom. The plateau curves over at the top.
Identify the log-linear region. This is the stretch — usually spanning 4–8 cycles — where all your amplification curves are roughly parallel. If you're running a standard curve, the curves should be evenly spaced (about 3.32 cycles apart for tenfold dilutions at 100% efficiency).
Place the threshold in the middle third of that log-linear region. Not at the very bottom where it grazes the baseline noise. Not near the top where curves start to bend toward plateau. Right in the middle where the curves are steepest and most parallel.
Apply the same threshold to all targets that share a detector/dye channel within a run. Don't set different thresholds for different samples using the same assay. If your reference gene (GAPDH) and your gene of interest (IL6) use separate detectors (e.g., FAM and VIC in a multiplex), they get independent thresholds. But all FAM-labeled assays in the same well or plate should share one threshold.
Keep the threshold consistent across runs if you're comparing data. This is the big one. If you ran Plate 1 on Monday and Plate 2 on Wednesday, using different auto-thresholds will introduce systematic error. Pick a threshold value and lock it in for the duration of your experiment.
For a typical PowerUp SYBR Green assay on a QuantStudio 3 or 5, I usually end up with a threshold around 0.1–0.2 ΔRn. For TaqMan assays, it's often lower — 0.02–0.05 — because probe-based fluorescence tends to have a cleaner baseline. On a CFX96, the raw RFU values are on a different scale entirely, so don't try to transfer a numeric threshold between instrument platforms; set it visually using the log-linear criterion.
When auto-threshold fails
The auto-threshold algorithms are proprietary and vary by platform, but most of them calculate some multiple of the baseline noise standard deviation (commonly 10× the SD of baseline fluorescence across cycles 3–15). This works well when:
- All wells have similar baseline fluorescence
- No wells have early amplification artifacts or fluorescence spikes
- The NTC wells are truly flat
It falls apart in predictable scenarios:
High-Ct targets with low-Ct reference genes on the same plate. If your GAPDH comes in at Ct 15 and your target gene at Ct 32, the auto-threshold might get pulled toward optimizing for the bright, early-amplifying curves. The threshold could land above the exponential region of your dim, late-amplifying target. Check this by looking at the late-amplifying curves specifically — are they clearly in their exponential phase where they cross the threshold?
NTC contamination or primer-dimer. If your NTC has a SYBR signal at Ct 36–38 (common with primer-dimer), some auto-threshold algorithms will try to accommodate that curve, shifting the threshold in ways that affect your real samples. The melt curve will tell you whether the NTC signal is genuine amplification or primer-dimer, but the auto-threshold doesn't check melt curves — it just sees fluorescence.
Noisy baselines from degraded passive reference. On instruments that use ROX as a passive reference (QuantStudio series), degraded ROX or inconsistent ROX concentrations across wells produce noisy ΔRn baselines. The auto-threshold might set itself higher to clear that noise, pushing you out of the exponential phase for low-abundance targets.
Plate-to-plate variability. Run the same samples on two plates and the auto-threshold may pick different values for each, introducing a systematic offset in your Ct values. I've seen 0.3–0.5 Ct shifts between plates from auto-threshold drift alone. That's not huge, but for a 1.5-fold change you're trying to detect, it'll bury your signal.
Common mistakes
Setting the threshold too low. This is the most frequent error I see. On a linear-scale amplification plot, it's tempting to place the threshold just above the flat baseline — it looks clean, it's unambiguous. But on a log plot, you'll see that this region is still noisy. Ct values here will have poor replicate precision (SD > 0.5 Ct) and won't correlate well with template amount.
Setting different thresholds for different biological groups. I've seen people set one threshold for their control samples and another for treated samples "because the curves looked different." This is circular and will bias your ΔΔCt calculation. One threshold per assay, applied to all samples.
Obsessing over the threshold number instead of the data quality. If your amplification curves are messy, your replicates are scattered, or your efficiency is 78%, no amount of threshold adjustment will fix the underlying assay problem. The threshold is a readout tool, not a correction tool. Fix the assay first — optimize primer concentration (try 200, 300, and 400 nM), check your template quality (260/280 > 1.8, 260/230 > 1.5), and verify your primer specificity with a melt curve or gel.
A worked example
Suppose you're running a ΔΔCt experiment with HPRT1 as your reference gene and CXCL10 as your target, using Luna Universal qPCR Master Mix on a CFX96. You have 6 biological replicates per group (control vs. treated), run in technical duplicate.
After the run, you switch to log view. HPRT1 curves are log-linear from cycles 14–22, and CXCL10 curves from cycles 22–30. You set the HPRT1 threshold at the midpoint of its log-linear region — let's say 1,000 RFU on this particular run — and the CXCL10 threshold at 500 RFU, which is the midpoint of its exponential phase.
You check: technical replicate SD is 0.08–0.15 Ct for HPRT1 and 0.10–0.25 Ct for CXCL10. Good. You verify with a standard curve from a previous validation run that both assays have efficiencies of 95–105% at these thresholds. You apply the same thresholds to your second plate (run the next day with the same reagents and protocol). Now your Ct values are directly comparable, and you can calculate ΔCt = Ct(CXCL10) − Ct(HPRT1) with confidence that the threshold isn't introducing systematic error.
If you'd let the auto-threshold run independently on each plate, Plate 1 might have used 800 RFU and Plate 2 might have used 1,200 RFU for HPRT1. That could shift every HPRT1 Ct by 0.2–0.4 cycles between plates, and that error propagates directly into your ΔCt and then your ΔΔCt. For a gene with a true fold change of 2.0, a 0.3 Ct shift in the reference gene could make it look like 1.5 or 2.6 — enough to change your interpretation.
Let the software handle consistency
The threshold is one of those things that's easy to get right once you understand the principle, but tedious to manage across dozens of plates and multiple targets. If you're analyzing multi-plate experiments, VoilaPCR applies consistent thresholding logic across your dataset automatically and flags wells where the Ct falls outside the log-linear region — so you catch the edge cases without eyeballing every amplification plot.
Whatever tool you use, the core rule doesn't change: exponential phase, log-linear region, consistent across plates. Get that right and the threshold stops being a source of variability in your data.