Skip to content

sblabkribb/combinatorial_design

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

17 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

Combinatorial Design Microservice

FastAPI ๊ธฐ๋ฐ˜ DNA ์กฐํ•ฉ ์–ด์…ˆ๋ธ”๋ฆฌ ์„ค๊ณ„ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค.
Part ์„œ์—ด + Module ์„ค๊ณ„๋ฅผ ์ž…๋ ฅ๋ฐ›์•„ GoldenGate / Gibson ์–ด์…ˆ๋ธ”๋ฆฌ ์‹œ๋ฎฌ๋ ˆ์ด์…˜์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ JSON + GenBank(base64)๋กœ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

Partbank26(partbank26/backend)์—์„œ HTTP๋กœ ํ˜ธ์ถœ๋˜๋ฉฐ, Docker Compose๋กœ ๋…๋ฆฝ ์ปจํ…Œ์ด๋„ˆ(combinatorial)๋กœ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.


๋ชฉ์ฐจ

  1. ์•„ํ‚คํ…์ฒ˜
  2. ๋น ๋ฅธ ์‹œ์ž‘ (Docker)
  3. API ๋ ˆํผ๋Ÿฐ์Šค
  4. GoldenGate ์–ด์…ˆ๋ธ”๋ฆฌ ๋กœ์ง
  5. ์˜ค๋ฅ˜ / ๊ฒฝ๊ณ  ๋ฉ”์‹œ์ง€ ํ•ด์„ค
  6. Partbank26 ์—ฐ๋™
  7. ํ…Œ์ŠคํŠธ
  8. ์ฃผ์š” ๋ณ€๊ฒฝ ์ด๋ ฅ
  9. ๋ ˆ๊ฑฐ์‹œ ์‚ฌ์šฉ๋ฒ• (Jupyter ์Šคํฌ๋ฆฝํŠธ)

์•„ํ‚คํ…์ฒ˜

Partbank26 Backend (FastAPI :8000)
    โ””โ”€ POST /api/v1/combinatorial/run
           โ”‚  part_ids โ†’ DB ์กฐํšŒ โ†’ ์„œ์—ด resolve
           โ–ผ
Combinatorial Microservice (FastAPI :8001)
    โ””โ”€ POST /run
           โ”‚
           โ”œโ”€ [GoldenGate] prepare_goldengate_fragments()
           โ”‚      ํŒŒํŠธ๋ณ„ BsaI ์‚ฌ์ดํŠธ ๊ฐ์ง€ / ๋ž˜ํ•‘
           โ”‚
           โ”œโ”€ filter_combinations_by_overhang()
           โ”‚      ์ธ์ ‘ ์Šฌ๋กฏ ์˜ค๋ฒ„ํ–‰ ์ผ์น˜ ์—ฌ๋ถ€๋กœ ์กฐํ•ฉ ํ•„ํ„ฐ๋ง
           โ”‚
           โ””โ”€ assemble_goldengate()
                  BsaI ์ ˆ๋‹จ โ†’ pydna Assembly โ†’ circular/linear
                  ๊ฒฐ๊ณผ: sequence, GenBank(base64), primers, features

ํ•ต์‹ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

  • pydna 5.2.0 โ€” DNA ์กฐ๋ฆฝ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ (Assembly, terminal_overlap, cut)
  • biopython 1.84 โ€” ์„œ์—ด ์ฒ˜๋ฆฌ, GenBank I/O, ์ œํ•œํšจ์†Œ(BsaI)
  • primers 0.5.10 โ€” ํ”„๋ผ์ด๋จธ ์„ค๊ณ„

๋น ๋ฅธ ์‹œ์ž‘ (Docker)

์‚ฌ์ „ ์š”๊ตฌ์‚ฌํ•ญ

  • assets/pUC19.gb โ€” ๊ธฐ๋ณธ ๋ฒกํ„ฐ ํŒŒ์ผ (์—†์œผ๋ฉด ๋ชจ๋“  ์š”์ฒญ์— vector_sequence ํ•„์ˆ˜)

๊ฐœ๋ฐœ ํ™˜๊ฒฝ ์‹คํ–‰

# partbank26 ๋ฃจํŠธ์—์„œ
docker compose -f docker-compose.dev.yml up combinatorial -d

# ์žฌ๋นŒ๋“œ (api.py ๋ณ€๊ฒฝ ํ›„)
bash scripts/rebuild-combinatorial.sh

ํ—ฌ์Šค์ฒดํฌ

curl http://localhost:8001/health
# {"status": "ok"}

API ๋ ˆํผ๋Ÿฐ์Šค

GET /health

์„œ๋น„์Šค ์ƒํƒœ ํ™•์ธ.

Response

{"status": "ok"}

POST /run

์กฐํ•ฉ ์–ด์…ˆ๋ธ”๋ฆฌ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ์‹คํ–‰.

Request Body

{
  "project_name": "string",
  "assembly_method": "goldengate",
  "vector_sequence": "ATCG...",
  "vector_overhang_left": "AAAA",
  "vector_overhang_right": "TCAC",
  "parts": [...],
  "modules": [...]
}
ํ•„๋“œ ํƒ€์ž… ํ•„์ˆ˜ ์„ค๋ช…
project_name string โœ… ํ”„๋กœ์ ํŠธ ์‹๋ณ„์ž
assembly_method "goldengate" | "gibson" โ€” ๊ธฐ๋ณธ๊ฐ’: "goldengate"
vector_sequence string โ€” ๋ฒกํ„ฐ DNA ์„œ์—ด. ๋ฏธ์ œ๊ณต ์‹œ assets/pUC19.gb ์‚ฌ์šฉ
vector_overhang_left string โ€” ๋ฒกํ„ฐ ์ขŒ์ธก ์ ‘ํ•ฉ ์˜ค๋ฒ„ํ–‰ (4 nt). ์ฒซ ๋ฒˆ์งธ ํŒŒํŠธ overhang_left์™€ ์ผ์น˜ํ•ด์•ผ ํ•จ. ๋ฏธ์ง€์ • ์‹œ ๊ฒ€์ฆ ์ƒ๋žต
vector_overhang_right string โ€” ๋ฒกํ„ฐ ์šฐ์ธก ์ ‘ํ•ฉ ์˜ค๋ฒ„ํ–‰ (4 nt). ๋งˆ์ง€๋ง‰ ํŒŒํŠธ overhang_right์™€ ์ผ์น˜ํ•ด์•ผ ํ•จ. ๋ฏธ์ง€์ • ์‹œ ๊ฒ€์ฆ ์ƒ๋žต
parts PartInput[] โœ… ํŒŒํŠธ ๋ชฉ๋ก
modules ModuleInput[] โœ… ๋ชจ๋“ˆ ์„ค๊ณ„

