suunnitteludokumentti - university of helsinki · 2004-12-10 · simco ja markertool, sekä...

51
Suunnitteludokumentti Populous Helsinki 10.12.2004 Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Upload: others

Post on 28-Jul-2020

3 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Suunnitteludokumentti - University of Helsinki · 2004-12-10 · simco ja markertool, sekä skripteistä, joilla niiden toiminta on yhdistetty. Tässä projek- tissa korvataan käytössä

Suunnitteludokumentti

Populous

Helsinki 10.12.2004

Ohjelmistotuotantoprojekti

HELSINGIN YLIOPISTOTietojenkäsittelytieteen laitos

Page 2: Suunnitteludokumentti - University of Helsinki · 2004-12-10 · simco ja markertool, sekä skripteistä, joilla niiden toiminta on yhdistetty. Tässä projek- tissa korvataan käytössä

Kurssi581260 Ohjelmistotuotantoprojekti (6 ov)

ProjektiryhmäHeli BorgMarkus HeinonenVille Luolajan-MikkolaOlli Orajärvi

AsiakasPetteri Hintsanen

JohtoryhmäJuha TainaTurjo Tuohiniemi

Kotisivuhttp://www.cs.helsinki.fi/group/populous

VersiohistoriaVersio Päiväys Tehdyt muutokset0.1 11.10.2004 Ensimmäinen versio0.2 18.10.2004 Toinen versio0.9 26.10.2004 FTR-versio1.0 7.11.2004 Lopullinen versio

Page 3: Suunnitteludokumentti - University of Helsinki · 2004-12-10 · simco ja markertool, sekä skripteistä, joilla niiden toiminta on yhdistetty. Tässä projek- tissa korvataan käytössä

i

Sisältö

1 Johdanto 1

1.1 Tuotteen tausta ja tarkoitus . . . . . . . . . . . . . . . . . . . . . . . . . 1

1.2 Dokumentin rakenne . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1

1.3 Terminologia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2

2 Järjestelmän yleiskuvaus 3

2.1 Toteutus- ja toimintaympäristö . . . . . . . . . . . . . . . . . . . . . . . 3

2.2 Ohjelmointikielet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

2.3 Rajaukset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

2.4 Ohjelmointikäytännöt . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

2.4.1 C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

2.4.2 Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

3 Arkkitehtuurikuvaus 6

3.1 Komponenttien väliset suhteet . . . . . . . . . . . . . . . . . . . . . . . 6

3.1.1 Suorittava kerros . . . . . . . . . . . . . . . . . . . . . . . . . . 7

3.1.2 Kontrollikerros . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

3.1.3 Käyttöliittymäkerros . . . . . . . . . . . . . . . . . . . . . . . . 8

3.2 Luokkien väliset suhteet . . . . . . . . . . . . . . . . . . . . . . . . . . 9

3.2.1 Luokkakaavio . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

3.2.2 Verkkokommunikaatio . . . . . . . . . . . . . . . . . . . . . . . 9

3.2.3 Palvelupyynnöt . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

3.2.4 Viestien koodaus . . . . . . . . . . . . . . . . . . . . . . . . . . 11

3.3 Ydin-komponentti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

3.3.1 Rajapinta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

3.3.2 Enumeraattorit . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

3.3.3 ICore-rajapinta . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

3.3.4 IStatusCallback-rajapinta . . . . . . . . . . . . . . . . . . . . . . 15

3.3.5 Core-luokka . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

3.3.6 CoreFactory-luokka . . . . . . . . . . . . . . . . . . . . . . . . 16

3.3.7 Parameters-luokka . . . . . . . . . . . . . . . . . . . . . . . . . 16

3.3.8 Log-luokka . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

Page 4: Suunnitteludokumentti - University of Helsinki · 2004-12-10 · simco ja markertool, sekä skripteistä, joilla niiden toiminta on yhdistetty. Tässä projek- tissa korvataan käytössä

ii

3.3.9 Globaalit määrittelyt . . . . . . . . . . . . . . . . . . . . . . . . 19

3.4 Pedigree-komponentti . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

3.4.1 Rajapinta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

3.4.2 Enumeraattorit . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

3.4.3 IPedigree-rajapinta . . . . . . . . . . . . . . . . . . . . . . . . . 21

3.4.4 Pedigree-luokka . . . . . . . . . . . . . . . . . . . . . . . . . . 22

3.4.5 PedigreeFactory-luokka . . . . . . . . . . . . . . . . . . . . . . 22

3.4.6 FamilyTree-luokka . . . . . . . . . . . . . . . . . . . . . . . . . 22

3.4.7 RecombTree-luokka . . . . . . . . . . . . . . . . . . . . . . . . 23

3.4.8 Segment-luokka . . . . . . . . . . . . . . . . . . . . . . . . . . 23

3.4.9 Individual-luokka . . . . . . . . . . . . . . . . . . . . . . . . . . 24

3.5 Marker-komponentti . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

3.5.1 Rajapinta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

3.5.2 Enumeraattorit . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

3.5.3 IMarker-rajapinta . . . . . . . . . . . . . . . . . . . . . . . . . . 25

3.5.4 Marker-luokka . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

3.5.5 MarkerFactory-luokka . . . . . . . . . . . . . . . . . . . . . . . 26

3.6 Tekstikäyttöliittymä-komponentti . . . . . . . . . . . . . . . . . . . . . . 26

3.6.1 Rajapinta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

3.6.2 CursesUI-luokka . . . . . . . . . . . . . . . . . . . . . . . . . . 27

3.7 Palvelinkomponentti . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

3.7.1 Rajapinta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

3.7.2 Server-luokka . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

3.7.3 ServerStub-luokka . . . . . . . . . . . . . . . . . . . . . . . . . 29

3.7.4 ServerJob-luokka . . . . . . . . . . . . . . . . . . . . . . . . . . 29

3.7.5 ServerClient-luokka . . . . . . . . . . . . . . . . . . . . . . . . 30

3.8 Asiakaskomponentti . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

3.8.1 Rajapinta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

3.8.2 ClientFrame-luokka . . . . . . . . . . . . . . . . . . . . . . . . 31

3.8.3 JobControl-luokka . . . . . . . . . . . . . . . . . . . . . . . . . 31

3.8.4 Job-luokka . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

3.8.5 ServerInfo-luokka . . . . . . . . . . . . . . . . . . . . . . . . . 33

3.9 Hakemistorakenne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

Page 5: Suunnitteludokumentti - University of Helsinki · 2004-12-10 · simco ja markertool, sekä skripteistä, joilla niiden toiminta on yhdistetty. Tässä projek- tissa korvataan käytössä

iii

3.10 Tiedostoformaatit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

3.10.1 pedigree . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

3.10.2 chrom . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

3.10.3 param . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36

3.10.4 server.conf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36

4 Käyttöliittymä 36

4.1 Komentorivikäyttöliittymä . . . . . . . . . . . . . . . . . . . . . . . . . 37

4.2 Ncurses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41

4.3 Graafinen käyttöliittymä (Java Swing) . . . . . . . . . . . . . . . . . . . 42

4.3.1 Käyttötapaus 1: Sokeritaudin periytymisen tutkiminen. . . . . . . 42

4.3.2 Käyttötapaus 2: Aineistoa artikkelia varten. . . . . . . . . . . . . 43

4.3.3 Käyttötapaus 3: Sokeritautigeenitutkimuksen uusiminen. . . . . . 44

4.3.4 Käyttötapaus 4: Geeniparametrien toimivuuden testaus. . . . . . . 44

4.3.5 Käyttötapaus 5: Väärät tutkimustiedot. . . . . . . . . . . . . . . . 45

4.3.6 Käyttötapaus 6: Ämmänsaaren väestön kehittyminen. . . . . . . . 45

4.3.7 Käyttötapaus 7: Siirtolaisten vaikutus Ämmänsaaren geeniperi-mään. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46

Page 6: Suunnitteludokumentti - University of Helsinki · 2004-12-10 · simco ja markertool, sekä skripteistä, joilla niiden toiminta on yhdistetty. Tässä projek- tissa korvataan käytössä

1

1 Johdanto

Tämä suunnitteludokumentti kuvaa toteutettavan Populous -populaatiosimulaatorin tekni-sen toteutuksen näkökulmasta. Suunnitteludokumentti toimii järjestelmätoteutuksen oh-jeena ja siinä kuvataan yksityiskohtaisesti järjestelmän arkkitehtuuri, komponentit, tie-tosisältö sekä toteutettavat käyttöliittymät. Suunnitteludokumentin perustana käytetäänPopulous-projektin määrittelydokumenttia 1.1.

1.1 Tuotteen tausta ja tarkoitus

Populous on syksyn 2004 aikana Helsingin yliopiston Tietojenkäsittelytieteen laitoksellaOhjelmistotuotantoprojekti -kurssin puitteissa toteutettava projekti. Projektissa tuotetaanpopulaation kehityksen simulointiin käytettävän ohjelmiston osa.

Projektin pohjana on HIIT -perustutkimusyksikössä käytössä oleva populaatiosimulaat-tori. Nykyisen populaatiosimulaattorin toiminnassa ilmenneet ongelmat ovat lähtökohta-na Populous-projektille. Simulaattori on tehty väitöskirjatyön pohjalta ja muokattu mo-neen kertaan. Nyt tämän ohjelmistotuotantoprojektin avulla halutaan selkeyttää käytössäolevaa ohjelmaa. Nykyisellään tuote koostuu neljästä erillisestä osasta: genped, chrom,simco ja markertool, sekä skripteistä, joilla niiden toiminta on yhdistetty. Tässä projek-tissa korvataan käytössä olevan ohjelmiston kaksi ensimmäistä osaa tavoitteena prosessinsuoraviivaistaminen. Lisäksi laaditaan käyttöliittymä ohjelmiston käytön helpottamiseksi.

Erilaisten geenikartoitusmenetelmien ja genomin rakenteen selvittämiseen tarkoitettujenmenetelmien testaamisessa simuloidut aineistot ovat välttämättömiä. Simulointiprosessinlähtökohtana on tyypillisesti yksi populaatioisolaatti. Populaatio koostuu pienestä joukos-ta yksilöitä, joista populaatio kasvaa annettuun loppukokoon saakka. Simulaatio jäljitteleeperusjoukon geenien periytymistä jälkeläisille ja sukupolvelta toiselle laajenemisproses-sin kuluessa.

1.2 Dokumentin rakenne

Luvussa kaksi kuvataan projektin yhteydessä toteutettavaa järjestelmää yleisesti. Yleisku-vaukseen sisältyy järjestelmän toteutus- ja toimintaympäristön selvittäminen, käytettävienohjelmointikielten määritteleminen ja toteutettavan ohjelman rajaus.

Luku kolme kuvaa toteutettavan järjestelmän arkkitehtuurin. Se sisältää yksityiskohtaisenkuvauksen kustakin järjestelmän komponentista ja niiden välisistä suhteista. Ensimmäi-nen aliluku käsittelee kamponenttien välisiä suhteita ja toinen luokkien välisiä suhteita.Aliluvut 3.3 -3.8 kuvaavat ydin, pedigree, marker, käyttöliittymä, palvelin ja asiakaskom-ponenttien rajapintoja ja luokkia.

Luvussa 4 kuvataan projektin yhteydessä toteutettavat käyttöliittymät, joita on kolme: ko-mentorivikäyttöliittymä, tekstipohjainen Ncurses -käyttöliittymä ja Javan Swing -pakkaustakäyttäen toteutettava graafinen käyttöliittymä.

Page 7: Suunnitteludokumentti - University of Helsinki · 2004-12-10 · simco ja markertool, sekä skripteistä, joilla niiden toiminta on yhdistetty. Tässä projek- tissa korvataan käytössä

2

1.3 Terminologia

Dokumentissa käytetyt termit ja lyhenteet:

Alipopulaatio: Populaatio voi jakautua useisiin populaatioisolaatteihin. Alipopulaatioi-den välillä pariutumistodennäköisyys on pienempi kuin alipopulaation sisällä.

Emäspari: Kromosomeissa sijaitsevat toisiaan vastaavat dna:n rakenneosat. (engl. base-pair).

Genomi: Perimä eli eliön tai solun sisältämä perinnöllinen informaatio.

HIIT -perustutkimusyksikkö: Tietojenkäsittelytieteen laitoksen yhteydessä toimiva Hel-singin yliopiston ja Teknillisen korkeakoulun yhteisen Helsinki Institute for Infor-mation Technology -tutkimuslaitoksen (HIIT) perustutkimusyksikkö (BRU).Yksikönkeskeisiä tutkimusalueita ovat data-analyysi, adaptiivinen laskenta ja laskennallinenneurotiede.

Iterointi: Iteroidaan, eli ajetaan koko simulaatiotyö samoilla parametreilla useita kertoja.Alatapaus Marker-iterointi.

Loppupopulaatio: Populaatiosimulaation lopussa olevan viimeisen sukupolven edusta-jat muodostavat loppupopulaation.

Marker-iterointi: Iteroidaan simulaatiotyötä, mutta otetaan Pedigree- tiedostot valmii-na, jolloin iteroidaan ainoastaan Simcoa ja Markertoolia, ts. sukupuu pysyy staatti-sena.

Markkeri: Kromosomissa paikka, jossa esiintyy yksilöiden välistä vaihtelua.

Markertool: Valmis itsenäinen binääri, joka ottaa otoksen markereita kromosomitiedos-ta käyttäen myös Simcon tulostetta apunaan. Erikoistapauksessa (vanhemmat mu-kaan otokseen -optio) tarvitaan syötteenä lisäksi viimeisen sukupolven sukupuu jatoiseksi viimeisen sukupolven kromosomitiedosto.

Ncurses: Yleisesti käytössä oleva kirjasto tekstitilaisen terminaali-ikkunan sisällön jatoimintojen määrittelyyn. Tässä projektissa NCURSES:lla on tarkoitus toteuttaa yk-sinkertainen ikkunamainen käyttöliittymä, jolla voidaan suorittaa rinnakkaista ajoalukuunottamatta samat käyttötapaukset kuin Javalla toteutettava käyttöliittymä.

Pedigree: Ohjelman komponentti, jonka vastuulla on sukupuun ja sen yksilöiden geno-tyyppien generointi (rekombinoimalla), sekä sukupolven kromosomit.

Perustajajäsen: Populaation ensimmäisen sukupolven edustaja, jonka perimästä simu-laatio lähtee liikkeelle.

