2016-02-12 2 views
0

J'utilise ce module pour concevoir des amorces https://pypi.python.org/pypi/primer3-py mais j'obtiens des résultats inattendus.Python primer3 PCR primer design

import primer3 
input_seq = 'TAGTTTATGACTATATGGGGAGGTAAATAATGTATGTACTTCAAGAAAATAGGACAGTAGACTGACTCTAAATAATANNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNTTCTTTTTTTTTTTAANNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNCATTTCTNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNGATGGGTGATTTTCAAAGAACAAGCATGGGCATATATTATAATGTCATATCACACCACTTGTTGGCTCTTCAAAAAGCAGTGGGGGTTAAGAATAATGGAGGTTTTCAACTCAAGATAAATGTGCATAACCAGAAATAGGAATAGAATATAATGCCACAGGTTAATTTTTGGTATTAACAATGATGAGATACTGAGAAGTTTCAGAAAATACCTTTTAGCCTGAAGCACTCCTAAATGTTAGGTAGAAAGTCATGTTTTAAATTTACACATAAGTCAATGCCCAAAAATTCAAATATAATGTGGAAACAAATACATATGATTTTTTGATTAAGNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNACTTATTTGTTGCATTGATAAGTCTATATGAATATTAACTTGTGGAATTAGAAGGACATTCATGCATTTCCAATTCAAAAATAGAATCCATCGACTGATCTTCAGGGACATTAATAGAAGAATCATTGAAATATAAAGTCACTAGTAAGTGATAAGTAATTTTGTTGACTAGAAAACTGTAAAATGTTGGTAGAAATAAAGTAGAAAACATTAGAGTGTTGGTGAAGGGACTCTAGGAAAGGTTGGTTGAGAAAAGCAAACGTCACCAGTCGTGCCCTGGTTTGTAAGTGTACATGTAACTACTGTTTTAAAAAGTAGATATGAAATCATTTCATGTGCTATTAGTCATGTCAAGAGGAGCTTTCAATGTATTTCACAGTATGTATACATATATTATGTTCAATTAGCAGACTCTGACTCAGATACAAAAGGCTCTTTGTCCATATGTGGAAATACTGATACTGTTTTAATTAATATTCTTTTATGTTTTGTACCAATGAGGATTATTTTAGAGTTCGAGTCATGAATTCTTTACGTGGAGGCATGACTGGAGCATGTTTAAATGAAACAAGTAGTATAAAGACATGTAGATATTGGCACTATGAATGAGAATAAAAAGATATTCTCAAAATTTATGTAAGAAGTTGTCTTAAACTTGGGTAATGATCCCTTAGGTCTTTTCCTAATTGAATGTGTCAGTTATGAAAATTGTGACTAGCGCACTTAATATNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNTAGTAATACCGAACNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNCTGAACTTCCTCATAAAATTANNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNAAATCTTCTTTAGCAAGNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNTCCANNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNTACTTTACTTTGATGGTGAATAAGGGGGACACTTATCAGGCTAAACACTGTAGACNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNAGA' 
primer = (primer3.bindings.designPrimers(
      { 
       'SEQUENCE_ID': 'hmhm', 
       'SEQUENCE_TEMPLATE': input_seq, 
       'SEQUENCE_EXCLUDED_REGION': [0, 0] 
      }, 
      { 
       'PRIMER_TASK': 'generic', 
       'PRIMER_PICK_LEFT_PRIMER': 1, 
       'PRIMER_PICK_INTERNAL_OLIGO': 0, 
       'PRIMER_PICK_RIGHT_PRIMER': 1, 
       'PRIMER_NUM_RETURN': 5, 
       'PRIMER_OPT_SIZE': 20, 
       'PRIMER_MIN_SIZE': 18, 
       'PRIMER_MAX_SIZE': 25, 
       'PRIMER_OPT_TM': 60.0, 
       'PRIMER_MIN_TM': 57.0, 
       'PRIMER_MAX_TM': 63.0, 
       'PRIMER_MIN_GC': 20.0, 
       'PRIMER_MAX_GC': 80.0, 
       'PRIMER_MAX_POLY_X': 5, 
       'PRIMER_SALT_MONOVALENT': 50.0, 
       'PRIMER_DNA_CONC': 50.0, 
       'PRIMER_MAX_NS_ACCEPTED': 0, 
       'PRIMER_MAX_SELF_ANY': 12, 
       'PRIMER_MAX_SELF_END': 8, 
       'PRIMER_PAIR_MAX_COMPL_ANY': 12, 
       'PRIMER_PAIR_MAX_COMPL_END': 8, 
       'PRIMER_PRODUCT_SIZE_RANGE': [[len(input_seq)-200,len(input_seq)]],})) 
print primer 

Je veux concevoir des amorces de PCR, mais pour une raison quelconque, il semble échouer parce qu'aucun interne a été conçu oligo- (pour autant que je peux dire). Il dit qu'il y a 5 bonnes amorces correctes et 6 bonnes amorces gauches. Pourquoi ne le produit-il pas simplement?

