4.7 Slicing a SeqRecord Vers 4.6
You can slice a SeqRecord, to give you a new SeqRecord covering just part of the sequence. What is important here is that any per-letter annotations are also sliced, and any features which fall completely within the new sequence are preserved (with their locations adjusted). ** Une partie de la séquence peut être générée en tant que nouveau SeqRecord en découpant le SeqRecord. Il convient de noter que l'annotation par lettre est également découpée, mais les caractéristiques de la nouvelle séquence sont les mêmes que l'original (les emplacements sont ajustés) **
For example, taking the same GenBank file used earlier: *** Prenant le fichier GenBank précédemment utilisé comme exemple ***
>>> from Bio import SeqIO
>>> record = SeqIO.read("NC_005816.gb", "genbank")
>>> record
SeqRecord(seq=Seq('TGTAACGAACGGTGCAATAGTGATCCACACCCAACGCCTGAAATCAGATCCAGG...CTG',
IUPACAmbiguousDNA()), id='NC_005816.1', name='NC_005816',
description='Yersinia pestis biovar Microtus str. 91001 plasmid pPCP1, complete sequence',
dbxrefs=['Project:58037'])
>>> len(record)
9609
>>> len(record.features)
41
For this example we’re going to focus in on the pim gene, YP_pPCP05. If you have a look at the GenBank file directly you’ll find this gene/CDS has location string 4343..4780, or in Python counting 4342:4780. From looking at the file you can work out that these are the twelfth and thirteenth entries in the file, so in Python zero-based counting they are entries 11 and 12 in the features list: ** Dans cet exemple, nous nous concentrerons sur le gène pim. OLN: YP_pPCP05. Si vous regardez dans le fichier GenBank, l'emplacement de ce gène / CDS est 4343..4780, ou sous le compte python est 4342: 4780. Les informations de localisation seront les entrées 12 et 13 dans le fichier GenBank. Puisque python compte à partir de 0, il y aura 11 et 12 entrées dans la liste des fonctionnalités. ** **
>>> print(record.features[20])
type: gene
location: [4342:4780](+)
qualifiers:
Key: db_xref, Value: ['GeneID:2767712']
Key: gene, Value: ['pim']
Key: locus_tag, Value: ['YP_pPCP05']
<BLANKLINE>
>>> print(record.features[21])
type: CDS
location: [4342:4780](+)
qualifiers:
Key: codon_start, Value: ['1']
Key: db_xref, Value: ['GI:45478716', 'GeneID:2767712']
Key: gene, Value: ['pim']
Key: locus_tag, Value: ['YP_pPCP05']
Key: note, Value: ['similar to many previously sequenced pesticin immunity ...']
Key: product, Value: ['pesticin immunity protein']
Key: protein_id, Value: ['NP_995571.1']
Key: transl_table, Value: ['11']
Key: translation, Value: ['MGGGMISKLFCLALIFLSSSGLAEKNTYTAKDILQNLELNTFGNSLSH...']
Let’s slice this parent record from 4300 to 4800 (enough to include the pim gene/CDS), and see how many features we get:
Tranche 4300 à 4800 de la séquence parente (gène pim)/Voyons quelles fonctionnalités nous avons (la longueur qui inclut le CDS):
>>> sub_record = record[4300:4800]
>>> sub_record
SeqRecord(seq=Seq('ATAAATAGATTATTCCAAATAATTTATTTATGTAAGAACAGGATGGGAGGGGGA...TTA',
IUPACAmbiguousDNA()), id='NC_005816.1', name='NC_005816',
description='Yersinia pestis biovar Microtus str. 91001 plasmid pPCP1, complete sequence.',
dbxrefs=[])
>>> len(sub_record)
500
>>> len(sub_record.features)
2
Our sub-record just has two features, the gene and CDS entries for YP_pPCP05: Le gène YP_pPCP05 et les sentinelles CD, dont le sous-enregistrement contient deux caractéristiques: Référence: https://www.ddbj.nig.ac.jp/ddbj/cds.html
>>> print(sub_record.features[0])
type: gene
location: [42:480](+)
qualifiers:
Key: db_xref, Value: ['GeneID:2767712']
Key: gene, Value: ['pim']
Key: locus_tag, Value: ['YP_pPCP05']
<BLANKLINE>
>>> print(sub_record.features[1])
type: CDS
location: [42:480](+)
qualifiers:
Key: codon_start, Value: ['1']
Key: db_xref, Value: ['GI:45478716', 'GeneID:2767712']
Key: gene, Value: ['pim']
Key: locus_tag, Value: ['YP_pPCP05']
Key: note, Value: ['similar to many previously sequenced pesticin immunity ...']
Key: product, Value: ['pesticin immunity protein']
Key: protein_id, Value: ['NP_995571.1']
Key: transl_table, Value: ['11']
Key: translation, Value: ['MGGGMISKLFCLALIFLSSSGLAEKNTYTAKDILQNLELNTFGNSLSH...']
Notice that their locations have been adjusted to reflect the new parent sequence! *** Remarque: les emplacements seront ajustés pour correspondre à la séquence parent générée! *** ***
While Biopython has done something sensible and hopefully intuitive with the features (and any per-letter annotation), for the other annotation it is impossible to know if this still applies to the sub-sequence or not. To avoid guessing, the annotations and dbxrefs are omitted from the sub-record, and it is up to you to transfer any relevant information as appropriate. ** Biopython a pu acquérir des éléments de fonctionnalités de manière judicieuse et intuitive (ainsi que d'autres annotations par lettre), mais il n'y a pas de place pour savoir si d'autres annotations s'adaptent aux séquences enfants. Pour éviter tout malentendu, nous avons omis les annotations et les dbxrefs dans les enregistrements enfants. ** **
>>> sub_record.annotations
{}
>>> sub_record.dbxrefs
[]
The same point could be made about the record id, name and description, but for practicality these are preserved: *** J'ai réservé l'identifiant, le nom et la description dans le dossier de l'enfant pour des raisons pratiques. *** ***
>>> sub_record.id
'NC_005816.1'
>>> sub_record.name
'NC_005816'
>>> sub_record.description
'Yersinia pestis biovar Microtus str. 91001 plasmid pPCP1, complete sequence'
This illustrates the problem nicely though, our new sub-record is not the complete sequence of the plasmid, so the description is wrong! Let’s fix this and then view the sub-record as a reduced GenBank file using the format method described above in Section 4.6: ** Cet exemple a exposé le problème, l'enregistrement enfant n'est pas une séquence plasmidique complète, donc la description est incorrecte et peut être corrigée avec la méthode de formatage décrite dans la section 4.6: **
>>> sub_record.description = "Yersinia pestis biovar Microtus str. 91001 plasmid pPCP1, partial."
>>> print(sub_record.format("genbank"))
...
See Sections 20.1.7 and 20.1.8 for some FASTQ examples where the per-letter annotations (the read quality scores) are also sliced. ** Voir 20.1.7 et 20.1.8 pour des exemples FASTQ. Dans cet exemple, les annotations par lettre (score de qualité) ont été découpées. ** **
Recommended Posts