Populaatio: Joukko saman lajin yksilöitä, jotka elävät samalla alueella.

Populaatioisolaatti: Eristäytynyt populaatio, jossa ei geenivaihtoa ulkopuolelta.

Page 8: Suunnitteludokumentti - University of Helsinki · 2004-12-10 · simco ja markertool, sekä skripteistä, joilla niiden toiminta on yhdistetty. Tässä projek- tissa korvataan käytössä

3

Siirtolainen: Muualta populaatioon tuleva yksilö, jonka geeniperimä poikkeaa ko. popu-laatioisolaatin perimästä.

Simco: Valmis itsenäinen binääri, joka generoi halutun määrän SNP- tai STR-markereita(kohtia geenissä, joita voidaan tarkastetella erojen varalta). Toimii itsenäisesti.

SNP -mutaatio: Lajin sisäinen, nukleotidisekvenssin tietyssä kohdassa esiintyvä vaih-telu. Muutokset tapahtuvat ainoastaan yhdessä emäsparissa.(engl. SNP = SingleNucleotide Polymorphism).

STR-markkerit: Lyhyellä peräkkäisellä kromosomijaksolla toistuvat markkerit. Vaihte-lu muodostuu jakson toistojen lukumäärästä. (engl. STR = Short Tandem Repeat).

Tekijäinvaihto: Kromosomien risteäminen jakautumisen yhteydessä. (engl. cross-over).

Tree: Pelkkä sukupuu ilman perintöainesta.

2 Järjestelmän yleiskuvaus

Tässä luvussa kuvataan toteutettava järjestelmää. Järjestelmän liittyminen nykyisin käy-tössä oleviin järjestelmän osiin on esitetty kuvassa 1.

Ohjelma muodostuu sisäisestä osasta, sekä siihen liittyvistä käyttöliittymistä ja se käyttääsimcoa ja markertoolia ulkoisina ohjelmina. Sisäinen osa vastaa sukupuu- ja geeniaineis-ton käsittelystä yhdessä ulkoisten komponenttien kanssa. Ohjelmaa voi käyttää kolmellaeri tavalla. Komentorivikäyttöliittymällä yhdellä komennolla voidaan ajaa koko simulaa-tio läpi. Tekstipohjainen curses käyttöliittymä, joka pohjautuu tekstikenttiin ja valintalis-toihin, tarjoaa komentoriviä helpomman mahdollisuuden ajaa ohjelmaa tekstipohjaisessaympäristössä. Asiakasohjelman tarkoituksena on ohjata ja hallita yhdessä tai useammassapalvelimessa ajettavia simulaatioita ja koota tulokset asiakasohjelman koneelle. Asiakas-ohjelmassa on graafinen käyttöliittymä. Kaikki käyttöliittymät toteutetaan englanninkie-lisinä.

2.1 Toteutus- ja toimintaympäristö

Koska järjestelmä suunnitellaan nimenomaan Tietojenkäsittelytieteen laitoksella toimi-van HIIT-perustutkimusyksikön käyttöön, se suunnitellaan toimimaan laitoksen Linux-käyttöympäristössä.

Asiakkaan ja palvelimen välinen kommunikaatio tehdään TCP/IP:llä. Palvelimeen on ase-tettava IP-osoitteet, joista tulevien asiakkaiden sallitaan ottaa yhteys ja suorittaa töitä,ja samoin asiakaskomponenttiin on määriteltävä käytettävien palvelimien IP-osoitteet japortit. Palvelimelle lähetetään palvelupyyntö, jonka se välittää palvelinkoneen ytimelle.

Page 9: Suunnitteludokumentti - University of Helsinki · 2004-12-10 · simco ja markertool, sekä skripteistä, joilla niiden toiminta on yhdistetty. Tässä projek- tissa korvataan käytössä

4

Kuva 1: Toteutettava järjestelmä.

Asiakas kyselee prosessin edistymistä tietyin väliajoin ja päivittää saadun tiedon käyttö-liittymäänsä.

2.2 Ohjelmointikielet

Populous ohjelmoidaan Tietojenkäsittelytieteen laitoksen Linux-ympäristössä pääasiassaC++- kielellä käyttäen sen standardikirjastoja. Poikkeuksen tähän tekevät asiakasohjelma,joka kirjoitetaan Java versiolla 1.4.2 ja tekstikäyttöliittymä, joka toteutetaan C-kieliselläNCurses- kirjastolla.

2.3 Rajaukset

Uuden populous -komponentin tulosteen on oltava markertoolin ymmärtämässä muodos-sa, jotta näitä voidaan käyttää yhdessä. Toisaalta myös markertoolin tulosteen on sovellut-tava uuden ohjelman syötteeksi. Tällä mahdollistetaan simulaation jatkaminen ottamallatuloksesta uusi otos seuraavan ajon perustajajäseniksi.

Page 10: Suunnitteludokumentti - University of Helsinki · 2004-12-10 · simco ja markertool, sekä skripteistä, joilla niiden toiminta on yhdistetty. Tässä projek- tissa korvataan käytössä

5

2.4 Ohjelmointikäytännöt

Yhteisesti sovituilla ohjelmakoodin tyylisäännöillä ja ohjelmointikäytännöillä pyritäänehkäisemään tavallisimpien virheiden syntymistä ja parantamaan koodin luettavuutta. Yh-teiset kaikkia ohjelmiston osia koskevat tyylisäännöt on lueteltu tässä luvussa, eri ohjel-mointikieliä koskevat erityissäännöt omissa aliluvuissaan.

• SisennysSisennyksessä käytetään sarkain-merkkiä. Sarkaimen kokoa välilyönteinä ei kiinni-tetä, mutta ulkoasun on oltava siisti ja yhdenmukainen neljän merkin sarkainkoolla.

2.4.1 C++

• Luokkien nimeäminenLuokkien nimessä jokainen sana alkaa isolla kirjaimella, loput kirjaimet ovat pieniä,esim. CoreFactory. Lisäksi rajapintaluokkien eteen lisätään iso kirjain ’I’, esim.’ICore’.

• Metodien nimeäminenMetodit nimetään kuten luokat.

• Paikallisten muuttujien nimeäminenKaikki muuttujan nimessä olevat sanat kirjoitetaan pienellä ja ne erotetaan toisis-taan merkillä ’_’.

• Luokan kenttien nimeäminenJulkiset luokan kentät nimetään kuten paikalliset muuttujat. Privaattien kenttien ni-meen lisätään alkuun merkki ’_’.

• LähdekooditiedostotLuokan esittely tehdään otsikkotiedostossa, jonka nimen alkuosa on sama kuin luo-kan nimi, mutta pienillä kirjaimilla. Tiedoston pääte on ’.h’, esim. ’corefactory.h’.Luokan toteutustiedosto nimetään samalla tavalla, mutta tiedoston pääte on ’.cpp’.Yleiset luokkiin kuulumattomien lähdekooditiedostojen nimet kirjoitetaan pienilläkirjaimilla ja pääte on joko ’.h’ tai ’cpp’.

• Luokan määrittelyjärjestysLuokkaa määritellessä ensimmäisenä määritellään sen julkiset ominaisuudet, ensinmetodit, sitten kentät ja lopuksi konstruktorit ja destruktori. Tämän jälkeen määri-tellään suojatut ja privaatit metodit, näissä samoin ensin metodit ja sitten kentät.

• Luokan pakolliset ominaisuudetKaikkien luokkiin on sisällytettävä vähintäänkin oletuskonstruktori, kopiokonstruk-tori, virtuaalinen destruktori ja sijoitusoperaatio; rajapintaluokkiin riittää virtuaali-sen destruktorin määrittely ja toteutus. Mikäli jokin ominaisuus halutaan estää, voi-daan se toteuttaa privaattina.

Page 11: Suunnitteludokumentti - University of Helsinki · 2004-12-10 · simco ja markertool, sekä skripteistä, joilla niiden toiminta on yhdistetty. Tässä projek- tissa korvataan käytössä

6

• Metodien const-määreetKaikissa mahdollisissa metodien ja näiden parametrien määrityksissä käytetäänconst-määrettä aina kun se vain on mahdollista. Mikäli parametriin ei metodin si-sällä tehdä muutoksia, se määritellään const-tyyppiseksi; samoin mikäli metodi eimuuta olion kenttien arvoja, se määritellään const-tyyppiseksi.

• Otsikkotiedostojen käyttöJokaiseen tiedostoon sisällytetään ainoastaan ne otsikkotiedostot, joita siinä käyte-tään. Samoin kaikki siinä käytetyt otsikkotiedostot on sisällytettävä, esim. sisälly-tyksen delegoimista toiseen otsikkotiedostoon ei tehdä. Ohjelmistoon itseensä kuu-luvat otsikkotiedostot sisällytetään ensin, vasta näiden jälkeen standardikirjastoonkuuluvat.

• Standardikirjaston käyttöOhjelmiston toteutuksessa käytetään C++:n standardikirjastoa, jonka kaikki luokatovat std-nimiavaruudessa. Kaikkiin luokkien nimiin kirjoitetaan näkyviin sen täy-dellinen nimi, eli esim. merkkijono on ’std::string’.

• Nimiavaruus PopulousKaikki luokat ja metodit toteutetaan nimiavaruuden Populous alle main-metodialukuunottamatta.

2.4.2 Java

Ohjelmiston Javalla toteutettavissa osissa käytetään Sunin julkaisemaa ’Code Conven-tions for the Java Programmin Language’-dokumentin mukaista tyyliä niiltä osin kuinne eivät ole ristiriidassa tämän projektin yleisten ohjelmointikäytäntöjen kanssa.. Ohjeetlöytyvät osoitteesta http://java.sun.com/docs/codeconv/.

3 Arkkitehtuurikuvaus

Tässä kappaleessa kuvataan toteutettavan järjestelmän arkkitehtuuri. Järjestelmän kom-ponentit ja niiden väliset suhteet on selvitetään omissa aliluvuissaan. Arkkitehtuurikaavioon esitetty kuvassa 2.

3.1 Komponenttien väliset suhteet

Ohjelmisto on jaettu hyvin itsenäisiin komponentteihin, joiden väliset rajapinnat ovatmahdollisimman yksinkertaisia. Komponenttien välinen liikenne on minimoitu. Kompo-nenttien kutsu- ja käyttöjärjestys on määrätty ja kukin komponentti on yhteydessä hie-rarkiassa ylempänä olevaan komponenttiin ainoastaan callback-rajapinnan kautta, jolloinohjelmiston suoritus etenee puumaisesti.

Page 12: Suunnitteludokumentti - University of Helsinki · 2004-12-10 · simco ja markertool, sekä skripteistä, joilla niiden toiminta on yhdistetty. Tässä projek- tissa korvataan käytössä

7

Kuva 2: Toteutettavan järjestelmän arkkitehtuuri.

Ohjelmisto voidaan jakaa kolmeen kerrokseen: suorittava kerros (Pedigree, Marker), kont-rollikerros (Ydin) ja käyttöliittymäkerros (Tekstikäyttöliittymä, Asiakas-Palvelin). Alilu-vuissa on kuvattu kunkin kerroksen tehtävä.

3.1.1 Suorittava kerros

Suorittavassa kerroksessa olevat komponentit Pedigree ja Marker tekevät varsinaisen si-mulaation eri osavaiheet. Pedigree-komponentti luo sukupuun ja siihen mahdollisesti lii-tettävät kromosomitiedot, ja Marker luo niiden ja Marker-komponentin sisällä luotujenmarkkerien pohjalta simulaation lopullisen tuloksen. Marker-komponentti tarvitsee ainasyötteekseen Pedigree-komponentin tuloksen, eli näitä komponentteja ei voida yhden si-mulaation aikana ajaa rinnakkain.

Kerroksen komponentit saavat suorittamiseen tarvittavat tiedot parametrinaan. Kompo-nentit tiedottavat työn etenemisestä niitä kutsunutta Ydin-komponenttia callback-rajapinnankautta.

Page 13: Suunnitteludokumentti - University of Helsinki · 2004-12-10 · simco ja markertool, sekä skripteistä, joilla niiden toiminta on yhdistetty. Tässä projek- tissa korvataan käytössä

8

3.1.2 Kontrollikerros

Kontrollikerros hallinnoi yhden työn suorituksen. Se ajaa suorittavan kerroksen kompo-nentit järjestyksessä Pedigree, Marker, välittää tietoa työn etenemisestä ydintä kutsuneel-le komponentille callback-rajapinnan kautta, ja työn päätyttyä huolehtii, että ylimääräisettyön ohessa luodut väliaikaistiedostot tuhotaan.

