Measurement · 訊號處理研究Measurement · a signal-processing study

一個 OD600 讀值,
有多少是演算法算出來的?
How much of an OD600 reading is made by the arithmetic?

光度計把光變成數字的過程中,每一步運算都會留下自己的偏差。這一頁從零講起,稽核我們自己的儀器,再給出一份四天做得完、用 1 µm SiO₂ 微球量出這些偏差的 protocol。Every step that turns light into a number leaves a bias of its own. This page starts from zero, audits our own instrument, and lays out a four-day protocol that measures those biases with 1 µm silica microspheres.

32
434 小時那次運轉,reference 通道穩定時的感測器 countssensor counts on the reference channel during the 434-hour run
0.067
reference 每跳 1 count,回報的 OD 就改變這麼多OD change reported each time that channel moves by one count
26 / 29
40–230 h 之間 reference 換 count 的次數裡,造成 OD 跳動超過 0.04 的比例reference count changes between 40 and 230 h that produced an OD jump above 0.04
+0.17
模擬:15% 的取樣被氣泡遮一半時,單純取平均多報的 OD(光程係數 ×5)simulated: OD over-read by a plain mean when 15% of samples are half-blocked by bubbles (path factor ×5)

01 · 從零開始From zero

OD600 量的不是「吸收」,是「光沒有抵達偵測器」OD600 does not measure absorption. It measures light that failed to arrive.

把一束 600 nm 的光射過菌液。細菌幾乎不吸收這個波長的光,它們做的事是把光散射到別的方向。偵測器只看得到沒被打偏的那部分,所以菌越多、訊號越小。Shine a 600 nm beam through a culture. Bacteria absorb almost none of it. What they do is scatter it in other directions. The detector only sees the part that was not deflected, so more cells means less signal.

T = I / I₀      OD = −log₁₀(T) = log₁₀(I₀ / I)

I₀ 是空白(只有培養基)時的光強,I 是有菌時的光強。取 log 是因為每多一層菌,光是「乘上」一個比例而不是「減掉」一個量,log 把乘法變成加法,OD 才會跟濃度成正比。I₀ is the intensity through a blank (medium only); I is the intensity through the culture. The log is there because each added layer of cells multiplies the light by a fraction instead of subtracting an amount. The log turns that product into a sum, which is why OD is proportional to concentration.

動手試:把濃度往上推Try it: push the concentration up

看「偵測器收到的 counts」怎麼掉,以及 OD 的解析度怎麼跟著變差Watch the detector counts fall and the OD resolution fall with them

最後一格是重點:偵測器只能分辨整數 count。訊號剩越少,一個 count 相當的 OD 就越大。這就是為什麼高 OD 端永遠比較吵,也是為什麼「空白時有多少 counts」決定了整台儀器的上限。The last box is the point. A detector resolves whole counts. The less signal is left, the more OD one count is worth. That is why the high end is always noisier, and why the number of counts at blank sets the ceiling for the whole instrument.

為什麼不同儀器讀值不同Why instruments disagree

被散射的光有一部分仍然朝前,偵測器張角越大就收進越多,讀到的 OD 越低。所以 OD 是「這台儀器的幾何」的函數,不是樣品的絕對性質。Some scattered light still travels forward. A detector with a wider acceptance angle collects more of it and reads a lower OD. OD is therefore a property of the instrument's geometry as well as of the sample.

為什麼高濃度會失準Why high density bends the curve

濃度高時,光被散射好幾次,有些又被打回偵測器。讀值開始低於直線外推,這叫多重散射。它是物理現象,演算法修不掉,只能用校正曲線描述並宣告有效範圍。At high density light is scattered several times, and some of it is steered back into the detector. Readings fall below the straight line. This is multiple scattering: physics, which no algorithm removes. It can only be described by a calibration curve with a stated valid range.

為什麼需要標準品Why a standard is needed

細菌會長、會變形、會死。要分辨「儀器的偏差」與「生物的變化」,需要一種不會變的散射體。大小接近細菌的 SiO₂ 微球就是這個角色。Cells grow, change shape and die. Separating instrument bias from biology needs a scatterer that does not change. Silica microspheres close to bacterial size play that role.

02 · 我們的訊號鏈Our signal chain

從 LED 到一個數字,中間有九步Nine steps between the LED and a number

這是現行韌體(v3.10.9 的 sketch.ino)實際在做的事。每一步都是一個可以換掉、也可以出錯的演算法選擇。This is what the current firmware (sketch.ino, v3.10.9) actually does. Each step is an algorithmic choice that can be swapped, and can go wrong.

機台上現在跑的版本(2026-10-10 確認)What is running on the rig now (confirmed 10 Oct 2026)

韌體 v3.10.9、後端 v4.12、介面 v4.13。介面顯示的演算法組合是:Firmware v3.10.9, backend v4.12, interface v4.13. The interface reports this algorithm profile:

flow=gate; od_estimator=mad; analysis_source=ema; steady=legacy; curvature=legacy; agg=median

量測間隔 30 秒、光程係數 5。OD 估計器在介面上可以即時切換四種:mad(現行)、qn、biweight、upper,每一列 CSV 的 alg_profile 欄會記下當時的組合。下面的九步就是 mad 的流程;另外三種只換掉第 4 步。Measurement interval 30 s, path factor 5. The OD estimator can be switched live between four options: mad (current), qn, biweight and upper, and every CSV row records the profile in an alg_profile column. The nine steps below are the mad pipeline; the other three change step 4 only.

光學:琥珀色 LED → 平凸透鏡 → 2 mm 針孔 → 90/10 分光片 → 2 mm 光程 flow cuvette。兩顆 16-bit 數位照度感測器,一顆在樣品後(sample),一顆接分光片的 10%(reference)。Optics: amber LED → plano-convex lens → 2 mm pinhole → 90/10 beam splitter → flow cuvette with a 2 mm path. Two 16-bit digital light sensors, one behind the sample and one on the 10% tap (reference).

#步驟Step韌體目前的做法What the firmware does now這一步可能引入的偏差Bias this step can introduce
1感測器積分Sensor integration每個樣本是約 120 ms 的光積分,輸出整數 count(1 count = 0.83 lx)each sample integrates light for about 120 ms and returns an integer count (1 count = 0.83 lx)量化;120 ms 內的氣泡已被平均進去,後面的濾波看不到quantisation; a bubble inside the 120 ms is already averaged in, invisible to later filters
2暗場Dark frameLED 關,取 4 個樣本的中位數LED off, median of 4 samples暗場與亮場相隔約 0.6 s,環境光若在這段時間改變就扣不乾淨dark and lit are about 0.6 s apart; ambient light that changes in between is not removed
3亮場 burstLit burstLED 開,等 60 ms,取 16 個樣本、丟掉前 2 個LED on, wait 60 ms, 16 samples, first 2 discardedLED 升溫漂移;窗長約 1.8 sLED warm-up drift; window about 1.8 s
4離群值剔除Outlier gate剔除離中位數超過 3×MAD 的樣本,其餘取平均drop samples beyond 3×MAD from the median, average the rest資料量化後 MAD 常常等於 0,這個濾波會退化(見第 04 節)with quantised data the MAD is often 0 and the gate degenerates (section 04)
5扣暗場Dark subtractionnet = lit − dark暗場估錯會在高 OD 端被放大a wrong dark is amplified at high OD
6參考比值Reference ratioratio = netS / netR把 reference 通道的雜訊原封不動加進結果adds the reference channel's noise to the result in full
7空白Blank開機後按一次,存成 blankRatio,之後不再更新set once after start-up, stored as blankRatio, never refreshed光窗結垢、分光比改變都會直接變成 ODwindow fouling or a change in the split ratio becomes OD directly
8logA = log₁₀(blankRatio / ratio)先平均再取 log 才不偏(韌體這裡做對了)unbiased only if averaging precedes the log (the firmware gets this right)
9光程係數Path factorOD = A × 5把前面所有誤差乘以 5multiplies every error above by 5

03 · 偏差從哪裡來Where bias comes from

六個機制,每一個都可以先算出方向與大小Six mechanisms, each with a direction and size you can predict

先有預測、再做實驗,量到的東西才叫驗證。下面每張圖都可以拖動。Predict first, then measure: only then is the result a test. Every figure below is interactive.

3.1 count 不夠:解析度被感測器吃掉Count starvation: resolution lost at the sensor

通道上只有 N 個 counts 時,它變動 1 count 造成的 OD 變化是:With N counts on a channel, a one-count change moves the OD by:

ΔOD = k · log₁₀((N + 1) / N) ≈ 0.434 · k / N      (k = 光程係數path factor = 5)

一個 count 值多少 ODWhat one count is worth in OD

三個標記是我們自己三次運轉的 reference 通道:7/21 約 32 counts,9/02 約 265,10/09 約 304。光是把 reference 調亮,一個 count 的代價就從 0.067 降到 0.007 OD。The three markers are the reference channel in our own three runs: about 32 counts on 21 July, 265 on 2 Sept and 304 on 9 Oct. Brightening the reference alone cut the cost of one count from 0.067 to 0.007 OD.

3.2 平均與 log 的順序The order of averaging and the log

log 是往下彎的曲線,所以「先各自取 log 再平均」一定比「先平均再取 log」讀得高。差距只跟光強的相對雜訊 σr 有關:The log curve bends downward, so taking the log of each sample and then averaging always reads higher than averaging first. The gap depends only on the relative noise of the intensity, σr:

mean(ODi) − OD(mean I) ≈ k · σr² / (2 ln 10) = 0.217 · k · σr²

雜訊越大,兩種算法差越多The noisier the signal, the wider the gap

乾淨的 cuvette(σr ≈ 2%)幾乎沒差。有氣泡的循環管路(30% 以上)就差到百分之一 OD 以上。規則很簡單:所有統計都在光強上做完,最後只取一次 log。In a clean cuvette (σr ≈ 2%) the gap is negligible. In a bubbly loop (30% and above) it exceeds a hundredth of an OD. The rule is simple: finish all the statistics on intensity, then take the log once.

3.3 氣泡只會擋光,不會加光Bubbles only remove light

這種干擾是單邊的。若一個 burst 裡有比例 f 的樣本只剩 k 倍的光,單純平均會多報:The disturbance is one-sided. If a fraction f of the samples in a burst keep only a fraction k of the light, a plain mean over-reads by:

ΔOD = −kpath · log₁₀(1 − f · (1 − k))

四種估計器面對同一串氣泡Four estimators facing the same bubbles

每次 2000 個模擬 burst,每個 burst 14 個樣本,真實 OD 固定2000 simulated bursts of 14 samples each, true OD held fixed

長條是平均偏差,細線是單次讀值的 ±1 SD,都已乘上光程係數 5。「上側分位帶」取每個 burst 裡最亮的 60–90% 區段,物理意義是光路最沒被擋到的時刻。f 接近 50% 時中位數也會垮。Bars are mean bias, whiskers are ±1 SD of a single reading, both already multiplied by the path factor of 5. The upper band takes the 60th–90th percentile of each burst: the moments when the path was least obstructed. As f nears 50% the median collapses too.

3.4 離群值濾波遇到量化資料An outlier gate meets quantised data

MAD 是「離中位數的距離的中位數」。當 14 個樣本裡有一半以上是同一個整數,MAD 就是 0,3×MAD 的門檻也是 0,任何不等於中位數的樣本都被當成氣泡丟掉。濾波器退化成「取眾數」,本來可以靠平均得到的小數點解析度就沒了。The MAD is the median distance from the median. When more than half of 14 samples are the same integer, the MAD is 0, so the 3×MAD gate is 0, and every sample that differs from the median is discarded as a bubble. The filter degenerates into taking the mode, and the sub-count resolution that averaging would have given is lost.

真實光強從 32 慢慢升到 33 counts,估計器回報什麼True level rising slowly from 32 to 33 counts: what each estimator reports

理想ideal單純平均plain mean目前韌體(MAD 門檻下限 10⁻⁶)current firmware (MAD floor 10⁻⁶)

橘線是階梯:輸入連續變化,輸出卻一格一格跳。這個濾波器回報的「bubble %」在這種情況下數的其實是量化閃爍,不是氣泡。修法是替 MAD 設一個合理的下限(一個 count),圖上會跟藍線重合。把雜訊拉大到 1 count 以上,兩條線自己就會靠攏。The orange line is a staircase: the input moves smoothly, the output jumps. In this regime the "bubble %" the filter reports is counting quantisation flicker, not bubbles. The fix is a sensible floor for the MAD (one count), which lands on the blue line. Raise the noise above one count and the two lines converge by themselves.

3.5 漏光決定上限Stray light sets the ceiling

只要有一小部分光不經過樣品就到了偵測器(繞過 cuvette、外殼漏光、沒扣乾淨的暗場),不管菌多濃,訊號都不會低於那個量:If a small fraction of light reaches the detector without crossing the sample (around the cuvette, through the housing, or as an uncorrected dark level), the signal never drops below it however dense the culture:

ODapparent = −k · log₁₀(10−OD/k + s) + k · log₁₀(1 + s)      ODmax ≈ −k · log₁₀(s)

看起來的 OD 對真實 ODApparent OD against true OD

理想ideals = 0.1%s = 1%s = 5%

這種彎曲跟多重散射長得很像,都是高端讀低,但成因不同:漏光是儀器的,多重散射是樣品的。分辨方法是把同一個樣品稀釋後再量,或在光路上放不透光片直接量 s。This bend looks like multiple scattering, since both read low at the top, but the causes differ: stray light belongs to the instrument, multiple scattering to the sample. Tell them apart by diluting the same sample, or by blocking the beam with an opaque slide and measuring s directly.

