Esempio n. 1
0
 def url(self):
     return pretty_str("http://www.ncbi.nlm.nih.gov/nucleotide/" + self.acc)
Esempio n. 2
0
 def url(self):
     return pretty_str("http://www.ncbi.nlm.nih.gov/nucleotide/"+self.acc)
Esempio n. 3
0
    del findsubstrings_suffix_arrays_python
except NameError:
    pass


def delete_cache(delete=[ "amplify", "assembly", "genbank", "web", "synced" ]):
    msg = ""
    for file_ in delete:
        msg += file_
        try:
            os.remove( os.path.join( os.environ["pydna_data_dir"], file_) )
            msg += " deleted.\n"
        except OSError, e:
            if e.errno == errno.ENOENT:
                msg += " no file to delete.\n"
    return pretty_str(msg)

def open_cache():
    if sys.platform=='win32':
        subprocess.Popen(['start', os.environ["pydna_data_dir"]], shell= True)
    elif sys.platform=='darwin':
        subprocess.Popen(['open', os.environ["pydna_data_dir"]])
    else:
        try:
            subprocess.Popen(['xdg-open', os.environ["pydna_data_dir"]])
        except OSError:
            return "no cache to open."


from ._version import get_versions
__version__ = get_versions()['version']
Esempio n. 4
0
    def figure(self):
        '''
        This method returns a simple figure of the two primers binding to a part
        of the template.

        ::

         5gctactacacacgtactgactg3
          |||||||||||||||||||||| tm 52.6 (dbd) 58.3
         5gctactacacacgtactgactg...caagatagagtcagtaaccaca3
         3cgatgatgtgtgcatgactgac...gttctatctcagtcattggtgt5
                                   |||||||||||||||||||||| tm 49.1 (dbd) 57.7
                                  3gttctatctcagtcattggtgt5



        Returns
        -------
        figure:string
             A string containing a text representation of the primers
             annealing on the template (see example above).


        Notes
        -----
        tm in the figure above is the melting temperature (tm) for each primer calculated according to
        SantaLucia 1998 [#]_.

        dbd is the tm calculation for enzymes with dsDNA binding domains like Pfu-Sso7d [#]_. See [#]_
        for more information.

        References
        ----------

        .. [#] J. SantaLucia, “A Unified View of Polymer, Dumbbell, and Oligonucleotide DNA Nearest-neighbor Thermodynamics,” Proceedings of the National Academy of Sciences 95, no. 4 (1998): 1460.
        .. [#] M. Nørholm, “A Mutant Pfu DNA Polymerprimerase Designed for Advanced Uracil-excision DNA Engineering,” BMC Biotechnology 10, no. 1 (2010): 21, doi:10.1186/1472-6750-10-21.
        .. [#] http://www.thermoscientificbio.com/webtools/tmc/

        '''

        f = '''
            {sp1}5{faz}...{raz}3
             {sp3}{rap} tm {tmr} (dbd) {tmr_dbd}
            {sp3}3{rp}5
            5{fp}3
             {fap:>{fplength}} tm {tmf} (dbd) {tmf_dbd}
            {sp2}3{fzc}...{rzc}5
            '''.format(fp=self.forward_primer.seq,
                       fap="|" * len(self.forward_primer.footprint),
                       fplength=len(self.forward_primer.seq),
                       tmf=round(self.tmf, 1),
                       tmr=round(self.tmr, 1),
                       tmf_dbd=round(self.tmf_dbd, 1),
                       tmr_dbd=round(self.tmr_dbd, 1),
                       rp=self.reverse_primer.seq[::-1],
                       rap="|" * len(self.reverse_primer.footprint),
                       rplength=len(self.reverse_primer.seq),
                       faz=self.forward_primer.footprint,
                       raz=self.reverse_primer.footprint.reverse_complement(),
                       fzc=self.forward_primer.footprint.complement(),
                       rzc=self.reverse_primer.footprint[::-1],
                       sp1=" " * (len(self.forward_primer.seq) -
                                  len(self.forward_primer.footprint)),
                       sp2=" " * (len(self.forward_primer.seq) -
                                  len(self.forward_primer.footprint)),
                       sp3=" " * (3 + len(self.forward_primer.seq)))
        return pretty_str(textwrap.dedent(f).strip("\n"))
