codespace should have windsurf and jupyter on startup now; started organizing project folders

This commit is contained in:
james-m-jordan 2025-05-06 22:39:14 +00:00
parent f6f4c81918
commit cf6bdefd53
43 changed files with 1360 additions and 11 deletions

View File

@ -4,15 +4,36 @@
"dockerfile": "Dockerfile"
},
"settings": {
"terminal.integrated.shell.linux": "/bin/bash"
"terminal.integrated.shell.linux": "/bin/bash",
"python.defaultInterpreterPath": "/usr/local/bin/python",
"jupyter.alwaysTrustNotebooks": true,
"workbench.startupEditor": "none"
},
"postCreateCommand": "pip install -r requirements.txt",
"postStartCommand": "bash .devcontainer/postStartCommand.sh",
"postCreateCommand": "pip install -r requirements.txt && chmod +x .devcontainer/jupyter-setup.sh && .devcontainer/jupyter-setup.sh && chmod +x .devcontainer/windsurf-auth-setup.sh",
"postStartCommand": "bash .devcontainer/postStartCommand.sh && WINDSURF_AUTH_TOKEN='eyJhbGciOiJSUzI1NiIsImtpZCI6IjU5MWYxNWRlZTg0OTUzNjZjOTgyZTA1MTMzYmNhOGYyNDg5ZWFjNzIiLCJ0eXAiOiJKV1QifQ.eyJwaWN0dXJlIjoiaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE5NDMyOTQ4ND92PTQiLCJpc3MiOiJodHRwczovL3NlY3VyZXRva2VuLmdvb2dsZS5jb20vZXhhMi1mYjE3MCIsImF1ZCI6ImV4YTItZmIxNzAiLCJhdXRoX3RpbWUiOjE3NDY1NzA2ODAsInVzZXJfaWQiOiJNTVJZY3NVb3ZVaFNVc2RhMkhrd1J4UE5tTWQyIiwic3ViIjoiTU1SWWNzVW92VWhTVXNkYTJIa3dSeFBObU1kMiIsImlhdCI6MTc0NjU3MDY4MSwiZXhwIjoxNzQ2NTc0MjgxLCJlbWFpbCI6ImppbUBqb3JkYW5sYWIub3JnIiwiZW1haWxfdmVyaWZpZWQiOmZhbHNlLCJmaXJlYmFzZSI6eyJpZGVudGl0aWVzIjp7ImdpdGh1Yi5jb20iOlsiMTk0MzI5NDg0Il0sImVtYWlsIjpbImppbUBqb3JkYW5sYWIub3JnIl19LCJzaWduX2luX3Byb3ZpZGVyIjoiZ2l0aHViLmNvbSJ9fQ.kgY8pNERRK3d2weIc4eR0EI_JKfATIxE9b6ACKdQE1XVwU26_p07PGfvdWo4ty8oXjCdUdnUiprM1LKaT2yZPGnleOdeJtH31Ua1DNc7hNTEideMeTyZUAOXv6O1VJdXqpcRfjc5Q5JxEjJdj1cGdomFA1c_kn3VbGyL8BsAfH6Sg6q7fB4eRRQ5MlHPBDxQl7neHsdDVGhqGprRnWfJsOI0PJhsWC4jzSBM5HO3uFKOnl_9-BdGY_zN6j_uRcFXfHB3VxfSecinepjz3u5fdmEd71YpGJNRhGXYiM7pZBhETCvA9Ri-b1Jh74dsoAyPfmnDOdt0c0xBF2TmPEPgZA' .devcontainer/windsurf-auth-setup.sh && jupyter notebook --no-browser --ip=0.0.0.0 --port=8888 --NotebookApp.token='' --NotebookApp.password='' --allow-root &",
"extensions": [
"ms-python.python",
"ms-azuretools.vscode-docker",
"redhat.vscode-yaml"
"redhat.vscode-yaml",
"ms-toolsai.jupyter",
"ms-toolsai.vscode-jupyter-cell-tags",
"ms-toolsai.jupyter-keymap",
"ms-toolsai.jupyter-renderers",
"windsurf-dev.windsurf"
],
"forwardPorts": [],
"remoteUser": "vscode"
}
"forwardPorts": [8888],
"remoteUser": "vscode",
"features": {
"github-cli": "latest"
},
"customizations": {
"codespaces": {
"openFiles": ["/workspaces/docs/Analysis/protocol_dashboard.ipynb"]
},
"vscode": {
"settings": {
"windsurf.authTokenPath": "~/.windsurf/auth.json"
}
}
}
}

View File

@ -0,0 +1,17 @@
#!/bin/bash
echo "Setting up Jupyter environment for lab documentation..."
# Install Jupyter and required dependencies
pip install jupyter notebook jupyterlab pandas matplotlib plotly pyyaml ipywidgets
# Enable Jupyter extensions
jupyter nbextension enable --py widgetsnbextension
jupyter labextension install @jupyter-widgets/jupyterlab-manager
# Set up Jupyter to auto-start in the background
mkdir -p ~/.jupyter
echo "c.NotebookApp.token = ''" > ~/.jupyter/jupyter_notebook_config.py
echo "c.NotebookApp.password = ''" >> ~/.jupyter/jupyter_notebook_config.py
echo "Jupyter environment setup complete!"

View File

@ -25,12 +25,48 @@ if [ -z "$OPENAI_API_KEY" ]; then
echo " Set it in your Codespace secrets or run 'export OPENAI_API_KEY=your-key'."
fi
# Check Jupyter installation and dashboard dependencies
echo "🔬 Setting up Jupyter environment and Protocol Dashboard..."
pip install -q jupyter notebook jupyterlab pandas matplotlib plotly pyyaml ipywidgets
# Create the welcome message for Jupyter
mkdir -p /workspaces/docs/Analysis
cat > /workspaces/docs/README.ipynb << EOL
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 🧪 Welcome to the Lab Documentation System! 🧬\\n\\n",
"## Quick Start\\n\\n",
"This system provides interactive protocol dashboards to help manage your lab protocols.\\n\\n",
"### Available Dashboards:\\n\\n",
"- [**Protocol Dashboard**](/workspaces/docs/Analysis/protocol_dashboard.ipynb) - Browse and filter all protocols\\n\\n",
"Click on any of the links above to get started!\\n\\n",
"*No installation required - everything is pre-configured for you.*"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
}
},
"nbformat": 4,
"nbformat_minor": 4
}
EOL
# Display welcome message
echo ""
echo "🧪 LAB AGENT ENVIRONMENT READY 🧪"
echo "Start using the lab agent by typing in the VS Code Chat window."
echo "For a health check, run: python Agent/test_environment.py"
echo "To view the Protocol Dashboard, open Analysis/protocol_dashboard.ipynb"
echo ""
# Exit with success
exit 0
exit 0

View File