PartInput

{
  "id": "p1",
  "kid": "KBp_a0001",
  "name": "T7_promoter",
  "type": "Promoter",
  "sequence": "TAATACGACTCACTATA",
  "direction": "forward",
  "overhang_left": "GGAG",
  "overhang_right": "CTTT"
}
ํ•„๋“œ ์„ค๋ช…
name GenBank LOCUS ์ด๋ฆ„์œผ๋กœ ์‚ฌ์šฉ. ๊ณต๋ฐฑ์€ _๋กœ ์ž๋™ ์น˜ํ™˜
type ์Šฌ๋กฏ ํƒ€์ž…๊ณผ ๋‹ค๋ฅด๋ฉด ๊ฒฝ๊ณ  (์กฐ๋ฆฝ์€ ๊ณ„์† ์ง„ํ–‰)
overhang_left BsaI ์ ˆ๋‹จ ํ›„ ํŒŒํŠธ ์™ผ์ชฝ 4 nt sticky end
overhang_right BsaI ์ ˆ๋‹จ ํ›„ ํŒŒํŠธ ์˜ค๋ฅธ์ชฝ 4 nt sticky end

ModuleInput / ModuleSlot

{
  "id": "MM1",
  "slots": [
    {"type": "Promoter",   "part_names": ["T7_promoter"]},
    {"type": "RBS",        "part_names": ["T7_RBS", "B0034"]},
    {"type": "CDS",        "part_names": ["sfGFP"]},
    {"type": "Terminator", "part_names": ["T7_terminator"]}
  ]
}
  • ์Šฌ๋กฏ ๋‚ด ํŒŒํŠธ๊ฐ€ 2๊ฐœ ์ด์ƒ์ด๋ฉด ์กฐํ•ฉ ํญ๋ฐœ(combinatorial expansion) ์ˆ˜ํ–‰
  • part_names์˜ ํŒŒํŠธ๋Š” parts ๋ฐฐ์—ด์— ๋ฐ˜๋“œ์‹œ ์กด์žฌํ•ด์•ผ ํ•จ

Response Body

{
  "combinations": [
    {
      "id": "MM1_T7_promoter-T7_RBS-sfGFP-T7_terminator",
      "sequence": "ATCG...",
      "length": 1234,
      "genbank_b64": "TE9DVVMg...",
      "primers": [
        {"target": "T7_promoter", "direction": "forward", "sequence": "ATCG...", "tm": 58.3, "length": 20}
      ],
      "features": [
        {"label": "T7_promoter", "start": 0, "end": 17, "strand": 1}
      ]
    }
  ],
  "total_combinations": 2,
  "errors": [
    "MM1_T7_promoter-B0034-sfGFP-T7_terminator: ๋ฒกํ„ฐ ๋‚ด BsaI ์‚ฌ์ดํŠธ 1๊ฐœ ๋ฐœ๊ฒฌ โ€” ์‹œ๋ฎฌ๋ ˆ์ด์…˜์„ ์œ„ํ•ด ์ž๋™ ์น˜ํ™˜๋จ"
  ]
}

errors ๋ฐฐ์—ด ๊ตฌ์กฐ

  • {combo_key}: ... โ€” ํŠน์ • ์กฐํ•ฉ์—์„œ ๋ฐœ์ƒํ•œ ์˜ค๋ฅ˜/๊ฒฝ๊ณ 
  • ์ฝค๋ณด ํ‚ค ๋ฏธํฌํ•จ โ€” ์ „์ฒด ๊ณตํ†ต ์˜ค๋ฅ˜ (ํŒŒํŠธ ๋ฏธ๋ฐœ๊ฒฌ, ๋ฒกํ„ฐ ์ฝ๊ธฐ ์‹คํŒจ ๋“ฑ)

GenBank ๋””์ฝ”๋”ฉ ์˜ˆ์‹œ (Python)

import base64
gb_text = base64.b64decode(result["genbank_b64"]).decode()

GoldenGate ์–ด์…ˆ๋ธ”๋ฆฌ ๋กœ์ง

1๋‹จ๊ณ„: ํŒŒํŠธ ์ค€๋น„ (prepare_goldengate_fragments)

๊ฐ ํŒŒํŠธ๋ฅผ BsaI ์ ˆ๋‹จ ๊ฐ€๋Šฅํ•œ -withvector.gb ํŒŒ์ผ๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

Case A โ€” ํŒŒํŠธ์— BsaI ์‚ฌ์ดํŠธ 2๊ฐœ ์ •ํ™•ํžˆ ์กด์žฌ (GGTCTC + GAGACC)

  1. ๊ธฐ์กด BsaI ์‚ฌ์ดํŠธ ์‚ฌ์ด ์„œ์—ด ์ถ”์ถœ
  2. ์‹ค์ œ ์˜ค๋ฒ„ํ–‰์ด ์Šฌ๋กฏ ์„ค์ •(overhang_left/overhang_right)๊ณผ ์ผ์น˜ํ•˜๋Š”์ง€ ๊ฒ€์ฆ
  3. ๋ถˆ์ผ์น˜ ์‹œ โ†’ Case B ๋‚™์˜ค ์ฒ˜๋ฆฌ (๊ฒฝ๊ณ  ๊ธฐ๋ก)

Case B โ€” BsaI ์‚ฌ์ดํŠธ ์—†๊ฑฐ๋‚˜ ์˜ค๋ฒ„ํ–‰ ๋ถˆ์ผ์น˜

GGTCTCA[OHL][sequence][OHR]TGAGACC

๋ž˜ํ•‘ ํ›„ ์ ‘ํ•ฉ๋ถ€(OHL+seq[:6], seq[-6:]+OHR)์—์„œ ์šฐ๋ฐœ์  BsaI ์‚ฌ์ดํŠธ ์ƒ์„ฑ ์—ฌ๋ถ€ ์ž๋™ ๊ฒ€์‚ฌ.

์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ

  • BsaI ์‚ฌ์ดํŠธ 3๊ฐœ ์ด์ƒ โ†’ ํ•ด๋‹น ํŒŒํŠธ ์ œ์™ธ
  • ์šฐ๋ฐœ์  ์ ‘ํ•ฉ๋ถ€ BsaI โ†’ ๊ฒฝ๊ณ  + ์กฐ๋ฆฝ ์ง„ํ–‰ (๊ฒฐ๊ณผ ๋ถ€์ •ํ™• ๊ฐ€๋Šฅ)

