Recent Releases of scadnano
scadnano - v 0.20.1
Added back wc (deprecated) so as not to break existing scripts.
Commits
- 9cf18fe: changed some refs from
wctorc(David Doty) #314 - 5ec6b80: Update scadnano.py (David Doty) #314
- 85f153c: Update scadnano.py (David Doty) #314
- 5327c48: Update scadnano.py (David Doty) #314
- bd8df31: Update scadnano.py (David Doty) #314
- c2f87e6: minor (Dave Doty) #314
- 314e848: Update scadnano.py (David Doty) #314
- 05acbbf: added back
wc(deprecated) and bumped version (David Doty) #314 - 4eba568: Update rununittests.yml (David Doty) #314
- Python
Published by github-actions[bot] 11 months ago
scadnano - v0.20.0
Release notes
BREAKING CHANGE: Minimum Python version is 3.9
The minimum Python version has been changed to 3.9. Technically there is not yet any part of the scadnano package that actually depends on 3.9 features; mainly this is done because support is being dropped for older Python versions in other tools, for example the unit tests that are run whenever we update the github repo no longer support older Python versions.
As of version 0.20.0, you can still install scadnano with Python version 3.7 or 3.8 by using the option --ignore-requires-python with pip: pip install scadnano --ignore-requires-python https://stackoverflow.com/questions/75726452/can-i-force-the-install-of-a-package-that-requires-a-newer-python-version-than-t However, future versions of scadnano may use newer features of Python, so it is advisable to upgrade to the latest Python version now for maximum future compatibility.
BREAKING CHANGE: parameter only_strands_with_idt changed to only_strands_with_vendor_fields
Version 0.19.0 changed some names of fields and classes from IDT-specific names to the more generic "vendor fields". However, the parameter only_strands_with_idt in a few methods was not at that time changed to only_strands_with_vendor_fields; now that parameter name has been changed as well in version 0.20.0.
HelixGroups custom geometry
See also https://github.com/UC-Davis-molecular-computing/scadnano/issues/993#issuecomment-2365320437.
There is a new optional field HelixGroup.geometry, which overrides the Geometry parameters of the Design.geometry field. For instance, the following code:
```python import scadnano as sc
def createdesign() -> sc.Design: group0 = sc.HelixGroup(grid=sc.square) group1 = sc.HelixGroup(grid=sc.square, # NOTE: here's the custom geometry for helix 1 geometry=sc.Geometry(basesperturn=18), position=sc.Position3D(0, 3, 0)) groups = {"group 0": group0, "group 1": group1} helices = [sc.Helix(idx=idx, maxoffset=40, group=group) for idx, group in [(0, "group 0"), (1, "group 1")]] design = sc.Design(helices=helices, groups=groups, strands=[]) design.drawstrand(0, 0).move(40) design.drawstrand(0, 40).move(-40) design.drawstrand(1, 0).move(40) design.drawstrand(1, 40).move(-40)
return design
if name == 'main': d = createdesign() d.writescadnanofile(directory='outputdesigns') ```
produces this design with helix 0 having 10.5 base pairs per turn, and helix 1 having 18 base pairs per turn:
Commits
- 3600d1a: changed idt references to vendor_fields (David Doty) #313
- e8905fa: fixes #304: Typo in
set_dna_sequencecomment (David Doty) #313 - d9cd906: closes #306: allow per-helix-group geometry (David Doty) #307
- c597888: removed xlwt from environment.yml (David Doty) #307
- d6a52bd: Update rununittests.yml (David Doty) #307
- efce159: fixed group-specific geometry in oxdna/oxview export (David Doty) #313
- 0c435bf: Update scadnano.py (David Doty) #313
- 2795055: fixed issue 309 by rotating helix position by group's orientation before adding to helix group's offset (DanielHader) #312
- cf75e42: Update scadnano.py (David Doty) #312
- b7afcd2: removed assignment of
NonetoDesign.helicesandDesign.groupssince constructor sets them anyway (David Doty) #313 - abc8435: made
StrandBuildera dataclass and added documentation for fields (David Doty) #313 - c4f64ba: bumped minimum Python version to 3.9 and bumped version to 0.20.0 (David Doty) #313
- Python
Published by github-actions[bot] about 1 year ago
scadnano - v0.19.4
Release notes
Changed type of Design.to_oxview_format from dict to str to keep convention with similar other methods such as Design.to_oxdna_format.
This is a breaking change, although the minor version number did not change. The method Design.to_oxview_json has the same functionality that Design.to_oxview_format, namely that it returns a JSON-serializable dict. Calling json.dumps on this dict produces the same output as Design.to_oxview_format.
- Python
Published by github-actions[bot] about 2 years ago
scadnano - v0.19.3
Release notes
Mostly fixes this bug with oxView export: #297.
We jumped straight from v0.19.0 to v0.19.3 due to some testing that happened in the dev branch.
Commits
- a78b395: bumped version (David Doty) #299
- 5cf25e3: changed parameter type of
Strand.set_domainsto allowExtension's (David Doty) #299 - 1128beb: added the required build section (RayBipse) #292
- dcede52: Removed python.version (RayBipse) #293
- 3d20590: Removed python.version and added back tools.python (RayBipse) #294
- 4380042: Changed to use mamba and added python version requirement to environment.yml (RayBipse) #295
- 21aa34a: Added pip packages used to environment.yml (RayBipse) #296
- e5572ad: fixes #297: fix oxView export exception on Loopouts (David Doty) #298
- a220c32: Update scadnano.py (David Doty) #299
- Python
Published by github-actions[bot] about 2 years ago
scadnano - Development Build [TODO: Replace label and number with version number]
Commits
- 9f5519e: bumped version (David Doty) #289
- Python
Published by github-actions[bot] over 2 years ago
scadnano - v0.19.0
Release notes
BREAKING CHANGE: Renamed IDT-specific fields
Some names related to the DNA synthesis company IDT have been renamed to be more general. You will have to rename these in your own code for it to run:
- class
IDTFields-->VendorFields - field
Modification.idt_text-->Modification.vendor_code - field
Strand.idt-->Strand.vendor_fields
Additionally, some keys in the JSON format for .sc files have changed as well. Scadnano (both the web interface and the Python package) should be able to read files with the old keys and convert them to the new keys upon saving. However, if you are manually editing the .sc file then use the new keys.
Some IDT-specific methods remain, such as Design.write_idt_plate_excel_file. These use the values in Strand.vendor_fields and Modification.vendor_code, but since the file format actually is specific to IDT, the method name is unchanged.
Although currently there are no methods for exporting to file formats recognized by other synthesis companies, in the meantime it should be straightforward to use the values in VendorFields to write custom code for such exports.
Field Modification.id removed
Previously, scadnano uses Modification.id as a unique identifier for modifications.
The field id has been removed. Now, the field vendor_code where id was previously used.
Previously, if no id was specified, but vendor_code/idt_text was, then id was set to the latter. Such code should continue to work unmodified. But code referencing id should now refer to vendor_code instead. Additionally, if a script used the same vendor_code for different Modifications, then this will break. Each Modification should now have a unique vendor_code field.
Note that some vendors such as Eurofins use the same code for 5'/3' modifications (see issue #283). For this reason, the modifications internally are stored in a way that encodes their location (5', 3', internal). But for any two modifications of the same type (e.g., both 5' modifications) the vendor_code must be unique.
Commits
- 99e16d2: bumped version (David Doty) #285
- bd12d4d: Update scadnano.py (David Doty) #285
- dbc1058: Update scadnano.py (David Doty) #285
- ddc8eee: Update README.md (David Doty) #285
- 34211de: Update scadnano.py (David Doty) #285
- 3ed8158: Update scadnano.py (David Doty) #285
- 0bd7995: Update scadnano.py (David Doty) #285
- d012f17: Update scadnano.py (David Doty) #285
- 1c39fbc: closes #279: rename IDTFields to VendorFields (David Doty) #280
- 5fefd41: re-ran examples to alter changed name of IDT fields (David Doty) #280
- f679027: fixed docstrings (David Doty) #280
- 65630f4: fixed docstrings (David Doty) #280
- 3bb1373: Update scadnano.py (David Doty) #285
- 6356689: closes #281: remove field
Modification.id(David Doty) #282 - 4c52f52: Update scadnano.py (David Doty) #285
- 032ebde: Update scadnano.py (David Doty) #285
- 4795224: Update scadnano.py (David Doty) #285
- b72a5c7: Update scadnano.py (David Doty) #285
- db9ec53: Update scadnano.py (David Doty) #285
- 41d93e3: removed
Position3D.clone(), which is unnecessary sincePosition3Dis frozen (David Doty) #285 - 6465434: Update scadnano.py (David Doty) #285
- fc30862: Update scadnano.py (David Doty) #285
- 37fa350: fixes #283: deal with non-unique Modification vendor codes (David Doty) #284
- 09ad91b: Update scadnano.py (David Doty) #285
- 82661bb: Update scadnano.py (David Doty) #285
- Python
Published by github-actions[bot] almost 3 years ago
scadnano - v0.18.3
Release notes
A custom delimiter string to go in between DNA sequences of different domains on a strand can be specified, e.g., a space (which is ignored by IDT), so that the exported IDT sequences might look like this:
ST0[8]0[15];/5Biosg/ ACGTCGT ACGTC ACGTAC;25nm;STD
Commits
- 301edc4: bumped version (David Doty) #278
- 315c0f3: fixes #276: customize delimiter between domains in exported DNA sequences (David Doty) #277
- 5d8b61d: updated unit test to test for non-default delimiter (David Doty) #277
- 96b5e0d: removed delimiters between internal modifications and rest of sequence (David Doty) #277
- 93431b4: Update scadnano.py (David Doty) #277
- 19975dd: added unit test for internal modification that goes between bases (David Doty) #278
- Python
Published by github-actions[bot] almost 3 years ago
scadnano - v0.18.2
Bug fixes related to relaxing helix rolls.
Commits
- 8165951: bumped version (David Doty) #275
- 3f5bb6e: fixed one unit test (David Doty) #275
- a37b35a: Update scadnano.py (David Doty) #275
- 0837366: Update scadnano.py (David Doty) #275
- caf20e1: fixed bug in calculating minimum strain angle for helices with no crossovers (David Doty) #275
- e832e53: Update scadnano_tests.py (David Doty) #275
- 25fa92f: fixes #268: ignore loopouts when relaxing Helix rolls (David Doty) #269
- 9ea350b: fixed bug with relaxing roll starting from non-0 roll (David Doty) #275
- 7d938b5: cleaned up unit test (David Doty) #275
- 15c1514: Update scadnano.py (David Doty) #275
- 770366a: fixes #270: ignore "same helix" crossovers when relaxing helix rolls; also ensures domains on helix are stored in increasing order of start offsets (David Doty) #272
- 888565c: added new example (David Doty) #272
- 832c503: Update scadnano_tests.py (David Doty) #275
- d84419f: added unit test for relaxing helix rolls with intrahelix crossovers and fixed bug in relax code that didn't account for that case (David Doty) #275
- d3a6d7d: change parameter name (David Doty) #275
- a2d4e52: fixes #273: deal with inter-group crossovers when relaxing helix rolls (David Doty) #274
- 27568e4: Update scadnano_tests.py (David Doty) #275
- 1dedd8b: fixed relax helix rolls to ignore intergroup crossovers (David Doty) #275
- 51fbc9c: Update tutorial.md (David Doty) #275
- 5189e8d: Update scadnano.py (David Doty) #275
- Python
Published by github-actions[bot] almost 3 years ago
scadnano - v0.18.1
Release notes
automatically set Helix rolls based on crossover locations ("relax" the rolls)
In this design, the crossovers are well placed relative to each other, but the helix rolls need to be rotated. As the slice bar shows, with the default roll of 0, the crossovers do not point at the helices they connect to:
By calling Design.relax_helix_rolls, the helix rolls are set to minimize "strain" in the crossovers:
Formally, the strain is defined as the square of the angular distance between the "ideal" angle for the crossover (i.e., the relative angle of the other helix to which it is connecting) and the crossover's current angle. The roll is set so as to minimize this total strain across all crossovers in each helix.
Commits
- 2b11342: bumped version (David Doty) #267
- 49867e3: Merge branch 'dev' into 257-automatically-set-helix-rolls-based-on-crossover-locations-relax-the-rolls (David Doty) #264
- 123e001: closes #257: automatically set Helix rolls based on crossover locations (relax the rolls) (David Doty) #264
- 5208be3: fixed some unit tests (David Doty) #264
- c370a1f: Update scadnano.py (David Doty) #264
- c26dbe6: fixed dependencies (David Doty) #266
- 62c5dd5: changed unit test versions for openpyxl and tabulate to versions matching what is in Anaconda package repository (David Doty) #266
- 7b963c5: added instructions for installing openpyxl and tabulate to README (David Doty) #266
- f45d3f0: fixes #234: export new Excel format (David Doty) #266
- 3da4763: added openpyxl to tests_require (David Doty) #266
- c177ef0: added openpyxl installation to docs-check GitHub action (David Doty) #266
- 50899e3: Merge branch 'dev' into 257-automatically-set-helix-rolls-based-on-crossover-locations-relax-the-rolls (David Doty) #264
- Python
Published by github-actions[bot] almost 3 years ago
scadnano - v0.18.0
Release notes
BREAKING CHANGE: label type is now str
Strands, domains, loopouts, and extensions have a field label. Previously the declared type was arbitrary, though at runtime it was required to be JSON-serializable.
Now we have changed the type of label field in Strand, Domain, Loopout, and Extension to str instead of an arbitrary object.
This is a breaking change because existing code using non-string labels will have to be altered to change the data to a string before storing and change it back to structured data when reading.
If you would like to store "structured data" (e.g., lists or dicts) in the label, you can serialize to a string and deserialize back to structured data manually using the json package.
Before, this was possible:
```python from typing import List
previously was possible, now is not supported
nums = [1, 2, 3] strand.label = nums # stores strand.label as the list [1, 2, 3]; would be a mypy type error now
and to get the structured data back out:
nums: List[int] = strand.label # would be a mypy type error now ```
Now this is necessary to store a list of int's in the label:
```python import json from typing import List
nums = [1, 2, 3] strand.label = json.dumps(nums) # stores strand.label as the string '[1, 2, 3]'
and to get the structured data back out:
nums: List[int] = json.loads(strand.label) # nums is now the list [1, 2, 3] ```
added p8634 variant of M13
There is a variant of M13 mentioned in a few papers (e.g., https://doi.org/10.1038/s41565-023-01365-8) called "p8634". It can be obtained from Tilibit (though not listed on their website). This sequence is now available as a predefined sequence. See https://scadnano-python-package.readthedocs.io/en/latest/#scadnano.M13Variant.p8634
Commits
- d955eda: bumped version (David Doty) #258
- 2f58b2b: updated docstrings (David Doty) #258
- 0a482a7: Update scadnano.py (David Doty) #258
- c55411e: Update scadnano.py (David Doty) #258
- fca673a: added test generated by GitHub Copilot (David Doty) #258
- 3e84a38: changed docstring for
Design.base_pairs(David Doty) #258 - fc2176b: added examples (David Doty) #258
- 7b0603b: changed to LR newlines (David Doty) #258
- 01c43e3: added p8634 variant of M13 (David Doty) #258
- 0678d55: formatting (David Doty) #258
- e8211db: fixed PyCharm warnings (David Doty) #258
- 602575d: closes #261: change
labeltype tostr(David Doty) #262 - a292757: removed all string type hints and replaced with forward references (not supported in Python 3.6) (David Doty) #262
- Python
Published by github-actions[bot] almost 3 years ago
scadnano - v0.17.7
Release notes
new method Design.base_pairs()
This method returns a dict mapping helix idx's where base pairs exist to a list of offsets where those base pairs are.
Domain/Extension/Loopout colors
Individual Domain's, Extension's, and Loopout's now have a color field. If specified, then this overrides the field Strand.color in the display. There is also a new method StrandBuilder.with_domain_color():
```python helices = [sc.Helix(max_offset=100) for _ in range(4)] design = sc.Design(helices=helices, grid=sc.square)
red = sc.Color(255, 0, 0) darkred = sc.Color(150, 0, 0) green = sc.Color(0, 255, 0) darkgreen = sc.Color(0, 150, 0) blue = sc.Color(0, 0, 255) dark_blue = sc.Color(0, 0, 150) black = sc.Color(0, 0, 0)
design.drawstrand(0, 0) \
.extension5p(numbases=5).withdomaincolor(red) \
.move(8).withdomaincolor(green) \
.loopout(1, 5).withdomaincolor(darkblue) \
.move(-8).withdomaincolor(darkred) \
.cross(2) \
.move(8).withdomaincolor(darkgreen) \
.cross(3) \
.move(-8) \
.extension3p(numbases=5).withdomaincolor(black) \
.with_color(blue)
```

Commits
- 5586c9f: bumped version (David Doty) #256
- 6463865: closes #252: add method
Design.base_pairs()(David Doty) #254 - fec6f43: changed return type of
Design.base_pairs()to dict and addedallow_mismatchesparameter (David Doty) #254 - e795627: fixed unit tests after updating
with_sequenceandwith_domain_sequenceto default to not assigning complement (David Doty) #254 - 6b6001a: removed unused _popleft() function (David Doty) #254
- e55609d: Update scadnano.py (David Doty) #256
- afc44b8: don't put Helix idx in base_pairs dict if Helix has no base pairs (David Doty) #256
- 1049cdc: fixed base pair calculation to allow for deletions/insertions/wildcards/None if DNA sequence is not assigned (David Doty) #256
- e6c0737: added unit test for no base pairs (David Doty) #256
- f81b8ff: Update scadnano_tests.py (David Doty) #256
- 7b83a43: fixed bug in
Design.base_pairs()when no reverse domains on helix (David Doty) #256 - 5312a59: Update scadnano_tests.py (David Doty) #256
- 1b7e605: closes #238: Domain colors (David Doty) #255
- fea3b32: added example with domain colors (David Doty) #256
- Python
Published by github-actions[bot] over 3 years ago
scadnano - v0.17.6
Release notes
Two big updates:
- support Extensions in oxDNA export (#240); note it can have problems with large extensions between two close domains, see #253
- preliminary oxView export (#173)
Commits
- 5cfa122: fixed docstrings for
Extension(David Doty) #250 - 9b0d3e3: Update scadnano.py (David Doty) #250
- f84594e: Update scadnano.py (David Doty) #250
- 04a4e9d: Update scadnano.py (David Doty) #250
- 4ae1d93: formatting (David Doty) #250
- 357a59a: updated extensions example (David Doty) #241
- b477328: closes #240: support Extensions in oxDNA export (David Doty) #241
- 895469e: fix bug in assigning DNA sequence to strand bound to another strand with an extension (David Doty) #250
- 897f66d: fixed bug in oxDNA export when extension has no DNA sequence (David Doty) #250
- d1c38b9: Add add_extension to file creation (Constantine Evans) #247
- 1400ade: add test (Constantine Evans) #247
- d9160d6: Initial oxview export implementation (Constantine Evans) #246
- 176811f: Add documentation. (Constantine Evans) #246
- a823fee: Add tests. (Constantine Evans) #246
- 7086a55: probably-working, probably-bad bp implementation (Constantine Evans) #246
- 39b29c0: Tests for bp (Constantine Evans) #246
- 6f95338: add mismatch exclusion (Constantine Evans) #246
- ed71923: added method
Design.add_helix(David Doty) #250 - d32537b: swapped order of
directoryandfilenameinDesign.write_scadnano_file(David Doty) #250 - b0fee20: changed default display angle to 35 to match Web interface default (David Doty) #250
- 400cc3e: bumped version (David Doty) #250
- b9912ee: drop Python 3.6 on unit tests, add 3.10 and 3.11 (David Doty) #250
- 2c3b85f: adding quotes to python versions to try to fix pip install error on github actions (David Doty) #250
- e133772: fixed unit test to ensure helix max offset is sufficiently large (David Doty) #250
- 03d54ae: fixed unit test to ensure helix max offset is sufficiently large (David Doty) #250
- 931f22d: delete temp file manually in unit test for oxDNA export to avoid error where it cannot be read while open for writing (David Doty) #250
- 8e78237: added example of oxDNA export of extension and loopouts (David Doty) #250
- Python
Published by github-actions[bot] over 3 years ago
scadnano - v0.17.5
Several small bug fixes, plus one big new feature:
Introducing DNA Extension API
This feature is supported on the web interface dev branch (https://scadnano.org/dev) at the time of this writing, and in the next release will be on the stable server (https://scadnano.org). See https://github.com/UC-Davis-molecular-computing/scadnano/issues/34#issuecomment-1241023201
DNA Extensions can now be represented. This gives a nice way to specify toeholds and other single-stranded extensions common in DNA strand displacement designs, which are single-stranded (unlike most Domains on a Helix) but are at the end of a strand (unlike a Loopout that is flanked by two Domains on a Strand).
They can be created using the Extension class. See full API here: https://scadnano-python-package.readthedocs.io/en/latest/#scadnano.Extension
```python import scadnano as sc
domain = sc.Domain(helix=0, forward=True, start=0, end=10) lefttoehold = sc.Extension(numbases=6) righttoehold = sc.Extension(numbases=5) strand = sc.Strand([lefttoehold, domain, righttoehold]) ```
They can also be created with chained method calls (see https://scadnano-python-package.readthedocs.io/en/latest/#scadnano.StrandBuilder.extension3p and https://scadnano-python-package.readthedocs.io/en/latest/#scadnano.StrandBuilder.extension5p)
```python import scadnano as sc
design = sc.Design(helices=[sc.Helix(maxoffset=10)]) design.drawstrand(0,0).extension5p(6).move(10).extension3p(5) ```
Commits
- c8a8970: Update scadnano.py (David Doty) #237
- d482066: fixed docstring with string literal
'\n\n'(David Doty) #237 - 03f1142: closes #228: option to export cadnano with no whitespace (David Doty) #229
- f25a28f: added
with_deletionsandwith_insertionsmethods toStrandBuilderand used them in unit tests (David Doty) #237 - 00451a8: added check for deletion/insertion in range in
StrandBuilder.with_deletionsandStrandBuilder.with_insertions(David Doty) #237 - 4e60f9b: Add UT for chained methods for DNA extensions (Benjamin Lee) #230
- 78c716d: Add TestExportCadnanoV2.test_extension (Benjamin Lee) #230
- f16b629: Use self.design_6helix for extension chain method tests (Benjamin Lee) #230
- 2cdf023: Add move extension move test (Benjamin Lee) #230
- 28b0ded: Add extension ligate test (Benjamin Lee) #230
- a0170e9: Add crossover test (Benjamin Lee) #230
- e8725cc: testaddfullcrossoveronextensionerror (Benjamin Lee) #230
- 738979b: testaddhalfcrossoveronextensionok (Benjamin Lee) #230
- 3615afb: testaddhalfcrossoveronextensionerror (Benjamin Lee) #230
- 2feed8a: testnickon_extension (Benjamin Lee) #230
- 1433022: testfromjsonextensiondesign (Benjamin Lee) #230
- de44f47: testtojsonextensiondesign (Benjamin Lee) #230
- e06ac96: Add "relative_offset" field (Benjamin Lee) #230
- d2f1afb: teststrandwithrelative_offset (Benjamin Lee) #230
- faa0a33: teststrandwithrelativeoffsetondomainerror and teststrandwithrelativeoffsetonemptyerror (Benjamin Lee) #230
- a1601b7: teststrand3pextensionforwarddefaultrelativeoffset (Benjamin Lee) #230
- daad677: teststrand5pextensionforwarddefaultrelativeoffset (Benjamin Lee) #230
- 4c459ea: teststrand3pextensionreversedefaultrelativeoffset (Benjamin Lee) #230
- 0941030: teststrand5pextensionreversedefaultrelativeoffset (Benjamin Lee) #230
- 8f48617: Implement 3' extension (Benjamin Lee) #230
- 5574331: Implement 5p extension (Benjamin Lee) #230
- 8b6c060: Raise StrandError in as_circular if strand contains Extension (Benjamin Lee) #230
- 04b25df: Add 5p_extension test case for circular strand (Benjamin Lee) #230
- 6a2c101: Start docstring for extension (Benjamin Lee) #230
- fdbdf1c: Begin replacing extension -> extension3p and add extension5plength argument to drawstrand (Benjamin Lee) #230
- 3048af8: Redo teststrand3pextension (Benjamin Lee) #230
- 0e4c694: Redo teststrand5pextension (Benjamin Lee) #230
- b8077c6: delete default relative_offset tests (Benjamin Lee) #230
- 122445c: In to, check for 3' extension; fixed some tests (Benjamin Lee) #230
- c45b916: Check for extension in cross (Benjamin Lee) #230
- cd8edaf: Fix teststrandcrossafter3pextensionshouldraise_error (Benjamin Lee) #230
- 68466c8: Pass teststrandextension3pafterloopoutshouldraise_error (Benjamin Lee) #230
- de3175c: Pass teststrandextension3pafterextensionshouldraise_error (Benjamin Lee) #230
- 173fc34: Pass teststrandupdatetoafter3pextensionshouldraiseerror (Benjamin Lee) #230
- 5610cf8: Pass teststrandextension3poncircularstrandshouldraiseerror (Benjamin Lee) #230
- 185d097: Extension name, label, and sequence (Benjamin Lee) #230
- 43e06bf: Remove relative_offset and ExtensionBuilder (Benjamin Lee) #230
- 9b9e401: Fix some json and cadnano tests (Benjamin Lee) #230
- 819d0d8: Implement Extension from_json, and fix bug with default color from json (Benjamin Lee) #230
- 860be06: Implement Extension.tojsonserializable (Benjamin Lee) #230
- 06fe222: Fix nick,ligate,and crossover tests (Benjamin Lee) #230
- 2b485be: Add ligate and half crossover error cases (Benjamin Lee) #230
- 63fbd53: Fix middle domain bug in ligate (Benjamin Lee) #230
- 4a2023a: Handle ligate and crossover error case (Benjamin Lee) #230
- a27bcc7: Merge branch 'dev' into 2-support-loopouts-on-the-end-of-a-strand (Benjamin Lee) #230
- 75e4740: fixed errors in plate map documentation (David Doty) #237
- 996e59b: Update tutorial.md (David Doty) #237
- bb152cd: Add docstring for Extension (Benjamin Lee) #230
- d52f6ce: Add docstrings for rest of Extension fields and functions (Benjamin Lee) #230
- 25b3c56: fixes #231: Design.addfullcrossover and Design.addhalfcrossover should check for existing crossovers (David Doty) #232
- 33b027a: added unit tests for addhalfcrossover (David Doty) #232
- 290a8db: added example of consecutive crossovers to examples/ directory and added Address information to error message when calling
Design.add_full_crossover(David Doty) #237 - 0f61dd4: added example of how to assign
StrandBuilderinstance to a variable to use loops to specify a long strand with its methods (David Doty) #237 - c24fbb7: Update README.md (David Doty) #237
- da0b087: added link to method
Design.draw_strandin README when discussingStrandBuilder(David Doty) #237 - 8b52060: Set Position3D as frozen (Constantine Evans) #233
- 63da326: Update README.md (Dave Doty) #237
- 3d1b025: Update scadnano.py (Dave Doty) #237
- a158621: fixed some documentation and added constants for
display_angleanddisplay_lengthforExtension(David Doty) #237 - 73cd06c: added extensions example (David Doty) #237
- 380321e: updated extensions example (David Doty) #237
- f23b5f8: fixed oxDNA export bug that made length-0 normal vectors (David Doty) #237
- 9c93c1a: added no_git examples subfolder for examples that I don't want on the git repo (David Doty) #237
- 36e1725: fixed issue where getnormalvector_to was being calculated incorrectly and loopout normal vectors weren't being normalized (Daniel Hader) #236
- 62f626d: bumped version (David Doty) #237
- bd63724: bumped version (David Doty) #237
- b1ff5b8: bumped version (David Doty) #237
- 20f50d5: fixed unit tests (David Doty) #237
- badd6b4: fixed last unit test (David Doty) #237
- Python
Published by github-actions[bot] almost 4 years ago
scadnano - v0.17.3
Release notes
allow other table formats besides Markdown in Design.plate_maps
In a jupyter notebook cell, put this code:
```python import scadnano as sc
helices = [sc.Helix(maxoffset=100)] design = sc.Design(helices=helices, strands=[], grid=sc.square) design.drawstrand(0, 0).move(10).withname('strand 0').withidt(plate='plate 1', well='A1') design.drawstrand(0, 10).move(10).withname('strand 1').withidt(plate='plate 1', well='A2') design.drawstrand(0, 20).move(10).withname('strand 2').withidt(plate='plate 1', well='B2') design.drawstrand(0, 30).move(10).withname('strand 3').withidt(plate='plate 1', well='B3') design.drawstrand(0, 40).move(10).withname('strand 4').withidt(plate='plate 1', well='D7')
from IPython.display import display, Markdown def dm(o): display(Markdown(o))
platemap = design.platemaps()[0] dm(platemap.totable(tablefmt='html', vertical_borders=True)) ```
It should render

The returned HTML uses inline styles to ensure there are vertical borders between columns of the table. The vertical borders make it easier to see which column a well is in. This is useful when rendering in a Jupyter notebook, since the inline styles will be preserved when saving the Jupyter notebook using the nbconvert tool: https://nbconvert.readthedocs.io/en/latest/
Any format supported by the tabular package is supported as tablefmt for the method PlateMap.to_table(). See API for more details: https://scadnano-python-package.readthedocs.io/en/latest/#scadnano.PlateMap.to_table
allow Design.plate_maps parameter well_marker to be function of well position
This code (note that strands do not require a name if using well_marker)
```python import scadnano as sc
helices = [sc.Helix(maxoffset=100)] design = sc.Design(helices=helices, strands=[], grid=sc.square) design.drawstrand(0, 0).move(10).withidt(plate='plate 1', well='A1') design.drawstrand(0, 10).move(10).withidt(plate='plate 1', well='A2') design.drawstrand(0, 20).move(10).withidt(plate='plate 1', well='B2') design.drawstrand(0, 30).move(10).withidt(plate='plate 1', well='B3') design.drawstrand(0, 40).move(10).with_idt(plate='plate 1', well='D7')
platemap = design.platemaps()[0] print(platemap.totable(well_marker=lambda x:x)) ```
prints
```
plate "plate 1"
| | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | |:----|:----|:----|:----|:----|:----|:----|:----|:----|:----|:-----|:-----|:-----| | A | A1 | A2 | | | | | | | | | | | | B | | B2 | B3 | | | | | | | | | | | C | | | | | | | | | | | | | | D | | | | | | | D7 | | | | | | | E | | | | | | | | | | | | | | F | | | | | | | | | | | | | | G | | | | | | | | | | | | | | H | | | | | | | | | | | | | ```
Commits
- 1efd9ad: Closes #149; store DNA sequence in domains and loopouts, not in strand (#223) (Benjamin Lee) #223
- 9e1a287: corrected docstring for
Design.draw_strand(David Doty) #226 - 243562d: Update scadnano.py (David Doty) #226
- 7ed1610: Update tutorial.md (David Doty) #226
- f9e10b6: Update tutorial.md (David Doty) #226
- 45bf3ed: Update tutorial.md (David Doty) #226
- 48f6b54: Update tutorial.md (David Doty) #226
- 6610ef3: Update tutorial.md (David Doty) #226
- d6aa2ba: Update tutorial.md (David Doty) #226
- 0addd6d: Update tutorial.md (David Doty) #226
- 9ab30af: Update tutorial.md (David Doty) #226
- b09632f: Update scadnano.py (David Doty) #226
- 3fd2a86: Update scadnano.py (David Doty) #226
- e9ab4bc: Update scadnano.py (David Doty) #226
- 7d9764b: added documentation about idtdnasequence in docstring for
Strand.dna_sequenceproperty. (David Doty) #225 - 1150ea0: closes #224: allow other table formats besides Markdown in
Design.plate_mapsand closes #222: allowDesign.plate_mapsparameterwell_markerto be function of well position (David Doty) #225 - 9ec66bb: added tabulate as dependency to tests (David Doty) #225
- 08bbf35: Update scadnano.py (David Doty) #226
- 2fb3d35: bumped version (David Doty) #226
- Python
Published by github-actions[bot] about 4 years ago
scadnano - v0.17.2
Release notes
Change modification connector length
This mainly affects how modifications are viewed in the web interface.
You can now change the length of the modification connector. The connector is drawn like a hydrocarbon chain with a default of 4 links:

The base class Modification now has a connector_length field: https://scadnano-python-package.readthedocs.io/en/latest/#scadnano.Modification.connector_length. Setting it will modify the displayed connector length in the web interface.
This is especially helpful to display modifications close to each other on a helix without their text overlapping:

Plate maps
You can now print a plate map of all or some of the strands in the design that have Strand.idt.plate and Strand.idt.well specified.
For example, the following code:
```python import scadnano as sc
helices = [sc.Helix(maxoffset=100)] design = sc.Design(helices=helices, strands=[], grid=sc.square) design.drawstrand(0, 0).move(10).withname('strand 0').withidt(plate='plate 1', well='A1') design.drawstrand(0, 10).move(10).withname('strand 1').withidt(plate='plate 1', well='A2') design.drawstrand(0, 20).move(10).withname('strand 2').withidt(plate='plate 1', well='B2') design.drawstrand(0, 30).move(10).withname('strand 3').withidt(plate='plate 1', well='B3') design.drawstrand(0, 40).move(10).withname('strand 4').withidt(plate='plate 1', well='D7')
platemaps = design.platemapsmarkdown(wellmarker='X', strands=[design.strands[0], design.strands[3]])
platemaps = design.platemapsmarkdown() platemap = platemaps['plate 1'] print(platemap) ```
prints the following Markdown representation of the plate:
```
plate 1
| | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | |-----|----------|----------|----------|-----|-----|-----|----------|-----|-----|------|------|------| | A | strand 0 | strand 1 | | | | | | | | | | | | B | | strand 2 | strand 3 | | | | | | | | | | | C | | | | | | | | | | | | | | D | | | | | | | strand 4 | | | | | | | E | | | | | | | | | | | | | | F | | | | | | | | | | | | | | G | | | | | | | | | | | | | | H | | | | | | | | | | | | | ```
One can specify only a subset of strands, and use a different entry than the strand's name:
python
plate_maps = design.plate_maps_markdown(well_marker='X', strands=[design.strands[0], design.strands[3]])
which prints ```
plate 1
| | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | |-----|-----|-----|-----|-----|-----|-----|-----|-----|-----|------|------|------| | A | X | | | | | | | | | | | | | B | | | X | | | | | | | | | | | C | | | | | | | | | | | | | | D | | | | | | | | | | | | | | E | | | | | | | | | | | | | | F | | | | | | | | | | | | | | G | | | | | | | | | | | | | | H | | | | | | | | | | | | | ```
method Design.strand changed to Design.draw_strand
The method Design.strand is not well-named. It has been changed to Design.draw_strand. The method Design.strand still exists for now but is deprecated. It prints a warning that it is deprecated and then simply calls Design.draw_strand.
Commits
- 5051e87: added some detail about unique IDs to Modification docstring (David Doty) #221
- dde8d5c: Update scadnano.py (David Doty) #221
- 020631d: fixes #212: change length of modification "connector" (David Doty) #213
- ca2522d: added parameter warnduplicatestrand_names to scadnano and oxdna export (David Doty) #221
- 35d0e56: Update scadnano.py (David Doty) #221
- 13d11f5: Solving the bug pointed by testcrossovertosamehelix.json (Tristan Stérin) #214
- cce904c: stap_loop -> stapLoop (Tristan Stérin) #215
- 6fe6447: Update scadnano.py (David Doty) #221
- 2c88d95: fixed bug in JSON serialization of IDT fields and made PlateCoordinate public (though still undocumented) (David Doty) #221
- ddd841d: closes #210: generate plate map (David Doty) #216
- ea9357a: added strands and wellmarkers parameters to platemaps_markdown to enable a subset of strands to be put in the plate map, and to enable the table to contain another marker besides the strand name such as an X (David Doty) #216
- 1a8aa53: updated docstrings for platemapsmarkdown (David Doty) #221
- b330d3c: Bug is fixed (Tristan Stérin) #217
- 6170f98: Bug is fixed (Tristan Stérin) #217
- 9d9538d: closes #219: change
Design.strandtoDesign.draw_strand(David Doty) #220 - 11702b2: added back method
Design.strand(David Doty) #220 - 4f8c28c: removed several docstring references to deprecated method
Design.strand(David Doty) #220
- Python
Published by github-actions[bot] over 4 years ago
scadnano - v0.16.3
fixed bug in oxDNA export
We fixed a bug (#188) in oxDNA export that made the helix roll go the opposite rotational direction from where it should have been.
handling paranemic crossovers in cadnano export
The previous cadnano export did not correctly handle paranemic crossovers (#185): crossovers that join domains going in the same direction:

Commits
- ce5163a: bumped version (David Doty) #191
- c83501f: changed .conf to .dat file extension in oxDNA export (David Doty) #191
- a5b3ad1: Update scadnano.py (David Doty) #191
- 309a8c1: Update scadnano.py (David Doty) #191
- 686abfc: fixed bug with file writing methods that allow use to specify optional filename with no extension (David Doty) #191
- 337fd1b: Bug fix helix number was badly set in cadnano export (Tristan Stérin) #189
- a474796: Adding cases in cadnanov2placecrossover for paranemic crossovers (Tristan Stérin) #189
- 865b947: Un-ignoring test file (Tristan Stérin) #189
- 18aee03: Un-ignoring test file (Tristan Stérin) #189
- e128a3a: Merge branch 'dev' into bugparanemiccrossovers (Cosmo Stérin) #189
- bf1a5e7: fixed sign error causing roll to be applied in the wrong direction (Daniel Hader) #190
- 447c999: fixes #188 (Daniel Hader) #190
- Python
Published by github-actions[bot] almost 5 years ago
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.
Commits
- f01be0f: corrected bad forward vector in oxDNA export that caused DNA origami to melt upon relaxation in oxDNA (Daniel Hader) #183
- 7bee4b1: updated oxDNA export to use cubic bounding box (taking all three sides to be max of computed bounding box) (David Doty) #187
- a4af148: bumped version (David Doty) #187
- cf18744: added Python 3.9 to list of versions unit tested on GitHub CI action (David Doty) #187
- Python
Published by github-actions[bot] almost 5 years ago
scadnano - v0.16.1
New features:
export to oxDNA
See #139. There is now a method Design.writeoxdnafiles() that can write files representing the scadnano Design readable by the tool oxDNA and the web app oxView.
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 (pitch, yaw, roll) orientation angles. oxDNA can be used to simulate physical stress and motion to predict an expected 3D structure.
You can also call Design.tooxdnaformat() to get the two strings that are written to the two oxDNA files when calling Design.writeoxdnafiles().
export to IDT plates rebalances strands among last two plates if the last plate has too few strands
See #177. Calling Design.writeidtplateexcelfile() will now rebalance strands in the last two plates if necessary to ensure that each plate has the minimum required not to be charged extra by IDT. (24 strands for a 96-well plate, and 96 strands for a 384-well plate)
Commits
- 312e761: Implemented oxdna export, but still need to add unit tests (Benjamin Lee) #179
- 37d4795: fixed bug where headers of conf file where not written (untested) (David Doty) #179
- a77e695: Bug fix and cleanup of oxdna conversion functions and very basic unit test case (Daniel Hader) #179
- d59c22d: added note to top of README that relative links won't work on PyPI site (David Doty) #182
- 72137fd: Added Oxdna unit tests and additional comments (Anelise Cho) #179
- 4cb98a2: Fixed OxDNA export issue where insertions would throw error, finished OxDNA export loopout unit test (Anelise Cho) #179
- 3d62c92: Update scadnano_tests.py (Anelise Cho) #179
- 49a259e: fixed Sphinx docstring error due to *'s being interpreted as emphasis (David Doty) #179
- e6a9c8d: updated variable names in oxDNA export code (David Doty) #182
- 1937acd: removed some PEP and mypy warnings and bumped version (David Doty) #182
- 52a2a5e: fix purification/scale typo in toidtbulkinputformat (Constantine Evans) #180
- c9401f7: closes #177; export to IDT plates rebalances strands among last two plates if the last plate has too few strands (David Doty) #181
- 92699a7: updated IDT Excel export API documentation to discuss rebalancing among last two plates to ensure minimum strand count (David Doty) #181
- 1f0d2c5: Update CONTRIBUTING.md (David Doty) #182
- 7f8f336: Update CONTRIBUTING.md (David Doty) #182
- c6dcd00: Update CONTRIBUTING.md (David Doty) #182
- 4c8b0e0: Update CONTRIBUTING.md (David Doty) #182
- f996834: closes #139 (not this commit actually, but I want this to show up in the release notes) (David Doty) #182
- Python
Published by github-actions[bot] almost 5 years ago
scadnano - v0.16.0
Breaking Changes
Helix.pitch and Helix.yaw have been removed
The fields Helix.pitch and Helix.yaw has been removed to ensure that all helices within a HelixGroup are parallel.
If you want to set pitch and yaw for a helix, put them into a HelixGroup with the desired pitch/yaw.
```python
old
helix = sc.Helix(pitch=90)
new
pitch90helixgroup = sc.HelixGroup(pitch=90) helix = sc.Helix(group='pitch90') ```
Note that the name of a HelixGroup, such as 'pitch90' above, is not stored in the HelixGroup itself, but is the key in the map Design.groups.
If you want to look up pitch and yaw of a helix, use design.pitch_of_helix or design.yaw_of_helix respectively:
python
pitch = design.pitch_of_helix(helix)
yaw = design.yaw_of_helix(helix)
which returns the pitch and yaw of helix's HelixGroup.
Helix.roll is still a valid field. Use design.roll_of_helix to compute the roll of the helix added to the roll specified in its HelixGroup:
python
roll = design.roll_of_helix(helix)
grid fields are of type Grid, not str or None
Library now checks that grid fields are of type Grid, not str or None. This will break existing code that was manually passing in strings for the grid parameter.
Commits
- [a1ee18b]: bumped version to 0.15.2 (David Doty) #175
- [60a07da]: remove debug print hello (Constantine Evans) #165
- [e322fbe]: Fixes #163; Remove Helix.pitch and Helix.yaw (#166) (Benjamin Lee) #166
- [bccc3ad]: added docstring to Strand.idtdnasequence and stub for tooxdnaformat (David Doty) #175
- [860ae9a]: Encoder indent suppression: str.replace → re.sub (fixes #170) (Constantine Evans) #171
- [93a8135]: add optional parameter suppressindent to method Design.writescadnano_file; closes #170 (David Doty) #175
- [1f0a233]: Fix Sphinx warning on idtdnasequence (Benjamin Lee) #172
- [8ca07f9]: fixed indenting on idtdnasequence docstring to suppress Sphinx warning (David Doty) #175
- [da1eadd]: fixed writescadnanofile and to_json docstrings (David Doty) #175
- [418d4b5]: Merge branch 'dev' into dev-fix-sphinx-warning (David Doty) #172
- [f0fbe53]: updated Sphinx to add view code option, and put type hints in parameter and return description (David Doty) #175
- [cad6674]: fixed some docstrings and autoformatted code (David Doty) #175
- [73bb35d]: fixed PEP warnings (David Doty) #175
- [35b33aa]: fixes #168: ensure grid fields are of type Grid, not str or None (David Doty) #175
- [7f1f591]: Update tutorial.md (David Doty) #175
- [737570e]: Redirect workflow from master to main (Benjamin Lee) #175
- [08ecf96]: Fixes #176; Rewrite doc test (Benjamin Lee) #178
- Python
Published by github-actions[bot] about 5 years ago
scadnano - v0.15.1
Not much new, mainly this release is to alter the documentation to clarify that scadnano is a separate project from cadnano.
Commits
- [fb249d8]: bumped version to 0.15.1 (David Doty) #162
- [6ce55c2]: added to README note clarifying difference between scadnano and cadnano, and table of contents (David Doty) #162
- [cb09bfa]: added to API documentation note clarifying difference between scadnano and cadnano (David Doty) #162
- [bed7b3c]: Update tutorial.md (David Doty) #162
- [05e76b9]: updated API docs to link from assignm13to_scaffold method to M13Variant enumerated type (David Doty) #162
- Python
Published by github-actions[bot] over 5 years ago
scadnano - v0.15.0
BREAKING CHANGE: The field Strand.idt.name has been removed. Since each Strand now has a name field, that is used instead. So replace this:
```python
old
idt = IDTFields(name='staple1', plate='plate1', well='A1') strand = Strand(domains=[domain], idt=idt) ```
with this:
```python
new
idt = sc.IDTFields(plate='plate1', well='A1') strand = sc.Strand(domains=[domain], idt=idt, name='staple1') ```
and replace this:
```python
old
design.strand(0,0).move(8).with_idt(name='staple1', scale='25nm') ```
with this:
```python
new
design.strand(0,0).move(8).withname('staple1').withidt(scale='25nm') ```
Commits
- [449f516]: updated docstrings (David Doty) #161
- [658e9e4]: closes #154; re-make tutorial; The tutorial is now up-to-date with scadnano features as of Dec. 2020. (David Doty) #161
- [30cbfcc]: Update tutorial.md (David Doty) #161
- [6a3dea8]: Update tutorial.md (David Doty) #161
- [4a122e9]: added note about offsets being inclusive for half crossovers (David Doty) #161
- [1de2aa8]: Update tutorial.md (David Doty) #161
- [2c2cb1e]: Update tutorial.md (David Doty) #161
- [a5969f0]: Update tutorial.md (David Doty) #161
- [7c03a5d]: Update tutorial.md (David Doty) #161
- [1c09d6f]: Update tutorial.md (David Doty) #161
- [c4ea9c0]: added note explaining type hints in tutorial (David Doty) #161
- [77f3a05]: Update tutorial.md (David Doty) #161
- [0fe9bf6]: added screenshot of Excel file to tutorial (David Doty) #161
- [a563263]: Update tutorial.md (David Doty) #161
- [3254605]: closes #159; remove IDT name field; now Strand.name is the official name of the strand; bumped minor version since this is a breaking change (David Doty) #160
- [b096e5d]: updated installation instructions to indicate how to test if scadnano was installed successfully (David Doty) #161
- [cfb2ffd]: Update README.md (David Doty) #161
- Python
Published by github-actions[bot] over 5 years ago
scadnano - v0.14.0
Exporting IDT files with default values for idt fields no longer requires first modifying the Strand.idt field
It is no longer necessary to modify the design to set the field Strand.idt in each Strand before calling the methods that export DNA sequences in IDT-formatted files. For staple strands with no idt field, a reasonable default for each value will be chosen.
So it is now possible to do this:
```python import scadnano as sc
design = sc.Design(helices=[sc.Helix(maxoffset=100) for _ in range(2)], grid=sc.square) design.strand(0, 0).move(8).cross(1).move(-8) design.strand(0, 16).move(-8).cross(1).move(8) design.assigndna(strands[0], 'A'16) design.assign_dna(strands[1], 'C'16)
before the change, the next line would have skipped writing the two strands since they have no idt field set,
now, reasonable defaults are used, without requiring the side-effect of writing the field Strand.idt
design.writeidtplateexcelfile()
to skip exporting strands that lack an idt field, specify the parameter onlystrandswith_idt
below, only the newly added strand with T's will be exported; the previous two will not
design.strand(0, 24).move(8).cross(1).move(-8).withidt('onlystrandtoexport') design.assigndna(strands[2], 'T'*16) design.writeidtplateexcelfile(onlystrandswithidt=True) ```
This implies several changes in the API
BREAKING CHANGE: Changed the export methods so that, by default (with no parameters specified), they behave differently. In particular, now by default they will export DNA sequences for all staple strands (i.e., non-scaffold), using the
idtfield of the Strand if it is present, and otherwise using reasonable defaults, the same defaults that previously were stored in the Strand by callingStrand.set_default_idt().BREAKING CHANGE: Removed the following:
- field
Strand.use_default_idt - method
Strand.set_default_idt() - method
Design.set_default_idt() - parameter
use_idt_defaultsin functionorigami_rectangle.create()Now, if you want to set a Strand to have anidtfield, it must be explicit, although theIDTFieldsconstructor only requires anameparameter, so it's as easy asstrand.idt = IDTFields('name_of_strand')if you are happy with the defaults for otheridtfields such asidt.purification.
- field
BREAKING CHANGE: Removed parameter
warning_on_non_idt_strandsfrom the IDT export methods onDesign. Now, you can either ask those methods to skip exporting Strands lacking anidtfield by setting the parameteronly_strands_with_idtto True, or let all (non-scaffold) strands be exported by settingonly_strands_with_idtto False (the default).Added parameter
export_scaffoldto DNA sequence export methods to allow the scaffold(s) to be exported (False by default).
Crossover class and bulk Design.add_crossovers method removed
- BREAKING CHANGE: (This one is unrelated to exporting IDT files; it is related to the circular strands implemented in v0.13.4.) Since circular strands make it easier to use the
Design.add_half_crossoverandDesign.add_full_crossovermethods, we have removed the methodDesign.add_crossoversand the typeCrossover. Previously, that method helped avoid creating circular strands by allowing one to build up a list of Crossovers and add them in bulk, where adding them one at a time would have resulted in an intermediate circular strand, even if the final result had all linear strands. Now that circular strands are supported, this is no longer needed. The recommended method of adding many crossovers at once is simply to callDesign.add_half_crossoverand/orDesign.add_full_crossoverrepeatedly, i.e., replace
python
crossovers = [
Crossover(helix=0, helix2=1, offset=16, forward=True, half=True),
Crossover(helix=0, helix2=1, offset=24, forward=False, half=True),
Crossover(helix=2, helix2=3, offset=32, forward=True),
Crossover(helix=2, helix2=3, offset=40, forward=False),
]
design.add_crossovers(crossovers)
with this instead:
python
design.add_half_crossover(helix=0, helix2=1, offset=16, forward=True)
design.add_half_crossover(helix=0, helix2=1, offset=24, forward=False)
design.add_full_crossover(helix=2, helix2=3, offset=32, forward=True)
design.add_full_crossover(helix=2, helix2=3, offset=40, forward=False)
Commits
- [d2e924c]: closes #111: writeidtplateexcelfile uses reasonable defaults even when some strands have no IDT field set; bumped version (David Doty) #157
- [b52a046]: updated examples to fully type annotate all functions and avoid name shadowing in if name=="main" blocks (David Doty) #157
- [87a47d5]: fixed bug where scaffold property being lost when joining two strands (at least one of which was scaffold)by crossover; also reworked writeidtplateexcelfile to work properly with default idt name if idt fields are not present in some strands (David Doty) #157
- [b17a6a1]: minor documentation and identifier name updates (David Doty) #157
- [c6620df]: cleaned up old links in package docstring (David Doty) #157
- [e23f361]: re-ran examples after last commit (David Doty) #157
- [0667935]: inlined creation of empty design in tutorial script (David Doty) #157
- [424f478]: Update scadnano.py (David Doty) #157
- [dd63418]: made Loopout generic type parameterized by DomainLabel (David Doty) #157
- [7574058]: Update scadnano.py (David Doty) #157
- [9e32cd4]: fixed documentation of Strand.rotate_domains (David Doty) #157
- [3da17ec]: Merge branch 'dev' into writeidtplateexcelfile-uses-reasonable-defaults (David Doty) #157
- Python
Published by github-actions[bot] over 5 years ago
scadnano - v0.13.4
Circular strands
Circular strands are now supported. (See #14.) 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 #2. In particular, this means a circular strand must have at least one crossover; it cannot be all loopouts linking the domains.
However, circular strands are convenient for the intermediate steps of a design, allowing one to add crossovers and join strands by ligation without worrying whether it will create a circular strand. But it is recommended, particular 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.
Strand DNA sequence export order
Previously, when exporting DNA sequences, they would be export in whatever order the strands appear in the Design. Now, there are a few reasonable options to choose from. See #147.
Commits
- [f524a56]: closes #147: allow row-major and column/major order of export of strands (David Doty) #156
- [481d966]: updated unit tests (David Doty) #156
- [76b4b64]: fixed documentation of hex coordinate system (David Doty) #156
- [a1e7467]: fixed documentation of hex coordinate system (David Doty) #156
- [9d1ac96]: fixed documentation of Loopout to say they are not allowed on ends of Strand, and added example of creating one with chained method calls. (David Doty) #156
- [4b13ef2]: closes #14; add support for circular Strands (David Doty) #152
- [893075f]: fixed docstring errors and bumped version (David Doty) #152
- [7f5d3c9]: updated addhalfcrossover and add_nick to handle circular strands (David Doty) #153
- [84db6a8]: added ligate method to design and associated unit tests (David Doty) #156
- [4a7dd1d]: added unit tests for nicking on circular strand with 3 domains and a loopout, nicking on all three domains (David Doty) #156
- [8eda390]: Update scadnano_tests.py (David Doty) #156
- [c58b832]: modified circular strand example script to have length 8 domains (David Doty) #156
- [5b1d084]: bumped version to match web interface (David Doty) #156
- [22d446e]: updated tutorial script (still not completely in line with #154, however, since issue #111 still need to be implemented) (David Doty) #156
- [5f91962]: Modifications not needed in circular example (Cosmo) #155
- [4ee5e28]: Importing circular strands from cadnano to scadnano is now functional. Two tests added: which come from cadnano Autostaple's output (Cosmo) #155
- [6e27f5f]: Exporting designs with circular strands is working, un ignoring testsinputs/cadnanov2_export as some .sc files are not generated but directly read by the tests (Cosmo) #155
- [675b542]: fixed mypy and PEP errors in cadnano import/export code (David Doty) #155
- Python
Published by github-actions[bot] over 5 years ago
scadnano - v0.13.0
Breaking Change: Swap x and z coordinates
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 only using the web interface, you shouldn't see any change. But Python scripts that specify (x,y,z) coordinates will need to be updated to swap the roles of x and z.
If you are curious why this was done, read here: https://github.com/UC-Davis-molecular-computing/scadnano/issues/488
Commits
- [c6385f0]: Fixes #138; add Python 3.6 CI tests (Benjamin Lee) #140
- [0546749]: Fixes #125; CI checks for docs and PyPI packaging (Benjamin Lee) #141
- [76a85be]: Remove misplaced name field (Benjamin Lee) #141
- [8699cb7]: Remove publish from task name for clarity (Benjamin Lee) #141
- [b137c80]: added FAM, ROX, and Fluorescein modifications; added code to automatically population field Modification.id with Modification.idt_text if latter is specified and former is not (David Doty) #146
- [7486223]: fixed error in setting Modification.id from Modification.idt_text (David Doty) #146
- [b6f75d4]: included everything in modifications and origami_rectangle when importing scadnano (David Doty) #146
- [61ba537]: updated defaults for Design.setdefaultidt (David Doty) #146
- [11d6606]: fixed some mypy errors, and added uniquenames argument to setdefault_idt to break with cadnano's naming convention and ensure strand names are unique (David Doty) #146
- [11d9d67]: changed default IDT purification with modifications from PAGE to HPLC (David Doty) #146
- [c24784f]: added code to import IDT fields from JSON, along with unit tests (David Doty) #146
- [ecf5ced]: Adds PR to CI workflow (Benjamin Lee) #143
- [0bd0082]: Remove push events from CI workflow (Benjamin Lee) #143
- [8787c6d]: Update README.md (David Doty) #146
- [0e5b323]: corrected relative link to .sc file in tutorial (David Doty) #146
- [2ad4868]: Fixes #144; swap position x z coordinate interpretation (Benjamin Lee) #145
- [34d24fe]: Rewrite none-grid example scripts for #144 (Benjamin Lee) #145
- [a2a31f6]: Update proposal example for #144 (Benjamin Lee) #145
- [3382247]: updated docstrings for Position3D (David Doty) #146
- [10eca78]: updated StrandBuilder docstrings (David Doty) #146
- [1c36eeb]: Update scadnano.py (David Doty) #146
- [b91ef99]: reverted previous edit of docstrings (David Doty) #146
- [a94102c]: fixed erroneous reference to method to() to be move() (David Doty) #146
- Python
Published by github-actions[bot] over 5 years ago
scadnano - v0.12.2
For Python 3.6, dataclasses backport library is now automatically installed when installing via pip.
The README still contains instructions for installing it manually, in case a user wants to simply download the scadnano.py file to use with Python 3.6. But they should be updated to emphasize that it is unnecessary to install it manually when installing scadnano via pip.
Commits
- [1102804]: Adding installation instruction for python dataclasses for Python 3.6 (Cosmo) #135
- [1999445]: Require python 3.6 min (Cosmo) #135
- [2061a9f]: added instructions about commit messages to CONTRIBUTING; bumped version (David Doty) #137
- Python
Published by github-actions[bot] over 5 years ago
scadnano - v0.12.1
cadnano export upgraded
Can now export to cadnano from design that uses multiple helix groups.
rotate domains
Added method Strand.rotate_domains allowing domains to be "rotated" on a strand. Think of it like adding a crossover between the 5' and 3' ends, and removing another crossover.
type hints
Beefed up type hints, in particular making type variables StrandLabel and DomainLabel for the types of strand labels and domain labels, allowing Design, Strand, and Domain to be parameterized by them, so that a static type checker such as mypy will catch errors such as
python
domain: Domain[str] = Domain(label=123) # error
domain2: Domain[str] = Domain(label='123') # fine
domain2.label = 123 # error
Also got rid of all previous mypy type errors.
Commits
- [41a7f70]: updated paper URL now that DNA 2020 paper is published (David Doty) #136
- [304e120]: added rotate_domains method to Strand to "rotate" domains of strand (i.e., like adding a crossover between the 5' and 3' ends, and removing another crossover) (David Doty) #136
- [b7e41d0]: Design.writescadnanofile now warns if a Loopout is the first or last substrand on a Strand (still allowed in intermediate designs) (David Doty) #136
- [903510d]: fixed all mypy warnings; closes #109 (David Doty) #136
- [b2012e9]: fixed mypy warnings in origami_rectangle (David Doty) #136
- [a3248bc]: made Design, Strand and Domain generic parameterized by StrandLabel and DomainLabel. Made strand label not indented in serialized JSON (David Doty) #136
- [080bf6d]: added example with domains names (some mismatching) (David Doty) #136
- [a2a6b07]: updated names example to have more kinds of mismatches (David Doty) #136
- [27baee2]: annotated variable to quiet mypy (David Doty) #136
- [c5bdb1c]: Update namesdomainsstrands.py (David Doty) #136
- [9b54b1e]: Export code supports helix groups and associated unittest. test6helixbundlehoneycomb restored. (Cosmo) #133
- [4d62212]: Export code supports helix groups and associated unittest. test6helixbundlehoneycomb restored. (Cosmo) #133
- [399f905]: Export code supports helix groups and associated unittest. test6helixbundlehoneycomb restored. (Cosmo) #133
- [6233075]: Export code supports helix groups and associated unittest. test6helixbundlehoneycomb restored. (Cosmo) #133
- [a274a98]: Forcing the add of test6helixbundlehoneycomb.sc which was ignored (Cosmo) #133
- [3753e36]: Correct type annotation (Cosmo) #133
- [627d45b]: Correcting syntax error (Cosmo) #133
- [db82d47]: bumped version (David Doty) #136
- Python
Published by github-actions[bot] over 5 years ago
scadnano - v0.12.0
Optional field name now supported in Strand, Domain, and Loopout.
The domain/loopout name is displayed (optionally) in the scadnano web interface main view. The strand name is displayed on mouseover, in the tooltip that pops up, and if "backbone mode" is selected, in the footer at the bottom of the page.
All three are also used with the dsd DNA sequence designer (not public yet).
Commits
- [3ebcb86]: added move (relative offset) chained method to README (David Doty) #131
- [eb7563f]: added link to json.dumps documentation in docstrings for Loopout.label and Domain.label (David Doty) #131
- [ca482ba]: added parameter
check_lengthto Design.assign_dna that enforces the sequence is exactly the length of the Strand/Domain being assigned (David Doty) #131 - [2afc921]: added optional name fields to Strand, Domain, and Loopout; these are used now instead of 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) (David Doty) #131
- [db5d31f]: bumped version to 0.12.0 (David Doty) #131
- [5bec304]: removed _version.py file (David Doty) #131
- Python
Published by github-actions[bot] almost 6 years ago
scadnano - v0.11.2
Added loopout labels. Now you can do this:
python
(design.strand(0, 0).to(8)
.loopout(1, 4).with_domain_label('loopout label')
.to(0))
Commits
- [ed0ea3b]: removed example; made StrandBuilder._strand private and added getter that raiases exception if Strand has not been created yet (David Doty) #130
- [23d5a1c]: fixed unit test after changing indenting JSON behavior if Helix.position is specified (David Doty) #130
- [9a969ce]: added loopout labels; bumped version (David Doty) #130
- Python
Published by github-actions[bot] almost 6 years ago
scadnano - v0.11.1
The main new feature is a method StrandBuilder.move and parameter move in the existing methods StrandBuilder.cross and StrandBuilder.loopout. move is like to, but is a relative offset rather than an absolute offset.
For example, to make a strand that, starting at helix 0, offset 123, goes 8 bases forward, then crosses over to the same offset on helix 1 and goes 16 bases in reverse, then crosses over to helix 2 (but the crossover jumps 2 offsets back), then goes 10 bases forward:
python
(design.strand(0, 123)
.move(8)
.cross(1)
.move(-16)
.cross(2, move=-2)
.move(10))

where the parameter to the method move, as well as the parameter named move, are relative to the current offset. This is equivalent to the more cumbersome absolute offsets with to:
python
(design.strand(0, 123)
.to(131)
.cross(1)
.to(115)
.cross(2, offset=113)
.to(123))
Commits
- [37db033]: updated tutorial with correct parameter names for Crossover constructor (David Doty) #129
- [0808d88]: fixed code display in docstrings (David Doty) #129
- [2499733]: added move method to StrandBuilder and move parameter to StrandBuilder.cross and StrandBuilder.loopout to enable relative (instead of absolute) specification of offsets when creating Domains through chained methodso (David Doty) #129
- [0b43e14]: added examples; bumped version (David Doty) #129
- [4760354]: fixed unit test now that positions are automatically created in Helix when grid is None (David Doty) #129
- Python
Published by github-actions[bot] almost 6 years ago
scadnano - v0.11.0
Note there are two breaking changes:
removed helixtemplate and numhelices from Design constructor. This feature wasn't carrying its weight, given the complexity it introduced to parse optional parameters in the
Designconstructor. It's simple enough to simply type something likepython helices=[Helix(idx=idx, <other properties you want>) for idx in range(num_helices)]removed
major_tick_distancefromDesign. Similarly, this feature wasn't carrying its weight and REALLY complicated parsing optional parameters. To assign the samemajor_tick_distanceto everyHelix, simply give the same value in everyHelixconstructor, e.g.,python helices=[Helix(idx=idx, major_tick_distance=10) for idx in range(num_helices)]
Commits
- [b9e7eb6]: ensures default helices view order is assigned properly in each helix group (David Doty) #128
- [6874906]: BREAKING CHANGE: removed helixtemplate and numhelices from Design constructor (David Doty) #128
- [419caeb]: bumped version for breaking change (removed helixtemplate and numhelices from Design constructor parameters) (David Doty) #128
- [e7e223f]: ignoring .sc files in testsinputs/cadnanov2_export directory (David Doty) #128
- [fb78aa1]: BREAKING CHANGE: removed majortickdistance from Design (David Doty) #128
- [d36d457]: added example with helix groups (David Doty) #128
- [507c601]: closes #104; add support for Helix.majortickstart and Helix.majortickperiodic_distances (David Doty) #128
- [3f59e6d]: re-ran examples to produce latest version (David Doty) #128
- [107b677]: removed DomainLabel and StrandLabel as types in typing hints (David Doty) #128
- [dceefc1]: fixes #126; fix bug where strands are not always assigned a color (David Doty) #128
- Python
Published by github-actions[bot] almost 6 years ago
scadnano - v0.10.3
This was mainly to test some functionality with auto-generating docs and PyPI releases.
Commits
- [42e6fbd]: fixed version-finding function in setup.py (David Doty) #124
- [2e81a57]: moved version up closer to top of scadnano.py (David Doty) #124
- [ab79777]: removed print statement from setup.py (David Doty) #124
- [a2c4763]: Update conf.py (David Doty) #124
- Python
Published by github-actions[bot] almost 6 years ago
scadnano - v0.10.2
Introduces Helix groups in preparation for implementing them in the web interface: https://github.com/UC-Davis-molecular-computing/scadnano/issues/249
Helix groups allow groups of helices to be grouped and given their own position, orientation, and grid, to help with designs where not all helices are parallel.
Commits
- [acd4e81]: Update README.md (David Doty) #123
- [f5bbd38]: updated version in test files (David Doty) #123
- [05db22d]: removed in_browser test from examples and re-ran with new version (David Doty) #122
- [24bd68e]: closes #121; introduces Helix groups to allow groups of helices to be grouped and given their own position, orientation, and grid, to help with designs where not all helices are parallel (David Doty) #122
- [299e9ea]: removed _version.py so it only needs to be specified in scadnano.py (David Doty) #123
- [631c1f3]: minor docstring changes (David Doty) #123
- Python
Published by github-actions[bot] almost 6 years ago
scadnano - v0.10.1
Mostly documentation was updated.
Commits
- [018fdf8]: added CONTRIBUTING doc (David Doty) #119
- [ac3de4e]: removed bad link to images of checks pending/passing (from web repo) (David Doty) #119
- [3871de6]: made contributing a subheader (David Doty) #119
- [b908561]: Update CONTRIBUTING.md (David Doty) #119
- [a601ea5]: added screenshot showing how to download raw Python file from GitHub (David Doty) #119
- [b5849b9]: changed .dna extension to .sc in README and tutorial (David Doty) #119
- [fbe4c20]: lined up tutorial example source code (David Doty) #119
- [56a5564]: replaced --> with → in tutorial (David Doty) #119
- [66db277]: in tutorial, changed mistaken references from .py files to .sc files (David Doty) #119
- [e287a88]: added link to API in tutorial (David Doty) #119
- [edadadc]: in tutorial explained why we use add_strand, and changed default rotation for assigning M13 to 5587 from 5588 (David Doty) #119
- [8c9daf6]: updated relative links in README and tutorial (David Doty) #119
- [4b27c51]: added explanation in tutorial for why you need to manually reload .sc file after making changes with scripting library locally (David Doty) #119
- [6b78b81]: removed local variable scaffold in tutorial code (David Doty) #119
- [dfe38fa]: added detail to tutorial about automatically adding nicks when calling addfullcrossover (David Doty) #119
- [068162a]: changed title in README (David Doty) #119
- [ae2c223]: Update README.md (David Doty) #119
- [96fadf9]: removed incorrect word "literal" from docstrings (David Doty) #119
- [7266c62]: corrected reference to StrandBuilder methods in docstrings (David Doty) #119
- [97e133c]: updated README to be explicit about what steps are needed for pip install and what is troubleshooting (David Doty) #119
- [cab05a4]: added link to PYTHONPATH documentation in README (David Doty) #119
- [3e17fb0]: separated out installation instructions for Python from pip in README (David Doty) #119
- [b15a33d]: Update README.md (David Doty) #119
- [256bcb0]: bumped version (David Doty) #119
- Python
Published by github-actions[bot] almost 6 years ago
scadnano - v0.10.0
BREAKING CHANGE: The name of the class DNADesign has been changed to Design. You will have to update scripts to reflect this new name. From now on, it would be good practice to name local variables design instead of dna_design, for instance. I found it was common for novices to abbreviate these as only dna, which is confusing since that could be DNA sequence, for example.
Also, the default file extension has been changed from .dna to .sc. Most short file extensions are taken, but in this case, the most popular for .dna is SnapGene, which is software for biological DNA, and for .sc, it's SuperCollider, a music synthesis tool. There's much less chance that we'll be confused with SuperCollider than SnapGene. However, the web interface still recognizes .sc, .dna, and .json as file extensions for scadnano files that can be opened using the Menu->Load option, or dragged from a file browser onto the web browser with scadnano open.
Commits
- [bb8d62d]: updated name of function from main() to create_design() in example script in README (David Doty) #118
- [6db03e8]: changed name of function main() to create_design() in tutorial (David Doty) #118
- [b4548da]: modified intro to README (David Doty) #118
- [d0b58d2]: updated tutorial to link directly to raw design file (David Doty) #118
- [f87b219]: fixes #110; updated default file extension from .dna to .sc (David Doty) #118
- [5f9bf45]: closes #91; BREAKING CHANGE: change DNADesign class name to Design (David Doty) #118
- Python
Published by github-actions[bot] almost 6 years ago
scadnano - v0.9.10
Not much changed; this release was to test the automated publishing of the package to PyPI through a new GitHub Action.
Commits
- [a0e9f7f]: updated installation instructions with detailed pip cases (David Doty) #115
- [358e389]: corrected grammar in README (David Doty) #115
- [d8249ae]: updated README instructions on using Python 3.6 (David Doty) #115
- [4992423]: Setup workflow to publish to PyPI (Benjamin Lee) #114
- [a3e6b1c]: bumped version to test automated package updating on PyPI (David Doty) #115
- [b3a880e]: Append python publish to release workflow (Benjamin Lee) #116
- Python
Published by github-actions[bot] almost 6 years ago
scadnano - v0.9.9
This release supports Python version 3.6, if the dataclasses backport package is also installed. See the installation instructions for details.
Commits
- [c2b3b1d]: removed
<ins>tag from README (for underlining name of paper) since PyPI doesn't recognize it (David Doty) #112 - [54f0e12]: added note to README that relative links do not work when viewing on PyPI (David Doty) #112
- [385fb29]: added mypy directory to .gitignore, added squarenut design to examples, updated README on using Python 3.6, and fixed a few mypy warnings in scadnano.py (David Doty) #112
- [8be2817]: to support Python 3.6, replaced forward annotations with pre-3.7 string-based hack; bumped version (David Doty) #112
- [054a8bf]: updated examples to v0.9.9 (David Doty) #112
- Python
Published by github-actions[bot] almost 6 years ago
scadnano - v0.9.7
Just trying to test out some new repo settings. Note the version number is not updated in the source code because I forgot. The next version will fix that.
Commits
- [57a1eae]: changed comment on riseperbase_pair (David Doty) #105
- [a081e59]: fixed newline in README (David Doty) #105
- [12ff50d]: removed requirements.txt (David Doty) #105
- [a4d2bcd]: added CODEOWNERS for protected branches PR review requests (David Doty) #105
- [dff2ec8]: added very large origami example (David Doty) #105
- [58bb6bc]: fixed example code in README to reference design.scaffold (David Doty) #105
- [85d0f9d]: changed to relative links to Python files in installation by download method in README, so viewing the README in another branch will link to the version in that branch (David Doty) #105
- Python
Published by github-actions[bot] almost 6 years ago
scadnano - v0.9.4
Commits
- [128baa0]: ignoring dist/ directory from now on (where PyPI .tar.gz files are created) (David Doty) #98
- [0b830a2]: removed dist/ directory from tracking (David Doty) #98
- [c3e2c12]: add withdomainlabel for method chaining; closes #93 (David Doty) #98
- [18ba037]: corrected README link to writeidtplateexcelfile (David Doty) #98
- [8d86dff]: updated citation for paper from arXiv to DNA 26 (David Doty) #98
- [fed5149]: bumped version (David Doty) #98
- Python
Published by github-actions[bot] almost 6 years ago
scadnano - v0.9.2
This is the first release that has automated release notes, but since the previous one didn't they weren't automatically generated. Future releases should be automatically documented here. I'm manually pasting in changes from PR #96
@dave-doty changed name of parameters in Crossover, addhalfcrossover, and add… … 6a4d537 …fullcrossover @dave-doty fixed name shadowing bug 0a93dbd @dave-doty cleaned up docstrings ffdd62f @dave-doty cleaned up docstrings d33dbae @dave-doty replaced parameter names in calls to add*crossover 9dc504f @dave-doty added code to check for overlapping domains in postinit of Strand 0426e10 @dave-doty fixes #85: allow chained commands for less verbose way to add Strands to DNADesign f36d223 @dave-doty added a few chained methods for modifying strands 534fc8a @dave-doty updated docstrings aa0e16d @dave-doty cleaned up docstrings bfe6150 @dave-doty cleaned up some PEP warnings 7ef61cf @dave-doty closes #87: add chained command for adding new domain on current helix b10e6ee @dave-doty fixes #92: make ColorCycler part of DNADesign 5b001fa @dave-doty added Kelly colors, but not using them yet 700c95a @dave-doty closes #84: add Geometry parameters field to DNADesign 033529f @dave-doty closes #90: custom extension in writescadnanofile 2849caa @dave-doty closes #86: support domain labels, strand labels 6c67b5a @dave-doty closes #88: add StrandBuilder.withdomainsequence 0462097 @dave-doty updated docstrings fb38cb9 @dave-doty cleaned up docstrings b6bc810 @dave-doty removed note about web interface in tutorial since none of the menus … … 8c66ac0 …are shown @dave-doty moved Python code from web interface README to here 30a60db @dave-doty minor c8b3a21 @dave-doty reordered sections af09199 @dave-doty changed section title 056ad56 @dave-doty changed name of zstep to riseperbasepair. 9f9a013 @dave-doty modified example with many DNA modifications to have every combinatio… … 1dc9479 …n of modifications on forward and reverse strands, on both helices, to help with testing "invert y axis" view option in web interface. @UnHumbleBen Create release.yml 3d4f93b @dave-doty changed name of zstep to riseperbase_pair in unit tests 5742687
- Python
Published by github-actions[bot] almost 6 years ago
scadnano -
removed forward and reverse helper variables from scadnano. So you'll have to replace this:
```python import scadnano as sc
domain1 = sc.Domain(0, sc.forward, 0, 10) domain2 = sc.Domain(0, sc.reverse, 0, 10) ```
with this
```python import scadnano as sc
domain1 = sc.Domain(0, True, 0, 10) domain2 = sc.Domain(0, False, 0, 10) ```
- Python
Published by dave-doty almost 6 years ago
scadnano -
Breaking change: Changed name of Helix.position3d to Helix.position
Changed documentation explaining meaning of Helix.position to match new interpretation in scadnano of how it translates to side view and main view display, for issue #78, which swaps the role of Helix.position.x and Helix.position.z.
The Python library itself did not do any such translation, but scripts will have to be re-written to change x and z to display properly in the scadnano web interface once issue https://github.com/UC-Davis-molecular-computing/scadnano/issues/307 is closed.
- Python
Published by dave-doty almost 6 years ago
scadnano -
Removed need to have xlwt installed if downloading the scadnano.py file and importing locally, unless an Excel file needs to be written.
- Python
Published by dave-doty almost 6 years ago
scadnano -
Removed support for Helix.rotation and Helix.rotation_anchor.
Removed pitch, roll, and yaw from Helix.position, and made them top-level fields in Helix.
See https://github.com/UC-Davis-molecular-computing/scadnano/blob/master/README.md for description of current data model.
- Python
Published by dave-doty about 6 years ago
scadnano -
changed Substrand to Domain. This is a breaking change and requires naming some types, methods, and keywrod arguments.
- Python
Published by dave-doty about 6 years ago
scadnano -
removed DNAOrigamiDesign. Now there is only DNADesign. To make it an origami, called setscaffold() on one strand, or set isscaffold=True in the Strand constructor.
- Python
Published by dave-doty over 6 years ago
scadnano -
added ability to make helices non-consecutive. file format saved from this version on will be non-backward compatible, since helices can have an optional idx field not recognized by earlier versions.
- Python
Published by dave-doty over 6 years ago
scadnano -
First release of scadnano Python package.
- Python
Published by dave-doty over 6 years ago