Esempio n. 5
0
    def dbd_program(self):
        '''Returns a string containing a text representation of a proposed
       PCR program using a polymerase with a DNA binding domain such as Pfu-Sso7d.

       ::

        Pfu-Sso7d (rate 15s/kb)
        Three-step|          30 cycles   |      |Breslauer1986,SantaLucia1998
        98.0°C    |98.0°C                |      |SaltC 50mM
        __________|_____          72.0°C |72.0°C|Primer1C   1µM
        00min30s  |10s  \ 61.0°C ________|______|Primer2C   1µM
                  |      \______/ 0min 0s|10min |
                  |        10s           |      |4-8°C

       '''
        PfuSso7d_extension_rate = 15  #seconds/kB PCR product
        extension_time_PfuSso7d = PfuSso7d_extension_rate * len(
            self) / 1000  # seconds

        # Ta calculation for enzymes with dsDNA binding domains like Pfu-Sso7d
        # https://www.finnzymes.fi/tm_determination.html

        length_of_f = len(self.forward_primer.footprint)
        length_of_r = len(self.reverse_primer.footprint)

        if (length_of_f > 20 and length_of_r > 20 and self.tmf_dbd >= 69.0
                and self.tmr_dbd >= 69.0) or (self.tmf_dbd >= 72.0
                                              and self.tmr_dbd >= 72.0):
            f = textwrap.dedent('''
                                    Pfu-Sso7d (rate {rate}s/kb)
                                    Two-step|    30 cycles |      |{size}bp
                                    98.0°C  |98.0C         |      |Breslauer1986,SantaLucia1998
                                    _____ __|_____         |      |SaltC {saltc:2}mM
                                    00min30s|10s  \  72.0°C|72.0°C|Primer1C {forward_primer_concentration:3}µM
                                            |      \_______|______|Primer2C {reverse_primer_concentration:3}µM
                                            |      {0:2}min{1:2}s|10min |4-8°C
                                 '''.format(
                rate=PfuSso7d_extension_rate,
                forward_primer_concentration=self.forward_primer_concentration,
                reverse_primer_concentration=self.rc,
                saltc=self.saltc,
                *divmod(extension_time_PfuSso7d, 60),
                size=len(self.seq)))
        else:

            if (length_of_f > 20 and length_of_r > 20):
                ta = min(self.tmf_dbd, self.tmr_dbd) + 3
            else:
                ta = min(self.tmf_dbd, self.tmr_dbd)

            f = textwrap.dedent('''
                                    Pfu-Sso7d (rate {rate}s/kb)
                                    Three-step|          30 cycles   |      |Breslauer1986,SantaLucia1998
                                    98.0°C    |98.0°C                |      |SaltC {saltc:2}mM
                                    __________|_____          72.0°C |72.0°C|Primer1C {forward_primer_concentration:3}µM
                                    00min30s  |10s  \ {ta}°C ________|______|Primer2C {reverse_primer_concentration:3}µM
                                              |      \______/{0:2}min{1:2}s|10min |
                                              |        10s           |      |4-8°C
                                 '''.format(
                rate=PfuSso7d_extension_rate,
                ta=math.ceil(ta),
                forward_primer_concentration=self.forward_primer_concentration
                / 1000,
                reverse_primer_concentration=self.reverse_primer_concentration
                / 1000,
                saltc=self.saltc,
                *divmod(extension_time_PfuSso7d, 60)))
        return pretty_str(f)
