Essay: Software voor onderzoek chemische verrijking van clusters in melkwegstelsels & webinterface spex

1. INLEIDING

Dit verslag heeft betrekking op een derdejaars ori??nterende stage van de studierichting technische informatica op de faculteit Hogeschool Utrecht. Gedurende de periode begin september tot eind januari moet er stage gelopen worden van honderd werkdagen bij een bedrijf of organisatie. Hierin moet een opdracht uitgevoerd worden die aansluit bij het profiel van een beginnende ICT-er.

Door te kijken naar eventuele toekomstplannen is een stageplek gezocht die dat kan waarmaken. De eventuele toekomstplannen betreft het studeren van de studie natuur- en sterrenkunde. Daarom is er contact gezocht met het bedrijf SRON. Dit bedrijf houdt zich bezig met ruimteonderzoek. De stageperiode sluit aan met het bovengenoemde periode.

Gedurende de stageperiode moeten er twee opdrachten worden uitgevoerd. De eerste opdracht is het ontwerpen en implementatie van een tool t.b.v. het onderzoek naar de chemische verrijking van clusters van melkwegstelsels. De chemische elementen worden in clusters door verschillende typen supernovae geproduceerd. De tool gaat modelberekeningen van de productie van elementen in supernovae vergelijken met gemeten hoeveelheden van elementen in clusters. Hierbij wordt er een verhouding berekend van de verschillende type supernovae in een cluster.
De tweede opdracht is een webinterface maken voor de bestaande SPEX software. Het programma SPEX is een softwarepakket geoptimaliseerd voor analyse en interpretatie van hoge-resolutie kosmische X-ray spectra. De software is vooral geschikt voor het fitten van spectra met huidige X-ray data van observatoria. Het gaat hier dan om data zoals de die van de satellieten XMM-Newton, Chandra en Sazuki. Verder kan het lijsten van lijn transmissies, lijn emissiviteiten, en plots van absorptie of emissie spectra tonen. De webinterface is niet bedoelt voor de gehele SPEX software, maar verschillende veel voorkomende cases die vaak door de sterrenkundigen opgezocht worden. Hierin kunnen parameters worden aangepast om informatie over verschillende lijnen te verkrijgen.
In hoofdstuk twee komt de organisatie van SRON aan bod. In hoofdstuk drie gaat het over de eerste opdracht. In hoofdstuk 4 wordt de tweede opdracht besproken. In hoofdstuk vijf wordt er wat verteld over de ontwikkelomgeving. Hoofdstuk zes komt de relatie met de hogeschool Utrecht en stage aan bod. In hoofdstuk zeven en acht staan de referenties en bijlagen.

2. ORGANISATIE

Hieronder zal een beschrijving worden gegeven van de verschillende zaken binnen de organisatie in het bedrijf SRON.

2.1 CORE-BUSINESS
SRON Netherlands Instititute for Space Research is het landelijk expertisecentrum voor de ontwikkeling en exploitatie van satelliet-instrumenten voor astrofysische en aarde-gericht onderzoek. Als het nationaal expertise-instituut adviseert SRON de overheid en co??rdineert het nationale bijdragen vanuit de wetenschap aan internationale ruimtemissies. SRON bevordert maatschappelijke toepassingen voor ruimtetechnologie.

2.2 ORGANISATIESTRUCTUUR
Organogram
SRON heeft een hybride matrix structuur zoals in figuur 1 is aangegeven. Deze bestaan uit vier programmalijnen. Technology(ontwikkeling van instrument- en detectorconcepten), Astrophysics(onderzoek ruimte), Earth(onderzoek aarde) en Exoplanets(onderzoek exoplaneten). Per programmalijn is er een science group(zorgen voor wetenschappelijk output van SRON en het ondersteunen van [voorstudies van] projecten binnen de programmalijn waaraan de groep is verbonden) gekoppeld. Bij de Technology is er nog een extra TT&V (Topsectoren-beleid van de overheid en technology transfer & valorisatie) group gekoppeld. Deze zal de programmaleiders informeren en ondersteunen.
Verder ondersteunen de Engineering en Instrument science, die weer ondersteund worden door de General support group, de programmalijnen.
Directie
SRON heeft een tweehoofdige directie. De directie legt verantwoording af aan het bestuur van SRON en wordt geadviseerd door de Science Advisiory Committee ( SAC). De SAC adviseert de directie m.b.t. de langetermijnstrategie en het onderzoeksprogramma van SRON.

Bestuur
Het bestuur van SRON bestaat uit wetenschappers, experts en managers uit het R&D veld, zoals universiteiten en industrie. Bij vergaderingen is een vertegenwoordiger van NWO en de SRON directie aanwezig.
Science Advisory Committee
De Science Advisory Committee (SAC) adviseert de SRON-directie over de langetermijnstrategie en het onderzoeksprogramma van SRON. De leden zijn toonaangevende personen van nationale en internationale instituten en organisaties op het gebied van ruimteonderzoek en zijn experts op de onderzoeksgebieden waarop SRON actief is. De leden van de SAC worden benoemd door het bestuur.

2.3 KLANTENKRING
SRON is een bedrijf dat gericht is op ruimteonderzoek en niet gericht op winst maken van geld. Daarom heeft het bedrijf niet te maken met klanten maar met partners waarmee wordt samengewerkt.
Zoals hierboven al is vermeld zijn de vier programmalijnen los van elkaar te onderscheiden maar niet onafhankelijk van elkaar. SRON hanteert de ‘expertise driehoek’.
Science;
– Astrofysisch en atmosferisch onderzoek
– Spectroscopie in IR, submm en r??ntgen
Enabling Technology;
– Detectoren + read-out elektronica + micro-mechanische systemen in cryo omgeving
– State-of-the-art litho facilitation en clean rooms
Space instruments;
– Systeemkennis
– Ontwerp, engineering, bouw en kwalificatie van vluchtinstrumentatie in internationale consortia
Als voorbeeld; wanneer een (groep) wetenschapper(s) iets willen onderzoeken wat nog niet mogelijk is wordt er onderzoek gedaan hoe dit instrument gerealiseerd kan worden. Er moeten dus verschillende onderzoeken gedaan worden naar detectoren die de eigenschappen kan meten wat de wetenschappers graag willen onderzoeken. Wanneer het ontwerp af is kan het instrument gemaakt worden. Wanneer het instrument gerealiseerd is er ongeveer een doorlooptijd geweest van 15 tot 20 jaar. Tegen die tijd willen wetenschappers weer nieuwe onderzoeken doen. Dit is een soort vicieuze cirkel die doorgaat.
2.4 BEDRIJFSCULTUUR
Het eerste wat opvalt, is dat het een internationaal bedrijf is met werknemers uit de hele wereld. Daarom is het gebruikelijk conversaties met de buitenlandse medewerkers in Engels te voeren. Verder is het ook een multiculturele bedrijf waarin kledingdracht of cultuur allemaal geaccepteerd wordt.
De werktijden zijn flexibel. SRON hanteert bloktijden waarin een medewerker moet beginnen met werken. In ieder geval aanwezig tussen 9:30 en 16:00 uur. De medewerker moet een werkdag van acht uur erop hebben zetten. Het later beginnen van werk betekend dat langer doorgewerkt moet worden. De werkgever heeft geen kloksysteem of vorm van tijd bijhouden van de medewerker. Als er een dag vrij gevraagd wilt worden kan dit mondeling afgesproken worden met de bedrijfsbegeleider.
Omdat de meeste medewerkers de hele dag gekluisterd achter een computer zitten, zijn er ingebrachte koffiepauzes. De eerste koffiepauze begint ongeveer om kwart voor elf. Rond half ‘?n wordt er geluncht. Meestal vind de lunch plaats in het Minnaert gebouw. Dit gebouw beschikt over een kantine wat bij SRON niet het geval is. Nader het einde van de dag rond kwart voor vier wordt er nog een laatste gezamenlijke koffiepauze gehouden.

2.5 OVERLEG MET BEDRIJFSBEGELEIDER
Overleg met de bedrijfsbegeleider gaat meestal mondeling. Wanneer dit niet mogelijk is kan er via de mail gecommuniceerd worden. Als het een noodgeval is kan altijd nog gebeld worden naar de mobiele telefoon.

2.6 ICT-AFDELING
SRON heeft een ICT afdeling die in Utrecht bestaat uit vijf personen, namelijk een leidinggevende, drie systeem- en netwerkbeheerders en een webmaster. De drie systeem- en netwerkbeheerders hebben de volgende infrastructuur in beheer.
– Ongeveer 200 workstations met Windows 7 of Linux (Debian) die verspreid staan over de werkplekken in het gebouw en gekoppeld zijn aan een intern netwerk (wired).
– Ongeveer 60 macbook pro’s die medewerkers in bruikleen hebben.
Een intern/gastennetwerk, zowel wired als wireless, door het hele gebouw.
– Serverruimte met webservers, data opslag, firewall, etc.
– Twee videoconferencing systemen.

De systeem- en netwerkbeheerders hebben ieder hun eigen specialiteiten, maar kunnen voor elkaar inspringen waar nodig. Omdat de afdeling drie verschillende platforms ondersteunt, is er een breed scala aan applicaties die beheerd moeten worden. Voor email wordt bijvoorbeeld Novell Groupwise gebruikt. Meer informatie over software ondersteuning staat in de SLA (zie bijlage 2).

Specialistische software wordt beheerd door de wetenschappelijk programmeurs die bij de verschillende wetenschappelijke en technische afdelingen in dienst zijn.