ํŒŒ์ผ๋ช… ํ˜•์‹: {OHL}-{part_name}-{OHR}-withvector.gb

2๋‹จ๊ณ„: ์กฐํ•ฉ ํ•„ํ„ฐ๋ง (filter_combinations_by_overhang)

Slot 1: [OHL1-P1-OHR1]  โ†’  OHR1 == OHL2 ?
Slot 2: [OHL2-P2-OHR2]  โ†’  OHR2 == OHL3 ?
Slot 3: [OHL3-P3-OHR3]

์ธ์ ‘ ์Šฌ๋กฏ ๊ฐ„ ์˜ค๋ฒ„ํ–‰์ด ์—ฐ์†์ ์œผ๋กœ ์ผ์น˜ํ•˜๋Š” ์กฐํ•ฉ๋งŒ ํ†ต๊ณผ.
์กฐํ•ฉ ID: {module.id}_{part1}-{part2}-{part3}

3๋‹จ๊ณ„: ์–ด์…ˆ๋ธ”๋ฆฌ (assemble_goldengate)

๊ฐ ์œ ํšจ ์กฐํ•ฉ์— ๋Œ€ํ•ด:

  1. ๊ฐ ํŒŒํŠธ -withvector.gb ๋กœ๋“œ โ†’ BsaI ์ ˆ๋‹จ โ†’ ๊ฐ€์žฅ ๊ธด fragment ์„ ํƒ
  2. ๋ฒกํ„ฐ ์ œ๊ณต ์‹œ:
    • ๋ฒกํ„ฐ ๋‚ด BsaI ์‚ฌ์ดํŠธ ์ž๋™ ์น˜ํ™˜ (GGTCTCโ†’GGTCTG, GAGACCโ†’GAGACG)
    • ๋ฒกํ„ฐ ๋ž˜ํ•‘: GGTCTCA[OHR_last][vector][OHL_first]TGAGACC
    • vector_overhang_left/vector_overhang_right ์ง€์ • ์‹œ ์˜ค๋ฒ„ํ–‰ ์ผ์น˜ ๊ฒ€์ฆ ํ›„ ๋ถˆ์ผ์น˜ ์กฐํ•ฉ ์ œ์™ธ
    • BsaI ์ ˆ๋‹จ โ†’ ๋ฒกํ„ฐ backbone fragment ํš๋“
    • ์›ํ˜•(circular) ์กฐ๋ฆฝ ์ˆ˜ํ–‰
  3. ๋ฒกํ„ฐ ๋ฏธ์ œ๊ณต ์‹œ: ์„ ํ˜•(linear) ์กฐ๋ฆฝ
  4. ๊ฒฐ๊ณผ feature ์ •๋ฆฌ: BsaI ๋งˆ์ปค, ์˜ค๋ฒ„ํ–‰ ๋ ˆ์ด๋ธ”, ๋ฒ”์œ„ ์˜ค๋ฅ˜ feature ์ œ๊ฑฐ

์˜ค๋ฒ„ํ–‰ ์—ฐ๊ฒฐ ๊ตฌ์กฐ

[vector] โ”€โ”€โ”€ OHL_first โ”€โ”€โ”€โ–บ [Part1] โ”€โ”€โ”€ OHR1/OHL2 โ”€โ”€โ”€โ–บ [Part2] โ”€โ”€โ”€ OHR_last โ”€โ”€โ”€ [vector]

์˜ค๋ฅ˜ / ๊ฒฝ๊ณ  ๋ฉ”์‹œ์ง€ ํ•ด์„ค

๋ฉ”์‹œ์ง€ ์›์ธ ์˜ํ–ฅ
๋ฒกํ„ฐ ๋‚ด BsaI ์‚ฌ์ดํŠธ N๊ฐœ ๋ฐœ๊ฒฌ โ€” ์‹œ๋ฎฌ๋ ˆ์ด์…˜์„ ์œ„ํ•ด ์ž๋™ ์น˜ํ™˜๋จ ๋ฒกํ„ฐ ์„œ์—ด์— BsaI ์ธ์‹ ์„œ์—ด ์กด์žฌ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ์ž๋™ ๋ณด์ •. ์‹คํ—˜ ์‹œ ๋ฒกํ„ฐ ์ˆ˜์ • ํ•„์š”
[๊ฒฝ๊ณ ] {part}: ์Šฌ๋กฏ ํƒ€์ž… 'X'์— ํŒŒํŠธ ํƒ€์ž… 'Y'์ด ๋ฐฐ์น˜๋จ ์Šฌ๋กฏ ํƒ€์ž…๊ณผ ํŒŒํŠธ์˜ ์‹ค์ œ ํƒ€์ž… ๋ถˆ์ผ์น˜ ์กฐ๋ฆฝ ๊ณ„์† ์ง„ํ–‰. ์„ค๊ณ„ ํ™•์ธ ๊ถŒ์žฅ
[๊ฒฝ๊ณ ] {part}: OHR 'XX' + ์„œ์—ด 3' ๋ง๋‹จ์—์„œ ์˜๋„์น˜ ์•Š์€ BsaI ์‚ฌ์ดํŠธ N๊ฐœ ์ƒ์„ฑ ํŒŒํŠธ ์„œ์—ด ๋ง๋‹จ๊ณผ ์˜ค๋ฒ„ํ–‰ ๊ฒฐํ•ฉ ์‹œ ์šฐ๋ฐœ์  GAGACC/GGTCTC ํ˜•์„ฑ ํ•ด๋‹น ํŒŒํŠธ๋ฅผ ํฌํ•จํ•œ ์กฐํ•ฉ ๊ฒฐ๊ณผ ๋ถ€์ •ํ™• ๊ฐ€๋Šฅ. ์˜ค๋ฒ„ํ–‰ ๋ณ€๊ฒฝ ๊ถŒ์žฅ
{combo}: ๋ฒกํ„ฐ ์ขŒ์ธก/์šฐ์ธก ์˜ค๋ฒ„ํ–‰ ๋ถˆ์ผ์น˜ vector_overhang_left/right๊ฐ€ ํŒŒํŠธ ์‹ค์ œ ์˜ค๋ฒ„ํ–‰๊ณผ ๋‹ค๋ฆ„ ํ•ด๋‹น ์กฐํ•ฉ ์ œ์™ธ
{combo}: no BsaI site found in {gbfile} BsaI ์ ˆ๋‹จ ํ›„ fragment ์—†์Œ ํ•ด๋‹น ์กฐํ•ฉ ์ œ์™ธ
{combo}: circular assembly produced no candidates pydna assemble_circular() ํ›„๋ณด ์—†์Œ ํ•ด๋‹น ์กฐํ•ฉ ์ œ์™ธ. ์˜ค๋ฒ„ํ–‰ ์—ฐ์†์„ฑ ์žฌํ™•์ธ ํ•„์š”
Part 'X' not found in request module.slots[].part_names์— ์žˆ๋Š” ํŒŒํŠธ๊ฐ€ parts ๋ฐฐ์—ด์— ์—†์Œ ํ•ด๋‹น ํŒŒํŠธ ์ œ์™ธ