Esempio n. 6
0
    def dbd_program(self):
        '''Returns a string containing a text representation of a proposed
       PCR program using a polymerase with a DNA binding domain such as Pfu-Sso7d.

       ::

        Pfu-Sso7d (rate 15s/kb)
        Three-step|          30 cycles   |      |Breslauer1986,SantaLucia1998
        98.0°C    |98.0°C                |      |SaltC 50mM
        __________|_____          72.0°C |72.0°C|Primer1C   1µM
        00min30s  |10s  \ 61.0°C ________|______|Primer2C   1µM
                  |      \______/ 0min 0s|10min |
                  |        10s           |      |4-8°C

       '''
        PfuSso7d_extension_rate = 15 #seconds/kB PCR product
        extension_time_PfuSso7d = PfuSso7d_extension_rate * len(self) / 1000  # seconds

        # Ta calculation for enzymes with dsDNA binding domains like Pfu-Sso7d
        # https://www.finnzymes.fi/tm_determination.html

        length_of_f = len(self.forward_primer.footprint)
        length_of_r = len(self.reverse_primer.footprint)

        if (length_of_f>20 and length_of_r>20 and self.tmf_dbd>=69.0 and self.tmr_dbd>=69.0) or (self.tmf_dbd>=72.0 and self.tmr_dbd>=72.0):
            f=textwrap.dedent(  '''
                                    Pfu-Sso7d (rate {rate}s/kb)
                                    Two-step|    30 cycles |      |{size}bp
                                    98.0°C  |98.0C         |      |Breslauer1986,SantaLucia1998
                                    _____ __|_____         |      |SaltC {saltc:2}mM
                                    00min30s|10s  \  72.0°C|72.0°C|Primer1C {forward_primer_concentration:3}µM
                                            |      \_______|______|Primer2C {reverse_primer_concentration:3}µM
                                            |      {0:2}min{1:2}s|10min |4-8°C
                                 '''.format(rate = PfuSso7d_extension_rate,
                                            forward_primer_concentration = self.forward_primer_concentration,
                                            reverse_primer_concentration = self.rc,
                                            saltc = self.saltc,
                                            *divmod(extension_time_PfuSso7d,60),
                                            size = len(self.seq)))
        else:

            if (length_of_f>20 and length_of_r>20):
                ta = min(self.tmf_dbd,self.tmr_dbd)+3
            else:
                ta = min(self.tmf_dbd,self.tmr_dbd)

            f=textwrap.dedent(  '''
                                    Pfu-Sso7d (rate {rate}s/kb)
                                    Three-step|          30 cycles   |      |Breslauer1986,SantaLucia1998
                                    98.0°C    |98.0°C                |      |SaltC {saltc:2}mM
                                    __________|_____          72.0°C |72.0°C|Primer1C {forward_primer_concentration:3}µM
                                    00min30s  |10s  \ {ta}°C ________|______|Primer2C {reverse_primer_concentration:3}µM
                                              |      \______/{0:2}min{1:2}s|10min |
                                              |        10s           |      |4-8°C
                                 '''.format(rate = PfuSso7d_extension_rate,
                                            ta   = math.ceil(ta),
                                            forward_primer_concentration   = self.forward_primer_concentration/1000,
                                            reverse_primer_concentration   = self.reverse_primer_concentration/1000,
                                            saltc= self.saltc,
                                            *divmod(extension_time_PfuSso7d,60)))
        return pretty_str(f)
Esempio n. 7
0
    def figure(self):
        '''
        This method returns a simple figure of the two primers binding to a part
        of the template.

        ::

         5gctactacacacgtactgactg3
          |||||||||||||||||||||| tm 52.6 (dbd) 58.3
         5gctactacacacgtactgactg...caagatagagtcagtaaccaca3
         3cgatgatgtgtgcatgactgac...gttctatctcagtcattggtgt5
                                   |||||||||||||||||||||| tm 49.1 (dbd) 57.7
                                  3gttctatctcagtcattggtgt5



        Returns
        -------
        figure:string
             A string containing a text representation of the primers
             annealing on the template (see example above).


        Notes
        -----
        tm in the figure above is the melting temperature (tm) for each primer calculated according to
        SantaLucia 1998 [#]_.

        dbd is the tm calculation for enzymes with dsDNA binding domains like Pfu-Sso7d [#]_. See [#]_
        for more information.

        References
        ----------

        .. [#] J. SantaLucia, “A Unified View of Polymer, Dumbbell, and Oligonucleotide DNA Nearest-neighbor Thermodynamics,” Proceedings of the National Academy of Sciences 95, no. 4 (1998): 1460.
        .. [#] M. Nørholm, “A Mutant Pfu DNA Polymerprimerase Designed for Advanced Uracil-excision DNA Engineering,” BMC Biotechnology 10, no. 1 (2010): 21, doi:10.1186/1472-6750-10-21.
        .. [#] http://www.thermoscientificbio.com/webtools/tmc/

        '''

        f =   '''
            {sp1}5{faz}...{raz}3
             {sp3}{rap} tm {tmr} (dbd) {tmr_dbd}
            {sp3}3{rp}5
            5{fp}3
             {fap:>{fplength}} tm {tmf} (dbd) {tmf_dbd}
            {sp2}3{fzc}...{rzc}5
            '''.format( fp       = self.forward_primer.seq,
                        fap      = "|"*len(self.forward_primer.footprint),
                        fplength = len(self.forward_primer.seq),
                        tmf      = round(self.tmf,1),
                        tmr      = round(self.tmr,1),
                        tmf_dbd  = round(self.tmf_dbd,1),
                        tmr_dbd  = round(self.tmr_dbd,1),
                        rp       = self.reverse_primer.seq[::-1],
                        rap      = "|"*len(self.reverse_primer.footprint),
                        rplength = len(self.reverse_primer.seq),
                        faz      = self.forward_primer.footprint,
                        raz      = self.reverse_primer.footprint.reverse_complement(),
                        fzc      = self.forward_primer.footprint.complement(),
                        rzc      = self.reverse_primer.footprint[::-1],
                        sp1      = " "*(len(self.forward_primer.seq)-len(self.forward_primer.footprint)),
                        sp2      = " "*(len(self.forward_primer.seq)-len(self.forward_primer.footprint)),
                        sp3      = " "*(3+len(self.forward_primer.seq))
                       )
        return pretty_str(textwrap.dedent(f).strip("\n"))
