Home / Science / Environmental science / Ecotoxicology / Bioaccumulation factor calculatorTool #159

Bioconcentration factor (BCF) calculator: fit k1 and k2 to a fish uptake and depuration test, plus trophic magnification factor (TMF)

Work out a kinetic bioconcentration factor from a fish test: fit the uptake rate k1 and depuration rate k2 to your time course and get BCF = k1/k2 with a confidence interval, half-life, time to steady state, steady-state BCF, growth correction and lipid normalisation. Or get the trophic magnification factor of a food web from trophic levels and concentrations.

Keep it one tap away for everyday use.

Bookmark Bioaccumulation factor calculator?

Press Ctrl + D now. Your browser opens its own bookmark box, where you choose the name and folder.

  1. Fish data
  2. Fit k1, k2
  3. Corrections
  4. BCF
Nothing is uploadedWorks offline once open

Fish test

The tool fits the one-compartment model: during uptake the fish take up the chemical at rate k1 and lose it at rate k2, then in clean water they only lose it. The BCF is k1/k2, in L/kg when the water is in µg/L and the fish in µg/kg (keep the units matching). Use several rows per day for several fish. The lipid content gives a BCF normalised to 5 % lipid; the weights give the growth rate, which is taken off k2 because growth dilutes the chemical. Up to 2,000 rows. The example data are made up.

Result

Data and fit (table)
Download

What it does

A chemical bioconcentrates when fish take it up from the water faster than they get rid of it. The standard way to measure this is a fish test with two phases: an uptake phase where the fish swim in water with a steady concentration of the chemical, then a depuration phase in clean water. This tool fits the classic one-compartment model to the fish concentrations:

  • during uptake, dC/dt = k1 × Cw − k2 × C
  • after uptake, dC/dt = −k2 × C

where k1 is the uptake rate (L/kg per day), k2 the depuration rate (per day) and Cw the water concentration. The kinetic BCF is k1/k2, the concentration ratio fish/water that the fish would reach at steady state.

It also works out the trophic magnification factor (TMF): how much a chemical’s concentration goes up with each step in a food web.

How to use it

Bioconcentration factor. Paste or open the time (days) and fish concentration, one row per fish or pooled sample. Give the water concentration during uptake (in matching units, such as µg/L for µg/kg fish) and the day uptake ended. Choose to fit on log concentrations (usual, as scatter tends to grow with the level) or raw ones. Optional: the fish lipid content to normalise the BCF to 5 % lipid, and the fish weight at the end of uptake and at the end of the test to correct for growth (growing fish dilute the chemical, which looks like faster depuration).

Trophic magnification. Paste organism (optional), trophic level and concentration (lipid-normalised for fat-loving chemicals). The tool fits log₁₀ concentration against trophic level; TMF = 10^slope.

Worked example

The made-up fish test ran 28 days of uptake at 1 µg/L and 28 days of depuration. Fitting on logs gives k1 = 150.8 L/kg per day and k2 = 0.1202 per day, so the kinetic BCF is 1,254 L/kg (95 % CI 1,205 to 1,304). The half-life in clean water is 5.76 days, and 95 % of steady state is reached after 24.9 days, so the 28-day uptake was long enough. The last three uptake days are within ±20 % of their mean, giving a steady-state BCF of 1,114 L/kg.

The fish grew from 2.0 to 2.6 g during depuration, a growth rate of 0.0094 per day. Taking that off k2 gives a growth-corrected BCF of 1,360 L/kg. At 4 % lipid, the BCF normalised to 5 % lipid is 1,568 L/kg (1,700 growth-corrected).

In the made-up food web of ten organisms, the slope is 0.435 per trophic level, so TMF = 2.72 (95 % CI 2.27 to 3.26): the chemical biomagnifies.

FAQs

Why does the kinetic BCF differ from the steady-state one? Steady-state BCF uses only the end of uptake and assumes the fish have levelled off. The kinetic BCF uses every point and does not need a plateau, so it is preferred when the fish have not quite reached steady state.

Which fit should I use? Log fitting treats a 10 % miss the same at low and high levels, which suits most test data. Raw fitting gives more weight to the high concentrations.

Can I use this for a dietary test? No. A feeding study needs the food concentration and feeding rate; this tool is for water exposure.

Is my data uploaded? No. Everything is calculated in your browser.

Regulatory thresholds for “bioaccumulative” differ between regions; check the rules that apply to you.

Where the numbers come from

  • The first-order one-compartment uptake and depuration model, the kinetic and steady-state BCF, growth correction and lipid normalisation to 5 %, as used in flow-through fish bioconcentration tests (OECD Test Guideline 305 describes the test design; only the method is used, no text or data copied).
  • TMF as 10 to the power of the slope of log₁₀ concentration against trophic level: standard method from the food-web literature.
  • Checked in the tests against SciPy curve_fit (log and raw fits, standard errors) and scipy.stats.linregress. The fish test and food web data are made up.

Standard scientific values, such as constants, atomic weights and melting points, are facts found in every textbook; we name where ours were checked. If you are an author or publisher and want a value, a credit or a table changed or removed, tell us and we will act quickly.

Last updated 2026-11-09.

Change log for Bioaccumulation factor calculator

  1. Add #159 bioaccumulation factor calculator (kinetic BCF, TMF) Details on GitHub

Every change to fibub

Related tools

LC50 probit analysis #151 Find the LC50 or EC50 from a toxicity test where a number of organisms die or respond at each concentration. Fit a probit or logit line by maximum likelihood, correct for deaths in the control, and get LC10, LC50, LC90 or any other level with 95 % fiducial limits, the slope, a goodness-of-fit test and plots. Non-detect statistics #153 Work out the mean, median, upper percentiles and an upper confidence limit for lab results that include non-detects ("<1", "ND"), even with several detection limits. Uses Kaplan–Meier, robust ROS and maximum likelihood instead of substituting half the limit, compares every method side by side, and counts results above a guideline. Species sensitivity distribution #152 Turn toxicity values for many species into one protective concentration. Fit a species sensitivity distribution (log-normal, log-logistic or their AICc average), read off the HC5 or any other HCp with bootstrap limits, see the fraction of species affected at any concentration, and plot every species on the curve. Margin of exposure calculator #476 Work out the margin of exposure for several exposure scenarios: dose from concentration × intake ÷ body weight, MOE = point of departure (NOAEL, LOAEL or BMDL) ÷ dose, compared with a target built from your own uncertainty factors, with a bar chart and the concentration that would just meet the target. 1D Schrödinger solver #923 Choose a textbook potential, type a formula or draw your own, and get the lowest energy levels and wavefunctions of the one-dimensional Schrödinger equation by the matrix (finite-difference) method, with the exact levels alongside for the box, harmonic oscillator, finite well, Morse, linear and Pöschl–Teller potentials. Adduct and neutral loss calculator #984 Type a formula or a neutral monoisotopic mass and get the m/z of 25 common electrospray adducts in positive and negative mode, the ions left after common neutral losses (water, ammonia, CO2, sugars, phosphate and your own), and match a list of observed m/z values within a ppm tolerance. With no molecule, it turns observed m/z values into candidate neutral masses.