Releases: UC-Davis-molecular-computing/scadnano
v0.16.2
Fixes bugs in oxDNA export that would cause exported files not to be simulatable on oxDNA (due to non-cubic bounding box) and that, even with a cubic bounding box, would cause stable structures to melt.
Also fixes some other bugs described below related to #608 and #474.
Commits
- [3b37848]: Added memoized getters from address, app_state, domain, select_mode, and select_mode_state files (Cesar Alonso Guzman Avina) #627
- [e9443d2]: replace all references of domains function to new getter (sarahayu) #627
- [fa8b427]: Finished making memoized getters in strand.dart (Cesar Alonso Guzman Avina) #627
- [7249bbc]: rename domain name complement reducer and change Strand domains method to memoized getter (sarahayu) #627
- [64656be]: Update oxdna_export.dart (Cesar Alonso Guzman Avina) #627
- [b590c50]: convert functions to memoized getters for grid and helix (sarahayu) #627
- [de9381d]: removed word "export" from options under Export menu (David Doty) #630
- [e668743]: closes #608: Fix crash bug on assigning DNA sequence (Cesar Alonso Guzman Avina) #623
- [452b79c]: completed tutorial's incomplete sentence indiciating how to use autopaste and join selected ends by crossovers (David Doty) #630
- [84b9f9f]: closes #474: prevent deletions and insertions from duplication when moving/copying strands (rishabhmudradi) #625
- [01113f2]: closes #612 make memoized getters for zero argument methods in State BuiltValue classes (Cesar Alonso Guzman Avina) #627
- [46c729f]: Merge branch 'dev' into #612-make-memoized-getters-for-zero-argument-methods-in-State-BuiltValue-classes (Cesar Alonso Guzman Avina) #627
- [bc29028]: adjusted domains_selectable to getter (Cesar Alonso Guzman Avina) #627
- [45035c5]: fixed non-unique ID error with DialogRadio components (David Doty) #630
- [3d038d6]: Delete xlsx.full.min.js (David Doty) #630
- [6db5569]: corrected bad forward vector in oxDNA export that caused DNA origami to melt upon relaxation in oxDNA (David Doty) #630
- [74ef8bf]: updated oxDNA export to use cubic bounding box (taking all three sides to be max of computed bounding box) (David Doty) #630
- [85bac1a]: bumped version (David Doty) #630
v0.16.1
New features:
export to oxDNA
See #589. Exporting to the tool oxDNA and the web app oxView is now supported via the Export menu:
oxView can be used to visualize the intended 3D structure of the design, with base positions inferred based on Helix (x,y,z) position and roll angle, and HelixGroup (pitch, yaw, roll) orientation angles. oxDNA can be used to simulate physical stress and motion to predict an expected 3D structure.
Other export options, such as exporting to cadnano, have been moved from the File menu to the Export menu. (Importing from cadnano is still under the File menu.)
This is also supported in scripts via the scadnano Python package; see https://github.com/UC-Davis-molecular-computing/scadnano-python-package/releases/tag/v0.16.1
add "assign domain complement from bound strands"
See #592. You can right click on a strand/domain (or group of selected strands/domains) and assign their domain names to the "complement" name (adding/removing a *
at the end of the name) of whatever domain(s) they are bound to. For example, if a strand is selected with domains d1
and d2
, which are bound to domains with names ABC
and XYZ*
, then afterward, domain d1
will have name ABC*
and domain d2
will have name XYZ
.
Domains are considered "bound" if they are on the same helix, in opposite directions, with the same start
and end
offsets.
For example, select a few strands bound to strands with domain names and right-click to select "assign domain name complement from bound strands":
Then new domain names are assigned:
zoom speed controllable
See #587. The Zoom speed is now controllable from the View menu. This helps with mice/trackpads that have different sensitivities.
add option to export DNA sequences for only selected strands
See #537. You can select a subset of strands and export DNA sequences for only those selected.
Commits
- [518e1f3]: CSS styles now show open hand cursor on SVG background, unless Shift or Ctrl is pressed to enable select box dragging, in which case cursor is crosshair; for some reason introduced a bug in Firefox where it crashes if the selection box is dragged too quickly (David Doty) #620
- [6894c73]: Merge branch 'dev' into show-hand-grabbing-cursor-when-pointer-is-able-to-grab-for-click-and-drag-panning (David Doty) #620
- [6146cd0]: closes #603; add link to M13 variants in assign DNA sequence dialog; also gives displayed names of sequences more intuitive values (David Doty) #605
- [30f30c2]: started implementing export of only selected strands; committing to we can merge changes from recent PR to dev (David Doty) #606
- [98121fc]: Merge branch 'dev' into issue-537-add-option-to-export-DNA-sequences-for-only-selected-strands (David Doty) #606
- [7ed5c4e]: fixes #537; add option to export DNA sequences for only selected strands (David Doty) #606
- [4c7c7e5]: Closes #592: add "assign domain complement from bound strands" option (Cesar Alonso Guzman Avina) #615
- [ebb01ea]: Fixed bug in with_domain_name and with_domain_label (Cesar Alonso Guzman Avina) #615
- [d3179a1]: Added unit tests for assigning domain name complements to linear strands (Cesar Alonso Guzman Avina) #615
- [aa1b9b2]: updated CONTRIBUTING to mention non-coding steps in recipe for adding new features or fixing bugs (David Doty) #621
- [19cce66]: closes #607 (actually last commit closed it but I forgot to tag it) (David Doty) #621
- [6781c3d]: updated max Dart SDK version in preparation for possibly upgrading to Dart 2.13 (David Doty) #621
- [41b7b74]: added notes to tutorial suggesting to use autopaste and auto-crossover-joining as suggested in issue #595, but did not yet re-write tutorial with new screenshots to show in detail how to use those features (David Doty) #621
- [31a9a56]: Update design.dart (David Doty) #621
- [7e45b28]: removed old requirement about AppUIStateStorableAction in CONTRIBUTING (David Doty) #621
- [fcb29a2]: added sentence describing warning if
UndoableAction
not implemented by an action that changes the design (David Doty) #621 - [474660d]: add test case for selected strands (sarahayu) #615
- [b085c6b]: closes #587; make zoom speed controllable (David Doty) #610
- [059a7d5]: added note about zoom speed to README (David Doty) #610
- [6f36523]: Added more linear and circular strand unit tests for assigning domain name complements (Cesar Alonso Guzman Avina) #615
- [dc496c4]: Added circular unit tests and fixed domain name complement not assigning to circular strands bug (Cesar Alonso Guzman Avina) #615
- [51be5bc]: fixed bug where zoom speed is not set initially based on stored value (David Doty) #621
- [33f1ec2]: added first unit test for oxDNA export and basic middleware function stub to make it compile, and updated files in test subdirectory with annotation to use Dart 2.9 so sound null safety is not checked (David Doty) #611
- [cfa7681]: closes #589; export to oxDNA format (David Doty) #611
- [0d57cb7]: Update oxdna_export_test.dart (David Doty) [#611](https://github....
v0.16.0
No major changes to the web interface, but we are bumping the version since there are breaking changes in the corresponding Python package release: https://github.com/UC-Davis-molecular-computing/scadnano-python-package/releases/tag/v0.16.0
Commits
v0.15.3
There are several new features in this release.
Display strand names, Issue #576
If strands are assigned names, then can be optionally displayed in scadnano. They are displayed in the same location as the 5'-most domain name when domain names are displayed.
Copying strands to system clipboard, Issue #536
When strands are copied, this now puts some text on the system clipboard with details about the strands. This was originally done as a feature request (#536) to make it easier to gather information about a few strands from a large design and paste them into a text file to visually inspect. However, it also allows us to copy and paste strands between different instances of scadnano; see next feature.
The next few features can make it faster to create designs.
Strands can be copied from one instance of scadnano and pasted into another, Issue #590
Previously, when strands were copied, it only affected internal memory of a scadnano instance. Several scadnano instances (for example, open in different browser tabs) would have their own internal representation of copied strands. The only way to copy strands from one instance of design to another was to copy the strands, then load the new designs in the same running instance of scadnano, then paste them. (issue #520)
Now that strands are copied to the system clipboard, it is possible to copy strands from one design and paste them into another already open instance of scadnano with a different design. The exact rules governing how this works are a bit esoteric, since the two designs may not have any helix indices in common, for example, but it is similar to pasting from one HelixGroup to another (issue #249).
The first time you attempt to paste, the browser will issue a warning, because it needs your permission to access the operating system clipboard to read the information stored there when the strands were copied. Give it permission to read the clipboard.
Caution: Whenever there are changes to the design or UI settings, scadnano writes these into your browser's local storage. If you use the same browser to open two different instances of scadnano, they will be writing to the same place. If you want two open instances of scadnano really to have no effect on each other, the best way is to use two different browsers. (Since currently scadnano only supports Chrome and Firefox, those are the only two that could both be used.)
Join many selected ends by vertical crossovers, Issue #581
This can speed up adding many crossovers to a design, especially scaffold crossovers in an DNA origami design. See #581 for details.
Autopaste, Issue #580
This idea was inspired by ENSNano, which has a similar feature. If strands are copied and pasted, the translate "vector" is recorded (i.e., how many helices up or down were the pasted strands from the original, and how much did the offsets move, and did the forward/reverse orientation change). By pressing Ctrl+Shift+V, strands can be pasted again, with the new pasted positions automatically calculated to move along the same vector. This can speed up creating a large design from many repetitive strands. See #580 for details.
Commits
- [474c087]: added instructions for running scadnano offline to README and CONTRIBUTING (David Doty) #594
- [32db707]: Deleted pyodide directory; takes up lots of room and we probably won't ever use it (David Doty) #594
- [03776aa]: Update CONTRIBUTING.md (David Doty) #594
- [2f6c855]: Update CONTRIBUTING.md (David Doty) #594
- [4f3db7c]: Update CONTRIBUTING.md (David Doty) #594
- [6e12f2b]: Fixes #536; copy strand details to clipboard as human-readable text (#578) (Benjamin Lee) #578
- [e74a78a]: Bump version to 0.15.3 (Benjamin Lee) #594
- [03a5aec]: added tip about Chrome extension "Downloads Overwrite Already Existing Files" to tutorial (David Doty) #594
- [67214c4]: added table of contents to CONTRIBUTING (David Doty) #594
- [a51b8f3]: closes #576: display strand names (David Doty) #582
- [79eba60]: closes #581 ; add Edit menu item "Join selected ends by crossovers" (David Doty) #583
- [3706382]: rearranged JoinStrandsByMultipleCrossovers action to have no information about ends to join, to push that complex logic from view code into the reducer (David Doty) #583
- [2e9dd06]: added basic (but incomplete) unit tests for JoinStrandsByMultipleCrossovers action (David Doty) #583
- [c712bd9]: refactored response to Ctrl+C to use Actions (previously was doing hacky updates of member variable of view/Design class) (David Doty) #593
- [6cc04b9]: closes #580; autopaste: paste strand with translation auto-calculated from last paste (David Doty) #593
- [da9cbd0]: beefed up unit tests for autopaste to test that pasted strands are in correct positions (David Doty) #593
- [1e59160]: fixed bugs related to keeping strand color when autopasting, and a bad assertion when pasting that caused a crash if no copy was just done, and invalid behavior where copy buffer is unecessarily cleared when pressing Esc (David Doty) #593
- [87e056a]: Update strands_copy_info_autopaste_reducer.dart (David Doty) #593
- [972a7bc]: fixed ability to paste strands from one HelixGroup into another (David Doty) #593
- [3378553]: removed CopySelectedObjectTextToSystemClipboard action and just using CopySelectedStrands action now (David Doty) #593
- [553dbe1]: fixed bug where strands could not be copied in rope select mode (David Doty) #594
- [4844b3a]: Merge branch 'dev' into repeated-strand-paste-without-mouse-click (David Doty) #593
- [2611e89]: fixed bug where strand, domain, and loopout names altered with web interface were not being saved (David Doty) #594
- [25fa451]: closes #590 ; paste strands from separate instance of scadnano (D...
v0.15.2
Commits
- [dd59b08]: bumped version to 0.15.2 (David Doty) #575
- [265e7d8]: Fixes #547; Use Sketch instead of Chrome picker (Benjamin Lee) #568
- [419e2d0]: Fixes #571; fix workflow/links for older versions (Benjamin Lee) #572
- [e61e116]: Fixes #573; Fix bug with selecting empty helix group (#574) (Benjamin Lee) #574
v0.15.1
Not much new, mainly this release is to alter the text the user sees when first loading the page to clarify that scadnano is a separate project from cadnano.
Commits
- [253436d]: bumped version to 0.15.1 (David Doty) #567
- [bf76f48]: fixed bug where slice bar reducer was assuming a design is loaded and getting null error if no design is loaded (David Doty) #567
- [54418de]: Update tutorial.md (David Doty) #567
- [4fa22f1]: added to message shown if no design is loaded, which user sees when loading scadnano for first time, a note clarifying difference between scadnano and cadnano; also added an About button under Help menu, which also explains difference between scadnano and cadnano (David Doty) #567
- [04b8010]: Update README.md (David Doty) #567
- [9d0b3a1]: added to README a link to API docs discussion of cadnano export issues (David Doty) #567
- [7151e3f]: fixed typo in reference to 5' ends in tutorial (David Doty) #567
- [239cbe4]: bug fix: in deletion and insertion edit mode, added Mac Cmd+click to enable adding deletions/insertions to multiple helices with one click (David Doty) #567
v0.15.0
Bumped version to keep up with Python package: https://github.com/UC-Davis-molecular-computing/scadnano-python-package/releases/tag/v0.15.0 but there are no breaking changes in the web interface. The breaking change in the Python package was to remove the field Strand.idt.name
and use Strand.name
instead. This should not affect the web interface (though it will affect the JSON output with idt fields).
Edit strand/domain/loopout names
Can now edit strand, domain, and loopout names by right-clicking:
Backbone edit mode removed
Backbone edit mode had two main functionalities:
- Displaying helices backbone angles. This can now be done by using the slice bar (see below).
- Displaying strand and helices data in the footer. This can now be done by enabling in the menu View→Display strand and helix details in footer.
With this change, users no longer need to "disable" editing by switching from an edit mode to backbone edit mode just to view backbone angles or footer data.
Slice Bar
The web interface now provides a "slice bar", which users can drag and move to display the DNA backbone angle of all helices (in a helix group) at a particular offset.
Display strand and helix details in footer
The footer (bottom of the screen) displays details about the design based on where the cursor is located. If the cursor is on a helix, the helix index and cursor's base offset location is displayed. If the cursor is on a strand, then the strand details will also be displayed.
Commits
- [fef5cf0]: Fixes #541; enable slice bar to show helix rolls (Benjamin Lee) #564
- [c1e32b7]: added Autostaple/Autobreak to README (David Doty) #565
- [78ee01c]: closes #477; add ability to edit strand/domain/loopout names by right-clicking (David Doty) #558
- [b59d436]: reduced context menu font size now that strand context menu is getting large (band-aid until we fix issue #557) (David Doty) #565
- [5fa2f1e]: closes #560; remove IDT name field; now Strand.name is the official name of the strand; bumped minor version since this is a breaking change in the Python package (David Doty) #563
- [b6fd185]: Merge branch 'dev' into dev-issue-541-slice-bar (Benjamin Lee) #564
- [bc8c745]: Fix slice bar height and position (Benjamin Lee) #564
- [d0b0c2d]: Remove backbone mode and adjust slice bar on load (Benjamin Lee) #564
- [5871936]: Merge branch 'dev' into dev-issue-541-slice-bar (Benjamin Lee) #564
- [4b9b490]: Remove side helix rolls when slice bar inactive (Benjamin Lee) #564
- [fb1b200]: closes #517: re-make tutorial to be consistent with version 0.14.0 (David Doty) #565
- [7072a83]: added note to tutorial about how displayed filename in browser tab is not updated after saving (David Doty) #565
- [c9d19a1]: added suggestion on tutorial for undoing accidental select all text in browser when not in select mode (David Doty) #565
- [d7311c4]: added a few images for ligate (David Doty) #565
- [8f4f518]: Update tutorial.md (David Doty) #565
- [a5f1d4a]: Update tutorial.md (David Doty) #565
- [21ac895]: added screenshot of Excel spreadsheet (David Doty) #565
- [a2fbaca]: changed relative link to tutorial design 24_helix_rectangle.sc file and added instructions for downloading raw file (David Doty) #565
- [2359662]: added information to tutorial about M13 variants and rotation (David Doty) #565
- [2e97da3]: Update tutorial.md (David Doty) #565
- [82a6a49]: added tutorial link to IDT 96-well plate page (David Doty) #565
- [e8eb1ee]: Update tutorial.md (David Doty) #565
- [0f819cf]: Update tutorial.md (David Doty) #565
- [53474ea]: fixed typo referring to incorrect helix index (David Doty) #565
- [fa3c6de]: Update tutorial.md (David Doty) #565
- [abbd483]: Update tutorial.md (David Doty) #565
- [8701c86]: fixed typo in referring to View menu instead of Edit menu; added link to Excel exported file with DNA sequences (David Doty) #565
- [f218352]: added note to tutorial pointing out that extra bases are ignored when assigning DNA sequence to strand, and that M13 will have a loopout in reality that is not displayed in scadnano (David Doty) #565
- [8c20abd]: added section for nicks (David Doty) #565
- [d866186]: Update tutorial.md (David Doty) [#565](https://github.co...
v0.14.0
No changes, but we're bumping the version number up to 0.14.0 to keep with Python package, which had some breaking changes; see https://github.com/UC-Davis-molecular-computing/scadnano-python-package/releases/tag/v0.14.0.
Commits
v0.13.4
Circular strands
Circular strands are now supported. (See #5.)
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:
-
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
-
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.
-
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:
- Novices who are happy to use a proven design already existing in the literature.
- 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
v0.13.3
Copy/paste across designs
Users can now copy strands, load a new design in the same browser window, and then paste those strands.
Row-major and column-major order of export of strands
When exporting DNA sequences, previously the strand sequences were exported in the order the strands appear in the JSON. You can now specify a few other orderings:, row-major (i.e., lexicographically compared helix, then offset) column-major (lexicographically compared offset, then helix) of:
- 5' ends
- 3' ends
- minimum of 5' or 3' end
- start offset of top-left domain (i.e., domain that is on the minimum-index helix, which is leftmost among all such domains)
Commits
- [0ba5874]: Fixes #521; Fix deprecation warning on Release action (Benjamin Lee) #528
- [f0c92b4]: Bump version to 0.13.3 (Benjamin Lee) #528
- [6de75fd]: Fix typo in release title (Benjamin Lee) #528
- [3c69ac6]: added description of "assign DNA complement from bound strands" to README (David Doty) #544
- [5969809]: closes #520; copy strands from a design, load a new design, and then paste the strands into the newly loaded design (David Doty) #544
- [56b860d]: closes #530: allow row-major and column/major order of export of strands (David Doty) #532
- [f4c179a]: Update README.md (David Doty) #544
- [779e288]: Update README.md (David Doty) #544
- [d3edf3d]: Fixes #489, removes AppState equality checks in UT (Benjamin Lee) #538
- [44ab413]: Remove extraneous checks from unit tests (Benjamin Lee) #538
- [8b96d6c]: Temporarily change backend due to maintenance (Benjamin Lee) #539
- [fad560a]: Changing backend URLs to https server (Cosmo) #543