diff --git a/sbol_utilities/component.py b/sbol_utilities/component.py index 6e2db7ac..ec047ec0 100644 --- a/sbol_utilities/component.py +++ b/sbol_utilities/component.py @@ -10,7 +10,7 @@ from Bio import Restriction from pydna.dseqrecord import Dseqrecord - +from itertools import product # TODO: consider allowing return of LocalSubComponent and ExternallyDefined def contained_components(roots: Union[sbol3.TopLevel, Iterable[sbol3.TopLevel]]) -> set[sbol3.Component]: @@ -416,7 +416,7 @@ def operator(identity: str, sequence: str, **kwargs) -> Tuple[sbol3.Component, s return operator_component, operator_seq -def engineered_region(identity: str, features: Union[List[sbol3.SubComponent], List[sbol3.Component]], **kwargs) \ +def engineered_region(identity: str, features: Union[List[sbol3.SubComponent], List[sbol3.Component]], fix_order: bool=True, **kwargs) \ -> sbol3.Component: """Creates an Engineered Region Component, with features assumed to be in linear order @@ -431,12 +431,13 @@ def engineered_region(identity: str, features: Union[List[sbol3.SubComponent], L if isinstance(to_add, sbol3.Component): to_add = sbol3.SubComponent(to_add) er_component.features.append(to_add) - if len(er_component.features) > 1: - for i in range(len(er_component.features)-1): - constraint = sbol3.Constraint(sbol3.SBOL_PRECEDES, er_component.features[i], er_component.features[i + 1]) - er_component.constraints = [constraint] - else: - pass + if fix_order == True: + if len(er_component.features) > 1: + for i in range(len(er_component.features)-1): + constraint = sbol3.Constraint(sbol3.SBOL_PRECEDES, er_component.features[i], er_component.features[i+1]) + er_component.constraints.append(constraint) + else: + pass return er_component @@ -541,7 +542,7 @@ def backbone(identity: str, sequence: str, dropout_location: List[int], fusion_s :param sequence: The DNA sequence of the Component encoded in IUPAC. :param dropout_location: List of 2 integers that indicates the start and the end of the dropout sequence including overhangs. Note that the index of the first location is 1, as is typical practice in biology, rather than 0, as is typical practice in computer science. :param fusion_site_length: Integer of the lenght of the fusion sites (eg. BsaI fusion site lenght is 4, SapI fusion site lenght is 3) - :param linear: Boolean than indicates if the backbone is linear, by default it is seted to Flase which means that it has a circular topology. + :param linear: Boolean than indicates if the backbone is linear, by default it is seted to False which means that it has a circular topology. :param kwargs: Keyword arguments of any other Component attribute. :return: A tuple of Component and Sequence. """ @@ -573,6 +574,52 @@ def backbone(identity: str, sequence: str, dropout_location: List[int], fusion_s backbone_component.constraints.append(backbone_dropout_meets) return backbone_component, backbone_seq +def backbone_from_sbol(identity: Union[str,None], sbol_comp: sbol3.Component, dropout_location: List[int], fusion_site_length:int, linear:bool, **kwargs) -> Tuple[sbol3.Component, sbol3.Sequence]: + """Creates a Backbone Component and its Sequence. + + :param identity: The identity of the Component. The identity of Sequence is also identity with the suffix '_seq'. + :param sbol_comp: The SBOL Component containing the DNA sequence to use. + :param dropout_location: List of 2 integers that indicates the start and the end of the dropout sequence including overhangs. Note that the index of the first location is 1, as is typical practice in biology, rather than 0, as is typical practice in computer science. + :param fusion_site_length: Integer of the lenght of the fusion sites (eg. BsaI fusion site lenght is 4, SapI fusion site lenght is 3) + :param linear: Boolean than indicates if the backbone is linear, by default it is seted to False which means that it has a circular topology. + :param kwargs: Keyword arguments of any other Component attribute. + :return: A tuple of Component and Sequence. + """ + if len(dropout_location) != 2: + raise ValueError('The dropout_location only accepts 2 int values in a list.') + if len(sbol_comp.sequences)!=1: + raise ValueError(f'The reactant needs to have precisely one sequence. The input reactant has {len(sbol_comp.sequences)} sequences') + sequence = str(sbol_comp.sequences[0].lookup().elements) + if identity == None: + backbone_component = sbol_comp + backbone_seq = sbol_comp.sequences[0] + else: + backbone_component, backbone_seq = dna_component_with_sequence(identity, sequence, **kwargs) + backbone_component.roles.append(sbol3.SO_DOUBLE_STRANDED) + dropout_location_comp = sbol3.Range(sequence=backbone_seq, start=dropout_location[0], end=dropout_location[1]) + insertion_site_location1 = sbol3.Range(sequence=backbone_seq, start=dropout_location[0], end=dropout_location[0]+fusion_site_length, order=1) + insertion_site_location2 = sbol3.Range(sequence=backbone_seq, start=dropout_location[1]-fusion_site_length, end=dropout_location[1], order=3) + dropout_sequence_feature = sbol3.SequenceFeature(locations=[dropout_location_comp], roles=[tyto.SO.deletion]) + insertion_sites_feature = sbol3.SequenceFeature(locations=[insertion_site_location1, insertion_site_location2], roles=[tyto.SO.insertion_site]) + if linear: + backbone_component.types.append(sbol3.SO_LINEAR) + backbone_component.roles.append(sbol3.SO_ENGINEERED_REGION) + open_backbone_location1 = sbol3.Range(sequence=backbone_seq, start=1, end=dropout_location[0]+fusion_site_length-1, order=1) + open_backbone_location2 = sbol3.Range(sequence=backbone_seq, start=dropout_location[1]-fusion_site_length, end=len(sequence), order=3) + open_backbone_feature = sbol3.SequenceFeature(locations=[open_backbone_location1, open_backbone_location2]) + else: + backbone_component.types.append(sbol3.SO_CIRCULAR) + backbone_component.roles.append(tyto.SO.plasmid_vector) + open_backbone_location1 = sbol3.Range(sequence=backbone_seq, start=1, end=dropout_location[0]+fusion_site_length-1, order=2) + open_backbone_location2 = sbol3.Range(sequence=backbone_seq, start=dropout_location[1]-fusion_site_length, end=len(sequence), order=1) + open_backbone_feature = sbol3.SequenceFeature(locations=[open_backbone_location1, open_backbone_location2]) + backbone_component.features.append(dropout_sequence_feature) + backbone_component.features.append(insertion_sites_feature) + backbone_component.features.append(open_backbone_feature) + backbone_dropout_meets = sbol3.Constraint(restriction='http://sbols.org/v3#meets', subject=dropout_sequence_feature, object=open_backbone_feature) + backbone_component.constraints.append(backbone_dropout_meets) + return backbone_component, backbone_seq + def part_in_backbone(identity: str, part: sbol3.Component, backbone: sbol3.Component, linear:bool=False, **kwargs) -> Tuple[sbol3.Component, sbol3.Sequence]: """Creates a Part in Backbone Component and its Sequence. @@ -601,6 +648,10 @@ def part_in_backbone(identity: str, part: sbol3.Component, backbone: sbol3.Compo open_backbone_sequence_from_location2=backbone_sequence[backbone.features[-1].locations[1].start -1 : backbone.features[-1].locations[1].end] # extract part sequence part_sequence = part.sequences[0].lookup().elements + covered_fusion_site_lengths = [3,4] # review can be user input + for l in covered_fusion_site_lengths: + if open_backbone_sequence_from_location1[-l:]==part_sequence[:l] and part_sequence[-l:]==open_backbone_sequence_from_location2[:l]: + part_sequence = part_sequence[l:-l] # make new component sequence if linear: part_in_backbone_seq_str = open_backbone_sequence_from_location1 + part_sequence + open_backbone_sequence_from_location2 @@ -622,6 +673,8 @@ def part_in_backbone(identity: str, part: sbol3.Component, backbone: sbol3.Compo part_in_backbone_component.features.append(backbone_subcomponent) # adding topology part_in_backbone_component.types.append(topology_type) + #if len(part_in_backbone_component.name)==0: # TODO: review + # part_in_backbone_component.name = identity return part_in_backbone_component, part_in_backbone_seq def part_in_backbone_from_sbol(identity: Union[str, None], sbol_comp: sbol3.Component, part_location: List[int], part_roles:List[str], fusion_site_length:int, linear:bool=False, **kwargs) -> Tuple[sbol3.Component, sbol3.Sequence]: @@ -643,7 +696,7 @@ def part_in_backbone_from_sbol(identity: Union[str, None], sbol_comp: sbol3.Com if len(part_location) != 2: raise ValueError('The part_location only accepts 2 int values in a list.') if len(sbol_comp.sequences)!=1: - raise ValueError(f'The reactant needs to have precisely one sequence. The input reactant has {len(sbol3_comp.sequences)} sequences') + raise ValueError(f'The reactant needs to have precisely one sequence. The input reactant has {len(sbol_comp.sequences)} sequences') sequence = sbol_comp.sequences[0].lookup().elements if identity == None: part_in_backbone_component = sbol_comp @@ -691,7 +744,7 @@ def digestion(reactant:sbol3.Component, restriction_enzymes:List[sbol3.Externall """Digests a Component using the provided restriction enzymes and creates a product Component and a digestion Interaction. The product Component is assumed to be the insert for parts in backbone and the backbone for backbones. - :param reactant: DNA to be digested as SBOL Component. + :param reactant: DNA to be digested as SBOL Component, usually a part_in_backbone. :param restriction_enzymes: Restriction enzymes used Externally Defined. :return: A tuple of Component and Interaction. """ @@ -744,8 +797,9 @@ def digestion(reactant:sbol3.Component, restriction_enzymes:List[sbol3.Externall prod_comp, prod_seq = dna_component_with_sequence(identity=f'{reactant.name}_part_extract', sequence=product_sequence, **kwargs) #str(product_sequence)) # add sticky ends features five_prime_fusion_site_location = sbol3.Range(sequence=product_sequence, start=1, end=len(product_5_prime_ss_end), order=1) - three_prime_fusion_site_location = sbol3.Range(sequence=product_sequence, start=len(product_sequence)-len(product_3_prime_ss_end), end=len(product_sequence), order=3) + three_prime_fusion_site_location = sbol3.Range(sequence=product_sequence, start=len(product_sequence)-len(product_3_prime_ss_end)+1, end=len(product_sequence), order=3) fusion_sites_feature = sbol3.SequenceFeature(locations=[five_prime_fusion_site_location, three_prime_fusion_site_location], roles=[tyto.SO.insertion_site]) + prod_comp.roles.append(tyto.SO.engineered_insert) prod_comp.features.append(fusion_sites_feature) # if backbone @@ -757,8 +811,9 @@ def digestion(reactant:sbol3.Component, restriction_enzymes:List[sbol3.Externall prod_comp, prod_seq = dna_component_with_sequence(identity=f'{reactant.name}_backbone', sequence=product_sequence, **kwargs) #str(product_sequence)) # add sticky ends features five_prime_fusion_site_location = sbol3.Range(sequence=product_sequence, start=1, end=len(product_5_prime_ss_end), order=1) - three_prime_fusion_site_location = sbol3.Range(sequence=product_sequence, start=len(product_sequence)-len(product_3_prime_ss_end), end=len(product_sequence), order=3) + three_prime_fusion_site_location = sbol3.Range(sequence=product_sequence, start=len(product_sequence)-len(product_3_prime_ss_end)+1, end=len(product_sequence), order=3) fusion_sites_feature = sbol3.SequenceFeature(locations=[five_prime_fusion_site_location, three_prime_fusion_site_location], roles=[tyto.SO.insertion_site]) + prod_comp.roles.append(tyto.SO.plasmid_vector) prod_comp.features.append(fusion_sites_feature) else: raise NotImplementedError('The reactant has no valid roles') @@ -789,113 +844,102 @@ def ligation(reactants:List[sbol3.Component], assembly_plan:sbol3.Component)-> L :param reactant: DNA to be ligated as SBOL Component. :return: A tuple of Component and Interaction. """ - # get all fusion sites - five_prime_fusion_sites = set() - three_prime_fusion_sites = set() - for r in reactants: - five_prime_fusion_sites.add(r.sequences[0].lookup().elements[:r.features[0].locations[0].end]) - three_prime_fusion_sites.add(r.sequences[0].lookup().elements[r.features[0].locations[1].start:]) - - alignments = [[r] for r in reactants] # like [[A],[B1],[B2],[C]]] and [[A,B1,C],[B1],[B2],[C]] - used_fusion_sites = set() - final_products = [] # [[A,B1,C]] - while alignments: - closed = False - five_prime_end = False - three_prime_end = False - # get the first item and remove it from the list - working_alignment = alignments[0] - alignments.pop(0) - # compare to all other alignments - for alignment in alignments: - working_alignment_5_prime_fusion_site = working_alignment[0].sequences[0].lookup().elements[:working_alignment[0].features[0].locations[0].end] - working_alignment_3_prime_fusion_site = working_alignment[-1].sequences[0].lookup().elements[working_alignment[-1].features[0].locations[1].start:] - alignment_5_prime_fusion_site = alignment[0].sequences[0].lookup().elements[:alignment[0].features[0].locations[0].end] - alignment_3_prime_fusion_site = alignment[-1].sequences[0].lookup().elements[alignment[-1].features[0].locations[1].start:] - # if working alignment 5' end matches a alignment 3' end - if working_alignment_5_prime_fusion_site == alignment_3_prime_fusion_site: - # if in used_fusion_sites, skip - if working_alignment_5_prime_fusion_site in used_fusion_sites: - raise ValueError(f"Fusion site {working_alignment[0].sequences[0].lookup().elements[:fusion_site_length-1]} already used") - else: used_fusion_sites.add(working_alignment_5_prime_fusion_site) - - - working_alignment = alignment + working_alignment - - working_alignment_5_prime_fusion_site = working_alignment[0].sequences[0].lookup().elements[:working_alignment[0].features[0].locations[0].end] - working_alignment_3_prime_fusion_site = working_alignment[-1].sequences[0].lookup().elements[working_alignment[-1].features[0].locations[1].start:] - - # if working alignment 5' end does not matches any 3' fusion site - if working_alignment_5_prime_fusion_site not in three_prime_fusion_sites: - five_prime_end = True - - # if working_alignment is closed, add to final_products - if working_alignment_5_prime_fusion_site == working_alignment_3_prime_fusion_site: - final_products.append(working_alignment) - closed = True - break - - ################################################ - # if working alignment 3' end matches a alignment 5' end - if working_alignment_3_prime_fusion_site == alignment_5_prime_fusion_site: - # if in used_fusion_sites, raise error - if working_alignment_3_prime_fusion_site in used_fusion_sites: - raise ValueError(f"Fusion site {working_alignment[0].sequences[0].lookup().elements[:fusion_site_length-1]} already used") - - working_alignment = working_alignment + alignment - - working_alignment_5_prime_fusion_site = working_alignment[0].sequences[0].lookup().elements[:working_alignment[0].features[0].locations[0].end] - working_alignment_3_prime_fusion_site = working_alignment[-1].sequences[0].lookup().elements[working_alignment[-1].features[0].locations[1].start:] - - # if working alignment 5' end does not matches any 3' fusion site - if working_alignment_3_prime_fusion_site not in five_prime_fusion_sites: - three_prime_end = True - - # if working_alignment is closed, add to final_products - if working_alignment_5_prime_fusion_site == working_alignment_3_prime_fusion_site: - final_products.append(working_alignment) - closed = True - break - # if no match, add to final products - if five_prime_end and three_prime_end: - final_products.append(working_alignment) - break + # Create a dictionary that maps each first and last 4 letters to a list of strings that have those letters. + reactant_parts = [] + fusion_sites_set = set() + for reactant in reactants: + fusion_site_3prime_length = reactant.features[0].locations[0].end - reactant.features[0].locations[0].start + fusion_site_5prime_length = reactant.features[0].locations[1].end - reactant.features[0].locations[1].start + if fusion_site_3prime_length == fusion_site_5prime_length: + fusion_site_length = fusion_site_3prime_length + 1 # if the fusion site is 4 bp long, the start will be 1 and end 4, 4-1 = 3, so we add 1 to get 4. + fusion_sites_set.add(fusion_site_length) + if len(fusion_sites_set) > 1: + raise ValueError(f'Fusion sites of different length within different parts. Check {reactant.identity} ') + else: + raise ValueError(f'Fusion sites of different length within the same part. Check {reactant.identity}') + if tyto.SO.plasmid_vector in reactant.roles: + reactant_parts.append(reactant) + elif tyto.SO.engineered_insert in reactant.roles: + reactant_parts.append(reactant) + else: + raise ValueError(f'Part {reactant.identity} does not have a valid role') + # remove the backbones if any from the reactants, to create the composite + groups = {} + for reactant in reactant_parts: + first_four_letters = reactant.sequences[0].lookup().elements[:fusion_site_length].lower() + last_four_letters = reactant.sequences[0].lookup().elements[-fusion_site_length:].lower() + part_syntax = f'{first_four_letters}_{last_four_letters}' + if part_syntax not in groups: + groups[part_syntax] = [] + groups[part_syntax].append(reactant) + else: groups[part_syntax].append(reactant) + # groups is a dictionary of lists of parts that have the same first and last 4 letters + # list_of_combinations_per_assembly is a list of tuples of parts that can be ligated together + list_of_parts_per_combination = list(product(*groups.values())) #cartesian product + # create list_of_composites_per_assembly from list_of_combinations_per_assembly + list_of_composites_per_assembly = [] + for combination in list_of_parts_per_combination: + list_of_parts_per_composite = [combination[0]] + insert_sequence = combination[0].sequences[0].lookup().elements + remaining_parts = list(combination[1:]) + it = 1 + while remaining_parts: + remaining_parts_before = len(remaining_parts) + for part in remaining_parts: + # match insert sequence 5' to part 3' + if part.sequences[0].lookup().elements[:fusion_site_length].lower() == insert_sequence[-fusion_site_length:].lower(): + insert_sequence = insert_sequence[:-fusion_site_length] + part.sequences[0].lookup().elements + list_of_parts_per_composite.append(part) + remaining_parts.remove(part) + # match insert sequence 3' to part 5' + elif part.sequences[0].lookup().elements[-fusion_site_length:].lower() == insert_sequence[:fusion_site_length].lower(): + insert_sequence = part.sequences[0].lookup().elements + insert_sequence[fusion_site_length:] + list_of_parts_per_composite.insert(0, part) + remaining_parts.remove(part) + remaining_parts_after = len(remaining_parts) - # TODO: feed working alignment to alignments - - # use final products to build assembly product somponent - fusion_site_length = 4 - products_list = [] - participations = [] - for composite in final_products: # a composite of the form [A,B,C] - composite_number = 0 - # calculate sequence - composite_sequence_str = "" - composite_name = "" - #part_subcomponents = [] - part_extract_subcomponents = [] - for part_extract in composite: - composite_sequence_str = composite_sequence_str + part_extract.sequences[0].lookup().elements[:-fusion_site_length] #needs a version for linear - # create participations - part_extract_subcomponent = sbol3.SubComponent(part_extract) # LocalSubComponent?? - part_extract_subcomponents.append(part_extract_subcomponent) - composite_name = composite_name + part_extract.name - # create dna componente and sequence - composite_component, composite_seq = dna_component_with_sequence(f'composite_{composite_number}_{composite_name}', composite_sequence_str) # **kwarads use in future? - composite_component.roles.append(sbol3.SO_ENGINEERED_REGION) - composite_component.features = part_extract_subcomponents - # TODO fix order of features - products_list.append([composite_component, composite_seq]) - composite_number += 1 - # TODO: modify to work outside of an assembly plan as well - + if remaining_parts_before == remaining_parts_after: + it += 1 + if it > 5: #5 was chosen arbitrarily to avoid infinite loops + print(groups) + raise ValueError('No match found, check the parts and their fusion sites') + list_of_composites_per_assembly.append(list_of_parts_per_composite) + + # transform list_of_parts_per_assembly into list of composites + products_list = [] + participations = [] + composite_number = 1 + for composite in list_of_composites_per_assembly: # a composite of the form [A,B,C] + # calculate sequence + composite_sequence_str = "" + composite_name = "" + #part_subcomponents = [] + part_extract_subcomponents = [] + for part_extract in composite: + composite_sequence_str = composite_sequence_str + part_extract.sequences[0].lookup().elements[:-fusion_site_length] #needs a version for linear + # create participations + part_extract_subcomponent = sbol3.SubComponent(part_extract) # LocalSubComponent?? + part_extract_subcomponents.append(part_extract_subcomponent) + composite_name = composite_name +'_'+ part_extract.name + # create dna componente and sequence + composite_component, composite_seq = dna_component_with_sequence(f'composite_{composite_number}{composite_name}', composite_sequence_str) # **kwarads use in future? + composite_component.name = f'composite_{composite_number}{composite_name}' + composite_component.roles.append(sbol3.SO_ENGINEERED_REGION) + composite_component.features = part_extract_subcomponents + for i in range(len(composite_component.features )-1): + composite_component.constraints = [sbol3.Constraint(restriction='http://sbols.org/v3#meets', subject=composite_component.features[i], object=composite_component.features[i+1])] + products_list.append([composite_component, composite_seq]) + composite_number += 1 return products_list + class Assembly_plan_composite_in_backbone_single_enzyme(): """Creates a Assembly Plan. + :param name: Name of the assembly plan Component. :param parts_in_backbone: Parts in backbone to be assembled. :param acceptor_backbone: Backbone in which parts are inserted on the assembly. :param restriction_enzymes: Restriction enzyme with correct name from Bio.Restriction as Externally Defined. + :param document: SBOL Document where the assembly plan will be created. :param linear: Boolean to inform if the reactant is linear. :param circular: Boolean to inform if the reactant is circular. :param **kwargs: Keyword arguments of any other Component attribute for the assembled part. @@ -920,11 +964,10 @@ def run(self): #extract parts part_number = 1 for part_in_backbone in self.parts_in_backbone: - part_comp, part_seq = digestion(reactant=part_in_backbone,restriction_enzymes=[self.restriction_enzyme], assembly_plan=self.assembly_plan_component, name=f'part_{part_number}') + part_comp, part_seq = digestion(reactant=part_in_backbone,restriction_enzymes=[self.restriction_enzyme], assembly_plan=self.assembly_plan_component, name=f'part_{part_number}_{part_in_backbone.display_id}') self.document.add([part_comp, part_seq]) self.extracted_parts.append(part_comp) part_number += 1 - #extract backbone (should be the same?) backbone_comp, backbone_seq = digestion(reactant=self.acceptor_backbone,restriction_enzymes=[self.restriction_enzyme], assembly_plan=self.assembly_plan_component, name=f'part_{part_number}') self.document.add([backbone_comp, backbone_seq]) @@ -936,4 +979,4 @@ def run(self): composite[0].generated_by.append(self.assembly_plan_component) # self.composites.append(composite) self.products.append(composite) - self.document.add(composite) \ No newline at end of file + self.document.add(composite) diff --git a/test/test_component.py b/test/test_component.py index ca386aa4..0c45195e 100644 --- a/test/test_component.py +++ b/test/test_component.py @@ -15,7 +15,7 @@ protein_stability_element, gene, operator, engineered_region, mrna, transcription_factor, \ strain, ed_simple_chemical, ed_protein -from sbol_utilities.component import ed_restriction_enzyme, backbone, part_in_backbone, part_in_backbone_from_sbol, \ +from sbol_utilities.component import ed_restriction_enzyme, backbone, backbone_from_sbol, part_in_backbone, part_in_backbone_from_sbol, \ digestion, ligation, Assembly_plan_composite_in_backbone_single_enzyme from sbol_utilities.helper_functions import find_top_level, toplevel_named, TopLevelNotFound, outgoing_links from sbol_utilities.sbol_diff import doc_diff @@ -362,6 +362,23 @@ def test_backbone_bp011(self): linear_backbone_component.constraints.append(backbone_dropout_meets) doc.add([linear_backbone_component, linear_backbone_seq]) assert doc_diff(doc, hlc_doc) == 0, f'Constructor Error: Linear {backbone_identity}' + + #Test backbone from SBOL + hlc_doc = sbol3.Document() + doc = sbol3.Document() + sbol3.set_namespace('http://sbolstandard.org/testfiles') + # build using backbone from SBOL + doc.add([circular_backbone_component, circular_backbone_seq]) + hl_circular_backbone_component, hl_circular_backbone_seq = backbone_from_sbol(identity=backbone_identity, sbol_comp=circular_backbone_component, dropout_location=dropout_location, fusion_site_length=fusion_site_length, linear=False, description=test_description) + hlc_doc.add([hl_circular_backbone_component, hl_circular_backbone_seq]) + assert doc_diff(doc, hlc_doc) == 0, f'Constructor Error: Circular {backbone_identity} from SBOL' + + hlc_doc = sbol3.Document() + doc = sbol3.Document() + doc.add([linear_backbone_component, linear_backbone_seq]) + hl_linear_backbone_component, hl_linear_backbone_seq = backbone_from_sbol(identity=backbone_identity, sbol_comp=linear_backbone_component, dropout_location=dropout_location, fusion_site_length=fusion_site_length, linear=True, description=test_description) + hlc_doc.add([hl_linear_backbone_component, hl_linear_backbone_seq]) + assert doc_diff(doc, hlc_doc) == 0, f'Constructor Error: Linear {backbone_identity} from SBOL' def test_part_in_backbone_bp011(self): """Test the part_in_backbone function""" @@ -462,53 +479,74 @@ def test_assembly_plan_bp011(self): doc.add([podd_backbone,podd_backbone_seq]) #parts in backbone ##get parts from genbank + podd1_dir = os.path.join(test_dir, 'test_files', 'podd1.gb') j23100_b0034_dir = os.path.join(test_dir, 'test_files', 'j23100_b0034.gb') sfgfp_dir = os.path.join(test_dir, 'test_files', 'sfgfp.gb') + rhlr_dir = os.path.join(test_dir, 'test_files', 'rhlr.gb') b0015_dir = os.path.join(test_dir, 'test_files', 'b0015.gb') - j23100_b0034_doc = convert_from_genbank(j23100_b0034_dir, 'https://github.com/Gonza10V') - j23100_b0034_ac = [top_level for top_level in j23100_b0034_doc if type(top_level)==sbol3.Component][0] - j23100_b0034_ac_seq_str = j23100_b0034_ac.sequences[0].lookup().elements - sfgfp_doc = convert_from_genbank(sfgfp_dir, 'https://github.com/Gonza10V') - sfgfp_ce = [top_level for top_level in sfgfp_doc if type(top_level)==sbol3.Component][0] - sfgfp_ce_seq_str = sfgfp_ce.sequences[0].lookup().elements + + """Test assembly plan class""" + doc = sbol3.Document() + sbol3.set_namespace('http://sbolstandard.org/testfiles') + # Assembly plan setup + bsai = ed_restriction_enzyme('BsaI') + #lvl1 acceptor + podd1_dir = os.path.join(test_dir, 'test_files', 'podd1.gb') + podd_doc = convert_from_genbank(podd1_dir, 'https://github.com/Gonza10V') + podd_af = [top_level for top_level in podd_doc if type(top_level)==sbol3.Component][0] + podd_backbone, podd_backbone_seq = backbone_from_sbol('pOdd_bb', podd_af, [680,1770], 4, False, name='pOdd_bb') + doc.add([podd_backbone,podd_backbone_seq]) + #parts in backbone + ##get parts from genbank + j23100_dir = os.path.join(test_dir, 'test_files', 'ab_j23100.gb') + j23101_dir = os.path.join(test_dir, 'test_files', 'ab_j23101.gb') + b0034_dir = os.path.join(test_dir, 'test_files', 'bc_b0034.gb') + gfp_dir = os.path.join(test_dir, 'test_files', 'ce_gfp.gb') + rfp_dir = os.path.join(test_dir, 'test_files', 'ce_mrfp1.gb') + cfp_dir = os.path.join(test_dir, 'test_files', 'ce_ecfp.gb') + b0015_dir = os.path.join(test_dir, 'test_files', 'ef_b0015.gb') + j23100_doc = convert_from_genbank(j23100_dir, 'https://github.com/Gonza10V') + j23100_ab = [top_level for top_level in j23100_doc if type(top_level)==sbol3.Component][0] + j23101_doc = convert_from_genbank(j23101_dir, 'https://github.com/Gonza10V') + j23101_ab = [top_level for top_level in j23101_doc if type(top_level)==sbol3.Component][0] + b0034_doc = convert_from_genbank(b0034_dir, 'https://github.com/Gonza10V') + b0034_bc = [top_level for top_level in b0034_doc if type(top_level)==sbol3.Component][0] + gfp_doc = convert_from_genbank(gfp_dir, 'https://github.com/Gonza10V') + gfp_ce = [top_level for top_level in gfp_doc if type(top_level)==sbol3.Component][0] + rfp_doc = convert_from_genbank(rfp_dir, 'https://github.com/Gonza10V') + rfp_ce = [top_level for top_level in rfp_doc if type(top_level)==sbol3.Component][0] + cfp_doc = convert_from_genbank(cfp_dir, 'https://github.com/Gonza10V') + cfp_ce = [top_level for top_level in cfp_doc if type(top_level)==sbol3.Component][0] b0015_doc = convert_from_genbank(b0015_dir, 'https://github.com/Gonza10V') b0015_ef = [top_level for top_level in b0015_doc if type(top_level)==sbol3.Component][0] - b0015_ef_seq_str = b0015_ef.sequences[0].lookup().elements ##SBOL parts in backbone - j23100_b0034_ac_in_bb, j23100_b0034_ac_in_bb_seq = part_in_backbone_from_sbol('j23100_b0034_ac_in_bb', j23100_b0034_ac, [476,545], [sbol3.SO_PROMOTER, sbol3.SO_RBS], 4, False, name='j23100_b0034_ac_in_bb') - doc.add([j23100_b0034_ac_in_bb, j23100_b0034_ac_in_bb_seq]) - sfgfp_ce_in_bb, sfgfp_ce_in_bb_seq = part_in_backbone_from_sbol('sfgfp_ce_in_bb', sfgfp_ce, [130,854], [sbol3.SO_CDS], 4, False, name='sfgfp_ce_in_bb') - doc.add([sfgfp_ce_in_bb, sfgfp_ce_in_bb_seq]) + j23100_ab_in_bb, j23100_ab_in_bb_seq = part_in_backbone_from_sbol('j23100_ab_in_bb', j23100_ab, [479,513], [sbol3.SO_PROMOTER], 4, False, name='j23100_ab_in_bb') + doc.add([j23100_ab_in_bb, j23100_ab_in_bb_seq]) + j23101_ab_in_bb, j23101_ab_in_bb_seq = part_in_backbone_from_sbol('j23101_ab_in_bb', j23101_ab, [479,513], [sbol3.SO_PROMOTER], 4, False, name='j23101_ab_in_bb') + doc.add([j23101_ab_in_bb, j23101_ab_in_bb_seq]) + b0034_bc_in_bb, b0034_bc_in_bb_seq = part_in_backbone_from_sbol('b0034_bc_in_bb', b0034_bc, [479,499], [sbol3.SO_RBS], 4, False, name='b0034_bc_in_bb') + doc.add([b0034_bc_in_bb, b0034_bc_in_bb_seq]) + gfp_ce_in_bb, gfp_ce_in_bb_seq = part_in_backbone_from_sbol('gfp_ce_in_bb', gfp_ce, [479,1195], [sbol3.SO_CDS], 4, False, name='gfp_ce_in_bb') + doc.add([gfp_ce_in_bb, gfp_ce_in_bb_seq]) + rfp_ce_in_bb, rfp_ce_in_bb_seq = part_in_backbone_from_sbol('rfp_ce_in_bb', rfp_ce, [479,1156], [sbol3.SO_CDS], 4, False, name='rfp_ce_in_bb') + doc.add([rfp_ce_in_bb, rfp_ce_in_bb_seq]) + cfp_ce_in_bb, cfp_ce_in_bb_seq = part_in_backbone_from_sbol('cfp_ce_in_bb', cfp_ce, [479,1198], [sbol3.SO_CDS], 4, False, name='cfp_ce_in_bb') + doc.add([cfp_ce_in_bb, cfp_ce_in_bb_seq]) b0015_ef_in_bb, b0015_ef_in_bb_seq = part_in_backbone_from_sbol('b0015_ef_in_bb', b0015_ef, [518,646], [sbol3.SO_TERMINATOR], 4, False, name='b0015_ef_in_bb') doc.add([b0015_ef_in_bb, b0015_ef_in_bb_seq]) + + #Assembly plan - test_assembly_plan = Assembly_plan_composite_in_backbone_single_enzyme( - name='constitutive_gfp_tu', - parts_in_backbone=[j23100_b0034_ac_in_bb, sfgfp_ce_in_bb, b0015_ef_in_bb], + combinatorial_assembly_plan = Assembly_plan_composite_in_backbone_single_enzyme( + name='combinatorial_rgb_transcriptional_units', + parts_in_backbone=[j23100_ab_in_bb, j23101_ab_in_bb, b0034_bc_in_bb, gfp_ce_in_bb, rfp_ce_in_bb, cfp_ce_in_bb, b0015_ef_in_bb], acceptor_backbone=podd_backbone, restriction_enzyme=bsai, document=doc) - test_assembly_plan.run() - #Check assembly plan - expected_assembled_j23100_b0034_ac_seq_str = j23100_b0034_ac_seq_str[475:545] - assembled_j23100_b0034_ac_seq_str = test_assembly_plan.extracted_parts[0].sequences[0].lookup().elements - assert expected_assembled_j23100_b0034_ac_seq_str==assembled_j23100_b0034_ac_seq_str, 'Constructor Error: First extracted part sequence does not match expected sequence' - - expected_assembled_sfgfp_ce_seq_str = sfgfp_ce_seq_str[129:854] - assembled_sfgfp_ce_seq_str = test_assembly_plan.extracted_parts[1].sequences[0].lookup().elements - assert expected_assembled_sfgfp_ce_seq_str==assembled_sfgfp_ce_seq_str, 'Constructor Error: Second extracted part sequence does not match expected sequence' - - expected_assembled_b0015_ef_seq_str = b0015_ef_seq_str[513:650] - assembled_b0015_ef_seq_str = test_assembly_plan.extracted_parts[2].sequences[0].lookup().elements - assert expected_assembled_b0015_ef_seq_str==assembled_b0015_ef_seq_str, 'Constructor Error: Third extracted part sequence does not match expected sequence' - - expected_assembled_open_backbone_seq_str = lvl1_pOdd_acceptor_seq[2255:] + lvl1_pOdd_acceptor_seq[:1172] - assembled_open_backbone_seq_str = test_assembly_plan.extracted_parts[-1].sequences[0].lookup().elements - assert expected_assembled_open_backbone_seq_str==assembled_open_backbone_seq_str, 'Constructor Error: Last extracted part (open backbone) sequence does not match expected sequence' - - expected_composite_seq_str = expected_assembled_open_backbone_seq_str[:-4] + expected_assembled_j23100_b0034_ac_seq_str[:-4] + expected_assembled_sfgfp_ce_seq_str[:-4] + expected_assembled_b0015_ef_seq_str[:-4] - assembled_composite_seq_str = test_assembly_plan.composites[0][0].sequences[0].lookup().elements - assert expected_composite_seq_str==assembled_composite_seq_str, 'Constructor Error: Composite sequence does not match expected sequence' - + combinatorial_assembly_plan.run() + for obj in combinatorial_assembly_plan.document.objects: + if obj.identity =='http://sbolstandard.org/testfiles/composite_3_part_8_part_1_j23100_ab_in_bb_part_3_b0034_bc_in_bb_part_6_cfp_ce_in_bb_part_7_b0015_ef_in_bb': + obtained_sequence = obj.sequences[0].lookup().elements + target_sequence = 'cgctgcatgaagagcctgcagtccggcaaaaaagggcaaggtgtcaccaccctgccctttttctttaaaaccgaaaagattacttcgcgttatgcaggcttcctcgctcactgactcgctgcgctcggtcgttcggctgcggcgagcggtatcagctcactcaaaggcggtaatacggttatccacagaatcaggggataacgcaggaaagaacatgtgagcaaaaggccagcaaaaggccaggaaccgtaaaaaggccgcgttgctggcgtttttccacaggctccgcccccctgacgagcatcacaaaaatcgacgctcaagtcagaggtggcgaaacccgacaggactataaagataccaggcgtttccccctggaagctccctcgtgcgctctcctgttccgaccctgccgcttaccggatacctgtccgcctttctcccttcgggaagcgtggcgctttctcatagctcacgctgtaggtatctcagttcggtgtaggtcgttcgctccaagctgggctgtgtgcacgaaccccccgttcagcccgaccgctgcgccttatccggtaactatcgtcttgagtccaacccggtaagacacgacttatcgccactggcagcagccactggtaacaggattagcagagcgaggtatgtaggcggtgctacagagttcttgaagtggtggcctaactacggctacactagaagaacagtatttggtatctgcgctctgctgaagccagttaccttcggaaaaagagttggtagctcttgatccggcaaacaaaccaccgctggtagcggtggtttttttgtttgcaagcagcagattacgcgcagaaaaaaaggatctcaagaagatcctttgatcttttctacggggtctgacgctcagtggaacgaaaactcacgttaagggattttggtcatgagattatcaaaaaggatcttcacctagatccttttaaattaaaaatgaagttttaaatcaatctaaagtatatatgagtaaacttggtctgacagctcgagtcccgtcaagtcagcgtaatgctctgccagtgttacaaccaattaaccaattctgattagaaaaactcatcgagcatcaaatgaaactgcaatttattcatatcaggattatcaataccatatttttgaaaaagccgtttctgtaatgaaggagaaaactcaccgaggcagttccataggatggcaagatcctggtatcggtctgcgattccgactcgtccaacatcaatacaacctattaatttcccctcgtcaaaaataaggttatcaagtgagaaatcaccatgagtgacgactgaatccggtgagaatggcaaaagcttatgcatttctttccagacttgttcaacaggccagccattacgctcgtcatcaaaatcactcgcatcaaccaaaccgttattcattcgtgattgcgcctgagcgagacgaaatacgcgatcgctgttaaaaggacaattacaaacaggaatcgaatgcaaccggcgcaggaacactgccagcgcatcaacaatattttcacctgaatcaggatattcttctaatacctggaatgctgttttcccggggatcgcagtggtgagtaaccatgcatcatcaggagtacggataaaatgcttgatggtcggaagaggcataaattccgtcagccagtttagtctgaccatctcatctgtaacatcattggcaacgctacctttgccatgtttcagaaacaactctggcgcatcgggcttcccatacaatcgatagattgtcgcacctgattgcccgacattatcgcgagcccatttatacccatataaatcagcatccatgttggaatttaatcgcggcctggagcaagacgtttcccgttgaatatggctcataacaccccttgtattactgtttatgtaagcagacagttttattgttcatgatgatatatttttatcttgtgcaatgtaacatcagagattttgagacacaacgtggctttgttgaataaatcgaacttttgctgagttgaaggatcagctcgagtgccacctgacgtctaagaaaccattattatcatgacattaacctataaaaataggcgtatcacgaggcagaatttcagataaaaaaaatccttagctttcgctaaggatgatttctggaattcgctcttcaatgGGAGttgacggctagctcagtcctaggtacagtgctagcTACTagagaaagaggagaaatactaaatggtgagcaagggcgaggagctgttcaccggggtggtgcccatcctggtcgagctggacggcgacgtgaacggccacaagttcagcgtgtccggcgagggcgagggcgatgccacctacggcaagctgaccctgaagttcatctgcaccaccggcaagctgcccgtgccctggcccaccctcgtgaccaccctgacctggggcgtgcagtgcttcagccgctaccccgaccacatgaagcagcacgacttcttcaagtccgccatgcccgaaggctacgtccaggagcgcaccatcttcttcaaggacgacggcaactacaagacccgcgccgaggtgaagttcgagggcgacaccctggtgaaccgcatcgagctgaagggcatcgacttcaaggaggacggcaacatcctggggcacaagctggagtacaactacatcagccacaacgtctatatcaccgccgacaagcagaagaacggcatcaaggccaacttcaagatccgccacaacatcgaggacggcagcgtgcagctcgccgaccactaccagcagaacacccccatcggcgacggccccgtgctgctgcccgacaaccactacctgagcacccagtccgccctgagcaaagaccccaacgagaagcgcgatcacatggtcctgctggagttcgtgaccgccgccgggatcactctcggcatggacgagctgtacaagtaataaGCTTccaggcatcaaataaaacgaaaggctcagtcgaaagactgggcctttcgttttatctgttgtttgtcggtgaacgctctctactagagtcacactggctcaccttcgggtgggcctttctgcgtttata' if __name__ == '__main__': unittest.main() diff --git a/test/test_files/ab_j23100.gb b/test/test_files/ab_j23100.gb new file mode 100644 index 00000000..de329983 --- /dev/null +++ b/test/test_files/ab_j23100.gb @@ -0,0 +1,80 @@ +LOCUS AB_J23100 2095 bp ds-DNA linear 25-OCT-2023 +DEFINITION . +FEATURES Location/Qualifiers + misc_feature 346..365 + /label="VF Primer binding site" + /ApEinfo_revcolor="#b7e6d7" + /ApEinfo_fwdcolor="#b7e6d7" + misc_feature complement(422..466) + /label="Terminator" + /ApEinfo_revcolor="#c7b0e3" + /ApEinfo_fwdcolor="#c7b0e3" + BioBrick 468..473 + /label="BsaI Site" + /ApEinfo_revcolor="#f58a5e" + /ApEinfo_fwdcolor="#f58a5e" + misc_feature 475..478 + /label="A" + /ApEinfo_revcolor="#ff9ccd" + /ApEinfo_fwdcolor="#ff9ccd" + misc_feature 479..513 + /label="J23100" + /ApEinfo_revcolor="#b1ff67" + /ApEinfo_fwdcolor="#b1ff67" + misc_feature 514..517 + /label="B" + /ApEinfo_revcolor="#f8d3a9" + /ApEinfo_fwdcolor="#f8d3a9" + misc_feature 531..602 + /label="His Terminator" + /ApEinfo_revcolor="#ffef86" + /ApEinfo_fwdcolor="#ffef86" + misc_feature complement(666..685) + /label="VR Primer binding site" + /ApEinfo_revcolor="#b1ff67" + /ApEinfo_fwdcolor="#b1ff67" + misc_feature complement(770..1384) + /label="rep (pMB1)" + /ApEinfo_revcolor="#85dae9" + /ApEinfo_fwdcolor="#85dae9" + misc_feature complement(1551..1656) + /label="Terminator T0" + /ApEinfo_revcolor="#c6c9d1" + /ApEinfo_fwdcolor="#c6c9d1" +ORIGIN + 1 tcattgccat acgaaattcc ggatgagcat tcatcaggcg ggcaagaatg tgaataaagg + 61 ccggataaaa cttgtgctta tttttcttta cggtctttaa aaaggccgta atatccagct + 121 gaacggtctg gttataggta cattgagcaa ctgactgaaa tgcctcaaaa tgttctttac + 181 gatgccattg ggatatatca acggtggtat atccagtgat ttttttctcc attttagctt + 241 ccttagctcc tgaaaatctc gataactcaa aaaatacgcc cggtagtgat cttatttcat + 301 tatggtgaaa gttggaacct cttacgtgcc cgatcaactc gagtgccacc tgacgtctaa + 361 gaaaccatta ttatcatgac attaacctat aaaaataggc gtatcacgag gcagaatttc + 421 agataaaaaa aatccttagc tttcgctaag gatgatttct ggaattcggt ctcgGGAGtt + 481 gacggctagc tcagtcctag gtacagtgct agcTACTCGA Gaccctgcag tccggcaaaa + 541 aagggcaagg tgtcaccacc ctgccctttt tctttaaaac cgaaaagatt acttcgcgtt + 601 atgcaggctt cctcgctcac tgactcgctg cgctcggtcg ttcggctgcg gcgagcggta + 661 tcagctcact caaaggcggt aatacggtta tccacagaat caggggataa cgcaggaaag + 721 aacatgtgag caaaaggcca gcaaaaggcc aggaaccgta aaaaggccgc gttgctggcg + 781 tttttccaca ggctccgccc ccctgacgag catcacaaaa atcgacgctc aagtcagagg + 841 tggcgaaacc cgacaggact ataaagatac caggcgtttc cccctggaag ctccctcgtg + 901 cgctctcctg ttccgaccct gccgcttacc ggatacctgt ccgcctttct cccttcggga + 961 agcgtggcgc tttctcatag ctcacgctgt aggtatctca gttcggtgta ggtcgttcgc + 1021 tccaagctgg gctgtgtgca cgaacccccc gttcagcccg accgctgcgc cttatccggt + 1081 aactatcgtc ttgagtccaa cccggtaaga cacgacttat cgccactggc agcagccact + 1141 ggtaacagga ttagcagagc gaggtatgta ggcggtgcta cagagttctt gaagtggtgg + 1201 cctaactacg gctacactag aagaacagta tttggtatct gcgctctgct gaagccagtt + 1261 accttcggaa aaagagttgg tagctcttga tccggcaaac aaaccaccgc tggtagcggt + 1321 ggtttttttg tttgcaagca gcagattacg cgcagaaaaa aaggatctca agaagatcct + 1381 ttgatctttt ctacggggtc tgacgctcag tggaacgaaa actcacgtta agggattttg + 1441 gtcatgagat tatcaaaaag gatcttcacc tagatccttt taaattaaaa atgaagtttt + 1501 aaatcaatct aaagtatata tgagtaaact tggtctgaca gctcgaggct tggattctca + 1561 ccaataaaaa acgcccggcg gcaaccgagc gttctgaaca aatccagatg gagttctgag + 1621 gtcattactg gatctatcaa caggagtcca agcgagctcg atatcaaatt acgccccgcc + 1681 ctgccactca tcgcagtact gttgtaattc attaagcatt ctgccgacat ggaagccatc + 1741 acaaacggca tgatgaacct gaatcgccag cggcatcagc accttgtcgc cttgcgtata + 1801 atatttgccc atggtgaaaa cgggggcgaa gaagttgtcc atattggcca cgtttaaatc + 1861 aaaactggtg aaactcaccc agggattggc tgagacgaaa aacatattct caataaaccc + 1921 tttagggaaa taggccaggt tttcaccgta acacgccaca tcttgcgaat atatgtgtag + 1981 aaactgccgg aaatcgtcgt ggtattcact ccagagcgat gaaaacgttt cagtttgctc + 2041 atggaaaacg gtgtaacaag ggtgaacact atcccatatc accagctcac cgtct +// \ No newline at end of file diff --git a/test/test_files/ab_j23101.gb b/test/test_files/ab_j23101.gb new file mode 100644 index 00000000..6f534a76 --- /dev/null +++ b/test/test_files/ab_j23101.gb @@ -0,0 +1,81 @@ +LOCUS AB_J23101 2095 bp ds-DNA circular 25-OCT-2023 +DEFINITION . +COMMENT From pSB1C00 - Loop universal L0 acceptor and J23100_B0034_AC +FEATURES Location/Qualifiers + misc_feature 346..365 + /label="VF Primer binding site" + /ApEinfo_revcolor="#b7e6d7" + /ApEinfo_fwdcolor="#b7e6d7" + misc_feature complement(422..466) + /label="Terminator" + /ApEinfo_revcolor="#c7b0e3" + /ApEinfo_fwdcolor="#c7b0e3" + BioBrick 468..473 + /label="BsaI Site" + /ApEinfo_revcolor="#f58a5e" + /ApEinfo_fwdcolor="#f58a5e" + misc_feature 475..478 + /label="A" + /ApEinfo_revcolor="#ff9ccd" + /ApEinfo_fwdcolor="#ff9ccd" + misc_feature 479..513 + /label="J23101" + /ApEinfo_revcolor="#b1ff67" + /ApEinfo_fwdcolor="#b1ff67" + misc_feature 514..517 + /label="B" + /ApEinfo_revcolor="#f8d3a9" + /ApEinfo_fwdcolor="#f8d3a9" + misc_feature 531..602 + /label="His Terminator" + /ApEinfo_revcolor="#ffef86" + /ApEinfo_fwdcolor="#ffef86" + misc_feature complement(666..685) + /label="VR Primer binding site" + /ApEinfo_revcolor="#b1ff67" + /ApEinfo_fwdcolor="#b1ff67" + misc_feature complement(770..1384) + /label="rep (pMB1)" + /ApEinfo_revcolor="#85dae9" + /ApEinfo_fwdcolor="#85dae9" + misc_feature complement(1551..1656) + /label="Terminator T0" + /ApEinfo_revcolor="#c6c9d1" + /ApEinfo_fwdcolor="#c6c9d1" +ORIGIN + 1 tcattgccat acgaaattcc ggatgagcat tcatcaggcg ggcaagaatg tgaataaagg + 61 ccggataaaa cttgtgctta tttttcttta cggtctttaa aaaggccgta atatccagct + 121 gaacggtctg gttataggta cattgagcaa ctgactgaaa tgcctcaaaa tgttctttac + 181 gatgccattg ggatatatca acggtggtat atccagtgat ttttttctcc attttagctt + 241 ccttagctcc tgaaaatctc gataactcaa aaaatacgcc cggtagtgat cttatttcat + 301 tatggtgaaa gttggaacct cttacgtgcc cgatcaactc gagtgccacc tgacgtctaa + 361 gaaaccatta ttatcatgac attaacctat aaaaataggc gtatcacgag gcagaatttc + 421 agataaaaaa aatccttagc tttcgctaag gatgatttct ggaattcggt ctcgGGAGtt + 481 tacagctagc tcagtcctag gtattatgct agcTACTCGA Gaccctgcag tccggcaaaa + 541 aagggcaagg tgtcaccacc ctgccctttt tctttaaaac cgaaaagatt acttcgcgtt + 601 atgcaggctt cctcgctcac tgactcgctg cgctcggtcg ttcggctgcg gcgagcggta + 661 tcagctcact caaaggcggt aatacggtta tccacagaat caggggataa cgcaggaaag + 721 aacatgtgag caaaaggcca gcaaaaggcc aggaaccgta aaaaggccgc gttgctggcg + 781 tttttccaca ggctccgccc ccctgacgag catcacaaaa atcgacgctc aagtcagagg + 841 tggcgaaacc cgacaggact ataaagatac caggcgtttc cccctggaag ctccctcgtg + 901 cgctctcctg ttccgaccct gccgcttacc ggatacctgt ccgcctttct cccttcggga + 961 agcgtggcgc tttctcatag ctcacgctgt aggtatctca gttcggtgta ggtcgttcgc + 1021 tccaagctgg gctgtgtgca cgaacccccc gttcagcccg accgctgcgc cttatccggt + 1081 aactatcgtc ttgagtccaa cccggtaaga cacgacttat cgccactggc agcagccact + 1141 ggtaacagga ttagcagagc gaggtatgta ggcggtgcta cagagttctt gaagtggtgg + 1201 cctaactacg gctacactag aagaacagta tttggtatct gcgctctgct gaagccagtt + 1261 accttcggaa aaagagttgg tagctcttga tccggcaaac aaaccaccgc tggtagcggt + 1321 ggtttttttg tttgcaagca gcagattacg cgcagaaaaa aaggatctca agaagatcct + 1381 ttgatctttt ctacggggtc tgacgctcag tggaacgaaa actcacgtta agggattttg + 1441 gtcatgagat tatcaaaaag gatcttcacc tagatccttt taaattaaaa atgaagtttt + 1501 aaatcaatct aaagtatata tgagtaaact tggtctgaca gctcgaggct tggattctca + 1561 ccaataaaaa acgcccggcg gcaaccgagc gttctgaaca aatccagatg gagttctgag + 1621 gtcattactg gatctatcaa caggagtcca agcgagctcg atatcaaatt acgccccgcc + 1681 ctgccactca tcgcagtact gttgtaattc attaagcatt ctgccgacat ggaagccatc + 1741 acaaacggca tgatgaacct gaatcgccag cggcatcagc accttgtcgc cttgcgtata + 1801 atatttgccc atggtgaaaa cgggggcgaa gaagttgtcc atattggcca cgtttaaatc + 1861 aaaactggtg aaactcaccc agggattggc tgagacgaaa aacatattct caataaaccc + 1921 tttagggaaa taggccaggt tttcaccgta acacgccaca tcttgcgaat atatgtgtag + 1981 aaactgccgg aaatcgtcgt ggtattcact ccagagcgat gaaaacgttt cagtttgctc + 2041 atggaaaacg gtgtaacaag ggtgaacact atcccatatc accagctcac cgtct +// \ No newline at end of file diff --git a/test/test_files/bc_b0034.gb b/test/test_files/bc_b0034.gb new file mode 100644 index 00000000..16872bdd --- /dev/null +++ b/test/test_files/bc_b0034.gb @@ -0,0 +1,81 @@ +LOCUS BC_B0034 2081 bp ds-DNA circular 25-OCT-2023 +DEFINITION . +COMMENT From pSB1C00 - Loop universal L0 acceptor and J23100_B0034_AC +FEATURES Location/Qualifiers + misc_feature 346..365 + /label="VF Primer binding site" + /ApEinfo_revcolor="#b7e6d7" + /ApEinfo_fwdcolor="#b7e6d7" + misc_feature complement(422..466) + /label="Terminator" + /ApEinfo_revcolor="#c7b0e3" + /ApEinfo_fwdcolor="#c7b0e3" + BioBrick 468..473 + /label="BsaI Site" + /ApEinfo_revcolor="#f58a5e" + /ApEinfo_fwdcolor="#f58a5e" + misc_feature 475..478 + /label="B" + /ApEinfo_revcolor="#f8d3a9" + /ApEinfo_fwdcolor="#f8d3a9" + misc_feature 479..499 + /label="B0034" + /ApEinfo_revcolor="#f58a5e" + /ApEinfo_fwdcolor="#f58a5e" + misc_feature 500..503 + /label="C" + /ApEinfo_revcolor="#85dae9" + /ApEinfo_fwdcolor="#85dae9" + misc_feature 517..588 + /label="His Terminator" + /ApEinfo_revcolor="#ffef86" + /ApEinfo_fwdcolor="#ffef86" + misc_feature complement(652..671) + /label="VR Primer binding site" + /ApEinfo_revcolor="#b1ff67" + /ApEinfo_fwdcolor="#b1ff67" + misc_feature complement(756..1370) + /label="rep (pMB1)" + /ApEinfo_revcolor="#85dae9" + /ApEinfo_fwdcolor="#85dae9" + misc_feature complement(1537..1642) + /label="Terminator T0" + /ApEinfo_revcolor="#c6c9d1" + /ApEinfo_fwdcolor="#c6c9d1" +ORIGIN + 1 tcattgccat acgaaattcc ggatgagcat tcatcaggcg ggcaagaatg tgaataaagg + 61 ccggataaaa cttgtgctta tttttcttta cggtctttaa aaaggccgta atatccagct + 121 gaacggtctg gttataggta cattgagcaa ctgactgaaa tgcctcaaaa tgttctttac + 181 gatgccattg ggatatatca acggtggtat atccagtgat ttttttctcc attttagctt + 241 ccttagctcc tgaaaatctc gataactcaa aaaatacgcc cggtagtgat cttatttcat + 301 tatggtgaaa gttggaacct cttacgtgcc cgatcaactc gagtgccacc tgacgtctaa + 361 gaaaccatta ttatcatgac attaacctat aaaaataggc gtatcacgag gcagaatttc + 421 agataaaaaa aatccttagc tttcgctaag gatgatttct ggaattcggt ctcgTACTag + 481 agaaagagga gaaatactaa atgCGAGacc ctgcagtccg gcaaaaaagg gcaaggtgtc + 541 accaccctgc cctttttctt taaaaccgaa aagattactt cgcgttatgc aggcttcctc + 601 gctcactgac tcgctgcgct cggtcgttcg gctgcggcga gcggtatcag ctcactcaaa + 661 ggcggtaata cggttatcca cagaatcagg ggataacgca ggaaagaaca tgtgagcaaa + 721 aggccagcaa aaggccagga accgtaaaaa ggccgcgttg ctggcgtttt tccacaggct + 781 ccgcccccct gacgagcatc acaaaaatcg acgctcaagt cagaggtggc gaaacccgac + 841 aggactataa agataccagg cgtttccccc tggaagctcc ctcgtgcgct ctcctgttcc + 901 gaccctgccg cttaccggat acctgtccgc ctttctccct tcgggaagcg tggcgctttc + 961 tcatagctca cgctgtaggt atctcagttc ggtgtaggtc gttcgctcca agctgggctg + 1021 tgtgcacgaa ccccccgttc agcccgaccg ctgcgcctta tccggtaact atcgtcttga + 1081 gtccaacccg gtaagacacg acttatcgcc actggcagca gccactggta acaggattag + 1141 cagagcgagg tatgtaggcg gtgctacaga gttcttgaag tggtggccta actacggcta + 1201 cactagaaga acagtatttg gtatctgcgc tctgctgaag ccagttacct tcggaaaaag + 1261 agttggtagc tcttgatccg gcaaacaaac caccgctggt agcggtggtt tttttgtttg + 1321 caagcagcag attacgcgca gaaaaaaagg atctcaagaa gatcctttga tcttttctac + 1381 ggggtctgac gctcagtgga acgaaaactc acgttaaggg attttggtca tgagattatc + 1441 aaaaaggatc ttcacctaga tccttttaaa ttaaaaatga agttttaaat caatctaaag + 1501 tatatatgag taaacttggt ctgacagctc gaggcttgga ttctcaccaa taaaaaacgc + 1561 ccggcggcaa ccgagcgttc tgaacaaatc cagatggagt tctgaggtca ttactggatc + 1621 tatcaacagg agtccaagcg agctcgatat caaattacgc cccgccctgc cactcatcgc + 1681 agtactgttg taattcatta agcattctgc cgacatggaa gccatcacaa acggcatgat + 1741 gaacctgaat cgccagcggc atcagcacct tgtcgccttg cgtataatat ttgcccatgg + 1801 tgaaaacggg ggcgaagaag ttgtccatat tggccacgtt taaatcaaaa ctggtgaaac + 1861 tcacccaggg attggctgag acgaaaaaca tattctcaat aaacccttta gggaaatagg + 1921 ccaggttttc accgtaacac gccacatctt gcgaatatat gtgtagaaac tgccggaaat + 1981 cgtcgtggta ttcactccag agcgatgaaa acgtttcagt ttgctcatgg aaaacggtgt + 2041 aacaagggtg aacactatcc catatcacca gctcaccgtc t +// \ No newline at end of file diff --git a/test/test_files/ce_ecfp.gb b/test/test_files/ce_ecfp.gb new file mode 100644 index 00000000..24b64599 --- /dev/null +++ b/test/test_files/ce_ecfp.gb @@ -0,0 +1,93 @@ +LOCUS CE_eCFP 2780 bp ds-DNA circular 25-OCT-2023 +DEFINITION . +COMMENT From pSB1C00 - Loop universal L0 acceptor and J23100_B0034_AC +FEATURES Location/Qualifiers + misc_feature 346..365 + /label="VF Primer binding site" + /ApEinfo_revcolor="#b7e6d7" + /ApEinfo_fwdcolor="#b7e6d7" + misc_feature complement(422..466) + /label="Terminator" + /ApEinfo_revcolor="#c7b0e3" + /ApEinfo_fwdcolor="#c7b0e3" + BioBrick 468..473 + /label="BsaI Site" + /ApEinfo_revcolor="#f58a5e" + /ApEinfo_fwdcolor="#f58a5e" + misc_feature 475..478 + /label="C" + /ApEinfo_revcolor="#85dae9" + /ApEinfo_fwdcolor="#85dae9" + misc_feature 479..1198 + /label="eCFP" + /ApEinfo_revcolor="#84b0dc" + /ApEinfo_fwdcolor="#84b0dc" + misc_feature 1199..1202 + /label="E" + /ApEinfo_revcolor="#b7e6d7" + /ApEinfo_fwdcolor="#b7e6d7" + misc_feature 1216..1287 + /label="His Terminator" + /ApEinfo_revcolor="#ffef86" + /ApEinfo_fwdcolor="#ffef86" + misc_feature complement(1351..1370) + /label="VR Primer binding site" + /ApEinfo_revcolor="#b1ff67" + /ApEinfo_fwdcolor="#b1ff67" + misc_feature complement(1455..2069) + /label="rep (pMB1)" + /ApEinfo_revcolor="#85dae9" + /ApEinfo_fwdcolor="#85dae9" + misc_feature complement(2236..2341) + /label="Terminator T0" + /ApEinfo_revcolor="#c6c9d1" + /ApEinfo_fwdcolor="#c6c9d1" +ORIGIN + 1 tcattgccat acgaaattcc ggatgagcat tcatcaggcg ggcaagaatg tgaataaagg + 61 ccggataaaa cttgtgctta tttttcttta cggtctttaa aaaggccgta atatccagct + 121 gaacggtctg gttataggta cattgagcaa ctgactgaaa tgcctcaaaa tgttctttac + 181 gatgccattg ggatatatca acggtggtat atccagtgat ttttttctcc attttagctt + 241 ccttagctcc tgaaaatctc gataactcaa aaaatacgcc cggtagtgat cttatttcat + 301 tatggtgaaa gttggaacct cttacgtgcc cgatcaactc gagtgccacc tgacgtctaa + 361 gaaaccatta ttatcatgac attaacctat aaaaataggc gtatcacgag gcagaatttc + 421 agataaaaaa aatccttagc tttcgctaag gatgatttct ggaattcggt ctcgaatggt + 481 gagcaagggc gaggagctgt tcaccggggt ggtgcccatc ctggtcgagc tggacggcga + 541 cgtgaacggc cacaagttca gcgtgtccgg cgagggcgag ggcgatgcca cctacggcaa + 601 gctgaccctg aagttcatct gcaccaccgg caagctgccc gtgccctggc ccaccctcgt + 661 gaccaccctg acctggggcg tgcagtgctt cagccgctac cccgaccaca tgaagcagca + 721 cgacttcttc aagtccgcca tgcccgaagg ctacgtccag gagcgcacca tcttcttcaa + 781 ggacgacggc aactacaaga cccgcgccga ggtgaagttc gagggcgaca ccctggtgaa + 841 ccgcatcgag ctgaagggca tcgacttcaa ggaggacggc aacatcctgg ggcacaagct + 901 ggagtacaac tacatcagcc acaacgtcta tatcaccgcc gacaagcaga agaacggcat + 961 caaggccaac ttcaagatcc gccacaacat cgaggacggc agcgtgcagc tcgccgacca + 1021 ctaccagcag aacaccccca tcggcgacgg ccccgtgctg ctgcccgaca accactacct + 1081 gagcacccag tccgccctga gcaaagaccc caacgagaag cgcgatcaca tggtcctgct + 1141 ggagttcgtg accgccgccg ggatcactct cggcatggac gagctgtaca agtaataagc + 1201 ttCGAGaccc tgcagtccgg caaaaaaggg caaggtgtca ccaccctgcc ctttttcttt + 1261 aaaaccgaaa agattacttc gcgttatgca ggcttcctcg ctcactgact cgctgcgctc + 1321 ggtcgttcgg ctgcggcgag cggtatcagc tcactcaaag gcggtaatac ggttatccac + 1381 agaatcaggg gataacgcag gaaagaacat gtgagcaaaa ggccagcaaa aggccaggaa + 1441 ccgtaaaaag gccgcgttgc tggcgttttt ccacaggctc cgcccccctg acgagcatca + 1501 caaaaatcga cgctcaagtc agaggtggcg aaacccgaca ggactataaa gataccaggc + 1561 gtttccccct ggaagctccc tcgtgcgctc tcctgttccg accctgccgc ttaccggata + 1621 cctgtccgcc tttctccctt cgggaagcgt ggcgctttct catagctcac gctgtaggta + 1681 tctcagttcg gtgtaggtcg ttcgctccaa gctgggctgt gtgcacgaac cccccgttca + 1741 gcccgaccgc tgcgccttat ccggtaacta tcgtcttgag tccaacccgg taagacacga + 1801 cttatcgcca ctggcagcag ccactggtaa caggattagc agagcgaggt atgtaggcgg + 1861 tgctacagag ttcttgaagt ggtggcctaa ctacggctac actagaagaa cagtatttgg + 1921 tatctgcgct ctgctgaagc cagttacctt cggaaaaaga gttggtagct cttgatccgg + 1981 caaacaaacc accgctggta gcggtggttt ttttgtttgc aagcagcaga ttacgcgcag + 2041 aaaaaaagga tctcaagaag atcctttgat cttttctacg gggtctgacg ctcagtggaa + 2101 cgaaaactca cgttaaggga ttttggtcat gagattatca aaaaggatct tcacctagat + 2161 ccttttaaat taaaaatgaa gttttaaatc aatctaaagt atatatgagt aaacttggtc + 2221 tgacagctcg aggcttggat tctcaccaat aaaaaacgcc cggcggcaac cgagcgttct + 2281 gaacaaatcc agatggagtt ctgaggtcat tactggatct atcaacagga gtccaagcga + 2341 gctcgatatc aaattacgcc ccgccctgcc actcatcgca gtactgttgt aattcattaa + 2401 gcattctgcc gacatggaag ccatcacaaa cggcatgatg aacctgaatc gccagcggca + 2461 tcagcacctt gtcgccttgc gtataatatt tgcccatggt gaaaacgggg gcgaagaagt + 2521 tgtccatatt ggccacgttt aaatcaaaac tggtgaaact cacccaggga ttggctgaga + 2581 cgaaaaacat attctcaata aaccctttag ggaaataggc caggttttca ccgtaacacg + 2641 ccacatcttg cgaatatatg tgtagaaact gccggaaatc gtcgtggtat tcactccaga + 2701 gcgatgaaaa cgtttcagtt tgctcatgga aaacggtgta acaagggtga acactatccc + 2761 atatcaccag ctcaccgtct +// \ No newline at end of file diff --git a/test/test_files/ce_gfp.gb b/test/test_files/ce_gfp.gb new file mode 100644 index 00000000..e4bf9a15 --- /dev/null +++ b/test/test_files/ce_gfp.gb @@ -0,0 +1,93 @@ +LOCUS CE_GFP 2777 bp ds-DNA circular 26-OCT-2023 +DEFINITION . +COMMENT From pSB1C00 - Loop universal L0 acceptor and J23100_B0034_AC +FEATURES Location/Qualifiers + misc_feature 346..365 + /label="VF Primer binding site" + /ApEinfo_revcolor="#b7e6d7" + /ApEinfo_fwdcolor="#b7e6d7" + misc_feature complement(422..466) + /label="Terminator" + /ApEinfo_revcolor="#c7b0e3" + /ApEinfo_fwdcolor="#c7b0e3" + BioBrick 468..473 + /label="BsaI Site" + /ApEinfo_revcolor="#f58a5e" + /ApEinfo_fwdcolor="#f58a5e" + misc_feature 475..478 + /label="C" + /ApEinfo_revcolor="#85dae9" + /ApEinfo_fwdcolor="#85dae9" + misc_feature 479..1195 + /label="GFP" + /ApEinfo_revcolor="#b1ff67" + /ApEinfo_fwdcolor="#b1ff67" + misc_feature 1196..1199 + /label="E" + /ApEinfo_revcolor="#b7e6d7" + /ApEinfo_fwdcolor="#b7e6d7" + misc_feature 1213..1284 + /label="His Terminator" + /ApEinfo_revcolor="#ffef86" + /ApEinfo_fwdcolor="#ffef86" + misc_feature complement(1348..1367) + /label="VR Primer binding site" + /ApEinfo_revcolor="#b1ff67" + /ApEinfo_fwdcolor="#b1ff67" + misc_feature complement(1452..2066) + /label="rep (pMB1)" + /ApEinfo_revcolor="#85dae9" + /ApEinfo_fwdcolor="#85dae9" + misc_feature complement(2233..2338) + /label="Terminator T0" + /ApEinfo_revcolor="#c6c9d1" + /ApEinfo_fwdcolor="#c6c9d1" +ORIGIN + 1 tcattgccat acgaaattcc ggatgagcat tcatcaggcg ggcaagaatg tgaataaagg + 61 ccggataaaa cttgtgctta tttttcttta cggtctttaa aaaggccgta atatccagct + 121 gaacggtctg gttataggta cattgagcaa ctgactgaaa tgcctcaaaa tgttctttac + 181 gatgccattg ggatatatca acggtggtat atccagtgat ttttttctcc attttagctt + 241 ccttagctcc tgaaaatctc gataactcaa aaaatacgcc cggtagtgat cttatttcat + 301 tatggtgaaa gttggaacct cttacgtgcc cgatcaactc gagtgccacc tgacgtctaa + 361 gaaaccatta ttatcatgac attaacctat aaaaataggc gtatcacgag gcagaatttc + 421 agataaaaaa aatccttagc tttcgctaag gatgatttct ggaattcggt ctcgaatggt + 481 gagcaagggc gaggagctgt tcaccggggt ggtgcccatc ctggtcgagc tggacggcga + 541 cgtaaacggc cacaagttca gcgtgtccgg cgagggcgag ggcgatgcca cctacggcaa + 601 gctgaccctg aagttcatct gcaccaccgg caagctgccc gtgccctggc ccaccctcgt + 661 gaccaccttc agctacggcg tgcagtgctt cagccgctac cccgaccaca tgaagcagca + 721 cgacttcttc aagtccgcca tgcccgaagg ctacgtccag gagcgcacca tcttcttcaa + 781 ggacgacggc aactacaaga cccgcgccga ggtgaagttc gagggcgaca ccctggtgaa + 841 ccgcatcgag ctgaagggca tcgacttcaa ggaggacggc aacatcctgg ggcacaagct + 901 ggagtacaac tacaacagcc acaacgtcta tatcatggcc gacaagcaga agaacggcat + 961 caaggtgaac ttcaagatcc gccacaacat cgaggacggc agcgtgcagc tcgccgacca + 1021 ctaccagcag aacaccccca tcggcgacgg ccccgtgctg ctgcccgaca accactacct + 1081 gagcacccag tccgccctga gcaaagaccc caacgagaag cgcgatcaca tggtcctgct + 1141 ggagttcgtg accgccgccg ggatcactca cggcatggac gagctgtaca agtaagcttC + 1201 GAGaccctgc agtccggcaa aaaagggcaa ggtgtcacca ccctgccctt tttctttaaa + 1261 accgaaaaga ttacttcgcg ttatgcaggc ttcctcgctc actgactcgc tgcgctcggt + 1321 cgttcggctg cggcgagcgg tatcagctca ctcaaaggcg gtaatacggt tatccacaga + 1381 atcaggggat aacgcaggaa agaacatgtg agcaaaaggc cagcaaaagg ccaggaaccg + 1441 taaaaaggcc gcgttgctgg cgtttttcca caggctccgc ccccctgacg agcatcacaa + 1501 aaatcgacgc tcaagtcaga ggtggcgaaa cccgacagga ctataaagat accaggcgtt + 1561 tccccctgga agctccctcg tgcgctctcc tgttccgacc ctgccgctta ccggatacct + 1621 gtccgccttt ctcccttcgg gaagcgtggc gctttctcat agctcacgct gtaggtatct + 1681 cagttcggtg taggtcgttc gctccaagct gggctgtgtg cacgaacccc ccgttcagcc + 1741 cgaccgctgc gccttatccg gtaactatcg tcttgagtcc aacccggtaa gacacgactt + 1801 atcgccactg gcagcagcca ctggtaacag gattagcaga gcgaggtatg taggcggtgc + 1861 tacagagttc ttgaagtggt ggcctaacta cggctacact agaagaacag tatttggtat + 1921 ctgcgctctg ctgaagccag ttaccttcgg aaaaagagtt ggtagctctt gatccggcaa + 1981 acaaaccacc gctggtagcg gtggtttttt tgtttgcaag cagcagatta cgcgcagaaa + 2041 aaaaggatct caagaagatc ctttgatctt ttctacgggg tctgacgctc agtggaacga + 2101 aaactcacgt taagggattt tggtcatgag attatcaaaa aggatcttca cctagatcct + 2161 tttaaattaa aaatgaagtt ttaaatcaat ctaaagtata tatgagtaaa cttggtctga + 2221 cagctcgagg cttggattct caccaataaa aaacgcccgg cggcaaccga gcgttctgaa + 2281 caaatccaga tggagttctg aggtcattac tggatctatc aacaggagtc caagcgagct + 2341 cgatatcaaa ttacgccccg ccctgccact catcgcagta ctgttgtaat tcattaagca + 2401 ttctgccgac atggaagcca tcacaaacgg catgatgaac ctgaatcgcc agcggcatca + 2461 gcaccttgtc gccttgcgta taatatttgc ccatggtgaa aacgggggcg aagaagttgt + 2521 ccatattggc cacgtttaaa tcaaaactgg tgaaactcac ccagggattg gctgagacga + 2581 aaaacatatt ctcaataaac cctttaggga aataggccag gttttcaccg taacacgcca + 2641 catcttgcga atatatgtgt agaaactgcc ggaaatcgtc gtggtattca ctccagagcg + 2701 atgaaaacgt ttcagtttgc tcatggaaaa cggtgtaaca agggtgaaca ctatcccata + 2761 tcaccagctc accgtct +// \ No newline at end of file diff --git a/test/test_files/ce_mrfp1.gb b/test/test_files/ce_mrfp1.gb new file mode 100644 index 00000000..5ce34456 --- /dev/null +++ b/test/test_files/ce_mrfp1.gb @@ -0,0 +1,92 @@ +LOCUS CE_mRFP1 2738 bp ds-DNA circular 26-OCT-2023 +DEFINITION . +COMMENT From pSB1C00 - Loop universal L0 acceptor and J23100_B0034_AC +FEATURES Location/Qualifiers + misc_feature 346..365 + /label="VF Primer binding site" + /ApEinfo_revcolor="#b7e6d7" + /ApEinfo_fwdcolor="#b7e6d7" + misc_feature complement(422..466) + /label="Terminator" + /ApEinfo_revcolor="#c7b0e3" + /ApEinfo_fwdcolor="#c7b0e3" + BioBrick 468..473 + /label="BsaI Site" + /ApEinfo_revcolor="#f58a5e" + /ApEinfo_fwdcolor="#f58a5e" + misc_feature 475..478 + /label="C" + /ApEinfo_revcolor="#85dae9" + /ApEinfo_fwdcolor="#85dae9" + misc_feature 479..1156 + /label="mRFP1" + /ApEinfo_revcolor="#f58a5e" + /ApEinfo_fwdcolor="#f58a5e" + misc_feature 1157..1160 + /label="E" + /ApEinfo_revcolor="#b7e6d7" + /ApEinfo_fwdcolor="#b7e6d7" + misc_feature 1174..1245 + /label="His Terminator" + /ApEinfo_revcolor="#ffef86" + /ApEinfo_fwdcolor="#ffef86" + misc_feature complement(1309..1328) + /label="VR Primer binding site" + /ApEinfo_revcolor="#b1ff67" + /ApEinfo_fwdcolor="#b1ff67" + misc_feature complement(1413..2027) + /label="rep (pMB1)" + /ApEinfo_revcolor="#85dae9" + /ApEinfo_fwdcolor="#85dae9" + misc_feature complement(2194..2299) + /label="Terminator T0" + /ApEinfo_revcolor="#c6c9d1" + /ApEinfo_fwdcolor="#c6c9d1" +ORIGIN + 1 tcattgccat acgaaattcc ggatgagcat tcatcaggcg ggcaagaatg tgaataaagg + 61 ccggataaaa cttgtgctta tttttcttta cggtctttaa aaaggccgta atatccagct + 121 gaacggtctg gttataggta cattgagcaa ctgactgaaa tgcctcaaaa tgttctttac + 181 gatgccattg ggatatatca acggtggtat atccagtgat ttttttctcc attttagctt + 241 ccttagctcc tgaaaatctc gataactcaa aaaatacgcc cggtagtgat cttatttcat + 301 tatggtgaaa gttggaacct cttacgtgcc cgatcaactc gagtgccacc tgacgtctaa + 361 gaaaccatta ttatcatgac attaacctat aaaaataggc gtatcacgag gcagaatttc + 421 agataaaaaa aatccttagc tttcgctaag gatgatttct ggaattcggt ctcgaatggc + 481 ttcctccgaa gatgttatca aagagttcat gcgtttcaaa gttcgtatgg aaggttccgt + 541 taacggtcac gagttcgaaa tcgaaggtga aggtgaaggt cgtccgtacg aaggtaccca + 601 gaccgctaaa ctgaaagtta ccaaaggtgg tccgctgccg ttcgcttggg acatcctgtc + 661 cccgcagttc cagtacggtt ccaaagctta cgttaaacac ccggctgaca tcccggacta + 721 cctgaaactg tccttcccgg aaggtttcaa atgggaacgt gttatgaact tcgaggacgg + 781 tggtgttgtt accgttaccc aggactcctc cctgcaagac ggtgagttca tctacaaagt + 841 taaactgcgt ggtaccaact tcccgtccga cggtccggtt atgcagaaaa aaaccatggg + 901 ttgggaagct tccaccgaac gtatgtaccc ggaagatggt gctctgaaag gtgaaatcaa + 961 aatgcgtctg aaactgaaag acggtggtca ctacgacgct gaagttaaaa ccacctacat + 1021 ggctaaaaaa ccggttcagc tgccgggtgc ttacaaaacc gacatcaaac tggacatcac + 1081 ctcccacaac gaggactaca ccatcgttga acagtacgaa cgtgctgaag gtcgtcactc + 1141 caccggtgct taatgagctt CGAGaccctg cagtccggca aaaaagggca aggtgtcacc + 1201 accctgccct ttttctttaa aaccgaaaag attacttcgc gttatgcagg cttcctcgct + 1261 cactgactcg ctgcgctcgg tcgttcggct gcggcgagcg gtatcagctc actcaaaggc + 1321 ggtaatacgg ttatccacag aatcagggga taacgcagga aagaacatgt gagcaaaagg + 1381 ccagcaaaag gccaggaacc gtaaaaaggc cgcgttgctg gcgtttttcc acaggctccg + 1441 cccccctgac gagcatcaca aaaatcgacg ctcaagtcag aggtggcgaa acccgacagg + 1501 actataaaga taccaggcgt ttccccctgg aagctccctc gtgcgctctc ctgttccgac + 1561 cctgccgctt accggatacc tgtccgcctt tctcccttcg ggaagcgtgg cgctttctca + 1621 tagctcacgc tgtaggtatc tcagttcggt gtaggtcgtt cgctccaagc tgggctgtgt + 1681 gcacgaaccc cccgttcagc ccgaccgctg cgccttatcc ggtaactatc gtcttgagtc + 1741 caacccggta agacacgact tatcgccact ggcagcagcc actggtaaca ggattagcag + 1801 agcgaggtat gtaggcggtg ctacagagtt cttgaagtgg tggcctaact acggctacac + 1861 tagaagaaca gtatttggta tctgcgctct gctgaagcca gttaccttcg gaaaaagagt + 1921 tggtagctct tgatccggca aacaaaccac cgctggtagc ggtggttttt ttgtttgcaa + 1981 gcagcagatt acgcgcagaa aaaaaggatc tcaagaagat cctttgatct tttctacggg + 2041 gtctgacgct cagtggaacg aaaactcacg ttaagggatt ttggtcatga gattatcaaa + 2101 aaggatcttc acctagatcc ttttaaatta aaaatgaagt tttaaatcaa tctaaagtat + 2161 atatgagtaa acttggtctg acagctcgag gcttggattc tcaccaataa aaaacgcccg + 2221 gcggcaaccg agcgttctga acaaatccag atggagttct gaggtcatta ctggatctat + 2281 caacaggagt ccaagcgagc tcgatatcaa attacgcccc gccctgccac tcatcgcagt + 2341 actgttgtaa ttcattaagc attctgccga catggaagcc atcacaaacg gcatgatgaa + 2401 cctgaatcgc cagcggcatc agcaccttgt cgccttgcgt ataatatttg cccatggtga + 2461 aaacgggggc gaagaagttg tccatattgg ccacgtttaa atcaaaactg gtgaaactca + 2521 cccagggatt ggctgagacg aaaaacatat tctcaataaa ccctttaggg aaataggcca + 2581 ggttttcacc gtaacacgcc acatcttgcg aatatatgtg tagaaactgc cggaaatcgt + 2641 cgtggtattc actccagagc gatgaaaacg tttcagtttg ctcatggaaa acggtgtaac + 2701 aagggtgaac actatcccat atcaccagct caccgtct +// \ No newline at end of file diff --git a/test/test_files/ef_b0015.gb b/test/test_files/ef_b0015.gb new file mode 100644 index 00000000..0c38ecfa --- /dev/null +++ b/test/test_files/ef_b0015.gb @@ -0,0 +1,95 @@ +LOCUS EF_B0015 2190 bp ds-DNA circular 25-OCT-2023 +DEFINITION . +COMMENT From pSB1C00 - Loop universal L0 acceptor and B0015_EF +FEATURES Location/Qualifiers + misc_feature 385..404 + /label="VF Primer binding site" + /ApEinfo_revcolor="#b7e6d7" + /ApEinfo_fwdcolor="#b7e6d7" + misc_feature complement(461..505) + /label="Terminator" + /ApEinfo_revcolor="#c7b0e3" + /ApEinfo_fwdcolor="#c7b0e3" + BioBrick 507..512 + /label="BsaI Site" + /ApEinfo_revcolor="#f58a5e" + /ApEinfo_fwdcolor="#f58a5e" + misc_feature 514..517 + /label="E" + /ApEinfo_revcolor="#f8d3a9" + /ApEinfo_fwdcolor="#f8d3a9" + terminator 518..646 + /label="BBa-B0015 Terminator" + /ApEinfo_revcolor="#ff9ccd" + /ApEinfo_fwdcolor="#ff9ccd" + terminator 526..597 + /label="rrnB T1 terminator" + /ApEinfo_revcolor="#c7b0e3" + /ApEinfo_fwdcolor="#c7b0e3" + terminator 613..640 + /label="T7Te terminator" + /ApEinfo_revcolor="#75c6a9" + /ApEinfo_fwdcolor="#75c6a9" + misc_feature 647..650 + /label="F" + /ApEinfo_revcolor="#f58a5e" + /ApEinfo_fwdcolor="#f58a5e" + misc_feature 664..735 + /label="His Terminator" + /ApEinfo_revcolor="#ffef86" + /ApEinfo_fwdcolor="#ffef86" + misc_feature complement(799..818) + /label="VR Primer binding site" + /ApEinfo_revcolor="#b1ff67" + /ApEinfo_fwdcolor="#b1ff67" + misc_feature complement(903..1517) + /label="rep (pMB1)" + /ApEinfo_revcolor="#85dae9" + /ApEinfo_fwdcolor="#85dae9" + misc_feature complement(1684..1789) + /label="Terminator T0" + /ApEinfo_revcolor="#c6c9d1" + /ApEinfo_fwdcolor="#c6c9d1" + CDS complement(1802..271) + /label="Cam Resistance" + /ApEinfo_revcolor="#ff9ccd" + /ApEinfo_fwdcolor="#ff9ccd" +ORIGIN + 1 aagggtgaac actatcccat atcaccagct caccgtcttt cattgccata cgaaattccg + 61 gatgagcatt catcaggcgg gcaagaatgt gaataaaggc cggataaaac ttgtgcttat + 121 ttttctttac ggtctttaaa aaggccgtaa tatccagctg aacggtctgg ttataggtac + 181 attgagcaac tgactgaaat gcctcaaaat gttctttacg atgccattgg gatatatcaa + 241 cggtggtata tccagtgatt tttttctcca ttttagcttc cttagctcct gaaaatctcg + 301 ataactcaaa aaatacgccc ggtagtgatc ttatttcatt atggtgaaag ttggaacctc + 361 ttacgtgccc gatcaactcg agtgccacct gacgtctaag aaaccattat tatcatgaca + 421 ttaacctata aaaataggcg tatcacgagg cagaatttca gataaaaaaa atccttagct + 481 ttcgctaagg atgatttctg gaattcggtc tcgGCTTcca ggcatcaaat aaaacgaaag + 541 gctcagtcga aagactgggc ctttcgtttt atctgttgtt tgtcggtgaa cgctctctac + 601 tagagtcaca ctggctcacc ttcgggtggg cctttctgcg tttatacgct CGAGaccctg + 661 cagtccggca aaaaagggca aggtgtcacc accctgccct ttttctttaa aaccgaaaag + 721 attacttcgc gttatgcagg cttcctcgct cactgactcg ctgcgctcgg tcgttcggct + 781 gcggcgagcg gtatcagctc actcaaaggc ggtaatacgg ttatccacag aatcagggga + 841 taacgcagga aagaacatgt gagcaaaagg ccagcaaaag gccaggaacc gtaaaaaggc + 901 cgcgttgctg gcgtttttcc acaggctccg cccccctgac gagcatcaca aaaatcgacg + 961 ctcaagtcag aggtggcgaa acccgacagg actataaaga taccaggcgt ttccccctgg + 1021 aagctccctc gtgcgctctc ctgttccgac cctgccgctt accggatacc tgtccgcctt + 1081 tctcccttcg ggaagcgtgg cgctttctca tagctcacgc tgtaggtatc tcagttcggt + 1141 gtaggtcgtt cgctccaagc tgggctgtgt gcacgaaccc cccgttcagc ccgaccgctg + 1201 cgccttatcc ggtaactatc gtcttgagtc caacccggta agacacgact tatcgccact + 1261 ggcagcagcc actggtaaca ggattagcag agcgaggtat gtaggcggtg ctacagagtt + 1321 cttgaagtgg tggcctaact acggctacac tagaagaaca gtatttggta tctgcgctct + 1381 gctgaagcca gttaccttcg gaaaaagagt tggtagctct tgatccggca aacaaaccac + 1441 cgctggtagc ggtggttttt ttgtttgcaa gcagcagatt acgcgcagaa aaaaaggatc + 1501 tcaagaagat cctttgatct tttctacggg gtctgacgct cagtggaacg aaaactcacg + 1561 ttaagggatt ttggtcatga gattatcaaa aaggatcttc acctagatcc ttttaaatta + 1621 aaaatgaagt tttaaatcaa tctaaagtat atatgagtaa acttggtctg acagctcgag + 1681 gcttggattc tcaccaataa aaaacgcccg gcggcaaccg agcgttctga acaaatccag + 1741 atggagttct gaggtcatta ctggatctat caacaggagt ccaagcgagc tcgatatcaa + 1801 attacgcccc gccctgccac tcatcgcagt actgttgtaa ttcattaagc attctgccga + 1861 catggaagcc atcacaaacg gcatgatgaa cctgaatcgc cagcggcatc agcaccttgt + 1921 cgccttgcgt ataatatttg cccatggtga aaacgggggc gaagaagttg tccatattgg + 1981 ccacgtttaa atcaaaactg gtgaaactca cccagggatt ggctgagacg aaaaacatat + 2041 tctcaataaa ccctttaggg aaataggcca ggttttcacc gtaacacgcc acatcttgcg + 2101 aatatatgtg tagaaactgc cggaaatcgt cgtggtattc actccagagc gatgaaaacg + 2161 tttcagtttg ctcatggaaa acggtgtaac +// \ No newline at end of file diff --git a/test/test_files/j23100_b0034.gb b/test/test_files/j23100_b0034.gb deleted file mode 100644 index e3c10b03..00000000 --- a/test/test_files/j23100_b0034.gb +++ /dev/null @@ -1,82 +0,0 @@ -LOCUS Copy_of_J23100_B0034_AC 2123 bp ds-DNA circular 27-JAN-2023 -DEFINITION . -COMMENT From pSB1C00 - Loop universal L0 acceptor and J23100_B0034_AC -FEATURES Location/Qualifiers - misc_feature 347..366 - /label="VF Primer binding site" - /ApEinfo_revcolor="#b7e6d7" - /ApEinfo_fwdcolor="#b7e6d7" - misc_feature complement(423..467) - /label="Terminator" - /ApEinfo_revcolor="#c7b0e3" - /ApEinfo_fwdcolor="#c7b0e3" - BioBrick 469..474 - /label="BsaI Site" - /ApEinfo_revcolor="#f58a5e" - /ApEinfo_fwdcolor="#f58a5e" - Promoter 483..517 - /label="BBa_J23100" - /ApEinfo_revcolor="#b4abac" - /ApEinfo_fwdcolor="#b4abac" - RBS 524..535 - /label="B0034" - /ApEinfo_revcolor="#b4abac" - /ApEinfo_fwdcolor="#b4abac" - misc_feature 559..630 - /label="His Terminator" - /ApEinfo_revcolor="#ffef86" - /ApEinfo_fwdcolor="#ffef86" - misc_feature complement(694..713) - /label="VR Primer binding site" - /ApEinfo_revcolor="#b1ff67" - /ApEinfo_fwdcolor="#b1ff67" - misc_feature complement(798..1412) - /label="rep (pMB1)" - /ApEinfo_revcolor="#85dae9" - /ApEinfo_fwdcolor="#85dae9" - misc_feature complement(1579..1684) - /label="Terminator T0" - /ApEinfo_revcolor="#c6c9d1" - /ApEinfo_fwdcolor="#c6c9d1" - CDS complement(1697..233) - /label="Cam Resistance" - /ApEinfo_revcolor="#ff9ccd" - /ApEinfo_fwdcolor="#ff9ccd" -ORIGIN - 1 ttcattgcca tacgaaattc cggatgagca ttcatcaggc gggcaagaat gtgaataaag - 61 gccggataaa acttgtgctt atttttcttt acggtcttta aaaaggccgt aatatccagc - 121 tgaacggtct ggttataggt acattgagca actgactgaa atgcctcaaa atgttcttta - 181 cgatgccatt gggatatatc aacggtggta tatccagtga tttttttctc cattttagct - 241 tccttagctc ctgaaaatct cgataactca aaaaatacgc ccggtagtga tcttatttca - 301 ttatggtgaa agttggaacc tcttacgtgc ccgatcaact cgagtgccac ctgacgtcta - 361 agaaaccatt attatcatga cattaaccta taaaaatagg cgtatcacga ggcagaattt - 421 cagataaaaa aaatccttag ctttcgctaa ggatgatttc tggaattcgg tctcgggagt - 481 ctTTGACGGC TAGCTCAGTC CTAGGTACAG TGCTAGCCTA GAGAAAGAGG AGAAATACTA - 541 GaatgCGAGa ccctgcagtc cggcaaaaaa gggcaaggtg tcaccaccct gccctttttc - 601 tttaaaaccg aaaagattac ttcgcgttat gcaggcttcc tcgctcactg actcgctgcg - 661 ctcggtcgtt cggctgcggc gagcggtatc agctcactca aaggcggtaa tacggttatc - 721 cacagaatca ggggataacg caggaaagaa catgtgagca aaaggccagc aaaaggccag - 781 gaaccgtaaa aaggccgcgt tgctggcgtt tttccacagg ctccgccccc ctgacgagca - 841 tcacaaaaat cgacgctcaa gtcagaggtg gcgaaacccg acaggactat aaagatacca - 901 ggcgtttccc cctggaagct ccctcgtgcg ctctcctgtt ccgaccctgc cgcttaccgg - 961 atacctgtcc gcctttctcc cttcgggaag cgtggcgctt tctcatagct cacgctgtag - 1021 gtatctcagt tcggtgtagg tcgttcgctc caagctgggc tgtgtgcacg aaccccccgt - 1081 tcagcccgac cgctgcgcct tatccggtaa ctatcgtctt gagtccaacc cggtaagaca - 1141 cgacttatcg ccactggcag cagccactgg taacaggatt agcagagcga ggtatgtagg - 1201 cggtgctaca gagttcttga agtggtggcc taactacggc tacactagaa gaacagtatt - 1261 tggtatctgc gctctgctga agccagttac cttcggaaaa agagttggta gctcttgatc - 1321 cggcaaacaa accaccgctg gtagcggtgg tttttttgtt tgcaagcagc agattacgcg - 1381 cagaaaaaaa ggatctcaag aagatccttt gatcttttct acggggtctg acgctcagtg - 1441 gaacgaaaac tcacgttaag ggattttggt catgagatta tcaaaaagga tcttcaccta - 1501 gatcctttta aattaaaaat gaagttttaa atcaatctaa agtatatatg agtaaacttg - 1561 gtctgacagc tcgaggcttg gattctcacc aataaaaaac gcccggcggc aaccgagcgt - 1621 tctgaacaaa tccagatgga gttctgaggt cattactgga tctatcaaca ggagtccaag - 1681 cgagctcgat atcaaattac gccccgccct gccactcatc gcagtactgt tgtaattcat - 1741 taagcattct gccgacatgg aagccatcac aaacggcatg atgaacctga atcgccagcg - 1801 gcatcagcac cttgtcgcct tgcgtataat atttgcccat ggtgaaaacg ggggcgaaga - 1861 agttgtccat attggccacg tttaaatcaa aactggtgaa actcacccag ggattggctg - 1921 agacgaaaaa catattctca ataaaccctt tagggaaata ggccaggttt tcaccgtaac - 1981 acgccacatc ttgcgaatat atgtgtagaa actgccggaa atcgtcgtgg tattcactcc - 2041 agagcgatga aaacgtttca gtttgctcat ggaaaacggt gtaacaaggg tgaacactat - 2101 cccatatcac cagctcaccg tct -// \ No newline at end of file diff --git a/test/test_files/podd1.gb b/test/test_files/podd1.gb new file mode 100644 index 00000000..66377409 --- /dev/null +++ b/test/test_files/podd1.gb @@ -0,0 +1,221 @@ +LOCUS Copy_of_pSB1K01_-_Loop_ 3286 bp ds-DNA circular 09-NOV-2022 +DEFINITION . +KEYWORDS "accession:pSB1K01" +COMMENT Imported from database: Registry of Standard Biological Parts + Entry: pSB1K01 Description: pOdd1 Loop Vector based on pSB1K3 +FEATURES Location/Qualifiers + primer 386..399 + /label="pOdd1_To_pOdd4_Fw" + /note="sequence: ctggaattcgctcttcacagggagtgagacccaatacgcaaaccgcctct" + /ApEinfo_revcolor="#9eafd2" + /ApEinfo_fwdcolor="#9eafd2" + primer_binding 547..566 + /label="VF primer binding site" + /ApEinfo_revcolor="#b1ff67" + /ApEinfo_fwdcolor="#b1ff67" + primer 547..566 + /label="VF2" + /note="sequence: ccacctgacgtctaagaaac" + /ApEinfo_revcolor="#b1ff67" + /ApEinfo_fwdcolor="#b1ff67" + primer complement(651..669) + /label="pOdd_Suff_Rev" + /note="sequence: CGAATTCCAGAAATCATCC" + /ApEinfo_revcolor="#f7977a" + /ApEinfo_fwdcolor="#f7977a" + primer 656..681 + /label="pOdd1_Insert_Fw" + /note="sequence: atttctggaattcgctcttcaatggg" + /ApEinfo_revcolor="#faac61" + /ApEinfo_fwdcolor="#faac61" + primer 656..684 + /label="pOdd2_BF_Insert_Fw" + /note="sequence: atttctggaattcgctcttcagcaTACTt" + /ApEinfo_revcolor="#84b0dc" + /ApEinfo_fwdcolor="#84b0dc" + primer 656..684 + /label="pOdd1_BF_Insert_Fw" + /note="sequence: atttctggaattcgctcttcaatgTACTt" + /ApEinfo_revcolor="#ffef86" + /ApEinfo_fwdcolor="#ffef86" + primer 660..709 + /label="pOdd1_To_pOdd4_Fw" + /note="sequence: ctggaattcgctcttcacagggagtgagacccaatacgcaaaccgcctct" + /ApEinfo_revcolor="#9eafd2" + /ApEinfo_fwdcolor="#9eafd2" + dna 663..668 + /label="EcoRI" + /ApEinfo_revcolor="#d6b295" + /ApEinfo_fwdcolor="#d6b295" + dna 669..675 + /label="SapI" + /ApEinfo_revcolor="#faac61" + /ApEinfo_fwdcolor="#faac61" + misc 677..679 + /label="5' Fusion Site ATG" + /ApEinfo_revcolor="#c7b0e3" + /ApEinfo_fwdcolor="#c7b0e3" + misc 680..683 + /label="Fusion Site GGAG" + /ApEinfo_revcolor="#ffef86" + /ApEinfo_fwdcolor="#ffef86" + primer 683..696 + /label="pOdd1_CF_Fw" + /note="sequence: CTCTTCAATGaatgTGAGACCCAATAC" + /ApEinfo_revcolor="#f7977a" + /ApEinfo_fwdcolor="#f7977a" + primer 684..702 + /label="pOdd1_BF_OR_BE_Fw" + /note="sequence: CTCTTCAATGtactTGAGACCCAATACGCAAAC" + /ApEinfo_revcolor="#f7977a" + /ApEinfo_fwdcolor="#f7977a" + dna complement(685..690) + /label="BsaI" + /ApEinfo_revcolor="#faac61" + /ApEinfo_fwdcolor="#faac61" + misc_feature 691..1759 + /label="BBa_J04454" + /ApEinfo_revcolor="#b7e6d7" + /ApEinfo_fwdcolor="#b7e6d7" + misc_feature 917..1594 + /label="RFP" + /ApEinfo_revcolor="#ffef86" + /ApEinfo_fwdcolor="#ffef86" + primer complement(1739..1756) + /label="pOdd_Pre_Rev" + /note="sequence: AAACGCAGAAAGGCCCAC" + /ApEinfo_revcolor="#f7977a" + /ApEinfo_fwdcolor="#f7977a" + primer complement(1741..1790) + /label="pOdd1_To_pOdd4_Rev" + /note="sequence: ggactgcaggctcttcaaccagcgtgagacctataaacgcagaaaggccc" + /ApEinfo_revcolor="#ff9ccd" + /ApEinfo_fwdcolor="#ff9ccd" + dna 1760..1765 + /label="BsaI" + /ApEinfo_revcolor="#84b0dc" + /ApEinfo_fwdcolor="#84b0dc" + primer complement(1761..1790) + /label="pOdd1_AE_Insert_Rev" + /note="sequence: ggactgcaggctcttcatgcAAGCtgagac" + /ApEinfo_revcolor="#c6c9d1" + /ApEinfo_fwdcolor="#c6c9d1" + misc 1767..1770 + /label="Fusion Site CGCT" + /ApEinfo_revcolor="#c6c9d1" + /ApEinfo_fwdcolor="#c6c9d1" + primer complement(1769..1790) + /label="pOdd1_Insert_Rev" + /note="sequence: ggactgcaggctcttcatgcag" + /ApEinfo_revcolor="#85dae9" + /ApEinfo_fwdcolor="#85dae9" + primer complement(1769..1790) + /label="pOdd2_Insert_Rev" + /note="sequence: ggactgcaggctcttcagtaag" + /ApEinfo_revcolor="#f58a5e" + /ApEinfo_fwdcolor="#f58a5e" + primer 1770..1787 + /label="pOdd1_AE_Fw" + /note="sequence: ATAGGTCTCAgcttGCATGAAGAGCCTGCAG" + /ApEinfo_revcolor="#f7977a" + /ApEinfo_fwdcolor="#f7977a" + misc 1771..1773 + /label="3' Fusion Site GCA" + /ApEinfo_revcolor="#d59687" + /ApEinfo_fwdcolor="#d59687" + primer 1771..1787 + /label="pOdd1_AC_Fw" + /note="sequence: ATAGGTCTCAaatgGCATGAAGAGCCTGCAG" + /ApEinfo_revcolor="#f7977a" + /ApEinfo_fwdcolor="#f7977a" + dna complement(1775..1781) + /label="SapI" + /ApEinfo_revcolor="#d6b295" + /ApEinfo_fwdcolor="#d6b295" + dna complement(1782..1787) + /label="PstI" + /ApEinfo_revcolor="#ffef86" + /ApEinfo_fwdcolor="#ffef86" + stem_loop 1788..1859 + /label="E. coli his operon terminator" + /ApEinfo_revcolor="#b4abac" + /ApEinfo_fwdcolor="#b4abac" + primer_binding complement(1923..1942) + /label="VR primer binding site" + /ApEinfo_revcolor="#ff9ccd" + /ApEinfo_fwdcolor="#ff9ccd" + primer complement(1923..1942) + /label="VR" + /note="sequence: gtattaccgcctttgagtga" + /ApEinfo_revcolor="#c6c9d1" + /ApEinfo_fwdcolor="#c6c9d1" + misc 2027..2641 + /label="rep (pMB1)" + /ApEinfo_revcolor="#f8d3a9" + /ApEinfo_fwdcolor="#f8d3a9" + primer 2356..2370 + /label="pOdd1_To_pOdd4_Rev" + /note="sequence: ggactgcaggctcttcaaccagcgtgagacctataaacgcagaaaggccc" + /ApEinfo_revcolor="#ff9ccd" + /ApEinfo_fwdcolor="#ff9ccd" + misc 2863..392 + /label="Kanamycin resistance marker" + /ApEinfo_revcolor="#faac61" + /ApEinfo_fwdcolor="#faac61" +ORIGIN + 1 ccggcgcagg aacactgcca gcgcatcaac aatattttca cctgaatcag gatattcttc + 61 taatacctgg aatgctgttt tcccggggat cgcagtggtg agtaaccatg catcatcagg + 121 agtacggata aaatgcttga tggtcggaag aggcataaat tccgtcagcc agtttagtct + 181 gaccatctca tctgtaacat cattggcaac gctacctttg ccatgtttca gaaacaactc + 241 tggcgcatcg ggcttcccat acaatcgata gattgtcgca cctgattgcc cgacattatc + 301 gcgagcccat ttatacccat ataaatcagc atccatgttg gaatttaatc gcggcctgga + 361 gcaagacgtt tcccgttgaa tatggctcat aacacccctt gtattactgt ttatgtaagc + 421 agacagtttt attgttcatg atgatatatt tttatcttgt gcaatgtaac atcagagatt + 481 ttgagacaca acgtggcttt gttgaataaa tcgaactttt gctgagttga aggatcagct + 541 cgagtgccac ctgacgtcta agaaaccatt attatcatga cattaaccta taaaaatagg + 601 cgtatcacga ggcagaattt cagataaaaa aaatccttag ctttcgctaa ggatgatttc + 661 tggaattcgc tcttcaatgg gagtgagacc caatacgcaa accgcctctc cccgcgcgtt + 721 ggccgattca ttaatgcagc tggcacgaca ggtttcccga ctggaaagcg ggcagtgagc + 781 gcaacgcaat taatgtgagt tagctcactc attaggcacc ccaggcttta cactttatgc + 841 ttccggctcg tatgttgtgt ggaattgtga gcggataaca atttcacaca tactagagaa + 901 agaggagaaa tactagatgg cttcctccga agacgttatc aaagagttca tgcgtttcaa + 961 agttcgtatg gaaggttccg ttaacggtca cgagttcgaa atcgaaggtg aaggtgaagg + 1021 tcgtccgtac gaaggtaccc agaccgctaa actgaaagtt accaaaggtg gtccgctgcc + 1081 gttcgcttgg gacatcctgt ccccgcagtt ccagtacggt tccaaagctt acgttaaaca + 1141 cccggctgac atcccggact acctgaaact gtccttcccg gaaggtttca aatgggaacg + 1201 tgttatgaac ttcgaagacg gtggtgttgt taccgttacc caggactcct ccctgcaaga + 1261 cggtgagttc atctacaaag ttaaactgcg tggtaccaac ttcccgtccg acggtccggt + 1321 tatgcagaaa aaaaccatgg gttgggaagc ttccaccgaa cgtatgtacc cggaagacgg + 1381 tgctctgaaa ggtgaaatca aaatgcgtct gaaactgaaa gacggtggtc actacgacgc + 1441 tgaagttaaa accacctaca tggctaaaaa accggttcag ctgccgggtg cttacaaaac + 1501 cgacatcaaa ctggacatca cctcccacaa cgaagactac accatcgttg aacagtacga + 1561 acgtgctgaa ggtcgtcact ccaccggtgc ttaataacgc tgatagtgct agtgtagatc + 1621 gctactagag ccaggcatca aataaaacga aaggctcagt cgaaagactg ggcctttcgt + 1681 tttatctgtt gtttgtcggt gaacgctctc tactagagtc acactggctc accttcgggt + 1741 gggcctttct gcgtttatag gtctcacgct gcatgaagag cctgcagtcc ggcaaaaaag + 1801 ggcaaggtgt caccaccctg ccctttttct ttaaaaccga aaagattact tcgcgttatg + 1861 caggcttcct cgctcactga ctcgctgcgc tcggtcgttc ggctgcggcg agcggtatca + 1921 gctcactcaa aggcggtaat acggttatcc acagaatcag gggataacgc aggaaagaac + 1981 atgtgagcaa aaggccagca aaaggccagg aaccgtaaaa aggccgcgtt gctggcgttt + 2041 ttccacaggc tccgcccccc tgacgagcat cacaaaaatc gacgctcaag tcagaggtgg + 2101 cgaaacccga caggactata aagataccag gcgtttcccc ctggaagctc cctcgtgcgc + 2161 tctcctgttc cgaccctgcc gcttaccgga tacctgtccg cctttctccc ttcgggaagc + 2221 gtggcgcttt ctcatagctc acgctgtagg tatctcagtt cggtgtaggt cgttcgctcc + 2281 aagctgggct gtgtgcacga accccccgtt cagcccgacc gctgcgcctt atccggtaac + 2341 tatcgtcttg agtccaaccc ggtaagacac gacttatcgc cactggcagc agccactggt + 2401 aacaggatta gcagagcgag gtatgtaggc ggtgctacag agttcttgaa gtggtggcct + 2461 aactacggct acactagaag aacagtattt ggtatctgcg ctctgctgaa gccagttacc + 2521 ttcggaaaaa gagttggtag ctcttgatcc ggcaaacaaa ccaccgctgg tagcggtggt + 2581 ttttttgttt gcaagcagca gattacgcgc agaaaaaaag gatctcaaga agatcctttg + 2641 atcttttcta cggggtctga cgctcagtgg aacgaaaact cacgttaagg gattttggtc + 2701 atgagattat caaaaaggat cttcacctag atccttttaa attaaaaatg aagttttaaa + 2761 tcaatctaaa gtatatatga gtaaacttgg tctgacagct cgagtcccgt caagtcagcg + 2821 taatgctctg ccagtgttac aaccaattaa ccaattctga ttagaaaaac tcatcgagca + 2881 tcaaatgaaa ctgcaattta ttcatatcag gattatcaat accatatttt tgaaaaagcc + 2941 gtttctgtaa tgaaggagaa aactcaccga ggcagttcca taggatggca agatcctggt + 3001 atcggtctgc gattccgact cgtccaacat caatacaacc tattaatttc ccctcgtcaa + 3061 aaataaggtt atcaagtgag aaatcaccat gagtgacgac tgaatccggt gagaatggca + 3121 aaagcttatg catttctttc cagacttgtt caacaggcca gccattacgc tcgtcatcaa + 3181 aatcactcgc atcaaccaaa ccgttattca ttcgtgattg cgcctgagcg agacgaaata + 3241 cgcgatcgct gttaaaagga caattacaaa caggaatcga atgcaa +// \ No newline at end of file diff --git a/test/test_files/sbol_gg.ipynb b/test/test_files/sbol_gg.ipynb new file mode 100644 index 00000000..f8b2bf77 --- /dev/null +++ b/test/test_files/sbol_gg.ipynb @@ -0,0 +1,422 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "import sbol3\n", + "from sbol_utilities.component import ed_restriction_enzyme, backbone, part_in_backbone, part_in_backbone_from_sbol, \\\n", + " digestion, ligation, Assembly_plan_composite_in_backbone_single_enzyme, backbone_from_sbol\n", + "from sbol_utilities.conversion import convert_from_genbank\n", + "from itertools import product\n", + "from sbol_utilities.component import contained_components" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Simple assembly" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "\"\"\"Test assembly plan class\"\"\"\n", + "doc = sbol3.Document()\n", + "sbol3.set_namespace('http://sbolstandard.org/testfiles')\n", + "# Assembly plan setup\n", + "bsai = ed_restriction_enzyme('BsaI')\n", + "#lvl1 acceptor\n", + "podd1_dir = os.path.join('podd1.gb')\n", + "podd_doc = convert_from_genbank(podd1_dir, 'https://github.com/Gonza10V')\n", + "podd_af = [top_level for top_level in podd_doc if type(top_level)==sbol3.Component][0]\n", + "podd_backbone, podd_backbone_seq = backbone_from_sbol('pOdd_bb', podd_af, [680,1770], 4, False, name='pOdd_bb')\n", + "doc.add([podd_backbone,podd_backbone_seq])\n", + "#parts in backbone\n", + "##get parts from genbank\n", + "j23100_dir = os.path.join('ab_j23100.gb')\n", + "b0034_dir = os.path.join('bc_b0034.gb')\n", + "gfp_dir = os.path.join('ce_gfp.gb')\n", + "b0015_dir = os.path.join('ef_b0015.gb')\n", + "j23100_doc = convert_from_genbank(j23100_dir, 'https://github.com/Gonza10V')\n", + "j23100_ab = [top_level for top_level in j23100_doc if type(top_level)==sbol3.Component][0]\n", + "b0034_doc = convert_from_genbank(b0034_dir, 'https://github.com/Gonza10V')\n", + "b0034_bc = [top_level for top_level in b0034_doc if type(top_level)==sbol3.Component][0]\n", + "gfp_doc = convert_from_genbank(gfp_dir, 'https://github.com/Gonza10V')\n", + "gfp_ce = [top_level for top_level in gfp_doc if type(top_level)==sbol3.Component][0]\n", + "b0015_doc = convert_from_genbank(b0015_dir, 'https://github.com/Gonza10V')\n", + "b0015_ef = [top_level for top_level in b0015_doc if type(top_level)==sbol3.Component][0]\n", + "##SBOL parts in backbone\n", + "j23100_ab_in_bb, j23100_ab_in_bb_seq = part_in_backbone_from_sbol('j23100_ab_in_bb', j23100_ab, [479,513], [sbol3.SO_PROMOTER], 4, False, name='j23100_ab_in_bb')\n", + "doc.add([j23100_ab_in_bb, j23100_ab_in_bb_seq])\n", + "b0034_bc_in_bb, b0034_bc_in_bb_seq = part_in_backbone_from_sbol('b0034_bc_in_bb', b0034_bc, [479,499], [sbol3.SO_RBS], 4, False, name='b0034_bc_in_bb')\n", + "doc.add([b0034_bc_in_bb, b0034_bc_in_bb_seq])\n", + "gfp_ce_in_bb, gfp_ce_in_bb_seq = part_in_backbone_from_sbol('gfp_ce_in_bb', gfp_ce, [479,1195], [sbol3.SO_CDS], 4, False, name='gfp_ce_in_bb')\n", + "doc.add([gfp_ce_in_bb, gfp_ce_in_bb_seq])\n", + "b0015_ef_in_bb, b0015_ef_in_bb_seq = part_in_backbone_from_sbol('b0015_ef_in_bb', b0015_ef, [518,646], [sbol3.SO_TERMINATOR], 4, False, name='b0015_ef_in_bb')\n", + "doc.add([b0015_ef_in_bb, b0015_ef_in_bb_seq])\n", + "\n", + "\n", + "#Assembly plan\n", + "simple_assembly_plan = Assembly_plan_composite_in_backbone_single_enzyme( \n", + " name='simple_green_transcriptional_unit',\n", + " parts_in_backbone=[j23100_ab_in_bb, b0034_bc_in_bb, gfp_ce_in_bb, b0015_ef_in_bb], \n", + " acceptor_backbone=podd_backbone,\n", + " restriction_enzyme=bsai,\n", + " document=doc)\n", + "simple_assembly_plan.run()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Should have 1 product" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1\n" + ] + }, + { + "data": { + "text/plain": [ + "[[,\n", + " ]]" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "print(len(simple_assembly_plan.products))\n", + "simple_assembly_plan.products" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Print doc components" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "http://sbolstandard.org/testfiles/pOdd_bb\n", + "http://sbolstandard.org/testfiles/pOdd_bb_seq\n", + "http://sbolstandard.org/testfiles/j23100_ab_in_bb\n", + "http://sbolstandard.org/testfiles/j23100_ab_in_bb_seq\n", + "http://sbolstandard.org/testfiles/b0034_bc_in_bb\n", + "http://sbolstandard.org/testfiles/b0034_bc_in_bb_seq\n", + "http://sbolstandard.org/testfiles/gfp_ce_in_bb\n", + "http://sbolstandard.org/testfiles/gfp_ce_in_bb_seq\n", + "http://sbolstandard.org/testfiles/b0015_ef_in_bb\n", + "http://sbolstandard.org/testfiles/b0015_ef_in_bb_seq\n", + "http://sbolstandard.org/testfiles/simple_green_transcriptional_unit_assembly_plan\n", + "http://sbolstandard.org/testfiles/j23100_ab_in_bb_part_extract\n", + "http://sbolstandard.org/testfiles/j23100_ab_in_bb_part_extract_seq\n", + "http://sbolstandard.org/testfiles/b0034_bc_in_bb_part_extract\n", + "http://sbolstandard.org/testfiles/b0034_bc_in_bb_part_extract_seq\n", + "http://sbolstandard.org/testfiles/gfp_ce_in_bb_part_extract\n", + "http://sbolstandard.org/testfiles/gfp_ce_in_bb_part_extract_seq\n", + "http://sbolstandard.org/testfiles/b0015_ef_in_bb_part_extract\n", + "http://sbolstandard.org/testfiles/b0015_ef_in_bb_part_extract_seq\n", + "http://sbolstandard.org/testfiles/pOdd_bb_backbone\n", + "http://sbolstandard.org/testfiles/pOdd_bb_backbone_seq\n", + "http://sbolstandard.org/testfiles/composite_1_part_5_part_1_j23100_ab_in_bb_part_2_b0034_bc_in_bb_part_3_gfp_ce_in_bb_part_4_b0015_ef_in_bb\n", + "http://sbolstandard.org/testfiles/composite_1_part_5_part_1_j23100_ab_in_bb_part_2_b0034_bc_in_bb_part_3_gfp_ce_in_bb_part_4_b0015_ef_in_bb_seq\n" + ] + } + ], + "source": [ + "for obj in simple_assembly_plan.document.objects:\n", + " print(obj.identity)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "get component sequence" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "for obj in simple_assembly_plan.document.objects:\n", + " if obj.identity =='http://sbolstandard.org/testfiles/composite_0_part_5_part_1_j23100_ab_in_bb_part_2_b0034_bc_in_bb_part_3_gfp_ce_in_bb_part_4_b0015_ef_in_bb':\n", + " print(obj.sequences[0].lookup().elements)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Combinatorial assembly" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "\"\"\"Test assembly plan class\"\"\"\n", + "doc = sbol3.Document()\n", + "sbol3.set_namespace('http://sbolstandard.org/testfiles')\n", + "# Assembly plan setup\n", + "bsai = ed_restriction_enzyme('BsaI')\n", + "#lvl1 acceptor\n", + "podd1_dir = os.path.join('podd1.gb')\n", + "podd_doc = convert_from_genbank(podd1_dir, 'https://github.com/Gonza10V')\n", + "podd_af = [top_level for top_level in podd_doc if type(top_level)==sbol3.Component][0]\n", + "podd_backbone, podd_backbone_seq = backbone_from_sbol('pOdd_bb', podd_af, [680,1770], 4, False, name='pOdd_bb')\n", + "doc.add([podd_backbone,podd_backbone_seq])\n", + "#parts in backbone\n", + "##get parts from genbank\n", + "j23100_dir = os.path.join('ab_j23100.gb')\n", + "j23101_dir = os.path.join('ab_j23101.gb')\n", + "b0034_dir = os.path.join('bc_b0034.gb')\n", + "gfp_dir = os.path.join('ce_gfp.gb')\n", + "rfp_dir = os.path.join('ce_mrfp1.gb')\n", + "cfp_dir = os.path.join('ce_ecfp.gb')\n", + "b0015_dir = os.path.join('ef_b0015.gb')\n", + "j23100_doc = convert_from_genbank(j23100_dir, 'https://github.com/Gonza10V')\n", + "j23100_ab = [top_level for top_level in j23100_doc if type(top_level)==sbol3.Component][0]\n", + "j23101_doc = convert_from_genbank(j23101_dir, 'https://github.com/Gonza10V')\n", + "j23101_ab = [top_level for top_level in j23101_doc if type(top_level)==sbol3.Component][0]\n", + "b0034_doc = convert_from_genbank(b0034_dir, 'https://github.com/Gonza10V')\n", + "b0034_bc = [top_level for top_level in b0034_doc if type(top_level)==sbol3.Component][0]\n", + "gfp_doc = convert_from_genbank(gfp_dir, 'https://github.com/Gonza10V')\n", + "gfp_ce = [top_level for top_level in gfp_doc if type(top_level)==sbol3.Component][0]\n", + "rfp_doc = convert_from_genbank(rfp_dir, 'https://github.com/Gonza10V')\n", + "rfp_ce = [top_level for top_level in rfp_doc if type(top_level)==sbol3.Component][0]\n", + "cfp_doc = convert_from_genbank(cfp_dir, 'https://github.com/Gonza10V')\n", + "cfp_ce = [top_level for top_level in cfp_doc if type(top_level)==sbol3.Component][0]\n", + "b0015_doc = convert_from_genbank(b0015_dir, 'https://github.com/Gonza10V')\n", + "b0015_ef = [top_level for top_level in b0015_doc if type(top_level)==sbol3.Component][0]\n", + "##SBOL parts in backbone\n", + "j23100_ab_in_bb, j23100_ab_in_bb_seq = part_in_backbone_from_sbol('j23100_ab_in_bb', j23100_ab, [479,513], [sbol3.SO_PROMOTER], 4, False, name='j23100_ab_in_bb')\n", + "doc.add([j23100_ab_in_bb, j23100_ab_in_bb_seq])\n", + "j23101_ab_in_bb, j23101_ab_in_bb_seq = part_in_backbone_from_sbol('j23101_ab_in_bb', j23101_ab, [479,513], [sbol3.SO_PROMOTER], 4, False, name='j23101_ab_in_bb')\n", + "doc.add([j23101_ab_in_bb, j23101_ab_in_bb_seq])\n", + "b0034_bc_in_bb, b0034_bc_in_bb_seq = part_in_backbone_from_sbol('b0034_bc_in_bb', b0034_bc, [479,499], [sbol3.SO_RBS], 4, False, name='b0034_bc_in_bb')\n", + "doc.add([b0034_bc_in_bb, b0034_bc_in_bb_seq])\n", + "gfp_ce_in_bb, gfp_ce_in_bb_seq = part_in_backbone_from_sbol('gfp_ce_in_bb', gfp_ce, [479,1195], [sbol3.SO_CDS], 4, False, name='gfp_ce_in_bb')\n", + "doc.add([gfp_ce_in_bb, gfp_ce_in_bb_seq])\n", + "rfp_ce_in_bb, rfp_ce_in_bb_seq = part_in_backbone_from_sbol('rfp_ce_in_bb', rfp_ce, [479,1156], [sbol3.SO_CDS], 4, False, name='rfp_ce_in_bb')\n", + "doc.add([rfp_ce_in_bb, rfp_ce_in_bb_seq])\n", + "cfp_ce_in_bb, cfp_ce_in_bb_seq = part_in_backbone_from_sbol('cfp_ce_in_bb', cfp_ce, [479,1198], [sbol3.SO_CDS], 4, False, name='cfp_ce_in_bb')\n", + "doc.add([cfp_ce_in_bb, cfp_ce_in_bb_seq])\n", + "b0015_ef_in_bb, b0015_ef_in_bb_seq = part_in_backbone_from_sbol('b0015_ef_in_bb', b0015_ef, [518,646], [sbol3.SO_TERMINATOR], 4, False, name='b0015_ef_in_bb')\n", + "doc.add([b0015_ef_in_bb, b0015_ef_in_bb_seq])\n", + "\n", + "\n", + "#Assembly plan\n", + "combinatorial_assembly_plan = Assembly_plan_composite_in_backbone_single_enzyme( \n", + " name='combinatorial_rgb_transcriptional_units',\n", + " parts_in_backbone=[j23100_ab_in_bb, j23101_ab_in_bb, b0034_bc_in_bb, gfp_ce_in_bb, rfp_ce_in_bb, cfp_ce_in_bb, b0015_ef_in_bb], \n", + " acceptor_backbone=podd_backbone,\n", + " restriction_enzyme=bsai,\n", + " document=doc)\n", + "combinatorial_assembly_plan.run()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "should produce 6 products" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "6\n" + ] + }, + { + "data": { + "text/plain": [ + "[[,\n", + " ],\n", + " [,\n", + " ],\n", + " [,\n", + " ],\n", + " [,\n", + " ],\n", + " [,\n", + " ],\n", + " [,\n", + " ]]" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "print(len(combinatorial_assembly_plan.products))\n", + "combinatorial_assembly_plan.products\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "get doc components" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "http://sbolstandard.org/testfiles/pOdd_bb\n", + "http://sbolstandard.org/testfiles/pOdd_bb_seq\n", + "http://sbolstandard.org/testfiles/j23100_ab_in_bb\n", + "http://sbolstandard.org/testfiles/j23100_ab_in_bb_seq\n", + "http://sbolstandard.org/testfiles/j23101_ab_in_bb\n", + "http://sbolstandard.org/testfiles/j23101_ab_in_bb_seq\n", + "http://sbolstandard.org/testfiles/b0034_bc_in_bb\n", + "http://sbolstandard.org/testfiles/b0034_bc_in_bb_seq\n", + "http://sbolstandard.org/testfiles/gfp_ce_in_bb\n", + "http://sbolstandard.org/testfiles/gfp_ce_in_bb_seq\n", + "http://sbolstandard.org/testfiles/rfp_ce_in_bb\n", + "http://sbolstandard.org/testfiles/rfp_ce_in_bb_seq\n", + "http://sbolstandard.org/testfiles/cfp_ce_in_bb\n", + "http://sbolstandard.org/testfiles/cfp_ce_in_bb_seq\n", + "http://sbolstandard.org/testfiles/b0015_ef_in_bb\n", + "http://sbolstandard.org/testfiles/b0015_ef_in_bb_seq\n", + "http://sbolstandard.org/testfiles/combinatorial_rgb_transcriptional_units_assembly_plan\n", + "http://sbolstandard.org/testfiles/j23100_ab_in_bb_part_extract\n", + "http://sbolstandard.org/testfiles/j23100_ab_in_bb_part_extract_seq\n", + "http://sbolstandard.org/testfiles/j23101_ab_in_bb_part_extract\n", + "http://sbolstandard.org/testfiles/j23101_ab_in_bb_part_extract_seq\n", + "http://sbolstandard.org/testfiles/b0034_bc_in_bb_part_extract\n", + "http://sbolstandard.org/testfiles/b0034_bc_in_bb_part_extract_seq\n", + "http://sbolstandard.org/testfiles/gfp_ce_in_bb_part_extract\n", + "http://sbolstandard.org/testfiles/gfp_ce_in_bb_part_extract_seq\n", + "http://sbolstandard.org/testfiles/rfp_ce_in_bb_part_extract\n", + "http://sbolstandard.org/testfiles/rfp_ce_in_bb_part_extract_seq\n", + "http://sbolstandard.org/testfiles/cfp_ce_in_bb_part_extract\n", + "http://sbolstandard.org/testfiles/cfp_ce_in_bb_part_extract_seq\n", + "http://sbolstandard.org/testfiles/b0015_ef_in_bb_part_extract\n", + "http://sbolstandard.org/testfiles/b0015_ef_in_bb_part_extract_seq\n", + "http://sbolstandard.org/testfiles/pOdd_bb_backbone\n", + "http://sbolstandard.org/testfiles/pOdd_bb_backbone_seq\n", + "http://sbolstandard.org/testfiles/composite_1_part_8_part_1_j23100_ab_in_bb_part_3_b0034_bc_in_bb_part_4_gfp_ce_in_bb_part_7_b0015_ef_in_bb\n", + "http://sbolstandard.org/testfiles/composite_1_part_8_part_1_j23100_ab_in_bb_part_3_b0034_bc_in_bb_part_4_gfp_ce_in_bb_part_7_b0015_ef_in_bb_seq\n", + "http://sbolstandard.org/testfiles/composite_2_part_8_part_1_j23100_ab_in_bb_part_3_b0034_bc_in_bb_part_5_rfp_ce_in_bb_part_7_b0015_ef_in_bb\n", + "http://sbolstandard.org/testfiles/composite_2_part_8_part_1_j23100_ab_in_bb_part_3_b0034_bc_in_bb_part_5_rfp_ce_in_bb_part_7_b0015_ef_in_bb_seq\n", + "http://sbolstandard.org/testfiles/composite_3_part_8_part_1_j23100_ab_in_bb_part_3_b0034_bc_in_bb_part_6_cfp_ce_in_bb_part_7_b0015_ef_in_bb\n", + "http://sbolstandard.org/testfiles/composite_3_part_8_part_1_j23100_ab_in_bb_part_3_b0034_bc_in_bb_part_6_cfp_ce_in_bb_part_7_b0015_ef_in_bb_seq\n", + "http://sbolstandard.org/testfiles/composite_4_part_8_part_2_j23101_ab_in_bb_part_3_b0034_bc_in_bb_part_4_gfp_ce_in_bb_part_7_b0015_ef_in_bb\n", + "http://sbolstandard.org/testfiles/composite_4_part_8_part_2_j23101_ab_in_bb_part_3_b0034_bc_in_bb_part_4_gfp_ce_in_bb_part_7_b0015_ef_in_bb_seq\n", + "http://sbolstandard.org/testfiles/composite_5_part_8_part_2_j23101_ab_in_bb_part_3_b0034_bc_in_bb_part_5_rfp_ce_in_bb_part_7_b0015_ef_in_bb\n", + "http://sbolstandard.org/testfiles/composite_5_part_8_part_2_j23101_ab_in_bb_part_3_b0034_bc_in_bb_part_5_rfp_ce_in_bb_part_7_b0015_ef_in_bb_seq\n", + "http://sbolstandard.org/testfiles/composite_6_part_8_part_2_j23101_ab_in_bb_part_3_b0034_bc_in_bb_part_6_cfp_ce_in_bb_part_7_b0015_ef_in_bb\n", + "http://sbolstandard.org/testfiles/composite_6_part_8_part_2_j23101_ab_in_bb_part_3_b0034_bc_in_bb_part_6_cfp_ce_in_bb_part_7_b0015_ef_in_bb_seq\n" + ] + } + ], + "source": [ + "for obj in combinatorial_assembly_plan.document.objects:\n", + " print(obj.identity)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Get a sequence" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "cgctgcatgaagagcctgcagtccggcaaaaaagggcaaggtgtcaccaccctgccctttttctttaaaaccgaaaagattacttcgcgttatgcaggcttcctcgctcactgactcgctgcgctcggtcgttcggctgcggcgagcggtatcagctcactcaaaggcggtaatacggttatccacagaatcaggggataacgcaggaaagaacatgtgagcaaaaggccagcaaaaggccaggaaccgtaaaaaggccgcgttgctggcgtttttccacaggctccgcccccctgacgagcatcacaaaaatcgacgctcaagtcagaggtggcgaaacccgacaggactataaagataccaggcgtttccccctggaagctccctcgtgcgctctcctgttccgaccctgccgcttaccggatacctgtccgcctttctcccttcgggaagcgtggcgctttctcatagctcacgctgtaggtatctcagttcggtgtaggtcgttcgctccaagctgggctgtgtgcacgaaccccccgttcagcccgaccgctgcgccttatccggtaactatcgtcttgagtccaacccggtaagacacgacttatcgccactggcagcagccactggtaacaggattagcagagcgaggtatgtaggcggtgctacagagttcttgaagtggtggcctaactacggctacactagaagaacagtatttggtatctgcgctctgctgaagccagttaccttcggaaaaagagttggtagctcttgatccggcaaacaaaccaccgctggtagcggtggtttttttgtttgcaagcagcagattacgcgcagaaaaaaaggatctcaagaagatcctttgatcttttctacggggtctgacgctcagtggaacgaaaactcacgttaagggattttggtcatgagattatcaaaaaggatcttcacctagatccttttaaattaaaaatgaagttttaaatcaatctaaagtatatatgagtaaacttggtctgacagctcgagtcccgtcaagtcagcgtaatgctctgccagtgttacaaccaattaaccaattctgattagaaaaactcatcgagcatcaaatgaaactgcaatttattcatatcaggattatcaataccatatttttgaaaaagccgtttctgtaatgaaggagaaaactcaccgaggcagttccataggatggcaagatcctggtatcggtctgcgattccgactcgtccaacatcaatacaacctattaatttcccctcgtcaaaaataaggttatcaagtgagaaatcaccatgagtgacgactgaatccggtgagaatggcaaaagcttatgcatttctttccagacttgttcaacaggccagccattacgctcgtcatcaaaatcactcgcatcaaccaaaccgttattcattcgtgattgcgcctgagcgagacgaaatacgcgatcgctgttaaaaggacaattacaaacaggaatcgaatgcaaccggcgcaggaacactgccagcgcatcaacaatattttcacctgaatcaggatattcttctaatacctggaatgctgttttcccggggatcgcagtggtgagtaaccatgcatcatcaggagtacggataaaatgcttgatggtcggaagaggcataaattccgtcagccagtttagtctgaccatctcatctgtaacatcattggcaacgctacctttgccatgtttcagaaacaactctggcgcatcgggcttcccatacaatcgatagattgtcgcacctgattgcccgacattatcgcgagcccatttatacccatataaatcagcatccatgttggaatttaatcgcggcctggagcaagacgtttcccgttgaatatggctcataacaccccttgtattactgtttatgtaagcagacagttttattgttcatgatgatatatttttatcttgtgcaatgtaacatcagagattttgagacacaacgtggctttgttgaataaatcgaacttttgctgagttgaaggatcagctcgagtgccacctgacgtctaagaaaccattattatcatgacattaacctataaaaataggcgtatcacgaggcagaatttcagataaaaaaaatccttagctttcgctaaggatgatttctggaattcgctcttcaatgGGAGttgacggctagctcagtcctaggtacagtgctagcTACTagagaaagaggagaaatactaaatggtgagcaagggcgaggagctgttcaccggggtggtgcccatcctggtcgagctggacggcgacgtgaacggccacaagttcagcgtgtccggcgagggcgagggcgatgccacctacggcaagctgaccctgaagttcatctgcaccaccggcaagctgcccgtgccctggcccaccctcgtgaccaccctgacctggggcgtgcagtgcttcagccgctaccccgaccacatgaagcagcacgacttcttcaagtccgccatgcccgaaggctacgtccaggagcgcaccatcttcttcaaggacgacggcaactacaagacccgcgccgaggtgaagttcgagggcgacaccctggtgaaccgcatcgagctgaagggcatcgacttcaaggaggacggcaacatcctggggcacaagctggagtacaactacatcagccacaacgtctatatcaccgccgacaagcagaagaacggcatcaaggccaacttcaagatccgccacaacatcgaggacggcagcgtgcagctcgccgaccactaccagcagaacacccccatcggcgacggccccgtgctgctgcccgacaaccactacctgagcacccagtccgccctgagcaaagaccccaacgagaagcgcgatcacatggtcctgctggagttcgtgaccgccgccgggatcactctcggcatggacgagctgtacaagtaataaGCTTccaggcatcaaataaaacgaaaggctcagtcgaaagactgggcctttcgttttatctgttgtttgtcggtgaacgctctctactagagtcacactggctcaccttcgggtgggcctttctgcgtttata\n" + ] + } + ], + "source": [ + "for obj in combinatorial_assembly_plan.document.objects:\n", + " if obj.identity =='http://sbolstandard.org/testfiles/composite_3_part_8_part_1_j23100_ab_in_bb_part_3_b0034_bc_in_bb_part_6_cfp_ce_in_bb_part_7_b0015_ef_in_bb':\n", + " print(obj.sequences[0].lookup().elements)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "LOICA", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.16" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +}