Пример #1
0
def assemble_parts(parts, part_types):
    'We build the parts using the form data'
    part_types.append(VECTOR_TYPE_NAME)
    joined_seq = SeqRecord(Seq('', alphabet=generic_dna))
    names = {'parts': []}
    for part_type in part_types:
        part_uniquename = parts[part_type]
        part = Feature.objects.get(uniquename=part_uniquename)
        gb_path = os.path.join(proj_settings.MEDIA_ROOT,
                               part.genbank_file.name)
        part_record = SeqIO.read(gb_path, 'gb')
        seq = Seq(part.residues)

        # crispr targets are the unique parts that are not vectors
        # and does not have a verctor
        if part.vector is None and part.type.name != VECTOR_TYPE_NAME:
            pref_idx = 0
            suf_idx = len(seq) - len(part.suffix)
            names['parts'].append(part.uniquename)
        else:
            if part.type.name == VECTOR_TYPE_NAME:
                enzyme = part.enzyme_in[0]
                names['vector'] = part.uniquename
            else:
                names['parts'].append(part.uniquename)
                enzyme = part.enzyme_out[0]

            pref_idx, suf_idx = get_prefix_and_suffix_index(seq, enzyme)[:2]
        # VECTOR must be always the last part to add
        if part.type.name == VECTOR_TYPE_NAME and part.direction == REVERSE:
            if suf_idx >= pref_idx and suf_idx + 4 < len(seq):
                part_sub_seq = part_record[pref_idx + 4:suf_idx + 4]
            else:
                part_sub_seq = part_record[pref_idx + 4:]
                part_sub_seq += part_record[:suf_idx + 4]

            joined_seq = joined_seq.reverse_complement() + part_sub_seq
        else:
            if suf_idx >= pref_idx:
                part_sub_seq = part_record[pref_idx:suf_idx]
            else:
                part_sub_seq = part_record[pref_idx:]
                part_sub_seq += part_record[:suf_idx]
            joined_seq += part_sub_seq

    try:
        count = Count.objects.get(name=ASSEMBLED_SEQ)
    except Count.DoesNotExist:
        count = Count.objects.create(name=ASSEMBLED_SEQ, value=1)
    next_value = count.next

    joined_seq.id = ASSEMBLED_SEQ + '_' + next_value
    joined_seq.name = joined_seq.id
    joined_seq.description = "({0}){1}".format(','.join(names['parts']),
                                             names['vector'])

    return joined_seq
Пример #2
0
def get_prefix_and_suffix(seq, enzyme):
    'it gets the prefix and the suffix of the feature seq'
    try:
        result = get_prefix_and_suffix_index(seq, enzyme)
        prefix_index, suffix_index, prefix_size = result
    except RuntimeError as error:
        if str(error) == "No rec_site":
            return None, None
        else:
            raise
    return _get_pref_suff_from_index(seq, prefix_index, suffix_index,
                                     prefix_size)
Пример #3
0
    def moclo_compatible(self):
        if not self.level or self.level != LEVEL_0 or self.type.name in (TARGET_DICOT, TARGET_MONOCOT):
            return 'not_evaluable'
        if self.vector.resistance not in (MOCLO_INCOMPATIBLE_RESISTANCES):
            enzyme = self.enzyme_out[0]
            residues = self.residues
            pref_idx, suf_idx = get_prefix_and_suffix_index(residues, enzyme)[:2]
            seq = residues[pref_idx:suf_idx + len(self.suffix)]

            # TODO: maybe we should look only to the part seq. not with the vector
            return not has_rec_sites(seq, enzymes=('BpiI', 'BsaI'))
        else:
            return False
Пример #4
0
def _get_stripped_vector_seq():
    pupd = Feature.objects.get(uniquename=DOMESTICATED_VECTOR)
    vec_seq = pupd.residues
    pre_suf_size = get_prefix_and_suffix_index(vec_seq, pupd.enzyme_in[0])
    prefix_index, suffix_index, prefix_size = pre_suf_size
    prefix_start = prefix_index
    suffix_end = suffix_index + prefix_size
    if prefix_start > suffix_end:
        stripped_seq = vec_seq[prefix_start:]
        stripped_seq += vec_seq[:suffix_end]
    else:
        stripped_seq = vec_seq[prefix_start:suffix_end]
    return stripped_seq