3. STAGEOPDRACHT 1

3.0 INLEIDING CHEMISCHE VERRIJKING VAN MELKWEGSTELSEL IN EEN CLUSTER
De big-bang is volgens modellen ongeveer 13.798+-0.037 miljard geleden geweest. Temperaturen waren toen heel hoog en het universum zetten zich uit. Nadat het begon af te koelen ontstonden er deeltjes genaamd quarks. Toen het universum nog verder afkoelde ontstonden de fundamentele krachten zoals ze nu bekend zijn en verdwenen de quarks en werden protonen en neutronen gevormd. De aanwezigheid van protonen en neutronen in combinatie met de bekende krachten leiden tot de big bang nucleosynthese. Dit is een nucleaire fusie waarbij verschillende helium en lithium gevormd werden.
Na verder afkoelen konden er hele grote structuren worden gevormd. Dit gaat dan over sterren en sterrenstelsels. Grote sterren eindigden met een Supernova explosie. Tijdens deze explosie worden al de omliggende lagen van de ster de ruimte ingeschoten. Door deze explosie worden verschillende zwaardere elementen gevormd door fusie en zwerven deze elementen als een gaswolk door het melkwegstelsel. Dit wordt het chemische verrijking genoemd.
Er zijn verschillende soorten supernova voorbeelden hiervan zijn; type 1a en core-collapse. Deze typen supernova geven allebei een explosie maar worden op een andere manier gevormd.
Type 1a
Er wordt geschat dat zo’n 60 procent van alle sterren zich in een dubbelster bevinden. Wat dit inhoudt, is dat twee of meer sterren om elkaar heen draaien. Dit kan een witte dwerg zijn( een ster die aan het einde van haar levenscyclus is gekomen) en een rode reus. Wanneer beide sterren aan het einde van hun levenscyclus komen, kan een witte dwerg de buitenste lagen van de rode reus aantrekken. Dit wordt accretie genoemd. Hierdoor neemt de massa van de witte dwerg toe en wanneer de ster een zonsmassa van ongeveer 1.4 zwaarder dan de massa van onze, stort hij binnen enkele seconden ineen. Een witte dwerg kan een maximale massa hebben van 1,2 zonsmassa. Dit houdt in dat een witte dwerg 1,2 keer zwaarder kan zijn als de massa als onze zon. Wanneer de dwerg zwaarder wordt en die limiet bereikt heeft stort hij door zijn eigen zwaartekracht binnen enkele seconden ineen. De hoge druk en temperatuur die bij deze instorting vrijkomen, veroorzaken kernfusies in de koolstof en zuurstof waaruit de witte dwerg bestaat. Deze reacties zijn dusdanig hevig dat de ster explodeert. In deze fusies worden verschillende elementen gevormd. De energie die bij dit verval vrijkomt verhit het exploderende gas nog eens. Het hete gas straalt die energie weer uit in vorm van licht (fotonen). Dit verklaart de helderheid van dit type supernova.
Type core-collapse(II)
De supernova die hierbij veroorzaakt worden komen van hele zware sterren. Voordat de ster een supernova wordt, bestaat hij eerst uit waterstof. Dit wordt door kernfusies binnen de ster weer omgezet tot helium en dat vervolgens tot koolstof en zuurstof. Zo ontstaan er telkens weer nieuwe elementen. De ster bestaat vervolgens uit verschillende lagen met elementen. Wanneer er ijzer ontstaat in de kern wordt de dichtheid zo groot dat de elektronen te dicht bij elkaar zitten. Dit zorgt ervoor dat de ster te zwaar wordt en implodeert de ijzeren kern. Door de implosie in de kern ontstaat er een schokgolf binnen de ster. Deze schokgolf in de kern ketst naar de buitenste lagen en zorgen ervoor dat een groot deel van de ster de ruimte in wordt geblazen, wat dus de supernova explosie is. Ook bij deze explosie worden er verschillende elementen gevormd tijdens de explosie.
Type AGB


3.1 AANLEIDING
Bij SRON wordt onderzoek gedaan naar de chemische verrijking van clusters van melkwegstelsels. De chemische elementen worden in clusters door verschillende typen supernovae geproduceerd. Voor het uitrekenen van verschillende typen supernovae in clusters wordt er op dit moment in SRON een klein programma gebruikt. De software vergelijkt modelberekeningen van de productie van elementen in supernovae met de gemeten hoeveelheden van elementen in clusters. Hierbij wordt er een verhouding berekend van de verschillende type supernovae in een cluster.
In het bestaande programma wordt geen rekening gehouden met radioactief verval van elementen. Dit betekent dus dat sommige isotopen uit het model nog instabiel kunnen zijn en vervallen naar een ander element bij een bepaalde tijd. Er is geen GUI voor gebruiksvriendelijkheid. Het moet via de command-line worden aangeroepen met verschillende parameters. In het programma zit geen plotextensie. De berekende waarde wordt geprint in het console en de data moet daaruit gekopieerd worden en in een ander programma gestopt worden die wel een grafiek kan plotten. Niet alle supernovaemodellen kunnen gebruikt worden. En alle data is met de hand berekend en zit al ingebakken in het programma. Bedrijfsbegeleider Jelle de Plaa heeft dit programma geschreven. Hij wilde dit programma graag verbeteren en optimaliseren maar is er nooit aan toegekomen. Daarna is een student Teodora Tsompanoglou bezig geweest om dit programma af te maken. Dit is niet haar niet gelukt maar zij heeft de hele database opgezet met de verschillende eigenschappen van elementen en heeft een algoritme gemaakt en geschreven in Fortran om het radioactieve verval door te rekenen naar stabiele isotopen.

3.2 OPDRACHTOMSCHRIJVING
Zoals hierboven al is vermeld is het de bedoeling dat het programma van Jelle de Plaa verbeterd gaat worden. Er moeten verschillende soorten supernovae modellen kunnen worden ingelezen. Het inlezen van de modellen wordt gedaan via een FITS database. Het gaat hier dan om type modellen; 1a, core-collapse supernovae en AGB sterren. Er moeten twee of meer supernovae in het programma geladen kunnen worden. De software gaat supernova modelwaarde doorrekenen tot er geen instabiele isotopen zijn. Voor core-collapse supernovae en AGB sterren moet er nog een extra stap uitgevoerd worden. Het gaat hier om het toepassen van de IMF. De IMF functie is een empirische functie die de verdeling van de initi??le massa’s voor een populatie van sterren beschrijft. De modelwaarden van de supernovae moeten nog geschaald worden t.o.v. de zon om er verder mee te rekenen in het programma. Het programma moet ook een cluster met verschillende elementen inladen. Er moet een ander optimalisatie algoritme gebruikt worden waarbij meer dan twee supernovaemodellen kunnen worden toegevoegd. Verder om gebruiksvriendelijkheid te vergroten wordt een gui toegevoegd aan het programma. De gebruiker kan dan gemakkelijk supernovaemodellen toevoegen of verwijderen. En daarbij een plotpakket waar grafieken worden getoond.
Dus het programma is onder te verdelen in verschillende taken. Hierbij gaat het over het inlezen van verschillende supernovae modellen, de modellen uitrekenen tot er geen radioactief verval optreedt, IMF functie toepassen op core-collapse supernovae en AGB sterren, het schalen van abundantie t.o.v. de zon, Inladen van een cluster, Het optimalisatieproces en de grafische user interface(GUI). Deze onderdelen moeten ook in deze volgorde worden uitgevoerd. Hieronder worden verschillende onderdelen los van elkaar behandelt.

ONTWERP
Om de losse onderdelen goed aan bod te laten komen, moest er een ontwerp gemaakt worden. Om een goed beeld te krijgen van de onderdelen zijn er kleine testprogramma’s gemaakt. Hierbij gaat het over het uitrekenen van stabiele isotopen, het in en uitlezen van FITS bestanden, het uittesten van de GUI, toepassen van IMF, schalen van abundantie t.o.v. de zon. De uitwerking van deze onderdelen worden later besproken als losse hoofdstukken.

