From 41846d31ea7400bf0b2b132b54eb2662fcbfda44 Mon Sep 17 00:00:00 2001 From: Dillon Corvino Date: Wed, 5 Aug 2026 13:32:36 +0200 Subject: [PATCH 1/2] Update liver digestion protocol to v2.0 (merge with AG Surace SOP #001) Workflow: perfuse (ice-cold PBS) -> gentleMACS -> 70 um syringe-plunger filtration -> wash spins -> Percoll -> ACK lysis. Protocol (MUS-LIV-DIG v1.2 -> v2.0): - Perfusion switched from MACS Buffer to ice-cold PBS; callout explaining that EDTA chelates collagenase cofactors and inhibits digestion. MACS Buffer remains correct for all subsequent steps. - 70 um filtration with 5 mL syringe plunger directly into a 50 mL tube is now mandatory after gentleMACS (previously only in the manual route, via a petri dish with dab/swirl recovery). - 50 g hepatocyte spin demoted from mandatory to an optional callout. - Two 40 mL washes at 400 g replace the single wash. - All 400 g wash spins in 50 mL tubes 5 -> 7 min; 15 mL tubes remain 5 min. Callout at first instance. - Percoll: density unchanged. Volume 10 mL in a 15 mL tube -> 25 mL in a 50 mL tube; 800 g/20 min/acc 7 -> 611 g/15 min/acc 9. Warning added that a 15 mL tube requires vacuum aspiration rather than pouring. Post-Percoll wash removed - straight to lysis. - ACK lysis standardised to 1 mL for 2 min, resolving a contradiction between the critical notes (2-5 min) and STEP 7 (30-60 s). - Final resuspension fixed at 5 mL; 96-well seeding guidance added. - Manual dissociation retained as a fallback route. Buffers: - New BUF-LIV-DIG merges BUF-LIV-DIG-COL-D and BUF-LIV-DIG-COL-IV. Collagenase D 1 mg/mL, Collagenase IV 0.5 mg/mL, DNase I raised to 50 ug/mL for both. Base may be DMEM, PBS, or HBSS. Old files archived. - BUF-PERC-37 -> v2.0. Density unchanged; adds an explicit dual-convention section documenting that 37% of isotonic stock and 33% final Percoll are the same solution (SIP is 90% Percoll, so 37 x 0.9 = 33.3), including the equivalence to the AG Surace "33% Percoll" recipe. Working volumes for MUS-LIV-DIG raised to 25 mL per 50 mL tube with a scaling table. - Registry and dependency CSVs updated. All recipe and scaling tables are computed in R chunks with stopifnot assertions on the resulting concentrations; rpm/RCF conversions verified against the Eppendorf 5810R specification. All files render. Co-Authored-By: Claude Opus 5 --- .../buf_mus_liver_digestion_col_D.qmd | 0 .../buf_mus_liver_digestion_col_IV.qmd | 0 protocols_src/_buffer_registry.csv | 5 +- protocols_src/_dependencies.csv | 6 +- .../buffers/buf_mus_liver_digestion.qmd | 164 ++++++++++++ protocols_src/buffers/buf_percoll_37pct.qmd | 131 ++++++++-- .../mouse/prot_mus_liver_digestion.qmd | 243 +++++++++++------- 7 files changed, 435 insertions(+), 114 deletions(-) rename protocols_src/{buffers => Archived_protocols}/buf_mus_liver_digestion_col_D.qmd (100%) rename protocols_src/{buffers => Archived_protocols}/buf_mus_liver_digestion_col_IV.qmd (100%) create mode 100644 protocols_src/buffers/buf_mus_liver_digestion.qmd diff --git a/protocols_src/buffers/buf_mus_liver_digestion_col_D.qmd b/protocols_src/Archived_protocols/buf_mus_liver_digestion_col_D.qmd similarity index 100% rename from protocols_src/buffers/buf_mus_liver_digestion_col_D.qmd rename to protocols_src/Archived_protocols/buf_mus_liver_digestion_col_D.qmd diff --git a/protocols_src/buffers/buf_mus_liver_digestion_col_IV.qmd b/protocols_src/Archived_protocols/buf_mus_liver_digestion_col_IV.qmd similarity index 100% rename from protocols_src/buffers/buf_mus_liver_digestion_col_IV.qmd rename to protocols_src/Archived_protocols/buf_mus_liver_digestion_col_IV.qmd diff --git a/protocols_src/_buffer_registry.csv b/protocols_src/_buffer_registry.csv index fda284c..21c6cca 100644 --- a/protocols_src/_buffer_registry.csv +++ b/protocols_src/_buffer_registry.csv @@ -2,9 +2,7 @@ buffer_id,buffer_name,filename BUF-FACS-MACS,FACS/MACS Buffer,buf_facs_macs_buffer.qmd BUF-RBC-HYB,RBC Lysis Buffer (HybriMax),buf_rbc_lysis_hybrimax.qmd BUF-ACK-LYSIS,ACK RBC Lysis Buffer,buf_ack_lysis.qmd -BUF-PERC-37,Isotonic Percoll (37%),buf_percoll_37pct.qmd -BUF-LIV-DIG-COL-D,Liver Digestion Buffer (Collagenase D),buf_mus_liver_digestion_col_D.qmd -BUF-LIV-DIG-COL-IV,Liver Digestion Buffer (Collagenase IV),buf_mus_liver_digestion_col_IV.qmd +BUF-PERC-37,Percoll Solution (37% of isotonic stock = 33% final),buf_percoll_37pct.qmd BUF-R0-MED,R0 Medium (Serum-free RPMI),buf_R0_med.qmd BUF-R10-MED,R10 Medium (RPMI + 10% FCS),buf_R10_med.qmd BUF-TCELL-MED,T Cell Medium,buf_Tcell_med.qmd @@ -14,3 +12,4 @@ BUF-VERO-PROP,Vero Cell Propagation Medium,buf_vero_propagation_medium.qmd BUF-BHK-PROP,BHK Cell Propagation Medium,buf_bhk_propagation_medium.qmd BUF-LCMV-PLA,LCMV Plaque Assay Medium,buf_lcmv_plaque_assay_medium.qmd BUF-L929-PROP,L929 Cell Propagation Medium,buf_l929_propagation_medium.qmd +BUF-LIV-DIG,Liver Digestion Buffer,buf_mus_liver_digestion.qmd diff --git a/protocols_src/_dependencies.csv b/protocols_src/_dependencies.csv index eeb5705..b0b8508 100644 --- a/protocols_src/_dependencies.csv +++ b/protocols_src/_dependencies.csv @@ -2,8 +2,6 @@ protocol_id,buffer_id MUS-SPL-DIS,BUF-FACS-MACS MUS-SPL-DIS,BUF-RBC-HYB MUS-LIV-DIG,BUF-FACS-MACS -MUS-LIV-DIG,BUF-PERC-37 -MUS-LIV-DIG,BUF-LIV-DIG-COL-D MUS-LNG-DIG,BUF-FACS-MACS MUS-LNG-DIG,BUF-RBC-HYB MUS-BM-ISO,BUF-FACS-MACS @@ -34,5 +32,7 @@ MUS-LNG-DIG,BUF-ACK-LYSIS MUS-BM-ISO,BUF-ACK-LYSIS MUS-BLD-PRC,BUF-ACK-LYSIS MUS-TMR-DIG,BUF-ACK-LYSIS -MUS-LIV-DIG,BUF-LIV-DIG-COL-IV NLC-PLATE-STIM,BUF-TCELL-MED +MUS-LIV-DIG,BUF-LIV-DIG +MUS-LIV-DIG,BUF-PERC-37 +MUS-LIV-DIG,BUF-ACK-LYSIS diff --git a/protocols_src/buffers/buf_mus_liver_digestion.qmd b/protocols_src/buffers/buf_mus_liver_digestion.qmd new file mode 100644 index 0000000..419971d --- /dev/null +++ b/protocols_src/buffers/buf_mus_liver_digestion.qmd @@ -0,0 +1,164 @@ +--- +title: "Mouse Liver Digestion Buffer" +subtitle: "Abdullah Lab, IMMEI, University Hospital Bonn" +protocol_id: "BUF-LIV-DIG" +version: "v1.0" +date: "2026-08-05" +description: "Collagenase and DNase I digestion buffer for enzymatic dissociation of mouse liver tissue. Supports Collagenase D or Collagenase IV in a DMEM, PBS, or HBSS base." +--- + +**Protocol ID:** {{< meta protocol_id >}} +**Version:** {{< meta version >}} +**Author:** Dillon Corvino + +# Purpose + +This buffer is used for enzymatic digestion of mouse liver tissue to generate viable single-cell suspensions. It contains a collagenase and DNase I at working concentrations suitable for dissociating liver parenchyma while preserving lymphocyte viability. + +This single buffer replaces the former separate Collagenase D and Collagenase IV documents (`BUF-LIV-DIG-COL-D`, `BUF-LIV-DIG-COL-IV`, both retired at v2.0 of `MUS-LIV-DIG`). + +\tableofcontents + +# Linked protocols + +```{r} +#| echo: false +#| message: false + +library(tidyverse) + +this_buffer <- rmarkdown::metadata$protocol_id +deps <- read_csv(here::here("protocols_src/_dependencies.csv"), show_col_types = FALSE) + +linked <- deps |> + filter(buffer_id == this_buffer) |> + distinct(protocol_id) + +if (nrow(linked) == 0) { + cat("None\n") +} else { + linked |> + mutate(line = glue::glue("- `{protocol_id}`")) |> + pull(line) |> + cat(sep = "\n") +} +``` + +--- + +# Choice of collagenase and base medium + +Two collagenases are in routine use. They are **not interchangeable at the same concentration** — Collagenase D is used at **twice** the concentration of Collagenase IV. + +| Enzyme | Working concentration | Notes | +|---|---|---| +| **Collagenase D** | **1 mg/mL** | Roche 11088858001; supplied as lyophilised powder | +| **Collagenase IV** | **0.5 mg/mL** | Half the concentration used for Collagenase D | + +**DNase I is 50 ug/mL for both.** + +The base medium may be **DMEM (incomplete)**, **PBS 1x**, or **HBSS 1x** — these are interchangeable for this application. Use whichever is on hand; HBSS and PBS avoid the phenol red background in DMEM if that matters downstream. + +::: callout-important +Do **not** use an EDTA-containing buffer (e.g. MACS Buffer) as the base medium, and do not perfuse the liver with one. Collagenases are Ca2+/Zn2+-dependent metalloproteases and EDTA chelates these cofactors, inhibiting digestion. +::: + +# Working buffer composition + +```{r} +#| echo: false +#| message: false + +library(tidyverse) + +# ---- inputs (edit here) ---- +collagenaseStockMgMl <- 100 # mg/mL +dnaseStockMgMl <- 10 # mg/mL +dnaseFinalUgMl <- 50 # ug/mL, both enzymes +volumesMl <- c(1, 5, 10, 25, 50) +enzymes.df <- tibble::tibble( + enzyme = c("Collagenase D", "Collagenase IV"), + finalMgMl = c(1, 0.5) +) +# ---------------------------- + +recipe.df <- tidyr::expand_grid(enzymes.df, volumeMl = volumesMl) |> + dplyr::mutate( + collagenaseUl = finalMgMl * volumeMl / collagenaseStockMgMl * 1000, + dnaseUl = (dnaseFinalUgMl / 1000) * volumeMl / dnaseStockMgMl * 1000 + ) + +# verify the arithmetic reproduces the target concentrations exactly +stopifnot(all(abs(recipe.df$collagenaseUl / 1000 * collagenaseStockMgMl / + recipe.df$volumeMl - recipe.df$finalMgMl) < 1e-9)) +stopifnot(all(abs(recipe.df$dnaseUl / 1000 * dnaseStockMgMl / + recipe.df$volumeMl * 1000 - dnaseFinalUgMl) < 1e-9)) + +recipe.df |> + dplyr::mutate( + baseMedium = paste0("to ", scales::comma(volumeMl), " mL"), + collagenaseUl = paste0(scales::comma(collagenaseUl), " uL"), + dnaseUl = paste0(scales::comma(dnaseUl), " uL") + ) |> + dplyr::select(enzyme, volumeMl, baseMedium, collagenaseUl, dnaseUl) |> + knitr::kable( + align = "l", + col.names = c("Enzyme", "Final volume (mL)", "Base medium", + "Collagenase (100 mg/mL stock)", "DNase I (10 mg/mL stock)") + ) +``` + +**5 mL of working buffer is required per liver.** + +# Preparation + +## Stock solutions + +| Reagent | Stock concentration | Storage | +|---|---|---| +| Collagenase D or IV | 100 mg/mL in sterile PBS | Aliquot at -20 °C | +| DNase I | 10 mg/mL | Aliquot at -20 °C; avoid repeated freeze-thaw | + +## Reconstitution of Collagenase powder + +Collagenase D is supplied as a **lyophilised powder** and must be reconstituted before use. + +1. Add **1 mL sterile PBS 1x** directly to a vial containing **100 mg** Collagenase powder. +2. Swirl gently until fully dissolved; **do not vortex**. +3. This yields a **100 mg/mL** stock. +4. Aliquot into single-use volumes and store at **-20 °C**, labelled with enzyme, concentration, date, and initials. + +## Preparation of working buffer + +1. Thaw collagenase and DNase I aliquots on ice. +2. Add the base medium (DMEM, PBS, or HBSS) to a sterile tube. +3. Add collagenase and DNase I per the table above. +4. Mix gently by inversion; **do not vortex**. +5. Pre-warm to **37 °C** immediately before use. + +::: callout-note +Collagenase-only buffer (without DNase) may be prepared in advance and frozen in aliquots. Add DNase I fresh on the day of use. +::: + +# Storage and stability + +- Keep freshly prepared working buffer **on ice** until pre-warming for use. +- Do **not** freeze buffer after DNase I has been added. +- Discard unused working buffer at the end of the day. + +# Materials + +| Reagent | Supplier | Cat. # | +|---|---|---| +| Collagenase D | Roche, Basel, Switzerland | 11088858001 | +| Collagenase IV | [TBD] | [TBD] | +| DNase I | Sigma-Aldrich, Merck | DN25-100MG | +| DMEM (incomplete) | [TBD] | [TBD] | +| HBSS 1x | PAN-Biotech, Aidenbach, Germany | P04-34500 | +| DPBS, no Ca / no Mg | Gibco, ThermoFisher | 14190-094 | + +# Version history + +| Version | Date | Author | Change summary | +|---|---|---|---| +| v1.0 | 2026-08-05 | Dillon Corvino | Created by merging `BUF-LIV-DIG-COL-D` and `BUF-LIV-DIG-COL-IV`. DNase I raised to 50 ug/mL for both enzymes (was 10 ug/mL for Col D, 25 ug/mL for Col IV). Base medium stated as DMEM, PBS, or HBSS. | diff --git a/protocols_src/buffers/buf_percoll_37pct.qmd b/protocols_src/buffers/buf_percoll_37pct.qmd index dd23fc7..bb37572 100644 --- a/protocols_src/buffers/buf_percoll_37pct.qmd +++ b/protocols_src/buffers/buf_percoll_37pct.qmd @@ -1,19 +1,62 @@ --- -title: "37% Percoll Solution" +title: "37% Percoll Solution (= 33% final Percoll)" subtitle: "Abdullah Lab, IMMEI, University Hospital Bonn" protocol_id: "BUF-PERC-37" -version: "v1.2" -date: "2025-12-29" -description: "37% Percoll density solution for enrichment of leukocytes from digested liver tissue." +version: "v2.0" +date: "2026-08-05" +description: "Percoll density solution for enrichment of leukocytes from digested liver tissue. 37% of isotonic Percoll stock, equivalent to 33% final Percoll." --- -**Protocol ID:** {{< meta protocol_id >}} -**Version:** {{< meta version >}} -**Author:** Dillon Corvino +**Protocol ID:** {{< meta protocol_id >}} +**Version:** {{< meta version >}} +**Author:** Dillon Corvino # Purpose -This buffer is used as a **37% Percoll solution** for density-based enrichment of leukocytes from digested liver tissue. During centrifugation, hepatocytes and debris remain in the supernatant, while leukocyte-enriched pellets form at the bottom of the tube. +This buffer is used for density-based enrichment of leukocytes from digested liver tissue. During centrifugation, hepatocytes and debris remain in the supernatant, while leukocyte-enriched pellets form at the bottom of the tube. + +# "37%" and "33%" are the same solution + +This buffer is called **37%** because it is **37% of isotonic Percoll stock**. The identical solution is **33% Percoll** when quoted by final Percoll content. Both numbers are correct — they use different denominators. + +**SIP** — *Stock Isotonic Percoll*, also written *Standard Isotonic Percoll* — is the conventional term for neat Percoll pre-adjusted to physiological osmolality with 10x PBS at **9:1**. That mix is **90% Percoll by volume**, so: + +$$\text{final Percoll \%} = \text{SIP \%} \times 0.9$$ + +```{r} +#| echo: false +#| message: false + +library(tidyverse) + +# ---- inputs (edit here) ---- +percollInSip <- 0.9 # SIP = 9 parts neat Percoll : 1 part 10x PBS +sipPct <- 37 # this buffer, expressed as % of isotonic stock +# ---------------------------- + +naming.df <- tibble::tibble( + convention = c("% of isotonic stock (SIP)", "% final Percoll"), + thisBuffer = c(sipPct, sipPct * percollInSip), + denominator = c("Volume of SIP as a fraction of the working solution", + "Volume of neat Percoll as a fraction of the working solution") +) + +stopifnot(abs(naming.df$thisBuffer[2] - 33.3) < 1e-9) + +naming.df |> + dplyr::mutate(thisBuffer = scales::percent(thisBuffer / 100, accuracy = 0.1)) |> + knitr::kable(align = "l", + col.names = c("Convention", "This buffer", "What the % is measured against")) +``` + +::: callout-important +When comparing against an external protocol, **check which convention it uses before changing any number**. + +- This buffer and `MUS-LIV-DIG` quote **% of isotonic stock**. +- The AG Surace SOP #001 quotes **% final Percoll** — its "33% Percoll" (9 mL Percoll + 1 mL 10x DPBS + 17 mL 1x DPBS) is **the same density as this buffer**. + +Relabelling "37%" as "33%" without also changing the recipe would drop the gradient to **29.7% final Percoll** and increase hepatocyte carryover. +::: ### Density vs osmolality (important conceptual note) @@ -105,27 +148,74 @@ Therefore: --- -# Composition (per 10 mL 37% Percoll) +# Composition | Component | Stock | Volume for 10 mL | Final composition | Notes | |------------------|-------|------------------|-------------------|-------| -| Percoll (isotonic) | 100% | **3.70 mL** | 37% (v/v) | Pre-adjusted stock | +| Percoll (isotonic) | 100% | **3.70 mL** | 37% of SIP = **33.3% final Percoll** | Pre-adjusted stock | | PBS 1× | — | **6.30 mL** | — | Diluent | ---- - -# Preparation of 37% Percoll working solution +# Preparation of working solution 1. Equilibrate **isotonic Percoll stock** to **room temperature**. -2. In a sterile 15 mL or 50 mL tube, add: - - **3.70 mL isotonic Percoll** - - **6.30 mL sterile PBS 1×** +2. Combine isotonic Percoll and sterile 1x PBS in the ratio **3.70 : 6.30**, scaled per the table below. 3. Mix gently by inversion until homogeneous. -4. Prepare sufficient volume for the experiment (typically **10 mL per liver**). -5. Aliquot immediately into labelled **15 mL conical tubes**. +4. Aliquot immediately into labelled tubes — for `MUS-LIV-DIG`, **25 mL per 50 mL conical tube**, one per liver. + +Volumes below are the exact requirement per number of livers — see the tip beneath the table on adding margin. + +```{r} +#| echo: false +#| message: false + +library(tidyverse) + +# ---- inputs (edit here) ---- +percollInSip <- 0.9 # SIP is 90% neat Percoll by volume +sipFraction <- 0.37 # 37% of isotonic stock +volPerLiver <- 25 # mL loaded per sample (MUS-LIV-DIG STEP 6) +nLivers <- c(1, 2, 3, 4, 5, 6, 8, 9, 10, 12) +# ---------------------------- + +percoll.df <- tibble::tibble(nLivers = nLivers) |> + dplyr::mutate( + totalMl = nLivers * volPerLiver, + sipMl = totalMl * sipFraction, + pbsMl = totalMl - sipMl + ) + +# components sum to total, and both percentages hold exactly at every scale +stopifnot(all(abs(percoll.df$sipMl + percoll.df$pbsMl - percoll.df$totalMl) < 1e-9)) +stopifnot(all(abs(percoll.df$sipMl / percoll.df$totalMl - sipFraction) < 1e-9)) +stopifnot(all(abs(percoll.df$sipMl * percollInSip / percoll.df$totalMl - + sipFraction * percollInSip) < 1e-9)) + +percoll.df |> + dplyr::mutate( + finalPct = scales::percent(sipMl * percollInSip / totalMl, accuracy = 0.1), + dplyr::across(c(totalMl, sipMl, pbsMl), ~ round(.x, 2)) + ) |> + knitr::kable( + align = "l", + col.names = c("Livers", "Total (mL)", "Isotonic Percoll (mL)", + "PBS 1x (mL)", "Final Percoll") + ) +``` + +Per liver this is **9.25 mL isotonic Percoll + 15.75 mL PBS** = 25 mL. + +::: callout-tip +The table gives the **exact** volume for the number of livers being processed, with no margin built in. When preparing for more than one liver, **add some extra** so the last tube is not short — tube dead volume, pipetting loss, and the meniscus left in the stripette all add up across samples. + +How much extra is your call: one additional liver's worth (25 mL) is usually sufficient, and is simplest to work out. For example, for 9 livers read off the 10-liver row. +::: + +::: callout-note +That 10 : 17 ratio is arithmetically **37.04% SIP / 33.33% final** rather than exactly 37.00% / 33.30% — a difference of 0.03 percentage points, which is not meaningful at the bench. It is also **exactly** the AG Surace SOP recipe (9 mL Percoll + 1 mL 10x DPBS + 17 mL 1x DPBS), confirming the two protocols use the same gradient. +::: -:::callout-note -Prepare 37% Percoll fresh on the day of use for optimal separation performance and cell viability. +::: callout-note +Prepare the working solution fresh on the day of use for optimal separation performance and cell viability. ::: --- @@ -220,3 +310,4 @@ For every **9 mL of Percoll**, add **1 mL of 10× PBS** to make the solution iso | v1.0 | 2025-11-20 | Dillon Corvino | Initial buffer definition (33% Percoll) | | v1.1 | 2025-12-29 | Dillon Corvino | Updated to 37% Percoll; clarified isotonic prep | | v1.2 | 2025-12-29 | Dillon Corvino | Added stock isotonic prep, math explanation, sterility notes | +| v2.0 | 2026-08-05 | Dillon Corvino | Density unchanged. Added explicit dual-convention section: 37% of isotonic stock = 33% final Percoll, with the AG Surace SOP #001 equivalence. Volumes for `MUS-LIV-DIG` raised to 25 mL per 50 mL tube (was 10 mL per 15 mL tube); scaling table added. | diff --git a/protocols_src/mouse/prot_mus_liver_digestion.qmd b/protocols_src/mouse/prot_mus_liver_digestion.qmd index d2d4f6f..cf7e7cf 100644 --- a/protocols_src/mouse/prot_mus_liver_digestion.qmd +++ b/protocols_src/mouse/prot_mus_liver_digestion.qmd @@ -2,8 +2,8 @@ title: "Mouse Liver Digestion to Single-Cell Suspension" subtitle: "Abdullah Lab, IMMEI, University Hospital Bonn" protocol_id: "MUS-LIV-DIG" -version: "v1.2" -date: "2025-11-26" +version: "v2.0" +date: "2026-08-05" description: "Isolation of viable mouse liver single-cell suspensions for downstream flow cytometry, sorting, and single-cell applications." --- @@ -15,24 +15,31 @@ description: "Isolation of viable mouse liver single-cell suspensions for downst This protocol describes the preparation of single-cell suspensions from mouse liver using perfusion, enzymatic digestion, mechanical dissociation, density centrifugation, and RBC lysis. The resulting cell suspension is suitable for downstream applications such as flow cytometry, FACS sorting, and single-cell omics workflows (with appropriate QC). +# Workflow summary + +**Perfuse (ice-cold PBS) -> gentleMACS digestion -> 70 um filtration with syringe plunger -> wash spins -> Percoll -> RBC lysis** + # Critical notes (read before starting) +- **Perfuse with ice-cold PBS or FACS Buffer only — never MACS Buffer.** See the callout in STEP 2. +- Spin times depend on tube format: **50 mL tubes 400 g for 7 min**, **15 mL tubes 400 g for 5 min**. See the callout in STEP 5. +- Percoll enrichment is performed in a **50 mL tube**, not a 15 mL tube. See the callout in STEP 6. - Keep all **post-digestion washes cold** (4 °C) where possible to preserve viability. - Process **one liver per 70 µm strainer**; do not reuse strainers between livers. - Liver cell pellets are often **loose**; be careful when pouring supernatants. -- Do not over-digest; limit digestion to **30 minutes at 37 °C** with agitation. -- Percoll must be at **room temperature** and properly diluted to **37%** immediately before use. -- Ensure RBC lysis is **time-limited (2-5 minutes)** to avoid damaging leukocytes. +- Do not over-digest; limit digestion to the programmed gentleMACS time, or **30 minutes at 37 °C** with agitation if dissociating manually. +- Percoll must be at **room temperature** and properly diluted to **37% of isotonic stock (= 33% final Percoll)** immediately before use. +- Ensure RBC lysis is **time-limited (2 minutes with ACK)** to avoid damaging leukocytes. # Approximate timing - Preparation and setup: **10–15 min** - Mouse euthanasia, perfusion, and liver dissection: **5–10 min per mouse** -- Liver mincing and transfer into digestion buffer: **5 min per mouse** -- Enzymatic digestion (including gentleMACS where applicable): **30–40 min** -- Mechanical dissociation, hepatocyte removal, and washes: **20–30 min** -- Percoll gradient centrifugation and leukocyte enrichment: **25–30 min** -- RBC lysis (if required), filtration, and final resuspension: **15–20 min** +- gentleMACS dissociation and enzymatic digestion: **25–30 min** +- 70 µm filtration: **5 min per liver** +- Two wash spins (400 g, 7 min each in 50 mL tubes): **20–25 min** +- Percoll centrifugation and leukocyte enrichment: **20–25 min** +- RBC lysis, quench, and final resuspension: **15–20 min** **Total approximate time:** **\~2–2.5 hours for 1–4 livers processed in parallel**\ (Effective hands-on time per liver is \~60–90 minutes, depending on batching and operator experience.) @@ -48,7 +55,8 @@ This protocol describes the preparation of single-cell suspensions from mouse li ## STEP 1 – Preparation and setup 1. **Pre-cool collection solutions** - - Pre-cool **PBS or MACS Buffer** on ice for liver perfusion and tissue collection. + - Pre-cool **PBS** on ice for liver perfusion. + - Pre-cool **MACS Buffer** on ice for tissue collection and all subsequent washes. 2. **Label collection vessels (choose one option per experiment)** - **Option A: 6-well plate collection** - Label one well per mouse in a 6-well plate. @@ -58,25 +66,26 @@ This protocol describes the preparation of single-cell suspensions from mouse li - Add **5 mL ice-cold PBS or MACS Buffer** per tube. 3. **Label dissociation and processing tubes** - Label **gentleMACS C-tubes** (or equivalent) for each liver. - - Label additional **50 mL tubes** as required for downstream processing steps. + - Label **50 mL tubes** for filtration, washing, and Percoll enrichment (one per liver). + - Label **15 mL tubes** for the post-lysis wash (one per liver). 4. **Prepare buffers** - - **Liver digestion buffer**. - - **37% Percoll working solution**. - - **ACK lysis buffer**, if required. - - **MACS Buffer** for washes and final resuspension. + - **Liver digestion buffer** — `BUF-LIV-DIG`; **5 mL per liver**. + - **37% Percoll working solution** — `BUF-PERC-37`; **25 mL per liver** (**9.25 mL isotonic stock + 15.75 mL PBS**). Add margin when preparing for several livers so the last tube is not short. + - **ACK lysis buffer** — **1 mL per liver**. + - **MACS Buffer** for washes and final resuspension — allow **\~110 mL per liver**. 5. **Warm digestion components** - Pre-warm a water bath to **37 °C**. - Place an aliquot of **liver digestion buffer** in the water bath to equilibrate. - - If digestion buffer will be prepared immediately before use, pre-warm **DMEM** instead. + - If digestion buffer will be prepared immediately before use, pre-warm the **base medium** (DMEM, PBS, or HBSS) instead. 6. **Equipment setup** - Pre-cool a benchtop centrifuge to **4 °C**. - Ensure access to a **gentleMACS** instrument with an appropriate liver dissociation program. 7. **Items to take to the animal facility** - - Ice bucket with ice-cold **PBS or MACS Buffer**. + - Ice bucket with **ice-cold PBS** for perfusion. - 6-well plates *and/or* pre-filled **50 mL tubes** (as selected above). - Sterile scissors and forceps. - - **10 mL syringes** (one per mouse or per treatment group). - - Needles for liver perfusion (**25G or 26G recommended**). + - **5–10 mL syringes** (one per mouse or per treatment group). + - Needles for liver perfusion (**25–27 G recommended**). - Absorbent pads and a waste container for perfusion runoff. ## STEP 2 – Liver harvest and perfusion @@ -84,12 +93,17 @@ This protocol describes the preparation of single-cell suspensions from mouse li 1. Euthanise the mouse according to institutional and ethical guidelines (e.g. **CO₂ asphyxiation** or other approved method). 2. Place the mouse in a supine position and perform a midline incision to open the abdominal cavity. 3. Expose the liver and major vessels (**Inferior vena cava and portal vein**). -4. Load a **5 mL syringe** with **ice-cold MACS Buffer** and attach a **25–27 G needle**. +4. Load a **5 mL syringe** with **ice-cold PBS** and attach a **25–27 G needle**. 5. Perfuse the liver via one of the following routes: - - **Inferior vena cava** (preferred)\ + - **Inferior vena cava**\ - **Portal vein** - - **Directly via the heart** -6. Slowly perfuse with **\~5–10 mL MACS Buffer per mouse** until the liver visibly blanches. +6. Slowly perfuse with **\~5–10 mL ice-cold PBS per mouse** until the liver visibly blanches. + +::: callout-important +**Perfuse with PBS or FACS Buffer only — do not perfuse with MACS Buffer.**\ +MACS Buffer contains **2 mM EDTA**. Anecdotal evidence suggests residual EDTA carried into the tissue **inhibits downstream collagenase digestion** (collagenases are Ca2+/Zn2+-dependent metalloproteases and EDTA chelates these cofactors).\ +MACS Buffer is fine for **all subsequent steps** — collection, washes, Percoll resuspension, quenching, and final resuspension. +::: ::: callout-note Efficient perfusion reduces blood content and improves hepatocyte removal, density separation, and downstream staining quality. @@ -131,13 +145,11 @@ Over-digestion can strip surface epitopes and negatively impact downstream pheno Note: the gentleMACS instrument does **not** beep when the program finishes—set a timer before starting. ::: -7. After completion of the program, transfer the entire liver cell suspension into a **50 mL conical tube**. -8. Rinse the C-tube with **ice-cold MACS Buffer** and add the rinse to the same 50 mL tube to maximise yield. -9. Bring the total volume to **50 mL with ice-cold MACS Buffer**. +Proceed directly to **STEP 5 – Filtration**. -Proceed directly to **STEP 5 – Hepatocyte removal and washing**. +### Option B – Manual mechanical dissociation (fallback) -### Option B – Manual mechanical dissociation +Use this route if the gentleMACS is unavailable. 1. Add **5 mL pre-warmed liver digestion buffer (with DNAse)** to a **labelled 50 mL tube**. 2. Transfer the liver into the 50 mL tube. @@ -150,48 +162,95 @@ Ensure tubes are tightly closed and positioned securely on the shaker.\ Set a timer — prolonged digestion can reduce viability and affect surface marker integrity. ::: -6. After incubation, place a **70 μm cell strainer** into a clean petri dish. -7. Pour the digestion mixture through the strainer. -8. Using the back of a **5 mL syringe plunger**, gently press the tissue through the strainer to mechanically dissociate remaining fragments. -9. Rinse the strainer with **2% FCS in PBS/DPBS** while continuing gentle mechanical disruption until no visible fragments remain. -10. Pour the single-cell suspension from the petri dish back into the corresponding **50 mL tube**. +Proceed directly to **STEP 5 – Filtration**. + +## STEP 5 – Filtration and washing + +Applies to both Option A and Option B. + +1. Seat a **70 µm cell strainer** on a **labelled 50 mL conical tube**. +2. Pour the digested liver suspension through the strainer. +3. Using the back of a **5 mL syringe plunger**, gently press the remaining tissue through the strainer until no visible fragments remain. +4. Rinse the strainer with **ice-cold MACS Buffer** while continuing gentle mechanical disruption. +5. Bring the total volume to **40 mL with ice-cold MACS Buffer**. + +::: callout-note +Filtration is performed **directly into the 50 mL tube** — no petri dish, and no dab/swirl recovery steps. One strainer per liver; do not reuse. +::: -To maximise recovery: +6. Centrifuge at **400 g for 7 minutes at 4 °C**. -11. Add **5–10 mL 2% FCS.PBS** into the petri dish. -12. Dab the underside of the strainer in the buffer to release trapped cells. -13. Rinse the syringe plunger in the same buffer to wash off adherent cells. -14. Use a transfer pipette to collect remaining suspension from the underside of the strainer and plunger and add to the corresponding **50 mL tube**. -15. Swirl the buffer in the petri dish to wash out residual cells and pour into the same tube. -16. Bring the volume to **50 mL with ice-cold MACS Buffer**. +::: callout-important +**Spin time depends on tube format.** The longer path length in a 50 mL tube requires a longer spin to pellet equivalently: -Proceed directly to **STEP 5 – Hepatocyte removal and washing**. +| Tube | Speed | Time | +|---|---|---| +| **50 mL** | 400 g | **7 min** | +| **15 mL** | 400 g | **5 min** | -## STEP 5 – Hepatocyte removal and washing +This applies to **every 400 g wash spin in this protocol**. Check which tube you are in before starting the centrifuge. +::: -1. Centrifuge at **50 g for 2 minutes at 4 °C** to sediment hepatocytes. -2. Carefully transfer the **supernatant** (containing leukocytes) to a fresh **50 mL tube**, avoiding disturbance of the hepatocyte pellet. -3. Adjust the volume to **50 mL with ice-cold MACS Buffer**. -4. Centrifuge at **400 g for 5 minutes at 4 °C**. -5. Discard the supernatant and keep the leukocyte pellet **on ice** for downstream processing. +7. Discard the supernatant by pouring. +8. Resuspend the pellet and bring the volume to **40 mL with ice-cold MACS Buffer**. +9. Recap and resuspend by inverting the tube back and forth, or with a brief but firm shake. +10. Centrifuge at **400 g for 7 minutes at 4 °C** (50 mL tube). +11. Discard the supernatant and keep the leukocyte pellet **on ice**. ::: callout-warning Cell pellets from digested liver are often **loose and poorly compacted**.\ When discarding supernatant by pouring, do so carefully. Avoid flicking, shaking, or abrupt movements. ::: -## STEP 6 – 37% Percoll enrichment +::: callout-note +**Optional hepatocyte pre-clearing spin (recommended).** A low-speed spin can be inserted immediately after filtration (before step 6) to sediment hepatocytes while leaving leukocytes in suspension: + +1. Centrifuge at **50 g for 2 minutes at 4 °C**. +2. Carefully transfer the **supernatant** (containing leukocytes) to a fresh 50 mL tube, avoiding the hepatocyte pellet. +3. Continue from step 5 above. + +**Why this is worth doing.** Hepatocytes are large, fragile cells and rupture readily at the higher speeds used for the subsequent wash and Percoll spins. Lysed hepatocytes release DNA and cytoplasmic contents that drive **clumping** and trap leukocytes, and they release **damage-associated molecular patterns** — extracellular ATP, HMGB1, mitochondrial DNA — which ligate purinergic and pattern-recognition receptors and can **activate the very leukocytes being isolated**, altering activation-marker expression before staining. Removing intact hepatocytes at low speed first avoids generating that debris. + +Weigh this against the leukocyte loss in the discarded pellet: a proportion of leukocytes will be carried down with the hepatocytes. The Percoll gradient alone removes hepatocytes effectively, so this step is optional — but it is recommended where activation phenotype is a readout, where clumping has been a problem, or for single-cell applications. +::: + +## STEP 6 – Percoll enrichment + +::: callout-note +The Percoll working solution is **37% of isotonic Percoll stock**, which is the **same solution as "33% Percoll"** when quoted by final Percoll content (37 x 0.9 = 33.3). The AG Surace SOP #001 uses the latter convention. See `BUF-PERC-37` — do not relabel one as the other without changing the recipe. +::: + +1. Aliquot **25 mL of 37% Percoll** into **pre-labelled 50 mL conical tubes** (one tube per liver). + +::: callout-warning +**Use a 50 mL tube for the Percoll step, not a 15 mL tube.**\ +In a 50 mL tube the hepatocyte layer floats clear of the pellet and the supernatant can be **poured off** cleanly.\ +If a 15 mL tube must be used, the hepatocyte layer sits much closer to the pellet — you **must aspirate the supernatant under vacuum** rather than pour, or hepatocyte contamination of the leukocyte fraction will be unacceptably high. +::: -1. Aliquot **10 mL of 37% Percoll** into **pre-labelled 15 mL conical tubes** (one tube per liver). 2. Using a **transfer pipette**, resuspend the cell pellet using the small remaining **dead volume**. -3. Take up approximately **1 mL of 37% Percoll** from the corresponding 15 mL tube and use it to **rinse the 50 mL tube**, resuspending any remaining cells. -4. Transfer the resuspended cells into the corresponding **15 mL tube** containing **10 mL 37% Percoll**. -5. Repeat the rinse **1–2 times** with additional small volumes of Percoll (as needed) to recover all remaining cells from the 50 mL tube. -6. Cap the 15 mL tubes and **invert gently 2–3 times** to ensure an even cell suspension. -7. Centrifuge at **800 g for 20 minutes at room temperature (20–22 °C)** using: - - Acceleration: **moderate** (e.g. **acc 7**) +3. Take up approximately **1 mL of 37% Percoll** from the corresponding 50 mL tube and use it to **rinse the wash tube**, resuspending any remaining cells. +4. Transfer the resuspended cells into the corresponding tube containing **25 mL 37% Percoll**. +5. Repeat the rinse **1–2 times** with additional small volumes of Percoll (as needed) to recover all remaining cells. +6. Recap and **invert gently 2–3 times** to ensure an even cell suspension. +7. Centrifuge at **611 g for 15 minutes at room temperature (20–22 °C)** using: + - Acceleration: **high** (e.g. **acc 9**) - Brake: **minimal** (e.g. **br 1**) +::: callout-note +**611 g corresponds to 1700 rpm on the lab centrifuge** (rotor rmax \~18.9 cm). If using a different rotor, set the instrument by **relative centrifugal force (611 g)**, not by rpm. Equivalent speeds: + +| Rotor rmax | rpm for 611 g | +|---|---| +| 16.0 cm | 1848 | +| 17.0 cm | 1793 | +| 18.0 cm | 1742 | +| 18.9 cm | 1700 | +| 20.0 cm | 1653 | + +Calculated as `RCF = 1.118e-5 x r(cm) x rpm^2`. +::: + ::: callout-warning Avoid high brake settings during Percoll centrifugation. Abrupt braking can disrupt the gradient and reduce lymphocyte enrichment. ::: @@ -201,40 +260,43 @@ Do not leave liver samples in Percoll longer than necessary. Prolonged exposure ::: ::: callout-note -After the Percoll spin, a debris/hepatocyte-rich layer typically remains in the supernatant, while an enriched leukocyte pellet forms at the bottom of the tube. +After the Percoll spin, a **hepatocyte layer floats on top of the solution**, while a **leukocyte + erythrocyte pellet** forms at the apex of the tube. ::: -9. Carefully aspirate or pour off the supernatant in one smooth motion without disturbing the pellet. -10. Keep tubes inverted briefly and gently dab the rim on paper towel to wick residual Percoll (avoid touching or dislodging the pellet). -11. Resuspend the pellet in **10–15 mL ice-cold MACS Buffer**. -12. Centrifuge at **400 g for 5 minutes at 4 °C**. -13. Discard the supernatant and keep the enriched leukocyte pellet **on ice** for downstream steps. +8. Prepare a few layers of paper towel next to the waste container. +9. **Pour off** the hepatocyte layer and supernatant in one smooth motion. +10. Keep the tube inverted briefly and dab the opening on the paper towel to wick residual Percoll (avoid touching or dislodging the pellet). + +Proceed directly to **STEP 7 – RBC lysis**. There is no intermediate wash. ## STEP 7 – RBC lysis -1. Add **RBC lysis buffer** to the cell pellet (**0.5–1 mL per liver**): - - **ACK lysis buffer:** incubate for **30–60 seconds at room temperature**, **or**\ - - **HybriMax RBC Lysis Buffer:** incubate for **2–3 minutes at room temperature**.\ -2. Gently resuspend immediately to distribute the buffer evenly.\ -3. Quench the reaction by topping up to **15 mL with MACS Buffer**. -4. Pass the suspension through a 70 µm cell strainer into a fresh 50 mL tube kept on ice. -5. Rinse the strainer with an additional 5–10 mL MACS Buffer if needed to recover remaining cells. -6. Centrifuge at **400 g for 5 minutes at 4 °C**. -7. Discard the supernatant and keep the pellet on ice. +1. Using a 5 mL or 10 mL Stripette, add **1 mL ACK lysis buffer** to each pellet. +2. Using a transfer pipette, resuspend the leukocyte + erythrocyte pellet by aspirating and dispensing until homogeneous. +3. Incubate for **2 minutes at room temperature**. +4. During the incubation, transfer each suspension into the corresponding **labelled 15 mL tube**. +5. At the end of the incubation, quench by topping up to **10 mL with MACS Buffer**. +6. Centrifuge at **400 g for 5 minutes at 4 °C** (15 mL tube; return brake to a normal setting, e.g. **br 6**). +7. Discard the supernatant by pouring, dab the inverted tube on paper towel, and keep the pellet on ice. ::: callout-warning -Liver leukocytes are particularly sensitive to over-lysis. Do not exceed the stated incubation times, especially after enzymatic digestion or Percoll separation. +Liver leukocytes are particularly sensitive to over-lysis. Do not exceed the stated incubation time, especially after enzymatic digestion or Percoll separation. ::: ::: callout-note -RBC lysis is often unnecessary for liver samples when a Percoll gradient is used. If lysis is required, HybriMax is generally preferred due to its gentler action compared to ACK. +**HybriMax** may be substituted for ACK (**2–3 minutes at room temperature**) and is gentler, but ACK at 2 minutes is the standard for this protocol. ::: -## STEP 8 – Final resuspension +## STEP 8 – Final resuspension and counting + +1. Loosen the pellet in the remaining dead volume by vortexing briefly. +2. Resuspend the cell pellet in **5 mL ice-cold MACS Buffer**. +3. Count cells and assess viability (e.g. trypan blue) as required. +4. Proceed with downstream applications (e.g. flow cytometry, sorting, or culture of NLCs). -1. Resuspend the cell pellet in 1-5 mL ice-cold MACS Buffer -2. Count cells and assess viability (e.g. trypan blue) as required. -3. Proceed with downstream applications (e.g. flow cytometry, sorting, or culture of NLCs). +::: callout-tip +For flow cytometry staining, seed up to **5 x 10^6 cells per well** of a 96-well U-bottom plate. This is the maximum recommended for a **50 uL** staining volume — scale the staining volume up for more cells. Maximum well volume is **200 uL**. +::: ::: callout-tip For single-cell sequencing applications, minimise the time from tissue harvest to final resuspension, keep samples on ice whenever possible after digestion, and consider additional debris/dead cell removal steps if yields permit. @@ -274,12 +336,13 @@ if (nrow(used) == 0) { | Reagent | Supplier | Notes | |-----------------------|------------------|-------------------------------| -| MACS Buffer | In-house / various | Used for perfusion, washes, and final resuspension; kept cold | -| Liver digestion buffer | In-house | DMEM-based; contains collagenase and DNase I; pre-warmed to 37 °C | -| Collagenase (e.g. Collagenase IV or D) | Various | Component of liver digestion buffer | -| DNase I | Various | Component of liver digestion buffer | -| Percoll | Cytiva/GE or similar | Prepared as a **37% working solution** on day of use | -| ACK lysis buffer | Commercial or in-house | Optional; for RBC removal if required | +| PBS 1x, ice-cold | Various | **Perfusion only** — never perfuse with MACS Buffer | +| MACS Buffer | In-house / various | Collection, washes, and final resuspension; kept cold | +| Liver digestion buffer | In-house | `BUF-LIV-DIG`; DMEM, PBS, or HBSS base; collagenase + DNase I; pre-warmed to 37 °C | +| Collagenase D or Collagenase IV | Roche / various | Component of liver digestion buffer | +| DNase I | Various | Component of liver digestion buffer; 50 ug/mL final | +| Percoll | Cytiva/GE or similar | `BUF-PERC-37`; **37% of isotonic stock = 33% final Percoll**; prepared on day of use | +| ACK lysis buffer | Commercial or in-house | 1 mL per liver; 2 min at room temperature | | Fetal calf serum (FCS), heat-inactivated | Various | Component of MACS Buffer | | EDTA | Various | Component of MACS Buffer | | CO₂ or approved euthanasia agent | Facility supply | For mouse sacrifice | @@ -288,8 +351,8 @@ if (nrow(used) == 0) { | Item | Notes | |-----------------------------|-------------------------------------------| -| 50 mL conical tubes | Liver collection and processing | -| 15 mL conical tubes | Percoll enrichment (one per liver) | +| 50 mL conical tubes | Liver collection, filtration, washing, and **Percoll enrichment** (2 per liver) | +| 15 mL conical tubes | Post-lysis wash (one per liver) | | gentleMACS C-tubes (or equivalent) | Enzymatic and mechanical dissociation | | Sterile Petri dishes (10 cm) | Backup mincing / straining if required | | 70 µm cell strainers | Filtration of digested tissue | @@ -321,11 +384,14 @@ if (nrow(used) == 0) { | Problem | Possible cause | Suggested solution | |-------------------|-------------------------|-----------------------------| | Low lymphocyte yield | Incomplete perfusion or digestion | Ensure liver blanches during perfusion; mince thoroughly; avoid under-digestion | -| High red blood cell contamination | Insufficient or skipped RBC lysis | Perform brief ACK lysis (≤2 min) and quench immediately | -| Poor Percoll separation or weak pellet | Incorrect Percoll concentration or harsh braking | Use fresh **37% Percoll**; confirm centrifuge settings; minimise brake | +| High red blood cell contamination | Insufficient or skipped RBC lysis | Perform ACK lysis for the full **2 min** and quench immediately | +| Poor Percoll separation or weak pellet | Incorrect Percoll concentration or harsh braking | Use fresh **37% Percoll**; confirm **611 g**; set brake to minimum | +| Heavy hepatocyte carryover | Percoll run in a 15 mL tube, or supernatant poured | Use a **50 mL tube**; if 15 mL is unavoidable, **vacuum-aspirate** the supernatant; consider the optional 50 g pre-clearing spin | +| Poor digestion despite correct enzyme | Perfused with EDTA-containing MACS Buffer | Perfuse with **PBS or FACS Buffer** only | | Loose pellets and cell loss | Aggressive pouring of supernatant | Pour slowly in one smooth motion; wick residual liquid gently | +| Cells still in supernatant after a wash | 50 mL tube spun for the 15 mL duration | Spin 50 mL tubes at **400 g for 7 min**, 15 mL tubes for 5 min | | Low viability | Over-digestion or prolonged handling at RT | Limit digestion time; keep washes cold; process promptly | -| Excess debris or clumping | Inadequate DNase activity or filtration | Confirm DNase in digestion buffer; filter through 70 µm mesh | +| Excess debris or clumping | Inadequate DNase activity or filtration | Confirm DNase at **50 ug/mL**; filter through 70 µm mesh with the plunger | {{< pagebreak >}} @@ -344,3 +410,4 @@ if (nrow(used) == 0) { | v1.0 | 2025-11-20 | Dillon Corvino | Initial Quarto version based on SOP_001 (liver) from IEO | | v1.1 | 2025-11-26 | Dillon Corvino | Manual check and update protocol | | v1.2 | 2025-12-29 | Dillon Corvino | Unified with Abdullah lab protocol | +| v2.0 | 2026-08-05 | Dillon Corvino | Merged with AG Surace SOP #001 (S. Ng). Perfusion switched to ice-cold PBS (EDTA-free) with rationale callout. Mandatory 70 um syringe-plunger filtration directly into a 50 mL tube after gentleMACS. 50 g hepatocyte spin demoted to optional. Two 40 mL washes at 400 g. All 50 mL tube wash spins 5 -> 7 min (15 mL remain 5 min). Percoll: density unchanged (37% of isotonic stock = 33% final Percoll, now labelled with both conventions); 10 mL in 15 mL tube -> 25 mL in 50 mL tube, 800 g/20 min -> 611 g/15 min, acc 7 -> acc 9; post-Percoll wash removed. ACK lysis standardised to 1 mL for 2 min. Final resuspension 5 mL. Digestion buffer consolidated to single `BUF-LIV-DIG`. | From f4553e45123e48f794b49d30c7685386fd87d3c4 Mon Sep 17 00:00:00 2001 From: Dillon Corvino Date: Fri, 21 Aug 2026 10:15:39 +0200 Subject: [PATCH 2/2] Update LCMV infection, IEL isolation, and liver digestion protocols MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adds Armstrong/WE/Docile dose table entries and route rationale to the LCMV infection protocol, a per-mouse reagent/consumables prep checklist to IEL isolation, and reworks liver digestion (v2.0, merged with AG Surace SOP #001). Re-renders affected HTML/PDF outputs and refreshes the search/listings indices. Untracks CLAUDE.md and .claude/ — Claude Code config/instructions stay local, not in the shared repo. Co-Authored-By: Claude Sonnet 5 --- .gitignore | 2 + CLAUDE.md | 752 ----------- docs/listings.json | 4 +- .../buffers/buf_mus_liver_digestion.html | 1106 +++++++++++++++++ .../buffers/buf_mus_liver_digestion.pdf | Bin 0 -> 38146 bytes .../buffers/buf_percoll_37pct.html | 321 ++++- .../buffers/buf_percoll_37pct.pdf | Bin 41897 -> 56598 bytes docs/protocols_src/buffers/index.html | 84 +- docs/protocols_src/mouse/index.html | 20 +- .../mouse/prot_mus_iel_isolation.html | 152 ++- .../mouse/prot_mus_iel_isolation.pdf | Bin 85869 -> 89538 bytes .../mouse/prot_mus_lcmv_infection.html | 178 ++- .../mouse/prot_mus_lcmv_infection.pdf | Bin 36813 -> 44368 bytes .../mouse/prot_mus_liver_digestion.html | 803 +++++++++--- .../mouse/prot_mus_liver_digestion.pdf | Bin 61216 -> 86832 bytes docs/search.json | 120 +- .../mouse/prot_mus_iel_isolation.qmd | 42 +- .../mouse/prot_mus_lcmv_infection.qmd | 111 +- .../mouse/prot_mus_liver_digestion.qmd | 97 +- 19 files changed, 2656 insertions(+), 1136 deletions(-) delete mode 100644 CLAUDE.md create mode 100644 docs/protocols_src/buffers/buf_mus_liver_digestion.html create mode 100644 docs/protocols_src/buffers/buf_mus_liver_digestion.pdf diff --git a/.gitignore b/.gitignore index ad29309..2417d8f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,4 @@ /.quarto/ **/*.quarto_ipynb +.claude/ +CLAUDE.md diff --git a/CLAUDE.md b/CLAUDE.md deleted file mode 100644 index 307d9ee..0000000 --- a/CLAUDE.md +++ /dev/null @@ -1,752 +0,0 @@ -# Abdullah Lab — Document System Specification -# For Claude Code: read this file before creating or editing any .qmd document - ---- - -## 1. Document types and file locations - -Three document types exist. Each has its own template and lives in a specific location on disk. -Always write new files to the correct location — never guess or use a relative path. - -| Type | Filename prefix | Location on disk | -|---|---|---| -| Experimental plan | `DC{YY}_{NN}_experimental_plan.qmd` | `/Users/dilloncorvino/sciebo/02_Experiments/01_NLC_project/` | -| Protocol | `prot_{scope}_{name}.qmd` | `/Users/dilloncorvino/Documents/Github/Eomesodermin/lab-protocols/protocols_src/` | -| Buffer | `buf_{name}.qmd` | `/Users/dilloncorvino/Documents/Github/Eomesodermin/lab-protocols/protocols_src/` | -| Block | `block_{descriptor}.qmd` | `/Users/dilloncorvino/Documents/Github/Eomesodermin/lab-protocols/templates/module_blocks/` | - -Template files live alongside their respective document types in the locations above. -When creating a new document, read the relevant template from disk at that path — do not reconstruct from memory. - -This file (CLAUDE.md) lives at: -`/Users/dilloncorvino/Documents/Github/Eomesodermin/lab-protocols/CLAUDE.md` - ---- - -## 2. Universal rules (apply to all document types) - -### YAML -- Never add or remove YAML fields from the template — only change values -- `date:` field is always present and always populated (format `YYYY-MM-DD`) -- `author:` is always `"Dillon Corvino"` -- `format:` block is always present in every document (protocols, buffers, and experimental plans) -- `subtitle:` in protocols and buffers is always `"Abdullah Lab, IMMEI, University Hospital Bonn"` - -### R code -- Always use `library(tidyverse)` — never base R alternatives -- Always render tables with `knitr::kable(..., align = "l")` -- Use `scales::scientific()` for large numbers (doses, cell counts, PFU) -- Use `scales::comma()` for counts displayed as integers -- Use `scales::percent()` for fractions -- Use `NA_character_` or `NA_integer_` for unfilled placeholder values — never `"[placeholder]"` or `"TBD"` strings inside tibbles - -### Prose style -- Lab conversational, precise, not padded -- Callout blocks used for warnings, notes, important flags, tips — never bury critical info in prose -- Callout types: `callout-warning` (safety/loss risk), `callout-important` (protocol-critical), `callout-note` (clarification), `callout-tip` (optimisation advice) -- Bold used for numbers, temperatures, speeds, times, key reagents — not for decoration -- `[TBD]` acceptable as a prose placeholder for supplier/catalogue info not yet confirmed - -### Symbol and character conventions (cross-render: HTML + PDF) - -Quarto renders HTML via browser and PDF via LaTeX. Many Unicode characters and HTML tags -that display correctly in HTML will silently drop, error, or render as garbage in PDF. -The rules below ensure consistent output in both formats. - -**Hard rules — never use these in prose markdown:** - -| Do not use | Use instead | Notes | -|---|---|---| -| `µL`, `µg`, `µM`, `µm` (Unicode mu) | `uL`, `ug`, `uM`, `um` | Unicode µ unreliable in PDF | -| `×10⁶` (Unicode superscript digits) | `x10^6` | Unicode superscripts drop in PDF | -| `6` HTML tags | `x10^6` | HTML tags ignored by LaTeX | -| `±` Unicode | `+/-` | Drops in some PDF contexts | -| `≥`, `≤` Unicode | `>=`, `<=` | Risky in PDF prose and tables | -| `≈` Unicode | `~` | Tilde works everywhere | -| `CO₂`, `H₂O` Unicode subscripts | `CO2`, `H2O` | Unicode subscripts unreliable in PDF | -| `α`, `β`, `γ` Unicode Greek in prose | spell out: `alpha`, `beta`, `gamma` | For gene/protein names use italics (*Cd8a*) not Greek | -| `×`, `μ` HTML entities | `x`, `u` prefix | HTML entities are literal strings in LaTeX | - -**Acceptable Unicode in prose:** -- `°C` — degree Celsius survives both renderers reliably -- `→` — rightward arrow is generally safe; avoid in PDF table cells if possible - -**Inside R code chunks:** -- Unicode in tibble string literals is generally safe — knitr handles encoding before Pandoc -- `scales::scientific()` outputs `1e+06` notation — safe in both renderers -- These rules apply to prose markdown only, not to R chunk output - -**If true typographic superscripts are required** (e.g. formal tables): -- Use inline LaTeX math: `$1 \times 10^{6}$` renders correctly in both HTML (via MathJax) and PDF -- Use `$\mu$L` for µL if the `u` prefix is unacceptable in context -- Quarto loads MathJax by default for HTML output — this is safe to use sparingly - ---- - -## 3. Visual structure and navigation - -This is intentional and should not be deviated from. The heading hierarchy is the primary navigation aid in long documents — do not flatten or skip levels. - -### Heading hierarchy (protocols) - -``` -# Section name ← H1: major sections (Purpose, Procedure, Materials, etc.) - visually anchored with bottom border — reader knows which section they're in -## STEP N – Title ← H2: procedure steps only; always use "STEP N –" prefix - clearly subordinate to H1; left-aligned -### Sub-heading ← H3: sub-divisions within a step (Option A / Option B, sub-methods) - visually recessed (secondary text colour) — clearly subordinate -``` - -### Heading hierarchy (experimental plans) - -``` -## Section name ← H2: all top-level sections; centred with bottom border - the visual anchor — reader knows where each section starts -### Sub-section ← H3: subsections within a section (P14 abundance, P14 phenotype, etc.) - left-aligned, normal text colour -#### Fine detail ← H4: stat/method annotations; secondary text colour - reads as annotation, not a competing heading level -``` - -### Horizontal rules -- `---` separator after every top-level section block in experimental plans -- `{{< pagebreak >}}` before and after `\tableofcontents` in protocols -- `{{< pagebreak >}}` before Materials, Troubleshooting sections in protocols -- Do not use `---` within prose or within a section — only between top-level blocks - -### CSS style block — experimental plans - -Always include this block immediately after the YAML, before any content. -This replaces the old CSS block. Do not revert to the old version. - -``` -```{=html} - -``` -``` - -Note: `opacity: 0.6` on h4 and `border-bottom: 1px solid currentColor` on h2 use relative values -so they adapt correctly to both light and dark mode without hardcoded hex colours. - -### CSS style block — protocols - -Protocols render as PDF (via the `format: pdf` block in YAML) so CSS injection does not apply. -Heading visual hierarchy in protocols is achieved purely through Quarto/Pandoc heading sizes. -The heading level conventions in §3 above are sufficient — do not add a CSS block to protocols. - -For HTML preview of protocols (if ever rendered to HTML), the Quarto defaults are acceptable. -Do not add a `{=html}` CSS block to protocol files. - -### Inline metadata header (protocols and buffers only) -Immediately after YAML: -``` -**Protocol ID:** {{< meta protocol_id >}} -**Version:** {{< meta version >}} -**Author:** Dillon Corvino -**Date:** YYYY-MM-DD -``` -Use two-space line breaks (not backslash `\`) between lines. - ---- - -## 4. Protocol document structure - -Mandatory sections in order: - -1. YAML -2. Inline metadata header -3. `# Purpose` — 2–5 sentences, biological motivation and goal -4. `# Critical notes (read before starting)` — bullet list, high-level warnings -5. `# Approximate timing` — bullet list per sub-step + total -6. `{{< pagebreak >}}` + `\tableofcontents` + `{{< pagebreak >}}` -7. `# Procedure` — steps as `## STEP N – TITLE`, with callouts inside steps -8. `{{< pagebreak >}}` -9. `# Protocols used` — mandatory; list any sub-protocols called by this protocol (by protocol_id); write "None" if not applicable -10. `# Buffers used` — mandatory; list buffers by ID only, no compositions; write "None" if not applicable -11. `{{< pagebreak >}}` -12. `# Materials` → `## Reagents` table, `## Disposables` table, `## Equipment` table -13. `{{< pagebreak >}}` -14. `# Troubleshooting` — table: Issue / Possible cause / Suggested solution -15. `{{< pagebreak >}}` -16. `# Safety (brief)` — short bullet list -17. `# Version history` — table: Version / Date / Author / Change summary - -### Buffer document structure - -Mandatory sections in order: - -1. YAML -2. Inline metadata header -3. `# Purpose` -4. `\tableofcontents` -5. `# Linked protocols` — list protocol IDs that use this buffer -6. `# Composition` — table: Component / Stock concentration / Volume for final / Final concentration / Notes -7. `# Preparation` → `## A. Stock preparation (if applicable)` + `## B. Working buffer preparation` -8. `# Storage and stability` -9. `# Reagent details` — table: Component / Supplier / Cat# / Notes -10. `# Safety (brief)` -11. `# Version history` - ---- - -## 5. Experimental plan document structure - -### Universal sections (present in every experimental plan, always) - -``` -YAML -CSS style block -## Goal / Rationale / Research question ← at minimum one of these; see below -## Deviations during execution ← ALWAYS present, always last or second-to-last -## Outcome summary ← ALWAYS present, always last -``` - -### Section ordering guide by experiment complexity - -**Tier 1 — Minimal/qualitative** (panel eval, single timepoint, no transfer): -Goal → Mice used → Primary readouts → Controls → Deviations → Outcome summary - -**Tier 2 — Structured in vivo, no complex calcs** (pilot, simple transfer, depletion optimisation): -Goal → Rationale → Objective → Hypothesis → Experimental overview → Mice used (donor and/or recipient tables) → Experimental groups → Reagents/setup (if relevant) → Protocol steps (if novel method) → Acquisition/gating strategy (if flow) → Primary readouts → Analysis plan → Expected outcomes → Deviations → Outcome summary - -**Tier 3 — Full in vivo with computational blocks** (multi-group LCMV, multi-transfer, NLC ACT): -Goal → Rationale → Research question → Hypothesis → Experimental groups (R) → Doses (R) → Timeline → Recipient counts (R) → Viral dose calculation (R, if applicable) → Cell number calculation (R, if applicable) → Tissues and panels (R) → Readouts and analysis plan → Randomisation and blinding → Deviations → Outcome summary - -The tier is not a formal tag — it guides which blocks to include. When in doubt, include a section rather than omit it. - -### Opening section naming conventions -Use whichever subset is appropriate: -- `## Goal` — one or two sentences, what this experiment is trying to achieve -- `## Rationale` — biological background and motivation (2–5 sentences) -- `## Research question` — single sentence question -- `## Hypothesis` — single sentence prediction -- `## Objective` — specific technical objective (used in pilots/optimisation) -- `## Experimental overview` — bulleted summary of key design parameters (useful for complex experiments) - ---- - -## 6. Block library — copy-paste R sections for experimental plans - -Blocks are copy-pasted into experimental plans. They are NOT used with `{{< include >}}`. -After pasting, edit the `# ---- inputs (edit here) ----` section only. -Do not rename the output data frames (groups.df, mice.df, etc.) — downstream blocks depend on them. - -### Block status - -| Block file | Status | Notes | -|---|---|---| -| `block_mice_table.qmd` | ✅ Keep — REVISED (see spec below) | Split into donor / recipient / single variants | -| `block_randomisation_and_blinding.qmd` | ✅ Keep as-is | Generic, works for all in vivo | -| `block_timeline.qmd` | ✅ Keep — fix placeholders | Remove hardcoded LCMV dates; use generic Day 0/Day N format | -| `block_recipient_counts.qmd` | 🔧 Fix | Hardcodes `receivesNlcTransfer` column name — must be generalised | -| `block_tissues_and_panels.qmd` | 🔧 Fix | Tertiary readout column optional; make two-tier default | -| `block_doses.qmd` | ❌ Retire | Replace with generic `block_doses_generic.qmd` | -| `block_viral_dose_calc_cl13.qmd` | ❌ Retire | Replace with generic `block_viral_dose_calc.qmd` | -| `block_cell_number_calc_nlc_transfer.qmd` | ❌ Retire | Replace with generic `block_cell_number_calc.qmd` | - -### New blocks to create - -| Block file | Purpose | -|---|---| -| `block_donor_mice_table.qmd` | Donor mouse table for transfer experiments | -| `block_recipient_mice_table.qmd` | Recipient mouse table for transfer experiments | -| `block_gating_strategy.qmd` | Numbered gating hierarchy scaffold | -| `block_sort_strategy.qmd` | Sort instrument, nozzle, mode, collection, gate steps | -| `block_data_record_tables.qmd` | Fill-in harvest/procedure tracking tables (DC26_13 pattern) | - ---- - -## 7. Block specifications (revised and new) - -### block_mice_table — three variants - -**Variant A: Single mice table (no transfer)** -Heading: `### Mice used` (H3) -Columns: Mouse ID / Sex / Genotype / DOB / Age (weeks) / Treatment -Age in weeks calculated from DOB and experiment date (from YAML `date:` field). - -```r -### Mice used - -```{r} -library(tidyverse) - -experimentDate <- as.Date("YYYY-MM-DD") # from YAML date field — edit here - -mice.df <- tibble::tibble( - mouseId = c(NA_character_), - sex = c(NA_character_), - genotype = c(NA_character_), - dob = as.Date(c(NA_character_)), - treatment = c(NA_character_) -) |> - dplyr::mutate( - ageWeeks = as.integer(difftime(experimentDate, dob, units = "weeks")) - ) |> - dplyr::select(mouseId, sex, genotype, dob, ageWeeks, treatment) - -knitr::kable( - mice.df, - align = "l", - col.names = c("Mouse ID", "Sex", "Genotype", "DOB", "Age (weeks)", "Treatment") -) -``` - ---- -``` - -**Variant B: Donor mice table (transfer experiment)** -Heading: `### Donor mice` -Columns: Mouse ID / Sex / Genotype / DOB / Age (weeks) - -```r -### Donor mice - -```{r} -library(tidyverse) - -experimentDate <- as.Date("YYYY-MM-DD") # from YAML date field — edit here - -donors.df <- tibble::tibble( - mouseId = c(NA_character_), - sex = c(NA_character_), - genotype = c(NA_character_), - dob = as.Date(c(NA_character_)) -) |> - dplyr::mutate( - ageWeeks = as.integer(difftime(experimentDate, dob, units = "weeks")) - ) |> - dplyr::select(mouseId, sex, genotype, dob, ageWeeks) - -knitr::kable( - donors.df, - align = "l", - col.names = c("Mouse ID", "Sex", "Genotype", "DOB", "Age (weeks)") -) -``` - ---- -``` - -**Variant C: Recipient mice table (transfer experiment)** -Heading: `### Recipient mice` -Columns: Mouse ID / Genotype / Sex / DOB / Age (weeks) / Ear mark / Treatment - -```r -### Recipient mice - -```{r} -library(tidyverse) - -experimentDate <- as.Date("YYYY-MM-DD") # from YAML date field — edit here - -recipients.df <- tibble::tibble( - mouseId = c(NA_character_), - genotype = c(NA_character_), - sex = c(NA_character_), - dob = as.Date(c(NA_character_)), - earMark = c(NA_character_), - treatment = c(NA_character_) -) |> - dplyr::mutate( - ageWeeks = as.integer(difftime(experimentDate, dob, units = "weeks")) - ) |> - dplyr::select(mouseId, genotype, sex, dob, ageWeeks, earMark, treatment) - -knitr::kable( - recipients.df, - align = "l", - col.names = c("Mouse ID", "Genotype", "Sex", "DOB", "Age (weeks)", "Ear mark", "Treatment") -) -``` - ---- -``` - -### block_timeline — fixed (generic placeholders) - -``` -### Timeline - -- **Day 0:** [event] -- **Day N:** [event] -- **Day N:** Harvest - ---- -``` - -### block_recipient_counts — fixed (generalised column name) - -The boolean column name for transfer must match the groups.df column in the same experiment. -Edit `receivesTransfer` to match whatever boolean column is used in groups.df. - -```r -### Recipient counts - -```{r} -# ---- inputs (edit here) ---- -# Change "receivesTransfer" to match the boolean column name in groups.df -transferCol <- "receivesTransfer" - -totalRecipients <- as.integer(sum(groups.df$n)) -transferRecipients <- as.integer(sum(groups.df$n[groups.df[[transferCol]]])) - -recipientCounts.df <- tibble::tibble( - metric = c( - "Total recipients (all groups)", - paste0("Recipients receiving transfer (", transferCol, " == TRUE)") - ), - value = c(totalRecipients, transferRecipients), - notes = c( - "sum(groups.df$n)", - paste0("sum(n) where ", transferCol, " == TRUE") - ) -) - -knitr::kable( - recipientCounts.df, - align = "l", - col.names = c("Metric", "Value", "Notes") -) -``` - ---- -``` - -### block_doses_generic — replaces block_doses.qmd - -```r -### Doses - -```{r} -# ---- inputs (edit here) ---- -doses.df <- tibble::tibble( - item = c(NA_character_), # e.g. "P14 transfer", "LCMV Clone 13", "NLC transfer" - dose = c(NA_real_), # numeric value - units = c(NA_character_), # e.g. "cells / recipient", "PFU / recipient" - route = c(NA_character_), # e.g. "i.v.", "i.p." - notes = c(NA_character_) -) - -knitr::kable( - doses.df, - align = "l", - col.names = c("Item", "Dose", "Units", "Route", "Notes") -) -``` - ---- -``` - -### block_viral_dose_calc — replaces block_viral_dose_calc_cl13.qmd - -Requires: `viralDosePfu` defined in doses block. Requires `receivesVirus` boolean column in groups.df. -Edit `virusCol` if the column name differs. - -```r -### Viral dose calculation - -```{r} -# ---- inputs (edit here) ---- -# viralDosePfu must be defined in the Doses block above -virusCol <- "receivesVirus" # boolean column in groups.df — edit if different - -virusRecipients <- as.integer(sum(groups.df$n[groups.df[[virusCol]]])) - -viralAssumptions.df <- tibble::tibble( - assumption = c("Viral dose per recipient", "Recipients receiving virus"), - value = c(scales::scientific(viralDosePfu), virusRecipients), - notes = c("from Doses block", paste0("sum(n) where ", virusCol, " == TRUE")) -) - -knitr::kable( - viralAssumptions.df, - align = "l", - col.names = c("Assumption", "Value", "Notes") -) -``` - -```{r} -totalVirusPfu <- viralDosePfu * virusRecipients - -viralOutputs.df <- tibble::tibble( - metric = "Total viral PFU required", - value = scales::scientific(totalVirusPfu), - notes = "viralDosePfu x recipients" -) - -knitr::kable( - viralOutputs.df, - align = "l", - col.names = c("Metric", "Value", "Notes") -) -``` - ---- -``` - -### block_cell_number_calc — replaces block_cell_number_calc_nlc_transfer.qmd - -Requires: `dosePerRecipient` defined in doses block. Requires `receivesTransfer` and `donorGenotype` columns in groups.df. -Edit column names at the top to match groups.df. - -```r -### Cell number calculation - -```{r} -# ---- inputs (edit here) ---- -transferCol <- "receivesTransfer" # boolean column in groups.df -donorCol <- "donorGenotype" # donor genotype column in groups.df -# dosePerRecipient must be defined in the Doses block above -overheadFrac <- 0.15 # fraction to cover handling/sorting losses; edit as needed - -yield.df <- tibble::tibble( - donorGenotype = c(NA_character_), # one row per donor genotype; must match groups.df values - yieldPerDonor = c(NA_real_) # estimated cells per donor organ -) - -recipientsByDonor.df <- groups.df |> - dplyr::filter(.data[[transferCol]]) |> - dplyr::group_by(dplyr::across(dplyr::all_of(donorCol))) |> - dplyr::summarise(nRecipients = sum(n), .groups = "drop") |> - dplyr::rename(donorGenotype = dplyr::all_of(donorCol)) - -assumptions.df <- tibble::tibble( - assumption = c( - "Target dose per recipient", - "Overhead fraction", - "Recipients per donor genotype", - "Expected yield per donor (by genotype)" - ), - value = c( - scales::scientific(dosePerRecipient), - scales::percent(overheadFrac, accuracy = 1), - paste0(recipientsByDonor.df$donorGenotype, ": ", recipientsByDonor.df$nRecipients, collapse = " | "), - paste0(yield.df$donorGenotype, ": ", scales::scientific(yield.df$yieldPerDonor), collapse = " | ") - ), - notes = c( - "from Doses block", - "accounts for handling/sorting losses", - "derived from groups table", - "cells per donor organ" - ) -) - -knitr::kable( - assumptions.df, - align = "l", - col.names = c("Assumption", "Value", "Notes") -) -``` - -```{r} -outputsByDonor.df <- recipientsByDonor.df |> - dplyr::left_join(yield.df, by = "donorGenotype") |> - dplyr::mutate( - totalCellsNeeded = dosePerRecipient * nRecipients * (1 + overheadFrac), - donorsNeeded = ceiling(totalCellsNeeded / yieldPerDonor) - ) |> - dplyr::transmute( - `Donor genotype` = donorGenotype, - `Recipients` = as.integer(nRecipients), - `Dose per recipient` = scales::scientific(dosePerRecipient), - `Total cells needed (incl. overhead)` = scales::comma(as.integer(round(totalCellsNeeded))), - `Yield per donor` = scales::scientific(yieldPerDonor), - `Donors required` = as.integer(donorsNeeded) - ) - -knitr::kable(outputsByDonor.df, align = "l") -``` - ---- -``` - -### block_tissues_and_panels — fixed (two-tier default, tertiary optional) - -```r -### Tissues and panels - -#### Organs to collect - -```{r} -library(tidyverse) - -organs.df <- tibble::tibble( - sample = c(NA_character_), - primaryReadouts = c(NA_character_), - secondaryReadout = c(NA_character_), - weighOrgan = c(NA), - notes = c(NA_character_) -) - -knitr::kable( - organs.df, - align = "l", - col.names = c("Sample / organ", "Primary readouts", "Secondary readout", "Weigh organ", "Notes") -) -``` - -#### Flow panels - -```{r} -panels.df <- tibble::tibble( - panelId = c(NA_character_), - panelName = c(NA_character_), - usedFor = c(NA_character_), - notes = c(NA_character_) -) - -knitr::kable( - panels.df, - align = "l", - col.names = c("Panel ID", "Panel name", "Used for", "Notes") -) -``` - ---- -``` - -### block_gating_strategy (new) - -``` -### Gating strategy - -1. FSC/SSC — lymphocyte gate -2. Singlets -3. Live cells (viability dye negative) -4. [Population gate — e.g. CD45+] -5. [Marker 1 vs Marker 2] -6. [Target population] - ---- -``` - -### block_sort_strategy (new) - -``` -### Sort strategy - -- **Instrument:** [sorter name] -- **Nozzle:** [size µm] -- **Sort mode:** [e.g. 2-way, 4-way] -- **Collection vessel:** [tube type and buffer] -- **Collection conditions:** [cooled / RT / FCS-coated] - -**Gate hierarchy:** - -1. FSC/SSC — lymphocytes -2. Singlets -3. Live cells -4. [Population gate] -5. [Target sort gate] - -**Sorted population:** [full phenotype description] - ---- -``` - -### block_data_record_tables (new) - -For experiments where manual fill-in tracking tables are needed during execution (surgery, infection, harvest). - -``` -### Data record — [experiment phase, e.g. harvest] - -| Mouse ID | [Measure 1] | [Measure 2] | [Measure 3] | Notes | -|---|---|---|---|---| -| | | | | | -| | | | | | -| | | | | | - ---- -``` - ---- - -## 8. Known issues to watch for - -- `block_doses.qmd` and `block_viral_dose_calc_cl13.qmd` are hardcoded to LCMV Clone 13 and P14/NLC — do not copy these into new experiments; use the generic replacements specified above -- `block_cell_number_calc_nlc_transfer.qmd` hardcodes `receivesNlcTransfer` and `nlcDonorGenotype` column names — do not copy; use generic version -- `block_recipient_counts.qmd` hardcodes `receivesNlcTransfer` — do not copy; use fixed version -- Protocols `prot_mus_liver_digestion.qmd` and `prot_mus_spleen_dissociation.qmd` are missing `format:` block and `date:` in YAML — these should be updated when next edited -- DC26_01 uses a `params:` YAML approach with deeply nested structures — this pattern was abandoned and should not be replicated - ---- - -## 9. Naming conventions (summary) - -``` -Experimental plans : DC{YY}_{NN}_experimental_plan.qmd -Protocols : prot_{scope}_{descriptor}.qmd - scope = mus / hum / gen / nlc / vir -Buffers : buf_{descriptor}.qmd -Blocks : block_{descriptor}.qmd -``` - -Protocol IDs follow: `{SCOPE}-{ORGAN/SYSTEM}-{DESCRIPTOR}` -Buffer IDs follow: `BUF-{DESCRIPTOR}` - -Version tracking is handled by the `version:` field in YAML — IDs are stable identifiers that do not change across versions. - ---- - -## 10. Generation workflow (for Claude Code) - -### Path constants — always use these, never guess - -``` -EXPERIMENTS = /Users/dilloncorvino/sciebo/02_Experiments/01_NLC_project/ -PROTOCOLS = /Users/dilloncorvino/Documents/Github/Eomesodermin/lab-protocols/protocols_src/ -CLAUDE_MD = /Users/dilloncorvino/Documents/Github/Eomesodermin/lab-protocols/CLAUDE.md -``` - -### When asked to create a new experimental plan: -1. Read this file (CLAUDE.md) -2. Read `Experimental_plan_template.qmd` from `EXPERIMENTS/` path above -3. Ask for: experiment ID, title, date, experiment type (tier 1/2/3), and key parameters -4. Copy the YAML and CSS block from the template exactly — adjust values only -5. Select appropriate sections and blocks for the tier -6. Copy-paste block code verbatim from the relevant block files in `PROTOCOLS/`, then edit only the `# ---- inputs (edit here) ----` sections -7. Leave `NA_character_` / `NA_real_` where values are unknown — never invent values -8. Always include `## Deviations during execution` and `## Outcome summary` as the final two sections -9. Write the completed file to `EXPERIMENTS/` - -### When asked to create a new protocol: -1. Read this file (CLAUDE.md) -2. Read `protocol_template.qmd` from `PROTOCOLS/` -3. Copy YAML from template exactly, adjust values only -4. Follow section order in §4 without deviation -5. Include `# Protocols used` and `# Buffers used` — write "None" if not applicable -6. Write the completed file to `PROTOCOLS/` - -### When asked to create a new buffer: -1. Read this file (CLAUDE.md) -2. Read `buffer_template.qmd` from `PROTOCOLS/` -3. Copy YAML from template exactly, adjust values only -4. Follow section order in §4 -5. Write the completed file to `PROTOCOLS/` - -### When asked to update blocks: -All block files live in `BLOCKS/`. Operate on them there. - -``` -BLOCKS = /Users/dilloncorvino/Documents/Github/Eomesodermin/lab-protocols/templates/module_blocks/ -``` - -- `block_doses.qmd` → retire (rename to `block_doses.qmd.retired`); write `block_doses_generic.qmd` per spec in §7 -- `block_viral_dose_calc_cl13.qmd` → retire (rename to `.retired`); write `block_viral_dose_calc.qmd` per spec in §7 -- `block_cell_number_calc_nlc_transfer.qmd` → retire (rename to `.retired`); write `block_cell_number_calc.qmd` per spec in §7 -- `block_recipient_counts.qmd` → overwrite with fixed version per spec in §7 -- `block_timeline.qmd` → overwrite with generic placeholder version per spec in §7 -- `block_tissues_and_panels.qmd` → overwrite with two-tier version per spec in §7 -- `block_mice_table.qmd` → overwrite with Variant A (single); also create `block_donor_mice_table.qmd` (Variant B) and `block_recipient_mice_table.qmd` (Variant C) per spec in §7 -- Create new blocks: `block_gating_strategy.qmd`, `block_sort_strategy.qmd`, `block_data_record_tables.qmd` per spec in §7 - -Retired blocks are renamed not deleted so existing experimental plans that reference them are not broken. -Do not modify any existing experimental plan or protocol files during block update tasks. diff --git a/docs/listings.json b/docs/listings.json index 0640138..61d1cdf 100644 --- a/docs/listings.json +++ b/docs/listings.json @@ -17,9 +17,9 @@ "/protocols_src/buffers/buf_bhk_propagation_medium.html", "/protocols_src/buffers/buf_facs_macs_buffer.html", "/protocols_src/buffers/buf_freeze_mix_2x.html", + "/protocols_src/buffers/buf_l929_propagation_medium.html", "/protocols_src/buffers/buf_lcmv_plaque_assay_medium.html", - "/protocols_src/buffers/buf_mus_liver_digestion_col_D.html", - "/protocols_src/buffers/buf_mus_liver_digestion_col_IV.html", + "/protocols_src/buffers/buf_mus_liver_digestion.html", "/protocols_src/buffers/buf_mus_NK_med.html", "/protocols_src/buffers/buf_percoll_37pct.html", "/protocols_src/buffers/buf_R0_med.html", diff --git a/docs/protocols_src/buffers/buf_mus_liver_digestion.html b/docs/protocols_src/buffers/buf_mus_liver_digestion.html new file mode 100644 index 0000000..42c9e83 --- /dev/null +++ b/docs/protocols_src/buffers/buf_mus_liver_digestion.html @@ -0,0 +1,1106 @@ + + + + + + + + + + + +Mouse Liver Digestion Buffer – Protocol Library + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+ +
+ + +
+ + + +
+ +
+
+

Mouse Liver Digestion Buffer

+

Abdullah Lab, IMMEI, University Hospital Bonn

+
+ +
+
+ Collagenase and DNase I digestion buffer for enzymatic dissociation of mouse liver tissue. Supports Collagenase D or Collagenase IV in a DMEM, PBS, or HBSS base. +
+
+ + +
+ + +
+
Published
+
+

August 5, 2026

+
+
+ + +
+ + + +
+ + +

Protocol ID: BUF-LIV-DIG Version: v1.0 Author: Dillon Corvino

+
+

Purpose

+

This buffer is used for enzymatic digestion of mouse liver tissue to generate viable single-cell suspensions. It contains a collagenase and DNase I at working concentrations suitable for dissociating liver parenchyma while preserving lymphocyte viability.

+

This single buffer replaces the former separate Collagenase D and Collagenase IV documents (BUF-LIV-DIG-COL-D, BUF-LIV-DIG-COL-IV, both retired at v2.0 of MUS-LIV-DIG).

+
+
+

Linked protocols

+
+
+
Warning: package 'ggplot2' was built under R version 4.5.2
+
+
+
Warning: package 'tibble' was built under R version 4.5.2
+
+
+
Warning: package 'tidyr' was built under R version 4.5.2
+
+
+
Warning: package 'readr' was built under R version 4.5.2
+
+
+
Warning: package 'purrr' was built under R version 4.5.2
+
+
+
Warning: package 'dplyr' was built under R version 4.5.2
+
+
+
Warning: package 'lubridate' was built under R version 4.5.2
+
+
+
- `MUS-LIV-DIG`
+
+
+
+
+
+

Choice of collagenase and base medium

+

Two collagenases are in routine use. They are not interchangeable at the same concentration — Collagenase D is used at twice the concentration of Collagenase IV.

+ +++++ + + + + + + + + + + + + + + + + + + + +
EnzymeWorking concentrationNotes
Collagenase D1 mg/mLRoche 11088858001; supplied as lyophilised powder
Collagenase IV0.5 mg/mLHalf the concentration used for Collagenase D
+

DNase I is 50 ug/mL for both.

+

The base medium may be DMEM (incomplete), PBS 1x, or HBSS 1x — these are interchangeable for this application. Use whichever is on hand; HBSS and PBS avoid the phenol red background in DMEM if that matters downstream.

+
+
+
+ +
+
+Important +
+
+
+

Do not use an EDTA-containing buffer (e.g. MACS Buffer) as the base medium, and do not perfuse the liver with one. Collagenases are Ca2+/Zn2+-dependent metalloproteases and EDTA chelates these cofactors, inhibiting digestion.

+
+
+
+
+

Working buffer composition

+
+
+ +++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EnzymeFinal volume (mL)Base mediumCollagenase (100 mg/mL stock)DNase I (10 mg/mL stock)
Collagenase D1to 1 mL10 uL5 uL
Collagenase D5to 5 mL50 uL25 uL
Collagenase D10to 10 mL100 uL50 uL
Collagenase D25to 25 mL250 uL125 uL
Collagenase D50to 50 mL500 uL250 uL
Collagenase IV1to 1 mL5 uL5 uL
Collagenase IV5to 5 mL25 uL25 uL
Collagenase IV10to 10 mL50 uL50 uL
Collagenase IV25to 25 mL125 uL125 uL
Collagenase IV50to 50 mL250 uL250 uL
+
+
+

5 mL of working buffer is required per liver.

+
+
+

Preparation

+
+

Stock solutions

+ + + + + + + + + + + + + + + + + + + + +
ReagentStock concentrationStorage
Collagenase D or IV100 mg/mL in sterile PBSAliquot at -20 °C
DNase I10 mg/mLAliquot at -20 °C; avoid repeated freeze-thaw
+
+
+

Reconstitution of Collagenase powder

+

Collagenase D is supplied as a lyophilised powder and must be reconstituted before use.

+
    +
  1. Add 1 mL sterile PBS 1x directly to a vial containing 100 mg Collagenase powder.
  2. +
  3. Swirl gently until fully dissolved; do not vortex.
  4. +
  5. This yields a 100 mg/mL stock.
  6. +
  7. Aliquot into single-use volumes and store at -20 °C, labelled with enzyme, concentration, date, and initials.
  8. +
+
+
+

Preparation of working buffer

+
    +
  1. Thaw collagenase and DNase I aliquots on ice.
  2. +
  3. Add the base medium (DMEM, PBS, or HBSS) to a sterile tube.
  4. +
  5. Add collagenase and DNase I per the table above.
  6. +
  7. Mix gently by inversion; do not vortex.
  8. +
  9. Pre-warm to 37 °C immediately before use.
  10. +
+
+
+
+ +
+
+Note +
+
+
+

Collagenase-only buffer (without DNase) may be prepared in advance and frozen in aliquots. Add DNase I fresh on the day of use.

+
+
+
+
+
+

Storage and stability

+
    +
  • Keep freshly prepared working buffer on ice until pre-warming for use.
  • +
  • Do not freeze buffer after DNase I has been added.
  • +
  • Discard unused working buffer at the end of the day.
  • +
+
+
+

Materials

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ReagentSupplierCat. #
Collagenase DRoche, Basel, Switzerland11088858001
Collagenase IV[TBD][TBD]
DNase ISigma-Aldrich, MerckDN25-100MG
DMEM (incomplete)[TBD][TBD]
HBSS 1xPAN-Biotech, Aidenbach, GermanyP04-34500
DPBS, no Ca / no MgGibco, ThermoFisher14190-094
+
+
+

Version history

+ ++++++ + + + + + + + + + + + + + + + + +
VersionDateAuthorChange summary
v1.02026-08-05Dillon CorvinoCreated by merging BUF-LIV-DIG-COL-D and BUF-LIV-DIG-COL-IV. DNase I raised to 50 ug/mL for both enzymes (was 10 ug/mL for Col D, 25 ug/mL for Col IV). Base medium stated as DMEM, PBS, or HBSS.
+ + + +
+ +
+ +
+ + + + + \ No newline at end of file diff --git a/docs/protocols_src/buffers/buf_mus_liver_digestion.pdf b/docs/protocols_src/buffers/buf_mus_liver_digestion.pdf new file mode 100644 index 0000000000000000000000000000000000000000..6b200cb5cec80aea3ad60a92bcd0f1ae4343333e GIT binary patch literal 38146 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

DNBMHsC>Di~YkXzxyjXm4x8< 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 literal 0 HcmV?d00001 diff --git a/docs/protocols_src/buffers/buf_percoll_37pct.html b/docs/protocols_src/buffers/buf_percoll_37pct.html index 45d36ee..80d668e 100644 --- a/docs/protocols_src/buffers/buf_percoll_37pct.html +++ b/docs/protocols_src/buffers/buf_percoll_37pct.html @@ -6,10 +6,10 @@ - - + + -37% Percoll Solution – Protocol Library +37% Percoll Solution (= 33% final Percoll) – Protocol Library