Releases: UC-Davis-molecular-computing/scadnano
v0.13.2
new feature: "assign DNA complement from bound strands"
I couldn't think of a less awkward phrase, but what this feature allows you to do (see here: #518) is to assign a DNA sequence to a strand based on existing strands bound to it that already have DNA assigned. This is under the context menu when right-clicking on a strand or a group of selected strands:
The "normal" way, particular for DNA origami with a single scaffold strand that is bound to every staple strand, is to assign a DNA sequnce to the scaffold and allow the complementary DNA sequence to be computed for every staple strand bound to it.
But in some circumstances, you might have some strand(s) that already have DNA sequences assigned, and through some modification of the design, new strand(s) come to be bound to them that were not present in the design at the time the DNA sequence was assigned. This feature allows you to select that new strand (or many strands if you like), and tell it to receive the appropriate complementary DNA sequence. It is equivalent to iterating over each strand bound to the selected strand(s), selecting "Assign DNA" from the context menu, and selecting the option "assign complement to bound strands", re-assigning the DNA sequence already assigned to that strand.
bug fix: exporting modifications to IDT files
This is technically classified as a bug fix, but really it's a feature I simply forgot to implement until now. The scadnano web interface supports displaying modifications on the 5' and 3' ends, and internal modifications, together with a "IDT text" field indicating what to output in exported files for ordering DNA strands from the synthesis company IDT. But until this version, the IDT text field was omitted from the exported DNA sequences. For instance, if you add a 5' biotin modification using IDT code /5Biosg/
:
then it will show up in exported IDT files using the same text /5Biosg/
.
Commits
- [76ba84c]: closes #518: add "assign DNA complement from bound strands" option (David Doty) #523
- [9b80745]: fixes #524: DNA ends not selectable by scaffold/staple after changing strand type (David Doty) #527
- [60ef6b8]: beefed up error-handling when catching errors with no cause or message field (David Doty) #527
- [0fc270b]: fixes #525: export sequences to IDT should put modifications in sequence (David Doty) #527
- [92035e9]: fixed unit test to properly test is_scaffold property on domains after Strand is_scaffold property is set by calling initialize(), which sets Domain.is_scaffold field (David Doty) #527
- [981081a]: bumped version (David Doty) #527
- [5bd9ba2]: Merge branch 'master' into dev (David Doty) #527
v0.13.1
v0.13.0
Improved Batch Editing
can select many objects and edit/delete them at once, when objects are:
- deletions/insertions: deleting in batch, editing insertion length in batch, and adding many deletions/insertions to many helices by pressing Ctrl when adding to one Helix. The last is especially useful for doing twist-correction (see https://doi.org/10.1038/nchem.1070, https://www.dna.caltech.edu/Papers/stacking-bonds2011.pdf, Fig. 1) on DNA origami, which involves adding a "column" of deletions to every helix at the same offset.
-
loopouts/crossovers (could delete before, now can convert between them, or change loopout lengths, in batch)
Rope Select Mode
Users can now draw an arbitrary non-self-intersecting polygon to select many items at once
Right click to edit insertion length
Previously this would be done by using (s)elect mode and clicking on the insertion. Now, users must right click on the insertion.
Links to older versions
Starting with v0.12.1, older versions of scadnano will hosted at scadnano.org/{version number}. This might be useful in case an update breaks some functionality.
Swap x and z coordinates
This change should not affect any users using only the web interface, but may be a breaking change for anyone using the Python scripting library. Python scripts using the "none" grid and specifying 3D coordinates will need to be rewritten so that x and z coordinates are swapped.
Previously, positive x moved right in the main view and into the screen in the side view, and positive z moved right in the side view and out of the screen in the main view. Now these are swapped.
If you are curious why this was done, read here: #488
Commits
- [a3c6b33]: added whitespace between IDT name displayed in footer and Strand name (David Doty) #507
- [4f9121f]: Update dart.yml (Benjamin Lee) #485
- [b7731f5]: Update CONTRIBUTING.md (David Doty) #507
- [6454166]: Fixes #473; side cursor title use yz instead of xy (Benjamin Lee) #486
- [028162c]: Fixes #473; side cursor title use zy instead of xy (Benjamin Lee) #486
- [d75a989]: Performance improvement for strand selection (Benjamin Lee) #487
- [4c50667]: fixed bug with setting HTML id of modification that disabled right-click context menu for some of them (David Doty) #507
- [cc44388]: fixed bug in converting from gridless 3D positions to square grid positions (David Doty) #507
- [cc9e10b]: added unit test for util.position3d_to_grid_position (David Doty) #507
- [36d27dd]: when adding modification, dialog remembers choice of modification display text, id, and idt text (depending on type of mod: 5', 3', or internal), so that it does not need to be typed in the next dialog. (useful for adding several copies of the same modification to several places in the design) (David Doty) #507
- [cf4ab54]: removed string id as option to set when adding or editing modification; now it automatically uses the IDT text field as the ID. (David Doty) #507
- [9d681a1]: added ability to convert all selected crossovers to loopouts via right-click context menu (haven't yet implemented changing all loopout lengths at once, including setting length to 0 to convert back to crossover) (David Doty) #507
- [c5625b2]: Fixes #488; swap position x z coordinate (Benjamin Lee) #499
- [8e5bf03]: fixed bug allowing null ModificationInternal.allowed_bases in constructor (David Doty) #507
- [421b66f]: closes #493 ; displays more nicely loopouts on a single helix between two domains in the same direction, so it looks more like an insertion (David Doty) #507
- [0191ce1]: can select many loopouts and change all of their lengths at once (or convert all to crossovers by setting length 0) (David Doty) #507
- [2eb1bc4]: updated pubspec.yamp to fix analyzer error after upgrading to Dart 2.10 (David Doty) #507
- [8b9a2b7]: fixed bug where helix groups were not properly updated after changing a helix's index (David Doty) #507
- [5aff64c]: Update helices_reducer.dart (David Doty) #507
- [6201886]: Update pubspec.yaml (David Doty) #507
- [4879318]: Update pubspec.yaml (David Doty) #507
- [ed98954]: changed IDT export plates code to put last 24 strands on last 96-well plate if necessary (since minimum per plate is 24), and similarly for 96 strands per 384-well plate. (David Doty) #507
- [758ec7d]: fixed bug where deletions/insertions not updated properly when reflecting strands horizontally. (David Doty) #507
- [b68b9f4]: closes #494; allow deletions/insertions to be added to all domains in a HelixGroup occupying the clicked offset, which helps with implementing t...
v0.12.2
v0.12.1
Better color picker
Before, one had to type a hex string such as #ff0000
to assign a color to a Strand. Now a more advanced tool is available:
Strand, Domain, and Loopout names
Strands, domains, and loopouts now have a name
field. Unfortunately they cannot yet be set in the web interface. They can be set in the Python scripting library:
- https://scadnano-python-package.readthedocs.io/en/latest/#scadnano.Domain.name
- https://scadnano-python-package.readthedocs.io/en/latest/#scadnano.Domain.set_name
- https://scadnano-python-package.readthedocs.io/en/latest/#scadnano.Loopout.name
- https://scadnano-python-package.readthedocs.io/en/latest/#scadnano.Loopout.set_name
- https://scadnano-python-package.readthedocs.io/en/latest/#scadnano.Strand.name
- https://scadnano-python-package.readthedocs.io/en/latest/#scadnano.Strand.set_name
The Strand name is displayed in the tooltip on hover:
and in the footer when in "backbone" mode:
The domain and loopout names can be displayed through the option "Show domain names" in the View menu:
The convention is that two domain names are "complementary" if they are the same name, except that exactly one ends with a *
.
The option "Show domain name mismatches" will show a red star warning to indicate if two domains both have names assigned, but
Commits
- [eeb8ddc]: updated paper URL (David Doty) #483
- [16d5d66]: fixed loopout name centering (David Doty) #483
- [ec085fd]: footer displays strand name (in addition to IDT strand name) in backbone mode (David Doty) #483
- [27a7f1d]: fixed typos in CONTRIBUTING and README (David Doty) #483
- [9a4d6c8]: added check for null design when setting displayed group name in side view (David Doty) #483
- [4b75cee]: fixed #472; When reading from a scadnano JSON file, duplicate deletions/insertions are removed. (David Doty) #483
- [3f8f841]: added check for multiple inconsistent insertions, and unit tests for duplicate deletions/insertions, related to issue #472 (David Doty) #483
- [4f12a66]: added some error-checking code to deletions/insertions JSON parsing (David Doty) #483
- [2dfc052]: add option to show domain name mismatches; closes #471 (rishabhmudradi) #475
- [6bbea7b]: Update CONTRIBUTING.md (David Doty) #483
- [5f8c80c]: fixing error in spelling (rishabhmudradi) #475
- [3896c0a]: fixed bug causing crash when displaying domain name mismatches and some domain does not have a name (David Doty) #483
- [1800a95]: Fixes #199; add strand color picker (Benjamin Lee) #479
- [945c904]: Fixes #280; Enable helix selection clear on load (Benjamin Lee) #481
- [ce49bb6]: fixed bug in adding modification through web interface; was improperly checking whether a DialogCheck was enabled, but that index was a DialogRadio; now supports disabling certain dialog items when a DialogRadio option(s) is selected (David Doty) #483
- [6879b82]: fixed bug in displaying domain name mismatches (David Doty) #483
- [31061b0]: fixed #482 (in last commit but forgot to add to commit message) (David Doty) #483
- [eb2d670]: bumped version (David Doty) #483
v0.12.0
Optional field name
now supported in Strand, Domain, and Loopout.
The name is displayed (optionally) in the scadnano web interface.
All three are also used with the dsd DNA sequence designer (not public yet).
Many other minor features and bugfixes; see below.
Commits
- [771f5b0]: Fix #453; Fix svg-png-caching image translation (Benjamin Lee) #454
- [0165e55]: changed poorly named "context_menu_strand" to "context_menu_crossover" (David Doty) #470
- [dfefc6e]: adding editing/removing/adding modifications to designs; closes#208 (rishabhmudradi) #457
- [c60a34e]: Updating selected index for adding modifications; closes #208 (rishabhmudradi) #457
- [6a0bb13]: Disabling index_of_dna_base_idx when necessary (rishabhmudradi) #457
- [040dffa]: Editing view options (rishabhmudradi) #457
- [67c3715]: fixes #407; when re-assigning helix idx, re-assign view order (David Doty) #470
- [b4377f7]: fixes #460: Dialog form input elements should be enabled when conditions are met #460 (David Doty) #470
- [e23fe02]: Update design_dialog_form.dart (David Doty) #470
- [b6c8b20]: only selects DNA ends on left-click; closes #458 (rishabhmudradi) #463
- [c4fdfbe]: using constants and adding Middle_Click (rishabhmudradi) #463
- [a917fe2]: closes #464; display domain/loopout labels (David Doty) #470
- [beb22aa]: Adding code for pointer_up (rishabhmudradi) #466
- [56a936a]: Adding comments for event.button on a mac (rishabhmudradi) #466
- [b26c339]: Adding comment (rishabhmudradi) #466
- [cbed2e4]: minor (David Doty) #470
- [d52e414]: uncapitalized menu items (David Doty) #470
- [31a079c]: changed paper links in README to doi links (hopefully more permanent) (David Doty) #470
- [dbd3476]: added instructions for voting on issues in GitHub (David Doty) #470
- [7d19d63]: added optional String name fields to Strand, Domain, and Loopout; these are used now instead of (the untyped) label to assign names to Strands, Domains, and Loopouts in the dsd DNA strand designer (though Strand labels are still used to assign Strand groups in the dsd sequence designer); also domain name is displayed (optionally) in the web interface now instead of label (David Doty) #470
v0.11.3
Minor feature enhancements.
Commits
- [31f49eb]: closes #442; add option to right-click on helix away from circle in main view (e.g., on gray lines, or the white space in between them) to bring up the context menu; WARNING: currently only works when not in backbone mode (David Doty) #452
- [a52093a]: updated README to point at simpler URL in Python library README (David Doty) #452
- [821ccff]: fixed context menu for right-clicking on helix lines/white offset squares, even when in backbone mode (David Doty) #452
- [8fe1506]: Create 2_helix_origami.sc (David Doty) #452
- [30f4f38]: add view option to show length of loopout next to loopout; closes #426 (rishabhmudradi) #443
- [6e50857]: updated examples (David Doty) #452
- [3f9e221]: fixes #414; make copy/paste "anchor" be top left even when y-axis is inverted (David Doty) #452
- [4d2142b]: changed footer display from "substrand length" to "domain length" (David Doty) #452
- [96698c0]: Update 2_helix_origami.sc (David Doty) #452
- [e403526]: Disable redux dev tools for release (Benjamin Lee) #444
- [6092209]: Updating required issues (rishabhmudradi) #443
- [31777c1]: Adding new design_main_loopout_length class (rishabhmudradi) #443
- [ddbdab1]: Adding css_selector called loopout_length (rishabhmudradi) #443
- [1bef1e2]: Merge branch 'dev' into add-view-option-to-show-length-of-loopout-next-to-loopout (David Doty) #443
- [f0ae4bc]: Merge branch 'dev' into add-view-option-to-show-length-of-loopout-next-to-loopout (rishabhmudradi) #443
- [e77e54d]: Removing loopout parameter (rishabhmudradi) #443
- [e29933a]: Update README.md (David Doty) #452
- [d8d004c]: removed redundant imports (David Doty) #452
- [a4146b7]: Fixes #436; properly display cached PNG of DNA sequences, when some helix group is translated to negative y position; Fixes #438; exported SVG main set bounding box just large enough to contain elements (Benjamin Lee) #448
- [79c2d35]: Update CONTRIBUTING.md (David Doty) #452
- [78eaff8]: added two examples (David Doty) #452
- [466202a]: changed default inter-helix gap to be 1 nm (previously was 0.5 nm) (David Doty) #452
- [83f35f9]: updated Design constructor to allow geometry to be specified; fixed unit tests to be less brittle about geometry parameters (David Doty) #452
- [16e3d60]: disabled Google analytics on localhost (David Doty) #452
- [e4b4db4]: bumped version (David Doty) #452
v0.11.2
Minor bug-fix release.
The Help menu now shows the current version and links to the associated release notes page. (Will be a broken link for the scadnano.org/dev site in general since releases only show up on the master branch.)
Commits
- [90321cc]: added instructions to README for selecting/deleting helices (David Doty) #441
- [e941f5b]: fixed bug in loading old versions of AppUIStateStorables from localStorage that prevented menu from rendering (David Doty) #441
- [2bf5bfa]: fixed bug with displaying and storing invert_yz correctly (David Doty) #441
- [d59f1d0]: added help menu item showing currently version number and linking to release notes (David Doty) #441
v0.11.0
Helix groups to help display rotated and translated sets of helices
This release adds a major feature: helix groups with their own position and orientation.
Many origami designs have helices that are not all parallel, but in the great majority of those, there are a few groups of helices, where within a group, the helices are all parallel. scadnano now supports displaying these groups separately in the cross-section side view, and displaying them at different positions and rotations in the main view.
Although scadnano will never be ideal for visualizing 3D designs, this feature should help to directly visualize most 2D designs (where all DNA helices lie in a plane).
Briefly, the three angles to describe the orientation of any object in 3D space are pitch, roll, and yaw. In each helix, the roll is its forward domain backbone angle at offset 0, which is displayed in the side view when the slice bar is enabled. Update: helices have their pitch and yaw fields removed. See https://github.com/UC-Davis-molecular-computing/scadnano-python-package/releases/tag/v0.16.0, https://github.com/UC-Davis-molecular-computing/scadnano/releases/tag/v0.16.0, #597. Now these are only settable through helix groups.
Yaw corresponds to rotating "out of the screen" in the main view, and it is ignored by the scadnano web interface (though remains a field that is stored for compatibility with 3D modeling tools).
Pitch corresponds to rotating in the plane of the main view. Helices can now be placed into different groups, and each group has its own pitch, roll, yaw, and 3D (x,y,z) position. The default is that all helices are in the same group, called "default_group", with all these values set to 0.
You can create new groups, and each helix will be translated by the z- and y- coordinates of the group's position (the main view is the z-y plane), and in the main view, each helix will be rotated clockwise by the pitch angle of the group (specified in degrees). For example, the following design (inspired by https://www.nature.com/articles/nnano.2016.256) has four groups, at pitch angles 0, 90, 180, and 270:
The "west" group, with pitch 0, is shown in the side view.
Each group also has its own grid (e.g., if you want you can use the square grid on one group, the honeycomb grid on another, and no grid on a third) and helices_view_order.
Selected strands cannot be copied or moved if they occupy more than one group. (Note that even a single strand can occupy many groups, e.g., the scaffold above.) However, a selected set of strands can be copied/moved from one group to another.
See the README for documentation. Helix groups are also supported in the Python scripting package
Move group edit mode
One can set the position, as well as any other property, of a helix group through the new side view menu. However, one can also set the position using the new "move group" edit mode. In this mode, one can still pan the main view by clicking and dragging the background.
However, if you press the Shift or Ctrl key (Cmd on Mac), then clicking and dragging will move the helix group currently displayed in the side view, i.e., it will change its z and y coordinates. The x coordinate of the helix group, like the yaw angle, is there for compatibility with 3D modeling tools, but is ignored by the scadnano web interface, although the x coordinate of a helix using the none grid is displayed in the side view.
[Note: At the time of this release, the x and z coordinates were swapped so that x was horizontal in the main view, but they have been changed since then and now z is horizontal in the main view (and x horizontal in the side view): #488]
Note that there's currently no way to use the pointer to change the pitch angle; these are set by manually typing an angle in the pitch
field after selected Group→adjust current group.
Moving groups of domains
Domains are now selectable and movable. They can also be deleted by selecting and pressing delete (deleting a 5' or 3' deletes the domain as well). The same rules as strands apply: a set of domains can only be moved if they all are in the same helix group, but they can be moved to another helix group.
Commits
- [442b5a5]: added note to README about security restrictions preventing saving the file (David Doty) #439
- [c01e89a]: fixed README link to issue for saving problems in Chrome (David Doty) #439
- [1b9e834]: fixed README link to issue, again (David Doty) #439
- [86415d2]: Update README.md (David Doty) #439
- [f3f031e]: unselect strands when switching out of select mode; closes #389 (rishabhmudradi) #406
- [9f70130]: Updating onClick code to be inline (rishabhmudradi) #406
- [d3df5a4]: added link to dev version in help menu (David Doty) #439
- [38d51b0]: fixed reducer_test call to old function name app_state_from_dna_design (David Doty) #439
- [2eab946]: addresses issue #36 but does not fix it totally; helix idxs can now be changed one at a time, and not with a recalculation of view order until #407 is addressed (David Doty) #439
- [23468d5]: added geometry as prop to many view components so crossovers are drawn correctly based on main SVG distance between helices (David Doty) #439
- [d5f22a7]: cleaned up imports (David Doty) #439
- [234961d]: updated README to promote "easy to read file format" as a major feature, and added link to section with example (David Doty) #439
- [e29da26]: noted that screenshot is annotated (David Doty) #439
- [84e37dd]: removed debugging print statement (David Doty) #439
- [f6a58cc]: added unit tests for Helix groups and added group type to state/group.dart and groups field to Design (David Doty) #418
- [2a40c8b]: enabled visual display of helix groups with positions and pitch specified, and ability to move/copy strands and move DNA ends within and between the groups (David Doty) #418
- [239ba41]: updated helix position set based on crossover to disable only if all group grids are not None, and to show a pop-up warning on any group with a non-none grid (David Doty) #418
- [4af349e]: fixed bugs with updating helices_view_order within a group after helix is added or removed (David Doty) #418
- [3414d94]: fixed bug...
v0.10.2
Somehow I lost track of the version numbers and we jumped straight to 0.10.2 from 0.10.0.
Commits
- [e9ac4d8]: changed heading level in README (David Doty) #404
- [2aaacb6]: fixes #395; setting "invert y axis" also inverts z axis in side view; this fixes chirality problem where backbone angles were not accurate. In the side view, it is now equivalent to rotating the side view by 180 degrees. (David Doty) #404
- [2800b07]: bumped version (David Doty) #404