{'PRIMER_INTERNAL_NUM_RETURNED': 0L, 'PRIMER_RIGHT_EXPLAIN': 'considered 229, too many Ns 205, low tm 19, ok 5', 
'PRIMER_INTERNAL_EXPLAIN': 'considered 1, unacceptable product size 1, ok 0', 
'PRIMER_PAIR_NUM_RETURNED': 0L, 'PRIMER_RIGHT_NUM_RETURNED': 0L, 'PRIMER_LEFT_NUM_RETURNED': 0L, 
'PRIMER_LEFT_EXPLAIN': 'considered 600, too many Ns 148, GC content failed 2, low tm 444, ok 6'} 

EDIT: J'utilise une boucle while pour maintenir la conception d'amorces s'il n'y a pas d'amorces pour la région cible. Pour déterminer quel côté développer, c'est-à-dire quel côté n'a pas réussi à fabriquer l'amorce, j'utilise la valeur de 'PRIMER_LEFT_EXPLAIN' et 'PRIMER_RIGHT_EXPLAIN'. Cela ne fonctionne pas pour l'exemple que j'ai posté, et puisque je ne reçois pas la sortie paire d'amorces que primer3 autonome vous donne, je ne suis pas sûr de savoir comment contourner cela.

while len(primer.keys())/20 == 0: 

     if int(primer['PRIMER_LEFT_EXPLAIN'].split(' ')[-1]) == 0: 
      print 'Expanding Left', primer['PRIMER_LEFT_EXPLAIN'].split(' ')[-1] 
      start += -50 

     elif int(primer['PRIMER_RIGHT_EXPLAIN'].split(' ')[-1]) == 0: 
      print 'Expanding Right', primer['PRIMER_RIGHT_EXPLAIN'].split(' ')[-1] 
      end += 50 

     else: 
      print primer 
      raise Warning('Both sides have primers') 

     input_primer3 = str(mm10_chr14_rec.seq[start:end].upper()) 
     primer = (primer3.bindings.designPrimers(
      { 
       'SEQUENCE_ID': 'hmhm', 
       'SEQUENCE_TEMPLATE': input_primer3, 
       'SEQUENCE_EXCLUDED_REGION': [excl_start, excl_length] #start, length; might want to extend region? 
      }, 
      { 
       'PRIMER_OPT_SIZE': 20, 
       'PRIMER_PICK_INTERNAL_OLIGO': 0, 
       'PRIMER_MIN_SIZE': 18, 
       'PRIMER_MAX_SIZE': 25, 
       'PRIMER_OPT_TM': 60.0, 
       'PRIMER_MIN_TM': 57.0, 
       'PRIMER_MAX_TM': 63.0, 
       'PRIMER_MIN_GC': 20.0, 
       'PRIMER_MAX_GC': 80.0, 
       'PRIMER_MAX_POLY_X': 100, 
       'PRIMER_SALT_MONOVALENT': 50.0, 
       'PRIMER_DNA_CONC': 50.0, 
       'PRIMER_MAX_NS_ACCEPTED': 0, 
       'PRIMER_MAX_SELF_ANY': 12, 
       'PRIMER_MAX_SELF_END': 8, 
       'PRIMER_PAIR_MAX_COMPL_ANY': 12, 
       'PRIMER_PAIR_MAX_COMPL_END': 8, 
       'PRIMER_PRODUCT_SIZE_RANGE': [[len(input_primer3)-200,len(input_primer3)]],})) 

     if end-start > 8000: 
      print 'PCR fragment is bigger than 8000 bp after extending bounds' 
#   raise Exception('PCR fragment is bigger than 8000 bp after extending bounds') 
    if end-start > 8000: 
     print input_primer3 
    print 'size', end-start 
+0

Votre problème est-il résolu? –

+0

Comme vous l'avez souligné, les versions autonomes produisent des messages d'erreur supplémentaires. Je suis en boucle les coordonnées de construction d'amorce basées sur les messages d'erreur ainsi j'ai toujours un problème, bien que vous ayez répondu pourquoi. Si tu veux, je peux accepter ta réponse. – crysis405

+0

Quel est votre problème actuel? –

Répondre

0

Il n'y avait pas interne conçu parce que oligo- vous avez utilisé le paramètre, [ 'PRIMER_PICK_INTERNAL_OLIGO': 0]. La raison principale pour les paires d'amorces vides est "trop ​​de Ns" dans votre séquence d'entrée, de sorte que le programme ne peut pas calculer une valeur GC et estimer Tm.

+0

Je ne veux pas d'oligos internes. Il y a 6 amorces à gauche ok et 5 bonnes amorces à droite. De cela, je comprends que j'ai des paires d'amorces ... – crysis405

1

Avec les primer3 autonome, le message d'erreur est un peu plus bavard:

PRIMER_LEFT_EXPLAIN=considered 600, too many Ns 148, GC content failed 2, low tm 444, ok 6 
PRIMER_RIGHT_EXPLAIN=considered 229, too many Ns 205, low tm 19, ok 5 
PRIMER_PAIR_EXPLAIN=considered 1, unacceptable product size 1, ok 0 

Les problèmes semble être votre fonction ici:

'PRIMER_PRODUCT_SIZE_RANGE': [[len(input_seq)-200,len(input_seq)]] 

Votre séquence a une longueur de 5318 bases et primer3 On dit d'obtenir un produit qui a une longueur comprise entre 5118 et 5318 bases ce qui est assez difficile compte tenu des nombreux N dans la séquence.

Essayez de supprimer PRIMER_PRODUCT_SIZE_RANGE et vous devriez obtenir des résultats.