czty commited on
Commit
4140be3
·
verified ·
1 Parent(s): a9e46a4

Add files using upload-large-folder tool

Browse files
This view is limited to 50 files because it contains too many changes.   See raw diff
Files changed (50) hide show
  1. BioScientist/LICENSE +21 -0
  2. BioScientist/agent_system/engines/__pycache__/__init__.cpython-310.pyc +0 -0
  3. BioScientist/agent_system/engines/__pycache__/__init__.cpython-311.pyc +0 -0
  4. BioScientist/agent_system/engines/__pycache__/e1_validator.cpython-310.pyc +0 -0
  5. BioScientist/agent_system/engines/__pycache__/e1_validator.cpython-311.pyc +0 -0
  6. BioScientist/agent_system/engines/__pycache__/t1_consultant.cpython-310.pyc +0 -0
  7. BioScientist/agent_system/engines/__pycache__/t1_consultant.cpython-311.pyc +0 -0
  8. BioScientist/agent_system/engines/__pycache__/t1_consultant.cpython-313.pyc +0 -0
  9. BioScientist/agent_system/engines/__pycache__/v1_executor.cpython-310.pyc +0 -0
  10. BioScientist/agent_system/engines/__pycache__/v1_executor.cpython-311.pyc +0 -0
  11. BioScientist/agent_system/engines/v1_executor_backup/__pycache__/__init__.cpython-310.pyc +0 -0
  12. BioScientist/agent_system/engines/v1_executor_backup/__pycache__/__init__.cpython-311.pyc +0 -0
  13. BioScientist/agent_system/engines/v1_executor_backup/__pycache__/__init__.cpython-313.pyc +0 -0
  14. BioScientist/agent_system/engines/v1_executor_backup/__pycache__/config.cpython-311.pyc +0 -0
  15. BioScientist/agent_system/engines/v1_executor_backup/__pycache__/env_desc.cpython-311.pyc +0 -0
  16. BioScientist/agent_system/engines/v1_executor_backup/__pycache__/llm.cpython-311.pyc +0 -0
  17. BioScientist/agent_system/engines/v1_executor_backup/__pycache__/utils.cpython-311.pyc +0 -0
  18. BioScientist/agent_system/engines/v1_executor_backup/__pycache__/version.cpython-310.pyc +0 -0
  19. BioScientist/agent_system/engines/v1_executor_backup/__pycache__/version.cpython-311.pyc +0 -0
  20. BioScientist/agent_system/engines/v1_executor_backup/__pycache__/version.cpython-313.pyc +0 -0
  21. BioScientist/agent_system/engines/v1_executor_backup/biorxiv_scripts/extract_biorxiv_tasks.py +404 -0
  22. BioScientist/agent_system/engines/v1_executor_backup/biorxiv_scripts/generate_function.py +72 -0
  23. BioScientist/agent_system/engines/v1_executor_backup/biorxiv_scripts/process_all_subjects.py +315 -0
  24. BioScientist/agent_system/engines/v1_executor_backup/know_how/__init__.py +9 -0
  25. BioScientist/agent_system/engines/v1_executor_backup/know_how/__pycache__/__init__.cpython-311.pyc +0 -0
  26. BioScientist/agent_system/engines/v1_executor_backup/know_how/__pycache__/loader.cpython-311.pyc +0 -0
  27. BioScientist/agent_system/engines/v1_executor_backup/know_how/loader.py +348 -0
  28. BioScientist/agent_system/engines/v1_executor_backup/know_how/resource/CRISPick_download_links.txt +238 -0
  29. BioScientist/agent_system/engines/v1_executor_backup/know_how/resource/addgene_grna_sequences.csv +322 -0
  30. BioScientist/agent_system/engines/v1_executor_backup/know_how/sgRNA_design_guide.md +419 -0
  31. BioScientist/agent_system/engines/v1_executor_backup/know_how/single_cell_annotation.md +223 -0
  32. BioScientist/agent_system/engines/v1_executor_backup/model/__init__.py +0 -0
  33. BioScientist/agent_system/engines/v1_executor_backup/model/__pycache__/__init__.cpython-311.pyc +0 -0
  34. BioScientist/agent_system/engines/v1_executor_backup/model/__pycache__/retriever.cpython-311.pyc +0 -0
  35. BioScientist/agent_system/engines/v1_executor_backup/model/retriever.py +203 -0
  36. BioScientist/agent_system/engines/v1_executor_backup/tool/__pycache__/__init__.cpython-311.pyc +0 -0
  37. BioScientist/agent_system/engines/v1_executor_backup/tool/__pycache__/literature.cpython-311.pyc +0 -0
  38. BioScientist/agent_system/engines/v1_executor_backup/tool/__pycache__/molecular_biology.cpython-311.pyc +0 -0
  39. BioScientist/agent_system/engines/v1_executor_backup/tool/__pycache__/protocols.cpython-311.pyc +0 -0
  40. BioScientist/agent_system/engines/v1_executor_backup/tool/__pycache__/support_tools.cpython-311.pyc +0 -0
  41. BioScientist/agent_system/engines/v1_executor_backup/tool/__pycache__/tool_registry.cpython-311.pyc +0 -0
  42. BioScientist/agent_system/engines/v1_executor_backup/tool/bioengineering.py +1387 -0
  43. BioScientist/agent_system/engines/v1_executor_backup/tool/example_mcp_tools/pubmed_mcp.py +38 -0
  44. BioScientist/agent_system/engines/v1_executor_backup/tool/protocols/addgene/Addgene_ AAV Production.txt +325 -0
  45. BioScientist/agent_system/engines/v1_executor_backup/tool/protocols/addgene/Addgene_ AAV Purification.txt +244 -0
  46. BioScientist/agent_system/engines/v1_executor_backup/tool/protocols/addgene/Addgene_ AAV Titration by qPCR.txt +264 -0
  47. BioScientist/agent_system/engines/v1_executor_backup/tool/protocols/addgene/Addgene_ AAV ddPCR Titration.txt +318 -0
  48. 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
  49. BioScientist/agent_system/engines/v1_executor_backup/tool/protocols/addgene/Addgene_ Antibody Validation Using the Indirect ELISA Method.txt +280 -0
  50. 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&nbsp;,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&nbsp;
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 &amp; 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 &amp; 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 &amp; 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 &amp; 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