Ydin saa parametrinaan kaikki työn suorittamiseen tarvittavat arvot, ja tiedon siitä minkätyyppistä työtä ollaan suorittamassa: generoidaan ainoastaan sukupuu halutuin sukupol-vin ilman kromosomeja (#1), generoidaa sukupuut ja siihen kromosomit (#2), suoritetaansimulaatio kokonaisuudessaan (#3) tai suoritetaan ainoastaan Marker parametrina anne-tulla sukupuulla ja kromosomidatalla, mahdollisesti iteroiden (#4).

Yksinkertaisimmassa tapauksessa #1 suoritetaan ainoastaan Pedigree, ja tästäkin ainoas-taan ensimmäinen puoli. Tuloksena saadaan pelkkä sukupuu ilman kromosomitietoja.

Tapaus #2:ssa suoritetaan Pedigree kokonaisuudessaan. Tulokseksi saadaan sukupuu jakromosomitiedot.

Yleisimmässä tapauksessa #3 suoritetaan sekä Pedigree että Marker kertaalleen alustaloppuun. Tulokseksi saadaan markertool-ohjelman tuloste. Välituloksien säilytys määri-tellään parametreissa.

Tapaus #4:ssä suoritetaan ainoastaan Marker-komponentti. Tällöin Pedigree-komponentingeneroimat sukupuu- ja kromosomitiedostot annetaan parametrina, jolloin Pedigree-vaihevoidaan ohittaa. Myös iterointi on mahdolista, jolloin Marker suoritetaan samoilla para-metreilla haluttu määrä kertoja, säilyttäen jokaisen ajokerran tulokset omassa tiedostos-saan.

3.1.3 Käyttöliittymäkerros

Ohjelmaan rakennetaan kolme käyttöliittymää: teksti-, komentorivi- sekä JavapohjainenSwing-käyttöliittymä. Komentorivikäyttöliittymä ei ole interaktiivinen ja on tarkoitettuohjelman tehokkaaseen laajentamiseen ja käyttöön. Swing-käyttöliittymä on pääasialli-nen käyttöliittymä, ja se mahdollistaa etäkäytön. Tekstikäyttöliittymä rakennetaan toissi-jaiseksi käyttöliittymäksi.

Tekstikäyttöliittymästä tulee minimalistinen ja minimalistisen interaktiivinen. Ohjelmastapystytään ainoastaan terminoimaan käynnissä oleva työ sekä päivittämään sen statustie-toa näytölle, mutta ei muuta, ts. käyttöliittymä on lukkiutunut suorituksen aikana. Ajoterminoidaan control-c:llä, jolle rakennetaan erityinen käsittelijä, joka keskeyttää työnsuorituksen siististi. Ohjelma ei siis tällöin kaadu tai sammu suoraan.

Palvelinkomponenttia varten luodaan oma prosessi lyhyen vasteajan takaamiseksi. Pal-velinprosessissa palvelin ottaa vastaan uusia yhteydenottopyyntöjä asiakkailta, ylläpitäätöiden ja asiakkaiden listaa, ja käynnistää uusien töiden ajoja tarpeen mukaan. Palvelin-ja ydinprosessin välinen kommunikaatio tapahtuu putkilla, joilla ydin-prosessin päässäpalvelinkomponenttiin kuuluva olio välittää palvelimelta tulleet viestit ytimen palvelu-pyynnöiksi ja ytimeltä tulevat tilatiedot palvelinprosessille. Ytimelle prosessiraja ei näy,

Page 14: Suunnitteludokumentti - University of Helsinki · 2004-12-10 · simco ja markertool, sekä skripteistä, joilla niiden toiminta on yhdistetty. Tässä projek- tissa korvataan käytössä

9

vaan sen kannalta rajapinta on sama kuin ytimen ja esim. tekstikäyttöliittymän rajapinta.

Asiakkaan ja palvelimen välinen kommunikaatio tehdään TCP/IP-protokollaa käyttäen.Palvelimeen on asetettava IP-osoitteet, joista tulevien asiakkaiden sallitaan ottaa yhteys jasuorittaa töitä, ja samoin asiakaskomponenttiin on määriteltävä käytettävien palvelimienIP-osoitteet ja portit. Asiakas on komponenteista aina aktiivinen osapuoli, eikä palvelinlähetä asiakkaalle mitään ilman asiakkaan tekemää palvelupyyntöä.

3.2 Luokkien väliset suhteet

Tässä luvussa kuvataan luokkien välisiä suhteita. Luokkakaaviossa esitetään kaikki toteu-tettavan järjestelmän luokat. Lisäksi kuvataan luokkien välistä verkkokommunikaatiota japalvelupyyntöjä sekä viestien koodausta tarkemmin.

3.2.1 Luokkakaavio

Koko järjestelmän luokkakaavio on esitetty kuvassa 3. Luokkakaaviossa ovat ainoastaanjärjestelmän luokat, eli siitä puuttuvat globaalit main- ja sig_handler-funktiot ja globaalimuuttuja process_state. Nämä kuuluvat loogisesti Ydin-komponenttiin, ja main-funktiovoi kutsua joko Core-, CursesUI- tai Server-luokkaa.

3.2.2 Verkkokommunikaatio

Asiakkaan ja palvelimen välinen yhteys toteutetaan TCP/IP-protokollaa käyttäen. Tässäluvussa listataan palvelimen asiakkailleen tarjoamat palvelut sekä kuvataan niiden suorit-tamiseen käytettävä protokolla.

Asiakasohjelmaan määritellään käytettävien palvelimien IP-osoitteet ja portit. Samaa pal-velinta voi yhtä aikaa käyttää useampikin asiakas, mutta töitä suoritetaan rinnakkain vainkorkeintaan palvelimessa määritelty määrä. Suoritusta odottavat työt palvelin asettaa jo-noon, josta niitä haetaan suoritettavaksi saapumisjärjestyksessä.

Kaikissa palvelupyynnöissä lähettää asiakas palvelimelle viestin, johon palvelin vastaavälittömästi. Palvelupyyntöjen kuvaukset ovat muodossa, jossa ensimmäisenä on palve-lun nimi, sen jälkeen palvelimelle lähetettävät parametrit ja kaksoispisteen jälkeen palve-limelta saadut tulokset.

3.2.3 Palvelupyynnöt

QUEUELEN : <int> Tällä palvelupyynnöllä asiakas voi selvittää palvelimen kuormi-tusasteen. Palautettu arvo on jonossa tai suorituksessa olevien töiden lukumäärä.Mikäli jonossa ei ole paikkoja vapaana eikä enempiä töitä voide heti käynnistääsuoritettavaksi, on paluuarvo -1.

Page 15: Suunnitteludokumentti - University of Helsinki · 2004-12-10 · simco ja markertool, sekä skripteistä, joilla niiden toiminta on yhdistetty. Tässä projek- tissa korvataan käytössä

10

Kuva 3: Toteutettavan järjestelmän luokkakaavio

START <parametrit> : <ID> Työ luodaan tällä palvelupyynnöllä. Paluuarvona asiakassaa avaimen, jolla se voi viitata myöhemmissä palvelupyynnöissä oikeaan työhön.Työ käynnistetään heti kun palvelimella vapautuu paikka. Virhetilanteessa paluuar-vo on negatiivinen.

QUEUEPOS <ID> : <int> Mikäli parametrina annettu työ on ajossa, annetaan paluuar-vona 0. Jos se on vielä jonossa odottamassa ajoa, annetaan työn sijainti jonossa.Mikäli työtä ei löydy, palautetaan -1.

READY <ID> : <int> Tällä palvelupyynnöllä asiakkaan on aika ajoin tarkistettava työnedistyminen. Jos työtä ei olla vielä aloitettu, on paluuarvona 0. Valmiin työn koh-dalla paluuarvo on 100, ja mikäli työn suoritus on vielä kesken, on paluuarvo jokinkokonaisluku välillä 1-99. Virhetilanteessa paluuarvo on -1. Onnistuneen suorituk-sen aikana palautettava arvo ei ole koskaan pienempi kuin aikaisemmalla kerralla

Page 16: Suunnitteludokumentti - University of Helsinki · 2004-12-10 · simco ja markertool, sekä skripteistä, joilla niiden toiminta on yhdistetty. Tässä projek- tissa korvataan käytössä

11

saatu arvo. Paluuarvoa voidaan siten käyttää käyttöliittymässä suoraan prosenttiar-vona työn suorituksen etenemisestä.

RESULTS <ID> : <tulokset> Kun palvelupyyntö READY on palauttanut arvon 100,voidaan tällä palvelupyynnöllä hakea työn tulokset. Kun tulokset on toimitettu,poistetaan tulokset palvelimelta. Samoin asiakkaan ja palvelimen välisen yhteydenkatkeaminen poistaa mahdolliset tulokset.

KILL <ID> : <boolean> Työn voi keskeyttää tai perua tällä palvelupyynnöllä. Jos työtäei ole vielä suoritettu, se joko keskeytetään ja kaikki sen väliaikaistiedot tuhotaantai se poistetaan jonosta. Valmistuneen työn kohdalla tulokset poistetaan.

STATUS : <tietoa> Palauttaa yleistä tilatietoa työn vaiheesta, käytetään ainoastaan vir-heiden etsimiseen. Palautettu arvo on kuvaava merkkijono, jonka varsinaista muo-toa ei määritellä. . . .

3.2.4 Viestien koodaus

Palvelupyyntöjen viestit koodataan seuraavan määritelmän mukaan. Määritelmässä käy-tetyt symbolit on merkattu <> väliin. Jokaisen symbolin määritelmässä ::= oikealla puo-lella oleva arvo on symbolin sisältö, vaihtoehtoiset sisällöt on eritelty merkillä |. Saman-tyyppisen symbolin moninkertaa merkitään merkillä *, jolloin sitä edeltävää symbolia voimielivaltainen määrä.

Jokainen symboli voidaan lukea auki siten, että kaikki sen määritelmässä olevat symbolitkorvataan niiden määritelmällä, ja toistaen sama kaikille symboleille kunnes jäljellä onvain vakioita tai selkokielinen selitys sisällöstä. #-merkin jälkeen oleva teksti on vapaa-muotoinen tekstiselitys, jolla tarkennetaan symbolin merkitystä ja luonnetta.

Merkkivakiot on merkitty yksinkertaisten lainausmerkkien väliin ja ovat tyypiltään <char>.

<request> ::= <req_queuelen> | <req_start> | <req_queuepos> | <req_ready> | <req_results>| <req_kill> | <req_status>

<req_queuelen> ::= ’L’

<req_start> ::= ’S’ <params>

<req_queuepos> ::= ’P’ <id>

<req_ready> ::= ’R’ <id>

<req_results> ::= ’G’ <id>

<req_kill> ::= ’K’ <id>

<req_status> ::= ’D’ <id>

<reply> ::= <rep_queuelen> | <rep_start> | <rep_queuepos> | <rep_ready> | <rep_results>| <req_kill> | <req_status>

Page 17: Suunnitteludokumentti - University of Helsinki · 2004-12-10 · simco ja markertool, sekä skripteistä, joilla niiden toiminta on yhdistetty. Tässä projek- tissa korvataan käytössä

12

<rep_queuelen> ::= ’L’ <int32>

<rep_start> ::= ’S’ <id>

<rep_queuepos> ::= ’P’ <int32>

<rep_ready> ::= ’R’ <int32>

<rep_results> ::= ’G’ <results>

<rep_kill> ::= ’K’ <boolean>

<rep_status> ::= ’D’ <data>

<params> ::= <data> # data sisältää parametrilistan parametritiedoston muodossa (kts.3.10.3)

<results> ::= <ldata> # data sisältää tiedostot koodattuna samoin kuin parametritiedos-tossa (kts. 3.10.3)

<data> ::= <length> <char>*

<length> ::= <uint32>

<id> ::= <uint32>

<int32> ::= 32-bittinen etumerkillinen kokonaisluku, big-endian-muodossa

<uint32> ::= 32-bittinen etumerkitön kokonaisluku, big-endian-muodossa

<char> ::= 8-bittinen merkki ASCII-merkistössä

<boolean> ::= 8 bittiä; 00000001 = true, 00000000 = false

Esimerkiksi palvelupyynnön READY ensimmäinen viesti olisi merkki ’R’ ja 32- bittinenetumerkitön kokonaisluku, jonka arvo on työn ID; yhteensä 40 bittiä. (Luetaan määri-telmästä: <request> -> <req_ready> -> char-’R’ <id> -> char-’R’ <uint32> -> char-’R’32-bittinen etumerkitön kokonaisluku, big-endian-muodossa.) Vastaava paluuviesti olisimerkki ’R’ ja 32-bittinen etumerkillinen kokonaisluku, jonka arvo on työn edistymistäkuvaava luku; samoin 40 bittiä.

3.3 Ydin-komponentti

Ydin on koko ohjelman toimintaa koordinoiva ja ohjaava komponentti. Ydin saa vieste-jä joko suoraan käyttäjältä (komentorivikäyttöliittymä), tekstipohjaiselta käyttöliittymältätai Palvelin-komponentilta, jota asiakasohjelma käyttää verkon yli.

Page 18: Suunnitteludokumentti - University of Helsinki · 2004-12-10 · simco ja markertool, sekä skripteistä, joilla niiden toiminta on yhdistetty. Tässä projek- tissa korvataan käytössä

13

Kuva 4: Ydin-komponentin luokat.

Ydin toimii välikerroksena käyttäjän ja simulaation suorittavien komponenttien välis-sä. Ydin ohjaa Pedigree- ja Marker-komponentin käyttöä, sekä välittää tietoa käyttäjällekäyttöliittymän kautta ja poistaa väliaikaisia tiedostoja ja ylläpitää tiedon välitystä.

Ydin-komponenttiin on myös sisällytetty globaalit luokat Parameters ja Log, sekä kaikki

Page 19: Suunnitteludokumentti - University of Helsinki · 2004-12-10 · simco ja markertool, sekä skripteistä, joilla niiden toiminta on yhdistetty. Tässä projek- tissa korvataan käytössä

14

mahdolliset globaalit funktiot ja muuttujat. Perusteena tälle on, että Ydin-komponentinkatsotaan olevan keskeisin osa sovellusta.

Ytimen luokat ja näiden väliset suhteet on esitetty kuvassa 4.

3.3.1 Rajapinta

Ydin tarjoaa palveluita tekstikäyttöliittymälle ja palvelimelle. Ydin sisältää simulaationajojen hallinnan, koordinoinnin, lokin, virhetilanteiden hallinnan ja delegoinnin ohjel-man sisällä sekä tulosten ja tulosteiden ohjaamisen käyttäjälle. Ytimen on tarkoitus pii-lottaa mahdollisimman paljon populaatiosimulaatioteknisistä asioista ja tarjota keskite-tysti esim. parametrien parseroinnin, validoinnin (Parameters-luokka) ja simulaatiokom-ponenttien kutsun (Core-luokka).

Tyypillisessä simulaatiokäyttötapauksessa käyttäjä antaa käyttöliittymän kautta halututparametrit. Käyttöliittymä syöttää parametrit Parameters-olioon, joka annetaan ytimelle.Parameters-luokka parsii syötteet ja tarkistaa niiden arvoalueet ja eheyden. Ydin määrit-tää parametrien pohjalta simulaatiotyön. Tämän takia ydin tarjoaa käyttöliittymille hy-vin pelkistetyn rajapinnan, joka koostuu pääasiassa parametrien vastaanottamisesta. Näinkäyttöliittymät voidaan erottaa simulaatiosta ja sen toteutuksesta mahdollisimman tehok-kaasti.

• int RunSimulation(TSimType type, Parameters params)Luovutetaan parametrijoukko ytimelle suoritusta varten. Parametri type määritteleeminkä tyyppinen simulaatio halutaan suorittaa. Määritellään rajapinnassa ICore.

• int main(int argc, char *argv[])Ohjelmiston globaali pääfunktio. Tätä kutsutaan ensimmäiseksi kun ohjelma käyn-nistetään komentoriviltä. Tunnistaa parametreista halutaanko ohjelmaa ajaa palve-limena, tekstikäyttöliittymänä vai suoraan suorittaa simulaatio, ja käynnistää senmukaisen komponentin, josta ohjelman suoritus varsinaisesti alkaa.

• void Update(TStatus status)Callback-metodi, jolla Pedigree- ja Marker-komponentit lähettävät tietoa edistymi-sestään. Määritellään rajapinnassa IStatusCallback.

3.3.2 Enumeraattorit

• TStatusKuvaa simulaatiotyön tilaa. Mahdolliset arvot ovat:INIT = työtä ei vielä aloitettu,TREE = sukupuu luotu,PEDIGREE = kromosomit luotu sukupuuhun,MARKER = markkerit luotu,READY = työ valmis

Page 20: Suunnitteludokumentti - University of Helsinki · 2004-12-10 · simco ja markertool, sekä skripteistä, joilla niiden toiminta on yhdistetty. Tässä projek- tissa korvataan käytössä

15

Koodi Selitys-1 Määrittelemätön virhe-2 Tiedoston lukuvirhe (käyttöoikeus)-3 Tiedoston lukuvirhe (muu)-4 Tiedoston kirjoitusvirhe (käyttöoikeus)-5 Tiedoston kirjoitusvirhe (muu)

Taulukko 1: ICore::RunSimulation()-virhekoodit

• TProcessStateKuvaa prosessin tilaa. Mahdolliset arvot ovat:INIT = alkutila,FORK = prosessin haarautuminen käynnissä,SERVER = palvelinprosessi,NCURSES = tekstikäyttöliittymä,CORE = prosessi suorittaa simulaatiota

• TSimTypeKuvaa simulaation tyyppiä. Mahdolliset arvot ovat:FULL = täysi ajo alusta loppuun,TREE = luodaan pelkkä sukupuu Pedigree-komponentissa,PEDIGREE = ajetaan vain Pedigree-komponentti,PROCESS = suoritetaan pelkkä Marker-komponentti valmiille sukupuulle

3.3.3 ICore-rajapinta

ICore on ydinkomponentin kutsurajapinta.

Metodit

• public int RunSimulation(TSimType type, Parameters &params)Metodilla käynnistetään simulaation suoritus. Onnistuneen suorituksen yhteydessäpaluuarvo on 0, virhetilanteessa negatiivinen. Virhekoodit on lueteltu taulukossa 1.

3.3.4 IStatusCallback-rajapinta

IStatusCallback luo rajapinnan, jolla välitetään tietoa työn edistymisestä kutsuneelle ta-holle.

Metodit

• public virtual void Update(TStatus status)Callback-metodilla, jolla kontrolli voidaan siirtää hetkeksi työn suorituksesta hie-rarkiassa ylemmälle kerrokselle. Parametri status on enumeraattorityyppiä TStatus.

Page 21: Suunnitteludokumentti - University of Helsinki · 2004-12-10 · simco ja markertool, sekä skripteistä, joilla niiden toiminta on yhdistetty. Tässä projek- tissa korvataan käytössä

16

3.3.5 Core-luokka

Core on Ydin-komponentin pääluokka. Core hoitaa töiden koordinoinnin ja jakaa annet-tujen parametrien mukaan tehtävät Pedigree- ja Marker- komponenteille.

Metodit

• public int RunSimulation(TSimType type, Parameters &params)Ajaa simulaation. Saa syötteenään valmiin ja tarkistetun Parameters- olion. Para-metri type on enumeraattorityyppiä TSimType ja määrittelee simulaation tyypin.antaen

3.3.6 CoreFactory-luokka

CoreFactory on tehdasolio, jolla luodaan ICore-tyyppisiä olioita.

Metodit

• public static ICore* Construct()Luo ICore-tyyppisen olion. Varsinaisen toteuttavan luokan valinta tehdään metodinsisällä. Virhetilanteessa palautetun osoittimen arvo on 0.

3.3.7 Parameters-luokka

Parameters-luokka kapseloi ohjelman parametrit. Se luodaan ja täytetään käyttöliittymä-tasolla ja annetaan ytimelle simulaation suoritusta varten. Komentoriviltä käytettäessäkäyttöliittymätaso on ydin itse, jolloin se kontruoidaan siellä. Se ei varsinaisesti kuuluYdin-komponenttiin, vaan kulkee suorituksen mukana komponentista toiseen.

Parameters-olion voi konstruoida joko käyttämällä kontruktoria, joka saa syötteenäänchar-merkkijonotaulukossa kaikki parametrit (komentoriviltä ja palvelimesta) tai attribuu-tit voi täyttää itse (tekstikäyttöliittymä). Luonnin jälkeen tulee kutsua Check-metodia, jo-ka tarkistaa parametri-olion parametrit.

Parameters-oliossa kaikilla kentillä on asetettuna arvo, jota käytetään. Oletusarvoja käy-tettäessä on Parameters-oliota luovan metodin tehtävä asettaa nämä arvot oikein.

Metodit

• public int Check(TSimType type)Tarkistaa parametrina saamansa tyypin perusteella siihen liittyvien parametrien ar-vojen oikeellisuuden ja funktionaalisen eheyden.

Metodin paluuarvo on onnistuneella suorituksella 0 ja virhetilanteessa negatiivinen.Virhekoodit on listattu taulukossa 2.

Page 22: Suunnitteludokumentti - University of Helsinki · 2004-12-10 · simco ja markertool, sekä skripteistä, joilla niiden toiminta on yhdistetty. Tässä projek- tissa korvataan käytössä

17

Koodi Selitys-1 Määrittelemätön virhe-2 Arvoaluevirhe jossakin parametrissa-3 Kaikkia vaadittuja parametreja ei asetettu-4 Ristiriita parametreissa

Taulukko 2: Parameters::Check()-virhekoodit

Metodin parametri type on enumeraattorityyppiä TSimType.

• public Parameters(char **argv)Konstruktori, jonka paramtrina saa ohjelmiston komentoriviparametrit ilman en-simmäistä, ohjelman ajotiedoston sisältävää kenttää. Konstruktori pyrkii löytämäänmerkkijonoista kaikki mahdolliset määritellyt parametrit ja asettamaan arvonsa senmukaisesti. Virhetilanteissa osa arvoista jää asettamatta, ja oliota luovan onkin kut-suttava Check-metodia vielä tämän jälkeen varmistaakseen luonnin onnistumisen jaettä kaikki tarvittavat parametrit oli määritelty.

Attribuutit

Parameters-luokan attribuutit on listattu taulukossa 3.

Parametrit tarkistetaan Check-metdissa simulaatiomoodin mukaan. Moodit:1 = TREE2 = PEDIGREE3 = FULL4 = MARKER

Kustakin parametrista on mainittu, tarkistetaanko se tietyssä moodissa. Vain yhden moo-din parametrit tarkistetaan, muista ei välitetä.

3.3.8 Log-luokka

Log on ohjelmiston lokitiedostoon kirjoittamiseen tarkoitettu luokka. Jokaisella lokirivilläon rivin tyyppi, jotka ovat vakavimmasta vähiten vakavaan Critical, Error, Info ja Debug,sekä vapaamuotoinen, mutta yksirivinen tekstiselitys. Lokitiedosto kirjoitetaan hakemis-toon, josta ohjelmisto on suoritettu.

Log on Singleton-tyyppinen olio, josta luodaan tasan yksi ilmentymä prosessia kohti.

Metodit

• public static Log& GetInstance(bool debug = false)Palauttaa Log-olion. Luo tarvittaessa uuden Log-olion. Debug-tilan voi asettaa pääl-le ainoastaan ensimmäisellä kutsukerralla, eikä sitä voi kesken ohjelman suorituk-sen asettaa pois päältä.

Page 23: Suunnitteludokumentti - University of Helsinki · 2004-12-10 · simco ja markertool, sekä skripteistä, joilla niiden toiminta on yhdistetty. Tässä projek- tissa korvataan käytössä

18

Tyyppi Muuttuja (1,2,3,4 =pakollinen)

Sallittu arvoa-lue

Tarkistushuomioita

bool saveTreesbool savePedigreesstring loadPedigree (4) Tarkistetaan, että tiedosto on olemassa.bool debugint founders (123) 2-nint lastGenSize (123) 2-nint generations (123) 1-nint iterations 1-n Vakio-arvo 1.bool pedigreeOnce Ei vaikutusta, jos iterations 1vector<int> saveGenerations 1-generationsint subPops 1-n Vakio-arvo 1. Tulee antaa kaikki 3 subPop- parametria.vector<int> subPopSizes 2-founders Määrä täsmättävä edelliseen.double[][] subPopMigrations 0.0-1.0,

sum=1.0Sekä korkeus että leveys oltava subPops. Joka rivinsumma 1.0. Ei korjata taulukkoa, jos siinä virheitä.

double diseaseMutFreq (34) 0.0-1.0double minMinorAlleleFreq

(34)0.0-1.0

double prevalence (34) 0.0-1.0double penetrance (34) 0.0-1.0int markers (34) 1-nint sampleType (34) 1-4bool markerMapstring markerMapFile Huomoidaan vain jos edellinen true.bool reportstring reportFile Huomioidaan vain jos edellinen true.string simcoFilestring chromFilebool parentsInResultstring treeFilestring parPedigreeFilebool allowSiblings Huomioimatta jos ei parents ei asetettu.int sampleSize (34) 0-nint effectivePopSize

(34)2-n

int chromLength (34) 2-ndouble recombRate (34) 0.0-1.0double snpRate (34) 0.0-1.0 Ei STR ja SNP:tä yhtäaikaa. Jos ovat molemmat ->

virhe, ei korjata.string strFile Tarkistetaan olemassaolo.

Taulukko 3: Parameters muuttujat

Page 24: Suunnitteludokumentti - University of Helsinki · 2004-12-10 · simco ja markertool, sekä skripteistä, joilla niiden toiminta on yhdistetty. Tässä projek- tissa korvataan käytössä

19

• public void LogCritical(string msg)Lisää lokitiedostoon parametrina saadun viestin kriittinen-statuksella.

• public void LogError(string msg)Lisää lokitiedostoon parametrina saadun viestin virhe-statuksella.

• public void LogInfo(string msg)Lisää lokitiedostoon parametrina saadun viestin info-statuksella.

• public void LogDebug(string msg)Lisää lokitiedostoon parametrina saadun viestin debug-statuksella. Rivi lisätäänvain mikäli attribuutti debug on asetettu arvoon true.

Attribuutit

• private Log instanceSisäinen olio, jonka kaikki luokkaa käyttävät jakavat. Tuhotaan vasta ohjelman suo-rituksen päättyessä.

• private bool debugMäärittelee kirjoitetaanko debug-rivit tiedostoon.

• private string logfileLokitiedosto, johon lokirivit kirjoitetaan.

3.3.9 Globaalit määrittelyt

Globaalit funktiot ja muuttujat eivät kuulu mihinkään luokkaan, vaan näkyvät kaikilleniitä käyttäville sellaisenaan.

Funktiot

• int main(char* args[])Main-metodi. Metodi ajetaan ensimmäisenä kun ohjelma käynnistetään komento-riviltä. Metodissa tehdään yksinkertaistettu parametrien tarkistus, jonka pohjalta sejoko käynnistää palvelimen (parametri –start-server), käynnistää tekstikäyttöliitty-män (ei parametreja) tai aloittaa simulaation suorituksen (kaikissa muissa tapauk-sissa). Lopullinen simulaation parametrien tarkistus tehdään Parameters-luokan si-säisessä metodissa Check. Parametrien konstruointiin tarjotaan Parameters-luokankonstruktoria.

• void sig_handler(int sig)Signaalinkäsittelijä, jossa määritellään mitä tehdään kun prosessi saa UNIX- sig-naalin. Käyttäytyminen riippuu suurelta osin globaalista muuttujasta process_state.

Page 25: Suunnitteludokumentti - University of Helsinki · 2004-12-10 · simco ja markertool, sekä skripteistä, joilla niiden toiminta on yhdistetty. Tässä projek- tissa korvataan käytössä

20

Muuttujat

• TProcessState process_stateMuuttujalla määritellään missä tilassa ja minkä tyyppinen senhetkinen prosessi on.Tällä kontrolloidaan lähinnä signaalinkäsittelijän toimintaa, koska esim. palveli-men, käynnissä olevan työn ja tekstikäyttöliittymän yhteydessä samakin signaalipitää voida tulkita eri tavalla. Muuttuja on enumeraattori-tyyppiä TProcessState.

3.4 Pedigree-komponentti

Kuva 5: Pedigree-komponentin luokat.

Pedigree korvaa ja yhdistää vanhan järjestelmän genpedin ja chromin. Pedigree tuottaa ha-lutut sukupuutiedostot (iteration_pedigree_generation) ja kromosomitiedostot sukupol-vittain (iteration_chrom_generation).

Vakiona mitään pedigree-komponentin tulosteita ei säilytetä simulaation ajon jälkeen, elisitten kun markertool on käynyt ne läpi. Tulosteiden poistoa ei toteuteta Pedigreehen vaan

Page 26: Suunnitteludokumentti - University of Helsinki · 2004-12-10 · simco ja markertool, sekä skripteistä, joilla niiden toiminta on yhdistetty. Tässä projek- tissa korvataan käytössä

21

Koodi Selitys-1 Määrittelemätön virhe-2 Tiedoston lukuvirhe (käyttöoikeus)-3 Tiedoston lukuvirhe (muu)-4 Tiedoston kirjoitusvirhe (käyttöoikeus)-5 Tiedoston lukuvirhe (muu)

Taulukko 4: IPedigree::GeneratePedigree()-virhekoodit

se tapahtuu muualla. Option takana on mahdollisuus tallettaa käytetyt sukupuu- ja kromo-somitiedostot, sekä mahdollisuus generoida ja säilyttää ylimääräisiä sukupolvitiedostoja.

Pedigree-komponentin luokat ja näiden väliset suhteet on esitetty kuvassa 5.

3.4.1 Rajapinta

Pedigree-komponentin rajapinta tarjoaa yhden metodin sukupuun ja kromosomien luo-mista varten. Se mitä kullakin suorituskerralla luodaan määräytyy parametreista.

• int GeneratePedigree(TPedigreeType type, Parameters& params)Generoidaan parametreissä määritellyt asiat. Ensimmäisellä parametrilla voidaanjättää kromosomit generoimatta. TPedigreeType on enumeraattori, joka kertoo suo-rituksen tyypin.

3.4.2 Enumeraattorit

• TPedigreeTypeKuvaa Pedigree-komponentin suorituksen tyypin. Mahdolliset arvot ovat:FULL = täysi ajo,TREE = vain sukupuu

3.4.3 IPedigree-rajapinta

IPedigree on Pedigree-luokan rajapinta ytimelle.

Metodit

• virtual int GeneratePedigree(TPedigreeType, Parameters&)Core-luokalle näkyvä rajapintametodi. Toteutus aliluokassa. Palauttaa onnistues-saan arvon 0, virhetilanteessa negatiivisen arvon. Virhekoodit on listattu taulukossa4.

Page 27: Suunnitteludokumentti - University of Helsinki · 2004-12-10 · simco ja markertool, sekä skripteistä, joilla niiden toiminta on yhdistetty. Tässä projek- tissa korvataan käytössä

22

3.4.4 Pedigree-luokka

Pedigree luo sukupuut ja vastaa niiden tallennuksesta.

Metodit

• public int GeneratePedigree(TPedigreeType, Parameters&)GeneratePedigree on implementaatio rajapintaluokan metodille. Metodi ottaa para-metriksi TPedigreeType-enumin ja Parameters-luokan, jotka kertovat missä moo-dissa ohjelmaa ajetaan ja sisältävät tarvittavat parametrit ajoa varten. Metodi luoluokan sisäiset oliot, FamilyTree ja RecombTree, joissa tapahtuu varsinainen suku-puun ja kromosomien prosessointi. Töiden välillä metodi palauttaa tilatietoa IStatusCallback-luokan Update(...)-metodin kautta.

Attribuutit

• private FamilyTree theFamilytreePelkkä sukupuu

• private RecombTree theRecombTreeRekombinaatiot sisältävä luokka

3.4.5 PedigreeFactory-luokka

PedigreeFactory on staattinen tehdasluokka, joka luo instanssin Pedigree- luokasta ja pa-lauttaa osoittimen siihen.

Metodit

• public static IPedigree* Construct()Metodi luo Pedigree-instanssin ja palauttaa sen osoittimen kutsujalle.

3.4.6 FamilyTree-luokka

FamilyTree on sukupuun sisältävä luokka. Kaikki sukupuun prosessointi, tallennus ja tu-lostus tapahtuu tässä luokassa.

Metodit

• public int Create(Parameters&)Luo parametreissa määritellyn kaltaisen sukupuun.

Page 28: Suunnitteludokumentti - University of Helsinki · 2004-12-10 · simco ja markertool, sekä skripteistä, joilla niiden toiminta on yhdistetty. Tässä projek- tissa korvataan käytössä

23

• public int WriteToDisk()Kirjoittaa sukupuun sisällön tiedostoon sukupolvi kerrallaan.

• public int WriteToScreen()Tulostaa sukupuun tiedot ruudulle.

Attribuutit

• private vector<Individual> treeDataTietorakenne sukupuuta varten.

3.4.7 RecombTree-luokka

RecombTree on luokka, joka sisältää tiedot kromosomeista ja rekombinaatioista.

Metodit

• public int Create(FamilyTree&, Parameters&)Luo kromosomidatan sukupuun ja parametrien perusteella.

• public int WriteToDisk()Kirjoittaa kromosomidatan tiedostoon.

• public int WriteToScreen()Tulostaa kromosomidatan ruudulle.

Attribuutit

• private vector<Segment> recombDataTietorakenne rekombinaatiotietoa varten.

3.4.8 Segment-luokka

Segment on säiliöluokka kromosomidatalle. Luokka on RecombTree-luokan apuluokka.

Attribuutit

• Attribuutit kiinnitetään toteutusvaiheessa.

Page 29: Suunnitteludokumentti - University of Helsinki · 2004-12-10 · simco ja markertool, sekä skripteistä, joilla niiden toiminta on yhdistetty. Tässä projek- tissa korvataan käytössä

24

3.4.9 Individual-luokka

Individual on säiliöluokka yksilötiedolle. Luokka on FamilyTree-luokan apuluokka.

Attribuutit

• Attribuutit kiinnitetään toteutusvaiheessa.

3.5 Marker-komponentti

Kuva 6: Marker-komponentin luokat.

Marker on yhteinen rajapintakomponentti markertoolille ja simcolle. Marker toimii em.ohjelmien ajurina, joka virtaviivaistaa niiden käyttöä ytimelle ja mahdollistaa ohjelmanlaajennettavuuden.

Marker-komponentin luokat ja näiden väliset suhteet on esitetty kuvassa 6.

3.5.1 Rajapinta

Marker-komponentin rajapinta sisältää yhden metodin, jonka kautta käytetään simco- jamarkertool-komponentteja. Yksityiskohdat sisältyvät parametreihin.

Page 30: Suunnitteludokumentti - University of Helsinki · 2004-12-10 · simco ja markertool, sekä skripteistä, joilla niiden toiminta on yhdistetty. Tässä projek- tissa korvataan käytössä

25

Koodi Selitys-1 Määrittelemätön virhe-2 Tiedoston lukuvirhe (käyttöoikeus)-3 Tiedoston lukuvirhe (muu)-4 Tiedoston kirjoitusvirhe (käyttöoikeus)-5 Tiedoston lukuvirhe (muu)

Taulukko 5: IMarker::Process()-virhekoodit

• int Process(TMarkerType type, Parameters params&)Ajetaan Simco ja Markertool halutuin parametrein.

3.5.2 Enumeraattorit

• TMarkerTypeKuvaa Marker-komponentin suorituksen tyypin. Mahdolliset arvot ovat:MARKER_NORMAL = normaali ajo,MARKER_WPAR = vanhemmat mukana otoksessa

3.5.3 IMarker-rajapinta

IMarker on Marker-luokan rajapinta ytimelle.

Metodit

• public int Process(TMarkerType type, Parameters &params)Core-luokalle näkyvä rajapintametodi. Toteutus aliluokassa. Onnistuessaan metodipalauttaa arvon 0, virhetilanteessa negatiivisen arvon. Virhekoodit on lueteltu tau-lukossa 5.

3.5.4 Marker-luokka

Marker-luokka toimii rajapintana Ytimen ja Simcon sekä Markertoolin välillä.

Metodit

• public int Process(TMarkerType type, Parameters &params)Luokan ainoa metodi. TMarkerType-enumeraattori määrittelee ajotavan, Parameters-luokka sisältää parametrit simcolle ja markertoolille. Ensin ajetaan Simco ja sen jäl-keen Markertool, molemmat ajetaan aina. Metodi käynnistää ulkoiset ohjelmat uu-teen prosessiin ja jää odottamaan lopetussignaalia. Parametrit on validoitu jo ennen

Page 31: Suunnitteludokumentti - University of Helsinki · 2004-12-10 · simco ja markertool, sekä skripteistä, joilla niiden toiminta on yhdistetty. Tässä projek- tissa korvataan käytössä

26

ulkoisten ohjelmien ajamista, mutta jos virhetilanne kuitenkin syntyy, palautetaannegatiivinen arvo. Onnistuessaan metodi palauttaa arvon 0. Töiden välillä metodipalauttaa tilatietoa IStatusCallback-luokan Update(...)- metodin kautta.

3.5.5 MarkerFactory-luokka

MarkerFactory on staattinen tehdasluokka, joka luo instanssin Marker- luokasta ja palaut-taa osoittimen siihen.

Metodit

• public static IMarker* Construct()Metodi luo Marker-instanssin ja palauttaa sen osoittimen kutsujalle.

3.6 Tekstikäyttöliittymä-komponentti

Kuva 7: Tekstikäyttöliittymäkomponentin luokat.

Tekstikäyttöliittymä pohjautuu ncurses-kirjastoon. Käyttäjä määrittelee parametrit, joidenperusteella komponentti kutsuu ydintä. Ydin tarjoaa tietoa simulaation etenemisestä, jokanäytetään käyttäjälle. Lopputuloksia ei visualisoida, ainoastaan talletetaan annettuun taivakiohakemistoon.

Tekstikäyttöliittymäkomponentin luokat on esitetty kuvassa 7.

3.6.1 Rajapinta

• void Update(TStatus status)Metodi, jonka avulla päivitetään ruudulle tilatietoa ohjelman edistymisestä aina jon-kin osasuorituksen valmistuttua.

Page 32: Suunnitteludokumentti - University of Helsinki · 2004-12-10 · simco ja markertool, sekä skripteistä, joilla niiden toiminta on yhdistetty. Tässä projek- tissa korvataan käytössä

27

• void StartUI()Käynnistää tekstikäyttöliittymän.

3.6.2 CursesUI-luokka

CursesUI on luokka, joka vastaa kaikista tekstikäyttöliittymän toiminnoista. Käyttöliitty-mä rakennetaan käyttäen ncurses-kirjaston tarjoamia toimintoja. Simulaation käynnistyt-tyä tilatietoa päivitetään IStatusCallbackin Update(...)-metodin kautta. Koska käyttöliitty-mälle ei luoda omaa prosessia, simulaation aikana käyttäjälle ei tarjota muita toimintojakuin simulaation keskeyttäminen.

Metodit

• void Update(TStatus status)Ytimelle tarjottava metodi, jolla voidaan päivittää käyttöliittymää laskennan ku-luessa tarjoamalla käyttöliittymälle kontrolli pieneksi hetkeksi. Määritellään raja-pinnassa IStatusCallback.

• void StartUI()Käynnistää tekstikäyttöliittymän. Ydin kutsuu tätä metodia main-metodistaan, josohjelmisto käynnistetään ilman komentoriviparametreja.

Attribuutit

Kiinnitetään toteutusvaiheessa

3.7 Palvelinkomponentti

Komentoriviltä käynnistettävä palvelin ottaa vastaan palvelupyyntöjä asetetusta portista.Lisäksi palvelimelle määritellään IP-osoitteet, joista palvelupyynnöt tulee sallia; muualtatulleet palvelupyynnöt hylätään.

Palvelin pitää kirjaa asiakkaista ja suorittaa saatuja töitä ytimellä. Useampi kuin yksi asia-kas voi olla yhtäaikaa yhteydessä palvelimeen, jolloin ruuhkautumisen välttämiseksi pal-velimen on osattava tarvittaessa laittaa töitä jonoon odottamaan suoritusvuoroaan. Palve-limeen asetetaan kerrallaan suorituksessa olevien töiden suurin sallittu lukumäärä.

Palvelin ei kommunikoi aktiivisesti asiakkaan suuntaan, vaan ainoastaan vastaa palvelu-pyyntöihin. Sen sijaan ytimen suuntaan palvelinkomponentti on aktiivinen osapuoli. Mi-käli palvelin sammutetaan tai siellä tapahtuu muu kriittinen virhe, joka aiheuttaa sen sam-muttamisen, suljetaan asiakkaan ja palvelimen välinen yhteys. Erillistä virheilmoitustaasiakkaalle ei lähetetä.

Palvelinkomponentin luokat on esitetty kuvassa 8.

Page 33: Suunnitteludokumentti - University of Helsinki · 2004-12-10 · simco ja markertool, sekä skripteistä, joilla niiden toiminta on yhdistetty. Tässä projek- tissa korvataan käytössä

28

Kuva 8: Palvelinkomponentin luokat.

3.7.1 Rajapinta

• void StartServer()Ytimelle tarjottava metodi, joka käynnistää palvelimen. Portin voi asettaa asetustie-dostossa, samoin hyväksyttävät verkko-osoitteet.

3.7.2 Server-luokka

Server on palvelinkomponentin pääluokka. Luokassa hallitaan töiden suoritusta ja käsi-tellään asiakkaiden tekemät palvelupyynnöt. Luokassa on sisäiset tietovarastot töiden jaasiakkaiden tietoja varten.

Metodit

• public void StartServer()Käynnistää palvelimen. Lukee asetuksensa palvelimen asetustiedostosta, siirtää pro-sessin tausta-ajoksi ja ryhtyy ottamaan vastaan palvelupyyntöjä asiakkailta. Meto-din suoritus päättyy kun palvelin sammutetaan.

• private int LoadConfig() Lataa palvelimen asetukset asetustiedostosta. Palauttaa on-nistuessaan arvon 0, virhetilanteissa -1.

Attribuutit

• private int serverfdPutki, lähetetään viestejä ydinprosessille.

Page 34: Suunnitteludokumentti - University of Helsinki · 2004-12-10 · simco ja markertool, sekä skripteistä, joilla niiden toiminta on yhdistetty. Tässä projek- tissa korvataan käytössä

29

• private int stubfdPutki, jolla vastaanotetaan viestejä ydinprosessilta.

3.7.3 ServerStub-luokka

ServerStub on apuluokka, jonka kautta palvelinkomponentti kommunikoi ytimen kanssa.Ydin suoritetaan aina omassa prosessissaan, jolloin palvelimen ja ytimen välinen kom-munikaatio hoidetaan putken avulla. ServerStub-luokka peittää ytimeltä tämän ja tarjoaasuoran oliorajapinnan. Luokka toteuttaa Ydinkomponentin rajapinnan IStatusCallback.

Metodit

• void Update(TStatus status)Ytimelle tarjottava metodi, jolla työn tilasta voidaan lähettää välitietoa palvelimelleja sitä kautta asiakkaalle. Saatu tilatieto lähetetään eteenpäin putkea pitkin palveli-melle, jonka jälkeen ohjelman kontrolli palaa metodin kutsujalle.

Attribuutit

• private int serverfdPutki, vastaanotetaan viestejä palvelinprosessilta

• private int stubfdPutki, jolla lähetetään viestejä palvelinprosessille.

3.7.4 ServerJob-luokka

ServerJob-luokka kuvaa yhden työn tilan.

Metodit

• public TStatus GetStatus()Palauttaa työn tilan.

• public void SetStatus(TStatus status)Asettaan työn tilan.

Attribuutit

• private TStatus statusTyön senhetkinen tila. Alkuarvo INIT.

Page 35: Suunnitteludokumentti - University of Helsinki · 2004-12-10 · simco ja markertool, sekä skripteistä, joilla niiden toiminta on yhdistetty. Tässä projek- tissa korvataan käytössä

30

3.7.5 ServerClient-luokka

ServerClient-luokka kuvaa asiakkaan. Jokaista asiakasta kohden luodaan yksi luokan il-mentymä, johon tallennetaan asiakkaan pistoke.

Metodit

• public int GetSockFD()Palauttaa asiakkaan pistokkeen kahvan.

• public void SetSockFD(int sockfd)Asettaa asiakkaan pistokkeen kahvan.

Attribuutit

• private int sockfdAsiakkaan pistokkeen kahva.

3.8 Asiakaskomponentti

Kuva 9: Asiakaskomponentin luokat.

Page 36: Suunnitteludokumentti - University of Helsinki · 2004-12-10 · simco ja markertool, sekä skripteistä, joilla niiden toiminta on yhdistetty. Tässä projek- tissa korvataan käytössä

31

Asiakasohjelma käyttää verkon yli mahdollisesti toisessa koneessa käynnissä olevaa Populous-palvelinta. Kommunikaatio tapahtuu TCP/IP-protokollaa käyttäen. (kts. 3.2.2). Syöttötie-dot asetetaan asiakasohjelmassa, joka välittää palvelupyynnöllä työn suoritettavaksi jol-lekin palvelimelle. Työn tilasta näytetään tietoa, ja sen valmistuttua asiakaskomponenttihakee tulokset ja tallentaa ne käyttäjän valitsemaan paikkaan.

Asiakaskomponentilla voi luoda useampia yhtäaikaa käynnissä olevia töitä, joita asiakas-komponentti osaa tarvittaessa jakaa useammille palvelimille rinnakkain suoritettaviksi.Myös samalle palvelimelle voi lähettää useampia töitä vaikka aikaisemmat eivät olisi-kaan vielä valmistuneet.

Yhteyden palvelimeen katketessa keskeytyvät myös siellä suorituksessa olevat työt. Yk-sittäistä palvelimelle lähetettyä työtä ei voida jatkaa, mutta asiakkaan hoitamaa iteroituasuoritusta voidaan jatkaa aloittamalla keskeytyneen iteraation alusta uudestaan, aikaisem-pien iteraatioiden tulokset ovat säilyneet.

Asiakaskomponentin luokat on esitetty kuvassa 9.

3.8.1 Rajapinta

Asiakas kommunikoi muun ohjelmiston kanssa ainoastaan pistokkeilla TCP/IP-yhteydenyli, eikä tarjoa mitään palvelupyyntörajapintaa.

3.8.2 ClientFrame-luokka

ClientFrame-luokka on asiakaskomponentin käyttöliittymäpuolen pääluokka, jossa mää-ritellään asiakasohjelmiston ulkoasu ja käyttäytyminen.

Metodit

Java Swingin luokasta javax.swing.JFrame perittyjen käyttöliittymän piirtämiseen ja hal-lintaan liittyvien metodien lisäksi toteutettavat metodit kiinnitetään toteutusvaiheessa.

Attribuutit

Kiinnitetään toteutusvaiheessa.

3.8.3 JobControl-luokka

JobControl-luokka hallinnoi simulaatiotöiden suoritusta. Käyttöliittymältä saatu työ ote-taan ensin paikalliseen jonoon, josta se edelleen lähetetään palvelimelle suoritettavaksi.Palvelimilla suorituksia olevia töitä seurataan ja niiden edistymisestä pidetään kirjaa.

Metodit

• public Job[] GetJobs()

Page 37: Suunnitteludokumentti - University of Helsinki · 2004-12-10 · simco ja markertool, sekä skripteistä, joilla niiden toiminta on yhdistetty. Tässä projek- tissa korvataan käytössä

32

Palauttaa kaikki tiedossa olevat työt. Lista voi pitää sisällään niin jonossa suoritustaodottavia, suorituksessa olevia kuin valmiitakin töitä.

• public Job StartJob(Parameters param)Lisää annettujen parametrien mukaisen työn suoritusjonoon, josta se aikanaan suo-ritetaan. Parameters-luokka on vastaava kuin luvussa 3.3.7 määritelty, mutta Javallatoteutettuna. Palauttaa luodun työn ilmentymän, tai null mikäli luominen ei onnis-tunut.

• public void RemoveJob(Job job)Poistaa halutun työn. Tarvittaessa keskeyttää työn suorituksen palvelimelta. Ei pois-ta työn mahdollisesti tuottamia tulostiedostoja, ja voidaan näinollen käyttää myösvalmiin työn kuittaamiseen ja listalta poistamiseen.

Attribuutit

• List jobsTietovarasto, johon kaikki työt tallennetaan.

3.8.4 Job-luokka

Job-luokka kuvaa yhden simulaatiotyön. Luokan olio on itsenäinen säie, joka on itsenäi-sesti yhteydessä sopivaan palvelimeen ja hoitaa työn välityksen palvelimelle, seurannanja tulosten hakemisen. Luokka on synkronoitu.

Metodit

• public Job(Parameters param, ServerInfo server)Luo työn, mutta ei käynnistä sitä vielä. Käynnistäminen tehdään säikeiden tapaankutsumalla java.lang.Thread-luokassa määriteltyä start()-metodia.

• public void setServer(ServerInfo server)Asettaa työlle palvelimen, jossa se on määrä suorittaa.

• public void run()Pyrkii lähettämään työn suoritettavaksi valitulle palvelimelle. Varautuu siihen, ettäpalvelinta ei mahdollisesti ole määritelty tai että sitä voidaan vaihtaa ennen kuin työon saatu jollekin palvelimelle suoritukseen. Työn suorituksen ajan kysyy aika-ajointilatietoa palvelimelta, ja työn valmistuttua hakee tulokset ja tallentaa ne levyllekäyttäjän määrittelemään hakemistoon.

• public int getState()Palauttaa työn edistymisprosentin.

Page 38: Suunnitteludokumentti - University of Helsinki · 2004-12-10 · simco ja markertool, sekä skripteistä, joilla niiden toiminta on yhdistetty. Tässä projek- tissa korvataan käytössä

33

• public Parameters getParameters()Palauttaa Parameters-olion, joka annettiin työtä käynnistettäessä.

Attribuutit

• private ServerInfo serverPalvelin, jolla työ ajetaan.

• private int id

• private int stateTyön suorituksen edistymisprosentti, arvo väliltä 0-100.

• private Parameters paramSisältää Parameters-olion, jolla työ aloitettiin.

3.8.5 ServerInfo-luokka

Jokaiselle tunnetulle palvelimelle luodaan ServerInfo-luokan olio, johon tallennetaan pal-velimeen liittyvät tiedot. Luokka on synkronoitu

Metodit

• public ServerInfo(String address, int port)Konstruktori, jolla asetetaan palvelimen osoite ja portti.

• public String getAddress()Palauttaa palvelimen osoitteen.

• public int getPort()Palauttaa palvelimen portti.

Attribuutit

• private String addressPalvelimen osoite.

• private int portPalvelimen portti.

Page 39: Suunnitteludokumentti - University of Helsinki · 2004-12-10 · simco ja markertool, sekä skripteistä, joilla niiden toiminta on yhdistetty. Tässä projek- tissa korvataan käytössä

34

3.9 Hakemistorakenne

Ohjelman hakemistorakenne eroaa hieman palvelinkäytössä. Tällöin ohjelma tallentaaajokerrat aina vakionimiseen hakemistoon. Kunkin työn eri hakemistoon.

Asiakaspäässä tiedostot kootaan alla näkyvän kaavion mukaisesti. Tiedoston nimen al-kuun liitetään järjestysluku, joka on aina yhtä suurempi kuin suurin samassa hakemistos-sa olevan tiedoston järjestysnumero. Kaikkiin tiedostoihin lisätään järjestysluku, ensim-mäiseen tiedostoon numero 1.

Palvelinkäytössä luodaan jokaiselle työlle oma hakemistonsa, johon kaikki kyseiseen työ-hön liittyvät tiedostot tallennetaan. Työn ajohakemiston nimi on sama kuin työn järjestys-luku. Tiedostojen nimeäminen tehdään samalla periaatteella kuin asiakaspäässäkin.

Ohjelman tiedosto- ja hakemistorakenne on seuraava:

• results-hakemisto

– ajohakemistoKullekin ajolle eli ajokerralle luodaan oma hakemisto, johon sijoitetaan senajon tulostiedostot. Käyttäjä voi nimetä hakemiston. Muutoin käytetään vakio-nimeämistä, jossa hakemiston nimeksi tulee YYYY-MM-DD_ID, eli päiväys,jota seuraa ajokerran numero.

∗ iteration_pedigree_generationSukupuu talletetaan tiedostoon sukupolvi kerrallaan. Esim. 20 sukupolvi-sen sukupuun ajotiedosto (viimeinen sukupolvi) on 1_pedigree_20. Ite-raationumero edeltää jokaista tulostettavaa tiedostoa. Numerointi alkaaykkösestä.

∗ iteration_chrom_generationKromosomitiedosto talletetaan myös sukupolvi kerrallaan.

∗ iteration_alleles[_p]Markertoolin tulostiedosto. Loppuliite "_p"määrittelee, että tuloksessa onkäytetty myös vanhempia.

∗ iteration_markermapMarkertoolin markerikarttatiedosto.

∗ iteration_reportMarkertoolin raporttitiedosto.

• parameters-hakemistoParameters-alihakemistoon tallennetaan parametritiedostot. Käyttäjä voi nimetä tie-dostot itse, mutta ohjelmassa on myös vakionimeämiskäytäntö. Parametritiedostotovat muotoa YYYY-MM-DD_ID.param, eli tiedostojen niminä käytetään päiväystä,jonka jälkeen on juokseva numero.

• data-hakemisto

Page 40: Suunnitteludokumentti - University of Helsinki · 2004-12-10 · simco ja markertool, sekä skripteistä, joilla niiden toiminta on yhdistetty. Tässä projek- tissa korvataan käytössä

35

– STRfileMarkertoolille syötteeksi annettavat STR-markeritiedostot talletataan tänne.

• bin-hakemistoOhjelmiston staattiset osat, kuten ajettava tiedosto.

• README-tiedostoOhjetiedosto.

• manual.pdf-tiedostoOhjelman manuaali.

• server.conf-tiedostoPalvelimen asetustiedosto.

• server.pid-tiedostoTiedosto luodaan automaattisesti palvelimen käynnistyksen yhteydessä. Tiedostoontallennetaan käynnistetyn palvelimen PID, ja se poistetaan kun palvelin sammute-taan. Palvelinta ei voida käynnistää hakemistosta, jossa jo on server.pid-tiedosto, elijos palvelin kaatuu tai se tapetaan SIGKILL-signaalilla, on tiedosto poistettava itseennen palvelimen uudelleenkäynnistämistä.

• populous.log-tiedostoPalvelimen lokitiedosto. Palvelin ei tulosta standardiin tulostusvirtaan mitään, vaankaikki virheilmoitukset ja debug-viestit kirjoitetaan tähän tiedostoon.

3.10 Tiedostoformaatit

Tiedostot ovat ASCII-tekstitiedostoja, joissa käytetään UNIX-rivinvaihtoa. Kenttien erot-timena käytetään pääasiassa välilyöntiä, ja kenttien arvot ovat tekstimuodossa merkkijo-noina, eli esim. arvo 42 on kahden tavun merkkijono ’42’, ei binääriluku 42.

3.10.1 pedigree

<person-id> <father-id> <mother-id> <sub-population-id>

Sub-population-id:n vakioarvo on 0. Tiedosto on järjestetty person-id:n mukaan nouse-vaan järjestykseen.

3.10.2 chrom

<person-id> <chromosome-starting-nucleotide> <founder-id>

Tiedosto on järjestetty toisen kentän mukaan nousevaan järjestykseen. Parent- id:ssä pa-riton luku tarkoittaa äitiä, parillinen isää. Jokaisella henkilöllä on tässä tiedostossa kaksiriviä, eli kaksi erillistä person-id:tä.

Page 41: Suunnitteludokumentti - University of Helsinki · 2004-12-10 · simco ja markertool, sekä skripteistä, joilla niiden toiminta on yhdistetty. Tässä projek- tissa korvataan käytössä

36

3.10.3 param

Parametritiedostossa parametrit ovat samassa muodossa kuin ohjelmaa komentoriviltäajettaessakin. Kukin parametri on omalla rivillään, joka päättyy UNIX-tyyppiseen rivin-vaihtomerkkiin. Parametrit on listattu luvussa 4.1 taulukoissa 6 ja 7.

Lisäksi parametritiedostoon voidaan koodata kokonaisia tekstitiedostoja. Tekstitiedosto-jen koodaus alkaa merkkijonolla ’<:<:<START_FILE:tiedosto.pääte>:>:>’, jossa "tiedos-to.pääte"on halutun tiedoston nimi. Vastaavasti tiedosto päättyy riviin, joka on muoto-ta ’<:<:<END_FILE:tiedosto.pääte>:>:>’ ja jossa "tiedosto.pääte"on sama kuin tiedostonalussa. Näin parametritiedostoon sisällytetyssä tiedostossa itsessään ei saa olla tämän-muotoista riviä.

Näin liitettyyn tiedostoon voidaan viitata muista parametreista nimellä, joka sille on mää-ritelty. Tiedostonimen arvokseen saavien parametrien kohdalla tarkistetaan ensin mahdol-lisen sisällytetyn tiedoston olemassaolo ja vasta sen jälkeen levyltä nykyisestä hakemis-tosta.

puhtaaksi

3.10.4 server.conf

Palvelimen asetustiedosto on tekstitiedosto, jossa palvelimen asetukset määritellään. Jo-kaisella asetuksella on yksiselitteinen nimi ja arvo, jotka esitetään yhdellä rivillä muodos-sa <asetus>=<arvo>. Tiedoston rivinvaihto on UNIX-muodossa eikä ylimääräisiä välejäasetusriveillä sallita. Kommenttirivit alkavat merkillä ’#’ ja ne jätetään huomioimatta.

• port=<int>Portti, jota palvelin kuuntelee ja johon asiakkaat voivat tehdä yhteydenottopyyntöjä

• allowip=<ip>[,<ip>]*IP-osoitteet, joista tulevat yhteydenottopyynnöt otetaan vastaan. Muista osoitteistatulevat yhteydenottopyynnöt hylätään.

4 Käyttöliittymä

Käyttöliittymiä suunnitellaan kolme erilaista: komentorivikäyttöliittymä, Ncurses -kirjastollatoteutettava tekstipohjainen käyttöliittymä ja Javan Swing -pakkauksella toteutettava graa-finen käyttöliittymä. Ncurses -käyttöliittymä suunnitellaan siltä varalta, että ajan puutteenvuoksi graafista käyttöliittymää ei saada toimintaan. Kukin käyttöliittymätyyppi kuvataantarkemmin omassa aliluvussaan.

Käyttöliittymien avulla käyttäjä syöttää tai valitsee käyttöliittymän tarjoamasta valikos-ta populaatiosimulaation tarvitsemat parametrit. Järjestelmässä on mahdollisuus käyttäämyös syöttötiedostoja, jolloin parametrit ladataan simulaattorin käyttöön käyttäjän valin-nan mukaisesta tiedostosta.

Page 42: Suunnitteludokumentti - University of Helsinki · 2004-12-10 · simco ja markertool, sekä skripteistä, joilla niiden toiminta on yhdistetty. Tässä projek- tissa korvataan käytössä

37

Käyttöliittymien suunnittelussa otetaan huomioon erilaiset käyttötapaukset, joissa popu-laatiosimulaattoria käytetään ja niitä pyritään tukemaan mahdollisimman hyvin. Tällä ta-voin virheellisten tietojen syöttäminen minimoidaan ja järjestelmän käyttöä helpotetaan.

Käyttöliittymä toteutetaan siten, että se tarkistaa käyttäjän syöttämien parametrien arvoa-lueet ja antaa käyttäjälle virheilmoituksen mikäli ne eivät ole validit. Syöttötietojen oi-keellisuus tarkistetaan sitä tarvitsevassa komponentissa, joka antaa virheilmoituksen, jossyöttötieto ei kelpaa.

Lisäksi järjestelmä antaa käyttäjälle käyttöliittymän välityksellä informaatiota suoritetta-vana olevan simulaation edistymisestä.

4.1 Komentorivikäyttöliittymä

Ohjelma tukee graafisen käyttöliittymän lisäksi komentorivitilaa, jossa voidaan komen-toriviltä ajaa simulaatiota. Ohjelman käynnistetään palvelin ja tekstikäyttöliittymätilaanmyös suoraan komentoriviltä. Komentorivin käyttö simulaatioiden ajoon on tarkoitettuvain vararatkaisuksi ja ohjelman tehokäyttöön.

server.config:sta. populaatio simulaatio, vain sijaintitiedosto.esim. ei hyvin arvo 50-

Duplikaatteja parametreja:

• Satunnaisgeneraattorin siemen (simco) on optio "t".

• Otoksen koko (simco) on sama kuin perustajajäsenten määrä.

• Parental generation size (markertool) on sama kuin toiseksi viimeisen sukupolvenkoko.

• Parental segments (markertool) on toiseksi viimeisen sukupolven kromosomitie-dosto.

• Pedigree tree (markertool) on viimeisen sukupolven sukupuu.

• Kromosomipituus (markertool) on sama kuin Simcon kromosominpituus.

• Foundersize (markertool) on perustajien määrä.

• Popsize (markertool) on loppupopulaation koko.

Page 43: Suunnitteludokumentti - University of Helsinki · 2004-12-10 · simco ja markertool, sekä skripteistä, joilla niiden toiminta on yhdistetty. Tässä projek- tissa korvataan käytössä

38

Parametri (*=pakollinen) Arvo Selitys–debug Debug-tila.–start-server Käynnistää palvelintilan, jossa ohjelma lukee palvelinportit ja

hyväksytyt verkko-osoitteet server.config:sta.–stop-server Sammuttaa serverin.–load-params file Lataa parametrit tiedostosta. Tiedostoa haetaan sekä pwd:stä

että alihakemistosta parameters automaattisesti.–save-params [tiedosto] Talletaan annetut parametrit. Voidaan määritellä tallennustie-

dosto. Vakiona parameters alihakemistoon vakionimellä.–result-dir hakemisto Määritellään tulostehakemisto, vakiona results alihakemis-

toon vakionimellä. Tämä määrittelee myös ajon/simulaationtunnisteen/nimen.

–founders* int Perustajasukupolven koko yksilöinä. Kerrotaan sisäisesti kah-della, jotta saadaan populaatio kromosomeina. Lisäksi ekvi-valentti simcon sample-size:n kanssa. Tyypillinen arvo 200-1000.

–last-generation* int Viimeisen sukupolven koko. Tyypillinen arvo 100K-200K.–generations* int Sukupolvien määrä. Tyypillinen arvo 10-50.–iterations int Iteraatioiden määrä, vakiona ei iteraatioita. Tyypillinen arvo

noin 100.–pedigree-once Generoidaanko sukupuu ja kromosomit vain kerran. Käyte-

tään iteraatioiden yhteydessä, jolloin iteroidaan ainoastaanmarkertoolia ja simcoa.

–simulation-mode full | tree | pe-digree | mar-ker

Full: normaali simulaatio, tree: pelkkä sukupuu, pedigree: su-kupuu ja kromosomit, marker: vain simco ja markertool.

–save-trees Talletetaan sukupuut. Vakiona ajon sukupuu- ja kromosomi-tiedostot poistetaan.

–save-pedigrees Talletetaan kromosomitiedostot. Vakiona ajon sukupuu- jakromosomitiedostot poistetaan. Talletetaan vain -sg:ssä mää-ritellyt sukupolvet.

–load-pedigree tiedosto Ladataan kromosomitiedosto (chrom). Ei ajeta genpediä taichromia.

–save-generations int-list Tallennetaan myös annetut (pilkuin erotelluin) sukupolvet.

Taulukko 6: Parametrit osa 1

Page 44: Suunnitteludokumentti - University of Helsinki · 2004-12-10 · simco ja markertool, sekä skripteistä, joilla niiden toiminta on yhdistetty. Tässä projek- tissa korvataan käytössä

39

Parametri (*=pakollinen) Arvo Selitys–sub-populations int Alipopulaatioiden määrä. Tyypillinen arvo 2-10.–sub-population-sizes int-list Alipopulaatioiden koot. Luvut erotellaan pilkuin. Esim.

2700,500,1200.–sub-population-migrations

double-list Alipopulaatioiden siirtymistodennäköisyydet. Tauluk-ko, jossa jokaisen alipopulaation jäsenen todennäköisyyssiirtyä jokaiseen toiseen alipopulaatioon. Tällä voidaanmyös poistaa siirtymiset asettamalla todennäköisyydetnollaksi. Arvoalue [0,1]. Esim. kolmella alipopulaatiolla:(0.8,0.1,0.1)(0.2,0.7,0.1)(0,0,1), tarkoittaen, että C:stä eikukaan lähde ikinä pois, B:stä siirrytään 20% todennäköisyy-dellä A:han, 10% B:hen ja 70% jäädään B:hen.

–chrom-length* int Kromosomin pituus emäspareina. Tyypillinen arvo 10M-100M.

–str-file tiedosto STR-markereiden sijaintitiedosto.–snp-rate* double SNP-mutaatioiden todennäköisyys/ emäspari/sukupolvi. Ar-

voalue [0,1]. Tyypillinen arvo hyvin pieni, esim. 1e-8(=0,00000001). Ohjelmalle on annettava joko strfile tai snpra-te, ei molempia.

–recomb-rate* double Rekombinaatiotodennäköisyys/ emäspari/sukupolvi. Arvoa-lue [0,1]. Tyypillinen arvo hyvin pieni, hyvin usein 1e-8

–effective-pop-size* int Simcon efektiivinen populaation koko. Tyypillinen arvo 5-15K.

–disease-mut-freq* double Tautigeeniksi valittavan mutaation frekvenssi populaatiossa.Arvoalue [0,1]. Tyypillinen arvo 0.01-0.20.

–min-minor-allele-freq* double Pienin sallittu tulokseen (otokseen) mukaan otettavien mark-kereiden mutaatiomuodon yleisyys. Arvoalue [0,1]. Tyypilli-nen arvo 0.01-0.20.

–marker-map-file [tiedosto] Kirjoitetaan markermap tiedostoon, voidaan käyttää vakiotie-dostonnimeä.

–markers* int SNP-markkereiden määrä. Tyypillinen arvo 100-500.–sample-type random |

affected | ca-se+healthy |case+random

Otostyyppi. Vakio-arvo ’random’.

–sample-size* int Otoksen koko. Tyypillinen arvo 50- 500.–prevalence* double Yleisyys. Arvoalue [0,1]. Tyypillinen arvo 0.05-0.20.–penetrance* double Ilmenevyys. Arvoalue [0,1]. Tyypillinen arvo 0.05-0.20–report-file [tiedosto] Koosteraportti tiedostoon, voidaan käyttää vakiotiedostonni-

meä.–parents-in-result Otetaan vanhemmat mukaan tulokseen, jolloin ajetaan kaksi

viimeistä sukupolvea markertoolille.–par-tree file Viimeisen sukupolven sukupuu. Vaatii parents ja marker -

optiot.–par-pedigree file Vanhempien kromosomit. Vaatii parents ja maker -optiot.–allow-siblings Sisarukset mukaan tulokseen. Vaatii yllä olevan -pr-

parametrin.

Taulukko 7: Parametrit osa 2

Page 45: Suunnitteludokumentti - University of Helsinki · 2004-12-10 · simco ja markertool, sekä skripteistä, joilla niiden toiminta on yhdistetty. Tässä projek- tissa korvataan käytössä

40

• Founderfile (markertool) on Simcon tulostiedosto.

• Segmentfile (markertool) on viimeisen sukupolven kromosomitiedosto.

• populous –start-serverKäynnistää palvelimen.

• populous –load-params params21-7-2004.paramLataa parametrit tiedostosta.

• populous –simulation-mode tree –founders 100 –last- generation 2000 –generations10 –result-dir MyDirAjetaan vain sukupuun luonti annetuin parametrein. Sukupuu tallennetaan MyDir-hakemistoon vakionimellä pedigree_10.

• populous –simulation-mode pedigree –founders 200 –last- generation 3500 –generations 15 –result-dir OtherDir –sub-populations 3 –sub-population- sizes50,50,100 –sub-population-migratations (1,0,0)(0.1,0.8,0.1)(0.3,0.4,0.3) –include-generations 12,13 –save-params MunParametritAjetaan vain sukupuun ja kromosomitiedostojen luonti. Talletataan sukupolvet 12,13ja 15 (viimeinen) OtherDir-hakemistoon vakionimillä tree_12, pedigree_12 jne. Li-säksi generoidaan sukupuut käyttäen alipopulaatioita, tässä 3 alipopulaatiota. Ali-populaatiosta A ei siirrytä ikinä muihin alipopulaatioihin, B:stä siirrytään C:hen jaA:han 10% todennäköisyydellä ja C:stä siirrytään pois sekä B:hen että A:han 30%todennäköisyydellä. Talletataan vielä kaikki annetut parametrit parameters/MunParametrit-hakemistoon. Ilman MunParametrit-määrettä olisi talletettu oletustiedostoon, jokatässä tapauksessa olisi ollut "OtherDir", koska resultdir on määritelty. Ilman sitä seolisi ollut muotoa YYYY-MM-DD_ID.param.

• populous –load-pedigree pedigree_20 –iterations 50 –chrom-length 100000000–snp-rate 0.000001 –recomb-rate 0.000001 –effective-pop-size 15000 –disease-mut-freq 0.08 –min-minor-allele-freq 0.12 –markers 4000 –sample-size 300 –prevalence 0.05 –penetrance 0.19 – sample-type affected –reportfile –marker-mapfile –parents-in-result –allow-siblingsEi ajeta sukupuun generointia tai kromosomien periytymistä, vaan otetaan ne val-miiksi kahdesta tiedostosta. Ajetaan 50 iteraatiota, ja "chrompedigreeonce"on au-tomaattisesti päällä, eli iteroidaan vain markertoolia ja simcoa. Raportti ja markke-rikartta talletetaan vakiotiedostoihin (markermap ja report) ja vanhemmat otetaanmukaan otokseen, sekä sisarukset.

• populous –save-params 28-8-2004ajo3 –founders 100 –lastgeneration 2000 –generations 20 –iterations 100 –chrom-pedigree-once –save- pedigrees –include-generations 15,16 –chrom-length 100000 –snp-rate 0.00003 – recomb-rate 0.00002–effective-pop-size 10000 –disease-mut-freq 0.04 –min-minor- allele-freq 0.12

Page 46: Suunnitteludokumentti - University of Helsinki · 2004-12-10 · simco ja markertool, sekä skripteistä, joilla niiden toiminta on yhdistetty. Tässä projek- tissa korvataan käytössä

41

–markers 2000 –sample-size 100 –prevalence 0.05 –penetrance 0.19 –parents-in-resultsTallennetaan annetut parametrit, iteroidaan 100 kertaa, mutta vain markertoolia jasimcoa, talletetaan sukupolvet 15, 16, 19, 20 (15 ja 16 annettu, 20 on viimeinen ja19 tulee -parentsinresult:sta). Ei tallenna kromosomitiedostoja.

4.2 Ncurses

Ohjelman tekstipohjainen käyttöliittymä luodaan ncurses-kirjastolla, joka on terminaali-ja näytönhallintapakkaus erityisesti tekstipohjaisten käyttöliittymien rakentamiseen UNIX-ympäristöissä.

Tekstikäyttöliittymä on ohjelmaa paikallisesti käytettäessä ensisijainen käyttöliittymä, mut-ta sen tärkein tavoite on silti yksinkertaisuus ja selkeys. Käyttöliittymä tarjoaa käyttäjällesimulaatiotyövaihtoehdot ja mahdollisuuden antaa parametrit siististi ohjelmalle. Lisäksikäyttöliittymä tarjoaa mahdollisuuden seurata simulaation etenemistä ja keskeyttää sen.Tuloksia ei visualisoida eikä erilaisten tulos-, syöte- ja datatiedostojen katselua tai hallin-taa toteuteta käyttöliittymään toissijaisina vaatimuksina.

NCurses on UNIXien vanha terminaalipohjainen kirjasto, joka on puhdasta C:tä. Tämänäkyy erittäin hyvin kirjaston luonteessa ja sen tarjoamissa funktiossa, makroissa ja mää-rityksissä, mitkä ovat hyvin matalalla tasolla ja erityisen proseduraalisia. Tämä asettaasuunnittelulle ja toteutukselle tiettyjä rajoitteita. Tekstikäyttöliittymää ei suunnitella eri-tyisesti oliopohjaiseksi.

NCursesista löytyy natiivina hyvät työkalut ruudun manipuloinnille sekä ikkunoiden käyt-tämiselle. Lisäksi apukirjastopaketit tarjoavat ikkunoiden käyttöä helpottavat panelit, sekätietojen syötön ja kenttien automatisoinnin form-pakkauksen myötä. Form-pakkauksellavoidaan rakentaa web-tyylisiä tiedonkeruulomakkeita ruudulle. Jokaista datakenttää vas-taa staattinen selitekenttä. Datakentille on valmiita ja tehokkaita rajatarkistusfunktiota.

Käyttöliittymä pohjautuukin useisiin näkymiin (ncursesin WINDOW), sekä tiedonsyöt-tönäkymissä käytettyihin formeihin. Näkymät vastaavat terminaali-ikkunan koon asetta-missa rajoissa mahdollisimman suoraan Swing- käyttöliittymän ikkunoita. Yksi näkymäon ruudulla kerrallaan. Ruudun yläreunassa näkyy aina ohjelman nimi ja näkymän nimi.Parametrien keruu suoritetaan formeilla, jotka korjaavat parametrien arvoalueet automaat-tisesti ja tarkistavat, että syöte on validissa muodossa (ei kirjaimia jos haluttiin numero,yms.).

Näkymien rakenne on seuraava:

1. AlkuvalikkoAlkuvalikko on ensimmäinen näkymä käynnistettäessä. Valintamahdollisuuksina"New simulation", "Exit".

2. Simulaatio-optiotLuetellaan simulaation optiot. Tarjotaan paluu alkuvalikkoon tai kohti simulaatio-datan syöttöä.

Page 47: Suunnitteludokumentti - University of Helsinki · 2004-12-10 · simco ja markertool, sekä skripteistä, joilla niiden toiminta on yhdistetty. Tässä projek- tissa korvataan käytössä

42

3. SimulaatiodataLuetellaan simulaatiodata ja sen syötöt. Sivulta pääsee takaisin simulaatio-optionäkymääntai voidaan käynnistää simulaatio ( seurantanäkymä).

4. Simulaation seurantaNäytetään missä vaiheessa simulaatio on. Työn valmistuttua tulostetaan yhteenvetosimulaatiosta ja tulostiedostojen kirjoitussijainnit. Tarjotaan paluuta takaisin alku-valikkoon. Simulaation aikana control-c tulostaa tähän näkymään tiedon keskeyty-misestä ja tarjoaa reitin alkuvalikkoon.

Tiedostosyötteistä tarkistetaan suoraan tiedostojen olemassaolo, muttei tiedostojen vali-diutta. Ladatessa parametrit tiedostosta, ohjelma täyttää jokaisen kentän valmiiksi, jotkakäyttäjä voi hyväksyä ja käynnistää simulaation.

4.3 Graafinen käyttöliittymä (Java Swing)

Graafisen käyttöliittymän suunnittelussa on käytetty Helsingin yliopiston Tietojenkäsit-telytieteen laitoksen ja Interactan yhteistyössä kehittämää GDD (Goal Derived Design)-suunnitteluprosessia, jossa käyttöpaus kerrallaan piirretään dataa ja toimintoja näkyviinikkunaan.

Järjestelmän toimintaan liittyvät tavoitepohjaiset käyttötapaukset ovat prioriteettijärjes-tyksessä:

Käyttötapaus 1: Sokeritaudin periytymisen tutkiminen

Käyttötapaus 2: Aineistoa artikkelia varten

Käyttötapaus 3: Sokeritautigeenitutkimuksen uusiminen

Käyttötapaus 4: Geeniparametrien toimivuuden testaus

Käyttötapaus 5: Väärät tutkimustiedot

Käyttötapaus 6: Ämmänsaaren väestön kehittyminen

Käyttötapaus 7: Siirtolaisten vaikutus Ämmänsaaren geeniperimään

Käyttötapaukset on tarkemmin esitetty kussakin aliluvussa, jossa ko. käyttötapaukseenliittyvät tavoitteet on kirjattu.

4.3.1 Käyttötapaus 1: Sokeritaudin periytymisen tutkiminen.

Tavoite: Petteri on juuri aloittanut työt uudessa työpaikassa Tietojenkäsittelytieteen lai-toksella projektissa, jossa hänen tehtävänään on tutkia sokeritautia aiheuttavien gee-nien periytymistä Ilomantsin väestössä.

Page 48: Suunnitteludokumentti - University of Helsinki · 2004-12-10 · simco ja markertool, sekä skripteistä, joilla niiden toiminta on yhdistetty. Tässä projek- tissa korvataan käytössä

43

Tilatiedot: • Nyt on to 21.10.2004 ja kello on 11.30. Petteri haluaa tehdä alustavatselvitykset ennen ruokatuntia. Hän on sopinut menevänsä ystävänsä Kallenkanssa syömään klo noin 12.

• Petteri on työhuoneessaan oman koneensa ääressä.

• Hän ei ole tehnyt tästä tapauksesta aikaisempia simulaatioita ja aikoo nyt teh-dä yhden kokonaisen simulaation eli luoda sukupuun ja simuloida periyty-mistä kerran. Mitään ylimääräisiä tiedostoja ei oteta talteen. Koska tämä onensimmäinen simulaatio Petteri nimeää sen Simulaatio1 :ksi.

• Aiempia tuloksia eikä syöttötiedostoja ole tallennettu. Petteri käyttää simulaa-tiossaan seuraavia parametreja:

number of founders = 500 individualssize of last generation = 150000 individuals

number of generations = 20

chromosome length = 10 000 000 bpSNP -rate = 1 x 10-8

number of markers = 100

effective population size = 10 000recombination rate = 1 x 10-8

samplesize = 100

sample type = affecteddisease mutation frequency = 20

minimum minor allele frequency = 20prevalence = 20

penetrance = 20

Käyttötapauskuvasarjadokumentin kuvasarja ’Sokeritaudin periytymisen tutkiminen.’ esit-tää Petterin toiminnan hänen käyttäessään populaatiosimulaattoria.

4.3.2 Käyttötapaus 2: Aineistoa artikkelia varten.

Tavoite: Petteri aikoo julkaista sokeritaudin periytymistä koskevat tutkimustuloksensaScience -lehdessä. Artikkelia varten hän tarvitsee simulaatioista tilastollista aineis-toa.

Tilatiedot: • Nyt on pe 22.10.2004 ja kello on 8.30. Petterillä on koko päivä varattutämän työn tekemiseen.

• Petteri on työhuoneessaan oman koneensa ääressä.

• Petteri on tehnyt tästä tapauksesta aikaisempia simulaatioita.

• Aiemmat tulokset ja käytetyt syöttötiedot on tallennettu tekstitiedostoina. Pet-teri käyttää parametritiedostoa nimeltä diabetes.data tämän simulaation syöt-teenä. Simulaation nimeksi hän antaa diabetes100.

Page 49: Suunnitteludokumentti - University of Helsinki · 2004-12-10 · simco ja markertool, sekä skripteistä, joilla niiden toiminta on yhdistetty. Tässä projek- tissa korvataan käytössä

44

• Normaalin simulaatiotuloksen lisäksi Petteri tarvitsee tietoja, jotka sisältyvättulostiedostoihin markermapfile ja reportfile.

Kuvasarjassa ’Aineistoa artikkelia varten’ Käyttötapauskuvasarjadokumentissa on esitet-ty käyttötapaukseen liittyvä Petterin toiminta hänen käyttäessään populaatiosimulaattoria.

4.3.3 Käyttötapaus 3: Sokeritautigeenitutkimuksen uusiminen.

Tavoite: Petterin aikaisemmin tekemä sokeritaudin periytymisen simulaatio on epäonnis-tunut. Hän päättää suorittaa viime viikolla tekemänsä simulaation uudelleen hiukanparannetuilla parametreilla.

Tilatiedot: • Nyt on ma 25.10.2004 ja kello on 9.30. Petteri on kahvitauolla saanutkuulla sokeritautitutkimuksen projektipäälliköltä, että simulaation tulos näyt-täisi olevan täyttä roskaa.

• Petteri on työhuoneessaan oman koneensa ääressä.

• Hän on tehnyt tästä tapauksesta simulaation viime viikolla.

• Petteri käyttää pohjana viime viikolla tallentamaansa sukupuuta, joka on tie-dostossa /results/diabetes_001/001_pedigree.txt. Myös kromosomitiedot ontallennettu tiedostoon /parameters/diabetes_001/diabetes _ilomantsi.data. Uu-det arvot, joita käytetään ovat:

chromosome length = 70 000 000 bp

number of markers = 300

samplesize = 200

sample type = affected

disease mutation frequency = 20

minimum minor allele frequency = 20

prevalence = 20

penetrance = 20

Simulaation nimeksi Petteri antaa kuvaavasti diabetes_002.

• Tuloksiin sisällytetään tieto vanhemmista ja sisaruksista.

Petterin toiminta hänen käyttäessään populaatiosimulaattoria on kuvattu Käyttötapausku-vasarjadokumentin kuvasarjassa ’Sokeritautigeenitutkimuksen uusiminen’.

4.3.4 Käyttötapaus 4: Geeniparametrien toimivuuden testaus.

Tavoite: Minnalla on uusi tutkimusaihe astman perinnöllisyydestä, johon liittyviä para-metreja täytyy vielä kehitellä. Petteri toimii projektissa populaatiosimulaatioasian-tuntijana. Minna pyytää Petteriä testaamaan uutta aineistoa.

Page 50: Suunnitteludokumentti - University of Helsinki · 2004-12-10 · simco ja markertool, sekä skripteistä, joilla niiden toiminta on yhdistetty. Tässä projek- tissa korvataan käytössä

45

Tilatiedot: • Tänään on ke 27.10.2004 ja kello on 12.30. Petteri on tullut projektipa-laverista, jossa hän on lupautunut kokeilemaan kollegansa Minnan keräämääaineistoa perinnöllisestä sairaudesta.

• Petteri on työhuoneessaan oman koneensa ääressä.

• Astman tutkimusaineisto on kerätty viime kesänä Kainuussa Ämmänsaarenkunnan terveyskeskuksessa. Aineistoa ei ole ennen käytetty simulaatiossa, jo-ten sitä on hyvä testata esim. 50 iteraatiolla, jotta lopulliset, tutkimuksessakäytettävät parametrit voidaan päättää.

• Minna on tallentanut kromosomitiedot projektin hakemistoon /astma/ammansaari_04.data

Käyttötapauskuvasarjadokumentin kuvasarja ’Geeniparametrien toimivuuden testaus’ ku-vaa Petterin toimintaa hänen käyttäessään populaatiosimulaattoria käyttötapauksen suo-rittamiseen.

4.3.5 Käyttötapaus 5: Väärät tutkimustiedot.

Tavoite: Petteri on tutkimassa edelleen astmageenidataa. Hän aikoo tehdä lisää kokeilujamuuttaen Minnan antamia parametreja.

Tilatiedot: • Tänään on to 28.10.2004 ja kello on 10.30. Petterillä on nyt varattunaaikaa tähän projektiin noin kaksi tuntia.

• Petteri on työhuoneessaan oman koneensa ääressä.

• Petteri on tallentanut muokkaamansa kromosomitiedot hakemistoon /astma/ammansaari2_04.data

• Petteri nimeää simulaation astma2:ksi.

• Välittömästi painettuaan start -nappia Petteri tajuaa antaneensa uudelleen edel-lisenä päivänä suoritetut parametrit tiedostosta ammansaari_04.data eikä uu-desta tiedostosta ammansaari2 _04.data kuten oli tarkoitus.

Kuvasarja ’Väärät tutkimustiedot’ Käyttötapauskuvasarjadokumentissa esittää Petterintoiminnan hänen suorittaessaan käyttötapauksen populaatiosimulaattoria käyttäen.

4.3.6 Käyttötapaus 6: Ämmänsaaren väestön kehittyminen.

Tavoite: Petteri on kiinnostunut siitä, miten Ämmänsaaren väestö on kehittynyt. Tutki-musten mukaan paikalle on muuttanut viisisataa henkeä vuonna 1540 -luvulla. Nytnoin 15 sukupolven jälkeen Ämmänsaaren ja sen lähikuntien asukasluku on noin100 000.

Tilatiedot: • Tänään on to 28.10.2004 ja kello on 15.40. Petteri tekee tänään töitäainakin kuuteen saakka.

• Petteri on työhuoneessaan oman koneensa ääressä.

Page 51: Suunnitteludokumentti - University of Helsinki · 2004-12-10 · simco ja markertool, sekä skripteistä, joilla niiden toiminta on yhdistetty. Tässä projek- tissa korvataan käytössä

46

• Tämä on ensimmäinen sukupuukokeilu. Aiempia tuloksia eikä syöttötiedos-toja ole käytettävissä.

• Petteri päättää nimetä tämän sukupuusimulaation ammapuu1:ksi. Tulokset tal-lennetaan kaikista ensimmäisestä viidestä sukupolvesta ja siitä eteenpäin jokatoisesta.

Petterin toimintaa hänen käyttäessään populaatiosimulaattoria käyttötapauksen suoritta-miseen esittää Käyttötapauskuvasarjadokumentin kuvasarja ’Ämmänsaaren väestön ke-hittyminen’.

4.3.7 Käyttötapaus 7: Siirtolaisten vaikutus Ämmänsaaren geeniperimään.

Tavoite: Petteri on kiinnostunut siitä, miten siirtolaiset ovat vaikuttaneet Ämmänsaarengeeniperimään. Todellisuudessa Ämmänsaaren väestö ei ole ollut täysin eristäyty-nyt vaan seudulle on muuttanut jonkin verran väkeä naapurikunnista.

Tilatiedot: • Tänään on to 28.10.2004 ja kello on 16.45. Petteri on päättänyt tänäänahkeroida loppupäivän tämän tehtävän parissa, ainakin kuuteen saakka.

• Petteri on työhuoneessaan oman koneensa ääressä.

• Petteri käyttää samaa dataa, jota hän aiemmin käytti Ämmänsaaren väestön si-mulointiin, nyt kuitenkin lisätään mukaan kromosomitiedot. Kromosomin pi-tuutena Petteripäätää käyttää 80 miljoonaa emäsparia. Petteri on tehnyt siirty-mistodennäköisyystaulukon valmiiksi parametrihakemistoon nimellä migra-tion6.txt.

• Tämän työn Petteri nimeää ammapuu2_6:ksi, koska mukaan otetaan kuusinaapurikuntaa.

Käyttötapauskuvasarjadokumentin kuvasarja ’Siirtolaisten vaikutus Ämmänsaaren geeni-perimään.’ esittää Petterin toiminnan hänen käyttäessään populaatiosimulaattoria tämänkäyttötapauksen suorittamiseen.