์šฐ๋ฐœ์  BsaI ์‚ฌ์ดํŠธ ๋ฐœ์ƒ ํŒจํ„ด ์ฃผ์˜

AGGAGA๋กœ ๋๋‚˜๋Š” ์„œ์—ด(์˜ˆ: ์ผ๋ถ€ RBS) + CC๋กœ ์‹œ์ž‘ํ•˜๋Š” OHR ์กฐํ•ฉ:

...AGGAGA + CCXX  โ†’  AGGAGACC  โ†’  GAGACC (BsaI ์—ญ๋ฐฉํ–ฅ ์ธ์‹!)

CC๋กœ ์‹œ์ž‘ํ•˜๋Š” OHR ๋Œ€์‹  TCAC, GCAG, AATG ๋“ฑ ์‚ฌ์šฉ ๊ถŒ์žฅ.


Partbank26 ์—ฐ๋™

๋ฐฑ์—”๋“œ ํ”„๋ก์‹œ ์œ„์น˜: backend/app/presentation/api/v1/combinatorial.py

๋™์ž‘ ํ๋ฆ„

  1. ์‚ฌ์šฉ์ž ์š”์ฒญ์—์„œ part_ids ์ˆ˜์‹ 
  2. DB์—์„œ ํŒŒํŠธ ์„œ์—ด ์กฐํšŒ (๊ถŒํ•œ ๊ฒ€์‚ฌ ํฌํ•จ)
  3. ์Šฌ๋กฏ์˜ overhang_left/overhang_right๋ฅผ ํ•ด๋‹น ์Šฌ๋กฏ์˜ ๋ชจ๋“  ํŒŒํŠธ์— ์ ์šฉ
  4. vector_id ์ œ๊ณต ์‹œ ๋ฒกํ„ฐ ์„œ์—ด DB ์กฐํšŒ
  5. ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค /run์œผ๋กœ ํฌ์›Œ๋”ฉ

Partbank RunRequest ์Šคํ‚ค๋งˆ

{
  "project_name": "my_project",
  "assembly_method": "goldengate",
  "vector_id": "<vector_db_id>",
  "vector_overhang_left": "GGAG",
  "vector_overhang_right": "TCAC",
  "modules": [
    {
      "id": "MM1",
      "slots": [
        {
          "type": "Promoter",
          "part_ids": ["<partbank_id_1>", "<partbank_id_2>"],
          "overhang_left": "GGAG",
          "overhang_right": "CTTT"
        }
      ]
    }
  ]
}

์ฃผ์˜: ์Šฌ๋กฏ์˜ overhang_left/overhang_right๋Š” ํ•ด๋‹น ์Šฌ๋กฏ ๋‚ด ๋ชจ๋“  ํŒŒํŠธ์— ๋™์ผํ•˜๊ฒŒ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.
ํŒŒํŠธ๋ณ„๋กœ ์˜ค๋ฒ„ํ–‰์ด ๋‹ค๋ฅธ ๊ฒฝ์šฐ ๋ณ„๋„ ์Šฌ๋กฏ์œผ๋กœ ๋ถ„๋ฆฌํ•˜์„ธ์š”.


ํ…Œ์ŠคํŠธ

# Docker ์ปจํ…Œ์ด๋„ˆ ๋‚ด์—์„œ ์ „์ฒด ์‹คํ–‰
docker exec partbank-combinatorial-dev python -m pytest tests/ -v

# ํ…Œ์ŠคํŠธ ํด๋ž˜์Šค๋ณ„ ์‹คํ–‰
docker exec partbank-combinatorial-dev python -m pytest tests/test_api_integration.py::TestBsaiCutBehavior -v
docker exec partbank-combinatorial-dev python -m pytest tests/test_api_integration.py::TestCircularGoldenGateAssembly -v
docker exec partbank-combinatorial-dev python -m pytest tests/test_api_integration.py::TestPartTypeMismatchWarning -v
docker exec partbank-combinatorial-dev python -m pytest tests/test_api_integration.py::TestVectorOverhangValidation -v

ํ…Œ์ŠคํŠธ ํด๋ž˜์Šค ๋ชฉ๋ก (์ด 28๊ฐœ)

ํด๋ž˜์Šค ์„ค๋ช…
TestHealthEndpoint ํ—ฌ์Šค์ฒดํฌ
TestRunInputValidation ์ž…๋ ฅ ๊ฒ€์ฆ (๋นˆ ํŒŒํŠธ, ํ•„์ˆ˜ ํ•„๋“œ ๋“ฑ)
TestRunAssembly ๊ธฐ๋ณธ ์กฐ๋ฆฝ, 2ร—2 ์กฐํ•ฉ ํ™•์žฅ, ํ”„๋ผ์ด๋จธ ๊ฒ€์ฆ
TestBsaiCutBehavior _wrap_with_bsai, BsaI ์ ˆ๋‹จ fragment ๊ฒ€์ฆ
TestCircularGoldenGateAssembly 2ํŒŒํŠธ/4ํŒŒํŠธ ์›ํ˜• ์กฐ๋ฆฝ, ๋ฒกํ„ฐ ํฌํ•จ ์กฐ๋ฆฝ
TestPartTypeMismatchWarning ์Šฌ๋กฏ-ํŒŒํŠธ ํƒ€์ž… ๋ถˆ์ผ์น˜ ๊ฒฝ๊ณ 
TestVectorOverhangValidation ๋ฒกํ„ฐ ์˜ค๋ฒ„ํ–‰ ๊ฒ€์ฆ (์ผ์น˜/๋ถˆ์ผ์น˜/๋ฏธ์ง€์ •)