3.6 時間上的平滑會遲到Smoothing in time arrives late

把連續讀值做指數移動平均(時間常數 τ)會讓曲線好看,代價是延遲。對以速率 μ 指數成長的訊號,平滑後的值永遠低 μτ/(1+μτ),而且生長速率改變的時刻會晚大約 τ 才看得到。An exponential moving average with time constant τ makes a curve look better and costs delay. For a signal growing exponentially at rate μ the smoothed value sits low by μτ/(1+μτ), and a change in growth rate shows up about τ late.

生長在第 10 小時停止:平滑器什麼時候才發現Growth stops at hour 10: when does the smoother notice

真實true平滑後smoothed

我們的預警層靠的是及早看到生長速率轉折。所以規則是:存檔的 OD 永遠不平滑;平滑只能出現在估計層,而且要寫出它的延遲。Our early-warning layer depends on seeing a change in growth rate early. So the rule: archived OD is never smoothed; smoothing lives only in the estimation layer, with its delay stated.

04 · 稽核我們自己Auditing ourselves

儀器其實早就留下了證據The instrument had already recorded the evidence

把 434 小時那次運轉的原始紀錄(2,671 筆有效讀值)重新打開,只看 reference 通道。We reopened the raw log of the 434-hour run (2,671 valid readings) and looked only at the reference channel.

reference 通道停在哪些 count 上Which counts the reference channel sat on

2,671 筆讀值的分布;91.5% 落在整數 count 上distribution of 2,671 readings; 91.5% fall on an exact integer count

如果 14 個樣本的平均有在運作,結果應該散在整數之間。幾乎全部落在整數上,代表每個 burst 回報的就是單一 count 值。If averaging over 14 samples were working, results would spread between the integers. Nearly all sit on integers, so each burst is returning a single count value.

77–101 h:OD 的跳動與 reference 換 count 對在一起77–101 h: OD jumps line up with reference count changes

上:回報的 OD600。下:reference counts。同一條時間軸;虛線標出 reference 換 count 的時刻top: reported OD600. bottom: reference counts. shared time axis; dashed lines mark each reference count change

在 40–230 h 的平穩段,reference 一共換了 29 次 count,其中 26 次伴隨超過 0.04 的 OD 跳動。這些跳動跟培養液無關。同一時段另有 53 次跳動來自 sample 通道,需要原始 burst 才能分辨成因。Across the quiet stretch from 40 to 230 h the reference changed count 29 times, and 26 of those came with an OD jump above 0.04. Those jumps have nothing to do with the culture. Another 53 jumps in the same stretch came from the sample channel; separating their causes needs raw bursts.

到目前為止的每一輪資料Every data set so far

日期Date內容Whatreference countsReference counts每 count 的 ODOD per count這份資料告訴我們什麼What it tells us分析狀態Analysis
7/21 – 8/08434 h 培養,每 10 分鐘一筆434 h culture, one reading per 10 min≈ 320.06791.5% 的 reference 讀值在整數上;26/29 次換 count 造成 OD 跳動;240–300 h reference 最低掉到約 11 counts(每 count 0.19 OD)91.5% of reference readings on integers; 26 of 29 count changes moved the OD; over 240–300 h the reference fell as low as about 11 counts (0.19 OD per count)完成done
8/23TiO₂ 累加,對 benchtop,n = 1TiO₂ additions against the benchtop, n = 1——OD 1.2 以下:斜率 1.018、R² 0.995、平均差 −0.021、一致性界限 −0.069 到 +0.028。以上兩台都失準,方式不同below OD 1.2: slope 1.018, R² 0.995, mean difference −0.021, limits of agreement −0.069 to +0.028. Above that both instruments fail, in different ways完成done 無原始 countsno raw counts
9/02 – 9/06102 h 培養,30 秒視窗102 h culture, 30 s windows≈ 2650.008reference 調亮後只有 11% 的讀值在整數上,平均有在運作;29 h 處分光比階躍 −3.07%,因空白未更新而注入 −0.068 ODwith a brighter reference only 11% of readings sit on integers, so averaging works; a −3.07% step in the split ratio at 29 h injected −0.068 OD because the blank was not refreshed完成done
9/191 µm SiO₂ 滴定,簡化版光度計,n = 11 µm silica titration, simplified photometer, n = 1——R² 0.999 但殘差有結構:局部斜率 0.371 → 0.431R² 0.999 yet structured residuals: local slope 0.371 → 0.431完成done 成因未解cause open
10/09 →進行中的培養(v3.10.9,mad),截圖時 23.1 hculture in progress (v3.10.9, mad), 23.1 h at the screenshot≈ 3040.007空白為重開後還原(F8);OD 曲線有週期約 1–1.5 小時的鋸齒,成因待查blank restored after restart (F8); the OD trace shows a sawtooth with a period of roughly 1–1.5 h, cause to be found待取得板上的 CSVneeds the CSV from the board

這五份都只存了每次量測的最終值,沒有 burst 內的個別樣本,所以無法在舊資料上重播演算法。演算法比較只能來自新的原始紀錄。All five stored only the final value of each measurement, with no individual samples from inside a burst, so algorithms cannot be replayed on them. The algorithm comparison can only come from new raw logs.

稽核結果一覽Audit summary

#發現Finding證據Evidence大小Size狀態Status
F1reference 通道 count 不足Reference channel is count-starved434 h 紀錄:眾數 32 counts,91.5% 在整數上434 h log: mode 32 counts, 91.5% on integers0.067 OD / count;9/02 約 265 counts 時 0.008;10/9 約 304 counts 時 0.0070.067 OD per count; 0.008 at about 265 counts on 2 Sept; 0.007 at about 304 counts on 9 Oct已確認confirmed
F2mad、qn、biweight 在量化資料上都退化成取眾數mad, qn and biweight all degenerate to the mode on quantised datav3.10.9 程式碼:三者的尺度下限都是 10⁻⁶;移植後模擬出相同的階梯v3.10.9 code: all three share a scale floor of 10⁻⁶; the ports reproduce one identical staircase模擬中單次讀值 SD 增加約 22%about 22% more single-reading SD in simulation程式碼已確認confirmed in code 待實測to measure
F3「bubble %」把量化閃爍算成氣泡"bubble %" counts quantisation flicker as bubbles434 h 紀錄:60% 的讀值 bubble% 不為 0,數值都是 1/14 的倍數434 h log: 60% of readings have non-zero bubble %, all multiples of 1/14—假說,待原始 burst 驗證hypothesis, needs raw bursts
F4空白只量一次Blank is measured once102 h 運轉:29 h 處 reference 階躍 −3.07%,blankRatio 未更新102 h run: reference step of −3.07% at 29 h, blankRatio not refreshed之後每個讀值偏 −0.068 OD−0.068 OD on every later reading已確認confirmed
F810/9 這次運轉用的空白不是現場量的The blank in use on the 9 Oct run was not measured in place介面:空白 sample 1537.6 lx、reference 113.3 lx(比值 13.567),來源「重開後自動還原」。運轉中 sample 1965.5 lx、reference 253.6 lx(比值 7.75),回報 OD 1.2156interface: blank sample 1537.6 lx, reference 113.3 lx (ratio 13.567), source "restored after restart". During the run: sample 1965.5 lx, reference 253.6 lx (ratio 7.75), reported OD 1.2156光源比量空白時亮 2.24 倍;OD 的絕對值建立在「分光比在這之間沒變」的假設上,無法驗證the source is 2.24 times brighter than when the blank was taken; the absolute OD rests on the split ratio not having changed in between, which cannot be checked已確認confirmed 偏移量未知offset unknown
F5光程係數 ×5 放大一切Path factor of 5 amplifies everything韌體:pathLengthFactor = 5.0firmware: pathLengthFactor = 5.0所有雜訊與偏差 ×5all noise and bias ×5已確認confirmed
F69/19 SiO₂ 曲線向上彎The 19 Sept silica curve bends upward局部斜率 0.371 → 0.431(+16%);空白讀 −0.017local slope 0.371 → 0.431 (+16%); blank reads −0.017方向與多重散射相反opposite in direction to multiple scattering未解釋unexplained
F7數位孿生用的另一份韌體 releaf_br01_v2.ino(不是機台上的版本):空白被扣兩次暗場;5 個樣本在 10 ms 內取完A separate firmware for the digital twin, releaf_br01_v2.ino (not the one on the rig): blank dark-subtracted twice; 5 samples taken within 10 ms程式碼:ODC 已扣暗場,回存後又扣一次code: ODC is already dark-corrected, then subtracted again after storinglog₁₀(1 − d/I₀)程式碼已確認confirmed in code 不影響現行量測does not affect current measurements

9/19 的 SiO₂ 滴定(簡化版光度計)The 19 Sept silica titration (simplified photometer)

37 點,每點 1 次讀值。左:讀值與低濃度段直線。右:對那條直線的殘差37 points, one reading each. left: readings with the low-range line. right: residuals from that line

整體 R² = 0.999,看起來很漂亮,但殘差不是隨機的:高濃度端系統性偏高。R² 回答不了「有沒有偏差」。這次每點只有一個讀值、沒有原始 burst、也沒有回頭往下稀釋,所以無法分辨是儀器、加樣累積誤差還是微球沉降。新的 protocol 就是為了能分辨這三者而設計。The overall R² of 0.999 looks excellent, yet the residuals are not random: the high end reads systematically high. R² cannot answer whether there is bias. That run had one reading per point, no raw bursts and no return path by dilution, so instrument, cumulative pipetting error and settling cannot be told apart. The new protocol is built to separate those three.

05 · 標準品The standard

1 µm SiO₂ 微球能證明什麼,不能證明什麼What 1 µm silica microspheres can and cannot prove

能It can

  • 給出一條濃度已知、不會生長的階梯provide a ladder of known concentration that does not grow
  • 量出線性範圍、雜訊底、偵測極限measure linear range, noise floor and limit of detection
  • 在同一批原始資料上比較演算法compare algorithms on one set of raw data
  • 把讀值換算成等效顆粒數,讓不同實驗室可以比較convert readings to equivalent particle counts, comparable across laboratories

不能It cannot

  • 告訴你每單位 OD 有多少細胞乾重tell you the dry cell mass per unit OD
  • 代表桿狀、成鏈、會變大小的 B. subtilisstand in for a rod that chains and changes size
  • 靜置超過幾分鐘(會沉)sit still for more than a few minutes (it settles)
  • 校正被菌膜蓋住的光窗calibrate a window covered by biofilm
我們的 SiO₂ 微球Our silica microspheresB. subtilis 營養細胞vegetative cell這個差異的後果Consequence
形狀Shape球,單分散sphere, monodisperse桿狀,常成鏈rod, often in chains散射角度分布不同different angular scattering
大小Size1 µm寬約 0.8 µm;長度 2.2–4.5 µm,隨生長速率改變about 0.8 µm wide; 2.2–4.5 µm long depending on growth rate每顆粒子的 OD 貢獻不同different OD per particle
折射率Refractive index1.46約 1.33–1.41(文獻對細菌的引用值)about 1.33–1.41 (literature value for bacteria)同樣大小下微球散射更強beads scatter more at equal size
密度Density2.3 g/cm³約 1.1 g/cm³about 1.1 g/cm³微球沉降快得多beads settle far faster

沉降速度(Stokes)Settling speed (Stokes)

v = (ρp − ρf) · g · d² / (18 μ)

25 °C 的水、密度 2.3 g/cm³。1 µm 的微球每小時沉 2.9 mm:攪拌中的循環管路沒問題,但取到 benchtop cuvette 的樣品要在 1 分鐘內讀完,stock 每次吸取前都要 vortex。Water at 25 °C, density 2.3 g/cm³. A 1 µm bead sinks 2.9 mm per hour: fine in a stirred loop, but a sample taken to a benchtop cuvette should be read within a minute, and the stock vortexed before every draw.

理論對照。以異常繞射近似計算,1 µm、折射率 1.46 的微球在 600 nm 的消光效率約 0.81,換算 1 mg/mL(8.3 × 10⁸ 顆/mL)在 1 cm 光程下約 OD 2.3。9/19 簡化版光度計量到每 mg/mL 0.396(未乘光程係數)。兩者的比值 0.17 cm 接近 2 mm 的光程,這是一個不靠任何校正就能做的合理性檢查。Theory check. By the anomalous diffraction approximation a 1 µm bead of index 1.46 has an extinction efficiency near 0.81 at 600 nm, so 1 mg/mL (8.3 × 10⁸ particles/mL) is about OD 2.3 over 1 cm. On 19 Sept the simplified photometer read 0.396 per mg/mL (no path factor). The ratio, 0.17 cm, is close to the 2 mm path: a sanity check that needs no calibration at all.

06 · Protocol

四個工作天,一份原始資料,十一個演算法Four working days, one raw data set, eleven algorithms

核心設計只有一句話:原始樣本只收一次,所有演算法離線重播同一份資料。這樣兩個演算法之間的差異就只是運算的差異。The design fits in one sentence: capture the raw samples once and replay every algorithm on that same data offline. Then a difference between two algorithms is a difference in arithmetic and nothing else.

要比較的演算法Algorithms under test

前四個是韌體已經內建、介面上可切換的估計器,編號沿用隊內《訊號處理演算法檢討報告》。後七個是對照與候選。The first four are the estimators already built into the firmware and selectable in the interface, numbered as in the team's internal signal-processing review. The other seven are controls and candidates.

