Code Monkey home page Code Monkey logo

dnaweaver's Introduction

DNA Weaver

DNA Weaver Logo

Travis CI build status https://coveralls.io/repos/github/Edinburgh-Genome-Foundry/DnaWeaver/badge.svg?branch=master

DNA Weaver (documentation here) is a Python library to find optimal strategies for assembling large DNA constructs. Given an arbitrary sequence, DNA Weaver will select the most adapted commercial DNA providers, cloning methods and parts repositories (depending on your preferences), and will design all necessary assembly fragments and assembly steps. Try it online via the DNA Weaver web app.

DNA Weaver was written with versatility and extensibility in mind: each DNA source and assembly method can be customized, and assembly plans can be optimized with respect to total price, overall duration of the assembly, or assembly success probabilities.

How it works

In DNA Weaver you first define a supply network connecting various DNA sources (commercial providers, part repositories, genomic DNA, and cloning stations) to represent how DNA can be obtained in your lab or biofoundry. For instance, assume that you routinely assemble ~10kb sequences using Gibson assembly, from fragments obtained either commercially or from the assembly of oligonucleotides. Your supply network then looks as follows:

DNA Weaver Logo

When you submit a sequence to the main station (here, the Gibson Assembly station), DNA Weaver will use smart sequence decomposition techniques and competitive bidding between the different DNA sources in order to find the best possible assembly plan.

A detailed description and walkthrough of DNA Weaver can be found in this PDF document: DNA Weaver presentation.

Examples

Ordering fragments from multiple vendors

In the following example we ask DNA Weaver for a plan to assemble a 10kb sequence via Gibson assembly of fragments with 40bp homologies. The fragments can be ordered from two companies: CheapDNA produces fragments for 10c/bp, at the condition that they do not contain any BsaI site and are smaller than 3kb, and DeluxeDNA produces produces any fragment under 4kb for 20c/bp.

We will first CheapDNA and DeluxeDNA separately, then link them to a Gibson Assembly station:

DNA Weaver Logo

import dnaweaver as dw

cheap_dna_offer = dw.CommercialDnaOffer(
    name="CheapDNA",
    sequence_constraints=[
        dw.NoPatternConstraint(enzyme="BsaI"),
        dw.SequenceLengthConstraint(max_length=4000)
    ],
    pricing=dw.PerBasepairPricing(0.10),
    lead_time=40
)
deluxe_dna_offer = dw.CommercialDnaOffer(
    name="DeluxeDNA",
    sequence_constraints=[dw.SequenceLengthConstraint(max_length=3000)],
    pricing=dw.PerBasepairPricing(0.20),
    lead_time=20
)
assembly_station = dw.DnaAssemblyStation(
    name="Gibson Assembly Station",
    assembly_method=dw.GibsonAssemblyMethod(
        overhang_selector=dw.TmSegmentSelector(min_tm=55, max_tm=70),
        min_segment_length=500,
        max_segment_length=4000,
        duration=5
    ),
    supplier=[cheap_dna_offer, deluxe_dna_offer],
    coarse_grain=20
)
sequence = dw.random_dna_sequence(10000, seed=123)
quote = assembly_station.get_quote(sequence, with_assembly_plan=True)

print (quote.assembly_step_summary())

This code prints out an assembly summary showing the source of the different sequence segments (start, end):

Ordering plan:
  0-1719: From CheapDNA - price 172.80 - lead_time 40.0
  1719-4429: From CheapDNA - price 273.00 - lead_time 40.0
  4429-5318: From DeluxeDNA - price 182.00 - lead_time 20.0
  5318-7359: From CheapDNA - price 206.00 - lead_time 40.0
  7359-10000: From CheapDNA - price 265.00 - lead_time 40.0
Price: 1098.80, total lead_time: 45.0

Notice how DNA Weaver uses preferentially CheapDNA, with the exception of a 1kb fragment in the middle of the sequence, which had to be ordered from DeluxeDNA due to the presence of a BsaI site.

Multi-step assembly with assembly report

By defining more DNA sources and connecting them together it is possible to model complex assembly problems.

For instance in this example we implement a complex DNA assembly chain, where the final DNA sequence (typically 50kb) is obtained from Yeast recombination of DNA chunks originating either from the E. coli chromosome (via PCR extraction) or from the assembly of smaller fragments via Golden Assembly or Gibson assembly (whichever method is best adapted). These assembly fragments are obtained either from commercial providers (CheapDNA and DeluxeDNA) or assembled from oligos:

DNA Weaver Logo

Just a few lines of code can produce a comprehensive report (see a sample here) featuring plots of the final assembly plan, comprehensive PDF reports listing all operations needed, and genbank/fasta files of the sequences to order:

quote = assembly_station.get_quote(sequence, with_assembly_plan=True)
assembly_plan_report = quote.to_assembly_plan_report()
assembly_plan_report.write_full_report("report.zip")

Result:

DNA Weaver Logo

Assembly with part reuse

In this other example we build a sequence comprising a resistance cassette (promoter, resistance, terminator) flanked by two homology arms. The sequence incorporates parts from the EMMA library. The script progressively adds new DNA sources (commercial DNA, the EMMA library, chromosomal DNA) so we can observe the changes in the proposed solution:

DNA Weaver Logo

Site-directed mutagenesis

A common cloning operation is the domestication of a genetic part for a given assembly standard. Many Golden Gate assembly standards forbid BsaI and BsmBI restriction sites in part sequences. If one wanted to use the wildtype E. coli gene yeeJ, one would need to first remove the BsaI and BsmBI sites at positions 453, 2284, 3979, 5455 and 5990 in the gene sequence. This can be done via site-directed mutagenesis, where regions of the chromosome are PCR-amplified at precise locations using carefully-designed primers. These primers have overhangs introducing the desired (codon-synonymous) mutations and (in this example) carry BsaI sites so that the PCR products can be digested and assembled into the site-less final sequence.

This process can be easily modeled in DNA Weaver by connecting a PCR station (and its oligo provider) to an assembly station:

DNA Weaver example

import dnaweaver as dw

oligos_company = dw.CommercialDnaOffer(
    "OligoCompany",
    sequence_constraints=[dw.SequenceLengthConstraint(max_length=200)],
    pricing=dw.PerBasepairPricing(0.1)
)
pcr_station = dw.PcrExtractionStation(
    name="PCR station",
    max_overhang_length=50,
    primers_supplier=oligos_company,
    blast_database='./ecoli_genome/ecoli',
    extra_cost=5
)
assembly_station = dw.DnaAssemblyStation(
    name="Golden Gate assembly",
    assembly_method = dw.GoldenGateAssemblyMethod(enzyme='BsaI'),
    supplier=pcr_station,
    coarse_grain=100,
    fine_grain=0,
    logger='bar'
)

# LOAD THE (SITE-FREE) DESIRED SEQUENCE
desired_sequence = str(dw.load_record("./desired_sequence.gb").seq)

# THIS LINE WILL PRE-BLAST THE SEQUENCE TO ACCELERATE COMPUTATIONS.
assembly_station.prepare_network_on_sequence(desired_sequence)

# FIND AN ASSEMBLY PLAN AND PRINT IT.
quote = assembly_station.get_quote(desired_sequence)
print (quote.assembly_step_summary())

Result:

Ordering plan:
0-451: From PCR station - price 11.70 - lead_time 0.0 - From gnl|BL_ORD_ID|0_h000_00
451-2283: From PCR station - price 12.60 - lead_time 0.0 - From gnl|BL_ORD_ID|0_h000_01
2283-3987: From PCR station - price 12.00 - lead_time 0.0 - From gnl|BL_ORD_ID|0_h000_02
3987-5451: From PCR station - price 11.80 - lead_time 0.0 - From gnl|BL_ORD_ID|0_h000_03
5451-5985: From PCR station - price 11.80 - lead_time 0.0 - From gnl|BL_ORD_ID|0_h000_04
5985-7077: From PCR station - price 11.90 - lead_time 0.0 - From gnl|BL_ORD_ID|0_h000_05
Price:71.80, total lead_time:0.0

The full assembly report (which you can generate in this example) has the list of all primers to order (including overhangs with sequence mutations and BsaI sites).

Installation

You can install DnaWeaver through PIP:

pip install dnaweaver

Alternatively, you can unzip the sources in a folder and type:

python setup.py install

Also install the ncbi-blast+ package to be able to use PCR stations. On Ubuntu:

sudo apt-get install ncbi-blast+

You may also need the following non-Python dependencies for report generation. On Ubuntu:

sudo apt-get install build-essential python3-dev python3-pip \
    python3-cffi libcairo2 libpango-1.0-0 libpangocairo-1.0-0 \
    libgdk-pixbuf2.0-0 libffi-dev shared-mime-info

License = MIT

DNA Weaver is an open-source software originally written at the Edinburgh Genome Foundry by Zulko and released on Github under the MIT licence (Copyright 2017 Edinburgh Genome Foundry).

Everyone is welcome to contribute!

More biology software

https://raw.githubusercontent.com/Edinburgh-Genome-Foundry/Edinburgh-Genome-Foundry.github.io/master/static/imgs/logos/egf-codon-horizontal.png

DNA Weaver is part of the EGF Codons synthetic biology software suite for DNA design, manufacturing and validation.

dnaweaver's People

Contributors

jlerman44 avatar veghp avatar zulko avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

dnaweaver's Issues

dealing with circular DNA

Hey-- this is an awesome library, and thanks for developing and sharing it.

I've been playing around with it to think about how I might be able to use it, and I've been testing it by creating a blast db with a bunch of preexisting vectors. I'm testing by trying to build a new one with a small insert, and it looks like the strategies are going to work. However, the origin of those vectors seems to be causing what I consider to be suboptimal solutions. All solutions are creating a junction at the origin with two PCR products rather than making one product going across the origin.

