<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="https://becoral.github.io/Open_Lab_Notebook_BECORAL//Open_Lab_Notebook_BECORAL/feed.xml" rel="self" type="application/atom+xml" /><link href="https://becoral.github.io/Open_Lab_Notebook_BECORAL//Open_Lab_Notebook_BECORAL/" rel="alternate" type="text/html" /><updated>2026-04-01T15:09:11+00:00</updated><id>https://becoral.github.io/Open_Lab_Notebook_BECORAL//Open_Lab_Notebook_BECORAL/feed.xml</id><title type="html">Open_Lab_Notebook_BECORAL</title><subtitle>Open Lab Notebook of the Benthic ECOlogy ReseArch Lab</subtitle><entry><title type="html">Jeanas_stupid_r_code</title><link href="https://becoral.github.io/Open_Lab_Notebook_BECORAL//Open_Lab_Notebook_BECORAL/Jeanas_Stupid_R_Code/" rel="alternate" type="text/html" title="Jeanas_stupid_r_code" /><published>2026-04-01T00:00:00+00:00</published><updated>2026-04-01T00:00:00+00:00</updated><id>https://becoral.github.io/Open_Lab_Notebook_BECORAL//Open_Lab_Notebook_BECORAL/Jeanas_Stupid_R_Code</id><content type="html" xml:base="https://becoral.github.io/Open_Lab_Notebook_BECORAL//Open_Lab_Notebook_BECORAL/Jeanas_Stupid_R_Code/"><![CDATA[<h1 id="stupid-r-code-j-drake-20260401">Stupid R Code, J. Drake 20260401</h1>

<p>DF = datafile/filename
Can load file from Import Dataset dropdown in RStudio. Make sure to set number columns to numerical. Setting one such columns sets all the other number columns 
Exported data will be in Finder-&gt;Jeana’s MacBook Pro-&gt;Macintosh HD-&gt;Users-&gt;Jeana Drake
If receive “incomplete final line on Filename(.fasta), go to final line of fasta file and hit Enter and re-save.</p>

<h3 id="find-out-working-directory">Find out working directory</h3>
<blockquote>
  <p>getwd()</p>
</blockquote>

<h3 id="increase-number-of-lines-in-output">Increase number of lines in output</h3>
<blockquote>
  <p>max.print=#
#can set at 100000 to be safe</p>
</blockquote>

<h3 id="end--prompt">End “+” prompt</h3>
<p>Control + C</p>

<h3 id="creating-a-data-frame">Creating a data frame</h3>
<p>my_dataframe &lt;- data.frame(Name = c(“Name1”, “Name2”), Age = c(1,2))
#Creating a data table uses the same commands except must open library(data.table) first and use &lt;- data.table command</p>

<h3 id="extracting-a-subset-of-data-from-a-table">Extracting a subset of data from a table</h3>
<blockquote>
  <p>library(data.table)
SubsetDF &lt;- setDT(LargeDF) [ColumnName %chin% SmallDF$ColumnName)
library(xlsx)
write.xlsx(SubsetDF, file = “SubsetDF.xlsx”)</p>
</blockquote>

<h3 id="extracting-a-subset-of-sequences">Extracting a subset of sequences</h3>
<blockquote>
  <p>library(seqinr)
#make sure SequenceFile.fasta is in wd
#load DF with list of sequences IDs in subset. Make sure the sequence ID does NOT have &gt;
NewFastaName &lt;- read.fasta(file = “SequenceFile.fasta”, seqtype = c(“AA”), as.string = FALSE, seqonly = FALSE, strip.desc = FALSE)
NewFastaName2 &lt;- NewFastaName[names(NewFastaName) %in% DF$ColumnName]
write.fasta(sequences = NewFastaName2, names = names(NewFastaName2), file.out = “NewFastaName2.fasta”, open = “w”, nbchar = 60, as.string = FALSE)</p>
</blockquote>

<h3 id="find-poly-aa-stretches">Find Poly-AA Stretches</h3>
<blockquote>
  <p>library(Biostrings)
library(strings)
#Redirect console output to file in home directory (see commands below)
NewFastaName &lt;- readAAStringSet(“Filename.fasta”)
CharacterVectorName &lt;- as.character(NewFastaName)
Fasta_Matches &lt;- str_extract_all(CharacterVectorName, “[AApattern]{MinimumCount,}”)
#Pattern is any amino acids of interest (e.g., [DE])
#Count for pattern is range contained in curly brackets, {#,} gives lower bounds, {#1,#2} gives lower and upper bounds, {,#} gives upper bounds
names(Fasta_Matches) &lt;- names(NewFastaNames)
print(Fasta_Matches)
#stop redirecting output to file</p>
</blockquote>

<h3 id="redirect-all-console-output-to-file">Redirect All Console Output to File</h3>
<blockquote>
  <p>sink(file = “Filename.txt”)
#Run R commands, end with print command
print(OutputOfLastCommand)
#Check output file
sink()
#Stops redirecting output and returns to the console</p>
</blockquote>

<h3 id="merging-files">Merging files</h3>
<blockquote>
  <p>merge(DF1, DF2, by.x = c(“ColumnNameDF1”), by.y = c(“ColumnNameDF2”), all = TRUE)
#works even if there are different numbers of rows
MergedDF &lt;- merge(DF1, DF2, by.x = c(“ColumnNameDF1”), by.y = c(“ColumnNameDF2”), all = TRUE)
#Makes a new table that can be exported. The first command just prints the output in the terminal.</p>
</blockquote>

<h3 id="aa-composition">AA Composition</h3>
<blockquote>
  <p>library(xlsx)
library(“CHNOSZ”)
SubsetDF &lt;- read.fasta(“filename.fasta”, iseq = NULL, ret = “count”, lines = NULL, ihead = NULL, start=NULL, stop=NULL, type=”protein”, id = NULL)
#OR
SubsetDF &lt;- read.fasta(“filename.fasta”, seqtype = c(“AA”), as.string = FALSE, seqonly = FALSE, strip.desc = FALSE)
write.xlsx(SubsetDF, file = “SubsetDF.xlsx”)
#If R gives “line # did not have # elements” error, use BioStrings to accurately read FASTA file
library(Biostrings)
DF_fasta_data &lt;- readAAStringSet(“filename.fasta”)
#CHNOSZ does not seem to work with Biostrings-imported FASTA files
DF_aa_counts &lt;- letterFrequency(DF_fasta_data, letters = AA_ALPHABET)
write.xlsx(DF_aa_counts, file = “DF_aa_counts.xlsx”)
#If “WARNING: An illegal reflective access operation has occurred” error is shown, ignore it and check to see if the file has been exported to the Home Directory anyway</p>
</blockquote>

<h3 id="isoelectric-point-pi">Isoelectric point (pI)</h3>
<blockquote>
  <p>library(seqinr)
library(Biostrings)
library(xlsx)
library(Peptides)
DF_fasta_proteins &lt;- read.fasta(file = “filename.fasta”, seqtype = “AA”, as.string = TRUE)
#requires an empty row at the bottom of the fasta file
DF_seq &lt;- unlist(DF_fasta_proteins)
DF_pi_values &lt;- sapply(DF_seq, pI)
DF_pI_export &lt;- data.frame(Proteins = names(DF_pi_values), pI = DF_pi_values)
write.xlsx(DF_pI_export, file = “DF_pI.xlsx”)</p>
</blockquote>

<h3 id="translate-dna-to-protein">Translate DNA to protein</h3>
<blockquote>
  <p>library(seqinr)
translate(SEQ, frame = 0, sens = “F”, numcode = 1, NAstring = “X”, ambiguous = FALSE)
#frames are 0, 1, or 2; sens F is forward, R would be reverse; numcode 1 is standard genetic code; NAstring X translates aa’s for ambiguous bases as X; ambiguous FALSE doesn’t take ambiguous bases into account
#stop codons are printed as ‘*’
#list of numcodes (for mitochondrial, etc) are at the translate can page
#the above translates one sequence, see below to translate from fasta file in home drive
FASTA &lt;- read.fasta(file = “SequenceFile.fasta”, seqtype = c(“DNA”), as.string = FALSE, seqonly = FALSE, strip.desc = FALSE)
TRANSLATED_FASTA &lt;- translate(seq = FASTA, etc)
#Might require a carriage return after last line</p>
</blockquote>

<h3 id="export-table-larger-than-xlsx-limit-1048576-rows">Export table larger than xlsx limit (1,048,576 rows)</h3>
<blockquote>
  <p>write.table(DF, file = “DF”, sep = “\t”, rownames = FALSE)</p>
</blockquote>

<h3 id="export-table-when-rstudio-cant-install-xlsx-package">Export table when RStudio can’t install xlsx package</h3>
<p>write.table(DF, file = “DF.txt”)</p>