ID做法Method預測:乾淨時Prediction: clean預測:有氣泡時Prediction: with bubbles
E-1 mad現行。中位數 ± 3×MAD 內取平均(MAD 下限 10⁻⁶)Current. Mean within median ± 3×MAD (MAD floor 10⁻⁶)不偏;count 少時變階梯unbiased; staircase at low countsf ≲ 20% 不偏;35% 時垮掉unbiased to f ≈ 20%; fails at 35%
E-2 qn尺度改用 Qn,其餘同 E-1Qn as the scale, otherwise as E-1模擬中與 E-1 無法區分(同樣的階梯、同樣的偏差與 SD)indistinguishable from E-1 in simulation (same staircase, same bias and SD)
E-5 biweightTukey biweight,軟性降權Tukey biweight, soft down-weighting模擬中與 E-1 無法區分indistinguishable from E-1 in simulation
E-3 upper只平均「≥ 中位數」的樣本mean of the samples at or above the median通道估計值偏高 0.75σ(換算約 −0.006 OD),空白也用同一估計器時大部分抵消channel estimate high by 0.75σ (about −0.006 OD), mostly cancelled when the blank uses the same estimatorSD 小十倍;35% 時仍可用ten times lower SD; still usable at 35%
C1單純平均plain mean不偏,雜訊最低unbiased, lowest noise偏高(3.3 節公式)reads high (formula in 3.3)
C2中位數median不偏,雜訊略高unbiased, slightly noisier同 E-1as E-1
C3兩端各截 20% 的平均20% trimmed mean不偏unbiasedf > 20% 時偏高reads high once f > 20%
C4sample 通道取 60–90 百分位帶60th–90th percentile band on the sample channel極小的偏低very slightly low不偏,雜訊低unbiased, low noise
C5每個樣本各自取 log 再平均(對照)log of each sample, then mean (control)偏高 0.217·k·σr²high by 0.217·k·σr²最偏高highest
C6逐樣本算 S/R 再平均mean of per-sample S/R ratios不偏;光源閃爍時應優於 C1unbiased; should beat C1 when the source flickers同 C1as C1
C7E-1,但 MAD 下限設為 1 countE-1 with the MAD floor set to 1 count不偏,階梯消失unbiased, staircase gone同 E-1as E-1
模擬(每格 4000 個 burst,已乘 5)Simulation (4000 bursts per cell, ×5 applied)乾淨clean15% 樣本被遮一半15% of samples half-blocked35% 樣本被遮一半35% of samples half-blocked
E-1 mad / E-2 qn / E-5 biweight0.000 ± 0.002+0.002 ± 0.030+0.180 ± 0.422
E-3 upper−0.006 ± 0.003−0.005 ± 0.003+0.017 ± 0.081
C1 單純平均plain mean0.000 ± 0.002+0.171 ± 0.114+0.423 ± 0.171

表中是偏差 ± 單次讀值 SD,單位 OD,單一通道在 2400 counts。重點有兩個:介面上的 mad、qn、biweight 三個選項在這個取樣數下行為相同,互相切換不會有可量到的差別;真正不同的是 upper。四個韌體估計器照原始碼移植在 analysis/firmware_estimators.py,全部演算法的重播在 analysis/replay_algorithms.py。這些是預測,待 SiO₂ 實測驗證。Cells give bias ± single-reading SD in OD for one channel at 2400 counts. Two points stand out: the interface options mad, qn and biweight behave identically at this sample count, so switching between them makes no measurable difference; the one that differs is upper. The four firmware estimators are ported line for line in analysis/firmware_estimators.py, and the replay of all algorithms is in analysis/replay_algorithms.py. These are predictions, to be tested on silica.

Day 0 · 半天half a day

鎖定計畫、準備原始紀錄Lock the plan, set up raw logging

  1. 預先註記。把演算法清單(E-1、E-2、E-3、E-5、C1–C7)、下面的指標與判定規則存成一個檔,在收任何資料之前 commit。Pre-register. Save the algorithm list (E-1, E-2, E-3, E-5, C1–C7), the metrics and the decision rule below in one file and commit it before any data exist.
  2. 原始紀錄(需要改一行並重新燒錄)。v3.10.9 的 OD_VERBOSE_LOG 是 0,不會印出個別樣本。改成 1 重新燒錄,把 Monitor 輸出整段存檔。更好的做法是請 Chars 加一個回傳整個 burst(每通道 4 個暗場 + 16 個亮場樣本)的 RPC,由後端寫進另一個 CSV,這樣原始樣本會跟 alg_profile 一樣留在板上。量測間隔維持 30 秒。Raw logging (one line to change, then reflash). In v3.10.9 OD_VERBOSE_LOG is 0, so individual samples are not printed. Set it to 1, reflash, and save the whole Monitor stream. Better: ask Chars for an RPC that returns the full burst (4 dark and 16 lit samples per channel) and have the backend write it to a second CSV, so raw samples stay on the board the way alg_profile does. Keep the 30 s interval.
  3. 在現場重新量空白。不要用重開機後自動還原的空白值;介面頂端的黃色提示消失才算數。Measure the blank in place. Do not rely on the blank restored after a restart; it counts only once the yellow banner at the top of the interface has gone.
  4. 記下光學狀態。DI 水空白時 sample 與 reference 各幾個 counts。目標:reference ≥ 300 counts。不到就先調分光片或 LED,調完才開始。Record the optical state. Counts on sample and reference with a DI-water blank. Target: reference ≥ 300 counts. If lower, adjust the splitter or LED before starting.
  5. 盤點微球。原液 25 mg/mL。下面的階梯用掉約 58 mg;第二次只走到 0.7 mg/mL 的重複再用約 34 mg,合計約 92 mg。若 9/19 之後只剩 4 mL(100 mg),這是全部的額度。vortex 30 s;有超音波槽就再 5 分鐘。Check the bead stock. Stock is 25 mg/mL. The ladder below uses about 58 mg; a second pass up to 0.7 mg/mL uses about 34 mg more, 92 mg in all. If only 4 mL (100 mg) remain after 19 Sept, that is the whole allowance. Vortex 30 s; add 5 min in a sonic bath if available.
  6. 空白穩定度(過夜)。DI 水循環 12 小時,照常開關燈。這一份資料給出雜訊底、漂移與偵測極限。Blank stability (overnight). Circulate DI water for 12 h with lights used as normal. This one file gives the noise floor, the drift and the limit of detection.
產出:預註記檔、空白穩定度紀錄(D1)Output: pre-registration file, blank stability log (D1)
Day 1

濃度階梯:往上加The ladder: ascending

50 mL DI 水、攪拌、蠕動幫浦 60 mL/min、管路排氣。先收 10 個空白 burst,再依下表累積加入 25 mg/mL 原液。50 mL DI water, stirring, peristaltic pump at 60 mL/min, loop degassed. Capture 10 blank bursts, then add 25 mg/mL stock cumulatively as tabulated.

  1. 加樣後等 3 分鐘(至少三次循環)。After each addition wait 3 min (at least three loop turnovers).
  2. 收 5 個 burst 的原始樣本。在紀錄本寫下時間、實際加入體積。Capture 5 raw bursts. Note the time and the volume actually added.
  3. 取 0.5 mL 到 benchtop。預期讀值超過 0.8 就先用 DI 水稀釋並記下倍率,1 分鐘內讀 3 次。Take 0.5 mL to the benchtop. If the expected reading exceeds 0.8, dilute with DI water first and record the factor; read three times within a minute.
  4. 濃度的真值是體積計算出來的,不是 benchtop 讀值。benchtop 只是第二台儀器。The true concentration is the one computed from volumes, not the benchtop reading. The benchtop is only a second instrument.
產出:12 個濃度 × 5 個 burst 的原始資料(D2、D5)Output: raw data for 12 levels × 5 bursts (D2, D5)
Day 2

往下稀釋,沿途加入干擾Descend by dilution, with perturbations on the way

從最高濃度開始,每次抽掉一半體積、補回等量 DI 水,濃度減半。這一趟不花任何微球,卻給了每個濃度第二次獨立量測。上下兩趟對不起來,就是沉降、結垢或漂移。From the top level, remove half the volume and replace it with DI water to halve the concentration. This pass costs no beads and gives each level a second, independent measurement. If the two passes disagree, the cause is settling, fouling or drift.

在高、中、低三個濃度與空白,各做下列干擾臂:At a high, a middle and a low level, and at blank, run these arms:

臂Arm怎麼做Howburst它在測什麼What it tests
P0 乾淨clean正常循環normal circulation5基準baseline
P1 氣泡bubbles讓進液管吸空氣 30 s,或 T 型接頭打氣let the inlet sip air for 30 s, or inject through a T-piece103.3:單邊遮蔽3.3: one-sided occlusion
P2 環境光ambient light室內燈關/開/手機手電筒距離 20 cmroom lights off / on / phone torch at 20 cm5 × 3暗場扣除是否乾淨whether dark subtraction holds
P3 reference 變暗starved reference在 reference 感測器前加減光片,降到約 30 countsneutral-density film in front of the reference sensor, down to about 30 counts103.1 與 3.4:在標準品上重現 434 h 的狀態3.1 and 3.4: reproduce the 434 h condition on a standard
P4 流速flow30 / 60 / 120 mL/min5 × 3讀值是否依賴流速whether the reading depends on flow
P6 現場切換估計器live estimator switch在氣泡臂中,於介面上依序切換 mad → upper → mad,各 10 個 burstduring the bubble arm, switch mad → upper → mad in the interface, 10 bursts each10 × 3用機台本身確認離線重播的結論confirms the offline replay on the instrument itself
P5 漏光stray light光路上放不透光片opaque slide in the beam53.5:直接量 s3.5: measures s directly

傍晚接種 WB800 過夜培養,Day 3 用。In the evening, inoculate a WB800 overnight culture for Day 3.

產出:往下 6 個濃度;3 個濃度 × 7 個干擾臂的原始資料(D3、D4)Output: 6 descending levels; raw data for 3 levels × 7 arms (D3, D4)
Day 3

從微球接到細胞From beads to cells

  1. 收兩種 WB800:指數中期與過夜穩定期。各自離心、用 PBS 洗兩次、冰上保存(沒有養分就不會在量測中生長)。Harvest two WB800 populations: mid-exponential and overnight stationary. Spin, wash twice in PBS, keep on ice (without nutrients they will not grow during measurement).
  2. 各做 8 點二倍稀釋,走同一個管路與 benchtop,每點 5 個 burst。Make an 8-point two-fold dilution of each, run through the same loop and the benchtop, 5 bursts per point.
  3. 兩種細胞各拍一張相差顯微鏡照片,記錄成鏈與孢子比例。Take a phase-contrast image of each population and record chaining and spore fraction.
  4. 啟動 ghost run。無菌培養基、培養溫度、密閉循環,48–72 小時、每 10 分鐘一筆。它在背景跑,量的是沒有任何細胞時培養基自己的 OD 漂移。Start the ghost run. Sterile medium at culture temperature in a closed loop for 48–72 h, one reading every 10 min. It runs in the background and measures how far the medium alone drifts with no cells at all.
產出:兩條細胞稀釋曲線(D6)、ghost run 開始(D7)Output: two cell dilution curves (D6), ghost run started (D7)
Day 4

重播、判定、改韌體Replay, decide, change the firmware

  1. 把 Monitor 紀錄轉成 raw.csv(欄位見腳本開頭),執行 python3 replay_algorithms.py raw.csv。Convert the Monitor logs to raw.csv (columns listed at the top of the script) and run python3 replay_algorithms.py raw.csv.
  2. 填第 07 節的表。Fill in the tables of section 07.
  3. 套用預先寫好的判定規則:在所有干擾臂、整個驗證範圍內 |偏差| ≤ 5% 的演算法中,選氣泡臂重複性 SD 最小者;平手選最簡單的。落選者的結果一樣公開。Apply the pre-registered rule: among algorithms with |bias| ≤ 5% in every arm across the validated range, choose the one with the lowest repeatability SD in the bubble arm; on a tie, the simplest. Results for the others are published too.
  4. 把選中的估計器寫進韌體,回到三個濃度各量一次確認。Put the chosen estimator in the firmware and confirm at three levels.
產出:演算法 × 干擾臂偏差矩陣(D3)、新舊韌體對照(D9)Output: algorithm × arm bias matrix (D3), before-and-after firmware comparison (D9)
時程。Wiki freeze 是 10 月 21 日。Day 0–4 加上 ghost run 的 72 小時可以在那之前完成,但沒有重做一輪的餘裕,所以 Day 0 的預先註記與原始紀錄測試不能省。Schedule. The wiki freezes on 21 October. Days 0–4 plus 72 h of ghost run fit before then with no room for a second attempt, so the pre-registration and the raw-logging test on Day 0 cannot be skipped.

07 · 要呈現的數據Data to present

九份數據,對應 Measurement 評審會問的九個問題Nine data sets for nine questions a Measurement judge will ask