@ -0,0 +1,24 @@
#!/bin/bash
# Windsurf extension authentication setup script
# This script securely sets up the authentication for the Windsurf extension
# without exposing credentials in plaintext
echo "🌊 Setting up Windsurf authentication..."
# Create the windsurf config directory if it doesn't exist
mkdir -p ~/.windsurf
# Write the authentication config
cat > ~/.windsurf/auth.json << EOL
{
"authToken": "$WINDSURF_AUTH_TOKEN",
"configTimestamp": "$(date -u +"%Y-%m-%dT%H:%M:%SZ")",
"lastLogin": "$(date -u +"%Y-%m-%dT%H:%M:%SZ")"
}
EOL
# Set correct permissions
chmod 600 ~/.windsurf/auth.json
echo "✅ Windsurf authentication setup complete"

2
.gitignore vendored
View File

@ -74,4 +74,4 @@ npm-debug.log*
yarn-debug.log*
yarn-error.log*
package-lock.json
yarn.lock
yarn.lock

View File

@ -0,0 +1,21 @@
# Experiments Folder
This folder contains records of individual experiments or lab sessions as YAML files.
## How to Add a New Experiment
- Use the experiment_template.yaml in Templates/ as a starting point.
- Name your file with a unique ID or date, e.g., `2025-05-10_cell_staining_Alice.yaml`.
- Fill in all required fields: experiment_id, project, title, date, researcher, protocol, materials, parameters, results, status.
- Submit via the lab agent or manually, then commit to the repository.
## YAML Schema Reference
See `Templates/experiment_template.yaml` for the required structure.
## Example Experiment
See `2025-05-10_cell_staining_Alice.yaml` in this folder for a complete example of an experiment file. Use it as a reference when creating new experiments.
### Example Usage
To add a new experiment, you can:
1. Use the lab agent and describe your experiment in natural language (e.g., "Log a cell staining experiment for Alice on May 10, 2025").
2. The agent will generate a YAML file similar to `2025-05-10_cell_staining_Alice.yaml`.
3. Review and edit as needed, then commit the file.

View File

@ -0,0 +1,223 @@
{
"cells": [
{
"cell_type": "markdown",
"id": "a1e354d5",
"metadata": {},
"source": [
"# Lab Protocol Dashboard\n",
"\n",
"This notebook provides an interactive dashboard to explore and manage both YAML protocols and Markdown protocols with YAML frontmatter.\n",
"\n",
"## Features\n",
"- View all protocols in a searchable table\n",
"- Filter by protocol type (YAML or Markdown)\n",
"- Compare protocol structures\n",
"- Visualize protocol statistics\n",
"\n",
"Let's start by importing the required libraries and setting up our environment."
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "1c5f18cd",
"metadata": {},
"outputs": [],
"source": [
"# Install dependencies if not already installed\n",
"import sys\n",
"import subprocess\n",
"\n",
"def install_package(package):\n",
" try:\n",
" __import__(package)\n",
" print(f\"{package} is already installed\")\n",
" except ImportError:\n",
" print(f\"Installing {package}...\")\n",
" subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", package])\n",
" print(f\"{package} installed successfully\")\n",
"\n",
"# Install required packages\n",
"install_package(\"pandas\")\n",
"install_package(\"matplotlib\")\n",
"install_package(\"ipywidgets\")\n",
"install_package(\"pyyaml\")\n",
"install_package(\"plotly\")\n",
"\n",
"print(\"\\nAll dependencies are installed and ready to use.\")"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "f4c1f189",
"metadata": {},
"outputs": [],
"source": [
"import os\n",
"import re\n",
"import yaml\n",
"import glob\n",
"import pandas as pd\n",
"import plotly.express as px\n",
"import matplotlib.pyplot as plt\n",
"import ipywidgets as widgets\n",
"from datetime import datetime\n",
"from IPython.display import display, HTML, Markdown\n",
"\n",
"# Configure paths\n",
"WORKSPACE_ROOT = \"/workspaces/docs\"\n",
"PROTOCOLS_DIR = os.path.join(WORKSPACE_ROOT, \"Protocols\")\n",
"\n",
"print(f\"Workspace root: {WORKSPACE_ROOT}\")\n",
"print(f\"Protocols directory: {PROTOCOLS_DIR}\")\n",
"print(f\"Current working directory: {os.getcwd()}\")"
]
},
{
"cell_type": "markdown",
"id": "b384ad20",
"metadata": {},
"source": [
"## Load Protocol Data\n",
"\n",
"Now we'll load all protocol data from both YAML files and Markdown files with YAML frontmatter."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"def extract_frontmatter(markdown_content):\n",
" \"\"\"Extract YAML frontmatter from markdown content\"\"\"\n",
" pattern = r\"^---\\n(.*?)\\n---\"\n",
" match = re.search(pattern, markdown_content, re.DOTALL)\n",
" if match:\n",
" try:\n",
" return yaml.safe_load(match.group(1))\n",
" except yaml.YAMLError:\n",
" return None\n",
" return None\n",
"\n",
"def load_protocol_files():\n",
" \"\"\"Load protocol data from both YAML and Markdown files\"\"\"\n",
" protocols = []\n",
" \n",
" # Process YAML files\n",
" yaml_files = glob.glob(os.path.join(PROTOCOLS_DIR, \"*.yaml\"))\n",
" for file_path in yaml_files:\n",
" try:\n",
" with open(file_path, 'r') as f:\n",
" data = yaml.safe_load(f)\n",
" if data:\n",
" data['file_path'] = os.path.basename(file_path)\n",
" data['file_type'] = 'yaml'\n",
" protocols.append(data)\n",
" except Exception as e:\n",
" print(f\"Error reading {file_path}: {e}\")\n",
" \n",
" # Process Markdown files with frontmatter\n",
" md_files = glob.glob(os.path.join(PROTOCOLS_DIR, \"*.md\"))\n",
" for file_path in md_files:\n",
" try:\n",
" with open(file_path, 'r') as f:\n",
" content = f.read()\n",
" frontmatter = extract_frontmatter(content)\n",
" if frontmatter:\n",
" frontmatter['file_path'] = os.path.basename(file_path)\n",
" frontmatter['file_type'] = 'markdown'\n",
" \n",
" # Extract content preview (first 100 chars)\n",
" content_without_frontmatter = re.sub(r\"^---\\n.*?\\n---\\n\", \"\", content, flags=re.DOTALL)\n",
" preview = content_without_frontmatter.strip()[:100] + \"...\"\n",
" frontmatter['content_preview'] = preview\n",
" \n",
" protocols.append(frontmatter)\n",
" except Exception as e:\n",
" print(f\"Error reading {file_path}: {e}\")\n",
" \n",
" return protocols\n",
"\n",
"# Load all protocols\n",
"protocols = load_protocol_files()\n",
"print(f\"Loaded {len(protocols)} protocols\")\n",
"\n",
"# Convert to DataFrame for easier manipulation\n",
"df_protocols = pd.DataFrame(protocols)\n",
"\n",
"# Fill missing values with placeholders\n",
"for col in ['id', 'name', 'version', 'description', 'author', 'created']:\n",
" if col not in df_protocols.columns:\n",
" df_protocols[col] = None\n",
"\n",
"# Preview the dataframe\n",
"df_protocols[['file_path', 'file_type', 'id', 'name', 'version']].head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Protocol Dashboard\n",
"\n",
"Let's create a dashboard to explore our protocols. We'll include:\n",
"1. Summary statistics\n",
"2. Interactive filtering\n",
"3. Protocol details viewer"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# 1. Summary statistics\n",
"yaml_count = len(df_protocols[df_protocols['file_type'] == 'yaml'])\n",
"md_count = len(df_protocols[df_protocols['file_type'] == 'markdown'])\n",
"\n",
"# Create a nice HTML summary\n",
"summary_html = f\"\"\"\n",
"<div style=\"background-color: #f5f5f5; padding: 15px; border-radius: 10px; margin-bottom: 20px;\">\n",
" <h2 style=\"margin-top: 0;\">Protocol Dashboard Summary</h2>\n",
" <p><strong>Generated:</strong> {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}</p>\n",
" <p><strong>Total Protocols:</strong> {len(df_protocols)}</p>\n",
" <ul>\n",
" <li><strong>YAML Files:</strong> {yaml_count}</li>\n",
" <li><strong>Markdown with Frontmatter:</strong> {md_count}</li>\n",
" </ul>\n",
"</div>\n",
"\"\"\"\n",
"\n",
"display(HTML(summary_html))\n",
"\n",
"# Create a pie chart of file types\n",
"fig = px.pie(values=[yaml_count, md_count], \n",
" names=['YAML', 'Markdown'], \n",
" title='Protocol File Types',\n",
" color_discrete_sequence=['#636EFA', '#EF553B'])\n",
"fig.update_layout(width=600, height=400)\n",
"fig.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Interactive Protocol Explorer\n",
"\n",
"Use the filters below to explore your protocols:"
]
}
],
"metadata": {
"language_info": {
"name": "python"
}
},
"nbformat": 4,
"nbformat_minor": 5
}

