def decodeFile(filename, document=None): with io.open(filename, 'r', encoding='utf-8') as fd: nno_dict = json.load(fd) if document is None: document = Document() decode(document, nno_dict) return document
def main(argv=None): global VERBOSE args = process_args(argv) VERBOSE = args['verbose'] or 0 # Get sequence(s): seqs = load_seq(args) # What to export: export_criteria_list = get_export_criteria_list(args) if VERBOSE > 1: print("export criteria list:") print(yaml.dump(export_criteria_list)) for cadnano_file in args["cadnano_files"]: # folder = os.path.realpath(os.path.dirname(cadnano_file)) # "141105_longer_catenane_BsoBI-frag_offset6nt.json" design = os.path.splitext(os.path.basename(cadnano_file))[0] staples_outputfn = args["output"].format(design=design, cadnano_file=cadnano_file, seqfile=args["seqfile"]) if not ok_to_write_to_file(staples_outputfn, args): print("Aborting staple file write for file", cadnano_file) continue print("\nLoading design:", design) doc = Document() with open(cadnano_file) as fp: nno_dict = json.load(fp) decode(doc, nno_dict) print(cadnano_file, "loaded!") part = get_part(doc) apply_sequences(part, seqs, offset=args.get("offset")) # global offset export_oligo_seqs(part, csvfilepath=staples_outputfn, criteria_list=export_criteria_list)
def finishInit(self): global decodeFile global Document global DocumentController from cadnano.document import Document from cadnano.fileio.decode import decodeFile from cadnano.controllers.documentcontroller import DocumentController from cadnano.views.pathview import pathstyles as styles styles.setFontMetrics() doc = Document() self._document = self.createDocument(base_doc=doc) if os.environ.get('CADNANO_DISCARD_UNSAVED', False) and not self.ignoreEnv(): self.dontAskAndJustDiscardUnsavedChanges = True self.dontAskAndJustDiscardUnsavedChanges = True util.loadAllPlugins() if self.argns.interactive: print("Welcome to cadnano's debug mode!") print("Some handy locals:") print("\ta\tcadnano.app() (the shared cadnano application object)") print("\td()\tthe last created Document") def d(): return self._document print("\tw()\tshortcut for d().controller().window()") def w(): return self._document.controller().window() print("\tp()\tshortcut for d().selectedInstance().reference()") def p(): return self._document.selectedInstance().reference() print("\tpi()\tthe PartItem displaying p()") def pi(): part_instance = self._document.selectedInstance() return w().pathroot.partItemForPart(part_instance) print("\tvh(i)\tshortcut for p().reference().getStrandSets(i)") def strandsets(id_num): return p().reference().getStrandSets(id_num) print("\tvhi(i)\tvirtualHelixItem displaying vh(i)") def vhi(id_num): partitem = pi() return partitem.vhItemForIdNum(id_num) print("\tquit()\tquit (for when the menu fails)") print("\tgraphicsItm.findChild() see help(pi().findChild)") interact('', local={'a': self, 'd': d, 'w': w, 'p': p, 'pi': pi, 'vhi': vhi, })
def main(): #Initialize cadnano app = cadnano.app() doc = app.document = Document() FILENAME = 'PFD_2hb_loop' INPUT_FILENAME = '../../cadnano-files/' + FILENAME + '.json' OUTPUT_FILENAME_1 = '../../cadnano-files/carbs_output/' + FILENAME + '_RB.gsd' OUTPUT_FILENAME_2 = '../../cadnano-files/carbs_output/' + FILENAME + '_CG.gsd' PICKLE_FILE = 'data/origami_relaxed.pckl' RELAX = False doc.readFile(INPUT_FILENAME) #Parse the structure for simulation new_origami = origami.Origami() new_origami.part = doc.activePart() new_origami.list_oligos() new_origami.initialize_nucleotide_matrix() new_origami.find_skips() new_origami.create_oligos_list() new_origami.get_connections() new_origami.assign_nucleotide_types() new_origami.incorporate_skips() new_origami.assign_nucleotide_connections() new_origami.cluster_into_bodies() new_origami.parse_skip_connections() new_origami.calculate_quaternions_from_positions() #Start relaxation simulation if RELAX == True: relax_simulation = RBSimulation.RigidBodySimulation() relax_simulation.origami = new_origami relax_simulation.initialize_relax_md() relax_simulation.initialize_particles() relax_simulation.create_rigid_bodies() relax_simulation.create_bonds() relax_simulation.set_initial_harmonic_bonds() relax_simulation.set_lj_potentials() relax_simulation.dump_settings(OUTPUT_FILENAME_1, 1) relax_simulation.run(1) relax_simulation.update_positions_and_quaternions() relax_simulation.save_to_pickle(PICKLE_FILE) #Start coarse-grained simulation elif RELAX == False: cg_simulation = CGSimulation.CGSimulation() cg_simulation.parse_origami_from_pickle(PICKLE_FILE) cg_simulation.initialize_cg_md() cg_simulation.initialize_particles() cg_simulation.initialize_system() cg_simulation.create_adjacent_bonds() cg_simulation.set_harmonic_bonds() cg_simulation.set_dihedral_bonds() cg_simulation.set_lj_potentials() cg_simulation.dump_settings(OUTPUT_FILENAME_2, 1) cg_simulation.run(2)
def finishInit(self): global decode global Document global DocumentController from cadnano.document import Document from cadnano.fileio.nnodecode import decode from cadnano.gui.controllers.documentcontroller import DocumentController from cadnano.gui.views import styles doc = Document() self.d = self.newDocument(base_doc=doc) styles.setFontMetrics() os.environ['CADNANO_DISCARD_UNSAVED'] = 'True' ## added by Nick if os.environ.get('CADNANO_DISCARD_UNSAVED', False) and not self.ignoreEnv(): self.dontAskAndJustDiscardUnsavedChanges = True if os.environ.get('CADNANO_DEFAULT_DOCUMENT', False) and not self.ignoreEnv(): self.shouldPerformBoilerplateStartupScript = True util.loadAllPlugins() if "-i" in self.argv: print("Welcome to cadnano's debug mode!") print("Some handy locals:") print("\ta\tcadnano.app() (the shared cadnano application object)") print("\td()\tthe last created Document") def d(): return self.d print("\tw()\tshortcut for d().controller().window()") def w(): return self.d.controller().window() print("\tp()\tshortcut for d().selectedPart()") def p(): return self.d.selectedPart() print("\tpi()\tthe PartItem displaying p()") def pi(): return w().pathroot.partItemForPart(p()) print( "\tvh(i)\tshortcut for p().virtualHelix(i)") def vh(vhref): return p().virtualHelix(vhref) print( "\tvhi(i)\tvirtualHelixItem displaying vh(i)") def vhi(vhref): partitem = pi() vHelix = vh(vhref) return partitem.vhItemForVH(vHelix) print("\tquit()\tquit (for when the menu fails)") print("\tgraphicsItm.findChild() see help(pi().findChild)") interact('', local={'a':self, 'd':d, 'w':w,\ 'p':p, 'pi':pi, 'vh':vh, 'vhi':vhi,\ })
def test_create_adjacent_bonds_with_skip(self): PICKLE_FILE = '/Users/damasceno/Documents/1_work/2_codes/carbs/carbs/tests/data/skip_2hb.test.pckl' app = cadnano.app() doc = app.document = Document() cg_simulation = CGSimulation.CGSimulation() cg_simulation.parse_origami_from_pickle(PICKLE_FILE) cg_simulation.initialize_cg_md() cg_simulation.initialize_particles() cg_simulation.initialize_system() cg_simulation.create_adjacent_bonds() assert len(cg_simulation.system.bonds) == 110
def decodeFile(filename, document=None, emit_signals=False): with io.open(filename, 'r', encoding='utf-8') as fd: nno_dict = json.load(fd) if document is None: from cadnano.document import Document document = Document() if 'format' not in nno_dict: if os.path.splitext(filename)[1] == '.c25': c25decode.decode(document, nno_dict, emit_signals=emit_signals) else: v2decode.decode(document, nno_dict, emit_signals=emit_signals) else: v3decode.decode(document, nno_dict, emit_signals=emit_signals) return document
def finishInit(self): global decodeFile global Document global DocumentController from cadnano.document import Document from cadnano.fileio.decode import decodeFile from cadnano.controllers.documentcontroller import DocumentController from cadnano.views.pathview import pathstyles as styles styles.setFontMetrics() doc = Document() self._document = self.createDocument(base_doc=doc) if os.environ.get('CADNANO_DISCARD_UNSAVED', False) and not self.ignoreEnv(): self.dontAskAndJustDiscardUnsavedChanges = True self.dontAskAndJustDiscardUnsavedChanges = True
def __init__(self, cnjsonpath: str, sequence:str) -> None: super(CadnanoDocument, self).__init__() self.cnjsonpath = cnjsonpath app = cadnano.app() doc = app.document = Document() with redirect_stdout(sys.stderr): doc.readFile(cnjsonpath) self.part = part = doc.activePart() self.part_props = part_props = part.getModelProperties().copy() self.vh_order = part_props['virtual_helix_order'] self.vh_props, self.vh_origins = part.helixPropertiesAndOrigins() self.vh_radius = part.radius() self.max_vhelix_length = max(self.vh_props['length']) self.insertions, self.skips = self.getInsertionsAndSkips() self.sequence_applied = False self.max_oligo_length = 0 self.applySequenceToSameLengthOligos(sequence)
def test_pickle_creation(self): #Initialize cadnano app = cadnano.app() doc = app.document = Document() INPUT_FILENAME = 'data/skip_2hb.test.json' PICKLE_FILE = 'data/skip_2hb.test.pckl' assert os.path.exists(INPUT_FILENAME) == True if os.path.exists(PICKLE_FILE): os.remove(PICKLE_FILE) doc.readFile(INPUT_FILENAME) #Parse the structure for simulation new_origami = origami.Origami() new_origami.part = doc.activePart() new_origami.list_oligos() new_origami.initialize_nucleotide_matrix() new_origami.find_skips() new_origami.create_oligos_list() new_origami.get_connections() new_origami.assign_nucleotide_types() new_origami.incorporate_skips() new_origami.assign_nucleotide_connections() new_origami.cluster_into_bodies() new_origami.parse_skip_connections() relax_simulation = RBSimulation.RigidBodySimulation() relax_simulation.origami = new_origami relax_simulation.initialize_relax_md() relax_simulation.initialize_particles() relax_simulation.create_rigid_bodies() relax_simulation.create_bonds() relax_simulation.set_initial_harmonic_bonds() relax_simulation.set_lj_potentials() relax_simulation.run(1e1) relax_simulation.update_positions() relax_simulation.save_to_pickle(PICKLE_FILE) assert os.path.exists(PICKLE_FILE) == True
def __init__(self, cnjsonpath: str) -> None: super(CadnanoDocument, self).__init__() self.cnjsonpath = cnjsonpath app = cadnano.app() doc = app.document = Document() doc.readFile(cnjsonpath) self.part = part = doc.activePart() self.part_props = part_props = part.getModelProperties().copy() self.vh_order = part_props['virtual_helix_order'] self.vh_props, self.vh_origins = part.helixPropertiesAndOrigins() self.vh_radius = part.radius() self.max_vhelix_length = max(self.vh_props['length']) # Determine part coordinate boundaries xLL, yLL, xUR, yUR = part.getVirtualHelixOriginLimits() # print(xLL, yLL, xUR, yUR) self.slice_width = xUR - xLL + self.vh_radius * 8 self.slice_height = yUR - yLL + self.vh_radius * 6 self.x_offset = self.slice_width / 2 self.y_offset = self.slice_height / 2
#!/usr/bin/env python3 # bare_bones_example.py # Shawn M Douglas, April 2017 # BSD-3 open-source license import cadnano from cadnano.document import Document app = cadnano.app() doc = app.document = Document() doc.readFile('myfile.json') part = doc.activePart() oligos = part.oligos() for oligo in oligos: print("{0}\t{1}\t\'{2}\'\t{3}".format(oligo, oligo.length(), oligo.getColor(), oligo.sequence())) vhs = list(part.getIdNums()) # convert set to list for vh_id in vhs[:3]: # display first 3 vhs fwd_ss, rev_ss = part.getStrandSets(vh_id) print('VH{0}'.format(vh_id)) print('\t', fwd_ss, '\t', [s.idxs() for s in fwd_ss.strands()], '\n\t\t\t\t', [s.getColor() for s in fwd_ss.strands()]) print('\t', rev_ss, '\t', [s.idxs() for s in rev_ss.strands()], '\n\t\t\t\t', [s.getColor() for s in rev_ss.strands()])
def __init__(self): # Document import must be here so as to allow for GUI tests to be run from cadnano.document import Document self.document = Document()
def main(): # Parse command-line arguments parser = argparse.ArgumentParser( description= 'Convert cadnano2.5 file into legacy json format, if possible.') parser.add_argument("-i", "--input", help="source cadnano file", metavar='FILENAME', required=True) parser.add_argument("-o", "--output", help="destination json file", metavar='FILENAME') args = parser.parse_args() # Check input file exists src_file = args.input if not path.exists(src_file): sys.exit("Input file {0} not found".format(src_file)) # Determine output filename if args.output: dest_file = args.output else: # Use a timestamped derivative of input filename timestamp = "{:%y%m%d.%H%M%S}".format(datetime.now()) src_ext = path.splitext(src_file) dest_file = '.'.join([src_ext[0], timestamp, 'json']) if (src_file == dest_file): sys.exit( "Please choose an output that doesn't match the input filename") print("Reading {0}, will export to {1}".format( colored(src_file, 'yellow'), colored(dest_file, 'yellow'))) # Basic init app = cadnano.app() doc = app.document = Document() # Read input design doc.readFile(src_file) part = doc.activePart() oligos = part.oligos() # We want to perform some operations on the scaffold and staples. # First, we need references to the corresponding oligos within the data model. # We can just hard-code a location we know is in the scaffold start_vh = 0 start_strandset = 0 # 0 is forward (drawn 5->3 on top), 1 is reverse (3'<-5' on bottom) start_idx = 22 scaf_start = (start_vh, start_strandset, start_idx) scaf_oligo = part.getOligoAt(*scaf_start) # unpack the tuple with * # For fun we might guess that the scaffold is simply the longest oligo oligos_sorted_by_length = sorted(oligos, key=lambda x: x.length(), reverse=True) longest_oligo = oligos_sorted_by_length[0] staple_oligos = oligos_sorted_by_length[1:] print("> Does the longest oligo contain %s?" % str(scaf_start), 'green', colorBool(longest_oligo == scaf_oligo)) printInfo("Splitting circular oligos...") circular_oligos = part.getCircularOligos() if circular_oligos: printInfo("Breaking circular oligos...") for circ_oligo in circular_oligos: strand5p = circ_oligo.strand5p() strand3p = strand5p.connection3p() part.removeXover(strand5p, strand3p) printInfo("Splitting long oligos...") # Naively break staples at xovers using greedy algorithm min_split_len = 35 # break oligos longer than this for staple in staple_oligos: unbroken_length = staple.length() strand_lengths = staple.getStrandLengths() split_idxs = [] next_strand_len = 0 num_bases_used = 0 for nbases in strand_lengths: next_strand_len += nbases num_bases_used += nbases if min_split_len < next_strand_len and num_bases_used < unbroken_length: split_idxs.append(num_bases_used) next_strand_len = 0 if split_idxs: staple.splitAtAbsoluteLengths(split_idxs) # print(scaffold, scaffold.length(), scaffold.sequence()) p7560 = sequences['p7560'] scaf_oligo.applySequence(p7560) # seqs = part.getSequences() # print(seqs) # oligos = part.oligos() # oligos_sorted_by_color = sorted(oligos, key=lambda x: x.getColor()) # for oligo in oligos_sorted_by_color: # if oligo == scaf_oligo: # print("Scaffold {0} has length {1}".format(oligo, oligo.length())) # else: # # oligo_props = oligo.dump() # printOligo(oligo) print("Saving modified document as", colored("{0}".format(dest_file), 'yellow')) # printInfo("{0}".format(dest_file)) doc.writeToFile(dest_file)
def main(): parser = argparse.ArgumentParser() parser.add_argument("-i", "--input", type=str, help="Cadnano json file") parser.add_argument("-o", "--output", type=str, help="Output directory", default='.') args = parser.parse_args() #Assign the parameters input_filename = args.input output_directory = args.output #Check if input file exists if not os.path.isfile(input_filename): sys.exit('Input file does not exist!') #Check if output directory exists if not os.path.isdir(output_directory): sys.exit('Output directory does not exist!') #Define output filename head, tail = os.path.split(input_filename) root, ext = os.path.splitext(tail) output_filename = output_directory + '/' + root + '.gsd' #Initialize cadnano app = cadnano.app() doc = app.document = Document() #Read cadnano input file doc.readFile(input_filename) #Parse the structure for simulation new_origami = Origami() new_origami.part = doc.activePart() new_origami.list_oligos() new_origami.initialize_nucleotide_matrix() new_origami.find_skips() new_origami.create_oligos_list() new_origami.get_connections() new_origami.assign_nucleotide_types() new_origami.incorporate_skips() new_origami.assign_nucleotide_connections() new_origami.cluster_into_bodies() new_origami.parse_soft_connections() new_origami.determine_coordinate_limits() #Prepare the simulation new_simulation = RigidBodySimulation() new_simulation.origami = new_origami new_simulation.determine_box_dimensions() new_simulation.initialize_relax_md() new_simulation.initialize_particles() new_simulation.create_rigid_bodies() new_simulation.create_bonds() new_simulation.set_harmonic_bonds() new_simulation.set_lj_potentials() new_simulation.set_simulation_settings() new_simulation.dump_settings(output_filename) new_simulation.take_snapshot() new_simulation.get_distances() new_simulation.set_simulation_step() new_simulation.folding_protocol()