czty commited on
Commit
cd5762a
·
verified ·
1 Parent(s): b4db650

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. Biomni/biomni/tool/protocols/addgene/Addgene_ CRISPR Library Amplification.txt +330 -0
  2. Biomni/biomni/tool/protocols/addgene/Addgene_ Centrifugation.txt +129 -0
  3. Biomni/biomni/tool/protocols/addgene/Addgene_ Gibson Assembly Protocol.txt +136 -0
  4. Biomni/biomni/tool/protocols/addgene/Addgene_ Immunocytochemistry.txt +204 -0
  5. Biomni/biomni/tool/protocols/addgene/Addgene_ Lab Safety for Biosafety Levels One and Two.txt +134 -0
  6. Biomni/biomni/tool/protocols/addgene/Addgene_ Molecular Biology Protocol - Restriction Digest of Plasmid DNA.txt +144 -0
  7. Biomni/biomni/tool/protocols/addgene/Addgene_ Plasmid Cloning by PCR (with Protocols).txt +91 -0
  8. Biomni/biomni/tool/protocols/addgene/Addgene_ Protocol - How to Create a Bacterial Glycerol Stock.txt +68 -0
  9. Biomni/biomni/tool/protocols/addgene/Addgene_ Protocol - Over-Agar Antibiotic Plating.txt +113 -0
  10. Biomni/biomni/tool/protocols/addgene/Addgene_ Protocol - pLKO.1 – TRC Cloning Vector.txt +630 -0
  11. Biomni/biomni/tool/protocols/addgene/Addgene_ Using a Light Microscope Protocol.txt +151 -0
  12. Biomni/biomni/tool/protocols/addgene/Addgene_ Water Bath Protocol.txt +92 -0
  13. Biomni/biomni/tool/protocols/thermofisher/BrdU Staining Protocol for Flow Cytometry _ Thermo Fisher Scientific - US.txt +85 -0
  14. Biomni/biomni/tool/tool_description/__pycache__/biophysics.cpython-311.pyc +0 -0
  15. Biomni/biomni/tool/tool_description/__pycache__/support_tools.cpython-311.pyc +0 -0
  16. Biomni/biomni/tool/tool_description/__pycache__/synthetic_biology.cpython-311.pyc +0 -0
  17. Biomni/biomni/tool/tool_description/biochemistry.py +243 -0
  18. Biomni/biomni/tool/tool_description/bioimaging.py +510 -0
  19. Biomni/biomni/tool/tool_description/cancer_biology.py +242 -0
  20. Biomni/biomni/tool/tool_description/cell_biology.py +163 -0
  21. Biomni/biomni/tool/tool_description/database.py +731 -0
  22. Biomni/biomni/tool/tool_description/genetics.py +405 -0
  23. Biomni/biomni/tool/tool_description/genomics.py +840 -0
  24. Biomni/biomni/tool/tool_description/glycoengineering.py +55 -0
  25. Biomni/biomni/tool/tool_description/immunology.py +326 -0
  26. Biomni/biomni/tool/tool_description/literature.py +161 -0
  27. Biomni/biomni/tool/tool_description/molecular_biology.py +560 -0
  28. Biomni/biomni/tool/tool_description/pathology.py +213 -0
  29. Biomni/biomni/tool/tool_description/pharmacology.py +774 -0
  30. Biomni/biomni/tool/tool_description/physiology.py +363 -0
  31. Biomni/biomni/tool/tool_description/protocols.py +68 -0
  32. Biomni/biomni/tool/tool_description/synthetic_biology.py +273 -0
  33. Biomni/mcp_generated/mcp_bioconductor-concordexr/Dockerfile +40 -0
  34. Biomni/mcp_generated/mcp_bioconductor-concordexr/app/bioconductor-concordexr_server.py +221 -0
  35. Biomni/mcp_generated/mcp_bioconductor-concordexr/app/bioconductor-concordexr_shim_server.py +55 -0
  36. Biomni/mcp_generated/mcp_bioconductor-concordexr/app/requirements.txt +1 -0
  37. Biomni/mcp_generated/mcp_bioconductor-concordexr/docker-compose.yml +22 -0
  38. Biomni/mcp_generated/mcp_bioconductor-concordexr/environment.yaml +10 -0
  39. Biomni/mcp_generated/mcp_bioconductor-concordexr/requirements.txt +2 -0
  40. Biomni/mcp_generated/mcp_bioconductor-decipher/Dockerfile +40 -0
  41. Biomni/mcp_generated/mcp_bioconductor-decipher/app/bioconductor-decipher_server.py +439 -0
  42. Biomni/mcp_generated/mcp_bioconductor-decipher/app/bioconductor-decipher_shim_server.py +55 -0
  43. Biomni/mcp_generated/mcp_bioconductor-decipher/app/requirements.txt +1 -0
  44. Biomni/mcp_generated/mcp_bioconductor-decipher/docker-compose.yml +22 -0
  45. Biomni/mcp_generated/mcp_bioconductor-decipher/environment.yaml +10 -0
  46. Biomni/mcp_generated/mcp_bioconductor-decipher/requirements.txt +2 -0
  47. Biomni/mcp_generated/mcp_bioconductor-decontx/Dockerfile +40 -0
  48. Biomni/mcp_generated/mcp_bioconductor-decontx/app/bioconductor-decontx_server.py +334 -0
  49. Biomni/mcp_generated/mcp_bioconductor-decontx/app/bioconductor-decontx_shim_server.py +55 -0
  50. Biomni/mcp_generated/mcp_bioconductor-decontx/docker-compose.yml +22 -0
Biomni/biomni/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
Biomni/biomni/tool/protocols/addgene/Addgene_ Centrifugation.txt ADDED
@@ -0,0 +1,129 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ PROTOCOL: Centrifugation
2
+ SOURCE: https://www.addgene.org/protocols/centrifugation/
3
+ ================================================================================
4
+
5
+ INTRODUCTION
6
+ ================================================================================
7
+
8
+ A centrifuge is a common piece of laboratory equipment used to separate different
9
+ components in a liquid sample. It achieves this by using centrifugal force, which
10
+ is generated by spinning the sample at a high speed. Being able to separate solids
11
+ from a liquid or separate liquids of different densities is essential to many
12
+ different experimental procedures, such as minipreps and RNA extractions. Plus,
13
+ centrifuges are useful for simply collecting liquid to the bottom of a tube.
14
+
15
+ You will likely encounter several different types of centrifuges that can
16
+ accommodate different sized containers, spin at different speeds, or keep samples
17
+ at specific temperatures. This protocol will cover the general procedure and
18
+ features to keep in mind when using any centrifuge. However, each centrifuge may
19
+ have specific instructions so be sure to check in with someone familiar with your
20
+ lab's instrument before use.
21
+
22
+ Last Update: September 2022
23
+
24
+
25
+ EQUIPMENT
26
+ ================================================================================
27
+
28
+ • Centrifuge
29
+ • Microfuge tubes or other suitable container
30
+ • Personal protective equipment (PPE) appropriate for the biosafety level of the
31
+ lab space
32
+
33
+
34
+ REAGENTS
35
+ ================================================================================
36
+
37
+ • Sample to be centrifuged
38
+ • Water
39
+
40
+
41
+ BACKGROUND INFORMATION
42
+ ================================================================================
43
+
44
+ Types and Parts
45
+
46
+ There are several types of centrifuges:
47
+
48
+ • Mini or Tabletop Centrifuges: Sit on your benchtop and typically hold the
49
+ common 1.5 mL microfuge tubes used in labs, though some larger models can hold
50
+ larger conical tubes. Depending on the centrifuge their speed ranges can vary,
51
+ but are typically lower than some other centrifuge types.
52
+
53
+ • Floor Centrifuges: Sit on the floor and can be about bench height. They often
54
+ spin at similar speeds to their smaller cousins, but can hold much larger
55
+ containers.
56
+
57
+ • Ultracentrifuges: Also generally floor sized centrifuges that can hold larger
58
+ containers, but they can also rotate at much higher speeds and are used for
59
+ more specialized techniques.
60
+
61
+ Regardless of the type of centrifuge you use, most will have essentially the same
62
+ components. The photo to the left shows a front view of an open tabletop
63
+ microcentrifuge with the lid open, the rotor with microfuge tubes in place, and
64
+ the control panel where you can set the time and speed needed for your experiment.
65
+
66
+
67
+ PROCEDURE
68
+ ================================================================================
69
+
70
+ How to Centrifuge
71
+
72
+ Now that you know the different parts of a centrifuge, you're ready to begin using
73
+ the centrifuge.
74
+
75
+ 1. Determine the type of centrifuge needed. This decision should be based on the
76
+ size of tubes you are using and the speed at which you need to spin your
77
+ samples. For example, spinning down samples in 1.5 mL microfuge tubes at
78
+ 10,000 rpm would require a tabletop microcentrifuge like the one in the picture
79
+ above.
80
+
81
+ 2. Wear PPE appropriate for the lab space in which you are working. Even if your
82
+ samples may not require specific PPE, you never know what else has been placed
83
+ in the centrifuge before you and may still be on the equipment.
84
+
85
+ 3. Before using the centrifuge for your samples, ensure that the centrifuge is
86
+ clean and that everything appears to be working smoothly.
87
+
88
+ 4. Place your sample tubes into the rotor so that they are distributed evenly
89
+ around the center (see image to right). Even distribution ensures that the
90
+ centrifuge is balanced. Using the centrifuge in an unbalanced state can damage
91
+ the centrifuge and be dangerous for the user. If you do not have a balanced
92
+ number of samples, you may need to add a blank. Blanks are often an extra
93
+ tube filled with water to the same volume as your samples. If your samples are
94
+ significantly higher density than water, then you may need to fill the blank
95
+ based on weight instead of volume.
96
+
97
+ 💡 PRO TIP: For microfuge tubes, place them with the lid tabs pointing up or
98
+ out of the centrifuge so that the pellets form in approximately the same place
99
+ in each sample.
100
+
101
+ 5. Place the centrifuge's internal lid on the rotor (if it has one) and then
102
+ close the external lid.
103
+
104
+ 6. Adjust the centrifuge settings according to speed and time (and temperature, if
105
+ applicable) listed in your protocol.
106
+
107
+ 💡 PRO TIP: Spin speed is often given as Relative Centrifugal Force (RCF) or
108
+ Revolutions Per Minute (RPM), these are not the same units and are not
109
+ directly interchangeable. If you need to convert between the two, use a
110
+ conversion calculator or chart like the G Force calculator.
111
+
112
+ 7. The centrifuge should come up to speed with a pleasant hum. If you hear loud
113
+ noises or the centrifuge begins to wobble or shake, this could indicate an
114
+ unbalanced or improperly loaded centrifuge. Immediately stop the centrifuge
115
+ and investigate the issue.
116
+
117
+ 8. When you are finished spinning your samples, carefully remove them from the
118
+ centrifuge so as to not dislodge any pellets or re-mix liquids. In cases where
119
+ you are separating solids from a liquid, pellets represent the solids in your
120
+ sample while the liquid portion is known as the supernatant. Depending on your
121
+ experiment, you may be required to save the pellet, the supernatant, or both.
122
+
123
+
124
+ CONCLUSION
125
+ ================================================================================
126
+
127
+ Centrifuges are important tools for many different protocols. Improper use of a
128
+ centrifuge can damage the equipment, your samples, or you, so be sure to keep
129
+ your centrifuge clean and balanced.
Biomni/biomni/tool/protocols/addgene/Addgene_ Gibson Assembly Protocol.txt ADDED
@@ -0,0 +1,136 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ PROTOCOL: Gibson Assembly Protocol
2
+ SOURCE: https://www.addgene.org/protocols/gibson-assembly/
3
+ ================================================================================
4
+
5
+ SUMMARY
6
+ ================================================================================
7
+
8
+ In 2009 Dr. Daniel Gibson and colleagues at the J. Craig Venter Institute
9
+ developed a novel method for the easy assembly of multiple linear DNA fragments
10
+ (Gibson et al., 2009). Regardless of fragment length or end compatibility,
11
+ multiple overlapping DNA fragments can be joined in a single isothermal reaction.
12
+ With the activities of three different enzymes, the product of a Gibson Assembly is
13
+ a fully ligated double-stranded DNA molecule. This has proven to be an efficient
14
+ and effective method for the assembly of plasmids, and molecular biologists now use
15
+ this method extensively.
16
+
17
+ Why Gibson Cloning?
18
+
19
+ • No need for specific restriction sites. Join almost any two fragments regardless
20
+ of sequence.
21
+ • No scar between joined fragments.
22
+ • Fewer steps. One tube reaction.
23
+ • Can combine many DNA fragments at once.
24
+
25
+
26
+ PROCEDURE
27
+ ================================================================================
28
+
29
+ 1. Design your plasmid and order primers (see figure to the right).
30
+
31
+ When designing your plasmid, think about what DNA segments you will need to
32
+ join to create your final plasmid. Adjacent segments should have identical
33
+ sequences on the ends (sequences A and B in the figures). These identical
34
+ sequences can be created via PCR with primers that contain a 5′ end that is
35
+ identical to an adjacent segment and a 3′ end that anneals to the target
36
+ sequence.
37
+
38
+ One strategy is to order primers that are 60 bp long, with 30 bp matching the
39
+ end of the adjacent fragment and 30 bp annealing to the target sequence.
40
+
41
+ Avoid strong secondary structures in the homology region. Hairpins in this
42
+ region can significantly reduce the efficiency of two homologous ends
43
+ annealing.
44
+
45
+ 💡 PRO TIP: Cut down on background and enrich for correctly assembled plasmids
46
+ by designing primers to split an antibiotic resistance gene to effectively
47
+ create an extra part, one part has half of the antibiotic gene and the adjacent
48
+ part has the other half. Any colonies should have at least the correctly
49
+ assembled antibiotic gene. This trick can also enable replacement of "inverse
50
+ PCR" reactions with a two-part Gibson reaction if you're only making a small
51
+ change in a plasmid (such as point mutations).
52
+
53
+ 2. Generate DNA segments by PCR.
54
+
55
+ 3. Run PCR product on an agarose gel to check for size and yield. If there are
56
+ significant amounts of undesired product, gel-purify DNA segments. Otherwise,
57
+ PCR purification or even the raw PCR mix can work fine in an assembly if you
58
+ want to save time.
59
+
60
+ 4. Working on ice, combine segments in the Gibson Assembly Reaction.
61
+
62
+ 💡 PRO TIP: Yields will be best when the DNA fragments are present in equimolar
63
+ concentrations.
64
+
65
+ The Gibson Assembly master mix (isothermal reaction mix) consists of three
66
+ different enzymes within a single buffer mixture and an optional SSB protein to
67
+ improve accuracy and efficiency. Each enzyme has a specific and unique function
68
+ for the reaction:
69
+
70
+ • T5 Exonuclease: creates single-strand DNA 3' overhangs by chewing back from
71
+ the DNA 5' end. Complementary DNA fragments can subsequently anneal to each
72
+ other.
73
+
74
+ • Phusion High-Fidelity DNA Polymerase: incorporates nucleotides to "fill in"
75
+ the gaps in the annealed DNA fragments.
76
+
77
+ • Taq DNA Ligase: covalently joins the annealed complementary DNA fragments,
78
+ removing any nicks and creating a contiguous DNA fragment.
79
+
80
+ 💡 PRO TIP: Add Extreme Thermostable Single-Stranded DNA-Binding protein (ET
81
+ SSB) to the isothermal reaction mix. ET SSB protects 3' ssDNA ends from the
82
+ ssDNA-specific endonuclease activity of T5 Exonuclease and furthermore reduces
83
+ secondary structure of ssDNA. (Rabe & Cepko, 2020).
84
+
85
+ 5. Incubate the mix for 1 hour at 50 °C or follow manufacturer's instructions.
86
+ You can purchase master mix or make your own.
87
+
88
+ 6. Transform bacteria with the DNA and screen for the correct plasmid product by
89
+ restriction digest.
90
+
91
+ 7. Sequence the important regions of your final plasmid, particularly the seams
92
+ between the assembled parts.
93
+
94
+
95
+ TIPS AND TROUBLESHOOTING
96
+ ================================================================================
97
+
98
+ "Stitching" fragments together using oligos
99
+
100
+ When you need intervening sequence between two PCR products, one method is to
101
+ "stitch" together several oligos. This technique is especially useful for
102
+ introducing promoters, terminators, and other short sequences into the assembly
103
+ and is used when the part to be inserted is too long to include on overlapping PCR
104
+ primers (>60 bp) but too short to make its own part (<150 bp).
105
+
106
+ 💡 PRO TIP: Please note that the way to design the "stitching" primers and the
107
+ amounts of primers to include in the Gibson reaction are different than with
108
+ normal PCR primers (Gibson et al., 2010).
109
+
110
+ Number of fragments assembled simultaneously
111
+
112
+ Multiple fragments can be assembled in one reaction. However, some labs have
113
+ observed a sharp decrease in success rate when assembling more than five fragments
114
+ at a time.
115
+
116
+
117
+ RESOURCES AND REFERENCES
118
+ ================================================================================
119
+
120
+ New England Biolabs (NEB) sells DNA Assembly kits and master mixes, including
121
+ NEBuilder HiFi and Gibson Assembly. They also sell ET SSB. NEB has other resources,
122
+ such as a primer design tool. Gibson Assembly® is licensed to New England Biolabs
123
+ by TelesisBio.
124
+
125
+ References:
126
+
127
+ 1. Gibson DG, Young L, Chuang RY, Venter JC, Hutchison CA, Smith HO. (2009).
128
+ Enzymatic assembly of DNA molecules up to several hundred kilobases. Nature
129
+ Methods, 6(5), 343–345. https://doi.org/10.1038/nmeth.1318
130
+
131
+ 2. Gibson DG, Smith HO, Hutchison CA, Venter JC, Merryman C. (2010). Chemical
132
+ synthesis of the mouse mitochondrial genome. Nature Methods, 7(11), 901–903.
133
+ https://doi.org/10.1038/nmeth.1515
134
+
135
+ 3. Rabe BA, Cepko C. (2020). A Simple Enhancement for Gibson Isothermal Assembly.
136
+ bioRxiv. https://doi.org/10.1101/2020.06.14.150979
Biomni/biomni/tool/protocols/addgene/Addgene_ Immunocytochemistry.txt ADDED
@@ -0,0 +1,204 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ PROTOCOL: Immunocytochemistry
2
+ SOURCE: https://www.addgene.org/protocols/immunocytochemistry/
3
+ ================================================================================
4
+
5
+ INTRODUCTION
6
+ ================================================================================
7
+
8
+ Immunocytochemistry is a technique that uses antibodies to detect antigens in
9
+ cells. Here we describe the basic steps for fixing and labeling cells in culture
10
+ with a primary antibody against a target protein and a fluorescent secondary
11
+ antibody. This protocol outlines the steps for fixing and labeling HeLa cells for
12
+ a target protein using the formaldehyde fixation method. The protocol may need to
13
+ be optimized for different cells, target proteins, etc.
14
+
15
+ Last Update: January 20, 2022
16
+
17
+
18
+ WORKFLOW TIMELINE
19
+ ================================================================================
20
+
21
+ Day 1: Seed cells
22
+
23
+ Day 3-4: Fix and label cells
24
+
25
+
26
+ EQUIPMENT
27
+ ================================================================================
28
+
29
+ • Pipette controller
30
+ • Pipette tips and pipettes
31
+ • Rocking platform
32
+ • Tweezers
33
+ • Fluorescent microscope
34
+ • 0.5–10 µL single channel pipette
35
+ • 2–20 µL single channel pipette
36
+ • 20–200 µL single channel pipette
37
+ • 200–1000 µL single channel pipette
38
+
39
+
40
+ REAGENTS
41
+ ================================================================================
42
+
43
+ • 1X PBS
44
+ • Microcentrifuge tubes
45
+ • Sterile Poly-D-lysine coated coverslips
46
+ • HeLa cells
47
+ • 24-well plate
48
+ • 4% Paraformaldehyde
49
+ • 5 mg/mL 4′,6-diamidino-2-phenylindole (DAPI)
50
+ • Bovine serum albumin (BSA)
51
+ • Triton X-100
52
+ • Primary antibody
53
+ • Secondary antibody
54
+ • Deionized water
55
+ • Microscope slide
56
+ • Anti-fade mounting medium
57
+ • Laboratory wipes
58
+ • 15 mL conical tubes
59
+ • 50 mL conical tubes
60
+
61
+
62
+ BEFORE STARTING
63
+ ================================================================================
64
+
65
+ • Refer to the manufacturer's instructions for additional information specific to
66
+ your antibodies, such as antibody concentrations, incubation times, and
67
+ recommended compatible reagents.
68
+
69
+ • Secondary antibodies must match the host species of the primary antibody. For
70
+ example, use an anti-mouse secondary antibody for primary antibodies raised in
71
+ a mouse.
72
+
73
+
74
+ REAGENT PREPARATION
75
+ ================================================================================
76
+
77
+ Permeabilization buffer:
78
+ Dilute 20 µL of Triton X-100 in 10 mL PBS.
79
+
80
+ Blocking buffer:
81
+ Dilute 0.5 g BSA and 30 µL Triton X-100 in 10 mL PBS.
82
+
83
+ Antibody dilution buffer:
84
+ Dilute 0.5 g BSA and 150 µL Triton X-100 in 50 mL PBS.
85
+
86
+ 300 nM DAPI working solution:
87
+ 1. Prepare a 300 µM DAPI stock solution by diluting 2.1 µL of the 5 mg/mL DAPI
88
+ solution to 100 µL PBS. Protect from light.
89
+
90
+ 2. Prepare a 300 nM DAPI working solution by diluting 5 µL of the 300 µM DAPI
91
+ stock solution into 5 mL PBS. Protect from light.
92
+
93
+
94
+ PROCEDURE
95
+ ================================================================================
96
+
97
+ Section 1: Seeding cells
98
+
99
+ 1. Place a sterile poly-D-lysine coated coverslip in each well of a 24-well cell
100
+ culture treated plate.
101
+
102
+ 2. Seed 5 x 10³ HeLa cells per well.
103
+
104
+ 3. Allow the HeLa cells to grow to the desired density before labeling.
105
+
106
+ Section 2: Fixing and permeabilizing cells
107
+
108
+ 1. Gently aspirate the media from the 24-well plate.
109
+
110
+ 2. Wash each well with 500 µL of PBS, remove the wash, and dispose of it in an
111
+ appropriate waste container.
112
+
113
+ 3. Fix each well with 500 µL of cold 4% paraformaldehyde in PBS on ice for 15
114
+ min.
115
+
116
+ 💡 PRO TIP: While 4% Paraformaldehyde fixation works well for many target
117
+ proteins, it may not be the best fixation method for all. Alternative fixation
118
+ methods such as methanol or acetone may be better for some applications.
119
+
120
+ 4. Remove the paraformaldehyde and follow your institution's laboratory safety
121
+ guidelines for disposing of waste in the appropriate container.
122
+
123
+ 5. Wash 3x for 5 min in 500 µL PBS on a rocking platform.
124
+
125
+ 6. Permeabilize cells for 10 min at room temperature (RT) on a rocking platform
126
+ in 500 µL permeabilization buffer.
127
+
128
+ 7. Remove the permeabilization buffer and dispose of it in an appropriate waste
129
+ container.
130
+
131
+ 8. Wash 3x for 5 min in 500 µL PBS on a rocking platform.
132
+
133
+ Section 3: Labeling with antibody
134
+
135
+ 1. Block for 20 min at RT on a rocking platform in 500 µL blocking buffer.
136
+
137
+ 2. Remove the blocking buffer and dispose of it in an appropriate waste
138
+ container.
139
+
140
+ 3. Dilute the primary antibody to the desired concentration in antibody dilution
141
+ buffer.
142
+
143
+ 💡 PRO TIP: The optimal antibody concentration will vary but generally ranges
144
+ from 1-10 µg/mL.
145
+
146
+ 4. Add 500 µL of the diluted antibody to the wells and incubate 2 h at RT.
147
+
148
+ 5. Remove the primary antibody and dispose of it in an appropriate waste
149
+ container.
150
+
151
+ 6. Wash 3x for 5 min in 500 µL PBS on a rocking platform.
152
+
153
+ 7. Dilute the fluorescently-labeled secondary antibody to the desired
154
+ concentration in antibody dilution buffer.
155
+
156
+ 💡 PRO TIP: The optimal antibody concentration will vary but generally ranges
157
+ from 1-10 µg/mL.
158
+
159
+ 8. Add 500 µL fluorescently-labeled secondary antibody to the wells and
160
+ incubate 30 min at RT in the dark.
161
+
162
+ 💡 PRO TIP: The plate can be wrapped in foil to block light.
163
+
164
+ 9. Remove the secondary antibody and dispose of it in an appropriate waste
165
+ container.
166
+
167
+ 10. Wash 3x for 5 min in 500 µL PBS on a rocking platform.
168
+
169
+ 11. (Optional) Counterstain nuclei with 500 µL of 300 nM DAPI working solution
170
+ for 10 min at RT in the dark.
171
+
172
+ 12. Remove the DAPI and dispose of it in an appropriate waste container.
173
+
174
+ 13. Wash 3x for 5 min in 500 µL PBS on a rocking platform.
175
+
176
+ 14. Use tweezers to gently remove the coverslip.
177
+
178
+ 15. Blot the coverslip with a laboratory wipe to remove excess liquid.
179
+
180
+ 16. Add 1 drop of anti-fade mounting medium to the microscope slide.
181
+
182
+ 17. Gently place the coverslip on the microscope slide with the cell side facing
183
+ down.
184
+
185
+ 18. Observe the cell labeling on a microscope with appropriate fluorescent
186
+ filters.
187
+
188
+
189
+ TIPS AND TROUBLESHOOTING
190
+ ================================================================================
191
+
192
+ • The optimal fixation method will vary depending on the sample type and the
193
+ protein of interest. You may need to try a variety of fixation methods to find
194
+ the best conditions for your target.
195
+
196
+ • The optimal antibody concentration will vary between antibodies. Review the
197
+ manufacturer's instructions before starting your experiment and consider
198
+ titrating your antibody to determine the optimal dose.
199
+
200
+ • To ensure that your antibody is both functioning as expected and specific,
201
+ include a positive control sample that you know expresses the protein, such as
202
+ cells transfected with a plasmid to express the protein of interest, and a
203
+ negative control sample such as cells that do not express the protein of
204
+ interest.
Biomni/biomni/tool/protocols/addgene/Addgene_ Lab Safety for Biosafety Levels One and Two.txt ADDED
@@ -0,0 +1,134 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ PROTOCOL: Lab Safety for Biosafety Levels One and Two
2
+ SOURCE: https://www.addgene.org/protocols/lab-safety/
3
+ ================================================================================
4
+
5
+ INTRODUCTION
6
+ ================================================================================
7
+
8
+ There are four biosafety levels. This protocol provides information for both
9
+ biosafety level 1 (BSL-1) and biosafety level 2 (BSL-2). The purpose of the four
10
+ levels is to distinguish between different types of hazards and to provide
11
+ protective measures for each level, as each level has different safety
12
+ requirements. BSL-1 is designated for those working with microbes that don't cause
13
+ disease in healthy humans, for example, non-pathogenic E. coli. BSL-2 is for labs
14
+ that work with pathogens including organisms such as Staphylococcus aureus or
15
+ Vibrio cholerae. BSL-2 includes all of the precautions needed in BSL-1, along with
16
+ additional precautions to prevent injuries, ingestion, and exposures to hazardous
17
+ materials.
18
+
19
+
20
+ EQUIPMENT
21
+ ================================================================================
22
+
23
+ • Lab coat
24
+ • Close-toed shoes
25
+ • Gloves
26
+ • Eye protection or face shields
27
+ • Eye wash
28
+ • Safety shower
29
+ • Sharps container
30
+ • Biohazard waste container
31
+ • Fire blanket
32
+ • Fire extinguisher
33
+
34
+
35
+ GUIDELINES
36
+ ================================================================================
37
+
38
+ BSL-1 Guidelines
39
+
40
+ Before You Work
41
+
42
+ 1. Right after entering the lab, put on the proper personal protective equipment
43
+ (PPE) and wear it the whole time you are working in the lab.
44
+
45
+ 2. Do not eat, drink, chew gum, or apply makeup in the laboratory.
46
+
47
+ 3. Before you start your experiment, make sure your workspace is clean and
48
+ uncluttered. Disinfect your workspace with appropriate materials. For example,
49
+ you may use 70% ethanol, quaternary ammonium, or bleach solutions. Ask your lab
50
+ supervisor what is available and the appropriate contact times for each agent.
51
+ Make sure you have enough space to work at your lab bench.
52
+
53
+ 4. It's possible that while working, you may accidentally come into contact with
54
+ hazardous materials. A sink, eyewash station, safety shower, fire blanket, and
55
+ extinguisher are also required to be present in the room. Make sure that you
56
+ know where these are located before you start.
57
+
58
+ 5. Use the eyewash station if unwanted or biohazardous materials are splashed onto
59
+ your face and/or get into your eyes.
60
+
61
+ 6. Wash your hands before and after working in the lab.
62
+
63
+ 7. Ensure that a designated chemical waste accumulation site is present, and that
64
+ you have received hazardous waste safety training before starting the work.
65
+ Before working with chemicals, first review their material safety data sheets
66
+ (MSDS).
67
+
68
+ While You Work
69
+
70
+ 1. Dispose of sharps in a designated sharps container. Sharps include anything that
71
+ can pierce your skin, including, but not limited to broken glass or needles.
72
+ Sharps containers must be thick walled, impenetrable by a needle, and must be
73
+ able to close securely.
74
+
75
+ 2. Biohazard signs should be placed in all areas containing biohazardous materials,
76
+ including biohazardous waste. Dispose of waste that may be contaminated with
77
+ pathogens or chemicals that present a danger to people and the environment in
78
+ biohazard containers. Biohazardous materials are decontaminated prior to
79
+ disposal, commonly done with an autoclave.
80
+
81
+ 3. Only mechanical pipetting should be done in the laboratory. Don't mouth pipette!
82
+
83
+ 4. There may be some times when you may be working with a protocol that requires
84
+ shaking or mixing, which may produce aerosols or splashes. These procedures
85
+ should be done underneath a hood.
86
+
87
+ 5. Clean any spills immediately, and decontaminate as necessary. For large spills
88
+ that cannot be easily cleaned, evacuate and close off the area and alert the
89
+ chemical hygiene officer.
90
+
91
+ BSL-2 Guidelines
92
+
93
+ Remember, the BSL-1 laboratory guidelines above are expected to be followed in
94
+ addition to BSL-2 guidelines below, including PPE protocols.
95
+
96
+ 1. Working in a BSL-2 laboratory requires laboratory glasses in addition to coat
97
+ and gloves. This lab coat should not be worn outside of the BSL-2 area.
98
+
99
+ 2. BSL-2 laboratories must be clearly marked as "BSL-2." The names and contact
100
+ information of the laboratory manager should be clearly visible in the room and
101
+ on the door.
102
+
103
+ 3. BSL-2 centrifugation steps require an aerosol-tight lid and rotors should be
104
+ loaded and unloaded in a biosafety cabinet.
105
+
106
+ 4. BSL-2 safety protocols require bloodborne pathogens training. It is strongly
107
+ recommended that anyone participating in BSL-2 work receives a hepatitis B
108
+ vaccination or titer prior to starting work in the laboratory.
109
+
110
+ 5. For some biohazardous waste, an autoclave or other method for decontaminating
111
+ must be used for proper disposal. Liquid BSL-2 waste can be decontaminated in
112
+ a final concentration of 10% bleach for 30 minutes before pouring down the
113
+ drain. Solid BSL-2 waste can be collected in designated biohazardous waste
114
+ containers that can be autoclaved.
115
+
116
+
117
+ CONCLUSION
118
+ ================================================================================
119
+
120
+ Although simple, following appropriate BSL-1 and BSL-2 protocol goes a long way.
121
+ It is the easiest way to ensure that you're doing your work in the safest way
122
+ possible. Protecting yourself and working smart in the lab is important!
123
+
124
+
125
+ DISCLAIMER
126
+ ================================================================================
127
+
128
+ The SOP presented here has been designed by the Addgene nonprofit plasmid
129
+ repository and is being shared outside of Addgene for informational purposes only.
130
+ If you choose to reuse or repurpose this SOP in another location, please note that
131
+ you do so at your own risk; you should ensure that any local guidance is also
132
+ adhered to. None of the authors, contributors, administrators, or anyone else
133
+ associated with Addgene, can be held responsible for your use of the information
134
+ contained in or linked to from these web pages.
Biomni/biomni/tool/protocols/addgene/Addgene_ Molecular Biology Protocol - Restriction Digest of Plasmid DNA.txt ADDED
@@ -0,0 +1,144 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ PROTOCOL: Restriction Digest of Plasmid DNA
2
+ SOURCE: https://www.addgene.org/protocols/restriction-digest/
3
+ ================================================================================
4
+
5
+ INTRODUCTION
6
+ ================================================================================
7
+
8
+ Restriction enzyme digestion takes advantage of naturally occurring enzymes that
9
+ cleave DNA at specific sequences. There are hundreds of different restriction
10
+ enzymes, allowing scientists to target a wide variety of recognition sequences.
11
+ For a list of many commonly used restriction enzymes, visit NEB.
12
+
13
+ Restriction enzyme digestion is commonly used in molecular cloning techniques,
14
+ such as PCR or restriction cloning. It is also used to quickly check the identity
15
+ of a plasmid by diagnostic digest.
16
+
17
+ Last Upload: Oct. 11th, 2016
18
+
19
+
20
+ EQUIPMENT
21
+ ================================================================================
22
+
23
+ • Electrophoresis chamber
24
+ • Pipetman
25
+
26
+
27
+ REAGENTS
28
+ ================================================================================
29
+
30
+ • Liquid DNA aliquot of your plasmid of interest (see below for recommend
31
+ amounts)
32
+ • Appropriate restriction enzyme (see manufacturer's instructions for proper
33
+ amount)
34
+ • Appropriate restriction digest buffer (see manufacturer's instructions)
35
+ • Gel loading dye
36
+ • Electrophoresis buffer
37
+ • Pipet tips
38
+
39
+
40
+ PROCEDURE
41
+ ================================================================================
42
+
43
+ 1. Select restriction enzymes to digest your plasmid.
44
+
45
+ 💡 PRO TIP: To determine which restriction enzymes will cut your DNA sequence
46
+ (and where they will cut), use a sequence analysis program such as Addgene's
47
+ Sequence Analyzer.
48
+
49
+ 2. Determine an appropriate reaction buffer by reading the instructions for your
50
+ enzyme.
51
+
52
+ 💡 PRO TIP: If you are conducting a double digest (digesting with two enzymes
53
+ at the same time), you will need to determine the best buffer that works for
54
+ both of your enzymes. Most companies will have a compatibility chart, such as
55
+ the double digest finder tool from NEB.
56
+
57
+ 3. In a 1.5mL tube combine the following:
58
+ • DNA
59
+ • Restriction Enzyme(s)
60
+ • Buffer
61
+ • BSA (if recommended by manufacturer)
62
+ • dH₂O up to total volume
63
+
64
+ 💡 PRO TIPS:
65
+ • The amount of DNA that you cut depends on your application. A diagnostic
66
+ digest typically involves ∼500 ng of DNA, while molecular cloning often
67
+ requires 1 µg of DNA. The total reaction volume usually varies from 10-50 µL
68
+ depending on application and is largely determined by the volume of DNA to
69
+ be cut.
70
+
71
+ • A typical restriction digestion reaction could look like this:
72
+ - 1 µg DNA
73
+ - 1 µL of each Restriction Enzyme
74
+ - 3 µL 10x Buffer
75
+ - 3 µL 10x BSA (if recommended)
76
+ - x µL dH₂O (to bring total volume to 30µL)
77
+
78
+ • The amount of restriction enzyme you use for a given digestion will depend on
79
+ the amount of DNA you want to cut. By definition: one unit of enzyme will
80
+ cut 1 µg of DNA in a 50 µL reaction in 1 hour. Using this ratio, you can
81
+ calculate the minimal amount of enzyme for your reaction. However, keep in
82
+ mind that restriction enzyme activity is determined under ideal conditions
83
+ with very clean DNA, so using a little more enzyme is advisable. Reactions
84
+ are often performed with 0.2-0.5 µL of enzyme because it is difficult to
85
+ pipette less volume than this; 0.2-0.5 µL will likely be more enzyme than
86
+ you will need, but that's okay because a little more enzyme is usually
87
+ better.
88
+
89
+ 4. Mix gently by pipetting.
90
+
91
+ 5. Incubate tube at appropriate temperature (usually 37 °C) for 1 hour. Always
92
+ follow the manufacturer's instructions.
93
+
94
+ 💡 PRO TIP: Depending on the application and the amount of DNA in the reaction,
95
+ incubation time can range from 45 mins to overnight. For diagnostic digests,
96
+ 1-2 hours is often sufficient. For digests with >1 µg of DNA used for cloning,
97
+ it is recommended that you digest for at least 4 hours.
98
+
99
+ 6. If you will be using the digested DNA for another application (such as a
100
+ digestion with another enzyme in a different buffer), but will not be gel
101
+ purifying it, you may need to inactivate the enzyme(s) following the digestion
102
+ reaction. This may involve incubating the reaction at 70 °C for 15 mins, or
103
+ purifying the DNA via a purification kit, such as a QIAGEN DNA cleanup kit.
104
+ See the enzyme manufacturer's instructions for more details.
105
+
106
+ 7. To visualize the results of your digest, conduct gel electrophoresis.
107
+
108
+
109
+ TIPS AND FAQ
110
+ ================================================================================
111
+
112
+ • Restriction enzymes MUST be placed in an ice bucket immediately after removal
113
+ from the -20 °C freezer because heat can cause the enzymes to denature and lose
114
+ their function.
115
+
116
+ • If you are having difficulty finding an enzyme that cuts your vector's
117
+ multiple cloning site (MCS), but does not cut your insert, you could try using
118
+ two different enzymes that have compatible sticky ends. See NEB's compatible
119
+ cohesive ends chart.
120
+
121
+ • If you cannot find compatible sticky ends, you will need to fill in the
122
+ overhangs and conduct a blunt end ligation. Use T4 DNA Polymerase or Klenow
123
+ DNA Polymerase I for 3′ overhang removal and 5′ overhang fill-in.
124
+
125
+ • If you are using blunt ends or a single enzyme to cut the vector, you will need
126
+ to use a phosphatase to prevent re-circularization of the vector if you are
127
+ cloning in an insert. CIP (calf alkaline phosphatase) or SAP (shrimp alkaline
128
+ phosphatase) are commonly used. Follow the manufacturer's instructions.
129
+
130
+ • If your enzyme did not cut, check to make sure that it isn't methylation
131
+ sensitive. Plasmids grown in Dam or Dcm methylase positive strains will be
132
+ resistant to cleavage at certain restriction sites. See NEB's table of
133
+ methylation sensitive restriction sites.
134
+
135
+ • Sometimes enzymes cut sequences which are similar, but not identical, to their
136
+ recognition sites. This is due to "Star Activity" and can happen for a variety
137
+ of reasons, including high glycerol concentration. Learn more at NEB's website
138
+ about star activity.
139
+
140
+ • If you are digesting a large number of plasmids with the same enzyme(s) (for
141
+ instance, in a diagnostic digest), you can create a "Master Mix" consisting of
142
+ all of the reaction components except for the DNA. Aliquot your DNA into
143
+ individual tubes and then add the appropriate amount of Master Mix to each
144
+ tube. This will save you time and ensure consistency across the reactions.
Biomni/biomni/tool/protocols/addgene/Addgene_ Plasmid Cloning by PCR (with Protocols).txt ADDED
@@ -0,0 +1,91 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Title: Addgene: Plasmid Cloning by PCR (with Protocols)
2
+ URL: https://www.addgene.org/protocols/pcr-cloning/
3
+ ================================================================================
4
+
5
+ Protocols
6
+ Plasmid Cloning by PCR
7
+ Plasmid Cloning by PCR
8
+ You may also like...
9
+ Restriction Digest of Plasmid DNA
10
+ DNA Ligation
11
+ Bacterial Transformation
12
+ Summary
13
+ PCR based cloning is incredibly versatile and allows for nearly any piece of DNA to be placed into a backbone vector of choice with minimal limitations.
14
+ Background
15
+ In its simplest form, PCR based cloning is about making a copy of a piece of DNA and at the same time adding restriction sites to the ends of that piece of DNA so that it can be easily cloned into a plasmid of interest.
16
+ For this example, we will describe how to copy a cDNA from one vector into a new vector that is better suited for analyzing the gene’s function. The process is shown graphically in the following cartoon, in which we are adding EcoRI and NotI sites to Your Gene of Interest (YGOI) for ligation into a recipient plasmid.
17
+ Designing Primers for PCR Based Cloning
18
+ The basic PCR primers for molecular cloning consist of:
19
+ Leader Sequence:
20
+ Extra base pairs on the 5' end of the primer assist with restriction enzyme digestion (usually 3-6bp).
21
+ Restriction Site:
22
+ Your chosen restriction site for cloning (usually 6-8bp).
23
+ Hybridization Sequence:
24
+ The region of the primer that binds to the sequence to be amplified (usually 18-21bp).
25
+ When selecting restriction sites, you should use a DNA analysis tool, such as
26
+ Addgene’s Sequence Analyzer
27
+ , to allow you to identify which restriction sites are present in a given sequence. You want to choose enzymes that:
28
+ Do not cut within your insert.
29
+ Are in the desired location in your recipient plasmid (usually in the Multiple Cloning Site (MCS)), but do not cut elsewhere on the plasmid.
30
+ Bonus: It is helpful to choose restriction enzymes that can both function in the same buffer, as this will save time later.
31
+ In our example, we will use EcoRI and NotI to ligate our cDNA into the recipient plasmid. Remember to insert your DNA in the correct orientation in the recipient plasmid by viewing the MCS and fusing the upstream restriction site to the forward primer and the downstream restriction site to the reverse primer.
32
+ Next, we need to examine the DNA sequence that we want to amplify and design primers that will bind to and replicate it. The following image shows the ends of the ORF and how these are used for primer design:
33
+ Because we are cloning an ORF, we want to clone from the start codon (ATG) to the stop codon (TGA, in this example). Assuming you are amplifying from plasmid DNA (rather than from genomic DNA or a cDNA library), roughly 18-21bp is usually sufficient to give specificity and to also be compatible with a standard PCR reaction. Therefore, our Forward Primer will use the sequence 5'-ATGTGGCATATCTCGAAGTAC-3' for the region that binds the ORF and we will add the EcoRI restriction site (GAATTC) to the 5’ end of this primer, making our Forward Primer 5'-GAATTCATGTGGCATATCTCGAAGTAC-3'.
34
+ Many restriction enzymes do not cut DNA efficiently at the end of a linear piece (see
35
+ (Link opens in a new window)
36
+ NEB
37
+ for more information). Thus, we recommend that you add 3-6 bases upstream of your restriction site to improve cutting efficiency. You can generally add any 6 bases, but you should ensure that the bases do not result in the formation of a hairpin structure within your primer. In our case, we will add TAAGCA, resulting in a final Forward Primer sequence of 5'-TAAGCAGAATTCATGTGGCATATCTCGAAGTAC-3'.
38
+ For the Reverse Primer, the design is similar, but we need to use the reverse complement to get PCR amplification. We can start similarly, taking the final 18bases of the ORF, including the stop codon (5'-TGGCATATCTCGAAGTACTGA-3'), then adding NotI (GCGGCCGC) and then TAAGCA to improve restriction enzyme digestion. This gives us a sequence of 5'-TGGCATATCTCGAAGTACTGAGCGGCCGCTAAGCA-3' (30bp with 18bp of homology to the ORF). We now need to generate the reverse-complement of this sequence so that we can successfully amplify the ORF. You can generate the reverse-complement using existing software (a quick internet search will lead you to
39
+ (Link opens in a new window)
40
+ here
41
+ and many others). If we put the sequence we chose for our reverse primer (5’-TGGCATATCTCGAAGTACTGAGCGGCCGCTAAGCA-3’) into this calculator we get a final Reverse Primer sequence of 5’-TGCTTAGCGGCCGCTCAGTACTTCGAGATATGCCA-3’.
42
+ Experimental Procedure
43
+ Run PCR and Purify the PCR Product
44
+ Run PCR to amplify your insert DNA. It is important to use a high fidelity taq polymerase to minimize mutations. The fidelity of the polymerase becomes more important the longer the expected PCR product is. You should select an annealing temperature based on the melting temperature (Tm) of the portion of the primer that hybridizes to the sequence to be amplified (the ORF in this case), not the Tm of the entire primer. If you are amplifying from a plasmid or simple template, there is very little chance for mis-priming, so you can use a pretty wide range of annealing temperatures, but you may need to increase your primer length and increase the Tm if you are trying to clone from genomic DNA, a cDNA library, or by RT-PCR.
45
+ Isolate your PCR product from the rest of the PCR reaction using a kit, such as the
46
+ (Link opens in a new window)
47
+ QIAquick PCR Purification Kit
48
+ . The PCR product is now ready for restriction digestion.
49
+ Digest Your DNA
50
+ Set up
51
+ restriction digests
52
+ for your PCR product and recipient plasmid. Because you lose some DNA during the gel purification step, it is important to digest plenty of starting material. We recommend using your entire PCR reaction and 1μg of recipient plasmid. It is also critical that as much of the recipient plasmid as possible be cut with both enzymes, and therefore it is important that the digest goes at least 4 hours and as long as overnight.
53
+ If you are going to use only one restriction enzyme, or enzymes that have compatible overhangs or no overhangs after digestion, you will need to use a phosphatase to prevent re-circularization of the vector. You should treat your digested recipient vector with a phosphatase prior to the ligation step or prior to the gel purification step, depending on the phosphatase you choose. CIP (calf alkaline phosphatase) or SAP (shrimp alkaline phosphatase) are commonly used. Follow the manufacturer’s instructions.
54
+ Isolate Your Insert and Vector by Gel Purification
55
+ Run your digest DNA on an
56
+ agarose gel
57
+ and conduct a
58
+ gel purification
59
+ to isolate the DNA. When running a gel for purification purposes it is important to have nice crisp bands and to have space to cut out the bands. Because of this we recommend that you use a wide gel comb, run the gel on the slower side, and skip lanes between samples. In addition to a DNA ladder standard, it is also a good idea to run an uncut sample of each vector to help with troubleshooting if your digests don’t look as you expected.
60
+ When cloning by PCR, it is especially important to run the product on a gel. This allows you to visualize that your PCR product is the anticipated size and that your band is strong (indicating that the PCR reaction worked and that you have a sufficient amount of DNA).
61
+ Once you have cut out and purified your insert and vector bands away from the gel, it is important to
62
+ determine the concentration of recovered DNA
63
+ .
64
+ Ligate Your Insert Into Your Vector
65
+ Conduct a
66
+ DNA Ligation
67
+ to fuse your insert to your recipient plasmid.
68
+ We recommend around 100ng of total DNA in a standard ligation reaction. You ideally want a recipient plasmid to insert ratio of approximately 1:3. Since the number of base pairs for each varies, it is difficult to calculate this based on DNA concentration alone. One method is to conduct 2 ligations for each plasmid you are trying to create, with varying ratios of recipient plasmid to insert.
69
+ It is also important to set up negative controls in parallel. For instance, a ligation of the recipient plasmid DNA without any insert will tell you how much background you have of uncut or self-ligating recipient plasmid backbone.
70
+ Transformation
71
+ Proceed with the
72
+ transformation
73
+ according to the manufacturer’s instructions for your competent cells.
74
+ For most standard cloning, you can transform 1-2μl of your ligation reaction into competent cells such as DH5alpha or TOP10. If using much less total DNA (<1ng) or if you are having trouble getting colonies, you might want to use higher competency cells. Additionally, if your final product is going to be very large (>10kb) you might want to use electro-competent cells instead of the more common chemically-competent cells.
75
+ The number of bacterial colonies resulting from your transformation will give you the first indication as to whether your transformation worked. Your recipient plasmid + insert plate should have significantly more colonies than the recipient plasmid alone plate. The recipient plasmid alone control will tell you your “background” level or more specifically it will tell you how many colonies you can expect on your recipient plasmid + insert plate that are not correct.
76
+ If you have a high number of colonies on your recipient plasmid alone plate, you can try ligating the recipient plasmid alone in the presence and absence of ligase. If the colonies are a result of uncut empty plasmid, you will still have colonies when you do not add ligase. If the colonies are a result of recipient plasmid self-ligation, you will see significantly more colonies when you add ligase.
77
+ If you do not see any colonies, you should conduct a positive control to ensure that your transformation worked. You could also try varying the amount of recipient plasmid to insert.
78
+ Isolate the Finished Plasmid
79
+ Finally, you will need to pick individual bacterial colonies and check them for successful ligations. Pick 3-10 colonies depending on the number of background colonies on your control plate (the more background, the more colonies you will need to pick) and grow overnight cultures for DNA purification.
80
+ After
81
+ purifying the DNA
82
+ , conduct a
83
+ diagnostic restriction digest
84
+ of 100-300ng of your purified DNA with the enzymes you used for the cloning. Run your digest on an
85
+ agarose gel
86
+ . You should see two bands, one the size of your vector and one the size of your new insert.
87
+ Verify your Plasmid by Sequencing
88
+ PCR based cloning carries a much higher risk for mutation than restriction enzyme based cloning. DNA replication by PCR has error rates that range from roughly 1 per 500bp to roughly 1 per 10 million bp depending on the polymerase used. Because of this, no matter which taq polymerase you use, it is important that you sequence the final product.
89
+ Reference Page
90
+ Top
91
+ Index
Biomni/biomni/tool/protocols/addgene/Addgene_ Protocol - How to Create a Bacterial Glycerol Stock.txt ADDED
@@ -0,0 +1,68 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ PROTOCOL: How to Create a Bacterial Glycerol Stock
2
+ SOURCE: https://www.addgene.org/protocols/create-glycerol-stock/
3
+ ================================================================================
4
+
5
+ BACKGROUND INFORMATION
6
+ ================================================================================
7
+
8
+ Bacterial glycerol stocks are important for long-term storage of plasmids.
9
+ Although you can store your plasmid DNA at -20°C, many labs also create bacterial
10
+ glycerol stocks of their plasmids. This way, when you want to make more plasmid
11
+ DNA, the plasmid will already be in your desired bacterial strain and you will not
12
+ need to obtain more competent cells and retransform.
13
+
14
+ Bacteria on an LB agar plate can be stored at 4°C for a few weeks. However, if
15
+ you want to store bacteria for a longer time, you will need to establish glycerol
16
+ stocks. The addition of glycerol stabilizes the frozen bacteria, preventing damage
17
+ to the cell membranes and keeping the cells alive. A glycerol stock of bacteria
18
+ can be stored stably at -80°C for many years.
19
+
20
+
21
+ PROCEDURE
22
+ ================================================================================
23
+
24
+ 1. Follow the steps for Inoculating an Overnight Liquid Culture.
25
+
26
+ 2. After you have bacterial growth, add 500 μL of the overnight culture to 500 μL
27
+ of 50% glycerol in a 2 mL screw top tube or cryovial and gently mix.
28
+
29
+ Notes:
30
+ • Make the 50% glycerol solution by diluting 100% glycerol in dH₂O.
31
+ • Snap top tubes are not recommended as they can open unexpectedly at -80°C.
32
+
33
+ 3. Freeze the glycerol stock tube at -80°C. The stock is now stable for years, as
34
+ long as it is kept at -80°C. Subsequent freeze and thaw cycles reduce shelf
35
+ life.
36
+
37
+ 4. To recover bacteria from your glycerol stock, open the tube and use a sterile
38
+ loop, toothpick or pipette tip to scrape some of the frozen bacteria off of the
39
+ top. Do not let the glycerol stock unthaw!
40
+
41
+ 5. Streak the bacteria onto an LB agar plate.
42
+
43
+ 6. Grow your bacteria overnight at the appropriate temperature. Growth conditions,
44
+ including copy number and growth temperature, can be found on your plasmid's
45
+ information page. The next day you will be able to start an overnight culture
46
+ for plasmid DNA prep the following day.
47
+
48
+
49
+ TIPS AND FAQ
50
+ ================================================================================
51
+
52
+ • The optimal concentration of long-term glycerol storage is unknown. Most labs
53
+ store bacteria in 15-25% glycerol.
54
+
55
+ • You can prepare the glycerol stock the same time you prepare your plasmid DNA.
56
+ In the morning, when you retrieve your liquid bacterial culture, take 500 μL of
57
+ culture to make your glycerol stock before you begin your plasmid mini-prep.
58
+
59
+ • Try not to freeze/thaw your glycerol stock too many times. Placing the glycerol
60
+ stock on dry ice while streaking onto LB agar will prevent it from thawing
61
+ completely and will improve the shelf life.
62
+
63
+ • It is very important that you shake the glycerol before freezing (5-6 times).
64
+ Make sure that you see one uniform solution, and there are no layers present.
65
+
66
+ • Be sure to label both the lid and the tube of a glycerol stock before you place
67
+ the sample at -80°C. Frozen tubes are hard to write on and samples stored for
68
+ long periods at -80°C can lose labels stuck to tube!
Biomni/biomni/tool/protocols/addgene/Addgene_ Protocol - Over-Agar Antibiotic Plating.txt ADDED
@@ -0,0 +1,113 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ PROTOCOL: Over-Agar Antibiotic Plating
2
+ SOURCE: https://www.addgene.org/protocols/over-agar-antibiotic-plating/
3
+ ================================================================================
4
+
5
+ INTRODUCTION
6
+ ================================================================================
7
+
8
+ This protocol describes methodology for plating antibiotic over-agar for the
9
+ selection of transformed E. coli. Over-agar spreading of antibiotic makes it
10
+ easy for an investigator to conveniently plate and select transformed cells
11
+ containing plasmids differing in their resistance genes, as one does not need to
12
+ prepare separate batches of antibiotic-containing agar. This protocol will focus
13
+ specifically on selection with carbenicillin; however it can be adapted for any
14
+ antibiotic through the use of a selection curve to determine optimal antibiotic
15
+ concentration.
16
+
17
+ Last Update: Oct. 27, 2017
18
+
19
+
20
+ EQUIPMENT
21
+ ================================================================================
22
+
23
+ • Pipette tips for both pipetting and spreading
24
+ • Bunsen burner (or other small flame source)
25
+ • Incubator
26
+
27
+
28
+ REAGENTS
29
+ ================================================================================
30
+
31
+ • 6 cm diameter LB/agar plates without antibiotic
32
+ • High concentration (100 mg/mL, 1000x) carbenicillin stock solution in sterile
33
+ water (or other antibiotic)
34
+ • E. coli transformed with a plasmid containing the carbenicillin (amp) resistance
35
+ gene (or other antibiotic resistance)
36
+
37
+
38
+ PROCEDURE
39
+ ================================================================================
40
+
41
+ Day 1
42
+
43
+ 1. Prepare carbenicillin to a concentration of 1 mg/mL – 4 mg/mL in LB medium.
44
+
45
+ The concentration of antibiotic required for effective over-agar selection has
46
+ been empirically determined. See selection curve below.
47
+
48
+ Carbenicillin is used here in place of ampicillin because carbenicillin is more
49
+ stable, so it is potentially more effective at selecting only bacteria containing
50
+ the plasmids of interest (for example, fewer satellite colonies will grow). It
51
+ is, however, more expensive.
52
+
53
+ 2. With a 6 cm diameter petri plate containing solidified LB-agar, pipette 150 µL
54
+ of carbenicillin on top of the agar and gently spread over the surface until the
55
+ liquid is mostly absorbed (there is a very small visible volume of pooled liquid
56
+ remaining on the surface).
57
+
58
+ We use the micropipette tip itself to do the spreading; the tip is gently bent
59
+ to create an "L" shape, and then used like a cell spreader. Several other
60
+ devices may be used for this purpose, provided that they fit your petri plate.
61
+
62
+ 3. Incubate the plate at room temperature for at least 30 minutes with the lid on
63
+ to give the antibiotic time to more fully absorb.
64
+
65
+ 4. During the incubation, transform DH5α E. coli cells by heatshock with the
66
+ plasmid of interest. See our transformation page for a detailed heatshock
67
+ transformation protocol.
68
+
69
+ 5. Plate 50 µL of transformed E. coli/rescue media suspension onto the agar and
70
+ gently spread over the surface until the liquid is mostly absorbed.
71
+
72
+ The spreading of cells can be done in the same way as the antibiotic, using
73
+ either a bent micropipette tip or other cell spreading device that fits the
74
+ plate.
75
+
76
+ 6. Incubate plates at 37 ℃ for 18 hours.
77
+
78
+ Day 2
79
+
80
+ 7. Observe plates for colony formation. Shown below are the results from an
81
+ experiment optimizing the concentration of carbenicillin, plated over-agar for
82
+ selection of transformed E. coli.
83
+
84
+
85
+ SAMPLE DATA
86
+ ================================================================================
87
+
88
+ Selection of E.coli on LB-agar using different concentrations of carbenicillin
89
+ plated over-agar.
90
+
91
+ Control Plate with No Carbenicillin:
92
+ Plate shows a lawn of E. coli and no selection.
93
+
94
+ 150 µL of 0.1 mg/mL Carbenicillin plated over-agar:
95
+ Plate shows a lawn of E. coli and no apparent selection.
96
+
97
+ 150 µL of 1 mg/mL Carbenicillin plated over-agar:
98
+ Plate shows several individual colonies and effective selection.
99
+
100
+ 150 µL of 2 mg/mL Carbenicillin plated over-agar:
101
+ Plate shows less individual colonies than the 1 mg/mL plate and effective selection.
102
+
103
+ 150 µL of 4 mg/mL Carbenicillin plated over-agar:
104
+ Plate shows several individual colonies with smaller size than the 1 mg/mL and 2
105
+ mg/mL plates and effective selection.
106
+
107
+ Selection Curve of Transformed E. coli after Over-Agar Plating of Carbenicillin.
108
+
109
+ The above graph displays the stock concentration of Carbenicillin stock used (150
110
+ µL per plate). Please note we have found that there is generally a broad range of
111
+ antibiotic concentrations that will work for this assay, and the above result
112
+ represents a single experiment. For publishable data, the experiment would need to
113
+ be repeated to account for variability.
Biomni/biomni/tool/protocols/addgene/Addgene_ Protocol - pLKO.1 – TRC Cloning Vector.txt ADDED
@@ -0,0 +1,630 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ PROTOCOL: pLKO.1 – TRC Cloning Vector
2
+ SOURCE: https://www.addgene.org/protocols/plko/
3
+ ================================================================================
4
+
5
+ Addgene Plasmid 10878. Protocol Version 1.0. December 2006.
6
+
7
+ Copyright Addgene 2006, All Rights Reserved. This protocol is provided for your
8
+ convenience. See "warranty information" in appendix.
9
+
10
+
11
+ A. pLKO.1-TRC CLONING VECTOR
12
+ ================================================================================
13
+
14
+ A.1 The RNAi Consortium
15
+
16
+ The pLKO.1 cloning vector is the backbone upon which The RNAi Consortium has built
17
+ a library of shRNAs directed against 15,000 human and 15,000 mouse genes. Addgene
18
+ is working with the TRC to make this shRNA cloning vector available to the
19
+ scientific community. Please cite Moffat et al., Cell 2006 Mar; 124(6):1283-98
20
+ (PubMed PMID 16564017) in all publications arising from the use of this vector.
21
+
22
+ A.2 Map of pLKO.1
23
+
24
+ pLKO.1 is a replication-incompetent lentiviral vector chosen by the TRC for
25
+ expression of shRNAs. pLKO.1 can be introduced into cells via direct transfection,
26
+ or can be converted into lentiviral particles for subsequent infection of a target
27
+ cell line. Once introduced, the puromycin resistance marker encoded in pLKO.1
28
+ allows for convenient stable selection.
29
+
30
+ pLKO.1 contains an shRNA insert. The original pLKO.1-TRC cloning vector has a 1.9kb
31
+ stuffer that is released by digestion with AgeI and EcoRI. shRNA oligos are cloned
32
+ into the AgeI and EcoRI sites in place of the stuffer. The AgeI site is destroyed
33
+ in most cases (depending on the target sequence), while the EcoRI site is preserved.
34
+ For a complete map of pLKO.1 containing the 1.9kb stuffer, visit
35
+ www.addgene.org/10878/.
36
+
37
+ Vector Elements:
38
+
39
+ • U6: Human U6 promoter drives RNA Polymerase III transcription for generation of
40
+ shRNA transcripts.
41
+
42
+ • cPPT: Central polypurine tract, cPPT, improves transduction efficiency by
43
+ facilitating nuclear import of the vector's preintegration complex in the
44
+ transduced cells.
45
+
46
+ • hPGK: Human phosphoglycerate kinase promoter drives expression of puromycin.
47
+
48
+ • Puro R: Puromycin resistance gene for selection of pLKO.1 plasmid in mammalian
49
+ cells.
50
+
51
+ • sin 3'LTR: 3' Self-inactivating long terminal repeat.
52
+
53
+ • f1 ori: f1 bacterial origin of replication.
54
+
55
+ • Amp R: Ampicillin resistance gene for selection of pLKO.1 plasmid in bacterial
56
+ cells
57
+
58
+ • pUC ori: pUC bacterial origin of replication.
59
+
60
+ • 5'LTR: 5' long terminal repeat.
61
+
62
+ • RRE: Rev response element.
63
+
64
+ A.3 Related Products
65
+
66
+ The following plasmids available from Addgene are recommended for use in conjunction
67
+ with the pLKO.1 TRC-cloning vector:
68
+
69
+ • pLKO.1 – TRC control: Negative control vector containing non-hairpin insert.
70
+
71
+ • pLKO.1 – scramble shRNA: Negative control vector containing scrambled shRNA.
72
+
73
+ • psPAX2: Packaging plasmid for producing viral particles.
74
+
75
+ • pMD2.G: Envelope plasmid for producing viral particles.
76
+
77
+ Note: pLKO.1 can also be used with packaging plasmid pCMV-dR8.2 dvpr and envelope
78
+ plasmid pCMV-VSVG from Robert Weinberg's lab. For more information, visit Addgene's
79
+ Mammalian RNAi Tools page.
80
+
81
+ Several other laboratories have deposited pLKO derived vectors that may also be
82
+ useful for your experiment. To see these vectors, visit Addgene's website and
83
+ "search for "pLKO"".
84
+
85
+
86
+ B. DESIGNING shRNA OLIGOS FOR pLKO.1
87
+ ================================================================================
88
+
89
+ B.1 Determining the Optimal 21-mer Targets in your Gene
90
+
91
+ Selection of suitable 21-mer targets in your gene is the first step toward
92
+ efficient gene silencing. Methods for target selection are continuously being
93
+ improved. Below are suggestions for target selection.
94
+
95
+ 1. Use an siRNA selection tool to determine a set of top-scoring targets for your
96
+ gene. For example, the Whitehead Institute for Biomedical Research hosts an
97
+ siRNA Selection Program that can be accessed after a free registration.
98
+
99
+ 2. Guidelines for designing siRNAs with effective gene silencing:
100
+ • Starting at 25nt downstream of the start codon (ATG), search for 21nt sequences
101
+ that match the pattern AA(N₁₉). If no suitable match is found, search for
102
+ NAR(N₁₇)YNN, where N is any nucleotide, R is a purine (A,G), and Y is a
103
+ pyrimidine (C,U).
104
+ • G-C content should be 36-52%.
105
+ • Sense 3' end should have low stability – at least one A or T between position
106
+ 15-19.
107
+ • Avoid targeting introns.
108
+ • Avoid stretches of 4 or more nucleotide repeats, especially repeated Ts because
109
+ polyT is a termination signal for RNA polymerase III.
110
+
111
+ Note that these were the prevailing guidelines when the pLKO.1 vector was
112
+ created.
113
+
114
+ Additional design rules can be found at the Broad Institute's TRC shRNA Design
115
+ Process.
116
+
117
+ 3. To minimize degradation of off-target mRNAs, use NCBI's BLAST program. Select
118
+ sequences that have at least 3 nucleotide mismatches to all unrelated genes.
119
+
120
+ TIP: Addgene recommends that you select multiple target sequences for each gene.
121
+ Some sequences will be more effective than others. In addition, demonstrating
122
+ that two different shRNAs that target the same gene can produce the same
123
+ phenotype will alleviate concerns about off-target effects.
124
+
125
+ B.2 Ordering Oligos Compatible with pLKO.1
126
+
127
+ To generate oligos for cloning into pLKO.1, insert your sense and antisense
128
+ sequences from step B.1 into the oligos below. Do not change the ends; these bases
129
+ are important for cloning the oligos into the pLKO.1 TRC-cloning vector.
130
+
131
+ Forward oligo: 5' CCGG—21bp sense—CTCGAG—21bp antisense—TTTTTG 3'
132
+
133
+ Reverse oligo: 5' AATTCAAAAA—21bp sense—CTCGAG—21bp antisense 3'
134
+
135
+ For example, if the target sequence is (AA)TGCCTACGTTAAGCTATAC, the oligos would
136
+ be:
137
+
138
+ Forward oligo: 5' CCGG AATGCCTACGTTAAGCTATAC CTCGAG GTATAGCTTAACGTAGGCATT TTTTTG 3'
139
+
140
+ Reverse oligo: 5' AATTCAAAAA AATGCCTACGTTAAGCTATAC CTCGAG GTATAGCTTAACGTAGGCATT 3'
141
+
142
+
143
+ C. CLONING OLIGOS INTO pLKO.1
144
+ ================================================================================
145
+
146
+ The pLKO.1-TRC cloning vector contains a 1.9kb stuffer that is released upon
147
+ digestion with EcoRI and AgeI. The oligos from section B contain the shRNA sequence
148
+ flanked by sequences that are compatible with the sticky ends of EcoRI and AgeI.
149
+ Forward and reverse oligos are annealed and ligated into the pLKO.1 vector,
150
+ producing a final plasmid that expresses the shRNA of interest.
151
+
152
+ C.1 Recommended Materials
153
+
154
+ • AgeI, New England Biolabs (NEB) #R0552S
155
+ • EcoRI, NEB #R0101S
156
+ • NEB buffer 1, NEB #B7001S
157
+ • NEB buffer 2, NEB #B7002S
158
+ • T4 DNA ligase, NEB #M0202S
159
+ • T4 DNA ligase buffer, NEB #B0202S
160
+ • DH5 alpha competent cells, Invitrogen #18258-012
161
+ • Qiaquick gel extraction kit, Qiagen #28704
162
+ • Low melting point agarose, Sigma #A9414
163
+ • Luria Broth Agar (LB agar), American Bioanalytical: #AB01200-02000
164
+ • Ampicillin, VWR: #7177-48-2. Use at 100 μg/mL.
165
+ • Carbenicillin, VWR: #80030-956. Use at 100 μg/mL.
166
+
167
+ C.2 Annealing Oligos
168
+
169
+ 1. Resuspend oligos in ddH₂O to a concentration of 20 μM, then mix:
170
+ • 5 μL Forward oligo
171
+ • 5 μL Reverse oligo
172
+ • 5 μL 10x NEB buffer 2
173
+ • 35 μL ddH₂O
174
+
175
+ 2. Incubate for 4 minutes at 95°C in a PCR machine or in a beaker of boiling water.
176
+
177
+ 3. If using a PCR machine, incubate the sample at 70°C for 10 minutes then slowly
178
+ cool to room temperature over the period of several hours. If using a beaker of
179
+ water, remove the beaker from the flame, and allow the water to cool to room
180
+ temperature. This will take a few hours, but it is important for the cooling to
181
+ occur slowly for the oligos to anneal.
182
+
183
+ C.3 Digesting pLKO.1 TRC Cloning Vector
184
+
185
+ The following steps were the prevailing guidelines when the pLKO.1 vector was
186
+ created. For alternative options, please refer to the enzyme manufacturer's
187
+ resources, such as NEB's online tool NEBcloner, to help guide your reaction buffer
188
+ selection when setting up double digests.
189
+
190
+ 1. Digest pLKO.1 TRC-cloning vector with AgeI. Mix:
191
+ • 6 μg pLKO.1 TRC-cloning vector (maxiprep or miniprep DNA)
192
+ • 5 μL 10x NEB buffer 1
193
+ • 1 μL AgeI
194
+ • add ddH₂O to bring to 50 μL final volume
195
+
196
+ 2. Incubate at 37°C for 2 hours.
197
+
198
+ 3. Purify with Qiaquick gel extraction kit. Elute in 30 μL of ddH₂O.
199
+
200
+ 4. Digest eluate with EcoRI. Mix:
201
+ • 30 μL pLKO.1 TRC-cloning vector digested with AgeI
202
+ • 5 μL 10x NEB buffer for EcoRI
203
+ • 1 μL EcoRI
204
+ • 14 μL ddH₂O
205
+
206
+ 5. Incubate at 37°C for 2 hours.
207
+
208
+ 6. Run digested DNA on 0.8% low melting point agarose gel until you can distinctly
209
+ see 2 bands, one 7kb and one 1.9kb. Cut out the 7kb band and place in a sterile
210
+ microcentrifuge tube.
211
+
212
+ TIP: When visualizing DNA fragments to be used for ligation, use only
213
+ long-wavelength UV light. Short wavelength UV light will increase the chance of
214
+ damaging the DNA.
215
+
216
+ 7. Purify the DNA using a Qiaquick gel extraction kit. Elute in 30 μL of ddH₂O.
217
+
218
+ 8. Measure the DNA concentration.
219
+
220
+ C.4 Ligating and Transforming into Bacteria
221
+
222
+ 1. Use your ligation method of choice. For a standard T4 ligation, mix:
223
+ • 2 μL annealed oligo from step C.2
224
+ • 20 ng digested pLKO.1 TRC-cloning vector from step C.3 (If you were unable to
225
+ measure the DNA concentration, use 1 μL)
226
+ • 2 μL 10x NEB T4 DNA ligase buffer
227
+ • 1 μL NEB T4 DNA ligase
228
+ • add ddH₂O to bring to 20 μL final volume
229
+
230
+ 2. Incubate at 16°C for 4-20 hours.
231
+
232
+ 3. Transform 2 μL of ligation mix into 25 μL competent DH5 alpha cells, following
233
+ manufacturer's protocol. Plate on LB agar plates containing 100 μg/mL ampicillin
234
+ or carbenicillin (an ampicillin analog).
235
+
236
+ Due to the long terminal repeats found in lentiviral plasmids, Addgene
237
+ currently recommends using a strain that reduces the frequency of homologous
238
+ recombination of unstable regions, such as Invitrogen Stbl3™ or NEB Stable
239
+ cells. This will ensure that the repeats will be maintained and often results in
240
+ a greater yield of DNA.
241
+
242
+
243
+ D. SCREENING FOR INSERTS
244
+ ================================================================================
245
+
246
+ You may screen for plasmids that were successfully ligated by restriction enzyme
247
+ digestion. However, once you have identified the positive clones, it is important
248
+ to verify the insert by conducting a sequencing reaction.
249
+
250
+ D.1 Recommended Materials
251
+
252
+ • DNA Miniprep Kit, Qiagen #27104
253
+ • EcoRI, NEB #R0101S
254
+ • NcoI, NEB #R0193S
255
+ • Agarose, Sigma #A9539
256
+
257
+ D.2 Screening for Inserts
258
+
259
+ Day 1:
260
+
261
+ 1. Inoculate 5 colonies from each ligation into LB + 100 μg/mL ampicillin or
262
+ carbenicillin.
263
+
264
+ Day 2:
265
+
266
+ 2. Spin down the cultures and use a miniprep kit to obtain DNA.
267
+
268
+ 3. Conduct a restriction digest with EcoRI and NcoI:
269
+ • 1 μg miniprep DNA
270
+ • 2 μL 10x NEB buffer for EcoRI
271
+ • 0.8 μL EcoRI
272
+ • 0.8 μL NcoI
273
+ • add ddH₂O to bring to 20 μL final volume
274
+
275
+ 4. Incubate at 37°C for 1-2 hours.
276
+
277
+ 5. Run the digestion products on a 1% agarose gel. You should see two fragments, a
278
+ 2kb fragment and a 5kb fragment.
279
+
280
+ 6. Sequence positive clones with pLKO.1 sequencing primer (5' CAA GGC TGT TAG AGA
281
+ GAT AAT TGG A 3').
282
+
283
+ TIP: You may need to adjust the sequencing conditions if the DNA polymerase has
284
+ difficulty reading through the secondary structure of the hairpin sequence.
285
+
286
+
287
+ E. PRODUCING LENTIVIRAL PARTICLES
288
+ ================================================================================
289
+
290
+ Before this step, you must contact your institution's Bio-Safety office to receive
291
+ permission and institution-specific instructions. You must follow safety procedures
292
+ and work in an environment (e.g. BL2+) suitable for handling HIV-derivative
293
+ viruses.
294
+
295
+ For transient knockdown of protein expression, you may transfect plasmid DNA
296
+ directly into the target cells. The shRNA will be expressed, but the DNA is
297
+ unlikely to be integrated into the host genome.
298
+
299
+ For stable loss-of-function experiments, Addgene recommends that you generate
300
+ lentiviral particles and infect the target cells. Addition of puromycin will allow
301
+ you to select for cells that stably express your shRNA of interest.
302
+
303
+ E.1 Recommended Materials
304
+
305
+ • psPAX2, Addgene #12260
306
+ • pMD2.G, Addgene #12259
307
+ • HEK-293T cells, GenHunter: #Q401
308
+ • FuGENE® 6 Transfection Reagent, Roche Applied Biosciences: #11814443001
309
+ • OPTI-MEM® serum-free media, Invitrogen: #31985
310
+ • Dulbecco's Modified Eagle Medium (DMEM), Invitrogen: #11995
311
+ • Fetal Bovine Serum (FBS), Invitrogen: #16000
312
+ • Penicillin/Streptomycin, Invitrogen: #15140-122
313
+ • Polypropylene tubes, VWR: #87003-290
314
+
315
+ Note: pLKO.1 could also be packaged using pCMV-dR8.2 dvpr and pCMV-VSVG from the
316
+ Robert Weinberg lab. For more information, visit Addgene's Mammalian RNAi Tools
317
+ page.
318
+
319
+ E.2 Protocol for Producing Lentiviral Particles
320
+
321
+ This protocol is for transfection in a 6 cm plate. The protocol can be scaled to
322
+ produce different amounts of virus as needed.
323
+
324
+ Day 1:
325
+
326
+ a. For each plasmid to be transfected, plate 7×10⁵ HEK-293T cells in 5 mL of media
327
+ in a 6 cm tissue culture plate. Incubate cells at 37°C, 5% CO₂ overnight.
328
+
329
+ Although cells should regularly be passaged in DMEM + 10% FBS with
330
+ penicillin/streptomycin, cells should be plated at this step in DMEM + 10% FBS
331
+ without antibiotics (no penicillin or streptomycin).
332
+
333
+ Day 2:
334
+
335
+ b. Perform the transfection in the late afternoon because the transfection mix
336
+ should only be incubated with the cells for 12-15 hours.
337
+
338
+ c. In polypropylene microfuge tubes (do NOT use polystyrene tubes), make a cocktail
339
+ for each transfection:
340
+ • 1 μg pLKO.1 shRNA plasmid
341
+ • 750 ng psPAX2 packaging plasmid
342
+ • 250 ng pMD2.G envelope plasmid
343
+ • to 20 μl serum-free OPTI-MEM
344
+
345
+ TIP: You may want to vary the ratio of shRNA plasmid, packaging plasmid, and
346
+ envelope plasmid to obtain the ratio that gives you the optimal viral production.
347
+
348
+ d. Create a master mix of FuGENE® 6 transfection reagent in serum-free OPTI-MEM.
349
+ Calculate the amount of Fugene® and OPTI-MEM necessary given that each reaction
350
+ will require 6 μL FuGENE® + 74 μL OPTI-MEM. For example:
351
+ • 1x master mix: 6 μL FuGENE® + 74 μL OPTI-MEM
352
+ • 5x master mix: 30 μL FuGENE® + 370 μL OPTI-MEM
353
+ • 10x master mix: 60 μL FuGENE® + 740 μL OPTI-MEM
354
+
355
+ In a polypropylene tube, add OPTI-MEM first. Pipette FuGENE® directly into the
356
+ OPTI-MEM – do not allow FuGENE® to come in contact with the walls of the tube
357
+ before it has been diluted. Mix by swirling or gently flicking the tube.
358
+ Incubate for 5 minutes at room temperature.
359
+
360
+ e. Add 80 μL of FuGENE® master mix to each tube from step c for a total volume of
361
+ 100 μL. Pipette master mix directly into the liquid and not onto the walls of
362
+ the tube. Mix by swirling or gently flicking the tube.
363
+
364
+ f. Incubate for 20-30 minutes at room temperature.
365
+
366
+ g. Retrieve HEK-293T cells from incubator. The cells should be 50-80% confluent and
367
+ in DMEM that does not contain antibiotics.
368
+
369
+ h. Without touching the sides of the dish, gently add DNA:FuGENE® mix dropwise to
370
+ cells. Swirl to disperse mixture evenly. Do not pipette or swirl too vigorously,
371
+ as you do not want to dislodge the cells from the plate.
372
+
373
+ i. Incubate cells at 37°C, 5% CO₂ for 12-15 hours.
374
+
375
+ Day 3:
376
+
377
+ j. In the morning, change the media to remove the transfection reagent. Replace with
378
+ 5 mL fresh DMEM + 10% FBS + penicillin/streptomycin. Pipette the media onto the
379
+ side of the plate so as not to disturb the transfected cells.
380
+
381
+ k. Incubate cells at 37°C, 5% CO₂ for 24 hours.
382
+
383
+ Day 4:
384
+
385
+ l. Harvest media from cells and transfer to a polypropylene storage tube. The media
386
+ contains your lentiviral particles. Store at 4°C.
387
+
388
+ m. Add 5 mL of fresh media containing antibiotics to the cells and incubate at 37°C,
389
+ 5% CO₂ for 24 hours.
390
+
391
+ Day 5:
392
+
393
+ n. Harvest media from cells and pool with media from Day 4. Spin media at 1,250 rpm
394
+ for 5 minutes to pellet any HEK-293T cells that were inadvertently collected
395
+ during harvesting.
396
+
397
+ TIP: In lieu of centrifugation, you may filter the media through a 0.45 μm
398
+ filter to remove the cells. Do not use a 0.2 μm filter, as this is likely to
399
+ shear the envelope of your virus.
400
+
401
+ o. Virus may be stored at 4°C for a few days, but should be frozen at -20°C or
402
+ -80°C for long-term storage.
403
+
404
+ TIP: Freeze/thaw cycles decrease the efficiency of the virus, so Addgene
405
+ recommends that you use the virus immediately or aliquot the media into smaller
406
+ tubes to prevent multiple freeze/thaw cycles.
407
+
408
+
409
+ F. INFECTING TARGET CELLS
410
+ ================================================================================
411
+
412
+ Lentiviral particles can efficiently infect a broad range of cell types, including
413
+ both dividing and non-dividing cells. Addition of puromycin will allow you to
414
+ select for cells that are stably expressing your shRNA of interest.
415
+
416
+ F.1. Recommended Materials
417
+
418
+ • Hexadimethrine bromide (polybrene)*, Sigma-Aldrich: #H9268
419
+ • Protamine Sulfate*, MP Biomedicals: #194729
420
+ • Puromycin*, Sigma-Aldrich: #P8833
421
+ • Target cells (varies based on your experiment)
422
+ • Culture media for target cells (varies based on your experiment)
423
+ • Materials for assay (varies based on your experiment)
424
+
425
+ Detailed protocols for preparing polybrene, protamine sulfate, and puromycin are
426
+ located in the "Appendix".
427
+
428
+ F.2. Determining the Optimal Puromycin Concentration
429
+
430
+ Each cell line responds differently to puromycin selection. Addgene strongly
431
+ recommends that you determine the optimal puromycin concentration for your cell
432
+ line before initiating your experiment.
433
+
434
+ Day 1:
435
+
436
+ a. Plate target cells in ten 6 cm plates and grow at 37°C, 5% CO₂ overnight.
437
+
438
+ Day 2:
439
+
440
+ b. The target cells should be approximately 80-90% confluent.
441
+
442
+ c. Dilute puromycin in the preferred culture media for your target cells. The final
443
+ concentration of puromycin should be from 1-10 μg/mL in 1 μg/mL increments.
444
+
445
+ d. Label plates from 1-10 and add appropriate puromycin-containing media to cells.
446
+
447
+ Days 3+:
448
+
449
+ e. Examine cells each day and change to fresh puromycin-containing media every
450
+ other day.
451
+
452
+ f. The minimum concentration of puromycin that results in complete cell death after
453
+ 3-5 days is the concentration that should be used for selection in your
454
+ experiments. (You may wish to repeat this titration with finer increments of
455
+ puromycin to determine a more precise optimal puromycin concentration.)
456
+
457
+ F.3. Protocol for Lentiviral Infection and Selection
458
+
459
+ Day 1:
460
+
461
+ a. Plate target cells and incubate at 37°C, 5% CO₂ overnight.
462
+
463
+ Day 2:
464
+
465
+ b. Target cells should be approximately 70% confluent. Change to fresh culture
466
+ media containing 8 μg/mL polybrene.
467
+
468
+ TIP: Polybrene increases the efficiency of viral infection. However, polybrene
469
+ is toxic to some cell lines. In these cell lines, substitute protamine sulfate
470
+ for polybrene.
471
+
472
+ c. Add lentiviral particle solution from step E. For a 6 cm target plate, add
473
+ between 0.5–1 mL virus (add 0.5 mL for a high MOI, and 0.1 mL for a low MOI).
474
+ Scale the amount of virus added depending on the size of your target plate.
475
+
476
+ TIP: MOI (multiplicity of infection) refers to the number of infecting viral
477
+ particles per cell. Addgene recommends that you test a range of MOIs to
478
+ determine the optimal MOI for infection and gene silencing in your target cell
479
+ line.
480
+
481
+ d. Incubate cells at 37°C, 5% CO₂ overnight.
482
+
483
+ Day 3:
484
+
485
+ e. Change to fresh media 24 hours after infection.
486
+
487
+ TIP: If viral toxicity is observed in your cell line, you may decrease the
488
+ infection time to between 4 – 20 hours. Remove the virus-containing media and
489
+ replace with fresh media. Do not add puromycin until at least 24 hours after
490
+ infection to allow for sufficient expression of the puromycin resistance gene.
491
+
492
+ f. To select for infected cells, add puromycin to the media at the concentration
493
+ determined in step F.2.
494
+
495
+ Addgene recommends that you maintain one uninfected plate of cells in parallel.
496
+ This plate will serve as a positive control for the puromycin selection.
497
+
498
+ Days 4+:
499
+
500
+ g. Change to fresh puromycin-containing media as needed every few days.
501
+
502
+ h. Assay infected cells. The following recommendations are guidelines for the
503
+ number of days you should wait until harvesting your cells. However, you should
504
+ optimize the time based on your cell line and assay:
505
+
506
+ Assay | Days post-infection
507
+ ------------------------|--------------------
508
+ mRNA knockdown | ≥3 days
509
+ (quantitative PCR) |
510
+ Protein knockdown | ≥4 days
511
+ (western blot) |
512
+ Phenotypic assay | ≥4 days
513
+
514
+
515
+ G. SAFETY
516
+ ================================================================================
517
+
518
+ BL2 safety practices should be followed when preparing and handling lentiviral
519
+ particles. Personal protective clothing should be worn at all times. Use plastic
520
+ pipettes in place of glass pipettes or needles. Liquid waste should be
521
+ decontaminated with at least 10% bleach. Laboratory materials that come in contact
522
+ with viral particles should be treated as biohazardous waste and autoclaved.
523
+ Please follow all safety guidelines from your institution and from the CDC and NIH
524
+ for work in a BL2 facility.
525
+
526
+ If you have any questions about what safety practice to follow, please contact your
527
+ institution's safety office.
528
+
529
+ For more information, please see Addgene's Biosafety Guide.
530
+
531
+
532
+ H. REFERENCES
533
+ ================================================================================
534
+
535
+ H.1. Published Articles
536
+
537
+ • Functional siRNAs and miRNAs exhibit strand bias. Khvorova A et. al. Cell. 2003.
538
+ 115:209-216.
539
+
540
+ • A lentiviral RNAi library for human and mouse genes applied to an arrayed viral
541
+ high-content screen. Moffat J et. al. Cell. 2006. 124:1283-1298.
542
+
543
+ • In vivo gene delivery and stable transduction of nondividing cells by a lentiviral
544
+ vector. Naldini L et. al. Science. 1996 272:263-267.
545
+
546
+ • Asymmetry in the assembly of the RNAi enzyme complex. Schwarz DS et. al. Cell.
547
+ 2003. 115:199-208.
548
+
549
+ • Lentivirus-delivered stable gene silencing by RNAi in primary cells. Stewart SA
550
+ et. al. RNA. 2003. 9(4):493-501.
551
+
552
+ • Multiply attenuated lentiviral vector achieves efficient gene delivery in vivo.
553
+ Zufferey R et. al. Nat Biotechnol. 1997. 15(9):871-5.
554
+
555
+ • Self-inactivating lentivirus vector for safe and efficient in vivo gene delivery.
556
+ Zufferey R et. al. J Virol. 1998. 72(12):9873-80.
557
+
558
+ H.2. Web resources
559
+
560
+ • Addgene's mammalian RNAi website: www.addgene.org/mammalianrnai
561
+
562
+ • The RNAi Consortium (TRC): www.broad.mit.edu/genome_bio/trc/rnai.html
563
+
564
+ • Background on RNAi mechanism: RNAi animation
565
+
566
+ • Whitehead siRNA Selection Program: http://sirna.wi.mit.edu/
567
+
568
+
569
+ I. APPENDIX
570
+ ================================================================================
571
+
572
+ I.1. Sequence of pLKO.1 TRC-Cloning Vector
573
+
574
+ Click here to see the sequence of pLKO.1 TRC-cloning vector. The vector is 8901
575
+ base pairs total, and the stuffer insert is shown in all capital letters.
576
+
577
+ I.2. Recipes
578
+
579
+ Luria Broth Agar (LB agar) + antibiotic
580
+
581
+ Per 40 grams of powder from American Bioanalytical catalog # AB01200-02000, LB
582
+ contains:
583
+ • 10g tryptone
584
+ • 5g yeast extract
585
+ • 10g sodium chloride
586
+ • 15g agar
587
+
588
+ Prepare LB agar solution by dissolving 40g of LB powder in 1L of distilled water.
589
+ Autoclave and cool to 55°C. Add 1mL of 100mg/mL ampicillin or carbenicillin to
590
+ obtain a final concentration of 100 μg/mL antibiotic. Pour plates and store at
591
+ 4°C.
592
+
593
+ Hexadimethrine Bromide (Polybrene)
594
+
595
+ Prepare a 1mg/mL solution of polybrene (Sigma-Aldrich catalog #H9268) in 0.9%
596
+ NaCl. Autoclave to sterilize. Stock solution is stable at 4°C for up to one year.
597
+ The powder form of polybrene is stable at 4°C for several years.
598
+
599
+ Protamine Sulfate
600
+
601
+ Store protamine sulfate (MP Biomedicals catalog #194729) at 4°C. Freely soluble
602
+ in hot water and slightly soluble in cold water.
603
+
604
+ Puromycin
605
+
606
+ Prepare a 50mg/mL stock solution of puromycin (Sigma-Aldrich catalog #P8833) in
607
+ distilled water. Sterilize by passing through a 0.22 μm filter. Store aliquots at
608
+ -20°C.
609
+
610
+ I.3. Warranty Information
611
+
612
+ Addgene is committed to providing scientists with high-quality goods and services.
613
+ Addgene makes every effort to ensure the accuracy of its literature, but realizes
614
+ that typographical or other errors may occur. Addgene makes no warranty of any kind
615
+ regarding the contents of any literature. Literature are provided to you as a guide
616
+ and on an "AS IS" "AS AVAILABLE" basis without warranty of any kind either
617
+ expressed or implied, including but not limited to the implied warranties of
618
+ fitness for a particular purpose, non-infringement, typicality, safety and
619
+ accuracy.
620
+
621
+ The distribution of any literature by Addgene is not meant to carry with it, and
622
+ does not grant any license or rights of access or use to the materials described in
623
+ the literature.
624
+
625
+ The distribution of materials by Addgene is not meant to carry with it, and does
626
+ not grant any license, express or implied, under any patent. All transfers of
627
+ materials from Addgene to any party are governed by Addgene's Terms of Use,
628
+ Addgene's Terms of Purchase, and applicable Material Transfer Agreements between
629
+ the party that deposited the material at Addgene and the party receiving the
630
+ material.
Biomni/biomni/tool/protocols/addgene/Addgene_ Using a Light Microscope Protocol.txt ADDED
@@ -0,0 +1,151 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ PROTOCOL: Using a Light Microscope Protocol
2
+ SOURCE: https://www.addgene.org/protocols/light-microscope/
3
+ ================================================================================
4
+
5
+ INTRODUCTION
6
+ ================================================================================
7
+
8
+ Microscopes are emblematic of biological research and are found in many different
9
+ types of laboratories. These tools allow you to observe specimens much smaller than
10
+ you would be able to with your naked eye, like microbes in a drop of pond water or
11
+ the cells in your cell culture dish. Microscopes come in a huge range of shapes and
12
+ sizes - from phone-sized, foldable microscopes that aren't very powerful (but are
13
+ cheap and accessible) to massive transmission electron microscopes that allow us to
14
+ see cellular components with science-fiction levels of detail. You can take entire
15
+ courses on microscopy and still have more to learn, so, for this protocol, we'll
16
+ focus on one of the most common types that you're likely to encounter: the compound
17
+ light microscope.
18
+
19
+ As the name suggests, light microscopes take advantage of the physical properties of
20
+ light to detect small objects. Two of the most important properties of a microscope
21
+ are magnification (the ability to make an image larger) and resolution (the ability
22
+ to distinguish between two discrete objects). Figure 1 depicts an image of a compound
23
+ light microscope with the main components labeled:
24
+
25
+ Main Components:
26
+ • Base
27
+ • Light Source
28
+ • Condenser and Diaphragm
29
+ • Stage
30
+ • Objective Lenses
31
+ • Focus Knobs (Fine and Coarse)
32
+ • Nosepiece
33
+ • Arm
34
+ • Ocular Lens (Eyepiece)
35
+
36
+ The route the light follows from the source to your eyes is called the light path.
37
+ Light travels from the light source through a condenser that helps concentrate the
38
+ light onto the sample, and then through the sample. However, some of that light
39
+ won't make it through the sample because different components of the specimen will
40
+ refract and reflect the light. These differences create contrast, which allows you
41
+ to distinguish objects within the sample. You can increase contrast by a) adjusting
42
+ the aperture of the condenser diaphragm to limit the amount of light hitting the
43
+ sample or b) using dyes or stains that add color to some components of the sample
44
+ but not others.
45
+
46
+ The light that does pass through the sample then travels through the objective lens
47
+ which magnifies the image, then the ocular lens, where the image is further
48
+ magnified before it finally reaches your eyes. These lenses determine the
49
+ magnification of the image and the resolution your microscope can achieve. You
50
+ achieve the highest resolution when your image is in focus, which you can control
51
+ using the focus knobs on the side of the microscope.
52
+
53
+ You may be wondering why there are multiple objective lenses. Each objective performs
54
+ essentially the same task but has different magnifying powers. When you look at the
55
+ side of an objective, you will see several pieces of information, but the most
56
+ important (for now) is the magnification power, such as 4x, 10x, or 20x. A 4x
57
+ objective magnifies the image four times the actual size, the 10x objective
58
+ magnifies it 10 times, and so on.
59
+
60
+ The ocular lens also provides magnification and the power should be provided on the
61
+ microscope; often this lens provides 10x magnification. To determine the final
62
+ magnification of your image, multiply the magnification of your objective lens by
63
+ the magnification of your ocular lens. For example, if you observe something using
64
+ the 10x objective and your ocular lens is also 10x, you would actually be seeing a
65
+ 100x magnified image of that object!
66
+
67
+
68
+ EQUIPMENT
69
+ ================================================================================
70
+
71
+ • Light Microscope
72
+ • Prepared Slides (or other sample that can fit on a microscope stage)
73
+
74
+
75
+ REAGENTS
76
+ ================================================================================
77
+
78
+ None needed
79
+
80
+
81
+ PROCEDURE
82
+ ================================================================================
83
+
84
+ 1. Set up your microscope by removing any protective cover that may be on it and
85
+ plugging in the power source for the light.
86
+
87
+ 💡 PRO TIP: If you have to move your microscope around the lab, be sure to
88
+ carry it with two hands - one hand supporting the base and the other holding
89
+ the arm - or use a cart.
90
+
91
+ 2. Revolve the nosepiece so that the lowest power objective is directly over the
92
+ stage. It is best practice to start with the lowest power objective to find your
93
+ sample.
94
+
95
+ 3. Place your slide (or other sample type) on the microscope stage. If using a
96
+ slide, you can secure it into place using the metal clips on the stage.
97
+
98
+ 4. Turn on the power source and use the stage arm to move the stage so that the
99
+ light shines onto your sample.
100
+
101
+ 5. To ensure that your sample is adequately illuminated, look through the
102
+ eyepiece. Adjust the power of the light source so that you can look through the
103
+ eyepiece comfortably. Then, close down the diaphragm and use the coarse focus
104
+ adjustment knob (the larger of the two focus knobs) until you can see the edges
105
+ of the aperture are in focus. Center the aperture in your field of view and
106
+ then slowly open the diaphragm until the edges are just out of view.
107
+
108
+ 💡 PRO TIP: Looking through a microscope's eyepiece can take some practice.
109
+ Try to keep both eyes open and adjust the position of the eyepiece so that you
110
+ can see your image through both sides.
111
+
112
+ 6. Once you are happy with the lighting, use the coarse focus knob to bring your
113
+ sample into focus. Once your sample is in focus, use the stage arm to move the
114
+ stage (and ultimately your slide) until your field of view is centered on a
115
+ region of interest. If needed, you can also use the fine focus knob (the smaller
116
+ of the focus knobs) to make minor adjustments to the focus.
117
+
118
+ 7. After you are happy with the positioning and focus of your image on the lowest
119
+ magnification, you are ready to move up to the next objective. Take your eyes
120
+ away from the eyepiece and carefully revolve the nosepiece so that the next
121
+ objective is in position over your sample. As you increase magnification, you
122
+ will notice that the objectives get larger. Be careful to avoid hitting your
123
+ sample with the objective!
124
+
125
+ 8. Once on the higher objective, you will likely need to re-adjust lighting and
126
+ focus. Increase the power of the light source by opening the diaphragm so that
127
+ you can easily see your sample. Then use the focus knobs to bring the sample
128
+ into focus.
129
+
130
+ 💡 PRO TIP: As you increase your magnification, remember that the objectives
131
+ are larger. Adjust your focus slowly so that you don't accidentally hit your
132
+ slide and risk damaging the lens or your sample.
133
+
134
+ 9. You can repeat steps 7 and 8 with progressively higher magnification lenses.
135
+
136
+ 10. Depending on why you are using the microscope you may wish to record your
137
+ observations. Some microscopes have digital cameras attached to them that
138
+ allow you to capture images directly to a computer, but many microscopes do
139
+ not and you may have to dust off your drawing skills. Regardless of your image
140
+ capture method, be sure to record the magnification used, any stains used in
141
+ your sample, and sample information so that you or others can interpret your
142
+ images in the future.
143
+
144
+
145
+ CONCLUSION
146
+ ================================================================================
147
+
148
+ Like any important laboratory instrument, you should be sure to take care of your
149
+ microscope. Bumps, scratches, and dust can easily impair microscope performance. Be
150
+ sure to clean up your work area and microscope after use and store the microscope
151
+ appropriately.
Biomni/biomni/tool/protocols/addgene/Addgene_ Water Bath Protocol.txt ADDED
@@ -0,0 +1,92 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ PROTOCOL: Water Bath Protocol
2
+ SOURCE: https://www.addgene.org/protocols/water-bath/
3
+ ================================================================================
4
+
5
+ INTRODUCTION
6
+ ================================================================================
7
+
8
+ A water bath is a piece of laboratory equipment that helps bring your materials to
9
+ a particular temperature, catalyze chemical reactions such as restriction digests
10
+ needed in molecular biology, and thaw cell lines. There are many different types of
11
+ water baths that exist as scientists work with tubes and bottles of different sizes
12
+ in the lab. Some water baths contain individual slots for heating up tubes while
13
+ other water baths hold many liters of water to incubate bottles and containers.
14
+ Water baths can also be placed in walk-in refrigerators to achieve a temperature
15
+ between 4°C and room temperature. This general protocol suits almost any water bath.
16
+
17
+
18
+ EQUIPMENT
19
+ ================================================================================
20
+
21
+ • Water Bath
22
+ • 10% bleach or 70% ethanol
23
+ • Distilled water
24
+ • Disinfectant
25
+ • Thermometer
26
+ • Water bath weights and floats
27
+
28
+
29
+ REAGENTS
30
+ ================================================================================
31
+
32
+ None needed
33
+
34
+
35
+ PROCEDURE
36
+ ================================================================================
37
+
38
+ 1. Ensure that the water bath and water bath cover are cleaned before filling the
39
+ water bath with water. You may use a 10% bleach solution or a 70% ethanol
40
+ solution to wipe down the inside of the water bath.
41
+
42
+ 💡 PRO TIP: To properly maintain the water bath, empty and clean it regularly.
43
+
44
+ 2. Determine the amount of water needed to fill the water bath, and be sure to
45
+ know what the maximum fill capacity is. Look for a "fill" line inside the water
46
+ bath or read the user manual. If you're filling up a water bath with individual
47
+ slots for tubes, remember that when you add the tube to the slots, it can cause
48
+ the water level to rise up and flow over the edge of the slide.
49
+
50
+ 3. Fill the water bath with distilled water, not tap water, to prevent salts from
51
+ accumulating on the surfaces of the water bath as the water evaporates from the
52
+ tub. Disinfectant may be added to prevent growth of bacteria or fungi. There are
53
+ disinfectants designed to be used in water baths with instructions on the
54
+ bottle, for example, number of drops per liter.
55
+
56
+ 4. Place a thermometer in the water bath. Oftentimes, the water bath will have a
57
+ spot to secure the thermometer in place.
58
+
59
+ 5. Turn the water bath on and set the appropriate temperature as described in your
60
+ protocol. How to set the temperature will vary depending on the model of water
61
+ bath, but will likely involve a dial or a digital display you can set to the
62
+ correct temperature. Set up your water bath so that it will reach the desired
63
+ temperature by the time you need it for your experiment. Water baths tend to
64
+ heat up relatively slowly. Place the water bath cover on the top of the water
65
+ bath to prevent evaporation and maintain the desired temperature. This also
66
+ helps the water bath heat up quicker.
67
+
68
+ 💡 PRO TIP: Set up the water bath 30 minutes to 1 hour before you need to use
69
+ it to allow the temperature to stabilize.
70
+
71
+ 6. Use water resistant markers, such as permanent markers, to label your tubes
72
+ and/or containers that will go into the water bath. If you'll need to sterilize
73
+ your items after removing them from the water bath, be sure to use a marker that
74
+ is also resistant to chemicals such as ethanol. Writing on the tops of the
75
+ tubes and lids of items to be placed in the water bath is often better than
76
+ writing on the side of the tube. This way, as items are floating, you do not
77
+ need to necessarily maneuver the bottles or tubes to identify them.
78
+
79
+ 7. Once the water bath is at the correct temperature, remove the lid and place your
80
+ tubes or bottles into the water bath. Many items may float in the water bath
81
+ when they are placed inside. Water bath floats can be used to secure tubes in
82
+ place and water bath weights can hold bottles in place.
83
+
84
+ 8. After putting your tubes or bottles in the water bath, place the lid back on.
85
+ Note the time that you've put your materials in the water bath so that you know
86
+ when to take them out after your incubation is over.
87
+
88
+ Note: If you regularly use a water bath in the lab, you can leave the water in it
89
+ from previous uses. However, you will still need to regularly clean out the water
90
+ bath even if you are using disinfectants as described above in step 3. You will
91
+ also need to maintain the appropriate water level in the water bath so before use,
92
+ make sure that there is enough water inside.
Biomni/biomni/tool/protocols/thermofisher/BrdU Staining Protocol for Flow Cytometry _ Thermo Fisher Scientific - US.txt ADDED
@@ -0,0 +1,85 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ PROTOCOL: BrdU Staining Protocol for Flow Cytometry
2
+ SOURCE: https://www.thermofisher.com/us/en/home/references/protocols/cell-and-tissue-analysis/protocols/brdu-staining-flow-cytometry.html
3
+ ================================================================================
4
+
5
+ OVERVIEW
6
+ ================================================================================
7
+
8
+ The BrdU Staining Kits for flow cytometry provide all necessary reagents and buffers for identifying and analyzing proliferating cells using flow cytometry. BrdU, or 5-bromo-2'-deoxyuridine, is a synthetic analog of thymidine that integrates into newly synthesized DNA during the S-phase of mitosis. This kit allows for the staining of BrdU-incorporated DNA, facilitating the examination of cell proliferation alongside other cell surface or intracellular markers of interest.
9
+
10
+ MATERIALS PROVIDED IN KIT
11
+ ================================================================================
12
+
13
+ • BrdU (32.5 mM, 10 mg/mL): 5 x 1 mL sterile vials; store at ≤–70°C. Avoid multiple freeze-thaws. Vial should be opened under sterile conditions.
14
+ • DNase I (1 mg/mL; 0.3 mg/vial): 10 x 0.3 mL vials; store at ≤–70°C. Each vial can be used to treat 10 samples. Avoid multiple freeze-thaws.
15
+ • Anti-BrdU Antibody (clone BU20A), fluorochrome-conjugated: 1 x 100 test vial; store at 2–8°C.
16
+ • BrdU Staining Buffer Concentrate (4X): 1 x 30 mL bottle; store at 2–8°C. This buffer contains formaldehyde. Please handle appropriately.
17
+ • Fixation/Permeabilization Diluent: 1 x 100 mL bottle; store at 2–8°C.
18
+
19
+ OTHER MATERIALS NEEDED
20
+ ================================================================================
21
+
22
+ • Sterile 1X PBS
23
+ • Flow Cytometry Staining Buffer
24
+ • 12 x 75 mm round bottom test tubes
25
+ • Optional:
26
+ - Primary antibodies (directly conjugated)
27
+ - Fixable Viability Dye (FVD): eFluor 450, eFluor 660, eFluor 780, eFluor 506, eFluor 520, or eFluor 455UV
28
+
29
+ NOTE: The antibodies used for surface staining can be added after BrdU and Fixable Viability Dye labeling (but before fixation). Alternatively, if the antibody(s) is known to recognize a formaldehyde-fixed epitope, it can be added concurrently with the BrdU antibody.
30
+
31
+ BrdU staining buffer working solution preparation
32
+
33
+ Prepare fresh 1X BrdU Staining Buffer working solution by diluting BrdU Staining Buffer Concentrate (1 part) with Fixation/Permeabilization Diluent (3 parts). Mix by gentle inversion, do not vortex. You will need 1 mL of the 1X BrdU Staining Buffer working solution for each sample. Use caution and handle appropriately as the buffer contains formaldehyde.
34
+
35
+ PROTOCOL
36
+ ================================================================================
37
+
38
+ Step 1: In vitro labeling of 10⁵ to 10⁸ dividing cells with 10 µM BrdU for 45 minutes at 37°C.
39
+
40
+ 1. Under sterile conditions thaw BrdU on ice and dilute to a working concentration of 1 mM with sterile 1X PBS.
41
+ 2. Add 10 µM BrdU to each sample. (For example, add 10 µL of 1 mM BrdU directly to every milliliter of tissue culture medium.)
42
+ 3. Incubate your cells long enough to allow incorporation of BrdU. The timing will be dependent on your culture conditions (e.g., stimulants used) and the proliferation kinetics of your cells. Therefore, the incubation time will need to be determined empirically. After the incubation, harvest the cells.
43
+ 4. Wash cells by adding 2 mL of Flow Cytometry Staining Buffer (or azide-free PBS if proceeding to Step 2) and then centrifuge at 300–400 x g for 5 minutes at room temperature. Discard the supernatant.
44
+
45
+ Step 2: [Optional] Stain with fixable viability dye (FVD) to label dead cells before fixation.
46
+
47
+ Note: Allow the vial of Fixable Viability Dye to equilibrate to room temperature before opening. The dye must be used with azide-free PBS. For consistent staining of cells in tubes, do not stain in less than 0.5 mL. Please refer to our website Best Protocols (Viability Staining Protocol, Protocol C: Staining Dead Cells with Fixable Viability eFluor Dyes) for additional information. (Proceed to Step 3 if a FVD will not be used.)
48
+
49
+ 1. Wash cells one additional time with 2 mL of azide-free PBS, as described in step 4 above.
50
+ 2. Resuspend cells at 1–10 x 10⁶ cells/mL in azide-free PBS.
51
+ 3. Add 1 μL of Fixable Viability Dye per 1 mL of cells and vortex immediately.
52
+ 4. Incubate for 30 minutes at 2–8°C in the dark.
53
+ 5. Wash cells 1–2 times with Flow Cytometry Staining Buffer, as described in step 4 above.
54
+ 6. Resuspend cells at 1–10 x 10⁶ cells/mL in Flow Cytometry Staining Buffer.
55
+
56
+ Step 3: [Optional] Stain cell surface antigen(s).
57
+
58
+ Note: For additional information, please refer to Staining Cell Surface Antigens for Flow Cytometry. Proceed to Step 4 if cell surface antigens will not be examined or if the antibody(s) is known to recognize a formaldehyde-fixed epitope.
59
+
60
+ 1. Aliquot 50 μL of cell suspension to each tube or well. The cell number should be determined empirically but can range from 10⁵ to 10⁸ cells/test per tube.
61
+ 2. Add the recommended amount (refer to the Technical Data Sheet for each product) of each fluorochrome-conjugated primary antibody(s) in an appropriate volume of Flow Cytometry Staining Buffer such that the final staining volume is 100 μL. (For example, add 50 μL of an antibody mix to 50 μL of cells.) Mix gently.
62
+ 3. Incubate for at least 30 minutes at 2–8°C in the dark.
63
+ 4. Wash the cells twice with Flow Cytometry Staining Buffer, as described in step 4 under Step 1.
64
+
65
+ Step 4: Fix cells and intracellularly stain with Anti-BrdU.
66
+
67
+ 1. Thaw DNase I solution on ice. Once thawed, prepare a working solution of DNase I by adding 300 µL of the DNase I solution to 700 µL of Flow Cytometry Staining Buffer and mix gently. Store on ice until ready for use in step 6 below.
68
+ 2. If cells were not stained in Steps 2 or 3, aliquot 100 μL of cell suspension to each tube. The cell number should be determined empirically but can range from 10⁵ to 10⁸ cells/tube.
69
+ 3. Gently resuspend the cells by pulse-vortexing once. This resuspension step is critical before the addition of the freshly prepared 1X BrdU Staining Buffer working solution.
70
+ 4. Add 1 mL of freshly prepared 1X BrdU Staining Buffer working solution and mix gently. Incubate for 15 minutes at room temperature in the dark. Incubations may go longer (up to 14 hours) but should be determined empirically for each cell type.
71
+ 5. Wash cells twice with Flow Cytometry Staining Buffer, as described in step 4 under Step 1.
72
+ 6. Add 100 µL of the DNase I working solution that was prepared in step 1 to each sample. Incubate for 1 hour at 37°C in the dark.
73
+ 7. Wash cells twice with Flow Cytometry Staining Buffer, as described in step 4 under Step 1.
74
+ 8. Add 5 µL of Anti-BrdU fluorochrome-conjugated antibody per sample. Mix and incubate for 20–30 minutes at room temperature in the dark.
75
+
76
+ NOTE: Antibodies against intracellular antigens or surface antigens not stained in Step 3 may be added here. The antibodies used for surface staining at this step must recognize a fixed epitope. If an antibody only recognizes a native epitope or if this information is unknown, we recommend surface staining at Step 3.
77
+
78
+ 9. Wash cells twice with Flow Cytometry Staining Buffer, as described in step 4 under Step 1.
79
+
80
+ Step 5: Acquire data on a flow cytometer.
81
+
82
+ PRODUCT CATALOG NUMBERS
83
+ ================================================================================
84
+
85
+ 8811-6600-42, 8817-6600-42, 8812-6600-42, 8848-6600-42, 8846-6600-42, 00-5525-00, 00-4222-26
Biomni/biomni/tool/tool_description/__pycache__/biophysics.cpython-311.pyc ADDED
Binary file (1.85 kB). View file
 
Biomni/biomni/tool/tool_description/__pycache__/support_tools.cpython-311.pyc ADDED
Binary file (2.25 kB). View file
 
Biomni/biomni/tool/tool_description/__pycache__/synthetic_biology.cpython-311.pyc ADDED
Binary file (5.55 kB). View file
 
Biomni/biomni/tool/tool_description/biochemistry.py ADDED
@@ -0,0 +1,243 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ description = [
2
+ {
3
+ "description": "Analyzes circular dichroism (CD) spectroscopy data to "
4
+ "determine secondary structure and thermal stability.",
5
+ "name": "analyze_circular_dichroism_spectra",
6
+ "optional_parameters": [
7
+ {
8
+ "default": None,
9
+ "description": "Temperature values (°C) for thermal denaturation experiment",
10
+ "name": "temperature_data",
11
+ "type": "list or numpy.ndarray",
12
+ },
13
+ {
14
+ "default": None,
15
+ "description": "CD signal values at specific wavelength across different temperatures",
16
+ "name": "thermal_cd_data",
17
+ "type": "list or numpy.ndarray",
18
+ },
19
+ {
20
+ "default": "./",
21
+ "description": "Directory to save result files",
22
+ "name": "output_dir",
23
+ "type": "str",
24
+ },
25
+ ],
26
+ "required_parameters": [
27
+ {
28
+ "default": None,
29
+ "description": 'Name of the biomolecule sample (e.g., "Znf706", "G-quadruplex")',
30
+ "name": "sample_name",
31
+ "type": "str",
32
+ },
33
+ {
34
+ "default": None,
35
+ "description": 'Type of biomolecule ("protein" or "nucleic_acid")',
36
+ "name": "sample_type",
37
+ "type": "str",
38
+ },
39
+ {
40
+ "default": None,
41
+ "description": "Wavelength values in nm for CD spectrum",
42
+ "name": "wavelength_data",
43
+ "type": "list or numpy.ndarray",
44
+ },
45
+ {
46
+ "default": None,
47
+ "description": "CD signal intensity values (typically in mdeg or Δε)",
48
+ "name": "cd_signal_data",
49
+ "type": "list or numpy.ndarray",
50
+ },
51
+ ],
52
+ },
53
+ {
54
+ "description": "Calculate numeric values for various structural features of an RNA secondary structure.",
55
+ "name": "analyze_rna_secondary_structure_features",
56
+ "optional_parameters": [
57
+ {
58
+ "default": None,
59
+ "description": "The RNA sequence corresponding to "
60
+ "the structure. If provided, "
61
+ "sequence-dependent energy "
62
+ "calculations will be performed.",
63
+ "name": "sequence",
64
+ "type": "str",
65
+ }
66
+ ],
67
+ "required_parameters": [
68
+ {
69
+ "default": None,
70
+ "description": "RNA secondary structure in "
71
+ "dot-bracket notation (e.g., "
72
+ '"(((...)))"). Parentheses represent '
73
+ "base pairs, dots represent unpaired "
74
+ "bases.",
75
+ "name": "dot_bracket_structure",
76
+ "type": "str",
77
+ }
78
+ ],
79
+ },
80
+ {
81
+ "description": "Analyze protease kinetics data from fluorogenic peptide "
82
+ "cleavage assays, fit the data to Michaelis-Menten kinetics, "
83
+ "and determine key kinetic parameters.",
84
+ "name": "analyze_protease_kinetics",
85
+ "optional_parameters": [
86
+ {
87
+ "default": "protease_kinetics",
88
+ "description": "Prefix for output files",
89
+ "name": "output_prefix",
90
+ "type": "str",
91
+ },
92
+ {
93
+ "default": "./",
94
+ "description": "Directory to save output files",
95
+ "name": "output_dir",
96
+ "type": "str",
97
+ },
98
+ ],
99
+ "required_parameters": [
100
+ {
101
+ "default": None,
102
+ "description": "Array of time points (in seconds) at which measurements were taken",
103
+ "name": "time_points",
104
+ "type": "numpy.ndarray",
105
+ },
106
+ {
107
+ "default": None,
108
+ "description": "2D array of fluorescence "
109
+ "measurements where each row "
110
+ "corresponds to a different "
111
+ "substrate concentration and each "
112
+ "column corresponds to a time point",
113
+ "name": "fluorescence_data",
114
+ "type": "numpy.ndarray",
115
+ },
116
+ {
117
+ "default": None,
118
+ "description": "Array of substrate concentrations "
119
+ "(in μM) corresponding to each row "
120
+ "in fluorescence_data",
121
+ "name": "substrate_concentrations",
122
+ "type": "numpy.ndarray",
123
+ },
124
+ {
125
+ "default": None,
126
+ "description": "Concentration of the protease enzyme (in μM)",
127
+ "name": "enzyme_concentration",
128
+ "type": "float",
129
+ },
130
+ ],
131
+ },
132
+ {
133
+ "description": "Performs in vitro enzyme kinetics assay and analyzes the dose-dependent effects of modulators.",
134
+ "name": "analyze_enzyme_kinetics_assay",
135
+ "optional_parameters": [
136
+ {
137
+ "default": None,
138
+ "description": "Dictionary of modulators where keys "
139
+ "are modulator names and values are "
140
+ "lists of concentrations in μM",
141
+ "name": "modulators",
142
+ "type": "dict",
143
+ },
144
+ {
145
+ "default": None,
146
+ "description": "Time points in minutes for time-course measurements",
147
+ "name": "time_points",
148
+ "type": "list or numpy.ndarray",
149
+ },
150
+ {
151
+ "default": "./",
152
+ "description": "Directory to save output files",
153
+ "name": "output_dir",
154
+ "type": "str",
155
+ },
156
+ ],
157
+ "required_parameters": [
158
+ {
159
+ "default": None,
160
+ "description": "Name of the purified enzyme being tested",
161
+ "name": "enzyme_name",
162
+ "type": "str",
163
+ },
164
+ {
165
+ "default": None,
166
+ "description": "List of substrate concentrations in μM for kinetic analysis",
167
+ "name": "substrate_concentrations",
168
+ "type": "list or numpy.ndarray",
169
+ },
170
+ {
171
+ "default": None,
172
+ "description": "Concentration of the enzyme in nM",
173
+ "name": "enzyme_concentration",
174
+ "type": "float",
175
+ },
176
+ ],
177
+ },
178
+ {
179
+ "description": "Analyzes isothermal titration calorimetry (ITC) data to "
180
+ "determine binding affinity and thermodynamic parameters.",
181
+ "name": "analyze_itc_binding_thermodynamics",
182
+ "optional_parameters": [
183
+ {
184
+ "default": None,
185
+ "description": "Path to CSV or TSV file containing "
186
+ "ITC thermogram data with columns "
187
+ "for injection number, injection "
188
+ "volume, and heat released/absorbed.",
189
+ "name": "itc_data_path",
190
+ "type": "str",
191
+ },
192
+ {
193
+ "default": None,
194
+ "description": "Raw ITC thermogram data as a numpy "
195
+ "array with shape (n_injections, 3) "
196
+ "containing injection number, "
197
+ "injection volume, and heat.",
198
+ "name": "itc_data",
199
+ "type": "numpy.ndarray",
200
+ },
201
+ {
202
+ "default": 298.15,
203
+ "description": "Temperature in Kelvin at which the experiment was conducted.",
204
+ "name": "temperature",
205
+ "type": "float",
206
+ },
207
+ {
208
+ "default": None,
209
+ "description": "Initial concentration of protein in the cell in molar (M).",
210
+ "name": "protein_concentration",
211
+ "type": "float",
212
+ },
213
+ {
214
+ "default": None,
215
+ "description": "Concentration of ligand in the syringe in molar (M).",
216
+ "name": "ligand_concentration",
217
+ "type": "float",
218
+ },
219
+ ],
220
+ "required_parameters": [],
221
+ },
222
+ {
223
+ "description": "Perform multiple sequence alignment and phylogenetic "
224
+ "analysis to identify conserved protein regions.",
225
+ "name": "analyze_protein_conservation",
226
+ "optional_parameters": [
227
+ {
228
+ "default": "./",
229
+ "description": "Directory to save output files",
230
+ "name": "output_dir",
231
+ "type": "str",
232
+ }
233
+ ],
234
+ "required_parameters": [
235
+ {
236
+ "default": None,
237
+ "description": "List of protein sequences in FASTA format from multiple organisms.",
238
+ "name": "protein_sequences",
239
+ "type": "list of str",
240
+ }
241
+ ],
242
+ },
243
+ ]
Biomni/biomni/tool/tool_description/bioimaging.py ADDED
@@ -0,0 +1,510 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ description = [
2
+ # Segmentation functions
3
+ {
4
+ "description": "Split a 4D NIfTI file into separate modality files for nnUNet processing. "
5
+ "Handles BRATS dataset format with FLAIR, T1w, t1gd, and T2w modalities.",
6
+ "name": "split_modalities",
7
+ "optional_parameters": [
8
+ {
9
+ "default": "BRAT",
10
+ "description": "Base name for the case files",
11
+ "name": "case_name",
12
+ "type": "str",
13
+ },
14
+ ],
15
+ "required_parameters": [
16
+ {
17
+ "default": None,
18
+ "description": "Path to the 4D NIfTI file to split",
19
+ "name": "input_file",
20
+ "type": "str",
21
+ },
22
+ {
23
+ "default": None,
24
+ "description": "Directory to save the split modality files",
25
+ "name": "output_dir",
26
+ "type": "str",
27
+ },
28
+ ],
29
+ },
30
+ {
31
+ "description": "Prepare input data for nnUNet by handling both 4D and pre-split modality files. "
32
+ "Automatically detects file format and prepares data accordingly.",
33
+ "name": "prepare_input_for_nnunet",
34
+ "optional_parameters": [
35
+ {
36
+ "default": "BRAT",
37
+ "description": "Base name for the case files",
38
+ "name": "case_name",
39
+ "type": "str",
40
+ },
41
+ ],
42
+ "required_parameters": [
43
+ {
44
+ "default": None,
45
+ "description": "Path to input file or directory",
46
+ "name": "input_path",
47
+ "type": "str",
48
+ },
49
+ {
50
+ "default": None,
51
+ "description": "Directory to save prepared files",
52
+ "name": "output_dir",
53
+ "type": "str",
54
+ },
55
+ ],
56
+ },
57
+ {
58
+ "description": "Segment images using nnUNet with proper environment setup. "
59
+ "Supports brain tumor segmentation and other medical image segmentation tasks.",
60
+ "name": "segment_with_nn_unet",
61
+ "optional_parameters": [
62
+ {
63
+ "default": "3d_fullres",
64
+ "description": "Model type for segmentation",
65
+ "name": "model_type",
66
+ "type": "str",
67
+ },
68
+ {
69
+ "default": [0, 1, 2, 3, 4],
70
+ "description": "Model folds to use for ensemble prediction",
71
+ "name": "folds",
72
+ "type": "list",
73
+ },
74
+ {
75
+ "default": False,
76
+ "description": "Use test time augmentation",
77
+ "name": "use_tta",
78
+ "type": "bool",
79
+ },
80
+ {
81
+ "default": 1,
82
+ "description": "Number of threads for preprocessing",
83
+ "name": "num_threads",
84
+ "type": "int",
85
+ },
86
+ {
87
+ "default": True,
88
+ "description": "Use mixed precision for faster inference",
89
+ "name": "mixed_precision",
90
+ "type": "bool",
91
+ },
92
+ {
93
+ "default": True,
94
+ "description": "Enable verbose logging",
95
+ "name": "verbose",
96
+ "type": "bool",
97
+ },
98
+ {
99
+ "default": True,
100
+ "description": "Automatically prepare input for nnUNet",
101
+ "name": "auto_prepare_input",
102
+ "type": "bool",
103
+ },
104
+ {
105
+ "default": None,
106
+ "description": "Path to nnUNet results folder",
107
+ "name": "results_folder",
108
+ "type": "str",
109
+ },
110
+ ],
111
+ "required_parameters": [
112
+ {
113
+ "default": None,
114
+ "description": "Path to input image file or directory",
115
+ "name": "image_path",
116
+ "type": "str",
117
+ },
118
+ {
119
+ "default": None,
120
+ "description": "Directory to save segmentation results",
121
+ "name": "output_dir",
122
+ "type": "str",
123
+ },
124
+ {
125
+ "default": None,
126
+ "description": "Task identifier (e.g., 'Task001_BrainTumour')",
127
+ "name": "task_id",
128
+ "type": "str",
129
+ },
130
+ ],
131
+ },
132
+ {
133
+ "description": "Create and save visualization of segmentation results using nilearn. "
134
+ "Generates overlay plots and multiple anatomical views.",
135
+ "name": "create_segmentation_visualization",
136
+ "optional_parameters": [
137
+ {
138
+ "default": "./visualization_output",
139
+ "description": "Directory to save visualization images",
140
+ "name": "output_dir",
141
+ "type": "str",
142
+ },
143
+ ],
144
+ "required_parameters": [
145
+ {
146
+ "default": None,
147
+ "description": "Path to original MRI file",
148
+ "name": "original_mri",
149
+ "type": "str",
150
+ },
151
+ {
152
+ "default": None,
153
+ "description": "Path to segmentation file",
154
+ "name": "segmentation",
155
+ "type": "str",
156
+ },
157
+ ],
158
+ },
159
+ # Image registration functions
160
+ {
161
+ "description": "Perform rigid image registration between two medical images using SimpleITK. "
162
+ "Rigid registration handles translation and rotation only, preserving shape and size. "
163
+ "Includes preprocessing, similarity metrics calculation, and visualization generation.",
164
+ "name": "quick_rigid_registration",
165
+ "optional_parameters": [
166
+ {
167
+ "default": "mutual_information",
168
+ "description": "Similarity metric for registration: 'mutual_information', 'mean_squares', 'correlation', or 'normalized_correlation'",
169
+ "name": "metric",
170
+ "type": "str",
171
+ },
172
+ {
173
+ "default": "gradient_descent",
174
+ "description": "Optimization method: 'gradient_descent', 'lbfgsb', 'powell', or 'amoeba'",
175
+ "name": "optimizer",
176
+ "type": "str",
177
+ },
178
+ {
179
+ "default": True,
180
+ "description": "Whether to preprocess images (denoising and normalization)",
181
+ "name": "preprocess",
182
+ "type": "bool",
183
+ },
184
+ {
185
+ "default": True,
186
+ "description": "Whether to create visualization plots",
187
+ "name": "create_visualizations",
188
+ "type": "bool",
189
+ },
190
+ {
191
+ "default": 0.01,
192
+ "description": "Learning rate for gradient descent optimizer",
193
+ "name": "learning_rate",
194
+ "type": "float",
195
+ },
196
+ {
197
+ "default": 100,
198
+ "description": "Maximum number of optimization iterations",
199
+ "name": "number_of_iterations",
200
+ "type": "int",
201
+ },
202
+ {
203
+ "default": 1e-6,
204
+ "description": "Convergence tolerance for optimization",
205
+ "name": "gradient_convergence_tolerance",
206
+ "type": "float",
207
+ },
208
+ ],
209
+ "required_parameters": [
210
+ {
211
+ "default": None,
212
+ "description": "Path to the reference (fixed) image file (supports .nii, .nii.gz, .nrrd, .mha, .mhd formats)",
213
+ "name": "fixed_image_path",
214
+ "type": "str",
215
+ },
216
+ {
217
+ "default": None,
218
+ "description": "Path to the image to be registered (moving image)",
219
+ "name": "moving_image_path",
220
+ "type": "str",
221
+ },
222
+ {
223
+ "default": None,
224
+ "description": "Directory path to save registration results and outputs",
225
+ "name": "output_dir",
226
+ "type": "str",
227
+ },
228
+ ],
229
+ },
230
+ {
231
+ "description": "Perform affine image registration between two medical images using SimpleITK. "
232
+ "Affine registration handles translation, rotation, scaling, and shearing. "
233
+ "More flexible than rigid registration but still preserves parallel lines.",
234
+ "name": "quick_affine_registration",
235
+ "optional_parameters": [
236
+ {
237
+ "default": "mutual_information",
238
+ "description": "Similarity metric for registration: 'mutual_information', 'mean_squares', 'correlation', or 'normalized_correlation'",
239
+ "name": "metric",
240
+ "type": "str",
241
+ },
242
+ {
243
+ "default": "gradient_descent",
244
+ "description": "Optimization method: 'gradient_descent', 'lbfgsb', 'powell', or 'amoeba'",
245
+ "name": "optimizer",
246
+ "type": "str",
247
+ },
248
+ {
249
+ "default": True,
250
+ "description": "Whether to preprocess images (denoising and normalization)",
251
+ "name": "preprocess",
252
+ "type": "bool",
253
+ },
254
+ {
255
+ "default": True,
256
+ "description": "Whether to create visualization plots",
257
+ "name": "create_visualizations",
258
+ "type": "bool",
259
+ },
260
+ {
261
+ "default": 0.01,
262
+ "description": "Learning rate for gradient descent optimizer",
263
+ "name": "learning_rate",
264
+ "type": "float",
265
+ },
266
+ {
267
+ "default": 100,
268
+ "description": "Maximum number of optimization iterations",
269
+ "name": "number_of_iterations",
270
+ "type": "int",
271
+ },
272
+ {
273
+ "default": 1e-6,
274
+ "description": "Convergence tolerance for optimization",
275
+ "name": "gradient_convergence_tolerance",
276
+ "type": "float",
277
+ },
278
+ ],
279
+ "required_parameters": [
280
+ {
281
+ "default": None,
282
+ "description": "Path to the reference (fixed) image file (supports .nii, .nii.gz, .nrrd, .mha, .mhd formats)",
283
+ "name": "fixed_image_path",
284
+ "type": "str",
285
+ },
286
+ {
287
+ "default": None,
288
+ "description": "Path to the image to be registered (moving image)",
289
+ "name": "moving_image_path",
290
+ "type": "str",
291
+ },
292
+ {
293
+ "default": None,
294
+ "description": "Directory path to save registration results and outputs",
295
+ "name": "output_dir",
296
+ "type": "str",
297
+ },
298
+ ],
299
+ },
300
+ {
301
+ "description": "Perform deformable (B-spline) image registration between two medical images using SimpleITK. "
302
+ "Deformable registration allows for local non-linear transformations, handling complex deformations. "
303
+ "Most flexible but computationally intensive registration method.",
304
+ "name": "quick_deformable_registration",
305
+ "optional_parameters": [
306
+ {
307
+ "default": "mutual_information",
308
+ "description": "Similarity metric for registration: 'mutual_information', 'mean_squares', 'correlation', or 'normalized_correlation'",
309
+ "name": "metric",
310
+ "type": "str",
311
+ },
312
+ {
313
+ "default": "gradient_descent",
314
+ "description": "Optimization method: 'gradient_descent', 'lbfgsb', 'powell', or 'amoeba'",
315
+ "name": "optimizer",
316
+ "type": "str",
317
+ },
318
+ {
319
+ "default": True,
320
+ "description": "Whether to preprocess images (denoising and normalization)",
321
+ "name": "preprocess",
322
+ "type": "bool",
323
+ },
324
+ {
325
+ "default": True,
326
+ "description": "Whether to create visualization plots",
327
+ "name": "create_visualizations",
328
+ "type": "bool",
329
+ },
330
+ {
331
+ "default": 0.01,
332
+ "description": "Learning rate for gradient descent optimizer",
333
+ "name": "learning_rate",
334
+ "type": "float",
335
+ },
336
+ {
337
+ "default": 100,
338
+ "description": "Maximum number of optimization iterations",
339
+ "name": "number_of_iterations",
340
+ "type": "int",
341
+ },
342
+ {
343
+ "default": 1e-6,
344
+ "description": "Convergence tolerance for optimization",
345
+ "name": "gradient_convergence_tolerance",
346
+ "type": "float",
347
+ },
348
+ {
349
+ "default": 4,
350
+ "description": "Number of B-spline control points per dimension for deformable registration",
351
+ "name": "number_of_control_points",
352
+ "type": "int",
353
+ },
354
+ ],
355
+ "required_parameters": [
356
+ {
357
+ "default": None,
358
+ "description": "Path to the reference (fixed) image file (supports .nii, .nii.gz, .nrrd, .mha, .mhd formats)",
359
+ "name": "fixed_image_path",
360
+ "type": "str",
361
+ },
362
+ {
363
+ "default": None,
364
+ "description": "Path to the image to be registered (moving image)",
365
+ "name": "moving_image_path",
366
+ "type": "str",
367
+ },
368
+ {
369
+ "default": None,
370
+ "description": "Directory path to save registration results and outputs",
371
+ "name": "output_dir",
372
+ "type": "str",
373
+ },
374
+ ],
375
+ },
376
+ {
377
+ "description": "Perform batch registration of multiple images to a single reference image. "
378
+ "Automatically processes all medical image files in a directory and registers them to the fixed reference. "
379
+ "Supports rigid, affine, or deformable registration for all images.",
380
+ "name": "batch_register_images",
381
+ "optional_parameters": [
382
+ {
383
+ "default": "rigid",
384
+ "description": "Type of registration to perform: 'rigid', 'affine', or 'deformable'",
385
+ "name": "transform_type",
386
+ "type": "str",
387
+ },
388
+ {
389
+ "default": "mutual_information",
390
+ "description": "Similarity metric for registration: 'mutual_information', 'mean_squares', 'correlation', or 'normalized_correlation'",
391
+ "name": "metric",
392
+ "type": "str",
393
+ },
394
+ {
395
+ "default": "gradient_descent",
396
+ "description": "Optimization method: 'gradient_descent', 'lbfgsb', 'powell', or 'amoeba'",
397
+ "name": "optimizer",
398
+ "type": "str",
399
+ },
400
+ {
401
+ "default": True,
402
+ "description": "Whether to preprocess images (denoising and normalization)",
403
+ "name": "preprocess",
404
+ "type": "bool",
405
+ },
406
+ {
407
+ "default": True,
408
+ "description": "Whether to create visualization plots for each registration",
409
+ "name": "create_visualizations",
410
+ "type": "bool",
411
+ },
412
+ {
413
+ "default": 0.01,
414
+ "description": "Learning rate for gradient descent optimizer",
415
+ "name": "learning_rate",
416
+ "type": "float",
417
+ },
418
+ {
419
+ "default": 100,
420
+ "description": "Maximum number of optimization iterations",
421
+ "name": "number_of_iterations",
422
+ "type": "int",
423
+ },
424
+ {
425
+ "default": 1e-6,
426
+ "description": "Convergence tolerance for optimization",
427
+ "name": "gradient_convergence_tolerance",
428
+ "type": "float",
429
+ },
430
+ ],
431
+ "required_parameters": [
432
+ {
433
+ "default": None,
434
+ "description": "Path to the reference (fixed) image file",
435
+ "name": "fixed_image_path",
436
+ "type": "str",
437
+ },
438
+ {
439
+ "default": None,
440
+ "description": "Directory path containing multiple images to register (supports .nii, .nii.gz, .nrrd, .mha, .mhd formats)",
441
+ "name": "moving_images_dir",
442
+ "type": "str",
443
+ },
444
+ {
445
+ "default": None,
446
+ "description": "Directory path to save registration results for all images",
447
+ "name": "output_dir",
448
+ "type": "str",
449
+ },
450
+ ],
451
+ },
452
+ {
453
+ "description": "Calculate similarity metrics between two medical images. "
454
+ "Supports mutual information, mean squared error, correlation, and normalized cross correlation.",
455
+ "name": "calculate_similarity_metrics",
456
+ "required_parameters": [
457
+ {
458
+ "default": None,
459
+ "description": "Path to the first image file",
460
+ "name": "image1_path",
461
+ "type": "str",
462
+ },
463
+ {
464
+ "default": None,
465
+ "description": "Path to the second image file",
466
+ "name": "image2_path",
467
+ "type": "str",
468
+ },
469
+ ],
470
+ },
471
+ {
472
+ "description": "Create visualization plots for registration results. "
473
+ "Generates comparison plots, difference images, overlays, and metric charts.",
474
+ "name": "create_registration_visualization",
475
+ "optional_parameters": [
476
+ {
477
+ "default": "registration",
478
+ "description": "Prefix for output files",
479
+ "name": "prefix",
480
+ "type": "str",
481
+ },
482
+ ],
483
+ "required_parameters": [
484
+ {
485
+ "default": None,
486
+ "description": "Path to the reference (fixed) image file",
487
+ "name": "fixed_image_path",
488
+ "type": "str",
489
+ },
490
+ {
491
+ "default": None,
492
+ "description": "Path to the original moving image file",
493
+ "name": "moving_image_path",
494
+ "type": "str",
495
+ },
496
+ {
497
+ "default": None,
498
+ "description": "Path to the registered image file",
499
+ "name": "registered_image_path",
500
+ "type": "str",
501
+ },
502
+ {
503
+ "default": None,
504
+ "description": "Directory to save visualization files",
505
+ "name": "output_dir",
506
+ "type": "str",
507
+ },
508
+ ],
509
+ },
510
+ ]
Biomni/biomni/tool/tool_description/cancer_biology.py ADDED
@@ -0,0 +1,242 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ description = [
2
+ {
3
+ "description": "Analyze DNA Damage Response (DDR) network alterations and dependencies in cancer samples.",
4
+ "name": "analyze_ddr_network_in_cancer",
5
+ "optional_parameters": [
6
+ {
7
+ "default": "./results",
8
+ "description": "Directory to save output files",
9
+ "name": "output_dir",
10
+ "type": "str",
11
+ }
12
+ ],
13
+ "required_parameters": [
14
+ {
15
+ "default": None,
16
+ "description": "Path to gene expression data file (CSV format with genes as rows, samples as columns)",
17
+ "name": "expression_data_path",
18
+ "type": "str",
19
+ },
20
+ {
21
+ "default": None,
22
+ "description": "Path to mutation data file (CSV "
23
+ "format with genes as rows, samples "
24
+ "as columns, values indicating "
25
+ "mutation status)",
26
+ "name": "mutation_data_path",
27
+ "type": "str",
28
+ },
29
+ ],
30
+ },
31
+ {
32
+ "description": "Analyze flow cytometry data to quantify senescent and apoptotic cell populations.",
33
+ "name": "analyze_cell_senescence_and_apoptosis",
34
+ "optional_parameters": [],
35
+ "required_parameters": [
36
+ {
37
+ "default": None,
38
+ "description": "Path to the FCS file containing "
39
+ "flow cytometry data with "
40
+ "measurements for "
41
+ "senescence-associated "
42
+ "β-galactosidase (SA-β-Gal) and "
43
+ "Annexin V/7-AAD staining",
44
+ "name": "fcs_file_path",
45
+ "type": "str",
46
+ }
47
+ ],
48
+ },
49
+ {
50
+ "description": "Detects and annotates somatic mutations in tumor samples "
51
+ "compared to matched normal samples using GATK Mutect2 for "
52
+ "variant calling, GATK FilterMutectCalls for filtering, and "
53
+ "SnpEff for functional annotation.",
54
+ "name": "detect_and_annotate_somatic_mutations",
55
+ "optional_parameters": [
56
+ {
57
+ "default": "GRCh38.105",
58
+ "description": "SnpEff database to use for annotation",
59
+ "name": "snpeff_database",
60
+ "type": "str",
61
+ }
62
+ ],
63
+ "required_parameters": [
64
+ {
65
+ "default": None,
66
+ "description": "Path to the tumor sample BAM file",
67
+ "name": "tumor_bam",
68
+ "type": "str",
69
+ },
70
+ {
71
+ "default": None,
72
+ "description": "Path to the matched normal sample BAM file",
73
+ "name": "normal_bam",
74
+ "type": "str",
75
+ },
76
+ {
77
+ "default": None,
78
+ "description": "Path to the reference genome FASTA file",
79
+ "name": "reference_genome",
80
+ "type": "str",
81
+ },
82
+ {
83
+ "default": None,
84
+ "description": "Prefix for output files",
85
+ "name": "output_prefix",
86
+ "type": "str",
87
+ },
88
+ ],
89
+ },
90
+ {
91
+ "description": "Detects and characterizes structural variations (SVs) in "
92
+ "genomic sequencing data using LUMPY for SV detection "
93
+ "followed by annotation with COSMIC and/or ClinVar databases.",
94
+ "name": "detect_and_characterize_structural_variations",
95
+ "optional_parameters": [
96
+ {
97
+ "default": None,
98
+ "description": "Path to the COSMIC database for cancer annotation",
99
+ "name": "cosmic_db_path",
100
+ "type": "str",
101
+ },
102
+ {
103
+ "default": None,
104
+ "description": "Path to the ClinVar database for clinical annotation",
105
+ "name": "clinvar_db_path",
106
+ "type": "str",
107
+ },
108
+ ],
109
+ "required_parameters": [
110
+ {
111
+ "default": None,
112
+ "description": "Path to the aligned sequencing data in BAM format",
113
+ "name": "bam_file_path",
114
+ "type": "str",
115
+ },
116
+ {
117
+ "default": None,
118
+ "description": "Path to the reference genome in FASTA format",
119
+ "name": "reference_genome_path",
120
+ "type": "str",
121
+ },
122
+ {
123
+ "default": None,
124
+ "description": "Directory where results will be saved",
125
+ "name": "output_dir",
126
+ "type": "str",
127
+ },
128
+ ],
129
+ },
130
+ {
131
+ "description": "Performs Non-negative Matrix Factorization (NMF) on gene "
132
+ "expression data to extract metagenes and their associated "
133
+ "sample weights for tumor subtype identification.",
134
+ "name": "perform_gene_expression_nmf_analysis",
135
+ "optional_parameters": [
136
+ {
137
+ "default": 10,
138
+ "description": "Number of metagenes (components) to extract.",
139
+ "name": "n_components",
140
+ "type": "int",
141
+ },
142
+ {
143
+ "default": True,
144
+ "description": "Whether to normalize the expression data before applying NMF.",
145
+ "name": "normalize",
146
+ "type": "bool",
147
+ },
148
+ {
149
+ "default": "nmf_results",
150
+ "description": "Directory to save the output files.",
151
+ "name": "output_dir",
152
+ "type": "str",
153
+ },
154
+ {
155
+ "default": 42,
156
+ "description": "Random seed for reproducibility.",
157
+ "name": "random_state",
158
+ "type": "int",
159
+ },
160
+ ],
161
+ "required_parameters": [
162
+ {
163
+ "default": None,
164
+ "description": "Path to a CSV or TSV file "
165
+ "containing gene expression data "
166
+ "with genes as rows and samples as "
167
+ "columns. Values should be "
168
+ "non-negative.",
169
+ "name": "expression_data_path",
170
+ "type": "str",
171
+ }
172
+ ],
173
+ },
174
+ {
175
+ "description": "CNVkit-based copy number workflow performing CNV segmentation, purity & ploidy approximation, simplified HRD-style metrics, and focal amplification/deletion detection in selected genes.",
176
+ "name": "analyze_copy_number_purity_ploidy_and_focal_events",
177
+ "optional_parameters": [
178
+ {
179
+ "name": "normal_bam",
180
+ "type": "str",
181
+ "default": None,
182
+ "description": "Path to matched normal BAM (recommended for CNVkit)",
183
+ },
184
+ {
185
+ "name": "output_dir",
186
+ "type": "str",
187
+ "default": "cn_analysis_results",
188
+ "description": "Directory to store CNVkit workflow outputs",
189
+ },
190
+ {
191
+ "name": "targets_bed",
192
+ "type": "str",
193
+ "default": None,
194
+ "description": "BED file of target regions for CNVkit (panel/exome)",
195
+ },
196
+ {
197
+ "name": "antitargets_bed",
198
+ "type": "str",
199
+ "default": None,
200
+ "description": "BED file of antitarget regions for CNVkit",
201
+ },
202
+ {
203
+ "name": "gene_bed",
204
+ "type": "str",
205
+ "default": None,
206
+ "description": "Gene BED (chrom, start, end, gene) for focal event annotation",
207
+ },
208
+ {
209
+ "name": "focal_genes",
210
+ "type": "list[str]",
211
+ "default": None,
212
+ "description": "Genes to highlight for focal events (defaults: MYC, ERBB2, CDKN2A)",
213
+ },
214
+ {
215
+ "name": "log2_amp_threshold",
216
+ "type": "float",
217
+ "default": 1.0,
218
+ "description": "Log2 ratio threshold for focal amplification calls",
219
+ },
220
+ {
221
+ "name": "log2_del_threshold",
222
+ "type": "float",
223
+ "default": -1.0,
224
+ "description": "Log2 ratio threshold for focal deep deletion calls",
225
+ },
226
+ ],
227
+ "required_parameters": [
228
+ {
229
+ "name": "tumor_bam",
230
+ "type": "str",
231
+ "default": None,
232
+ "description": "Path to tumor BAM (indexed)",
233
+ },
234
+ {
235
+ "name": "reference_genome",
236
+ "type": "str",
237
+ "default": None,
238
+ "description": "Path to reference genome FASTA",
239
+ },
240
+ ],
241
+ },
242
+ ]
Biomni/biomni/tool/tool_description/cell_biology.py ADDED
@@ -0,0 +1,163 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ description = [
2
+ {
3
+ "description": "Quantify the percentage of cells in each cell cycle phase "
4
+ "using Calcofluor white stained microscopy images.",
5
+ "name": "quantify_cell_cycle_phases_from_microscopy",
6
+ "optional_parameters": [
7
+ {
8
+ "default": "./results",
9
+ "description": "Directory to save results",
10
+ "name": "output_dir",
11
+ "type": "str",
12
+ }
13
+ ],
14
+ "required_parameters": [
15
+ {
16
+ "default": None,
17
+ "description": "List of file paths to microscopy images of cells stained with Calcofluor white",
18
+ "name": "image_paths",
19
+ "type": "List[str]",
20
+ }
21
+ ],
22
+ },
23
+ {
24
+ "description": "Quantify cell motility features from time-lapse microscopy "
25
+ "images and cluster cells based on motility patterns.",
26
+ "name": "quantify_and_cluster_cell_motility",
27
+ "optional_parameters": [
28
+ {
29
+ "default": "./results",
30
+ "description": "Directory to save output files",
31
+ "name": "output_dir",
32
+ "type": "str",
33
+ },
34
+ {
35
+ "default": 3,
36
+ "description": "Number of motility pattern clusters to identify",
37
+ "name": "num_clusters",
38
+ "type": "int",
39
+ },
40
+ ],
41
+ "required_parameters": [
42
+ {
43
+ "default": None,
44
+ "description": "Path to directory containing time-lapse microscopy images in sequential order",
45
+ "name": "image_sequence_path",
46
+ "type": "str",
47
+ }
48
+ ],
49
+ },
50
+ {
51
+ "description": "Performs Fluorescence-Activated Cell Sorting (FACS) to "
52
+ "enrich cell populations based on fluorescence "
53
+ "characteristics.",
54
+ "name": "perform_facs_cell_sorting",
55
+ "optional_parameters": [
56
+ {
57
+ "default": None,
58
+ "description": "Minimum threshold for the "
59
+ "fluorescence parameter. Cells below "
60
+ "this value will be excluded",
61
+ "name": "threshold_min",
62
+ "type": "float",
63
+ },
64
+ {
65
+ "default": None,
66
+ "description": "Maximum threshold for the "
67
+ "fluorescence parameter. Cells above "
68
+ "this value will be excluded",
69
+ "name": "threshold_max",
70
+ "type": "float",
71
+ },
72
+ {
73
+ "default": "sorted_cells.csv",
74
+ "description": "Filename to save the sorted cell population data",
75
+ "name": "output_file",
76
+ "type": "str",
77
+ },
78
+ ],
79
+ "required_parameters": [
80
+ {
81
+ "default": None,
82
+ "description": "Path to the FCS file containing flow cytometry data",
83
+ "name": "cell_suspension_data",
84
+ "type": "str",
85
+ },
86
+ {
87
+ "default": None,
88
+ "description": "The fluorescence parameter to use for sorting (e.g., 'GFP', 'FITC', 'PE')",
89
+ "name": "fluorescence_parameter",
90
+ "type": "str",
91
+ },
92
+ ],
93
+ },
94
+ {
95
+ "description": "Analyze flow cytometry data to identify and quantify "
96
+ "specific cell populations based on surface markers.",
97
+ "name": "analyze_flow_cytometry_immunophenotyping",
98
+ "optional_parameters": [
99
+ {
100
+ "default": None,
101
+ "description": "Spillover/compensation matrix to correct for fluorescence overlap",
102
+ "name": "compensation_matrix",
103
+ "type": "numpy.ndarray",
104
+ },
105
+ {
106
+ "default": "./results",
107
+ "description": "Directory to save the results",
108
+ "name": "output_dir",
109
+ "type": "str",
110
+ },
111
+ ],
112
+ "required_parameters": [
113
+ {
114
+ "default": None,
115
+ "description": "Path to the FCS file containing flow cytometry data",
116
+ "name": "fcs_file_path",
117
+ "type": "str",
118
+ },
119
+ {
120
+ "default": None,
121
+ "description": "Dictionary defining the gating "
122
+ "strategy. Each key is a population "
123
+ "name, and each value is a list of "
124
+ "tuples (marker, operator, "
125
+ "threshold)",
126
+ "name": "gating_strategy",
127
+ "type": "dict",
128
+ },
129
+ ],
130
+ },
131
+ {
132
+ "description": "Quantifies metrics of mitochondrial morphology and membrane "
133
+ "potential from fluorescence microscopy images.",
134
+ "name": "analyze_mitochondrial_morphology_and_potential",
135
+ "optional_parameters": [
136
+ {
137
+ "default": "./output",
138
+ "description": "Directory to save output files",
139
+ "name": "output_dir",
140
+ "type": "str",
141
+ }
142
+ ],
143
+ "required_parameters": [
144
+ {
145
+ "default": None,
146
+ "description": "Path to the fluorescence microscopy "
147
+ "image showing mitochondrial "
148
+ "morphology (e.g., MTS-GFP)",
149
+ "name": "morphology_image_path",
150
+ "type": "str",
151
+ },
152
+ {
153
+ "default": None,
154
+ "description": "Path to the fluorescence microscopy "
155
+ "image showing mitochondrial "
156
+ "membrane potential (e.g., TMRE "
157
+ "staining)",
158
+ "name": "potential_image_path",
159
+ "type": "str",
160
+ },
161
+ ],
162
+ },
163
+ ]
Biomni/biomni/tool/tool_description/database.py ADDED
@@ -0,0 +1,731 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ description = [
2
+ {
3
+ "description": "Query the UniProt REST API using either natural language or a direct endpoint.",
4
+ "name": "query_uniprot",
5
+ "optional_parameters": [
6
+ {
7
+ "default": None,
8
+ "description": "Full or partial UniProt API endpoint URL to query directly (e.g., 'https://rest.uniprot.org/uniprotkb/P01308')",
9
+ "name": "endpoint",
10
+ "type": "str",
11
+ },
12
+ {"default": 5, "description": "Maximum number of results to return", "name": "max_results", "type": "int"},
13
+ ],
14
+ "required_parameters": [
15
+ {
16
+ "default": None,
17
+ "description": 'Natural language query about proteins (e.g., "Find information about human insulin")',
18
+ "name": "prompt",
19
+ "type": "str",
20
+ }
21
+ ],
22
+ },
23
+ {
24
+ "description": "Query the AlphaFold Database API for protein structure predictions or metadata; optionally download structures.",
25
+ "name": "query_alphafold",
26
+ "optional_parameters": [
27
+ {
28
+ "name": "endpoint",
29
+ "type": "str",
30
+ "description": "Endpoint: 'prediction', 'summary', or 'annotations'",
31
+ "default": "prediction",
32
+ },
33
+ {"name": "residue_range", "type": "str", "description": "Residue range as 'start-end'", "default": None},
34
+ {"name": "download", "type": "bool", "description": "Whether to download structure file", "default": False},
35
+ {"name": "output_dir", "type": "str", "description": "Directory to save downloaded files", "default": None},
36
+ {"name": "file_format", "type": "str", "description": "Download format 'pdb' or 'cif'", "default": "pdb"},
37
+ {
38
+ "name": "model_version",
39
+ "type": "str",
40
+ "description": "AlphaFold model version (e.g., v4)",
41
+ "default": "v4",
42
+ },
43
+ {"name": "model_number", "type": "int", "description": "Model number (1-5)", "default": 1},
44
+ ],
45
+ "required_parameters": [
46
+ {
47
+ "name": "uniprot_id",
48
+ "type": "str",
49
+ "description": "UniProt accession ID (e.g., 'P12345')",
50
+ "default": None,
51
+ }
52
+ ],
53
+ },
54
+ {
55
+ "description": "Query the InterPro REST API using natural language or a direct endpoint.",
56
+ "name": "query_interpro",
57
+ "optional_parameters": [
58
+ {"name": "endpoint", "type": "str", "description": "Endpoint path or full URL", "default": None},
59
+ {"name": "max_results", "type": "int", "description": "Max results per page", "default": 3},
60
+ ],
61
+ "required_parameters": [
62
+ {
63
+ "name": "prompt",
64
+ "type": "str",
65
+ "description": "Natural language query about protein domains/families",
66
+ "default": None,
67
+ }
68
+ ],
69
+ },
70
+ {
71
+ "description": "Query the RCSB PDB database using natural language or a direct structured query.",
72
+ "name": "query_pdb",
73
+ "optional_parameters": [
74
+ {"name": "query", "type": "dict", "description": "Direct RCSB Search API query JSON", "default": None},
75
+ {"name": "max_results", "type": "int", "description": "Maximum results to return", "default": 3},
76
+ ],
77
+ "required_parameters": [
78
+ {
79
+ "name": "prompt",
80
+ "type": "str",
81
+ "description": "Natural language query about protein structures",
82
+ "default": None,
83
+ }
84
+ ],
85
+ },
86
+ {
87
+ "description": "Retrieve detailed data and/or download files for PDB identifiers.",
88
+ "name": "query_pdb_identifiers",
89
+ "optional_parameters": [
90
+ {
91
+ "name": "return_type",
92
+ "type": "str",
93
+ "description": "'entry', 'assembly', 'polymer_entity', etc.",
94
+ "default": "entry",
95
+ },
96
+ {"name": "download", "type": "bool", "description": "Download PDB structure files", "default": False},
97
+ {
98
+ "name": "attributes",
99
+ "type": "List[str]",
100
+ "description": "Specific attributes to retrieve",
101
+ "default": None,
102
+ },
103
+ ],
104
+ "required_parameters": [
105
+ {"name": "identifiers", "type": "List[str]", "description": "List of PDB identifiers", "default": None}
106
+ ],
107
+ },
108
+ {
109
+ "description": "Take a natural language prompt and convert it to a structured KEGG API query.",
110
+ "name": "query_kegg",
111
+ "optional_parameters": [
112
+ {"name": "endpoint", "type": "str", "description": "Direct KEGG endpoint to query", "default": None},
113
+ {"name": "verbose", "type": "bool", "description": "Return detailed results", "default": True},
114
+ ],
115
+ "required_parameters": [
116
+ {"name": "prompt", "type": "str", "description": "Natural language query about KEGG data", "default": None}
117
+ ],
118
+ },
119
+ {
120
+ "description": "Query the STRING protein interaction database using natural language or direct endpoint.",
121
+ "name": "query_stringdb",
122
+ "optional_parameters": [
123
+ {"name": "endpoint", "type": "str", "description": "Full URL to query directly", "default": None},
124
+ {
125
+ "name": "download_image",
126
+ "type": "bool",
127
+ "description": "Download image results if endpoint is image",
128
+ "default": False,
129
+ },
130
+ {"name": "output_dir", "type": "str", "description": "Directory to save downloaded files", "default": None},
131
+ {"name": "verbose", "type": "bool", "description": "Return detailed results", "default": True},
132
+ ],
133
+ "required_parameters": [
134
+ {
135
+ "name": "prompt",
136
+ "type": "str",
137
+ "description": "Natural language query about protein interactions",
138
+ "default": None,
139
+ }
140
+ ],
141
+ },
142
+ {
143
+ "description": "Query the IUCN Red List API using natural language or a direct endpoint.",
144
+ "name": "query_iucn",
145
+ "optional_parameters": [
146
+ {
147
+ "name": "prompt",
148
+ "type": "str",
149
+ "description": "Natural language query about species conservation status",
150
+ "default": None,
151
+ },
152
+ {"name": "endpoint", "type": "str", "description": "Endpoint name or full URL", "default": None},
153
+ {"name": "verbose", "type": "bool", "description": "Return detailed results", "default": True},
154
+ ],
155
+ "required_parameters": [{"name": "token", "type": "str", "description": "IUCN API token", "default": ""}],
156
+ },
157
+ {
158
+ "description": "Query the Paleobiology Database (PBDB) API using natural language or a direct endpoint.",
159
+ "name": "query_paleobiology",
160
+ "optional_parameters": [
161
+ {"name": "endpoint", "type": "str", "description": "API endpoint name or full URL", "default": None},
162
+ {"name": "verbose", "type": "bool", "description": "Return detailed results", "default": True},
163
+ ],
164
+ "required_parameters": [
165
+ {
166
+ "name": "prompt",
167
+ "type": "str",
168
+ "description": "Natural language query about fossil records",
169
+ "default": None,
170
+ }
171
+ ],
172
+ },
173
+ {
174
+ "description": "Query the JASPAR REST API for transcription factor binding profiles.",
175
+ "name": "query_jaspar",
176
+ "optional_parameters": [
177
+ {"name": "endpoint", "type": "str", "description": "API endpoint path or full URL", "default": None},
178
+ {"name": "verbose", "type": "bool", "description": "Return detailed results", "default": True},
179
+ ],
180
+ "required_parameters": [
181
+ {
182
+ "name": "prompt",
183
+ "type": "str",
184
+ "description": "Natural language query about TF binding profiles",
185
+ "default": None,
186
+ }
187
+ ],
188
+ },
189
+ {
190
+ "description": "Query the World Register of Marine Species (WoRMS) REST API using natural language or a direct endpoint.",
191
+ "name": "query_worms",
192
+ "optional_parameters": [
193
+ {"name": "endpoint", "type": "str", "description": "Full URL or endpoint specification", "default": None},
194
+ {"name": "verbose", "type": "bool", "description": "Return detailed results", "default": True},
195
+ ],
196
+ "required_parameters": [
197
+ {
198
+ "name": "prompt",
199
+ "type": "str",
200
+ "description": "Natural language query about marine species",
201
+ "default": None,
202
+ }
203
+ ],
204
+ },
205
+ {
206
+ "description": "Query the cBioPortal REST API using natural language or a direct endpoint.",
207
+ "name": "query_cbioportal",
208
+ "optional_parameters": [
209
+ {"name": "endpoint", "type": "str", "description": "API endpoint path or full URL", "default": None},
210
+ {"name": "verbose", "type": "bool", "description": "Return detailed results", "default": True},
211
+ ],
212
+ "required_parameters": [
213
+ {
214
+ "name": "prompt",
215
+ "type": "str",
216
+ "description": "Natural language query about cancer genomics",
217
+ "default": None,
218
+ }
219
+ ],
220
+ },
221
+ {
222
+ "description": "Convert a natural language prompt into a structured ClinVar search query and run it.",
223
+ "name": "query_clinvar",
224
+ "optional_parameters": [
225
+ {"name": "search_term", "type": "str", "description": "Direct ClinVar search term", "default": None},
226
+ {"name": "max_results", "type": "int", "description": "Maximum number of results", "default": 3},
227
+ ],
228
+ "required_parameters": [
229
+ {
230
+ "name": "prompt",
231
+ "type": "str",
232
+ "description": "Natural language query about genetic variants",
233
+ "default": None,
234
+ }
235
+ ],
236
+ },
237
+ {
238
+ "description": "Query the NCBI GEO database (GDS/GEOPROFILES) using natural language or direct search term.",
239
+ "name": "query_geo",
240
+ "optional_parameters": [
241
+ {"name": "search_term", "type": "str", "description": "Direct GEO search term", "default": None},
242
+ {"name": "max_results", "type": "int", "description": "Maximum number of results", "default": 3},
243
+ ],
244
+ "required_parameters": [
245
+ {
246
+ "name": "prompt",
247
+ "type": "str",
248
+ "description": "Natural language query about expression data",
249
+ "default": None,
250
+ }
251
+ ],
252
+ },
253
+ {
254
+ "description": "Query the NCBI dbSNP database using natural language or direct search term.",
255
+ "name": "query_dbsnp",
256
+ "optional_parameters": [
257
+ {"name": "search_term", "type": "str", "description": "Direct dbSNP search term", "default": None},
258
+ {"name": "max_results", "type": "int", "description": "Maximum number of results", "default": 3},
259
+ ],
260
+ "required_parameters": [
261
+ {
262
+ "name": "prompt",
263
+ "type": "str",
264
+ "description": "Natural language query about SNPs/variants",
265
+ "default": None,
266
+ }
267
+ ],
268
+ },
269
+ {
270
+ "description": "Query the UCSC Genome Browser API using natural language or a direct endpoint.",
271
+ "name": "query_ucsc",
272
+ "optional_parameters": [
273
+ {"name": "endpoint", "type": "str", "description": "Full URL or endpoint spec", "default": None},
274
+ {"name": "verbose", "type": "bool", "description": "Return detailed results", "default": True},
275
+ ],
276
+ "required_parameters": [
277
+ {
278
+ "name": "prompt",
279
+ "type": "str",
280
+ "description": "Natural language query about genomic data",
281
+ "default": None,
282
+ }
283
+ ],
284
+ },
285
+ {
286
+ "description": "Query the Ensembl REST API using natural language or a direct endpoint.",
287
+ "name": "query_ensembl",
288
+ "optional_parameters": [
289
+ {"name": "endpoint", "type": "str", "description": "Direct Ensembl endpoint or full URL", "default": None},
290
+ {"name": "verbose", "type": "bool", "description": "Return detailed results", "default": True},
291
+ ],
292
+ "required_parameters": [
293
+ {
294
+ "name": "prompt",
295
+ "type": "str",
296
+ "description": "Natural language query about genomic data",
297
+ "default": None,
298
+ }
299
+ ],
300
+ },
301
+ {
302
+ "description": "Query the OpenTargets Platform API using natural language or a direct GraphQL query.",
303
+ "name": "query_opentarget",
304
+ "optional_parameters": [
305
+ {"name": "query", "type": "str", "description": "Direct GraphQL query string", "default": None},
306
+ {"name": "variables", "type": "dict", "description": "Variables for GraphQL", "default": None},
307
+ {"name": "verbose", "type": "bool", "description": "Return detailed results", "default": False},
308
+ ],
309
+ "required_parameters": [
310
+ {
311
+ "name": "prompt",
312
+ "type": "str",
313
+ "description": "Natural language query about targets/diseases",
314
+ "default": None,
315
+ }
316
+ ],
317
+ },
318
+ {
319
+ "description": "Query the Monarch Initiative API using natural language or a direct endpoint.",
320
+ "name": "query_monarch",
321
+ "optional_parameters": [
322
+ {"name": "endpoint", "type": "str", "description": "Direct endpoint or full URL", "default": None},
323
+ {"name": "max_results", "type": "int", "description": "Max results (adds limit param)", "default": 2},
324
+ {"name": "verbose", "type": "bool", "description": "Return detailed results", "default": False},
325
+ ],
326
+ "required_parameters": [
327
+ {
328
+ "name": "prompt",
329
+ "type": "str",
330
+ "description": "Natural language query about genes/diseases/phenotypes",
331
+ "default": None,
332
+ }
333
+ ],
334
+ },
335
+ {
336
+ "description": "Query the OpenFDA API using natural language or direct parameters.",
337
+ "name": "query_openfda",
338
+ "optional_parameters": [
339
+ {"name": "endpoint", "type": "str", "description": "Direct endpoint or full URL", "default": None},
340
+ {"name": "max_results", "type": "int", "description": "Max results (limit)", "default": 100},
341
+ {"name": "verbose", "type": "bool", "description": "Return detailed results", "default": True},
342
+ {"name": "search_params", "type": "dict", "description": "Search parameters mapping", "default": None},
343
+ {"name": "sort_params", "type": "dict", "description": "Sort parameters mapping", "default": None},
344
+ {"name": "count_params", "type": "str", "description": "Field to count", "default": None},
345
+ {"name": "skip_results", "type": "int", "description": "Skip for pagination", "default": 0},
346
+ ],
347
+ "required_parameters": [
348
+ {
349
+ "name": "prompt",
350
+ "type": "str",
351
+ "description": "Natural language query about OpenFDA data",
352
+ "default": None,
353
+ }
354
+ ],
355
+ },
356
+ {
357
+ "description": "Query the GWAS Catalog API using natural language or a direct endpoint.",
358
+ "name": "query_gwas_catalog",
359
+ "optional_parameters": [
360
+ {"name": "endpoint", "type": "str", "description": "Endpoint name (e.g., 'studies')", "default": None},
361
+ {"name": "max_results", "type": "int", "description": "Max results per page (size)", "default": 3},
362
+ ],
363
+ "required_parameters": [
364
+ {"name": "prompt", "type": "str", "description": "Natural language query about GWAS data", "default": None}
365
+ ],
366
+ },
367
+ {
368
+ "description": "Query gnomAD for variants in a gene using natural language or direct gene symbol.",
369
+ "name": "query_gnomad",
370
+ "optional_parameters": [
371
+ {"name": "gene_symbol", "type": "str", "description": "Gene symbol (e.g., 'BRCA1')", "default": None},
372
+ {"name": "verbose", "type": "bool", "description": "Return detailed results", "default": True},
373
+ ],
374
+ "required_parameters": [
375
+ {
376
+ "name": "prompt",
377
+ "type": "str",
378
+ "description": "Natural language query about genetic variants",
379
+ "default": None,
380
+ }
381
+ ],
382
+ },
383
+ {
384
+ "description": "Identify a DNA or protein sequence using NCBI BLAST.",
385
+ "name": "blast_sequence",
386
+ "optional_parameters": [],
387
+ "required_parameters": [
388
+ {"name": "sequence", "type": "str", "description": "Query sequence", "default": None},
389
+ {"name": "database", "type": "str", "description": "BLAST database (e.g., core_nt or nr)", "default": None},
390
+ {"name": "program", "type": "str", "description": "BLAST program (blastn or blastp)", "default": None},
391
+ ],
392
+ },
393
+ {
394
+ "description": "Query the Reactome database using natural language or a direct endpoint; optionally download pathway diagrams.",
395
+ "name": "query_reactome",
396
+ "optional_parameters": [
397
+ {"name": "endpoint", "type": "str", "description": "Direct endpoint or full URL", "default": None},
398
+ {
399
+ "name": "download",
400
+ "type": "bool",
401
+ "description": "Download pathway diagram if available",
402
+ "default": False,
403
+ },
404
+ {"name": "output_dir", "type": "str", "description": "Directory to save downloads", "default": None},
405
+ {"name": "verbose", "type": "bool", "description": "Return detailed results", "default": True},
406
+ ],
407
+ "required_parameters": [
408
+ {
409
+ "name": "prompt",
410
+ "type": "str",
411
+ "description": "Natural language query about biological pathways",
412
+ "default": None,
413
+ }
414
+ ],
415
+ },
416
+ {
417
+ "description": "Query the RegulomeDB database using natural language or direct endpoint.",
418
+ "name": "query_regulomedb",
419
+ "optional_parameters": [
420
+ {"name": "endpoint", "type": "str", "description": "Direct RegulomeDB endpoint URL", "default": None},
421
+ {"name": "verbose", "type": "bool", "description": "Return detailed results", "default": False},
422
+ ],
423
+ "required_parameters": [
424
+ {
425
+ "name": "prompt",
426
+ "type": "str",
427
+ "description": "Natural language query about regulatory elements",
428
+ "default": None,
429
+ }
430
+ ],
431
+ },
432
+ {
433
+ "description": "Query the PRIDE proteomics database using natural language or a direct endpoint.",
434
+ "name": "query_pride",
435
+ "optional_parameters": [
436
+ {"name": "endpoint", "type": "str", "description": "Full endpoint to query", "default": None},
437
+ {"name": "max_results", "type": "int", "description": "Maximum number of results", "default": 3},
438
+ ],
439
+ "required_parameters": [
440
+ {
441
+ "name": "prompt",
442
+ "type": "str",
443
+ "description": "Natural language query about proteomics data",
444
+ "default": None,
445
+ }
446
+ ],
447
+ },
448
+ {
449
+ "description": "Query the Guide to PHARMACOLOGY (GtoPdb) database using natural language or a direct endpoint.",
450
+ "name": "query_gtopdb",
451
+ "optional_parameters": [
452
+ {"name": "endpoint", "type": "str", "description": "Full API endpoint to query", "default": None},
453
+ {"name": "verbose", "type": "bool", "description": "Return detailed results", "default": True},
454
+ ],
455
+ "required_parameters": [
456
+ {
457
+ "name": "prompt",
458
+ "type": "str",
459
+ "description": "Natural language query about drug targets/ligands/interactions",
460
+ "default": None,
461
+ }
462
+ ],
463
+ },
464
+ {
465
+ "description": "Query the ReMap database for regulatory elements and transcription factor binding.",
466
+ "name": "query_remap",
467
+ "optional_parameters": [
468
+ {"name": "endpoint", "type": "str", "description": "Full API endpoint to query", "default": None},
469
+ {"name": "verbose", "type": "bool", "description": "Return detailed results", "default": True},
470
+ ],
471
+ "required_parameters": [
472
+ {
473
+ "name": "prompt",
474
+ "type": "str",
475
+ "description": "Natural language query about TF binding sites",
476
+ "default": None,
477
+ }
478
+ ],
479
+ },
480
+ {
481
+ "description": "Query the Mouse Phenome Database (MPD) using natural language or a direct endpoint.",
482
+ "name": "query_mpd",
483
+ "optional_parameters": [
484
+ {"name": "endpoint", "type": "str", "description": "Full API endpoint to query", "default": None},
485
+ {"name": "verbose", "type": "bool", "description": "Return detailed results", "default": True},
486
+ ],
487
+ "required_parameters": [
488
+ {
489
+ "name": "prompt",
490
+ "type": "str",
491
+ "description": "Natural language query about mouse phenotypes/strains",
492
+ "default": None,
493
+ }
494
+ ],
495
+ },
496
+ {
497
+ "description": "Query the Electron Microscopy Data Bank (EMDB) using natural language or a direct endpoint.",
498
+ "name": "query_emdb",
499
+ "optional_parameters": [
500
+ {"name": "endpoint", "type": "str", "description": "Full API endpoint to query", "default": None},
501
+ {"name": "verbose", "type": "bool", "description": "Return detailed results", "default": True},
502
+ ],
503
+ "required_parameters": [
504
+ {
505
+ "name": "prompt",
506
+ "type": "str",
507
+ "description": "Natural language query about EM structures",
508
+ "default": None,
509
+ }
510
+ ],
511
+ },
512
+ {
513
+ "description": "Query Synapse REST API for biomedical datasets/files using natural language or structured search parameters. Supports optional authentication via SYNAPSE_AUTH_TOKEN.",
514
+ "name": "query_synapse",
515
+ "optional_parameters": [
516
+ {
517
+ "name": "query_term",
518
+ "type": "str|list[str]",
519
+ "description": "Search term(s) (AND logic across list)",
520
+ "default": None,
521
+ },
522
+ {
523
+ "name": "return_fields",
524
+ "type": "list[str]",
525
+ "description": "Fields to return",
526
+ "default": ["name", "node_type", "description"],
527
+ },
528
+ {"name": "max_results", "type": "int", "description": "Max results (20 typical, up to 50)", "default": 20},
529
+ {
530
+ "name": "query_type",
531
+ "type": "str",
532
+ "description": "'dataset', 'file', or 'folder'",
533
+ "default": "dataset",
534
+ },
535
+ {
536
+ "name": "verbose",
537
+ "type": "bool",
538
+ "description": "Return full API response or formatted",
539
+ "default": True,
540
+ },
541
+ ],
542
+ "required_parameters": [
543
+ {
544
+ "name": "prompt",
545
+ "type": "str",
546
+ "description": "Natural language query about biomedical data",
547
+ "default": None,
548
+ }
549
+ ],
550
+ },
551
+ {
552
+ "description": "Query the PubChem PUG-REST API using natural language or a direct endpoint.",
553
+ "name": "query_pubchem",
554
+ "optional_parameters": [
555
+ {
556
+ "name": "endpoint",
557
+ "type": "str",
558
+ "description": "Direct PubChem API endpoint or full URL",
559
+ "default": None,
560
+ },
561
+ {"name": "max_results", "type": "int", "description": "Max results (rate-limited to 5 rps)", "default": 5},
562
+ {"name": "verbose", "type": "bool", "description": "Return detailed results", "default": True},
563
+ ],
564
+ "required_parameters": [
565
+ {
566
+ "name": "prompt",
567
+ "type": "str",
568
+ "description": "Natural language query about chemical compounds",
569
+ "default": None,
570
+ }
571
+ ],
572
+ },
573
+ {
574
+ "description": "Query the ChEMBL REST API via natural language, direct endpoint, or identifiers (chembl_id, smiles, molecule_name).",
575
+ "name": "query_chembl",
576
+ "optional_parameters": [
577
+ {
578
+ "name": "endpoint",
579
+ "type": "str",
580
+ "description": "Direct ChEMBL API endpoint or full URL",
581
+ "default": None,
582
+ },
583
+ {"name": "chembl_id", "type": "str", "description": "ChEMBL ID (e.g., 'CHEMBL25')", "default": None},
584
+ {"name": "smiles", "type": "str", "description": "SMILES for similarity/substructure", "default": None},
585
+ {"name": "molecule_name", "type": "str", "description": "Molecule name to search", "default": None},
586
+ {"name": "max_results", "type": "int", "description": "Max results", "default": 20},
587
+ {"name": "verbose", "type": "bool", "description": "Return detailed results", "default": True},
588
+ ],
589
+ "required_parameters": [
590
+ {
591
+ "name": "prompt",
592
+ "type": "str",
593
+ "description": "Natural language query about bioactivity data",
594
+ "default": None,
595
+ }
596
+ ],
597
+ },
598
+ {
599
+ "description": "Query the UniChem 2.0 REST API using natural language or a direct endpoint.",
600
+ "name": "query_unichem",
601
+ "optional_parameters": [
602
+ {"name": "endpoint", "type": "str", "description": "Direct UniChem endpoint or full URL", "default": None},
603
+ {"name": "verbose", "type": "bool", "description": "Return detailed results", "default": True},
604
+ ],
605
+ "required_parameters": [
606
+ {
607
+ "name": "prompt",
608
+ "type": "str",
609
+ "description": "Natural language query about chemical cross-references",
610
+ "default": None,
611
+ }
612
+ ],
613
+ },
614
+ {
615
+ "description": "Query the ClinicalTrials.gov API v2 using natural language or a direct endpoint.",
616
+ "name": "query_clinicaltrials",
617
+ "optional_parameters": [
618
+ {
619
+ "name": "endpoint",
620
+ "type": "str",
621
+ "description": "Direct ClinicalTrials.gov endpoint or full URL",
622
+ "default": None,
623
+ },
624
+ {"name": "max_results", "type": "int", "description": "Page size for results (pageSize)", "default": 10},
625
+ {"name": "verbose", "type": "bool", "description": "Return detailed results", "default": True},
626
+ ],
627
+ "required_parameters": [
628
+ {
629
+ "name": "prompt",
630
+ "type": "str",
631
+ "description": "Natural language query about clinical trials",
632
+ "default": None,
633
+ }
634
+ ],
635
+ },
636
+ {
637
+ "description": "Query the DailyMed RESTful API using natural language or a direct endpoint.",
638
+ "name": "query_dailymed",
639
+ "optional_parameters": [
640
+ {"name": "endpoint", "type": "str", "description": "Direct DailyMed endpoint or full URL", "default": None},
641
+ {"name": "format", "type": "str", "description": "'json' or 'xml'", "default": "json"},
642
+ {"name": "verbose", "type": "bool", "description": "Return detailed results", "default": True},
643
+ ],
644
+ "required_parameters": [
645
+ {
646
+ "name": "prompt",
647
+ "type": "str",
648
+ "description": "Natural language query about drug labeling",
649
+ "default": None,
650
+ }
651
+ ],
652
+ },
653
+ {
654
+ "description": "Query the QuickGO API using natural language or a direct endpoint.",
655
+ "name": "query_quickgo",
656
+ "optional_parameters": [
657
+ {"name": "endpoint", "type": "str", "description": "Direct QuickGO endpoint or full URL", "default": None},
658
+ {"name": "max_results", "type": "int", "description": "Max results (limit, up to 100)", "default": 25},
659
+ {"name": "verbose", "type": "bool", "description": "Return detailed results", "default": True},
660
+ ],
661
+ "required_parameters": [
662
+ {
663
+ "name": "prompt",
664
+ "type": "str",
665
+ "description": "Natural language query about GO terms/annotations",
666
+ "default": None,
667
+ }
668
+ ],
669
+ },
670
+ {
671
+ "description": "Query the ENCODE Portal API to locate functional genomics data (experiments, files, biosamples, datasets).",
672
+ "name": "query_encode",
673
+ "optional_parameters": [
674
+ {
675
+ "name": "endpoint",
676
+ "type": "str",
677
+ "description": "Direct ENCODE Portal endpoint or full URL",
678
+ "default": None,
679
+ },
680
+ {
681
+ "name": "max_results",
682
+ "type": "int|str",
683
+ "description": "Limit for search endpoints (number or 'all')",
684
+ "default": 25,
685
+ },
686
+ {"name": "verbose", "type": "bool", "description": "Return detailed results", "default": True},
687
+ ],
688
+ "required_parameters": [
689
+ {
690
+ "name": "prompt",
691
+ "type": "str",
692
+ "description": "Natural language query about functional genomics data",
693
+ "default": None,
694
+ }
695
+ ],
696
+ },
697
+ {
698
+ "description": "Given genomic coordinates, retrieve intersecting ENCODE SCREEN cCREs.",
699
+ "name": "region_to_ccre_screen",
700
+ "optional_parameters": [
701
+ {"name": "assembly", "type": "str", "description": "Genome assembly (e.g., 'GRCh38')", "default": "GRCh38"}
702
+ ],
703
+ "required_parameters": [
704
+ {"name": "coord_chrom", "type": "str", "description": "Chromosome (e.g., 'chr12')", "default": None},
705
+ {"name": "coord_start", "type": "int", "description": "Start coordinate", "default": None},
706
+ {"name": "coord_end", "type": "int", "description": "End coordinate", "default": None},
707
+ ],
708
+ },
709
+ {
710
+ "description": "Given a cCRE accession, return k nearest genes sorted by distance.",
711
+ "name": "get_genes_near_ccre",
712
+ "optional_parameters": [
713
+ {"name": "k", "type": "int", "description": "Number of nearby genes to return", "default": 10}
714
+ ],
715
+ "required_parameters": [
716
+ {
717
+ "name": "accession",
718
+ "type": "str",
719
+ "description": "ENCODE cCRE accession ID (e.g., 'EH38E1516980')",
720
+ "default": None,
721
+ },
722
+ {"name": "assembly", "type": "str", "description": "Genome assembly (e.g., 'GRCh38')", "default": None},
723
+ {
724
+ "name": "chromosome",
725
+ "type": "str",
726
+ "description": "Chromosome of the cCRE (e.g., 'chr12')",
727
+ "default": None,
728
+ },
729
+ ],
730
+ },
731
+ ]
Biomni/biomni/tool/tool_description/genetics.py ADDED
@@ -0,0 +1,405 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ description = [
2
+ {
3
+ "description": "Perform liftover of genomic coordinates between hg19 and "
4
+ "hg38 formats with detailed intermediate steps.",
5
+ "name": "liftover_coordinates",
6
+ "optional_parameters": [],
7
+ "required_parameters": [
8
+ {
9
+ "default": None,
10
+ "description": "Chromosome number (e.g., '1', 'X')",
11
+ "name": "chromosome",
12
+ "type": "str",
13
+ },
14
+ {
15
+ "default": None,
16
+ "description": "Genomic position",
17
+ "name": "position",
18
+ "type": "int",
19
+ },
20
+ {
21
+ "default": None,
22
+ "description": "Input genome build ('hg19' or 'hg38')",
23
+ "name": "input_format",
24
+ "type": "str",
25
+ },
26
+ {
27
+ "default": None,
28
+ "description": "Output genome build ('hg19' or 'hg38')",
29
+ "name": "output_format",
30
+ "type": "str",
31
+ },
32
+ {
33
+ "default": None,
34
+ "description": "Path to liftover chain files",
35
+ "name": "data_path",
36
+ "type": "str",
37
+ },
38
+ ],
39
+ },
40
+ {
41
+ "description": "Performs Bayesian fine-mapping from GWAS summary statistics "
42
+ "using deep variational inference to compute posterior "
43
+ "inclusion probabilities and credible sets for putative "
44
+ "causal variants.",
45
+ "name": "bayesian_finemapping_with_deep_vi",
46
+ "optional_parameters": [
47
+ {
48
+ "default": 5000,
49
+ "description": "Number of training iterations for the variational inference algorithm",
50
+ "name": "n_iterations",
51
+ "type": "int",
52
+ },
53
+ {
54
+ "default": 0.01,
55
+ "description": "Learning rate for the optimization algorithm",
56
+ "name": "learning_rate",
57
+ "type": "float",
58
+ },
59
+ {
60
+ "default": 64,
61
+ "description": "Hidden dimension size for the neural network",
62
+ "name": "hidden_dim",
63
+ "type": "int",
64
+ },
65
+ {
66
+ "default": 0.95,
67
+ "description": "Threshold for defining the credible set (e.g., 0.95 for a 95% credible set)",
68
+ "name": "credible_threshold",
69
+ "type": "float",
70
+ },
71
+ ],
72
+ "required_parameters": [
73
+ {
74
+ "default": None,
75
+ "description": "Path to CSV or TSV file containing "
76
+ "GWAS summary statistics with "
77
+ "variant_id, effect_size, pvalue, "
78
+ "and optional se columns",
79
+ "name": "gwas_summary_path",
80
+ "type": "str",
81
+ },
82
+ {
83
+ "default": None,
84
+ "description": "Linkage disequilibrium matrix with pairwise correlations between variants",
85
+ "name": "ld_matrix",
86
+ "type": "numpy.ndarray",
87
+ },
88
+ ],
89
+ },
90
+ {
91
+ "description": "Analyzes and categorizes mutations induced by Cas9 at target sites.",
92
+ "name": "analyze_cas9_mutation_outcomes",
93
+ "optional_parameters": [
94
+ {
95
+ "default": None,
96
+ "description": "Dictionary mapping sequence IDs to "
97
+ "cell line information (e.g., "
98
+ "wildtype, knockout gene)",
99
+ "name": "cell_line_info",
100
+ "type": "dict",
101
+ },
102
+ {
103
+ "default": "cas9_mutation_analysis",
104
+ "description": "Prefix for output files",
105
+ "name": "output_prefix",
106
+ "type": "str",
107
+ },
108
+ ],
109
+ "required_parameters": [
110
+ {
111
+ "default": None,
112
+ "description": "Dictionary mapping sequence IDs to reference DNA sequences (strings)",
113
+ "name": "reference_sequences",
114
+ "type": "dict",
115
+ },
116
+ {
117
+ "default": None,
118
+ "description": "Nested dictionary: {sequence_id: "
119
+ "{read_id: sequence}} containing the "
120
+ "edited/mutated sequences for each "
121
+ "reference",
122
+ "name": "edited_sequences",
123
+ "type": "dict",
124
+ },
125
+ ],
126
+ },
127
+ {
128
+ "description": "Analyzes CRISPR-Cas9 genome editing results by comparing original and edited sequences.",
129
+ "name": "analyze_crispr_genome_editing",
130
+ "optional_parameters": [
131
+ {
132
+ "default": None,
133
+ "description": "The homology-directed repair template sequence, if used",
134
+ "name": "repair_template",
135
+ "type": "str",
136
+ }
137
+ ],
138
+ "required_parameters": [
139
+ {
140
+ "default": None,
141
+ "description": "The original DNA sequence before CRISPR-Cas9 editing",
142
+ "name": "original_sequence",
143
+ "type": "str",
144
+ },
145
+ {
146
+ "default": None,
147
+ "description": "The DNA sequence after CRISPR-Cas9 editing",
148
+ "name": "edited_sequence",
149
+ "type": "str",
150
+ },
151
+ {
152
+ "default": None,
153
+ "description": "The CRISPR guide RNA (crRNA) sequence used for targeting",
154
+ "name": "guide_rna",
155
+ "type": "str",
156
+ },
157
+ ],
158
+ },
159
+ {
160
+ "description": "Simulate DNA sequences with specified demographic and coalescent histories using msprime.",
161
+ "name": "simulate_demographic_history",
162
+ "optional_parameters": [
163
+ {
164
+ "default": 10,
165
+ "description": "Number of sample sequences to simulate",
166
+ "name": "num_samples",
167
+ "type": "int",
168
+ },
169
+ {
170
+ "default": 100000,
171
+ "description": "Length of the simulated sequence in base pairs",
172
+ "name": "sequence_length",
173
+ "type": "int",
174
+ },
175
+ {
176
+ "default": 1e-08,
177
+ "description": "Per-base recombination rate",
178
+ "name": "recombination_rate",
179
+ "type": "float",
180
+ },
181
+ {
182
+ "default": 1e-08,
183
+ "description": "Per-base mutation rate",
184
+ "name": "mutation_rate",
185
+ "type": "float",
186
+ },
187
+ {
188
+ "default": "constant",
189
+ "description": "Type of demographic model to "
190
+ "simulate (constant, bottleneck, "
191
+ "expansion, contraction, sawtooth)",
192
+ "name": "demographic_model",
193
+ "type": "str",
194
+ },
195
+ {
196
+ "default": None,
197
+ "description": "Parameters specific to the chosen demographic model",
198
+ "name": "demographic_params",
199
+ "type": "dict",
200
+ },
201
+ {
202
+ "default": "kingman",
203
+ "description": "Type of coalescent model to use (kingman, beta)",
204
+ "name": "coalescent_model",
205
+ "type": "str",
206
+ },
207
+ {
208
+ "default": None,
209
+ "description": "Parameter for beta-coalescent model",
210
+ "name": "beta_coalescent_param",
211
+ "type": "float",
212
+ },
213
+ {
214
+ "default": None,
215
+ "description": "Seed for random number generator",
216
+ "name": "random_seed",
217
+ "type": "int",
218
+ },
219
+ {
220
+ "default": "simulated_sequences.vcf",
221
+ "description": "Filename to save the simulated sequences in VCF format",
222
+ "name": "output_file",
223
+ "type": "str",
224
+ },
225
+ ],
226
+ "required_parameters": [],
227
+ },
228
+ {
229
+ "description": "Identifies binding sites for a specific transcription factor in a genomic sequence.",
230
+ "name": "identify_transcription_factor_binding_sites",
231
+ "optional_parameters": [
232
+ {
233
+ "default": 0.8,
234
+ "description": "Minimum score threshold for reporting binding sites (0.0-1.0)",
235
+ "name": "threshold",
236
+ "type": "float",
237
+ },
238
+ {
239
+ "default": None,
240
+ "description": "Path to save the results",
241
+ "name": "output_file",
242
+ "type": "str",
243
+ },
244
+ ],
245
+ "required_parameters": [
246
+ {
247
+ "default": None,
248
+ "description": "The genomic DNA sequence to analyze",
249
+ "name": "sequence",
250
+ "type": "str",
251
+ },
252
+ {
253
+ "default": None,
254
+ "description": "Name of the transcription factor to search for (e.g., 'Hsf1', 'GATA1')",
255
+ "name": "tf_name",
256
+ "type": "str",
257
+ },
258
+ ],
259
+ },
260
+ {
261
+ "description": "Fit a linear mixed model for genomic prediction using genotype and phenotype data.",
262
+ "name": "fit_genomic_prediction_model",
263
+ "optional_parameters": [
264
+ {
265
+ "default": None,
266
+ "description": "Matrix of fixed effects (e.g., "
267
+ "environment, management), with "
268
+ "individuals in rows and effects in "
269
+ "columns.",
270
+ "name": "fixed_effects",
271
+ "type": "numpy.ndarray",
272
+ },
273
+ {
274
+ "default": "additive",
275
+ "description": 'Type of genetic model to fit: "additive" or "additive_dominance".',
276
+ "name": "model_type",
277
+ "type": "str",
278
+ },
279
+ {
280
+ "default": "genomic_prediction_results.csv",
281
+ "description": "File name to save the results.",
282
+ "name": "output_file",
283
+ "type": "str",
284
+ },
285
+ ],
286
+ "required_parameters": [
287
+ {
288
+ "default": None,
289
+ "description": "Matrix of genotype data, with "
290
+ "individuals in rows and markers in "
291
+ "columns. Values are typically coded "
292
+ "as 0, 1, 2 for additive models or "
293
+ "with specific encoding for "
294
+ "dominance effects.",
295
+ "name": "genotypes",
296
+ "type": "numpy.ndarray",
297
+ },
298
+ {
299
+ "default": None,
300
+ "description": "Vector or matrix of phenotype data, with individuals in rows and traits in columns.",
301
+ "name": "phenotypes",
302
+ "type": "numpy.ndarray",
303
+ },
304
+ ],
305
+ },
306
+ {
307
+ "description": "Performs PCR amplification of a target transgene and "
308
+ "visualizes results using agarose gel electrophoresis.",
309
+ "name": "perform_pcr_and_gel_electrophoresis",
310
+ "optional_parameters": [
311
+ {
312
+ "default": None,
313
+ "description": "Forward primer sequence. If not provided, will be designed based on target_region",
314
+ "name": "forward_primer",
315
+ "type": "str",
316
+ },
317
+ {
318
+ "default": None,
319
+ "description": "Reverse primer sequence. If not provided, will be designed based on target_region",
320
+ "name": "reverse_primer",
321
+ "type": "str",
322
+ },
323
+ {
324
+ "default": None,
325
+ "description": "Tuple of (start, end) positions for the target region in the genomic DNA",
326
+ "name": "target_region",
327
+ "type": "tuple",
328
+ },
329
+ {
330
+ "default": 58,
331
+ "description": "Annealing temperature for PCR in °C",
332
+ "name": "annealing_temp",
333
+ "type": "float",
334
+ },
335
+ {
336
+ "default": 30,
337
+ "description": "Extension time in seconds",
338
+ "name": "extension_time",
339
+ "type": "int",
340
+ },
341
+ {
342
+ "default": 35,
343
+ "description": "Number of PCR cycles",
344
+ "name": "cycles",
345
+ "type": "int",
346
+ },
347
+ {
348
+ "default": 2.0,
349
+ "description": "Percentage of agarose gel",
350
+ "name": "gel_percentage",
351
+ "type": "float",
352
+ },
353
+ {
354
+ "default": "pcr_result",
355
+ "description": "Prefix for output files",
356
+ "name": "output_prefix",
357
+ "type": "str",
358
+ },
359
+ ],
360
+ "required_parameters": [
361
+ {
362
+ "default": None,
363
+ "description": "Path to file containing genomic DNA sequence in FASTA format or the sequence itself",
364
+ "name": "genomic_dna",
365
+ "type": "str",
366
+ }
367
+ ],
368
+ },
369
+ {
370
+ "description": "Perform phylogenetic analysis on a set of protein sequences. "
371
+ "This function aligns sequences, constructs a phylogenetic "
372
+ "tree, and visualizes evolutionary relationships.",
373
+ "name": "analyze_protein_phylogeny",
374
+ "optional_parameters": [
375
+ {
376
+ "default": "./",
377
+ "description": "Directory to save output files",
378
+ "name": "output_dir",
379
+ "type": "str",
380
+ },
381
+ {
382
+ "default": "clustalw",
383
+ "description": 'Method for sequence alignment: "clustalw", "muscle", or "pre-aligned"',
384
+ "name": "alignment_method",
385
+ "type": "str",
386
+ },
387
+ {
388
+ "default": "fasttree",
389
+ "description": 'Method for tree construction: "iqtree" or fallback to neighbor-joining',
390
+ "name": "tree_method",
391
+ "type": "str",
392
+ },
393
+ ],
394
+ "required_parameters": [
395
+ {
396
+ "default": None,
397
+ "description": "Path to a FASTA file containing "
398
+ "protein sequences or a string with "
399
+ "FASTA-formatted sequences",
400
+ "name": "fasta_sequences",
401
+ "type": "str",
402
+ }
403
+ ],
404
+ },
405
+ ]
Biomni/biomni/tool/tool_description/genomics.py ADDED
@@ -0,0 +1,840 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ description = [
2
+ {
3
+ "description": "Annotate cell types based on gene markers and transferred "
4
+ "labels using LLM. After leiden clustering, annotate clusters "
5
+ "using differentially expressed genes and optionally "
6
+ "incorporate transferred labels from reference datasets.",
7
+ "name": "annotate_celltype_scRNA",
8
+ "optional_parameters": [
9
+ {
10
+ "default": "leiden",
11
+ "description": "Clustering method to use for cell type annotation",
12
+ "name": "cluster",
13
+ "type": "str",
14
+ },
15
+ {
16
+ "default": "claude-3-5-sonnet-20241022",
17
+ "description": "Language model instance for cell type prediction",
18
+ "name": "llm",
19
+ "type": "str",
20
+ },
21
+ {
22
+ "default": None,
23
+ "description": "Transferred cell type composition for each cluster",
24
+ "name": "composition",
25
+ "type": "pd.DataFrame",
26
+ },
27
+ ],
28
+ "required_parameters": [
29
+ {
30
+ "default": None,
31
+ "description": "Name of the AnnData file containing scRNA-seq data",
32
+ "name": "adata_filename",
33
+ "type": "str",
34
+ },
35
+ {
36
+ "default": None,
37
+ "description": "Directory containing the data files",
38
+ "name": "data_dir",
39
+ "type": "str",
40
+ },
41
+ {
42
+ "default": None,
43
+ "description": 'Information about the scRNA-seq data (e.g., "homo sapiens, brain tissue, normal")',
44
+ "name": "data_info",
45
+ "type": "str",
46
+ },
47
+ {
48
+ "default": None,
49
+ "description": "Path to the data lake",
50
+ "name": "data_lake_path",
51
+ "type": "str",
52
+ },
53
+ ],
54
+ },
55
+ {
56
+ "description": "Perform cell type annotation of single-cell RNA-seq data using Panhuman Azimuth Neural Network. "
57
+ "This function implements the Panhuman Azimuth workflow for cell type annotation using the "
58
+ "panhumanpy package, providing hierarchical cell type labels for tissues across the human body. ",
59
+ "name": "annotate_celltype_with_panhumanpy",
60
+ "optional_parameters": [
61
+ {
62
+ "default": None,
63
+ "description": "Column name in adata.var containing gene symbols (default: None, uses index)",
64
+ "name": "feature_names_col",
65
+ "type": "str",
66
+ },
67
+ {
68
+ "default": True,
69
+ "description": "Whether to perform additional label refinement for consistent granularity",
70
+ "name": "refine",
71
+ "type": "bool",
72
+ },
73
+ {
74
+ "default": True,
75
+ "description": "Whether to generate ANN embeddings and UMAP",
76
+ "name": "umap",
77
+ "type": "bool",
78
+ },
79
+ {
80
+ "default": "./output",
81
+ "description": "Directory to save results",
82
+ "name": "output_dir",
83
+ "type": "str",
84
+ },
85
+ ],
86
+ "required_parameters": [
87
+ {
88
+ "default": None,
89
+ "description": "Path to the AnnData file containing scRNA-seq data",
90
+ "name": "adata_path",
91
+ "type": "str",
92
+ },
93
+ ],
94
+ },
95
+ {
96
+ "description": "Create scVI and scANVI embeddings for single-cell RNA-seq "
97
+ "data, saving the results to an AnnData object.",
98
+ "name": "create_scvi_embeddings_scRNA",
99
+ "optional_parameters": [],
100
+ "required_parameters": [
101
+ {
102
+ "default": None,
103
+ "description": "Filename of the AnnData object to load",
104
+ "name": "adata_filename",
105
+ "type": "str",
106
+ },
107
+ {
108
+ "default": None,
109
+ "description": "Column name in adata.obs for batch information",
110
+ "name": "batch_key",
111
+ "type": "str",
112
+ },
113
+ {
114
+ "default": None,
115
+ "description": "Column name in adata.obs for cell type labels",
116
+ "name": "label_key",
117
+ "type": "str",
118
+ },
119
+ {
120
+ "default": None,
121
+ "description": "Directory path where the AnnData file is located and where output will be saved",
122
+ "name": "data_dir",
123
+ "type": "str",
124
+ },
125
+ ],
126
+ },
127
+ {
128
+ "description": "Performs batch integration on single-cell RNA-seq data using "
129
+ "Harmony and saves the integrated embeddings.",
130
+ "name": "create_harmony_embeddings_scRNA",
131
+ "optional_parameters": [],
132
+ "required_parameters": [
133
+ {
134
+ "default": None,
135
+ "description": "Filename of the AnnData object to load",
136
+ "name": "adata_filename",
137
+ "type": "str",
138
+ },
139
+ {
140
+ "default": None,
141
+ "description": "Column name in adata.obs that defines the batch variable for integration",
142
+ "name": "batch_key",
143
+ "type": "str",
144
+ },
145
+ {
146
+ "default": None,
147
+ "description": "Directory path where the input file is located and output will be saved",
148
+ "name": "data_dir",
149
+ "type": "str",
150
+ },
151
+ ],
152
+ },
153
+ {
154
+ "description": "Generate UCE embeddings for single-cell RNA-seq data and map "
155
+ "them to a reference dataset for cell type annotation.",
156
+ "name": "get_uce_embeddings_scRNA",
157
+ "optional_parameters": [
158
+ {
159
+ "default": "/dfs/project/bioagentos/data/singlecell/",
160
+ "description": "Root directory for single-cell data storage",
161
+ "name": "DATA_ROOT",
162
+ "type": "str",
163
+ },
164
+ {
165
+ "default": None,
166
+ "description": "Custom command line arguments to pass to the UCE script",
167
+ "name": "custom_args",
168
+ "type": "List[str]",
169
+ },
170
+ ],
171
+ "required_parameters": [
172
+ {
173
+ "default": None,
174
+ "description": "Filename of the AnnData object to process",
175
+ "name": "adata_filename",
176
+ "type": "str",
177
+ },
178
+ {
179
+ "default": None,
180
+ "description": "Directory where the input data is stored and output will be saved",
181
+ "name": "data_dir",
182
+ "type": "str",
183
+ },
184
+ ],
185
+ },
186
+ {
187
+ "description": "Map cell embeddings from the input dataset to the Integrated "
188
+ "Megascale Atlas reference dataset using UCE embeddings.",
189
+ "name": "map_to_ima_interpret_scRNA",
190
+ "optional_parameters": [
191
+ {
192
+ "default": None,
193
+ "description": "Dictionary of custom arguments "
194
+ "including 'n_neighbors' and "
195
+ "'metric' for nearest neighbor "
196
+ "search",
197
+ "name": "custom_args",
198
+ "type": "dict",
199
+ }
200
+ ],
201
+ "required_parameters": [
202
+ {
203
+ "default": None,
204
+ "description": "Filename of the AnnData object to be mapped",
205
+ "name": "adata_filename",
206
+ "type": "str",
207
+ },
208
+ {
209
+ "default": None,
210
+ "description": "Directory containing the AnnData file",
211
+ "name": "data_dir",
212
+ "type": "str",
213
+ },
214
+ ],
215
+ },
216
+ {
217
+ "description": "Given a gene name, fetch RNA-seq expression data showing the "
218
+ "top K tissues with highest transcripts-per-million (TPM) "
219
+ "values.",
220
+ "name": "get_rna_seq_archs4",
221
+ "optional_parameters": [
222
+ {
223
+ "default": 10,
224
+ "description": "The number of tissues to return",
225
+ "name": "K",
226
+ "type": "int",
227
+ }
228
+ ],
229
+ "required_parameters": [
230
+ {
231
+ "default": None,
232
+ "description": "The gene name for which RNA-seq data is being fetched",
233
+ "name": "gene_name",
234
+ "type": "str",
235
+ }
236
+ ],
237
+ },
238
+ {
239
+ "description": "Returns a list of supported databases for gene set enrichment analysis.",
240
+ "name": "get_gene_set_enrichment_analysis_supported_database_list",
241
+ "optional_parameters": [],
242
+ "required_parameters": [],
243
+ },
244
+ {
245
+ "description": "Perform enrichment analysis for a list of genes, with "
246
+ "optional background gene set and plotting functionality.",
247
+ "name": "gene_set_enrichment_analysis",
248
+ "optional_parameters": [
249
+ {
250
+ "default": 10,
251
+ "description": "Number of top pathways to return",
252
+ "name": "top_k",
253
+ "type": "int",
254
+ },
255
+ {
256
+ "default": "ontology",
257
+ "description": "Database to use for enrichment analysis (e.g., pathway, transcription, ontology)",
258
+ "name": "database",
259
+ "type": "str",
260
+ },
261
+ {
262
+ "default": None,
263
+ "description": "List of background genes to use for enrichment analysis",
264
+ "name": "background_list",
265
+ "type": "list",
266
+ },
267
+ {
268
+ "default": False,
269
+ "description": "Generate a bar plot of the top K enrichment results",
270
+ "name": "plot",
271
+ "type": "bool",
272
+ },
273
+ ],
274
+ "required_parameters": [
275
+ {
276
+ "default": None,
277
+ "description": "List of gene symbols to analyze",
278
+ "name": "genes",
279
+ "type": "list",
280
+ }
281
+ ],
282
+ },
283
+ {
284
+ "description": "Analyze chromatin interactions from Hi-C data to identify "
285
+ "enhancer-promoter interactions and TADs.",
286
+ "name": "analyze_chromatin_interactions",
287
+ "optional_parameters": [
288
+ {
289
+ "default": "./output",
290
+ "description": "Directory to save output files",
291
+ "name": "output_dir",
292
+ "type": "str",
293
+ }
294
+ ],
295
+ "required_parameters": [
296
+ {
297
+ "default": None,
298
+ "description": "Path to the Hi-C data file (.cool or .hic format)",
299
+ "name": "hic_file_path",
300
+ "type": "str",
301
+ },
302
+ {
303
+ "default": None,
304
+ "description": "Path to BED file containing genomic "
305
+ "coordinates of regulatory elements "
306
+ "(enhancers, promoters, CTCF sites, "
307
+ "etc.)",
308
+ "name": "regulatory_elements_bed",
309
+ "type": "str",
310
+ },
311
+ ],
312
+ },
313
+ {
314
+ "description": "Perform comparative genomics and haplotype analysis on "
315
+ "multiple genome samples. Aligns genome samples to a "
316
+ "reference, identifies variants, analyzes shared and unique "
317
+ "genomic regions, and determines haplotype structure.",
318
+ "name": "analyze_comparative_genomics_and_haplotypes",
319
+ "optional_parameters": [
320
+ {
321
+ "default": "./output",
322
+ "description": "Directory to store output files",
323
+ "name": "output_dir",
324
+ "type": "str",
325
+ }
326
+ ],
327
+ "required_parameters": [
328
+ {
329
+ "default": None,
330
+ "description": "Paths to FASTA files containing whole-genome sequences to be analyzed",
331
+ "name": "sample_fasta_files",
332
+ "type": "List[str]",
333
+ },
334
+ {
335
+ "default": None,
336
+ "description": "Path to the reference genome FASTA file",
337
+ "name": "reference_genome_path",
338
+ "type": "str",
339
+ },
340
+ ],
341
+ },
342
+ {
343
+ "description": "Perform ChIP-seq peak calling using MACS2 to identify "
344
+ "genomic regions with significant binding.",
345
+ "name": "perform_chipseq_peak_calling_with_macs2",
346
+ "optional_parameters": [
347
+ {
348
+ "default": "macs2_output",
349
+ "description": "Prefix for output files",
350
+ "name": "output_name",
351
+ "type": "str",
352
+ },
353
+ {
354
+ "default": "hs",
355
+ "description": "Effective genome size shorthand: 'hs' for human, 'mm' for mouse, etc.",
356
+ "name": "genome_size",
357
+ "type": "str",
358
+ },
359
+ {
360
+ "default": 0.05,
361
+ "description": "q-value (minimum FDR) cutoff for peak calling",
362
+ "name": "q_value",
363
+ "type": "float",
364
+ },
365
+ ],
366
+ "required_parameters": [
367
+ {
368
+ "default": None,
369
+ "description": "Path to the ChIP-seq read data file (BAM, BED, or other supported format)",
370
+ "name": "chip_seq_file",
371
+ "type": "str",
372
+ },
373
+ {
374
+ "default": None,
375
+ "description": "Path to the control/input data file (BAM, BED, or other supported format)",
376
+ "name": "control_file",
377
+ "type": "str",
378
+ },
379
+ ],
380
+ },
381
+ {
382
+ "description": "Find DNA sequence motifs enriched in genomic regions using the HOMER motif discovery software.",
383
+ "name": "find_enriched_motifs_with_homer",
384
+ "optional_parameters": [
385
+ {
386
+ "default": "hg38",
387
+ "description": "Reference genome for sequence extraction",
388
+ "name": "genome",
389
+ "type": "str",
390
+ },
391
+ {
392
+ "default": None,
393
+ "description": "Path to BED file with background "
394
+ "regions for comparison. If None, "
395
+ "HOMER will generate random "
396
+ "background sequences automatically",
397
+ "name": "background_file",
398
+ "type": "str",
399
+ },
400
+ {
401
+ "default": "8,10,12",
402
+ "description": "Comma-separated list of motif lengths to discover",
403
+ "name": "motif_length",
404
+ "type": "str",
405
+ },
406
+ {
407
+ "default": "./homer_motifs",
408
+ "description": "Directory to save output files",
409
+ "name": "output_dir",
410
+ "type": "str",
411
+ },
412
+ {
413
+ "default": 10,
414
+ "description": "Number of motifs to find",
415
+ "name": "num_motifs",
416
+ "type": "int",
417
+ },
418
+ {
419
+ "default": 4,
420
+ "description": "Number of CPU threads to use",
421
+ "name": "threads",
422
+ "type": "int",
423
+ },
424
+ ],
425
+ "required_parameters": [
426
+ {
427
+ "default": None,
428
+ "description": "Path to peak file in BED format "
429
+ "containing genomic regions to "
430
+ "analyze for motif enrichment",
431
+ "name": "peak_file",
432
+ "type": "str",
433
+ }
434
+ ],
435
+ },
436
+ {
437
+ "description": "Analyze overlaps between two or more sets of genomic regions.",
438
+ "name": "analyze_genomic_region_overlap",
439
+ "optional_parameters": [
440
+ {
441
+ "default": "overlap_analysis",
442
+ "description": "Prefix for output files",
443
+ "name": "output_prefix",
444
+ "type": "str",
445
+ }
446
+ ],
447
+ "required_parameters": [
448
+ {
449
+ "default": None,
450
+ "description": "List of genomic region sets. Each "
451
+ "item can be either a string path to "
452
+ "a BED file or a list of "
453
+ "tuples/lists with format (chrom, "
454
+ "start, end) or (chrom, start, end, "
455
+ "name)",
456
+ "name": "region_sets",
457
+ "type": "list",
458
+ }
459
+ ],
460
+ },
461
+ {
462
+ "description": "Transfer cell type labels from an annotated reference scRNA-seq dataset to an unannotated query dataset using popV. Loads both AnnData .h5ad files, prepares count layers for scVI, processes the query against the reference, and runs selected annotation methods (default: SCANVI_POPV). Saves predictions to 'output_folder/popv_output/predictions.csv'. This function allows you to use different annotaiton methods i.e. CELLTYPIST, KNN_BBKNN, KNN_HARMONY, KNN_SCANORAMA, KNN_SCVI, ONCLASS, Random_Forest, SCANVI_POPV, Support_Vector, XGboost. Based on you transfer task you can select the multiple best annotation methods. Beware each annotation method adds computational requirements for running the tool. By default it uses SCANVI_POPV method.",
463
+ "name": "unsupervised_celltype_transfer_between_scRNA_datasets",
464
+ "optional_parameters": [
465
+ {
466
+ "default": None,
467
+ "description": "Column in query adata.obs with batch information, most likely you will get this from user",
468
+ "name": "query_batch_key",
469
+ "type": "str",
470
+ },
471
+ {
472
+ "default": None,
473
+ "description": "Column in reference adata.obs with batch information, most likely you will get this from user",
474
+ "name": "ref_batch_key",
475
+ "type": "str",
476
+ },
477
+ {
478
+ "default": False,
479
+ "description": "Enable CELLTYPiST (reference-based classifier). How it works: regularized logistic regression trained on curated references predicts per-cell probabilities; optional neighbor correction refines labels. Strengths: fast, scalable, strong on common human/mouse types. Weaknesses: depends on reference coverage; limited for novel or out-of-distribution cell types.",
480
+ "name": "CELLTYPIST",
481
+ "type": "bool",
482
+ },
483
+ {
484
+ "default": False,
485
+ "description": "Enable KNN with BBKNN integration. How it works: builds a batch-balanced kNN graph by enforcing a fixed number of neighbors per batch, then uses this graph for downstream analyses. Strengths: simple, fast, preserves local neighborhood structure across batches. Weaknesses: limited global alignment; residual batch effects when shared cell types are sparse; sensitive to k/neighbor parameters.",
486
+ "name": "KNN_BBKNN",
487
+ "type": "bool",
488
+ },
489
+ {
490
+ "default": False,
491
+ "description": "Enable KNN with Harmony integration. How it works: iteratively adjusts PCA embeddings via soft clustering and linear correction to minimize batch effects while preserving structure. Strengths: scalable, effective batch correction in low-D space, often preserves biology. Weaknesses: can overcorrect and merge true biological differences; depends on PCA/parameters.",
492
+ "name": "KNN_HARMONY",
493
+ "type": "bool",
494
+ },
495
+ {
496
+ "default": False,
497
+ "description": "Enable KNN with Scanorama integration. How it works: identifies mutual nearest neighbors across datasets and performs manifold alignment/low-rank correction to merge 'panoramas'. Strengths: strong cross-dataset alignment for shared populations. Weaknesses: slower and more memory-intensive on large data; may distort rare or unique populations.",
498
+ "name": "KNN_SCANORAMA",
499
+ "type": "bool",
500
+ },
501
+ {
502
+ "default": False,
503
+ "description": "Enable KNN with scVI integration (KNN in scVI latent space). How it works: trains a variational autoencoder (negative binomial likelihood) to learn a batch-corrected latent space; runs KNN in this space to transfer labels. Strengths: robust probabilistic embedding that models counts and batch; good transfer performance. Weaknesses: requires training (GPU preferred); sensitive to embedding quality and k.",
504
+ "name": "KNN_SCVI",
505
+ "type": "bool",
506
+ },
507
+ {
508
+ "default": False,
509
+ "description": "Enable OnClass (ontology-aware classifier). How it works: embeds the Cell Ontology graph and trains a classifier over ontology nodes; uses semantic similarity to generalize to unseen labels (zero-shot). Strengths: leverages Cell Ontology; can map to unseen/fine-grained types; interpretable. Weaknesses: dependent on ontology completeness and mapping quality; may assign overly generic labels.",
510
+ "name": "ONCLASS",
511
+ "type": "bool",
512
+ },
513
+ {
514
+ "default": False,
515
+ "description": "Enable Random Forest classifier. How it works: ensemble of decision trees trained on bootstrap samples with feature subsampling; predictions aggregated by majority vote/probabilities. Strengths: robust to noise and nonlinear signals; quick to train; feature importance available. Weaknesses: probability calibration can be poor; needs feature selection with sparse data; sensitive to class imbalance.",
516
+ "name": "Random_Forest",
517
+ "type": "bool",
518
+ },
519
+ {
520
+ "default": True,
521
+ "description": "Enable scANVI via popV (default). How it works: extends scVI with a classification head to learn from labeled reference and unlabeled query (semi-supervised), yielding latent embeddings and probabilistic labels with uncertainty. Strengths: semi-supervised; models batch, label noise; leverages unlabeled data; provides uncertainty. Weaknesses: higher training time; GPU recommended; can degrade with severe label shift or noisy references.",
522
+ "name": "SCANVI_POPV",
523
+ "type": "bool",
524
+ },
525
+ {
526
+ "default": False,
527
+ "description": "Enable Support Vector classifier. How it works: finds a maximum-margin hyperplane; with kernels (e.g., RBF) to model nonlinear boundaries. Strengths: effective in high-dimensional, small-sample settings; kernel flexibility. Weaknesses: hyperparameter tuning needed; not probabilistic by default; scales poorly to very large datasets.",
528
+ "name": "Support_Vector",
529
+ "type": "bool",
530
+ },
531
+ {
532
+ "default": False,
533
+ "description": "Enable XGBoost classifier. How it works: gradient-boosted decision trees trained sequentially with second-order optimization and regularization to minimize loss. Strengths: high accuracy; captures nonlinear interactions; built-in regularization. Weaknesses: many hyperparameters; risk of overfitting noisy, sparse counts; less interpretable.",
534
+ "name": "XGboost",
535
+ "type": "bool",
536
+ },
537
+ {
538
+ "default": 1,
539
+ "description": "Number of parallel jobs for popV",
540
+ "name": "n_jobs",
541
+ "type": "int",
542
+ },
543
+ {
544
+ "default": "./tmp/",
545
+ "description": "Directory to save trained models and predictions",
546
+ "name": "output_folder",
547
+ "type": "str",
548
+ },
549
+ {
550
+ "default": 10,
551
+ "description": "Number of samples per label (currently unused)",
552
+ "name": "n_samples_per_label",
553
+ "type": "int",
554
+ },
555
+ ],
556
+ "required_parameters": [
557
+ {
558
+ "default": None,
559
+ "description": "Path to annotated reference AnnData (.h5ad)",
560
+ "name": "path_to_annotated_h5ad",
561
+ "type": "str",
562
+ },
563
+ {
564
+ "default": None,
565
+ "description": "Path to unannotated query AnnData (.h5ad)",
566
+ "name": "path_to_not_annotated_h5ad",
567
+ "type": "str",
568
+ },
569
+ {
570
+ "default": None,
571
+ "description": "Column in reference adata.obs with cell type labels",
572
+ "name": "ref_labels_key",
573
+ "type": "str",
574
+ },
575
+ ],
576
+ },
577
+ {
578
+ "description": "Generate State embeddings for single-cell RNA-seq data using the SE-600M model. "
579
+ "This function downloads the SE-600M model from Hugging Face, installs required dependencies "
580
+ "(git-lfs, uv, arc-state), and generates embeddings for the input AnnData object. "
581
+ "The SE-600M model is a state-of-the-art embedding model for single-cell data that can capture "
582
+ "complex biological patterns and cell states. Features include real-time streaming output, "
583
+ "automatic retry with reduced batch size on failure, GPU detection and warnings, and input validation.",
584
+ "name": "generate_embeddings_with_state",
585
+ "optional_parameters": [
586
+ {
587
+ "default": None,
588
+ "description": "Name of the output embeddings file. If None, will use input filename with '_state_embeddings' suffix",
589
+ "name": "output_filename",
590
+ "type": "str",
591
+ },
592
+ {
593
+ "default": None,
594
+ "description": "Path to the specific model checkpoint. If None, uses the latest checkpoint in model_folder",
595
+ "name": "checkpoint",
596
+ "type": "str",
597
+ },
598
+ {
599
+ "default": "X_state",
600
+ "description": "Name of key to store embeddings in the output AnnData object",
601
+ "name": "embed_key",
602
+ "type": "str",
603
+ },
604
+ {
605
+ "default": None,
606
+ "description": "Path to protein embeddings override (.pt). If omitted, auto-detects in model folder",
607
+ "name": "protein_embeddings",
608
+ "type": "str",
609
+ },
610
+ {
611
+ "default": 500,
612
+ "description": "Batch size for embedding forward pass. Increase to use more VRAM and speed up embedding",
613
+ "name": "batch_size",
614
+ "type": "int",
615
+ },
616
+ ],
617
+ "required_parameters": [
618
+ {
619
+ "default": None,
620
+ "description": "Name of the input AnnData file (.h5ad format)",
621
+ "name": "adata_filename",
622
+ "type": "str",
623
+ },
624
+ {
625
+ "default": None,
626
+ "description": "Directory containing the input data file",
627
+ "name": "data_dir",
628
+ "type": "str",
629
+ },
630
+ {
631
+ "default": None,
632
+ "description": "Directory where the SE-600M model will be downloaded and stored",
633
+ "name": "model_folder",
634
+ "type": "str",
635
+ },
636
+ ],
637
+ },
638
+ {
639
+ "description": "Convert ENSEMBL gene IDs between different species using BioMart homology mapping. "
640
+ "This function converts a list of ENSEMBL gene IDs from one species to their "
641
+ "homologous counterparts in another species using the Ensembl BioMart database. "
642
+ "The conversion is based on one-to-one ortholog mappings between species.",
643
+ "name": "interspecies_gene_conversion",
644
+ "optional_parameters": [],
645
+ "required_parameters": [
646
+ {
647
+ "default": None,
648
+ "description": "List of ENSEMBL gene IDs to convert (e.g., ['ENSG00000007372', 'ENSG00000181449'])",
649
+ "name": "gene_list",
650
+ "type": "list[str]",
651
+ },
652
+ {
653
+ "default": None,
654
+ "description": "Source species name. Supported species: human, mouse, rat, zebrafish, fly, "
655
+ "drosophila, worm, yeast, chicken, pig, cow, dog, macaque",
656
+ "name": "source_species",
657
+ "type": "str",
658
+ },
659
+ {
660
+ "default": None,
661
+ "description": "Target species name. Same supported species as source_species",
662
+ "name": "target_species",
663
+ "type": "str",
664
+ },
665
+ ],
666
+ },
667
+ {
668
+ "description": "Generate average protein embeddings for a list of Ensembl gene IDs using ESM (Evolutionary Scale Modeling) "
669
+ "protein language models. This function fetches all protein isoform sequences for each gene, "
670
+ "computes embeddings for each isoform using the specified ESM model and layer, then averages "
671
+ "the embeddings across all isoforms to create a single representative embedding per gene. "
672
+ "The embeddings are saved as PyTorch tensors for future use. "
673
+ "Memory-friendly implementation with rolling averages, small batch processing, and automatic memory "
674
+ "management. Automatically handles GPU/CPU device selection and includes error recovery for out-of-memory "
675
+ "situations by falling back to single-sequence processing.",
676
+ "name": "generate_gene_embeddings_with_ESM_models",
677
+ "optional_parameters": [
678
+ {
679
+ "default": "esm2_t6_8M_UR50D",
680
+ "description": "ESM model name to use for generating embeddings",
681
+ "name": "model_name",
682
+ "type": "str",
683
+ },
684
+ {
685
+ "default": 6,
686
+ "description": "Which layer of the ESM model to extract embeddings from, generally use last layer",
687
+ "name": "layer",
688
+ "type": "int",
689
+ },
690
+ {
691
+ "default": None,
692
+ "description": "Optional path to save embeddings as PyTorch dictionary",
693
+ "name": "save_path",
694
+ "type": "str",
695
+ },
696
+ {
697
+ "default": 1,
698
+ "description": "Number of sequences to process at once to manage memory usage",
699
+ "name": "batch_size",
700
+ "type": "int",
701
+ },
702
+ {
703
+ "default": 1024,
704
+ "description": "Maximum sequence length to process, longer sequences are filtered out",
705
+ "name": "max_sequence_length",
706
+ "type": "int",
707
+ },
708
+ ],
709
+ "required_parameters": [
710
+ {
711
+ "default": None,
712
+ "description": "List of Ensembl gene IDs (e.g., ['ENSG00000012048', 'ENSG00000012049'])",
713
+ "name": "ensembl_gene_ids",
714
+ "type": "List[str]",
715
+ }
716
+ ],
717
+ },
718
+ {
719
+ "description": "Generate Transcriptformer embeddings for single-cell RNA-seq data. "
720
+ "This function downloads model checkpoints, prepares the AnnData object with required fields "
721
+ "(ensembl_id, raw counts, assay metadata), and runs inference to generate cell or gene embeddings. "
722
+ "Transcriptformer is a transformer-based model that can learn rich representations of "
723
+ "single-cell gene expression data. The function automatically handles Ensembl ID pattern "
724
+ "detection, model downloading, data preprocessing, and creates missing assay metadata columns "
725
+ "with 'unknown' values if needed.",
726
+ "name": "generate_transcriptformer_embeddings",
727
+ "optional_parameters": [
728
+ {
729
+ "default": None,
730
+ "description": "Name of the output embeddings file. If None, will use input filename with '_transcriptformer_embeddings' suffix",
731
+ "name": "output_filename",
732
+ "type": "str",
733
+ },
734
+ {
735
+ "default": "tf-sapiens",
736
+ "description": "Type of transcriptformer model to download and use. Options: 'tf-sapiens', 'tf-exemplar', 'tf-metazoa'",
737
+ "name": "model_type",
738
+ "type": "str",
739
+ },
740
+ {
741
+ "default": None,
742
+ "description": "Path to the transcriptformer checkpoint directory. If None, will use './checkpoints/{model_type}'",
743
+ "name": "checkpoint_path",
744
+ "type": "str",
745
+ },
746
+ {
747
+ "default": 8,
748
+ "description": "Batch size for inference",
749
+ "name": "batch_size",
750
+ "type": "int",
751
+ },
752
+ {
753
+ "default": "16-mixed",
754
+ "description": "Precision for inference. Options: '16-mixed', '32'",
755
+ "name": "precision",
756
+ "type": "str",
757
+ },
758
+ {
759
+ "default": 30,
760
+ "description": "Maximum count value to clip to",
761
+ "name": "clip_counts",
762
+ "type": "int",
763
+ },
764
+ {
765
+ "default": -1,
766
+ "description": "Which layer to extract embeddings from (-1 for last layer)",
767
+ "name": "embedding_layer_index",
768
+ "type": "int",
769
+ },
770
+ {
771
+ "default": 1,
772
+ "description": "Number of GPUs to use",
773
+ "name": "num_gpus",
774
+ "type": "int",
775
+ },
776
+ {
777
+ "default": 0,
778
+ "description": "Number of data loading workers",
779
+ "name": "n_data_workers",
780
+ "type": "int",
781
+ },
782
+ {
783
+ "default": "ensembl_id",
784
+ "description": "Column name in AnnData.var containing gene identifiers",
785
+ "name": "gene_col_name",
786
+ "type": "str",
787
+ },
788
+ {
789
+ "default": None,
790
+ "description": "Path to pretrained embeddings for out-of-distribution species",
791
+ "name": "pretrained_embedding",
792
+ "type": "str",
793
+ },
794
+ {
795
+ "default": True,
796
+ "description": "Whether to filter genes to only those in the vocabulary",
797
+ "name": "filter_to_vocabs",
798
+ "type": "bool",
799
+ },
800
+ {
801
+ "default": "None",
802
+ "description": "Whether to use raw counts from AnnData.raw.X (True), adata.X (False), or auto-detect (None/auto)",
803
+ "name": "use_raw",
804
+ "type": "str",
805
+ },
806
+ {
807
+ "default": "cell",
808
+ "description": "Type of embeddings to extract: 'cell' for mean-pooled cell embeddings or 'cge' for contextual gene embeddings",
809
+ "name": "emb_type",
810
+ "type": "str",
811
+ },
812
+ {
813
+ "default": False,
814
+ "description": "Remove duplicate genes if found instead of raising an error",
815
+ "name": "remove_duplicate_genes",
816
+ "type": "bool",
817
+ },
818
+ {
819
+ "default": False,
820
+ "description": "Use map-style out-of-memory DataLoader (DistributedSampler-friendly)",
821
+ "name": "oom_dataloader",
822
+ "type": "bool",
823
+ },
824
+ ],
825
+ "required_parameters": [
826
+ {
827
+ "default": None,
828
+ "description": "Name of the input AnnData file (.h5ad format)",
829
+ "name": "adata_filename",
830
+ "type": "str",
831
+ },
832
+ {
833
+ "default": None,
834
+ "description": "Directory containing the input data file",
835
+ "name": "data_dir",
836
+ "type": "str",
837
+ },
838
+ ],
839
+ },
840
+ ]
Biomni/biomni/tool/tool_description/glycoengineering.py ADDED
@@ -0,0 +1,55 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ description = [
2
+ {
3
+ "name": "find_n_glycosylation_motifs",
4
+ "description": "Scan a protein sequence for canonical N-glycosylation sequons (N-X-[S/T], X≠P). Returns positions and motifs.",
5
+ "required_parameters": [
6
+ {
7
+ "name": "sequence",
8
+ "type": "str",
9
+ "description": "Protein sequence (one-letter AA codes)",
10
+ "default": None,
11
+ }
12
+ ],
13
+ "optional_parameters": [
14
+ {
15
+ "name": "allow_overlap",
16
+ "type": "bool",
17
+ "description": "Allow overlapping motif detections",
18
+ "default": False,
19
+ }
20
+ ],
21
+ },
22
+ {
23
+ "name": "predict_o_glycosylation_hotspots",
24
+ "description": "Heuristic O-glycosite hotspot prediction using local S/T density (lightweight baseline; see NetOGlyc 4.0 for SOTA).",
25
+ "required_parameters": [
26
+ {
27
+ "name": "sequence",
28
+ "type": "str",
29
+ "description": "Protein sequence (one-letter AA codes)",
30
+ "default": None,
31
+ }
32
+ ],
33
+ "optional_parameters": [
34
+ {"name": "window", "type": "int", "description": "Odd-sized window for local density (>=3)", "default": 7},
35
+ {
36
+ "name": "min_st_fraction",
37
+ "type": "float",
38
+ "description": "Min S/T fraction in window to flag site",
39
+ "default": 0.4,
40
+ },
41
+ {
42
+ "name": "disallow_proline_next",
43
+ "type": "bool",
44
+ "description": "Avoid S/T immediately followed by Proline",
45
+ "default": True,
46
+ },
47
+ ],
48
+ },
49
+ {
50
+ "name": "list_glycoengineering_resources",
51
+ "description": "Curated list of external glycoengineering tools and resources (links and notes) as referenced in issue #198.",
52
+ "required_parameters": [],
53
+ "optional_parameters": [],
54
+ },
55
+ ]
Biomni/biomni/tool/tool_description/immunology.py ADDED
@@ -0,0 +1,326 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ description = [
2
+ {
3
+ "description": "Perform ATAC-seq peak calling and differential accessibility analysis using MACS2.",
4
+ "name": "analyze_atac_seq_differential_accessibility",
5
+ "optional_parameters": [
6
+ {
7
+ "default": "./atac_results",
8
+ "description": "Directory to save output files",
9
+ "name": "output_dir",
10
+ "type": "str",
11
+ },
12
+ {
13
+ "default": "hs",
14
+ "description": "Genome size parameter for MACS2",
15
+ "name": "genome_size",
16
+ "type": "str",
17
+ },
18
+ {
19
+ "default": 0.05,
20
+ "description": "q-value cutoff for peak detection",
21
+ "name": "q_value",
22
+ "type": "float",
23
+ },
24
+ {
25
+ "default": "atac",
26
+ "description": "Prefix for output file names",
27
+ "name": "name_prefix",
28
+ "type": "str",
29
+ },
30
+ ],
31
+ "required_parameters": [
32
+ {
33
+ "default": None,
34
+ "description": "Path to the treatment condition BAM file with aligned ATAC-seq reads",
35
+ "name": "treatment_bam",
36
+ "type": "str",
37
+ },
38
+ {
39
+ "default": None,
40
+ "description": "Path to the control condition BAM file with aligned ATAC-seq reads",
41
+ "name": "control_bam",
42
+ "type": "str",
43
+ },
44
+ ],
45
+ },
46
+ {
47
+ "description": "Analyzes bacterial growth curve data to determine growth "
48
+ "parameters such as doubling time, growth rate, and lag "
49
+ "phase.",
50
+ "name": "analyze_bacterial_growth_curve",
51
+ "optional_parameters": [
52
+ {
53
+ "default": ".",
54
+ "description": "Directory where output files will be saved",
55
+ "name": "output_dir",
56
+ "type": "str",
57
+ }
58
+ ],
59
+ "required_parameters": [
60
+ {
61
+ "default": None,
62
+ "description": "Time points of measurements in hours",
63
+ "name": "time_points",
64
+ "type": "List or numpy.ndarray",
65
+ },
66
+ {
67
+ "default": None,
68
+ "description": "Optical density measurements corresponding to each time point",
69
+ "name": "od_values",
70
+ "type": "List or numpy.ndarray",
71
+ },
72
+ {
73
+ "default": None,
74
+ "description": "Name of the bacterial strain being analyzed",
75
+ "name": "strain_name",
76
+ "type": "str",
77
+ },
78
+ ],
79
+ },
80
+ {
81
+ "description": "Simulates the isolation and purification of immune cells from tissue samples.",
82
+ "name": "isolate_purify_immune_cells",
83
+ "optional_parameters": [
84
+ {
85
+ "default": "collagenase",
86
+ "description": "The enzyme used for tissue digestion",
87
+ "name": "enzyme_type",
88
+ "type": "str",
89
+ },
90
+ {
91
+ "default": None,
92
+ "description": "Specific antibody for magnetic-assisted cell sorting",
93
+ "name": "macs_antibody",
94
+ "type": "str",
95
+ },
96
+ {
97
+ "default": 45,
98
+ "description": "Digestion time in minutes",
99
+ "name": "digestion_time_min",
100
+ "type": "int",
101
+ },
102
+ ],
103
+ "required_parameters": [
104
+ {
105
+ "default": None,
106
+ "description": "The type of tissue sample (e.g., 'adipose', 'kidney', 'liver', 'lung', 'spleen')",
107
+ "name": "tissue_type",
108
+ "type": "str",
109
+ },
110
+ {
111
+ "default": None,
112
+ "description": "The immune cell population to isolate (e.g., 'macrophages', 'leukocytes', 'T cells')",
113
+ "name": "target_cell_type",
114
+ "type": "str",
115
+ },
116
+ ],
117
+ },
118
+ {
119
+ "description": "Estimate cell cycle phase durations using dual-nucleoside "
120
+ "pulse labeling data and mathematical modeling.",
121
+ "name": "estimate_cell_cycle_phase_durations",
122
+ "optional_parameters": [],
123
+ "required_parameters": [
124
+ {
125
+ "default": None,
126
+ "description": "Dictionary containing experimental "
127
+ "data from flow cytometry with EdU "
128
+ "and BrdU labeling, including time "
129
+ "points and percentages of labeled "
130
+ "cells",
131
+ "name": "flow_cytometry_data",
132
+ "type": "dict",
133
+ },
134
+ {
135
+ "default": None,
136
+ "description": "Initial estimates for cell cycle phase durations and death rates",
137
+ "name": "initial_estimates",
138
+ "type": "dict",
139
+ },
140
+ ],
141
+ },
142
+ {
143
+ "description": "Track immune cells under flow conditions and classify their behaviors.",
144
+ "name": "track_immune_cells_under_flow",
145
+ "optional_parameters": [
146
+ {
147
+ "default": "./output",
148
+ "description": "Directory to save output files",
149
+ "name": "output_dir",
150
+ "type": "str",
151
+ },
152
+ {
153
+ "default": 1.0,
154
+ "description": "Pixel size in micrometers",
155
+ "name": "pixel_size_um",
156
+ "type": "float",
157
+ },
158
+ {
159
+ "default": 1.0,
160
+ "description": "Time interval between frames in seconds",
161
+ "name": "time_interval_sec",
162
+ "type": "float",
163
+ },
164
+ {
165
+ "default": "right",
166
+ "description": "Direction of flow ('right', 'left', 'up', 'down')",
167
+ "name": "flow_direction",
168
+ "type": "str",
169
+ },
170
+ ],
171
+ "required_parameters": [
172
+ {
173
+ "default": None,
174
+ "description": "Path to image sequence directory or video file",
175
+ "name": "image_sequence_path",
176
+ "type": "str",
177
+ }
178
+ ],
179
+ },
180
+ {
181
+ "description": "Analyze CFSE-labeled cell samples to quantify cell division and proliferation.",
182
+ "name": "analyze_cfse_cell_proliferation",
183
+ "optional_parameters": [
184
+ {
185
+ "default": "FL1-A",
186
+ "description": "Name of the channel containing CFSE fluorescence data",
187
+ "name": "cfse_channel",
188
+ "type": "str",
189
+ },
190
+ {
191
+ "default": None,
192
+ "description": "Tuple of (min_fsc, max_fsc, min_ssc, max_ssc) for lymphocyte gating",
193
+ "name": "lymphocyte_gate",
194
+ "type": "tuple or None",
195
+ },
196
+ ],
197
+ "required_parameters": [
198
+ {
199
+ "default": None,
200
+ "description": "Path to the FCS file containing flow cytometry data from CFSE-labeled cells",
201
+ "name": "fcs_file_path",
202
+ "type": "str",
203
+ }
204
+ ],
205
+ },
206
+ {
207
+ "description": "Analyze cytokine production (IFN-γ, IL-17) in CD4+ T cells after antigen stimulation.",
208
+ "name": "analyze_cytokine_production_in_cd4_tcells",
209
+ "optional_parameters": [
210
+ {
211
+ "default": "./results",
212
+ "description": "Directory to save the results file",
213
+ "name": "output_dir",
214
+ "type": "str",
215
+ }
216
+ ],
217
+ "required_parameters": [
218
+ {
219
+ "default": None,
220
+ "description": "Dictionary mapping stimulation "
221
+ "conditions to FCS file paths. "
222
+ "Expected keys: 'unstimulated', "
223
+ "'Mtb300', 'CMV', 'SEB'",
224
+ "name": "fcs_files_dict",
225
+ "type": "dict",
226
+ }
227
+ ],
228
+ },
229
+ {
230
+ "description": "Analyze ELISA data to quantify EBV antibody titers in plasma/serum samples.",
231
+ "name": "analyze_ebv_antibody_titers",
232
+ "optional_parameters": [
233
+ {
234
+ "default": "./",
235
+ "description": "Directory to save output files.",
236
+ "name": "output_dir",
237
+ "type": "str",
238
+ }
239
+ ],
240
+ "required_parameters": [
241
+ {
242
+ "default": None,
243
+ "description": "Dictionary containing optical "
244
+ "density (OD) readings for each "
245
+ "sample. Format: {sample_id: "
246
+ "{'VCA_IgG': float, 'VCA_IgM': "
247
+ "float, 'EA_IgG': float, 'EA_IgM': "
248
+ "float, 'EBNA1_IgG': float, "
249
+ "'EBNA1_IgM': float}}",
250
+ "name": "raw_od_data",
251
+ "type": "dict",
252
+ },
253
+ {
254
+ "default": None,
255
+ "description": "Dictionary containing standard "
256
+ "curve data for each antibody type. "
257
+ "Format: {antibody_type: "
258
+ "[(concentration, OD), ...]}",
259
+ "name": "standard_curve_data",
260
+ "type": "dict",
261
+ },
262
+ {
263
+ "default": None,
264
+ "description": "Dictionary containing metadata for "
265
+ "each sample. Format: {sample_id: "
266
+ "{'group': str, 'collection_date': "
267
+ "str}}",
268
+ "name": "sample_metadata",
269
+ "type": "dict",
270
+ },
271
+ ],
272
+ },
273
+ {
274
+ "description": "Analyzes histological images of CNS lesions to quantify "
275
+ "immune cell infiltration, demyelination, and tissue damage.",
276
+ "name": "analyze_cns_lesion_histology",
277
+ "optional_parameters": [
278
+ {
279
+ "default": "./output",
280
+ "description": "Directory to save output files",
281
+ "name": "output_dir",
282
+ "type": "str",
283
+ },
284
+ {
285
+ "default": "H&E",
286
+ "description": 'Type of histological stain used (options: "H&E", "LFB", "IHC")',
287
+ "name": "stain_type",
288
+ "type": "str",
289
+ },
290
+ ],
291
+ "required_parameters": [
292
+ {
293
+ "default": None,
294
+ "description": "Path to the microscopy image file of brain or spinal cord tissue section",
295
+ "name": "image_path",
296
+ "type": "str",
297
+ }
298
+ ],
299
+ },
300
+ {
301
+ "description": "Analyzes immunohistochemistry images to quantify protein expression and spatial distribution.",
302
+ "name": "analyze_immunohistochemistry_image",
303
+ "optional_parameters": [
304
+ {
305
+ "default": "Unknown",
306
+ "description": "Name of the protein being analyzed",
307
+ "name": "protein_name",
308
+ "type": "str",
309
+ },
310
+ {
311
+ "default": "./ihc_results/",
312
+ "description": "Directory to save output files",
313
+ "name": "output_dir",
314
+ "type": "str",
315
+ },
316
+ ],
317
+ "required_parameters": [
318
+ {
319
+ "default": None,
320
+ "description": "Path to the microscopy image of tissue section stained with antibodies",
321
+ "name": "image_path",
322
+ "type": "str",
323
+ }
324
+ ],
325
+ },
326
+ ]
Biomni/biomni/tool/tool_description/literature.py ADDED
@@ -0,0 +1,161 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ description = [
2
+ {
3
+ "description": "Fetches supplementary information for a paper given its DOI "
4
+ "and saves it to a specified directory.",
5
+ "name": "fetch_supplementary_info_from_doi",
6
+ "optional_parameters": [
7
+ {
8
+ "default": "supplementary_info",
9
+ "description": "Directory to save supplementary files",
10
+ "name": "output_dir",
11
+ "type": "str",
12
+ }
13
+ ],
14
+ "required_parameters": [
15
+ {
16
+ "default": None,
17
+ "description": "The paper DOI",
18
+ "name": "doi",
19
+ "type": "str",
20
+ }
21
+ ],
22
+ },
23
+ {
24
+ "description": "Query arXiv for papers based on the provided search query.",
25
+ "name": "query_arxiv",
26
+ "optional_parameters": [
27
+ {
28
+ "default": 10,
29
+ "description": "The maximum number of papers to retrieve.",
30
+ "name": "max_papers",
31
+ "type": "int",
32
+ }
33
+ ],
34
+ "required_parameters": [
35
+ {
36
+ "default": None,
37
+ "description": "The search query string.",
38
+ "name": "query",
39
+ "type": "str",
40
+ }
41
+ ],
42
+ },
43
+ {
44
+ "description": "Query Google Scholar for papers based on the provided search "
45
+ "query and return the first search result.",
46
+ "name": "query_scholar",
47
+ "optional_parameters": [],
48
+ "required_parameters": [
49
+ {
50
+ "default": None,
51
+ "description": "The search query string.",
52
+ "name": "query",
53
+ "type": "str",
54
+ }
55
+ ],
56
+ },
57
+ {
58
+ "description": "Query PubMed for papers based on the provided search query.",
59
+ "name": "query_pubmed",
60
+ "optional_parameters": [
61
+ {
62
+ "default": 10,
63
+ "description": "The maximum number of papers to retrieve.",
64
+ "name": "max_papers",
65
+ "type": "int",
66
+ },
67
+ {
68
+ "default": 3,
69
+ "description": "Maximum number of retry attempts with modified queries.",
70
+ "name": "max_retries",
71
+ "type": "int",
72
+ },
73
+ ],
74
+ "required_parameters": [
75
+ {
76
+ "default": None,
77
+ "description": "The search query string.",
78
+ "name": "query",
79
+ "type": "str",
80
+ }
81
+ ],
82
+ },
83
+ {
84
+ "description": "Search using Google search and return formatted results.",
85
+ "name": "search_google",
86
+ "optional_parameters": [
87
+ {
88
+ "default": 3,
89
+ "description": "Number of results to return",
90
+ "name": "num_results",
91
+ "type": "int",
92
+ },
93
+ {
94
+ "default": "en",
95
+ "description": "Language code for search results",
96
+ "name": "language",
97
+ "type": "str",
98
+ },
99
+ ],
100
+ "required_parameters": [
101
+ {
102
+ "default": None,
103
+ "description": 'The search query (e.g., "protocol text or search question")',
104
+ "name": "query",
105
+ "type": "str",
106
+ }
107
+ ],
108
+ },
109
+ {
110
+ "description": "Extract the text content of a webpage using requests and BeautifulSoup.",
111
+ "name": "extract_url_content",
112
+ "optional_parameters": [],
113
+ "required_parameters": [
114
+ {
115
+ "default": None,
116
+ "description": "Webpage URL to extract content from",
117
+ "name": "url",
118
+ "type": "str",
119
+ }
120
+ ],
121
+ },
122
+ {
123
+ "description": "Extract text content from a PDF file.",
124
+ "name": "extract_pdf_content",
125
+ "optional_parameters": [],
126
+ "required_parameters": [
127
+ {
128
+ "default": None,
129
+ "description": "URL of the PDF file",
130
+ "name": "url",
131
+ "type": "str",
132
+ }
133
+ ],
134
+ },
135
+ {
136
+ "description": "Initiate an advanced web search by launching a specialized agent to collect relevant information and citations through multiple rounds of web searches for a given query.",
137
+ "name": "advanced_web_search_claude",
138
+ "optional_parameters": [
139
+ {
140
+ "default": 1,
141
+ "description": "Maximum number of searches",
142
+ "name": "max_searches",
143
+ "type": "int",
144
+ },
145
+ {
146
+ "default": 3,
147
+ "description": "Maximum number of retry attempts with modified queries.",
148
+ "name": "max_retries",
149
+ "type": "int",
150
+ },
151
+ ],
152
+ "required_parameters": [
153
+ {
154
+ "default": None,
155
+ "description": "The search query string.",
156
+ "name": "query",
157
+ "type": "str",
158
+ }
159
+ ],
160
+ },
161
+ ]
Biomni/biomni/tool/tool_description/molecular_biology.py ADDED
@@ -0,0 +1,560 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ description = [
2
+ {
3
+ "description": "Find all Open Reading Frames (ORFs) in a DNA sequence using "
4
+ "Biopython, searching both forward and reverse complement "
5
+ "strands.",
6
+ "name": "annotate_open_reading_frames",
7
+ "optional_parameters": [
8
+ {
9
+ "default": False,
10
+ "description": "Whether to search the reverse complement strand",
11
+ "name": "search_reverse",
12
+ "type": "bool",
13
+ },
14
+ {
15
+ "default": False,
16
+ "description": "Whether to filter out ORFs with same end but later start",
17
+ "name": "filter_subsets",
18
+ "type": "bool",
19
+ },
20
+ ],
21
+ "required_parameters": [
22
+ {
23
+ "default": None,
24
+ "description": "DNA sequence to analyze",
25
+ "name": "sequence",
26
+ "type": "str",
27
+ },
28
+ {
29
+ "default": None,
30
+ "description": "Minimum length of ORF in nucleotides",
31
+ "name": "min_length",
32
+ "type": "int",
33
+ },
34
+ ],
35
+ },
36
+ {
37
+ "description": "Annotate a DNA sequence using pLannotate's command-line interface.",
38
+ "name": "annotate_plasmid",
39
+ "optional_parameters": [
40
+ {
41
+ "default": True,
42
+ "description": "Whether the sequence is circular",
43
+ "name": "is_circular",
44
+ "type": "bool",
45
+ }
46
+ ],
47
+ "required_parameters": [
48
+ {
49
+ "default": None,
50
+ "description": "The DNA sequence to annotate",
51
+ "name": "sequence",
52
+ "type": "str",
53
+ }
54
+ ],
55
+ },
56
+ {
57
+ "description": "Retrieves the coding sequence(s) of a specified gene from NCBI Entrez.",
58
+ "name": "get_gene_coding_sequence",
59
+ "optional_parameters": [
60
+ {
61
+ "default": None,
62
+ "description": "Email address for NCBI Entrez (recommended)",
63
+ "name": "email",
64
+ "type": "str",
65
+ }
66
+ ],
67
+ "required_parameters": [
68
+ {
69
+ "default": None,
70
+ "description": "Name of the gene",
71
+ "name": "gene_name",
72
+ "type": "str",
73
+ },
74
+ {
75
+ "default": None,
76
+ "description": "Name of the organism",
77
+ "name": "organism",
78
+ "type": "str",
79
+ },
80
+ ],
81
+ },
82
+ {
83
+ "description": "Unified function to retrieve plasmid sequences from either "
84
+ "Addgene or NCBI. If is_addgene is True or identifier is "
85
+ "numeric, uses Addgene. Otherwise searches NCBI using the "
86
+ "plasmid name.",
87
+ "name": "get_plasmid_sequence",
88
+ "optional_parameters": [
89
+ {
90
+ "default": None,
91
+ "description": "Force Addgene lookup if True, force "
92
+ "NCBI if False. If None, attempts to "
93
+ "auto-detect based on identifier "
94
+ "format.",
95
+ "name": "is_addgene",
96
+ "type": "bool",
97
+ }
98
+ ],
99
+ "required_parameters": [
100
+ {
101
+ "default": None,
102
+ "description": "Either an Addgene ID or plasmid name",
103
+ "name": "identifier",
104
+ "type": "str",
105
+ }
106
+ ],
107
+ },
108
+ {
109
+ "description": "Align short sequences (primers) to a longer sequence, "
110
+ "allowing for one mismatch. Checks both forward and reverse "
111
+ "complement strands.",
112
+ "name": "align_sequences",
113
+ "optional_parameters": [],
114
+ "required_parameters": [
115
+ {
116
+ "default": None,
117
+ "description": "Target DNA sequence",
118
+ "name": "long_seq",
119
+ "type": "str",
120
+ },
121
+ {
122
+ "default": None,
123
+ "description": "Single primer or list of primers",
124
+ "name": "short_seqs",
125
+ "type": "Union[str, List[str]]",
126
+ },
127
+ ],
128
+ },
129
+ {
130
+ "description": "Simulate PCR amplification with given primers and sequence.",
131
+ "name": "pcr_simple",
132
+ "optional_parameters": [
133
+ {
134
+ "default": False,
135
+ "description": "Whether the sequence is circular",
136
+ "name": "circular",
137
+ "type": "bool",
138
+ }
139
+ ],
140
+ "required_parameters": [
141
+ {
142
+ "default": None,
143
+ "description": "Either a sequence string or path to plasmid file",
144
+ "name": "sequence",
145
+ "type": "str",
146
+ },
147
+ {
148
+ "default": None,
149
+ "description": "Forward primer sequence (5' to 3')",
150
+ "name": "forward_primer",
151
+ "type": "str",
152
+ },
153
+ {
154
+ "default": None,
155
+ "description": "Reverse primer sequence (5' to 3')",
156
+ "name": "reverse_primer",
157
+ "type": "str",
158
+ },
159
+ ],
160
+ },
161
+ {
162
+ "description": "Simulates restriction enzyme digestion of a DNA sequence and "
163
+ "returns the resulting fragments with their properties.",
164
+ "name": "digest_sequence",
165
+ "optional_parameters": [
166
+ {
167
+ "default": True,
168
+ "description": "Whether the DNA sequence is circular (True) or linear (False)",
169
+ "name": "is_circular",
170
+ "type": "bool",
171
+ }
172
+ ],
173
+ "required_parameters": [
174
+ {
175
+ "default": None,
176
+ "description": "Input DNA sequence to be digested",
177
+ "name": "dna_sequence",
178
+ "type": "str",
179
+ },
180
+ {
181
+ "default": None,
182
+ "description": "Names of restriction enzymes to use for digestion",
183
+ "name": "enzyme_names",
184
+ "type": "List[str]",
185
+ },
186
+ ],
187
+ },
188
+ {
189
+ "description": "Identifies restriction enzyme sites in a given DNA sequence for specified enzymes.",
190
+ "name": "find_restriction_sites",
191
+ "optional_parameters": [
192
+ {
193
+ "default": True,
194
+ "description": "Whether the DNA sequence is circular (True) or linear (False)",
195
+ "name": "is_circular",
196
+ "type": "bool",
197
+ }
198
+ ],
199
+ "required_parameters": [
200
+ {
201
+ "default": None,
202
+ "description": "Complete input DNA sequence",
203
+ "name": "dna_sequence",
204
+ "type": "str",
205
+ },
206
+ {
207
+ "default": None,
208
+ "description": "List of restriction enzyme names to check",
209
+ "name": "enzymes",
210
+ "type": "List[str]",
211
+ },
212
+ ],
213
+ },
214
+ {
215
+ "description": "Finds common restriction enzyme sites in a DNA sequence and returns their cut positions.",
216
+ "name": "find_restriction_enzymes",
217
+ "optional_parameters": [
218
+ {
219
+ "default": False,
220
+ "description": "Whether the sequence is circular",
221
+ "name": "is_circular",
222
+ "type": "bool",
223
+ }
224
+ ],
225
+ "required_parameters": [
226
+ {
227
+ "default": None,
228
+ "description": "DNA sequence to analyze",
229
+ "name": "sequence",
230
+ "type": "str",
231
+ }
232
+ ],
233
+ },
234
+ {
235
+ "description": "Compare query sequence against reference sequence to identify mutations.",
236
+ "name": "find_sequence_mutations",
237
+ "optional_parameters": [
238
+ {
239
+ "default": 1,
240
+ "description": "The start position of the query sequence",
241
+ "name": "query_start",
242
+ "type": "int",
243
+ }
244
+ ],
245
+ "required_parameters": [
246
+ {
247
+ "default": None,
248
+ "description": "The sequence being analyzed",
249
+ "name": "query_sequence",
250
+ "type": "str",
251
+ },
252
+ {
253
+ "default": None,
254
+ "description": "The reference sequence to compare against",
255
+ "name": "reference_sequence",
256
+ "type": "str",
257
+ },
258
+ ],
259
+ },
260
+ {
261
+ "description": "Design sgRNAs for CRISPR knockout by searching pre-computed "
262
+ "sgRNA libraries. Returns optimized guide RNAs for targeting "
263
+ "a specific gene.",
264
+ "name": "design_knockout_sgrna",
265
+ "optional_parameters": [
266
+ {
267
+ "default": "human",
268
+ "description": "Target organism species",
269
+ "name": "species",
270
+ "type": "str",
271
+ },
272
+ {
273
+ "default": 1,
274
+ "description": "Number of guides to return",
275
+ "name": "num_guides",
276
+ "type": "int",
277
+ },
278
+ ],
279
+ "required_parameters": [
280
+ {
281
+ "default": None,
282
+ "description": 'Target gene symbol/name (e.g., "EGFR", "TP53")',
283
+ "name": "gene_name",
284
+ "type": "str",
285
+ },
286
+ {
287
+ "default": None,
288
+ "description": "Path to the data lake",
289
+ "name": "data_lake_path",
290
+ "type": "str",
291
+ },
292
+ ],
293
+ },
294
+ {
295
+ "description": "Return a standard protocol for annealing oligonucleotides without phosphorylation.",
296
+ "name": "get_oligo_annealing_protocol",
297
+ "optional_parameters": [],
298
+ "required_parameters": [],
299
+ },
300
+ {
301
+ "description": "Return a customized protocol for Golden Gate assembly based "
302
+ "on the number of inserts and specific DNA sequences.",
303
+ "name": "get_golden_gate_assembly_protocol",
304
+ "optional_parameters": [
305
+ {
306
+ "default": 1,
307
+ "description": "Number of inserts to be assembled",
308
+ "name": "num_inserts",
309
+ "type": "int",
310
+ },
311
+ {
312
+ "default": 75.0,
313
+ "description": "Amount of vector to use in ng",
314
+ "name": "vector_amount_ng",
315
+ "type": "float",
316
+ },
317
+ {
318
+ "default": None,
319
+ "description": "List of insert lengths in bp",
320
+ "name": "insert_lengths",
321
+ "type": "List[int]",
322
+ },
323
+ {
324
+ "default": False,
325
+ "description": "Whether this is for library preparation",
326
+ "name": "is_library_prep",
327
+ "type": "bool",
328
+ },
329
+ ],
330
+ "required_parameters": [
331
+ {
332
+ "default": None,
333
+ "description": "Type IIS restriction enzyme to be used",
334
+ "name": "enzyme_name",
335
+ "type": "str",
336
+ },
337
+ {
338
+ "default": None,
339
+ "description": "Length of the destination vector in bp",
340
+ "name": "vector_length",
341
+ "type": "int",
342
+ },
343
+ ],
344
+ },
345
+ {
346
+ "description": "Return a standard protocol for bacterial transformation.",
347
+ "name": "get_bacterial_transformation_protocol",
348
+ "optional_parameters": [
349
+ {
350
+ "default": "ampicillin",
351
+ "description": "Selection antibiotic",
352
+ "name": "antibiotic",
353
+ "type": "str",
354
+ },
355
+ {
356
+ "default": False,
357
+ "description": "Whether the sequence contains repetitive elements",
358
+ "name": "is_repetitive",
359
+ "type": "bool",
360
+ },
361
+ ],
362
+ "required_parameters": [],
363
+ },
364
+ {
365
+ "description": "Design a single primer within the given sequence window.",
366
+ "name": "design_primer",
367
+ "optional_parameters": [
368
+ {
369
+ "default": 20,
370
+ "description": "Length of the primer to design",
371
+ "name": "primer_length",
372
+ "type": "int",
373
+ },
374
+ {
375
+ "default": 0.4,
376
+ "description": "Minimum GC content",
377
+ "name": "min_gc",
378
+ "type": "float",
379
+ },
380
+ {
381
+ "default": 0.6,
382
+ "description": "Maximum GC content",
383
+ "name": "max_gc",
384
+ "type": "float",
385
+ },
386
+ {
387
+ "default": 55.0,
388
+ "description": "Minimum melting temperature in °C",
389
+ "name": "min_tm",
390
+ "type": "float",
391
+ },
392
+ {
393
+ "default": 65.0,
394
+ "description": "Maximum melting temperature in °C",
395
+ "name": "max_tm",
396
+ "type": "float",
397
+ },
398
+ {
399
+ "default": 100,
400
+ "description": "Size of window to search for primers",
401
+ "name": "search_window",
402
+ "type": "int",
403
+ },
404
+ ],
405
+ "required_parameters": [
406
+ {
407
+ "default": None,
408
+ "description": "Target DNA sequence",
409
+ "name": "sequence",
410
+ "type": "str",
411
+ },
412
+ {
413
+ "default": None,
414
+ "description": "Starting position for primer search",
415
+ "name": "start_pos",
416
+ "type": "int",
417
+ },
418
+ ],
419
+ },
420
+ {
421
+ "description": "Design Sanger sequencing primers to verify a specific region "
422
+ "in a plasmid. First tries to use primers from an existing "
423
+ "primer pool. If they cannot fully cover the region, designs "
424
+ "additional primers as needed.",
425
+ "name": "design_verification_primers",
426
+ "optional_parameters": [
427
+ {
428
+ "default": None,
429
+ "description": "List of existing primers with their sequences and optional names",
430
+ "name": "existing_primers",
431
+ "type": "Optional[List[Dict[str, str]]]",
432
+ },
433
+ {
434
+ "default": True,
435
+ "description": "Whether the plasmid is circular",
436
+ "name": "is_circular",
437
+ "type": "bool",
438
+ },
439
+ {
440
+ "default": 800,
441
+ "description": "Typical read length for each primer in base pairs",
442
+ "name": "coverage_length",
443
+ "type": "int",
444
+ },
445
+ {
446
+ "default": 20,
447
+ "description": "Length of newly designed primers",
448
+ "name": "primer_length",
449
+ "type": "int",
450
+ },
451
+ {
452
+ "default": 0.4,
453
+ "description": "Minimum GC content for new primers",
454
+ "name": "min_gc",
455
+ "type": "float",
456
+ },
457
+ {
458
+ "default": 0.6,
459
+ "description": "Maximum GC content for new primers",
460
+ "name": "max_gc",
461
+ "type": "float",
462
+ },
463
+ {
464
+ "default": 55.0,
465
+ "description": "Minimum melting temperature in °C",
466
+ "name": "min_tm",
467
+ "type": "float",
468
+ },
469
+ {
470
+ "default": 65.0,
471
+ "description": "Maximum melting temperature in °C",
472
+ "name": "max_tm",
473
+ "type": "float",
474
+ },
475
+ ],
476
+ "required_parameters": [
477
+ {
478
+ "default": None,
479
+ "description": "The complete plasmid sequence",
480
+ "name": "plasmid_sequence",
481
+ "type": "str",
482
+ },
483
+ {
484
+ "default": None,
485
+ "description": "Start and end positions to verify (0-based indexing)",
486
+ "name": "target_region",
487
+ "type": "Tuple[int, int]",
488
+ },
489
+ ],
490
+ },
491
+ {
492
+ "description": "Design complementary oligonucleotides with Type IIS "
493
+ "restriction enzyme overhangs for Golden Gate assembly based "
494
+ "on restriction site analysis of the backbone.",
495
+ "name": "design_golden_gate_oligos",
496
+ "optional_parameters": [
497
+ {
498
+ "default": True,
499
+ "description": "Whether the backbone is circular",
500
+ "name": "is_circular",
501
+ "type": "bool",
502
+ }
503
+ ],
504
+ "required_parameters": [
505
+ {
506
+ "default": None,
507
+ "description": "Complete backbone sequence",
508
+ "name": "backbone_sequence",
509
+ "type": "str",
510
+ },
511
+ {
512
+ "default": None,
513
+ "description": "Sequence to be inserted (e.g., sgRNA target sequence)",
514
+ "name": "insert_sequence",
515
+ "type": "str",
516
+ },
517
+ {
518
+ "default": None,
519
+ "description": "Type IIS restriction enzyme to be used",
520
+ "name": "enzyme_name",
521
+ "type": "str",
522
+ },
523
+ ],
524
+ },
525
+ {
526
+ "description": "Simulate Golden Gate assembly to predict final construct "
527
+ "sequences from backbone and fragment sequences.",
528
+ "name": "golden_gate_assembly",
529
+ "optional_parameters": [
530
+ {
531
+ "default": True,
532
+ "description": "Whether the backbone is circular",
533
+ "name": "is_circular",
534
+ "type": "bool",
535
+ }
536
+ ],
537
+ "required_parameters": [
538
+ {
539
+ "default": None,
540
+ "description": "Complete backbone sequence",
541
+ "name": "backbone_sequence",
542
+ "type": "str",
543
+ },
544
+ {
545
+ "default": None,
546
+ "description": 'Type IIS restriction enzyme to be used (e.g., "BsmBI", "BsaI")',
547
+ "name": "enzyme_name",
548
+ "type": "str",
549
+ },
550
+ {
551
+ "default": None,
552
+ "description": "List of fragments to insert, containing one of: "
553
+ "name + fwd_oligo + rev_oligo (oligo pair with matching overhangs) or "
554
+ "name + sequence (double-stranded DNA fragment containing restriction sites)",
555
+ "name": "fragments",
556
+ "type": "List[Dict[str, str]]",
557
+ },
558
+ ],
559
+ },
560
+ ]
Biomni/biomni/tool/tool_description/pathology.py ADDED
@@ -0,0 +1,213 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ description = [
2
+ {
3
+ "description": "Analyze aortic diameter and geometry from cardiovascular "
4
+ "imaging data to measure aortic root diameter, ascending "
5
+ "aorta diameter, and calculate geometric parameters such as "
6
+ "tortuosity and dilation indices.",
7
+ "name": "analyze_aortic_diameter_and_geometry",
8
+ "optional_parameters": [
9
+ {
10
+ "default": "./output",
11
+ "description": "Directory to save output files",
12
+ "name": "output_dir",
13
+ "type": "str",
14
+ }
15
+ ],
16
+ "required_parameters": [
17
+ {
18
+ "default": None,
19
+ "description": "Path to the cardiovascular imaging data (DICOM, JPG, PNG)",
20
+ "name": "image_path",
21
+ "type": "str",
22
+ }
23
+ ],
24
+ },
25
+ {
26
+ "description": "Analyze luminescence-based ATP assay data to determine intracellular ATP concentration.",
27
+ "name": "analyze_atp_luminescence_assay",
28
+ "optional_parameters": [
29
+ {
30
+ "default": "cell_count",
31
+ "description": "Method used to normalize ATP values, either cell_count or protein_content",
32
+ "name": "normalization_method",
33
+ "type": "str",
34
+ },
35
+ {
36
+ "default": None,
37
+ "description": "Path to CSV file with normalization "
38
+ "data or dictionary with sample IDs "
39
+ "as keys and normalization values",
40
+ "name": "normalization_data",
41
+ "type": "str or dict",
42
+ },
43
+ ],
44
+ "required_parameters": [
45
+ {
46
+ "default": None,
47
+ "description": "Path to CSV file containing "
48
+ "luminescence readings from samples "
49
+ "with columns for Sample_ID and "
50
+ "Luminescence_Value",
51
+ "name": "data_file",
52
+ "type": "str",
53
+ },
54
+ {
55
+ "default": None,
56
+ "description": "Path to CSV file containing "
57
+ "standard curve data with columns "
58
+ "for ATP_Concentration (in nM) and "
59
+ "Luminescence_Value",
60
+ "name": "standard_curve_file",
61
+ "type": "str",
62
+ },
63
+ ],
64
+ },
65
+ {
66
+ "description": "Analyze histological images of thrombus samples stained with "
67
+ "H&E to identify and quantify different thrombus components "
68
+ "(fresh, cellular lysis, endothelialization, fibroblastic "
69
+ "reaction).",
70
+ "name": "analyze_thrombus_histology",
71
+ "optional_parameters": [
72
+ {
73
+ "default": "./output",
74
+ "description": "Directory to save output files",
75
+ "name": "output_dir",
76
+ "type": "str",
77
+ }
78
+ ],
79
+ "required_parameters": [
80
+ {
81
+ "default": None,
82
+ "description": "Path to the histological image of thrombus sample stained with H&E",
83
+ "name": "image_path",
84
+ "type": "str",
85
+ }
86
+ ],
87
+ },
88
+ {
89
+ "description": "Analyzes intracellular calcium concentration using Rhod-2 "
90
+ "fluorescent indicator from microscopy images.",
91
+ "name": "analyze_intracellular_calcium_with_rhod2",
92
+ "optional_parameters": [
93
+ {
94
+ "default": "./output",
95
+ "description": "Directory to save output files",
96
+ "name": "output_dir",
97
+ "type": "str",
98
+ }
99
+ ],
100
+ "required_parameters": [
101
+ {
102
+ "default": None,
103
+ "description": "Path to the background image (no cells, just media)",
104
+ "name": "background_image_path",
105
+ "type": "str",
106
+ },
107
+ {
108
+ "default": None,
109
+ "description": "Path to the control image (cells without calcium stimulus)",
110
+ "name": "control_image_path",
111
+ "type": "str",
112
+ },
113
+ {
114
+ "default": None,
115
+ "description": "Path to the sample image (cells with calcium stimulus)",
116
+ "name": "sample_image_path",
117
+ "type": "str",
118
+ },
119
+ ],
120
+ },
121
+ {
122
+ "description": "Quantify the volume/density of immunofluorescence-labeled corneal nerve fibers.",
123
+ "name": "quantify_corneal_nerve_fibers",
124
+ "optional_parameters": [
125
+ {
126
+ "default": "./output",
127
+ "description": "Directory to save output files",
128
+ "name": "output_dir",
129
+ "type": "str",
130
+ },
131
+ {
132
+ "default": "otsu",
133
+ "description": "Method for thresholding ('otsu', 'adaptive', 'manual')",
134
+ "name": "threshold_method",
135
+ "type": "str",
136
+ },
137
+ ],
138
+ "required_parameters": [
139
+ {
140
+ "default": None,
141
+ "description": "Path to the immunofluorescence microscopy image file",
142
+ "name": "image_path",
143
+ "type": "str",
144
+ },
145
+ {
146
+ "default": None,
147
+ "description": "Type of nerve fiber marker (e.g., 'βIII-tubulin', 'SP', 'L1CAM')",
148
+ "name": "marker_type",
149
+ "type": "str",
150
+ },
151
+ ],
152
+ },
153
+ {
154
+ "description": "Segment cells and quantify protein expression levels from multichannel tissue images.",
155
+ "name": "segment_and_quantify_cells_in_multiplexed_images",
156
+ "optional_parameters": [
157
+ {
158
+ "default": 0,
159
+ "description": "Index of the nuclear marker channel (typically DAPI)",
160
+ "name": "nuclear_channel_index",
161
+ "type": "int",
162
+ },
163
+ {
164
+ "default": "./output",
165
+ "description": "Directory to save output files",
166
+ "name": "output_dir",
167
+ "type": "str",
168
+ },
169
+ ],
170
+ "required_parameters": [
171
+ {
172
+ "default": None,
173
+ "description": "Path to the multichannel image file (tiff stack or similar format)",
174
+ "name": "image_path",
175
+ "type": "str",
176
+ },
177
+ {
178
+ "default": None,
179
+ "description": "List of marker names corresponding to each channel in the image",
180
+ "name": "markers_list",
181
+ "type": "List[str]",
182
+ },
183
+ ],
184
+ },
185
+ {
186
+ "description": "Analyze bone microarchitecture parameters from 3D micro-CT "
187
+ "images to calculate bone mineral density, bone volume, "
188
+ "trabecular number, thickness, and separation.",
189
+ "name": "analyze_bone_microct_morphometry",
190
+ "optional_parameters": [
191
+ {
192
+ "default": "./results",
193
+ "description": "Directory to save output files",
194
+ "name": "output_dir",
195
+ "type": "str",
196
+ },
197
+ {
198
+ "default": None,
199
+ "description": "Threshold value for bone segmentation. If None, Otsu's method will be used",
200
+ "name": "threshold_value",
201
+ "type": "float",
202
+ },
203
+ ],
204
+ "required_parameters": [
205
+ {
206
+ "default": None,
207
+ "description": "Path to the micro-CT scan data file (TIFF stack or similar 3D format)",
208
+ "name": "input_file_path",
209
+ "type": "str",
210
+ }
211
+ ],
212
+ },
213
+ ]
Biomni/biomni/tool/tool_description/pharmacology.py ADDED
@@ -0,0 +1,774 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ description = [
2
+ {
3
+ "description": "Run DiffDock molecular docking using a protein PDB file and "
4
+ "a SMILES string for the ligand, executing the process in a "
5
+ "Docker container.",
6
+ "name": "run_diffdock_with_smiles",
7
+ "optional_parameters": [
8
+ {
9
+ "default": 0,
10
+ "description": "GPU device ID to use for computation",
11
+ "name": "gpu_device",
12
+ "type": "int",
13
+ },
14
+ {
15
+ "default": True,
16
+ "description": "Whether to use GPU acceleration for docking",
17
+ "name": "use_gpu",
18
+ "type": "bool",
19
+ },
20
+ ],
21
+ "required_parameters": [
22
+ {
23
+ "default": None,
24
+ "description": "Path to the protein PDB file for docking",
25
+ "name": "pdb_path",
26
+ "type": "str",
27
+ },
28
+ {
29
+ "default": None,
30
+ "description": "SMILES string representation of the ligand molecule",
31
+ "name": "smiles_string",
32
+ "type": "str",
33
+ },
34
+ {
35
+ "default": None,
36
+ "description": "Local directory path where docking results will be saved",
37
+ "name": "local_output_dir",
38
+ "type": "str",
39
+ },
40
+ ],
41
+ },
42
+ {
43
+ "description": "Performs molecular docking using AutoDock Vina to predict "
44
+ "binding affinities between small molecules and a receptor "
45
+ "protein.",
46
+ "name": "docking_autodock_vina",
47
+ "optional_parameters": [
48
+ {
49
+ "default": 1,
50
+ "description": "Number of CPU cores to use for docking",
51
+ "name": "ncpu",
52
+ "type": "int",
53
+ }
54
+ ],
55
+ "required_parameters": [
56
+ {
57
+ "default": None,
58
+ "description": "List of SMILES strings representing small molecules to dock",
59
+ "name": "smiles_list",
60
+ "type": "List[str]",
61
+ },
62
+ {
63
+ "default": None,
64
+ "description": "Path to the receptor protein structure PDB file",
65
+ "name": "receptor_pdb_file",
66
+ "type": "str",
67
+ },
68
+ {
69
+ "default": None,
70
+ "description": "3D coordinates [x, y, z] of the docking box center",
71
+ "name": "box_center",
72
+ "type": "List[float]",
73
+ },
74
+ {
75
+ "default": None,
76
+ "description": "Dimensions [x, y, z] of the docking box",
77
+ "name": "box_size",
78
+ "type": "List[float]",
79
+ },
80
+ ],
81
+ },
82
+ {
83
+ "description": "Runs AutoSite on a PDB file to identify potential binding "
84
+ "sites and returns a research log with the results.",
85
+ "name": "run_autosite",
86
+ "optional_parameters": [
87
+ {
88
+ "default": 1.0,
89
+ "description": "Grid spacing parameter for AutoSite calculation",
90
+ "name": "spacing",
91
+ "type": "float",
92
+ }
93
+ ],
94
+ "required_parameters": [
95
+ {
96
+ "default": None,
97
+ "description": "Path to the input PDB file",
98
+ "name": "pdb_file",
99
+ "type": "str",
100
+ },
101
+ {
102
+ "default": None,
103
+ "description": "Directory where AutoSite results will be saved",
104
+ "name": "output_dir",
105
+ "type": "str",
106
+ },
107
+ ],
108
+ },
109
+ {
110
+ "description": "Computes TxGNN model predictions for drug repurposing and "
111
+ "returns the top predicted drugs with their scores for a "
112
+ "given disease.",
113
+ "name": "retrieve_topk_repurposing_drugs_from_disease_txgnn",
114
+ "optional_parameters": [
115
+ {
116
+ "default": 5,
117
+ "description": "The number of top drug predictions to return",
118
+ "name": "k",
119
+ "type": "int",
120
+ }
121
+ ],
122
+ "required_parameters": [
123
+ {
124
+ "default": None,
125
+ "description": "The name of the disease for which to retrieve drug predictions",
126
+ "name": "disease_name",
127
+ "type": "str",
128
+ },
129
+ {
130
+ "default": None,
131
+ "description": "Path to the data lake",
132
+ "name": "data_lake_path",
133
+ "type": "str",
134
+ },
135
+ ],
136
+ },
137
+ {
138
+ "description": "Predicts ADMET (Absorption, Distribution, Metabolism, "
139
+ "Excretion, Toxicity) properties for a list of compounds "
140
+ "using pretrained models.",
141
+ "name": "predict_admet_properties",
142
+ "optional_parameters": [
143
+ {
144
+ "default": "MPNN",
145
+ "description": "Type of model to use for ADMET prediction (options: 'MPNN', 'CNN', 'Morgan')",
146
+ "name": "ADMET_model_type",
147
+ "type": "str",
148
+ }
149
+ ],
150
+ "required_parameters": [
151
+ {
152
+ "default": None,
153
+ "description": "List of SMILES strings representing chemical compounds to analyze",
154
+ "name": "smiles_list",
155
+ "type": "List[str]",
156
+ }
157
+ ],
158
+ },
159
+ {
160
+ "description": "Predicts binding affinity between small molecules and a "
161
+ "protein sequence using pre-trained deep learning models.",
162
+ "name": "predict_binding_affinity_protein_1d_sequence",
163
+ "optional_parameters": [
164
+ {
165
+ "default": "MPNN-CNN",
166
+ "description": "Deep learning model architecture to "
167
+ "use for binding affinity prediction "
168
+ "(options: CNN-CNN, MPNN-CNN, "
169
+ "Morgan-CNN, Morgan-AAC, "
170
+ "Daylight-AAC)",
171
+ "name": "affinity_model_type",
172
+ "type": "str",
173
+ }
174
+ ],
175
+ "required_parameters": [
176
+ {
177
+ "default": None,
178
+ "description": "List of SMILES strings representing chemical compounds",
179
+ "name": "smiles_list",
180
+ "type": "List[str]",
181
+ },
182
+ {
183
+ "default": None,
184
+ "description": "Protein sequence in amino acid format",
185
+ "name": "amino_acid_sequence",
186
+ "type": "str",
187
+ },
188
+ ],
189
+ },
190
+ {
191
+ "description": "Analyzes the stability of pharmaceutical formulations under accelerated storage conditions.",
192
+ "name": "analyze_accelerated_stability_of_pharmaceutical_formulations",
193
+ "optional_parameters": [],
194
+ "required_parameters": [
195
+ {
196
+ "default": None,
197
+ "description": "List of formulation dictionaries "
198
+ "containing name, active ingredient, "
199
+ "concentration, and excipients",
200
+ "name": "formulations",
201
+ "type": "List[dict]",
202
+ },
203
+ {
204
+ "default": None,
205
+ "description": "List of storage condition "
206
+ "dictionaries containing "
207
+ "temperature, humidity (optional), "
208
+ "and description",
209
+ "name": "storage_conditions",
210
+ "type": "List[dict]",
211
+ },
212
+ {
213
+ "default": None,
214
+ "description": "List of time points in days to evaluate stability",
215
+ "name": "time_points",
216
+ "type": "List[int]",
217
+ },
218
+ ],
219
+ },
220
+ {
221
+ "description": "Generates a detailed protocol for performing a 3D "
222
+ "chondrogenic aggregate culture assay to evaluate compounds' "
223
+ "effects on chondrogenesis.",
224
+ "name": "run_3d_chondrogenic_aggregate_assay",
225
+ "optional_parameters": [
226
+ {
227
+ "default": 21,
228
+ "description": "Total duration of the culture period in days",
229
+ "name": "culture_duration_days",
230
+ "type": "int",
231
+ },
232
+ {
233
+ "default": 7,
234
+ "description": "Interval in days between measurements",
235
+ "name": "measurement_intervals",
236
+ "type": "int",
237
+ },
238
+ ],
239
+ "required_parameters": [
240
+ {
241
+ "default": None,
242
+ "description": "Dictionary with cell information "
243
+ "including 'source', "
244
+ "'passage_number', and "
245
+ "'cell_density'",
246
+ "name": "chondrocyte_cells",
247
+ "type": "dict",
248
+ },
249
+ {
250
+ "default": None,
251
+ "description": "List of compounds to test, each with 'name', 'concentration', and 'vehicle' keys",
252
+ "name": "test_compounds",
253
+ "type": "list of dict",
254
+ },
255
+ ],
256
+ },
257
+ {
258
+ "description": "Grade and monitor adverse events in animal studies using the VCOG-CTCAE standard.",
259
+ "name": "grade_adverse_events_using_vcog_ctcae",
260
+ "optional_parameters": [],
261
+ "required_parameters": [
262
+ {
263
+ "default": None,
264
+ "description": "Path to a CSV file containing "
265
+ "clinical evaluation data with "
266
+ "columns: subject_id, time_point, "
267
+ "symptom, severity, measurement "
268
+ "(optional)",
269
+ "name": "clinical_data_file",
270
+ "type": "str",
271
+ }
272
+ ],
273
+ },
274
+ {
275
+ "description": "Analyze biodistribution and pharmacokinetic profile of radiolabeled antibodies.",
276
+ "name": "analyze_radiolabeled_antibody_biodistribution",
277
+ "optional_parameters": [],
278
+ "required_parameters": [
279
+ {
280
+ "default": None,
281
+ "description": "Time points (hours) at which measurements were taken",
282
+ "name": "time_points",
283
+ "type": "List[float] or numpy.ndarray",
284
+ },
285
+ {
286
+ "default": None,
287
+ "description": "Dictionary where keys are tissue "
288
+ "names and values are lists/arrays "
289
+ "of %IA/g measurements corresponding "
290
+ "to time_points. Must include "
291
+ "'tumor' as one of the keys",
292
+ "name": "tissue_data",
293
+ "type": "dict",
294
+ },
295
+ ],
296
+ },
297
+ {
298
+ "description": "Estimate radiation absorbed doses to tumor and normal organs "
299
+ "for alpha-particle radiotherapeutics using the Medical "
300
+ "Internal Radiation Dose (MIRD) schema.",
301
+ "name": "estimate_alpha_particle_radiotherapy_dosimetry",
302
+ "optional_parameters": [
303
+ {
304
+ "default": "dosimetry_results.csv",
305
+ "description": "Filename to save the dosimetry results",
306
+ "name": "output_file",
307
+ "type": "str",
308
+ }
309
+ ],
310
+ "required_parameters": [
311
+ {
312
+ "default": None,
313
+ "description": "Dictionary containing organ/tissue "
314
+ "names as keys and a list of "
315
+ "time-activity measurements as "
316
+ "values. Each measurement should be "
317
+ "a tuple of (time_hours, "
318
+ "percent_injected_activity). Must "
319
+ "include entries for all relevant "
320
+ "organs including 'tumor'.",
321
+ "name": "biodistribution_data",
322
+ "type": "dict",
323
+ },
324
+ {
325
+ "default": None,
326
+ "description": "Dictionary containing radiation "
327
+ "parameters for the alpha-emitting "
328
+ "radionuclide including "
329
+ "'radionuclide', 'half_life_hours', "
330
+ "'energy_per_decay_MeV', "
331
+ "'radiation_weighting_factor', and "
332
+ "'S_factors'.",
333
+ "name": "radiation_parameters",
334
+ "type": "dict",
335
+ },
336
+ ],
337
+ },
338
+ {
339
+ "description": "Perform a Methylome-wide Association Study (MWAS) to "
340
+ "identify CpG sites significantly associated with CYP2C19 "
341
+ "metabolizer status.",
342
+ "name": "perform_mwas_cyp2c19_metabolizer_status",
343
+ "optional_parameters": [
344
+ {
345
+ "default": None,
346
+ "description": "Path to CSV or TSV file containing "
347
+ "covariates to adjust for in the "
348
+ "regression model (e.g., age, sex, "
349
+ "smoking status).",
350
+ "name": "covariates_path",
351
+ "type": "str",
352
+ },
353
+ {
354
+ "default": 0.05,
355
+ "description": "P-value threshold for significance after multiple testing correction.",
356
+ "name": "pvalue_threshold",
357
+ "type": "float",
358
+ },
359
+ {
360
+ "default": "significant_cpg_sites.csv",
361
+ "description": "Filename to save significant CpG sites.",
362
+ "name": "output_file",
363
+ "type": "str",
364
+ },
365
+ ],
366
+ "required_parameters": [
367
+ {
368
+ "default": None,
369
+ "description": "Path to CSV or TSV file containing "
370
+ "DNA methylation beta values. Rows "
371
+ "should be samples, columns should "
372
+ "be CpG sites.",
373
+ "name": "methylation_data_path",
374
+ "type": "str",
375
+ },
376
+ {
377
+ "default": None,
378
+ "description": "Path to CSV or TSV file containing "
379
+ "CYP2C19 metabolizer status for each "
380
+ "sample. Should have a sample ID "
381
+ "column and a status column.",
382
+ "name": "metabolizer_status_path",
383
+ "type": "str",
384
+ },
385
+ ],
386
+ },
387
+ {
388
+ "description": "Calculate key physicochemical properties of a drug candidate molecule.",
389
+ "name": "calculate_physicochemical_properties",
390
+ "optional_parameters": [],
391
+ "required_parameters": [
392
+ {
393
+ "default": None,
394
+ "description": "The molecular structure in SMILES format",
395
+ "name": "smiles_string",
396
+ "type": "str",
397
+ }
398
+ ],
399
+ },
400
+ {
401
+ "description": "Analyze tumor growth inhibition in xenograft models across different treatment groups.",
402
+ "name": "analyze_xenograft_tumor_growth_inhibition",
403
+ "optional_parameters": [
404
+ {
405
+ "default": "./results",
406
+ "description": "Directory to save output files",
407
+ "name": "output_dir",
408
+ "type": "str",
409
+ }
410
+ ],
411
+ "required_parameters": [
412
+ {
413
+ "default": None,
414
+ "description": "Path to CSV or TSV file containing tumor volume measurements",
415
+ "name": "data_path",
416
+ "type": "str",
417
+ },
418
+ {
419
+ "default": None,
420
+ "description": "Name of the column containing time points",
421
+ "name": "time_column",
422
+ "type": "str",
423
+ },
424
+ {
425
+ "default": None,
426
+ "description": "Name of the column containing tumor volume measurements",
427
+ "name": "volume_column",
428
+ "type": "str",
429
+ },
430
+ {
431
+ "default": None,
432
+ "description": "Name of the column containing treatment group labels",
433
+ "name": "group_column",
434
+ "type": "str",
435
+ },
436
+ {
437
+ "default": None,
438
+ "description": "Name of the column containing subject/mouse identifiers",
439
+ "name": "subject_column",
440
+ "type": "str",
441
+ },
442
+ ],
443
+ },
444
+ {
445
+ "description": "Analyze western blot or DNA electrophoresis images and return pixel distribution statistics including intensity statistics, percentiles, and brightness distribution. Use this to determine appropriate threshold values for find_roi_from_image.",
446
+ "name": "analyze_pixel_distribution",
447
+ "optional_parameters": [],
448
+ "required_parameters": [
449
+ {
450
+ "default": None,
451
+ "description": "Path to the input grayscale image. Automatically appends .png if no suffix is provided.",
452
+ "name": "image_path",
453
+ "type": "str",
454
+ }
455
+ ],
456
+ },
457
+ {
458
+ "description": "Find the ROIs (regions of interest) of protein bands from a Western blot or DNA electrophoresis image using threshold-based blob detection. Returns annotated image path and list of ROI coordinates. Use analyze_pixel_distribution first to determine appropriate threshold values. The returned ROI list can be converted to target_bands format for analyze_western_blot.",
459
+ "name": "find_roi_from_image",
460
+ "optional_parameters": [
461
+ {
462
+ "default": True,
463
+ "description": "If True, draw green contours (hulls) and blue keypoint boxes for debugging.",
464
+ "name": "debug",
465
+ "type": "bool",
466
+ }
467
+ ],
468
+ "required_parameters": [
469
+ {
470
+ "default": None,
471
+ "description": "Path to the input image.",
472
+ "name": "image_path",
473
+ "type": "str",
474
+ },
475
+ {
476
+ "default": None,
477
+ "description": "Pixel intensities lower than this value are used to make the binary image. Use analyze_pixel_distribution to determine appropriate values.",
478
+ "name": "lower_threshold",
479
+ "type": "int",
480
+ },
481
+ {
482
+ "default": None,
483
+ "description": "Pixel intensities greater than or equal to this value are used to make the binary image. Use analyze_pixel_distribution to determine appropriate values.",
484
+ "name": "upper_threshold",
485
+ "type": "int",
486
+ },
487
+ {
488
+ "default": None,
489
+ "description": "The actual number of bands expected in the image.",
490
+ "name": "number_of_bands",
491
+ "type": "int",
492
+ },
493
+ ],
494
+ },
495
+ {
496
+ "description": "Performs densitometric analysis of Western blot images to "
497
+ "quantify relative protein expression.",
498
+ "name": "analyze_western_blot",
499
+ "optional_parameters": [
500
+ {
501
+ "default": "./results",
502
+ "description": "Directory to save output files",
503
+ "name": "output_dir",
504
+ "type": "str",
505
+ }
506
+ ],
507
+ "required_parameters": [
508
+ {
509
+ "default": None,
510
+ "description": "Path to the Western blot image file",
511
+ "name": "blot_image_path",
512
+ "type": "str",
513
+ },
514
+ {
515
+ "default": None,
516
+ "description": "List of dictionaries containing "
517
+ "information about target protein "
518
+ "bands, each with 'name' and 'roi' "
519
+ "(region of interest as [x, y, "
520
+ "width, height])",
521
+ "name": "target_bands",
522
+ "type": "list of dict",
523
+ },
524
+ {
525
+ "default": None,
526
+ "description": "Dictionary with 'name' and 'roi' "
527
+ "for the loading control protein "
528
+ "(e.g., β-actin, GAPDH)",
529
+ "name": "loading_control_band",
530
+ "type": "dict",
531
+ },
532
+ {
533
+ "default": None,
534
+ "description": "Dictionary containing information "
535
+ "about antibodies used with "
536
+ "'primary' and 'secondary' keys",
537
+ "name": "antibody_info",
538
+ "type": "dict",
539
+ },
540
+ ],
541
+ },
542
+ {
543
+ "description": "Query drug-drug interactions from DDInter database to identify potential interactions, mechanisms, and severity levels between specified drugs.",
544
+ "name": "query_drug_interactions",
545
+ "required_parameters": [
546
+ {
547
+ "default": None,
548
+ "description": "List of drug names to query for interactions",
549
+ "name": "drug_names",
550
+ "type": "List[str]",
551
+ }
552
+ ],
553
+ "optional_parameters": [
554
+ {
555
+ "default": None,
556
+ "description": "Filter results by specific interaction types",
557
+ "name": "interaction_types",
558
+ "type": "List[str]",
559
+ },
560
+ {
561
+ "default": None,
562
+ "description": "Filter results by severity levels (Major, Moderate, Minor)",
563
+ "name": "severity_levels",
564
+ "type": "List[str]",
565
+ },
566
+ {
567
+ "default": None,
568
+ "description": "Path to data lake directory containing DDInter data",
569
+ "name": "data_lake_path",
570
+ "type": "str",
571
+ },
572
+ ],
573
+ },
574
+ {
575
+ "description": "Analyze safety of a drug combination for potential interactions using DDInter database with comprehensive risk assessment and clinical recommendations.",
576
+ "name": "check_drug_combination_safety",
577
+ "required_parameters": [
578
+ {
579
+ "default": None,
580
+ "description": "List of drugs to analyze for combination safety",
581
+ "name": "drug_list",
582
+ "type": "List[str]",
583
+ }
584
+ ],
585
+ "optional_parameters": [
586
+ {
587
+ "default": True,
588
+ "description": "Include interaction mechanism descriptions in results",
589
+ "name": "include_mechanisms",
590
+ "type": "bool",
591
+ },
592
+ {
593
+ "default": True,
594
+ "description": "Include management recommendations in results",
595
+ "name": "include_management",
596
+ "type": "bool",
597
+ },
598
+ {
599
+ "default": None,
600
+ "description": "Path to data lake directory containing DDInter data",
601
+ "name": "data_lake_path",
602
+ "type": "str",
603
+ },
604
+ ],
605
+ },
606
+ {
607
+ "description": "Analyze interaction mechanisms between two specific drugs providing detailed mechanistic insights and clinical significance assessment.",
608
+ "name": "analyze_interaction_mechanisms",
609
+ "required_parameters": [
610
+ {
611
+ "default": None,
612
+ "description": "Pair of drug names to analyze (drug1, drug2)",
613
+ "name": "drug_pair",
614
+ "type": "Tuple[str, str]",
615
+ }
616
+ ],
617
+ "optional_parameters": [
618
+ {
619
+ "default": True,
620
+ "description": "Include detailed mechanistic information in analysis",
621
+ "name": "detailed_analysis",
622
+ "type": "bool",
623
+ },
624
+ {
625
+ "default": None,
626
+ "description": "Path to data lake directory containing DDInter data",
627
+ "name": "data_lake_path",
628
+ "type": "str",
629
+ },
630
+ ],
631
+ },
632
+ {
633
+ "description": "Find alternative drugs that don't interact with contraindicated drugs using DDInter database for safer therapeutic substitutions.",
634
+ "name": "find_alternative_drugs_ddinter",
635
+ "required_parameters": [
636
+ {
637
+ "default": None,
638
+ "description": "Drug to find alternatives for",
639
+ "name": "target_drug",
640
+ "type": "str",
641
+ },
642
+ {
643
+ "default": None,
644
+ "description": "List of drugs to avoid interactions with",
645
+ "name": "contraindicated_drugs",
646
+ "type": "List[str]",
647
+ },
648
+ ],
649
+ "optional_parameters": [
650
+ {
651
+ "default": None,
652
+ "description": "Limit search to specific therapeutic class",
653
+ "name": "therapeutic_class",
654
+ "type": "str",
655
+ },
656
+ {
657
+ "default": None,
658
+ "description": "Path to data lake directory containing DDInter data",
659
+ "name": "data_lake_path",
660
+ "type": "str",
661
+ },
662
+ ],
663
+ },
664
+ {
665
+ "description": "Query FDA adverse event reports for specific drugs from the OpenFDA database to identify potential safety signals, reaction patterns, and regulatory intelligence.",
666
+ "name": "query_fda_adverse_events",
667
+ "required_parameters": [
668
+ {
669
+ "default": None,
670
+ "description": "Name of the drug to query for adverse events",
671
+ "name": "drug_name",
672
+ "type": "str",
673
+ },
674
+ ],
675
+ "optional_parameters": [
676
+ {
677
+ "default": None,
678
+ "description": "Optional date range as (start_date, end_date) in YYYY-MM-DD format",
679
+ "name": "date_range",
680
+ "type": "Tuple[str, str]",
681
+ },
682
+ {
683
+ "default": None,
684
+ "description": "Optional filter by severity levels ['serious', 'non_serious']",
685
+ "name": "severity_filter",
686
+ "type": "List[str]",
687
+ },
688
+ {
689
+ "default": None,
690
+ "description": "Optional filter by outcomes ['life_threatening', 'hospitalization', 'death']",
691
+ "name": "outcome_filter",
692
+ "type": "List[str]",
693
+ },
694
+ {
695
+ "default": 100,
696
+ "description": "Maximum number of results to return",
697
+ "name": "limit",
698
+ "type": "int",
699
+ },
700
+ ],
701
+ },
702
+ {
703
+ "description": "Retrieve FDA drug label information including indications, contraindications, warnings, and dosage information from the OpenFDA database.",
704
+ "name": "get_fda_drug_label_info",
705
+ "required_parameters": [
706
+ {
707
+ "default": None,
708
+ "description": "Name of the drug to query for label information",
709
+ "name": "drug_name",
710
+ "type": "str",
711
+ },
712
+ ],
713
+ "optional_parameters": [
714
+ {
715
+ "default": None,
716
+ "description": "Optional list of specific sections to retrieve ['indications_and_usage', 'contraindications', 'warnings', 'dosage_and_administration']",
717
+ "name": "sections",
718
+ "type": "List[str]",
719
+ },
720
+ ],
721
+ },
722
+ {
723
+ "description": "Check for FDA drug recalls and enforcement actions from the OpenFDA database to identify safety concerns and regulatory actions.",
724
+ "name": "check_fda_drug_recalls",
725
+ "required_parameters": [
726
+ {
727
+ "default": None,
728
+ "description": "Name of the drug to check for recalls",
729
+ "name": "drug_name",
730
+ "type": "str",
731
+ },
732
+ ],
733
+ "optional_parameters": [
734
+ {
735
+ "default": None,
736
+ "description": "Optional filter by recall class ['Class I', 'Class II', 'Class III']",
737
+ "name": "classification",
738
+ "type": "List[str]",
739
+ },
740
+ {
741
+ "default": None,
742
+ "description": "Optional date range for recalls as (start_date, end_date)",
743
+ "name": "date_range",
744
+ "type": "Tuple[str, str]",
745
+ },
746
+ ],
747
+ },
748
+ {
749
+ "description": "Analyze safety signals across multiple drugs using OpenFDA adverse event data to identify patterns and comparative risk profiles.",
750
+ "name": "analyze_fda_safety_signals",
751
+ "required_parameters": [
752
+ {
753
+ "default": None,
754
+ "description": "List of drug names to analyze for safety signals",
755
+ "name": "drug_list",
756
+ "type": "List[str]",
757
+ },
758
+ ],
759
+ "optional_parameters": [
760
+ {
761
+ "default": None,
762
+ "description": "Optional comparison time period as (start_date, end_date)",
763
+ "name": "comparison_period",
764
+ "type": "Tuple[str, str]",
765
+ },
766
+ {
767
+ "default": 2.0,
768
+ "description": "Threshold for signal detection",
769
+ "name": "signal_threshold",
770
+ "type": "float",
771
+ },
772
+ ],
773
+ },
774
+ ]
Biomni/biomni/tool/tool_description/physiology.py ADDED
@@ -0,0 +1,363 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ description = [
2
+ {
3
+ "description": "Generate a 3D model of facial anatomy from MRI scans of the head and neck.",
4
+ "name": "reconstruct_3d_face_from_mri",
5
+ "optional_parameters": [
6
+ {
7
+ "default": "./output",
8
+ "description": "Directory where output files will be saved",
9
+ "name": "output_dir",
10
+ "type": "str",
11
+ },
12
+ {
13
+ "default": "subject",
14
+ "description": "Identifier for the subject, used in output filenames",
15
+ "name": "subject_id",
16
+ "type": "str",
17
+ },
18
+ {
19
+ "default": 300,
20
+ "description": "Threshold value for initial segmentation of facial tissues",
21
+ "name": "threshold_value",
22
+ "type": "int",
23
+ },
24
+ ],
25
+ "required_parameters": [
26
+ {
27
+ "default": None,
28
+ "description": "Path to the MRI scan file (NIfTI format: .nii or .nii.gz)",
29
+ "name": "mri_file_path",
30
+ "type": "str",
31
+ }
32
+ ],
33
+ },
34
+ {
35
+ "description": "Extracts P1 amplitude and latency from Auditory Brainstem Response (ABR) waveform data.",
36
+ "name": "analyze_abr_waveform_p1_metrics",
37
+ "optional_parameters": [],
38
+ "required_parameters": [
39
+ {
40
+ "default": None,
41
+ "description": "Time points of the ABR recording in milliseconds",
42
+ "name": "time_ms",
43
+ "type": "array-like",
44
+ },
45
+ {
46
+ "default": None,
47
+ "description": "Amplitude values of the ABR recording in microvolts",
48
+ "name": "amplitude_uv",
49
+ "type": "array-like",
50
+ },
51
+ ],
52
+ },
53
+ {
54
+ "description": "Analyze ciliary beat frequency from high-speed video microscopy data using FFT analysis.",
55
+ "name": "analyze_ciliary_beat_frequency",
56
+ "optional_parameters": [
57
+ {
58
+ "default": 5,
59
+ "description": "Number of regions of interest to analyze",
60
+ "name": "roi_count",
61
+ "type": "int",
62
+ },
63
+ {
64
+ "default": 0,
65
+ "description": "Minimum frequency to consider in Hz",
66
+ "name": "min_freq",
67
+ "type": "float",
68
+ },
69
+ {
70
+ "default": 30,
71
+ "description": "Maximum frequency to consider in Hz",
72
+ "name": "max_freq",
73
+ "type": "float",
74
+ },
75
+ {
76
+ "default": "./",
77
+ "description": "Directory to save output files",
78
+ "name": "output_dir",
79
+ "type": "str",
80
+ },
81
+ ],
82
+ "required_parameters": [
83
+ {
84
+ "default": None,
85
+ "description": "Path to the high-speed video microscopy file of ciliary beating",
86
+ "name": "video_path",
87
+ "type": "str",
88
+ }
89
+ ],
90
+ },
91
+ {
92
+ "description": "Analyze colocalization between two fluorescently labeled proteins in microscopy images.",
93
+ "name": "analyze_protein_colocalization",
94
+ "optional_parameters": [
95
+ {
96
+ "default": "./output",
97
+ "description": "Directory to save output files",
98
+ "name": "output_dir",
99
+ "type": "str",
100
+ },
101
+ {
102
+ "default": "otsu",
103
+ "description": "Method for thresholding images ('otsu', 'li', or 'yen')",
104
+ "name": "threshold_method",
105
+ "type": "str",
106
+ },
107
+ ],
108
+ "required_parameters": [
109
+ {
110
+ "default": None,
111
+ "description": "Path to the first channel image file (fluorescent protein 1)",
112
+ "name": "channel1_path",
113
+ "type": "str",
114
+ },
115
+ {
116
+ "default": None,
117
+ "description": "Path to the second channel image file (fluorescent protein 2)",
118
+ "name": "channel2_path",
119
+ "type": "str",
120
+ },
121
+ ],
122
+ },
123
+ {
124
+ "description": "Performs cosinor analysis on physiological time series data to characterize circadian rhythms.",
125
+ "name": "perform_cosinor_analysis",
126
+ "optional_parameters": [
127
+ {
128
+ "default": 24.0,
129
+ "description": "Period of the rhythm in hours, default is 24 hours for circadian rhythms",
130
+ "name": "period",
131
+ "type": "float",
132
+ }
133
+ ],
134
+ "required_parameters": [
135
+ {
136
+ "default": None,
137
+ "description": "Time points of the measurements in hours",
138
+ "name": "time_data",
139
+ "type": "array-like",
140
+ },
141
+ {
142
+ "default": None,
143
+ "description": "Physiological measurements corresponding to each time point",
144
+ "name": "physiological_data",
145
+ "type": "array-like",
146
+ },
147
+ ],
148
+ },
149
+ {
150
+ "description": "Calculate Apparent Diffusion Coefficient (ADC) map from "
151
+ "diffusion-weighted MRI data using monoexponential diffusion "
152
+ "model.",
153
+ "name": "calculate_brain_adc_map",
154
+ "optional_parameters": [
155
+ {
156
+ "default": "adc_map.nii.gz",
157
+ "description": "Path where the output ADC map will be saved",
158
+ "name": "output_path",
159
+ "type": "str",
160
+ },
161
+ {
162
+ "default": None,
163
+ "description": "Path to a binary mask file to limit ADC calculation to brain regions",
164
+ "name": "mask_file_path",
165
+ "type": "str",
166
+ },
167
+ ],
168
+ "required_parameters": [
169
+ {
170
+ "default": None,
171
+ "description": "Path to the 4D NIfTI file containing diffusion-weighted MRI data",
172
+ "name": "dwi_file_path",
173
+ "type": "str",
174
+ },
175
+ {
176
+ "default": None,
177
+ "description": "List of b-values corresponding to each volume in the 4D DWI data",
178
+ "name": "b_values",
179
+ "type": "List[float]",
180
+ },
181
+ ],
182
+ },
183
+ {
184
+ "description": "Analyze calcium dynamics in endo-lysosomal compartments using ELGA/ELGA1 probe data.",
185
+ "name": "analyze_endolysosomal_calcium_dynamics",
186
+ "optional_parameters": [
187
+ {
188
+ "default": None,
189
+ "description": "Time point (in seconds) when treatment/stimulus was applied",
190
+ "name": "treatment_time",
191
+ "type": "float",
192
+ },
193
+ {
194
+ "default": "",
195
+ "description": "Type of cells used in the experiment",
196
+ "name": "cell_type",
197
+ "type": "str",
198
+ },
199
+ {
200
+ "default": "",
201
+ "description": "Name of the treatment or stimulus applied",
202
+ "name": "treatment_name",
203
+ "type": "str",
204
+ },
205
+ {
206
+ "default": "calcium_analysis_results.txt",
207
+ "description": "Name of the file to save detailed analysis results",
208
+ "name": "output_file",
209
+ "type": "str",
210
+ },
211
+ ],
212
+ "required_parameters": [
213
+ {
214
+ "default": None,
215
+ "description": "Time points of the measurements in seconds",
216
+ "name": "time_points",
217
+ "type": "numpy.ndarray or list",
218
+ },
219
+ {
220
+ "default": None,
221
+ "description": "Luminescence intensity values from ELGA/ELGA1 probes corresponding to Ca2+ levels",
222
+ "name": "luminescence_values",
223
+ "type": "numpy.ndarray or list",
224
+ },
225
+ ],
226
+ },
227
+ {
228
+ "description": "Analyzes fatty acid composition in tissue samples using gas chromatography data.",
229
+ "name": "analyze_fatty_acid_composition_by_gc",
230
+ "optional_parameters": [
231
+ {
232
+ "default": "./results",
233
+ "description": "Directory where result files will be saved",
234
+ "name": "output_directory",
235
+ "type": "str",
236
+ }
237
+ ],
238
+ "required_parameters": [
239
+ {
240
+ "default": None,
241
+ "description": "Path to the CSV file containing gas "
242
+ "chromatography data with columns "
243
+ "'retention_time' and 'peak_area'",
244
+ "name": "gc_data_file",
245
+ "type": "str",
246
+ },
247
+ {
248
+ "default": None,
249
+ "description": "Type of tissue sample (e.g., liver, kidney, heart, muscle, adipose)",
250
+ "name": "tissue_type",
251
+ "type": "str",
252
+ },
253
+ {
254
+ "default": None,
255
+ "description": "Identifier for the sample being analyzed",
256
+ "name": "sample_id",
257
+ "type": "str",
258
+ },
259
+ ],
260
+ },
261
+ {
262
+ "description": "Analyzes raw blood pressure data to calculate key hemodynamic parameters.",
263
+ "name": "analyze_hemodynamic_data",
264
+ "optional_parameters": [
265
+ {
266
+ "default": "hemodynamic_results.csv",
267
+ "description": "Filename to save the calculated parameters",
268
+ "name": "output_file",
269
+ "type": "str",
270
+ }
271
+ ],
272
+ "required_parameters": [
273
+ {
274
+ "default": None,
275
+ "description": "Raw blood pressure measurements in mmHg",
276
+ "name": "pressure_data",
277
+ "type": "numpy.ndarray",
278
+ },
279
+ {
280
+ "default": None,
281
+ "description": "Data acquisition rate in Hz (samples per second)",
282
+ "name": "sampling_rate",
283
+ "type": "float",
284
+ },
285
+ ],
286
+ },
287
+ {
288
+ "description": "Simulates the transport and binding of thyroid hormones "
289
+ "across different tissue compartments using an ODE-based "
290
+ "pharmacokinetic model.",
291
+ "name": "simulate_thyroid_hormone_pharmacokinetics",
292
+ "optional_parameters": [
293
+ {
294
+ "default": "(0, 24)",
295
+ "description": "Start and end time for simulation in hours",
296
+ "name": "time_span",
297
+ "type": "tuple",
298
+ },
299
+ {
300
+ "default": 100,
301
+ "description": "Number of time points to output",
302
+ "name": "time_points",
303
+ "type": "int",
304
+ },
305
+ ],
306
+ "required_parameters": [
307
+ {
308
+ "default": None,
309
+ "description": "Dictionary containing model "
310
+ "parameters including "
311
+ "transport_rates, binding_constants, "
312
+ "metabolism_rates, and volumes",
313
+ "name": "parameters",
314
+ "type": "dict",
315
+ },
316
+ {
317
+ "default": None,
318
+ "description": "Dictionary of initial concentrations for all molecular species in each compartment",
319
+ "name": "initial_conditions",
320
+ "type": "dict",
321
+ },
322
+ ],
323
+ },
324
+ {
325
+ "description": "Analyzes an image to detect and quantify amyloid-beta "
326
+ "plaques, returning a detailed analysis log.",
327
+ "name": "quantify_amyloid_beta_plaques",
328
+ "optional_parameters": [
329
+ {
330
+ "default": "./results",
331
+ "description": "Directory where results will be saved",
332
+ "name": "output_dir",
333
+ "type": "str",
334
+ },
335
+ {
336
+ "default": "otsu",
337
+ "description": "Method for image thresholding (otsu, adaptive, or manual)",
338
+ "name": "threshold_method",
339
+ "type": "str",
340
+ },
341
+ {
342
+ "default": 50,
343
+ "description": "Minimum size in pixels² for a region to be considered a plaque",
344
+ "name": "min_plaque_size",
345
+ "type": "int",
346
+ },
347
+ {
348
+ "default": 127,
349
+ "description": "Threshold value to use when threshold_method is manual",
350
+ "name": "manual_threshold",
351
+ "type": "int",
352
+ },
353
+ ],
354
+ "required_parameters": [
355
+ {
356
+ "default": None,
357
+ "description": "Path to the image file to be analyzed for amyloid-beta plaques",
358
+ "name": "image_path",
359
+ "type": "str",
360
+ }
361
+ ],
362
+ },
363
+ ]
Biomni/biomni/tool/tool_description/protocols.py ADDED
@@ -0,0 +1,68 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ description = [
2
+ {
3
+ "description": "Search protocols.io for public protocols matching a keyword.",
4
+ "name": "search_protocols",
5
+ "optional_parameters": [],
6
+ "required_parameters": [
7
+ {
8
+ "default": None,
9
+ "description": "Most important keyword or phrase to search (title, description, authors)",
10
+ "name": "query",
11
+ "type": "str",
12
+ }
13
+ ],
14
+ },
15
+ {
16
+ "description": "Retrieve detailed metadata for a specific protocols.io protocol by ID.",
17
+ "name": "get_protocol_details",
18
+ "optional_parameters": [
19
+ {
20
+ "default": 30,
21
+ "description": "Request timeout in seconds",
22
+ "name": "timeout",
23
+ "type": "int",
24
+ }
25
+ ],
26
+ "required_parameters": [
27
+ {
28
+ "default": None,
29
+ "description": "Numeric protocol ID from protocols.io",
30
+ "name": "protocol_id",
31
+ "type": "int",
32
+ }
33
+ ],
34
+ },
35
+ {
36
+ "description": "List available protocol files in the local biomni/tool/protocols/ directory. Includes protocols from Addgene and Thermo Fisher Scientific.",
37
+ "name": "list_local_protocols",
38
+ "optional_parameters": [
39
+ {
40
+ "default": None,
41
+ "description": "Filter by source directory (e.g., 'addgene' or 'thermofisher'). If None, lists all protocols.",
42
+ "name": "source",
43
+ "type": "str",
44
+ }
45
+ ],
46
+ "required_parameters": [],
47
+ },
48
+ {
49
+ "description": "Read the contents of a local protocol file from biomni/tool/protocols/. Use list_local_protocols() first to find available protocol filenames.",
50
+ "name": "read_local_protocol",
51
+ "optional_parameters": [
52
+ {
53
+ "default": None,
54
+ "description": "Source directory (e.g., 'addgene' or 'thermofisher'). If None, searches all sources.",
55
+ "name": "source",
56
+ "type": "str",
57
+ }
58
+ ],
59
+ "required_parameters": [
60
+ {
61
+ "default": None,
62
+ "description": "Name of the protocol file (e.g., 'Addgene_ Protocol - How to Run an Agarose Gel.txt')",
63
+ "name": "filename",
64
+ "type": "str",
65
+ }
66
+ ],
67
+ },
68
+ ]
Biomni/biomni/tool/tool_description/synthetic_biology.py ADDED
@@ -0,0 +1,273 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ description = [
2
+ {
3
+ "description": "Engineer a bacterial genome by integrating therapeutic genetic parts for therapeutic delivery.",
4
+ "name": "engineer_bacterial_genome_for_therapeutic_delivery",
5
+ "optional_parameters": [],
6
+ "required_parameters": [
7
+ {
8
+ "default": None,
9
+ "description": "Path to the file containing the bacterial genome sequence in FASTA format",
10
+ "name": "bacterial_genome_file",
11
+ "type": "str",
12
+ },
13
+ {
14
+ "default": None,
15
+ "description": "Dictionary containing genetic parts "
16
+ "to be integrated (promoters, genes, "
17
+ "terminators, cargo)",
18
+ "name": "genetic_parts",
19
+ "type": "dict",
20
+ },
21
+ ],
22
+ },
23
+ {
24
+ "description": "Analyze bacterial growth data and extract growth parameters from OD600 measurements.",
25
+ "name": "analyze_bacterial_growth_rate",
26
+ "optional_parameters": [
27
+ {
28
+ "default": "Unknown strain",
29
+ "description": "Name of the bacterial strain being analyzed",
30
+ "name": "strain_name",
31
+ "type": "str",
32
+ },
33
+ {
34
+ "default": "./",
35
+ "description": "Directory where to save the output files",
36
+ "name": "output_dir",
37
+ "type": "str",
38
+ },
39
+ ],
40
+ "required_parameters": [
41
+ {
42
+ "default": None,
43
+ "description": "Time points at which OD600 measurements were taken (in hours)",
44
+ "name": "time_points",
45
+ "type": "List or numpy.ndarray",
46
+ },
47
+ {
48
+ "default": None,
49
+ "description": "Optical density (OD600) measurements corresponding to each time point",
50
+ "name": "od_measurements",
51
+ "type": "List or numpy.ndarray",
52
+ },
53
+ ],
54
+ },
55
+ {
56
+ "description": "Analyze sequencing data to extract, quantify and determine lineage relationships of barcodes.",
57
+ "name": "analyze_barcode_sequencing_data",
58
+ "optional_parameters": [
59
+ {
60
+ "default": None,
61
+ "description": "Regular expression pattern to identify barcodes. If None, will use flanking sequences",
62
+ "name": "barcode_pattern",
63
+ "type": "str",
64
+ },
65
+ {
66
+ "default": None,
67
+ "description": "5' flanking sequence of the barcode region",
68
+ "name": "flanking_seq_5prime",
69
+ "type": "str",
70
+ },
71
+ {
72
+ "default": None,
73
+ "description": "3' flanking sequence of the barcode region",
74
+ "name": "flanking_seq_3prime",
75
+ "type": "str",
76
+ },
77
+ {
78
+ "default": 5,
79
+ "description": "Minimum count threshold for considering a barcode",
80
+ "name": "min_count",
81
+ "type": "int",
82
+ },
83
+ {
84
+ "default": "./results",
85
+ "description": "Directory to save output files",
86
+ "name": "output_dir",
87
+ "type": "str",
88
+ },
89
+ ],
90
+ "required_parameters": [
91
+ {
92
+ "default": None,
93
+ "description": "Path to the input sequencing file in FASTQ or FASTA format",
94
+ "name": "input_file",
95
+ "type": "str",
96
+ }
97
+ ],
98
+ },
99
+ {
100
+ "description": "Performs bifurcation analysis on a dynamical system and generates a bifurcation diagram.",
101
+ "name": "analyze_bifurcation_diagram",
102
+ "optional_parameters": [
103
+ {
104
+ "default": "Dynamical System",
105
+ "description": "Name of the dynamical system being analyzed, used for plot titles.",
106
+ "name": "system_name",
107
+ "type": "str",
108
+ },
109
+ {
110
+ "default": "./",
111
+ "description": "Directory to save the output files.",
112
+ "name": "output_dir",
113
+ "type": "str",
114
+ },
115
+ ],
116
+ "required_parameters": [
117
+ {
118
+ "default": None,
119
+ "description": "A 2D array where each row "
120
+ "represents a time series for a "
121
+ "specific parameter value. Shape "
122
+ "should be (n_parameter_values, "
123
+ "n_time_points).",
124
+ "name": "time_series_data",
125
+ "type": "numpy.ndarray",
126
+ },
127
+ {
128
+ "default": None,
129
+ "description": "1D array of parameter values "
130
+ "corresponding to each time series. "
131
+ "Shape should be "
132
+ "(n_parameter_values,).",
133
+ "name": "parameter_values",
134
+ "type": "numpy.ndarray",
135
+ },
136
+ ],
137
+ },
138
+ {
139
+ "description": "Generate a mathematical model of a biochemical network in SBML format.",
140
+ "name": "create_biochemical_network_sbml_model",
141
+ "optional_parameters": [
142
+ {
143
+ "default": "biochemical_model.xml",
144
+ "description": "File path to save the SBML model",
145
+ "name": "output_file",
146
+ "type": "str",
147
+ }
148
+ ],
149
+ "required_parameters": [
150
+ {
151
+ "default": None,
152
+ "description": "List of dictionaries representing "
153
+ "reactions with id, name, reactants, "
154
+ "products, and reversible properties",
155
+ "name": "reaction_network",
156
+ "type": "List[dict]",
157
+ },
158
+ {
159
+ "default": None,
160
+ "description": "Dictionary mapping reaction IDs to kinetic law parameters with law_type and parameters",
161
+ "name": "kinetic_parameters",
162
+ "type": "dict",
163
+ },
164
+ ],
165
+ },
166
+ {
167
+ "description": "Analyzes and optimizes a DNA/RNA sequence for improved "
168
+ "expression in a heterologous host organism.",
169
+ "name": "optimize_codons_for_heterologous_expression",
170
+ "optional_parameters": [],
171
+ "required_parameters": [
172
+ {
173
+ "default": None,
174
+ "description": "The DNA or RNA sequence of the "
175
+ "target gene to be optimized. Should "
176
+ "contain complete codons (length "
177
+ "divisible by 3).",
178
+ "name": "target_sequence",
179
+ "type": "str",
180
+ },
181
+ {
182
+ "default": None,
183
+ "description": "Dictionary mapping codons to their "
184
+ "usage frequency in the host "
185
+ "organism. Format: {'AUG': 0.8, "
186
+ "'GCC': 0.6, ...} or {'ATG': 0.8, "
187
+ "'GCC': 0.6, ...}",
188
+ "name": "host_codon_usage",
189
+ "type": "dict",
190
+ },
191
+ ],
192
+ },
193
+ {
194
+ "description": "Simulate gene regulatory circuit dynamics with growth feedback.",
195
+ "name": "simulate_gene_circuit_with_growth_feedback",
196
+ "optional_parameters": [
197
+ {
198
+ "default": 100,
199
+ "description": "Total simulation time",
200
+ "name": "simulation_time",
201
+ "type": "float",
202
+ },
203
+ {
204
+ "default": 1000,
205
+ "description": "Number of time points to sample",
206
+ "name": "time_points",
207
+ "type": "int",
208
+ },
209
+ ],
210
+ "required_parameters": [
211
+ {
212
+ "default": None,
213
+ "description": "Adjacency matrix representing the "
214
+ "gene circuit topology. Positive "
215
+ "values indicate activation, "
216
+ "negative values indicate "
217
+ "repression. Shape should be "
218
+ "(n_genes, n_genes) where n_genes is "
219
+ "the number of genes in the circuit.",
220
+ "name": "circuit_topology",
221
+ "type": "numpy.ndarray",
222
+ },
223
+ {
224
+ "default": None,
225
+ "description": "Dictionary containing kinetic "
226
+ "parameters: 'basal_rates', "
227
+ "'degradation_rates', "
228
+ "'hill_coefficients', and "
229
+ "'threshold_constants' for the gene "
230
+ "circuit.",
231
+ "name": "kinetic_params",
232
+ "type": "dict",
233
+ },
234
+ {
235
+ "default": None,
236
+ "description": "Dictionary containing "
237
+ "growth-related parameters: "
238
+ "'max_growth_rate', "
239
+ "'growth_inhibition', and "
240
+ "'gene_growth_weights'.",
241
+ "name": "growth_params",
242
+ "type": "dict",
243
+ },
244
+ ],
245
+ },
246
+ {
247
+ "description": "Identifies functional domains within a Fatty Acid Synthase "
248
+ "(FAS) sequence and predicts their roles.",
249
+ "name": "identify_fas_functional_domains",
250
+ "optional_parameters": [
251
+ {
252
+ "default": "protein",
253
+ "description": 'Type of sequence provided - "protein" or "nucleotide"',
254
+ "name": "sequence_type",
255
+ "type": "str",
256
+ },
257
+ {
258
+ "default": "fas_domains_report.txt",
259
+ "description": "Name of the output file to save the detailed domain report",
260
+ "name": "output_file",
261
+ "type": "str",
262
+ },
263
+ ],
264
+ "required_parameters": [
265
+ {
266
+ "default": None,
267
+ "description": "The nucleotide or protein sequence of a FAS gene",
268
+ "name": "sequence",
269
+ "type": "str",
270
+ }
271
+ ],
272
+ },
273
+ ]
Biomni/mcp_generated/mcp_bioconductor-concordexr/Dockerfile ADDED
@@ -0,0 +1,40 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ FROM python:3.10-slim
3
+
4
+ # Install system dependencies
5
+ RUN apt-get update && apt-get install -y default-jre wget curl && apt-get clean && rm -rf /var/lib/apt/lists/*
6
+
7
+ # Install Miniconda
8
+ RUN wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O /tmp/miniconda.sh && bash /tmp/miniconda.sh -b -p /opt/conda && rm /tmp/miniconda.sh
9
+
10
+ # Add conda to PATH
11
+ ENV PATH="/opt/conda/bin:$PATH"
12
+
13
+ # Install bioconductor-concordexr via conda (e.g., from bioconda)
14
+ RUN conda install -c bioconda bioconductor-concordexr -y && conda clean -a
15
+
16
+ # Install Python dependencies
17
+ RUN pip install uv
18
+ RUN uv pip install --system fastmcp
19
+
20
+ # Create app directory
21
+ WORKDIR /app
22
+
23
+ # Copy your MCP server
24
+ COPY app/bioconductor-concordexr_server.py /app/
25
+
26
+ # Create workspace and output directories
27
+ RUN mkdir -p /app/workspace /app/output
28
+
29
+ # Make sure the server script is executable
30
+ RUN chmod +x /app/bioconductor-concordexr_server.py
31
+
32
+ # Expose port for MCP over HTTP (optional)
33
+ EXPOSE 8000
34
+
35
+ # Health check
36
+ HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 CMD python -c "import sys; sys.exit(0)"
37
+
38
+ # Default command runs the MCP server via stdio
39
+ CMD ["python", "/app/bioconductor-concordexr_server.py"]
40
+
Biomni/mcp_generated/mcp_bioconductor-concordexr/app/bioconductor-concordexr_server.py ADDED
@@ -0,0 +1,221 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import subprocess
2
+ import tempfile
3
+ from pathlib import Path
4
+ from typing import Optional, List
5
+
6
+ # Mock the decorator for standalone execution
7
+ class mcp:
8
+ @staticmethod
9
+ def tool(func):
10
+ return func
11
+
12
+ @mcp.tool
13
+ def compute_concordex(
14
+ data_file: Path,
15
+ ranks_file: Path,
16
+ indices_file: Path,
17
+ output_dir: Path,
18
+ data_type: str = "counts",
19
+ abundance_min: float = 1.0,
20
+ abundance_max: Optional[float] = None,
21
+ sample_min: float = 0.0,
22
+ sample_max: Optional[float] = None,
23
+ filter_perc: float = 0.0,
24
+ filter_count: int = 0,
25
+ plot: bool = True,
26
+ plot_format: str = "png",
27
+ plot_width: int = 10,
28
+ plot_height: int = 10,
29
+ export: bool = True,
30
+ export_rds: bool = True,
31
+ ):
32
+ """
33
+ Computes the Concordance Index (Concordex) using the concordexR package.
34
+
35
+ This tool wraps the `computeConcordex` function. It takes expression/count data,
36
+ pre-computed ranks, and sample indices to calculate concordex scores. It can
37
+ filter data, generate plots, and export results to files.
38
+
39
+ Args:
40
+ data_file: Path to the input data file (e.g., counts matrix). Assumed to be a tab-separated file with a header and row names in the first column.
41
+ ranks_file: Path to the ranks file. Assumed to be a tab-separated file with a header and row names in the first column.
42
+ indices_file: Path to the indices file. Assumed to be a single-column, tab-separated file without a header.
43
+ output_dir: Path to the directory where output files will be saved.
44
+ data_type: The type of data in `data_file`. Must be either 'counts' or 'ranks'.
45
+ abundance_min: The minimum abundance of a feature to be included in the analysis.
46
+ abundance_max: The maximum abundance of a feature. If None, no upper limit is applied.
47
+ sample_min: The minimum value of a sample to be included.
48
+ sample_max: The maximum value of a sample. If None, no upper limit is applied.
49
+ filter_perc: The percentage of samples a feature must be present in to be retained. Value must be between 0.0 and 1.0.
50
+ filter_count: The minimum number of counts a feature must have across all samples to be retained.
51
+ plot: If True, generate concordex plots.
52
+ plot_format: The format for the output plots (e.g., 'png', 'pdf', 'svg').
53
+ plot_width: The width of the output plots in inches.
54
+ plot_height: The height of the output plots in inches.
55
+ export: If True, export the concordex results to text files.
56
+ export_rds: If True, save the final concordex R object to an .rds file for later use (e.g., with plot_concordex).
57
+ """
58
+ # Input validation
59
+ if not data_file.is_file():
60
+ raise FileNotFoundError(f"Input data file not found: {data_file}")
61
+ if not ranks_file.is_file():
62
+ raise FileNotFoundError(f"Ranks file not found: {ranks_file}")
63
+ if not indices_file.is_file():
64
+ raise FileNotFoundError(f"Indices file not found: {indices_file}")
65
+
66
+ if data_type not in ["counts", "ranks"]:
67
+ raise ValueError("data_type must be either 'counts' or 'ranks'.")
68
+ if not (0.0 <= filter_perc <= 1.0):
69
+ raise ValueError("filter_perc must be between 0.0 and 1.0.")
70
+ if filter_count < 0:
71
+ raise ValueError("filter_count must be a non-negative integer.")
72
+ if plot_format not in ["png", "pdf", "svg", "jpeg", "tiff"]:
73
+ raise ValueError(f"Unsupported plot format: {plot_format}")
74
+
75
+ output_dir.mkdir(parents=True, exist_ok=True)
76
+
77
+ # Build the R script
78
+ r_script_lines = [
79
+ "library(concordexR)",
80
+ f'data <- read.table("{data_file.resolve()}", header=TRUE, sep="\\t", row.names=1, check.names=FALSE)',
81
+ f'ranks <- read.table("{ranks_file.resolve()}", header=TRUE, sep="\\t", row.names=1, check.names=FALSE)',
82
+ f'indices_df <- read.table("{indices_file.resolve()}", header=FALSE, sep="\\t")',
83
+ "indices <- as.list(indices_df$V1)",
84
+ "concordex_result <- computeConcordex(",
85
+ " data = data,",
86
+ " ranks = ranks,",
87
+ " indices = indices,",
88
+ f' type = "{data_type}",',
89
+ f" abundance.min = {abundance_min},",
90
+ f" abundance.max = {abundance_max if abundance_max is not None else 'Inf'},",
91
+ f" sample.min = {sample_min},",
92
+ f" sample.max = {sample_max if sample_max is not None else 'Inf'},",
93
+ f" filter.perc = {filter_perc},",
94
+ f" filter.count = {filter_count},",
95
+ f' output.dir = "{output_dir.resolve()}",',
96
+ f" plot = {'TRUE' if plot else 'FALSE'},",
97
+ f' plot.format = "{plot_format}",',
98
+ f" plot.width = {plot_width},",
99
+ f" plot.height = {plot_height},",
100
+ f" export = {'TRUE' if export else 'FALSE'}",
101
+ ")",
102
+ ]
103
+
104
+ if export_rds:
105
+ rds_path = output_dir.resolve() / "concordex_object.rds"
106
+ r_script_lines.append(f'saveRDS(concordex_result, file = "{rds_path}")')
107
+
108
+ r_script = "\n".join(r_script_lines)
109
+
110
+ # Use a temporary file for the R script
111
+ with tempfile.NamedTemporaryFile(mode='w', suffix=".R", delete=False) as f:
112
+ f.write(r_script)
113
+ r_script_path = Path(f.name)
114
+
115
+ cmd = ["Rscript", str(r_script_path)]
116
+ command_executed = " ".join(cmd)
117
+
118
+ try:
119
+ result = subprocess.run(
120
+ cmd,
121
+ capture_output=True,
122
+ text=True,
123
+ check=True,
124
+ )
125
+
126
+ output_files = [str(p) for p in output_dir.glob("**/*") if p.is_file()]
127
+
128
+ return {
129
+ "command_executed": command_executed,
130
+ "stdout": result.stdout,
131
+ "stderr": result.stderr,
132
+ "output_files": output_files,
133
+ }
134
+ except subprocess.CalledProcessError as e:
135
+ raise RuntimeError(
136
+ f"R script execution failed with return code {e.returncode}.\n"
137
+ f"Command: {command_executed}\n"
138
+ f"Stdout: {e.stdout}\n"
139
+ f"Stderr: {e.stderr}"
140
+ ) from e
141
+ finally:
142
+ r_script_path.unlink()
143
+
144
+ @mcp.tool
145
+ def plot_concordex(
146
+ concordex_object_file: Path,
147
+ output_dir: Path,
148
+ plot_format: str = "png",
149
+ plot_width: int = 10,
150
+ plot_height: int = 10,
151
+ ):
152
+ """
153
+ Generates plots from a pre-computed concordex object.
154
+
155
+ This tool wraps the `plotConcordex` function from the concordexR package.
156
+ It takes an .rds file containing a concordex object (generated by the
157
+ compute_concordex tool) and creates visualization plots.
158
+
159
+ Args:
160
+ concordex_object_file: Path to the .rds file containing the concordex object.
161
+ output_dir: Path to the directory where output plots will be saved.
162
+ plot_format: The format for the output plots (e.g., 'png', 'pdf', 'svg').
163
+ plot_width: The width of the output plots in inches.
164
+ plot_height: The height of the output plots in inches.
165
+ """
166
+ # Input validation
167
+ if not concordex_object_file.is_file():
168
+ raise FileNotFoundError(f"Concordex object file not found: {concordex_object_file}")
169
+ if concordex_object_file.suffix != ".rds":
170
+ raise ValueError("concordex_object_file must be an .rds file.")
171
+ if plot_format not in ["png", "pdf", "svg", "jpeg", "tiff"]:
172
+ raise ValueError(f"Unsupported plot format: {plot_format}")
173
+
174
+ output_dir.mkdir(parents=True, exist_ok=True)
175
+
176
+ # Build the R script
177
+ r_script_lines = [
178
+ "library(concordexR)",
179
+ f'concordex_obj <- readRDS("{concordex_object_file.resolve()}")',
180
+ "plotConcordex(",
181
+ " concordex.object = concordex_obj,",
182
+ f' output.dir = "{output_dir.resolve()}",',
183
+ f' plot.format = "{plot_format}",',
184
+ f" plot.width = {plot_width},",
185
+ f" plot.height = {plot_height}",
186
+ ")",
187
+ ]
188
+ r_script = "\n".join(r_script_lines)
189
+
190
+ with tempfile.NamedTemporaryFile(mode='w', suffix=".R", delete=False) as f:
191
+ f.write(r_script)
192
+ r_script_path = Path(f.name)
193
+
194
+ cmd = ["Rscript", str(r_script_path)]
195
+ command_executed = " ".join(cmd)
196
+
197
+ try:
198
+ result = subprocess.run(
199
+ cmd,
200
+ capture_output=True,
201
+ text=True,
202
+ check=True,
203
+ )
204
+
205
+ output_files = [str(p) for p in output_dir.glob("**/*") if p.is_file()]
206
+
207
+ return {
208
+ "command_executed": command_executed,
209
+ "stdout": result.stdout,
210
+ "stderr": result.stderr,
211
+ "output_files": output_files,
212
+ }
213
+ except subprocess.CalledProcessError as e:
214
+ raise RuntimeError(
215
+ f"R script execution failed with return code {e.returncode}.\n"
216
+ f"Command: {command_executed}\n"
217
+ f"Stdout: {e.stdout}\n"
218
+ f"Stderr: {e.stderr}"
219
+ ) from e
220
+ finally:
221
+ r_script_path.unlink()
Biomni/mcp_generated/mcp_bioconductor-concordexr/app/bioconductor-concordexr_shim_server.py ADDED
@@ -0,0 +1,55 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env python3
2
+ from __future__ import annotations
3
+
4
+ import ast
5
+ from pathlib import Path
6
+
7
+ from mcp.server.fastmcp import FastMCP
8
+
9
+
10
+ SOURCE_SERVER = Path('/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-concordexr/app/bioconductor-concordexr_server.py')
11
+ LOCAL_SERVER = Path(__file__).with_name(SOURCE_SERVER.name)
12
+ SERVER_NAME = 'biosci_bioconductor_concordexr'
13
+
14
+
15
+ class _ShimMCP:
16
+ @staticmethod
17
+ def tool(*args, **kwargs):
18
+ if args and callable(args[0]) and len(args) == 1 and not kwargs:
19
+ return args[0]
20
+ def _decorator(fn):
21
+ return fn
22
+ return _decorator
23
+
24
+
25
+ def _resolve_source_server():
26
+ if LOCAL_SERVER.exists() and LOCAL_SERVER.name != Path(__file__).name:
27
+ return LOCAL_SERVER
28
+ return SOURCE_SERVER
29
+
30
+
31
+ def _load_functions():
32
+ source_server = _resolve_source_server()
33
+ code = source_server.read_text(encoding="utf-8")
34
+ tree = ast.parse(code, filename=str(source_server))
35
+ function_names = [n.name for n in tree.body if isinstance(n, ast.FunctionDef) and not n.name.startswith("_")]
36
+ namespace = {
37
+ "__name__": "__mcp_source__",
38
+ "mcp": _ShimMCP(),
39
+ }
40
+ exec(compile(code, str(source_server), "exec"), namespace, namespace)
41
+ loaded = []
42
+ for name in function_names:
43
+ fn = namespace.get(name)
44
+ if callable(fn):
45
+ loaded.append(fn)
46
+ return loaded
47
+
48
+
49
+ mcp = FastMCP(SERVER_NAME)
50
+ for _fn in _load_functions():
51
+ mcp.tool()(_fn)
52
+
53
+
54
+ if __name__ == "__main__":
55
+ mcp.run(transport="stdio")
Biomni/mcp_generated/mcp_bioconductor-concordexr/app/requirements.txt ADDED
@@ -0,0 +1 @@
 
 
1
+
Biomni/mcp_generated/mcp_bioconductor-concordexr/docker-compose.yml ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ version: '3.8'
2
+
3
+ services:
4
+ mcp-bioconductor-concordexr:
5
+ build: .
6
+ image: mcp-bioconductor-concordexr:latest
7
+ container_name: mcp-bioconductor-concordexr
8
+ ports:
9
+ - "8000:8000"
10
+ environment:
11
+ - MCP_SERVER_NAME=bioconductor-concordexr
12
+ volumes:
13
+ - ./workspace:/app/workspace
14
+ - ./output:/app/output
15
+ restart: unless-stopped
16
+ healthcheck:
17
+ test: ["CMD", "python", "-c", "import sys; sys.exit(0)"]
18
+ interval: 30s
19
+ timeout: 10s
20
+ retries: 3
21
+ start_period: 5s
22
+
Biomni/mcp_generated/mcp_bioconductor-concordexr/environment.yaml ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ name: mcp-tool
3
+ channels:
4
+ - bioconda
5
+ - conda-forge
6
+ - defaults
7
+ dependencies:
8
+ - bioconductor-concordexr
9
+ - python=3.10
10
+
Biomni/mcp_generated/mcp_bioconductor-concordexr/requirements.txt ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ fastmcp
2
+ mcp
Biomni/mcp_generated/mcp_bioconductor-decipher/Dockerfile ADDED
@@ -0,0 +1,40 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ FROM python:3.10-slim
3
+
4
+ # Install system dependencies
5
+ RUN apt-get update && apt-get install -y default-jre wget curl && apt-get clean && rm -rf /var/lib/apt/lists/*
6
+
7
+ # Install Miniconda
8
+ RUN wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O /tmp/miniconda.sh && bash /tmp/miniconda.sh -b -p /opt/conda && rm /tmp/miniconda.sh
9
+
10
+ # Add conda to PATH
11
+ ENV PATH="/opt/conda/bin:$PATH"
12
+
13
+ # Install bioconductor-decipher via conda (e.g., from bioconda)
14
+ RUN conda install -c bioconda bioconductor-decipher -y && conda clean -a
15
+
16
+ # Install Python dependencies
17
+ RUN pip install uv
18
+ RUN uv pip install --system fastmcp
19
+
20
+ # Create app directory
21
+ WORKDIR /app
22
+
23
+ # Copy your MCP server
24
+ COPY app/bioconductor-decipher_server.py /app/
25
+
26
+ # Create workspace and output directories
27
+ RUN mkdir -p /app/workspace /app/output
28
+
29
+ # Make sure the server script is executable
30
+ RUN chmod +x /app/bioconductor-decipher_server.py
31
+
32
+ # Expose port for MCP over HTTP (optional)
33
+ EXPOSE 8000
34
+
35
+ # Health check
36
+ HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 CMD python -c "import sys; sys.exit(0)"
37
+
38
+ # Default command runs the MCP server via stdio
39
+ CMD ["python", "/app/bioconductor-decipher_server.py"]
40
+
Biomni/mcp_generated/mcp_bioconductor-decipher/app/bioconductor-decipher_server.py ADDED
@@ -0,0 +1,439 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import subprocess
2
+ import tempfile
3
+ import textwrap
4
+ from pathlib import Path
5
+ from typing import Dict, Any, Optional, List
6
+
7
+ # MCP decorators are used directly as the execution environment provides them.
8
+ # In a local development setup, you would use:
9
+ # from mcp import tool as mcp
10
+
11
+ def _run_r_script(
12
+ r_script_content: str,
13
+ args: List[str],
14
+ output_files_map: Dict[str, Path]
15
+ ) -> Dict[str, Any]:
16
+ """
17
+ Helper function to execute an R script and return a structured result.
18
+ """
19
+ cmd = ["Rscript", "-"] + args
20
+ # Create a user-friendly representation of the command
21
+ command_executed = f"echo '{r_script_content}' | Rscript - {' '.join(args)}"
22
+
23
+ try:
24
+ result = subprocess.run(
25
+ cmd,
26
+ input=r_script_content,
27
+ capture_output=True,
28
+ text=True,
29
+ check=True,
30
+ )
31
+
32
+ # Verify that all expected output files were created and are not empty
33
+ for key, path in output_files_map.items():
34
+ if not path.is_file() or path.stat().st_size == 0:
35
+ raise FileNotFoundError(
36
+ f"Expected output file '{path}' was not created or is empty. "
37
+ f"R script stderr: {result.stderr}"
38
+ )
39
+
40
+ return {
41
+ "command_executed": command_executed,
42
+ "stdout": result.stdout,
43
+ "stderr": result.stderr,
44
+ "output_files": {k: str(v) for k, v in output_files_map.items()},
45
+ }
46
+ except subprocess.CalledProcessError as e:
47
+ return {
48
+ "command_executed": command_executed,
49
+ "stdout": e.stdout,
50
+ "stderr": e.stderr,
51
+ "error": "R script execution failed.",
52
+ "return_code": e.returncode,
53
+ }
54
+ except FileNotFoundError as e:
55
+ return {
56
+ "command_executed": command_executed,
57
+ "stdout": "",
58
+ "stderr": str(e),
59
+ "error": "An output file was not generated as expected.",
60
+ }
61
+
62
+
63
+ from mcp.server.fastmcp import FastMCP
64
+
65
+ SERVER_NAME = 'local_bioconductor_decipher'
66
+ mcp = FastMCP(SERVER_NAME)
67
+
68
+ @mcp.tool()
69
+ def align_sequences(
70
+ input_fasta: Path,
71
+ substitution_matrix: Optional[str] = None,
72
+ gap_opening: float = 10.0,
73
+ gap_extension: float = 0.1,
74
+ processors: int = 1,
75
+ ) -> Dict[str, Any]:
76
+ """
77
+ Performs multiple sequence alignment on sequences using DECIPHER's AlignSeqs.
78
+
79
+ This tool aligns a set of DNA, RNA, or amino acid sequences provided in a FASTA file.
80
+ It automatically detects the sequence type.
81
+
82
+ Args:
83
+ input_fasta: Path to the input FASTA file containing unaligned sequences.
84
+ substitution_matrix: The substitution matrix to use (e.g., 'BLOSUM62', 'PAM40').
85
+ If None, DECIPHER will choose a default based on sequence type.
86
+ gap_opening: The penalty for opening a gap.
87
+ gap_extension: The penalty for extending a gap.
88
+ processors: The number of processors to use for alignment.
89
+
90
+ Returns:
91
+ A dictionary containing the command executed, stdout, stderr, and a map of output files.
92
+ """
93
+ if not input_fasta.is_file():
94
+ raise FileNotFoundError(f"Input FASTA file not found: {input_fasta}")
95
+ if processors < 1:
96
+ raise ValueError("Number of processors must be at least 1.")
97
+
98
+ r_script = textwrap.dedent("""
99
+ # Load required libraries
100
+ suppressPackageStartupMessages(library(DECIPHER))
101
+
102
+ # Get command line arguments
103
+ args <- commandArgs(trailingOnly = TRUE)
104
+ inputFile <- args[1]
105
+ outputFile <- args[2]
106
+ subMatrix <- if (args[3] == "NULL") NULL else args[3]
107
+ gapOpen <- as.numeric(args[4])
108
+ gapExt <- as.numeric(args[5])
109
+ procs <- as.integer(args[6])
110
+
111
+ # Read sequences (readBStringSet is generic for DNA, RNA, AA)
112
+ seqs <- readBStringSet(inputFile)
113
+
114
+ # Perform alignment
115
+ cat("Starting sequence alignment...\\n", file = stderr())
116
+ aligned_seqs <- AlignSeqs(seqs,
117
+ gapOpening = gapOpen,
118
+ gapExtension = gapExt,
119
+ substitutionMatrix = subMatrix,
120
+ processors = procs,
121
+ verbose = TRUE)
122
+ cat("Alignment complete.\\n", file = stderr())
123
+
124
+ # Write the aligned sequences to the output file
125
+ writeXStringSet(aligned_seqs, filepath = outputFile)
126
+ cat("Output written to", outputFile, "\\n", file = stderr())
127
+ """)
128
+
129
+ with tempfile.TemporaryDirectory() as temp_dir:
130
+ temp_path = Path(temp_dir)
131
+ output_aligned_fasta = temp_path / "aligned.fasta"
132
+
133
+ args = [
134
+ str(input_fasta.resolve()),
135
+ str(output_aligned_fasta.resolve()),
136
+ str(substitution_matrix) if substitution_matrix else "NULL",
137
+ str(gap_opening),
138
+ str(gap_extension),
139
+ str(processors),
140
+ ]
141
+
142
+ return _run_r_script(r_script, args, {"aligned_fasta": output_aligned_fasta})
143
+
144
+
145
+ @mcp.tool()
146
+ def find_chimeras(
147
+ input_fasta: Path,
148
+ processors: int = 1,
149
+ ) -> Dict[str, Any]:
150
+ """
151
+ Identifies chimeric sequences in a FASTA file using DECIPHER's isChimera.
152
+
153
+ This tool screens a set of sequences (typically 16S rRNA amplicons) and
154
+ identifies which ones are likely to be chimeras formed during PCR.
155
+
156
+ Args:
157
+ input_fasta: Path to the input FASTA file containing sequences to check.
158
+ processors: The number of processors to use for chimera detection.
159
+
160
+ Returns:
161
+ A dictionary containing the command executed, stdout, stderr, and a map of output files.
162
+ """
163
+ if not input_fasta.is_file():
164
+ raise FileNotFoundError(f"Input FASTA file not found: {input_fasta}")
165
+ if processors < 1:
166
+ raise ValueError("Number of processors must be at least 1.")
167
+
168
+ r_script = textwrap.dedent("""
169
+ suppressPackageStartupMessages(library(DECIPHER))
170
+
171
+ args <- commandArgs(trailingOnly = TRUE)
172
+ inputFile <- args[1]
173
+ outputFile <- args[2]
174
+ procs <- as.integer(args[3])
175
+
176
+ cat("Reading sequences...\\n", file = stderr())
177
+ seqs <- readDNAStringSet(inputFile)
178
+
179
+ cat("Finding chimeras...\\n", file = stderr())
180
+ chimera_flags <- isChimera(seqs, processors = procs, verbose = TRUE)
181
+
182
+ chimera_names <- names(seqs)[chimera_flags]
183
+
184
+ cat(length(chimera_names), "chimeras found.\\n", file = stderr())
185
+ writeLines(chimera_names, con = outputFile)
186
+ cat("Chimeric sequence names written to", outputFile, "\\n", file = stderr())
187
+ """)
188
+
189
+ with tempfile.TemporaryDirectory() as temp_dir:
190
+ temp_path = Path(temp_dir)
191
+ output_chimera_list = temp_path / "chimeric_sequences.txt"
192
+
193
+ args = [
194
+ str(input_fasta.resolve()),
195
+ str(output_chimera_list.resolve()),
196
+ str(processors),
197
+ ]
198
+
199
+ return _run_r_script(r_script, args, {"chimera_list": output_chimera_list})
200
+
201
+
202
+ @mcp.tool()
203
+ def classify_sequences(
204
+ query_fasta: Path,
205
+ training_set: Path,
206
+ confidence_threshold: float = 0.7,
207
+ processors: int = 1,
208
+ ) -> Dict[str, Any]:
209
+ """
210
+ Classifies sequences using a pre-trained DECIPHER model (IdTaxa).
211
+
212
+ This tool assigns taxonomic classification to sequences based on a provided
213
+ training set file (e.g., SILVA, RDP, Greengenes).
214
+
215
+ Args:
216
+ query_fasta: Path to the FASTA file of sequences to classify.
217
+ training_set: Path to the .RData file containing the training set object.
218
+ confidence_threshold: The minimum confidence required to assign a taxonomy.
219
+ processors: The number of processors to use for classification.
220
+
221
+ Returns:
222
+ A dictionary containing the command executed, stdout, stderr, and a map of output files.
223
+ """
224
+ if not query_fasta.is_file():
225
+ raise FileNotFoundError(f"Query FASTA file not found: {query_fasta}")
226
+ if not training_set.is_file():
227
+ raise FileNotFoundError(f"Training set file not found: {training_set}")
228
+ if not 0.0 <= confidence_threshold <= 1.0:
229
+ raise ValueError("Confidence threshold must be between 0.0 and 1.0.")
230
+ if processors < 1:
231
+ raise ValueError("Number of processors must be at least 1.")
232
+
233
+ r_script = textwrap.dedent("""
234
+ suppressPackageStartupMessages(library(DECIPHER))
235
+
236
+ args <- commandArgs(trailingOnly = TRUE)
237
+ queryFile <- args[1]
238
+ trainingFile <- args[2]
239
+ outputFile <- args[3]
240
+ conf <- as.numeric(args[4])
241
+ procs <- as.integer(args[5])
242
+
243
+ cat("Reading query sequences...\\n", file = stderr())
244
+ seqs <- readDNAStringSet(queryFile)
245
+
246
+ cat("Loading training set...\\n", file = stderr())
247
+ load(trainingFile) # Assumes this loads an object named 'trainingSet'
248
+
249
+ cat("Classifying sequences with IdTaxa...\\n", file = stderr())
250
+ ids <- IdTaxa(seqs, trainingSet, threshold = conf, processors = procs, verbose = TRUE)
251
+
252
+ # Format the output into a table
253
+ get_taxonomy <- function(x) {
254
+ if (length(x) > 0 && length(x[[1]]$taxon) > 0) {
255
+ paste(x[[1]]$taxon, collapse=";")
256
+ } else {
257
+ "Unclassified"
258
+ }
259
+ }
260
+ taxonomy_strings <- sapply(ids, get_taxonomy)
261
+ output_df <- data.frame(sequence_name = names(seqs), taxonomy = taxonomy_strings)
262
+
263
+ cat("Writing classification results...\\n", file = stderr())
264
+ write.table(output_df, file = outputFile, sep = "\\t", row.names = FALSE, quote = FALSE)
265
+ cat("Output written to", outputFile, "\\n", file = stderr())
266
+ """)
267
+
268
+ with tempfile.TemporaryDirectory() as temp_dir:
269
+ temp_path = Path(temp_dir)
270
+ output_classification_tsv = temp_path / "classification.tsv"
271
+
272
+ args = [
273
+ str(query_fasta.resolve()),
274
+ str(training_set.resolve()),
275
+ str(output_classification_tsv.resolve()),
276
+ str(confidence_threshold),
277
+ str(processors),
278
+ ]
279
+
280
+ return _run_r_script(r_script, args, {"classification_results": output_classification_tsv})
281
+
282
+
283
+ @mcp.tool()
284
+ def design_primers(
285
+ input_aligned_fasta: Path,
286
+ min_length: int = 18,
287
+ max_length: int = 25,
288
+ min_tm: float = 50.0,
289
+ max_tm: float = 65.0,
290
+ min_gc: float = 40.0,
291
+ max_gc: float = 60.0,
292
+ max_degeneracy: int = 4,
293
+ processors: int = 1,
294
+ ) -> Dict[str, Any]:
295
+ """
296
+ Designs group-specific PCR primers from an aligned FASTA file using DesignPrimers.
297
+
298
+ Args:
299
+ input_aligned_fasta: Path to an aligned FASTA file of target sequences.
300
+ min_length: Minimum primer length.
301
+ max_length: Maximum primer length.
302
+ min_tm: Minimum melting temperature (°C).
303
+ max_tm: Maximum melting temperature (°C).
304
+ min_gc: Minimum GC content (percent).
305
+ max_gc: Maximum GC content (percent).
306
+ max_degeneracy: Maximum number of degenerate bases allowed in a primer.
307
+ processors: The number of processors to use.
308
+
309
+ Returns:
310
+ A dictionary containing the command executed, stdout, stderr, and a map of output files.
311
+ """
312
+ if not input_aligned_fasta.is_file():
313
+ raise FileNotFoundError(f"Input aligned FASTA file not found: {input_aligned_fasta}")
314
+ if processors < 1:
315
+ raise ValueError("Number of processors must be at least 1.")
316
+
317
+ r_script = textwrap.dedent("""
318
+ suppressPackageStartupMessages(library(DECIPHER))
319
+
320
+ args <- commandArgs(trailingOnly = TRUE)
321
+ inputFile <- args[1]
322
+ outputFile <- args[2]
323
+ minL <- as.integer(args[3])
324
+ maxL <- as.integer(args[4])
325
+ minTm <- as.numeric(args[5])
326
+ maxTm <- as.numeric(args[6])
327
+ minGC <- as.numeric(args[7])
328
+ maxGC <- as.numeric(args[8])
329
+ maxD <- as.integer(args[9])
330
+ procs <- as.integer(args[10])
331
+
332
+ cat("Reading aligned sequences...\\n", file = stderr())
333
+ seqs <- readDNAStringSet(inputFile)
334
+
335
+ cat("Designing primers...\\n", file = stderr())
336
+ primers <- DesignPrimers(
337
+ seqs, minLength = minL, maxLength = maxL, minTm = minTm, maxTm = maxTm,
338
+ minGC = minGC, maxGC = maxGC, maxDegeneracy = maxD,
339
+ processors = procs, verbose = TRUE
340
+ )
341
+
342
+ cat(nrow(primers), "candidate primers found.\\n", file = stderr())
343
+ write.table(primers, file = outputFile, sep = "\\t", row.names = FALSE, quote = FALSE)
344
+ cat("Primer table written to", outputFile, "\\n", file = stderr())
345
+ """)
346
+
347
+ with tempfile.TemporaryDirectory() as temp_dir:
348
+ temp_path = Path(temp_dir)
349
+ output_primers_tsv = temp_path / "primers.tsv"
350
+
351
+ args = [
352
+ str(input_aligned_fasta.resolve()),
353
+ str(output_primers_tsv.resolve()),
354
+ str(min_length), str(max_length), str(min_tm), str(max_tm),
355
+ str(min_gc), str(max_gc), str(max_degeneracy), str(processors),
356
+ ]
357
+
358
+ return _run_r_script(r_script, args, {"designed_primers": output_primers_tsv})
359
+
360
+
361
+ @mcp.tool()
362
+ def design_probes(
363
+ input_aligned_fasta: Path,
364
+ min_length: int = 18,
365
+ max_length: int = 50,
366
+ min_tm: float = 60.0,
367
+ max_tm: float = 80.0,
368
+ min_gc: float = 40.0,
369
+ max_gc: float = 60.0,
370
+ max_degeneracy: int = 1,
371
+ processors: int = 1,
372
+ ) -> Dict[str, Any]:
373
+ """
374
+ Designs hybridization probes (e.g., for FISH) from an aligned FASTA file using DesignProbes.
375
+
376
+ Args:
377
+ input_aligned_fasta: Path to an aligned FASTA file of target sequences.
378
+ min_length: Minimum probe length.
379
+ max_length: Maximum probe length.
380
+ min_tm: Minimum melting temperature (°C).
381
+ max_tm: Maximum melting temperature (°C).
382
+ min_gc: Minimum GC content (percent).
383
+ max_gc: Maximum GC content (percent).
384
+ max_degeneracy: Maximum number of degenerate bases allowed in a probe.
385
+ processors: The number of processors to use.
386
+
387
+ Returns:
388
+ A dictionary containing the command executed, stdout, stderr, and a map of output files.
389
+ """
390
+ if not input_aligned_fasta.is_file():
391
+ raise FileNotFoundError(f"Input aligned FASTA file not found: {input_aligned_fasta}")
392
+ if processors < 1:
393
+ raise ValueError("Number of processors must be at least 1.")
394
+
395
+ r_script = textwrap.dedent("""
396
+ suppressPackageStartupMessages(library(DECIPHER))
397
+
398
+ args <- commandArgs(trailingOnly = TRUE)
399
+ inputFile <- args[1]
400
+ outputFile <- args[2]
401
+ minL <- as.integer(args[3])
402
+ maxL <- as.integer(args[4])
403
+ minTm <- as.numeric(args[5])
404
+ maxTm <- as.numeric(args[6])
405
+ minGC <- as.numeric(args[7])
406
+ maxGC <- as.numeric(args[8])
407
+ maxD <- as.integer(args[9])
408
+ procs <- as.integer(args[10])
409
+
410
+ cat("Reading aligned sequences...\\n", file = stderr())
411
+ seqs <- readDNAStringSet(inputFile)
412
+
413
+ cat("Designing probes...\\n", file = stderr())
414
+ probes <- DesignProbes(
415
+ seqs, minLength = minL, maxLength = maxL, minTm = minTm, maxTm = maxTm,
416
+ minGC = minGC, maxGC = maxGC, maxDegeneracy = maxD,
417
+ processors = procs, verbose = TRUE
418
+ )
419
+
420
+ cat(nrow(probes), "candidate probes found.\\n", file = stderr())
421
+ write.table(probes, file = outputFile, sep = "\\t", row.names = FALSE, quote = FALSE)
422
+ cat("Probe table written to", outputFile, "\\n", file = stderr())
423
+ """)
424
+
425
+ with tempfile.TemporaryDirectory() as temp_dir:
426
+ temp_path = Path(temp_dir)
427
+ output_probes_tsv = temp_path / "probes.tsv"
428
+
429
+ args = [
430
+ str(input_aligned_fasta.resolve()),
431
+ str(output_probes_tsv.resolve()),
432
+ str(min_length), str(max_length), str(min_tm), str(max_tm),
433
+ str(min_gc), str(max_gc), str(max_degeneracy), str(processors),
434
+ ]
435
+
436
+ return _run_r_script(r_script, args, {"designed_probes": output_probes_tsv})
437
+
438
+ if __name__ == "__main__":
439
+ mcp.run(transport="stdio")
Biomni/mcp_generated/mcp_bioconductor-decipher/app/bioconductor-decipher_shim_server.py ADDED
@@ -0,0 +1,55 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env python3
2
+ from __future__ import annotations
3
+
4
+ import ast
5
+ from pathlib import Path
6
+
7
+ from mcp.server.fastmcp import FastMCP
8
+
9
+
10
+ SOURCE_SERVER = Path('/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-decipher/app/bioconductor-decipher_server.py')
11
+ LOCAL_SERVER = Path(__file__).with_name(SOURCE_SERVER.name)
12
+ SERVER_NAME = 'biosci_bioconductor_decipher'
13
+
14
+
15
+ class _ShimMCP:
16
+ @staticmethod
17
+ def tool(*args, **kwargs):
18
+ if args and callable(args[0]) and len(args) == 1 and not kwargs:
19
+ return args[0]
20
+ def _decorator(fn):
21
+ return fn
22
+ return _decorator
23
+
24
+
25
+ def _resolve_source_server():
26
+ if LOCAL_SERVER.exists() and LOCAL_SERVER.name != Path(__file__).name:
27
+ return LOCAL_SERVER
28
+ return SOURCE_SERVER
29
+
30
+
31
+ def _load_functions():
32
+ source_server = _resolve_source_server()
33
+ code = source_server.read_text(encoding="utf-8")
34
+ tree = ast.parse(code, filename=str(source_server))
35
+ function_names = [n.name for n in tree.body if isinstance(n, ast.FunctionDef) and not n.name.startswith("_")]
36
+ namespace = {
37
+ "__name__": "__mcp_source__",
38
+ "mcp": _ShimMCP(),
39
+ }
40
+ exec(compile(code, str(source_server), "exec"), namespace, namespace)
41
+ loaded = []
42
+ for name in function_names:
43
+ fn = namespace.get(name)
44
+ if callable(fn):
45
+ loaded.append(fn)
46
+ return loaded
47
+
48
+
49
+ mcp = FastMCP(SERVER_NAME)
50
+ for _fn in _load_functions():
51
+ mcp.tool()(_fn)
52
+
53
+
54
+ if __name__ == "__main__":
55
+ mcp.run(transport="stdio")
Biomni/mcp_generated/mcp_bioconductor-decipher/app/requirements.txt ADDED
@@ -0,0 +1 @@
 
 
1
+
Biomni/mcp_generated/mcp_bioconductor-decipher/docker-compose.yml ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ version: '3.8'
2
+
3
+ services:
4
+ mcp-bioconductor-decipher:
5
+ build: .
6
+ image: mcp-bioconductor-decipher:latest
7
+ container_name: mcp-bioconductor-decipher
8
+ ports:
9
+ - "8000:8000"
10
+ environment:
11
+ - MCP_SERVER_NAME=bioconductor-decipher
12
+ volumes:
13
+ - ./workspace:/app/workspace
14
+ - ./output:/app/output
15
+ restart: unless-stopped
16
+ healthcheck:
17
+ test: ["CMD", "python", "-c", "import sys; sys.exit(0)"]
18
+ interval: 30s
19
+ timeout: 10s
20
+ retries: 3
21
+ start_period: 5s
22
+
Biomni/mcp_generated/mcp_bioconductor-decipher/environment.yaml ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ name: mcp-tool
3
+ channels:
4
+ - bioconda
5
+ - conda-forge
6
+ - defaults
7
+ dependencies:
8
+ - bioconductor-decipher
9
+ - python=3.10
10
+
Biomni/mcp_generated/mcp_bioconductor-decipher/requirements.txt ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ fastmcp
2
+ mcp
Biomni/mcp_generated/mcp_bioconductor-decontx/Dockerfile ADDED
@@ -0,0 +1,40 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ FROM python:3.10-slim
3
+
4
+ # Install system dependencies
5
+ RUN apt-get update && apt-get install -y default-jre wget curl && apt-get clean && rm -rf /var/lib/apt/lists/*
6
+
7
+ # Install Miniconda
8
+ RUN wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O /tmp/miniconda.sh && bash /tmp/miniconda.sh -b -p /opt/conda && rm /tmp/miniconda.sh
9
+
10
+ # Add conda to PATH
11
+ ENV PATH="/opt/conda/bin:$PATH"
12
+
13
+ # Install bioconductor-decontx via conda (e.g., from bioconda)
14
+ RUN conda install -c bioconda bioconductor-decontx -y && conda clean -a
15
+
16
+ # Install Python dependencies
17
+ RUN pip install uv
18
+ RUN uv pip install --system fastmcp
19
+
20
+ # Create app directory
21
+ WORKDIR /app
22
+
23
+ # Copy your MCP server
24
+ COPY app/bioconductor-decontx_server.py /app/
25
+
26
+ # Create workspace and output directories
27
+ RUN mkdir -p /app/workspace /app/output
28
+
29
+ # Make sure the server script is executable
30
+ RUN chmod +x /app/bioconductor-decontx_server.py
31
+
32
+ # Expose port for MCP over HTTP (optional)
33
+ EXPOSE 8000
34
+
35
+ # Health check
36
+ HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 CMD python -c "import sys; sys.exit(0)"
37
+
38
+ # Default command runs the MCP server via stdio
39
+ CMD ["python", "/app/bioconductor-decontx_server.py"]
40
+
Biomni/mcp_generated/mcp_bioconductor-decontx/app/bioconductor-decontx_server.py ADDED
@@ -0,0 +1,334 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import subprocess
2
+ import tempfile
3
+ from pathlib import Path
4
+ from typing import Optional
5
+
6
+ from mcp.server.fastmcp import FastMCP
7
+
8
+ SERVER_NAME = 'local_bioconductor_decontx'
9
+ mcp = FastMCP(SERVER_NAME)
10
+
11
+ @mcp.tool()
12
+ def decontx(
13
+ x: Path,
14
+ output_prefix: str,
15
+ z: Optional[Path] = None,
16
+ batch: Optional[Path] = None,
17
+ max_iter: int = 500,
18
+ delta_a: float = 1.0,
19
+ delta_b: float = 10.0,
20
+ phi: Optional[Path] = None,
21
+ theta: Optional[Path] = None,
22
+ effective_length: Optional[Path] = None,
23
+ length_normalization: str = "tpm",
24
+ num_chains: int = 3,
25
+ num_cores: int = 1,
26
+ seed: int = 12345,
27
+ logfile: Optional[Path] = None,
28
+ verbose: bool = True,
29
+ ):
30
+ """
31
+ Estimate and remove RNA contamination in single-cell data using DecontX.
32
+
33
+ This tool wraps the decontX R function to identify and remove contamination
34
+ from ambient RNA in single-cell RNA-seq count data.
35
+
36
+ Args:
37
+ x: Path to the input count matrix file (e.g., CSV). Rows should be
38
+ genes and columns should be cells. The first column should contain
39
+ gene names.
40
+ output_prefix: Prefix for the output files. The directory will be
41
+ created if it doesn't exist.
42
+ z: Optional path to a file containing cell labels. One label per line.
43
+ batch: Optional path to a file containing batch labels. One label per line.
44
+ max_iter: Maximum number of iterations for the Gibbs sampler.
45
+ delta_a: The first concentration parameter for the Dirichlet prior on
46
+ contamination levels.
47
+ delta_b: The second concentration parameter for the Dirichlet prior on
48
+ contamination levels.
49
+ phi: Optional path to a file containing the background contamination
50
+ distribution. If not provided, it will be estimated.
51
+ theta: Optional path to a file containing the native expression
52
+ distribution for each cell. If not provided, it will be estimated.
53
+ effective_length: Optional path to a file containing effective transcript
54
+ lengths for length normalization.
55
+ length_normalization: The length normalization method to be used.
56
+ One of 'tpm', 'fpm', 'fpkm', 'none'.
57
+ num_chains: The number of MCMC chains to run.
58
+ num_cores: The number of cores to use for parallel processing.
59
+ seed: The seed for the random number generator.
60
+ logfile: Optional path to a file where logs will be written.
61
+ verbose: If True, print progress messages to stderr.
62
+ """
63
+ # --- Input Validation ---
64
+ if not x.is_file():
65
+ raise FileNotFoundError(f"Input count matrix file not found: {x}")
66
+ if z and not z.is_file():
67
+ raise FileNotFoundError(f"Cell labels file not found: {z}")
68
+ if batch and not batch.is_file():
69
+ raise FileNotFoundError(f"Batch labels file not found: {batch}")
70
+ if phi and not phi.is_file():
71
+ raise FileNotFoundError(f"Phi distribution file not found: {phi}")
72
+ if theta and not theta.is_file():
73
+ raise FileNotFoundError(f"Theta distribution file not found: {theta}")
74
+ if effective_length and not effective_length.is_file():
75
+ raise FileNotFoundError(f"Effective length file not found: {effective_length}")
76
+
77
+ if max_iter <= 0:
78
+ raise ValueError("max_iter must be a positive integer.")
79
+ if num_chains <= 0:
80
+ raise ValueError("num_chains must be a positive integer.")
81
+ if num_cores <= 0:
82
+ raise ValueError("num_cores must be a positive integer.")
83
+ if delta_a <= 0 or delta_b <= 0:
84
+ raise ValueError("Delta parameters (delta_a, delta_b) must be positive.")
85
+
86
+ allowed_norm = ["tpm", "fpm", "fpkm", "none"]
87
+ if length_normalization not in allowed_norm:
88
+ raise ValueError(f"length_normalization must be one of {allowed_norm}")
89
+
90
+ # --- File and Path Handling ---
91
+ output_dir = Path(output_prefix).parent
92
+ output_dir.mkdir(parents=True, exist_ok=True)
93
+
94
+ output_counts_path = Path(f"{output_prefix}_decontXcounts.csv")
95
+ output_contamination_path = Path(f"{output_prefix}_contamination.csv")
96
+
97
+ with tempfile.TemporaryDirectory() as temp_dir:
98
+ script_path = Path(temp_dir) / "run_decontx.R"
99
+
100
+ # --- R Script Generation ---
101
+ z_r = f'"{z.resolve()}"' if z else "NULL"
102
+ batch_r = f'"{batch.resolve()}"' if batch else "NULL"
103
+ phi_r = f'read.csv("{phi.resolve()}", header=FALSE)$V1' if phi else "NULL"
104
+ theta_r = f'read.csv("{theta.resolve()}", header=FALSE)$V1' if theta else "NULL"
105
+ effective_length_r = f'read.csv("{effective_length.resolve()}", header=FALSE)$V1' if effective_length else "NULL"
106
+ logfile_r = f'"{logfile.resolve()}"' if logfile else "NULL"
107
+ verbose_r = "TRUE" if verbose else "FALSE"
108
+
109
+ r_script = f"""
110
+ library(decontX)
111
+ library(SingleCellExperiment)
112
+ library(Matrix)
113
+
114
+ counts <- as.matrix(read.csv("{x.resolve()}", row.names=1, check.names=FALSE))
115
+
116
+ z_data <- if (!is.null({z_r})) read.csv({z_r}, header=FALSE, stringsAsFactors=TRUE)$V1 else NULL
117
+ batch_data <- if (!is.null({batch_r})) read.csv({batch_r}, header=FALSE, stringsAsFactors=TRUE)$V1 else NULL
118
+ phi_data <- if (!is.null({phi_r})) {phi_r} else NULL
119
+ theta_data <- if (!is.null({theta_r})) {theta_r} else NULL
120
+ effectiveLength_data <- if (!is.null({effective_length_r})) {effective_length_r} else NULL
121
+
122
+ sce <- SingleCellExperiment(assays = list(counts = counts))
123
+
124
+ set.seed({seed})
125
+ sce <- decontX(
126
+ x = sce,
127
+ z = z_data,
128
+ batch = batch_data,
129
+ maxIter = {max_iter},
130
+ delta = c({delta_a}, {delta_b}),
131
+ phi = phi_data,
132
+ theta = theta_data,
133
+ effectiveLength = effectiveLength_data,
134
+ lengthNormalization = "{length_normalization}",
135
+ numChains = {num_chains},
136
+ numCores = {num_cores},
137
+ logfile = {logfile_r},
138
+ verbose = {verbose_r}
139
+ )
140
+
141
+ decontaminated_counts <- decontXcounts(sce)
142
+ contamination_scores <- colData(sce)$decontX_contamination
143
+ results_df <- data.frame(contamination = contamination_scores, row.names = colnames(sce))
144
+
145
+ write.csv(as.matrix(decontaminated_counts), file="{output_counts_path.resolve()}", row.names=TRUE)
146
+ write.csv(results_df, file="{output_contamination_path.resolve()}", row.names=TRUE)
147
+ """
148
+
149
+ with open(script_path, "w") as f:
150
+ f.write(r_script)
151
+
152
+ # --- Subprocess Execution ---
153
+ command = ["Rscript", str(script_path)]
154
+ command_str = " ".join(map(str, command))
155
+
156
+ try:
157
+ result = subprocess.run(
158
+ command,
159
+ capture_output=True,
160
+ text=True,
161
+ check=True,
162
+ )
163
+
164
+ output_files = [
165
+ str(output_counts_path),
166
+ str(output_contamination_path)
167
+ ]
168
+
169
+ return {
170
+ "command_executed": command_str,
171
+ "stdout": result.stdout,
172
+ "stderr": result.stderr,
173
+ "output_files": output_files
174
+ }
175
+ except subprocess.CalledProcessError as e:
176
+ return {
177
+ "command_executed": command_str,
178
+ "stdout": e.stdout,
179
+ "stderr": e.stderr,
180
+ "error": "DecontX execution failed.",
181
+ "return_code": e.returncode
182
+ }
183
+
184
+ @mcp.tool()
185
+ def decontpro(
186
+ x: Path,
187
+ output_prefix: str,
188
+ z: Optional[Path] = None,
189
+ batch: Optional[Path] = None,
190
+ max_iter: int = 200,
191
+ delta_a: float = 1.0,
192
+ delta_b: float = 1.0,
193
+ gamma: float = 1.0,
194
+ beta: float = 1.0,
195
+ num_chains: int = 3,
196
+ num_cores: int = 1,
197
+ seed: int = 12345,
198
+ logfile: Optional[Path] = None,
199
+ verbose: bool = True,
200
+ ):
201
+ """
202
+ Estimate and remove protein contamination in CITE-seq data using DecontPro.
203
+
204
+ This tool wraps the decontPro R function to identify and remove contamination
205
+ from ambient and background sources in single-cell protein expression data.
206
+
207
+ Args:
208
+ x: Path to the input ADT count matrix file (e.g., CSV). Rows should be
209
+ proteins and columns should be cells. The first column should contain
210
+ protein names.
211
+ output_prefix: Prefix for the output files. The directory will be
212
+ created if it doesn't exist.
213
+ z: Optional path to a file containing cell labels. One label per line.
214
+ batch: Optional path to a file containing batch labels. One label per line.
215
+ max_iter: Maximum number of iterations for the Gibbs sampler.
216
+ delta_a: The first concentration parameter for the Dirichlet prior on
217
+ contamination levels.
218
+ delta_b: The second concentration parameter for the Dirichlet prior on
219
+ contamination levels.
220
+ gamma: The background contamination distribution parameter.
221
+ beta: The native expression distribution parameter for each cell.
222
+ num_chains: The number of MCMC chains to run.
223
+ num_cores: The number of cores to use for parallel processing.
224
+ seed: The seed for the random number generator.
225
+ logfile: Optional path to a file where logs will be written.
226
+ verbose: If True, print progress messages to stderr.
227
+ """
228
+ # --- Input Validation ---
229
+ if not x.is_file():
230
+ raise FileNotFoundError(f"Input ADT count matrix file not found: {x}")
231
+ if z and not z.is_file():
232
+ raise FileNotFoundError(f"Cell labels file not found: {z}")
233
+ if batch and not batch.is_file():
234
+ raise FileNotFoundError(f"Batch labels file not found: {batch}")
235
+
236
+ if max_iter <= 0:
237
+ raise ValueError("max_iter must be a positive integer.")
238
+ if num_chains <= 0:
239
+ raise ValueError("num_chains must be a positive integer.")
240
+ if num_cores <= 0:
241
+ raise ValueError("num_cores must be a positive integer.")
242
+ if delta_a <= 0 or delta_b <= 0:
243
+ raise ValueError("Delta parameters (delta_a, delta_b) must be positive.")
244
+ if gamma <= 0 or beta <= 0:
245
+ raise ValueError("Gamma and Beta parameters must be positive.")
246
+
247
+ # --- File and Path Handling ---
248
+ output_dir = Path(output_prefix).parent
249
+ output_dir.mkdir(parents=True, exist_ok=True)
250
+
251
+ output_counts_path = Path(f"{output_prefix}_decontPro_counts.csv")
252
+ output_contamination_path = Path(f"{output_prefix}_decontPro_contamination.csv")
253
+
254
+ with tempfile.TemporaryDirectory() as temp_dir:
255
+ script_path = Path(temp_dir) / "run_decontpro.R"
256
+
257
+ # --- R Script Generation ---
258
+ z_r = f'"{z.resolve()}"' if z else "NULL"
259
+ batch_r = f'"{batch.resolve()}"' if batch else "NULL"
260
+ logfile_r = f'"{logfile.resolve()}"' if logfile else "NULL"
261
+ verbose_r = "TRUE" if verbose else "FALSE"
262
+
263
+ r_script = f"""
264
+ library(decontX)
265
+ library(SingleCellExperiment)
266
+ library(Matrix)
267
+
268
+ counts <- as.matrix(read.csv("{x.resolve()}", row.names=1, check.names=FALSE))
269
+
270
+ z_data <- if (!is.null({z_r})) read.csv({z_r}, header=FALSE, stringsAsFactors=TRUE)$V1 else NULL
271
+ batch_data <- if (!is.null({batch_r})) read.csv({batch_r}, header=FALSE, stringsAsFactors=TRUE)$V1 else NULL
272
+
273
+ sce <- SingleCellExperiment(assays = list(counts = counts))
274
+
275
+ set.seed({seed})
276
+ sce <- decontPro(
277
+ x = sce,
278
+ z = z_data,
279
+ batch = batch_data,
280
+ maxIter = {max_iter},
281
+ delta = c({delta_a}, {delta_b}),
282
+ gamma = {gamma},
283
+ beta = {beta},
284
+ numChains = {num_chains},
285
+ numCores = {num_cores},
286
+ logfile = {logfile_r},
287
+ verbose = {verbose_r}
288
+ )
289
+
290
+ decontaminated_counts <- metadata(sce)$decontPro$decontPro_counts
291
+ contamination_scores <- colData(sce)$decontPro_contamination
292
+ results_df <- data.frame(contamination = contamination_scores, row.names = colnames(sce))
293
+
294
+ write.csv(as.matrix(decontaminated_counts), file="{output_counts_path.resolve()}", row.names=TRUE)
295
+ write.csv(results_df, file="{output_contamination_path.resolve()}", row.names=TRUE)
296
+ """
297
+
298
+ with open(script_path, "w") as f:
299
+ f.write(r_script)
300
+
301
+ # --- Subprocess Execution ---
302
+ command = ["Rscript", str(script_path)]
303
+ command_str = " ".join(map(str, command))
304
+
305
+ try:
306
+ result = subprocess.run(
307
+ command,
308
+ capture_output=True,
309
+ text=True,
310
+ check=True,
311
+ )
312
+
313
+ output_files = [
314
+ str(output_counts_path),
315
+ str(output_contamination_path)
316
+ ]
317
+
318
+ return {
319
+ "command_executed": command_str,
320
+ "stdout": result.stdout,
321
+ "stderr": result.stderr,
322
+ "output_files": output_files
323
+ }
324
+ except subprocess.CalledProcessError as e:
325
+ return {
326
+ "command_executed": command_str,
327
+ "stdout": e.stdout,
328
+ "stderr": e.stderr,
329
+ "error": "DecontPro execution failed.",
330
+ "return_code": e.returncode
331
+ }
332
+
333
+ if __name__ == "__main__":
334
+ mcp.run(transport="stdio")
Biomni/mcp_generated/mcp_bioconductor-decontx/app/bioconductor-decontx_shim_server.py ADDED
@@ -0,0 +1,55 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env python3
2
+ from __future__ import annotations
3
+
4
+ import ast
5
+ from pathlib import Path
6
+
7
+ from mcp.server.fastmcp import FastMCP
8
+
9
+
10
+ SOURCE_SERVER = Path('/225040511/project/BioScientist/agent_system/toolbase/mcp_batch_from_manual_txt/mcp_bioconductor-decontx/app/bioconductor-decontx_server.py')
11
+ LOCAL_SERVER = Path(__file__).with_name(SOURCE_SERVER.name)
12
+ SERVER_NAME = 'biosci_bioconductor_decontx'
13
+
14
+
15
+ class _ShimMCP:
16
+ @staticmethod
17
+ def tool(*args, **kwargs):
18
+ if args and callable(args[0]) and len(args) == 1 and not kwargs:
19
+ return args[0]
20
+ def _decorator(fn):
21
+ return fn
22
+ return _decorator
23
+
24
+
25
+ def _resolve_source_server():
26
+ if LOCAL_SERVER.exists() and LOCAL_SERVER.name != Path(__file__).name:
27
+ return LOCAL_SERVER
28
+ return SOURCE_SERVER
29
+
30
+
31
+ def _load_functions():
32
+ source_server = _resolve_source_server()
33
+ code = source_server.read_text(encoding="utf-8")
34
+ tree = ast.parse(code, filename=str(source_server))
35
+ function_names = [n.name for n in tree.body if isinstance(n, ast.FunctionDef) and not n.name.startswith("_")]
36
+ namespace = {
37
+ "__name__": "__mcp_source__",
38
+ "mcp": _ShimMCP(),
39
+ }
40
+ exec(compile(code, str(source_server), "exec"), namespace, namespace)
41
+ loaded = []
42
+ for name in function_names:
43
+ fn = namespace.get(name)
44
+ if callable(fn):
45
+ loaded.append(fn)
46
+ return loaded
47
+
48
+
49
+ mcp = FastMCP(SERVER_NAME)
50
+ for _fn in _load_functions():
51
+ mcp.tool()(_fn)
52
+
53
+
54
+ if __name__ == "__main__":
55
+ mcp.run(transport="stdio")
Biomni/mcp_generated/mcp_bioconductor-decontx/docker-compose.yml ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ version: '3.8'
2
+
3
+ services:
4
+ mcp-bioconductor-decontx:
5
+ build: .
6
+ image: mcp-bioconductor-decontx:latest
7
+ container_name: mcp-bioconductor-decontx
8
+ ports:
9
+ - "8000:8000"
10
+ environment:
11
+ - MCP_SERVER_NAME=bioconductor-decontx
12
+ volumes:
13
+ - ./workspace:/app/workspace
14
+ - ./output:/app/output
15
+ restart: unless-stopped
16
+ healthcheck:
17
+ test: ["CMD", "python", "-c", "import sys; sys.exit(0)"]
18
+ interval: 30s
19
+ timeout: 10s
20
+ retries: 3
21
+ start_period: 5s
22
+