View File

@ -0,0 +1,121 @@
#!/usr/bin/env python3
"""
Protocol Dashboard Generator
This script creates a simple terminal-based dashboard of all your lab protocols,
showing both standalone YAML files and Markdown files with YAML frontmatter.
"""
import os
import re
import yaml
import glob
from datetime import datetime
# Configuration
PROTOCOLS_DIR = os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))), "Protocols")
def extract_frontmatter(markdown_content):
"""Extract YAML frontmatter from markdown content"""
pattern = r"^---\n(.*?)\n---"
match = re.search(pattern, markdown_content, re.DOTALL)
if match:
try:
return yaml.safe_load(match.group(1))
except yaml.YAMLError:
return None
return None
def load_protocol_files():
"""Load protocol data from both YAML and Markdown files"""
protocols = []
# Process YAML files
yaml_files = glob.glob(os.path.join(PROTOCOLS_DIR, "*.yaml"))
for file_path in yaml_files:
try:
with open(file_path, 'r') as f:
data = yaml.safe_load(f)
if data:
data['file_path'] = os.path.basename(file_path)
data['file_type'] = 'yaml'
protocols.append(data)
except Exception as e:
print(f"Error reading {file_path}: {e}")
# Process Markdown files with frontmatter
md_files = glob.glob(os.path.join(PROTOCOLS_DIR, "*.md"))
for file_path in md_files:
try:
with open(file_path, 'r') as f:
content = f.read()
frontmatter = extract_frontmatter(content)
if frontmatter:
frontmatter['file_path'] = os.path.basename(file_path)
frontmatter['file_type'] = 'markdown'
protocols.append(frontmatter)
except Exception as e:
print(f"Error reading {file_path}: {e}")
return protocols
def print_terminal_dashboard(protocols):
"""Display a simple terminal-based dashboard"""
print("\n" + "="*80)
print(f"LAB PROTOCOL DASHBOARD - Generated on {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")
print("="*80)
# Count by type
yaml_count = len([p for p in protocols if p.get('file_type') == 'yaml'])
md_count = len([p for p in protocols if p.get('file_type') == 'markdown'])
print(f"\nTotal Protocols: {len(protocols)}")
print(f"YAML Files: {yaml_count}")
print(f"Markdown with Frontmatter: {md_count}")
# Sort protocols by ID
protocols.sort(key=lambda x: str(x.get('id', 'ZZZZ')))
# Print YAML protocols
if yaml_count > 0:
print("\n" + "-"*80)
print("STANDALONE YAML PROTOCOLS")
print("-"*80)
for protocol in [p for p in protocols if p.get('file_type') == 'yaml']:
print(f"\nID: {protocol.get('id', 'No ID')}")
print(f"Name: {protocol.get('name', 'Unnamed')}")
print(f"Version: {protocol.get('version', 'Unknown')}")
print(f"File: {protocol.get('file_path')}")
print(f"Description: {protocol.get('description', 'No description')}")
if 'materials' in protocol and protocol['materials']:
print(f"Materials: {len(protocol['materials'])} items")
if 'steps' in protocol and protocol['steps']:
print(f"Steps: {len(protocol['steps'])} steps")
# Print Markdown protocols
if md_count > 0:
print("\n" + "-"*80)
print("MARKDOWN PROTOCOLS WITH FRONTMATTER")
print("-"*80)
for protocol in [p for p in protocols if p.get('file_type') == 'markdown']:
print(f"\nID: {protocol.get('id', 'No ID')}")
print(f"Name: {protocol.get('name', 'Unnamed')}")
print(f"Version: {protocol.get('version', 'Unknown')}")
print(f"File: {protocol.get('file_path')}")
print(f"Description: {protocol.get('description', 'No description')}")
if 'materials' in protocol and protocol['materials']:
print(f"Materials: {len(protocol['materials'])} items")
if 'steps' in protocol and protocol['steps']:
print(f"Steps: {len(protocol['steps'])} steps")
print("\n" + "="*80)
print("USAGE RECOMMENDATIONS:")
print("="*80)
print("- YAML Files: Great for machine processing and programmatic access")
print("- Markdown+Frontmatter: Better for detailed protocols with rich formatting")
print("- Both formats work well with the Lab Agent and can be used together")
print("="*80 + "\n")
if __name__ == "__main__":
protocols = load_protocol_files()
print_terminal_dashboard(protocols)

View File

@ -0,0 +1 @@
{"":"WARNING! DO NOT EDIT THIS FILE! ANY CHANGES MADE WILL BE LOST!","doc_id":"1T8_4vk4DKSu7PBBJTkIJoyaXmiVHR41zGAja3ayYNfs","resource_key":"","email":"jim@jordanlab.org"}

View File

@ -0,0 +1 @@
{"":"WARNING! DO NOT EDIT THIS FILE! ANY CHANGES MADE WILL BE LOST!","doc_id":"17tzXhIf6A8-_uK_PkYgMIgadQku1LmTOwvo666csS-g","resource_key":"","email":"jim@jordanlab.org"}

