Glycogen Assay - Glycogen-Glo Dilution Testing with M.gigas Ctenidia Homogenate
2026
ctenidia
Glycogen-Glo
glycogen
Pacific oyster
Crassostrea gigas
Magallana gigas
plate reader
Gen 5
Synergy HTX
Author
Sam White
Published
January 12, 2026
INTRO
This was the initial testing of the Glycogen-Glo Assay (Promega) (GitHub; PDF) using M.gigas (Pacific oyster) ctenidia homegenate from 20251210 (notebook entry).
The idea was to identify a range (i.e. a very rough min/max) of starting tissues amounts that will fall within the range of the Glycogen-Glo standard curves. Additionally, this was an initial walk-through of using this kit to help figure out a general protocol that identified any tips/tricks/pitfalls to aid in developing a Standard Operating Protocol (SOP) for the Roberts Lab Handbook.
The assay will assess both glycogen and glucose content. The way the assay works is to convert any glycogen to glucose. As such, glucose levels also need to be assessed for each sample, in order to subtract that background glucose and get accurate glycogen quantification.
Overall, this process did not go very smoothly, but did highlight several challenges that can be addressed in future runs. Granted, I feel like most of this was related to my personal screw ups, but these will still serve as good guidance on improving this protocol for others.
MATERIALS & METHODS
Sample Selection
Sample A2 was selected due to it’s large tissue amount (50mg). This would allow us to perform serial dilutions representing different starting tissue amounts (roughly).
Assay Preparation
Samples and Standard Curves
Per the manufacturer’s recommendations, all reagents were thawed. After thawing, the Glucoamylase Buffer and Luciferin Detection Solution were kept at room temperature, while the remaining components, including the A2 sample, were kept on ice.
Warning
The following dilutions SHOULD have been 1:10 serial dilutions (e.g. 10uL sample in 90uL of dilution buffer)! That is reflected in the equivalent tissue/standard curve concentration values.
HOWEVER, these were, in fact, INCORRECTLY performed as 1:100 dilutions!
The assay was set up to measure the following:
A2 GLYCOGEN content in the following equivalent “tissue” concentrations:
Not diluted (ND), 25mg, 2.5mg, 0.25mg, 0.025mg, 0mg
1:100 dilutions - 1uL sample in 99uL of dilution buffer.
A2 GLUCOSE content in the following equivalent “tissue” concentrations:
Not diluted (ND), 25mg, 2.5mg, 0.25mg, 0.025mg, 0mg
1:100 dilutions - 1uL sample in 99uL of dilution buffer.
GLYCOGEN Standard curve:
20ug/uL, 2ug/mL, 0.2ug/uL, 0.02ug/uL, 0ug/uL
1:100 dilutions - 1uL sample in 99uL of dilution buffer.
GLUCOSE Standard curve:
100µM, 10µM, 1µM, 0.1µM, 0µM
1:100 dilutions - 1uL sample in 99uL of dilution buffer.
All dilutions were performed using a 2:1:1 mixture of PBS, 0.3N HCl, and TRIS Buffer (the latter two are supplied with the kit).
The A2 dilutions were performed in duplicate; primarily due to my poor calculations on the amount of the dilution buffer needed. Ugh.
Warning
The 25mg tissue equivalents were partially skipped - meaning sample was added to a one or two of the 25mg wells - due to insufficient dilution buffer (bad calculations on my part, as well as potentially low stock volumes available).
For future sample handling, sample homogenate should be thawed, vortexed, and centrifuged prior to pipetting to avoid this issue.
The standard curves were each performed in triplicate.
Assay
Samples and standard curves were prepared according to the manufacturer’s instructions. Theh plate used was a Costar 96-well, white, opaque, flat-bottom.
Briefly, 25uL of sample/standard was added to wells (see the plate layout below). For those samples/standards being assessed for glycogen, 25uL of glucoamylase digestion solution was added. For those samples/standards being assessed for just glucose, 25uL of only Glucoamylase Buffer was added. The plate was loosely covered with aluminum foil to prevent light/debris from getting in the wells, gently shaken by hand for 60s, and incubated at room temp for 1hr. All wells were loaded individually.
After the initial incubation period, 50uL of glucose detection reagent was added to ALL wells using an Eppendorf repeater pipette (Repeater M4). The plate was loosely covered with aluminum foil to prevent light/debris from getting in the wells, gently shaken by hand for 60s, and incubated at room temp for 1hr.
After incubating, luminescence was measured on the Roberts Lab Synergy HTX (Agilent) with the Gen5 software (Agilent).
Plate layout
blank = Blank measurements (buffer only - no sample/standard added)
SPL1 = Glycogen measurements of A2 homogenate.
SPL2 = Glucose measurements of A2 homogenate.
STDGly = Glycogen standard curve measurement.
STDGlu = Glucose standard curve measurement.
1
2
3
4
5
6
7
8
9
10
11
12
A
SPL1:1
SPL1:2
SPL1:3
SPL1:4
SPL1:5
blank
Well ID
50
25
2.5
0.25
0.025
Conc/Dil
B
SPL1:1
SPL1:2
SPL1:3
SPL1:4
SPL1:5
blank
Well ID
50
25
2.5
0.25
0.025
Conc/Dil
C
SPL2:1
SPL2:2
SPL2:3
SPL2:4
SPL2:5
blank
Well ID
50
25
2.5
0.25
0.025
Conc/Dil
D
SPL2:1
SPL2:2
SPL2:3
SPL2:4
SPL2:5
blank
Well ID
50
25
2.5
0.25
0.025
Conc/Dil
E
STDGly1
STDGly2
STDGly3
STDGly4
STDGly1
STDGlu1
STDGlu2
STDGlu3
STDGlu4
STDGlu5
Well ID
20
2
0.2
0.02
0
100
10
1
0.1
0
Conc/Dil
F
STDGly1
STDGly2
STDGly3
STDGly4
STDGly1
STDGlu1
STDGlu2
STDGlu3
STDGlu4
STDGlu5
Well ID
20
2
0.2
0.02
0
100
10
1
0.1
0
Conc/Dil
G
STDGly1
STDGly2
STDGly3
STDGly4
STDGly1
STDGlu1
STDGlu2
STDGlu3
STDGlu4
STDGlu5
Well ID
20
2
0.2
0.02
0
100
10
1
0.1
0
Conc/Dil
H
Well ID
Conc/Dil
RESULTS
Raw fluorescence
1
2
3
4
5
6
7
8
9
10
11
12
A
185099
174562
61687
7654
1762
813
B
166410
181069
83790
19910
10704
3187
C
843
744
421
237
227
689
D
396
230
261
257
221
234
E
107660
9963
1968
1277
1164
117932
12389
1703
673
606
F
110174
10220
1875
1256
737
122103
12418
1748
638
499
G
102674
10001
1815
1126
963
121056
12415
1629
480
356
H
Glycogen Standard Curve
Code
library(ggplot2)# Glycogen standard curve data from rows E, F, G, columns 1-5# Concentrations in ug/uLconcentrations <-c(20, 2, 0.2, 0.02, 0)# Luminescence values for each replicaterow_E <-c(107660, 9963, 1968, 1277, 1164)row_F <-c(110174, 10220, 1875, 1256, 737)row_G <-c(102674, 10001, 1815, 1126, 963)# Calculate mean and standard error for each concentrationmeans <-numeric(5)std_errors <-numeric(5)std_devs <-numeric(5)for (i in1:5) { values <-c(row_E[i], row_F[i], row_G[i]) means[i] <-mean(values) std_devs[i] <-sd(values) std_errors[i] <-sd(values) /sqrt(length(values))}# Create data frame for plottingsummary_data <-data.frame(concentration = concentrations,mean_luminescence = means,se = std_errors,sd = std_devs,cv = (std_devs / means) *100)# Calculate linear regression and R-squaredlm_model <-lm(mean_luminescence ~ concentration, data = summary_data)r_squared <-summary(lm_model)$r.squaredslope <-coef(lm_model)[2]intercept <-coef(lm_model)[1]# Sample data from row A (columns 1, 3, 4, 5, 6)sample_data <-data.frame(tissue_mg =c(50, 2.5, 0.25, 0.025, 0),luminescence =c(185099, 61687, 7654, 1762, 813),label =c("50 mg", "2.5 mg", "0.25 mg", "0.025 mg", "0 mg"))# Create the plotplot <-ggplot(summary_data, aes(x = concentration, y = mean_luminescence)) +geom_smooth(method ="lm", se =FALSE, linetype ="dashed", color ="coral", linewidth =1) +geom_errorbar(aes(ymin = mean_luminescence - se, ymax = mean_luminescence + se),width =0.1, linewidth =1, color ="darkblue") +geom_line(color ="steelblue", linewidth =1) +geom_point(aes(color ="Standard Curve", shape ="Standard Curve"), size =4) +geom_point(data = sample_data, aes(x = tissue_mg, y = luminescence,color = label, shape = label), size =4) +scale_color_manual(name ="",values =c("Standard Curve"="steelblue","50 mg"="darkred","2.5 mg"="darkorange","0.25 mg"="darkgreen","0.025 mg"="purple","0 mg"="brown")) +scale_shape_manual(name ="",values =c("Standard Curve"=16,"50 mg"=17,"2.5 mg"=15,"0.25 mg"=18,"0.025 mg"=8,"0 mg"=4)) +annotate("label", x =max(summary_data$concentration) *1.2, y =max(summary_data$mean_luminescence) *0.15,label =sprintf("y = %.2fx + %.2f\nR² = %.4f", slope, intercept, r_squared),size =3.5, fontface ="bold", fill ="white", color ="coral", label.padding =unit(0.3, "lines")) +labs(title ="Glycogen Standard Curve",x ="Glycogen Concentration (µg/µL)",y ="Luminescence",caption ="Error bars represent standard error of the mean (SEM)" ) +scale_x_continuous(breaks = concentrations) +theme_bw() +theme(plot.title =element_text(size =14, face ="bold"),axis.title =element_text(size =12, face ="bold"),panel.grid.minor =element_line(linetype ="dashed", color ="grey70") )# Save the plotggsave("glycogen_standard_curve.png", plot, width =10, height =6, dpi =300)
`geom_smooth()` using formula = 'y ~ x'
Code
# Display the plotplot
`geom_smooth()` using formula = 'y ~ x'
Code
# Print summary statisticscat("Glycogen Standard Curve Summary:\n")cat(rep("=", 50), "\n", sep ="")for (i in1:nrow(summary_data)) {cat(sprintf("Concentration: %g µg/µL\n", summary_data$concentration[i]))cat(sprintf(" Mean Luminescence: %.2f\n", summary_data$mean_luminescence[i]))cat(sprintf(" Standard Error: %.2f\n", summary_data$se[i]))cat(sprintf(" CV%%: %.2f%%\n\n", summary_data$cv[i]))}
Glycogen Standard Curve Summary:
==================================================
Concentration: 20 µg/µL
Mean Luminescence: 106836.00
Standard Error: 2203.92
CV%: 3.57%
Concentration: 2 µg/µL
Mean Luminescence: 10061.33
Standard Error: 80.09
CV%: 1.38%
Concentration: 0.2 µg/µL
Mean Luminescence: 1886.00
Standard Error: 44.51
CV%: 4.09%
Concentration: 0.02 µg/µL
Mean Luminescence: 1219.67
Standard Error: 47.22
CV%: 6.71%
Concentration: 0 µg/µL
Mean Luminescence: 954.67
Standard Error: 123.33
CV%: 22.38%
Glucose Standard Curve
Code
library(ggplot2)# Glucose standard curve data from rows E, F, G, columns 8-12# Concentrations in µMconcentrations_glu <-c(100, 10, 1, 0.1, 0)# Luminescence values for each replicaterow_E_glu <-c(117932, 12389, 1703, 673, 606)row_F_glu <-c(122103, 12418, 1748, 638, 499)row_G_glu <-c(121056, 12415, 1629, 480, 356)# Calculate mean and standard error for each concentrationmeans_glu <-numeric(5)std_errors_glu <-numeric(5)std_devs_glu <-numeric(5)for (i in1:5) { values <-c(row_E_glu[i], row_F_glu[i], row_G_glu[i]) means_glu[i] <-mean(values) std_devs_glu[i] <-sd(values) std_errors_glu[i] <-sd(values) /sqrt(length(values))}# Create data frame for plottingsummary_data_glu <-data.frame(concentration = concentrations_glu,mean_luminescence = means_glu,se = std_errors_glu,sd = std_devs_glu,cv = (std_devs_glu / means_glu) *100)# Calculate linear regression and R-squaredlm_model_glu <-lm(mean_luminescence ~ concentration, data = summary_data_glu)r_squared_glu <-summary(lm_model_glu)$r.squaredslope_glu <-coef(lm_model_glu)[2]intercept_glu <-coef(lm_model_glu)[1]# Sample data from row C (columns 1, 3, 4, 5, 6)sample_data_glu <-data.frame(tissue_mg =c(50, 2.5, 0.25, 0.025, 0),luminescence =c(843, 421, 237, 227, 689),label =c("50 mg", "2.5 mg", "0.25 mg", "0.025 mg", "0 mg"))# Create the plotplot_glu <-ggplot(summary_data_glu, aes(x = concentration, y = mean_luminescence)) +geom_smooth(method ="lm", se =FALSE, linetype ="dashed", color ="coral", linewidth =1) +geom_errorbar(aes(ymin = mean_luminescence - se, ymax = mean_luminescence + se),width =0.1, linewidth =1, color ="darkblue") +geom_line(color ="steelblue", linewidth =1) +geom_point(aes(color ="Standard Curve", shape ="Standard Curve"), size =4) +geom_point(data = sample_data_glu, aes(x = tissue_mg, y = luminescence,color = label, shape = label), size =4) +scale_color_manual(name ="",values =c("Standard Curve"="steelblue","50 mg"="darkred","2.5 mg"="darkorange","0.25 mg"="darkgreen","0.025 mg"="purple","0 mg"="brown")) +scale_shape_manual(name ="",values =c("Standard Curve"=16,"50 mg"=17,"2.5 mg"=15,"0.25 mg"=18,"0.025 mg"=8,"0 mg"=4)) +annotate("label", x =max(summary_data_glu$concentration) *0.7, y =max(summary_data_glu$mean_luminescence) *0.2,label =sprintf("y = %.2fx + %.2f\nR² = %.4f", slope_glu, intercept_glu, r_squared_glu),size =3.5, fontface ="bold", fill ="white", color ="coral", label.padding =unit(0.3, "lines")) +labs(title ="Glucose Standard Curve",x ="Glucose Concentration (µM)",y ="Luminescence",caption ="Error bars represent standard error of the mean (SEM)" ) +scale_x_continuous(breaks = concentrations_glu) +theme_bw() +theme(plot.title =element_text(size =14, face ="bold"),axis.title =element_text(size =12, face ="bold"),panel.grid.minor =element_line(linetype ="dashed", color ="grey70") )# Save the plotggsave("glucose-std-curve.png", plot_glu, width =10, height =6, dpi =300)
`geom_smooth()` using formula = 'y ~ x'
Code
# Display the plotplot_glu
`geom_smooth()` using formula = 'y ~ x'
Code
# Print summary statisticscat("Glucose Standard Curve Summary:\n")cat(rep("=", 50), "\n", sep ="")for (i in1:nrow(summary_data_glu)) {cat(sprintf("Concentration: %g µM\n", summary_data_glu$concentration[i]))cat(sprintf(" Mean Luminescence: %.2f\n", summary_data_glu$mean_luminescence[i]))cat(sprintf(" Standard Error: %.2f\n", summary_data_glu$se[i]))cat(sprintf(" CV%%: %.2f%%\n\n", summary_data_glu$cv[i]))}
Glucose Standard Curve Summary:
==================================================
Concentration: 100 µM
Mean Luminescence: 120363.67
Standard Error: 1252.84
CV%: 1.80%
Concentration: 10 µM
Mean Luminescence: 12407.33
Standard Error: 9.21
CV%: 0.13%
Concentration: 1 µM
Mean Luminescence: 1693.33
Standard Error: 34.69
CV%: 3.55%
Concentration: 0.1 µM
Mean Luminescence: 597.00
Standard Error: 59.37
CV%: 17.22%
Concentration: 0 µM
Mean Luminescence: 487.00
Standard Error: 72.42
CV%: 25.76%
Sample A2 Quantification
Code
# Function to calculate concentration from luminescence using linear model# Returns concentration or "OUT OF RANGE" messagecalculate_concentration <-function(luminescence, slope, intercept, min_conc, max_conc, units) {# Calculate concentration from y = mx + b -> x = (y - b) / m concentration <- (luminescence - intercept) / slope# Check if within rangeif (concentration < min_conc) {return("OUT OF RANGE - TOO LOW") } elseif (concentration > max_conc) {return("OUT OF RANGE - TOO HIGH") } else {return(sprintf("%.4f %s", concentration, units)) }}# Glycogen calculationscat("GLYCOGEN ASSAY RESULTS (Sample A2):\n")cat(rep("=", 70), "\n", sep ="")cat(sprintf("%-15s %-20s %s\n", "Tissue Amount", "Luminescence", "Calculated Glycogen"))cat(rep("-", 70), "\n", sep ="")glycogen_min <-min(concentrations)glycogen_max <-max(concentrations)for (i in1:nrow(sample_data)) { result <-calculate_concentration( sample_data$luminescence[i], slope, intercept, glycogen_min, glycogen_max,"µg/µL" )cat(sprintf("%-15s %-20.0f %s\n", sample_data$label[i], sample_data$luminescence[i], result))}cat("\n\n")# Glucose calculationscat("GLUCOSE ASSAY RESULTS (Sample A2):\n")cat(rep("=", 70), "\n", sep ="")cat(sprintf("%-15s %-20s %s\n", "Tissue Amount", "Luminescence", "Calculated Glucose"))cat(rep("-", 70), "\n", sep ="")glucose_min <-min(concentrations_glu)glucose_max <-max(concentrations_glu)for (i in1:nrow(sample_data_glu)) { result <-calculate_concentration( sample_data_glu$luminescence[i], slope_glu, intercept_glu, glucose_min, glucose_max,"µM" )cat(sprintf("%-15s %-20.0f %s\n", sample_data_glu$label[i], sample_data_glu$luminescence[i], result))}
GLYCOGEN ASSAY RESULTS (Sample A2):
======================================================================
Tissue Amount Luminescence Calculated Glycogen
----------------------------------------------------------------------
50 mg 185099 OUT OF RANGE - TOO HIGH
2.5 mg 61687 11.5114 µg/µL
0.25 mg 7654 1.3269 µg/µL
0.025 mg 1762 0.2163 µg/µL
0 mg 813 0.0374 µg/µL
GLUCOSE ASSAY RESULTS (Sample A2):
======================================================================
Tissue Amount Luminescence Calculated Glucose
----------------------------------------------------------------------
50 mg 843 0.3107 µM
2.5 mg 421 OUT OF RANGE - TOO LOW
0.25 mg 237 OUT OF RANGE - TOO LOW
0.025 mg 227 OUT OF RANGE - TOO LOW
0 mg 689 0.1822 µM
DISCUSSION
Recommended Tissue Amounts
Code
# Calculate the luminescence range for the glycogen standard curvestd_curve_min_lum <-min(summary_data$mean_luminescence)std_curve_max_lum <-max(summary_data$mean_luminescence)cat("GLYCOGEN STANDARD CURVE RANGE:\n")cat(rep("=", 60), "\n", sep ="")cat(sprintf("Minimum luminescence: %.2f (at %g µg/µL glycogen)\n", std_curve_min_lum, min(concentrations)))cat(sprintf("Maximum luminescence: %.2f (at %g µg/µL glycogen)\n\n", std_curve_max_lum, max(concentrations)))# Use the linear regression to predict tissue amounts that would fall within the standard curve range# Using the equation: tissue_amount = (luminescence - intercept) / slopepredicted_min_tissue <- (std_curve_min_lum - intercept) / slopepredicted_max_tissue <- (std_curve_max_lum - intercept) / slopecat("PREDICTED TISSUE AMOUNTS USING STANDARD CURVE:\n")cat(rep("=", 60), "\n", sep ="")cat(sprintf("Equation: y = %.2fx + %.2f\n\n", slope, intercept))cat(sprintf("Minimum tissue amount: %.4f mg\n", predicted_min_tissue))cat(sprintf(" (produces luminescence: %.2f)\n\n", std_curve_min_lum))cat(sprintf("Maximum tissue amount: %.2f mg\n", predicted_max_tissue))cat(sprintf(" (produces luminescence: %.2f)\n\n", std_curve_max_lum))cat(rep("=", 60), "\n", sep ="")cat("RECOMMENDED TISSUE RANGE FOR FUTURE ASSAYS:\n")cat(sprintf("%.4f mg to %.2f mg\n", predicted_min_tissue, predicted_max_tissue))cat(rep("=", 60), "\n", sep ="")# Create formatted values for inline usemax_tissue_formatted <-paste0("`", round(predicted_max_tissue, 2), "mg`")min_tissue_formatted <-paste0("`", round(predicted_min_tissue, 4), "mg`")
GLYCOGEN STANDARD CURVE RANGE:
============================================================
Minimum luminescence: 954.67 (at 0 µg/µL glycogen)
Maximum luminescence: 106836.00 (at 20 µg/µL glycogen)
PREDICTED TISSUE AMOUNTS USING STANDARD CURVE:
============================================================
Equation: y = 5305.39x + 614.37
Minimum tissue amount: 0.0641 mg
(produces luminescence: 954.67)
Maximum tissue amount: 20.02 mg
(produces luminescence: 106836.00)
============================================================
RECOMMENDED TISSUE RANGE FOR FUTURE ASSAYS:
0.0641 mg to 20.02 mg
============================================================
Although this is far from an absolute determination, due to the lack of replicates and poor pipetting, we can still use these numbers as a rough guideline to determine whether or not a sample will likely need to be diluted before assaying or can be used directly without dilution.
SUMMARY
Things we’ve learned:
Pellet insoluble material before pipetting.
Glucose does not really appear to be present (detectable) in ctenidia tissue. This suggests that we can skip running this aspect of the assay going forward. However, some additional testing would be beneficial.
Roughly, the maximum tissue amount to use undiluted is: 20.02mg.
Roughly, the minimum tissue amount to detect glycogen is: 0.0641mg.