Esempio n. 8
0
    def small_fig(self):
        '''
        Returns a small ascii representation of the assembled fragments. Each fragment is
        represented by:

        ::

         Size of common 5' substring|Name and size of DNA fragment| Size of common 5' substring

        Linear:

        ::

          frag20| 6
                 \\/
                 /\\
                  6|frag23| 6
                           \\/
                           /\\
                            6|frag14


        Circular:

        ::

          -|2577|61
         |       \\/
         |       /\\
         |       61|5681|98
         |               \\/
         |               /\\
         |               98|2389|557
         |                       \\/
         |                       /\\
         |                       557-
         |                          |
          --------------------------


        '''

        if self.linear:
            '''
            frag20| 6
                   \/
                   /\
                    6|frag23| 6
                             \/
                             /\
                              6|frag14
            '''
            f = self.source_fragments[0]
            space2 = len(f.name)

            fig = ("{name}|{o2:>2}\n"
                   "{space2} \/\n"
                   "{space2} /\\\n").format(name=f.name,
                                            o2=f.right_overlap_size,
                                            space2=" " * space2)
            space = len(f.name)

            for f in self.source_fragments[1:-1]:
                name = "{o1:>2}|{name}|".format(o1=f.left_overlap_size,
                                                name=f.name)
                space2 = len(name)
                fig += ("{space} {name}{o2:>2}\n"
                        "{space} {space2}\/\n"
                        "{space} {space2}/\\\n").format(
                            name=name,
                            o2=f.right_overlap_size,
                            space=" " * space,
                            space2=" " * space2)
                space += space2
            f = self.source_fragments[-1]
            fig += ("{space} {o1:>2}|{name}").format(name=f.name,
                                                     o1=f.left_overlap_size,
                                                     space=" " * (space))

        else:
            '''
             -|2577|61
            |       \/
            |       /\
            |       61|5681|98
            |               \/
            |               /\
            |               98|2389|557
            |                       \/
            |                       /\
            |                       557-
            |                          |
             --------------------------
            '''
            f = self.source_fragments[0]
            space = len(f.name) + 3
            fig = (" -|{name}|{o2:>2}\n"
                   "|{space}\/\n"
                   "|{space}/\\\n").format(name=f.name,
                                           o2=f.right_overlap_size,
                                           space=" " * space)
            for f in self.source_fragments[1:]:
                name = "{o1:>2}|{name}|".format(o1=f.left_overlap_size,
                                                name=f.name)
                space2 = len(name)
                fig += ("|{space}{name}{o2:>2}\n"
                        "|{space}{space2}\/\n"
                        "|{space}{space2}/\\\n").format(
                            o2=f.right_overlap_size,
                            name=name,
                            space=" " * space,
                            space2=" " * space2)
                space += space2

            fig += "|{space}{o1:>2}-\n".format(
                space=" " * (space),
                o1=self.source_fragments[0].left_overlap_size)
            fig += "|{space}   |\n".format(space=" " * (space))
            fig += " {space}".format(space="-" * (space + 3))
        return pretty_str(dedent(fig))