ID評審的問題The judge's question我們給的數字The numbers we give圖表形式Form來源Source狀態Status
D1你們能量到多小的變化?How small a change can you see?空白 SD、漂移(OD/h)、LOD = 3σ、LOQ = 10σblank SD, drift (OD/h), LOD = 3σ, LOQ = 10σ12 h 空白時間序列 + 一列數字12 h blank trace plus one row of numbersDay 0待做to do
D2在什麼範圍內可信?Over what range is it valid?斜率、截距、殘差 SD、|偏差| < 5% 的上限、上下兩趟的差slope, intercept, residual SD, upper limit for |bias| < 5%, ascending minus descending校正曲線 + 殘差圖calibration curve plus residual plotDay 1–2待做to do
D3為什麼選這個演算法?Why this algorithm?11 個演算法 × 7 個干擾臂的偏差與 SDbias and SD for 11 algorithms × 7 arms矩陣表(主圖)matrix table (the main figure)Day 4待做to do
D4你們怎麼知道 reference 不夠亮是問題?How do you know a dim reference matters?同一濃度下,約 30 與 ≥ 300 counts 的 OD SDOD SD at the same concentration with about 30 and with ≥ 300 counts兩組點的並排圖paired dot plotDay 2 · P3待做to do
D5跟商用儀器差多少?How far from a commercial instrument?平均差、95% 一致性界限mean difference, 95% limits of agreementBland–AltmanDay 1待做to do
D6微球的校正能用在細胞上嗎?Does the bead calibration transfer to cells?每等效微球數的 OD:指數期與穩定期 WB800 各一個比值OD per bead-equivalent for exponential and for stationary WB800三條曲線疊圖 + 顯微照片three overlaid curves plus micrographsDay 3待做to do
D7長時間運轉的上升有多少不是細胞?How much of a long rise is not cells?無菌培養基的 OD 漂移(OD/h)OD drift of sterile medium (OD/h)72 h 時間序列72 h traceDay 3 →待做to do
D8這個問題是真的發生過嗎?Did this problem really occur?32 counts、0.067 OD/count、91.5%、26/2932 counts, 0.067 OD per count, 91.5%, 26 of 29第 04 節的兩張圖the two figures of section 04434 h 紀錄434 h log已有in hand
D9改了之後有比較好嗎?Is it better after the change?同一份原始資料:舊估計器與新估計器的 SD 與偏差same raw data: SD and bias with the old and the new estimator前後對照圖before-and-after plotDay 4待做to do

每張圖都要有的四件事Four things on every figure

  • n 是多少,以及 n 指的是 burst、配製還是天n, and whether n counts bursts, preparations or days
  • 誤差線是 SD 還是 SEwhether error bars are SD or SE
  • OD 是否已乘光程係數whether OD includes the path factor
  • 當時 sample 與 reference 的 countscounts on sample and reference at the time

不要做的事What not to do

  • 只報 R²。它對偏差不敏感report R² alone; it is blind to bias
  • 把 benchtop 當真值treat the benchtop as truth
  • 外推到驗證範圍之外extrapolate beyond the validated range
  • 把微球換算說成細胞數call a bead conversion a cell count

08 · 長時間培養Long cultures

養 B. subtilis WB800 幾百小時,OD 會騙你的八種方式Eight ways OD misleads over hundreds of hours of B. subtilis WB800

演算法能處理的只有前面那些。下面這些要靠對照組與獨立量測。The algorithm handles only what came before. These need controls and independent measurements.

現象Phenomenon對 OD 的影響Effect on OD像什麼Looks like怎麼抓How to catch it
光窗結垢Window fouling單調上升rises monotonically生長growth排程重測空白;運轉結束後沖洗再讀一次空白,差值就是結垢量scheduled blank re-reads; rinse and re-read the blank at the end, the difference is the fouling
孢子形成Sporulation孢子核心折射率約 1.51,遠高於營養細胞,每顆粒子的散射不同;活的營養細胞減少時 OD 可以持平the spore core has an index near 1.51, far above a vegetative cell, so each particle scatters differently; OD can hold while vegetative cells fall穩定期stationary phase80 °C 10 分鐘前後各塗盤,得到孢子比例;相差顯微鏡plate before and after 80 °C for 10 min for the spore fraction; phase contrast
細胞大小隨生長速率變Cell size tracks growth rate細胞長度可差兩倍,每單位 OD 的乾重不是常數cell length varies two-fold, so dry mass per OD is not constant—分別對指數期與穩定期做 OD–乾重校正(D6)calibrate OD against dry mass separately for exponential and stationary cells (D6)
成鏈與聚集Chaining and clumping互相遮蔽,每顆細胞的 OD 貢獻下降mutual shading lowers OD per cell生長變慢slower growth稀釋線性檢查抓不到它;要用顯微鏡a dilution check cannot see it; use microscopy
溶菌LysisOD 下降,碎片仍散射一部分OD falls, debris still scatters some死亡deathCFU;上清液蛋白CFU; protein in the supernatant
培養基自己變色或沉澱Medium darkens or precipitates沒有細胞也上升rises with no cells生長growthghost run(D7)the ghost run (D7)
溫度TemperatureLED 輸出與感測器靈敏度隨溫度變LED output and sensor sensitivity move with temperature緩慢漂移slow drift每筆 OD 同時記錄溫度;校正與運轉在同一溫度做log temperature with every reading; calibrate at the running temperature
蒸發Evaporation體積減少,濃度上升volume falls, concentration rises生長growth記錄液位或重量track level or mass

WB800 特有的兩點Two points specific to WB800

WB800 缺少八個胞外蛋白酶,分泌的蛋白會累積在培養液裡,改變培養基的光學背景,所以空白要用「用過的」上清液再確認一次。它是 168 的衍生株;168 帶有 sfp 突變、不產 surfactin,起泡比野生株少。若使用消泡劑,要另外量消泡劑本身的 OD。WB800 lacks eight extracellular proteases, so secreted protein accumulates and shifts the optical background of the medium: check the blank again against spent supernatant. It derives from 168, which carries an sfp mutation and makes no surfactin, so it foams less than wild isolates. If antifoam is used, measure the OD of the antifoam itself.

量測光會不會干擾光控系統Does the measuring light disturb the light switch

我們用綠光開啟 CcaS。量測用的琥珀色 LED 每 30 秒只亮約 2 秒(佔空比約 7%),而且只照到 flow cuvette 裡的那一小段液體。應該把這個劑量實際算出來,跟誘導用的綠光劑量放在同一張表上,而不是假設它可以忽略。We switch CcaS on with green light. The amber measuring LED is lit for about 2 s in every 30 s (a duty cycle near 7%) and reaches only the liquid inside the flow cuvette. That dose should be computed and set beside the green induction dose in one table, not assumed negligible.

菌株名稱。現有文件裡同一株菌有三種寫法(168、PY79/168、WB800)。這一頁依本次討論統一寫 WB800;公開到 wiki 之前請確認每一次運轉實際用的是哪一株。Strain name. Our existing documents name the strain three ways (168, PY79/168, WB800). This page uses WB800 as in the current discussion; before anything reaches the wiki, confirm which strain each run actually used.

09 · Wiki

可以直接放上 Measurement 頁的一段文字A passage ready for the Measurement page

黃色標記是 Day 4 之後要填的數字。其餘每個數字都已經在第 04 節有出處。Highlighted items are numbers to fill in after Day 4. Every other number is already sourced in section 04.

We audited the arithmetic inside our photometer before we trusted its curves. An OD600 value is the output of a chain of decisions: how many samples to take, which to discard, when to subtract the dark level, when to take the logarithm. Each decision carries a bias with a predictable direction, so we derived those biases first and then measured them.

The audit began with our own data. In our 434-hour culture the reference channel of the photometer sat at about 32 sensor counts. At that level a single count is worth 0.067 OD after our path-length factor of 5, and 91.5% of the 2,671 reference readings fell on an exact integer count. Between 40 and 230 hours the reference changed count 29 times, and 26 of those changes produced an OD jump larger than 0.04. Those jumps were made by the instrument. We traced part of this to our outlier filter: with quantised data its robust spread estimate collapses to zero, so the filter returns the most common count and discards the averaging that would have resolved fractions of a count.

To measure each bias we used 1 µm monodisperse silica microspheres as a scatterer that does not grow. We recorded every raw sensor sample once, over 12 concentrations from blank to [top] mg/mL, ascending by addition and descending by dilution, and under deliberate disturbances: injected bubbles, changed room light, a dimmed reference channel and changed flow. We then replayed that single data set through eleven reduction algorithms, including the four estimators already selectable in our firmware. Because every algorithm saw identical samples, any difference between them is a difference in arithmetic alone. The algorithm list, the metrics and the selection rule were committed to our repository before the first measurement.

The replay gave [summary of D3: e.g. a plain mean over-read by X OD in the bubble arm, the upper-percentile estimator stayed within Y]. We adopted [chosen algorithm], which held bias within [X]% across OD [a]–[b] in every arm, with a limit of detection of [LOD] OD. Raising the reference channel from about 30 to [N] counts reduced single-reading scatter by a factor of [X].

We state the limits of this calibration plainly. Silica spheres calibrate the instrument, not the organism: they differ from B. subtilis in shape, refractive index and density, so the bead curve gives equivalent particle counts and not cell mass. A dilution series of washed cells gave [ratio] for exponential and [ratio] for stationary cells, and sterile medium alone drifted by [X] OD per hour; a long curve cannot be read without both corrections. Our raw data, the replay script and the pre-registration are public, so another team can run the same test on their own photometer in four days.

中文對照(給隊內閱讀)

我們先稽核光度計裡的運算,才相信它畫出來的曲線。一個 OD600 數值是一連串決定的產物:取幾個樣本、丟掉哪些、何時扣暗場、何時取 log。每個決定都帶有方向可預測的偏差,所以我們先推導,再實測。

稽核從自己的資料開始。434 小時那次培養,reference 通道約 32 counts;乘上光程係數 5 之後一個 count 值 0.067 OD,2,671 筆 reference 讀值有 91.5% 落在整數 count 上。40–230 小時之間 reference 換了 29 次 count,其中 26 次造成超過 0.04 的 OD 跳動。這些跳動是儀器造成的。部分原因在離群值濾波:資料量化後它的穩健離散估計變成零,於是回傳最常見的 count,丟掉了本來能解析小數 count 的平均。

之後三段依序是:用 1 µm SiO₂ 微球、單一原始資料集重播十一個演算法;重播結果與採用的演算法;以及這份校正的極限(微球校正的是儀器而不是生物)。

10 · 文獻與出處References and sources

這一頁的依據What this page rests on

下列文獻的書目資料與要點都已對照原始頁面查證;標「未讀全文」者只確認了書目。Bibliographic details and the points drawn from each source were checked against the source pages; items marked "full text not read" were confirmed bibliographically only.

校正與 OD 的物理Calibration and the physics of OD

  1. Beal J. et al. (2020). Robust estimation of bacterial cell count from optical density. Communications Biology 3:512. doi:10.1038/s42003-020-01127-5
    iGEM 2018 InterLab,244 組資料。0.961 µm 單分散 SiO₂ 微球、四重複二倍連續稀釋。以微球校正的單細胞螢光與流式細胞儀差 1.07 倍,以 CFU 校正差 28.4 倍。LUDOX 的變異其實更小,但只有單點、沒有殘差可檢查,也無法換算顆粒數。文中引用的細菌折射率為 1.33–1.41。iGEM InterLab 2018, 244 data sets. Monodisperse 0.961 µm silica microspheres in quadruplicate two-fold serial dilution. Per-cell fluorescence calibrated by microspheres was 1.07-fold from flow cytometry, against 28.4-fold for CFU. LUDOX was in fact slightly more precise, but it is a single point with no residuals to check and cannot give a particle count. Bacterial refractive index is quoted there as 1.33–1.41.
  2. Stevenson K., McVey A.F., Clark I.B.N., Swain P.S., Pilizota T. (2016). General calibration of microbial growth in microplate readers. Scientific Reports 6:38828. doi:10.1038/srep38828
    OD 只在單次散射區(約 OD ≲ 0.2)與細胞數成正比;不同儀器即使在該區也要互相校正;細胞變長時同樣細胞數的 OD 會改變。使用的是聚苯乙烯微球,不是 SiO₂。OD is proportional to cell number only in the single-scattering regime (about OD ≲ 0.2); instruments need cross-calibration even there; elongated cells change OD at constant cell number. The beads used were polystyrene, not silica.
  3. Myers J.A., Curtis B.S., Curtis W.R. (2013). Improving accuracy of cell and chromophore concentration measurements using optical density. BMC Biophysics 6:4. doi:10.1186/2046-1682-6-4
    同一份 E. coli 懸浮液在兩台儀器上差超過 40%,染料只差 25%;差異歸因於偵測器的接收角。也示範了約 0.1 cm 光程的 LED flow cell。The same E. coli suspension differed by more than 40% between two instruments while a dye differed by 25%; the difference is attributed to detector acceptance angle. Also demonstrates an LED flow cell with a path near 0.1 cm.
  4. Mira P., Yeh P., Hall B.G. (2022). Estimating microbial population data from optical density. PLoS ONE 17:e0276040. doi:10.1371/journal.pone.0276040
    OD 與細胞數只到約 OD 0.1 成正比;兩種菌在幾乎相同的 OD(0.62 與 0.61)下細胞數差約 15 倍。OD is proportional to cell titre only to about OD 0.1; two species at nearly the same OD (0.62 and 0.61) differed about 15-fold in cell number.
  5. Koch A.L. (1970). Turbidity measurements of bacterial cultures in some available commercial instruments. Analytical Biochemistry 38:252–259. doi:10.1016/0003-2697(70)90174-0
    儀器幾何影響濁度讀值的經典出處。未讀全文;相關數字請引用 3 與 6。The classic source for instrument geometry affecting turbidity readings. Full text not read; take numbers from 3 and 6.
  6. Deutzmann J.S. et al. (2022). Low-cost clamp-on photometers (ClampOD) and tube photometers (TubeOD) for online cell density determination. Frontiers in Microbiology 12:790576. doi:10.3389/fmicb.2021.790576
    琥珀色 LED 加光電晶體的低成本線上光度計。把空白調到滿刻度的約 90% 才有完整線性範圍;偵測器輸出低於滿刻度約 0.3%(OD × 光程 > 2.5)後失準;裝置對溫度敏感。Low-cost online photometers with an amber LED and a phototransistor. The blank must sit near 90% of full scale for the full linear range; accuracy fails once sensor output drops below about 0.3% of full scale (OD × path > 2.5); the devices are temperature sensitive.