View File

@ -0,0 +1 @@
{"":"WARNING! DO NOT EDIT THIS FILE! ANY CHANGES MADE WILL BE LOST!","doc_id":"18o5Fo_FWeKFw9B09eGG444yrDn_0WIzG3hcaNE7dZ2w","resource_key":"","email":"jim@jordanlab.org"}

View File

@ -0,0 +1,129 @@
---
name: BCA Assay for Protein Abundance Determination
id: PROT-0010
version: 1.0
description: Protocol for colorimetric detection and quantitation of total protein using bicinchoninic acid (BCA)
author: Jordan Lab
created: 2025-05-06
materials:
- BCA Reagent A
- BCA Reagent B
- BSA standards
- Microplate
- Plate reader (562 nm capability)
- Pipettes and tips
steps:
- "Determine number of standards and unknowns to quantify"
- "Prepare working reagent (WR) by mixing BCA reagent A and B in 50:1 ratio"
- "Pipette 10 µL of each standard/sample into microplate wells"
- "Add 200 µL of WR to each well and mix for 30 seconds"
- "Incubate at 37°C for 30 minutes"
- "Measure absorbance at 562 nm"
- "Create standard curve and determine protein concentrations"
notes: |
Based on Pierce BCA Protein Assay Kit (Thermo Scientific)
Assay is nearly linear with protein concentrations from 20-2000 µg/mL
For increased sensitivity, incubation time can be extended to 2 hours
---
#Protocol
1. Determine the number of standards and unknowns you need to quantify:
2. (Number of standards + Number of unknowns) x (Number of replicates) x (Volume of WR per sample) = Total WR volume
3. Mix 50 parts of BCA reagent A with 1 part of BCA reagent B (50:1 ratio, Reagent A:B).
4. Example: Combine 5 mL of reagent A with 0.1 mL of reagent B to prepare 5.1 mL of WR.
5. Note: Initial turbidity when reagent B is added to reagent A will disappear with mixing, yielding a clear, green WR.
6. Pipette 10 µL of each standard or unknown sample replicates into a microplate well.
7. Add 200 µL of the WR to each well and mix the plate thoroughly for 30 seconds.
8. Incubate at 37°C for 30 minutes.
9. Measure the absorbance at 562 nm on (core facility) plate reader.
10. Subtract the average 562 nm absorbance measurement of the blank standard replicates from the 562 nm measurements of all other individual standard and unknown sample replicates.
11. Prepare a standard curve by plotting the average blankcorrected 562 nm measurement for each BSA standard vs. its concentration in µg/mL. Use the standard curve to determine the protein concentration of each unknown sample.
**
**
Standard Preparation
Prepare standards in the using the same buffer you collected your protein samples in as the diluent.
|Vial|Volume of Diluent|Volume and Source of BSA|Final BSA Concentration (µg/mL)|
|---|---|---|---|
|A|0|300 µL of stock|2,000|
|B|125 µL|375 µL of stock|1,500|
|C|325 µL|325 µL of stock|1,000|
|D|175 µL|175 µL of vial B dilution|750|
|E|325 µL|325 µL of vial C dilution|500|
|F|325 µL|325 µL of vial E dilution|250|
|G|325 µL|325 µL of vial F dilution|125|
|H|400 µL|100 µL of vial G dilution|25|
|I|400 µL|0|0 (Blank)|
**
Pierce BCA Protein Assay Kit (Thermo Scientific ) Protocol
Background:
- The kit uses bicinchoninic acid (BCA) for colorimetric detection and quantitation of total protein.
- It's based on the biuret reaction, where Cu+2 is reduced to Cu+1 by protein in an alkaline medium.
- The cuprous cation (Cu+1) is detected using BCA, forming a purple-colored complex that absorbs at 562 nm.
- The assay is nearly linear with protein concentrations from 202000 µg/mL.
- Protein concentrations are usually determined against a standard protein like bovine serum albumin (BSA).
- ![](https://lh7-rt.googleusercontent.com/docsz/AD_4nXcka1kV7JyE-wobGCZVdzAMfYtdUeY1znSSiwfDwwYmGxxlOOdyIViCfWX7cXr9gTdXoVPGpYMHA0MqDd4X4Ypxcd_ruLrPACkT2misFNu9h2uNt0lxj1CdDBNTNi4RMxozetuC?key=meF1uyEKsycTs30xvLd7mXoN)
**
****
Note:
- Wavelengths from 540590 nm have been used successfully with this method.
- Plate readers, which use a shorter light path length than cuvette spectrophotometers, require a greater sample to WR ratio to obtain the same sensitivity as the standard test tube procedure. If higher 562 nm measurements are desired, increase the incubation time to 2 hours.
- Increasing the incubation time or ratio of sample volume to WR increases the net 562 nm measurement for each well and lowers both the minimum detection level of the reagent and the working range of the assay. As long as all standards and unknowns are treated identically, such modifications are useful.
1. Subtract the average 562 nm absorbance measurement of the blank standard replicates from the 562 nm measurements of all other individual standard and unknown sample replicates.
2. Prepare a standard curve by plotting the average blankcorrected 562 nm measurement for each BSA standard vs. its concentration in µg/mL. Use the standard curve to determine the protein concentration of each unknown sample.
Note: If using curve-fitting algorithms associated with a microplate reader, a four-parameter (quadratic) or bestfit curve provides more accurate results than a purely linear fit. If plotting results by hand, a pointtopoint curve is preferable to a linear fit to the standard points.
**

View File

@ -0,0 +1,10 @@
#treatment
**Treatment Setup:**
- Final fatty acid concentration: 0.125 mM for both BSA-OA and BSA-PA.
- Medium: Complete media with fatty acid-BSA conjugates.
**Steps:**
1. Prepare BSA-fatty acid solutions separately.
2. Dilute to final working concentrations in complete media.
3. After 48 h in siRNA, treat cells for 24 h.

View File

@ -0,0 +1,12 @@
#treatment
**Treatment Setup:**
- Final fatty acid concentration: 0.125 mM for both BSA-OA and BSA-PA.
- Medium: Complete media with fatty acid-BSA conjugates.
**Steps:**
1. Prepare BSA-fatty acid solutions separately.
2. Dilute to final working concentrations in complete media.
3. After 24 h in siRNA, treat cells for 48 h.
---

View File

@ -0,0 +1,42 @@
---
name: BSA-OAPA Treatment Protocol
id: PROT-0013
version: 3.0
description: Protocol for treating cells with BSA-conjugated oleic and palmitic acids (OAPA)
author: JJ
created: 2025-04-29
materials:
- Bovine Serum Albumin (BSA)
- Oleic acid (OA)
- Palmitic acid (PA)
- BSA-conjugated OA and PA
- Complete culture medium
steps:
- "Prepare BSA-conjugated OA and PA mixture (2:1 ratio)"
- "Treat cells 36-48h after reverse transfection"
- "Incubate for 16-24h with OAPA treatment"
- "Use BSA-only treatment as control"
notes: |
This is version 3 of the OAPA treatment protocol
Tested on cell lines: HUH7, HEPG2, AML12(?)
Final concentration: 0.33 mM OA, 0.17 mM PA (0.5 mM total, 2:1 ratio)
---
### Treatment name:
OAPA v3
#### Date:
04/29/2025 JJ
#### Applicable Cell Lines:
HUH7, HEPG2, AML12(?)
### Treatment Agent:
Bovine Serum Albumin (BSA)-conjugated oleic acid (OA) and BSA-conjugated palmitic acid (PA).
### Concentration:
0.33 mM OA, 0.17 mM PA (or 0.5 mM OA:PA 2:1)
### Timing:
36-48 h after reverse transfection
### Duration of treatment:
16-24 h
### Frequency:
Once
### Control Treatment:
BSA

View File

@ -0,0 +1,8 @@
## Steps
1. Return all items to their original places.
2. Wipe cabinet surfaces with 70% ethanol and paper towels.
3. Close the cabinet; UV light will automatically sterilize.
4. Turn off vacuum, microscope, and room lights.
---

View File

@ -0,0 +1,46 @@
### Reagents
• Fatty acidfree BSA (Sigma, A6003): 0.64 g
• 5 M NaCl solution (to prepare 150 mM): 60 µL of 5 M NaCl diluted with 1940 µL water
• NaHCO₃: 13.6 mg
• Distilled water (as needed)
• Palmitic acid (Sigma, P5585-10G) or substitute (≈5 mg for a 10 mM final concentration)
• Wako NEFA-HR Assay Kit (for fatty acid measurement)
### Equipment:
• Analytical balance
• Pipettes/micropipettes
• Incubator or water bath (set to 65°C and 37°C)
• Sterile 0.2 µm filter
• Vortex mixer (optional)
• pH meter (if needed)
• 2 mL microcentrifuge tube
### Protocol:
1. Prepare 2 mL of 4.8 mM BSA solution by dissolving 0.64 g BSA in the 150 mM NaCl solution (using 1.5 mL of the prepared 150 mM solution) and adding water to reach a total of 2 mL.
2. Make a saturated NaHCO₃ solution by dissolving 13.6 mg NaHCO₃ in 46 µL distilled water; incubate at 65°C.
3. Add approximately 5 mg palmitic acid (or the equivalent amount for oleic or arachidonic acid) to the NaHCO₃ solution and incubate at 65°C for 2 minutes to form the sodium salt.
4. Transfer 1.6 mL of the BSA solution into the tube containing the fatty acid mixture.
5. Incubate the combined solution at 37°C for 70 minutes.
6. Filter the final mixture through a 0.2 µm filter.
7. Measure the fatty acid concentration with the NEFA-HR assay (expected around 10 mM; roughly a 2:1 fatty acid to BSA molar ratio).

View File

@ -0,0 +1,11 @@
## Counting Cells Manually Protocol
## General Steps
1. After harvesting cells with Trypsin, mix cell suspension well.
2. Transfer 1020 µl of the cell suspension into a microcentrifuge tube.
3. Add an equal volume of Trypan Blue solution.
4. Load 10 µl of mixture into a hemocytometer chamber.
5. Count live (unstained) vs dead (blue-stained) cells under a microscope.
6. Calculate total viable cells based on grid counts.
---

View File

@ -0,0 +1,64 @@
---
name: Gentle Co-Immunoprecipitation Protocol
id: PROT-0012
version: 1.0
description: A gentle co-immunoprecipitation protocol for preserving protein-protein interactions
author: JM Jordan
created: 2023-01-01
materials:
- Protein lysate
- RIPA buffer with protease inhibitor tablets
- Antibody (2 µg per reaction)
- Beads (50% slurry)
- PBS with 0.02% Tween
- Non-denaturing loading buffer (1X)
- LoBind tubes
- Liquid nitrogen
steps:
- "Prepare protein lysate (3600 µg protein)"
- "Preclear with beads"
- "Add antibody and incubate overnight at 4°C"
- "Add washed beads and incubate"
- "Wash beads with PBS-Tween"
- "Elute proteins with non-denaturing buffer"
- "Store samples at -80°C"
notes: |
This is a gentle protocol designed to preserve protein-protein interactions
Uses minimal washing steps without extended rotations
Includes preclearance step to reduce non-specific binding
---
#Protocol
by JM Jordan 2023
1. Prepared a lysate solution with 3600 ug of protein for HFA and HFB
2. Adjusted to 1mL each with RIPA+Tablets
3. Precleared solution by adding 50ul of 50% beads to each tube of lysate
4. Aliquoted into 3 tubes/lysate (6 tubes total) and adjusted each to 1mL with RIPA+Tablets
5. Added 2 ug of antibody to each tube
6. Rotated overnight at 4C
7. RT rotation for 1h
8. Washed 600ul beads with PBS + 0.02% Tween
9. Resuspended beads in 600ul RIPA+Tabs
10. Added 100ul of bead solution to each tube
11. Rotated at RT for 1h
12. Washed beads 3X with 1ml PBS + 0.02% Tween with gentle pipet mixing (no 5 min rotation)
13. After final wash, resuspended beads in 200 ul PBS + 0.02% Tween and transferred to fresh LoBind tubes
14. Added 30 ul 1X Non denaturing loading buffer and eluted as usual at 37C for 5 min
15. Separated solution from beads into new LoBind tubes and snap froze in LN2 and stored at -80C.
16. Note: Freeze Input and leftover

View File

@ -0,0 +1,38 @@
#Protocol
Prepare cell collection tubes
Rack n 1.5-ml Eppie tubes and label 1-n
Prepare sample storage box [-80°C Sample Storage Protocol](https://docs.google.com/document/u/1/d/1n-TcSMLcNtWcNixfK7yqhQJJVVBpL1TQaZaernbRFhM/edit)
Remove cells from incubator
In laminar flow hood, aspirate media.
Wash cells
Add 200 ul (96-well) or 1 ml (24-well) PBS per well.
Aspirate until dry
In the fume hood, add 100 ul (for 96-well plates) or 300 ul (for 24-well plates) TRI reagent (or TRIzol) to each well.
Incubate at RT for 5 minutes.
Tilt plate back slightly to allow TRI reagents and cells to pool in the corner and pipet all of the solution into prelabeled tubes.
If not proceeding directly to extraction:
Place tubes in labeled box
Place labeled box in defined location
Freeze tubes at -80C and submit a [-80C Sample Submission](https://drive.google.com/open?id=1Oox80CP6oEVm3IVtkPSENpUCua0RylQz3HFP5BZhjxw) form.
If proceeding, see [RNA MiniPrep with DirectZol kit](https://docs.google.com/document/u/1/d/1v3bYGmlWyRF_wZmdMD8YZwgqpblvsh4vnoxw9H9bbHs/edit).

View File

@ -0,0 +1,104 @@
---
name: Oil Red O Staining Protocol for Adherent Cells
id: PROT-0015
version: 1.0
description: Protocol for staining and quantifying lipid droplets in adherent hepatocyte-like cells
author: J. Jordan
created: 2025-02-09
materials:
- Oil Red O powder
- 100% isopropanol (2-propanol)
- 4% paraformaldehyde (PFA)
- PBS
- Distilled water
- 0.2-micron syringe filter
- 96-well plate
- Echo Revolution inverted microscope
- Spectrophotometer (492 nm)
steps:
- "Prepare ORO staining solution"
- "Fix cells with 4% PFA"
- "Stain cells with filtered ORO solution"
- "Wash and image cells"
- "Extract ORO for quantification"
- "Measure absorbance at 492 nm"
notes: |
Optimized for hepatocyte-like cells (HepG2, Huh7, AML12)
Filtration of ORO solution is critical for good results
Volume specifications are for 96-well plates - adjust for other formats
---
#Protocol for Oil red O (ORO) staining in adherent “hepatocyte-like” cells (e.g. HepG2, Huh7, AML12?)
Adapted by J. Jordan; revised 02-09-25 by JJ.
Note: Volumes are for 96-well plates. Adjust for larger well formats.
1. Preparation of ORO staining solution:
2. If necessary, prepare ORO stock solution by dissolving 0.175 g ORO powder (on the chemical shelf) in 50 ml 100% 2-propanol (aka “isopropanol”)
3. Dilute ORO stock solution in distilled water (dH2O) (i.e., Add 3 parts ORO solution to 2 parts dH2O) and vortex solution immediately before using to stain cells.
4. Add diluted ORO solution to a syringe with a 0.2-micron filter, then filter into a fresh vial. Skipping this filtration WILL ruin your experiment!
5. Staining cells with ORO staining solution:
6. Aspirate cell media and then wash twice with PBS.
7. Add 75 ul cold 4% paraformaldehyde (PFA) to each well and allow fixation to occur for 20-30 m at room temperature (RT).
8. Aspirate PFA.
9. Wash cells twice with 100 ul PBS and aspirate to last wash until cells are very dry.
10. Add 75 ul freshly prepared ORO solution to each well and stain for 30 m at RT.
11. Wash twice with 150 ul distilled water.
12. If imaging, add 100 ul of PBS to each well to improve microscopy. If skipping to extractions, you can leave the wells dry and proceed to Part IV.
13. View and image cells in brightfield on Echo Revolution inverted microscope:
14. Clip plate into stage.
15. Adjust height of objectives with puck until cells are visible.
16. Create a new folder to contain your images.
17. Identify imaging parameters that will work for all of your wells so that images can be compared.
18. Using identical imaging conditions (except for minor adjustments to focus), image all wells.
19. Ensure images are indexed with their sample names and experimental methods.
20. Transfer images to your Teams lab notebook data folder (USB or Airdrop) with image index.
21. Extraction of ORO
22. Add 75 ul of 100% isopropanol to each well and agitate for 5 minutes to extract ORO from cells.
23. Transfer 60 ul isopropanol extraction to 96-well assay plate 
24. Add 60 ul pure isopropanol to at least 3 wells to account for background.
25. Make sure plate reader is set to 492-nm protocol.
26. Clip plate into spectrophotometer ensuring A1 is in the bottom-left corner.
27. Label your data file with your experiment ID (usually your initials and the date you started your cell plate). 
28. Measure 492-nm absorbance.
29. Export data onto a USB.

View File

@ -0,0 +1,57 @@
**
Fatty AcidBSA Complex Preparation (2 mL Tube Format)
Reagents (scaled amounts):
• Fatty acidfree BSA (Sigma, A6003): 0.64 g
• 5 M NaCl solution (to prepare 150 mM): 60 µL of 5 M NaCl diluted with 1940 µL water
• NaHCO₃: 13.6 mg
• Distilled water (as needed)
• Palmitic acid (Sigma, P5585-10G) or substitute (≈5 mg for a 10 mM final concentration)
• Wako NEFA-HR Assay Kit (for fatty acid measurement)
Equipment:
• Analytical balance
• Pipettes/micropipettes
• Incubator or water bath (set to 65°C and 37°C)
• Sterile 0.2 µm filter
• Vortex mixer (optional)
• pH meter (if needed)
• 2 mL microcentrifuge tube
Protocol:
1. Prepare 2 mL of 4.8 mM BSA solution by dissolving 0.64 g BSA in the 150 mM NaCl solution (using 1.5 mL of the prepared 150 mM solution) and adding water to reach a total of 2 mL.
2. Make a saturated NaHCO₃ solution by dissolving 13.6 mg NaHCO₃ in 46 µL distilled water; incubate at 65°C.
3. Add approximately 5 mg palmitic acid (or the equivalent amount for oleic or arachidonic acid) to the NaHCO₃ solution and incubate at 65°C for 2 minutes to form the sodium salt.
4. Transfer 1.6 mL of the BSA solution into the tube containing the fatty acid mixture.
5. Incubate the combined solution at 37°C for 70 minutes.
6. Filter the final mixture through a 0.2 µm filter.
7. Measure the fatty acid concentration with the NEFA-HR assay (expected around 10 mM; roughly a 2:1 fatty acid to BSA molar ratio).
**

View File

@ -0,0 +1,12 @@
# Preparation of Complete RPMI
## For a 500-ml Bottle
1. Sterile transfer ~51 ml of RPMI media into a sterile 50-ml tube.
- **Label**: "PLAIN RPMI"
2. To the remaining 449 ml of media, add:
- 50 ml **Fetal Bovine Serum** (FBS)
- 1 ml **Penicillin-Streptomycin** (PS)
---

View File

@ -0,0 +1,12 @@
# Preparation of Complete DMEM (High Glucose)
## For a 500-ml Bottle
1. Sterile transfer ~51 ml of DMEM (High Glucose) media into a sterile 50-ml tube.
- **Label**: "PLAIN DMEM"
2. To the remaining 449 ml of media, add:
- 50 ml **Fetal Bovine Serum** (FBS)
- 1 ml **Penicillin-Streptomycin** (PS)
---

View File

@ -0,0 +1,12 @@
# Preparation of Complete DME/F-12
## For a 500-ml Bottle
1. Sterile transfer ~51 ml of DME/F-12 media into a sterile 50-ml tube.
- **Label**: "PLAIN DMEM/F-12"
2. To the remaining 449 ml of media, add:
- 50 ml **Fetal Bovine Serum** (FBS)
- 1 ml **Penicillin-Streptomycin** (PS)
---

View File

@ -0,0 +1,14 @@
# Preparation of Complete DME/F-12 ITSD
## For a 500-ml Bottle
1. Sterile transfer ~55 ml of DME/F-12 media into a sterile 50-ml tube.
- **Label**: "PLAIN DME/F-12"
2. To the remaining 445 ml of media, add:
- 50 ml **Fetal Bovine Serum** (FBS)
- 5 ml **Insulin-Transferrin-Selenium** (ITS)
- 5 µl **10 mM dexamethasone**
- 1 ml **Penicillin-Streptomycin** (PS)
---

View File

@ -0,0 +1,20 @@
#P
1. If necessary, prepare a protein extraction buffer. See Preparing 1X RIPA with Protease inhibitor and phosphatase inhibitor cocktail
2. Fill a tray with ice. (There is an ice machine in the autoclave room to the left of the cell culture room.)
3. Remove the plate from the incubator and bring it to the lab. (Theres no need to use a laminar flow hood at this point.)
4. Aspirate media.
5. Wash cells with ice cold 1X PBS.
6. Aspirate PBS.
7. Keeping the plate on ice. Add 100 ul of ice cold protein extraction buffer to each well.
8. Leaving the plate on ice, allow cells to sit in the extraction buffer for 10 minutes, agitating the plate every minute or two.
9. Tip the plate towards you so that the protein extraction buffer and suspended cells pool in the bottom corner.
10. If necessary, scrape cells into the extraction buffer with a cell scraper or pipet tip.
11. Using a P200 pipet, transfer the cell suspension to a chilled, prelabeled 1.5-ml tube.
12. Agitate the cells in the ThermoMixer for at 4C/500 rpm for 4 h-overnight.
13. Spin down cell debris at max speed for 25 m at 4C.
14. Avoiding the pellet, transfer 90 ul of supernatant to a fresh, chilled 1.5-ml tube (prelabeled).
15. Transfer remaining 10 ul to 0.2 ml PCR tube strips.
16. Place tubes in a -80C box and note box address.
17. Submit your sample to our inventory/archive by filling out this form: -80C Sample Submission

View File

@ -0,0 +1,114 @@
---
name: RNA Immunoprecipitation qPCR Protocol
id: PROT-0014
version: 1.0
description: Protocol for RNA immunoprecipitation followed by RT-qPCR to detect RNA-protein interactions
author: Jordan Lab
created: 2025-05-06
materials:
- Cell culture dishes
- PBS (cold)
- UV crosslinker (254 nm) or formaldehyde
- Lysis buffer with RNase inhibitors
- Protein A/G beads
- Antibodies for target protein
- IgG control antibody
- Glycine solution (for formaldehyde quenching)
- RNA isolation reagents
- RT-qPCR reagents
steps:
- "Grow cells to desired confluency"
- "Perform crosslinking (UV or formaldehyde)"
- "Harvest and lyse cells"
- "Pre-clear lysates"
- "Perform immunoprecipitation with specific antibody"
- "Wash beads to remove non-specific binding"
- "Reverse crosslinks if needed"
- "Isolate RNA from immunoprecipitated complex"
- "Perform RT-qPCR to detect target RNA"
notes: |
Two crosslinking methods are described: UV (254 nm) and formaldehyde
UV crosslinking is more specific but requires specialized equipment
Formaldehyde crosslinking is simpler but may have higher background
Always include appropriate controls (IgG, input RNA)
---
#Protocol
Crosslinking RNA to a specific protein of interest in cells or lysates is a common step in RNA immunoprecipitation (RIP) or related methods (e.g., CLIP-seq). Once crosslinked and immunoprecipitated, the RNA can be extracted for downstream RT-qPCR analysis. Below is a general overview of two frequently used crosslinking methods—UV crosslinking and formaldehyde crosslinking—along with key steps and considerations.
### UV Crosslinking
UV crosslinking at 254 nm forms covalent bonds between nucleic acids and amino acids in close proximity. This approach is often used in CLIP (crosslinking immunoprecipitation) protocols, but it can be adapted for simpler RIP-RT-qPCR workflows.
#### Typical workflow:
1. Grow cells to the desired confluency in culture dishes.
2. Wash cells with cold PBS to remove media and serum proteins. Keep cells on ice if needed to minimize RNase activity.
3. Add fresh cold PBS to cover the cells.
4. Crosslink with UV 254 nm at an energy of approximately 150300 mJ/cm². (The optimal dose depends on cell type and the sensitivity of the RNA or protein. Over-crosslinking can damage RNA, while under-crosslinking may reduce yield.)
5. Harvest cells by scraping or gentle trypsinization (depending on the downstream protocol).
6. Lyse cells under mild conditions suitable for maintaining RNP complexes. (Often a nonionic or mild ionic detergent is used in the lysis buffer, along with RNase inhibitors.)
7. Perform immunoprecipitation using an antibody specific to the RNA-binding protein of interest.
8. Pre-clear lysates (e.g., with protein A/G beads alone) to reduce nonspecific binding.
9. Add the specific antibody, followed by protein A/G beads.
10. Wash beads thoroughly to remove nonspecific complexes.
11. Reverse crosslink (if needed) or proceed directly to RNA purification, depending on the protocol. Some protocols lyse or treat with proteinase K to release RNA from the protein-bead complex.
12. Isolate RNA from the immunoprecipitated complex.
13. Reverse transcribe and perform qPCR to detect the RNA targets that were bound by the protein.
14. Key considerations for UV crosslinking:
15. Irradiation distance/energy: Keep the distance between the UV lamp and cells/lysate standardized to ensure reproducibility.
16. Crosslinking efficiency vs. RNA integrity: Higher UV doses may degrade RNA. Its important to titrate energy.
17. Protective measures: UV light is harmful to skin and eyes. Always use shields and PPE.
#### Formaldehyde Crosslinking
##### Overview:
Formaldehyde can be used to crosslink proteins and nucleic acids by reacting with amino and imino groups. It is less commonly used for fine-scale mapping studies (like CLIP-seq) because it can be somewhat reversible and can introduce more nonspecific crosslinks. However, it is still used in some RIP and ChIP (chromatin IP) approaches.
##### Typical workflow:
Grow cells to desired confluency.
Prepare fresh formaldehyde at a working concentration (often 1% final in the culture medium) to fix cells.
Add formaldehyde directly to cells in culture medium (or in PBS) and incubate typically for 510 minutes at room temperature or 37 °C (depending on the protocol).
Quench the reaction by adding glycine (often to a final concentration of 125 mM) for 510 minutes.
Wash the cells with cold PBS.
Harvest cells carefully.
Lyse cells under conditions that preserve protein-RNA complexes (often using mild detergents, protease inhibitors, and RNase inhibitors).
Immunoprecipitate using a specific antibody against the protein of interest.
Wash beads to remove nonspecific material.
Reverse crosslink by heating or using other conditions specified in the protocol (formaldehyde crosslinks can often be reversed by heating at 65 °C for several hours in the presence of SDS and/or high salt).
Isolate RNA from the immunoprecipitated sample.
Reverse transcribe and perform qPCR to quantify target RNA levels.
Key considerations for formaldehyde crosslinking:
Crosslinking stringency: Formaldehyde can create more nonspecific crosslinks; optimizing crosslinking time and concentration is key.
Reversibility: Ensure you reverse crosslinks thoroughly to recover intact RNA for RT-qPCR.
Toxicity: Formaldehyde is highly toxic and volatile, so follow safety guidelines (work in a fume hood, use PPE).
#### Choosing the Method
#### UV Crosslinking
1. Generally provides more specific crosslinks between directly interacting residues (proteinRNA).
2. Can require specialized equipment (UV crosslinker).
3. More commonly used in CLIP-based methods for precise mapping of RNA-protein interaction sites.
4. Formaldehyde Crosslinking
5. Straightforward chemical method.
6. Potentially higher background due to nonspecific crosslinks.
7. Reversal requires heating and/or high salt conditions, which can be harsh on samples.
8. For many RNA-IP followed by RT-qPCR experiments (RIP-qPCR), mild crosslinking using UV at 254 nm is quite popular because it preserves specificity. However, if you already have a formaldehyde-based protocol optimized for your lab, that can also work.
#### Final Tips
Pilot Experiments:
Always optimize crosslinking conditions (time, energy, concentration) to balance specificity vs. yield.
Test different crosslinking strengths and confirm via a known positive RNA target.
Include Controls:
Use an IgG control or a nonspecific antibody to measure background binding.
Use input RNA to normalize or calculate percentage of input in qPCR.
Validate with Known Targets:
If possible, use a known RNA that your protein interacts with as a positive control.
Handle RNA Carefully:
Incorporate RNase inhibitors in all buffers, and keep samples cold when possible.
#### Safety Considerations:
1. UV crosslinking: protect from direct UV exposure; follow lamp manufacturers guidelines.
2. Formaldehyde: use a fume hood; wear gloves and goggles.
**By choosing the appropriate crosslinking approach and carefully optimizing the conditions, you can capture stable RNA-protein interactions, immunoprecipitate your protein of interest, and then detect and quantify the associated RNAs by RT-qPCR.**

View File

@ -0,0 +1,16 @@
## Before You Begin
- Sterilize all materials with 70% ethanol.
- Complete plate layout and siRNA calculations beforehand.
## Protocol
1. Open sterile 96-well TC plate (clear for brightfield / black for fluorescence).
2. Dilute 9 ml of cell suspension with 14 ml complete media.
3. Swirl and pour into a sterile 25-ml basin.
4. Using a multi-channel pipet:
- Seed **100 µl** per well.
5. Mix cell suspension periodically while seeding.
6. Aspirate leftovers and clean up.
---

View File

@ -0,0 +1,16 @@
## For 6-Well Plates
1. Start with a 90100% confluent 25 cm^3 flask of cells.
2. Aspirate media and wash with 10 ml sterile PBS.
3. Add 1 ml Trypsin, coat, incubate ~5 min at 37°C.
4. Dislodge cells, add 9 ml complete media (10% FBS + 1% PS).
5. Mix gently, pipet **350 µl** cell suspension into each well.
6. Add **1600 µl** complete media to each well.
7. Incubate 2448 hours.
## For 24-Well Plates
- Pipet 200 µl** cell suspension into each well.
- Top up with **800 µl** media as needed.
---

View File

@ -0,0 +1,38 @@
**
Created: 03/22/25JJ
1. Open the SpectraMax software on the computer.
2. Click Protocol > New Experiment
3. Click the gear above the plate grid to adjust settings.
4. For BCA:
5. Absorbance mode
6. Wavelengths = 562 nm
7. Paint the wells you want to measure
8. 96-well, clrbttm
9. No shaking
10. Fast Read is fine
11. Click open/close plate reader button
12. Insert your plate with H1 in the bottom-left corner.
13. Press Read
14. Copy paste the grid to excel
15. Save excel file to a USB or to the hard drive and then transfer it off the core facility computer.
**

View File

@ -0,0 +1,10 @@
## Before You Begin
- Sterilize everything with 70% ethanol.
- Spray your hands after touching anything outside the hood.
## Protocol
1. Aspirate old media.
2. Wash with PBS, aspirate.
3. Add 1 ml Tryp-LE, incubate 510 min.
4. Dislodge cells, add 9 ml complete media.
5. Seed 1 ml into a new flask with 9 ml complete media.
6. Incubate at 37°C with 5% CO₂.

View File

@ -0,0 +1,12 @@
## Steps:
1. Aspirate old cell media.
2. Add 150 ul (96-well), 1 ml (24-well), or 2 ml (6-well) control or treatment media (warmed in thermal bead bath) per well.
3. Return plate to incubator for the duration of the treatment period.
### Example Treaments:
1. [[BSA-OAPA treatment protocol v1.gdoc]]
2. [[BSA-OAPA treatment protocol v2.gdoc]]
3. [[BSA-OAPA Treatment Protocol v3]]

View File

@ -0,0 +1,77 @@
---
name: mRNA Stability Assay Protocol
id: PROT-0011
version: 1.0
description: Protocol for measuring mRNA stability using siNC vs. siYbx1 with Actinomycin D treatment
author: Jordan Lab
created: 2025-05-06
materials:
- Actinomycin D
- DMSO (control)
- Complete medium
- PBS (ice-cold)
- TRIzol or RLT buffer
- Multi-channel pipette
- Cell culture plates
- Tubes for sample storage
steps:
- "Prepare Actinomycin D and control media"
- "Treat cells with ActD or control media"
- "Collect time-point samples (0hr and subsequent)"
- "Process samples for RNA extraction"
notes: |
This protocol compares mRNA stability between control (siNC) and Ybx1 knockdown (siYbx1) conditions
ActD concentration is 5 µg/mL
Use multichannel pipettes to minimize time between treatments
---
#Protocol
## (siNC vs. siYbx1 with Actinomycin D)
### ✅ Step 1: Actinomycin D Medium Preparation
(Just before treatment)
- Prepare 5 µg/mL ActD medium and DMSO-only control medium.
Volumes needed:
- ActD (5 µg/mL): ~20 mL total (for all ActD wells)
- No ActD (DMSO control): ~5 mL total
---
### ✅ Step 2: ActD Treatment and Initial Collection (0 hr)
Procedure:
- Remove old media quickly from the plate (multi-channel vacuum aspirator recommended).
- Using a multichannel pipet, rapidly add 100 µL of treatment media (ActD or No ActD) according to the plate map.
- Immediately collect the 0 hr samples.
- Cell Collection Protocol (all time points):
- Quickly aspirate medium.
- Briefly wash with 100 µL ice-cold PBS (optional).
- Lyse directly in wells using 50 µL TRIzol or RLT buffer.
- Transfer lysate immediately to labeled tubes/plate and store at 80°C.
- Repeat for each timepoint
Multichannel tip:
Aspirate and dispense solutions one column at a time to minimize delays.
**

View File

@ -14,4 +14,4 @@ results:
observations: "Example observations."
status: planned
notes: |
Additional notes or deviations from protocol.
Additional notes or deviations from protocol.

View File

@ -6,4 +6,13 @@ pyyaml
gitpython
ghapi
biopython
requests
requests
# Jupyter and dashboard dependencies
jupyter
notebook
jupyterlab
pandas
matplotlib
plotly
ipywidgets