Tüütu on, et saate sellise GFF3-faili R-i laadida (kasutades paketti GenomicFeatures) ja pääseda juurde UTR-idele, kuid neid siis ei salvestata, kui kasutate funktsiooni eksport
saidilt rtracklayer
(see oleks olnud kõige lihtsam lahendus).
Kuna ma ei tea mitte midagi selle kohta, et seda käepärast teha, kulutasin paar minutit ühe kirjutamiseks. Kasutamine oleks addGFF3UTRs.py input.gff output.gff
. Saate muuta mitut silti nii, et need kuvatakse nii, nagu soovite. Seda pole põhjalikult testitud, kuid tundub, et see annab õige tulemuse väikeses just läbitud testis.
Kood on hostitud GitHubis ülaltoodud lingil ja lisan ka see siin:
#! / usr / bin / env pythonimport argparsedef parseAttribuudid (kvps): d = dict () kvp-le kvps-s: k, v = kvp.split ("=") d [k] = v tagastab ddef parseGFF3 (fname, topLevel = "gene", secondLevel = "mRNA", CDS = "CDS", exon = "exon"): f = avatud (fname) geenid = dict () transkriptid = dict () g2t = dict () # Sõnastik geeni ID-dega, mis on seotud nende transkriptsiooni ID-dega reale f: if line.startswith ("#"): jätkake cols = line.strip () .split ("\ t") atribuudid = parseAttribuudid (veerud [8] .split (";")) ID = atribuudid ["ID"] kui veerud [2] == topLevel: geenid [ID] = rida g2t [ID] = [] elif-veerud [2] == teineTase: vanem = atribuudid ["Vanem"] g2t [vanem ] .append (ID) # Looge loend [rida, [eksonikirjed], [CDS-kirjed]], kui ID pole transkriptsioonides: ärakirjad [ID] = [rida, [], []] muu: ärakirjad [ID] [0] = rida muu: vanem = atribuudid ["Vanem"], kui vanemat pole transkriptsioonides: ärakirju [vanem] = [Puudub, [], []] kui veerud [2] == ekson: ärakirju [vanem] [1 ] .apend ((int (koolid [3]), int (koolid [4]), rida))
elif cols [2] == CDS: transkriptid [vanem] [2] .apend ((int (cols [3], int (cols [4]), rida)) f.close () tagastavad geenid, transkriptid, g2tdef findUTR-id (transkriptid, fivePrime = True): k, t jaoks transkriptides.items (): # Kui CDS-kirjeid pole, jätke vahele, kui len (t [2]) == 0: jätka # Hangi ahel ("." käsitletakse kui "+") haru = t [0] .split ("\ t") [6] # 3 'UTR-i jaoks vahetage lihtsalt ahel, kui mitte viisPrime: strand = "+" kui ahel == "- "else" - "exons = [(s, e) s, e, _ in t [1]] CDS = [(s, e) s, e, _ in t [2]] exons.sort () CDSs.sort () UTRs = [] kui ahel! = "-": lõplik = CDS [0] [0] s, e jaoks eksonites: kui e < lõplik: UTRs.append ((s, e)) elif s < lõplik: UTRs.append ((s, final - 1)) else: break else: final = CDS-id [-1] [- 1] eksonites s, e: kui e < lõplik: jätkake elif s > final: UTRs.append ((s, e)) else: UTRs.append ((final + 1, e) ) t.append (UTRs) def saveGFF (oname, geenid, transkriptid, g2t, fivePrime, threePrime): o = open (oname, "w") o.write ("## gff-version 3 \ n") geenID jaoks , geneLine geenides. elemendid (): o.write (geneLine) # Käige läbi iga transkript transID jaoks g2t-s [geenID]: t = transkriptid [transID] kui t [0] pole: jätkake o.write (t [0 ]) cols = t [0] .strip (). split ("\ t") # Kirjutage eksonite eksonid t [1], seejärel CDS, seejärel 5'UTR, seejärel 3'UTR: o.write (exon [2]) CDS-i korral t [2]: o.write (CDS [2]) idx-le, UTR loendis (t [3]):
o.write ("{} \ t {} \ t {} \ t {} \ t {} \ t. \ t {} \ t. \ t" .formaat (veerud [0], veerud [1], fivePrime) , UTR [0], UTR [1], veerud [6])) o.write ("ID = {}. FivePrimeUTR {}; Parent = {} \ n" .formaat (transID, idx, transID)) IDX-le , UTR loendis (t [4]): o.write ("{} \ t {} \ t {} \ t {} \ t {} \ t. \ T {} \ t. \ T" .formaat ( cols [0], cols [1], threePrime, UTR [0], UTR [1], cols [6])) o.write ("ID = {}. threePrimeUTR {}; Vanem = {} \ n". formaat (transID, idx, transID)) o.close () parser = argparse.ArgumentParser (description = "Parsige GFF3-fail, millel puuduvad UTR-kirjed, ja lisage need. Pange tähele, et see programm eeldab mõistlikult vormindatud GFF3-faili") parser.add_argument ("--fiveUTRname", default = "five_prime_UTR", help = "5 'UTR-i kirje silt (vaikimisi:% (vaikimisi) s)") parser.add_argument ("- threeUTRname", default = "three_prime_UTR", help = "3 'UTR-i kirje silt (vaikimisi:% (vaikimisi) s)") parser.add_argument ("- topLevelID", default = "gene", help = "Tipptaseme kirjet tähistav tüüp" (vaikimisi:% (vaikimisi) s) ") parser .add_argument ("- secondLevelID", default = "mRNA", help = "Teise taseme kirjet tähistav" tüüp ", tavaliselt midagi sellist nagu" mRNA "või" ärakiri "(vaikimisi:% (vaikimisi) s)") parser.add_argument ("- exonID", default = "exon", help = "Eksoneid tähistav" tüüp "(vaikimisi:% (vaikimisi) s)") parser.add_argument ("- CDSID", default = "CDS ", help =" CDS-i tähistav "tüüp" (vaikimisi:% (vaikimisi) s) ") parser.add_argument (" sisend ", metavar =" input.gff3 ", help =" Sisendfaili nimi ") parser.add_argument ( "output", metavar = "output.gff3", help = "Väljundfaili nimi" args = parser.parse_args () geenid, ärakirjad, g2t = parseGFF3 (args.input, topLevel = args.topLevelID, secondLevel = args.secondLevelID , exon = args.exonID, CDS = args.CDSID) # Lisage UTRsfindUTR-id (transkriptid) findUTR-id (transkriptid, fivePrime = False) # Kirjutage väljundidaveGFF (args.output, geenid, transkriptid, g2t, args.fiveUTRname, args.three )