B. subtilis 與 WB800and WB800

  1. Wu S.-C. et al. (2002). Functional production and characterization of a fibrin-specific single-chain antibody fragment from Bacillus subtilis: effects of molecular chaperones and a wall-bound protease on antibody fragment production. Applied and Environmental Microbiology 68:3261–3269. doi:10.1128/AEM.68.7.3261-3269.2002
    WB800 的建構:在 WB700 的七個蛋白酶缺失(nprE aprE epr bpr mpr nprB vpr)上再去掉 wprA。Construction of WB800: wprA inactivated on top of the seven protease deletions of WB700 (nprE aprE epr bpr mpr nprB vpr).
  2. Jeong H. et al. (2018). Complete genome sequence of Bacillus subtilis strain WB800N, an extracellular protease-deficient derivative of strain 168. Microbiology Resource Announcements 7:e01380-18. doi:10.1128/MRA.01380-18
  3. Tsuge K., Ohata Y., Shoda M. (2001). Gene yerP, involved in surfactin self-resistance in Bacillus subtilis. Antimicrobial Agents and Chemotherapy 45:3566–3573. doi:10.1128/AAC.45.12.3566-3573.2001
    168 因 sfp 突變而不產 surfactin。168 does not make surfactin because of a mutation in sfp.
  4. Sharpe M.E., Hauser P.M., Sharpe R.G., Errington J. (1998). Bacillus subtilis cell cycle as studied by fluorescence microscopy. Journal of Bacteriology 180:547–555. doi:10.1128/JB.180.3.547-555.1998
    世代時間從 73 分鐘縮到 30 分鐘,平均細胞長度從 2.2 µm 增到 4.5 µm;寬度維持約 0.81–0.86 µm。As generation time falls from 73 to 30 min, mean cell length rises from 2.2 to 4.5 µm; width stays near 0.81–0.86 µm.
  5. Weart R.B. et al. (2007). A metabolic sensor governing cell size in bacteria. Cell 130:335–347. doi:10.1016/j.cell.2007.05.043
  6. Kearns D.B., Losick R. (2005). Cell population heterogeneity during growth of Bacillus subtilis. Genes & Development 19:3083–3094. doi:10.1101/gad.1373905
    指數中期的培養同時含有單顆游動細胞與不游動的長鏈。它對 OD 的影響是我們的推論,該文未量 OD。Mid-exponential cultures contain both single motile cells and long sessile chains. The consequence for OD is our inference; the paper measures no OD.
  7. Katz A. et al. (2005). In situ determination of refractive index and size of Bacillus spores by light transmission. Optics Letters 30:589–591. doi:10.1364/OL.30.000589
    孢子核心折射率約 1.51,活化後降到約 1.39。只讀了摘要。Spore core index near 1.51, falling to about 1.39 after activation. Abstract only.
  8. Hirose Y. et al. (2008). Cyanobacteriochrome CcaS is the green light receptor that induces the expression of phycobilisome linker protein. PNAS 105:9528–9533. doi:10.1073/pnas.0801826105
    CcaS 的綠光吸收態在 535 nm、紅光吸收態在 672 nm;綠光啟動。CcaS absorbs at 535 nm in its green-absorbing form and 672 nm in its red-absorbing form; green light activates.

儀器與評審標準Instrument and judging

  1. ROHM. BH1750FVI digital 16-bit ambient light sensor, datasheet Rev. D (2011).
    高解析模式 1 lx、原始 count ÷ 1.2 = lux、量測時間典型 120 ms、因積分時間長而抑制 50/60 Hz 光雜訊。感度峰值在 560 nm;600 nm 的相對響應只有圖、沒有數值,本頁不引用。High-resolution mode 1 lx, raw count ÷ 1.2 = lux, typical measurement time 120 ms, 50/60 Hz light noise rejected by the long integration. Peak sensitivity at 560 nm; the relative response at 600 nm is given only as a graph, so this page does not quote one.
  2. iGEM Foundation. 2025 Judging Handbook, Special Prizes: Measurement. PDF
    四個面向:其他隊伍能否重複、protocol 是否寫清楚、對其他專案是否有用、是否用對照組驗證量測並校正單位。查證時 2026 版尚未取得。Four aspects: whether other teams could repeat it, whether the protocol is well described, whether it is useful to other projects, and whether controls were used to validate the measurement and calibrate units. The 2026 edition was not available when checked.

我們自己的資料與推導Our own data and derivations

  • 434 小時運轉紀錄 od600_log_20260721_034533.csv(2,720 筆,其中 2,671 筆有效);102 小時運轉紀錄(2026-09-02 至 09-06);2026-09-19 SiO₂ 滴定 sio2_conc_vs_od.csv。434-hour run log od600_log_20260721_034533.csv (2,720 rows, 2,671 valid); 102-hour run log (2 to 6 September 2026); silica titration of 19 September 2026, sio2_conc_vs_od.csv.
  • 現行系統:韌體 v3.10.9、後端 v4.12、介面 v4.13(2026-10-10 取得的套件與介面截圖)。較早的 od600_monitor(7 月)與數位孿生用的 releaf_br01_v2.ino 僅作對照。Current system: firmware v3.10.9, backend v4.12, interface v4.13 (package and interface screenshots obtained 10 Oct 2026). The earlier od600_monitor (July) and the digital-twin sketch releaf_br01_v2.ino are used for comparison only.
  • 3.1–3.6 節的公式是本頁的推導,數值以 analysis/replay_algorithms.py --selftest 與蒙地卡羅驗算。漏光上限的式子同樣是推導,沒有引用外部來源。The formulas in sections 3.1–3.6 are derived here and checked numerically with analysis/replay_algorithms.py --selftest and Monte Carlo. The stray-light ceiling is likewise a derivation, not a cited result.
  • 微球規格(1 µm、2.3 g/cm³、折射率 1.46)來自供應商標示,未經我們獨立量測。Bead specifications (1 µm, 2.3 g/cm³, index 1.46) are the supplier's stated values, not independently measured by us.

SiO₂ Calibration Assay · 2026-10-10

兩台光度計、四個估計器、
一台 BioDrop 當裁判
Two photometers, four estimators, one BioDrop as referee

今天用 1 µm SiO₂ 微球做 50 次累加,同時讀兩台 inline 光度計(傾斜版、光纖簡化版)與 BioDrop。這一頁先講四個估計器差在哪,再把 SOP v1.1 畫成看得懂的流程,最後寫下實驗前的預測,做完再回來對答案。Today we dose 1 µm silica microspheres 50 times and read two inline photometers (the tilted version and the simplified fibre version) alongside a BioDrop. This page explains how the four estimators differ, draws SOP v1.1 as a procedure you can follow, and writes down our predictions before the run so we can check them afterwards.

51
個濃度點(n = 0 到 50),0 到 1.59 mg/mLconcentration points (n = 0 to 50), 0 to 1.59 mg/mL
3
台儀器讀同一杯液體:光度計 1、光度計 2、BioDropinstruments reading the same liquid: photometer 1, photometer 2, BioDrop
4
個估計器:mad、qn、biweight、upperestimators: mad, qn, biweight, upper
8
條寫在實驗前的預測,每條都有數字門檻predictions written before the run, each with a numeric threshold

A1 · 四個估計器The four estimators

同樣 14 個樣本,四種「取代表值」的方法The same 14 samples, four ways to pick one value

每次量測,LED 亮起,感測器連續讀 16 次,丟掉前 2 次,剩 14 個數字。估計器的工作是把這 14 個數字變成一個。四個估計器的第一步都一樣:先找中位數。差別在接下來相信哪些樣本。In each measurement the LED turns on, the sensor reads 16 times, the first 2 are dropped, and 14 numbers remain. The estimator's job is to turn those 14 into one. All four begin the same way, by finding the median. They differ in which samples they then trust.

估計器Estimator怎麼決定「正常範圍」How it sets the normal range怎麼用樣本How it uses the samples一句話In one line
mad E-1
現行current
MAD:每個樣本到中位數的距離,再取中位數MAD: the median of each sample's distance from the median中位數 ± 3×MAD 以內的全部平均,以外的丟掉averages everything within median ± 3×MAD, discards the rest兩邊對稱地切掉離群值cuts outliers symmetrically on both sides
qn E-2Qn:所有「兩兩差距」裡偏小的那一個分位數Qn: a low quantile of all pairwise differences同 mad,只是門檻寬度用 Qn 算as mad, with the gate width computed from Qn換一把尺量離散度,切法不變a different ruler for spread, the same cut
biweight E-5MAD(同 mad)MAD (as in mad)不是「留或丟」,而是離中心越遠權重越低,到 4.685×MAD 降為 0no keep-or-drop: weight falls with distance from the centre and reaches 0 at 4.685×MAD軟性降權,不硬切soft down-weighting instead of a hard cut
upper E-3MAD,只用來數有幾個被判成氣泡MAD, used only to count how many are flagged as bubbles只平均「大於等於中位數」的那一半averages only the half at or above the median只相信比較亮的樣本,因為氣泡只會讓光變暗trusts only the brighter samples, because bubbles can only darken

看一個 burst:每個估計器留下了誰One burst: who each estimator keeps

每個點是一個樣本。實心=被採用,空心=被丟掉或沒用到,顏色越淡=權重越低each dot is one sample. filled = used, hollow = dropped or unused, paler = lower weight

重複 4000 個 burst:典型誤差,以及有多少次讀錯4000 bursts repeated: the typical error, and how often a reading is wrong

每格是「誤差的中位數 · 誤差超過 0.05 OD 的讀值比例」,已乘光程係數 5。色塊越深代表越常讀錯each cell is median error · share of readings off by more than 0.05 OD, path factor of 5 applied. darker shading means wrong more often

三個重點。第一,mad、qn、biweight 在四種情況下幾乎一樣。第二,氣泡一多,這三個讀錯的比例一起上升到約 18%,upper 不到一半;氣泡少的時候四個都很少讀錯。第三,upper 在乾淨時有一個小的固定偏移(通道估計值偏高約 0.75σ):只要空白也用 upper 量,偏移會互相抵消;空白若用別的估計器量,偏移就留在 OD 裡。Three points. First, mad, qn and biweight are nearly identical in all four cases. Second, with many bubbles those three go wrong together about 18% of the time and upper less than half as often; with few bubbles all four are rarely wrong. Third, upper carries a small fixed offset when clean (the channel estimate sits about 0.75σ high): it cancels as long as the blank was also taken with upper, and stays in the OD if the blank was taken with another estimator.

今天最容易犯的錯:空白跟估計器不配對。韌體只存一個 blankRatio,是「按下校正空白當時」的估計器算出來的。切到另一個估計器後,OD 仍然用舊的空白。所以今天的 OD 不看介面上的數字,而是事後用 CSV 裡的 lux_sample、lux_ref 重算:每個估計器用它自己在 n = 0 的比值當空白。The easiest mistake today: a blank that does not match the estimator. The firmware stores one blankRatio, computed by whichever estimator was active when the blank button was pressed. After switching estimator, OD is still computed against that old blank. So today's OD is not read off the interface. It is recomputed afterwards from lux_sample and lux_ref in the CSV, with each estimator using its own ratio at n = 0 as its blank.

A2 · 實驗怎麼做How the assay runs

一杯水,一個循環,三台儀器One beaker, one loop, three instruments

依 SOP v1.1(2026-10-10)。每次先取走 1 mL、再加 1 mL 工作液,總體積維持 50 mL。Following SOP v1.1 (10 Oct 2026). Each cycle removes 1 mL and then adds 1 mL of working stock, holding the total at 50 mL.

兩台光度計串聯在同一條管路上,讀到的是同一份液體。BioDrop 讀的是從燒杯取出的 1 mL。三個讀值來自同一個濃度狀態 Cn,可以一點對一點比較。The two photometers sit in series on one line and see the same liquid. The BioDrop reads the 1 mL taken from the beaker. All three readings come from the same state Cn and can be paired point by point.

開始前(約 30 分鐘)Before you start (about 30 minutes)

試劑Reagent

  1. 原液(25 mg/mL)先 vortex 30 秒。Vortex the stock (25 mg/mL) for 30 s.
  2. 6 mL 原液 + 54 mL DI 水 → 60 mL 工作液(2.5 mg/mL)。6 mL stock + 54 mL DI water → 60 mL of working stock (2.5 mg/mL).
  3. 工作液每次吸取前都要 vortex。微球每小時沉約 3 mm,放著不動濃度就不對了。Vortex the working stock before every draw. The beads sink about 3 mm per hour; left standing, the concentration is wrong.