Zoals boven al aan bod gekomen is, kunnen in het programma verschillende modellen aan bos komen. Hierbij gaat het over type 1a en core-collapse supernova en AGB sterren. Deze modellen hebben verschillende eigenschappen en worden dus in een eigen klasse gestopt. AGB sterren hebben veel dezelfde eigenschappen van een supernova en vooral vergelijkend met die van een type core-collapse. Omdat de modellen veel dezelfde eigenschappen hebben als die van een supernova is er gekozen deze klassen te laten overerven van de superklasse supernova.
De modellen moeten verschillende stappen ondergaan voordat er gerekend kan worden wat de verhouding is. Deze stappen komen hieronder aan bod. Zoals boven al aan bod is gekomen, moet het programma elementen doorrekenen tot er geen radioactief verval meer optreedt, wat dus betekend dat er doorgerekend moet worden tot de isotopen stabiel zijn. Voor een type 1a moet op een andere manier stabiele isotopen worden uitgerekend dan bij een type core-collapse. Om deze reden is er gekozen voor polymorfisme bij de supernovae zodat elke supernova een eigen implementatie heeft van een functie.
Omdat er een verhouding van verschillende supernovae of sterren in een cluster gegeven moet worden, is gekozen voor een cluster als een aparte klasse te maken. Een Cluster kan dan als object worden meegegeven in een parameter en zo gemakkelijk de waarde opvragen. Er zal ook altijd maar ‘?n cluster in het programma zijn. Er kan ook een gemiddelde waarden van meerdere clusters aanwezig zijn, maar er is maar ‘?n set abundantie tegelijk. Dit komt omdat er altijd maar met ‘?n cluster gerekend kan worden en het niet nodig is meerdere instanties te hebben.
Om niet alle losse onderdelen met verantwoordelijkheden van het programma in ‘?n klasse te stoppen, is gekozen dit onder te verdelen in aparte klassen. Dit heeft betrekking op het uitrekenen van stabiele isotopen en het optimaliseren van de modellen bij het cluster. Verder is er nog een klasse Controller die verantwoordelijk is voor het aansturen van alle losse onderdelen en de input en output van de GUI.
Voor het uitrekenen van stabiele isotopen is een klasse CalculateStableIsotope aanwezig. Alleen de supernovae klassen hebben een associatie met deze klasse. Omdat alleen maar stabiele isotopen voor hoeven uitgerekend worden bij de supernovaemodellen. Als de verschillende supernovaeklassen klaar zijn met het uitrekenen geen rede meer is deze klasse te gebruiken. Om deze reden is gekozen voor de klas singleton te maken. Verder wordt bij het aanmaken van de klasse beginwaarden ge??nitialiseerd zodat het programma er goed mee kan rekenen. Om deze stappen niet elke keer weer opnieuw uit te voeren is gekozen voor maar ‘?n instantie te maken van de klasse.
Voor het optimaliseren is er een klasse Optimization. Deze klas is verantwoordelijk voor het fitten van verschillende supernova modelwaarde bij waarde van een cluster. Voor het optimaliseren is ook gekozen voor deze klasse singelton te maken. Het is niet nodig om van deze klas meerdere instanties te hebben om dat er maar optimalisatie per keer kan worden uitgevoerd.
De klassen Optimization, CalculateStableIsotopes en supernova beschikken over de klasse database. De database klasse beschikt over informatie van eigenschappen van elk isotoop. Omdat deze geladen moet worden uit een FITS bestand is gekozen voor dit ‘?n keer te doen en in een klasse te stoppen. Hij beschikt ook over verschillende abundantiestandaarden van de elementen. Ook weer om deze reden is er ook weer voor gekozen de database klasse singelton te maken zodat niet telkens weer de data opnieuw moet worden ingelezen.
LOSSE ONDERDELEN MET IMPLEMENTATIE
Om de werking van het programma aan bod te komen worden hieronder de onderdelen beschreven met de implementatie. Deze onderdelen komen in volgorde van het programma aan bod.
Hieronder wordt de werking van de onderdelen van het programma beschreven met de implementatie.
3.2.1 INLEZEN VAN MODELLEN & CLUSTER
Voordat er gerekend kan worden met de data, moeten eerst de modellen of cluster aanwezig zijn. Hieronder komt de implementatie van de code aan bod met keuzes die gemaakt zijn voor het inlezen.
Het inlezen van supernova modellen wordt gedaan via een FITS database. FITS staat voor Flexible Image Transport System. Dit is een open standard en wordt gebruikt voor opslag, transmissie en verwerking van wetenschappelijke afbeeldingen en andere data. De FITS bestanden kunnen bekeken worden in het programma FITS viewer dat ontwikkeld is door NASA.
De supernovaemodellen worden niet aangeleverd in een FITS bestand. Helaas is het zo dat er geen standard formaat is waarin deze modellen worden weergegeven. Daarom is er vaak een grote diversiteit in formaten en volgorde waarin deze modellen worden aangeleverd. Omdat het programma al deze supernova moet kunnen inlezen, was het van belang dat er een standard formaat werd opgezet. De modellen van de type 1a en core-collapse verschillen onderling ook weer van elkaar.
Voor type 1a modellen moeten er maar 3 waarden worden opgeslagen. Namelijk;
Z waarde(atoomnummer) A waarde(massa van het atoom) Massa (de massa uit het model

Voor de core-collapse supernovae is het een ander verhaal. Omdat producten van de elementen afhangt van de massa van een ster. Verder in het verslag wordt hier een korte toelichting op gegeven.
Z waarde A waarde Massa 10 Massa 20 Massa 30 Enz.

Het programma moet ook metingen aan clusters kunnen inlezen. Het programma kan dit maar op ‘?n manier inlezen.
Z waarde(atoomnummer)
Massa
Foutmarge laag
Foutmarge hoog

Z (atomic number) Abundance Margin of error (low) Margin of error (high)

Implementatie
Om Fits bestanden te gebruiken in het programma is een library nodig om de data om te zetten in een FITS bestand. Deze library heet CFITSIO. Dit is een library geschreven in de taal c waarmee het mogelijk is te lezen en te schrijven in een FITS bestand. Verder zijn er ook nog andere libraries die gebaseerd zijn op Cfitsio maar die gebruikt kan worden in andere programmeertalen. Voorbeelden hiervan zijn pyfits, een python library en CCfits, een C++ library.
Voor het omzetten van de modellen in FITS bestanden is gekozen voor de taal python. Het voordeel hiervan is dat het flexibel en snel programmeren is. Hierdoor is het gemakkelijk variabelen met een ander datatype bij elkaar in een array te stoppen. Het nadeel is dat de rekenkracht minder is dan puur C. Voor het omzetten naar FITS bestanden is rekensnelheid niet nodig. In het programma is de library pyfits gebruikt.
Voor elk supernovamodel moest het python programma aangepast worden omdat de getallen in ieder model in een ander formaat staan. Hieronder de belangrijkste onderdelen in het python programma voor het omzetten van het model.

Hierboven is te zien hoe er in een FITS kolom geschreven kan worden. De naam van het kolom wordt aangegeven met de parameter name. De datatype moet ook worden aangegeven. Dit gebeurd in de parameter format. Hierin is: ‘I’ een integer en ‘A’ ASCII tekst. Als laatste moet de array waarin de waarden van de modellen staan worden meegegeven. Deze staat in de parameter array.

De verschillende kolommen moet dus samengevoegd worden in de juiste volgorde. Dit wordt gerealiseerd door de functie Colfdefs aan te roepen en in kolommen te stoppen. Dan wordt een tabel aangemaakt waar de kolommen in verwerkt worden. Als laatste wordt de naam aan het tabel gekoppeld en in het FITS bestand geschreven.
Niet alleen de supernovaemodellen moeten worden ingelezen maar ook de verschillende abundantiestandaarden. Dir zijn tabellen met de relatieve elementen in de zon. Deze zonneabundantie worden gebruikt als referentie om de metingen in clusters mee te vergelijken. Er is gekozen dit ook in een FITS bestand te schrijven. Dit is op dezelfde manier gedaan zoals het schrijven van de supernovaemodellen naar een FITS bestand.

Om calculaties te kunnen doen voor het doorrekenen tot stabiele isotopen in modellen, is een database nodig met de eigenschappen van deze isotopen. Voor de opdracht was deze database al opgezet. Dit is een database met isotopen van waterstof tot zink waarin verschillende eigenschappen in staan zoals; massa, halftime, dochter isotoop en nog meer.
Een bepaald isotoop bestaat uit een Z en een A waarde. Dit is een uniek paar voor elk isotoop. Hierin is Z de nummer van protonen en elektronen in de kern van een atoom en A het aantal protonen en neutronen in een atoom. Een ouder wordt gezien als een isotoop met een Z en een A waarde. Als een isotoop radioactief is, kan deze vervallen naar een ander isotoop. Het isotoop waarin het radioactieve isotoop kan vervallen, wordt het dochter isotoop genoemd.
Hieronder een stukje uit de database met beschrijving. Voor meer informatie kan bijlage 1 bestudeerd worden.
1. De waarde van de ouder is een uniek paar voor elk isotoop.
2. Mass is de atomaire massa van het isotoop in de massaeenheid amu waar
3. Half-life waarde in seconden met betrouwbaarheid van de waarde. De half-life, in het Nederlands halveringstijd, is de te tijd dat de helft van het aantal isotopen is vervallen.
4. Q-value is het verschil is in energie tussen de ouder en dochter isotoop in kilo elektron volt (KeV).
5. Branching is de fractie van de bijhorende verval modus uitgedrukt in percentage
6. De abundantie van het isotoop op aarde uitgedrukt als fractie van
7. Daughter element is het bijhorende dochter element uitgedrukt elementnaam met de A waarde. Een radioactief element kan vervallen na een bepaalde tijd in een ander isotoop.
De laatste twee kopjes in de tabel zijn referenties van de data in de tabel. Dit is terug te vinden in bijlage 1.

Inlezen in het programma
Nu de modellen zijn opgeslagen in aparte FITS bestanden, is het de bedoeling dat het programma deze kan uitlezen. Dit wordt gedaan met de C++ library CCFits. Omdat elke supernovae en database klasse een FITS bestand op een andere manier moet uitlezen, komt in elke klasse een eigen implementie.
Implementatie inlezen 1a supernova

Om een FITS bestand in C++ te openen moet een speciale pointer gebruikt worden. Dan wordt een nieuw FITS object aangemaakt. Als dit niet lukt, ontstaat er een FITS error. Deze wordt opgevangen in de try catch. Als er geen errors aanwezig zijn, wordt een tabel gekozen uit het bestand. Het kan voorkomen dat er meerdere tabellen in een FITS bestand zitten. Bij type 1a supernova is dit niet het geval. Extension(1) staat dus voor het selecteren van het eerste tabel. Dan wordt een functie aangeroepen setModelValues waar de modellen in vectoren worden gestopt. In de read functie wordt in de eerste parameter de vector opgegeven waarin gekopieerd moet worden. De tweede is de index van het element waarvan gekopieerd moet worden. En als laatste moet de lengte worden meegegeven van de elementen die gekopieerd moeten worden.

Implementatie inlezen core-collapse supernovae

Voor type core-collapse wordt het op een andere manier gedaan. Hier wordt alleen het FITS bestand ingelezen. In de controller wordt dan gekeken of er meer sub-modellen zijn.

Wanneer een submodel gekozen is wordt de index meegegeven. Dit is de tabel die de gebruiker geselecteerd heeft in het FITS bestand. Daarna wordt de functie setModelValues aangeroepen.

Voor type core-collapse is het inlezen een ander verhaal. Omdat deze modellen meerdere kolommen kan bevatten voor verschillende zonsmassa’s. Daarom wordt het aantal kolommen opgevraagd zodat het programma weer hoe vaak er met de for loop gelopen moet worden. De Z en A waarde kunnen zonder problemen gekopieerd worden. Daarna wordt per kolom de waarde in een vector gestopt. Deze vector wordt aan een lijst toegevoegd. Deze stap wordt herhaald totdat alle kollommen aan de beurt zijn geweest. Ook worden de kolomnamen opgeslagen in een lijst, omdat in het programma deze later nog gebruikt wordt.
Implementatie inlezen database met isotopen

Bij de database is het inlezen vergelijkbaar als bij de type 1a supernova. Dit komt omdat het aantal kolommen bekend zijn.

Voor het inlezen van een cluster is gekozen voor een ASCII bestand. Anders moet elke keer de data worden omgezet naar een FITS bestand. De output van de analyse software SPEX, dat gebruikt wordt voor het onderzoeken van clusters, is meestal ASCII met een vast formaat. Verder komt het regelmatig voor dat de data in een cluster aangepast kan wordt. Een voorbeeld hiervan kan zijn dat data van verschillende satellieten worden samengevoegd voor een betrouwbaar resultaat. Door de data simpelweg te veranderen in een tekst bestand zijn er geen extra stappen aan verbonden dan wat er wel zou moeten zijn als je het in een FITS bestand wilt stoppen.
De reden waarom er dan wel gekozen is de supernovamodellen in een FITS bestand te stoppen, komt omdat de data van de supernovaemodellen telkens veranderen van formaat, maar eenmaal omgezet niet meer veranderen.
Voor het lezen wordt ifstream gebruikt om de data uit een bestand te verkrijgen. Dan wordt de functie getClusterValues() aangeroepen.

In de functie is te zien dat de waarden uit het bestand in tijdelijke variabelen worden gestopt, om vervolgens in een vector te worden gestopt. Bij de foutmarge is er nog een extra stap toegevoegd. Omdat de foutmarges kunnen verschillen wordt van de grootste foutmarge uitgegaan.

3.2.3 DE INGELEZEN MODELLEN UITREKENEN TOT ER GEEN RADIOACTIEF VERVAL MEER OPTREEDT.
Als de modellen aanwezig zijn kunnen ze in het programma ingeladen worden. Dan kan de volgende stap worden uitgevoerd. De productie van kernfusieproces met verschillende elementen in een supernovae kan leiden tot instabiele isotopen. Wanneer na een bepaalde periode de abundantie uitgerekend wordt, moet rekening gehouden worden met isotopen die nog radioactief zijn en kunnen vervallen. Bij bestaande supernovae modellen is dit niet altijd opgenomen en geeft dit dus een onbetrouwbaar resultaat wanneer er vergelijkingen gedaan worden met andere modellen. Om deze redenen worden voor alle modellen die ingeladen worden deze stap gedaan.
Er is voor gekozen dit tot een halftime van 1.0e+16 seconden te doen. Dit komt omdat het heelal sinds de big bang ongeveer 18 miljard jaar bestaat. Dat is omgerekend ongeveer 5,68e+ 17 seconden. Isotopen die ”””. de massa lager is dan 1.0e-30 AMU. Dit komt omdat anders het programma constant aan het rekenen is en de massa zo laag is dat het buiten beschouwing kan worden gelaten en verder geen effect heeft op het programma.
Deze berekening wordt achter elkaar toegepast per model. Zoals boven al is aangegeven bestaan de supernovae modellen uit een Z, A en massa. Dit zijn ook de benodigde parameters waarmee dit berekend kan worden voor een model. Verder moet er nog een connectie gemaakt worden met een FITS database waarin de eigenschappen van de isotopen staan.
Implementatie
Dit onderdeel was al ge??mplementeerd in een ander programma. In dit programma wordt een ASCII bestand ingeladen met daarin isotopen met verschillende massa’s in zonsmassa. De gebruiker kan een zelfgekozen tijd in seconden invoeren om te kijken welke isotopen in verloop van tijd zijn vervallen en gekeken kan worden hoeveel massa een isotoop beschikt. Omdat isotopen na een verloop van tijd in verschillende isotopen kan vervallen, kan de gebruiker een stapgrootte invoeren om te kijken in welke verschillende isotopen een isotoop vervallen kan zijn.
Het programma is geschreven in Fortran en moest omgeschreven worden naar C++. Verder zijn er aanpassingen gemaakt waardoor het programma te gebruiken was in ons programma. Het uitrekenen na een bepaalde tijd met een stapgrootte is geen onderdeel van het programma. Dit onderdeel is dus uit het programma geschrapt. Wat wel de bedoeling was, is dat de isotopen stabiel moeten zijn. Het programma blijft dus door rekenen tot alle isotopen stabiel zijn. Verder is het programma onderverdeelt in losse functies om leesbaarheid te vergroten. Voor verdere informatie van dit onderdeel (zie bijlage 1).


3.2.4 IMF FUNCTIE TOEPASSEN OP SNCC & AGB
De IMF is de volgende stap in programma. Dit geldt wel alleen voor de core-collapse supernova en AGB sterren. Eerst worden sterren gevormd, daarna kunnen die een AGB ster of een core-collapse supernova worden. Deze sterren worden gevormd met verschillende massa’s. Om de getallen begrijpelijk te houden worden de massa’s van sterren weergegeven t.o.v. de zon. Een ster met een zonsmassa van twee, wat wordt weergegeven als 2M’, betekend dat de ster twee keer zo zwaar is als die van onze zon.
De IMF functie is een empirische functie die de verdeling van de initi??le massa’s voor een populatie van sterren beschrijft. Empirisch betekend dat het berust is op waarnemingen. Er zijn meerdere vormen van de IMF maar wij gaan vooralsnog uit van de Salpeter IMF. De Salpeter functie is een machtswet functie met een index van 1.35 exponent.

-plaatje IMF formule-

De functie wordt gebruikt om de gemiddelde massa te bepalen van een isotoop in een groep sterren met verschillende zonsmassa. Dit wordt gedaan door het gewogen gemiddelde te nemen. Sterren met een lichtere massa komen vaker voor in het heelal dan sterren met zwaardere massa. Omdat meer lichte sterren aanwezig zijn, moeten deze dus zwaardere gewogen worden.
Dit is ook terug te vinden in de modellen van de supernova. Hierin staan de massa’s van isotopen van verschillende zonsmassa in kollommen naast elkaar.
De formule laat zien welke berekening gedaan moet worden om de massa te bepalen. Hierin is Mel gewogen gemiddelde massa van het isotoop over de hele sterpopulatie en elem de massa van het isotoop in het model. In de formule is te zien dat elem meerdere keer voorkomt. Voor de elem staat de massa van de ster in het model. Zoals al verteld is, zijn de massa’s van de modellen uitgedrukt in zonsmassa. Elem is dus de massa van het isotoop in het model met de daarbij horende zonsmassa.

Het kan ook voorkomen dat er bij hetzelfde model meerdere mogelijkheden zijn. Een voorbeeld hiervan is dat er een andere Zsolar ( abundanties van elementen in de zon) gebruikt word. Het kan voorkomen dat er bij andere modellen verschillende soorten zonsmassa in het model zijn opgenomen. De waarden van de zonsmassa’s in het tabel zijn de waarden waar gerekend mee moet worden.

Implementatie

Voor het implementeren van de IMF is gekozen dit in een functie te stoppen. Omdat het gaat over het toepassen van een wiskundige formule is het niet nodig dit in een aparte klasse te implementeren. Alleen type core-collapse en AGB hebben te maken met de IMF en daarom ook alleen een implementatie hiervan.
Voor het uitrekenen van de IMF heb je de verschillende zonsmassa’s nodig van het model. Als voorbeeld kunnen het; 10, 18, 20, 25, 30, 40, enz. zijn. De waarde van de zonsmassa staan in de kolomnaam als M10, M18, enz. M staat voor massa. Het programma leest de naam van het kolom uit om de zonsmassa’s te krijgen van de zonsmassa en daarmee door te rekenen. Er wordt door elk mogelijk isotoop gelopen. Daarna zijn er twee iterators die door de lijst lopen van de modelwaarden en een lijst met de namen van de kolommen. Als de modelwaarde niet 0 is wordt de naam opgevraagd. De formule wordt opgesplitst in de functie omdat eerst door elk model gelopen moet worden. De isotopen in het model van een zonsmassa worden berekend met de IMF en bij elkaar opgeteld. Als laatste wordt zoals in de formule te zien is, gedeeld om de massa van het isotoop te verkrijgen.

3.2.5 HET SCHALEN VAN ABUNDANTIE T.O.V. DE ZON
De volgende stap in het programma is de elementen in de juiste eenheid te converteren. Metingen van een satelliet worden weergegeven met een abundantie t.o.v. de zon. Om de modellen direct met de metingen te vergelijken, moeten de modellen(geproduceerde massa’s) per element omgerekend worden naar abundantie.
Om het aantal van een element te bepalen moet de geproduceerde massa in het model worden gedeeld met de werkelijke massa van het isotoop
Omdat er van het hetzelfde element verschillende stabiele isotopen beschikbaar zijn wordt er gerekend met het gewogen gemiddelde. Hieronder wordt er uitgegaan van het element O(zuurstof). De stappen die hieronder beschreven staan moeten voor elk element uitgevoerd worden van het model.
Formule aanpassen in latex

Omdat bij de kleine m onder de streep hetzelfde gedeeld wordt met wat er bij grote M staat kan deze formule ook anders worden beredeneerd.

Als dit berekend is moet het element geschaald worden met de abundantie van het daar bijhorende element. Om deze abundantie te verkrijgen wordt gebruikt gemaakt van de abundantiestandaard (Lodders et al.).
Verder uitwerken

Implementatie
Het schalen van de elementen t.o.v. de zon is voor elke supernova hetzelfde. Dit is ook simpelweg simpel te doen in een functie en zal daarom als abstracte functie ge??mplementeerd worden in de base klasse Supernova.
Zoals boven in de formules is te zien worden eerst de verschillende isotopen van het element in het model bij elkaar opgeteld. Dit wordt opgeslagen in de variabele M. Bij de variabele m is het bijna hetzelfde, alleen wordt het isotoop nog vermenigvuldigd met de atomaire massa van het isotoop.
Om leesbaarheid te vergroten wordt eerst het element in de variabele total, m en M met elkaar gedeeld. Dit wordt gedaan zoals boven is beschreven in de formule. Daarna wordt het element met de daar bijhorende abundantie gedeeld. Omdat deze abundantie gespecificeerd is als een logaritme moet er gerekend worden met een tiende exponent.

3.2.6 OPTIMALISATIEPROCES
De volgende stap is het optimalisatieproces. Het is de bedoeling dat de best passende combinatie van de modellen worden uitgerekend bij de metingen van het cluster. Hierin is het de bedoeling dat het verschil tussen model en data zo klein wordt gemaakt. Dit proces wordt ook wel het fitten van de data genoemd.
Dit kan door verschillende algoritmen gedaan worden. Voorbeelden hiervan zijn lineaire regressie en non-lineaire regressie.
Het optimalisatieproces moet twee of meerdere supernova kunnen fitten. Hieronder staat een functie waarvan drie verschillende supernovaemodellen gefit moeten worden bij de data van een cluster.

Figuur? functie om 3 verschillende type supernovae te optimaliseren
In figuur 2 is de functie te zien voor het optimaliseren van de verschillende type supernovae. Hierin zijn Y de som van de modellen die vergeleken worden met de metingen van de satelliet. Asn1a is type 1a supernova, Asncc is type core-collapse supernova en Aagb is type AGB ster. De beste waarden voor a, b en c moeten worden uitgerekend door het optimalisatiealgoritme.
Er is gekozen voor non-lineaire regressie algoritme. Een algoritme hiervan is het Levenberg Marquardt. Dit algoritme komt van het boek numerical recipes derde druk. Dit is een algoritme waar simpelweg alleen de functie van hoeft aangepast te worden en niet de gehele implementatie. Dit betekent dat een functie in het algoritme geladen kan worden en niet de gehele wiskundige uitwerking veranderd hoeft te worden.

Implementatie
In het algoritme zijn kleine veranderingen toegevoegd zodat het programma op de juiste manier mee kan werken. De gegeven functie moest dus zelf geschreven worden wat te zien is in figuur?.
Voor de optimalisatie is gekozen de supernovaemodellen in een lijst mee te geven en een cluster object. zie figuur?. De implementatie van het algoritme van numerical recipes gebruikt eigen datatypen en gaat het om deze situatie om vectoren. Daarom wordt in de constructor de data omgezet in vecDoub vectoren.
In de optimalisatie wordt het de klasse Fitmrq aangeroepen wat het daadwerkelijke algoritme is. Het Optimalize object wordt meegegeven zodat de functie kan worden aangeroepen vanuit dit object.

De functie die gebruikt wordt is fmins. De functie die te zien is in de formule is ge??mplementeerd in de functie. Hier worden de supernovaemassa’s vermenigvuldigt met de a waarden. Er is te zien dat geen a, b of c gebruikt wordt maar een vector a. hierin is a[0] = a, a[1] = b en a[2] = c. Het algoritme heeft ook de afgeleide nodig van de functie. Deze wordt in de variabele dyda gestopt.

Voor verdere werking van het algoritme kan het boek numerical recipes worden bestudeerd.
3.2.7 GUI

Nu alle rekenprocessen zijn voltooid is het de bedoeling dat de data op het scherm van de gebruiker wordt weergegeven. Om deze reden moet het programma beschikken over een GUI(grafische user interface). Hiervoor wordt gebruik gemaakt van de library Qt waarmee dit gemakkelijk gerealiseerd kan worden.
In de GUI is het van belang dat er bepaalde visuele elementen in voorkomen. Deze elementen zijn onder te verdelen in input en output. Voor de input moet het programma twee of meerdere supernovaemodellen kunnen selecteren en in sommige gevallen kan het voorkomen dat het model over een submodel beschikt. Deze moet ook geselecteerd kunnen worden. De helling van de IMF moet aanpasbaar zijn. De IMF heeft een standaard waarde. Verder zal de GUI volstaan met buttons waarmee de gebruiker de acties van het programma kan uitvoeren.
Voor de output moet een plotpakket beschikbaar zijn. QCustomplot is een extensie van Qt die dit mogelijk maakt. Hierin is het mogelijk meerdere plots op het scherm te tonen. In de plot staan de modellen die berekend zijn met het cluster. De elementen van het cluster worden ook geplot. Een toevoeging bij deze plot is dat ook de onzekerheden worden weergegeven met een verticale streep bij de elementen. Hoe langer de streep des te groter de onzekerheid is. Verder moeten de geselecteerde supernovae in beeld komen.
Het is ook de bedoeling dat een logpaneel in het programma beschikbaar is. Hierin kan de gebruiker gemakkelijk de vorige waarden van de berekeningen terugzien. Hierin is te zien welk model er geselecteerd is met daarbij de verhoudingen van de supernovae met onzekerheden, chi2 waarde en de d.o.f.(degrees of freedom).
Voorbeeld figuur plot’
Implementatie
In Qt bestaat er een optie dat de gebruiker handmatig een design kan maken voor de uiterlijk van het programma. Dit wordt gedaan in de design tab. Hierin worden input en output elementen geselecteerd. Bij elk element kan een bepaalde actie laten verlopen. In de design tab moet op een button rechtermuisknop gedrukt worden. Dan kan een actie geselecteerd worden. Dit wordt gerealiseerd door naar de functie Go to slot te gaan.
Er zijn verschillende acties die gedaan kunnen worden. Dit gaat bijvoorbeeld over als een button geklikt is, ingedrukt, losgelaten, vernietigd, enz. Het gehele programma gaat alleen maar uit van de actie als er op een button geklikt is. In Qt wordt deze actie clicked() genoemd.

Wanneer deze actie geselecteerd is, wordt in de header en implementatie bestand automatisch de functie ge??mplementeerd. In deze functie kan de gewenste code geplaatst worden wat er moet gebeuren als op de button geklikt wordt.

In de gui is ook een check box aanwezig om aan te geven of de elementen van het cluster al geschaald zijn naar ijzer. Als dit het geval is, moet de check box worden aangevinkt.

Voor het plotten wordt de extensie QCustomplot gebruikt. Deze moet geladen worden in de form als een widget. Om een grafiek te laten plotten heb je een x en y waarde nodig. De waarden van de verschillende assen staan in vectoren. Qt gebruikt eigen datatypen en ook hun eigen vectoren, namelijk een QVector. Als de data van een gewone vector geconverteerd is naar een QVector en worden geladen in de functie kan de grafiek geplot worden.

Bij het inladen van modellen is ervoor gekozen om een lijst te laten zien is met modellen die aanwezig zijn. Verder is het ook mogelijk dat een gebruiker een geselecteerd model kan verwijderen. Door gebruikt te maken van een listview, kon dit gerealiseerd worden.

Om de IMF te veranderen moet een optie worden toegevoegd. Dit wordt gedaan door een input box. Hier kan de gebruiker de juiste numerieke waarde invoeren om deze te veranderen. Als de gebruiker geen numerieke waarde in de input box stopt, geeft het programma een foutmelding.

Wanneer de gebruiker een fout model wilt laden, te vroeg wil optimaliseren, of andere dingen wilt doen die niet mogelijk zijn. Is er voor gekozen een foutmelding te geven aan de gebruiker.

Wanneer het programma klaar is met optimaliseren en de gebruiker wilt graag de gefitte grafiek plotten op het scherm, is er onder de plot ook de output beschikbaar.

SAVE AS”
Controller
De onderdelen die aan bod zijn gekomen moet gestuurd worden. Daarom is er een controller die verantwoordelijk is voor het regelen van alle losse onderdelen in het programma. Dit heeft betrekking op:
– Het aanmaken en verwijderen van de verschillende supernovae
– Aansturen van de supernovae voor de modelwaarden rekenen tot er geen instabiele elementen zijn
– Aansturen en veranderen van de IMF voor type core-collapse en AGB
– Aansturen van het schalen van abundantie van de supernovae
– Aanmaken en veranderen van een cluster
– Aansturen van het optimaliseren met de supernovae en cluster
– De gehele gui met input en output elementen
– De grafiek plotten met de modelwaarden, de beste fit en de meetpunten van de cluster met foutmarge
– Het uitrekenen van het resultaat van de juiste verhouding van supernovae bij een cluster
– Het uitrekenen van de chi2 waarde
Aanmaken supernova object in programma
Het aanmaken van een supernova begint in verschillende stappen. Eerst moet de gebruiker op een button klikken om de gewenste supernova te selecteren. In Qt heb je een functie die de filesystem opent waarin je het gewenste bestand kan selecteren en stopt het bestandspad in een string. Als de string niet leeg is wordt een nieuwe functie aangeroepen met de bestandsnaam waarin het object gemaakt wordt.

In de functie createSN1aObject wordt het object aangemaakt. Dan wordt het object in een lijst gezet waarin alleen maar supernova in kunnen komen. Dan wordt de naam van de supernova opgevraagd en in de lijst gezet wat in de gui wordt weergegeven. Als het proces mislukt wordt er een fout bericht gegeven aan de gebruiker en wordt geen object aangemaakt.

Bij het type core-collapse wordt een extra stap toegevoegd. Bij deze type supernovae is het mogelijk dat sub-modellen aanwezig zijn. Als meer dan 1 submodel aanwezig is, wordt daarvan de namen opgevraagd. Deze namen komen tevoorschijn in een dialog box. De gebruiker kan vanuit een drop-down menu de gewenste submodel selecteren. Dan wordt de naam van het model met de submodel naam in een lijst gezet wat in de gui wordt weergegeven. Wanneer het proces mislukt is de error afhandeling hetzelfde zoals hierboven is beschreven.

Aansturen van acties van de supernovamodellen.
De verschillende stappen die de supernovae moeten ondergaan worden doormiddel van een button worden start gezet. Om de calculaties van start te gaan moet meer dan een supernova geselecteerd zijn. Daarna wordt de daarbij horende functie aangeroepen die de stappen uitvoert per supernovae. De foutafhandeling is hetzelfde als bij de andere functies.

Omdat de verschillende supernova in een lijst staan, moet met een iterator door de lijst lopen. Dan wordt gekeken om wat voor supernova het gaat. De daarbij horende functies worden daarvan uitgevoerd. Door gebruik te maken van polymorfisme wordt voor elk type supernova de juiste functie aangeroepen. Voor de type 1a is dat het uitrekenen van stabiele isotopen en de modelwaarden schalen t.o.v. de zon. Zoals al vermeld is, hoeft bij een type 1a geen IMF gedaan worden. Voor type core-collapse en AGB precies is dit hetzelfde, alleen moet tussen de stappen de IMF worden uitgevoerd.

Aanmaken cluster object in programma
Voor het aanmaken van een cluster wordt precies dezelfde stappen gevolgd zoals dat gaat bij het aanmaken van een supernova. Het enige verschil is dat elk type bestand kan worden ingeladen en bij de supernovae kan dit alleen met de extensie ‘.fits’.

Voor het aanmaken van een cluster wordt eerst gekeken of de check box in de gui is aangevinkt. Wanneer dit wel het geval is moet de ingeladen data van het cluster geschaald worden naar ijzer. Daarna als er nog geen cluster aanwezig is wordt deze aangemaakt. Als de cluster al wel is aangemaakt worden de waarden in het cluster verandert met de waarden die in het nieuwe bestand staan.

Aansturen optimalisatieproces
Bij het aanmaken van een nieuw optimalisatieproces wordt gekeken of er wel supernovaemodellen of een cluster zijn geselecteerd. Als dit het geval is, wordt de optimalisatie uitgevoerd bij het aanmaken van het cluster.

GUI!?
Plotten

STAGEOPDRACHT 2

AANDLEIDING

Het programma SPEX is een softwarepakket geoptimaliseerd voor analyse en interpretatie van hoge-resolutie kosmische X-ray spectra. De software is vooral geschikt voor het fitten van spectra met r??ntgentelescopen in de ruimte. Het gaat hier dan om data zoals de die van de satellieten XMM-Newton, Chandra en Sazuku. Verder kan het lijsten van lijn transmissies, lijn emissiviteiten, en plots van absorptie of emissie spectra tonen.
Een spectrum is de hoeveelheid licht per golflengte (of energie) en dat de verschillende chemische elementen op verschillende golflengten ‘extra’ licht uitzenden of juist absorberen. Dat noemen we lijnen. SPEX is een programma om uit te rekenen hoe sterk die lijnen zijn en een beste schatting te maken van de eigenschappen van het gas dat de straling uitzend of absorbeert.
De SPEX software is een command-line programma en kan alleen via een terminal op de besturingssysteem Mac os en Linux worden aangeroepen. Hierin moeten verschillende commando’s achter elkaar worden ingevoerd. Wanneer er dus snel iets opgezocht moet worden, moeten alle commando’s opnieuw worden ingevoerd dit geld ook wanneer de waarde van een variabele snel veranderd moet worden. Dit betekend dat er veel tijdsverlies is aan het telkens opnieuw invoeren van commando’s.

OPDRACHTOMSCHRIJVING
Om snel een schatting te kunnen maken zonder heel SPEX zelf op te starten en een idee te krijgen hoe een lijn of een spectrum eruit ziet bij bepaalde standaard omstandigheden, is het de bedoeling dat er een webinterface gemaakt moet worden van het bestaande SPEX software.
Dit betreft niet de gehele software of een complete analyse, maar verschillende veel voorkomende cases die vaak door de sterrenkundigen opgezocht worden bedoeld voor een snelle schatting. Deze cases zijn opgelegd door de bedrijfsbegeleider Jelle de Plaa en gaan over de absorptie van CIE plasma, CIE plasma & NEI plasma. Deze onderdelen komen verder in dit verslag aan bod.
Het SPEX programma is geschreven in de taal Fortran. Dit is een oude taal die bijna tot geen interfaces heeft met websoftware. Verder is het ook de bedoeling dat de Fortran code niet aangepast mag worden. Omdat SPEX alleen via een terminal kan worden aangeroepen en het te kunnen laden in een webbrowser, moet er op een manier een proces worden aangeroepen waarin in gelezen en geschreven kan worden. Er is besloten dit met PHP te doen, omdat dit een taal is dat bedoeld is om op webservers dynamische webpagina’s te cre??ren.
Verder moet de structuur van de software duidelijk en gemakkelijk aan te passen zijn, zodat in de toekomst meerdere cases kunnen worden toegevoegd zonder veel kennis te hebben van de software.

BRUG TUSSEN PHP EN FORTRAN

De SPEX software is een programma dat aangeroepen moet worden via een terminal. Door commando’s in te voeren kun je berekeningen uitvoeren en in een tabel of grafiek laten zien. Door de uitkomst uit te lezen van de terminal via PHP is het mogelijk deze data uit te voeren op het scherm via een website.
Er zijn verschillende standaard functies in PHP om een proces te openen. De functie proc_open levert alle mogelijkheden om de interface te kunnen voldoen tussen de software SPEX wat geschreven is in Fortran en PHP. Deze functie voert namelijk een commando uit zoals dat gebeurt bij een terminal en opent file pointers voor input/output. Het openen van input en output file pointers is precies wat er nodig is. Met deze pointers is het mogelijk naar het proces te schrijven en te lezen.
Hieronder is te zien in figuur? hoe een proces op de juiste manier geopend moet worden in PHP.

Hierin is de eerste parameter in de functie proc_open het commando dat uitgevoerd moet worden. Dit is het commando wat daadwerkelijk in de terminal geschreven moet worden. Daarna volgt de descriptorspec. Dat is een ge??ndexeerde array waar de index een waarde vertegenwoordigd en die zal doorgeven aan het kind proces. Hierin is in het descriptorspec array de 0 de stdin stream, 1 de stdout stream en 2 de stderr stream. Dit zijn de standaard I/O streams van Linux. Er kunnen meerdere pipes(doorgangen in Linux) worden geopend, alleen is dat voor dit programma niet van toepassing. De variabele pipes is een ge??ndexeerde array met file pointers dat correspondeert naar het aantal pipes(doorgangen in Linux) er zijn gemaakt in de descriptorspec. Cwd is het locatie pad van het commando. Dit moet een absoluut pad zijn of de waarde NULL. Wanneer NULL is aangeroepen wordt het proces in de huidige locatie uitgevoerd.
In figuur? is te zien hoe er geschreven en gelezen kan worden van het proces.

In de fwrite functie is de eerste parameter de resource waarna de functie het toe moet schrijven. Zoals boven al is aangegeven is de array pipes met een index van 0 de stdin stream en wordt er zo naar het SPEX programma geschreven. Als tweede parameter wordt de string meegegeven wat er daadwerkelijk naar het proces geschreven moet worden. Het is belangrijk dat de string wordt afgesloten met het newline karakter (‘\n’). Elke commando in het SPEX programma wordt afgesloten met een enter. Door een newline karakter achter de string te plaatsen wordt dit gesimuleerd. Als dit niet gedaan wordt komt alles achter elkaar te staan als ‘?n lange string en wordt er niets uitgevoerd.
Wanneer er geschreven wordt naar een stream of bestand via de functie fwrite, is het belangrijk deze te sluiten zodat deze verder in het programma gebruikt kan worden. Dit wordt gerealiseerd door de functie fclose aan te roepen met als parameter de array pipes ge??ndexeerd op 0, wat dus de stdin stream is. Op deze manier kan er niet meer naar het proces geschreven worden.
De output die op het console uitgevoerd zou moeten worden zit nu opgeslagen in de array pipes ge??ndexeerd op 1. Dit is namelijk de stdout stream. Door in PHP de functie stream_get_contents aan te roepen, wordt de gehele output als een grote string in een variabele gezet en in dit geval in de variabele buf. De stdout stream moet ook weer gesloten worden zoals hierboven aan bod is gekomen.
Als er fouten ontstaan tijdens het uitvoeren van het proces worden deze ook op terminal uitgevoerd. Dit gebeurd niet wanneer het proces geopend wordt met PHP. Daarom worden de fouten in een apart tekst bestand geschreven. Dit wordt gedaan in de array pipes ge??ndexeerd op 2. Dit is namelijk de stderr stream.
Om het gehele proces te sluiten wordt de functie proc_close aangeroepen. De enige parameter die de functie heeft is het proces zelf. Het is belangrijk de verschillende pipes als eerst te sluiten voordat het programma wordt gesloten. Dit zorgt ervoor dat er een deadlock kan worden vermeden. Een deadlock is een situatie waarin twee processen dezelfde resources delen. Wanneer proces 1 resource a heeft en proces 2 resource b heeft en proces 1 resource b nodig heeft en proces 2 resource a nodig heeft voorkomen deze processen de toegang van de resources waardoor beide processen stoppen met werken.

CASES

CASE 1 ABSORPTIE VAN CIE PLASMA

Wanneer een gaswolk zich tussen een stralingsbron en een waarnemer bevindt, kan het gas straling absorberen van de bron achter de wolk. Effectief verwijdert de wolk de fotonen, van een specifieke energie, uit de bundel. Dit wordt zichtbaar in het spectrum van de bron als absorptielijnen. De sterkte van de waargenomen lijnen zijn afhankelijk van de ionisatie stadia en oppervlakte dichtheid(column density) van het gas. Absorptiespectra worden vaak waargenomen in het interstellaire medium en lichte accretie bronnen zoals X-ray binaries en AGN (active galactic nuclei).
Het ‘hete’ model berekent de overdracht van een (warm) gas in botsende ionisatie evenwicht. Dit betekend dat de ionisatiefasen van de ionen in het gas voornamelijk bepaald worden door de temperatuur van het gas.
Command file SPEX
Om deze case uit te voeren moet in het SPEX programma verschillende commando’s worden ingevoerd. In figuur? zijn de commando’s te zien. De commando’s die beginnen met een hekje(#) is commentaar en wordt niet door het programma opgenomen. In dit voorbeeld duidelijk gemaakt dat de nh, temperatuur, x en y reeksen van het plot en de ionen aanpasbaar moeten zijn.

CASE 2 CIE PLASMA

Een hete plasma is in botsingsevenwicht als het aantal ionisaties(botsingen tussen ionen en thermische elektronen) gelijk is aan het aantal elektron-ion recombinaties. De gemiddelde (warmte) energie van de elektronen, wat in feite de temperatuur van het plasma is, bepaalt de mate van ionisatie van de ionen. Met deze ionisatiebalans (berekend door Bryan et al. 2009) en atomaire gegevens wordt het emissiespectrum berekend.
CIE plasma dat X-rays uitstoten zijn vaak te vinden in de buurt van hete sterren, in het interstellaire medium en hete halo’s van sterrenstelsels en cluster van sterrenstelsels.

Command file SPEX
De commando’s die voor deze case moeten worden uitgevoerd staan in figuur ?.

Hierin moet de temperatuur, x en y waarden van de plot en het ion aanpasbaar zijn. Verder moeten er nog andere aanpassingen gedaan worden voor het selecteren van een interval. Dit is niet mogelijk in SPEX zelf en moet in PHP gedaan worden. De implementatie van proces wordt later in het verslag beschreven.

CASE 3 NEI PLASMA
Wanneer de temperatuur van een plasma plotseling verandert, bijvoorbeeld na een schokgolf, is het aantal botsingsionisaties is in het algemeen niet gelijk aan het aantal recombinaties. Om deze reden is het plasma niet in evenwicht(in tegenstelling tot CIE plasma). De ionisatiefasen van de ionen hebben tijd nodig om zich aan te passen aan de gewijzigde temperatuur van de elektronen, dat tot stand komt door botsingen tussen ionen en de (thermische) elektronen. De mate van ionisatie wordt dus bepaald door het aantal botsingen dat heeft plaatsgevonden sinds de shock gepasseerd is.
NEI plasma’s zijn kenmerkend voor jonge supernovaresten waar de schok van de explosie plotseling de omringende interstellaire medium heeft opgewarmd.
Command file SPEX
De commando’s die uitgevoerd moeten worden voor deze case staan in figuur!.

Deze case lijkt veel op de CIE plasma. De extra parameters die aanpasbaar zijn, temperatuur voor de schok, temperatuur na de schok en U(dichtheid). Net zoals bij het CIE model voor het selecteren van een interval wordt dit gedaan in PHP.

WEBINTERFACE
Voordat het uitvoeren van PHP naar de website wordt uitgelegd, is het nodig de elementen van de website toe te lichten.

In figuur ? is de webpagina te zien van de case Absorptie van een CIE plasma. In de webpagina bevindt zich een form veld waarin de gebruiker verschillende parameters kan aanpassen. In figuur ? was al duidelijk welke parameters aanpasbaar moeten zijn. Wat niet direct aanpasbaar was het opstellen van een limiet van de uitkomst van SPEX. Dit wordt verder afgehandeld in PHP.

OUTPUT VAN DATA
Het uitvoeren van de data op de website gaat wordt op twee verschillende manieren getoond. Als eerste is er een plot te zien met de lijnen of golflengtes te zien. Als tweede is een tabel met de lijnen en de daarbij horende data. Hieronder wordt uitgelegd hoe het er precies uit ziet en wat het betekend.
PLOT
In figuur ? is te zien dat bij het invullen van de temperatuur en een bepaald ion verschillende lijnen te zien zijn in de plot. Het interval en de flux range stellen de x en y assen voor van de plot. Er kunnen meerdere lijnen aanwezig zijn bij dit bepaald temperatuur en ion maar omdat er een range is ingesteld, is dit niet te zien in de plot. Deze plot met een golflengte is te zien in figuur?. In de plot zelf is ook te zien dat gebruiker een voor de golflengte heeft gekozen. Verder kunnen lijnen ook worden weergegeven als golflengte. Dan kan er op de radio button A gedrukt worden, wat voor Armstrong staat.

TABEL
In figuur? Is te zien hoe de tabel uitgevoerd wordt op het scherm. Hierin staan boven aan de tabel de kolomnamen met de betekenissen hiervan. Hierin is Line het lijnnummer zoals de lijn is opgeslagen in de database. Dit is een soort ID tag. Element staat voor het chemisch element wat dus het ion voorstelt. Een ion kan na een bepaalde energie licht uitzenden of absorberen. Hiervoor zijn er lower en upper levels uitgerekend wanneer dit het geval is. Energy is in kV en is de totale energie dat de lijn bevat. Wavelength is de golflengte van de lijn. En emission is de uitstraling van het aantal fotonen per seconde. Dit is een korte beschrijving van de onderdelen. Voor dit verslag is het niet van toepassing om de natuurkundige beredenering te beschrijven.
In figuur? zit ook nog een andere input parameter. Dit is de minimal emissivity. Omdat het SPEX programma soms meer dan 90.000 lijnen genereerd en de gebruiker soms een grenswaarde wil opstellen voor de emissiviteit, kan de gebruiker een waarde invullen. Dan zullen de lijnen die boven de grenswaarde liggen op het scherm worden uitgevoerd. Als laatste is er ook een check box input. Deze is een optie om alle lijnen op het scherm te laten uitvoeren.

In figuur ? is een gedeelte van de form te zien hoe in html variabelen worden gedeclareerd om deze dan uiteindelijk uit te kunnen lezen in PHP. Hierin moeten de input elementen altijd een naam bevatten(in de html code wordt dit aangegeven met de tag name). Deze naam wordt in PHP uitgelezen. Verder na de form tag is er een input element met een type ??hidden. Dit is een identificatienaam om in PHP de bijhorende functie aan te roepen. Verder staan er in de input elementen nog andere tags in. Hierin is value; de standaardwaarde die in het veld staat als de webpagina wordt bezocht, placeholder; Wanneer er geen waarden in het veld staan ingevuld is er een lichte placeholder tekst te zien in het form veld en required; Dit geeft aan of het input element altijd ingevuld moet zijn. Wanneer dit niet het geval is kan de form niet worden verzonden.
CASES UITVOEREN IN PHP
Omdat voor elke case de aanpasbare parameters duidelijk zijn, wordt de PHP implementatie slechts bij ‘?n case uitgelegd. Dit komt omdat de implementatie voor elke case bijna hetzelfde is.
Er is maar ‘?n bestand, namelijk; cases.php, waarin alle PHP wordt aangeroepen. Hier is specifiek voor gekozen om uitbreidbaarheid gemakkelijk te realiseren. Dit komt omdat er simpelweg een extra functie ge??mplementeerd hoeft te worden en een extra case in het switch statement. Hierdoor hoeft er niet bij elke nieuwe case een nieuw bestand aangemaakt te worden. In figuur ? is te zien dat door de POST met de naam type uit te lezen, wat de identificatienaam is in de html, er vergeleken kan worden met de namen die voorkomen in het case statement. Als deze naam bestaat wordt de juiste functie aangeroepen bij de case.

Het uitlezen van de form waarden in PHP is te zien in figuur? Deze worden allemaal in een eigen variabele toegekend. Hierin is te zien dat er korte if-statements worden gebruikt. Wanneer er geen post voorkomt en de gebruiker niet heeft ingevoerd in het form veld, dan wordt er een standaard waarde aan de variabele toegekend. Dit is eigenlijk al opgevangen in html maar soms ontstaan er rare situaties bijvoorbeeld; door gebruik van verouderde browsers. Om die reden is gekozen het in PHP extra op te vangen. Als een POST bestaat, wordt er bij variabelen de extra functie floatval aangeroepen. Deze functie zorgt ervoor dat PHP weet welke variabelen tekst of een numerieke waarden bevatten.

In figuur ? s te zien dat er in bepaalde regels woorden met een dollar teken beginnen($). Dit zijn de variabelen die door de gebruiker te veranderen zijn. Verder is in het figuur? te zien dat er sommige regels veranderd zijn dan de originele regels. Dit komt omdat bij het voorbeeld uit figuur ? direct de uitvoer en de plot op het scherm van de gebruiker wordt getoond als het direct in SPEX wordt ingevoerd. Voor de webinterface is dat een ander verhaal omdat dit simpelweg niet kan. Daarom is besloten eerst de afbeelding van de plot op te slaan op de server en dan vanuit PHP via html op de afbeelding op de website te vertonen. Het opslaan bevindt zich in de regel; ‘plot dev gif absorptoin.gif’.

Plaatje op de website

Het uitprinten van html code in PHP kan simpelweg met de functie echo worden uitgevoerd. Het afbeelden van een plaatje wordt simpelweg door de tag img gedaan. Hierin is als toevoeging de tijd bij de bestandsnaam van het plaatje. Dit komt omdat de gebruiker hetzelfde plaatje kan aanpassen op de huidige pagina. In de webbrowser wordt het plaatje opgeslagen in het cash geheugen. Als er veranderingen worden toegekend aan het plaatje worden deze niet opnieuw herladen. Door simpelweg de tijd toe te voegen bij het aanroepen van de afbeelding wordt dit probleem verholpen.
Verwerking van data uit SPEX
Wanneer de case wordt uitgevoerd in SPEX levert dit duizenden regels aan output op. Er is geen optie om specifieke regels uit te printen binnen een bepaalt interval. Verder worden bij sommige gevallen extra blokken data meegegeven of bestaan juist uit regels met enters. Daarom was het van belang eerst de output te bestuderen om te kijken of er een manier was om de output op de juiste manier op de website te laten vertonen.
De oplossing was het opzoek gaan naar een bepaalde steekwoorden die in de output voorbijkwamen en dan het aantal regelnummers te tellen. Deze steekwoorden bevinden zich meestal boven de data. Als de regelnummers bekend waren, kan er vanaf een bepaald regelnummer de data vertoond worden op het scherm. Dit wordt dan gedaan met de functie echo met de juiste html styling.

In figuur? Is te zien hoe het tellen van de regelnummers ge??mplementeerd is. Hierin is te zien dat bij de case absorptie van een CIE plasma twee blokken data aanwezig zijn. Door in de code in een if-statement de regel te vergelijken met het steekwoord wordt de juiste regelnummer toegekend aan de bijhorende variabele.
Uitprinten begin van de html list

In figuur? Is te zien hoe het begin van een lijst wordt ge??mplementeerd in PHP. Hierin is te zien dat er verschillende classes per tags zijn toegekend. Dit heeft te maken omdat elke klasse zijn eigen stijl krijgt in CSS.

In figuur ? is te zien hoe het eerste blok van data wordt uitgelezen en vervolgens getoond wordt in html. Zoals boven al vermeld was, werd een regelnummer gespecifieerd bij een bepaald steekwoord. In de for loop is dat te zien want de loop begint met tellen vanaf de waarde van de variabele. Daarna wordt het array buf uitgelezen en woorden alle losse woorden, wat daadwerkelijk de uitkomstwaarden zijn, opgeslagen in een variabele. Daarna worden deze in het echo statement naar de website getoond.


Display van interval
Bij de case absoptie van een CIE plasma, geeft SPEX een extra tabel met data mee. Het is de boedling dat de gebruiker een bepaald limiet kan opgeven bij een bepaalde grenswaarde van de deze uitkomst van SPEX. In dit voorbeeld kan de gebruiker uit drie verschillende limieten kiezen. Omdat dit niet kan in het SPEX programma moet dit gedaan worden in PHP.
Het beginnen bij de juiste regel wordt op dezelfde manier gedaan zoals hierboven al is uitgelegd. Als de gebruiker een limiet heeft ingesteld wordt er simpelweg gekeken of de waarde van dat limiet boven de grenswaarde ligt. Als dit het geval is wordt de data via een functie printAbsop uitgeprint. Deze implementatie van de functie is bijna identiek aan die uit figuur?. Alleen sommige benamingen zijn anders.

Verschillende grootte data in CIE en NEI plasma
Bij het uitvoeren van deze cases kan het voorkomen dat bij de data sommige regels meer aantal waarden bevatten. Dit is vervelend als de PHP een bepaald aantal waarden verwacht. Daarom wordt voor elke regel het aantal waarden geteld. Als het aantal bekend is wordt er een PHP een specifiek index toegekend aan bepaalde variabelen. Nu kan PHP de juiste index van het array uitlezen zonder dat er segmentatiefouten bevinden.


TIPS EN ADVIEZEN


4. ONTWIKKELOMGEVING

Een belangrijk onderdeel van de software was dat het moet kunnen draaien op het besturingssysteem Linux. Om deze reden wordt de software ook gerealiseerd op Linux. De programmeertalen die gebruikt worden zijn Python en C++. De compilers zijn al standard geconfigureerd en kan er direct geprogrammeerd worden. De tekst-editors die gebruikt worden zijn sublime-text-3 en QTcreator. Sublime heeft een persoonlijke voorkeur dan andere tekst-editors. De rede waarom QTcreator gebruikt wordt, is omdat er gemakkelijk een GUI gerealiseerd kan worden. Verder wordt de library CCFITS gebruikt voor het lezen en schrijven in een FITS database en QCustomplot voor het plotten van grafieken.
Voor het uitwerken van documentatie en andere zelfgeschreven documenten wordt dit geschreven in het programma word op een zelf meegenomen laptop.

5. RELATIE MET DE HOGESCHOOL UTRECHT

In dit hoofdstuk wordt er beschreven in hoeverre de stage gebruikt maakt van wat er op de opleiding geleerd is en een aanvulling is. Verder wordt het overleg met de stagedocent besproken.

5.1 KENNIS
Voor het uitvoeren van de opdracht is kennis van programmeren een vereiste. Door kennis te hebben van de verschillende programmeertalen die op school geleerd zijn, was het geen probleem de taal Fortran snel te begrijpen en om te schrijven naar een andere programmeertaal. Verder komt het van pas dat op school het vak softwareontwerp gehad hebben. Omdat de software zelf geschreven moet worden van het begin is verstandig goed over het ontwerp na te denken. Elementen die op school zijn geleerd kunnen nu toegepast worden. Dit gaat over het maken van een ‘use case’, klassendiagram.
Verdere aanvulling die stage aanbiedt heeft ook toepassing op niet software gerelateerde zaken. Dit geldt het professioneel werken, planmatig werken, overleggen met bedrijfsbegeleider. Omdat het een internationaal bedrijf is wordt veel in het Engels gepraat en moeten documenten in het Engels geschreven worden. De Engelse taal wordt hierdoor sterk verbeterd.
Omdat het bedrijf zich bezig houdt met het onderzoeken van ruimte-gerelateerde zaken. Worden er presentaties gehouden en worden deze door iedereen van de afdeling bezichtigd. Door naar deze presentaties te gaan wordt er ook kennis van opgenomen.

5.2 OVERLEG MET STAGEDOCENT
Overleg met de stagedocent gaat via email. Wanneer de stagedocent op bezoek komt bij het stagebedrijf wordt er mondeling gecommuniceerd.


6. REFERENTIES
Cornet, G. (n.d.). Ruimteonderzoek in Nederland. SRON.
Flannery, B. P., Press, W. H., Teukolsky, S. A., & Vetterling, W. T. (2007). Numerical recipes: The Art of Dcientific Computing, derde druk. Cambridge University Press.
lisa-het_genie. (2008, 10 16). Supernovae, het einde van een ster. Retrieved from wetenschap.infonu.nl: http://wetenschap.infonu.nl/sterrenkunde/26223-supernovae-het-einde-van-een-ster.html
Plaa, J. d. (2012). The origin of the chemical elements in cluster cores.
Plaa, J. d., Bleeker, J., Vink, J., Kaastra, J., & M??ndez, M. (2007). Constraining supernova models using the hot gas in clusters of galaxies.
SRON. (z.d.). Mission and strategy. Opgehaald van https://home.sron.nl/mission-and-strategy-about-sron-595

http://en.wikipedia.org/wiki/FITS
7. BIJLAGEN
Het invoegen van de pdf’s in het word bestand resulteert tot raar gedrag van het originele document. Daarom is er besloten deze bestanden los mee te sturen.
6.1 BIJLAGE 1
Zie bestand: bijlage1.pdf.
6.2 BIJLAGE 2
Zie bestand: bijlage2.pdf.

Leave a Comment

Time limit is exhausted. Please reload the CAPTCHA.