์ฃผ์š” ๋ณ€๊ฒฝ ์ด๋ ฅ

v2.0 (2026-04) โ€” FastAPI ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šคํ™”

๊ธฐ์กด Jupyter notebook ๊ธฐ๋ฐ˜ ์Šคํฌ๋ฆฝํŠธ๋ฅผ FastAPI REST API๋กœ ์ „ํ™˜.

ํ•ญ๋ชฉ ๋‚ด์šฉ
BsaI ์‚ฌ์ดํŠธ ๊ฐ์ง€ ๊ธฐ์กด BsaI ์‚ฌ์ดํŠธ 2๊ฐœ ํŒŒํŠธ ์ž๋™ ์ธ์‹ ๋ฐ ์˜ค๋ฒ„ํ–‰ ๊ฒ€์ฆ
๋ฒกํ„ฐ circular ์กฐ๋ฆฝ ๋ฒกํ„ฐ backbone ํฌํ•จ assemble_circular() ์ง€์›
๋‚ด๋ถ€ BsaI ์ž๋™ ์น˜ํ™˜ ๋ฒกํ„ฐ ๋‚ด BsaI ์‚ฌ์ดํŠธ ์‹œ๋ฎฌ๋ ˆ์ด์…˜์šฉ ์ž๋™ ์น˜ํ™˜
์šฐ๋ฐœ์  ์ ‘ํ•ฉ๋ถ€ BsaI ๊ฐ์ง€ ํŒŒํŠธ ์„œ์—ด ๋ง๋‹จ + OHR ๊ฒฐํ•ฉ ์‹œ BsaI ์ƒ์„ฑ ์—ฌ๋ถ€ ์ž๋™ ๊ฒ€์‚ฌ
ํŒŒํŠธ ํƒ€์ž… ๋ถˆ์ผ์น˜ ๊ฒฝ๊ณ  ์Šฌ๋กฏ ํƒ€์ž… vs ํŒŒํŠธ ์‹ค์ œ ํƒ€์ž… ๋น„๊ต ๊ฒฝ๊ณ 
๋ฒกํ„ฐ ์˜ค๋ฒ„ํ–‰ ๊ฒ€์ฆ vector_overhang_left/right ์ง€์ • ์‹œ ๋ถˆ์ผ์น˜ ์กฐํ•ฉ ์ œ์™ธ
feature ์ •๋ฆฌ ์กฐ๋ฆฝ ํ›„ BsaI ๋งˆ์ปค, ์˜ค๋ฒ„ํ–‰ ๋ ˆ์ด๋ธ”, ๋ฒ”์œ„ ์˜ค๋ฅ˜ feature ์ž๋™ ์ œ๊ฑฐ
์กฐํ•ฉ๋ณ„ ์—๋Ÿฌ ๋ถ„๋ฆฌ errors[]์˜ {combo_key}: prefix๋กœ ํ”„๋ก ํŠธ์—”๋“œ ์นด๋“œ๋ณ„ ํ‘œ์‹œ
TDD 28๊ฐœ ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ (pydna ์‹ค์ œ ์‹คํ–‰, mock ์—†์Œ)

๋ ˆ๊ฑฐ์‹œ ์‚ฌ์šฉ๋ฒ• (Jupyter ์Šคํฌ๋ฆฝํŠธ)

์•„๋ž˜๋Š” v1.0 Jupyter ๊ธฐ๋ฐ˜ ์Šคํฌ๋ฆฝํŠธ ์‚ฌ์šฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ํ˜„์žฌ๋Š” FastAPI ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค(api.py)๊ฐ€ ์ฃผ ์ธํ„ฐํŽ˜์ด์Šค์ž…๋‹ˆ๋‹ค.

ํŽผ์น˜๊ธฐ

์‚ฌ์šฉ๋ฒ•

git clone git@github.com:sblabkribb/combinatorial_design.git
cd combinatorial_design
  • projects/ ํ•˜์œ„์— ํ”„๋กœ์ ํŠธ ํด๋” ์ƒ์„ฑ (์˜ˆ: haseong_240704)
  • assembly_design.xlsx ๋ณต์‚ฌ ํ›„ ํŽธ์ง‘
    • ์‹œํŠธ1: part ๋””์ž์ธ
    • ์‹œํŠธ2: module ๋””์ž์ธ
    • ์‹œํŠธ3: multi-module ๋””์ž์ธ
    • ์‹œํŠธ4: pathway ๋””์ž์ธ
  • ํŒŒํŠธ ์ •๋ณด๋Š” PartDB-kribb.xlsx ์ฐธ์กฐ

ํŒŒํŠธ ์ค€๋น„

import part_preparation as pprep
project_dir = "haseong_240704"
pprep.part_insert_goldengate(project_dir, "assembly_design.xlsx")
pprep.part_withvector_gibson(project_dir, "pUC19.gb", "MCS")

๋ชจ๋“ˆ ์กฐ๋ฆฝ

import part_assembly as pasm
allcomb = pasm.get_all_possible_combinations(project_dir, "assembly_design.xlsx")
module_linear = pasm.part_assembly_goldengate(project_dir, allcomb)
module_withvector = pasm.build_module_withvector_gibson(project_dir, "pUC19.gb", module_linear)

๋ฉ€ํ‹ฐ๋ชจ๋“ˆ / ๊ฒฝ๋กœ ์กฐ๋ฆฝ

import module_assembly as masm
assembly_linear = masm.module_combinatorial_gibson_assembly(project_dir, "assembly_design.xlsx")
assembly_circular = masm.module_comb_withvector_gibson_assembly(project_dir, "pUC19.gb", assembly_linear)
all_pathways = masm.pathway_comb_withvector_gibson_assembly(project_dir, "assembly_design.xlsx", "pUC19.gb", assembly_linear)

