Skip to content

v0.13.4

Compare
Choose a tag to compare
@github-actions github-actions released this 24 Dec 17:59
7ce4379

Circular strands

Circular strands are now supported. (See #5.)

image

They are created in two ways in the web interface: by ligating a strand whose 5' and 3' ends are adjacent, and by adding a crossover from a strand's 5' end to its 3' end.

Circular strands are convenient for the intermediate steps of a design, allowing one to add crossovers and ligate nicks without worrying whether it will create a circular strand.

However, in general, it is not recommended that a final design have circular strands. In particular, there are aspects of scadnano, such as naming conventions for strands and conventions for assigning DNA sequences, that assume the strand has a 5' and 3' end. Under the hood, the domains of a circular strand are still listed in some order, with the same constraint as before that a strand cannot begin or end with a loopout; see #34. In particular, this means a circular strand must have at least one crossover; it cannot be all loopouts linking the domains.

It is recommended, particularly before assigning DNA sequences, to linearize all circular strands (i.e., add a nick to break some domain into two, or remove a crossover somewhere). This includes even strands such as those representing M13 that are naturally circular. Otherwise the effect of assigning a DNA sequence is undefined. Operations that circularize and linearize strands with DNA sequences already assigned are similarly undefined and may change the DNA sequence in unexpected ways.

Autostaple and Autobreak

This is an EXPERIMENTAL feature that that has been requested by several users; see #80. They are both available under the Edit menu. Briefly, once you draw the scaffold, you can click Autostaple to create a small number of very long, circular staple "precursor" strands that have all the staple crossovers that will be in the design, but none of the nicks. You can then click Autobreak to add nicks to these precursors to turn them into reasonable-length staples.

Both of the algorithms work by simply exporting the design to cadnano v2, running Autostaple/Autobreak in cadnano, then importing the design back. This implies a few things to be wary of:

  1. scadnano designs must be exportable to cadnano v2. This means no loopouts or other features not supported by cadnano: scaffolds forward/reverse depends on the parity of the helix, etc.; see https://scadnano-python-package.readthedocs.io/en/latest/#interoperability-cadnano-v2

  2. cadnano seems to run Autostaple fairly stably, but Autobreak crashes on many designs. Since scadnano is simply calling the cadnano code for both, scadnano Autobreak will not work on these designs either. We do not understand the Autobreak algorithm cadnano runs well enough to say what properties of a design cause Autobreak to crash.

  3. cadnano v2's Autobreak ignores the "target length" parameter in the GUI interface and simply uses the value 35, whereas scadnano passes the user-specified target length to the underlying algorithm. So behavior will be slightly different between them. To reproduce the exact behavior of cadnano v2, use the value 35 for this parameter.

In the future, we may remove support for Autostaple/Autobreak, or replace them with a different algorithm than the one cadnano uses.

(Dave Doty speaking here) My personal opinion of these algorithms is this: They are good for getting started very quickly to get a design, such as in a lab instructional setting. However, my personal experience with designing DNA origami for real research projects is that the "draw the first draft of the staples" step takes a very small amount of time compared to tweaking the design afterward. This isn't to say there is no place for algorithms to help with deciding where to place crossovers and nicks. There are many research discoveries in the past decade, including ongoing excellent work from the Douglas lab, who maintain cadnano, e.g., poster p200 here: https://www2.cs.duke.edu/FNANO18/FNANO18schedule.pdf, on good algorithms to choose crossover and nick positions.

However, at the current time, we are far from a point-and-click algorithm for creating arbitrary reliable DNA origami from such a high-level specification without further tweaking. With lattice-based designs, much of this reasoning can be automated. Nevertheless, if on a real research project you feel the need to design a new DNA origami, rather than simply copy one of the hundreds of proven designs from the literature, then it means you need something to be different about it, and that may include needing crossovers and nicks to be in different positions than what is programmed by default into an algorithm. In other words, I believe most users fall into one of two camps, neither of which needs algorithms to design the DNA origami:

  1. Novices who are happy to use a proven design already existing in the literature.
  2. Experts who want to control crossovers and nicks precisely based on constraints inexpressible in current algorithms.

One of the reasons copy/paste was one of the first features implemented in scadnano is that, although it takes longer than just pressing two buttons, for many designs, the staple patterns are repetitive enough that it doesn't take that long (a few minutes) to just draw a few types of staples that can be copy/pasted to fill in the whole design. Although this takes longer, it gives more control over what is happening. [UPDATE: This is particularly fast when using these two features: Autopaste and Join selected ends by crossovers.]

That said, there is a place for heuristic calculations to save some of the work of making such decisions. We will monitor the state of current research on robust automated placement of crossovers/nicks, and perhaps in the future replace the current algorithms with something else.

Commits

  • [8a80e26]: explained why helices look different in grid images than in side view (David Doty) #555
  • [7cfda72]: added note to CONTRIBUTING about global variables being disallowed in view rendering code but allowed (and encouraged for performance) in event handling code (David Doty) #555
  • [dfcd505]: Update CONTRIBUTING.md (David Doty) #555
  • [94dc3d7]: Update CONTRIBUTING.md (David Doty) #555
  • [ee1c394]: Fixes #548; color picker displays correct initial color (Benjamin Lee) #549
  • [3a79899]: closes #5; add support for circular strands (David Doty) #550
  • [a74f94a]: bumped version (David Doty) #555
  • [2867c57]: documented circular strands in README (David Doty) #555
  • [5de2942]: minor cleanup (David Doty) #555
  • [fafd9cc]: changed name of Strand method to output idt name (David Doty) #555
  • [f31d2d9]: in select or rope select mode, changed menu word "Select:" to "Selectable:" for different selection modes (David Doty) #555
  • [82fe906]: Fixes #80; autostaple and autobreak (Benjamin Lee) #554