管路與空白Loop and blank

  1. 先量管路體積 vt。空管路接好後,量筒裝 DI 水灌滿管路與兩個 flow cell,記下用掉幾 mL。Measure the hold-up volume vt first. With the empty loop connected, fill the tubing and both flow cells from a measuring cylinder and note the mL used.
  2. 燒杯加 50 mL DI 水,開攪拌、開幫浦(約 60 mL/min),趕走所有氣泡。Add 50 mL DI water to the beaker, start stirring and the pump (about 60 mL/min), and clear every bubble.
  3. 循環 3 分鐘後,記下兩台的 sample 與 reference(lux)。reference 應 ≥ 250 lx,不到就先調光路。After 3 min of circulation note sample and reference (lux) on both. Reference should be ≥ 250 lx; if not, adjust the optics first.
  4. 兩台都按「校正空白」,確認介面頂端的黃色提示消失。Press "calibrate blank" on both and confirm the yellow banner at the top has gone.
  5. 四個估計器各量 3 筆空白(切換方法見下)。這就是各自的空白比值。Take 3 blank readings with each of the four estimators (switching described below). These are their individual blank ratios.
  6. 從燒杯取 1 mL DI 水當 BioDrop 的空白。不要補水,燒杯現在是 49 mL。Take 1 mL of DI water from the beaker as the BioDrop blank. Do not top up; the beaker now holds 49 mL.

介面設定(兩台都要)Interface settings (on both)

  • 按「開始錄製」。今天所有數字都從板上的 CSV 來,不靠手抄。Press "start recording". All of today's numbers come from the CSV on the board, not from hand copying.
  • 取樣時長(=OD 量測間隔)設 5 秒,光程係數維持 5。Set the sampling window (which is the OD interval) to 5 s; keep the path factor at 5.
  • 準備一張紙本時間表:每次加樣的時刻與 n。CSV 沒有 n 這一欄,事後靠時間對回去。Keep a paper time sheet: the clock time and n of every addition. The CSV has no column for n; it is matched back by time.
  • 若光纖簡化版沒有「演算法切換」,就讓它用自己的演算法全程錄製,並在時間表上註明。If the simplified fibre version has no algorithm switch, let it record throughout with its own algorithm and note that on the time sheet.

一個循環(重複 50 次)One cycle (repeated 50 times)

1

加Add

vortex 工作液,吸 1 mL 加進燒杯。寫下時刻。Vortex the working stock, add 1 mL to the beaker. Write down the time.

~30 s
2

等Wait

3 分鐘(至少循環三圈)。看一眼 flow cell 有沒有氣泡。3 minutes (at least three loop turnovers). Check the flow cells for bubbles.

3 min
3

讀Read

一般循環:維持 mad,等 3 筆新讀值。每 5 個循環(n = 5, 10, …, 50):四個估計器各 3 筆。Ordinary cycle: stay on mad, wait for 3 new readings. Every 5th cycle (n = 5, 10, …, 50): 3 readings with each of the four estimators.

20 s / 90 s
4

取Take

從燒杯取 1 mL,立刻上 BioDrop。Take 1 mL from the beaker and go straight to the BioDrop.

~20 s
5

BioDrop

輕輕混勻,1 分鐘內讀完,寫在紀錄表。理論 OD > 1.0 的點再做一次 5 倍稀釋。Mix gently, read within 1 minute, write it on the log. Where the theoretical OD exceeds 1.0, also read a 5-fold dilution.

~60 s

四估計器的切換順序每次往後輪一格(n = 5:mad→qn→biweight→upper;n = 10:qn→biweight→upper→mad;以此類推),這樣濃度若在 90 秒內有微小漂移,不會總是落在同一個估計器頭上。切換後要等「下一個視窗」才生效,所以每次切換後的第一筆不算。Rotate the starting estimator each time (n = 5: mad→qn→biweight→upper; n = 10: qn→biweight→upper→mad; and so on), so that any small drift in concentration over those 90 s does not always fall on the same estimator. A switch takes effect from the next window, so discard the first reading after each switch.

現在在第幾步Where am I

循環小幫手Cycle helper

Cn,SOP 表(V = 50 mL)Cn, SOP table (V = 50 mL)Cn,計入管路體積Cn with hold-up included四估計器停靠點four-estimator stops氣泡挑戰bubble challenge

把 vt 拉到你實際量到的值。管路體積不計入的話,前面幾點的實際濃度會比表上低:vt = 8 mL 時,n = 5 低 13%、n = 50 低 9%。這會讓曲線看起來往上彎,卻跟光度計無關。Drag vt to the value you measured. If the hold-up is ignored, the true concentration of the early points is lower than tabulated: with vt = 8 mL, 13% lower at n = 5 and 9% lower at n = 50. That makes a curve appear to bend upward for a reason unrelated to the photometer.

三個加做的檢查Three added checks

下面三項不在 SOP v1.1 裡,是為了讓估計器的差別看得出來,以及讓 BioDrop 這個裁判本身可以被檢查。These three are not in SOP v1.1. They make the differences between estimators visible and let the referee, the BioDrop, be checked as well.

檢查Check什麼時候When怎麼做How為什麼Why
氣泡挑戰Bubble challengen = 10, 25, 40
(四估計器讀完之後)(after the four-estimator readings)
把進液管口提到液面讓它吸空氣 20–30 秒,氣泡通過 flow cell 時,四個估計器各錄 10 筆(順序同該站)。結束後確認氣泡清乾淨再繼續。Lift the inlet to the surface so it draws air for 20–30 s; while bubbles pass the flow cells, record 10 readings with each estimator (same order as that stop). Confirm the loop is clear again before continuing.乾淨的微球懸浮液裡四個估計器預期一樣;只有干擾才分得出來in clean bead suspension the four are expected to agree; only a disturbance separates them
BioDrop 稀釋對照BioDrop dilution check理論 OD > 1.0 的點(n ≥ 10)points with theoretical OD above 1.0 (n ≥ 10)同一份 1 mL:先直接讀,再取 200 µL + 800 µL DI 水,vortex,讀,乘 5。兩個值都記。from the same 1 mL: read it directly, then mix 200 µL + 800 µL DI water, vortex, read, multiply by 5. Record both.8/23 的 TiO₂ 實驗裡 BioDrop 在 OD 1.2 以上不穩。裁判要先被檢查in the 23 Aug TiO₂ run the BioDrop was unstable above OD 1.2. The referee has to be checked first
收尾空白Closing blankn = 50 之後after n = 50排空,DI 水沖三次,裝 50 mL DI 水循環 3 分鐘,四個估計器各 3 筆。Drain, rinse three times with DI water, circulate 50 mL DI water for 3 min, 3 readings with each estimator.頭尾空白的差就是這四個多小時裡的漂移加上微球殘留the difference between opening and closing blank is the drift over the run plus bead carry-over

時間估計Time budget

一般循環約 5 分鐘 × 40 = 3.3 小時;四估計器停靠點約 6.5 分鐘 × 10 = 1.1 小時;三次氣泡挑戰約 15 分鐘;前置與收尾約 45 分鐘。合計約 5.5 小時。兩個人分工(一人加樣與介面,一人 BioDrop 與紀錄)會順很多。Ordinary cycles about 5 min × 40 = 3.3 h; four-estimator stops about 6.5 min × 10 = 1.1 h; three bubble challenges about 15 min; set-up and close about 45 min. About 5.5 hours in total. Two people make it far smoother: one doses and drives the interface, one runs the BioDrop and the log.

紀錄表Log sheet

下載 CSV 紀錄表:51 列,已填好 Cn、理論 OD、該點要不要稀釋、是不是四估計器停靠點或氣泡挑戰點。空欄是加樣時刻、BioDrop 直讀、BioDrop 稀釋後讀值與備註。Download the CSV log sheet: 51 rows with Cn, theoretical OD, whether to dilute, and whether the point is a four-estimator stop or a bubble challenge already filled in. The blank columns are addition time, BioDrop direct reading, BioDrop diluted reading and remarks.

出現氣泡Bubbles appear

輕彈管路或短暫加快流速趕走。那個循環重新等 3 分鐘,並在備註寫下。不要刪資料。Tap the tubing or briefly raise the flow to clear them. Restart the 3 min wait for that cycle and note it. Do not delete data.

加錯體積Wrong volume added

照實寫下實際加了多少,繼續做。濃度是遞迴算的,事後可以用實際體積重算;不寫就救不回來。Write down what was actually added and carry on. The concentration is recursive and can be recomputed from true volumes afterwards; unrecorded, it cannot.

n = 5 差很多n = 5 looks far off

BioDrop 在 n = 5 理論約 0.55。差超過 3 倍就停下來檢查:微球有沒有 vortex、管路有沒有氣泡、稀釋有沒有算錯。The BioDrop should read about 0.55 at n = 5. If it is off by more than 3-fold, stop and check: was the stock vortexed, are there bubbles, is the dilution right.

A3 · 實驗前的預測Predictions before the run

八條假說,每一條都可能被今天的數據推翻Eight hypotheses, each of which today's data could overturn

寫於 2026-10-10 實驗開始前。門檻是事先定的;「結果」欄做完再填,不論對錯都保留。Written on 10 Oct 2026 before the run. The thresholds are fixed in advance; the result column is filled in afterwards and kept whether right or wrong.

預測的三條曲線The three predicted curves

色帶是預測範圍,不是數據bands are predicted ranges, not data

單次散射理論(2.3 OD per mg/mL)single-scattering theory (2.3 OD per mg/mL)BioDrop 直讀BioDrop, directinline 光度計(×5)inline photometer (×5)