1. ์‚ฌ์šฉ๋ฒ• ๊ฐ„๋‹จํ•œ ์„ค๋ช…

  • ์ž„์˜์˜ ํด๋” ์œ„์น˜์—์„œ ๋‹ค์Œ ์ž…๋ ฅ (command line)
  • git clone git@github.com:sblabkribb/combinatorial_design.git
  • combinatorial_design ํด๋” ์ด๋™
  • ์›ํ•˜๋Š” ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์œผ๋กœ projects ํด๋” ์•ˆ์— ํ•˜์œ„ํด๋”๋ฅผ (์˜ˆ๋ฅผ ๋“ค์–ด haseong_240704) ๋งŒ๋“ค๊ณ  assembly_design.xlsx ํŒŒ์ผ์„ ๋ณต์‚ฌํ•ด์„œ ํ•ด๋‹น ํ”„๋กœ์ ํŠธ ํด๋”์— ๋ถ™์—ฌ๋„ฃ์Œ
  • ํ”„๋กœ์ ํŠธ ํด๋”์˜ assembly_design.xlsx ํŒŒ์ผ์„ ์—ด๊ณ 
    • ์ฒซ๋ฒˆ์งธ ์‹œํŠธ์˜ part ๋””์ž์ธ
    • ๋‘๋ฒˆ์งธ ์‹œํŠธ์˜ module ๋””์ž์ธ (single module)
    • ์„ธ๋ฒˆ์งธ ์‹œํŠธ์˜ multi module ๋””์ž์ธ
    • ๋„ค๋ฒˆ์งธ ์‹œํŠธ์˜ pathway ๋””์ž์ธ (multi-module + multi-module)
  • ์ฐธ๊ณ ๋กœ ๋ถ€ํ’ˆ ์ •๋ณด๋Š” ์—‘์…€ํŒŒ์ผ (PartDB-kribb.xlsx)์— ์žˆ์Œ
  • ๊ฐ ํ”„๋กœ์ ํŠธ ํด๋”์— ์ƒ์„ฑ๋˜๋Š” genbank ํŒŒ์ผ์€ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ข‹์œผ๋ฉฐ ๋งŒ์•ฝ ์ž„์˜๋กœ ๋ณ€๊ฒฝํ•˜์—ฌ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์„๊ฒฝ์šฐ ๋ณต์‚ฌํ•˜์—ฌ ๋ณ„๋„ ๋””๋ ‰ํ† ๋ฆฌ์—์„œ ๊ด€๋ฆฌ
  • ์„ธ๋ถ€ ์‚ฌ์šฉ๋ฒ•์€ ์•„๋ž˜ ์ฐธ๊ณ 
    • 3-A ๋ถ€ํ’ˆ์„ค๊ณ„
    • 3-B ๋ชจ๋“ˆ์„ค๊ณ„
    • 3-C ๋ฉ€ํ‹ฐ๋ชจ๋“ˆ ์„ค๊ณ„
    • 3-D ๊ฒฝ๋กœ์„ค๊ณ„
  • python (ipynb) ์‹คํ–‰์„ ์œ„ํ•ด์„œ๋Š” conda ํ™˜๊ฒฝ์„ ๋งŒ๋“  ํ›„ env.yaml ํŒŒ์ผ๋กœ ํ™˜๊ฒฝ ๊ตฌ์ถ•ํ›„ ์‹คํ–‰ ๊ฐ€๋Šฅ
  • vscode ํ™˜๊ฒฝ์—์„œ ์ˆ˜ํ–‰ ๊ฐ€๋Šฅ

2. ๋ถ€ํ’ˆ ์ •๋ณด ๊ด€๋ฆฌ

  • PartDB-kribb.xlsx
  • ์ˆœ์ˆ˜ ์„œ์—ด์ •๋ณด๋งŒ ์ €์žฅ

3-A. ๋ถ€ํ’ˆ ์„ค๊ณ„

  • Golden gate ์ˆ˜ํ–‰ ๊ฐ€๋Šฅํ•œ ์ƒํƒœ์˜ part ๋‹จ์œ„์˜ ์ •๋ณด (genbank ํŒŒ์ผ) ์ค€๋น„ ๊ณผ์ •
  • ๋ถ€ํ’ˆ ์‹ค๋ฌผ์€ ๋ณธ ์‹œ๋ฎฌ๋ ˆ์ด์…˜๊ณผ๋Š” ๋‹ค๋ฅด๊ฒŒ duplex ํ˜•ํƒœ๋กœ ์ €์žฅ๋  ์ˆ˜ ์žˆ์Œ
  • ํ•ด๋‹น ์ •๋ณด๋Š” genbank file๋กœ ํ”„๋กœ์ ํŠธ ํด๋” ํ•˜์œ„ part ํด๋”์— ์ €์žฅ

์„ค๊ณ„ ๋ฐฉ๋ฒ•

  • part ์„œ์—ด์— enzyme site์™€ overhang ๋“ฑ์„ ๋ถ™์—ฌ์„œ golden gate assembly ์ˆ˜ํ–‰ ๋˜๋„๋ก ์„ค๊ณ„
  • ์„ค๊ณ„๋œ ํŒŒ์ผ์€ insert๋กœ ๋จผ์ € ์ค€๋น„๋˜๊ณ  ์ด ํ›„ vector์— ์ €์žฅ๋จ
    • pUC19 vector์— ์ €์žฅ๋จ์„ ๊ฐ€์ •ํ•จ (genbank/addgene-plasmid-50005-sequence-222046.gbk)
    • ์‹ค์ œ๋กœ ๊ฐ ๋ถ€ํ’ˆ๋“ค์€ overhang๊ณผ enzyme site๊ฐ€ ๋ถ™์–ด์„œ duplex ํ˜•ํƒœ๋กœ ์ €์žฅ๋˜๋ฏ€๋กœ (์ฃผ๋ฌธ ์•ฝ 10~30๋งŒ์›, 1000๋ฐฐ ํฌ์„, 0.1 microl/ํšŒ ์‚ฌ์šฉ) ์ด ํ›„ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ๊ณผ์ •์€ ์‹ค์ œ๋กœ ์ˆ˜ํ–‰๋˜์ง€ ์•Š์Œ. ๋ณธ ์‹œ๋ฎฌ๋ ˆ์ด์…˜์€ genbank ํŒŒ์ผ์„ ์ž‘์„ฑํ•˜๊ธฐ ์œ„ํ•œ ๊ณผ์ •์œผ๋กœ ์ดํ•ด
  • ์ค€๋น„๋œ part ์ •๋ณด๋Š” [id ์ด๋ฆ„].gb์œผ๋กœ parts/insert ๋””๋ ‰ํ† ๋ฆฌ์— ์ €์žฅ

alt text{width=500px}

Insert

  • excel file์—์„œ ์„ค๊ณ„๋œ ๋Œ€๋กœ insert ์„œ์—ด์„ ๋งŒ๋“ค๋กœ genbank ํŒŒ์ผ ์ƒ์„ฑ
  • project_dir์— ํ”„๋กœ์ ํŠธ ์ด๋ฆ„ (์•ž์„œ ๋งŒ๋“  ํด๋” ์ด๋ฆ„) ์ €์žฅ
  • part_preparation.py ํŒŒ์ผ์— ๊ตฌํ˜„
