Exemplo n.º 1
0
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)
Exemplo n.º 2
0
    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,
                                })
Exemplo n.º 3
0
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
Exemplo n.º 4
0
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)
Exemplo n.º 5
0
    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,\
                                })
Exemplo n.º 6
0
    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
Exemplo n.º 7
0
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
Exemplo n.º 8
0
    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
Exemplo n.º 9
0
    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)
Exemplo n.º 10
0
    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
Exemplo n.º 11
0
    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
Exemplo n.º 12
0
#!/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()])
Exemplo n.º 13
0
 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()
Exemplo n.º 14
0
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)
Exemplo n.º 15
0
 def nnodecode(self,dict):
     doc = Document()
     doc.mainWindow = self.mainWindow
     doc.dc = DocumentController(doc)
     document = nnodecode.decode(doc,dict)
     return document
Exemplo n.º 16
0
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()