BioDrop 的預測在低濃度貼著理論線,約 OD 1 以上開始往下彎(多重散射加上儀器上限)。Inline 的預測斜率比 BioDrop 低:它的 flow cell 只有 2 mm,偵測器離樣品近,會收進較多向前散射的光。The BioDrop prediction follows theory at low concentration and bends below it from about OD 1 (multiple scattering plus the instrument's ceiling). The inline prediction has a lower slope than the BioDrop: its flow cell is only 2 mm and its detector sits close to the sample, so it collects more forward-scattered light.

#假說Hypothesis理由Reasoning怎麼核對How to check成立的門檻Threshold to pass結果Result
H1BioDrop 在低濃度與理論一致The BioDrop agrees with theory at low concentration1 µm、折射率 1.46 的微球,異常繞射近似給 2.3 OD per mg/mLthe anomalous diffraction approximation gives 2.3 OD per mg/mL for 1 µm beads of index 1.46BioDrop 對 Cn(已計入 vt),取 n = 1–8 的斜率BioDrop against Cn (hold-up included), slope over n = 1–8斜率在 1.8–2.8 OD·mL/mgslope within 1.8–2.8 OD·mL/mg
H2BioDrop 直讀在高濃度偏低;稀釋後的讀值才接近直線Direct BioDrop readings fall low at high concentration; diluted readings stay near the line多重散射;8/23 的 TiO₂ 實驗 BioDrop 在 1.2 以上不穩multiple scattering; the BioDrop was unstable above 1.2 in the 23 Aug TiO₂ run同一份樣品:直讀 vs 稀釋 5 倍 × 5same sample: direct against 5-fold diluted × 5理論 OD ≥ 2 的點,直讀比稀釋值低 10% 以上at theoretical OD ≥ 2, direct is more than 10% below the diluted value
H3Inline(×5)讀得比 BioDrop 低Inline (×5) reads below the BioDrop光程短、偵測器近,收進較多前向散射。1 µm 微球的前向散射比 8/23 的 TiO₂ 強,所以比值應低於那次的 1.02short path and a near detector collect more forward scatter. 1 µm beads scatter forward more strongly than the TiO₂ of 23 Aug, so the ratio should fall below that run's 1.02inline(mad)對 BioDrop(稀釋校正後),BioDrop < 1.0 的範圍取斜率inline (mad) against BioDrop (dilution-corrected), slope where BioDrop < 1.0斜率在 0.6–1.0slope within 0.6–1.0
H4光纖版的斜率高於傾斜版,線性範圍也較寬The fibre version has a higher slope than the tilted version and a wider linear range光纖只接受小角度內的光,把更多散射光排除在外。前提:光纖在偵測端。若光纖在光源端,這條不適用a fibre accepts light only within a small angle and so rejects more scattered light. Assumes the fibre is on the detector side. If it is on the source side this does not apply兩台各自對 BioDrop 的斜率;各自偏離低段直線 5% 的濃度each instrument's slope against the BioDrop; the concentration at which each departs 5% from its low-range line光纖版斜率較高,且 5% 偏離點的濃度不低於傾斜版fibre slope is higher, and its 5% departure point is at a concentration no lower than the tilted version's
H5乾淨循環下,四個估計器給同一個 ODIn clean circulation the four estimators give one and the same OD沒有離群值時,四者都接近平均值;upper 的固定偏移被它自己的空白抵消with no outliers all four approach the mean; the fixed offset of upper is cancelled by its own blank11 個停靠點,各估計器用自己的空白重算 OD,對 mad 取差at the 11 stops, OD recomputed with each estimator's own blank, difference from madqn、biweight 與 mad 的差 |Δ| ≤ 0.01;upper |Δ| ≤ 0.02qn and biweight within |Δ| ≤ 0.01 of mad; upper within |Δ| ≤ 0.02
H6有氣泡時,upper 的離散明顯小於另外三個With bubbles, upper scatters far less than the other three氣泡只讓光變暗;upper 只用亮的那一半。模擬:35% 樣本被遮時,誤差超過 0.05 OD 的讀值是 18% 對 7.5%bubbles only darken; upper uses only the brighter half. Simulation: with 35% of samples hit, readings off by more than 0.05 OD are 18% against 7.5%三次氣泡挑戰,每個估計器 10 筆的 SDSD of the 10 readings per estimator in the three bubble challenges三次中至少兩次 SD(upper) ≤ ½ × SD(mad)SD(upper) ≤ ½ × SD(mad) in at least two of the three
H7有氣泡時,mad、qn、biweight 彼此仍然分不出來With bubbles, mad, qn and biweight still cannot be told apart三者用同一個中位數當中心,14 個樣本下門檻寬度的差別不改變誰被留下all three centre on the same median, and with 14 samples the difference in gate width does not change which samples survive同上的 SD 與平均SD and mean from the same challenges三者的 SD 互相在 2 倍以內,平均差 ≤ 0.05their SDs within a factor of 2 of each other, means within 0.05
H89/19 的「曲線向上彎」主要不是光度計造成的The upward bend seen on 19 Sept was mostly not caused by the photometer那次沒有 BioDrop 逐點配對,也沒計入管路體積。管路體積會造成向上彎,但 8 mL 只讓後段對前段的斜率比變成 1.07,當時是 1.20that run had no point-by-point BioDrop and ignored hold-up. Hold-up does bend the curve upward, yet 8 mL raises the late-to-early slope ratio only to 1.07, against the 1.20 seen畫兩張圖:inline 對 Cn、inline 對 BioDrop(稀釋校正後),各取 n = 1–12 與 n = 25–36 的斜率比two plots: inline against Cn and inline against BioDrop (dilution-corrected); ratio of the slope over n = 25–36 to that over n = 1–12 in eachinline 對 BioDrop 的斜率比在 0.95–1.05(直線)slope ratio for inline against BioDrop within 0.95–1.05 (straight)

H8 怎麼讀Reading H8

inline 對 BioDrop:直線inline against BioDrop: straightinline 對 BioDrop:向上彎inline against BioDrop: bends upward
inline 對 Cn:直線inline against Cn: straight一切正常;9/19 是那次特有的問題all is well; 19 Sept was specific to that runBioDrop 在高濃度讀低(對照 H2)the BioDrop reads low at high concentration (see H2)
inline 對 Cn:向上彎inline against Cn: bends upward濃度算錯了(管路體積、加樣誤差累積、沉降),光度計沒問題the concentration is wrong (hold-up, accumulated pipetting error, settling); the photometer is fine光度計本身超線性,要查暗場或漏光the photometer itself is super-linear; look at the dark level or stray light
BioDrop 是裁判,但不是真值。它也是一台會受幾何與多重散射影響的儀器。濃度的依據是加進去的體積;BioDrop 的角色是提供一台獨立儀器、同一份液體的逐點比較。H1 和 H2 就是在檢查裁判。The BioDrop is the referee, not the truth. It too is an instrument subject to geometry and multiple scattering. Concentration rests on the volumes added; the BioDrop's role is a point-by-point comparison from an independent instrument on the same liquid. H1 and H2 are checks on the referee.

A4 · 做完之後After the run

帶回來的檔案,與它們會變成的圖The files to bring back, and the figures they become

檔案File來源From用途Used for
兩台的 record_*.csvrecord_*.csv from both介面「板子上的錄製檔」"recordings on the board" in the interfacelux_sample、lux_ref、alg_profile、時間戳。所有 OD 由這裡重算lux_sample, lux_ref, alg_profile, timestamps. Every OD is recomputed from these
紀錄表(CSV 或拍照)the log sheet (CSV or photo)今天手填filled in by hand today每個 n 的加樣時刻、BioDrop 直讀與稀釋讀值、備註addition time for every n, BioDrop direct and diluted readings, remarks
vt開始前量的measured before starting修正 Cncorrects Cn
兩台光度計在管路上的照片photos of both photometers on the loop手機phone位置與間距;H4 需要知道光纖在哪一端position and spacing; H4 needs to know which end the fibre is on

會做出的五張圖The five figures

  1. 三台儀器對 Cn 的校正曲線與殘差(H1、H3、H4)calibration curves and residuals of all three against Cn (H1, H3, H4)
  2. BioDrop 直讀對稀釋後讀值(H2)BioDrop direct against diluted (H2)
  3. inline 對 BioDrop 的逐點配對與 Bland–Altman(H3、H8)inline against BioDrop, paired, with Bland–Altman (H3, H8)
  4. 四估計器在 11 個停靠點的差(H5)differences between the four estimators at the 11 stops (H5)
  5. 氣泡挑戰:四估計器的散布(H6、H7)bubble challenges: scatter of the four estimators (H6, H7)

這個設計量不到的事What this design cannot measure

今天每個估計器看到的是不同的 burst(輪流切換),不是同一批樣本。所以四者的比較帶有 burst 之間的隨機差異,要靠每站 3 筆、共 11 站來平均。要做到「同一批樣本、四種算法」,需要韌體把 burst 內的個別樣本存下來(目前 OD_VERBOSE_LOG 是 0)。如果今天來得及開,重播腳本可以直接用。Today each estimator sees a different burst (they take turns), not the same samples. The comparison therefore carries burst-to-burst randomness, averaged down by 3 readings at each of 11 stops. Comparing four algorithms on identical samples needs the firmware to store the individual samples inside a burst (OD_VERBOSE_LOG is currently 0). If that can be switched on today, the replay script will use it directly.

10/10 結果 · SiO₂ 校正與氣泡測試10 Oct results · SiO₂ calibration and bubble test

估計器不是重點,
閘門才是
The estimator is not the lever.
The gate is.

兩台光度計串在同一條管路上,讀同一份 1 µm SiO₂ 懸浮液 4.5 小時,41 個濃度點,每 5 秒一筆,8 個估計器每一筆都記下來。乾淨循環時 8 個估計器的差不到 0.004 OD;有氣泡時沒有一個估計器救得回來。真正有效的是在估計器之後加的兩道閘門。Two photometers in series read the same 1 µm silica suspension for 4.5 h: 41 concentrations, one reading every 5 s, all eight estimators logged on every reading. In clean flow the eight differ by less than 0.004 OD. With bubbles none of them rescues the reading. What works is two gates placed after the estimator.

0.004
OD,乾淨循環下 8 個估計器之間的最大差(40 個濃度點)OD, largest gap between the eight estimators in clean flow (40 concentrations)
1.0–1.7
OD,V1 氣泡讀值的 RMSE,不論用哪個估計器OD, RMSE of V1 bubble readings, whichever estimator is used
0%
氣柱(flow cell 裡整段是空氣)被韌體旗標抓到的比例of air slugs (flow cell full of air) caught by the firmware flag
0.016
OD,加上兩道閘門後,整個氣泡測試的最大誤差(V1,原本 2.44)OD, largest error over the whole bubble test with both gates (V1; 2.44 without)

R1 · 實際做了什麼What was actually run

和計畫不一樣的地方,先講清楚Where the run differed from the plan

項目ItemSOP v1.1 計畫SOP v1.1 plan10/10 實際10 Oct actual影響Consequence
濃度點Concentrationsn = 0–50n = 0–40(每步 2.5 mg,累計 100 mg)(2.5 mg per step, 100 mg in total)足夠;V1 讀到 3.17,BioDrop(稀釋校正)約 3.6enough: V1 reached 3.17, BioDrop (dilution-corrected) about 3.6
韌體Firmwarev3.10.9,4 個估計器輪流切換, four estimators switched in turnphotometer-fw/py v1.2.0,5 秒一筆,8 個估計器同時記錄,另存原始 burst, one reading per 5 s, eight estimators logged together, raw bursts saved比計畫好:每個估計器都看到完全相同的樣本,不用輪流better than planned: every estimator saw identical samples, no rotation needed
介面顯示的估計器Estimator shown in the UImadupper手抄的 V1、V2 與 CSV 的 od_upper 一致(中位差 0.0000),與 mad 差 0.0005。手抄值是 upper,不是 madthe hand-copied V1/V2 values match od_upper in the CSV (median gap 0.0000) and differ from mad by 0.0005. The manual values are upper, not mad
氣泡挑戰Bubble challengen = 10、25、40 各一次once each at n = 10, 25, 40n = 40 之後一次,約 11 分鐘once after n = 40, about 11 minH6、H7 只有 2 次(兩台各一次)可判H6 and H7 rest on two challenges (one per unit), not three
管路體積 vtHold-up vt開始前量measured before start50 mL(事後確認)50 mL (confirmed afterwards)Cn 依 V = 50 mL 計算Cn computed with V = 50 mL
V1 氣泡測試原始 burstV1 bubble-test raw bursts—Complete version bubble test raw data.csv 和處理後的檔案逐位元組相同Complete version bubble test raw data.csv is byte-identical to the processed fileV1 的 burst 內部分析改用主實驗裡被標記的 burstV1 burst-level analysis uses the flagged bursts of the main run instead
11:08–11:22 UTC(19:08–19:22)11:08–11:22 UTC (19:08–19:22 local)—紀錄表沒有寫,但兩台都出現空氣通過的特徵,V1 有 6 分鐘停在 0.79not in the log, but both units show air passing; V1 sat at 0.79 for 6 min從平台統計中排除;當作第三次(非刻意的)氣柱事件分析excluded from the plateau statistics; analysed as a third, unplanned air event

所有數字都從兩台的 CSV 重算;分析程式在 analysis/sio2_1010_*.py,依序執行即可重現。原始 burst 用「丟前 2 個樣本、扣暗場、每通道各自估計、再相除」可以重現 CSV 裡的 8 個 OD,最大差 0.005 OD。Every number is recomputed from the two CSVs; the scripts are analysis/sio2_1010_*.py, run in order. Dropping the first two samples, subtracting the dark level, estimating each channel and then taking the ratio reproduces all eight logged OD columns from the raw bursts to within 0.005 OD.

R2 · 乾淨循環Clean flow

沒有干擾時,8 個估計器是同一個數Without a disturbance, the eight estimators give one number

每個濃度點:各估計器減去 mad(各自用自己的空白)Each concentration: every estimator minus mad (each with its own blank)

藍=對稱型(qn、biweight、mean、median);橘=單側型(upper、p75、p90)。每點是一個平台的中位數blue = symmetric (qn, biweight, mean, median); orange = one-sided (upper, p75, p90). Each point is one plateau median

V1 最大差 0.0039 OD(p90),V2 最大差 0.0018 OD。8/23 TiO₂ 校正的殘差 SD 是 0.024,所以估計器的選擇在乾淨時連雜訊的五分之一都不到。Largest gap 0.0039 OD on V1 (p90) and 0.0018 OD on V2. The residual SD of the 23 Aug TiO₂ calibration was 0.024, so in clean flow the choice of estimator is worth less than a fifth of the noise.

單筆讀值的短期雜訊(相鄰兩筆差 ÷ √2,去掉了漂移),40 個平台取中位數。V2 上 mad、qn、biweight 比 mean、median、百分位數低約 30%,因為 V2 的 burst 裡偶爾有單一離群樣本。Short-term noise of a single reading (difference of neighbours ÷ √2, drift removed), median over 40 plateaus. On V2, mad, qn and biweight are about 30% quieter than mean, median and the percentiles, because V2 bursts occasionally carry a single outlying sample.

R3 · 氣泡Bubbles

氣泡不一定讓光變暗Bubbles do not only darken

我們設計 upper 的前提是「氣泡只會擋光」,所以只相信亮的那一半樣本。這次的資料推翻了這個前提,而且兩台方向不同:upper was built on the premise that bubbles only block light, so it trusts only the brighter half of the samples. This run overturns that premise, and the two units disagree in direction:

burst 內 14 個樣本相對於同一段乾淨 burst 的比值。V1 在 OD 3.2 的混濁液裡,氣泡把一段散射液體換成空氣,透光反而變多(最多 2.8 倍);也有擋光的時候(低到 0.10)。V2 的光纖收光角大,氣泡把光折出收光範圍,多半變暗。Each of the 14 samples in a burst divided by the clean burst level of the same episode. In V1, at OD 3.2, a bubble replaces a slice of scattering liquid with air and more light gets through (up to 2.8×); it also blocks light at times (down to 0.10×). V2's fibre collects over a wide angle, and a bubble refracts light out of that cone, so V2 mostly darkens.

氣泡測試:mad 與 upper,以及韌體認為有效的氣柱The bubble test: mad and upper, and the air slugs the firmware accepts

虛線=乾淨液位。× =韌體旗標為無效。灰底=flow cell 裡是空氣,讀值穩定但錯,韌體標成有效dashed = clean level. × = flagged invalid by the firmware. grey band = air in the flow cell: a steady, wrong reading the firmware marks valid

只算「有液體、有氣泡」的讀值(V1 34 筆、V2 29 筆)。V1 上單側型估計器最差:upper 91% 的讀值偏低超過 0.05。V2 上反過來,單側型稍好。沒有任何一個估計器讓超過 35% 的氣泡讀值落在 ±0.05 之內。Only readings with liquid and bubbles (34 on V1, 29 on V2). On V1 the one-sided estimators are worst: 91% of upper readings fall more than 0.05 low. On V2 it reverses and the one-sided ones are slightly better. No estimator puts more than 35% of bubble readings within ±0.05.

氣泡(burst 內不穩)Bubbles (unsteady within a burst)

14 個樣本彼此差很多。估計器之間的差(例如 mad − p90)會變大,韌體的氣泡旗標抓到 V1 的 94%、V2 的 79%。可以偵測,不能修正。The 14 samples disagree. The gap between estimators (for example mad − p90) widens, and the firmware's bubble flag catches 94% on V1 and 79% on V2. Detectable, not correctable.

氣柱(整段是空氣)Air slugs (the cell is full of air)

14 個樣本完全一致,只是整體錯了:V1 讀 0.74–0.91(應為 3.18),V2 讀 0.32(應為 0.60)。burst 內沒有任何異常可抓,旗標抓到 0%。只有「跟上一筆比」才看得出來。The 14 samples agree perfectly, and are all wrong together: V1 reads 0.74–0.91 (true 3.18), V2 reads 0.32 (true 0.60). Nothing inside the burst is abnormal, so the flag catches 0%. Only a comparison with the previous reading reveals it.

R4 · 閘門Gates

在估計器之後,加兩道閘門Two gates after the estimator

同一份資料,以 bioreactor 的節奏(每 30 秒一筆,六種起點全部平均)重播五種回報方式:The same data replayed at the bioreactor cadence (one reading per 30 s, all six phase offsets pooled) through five reporting pipelines:

  1. P0 upper,每筆都報(10/10 介面上的做法)upper, every reading reported (what the UI did on 10 Oct)
  2. P1 mad,每筆都報(v3.10.9 在 bioreactor 的預設)mad, every reading reported (the v3.10.9 default in the bioreactor)
  3. P2 P1 + 韌體旗標:無效就沿用上一筆有效值P1 + firmware flag: an invalid reading repeats the last valid value
  4. P3 P2 + 離散閘門:|mad − p90| > 0.03 OD 也視為無效P2 + spread gate: |mad − p90| > 0.03 OD is also invalid
  5. P4 P3 + 跳動閘門:和上一筆接受值差超過 max(0.05, 5%) 先不接受,連續 3 筆一致才接受新水準;輸出最近 3 筆接受值的中位數P3 + jump gate: a reading more than max(0.05, 5%) from the last accepted value is held back, and a new level is accepted only after 3 agreeing readings; the output is the median of the last 3 accepted values

「穩態」=每次加樣 150 秒之後,排除 11:08–11:22 的空氣事件。「延遲」=加樣後第一次回到新水準 ±0.02 之內的時間(中位數)。氣泡測試含氣柱讀值,所以 P2、P3 擋不住。"Steady" = more than 150 s after an addition, excluding the 11:08–11:22 air event. "Lag" = time after an addition until the output first comes within ±0.02 of the new level (median). The bubble test includes the slug readings, which is why P2 and P3 do not hold.

P0 與 P4,30 秒節奏P0 against P4 at the 30 s cadence

左:V1 氣泡測試。右:V1 在主實驗裡 11:04 起的空氣事件(6 分鐘的氣柱)left: V1 bubble test. right: V1's air event in the main run from 11:04 (a 6-minute slug)

右圖是 P4 的極限:氣柱持續超過 90 秒時,連續 3 筆一致的新水準會被接受。這時 P4 應該發出「無法解釋的跳動」警報,而不是默默地接受。生長中的菌液 30 秒內不會變 0.05 OD,所以任何被接受的大跳動都值得人去看。The right panel shows P4's limit: when a slug lasts longer than 90 s, three agreeing readings make the new level acceptable. At that moment P4 should raise an "unexplained step" alarm rather than accept silently. A growing culture does not move 0.05 OD in 30 s, so any accepted large step deserves a human look.

這些門檻是用同一份資料定的。τ = 0.03 是看乾淨讀值的最大離散(V1 0.026)選的;跳動門檻與 K = 3 是先驗選的,沒有調。下一次 bioreactor 跑是樣本外驗證:開跑前把 τ、跳動門檻、K 寫進預註記,不再改。These thresholds were set on the same data. τ = 0.03 was chosen from the largest spread among clean readings (0.026 on V1); the jump threshold and K = 3 were chosen beforehand and not tuned. The next bioreactor run is the out-of-sample test: freeze τ, the jump threshold and K in the pre-registration before it starts.

R5 · 參考通道The reference channel

V2 的參考通道有在工作,V1 的沒有V2's reference channel works; V1's does not

V2,12:44–13:04 UTC:光源暗了 40%,OD 沒動V2, 12:44–13:04 UTC: the source dims by 40% and OD does not move

上:樣本與參考通道的相對亮度。下:雙通道 OD(od_dual)與只用樣本通道的 OD(od_single)top: relative brightness of the sample and reference channels. bottom: dual-channel OD (od_dual) and sample-only OD (od_single)

12:51 左右兩個通道一起掉到 0.6 倍(有人碰到光纖或光源)。樣本對參考的追蹤係數 β = 0.97,od_dual 在整個平台上漂 −0.0005 OD/min,od_single 漂 0.025 OD/min。手抄的 90 mg 讀值 0.588 正好落在這段干擾裡,比前後兩點都高,是紀錄表裡唯一不單調的點。Around 12:51 both channels fall together to 0.6× (someone touched the fibre or the source). The sample tracks the reference with β = 0.97; across the plateau od_dual drifts −0.0005 OD/min while od_single drifts 0.025 OD/min. The hand-copied 90 mg value, 0.588, was taken inside this disturbance; it sits above both neighbours and is the only non-monotonic point in the log.

V2 · 光纖fibre

40 個平台裡,樣本對參考的追蹤係數 β 中位數 0.8(理想 1)。60 mg 停 24 分鐘:參考 −0.81%、樣本 −0.79%,od_dual 變 −0.0003,od_single 變 +0.017。雙通道把光源漂移扣掉了。Across 40 plateaus the sample tracks the reference with median β = 0.8 (ideal 1). In the 24-min hold at 60 mg: reference −0.81%, sample −0.79%; od_dual moves −0.0003, od_single +0.017. The dual channel removes source drift.

V1 · 分光鏡beam splitter

β 從 −1.2 到 0.97,中位數約 0.3:參考通道的變化大部分沒有出現在樣本通道。60 mg 停 24 分鐘:參考 +0.48%、樣本 −0.86%,od_dual 變 +0.029,比不用參考的 +0.019 還大。整場參考通道上升 11%(290 → 323 lux)。每次加樣時參考沒有跟著跳(平均 +0.04%/步),所以不是混濁液反射回去,是慢速的熱漂移,而且分光鏡兩側看到的不是同一束光。β runs from −1.2 to 0.97, median about 0.3: most of what the reference sees never reaches the sample channel. In the 24-min hold at 60 mg: reference +0.48%, sample −0.86%; od_dual moves +0.029, more than the +0.019 without the reference. Over the run the reference rose 11% (290 → 323 lux). It did not step at the additions (mean +0.04% per step), so this is not turbid liquid reflecting back; it is slow thermal drift, and the two sides of the splitter do not see the same light.

V1 在平台內的漂移最高到 0.015 OD/min(n = 9、13),同一時間串在同一條管路上的 V2 是 0.0000。液體是同一份,所以漂移在 V1 本身。Within plateaus V1 drifts up to 0.015 OD/min (n = 9, 13) while V2, on the same line at the same time, shows 0.0000. The liquid is shared, so the drift is in V1 itself.

R6 · 校正曲線Calibration

V2 一路直到底;V1 比較靈敏,但上端壓縮V2 stays straight to the top; V1 is more sensitive but compresses

三台儀器對濃度 Cn(SOP 取 1 加 1,V = 50 mL)All three instruments against concentration Cn (SOP withdraw-1-add-1, V = 50 mL)

左:讀值。右:相對於 n = 1–8 直線的偏離(%)left: readings. right: departure from the line through n = 1–8 (%)

V2 的斜率只有 V1 的 1/6:光纖收進大量前向散射光,同樣的濁度看起來比較透。換成 BioDrop 等效單位,V2 單筆雜訊是 0.005,V1 是 0.002:低濁度 V1 解析度好約 2.5 倍;到 n = 40,V2 只偏離低段直線 −2.9%,V1 偏離 −11.5%。BioDrop 本身每點相對散布約 5%,直讀從 n = 28 起被卡在 2.500,是三台裡最吵的一台。V2's slope is a sixth of V1's: the fibre collects a lot of forward-scattered light, so the same turbidity looks clearer. In BioDrop-equivalent units a single V2 reading carries 0.005 of noise and V1 0.002: V1 resolves about 2.5× better at low turbidity; at n = 40 V2 departs only −2.9% from its low-range line against V1's −11.5%. The BioDrop scatters about 5% per point and its direct reading is pinned at 2.500 from n = 28; it is the noisiest of the three.

V = 50 mL。讓 V2 最直的體積是 57 mL,比 50 mL 多約 7 mL,可能是管路裡的液體。只有 H1 受這個差影響:50 mL 時斜率 2.61(成立),57 mL 時 2.95(不成立)。校正架構之後另外討論。V = 50 mL. The volume that makes V2 straightest is 57 mL, about 7 mL more, which may be liquid held in the tubing. Only H1 depends on the difference: the slope is 2.61 at 50 mL (held) and 2.95 at 57 mL (failed). The calibration architecture is a separate discussion.

R7 · 對答案Checking the predictions

8 條預測:3 條成立,5 條不成立Eight predictions: 3 held, 5 failed

預測原文沒有改,結果填在 SiO₂ Assay 頁的表格最後一欄。The predictions are unchanged; the results are filled into the last column of the table on the SiO₂ Assay tab.

最重要的一條不成立是 H6。我們預測 upper 在氣泡下離散少一半,實際上 V1 是 0.77 對 0.78,V2 是 0.15 對 0.16;而且 V1 上 upper 的平均誤差是 mad 的兩倍。錯在「氣泡只會變暗」這個前提。The failure that matters most is H6. We predicted upper would scatter half as much under bubbles; it scattered 0.77 against 0.78 on V1 and 0.15 against 0.16 on V2, and on V1 its mean error was twice that of mad. The premise that bubbles only darken was wrong.

R8 · 下一輪 bioreactorThe next bioreactor run

建議設定Recommended configuration

#設定Setting依據Evidence
1burst 估計器用 mad(從 upper 切回來),切換後重新取空白Burst estimator mad (switch back from upper), and re-take the blank after switching乾淨時與其他 7 個相差 < 0.004;V2 雜訊最低之一;對稱,不押注氣泡的方向。單側型在 V1 上錯得最多within 0.004 of the other seven in clean flow; among the quietest on V2; symmetric, so it does not bet on the direction of a bubble. The one-sided estimators were the worst on V1
2burst 閘門:韌體旗標 或 |mad − p90| > 0.03 OD → 這筆不採用Burst gate: firmware flag or |mad − p90| > 0.03 OD → reading not used兩台都抓到 97% 的氣泡讀值,乾淨讀值誤殺 0%;主實驗中被拒的有效讀值 < 0.6%。兩個欄位 v1.2.0 已經在記catches 97% of bubble readings on both units with 0% of clean readings rejected; rejects < 0.6% of valid readings in the main run. Both columns are already logged by v1.2.0
3跳動閘門:與上一筆接受值差 > max(0.05 OD, 5%) 先不採用;連續 3 筆彼此一致才接受新水準,並發出警報Jump gate: a reading more than max(0.05 OD, 5%) from the last accepted value is held back; a new level is accepted after 3 mutually agreeing readings, with an alarm唯一抓得到氣柱的方法;兩台氣泡測試的最大誤差 2.44 → 0.016(V1)、0.28 → 0.003(V2)the only thing that catches air slugs; maximum bubble-test error 2.44 → 0.016 (V1) and 0.28 → 0.003 (V2)
4回報最近 3 筆接受值的中位數(30 秒節奏下是 90 秒的窗)Report the median of the last 3 accepted values (a 90 s window at the 30 s cadence)生長曲線的時間尺度是小時;V2 穩態最大誤差 0.069 → 0.008growth happens over hours; V2 steady-state maximum error 0.069 → 0.008
5原始 burst、8 個估計器、閘門決定全部記錄;回報值不覆蓋資料Log raw bursts, all eight estimators and every gate decision; the reported value never replaces data這次能做完整分析,全靠 v1.2.0 把這些都存了下來this analysis was possible only because v1.2.0 kept all of it
6長時間運轉優先用 V2;若 V1 同時串接,只當高解析度的輔助讀值For long runs, V2 is the primary unit; if V1 is in series, treat it as a high-resolution secondaryV2 的參考通道能扣掉 40% 的光源變化,V1 的參考通道會加入漂移(平台內最高 0.015 OD/min)V2's reference removes a 40% source change; V1's reference adds drift (up to 0.015 OD/min within a plateau)
7進液口固定在液面下、加氣泡阱;入液口不要靠近攪拌渦流Fix the inlet below the surface and add a bubble trap; keep the inlet away from the stirring vortex演算法只能拒絕壞讀值,不能補回讀值。少一個氣泡就少一個缺口an algorithm can reject a bad reading but cannot replace it. Every bubble avoided is a gap avoided

開跑前要補的Before the run

  1. 把 τ = 0.03、跳動門檻 max(0.05, 5%)、K = 3 寫進 PREREGISTRATION.md 並 commit。Write τ = 0.03, the jump threshold max(0.05, 5%) and K = 3 into PREREGISTRATION.md and commit.
  2. 確認 11:08–11:22 發生了什麼(停泵?換管?),寫進紀錄。Find out what happened at 11:08–11:22 (pump stopped? tubing changed?) and add it to the log.
  3. 重新匯出 V1 氣泡測試的原始 burst(現在的檔案是處理後 CSV 的複本)。Re-export the V1 bubble-test raw bursts (the current file is a copy of the processed CSV).
  4. V2 這次有 9 次感測器重新初始化(stuck_s/stuck_r),檢查 I²C 接線。V2 re-initialised its sensors 9 times (stuck_s/stuck_r); check the I²C wiring.