Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- """Maker | Gemaakte functie of taak | Datum"""
- """Diego | database structuur opzetten | 11-01-15"""
- """Diego | downloaden proteomen | 11-01-15"""
- """Yoena | samenvoegen proteomen | 11-01-15"""
- """Yoena | eiwit info in de database | 11-01-15"""
- """Yoena | twogs en cogs maken | 11-01-15"""
- """Diego | queries | 11-01-15"""
- """Dit programma, download proteomen van de volgende tien schimmels:
- Aspergillus_fumigatus, Aspergillus_nidulans, Aspergillus_oryzae,
- Melampsora_larici-populina, Mixia_osmundae, Neurospora_crassa,
- Penicillium_canescens, Phanerochaete_chrysosporium,
- Pleurotus_ostreatus, Saccharomyces_cerevisiae] uit de databases
- NCBI, SWISSPROT, Ensembl, JGI, Trembl voor een zo totaal mogelijk
- samengesteld proteom voor elk organisme. Na het downloaden en
- samenvoegen van de proteomen worden alle eiwitten uit de proteomen
- (met een eigen naam geving) in een eerdere gecreerde database
- toegevoegt. Dan worden alle proteomen tegen elkaar geblast om COG's
- te maken. Het maken van deze COG's wordt gedaan, door eerst TWOG's
- (Best Directional Hits) te maken en daarna van deze TWOG's
- COG's te maken door ze te koppelen. Als laatst worden de COG's
- door middel van een COG nummer aan de database toegevoegd.
- """
- """Hieronder worden verschillende modules geimporteerd.
- De module os wordt geimporteerd zodat er in dit python bestand
- gebruik kan worden gemaakt van bash (de Unix commandline) met de
- module system van os.
- De psycopg2 wordt geimporteerd zodat er connectie gemaakt kan
- worden met de postgres server en een database gecreerd en
- vullen kan worden.
- De methode collections van de module Counter wordt
- geimporteerd zodat er geteld kan worden hoevaak een
- item in een lijst voorkomt. (Dit wordt gebuikt bij het
- maken van twogs, in de functie proteom_naar_twogs.)"""
- import os
- import psycopg2
- from collections import Counter
- def verbinding():
- """Zorgt voor de verbinding tussen python en postgresql
- Deze functie maakt gebruik van de module psycopg2 en maakt de
- verbinding tussen python en postgresql. In de conn_string
- staan de inlog gevevens voor de toegang tot de database dit
- wordt door middel van een try en except statement ingevoerd
- als het word goedegekeurd wordt de conn en cursor teruggestuurd
- voor gebruik bij het aanmaken/vullen/update etc van de database
- anders wordt het programma gestopt door middel van een exit()
- statement.
- Return value(s):
- waneer de connectie gelukt is.
- *conn, de connectie met de postgres server
- *cursor, de cursor van de postgres server
- """
- conn_string = '''host=\'localhost\' dbname=\'postgres\'
- user=\'gebruikersnaam\' password=\'wachtwoord\''''
- try:
- conn = psycopg2.connect(conn_string)
- cursor = conn.cursor()
- print 'Connected! with Database'
- return conn, cursor
- except:
- print 'Connectie mislukt!'
- exit()
- def verbinding_database_stop(vs_conn, vs_cursor):
- """
- Verbinding verbreken met de database.
- Parameter(s):
- *vs_conn, de connectie met de postgres server
- *vs_cursor, de cursor van de postgres server
- """
- vs_conn.commit()
- vs_cursor.close()
- vs_conn.close()
- def droptabel(d_cursor):
- """
- Verwijderen van de tabellen in de database.
- De cursor wordt gebruikt voor het doorvoeren van de queries
- Parameter(s):
- *d_cursor, de cursor van de postgres server.
- Hiermee kunnen execute statements uitgevoert worden
- voor de server.
- """
- d_cursor.execute("""DROP TABLE IF EXISTS "Eiwit_Info" CASCADE""")
- d_cursor.execute("""DROP TABLE IF EXISTS "Twog_Info" CASCADE""")
- def twoginfo(tw_cursor):
- """
- Aanmaken van de twoginfo tabel in de database.
- De cursor wordt gebruikt voor het doorvoeren van de queries
- Parameter(s):
- *tw_cursor, de cursor van de postgres server.
- Hiermee kunnen execute statements uitgevoert
- worden voor de server.
- """
- tw_cursor.execute("""CREATE TABLE "Twog_Info"
- ("Twog ID" VARCHAR PRIMARY KEY, "Eiwit ID 1" VARCHAR,
- "Eiwit ID 2" VARCHAR, "Cog Nummer" VARCHAR)""")
- def eiwit_info(e_cursor):
- """
- Aanmaken van de eiwitinfo tabel in de database.
- De cursor wordt gebruikt voor het doorvoeren van de queries
- Parameter(s):
- *e_cursor, de cursor van de postgres server.
- Hiermee kunnen execute statements uitgevoert
- worden voor de server.
- """
- e_cursor.execute("""CREATE TABLE "Eiwit_Info"(
- "Eiwit ID" VARCHAR UNIQUE NOT NULL PRIMARY KEY,
- "Organisme" TEXT NOT NULL,
- "Stam" TEXT NOT NULL,
- "Cog Nummer" VARCHAR NOT NULL,
- "AA Sequentie" VARCHAR NOT NULL,
- "Gegevens SwissProt" VARCHAR,
- "Gegevens JGI" VARCHAR,
- "Gegevens TrEMBL" VARCHAR,
- "Gegevens Ensembl" VARCHAR,
- "Gegevens NCBI" VARCHAR
- )""")
- def database_structuur_opzetten():
- """
- Opzetten van de database structuur.
- In deze functie wordt als eerst de connectie tot stand gebracht
- met de database. De tabellen die hierin staan worden verwijderd in
- de droptabel functie. De volgende 2 functies die worden
- aangeroepen gaan over het maken van de tabellen die aanwezig
- zullen zijn in de database. (eiwit_info en twog_info).
- Return value(s):
- *conn, de connectie met de postgres server
- *cursor, de cursor van de postgres server
- """
- conn, cursor = verbinding()
- droptabel(cursor)
- eiwit_info(cursor)
- twoginfo(cursor)
- return conn, cursor
- def voorbereiden_swissprot_trembl_download():
- """Deze functie, voorbereiden_swissprot_trembl_download,
- download alle eiwitten die beschikbaar zijn op SWISSPROT
- en Trembl. Deze download wordt gedaan met een wget.
- Return value(s):
- * uniprot_treble_bestanden, een dictionary met de naam
- van de database (SWISSPROT of Trembl) en het bestand
- dat gedownload is voor deze database. Van deze dictionary
- wordt gebruik gemaakt in de functie, swissprot_tremble_download
- """
- uniprot_treble_bestanden = {"SWISSPROT": "uniprot_sprot.fasta", "Trembl": "uniprot_trembl.fasta"}
- for bestand in uniprot_treble_bestanden.values():
- os.system("wget ftp://ftp.uniprot.org/pub/databases/uniprot/knowledgebase/"+bestand+".gz")
- os.system("gunzip "+bestand+".gz")
- return uniprot_treble_bestanden
- def ncbi_download(organisme):
- """
- In deze funtie worden de proteomen gedownload van de verschillende
- organismen. Het grootste gedeelte hiervban gebeurt in de else
- statement, maar Saccharomyces_cerevisiae stond op een andere plek
- in de ftp database. Door middel van de 'os' module worden met wget
- de proteomen opgehaald. Deze worden uitgepakt en gegevens die van
- belang waren voor het downloaden worden weer verwijderd.
- * organisme, de naam van het organsime
- """
- if organisme is 'Saccharomyces_cerevisiae':
- os.system('''wget ftp://ftp.ncbi.nih.gov/genomes/genbank/fungi/Saccharomyces_cerevisiae/reference/GCA_000146045.2_R64/GCA_000146045.2_R64_protein.faa.gz''')
- else:
- os.system('''wget -O - ftp://ftp.ncbi.nih.gov/genomes/genbank/fungi/%s/representative/ | egrep href | awk -F '"' '{print $2}' > link.txt'''%(organisme))
- os.system('''wget -O - %s/ | egrep *protein.faa.gz | awk -F '"' '{print $2}'> link.txt'''%(open('link.txt', 'r').readline().rstrip()))
- os.system('''wget %s'''%(open('link.txt', 'r').readline().rstrip()))
- os.system('''gunzip *''')
- os.system('''mv *protein.faa %s.ncbi.fa'''%(organisme))
- os.system('''rm link*''')
- def ensembl_download(organisme):
- """
- In deze funtie worden de proteomen gedownload van de verschillende
- organismen. Het grootste gedeelte hiervban gebeurt in de else
- statement, maar Mixia_osmundae en Pleurotus_ostreatus stond op een
- andere plek in de ftp database. Door middel van de 'os' module
- worden met wget de proteomen opgehaald. Deze worden uitgepakt
- en gegevens die van belang waren voor het downloaden worden weer
- verwijderd.
- * organisme, de naam van het organsime
- """
- if organisme is 'Mixia_osmundae':
- os.system('''wget ftp://ftp.ensemblgenomes.org/pub/fungi/current/fasta/fungi_basidiomycota1_collection/mixia_osmundae_iam_14324/pep/Mixia_osmundae_iam_14324.GCA_000241205.2.30.pep.all.fa.gz''')
- elif x is 'Pleurotus_ostreatus':
- os.system('''wget ftp://ftp.ensemblgenomes.org/pub/fungi/current/fasta/fungi_basidiomycota1_collection/pleurotus_ostreatus_pc15/pep/Pleurotus_ostreatus_pc15.GCA_000697685.1.30.pep.all.fa.gz''')
- else:
- os.system('''wget -O - ftp://ftp.ensemblgenomes.org/pub/fungi/current/fasta/%s/pep/ | egrep href | egrep fa.gz | awk -F '"' '{print $2}' > link.txt'''%(organisme.lower()))
- os.system('''wget %s'''%(open('link.txt', 'r').readline().rstrip()))
- os.system('''gunzip *''')
- os.system('''mv *pep.all* %s.ensembl.fa'''%(organisme))
- os.system('''rm link*''')
- def swissprot_tremble_download(uniprot_treble_bestanden, organisme):
- """Deze functie, swissprot_tremble_download, filterd de bijbehorende
- eiwitten van het binnen gekregen organisme uit de eerder gedownloaden
- bestanden van SWISSPROT en Trembl. Deze worden geschreven naar
- een bestand met de volgende opbouw: 'organisme naam'_'database'.
- Parameters(s):
- * uniprot_treble_bestanden, een dictionary met de naam
- van de database (SWISSPROT of Trembl) en het bestand
- dat gedownload is voor deze database.
- * organisme, de naam van het organsime waar op dat moment
- het SWISSPROT en Trembl proteom moet gedownload (gefilterd)
- worden
- """
- swissprot_tremble_dict = {"Aspergillus_fumigatus": "OS=Neosartorya fumigata \(strain ATCC MYA-4609 / Af293 / CBS 101355 / FGSC A1100\)",
- "Aspergillus_nidulans": "OS=Emericella nidulans \(strain FGSC A4 / ATCC 38163 / CBS 112.46 / NRRL 194 / M139\)",
- "Aspergillus_oryzae": "OS=Aspergillus oryzae \(strain ATCC 42149 / RIB 40\)",
- "Melampsora_laricis-populina": "Melampsora larici-populina \(strain 98AG31 / pathotype 3-4-7\)",
- "Mixia_osmundae": "Mixia osmundae \(strain CBS 9802 / IAM 14324 / JCM 22182 / KY 12970\)",
- "Neurospora_crassa": "Neurospora crassa \(strain ATCC 24698 / 74-OR23-1A / CBS 708.71 / DSM 1257 / FGSC 987\)",
- "Penicillium_canescens": "OS=Penicillium canescens",
- "Phanerochaete_chrysosporium": "OS=Phanerochaete chrysosporium", "Pleurotus_ostreatus": "OS=Pleurotus ostreatus",
- "Saccharomyces_cerevisiae": "OS=Saccharomyces cerevisiae \(strain ATCC 204508 / S288c\)"}
- for bestand in uniprot_treble_bestanden:
- os.system("cat "+uniprot_treble_bestanden[bestand]+" | tr \"\\n\" \"@\" | sed 's/>/\\n>/g' | egrep \""+swissprot_tremble_dict[organisme]+"\" | tr \"@\" \"\\n\" > "+organisme+"_"+bestand)
- def jgi_download():
- """
- Proteomen downloaden van JGI
- Via de curl statement wordt er een cookie aangemaakt voor het
- goedkeuren van de inlog op JGI. Hierna word vanuit de xml
- bestanden de link naar de proteomen opgehaald. Een
- organismen had een andere naamgeving hiervoor is een
- if statement aangemaakt. Hiernaa worden gebruikte bestanden
- verwijderd en de gedownloade bestanden worden uitgepakt.
- """
- jgi_dict = {'Mixia_osmundae': 'Mixos1', 'Penicillium_canescens': 'Penca1', 'Phanerochaete_chrysosporium': 'Phchr2','Pleurotus_ostreatus': 'PleosPC15_2',}
- os.system('''curl --insecure 'https://signon.jgi.doe.gov/signon/create' --data-urlencode 'login=wow.diegoz@gmail.com' --data-urlencode 'password=bpcogs123' -c cookies > /dev/null''')
- for bac in jgi_dict:
- os.system('''curl 'http://genome.jgi.doe.gov/ext-api/downloads/get-directory?organism=%s' -b cookies > files.xml'''%(jgi_dict[bac]))
- if bac == 'Pleurotus_ostreatus':
- os.system('''cat files.xml | egrep %s_GeneModels_AllModels |egrep aa.fasta| awk -F 'url' '{print $2}' | awk -F '"' '{print $2}' > links.txt'''%(jgi_dict[bac]))
- else:
- os.system('''cat files.xml | egrep %s_all_proteins | awk -F 'url' '{print $2}' | awk -F '"' '{print $2}' > links.txt'''%(jgi_dict[bac]))
- os.system('''curl 'http://genome.jgi.doe.gov%s' -b cookies > %s_JGI.gz'''%(open('links.txt', 'r').readline().rstrip(), bac))
- os.system('''gunzip *_JGI.gz''')
- os.system('''rm cookies files.xml links.txt''')
- def proteomen_downloaden(organisme_lijst):
- """Deze functie, proteomen_downloaden, zorgt er voor dat van alle
- organismes de juiste functies worden aangeroepen om in deze functies
- de proteomen uit alle vijf de databases (NCBI, JGI, Esamble,
- SWISSPORT en Trembl) gedownload kunnen worden.
- Parameters(s):
- * organisme_lijst, een lijst met alle namen van de tien
- schimmels
- """
- uniprot_treble_bestanden = voorbereiden_swissprot_trembl_download()
- for organisme in organisme_lijst:
- ncbi_download(organisme)
- ensembl_download(organisme)
- swissprot_tremble_download(uniprot_treble_bestanden, organisme)
- jgi_download()
- def organisme_proteom_samenvoegen(organisme_lijst, database_lijst):
- """Deze functie, organisme_proteom_samenvoegen, zorgt er voor dat voor
- elke organsime 2 bestanden worden gecreerd die het gehele proteom
- (de proteomen uit NCBI, JGI, SWISSPORT, Tremble en Ensable
- samengevoegt) representeren. De bestanden (full_'organisme naam'
- en uniq_full_'organisme naam') worden aangemaakt, met de juiste
- format. full_'orgaisme naam' bevat alle eiwitten uit alle databases
- (NCBI, JGI, SWISSPROT, Tremble en Ensamble). Dit bestand is niet
- gefilterd op dubbele eiwitten, zodat alle informatie gemakkelijk
- terug te vinden is. (bijvoorbeeld uit welke database welk eiwit
- komt.). Het uniq_full_'organisme naam' bestand is wel gefilterd op
- dubbele eiwitten en hen heeft een eigen naam geving gekregen. Dit
- wordt gedaan om de eiwitten om de eiwitten later makkelijk terug te
- vinden in de database. Om full_'organisme naam' te kunnne maken moet
- eerst wel duidelijk zijn welke eiwitten uit elke database komen. Dit
- wordt gedaan door voor elke database bij elk eiwit de database naam
- net na de '>' te zetten. Hierna wordt simpelweg alle datbase van een
- organisme samngevoegt tot 1 bestand (proteom). Na het creeren van het
- bestand full_'organisme naam' wordt voor elk organisme een afkorting
- gemaakt (de eerste 3 letters van de geslachtsnaam gevolgt door de
- eerste 3 letters van de soortsnaam) (dit wordt gedaan voor de naam
- geving) en het net gecreerde full_'organisme naam' op dubbele eiwitten
- gefilterd en de eigen naam geving toegekend (organisme naam afkorting
- + een getal (dit getal is oplopend in het bestand). Voor alle file
- manipulaties (het veranderen en creeren van bestanden) wordt bash
- gebruikt. Beide gecreerde bestanden in deze functie worden later
- gebruikt om de datbase te vullen. Het bestand uniq_full_organisme
- wordt ook gebruikt bij het process dat COGs maakt. Tenslotte worden
- de alle bestanden 'organsime naam'_'database naam' verwijderd omdat
- deze niet meer nodig zijn.
- Parameters(s):
- * organisme_lijst, een lijst met alle namen van de tien
- schimmels
- * database_lijst, een lijst met alle namen van de database die
- waaruit de data die verwerkt wordt verzameld wordt.
- """
- for organisme in organisme_lijst:
- print organisme
- for database in database_lijst:
- os.system("cat "+organisme+"_"+database+" | sed 's/>/>|"+database+"|/g' | tr -d \"*\" > "+organisme+"__"+database)
- os.system("cat "+organisme+"__* | sed 's/>/\\n>/g' | awk '{if (substr($0, 1, 1) == \">\") print $0\"%\"; else print $0}' | tr -d '\\n' | sed 's/>/@>/g' | tr '@' '\\n' | awk '{if (substr($0, 1, 1) == \">\") print $0\"%\"}' > full_"+organisme)
- orgafk = "".join([orgnaam[0:3] for orgnaam in organisme.split("_")])
- os.system("cat full_"+organisme+" | awk -F \"%\" '{if (substr($1, 1, 1) == \">\") print $(NF-1)}' | sort | uniq | awk '{print \">"+orgafk+"\"NR\"%\"$NF}' > uniq_full_"+organisme)
- os.system("rm "+organisme+"_* uniprot*")
- os.system("cat uniq_full_"+organisme+" | tr \"%\" \"\n\" > "+organisme+".fa")
- print "proteomen samengevoegd"
- def eiwit_info_verzamelen(sequentie_regel, organisme):
- """Deze functie, eiwit_info_verzamelen, filterd het eiwit id
- en de sequentie uit de variable sequentie_regel. Hierna
- wordt in het bestand full_'organisme', in dit bestand
- staan alle eiwitten uit gedownloade databases met hun eigen
- informatie, de sequentie gezocht. Dit wordt gedaan zodat de
- orsprongelijke informatie uit de databases ook in de gecreerde
- database kan worden gezet. Voor elke regel met dezelfde
- sequentie, die gevonden is, wordt de informatie voor de sequentie
- bij de juiste database naam in de dictonary geplaatst.
- Parameter(s):
- * sequentie_regel, een regel uit het bestand
- uniq_full_'organisme' hieruit wordt de nodige
- informatie gefilterd om deze informatie in de
- database te kunnen zetten
- * organisme, de naam van het organsime
- Return value(s):
- * eigen_eiwit_naam, de eigen naam van het eiwit
- dat gecreerd is in dit script.
- * sequentie, de aminozuur sequentie van het eiwit.
- * database_dict, alle informatie hoe het eiwit heet
- in elke database, wanneer het niet bekend is in een
- database staat er NULL.
- """
- eigen_eiwit_naam = sequentie_regel.strip().split("%")[0][1:]
- sequentie = sequentie_regel.strip().split("%")[1]
- os.system("cat full_"+organisme+" | egrep %"+sequentie+"% | tr -d \"'\" > "+eigen_eiwit_naam[1:])
- eiwit_info_b = open(eigen_eiwit_naam[1:], "r")
- eiwit_info = eiwit_info_b.readlines()
- database_dict = {"NCBI": "NULL", "SWISSPROT": "NULL", "Ensembl": "NULL", "JGI": "NULL", "Trembl": "NULL"}
- for database_eiwit_info_seq in eiwit_info:
- database_eiwit_info = database_eiwit_info_seq.strip().split("%")[0].split("|")
- database = database_eiwit_info.pop(1)
- database_dict[database] = "|".join(database_eiwit_info)
- return eigen_eiwit_naam, sequentie, database_dict
- def eiwit_info_voor_database(organisme_lijst, cursor):
- """Deze functie, eiwit_info_verzamelen_voor_database, zoekt, via
- de functie eiwit_info_verzamelen voor alle eiwitten in de
- organismes (bestand uniq_full_'organisme naam')
- alle bijhorende informatie uit het samengevoegde proteom,
- full_'organisme naam', om deze vervolgens door te geven samen met
- de eigen gegeven naam (in uniq_full_'organisme naam' en de sequentie
- van het eiwit aan de functie eiwit_in_database zetten. Tenslotte
- worden de gecreerde bestanden voor elk eiwit verwijderd wanneer
- alle informatie van het eiwit bekend is en de full_'organisme
- naam' en uniq_full_'organisme naam' bestanden verwijderd wanneer
- alle eiwitten uit een organisme behandeld zijn.
- Parameter(s):
- * organisme_lijst, een lijst met alle namen van de tien
- schimmels
- * cursor, de cursor van de postgres server
- """
- for organisme in organisme_lijst:
- organisme_uniq_b = open("uniq_full_"+organisme, "r")
- uniq_full_organisme = organisme_uniq_b.readlines()
- for sequentie_regel in uniq_full_organisme:
- eigen_eiwit_naam, sequentie, database_dict = eiwit_info_verzamelen(sequentie_regel, organisme)
- eiwit_in_database_zetten(eigen_eiwit_naam, sequentie, database_dict, organisme,
- stam_bepalen(organisme), cursor)
- os.system("rm "+eigen_eiwit_naam[1:])
- os.system("rm *full_"+organisme)
- def stam_bepalen(s_organisme):
- """
- Stam bepalen
- In deze functie wordt er gekeken tot welke stam de organisme
- behoort.
- Parameter(s):
- * organisme, de naam van het organsime
- Return value(s):
- * 'Ascomycota' of 'Basidiomycota', de naam van de stam
- waar toe het organisme (van het eiwit) toebehoord. Deze
- informatie wordt in de database gezet door de
- onzoeksvraag.
- """
- ascomycota = ['Aspergillus_fumigatus', 'Aspergillus_nidulans',
- 'Aspergillus_oryzae', 'Neurospora_crassa',
- 'Saccharomyces_cerevisiae', 'Penicillium_canescens']
- if s_organisme in ascomycota:
- return 'Ascomycota'
- else:
- return 'Basidiomycota'
- def eiwit_in_database_zetten(eigen_eiwit_naam, sequentie, database_dict,
- organisme, stam, cursor):
- """Deze functie, eiwit_in_database_zetten, zet alle bekende
- informatie van de eiwitten tot nu toe, (alles behalve cog nummer)
- in de Eiwit_info tabel van de eerder gecreerde database
- Parameter(s):
- * eigen_eiwit_naam, de eigen naam van het eiwit
- dat gecreerd is in dit script.
- * sequentie, de aminozuur sequentie van het eiwit.
- * database_dict, alle informatie hoe het eiwit heet
- in elke database, wanneer het niet bekend is in een
- database staat er NULL.
- * organisme, de naam van het organsime
- *stam, de naam van de stam
- waar toe het organisme (van het eiwit) toebehoord. Deze
- informatie wordt in de database gezet door de
- onzoeksvraag.
- * cursor, de cursor van de postgres server
- """
- cursor.execute("""INSERT INTO "Eiwit_Info" VALUES (\'"""+eigen_eiwit_naam+"""\', \'"""+organisme+"""\',\'"""+stam+"""\', \'Geen\', \'"""+sequentie+"""\', \'"""+database_dict['SWISSPROT']+ """\', \'"""+database_dict['JGI']+"""\', \'"""+database_dict['Trembl']+"""\', \'"""+database_dict['Ensembl']+"""\', \'"""+database_dict['NCBI']+"""\')""")
- def blast(br_naam1, br_naam2, br_pos1, br_pos2):
- """Deze functie, blast, voert de blast uit tussen de organisme
- namen die meegegeven worden. Nadat de blast is uitgevoert
- wordt het bestand met de resultaten van de blast ingelezen.
- En terug gegeven aan de functie die de functie blast heeft
- aangeroepen. Als laatste worden de gecreerde bestanden van
- de blast met onder andere de blast resultaten verwijderd,
- deze zijn niet meer nodig.
- Parameter(s):
- *br_naam1, de naam van het organisme waar tegen
- geblast worden (van dit organisme wordt een database gecreerd.
- *br_naam2, de naam van het organisme die geblast gaat
- worden tegen het andere organisme (br_naam2)
- * br_pos1, de positie van de eiwitten van br_naam1
- in het blast resultaat. Dit wordt meegegeven om straks
- gemakkelijker TWOG's te maken.
- * br_pos2, de positie van de eiwitten van br_naam1
- in het blast resultaat. Dit wordt meegegeven om straks
- gemakkelijker TWOG's te maken.
- Return value(s):
- *singles, een dictionary waarbij wanneer een key een TWOG
- is deze als value 2 heeft (aangezien deze single 2 keer
- voor komt)
- """
- singles = []
- os.system("formatdb -p T -i %s.fa -n %sDB"%(br_naam1, br_naam1))
- os.system("blastall -m8 -p blastp -d %sDB -i %s.fa -o %s_"%(br_naam1, br_naam2, br_naam1+br_naam2))
- os.system("awk '!x[$1]++' %s_ > %s"%(br_naam1+br_naam2, br_naam1+br_naam2))
- blast_resulaten_b = open(br_naam1+br_naam2, "r")
- blast_resulaten = blast_resulaten_b.readlines()
- for blast_resulaat in blast_resulaten:
- singles.append((blast_resulaat.split()[br_pos1] + " " + blast_resulaat.split()[br_pos2]))
- os.system("rm *DB* %s* formatdb.log"%(br_naam1+br_naam2))
- return singles
- def proteom_naar_twogs(organisme_1, organisme_2, cursor, twogid):
- """Deze functie, proteom_naar_twogs, zorgt dat de beide proteomen
- van organisme 1 en 2 tegen elkaar geblast worden, via de functie
- blast. En vervolgens gekeken of er TWOG's zijn doormiddel van de
- geimporteerd methode Counter. Een lijst van singles (uitput
- van de blast) wordt omgezet in TWOG's door de methode Counter.
- Wanneer er een TWOG in de singles_tellijst staat wordt deze
- toegevoegt aan de database met een Twog ID en een Cog Nummer
- die op "" staat, wanneer alle TWOG's van alle organismes
- in de database staat wordt dit aangepast, in de functie
- twog_naar_cogs.
- Parameter(s):
- * organisme_1, de naam van organisme 1
- * organisme_2, de naam van organisme 2
- * cursor, de cursor van de postgres server
- * twogid, een getal dat als primary key dient in
- de database
- Return value(s):
- * twogid, een getal dat als primary key dient in
- de database. Deze wordt terug gegeven zodat de
- volgende TWOG's (van andere organisme) vanaf
- het volgende TWOG nummer beginnen.
- """
- print "Blast"
- singles_lijst = []
- singles_lijst.extend(blast(organisme_1, organisme_2, 0, 1))
- singles_lijst.extend(blast(organisme_2, organisme_1, 1, 0))
- singles_tellijst = Counter(singles_lijst)
- for single in singles_tellijst:
- if singles_tellijst[single] == 2:
- twogid += 1
- cursor.execute("""INSERT INTO "Twog_Info" VALUES (\'"""+str(twogid)+"""\', \'"""+single.split()[0]+"""\', \'"""+single.split()[1]+"""\', \'""\');""")
- print "twogs in database"
- return twogid
- def twogs_(orgslijst, cursor):
- """Deze functie maakt alle mogelijke combinaties van een set
- (van 2) organismes. Wanneer er een set is gevonden stuurt
- hij deze naar de functie proteom_naar_twogs, om de TWOG's te
- vinden tussen deze organismen.
- Parameter(s):
- * orgslijst, een lijst met alle namen van de tien
- schimmels
- * cursor, de cursor van de postgres server
- """
- twogid = 0
- for org1_i in range(len(orgslijst)):
- for org2_i in range(len(orgslijst)):
- if org1_i < org2_i:
- print orgslijst[org1_i], orgslijst[org2_i]
- twogid = proteom_naar_twogs(orgslijst[org1_i],
- orgslijst[org2_i], cursor, twogid)
- def check_eiwit(cursor, twogid):
- """Deze functie, check_eiwit, geeft aan wat er in de database
- bij de kolom Cog Nummer staat bij het twogid dat meegeven wordt.
- Deze functie wordt als check gebruikt in de functie
- twogs_naar_cogs.
- Parameter(s):
- * cursor, de cursor van de postgres server
- * twogid, een getal dat als primary key dient in
- de database
- """
- cursor.execute("""SELECT "Cog Nummer" FROM "Twog_Info" WHERE "Twog ID" = \'"""+str(twogid)+"""\';""")
- gecheckt_eiwit = cursor.fetchall()[0]
- return gecheckt_eiwit[0]
- def twogs_naar_cogs(cursor):
- """Deze functie, twogs_naar_cogs, maakt linkt alle
- TWOG's (samen met de functie twogs_vinden_gerealeerd_aan_de_twog)
- aan elkaar om COG's te maken. Alle TWOG's in de database worden
- doorlopen, behalve als zij al eerder gecheckt zijn. Dit is in
- de database te zien doordat er iets anders (een JA, nummer of Geen)
- staat in plaats van "". twogid en cog_nr worden geduurde de
- functie steeds 1 bij opgeteld zodat beide oplopend zijn
- vanaf 1 in de database. Als eerst worden de eiwitten in de
- TWOG opgehaald uit de database (met het bijbehorende Twog ID)
- Hierna wordt het Cog Nummer naar 'JA' veranderd zodat deze
- TWOG niet nog een keer gevonden kan worden, en makkelijk
- van de rest gescheden kan worden en dus het Cog Nummer gemakkelijk
- veranderd kan worden. Hierna wordt (als de twog niet een lege
- string is) gekeken of er meerdere twogs zijn waarin de eiwitten
- van de twog voorkomen, dit wordt gedaan in de functie
- twogs_vinden_gerealeerd_aan_de_twog. Wanneer er geen andere
- twogs (meer) gevonden kunnen worden wordt alle verzamelde
- informatie naar cog_nr_toevoegen_aan_database gestuurd om
- het Cog Nummer aan te passen in de database. Als laatst wordt
- er bij het twogid 1 opgeteld zodat de volgende TWOG in de
- database gecontroleerd kan worden.
- Parameter(s):
- * cursor, de cursor van de postgres server
- """
- twogid = 1
- cog_nr = 0
- cursor.execute("""SELECT COUNT("Twog ID") FROM "Twog_Info";""")
- aantal_twogs = cursor.fetchall()[0][0]
- while twogid != (aantal_twogs + 1):
- if check_eiwit(cursor, twogid) == '""':
- twog_in_cog = []
- cursor.execute("""SELECT "Eiwit ID 1", "Eiwit ID 2" FROM "Twog_Info" WHERE "Twog ID" = \'"""+str(twogid)+"""\';""")
- twog = cursor.fetchall()[0]
- twog_in_cog.append(twog)
- cursor.execute("""UPDATE "Twog_Info" SET "Cog Nummer" = 'JA' WHERE "Eiwit ID 1" = \'"""+str(twog[0])+"""\' AND "Eiwit ID 2" = \'"""+str(twog[1])+"""\';""")
- gecheckte_eiwitten = []
- while twog != "":
- twog = twogs_vinden_gerealeerd_aan_de_twog(gecheckte_eiwitten,
- twog_in_cog, twog, cursor)
- cog_nr = cog_nr_toevoegen_aan_database(cog_nr, twog_in_cog, gecheckte_eiwitten, cursor)
- twogid += 1
- print "Cogs gemaakt"
- def cog_nr_toevoegen_aan_database(cog_nr, twog_in_cog, gecheckte_eiwitten, cursor):
- """Deze functie, cog_nr_toevoegen_aan_database, wordt bepaald
- of een cog een echte cog is, doormiddel van de functie cog_check.
- Hierna wordt in de beide tabbellen van de database (Eiwit_Info en Twog_Info)
- het Cog Nummer toegevoegt. Wanneer er geen (echte) COG gevonden
- is wordt het Cog Nummer vervangen door het woord 'Geen'.
- Parameter(s):
- * cog_nr, het oplopende nummer dat als variable in
- de database gezet wordt zodat een COG opgeslagen
- kan worden in de database.
- """
- if len(twog_in_cog) != 1 and cog_check(twog_in_cog) != True:
- cog_nr += 1
- t_cog_nr = cog_nr
- else:
- t_cog_nr = "Geen"
- for twog in twog_in_cog:
- cursor.execute("""UPDATE "Twog_Info" SET "Cog Nummer" = \'"""+str(t_cog_nr)+"""\' WHERE "Eiwit ID 1" = \'"""+str(twog[0])+"""\' AND "Eiwit ID 2" = \'"""+str(twog[1])+"""\';""")
- for eiwit in gecheckte_eiwitten:
- cursor.execute("""UPDATE "Eiwit_Info" SET "Cog Nummer" = \'"""+str(t_cog_nr)+"""\' WHERE "Eiwit ID" = \'"""+str(eiwit)+"""\';""")
- return cog_nr
- def twogs_vinden_gerealeerd_aan_de_twog(gecheckte_eiwitten,
- twog_in_cog, twog, cursor):
- """Deze functie, twogs_vinden_gerealeerd_aan_de_twog,
- wordt voor elk eiwit in de meegegeven TWOG aller eerst
- toegevoegt aan de gecheckte eiwitten (in de cog). Zodat
- eiwitten niet 2 keer gecheckt worden op gerelateerde TWOG's
- Hierna worden alle TWOG's opgehaald waar het eiwit ook in
- zit. elke TWOG waar het eiwit ook in zit wordt toegevoegt
- aan de lijst twog_in_cog (deze bevat alle TWOG's van de COG
- op dat moment). Hierna wordt het Cog Nummer naar 'JA' veranderd
- zodat deze TWOG niet nog een keer gevonden kan worden, en makkelijk
- van de rest gescheden kan worden en dus het Cog Nummer gemakkelijk
- veranderd kan worden. Wanneer voor beide eiwitten gerelateerde
- TWOG's gezocht zijn, wordt er gekeken of er een nieuw eiwit
- bij gekomen is, zoja wordt deze terug gegeven om vervolgens
- door de functie twogs_naar_cogs ook gecheckt te worden door
- deze functie. Wanneer er geen nieuwe eiwitten bij gekomen zijn
- wordt "" terug gegeven aan de functie twogs_naar_cogs. De COG
- is nu compleet en wordt na een check in de database gezet als
- Cog Nummer, in cog_nr_toevoegen_aan_database
- Parameter(s):
- * gecheckte_eiwitten, een lijst met alle eiwitten die
- tot nu toe gecheckt zijn op gerelateerde TWOG's
- * twog_in_cog, een lijst met alle TWOG's die tot nu toe
- aan de COG behoren.
- * twog, een TWOG (lijst van 2 eiwitten) die gecheckt moet
- worden op gerelateerde TWOG's*
- * cursor, de cursor van de postgres server
- Return value(s):
- * twogg of "", dit is voor de functie twogs_naar_cogs
- een indicator of er nog een TWOG gecheckt moet worden
- of dat alle gerelateerde TWOG's gevonden zijn.
- """
- for eiwit_in_twog in twog:
- if eiwit_in_twog not in gecheckte_eiwitten:
- gecheckte_eiwitten.append(eiwit_in_twog)
- cursor.execute("""SELECT "Eiwit ID 1", "Eiwit ID 2" FROM "Twog_Info" WHERE ("Eiwit ID 1" = \'"""+str(eiwit_in_twog)+"""\' OR "Eiwit ID 2" = \'"""+str(eiwit_in_twog)+"""\') AND "Cog Nummer" = \'""\'; """)
- twogs_waar_eiwit_inzit = cursor.fetchall()
- for nog_niet_gecheckte_twog in twogs_waar_eiwit_inzit:
- twog_in_cog.append(nog_niet_gecheckte_twog)
- cursor.execute("""UPDATE "Twog_Info" SET "Cog Nummer" = 'JA' WHERE "Eiwit ID 1" = \'"""+str(nog_niet_gecheckte_twog[0])+"""\' AND "Eiwit ID 2" = \'"""+str(nog_niet_gecheckte_twog[1])+"""\';""")
- for twogg in twog_in_cog:
- for eiwit_in_twogg in twogg:
- if eiwit_in_twogg not in gecheckte_eiwitten:
- return twogg
- return ""
- def cog_check(cog):
- """Deze functie, cog_check, checkt of een gevonden COG wel een
- 'echte' COG is. Dit gebeurd door te kijken of er 2 eiwitten uit
- hetzelfde organisme voorkomen. Wanneer dit het geval is wordt
- True terug gegeven aan de functie twogs_naar_cogs
- Return value(s):
- * True, dit wordt terug gegeven aan de functie twogs_naar_cogs
- wanneer een COG geen 'echte' COG is.
- """
- eiwitten_in_cog = []
- for twog in cog:
- eiwitten_in_cog.extend(twog)
- eiwitten_in_cog = set(eiwitten_in_cog)
- for eiwit1 in eiwitten_in_cog:
- for eiwit2 in eiwitten_in_cog:
- if eiwit1[0:6] == eiwit2[0:6] and eiwit1 != eiwit2:
- return True
- def main():
- """Deze functie, main, regeld de loop van het gehele script.
- Als eerst wordt de database aangemaakt in de functie
- database_structuur_opzetten. Hierna worden alle organismes
- en gebruikte databases namen opgeslagen in lijsten
- (organisme_lijst en database_lijst). Dan worden de proteomen
- gedownload aan de hand van de organisme_lijst. Hierna worden
- de gedownloaden proteomen per organisme samengevoegt. Daarna
- wordt het samengevoegde proteomen van de organsimen in de
- gecreerde database gezet. Er wordt geblast en TWOG's gemaakt
- en in de database gezet in de functie twogs_. De TWOG's worden
- 'vertaald' naar COG's in de functie twogs_naar_cogs. Als
- laatste wordt de verbinding met de database verbroken in
- de functie verbinding_database_stop.
- """
- conn, cursor = database_structuur_opzetten()
- organisme_lijst = ["Aspergillus_fumigatus", "Aspergillus_nidulans",
- "Aspergillus_oryzae", "Melampsora_larici-populina", "Mixia_osmundae",
- "Neurospora_crassa", "Penicillium_canescens",
- "Phanerochaete_chrysosporium", "Pleurotus_ostreatus",
- "Saccharomyces_cerevisiae"]
- database_lijst = ["NCBI", "SWISSPROT", "Ensembl", "JGI", "Trembl"]
- proteomen_downloaden(organisme_lijst)
- organisme_proteom_samenvoegen(organisme_lijst, database_lijst)
- eiwit_info_voor_database(organisme_lijst, cursor)
- twogs_(organisme_lijst, cursor)
- twogs_naar_cogs(cursor)
- verbinding_database_stop(conn, cursor)
- """Deze regel roept de main aan, en dus het gehele script."""
- main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement