|
|
(23 intermediate revisions by 3 users not shown) |
Line 1: |
Line 1: |
| ==Add aptamers== | | <div class="tabs-blue"> |
| <pre> | | <ul> |
| #######
| | <li>[[IGEM:Harvard/2006/DNA nanostructures|Project Overview]]</li> |
| # Add aptamers to the ends of the appropriate oligos.
| | <li id = "current">[[IGEM:Harvard/2006/DNA_nanostructures/Designs|Designs]]</li> |
| #######
| | <li>[[IGEM:Harvard/2006/DNA_nanostructures/Notebook|Notebook]]</li> |
| | <li>[[IGEM:Harvard/2006/DNA_nanostructures/Protocols|Protocols]]</li> |
| | <li>[[IGEM:Harvard/2006/DNA_nanostructures/Presentations|Presentations]]</li> |
| | <li>[[IGEM:Harvard/2006/DNA_nanostructures/Literature|Literature]]</li> |
| | </ul> |
| | </div> |
| | <br style="clear:both"> |
|
| |
|
| # Constants
| | <div class = "tabs-blue"> |
| apt_seq = 'GGTTGGTGTGGTTGG'
| | <ul> |
| T_linker = 'TTT'
| | <li>[[IGEM:Harvard/2006/Container Design 1|Design 1]]</li> |
|
| | <li>[[IGEM:Harvard/2006/Container Design 2|Design 2]]</li> |
| print oligo_ra
| | <li>[[IGEM:Harvard/2006/Container Design 3|Design 3]]</li> |
| num_aptamers = int(raw_input('How many aptamers do you want to add? '))
| | <li id = "current">[[IGEM:Harvard/2006/Container Design 4|Design 4]]</li> |
| i = 0
| | <li>[[IGEM:Harvard/2006/Container Design 5|Design 5]]</li> |
| while i < num_aptamers:
| | <li>[[IGEM:Harvard/2006/Container Design 6|Design 6]]</li> |
| oligo_num = int(raw_input('Which oligo needs an aptamer? '))
| | </ul> |
| if oligo_num < len(oligo_ra):
| | </div> |
| # Add the aptamer to that oligo
| | <br style = "clear:both"> |
| oligo_ra[oligo_num] = oligo_ra[oligo_num] + T_linker + apt_seq
| |
| i = i + 1
| |
| else:
| |
| print 'oligo ' + str(oligo_num) + ' out of range.'
| |
|
| |
|
| print oligo_ra
| | <div class="tabs-blue"> |
| </pre> | | <ul> |
| | <li>[[IGEM:Harvard/2006/Container_Design_4|Design 4 Overview]]</li> |
| | <li>[[IGEM:Harvard/2006/Container_Design_4/Schematics|Schematics]]</li> |
| | <li>[[IGEM:Harvard/2006/Container_Design_4/Scaffold Sequences|Scaffold]]</li> |
| | <li id = "current">[[IGEM:Harvard/2006/Container_Design_4/Python Code|Code]]</li> |
| | <li>[[IGEM:Harvard/2006/Container_Design_4/Latch Sequences|Latches]]</li> |
| | <li>[[IGEM:Harvard/2006/Container_Design_4/Oligos|Final Oligo List]]</li> |
| | </ul> |
| | </div> |
| | <br style="clear:both"> |
|
| |
|
| ==Add aptamers using File Input rather than User Input==
| |
| <pre>
| |
| #####
| |
| # Add apts this time using file input instead of user input
| |
| #####
| |
|
| |
| # Constants
| |
| apt_seq = 'GGTTGGTGTGGTTGG'
| |
| T_linker = 'TTT'
| |
|
| |
| fin_barrel = None
| |
|
| |
| try:
| |
| fin_barrel = open("barrel_apts_to_add.txt", "r")
| |
| except IOError, e:
| |
| print "Error in file IO: ", e
| |
|
| |
|
| # Ask the user if they are running a lid or a barrel
| | ==Modifications and Additions to Dr. Shih's Code== |
| shape = int(raw_input("Enter 1 if you are running a barrel, 2 if lid: "))
| | The code is fairly general with the exception of the Pickle Scripts which generate lists specific to Design 4 and some hardcoded lists under Oligo Sorting |
| if (shape == 1):
| | *[[IGEM:Harvard/2006/Container_Design_4/Python_Code/Full_Code_Final|Full Code - Finalized 7/11]]<br> |
| apts_to_add = pickle.load(fin_barrel)
| | *[[IGEM:Harvard/2006/Container_Design_4/Python_Code/Split_Oligos|Oligo Splitting]]<br> |
| for apt_specs in apts_to_add:
| | *[[IGEM:Harvard/2006/Container_Design_4/Python_Code/Add_Aptamers|Adding Aptamers]]<br> |
| oligo_num = apt_specs[0]
| | *[[IGEM:Harvard/2006/Container_Design_4/Python_Code/Add_Latches|Adding Latches]]<br> |
| type = apt_specs[1]
| | *[[IGEM:Harvard/2006/Container_Design_4/Python_Code/Oligo_Sorting|Oligo Sorting]]<br> |
| if (type == 1):
| | *[[IGEM:Harvard/2006/Container_Design_4/Python_Code/Pickle_Scripts|Pickle Scripts]]<br> |
| # apt is pointing in so add 'I' as a flag at the end
| | *[[IGEM:Harvard/2006/Container_Design_4/Python_Code/Print_Oligo_Grid|Print Oligo Grid]]<br> |
| oligo_ra[oligo_num] = oligo_ra[oligo_num] + T_linker + apt_seq + 'I'
| | == Other Useful Scripts== |
| elif(type == 2):
| | *[[IGEM:Harvard/2006/Container_Design_4/Python_Code/Split_Scaffold|Split Scaffold]]<br> |
| # apt is pointing out so add 'O' as a flag
| |
| oligo_ra[oligo_num] = oligo_ra[oligo_num] + T_linker + apt_seq + 'O'
| |
| else:
| |
| # incorrect type
| |
| print 'Bad input - aptamer needs to be pointing in or out'
| |
| | |
| </pre>
| |
| | |
| ==Split Oligos From User Input==
| |
| Script for splitting up as many oligos as you want (USING USER INPUT). The first part goes in main. The second part goes in honeycomb_pointers_v1.py
| |
| <pre>
| |
| | |
| #####
| |
| # Oligo splitting:
| |
| # get new list of oligos given user input specifying which oligo to cut
| |
| #####
| |
| | |
| num_to_split = int(raw_input('How many oligos do you want to split?'))
| |
| i = 0
| |
| new_OTP_ra = OTP_ra[:]
| |
| while i < num_to_split:
| |
| | |
| oligo_num = int(raw_input('Enter the number oligo you wish to split:'))
| |
| print '\n'
| |
| print 'How many tokens should the first new oligo be?'
| |
| num_toks = int(raw_input('Number of toks starting from 5 prime: '))
| |
| | |
| new_OTP_ra = split_oligo(new_OTP_ra, oligo_num, num_toks)
| |
|
| |
| print new_OTP_ra
| |
| print len(OTP_ra)
| |
| print len(new_OTP_ra)
| |
| i = i + 1
| |
| | |
| ####
| |
| # given an oligo to split, split it and return the new list of oligos
| |
| ####
| |
| def split_oligo(new_OTP_ra, oligo_num, num_toks):
| |
|
| |
| print new_OTP_ra[oligo_num]
| |
| | |
| original_oligo = new_OTP_ra[oligo_num]
| |
|
| |
| oligo_1 = original_oligo[:num_toks]
| |
| oligo_2 = original_oligo[num_toks:]
| |
| print oligo_1
| |
| print'\n'
| |
| print oligo_2
| |
|
| |
| new_OTP_ra[oligo_num] = oligo_1
| |
| new_OTP_ra.insert(oligo_num + 1, oligo_2)
| |
| return new_OTP_ra
| |
| | |
| | |
| </pre> | |
| | |
| | |
| ==Split Oligos From File Input==
| |
| Script for splitting up oligos automatically (FILE INPUT). (make sure to import pickle at the top). This part goes in main. Further down is the file
| |
| to read from essentially (uses pickle)
| |
| | |
| <pre>
| |
| #####
| |
| # Oligo splitting - this time reading from a file and not asking for user
| |
| # input
| |
| #####
| |
| fin_barrel = None
| |
| fin_lid = None
| |
|
| |
| try:
| |
| fin_barrel = open("barrel_oligos_to_split.txt", "r")
| |
| fin_lid = open("lid_oligos_to_split.txt", "r")
| |
| except IOError, e:
| |
| print "Error in file IO: ", e
| |
|
| |
| # Ask the user if they are running a lid or a barrel
| |
| shape = int(raw_input("Enter 1 if you are running a barrel, 2 if lid: "))
| |
| if (shape == 1):
| |
| oligos_to_split = pickle.load(fin_barrel)
| |
| elif (shape == 2):
| |
| oligos_to_split = pickle.load(fin_lid)
| |
| else:
| |
| print 'Please modify code or run with lid or 30hb barrel'
| |
| | |
| | |
| new_OTP_ra = OTP_ra[:]
| |
| for pair in oligos_to_split:
| |
| oligo_num = pair[0]
| |
| print oligo_num
| |
| num_toks = pair[1]
| |
| print num_toks
| |
| | |
| new_OTP_ra = split_oligo(new_OTP_ra, oligo_num, num_toks)
| |
|
| |
| print new_OTP_ra
| |
| print len(OTP_ra)
| |
| print len(new_OTP_ra)
| |
| | |
| # if it's the barrel design and so that all the numbers aren't messed
| |
| # up, the 7bp token on the start of strand 10 needs to be removed
| |
| # because it's going to be left unpaired
| |
| if (shape == 1):
| |
| new_OTP_ra = new_OTP_ra[:61] + new_OTP_ra[62:]
| |
| | |
| if fin_barrel: fin_barrel.close()
| |
| if fin_lid: fin_lid.close()
| |
|
| |
| </pre> | |
| | |
| ==Pickle Split Parameters==
| |
| <pre>
| |
| ### split = [[oligo_num, num_tokens for oligo_1 - from 5prime], ... ]
| |
| | |
| import pickle
| |
| | |
| fout_barrel = None
| |
| fout_lid = None
| |
| | |
| try:
| |
| fout_barrel = open("barrel_oligos_to_split.txt", "w")
| |
| fout_lid = open("lid_oligos_to_split.txt", "w")
| |
| except IOError, e:
| |
| print "Error in file IO: ", e
| |
| | |
| barrel_split = [[56, 2], [57, 3], [41, 3], [26, 3], [21, 4]]
| |
| lid_split = [[27, 4], [2, 4]]
| |
| | |
| pickle.dump(barrel_split, fout_barrel)
| |
| pickle.dump(lid_split, fout_lid)
| |
| | |
| # clean up if they're open
| |
| if fout_barrel:
| |
| fout_barrel.close()
| |
| if fout_lid:
| |
| fout_lid.close()
| |
| </pre> | |
| | |
| ==Split Scaffold Sequence into Chunks==
| |
| --[[User:Vlau|Vlau]] 16:12, 10 July 2006 (EDT)
| |
| <pre> | |
| #!/usr/bin/python
| |
| | |
| import string
| |
| import sys
| |
| import fileinput
| |
| | |
| def nowhite(s):
| |
| return ''.join([c for c in s if c in string.letters])
| |
| | |
| seq = ''
| |
| | |
| # read in sequence
| |
| for line in fileinput.input("-"):
| |
| seq = seq + nowhite(line)
| |
| | |
| lid_1 = 96 * 14
| |
| linker_1 = 200
| |
| box = 29 * 96
| |
| linker_2 = 200
| |
| lid_2 = 96 * 14
| |
| linker_3 = 200
| |
| box_2 = 96
| |
| | |
| #store first segment up to end of lid 1
| |
| lid_1_seq = seq[:lid_1]
| |
| #reset sequence to start at end of lid 1
| |
| seq = seq[lid_1:]
| |
| linker_1_seq = seq[:linker_1]
| |
| seq = seq[linker_1:]
| |
| box_1_seq = seq[:box]
| |
| seq = seq[box:]
| |
| linker_2_seq = seq[:linker_2]
| |
| seq = seq[linker_2:]
| |
| lid_2_seq = seq[:lid_2]
| |
| seq = seq[lid_2:]
| |
| linker_3_seq = seq[:linker_3]
| |
| seq = seq[linker_3:]
| |
| box_2_seq = seq[:box_2]
| |
| seq = seq[box_2:]
| |
| extra_scaffold = seq
| |
| barrel = box_1_seq + box_2_seq
| |
| | |
| #print out the length of each segment and its sequence
| |
| | |
| barrel_file = file('barrel_scaffold.txt', 'w')
| |
| lid_1_file = file('lid_1_scaffold.txt', 'w')
| |
| lid_2_file = file('lid_2_scaffold.txt', 'w')
| |
| | |
| print len(lid_1_seq)
| |
| print lid_1_seq
| |
| lid_1_file.write(lid_1_seq)
| |
| print len(linker_1_seq)
| |
| print linker_1_seq
| |
| print len(barrel)
| |
| print barrel
| |
| barrel_file.write(barrel)
| |
| print len(linker_2_seq)
| |
| print linker_2_seq
| |
| print len(lid_2_seq)
| |
| print lid_2_seq
| |
| lid_2_file.write(lid_2_seq)
| |
| print len(linker_3_seq)
| |
| print linker_3_seq
| |
| </pre>
| |
| | |
| ==Print Aptamer Oligos==
| |
| Oligo sorting - find an print out those with aptamers | |
| | |
| <pre> | |
| | |
| #####
| |
| # oligo sorting
| |
| #####
| |
| | |
| # sort based on whether or not there's an aptamer attached to the end of
| |
| # an oligo
| |
|
| |
| apt = re.compile('TTTGGTTGGTGTGGTTGG')
| |
| oligo_num = 0
| |
| for oligo in oligo_ra:
| |
| m = apt.search(oligo)
| |
| if m:
| |
| print 'Match found: ', oligo + ' : ' + str(oligo_num)
| |
| else:
| |
| print 'No match' + str(oligo_num)
| |
| oligo_num = oligo_num + 1
| |
| | |
| | |
| </pre>
| |
| | |
| ==Modiifications to honeycomb_v1 scripts==
| |
| *Modifications to William's program to print each oligo number next to what tokens it represents | |
| <pre>
| |
| oligo_num = 0
| |
| for oligo in OTP_ra:
| |
| for token in oligo:
| |
| print str(oligo_num) + ": ", token
| |
| oligo_num = oligo_num + 1
| |
| </pre>
| |
| | |
| *Modifications to William's program to print a grid of oligo numbers completely filled in
| |
| * add this part to main (AAA or BBB)
| |
| <pre>
| |
| ####
| |
| # generate and print the oligo grid
| |
| ####
| |
| | |
| # Initialize the grid with all periods
| |
| num_strands = len(TPP_ra)
| |
| num_subzones = len(TPP_ra[0])
| |
| | |
| sub_token_visit_ra = ['.' for subzone_num in range(num_subzones)]
| |
| grid_ra = [sub_token_visit_ra[:] for strand_num in range(num_strands)]
| |
|
| |
| oligo_num = 0
| |
| for oligo in OTP_ra:
| |
| grid_ra = generate_oligo_path(oligo, oligo_num, grid_ra)
| |
| oligo_num = oligo_num + 1
| |
| print grid_ra
| |
|
| |
| print_all_oligos(grid_ra, num_strands, num_subzones)
| |
| | |
| </pre>
| |
| | |
| * add this part to honeycomb_pointers_v1.py
| |
| <pre>
| |
| # The idea here is to have a function that adds the numbers of one oligo path
| |
| # to the appropriate places in the big grid array. Eventually this will be printed
| |
| # in main. Also it needs to be initialized in main. Oligo_path is the path of
| |
| # one oligo, while grid_ra is the grid that is constantly being updated until
| |
| # it is printed in main. oligo_num is number that will be inputed to the grid_ra.
| |
|
| |
| def generate_oligo_path(oligo_path, oligo_num, grid_ra):
| |
| num_path_tokens = len(oligo_path)
| |
|
| |
| # Assign visits
| |
| for path_token_num in range(num_path_tokens):
| |
| token = oligo_path[path_token_num]
| |
| strand = token[0]
| |
| subzone = token[1]
| |
| grid_ra[strand][subzone] = oligo_num
| |
|
| |
|
| |
| return grid_ra
| |
| | |
| def print_all_oligos(grid_ra, num_strands, num_subzones):
| |
| spacer = ' '
| |
| for strand_num in range(num_strands):
| |
| for subzone_num in range(num_subzones):
| |
| visitor_string = str(grid_ra[strand_num][subzone_num])
| |
| sys.stdout.write(visitor_string)
| |
| sys.stdout.write(spacer[:4 - len(visitor_string)])
| |
| sys.stdout.write('\n')
| |
| </pre> | |