Esempio n. 9
0
    del findsubstrings_suffix_arrays_python
except NameError:
    pass


def delete_cache(delete=["amplify", "assembly", "genbank", "web", "synced"]):
    msg = ""
    for file_ in delete:
        msg += file_
        try:
            os.remove(os.path.join(os.environ["pydna_data_dir"], file_))
            msg += " deleted.\n"
        except OSError, e:
            if e.errno == errno.ENOENT:
                msg += " no file to delete.\n"
    return pretty_str(msg)


def open_cache():
    if sys.platform == 'win32':
        subprocess.Popen(['start', os.environ["pydna_data_dir"]], shell=True)
    elif sys.platform == 'darwin':
        subprocess.Popen(['open', os.environ["pydna_data_dir"]])
    else:
        try:
            subprocess.Popen(['xdg-open', os.environ["pydna_data_dir"]])
        except OSError:
            return "no cache to open."


from ._version import get_versions
Esempio n. 10
0
    def small_fig(self):
        '''
        Returns a small ascii representation of the assembled fragments. Each fragment is
        represented by:

        ::

         Size of common 5' substring|Name and size of DNA fragment| Size of common 5' substring

        Linear:

        ::

          frag20| 6
                 \\/
                 /\\
                  6|frag23| 6
                           \\/
                           /\\
                            6|frag14


        Circular:

        ::

          -|2577|61
         |       \\/
         |       /\\
         |       61|5681|98
         |               \\/
         |               /\\
         |               98|2389|557
         |                       \\/
         |                       /\\
         |                       557-
         |                          |
          --------------------------


        '''

        if self.linear:
            '''
            frag20| 6
                   \/
                   /\
                    6|frag23| 6
                             \/
                             /\
                              6|frag14
            '''
            f = self.source_fragments[0]
            space2 = len(f.name)


            fig = ("{name}|{o2:>2}\n"
                   "{space2} \/\n"
                   "{space2} /\\\n").format(name = f.name,
                                            o2 = f.right_overlap_size,
                                            space2 = " "*space2)
            space = len(f.name)

            for f in self.source_fragments[1:-1]:
                name= "{o1:>2}|{name}|".format(o1   = f.left_overlap_size,
                                               name = f.name)
                space2 = len(name)
                fig +=("{space} {name}{o2:>2}\n"
                       "{space} {space2}\/\n"
                       "{space} {space2}/\\\n").format( name = name,
                                                        o2 = f.right_overlap_size,
                                                        space = " "*space,
                                                        space2 = " "*space2)
                space +=space2
            f = self.source_fragments[-1]
            fig += ("{space} {o1:>2}|{name}").format(name = f.name,
                                                    o1 = f.left_overlap_size,
                                                    space = " "*(space))



        else:
            '''
             -|2577|61
            |       \/
            |       /\
            |       61|5681|98
            |               \/
            |               /\
            |               98|2389|557
            |                       \/
            |                       /\
            |                       557-
            |                          |
             --------------------------
            '''
            f = self.source_fragments[0]
            space = len(f.name)+3
            fig =(" -|{name}|{o2:>2}\n"
                  "|{space}\/\n"
                  "|{space}/\\\n").format(name = f.name,
                                           o2 = f.right_overlap_size,
                                           space = " "*space)
            for f in self.source_fragments[1:]:
                name= "{o1:>2}|{name}|".format(o1 = f.left_overlap_size,
                                                      name = f.name)
                space2 = len(name)
                fig +=("|{space}{name}{o2:>2}\n"
                       "|{space}{space2}\/\n"
                       "|{space}{space2}/\\\n").format(o2 = f.right_overlap_size,
                                                       name = name,
                                                       space = " "*space,
                                                       space2 = " "*space2)
                space +=space2

            fig +="|{space}{o1:>2}-\n".format(space=" "*(space), o1=self.source_fragments[0].left_overlap_size)
            fig +="|{space}   |\n".format(space=" "*(space))
            fig +=" {space}".format(space="-"*(space+3))
        return pretty_str(dedent(fig))