Is this a known issue? I've also tried making a Golden Gate-compatible version of that vector and loading it into a GoldenGatePartsLibrary, but I still just get the suboptimal PCR product solutions. Do you think I might be doing something wrong?

verify_constraints performance

I have noticed that the verify_constraints is the most called function. It takes about 50% of execution time, which slows down the program and development cycle for real use cases (10kb sequences).

What is the proper way to implement the caching mechanism?

Example of using PartsLibrary with Gibson assembly method

I want to make a PartsLibrary that consists of basic stock PCR products that will be assembled with a DnaAssemblyStation based on the GibsonAssemblyMethod and any missing parts should come from a CommercialDnaOffer.

I have tried to make my own PartsLibrary class which inherets from the PartsLibrary base class, but am not able to make it work.

Do you have any examples availible of using a PartsLibrary that does not consists of GoldenGate parts, which is all that i can find in the documentation?

Does the PartsLibrary work for circular sequences?

Context

I have a setup of:

  • Golden gate parts library supplier with expression vectors.
  • Gene synthesis supplier.
  • Golden Gate assembly station.

I have uploaded the backbone sequence to the GoldenGatePartsLibrary, expecting DnaWeawer to find it.

I am giving the library a final sequence of expression vector with inserted gene as input.

Expected behavior:

  • Gene being synthesized
  • Backbone being taken from the parts library

Actual behaviour:

  • Everything is synthesised and assembled with GoldenGate

Question:

Q: Does the PartsLibrary work for circular sequences?

Q: Any specific reason why PcrExtractionStation not using the PartsLibrary?

Hey, I am using the PcrExtractionStation atm, and have noticed that it uses the blast database, I wonder, are there any architectural reasons why it is not using the PartsLibrary instead?

Such a decision leads to the fact that the PCR matrix does not appear in the assembly_parts field of the report.

Just feedback, maybe someone will be against it, but the ideal behavior from my POV would be to:

  • Upload seq records with annotations in PartLibrary.
  • Specify the same parts library for PCRExtractionStation as well as GoldenGate DNAAssemblyStation.
  • When PCRExtraction is used, the assembly plan contains a matrix seq record and synthesized primers.

Basically, internally in the PartsLibrary blast database is created and used for a search, and if the record is found, the seq record is used instead as an output. In this case, the annotation will be preserved along the way. Also in this case the cost function will be split - PCR extraction cost will include the cost of actual extraction, and PartLibrary might include the cost of delivery if some external provider is used.


On a side note: I am forced to use the blast database because when sequences are uploaded directly in the PCRExraction station it produces invalid PCR extraction operations. I might upload such a case soon.

SBOL => Automation MoClo Assembly tool => Optimal assembly report

Context
I am trying to create/use an automated design tool that will take the SBOL file of the desired construct and create an optimal way of assembling it using the MoClo standard.

After playing some time with DNAWeawer I believe I am not able to achieve that with this library, though I am still not 100% sure.

Question
Q: Have you seen libraries like that?

Bug: Max length initialisation

I believe it should be sequence_length + 1 otherwise GoldenGatePartLibrary might be ignored if the whole sequence is from the library.

Because here you make a comparison of this form:

ends_max = min(L + 1, start + self.max_segment_length)

What to do when Gibson assembly Station is refused : Apologies to put a routine use question as an issue

Hi All I am a newbie to DNAWeaver and want to use it to optimize my multipart Gibson assembly for ~8Kb plasmids

My code is given below and the error I get is

From Gibson Assembly Station - refused: No solution found! One forced cut was also invalid at indices {8851} - No solution found! One forced cut was also invalid at indices {8851}

I have tried changing the Gibson assembly station parameters and don't get anything other than the message above. How do I troubleshoot this ? Apologies if I am not understanding some basic fact about DNAweaver. I can run the examples perfectly but cant get this or other sequences to give me a result.

Thanks

import dnaweaver as dw

twist_dnafragments_offer = dw.CommercialDnaOffer(
    name="TwistDNAFragments",
    sequence_constraints=[
        dw.SequenceLengthConstraint(min_length=300,max_length=1800)
    ],
    pricing=dw.PerBasepairPricing(0.07),
    lead_time=40
)

twist_dnafclonalgenes_offer = dw.CommercialDnaOffer(
    name="TwistDNAClonalGenes",
    sequence_constraints=[
        dw.SequenceLengthConstraint(min_length=300,max_length=5000)
    ],
    pricing=dw.PerBasepairPricing(0.09),
    lead_time=40
)