<h3 id="boxplot">Boxplot</h3>
<blockquote>
  <p>boxplot(NumericalColumn~FactorColumn, data = DF, cex.axis = #, cex.lab = #, ylim = c(#,#), ylab = “Text”, horizontal = TRUE, col = #)
#cex.axis, cex.lab, cex.main is an expansion factor; &gt;1 maxes larger, &lt;1 makes smaller
#ylim (or xlim) changes axis limit; can be reversed by switching values (xlim = c(##, #)) where values are related to axis size, not necessary to values in the spreadsheet (I.e., depths of 10 and 30 m might have c(##, #) values of c(2.5, 0.5))
#ylab (or xlab) changes axis label
#horizontal rotates axes; must then rename axis labels
#col sets the color according to the codes below in Mean Centered Cluster Plots
#For multiple colors, col = c(“#”, “#”, “#”, etc) above
#or
boxplot(DF$NumericalColumn, DF$FactorColumn)
boxplot(DF$Numerical ~ DF$Factor)</p>
</blockquote>

<h3 id="boxplot-for-outliers">Boxplot for outliers</h3>
<blockquote>
  <p>boxplot(DF$NumericalColumn, outcol = “red”, cex=#)
#outcol sets the color of outlier circles
#cex sets the outlier circle size</p>
</blockquote>

<h3 id="different-order-to-box-plot">Different order to box plot</h3>
<blockquote>
  <p>o = ordered(DF$FactorColumn, levels = c(“Factor1”, “Factor2”, etc))
boxplot(NumeralColumn~o, data = DF)</p>
</blockquote>

<h3 id="variance-of-all">Variance of all</h3>
<blockquote>
  <p>var(DF$NumeralColumn)</p>
</blockquote>

<h3 id="variance-of-a-subset">Variance of a subset</h3>
<blockquote>
  <p>var(DF$NumeralColumn[DF$FactorColumn==“factorterm”])</p>
</blockquote>

<h3 id="fligner-test">Fligner test</h3>
<blockquote>
  <p>fligner.test(DF$NumeralColumn~DF$FactorColumn)
#test for homogeneity of variance</p>
</blockquote>

<h3 id="shapiro-test">Shapiro test</h3>
<blockquote>
  <p>shapiro.test(DF$NumeralColumn[DF$FactorColumn==“factorterm”])
#test for normal distribution
#can add [1:5000] immediately after FactorColumn and continue in groups of 5000 if &gt;5000 rows</p>
</blockquote>

<h3 id="one-way-anova">One way ANOVA</h3>
<blockquote>
  <p>oneway.test(DF$NumeralColumn~DF$FactorColumn)
#independent samples, normal distribution, same variance</p>
</blockquote>

<h3 id="tukey-hsd-post-hoc-for-anova">Tukey HSD post-hoc for ANOVA</h3>
<blockquote>
  <p>data.lm &lt;- lm(DF$DependentVariable~DF$IndependentVariable, data = DF)
data.av &lt;- aov(data.lm)
summary(data.av)
data.test &lt;- TukeyHSD(data.av)
data.test</p>
</blockquote>

<h3 id="kruskal-wallis-test">Kruskal-Wallis test</h3>
<blockquote>
  <p>kruskal.test(DF$NumeralColumn~DF$FactorColumn)
#for non-normal distribution or inhomogeneous variance</p>
</blockquote>

<h3 id="dunns-test-post-hoc-for-kruskal-wallis">Dunn’s test post-hoc for Kruskal-Wallis</h3>
<blockquote>
  <p>library(dunn.test)
dunn.test(DF$DependentVariable, DF$IndependentVariable, method=“bonferroni”)</p>
</blockquote>

<p>Alternatively:</p>
<blockquote>
  <p>library(FSA)
PT = dunnTest(DependentVariable ~ IndependentVariable, data=DF, method=“bonferroni”)</p>
</blockquote>

<h3 id="t-test">T-test</h3>
<blockquote>
  <p>t.test(NumericalColumn~FactorColumn, data = DF, mv = 0, alt = “two.sided”, conf = 0.95, var.eq = F, paired = F)
#mv = 0 is null hypothesis that mean=0.</p>
</blockquote>

<h3 id="wilcoxin-test">Wilcoxin test</h3>
<blockquote>
  <p>wilcox.test(DF$NumeralColumn~DF$FactorColumn)
#non-parametric t-test</p>
</blockquote>

<h3 id="pairwise-wilcoxin">Pairwise Wilcoxin</h3>
<blockquote>
  <p>pairwise.wilcox.test(DF$NumeralColumn, DF$FactorColumn, paired = FALSE, p.adjust.method=“BH”)
#can use default p.adjust method</p>
</blockquote>

<h3 id="rosners-test-for-outliers">Rosner’s Test for Outliers</h3>
<blockquote>
  <p>library(readr)
library(outliers)
library(EnvStats)
#See box plot for outliers above
rosnerTest(DF$NumericalColumn, k=#, warn=TRUE
#k=# is number of red outlier circles plus one. Can ballpark if you can’t tell bc there are so many
#If k=# value is too low, the same number of outliers as the # will be returned
#$all.stats information will list the outliers first and will give the row number on which they fall</p>
</blockquote>

<h3 id="p-values">P-values</h3>
<p>#all pheatmap library except for pheatmap</p>
<blockquote>
  <p>DF_clean = DF %&gt;%
select(“ColumnName”, starts_with(“Column1”, “Column2”)%&gt;%
as.data.frame()
#ignore select if DF only has the information to be graphed
#as.data.frame converts from tibble to dataframe
DF_clean2 &lt;- DF_clean[, -1]
#removes row name column
rownames(DF_clean2) &lt;- DF_clean[, 1]
#moves row name column over to dataframe’s rownames
pValues &lt;- apply(DF_clean2, 1, function(x) t.test(x[Column#:Column#],x[Column#:Column#])$p.value)
#first range of column numbers is 1st group, second range is second group
library(xlsx)
write.xlsx(as.data.frame(pValues), file = “filename.xlsx”)</p>
</blockquote>

<h3 id="fishers-exact-test">Fisher’s Exact Test</h3>
<blockquote>
  <p>MatrixName = rbind(c(x,x,x), c(x,x,x), c(x,x,x), etc); MatrixName
fisher.test(MatrixName, workspace = 2000000))</p>
</blockquote>

<h3 id="histogram">Histogram</h3>
<blockquote>
  <p>hist(df$NumeralColumn)</p>
</blockquote>

<h3 id="pie-chart-base">Pie Chart (base)</h3>
<blockquote>
  <p>Category1 &lt;- c(“Name1”, “Name2”)
Category2 &lt;- c(1,2)
DataName &lt;- data.frame(Category1, Category2)
#Can see data frame with the following command, but not necessary
DataName
mycolors &lt;- c(“red”, “yellow”)
pie(DataName$Category2, labels = Category1, cex = #, main = “Title”, col = mycolors)
#cex changes the label font size
#base pie command keeps order of Category1
pie(DataName$Category2, labels = NULL, cex = #, main = “Title”, col = mycolors)
#Removes label names, replaces them with numbers that can be removed in Illustrator
legend(“right”, legend = Category1, fill = mycolors, cex = #)
#Add legend. Can use bottomright, bottom, bottomleft, left, or combos with top.
#Legend overwrites part of pie chart. Generate pie chart w/ and w/o legend and crop if needed</p>
</blockquote>

<h3 id="pie-chart-ggplot2">Pie Chart (ggplot2)</h3>
<blockquote>
  <p>library(ggplot2)
#make data frame as above for base pie chart
p &lt;- ggplot(DataName, aes(x = “”, y = Category2/value, fill = Category1/category)) + geom_bar(width = 1, stat = “identity”)
#ggplot doesn’t have a pie chart so start as a bar chart and the x=“” creates a fake x-axis
#fill fills in the slices to assign colors later
pie_chart &lt;- p + coord_polar(theta = “y”)
#converts the bar chart (Cartesian coordinates) to polar coordinates as a circle
pie_chart_enhanced &lt;- pie_chart +
      theme_void() +
      labs(title = “Distribution of Categories”) +
      geom_text(aes(label = category), 
                position = position_stack(vjust = 0.5))
#Not required but enhances the appearance
pie_chart_enhanced
#Displays pie chart
#ggplot2 pie command reorder Category1 alphabetically</p>
</blockquote>

<h3 id="scatterplot">Scatterplot</h3>
<blockquote>
  <p>plot(df$x-axis, df$y-axis, col = “color”, pch = ##, xlim = range(c(#,#)), xlab = “Label”)
#pch gives scatter as points and value changes the size, with smaller values yielding larger size, max value of 25
points(df$x-axis, df$y-axis, col = color2”, pch = ##)
#Adds second set of data on same axes
legend(“toplight”, legend = c(“Label1”, “Label2”), col = c(“color1”, “color2”), pch = 3#</p>
</blockquote>

<h3 id="heatmap">Heatmap</h3>
<blockquote>
  <p>library(tidyverse)
library(magrittr)
library(pheatmap)
library(RColorBrewer)
library(rio)
library(dplyr)
DF_clean = DF %&gt;%
mutate(newcolumnname = paste0(column1, “:”, column2) %&gt;%
select(“newcolumnname”, starts_with(“Numbercolumn1”, etc) %&gt;%
as.data.frame()
#ignore mutate command if gene ID and annotation are already in the same column or if that information isn’t needed
#ignore select if DF only has the information to be graphed
#as.data.frame converts from tibble to dataframe
DF_clean2 &lt;- DF_clean[, -1]
#removes row name column
rownames(DF_clean2) &lt;- DF_clean[, 1]
#moves row name column over to dataframe’s rownames
boxplot(DF_clean2, las = 2)
#checks distribution of data
#las = 2 makes sample label perpendicular
DF_clean2_log10 = log10(DF_clean2)
boxplot(DF_clean2_log10, las = 2)
#minimizes variance
pheatmap(DF_clean2 or DF_clean2_log10), border_color = NA, fontsize_row = #, fontsize_col = #, cluster_rows = F, show_rownames = F)
#cluster_rows = F orders rows according to how they are in the dataframe, like if making a heat map to match a ranking graph
#show_rownames = F removes rownames if making a giant heatmap of tons of genes
#to set the order of the columns but keep their dendrogram, do the following:
library(dendextend)
phtmap &lt;- pheatmap::pheatmap(DF_clean2)
col_dend &lt;- phtmap[[2]]
col_dend &lt;- dendextend::rotate(cold_dend, order = c(“Column1”, “Column2”, etc))
pheatmap(DF_clean2, cluster_cols=as.hclust(col_dend), all the other pheatmap stuff)
#assigned column order must be possible given the dendrogram or it will give an error or just not change the order.</p>
</blockquote>

<h3 id="pca">PCA</h3>
<blockquote>
  <p>library(tidyverse)
library(magrittr)
library(RColorBrewer)
library(rio)
library(dplyr)
#prcomp is standard in R
#Load file
#If file is small, can load with samples in rows and genes/proteins in columns. Remove sample name column as all data must be numerical and R won’t move row names in 1st column to row names using pheatmap commands
#If file is large (like normalized and transformed deseq output) and can’t be transposed first in excel bc it exceeds the column limit, load as a normal file with samples as columns and genes as rows. Remove first row with sample names before loading
DF = as.martrix(DF)
#if file has samples as columns and genes as rows, transpose first using the following command. If file loaded already transposed, skip it
DF_trans &lt;- t(DF)
DF_PCA &lt;- prcomp(DF, center = TRUE, scale = TRUE
#center shifts the variables to be zero centered
#scale shifts the unit variance before the analysis takes place. Scaling is advisable by the rdocumentation.
#if transpose command was used, make sure to do prcomp on DF_trans rather than DF
summary(DF_PCA)
#Gives SD, % of variance, and cumulative % of variance explained by each PC
str(DF_PCA)
#gives information about the PCA object itself
rownames(DF) &lt;- c(“Sample1”, “Sample2”, etc)
#makes position of each sample in PCA plot show up as sample name
library(devtools)
library(ggbiplot)
ggbiplot(DF_PCA, var.axes = FALSE, labels=rownames(DF), labels.size=#)
#4 is a good size for row name font
#var.axes removes the arrows for each factor placing the samples in the PCA. Each factor is a gene or protein
#if xlim or ylim need to be adjusted or to add label or change background color, make the ggbiplot its own object
DF_PCA_obj &lt;- ggbiplot(DF_PCA, var.axes = FALSE, labels=rownames(DF), labels.size=#)
DF_PCA_obj + coord_cartesian(xlim = c(#,#), ylim = (c(#,#) + theme_bw(), ggtitle(“Title”) + theme(plot.title = element_text(hjust = 0.5))
#theme_bw leaves gray lines from tick points but makes background white and puts solid black lines around the plot
#theme(plot.title…) centers the title. The default is to have it left-justified for some stupid reason</p>
</blockquote>

<h3 id="nmds">nMDS</h3>
<blockquote>
  <p>library(vegan)
m_DF = as.matrix(DF)
#just values, no row names or other columns
DF_nmds = metaMDS(m_DF, distance = “dissimilarityindex”, maxit = 200, sfgrmin = 1e-7)
#bray-curtis is default
#maxit increases the # of iteration
#sfgrmin decreases scale factor of the gradient, add this if getting the error ‘scale factor of the gradient &lt;sfgrmin’
#if nmds doesn’t converge, try the following:
DF_nmds2 = metaDMS(m_DF, distance = “dissimilarityindex”, previous.best = DF_nmds, maxit = 200)
#if nmds still doesn’t converge, give up and do PCA</p>
</blockquote>

<h3 id="make-mean-centered-cluster-plots">Make mean-centered cluster plots</h3>
<blockquote>
  <p>maxplot(DF, type = “1”, pch = 1, col = #, ylab = “labelname”, xlay = “labelname”, xaxis = c(#,#), main = “titlename”)
#type is line type assignment, 1=solid line
#col is color assignment, 1=black, 2=pink, 3=green, 4=blue, 5=cyan, 6=magenta, 7=yellow, 8=gray, 9=black, 10=dark pink
#can also use the HEX color code in “” “”
#to make lines different colors, have each group as a separate tab
#after maxplot, do the following:
maxlines(DF, type = “1”, pch = 1, col = different#thaninmaxplot, lay = #forlinetype, lwd = #forlinewidth)</p>
</blockquote>

<h3 id="transpose-dataframe-or-datamatrix">Transpose data.frame or data.matrix</h3>
<p>Transposedf &lt;- t(df)</p>

<h3 id="make-a-list-for-mofa">Make a list for MOFA</h3>
<p>Listname=list(title1=as.matrix(df1),title2=as.matrix(df2))</p>

<h3 id="make-comma-separated-values-onto-separate-lines">Make comma separated values onto separate lines</h3>
<blockquote>
  <p>library(tidyverse)
Sep_DF &lt;- DF %&gt;% tidyr::separate_rows(“Column name”, sep = “,”)
library(xlsx)
write.csv(Sep_DF, file = “Filename.csv”)
#Replace , with whatever separator is used.
#Open in excel and save as tab separated text file
#For Blast2GO, change suffix to .annot</p>
</blockquote>

<h3 id="signal-peptide-prediction">Signal peptide prediction</h3>
<blockquote>
  <p>install.packages(“signalHsmm”)
library(signalHsmm)
#Read in fasta file per above, making sure that stop codon ‘*’ is removed from all sequences
FASTA_signalP &lt;- run_signalHsmm(FASTA[1:n])
#n = highest number of sequences desired
library(xlsx)
FASTA_signalP_table &lt;- pred2df(FASTA_signalP)
write.xlsx(FASTA_signalP_table, file = “FASTA_signal_table.xlsx”)</p>
</blockquote>

<h3 id="inserting-carriage-return-in-text">Inserting carriage return in text</h3>
<p>#This is more for text/BBEdit
#For eDNA sequencing core output for SNPs
#Open in Excel</p>
<blockquote>
  <p>=(cell with “&gt;”)&amp;(cell with sequence)
#Drop to all sequences
#Control-c
#Open in BBEdit
#Right-click
#Paste-values
#Control-f
Replace &gt;
Replace with &gt;control-return
#Replace all</p>
</blockquote>

<h3 id="dendrogram">Dendrogram</h3>
<blockquote>
  <p>library(ape)
DendroName &lt;- read.tree(text = “NEWICK FILE TEXT PASTED IN”)
#Ensure that the tree string ends in a semi-colon.
#Make sure that brackets are matched. Some text editors, such as RStudio or Notepad++, contain built-in syntax highlighting that will highlight the counterpart to each parenthesis as you type.
#Look out for ((double brackets)) or brackets enclosing a single node: the resultant ‘invisible nodes’ can cause R to crash. &gt;plot(DendroName)
#write.dendrogram from ape package doesn’t seem to work (could be RStudio version on my very old laptop)
plot(DendroName, show.node.label = TRUE)
#shows bootstrap values at nodes
nodelabels()
#labels the nodes with their number
tiplabels()
#labels the tips with their number
#If the values beyond the decimal point should be shortened or changed, must be done manually in the Newick file; the node values to be changed are before the : in the format #.########(node value):#.########(node length)
rt.DendroName# &lt;- rotate(DendroName,node#)
plot(rt.DendroName#
#rotates at a node of Node#
#Node #s seem to start at the top of the dendrogram
rr.DendroName# &lt;- root(DendroName,node=#)
plot(rr.Dendroname#)
#reroot at a node of Node#</p>
</blockquote>

<h3 id="superscript--subscripts">Superscript &amp; Subscripts</h3>
<blockquote>
  <p>boxplot(NC~FC, data =DF, ylab = expression(paste(“Text“^”Text”*” Text”)))
#^ raises the next alphanumeric, * lowers the next alphanumeric back to normal
#[] around alphanumeric makes the contents subscripted, * lowers the next alphanumeric back to normal</p>
</blockquote>

<h3 id="greek-letters-and-other-symbols-mac">Greek Letters and other symbols (Mac)</h3>
<p>#RStudio allows copy/paste of symbols and emojis</p>

<h3 id="taxonomizr">Taxonomizr</h3>
<blockquote>
  <p>library(taxonomizr)
prepareDatabase(‘accessionTaxa.sql’)
SQLite database accessionTaxa.sql already exists. Delete to regenerate
#Do NOT delete the database and associated files
[1] “accessionTaxa.sql”
taxaYOURSAMPLE&lt;-getId(c(“sps 1”, “sps 1”, “sps 3”, “etc”), ‘accessionTaxa.sql’)
#Give whatever name you want for taxaYOURSAMPLE
#Each Latin name must be in double quotations and separated by a comma
#There can be a space between the names and the commas
#Just copying the vertical list of Latin names from the Organism column of the Blast output doesn’t work
#RStudio can only handle 4091 characters per line. To get around this for long lists of Latin names, highlight names in the alphabetized list (see Megablast .csv instructions above) up to 4000 characters inclusive of quotes and commas (BBEdit shows character count in the lower right side of the file border) starting with a double quote before a species name and the comma after a species name. Then hit enter. This yields a ‘+’ and starts a new line of the same command. You can then copy in the next batch of species names up to ~4000 characters and continue with species name batches until you run through your entire non-redundant list. On the last line of the command, include the “), ‘accessionTaxa.sql’)” to close out the command.
DF&lt;-getTaxonomy(taxaYOURSAMPLE, ‘accessionTaxa.sql’)
write.table(DF, file = “DF.txt”)
#This command writes a txt file to the home directory containing the taxonomy assignments for all species across all lines of the command above that are separated by ‘+’</p>
</blockquote>

<h3 id="multiple-sequence-alignment">Multiple Sequence Alignment</h3>
<blockquote>
  <p>if (!require(“BiocManager”, quietly = TRUE))</p>
  <ul>
    <li>install.packages(“BiocManager”)
BiocManager::install(“msa”)
library(msa)
#Make sure .fasta file is in Users directory
msa(“Filename.fasta”, method = c(“ClustalOmega”), type = “protein”
#Output to cluster format is not yet resolved.</li>
  </ul>
</blockquote>

<h3 id="mapping-peptides-to-proteins">Mapping Peptides to Proteins</h3>
<blockquote>
  <p>library(protti)
library(devtools)
library(tidyverse)
library(dplyr)
library(magrittr)
#Open .xlsx file of Accession# + Peptide
#Open .xlsx file of Accession# + Protein
Merged_ProtPep &lt;- merge(DF1, DF2, by.x = c(“DF1AccessColumn”), by.y = c(“DF2AccessColumn”), all = TRUE)
write.table(Merged_ProtPep, file = “Merged_ProtPep.txt”)
#Open Merged_ProtPep
ProtPepDF &lt;- as.data.frame(Merged_ProtPep)
PepMap &lt;- find_peptide(data = ProtPepDF,protein_sequence = ProteinColumn,peptide_sequence = PeptideColumn)
write.table(PepMap, file = “MappedPeptides.txt”)</p>
</blockquote>]]></content><author><name></name></author><summary type="html"><![CDATA[Stupid R Code, J. Drake 20260401]]></summary></entry><entry><title type="html">Artificial seawater</title><link href="https://becoral.github.io/Open_Lab_Notebook_BECORAL//Open_Lab_Notebook_BECORAL/Artificial-Seawater/" rel="alternate" type="text/html" title="Artificial seawater" /><published>2026-03-02T00:00:00+00:00</published><updated>2026-03-02T00:00:00+00:00</updated><id>https://becoral.github.io/Open_Lab_Notebook_BECORAL//Open_Lab_Notebook_BECORAL/Artificial%20Seawater</id><content type="html" xml:base="https://becoral.github.io/Open_Lab_Notebook_BECORAL//Open_Lab_Notebook_BECORAL/Artificial-Seawater/"><![CDATA[<h1 id="artificial-seawater">Artificial Seawater</h1>

<p>Based on <a href="https://aslopubs.onlinelibrary.wiley.com/doi/10.4319/lo.1967.12.1.0176">“Preparation of Artificial Seawater”</a> by Kester</p>

<h2 id="materials">Materials</h2>
<ol>
  <li>Gloves</li>
  <li>Lab Coat</li>
  <li>Safety Glasses</li>
  <li>10 L Carboy with spigot</li>
  <li>Access to D.I. water</li>
  <li>Scale</li>
  <li>Weight boats</li>
  <li>Spatula</li>
  <li>1500 ml Flask</li>
  <li>500 ml Flask</li>
  <li>100 ml Flask</li>
  <li>4 Stir bars</li>
  <li>1-2 Stir plates</li>
</ol>

<h2 id="salts">Salts</h2>
<h3 id="solution-1-gravimetric-salts-amounts-of-preparation-of-7-l-of-asw">Solution 1: Gravimetric salts (Amounts of preparation of 7 L of ASW)</h3>
<ol>
  <li>5 L of D.I water</li>
  <li>167.48g Sodium chloride (NaCl)</li>
  <li>28.06 g Sodium sulfate (Na<sub>2</sub>SO<sub>4</sub>)</li>
  <li>4.74 g Potassium chloride (KCl)</li>
  <li>1.37 g Sodium bicarbonate (NaHCO<sub>3</sub>)</li>
  <li>0.69 g Potassium bromide (KBr)</li>
  <li>0.18 g Boric acid (H<sub>3</sub>BO<sub>3</sub>)</li>
  <li>0.02 g Sodium fluoride (NaF)</li>
</ol>

<h3 id="solution-2-volumetric-salts-amounts-to-prepare-at-least-double-of-each-individual-solution">Solution 2: Volumetric salts (Amounts to prepare at least double of each individual solution)</h3>
<p><em>Check if these are already made first</em></p>
<ol>
  <li>203.31 g Magnesium chloride (MgCl<sub>2</sub>.6H<sub>2</sub>O)
 A. 1000 ml of D.I. Water</li>
  <li>29.4 g Calcium chloride (CaCl<sub>2</sub>.2H<sub>2</sub>O)
 A. 200 ml of D.I. Water</li>
  <li>1.6 g Strontium chloride (SrCl<sub>2</sub>.6H<sub>2</sub>O)
 A. 60 ml of D.I. Water</li>
</ol>

<h2 id="method">Method</h2>
<p><em>The steps below allow you to prepare 7L of artificial seawater. You will also have leftovers of each of the solutions 2: volumetric salts to use the next time you prepare the artificial seawater.</em></p>

<ol>
  <li>Obtain personal protective equipment, including gloves, safety glasses, and a lab coat—all are highly recommended here because you may need to break up the salt, which could get on clothes or in your eyes.</li>
  <li>Obtain all materials.</li>
  <li>Obtain all salts to make solutions 1 and 2.</li>
  <li>
    <p>First, prepare each of the volumetric salt solutions as they need extra time on the stir plates to dissolve.</p>

    <p>A. To prepare the magnesium chloride solution, measure 1000 ml of D.I. water weigh out 203.31 grams of magnesium chloride, and add both to a 1500 ml flask with a stir bar, put on a stir plate until dissolved</p>

    <p>B. To prepare the calcium chloride solution, measure 200 ml of D.I. water weigh out 29.4 g  grams of calcium chloride, and add both to a 500 ml flask with a stir bar, put on a stir plate until dissolved</p>

    <p>C. To prepare the strontium chloride solution, measure 60 ml of D.I. water weigh out 1.6  g  grams of strontium chloride, and add both to a 100 ml flask with a stir bar, put on a stir plate until dissolved</p>
  </li>
  <li>
    <p>Now prepare solution 1, in contrast to the previous steps these salts will be directly added to the 10 L carboy</p>

    <p>A. First, add 5L of D.I. water to the 10 L carboy</p>

    <p>B. Then weigh out the following salts and add directly to the 10 L carboy with the 5L of D.I. water (Note: Some of the salts may be crumpled together it is better to pour these salts out into their respective container caps and break them apart using the spatula before weighing, remember to clean the spatula with D.I. water between salts)</p>

    <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code> 1. 167.48g Sodium chloride (NaCl)
    
 2. 28.06 g Sodium sulfate (Na&lt;sub&gt;2&lt;/sub&gt;SO&lt;sub&gt;4&lt;/sub&gt;)
    
 3. 4.74 g Potassium chloride (KCl)
    
 4. 1.37 g Sodium bicarbonate (NaHCO&lt;sub&gt;3&lt;/sub&gt;)
    
 5. 0.69 g Potassium bromide (KBr)
    
 6. 0.18 g Boric acid (H&lt;sub&gt;3&lt;/sub&gt;BO&lt;sub&gt;3&lt;/sub&gt;)
    
 7. 0.02 g Sodium fluoride (NaF)

 8. Measure and add 373 ml of magnesium chloride, 72.3 ml  of calcium chloride, and 6.30 ml of strontium chloride to the 10 L carboy.
</code></pre></div>    </div>

    <p>C. Top off the 10 L Carboy with D.I. water up to the 7L mark.</p>

    <p>D. Add a stir bar and place it on a stirrer for 24 hours.</p>
  </li>
  <li>Measure the pH and salinity intermittently. pH should be around 8.1-8.2 and the salinity should be 36-38 ppt.</li>
  <li>Salinity Check: Use the refractometer to measure the salinity, place a drop of the seawater on the refractometer look through the lens as you point it up towards the light, and examine the PPT mark</li>
  <li>
    <p>pH Check: Plug in and calibrate the pH meter</p>

    <p>A. Materials</p>

    <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>1. Kim wipes
    
2. Sample
    
3. pH meter
    
4. pH buffer solutions
    
5. DI water in a squirt bottle
    
6. Gloves
</code></pre></div>    </div>

    <p>B. Make sure the pH meter is plugged in, and move the rubber stopper part so that the hole is uncovered allowing air to move in and out of the pH meter.</p>

    <p>C. Take the meter out of the standing solution, gently wash it with DI water, and gently pat dry with a Kim wipe.</p>

    <p>D. Dip in the first buffer solution and press calibrate, wait until the meter stabilizes should be within .1 of what the pH of the buffer is.</p>

    <p>E. Gently wash it with DI water, and gently pat it dry with a Kim wipe and repeat with other buffer solutions.</p>

    <p>F. Before taking a reading of your sample place it back in one of the buffers and press read to determine if the meter is correctly reading the buffer.</p>

    <p>G. Again, wash and dry the meter, place the meter in the sample press read, wait for the meter to stabilize, and then record the pH measurement.</p>

    <p>H. Clean and dry the meter, ALWAYS MOVE THE RUBBER STOPPER BACK TO COVER THE HOLE WHEN YOU ARE FINISHED USING THE METER.</p>

    <p>I. Press and hold the power button to shut the meter off.</p>
  </li>
</ol>]]></content><author><name></name></author><summary type="html"><![CDATA[Artificial Seawater]]></summary></entry><entry><title type="html">Biomineral extraction workflow</title><link href="https://becoral.github.io/Open_Lab_Notebook_BECORAL//Open_Lab_Notebook_BECORAL/Biomineral-extraction-workflow/" rel="alternate" type="text/html" title="Biomineral extraction workflow" /><published>2026-03-02T00:00:00+00:00</published><updated>2026-03-02T00:00:00+00:00</updated><id>https://becoral.github.io/Open_Lab_Notebook_BECORAL//Open_Lab_Notebook_BECORAL/Biomineral%20extraction%20workflow</id><content type="html" xml:base="https://becoral.github.io/Open_Lab_Notebook_BECORAL//Open_Lab_Notebook_BECORAL/Biomineral-extraction-workflow/"><![CDATA[<h1 id="biomineral-protein-extraction-workflow-f-prada--j-drake-updated-dec-2025">Biomineral Protein Extraction Workflow, F. Prada &amp; J. Drake, updated Dec 2025</h1>

<p>All steps carried out in a laminar flow biological hood with all preparation tools and surfaces bleached to avoid contamination. Use head net. Beakers, flasks and bottles need to be acid washed and autoclaved before use.</p>

<h2 id="cleaning-for-corals-and-forams">CLEANING FOR CORALS AND FORAMS</h2>

<h3 id="materials">MATERIALS</h3>
<ol>
  <li>Acid-cleaned glass bottle with lid, 500 ml for bleach-hydrogen peroxide mix</li>
  <li>Acid-cleaned graduated cylinder, 100-250 ml, glass or plastic, for measuring bleach &amp; hydrogen peroxide</li>
  <li>Commercial bleach</li>
  <li>Hydrogen peroxide, 30%</li>
  <li>Ultra-pure water (not DI)</li>
  <li>Sharpies</li>
  <li>Conical vials, 50 ml, two per coral specimen (any brand or generic is fine)</li>
  <li>Vial racks</li>
  <li>Hammer</li>
  <li>Balance</li>
  <li>Transfer pipette, 3 ml</li>
  <li>Mortar and pestle set, one per person</li>
  <li>150 μm pore size sieve, can be shared among multiple users</li>
  <li>Weigh boats</li>
  <li>Kim wipes</li>
  <li>Plastic squirt bottle with 10% bleach solution (can be approximate)</li>
  <li>Plastic squirt bottle with 1 M HCl</li>
  <li>Drying oven</li>
</ol>

<h3 id="liths-preparation-for-cleaning">LITHS PREPARATION FOR CLEANING</h3>
<ol>
  <li>After harvesting, centrifuge obtained cells/liths 5,000 x g for 30 mins at RT. Discard supernatant</li>
  <li>PERCOLL PROTOCOL</li>
  <li>Re-suspend n 25 mL KNO3, incubate for 20 minutes on shaker at RT.</li>
  <li>Centrifuge 10,000 x g for 10 minutes. Discard supernatant</li>
  <li>Repeat 1 and 2 twice in total</li>
  <li>Re-suspend in 20 mL PERCOLL, incubate for 20 minutes on shaker at RT.</li>
  <li>Centrifuge 10,000 x g for 10 minutes. Discard supernatant</li>
  <li>Repeat 3 and 4 six times in total.</li>
  <li>Re-suspend in filtered (0.2 µm) seawater. Vortex.</li>
  <li>Centrifuge 10,000 x g, 10 min. Discard supernatant.</li>
  <li>Repeat 5 and 6 twice in total</li>
  <li>Using sterile Falcon tubes (only original with blue cap because tubes from other brands contain polymers that leach during decalcification and interfere with enzymatic digestion before sequencing), oxidize in 1:1 of 30% H2O2: 3% NaClO solution using dripper while stirring for 24 hr. Replace solution 1/day (centrifuge at 10,000 x g for 5 minutes at 4°C, remove supernatant and replace with fresh oxidizing solution. (REPEAT 3 TIMES)</li>
  <li>Wash in ultra-pure water with shaking for 5 minutes, centrifuge at 10,000 x g for 5 minutes at 4 °C, decant and discard rinse water (REPEAT 3 TIMES).</li>
  <li>Dry powder at 60 °C overnight</li>
</ol>

<h3 id="cleaning-coral-fragments">CLEANING CORAL FRAGMENTS</h3>
<ol>
  <li>Bleach, hydrogen peroxide, and HCl are corrosive. PPE (gloves, goggles, and lab coat) should be worn for all steps.</li>
  <li>Pre-label all tubes with the date of initial (fragments) or second (powder) oxidation, species name and any specimen ID. When completing oxidation steps, add the name or initials of person completing the task.</li>
  <li>Coral skeleton fragments can be broken into smaller chunks (~1cm2) by wrapping in a Kim wipe and gently hitting with a hammer. Fragments of each specimen should add up to at least 2 g.</li>
  <li>Oxidize fragments/shells in 1:1 of 30% H2O2: 3% NaClO solution (when making it, leave cap loose) for 30 minutes (3-5 times repeated), in a 50-ml conical vial with a loosened cap. Used solution can be discarded in the sink drain with running water.</li>
  <li>Wash fragments/shells five times with ultra-pure water for one minute each time and decant. Use a transfer pipette to remove any remaining water droplets in tube base. Decanted rinsate can be discarded in the sink drain.</li>
  <li>Dry at max 50 °C overnight with a loosened cap or until fully dry (may take a few days).</li>
  <li>Squirt 10% bleach onto mortar, pestle, and bench area where you will be grinding. Wipe dry with a fresh Kim wipe.</li>
  <li>Crush cleaned fragments/shells to ≤ 150 μm diameter with a mortar and pestle. Place sieve over weigh boat to capture powder that passes through; re-grind pieces that remain &gt;150 μm. Ground powder should be transferred to a new 50-ml conical vial.</li>
  <li>When processing multiple samples, rinse mortar, pestle and sieve with MilliQ and then 0.5-1 M HCL, rinse again with MilliQ and wipe with Kim-Wipes between samples.</li>
  <li>Using 50 mL tubes, oxidize skeleton powder in 1:1 of 30% H2O2: 3% NaClO solution for 30 minutes (3-5 times repeated), with a loosened cap. Centrifuge at 3,000 x g for 3 minutes at 4 °C, remove supernatant and replace with fresh oxidizing solution.</li>
  <li>Wash in ultra-pure water (Volume of MilliQ should be twice the volume of the powder) while shaking for 5 minutes. Centrifuge at 3,000 × g for 3 min at 4 °C, decant and discard rinse water (REPEAT 3 TIMES).</li>
  <li>Dry powder at 50 °C overnight with a loosened cap. The next morning, tighten the cap and tap the conical vial several times to dislodge the skeleton. Dry skeleton will easily break apart while wet skeleton will stay clumped and should continue to be dried with a loosened cap.</li>
  <li>THE FOLLOWING STEPS WERE THE SAME FOR ALL THREE ORGANISMS</li>
</ol>

<h3 id="check-of-cleaning-protocol">CHECK OF CLEANING PROTOCOL</h3>
<ol>
  <li>Weigh powder (so we know the exact starting weight of the sample and we can then calculate how much protein per g of powder we have)</li>
  <li>Add 3 volumes of filtered sterile 1X phosphate buffered saline (PBS) to the powder.</li>
  <li>Vortex for 5 seconds.</li>
  <li>Sonicate at RT for 30 minutes in a sonication bath with ice to avoid overheating.</li>
  <li>Centrifuge at 5,000 x g for 10 minutes at 4 C.</li>
  <li>Transfer supernatant (PBS containing organic matter) into 3 kD ultra filtration tube. Centrifuge filtration tube at 4 °C according to manufacturer instructions, in our case at 5,000 × g, at 4 °C, to concentrate proteins.</li>
</ol>

<h2 id="decalcification-with-dialysis">DECALCIFICATION WITH DIALYSIS</h2>

<ol>
  <li>In the laminar flow hood, pour cleaned powdered samples (1-2.5 g) into a 16 cm-long osmotic tube for dialysis (MWCO = 3.5 kDa Thermo Scientific) with 5 mL of 0.2 µm filtered milli-Q water.</li>
  <li>Place sealed tube into 2 L of 0.1 M CH3COOH (glacial acetic acid) solution under stirring for at least 72 h.</li>
  <li>The tube containing the dissolved OM is dialysed against 0.2 µm filtered milli-Q water until the final pH is about 6.</li>
  <li>The obtained aqueous solution containing the OM is poured into a Falcon (needs to be Falcon as other brands tend to leak inhibitory polymers) tube and centrifuged at 5,000 x g for 60 min at 4 °C to separate the soluble (SOM) and the insoluble (IOM) OM fractions.</li>
</ol>

<h2 id="decalcification-with-tubes">DECALCIFICATION WITH TUBES</h2>

<h3 id="materials-1">MATERIALS</h3>
<ol>
  <li>Plastic squirt bottle with 10% bleach</li>
  <li>Kimwipes or paper towels</li>
  <li>0.5 M CH<sub>3</sub>COOH (glacial acetic acid) solution in an acid-cleaned glass bottle</li>
  <li>Cleaned skeleton powder</li>
  <li>Falcon tubes (usually 1-3 per sample) for collecting SOM solution</li>
  <li>Conical vial racks</li>
  <li>Vortexer with sponge-plate for multiple 50-ml conical vials</li>
  <li>Sharpies</li>
  <li>Refrigerator</li>
  <li>Centrifuge filtration (e.g., Amicon or Macrosep) tubes, 3-10 kDa</li>
  <li>1.5 ml or 0.6 ml Microcentrifuge tubes</li>
  <li>Ultra-pure water
13 .Sterile filtered PBS</li>
  <li>1 ml and 200 ul pipettes</li>
  <li>Pipette tips for 1 ml and 200 ul pipettes</li>
</ol>

<h3 id="method">METHOD</h3>
<ol>
  <li>Wipe the exterior of all vessels and equipment that will be handled in the laminar flow hood with 10% bleach and wipe dry with a Kim wipe or paper towel.</li>
  <li>In the laminar flow hood, pour cleaned powdered samples (1-2.5 g) into a 50 ml Falcon tube (needs to be Falcon as other brands tend to leak inhibitory polymers). Document both the tare weight of the Falcon tube and the weight of the powder+tube. Final protein amounts will be standardized to the dry powder weight.</li>
  <li>Add 20 ml 0.5 M CH3COOH (glacial acetic acid; HAC) solution to the powder. Swirl gently to mix and liberate initial CO2 and cover all powder grains in acid solution.</li>
  <li>Allow initial off-gassing with the tube lid loosely fitting for 5 minutes. Then tighten the cap, firmly wedge the tube into the vortexer sponge plate, and shake vigorously (setting 1-2 seems to be good) for ~12 hours at room temperature. Skeletal powder should be full resuspended by the shaking.</li>
  <li>After turning off the vortexer, gently vent any released CO2 and then reseal the cap.</li>
  <li>Centrifuge at 5,000 x g for 5 min at 4 °C to separate the soluble (SOM) and the undissolved skeleton.</li>
  <li>In the laminar flow hood, decant the supernatant containing the SOM into a fresh Falcon tube labeled for the sample. Store the SOM at 4C. Centrifuge filtration (e.g., on an Amicon or Macrosep) can begin immediately or the SOM can be stored until all is accumulated.</li>
  <li>Add 20 ml fresh 0.5 M glacial acetic acid solution to the undissolved pellet. Repeat the off-gassing, shaking, centrifugation, and decanting until no more pellet seems to dissolve, suggesting that it is only ISOM.</li>
  <li>Add 1-2 ml fresh 0.5 M glacial acetic acid solution to the remaining ISOM pellet and shake as above for 30-60 minutes. Repeat the centrifugation process as above. Carefully pipette or decant the remaining acetic acid solution into the SSOM pool.</li>
  <li>Rinse the ISOM pellet in the Falcon tube with 1-3 ml sterile/filtered 1X PBS. Vortex PBS plus ISOM pellet for 10 seconds, then centrifuge at 5,000 x g for 5 min at 4 °C. Decant or pipette PBS supernatant into the SSOM pool and store at 4 °C.</li>
  <li>SOM concentration by centrifugation on an 3 kDa Amicon/Macrosep should be done at 4 °C at or below the manufacturer’s recommended maximum rotational speed. Ensure proper alignment of the filtration portion of the centrifugation tube if using a fixed angle rotor. Concentration usually takes 30-60 minutes per 20-ml volume. The same Amicon can be used throughout for up to 100 ml of acetic acid-SOM mix; just add more SSOM solution to the top fraction after removing the passed-through fraction from the bottom. Solution that passes through the filter should be saved in a fresh Falcon tube at 4 oC until BCA confirms protein in the concentrated fraction and not in the flow-through.</li>
  <li>If centrifuge filtration takes more than one work-day, concentrate the acetic acid-SSOM solution to &lt;0.5 ml and then add at least 5 ml sterile 1X PBS to the Amicon. Store overnight at 4 oC. Add more acetic acid-SSOM solution to the top fraction the next day and re-commence centrifuge filtration.</li>
  <li>Once all SOM has been concentrated, add ~5 ml sterile 1X PBS to the Amicon and centrifuge to wash out the acid. Repeat.</li>
  <li>Use 200 ul pipette to transfer concentrated and PBS-rinsed SOM to a microcentrifuge tube and add ISOM so we have a combined sample. Note final volume for protein concentration calculations.</li>
  <li>Aliquot SSOM and ISOM for BCA (~50 uL) and SDS-PAGE (~100 uL) and store at –80C.</li>
</ol>]]></content><author><name></name></author><summary type="html"><![CDATA[Biomineral Protein Extraction Workflow, F. Prada &amp; J. Drake, updated Dec 2025]]></summary></entry><entry><title type="html">Buoyant weight</title><link href="https://becoral.github.io/Open_Lab_Notebook_BECORAL//Open_Lab_Notebook_BECORAL/Buoyant-Weight/" rel="alternate" type="text/html" title="Buoyant weight" /><published>2026-03-02T00:00:00+00:00</published><updated>2026-03-02T00:00:00+00:00</updated><id>https://becoral.github.io/Open_Lab_Notebook_BECORAL//Open_Lab_Notebook_BECORAL/Buoyant%20Weight</id><content type="html" xml:base="https://becoral.github.io/Open_Lab_Notebook_BECORAL//Open_Lab_Notebook_BECORAL/Buoyant-Weight/"><![CDATA[<h1 id="buoyant-weight-sop-k-cayemitte-updated-nov-2025">Buoyant Weight SOP, K. Cayemitte, updated Nov 2025</h1>

<h3 id="background">Background:</h3>

<p>Archimedes’ principle states that the upward buoyant force on an object submerged in a fluid is equal to the weight of the fluid it displaces. The buoyant weight technique utilizes this principle to make observations about the mechanical properties of solid materials like shells and skeletons. Measures of weight using the buoyant weight technique can be used to calculate skeletal parameters, including micro density, bulk density, and porosity. This protocol is adapted from “Skeletal micro-density, porosity and bulk density of acroporid corals” (Bucher et al. 1998).</p>

<h3 id="equipment--supplies-needed">Equipment &amp; Supplies Needed:</h3>

<ol>
  <li>Gloves/Lab coat/Safety goggles</li>
  <li>Datasheet or notebook</li>
  <li>10% Bleach Solution (Bleach + H20)</li>
  <li>Container(s) for soaking samples</li>
  <li>Graduated Cylinder</li>
  <li>Container for soaking skeletons or shells</li>
  <li>Vacuum pump (and tubing)</li>
  <li>Large filtering flask</li>
  <li>Stopper for a large filtering flask</li>
  <li>2 three-prong stop cocks</li>
  <li>Desiccator</li>
  <li>Carboy</li>
  <li>1 Analytical Balance</li>
  <li>Milli-Q Water</li>
  <li>Kimwipes</li>
  <li>Density Kit for analytical balances
A. Beaker stand 
B. Screw 
C. Weight 
D. Weigh bucket</li>
  <li>Beaker</li>
  <li>Forceps</li>
</ol>

<h3 id="reagents--standardization">Reagents &amp; Standardization:</h3>
<ol>
  <li>Bleach Solution (10%, amount will depend on the volume needed to submerge samples, ex-100 ml of bleach, 900 mL of DI water, use a higher concentration of bleach if organic material strongly bound)- Measure out bleach using a graduated cylinder and add to the soaking container. Then measure out DI water using a graduated cylinder and add it to the soaking container.</li>
</ol>

<h3 id="sample-preparation">Sample Preparation:</h3>
<ol>
  <li>In the lab, add samples to the soaking container with the bleach solution. Soaking samples will allow any biological material and debris to detach from the solid material.</li>
  <li>Materials should be kept in solution for 3-5 days, depending on the amount of debris on the samples. Multiple rounds of soaking may be needed if organic material is tightly bound to solid material.</li>
  <li>Samples should be removed from the solution after all debris and organic matter have detached, then set to dry until completely dry.</li>
  <li>Drying may take 1-3 days.</li>
</ol>

<h3 id="sample-measurements-dry-weight">Sample Measurements (Dry Weight):</h3>
<ol>
  <li>Once the samples are dry, take 3 consecutive weights using an analytical balance for each sample; these are your “dry weights”. Record all weights on a datasheet.</li>
</ol>

<h3 id="sample-vacuum-and-saturation">Sample Vacuum and Saturation:</h3>
<ol>
  <li>Set up the system for vacuum conditions.</li>
  <li>Attach the vacuum pump with appropriate tubing.</li>
  <li>Tubing should run from the desiccator through a three-prong stop cock (a) to a filter flask, then to the vacuum, to avoid liquid moving into the pump.</li>
  <li>Attach a carboy filled with Milli-Q water with appropriate tubing; the carboy should be elevated above the desiccator so that the flow of water moves from the carboy to the desiccator.</li>
  <li>Tubing should run from the desiccator through a three-prong stop cock (a) to another three-prong stop cock (b) to the elevated carboy.</li>
  <li>Fill the Carboy with Milli-Q water.</li>
  <li>Check the desiccator to make sure it is dry and the O-ring is intact. You may need to add grease to hold a sufficient seal. Turn both 3-prong stop-cocks for vacuum conditions.</li>
  <li>Add dry samples to the desiccator, attach the lid, then turn on the pump to initiate vacuum conditions.</li>
  <li>Wait 1 minute, then tug on the lid to ensure there is an adequate seal. If you are able to break the seal, then there is a leak, or pressure conditions are not holding.</li>
  <li>Vacuum samples for at least 3 hours to ensure all the air has been removed from the samples, then turn the vacuum off.</li>
  <li>Set up the system for saturation conditions.</li>
  <li>First, adjust the three-prong stop cock (a) to saturation mode.</li>
  <li>Second, adjust the three-prong stop cock (b) to saturation mode</li>
  <li>Third, turn the carboy stopper (c) to the “on” mode</li>
  <li>At this point, water should be flowing into the desiccator quickly.</li>
</ol>

<p><em>Make sure water is not leaking into the filtering flask. This can damage the pump if water enters the pump.</em></p>

<p>16.When all samples are saturated (aka the samples are completely submerged in water), turn the carboy nozzle (c) to the “off” mode, and let the rest of the water in the tubing drain into the desiccator.</p>
<ol>
  <li>To release vacuum conditions, pull out the plug on the three-prong stop cock (b). You will hear a rush of air into the system. Once this sound has ceased, vacuum conditions have been released.</li>
  <li>Twist and pull the lid of the desiccator; you may need to use a bit of strength to break the seal. If the seal is not breaking, wait longer so the pressure difference can even out between the inside and outside of the system.</li>
</ol>

<h3 id="density-kit-set-up">Density Kit Set Up:</h3>
<ol>
  <li>Remove the analytical balance weight plate.</li>
  <li>Obtain the holder, screw, and weight that fit into the analytical balance. Place the weight at the bottom of the holder and attach it to the holder using the screw.</li>
  <li>Place the weight attached to the holder into the analytical balance. Then add the beaker holder to the balance.</li>
  <li>Place the beaker filled three-fourths of the way with milli-Q water. Place the weigh bucket in the holder so that the bucket is submerged in the water.</li>
</ol>

<h3 id="sample-measurements-buoyant-weights">Sample Measurements (Buoyant Weights):</h3>
<ol>
  <li>Zero the analytical balance and wait for it to read 0.000.</li>
  <li>Use forceps to quickly and carefully transfer one sample from the desiccator to the weigh bucket.</li>
  <li>Record the weight in the data sheet. This is the buoyant weight.</li>
  <li>Repeat this process (steps 1-3) until you have 3 buoyant weights per sample.</li>
  <li>To maintain a state of saturation for the samples in between buoyant weight measurements, keep the samples submerged in the desiccator water.</li>
</ol>

<h3 id="sample-measurements-saturated-weights">Sample Measurements (Saturated Weights):</h3>
<ol>
  <li>Zero the analytical balance and wait for it to read 0.000.</li>
  <li>Use forceps to pick up one sample, gently blot with a Kimwipe to remove large drops of water. The goal is to leave a thin layer of water covering the sample so water remains in any pores or crevices, but excess water that may drip off is removed.</li>
  <li>Weigh the sample on one of the outer weight plates.</li>
  <li>Record the weight in the data sheet. This is the saturated weight.</li>
  <li>Repeat this process (steps 1-4) until you have 3 saturated weights per sample.</li>
  <li>To maintain a state of saturation for the samples, as evaporation will act on the thin film of water on the outer surface of the sample, take repeated weights as quickly as possible.</li>
  <li>Do not place the sample back into the desiccator/submerge the sample between weights.</li>
</ol>

<h3 id="mechanical-properties-analysis">Mechanical Properties Analysis</h3>

<p>Utilize the Mechanical Properties Spreadsheet to input the dry, buoyant, and saturated weights. This spreadsheet will then automatically calculate averages and standard deviations for each type of weight.  Automatic calculations of mechanical properties will be performed, which will be used to calculate average microdesnity, average porosity, and average bulk density.</p>

<h3 id="mechanical-properties-calculations">Mechanical Properties calculations:</h3>
<h3 id="terms">Terms</h3>
<p>Dry Weight (DW) = Sample’s weight in air 
Buoyant Weight (BW) = Sample weight when partly supported by buoyancy 
BW = DW – (mass of water displaced) 
Mass of water displaced = DW - BW</p>

<p><em>Based on Archimedes’ principle</em>
Saturated Weight (SW) = Sample’s weight in air when all pores are saturated with water</p>

<h3 id="mechanical-properties">Mechanical Properties</h3>
<p>Matrix Volume (cm<sup>3</sup>) = DW - BW<br />
Pore Volume (cm<sup>3</sup>) = SW – DW 
Total Volume (cm<sup>3</sup>) = Matrix Volume (cm<sup>3</sup>) + Pore Volume (cm<sup>3</sup>)</p>

<p>Microdensity g/cm<sup>3</sup> = mg/mm = DW/Volume of the Matrix 
Porosity % = (Pore Volume/ Total Volume) * 100 
Bulk Density (g/cm<sup>3</sup> = mg/mm<sup>3</sup>) = DW - Total Volume</p>]]></content><author><name></name></author><summary type="html"><![CDATA[Buoyant Weight SOP, K. Cayemitte, updated Nov 2025]]></summary></entry><entry><title type="html">Culture counter</title><link href="https://becoral.github.io/Open_Lab_Notebook_BECORAL//Open_Lab_Notebook_BECORAL/Culture-Counter/" rel="alternate" type="text/html" title="Culture counter" /><published>2026-03-02T00:00:00+00:00</published><updated>2026-03-02T00:00:00+00:00</updated><id>https://becoral.github.io/Open_Lab_Notebook_BECORAL//Open_Lab_Notebook_BECORAL/Culture%20Counter</id><content type="html" xml:base="https://becoral.github.io/Open_Lab_Notebook_BECORAL//Open_Lab_Notebook_BECORAL/Culture-Counter/"><![CDATA[<h1 id="culture-counter-k-cayemitte-may-14-2025">Culture Counter, K. Cayemitte, May 14, 2025</h1>

<p><em>Training by William Biggs</em></p>

<ol>
  <li>Prep samples by dilution<br />
 A. Always UV hood and sterilize gloves and the bench with ethanol first before moving cultures.<br />
 B. Thick Cultures: 100 μL in 14.9 mL of filtered sea water (0.4 μm) 
 C. Medium Cultures: 500 μL in 14.5 mL of filtered sea water (0.4 μm) 
 D. Light Cultures: 1000 μL in 14 mL of filtered seawater (0.4 μm)</li>
  <li>Use the same filtered seawater to blank the culture counter (allows you to subtract particles in the filtered seawater from your sample).</li>
  <li>Rinse the cuvette with Milli-Q.</li>
  <li>Waste bucket is the one with the white funnel, just has bleach, sample, and Milli-Q, so you can pour down the drain and then refill with bleach.</li>
  <li>Sign in to use the culture counter should be a notebook on top that shows “Name”, “Date”, “Time”.</li>
  <li>Make sure that the culture counter has filtered seawater in it, and it is clean - this is the container left of the machine.</li>
  <li>Turn on the Coulter Counter using the on-off switch on the right side.</li>
  <li>Turn on the Computer, the box with “Multisizer 3” will come up, click “Ok”.</li>
  <li>Check that the lamp is on.</li>
  <li>Start with filtered seawater in a cuvette for a blank - sigma should be below 2000.</li>
  <li>System “Flush aperture tube” - Cleans the pipes in the equipment.</li>
  <li>Click “Start”.</li>
  <li>Red Value Integration under the curve - population size.</li>
  <li>Samples ½ of a ml.</li>
  <li>For filtered seawater (0.4 μm), it should be below 150 particles.</li>
  <li>Save under “Fiorella” -&gt; “Kayla C”.</li>
  <li>Name the file “Seawater blank 5-14-25,” then click save.</li>
  <li>Setting -&gt; “Load background run” -&gt; “Load the saved seawater blank”.</li>
  <li>Load the sample by pouring your sample into the cuvette, pull down the sample tray by pushing the button under the tray, put the cuvette on the sample tray, push the button, and move the sample into the probe - it should go all the way up.</li>
  <li>Hit start, the box will now say “Backround subtraction”.</li>
  <li>Gate the cell amount by clicking and dragging where the curve starts and stops.</li>
</ol>

<p>*NOTE- THIS DRAG OVER THE CELLS SIZE- look up cell size if you dont know *</p>

<ol>
  <li>The red text that pops up is the number of cells per 0.5 ml.</li>
  <li>Write this number down in your Excel sheet, then calculate the number of cells per mil by multiplying by 2.</li>
  <li>Then, calculate how many cells you have in your sample by multiplying by the dilution factor: Concentration = (Total volume/ volume of cells added)* Number of cells/ ml.</li>
  <li>Rinse the culture counter probe with Milli-Q in between samples.</li>
  <li>When finished with all samples, wipe and rinse the probe with Milli-Q, then add the cuvette with Milli-Q back to the culture counter.</li>
  <li>Turn off the culture counter and exit from the program.</li>
</ol>]]></content><author><name></name></author><summary type="html"><![CDATA[Culture Counter, K. Cayemitte, May 14, 2025]]></summary></entry><entry><title type="html">Density kit</title><link href="https://becoral.github.io/Open_Lab_Notebook_BECORAL//Open_Lab_Notebook_BECORAL/Density-Kit/" rel="alternate" type="text/html" title="Density kit" /><published>2026-03-02T00:00:00+00:00</published><updated>2026-03-02T00:00:00+00:00</updated><id>https://becoral.github.io/Open_Lab_Notebook_BECORAL//Open_Lab_Notebook_BECORAL/Density%20Kit</id><content type="html" xml:base="https://becoral.github.io/Open_Lab_Notebook_BECORAL//Open_Lab_Notebook_BECORAL/Density-Kit/"><![CDATA[<h1 id="density-kit-procedure-k-cayemitte-nov-26-2024">Density Kit Procedure, K. Cayemitte, Nov 26, 2024</h1>

<h3 id="materials">Materials</h3>
<ol>
  <li>Density Kit</li>
  <li>Balance</li>
  <li>Milli Q water for nonliving specimens, use ASW if you are measuring the weights for living organisms</li>
</ol>

<h3 id="methods">Methods</h3>
<ol>
  <li>Turn balance on.</li>
  <li>Remove the weigh plate from the balance.</li>
  <li>Assemble the density kit stand by attaching the gold weight to the stand with the screw.</li>
  <li>Place the stand with a weight attached to the balance weigh port (the section that you removed the weight plate from).</li>
  <li>Add the beaker holder.</li>
  <li>Add the weigh bucket and beaker filled with milli-Q water.</li>
</ol>]]></content><author><name></name></author><summary type="html"><![CDATA[Density Kit Procedure, K. Cayemitte, Nov 26, 2024]]></summary></entry><entry><title type="html">Fire</title><link href="https://becoral.github.io/Open_Lab_Notebook_BECORAL//Open_Lab_Notebook_BECORAL/FIRe/" rel="alternate" type="text/html" title="Fire" /><published>2026-03-02T00:00:00+00:00</published><updated>2026-03-02T00:00:00+00:00</updated><id>https://becoral.github.io/Open_Lab_Notebook_BECORAL//Open_Lab_Notebook_BECORAL/FIRe</id><content type="html" xml:base="https://becoral.github.io/Open_Lab_Notebook_BECORAL//Open_Lab_Notebook_BECORAL/FIRe/"><![CDATA[<h1 id="fluorescence-induction-and-relaxation-fire-k-cayemitte-nov-26-2024">Fluorescence Induction and Relaxation (FIRe), K. Cayemitte, Nov 26, 2024</h1>

<p><em>Maxim Gorbunov</em></p>

<p>Gorbunov, Maxim Y., and Paul G. Falkowski. <a href="https://aslopubs.onlinelibrary.wiley.com/doi/full/10.1002/lno.11581">“Using chlorophyll fluorescence kinetics to determine photosynthesis in aquatic ecosystems.”</a> Limnology and Oceanography 66.1 (2021): 1-13.</p>

<p>Gorbunov, Maxim Y., and Paul G. Falkowski. <a href="https://www.annualreviews.org/content/journals/10.1146/annurev-marine-032621-122346">“Using chlorophyll fluorescence to determine the fate of photons absorbed by phytoplankton in the World’s oceans.”</a> Annual Review of Marine Science 14 (2022): 213-238.</p>

<p>Phytoplankton physiology and chlorophyll variable fluorescence: how it works and how we can do better</p>

<h3 id="variable-fluorescence">Variable fluorescence</h3>
<ol>
  <li>Based on measurements of fluorescence on microsecond to mili second</li>
  <li>First phase-100 microseconds (powerful excitation to close action centers)</li>
  <li>Fully closed by the second phase</li>
  <li>F<sub>o</sub> - baseline fluorescence, some reaction centers are open and some are closed started conditions</li>
  <li>F<sub>m</sub> - saturating light so all reaction centers close and all energy is released as fluorescence</li>
  <li>F<sub>v</sub> - variable fluorescence</li>
  <li>F<sub>v</sub>/F<sub>m</sub> - main parameter, quantum efficiency of photosystem 2</li>
  <li>You want to get an additional parameter to supplement the information</li>
  <li>As part of energy photochemistry, some is lost as heat and as fluorescence 
 A. In chlorophyll, you have antennas that turn light into energy 
 B. How much of the energy 
 C. Thermal dissipation (photoacoustics- impossible to use in the ocean), Fluorescence, Photosynthetic efficacy = 1 (energy budget)
 D. FIRe gives you a sense of whether systems are working or not</li>
  <li>The large size of the  antenna = proportional to Alpha</li>
  <li>Cross section slow rise of alpha-model photosynthetic rates of variable photosynthesis</li>
  <li>At the end of the second impulse, turn off and look at the relaxation of photosystem II of F<sub>m</sub> to F<sub>o</sub> (using large flashes of light) - longer time scale (milliseconds)</li>
</ol>

<h3 id="second-lifetime-measurements">Second-lifetime measurements</h3>
<ol>
  <li>Fluorescence is short picoseconds</li>
  <li>Picosecond time scale</li>
  <li>Very fast phenomena</li>
  <li>First process of photosynthesis to get info about other stages</li>
  <li>Million times faster of kinetic (higher resolution)</li>
</ol>

<h3 id="light-curves">Light Curves</h3>
<ol>
  <li>Photosynthesis is a function of irradiance</li>
  <li>ETR - electron transport rates (photosynthetic rates) number of elections per second per reaction center</li>
  <li>Initial slope and maximum photosynthesis = complete picture
 A. The initial slope is controlled by F<sub>v</sub>/F<sub>m</sub>- maximum quantum yield f photochemistry in PSII, controlled by photosynthetic turnover rates - how fast the entire chain of secondary photochemical reactions, rate limiting process - limits and controls the amount of light absorbed</li>
  <li>Low PAR - the initial slope is limited light absorption</li>
  <li>High PAR - controlled by photosynthetic turnover rate - How much the energy absorbed and stored can be used in photosynthesis</li>
  <li>Maximum Turnover rates (1/tau) is important to measure/model PP rates in water column-integrated rates</li>
</ol>

<h3 id="rationale-for-using-fire-variable-fluorescence-to-derive-photosynthetic-rates">Rationale For using FIRe variable fluorescence to derive photosynthetic rates</h3>
<ol>
  <li>Higher photosynthesis, less fluorescence, if heat dissipation</li>
  <li>This is the reason we measure F<sub>v</sub>/F<sub>m</sub> over heat dissipation</li>
  <li>Under low light 30% quantum yield of fluorescence is usually small compared to the quantum yield of photosynthesis (70%), The quantum yield of heat is usually 5%</li>
  <li>Under low light, the ideal 60% is dissipated as heat, only 30% is used in photosynthesis</li>
  <li>This switch is due to nutrients</li>
  <li>Under more and more light cells have active photoprotective pigment= more energy dissipated as heat</li>
</ol>

<h3 id="nonphotochemical-quenching-npq---thermal-dissipation-when-you-increase-light--photoprotective-mechanism-fluorescence-goes-down-and-competes-with-what-dissipation">Nonphotochemical quenching (NPQ) - Thermal dissipation when you increase light = photoprotective mechanism, fluorescence goes down and competes with what dissipation</h3>
<ol>
  <li>NPQ is not the whole thermal dissipation</li>
  <li>NPQ is an increase in thermal dissipation</li>
  <li>NPQ affects F<sub>m</sub>, F’, and F<sub>o</sub> - these all become close to each other when they get closer</li>
  <li>So most of the dissipated energy is heat</li>
  <li>How would we measure PS from this? 
 A. ETR(e)= E (how much light is absorbed by photosystem II) x Sigma PSII (functional absorption cross-sectional from photosystem II x the number of photosystems that are open</li>
</ol>

<h3 id="limation-of-this-amplitude-based-fv-technique">Limation of this amplitude-based F~v~ technique</h3>
<ol>
  <li>Photosynthetic rates are not measured directly from F<sub>v</sub> signals, the rates are models</li>
  <li>Many parameters in the model have many sources of errors</li>
</ol>

<h3 id="kinetic-analysis">Kinetic analysis</h3>
<ol>
  <li>Deduced from RIE relaxations record under ambient light</li>
  <li>Photosynthetic rates (1/tau)</li>
  <li>Low light= fast</li>
  <li>Photosynthetic rates approach photosynthetic turn which is how you get tau</li>
</ol>

<h3 id="using-fvfm">Using F<sub>v</sub>/F<sub>m</sub></h3>
<ol>
  <li>F<sub>v</sub>/F<sub>m</sub> could be used as an indicator of nutrient stress
  A. Relationship better F<sub>v</sub>/F<sub>m</sub> and growth rates is highly non-linear
  B. Not strong</li>
  <li>A new kinetic approach was better for predicting nutrient stress in phytoplankton
 A. Based on the photosynthetic turnover rate</li>
  <li>Conclusion
 A. think beyond F<sub>v</sub>/F<sub>m</sub> and look at all photosynthetic parameters 
 B. Use a combination of amplitude-based and kinetic analyses in the new mimi-FIRE to offer a significant improvement in the capability of F<sub>v</sub> for assessment of absolute photosynthetic rates, growth, NPP, and relation to N and Fe stress in the ocean
    <ol>
      <li>F<sub>m</sub> can be a proxy for chlorophyll or algae- yes but you may have saturation at a certain point</li>
      <li>F<sub>o</sub> can be used to determine inactive reaction centers</li>
      <li>F<sub>v</sub>, F<sub>m</sub>, F<sub>v</sub>/F<sub>m</sub></li>
      <li>Sigma - cross-sectional photosynthetic rates</li>
      <li>Tau - photosynthetic turnover 
 C. If coral is acclimated to low light, P<sub>max</sub> may not be 
 D. The most accurate picture if you make 2 measurements- shaded colony and high light acclimated colony for a full picture 
 E. Measuring reaction center recovery time could be a parameter for health
 F. For thermal stress in corals, tau will be affected by thermal stress so we can examine how they react 
 G. Low temp</li>
    </ol>
  </li>
</ol>

<h3 id="other-considerations">Other considerations</h3>
<ol>
  <li>What is the extent of nutrient limitation in tropics and how it effects zoox growth rates?</li>
  <li>Relates to upwelling conditions which bring high nutrient conditions</li>
  <li>Subject to hugh nutrient and cool temps- simulate upwelling</li>
  <li>Subject to low nutrient arm water in lab</li>
</ol>]]></content><author><name></name></author><summary type="html"><![CDATA[Fluorescence Induction and Relaxation (FIRe), K. Cayemitte, Nov 26, 2024]]></summary></entry><entry><title type="html">Hobo ph temp loggers</title><link href="https://becoral.github.io/Open_Lab_Notebook_BECORAL//Open_Lab_Notebook_BECORAL/HOBO-pH-Temp-Loggers/" rel="alternate" type="text/html" title="Hobo ph temp loggers" /><published>2026-03-02T00:00:00+00:00</published><updated>2026-03-02T00:00:00+00:00</updated><id>https://becoral.github.io/Open_Lab_Notebook_BECORAL//Open_Lab_Notebook_BECORAL/HOBO%20pH%20Temp%20Loggers</id><content type="html" xml:base="https://becoral.github.io/Open_Lab_Notebook_BECORAL//Open_Lab_Notebook_BECORAL/HOBO-pH-Temp-Loggers/"><![CDATA[<h1 id="hobo-ph--temperature-loggers-mx2501-k-cayemitte-may-16-2025">HOBO pH &amp; Temperature Loggers (MX2501), K. Cayemitte, May 16, 2025</h1>

<p><a href="https://manualspro.net/525242-hobo-mx2501-mx-ph-and-temperature-logger-user-guide?utm_source=chatgpt.com">Omega HOBO Data Loggers Manual</a></p>

<h2 id="equipment-and-materials">Equipment and Materials</h2>

<ol>
  <li>HOBO MX2501 Data Logger (includes pre-installed pH electrode submerged in storage solution)</li>
  <li>HOBOconnect App (available for iOS, Android, and Windows)</li>
  <li>Mobile Device or Windows PC with Bluetooth Low Energy (BLE) capability</li>
  <li>pH Calibration Solutions: pH 4.01, 7.00, and 10.00 (e.g., MX2500-CAL-KIT)</li>
  <li>Deionized or Distilled Water and a squirt bottle</li>
  <li>Optional Accessories:
 A. Anti-biofouling copper guard
 B. Calibration beakers
 C. Replacement pH electrode (MX2500-ELECTRODE)
 D. Electrode storage solution (MX2500-STORE-SOLN)</li>
</ol>

<h2 id="pre-deployment-preparation">Pre-Deployment Preparation</h2>

<h3 id="install-hoboconnect-app">Install HOBOconnect App</h3>
<ol>
  <li>Download and install the HOBOconnect app from the App Store, Google Play, or Onset’s website.</li>
  <li>Enable Bluetooth on your device.</li>
</ol>

<h3 id="prepare-the-logger">Prepare the Logger</h3>
<ol>
  <li>Unscrew and remove the clear storage cap containing the storage solution.</li>
  <li>Rinse the pH sensor gently with deionized or distilled water.</li>
  <li>Attach the closure cap to the logger.</li>
</ol>

<h3 id="ph-calibration-procedure">pH Calibration Procedure</h3>
<p><em>Calibration is essential before each deployment to ensure accurate pH measurements.</em></p>
<ol>
  <li>Open the HOBOconnect app and connect to the logger.</li>
  <li>Place the sensor in pH 7.00 buffer solution, ensuring the sensor end cap, temperature sensor, and closure cap are submerged.</li>
  <li>Follow the app’s on-screen instructions to start calibration. Once the pH reading stabilizes, confirm the calibration.</li>
  <li>Rinse the sensor with deionized water.</li>
  <li>Repeat the calibration steps with pH 4.01 and/or 10.00 buffer solutions as needed.</li>
  <li>After calibration, rinse the sensor again with deionized water.</li>
</ol>

<p><em>Note: Calibration should be performed using standard pH buffers. Custom buffers are not supported.</em></p>

<h3 id="logger-configuration">Logger Configuration</h3>
<ol>
  <li>In the HOBOconnect app, configure the following settings:
 A. Logging Interval: 1 second to 18 hours.
 B. Start Mode: Immediate, push button, date &amp; time, or next interval.
 C. Stop Mode: When memory is full, push button, date &amp; time, or after a set logging period.
 D. Bluetooth Power Mode:
   D1. Always On: Bluetooth is continuously active.
   D2. Always Off: Bluetooth activates only when manually triggered.
   D3. Off Water Detect: Bluetooth activates when the logger is out of water.</li>
  <li>Save the settings to the logger.</li>
</ol>

<h2 id="deployment-data-retrieval-maintenance-specs">Deployment, Data Retrieval, Maintenance, Specs</h2>

<h3 id="deployment">Deployment</h3>
<ol>
  <li>Remove the closure cap.</li>
  <li>If biofouling is a concern, attach the anti-biofouling copper guard by aligning its holes with those on the sensor end cap and pH electrode.</li>
  <li>Deploy the logger at the desired location, ensuring it is fully submerged.</li>
</ol>

<p><em>Note: The logger is waterproof up to 40 meters and suitable for both freshwater and saltwater environments.</em></p>

<h3 id="data-retrieval">Data Retrieval</h3>
<ol>
  <li>Retrieve the logger from the deployment site.</li>
  <li>If Bluetooth was set to “Always Off” or “Off Water Detect,” activate it by pressing the switch on the logger or removing it from the water, respectively.</li>
  <li>Open the HOBOconnect app and connect to the logger.</li>
  <li>Download the recorded data.</li>
  <li>Export the data in desired formats (CSV, TXT, XLSX, or HOBO files) for analysis.</li>
</ol>

<h3 id="post-deployment-maintenance">Post-Deployment Maintenance</h3>
<ol>
  <li>Rinse the pH sensor with deionized water.</li>
  <li>Reattach the clear storage cap filled with storage solution to maintain electrode hydration.</li>
  <li>Store the logger in a cool, dry place until the next deployment.</li>
</ol>

<p><em>Note: The pH electrode has a typical lifespan of 6 months and should be replaced as needed.</em></p>

<h3 id="technical-specifications">Technical Specifications</h3>
<ol>
  <li>pH Measurement Range: 2.00 to 12.00 pH</li>
  <li>pH Accuracy: ±0.10 pH units within ±10°C of calibration temperature</li>
  <li>Temperature Range: -2°C to 50°C</li>
  <li>Temperature Accuracy: ±0.2°C</li>
  <li>Memory Capacity: 43,300 measurements</li>
  <li>Battery Life:
 A. 1 year with Bluetooth Always On
 B. 2 years with Bluetooth Off Water Detect
 C. 3 years with Bluetooth Always Off</li>
  <li>Dimensions: 22.86 x 4.27 cm</li>
  <li>Weight: 268.2 mg</li>
</ol>

<h3 id="replacing-the-electrode-needs-to-be-done-every-6-months">Replacing the Electrode (Needs to be done every 6 months)</h3>
<ol>
  <li>
    <p><a href="https://www.onsetcomp.com/products/accessories/mx2500-electrode#compatible-items">MX2500 Replacement Electrode</a>
 Cheaper to do a purchase order on LI-COR INC (approved vendor) than VWR</p>
  </li>
  <li>
    <p><a href="https://www.onsetcomp.com/products/accessories/mx2500-guard">MX2500 Anti-Biofouling Copper Guard</a>
 Cheaper to do a purchase order on LI-COR INC (approved vendor) than VWR</p>
  </li>
</ol>]]></content><author><name></name></author><summary type="html"><![CDATA[HOBO pH &amp; Temperature Loggers (MX2501), K. Cayemitte, May 16, 2025]]></summary></entry><entry><title type="html">Jaia bot sop</title><link href="https://becoral.github.io/Open_Lab_Notebook_BECORAL//Open_Lab_Notebook_BECORAL/JAIA-Bot-SOP/" rel="alternate" type="text/html" title="Jaia bot sop" /><published>2026-03-02T00:00:00+00:00</published><updated>2026-03-02T00:00:00+00:00</updated><id>https://becoral.github.io/Open_Lab_Notebook_BECORAL//Open_Lab_Notebook_BECORAL/JAIA%20Bot%20SOP</id><content type="html" xml:base="https://becoral.github.io/Open_Lab_Notebook_BECORAL//Open_Lab_Notebook_BECORAL/JAIA-Bot-SOP/"><![CDATA[<h1 id="jaia-bot-standard-operating-procedure-k-cayemitte-jan-20-2024">JAIA Bot Standard Operating Procedure, K. Cayemitte, Jan 20, 2024</h1>

<h3 id="sop-based-on-official-training-manual-and-in--person-training">SOP Based on <a href="https://www.jaia.tech/wp-content/uploads/2024/09/JaiaBot-User-Manual-1.5.pdf">Official Training Manual and In- Person Training</a></h3>

<p><em>Training Received by Travis Miles, Becca Horwitz, and Kayla Cayemitte on November 6-8th, 2024 by Michael Rock.</em></p>

<h3 id="important-links-for-jaia-bot-use">Important Links for JAIA Bot Use:</h3>

<p><a href="https://www.jaia.tech/">JAIA Robotics Website</a></p>

<p><a href="https://www.jaia.tech/customer-portal/">Customer Portal</a> 
Access to training videos, training manual, download docker simulation 
Password: Pod_of_Bots</p>

<p><a href="https://www.jaia.tech/wp-content/uploads/2024/09/JaiaBot-User-Manual-1.5.pdf">Training Manual for Reference</a></p>

<p><a href="https://vimeo.com/jaiarobotics">Training and Demo Videos</a></p>

<p><a href="https://github.com/jaiarobotics/jaiabot/blob/1.y/scripts/sim-docker/README.md">Github to Install the JAIA Bot Simulator in a Docker Container</a>
Note: There is a laptop with the simulator already installed in the seawater lab
<em>Do not attempt to install on Mac.</em></p>]]></content><author><name></name></author><summary type="html"><![CDATA[JAIA Bot Standard Operating Procedure, K. Cayemitte, Jan 20, 2024]]></summary></entry><entry><title type="html">Phenomprox sem</title><link href="https://becoral.github.io/Open_Lab_Notebook_BECORAL//Open_Lab_Notebook_BECORAL/PhenomProx-SEM/" rel="alternate" type="text/html" title="Phenomprox sem" /><published>2026-03-02T00:00:00+00:00</published><updated>2026-03-02T00:00:00+00:00</updated><id>https://becoral.github.io/Open_Lab_Notebook_BECORAL//Open_Lab_Notebook_BECORAL/PhenomProx%20SEM</id><content type="html" xml:base="https://becoral.github.io/Open_Lab_Notebook_BECORAL//Open_Lab_Notebook_BECORAL/PhenomProx-SEM/"><![CDATA[<h1 id="phenomprox-sem-f-prada-feb-20-2024">PhenomProx SEM, F. Prada, Feb 20, 2024</h1>

<ol>
  <li>Remember to always bring your own USB. Possibly empty and rest USB before using it so we are sure there are no viruses.</li>
  <li>Turn SEM on and wait 5 minutes until light stops blinking.</li>
  <li>Place carbon sticker (black and round) on sample holder.</li>
  <li>Distribute dry sample evenly on carbon sticker.</li>
  <li>Blow sample holder with air spray to remove any unattached particles.</li>
  <li>Place sample holder on SEM holder. Use BLACK holder for uncharged samples and GREY for charged samples. We usually use the BLACK holder but if we see that the image has bad quality then it means our sample is charged so we need to use the GREY holder.</li>
  <li>Screw grey round piece until the sample is right below the edge and then screw down another notch (use indicator on the holder as a reference).</li>
  <li>Lift door and insert sample inside the SEM.</li>
  <li>Image sample. Go to SETTINGS and set:
 A. MODE: high resolution (10 kV)
 B. INTENSITY: image (use POINT for very high resolution)
 C. DETECTOR: BSD Full. If we use the BLACK sample holder we can use the SED setting which provides better resolution
 D. RENAME SAMPLE</li>
  <li>Map the sample by zig-zagging across the desired field.</li>
  <li>Switch from optical to SEM mode.</li>
  <li>Set image as we like in terms of location, focus, brightness, contrast etc.. For automatic adjustment of these settings press buttons for 3 seconds until “A” pops up on the icon.</li>
  <li>When the image is ready and we no longer need to modify it we can proceed with the elemental analysis. If we need to analyse a very specific section of the sample, INTENSITY should be set to LOW. Resolution is ok at 1024.</li>
  <li>Go to SETTINGS and set MODE to Analysis (15kV)</li>
  <li>Open the PhenomPro software on the other screen and click on the open circle.</li>
  <li>Click on area of interest and wait a few seconds until the elemental analysis pops up.</li>
  <li>If we click on the right arrow on the top right hand corner we can visualize the elemental analysis.</li>
  <li>Before closing the software save all the data by clicking on NEW and then SAVE PROJECT. This will create a report (Word format) showing the elemental analysis data of the areas you have selected.</li>
</ol>

<p><em>If you need to restart the SEM press Ctrl Alt F4, then wait a few seconds and on next black screen press Ctrl Alt delete.</em></p>]]></content><author><name></name></author><summary type="html"><![CDATA[PhenomProx SEM, F. Prada, Feb 20, 2024]]></summary></entry></feed>