Add files using upload-large-folder tool
Browse filesThis view is limited to 50 files because it contains too many changes. See raw diff
- BioScientist/LICENSE +21 -0
- BioScientist/agent_system/engines/__pycache__/__init__.cpython-310.pyc +0 -0
- BioScientist/agent_system/engines/__pycache__/__init__.cpython-311.pyc +0 -0
- BioScientist/agent_system/engines/__pycache__/e1_validator.cpython-310.pyc +0 -0
- BioScientist/agent_system/engines/__pycache__/e1_validator.cpython-311.pyc +0 -0
- BioScientist/agent_system/engines/__pycache__/t1_consultant.cpython-310.pyc +0 -0
- BioScientist/agent_system/engines/__pycache__/t1_consultant.cpython-311.pyc +0 -0
- BioScientist/agent_system/engines/__pycache__/t1_consultant.cpython-313.pyc +0 -0
- BioScientist/agent_system/engines/__pycache__/v1_executor.cpython-310.pyc +0 -0
- BioScientist/agent_system/engines/__pycache__/v1_executor.cpython-311.pyc +0 -0
- BioScientist/agent_system/engines/v1_executor_backup/__pycache__/__init__.cpython-310.pyc +0 -0
- BioScientist/agent_system/engines/v1_executor_backup/__pycache__/__init__.cpython-311.pyc +0 -0
- BioScientist/agent_system/engines/v1_executor_backup/__pycache__/__init__.cpython-313.pyc +0 -0
- BioScientist/agent_system/engines/v1_executor_backup/__pycache__/config.cpython-311.pyc +0 -0
- BioScientist/agent_system/engines/v1_executor_backup/__pycache__/env_desc.cpython-311.pyc +0 -0
- BioScientist/agent_system/engines/v1_executor_backup/__pycache__/llm.cpython-311.pyc +0 -0
- BioScientist/agent_system/engines/v1_executor_backup/__pycache__/utils.cpython-311.pyc +0 -0
- BioScientist/agent_system/engines/v1_executor_backup/__pycache__/version.cpython-310.pyc +0 -0
- BioScientist/agent_system/engines/v1_executor_backup/__pycache__/version.cpython-311.pyc +0 -0
- BioScientist/agent_system/engines/v1_executor_backup/__pycache__/version.cpython-313.pyc +0 -0
- BioScientist/agent_system/engines/v1_executor_backup/biorxiv_scripts/extract_biorxiv_tasks.py +404 -0
- BioScientist/agent_system/engines/v1_executor_backup/biorxiv_scripts/generate_function.py +72 -0
- BioScientist/agent_system/engines/v1_executor_backup/biorxiv_scripts/process_all_subjects.py +315 -0
- BioScientist/agent_system/engines/v1_executor_backup/know_how/__init__.py +9 -0
- BioScientist/agent_system/engines/v1_executor_backup/know_how/__pycache__/__init__.cpython-311.pyc +0 -0
- BioScientist/agent_system/engines/v1_executor_backup/know_how/__pycache__/loader.cpython-311.pyc +0 -0
- BioScientist/agent_system/engines/v1_executor_backup/know_how/loader.py +348 -0
- BioScientist/agent_system/engines/v1_executor_backup/know_how/resource/CRISPick_download_links.txt +238 -0
- BioScientist/agent_system/engines/v1_executor_backup/know_how/resource/addgene_grna_sequences.csv +322 -0
- BioScientist/agent_system/engines/v1_executor_backup/know_how/sgRNA_design_guide.md +419 -0
- BioScientist/agent_system/engines/v1_executor_backup/know_how/single_cell_annotation.md +223 -0
- BioScientist/agent_system/engines/v1_executor_backup/model/__init__.py +0 -0
- BioScientist/agent_system/engines/v1_executor_backup/model/__pycache__/__init__.cpython-311.pyc +0 -0
- BioScientist/agent_system/engines/v1_executor_backup/model/__pycache__/retriever.cpython-311.pyc +0 -0
- BioScientist/agent_system/engines/v1_executor_backup/model/retriever.py +203 -0
- BioScientist/agent_system/engines/v1_executor_backup/tool/__pycache__/__init__.cpython-311.pyc +0 -0
- BioScientist/agent_system/engines/v1_executor_backup/tool/__pycache__/literature.cpython-311.pyc +0 -0
- BioScientist/agent_system/engines/v1_executor_backup/tool/__pycache__/molecular_biology.cpython-311.pyc +0 -0
- BioScientist/agent_system/engines/v1_executor_backup/tool/__pycache__/protocols.cpython-311.pyc +0 -0
- BioScientist/agent_system/engines/v1_executor_backup/tool/__pycache__/support_tools.cpython-311.pyc +0 -0
- BioScientist/agent_system/engines/v1_executor_backup/tool/__pycache__/tool_registry.cpython-311.pyc +0 -0
- BioScientist/agent_system/engines/v1_executor_backup/tool/bioengineering.py +1387 -0
- BioScientist/agent_system/engines/v1_executor_backup/tool/example_mcp_tools/pubmed_mcp.py +38 -0
- BioScientist/agent_system/engines/v1_executor_backup/tool/protocols/addgene/Addgene_ AAV Production.txt +325 -0
- BioScientist/agent_system/engines/v1_executor_backup/tool/protocols/addgene/Addgene_ AAV Purification.txt +244 -0
- BioScientist/agent_system/engines/v1_executor_backup/tool/protocols/addgene/Addgene_ AAV Titration by qPCR.txt +264 -0
- BioScientist/agent_system/engines/v1_executor_backup/tool/protocols/addgene/Addgene_ AAV ddPCR Titration.txt +318 -0
- BioScientist/agent_system/engines/v1_executor_backup/tool/protocols/addgene/Addgene_ Affinity Purification of Recombinant Antibodies with Protein A or Protein G.txt +310 -0
- BioScientist/agent_system/engines/v1_executor_backup/tool/protocols/addgene/Addgene_ Antibody Validation Using the Indirect ELISA Method.txt +280 -0
- BioScientist/agent_system/engines/v1_executor_backup/tool/protocols/addgene/Addgene_ CRISPR Library Amplification.txt +330 -0
BioScientist/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
MIT License
|
| 2 |
+
|
| 3 |
+
Copyright (c) 2025 florensiawidjaja
|
| 4 |
+
|
| 5 |
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
| 6 |
+
of this software and associated documentation files (the "Software"), to deal
|
| 7 |
+
in the Software without restriction, including without limitation the rights
|
| 8 |
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
| 9 |
+
copies of the Software, and to permit persons to whom the Software is
|
| 10 |
+
furnished to do so, subject to the following conditions:
|
| 11 |
+
|
| 12 |
+
The above copyright notice and this permission notice shall be included in all
|
| 13 |
+
copies or substantial portions of the Software.
|
| 14 |
+
|
| 15 |
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
| 16 |
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
| 17 |
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
| 18 |
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
| 19 |
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
| 20 |
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
| 21 |
+
SOFTWARE.
|
BioScientist/agent_system/engines/__pycache__/__init__.cpython-310.pyc
ADDED
|
Binary file (358 Bytes). View file
|
|
|
BioScientist/agent_system/engines/__pycache__/__init__.cpython-311.pyc
ADDED
|
Binary file (427 Bytes). View file
|
|
|
BioScientist/agent_system/engines/__pycache__/e1_validator.cpython-310.pyc
ADDED
|
Binary file (6.63 kB). View file
|
|
|
BioScientist/agent_system/engines/__pycache__/e1_validator.cpython-311.pyc
ADDED
|
Binary file (82.5 kB). View file
|
|
|
BioScientist/agent_system/engines/__pycache__/t1_consultant.cpython-310.pyc
ADDED
|
Binary file (9.26 kB). View file
|
|
|
BioScientist/agent_system/engines/__pycache__/t1_consultant.cpython-311.pyc
ADDED
|
Binary file (37.1 kB). View file
|
|
|
BioScientist/agent_system/engines/__pycache__/t1_consultant.cpython-313.pyc
ADDED
|
Binary file (6.71 kB). View file
|
|
|
BioScientist/agent_system/engines/__pycache__/v1_executor.cpython-310.pyc
ADDED
|
Binary file (35.3 kB). View file
|
|
|
BioScientist/agent_system/engines/__pycache__/v1_executor.cpython-311.pyc
ADDED
|
Binary file (67 kB). View file
|
|
|
BioScientist/agent_system/engines/v1_executor_backup/__pycache__/__init__.cpython-310.pyc
ADDED
|
Binary file (202 Bytes). View file
|
|
|
BioScientist/agent_system/engines/v1_executor_backup/__pycache__/__init__.cpython-311.pyc
ADDED
|
Binary file (235 Bytes). View file
|
|
|
BioScientist/agent_system/engines/v1_executor_backup/__pycache__/__init__.cpython-313.pyc
ADDED
|
Binary file (214 Bytes). View file
|
|
|
BioScientist/agent_system/engines/v1_executor_backup/__pycache__/config.cpython-311.pyc
ADDED
|
Binary file (4.6 kB). View file
|
|
|
BioScientist/agent_system/engines/v1_executor_backup/__pycache__/env_desc.cpython-311.pyc
ADDED
|
Binary file (24.9 kB). View file
|
|
|
BioScientist/agent_system/engines/v1_executor_backup/__pycache__/llm.cpython-311.pyc
ADDED
|
Binary file (10.4 kB). View file
|
|
|
BioScientist/agent_system/engines/v1_executor_backup/__pycache__/utils.cpython-311.pyc
ADDED
|
Binary file (98.4 kB). View file
|
|
|
BioScientist/agent_system/engines/v1_executor_backup/__pycache__/version.cpython-310.pyc
ADDED
|
Binary file (157 Bytes). View file
|
|
|
BioScientist/agent_system/engines/v1_executor_backup/__pycache__/version.cpython-311.pyc
ADDED
|
Binary file (172 Bytes). View file
|
|
|
BioScientist/agent_system/engines/v1_executor_backup/__pycache__/version.cpython-313.pyc
ADDED
|
Binary file (166 Bytes). View file
|
|
|
BioScientist/agent_system/engines/v1_executor_backup/biorxiv_scripts/extract_biorxiv_tasks.py
ADDED
|
@@ -0,0 +1,404 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/usr/bin/env python3
|
| 2 |
+
"""Script to extract common tasks, databases, and software from bioRxiv papers
|
| 3 |
+
using the PaperTaskExtractor and existing metadata CSV.
|
| 4 |
+
"""
|
| 5 |
+
|
| 6 |
+
import argparse
|
| 7 |
+
import io
|
| 8 |
+
import json
|
| 9 |
+
import os
|
| 10 |
+
import random
|
| 11 |
+
import sys
|
| 12 |
+
import time
|
| 13 |
+
from typing import Any
|
| 14 |
+
|
| 15 |
+
import pandas as pd
|
| 16 |
+
import PyPDF2
|
| 17 |
+
import requests
|
| 18 |
+
from tqdm import tqdm
|
| 19 |
+
|
| 20 |
+
# Add the parent directory to the path so we can import the bioagentos package
|
| 21 |
+
sys.path.append("../../")
|
| 22 |
+
from biomni.agent.env_collection import PaperTaskExtractor
|
| 23 |
+
|
| 24 |
+
|
| 25 |
+
def parse_arguments():
|
| 26 |
+
"""Parse command line arguments."""
|
| 27 |
+
parser = argparse.ArgumentParser(description="Extract tasks from bioRxiv papers in a specific subject area.")
|
| 28 |
+
parser.add_argument(
|
| 29 |
+
"--subject",
|
| 30 |
+
type=str,
|
| 31 |
+
required=True,
|
| 32 |
+
help='Subject area to search for papers (e.g., "neuroscience", "bioinformatics")',
|
| 33 |
+
)
|
| 34 |
+
parser.add_argument(
|
| 35 |
+
"--limit",
|
| 36 |
+
type=int,
|
| 37 |
+
default=10,
|
| 38 |
+
help="Maximum number of papers to process (default: 10)",
|
| 39 |
+
)
|
| 40 |
+
parser.add_argument(
|
| 41 |
+
"--metadata-path",
|
| 42 |
+
type=str,
|
| 43 |
+
default="/dfs/user/kexinh/BioAgentOS/data/biorxiv_metadata.csv",
|
| 44 |
+
help="Path to bioRxiv metadata CSV file (default: data/biorxiv_metadata.csv)",
|
| 45 |
+
)
|
| 46 |
+
parser.add_argument(
|
| 47 |
+
"--output-dir",
|
| 48 |
+
type=str,
|
| 49 |
+
default=None,
|
| 50 |
+
help="Directory to save results (default: ./biorxiv_results_{subject}_{limit})",
|
| 51 |
+
)
|
| 52 |
+
parser.add_argument(
|
| 53 |
+
"--model",
|
| 54 |
+
type=str,
|
| 55 |
+
default="claude-3-haiku-20240307",
|
| 56 |
+
help="LLM model to use for extraction (default: claude-3-haiku-20240307)",
|
| 57 |
+
)
|
| 58 |
+
parser.add_argument(
|
| 59 |
+
"--chunk-size",
|
| 60 |
+
type=int,
|
| 61 |
+
default=4000,
|
| 62 |
+
help="Chunk size for text processing (default: 4000)",
|
| 63 |
+
)
|
| 64 |
+
parser.add_argument(
|
| 65 |
+
"--chunk-overlap",
|
| 66 |
+
type=int,
|
| 67 |
+
default=400,
|
| 68 |
+
help="Chunk overlap for text processing (default: 400)",
|
| 69 |
+
)
|
| 70 |
+
parser.add_argument(
|
| 71 |
+
"--max-paper-length",
|
| 72 |
+
type=int,
|
| 73 |
+
default=200000,
|
| 74 |
+
help="Maximum paper length in characters (default: 200000)",
|
| 75 |
+
)
|
| 76 |
+
parser.add_argument("--save-pdfs", action="store_true", help="Save downloaded PDFs (default: False)")
|
| 77 |
+
parser.add_argument(
|
| 78 |
+
"--random-sample",
|
| 79 |
+
action="store_true",
|
| 80 |
+
help="Randomly sample papers instead of taking the first N (default: False)",
|
| 81 |
+
)
|
| 82 |
+
return parser.parse_args()
|
| 83 |
+
|
| 84 |
+
|
| 85 |
+
def load_papers_from_csv(metadata_path: str, subject: str, limit: int, random_sample: bool) -> pd.DataFrame:
|
| 86 |
+
"""Load papers from bioRxiv metadata CSV file.
|
| 87 |
+
|
| 88 |
+
Args:
|
| 89 |
+
metadata_path: Path to the metadata CSV file
|
| 90 |
+
subject: Subject area to filter by
|
| 91 |
+
limit: Maximum number of papers to return
|
| 92 |
+
random_sample: Whether to randomly sample papers
|
| 93 |
+
|
| 94 |
+
Returns:
|
| 95 |
+
DataFrame of filtered papers
|
| 96 |
+
|
| 97 |
+
"""
|
| 98 |
+
try:
|
| 99 |
+
# Load the metadata CSV
|
| 100 |
+
df_biorxiv = pd.read_csv(metadata_path)
|
| 101 |
+
|
| 102 |
+
# Filter published papers in the specified subject
|
| 103 |
+
if subject.lower() == "all":
|
| 104 |
+
filtered_df = df_biorxiv[df_biorxiv.published != "NA"]
|
| 105 |
+
else:
|
| 106 |
+
filtered_df = df_biorxiv[
|
| 107 |
+
(df_biorxiv.published != "NA") & (df_biorxiv.category.str.lower() == subject.lower())
|
| 108 |
+
]
|
| 109 |
+
|
| 110 |
+
# Sample papers
|
| 111 |
+
if len(filtered_df) > limit:
|
| 112 |
+
filtered_df = filtered_df.sample(limit, random_state=42) if random_sample else filtered_df.head(limit)
|
| 113 |
+
|
| 114 |
+
print(f"Loaded {len(filtered_df)} papers in subject: {subject}")
|
| 115 |
+
return filtered_df
|
| 116 |
+
|
| 117 |
+
except Exception as e:
|
| 118 |
+
print(f"Error loading papers from CSV: {e}")
|
| 119 |
+
return pd.DataFrame()
|
| 120 |
+
|
| 121 |
+
|
| 122 |
+
def download_pdf(paper_doi: str, save_path: str | None = None) -> str | None:
|
| 123 |
+
"""Download PDF for a given paper DOI.
|
| 124 |
+
|
| 125 |
+
Args:
|
| 126 |
+
paper_doi: DOI of the paper
|
| 127 |
+
save_path: Path to save the PDF (if None, won't save to disk)
|
| 128 |
+
|
| 129 |
+
Returns:
|
| 130 |
+
PDF text content or None if download failed
|
| 131 |
+
|
| 132 |
+
"""
|
| 133 |
+
# Construct PDF URL from DOI
|
| 134 |
+
pdf_url = f"https://www.biorxiv.org/content/{paper_doi}v1.full.pdf"
|
| 135 |
+
|
| 136 |
+
try:
|
| 137 |
+
# Add random delay to avoid rate limiting
|
| 138 |
+
time.sleep(random.uniform(1, 3))
|
| 139 |
+
|
| 140 |
+
response = requests.get(pdf_url, stream=True)
|
| 141 |
+
response.raise_for_status()
|
| 142 |
+
|
| 143 |
+
# Save PDF if requested
|
| 144 |
+
if save_path:
|
| 145 |
+
os.makedirs(os.path.dirname(save_path), exist_ok=True)
|
| 146 |
+
with open(save_path, "wb") as f:
|
| 147 |
+
for chunk in response.iter_content(chunk_size=8192):
|
| 148 |
+
f.write(chunk)
|
| 149 |
+
|
| 150 |
+
# Extract text from PDF
|
| 151 |
+
pdf_text = extract_text_from_pdf(io.BytesIO(response.content))
|
| 152 |
+
return pdf_text
|
| 153 |
+
|
| 154 |
+
except requests.exceptions.RequestException as e:
|
| 155 |
+
print(f"Error downloading PDF for {paper_doi}: {e}")
|
| 156 |
+
return None
|
| 157 |
+
|
| 158 |
+
|
| 159 |
+
def extract_text_from_pdf(pdf_file) -> str:
|
| 160 |
+
"""Extract text content from a PDF file.
|
| 161 |
+
|
| 162 |
+
Args:
|
| 163 |
+
pdf_file: File-like object containing PDF data
|
| 164 |
+
|
| 165 |
+
Returns:
|
| 166 |
+
Extracted text content
|
| 167 |
+
|
| 168 |
+
"""
|
| 169 |
+
try:
|
| 170 |
+
pdf_reader = PyPDF2.PdfReader(pdf_file)
|
| 171 |
+
text = ""
|
| 172 |
+
for page_num in range(len(pdf_reader.pages)):
|
| 173 |
+
page = pdf_reader.pages[page_num]
|
| 174 |
+
text += page.extract_text() + "\n\n"
|
| 175 |
+
return text
|
| 176 |
+
except Exception as e:
|
| 177 |
+
print(f"Error extracting text from PDF: {e}")
|
| 178 |
+
return ""
|
| 179 |
+
|
| 180 |
+
|
| 181 |
+
def truncate_text(text: str, max_length: int) -> str:
|
| 182 |
+
"""Truncate text to a maximum length while preserving complete sentences.
|
| 183 |
+
|
| 184 |
+
Args:
|
| 185 |
+
text: The text to truncate
|
| 186 |
+
max_length: Maximum length in characters
|
| 187 |
+
|
| 188 |
+
Returns:
|
| 189 |
+
Truncated text
|
| 190 |
+
|
| 191 |
+
"""
|
| 192 |
+
if len(text) <= max_length:
|
| 193 |
+
return text
|
| 194 |
+
|
| 195 |
+
# Find the last sentence boundary before max_length
|
| 196 |
+
truncated = text[:max_length]
|
| 197 |
+
last_period = truncated.rfind(".")
|
| 198 |
+
last_question = truncated.rfind("?")
|
| 199 |
+
last_exclamation = truncated.rfind("!")
|
| 200 |
+
|
| 201 |
+
# Find the last sentence boundary
|
| 202 |
+
last_boundary = max(last_period, last_question, last_exclamation)
|
| 203 |
+
|
| 204 |
+
if last_boundary > 0:
|
| 205 |
+
return text[: last_boundary + 1]
|
| 206 |
+
else:
|
| 207 |
+
# If no sentence boundary found, just truncate at max_length
|
| 208 |
+
return truncated
|
| 209 |
+
|
| 210 |
+
|
| 211 |
+
def process_papers(papers_df: pd.DataFrame, args) -> list[dict[str, Any]]:
|
| 212 |
+
"""Process papers using PaperTaskExtractor.
|
| 213 |
+
|
| 214 |
+
Args:
|
| 215 |
+
papers_df: DataFrame of paper metadata
|
| 216 |
+
args: Command line arguments
|
| 217 |
+
|
| 218 |
+
Returns:
|
| 219 |
+
List of papers with extracted tasks, databases, and software
|
| 220 |
+
|
| 221 |
+
"""
|
| 222 |
+
# Initialize the task extractor
|
| 223 |
+
extractor = PaperTaskExtractor(llm=args.model, chunk_size=args.chunk_size, chunk_overlap=args.chunk_overlap)
|
| 224 |
+
|
| 225 |
+
results = []
|
| 226 |
+
|
| 227 |
+
for _, paper in tqdm(papers_df.iterrows(), total=len(papers_df), desc="Processing papers"):
|
| 228 |
+
paper_doi = paper.get("doi")
|
| 229 |
+
if not paper_doi:
|
| 230 |
+
continue
|
| 231 |
+
|
| 232 |
+
print(f"\nProcessing paper: {paper.get('title')} (DOI: {paper_doi})")
|
| 233 |
+
|
| 234 |
+
# Create paths
|
| 235 |
+
pdf_path = None
|
| 236 |
+
if args.save_pdfs:
|
| 237 |
+
pdf_path = os.path.join(args.output_dir, "pdfs", f"{paper_doi.replace('/', '_')}.pdf")
|
| 238 |
+
|
| 239 |
+
result_path = os.path.join(args.output_dir, "results", f"{paper_doi.replace('/', '_')}.json")
|
| 240 |
+
|
| 241 |
+
# Skip if already processed
|
| 242 |
+
if os.path.exists(result_path):
|
| 243 |
+
print(f"Paper already processed, loading from {result_path}")
|
| 244 |
+
with open(result_path) as f:
|
| 245 |
+
paper_result = json.load(f)
|
| 246 |
+
results.append(paper_result)
|
| 247 |
+
continue
|
| 248 |
+
|
| 249 |
+
# Download and process PDF
|
| 250 |
+
pdf_text = download_pdf(paper_doi, pdf_path)
|
| 251 |
+
if not pdf_text:
|
| 252 |
+
print(f"Failed to download or extract text from {paper_doi}")
|
| 253 |
+
continue
|
| 254 |
+
|
| 255 |
+
# Truncate text if it exceeds max length
|
| 256 |
+
if len(pdf_text) > args.max_paper_length:
|
| 257 |
+
original_length = len(pdf_text)
|
| 258 |
+
pdf_text = truncate_text(pdf_text, args.max_paper_length)
|
| 259 |
+
print(f"Truncated paper from {original_length} to {len(pdf_text)} characters")
|
| 260 |
+
|
| 261 |
+
# Extract tasks, databases, and software
|
| 262 |
+
try:
|
| 263 |
+
_, extraction_results = extractor.go(pdf_text)
|
| 264 |
+
|
| 265 |
+
# Add paper metadata to results
|
| 266 |
+
paper_result = {
|
| 267 |
+
"metadata": {
|
| 268 |
+
"doi": paper.get("doi"),
|
| 269 |
+
"title": paper.get("title"),
|
| 270 |
+
"authors": paper.get("authors", ""),
|
| 271 |
+
"abstract": paper.get("abstract", ""),
|
| 272 |
+
"date": paper.get("date", ""),
|
| 273 |
+
"category": paper.get("category", ""),
|
| 274 |
+
"text_length": len(pdf_text),
|
| 275 |
+
},
|
| 276 |
+
"extraction": extraction_results,
|
| 277 |
+
}
|
| 278 |
+
|
| 279 |
+
# Save results
|
| 280 |
+
os.makedirs(os.path.dirname(result_path), exist_ok=True)
|
| 281 |
+
with open(result_path, "w") as f:
|
| 282 |
+
json.dump(paper_result, f, indent=2)
|
| 283 |
+
|
| 284 |
+
results.append(paper_result)
|
| 285 |
+
|
| 286 |
+
except Exception as e:
|
| 287 |
+
print(f"Error processing paper {paper_doi}: {e}")
|
| 288 |
+
|
| 289 |
+
return results
|
| 290 |
+
|
| 291 |
+
|
| 292 |
+
def generate_summary(results: list[dict[str, Any]], output_dir: str):
|
| 293 |
+
"""Generate summary of extracted tasks, databases, and software.
|
| 294 |
+
|
| 295 |
+
Args:
|
| 296 |
+
results: List of papers with extraction results
|
| 297 |
+
output_dir: Directory to save summary
|
| 298 |
+
|
| 299 |
+
"""
|
| 300 |
+
# Collect all tasks, databases, and software
|
| 301 |
+
all_tasks = []
|
| 302 |
+
all_databases = []
|
| 303 |
+
all_software = []
|
| 304 |
+
|
| 305 |
+
for paper in results:
|
| 306 |
+
extraction = paper.get("extraction", {})
|
| 307 |
+
|
| 308 |
+
# Add paper metadata to each item
|
| 309 |
+
paper_meta = paper.get("metadata", {})
|
| 310 |
+
paper_id = f"{paper_meta.get('title')} ({paper_meta.get('doi')})"
|
| 311 |
+
|
| 312 |
+
# Process tasks
|
| 313 |
+
for task in extraction.get("tasks", []):
|
| 314 |
+
task["paper"] = paper_id
|
| 315 |
+
all_tasks.append(task)
|
| 316 |
+
|
| 317 |
+
# Process databases
|
| 318 |
+
for db in extraction.get("databases", []):
|
| 319 |
+
db["paper"] = paper_id
|
| 320 |
+
all_databases.append(db)
|
| 321 |
+
|
| 322 |
+
# Process software
|
| 323 |
+
for sw in extraction.get("software", []):
|
| 324 |
+
sw["paper"] = paper_id
|
| 325 |
+
all_software.append(sw)
|
| 326 |
+
|
| 327 |
+
# Create summary dataframes
|
| 328 |
+
if all_tasks:
|
| 329 |
+
tasks_df = pd.DataFrame(all_tasks)
|
| 330 |
+
tasks_df.to_csv(os.path.join(output_dir, "tasks_summary.csv"), index=False)
|
| 331 |
+
|
| 332 |
+
if all_databases:
|
| 333 |
+
db_df = pd.DataFrame(all_databases)
|
| 334 |
+
db_df.to_csv(os.path.join(output_dir, "databases_summary.csv"), index=False)
|
| 335 |
+
|
| 336 |
+
if all_software:
|
| 337 |
+
sw_df = pd.DataFrame(all_software)
|
| 338 |
+
sw_df.to_csv(os.path.join(output_dir, "software_summary.csv"), index=False)
|
| 339 |
+
|
| 340 |
+
# Generate frequency counts
|
| 341 |
+
task_counts = {}
|
| 342 |
+
for task in all_tasks:
|
| 343 |
+
task_name = task.get("task_name")
|
| 344 |
+
if task_name:
|
| 345 |
+
task_counts[task_name] = task_counts.get(task_name, 0) + 1
|
| 346 |
+
|
| 347 |
+
db_counts = {}
|
| 348 |
+
for db in all_databases:
|
| 349 |
+
db_name = db.get("name")
|
| 350 |
+
if db_name:
|
| 351 |
+
db_counts[db_name] = db_counts.get(db_name, 0) + 1
|
| 352 |
+
|
| 353 |
+
sw_counts = {}
|
| 354 |
+
for sw in all_software:
|
| 355 |
+
sw_name = sw.get("name")
|
| 356 |
+
if sw_name:
|
| 357 |
+
sw_counts[sw_name] = sw_counts.get(sw_name, 0) + 1
|
| 358 |
+
|
| 359 |
+
# Save frequency counts
|
| 360 |
+
with open(os.path.join(output_dir, "frequency_summary.json"), "w") as f:
|
| 361 |
+
json.dump(
|
| 362 |
+
{"tasks": task_counts, "databases": db_counts, "software": sw_counts},
|
| 363 |
+
f,
|
| 364 |
+
indent=2,
|
| 365 |
+
)
|
| 366 |
+
|
| 367 |
+
print(f"Summary files saved to {output_dir}")
|
| 368 |
+
|
| 369 |
+
|
| 370 |
+
def main():
|
| 371 |
+
"""Main function to run the script."""
|
| 372 |
+
args = parse_arguments()
|
| 373 |
+
|
| 374 |
+
# Set default output directory if not specified
|
| 375 |
+
if args.output_dir is None:
|
| 376 |
+
# Clean subject name for directory name (replace spaces with underscores, lowercase)
|
| 377 |
+
clean_subject = args.subject.lower().replace(" ", "_").replace("/", "_")
|
| 378 |
+
args.output_dir = f"./biorxiv_results_{clean_subject}_{args.limit}"
|
| 379 |
+
|
| 380 |
+
# Create output directories
|
| 381 |
+
os.makedirs(args.output_dir, exist_ok=True)
|
| 382 |
+
os.makedirs(os.path.join(args.output_dir, "results"), exist_ok=True)
|
| 383 |
+
if args.save_pdfs:
|
| 384 |
+
os.makedirs(os.path.join(args.output_dir, "pdfs"), exist_ok=True)
|
| 385 |
+
|
| 386 |
+
# Load papers from CSV
|
| 387 |
+
print(f"Loading papers from {args.metadata_path} in subject area: {args.subject}")
|
| 388 |
+
papers_df = load_papers_from_csv(args.metadata_path, args.subject, args.limit, args.random_sample)
|
| 389 |
+
|
| 390 |
+
if len(papers_df) == 0:
|
| 391 |
+
print(f"No papers found for subject: {args.subject}")
|
| 392 |
+
return
|
| 393 |
+
|
| 394 |
+
# Process papers
|
| 395 |
+
results = process_papers(papers_df, args)
|
| 396 |
+
|
| 397 |
+
# Generate summary
|
| 398 |
+
generate_summary(results, args.output_dir)
|
| 399 |
+
|
| 400 |
+
print("Done!")
|
| 401 |
+
|
| 402 |
+
|
| 403 |
+
if __name__ == "__main__":
|
| 404 |
+
main()
|
BioScientist/agent_system/engines/v1_executor_backup/biorxiv_scripts/generate_function.py
ADDED
|
@@ -0,0 +1,72 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/usr/bin/env python3
|
| 2 |
+
"""Command-line tool to generate Python functions from task descriptions using the function_generator agent."""
|
| 3 |
+
|
| 4 |
+
import argparse
|
| 5 |
+
import json
|
| 6 |
+
import os
|
| 7 |
+
|
| 8 |
+
from biomni.agent.function_generator import FunctionGenerator
|
| 9 |
+
from tqdm import tqdm
|
| 10 |
+
|
| 11 |
+
|
| 12 |
+
def main():
|
| 13 |
+
"""Main function for the command-line tool."""
|
| 14 |
+
parser = argparse.ArgumentParser(description="Generate Python functions given task descriptions")
|
| 15 |
+
parser.add_argument(
|
| 16 |
+
"--task",
|
| 17 |
+
"-t",
|
| 18 |
+
type=str,
|
| 19 |
+
help="JSON file containing a list of task descriptions",
|
| 20 |
+
)
|
| 21 |
+
parser.add_argument(
|
| 22 |
+
"--output-dir",
|
| 23 |
+
"-o",
|
| 24 |
+
type=str,
|
| 25 |
+
default="generated_functions",
|
| 26 |
+
help="Directory to save the generated functions (default: generated_functions)",
|
| 27 |
+
)
|
| 28 |
+
parser.add_argument(
|
| 29 |
+
"--model",
|
| 30 |
+
"-m",
|
| 31 |
+
type=str,
|
| 32 |
+
default="claude-3-7-sonnet-latest",
|
| 33 |
+
help="LLM model to use (default: claude-3-7-sonnet-latest)",
|
| 34 |
+
)
|
| 35 |
+
parser.add_argument(
|
| 36 |
+
"--temperature",
|
| 37 |
+
type=float,
|
| 38 |
+
default=0.7,
|
| 39 |
+
help="Temperature setting for the LLM (default: 0.7)",
|
| 40 |
+
)
|
| 41 |
+
|
| 42 |
+
args = parser.parse_args()
|
| 43 |
+
|
| 44 |
+
with open(args.task) as f_tasks:
|
| 45 |
+
task_list = json.load(f_tasks)
|
| 46 |
+
task_descriptions = list(task_list["tasks"])
|
| 47 |
+
|
| 48 |
+
# Create the output directory if it doesn't exist
|
| 49 |
+
os.makedirs(args.output_dir, exist_ok=True)
|
| 50 |
+
|
| 51 |
+
# Initialize the function generator agent
|
| 52 |
+
function_generator = FunctionGenerator(llm=args.model, temperature=args.temperature)
|
| 53 |
+
|
| 54 |
+
if not task_list:
|
| 55 |
+
print("No tasks found.")
|
| 56 |
+
else:
|
| 57 |
+
# tqdm shows a progress bar, file names as description
|
| 58 |
+
for _i, desc in enumerate(tqdm(task_descriptions, desc="Generating Python scripts given task descriptions"), 1):
|
| 59 |
+
generated_script_name, generated_codes = function_generator.go(desc)
|
| 60 |
+
|
| 61 |
+
# Save results
|
| 62 |
+
result_path = os.path.join(args.output_dir, generated_script_name)
|
| 63 |
+
|
| 64 |
+
os.makedirs(os.path.dirname(result_path), exist_ok=True)
|
| 65 |
+
with open(result_path, "w") as f:
|
| 66 |
+
f.write(generated_codes)
|
| 67 |
+
|
| 68 |
+
print("DONE")
|
| 69 |
+
|
| 70 |
+
|
| 71 |
+
if __name__ == "__main__":
|
| 72 |
+
main()
|
BioScientist/agent_system/engines/v1_executor_backup/biorxiv_scripts/process_all_subjects.py
ADDED
|
@@ -0,0 +1,315 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/usr/bin/env python3
|
| 2 |
+
"""Script to process all bioRxiv subjects and extract computational tasks from the top 100 papers in each."""
|
| 3 |
+
|
| 4 |
+
import argparse
|
| 5 |
+
import os
|
| 6 |
+
import subprocess
|
| 7 |
+
import sys
|
| 8 |
+
import time
|
| 9 |
+
|
| 10 |
+
import pandas as pd
|
| 11 |
+
from tqdm import tqdm
|
| 12 |
+
|
| 13 |
+
# Add the parent directory to the path so we can import the bioagentos package
|
| 14 |
+
sys.path.append("/dfs/user/kexinh/BioAgentOS/")
|
| 15 |
+
|
| 16 |
+
# List of all bioRxiv subjects
|
| 17 |
+
BIORXIV_SUBJECTS = [
|
| 18 |
+
"evolutionary biology",
|
| 19 |
+
"ecology",
|
| 20 |
+
"neuroscience",
|
| 21 |
+
"developmental biology",
|
| 22 |
+
"plant biology",
|
| 23 |
+
"microbiology",
|
| 24 |
+
"cancer biology",
|
| 25 |
+
"immunology",
|
| 26 |
+
"cell biology",
|
| 27 |
+
"biochemistry",
|
| 28 |
+
"genetics",
|
| 29 |
+
"bioinformatics",
|
| 30 |
+
"animal behavior and cognition",
|
| 31 |
+
"biophysics",
|
| 32 |
+
"genomics",
|
| 33 |
+
"systems biology",
|
| 34 |
+
"bioengineering",
|
| 35 |
+
"molecular biology",
|
| 36 |
+
"physiology",
|
| 37 |
+
"zoology",
|
| 38 |
+
"scientific communication and education",
|
| 39 |
+
"pathology",
|
| 40 |
+
"synthetic biology",
|
| 41 |
+
"paleontology",
|
| 42 |
+
"pharmacology and toxicology",
|
| 43 |
+
]
|
| 44 |
+
|
| 45 |
+
|
| 46 |
+
def parse_arguments():
|
| 47 |
+
"""Parse command line arguments."""
|
| 48 |
+
parser = argparse.ArgumentParser(description="Process all bioRxiv subjects and extract tasks from papers.")
|
| 49 |
+
parser.add_argument(
|
| 50 |
+
"--papers-per-subject",
|
| 51 |
+
type=int,
|
| 52 |
+
default=100,
|
| 53 |
+
help="Number of papers to process per subject (default: 100)",
|
| 54 |
+
)
|
| 55 |
+
parser.add_argument(
|
| 56 |
+
"--metadata-path",
|
| 57 |
+
type=str,
|
| 58 |
+
default="/dfs/user/kexinh/BioAgentOS/data/biorxiv_metadata.csv",
|
| 59 |
+
help="Path to bioRxiv metadata CSV file (default: data/biorxiv_metadata.csv)",
|
| 60 |
+
)
|
| 61 |
+
parser.add_argument(
|
| 62 |
+
"--output-dir",
|
| 63 |
+
type=str,
|
| 64 |
+
default="./biorxiv_all_subjects",
|
| 65 |
+
help="Base directory to save results (default: ./biorxiv_all_subjects)",
|
| 66 |
+
)
|
| 67 |
+
parser.add_argument(
|
| 68 |
+
"--model",
|
| 69 |
+
type=str,
|
| 70 |
+
default="claude-3-haiku-20240307",
|
| 71 |
+
help="LLM model to use for extraction (default: claude-3-haiku-20240307)",
|
| 72 |
+
)
|
| 73 |
+
parser.add_argument(
|
| 74 |
+
"--max-paper-length",
|
| 75 |
+
type=int,
|
| 76 |
+
default=200000,
|
| 77 |
+
help="Maximum paper length in characters (default: 200000)",
|
| 78 |
+
)
|
| 79 |
+
parser.add_argument(
|
| 80 |
+
"--chunk-size",
|
| 81 |
+
type=int,
|
| 82 |
+
default=10000,
|
| 83 |
+
help="Chunk size for text processing (default: 10000)",
|
| 84 |
+
)
|
| 85 |
+
parser.add_argument(
|
| 86 |
+
"--chunk-overlap",
|
| 87 |
+
type=int,
|
| 88 |
+
default=400,
|
| 89 |
+
help="Chunk overlap for text processing (default: 400)",
|
| 90 |
+
)
|
| 91 |
+
parser.add_argument("--save-pdfs", action="store_true", help="Save downloaded PDFs (default: False)")
|
| 92 |
+
parser.add_argument(
|
| 93 |
+
"--random-sample",
|
| 94 |
+
action="store_true",
|
| 95 |
+
help="Randomly sample papers instead of taking the first N (default: False)",
|
| 96 |
+
)
|
| 97 |
+
parser.add_argument(
|
| 98 |
+
"--subjects",
|
| 99 |
+
type=str,
|
| 100 |
+
nargs="+",
|
| 101 |
+
help="Specific subjects to process (default: all subjects)",
|
| 102 |
+
)
|
| 103 |
+
parser.add_argument(
|
| 104 |
+
"--delay",
|
| 105 |
+
type=int,
|
| 106 |
+
default=60,
|
| 107 |
+
help="Delay in seconds between processing subjects (default: 60)",
|
| 108 |
+
)
|
| 109 |
+
parser.add_argument(
|
| 110 |
+
"--summary-only",
|
| 111 |
+
action="store_true",
|
| 112 |
+
help="Only generate the combined summary (default: False)",
|
| 113 |
+
)
|
| 114 |
+
return parser.parse_args()
|
| 115 |
+
|
| 116 |
+
|
| 117 |
+
def check_subject_availability(metadata_path, subjects):
|
| 118 |
+
"""Check which subjects have papers available in the metadata.
|
| 119 |
+
|
| 120 |
+
Args:
|
| 121 |
+
metadata_path: Path to the metadata CSV file
|
| 122 |
+
subjects: List of subjects to check
|
| 123 |
+
|
| 124 |
+
Returns:
|
| 125 |
+
List of subjects with available papers
|
| 126 |
+
|
| 127 |
+
"""
|
| 128 |
+
try:
|
| 129 |
+
df_biorxiv = pd.read_csv(metadata_path)
|
| 130 |
+
available_subjects = []
|
| 131 |
+
|
| 132 |
+
for subject in subjects:
|
| 133 |
+
count = len(
|
| 134 |
+
df_biorxiv[(df_biorxiv.published != "NA") & (df_biorxiv.category.str.lower() == subject.lower())]
|
| 135 |
+
)
|
| 136 |
+
if count > 0:
|
| 137 |
+
available_subjects.append((subject, count))
|
| 138 |
+
print(f"Subject '{subject}' has {count} papers available")
|
| 139 |
+
else:
|
| 140 |
+
print(f"Subject '{subject}' has no papers available")
|
| 141 |
+
|
| 142 |
+
return available_subjects
|
| 143 |
+
except Exception as e:
|
| 144 |
+
print(f"Error checking subject availability: {e}")
|
| 145 |
+
return []
|
| 146 |
+
|
| 147 |
+
|
| 148 |
+
def process_subject(subject, args):
|
| 149 |
+
"""Process a single subject by calling the extract_biorxiv_tasks.py script.
|
| 150 |
+
|
| 151 |
+
Args:
|
| 152 |
+
subject: Subject to process
|
| 153 |
+
args: Command line arguments
|
| 154 |
+
|
| 155 |
+
"""
|
| 156 |
+
# Clean subject name for command line
|
| 157 |
+
subject.replace(" ", "\\ ")
|
| 158 |
+
|
| 159 |
+
# Build command
|
| 160 |
+
cmd = [
|
| 161 |
+
"python",
|
| 162 |
+
"BioAgentOS/bioagentos/scripts/extract_biorxiv_tasks.py",
|
| 163 |
+
"--subject",
|
| 164 |
+
f'"{subject}"',
|
| 165 |
+
"--limit",
|
| 166 |
+
str(args.papers_per_subject),
|
| 167 |
+
"--metadata-path",
|
| 168 |
+
args.metadata_path,
|
| 169 |
+
"--model",
|
| 170 |
+
args.model,
|
| 171 |
+
"--max-paper-length",
|
| 172 |
+
str(args.max_paper_length),
|
| 173 |
+
"--chunk-size",
|
| 174 |
+
str(args.chunk_size),
|
| 175 |
+
"--chunk-overlap",
|
| 176 |
+
str(args.chunk_overlap),
|
| 177 |
+
]
|
| 178 |
+
|
| 179 |
+
# Add optional arguments
|
| 180 |
+
if args.save_pdfs:
|
| 181 |
+
cmd.append("--save-pdfs")
|
| 182 |
+
if args.random_sample:
|
| 183 |
+
cmd.append("--random-sample")
|
| 184 |
+
|
| 185 |
+
# Convert command list to string
|
| 186 |
+
cmd_str = " ".join(cmd)
|
| 187 |
+
|
| 188 |
+
print(f"\n{'=' * 80}\nProcessing subject: {subject}\n{'=' * 80}")
|
| 189 |
+
print(f"Running command: {cmd_str}")
|
| 190 |
+
|
| 191 |
+
# Execute command
|
| 192 |
+
try:
|
| 193 |
+
subprocess.run(cmd_str, shell=True, check=True)
|
| 194 |
+
print(f"Successfully processed subject: {subject}")
|
| 195 |
+
except subprocess.CalledProcessError as e:
|
| 196 |
+
print(f"Error processing subject '{subject}': {e}")
|
| 197 |
+
|
| 198 |
+
|
| 199 |
+
def combine_summaries(base_dir, subjects, papers_per_subject):
|
| 200 |
+
"""Combine frequency summaries from all subjects into a single summary.
|
| 201 |
+
|
| 202 |
+
Args:
|
| 203 |
+
base_dir: Base directory containing subject results
|
| 204 |
+
subjects: List of subjects that were processed
|
| 205 |
+
papers_per_subject: Number of papers processed per subject
|
| 206 |
+
|
| 207 |
+
"""
|
| 208 |
+
all_tasks = {}
|
| 209 |
+
all_databases = {}
|
| 210 |
+
all_software = {}
|
| 211 |
+
|
| 212 |
+
for subject, _ in subjects:
|
| 213 |
+
# Clean subject name for directory name
|
| 214 |
+
clean_subject = subject.lower().replace(" ", "_").replace("/", "_")
|
| 215 |
+
subject_dir = f"biorxiv_results_{clean_subject}_{papers_per_subject}"
|
| 216 |
+
summary_path = os.path.join(subject_dir, "frequency_summary.json")
|
| 217 |
+
|
| 218 |
+
try:
|
| 219 |
+
if os.path.exists(summary_path):
|
| 220 |
+
with open(summary_path) as f:
|
| 221 |
+
summary = json.load(f)
|
| 222 |
+
|
| 223 |
+
# Merge tasks
|
| 224 |
+
for task, count in summary.get("tasks", {}).items():
|
| 225 |
+
if task in all_tasks:
|
| 226 |
+
all_tasks[task] += count
|
| 227 |
+
else:
|
| 228 |
+
all_tasks[task] = count
|
| 229 |
+
|
| 230 |
+
# Merge databases
|
| 231 |
+
for db, count in summary.get("databases", {}).items():
|
| 232 |
+
if db in all_databases:
|
| 233 |
+
all_databases[db] += count
|
| 234 |
+
else:
|
| 235 |
+
all_databases[db] = count
|
| 236 |
+
|
| 237 |
+
# Merge software
|
| 238 |
+
for sw, count in summary.get("software", {}).items():
|
| 239 |
+
if sw in all_software:
|
| 240 |
+
all_software[sw] += count
|
| 241 |
+
else:
|
| 242 |
+
all_software[sw] = count
|
| 243 |
+
else:
|
| 244 |
+
print(f"Warning: Summary file not found for subject '{subject}'")
|
| 245 |
+
except Exception as e:
|
| 246 |
+
print(f"Error processing summary for subject '{subject}': {e}")
|
| 247 |
+
|
| 248 |
+
# Sort by frequency (descending)
|
| 249 |
+
all_tasks = dict(sorted(all_tasks.items(), key=lambda item: item[1], reverse=True))
|
| 250 |
+
all_databases = dict(sorted(all_databases.items(), key=lambda item: item[1], reverse=True))
|
| 251 |
+
all_software = dict(sorted(all_software.items(), key=lambda item: item[1], reverse=True))
|
| 252 |
+
|
| 253 |
+
# Create combined summary
|
| 254 |
+
combined_summary = {
|
| 255 |
+
"tasks": all_tasks,
|
| 256 |
+
"databases": all_databases,
|
| 257 |
+
"software": all_software,
|
| 258 |
+
}
|
| 259 |
+
|
| 260 |
+
# Save combined summary
|
| 261 |
+
combined_path = os.path.join(base_dir, "combined_summary.json")
|
| 262 |
+
os.makedirs(base_dir, exist_ok=True)
|
| 263 |
+
|
| 264 |
+
with open(combined_path, "w") as f:
|
| 265 |
+
json.dump(combined_summary, f, indent=2)
|
| 266 |
+
|
| 267 |
+
print(f"Combined summary saved to {combined_path}")
|
| 268 |
+
|
| 269 |
+
# Create CSV files for each category
|
| 270 |
+
tasks_df = pd.DataFrame(list(all_tasks.items()), columns=["Task", "Frequency"])
|
| 271 |
+
tasks_df.to_csv(os.path.join(base_dir, "tasks_frequency.csv"), index=False)
|
| 272 |
+
|
| 273 |
+
db_df = pd.DataFrame(list(all_databases.items()), columns=["Database", "Frequency"])
|
| 274 |
+
db_df.to_csv(os.path.join(base_dir, "databases_frequency.csv"), index=False)
|
| 275 |
+
|
| 276 |
+
sw_df = pd.DataFrame(list(all_software.items()), columns=["Software", "Frequency"])
|
| 277 |
+
sw_df.to_csv(os.path.join(base_dir, "software_frequency.csv"), index=False)
|
| 278 |
+
|
| 279 |
+
print(f"CSV summaries saved to {base_dir}")
|
| 280 |
+
|
| 281 |
+
|
| 282 |
+
def main():
|
| 283 |
+
"""Main function to run the script."""
|
| 284 |
+
args = parse_arguments()
|
| 285 |
+
|
| 286 |
+
# Determine which subjects to process
|
| 287 |
+
subjects_to_process = args.subjects if args.subjects else BIORXIV_SUBJECTS
|
| 288 |
+
|
| 289 |
+
# Check which subjects have papers available
|
| 290 |
+
available_subjects = check_subject_availability(args.metadata_path, subjects_to_process)
|
| 291 |
+
|
| 292 |
+
if not available_subjects:
|
| 293 |
+
print("No subjects with available papers found. Exiting.")
|
| 294 |
+
return
|
| 295 |
+
|
| 296 |
+
if not args.summary_only:
|
| 297 |
+
# Process each subject
|
| 298 |
+
for subject, _count in tqdm(available_subjects, desc="Processing subjects"):
|
| 299 |
+
process_subject(subject, args)
|
| 300 |
+
|
| 301 |
+
# Add delay between subjects to avoid rate limiting
|
| 302 |
+
if args.delay > 0:
|
| 303 |
+
print(f"Waiting {args.delay} seconds before processing the next subject...")
|
| 304 |
+
time.sleep(args.delay)
|
| 305 |
+
|
| 306 |
+
# Combine summaries from all subjects
|
| 307 |
+
combine_summaries(args.output_dir, available_subjects, args.papers_per_subject)
|
| 308 |
+
|
| 309 |
+
print("All subjects processed successfully!")
|
| 310 |
+
|
| 311 |
+
|
| 312 |
+
if __name__ == "__main__":
|
| 313 |
+
import json # Import here to avoid circular import with the main script
|
| 314 |
+
|
| 315 |
+
main()
|
BioScientist/agent_system/engines/v1_executor_backup/know_how/__init__.py
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""Know-How library for Biomni agent.
|
| 2 |
+
|
| 3 |
+
This module provides functionality to load and manage know-how documents
|
| 4 |
+
that contain best practices, protocols, and troubleshooting guides.
|
| 5 |
+
"""
|
| 6 |
+
|
| 7 |
+
from .loader import KnowHowLoader
|
| 8 |
+
|
| 9 |
+
__all__ = ["KnowHowLoader"]
|
BioScientist/agent_system/engines/v1_executor_backup/know_how/__pycache__/__init__.cpython-311.pyc
ADDED
|
Binary file (450 Bytes). View file
|
|
|
BioScientist/agent_system/engines/v1_executor_backup/know_how/__pycache__/loader.cpython-311.pyc
ADDED
|
Binary file (14 kB). View file
|
|
|
BioScientist/agent_system/engines/v1_executor_backup/know_how/loader.py
ADDED
|
@@ -0,0 +1,348 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""Loader for know-how documents."""
|
| 2 |
+
|
| 3 |
+
import glob
|
| 4 |
+
import os
|
| 5 |
+
from pathlib import Path
|
| 6 |
+
|
| 7 |
+
|
| 8 |
+
class KnowHowLoader:
|
| 9 |
+
"""Load and manage know-how documents for the agent."""
|
| 10 |
+
|
| 11 |
+
def __init__(self, know_how_dir: str | None = None):
|
| 12 |
+
"""Initialize the know-how loader.
|
| 13 |
+
|
| 14 |
+
Args:
|
| 15 |
+
know_how_dir: Directory containing know-how documents.
|
| 16 |
+
If None, uses the default know_how directory.
|
| 17 |
+
|
| 18 |
+
"""
|
| 19 |
+
if know_how_dir is None:
|
| 20 |
+
# Default to the know_how directory in the package
|
| 21 |
+
current_dir = Path(__file__).parent
|
| 22 |
+
know_how_dir = str(current_dir)
|
| 23 |
+
|
| 24 |
+
self.know_how_dir = know_how_dir
|
| 25 |
+
self.documents = {}
|
| 26 |
+
self._load_documents()
|
| 27 |
+
|
| 28 |
+
def _load_documents(self):
|
| 29 |
+
"""Load all markdown documents from the know-how directory."""
|
| 30 |
+
pattern = os.path.join(self.know_how_dir, "*.md")
|
| 31 |
+
md_files = glob.glob(pattern)
|
| 32 |
+
|
| 33 |
+
for filepath in md_files:
|
| 34 |
+
filename = os.path.basename(filepath)
|
| 35 |
+
filename_without_ext = os.path.splitext(filename)[0]
|
| 36 |
+
|
| 37 |
+
# Skip README, QUICK_START, and other meta documentation (all caps filenames)
|
| 38 |
+
if filename.upper() in ["README.MD", "QUICK_START.MD"] or filename_without_ext.isupper():
|
| 39 |
+
continue
|
| 40 |
+
|
| 41 |
+
# Read the document
|
| 42 |
+
with open(filepath) as f:
|
| 43 |
+
content = f.read()
|
| 44 |
+
|
| 45 |
+
# Extract title, description, and metadata from the document
|
| 46 |
+
title, description, metadata = self._extract_metadata(content, filename)
|
| 47 |
+
|
| 48 |
+
# Use short_description from metadata if available, otherwise fall back to extracted description
|
| 49 |
+
if "short_description" in metadata and metadata["short_description"]:
|
| 50 |
+
description = metadata["short_description"]
|
| 51 |
+
|
| 52 |
+
# Store document info
|
| 53 |
+
doc_id = os.path.splitext(filename)[0]
|
| 54 |
+
self.documents[doc_id] = {
|
| 55 |
+
"id": doc_id,
|
| 56 |
+
"name": title,
|
| 57 |
+
"description": description,
|
| 58 |
+
"content": content,
|
| 59 |
+
"content_without_metadata": self._strip_metadata(content),
|
| 60 |
+
"filepath": filepath,
|
| 61 |
+
"metadata": metadata,
|
| 62 |
+
}
|
| 63 |
+
|
| 64 |
+
def _extract_metadata(self, content: str, filename: str) -> tuple[str, str, dict]:
|
| 65 |
+
"""Extract title, description, and metadata from markdown content.
|
| 66 |
+
|
| 67 |
+
Args:
|
| 68 |
+
content: Markdown content
|
| 69 |
+
filename: Filename (used as fallback for title)
|
| 70 |
+
|
| 71 |
+
Returns:
|
| 72 |
+
Tuple of (title, description, metadata_dict)
|
| 73 |
+
|
| 74 |
+
"""
|
| 75 |
+
lines = content.split("\n")
|
| 76 |
+
|
| 77 |
+
# Extract title (first h1)
|
| 78 |
+
title = None
|
| 79 |
+
for line in lines:
|
| 80 |
+
if line.startswith("# "):
|
| 81 |
+
title = line[2:].strip()
|
| 82 |
+
break
|
| 83 |
+
|
| 84 |
+
if title is None:
|
| 85 |
+
# Fallback to filename
|
| 86 |
+
title = filename.replace("_", " ").replace(".md", "").title()
|
| 87 |
+
|
| 88 |
+
# Extract metadata section
|
| 89 |
+
metadata = {}
|
| 90 |
+
in_metadata = False
|
| 91 |
+
current_field = None
|
| 92 |
+
|
| 93 |
+
for _i, line in enumerate(lines):
|
| 94 |
+
if line.startswith("## Metadata"):
|
| 95 |
+
in_metadata = True
|
| 96 |
+
continue
|
| 97 |
+
elif in_metadata:
|
| 98 |
+
if line.startswith("##") and "Metadata" not in line:
|
| 99 |
+
# End of metadata section
|
| 100 |
+
break
|
| 101 |
+
elif line.startswith("**") and "**:" in line:
|
| 102 |
+
# New metadata field (e.g., **Authors**:)
|
| 103 |
+
field_match = line.split("**")[1]
|
| 104 |
+
current_field = field_match.lower().replace(" ", "_")
|
| 105 |
+
# Get the value after the colon if it exists on the same line
|
| 106 |
+
colon_idx = line.find("**:")
|
| 107 |
+
if colon_idx != -1:
|
| 108 |
+
value_part = line[colon_idx + 3 :].strip()
|
| 109 |
+
if value_part:
|
| 110 |
+
metadata[current_field] = value_part
|
| 111 |
+
else:
|
| 112 |
+
metadata[current_field] = ""
|
| 113 |
+
elif current_field and line.strip() and not line.startswith("---"):
|
| 114 |
+
# Continuation of current field
|
| 115 |
+
if current_field not in metadata:
|
| 116 |
+
metadata[current_field] = ""
|
| 117 |
+
if line.startswith("- "):
|
| 118 |
+
# List item
|
| 119 |
+
if metadata[current_field]:
|
| 120 |
+
metadata[current_field] += ", " + line[2:].strip()
|
| 121 |
+
else:
|
| 122 |
+
metadata[current_field] = line[2:].strip()
|
| 123 |
+
elif not line.startswith("```"):
|
| 124 |
+
# Regular text
|
| 125 |
+
if metadata[current_field]:
|
| 126 |
+
metadata[current_field] += " " + line.strip()
|
| 127 |
+
else:
|
| 128 |
+
metadata[current_field] = line.strip()
|
| 129 |
+
|
| 130 |
+
# Extract description (content under ## Overview or first paragraph)
|
| 131 |
+
description = ""
|
| 132 |
+
in_overview = False
|
| 133 |
+
overview_lines = []
|
| 134 |
+
|
| 135 |
+
for _i, line in enumerate(lines):
|
| 136 |
+
if line.startswith("## Overview"):
|
| 137 |
+
in_overview = True
|
| 138 |
+
continue
|
| 139 |
+
elif in_overview:
|
| 140 |
+
if line.startswith("##"):
|
| 141 |
+
# End of overview section
|
| 142 |
+
break
|
| 143 |
+
elif line.strip():
|
| 144 |
+
overview_lines.append(line.strip())
|
| 145 |
+
|
| 146 |
+
if overview_lines:
|
| 147 |
+
description = " ".join(overview_lines)
|
| 148 |
+
else:
|
| 149 |
+
# Fallback: get first non-empty paragraph after title
|
| 150 |
+
found_title = False
|
| 151 |
+
for line in lines:
|
| 152 |
+
if line.startswith("# "):
|
| 153 |
+
found_title = True
|
| 154 |
+
continue
|
| 155 |
+
if found_title and line.strip() and not line.startswith("#"):
|
| 156 |
+
description = line.strip()
|
| 157 |
+
break
|
| 158 |
+
|
| 159 |
+
# Limit description length
|
| 160 |
+
if len(description) > 200:
|
| 161 |
+
description = description[:197] + "..."
|
| 162 |
+
|
| 163 |
+
return title, description, metadata
|
| 164 |
+
|
| 165 |
+
def _strip_metadata(self, content: str) -> str:
|
| 166 |
+
"""Strip the metadata section from document content.
|
| 167 |
+
|
| 168 |
+
Args:
|
| 169 |
+
content: Full document content with metadata
|
| 170 |
+
|
| 171 |
+
Returns:
|
| 172 |
+
Content without metadata section
|
| 173 |
+
|
| 174 |
+
"""
|
| 175 |
+
lines = content.split("\n")
|
| 176 |
+
result_lines = []
|
| 177 |
+
in_metadata = False
|
| 178 |
+
skip_until_separator = False
|
| 179 |
+
found_first_h1 = False
|
| 180 |
+
|
| 181 |
+
for line in lines:
|
| 182 |
+
# Track first H1 (title)
|
| 183 |
+
if line.startswith("# ") and not found_first_h1:
|
| 184 |
+
result_lines.append(line)
|
| 185 |
+
found_first_h1 = True
|
| 186 |
+
continue
|
| 187 |
+
|
| 188 |
+
# Detect metadata section start
|
| 189 |
+
if line.startswith("## Metadata"):
|
| 190 |
+
in_metadata = True
|
| 191 |
+
continue
|
| 192 |
+
|
| 193 |
+
# Skip separator lines before and after metadata
|
| 194 |
+
if line.strip() == "---":
|
| 195 |
+
if not in_metadata:
|
| 196 |
+
# This might be the separator before metadata
|
| 197 |
+
skip_until_separator = True
|
| 198 |
+
continue
|
| 199 |
+
else:
|
| 200 |
+
# This is the separator after metadata
|
| 201 |
+
in_metadata = False
|
| 202 |
+
skip_until_separator = False
|
| 203 |
+
continue
|
| 204 |
+
|
| 205 |
+
# Skip lines in metadata section
|
| 206 |
+
if in_metadata or skip_until_separator:
|
| 207 |
+
# Check if we hit another H2 (end of metadata)
|
| 208 |
+
if line.startswith("##") and "Metadata" not in line:
|
| 209 |
+
in_metadata = False
|
| 210 |
+
skip_until_separator = False
|
| 211 |
+
result_lines.append(line)
|
| 212 |
+
continue
|
| 213 |
+
|
| 214 |
+
# Keep all other lines
|
| 215 |
+
result_lines.append(line)
|
| 216 |
+
|
| 217 |
+
# Join and clean up extra blank lines
|
| 218 |
+
result = "\n".join(result_lines)
|
| 219 |
+
|
| 220 |
+
# Remove excessive blank lines (more than 2 consecutive)
|
| 221 |
+
while "\n\n\n\n" in result:
|
| 222 |
+
result = result.replace("\n\n\n\n", "\n\n\n")
|
| 223 |
+
|
| 224 |
+
return result.strip()
|
| 225 |
+
|
| 226 |
+
def get_all_documents(self) -> list[dict]:
|
| 227 |
+
"""Get all know-how documents as a list.
|
| 228 |
+
|
| 229 |
+
Returns:
|
| 230 |
+
List of document dictionaries with keys: id, name, description, content
|
| 231 |
+
|
| 232 |
+
"""
|
| 233 |
+
return list(self.documents.values())
|
| 234 |
+
|
| 235 |
+
def get_document_by_id(self, doc_id: str) -> dict | None:
|
| 236 |
+
"""Get a specific know-how document by ID.
|
| 237 |
+
|
| 238 |
+
Args:
|
| 239 |
+
doc_id: Document identifier
|
| 240 |
+
|
| 241 |
+
Returns:
|
| 242 |
+
Document dictionary or None if not found
|
| 243 |
+
|
| 244 |
+
"""
|
| 245 |
+
return self.documents.get(doc_id)
|
| 246 |
+
|
| 247 |
+
def get_document_summaries(self) -> list[dict]:
|
| 248 |
+
"""Get summaries of all documents (without full content).
|
| 249 |
+
|
| 250 |
+
Returns:
|
| 251 |
+
List of document summaries with keys: id, name, description
|
| 252 |
+
|
| 253 |
+
"""
|
| 254 |
+
return [
|
| 255 |
+
{"id": doc["id"], "name": doc["name"], "description": doc["description"]} for doc in self.documents.values()
|
| 256 |
+
]
|
| 257 |
+
|
| 258 |
+
def add_custom_document(self, doc_id: str, name: str, description: str, content: str, metadata: dict | None = None):
|
| 259 |
+
"""Add a custom know-how document programmatically.
|
| 260 |
+
|
| 261 |
+
Args:
|
| 262 |
+
doc_id: Unique identifier for the document
|
| 263 |
+
name: Document title
|
| 264 |
+
description: Brief description
|
| 265 |
+
content: Full document content
|
| 266 |
+
metadata: Optional metadata dictionary (authors, license, etc.)
|
| 267 |
+
|
| 268 |
+
"""
|
| 269 |
+
if metadata is None:
|
| 270 |
+
metadata = {}
|
| 271 |
+
|
| 272 |
+
self.documents[doc_id] = {
|
| 273 |
+
"id": doc_id,
|
| 274 |
+
"name": name,
|
| 275 |
+
"description": description,
|
| 276 |
+
"content": content,
|
| 277 |
+
"filepath": None,
|
| 278 |
+
"metadata": metadata,
|
| 279 |
+
}
|
| 280 |
+
|
| 281 |
+
def get_document_metadata(self, doc_id: str) -> dict | None:
|
| 282 |
+
"""Get metadata for a specific document.
|
| 283 |
+
|
| 284 |
+
Args:
|
| 285 |
+
doc_id: Document identifier
|
| 286 |
+
|
| 287 |
+
Returns:
|
| 288 |
+
Metadata dictionary or None if not found
|
| 289 |
+
|
| 290 |
+
"""
|
| 291 |
+
doc = self.documents.get(doc_id)
|
| 292 |
+
return doc.get("metadata", {}) if doc else None
|
| 293 |
+
|
| 294 |
+
def print_document_info(self, doc_id: str):
|
| 295 |
+
"""Print formatted information about a document including metadata.
|
| 296 |
+
|
| 297 |
+
Args:
|
| 298 |
+
doc_id: Document identifier
|
| 299 |
+
|
| 300 |
+
"""
|
| 301 |
+
doc = self.documents.get(doc_id)
|
| 302 |
+
if not doc:
|
| 303 |
+
print(f"Document '{doc_id}' not found")
|
| 304 |
+
return
|
| 305 |
+
|
| 306 |
+
print("=" * 70)
|
| 307 |
+
print(f"📚 {doc['name']}")
|
| 308 |
+
print("=" * 70)
|
| 309 |
+
print(f"\nDescription: {doc['description']}")
|
| 310 |
+
|
| 311 |
+
metadata = doc.get("metadata", {})
|
| 312 |
+
if metadata:
|
| 313 |
+
print("\n" + "-" * 70)
|
| 314 |
+
print("METADATA")
|
| 315 |
+
print("-" * 70)
|
| 316 |
+
|
| 317 |
+
# Display key metadata fields
|
| 318 |
+
if "authors" in metadata:
|
| 319 |
+
print(f"Authors: {metadata['authors']}")
|
| 320 |
+
if "affiliations" in metadata:
|
| 321 |
+
print(f"Affiliations: {metadata['affiliations']}")
|
| 322 |
+
if "version" in metadata:
|
| 323 |
+
print(f"Version: {metadata['version']}")
|
| 324 |
+
if "last_updated" in metadata:
|
| 325 |
+
print(f"Last Updated: {metadata['last_updated']}")
|
| 326 |
+
if "license" in metadata:
|
| 327 |
+
print(f"License: {metadata['license']}")
|
| 328 |
+
if "commercial_use" in metadata:
|
| 329 |
+
print(f"Commercial Use: {metadata['commercial_use']}")
|
| 330 |
+
if "status" in metadata:
|
| 331 |
+
print(f"Status: {metadata['status']}")
|
| 332 |
+
|
| 333 |
+
print("=" * 70)
|
| 334 |
+
|
| 335 |
+
def remove_document(self, doc_id: str):
|
| 336 |
+
"""Remove a know-how document.
|
| 337 |
+
|
| 338 |
+
Args:
|
| 339 |
+
doc_id: Document identifier
|
| 340 |
+
|
| 341 |
+
"""
|
| 342 |
+
if doc_id in self.documents:
|
| 343 |
+
del self.documents[doc_id]
|
| 344 |
+
|
| 345 |
+
def reload(self):
|
| 346 |
+
"""Reload all documents from disk."""
|
| 347 |
+
self.documents = {}
|
| 348 |
+
self._load_documents()
|
BioScientist/agent_system/engines/v1_executor_backup/know_how/resource/CRISPick_download_links.txt
ADDED
|
@@ -0,0 +1,238 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_8030_ICSASG_v2_SpyoCas9_CRISPRa_RS3seq-Chen2013_NCBI_20230421.txt.gz
|
| 2 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_8030_ICSASG_v2_SpyoCas9_CRISPRa_RS3seq-Chen2013_NCBI_20230421.summary.txt
|
| 3 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_8030_ICSASG_v2_SpyoCas9_CRISPRko_RS3seq-Chen2013+RS3target_NCBI_20230421.txt.gz
|
| 4 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_8030_ICSASG_v2_SpyoCas9_CRISPRko_RS3seq-Chen2013+RS3target_NCBI_20230421.summary.txt
|
| 5 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_10029_CHOK1GS_HDv1_SaurCas9_CRISPRa_Azimuth_2.0_Ensembl_20241114.txt.gz
|
| 6 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_10029_CHOK1GS_HDv1_SaurCas9_CRISPRa_Azimuth_2.0_Ensembl_20241114.summary.txt
|
| 7 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_10029_CHOK1GS_HDv1_SaurCas9_CRISPRi_Azimuth_2.0_Ensembl_20241114.txt.gz
|
| 8 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_10029_CHOK1GS_HDv1_SaurCas9_CRISPRi_Azimuth_2.0_Ensembl_20241114.summary.txt
|
| 9 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_10029_CHOK1GS_HDv1_SaurCas9_CRISPRko_Azimuth_2.0_Ensembl_20241114.txt.gz
|
| 10 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_10029_CHOK1GS_HDv1_SaurCas9_CRISPRko_Azimuth_2.0_Ensembl_20241114.summary.txt
|
| 11 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_10029_CHOK1GS_HDv1_SpyoCas9_CRISPRa_RS3seq-Chen2013_Ensembl_20241114.txt.gz
|
| 12 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_10029_CHOK1GS_HDv1_SpyoCas9_CRISPRa_RS3seq-Chen2013_Ensembl_20241114.summary.txt
|
| 13 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_10029_CHOK1GS_HDv1_SpyoCas9_CRISPRko_RS3seq-Chen2013+RS3target_Ensembl_20241114.txt.gz
|
| 14 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_10029_CHOK1GS_HDv1_SpyoCas9_CRISPRko_RS3seq-Chen2013+RS3target_Ensembl_20241114.summary.txt
|
| 15 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_74940_Otsh_v1.0_SpyoCas9_CRISPRa_RS3seq-Chen2013_NCBI_20230424.txt.gz
|
| 16 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_74940_Otsh_v1.0_SpyoCas9_CRISPRa_RS3seq-Chen2013_NCBI_20230424.summary.txt
|
| 17 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_74940_Otsh_v1.0_SpyoCas9_CRISPRko_RS3seq-Chen2013+RS3target_NCBI_20230424.txt.gz
|
| 18 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_74940_Otsh_v1.0_SpyoCas9_CRISPRko_RS3seq-Chen2013+RS3target_NCBI_20230424.summary.txt
|
| 19 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_9913_ARS-UCD1.2_SpyoCas9_CRISPRa_RS3seq-Chen2013_NCBI_20230418.txt.gz
|
| 20 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_9913_ARS-UCD1.2_SpyoCas9_CRISPRa_RS3seq-Chen2013_NCBI_20230418.summary.txt
|
| 21 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_9913_ARS-UCD1.2_SpyoCas9_CRISPRko_RS3seq-Chen2013+RS3target_NCBI_20230418.txt.gz
|
| 22 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_9913_ARS-UCD1.2_SpyoCas9_CRISPRko_RS3seq-Chen2013+RS3target_NCBI_20230418.summary.txt
|
| 23 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_9615_CanFam3.1_SpyoCas9_CRISPRa_RS3seq-Chen2013_NCBI_20220923.txt.gz
|
| 24 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_9615_CanFam3.1_SpyoCas9_CRISPRa_RS3seq-Chen2013_NCBI_20220923.summary.txt
|
| 25 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_9615_CanFam3.1_SpyoCas9_CRISPRko_RS3seq-Chen2013+RS3target_NCBI_20220923.txt.gz
|
| 26 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_9615_CanFam3.1_SpyoCas9_CRISPRko_RS3seq-Chen2013+RS3target_NCBI_20220923.summary.txt
|
| 27 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_9615_ROS_Cfam_1.0_AsCas12a_CRISPRa_Seq-DeepCpf1_Ensembl_20251031.txt.gz
|
| 28 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_9615_ROS_Cfam_1.0_AsCas12a_CRISPRa_Seq-DeepCpf1_Ensembl_20251031.summary.txt
|
| 29 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_9615_ROS_Cfam_1.0_AsCas12a_CRISPRa_Seq-DeepCpf1_NCBI_20240611.txt.gz
|
| 30 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_9615_ROS_Cfam_1.0_AsCas12a_CRISPRa_Seq-DeepCpf1_NCBI_20240611.summary.txt
|
| 31 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_9615_ROS_Cfam_1.0_AsCas12a_CRISPRi_Seq-DeepCpf1_Ensembl_20251031.txt.gz
|
| 32 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_9615_ROS_Cfam_1.0_AsCas12a_CRISPRi_Seq-DeepCpf1_Ensembl_20251031.summary.txt
|
| 33 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_9615_ROS_Cfam_1.0_AsCas12a_CRISPRi_Seq-DeepCpf1_NCBI_20240611.txt.gz
|
| 34 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_9615_ROS_Cfam_1.0_AsCas12a_CRISPRi_Seq-DeepCpf1_NCBI_20240611.summary.txt
|
| 35 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_9615_ROS_Cfam_1.0_AsCas12a_CRISPRko_Seq-DeepCpf1_Ensembl_20251031.txt.gz
|
| 36 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_9615_ROS_Cfam_1.0_AsCas12a_CRISPRko_Seq-DeepCpf1_Ensembl_20251031.summary.txt
|
| 37 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_9615_ROS_Cfam_1.0_AsCas12a_CRISPRko_Seq-DeepCpf1_NCBI_20240611.txt.gz
|
| 38 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_9615_ROS_Cfam_1.0_AsCas12a_CRISPRko_Seq-DeepCpf1_NCBI_20240611.summary.txt
|
| 39 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_9615_ROS_Cfam_1.0_enAsCas12a_CRISPRa_enPAM+GB_Ensembl_20241031.txt.gz
|
| 40 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_9615_ROS_Cfam_1.0_enAsCas12a_CRISPRa_enPAM+GB_Ensembl_20241031.summary.txt
|
| 41 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_9615_ROS_Cfam_1.0_enAsCas12a_CRISPRa_enPAM+GB_NCBI_20240611.txt.gz
|
| 42 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_9615_ROS_Cfam_1.0_enAsCas12a_CRISPRa_enPAM+GB_NCBI_20240611.summary.txt
|
| 43 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_9615_ROS_Cfam_1.0_enAsCas12a_CRISPRi_enPAM+GB_Ensembl_20241031.txt.gz
|
| 44 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_9615_ROS_Cfam_1.0_enAsCas12a_CRISPRi_enPAM+GB_Ensembl_20241031.summary.txt
|
| 45 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_9615_ROS_Cfam_1.0_enAsCas12a_CRISPRi_enPAM+GB_NCBI_20240611.txt.gz
|
| 46 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_9615_ROS_Cfam_1.0_enAsCas12a_CRISPRi_enPAM+GB_NCBI_20240611.summary.txt
|
| 47 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_9615_ROS_Cfam_1.0_enAsCas12a_CRISPRko_enPAM+GB_Ensembl_20251031.txt.gz
|
| 48 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_9615_ROS_Cfam_1.0_enAsCas12a_CRISPRko_enPAM+GB_Ensembl_20251031.summary.txt
|
| 49 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_9615_ROS_Cfam_1.0_enAsCas12a_CRISPRko_enPAM+GB_NCBI_20240611.txt.gz
|
| 50 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_9615_ROS_Cfam_1.0_enAsCas12a_CRISPRko_enPAM+GB_NCBI_20240611.summary.txt
|
| 51 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_9615_ROS_Cfam_1.0_SpyoCas9_CRISPRa_RS3seq-Chen2013_Ensembl_20251031.txt.gz
|
| 52 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_9615_ROS_Cfam_1.0_SpyoCas9_CRISPRa_RS3seq-Chen2013_Ensembl_20251031.summary.txt
|
| 53 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_9615_ROS_Cfam_1.0_SpyoCas9_CRISPRa_RS3seq-Chen2013_NCBI_20240611.txt.gz
|
| 54 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_9615_ROS_Cfam_1.0_SpyoCas9_CRISPRa_RS3seq-Chen2013_NCBI_20240611.summary.txt
|
| 55 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_9615_ROS_Cfam_1.0_SpyoCas9_CRISPRi_RS3i-Chen2013_Ensembl_20251031.txt.gz
|
| 56 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_9615_ROS_Cfam_1.0_SpyoCas9_CRISPRi_RS3i-Chen2013_Ensembl_20251031.summary.txt
|
| 57 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_9615_ROS_Cfam_1.0_SpyoCas9_CRISPRko_RS3seq-Chen2013+RS3target_Ensembl_20241031.txt.gz
|
| 58 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_9615_ROS_Cfam_1.0_SpyoCas9_CRISPRko_RS3seq-Chen2013+RS3target_Ensembl_20241031.summary.txt
|
| 59 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_9615_ROS_Cfam_1.0_SpyoCas9_CRISPRko_RS3seq-Chen2013+RS3target_NCBI_20240611.txt.gz
|
| 60 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_9615_ROS_Cfam_1.0_SpyoCas9_CRISPRko_RS3seq-Chen2013+RS3target_NCBI_20240611.summary.txt
|
| 61 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_7227_BDGP6.32_SpyoCas9_CRISPRa_RS3seq-Chen2013_Ensembl_20230407.txt.gz
|
| 62 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_7227_BDGP6.32_SpyoCas9_CRISPRa_RS3seq-Chen2013_Ensembl_20230407.summary.txt
|
| 63 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_7227_BDGP6.32_SpyoCas9_CRISPRko_RS3seq-Chen2013+RS3target_Ensembl_20230407.txt.gz
|
| 64 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_7227_BDGP6.32_SpyoCas9_CRISPRko_RS3seq-Chen2013+RS3target_Ensembl_20230407.summary.txt
|
| 65 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_59479_mRhiFer1_v1.p_SpyoCas9_CRISPRa_RS3seq-Chen2013_NCBI_20230427.txt.gz
|
| 66 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_59479_mRhiFer1_v1.p_SpyoCas9_CRISPRa_RS3seq-Chen2013_NCBI_20230427.summary.txt
|
| 67 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_59479_mRhiFer1_v1.p_SpyoCas9_CRISPRko_RS3seq-Chen2013+RS3target_NCBI_20230427.txt.gz
|
| 68 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_59479_mRhiFer1_v1.p_SpyoCas9_CRISPRko_RS3seq-Chen2013+RS3target_NCBI_20230427.summary.txt
|
| 69 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_60711_Chlorocebus_sabeus_1.1_AsCas12a_CRISPRa_Seq-DeepCpf1_NCBI_20220914.txt.gz
|
| 70 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_60711_Chlorocebus_sabeus_1.1_AsCas12a_CRISPRa_Seq-DeepCpf1_NCBI_20220914.summary.txt
|
| 71 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_60711_Chlorocebus_sabeus_1.1_AsCas12a_CRISPRi_Seq-DeepCpf1_NCBI_20220914.txt.gz
|
| 72 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_60711_Chlorocebus_sabeus_1.1_AsCas12a_CRISPRi_Seq-DeepCpf1_NCBI_20220914.summary.txt
|
| 73 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_60711_Chlorocebus_sabeus_1.1_AsCas12a_CRISPRko_Seq-DeepCpf1_NCBI_20220914.txt.gz
|
| 74 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_60711_Chlorocebus_sabeus_1.1_AsCas12a_CRISPRko_Seq-DeepCpf1_NCBI_20220914.summary.txt
|
| 75 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_60711_Chlorocebus_sabeus_1.1_enAsCas12a_CRISPRa_enPAM+GB_NCBI_20220914.txt.gz
|
| 76 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_60711_Chlorocebus_sabeus_1.1_enAsCas12a_CRISPRa_enPAM+GB_NCBI_20220914.summary.txt
|
| 77 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_60711_Chlorocebus_sabeus_1.1_enAsCas12a_CRISPRi_enPAM+GB_NCBI_20220914.txt.gz
|
| 78 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_60711_Chlorocebus_sabeus_1.1_enAsCas12a_CRISPRi_enPAM+GB_NCBI_20220914.summary.txt
|
| 79 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_60711_Chlorocebus_sabeus_1.1_enAsCas12a_CRISPRko_enPAM+GB_NCBI_20220914.txt.gz
|
| 80 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_60711_Chlorocebus_sabeus_1.1_enAsCas12a_CRISPRko_enPAM+GB_NCBI_20220914.summary.txt
|
| 81 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_60711_Chlorocebus_sabeus_1.1_SpyoCas9_CRISPRa_RS3seq-Chen2013_NCBI_20220914.txt.gz
|
| 82 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_60711_Chlorocebus_sabeus_1.1_SpyoCas9_CRISPRa_RS3seq-Chen2013_NCBI_20220914.summary.txt
|
| 83 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_60711_Chlorocebus_sabeus_1.1_SpyoCas9_CRISPRko_RS3seq-Chen2013+RS3target_NCBI_20220914.txt.gz
|
| 84 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_60711_Chlorocebus_sabeus_1.1_SpyoCas9_CRISPRko_RS3seq-Chen2013+RS3target_NCBI_20220914.summary.txt
|
| 85 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_9606_GRCh37_SaurCas9_CRISPRa_Azimuth_2.0_NCBI_20241107.txt.gz
|
| 86 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_9606_GRCh37_SaurCas9_CRISPRa_Azimuth_2.0_NCBI_20241107.summary.txt
|
| 87 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_9606_GRCh37_SaurCas9_CRISPRi_Azimuth_2.0_NCBI_20241107.txt.gz
|
| 88 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_9606_GRCh37_SaurCas9_CRISPRi_Azimuth_2.0_NCBI_20241107.summary.txt
|
| 89 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_9606_GRCh37_SaurCas9_CRISPRko_Azimuth_2.0_NCBI_20241107.txt.gz
|
| 90 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_9606_GRCh37_SaurCas9_CRISPRko_Azimuth_2.0_NCBI_20241107.summary.txt
|
| 91 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_9606_GRCh37_SpyoCas9_CRISPRa_RS3seq-Chen2013_NCBI_20241107.txt.gz
|
| 92 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_9606_GRCh37_SpyoCas9_CRISPRa_RS3seq-Chen2013_NCBI_20241107.summary.txt
|
| 93 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_9606_GRCh37_SpyoCas9_CRISPRko_RS3seq-Chen2013+RS3target_NCBI_20241107.txt.gz
|
| 94 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_9606_GRCh37_SpyoCas9_CRISPRko_RS3seq-Chen2013+RS3target_NCBI_20241107.summary.txt
|
| 95 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_9606_GRCh38_AsCas12a_CRISPRa_Seq-DeepCpf1_Ensembl_20250806.txt.gz
|
| 96 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_9606_GRCh38_AsCas12a_CRISPRa_Seq-DeepCpf1_Ensembl_20250806.summary.txt
|
| 97 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_9606_GRCh38_AsCas12a_CRISPRa_Seq-DeepCpf1_NCBI_20250718.txt.gz
|
| 98 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_9606_GRCh38_AsCas12a_CRISPRa_Seq-DeepCpf1_NCBI_20250718.summary.txt
|
| 99 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_9606_GRCh38_AsCas12a_CRISPRi_Seq-DeepCpf1_Ensembl_20250806.txt.gz
|
| 100 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_9606_GRCh38_AsCas12a_CRISPRi_Seq-DeepCpf1_Ensembl_20250806.summary.txt
|
| 101 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_9606_GRCh38_AsCas12a_CRISPRi_Seq-DeepCpf1_NCBI_20250718.txt.gz
|
| 102 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_9606_GRCh38_AsCas12a_CRISPRi_Seq-DeepCpf1_NCBI_20250718.summary.txt
|
| 103 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_9606_GRCh38_AsCas12a_CRISPRko_Seq-DeepCpf1_Ensembl_20250806.txt.gz
|
| 104 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_9606_GRCh38_AsCas12a_CRISPRko_Seq-DeepCpf1_Ensembl_20250806.summary.txt
|
| 105 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_9606_GRCh38_AsCas12a_CRISPRko_Seq-DeepCpf1_NCBI_20250718.txt.gz
|
| 106 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_9606_GRCh38_AsCas12a_CRISPRko_Seq-DeepCpf1_NCBI_20250718.summary.txt
|
| 107 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_9606_GRCh38_enAsCas12a_CRISPRa_enPAM+GB_Ensembl_20250806.txt.gz
|
| 108 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_9606_GRCh38_enAsCas12a_CRISPRa_enPAM+GB_Ensembl_20250806.summary.txt
|
| 109 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_9606_GRCh38_enAsCas12a_CRISPRa_enPAM+GB_NCBI_20250718.txt.gz
|
| 110 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_9606_GRCh38_enAsCas12a_CRISPRa_enPAM+GB_NCBI_20250718.summary.txt
|
| 111 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_9606_GRCh38_enAsCas12a_CRISPRi_enPAM+GB_Ensembl_20250806.txt.gz
|
| 112 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_9606_GRCh38_enAsCas12a_CRISPRi_enPAM+GB_Ensembl_20250806.summary.txt
|
| 113 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_9606_GRCh38_enAsCas12a_CRISPRi_enPAM+GB_NCBI_20250718.txt.gz
|
| 114 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_9606_GRCh38_enAsCas12a_CRISPRi_enPAM+GB_NCBI_20250718.summary.txt
|
| 115 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_9606_GRCh38_enAsCas12a_CRISPRko_enPAM+GB_Ensembl_20250806.txt.gz
|
| 116 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_9606_GRCh38_enAsCas12a_CRISPRko_enPAM+GB_Ensembl_20250806.summary.txt
|
| 117 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_9606_GRCh38_enAsCas12a_CRISPRko_enPAM+GB_NCBI_20250718.txt.gz
|
| 118 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_9606_GRCh38_enAsCas12a_CRISPRko_enPAM+GB_NCBI_20250718.summary.txt
|
| 119 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_9606_GRCh38_SaurCas9_CRISPRa_Azimuth_2.0_Ensembl_20250806.txt.gz
|
| 120 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_9606_GRCh38_SaurCas9_CRISPRa_Azimuth_2.0_Ensembl_20250806.summary.txt
|
| 121 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_9606_GRCh38_SaurCas9_CRISPRa_Azimuth_2.0_NCBI_20250718.txt.gz
|
| 122 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_9606_GRCh38_SaurCas9_CRISPRa_Azimuth_2.0_NCBI_20250718.summary.txt
|
| 123 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_9606_GRCh38_SaurCas9_CRISPRi_Azimuth_2.0_Ensembl_20250806.txt.gz
|
| 124 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_9606_GRCh38_SaurCas9_CRISPRi_Azimuth_2.0_Ensembl_20250806.summary.txt
|
| 125 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_9606_GRCh38_SaurCas9_CRISPRi_Azimuth_2.0_NCBI_20250718.txt.gz
|
| 126 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_9606_GRCh38_SaurCas9_CRISPRi_Azimuth_2.0_NCBI_20250718.summary.txt
|
| 127 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_9606_GRCh38_SaurCas9_CRISPRko_Azimuth_2.0_Ensembl_20250806.txt.gz
|
| 128 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_9606_GRCh38_SaurCas9_CRISPRko_Azimuth_2.0_Ensembl_20250806.summary.txt
|
| 129 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_9606_GRCh38_SaurCas9_CRISPRko_Azimuth_2.0_NCBI_20250718.txt.gz
|
| 130 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_9606_GRCh38_SaurCas9_CRISPRko_Azimuth_2.0_NCBI_20250718.summary.txt
|
| 131 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_9606_GRCh38_SpyoCas9_CRISPRa_RS3seq-Chen2013_Ensembl_20250806.txt.gz
|
| 132 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_9606_GRCh38_SpyoCas9_CRISPRa_RS3seq-Chen2013_Ensembl_20250806.summary.txt
|
| 133 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_9606_GRCh38_SpyoCas9_CRISPRa_RS3seq-Chen2013_NCBI_20250718.txt.gz
|
| 134 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_9606_GRCh38_SpyoCas9_CRISPRa_RS3seq-Chen2013_NCBI_20250718.summary.txt
|
| 135 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_9606_GRCh38_SpyoCas9_CRISPRi_RS3i-Chen2013_Ensembl_20250806.txt.gz
|
| 136 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_9606_GRCh38_SpyoCas9_CRISPRi_RS3i-Chen2013_Ensembl_20250806.summary.txt
|
| 137 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_9606_GRCh38_SpyoCas9_CRISPRi_RS3i-Chen2013_NCBI_20250718.txt.gz
|
| 138 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_9606_GRCh38_SpyoCas9_CRISPRi_RS3i-Chen2013_NCBI_20250718.summary.txt
|
| 139 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_9606_GRCh38_SpyoCas9_CRISPRko_RS3seq-Chen2013+RS3target_NCBI_20241104.txt.gz
|
| 140 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_9606_GRCh38_SpyoCas9_CRISPRko_RS3seq-Chen2013+RS3target_NCBI_20241104.summary.txt
|
| 141 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_9606_GRCh38_SpyoCas9_CRISPRko_RS3seq-Chen2013+RS3target_Ensembl_20241028.txt.gz
|
| 142 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_9606_GRCh38_SpyoCas9_CRISPRko_RS3seq-Chen2013+RS3target_Ensembl_20241028.summary.txt
|
| 143 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_10090_GRCm38_AsCas12a_CRISPRa_Seq-DeepCpf1_NCBI_20250807.txt.gz
|
| 144 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_10090_GRCm38_AsCas12a_CRISPRa_Seq-DeepCpf1_NCBI_20250807.summary.txt
|
| 145 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_10090_GRCm38_AsCas12a_CRISPRa_Seq-DeepCpf1_Ensembl_20250724.txt.gz
|
| 146 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_10090_GRCm38_AsCas12a_CRISPRa_Seq-DeepCpf1_Ensembl_20250724.summary.txt
|
| 147 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_10090_GRCm38_AsCas12a_CRISPRi_Seq-DeepCpf1_NCBI_20250807.txt.gz
|
| 148 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_10090_GRCm38_AsCas12a_CRISPRi_Seq-DeepCpf1_NCBI_20250807.summary.txt
|
| 149 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_10090_GRCm38_AsCas12a_CRISPRi_Seq-DeepCpf1_Ensembl_20250724.txt.gz
|
| 150 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_10090_GRCm38_AsCas12a_CRISPRi_Seq-DeepCpf1_Ensembl_20250724.summary.txt
|
| 151 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_10090_GRCm38_AsCas12a_CRISPRko_Seq-DeepCpf1_NCBI_20250807.txt.gz
|
| 152 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_10090_GRCm38_AsCas12a_CRISPRko_Seq-DeepCpf1_NCBI_20250807.summary.txt
|
| 153 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_10090_GRCm38_AsCas12a_CRISPRko_Seq-DeepCpf1_Ensembl_20250724.txt.gz
|
| 154 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_10090_GRCm38_AsCas12a_CRISPRko_Seq-DeepCpf1_Ensembl_20250724.summary.txt
|
| 155 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_10090_GRCm38_enAsCas12a_CRISPRa_enPAM+GB_NCBI_20250807.txt.gz
|
| 156 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_10090_GRCm38_enAsCas12a_CRISPRa_enPAM+GB_NCBI_20250807.summary.txt
|
| 157 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_10090_GRCm38_enAsCas12a_CRISPRa_enPAM+GB_Ensembl_20250724.txt.gz
|
| 158 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_10090_GRCm38_enAsCas12a_CRISPRa_enPAM+GB_Ensembl_20250724.summary.txt
|
| 159 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_10090_GRCm38_enAsCas12a_CRISPRi_enPAM+GB_NCBI_20250807.txt.gz
|
| 160 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_10090_GRCm38_enAsCas12a_CRISPRi_enPAM+GB_NCBI_20250807.summary.txt
|
| 161 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_10090_GRCm38_enAsCas12a_CRISPRi_enPAM+GB_Ensembl_20250724.txt.gz
|
| 162 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_10090_GRCm38_enAsCas12a_CRISPRi_enPAM+GB_Ensembl_20250724.summary.txt
|
| 163 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_10090_GRCm38_enAsCas12a_CRISPRko_enPAM+GB_NCBI_20250807.txt.gz
|
| 164 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_10090_GRCm38_enAsCas12a_CRISPRko_enPAM+GB_NCBI_20250807.summary.txt
|
| 165 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_10090_GRCm38_enAsCas12a_CRISPRko_enPAM+GB_Ensembl_20250724.txt.gz
|
| 166 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_10090_GRCm38_enAsCas12a_CRISPRko_enPAM+GB_Ensembl_20250724.summary.txt
|
| 167 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_10090_GRCm38_SaurCas9_CRISPRa_Azimuth_2.0_NCBI_20250807.txt.gz
|
| 168 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_10090_GRCm38_SaurCas9_CRISPRa_Azimuth_2.0_NCBI_20250807.summary.txt
|
| 169 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_10090_GRCm38_SaurCas9_CRISPRa_Azimuth_2.0_Ensembl_20250724.txt.gz
|
| 170 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_10090_GRCm38_SaurCas9_CRISPRa_Azimuth_2.0_Ensembl_20250724.summary.txt
|
| 171 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_10090_GRCm38_SaurCas9_CRISPRi_Azimuth_2.0_NCBI_20250807.txt.gz
|
| 172 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_10090_GRCm38_SaurCas9_CRISPRi_Azimuth_2.0_NCBI_20250807.summary.txt
|
| 173 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_10090_GRCm38_SaurCas9_CRISPRi_Azimuth_2.0_Ensembl_20250724.txt.gz
|
| 174 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_10090_GRCm38_SaurCas9_CRISPRi_Azimuth_2.0_Ensembl_20250724.summary.txt
|
| 175 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_10090_GRCm38_SaurCas9_CRISPRko_Azimuth_2.0_NCBI_20250807.txt.gz
|
| 176 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_10090_GRCm38_SaurCas9_CRISPRko_Azimuth_2.0_NCBI_20250807.summary.txt
|
| 177 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_10090_GRCm38_SaurCas9_CRISPRko_Azimuth_2.0_Ensembl_20250724.txt.gz
|
| 178 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_10090_GRCm38_SaurCas9_CRISPRko_Azimuth_2.0_Ensembl_20250724.summary.txt
|
| 179 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_10090_GRCm38_SpyoCas9_CRISPRa_RS3seq-Chen2013_NCBI_20250807.txt.gz
|
| 180 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_10090_GRCm38_SpyoCas9_CRISPRa_RS3seq-Chen2013_NCBI_20250807.summary.txt
|
| 181 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_10090_GRCm38_SpyoCas9_CRISPRa_RS3seq-Chen2013_Ensembl_20250724.txt.gz
|
| 182 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_10090_GRCm38_SpyoCas9_CRISPRa_RS3seq-Chen2013_Ensembl_20250724.summary.txt
|
| 183 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_10090_GRCm38_SpyoCas9_CRISPRi_RS3i-Chen2013_NCBI_20250807.txt.gz
|
| 184 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_10090_GRCm38_SpyoCas9_CRISPRi_RS3i-Chen2013_NCBI_20250807.summary.txt
|
| 185 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_10090_GRCm38_SpyoCas9_CRISPRi_RS3i-Chen2013_Ensembl_20250724.txt.gz
|
| 186 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_10090_GRCm38_SpyoCas9_CRISPRi_RS3i-Chen2013_Ensembl_20250724.summary.txt
|
| 187 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_10090_GRCm38_SpyoCas9_CRISPRko_RS3seq-Chen2013+RS3target_NCBI_20240614.txt.gz
|
| 188 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_10090_GRCm38_SpyoCas9_CRISPRko_RS3seq-Chen2013+RS3target_NCBI_20240614.summary.txt
|
| 189 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_10090_GRCm38_SpyoCas9_CRISPRko_RS3seq-Chen2013+RS3target_Ensembl_20230403.txt.gz
|
| 190 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_10090_GRCm38_SpyoCas9_CRISPRko_RS3seq-Chen2013+RS3target_Ensembl_20230403.summary.txt
|
| 191 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_8022_USDA_OmykA_1.1_SpyoCas9_CRISPRa_RS3seq-Chen2013_NCBI_20230419.txt.gz
|
| 192 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_8022_USDA_OmykA_1.1_SpyoCas9_CRISPRa_RS3seq-Chen2013_NCBI_20230419.summary.txt
|
| 193 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_8022_USDA_OmykA_1.1_SpyoCas9_CRISPRko_RS3seq-Chen2013+RS3target_NCBI_20230419.txt.gz
|
| 194 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_8022_USDA_OmykA_1.1_SpyoCas9_CRISPRko_RS3seq-Chen2013+RS3target_NCBI_20230419.summary.txt
|
| 195 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_10116_mRatBN7.2_AsCas12a_CRISPRa_Seq-DeepCpf1_Ensembl_20241112.txt.gz
|
| 196 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_10116_mRatBN7.2_AsCas12a_CRISPRa_Seq-DeepCpf1_Ensembl_20241112.summary.txt
|
| 197 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_10116_mRatBN7.2_AsCas12a_CRISPRa_Seq-DeepCpf1_NCBI_20240131.txt.gz
|
| 198 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_10116_mRatBN7.2_AsCas12a_CRISPRa_Seq-DeepCpf1_NCBI_20240131.summary.txt
|
| 199 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_10116_mRatBN7.2_AsCas12a_CRISPRi_Seq-DeepCpf1_Ensembl_20241112.txt.gz
|
| 200 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_10116_mRatBN7.2_AsCas12a_CRISPRi_Seq-DeepCpf1_Ensembl_20241112.summary.txt
|
| 201 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_10116_mRatBN7.2_AsCas12a_CRISPRi_Seq-DeepCpf1_NCBI_20240131.txt.gz
|
| 202 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_10116_mRatBN7.2_AsCas12a_CRISPRi_Seq-DeepCpf1_NCBI_20240131.summary.txt
|
| 203 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_10116_mRatBN7.2_AsCas12a_CRISPRko_Seq-DeepCpf1_Ensembl_20241112.txt.gz
|
| 204 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_10116_mRatBN7.2_AsCas12a_CRISPRko_Seq-DeepCpf1_Ensembl_20241112.summary.txt
|
| 205 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_10116_mRatBN7.2_AsCas12a_CRISPRko_Seq-DeepCpf1_NCBI_20240131.txt.gz
|
| 206 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_10116_mRatBN7.2_AsCas12a_CRISPRko_Seq-DeepCpf1_NCBI_20240131.summary.txt
|
| 207 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_10116_mRatBN7.2_enAsCas12a_CRISPRa_enPAM+GB_Ensembl_20241112.txt.gz
|
| 208 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_10116_mRatBN7.2_enAsCas12a_CRISPRa_enPAM+GB_Ensembl_20241112.summary.txt
|
| 209 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_10116_mRatBN7.2_enAsCas12a_CRISPRa_enPAM+GB_NCBI_20240131.txt.gz
|
| 210 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_10116_mRatBN7.2_enAsCas12a_CRISPRa_enPAM+GB_NCBI_20240131.summary.txt
|
| 211 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_10116_mRatBN7.2_enAsCas12a_CRISPRi_enPAM+GB_Ensembl_20241112.txt.gz
|
| 212 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_10116_mRatBN7.2_enAsCas12a_CRISPRi_enPAM+GB_Ensembl_20241112.summary.txt
|
| 213 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_10116_mRatBN7.2_enAsCas12a_CRISPRi_enPAM+GB_NCBI_20240131.txt.gz
|
| 214 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_10116_mRatBN7.2_enAsCas12a_CRISPRi_enPAM+GB_NCBI_20240131.summary.txt
|
| 215 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_10116_mRatBN7.2_enAsCas12a_CRISPRko_enPAM+GB_Ensembl_20241112.txt.gz
|
| 216 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_10116_mRatBN7.2_enAsCas12a_CRISPRko_enPAM+GB_Ensembl_20241112.summary.txt
|
| 217 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_10116_mRatBN7.2_enAsCas12a_CRISPRko_enPAM+GB_NCBI_20240131.txt.gz
|
| 218 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_10116_mRatBN7.2_enAsCas12a_CRISPRko_enPAM+GB_NCBI_20240131.summary.txt
|
| 219 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_10116_mRatBN7.2_SpyoCas9_CRISPRa_RS3seq-Chen2013_Ensembl_20241112.txt.gz
|
| 220 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_10116_mRatBN7.2_SpyoCas9_CRISPRa_RS3seq-Chen2013_Ensembl_20241112.summary.txt
|
| 221 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_10116_mRatBN7.2_SpyoCas9_CRISPRa_RS3seq-Chen2013_NCBI_20240131.txt.gz
|
| 222 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_10116_mRatBN7.2_SpyoCas9_CRISPRa_RS3seq-Chen2013_NCBI_20240131.summary.txt
|
| 223 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_10116_mRatBN7.2_SpyoCas9_CRISPRko_RS3seq-Chen2013+RS3target_Ensembl_20241112.txt.gz
|
| 224 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_10116_mRatBN7.2_SpyoCas9_CRISPRko_RS3seq-Chen2013+RS3target_Ensembl_20241112.summary.txt
|
| 225 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_10116_mRatBN7.2_SpyoCas9_CRISPRko_RS3seq-Chen2013+RS3target_NCBI_20240131.txt.gz
|
| 226 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_10116_mRatBN7.2_SpyoCas9_CRISPRko_RS3seq-Chen2013+RS3target_NCBI_20240131.summary.txt
|
| 227 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_10116_Rnor_6.0_SaurCas9_CRISPRi_Azimuth_2.0_NCBI_20220907.txt.gz
|
| 228 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_10116_Rnor_6.0_SaurCas9_CRISPRi_Azimuth_2.0_NCBI_20220907.summary.txt
|
| 229 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_10116_Rnor_6.0_SaurCas9_CRISPRko_Azimuth_2.0_NCBI_20220907.txt.gz
|
| 230 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_10116_Rnor_6.0_SaurCas9_CRISPRko_Azimuth_2.0_NCBI_20220907.summary.txt
|
| 231 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_10116_Rnor_6.0_SpyoCas9_CRISPRa_RS3seq-Chen2013_NCBI_20220907.txt.gz
|
| 232 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_10116_Rnor_6.0_SpyoCas9_CRISPRa_RS3seq-Chen2013_NCBI_20220907.summary.txt
|
| 233 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_10116_Rnor_6.0_SpyoCas9_CRISPRko_RS3seq-Chen2013+RS3target_NCBI_20220907.txt.gz
|
| 234 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_10116_Rnor_6.0_SpyoCas9_CRISPRko_RS3seq-Chen2013+RS3target_NCBI_20220907.summary.txt
|
| 235 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_9544_Mmul_10_SpyoCas9_CRISPRa_RS3seq-Chen2013_NCBI_20241025.txt.gz
|
| 236 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_9544_Mmul_10_SpyoCas9_CRISPRa_RS3seq-Chen2013_NCBI_20241025.summary.txt
|
| 237 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_9544_Mmul_10_SpyoCas9_CRISPRko_RS3seq-Chen2013+RS3target_NCBI_20241025.txt.gz
|
| 238 |
+
https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/sgRNA_design_9544_Mmul_10_SpyoCas9_CRISPRko_RS3seq-Chen2013+RS3target_NCBI_20241025.summary.txt
|
BioScientist/agent_system/engines/v1_executor_backup/know_how/resource/addgene_grna_sequences.csv
ADDED
|
@@ -0,0 +1,322 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
Application,Cas9 Species,Depositor,Plasmid ID,PubMed ID,Target Gene,Target Sequence,Target Species
|
| 2 |
+
cut,S. pyogenes,Goncalves,"<a href=""/58252/"">58252</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/24870050/"">24870050</a>",AAVS1,GGGGCCACTAGGGACAGGAT,H. sapiens
|
| 3 |
+
cut,S. pyogenes,Church,"<a href=""/41818/"">41818</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/23287722/"">23287722</a>",AAVS1,GGGGCCACTAGGGACAGGAT,H. sapiens
|
| 4 |
+
cut,S. pyogenes,Sabatini,"<a href=""/50662/"">50662</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/24336569/"">24336569</a>",AAVS1,GGGGCCACTAGGGACAGGAT,H. sapiens
|
| 5 |
+
cut,S. pyogenes,Sabatini,"<a href=""/70661/"">70661</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/26472758/"">26472758</a>",AAVS1,GGGGCCACTAGGGACAGGAT,H. sapiens
|
| 6 |
+
cut,S. pyogenes,Church,"<a href=""/41817/"">41817</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/23287722/"">23287722</a>",AAVS1,GTCCCCTCCACCCCACAGTG,H. sapiens
|
| 7 |
+
cut,S. pyogenes,Kanemaki,"<a href=""/72833/"">72833</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/27052166/"">27052166</a>",AAVS1,GGGGCCACTAGGGACAGGAT,H. sapiens
|
| 8 |
+
cut,S. pyogenes,Corn,"<a href=""//""></a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/26789497/"">26789497</a>",AAVS1,TGTCCCTAGTGGCCCCACTG,H. sapiens
|
| 9 |
+
cut,S. pyogenes,Corn,"<a href=""//""></a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/26789497/"">26789497</a>",AAVS1,ACAGTGGGGCCACTAGGGAC,H. sapiens
|
| 10 |
+
RNA targeting,S. pyogenes,Yeo,"<a href=""/74705/"">74705</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/26997482/"">26997482</a>",ACTB,UGGAGCGAGCAUCCCCCAAA,H. sapiens
|
| 11 |
+
cut,S. pyogenes,Jiang,"<a href=""/62552/"">62552</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/25739462/"">25739462</a>",actII-orf4,ATTACCAGGGACCGGAGTTC,S. coelicolor
|
| 12 |
+
cut,S. pyogenes,Zaratiegui,"<a href=""/52225/"">52225</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/25352017/"">25352017</a>",ade6+,TCTATTGTTCAGATGCCTCG,S. pombe
|
| 13 |
+
cut,S. pyogenes,Zaratiegui,"<a href=""/52227/"">52227</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/25352017/"">25352017</a>",ade6-L469,TCTATTGTTCAGATGCCTTG,S. pombe
|
| 14 |
+
cut,S. pyogenes,Zaratiegui,"<a href=""/52226/"">52226</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/25352017/"">25352017</a>",ade6-M210,TCTATTGTTCAGATGCTTCG,S. pombe
|
| 15 |
+
cut,S. pyogenes,Ventura,"<a href=""/64071/"">64071</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/25337876/"">25337876</a>",Alk and Eml,,M. musculus
|
| 16 |
+
nick,S. pyogenes,Shaw,"<a href=""/74374/"">74374</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/26816379/"">26816379</a>",AMPK alpha 1,GGCTGTCGCCATCTTTCTCC,H. sapiens
|
| 17 |
+
nick,S. pyogenes,Shaw,"<a href=""/74375/"">74375</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/26816379/"">26816379</a>",AMPK alpha 1,GAAGATCGGCCACTACATTC,H. sapiens
|
| 18 |
+
nick,S. pyogenes,Shaw,"<a href=""/74376/"">74376</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/26816379/"">26816379</a>",AMPK alpha 2,GTCAGCCATCTTCGGCGCGCG,H. sapiens
|
| 19 |
+
nick,S. pyogenes,Shaw,"<a href=""/74377/"">74377</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/26816379/"">26816379</a>",AMPK alpha 2,GAAGATCGGACACTACGTGC,H. sapiens
|
| 20 |
+
cut,S. pyogenes,Sabatini,"<a href=""/70660/"">70660</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/26472758/"">26472758</a>","Amplicon, JAK2",GAGGCATATTCTTCTCCTGG,H. sapiens
|
| 21 |
+
cut,S. pyogenes,Voytas,"<a href=""/70019/"">70019</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/26541286/"">26541286</a>",ANT1,TGTCGTTTATAATTTGTAGA,S. lycopersicum
|
| 22 |
+
cut,S. pyogenes,Voytas,"<a href=""/70018/"">70018</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/26541286/"">26541286</a>",ANT1,ACAATTTAATACACCTTTT,S. lycopersicum
|
| 23 |
+
cut,S. pyogenes,Kim,"<a href=""//""></a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/26479191/"">26479191</a>",AOC,CAAAAGACTGTCAATTCCCT,N. attenuata
|
| 24 |
+
cut/nick,S. pyogenes,Yamamoto,"<a href=""/58780/"">58780</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/24954249/"">24954249</a>",APC,GAAGCGGGCAAAGGGGCGAC,H. sapiens
|
| 25 |
+
cut,S. pyogenes,Joung,"<a href=""/42241/"">42241</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/23360964/"">23360964</a>",apoea,GGATGAGCCAAGAAGCCGCT,D. rerio
|
| 26 |
+
activate,S. pyogenes,Sato,"<a href=""/64131/"">64131</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/25619936/"">25619936</a>",ASCL1,TGGATGGAGAGTTTGCAAGGAGC,H. sapiens
|
| 27 |
+
activate,S. pyogenes,Sato,"<a href=""/64130/"">64130</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/25619936/"">25619936</a>",ASCL1,TGGGCAGCCGCTCGCTGCAGCAG,H. sapiens
|
| 28 |
+
activate,S. pyogenes,Sato,"<a href=""/64129/"">64129</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/25619936/"">25619936</a>",ASCL1,TGGGGCTGGGTGTCCCATTGAAA,H. sapiens
|
| 29 |
+
activate,S. pyogenes,Sato,"<a href=""/64132/"">64132</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/25619936/"">25619936</a>",ASCL1,TGGTGTTTATTCAGCCGGGAGTC,H. sapiens
|
| 30 |
+
cut,S. pyogenes,Mashimo,"<a href=""/60968/"">60968</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/24967838/"">24967838</a>",Asip,ATGACAGGAGTCTAACTCAC,R. norvegicus
|
| 31 |
+
tag,S. pyogenes,Mendenhall,"<a href=""/64690/"">64690</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/26355004/"">26355004</a>",ATF1,TAGGAATCAAACACTTTTATTGG,H. sapiens
|
| 32 |
+
cut,S. pyogenes,Yamamoto,"<a href=""/58779/"">58779</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/24954249/"">24954249</a>",ATM,TGAATTGGGATGCTGTTTTT,H. sapiens
|
| 33 |
+
cut,S. pyogenes,Mello,"<a href=""/58981/"">58981</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/24879462/"">24879462</a>",avr-14,GATTGGAGAGTTAGACCACG,C. elegans
|
| 34 |
+
cut,S. pyogenes,Mello,"<a href=""/58982/"">58982</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/24879462/"">24879462</a>",avr-15,GTTTGCAATATAAGTCACCC,C. elegans
|
| 35 |
+
cut,S. pyogenes,Yamamoto,"<a href=""/58782/"">58782</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/24954249/"">24954249</a>",AXIN2,TATGTTGGTGACTTGCCTCC,H. sapiens
|
| 36 |
+
methylation,S. pyogenes,Zoldoš,"<a href=""/71828/"">71828</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/26969735/"">26969735</a>",BACH2,AATGTAGCGATTGAGAGTGTGGG,H. sapiens
|
| 37 |
+
cut,S. pyogenes,Sabatini,"<a href=""/70658/"">70658</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/26472758/"">26472758</a>",BCR/ABL amplicon,GGCTCCCTTCAAGTGGGATG,H. sapiens
|
| 38 |
+
cut,S. pyogenes,Corn,"<a href=""//""></a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/26789497/"">26789497</a>",BFP,ATGGCGTGCAGTGCTTCAGC,
|
| 39 |
+
cut,S. pyogenes,Kim,"<a href=""//""></a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/26479191/"">26479191</a>",BIN2,ATCACAGTGATGCTCGTCAA,L. sativa
|
| 40 |
+
cut,S. pyogenes,Hanna,"<a href=""/59724/"">59724</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/25543152/"">25543152</a>",BLIMP1,CGGATGGGGTAAACGACCCG,H. sapiens
|
| 41 |
+
cut,S. pyogenes,Kim,"<a href=""//""></a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/26479191/"">26479191</a>",BRI1,TTTGAAAGATGGAAGCGCGG,A. thaliana
|
| 42 |
+
cut,S. pyogenes,Kim,"<a href=""//""></a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/26479191/"">26479191</a>",BRI1,TGAAACTAAACTGGTCCACA,A. thaliana
|
| 43 |
+
interfere,S. pyogenes,Lu,"<a href=""/68892/"">68892</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/26918244/"">26918244</a>",BT1754,GAAAATGGGGTGTATCCTGC,B. thetaiotaomicron
|
| 44 |
+
interfere,S. pyogenes,Lu,"<a href=""/68891/"">68891</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/26918244/"">26918244</a>",BT1854,ATTGAAGAACAAAAGCAGTT,B. thetaiotaomicron
|
| 45 |
+
cut,S. pyogenes,Sabatini,"<a href=""/70650/"">70650</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/26472758/"">26472758</a>",C16orf80,CGATGCTGTAGAGGATGGAG,H. sapiens
|
| 46 |
+
cut,S. pyogenes,Sabatini,"<a href=""/70651/"">70651</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/26472758/"">26472758</a>",C16orf80,TGTCTGAGAAGTAAACCCGT,H. sapiens
|
| 47 |
+
cut,S. pyogenes,Sabatini,"<a href=""/70653/"">70653</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/26472758/"">26472758</a>",C3orf17,GGGCCAAATGGGGTTTGTGG,H. sapiens
|
| 48 |
+
cut,S. pyogenes,Sabatini,"<a href=""/70652/"">70652</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/26472758/"">26472758</a>",C3orf17,GTGTGAGAATCCCTAAGGCG,H. sapiens
|
| 49 |
+
cut,S. pyogenes,Sabatini,"<a href=""/70654/"">70654</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/26472758/"">26472758</a>",C9orf114,CAGGCGGGCTCACCTCCGTG,H. sapiens
|
| 50 |
+
cut,S. pyogenes,Sabatini,"<a href=""/70655/"">70655</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/26472758/"">26472758</a>",C9orf114,GCGGCAGAGAAGGAGGACCG,H. sapiens
|
| 51 |
+
cut,S. pyogenes,Church,"<a href=""/43803/"">43803</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/23460208/"">23460208</a>",CAN1,GATACGTTCTCTATGGAGGA,S. cerevisiae
|
| 52 |
+
cut,S. pyogenes,Bornhauser,"<a href=""/75164/"">75164</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/27194728/"">27194728</a>",Caspase-8,GCCTGGACTACATTCCGCAA,H. sapiens
|
| 53 |
+
cut,S. pyogenes,Corn,"<a href=""//""></a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/26789497/"">26789497</a>",CCR5,TGACATCAATTATTATACAT,H. sapiens
|
| 54 |
+
interfere,S. pyogenes,Qi,"<a href=""/46918/"">46918</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/23849981/"">23849981</a>",CD71,GGACGCGCTAGTGTGAGTGC,H. sapiens
|
| 55 |
+
cut,S. pyogenes,Yamamoto,"<a href=""/58781/"">58781</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/24954249/"">24954249</a>",CDH1,TGACTTGCGAGGGACGCATT,H. sapiens
|
| 56 |
+
activate,S. pyogenes,Vale,"<a href=""/60905/"">60905</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/25307933/"">25307933</a>",CDKN1B,GAAGCCGGGACCTGGACCAG,H. sapiens
|
| 57 |
+
tag,S. pyogenes,Mendenhall,"<a href=""/64036/"">64036</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/26355004/"">26355004</a>",CEBPB,CTCCGGCCACTGCTAGCGCGG,H. sapiens
|
| 58 |
+
tag,S. pyogenes,Mendenhall,"<a href=""/64047/"">64047</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/26355004/"">26355004</a>",CEBPB,GCCGGCAGGGGGACGCGCGCGG,H. sapiens
|
| 59 |
+
cut,S. pyogenes,Ikawa,"<a href=""/50718/"">50718</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/24284873/"">24284873</a>",Cent1,GGCAACGTTTGACTTCCTGA,M. musculus
|
| 60 |
+
cut,S. pyogenes,Yamamoto,"<a href=""/58783/"">58783</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/24954249/"">24954249</a>",CFTR,TCTGTATCTATATTCATCAT,H. sapiens
|
| 61 |
+
tag,S. pyogenes,Mendenhall,"<a href=""/64940/"">64940</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/26355004/"">26355004</a>",CREB1,GCCACAAATCAGATTAATTTGG,H. sapiens
|
| 62 |
+
tag,S. pyogenes,Mendenhall,"<a href=""/64939/"">64939</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/26355004/"">26355004</a>",CREB1,GCCACAAATCAGATTAATTTGGG,H. sapiens
|
| 63 |
+
cut,S. pyogenes,Hong,"<a href=""/68060/"">68060</a>","<a href=""http://fungalbiolbiotech.biomedcentral.com/articles/10.1186/s40694-015-0015-1"">Fungal Biology and Biotechnology 2015, 2:4</a>",csr-1,GAGTGGGAGGGTCCCGTCCT,N. crassa
|
| 64 |
+
cut,S. pyogenes,Jacks,"<a href=""/59912/"">59912</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/25119044/"">25119044</a>",Ctnnb1,AGCTCCTTCCCTGAGTGGCA,M. musculus
|
| 65 |
+
cut,S. pyogenes,Jacks,"<a href=""/59911/"">59911</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/25119044/"">25119044</a>",Ctnnb1,CTGTGGTGGTGGCACCAGAA,M. musculus
|
| 66 |
+
interfere,S. pyogenes,Qi,"<a href=""/46917/"">46917</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/23849981/"">23849981</a>",CXCR4,GCAGGTAGCAAAGTGACGCCGA,H. sapiens
|
| 67 |
+
cut,S. pyogenes,Corn,"<a href=""//""></a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/26789497/"">26789497</a>",CXCR4,CCTCTTTGTCATCACGCTTC,H. sapiens
|
| 68 |
+
activate,S. pyogenes,Lu,"<a href=""/64385/"">64385</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/23977949/"">23977949</a>",CYC1m promoter,ACAGAGCACATGCATGCCAT,S. cerevisiae
|
| 69 |
+
activate,S. pyogenes,Lu,"<a href=""/64387/"">64387</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/23977949/"">23977949</a>",CYC1m promoter,ACTAATACTTTCAACATTTT,S. cerevisiae
|
| 70 |
+
activate,S. pyogenes,Lu,"<a href=""/64382/"">64382</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/23977949/"">23977949</a>",CYC1m promoter,ATATCGAATTCCTGCAGCCC,S. cerevisiae
|
| 71 |
+
activate,S. pyogenes,Lu,"<a href=""/64380/"">64380</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/23977949/"">23977949</a>",CYC1m promoter,ATATTCTTTCCTTATACATT,S. cerevisiae
|
| 72 |
+
activate,S. pyogenes,Lu,"<a href=""/64379/"">64379</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/23977949/"">23977949</a>",CYC1m promoter,CTAGATATTAAAATGTCTAA,S. cerevisiae
|
| 73 |
+
activate,S. pyogenes,Lu,"<a href=""/64388/"">64388</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/23977949/"">23977949</a>",CYC1m promoter,GTTGAAAGTATTAGTTAAAG,S. cerevisiae
|
| 74 |
+
activate,S. pyogenes,Lu,"<a href=""/64381/"">64381</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/23977949/"">23977949</a>",CYC1m promoter,TACATACAGTAGGATCCTA,S. cerevisiae
|
| 75 |
+
activate,S. pyogenes,Lu,"<a href=""/64383/"">64383</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/23977949/"">23977949</a>",CYC1m promoter,TATAGTAATTTATGCTGCAA,S. cerevisiae
|
| 76 |
+
activate,S. pyogenes,Lu,"<a href=""/64384/"">64384</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/23977949/"">23977949</a>",CYC1m promoter,TGCAAAGGTCCTAATGTATA,S. cerevisiae
|
| 77 |
+
activate,S. pyogenes,Lu,"<a href=""/64386/"">64386</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/23977949/"">23977949</a>",CYC1m promoter,TGTATGTACATACAGTACCC,S. cerevisiae
|
| 78 |
+
activate,S. pyogenes,Lu,"<a href=""/64378/"">64378</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/23977949/"">23977949</a>",CYC1m promoter,TTACTGTATGTACATACAGT,S. cerevisiae
|
| 79 |
+
cut,S. pyogenes,Wente,"<a href=""/47932/"">47932</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/23918387/"">23918387</a>",ddx19,GGCAACAGATTCGTGGGCCC,D. rerio
|
| 80 |
+
cut,S. pyogenes,Sabatini,"<a href=""/70656/"">70656</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/26472758/"">26472758</a>",DDX3Y,GCAGTTTAGCGATATTGACA,H. sapiens
|
| 81 |
+
cut,S. pyogenes,Sabatini,"<a href=""/70657/"">70657</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/26472758/"">26472758</a>",DDX3Y,TCTTGTTGGGGCTAAAACCA,H. sapiens
|
| 82 |
+
cut,S. pyogenes,Church,"<a href=""/41822/"">41822</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/23287722/"">23287722</a>",DNMT3A,GAGATGATCGCCCCTTCTTC,H. sapiens
|
| 83 |
+
cut,S. pyogenes,Church,"<a href=""/41821/"">41821</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/23287722/"">23287722</a>",DNMT3A,GCATGATGCGCGGCCCAAGG,H. sapiens
|
| 84 |
+
cut,S. pyogenes,Church,"<a href=""/41823/"">41823</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/23287722/"">23287722</a>",DNMT3B,GAATTACTCACGCCCCAAGG,H. sapiens
|
| 85 |
+
cut,VRER Cas9 mutant,Fire,"<a href=""/71516/"">71516</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/26680661/"">26680661</a>",dpy-10,CGCTACCATAGGCACCACG,C. elegans
|
| 86 |
+
cut,S. pyogenes,Katic,"<a href=""/65630/"">65630</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/26044730/"">26044730</a>",dpy-10,GCTACCATAGGCACCACGAG,C.elegans
|
| 87 |
+
cut,S. pyogenes,Fire,"<a href=""/59933/"">59933</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/25161212/"">25161212</a>",dpy-10,GCTACCATAGGCACCACGAG,C. elegans
|
| 88 |
+
cut,VQR Cas9 variant,Fire,"<a href=""/71479/"">71479</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/26680661/"">26680661</a>",dpy-10,TCCGCTACCATAGGCACCA,C. elegans
|
| 89 |
+
cut,S. pyogenes,Seydoux,"<a href=""/70047/"">70047</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/26187122/"">26187122</a>",dpy‐10,GCTACCATAGGCACCACGAG,C. elegans
|
| 90 |
+
cut,S. pyogenes,Joung,"<a href=""/42242/"">42242</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/23360964/"">23360964</a>",drd3,GGAAACTACAGCCCAGCGTC,D. rerio
|
| 91 |
+
cut,S. pyogenes,Kim,"<a href=""//""></a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/26479191/"">26479191</a>",DWD1,TGCATCGTCCAAGCGCACAG,O. sativa
|
| 92 |
+
cut,S. pyogenes,Kim,"<a href=""//""></a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/26479191/"">26479191</a>",DWD1,CTACGACGTCAGGTTCTACC,O. sativa
|
| 93 |
+
cut,S. pyogenes,Christiaen,"<a href=""/59990/"">59990</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/25336740/"">25336740</a>",Ebf,GCTGAGGGTTGGACAACAGG,C. intestinalis
|
| 94 |
+
dCas9-FokI,S. pyogenes,Joung,"<a href=""/60071/"">60071</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/24770325/"">24770325</a>",EGFP,"multiple, see article",A. victoria
|
| 95 |
+
cut,S. pyogenes,Zhang,"<a href=""/51764/"">51764</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/24336571/"">24336571</a>",EGFP,GAAGTTCGAGGGCGACACCC,A. victoria
|
| 96 |
+
cut,S. pyogenes,Zhang,"<a href=""/51761/"">51761</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/24336571/"">24336571</a>",EGFP,GAGCTGGACGGCGACGTAAA,A. victoria
|
| 97 |
+
cut,S. pyogenes,Joung,"<a href=""/47512/"">47512</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/23792628/"">23792628</a>",EGFP,GATGCCGTTCTTCTGCTTGT,A. victoria
|
| 98 |
+
cut,S. pyogenes,Zhang,"<a href=""/51763/"">51763</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/24336571/"">24336571</a>",EGFP,GGAGCGCACCATCTTCTTCA,A. victoria
|
| 99 |
+
cut,S. pyogenes,Zhang,"<a href=""/51762/"">51762</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/24336571/"">24336571</a>",EGFP,GGCCACAAGTTCAGCGTGTC,A. victoria
|
| 100 |
+
cut,S. pyogenes,Del Bene,"<a href=""/61051/"">61051</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/24179142/"">24179142</a>",EGFP,GGCGAGGGCGATGCCACCTA,A. victoria
|
| 101 |
+
cut,S. pyogenes,Chen,"<a href=""/46760/"">46760</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/23918387/"">23918387</a>",EGFP,GGGCACGGGCAGCTTGCCGG,A. victoria
|
| 102 |
+
cut,S. pyogenes,Joung,"<a href=""/47511/"">47511</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/23792628/"">23792628</a>",EGFP,GGGCACGGGCAGCTTGCCGG,A. victoria
|
| 103 |
+
cut,S. pyogenes,Zhang,"<a href=""/51760/"">51760</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/24336571/"">24336571</a>",EGFP,GGGCGAGGAGCTGTTCACCG,A. victoria
|
| 104 |
+
cut,S. pyogenes,Zhang,"<a href=""/51765/"">51765</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/24336571/"">24336571</a>",EGFP,GGTGAACCGCATCGAGCTGA,A. victoria
|
| 105 |
+
cut,S. pyogenes,Joung,"<a href=""/47513/"">47513</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/23792628/"">23792628</a>",EGFP,GGTGGTGCAGATGAACTTCA,A. victoria
|
| 106 |
+
cut,S. pyogenes,Goncalves,"<a href=""/58255/"">58255</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/24870050/"">24870050</a>",EGFP,TGAAGAAGATGGTGCGCTC,A. victoria
|
| 107 |
+
cut,S. pyogenes,Moffat,"<a href=""/74187/"">74187</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/26627737/"">26627737</a>",EIF3D,TGTAGGTTGCCTCCATGGCC,H. sapiens
|
| 108 |
+
cut,S. pyogenes,Moffat,"<a href=""/74188/"">74188</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/26627737/"">26627737</a>",EIF3D,AGACGACCCTGTCATCCGCA,H. sapiens
|
| 109 |
+
cut,S. pyogenes,Zhang,"<a href=""/42337/"">42337</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/23287718/"">23287718</a>",Emx1,,H. sapiens
|
| 110 |
+
cut,S. pyogenes,Joung,"<a href=""/47508/"">47508</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/23792628/"">23792628</a>",EMX1,GAGTCCGAGCAGAAGAAGAA,H. sapiens
|
| 111 |
+
cut,S. pyogenes,Corn,"<a href=""//""></a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/26789497/"">26789497</a>",EMX1,CGATGTCACCTCCAATGACT,H. sapiens
|
| 112 |
+
cut,S. pyogenes,Chen,"<a href=""/71288/"">71288</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/26193878/"">26193878</a>","ETC2, TRY, and CPC",,A. thaliana
|
| 113 |
+
cut,S. pyogenes,Bornhauser,"<a href=""/75166/"">75166</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/27194728/"">27194728</a>",FADD,ACTCCCGCACACGCTCTGTC,H. sapiens
|
| 114 |
+
cut,S. pyogenes,Joung,"<a href=""/47510/"">47510</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/23792628/"">23792628</a>",FANCF,GGAATCCCTTCTGCAGCACC,H. sapiens
|
| 115 |
+
cut,S. pyogenes,Seydoux,"<a href=""/65597/"">65597</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/25249454/"">25249454</a>",fbf-2,GTAGTCACGGCGATGATTA,C. elegans
|
| 116 |
+
cut,S. pyogenes,Seydoux,"<a href=""/65591/"">65591</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/25249454/"">25249454</a>",fbf-2,TAATCATCGCCGTGACTAC,C. elegans
|
| 117 |
+
cut,S. pyogenes,Joung,"<a href=""/42244/"">42244</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/23360964/"">23360964</a>",fh,GGAGCGAGCGGAGCGGTACA,D. rerio
|
| 118 |
+
cut,S. pyogenes,Joung,"<a href=""/42243/"">42243</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/23360964/"">23360964</a>",fh,GGAGCGGTACATGGCGACCG,D. rerio
|
| 119 |
+
tag,S. pyogenes,Mendenhall,"<a href=""/64254/"">64254</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/26355004/"">26355004</a>",GABPA,GAAAAGGATAATTGAGCCCCAGG,H. sapiens
|
| 120 |
+
tag,S. pyogenes,Mendenhall,"<a href=""/64255/"">64255</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/26355004/"">26355004</a>",GABPA,TTTGGAGTCTCAGAATGTCCTGG,H. sapiens
|
| 121 |
+
activate,S. pyogenes,Qi,"<a href=""/46916/"">46916</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/23849981/"">23849981</a>",GAL4 UAS,GAACGACTAGTTAGGCGTGTA,
|
| 122 |
+
activate,S. pyogenes,Qi,"<a href=""/46915/"">46915</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/23849981/"">23849981</a>",GAL4 UAS,GTTGGAGCACTGTCCTCCGAACGT,
|
| 123 |
+
activate,S. pyogenes,Sato,"<a href=""/64158/"">64158</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/25619936/"">25619936</a>",GAL4UAS,TGGGGACAGTACTCCGCTCGAGT,
|
| 124 |
+
activate,S. pyogenes,Sato,"<a href=""/64157/"">64157</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/25619936/"">25619936</a>",GAL4UAS,TGGGTCTTCGGAGGACAGTACTC,
|
| 125 |
+
activate,S. pyogenes,Sato,"<a href=""/64159/"">64159</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/25619936/"">25619936</a>",GAL4UAS,TGGTCCGTCTAGAAACTCGGTAC,
|
| 126 |
+
cut,S. pyogenes,Du,"<a href=""/65566/"">65566</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/25849248/"">25849248</a>",gfap,GTGCGCAACACATAGCACCA,D. rerio
|
| 127 |
+
interfere,S. pyogenes,Qi,"<a href=""/46914/"">46914</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/23849981/"">23849981</a>",GFP,GAATAGCTCAGAGGCCGAGG,A. victoria
|
| 128 |
+
cut,S. pyogenes,Church,"<a href=""/41820/"">41820</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/23287722/"">23287722</a>",GFP,GGAGCGCACCATCTTCTTCA,A. victoria
|
| 129 |
+
cut,S. pyogenes,Church,"<a href=""/41819/"">41819</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/23287722/"">23287722</a>",GFP,GTGAACCGCATCGAGCTGAA,A. victoria
|
| 130 |
+
cut,S. pyogenes,"Guigo, Johnson","<a href=""/72619/"">72619</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/26493208/"">26493208</a>",GFP,gRNA1: GAGCTGGACGGCGACGTAAA; gRNA2: CAGAACACCCCCATCGGCGA,Synthetic
|
| 131 |
+
interfere,S. pyogenes,Hudson,"<a href=""/73221/"">73221</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/26689101/"">26689101</a>",GFPmut3b,ACCATCTAATTCAACAAGAATT,A. victoria
|
| 132 |
+
interfere,S. pyogenes,Hudson,"<a href=""/73224/"">73224</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/26689101/"">26689101</a>",GFPmut3b,ACCATCTAATTCAACAAGAATT,synthetic
|
| 133 |
+
CRISPR-display,S. pyogenes,Rinn,"<a href=""/68422/"">68422</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/26030444/"">26030444</a>",GLuc,GATCTAGATACGACTCACTAT,synthetic
|
| 134 |
+
cut,S. pyogenes,Ye,"<a href=""/61833/"">61833</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/24424410/"">24424410</a>",gp78,GCCCAGCCTCCGCACCTACA,H. sapiens
|
| 135 |
+
cut,S. pyogenes,Joung,"<a href=""/42245/"">42245</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/23360964/"">23360964</a>",gsk3b,GGGACCTGACCGGCCGCAGG,D. rerio
|
| 136 |
+
cut,S. pyogenes,Jin,"<a href=""/64333/"">64333</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/25281382/"">25281382</a>",his3,ATTGCGATCTCTTTAAAGGG,S. cerevisiae
|
| 137 |
+
cut,S. pyogenes,Yan,"<a href=""/69539/"">69539</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/26130722/"">26130722</a>",HPRT,GACTGTAAGTGAATTACTT,H. sapiens
|
| 138 |
+
cut,S. pyogenes,Yamamoto,"<a href=""/58778/"">58778</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/24954249/"">24954249</a>",HPRT1,CTGATAAAATCTACAGTCAT,H. sapiens
|
| 139 |
+
cut,S. pyogenes,Yamamoto,"<a href=""/58771/"">58771</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/24954249/"">24954249</a>",HPRT1,TTATGCTGAGGATTTGGAAA,H. sapiens
|
| 140 |
+
activate,S. pyogenes,Sato,"<a href=""/64142/"">64142</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/25619936/"">25619936</a>",IL1RN,TGGACGCAGATAAGAACCAGTT,H. sapiens
|
| 141 |
+
activate,S. pyogenes,Sato,"<a href=""/64151/"">64151</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/25619936/"">25619936</a>",IL1RN,TGGCATCAAGTCAGCCATCAGC,H. sapiens
|
| 142 |
+
activate,S. pyogenes,Sato,"<a href=""/64152/"">64152</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/25619936/"">25619936</a>",IL1RN,TGGGAGTCACCCTCCTGGAAAC,H. sapiens
|
| 143 |
+
activate,S. pyogenes,Sato,"<a href=""/64140/"">64140</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/25619936/"">25619936</a>",IL1RN,TGGTGTACTCTCTGAGGTGCTC,H. sapiens
|
| 144 |
+
cut,S. pyogenes,Xue,"<a href=""/66582/"">66582</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/26018130/"">26018130</a>",inverted GFP,GAGCGGCCGCTCGAGTCTAG,A. victoria
|
| 145 |
+
cut,S. pyogenes,Xue,"<a href=""/66583/"">66583</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/26018130/"">26018130</a>",inverted GFP,GATATCGAATTCCTGCAGCC,A. victoria
|
| 146 |
+
cut,S. pyogenes,Xue,"<a href=""/66581/"">66581</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/26018130/"">26018130</a>",inverted GFP,GTATCGATACCGTCGACCTCG,A. victoria
|
| 147 |
+
cut,S. pyogenes,Xue,"<a href=""/66584/"">66584</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/26018130/"">26018130</a>",inverted GFP,GTTGATCCATAACTTCGTAT,A. victoria
|
| 148 |
+
purify,S. pyogenes,Fujii,"<a href=""/61079/"">61079</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/23942116/"">23942116</a>",IRF1,CCGGGGGCGCTGGGCTGTCCCGG,H. sapiens
|
| 149 |
+
purify,S. pyogenes,Fujii,"<a href=""/61080/"">61080</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/25051498/"">25051498</a>",IRF1,GCGCTTACACTTTAGGAGACACTC,H. sapiens
|
| 150 |
+
cut,S. pyogenes,Sabatini,"<a href=""/70679/"">70679</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/26472758/"">26472758</a>",JAK2 amplicon ,GGTTTAATGGAAGAGAAGGG,H. sapiens
|
| 151 |
+
cut,S. pyogenes,Seydoux,"<a href=""/66085/"">66085</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/25249454/"">25249454</a>",K08F4.2,AATCACTCCCTGTTTGTGT,C. elegans
|
| 152 |
+
cut,S. pyogenes,Seydoux,"<a href=""/66095/"">66095</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/25249454/"">25249454</a>",K08F4.2,CACGAGGTGGTATGCGCAG,C. elegans
|
| 153 |
+
cut,S. pyogenes,Seydoux,"<a href=""/66092/"">66092</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/25249454/"">25249454</a>",K08F4.2,CGCAGCGGTTTCCAAAATG,C. elegans
|
| 154 |
+
cut,S. pyogenes,Seydoux,"<a href=""/66087/"">66087</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/25249454/"">25249454</a>",K08F4.2,GCCTTAACCCAGAATAAGA,C. elegans
|
| 155 |
+
cut,S. pyogenes,Seydoux,"<a href=""/66089/"">66089</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/25249454/"">25249454</a>",K08F4.2,TATTAAATGCAGATAACCT,C. elegans
|
| 156 |
+
cut,S. pyogenes,Wolfe,"<a href=""/69238/"">69238</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/26480473/"">26480473</a>",KANK3,GCATGGGTGATGTCAATGCC,H. sapiens
|
| 157 |
+
cut,S. pyogenes,Mashimo,"<a href=""/60969/"">60969</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/24967838/"">24967838</a>",Kit-1,CATCTGTGCGGCCGTTGGCT,R. norvegicus
|
| 158 |
+
cut,S. pyogenes,Mashimo,"<a href=""/60970/"">60970</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/24967838/"">24967838</a>",Kit-2,CTAACGTTCCAGCGCTCGTT,R. norvegicus
|
| 159 |
+
cut,S. pyogenes,Mashimo,"<a href=""/60971/"">60971</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/24967838/"">24967838</a>",Kit-2,GTCAAGATGTCATCTTACGG,R. norvegicus
|
| 160 |
+
cut,S. pyogenes,Calarco,"<a href=""/46170/"">46170</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/23817069/"">23817069</a>",klp-12,GATCCACAAGTTACAATTGG,C. elegans
|
| 161 |
+
cut,S. pyogenes,Zhang,"<a href=""/60224/"">60224</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/25263330/"">25263330</a>","Kras, p53, and Lkb1","multiple, see article",M. musculus
|
| 162 |
+
cut,S. pyogenes,Zhang,"<a href=""/60225/"">60225</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/25263330/"">25263330</a>",LacZ,TGCGAATACGCCCACGCGAT,E. coli
|
| 163 |
+
cut,S. pyogenes,Moffat,"<a href=""/74179/"">74179</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/26627737/"">26627737</a>",LacZ,CCCGAATCTCTATCGTGCGG,E.coli
|
| 164 |
+
cut,S. pyogenes,Patron,"<a href=""/68256/"">68256</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/26616834/"">26616834</a>",lC.GA4a,GTTGAGAGGGGAGCCGGTGA,B. oleracea
|
| 165 |
+
cut,S. pyogenes,Patron,"<a href=""/68255/"">68255</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/26616834/"">26616834</a>",lC.GA4a,GTTTTCACTTGCGGCCGGAG,B. oleracea
|
| 166 |
+
cut,S. pyogenes,Jin,"<a href=""/64332/"">64332</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/25281382/"">25281382</a>",leu2,AATCACAGCCGAAGCCATTA,S. cerevisiae
|
| 167 |
+
cut,S. pyogenes,Winslow,"<a href=""/66894/"">66894</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/26178787/"">26178787</a>",Lkb1,GTGGTGGGCCGCAGTCACAA,M. musculus
|
| 168 |
+
cut,S. pyogenes,Xue,"<a href=""/66586/"">66586</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/26018130/"">26018130</a>",Lox-STOP-Lox,GCGTATAGCATACATTATACG,synthetic
|
| 169 |
+
cut,S. pyogenes,Xue,"<a href=""/66585/"">66585</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/26018130/"">26018130</a>",Lox-STOP-Lox,GCGTATAGTACACATTATACG,synthetic
|
| 170 |
+
cut,S. pyogenes,Wolfe,"<a href=""/69237/"">69237</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/26480473/"">26480473</a>",LRTM2,GCTGGCGGAAGACAGAGTGC,H. sapiens
|
| 171 |
+
cut,S. pyogenes,Moffat,"<a href=""/74190/"">74190</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/26627737/"">26627737</a>",Luciferase,ACAACTTTACCGACCGCGCC,
|
| 172 |
+
cut,S. pyogenes,Cate,"<a href=""/60847/"">60847</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/25139909/"">25139909</a>",LYP1,CATAATAACGTCCAATAAAT,S. cerevisiae
|
| 173 |
+
cut,S. pyogenes,"Guigo, Johnson","<a href=""/72620/"">72620</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/26493208/"">26493208</a>",Malat1,gRNA1: GAACCGGTGGGGCTGCGTCA; gRNA2: GGCAGGAGAGGCCAGTTGCG,H. sapiens
|
| 174 |
+
cut,S. pyogenes,"Guigo, Johnson","<a href=""/72621/"">72621</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/26493208/"">26493208</a>",Malat1,gRNA1: GCAACTTCCATTTTCAGTCT; gRNA2: GGAAGCCTCAGCTCGCCTGA,H. sapiens
|
| 175 |
+
cut,S. pyogenes,"Guigo, Johnson","<a href=""/72622/"">72622</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/26493208/"">26493208</a>",Malat1,gRNA1:GCTGGGGCTCAGTTGCGTAA; gRNA2:AGGTTTCTAAAACATGACGG,H. sapiens
|
| 176 |
+
cut,S. pyogenes,"Guigo, Johnson","<a href=""/72623/"">72623</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/26493208/"">26493208</a>",Malat1,gRNA1:GTTGAGATGAAGCTTCTTCA; gRNA2:TCAACCGTCCCTGCAAGGCT,H. sapiens
|
| 177 |
+
cut,S. pyogenes,"Guigo, Johnson","<a href=""/72624/"">72624</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/26493208/"">26493208</a>",Malat1,gRNA1: GAAACCTCGTGTAGCTATCA; gRNA2: AATGTGAAGGACTTTCGTAA,H. sapiens
|
| 178 |
+
nick,S. pyogenes,Hanna,"<a href=""/61514/"">61514</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/25569111/"">25569111</a>",Mettl14,GCCGCTCCCGGATCTCCTGC,M. musculus
|
| 179 |
+
nick,S. pyogenes,Hanna,"<a href=""/61515/"">61515</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/25569111/"">25569111</a>",Mettl14,GCGGCAGCTCCTAGCTCAGC,M. musculus
|
| 180 |
+
cut,S. pyogenes,Zhao,"<a href=""/69801/"">69801</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/26293209/"">26293209</a>",mitf,CTTTCGGATATAATCCACGG,S. scrofa
|
| 181 |
+
cut,S. pyogenes,Chen,"<a href=""/47931/"">47931</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/23918387/"">23918387</a>",mitfa,GGTCTCTCGCAGGATGTTGC,D. rerio
|
| 182 |
+
cut,S. pyogenes,Bleris,"<a href=""/62715/"">62715</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/25527740/"">25527740</a>",mKate,ATGAGAATCAAGGCGGTCGA,synthetic
|
| 183 |
+
cut,S. pyogenes,Bornhauser,"<a href=""/75167/"">75167</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/27194728/"">27194728</a>",MLKL,ATCCCCGTGGATTCTGCTAA,H. sapiens
|
| 184 |
+
cut,S. pyogenes,Katsanis,"<a href=""/72890/"">72890</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/26429889/"">26429889</a>",mmp21,CGGAGCTGATCACTGACA,D. rerio
|
| 185 |
+
visualize,S. pyogenes,Qi,"<a href=""/51025/"">51025</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/24360272/"">24360272</a>",MUC4,GTGGCGTGACCTGTGGATGCTG,H. sapiens
|
| 186 |
+
activate,S. pyogenes,Sato,"<a href=""/64138/"">64138</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/25619936/"">25619936</a>",MYOD1,TGGCCTCCCTCCCTGCCCGGTAG,H. sapiens
|
| 187 |
+
activate,S. pyogenes,Sato,"<a href=""/64139/"">64139</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/25619936/"">25619936</a>",MYOD1,TGGGAGGTTTGGAAAGGGCGTGC,H. sapiens
|
| 188 |
+
activate,S. pyogenes,Sato,"<a href=""/64136/"">64136</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/25619936/"">25619936</a>",MYOD1,TGGGCCTGGGCTCCGGGGCGTTT,H. sapiens
|
| 189 |
+
activate,S. pyogenes,Sato,"<a href=""/64137/"">64137</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/25619936/"">25619936</a>",MYOD1,TGGGGGCCCCTGCGGCCACCCCG,H. sapiens
|
| 190 |
+
activate,S. pyogenes,Sato,"<a href=""/64156/"">64156</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/25619936/"">25619936</a>",NANOG,TGGCATATTCCTGATTTAAAAGT,H. sapiens
|
| 191 |
+
activate,S. pyogenes,Sato,"<a href=""/64153/"">64153</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/25619936/"">25619936</a>",NANOG,TGGCGCCAGGAGGGGTGGGTCTA,H. sapiens
|
| 192 |
+
activate,S. pyogenes,Sato,"<a href=""/64154/"">64154</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/25619936/"">25619936</a>",NANOG,TGGGCCTTGGTGAGACTGGTAGA,H. sapiens
|
| 193 |
+
activate,S. pyogenes,Sato,"<a href=""/64155/"">64155</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/25619936/"">25619936</a>",NANOG,TGGTGTCTTCAGGTTCTGTTGCT,H. sapiens
|
| 194 |
+
interfere,S. pyogenes,Lu,"<a href=""/68897/"">68897</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/26918244/"">26918244</a>",NanoLuc,AGCTTACGCCACCCTGTTCC,synthetic
|
| 195 |
+
interfere,S. pyogenes,Lu,"<a href=""/68898/"">68898</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/26918244/"">26918244</a>",NanoLuc,GACAGAACGATGCGCTGAAT,synthetic
|
| 196 |
+
interfere,S. pyogenes,Lu,"<a href=""/68895/"">68895</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/26918244/"">26918244</a>",NanoLuc,TCACGCTCACACCCAGGTTC,synthetic
|
| 197 |
+
interfere,S. pyogenes,Lu,"<a href=""/68896/"">68896</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/26918244/"">26918244</a>",NanoLuc,TTGATCCAAATTATAACCCG,synthetic
|
| 198 |
+
cut,S. pyogenes,Lu,"<a href=""/61270/"">61270</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/25240928/"">25240928</a>",NDM-1,GGGCAGTCGCTTCCAACGGTTTGATCGTCA,
|
| 199 |
+
cut,S. pyogenes,Cepko,"<a href=""/69992/"">69992</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/25155555/"">25155555</a>",near LoxP sites,CGAAGTTATATTAAGGGTTC,synthetic
|
| 200 |
+
interfere,S. pyogenes,Lu,"<a href=""/68893/"">68893</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/26918244/"">26918244</a>",negative control,CTGGAATGAATTGGCCTATG,
|
| 201 |
+
cut,S. pyogenes,Winslow,"<a href=""/66895/"">66895</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/26178787/"">26178787</a>",negative control,GCGAGGTATTCGGCTCCGCG,M. musculus
|
| 202 |
+
cut,S. pyogenes,Christiaen,"<a href=""/60006/"">60006</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/25336740/"">25336740</a>",negative control,GCTTTGCTACGATCTACATT,C. intestinalis
|
| 203 |
+
cut,S. pyogenes,Bleris,"<a href=""/64955/"">64955</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/25527740/"">25527740</a>",negative control,GTCAAGGCACTCTTGCCTA,synthetic
|
| 204 |
+
,S. pyogenes,Wolfe,"<a href=""/50927/"">50927</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/24346702/"">24346702</a>",negative control,GTTCCGCGTTACATAACTTA,H. sapiens
|
| 205 |
+
cut,S. pyogenes,Winslow,"<a href=""/67594/"">67594</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/26178787/"">26178787</a>",Neomycin,TCATGGCTGATGCAATGCGG,
|
| 206 |
+
cut,S. pyogenes,Zhang,"<a href=""/60227/"">60227</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/25263330/"">25263330</a>",NeuN,TCCGGTTCAGGGACCCCGAC,M. musculus
|
| 207 |
+
activate,S. pyogenes,Sato,"<a href=""/64161/"">64161</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/25619936/"">25619936</a>",Neurog2,GTCTCTATCACTGATAGGGA,H. sapiens
|
| 208 |
+
activate,S. pyogenes,Sato,"<a href=""/64160/"">64160</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/25619936/"">25619936</a>",Neurog2,GTGAATGATGATAATACGAT,H. sapiens
|
| 209 |
+
methylation,S. pyogenes,Zoldoš,"<a href=""/71830/"">71830</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/26969735/"">26969735</a>",Non-targeting,GTAGGCGCGCCGCTCTCTAC,H. sapiens
|
| 210 |
+
cut,S. pyogenes,Huangfu,"<a href=""/66989/"">66989</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/26028531/"">26028531</a>",OCT4,CTCCCATGCATTCAAACTG,H. sapiens
|
| 211 |
+
activate,S. pyogenes,Otonkoski,"<a href=""/69537/"">69537</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/26352799/"">26352799</a>",OCT4,"multiple, see article",H. sapiens
|
| 212 |
+
cut,N. meningitidis,Thomson,"<a href=""/47870/"">47870</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/23940360/"">23940360</a>",OCT4,GTTGTAGCTCCCTTTCTCATTTCG,H. sapiens
|
| 213 |
+
interfere,S. pyogenes,Wolfe,"<a href=""/50922/"">50922</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/24346702/"">24346702</a>",Oct4A (POU5F1),GGGGCGCCAGTTGTGTCTCC,H. sapiens
|
| 214 |
+
interfere,S. pyogenes,Wolfe,"<a href=""/50921/"">50921</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/24346702/"">24346702</a>",Oct4A (POU5F1),GTGGGACTGGGGAGGGAGAG,H. sapiens
|
| 215 |
+
cut,S. pyogenes,Kim,"<a href=""//""></a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/26479191/"">26479191</a>",P450,CATATAGTTGGGTCATGGCA,O. sativa
|
| 216 |
+
cut,S. pyogenes,Sherwood,"<a href=""/71483/"">71483</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/26527385/"">26527385</a>",Pal1,GCTCTGTGACTAGTCACAGAG,synthetic
|
| 217 |
+
cut,S. pyogenes,Sherwood,"<a href=""/71484/"">71484</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/26527385/"">26527385</a>",Pal7,GGCTTAGTACTAGTACTAAGC,synthetic
|
| 218 |
+
cut,S. pyogenes,Zhang,"<a href=""/68466/"">68466</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/26145478/"">26145478</a>",PAX6,GATACTGGAGAAGCAGGGGC,H. sapiens
|
| 219 |
+
cut,S. pyogenes,Zhang,"<a href=""/68465/"">68465</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/26145478/"">26145478</a>",PAX6,GTAGATTTTGTATGCACTGC,H. sapiens
|
| 220 |
+
interfere,S. pyogenes,Lu,"<a href=""/68900/"">68900</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/26918244/"">26918244</a>",PcfiA,AAACAAAACCTCATCAGGCA,
|
| 221 |
+
interfere,S. pyogenes,Lu,"<a href=""/68899/"">68899</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/26918244/"">26918244</a>",PcfiA,GAAGCTCACTCCTTAGCACG,
|
| 222 |
+
interfere,S. pyogenes,Lu,"<a href=""/74068/"">74068</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/26829286/"">26829286</a>",pck,AGGGCGAGGCGCCGACCAAGAATA,C. glutamicum
|
| 223 |
+
interfere,S. pyogenes,Lu,"<a href=""/74069/"">74069</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/26829286/"">26829286</a>",pck,TCCAGTTCAGCAGTTCCTTATTCT,C. glutamicum
|
| 224 |
+
cut,S. pyogenes,Kamoun,"<a href=""/46966/"">46966</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/23929340/"">23929340</a>",PDS,GCCGTTAATTTGAGAGTCCA,N. benthamiana
|
| 225 |
+
cut,S. pyogenes,Kamoun,"<a href=""/49772/"">49772</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/24112467/"">24112467</a>",PDS1,"multiple, see article",N. benthamiana
|
| 226 |
+
cut,S. pyogenes,Sheen,"<a href=""/52255/"">52255</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/23929339/"">23929339</a>",PDS3,GGACTTTTGCCAGCCATGGT,A. thaliana
|
| 227 |
+
interfere,S. pyogenes,Lu,"<a href=""/74066/"">74066</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/26829286/"">26829286</a>",pgi,TGACCGATCATTACTCAAACTTCC,C. glutamicum
|
| 228 |
+
interfere,S. pyogenes,Lu,"<a href=""/74067/"">74067</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/26829286/"">26829286</a>",pgi,TTGCCTGGAAGTTTGAGTAATGAT,C. glutamicum
|
| 229 |
+
activate,S. pyogenes,Gersbach,"<a href=""/60719/"">60719</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/25664691/"">25664691</a>",pGL3-Basic-8x-gRNA-eGFP reporter,AAAGGTCGAGAAACTGCAAA,synthetic
|
| 230 |
+
cut,S. pyogenes,Ward,"<a href=""/61252/"">61252</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/25491644/"">25491644</a>",pha-1,ATGAATAACTTGATGAACAT,C. elegans
|
| 231 |
+
cut,S. pyogenes,Kim,"<a href=""//""></a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/26479191/"">26479191</a>",PHYB,CACTAGGAGCAACACCCAA,A. thaliana
|
| 232 |
+
cut,S. pyogenes,Wolfe,"<a href=""/69240/"">69240</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/26480473/"">26480473</a>",PLXNB2,GGGCCCAACCTAGGGCATGG,H. sapiens
|
| 233 |
+
cut,S. pyogenes,Patron,"<a href=""/68253/"">68253</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/26616834/"">26616834</a>",PM19,GCTCTCCACTCTGGGCTCTT,H. vulgare
|
| 234 |
+
cut,S. pyogenes,Patron,"<a href=""/68254/"">68254</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/26616834/"">26616834</a>",PM19,GGCTGGCGTTGGTCGTAACA,H. vulgare
|
| 235 |
+
cut,S. pyogenes,Shaw,"<a href=""/79004/"">79004</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/26944679/"">26944679</a>",Prkaa1,TTATTGTCACAGGCATATGG,M. musculus
|
| 236 |
+
cut,S. pyogenes,Shaw,"<a href=""/79005/"">79005</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/26944679/"">26944679</a>",Prkaa2,ACAGGCATATGGTTGTCCAT,M. musculus
|
| 237 |
+
cut,S. pyogenes,Schmitt-Ulms,"<a href=""/61857/"">61857</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/25490046/"">25490046</a>",Prnp,GGTGGAACACCGGTGGAAGC,M. musculus
|
| 238 |
+
cut,S. pyogenes,Schmitt-Ulms,"<a href=""/61856/"">61856</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/25490046/"">25490046</a>",Prnp,TTGGCCCCATCCACCGCCAT,M. musculus
|
| 239 |
+
cut,N. meningitidis,Church,"<a href=""/48651/"">48651</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/24076762/"">24076762</a>",Protospacer A,TACCATCTCAAGCTTGTTGA,Synthetic
|
| 240 |
+
cut,S. thermophilus,Church,"<a href=""/48653/"">48653</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/24076762/"">24076762</a>",Protospacer A,TACCATCTCAAGCTTGTTGA,Synthetic
|
| 241 |
+
cut,T. denticola,Church,"<a href=""/48655/"">48655</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/24076762/"">24076762</a>",Protospacer A,TACCATCTCAAGCTTGTTGA,Synthetic
|
| 242 |
+
cut,N. meningitidis,Church,"<a href=""/48652/"">48652</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/24076762/"">24076762</a>",Protospacer B,ACTTTAAAAGTATTCGCCAT,Synthetic
|
| 243 |
+
cut,S. thermophilus,Church,"<a href=""/48654/"">48654</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/24076762/"">24076762</a>",Protospacer B,ACTTTAAAAGTATTCGCCAT,Synthetic
|
| 244 |
+
cut,T. denticola,Church,"<a href=""/48656/"">48656</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/24076762/"">24076762</a>",Protospacer B,ACTTTAAAAGTATTCGCCAT,Synthetic
|
| 245 |
+
cut,S. pyogenes,Moffat,"<a href=""/74184/"">74184</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/26627737/"">26627737</a>",PSMB2,ATGTTCTTGTCGCCTCCGAC,H. sapiens
|
| 246 |
+
cut,S. pyogenes,Moffat,"<a href=""/74185/"">74185</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/26627737/"">26627737</a>",PSMB2,AATATTGTCCAGATGAAGGA,H. sapiens
|
| 247 |
+
cut,S. pyogenes,Moffat,"<a href=""/74180/"">74180</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/26627737/"">26627737</a>",PSMD1,TGTGCGCTACGGAGCTGCAA,H. sapiens
|
| 248 |
+
cut,S. pyogenes,Moffat,"<a href=""/74181/"">74181</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/26627737/"">26627737</a>",PSMD1,ACCAGAGCCACAATAAGCCA,H. sapiens
|
| 249 |
+
cut,S. pyogenes,Jacks,"<a href=""/59909/"">59909</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/25119044/"">25119044</a>",Pten,AGATCGTTAGCAGAAACAAA,M. musculus
|
| 250 |
+
cut,S. pyogenes,Xue,"<a href=""/66588/"">66588</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/26018130/"">26018130</a>",Pten,GCTGTAGTAATATCTGCTAT,M. musculus
|
| 251 |
+
cut,S. pyogenes,Xue,"<a href=""/66587/"">66587</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/26018130/"">26018130</a>",Pten,GTTTCATAGCGGCCACGAAGT,M. musculus
|
| 252 |
+
interfere,S. pyogenes,Lu,"<a href=""/74070/"">74070</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/26829286/"">26829286</a>",pyk,AGATTGTATGTACCCTAGGCCCAG,C. glutamicum
|
| 253 |
+
interfere,S. pyogenes,Lu,"<a href=""/74072/"">74072</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/26829286/"">26829286</a>",pyk,ATTCCATCTGCACTAGCCACCGCT,C. glutamicum
|
| 254 |
+
tag,S. pyogenes,Mendenhall,"<a href=""/64057/"">64057</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/26355004/"">26355004</a>",RAD21,CCAAGGTTCCATATTATATAAGG,H. sapiens
|
| 255 |
+
cut,S. pyogenes,Fire,"<a href=""/59927/"">59927</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/25161212/"">25161212</a>",rde-1(D718),TGCCATTAACTATGTATGT,C. elegans
|
| 256 |
+
cut,S. pyogenes,Fire,"<a href=""/59928/"">59928</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/25161212/"">25161212</a>",rde-1(D801),GATATTGTAGTCTATCGAGA,C. elegans
|
| 257 |
+
cut,S. pyogenes,Fire,"<a href=""/59929/"">59929</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/25161212/"">25161212</a>",rde-1(H974),GATAAATGAGCATAATGAAC,C. elegans
|
| 258 |
+
interfere,S. pyogenes,Lu,"<a href=""/74075/"">74075</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/26829286/"">26829286</a>",rfp,AAGTTCGTATGGAAGGTTCCGTTAA,
|
| 259 |
+
cut,S. pyogenes,Joung,"<a href=""/42246/"">42246</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/23360964/"">23360964</a>",rgs4,GGAGAAGGTGAAGGACACTG,D. rerio
|
| 260 |
+
cut,S. pyogenes,Bornhauser,"<a href=""/75165/"">75165</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/27194728/"">27194728</a>",RIP3,TACACGAGTGATGGTTCGGT,H. sapiens
|
| 261 |
+
cut,S. pyogenes,Bornhauser,"<a href=""/75163/"">75163</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/27194728/"">27194728</a>",RIPK1,GCTCTGCTGGGAAGCGAATC,H. sapiens
|
| 262 |
+
cut,S. pyogenes,Joung,"<a href=""/47509/"">47509</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/23792628/"">23792628</a>",RNF2,GTCATCTTAGTCATTACCTG,H. sapiens
|
| 263 |
+
cut,S. pyogenes,Fire,"<a href=""/59930/"">59930</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/25161212/"">25161212</a>",rol-6(su1006),GTGAGACGTCAACAATATGG,C. elegans
|
| 264 |
+
cut,S. pyogenes,Kuhn,"<a href=""/64216/"">64216</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/25803306/"">25803306</a>",Rosa26,ACTCCAGTCTTTCTAGAAGA,M.musculus
|
| 265 |
+
cut,S. pyogenes,Marraffini,"<a href=""/44505/"">44505</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/23360965/"">23360965</a>",rpsL,AAAAAACCGAACTCCGCGCTGCGTAAAGTA,E. coli
|
| 266 |
+
interfere,S. pyogenes,Voigt,"<a href=""/62285/"">62285</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/25422271/"">25422271</a>",scramble,AACCCCTGATTGTATCCGCA,synthetic
|
| 267 |
+
cut,S. pyogenes,Chen,"<a href=""/47930/"">47930</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/23918387/"">23918387</a>",slc24a5 (golden),GGTCTCTCGCAGGATGTTGC,D. rerio
|
| 268 |
+
cut,S. pyogenes,Hanna,"<a href=""/59725/"">59725</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/25543152/"">25543152</a>",SOX17,GCCCAGCCCGGCCATCACCG,H. sapiens
|
| 269 |
+
activate,S. pyogenes,Wolfe,"<a href=""/50925/"">50925</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/24346702/"">24346702</a>",Sox17,GCTCCGGCTAGTTTTCCCGG,H. sapiens
|
| 270 |
+
activate,S. pyogenes,Wolfe,"<a href=""/50924/"">50924</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/24346702/"">24346702</a>",Sox17,GGAGGGGCAAGGGGCGGGCG,H. sapiens
|
| 271 |
+
activate,S. pyogenes,Wolfe,"<a href=""/50926/"">50926</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/24346702/"">24346702</a>",Sox17,GGGCAAGTACGTCGATTCCA,H. sapiens
|
| 272 |
+
activate,S. pyogenes,Wolfe,"<a href=""/50923/"">50923</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/24346702/"">24346702</a>",Sox17,GGGCGTGGGCCTAACGACGC,H. sapiens
|
| 273 |
+
cut,S. pyogenes,Fire,"<a href=""/59935/"">59935</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/25161212/"">25161212</a>",sqt-1,GGAAGGACATAGTTGTCAT,C. elegans
|
| 274 |
+
cut,S. pyogenes,Fire,"<a href=""/60212/"">60212</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/25161212/"">25161212</a>",sqt-1,TGTGGAGTTGGGGTAGCGT,C. elegans
|
| 275 |
+
activate/interfere,S. pyogenes,Qi,"<a href=""/62338/"">62338</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/25533786/"">25533786</a>",sv40 promoter,CATACTTCTGCCTGCTGGGGAGCCTG,synthetic
|
| 276 |
+
scaffold,S. pyogenes,Qi & Lim,"<a href=""/62340/"">62340</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/25533786/"">25533786</a>",SV40.NT1,GAATAGCTCAGAGGCCGAGG,H. sapiens
|
| 277 |
+
cut,S. pyogenes,Seydoux,"<a href=""/66100/"">66100</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/25249454/"">25249454</a>",swan-2,ACAAATTGATATCCAATCA,C. elegans
|
| 278 |
+
cut,S. pyogenes,Seydoux,"<a href=""/66099/"">66099</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/25249454/"">25249454</a>",swan-2,TGAAGAAAGTTATACTCGA,C. elegans
|
| 279 |
+
cut,S. pyogenes,Hanna,"<a href=""/59726/"">59726</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/25543152/"">25543152</a>",T (BRACHYURY),CACGCGCAGTTCGCGCTCTG,H. sapiens
|
| 280 |
+
cut,S. pyogenes,"Guigo, Johnson","<a href=""/72627/"">72627</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/26493208/"">26493208</a>",TCRC,gRNA1:GGGGAGCGGGAAAGCGGTCG; gRNA2:AACTGACCTTCAGGCCCGTA,H. sapiens
|
| 281 |
+
cut,N. meningitidis,Thomson,"<a href=""/47869/"">47869</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/23940360/"">23940360</a>",tdtomato,CGAAATGAGAAAGGGAGCTACAAC,Synthetic
|
| 282 |
+
scaffold,S. pyogenes,Qi & Lim,"<a href=""/62320/"">62320</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/25533786/"">25533786</a>",TEF,TTGATATTTAAGTTAATAAA,S. cerevisiae
|
| 283 |
+
interfere,S. pyogenes,Weissman,"<a href=""/46922/"">46922</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/23849981/"">23849981</a>",TEF1,TTGATATTTAAGTTAATAAA,S. cerevisiae
|
| 284 |
+
visualize,S. pyogenes,Qi,"<a href=""/51024/"">51024</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/24360272/"">24360272</a>",telomeres,GTTAGGGTTAGGGTTAGGGTTA,H. sapiens
|
| 285 |
+
scaffold,S. pyogenes,Qi & Lim,"<a href=""/62313/"">62313</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/25533786/"">25533786</a>",TET,ACTTTTCTCTATCACTGATA,S. cerevisiae
|
| 286 |
+
interfere,S. pyogenes,Weissman,"<a href=""/46923/"">46923</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/23849981/"">23849981</a>",TET promoter,TATCAGTGATAGAGAAAAGT,
|
| 287 |
+
activate/interfere,S. pyogenes,Qi,"<a href=""/62327/"">62327</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/25533786/"">25533786</a>",Tet3G,GTACGTTCTCTATCACTGATA,synthetic
|
| 288 |
+
cut,S. pyogenes,Shaw,"<a href=""/79006/"">79006</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/26944679/"">26944679</a>",Tfeb,AGCACTGTTGCCGGCCGAGG,M. musculus
|
| 289 |
+
RNA targeting,S. pyogenes,Yeo,"<a href=""/74709/"">74709</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/26997482/"">26997482</a>",TFRC,GCACUGACCAGAUAAGAAUG,H. sapiens
|
| 290 |
+
cut,S. pyogenes,"Guigo, Johnson","<a href=""/72626/"">72626</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/26493208/"">26493208</a>",TFRC,"gRNA1:GCAGCCTCAGAAATACAAAA, gRNA2CGGGATATCGGGTGGCGGCT",H. sapiens
|
| 291 |
+
cut,S. pyogenes,Wolfe,"<a href=""/69239/"">69239</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/26480473/"">26480473</a>",TGM2,CCTGGACCCAACGCCCCAGG,H. sapiens
|
| 292 |
+
cut,S. pyogenes,Sibley,"<a href=""/59855/"">59855</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/25480939/"">25480939</a>",TGME49_290860,ATTGGTCTGACAGCGATGTG,T. gondii
|
| 293 |
+
cut,S. pyogenes,Joung,"<a href=""/42247/"">42247</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/23360964/"">23360964</a>",th,GGATGCGCGTAAGGAGCGCG,D. rerio
|
| 294 |
+
cut,S. pyogenes,Du,"<a href=""/65565/"">65565</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/25849248/"">25849248</a>",th,GGGTTGTTACACTCATAAAG,D. rerio
|
| 295 |
+
cut,S. pyogenes,Joung,"<a href=""/42248/"">42248</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/23360964/"">23360964</a>",tia1l,GGTATGTCGGGAACCTCTCC,D. rerio
|
| 296 |
+
cut,S. pyogenes,Joung,"<a href=""/42249/"">42249</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/23360964/"">23360964</a>",tph1a,GGGAAAACACAACCGCAGCC,D. rerio
|
| 297 |
+
scaffold,S. pyogenes,Qi & Lim,"<a href=""/62325/"">62325</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/25533786/"">25533786</a>",TRE3G,GTACGTTCTCTATCACTGATA,H. sapiens
|
| 298 |
+
cut,S. pyogenes,Jin,"<a href=""/64331/"">64331</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/25281382/"">25281382</a>",trp1,GTCAATTGTTCTCTTTCTAT,S. cerevisiae
|
| 299 |
+
cut,S. pyogenes,Jacks,"<a href=""/59910/"">59910</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/25119044/"">25119044</a>",Trp53,CCTCGAGCTCCCTCTGAGCC,M. musculus
|
| 300 |
+
cut,S. pyogenes,Wolfe,"<a href=""/69234/"">69234</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/26480473/"">26480473</a>",TS2,GACCCCCTCCACCCCGCCTC,H. sapiens
|
| 301 |
+
cut,S. pyogenes,Wolfe,"<a href=""/69235/"">69235</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/26480473/"">26480473</a>",TS3,GGTGAGTGAGTGTGTGCGTG,H. sapiens
|
| 302 |
+
cut,S. pyogenes,Wolfe,"<a href=""/69236/"">69236</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/26480473/"">26480473</a>",TS4,GAGTCCGAGCAGAAGAAGAA,H. sapiens
|
| 303 |
+
cut,S. pyogenes,Goldstein,"<a href=""/47550/"">47550</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/23995389/"">23995389</a>",ttTi5605 Mos1 insertion site,ATATCAGTCTGTTTCGTAA,C. elegans
|
| 304 |
+
cut,S. pyogenes,Chen,"<a href=""/46761/"">46761</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/23918387/"">23918387</a>",tyr,CCCCAGAAGTCCTCCAGTCC,D. rerio
|
| 305 |
+
cut,S. pyogenes,Chen,"<a href=""/64250/"">64250</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/25855067/"">25855067</a>",tyr,GGACTGGAGGACTTCTGGGG,D. rerio
|
| 306 |
+
cut,S. pyogenes,Mashimo,"<a href=""/60966/"">60966</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/24967838/"">24967838</a>",Tyr (albino),TTTCCAGGATTATGTAATAG,R. norvegicus
|
| 307 |
+
cut,S. pyogenes,Mashimo,"<a href=""/60967/"">60967</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/24967838/"">24967838</a>",Tyr (wild type),TTTCCAGGATTACGTAATAG,R. norvegicus
|
| 308 |
+
cut,S. pyogenes,"Guigo, Johnson","<a href=""/72628/"">72628</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/26493208/"">26493208</a>",UCA1,gRNA1:GGTTTCCTTTTAGATGACGG; gRNA2:TCTGAAAAGAGAGTCAGCGA,H. sapiens
|
| 309 |
+
cut,S. pyogenes,Fire,"<a href=""/59932/"">59932</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/25161212/"">25161212</a>",unc-109(n499),GGAACTCGTGTCAAAACAAC,C. elegans
|
| 310 |
+
cut,S. pyogenes,Calarco,"<a href=""/46169/"">46169</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/23817069/"">23817069</a>",unc-119,GAATTTTCTGAAATTAAAGA,C. elegans
|
| 311 |
+
cut,S. pyogenes,Mello,"<a href=""/58202/"">58202</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/24879462/"">24879462</a>",unc-22,GAACCCGTTGCCGAATACAC,C. elegans
|
| 312 |
+
cut,S. pyogenes,Fire,"<a href=""/59931/"">59931</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/25161212/"">25161212</a>",unc-58(e665),TCCACGCACATGGTCACTA,C. elegans
|
| 313 |
+
cut,S. pyogenes,Sibley,"<a href=""/54467/"">54467</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/24825012/"">24825012</a>",UPRT,GGCGTCTCGATTGTGAGAGC,Toxoplasma gondii
|
| 314 |
+
cut,S. pyogenes,Jin,"<a href=""/64330/"">64330</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/25281382/"">25281382</a>",ura3,GAGTAAAAAATTGTACTTGG,S. cerevisiae
|
| 315 |
+
cut,S. pyogenes,Ye,"<a href=""/61812/"">61812</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/24424410/"">24424410</a>",USP13,GCCGCCCGGCATGCCGAACA,H. sapiens
|
| 316 |
+
cut,S. pyogenes,Joung,"<a href=""/47506/"">47506</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/23792628/"">23792628</a>",VEGF,GACCCCCTCCACCCCGCCTC,H. sapiens
|
| 317 |
+
cut,S. pyogenes,Joung,"<a href=""/47505/"">47505</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/23792628/"">23792628</a>",VEGF,GGGTGGGGGGAGTTTGCTCC,H. sapiens
|
| 318 |
+
cut,S. pyogenes,Joung,"<a href=""/47507/"">47507</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/23792628/"">23792628</a>",VEGF,GGTGAGTGAGTGTGTGCGTG,H. sapiens
|
| 319 |
+
interfere,S. pyogenes,Voigt,"<a href=""/62286/"">62286</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/25422271/"">25422271</a>",VR,TGCGCTCGGTCGTTCGGCTG,synthetic
|
| 320 |
+
nick,S. pyogenes,Yang,"<a href=""/73228/"">73228</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/27213844/"">27213844</a>",xylR,CGAGTTAGACATAATAGTGA,C. beijerinckii
|
| 321 |
+
cut,S. pyogenes,Ward,"<a href=""/61250/"">61250</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/25491644/"">25491644</a>",Y61A9LA.1,GGATGGATGTGTAGTCAATT,C. elegans
|
| 322 |
+
cut,S. pyogenes,Liu,"<a href=""/49331/"">49331</a>","<a href=""https://www.ncbi.nlm.nih.gov/pubmed/24326186/"">24326186</a>",yellow,GGTTTTGGACACTGGAACCG,D. melanogaster
|
BioScientist/agent_system/engines/v1_executor_backup/know_how/sgRNA_design_guide.md
ADDED
|
@@ -0,0 +1,419 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# sgRNA Design Guide: Three-Tiered Approach
|
| 2 |
+
|
| 3 |
+
---
|
| 4 |
+
|
| 5 |
+
## Metadata
|
| 6 |
+
|
| 7 |
+
**Short Description**: Comprehensive guide for finding or designing sgRNAs using validated sequences, CRISPick datasets, or de novo design tools.
|
| 8 |
+
|
| 9 |
+
**Authors**: Biomni Team
|
| 10 |
+
|
| 11 |
+
**Version**: 1.0
|
| 12 |
+
|
| 13 |
+
**Last Updated**: November 2025
|
| 14 |
+
|
| 15 |
+
**License**: CC BY 4.0
|
| 16 |
+
|
| 17 |
+
**Commercial Use**: ✅ Allowed
|
| 18 |
+
|
| 19 |
+
## Citations and Acknowledgments
|
| 20 |
+
|
| 21 |
+
### If you use validated sgRNAs from our database (Option 1):
|
| 22 |
+
- **Database Source**: Addgene (https://www.addgene.org)
|
| 23 |
+
- **Citation**: Always cite the original publication associated with each sgRNA using the PubMed ID provided in the database
|
| 24 |
+
- **Acknowledgment**: "Validated sgRNA sequences obtained from Addgene (https://www.addgene.org/crispr/reference/grna-sequence/)"
|
| 25 |
+
|
| 26 |
+
### If you use CRISPick designs (Option 2):
|
| 27 |
+
- **Acknowledgment Statement**: "Guide designs provided by the CRISPick web tool of the GPP at the Broad Institute"
|
| 28 |
+
- **Citation for Cas9 designs (SpCas9, SaCas9)**: Sanson KR, et al. Optimized libraries for CRISPR-Cas9 genetic screens with multiple modalities. Nat Commun. 2018;9(1):5416. PMID: 30575746
|
| 29 |
+
- **Citation for Cas12a designs (AsCas12a, enAsCas12a)**: DeWeirdt PC, et al. Optimization of AsCas12a for combinatorial genetic screens in human cells. Nat Biotechnol. 2021;39(1):94-104. PMID: 32661438
|
| 30 |
+
- Note: This paper describes enAsCas12a optimization; specify which variant you used in your methods
|
| 31 |
+
|
| 32 |
+
---
|
| 33 |
+
|
| 34 |
+
## Overview
|
| 35 |
+
|
| 36 |
+
This guide provides a three-tiered approach to sgRNA design, prioritizing validated sequences before moving to computational predictions. Always start with Option 1 and proceed to subsequent options only if needed.
|
| 37 |
+
|
| 38 |
+
|
| 39 |
+
|
| 40 |
+
## Option 1: Search Validated sgRNA Sequences (Recommended First)
|
| 41 |
+
|
| 42 |
+
### 1.1 Search for Validated sgRNAs
|
| 43 |
+
|
| 44 |
+
**IMPORTANT**: You MUST complete BOTH Method 1 AND Method 2 before proceeding to Option 2. Do not skip Method 2 even if Method 1 finds no results.
|
| 45 |
+
|
| 46 |
+
#### Method 1: Search Our Database (Fastest)
|
| 47 |
+
|
| 48 |
+
We maintain a curated database of 300+ validated sgRNA sequences from Addgene with experimental evidence.
|
| 49 |
+
|
| 50 |
+
**Location**: `biomni/know_how/resource/addgene_grna_sequences.csv`
|
| 51 |
+
|
| 52 |
+
**Search the database**:
|
| 53 |
+
```python
|
| 54 |
+
import pandas as pd
|
| 55 |
+
|
| 56 |
+
# Load the database
|
| 57 |
+
df = pd.read_csv('addgene_grna_sequences.csv')
|
| 58 |
+
|
| 59 |
+
# Search for your gene
|
| 60 |
+
gene_name = "TP53"
|
| 61 |
+
results = df[df['Target_Gene'].str.upper() == gene_name.upper()]
|
| 62 |
+
|
| 63 |
+
# Filter by species and application
|
| 64 |
+
results_filtered = results[
|
| 65 |
+
(results['Target_Species'] == 'H. sapiens') &
|
| 66 |
+
(results['Application'] == 'cut') # or 'activate', 'RNA targeting'
|
| 67 |
+
]
|
| 68 |
+
|
| 69 |
+
# Display results with references
|
| 70 |
+
print(results_filtered[['Target_Gene', 'Target_Sequence',
|
| 71 |
+
'Plasmid_ID', 'PubMed_ID', 'Depositor']])
|
| 72 |
+
```
|
| 73 |
+
|
| 74 |
+
**Database columns**:
|
| 75 |
+
- `Target_Gene`: Gene symbol
|
| 76 |
+
- `Target_Species`: Organism (H. sapiens, M. musculus, etc.)
|
| 77 |
+
- `Target_Sequence`: 20bp sgRNA sequence (5' to 3')
|
| 78 |
+
- `Application`: cut (knockout), activate (CRISPRa), RNA targeting (CRISPRi)
|
| 79 |
+
- `Cas9_Species`: S. pyogenes, S. aureus, etc.
|
| 80 |
+
- `Plasmid_ID`: Addgene plasmid number
|
| 81 |
+
- `Plasmid_URL`: Direct link to plasmid page
|
| 82 |
+
- `PubMed_ID`: **Publication reference** (cite this in your work)
|
| 83 |
+
- `PubMed_URL`: Direct link to paper
|
| 84 |
+
- `Depositor`: Research lab that contributed the sequence
|
| 85 |
+
|
| 86 |
+
#### Method 2: Advanced Web Search (REQUIRED - Do Not Skip)
|
| 87 |
+
|
| 88 |
+
**CRITICAL**: Even if Method 1 found no results, you MUST perform this literature search before moving to Option 2. Many validated sgRNAs are published in literature but not in the Addgene database.
|
| 89 |
+
|
| 90 |
+
Use `advanced_web_search_claude` from `biomni.tool.literature` to find validated sgRNAs from literature and databases:
|
| 91 |
+
|
| 92 |
+
```python
|
| 93 |
+
from biomni.tool.literature import advanced_web_search_claude
|
| 94 |
+
|
| 95 |
+
# Example usage
|
| 96 |
+
results = advanced_web_search_claude("sgRNA TP53 validated H. sapiens experimental")
|
| 97 |
+
```
|
| 98 |
+
|
| 99 |
+
**Search queries to try (use multiple):**
|
| 100 |
+
```
|
| 101 |
+
"sgRNA" OR "guide RNA" "[GENE_NAME]" validated experimental
|
| 102 |
+
"CRISPR knockout" "[GENE_NAME]" sgRNA sequence validated
|
| 103 |
+
"[GENE_NAME]" sgRNA "cutting efficiency" OR "on-target"
|
| 104 |
+
"[GENE_NAME]" "guide sequence" CRISPR validated
|
| 105 |
+
```
|
| 106 |
+
|
| 107 |
+
**Example for TP53:**
|
| 108 |
+
```
|
| 109 |
+
"sgRNA" "TP53" validated "H. sapiens" experimental
|
| 110 |
+
"CRISPR knockout" "TP53" guide sequence validated
|
| 111 |
+
```
|
| 112 |
+
|
| 113 |
+
**What to search for in results:**
|
| 114 |
+
- Published papers with validated sgRNA sequences
|
| 115 |
+
- Supplementary materials containing sgRNA sequences
|
| 116 |
+
- Other CRISPR databases (e.g., GenScript, Horizon Discovery)
|
| 117 |
+
- Laboratory protocols with specific sgRNA sequences
|
| 118 |
+
|
| 119 |
+
**IMPORTANT**: Spend adequate time searching literature. Look through at least the first 10-15 search results and check supplementary materials of relevant papers.
|
| 120 |
+
|
| 121 |
+
#### What to Do with Results:
|
| 122 |
+
|
| 123 |
+
✅ **If you find matching sgRNAs (from either method):**
|
| 124 |
+
1. **Record the sgRNA sequence** (20bp target sequence)
|
| 125 |
+
2. **Note the reference**:
|
| 126 |
+
- From database: Use `PubMed_ID` to cite the original paper
|
| 127 |
+
- From web search: Record the publication DOI/PubMed ID
|
| 128 |
+
3. **Record validation details**: Cell line, cutting efficiency, any reported off-targets
|
| 129 |
+
|
| 130 |
+
|
| 131 |
+
**Example result format:**
|
| 132 |
+
```
|
| 133 |
+
Gene: TP53
|
| 134 |
+
sgRNA sequence: GAGGTTGTGAGGCGCTGCCC
|
| 135 |
+
Species: H. sapiens (human)
|
| 136 |
+
Application: Knockout (cut)
|
| 137 |
+
Reference: PubMed ID 24336569 (Ran et al., 2013)
|
| 138 |
+
Validation: Tested in HEK293T cells, 85% cutting efficiency
|
| 139 |
+
```
|
| 140 |
+
|
| 141 |
+
❌ **If no matches found in BOTH Method 1 AND Method 2:**
|
| 142 |
+
Only then proceed to **Option 2: Download CRISPick Dataset**
|
| 143 |
+
|
| 144 |
+
|
| 145 |
+
|
| 146 |
+
## Option 2: Download Pre-Computed sgRNAs from CRISPick
|
| 147 |
+
|
| 148 |
+
### When to Use This Option?
|
| 149 |
+
- No validated sgRNAs found in Addgene
|
| 150 |
+
- Need comprehensive coverage of a gene
|
| 151 |
+
- Want multiple sgRNA options with predicted scores
|
| 152 |
+
- Working with genome-scale screening
|
| 153 |
+
|
| 154 |
+
### 2.1 Overview of CRISPick
|
| 155 |
+
|
| 156 |
+
**CRISPick** (from Broad Institute GPP) provides pre-computed sgRNA designs for entire genomes with 238 available datasets covering:
|
| 157 |
+
- Human (GRCh38, GRCh37)
|
| 158 |
+
- Mouse (GRCm38, GRCm39)
|
| 159 |
+
- Dog, Cow, Monkey, and other model organisms
|
| 160 |
+
- Multiple Cas enzymes (SpCas9, SaCas9, AsCas12a, enAsCas12a)
|
| 161 |
+
- **IMPORTANT**: AsCas12a and enAsCas12a are DIFFERENT enzymes
|
| 162 |
+
- **AsCas12a**: Wild-type Acidaminococcus sp. Cas12a
|
| 163 |
+
- **enAsCas12a**: Enhanced variant with improved activity
|
| 164 |
+
- **Critical**: sgRNAs designed for enAsCas12a may NOT work with wild-type AsCas12a
|
| 165 |
+
- Always match the dataset to your specific Cas12a variant
|
| 166 |
+
- Different applications (knockout, activation, inhibition)
|
| 167 |
+
|
| 168 |
+
### 2.2 Find the Download Link
|
| 169 |
+
|
| 170 |
+
**All 238 download links are available in**: `biomni/know_how/resource/CRISPick_download_links.txt`
|
| 171 |
+
|
| 172 |
+
#### Step 1: Understand File Naming Convention
|
| 173 |
+
|
| 174 |
+
Files are named: `sgRNA_design_{TAXID}_{GENOME}_{CAS}_{APPLICATION}_{ALGORITHM}_{SOURCE}_{DATE}.txt.gz`
|
| 175 |
+
|
| 176 |
+
**Common datasets:**
|
| 177 |
+
|
| 178 |
+
| Organism | Genome | Cas9 | Application | Search Pattern |
|
| 179 |
+
|-|--||-|-|
|
| 180 |
+
| Human | GRCh38 | SpCas9 | Knockout | `9606_GRCh38_SpyoCas9_CRISPRko` |
|
| 181 |
+
| Human | GRCh38 | SpCas9 | Activation | `9606_GRCh38_SpyoCas9_CRISPRa` |
|
| 182 |
+
| Human | GRCh38 | SaCas9 | Knockout | `9606_GRCh38_SaurCas9_CRISPRko` |
|
| 183 |
+
| Mouse | GRCm38 | SpCas9 | Knockout | `10090_GRCm38_SpyoCas9_CRISPRko` |
|
| 184 |
+
| Mouse | GRCm38 | SpCas9 | Activation | `10090_GRCm38_SpyoCas9_CRISPRa` |
|
| 185 |
+
|
| 186 |
+
**Key components:**
|
| 187 |
+
- **TAXID**: `9606` (Human), `10090` (Mouse), `9615` (Dog), `9913` (Cow)
|
| 188 |
+
- **CAS**:
|
| 189 |
+
- `SpyoCas9` (SpCas9, NGG PAM)
|
| 190 |
+
- `SaurCas9` (SaCas9, NNGRRT PAM)
|
| 191 |
+
- `AsCas12a` (Wild-type Cas12a, TTTV PAM)
|
| 192 |
+
- `enAsCas12a` (Enhanced Cas12a, TTTV PAM)
|
| 193 |
+
- **WARNING**: Do NOT use AsCas12a datasets if you have enAsCas12a, and vice versa
|
| 194 |
+
- **APPLICATION**: `CRISPRko` (knockout), `CRISPRa` (activation), `CRISPRi` (inhibition)
|
| 195 |
+
|
| 196 |
+
#### Step 2: Find Your Download URL
|
| 197 |
+
|
| 198 |
+
```bash
|
| 199 |
+
# Search the download links file
|
| 200 |
+
grep "9606_GRCh38_SpyoCas9_CRISPRko" biomni/know_how/resource/CRISPick_download_links.txt
|
| 201 |
+
|
| 202 |
+
# Or for mouse
|
| 203 |
+
grep "10090_GRCm38_SpyoCas9_CRISPRko" biomni/know_how/resource/CRISPick_download_links.txt
|
| 204 |
+
```
|
| 205 |
+
|
| 206 |
+
#### Step 3: Download and Extract
|
| 207 |
+
|
| 208 |
+
```bash
|
| 209 |
+
# Copy the URL from download_links.txt, then:
|
| 210 |
+
wget [PASTE_URL_HERE]
|
| 211 |
+
|
| 212 |
+
# Extract the file
|
| 213 |
+
gunzip sgRNA_design_*.txt.gz
|
| 214 |
+
```
|
| 215 |
+
|
| 216 |
+
**File sizes**: Knockout (300-700 MB), Activation (50-100 MB), Summary files (1-3 MB)
|
| 217 |
+
|
| 218 |
+
### 2.4 Understanding the File Format
|
| 219 |
+
|
| 220 |
+
The `.txt` file is tab-delimited. Column names differ between knockout and activation/inhibition datasets.
|
| 221 |
+
|
| 222 |
+
**Essential Columns (All files):**
|
| 223 |
+
- **sgRNA Sequence**: The 20bp guide RNA sequence (5' to 3')
|
| 224 |
+
- **Target Gene Symbol**: Gene name (e.g., "TP53", "BRCA1")
|
| 225 |
+
- **Combined Rank**: Overall ranking (lower = better) - **Use this by default**
|
| 226 |
+
- **On-Target Rank**: Ranking by efficiency only (lower = better)
|
| 227 |
+
- **Off-Target Rank**: Ranking by specificity only (lower = better)
|
| 228 |
+
- **PAM Sequence**: The PAM sequence (e.g., "AGG", "TGG")
|
| 229 |
+
|
| 230 |
+
**Knockout-specific columns:**
|
| 231 |
+
- **sgRNA Cut Position (1-based)**: Genomic coordinate of cut site
|
| 232 |
+
- **Exon Number**: Which exon is targeted
|
| 233 |
+
- **Target Cut %**: Percentage of protein affected
|
| 234 |
+
|
| 235 |
+
**Activation/Inhibition-specific columns:**
|
| 236 |
+
- **sgRNA 'Cut' Position**: Position relative to gene
|
| 237 |
+
- **sgRNA 'Cut' Site TSS Offset**: Distance from transcription start site (bp)
|
| 238 |
+
- **DHS Score**: DNase hypersensitivity score (for CRISPRa)
|
| 239 |
+
|
| 240 |
+
### 2.5 Extract and Select sgRNAs
|
| 241 |
+
|
| 242 |
+
#### Step 1: Load Data and Filter for Your Gene
|
| 243 |
+
|
| 244 |
+
```python
|
| 245 |
+
import pandas as pd
|
| 246 |
+
|
| 247 |
+
# Load the dataset
|
| 248 |
+
df = pd.read_csv('sgRNA_design_9606_GRCh38_SpyoCas9_CRISPRko_*.txt',
|
| 249 |
+
sep='\t', low_memory=False)
|
| 250 |
+
|
| 251 |
+
# Filter for your gene
|
| 252 |
+
gene_name = "TP53"
|
| 253 |
+
gene_sgrnas = df[df['Target Gene Symbol'] == gene_name].copy()
|
| 254 |
+
|
| 255 |
+
print(f"Found {len(gene_sgrnas)} sgRNAs for {gene_name}")
|
| 256 |
+
```
|
| 257 |
+
|
| 258 |
+
#### Step 2: Select Top sgRNAs
|
| 259 |
+
|
| 260 |
+
**Default: Use Combined Rank (balances efficiency and specificity)**
|
| 261 |
+
```python
|
| 262 |
+
# Sort by Combined Rank (lower is better)
|
| 263 |
+
top_sgrnas = gene_sgrnas.nsmallest(10, 'Combined Rank')
|
| 264 |
+
|
| 265 |
+
print(top_sgrnas[['sgRNA Sequence', 'Combined Rank',
|
| 266 |
+
'Exon Number', 'sgRNA Cut Position (1-based)']])
|
| 267 |
+
```
|
| 268 |
+
|
| 269 |
+
**Option A: Prioritize On-Target Efficiency**
|
| 270 |
+
```python
|
| 271 |
+
# Sort by On-Target Rank (for maximum cutting efficiency)
|
| 272 |
+
efficient_sgrnas = gene_sgrnas.nsmallest(10, 'On-Target Rank')
|
| 273 |
+
```
|
| 274 |
+
|
| 275 |
+
**Option B: Prioritize Off-Target Specificity**
|
| 276 |
+
```python
|
| 277 |
+
# Sort by Off-Target Rank (for maximum specificity)
|
| 278 |
+
specific_sgrnas = gene_sgrnas.nsmallest(10, 'Off-Target Rank')
|
| 279 |
+
```
|
| 280 |
+
|
| 281 |
+
#### Step 3: Filter by Custom Criteria (Optional)
|
| 282 |
+
|
| 283 |
+
**Filter by Exon Number:**
|
| 284 |
+
```python
|
| 285 |
+
# Target specific exon (e.g., exon 5)
|
| 286 |
+
exon5_sgrnas = gene_sgrnas[gene_sgrnas['Exon Number'] == 5]
|
| 287 |
+
top_exon5 = exon5_sgrnas.nsmallest(5, 'Combined Rank')
|
| 288 |
+
```
|
| 289 |
+
|
| 290 |
+
**Filter by Genomic Position:**
|
| 291 |
+
```python
|
| 292 |
+
# Target specific genomic range
|
| 293 |
+
position_filtered = gene_sgrnas[
|
| 294 |
+
(gene_sgrnas['sgRNA Cut Position (1-based)'] >= 7572000) &
|
| 295 |
+
(gene_sgrnas['sgRNA Cut Position (1-based)'] <= 7575000)
|
| 296 |
+
]
|
| 297 |
+
```
|
| 298 |
+
|
| 299 |
+
**Target Early Exons for Knockout:**
|
| 300 |
+
```python
|
| 301 |
+
# Get sgRNAs from first 3 exons
|
| 302 |
+
early_exons = gene_sgrnas[gene_sgrnas['Exon Number'] <= 3]
|
| 303 |
+
top_early = early_exons.nsmallest(10, 'Combined Rank')
|
| 304 |
+
```
|
| 305 |
+
|
| 306 |
+
**Filter by Target Cut Percentage:**
|
| 307 |
+
```python
|
| 308 |
+
# Target sgRNAs that affect significant portion of protein
|
| 309 |
+
high_impact = gene_sgrnas[gene_sgrnas['Target Cut %'] <= 50] # Cut in first 50%
|
| 310 |
+
top_high_impact = high_impact.nsmallest(10, 'Combined Rank')
|
| 311 |
+
```
|
| 312 |
+
|
| 313 |
+
#### Step 4: Select Multiple sgRNAs for Validation
|
| 314 |
+
|
| 315 |
+
```python
|
| 316 |
+
# Get top 4 sgRNAs from different exons for redundancy
|
| 317 |
+
final_selection = gene_sgrnas.sort_values('Combined Rank').groupby('Exon Number').head(1).head(4)
|
| 318 |
+
|
| 319 |
+
# Save results
|
| 320 |
+
final_selection.to_csv(f'{gene_name}_selected_sgRNAs.csv', index=False)
|
| 321 |
+
|
| 322 |
+
print("\nSelected sgRNAs:")
|
| 323 |
+
print(final_selection[['sgRNA Sequence', 'Exon Number', 'Combined Rank']])
|
| 324 |
+
```
|
| 325 |
+
|
| 326 |
+
### 2.6 What to Do with Results
|
| 327 |
+
|
| 328 |
+
✅ **Once you have selected sgRNAs:**
|
| 329 |
+
1. Choose **3-4 sgRNAs** (use Combined_Rank by default)
|
| 330 |
+
|
| 331 |
+
❌ **If dataset doesn't cover your gene or organism:**
|
| 332 |
+
Proceed to **Option 3: De Novo sgRNA Design**
|
| 333 |
+
|
| 334 |
+
|
| 335 |
+
|
| 336 |
+
## Option 3: General sgRNA Design Guidelines (Last Resort)
|
| 337 |
+
|
| 338 |
+
### When to Use This Option?
|
| 339 |
+
- Gene not covered in CRISPick datasets
|
| 340 |
+
- Non-model organism
|
| 341 |
+
- Custom design requirements
|
| 342 |
+
|
| 343 |
+
### General Design Rules
|
| 344 |
+
|
| 345 |
+
#### Essential Requirements:
|
| 346 |
+
1. **Length**:
|
| 347 |
+
- 20 bp for SpCas9 and SaCas9
|
| 348 |
+
- 23-25 bp for Cas12a variants (AsCas12a, enAsCas12a)
|
| 349 |
+
2. **PAM sequence**:
|
| 350 |
+
- **SpCas9**: Requires **NGG** immediately after target (3' end)
|
| 351 |
+
- **SaCas9**: Requires **NNGRRT** immediately after target (3' end)
|
| 352 |
+
- **AsCas12a** (wild-type): Requires **TTTV** before target (5' end)
|
| 353 |
+
- **enAsCas12a** (enhanced): Requires **TTTV** before target (5' end)
|
| 354 |
+
- **CRITICAL**: Guides designed for enAsCas12a may not work with wild-type AsCas12a due to different activity profiles
|
| 355 |
+
3. **GC content**: 40-60% is optimal
|
| 356 |
+
4. **Avoid**:
|
| 357 |
+
- TTTT sequences (terminates transcription)
|
| 358 |
+
- Long runs of same nucleotide (>4 repeats)
|
| 359 |
+
|
| 360 |
+
#### Target Location:
|
| 361 |
+
- **For knockout**: Target early exons (first 50% of gene)
|
| 362 |
+
- **For activation**: Target -200 to +1 bp from transcription start site (TSS)
|
| 363 |
+
- **For inhibition**: Target -50 to +300 bp from TSS
|
| 364 |
+
|
| 365 |
+
#### Best Practices:
|
| 366 |
+
- **Test 3-4 different sgRNAs** per target gene
|
| 367 |
+
- Select sgRNAs with high efficiency scores (>0.5) and minimal off-targets
|
| 368 |
+
- Validate experimentally with Sanger sequencing
|
| 369 |
+
|
| 370 |
+
|
| 371 |
+
|
| 372 |
+
## Quick Start Examples
|
| 373 |
+
|
| 374 |
+
### Example 1: Knockout TP53 in Human Cells
|
| 375 |
+
|
| 376 |
+
**Step 1**: Check Addgene
|
| 377 |
+
```python
|
| 378 |
+
df = pd.read_csv('addgene_grna_sequences.csv')
|
| 379 |
+
tp53_results = df[(df['Target_Gene'] == 'TP53') &
|
| 380 |
+
(df['Target_Species'] == 'H. sapiens') &
|
| 381 |
+
(df['Application'] == 'cut')]
|
| 382 |
+
# Result: Found 0 entries → Proceed to Option 2
|
| 383 |
+
```
|
| 384 |
+
|
| 385 |
+
**Step 2**: Download CRISPick dataset
|
| 386 |
+
```bash
|
| 387 |
+
# Download human GRCh38 SpCas9 knockout dataset
|
| 388 |
+
wget https://portals.broadinstitute.org/gppx/public/sgrna_design/api/downloads/\
|
| 389 |
+
sgRNA_design_9606_GRCh38_SpyoCas9_CRISPRko_RS3seq-Chen2013+RS3target_NCBI_20241104.txt.gz
|
| 390 |
+
|
| 391 |
+
gunzip sgRNA_design_9606_GRCh38_SpyoCas9_CRISPRko_*.txt.gz
|
| 392 |
+
```
|
| 393 |
+
|
| 394 |
+
**Step 3**: Extract TP53 sgRNAs
|
| 395 |
+
```python
|
| 396 |
+
df = pd.read_csv('sgRNA_design_9606_GRCh38_SpyoCas9_CRISPRko_*.txt', sep='\t')
|
| 397 |
+
tp53 = df[df['Gene_Symbol'] == 'TP53']
|
| 398 |
+
top_sgrnas = tp53[
|
| 399 |
+
(tp53['sgRNA_score'] > 0.6) &
|
| 400 |
+
(tp53['Off_target_stringency'] > 0.5)
|
| 401 |
+
].sort_values('sgRNA_score', ascending=False).head(4)
|
| 402 |
+
|
| 403 |
+
print(top_sgrnas[['sgRNA_sequence', 'sgRNA_score', 'Exon_ID']])
|
| 404 |
+
```
|
| 405 |
+
|
| 406 |
+
### Example 2: Activate OCT4 in Human iPSCs
|
| 407 |
+
|
| 408 |
+
**Step 1**: Check Addgene
|
| 409 |
+
```python
|
| 410 |
+
oct4_results = df[(df['Target_Gene'] == 'OCT4') &
|
| 411 |
+
(df['Application'] == 'activate')]
|
| 412 |
+
# Found 1 validated sgRNA!
|
| 413 |
+
print(oct4_results['Target_Sequence'].values[0])
|
| 414 |
+
# Use this sequence ✅
|
| 415 |
+
```
|
| 416 |
+
|
| 417 |
+
|
| 418 |
+
|
| 419 |
+
**Remember**: Always start with validated sequences (Option 1), then move to pre-computed designs (Option 2), and only use de novo design (Option 3) when necessary. Testing 3-4 sgRNAs per gene is standard practice regardless of prediction scores.
|
BioScientist/agent_system/engines/v1_executor_backup/know_how/single_cell_annotation.md
ADDED
|
@@ -0,0 +1,223 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Single Cell RNA-seq Cell Type Annotation
|
| 2 |
+
|
| 3 |
+
---
|
| 4 |
+
|
| 5 |
+
## Metadata
|
| 6 |
+
|
| 7 |
+
**Short Description**: Best practices for annotating cell types in single-cell RNA-seq data using marker-based, automated, and reference-based approaches.
|
| 8 |
+
|
| 9 |
+
**Authors**: Distilled from "Single-cell best practices" by Luecken, M.D. et al.
|
| 10 |
+
|
| 11 |
+
**Affiliations**: Helmholtz Munich, Wellcome Sanger Institute, Harvard Medical School, and contributors
|
| 12 |
+
|
| 13 |
+
**Version**: 1.0
|
| 14 |
+
|
| 15 |
+
**Last Updated**: January 2025
|
| 16 |
+
|
| 17 |
+
**License**: CC BY 4.0
|
| 18 |
+
|
| 19 |
+
**Commercial Use**: ✅ Allowed
|
| 20 |
+
|
| 21 |
+
**Source**: https://www.sc-best-practices.org/cellular_structure/annotation.html
|
| 22 |
+
|
| 23 |
+
**Citation**: Luecken, M.D., Theis, F.J. et al. (2023). Current best practices in single-cell RNA-seq analysis: a tutorial. Molecular Systems Biology.
|
| 24 |
+
|
| 25 |
+
---
|
| 26 |
+
|
| 27 |
+
## Overview
|
| 28 |
+
|
| 29 |
+
Cell type annotation is the process of assigning cell type labels to clusters or individual cells in single-cell RNA-seq data. This guide covers three main approaches and their practical implementation.
|
| 30 |
+
|
| 31 |
+
## Three Annotation Approaches
|
| 32 |
+
|
| 33 |
+
### 1. Manual Marker-Based Annotation
|
| 34 |
+
Identify cell types by examining expression of known marker genes in each cluster.
|
| 35 |
+
|
| 36 |
+
**Tools**: Scanpy, Seurat
|
| 37 |
+
**Best for**: Small datasets, novel cell types, high confidence needs
|
| 38 |
+
|
| 39 |
+
### 2. Automated Annotation
|
| 40 |
+
Use pre-trained classifiers to automatically assign cell type labels.
|
| 41 |
+
|
| 42 |
+
**Tools**: CellTypist, scAnnotate
|
| 43 |
+
**Best for**: Standard tissues, quick preliminary annotation, large datasets
|
| 44 |
+
|
| 45 |
+
### 3. Reference-Based Label Transfer
|
| 46 |
+
Transfer labels from annotated reference datasets to your query data.
|
| 47 |
+
|
| 48 |
+
**Tools**: scArches, scANVI, Azimuth, SingleR
|
| 49 |
+
**Best for**: Well-characterized tissues, integration with public data
|
| 50 |
+
|
| 51 |
+
## Recommended Workflow
|
| 52 |
+
|
| 53 |
+
### Step 1: Quality Control First
|
| 54 |
+
- **Remove low-quality cells before annotation**
|
| 55 |
+
- Filter doublets (expected doublet rate: 0.8% per 1000 cells)
|
| 56 |
+
- Check for ambient RNA contamination
|
| 57 |
+
- Verify cluster quality and resolution
|
| 58 |
+
|
| 59 |
+
### Step 2: Initial Marker-Based Assessment
|
| 60 |
+
|
| 61 |
+
```python
|
| 62 |
+
# Scanpy example
|
| 63 |
+
import scanpy as sc
|
| 64 |
+
|
| 65 |
+
# Calculate marker genes for clusters
|
| 66 |
+
sc.tl.rank_genes_groups(adata, 'leiden', method='wilcoxon')
|
| 67 |
+
|
| 68 |
+
# Visualize top markers
|
| 69 |
+
sc.pl.rank_genes_groups(adata, n_genes=25, sharey=False)
|
| 70 |
+
|
| 71 |
+
# Plot known markers
|
| 72 |
+
markers = {
|
| 73 |
+
'T cells': ['CD3D', 'CD3E', 'CD4', 'CD8A'],
|
| 74 |
+
'B cells': ['CD19', 'MS4A1', 'CD79A'],
|
| 75 |
+
'Monocytes': ['CD14', 'FCGR3A', 'LYZ'],
|
| 76 |
+
'NK cells': ['NCAM1', 'NKG7', 'GNLY']
|
| 77 |
+
}
|
| 78 |
+
|
| 79 |
+
sc.pl.dotplot(adata, markers, groupby='leiden')
|
| 80 |
+
```
|
| 81 |
+
|
| 82 |
+
### Step 3: Use Automated Tools for Validation
|
| 83 |
+
|
| 84 |
+
```python
|
| 85 |
+
# CellTypist example (fast, accurate for immune cells)
|
| 86 |
+
import celltypist
|
| 87 |
+
from celltypist import models
|
| 88 |
+
|
| 89 |
+
# Download immune cell model
|
| 90 |
+
model = models.Model.load(model='Immune_All_Low.pkl')
|
| 91 |
+
|
| 92 |
+
# Predict cell types
|
| 93 |
+
predictions = celltypist.annotate(adata, model=model, majority_voting=True)
|
| 94 |
+
adata = predictions.to_adata()
|
| 95 |
+
```
|
| 96 |
+
|
| 97 |
+
### Step 4: Reference-Based Refinement
|
| 98 |
+
|
| 99 |
+
```python
|
| 100 |
+
# scArches example for label transfer
|
| 101 |
+
import scarches as sca
|
| 102 |
+
|
| 103 |
+
# Load pre-trained reference model
|
| 104 |
+
model = sca.models.SCANVI.load_query_data(
|
| 105 |
+
adata=adata, # Your query data
|
| 106 |
+
reference_model="path/to/reference_model"
|
| 107 |
+
)
|
| 108 |
+
|
| 109 |
+
# Transfer labels
|
| 110 |
+
model.train(max_epochs=100)
|
| 111 |
+
adata.obs['transferred_labels'] = model.predict()
|
| 112 |
+
```
|
| 113 |
+
|
| 114 |
+
## Best Practices
|
| 115 |
+
|
| 116 |
+
### Do's:
|
| 117 |
+
1. **Always combine multiple approaches** - Use marker-based validation even with automated tools
|
| 118 |
+
2. **Check cluster purity** - Ensure clusters represent single cell types
|
| 119 |
+
3. **Validate with multiple marker sets** - Don't rely on single markers
|
| 120 |
+
4. **Consider biological context** - Tissue type, disease state, developmental stage
|
| 121 |
+
5. **Document confidence levels** - Note uncertain annotations
|
| 122 |
+
6. **Use hierarchical annotation** - Broad categories first, then subtypes
|
| 123 |
+
|
| 124 |
+
### Don'ts:
|
| 125 |
+
1. **Don't over-cluster** - Too fine resolution creates artificial distinctions
|
| 126 |
+
2. **Don't ignore batch effects** - Correct before annotation
|
| 127 |
+
3. **Don't trust automation blindly** - Always validate predictions
|
| 128 |
+
4. **Don't mix cell states with cell types** - Activated vs. resting cells are states, not types
|
| 129 |
+
5. **Don't annotate low-quality cells** - Remove them first
|
| 130 |
+
|
| 131 |
+
## Common Pitfalls
|
| 132 |
+
|
| 133 |
+
### 1. Doublet Clusters
|
| 134 |
+
**Problem**: Clusters with markers from multiple cell types
|
| 135 |
+
**Solution**: Use doublet detection tools (Scrublet, DoubletFinder) before annotation
|
| 136 |
+
|
| 137 |
+
### 2. Ambient RNA
|
| 138 |
+
**Problem**: Background markers in all cells
|
| 139 |
+
**Solution**: Use SoupX or CellBender for decontamination
|
| 140 |
+
|
| 141 |
+
### 3. Over-interpretation of Small Clusters
|
| 142 |
+
**Problem**: Rare clusters may be technical artifacts
|
| 143 |
+
**Solution**: Require minimum cell count (e.g., >25 cells), validate with independent data
|
| 144 |
+
|
| 145 |
+
### 4. Reference Mismatch
|
| 146 |
+
**Problem**: Reference from different tissue/species/condition
|
| 147 |
+
**Solution**: Use tissue-matched references, check marker overlap before transfer
|
| 148 |
+
|
| 149 |
+
## Tool Selection Guide
|
| 150 |
+
|
| 151 |
+
| Scenario | Recommended Tool | Why |
|
| 152 |
+
|----------|------------------|-----|
|
| 153 |
+
| Immune cells (human) | CellTypist | Pre-trained on large immune atlases |
|
| 154 |
+
| Mouse tissues | scArches + Mouse Cell Atlas | Comprehensive mouse reference |
|
| 155 |
+
| Novel cell types | Manual + Scanpy/Seurat | Need domain expertise |
|
| 156 |
+
| Large datasets (>100k cells) | CellTypist | Fast, scalable |
|
| 157 |
+
| Cross-species | Manual markers | Limited reference transfer |
|
| 158 |
+
| Developmental data | scArches | Handles continuous states |
|
| 159 |
+
|
| 160 |
+
## Key Marker Genes by Cell Type
|
| 161 |
+
|
| 162 |
+
### Blood/Immune:
|
| 163 |
+
- **T cells**: CD3D, CD3E (all T cells); CD4, CD8A (subtypes)
|
| 164 |
+
- **B cells**: CD19, MS4A1 (CD20), CD79A
|
| 165 |
+
- **Monocytes/Macrophages**: CD14, CD68, LYZ
|
| 166 |
+
- **NK cells**: NCAM1 (CD56), NKG7, KLRD1
|
| 167 |
+
- **Dendritic cells**: FCER1A, CD1C
|
| 168 |
+
|
| 169 |
+
### Epithelial:
|
| 170 |
+
- **General epithelial**: EPCAM, KRT18, KRT19
|
| 171 |
+
- **Lung AT1**: AGER, PDPN
|
| 172 |
+
- **Lung AT2**: SFTPC, SFTPA1
|
| 173 |
+
- **Intestinal**: VIL1, MUC2
|
| 174 |
+
|
| 175 |
+
### Stromal:
|
| 176 |
+
- **Fibroblasts**: COL1A1, DCN, LUM
|
| 177 |
+
- **Endothelial**: PECAM1 (CD31), VWF, CDH5
|
| 178 |
+
- **Smooth muscle**: ACTA2, MYH11, TAGLN
|
| 179 |
+
|
| 180 |
+
## Validation Checklist
|
| 181 |
+
|
| 182 |
+
- [ ] Cluster purity: >80% cells with same label per cluster
|
| 183 |
+
- [ ] Marker consistency: Top DE genes match expected markers
|
| 184 |
+
- [ ] Biological plausibility: Expected proportions for tissue type
|
| 185 |
+
- [ ] Cross-method agreement: Manual and automated annotations align
|
| 186 |
+
- [ ] Reference quality: >70% cells successfully transferred
|
| 187 |
+
- [ ] Doublet check: No clusters with multi-lineage markers
|
| 188 |
+
- [ ] Documentation: Record confidence levels and uncertain calls
|
| 189 |
+
|
| 190 |
+
## Resources
|
| 191 |
+
|
| 192 |
+
### Tools:
|
| 193 |
+
- **Scanpy**: https://scanpy.readthedocs.io/
|
| 194 |
+
- **CellTypist**: https://www.celltypist.org/
|
| 195 |
+
- **scArches**: https://scarches.readthedocs.io/
|
| 196 |
+
- **Seurat**: https://satijalab.org/seurat/
|
| 197 |
+
|
| 198 |
+
### References:
|
| 199 |
+
- **PanglaoDB**: Database of marker genes
|
| 200 |
+
- **CellMarker**: Curated cell marker database
|
| 201 |
+
- **Human Cell Atlas**: Reference datasets
|
| 202 |
+
|
| 203 |
+
### Pre-trained Models:
|
| 204 |
+
- **CellTypist models**: 30+ tissue-specific models
|
| 205 |
+
- **Azimuth references**: PBMC, lung, kidney, etc.
|
| 206 |
+
- **scArches models**: Multiple tissue references
|
| 207 |
+
|
| 208 |
+
## Troubleshooting
|
| 209 |
+
|
| 210 |
+
**Issue**: All clusters look similar
|
| 211 |
+
→ Increase clustering resolution, check if data is normalized
|
| 212 |
+
|
| 213 |
+
**Issue**: Too many small clusters
|
| 214 |
+
→ Decrease resolution, merge similar clusters based on markers
|
| 215 |
+
|
| 216 |
+
**Issue**: Automated tool gives inconsistent results
|
| 217 |
+
→ Check input normalization, try multiple tools, fall back to manual
|
| 218 |
+
|
| 219 |
+
**Issue**: Can't find clear markers for cluster
|
| 220 |
+
→ May be transitional state, doublet, or low-quality cells
|
| 221 |
+
|
| 222 |
+
**Issue**: Reference transfer fails
|
| 223 |
+
→ Check batch correction, ensure overlapping gene sets, verify tissue match
|
BioScientist/agent_system/engines/v1_executor_backup/model/__init__.py
ADDED
|
File without changes
|
BioScientist/agent_system/engines/v1_executor_backup/model/__pycache__/__init__.cpython-311.pyc
ADDED
|
Binary file (159 Bytes). View file
|
|
|
BioScientist/agent_system/engines/v1_executor_backup/model/__pycache__/retriever.cpython-311.pyc
ADDED
|
Binary file (13.5 kB). View file
|
|
|
BioScientist/agent_system/engines/v1_executor_backup/model/retriever.py
ADDED
|
@@ -0,0 +1,203 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import contextlib
|
| 2 |
+
import re
|
| 3 |
+
|
| 4 |
+
from langchain_core.messages import HumanMessage
|
| 5 |
+
from langchain_openai import ChatOpenAI
|
| 6 |
+
|
| 7 |
+
|
| 8 |
+
class ToolRetriever:
|
| 9 |
+
"""Retrieve tools from the tool registry."""
|
| 10 |
+
|
| 11 |
+
def __init__(self):
|
| 12 |
+
pass
|
| 13 |
+
|
| 14 |
+
def prompt_based_retrieval(self, query: str, resources: dict, llm=None) -> dict:
|
| 15 |
+
"""Use a prompt-based approach to retrieve the most relevant resources for a query.
|
| 16 |
+
|
| 17 |
+
Args:
|
| 18 |
+
query: The user's query
|
| 19 |
+
resources: A dictionary with keys 'tools', 'data_lake', 'libraries', and 'know_how',
|
| 20 |
+
each containing a list of available resources
|
| 21 |
+
llm: Optional LLM instance to use for retrieval (if None, will create a new one)
|
| 22 |
+
|
| 23 |
+
Returns:
|
| 24 |
+
A dictionary with the same keys, but containing only the most relevant resources
|
| 25 |
+
|
| 26 |
+
"""
|
| 27 |
+
# Build prompt sections for available resources
|
| 28 |
+
prompt_sections = []
|
| 29 |
+
prompt_sections.append(f"""
|
| 30 |
+
You are an expert biomedical research assistant. Your task is to select the relevant resources to help answer a user's query.
|
| 31 |
+
|
| 32 |
+
USER QUERY: {query}
|
| 33 |
+
|
| 34 |
+
Below are the available resources. For each category, select items that are directly or indirectly relevant to answering the query.
|
| 35 |
+
Be generous in your selection - include resources that might be useful for the task, even if they're not explicitly mentioned in the query.
|
| 36 |
+
It's better to include slightly more resources than to miss potentially useful ones.
|
| 37 |
+
|
| 38 |
+
AVAILABLE TOOLS:
|
| 39 |
+
{self._format_resources_for_prompt(resources.get("tools", []))}
|
| 40 |
+
|
| 41 |
+
AVAILABLE DATA LAKE ITEMS:
|
| 42 |
+
{self._format_resources_for_prompt(resources.get("data_lake", []))}
|
| 43 |
+
|
| 44 |
+
AVAILABLE SOFTWARE LIBRARIES:
|
| 45 |
+
{self._format_resources_for_prompt(resources.get("libraries", []))}""")
|
| 46 |
+
|
| 47 |
+
# Add know-how section if available
|
| 48 |
+
if "know_how" in resources and resources["know_how"]:
|
| 49 |
+
prompt_sections.append(f"""
|
| 50 |
+
AVAILABLE KNOW-HOW DOCUMENTS (Best Practices & Protocols):
|
| 51 |
+
{self._format_resources_for_prompt(resources.get("know_how", []))}""")
|
| 52 |
+
|
| 53 |
+
# Build response format based on available categories
|
| 54 |
+
response_format = """
|
| 55 |
+
For each category, respond with ONLY the indices of the relevant items in the following format:
|
| 56 |
+
TOOLS: [list of indices]
|
| 57 |
+
DATA_LAKE: [list of indices]
|
| 58 |
+
LIBRARIES: [list of indices]"""
|
| 59 |
+
|
| 60 |
+
if "know_how" in resources and resources["know_how"]:
|
| 61 |
+
response_format += "\nKNOW_HOW: [list of indices]"
|
| 62 |
+
|
| 63 |
+
response_format += """
|
| 64 |
+
|
| 65 |
+
For example:
|
| 66 |
+
TOOLS: [0, 3, 5, 7, 9]
|
| 67 |
+
DATA_LAKE: [1, 2, 4]
|
| 68 |
+
LIBRARIES: [0, 2, 4, 5, 8]"""
|
| 69 |
+
|
| 70 |
+
if "know_how" in resources and resources["know_how"]:
|
| 71 |
+
response_format += "\nKNOW_HOW: [0, 1]"
|
| 72 |
+
|
| 73 |
+
response_format += """
|
| 74 |
+
|
| 75 |
+
If a category has no relevant items, use an empty list, e.g., DATA_LAKE: []
|
| 76 |
+
|
| 77 |
+
IMPORTANT GUIDELINES:
|
| 78 |
+
1. Be generous but not excessive - aim to include all potentially relevant resources
|
| 79 |
+
2. ALWAYS prioritize database tools for general queries - include as many database tools as possible
|
| 80 |
+
3. Include all literature search tools
|
| 81 |
+
4. For wet lab sequence type of queries, ALWAYS include molecular biology tools
|
| 82 |
+
5. For data lake items, include datasets that could provide useful information
|
| 83 |
+
6. For libraries, include those that provide functions needed for analysis
|
| 84 |
+
7. For know-how documents, include those that provide relevant protocols, best practices, or troubleshooting guidance
|
| 85 |
+
8. Don't exclude resources just because they're not explicitly mentioned in the query
|
| 86 |
+
9. When in doubt about a database tool or molecular biology tool, include it rather than exclude it
|
| 87 |
+
"""
|
| 88 |
+
|
| 89 |
+
prompt = "\n".join(prompt_sections) + response_format
|
| 90 |
+
|
| 91 |
+
# Use the provided LLM or create a new one
|
| 92 |
+
if llm is None:
|
| 93 |
+
llm = ChatOpenAI(model="gpt-4o")
|
| 94 |
+
|
| 95 |
+
# Invoke the LLM
|
| 96 |
+
if hasattr(llm, "invoke"):
|
| 97 |
+
# For LangChain-style LLMs
|
| 98 |
+
response = llm.invoke([HumanMessage(content=prompt)])
|
| 99 |
+
response_content = response.content
|
| 100 |
+
else:
|
| 101 |
+
# For other LLM interfaces
|
| 102 |
+
response_content = str(llm(prompt))
|
| 103 |
+
|
| 104 |
+
# Parse the response to extract the selected indices
|
| 105 |
+
selected_indices = self._parse_llm_response(response_content)
|
| 106 |
+
|
| 107 |
+
# Get the selected resources
|
| 108 |
+
selected_resources = {
|
| 109 |
+
"tools": [
|
| 110 |
+
resources["tools"][i] for i in selected_indices.get("tools", []) if i < len(resources.get("tools", []))
|
| 111 |
+
],
|
| 112 |
+
"data_lake": [
|
| 113 |
+
resources["data_lake"][i]
|
| 114 |
+
for i in selected_indices.get("data_lake", [])
|
| 115 |
+
if i < len(resources.get("data_lake", []))
|
| 116 |
+
],
|
| 117 |
+
"libraries": [
|
| 118 |
+
resources["libraries"][i]
|
| 119 |
+
for i in selected_indices.get("libraries", [])
|
| 120 |
+
if i < len(resources.get("libraries", []))
|
| 121 |
+
],
|
| 122 |
+
}
|
| 123 |
+
|
| 124 |
+
# Add know-how if present
|
| 125 |
+
if "know_how" in resources and resources["know_how"]:
|
| 126 |
+
selected_resources["know_how"] = [
|
| 127 |
+
resources["know_how"][i]
|
| 128 |
+
for i in selected_indices.get("know_how", [])
|
| 129 |
+
if i < len(resources.get("know_how", []))
|
| 130 |
+
]
|
| 131 |
+
|
| 132 |
+
return selected_resources
|
| 133 |
+
|
| 134 |
+
def _format_resources_for_prompt(self, resources: list) -> str:
|
| 135 |
+
"""Format resources for inclusion in the prompt."""
|
| 136 |
+
formatted = []
|
| 137 |
+
for i, resource in enumerate(resources):
|
| 138 |
+
if isinstance(resource, dict):
|
| 139 |
+
# Handle dictionary format (from tool registry or data lake/libraries with descriptions)
|
| 140 |
+
name = resource.get("name", f"Resource {i}")
|
| 141 |
+
description = resource.get("description", "")
|
| 142 |
+
formatted.append(f"{i}. {name}: {description}")
|
| 143 |
+
elif isinstance(resource, str):
|
| 144 |
+
# Handle string format (simple strings)
|
| 145 |
+
formatted.append(f"{i}. {resource}")
|
| 146 |
+
else:
|
| 147 |
+
# Try to extract name and description from tool objects
|
| 148 |
+
name = getattr(resource, "name", str(resource))
|
| 149 |
+
desc = getattr(resource, "description", "")
|
| 150 |
+
formatted.append(f"{i}. {name}: {desc}")
|
| 151 |
+
|
| 152 |
+
return "\n".join(formatted) if formatted else "None available"
|
| 153 |
+
|
| 154 |
+
def _parse_llm_response(self, response) -> dict:
|
| 155 |
+
"""Parse the LLM response to extract the selected indices.
|
| 156 |
+
|
| 157 |
+
Accepts either a plain string or a Responses API-style list of content blocks.
|
| 158 |
+
"""
|
| 159 |
+
# Normalize response to string if it's a list of content blocks (Responses API)
|
| 160 |
+
if isinstance(response, list):
|
| 161 |
+
parts = []
|
| 162 |
+
for item in response:
|
| 163 |
+
# LangChain Responses API returns list of dicts like {"type": "text", "text": "..."}
|
| 164 |
+
if isinstance(item, dict):
|
| 165 |
+
if item.get("type") == "text" and "text" in item:
|
| 166 |
+
parts.append(str(item.get("text", "")))
|
| 167 |
+
# If it's a tool_call or other block, ignore for this simple parsing
|
| 168 |
+
elif isinstance(item, str):
|
| 169 |
+
parts.append(item)
|
| 170 |
+
response = "\n".join([p for p in parts if p])
|
| 171 |
+
elif not isinstance(response, str):
|
| 172 |
+
response = str(response)
|
| 173 |
+
selected_indices = {"tools": [], "data_lake": [], "libraries": [], "know_how": []}
|
| 174 |
+
|
| 175 |
+
# Extract indices for each category
|
| 176 |
+
tools_match = re.search(r"TOOLS:\s*\[(.*?)\]", response, re.IGNORECASE)
|
| 177 |
+
if tools_match and tools_match.group(1).strip():
|
| 178 |
+
with contextlib.suppress(ValueError):
|
| 179 |
+
selected_indices["tools"] = [int(idx.strip()) for idx in tools_match.group(1).split(",") if idx.strip()]
|
| 180 |
+
|
| 181 |
+
data_lake_match = re.search(r"DATA_LAKE:\s*\[(.*?)\]", response, re.IGNORECASE)
|
| 182 |
+
if data_lake_match and data_lake_match.group(1).strip():
|
| 183 |
+
with contextlib.suppress(ValueError):
|
| 184 |
+
selected_indices["data_lake"] = [
|
| 185 |
+
int(idx.strip()) for idx in data_lake_match.group(1).split(",") if idx.strip()
|
| 186 |
+
]
|
| 187 |
+
|
| 188 |
+
libraries_match = re.search(r"LIBRARIES:\s*\[(.*?)\]", response, re.IGNORECASE)
|
| 189 |
+
if libraries_match and libraries_match.group(1).strip():
|
| 190 |
+
with contextlib.suppress(ValueError):
|
| 191 |
+
selected_indices["libraries"] = [
|
| 192 |
+
int(idx.strip()) for idx in libraries_match.group(1).split(",") if idx.strip()
|
| 193 |
+
]
|
| 194 |
+
|
| 195 |
+
# Extract know-how indices
|
| 196 |
+
know_how_match = re.search(r"KNOW[-_]HOW:\s*\[(.*?)\]", response, re.IGNORECASE)
|
| 197 |
+
if know_how_match and know_how_match.group(1).strip():
|
| 198 |
+
with contextlib.suppress(ValueError):
|
| 199 |
+
selected_indices["know_how"] = [
|
| 200 |
+
int(idx.strip()) for idx in know_how_match.group(1).split(",") if idx.strip()
|
| 201 |
+
]
|
| 202 |
+
|
| 203 |
+
return selected_indices
|
BioScientist/agent_system/engines/v1_executor_backup/tool/__pycache__/__init__.cpython-311.pyc
ADDED
|
Binary file (237 Bytes). View file
|
|
|
BioScientist/agent_system/engines/v1_executor_backup/tool/__pycache__/literature.cpython-311.pyc
ADDED
|
Binary file (19.5 kB). View file
|
|
|
BioScientist/agent_system/engines/v1_executor_backup/tool/__pycache__/molecular_biology.cpython-311.pyc
ADDED
|
Binary file (83.1 kB). View file
|
|
|
BioScientist/agent_system/engines/v1_executor_backup/tool/__pycache__/protocols.cpython-311.pyc
ADDED
|
Binary file (13.5 kB). View file
|
|
|
BioScientist/agent_system/engines/v1_executor_backup/tool/__pycache__/support_tools.cpython-311.pyc
ADDED
|
Binary file (14.7 kB). View file
|
|
|
BioScientist/agent_system/engines/v1_executor_backup/tool/__pycache__/tool_registry.cpython-311.pyc
ADDED
|
Binary file (5.89 kB). View file
|
|
|
BioScientist/agent_system/engines/v1_executor_backup/tool/bioengineering.py
ADDED
|
@@ -0,0 +1,1387 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
def analyze_cell_migration_metrics(
|
| 2 |
+
image_sequence_path,
|
| 3 |
+
pixel_size_um=1.0,
|
| 4 |
+
time_interval_min=1.0,
|
| 5 |
+
min_track_length=10,
|
| 6 |
+
output_dir="./",
|
| 7 |
+
):
|
| 8 |
+
"""Analyze cell migration metrics from time-lapse microscopy images.
|
| 9 |
+
|
| 10 |
+
Parameters
|
| 11 |
+
----------
|
| 12 |
+
image_sequence_path : str
|
| 13 |
+
Path to the directory containing time-lapse images or path to a multi-frame TIFF file
|
| 14 |
+
pixel_size_um : float
|
| 15 |
+
Conversion factor from pixels to micrometers (default: 1.0)
|
| 16 |
+
time_interval_min : float
|
| 17 |
+
Time interval between consecutive frames in minutes (default: 1.0)
|
| 18 |
+
min_track_length : int
|
| 19 |
+
Minimum number of frames a cell must be tracked to be included in analysis (default: 10)
|
| 20 |
+
output_dir : str
|
| 21 |
+
Directory to save output files (default: "./")
|
| 22 |
+
|
| 23 |
+
Returns
|
| 24 |
+
-------
|
| 25 |
+
str
|
| 26 |
+
Research log summarizing the cell migration analysis process and results
|
| 27 |
+
|
| 28 |
+
"""
|
| 29 |
+
import os
|
| 30 |
+
|
| 31 |
+
import matplotlib.pyplot as plt
|
| 32 |
+
import numpy as np
|
| 33 |
+
import pandas as pd
|
| 34 |
+
import trackpy as tp
|
| 35 |
+
from skimage import io
|
| 36 |
+
|
| 37 |
+
# Create output directory if it doesn't exist
|
| 38 |
+
os.makedirs(output_dir, exist_ok=True)
|
| 39 |
+
|
| 40 |
+
# Load image sequence
|
| 41 |
+
if os.path.isdir(image_sequence_path):
|
| 42 |
+
# Load from directory of images
|
| 43 |
+
image_files = sorted(
|
| 44 |
+
[f for f in os.listdir(image_sequence_path) if f.endswith((".tif", ".tiff", ".png", ".jpg", ".jpeg"))]
|
| 45 |
+
)
|
| 46 |
+
frames = [io.imread(os.path.join(image_sequence_path, f)) for f in image_files]
|
| 47 |
+
else:
|
| 48 |
+
# Load multi-frame TIFF
|
| 49 |
+
frames = io.imread(image_sequence_path)
|
| 50 |
+
if frames.ndim == 3: # Check if it's a time series
|
| 51 |
+
pass
|
| 52 |
+
else:
|
| 53 |
+
return "Error: Input is not a valid time-lapse image sequence"
|
| 54 |
+
|
| 55 |
+
# Step 1: Detect cells in each frame
|
| 56 |
+
features_list = []
|
| 57 |
+
for i, frame in enumerate(frames):
|
| 58 |
+
# Detect cells (particles) in the frame
|
| 59 |
+
features = tp.locate(frame, diameter=15, minmass=100)
|
| 60 |
+
if features is not None and not features.empty:
|
| 61 |
+
features["frame"] = i
|
| 62 |
+
features_list.append(features)
|
| 63 |
+
|
| 64 |
+
if not features_list:
|
| 65 |
+
return "Error: No cells detected in the image sequence"
|
| 66 |
+
|
| 67 |
+
# Combine all features
|
| 68 |
+
all_features = pd.concat(features_list)
|
| 69 |
+
|
| 70 |
+
# Save raw detections to output directory
|
| 71 |
+
raw_detections_file = os.path.join(output_dir, "raw_cell_detections.csv")
|
| 72 |
+
all_features.to_csv(raw_detections_file, index=False)
|
| 73 |
+
|
| 74 |
+
# Step 2: Link features into cell trajectories
|
| 75 |
+
trajectories = tp.link_df(all_features, search_range=10, memory=3)
|
| 76 |
+
|
| 77 |
+
# Save linked trajectories before filtering
|
| 78 |
+
# Reset index to ensure frame is a column, not an index level
|
| 79 |
+
trajectories_reset = trajectories.reset_index(drop=True)
|
| 80 |
+
all_trajectories_file = os.path.join(output_dir, "all_trajectories.csv")
|
| 81 |
+
trajectories_reset.to_csv(all_trajectories_file, index=False)
|
| 82 |
+
|
| 83 |
+
# Step 3: Filter trajectories to get only the ones that appear in enough frames
|
| 84 |
+
trajectories = tp.filter_stubs(trajectories, threshold=min_track_length)
|
| 85 |
+
|
| 86 |
+
if trajectories.empty:
|
| 87 |
+
return "No complete cell tracks found. Try adjusting parameters."
|
| 88 |
+
|
| 89 |
+
# Save filtered trajectories
|
| 90 |
+
filtered_trajectories_file = os.path.join(output_dir, "filtered_trajectories.csv")
|
| 91 |
+
# Reset index again to be safe
|
| 92 |
+
trajectories = trajectories.reset_index(drop=True)
|
| 93 |
+
trajectories.to_csv(filtered_trajectories_file, index=False)
|
| 94 |
+
|
| 95 |
+
# Step 4: Calculate migration metrics for each cell
|
| 96 |
+
cell_ids = trajectories["particle"].unique()
|
| 97 |
+
metrics = []
|
| 98 |
+
|
| 99 |
+
for cell_id in cell_ids:
|
| 100 |
+
cell_track = trajectories[trajectories["particle"] == cell_id].sort_values("frame")
|
| 101 |
+
|
| 102 |
+
# Convert pixel positions to micrometers
|
| 103 |
+
cell_track["x_um"] = cell_track["x"] * pixel_size_um
|
| 104 |
+
cell_track["y_um"] = cell_track["y"] * pixel_size_um
|
| 105 |
+
|
| 106 |
+
# Calculate displacements between consecutive frames
|
| 107 |
+
dx = np.diff(cell_track["x_um"])
|
| 108 |
+
dy = np.diff(cell_track["y_um"])
|
| 109 |
+
|
| 110 |
+
# Calculate step distances
|
| 111 |
+
step_distances = np.sqrt(dx**2 + dy**2)
|
| 112 |
+
|
| 113 |
+
# Calculate total path length
|
| 114 |
+
path_length = np.sum(step_distances)
|
| 115 |
+
|
| 116 |
+
# Calculate net displacement (straight-line distance from start to end)
|
| 117 |
+
start_x, start_y = cell_track.iloc[0][["x_um", "y_um"]]
|
| 118 |
+
end_x, end_y = cell_track.iloc[-1][["x_um", "y_um"]]
|
| 119 |
+
net_displacement = np.sqrt((end_x - start_x) ** 2 + (end_y - start_y) ** 2)
|
| 120 |
+
|
| 121 |
+
# Calculate directionality ratio (net displacement / path length)
|
| 122 |
+
directionality = net_displacement / path_length if path_length > 0 else 0
|
| 123 |
+
|
| 124 |
+
# Calculate speed (μm/min)
|
| 125 |
+
time_tracked = (cell_track["frame"].max() - cell_track["frame"].min()) * time_interval_min
|
| 126 |
+
speed = path_length / time_tracked if time_tracked > 0 else 0
|
| 127 |
+
|
| 128 |
+
metrics.append(
|
| 129 |
+
{
|
| 130 |
+
"cell_id": cell_id,
|
| 131 |
+
"frames_tracked": len(cell_track),
|
| 132 |
+
"speed_um_per_min": speed,
|
| 133 |
+
"directionality": directionality,
|
| 134 |
+
"displacement_um": net_displacement,
|
| 135 |
+
"path_length_um": path_length,
|
| 136 |
+
}
|
| 137 |
+
)
|
| 138 |
+
|
| 139 |
+
# Convert metrics to DataFrame
|
| 140 |
+
metrics_df = pd.DataFrame(metrics)
|
| 141 |
+
|
| 142 |
+
# Save metrics to CSV
|
| 143 |
+
metrics_file = os.path.join(output_dir, "cell_migration_metrics.csv")
|
| 144 |
+
metrics_df.to_csv(metrics_file, index=False)
|
| 145 |
+
|
| 146 |
+
# Calculate summary statistics
|
| 147 |
+
summary = {
|
| 148 |
+
"num_cells_tracked": len(metrics_df),
|
| 149 |
+
"avg_speed": metrics_df["speed_um_per_min"].mean(),
|
| 150 |
+
"std_speed": metrics_df["speed_um_per_min"].std(),
|
| 151 |
+
"avg_directionality": metrics_df["directionality"].mean(),
|
| 152 |
+
"std_directionality": metrics_df["directionality"].std(),
|
| 153 |
+
"avg_displacement": metrics_df["displacement_um"].mean(),
|
| 154 |
+
"std_displacement": metrics_df["displacement_um"].std(),
|
| 155 |
+
}
|
| 156 |
+
|
| 157 |
+
# Save summary statistics
|
| 158 |
+
summary_file = os.path.join(output_dir, "migration_summary.csv")
|
| 159 |
+
pd.DataFrame([summary]).to_csv(summary_file, index=False)
|
| 160 |
+
|
| 161 |
+
# Save trajectories visualization
|
| 162 |
+
fig, ax = plt.figure(figsize=(8, 8)), plt.gca()
|
| 163 |
+
tp.plot_traj(trajectories, ax=ax)
|
| 164 |
+
plt.title("Cell Migration Trajectories")
|
| 165 |
+
plt.xlabel("x position (pixels)")
|
| 166 |
+
plt.ylabel("y position (pixels)")
|
| 167 |
+
|
| 168 |
+
trajectories_file = os.path.join(output_dir, "cell_trajectories.png")
|
| 169 |
+
plt.savefig(trajectories_file)
|
| 170 |
+
plt.close()
|
| 171 |
+
|
| 172 |
+
# Create a rose plot to show migration directionality
|
| 173 |
+
fig, ax = plt.subplots(subplot_kw={"projection": "polar"}, figsize=(8, 8))
|
| 174 |
+
|
| 175 |
+
# Calculate angles for each cell (end position relative to start)
|
| 176 |
+
angles = []
|
| 177 |
+
for cell_id in cell_ids:
|
| 178 |
+
cell_track = trajectories[trajectories["particle"] == cell_id].sort_values("frame")
|
| 179 |
+
start_x, start_y = cell_track.iloc[0][["x", "y"]]
|
| 180 |
+
end_x, end_y = cell_track.iloc[-1][["x", "y"]]
|
| 181 |
+
dx, dy = end_x - start_x, end_y - start_y
|
| 182 |
+
angle = np.arctan2(dy, dx)
|
| 183 |
+
angles.append(angle)
|
| 184 |
+
|
| 185 |
+
# Plot the histogram
|
| 186 |
+
bins = np.linspace(-np.pi, np.pi, 16)
|
| 187 |
+
ax.hist(angles, bins=bins)
|
| 188 |
+
ax.set_title("Cell Migration Directionality")
|
| 189 |
+
|
| 190 |
+
# Save the rose plot
|
| 191 |
+
rose_plot_file = os.path.join(output_dir, "rose_plot.png")
|
| 192 |
+
plt.savefig(rose_plot_file)
|
| 193 |
+
plt.close()
|
| 194 |
+
|
| 195 |
+
# Create a displacement plot
|
| 196 |
+
plt.figure(figsize=(10, 6))
|
| 197 |
+
plt.bar(range(len(metrics_df)), metrics_df["displacement_um"])
|
| 198 |
+
plt.xlabel("Cell ID")
|
| 199 |
+
plt.ylabel("Displacement (μm)")
|
| 200 |
+
plt.title("Cell Displacements")
|
| 201 |
+
|
| 202 |
+
# Save the displacement plot
|
| 203 |
+
displacement_plot_file = os.path.join(output_dir, "track_displacement_plot.png")
|
| 204 |
+
plt.savefig(displacement_plot_file)
|
| 205 |
+
plt.close()
|
| 206 |
+
|
| 207 |
+
# Generate research log
|
| 208 |
+
log = f"""
|
| 209 |
+
Cell Migration Analysis Research Log:
|
| 210 |
+
|
| 211 |
+
1. Analyzed time-lapse sequence with {len(frames)} frames
|
| 212 |
+
2. Detected and tracked {len(cell_ids)} cells that persisted for at least {min_track_length} frames
|
| 213 |
+
3. Calculated key migration metrics:
|
| 214 |
+
- Average speed: {summary["avg_speed"]:.2f} ± {summary["std_speed"]:.2f} μm/min
|
| 215 |
+
- Average directionality ratio: {summary["avg_directionality"]:.2f} ± {summary["std_directionality"]:.2f}
|
| 216 |
+
- Average displacement: {summary["avg_displacement"]:.2f} ± {summary["std_displacement"]:.2f} μm
|
| 217 |
+
|
| 218 |
+
4. Files saved:
|
| 219 |
+
- Raw cell detections: {raw_detections_file}
|
| 220 |
+
- All cell trajectories: {all_trajectories_file}
|
| 221 |
+
- Filtered trajectories: {filtered_trajectories_file}
|
| 222 |
+
- Detailed cell metrics: {metrics_file}
|
| 223 |
+
- Summary statistics: {summary_file}
|
| 224 |
+
- Cell trajectories visualization: {trajectories_file}
|
| 225 |
+
- Direction rose plot: {rose_plot_file}
|
| 226 |
+
- Cell displacement plot: {displacement_plot_file}
|
| 227 |
+
|
| 228 |
+
Note: Analysis used pixel size of {pixel_size_um} μm and time interval of {time_interval_min} min between frames.
|
| 229 |
+
"""
|
| 230 |
+
|
| 231 |
+
return log.strip()
|
| 232 |
+
|
| 233 |
+
|
| 234 |
+
def perform_crispr_cas9_genome_editing(guide_rna_sequences, target_genomic_loci, cell_tissue_type):
|
| 235 |
+
"""Simulates CRISPR-Cas9 genome editing process including guide RNA design, delivery, and analysis.
|
| 236 |
+
|
| 237 |
+
Parameters
|
| 238 |
+
----------
|
| 239 |
+
guide_rna_sequences : list of str
|
| 240 |
+
List of guide RNA sequences (20 nucleotides each) targeting the genomic region of interest
|
| 241 |
+
|
| 242 |
+
target_genomic_loci : str
|
| 243 |
+
Target genomic sequence to be edited (should be longer than guide RNA and contain the target sites)
|
| 244 |
+
|
| 245 |
+
cell_tissue_type : str
|
| 246 |
+
Type of cell or tissue being edited (affects delivery efficiency and editing outcomes)
|
| 247 |
+
|
| 248 |
+
Returns
|
| 249 |
+
-------
|
| 250 |
+
str
|
| 251 |
+
Research log detailing the CRISPR-Cas9 editing process, including steps taken and results
|
| 252 |
+
|
| 253 |
+
"""
|
| 254 |
+
import os
|
| 255 |
+
import random
|
| 256 |
+
from datetime import datetime
|
| 257 |
+
|
| 258 |
+
# Initialize research log
|
| 259 |
+
log = "CRISPR-Cas9 Genome Editing Research Log\n"
|
| 260 |
+
log += f"Date: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}\n"
|
| 261 |
+
log += f"Cell/Tissue Type: {cell_tissue_type}\n\n"
|
| 262 |
+
|
| 263 |
+
# Step 1: Validate guide RNA sequences
|
| 264 |
+
log += "STEP 1: Guide RNA Validation\n"
|
| 265 |
+
valid_guides = []
|
| 266 |
+
|
| 267 |
+
for i, guide in enumerate(guide_rna_sequences):
|
| 268 |
+
if len(guide) != 20:
|
| 269 |
+
log += f" Guide {i + 1}: INVALID - Guide RNA must be 20 nucleotides (current length: {len(guide)})\n"
|
| 270 |
+
continue
|
| 271 |
+
|
| 272 |
+
if not all(n in "ATGC" for n in guide.upper()):
|
| 273 |
+
log += f" Guide {i + 1}: INVALID - Guide RNA contains invalid nucleotides\n"
|
| 274 |
+
continue
|
| 275 |
+
|
| 276 |
+
# Calculate GC content (affects guide efficiency)
|
| 277 |
+
gc_content = (guide.upper().count("G") + guide.upper().count("C")) / len(guide) * 100
|
| 278 |
+
efficiency_score = 0
|
| 279 |
+
|
| 280 |
+
if 40 <= gc_content <= 60:
|
| 281 |
+
efficiency_score += 1
|
| 282 |
+
gc_quality = "Optimal"
|
| 283 |
+
else:
|
| 284 |
+
gc_quality = "Suboptimal"
|
| 285 |
+
|
| 286 |
+
log += f" Guide {i + 1}: VALID - {guide} (GC content: {gc_content:.1f}% - {gc_quality})\n"
|
| 287 |
+
valid_guides.append((guide, efficiency_score))
|
| 288 |
+
|
| 289 |
+
if not valid_guides:
|
| 290 |
+
log += "\nNo valid guide RNAs found. Genome editing cannot proceed.\n"
|
| 291 |
+
return log
|
| 292 |
+
|
| 293 |
+
# Step 2: Target site identification
|
| 294 |
+
log += "\nSTEP 2: Target Site Identification\n"
|
| 295 |
+
|
| 296 |
+
target_seq = target_genomic_loci.upper()
|
| 297 |
+
target_matches = []
|
| 298 |
+
|
| 299 |
+
for i, (guide, score) in enumerate(valid_guides):
|
| 300 |
+
# Find guide RNA target in genomic sequence (including PAM site NGG)
|
| 301 |
+
guide.upper() + "NGG"
|
| 302 |
+
|
| 303 |
+
# Check if guide sequence is in target (simplified)
|
| 304 |
+
if guide.upper() in target_seq:
|
| 305 |
+
position = target_seq.find(guide.upper())
|
| 306 |
+
# Check if there's a PAM sequence (NGG) after the guide
|
| 307 |
+
if position + len(guide) + 2 <= len(target_seq):
|
| 308 |
+
potential_pam = target_seq[position + len(guide) : position + len(guide) + 3]
|
| 309 |
+
if potential_pam[1:3] == "GG":
|
| 310 |
+
pam_quality = "Found"
|
| 311 |
+
score += 2
|
| 312 |
+
else:
|
| 313 |
+
pam_quality = "Not found"
|
| 314 |
+
else:
|
| 315 |
+
pam_quality = "Out of bounds"
|
| 316 |
+
|
| 317 |
+
log += f" Guide {i + 1}: Found at position {position} (PAM: {pam_quality})\n"
|
| 318 |
+
target_matches.append((guide, position, score))
|
| 319 |
+
else:
|
| 320 |
+
log += f" Guide {i + 1}: No match found in target sequence\n"
|
| 321 |
+
|
| 322 |
+
if not target_matches:
|
| 323 |
+
log += "\nNo matching target sites found. Genome editing cannot proceed.\n"
|
| 324 |
+
return log
|
| 325 |
+
|
| 326 |
+
# Step 3: Simulate CRISPR-Cas9 delivery
|
| 327 |
+
log += "\nSTEP 3: CRISPR-Cas9 Delivery Simulation\n"
|
| 328 |
+
|
| 329 |
+
# Cell-specific delivery efficiencies (simplified model)
|
| 330 |
+
delivery_efficiencies = {
|
| 331 |
+
"hek293": 0.85,
|
| 332 |
+
"hela": 0.75,
|
| 333 |
+
"ipsc": 0.60,
|
| 334 |
+
"primary_neuron": 0.40,
|
| 335 |
+
"hematopoietic_stem_cell": 0.55,
|
| 336 |
+
"mouse_embryo": 0.70,
|
| 337 |
+
"plant_cell": 0.30,
|
| 338 |
+
}
|
| 339 |
+
|
| 340 |
+
# Get delivery efficiency based on cell type (default to 0.5 if unknown)
|
| 341 |
+
cell_type_key = cell_tissue_type.lower().replace(" ", "_")
|
| 342 |
+
delivery_efficiency = delivery_efficiencies.get(cell_type_key, 0.5)
|
| 343 |
+
|
| 344 |
+
log += f" Delivery method: Lipofection for {cell_tissue_type}\n"
|
| 345 |
+
log += f" Estimated delivery efficiency: {delivery_efficiency * 100:.1f}%\n"
|
| 346 |
+
|
| 347 |
+
# Step 4: Simulate genome editing
|
| 348 |
+
log += "\nSTEP 4: Genome Editing Simulation\n"
|
| 349 |
+
|
| 350 |
+
# Select best guide based on score
|
| 351 |
+
best_guide, best_position, best_score = sorted(target_matches, key=lambda x: x[2], reverse=True)[0]
|
| 352 |
+
|
| 353 |
+
log += f" Selected guide RNA: {best_guide} (highest efficiency score)\n"
|
| 354 |
+
log += f" Target position: {best_position} to {best_position + len(best_guide) - 1}\n"
|
| 355 |
+
|
| 356 |
+
# Simulate editing outcome
|
| 357 |
+
edit_success_rate = delivery_efficiency * (0.5 + (best_score * 0.1)) # Between 50-90% based on guide quality
|
| 358 |
+
|
| 359 |
+
# Cut site (typically 3 bases upstream of PAM)
|
| 360 |
+
cut_position = best_position + len(best_guide) - 3
|
| 361 |
+
log += f" Predicted cut site: Between positions {cut_position} and {cut_position + 1}\n"
|
| 362 |
+
|
| 363 |
+
# Simulate editing outcomes
|
| 364 |
+
indel_size = random.randint(1, 5) # Random indel size between 1-5 bp
|
| 365 |
+
|
| 366 |
+
# Create modified sequence (simulate a deletion for simplicity)
|
| 367 |
+
modified_sequence = target_seq[:cut_position] + target_seq[cut_position + indel_size :]
|
| 368 |
+
|
| 369 |
+
log += f" Simulated edit: {indel_size}bp deletion at cut site\n"
|
| 370 |
+
log += f" Predicted editing efficiency: {edit_success_rate * 100:.1f}%\n"
|
| 371 |
+
|
| 372 |
+
# Step 5: Analysis of editing outcomes
|
| 373 |
+
log += "\nSTEP 5: Editing Outcome Analysis\n"
|
| 374 |
+
|
| 375 |
+
# Calculate basic stats
|
| 376 |
+
log += f" Original sequence length: {len(target_seq)} bp\n"
|
| 377 |
+
log += f" Modified sequence length: {len(modified_sequence)} bp\n"
|
| 378 |
+
|
| 379 |
+
# Save sequences to files
|
| 380 |
+
os.makedirs("crispr_results", exist_ok=True)
|
| 381 |
+
|
| 382 |
+
original_file = "crispr_results/original_sequence.txt"
|
| 383 |
+
with open(original_file, "w") as f:
|
| 384 |
+
f.write(f">Original_Sequence\n{target_seq}\n")
|
| 385 |
+
|
| 386 |
+
modified_file = "crispr_results/modified_sequence.txt"
|
| 387 |
+
with open(modified_file, "w") as f:
|
| 388 |
+
f.write(f">Modified_Sequence\n{modified_sequence}\n")
|
| 389 |
+
|
| 390 |
+
log += f" Original sequence saved to: {original_file}\n"
|
| 391 |
+
log += f" Modified sequence saved to: {modified_file}\n"
|
| 392 |
+
|
| 393 |
+
# Summary
|
| 394 |
+
log += "\nSUMMARY:\n"
|
| 395 |
+
log += f" CRISPR-Cas9 editing successfully simulated for {cell_tissue_type}\n"
|
| 396 |
+
log += f" {indel_size}bp deletion introduced at position {cut_position}\n"
|
| 397 |
+
log += f" Expected success rate in cell population: {edit_success_rate * 100:.1f}%\n"
|
| 398 |
+
|
| 399 |
+
return log
|
| 400 |
+
|
| 401 |
+
|
| 402 |
+
def analyze_calcium_imaging_data(image_stack_path, output_dir="./"):
|
| 403 |
+
"""Analyze calcium imaging data to quantify neuronal activity metrics.
|
| 404 |
+
|
| 405 |
+
This function processes fluorescence microscopy images of GCaMP-labeled neurons
|
| 406 |
+
to extract quantitative metrics of neuronal activity, including cell counts,
|
| 407 |
+
event rates, decay times, and signal-to-noise ratios.
|
| 408 |
+
|
| 409 |
+
Parameters
|
| 410 |
+
----------
|
| 411 |
+
image_stack_path : str
|
| 412 |
+
Path to the time-series stack of fluorescence microscopy images (TIFF format)
|
| 413 |
+
output_dir : str, optional
|
| 414 |
+
Directory to save output files (default: "./")
|
| 415 |
+
|
| 416 |
+
Returns
|
| 417 |
+
-------
|
| 418 |
+
str
|
| 419 |
+
Research log summarizing the analysis steps and results
|
| 420 |
+
|
| 421 |
+
"""
|
| 422 |
+
import os
|
| 423 |
+
|
| 424 |
+
import numpy as np
|
| 425 |
+
import pandas as pd
|
| 426 |
+
from scipy import ndimage, signal
|
| 427 |
+
from scipy.optimize import curve_fit
|
| 428 |
+
from skimage import feature, filters, io, measure, segmentation
|
| 429 |
+
|
| 430 |
+
# Create output directory if it doesn't exist
|
| 431 |
+
os.makedirs(output_dir, exist_ok=True)
|
| 432 |
+
|
| 433 |
+
# Step 1: Load the image stack
|
| 434 |
+
log = "CALCIUM IMAGING ANALYSIS LOG\n"
|
| 435 |
+
log += "===========================\n\n"
|
| 436 |
+
log += f"Loading image stack from: {image_stack_path}\n"
|
| 437 |
+
|
| 438 |
+
try:
|
| 439 |
+
image_stack = io.imread(image_stack_path)
|
| 440 |
+
num_frames, height, width = image_stack.shape
|
| 441 |
+
log += f"Successfully loaded {num_frames} frames of size {height}x{width}\n\n"
|
| 442 |
+
except Exception as e:
|
| 443 |
+
return f"Error loading image stack: {str(e)}"
|
| 444 |
+
|
| 445 |
+
# Step 2: Calculate mean image for segmentation
|
| 446 |
+
log += "Step 1: Preprocessing and neuron segmentation\n"
|
| 447 |
+
mean_image = np.mean(image_stack, axis=0)
|
| 448 |
+
|
| 449 |
+
# Apply Gaussian filter to reduce noise
|
| 450 |
+
smooth_mean = filters.gaussian(mean_image, sigma=2)
|
| 451 |
+
|
| 452 |
+
# Step 3: Segment neurons using watershed
|
| 453 |
+
# Find local maxima (potential cell centers)
|
| 454 |
+
distance = ndimage.distance_transform_edt(smooth_mean)
|
| 455 |
+
# Create a mask for local maxima instead of using indices=False parameter
|
| 456 |
+
coordinates = feature.peak_local_max(distance, min_distance=10)
|
| 457 |
+
|
| 458 |
+
# Handle case where no local maxima are found
|
| 459 |
+
if len(coordinates) == 0:
|
| 460 |
+
log += "No local maxima detected. Using simple thresholding instead.\n"
|
| 461 |
+
# Create a simple binary mask using thresholding as fallback
|
| 462 |
+
binary_mask = smooth_mean > filters.threshold_otsu(smooth_mean)
|
| 463 |
+
markers = measure.label(binary_mask)
|
| 464 |
+
else:
|
| 465 |
+
local_max = np.zeros_like(distance, dtype=bool)
|
| 466 |
+
for coord in coordinates:
|
| 467 |
+
local_max[coord[0], coord[1]] = True
|
| 468 |
+
markers = measure.label(local_max)
|
| 469 |
+
|
| 470 |
+
# Watershed segmentation
|
| 471 |
+
segmented = segmentation.watershed(-smooth_mean, markers, mask=smooth_mean > filters.threshold_otsu(smooth_mean))
|
| 472 |
+
|
| 473 |
+
# Get region properties
|
| 474 |
+
regions = measure.regionprops(segmented)
|
| 475 |
+
cell_count = len(regions)
|
| 476 |
+
log += f"Detected {cell_count} neurons in the field of view\n\n"
|
| 477 |
+
|
| 478 |
+
# Step 4: Extract time-series data for each neuron
|
| 479 |
+
log += "Step 2: Extracting fluorescence time-series for each neuron\n"
|
| 480 |
+
time_series_data = []
|
| 481 |
+
|
| 482 |
+
for _i, region in enumerate(regions):
|
| 483 |
+
mask = segmented == region.label
|
| 484 |
+
cell_time_series = []
|
| 485 |
+
|
| 486 |
+
for frame in range(num_frames):
|
| 487 |
+
intensity = np.mean(image_stack[frame][mask])
|
| 488 |
+
cell_time_series.append(intensity)
|
| 489 |
+
|
| 490 |
+
time_series_data.append(cell_time_series)
|
| 491 |
+
|
| 492 |
+
time_series_array = np.array(time_series_data)
|
| 493 |
+
|
| 494 |
+
# Step 5: Detect calcium events and calculate metrics
|
| 495 |
+
log += "Step 3: Calculating neuronal activity metrics\n"
|
| 496 |
+
|
| 497 |
+
# Function to fit exponential decay
|
| 498 |
+
def exp_decay(x, a, tau, c):
|
| 499 |
+
return a * np.exp(-x / tau) + c
|
| 500 |
+
|
| 501 |
+
event_rates = []
|
| 502 |
+
decay_times = []
|
| 503 |
+
snr_values = []
|
| 504 |
+
|
| 505 |
+
for i, ts in enumerate(time_series_data):
|
| 506 |
+
# Normalize time series
|
| 507 |
+
baseline = np.percentile(ts, 20)
|
| 508 |
+
ts_norm = [(x - baseline) / baseline for x in ts]
|
| 509 |
+
|
| 510 |
+
# Simple event detection (threshold crossing)
|
| 511 |
+
threshold = np.std(ts_norm) * 2
|
| 512 |
+
events = []
|
| 513 |
+
in_event = False
|
| 514 |
+
|
| 515 |
+
for j, val in enumerate(ts_norm):
|
| 516 |
+
if not in_event and val > threshold:
|
| 517 |
+
events.append(j)
|
| 518 |
+
in_event = True
|
| 519 |
+
elif in_event and val < threshold:
|
| 520 |
+
in_event = False
|
| 521 |
+
|
| 522 |
+
# Calculate event rate (events per minute, assuming 10 Hz acquisition)
|
| 523 |
+
acquisition_rate = 10 # Hz (assumption)
|
| 524 |
+
recording_time_minutes = num_frames / acquisition_rate / 60
|
| 525 |
+
event_rate = len(events) / recording_time_minutes
|
| 526 |
+
event_rates.append(event_rate)
|
| 527 |
+
|
| 528 |
+
# Calculate decay times for detected events
|
| 529 |
+
cell_decay_times = []
|
| 530 |
+
for event_start in events:
|
| 531 |
+
if event_start + 30 < len(ts_norm): # Ensure enough frames after event
|
| 532 |
+
event_window = ts_norm[event_start : event_start + 30]
|
| 533 |
+
peak_idx = np.argmax(event_window)
|
| 534 |
+
decay_segment = event_window[peak_idx:]
|
| 535 |
+
|
| 536 |
+
try:
|
| 537 |
+
# Fit exponential decay
|
| 538 |
+
x_data = np.arange(len(decay_segment))
|
| 539 |
+
popt, _ = curve_fit(
|
| 540 |
+
exp_decay,
|
| 541 |
+
x_data,
|
| 542 |
+
decay_segment,
|
| 543 |
+
p0=[decay_segment[0], 5, decay_segment[-1]],
|
| 544 |
+
bounds=([0, 0, 0], [np.inf, np.inf, np.inf]),
|
| 545 |
+
)
|
| 546 |
+
tau = popt[1] # Decay time constant
|
| 547 |
+
cell_decay_times.append(tau / acquisition_rate) # Convert to seconds
|
| 548 |
+
except Exception:
|
| 549 |
+
# Skip if curve fitting fails
|
| 550 |
+
pass
|
| 551 |
+
|
| 552 |
+
if cell_decay_times:
|
| 553 |
+
decay_times.append(np.mean(cell_decay_times))
|
| 554 |
+
else:
|
| 555 |
+
decay_times.append(np.nan)
|
| 556 |
+
|
| 557 |
+
# Calculate signal-to-noise ratio
|
| 558 |
+
signal = np.mean([ts_norm[e] for e in events]) if events else 0 # noqa: F811
|
| 559 |
+
noise = np.std([ts_norm[i] for i in range(len(ts_norm)) if all(abs(i - e) > 5 for e in events)])
|
| 560 |
+
snr = signal / noise if noise > 0 else 0
|
| 561 |
+
snr_values.append(snr)
|
| 562 |
+
|
| 563 |
+
# Step 6: Compile and save results
|
| 564 |
+
cell_metrics = pd.DataFrame(
|
| 565 |
+
{
|
| 566 |
+
"Cell_ID": range(1, cell_count + 1),
|
| 567 |
+
"Event_Rate_per_min": event_rates,
|
| 568 |
+
"Decay_Time_sec": decay_times,
|
| 569 |
+
"SNR": snr_values,
|
| 570 |
+
}
|
| 571 |
+
)
|
| 572 |
+
|
| 573 |
+
metrics_file = os.path.join(output_dir, "neuron_activity_metrics.csv")
|
| 574 |
+
cell_metrics.to_csv(metrics_file, index=False)
|
| 575 |
+
|
| 576 |
+
# Save time series data
|
| 577 |
+
time_series_file = os.path.join(output_dir, "neuron_time_series.csv")
|
| 578 |
+
time_series_df = pd.DataFrame(time_series_array.T)
|
| 579 |
+
time_series_df.columns = [f"Cell_{i + 1}" for i in range(cell_count)]
|
| 580 |
+
time_series_df.to_csv(time_series_file, index=False)
|
| 581 |
+
|
| 582 |
+
# Step 7: Summarize results
|
| 583 |
+
log += f"Cell count: {cell_count}\n"
|
| 584 |
+
log += f"Average event rate: {np.nanmean(event_rates):.2f} events/min\n"
|
| 585 |
+
log += f"Average decay time: {np.nanmean(decay_times):.2f} seconds\n"
|
| 586 |
+
log += f"Average SNR: {np.nanmean(snr_values):.2f}\n\n"
|
| 587 |
+
|
| 588 |
+
log += "Step 4: Results saved to files\n"
|
| 589 |
+
log += f"Neuron activity metrics saved to: {metrics_file}\n"
|
| 590 |
+
log += f"Time series data saved to: {time_series_file}\n"
|
| 591 |
+
|
| 592 |
+
return log
|
| 593 |
+
|
| 594 |
+
|
| 595 |
+
def analyze_in_vitro_drug_release_kinetics(
|
| 596 |
+
time_points,
|
| 597 |
+
concentration_data,
|
| 598 |
+
drug_name="Drug",
|
| 599 |
+
total_drug_loaded=None,
|
| 600 |
+
output_dir="./",
|
| 601 |
+
):
|
| 602 |
+
"""Analyzes in vitro drug release kinetics from biomaterial formulations.
|
| 603 |
+
|
| 604 |
+
Parameters
|
| 605 |
+
----------
|
| 606 |
+
time_points : list or numpy.ndarray
|
| 607 |
+
Time points at which drug concentrations were measured (in hours)
|
| 608 |
+
concentration_data : list or numpy.ndarray
|
| 609 |
+
Measured drug concentration at each time point
|
| 610 |
+
drug_name : str, optional
|
| 611 |
+
Name of the drug being analyzed (default: "Drug")
|
| 612 |
+
total_drug_loaded : float, optional
|
| 613 |
+
Total amount of drug initially loaded in the formulation.
|
| 614 |
+
If None, the maximum concentration is used as 100% (default: None)
|
| 615 |
+
output_dir : str, optional
|
| 616 |
+
Directory to save output files (default: "./")
|
| 617 |
+
|
| 618 |
+
Returns
|
| 619 |
+
-------
|
| 620 |
+
str
|
| 621 |
+
Research log summarizing the analysis steps, results, and saved file locations
|
| 622 |
+
|
| 623 |
+
"""
|
| 624 |
+
import os
|
| 625 |
+
from datetime import datetime
|
| 626 |
+
|
| 627 |
+
import matplotlib.pyplot as plt
|
| 628 |
+
import numpy as np
|
| 629 |
+
import pandas as pd
|
| 630 |
+
from scipy.optimize import curve_fit
|
| 631 |
+
|
| 632 |
+
# Ensure output directory exists
|
| 633 |
+
os.makedirs(output_dir, exist_ok=True)
|
| 634 |
+
|
| 635 |
+
# Convert inputs to numpy arrays
|
| 636 |
+
time_points = np.array(time_points)
|
| 637 |
+
concentration_data = np.array(concentration_data)
|
| 638 |
+
|
| 639 |
+
# Calculate cumulative release percentage
|
| 640 |
+
if total_drug_loaded is None:
|
| 641 |
+
total_drug_loaded = np.max(concentration_data)
|
| 642 |
+
|
| 643 |
+
cumulative_release = (concentration_data / total_drug_loaded) * 100
|
| 644 |
+
|
| 645 |
+
# Create a DataFrame for easier manipulation
|
| 646 |
+
release_df = pd.DataFrame(
|
| 647 |
+
{
|
| 648 |
+
"Time (hours)": time_points,
|
| 649 |
+
"Concentration": concentration_data,
|
| 650 |
+
"Cumulative Release (%)": cumulative_release,
|
| 651 |
+
}
|
| 652 |
+
)
|
| 653 |
+
|
| 654 |
+
# Calculate release rate (simple approximation using differences)
|
| 655 |
+
release_df["Release Rate"] = np.gradient(release_df["Cumulative Release (%)"], release_df["Time (hours)"])
|
| 656 |
+
|
| 657 |
+
# Define kinetic models
|
| 658 |
+
def zero_order(t, k):
|
| 659 |
+
return k * t
|
| 660 |
+
|
| 661 |
+
def first_order(t, k):
|
| 662 |
+
return 100 * (1 - np.exp(-k * t))
|
| 663 |
+
|
| 664 |
+
def higuchi(t, k):
|
| 665 |
+
return k * np.sqrt(t)
|
| 666 |
+
|
| 667 |
+
def korsmeyer_peppas(t, k, n):
|
| 668 |
+
return 100 * (k * t) ** n
|
| 669 |
+
|
| 670 |
+
# Fit data to different kinetic models
|
| 671 |
+
models = {}
|
| 672 |
+
r2_values = {}
|
| 673 |
+
|
| 674 |
+
# Zero-order kinetics
|
| 675 |
+
try:
|
| 676 |
+
params, _ = curve_fit(zero_order, time_points, cumulative_release)
|
| 677 |
+
y_pred = zero_order(time_points, *params)
|
| 678 |
+
ss_total = np.sum((cumulative_release - np.mean(cumulative_release)) ** 2)
|
| 679 |
+
ss_residual = np.sum((cumulative_release - y_pred) ** 2)
|
| 680 |
+
r2 = 1 - (ss_residual / ss_total)
|
| 681 |
+
models["Zero-order"] = {
|
| 682 |
+
"params": params,
|
| 683 |
+
"equation": f"Release = {params[0]:.4f} * t",
|
| 684 |
+
"pred": y_pred,
|
| 685 |
+
}
|
| 686 |
+
r2_values["Zero-order"] = r2
|
| 687 |
+
except Exception:
|
| 688 |
+
models["Zero-order"] = {
|
| 689 |
+
"params": None,
|
| 690 |
+
"equation": "Fitting failed",
|
| 691 |
+
"pred": None,
|
| 692 |
+
}
|
| 693 |
+
r2_values["Zero-order"] = 0
|
| 694 |
+
|
| 695 |
+
# First-order kinetics
|
| 696 |
+
try:
|
| 697 |
+
params, _ = curve_fit(first_order, time_points, cumulative_release, bounds=(0, [1]))
|
| 698 |
+
y_pred = first_order(time_points, *params)
|
| 699 |
+
ss_total = np.sum((cumulative_release - np.mean(cumulative_release)) ** 2)
|
| 700 |
+
ss_residual = np.sum((cumulative_release - y_pred) ** 2)
|
| 701 |
+
r2 = 1 - (ss_residual / ss_total)
|
| 702 |
+
models["First-order"] = {
|
| 703 |
+
"params": params,
|
| 704 |
+
"equation": f"Release = 100 * (1 - exp(-{params[0]:.4f} * t))",
|
| 705 |
+
"pred": y_pred,
|
| 706 |
+
}
|
| 707 |
+
r2_values["First-order"] = r2
|
| 708 |
+
except Exception:
|
| 709 |
+
models["First-order"] = {
|
| 710 |
+
"params": None,
|
| 711 |
+
"equation": "Fitting failed",
|
| 712 |
+
"pred": None,
|
| 713 |
+
}
|
| 714 |
+
r2_values["First-order"] = 0
|
| 715 |
+
|
| 716 |
+
# Higuchi model
|
| 717 |
+
try:
|
| 718 |
+
params, _ = curve_fit(higuchi, time_points, cumulative_release)
|
| 719 |
+
y_pred = higuchi(time_points, *params)
|
| 720 |
+
ss_total = np.sum((cumulative_release - np.mean(cumulative_release)) ** 2)
|
| 721 |
+
ss_residual = np.sum((cumulative_release - y_pred) ** 2)
|
| 722 |
+
r2 = 1 - (ss_residual / ss_total)
|
| 723 |
+
models["Higuchi"] = {
|
| 724 |
+
"params": params,
|
| 725 |
+
"equation": f"Release = {params[0]:.4f} * sqrt(t)",
|
| 726 |
+
"pred": y_pred,
|
| 727 |
+
}
|
| 728 |
+
r2_values["Higuchi"] = r2
|
| 729 |
+
except Exception:
|
| 730 |
+
models["Higuchi"] = {"params": None, "equation": "Fitting failed", "pred": None}
|
| 731 |
+
r2_values["Higuchi"] = 0
|
| 732 |
+
|
| 733 |
+
# Korsmeyer-Peppas model
|
| 734 |
+
try:
|
| 735 |
+
# Only use the first 60% of release data for Korsmeyer-Peppas model
|
| 736 |
+
mask = cumulative_release <= 60
|
| 737 |
+
if sum(mask) >= 3: # Need at least 3 points for fitting
|
| 738 |
+
params, _ = curve_fit(
|
| 739 |
+
korsmeyer_peppas,
|
| 740 |
+
time_points[mask],
|
| 741 |
+
cumulative_release[mask],
|
| 742 |
+
bounds=([0, 0], [1, 1]),
|
| 743 |
+
)
|
| 744 |
+
y_pred = korsmeyer_peppas(time_points, *params)
|
| 745 |
+
ss_total = np.sum((cumulative_release - np.mean(cumulative_release)) ** 2)
|
| 746 |
+
ss_residual = np.sum((cumulative_release - y_pred) ** 2)
|
| 747 |
+
r2 = 1 - (ss_residual / ss_total)
|
| 748 |
+
models["Korsmeyer-Peppas"] = {
|
| 749 |
+
"params": params,
|
| 750 |
+
"equation": f"Release = 100 * ({params[0]:.4f} * t)^{params[1]:.4f}",
|
| 751 |
+
"pred": y_pred,
|
| 752 |
+
}
|
| 753 |
+
r2_values["Korsmeyer-Peppas"] = r2
|
| 754 |
+
else:
|
| 755 |
+
models["Korsmeyer-Peppas"] = {
|
| 756 |
+
"params": None,
|
| 757 |
+
"equation": "Insufficient data points",
|
| 758 |
+
"pred": None,
|
| 759 |
+
}
|
| 760 |
+
r2_values["Korsmeyer-Peppas"] = 0
|
| 761 |
+
except Exception:
|
| 762 |
+
models["Korsmeyer-Peppas"] = {
|
| 763 |
+
"params": None,
|
| 764 |
+
"equation": "Fitting failed",
|
| 765 |
+
"pred": None,
|
| 766 |
+
}
|
| 767 |
+
r2_values["Korsmeyer-Peppas"] = 0
|
| 768 |
+
|
| 769 |
+
# Determine best model based on R² value
|
| 770 |
+
best_model = max(r2_values, key=r2_values.get)
|
| 771 |
+
|
| 772 |
+
# Calculate half-life (time to 50% release)
|
| 773 |
+
try:
|
| 774 |
+
# Use best model to calculate half-life
|
| 775 |
+
if best_model == "Zero-order":
|
| 776 |
+
k = models[best_model]["params"][0]
|
| 777 |
+
half_life = 50 / k if k > 0 else float("inf")
|
| 778 |
+
elif best_model == "First-order":
|
| 779 |
+
k = models[best_model]["params"][0]
|
| 780 |
+
half_life = -np.log(0.5) / k if k > 0 else float("inf")
|
| 781 |
+
elif best_model == "Higuchi":
|
| 782 |
+
k = models[best_model]["params"][0]
|
| 783 |
+
half_life = (50 / k) ** 2 if k > 0 else float("inf")
|
| 784 |
+
elif best_model == "Korsmeyer-Peppas":
|
| 785 |
+
k, n = models[best_model]["params"]
|
| 786 |
+
half_life = (0.5 ** (1 / n)) / k if k > 0 else float("inf")
|
| 787 |
+
else:
|
| 788 |
+
# Interpolate from data if model fitting failed
|
| 789 |
+
from scipy.interpolate import interp1d
|
| 790 |
+
|
| 791 |
+
if np.max(cumulative_release) >= 50:
|
| 792 |
+
f = interp1d(cumulative_release, time_points)
|
| 793 |
+
half_life = float(f(50))
|
| 794 |
+
else:
|
| 795 |
+
half_life = "Not reached"
|
| 796 |
+
except Exception:
|
| 797 |
+
half_life = "Could not calculate"
|
| 798 |
+
|
| 799 |
+
# Create plots
|
| 800 |
+
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
|
| 801 |
+
|
| 802 |
+
# 1. Cumulative release plot with model fits
|
| 803 |
+
plt.figure(figsize=(10, 6))
|
| 804 |
+
plt.plot(time_points, cumulative_release, "o-", label="Experimental data")
|
| 805 |
+
|
| 806 |
+
for model_name, model_data in models.items():
|
| 807 |
+
if model_data["pred"] is not None:
|
| 808 |
+
plt.plot(
|
| 809 |
+
time_points,
|
| 810 |
+
model_data["pred"],
|
| 811 |
+
"--",
|
| 812 |
+
label=f"{model_name} (R² = {r2_values[model_name]:.4f})",
|
| 813 |
+
)
|
| 814 |
+
|
| 815 |
+
plt.xlabel("Time (hours)")
|
| 816 |
+
plt.ylabel("Cumulative Release (%)")
|
| 817 |
+
plt.title(f"In Vitro Release Profile of {drug_name}")
|
| 818 |
+
plt.legend()
|
| 819 |
+
plt.grid(True, linestyle="--", alpha=0.7)
|
| 820 |
+
cumulative_plot_path = os.path.join(output_dir, f"cumulative_release_{timestamp}.png")
|
| 821 |
+
plt.savefig(cumulative_plot_path, dpi=300, bbox_inches="tight")
|
| 822 |
+
plt.close()
|
| 823 |
+
|
| 824 |
+
# 2. Release rate plot
|
| 825 |
+
plt.figure(figsize=(10, 6))
|
| 826 |
+
plt.plot(time_points, release_df["Release Rate"], "o-")
|
| 827 |
+
plt.xlabel("Time (hours)")
|
| 828 |
+
plt.ylabel("Release Rate (%/hour)")
|
| 829 |
+
plt.title(f"Release Rate of {drug_name}")
|
| 830 |
+
plt.grid(True, linestyle="--", alpha=0.7)
|
| 831 |
+
rate_plot_path = os.path.join(output_dir, f"release_rate_{timestamp}.png")
|
| 832 |
+
plt.savefig(rate_plot_path, dpi=300, bbox_inches="tight")
|
| 833 |
+
plt.close()
|
| 834 |
+
|
| 835 |
+
# Save data to CSV
|
| 836 |
+
csv_path = os.path.join(output_dir, f"drug_release_data_{timestamp}.csv")
|
| 837 |
+
release_df.to_csv(csv_path, index=False)
|
| 838 |
+
|
| 839 |
+
# Generate research log
|
| 840 |
+
log = f"""
|
| 841 |
+
# In Vitro Drug Release Kinetics Analysis for {drug_name}
|
| 842 |
+
|
| 843 |
+
## Analysis Summary
|
| 844 |
+
- **Date/Time:** {datetime.now().strftime("%Y-%m-%d %H:%M:%S")}
|
| 845 |
+
- **Drug Analyzed:** {drug_name}
|
| 846 |
+
- **Time Range:** {min(time_points)} to {max(time_points)} hours
|
| 847 |
+
- **Number of Data Points:** {len(time_points)}
|
| 848 |
+
- **Maximum Release Achieved:** {max(cumulative_release):.2f}%
|
| 849 |
+
|
| 850 |
+
## Kinetic Models Analysis
|
| 851 |
+
The release data was fitted to four standard kinetic models:
|
| 852 |
+
|
| 853 |
+
1. **Zero-order Model:** {models["Zero-order"]["equation"]} (R² = {r2_values["Zero-order"]:.4f})
|
| 854 |
+
2. **First-order Model:** {models["First-order"]["equation"]} (R² = {r2_values["First-order"]:.4f})
|
| 855 |
+
3. **Higuchi Model:** {models["Higuchi"]["equation"]} (R² = {r2_values["Higuchi"]:.4f})
|
| 856 |
+
4. **Korsmeyer-Peppas Model:** {models["Korsmeyer-Peppas"]["equation"]} (R² = {r2_values["Korsmeyer-Peppas"]:.4f})
|
| 857 |
+
|
| 858 |
+
**Best-fitting Model:** {best_model} (R² = {r2_values[best_model]:.4f})
|
| 859 |
+
|
| 860 |
+
## Release Metrics
|
| 861 |
+
- **Half-life (t50%):** {half_life if isinstance(half_life, str) else f"{half_life:.2f} hours"}
|
| 862 |
+
- **Initial Release Rate:** {release_df["Release Rate"].iloc[0]:.4f} %/hour
|
| 863 |
+
- **Average Release Rate:** {np.mean(release_df["Release Rate"]):.4f} %/hour
|
| 864 |
+
|
| 865 |
+
## Files Generated
|
| 866 |
+
1. Cumulative Release Plot: {cumulative_plot_path}
|
| 867 |
+
2. Release Rate Plot: {rate_plot_path}
|
| 868 |
+
3. Data CSV: {csv_path}
|
| 869 |
+
|
| 870 |
+
## Interpretation
|
| 871 |
+
The drug release profile of {drug_name} best follows a {
|
| 872 |
+
best_model
|
| 873 |
+
} kinetic model, which suggests that the release mechanism is primarily driven by {
|
| 874 |
+
"diffusion through a porous matrix"
|
| 875 |
+
if best_model == "Higuchi"
|
| 876 |
+
else "diffusion with erosion"
|
| 877 |
+
if best_model == "Korsmeyer-Peppas" and 0.43 <= models[best_model]["params"][1] <= 0.85
|
| 878 |
+
else "Fickian diffusion"
|
| 879 |
+
if best_model == "Korsmeyer-Peppas" and models[best_model]["params"][1] < 0.43
|
| 880 |
+
else "case-II transport"
|
| 881 |
+
if best_model == "Korsmeyer-Peppas" and models[best_model]["params"][1] > 0.85
|
| 882 |
+
else "concentration-dependent diffusion"
|
| 883 |
+
if best_model == "First-order"
|
| 884 |
+
else "constant release rate independent of concentration"
|
| 885 |
+
if best_model == "Zero-order"
|
| 886 |
+
else "complex mechanisms"
|
| 887 |
+
}.
|
| 888 |
+
"""
|
| 889 |
+
|
| 890 |
+
return log.strip()
|
| 891 |
+
|
| 892 |
+
|
| 893 |
+
def analyze_myofiber_morphology(
|
| 894 |
+
image_path,
|
| 895 |
+
nuclei_channel=2,
|
| 896 |
+
myofiber_channel=1,
|
| 897 |
+
threshold_method="otsu",
|
| 898 |
+
output_dir="./",
|
| 899 |
+
):
|
| 900 |
+
"""Quantifies morphological properties of myofibers in microscopy images of tissue sections.
|
| 901 |
+
|
| 902 |
+
Parameters
|
| 903 |
+
----------
|
| 904 |
+
image_path : str
|
| 905 |
+
Path to the microscopy image file (typically a multichannel image with nuclei and myofiber staining)
|
| 906 |
+
nuclei_channel : int, default=2
|
| 907 |
+
Channel index containing nuclei staining (DAPI, Hoechst, etc.)
|
| 908 |
+
myofiber_channel : int, default=1
|
| 909 |
+
Channel index containing myofiber staining (α-Actinin, etc.)
|
| 910 |
+
threshold_method : str, default='otsu'
|
| 911 |
+
Method for thresholding ('otsu', 'adaptive', or 'manual')
|
| 912 |
+
output_dir : str, default='./'
|
| 913 |
+
Directory to save output files
|
| 914 |
+
|
| 915 |
+
Returns
|
| 916 |
+
-------
|
| 917 |
+
str
|
| 918 |
+
Research log summarizing the analysis steps and results
|
| 919 |
+
|
| 920 |
+
"""
|
| 921 |
+
import os
|
| 922 |
+
from datetime import datetime
|
| 923 |
+
|
| 924 |
+
import numpy as np
|
| 925 |
+
import pandas as pd
|
| 926 |
+
from skimage import exposure, filters, io, measure, morphology
|
| 927 |
+
from skimage.color import label2rgb
|
| 928 |
+
|
| 929 |
+
# Create output directory if it doesn't exist
|
| 930 |
+
os.makedirs(output_dir, exist_ok=True)
|
| 931 |
+
|
| 932 |
+
# Load the image
|
| 933 |
+
image = io.imread(image_path)
|
| 934 |
+
|
| 935 |
+
# Extract channels (assuming multichannel image)
|
| 936 |
+
if len(image.shape) > 2:
|
| 937 |
+
if len(image.shape) == 3:
|
| 938 |
+
# RGB image
|
| 939 |
+
nuclei_img = image[:, :, nuclei_channel] if nuclei_channel < image.shape[2] else image[:, :, 0]
|
| 940 |
+
myofiber_img = image[:, :, myofiber_channel] if myofiber_channel < image.shape[2] else image[:, :, 1]
|
| 941 |
+
else:
|
| 942 |
+
# Multichannel image (e.g., from confocal)
|
| 943 |
+
nuclei_img = image[nuclei_channel, :, :] if nuclei_channel < image.shape[0] else image[0, :, :]
|
| 944 |
+
myofiber_img = image[myofiber_channel, :, :] if myofiber_channel < image.shape[0] else image[1, :, :]
|
| 945 |
+
else:
|
| 946 |
+
# Single channel image - can't separate nuclei and myofibers
|
| 947 |
+
return "Error: Input image must be multichannel to separate nuclei and myofibers"
|
| 948 |
+
|
| 949 |
+
# Enhance contrast
|
| 950 |
+
nuclei_img = exposure.equalize_adapthist(nuclei_img)
|
| 951 |
+
myofiber_img = exposure.equalize_adapthist(myofiber_img)
|
| 952 |
+
|
| 953 |
+
# Segment nuclei
|
| 954 |
+
if threshold_method == "otsu":
|
| 955 |
+
nuclei_thresh = filters.threshold_otsu(nuclei_img)
|
| 956 |
+
elif threshold_method == "adaptive":
|
| 957 |
+
nuclei_thresh = filters.threshold_local(nuclei_img, block_size=35)
|
| 958 |
+
else: # manual
|
| 959 |
+
nuclei_thresh = np.mean(nuclei_img) * 1.5
|
| 960 |
+
|
| 961 |
+
nuclei_binary = nuclei_img > nuclei_thresh
|
| 962 |
+
nuclei_binary = morphology.remove_small_objects(nuclei_binary, min_size=30)
|
| 963 |
+
nuclei_binary = morphology.binary_closing(nuclei_binary)
|
| 964 |
+
|
| 965 |
+
# Label nuclei
|
| 966 |
+
nuclei_labels = measure.label(nuclei_binary)
|
| 967 |
+
nuclei_props = measure.regionprops(nuclei_labels)
|
| 968 |
+
|
| 969 |
+
# Segment myofibers
|
| 970 |
+
if threshold_method == "otsu":
|
| 971 |
+
myofiber_thresh = filters.threshold_otsu(myofiber_img)
|
| 972 |
+
elif threshold_method == "adaptive":
|
| 973 |
+
myofiber_thresh = filters.threshold_local(myofiber_img, block_size=101)
|
| 974 |
+
else: # manual
|
| 975 |
+
myofiber_thresh = np.mean(myofiber_img) * 1.2
|
| 976 |
+
|
| 977 |
+
myofiber_binary = myofiber_img > myofiber_thresh
|
| 978 |
+
myofiber_binary = morphology.remove_small_objects(myofiber_binary, min_size=500)
|
| 979 |
+
myofiber_binary = morphology.binary_closing(myofiber_binary, morphology.disk(3))
|
| 980 |
+
|
| 981 |
+
# Label myofibers
|
| 982 |
+
myofiber_labels = measure.label(myofiber_binary)
|
| 983 |
+
myofiber_props = measure.regionprops(myofiber_labels)
|
| 984 |
+
|
| 985 |
+
# Count nuclei inside myofibers
|
| 986 |
+
nuclei_inside = 0
|
| 987 |
+
nuclei_total = len(nuclei_props)
|
| 988 |
+
|
| 989 |
+
for nucleus in nuclei_props:
|
| 990 |
+
y, x = nucleus.centroid
|
| 991 |
+
y, x = int(y), int(x)
|
| 992 |
+
if myofiber_binary[y, x]:
|
| 993 |
+
nuclei_inside += 1
|
| 994 |
+
|
| 995 |
+
percent_inside = nuclei_inside / nuclei_total * 100 if nuclei_total > 0 else 0
|
| 996 |
+
|
| 997 |
+
# Calculate myofiber morphological properties
|
| 998 |
+
myofiber_data = []
|
| 999 |
+
for fiber in myofiber_props:
|
| 1000 |
+
myofiber_data.append(
|
| 1001 |
+
{
|
| 1002 |
+
"Area": fiber.area,
|
| 1003 |
+
"Perimeter": fiber.perimeter,
|
| 1004 |
+
"Eccentricity": fiber.eccentricity,
|
| 1005 |
+
"Solidity": fiber.solidity,
|
| 1006 |
+
"Orientation": fiber.orientation,
|
| 1007 |
+
}
|
| 1008 |
+
)
|
| 1009 |
+
|
| 1010 |
+
# Save results
|
| 1011 |
+
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
|
| 1012 |
+
results_file = f"{output_dir}/myofiber_analysis_{timestamp}.csv"
|
| 1013 |
+
|
| 1014 |
+
if myofiber_data:
|
| 1015 |
+
df = pd.DataFrame(myofiber_data)
|
| 1016 |
+
df.to_csv(results_file, index=False)
|
| 1017 |
+
|
| 1018 |
+
# Calculate summary statistics
|
| 1019 |
+
mean_area = df["Area"].mean()
|
| 1020 |
+
mean_perimeter = df["Perimeter"].mean()
|
| 1021 |
+
mean_eccentricity = df["Eccentricity"].mean()
|
| 1022 |
+
else:
|
| 1023 |
+
mean_area = mean_perimeter = mean_eccentricity = 0
|
| 1024 |
+
|
| 1025 |
+
# Save labeled image
|
| 1026 |
+
labeled_image = label2rgb(myofiber_labels, image=myofiber_img)
|
| 1027 |
+
labeled_image_path = f"{output_dir}/labeled_myofibers_{timestamp}.png"
|
| 1028 |
+
io.imsave(labeled_image_path, (labeled_image * 255).astype(np.uint8))
|
| 1029 |
+
|
| 1030 |
+
# Create research log
|
| 1031 |
+
log = f"""
|
| 1032 |
+
MYOFIBER MORPHOLOGICAL ANALYSIS REPORT
|
| 1033 |
+
======================================
|
| 1034 |
+
Date: {datetime.now().strftime("%Y-%m-%d %H:%M:%S")}
|
| 1035 |
+
Image: {image_path}
|
| 1036 |
+
|
| 1037 |
+
ANALYSIS STEPS:
|
| 1038 |
+
1. Loaded multichannel microscopy image
|
| 1039 |
+
2. Extracted nuclei (channel {nuclei_channel}) and myofiber (channel {myofiber_channel}) signals
|
| 1040 |
+
3. Enhanced contrast using adaptive histogram equalization
|
| 1041 |
+
4. Segmented nuclei using {threshold_method} thresholding
|
| 1042 |
+
5. Segmented myofibers using {threshold_method} thresholding
|
| 1043 |
+
6. Performed morphological operations to refine segmentation
|
| 1044 |
+
7. Identified and measured individual myofibers and nuclei
|
| 1045 |
+
|
| 1046 |
+
RESULTS:
|
| 1047 |
+
- Total myofibers detected: {len(myofiber_props)}
|
| 1048 |
+
- Total nuclei detected: {nuclei_total}
|
| 1049 |
+
- Nuclei inside myofibers: {nuclei_inside} ({percent_inside:.2f}%)
|
| 1050 |
+
- Mean myofiber area: {mean_area:.2f} pixels
|
| 1051 |
+
- Mean myofiber perimeter: {mean_perimeter:.2f} pixels
|
| 1052 |
+
- Mean myofiber eccentricity: {mean_eccentricity:.2f}
|
| 1053 |
+
|
| 1054 |
+
FILES GENERATED:
|
| 1055 |
+
- Morphological measurements: {results_file}
|
| 1056 |
+
- Labeled myofiber image: {labeled_image_path}
|
| 1057 |
+
"""
|
| 1058 |
+
|
| 1059 |
+
return log
|
| 1060 |
+
|
| 1061 |
+
|
| 1062 |
+
def decode_behavior_from_neural_trajectories(neural_data, behavioral_data, n_components=10, output_dir="./"):
|
| 1063 |
+
"""Model neural activity trajectories and decode behavioral variables.
|
| 1064 |
+
|
| 1065 |
+
Parameters
|
| 1066 |
+
----------
|
| 1067 |
+
neural_data : numpy.ndarray
|
| 1068 |
+
Neural spiking activity data, shape (n_timepoints, n_neurons)
|
| 1069 |
+
behavioral_data : numpy.ndarray
|
| 1070 |
+
Behavioral data, shape (n_timepoints, n_behavioral_variables)
|
| 1071 |
+
n_components : int, optional
|
| 1072 |
+
Number of principal components to use for dimensionality reduction, default is 10
|
| 1073 |
+
output_dir : str, optional
|
| 1074 |
+
Directory to save output files, default is "./"
|
| 1075 |
+
|
| 1076 |
+
Returns
|
| 1077 |
+
-------
|
| 1078 |
+
str
|
| 1079 |
+
Research log summarizing the steps taken and results
|
| 1080 |
+
|
| 1081 |
+
"""
|
| 1082 |
+
import os
|
| 1083 |
+
import pickle
|
| 1084 |
+
|
| 1085 |
+
import matplotlib.pyplot as plt
|
| 1086 |
+
import numpy as np
|
| 1087 |
+
from pykalman import KalmanFilter
|
| 1088 |
+
from sklearn.decomposition import PCA
|
| 1089 |
+
from sklearn.metrics import mean_squared_error
|
| 1090 |
+
from sklearn.model_selection import train_test_split
|
| 1091 |
+
|
| 1092 |
+
# Create output directory if it doesn't exist
|
| 1093 |
+
if not os.path.exists(output_dir):
|
| 1094 |
+
os.makedirs(output_dir)
|
| 1095 |
+
|
| 1096 |
+
# Initialize research log
|
| 1097 |
+
log = "# Neural Trajectory Modeling and Decoding Research Log\n\n"
|
| 1098 |
+
|
| 1099 |
+
# Step 1: Preprocess the data
|
| 1100 |
+
log += "## Step 1: Data Preprocessing\n"
|
| 1101 |
+
log += f"- Neural data shape: {neural_data.shape}\n"
|
| 1102 |
+
log += f"- Behavioral data shape: {behavioral_data.shape}\n"
|
| 1103 |
+
|
| 1104 |
+
# Check for NaN values and replace with zeros
|
| 1105 |
+
neural_data = np.nan_to_num(neural_data)
|
| 1106 |
+
behavioral_data = np.nan_to_num(behavioral_data)
|
| 1107 |
+
|
| 1108 |
+
# Split data into training and testing sets
|
| 1109 |
+
X_train, X_test, y_train, y_test = train_test_split(neural_data, behavioral_data, test_size=0.2, random_state=42)
|
| 1110 |
+
log += f"- Training set size: {X_train.shape[0]} samples\n"
|
| 1111 |
+
log += f"- Testing set size: {X_test.shape[0]} samples\n\n"
|
| 1112 |
+
|
| 1113 |
+
# Step 2: Dimensionality reduction with PCA
|
| 1114 |
+
log += "## Step 2: Dimensionality Reduction\n"
|
| 1115 |
+
log += f"- Reducing neural data from {neural_data.shape[1]} dimensions to {n_components} components\n"
|
| 1116 |
+
|
| 1117 |
+
pca = PCA(n_components=n_components)
|
| 1118 |
+
X_train_pca = pca.fit_transform(X_train)
|
| 1119 |
+
X_test_pca = pca.transform(X_test)
|
| 1120 |
+
|
| 1121 |
+
explained_variance = np.sum(pca.explained_variance_ratio_) * 100
|
| 1122 |
+
log += f"- Total variance explained: {explained_variance:.2f}%\n\n"
|
| 1123 |
+
|
| 1124 |
+
# Save PCA components visualization
|
| 1125 |
+
try:
|
| 1126 |
+
plt.figure(figsize=(10, 6))
|
| 1127 |
+
plt.bar(range(1, n_components + 1), pca.explained_variance_ratio_)
|
| 1128 |
+
plt.xlabel("Principal Component")
|
| 1129 |
+
plt.ylabel("Explained Variance Ratio")
|
| 1130 |
+
plt.title("PCA Components Explained Variance")
|
| 1131 |
+
plt.xticks(range(1, n_components + 1))
|
| 1132 |
+
plt.tight_layout()
|
| 1133 |
+
|
| 1134 |
+
pca_plot_path = os.path.join(output_dir, "pca_explained_variance.png")
|
| 1135 |
+
plt.savefig(pca_plot_path, dpi=300)
|
| 1136 |
+
plt.close()
|
| 1137 |
+
|
| 1138 |
+
log += f"- PCA components visualization saved to: {pca_plot_path}\n\n"
|
| 1139 |
+
except Exception as e:
|
| 1140 |
+
log += f"- Error creating PCA visualization: {str(e)}\n\n"
|
| 1141 |
+
|
| 1142 |
+
# Step 3: Train a Kalman filter for decoding
|
| 1143 |
+
log += "## Step 3: Trajectory Modeling and Decoding\n"
|
| 1144 |
+
log += "- Training Kalman filter to decode behavioral variables from neural trajectories\n"
|
| 1145 |
+
|
| 1146 |
+
# Initialize and train Kalman filter
|
| 1147 |
+
kf = KalmanFilter(initial_state_mean=np.zeros(y_train.shape[1]), n_dim_obs=X_train_pca.shape[1])
|
| 1148 |
+
|
| 1149 |
+
# Fit the Kalman filter to the data
|
| 1150 |
+
kf.em(X_train_pca, y_train)
|
| 1151 |
+
|
| 1152 |
+
# Step 4: Decode behavioral variables
|
| 1153 |
+
log += "## Step 4: Decoding Behavioral Variables\n"
|
| 1154 |
+
|
| 1155 |
+
# Use the Kalman filter to predict behavioral variables
|
| 1156 |
+
y_pred, _ = kf.filter(X_test_pca)
|
| 1157 |
+
|
| 1158 |
+
# Evaluate performance
|
| 1159 |
+
mse = mean_squared_error(y_test, y_pred)
|
| 1160 |
+
log += f"- Mean squared error on test set: {mse:.4f}\n\n"
|
| 1161 |
+
|
| 1162 |
+
# Save the decoded trajectories visualization
|
| 1163 |
+
try:
|
| 1164 |
+
if y_test.shape[1] >= 2:
|
| 1165 |
+
# Create visualization of true vs. predicted trajectories (first 2 dimensions)
|
| 1166 |
+
plt.figure(figsize=(12, 6))
|
| 1167 |
+
|
| 1168 |
+
# First behavioral variable
|
| 1169 |
+
plt.subplot(1, 2, 1)
|
| 1170 |
+
plt.plot(y_test[:, 0], label="True")
|
| 1171 |
+
plt.plot(y_pred[:, 0], label="Predicted")
|
| 1172 |
+
plt.xlabel("Time steps")
|
| 1173 |
+
plt.ylabel("Behavioral Variable 1")
|
| 1174 |
+
plt.title("Decoding Performance - Variable 1")
|
| 1175 |
+
plt.legend()
|
| 1176 |
+
|
| 1177 |
+
# Second behavioral variable
|
| 1178 |
+
plt.subplot(1, 2, 2)
|
| 1179 |
+
plt.plot(y_test[:, 1], label="True")
|
| 1180 |
+
plt.plot(y_pred[:, 1], label="Predicted")
|
| 1181 |
+
plt.xlabel("Time steps")
|
| 1182 |
+
plt.ylabel("Behavioral Variable 2")
|
| 1183 |
+
plt.title("Decoding Performance - Variable 2")
|
| 1184 |
+
plt.legend()
|
| 1185 |
+
|
| 1186 |
+
plt.tight_layout()
|
| 1187 |
+
|
| 1188 |
+
trajectory_plot_path = os.path.join(output_dir, "decoded_trajectories.png")
|
| 1189 |
+
plt.savefig(trajectory_plot_path, dpi=300)
|
| 1190 |
+
plt.close()
|
| 1191 |
+
|
| 1192 |
+
log += f"- Decoded trajectories visualization saved to: {trajectory_plot_path}\n"
|
| 1193 |
+
except Exception as e:
|
| 1194 |
+
log += f"- Error creating trajectory visualization: {str(e)}\n"
|
| 1195 |
+
|
| 1196 |
+
# Save the results as a pickle file
|
| 1197 |
+
results = {
|
| 1198 |
+
"true_behavior": y_test,
|
| 1199 |
+
"predicted_behavior": y_pred,
|
| 1200 |
+
"pca_model": pca,
|
| 1201 |
+
"kalman_filter": kf,
|
| 1202 |
+
"mse": mse,
|
| 1203 |
+
}
|
| 1204 |
+
|
| 1205 |
+
results_file = os.path.join(output_dir, "neural_decoding_results.pkl")
|
| 1206 |
+
with open(results_file, "wb") as f:
|
| 1207 |
+
pickle.dump(results, f)
|
| 1208 |
+
|
| 1209 |
+
# Also save a CSV with the first few predicted vs. actual values for easier inspection
|
| 1210 |
+
try:
|
| 1211 |
+
import pandas as pd
|
| 1212 |
+
|
| 1213 |
+
n_samples = min(100, y_test.shape[0])
|
| 1214 |
+
n_vars = y_test.shape[1]
|
| 1215 |
+
|
| 1216 |
+
results_data = {}
|
| 1217 |
+
for i in range(n_vars):
|
| 1218 |
+
results_data[f"true_var{i + 1}"] = y_test[:n_samples, i]
|
| 1219 |
+
results_data[f"pred_var{i + 1}"] = y_pred[:n_samples, i]
|
| 1220 |
+
|
| 1221 |
+
results_df = pd.DataFrame(results_data)
|
| 1222 |
+
csv_path = os.path.join(output_dir, "decoding_results_sample.csv")
|
| 1223 |
+
results_df.to_csv(csv_path, index=False)
|
| 1224 |
+
|
| 1225 |
+
log += f"- Sample of decoding results saved to: {csv_path}\n"
|
| 1226 |
+
except Exception as e:
|
| 1227 |
+
log += f"- Error creating CSV results: {str(e)}\n"
|
| 1228 |
+
|
| 1229 |
+
log += "\n## Results\n"
|
| 1230 |
+
log += f"- Full decoded behavioral trajectories saved to: {results_file}\n"
|
| 1231 |
+
log += f"- Decoder performance (MSE): {mse:.4f}\n"
|
| 1232 |
+
|
| 1233 |
+
# Save the log to a file
|
| 1234 |
+
log_file = os.path.join(output_dir, "neural_decoding_log.txt")
|
| 1235 |
+
with open(log_file, "w") as f:
|
| 1236 |
+
f.write(log)
|
| 1237 |
+
|
| 1238 |
+
log += f"- Analysis log saved to: {log_file}\n"
|
| 1239 |
+
|
| 1240 |
+
return log
|
| 1241 |
+
|
| 1242 |
+
|
| 1243 |
+
def simulate_whole_cell_ode_model(
|
| 1244 |
+
initial_conditions,
|
| 1245 |
+
parameters,
|
| 1246 |
+
ode_function=None,
|
| 1247 |
+
time_span=(0, 100),
|
| 1248 |
+
time_points=1000,
|
| 1249 |
+
method="LSODA",
|
| 1250 |
+
):
|
| 1251 |
+
"""Simulate a whole-cell model represented as a system of ordinary differential equations (ODEs).
|
| 1252 |
+
|
| 1253 |
+
Parameters
|
| 1254 |
+
----------
|
| 1255 |
+
initial_conditions : dict or array-like
|
| 1256 |
+
Initial values for each state variable in the model. If dict, keys are variable names
|
| 1257 |
+
and values are initial concentrations/values. If array-like, order must match the
|
| 1258 |
+
order expected by the ODE function.
|
| 1259 |
+
parameters : dict
|
| 1260 |
+
Model parameters required by the ODE function. Keys are parameter names and
|
| 1261 |
+
values are parameter values.
|
| 1262 |
+
ode_function : callable, optional
|
| 1263 |
+
Function defining the system of ODEs. Should take arguments ``(t, y, *args)`` where
|
| 1264 |
+
``t`` is time, ``y`` is the state vector, and ``args`` contains additional parameters.
|
| 1265 |
+
If None, a simple example whole-cell model will be used.
|
| 1266 |
+
time_span : tuple, default=(0, 100)
|
| 1267 |
+
Tuple of (start_time, end_time) for the simulation.
|
| 1268 |
+
time_points : int, default=1000
|
| 1269 |
+
Number of time points to evaluate.
|
| 1270 |
+
method : str, default='LSODA'
|
| 1271 |
+
Numerical integration method to use (e.g., 'RK45', 'LSODA', 'BDF').
|
| 1272 |
+
|
| 1273 |
+
Returns
|
| 1274 |
+
-------
|
| 1275 |
+
str
|
| 1276 |
+
Research log summarizing the simulation steps and results. Results are saved
|
| 1277 |
+
to a CSV file and the filename is included in the log.
|
| 1278 |
+
|
| 1279 |
+
"""
|
| 1280 |
+
from datetime import datetime
|
| 1281 |
+
|
| 1282 |
+
import numpy as np
|
| 1283 |
+
import pandas as pd
|
| 1284 |
+
from scipy.integrate import solve_ivp
|
| 1285 |
+
|
| 1286 |
+
# Define a default ODE function if none is provided
|
| 1287 |
+
if ode_function is None:
|
| 1288 |
+
|
| 1289 |
+
def default_whole_cell_model(t, y, params):
|
| 1290 |
+
# Unpack state variables
|
| 1291 |
+
# Simple model with:
|
| 1292 |
+
# - mRNA (y[0])
|
| 1293 |
+
# - Protein (y[1])
|
| 1294 |
+
# - Metabolite (y[2])
|
| 1295 |
+
# - ATP (y[3])
|
| 1296 |
+
mRNA, protein, metabolite, atp = y
|
| 1297 |
+
|
| 1298 |
+
# Unpack parameters
|
| 1299 |
+
k_transcription = params["k_transcription"] # mRNA synthesis rate
|
| 1300 |
+
k_translation = params["k_translation"] # Protein synthesis rate
|
| 1301 |
+
k_mrna_deg = params["k_mrna_deg"] # mRNA degradation rate
|
| 1302 |
+
k_protein_deg = params["k_protein_deg"] # Protein degradation rate
|
| 1303 |
+
k_metabolism = params["k_metabolism"] # Metabolite production rate
|
| 1304 |
+
k_atp_production = params["k_atp_production"] # ATP production rate
|
| 1305 |
+
k_atp_consumption = params["k_atp_consumption"] # ATP consumption rate
|
| 1306 |
+
|
| 1307 |
+
# ODEs
|
| 1308 |
+
dmRNA_dt = k_transcription - k_mrna_deg * mRNA
|
| 1309 |
+
dprotein_dt = k_translation * mRNA * atp - k_protein_deg * protein
|
| 1310 |
+
dmetabolite_dt = k_metabolism * protein - k_atp_production * metabolite
|
| 1311 |
+
datp_dt = k_atp_production * metabolite - k_atp_consumption * atp - k_translation * mRNA * atp
|
| 1312 |
+
|
| 1313 |
+
return [dmRNA_dt, dprotein_dt, dmetabolite_dt, datp_dt]
|
| 1314 |
+
|
| 1315 |
+
ode_function = default_whole_cell_model
|
| 1316 |
+
|
| 1317 |
+
# Prepare initial conditions as array
|
| 1318 |
+
if isinstance(initial_conditions, dict):
|
| 1319 |
+
y0_values = list(initial_conditions.values())
|
| 1320 |
+
variable_names = list(initial_conditions.keys())
|
| 1321 |
+
else:
|
| 1322 |
+
y0_values = initial_conditions
|
| 1323 |
+
variable_names = [f"Variable_{i}" for i in range(len(initial_conditions))]
|
| 1324 |
+
|
| 1325 |
+
# Set up time points
|
| 1326 |
+
t_eval = np.linspace(time_span[0], time_span[1], time_points)
|
| 1327 |
+
|
| 1328 |
+
# Start research log
|
| 1329 |
+
log = []
|
| 1330 |
+
log.append("# Whole-Cell ODE Model Simulation")
|
| 1331 |
+
log.append(f"Date: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")
|
| 1332 |
+
log.append("\n## Simulation Setup")
|
| 1333 |
+
log.append(f"- Integration method: {method}")
|
| 1334 |
+
log.append(f"- Time span: {time_span[0]} to {time_span[1]} time units")
|
| 1335 |
+
log.append(f"- Number of time points: {time_points}")
|
| 1336 |
+
log.append(f"- Number of state variables: {len(y0_values)}")
|
| 1337 |
+
log.append("\n## Initial Conditions")
|
| 1338 |
+
for _i, (name, value) in enumerate(zip(variable_names, y0_values, strict=False)):
|
| 1339 |
+
log.append(f"- {name}: {value}")
|
| 1340 |
+
|
| 1341 |
+
log.append("\n## Model Parameters")
|
| 1342 |
+
for param, value in parameters.items():
|
| 1343 |
+
log.append(f"- {param}: {value}")
|
| 1344 |
+
|
| 1345 |
+
# Solve the ODE system
|
| 1346 |
+
log.append("\n## Running Simulation")
|
| 1347 |
+
try:
|
| 1348 |
+
solution = solve_ivp(
|
| 1349 |
+
lambda t, y: ode_function(t, y, parameters),
|
| 1350 |
+
time_span,
|
| 1351 |
+
y0_values,
|
| 1352 |
+
method=method,
|
| 1353 |
+
t_eval=t_eval,
|
| 1354 |
+
)
|
| 1355 |
+
|
| 1356 |
+
# Check if simulation was successful
|
| 1357 |
+
if solution.success:
|
| 1358 |
+
log.append("Simulation completed successfully.")
|
| 1359 |
+
log.append(f"- Number of function evaluations: {solution.nfev}")
|
| 1360 |
+
log.append(f"- Number of Jacobian evaluations: {solution.njev}")
|
| 1361 |
+
log.append(f"- Number of steps: {len(solution.t)}")
|
| 1362 |
+
|
| 1363 |
+
# Create DataFrame with results
|
| 1364 |
+
results_df = pd.DataFrame(solution.y.T, columns=variable_names)
|
| 1365 |
+
results_df.insert(0, "Time", solution.t)
|
| 1366 |
+
|
| 1367 |
+
# Save results to CSV
|
| 1368 |
+
filename = f"whole_cell_simulation_results_{datetime.now().strftime('%Y%m%d_%H%M%S')}.csv"
|
| 1369 |
+
results_df.to_csv(filename, index=False)
|
| 1370 |
+
|
| 1371 |
+
log.append("\n## Results Summary")
|
| 1372 |
+
log.append(f"Simulation results saved to: {filename}")
|
| 1373 |
+
|
| 1374 |
+
# Calculate some basic statistics
|
| 1375 |
+
final_state = results_df.iloc[-1].drop("Time").to_dict()
|
| 1376 |
+
log.append("\n## Final State")
|
| 1377 |
+
for var, value in final_state.items():
|
| 1378 |
+
log.append(f"- {var}: {value:.6f}")
|
| 1379 |
+
|
| 1380 |
+
else:
|
| 1381 |
+
log.append(f"Simulation failed with message: {solution.message}")
|
| 1382 |
+
|
| 1383 |
+
except Exception as e:
|
| 1384 |
+
log.append(f"Error during simulation: {str(e)}")
|
| 1385 |
+
|
| 1386 |
+
# Return the research log
|
| 1387 |
+
return "\n".join(log)
|
BioScientist/agent_system/engines/v1_executor_backup/tool/example_mcp_tools/pubmed_mcp.py
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import os
|
| 2 |
+
|
| 3 |
+
from Bio import Entrez
|
| 4 |
+
from mcp.server.fastmcp import FastMCP
|
| 5 |
+
from pydantic import BaseModel
|
| 6 |
+
|
| 7 |
+
Entrez.email = os.getenv("NCBI_EMAIL") or "YOUR_EMAIL"
|
| 8 |
+
mcp = FastMCP("pubmed-live")
|
| 9 |
+
|
| 10 |
+
|
| 11 |
+
class Article(BaseModel):
|
| 12 |
+
pmid: str
|
| 13 |
+
title: str | None = None
|
| 14 |
+
journal: str | None = None
|
| 15 |
+
year: str | None = None
|
| 16 |
+
abstract: str | None = None
|
| 17 |
+
|
| 18 |
+
|
| 19 |
+
@mcp.tool()
|
| 20 |
+
def search_pubmed(query: str, max_results: int = 10) -> list[Article]:
|
| 21 |
+
ids = Entrez.read(Entrez.esearch(db="pubmed", term=query, retmax=max_results))["IdList"]
|
| 22 |
+
summaries = Entrez.read(Entrez.esummary(db="pubmed", id=",".join(ids))) if ids else []
|
| 23 |
+
articles: list[Article] = []
|
| 24 |
+
for s in summaries:
|
| 25 |
+
articles.append(
|
| 26 |
+
Article(pmid=s["Id"], title=s["Title"], journal=s.get("FullJournalName", ""), year=s.get("PubDate", "")[:4])
|
| 27 |
+
)
|
| 28 |
+
return articles
|
| 29 |
+
|
| 30 |
+
|
| 31 |
+
@mcp.tool()
|
| 32 |
+
def get_article_abstract(pmid: str) -> str:
|
| 33 |
+
with Entrez.efetch(db="pubmed", id=pmid, rettype="abstract", retmode="text") as h:
|
| 34 |
+
return h.read()
|
| 35 |
+
|
| 36 |
+
|
| 37 |
+
if __name__ == "__main__":
|
| 38 |
+
mcp.run()
|
BioScientist/agent_system/engines/v1_executor_backup/tool/protocols/addgene/Addgene_ AAV Production.txt
ADDED
|
@@ -0,0 +1,325 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
PROTOCOL: AAV Production
|
| 2 |
+
SOURCE: https://www.addgene.org/protocols/aav-production-hek293-cells/
|
| 3 |
+
================================================================================
|
| 4 |
+
|
| 5 |
+
INTRODUCTION
|
| 6 |
+
================================================================================
|
| 7 |
+
|
| 8 |
+
This protocol can be used to produce AAV from one Five Chambers Cell-Stack (CS5)
|
| 9 |
+
(3,180 cm² - the same surface area as 21 x T-175 flasks). Cell stacks provide an
|
| 10 |
+
efficient means to scale-up without having to handle a large number of T-175
|
| 11 |
+
flasks.
|
| 12 |
+
|
| 13 |
+
|
| 14 |
+
WORKFLOW TIMELINE
|
| 15 |
+
================================================================================
|
| 16 |
+
|
| 17 |
+
Day 0: Seed cells in CS2
|
| 18 |
+
|
| 19 |
+
Day 2: Seed cells in CS5
|
| 20 |
+
|
| 21 |
+
Day 3 (am): Transfect cells
|
| 22 |
+
|
| 23 |
+
Day 7 (am): Harvest cells
|
| 24 |
+
|
| 25 |
+
|
| 26 |
+
EQUIPMENT
|
| 27 |
+
================================================================================
|
| 28 |
+
|
| 29 |
+
• Class II, Type A2 Biological Safety Cabinet
|
| 30 |
+
• 0.5–10 µL single channel pipette
|
| 31 |
+
• 2–20 µL single channel pipette
|
| 32 |
+
• 20–200 µL single channel pipette
|
| 33 |
+
• 200–1000 µL single channel pipette
|
| 34 |
+
• Hemocytometer or cell counter
|
| 35 |
+
• Ice bucket
|
| 36 |
+
• CO₂ incubator
|
| 37 |
+
• Pipet controller
|
| 38 |
+
• Hazardous waste container
|
| 39 |
+
• pH meter
|
| 40 |
+
• Stir plate
|
| 41 |
+
• Magnetic stir bar
|
| 42 |
+
• Sonicator
|
| 43 |
+
• Ear protection
|
| 44 |
+
• Vortex
|
| 45 |
+
|
| 46 |
+
|
| 47 |
+
REAGENTS
|
| 48 |
+
================================================================================
|
| 49 |
+
|
| 50 |
+
• Adherent HEK293T cells (ideally AAV-293T clones)
|
| 51 |
+
|
| 52 |
+
💡 PRO TIP: While adherent, these cells are very loosely attached to the dish
|
| 53 |
+
surface and should be handled carefully. Avoid touching the cells when replacing
|
| 54 |
+
media.
|
| 55 |
+
|
| 56 |
+
• T-175 flask, Corning 430825, 175 cm²
|
| 57 |
+
• Cellstack 5, Corning 3319, 3180 cm²
|
| 58 |
+
• Cellstack 2, Corning 3269, 1272 cm²
|
| 59 |
+
• Heat-inactivated FBS (HI-FBS)
|
| 60 |
+
|
| 61 |
+
💡 PRO TIP: Different brands and lots of FBS can promote or inhibit
|
| 62 |
+
transfection. Test a variety of brands and lots of FBS to find one suitable for
|
| 63 |
+
your protocols. FBS can be purchased already heat-inactivated, or it can be
|
| 64 |
+
inactivated in the lab by heating to 56 °C for 30 minutes.
|
| 65 |
+
|
| 66 |
+
• 0.45 μm polyethersulfone (PES) filter system, Nalgene, 565-0010 (or for larger
|
| 67 |
+
volumes 1000 mL 0.45 µm Rapid-Flow PES Filtration Unit, Nalgene 167-0045)
|
| 68 |
+
|
| 69 |
+
💡 PRO TIP: Do not use filters made of materials other than PES. AAV particles
|
| 70 |
+
stick to many other surfaces, but do not stick to PES. Using a PES filter will
|
| 71 |
+
maximize titer.
|
| 72 |
+
|
| 73 |
+
• DMEM high glucose, Corning 10-013-CV
|
| 74 |
+
• DMEM, low glucose (1 g/L) glucose, sodium pyruvate, Corning 10-014-CV (optional)
|
| 75 |
+
• 7.5% sodium bicarbonate, Corning 25-035-CI (optional)
|
| 76 |
+
• 1 M HEPES, HyClone SH30237.01 (optional)
|
| 77 |
+
• L-alanyl-L-glutamine (or alternative stable glutamine such as glutaGRO,
|
| 78 |
+
Corning 25-015-CI)
|
| 79 |
+
• Opti-MEM, Thermo Fisher 31985-070
|
| 80 |
+
• 0.05% Trypsin/EDTA (e.g. TrypLE, Thermo Fisher, 12605010)
|
| 81 |
+
• 1X PBS pH 7.4 without calcium or magnesium, Corning 21-040-CV (cations can
|
| 82 |
+
affect the attachment of adherent cells)
|
| 83 |
+
• 1 mg/mL Polyethylenimine (PEI) 25 kDa MW
|
| 84 |
+
|
| 85 |
+
💡 PRO TIP: Other transfection reagents may be used in this protocol, but their
|
| 86 |
+
conditions must be optimized.
|
| 87 |
+
|
| 88 |
+
• Plasmids for transfection: pHelper; pRC (Rep-Cap), plasmid expressing your gene
|
| 89 |
+
of interest
|
| 90 |
+
• Triton X-100
|
| 91 |
+
• Benzonase/DNAse I (Millipore 71205-3)
|
| 92 |
+
• 40% Polyethylene Glycol 8000 (PEG) + 0.5 M NaCl
|
| 93 |
+
• Cell lysis buffer (50 mM Tris HCl, 150 mM NaCl, 2 mM MgCl₂)
|
| 94 |
+
|
| 95 |
+
|
| 96 |
+
REAGENT PREPARATION
|
| 97 |
+
================================================================================
|
| 98 |
+
|
| 99 |
+
DMEM Complete: 10% v/v FBS and 4 mM L-alanyl-L-glutamine (or stable alternative,
|
| 100 |
+
such as glutaGRO)
|
| 101 |
+
|
| 102 |
+
To a 500 mL bottle of DMEM high glucose, add 55 mL of heat-inactivated FBS and 5
|
| 103 |
+
mL of glutaGRO 11 mL of 200 mM L-alanyl-L-glutamine. Store at 4 °C.
|
| 104 |
+
|
| 105 |
+
D1 + 0.1 M sorbitol (optional): DMEM low glucose + 1% v/v HI-FBS + 0.1 M sorbitol
|
| 106 |
+
|
| 107 |
+
In our hands, we have found that a lower glucose, lower FBS media causes less
|
| 108 |
+
filter clogging during harvesting. The addition of sorbitol has been shown to
|
| 109 |
+
increase viral titers by up to 1.8-fold (Rego et al., 2018).
|
| 110 |
+
|
| 111 |
+
To prepare D1 + 0.1 M sorbitol, add 57 mL of 1.46 M sorbitol, 7.5 mL HI-FBS, and
|
| 112 |
+
7.5 mL 100X glutaGRO, 7.5 mL of 7.5% Sodium Bicarbonate, 7.5 mL 1 M HEPES to 750
|
| 113 |
+
mL DMEM + 1 g/L glucose.
|
| 114 |
+
|
| 115 |
+
1 mg/mL polyethylenimine (PEI) solution:
|
| 116 |
+
|
| 117 |
+
1. Dissolve 100 mg of PEI powder into 100 mL of deionized water.
|
| 118 |
+
|
| 119 |
+
2. While stirring, slowly add hydrochloric acid until the solution clears.
|
| 120 |
+
|
| 121 |
+
3. Check the pH of the solution and use hydrochloric acid or sodium hydroxide to
|
| 122 |
+
adjust the pH to 7.0.
|
| 123 |
+
|
| 124 |
+
💡 PRO TIP: The pH of this solution will drift pretty rapidly upon addition
|
| 125 |
+
of acid or base. Add only a few drops at a time. Allow them to mix and recheck
|
| 126 |
+
the pH to prevent over or undershooting the desired pH.
|
| 127 |
+
|
| 128 |
+
4. Allow the solution to mix for 10 min and then recheck the pH to ensure that it
|
| 129 |
+
has not drifted.
|
| 130 |
+
|
| 131 |
+
5. Filter the solution through a 0.22 μm membrane.
|
| 132 |
+
|
| 133 |
+
6. Aliquot 500–1000 μL into sterile tubes.
|
| 134 |
+
|
| 135 |
+
7. Store the tubes at -80 °C.
|
| 136 |
+
|
| 137 |
+
8. After thawing, the solution can be stored at 4 °C for up to 2 months. After 2
|
| 138 |
+
months, discard the tube and thaw a new working stock.
|
| 139 |
+
|
| 140 |
+
40% POLYETHYLENE GLYCOL (PEG) 8000 solution:
|
| 141 |
+
|
| 142 |
+
1. Dissolve 400 g of PEG 8000 and 24 g of NaCl into deionized water and adjust to
|
| 143 |
+
a final volume of 1000 mL.
|
| 144 |
+
|
| 145 |
+
2. Stir at RT until fully dissolved.
|
| 146 |
+
|
| 147 |
+
💡 PRO TIP: This step is challenging due to the high viscosity of PEG.
|
| 148 |
+
Stirring under medium heat will promote faster dissolution.
|
| 149 |
+
|
| 150 |
+
3. Adjust the pH to ~7.4.
|
| 151 |
+
|
| 152 |
+
4. Autoclave or sterile filter.
|
| 153 |
+
|
| 154 |
+
💡 PRO TIP: Stirring during the cooling period is recommended or the solution
|
| 155 |
+
may separate into phases.
|
| 156 |
+
|
| 157 |
+
5. Aliquot and store at 4 °C.
|
| 158 |
+
|
| 159 |
+
Cell Lysis Buffer: 50 mM Tris HCl, 150 mM NaCl, 2 mM MgCl₂
|
| 160 |
+
|
| 161 |
+
1. Add the following to the 2 L sterile bottle: 1836 mL deionized water + 100 mL
|
| 162 |
+
of 1 M Tris HCl pH 8.5 + 60 mL of 5 M Sodium Chloride + 4 mL of 1 M Magnesium
|
| 163 |
+
Chloride
|
| 164 |
+
|
| 165 |
+
2. Close the bottle and mix by inverting multiple times
|
| 166 |
+
|
| 167 |
+
3. Adjust pH to ~8.5
|
| 168 |
+
|
| 169 |
+
4. Filter sterilize through a 0.22 μm membrane.
|
| 170 |
+
|
| 171 |
+
5. Store at 4 °C.
|
| 172 |
+
|
| 173 |
+
|
| 174 |
+
CONSIDERATIONS BEFORE YOU START
|
| 175 |
+
================================================================================
|
| 176 |
+
|
| 177 |
+
• The health of the HEK293T cells is critical for optimal AAV yield.
|
| 178 |
+
|
| 179 |
+
• Do not overgrow your cells. Pass the cells twice a week during the maintenance
|
| 180 |
+
phase and do not allow cells to reach 100% confluence (80–90% is ideal).
|
| 181 |
+
|
| 182 |
+
• Pass and plate the cells the day before the transfection.
|
| 183 |
+
|
| 184 |
+
• Thaw a new vial of cells after 30 passages.
|
| 185 |
+
|
| 186 |
+
|
| 187 |
+
PROCEDURE
|
| 188 |
+
================================================================================
|
| 189 |
+
|
| 190 |
+
1. Trypsinize and resuspend the HEK293T cells from 2 x T-175 flasks. Cells should
|
| 191 |
+
be at ~80% confluence. For each T-175 flask:
|
| 192 |
+
• Aspirate culture media and rinse once with 10 mL of PBS.
|
| 193 |
+
• Aspirate PBS and add 2 mL of 0.05% Trypsin/EDTA. Wait ~2 min.
|
| 194 |
+
• Neutralize trypsin by adding 10 mL of DMEM Complete.
|
| 195 |
+
• Pipet back and forth vigorously multiple times to obtain a single cell
|
| 196 |
+
suspension (no clumps of cells).
|
| 197 |
+
|
| 198 |
+
2. Pool cells from 2 x T-175 flasks. Adjust volume to 300 mL with DMEM complete
|
| 199 |
+
media and mix.
|
| 200 |
+
|
| 201 |
+
3. Seed all cells in 1 CS2. Return to incubator for 48 h.
|
| 202 |
+
|
| 203 |
+
4. Trypsinize and resuspend cells from the CS2. Cells should be at ~80%
|
| 204 |
+
confluence.
|
| 205 |
+
• Aspirate culture media and rinse once with 60 mL PBS.
|
| 206 |
+
• Aspirate PBS and add 35 mL of 0.05% Trypsin/EDTA.
|
| 207 |
+
• Wait ~2-3 minutes for cells to detach.
|
| 208 |
+
• Gently tap the sides of the CS2 to help detach the cells, add 200 mL of DMEM
|
| 209 |
+
complete media, then transfer the cells into a sterile bottle.
|
| 210 |
+
• Rinse the CS2 with 100 mL of DMEM complete medium and pool with the cells
|
| 211 |
+
harvested in the previous step.
|
| 212 |
+
• Pipette back and forth or shake vigorously to obtain a single cell suspension
|
| 213 |
+
(no clumps).
|
| 214 |
+
|
| 215 |
+
5. Count cells using a hemocytometer or cell counter.
|
| 216 |
+
|
| 217 |
+
6. Seed 350 million cells from the CS2 into one CS5 with a total volume of 850 mL.
|
| 218 |
+
Return to the incubator for 24 h–36 h.
|
| 219 |
+
|
| 220 |
+
7. Proceed with transfection:
|
| 221 |
+
• Calculate the amount of each plasmid needed to have a 1:1:1 molar ratio with 2
|
| 222 |
+
mg total DNA per CS5
|
| 223 |
+
|
| 224 |
+
Example calculations:
|
| 225 |
+
- RepCap (7,265 bp): 582.1 μg = 582.1 μL (at 1.00 μg/μL)
|
| 226 |
+
- pHelper (11,854 bp): 949.8 μg = 949.8 μL (at 1.00 μg/μL)
|
| 227 |
+
- Transfer Plasmid (5,842 bp): 468.1 μg = 468.1 μL (at 1.00 μg/μL)
|
| 228 |
+
|
| 229 |
+
• Aliquot 100 mL of OptiMEM into a sterile 250 mL bottle.
|
| 230 |
+
|
| 231 |
+
• Aliquot 774 mL of DMEM + 2% HI-FBS into a sterile 1 L bottle.
|
| 232 |
+
|
| 233 |
+
• Add each plasmid DNA into the bottle containing the Opti-MEM. Mix well.
|
| 234 |
+
|
| 235 |
+
• Add 4 mL of PEI (1:2 μg DNA to μg PEI ratio). Shake the bottle up/down
|
| 236 |
+
vigorously for 30 sec (it's okay to make bubbles).
|
| 237 |
+
|
| 238 |
+
• Incubate at RT for 15 min. Note that longer incubation times can reduce
|
| 239 |
+
transfection efficiency.
|
| 240 |
+
|
| 241 |
+
• Add the OptiMEM + DNA + PEI solution to the bottle containing 774 mL of DMEM
|
| 242 |
+
+ 2% HI-FBS. Mix well.
|
| 243 |
+
|
| 244 |
+
8. Take the CS5 out of the incubator and pour the media into a waste container.
|
| 245 |
+
|
| 246 |
+
9. Carefully add the OptiMEM + DNA + PEI solution to the CS5. Make sure that all
|
| 247 |
+
five layers are covered with media. 293T cells are delicate and detach very
|
| 248 |
+
easily - media should always be added away from the cells (not poured on them)
|
| 249 |
+
and can be adjusted by carefully tilting the CS5 back and forth.
|
| 250 |
+
|
| 251 |
+
💡 PRO TIP: To help distribute the media amongst the five layers, tilt the CS5
|
| 252 |
+
such that the media goes toward the cap. If the media touches the cap, replace
|
| 253 |
+
it with a new one before putting the CS5 in the incubator.
|
| 254 |
+
|
| 255 |
+
10. Return the CS5 to the incubator for 96 h. This incubation time can be adjusted
|
| 256 |
+
depending upon the serotype. Often AAV2 are harvested at 48–72 h, while other
|
| 257 |
+
serotypes are harvested at 96–120 h.
|
| 258 |
+
|
| 259 |
+
11. Optional: perform a media exchange at ~18 h post transfection. Changing the
|
| 260 |
+
media can reduce toxicity associated with PEI and allow for the addition of
|
| 261 |
+
other components, such as sorbitol and sodium bicarbonate, sorbitol has been
|
| 262 |
+
found to increase viral titers by up to 1.8-fold. See the recipe for D1 + 0.1 M
|
| 263 |
+
sorbitol above.
|
| 264 |
+
• Carefully pour off the media into a waste container.
|
| 265 |
+
• Gently pour new media into the CS5.
|
| 266 |
+
• Distribute the media evenly between the layers.
|
| 267 |
+
• Return the CS5 to the incubator for ~72 h.
|
| 268 |
+
|
| 269 |
+
12. Harvest cells and media by tapping the sides of the CS5. Cells should detach
|
| 270 |
+
easily.
|
| 271 |
+
|
| 272 |
+
13. Transfer cells and media into 500 mL conical vessels.
|
| 273 |
+
|
| 274 |
+
14. Rinse CS5 once with 100 mL of PBS and add to the harvested media and cells.
|
| 275 |
+
|
| 276 |
+
15. Centrifuge at 3900 rpm for 20 min at 4 °C to pellet the cells.
|
| 277 |
+
|
| 278 |
+
16. Keep the cell pellet on ice and transfer supernatant to a sterile 500 mL
|
| 279 |
+
bottle.
|
| 280 |
+
|
| 281 |
+
17. Process the supernatant as follows:
|
| 282 |
+
• Filter through a 0.45 μm PES membrane.
|
| 283 |
+
• Add 40% PEG such that the final PEG concentration is 8%.
|
| 284 |
+
• Add 25 mL of PEG solution to each 100 mL of supernatant. Split into 2 x 500
|
| 285 |
+
mL sterile bottles as needed.
|
| 286 |
+
• Add stir bar and stir slowly at 4 °C for 1 h, then keep at 4 °C for 3 h
|
| 287 |
+
without stirring to allow full precipitation. Precipitation of the viruses
|
| 288 |
+
can proceed overnight at 4 °C if needed.
|
| 289 |
+
• Transfer the entire sample to 3 x 500 mL conical bottles and centrifuge at
|
| 290 |
+
3900 rpm for 15 min at 4 °C.
|
| 291 |
+
• Discard the supernatant and resuspend the pellets in a total of 5 mL of cell
|
| 292 |
+
lysis buffer (recipe above). Pipet back and forth to resuspend each pellet
|
| 293 |
+
completely.
|
| 294 |
+
• Combine resuspended pellets and keep on ice.
|
| 295 |
+
|
| 296 |
+
18. Process the cell pellet from above as follows:
|
| 297 |
+
• Resuspend and lyse the cells by adding a total of 12.5 mL of cell lysis
|
| 298 |
+
buffer. Pipet back and forth to resuspend each pellet completely.
|
| 299 |
+
• Combine all resuspended cell pellets and sonicate 5 x 1 sec pulses with at
|
| 300 |
+
least 5 minutes on ice between each pulse, 50% amplitude. Return to ice
|
| 301 |
+
between each round of sonication to avoid overheating of the sample. Mix
|
| 302 |
+
well between rounds of sonication.
|
| 303 |
+
• Sonicate until no live cells can be seen when stained with Trypan Blue.
|
| 304 |
+
• Pellet cell debris by centrifugation at 3900 rpm for 10 min at 4 °C.
|
| 305 |
+
• Transfer the cleared lysate to the tube containing the resuspended virus from
|
| 306 |
+
step 17 above.
|
| 307 |
+
|
| 308 |
+
19. Add 50 units of benzonase per mL of viral suspension (you should have ~18 mL
|
| 309 |
+
from steps 17 & 18). Benzonase is an endonuclease that will degrade any
|
| 310 |
+
residual DNA carried over from the packaging process.
|
| 311 |
+
|
| 312 |
+
20. Incubate at 37 °C for 45 min.
|
| 313 |
+
|
| 314 |
+
21. You are now ready to purify your prep. The clarified supernatant can be kept
|
| 315 |
+
overnight at 4 °C before proceeding with the purification protocol.
|
| 316 |
+
|
| 317 |
+
|
| 318 |
+
SAMPLE DATA
|
| 319 |
+
================================================================================
|
| 320 |
+
|
| 321 |
+
HEK293T cells at various confluencies. This AAV production protocol should be
|
| 322 |
+
started with cells that are ~80% confluent (center panel). These cells were
|
| 323 |
+
imaged with a 10X objective and were split 2 days before these images were taken.
|
| 324 |
+
|
| 325 |
+
Last reviewed on: October 10, 2023
|
BioScientist/agent_system/engines/v1_executor_backup/tool/protocols/addgene/Addgene_ AAV Purification.txt
ADDED
|
@@ -0,0 +1,244 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
PROTOCOL: AAV Purification
|
| 2 |
+
SOURCE: https://www.addgene.org/protocols/aav-purification-iodixanol-gradient-ultracentrifugation/
|
| 3 |
+
================================================================================
|
| 4 |
+
|
| 5 |
+
INTRODUCTION
|
| 6 |
+
================================================================================
|
| 7 |
+
|
| 8 |
+
This protocol can be used to purify AAV of any serotype.
|
| 9 |
+
|
| 10 |
+
In medicine, iodixanol can be used as an intravenous isomolar contrast agent. In
|
| 11 |
+
research, iodixanol is used as an isomolar density gradient medium suitable for
|
| 12 |
+
virus purification and isolation of cells, organelles, lipoproteins, and
|
| 13 |
+
macromolecules. Importantly, iodixanol is inert and non-toxic to mammalian cells.
|
| 14 |
+
Therefore, and unlike other density gradient media, it is reportedly not
|
| 15 |
+
necessary to remove iodixanol prior to use of your purified virus. Nonetheless,
|
| 16 |
+
we recommend performing a buffer exchange before using the purified AAV in vivo.
|
| 17 |
+
|
| 18 |
+
The iodixanol gradient in this protocol is composed of steps that separate out
|
| 19 |
+
contaminants from an impure AAV preparation. The 15% iodixanol step has 1M NaCl to
|
| 20 |
+
destabilize ionic interactions between macromolecules. The 40% and 25% steps are
|
| 21 |
+
used to remove contaminants with lower densities, including empty capsids. The 60%
|
| 22 |
+
step serves as a cushion for genome-containing virions. Phenol red is added to
|
| 23 |
+
clearly distinguish the steps. This method will help enrich the prep with full
|
| 24 |
+
(genome containing) particles. On average, iodixanol-purified AAV preparations
|
| 25 |
+
contain ~20% empty particles.
|
| 26 |
+
|
| 27 |
+
60% iodixanol solution is available under the name OptiPrep from Sigma-Aldrich.
|
| 28 |
+
|
| 29 |
+
|
| 30 |
+
WORKFLOW TIMELINE
|
| 31 |
+
================================================================================
|
| 32 |
+
|
| 33 |
+
Day 1: Purify
|
| 34 |
+
|
| 35 |
+
Day 2: Buffer exchange and concentration
|
| 36 |
+
|
| 37 |
+
Note: Both steps could be completed in one (long) day.
|
| 38 |
+
|
| 39 |
+
|
| 40 |
+
EQUIPMENT
|
| 41 |
+
================================================================================
|
| 42 |
+
|
| 43 |
+
• Ultracentrifuge
|
| 44 |
+
• T70i rotor or equivalent
|
| 45 |
+
|
| 46 |
+
|
| 47 |
+
REAGENTS
|
| 48 |
+
================================================================================
|
| 49 |
+
|
| 50 |
+
• Opti-Prep (60% Iodixanol)
|
| 51 |
+
• QuickSeal tubes
|
| 52 |
+
• QuickSeal tube spacers
|
| 53 |
+
• 16 ga needle
|
| 54 |
+
• 18 ga needle
|
| 55 |
+
• 10 mL syringe
|
| 56 |
+
• 18 ga blunt edge needles, Hamilton
|
| 57 |
+
• 1X PBS pH 7.4
|
| 58 |
+
• 1X PBS-MK buffer
|
| 59 |
+
• 100X Poloxamer 188
|
| 60 |
+
• NaCl
|
| 61 |
+
• MgCl₂
|
| 62 |
+
• KCl
|
| 63 |
+
• Centrifugal filter units (MWCO 100 kDa)
|
| 64 |
+
|
| 65 |
+
|
| 66 |
+
REAGENT PREPARATION
|
| 67 |
+
================================================================================
|
| 68 |
+
|
| 69 |
+
1 M NaCl/PBS-MK buffer:
|
| 70 |
+
|
| 71 |
+
Dissolve 5.84 g of NaCl, 26.3 mg of MgCl₂ and 14.91 mg of KCl in 1× PBS in a
|
| 72 |
+
final volume of 100 mL. Sterilize by passing through a 0.22 μm filter and store
|
| 73 |
+
at 4 °C.
|
| 74 |
+
|
| 75 |
+
1X PBS-MK buffer:
|
| 76 |
+
|
| 77 |
+
Dissolve 26.3 mg of MgCl₂, and 14.91 mg of KCl in 1× PBS in a final volume of
|
| 78 |
+
100 mL. Sterilize by passing through a 0.22 μm filter and store at 4 °C.
|
| 79 |
+
|
| 80 |
+
0.1% Poloxamer 188 in PBS (A):
|
| 81 |
+
|
| 82 |
+
Add 500 µL of 10% Poloxamer 188 to 49.5 mL PBS
|
| 83 |
+
|
| 84 |
+
0.01% Poloxamer 188 in PBS (B):
|
| 85 |
+
|
| 86 |
+
Add 5 mL of Buffer A to 45 mL PBS
|
| 87 |
+
|
| 88 |
+
0.001% Poloxamer 188 in PBS + 200 mM NaCl (C) (formulation buffer):
|
| 89 |
+
|
| 90 |
+
Add 5 mL of Buffer B and 2 mL of 5 M NaCl to 43 mL PBS
|
| 91 |
+
|
| 92 |
+
|
| 93 |
+
PROCEDURE
|
| 94 |
+
================================================================================
|
| 95 |
+
|
| 96 |
+
Preparation and loading of the iodixanol gradient:
|
| 97 |
+
|
| 98 |
+
1. Prepare the gradient steps:
|
| 99 |
+
• 15% iodixanol step: mix 4.5 mL of 60% iodixanol and 13.5 mL of 1 M
|
| 100 |
+
NaCl/PBS-MK buffer
|
| 101 |
+
• 25% iodixanol step: mix 5 mL of 60% iodixanol and 7 mL of 1X PBS-MK buffer
|
| 102 |
+
and 30 μL of phenol red
|
| 103 |
+
• 40% iodixanol step: mix 6.7 mL of 60% iodixanol and 3.3 mL of 1X PBS-MK
|
| 104 |
+
buffer
|
| 105 |
+
• 60% iodixanol step: mix 10 mL of 60% iodixanol and 45 μL of phenol red
|
| 106 |
+
|
| 107 |
+
2. Underlay each solution into a QuickSeal tube in the order below using a 10 mL
|
| 108 |
+
syringe and a blunt edge 18 ga Hamilton needle, taking care to avoid bubbles:
|
| 109 |
+
• 8 mL of 15% iodixanol step
|
| 110 |
+
• 5 mL of 25% iodixanol step
|
| 111 |
+
• 5 mL of 40% iodixanol step
|
| 112 |
+
• 3 mL of 60% iodixanol step
|
| 113 |
+
|
| 114 |
+
3. Carefully add up to 5 mL of clarified supernatant on top of the gradient. Use
|
| 115 |
+
1X PBS (or formulation buffer) to top off the tube.
|
| 116 |
+
|
| 117 |
+
4. Seal the QuickSeal tubes.
|
| 118 |
+
|
| 119 |
+
5. Centrifuge at 350,000 x g for 90 min in a T70i rotor at 10 °C.
|
| 120 |
+
|
| 121 |
+
💡 PRO TIP: If you need more time, you can alternatively centrifuge for 2 h at
|
| 122 |
+
200,000 x g at 18 °C.
|
| 123 |
+
|
| 124 |
+
6. Carefully take the QuickSeal tubes out of the rotor and place them in a stable
|
| 125 |
+
rack.
|
| 126 |
+
|
| 127 |
+
**Make sure not to disturb the gradient!**
|
| 128 |
+
|
| 129 |
+
Collect Fractions
|
| 130 |
+
|
| 131 |
+
Option #1:
|
| 132 |
+
|
| 133 |
+
1. Prepare a row of roughly 20 open 1.5 mL microcentrifuge tubes in a rack.
|
| 134 |
+
These will be used to collect fractions from the gradient. You can collect fewer
|
| 135 |
+
fractions once you have a good idea when the virus elutes from the gradients.
|
| 136 |
+
|
| 137 |
+
2. In a biosafety cabinet, carefully puncture the QuickSeal tube at the interface
|
| 138 |
+
of the 60% and 40% gradient (see Figure 2) with an 18 ga needle.
|
| 139 |
+
|
| 140 |
+
3. Place the first microcentrifuge tube under the needle's opening to collect the
|
| 141 |
+
fractions.
|
| 142 |
+
|
| 143 |
+
4. Puncture the top of the QuickSeal tube with a 16 ga needle and start
|
| 144 |
+
collecting 0.5 mL to 1 mL fractions per tube.
|
| 145 |
+
|
| 146 |
+
5. Avoid the proteinaceous material near the 40–25% interface.
|
| 147 |
+
|
| 148 |
+
💡 PRO TIP: As soon as the top of the tube is punctured, AAV-containing
|
| 149 |
+
Iodixanol solution will flow from the needle set at the 40–60% interface.
|
| 150 |
+
Make sure that the microcentrifuge tubes are well positioned to collect the
|
| 151 |
+
solution, or you will lose a significant amount of your virus. When the first
|
| 152 |
+
fraction is collected, move the rack to the next empty tube to collect the next
|
| 153 |
+
fraction. The flow will be rapid at first and will progressively slow down.
|
| 154 |
+
|
| 155 |
+
Option #2:
|
| 156 |
+
|
| 157 |
+
1. Puncture the QuickSeal tube at the bottom using an 18 ga needle.
|
| 158 |
+
|
| 159 |
+
2. Immediately start collecting 0.5 to 1 mL fractions in microcentrifuge tubes.
|
| 160 |
+
|
| 161 |
+
3. Repeat for each QuickSeal tube.
|
| 162 |
+
|
| 163 |
+
4. The first 3 mL collected corresponds to the 60% phase and can be discarded.
|
| 164 |
+
|
| 165 |
+
5. The fractions obtained from the 40% phase contain the purified AAV.
|
| 166 |
+
|
| 167 |
+
Option #3:
|
| 168 |
+
|
| 169 |
+
1. Puncture the QuickSeal tube slightly below the 60–40% interface with an 18 ga
|
| 170 |
+
needle attached to a 10 mL syringe.
|
| 171 |
+
|
| 172 |
+
2. The bevel of the needle should be up, facing the 40% step.
|
| 173 |
+
|
| 174 |
+
3. Collect up to 5 mL per tube, taking care to avoid collecting the
|
| 175 |
+
proteinaceous material at the 40–25% interface.
|
| 176 |
+
|
| 177 |
+
4. Repeat for each QuickSeal tube.
|
| 178 |
+
|
| 179 |
+
5. (Optional) For first time users, it is a good idea to assay each fraction by
|
| 180 |
+
silver stain or SYPRO Ruby stain to determine purity. Only the cleanest
|
| 181 |
+
fractions should be kept and pooled for dialysis.
|
| 182 |
+
|
| 183 |
+
6. Pool clean fractions.
|
| 184 |
+
|
| 185 |
+
Concentration and buffer exchange:
|
| 186 |
+
|
| 187 |
+
Stocks of Poloxamer 188:
|
| 188 |
+
• Poloxamer 188, 10% solution
|
| 189 |
+
• A: 0.1% in PBS: 49.5 mL PBS + 500 µl Poloxamer 188
|
| 190 |
+
• B: 0.01% in PBS: 45 mL PBS + 5 ml A
|
| 191 |
+
• C: 0.001% in PBS: 45 mL PBS + 5 ml B + 200 mM NaCl
|
| 192 |
+
|
| 193 |
+
Procedure:
|
| 194 |
+
|
| 195 |
+
1. Cover the filter membrane with 15 mL of 0.1% Poloxamer 188 PBS and incubate
|
| 196 |
+
for 10 min at RT
|
| 197 |
+
|
| 198 |
+
2. Spin at 3000 rpm for 5 min at 4 °C and discard the flow through.
|
| 199 |
+
|
| 200 |
+
3. Add 15 mL of 0.01% Poloxamer 188 PBS and incubate for 10 min at RT.
|
| 201 |
+
|
| 202 |
+
4. Spin at 3000 rpm for 5 min at 4 °C and discard the flow through.
|
| 203 |
+
|
| 204 |
+
5. Add 15 mL of 0.001% Poloxamer 188 + 200mM NaCl PBS.
|
| 205 |
+
|
| 206 |
+
6. Spin at 3000 rpm for 5 min at 4 °C and discard the flow through.
|
| 207 |
+
|
| 208 |
+
7. Add your sample.
|
| 209 |
+
|
| 210 |
+
8. Spin at 3500 rpm for 5–8 min at 4 °C, discard the flow through.
|
| 211 |
+
|
| 212 |
+
9. Add more sample and spin 3500 rpm for 2–5 min at 4 °C, discard the flow
|
| 213 |
+
through.
|
| 214 |
+
|
| 215 |
+
10. Repeat this step as needed.
|
| 216 |
+
|
| 217 |
+
Please note that iodixanol is not easily removed. After each spin, add more
|
| 218 |
+
formulation buffer and sample and make sure to pipet back and forth a few
|
| 219 |
+
times to mix the iodixanol that has settled at the bottom of the column.
|
| 220 |
+
|
| 221 |
+
11. We recommend concentrating to a minimum of 500 µL. If the concentrate volume
|
| 222 |
+
is less than 500 µL, bring up the volume with formulation buffer.
|
| 223 |
+
|
| 224 |
+
12. Use a P1000 to the bottom of the filter and pipette up/down and wash off the
|
| 225 |
+
walls of the filter to recover as much virus as possible.
|
| 226 |
+
|
| 227 |
+
13. Store at 4 °C for short term (2 weeks), or aliquot and store at -80 °C for
|
| 228 |
+
long term.
|
| 229 |
+
|
| 230 |
+
|
| 231 |
+
SAMPLE DATA
|
| 232 |
+
================================================================================
|
| 233 |
+
|
| 234 |
+
Iodixanol gradient before ultracentrifugation. The steps are clearly
|
| 235 |
+
distinguishable thanks to the use of phenol red.
|
| 236 |
+
|
| 237 |
+
Iodixanol gradient after ultracentrifugation. The arrow indicates the 60–40%
|
| 238 |
+
interface. The vertical black line indicates the location of the purified AAV.
|
| 239 |
+
|
| 240 |
+
Example of an SDS-PAGE gel of 10 consecutive gradient fractions followed by
|
| 241 |
+
silver stain. Note the increased number of contaminants in each fraction. * AAV
|
| 242 |
+
capsid proteins VP1, VP2, VP3; M protein marker.
|
| 243 |
+
|
| 244 |
+
Last reviewed on: November 7, 2023
|
BioScientist/agent_system/engines/v1_executor_backup/tool/protocols/addgene/Addgene_ AAV Titration by qPCR.txt
ADDED
|
@@ -0,0 +1,264 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
PROTOCOL: AAV Titration by qPCR
|
| 2 |
+
SOURCE: https://www.addgene.org/protocols/aav-titration-qpcr-using-sybr-green-technology/
|
| 3 |
+
================================================================================
|
| 4 |
+
|
| 5 |
+
INTRODUCTION
|
| 6 |
+
================================================================================
|
| 7 |
+
|
| 8 |
+
The AAV Titration protocol can be used to determine the number of
|
| 9 |
+
genome-containing particles of an AAV prep using SYBR green technology.
|
| 10 |
+
|
| 11 |
+
This protocol was validated using an internal reference AAV of known titer,
|
| 12 |
+
100837-AAV1, and by measuring the titer of samples obtained from academic viral
|
| 13 |
+
vector cores. Our titers were similar to those reported by these institutions.
|
| 14 |
+
|
| 15 |
+
This protocol is for a 96-well plate with 20 μL reaction volume.
|
| 16 |
+
|
| 17 |
+
Last Update: February 13, 2019
|
| 18 |
+
|
| 19 |
+
Estimate of time required: ~3 h
|
| 20 |
+
|
| 21 |
+
|
| 22 |
+
WORKFLOW TIMELINE
|
| 23 |
+
================================================================================
|
| 24 |
+
|
| 25 |
+
Plate set-up: 2 h
|
| 26 |
+
|
| 27 |
+
qPCR run: 1.5 h
|
| 28 |
+
|
| 29 |
+
Data analysis: 30 min
|
| 30 |
+
|
| 31 |
+
|
| 32 |
+
EQUIPMENT
|
| 33 |
+
================================================================================
|
| 34 |
+
|
| 35 |
+
• qPCR instrument
|
| 36 |
+
• Heating plate
|
| 37 |
+
• Pipettors
|
| 38 |
+
• 1–10 µL single channel pipette
|
| 39 |
+
• 20–200 µL single channel pipette
|
| 40 |
+
• 200–1000 µL single channel pipette
|
| 41 |
+
• 1–10 µL multichannel pipette
|
| 42 |
+
• 2–50 µL multichannel pipette
|
| 43 |
+
• 20–200 µL multichannel pipette
|
| 44 |
+
|
| 45 |
+
|
| 46 |
+
REAGENTS
|
| 47 |
+
================================================================================
|
| 48 |
+
|
| 49 |
+
• Universal SYBR Master Mix 2X
|
| 50 |
+
• Primer pair targeting AAV2 ITR (Aurnhammer et al., 2012)
|
| 51 |
+
- fwd ITR primer, 5'-GGAACCCCTAGTGATGGAGTT
|
| 52 |
+
- rev ITR primer, 5'-CGGCCTCAGTGAGCGA
|
| 53 |
+
• ITR-containing plasmid for standard curve
|
| 54 |
+
• RNase-free DNase
|
| 55 |
+
• 10X DNase buffer
|
| 56 |
+
• Nuclease-free water
|
| 57 |
+
• Microcentrifuge tubes
|
| 58 |
+
• 96-well optical plate
|
| 59 |
+
• Pipette tips
|
| 60 |
+
|
| 61 |
+
|
| 62 |
+
GENERAL CONSIDERATIONS
|
| 63 |
+
================================================================================
|
| 64 |
+
|
| 65 |
+
• Always run standards and samples in duplicate at least
|
| 66 |
+
|
| 67 |
+
• If possible, include an AAV reference sample of known titer. The reference
|
| 68 |
+
material should have a titer within 1-log of the expected titer of the samples
|
| 69 |
+
being tested.
|
| 70 |
+
|
| 71 |
+
• Always include a No Template Control (NTC), i.e master mix + water
|
| 72 |
+
|
| 73 |
+
• Whenever possible use a multichannel pipet to minimize pipetting error and
|
| 74 |
+
variability
|
| 75 |
+
|
| 76 |
+
• Mix samples very well by pipetting back and forth multiple times at each step
|
| 77 |
+
|
| 78 |
+
|
| 79 |
+
REAGENT PREPARATION
|
| 80 |
+
================================================================================
|
| 81 |
+
|
| 82 |
+
Master Mix:
|
| 83 |
+
|
| 84 |
+
Count the number of samples (n) and prepare master mix for an additional 10
|
| 85 |
+
samples (n+10 – the additional amount will ensure that there is enough master mix
|
| 86 |
+
for all samples). Each sample requires 15 μL of master mix.
|
| 87 |
+
|
| 88 |
+
💡 PRO TIPS:
|
| 89 |
+
|
| 90 |
+
• Use a "Universal" SYBR master mix which contains a high-quality DNA polymerase
|
| 91 |
+
and a blend of dTTP/dUTP to minimize carryover contamination. The master mix
|
| 92 |
+
should also contain an internal passive reference (typically ROX dye), to
|
| 93 |
+
normalize non-PCR–related fluorescence fluctuations and to minimize well-to-well
|
| 94 |
+
variability that result from a variety of causes, such as pipetting error and
|
| 95 |
+
sample evaporation.
|
| 96 |
+
|
| 97 |
+
• Make the master mix after all the samples have been added to the qPCR plate.
|
| 98 |
+
Start by adding water, then SYBR master mix, then the forward and reverse
|
| 99 |
+
primers. Vortex briefly, immediately before use.
|
| 100 |
+
|
| 101 |
+
• Use a reservoir and a multichannel pipette to dispense the master mix into the
|
| 102 |
+
wells.
|
| 103 |
+
|
| 104 |
+
Master Mix Recipe:
|
| 105 |
+
|
| 106 |
+
Reagent | Amount for ONE Reaction | Amount for 100 reactions
|
| 107 |
+
---------------------------|------------------------|--------------------------
|
| 108 |
+
Universal SYBR Master Mix | 10 μL | 1,000 μL
|
| 109 |
+
2X | |
|
| 110 |
+
100 μM Forward Primer | 0.15 μL | 15 μL
|
| 111 |
+
100 μM Reverse Primer | 0.15 μL | 15 μL
|
| 112 |
+
Nuclease Free Water | 4.7 μL | 470 μL
|
| 113 |
+
|
| 114 |
+
|
| 115 |
+
PROCEDURE
|
| 116 |
+
================================================================================
|
| 117 |
+
|
| 118 |
+
1. Prepare a plasmid stock of 2 x 10⁹ molecules/μL to generate a standard curve:
|
| 119 |
+
|
| 120 |
+
One option is to use plasmid #59462 from Addgene. The values highlighted below
|
| 121 |
+
in red were calculated using this plasmid, but will change if you use a
|
| 122 |
+
different plasmid.
|
| 123 |
+
|
| 124 |
+
Sample Calculation:
|
| 125 |
+
• Size in bp of Addgene plasmid #59462: 6208 bp
|
| 126 |
+
• Concentration of Addgene plasmid #59462: 1.07 μg/μL
|
| 127 |
+
• Molecular Weight: 6208 bp × 650 dalton/bp = 4.03 × 10⁶ g/mole
|
| 128 |
+
• Moles/μl: 1.07 μg/μL × 1 g/10⁶ μg × 1 / 4.03 × 10⁶ g/mole = 2.65 × 10⁻¹³
|
| 129 |
+
moles/μL
|
| 130 |
+
• Molecules/μl: 2.65 × 10⁻¹³ moles/μL × 6.022145 × 10²³ molecules/mole = 1.59
|
| 131 |
+
× 10¹¹ molecules/μL
|
| 132 |
+
• To obtain a solution at 2 × 10⁹ molecules/μL: 1.59 × 10¹¹ / 2 × 10⁹ = 79.8X
|
| 133 |
+
dilution
|
| 134 |
+
• Therefore we need to dilute 1.25 μL stock into 98.74 μL H₂O
|
| 135 |
+
|
| 136 |
+
💡 PRO TIP: Once a validated standard curve is obtained, make a small aliquot
|
| 137 |
+
of each standard (enough for 1 or 2 plates) and store at -20 °C. Once a
|
| 138 |
+
standard is thawed do not freeze it again but store at 4 °C and use within 1
|
| 139 |
+
week.
|
| 140 |
+
|
| 141 |
+
Keep track of the Ct value for each standard over time. They should remain
|
| 142 |
+
within 0.5 Ct of their initial value. If the Ct value of the standard starts
|
| 143 |
+
to drift, it's time to make a new one.
|
| 144 |
+
|
| 145 |
+
When developing the assay multiple plasmids containing ITR were tested.
|
| 146 |
+
Plasmid #59462 is one plasmid that gave reliable and consistent results. Use
|
| 147 |
+
the recommended plasmid, or test multiple plasmids to find a suitable one.
|
| 148 |
+
|
| 149 |
+
Some labs have reported better results when the plasmid is linearized.
|
| 150 |
+
|
| 151 |
+
2. Treat the purified AAV samples with DNase I to eliminate any contaminating
|
| 152 |
+
plasmid DNA carried over from the production process (DNase does not penetrate
|
| 153 |
+
the virion).
|
| 154 |
+
|
| 155 |
+
• 5 μL sample + 39 μL H₂O + 5 μL 10X DNase buffer + 1 μL DNase
|
| 156 |
+
• Gently mix sample (do not vortex)
|
| 157 |
+
• Incubate 30 min at 37 °C
|
| 158 |
+
• Transfer to ice
|
| 159 |
+
|
| 160 |
+
** Critical: do NOT treat your plasmid standard with DNase **
|
| 161 |
+
|
| 162 |
+
3. Make 6 serial dilutions, in duplicate, of your standard curve plasmid (2 ×
|
| 163 |
+
10⁹ stock made in step #1):
|
| 164 |
+
|
| 165 |
+
Volume of 2 × 10⁹ stock | Volume of nuclease-free | Molecules per μL
|
| 166 |
+
or previous dilution | water (uL) |
|
| 167 |
+
(μL) | |
|
| 168 |
+
------------------------|-------------------------|------------------
|
| 169 |
+
10 | 90 | 2 × 10⁸
|
| 170 |
+
10 of 2 × 10⁸ dilution | 90 | 2 × 10⁷
|
| 171 |
+
10 of 2 × 10⁷ dilution | 90 | 2 × 10⁶
|
| 172 |
+
10 of 2 × 10⁶ dilution | 90 | 2 × 10⁵
|
| 173 |
+
10 of 2 × 10⁵ dilution | 90 | 2 × 10⁴
|
| 174 |
+
10 of 2 × 10⁴ dilution | 90 | 2 × 10³
|
| 175 |
+
|
| 176 |
+
💡 PRO TIP: To help stabilize the standards add carrier DNA to a final
|
| 177 |
+
concentration of 4 ug/mL to each standard dilution.
|
| 178 |
+
|
| 179 |
+
4. Dilute DNase-treated and AAV reference samples according to the dilution
|
| 180 |
+
scheme in the table below:
|
| 181 |
+
|
| 182 |
+
Dilution Series | Volume of sample | Volume of nuclease | Dilution | Total
|
| 183 |
+
| (uL) | free water (uL) | factor | dilution
|
| 184 |
+
----------------|------------------|--------------------|----------|----------
|
| 185 |
+
Dilution 1 | 5 uL AAV stock | 45 uL | 10X | 10X
|
| 186 |
+
(DNase step) | | | |
|
| 187 |
+
Dilution 2 | 5 uL Dil. 1 | 95 uL | 20X | 200X
|
| 188 |
+
Dilution 3 | 20 uL Dil. 2 | 80 uL | 5X | 1000X
|
| 189 |
+
Dilution 4 | 20 uL Dil. 3 | 80 uL | 5X | 5000X
|
| 190 |
+
Dilution 5 | 20 uL Dil. 4 | 80 uL | 5X | 25000X
|
| 191 |
+
Dilution 6 | 20 uL Dil. 5 | 80 uL | 5X | 125000X
|
| 192 |
+
Dilution 7 | 20 uL Dil. 6 | 80 uL | 5X | 625000X
|
| 193 |
+
Dilution 8 | 20 uL Dil. 7 | 80 uL | 5X | 3125000X
|
| 194 |
+
|
| 195 |
+
Dilutions highlighted in green are the ones loaded onto the qPCR plate for
|
| 196 |
+
most samples.
|
| 197 |
+
|
| 198 |
+
• If sample is expected to have a titer <1 × 10¹² GC/mL, use dilutions 3–6
|
| 199 |
+
• If sample is expected to have a titer >3 × 10¹³ GC/mL, use dilutions 5–8
|
| 200 |
+
|
| 201 |
+
Note: at Addgene, samples typically range from 1 × 10¹² GC/mL to >2 × 10¹³
|
| 202 |
+
GC/mL and we use an internal reference virus that is 1 × 10¹³ GC/mL. We
|
| 203 |
+
recommend always using a reference within 1-log of the expected titer.
|
| 204 |
+
|
| 205 |
+
💡 PRO TIPS:
|
| 206 |
+
• The quality of the sample dilution series is critical. Make sure to pipet
|
| 207 |
+
each dilution up and down at least 10 times, and use at least half of the
|
| 208 |
+
final volume (mix with >50 uL if your well contains 100 uL)
|
| 209 |
+
• Use a multichannel pipette to load the standards and samples onto the qPCR
|
| 210 |
+
plate
|
| 211 |
+
|
| 212 |
+
5. Set up and load the 96-well plate:
|
| 213 |
+
• Load 5 μL of each standard in duplicate
|
| 214 |
+
• Load 5 μL of each sample in duplicate. Do not forget to include a no
|
| 215 |
+
template control (NTC = master mix + water).
|
| 216 |
+
• Add 15 μL of Master Mix per well and mix well by pipetting back and forth
|
| 217 |
+
at least 5 times.
|
| 218 |
+
• Seal plate with transparent film.
|
| 219 |
+
• Centrifuge at 3,000 rpm for 2 min to bring the sample to the bottom of the
|
| 220 |
+
tube.
|
| 221 |
+
|
| 222 |
+
6. Run the following protocol in your qPCR instrument using SYBR detection:
|
| 223 |
+
|
| 224 |
+
98 °C 3 min / 98 °C 15 sec / 58 °C 30 sec / read plate/ repeat 39x from step
|
| 225 |
+
3 / melt curve
|
| 226 |
+
|
| 227 |
+
7. Perform data analysis using the instrument's software. Determine the physical
|
| 228 |
+
titer of samples (viral genomes (vg)/mL) based on the standard curve and the
|
| 229 |
+
sample dilutions.
|
| 230 |
+
|
| 231 |
+
💡 PRO TIP: Make sure that the qPCR is valid by checking to the following:
|
| 232 |
+
• Standard curve: R² (coefficient of correlation) ~ 1.0, E (efficiency of PCR)
|
| 233 |
+
~100% (90%–110% range is acceptable)
|
| 234 |
+
• Baseline removal: all samples will have some small amount of background
|
| 235 |
+
signal that is most evident during initial PCR cycles. This background
|
| 236 |
+
signal must be removed to accurately determine differences between samples.
|
| 237 |
+
• Melt curve analysis: a single peak should be seen. The presence of a second
|
| 238 |
+
peak at a temperature of ~70–75 °C usually indicates the presence of primer
|
| 239 |
+
dimers which can increase background signal and alter the Ct values of your
|
| 240 |
+
samples.
|
| 241 |
+
• Quality of your standard curve: you should observe differences in Ct values
|
| 242 |
+
that make sense for your dilutions (~3.3 difference Ct for a 10-fold dilution
|
| 243 |
+
is appropriate).
|
| 244 |
+
• Quality of duplicates: Exclude duplicates from analyses if there is more than
|
| 245 |
+
a 0.5 Ct difference between them.
|
| 246 |
+
|
| 247 |
+
|
| 248 |
+
SAMPLE DATA
|
| 249 |
+
================================================================================
|
| 250 |
+
|
| 251 |
+
Example of a valid 8-point standard curve.
|
| 252 |
+
|
| 253 |
+
Example of the amplification plots obtained from an AAV sample. Each curve
|
| 254 |
+
represents a dilution.
|
| 255 |
+
|
| 256 |
+
|
| 257 |
+
REFERENCES
|
| 258 |
+
================================================================================
|
| 259 |
+
|
| 260 |
+
Aurnhammer C, Haase M, Muether N, Hausl M, Rauschhuber C, Huber I, Nitschko H,
|
| 261 |
+
Busch U, Sing A, Ehrhardt A, Baiker A. Universal real-time PCR for the detection
|
| 262 |
+
and quantification of adeno-associated virus serotype 2-derived inverted
|
| 263 |
+
terminal repeat sequences. Hum Gene Ther Methods. 2012 Feb;23(1):18-28. PMID:
|
| 264 |
+
22428977
|
BioScientist/agent_system/engines/v1_executor_backup/tool/protocols/addgene/Addgene_ AAV ddPCR Titration.txt
ADDED
|
@@ -0,0 +1,318 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
PROTOCOL: AAV ddPCR Titration
|
| 2 |
+
SOURCE: https://www.addgene.org/protocols/aav-ddpcr-titration/
|
| 3 |
+
================================================================================
|
| 4 |
+
|
| 5 |
+
INTRODUCTION
|
| 6 |
+
================================================================================
|
| 7 |
+
|
| 8 |
+
This protocol describes how to use droplet digital PCR (ddPCR) to titer purified
|
| 9 |
+
recombinant Adeno-associated viral vectors (AAV). This protocol specifically uses
|
| 10 |
+
primers and probes targeting the ITR elements in the viral vectors but can be
|
| 11 |
+
modified for other targets. The dilution series outlined in this protocol are
|
| 12 |
+
based on an AAV titer range of 5E+12–5E+13 GC/mL, where GC is genome copies and
|
| 13 |
+
generally represents the physical number of viral particles. Users may need to
|
| 14 |
+
run lower or higher dilutions depending on their particular sample. For
|
| 15 |
+
additional tips on AAV titering using ddPCR, read this blog post on ddPCR for
|
| 16 |
+
AAV quantification.
|
| 17 |
+
|
| 18 |
+
This protocol was modified from the publication Lock et al. (2014).
|
| 19 |
+
|
| 20 |
+
|
| 21 |
+
BEFORE STARTING
|
| 22 |
+
================================================================================
|
| 23 |
+
|
| 24 |
+
• To reduce the risk of contaminating reagents we recommend making small aliquots
|
| 25 |
+
of master mixes, primers, and probes prior to use.
|
| 26 |
+
|
| 27 |
+
• Thaw the master mix, primers, and probe on ice before use.
|
| 28 |
+
|
| 29 |
+
• Wipe down all pipettes and surfaces with 10% bleach.
|
| 30 |
+
|
| 31 |
+
|
| 32 |
+
SAFETY WARNINGS
|
| 33 |
+
================================================================================
|
| 34 |
+
|
| 35 |
+
AAV is generally considered biosafety level 1 but may require BSL-2 handling
|
| 36 |
+
depending on the insert. Please ensure that you are in compliance with your
|
| 37 |
+
institution's biosafety regulations.
|
| 38 |
+
|
| 39 |
+
|
| 40 |
+
EQUIPMENT
|
| 41 |
+
================================================================================
|
| 42 |
+
|
| 43 |
+
• Class II, Type A2 Biological Safety Cabinet, Labconco 302411100
|
| 44 |
+
• Droplet Digital PCR System, Bio-Rad, DX200
|
| 45 |
+
• Thermal Cycler, Bio-Rad, T100
|
| 46 |
+
• PCR Plate Sealer, Bio-Rad, PX1
|
| 47 |
+
• 1–10 µL single channel pipette
|
| 48 |
+
• 20–200 µL single channel pipette
|
| 49 |
+
• 200–1000 µL single channel pipette
|
| 50 |
+
• 1–10 µL multichannel pipette
|
| 51 |
+
• 2–50 µL multichannel pipette
|
| 52 |
+
• 20–200 µL multichannel pipette
|
| 53 |
+
• Vortex, VWR, 10153-688
|
| 54 |
+
• Mini Centrifuge, Thermo Scientific, 10199-452
|
| 55 |
+
• Ice bucket
|
| 56 |
+
• 96-well freezer blocks (x 3)
|
| 57 |
+
|
| 58 |
+
|
| 59 |
+
REAGENTS
|
| 60 |
+
================================================================================
|
| 61 |
+
|
| 62 |
+
• Molecular Biology Grade Water, Hyclone, SH30538.02
|
| 63 |
+
• GeneAmp 10X PCR Buffer, Applied Biosystems, N8080129
|
| 64 |
+
• ddPCR Supermix for Probes no dUTP, Bio-Rad,1863023
|
| 65 |
+
• 10% Poloxamer 188, Thermo Fisher, 24040032
|
| 66 |
+
• Droplet generation oil, Bio-Rad, 1863005
|
| 67 |
+
• DG8 cartridge, Bio-Rad, 1864008
|
| 68 |
+
• DG8 gasket, Bio-Rad, 1863009
|
| 69 |
+
• DG8 cartridge holder, Bio-Rad, 1863051
|
| 70 |
+
• 8-strip PCR tubes, Axygen, PCR-02-FCP-C
|
| 71 |
+
• ddPCR 96-well PCR plates, Bio-Rad, 12001925
|
| 72 |
+
• 48-well dilution plate, Bio-Rad, MLL4801
|
| 73 |
+
• Pierceable Foil Heat Seal, Bio-Rad, 1814040
|
| 74 |
+
• Microseal adhesive seal, Bio-Rad, MSB1001
|
| 75 |
+
• Polystyrene Reservoirs, VWR, 89094-662
|
| 76 |
+
• Microcentrifuge tubes, VWR, 87003-294
|
| 77 |
+
|
| 78 |
+
Primers/probe targeting ITR:
|
| 79 |
+
• ITR Forward Primer: 5'-CGGCCTCAGTGAGCGA
|
| 80 |
+
• ITR Reverse Primer: 5'-GGAACCCCTAGTGATGGAGTT
|
| 81 |
+
• ITR Probe: -FAM-CACTCCCTCTCTGCGCGCTCG-BBQ-
|
| 82 |
+
|
| 83 |
+
|
| 84 |
+
REAGENT PREPARATION
|
| 85 |
+
================================================================================
|
| 86 |
+
|
| 87 |
+
1X PCR Buffer containing 0.05% Poloxamer 188:
|
| 88 |
+
|
| 89 |
+
Prepare immediately before use and vortex before using.
|
| 90 |
+
|
| 91 |
+
• 500 µL of GeneAmp 10X Buffer
|
| 92 |
+
• 25 µL of 10% Poloxamer 188
|
| 93 |
+
• 4475 µL Molecular Biology Grade Water
|
| 94 |
+
|
| 95 |
+
|
| 96 |
+
PROCEDURE
|
| 97 |
+
================================================================================
|
| 98 |
+
|
| 99 |
+
Preparation
|
| 100 |
+
|
| 101 |
+
1. Before handling any viruses, get materials ready.
|
| 102 |
+
|
| 103 |
+
2. Ensure that primers, probe, 10X PCR buffer, and master mix are thawed.
|
| 104 |
+
|
| 105 |
+
3. Vortex primers, probe and master mix for 15 sec then spin 10 sec in a mini
|
| 106 |
+
centrifuge and place on ice.
|
| 107 |
+
|
| 108 |
+
4. Wipe down a DG8 cartridge holder with bleach and place in the Biological
|
| 109 |
+
Safety Cabinet (BSC).
|
| 110 |
+
|
| 111 |
+
5. Make sure that the BSC to be used for dilution and the BSC to be used for
|
| 112 |
+
droplet generation are supplied with sufficient pipette tips and reagent
|
| 113 |
+
reservoirs.
|
| 114 |
+
|
| 115 |
+
💡 PRO TIP: Prepare the viral dilutions in a separate biological safety
|
| 116 |
+
cabinet (dilution BSC) than that used for master mix preparation and droplet
|
| 117 |
+
generation (droplet generation BSC) to ensure no contamination of the PCR
|
| 118 |
+
reagents and the NTC with virus.
|
| 119 |
+
|
| 120 |
+
6. Pre-warm the 96-well plate sealer by gently touching the screen.
|
| 121 |
+
|
| 122 |
+
Prepare the Serial Dilution
|
| 123 |
+
|
| 124 |
+
1. Place a 48-well dilution plate in a chilled 96-well freezer block and place in
|
| 125 |
+
the dilution BSC.
|
| 126 |
+
|
| 127 |
+
2. Prepare 1X dilution buffer (see recipe above).
|
| 128 |
+
|
| 129 |
+
3. Save ~25 µL of 1X dilution buffer in a microcentrifuge tube to be used as
|
| 130 |
+
the NTC.
|
| 131 |
+
|
| 132 |
+
4. Pour the 1X dilution buffer into a polystyrene reagent reservoir.
|
| 133 |
+
|
| 134 |
+
5. Using a 20–200 µL multichannel pipette, carefully add the dilution buffer to
|
| 135 |
+
the dilution plate according to the dilution scheme listed in step 13.
|
| 136 |
+
|
| 137 |
+
6. Use a single channel 1–10 µL pipette to add 5 µL of each viral sample to
|
| 138 |
+
Dilution 1 in the 48-well dilution plate and pipette 5–10 times to mix.
|
| 139 |
+
|
| 140 |
+
7. Dilute the virus as follows: Mix dilutions thoroughly, but pipette slowly to
|
| 141 |
+
avoid generating aerosols. Be sure to change tips each time.
|
| 142 |
+
|
| 143 |
+
• Dilution 1 (20X): 5 µL in 95 µL 1X PCR buffer (1:20)
|
| 144 |
+
• Dilution 2 (20X): 5 µL in 95 µL 1X PCR buffer (1:400)
|
| 145 |
+
• Dilution 3 (20X): 5 µL in 95 µL 1X PCR buffer (1:8,000)
|
| 146 |
+
• Dilution 4 (20X): 5 µL in 95 µL 1X PCR buffer (1:160,000)
|
| 147 |
+
• Dilution 5 (20X): 5 µL in 95 µL 1X PCR buffer (1:3,200,000)
|
| 148 |
+
• Dilution 6 (2X): 50 µL in 50 µL 1X PCR buffer (1:6,400,000)
|
| 149 |
+
• Dilution 7 (2X): 50 µL in 50 µL 1X PCR buffer (1:12,800,000)
|
| 150 |
+
• Dilution 8 (2X): 50 µL in 50 µL 1X PCR buffer (1:25,600,000)
|
| 151 |
+
|
| 152 |
+
8. Use multichannel pipettes for the dilution series.
|
| 153 |
+
• For dilutions 1–5, use the 1–10 µL multichannel pipette set to 5 µL.
|
| 154 |
+
• For dilutions 6–8, use the 20–200 µL multichannel pipette set to 50 µL.
|
| 155 |
+
• For mixing between dilutions, use the 20–200 µL multichannel pipette set to
|
| 156 |
+
90 µL and mix by pipetting the liquid up and down 10–20 times.
|
| 157 |
+
|
| 158 |
+
9. Gently cover the entire dilution plate with Microseal adhesive seal - do not
|
| 159 |
+
press the film, just gently cover so nothing falls into the plate.
|
| 160 |
+
|
| 161 |
+
10. Leave dilutions on the chilled 96-well freezer block in the BSC until ready
|
| 162 |
+
to use.
|
| 163 |
+
|
| 164 |
+
Prepare the Master Mix
|
| 165 |
+
|
| 166 |
+
1. Place a ddPCR plate onto a chilled 96-well freezer block and set aside in the
|
| 167 |
+
droplet generation BSC to cool.
|
| 168 |
+
|
| 169 |
+
2. Prepare the ITR master mix in a microcentrifuge tube as shown below. For 8
|
| 170 |
+
samples prepare enough master mix for 9 samples.
|
| 171 |
+
|
| 172 |
+
ITR Master Mix:
|
| 173 |
+
|
| 174 |
+
Component | Volume | 9X Volume | Final Concentration
|
| 175 |
+
---------------------------------|--------|-----------|--------------------
|
| 176 |
+
2X ddPCR Supermix for Probes, | 10 µL | 90 µL | 1X
|
| 177 |
+
no dUTP | | |
|
| 178 |
+
10 µM ITR probe (FAM) | 0.5 µL | 4.5 µL | 250 nM
|
| 179 |
+
Forward ITR Primer (10 µM) | 1.8 µL | 16.2 µL | 900 nM
|
| 180 |
+
Reverse ITR Primer (10 µM) | 1.8 µL | 16.2 µL | 900 nM
|
| 181 |
+
Nuclease-free water | 5.9 µL | 71.55 µL |
|
| 182 |
+
Total Volume | 20 µL | |
|
| 183 |
+
|
| 184 |
+
3. Vortex the master mix for 15 sec and spin in a mini centrifuge for 10 sec
|
| 185 |
+
before use.
|
| 186 |
+
|
| 187 |
+
4. Place an 8-well PCR tube strip into a chilled 96-well freezer block.
|
| 188 |
+
|
| 189 |
+
5. Add 20 µL of the master mix to each PCR tube. Be careful to dispense to the
|
| 190 |
+
bottom of the tube without collecting drops along the side of the tube.
|
| 191 |
+
|
| 192 |
+
6. Cap gently - do not push the cap in all the way, just ensure the samples are
|
| 193 |
+
covered.
|
| 194 |
+
|
| 195 |
+
7. Bring the PCR tubes to the BSC used for dilutions.
|
| 196 |
+
|
| 197 |
+
8. Without disturbing the liquid in the tube, gently uncap the PCR tubes.
|
| 198 |
+
|
| 199 |
+
9. Add 5 µL of dilutions 6–8 to the appropriate PCR tubes. Pipette back and
|
| 200 |
+
forth 5 times.
|
| 201 |
+
|
| 202 |
+
10. Lightly cap the PCR tubes.
|
| 203 |
+
|
| 204 |
+
Generate the Droplets
|
| 205 |
+
|
| 206 |
+
1. Bring the PCR tubes to the droplet generation BSC.
|
| 207 |
+
|
| 208 |
+
2. Without disturbing the liquid in the tube, gently uncap the tubes.
|
| 209 |
+
|
| 210 |
+
3. Add 5 µL of the previously aliquoted 1X dilution buffer from step 9 to the
|
| 211 |
+
NTC tube.
|
| 212 |
+
|
| 213 |
+
4. Place a DG8 cartridge into the cartridge holder.
|
| 214 |
+
|
| 215 |
+
5. Using a 2–50 µL multichannel pipet, load 20 µL of the reaction mixtures into
|
| 216 |
+
the middle wells of the cartridge.
|
| 217 |
+
|
| 218 |
+
6. Add 800 µL of droplet generation oil to a polystyrene reagent reservoir.
|
| 219 |
+
|
| 220 |
+
7. Using the 20–200 µL multichannel pipet, load 70 µL of droplet generation oil
|
| 221 |
+
into the bottom row of wells.
|
| 222 |
+
|
| 223 |
+
8. Cover the cartridge with the DG8 gasket, making sure that it is secure.
|
| 224 |
+
|
| 225 |
+
9. Transfer the cartridge holder to the droplet generator. Close the lid and wait
|
| 226 |
+
for the droplets to be generated.
|
| 227 |
+
|
| 228 |
+
10. Once the droplets have been generated, use a 20–200 µL multichannel pipet to
|
| 229 |
+
aspirate 40 µL of droplets.
|
| 230 |
+
|
| 231 |
+
💡 PRO TIP: To ensure that the droplets are not disrupted, insert the pipette
|
| 232 |
+
tips directly in the center of the well and tilt to a 45° angle. Count to 20
|
| 233 |
+
while slowly and gently aspirating the droplets.
|
| 234 |
+
|
| 235 |
+
11. Transfer the droplets to a prechilled PCR plate.
|
| 236 |
+
|
| 237 |
+
💡 PRO TIP: To ensure that the droplets are not disrupted insert the pipette
|
| 238 |
+
tips and gently touch the bottom of the well. Lift the tips ~1 mm. Touch the
|
| 239 |
+
side of the well and tilt the pipette tips at a 45° angle. Count to 20 while
|
| 240 |
+
slowly and gently dispensing the droplets down the side of the tube.
|
| 241 |
+
|
| 242 |
+
12. Place a Pierceable Foil Heat Seal on the PCR plate with the red line facing
|
| 243 |
+
up. If the plate sealer is not at temperature, touch the screen on the plate
|
| 244 |
+
sealer to allow it to get to temperature. Once the temperature is reached,
|
| 245 |
+
place the PCR plate with the foil onto the metal support block. Place the
|
| 246 |
+
block in the plate sealer and press the 'Seal' button.
|
| 247 |
+
|
| 248 |
+
13. After the plate has been sealed, proceed to thermocycling.
|
| 249 |
+
|
| 250 |
+
Thermal Cycling
|
| 251 |
+
|
| 252 |
+
Run the following PCR parameters:
|
| 253 |
+
|
| 254 |
+
Cycling Step | Temperature (°C) | Time (min) | Ramp Rate (°C/sec) | # Cycles
|
| 255 |
+
----------------------|------------------|------------|-------------------|----------
|
| 256 |
+
Denaturation | 95 | 10 | 2 | 1
|
| 257 |
+
Denaturation | 95 | 0.5 | 2 | 50
|
| 258 |
+
Annealing/Extension | 60 | 1 | 2 | 50
|
| 259 |
+
Signal Stabilization | 98 | 10 | 2 | 1
|
| 260 |
+
Hold | 4 | ∞ | 2 | 1
|
| 261 |
+
|
| 262 |
+
After PCR is complete, transfer the plate to the Droplet Reader.
|
| 263 |
+
|
| 264 |
+
1. Open the QuantaSoft software to set up a new plate layout. Designate the
|
| 265 |
+
sample name, experiment type, supermix type (ddPCR Supermix for Probes), the
|
| 266 |
+
target names and target types.
|
| 267 |
+
|
| 268 |
+
2. When the plate layout is complete, select 'Run' to begin the droplet reading.
|
| 269 |
+
|
| 270 |
+
3. When the droplet reading is complete, export the data from all wells as a CSV
|
| 271 |
+
file and use the following equation to calculate the titer for each sample:
|
| 272 |
+
|
| 273 |
+
T = (R × C × D × 1000) / V
|
| 274 |
+
|
| 275 |
+
Where:
|
| 276 |
+
• T = Titer, GC/mL
|
| 277 |
+
• R = Reaction volume (20 µL)
|
| 278 |
+
• C = Copies/µL
|
| 279 |
+
• D = Dilution factor of virus
|
| 280 |
+
• V = Volume of virus in reaction mix (4 µL)
|
| 281 |
+
|
| 282 |
+
|
| 283 |
+
SAMPLE DATA
|
| 284 |
+
================================================================================
|
| 285 |
+
|
| 286 |
+
When analyzing data there should be a clear distinction between negative droplets
|
| 287 |
+
(black) and positive droplets (blue).
|
| 288 |
+
|
| 289 |
+
The no template control (NTC) should be close to zero (B08). At Addgene, we
|
| 290 |
+
consider runs with an NTC > 10 to be invalid.
|
| 291 |
+
|
| 292 |
+
To reduce NTC values, we recommend wiping down all pipettes and equipment with
|
| 293 |
+
10% bleach prior to use and keeping all reagents and samples on ice or
|
| 294 |
+
pre-chilled 96-well freezer blocks during use.
|
| 295 |
+
|
| 296 |
+
In this protocol, a dilution series is prepared for each AAV sample, and the
|
| 297 |
+
three final dilutions are assayed. The samples that are assayed are diluted
|
| 298 |
+
2-fold serially, therefore the concentration obtained by ddPCR should decrease by
|
| 299 |
+
a factor of 2 across the dilutions.
|
| 300 |
+
|
| 301 |
+
In the example below, 2-fold serial dilutions of a sample were loaded in wells
|
| 302 |
+
A04, A05 and A06. As shown in the image (Figure 1) and table below, the
|
| 303 |
+
concentration of positive droplets decreases by a factor of ~2.
|
| 304 |
+
|
| 305 |
+
To increase the accuracy of the titer, take the average of several measurements.
|
| 306 |
+
|
| 307 |
+
Example dilutions and titrations:
|
| 308 |
+
|
| 309 |
+
Sample | Dilution | Concentration | Titer (GC/mL) | Average Titer (GC/mL)
|
| 310 |
+
------------|----------|---------------|---------------|----------------------
|
| 311 |
+
AAV Sample 1| 6400000 | 965 | 3.09E+13 | 3.2E+13
|
| 312 |
+
AAV Sample 1| 12800000 | 474 | 3.03E+13 |
|
| 313 |
+
AAV Sample 1| 25600000 | 271 | 3.47E+13 |
|
| 314 |
+
NTC | N/A | 2.5 | N/A | N/A
|
| 315 |
+
|
| 316 |
+
For additional tips on AAV titering using ddPCR, read our blog post.
|
| 317 |
+
|
| 318 |
+
Last reviewed on: August 31, 2023
|
BioScientist/agent_system/engines/v1_executor_backup/tool/protocols/addgene/Addgene_ Affinity Purification of Recombinant Antibodies with Protein A or Protein G.txt
ADDED
|
@@ -0,0 +1,310 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
PROTOCOL: Affinity Purification of Recombinant Antibodies with Protein A or Protein G
|
| 2 |
+
SOURCE: https://www.addgene.org/protocols/affinity-purification-recombinant-antibodies/
|
| 3 |
+
================================================================================
|
| 4 |
+
|
| 5 |
+
INTRODUCTION
|
| 6 |
+
================================================================================
|
| 7 |
+
|
| 8 |
+
This protocol describes how to affinity purify recombinant antibodies from cell
|
| 9 |
+
culture supernatant using Protein A or Protein G columns.
|
| 10 |
+
|
| 11 |
+
Last Update: February 7, 2022
|
| 12 |
+
|
| 13 |
+
|
| 14 |
+
SAFETY WARNINGS
|
| 15 |
+
================================================================================
|
| 16 |
+
|
| 17 |
+
Sodium azide is toxic. When handling, use proper personal protective equipment
|
| 18 |
+
including laboratory coat, laboratory goggles, and gloves. Sodium azide containing
|
| 19 |
+
waste should be properly disposed of following your institution's hazardous waste
|
| 20 |
+
procedures.
|
| 21 |
+
|
| 22 |
+
|
| 23 |
+
WORKFLOW TIMELINE
|
| 24 |
+
================================================================================
|
| 25 |
+
|
| 26 |
+
Day 1: Purify antibody
|
| 27 |
+
|
| 28 |
+
Day 2 or later: Buffer exchange
|
| 29 |
+
|
| 30 |
+
|
| 31 |
+
EQUIPMENT
|
| 32 |
+
================================================================================
|
| 33 |
+
|
| 34 |
+
• Class II, Type A2 Biological Safety Cabinet
|
| 35 |
+
• 4 °C Refrigerator
|
| 36 |
+
• Pipette controller
|
| 37 |
+
• Benchtop centrifuge compatible with 50 mL conical tubes
|
| 38 |
+
• NanoDrop spectrophotometer
|
| 39 |
+
• 37 °C, 5% CO₂ incubator with shaking platform set to 120 rpm
|
| 40 |
+
• 37 °C bead bath
|
| 41 |
+
• Clamp stand and clamps
|
| 42 |
+
• Autoclave
|
| 43 |
+
• 0.1–1 mL single channel pipette
|
| 44 |
+
• 0.5–10 µL single channel pipette
|
| 45 |
+
• 20–200 µL single channel pipette
|
| 46 |
+
• 2–20 µL single channel pipette
|
| 47 |
+
|
| 48 |
+
|
| 49 |
+
REAGENTS
|
| 50 |
+
================================================================================
|
| 51 |
+
|
| 52 |
+
• Aspirating pipette, VWR 414004-265
|
| 53 |
+
• 5 mL pipette, VWR 89130-896
|
| 54 |
+
• 10 mL pipette, VWR 89130-898
|
| 55 |
+
• 25 mL pipette, VWR 89130-900
|
| 56 |
+
• 50 mL pipette, VWR 89130-902
|
| 57 |
+
• 50 mL conical tubes, VWR 89039-656
|
| 58 |
+
• Microcentrifuge tubes, VWR 89126-724
|
| 59 |
+
• Filtering system 0.2 µm PES, VWR 431098
|
| 60 |
+
• Sodium phosphate monobasic monohydrate, Millipore Sigma 71507-250G
|
| 61 |
+
• Sodium phosphate dibasic, Millipore Sigma S7907-500G
|
| 62 |
+
• 1 M Trizma hydrochloride solution pH 9.0, Millipore Sigma T2819-1L
|
| 63 |
+
• 250 mL sterile bottle, VWR 430281
|
| 64 |
+
• 0.45 µm PES complete filtration unit, 500 mL, rapid-flow, VWR 73520-984
|
| 65 |
+
• Syringes, 30 mL, VWR BD302832
|
| 66 |
+
• Filter, 0.2 µm (luer-lock), VWR 431229
|
| 67 |
+
• IgG Elution Buffer, Thermo Fisher 21028
|
| 68 |
+
• Protein G GraviTrap columns, Cytiva 28-9852-55 or rProtein A GraviTrap
|
| 69 |
+
columns, Cytiva 28-9852-54
|
| 70 |
+
• LabMate PD10 Buffer Reservoir, Millipre Sigma GE18-3216-03
|
| 71 |
+
• 5% Sodium Azide, 500 mL, VWR 7144.8-16
|
| 72 |
+
• PBS, 1X pH 7.4, VWR 45000-446
|
| 73 |
+
• Benzamide, Millipore Sigma 12072
|
| 74 |
+
• Antipain, Millipore Sigma 10791
|
| 75 |
+
• Leupeptin, Millipore Sigma L2884
|
| 76 |
+
• Aprotinin, Millipore Sigma A6279
|
| 77 |
+
• Zeba Spin Desalting Columns, 7 kDa MWCO, 10 mL, Thermo Fisher 89893
|
| 78 |
+
• Amicon Ultra-15 30 kDa MWCO column, Millipore Sigma UFC903024
|
| 79 |
+
• 50 mL LoBind tubes, VWR 76289-498
|
| 80 |
+
|
| 81 |
+
|
| 82 |
+
BEFORE STARTING
|
| 83 |
+
================================================================================
|
| 84 |
+
|
| 85 |
+
• Wipe down all pipettes and equipment with 10% bleach prior to use.
|
| 86 |
+
|
| 87 |
+
• Warm the affinity column, binding buffer, and elution buffer to room
|
| 88 |
+
temperature (RT) before use.
|
| 89 |
+
|
| 90 |
+
|
| 91 |
+
REAGENT PREPARATION
|
| 92 |
+
================================================================================
|
| 93 |
+
|
| 94 |
+
1 M sodium phosphate monobasic monohydrate (NaH₂PO₄∙H₂O), pH 7.0:
|
| 95 |
+
|
| 96 |
+
• 138 g NaH₂PO₄∙H₂O
|
| 97 |
+
• 1 L deionized water
|
| 98 |
+
• Adjust pH to 7.0
|
| 99 |
+
• Autoclave or filter sterilize
|
| 100 |
+
|
| 101 |
+
1 M sodium phosphate dibasic (Na₂HPO₄), pH 7.0:
|
| 102 |
+
|
| 103 |
+
• 142 g of Na₂HPO₄∙H₂O
|
| 104 |
+
• 1 L deionized water
|
| 105 |
+
• Adjust pH to 7.0
|
| 106 |
+
• Autoclave or filter sterilize
|
| 107 |
+
|
| 108 |
+
1 M of sodium phosphate buffer, pH 7.0:
|
| 109 |
+
|
| 110 |
+
• 390 mL of sterile sodium phosphate monobasic monohydrate (NaH₂PO₄∙H₂O)
|
| 111 |
+
• 610 mL of sterile sodium phosphate dibasic (Na₂HPO₄)
|
| 112 |
+
• Store up to 1 month at 4 °C
|
| 113 |
+
• Adjust pH to 7.0
|
| 114 |
+
• Autoclave or filter sterilize
|
| 115 |
+
|
| 116 |
+
Protein A/G binding buffer (20 mM sodium phosphate buffer, pH 7.0):
|
| 117 |
+
|
| 118 |
+
• 20 mL 1M sodium phosphate buffer
|
| 119 |
+
• 980 mL of deionized water
|
| 120 |
+
• Adjust pH to 7.0
|
| 121 |
+
• Autoclave or filter sterilize
|
| 122 |
+
|
| 123 |
+
1000X protease inhibitor cocktail:
|
| 124 |
+
|
| 125 |
+
• 25 mg leupeptin
|
| 126 |
+
• 50 mg antipain
|
| 127 |
+
• 250 mg benzamidine
|
| 128 |
+
• 25 mL of 2 mg/mL aprotinin
|
| 129 |
+
• Mix well and sterilize through a 0.2 µm PES filter.
|
| 130 |
+
• Aliquot and freeze upright at -20 °C
|
| 131 |
+
|
| 132 |
+
|
| 133 |
+
PROCEDURE
|
| 134 |
+
================================================================================
|
| 135 |
+
|
| 136 |
+
Section 1: Affinity chromatography
|
| 137 |
+
|
| 138 |
+
1. Equilibrate filtered tissue culture supernatant containing the recombinant
|
| 139 |
+
antibody to room temperature (see Transfection for Recombinant Antibody
|
| 140 |
+
protocol).
|
| 141 |
+
|
| 142 |
+
💡 PRO TIP: Add protease inhibitors to 1X if this has not already been done.
|
| 143 |
+
We typically start with about 250 mL of supernatant and add 250 µL of 100X
|
| 144 |
+
protease inhibitor cocktail.
|
| 145 |
+
|
| 146 |
+
2. Add 1 part Protein A/G binding buffer to 1 part tissue culture supernatant
|
| 147 |
+
and mix well.
|
| 148 |
+
|
| 149 |
+
3. Uncap the Protein G Gravitrap or rProtein A Gravitrap columns and gently pour
|
| 150 |
+
off the ethanol storage buffer.
|
| 151 |
+
|
| 152 |
+
4. Tightly attach LabMate PD10 Buffer Reservoirs to the top of the Gravitrap
|
| 153 |
+
column.
|
| 154 |
+
|
| 155 |
+
💡 PRO TIP: Gravitrap columns have a finite binding capacity. If your sample
|
| 156 |
+
exceeds the capacity, divide the sample among multiple columns. For
|
| 157 |
+
information about the total binding capacity for your columns, refer to the
|
| 158 |
+
manufacturer's instructions.
|
| 159 |
+
|
| 160 |
+
5. Attach the Gravitrap column to a clamp on a clamp stand.
|
| 161 |
+
|
| 162 |
+
6. Use scissors to cut the bottom of the Gravitrap column at the indentation in
|
| 163 |
+
the tip.
|
| 164 |
+
|
| 165 |
+
7. Equilibrate the column with 10 mL of RT Protein A/G binding buffer.
|
| 166 |
+
|
| 167 |
+
8. Collect the flow-through in a 50 mL conical tube and dispose after use.
|
| 168 |
+
|
| 169 |
+
9. Carefully pour the filtered and diluted cell culture supernatant into the
|
| 170 |
+
Gravitrap column.
|
| 171 |
+
|
| 172 |
+
10. Collect the flow through in a 250 mL bottle.
|
| 173 |
+
|
| 174 |
+
11. Repeat steps 9–10 such that the supernatant passes through the column a total
|
| 175 |
+
of 2x.
|
| 176 |
+
|
| 177 |
+
💡 PRO TIP: This will ensure depletion of the recombinant antibody from the
|
| 178 |
+
supernatant.
|
| 179 |
+
|
| 180 |
+
12. Wash the column with 25 mL of Protein A/G binding buffer 2x.
|
| 181 |
+
|
| 182 |
+
13. Add 50 µL of 1 M Trizma hydrochloride pH 9.0 to 10 microcentrifuge tubes.
|
| 183 |
+
|
| 184 |
+
14. Cap the Gravitrap columns at the bottom.
|
| 185 |
+
|
| 186 |
+
15. Add 5 mL of Pierce IgG Elution Buffer to the capped Gravitrap column and
|
| 187 |
+
incubate for 10 min at RT.
|
| 188 |
+
|
| 189 |
+
16. Uncap the column and collect 500 µL fractions into the tubes containing 50 µL
|
| 190 |
+
1 M Trizma hydrochloride pH 9.0.
|
| 191 |
+
|
| 192 |
+
17. Cap the tubes and vortex for 5 s to mix.
|
| 193 |
+
|
| 194 |
+
18. Determine the protein concentration of each fraction on the NanoDrop
|
| 195 |
+
Spectrophotometer using the A280 IgG setting.
|
| 196 |
+
|
| 197 |
+
19. Combine all eluates with measurable protein.
|
| 198 |
+
|
| 199 |
+
20. Determine the protein concentration of the pooled sample on the NanoDrop
|
| 200 |
+
Spectrophotometer using the A280 IgG setting.
|
| 201 |
+
|
| 202 |
+
21. If the concentration of the pooled sample is above 1.0 mg/mL proceed to Option
|
| 203 |
+
1 with a buffer exchange using a Zeba Spin 7 kDa MWCO desalting column.
|
| 204 |
+
|
| 205 |
+
22. If the concentration of the pooled sample is below 1.0 mg/mL proceed to
|
| 206 |
+
Option 2 with a buffer exchange/concentration using an Amicon 30 kDa MWCO buffer
|
| 207 |
+
exchange column.
|
| 208 |
+
|
| 209 |
+
23. (Optional) Regenerate the column by washing with 25 mL of Protein A/G binding
|
| 210 |
+
buffer and store in 20% ethanol at 4 °C.
|
| 211 |
+
|
| 212 |
+
💡 PRO TIP: Columns may be re-used up to 5x when purifying the same
|
| 213 |
+
recombinant antibody.
|
| 214 |
+
|
| 215 |
+
Section 2: Buffer exchange
|
| 216 |
+
|
| 217 |
+
Choose Option 1 or Option 2 based on the concentration of the pooled sample above.
|
| 218 |
+
|
| 219 |
+
Option 1: Buffer exchange using a desalting column
|
| 220 |
+
|
| 221 |
+
The 10 mL Zeba Spin Desalting Columns can accommodate up to 4 mL of recombinant
|
| 222 |
+
antibody sample.
|
| 223 |
+
|
| 224 |
+
💡 PRO TIP: If the volume of the sample is greater than 4 mL, then divide it into
|
| 225 |
+
2 columns.
|
| 226 |
+
|
| 227 |
+
1. Twist off the 10 mL Zeba Spin Desalting Column's bottom closure and loosen cap.
|
| 228 |
+
|
| 229 |
+
2. Place column in a 50 mL conical collection tube.
|
| 230 |
+
|
| 231 |
+
3. Centrifuge column at 1000 x g for 2 min to remove storage solution.
|
| 232 |
+
|
| 233 |
+
4. Place a mark on the side of the column where the compacted resin is slanted
|
| 234 |
+
upward. Place column in centrifuge with the mark facing outward in all
|
| 235 |
+
subsequent centrifugation step
|
| 236 |
+
|
| 237 |
+
💡 PRO TIP: Resin will appear compacted after centrifugation.
|
| 238 |
+
|
| 239 |
+
5. Discard the flow through into a waste container.
|
| 240 |
+
|
| 241 |
+
6. Add 5 mL PBS to the column.
|
| 242 |
+
|
| 243 |
+
7. Centrifuge at 1000 x g for 2 min to remove PBS.
|
| 244 |
+
|
| 245 |
+
8. Repeat Steps 6–7 3x, discarding buffer from the collection tube each time.
|
| 246 |
+
|
| 247 |
+
9. Place column in a new 50 mL LoBind collection tube.
|
| 248 |
+
|
| 249 |
+
10. Slowly apply the sample to the center of the compact resin bed.
|
| 250 |
+
|
| 251 |
+
💡 PRO TIP: For sample volumes <1.5 mL top off the sample with 0.2 mL PBS to
|
| 252 |
+
aid protein recovery.
|
| 253 |
+
|
| 254 |
+
11. Allow the resin bed to fully absorb the sample.
|
| 255 |
+
|
| 256 |
+
12. Centrifuge at 1000 x g for 2 min to collect the sample.
|
| 257 |
+
|
| 258 |
+
13. Discard column after use.
|
| 259 |
+
|
| 260 |
+
14. Determine antibody concentration on the NanoDrop Spectrophotometer.
|
| 261 |
+
|
| 262 |
+
15. Dilute antibody to 1 mg/mL with PBS if needed.
|
| 263 |
+
|
| 264 |
+
16. For long term storage, add sterile sodium azide to 1 mM.
|
| 265 |
+
|
| 266 |
+
Option 2: Buffer exchange and concentration with an Amicon column
|
| 267 |
+
|
| 268 |
+
1. Apply 15 mL of PBS to the reservoir of a Amicon Ultra-4 30 kDa MWCO column.
|
| 269 |
+
|
| 270 |
+
2. Incubate for 10 min at RT.
|
| 271 |
+
|
| 272 |
+
3. Centrifuge at 3100 x g for 8 min.
|
| 273 |
+
|
| 274 |
+
4. Discard the flow through into a waste container.
|
| 275 |
+
|
| 276 |
+
5. Add the recombinant antibody sample to the reservoir of the column.
|
| 277 |
+
|
| 278 |
+
6. Fill the remaining space in the column with PBS and pipette several times to
|
| 279 |
+
mix.
|
| 280 |
+
|
| 281 |
+
7. Centrifuge at 3100 x g for 8 min.
|
| 282 |
+
|
| 283 |
+
8. Discard the flow through into a waste container.
|
| 284 |
+
|
| 285 |
+
9. Repeat steps 5-8 at least 4 additional times to ensure a full buffer exchange.
|
| 286 |
+
|
| 287 |
+
10. Discard the flow through into a waste container.
|
| 288 |
+
|
| 289 |
+
11. Fill the remaining space in the column with PBS and pipette several times to
|
| 290 |
+
mix.
|
| 291 |
+
|
| 292 |
+
12. Centrifuge at 3100 x g for 8 min.
|
| 293 |
+
|
| 294 |
+
13. Remove a small aliquot of your sample from the filter reservoir to check the
|
| 295 |
+
concentration on the NanoDrop Spectrophotometer to see if the sample has
|
| 296 |
+
reached the desired concentration.
|
| 297 |
+
|
| 298 |
+
14. If the sample concentration is still too low, repeat the centrifugation until
|
| 299 |
+
the volume of the sample is reduced enough to reach the desired concentration.
|
| 300 |
+
|
| 301 |
+
💡 PRO TIP: Periodically check the concentration on the NanoDrop
|
| 302 |
+
Spectrophotometer to see if the sample has reached the desired concentration.
|
| 303 |
+
|
| 304 |
+
15. Gently transfer the sample from the reservoir to a LoBind tube.
|
| 305 |
+
|
| 306 |
+
💡 PRO TIP: Do not scrape the filter with the pipette tip.
|
| 307 |
+
|
| 308 |
+
16. Determine the concentration of the sample on the NanoDrop Spectrophotometer.
|
| 309 |
+
|
| 310 |
+
17. For long term storage, add sterile sodium azide to 1 mM.
|
BioScientist/agent_system/engines/v1_executor_backup/tool/protocols/addgene/Addgene_ Antibody Validation Using the Indirect ELISA Method.txt
ADDED
|
@@ -0,0 +1,280 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
PROTOCOL: Antibody Validation Using the Indirect ELISA Method
|
| 2 |
+
SOURCE: https://www.addgene.org/protocols/ab-validation-indirect-elisa/
|
| 3 |
+
================================================================================
|
| 4 |
+
|
| 5 |
+
INTRODUCTION
|
| 6 |
+
================================================================================
|
| 7 |
+
|
| 8 |
+
This protocol describes how to run an indirect Enzyme-Linked ImmunoSorbent Assay
|
| 9 |
+
(ELISA) against a purified antigen to validate an antibody. This protocol will
|
| 10 |
+
describe how to create a standard curve using known concentrations of the antigen
|
| 11 |
+
and how to probe with an antibody against the target to show a dose response.
|
| 12 |
+
|
| 13 |
+
|
| 14 |
+
GENERAL CONSIDERATIONS
|
| 15 |
+
================================================================================
|
| 16 |
+
|
| 17 |
+
The ELISA can be completed in a single day or broken up over several days by
|
| 18 |
+
incubating certain steps at 4 °C instead of room temperature or 37 °C. The
|
| 19 |
+
protocol notes when there are different incubation options available.
|
| 20 |
+
|
| 21 |
+
Caution: Use the Stop Solution in a well ventilated area and avoid breathing in
|
| 22 |
+
the vapors.
|
| 23 |
+
|
| 24 |
+
|
| 25 |
+
WORKFLOW TIMELINE
|
| 26 |
+
================================================================================
|
| 27 |
+
|
| 28 |
+
Day 1: Antigen Coating
|
| 29 |
+
|
| 30 |
+
Day 2: Blocking
|
| 31 |
+
|
| 32 |
+
Day 3: Primary antibody incubation
|
| 33 |
+
|
| 34 |
+
Day 4: Secondary antibody incubation and plate read
|
| 35 |
+
|
| 36 |
+
|
| 37 |
+
EQUIPMENT
|
| 38 |
+
================================================================================
|
| 39 |
+
|
| 40 |
+
• Spectrophotometer compatible with 96-well plates
|
| 41 |
+
• 1–10 µL single channel pipette
|
| 42 |
+
• 2–20 µL single channel pipette
|
| 43 |
+
• 20–200 µL single channel pipette
|
| 44 |
+
• 200–1000 µL single channel pipette
|
| 45 |
+
• 20–200 µL multichannel pipette
|
| 46 |
+
• Multichannel pipette reagent reservoirs
|
| 47 |
+
• Pipette controller
|
| 48 |
+
• Microcentrifuge
|
| 49 |
+
• Microplate shaker
|
| 50 |
+
• ELISA plate washer (optional)
|
| 51 |
+
• Scale
|
| 52 |
+
• Microsoft Excel or similar software
|
| 53 |
+
|
| 54 |
+
|
| 55 |
+
REAGENTS
|
| 56 |
+
================================================================================
|
| 57 |
+
|
| 58 |
+
• Purified antigen
|
| 59 |
+
• Purified recombinant antibody
|
| 60 |
+
• Isotype control antibody
|
| 61 |
+
• HRP-conjugated isotype-specific secondary antibody
|
| 62 |
+
• ELISA 96-well microplate, Corning 9018
|
| 63 |
+
• Bovine serum albumin (BSA), VWR 10273-264
|
| 64 |
+
• 50 mL conical tubes, VWR 89039-656
|
| 65 |
+
• 96-well polyester (clear) microplate seal, Thermo Scientific 5701
|
| 66 |
+
• Microcentrifuge tubes, Neptune 3745.X
|
| 67 |
+
• Pipette tips, 1000 µL, VWR 76322-154
|
| 68 |
+
• Pipette tips, 10 µL, VWR 76322-132
|
| 69 |
+
• Pipette tips, 200 µL, VWR 76322-150
|
| 70 |
+
• Pipette tips, 20 µL, VWR 76322-134
|
| 71 |
+
• Pipettes, 10 mL, VWR 89130-898
|
| 72 |
+
• 1 L polystyrene bottle, Corning 430518
|
| 73 |
+
• PBS, 1X pH 7.4, VWR 45000-446
|
| 74 |
+
• TMB (3,3',5,5'-tetramethyl-[1,1'-biphenyl]-4,4'-diamine) substrate kit, Pierce
|
| 75 |
+
34021
|
| 76 |
+
• Tween-20, VWR 0777-1L
|
| 77 |
+
• Foil
|
| 78 |
+
|
| 79 |
+
|
| 80 |
+
BEFORE STARTING
|
| 81 |
+
================================================================================
|
| 82 |
+
|
| 83 |
+
Warm reagents to room temperature.
|
| 84 |
+
|
| 85 |
+
|
| 86 |
+
PROCEDURE
|
| 87 |
+
================================================================================
|
| 88 |
+
|
| 89 |
+
Section 1: Prepare the Antigen Standard and coat the plate
|
| 90 |
+
|
| 91 |
+
1. Dilute purified antigen to 20 ng/µL in a microfuge tube and vortex.
|
| 92 |
+
|
| 93 |
+
💡 PRO TIP: You may need to try a few different concentrations of antigen to
|
| 94 |
+
determine the ideal concentration.
|
| 95 |
+
|
| 96 |
+
2. Prepare serial dilutions of the purified antigen as follows:
|
| 97 |
+
• 2 ng/µL: Add 100 µL of 20 ng/µL stock into 900 µL PBS in a microfuge tube
|
| 98 |
+
and vortex.
|
| 99 |
+
• 1 ng/µL: Add 450 µL of 2 ng/µL stock into 450 uL PBS in a microfuge tube and
|
| 100 |
+
vortex.
|
| 101 |
+
• 0.5 ng/µL: Add 450 µL of 1 ng/µL stock into 450 µL PBS in a microfuge tube
|
| 102 |
+
and vortex.
|
| 103 |
+
• 0.25 ng/µL: Add 450 µL of 0.5 ng/µL stock into 450 µL PBS in a microfuge tube
|
| 104 |
+
and vortex.
|
| 105 |
+
• 0.125 ng/µL: Add 450 µL of 0.25 ng/µL stock into 450 µL PBS in a microfuge
|
| 106 |
+
tube and vortex.
|
| 107 |
+
• 0 ng/µL: 450 µL PBS only.
|
| 108 |
+
|
| 109 |
+
3. Pipette 50 µL into the first three wells of each row, using a different
|
| 110 |
+
standard solution for each row of a 96-well ELISA microplate.
|
| 111 |
+
|
| 112 |
+
4. Cover the plate with a 96-well plate seal and incubate at 37 °C for 30 min,
|
| 113 |
+
or overnight at 4 °C.
|
| 114 |
+
|
| 115 |
+
Section 2: Block the plate
|
| 116 |
+
|
| 117 |
+
1. Prepare the wash buffer (0.05% Tween-20 in PBS) as follows:
|
| 118 |
+
• Pipette 0.5 mL of Tween-20 to into 999.5 mL 1X PBS
|
| 119 |
+
• Cap the bottle and invert several times to mix.
|
| 120 |
+
|
| 121 |
+
2. Carefully remove the plate seal from the 96-well plate and set aside.
|
| 122 |
+
|
| 123 |
+
3. Aspirate the wells and use a multichannel pipette to add 200 µL wash buffer to
|
| 124 |
+
each well. Washing can be done by hand but if available, use an automated ELISA
|
| 125 |
+
plate washer.
|
| 126 |
+
|
| 127 |
+
4. Seal the plate.
|
| 128 |
+
|
| 129 |
+
5. Place the plate on a microplate shaker set at 400 rpm and shake for 1 min.
|
| 130 |
+
|
| 131 |
+
6. Repeat steps 3–5 twice for a total of three washes.
|
| 132 |
+
|
| 133 |
+
7. After the final wash, aspirate the wash buffer from the wells.
|
| 134 |
+
|
| 135 |
+
8. Prepare the blocking buffer (1% BSA in PBS) as follows:
|
| 136 |
+
• Add 250 mg of BSA to 25 mL of PBS.
|
| 137 |
+
• Cap the tube and invert several times to mix.
|
| 138 |
+
|
| 139 |
+
9. Using a multichannel pipette, add 200 µL of blocking buffer to each well.
|
| 140 |
+
|
| 141 |
+
10. Cover the plate with a plate seal and incubate on a microplate shaker set to
|
| 142 |
+
400 rpm for 2 h at room temperature or overnight at 4 °C.
|
| 143 |
+
|
| 144 |
+
Section 3: Primary antibody incubation
|
| 145 |
+
|
| 146 |
+
1. Carefully remove the plate seal from the 96-well plate and set aside.
|
| 147 |
+
|
| 148 |
+
2. Aspirate the wells and use a multichannel pipette to add 200 µL wash buffer to
|
| 149 |
+
each well. Washing can be done by hand but if available, use an automated ELISA
|
| 150 |
+
plate washer.
|
| 151 |
+
|
| 152 |
+
3. Seal the plate.
|
| 153 |
+
|
| 154 |
+
4. Place the plate on a microplate shaker set at 400 rpm and shake for 1 min.
|
| 155 |
+
|
| 156 |
+
5. Repeat steps 2–4 twice for a total of three washes.
|
| 157 |
+
|
| 158 |
+
6. After the final wash, aspirate the wash buffer from the wells.
|
| 159 |
+
|
| 160 |
+
7. Prepare antibody dilution buffer (0.1% BSA in PBS) as follows:
|
| 161 |
+
• Dilute 50 mg BSA into 50 mL PBS.
|
| 162 |
+
• Cap the tube and invert several times to mix.
|
| 163 |
+
|
| 164 |
+
8. Dilute the primary antibody and an isotype control antibody to the desired
|
| 165 |
+
concentrations in the antibody dilution buffer.
|
| 166 |
+
|
| 167 |
+
💡 PRO TIP: The ideal antibody concentration will vary and needs to be
|
| 168 |
+
empirically determined. We suggest starting with three concentrations between
|
| 169 |
+
1–10 µg/mL.
|
| 170 |
+
|
| 171 |
+
9. Cap and invert the tubes several times to mix.
|
| 172 |
+
|
| 173 |
+
10. Using a multichannel pipette, add 100 µL of primary antibody solution to the
|
| 174 |
+
appropriate wells.
|
| 175 |
+
|
| 176 |
+
11. Cover the plate with a plate seal and incubate on a microplate shaker set to
|
| 177 |
+
400 rpm for 2 h at room temperature or overnight at 4 °C.
|
| 178 |
+
|
| 179 |
+
Section 4: Secondary antibody incubation
|
| 180 |
+
|
| 181 |
+
1. Carefully remove the plate seal from the 96-well plate and set aside.
|
| 182 |
+
|
| 183 |
+
2. Aspirate the wells and use a multichannel pipette to add 200 µL wash buffer to
|
| 184 |
+
each well. Washing can be done by hand but if available, use an automated ELISA
|
| 185 |
+
plate washer.
|
| 186 |
+
|
| 187 |
+
3. Seal the plate.
|
| 188 |
+
|
| 189 |
+
4. Place the plate on a microplate shaker set at 400 rpm and shake for 1 min.
|
| 190 |
+
|
| 191 |
+
5. Repeat steps 2–4 twice for a total of three washes.
|
| 192 |
+
|
| 193 |
+
6. After the final wash, aspirate the wash buffer from the wells.
|
| 194 |
+
|
| 195 |
+
7. Dilute the HRP-conjugated isotype-specific secondary antibody to the desired
|
| 196 |
+
concentrations in the antibody dilution buffer.
|
| 197 |
+
|
| 198 |
+
8. Cap and invert the tube several times to mix.
|
| 199 |
+
|
| 200 |
+
9. Using a multichannel pipette, add 100 µL of secondary antibody to each well.
|
| 201 |
+
|
| 202 |
+
10. Cover the plate with a plate seal and incubate on a microplate shaker set to
|
| 203 |
+
400 rpm for 2 h at room temperature or overnight at 4 °C.
|
| 204 |
+
|
| 205 |
+
Section 5: TMB reaction
|
| 206 |
+
|
| 207 |
+
1. Carefully remove the plate seal from the 96-well plate and set aside.
|
| 208 |
+
|
| 209 |
+
2. Aspirate the wells and use a multichannel pipette to add 200 µL wash buffer to
|
| 210 |
+
each well. Washing can be done by hand but if available, use an automated ELISA
|
| 211 |
+
plate washer.
|
| 212 |
+
|
| 213 |
+
3. Seal the plate.
|
| 214 |
+
|
| 215 |
+
4. Place the plate on a microplate shaker set at 400 rpm and shake for 1 min.
|
| 216 |
+
|
| 217 |
+
5. Repeat steps 2–4 twice for a total of three washes.
|
| 218 |
+
|
| 219 |
+
6. After the final wash, aspirate the wash buffer from the wells.
|
| 220 |
+
|
| 221 |
+
7. Immediately before use, mix 5 mL TMB Solution and 5 mL Peroxide Solution from
|
| 222 |
+
the TMB substrate kit.
|
| 223 |
+
|
| 224 |
+
8. Cap the tube and invert several times to mix.
|
| 225 |
+
|
| 226 |
+
9. Using a multichannel pipette, add 100 µL of the TMB/Peroxide mix to each well.
|
| 227 |
+
|
| 228 |
+
10. Cover the plate with a plate seal and wrap in foil.
|
| 229 |
+
|
| 230 |
+
11. Incubate plate at room temperature on a microplate shaker set at 400 rpm for
|
| 231 |
+
15–30 min.
|
| 232 |
+
|
| 233 |
+
💡 PRO TIP: Check the plate periodically to determine when the desired color
|
| 234 |
+
change has occurred. The color will change from yellow to blue and generally
|
| 235 |
+
takes between 15 to 30 min. High concentrations of HRP yield a greenish
|
| 236 |
+
solution. Stop the reaction before any wells display a green product. A
|
| 237 |
+
precipitated product indicates the presence of too much HRP and the need to
|
| 238 |
+
optimize experimental conditions.
|
| 239 |
+
|
| 240 |
+
12. When the desired color change has occurred, gently remove the plate seal.
|
| 241 |
+
|
| 242 |
+
13. Using a multichannel pipette, add 100 µL of TMB Stop Solution directly to the
|
| 243 |
+
wells to stop the reaction.
|
| 244 |
+
|
| 245 |
+
14. Measure the absorbance of each well at 450 nm on the spectrophotometer. Use the
|
| 246 |
+
spectrophotometer to generate a standard curve. If you don't see any color
|
| 247 |
+
change or dose response, your antibody concentration may have been too low. In
|
| 248 |
+
this case, use higher antibody concentrations. If the reaction is saturated and
|
| 249 |
+
you don't see any dose response, your antibody concentration may have been too
|
| 250 |
+
high. In this case, use lower antibody concentrations. The ideal range of the
|
| 251 |
+
standard curve will vary between targets and needs to be empirically determined.
|
| 252 |
+
The dilution series created in section 1, step 2 is a suggested starting point.
|
| 253 |
+
If your unknown sample's absorbance falls above the range of the standard curve
|
| 254 |
+
you will need to either include higher concentrations in the standard curve or
|
| 255 |
+
dilute the unknown sample (don't forget to factor in that dilution when
|
| 256 |
+
calculating the original sample concentration!).
|
| 257 |
+
|
| 258 |
+
|
| 259 |
+
TIPS AND TROUBLESHOOTING
|
| 260 |
+
================================================================================
|
| 261 |
+
|
| 262 |
+
• The optimal concentration of primary antibody to use will vary and needs to be
|
| 263 |
+
empirically determined. If possible, run an initial test with serially diluted
|
| 264 |
+
primary antibody and determine the best concentration for your assay.
|
| 265 |
+
|
| 266 |
+
• Washing steps can be done by hand but if available, use an automated ELISA plate
|
| 267 |
+
washer.
|
| 268 |
+
|
| 269 |
+
|
| 270 |
+
SAMPLE DATA
|
| 271 |
+
================================================================================
|
| 272 |
+
|
| 273 |
+
The plate was coated with serial dilutions of human recombinant purified Desmin
|
| 274 |
+
(blue) or a negative control protein, Apolipoprotein L3 (red) overnight,
|
| 275 |
+
blocked, and incubated overnight with Anti-Desmin [D7]. Plates were incubated with
|
| 276 |
+
HRP-linked anti-Human IgG secondary antibody for 2 hours, reacted with TMB
|
| 277 |
+
substrate and the reaction stopped after 15 minutes. Absorbance was read at 450 nm
|
| 278 |
+
and plotted against the micrograms of antigen loaded.
|
| 279 |
+
|
| 280 |
+
Last reviewed on: October 8, 2024
|
BioScientist/agent_system/engines/v1_executor_backup/tool/protocols/addgene/Addgene_ CRISPR Library Amplification.txt
ADDED
|
@@ -0,0 +1,330 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
PROTOCOL: CRISPR Library Amplification
|
| 2 |
+
SOURCE: https://www.addgene.org/protocols/pooled-library-amplification/
|
| 3 |
+
================================================================================
|
| 4 |
+
|
| 5 |
+
INTRODUCTION
|
| 6 |
+
================================================================================
|
| 7 |
+
|
| 8 |
+
Please refer to our pooled library material pages for amplification protocols that
|
| 9 |
+
have been developed by the depositor for a specific pooled library available at
|
| 10 |
+
Addgene. We recommend following the depositor's specific protocol if one is
|
| 11 |
+
available. If a pooled library does not yet have an amplification protocol, the
|
| 12 |
+
following protocol can be used as a starting point for CRISPR libraries.
|
| 13 |
+
|
| 14 |
+
This protocol allows the amplification of a pooled-plasmid library in
|
| 15 |
+
Escherichia coli cells. Pooled libraries contain tens to millions of different
|
| 16 |
+
plasmids in a single sample. They are often used for screening, barcoding, or
|
| 17 |
+
other high throughput multiplexed experiments. These pooled plasmids differ by
|
| 18 |
+
only a short region of DNA: guide RNAs targeting different genes in an organism's
|
| 19 |
+
genome, for example.
|
| 20 |
+
|
| 21 |
+
Amplification is usually necessary to produce sufficient quantities of library for
|
| 22 |
+
experimental applications. Repeated amplifications should be avoided as best as
|
| 23 |
+
possible due to the inherent possibility of altering the composition of the
|
| 24 |
+
library. Bottlenecks, fitness differences, and plasmid recombination can all
|
| 25 |
+
impact the representation of individual plasmids in the pooled library during
|
| 26 |
+
amplification. This protocol is designed to be as general as possible but note
|
| 27 |
+
that individual libraries may require modifications dictated by the originating
|
| 28 |
+
laboratory for optimal results. If you obtained the pooled library from Addgene,
|
| 29 |
+
these protocols can be found on the Pooled Library page for the specific library.
|
| 30 |
+
|
| 31 |
+
This protocol assumes familiarity with standard bacterial transformation and
|
| 32 |
+
basic knowledge of the library being amplified. Please see our protocol on
|
| 33 |
+
Bacterial Transformation. The generalized pooled library amplification protocol
|
| 34 |
+
is expected to obtain satisfactory results for libraries up to 200,000 individual
|
| 35 |
+
plasmids and can be scaled according to the actual number.
|
| 36 |
+
|
| 37 |
+
|
| 38 |
+
REQUIRED QUALITY CONTROL (QC)
|
| 39 |
+
================================================================================
|
| 40 |
+
|
| 41 |
+
Pooled libraries can be challenging and expensive to ensure adequate quality, but
|
| 42 |
+
this upfront cost will save headaches and expense later.
|
| 43 |
+
|
| 44 |
+
At a minimum we recommend the use of a diagnostic digest and high-throughput next
|
| 45 |
+
generation sequencing (NGS). Select a restriction enzyme for digest that will
|
| 46 |
+
cut the shared plasmid backbone a single time and visualize that digestion on an
|
| 47 |
+
agarose gel (see restriction digest protocol here). Lentiviral plasmids can
|
| 48 |
+
recombine between their LTRs resulting in a smaller plasmid containing only the
|
| 49 |
+
elements required for bacterial propagation (origin of replication and antibiotic
|
| 50 |
+
selection). This recombination, at a low rate, is not typically a problem as
|
| 51 |
+
these sequences are not efficiently packaged into lentiviral particles. See below
|
| 52 |
+
for options if the recombinant band makes up a significant proportion of the DNA
|
| 53 |
+
pool.
|
| 54 |
+
|
| 55 |
+
Last Update: August 17, 2023
|
| 56 |
+
|
| 57 |
+
|
| 58 |
+
WORKFLOW TIMELINE
|
| 59 |
+
================================================================================
|
| 60 |
+
|
| 61 |
+
Day 1: Transform, recover, set up overnight growth (Estimated time 2-3 hours)
|
| 62 |
+
|
| 63 |
+
Transformation should be performed at the end of the day to ensure that
|
| 64 |
+
growth times are limited.
|
| 65 |
+
|
| 66 |
+
Day 2: Harvest cells and purify DNA (Estimated time 3-4 hours)
|
| 67 |
+
|
| 68 |
+
Cells should be harvested first thing in the morning to ensure that outgrowth
|
| 69 |
+
and competition are limited.
|
| 70 |
+
|
| 71 |
+
|
| 72 |
+
EQUIPMENT
|
| 73 |
+
================================================================================
|
| 74 |
+
|
| 75 |
+
• Table top centrifuge
|
| 76 |
+
• BioRad Electroporator (MicroPulser TM, Bio-Rad 1652100)
|
| 77 |
+
|
| 78 |
+
|
| 79 |
+
REAGENTS
|
| 80 |
+
================================================================================
|
| 81 |
+
|
| 82 |
+
• 200 µL electrocompetent cells (Default: 4 tubes of Endura Duos, Lucigen,
|
| 83 |
+
60242-1)
|
| 84 |
+
|
| 85 |
+
Alternatives include Stbl4 cells or other ultra-high efficiency
|
| 86 |
+
electrocompetent cells that are suitable for unstable or recombination-prone
|
| 87 |
+
DNA.
|
| 88 |
+
|
| 89 |
+
The use of electrocompetent cells is essential to ensure high efficiency
|
| 90 |
+
uptake of plasmid library DNA.
|
| 91 |
+
|
| 92 |
+
This quantity of cells is sufficient for libraries up to 200,000 individual
|
| 93 |
+
plasmids. For larger libraries scale the number of cells and DNA accordingly.
|
| 94 |
+
|
| 95 |
+
💡 PRO TIP: Use of extreme high efficiency (1×10¹⁰ cfu/µg) commercially
|
| 96 |
+
prepared electrocompetent cells is strongly recommended.
|
| 97 |
+
|
| 98 |
+
• 800 ng pooled library DNA (100 ng plasmid DNA per 25 µL electrocompetent cells)
|
| 99 |
+
|
| 100 |
+
Less library DNA can be used but this dramatically increases the chances of
|
| 101 |
+
individual plasmids being lost from the pool and/or increasing the skewness of
|
| 102 |
+
the pool.
|
| 103 |
+
|
| 104 |
+
• 8 electroporation cuvettes (BioRad, Micropulser, 0.1 cm)
|
| 105 |
+
• 20 mL SOC recovery media (Lucigen, 80026-1)
|
| 106 |
+
• 8X LB Agar + Antibiotic 245 mm bioassay plates (Molecular Devices, X602)
|
| 107 |
+
|
| 108 |
+
💡 PRO TIP: Pour these plates at least one day in advance to allow adequate
|
| 109 |
+
time to fully gel and to dry slightly. We routinely use 350 mL of LB Agar per
|
| 110 |
+
bioassay plate.
|
| 111 |
+
|
| 112 |
+
• 14 mL Vented Falcon Tubes (BD Biosciences, 352059)
|
| 113 |
+
• 3X LB Agar + Antibiotic 65 mm Petri dish (VWR, 11019-552)
|
| 114 |
+
• 4 MaxiPreps (Qiagen HiSpeed Max, Catalog #12663)
|
| 115 |
+
• Tips (1000 µL, 200 µL, 10 µL)
|
| 116 |
+
• Bacti Cell Spreaders (VWR, 60828-680)
|
| 117 |
+
• 5 mL and 10 mL Serological pipettes
|
| 118 |
+
• Ice slurry (Ice bucket with ice and water to create slurry)
|
| 119 |
+
• 100 mL LB
|
| 120 |
+
|
| 121 |
+
At Addgene we use premixed LB (VWR 101414-072) for convenience but any brand
|
| 122 |
+
or house-made LB that supports normal growth is expected to work.
|
| 123 |
+
|
| 124 |
+
• 50 mL Falcon Conical tubes (Fisher, 14-432-22)
|
| 125 |
+
|
| 126 |
+
|
| 127 |
+
REAGENT PREPARATION
|
| 128 |
+
================================================================================
|
| 129 |
+
|
| 130 |
+
• Prepare, sterilize, and pour all LB Agar + Antibiotic plates.
|
| 131 |
+
|
| 132 |
+
• Prewarm 12 mL recovery media at 37 °C (for at least 15 minutes).
|
| 133 |
+
|
| 134 |
+
• Prewarm 3X LB Agar + Antibiotic plates at 37 °C.
|
| 135 |
+
|
| 136 |
+
• Prewarm 8X LB Agar + Antibiotic Bioassay plates.
|
| 137 |
+
|
| 138 |
+
• Prechill Micropulser cuvettes on ice.
|
| 139 |
+
|
| 140 |
+
• Thaw 4 tubes of electrocompetent cells on ice for 15-20 minutes or until
|
| 141 |
+
completely thawed.
|
| 142 |
+
|
| 143 |
+
• Chill a box of 200 µL micropipette tips in a -20 °C freezer.
|
| 144 |
+
|
| 145 |
+
• Aliquot 3 mL SOC into each of four 14 mL Vented Falcon Tubes and have 1 mL SOC
|
| 146 |
+
per electroporation readily available for post-electroporation recovery of
|
| 147 |
+
cells.
|
| 148 |
+
|
| 149 |
+
• Ensure access to autoclaved, sterile reagents for all steps.
|
| 150 |
+
|
| 151 |
+
|
| 152 |
+
PROCEDURE
|
| 153 |
+
================================================================================
|
| 154 |
+
|
| 155 |
+
Day 1
|
| 156 |
+
|
| 157 |
+
1. Add 200 ng DNA to each 50 µL aliquot of thawed Endura Duos on ice. Flick
|
| 158 |
+
gently to mix.
|
| 159 |
+
|
| 160 |
+
2. Electroporate cells (one at a time for a total of eight electroporations):
|
| 161 |
+
|
| 162 |
+
Electroporator Conditions: Bio-Rad Micropulser Ec1 0.1 cm cuvette, 1.8 kV, 1
|
| 163 |
+
pulse.
|
| 164 |
+
|
| 165 |
+
a. Aliquot 25 µL DNA-Endura into pre-chilled cuvette.
|
| 166 |
+
b. Pulse.
|
| 167 |
+
|
| 168 |
+
Caution: Electroporation involves the use of high voltages, please use
|
| 169 |
+
caution when activating pulse and follow all specifications described in the
|
| 170 |
+
equipment manual.
|
| 171 |
+
|
| 172 |
+
c. Immediately add 1 mL SOC to cuvette.
|
| 173 |
+
d. Remove all liquid from cuvette and add to 14 mL vented Falcon Tube
|
| 174 |
+
containing 3 mL SOC.
|
| 175 |
+
e. Repeat for each of the 25 µl aliquots of cell/DNA mixture used (8 in the
|
| 176 |
+
described protocol) using a new vented falcon tube for every two
|
| 177 |
+
transformations. Each of the four 14 mL Vented Falcon Tubes should contain
|
| 178 |
+
a total of 5 mL (3 mL SOC + 2 mL transformed Endura from two separate
|
| 179 |
+
transformations).
|
| 180 |
+
|
| 181 |
+
💡 PRO TIP: Do not pipette repeatedly or mix when removing SOC containing
|
| 182 |
+
transformed DNA-Endura from cuvette.
|
| 183 |
+
|
| 184 |
+
3. Shake four 14 mL Vented Falcon Tubes at 30-37 ℃, 225 rpm for 1 hour.
|
| 185 |
+
|
| 186 |
+
4. After the 1 hour shaking period, pool and gently mix the four tubes.
|
| 187 |
+
|
| 188 |
+
5. Perform sequential 1:100 dilutions of the cells (add 10 µL of the pool to 990
|
| 189 |
+
µL LB then perform a second and then third 1:100 dilution). Plate 100 µL of
|
| 190 |
+
each dilution onto a prewarmed Petri dish.
|
| 191 |
+
|
| 192 |
+
6. Incubate plates at 30 ℃ overnight.
|
| 193 |
+
|
| 194 |
+
7. Plate 2.5 mL of the transformed cells on each of the eight bioassay plates (two
|
| 195 |
+
plates per tube). Distribute evenly with a sterile spreader until all liquid
|
| 196 |
+
has been absorbed by the agar. This usually takes 1-2 minutes.
|
| 197 |
+
|
| 198 |
+
Critical: Be careful not to rip or shred the agar. Do so by gentle spreading.
|
| 199 |
+
Some spreaders have a sharp edge that can scrape plates more abrasively at a
|
| 200 |
+
certain angle.
|
| 201 |
+
|
| 202 |
+
8. Incubate plates upside down at 30 ℃ overnight.
|
| 203 |
+
|
| 204 |
+
Critical: Ensure at this stage that no unabsorbed media drips onto the lid.
|
| 205 |
+
Let plates remain agar side up until dried before overnight incubation if
|
| 206 |
+
needed.
|
| 207 |
+
|
| 208 |
+
9. Place 100 mL sterile LB at 4 ℃.
|
| 209 |
+
|
| 210 |
+
Day 2 (morning)
|
| 211 |
+
|
| 212 |
+
1. Before beginning, prechill at least four conical tubes on ice and ensure
|
| 213 |
+
access to sterile scraper and cold LB.
|
| 214 |
+
|
| 215 |
+
💡 PRO TIP: Prepare one to two more conical tubes on ice in case you need to
|
| 216 |
+
spread out the harvested cells further than four Maxipreps worth.
|
| 217 |
+
|
| 218 |
+
2. Count colonies on the most dilute Petri dish.
|
| 219 |
+
|
| 220 |
+
Total colony yield = count × 100 × 100 × 100 ÷ 0.1
|
| 221 |
+
|
| 222 |
+
This number should be at least 1000X greater than number of perturbations in
|
| 223 |
+
library.
|
| 224 |
+
|
| 225 |
+
Example: At least 10 colonies on the most diluted plate for 1000x coverage of
|
| 226 |
+
a library of 100,000 plasmids.
|
| 227 |
+
|
| 228 |
+
Colonies may appear small and require extra incubation time in order to be
|
| 229 |
+
enumerated accurately.
|
| 230 |
+
|
| 231 |
+
Frequently the number of colonies can be too great to count. Ideally,
|
| 232 |
+
dilutions would have been sufficient to enumerate single colonies but as long
|
| 233 |
+
as one can ensure more than the required colonies are present. If colonies are
|
| 234 |
+
not present on the most dilute plate, count the second plate (ie. the 1:10,000
|
| 235 |
+
dilution).
|
| 236 |
+
|
| 237 |
+
3. After 12-18 hours of growth, use spreader and cold LB to scrape bioassay
|
| 238 |
+
plates and remove bacteria.
|
| 239 |
+
|
| 240 |
+
• Use one scraper for all plates.
|
| 241 |
+
• Use two 10 mL pipettes (one for dispensing cold LB and one for removing LB
|
| 242 |
+
containing bacteria from plate).
|
| 243 |
+
|
| 244 |
+
💡 PRO TIP: Scraped bacteria in LB can clog the pipette either mix gently up
|
| 245 |
+
and down avoiding introducing bubbles or pour off plates into conical tubes as
|
| 246 |
+
needed.
|
| 247 |
+
|
| 248 |
+
4. Add 10 mL cold LB to each plate for each scrape and use spreader to scrape
|
| 249 |
+
plates.
|
| 250 |
+
|
| 251 |
+
💡 PRO TIP: Pushing motion is better than pulling motion. Take care not to
|
| 252 |
+
split or gouge agar during the scraping process.
|
| 253 |
+
|
| 254 |
+
5. Add each scrape into a 50 mL conical tube on ice pooling the scrapings of two
|
| 255 |
+
plates into each tube. Keep each tube on ice while scraping.
|
| 256 |
+
|
| 257 |
+
6. Repeat addition of 10 mL cold LB and scrape for each plate until agar is clear
|
| 258 |
+
(all bacteria have been removed). This should produce 25 mL cold LB-bacteria
|
| 259 |
+
per plate.
|
| 260 |
+
|
| 261 |
+
7. Centrifuge tubes (4000 G, 4 ℃, 15 minutes) to pellet bacteria.
|
| 262 |
+
|
| 263 |
+
8. Decant LB and weigh pellet. The total weight of each pellet should be ~1-2 g.
|
| 264 |
+
|
| 265 |
+
💡 PRO TIP: Make sure to weigh the empty tube beforehand! If you've already
|
| 266 |
+
gone too far, weigh an identical empty tube. It will be close enough for the
|
| 267 |
+
purpose of a Maxiprep.
|
| 268 |
+
|
| 269 |
+
9. Purify plasmid DNA using the Qiagen HiSpeed Maxi Kit (one conical is its own
|
| 270 |
+
Maxiprep).
|
| 271 |
+
|
| 272 |
+
Critical: Do not freeze pellets for later purification. Immediately purify them!
|
| 273 |
+
Commercial Maxipreps rely on incremental, ordered cell lysis. E. coli cells
|
| 274 |
+
are subject to lysis by freeze-thaw if not suspended in cryoprotectant like
|
| 275 |
+
Glycerol or DMSO solutions.
|
| 276 |
+
|
| 277 |
+
10. Quantify the individual Maxipreps by Nanodrop, Picogreen, or Qubit.
|
| 278 |
+
|
| 279 |
+
Each different DNA measurement type can report slightly different
|
| 280 |
+
concentrations of DNA. In our hands fluorescent dye methods tend to report
|
| 281 |
+
lower values than Nanodrop, although most protocols have been designed with
|
| 282 |
+
Nanodrop as the quantification method.
|
| 283 |
+
|
| 284 |
+
11. If all Maxipreps appear to contain sufficient DNA for use, pool samples, and
|
| 285 |
+
continue with analysis.
|
| 286 |
+
|
| 287 |
+
"Sufficient" DNA will vary upon intended use. Typically yields range from
|
| 288 |
+
several hundred micrograms to a milligram of total plasmid DNA.
|
| 289 |
+
|
| 290 |
+
|
| 291 |
+
TIPS AND TROUBLESHOOTING
|
| 292 |
+
================================================================================
|
| 293 |
+
|
| 294 |
+
What do I do if my transformation efficiency is not high enough?
|
| 295 |
+
|
| 296 |
+
Repeat the experiment with more cells, more DNA, gentler practices, and colder
|
| 297 |
+
reagents (not including the recovery media!). Do not proceed with Maxipreps or
|
| 298 |
+
NGS until adequate transformation efficiency is obtained. Ensure that
|
| 299 |
+
electrocompetent cells are being used. Chemically competent cells will not
|
| 300 |
+
provide adequate transformation efficiency! Ensure that no arcing is taking place
|
| 301 |
+
during electroporation. Arcing would manifest as a loud pop often accompanied by
|
| 302 |
+
some light in the cuvette during the electroporation step.
|
| 303 |
+
|
| 304 |
+
I got a heavy recombined band by digest.
|
| 305 |
+
|
| 306 |
+
Recombination is thought to be in part related to selective pressure. These
|
| 307 |
+
recombined plasmids are much smaller and are a smaller nutritional burden on the
|
| 308 |
+
bacteria. Bacteria that contain a recombinant plasmid likely grow faster in the
|
| 309 |
+
closed system of a crowded plate or culture. Try restricting growth to the bare
|
| 310 |
+
minimum by growing at 30 ℃, limiting growth time further, or potentially
|
| 311 |
+
spreading less bacteria on a given plate (example: by increasing the total number
|
| 312 |
+
of bioassay plates used). Scaling up the experiment using a Gigaprep can be used
|
| 313 |
+
to obtain sufficient intact pooled library even in the face of a recombined
|
| 314 |
+
fraction but care must be taken to perform adequate NGS based QC to ensure no
|
| 315 |
+
change in representation compared to the pre-amplified stock. A last option is
|
| 316 |
+
to perform a gel extraction of either the original sample or the amplified
|
| 317 |
+
sample, followed by reamplification of the DNA, but please note that NGS should
|
| 318 |
+
be performed to ensure representation is maintained.
|
| 319 |
+
|
| 320 |
+
Maxipreps - Less is more:
|
| 321 |
+
|
| 322 |
+
Do not overload the Maxipreps as yield can dramatically plateau and sometimes fall
|
| 323 |
+
off entirely if the column or reagents are significantly overloaded. If you find
|
| 324 |
+
that your pellet outstrips the capacity listed in the Maxiprep protocol, scale
|
| 325 |
+
the reagent volume and column number as needed. The use of Mega or Gigapreps is
|
| 326 |
+
acceptable when scaling up or reducing the number of tandem purifications. Consult
|
| 327 |
+
the manufacturers handbooks for appropriate volumes and numbers of tandem
|
| 328 |
+
purifications.
|
| 329 |
+
|
| 330 |
+
Visit our Help Center to get details on how to process your Addgene pooled library
|