assembly_station = dw.DnaAssemblyStation(
    name="Gibson Assembly Station",
    assembly_method=dw.GibsonAssemblyMethod(
        overhang_selector=dw.TmSegmentSelector(min_tm=55, max_tm=65),
        min_segment_length=1000,
        max_segment_length=4000,
        duration=5
    ),
    supplier=[twist_dnafragments_offer,twist_dnafclonalgenes_offer],
    coarse_grain=20
)
# sequence = dw.random_dna_sequence(8851, seed=123)
sequence = """CAGTACTCGTGCATAACAATCGCGTAATCGGCGAAGGTTGGAATAGGCCGATCGGACGCCACGACCCCAC
TGCACATGCGGAAATCATGGCCCTTCGACAGGGAGGGCTTGTGATGCAGAATTATCGACTTATCGATGCG
ACGCTGTACGTCACGCTTGAACCTTGCGTAATGTGCGCGGGAGCTATGATTCACTCCCGCATTGGACGAG
TTGTATTCGGTGCCCGCGACGCCAAGACGGGTGCCGCAGGTTCACTGATGGACGTGCTGCATCACCCAGG
CATGAACCACCGGGTAGAAATCACAGAAGGCATATTGGCGGACGAATGTGCGGCGCTGTTGTCCGACTTT
TTTCGCATGCGGAGGCAGGAGATCAAGGCCCAGAAAAAAGCACAATCCTCTACTGACTCTGGTGGTTCTT
CTGGTGGTTCTAGCGGCAGCGAGACTCCCGGGACCTCAGAGTCCGCCACACCCGAAAGTTCTGGTGGTTC
TTCTGGTGGTTCTTCCGAAGTCGAGTTTTCCCATGAGTACTGGATGAGACACGCATTGACTCTCGCAAAG
AGGGCTCGAGATGAACGCGAGGTGCCCGTGGGGGCAGTACTCGTGCTCAACAATCGCGTAATCGGCGAAG
GTTGGAATAGGGCAATCGGACTCCACGACCCCACTGCACATGCGGAAATCATGGCCCTTCGACAGGGAGG
GCTTGTGATGCAGAATTATCGACTTATCGATGCGACGCTGTACGTCACGTTTGAACCTTGCGTAATGTGC
GCGGGAGCTATGATTCACTCCCGCATTGGACGAGTTGTATTCGGTGTTCGCAACGCCAAGACGGGTGCCG
CAGGTTCACTGATGGACGTGCTGCATTACCCAGGCATGAACCACCGGGTAGAAATCACAGAAGGCATATT
GGCGGACGAATGTGCGGCGCTGTTGTGTTACTTTTTTCGCATGCCCAGGCAGGTCTTTAACGCCCAGAAA
AAAGCACAATCCTCTACTGACTCTGGTGGTTCTTCTGGTGGTTCTAGCGGCAGCGAGACTCCCGGGACCT
CAGAGTCCGCCACACCCGAAAGTTCTGGTGGTTCTTCTGGTGGTTCTGATAAAAAGTATTCTATTGGTTT
AGCCATCGGCACTAATTCCGTTGGATGGGCTGTCATAACCGATGAATACAAAGTACCTTCAAAGAAATTT
AAGGTGTTGGGGAACACAGACCGTCATTCGATTAAAAAGAATCTTATCGGTGCCCTCCTATTCGATAGTG
GCGAAACGGCAGAGGCGACTCGCCTGAAACGAACCGCTCGGAGAAGGTATACACGTCGCAAGAACCGAAT
ATGTTACTTACAAGAAATTTTTAGCAATGAGATGGCCAAAGTTGACGATTCTTTCTTTCACCGTTTGGAA
GAGTCCTTCCTTGTCGAAGAGGACAAGAAACATGAACGGCACCCCATCTTTGGAAACATAGTAGATGAGG
TGGCATATCATGAAAAGTACCCAACGATTTATCACCTCAGAAAAAAGCTAGTTGACTCAACTGATAAAGC
GGACCTGAGGTTAATCTACTTGGCTCTTGCCCATATGATAAAGTTCCGTGGGCACTTTCTCATTGAGGGT
GATCTAAATCCGGACAACTCGGATGTCGACAAACTGTTCATCCAGTTAGTACAAACCTATAATCAGTTGT
TTGAAGAGAACCCTATAAATGCAAGTGGCGTGGATGCGAAGGCTATTCTTAGCGCCCGCCTCTCTAAATC
CCGACGGCTAGAAAACCTGATCGCACAATTACCCGGAGAGAAGAAAAATGGGTTGTTCGGTAACCTTATA
GCGCTCTCACTAGGCCTGACACCAAATTTTAAGTCGAACTTCGACTTAGCTGAAGATGCCAAATTGCAGC
TTAGTAAGGACACGTACGATGACGATCTCGACAATCTACTGGCACAAATTGGAGATCAGTATGCGGACTT
ATTTTTGGCTGCCAAAAACCTTAGCGATGCAATCCTCCTATCTGACATACTGAGAGTTAATACTGAGATT
ACCAAGGCGCCGTTATCCGCTTCAATGATCAAAAGGTACGATGAACATCACCAAGACTTGACACTTCTCA
AGGCCCTAGTCCGTCAGCAACTGCCTGAGAAATATAAGGAAATATTCTTTGATCAGTCGAAAAACGGGTA
CGCAGGTTATATTGACGGCGGAGCGAGTCAAGAGGAATTCTACAAGTTTATCAAACCCATATTAGAGAAG
ATGGATGGGACGGAAGAGTTGCTTGTAAAACTCAATCGCGAAGATCTACTGCGAAAGCAGCGGACTTTCG
ACAACGGTAGCATTCCACATCAAATCCACTTAGGCGAATTGCATGCTATACTTAGAAGGCAGGAGGATTT
TTATCCGTTCCTCAAAGACAATCGTGAAAAGATTGAGAAAATCCTAACCTTTCGCATACCTTACTATGTG
GGACCCCTGGCCCGAGGGAACTCTCGGTTCGCATGGATGACAAGAAAGTCCGAAGAAACGATTACTCCAT
GGAATTTTGAGGAAGTTGTCGATAAAGGTGCGTCAGCTCAATCGTTCATCGAGAGGATGACCAACTTTGA
CAAGAATTTACCGAACGAAAAAGTATTGCCTAAGCACAGTTTACTTTACGAGTATTTCACAGTGTACAAT
GAACTCACGAAAGTTAAGTATGTCACTGAGGGCATGCGTAAACCCGCCTTTCTAAGCGGAGAACAGAAGA
AAGCAATAGTAGATCTGTTATTCAAGACCAACCGCAAAGTGACAGTTAAGCAATTGAAAGAGGACTACTT
TAAGAAAATTGAATGCTTCGATTCTGTCGAGATCTCCGGGGTAGAAGATCGATTTAATGCGTCACTTGGT
ACGTATCATGACCTCCTAAAGATAATTAAAGATAAGGACTTCCTGGATAACGAAGAGAATGAAGATATCT
TAGAAGATATAGTGTTGACTCTTACCCTCTTTGAAGATCGGGAAATGATTGAGGAAAGACTAAAAACATA
CGCTCACCTGTTCGACGATAAGGTTATGAAACAGTTAAAGAGGCGTCGCTATACGGGCTGGGGACGATTG
TCGCGGAAACTTATCAACGGGATAAGAGACAAGCAAAGTGGTAAAACTATTCTCGATTTTCTAAAGAGCG
ACGGCTTCGCCAATAGGAACTTTATGCAGCTGATCCATGATGACTCTTTAACCTTCAAAGAGGATATACA
AAAGGCACAGGTTTCCGGACAAGGGGACTCATTGCACGAACATATTGCGAATCTTGCTGGTTCGCCAGCC
ATCAAAAAGGGCATACTCCAGACAGTCAAAGTAGTGGATGAGCTAGTTAAGGTCATGGGACGTCACAAAC
CGGAAAACATTGTAATCGAGATGGCACGCGAAAATCAAACGACTCAGAAGGGGCAAAAAAACAGTCGAGA
GCGGATGAAGAGAATAGAAGAGGGTATTAAAGAACTGGGCAGCCAGATCTTAAAGGAGCATCCTGTGGAA
AATACCCAATTGCAGAACGAGAAACTTTACCTCTATTACCTACAAAATGGAAGGGACATGTATGTTGATC
AGGAACTGGACATAAACCGTTTATCTGATTACGACGTCGATCACATTGTACCCCAATCCTTTTTGAAGGA
CGATTCAATCGACAATAAAGTGCTTACACGCTCGGATAAGAACCGAGGGAAAAGTGACAATGTTCCAAGC
GAGGAAGTCGTAAAGAAAATGAAGAACTATTGGCGGCAGCTCCTAAATGCGAAACTGATAACGCAAAGAA
AGTTCGATAACTTAACTAAAGCTGAGAGGGGTGGCTTGTCTGAACTTGACAAGGCCGGATTTATTAAACG
TCAGCTCGTGGAAACCCGCCAAATCACAAAGCATGTTGCACAGATACTAGATTCCCGAATGAATACGAAA
TACGACGAGAACGATAAGCTGATTCGGGAAGTCAAAGTAATCACTTTAAAGTCAAAATTGGTGTCGGACT
TCAGAAAGGATTTTCAATTCTATAAAGTTAGGGAGATAAATAACTACCACCATGCGCACGACGCTTATCT
TAATGCCGTCGTAGGGACCGCACTCATTAAGAAATACCCGAAGCTAGAAAGTGAGTTTGTGTATGGTGAT
TACAAAGTTTATGACGTCCGTAAGATGATCGCGAAAAGCGAACAGGAGATAGGCAAGGCTACAGCCAAAT
ACTTCTTTTATTCTAACATTATGAATTTCTTTAAGACGGAAATCACTCTGGCAAACGGAGAGATACGCAA
ACGACCTTTAATTGAAACCAATGGGGAGACAGGTGAAATCGTATGGGATAAGGGCCGGGACTTCGCGACG
GTGAGAAAAGTTTTGTCCATGCCCCAAGTCAACATAGTAAAGAAAACTGAGGTGCAGACCGGAGGGTTTT
CAAAGGAATCGATTCTTCCAAAAAGGAATAGTGATAAGCTCATCGCTCGTAAAAAGGACTGGGACCCGAA
AAAGTACGGTGGCTTCGATAGCCCTACAGTTGCCTATTCTGTCCTAGTAGTGGCAAAAGTTGAGAAGGGA
AAATCCAAGAAACTGAAGTCAGTCAAAGAATTATTGGGGATAACGATTATGGAGCGCTCGTCTTTTGAAA
AGAACCCCATCGACTTCCTTGAGGCGAAAGGTTACAAGGAAGTAAAAAAGGATCTCATAATTAAACTACC
AAAGTATAGTCTGTTTGAGTTAGAAAATGGCCGAAAACGGATGTTGGCTAGCGCCGGAGAGCTTCAAAAG
GGGAACGAACTCGCACTACCGTCTAAATACGTGAATTTCCTGTATTTAGCGTCCCATTACGAGAAGTTGA
AAGGTTCACCTGAAGATAACGAACAGAAGCAACTTTTTGTTGAGCAGCACAAACATTATCTCGACGAAAT
CATAGAGCAAATTTCGGAATTCAGTAAGAGAGTCATCCTAGCTGATGCCAATCTGGACAAAGTATTAAGC
GCATACAACAAGCACAGGGATAAACCCATACGTGAGCAGGCGGAAAATATTATCCATTTGTTTACTCTTA
CCAACCTCGGCGCTCCAGCCGCATTCAAGTATTTTGACACAACGATAGATCGCAAACGATACACTTCTAC
CAAGGAGGTGCTAGACGCGACACTGATTCACCAATCCATCACGGGATTATATGAAACTCGGATAGATTTG
TCACAGCTTGGGGGTGACTCTGGTGGTTCTCCCAAGAAGAAGAGGAAAGTCTAACCGGTCATCATCACCA
TCACCATTGAGTTTAAACCCGCTGATCAGCCTCGACTGTGCCTTCTAGTTGCCAGCCATCTGTTGTTTGC
CCCTCCCCCGTGCCTTCCTTGACCCTGGAAGGTGCCACTCCCACTGTCCTTTCCTAATAAAATGAGGAAA
TTGCATCGCATTGTCTGAGTAGGTGTCATTCTATTCTGGGGGGTGGGGTGGGGCAGGACAGCAAGGGGGA
GGATTGGGAAGACAATAGCAGGCATGCTGGGGATGCGGTGGGCTCTATGGCTTCTGAGGCGGAAAGAACC
AGCTGGGGCTCGATACCGTCGACCTCTAGCTAGAGCTTGGCGTAATCATGGTCATAGCTGTTTCCTGTGT
GAAATTGTTATCCGCTCACAATTCCACACAACATACGAGCCGGAAGCATAAAGTGTAAAGCCTAGGGTGC
CTAATGAGTGAGCTAACTCACATTAATTGCGTTGCGCTCACTGCCCGCTTTCCAGTCGGGAAACCTGTCG
TGCCAGCTGCATTAATGAATCGGCCAACGCGCGGGGAGAGGCGGTTTGCGTATTGGGCGCTCTTCCGCTT
CCTCGCTCACTGACTCGCTGCGCTCGGTCGTTCGGCTGCGGCGAGCGGTATCAGCTCACTCAAAGGCGGT
AATACGGTTATCCACAGAATCAGGGGATAACGCAGGAAAGAACATGTGAGCAAAAGGCCAGCAAAAGGCC
AGGAACCGTAAAAAGGCCGCGTTGCTGGCGTTTTTCCATAGGCTCCGCCCCCCTGACGAGCATCACAAAA
ATCGACGCTCAAGTCAGAGGTGGCGAAACCCGACAGGACTATAAAGATACCAGGCGTTTCCCCCTGGAAG
CTCCCTCGTGCGCTCTCCTGTTCCGACCCTGCCGCTTACCGGATACCTGTCCGCCTTTCTCCCTTCGGGA
AGCGTGGCGCTTTCTCATAGCTCACGCTGTAGGTATCTCAGTTCGGTGTAGGTCGTTCGCTCCAAGCTGG
GCTGTGTGCACGAACCCCCCGTTCAGCCCGACCGCTGCGCCTTATCCGGTAACTATCGTCTTGAGTCCAA
CCCGGTAAGACACGACTTATCGCCACTGGCAGCAGCCACTGGTAACAGGATTAGCAGAGCGAGGTATGTA
GGCGGTGCTACAGAGTTCTTGAAGTGGTGGCCTAACTACGGCTACACTAGAAGAACAGTATTTGGTATCT
GCGCTCTGCTGAAGCCAGTTACCTTCGGAAAAAGAGTTGGTAGCTCTTGATCCGGCAAACAAACCACCGC
TGGTAGCGGTGGTTTTTTTGTTTGCAAGCAGCAGATTACGCGCAGAAAAAAAGGATCTCAAGAAGATCCT
TTGATCTTTTCTACGGGGTCTGACGCTCAGTGGAACGAAAACTCACGTTAAGGGATTTTGGTCATGAGAT
TATCAAAAAGGATCTTCACCTAGATCCTTTTAAATTAAAAATGAAGTTTTAAATCAATCTAAAGTATATA
TGAGTAAACTTGGTCTGACAGTTACCAATGCTTAATCAGTGAGGCACCTATCTCAGCGATCTGTCTATTT
CGTTCATCCATAGTTGCCTGACTCCCCGTCGTGTAGATAACTACGATACGGGAGGGCTTACCATCTGGCC
CCAGTGCTGCAATGATACCGCGAGACCCACGCTCACCGGCTCCAGATTTATCAGCAATAAACCAGCCAGC
CGGAAGGGCCGAGCGCAGAAGTGGTCCTGCAACTTTATCCGCCTCCATCCAGTCTATTAATTGTTGCCGG
GAAGCTAGAGTAAGTAGTTCGCCAGTTAATAGTTTGCGCAACGTTGTTGCCATTGCTACAGGCATCGTGG
TGTCACGCTCGTCGTTTGGTATGGCTTCATTCAGCTCCGGTTCCCAACGATCAAGGCGAGTTACATGATC
CCCCATGTTGTGCAAAAAAGCGGTTAGCTCCTTCGGTCCTCCGATCGTTGTCAGAAGTAAGTTGGCCGCA
GTGTTATCACTCATGGTTATGGCAGCACTGCATAATTCTCTTACTGTCATGCCATCCGTAAGATGCTTTT
CTGTGACTGGTGAGTACTCAACCAAGTCATTCTGAGAATAGTGTATGCGGCGACCGAGTTGCTCTTGCCC
GGCGTCAATACGGGATAATACCGCGCCACATAGCAGAACTTTAAAAGTGCTCATCATTGGAAAACGTTCT
TCGGGGCGAAAACTCTCAAGGATCTTACCGCTGTTGAGATCCAGTTCGATGTAACCCACTCGTGCACCCA
ACTGATCTTCAGCATCTTTTACTTTCACCAGCGTTTCTGGGTGAGCAAAAACAGGAAGGCAAAATGCCGC
AAAAAAGGGAATAAGGGCGACACGGAAATGTTGAATACTCATACTCTTCCTTTTTCAATATTATTGAAGC
ATTTATCAGGGTTATTGTCTCATGAGCGGATACATATTTGAATGTATTTAGAAAAATAAACAAATAGGGG
TTCCGCGCACATTTCCCCGAAAAGTGCCACCTGACGTCGACGGATCGGGAGATCGATCTCCCGATCCCCT
AGGGTCGACTCTCAGTACAATCTGCTCTGATGCCGCATAGTTAAGCCAGTATCTGCTCCCTGCTTGTGTG
TTGGAGGTCGCTGAGTAGTGCGCGAGCAAAATTTAAGCTACAACAAGGCAAGGCTTGACCGACAATTGCA
TGAAGAATCTGCTTAGGGTTAGGCGTTTTGCGCTGCTTCGCGATGTACGGGCCAGATATACGCGTTGACA
TTGATTATTGACTAGTTATTAATAGTAATCAATTACGGGGTCATTAGTTCATAGCCCATATATGGAGTTC
CGCGTTACATAACTTACGGTAAATGGCCCGCCTGGCTGACCGCCCAACGACCCCCGCCCATTGACGTCAA
TAATGACGTATGTTCCCATAGTAACGCCAATAGGGACTTTCCATTGACGTCAATGGGTGGAGTATTTACG
GTAAACTGCCCACTTGGCAGTACATCAAGTGTATCATATGCCAAGTACGCCCCCTATTGACGTCAATGAC
GGTAAATGGCCCGCCTGGCATTATGCCCAGTACATGACCTTATGGGACTTTCCTACTTGGCAGTACATCT
ACGTATTAGTCATCGCTATTACCATGGTGATGCGGTTTTGGCAGTACATCAATGGGCGTGGATAGCGGTT
TGACTCACGGGGATTTCCAAGTCTCCACCCCATTGACGTCAATGGGAGTTTGTTTTGGCACCAAAATCAA
CGGGACTTTCCAAAATGTCGTAACAACTCCGCCCCATTGACGCAAATGGGCGGTAGGCGTGTACGGTGGG
AGGTCTATATAAGCAGAGCTGGTTTAGTGAACCGTCAGATCCGCTAGAGATCCGCGGCCGCTAATACGAC
TCACTATAGGGAGAGCCGCCACCATGTCCGAAGTCGAGTTTTCCCATGAGTACTGGATGAGACACGCATT
GACTCTCGCAAAGAGGGCTTGGGATGAACGCGAGGTGCCCGTGGGGG"""
quote = assembly_station.get_quote(sequence, with_assembly_plan=True)