import part_preparation as pprep
from importlib import reload
reload(pprep)

project_dir = "haseong_240704"
design_file = "assembly_design.xlsx"
vector_gbfile = "addgene-plasmid-50005-sequence-222046.gb"

pprep.part_insert_goldengate(project_dir, design_file)
Process completed. GenBank files have been created in the folder of c:\mydocs\2024\dev\combinatorial_design\projects\haseong_240704\parts\insert

Inserting the part in a vector

  • Gibson์„ ํ™œ์šฉํ•œ insert - vector์— ํด๋กœ๋‹ (gbfile ์–ป๊ธฐ ์œ„ํ•œ ์‹œ๋ฎฌ๋ ˆ์ด์…˜)
  • parts/insert ํด๋”์— ์žˆ๋Š” ๋ชจ๋“  insert genbank ํŒŒ์ผ์— ๋Œ€ํ•ด์„œ ์ž๋™ ์ˆ˜ํ–‰
  • pUC19์˜ MCS ์„œ์—ด๊ณผ ๊ตํ™˜ ์‚ฝ์ž…
    • ๊ตํ™˜ ์‚ฝ์ž…์€ pydna์—์„œ ์ง€์›ํ•˜์ง€ ์•Š์•„ enzyme cut ํ›„ pcr ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ์ง„ํ–‰
  • genbank ํŒŒ์ผ์€ parts/withvector ํด๋”์— ์ €์žฅ
  • Gibson ์œ„ํ•œ ๊ฐ insert์šฉ primer ์„œ์—ด ์ž๋™ ์ƒ์„ฑ ๋ฐ project ํด๋”์— ์ €์žฅ primers-part-withvector-gibson.csv
  • pydna์˜ assemblyํ›„ insert์˜ feature ์œ„์น˜๊ฐ€ ์ ์ ˆํžˆ ์—…๋ฐ์ดํŠธ ๋˜์ง€ ์•Š๋Š” ๋ฌธ์ œ๋กœ ๊ด€๋ จ fix ํฌํ•จ
import part_preparation as pprep
from importlib import reload
reload(pprep)

pprep.part_withvector_gibson(project_dir, vector_gbfile, "MCS")
Process completed. GenBank files have been created in the folder of c:\mydocs\2024\dev\combinatorial_design\projects\haseong_240704\parts\withvector

3-B. ๋ชจ๋“ˆ ์„ค๊ณ„

  • ์•ž์„œ ๋งŒ๋“  part ๋””๋ ‰ํ† ๋ฆฌ์˜ ๋ถ€ํ’ˆ๋“ค๋กœ ๋ชจ๋“ˆ ์ œ์ž‘ํ•˜๋Š” ๊ณผ์ •
  • ์•ž์„œ ๋งŒ๋“  part๋“ค๋กœ ํ•œ์ •๋จ
  • ๋™์ผ id์— ์†ํ•œ ๋ถ€ํ’ˆ๋“ค์ด ์กฐํ•ฉ๋˜์–ด ํ•˜๋‚˜์˜ linear DNA๋ฅผ ๋งŒ๋“ฆ
  • ์กฐ๋ฆฝ๋œ ํ•˜๋‚˜์˜ ๋ชจ๋“ˆ์€ insert๋กœ์„œ ๋ฒกํ„ฐ์— ์ €์žฅ๋˜๋ฉฐ genbank ํŒŒ์ผ๋กœ ์ •๋ณด ์ €์žฅ
  • genbank ํŒŒ์ผ์€ ์—‘์…€ํŒŒ์ผ์— ์ง€์ •๋œ id๋ฅผ ํŒŒ์ผ์ด๋ฆ„์œผ๋กœ module ๋””๋ ‰ํ† ๋ฆฌ์— ์ €์žฅ
  • part_assembly.py ์— ๊ตฌํ˜„

alt text

All combination generation

  • ์œ„ ๋””์ž์ธ ํŒŒ์ผ์—์„œ ๋ณด๋“ฏ ์‚ฌ์šฉ์ž์˜ ํŽธ์˜๋ฅผ ์œ„ํ•ด ๋ถ€ํ’ˆ๋“ค์˜ ์ด๋ฆ„๋งŒ์œผ๋กœ ์„ค๊ณ„๋ฅผ ์ˆ˜ํ–‰ํ•จ
  • ๊ทธ๋Ÿฌ๋‚˜ ๊ฐ™์€ ์ด๋ฆ„์„ ๊ฐ™๋Š” ๋‹ค๋ฅธ DNA ์„œ์—ด์ด ์žˆ์„ ์ˆ˜ ์žˆ์Œ
    • ์˜ˆ๋ฅผ ๋“ค์–ด BBa_J23100์˜ ๊ฒฝ์šฐ ์•ž ๋’ค ์˜ค๋ฒ„ํ–‰์ด ๋‹ค๋ฅด๊ฒŒ ๋ถ™์€ ํ˜•ํƒœ๋กœ O1-BBa_J23100-O2-withvector.gb ํŒŒ์ผ๊ณผ O2-BBa_J23100-O3-withvector.gb ํŒŒ์ผ์ด ๊ฐ™์€ BBa_J23100 ๋ถ€ํ’ˆ์œผ๋กœ ์ทจ๊ธ‰๋  ์ˆ˜ ์žˆ์Œ
  • ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋กœ ์—ฐ๊ฒฐ๋ถ€์œ„์— ๊ณตํ†ต ์˜ค๋ฒ„ํ–‰์„ ๊ฐ–๋Š” ๋ถ€ํ’ˆ๋“ค๋กœ๋งŒ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋Š” ์กฐํ•ฉ์„ ํ•„ํ„ฐ๋งํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰
  • ์–ด์…ˆ๋ธ”๋ฆฌ ์‹œ๋ฎฌ๋ ˆ์ด์…˜์œผ๋กœ ์‹ค์ œ ์–ด์…ˆ๋ธ”๋ฆฌ ์˜ˆ์ธก ๊ฒ€์ฆํ•˜๊ณ  ์ตœ์ข… gb ํŒŒ์ผ module ํด๋” ์ €์žฅ
  • ์ž๋™ ์ƒ์„ฑ๋œ primer ๋ฆฌ์ŠคํŠธ๋Š” project ํด๋”์— ์ €์žฅ