Contact Zulko

Hey @Zulko, what is the best way to contact u if I have questions regarding the DnaWeaver functionality?

File Not Found Error during assembly_report execution

Hello! I discovered DNA Weaver quite recently and started diving into the documentation to learn how to use it.

The documentation and provided examples are quite useful, however I've found myself trapped into a situation that is not contemplated within the frequently asked questions or other support topics.

I think it could be useful to include this, and other common issues within a "Common Issues" section or similar.

The problem I am finding is the following:

Whenever I try to execute an script from the "tests" or "examples" folder, the script stops indicating the same error:

` File "C:\Users\fmjor\Desktop\DnaWeaver-master\examples\scenarios\example_with_adapters\example_with_adapters.py", line 97, in
assembly_report = quote.to_assembly_plan_report()

File "C:\ProgramData\Anaconda3\lib\site-packages\dnaweaver\DnaQuote\ExportsMixin.py", line 163, in to_assembly_plan_report
self.compute_fragments_final_locations()

File "C:\ProgramData\Anaconda3\lib\site-packages\dnaweaver\DnaQuote\PostProcessingMixin.py", line 64, in compute_fragments_final_locations
results = blast_sequence(

File "C:\ProgramData\Anaconda3\lib\site-packages\dnaweaver\biotools\sequence_homologies.py", line 82, in blast_sequence
p = subprocess.Popen(

File "C:\ProgramData\Anaconda3\lib\site-packages\spyder_kernels\customize\spydercustomize.py", line 105, in init
super(SubprocessPopen, self).init(*args, **kwargs)

File "C:\ProgramData\Anaconda3\lib\subprocess.py", line 854, in init
self._execute_child(args, executable, preexec_fn, close_fds,

File "C:\ProgramData\Anaconda3\lib\subprocess.py", line 1307, in _execute_child
hp, ht, pid, tid = _winapi.CreateProcess(executable, args,

FileNotFoundError: [WinError 2] The system can not found the specified file`

I guess this message is indicating that the program can not find the required files for BLAST and other operations. But I wonder if it could be possible to fix it.

Thanks i advance!

Bug: When quote.assembly_plan is None

When quote.assembly plan is None and the source quote returns an error quote, the assembly plan of the second quote is None, and an exception happens.

quote.assembly_plan.items(), key=lambda item: item[0]

[WARNING][2021-05-06 21:51:29,214][__init__.py:261 - <module>()] gel simulation will NOT be available. Missing modules: mpldatacursor, pint
Traceback (most recent call last):
  File "/Users/Andrey/PycharmProjects/cloning-facility-core/src/order_parser/backend/decomposition/expression_vector.py", line 34, in decompose_expression_vector
    golden_gate_parts = decompose_insert(insert=insert,
  File "/Users/Andrey/PycharmProjects/cloning-facility-core/src/order_parser/backend/decomposition/synthesis.py", line 92, in decompose_insert
    assembly_plan_report = quote.to_assembly_plan_report()
  File "/Users/Andrey/PycharmProjects/cloning-facility-core/venv/lib/python3.9/site-packages/dnaweaver/DnaQuote/ExportsMixin.py", line 163, in to_assembly_plan_report
    self.compute_fragments_final_locations()
  File "/Users/Andrey/PycharmProjects/cloning-facility-core/venv/lib/python3.9/site-packages/dnaweaver/DnaQuote/PostProcessingMixin.py", line 57, in compute_fragments_final_locations
    self.compute_full_assembly_plan()
  File "/Users/Andrey/PycharmProjects/cloning-facility-core/venv/lib/python3.9/site-packages/dnaweaver/DnaQuote/PostProcessingMixin.py", line 43, in compute_full_assembly_plan
    rec(self)
  File "/Users/Andrey/PycharmProjects/cloning-facility-core/venv/lib/python3.9/site-packages/dnaweaver/DnaQuote/PostProcessingMixin.py", line 29, in rec
    segments = {
  File "/Users/Andrey/PycharmProjects/cloning-facility-core/venv/lib/python3.9/site-packages/dnaweaver/DnaQuote/PostProcessingMixin.py", line 30, in <dictcomp>
    segment: rec(subquote)
  File "/Users/Andrey/PycharmProjects/cloning-facility-core/venv/lib/python3.9/site-packages/dnaweaver/DnaQuote/PostProcessingMixin.py", line 32, in rec
    quote.assembly_plan.items(), key=lambda item: item[0]
AttributeError: 'NoneType' object has no attribute 'items

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.