import part_assembly as pasm
from importlib import reload
reload(pasm)

allcomb = pasm.get_all_possible_combinations(project_dir, design_file)

์„ค๊ณ„๋œ ์กฐํ•ฉ๋ณ„๋กœ Linear DNA ์กฐ๋ฆฝ Goldengate Assembly

  • ์•ž์„œ ๋งŒ๋“ค์–ด์ง„ ๋ถ€ํ’ˆ ์กฐํ•ฉ๋“ค์„ goldengate assembly๋กœ linear dna ๋งŒ๋“ค๊ธฐ
  • genbank file ์ €์žฅ
import part_assembly as pasm
import pandas as pd 
from importlib import reload
reload(pasm)
from pydna.all import read

## goldengate assembly with the filtered combinations
## 
module_linear = pasm.part_assembly_goldengate(project_dir, allcomb)

c:\mydocs\2024\dev\combinatorial_design\projects\haseong_240704\modules\inserts/VA8-BBa_J23106-BBa_B0032-IspA-L2U3H03-VA2.gb

์กฐํ•ฉ๋œ Linear DNA๋ฅผ vector์— ํด๋กœ๋‹ Gibson assembly

  • Assume pUC19 is used for the vector
  • project ํด๋”์— primer ์ €์žฅ
import part_assembly as pasm
import pandas as pd 
from importlib import reload
reload(pasm)

module_withvector_list = pasm.build_module_withvector_gibson(project_dir, vector_gbfile, module_linear)

c:\mydocs\2024\dev\combinatorial_design\projects\haseong_240704\modules\withvector/VA8-BBa_J23106-BBa_B0032-IspA-L2U3H03-VA2_withvector.gb

3-C. ๋ชจ๋“ˆ ์–ด์…ˆ๋ธ”๋ฆฌ ๊ธฐ๋ฐ˜ ๋‹ค์ค‘ ๋ชจ๋“ˆ ์„ค๊ณ„

  • ๊ฐ ๋ชจ๋“ˆ๋“ค์˜ ์กฐํ•ฉ์— ๋Œ€ํ•ด์„œ gibson assembly ์ด์šฉํ•œ linear DNA ๋งŒ๋“ค๊ธฐ
  • assembly_design.xlsx ํŒŒ์ผ multi-module ํ…์—์„œ ๋””์ž์ธ
  • ์•„๋ž˜ ์ด๋ฏธ์ง€์™€ ๊ฐ™์ด ID๋ฅผ ์ž„์˜๋กœ ๋„ฃ๊ณ  ์›ํ•˜๋Š” ์กฐํ•ฉ์˜ ์œ ์ „์ž(CDS)๋ฅผ ๋ช…์‹œํ•จ
  • ํ•ด๋‹น ์œ ์ „์ž๋“ค์ด ํฌํ•จ๋œ ๋ชจ๋“  ์กฐํ•ฉ์— ๋Œ€ํ•ด์„œ linear DNA ๋จผ์ € ์ƒ์„ฑ
  • pathways/insert/[modulename] ์— gbfile ์ƒ์„ฑ
  • module_assembly.py์— ๊ตฌํ˜„
  • project folder์— primer ํŒŒ์ผ ์ €์žฅ

alt text

import module_assembly as masm
from importlib import reload
reload(masm)

assembly_linear_dict = masm.module_combinatorial_gibson_assembly(project_dir, design_file)

c:\mydocs\2024\dev\combinatorial_design\projects\haseong_240704\pathways\inserts\MM2\MM2_0015.gb

  • ์ฃผ์–ด์ง„ vector์— gibson์œผ๋กœ ์‚ฝ์ž…ํ•œ ์ƒํƒœ์˜ circular DNA ์ œ์ž‘
  • pathways/withvector/MMxx์— genbank ํŒŒ์ผ ์ €์žฅ
import module_assembly as masm
from importlib import reload
reload(masm)

assembly_circular_dict = masm.module_comb_withvector_gibson_assembly(project_dir, vector_gbfile, assembly_linear_dict)

c:\mydocs\2024\dev\combinatorial_design\projects\haseong_240704\pathways\withvector\MM2\MM2_0015_withvector.gb

3-D. ๋Œ€์‚ฌ๊ฒฝ๋กœ ์กฐํ•ฉ

  • ์œ„ ๋‘ ๊ฐœ ์ด์ƒ์˜ ๋ชจ๋“ˆ์ด ์กฐํ•ฉ๋œ ๋Œ€์‚ฌ๊ฒฝ๋กœ๋“ค์— ๋Œ€ํ•ด์„œ ์„œ๋กœ ๋ชจ๋“  ์กฐํ•ฉ์œผ๋กœ ์กฐ๋ฆฝํ•˜๋Š” ๊ณผ์ •
  • ๋ฉ€ํ‹ฐ ๋ชจ๋“ˆ์€ ์•ž์„œ ๋งŒ๋“  ๋ชจ๋“ˆ ์ด๋ฆ„์œผ๋กœ ๋””์ž์ธ
  • ์ˆ˜ํ–‰ ์ „ ์•ž์„œ module_combinatorial_gibson_assembly ํ•จ์ˆ˜์™€ module_comb_withvector_gibson_assembly ๋จผ์ € ์‹คํ–‰ ํ•„์ˆ˜ (๋ฉ€ํ‹ฐ๋ชจ๋“ˆ๋“ค์„ ๋จผ์ € ๋งŒ๋“ค์–ด ๋‘์–ด์•ผ ํ•จ)
  • assembly_design.xlsx ํŒŒ์ผ์˜ pathway ์‹œํŠธ์—์„œ ๋””์ž์ธ
  • pathways/withvector/[module name]์— gbfile ์ƒ์„ฑ
  • module_assembly.py์— ๊ตฌํ˜„
  • project folder์— primer ์ €์žฅ

alt text

import module_assembly as masm
from importlib import reload
reload(masm)

all_pathway_combination_list = masm.pathway_comb_withvector_gibson_assembly(project_dir, design_file, vector_gbfile, assembly_linear_dict)

c:\mydocs\2024\dev\combinatorial_design\projects\haseong_240704\pathways\withvector\MM3\MM3_0010_withvector.gb

  • ์ตœ์ข… 7๊ฐœ ์œ ์ „์ž ์กฐํ•ฉ, 11kbp vector map ์ž๋™ ์™„์„ฑ

alt text

About

combinatorial_design

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors