Univerzita Karlova v Praze Matematicko-fyzik´aln´ı fakulta
Vizualizace molekul popsan´ ych v ˇ zenevsk´ em n´ azvoslov´ı Jan Proch´azka
Souˇc´ast´ı t´eto pr´ace je i CD, jehoˇz obsah je moˇzn´e st´ahnout na adrese: http://hippies.matfyz.info/projekty/chenom
ˇ 2008 SVOC,
Obsah ´ 1 Uvod
4
2 Problematika organick´ e chemie 2.1 N´azvoslov´ı . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2 Grafick´a reprezentace molekul[5] . . . . . . . . . . . . . . . . .
6 6 7
3 Dekompozice
12
4 Technick´ a realizace – j´ adro 4.1 Scanner . . . . . . . . . . 4.2 Parser . . . . . . . . . . . 4.3 Semantika . . . . . . . . . 4.4 Model . . . . . . . . . . . 4.5 Grafika . . . . . . . . . .
14 14 15 17 18 20
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
5 Technick´ a realizace – rozhran´ı 23 5.1 run-console . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 5.2 HTTP server . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 6 Probl´ emy implementace 6.1 Pˇrid´av´an´ı trivi´aln´ıch n´azv˚ u. . . . . . 6.2 Tˇr´ıda jazyka organick´e chemie . . . . 6.3 N´azvy ˇcin´ıc´ı komplikace . . . . . . . 6.4 Konstituce, konfigurace, konformace . 7 Uˇ zivatelsk´ a dokumentace 7.1 Instalace . . . . . . . . . . . . 7.1.1 Windows . . . . . . . . 7.1.2 Linux . . . . . . . . . 7.2 Obsluha pˇres WWW rozhran´ı 7.3 Obsluha z pˇr´ıkazov´e ˇr´adky . . 7.4 Manipulace s modelem . . . . 2
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . .
. . . . . .
. . . .
. . . . . .
. . . .
. . . . . .
. . . .
. . . . . .
. . . .
. . . . . .
. . . .
. . . . . .
. . . .
. . . . . .
. . . .
. . . . . .
. . . .
. . . . . .
. . . .
. . . . . .
. . . .
. . . . . .
. . . .
. . . . . .
. . . .
. . . . . .
. . . .
25 25 25 26 27
. . . . . .
28 28 28 29 29 29 30
7.5
Konfigurace . . . . . . 7.5.1 Datab´aze n´azv˚ u 7.5.2 Skripty . . . . . 7.5.3 WWW rozhran´ı 7.5.4 Vzhled modelu
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
30 30 31 31 32
8 Z´ avˇ er 35 8.1 Moˇznosti rozˇsiˇrov´an´ı . . . . . . . . . . . . . . . . . . . . . . . 35 8.2 Alternativn´ı implementace . . . . . . . . . . . . . . . . . . . . 36 8.3 Porovn´an´ı s existuj´ıc´ım SW . . . . . . . . . . . . . . . . . . . 36 Pouˇ zit´ a literatura
37
A S´ emantika - jazyk A.1 Konstanty . . . . . . . A.2 Parametry – reference A.3 Instrukce . . . . . . . . A.3.1 Konvence: . . . A.3.2 INT – ˇc´ıslo . . A.3.3 STR – ˇretˇezec . A.3.4 MOL – skelet .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
38 38 38 39 39 40 40 41
B index.htm
44
C Skripty C.1 START.bat . . C.2 START.sh . . . C.3 run.bat . . . . . C.4 run.sh . . . . . C.5 run-console.bat C.6 run-console.sh .
. . . . . .
45 45 45 45 46 47 48
. . . . . .
49 49 49 50 52 53 53
. . . . . .
D Datab´ azov´ e soubory D.1 settings.ini . . . . D.2 konstanty.txt . . D.3 terminaly.gra . . D.4 gramatika.gra . . D.5 prvky.gra . . . . D.6 sablona.wrl . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
3
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
Kapitola 1 ´ Uvod Chemie je dnes jedn´ım z nejrychleji se rozv´ıjej´ıc´ıch a nejv´ıce vyuˇz´ıvan´ ych vˇedn´ıch obor˚ u. Uplatnˇen´ı nach´az´ı takˇrka vˇsude, napˇr´ıklad v potravin´aˇrstv´ı (potravin´aˇrsk´a chemie), v kaˇzd´e v´ yrobn´ı hale (chemie materi´al˚ u), pˇri v´ yrobˇe l´eˇciv (farmakologick´a chemie), umˇel´ ych c´ev, hnojiv, polovodiˇc˚ u nebo v´ ybuˇsnin. Chemie se dˇel´ı na anorganickou a organickou. P˚ uvodnˇe toto rozdˇelen´ı bylo velmi intuitivn´ı, protoˇze vz´ajemn´a pˇremˇena mezi slouˇceninami organick´ ymi (ze ˇziv´e pˇr´ırody) a anorganick´ ymi (z neˇziv´e) byla nezn´am´a, ale od roku 1828 jsou tyto pˇremˇeny zn´amy a hranice tedy mus´ı v´est jinudy. V souˇcasnosti je definov´ana organick´a chemie jako chemie slouˇcenin uhl´ıku. Velmi dlouhou dobu byla takˇrka veˇsker´a pozornost soustˇredˇena na chemii anorganickou. Pot´e, co nov´e znalosti vˇedeck´e ˇcinnosti v organick´e chemii zaˇcaly nach´azet sv´e uplatnˇen´ı v komerˇcn´ı pr˚ umyslov´e praxi, z´ajem se pˇresunul k organick´e chemii. Dnes pozorujeme pˇresnˇe opaˇcn´ y trend – neuvˇeˇriteln´ y rozvoj tohoto odvˇetv´ı a jeho uplatˇ nov´an´ı v oborech, kde by to dˇr´ıve nikdo neˇcekal (napˇr´ıklad izolaˇcn´ı materi´aly ve stavitelstv´ı). S t´ım souvis´ı potˇreba rychlejˇs´ı, ale z´aroveˇ n pˇresn´e komunikace. Pojmenovat 13 milion˚ u zn´am´ ych slouˇcenin tak, aby podle jm´ena byla snadno rozpoznateln´a vnitˇrn´ı struktura a z´aroveˇ n si pˇri tom nechat prostor pro jm´ena novˇe vznikaj´ıc´ıch slouˇcenin, nen´ı zrovna snadn´e. Pro tyto u ´ˇcely existuje systematick´e n´azvoslov´ı. Vedle systematick´ ych n´azv˚ u existuj´ı jeˇstˇe n´azvy tradiˇcn´ı, semisystematick´e nebo trivi´aln´ı, kter´e by sice bylo moˇzn´e nahradit, ale za cenu ztr´aty srozumitelnosti (benzen by se oznaˇcoval jako cyklohexa-1, 3, 5trien). Jako systematick´e n´azvoslov´ı se oznaˇcuje pojmenov´an´ı slouˇcenin podle pravidel vytvoˇren´ ych a publikovan´ ych IUPAC (Mezin´arodn´ı unie pro ˇcistou ˇ a aplikovanou chemii). Cesk´ y pˇreklad t´eto tzv. ,,Modr´e knihy” (z anglick´eho origin´alu) tato pravidla z´aroveˇ n pˇrizp˚ usobuje potˇreb´am ˇcesk´eho jazyka. 4
Posledn´ı aktualizace systematick´eho n´azvoslov´ı probˇehla v roce 1993 (ˇcesky 2000)[1, 2]. Vedena byla snahou v´ıce zesystematizovat souˇcasn´e n´azvoslov´ı, odstranit potenci´aln´ı m´ısta nedorozumˇen´ı a hlavnˇe s´ıl´ıc´ı potˇrebou nejen jednoznaˇcnosti, ale tak´e jedineˇcnosti n´azv˚ u. Souˇcasn´ y stav, kdy pro vˇetˇsinu slouˇcenin existuje v´ıce variant pojmenov´an´ı, dˇel´a velk´e probl´emy napˇr´ıklad pˇri sestavov´an´ı rejstˇr´ık˚ u (vznik kˇr´ıˇzov´ ych odkaz˚ u a v´ıcen´asobn´ ych hesel)[3]. ˇ y pˇreklad pak vyuˇzil pˇr´ıleˇzitosti ,,nutn´e” aktualizace a zaˇclenil nav´ıc Cesk´ do nov´ ych pravidel zmˇeny z´apisu tam, kde ˇslo o neopodstatnˇenou odchylku od anglick´e pˇredlohy. Negativn´ımi d˚ usledky jsou neznalost a nedodrˇzov´an´ı – zvl´aˇstˇe kdyˇz se jedn´a pouze o kodex a nikoliv o normu. Jen m´alo lid´ı dnes ovl´ad´a spr´avn´e ˇcesk´e organick´e n´azvoslov´ı a s chybami je moˇzn´e se setkat nejen u laick´e veˇrejnosti ˇci publicist˚ u, ale dokonce i u lid´ı pˇredn´aˇsej´ıc´ıch chemii na vysok´ ych ˇskol´ach nebo na pˇr´ıbalov´ ych let´ac´ıch l´ek˚ u. Motivac´ı pro vznik t´eto pr´ace byla v´ yˇse zm´ınˇen´a problematika. C´ılem bylo vytvoˇrit prostˇred´ı, ve kter´em by si mohl uˇzivatel zobrazit prostorov´ y model organick´e slouˇceniny podle jej´ıho ˇcesk´eho n´azvu. Pˇriˇcemˇz pr´ace nemˇela ambice poskytnout realistick´ y model ani pokr´ yt cel´e organick´e n´azvoslov´ı (protoˇze obˇe tyto problematiky jsou znaˇcnˇe rozs´ahl´e), ale byla vedena tak, aby mohla b´ yt do takov´eho rozsahu dodateˇcnˇe rozˇs´ıˇrena.
5
Kapitola 2 Problematika organick´ e chemie 2.1
N´ azvoslov´ı
Organick´a chemie pracuje oproti anorganick´e s mnohem vˇetˇs´ım mnoˇzstv´ım slouˇcenin. Ty mohou nav´ıc tvoˇrit v´ yraznˇe sloˇzitˇejˇs´ı struktury. Z toho vypl´ yv´a, ˇze i n´azvoslov´ı je komplikovanˇejˇs´ı. N´azvoslov´ı anorganick´e chemie je (speci´alnˇe v ˇceˇstinˇe) v´ yraznˇe struˇcnˇejˇs´ı. Existuje jen nˇekolik m´alo druh˚ u slouˇcenin (kyseliny, z´asady, soli, . . . ), nav´ıc tyto slouˇceniny z pravidla obsahuj´ı jen mal´ y poˇcet atom˚ u, takˇze nen´ı nutn´e bl´ıˇze popisovat vnitˇrn´ı strukturu (je totiˇz i tak jednoznaˇcn´a). O tuto pˇrehlednost se zaslouˇzil Dr. Emil Votoˇcek, kter´ y vyuˇzil toho, ˇze je ˇceˇstina flexn´ı typ syntetick´eho jazyka a uˇzil koncovek k zanesen´ı informace o valenc´ıch atom˚ u do n´azvu. N´azvy v organick´e chemii se dˇel´ı na trivi´aln´ı, semisystematick´e/semitrivi´aln´ı a systematick´e. Trivi´aln´ı n´azev je n´azev, jehoˇz ˇz´adn´a ˇc´ast nepoch´az´ı ze systematick´eho n´azvoslov´ı (napˇr. moˇcovina). Semisystematick´ y n´azev je n´azev, v nˇemˇz alespoˇ n jedna ˇc´ast je vytvoˇrena v systematick´em smyslu (napˇr. glycerol [ol], butan [an]). Systematick´ y n´azev na rozd´ıl od trivi´aln´ıho vyjadˇruje systematick´e zaˇrazen´ı popisovan´eho jevu, v tomto pˇr´ıpadˇe se ˇr´ıd´ı chemickou strukturou l´atky. S pojmem struktura souvis´ı dalˇs´ı pojmy, a to konstituce (vz´ajemn´e spojen´ı atom˚ u vazbami a typy vazeb), konfigurace (uspoˇr´ad´an´ı atom˚ u v prostoru, kter´e nen´ı moˇzn´e mˇenit volnou rotac´ı kolem jednoduch´e vazby) a konformace (uspoˇr´ad´an´ı atom˚ u v prostoru, kter´e je moˇzn´e mˇenit volnou rotac´ı kolem jednoduch´e vazby), jimˇz je pojem struktura nadˇrazen[4]. Systematick´e n´azvy se tvoˇr´ı pomoc´ı nˇekolika n´azvoslovn´ ych operac´ı. Vˇsechny pracuj´ı na stejn´em principu: pomoc´ı pˇredpony (popˇr. pˇr´ıpony, v´ yji-
6
meˇcnˇe vsuvky) aplikovan´e na p˚ uvodn´ı n´azev, vznik´a n´azev slouˇceniny po modifikaci pˇr´ısluˇsnou operac´ı. N´azvoslovn´e operace se dˇel´ı na • substituˇcn´ı – nahrazen´ı jednoho nebo v´ıce atom˚ u vod´ıku jin´ ym atomem nebo skupinou atom˚ u (upˇrednostˇ novan´a operace) (napˇr. CH4 [methan] ⇒ CH3 Cl [chlormethan]), • z´amˇenn´e – v´ ymˇena jedn´e skupiny atom˚ u nebo jednoho atomu jin´eho neˇz vod´ıku za jinou skupinu atom˚ u, resp. za jin´ y atom. (napˇr. CH3 − CH3 [ethan] ⇒ SiH3 − CH3 [silaethan]), • aditivn´ı – form´aln´ı skl´ad´an´ı n´azvu z ˇc´ast´ı beze ztr´aty atom˚ u nebo skupin z kter´ekoli ˇc´asti (napˇr.
[naftalen] + 4H ⇒
[1, 2, 3, 4-tetrahydronaftalen]),
• konjunktivn´ı – form´aln´ı spojen´ı n´azv˚ u jednotliv´ ych sloˇzek; odtrˇzen´ı stejn´eho poˇctu atom˚ u vod´ıku z kaˇzd´e sloˇzky v kaˇzd´em m´ıstˇe spojen´ı [benzen] + 2COOH [mravenˇc´ı kyselina] ⇒ (napˇr. 1,4-dimravenˇc´ı kyselina]),
[benzen-
• subtraktivn´ı – odstranˇen´ı atomu(˚ u), iontu nebo skupiny, jeˇz jsou implicitnˇe zahrnuty v n´azvu v´ ychoz´ı slouˇceniny (napˇr. CH4 [methan] ⇒ CH3 − [methyl]) a • n´asobic´ı – svazy obsahuj´ıc´ı dvoj- nebo v´ıcevazn´e substituenty (napˇr. N(CHCl − COOH)3 [2, 20 , 200 -trichlornitrilotrioctov´a kyselina]).
2.2
Grafick´ a reprezentace molekul[5]
Pˇri snaze interpretovat chemick´ y n´azev vznik´a ot´azka, co m´a b´ yt v´ ysledkem. Existuje nˇekolik v praxi pouˇz´ıvan´ ych moˇznost´ı. Obecnˇe je moˇzn´e rozdˇelit je na rovinn´e chemick´e vzorce (obvykl´e v literatuˇre) a prostorov´e modely. Nav´ıc existuje jeˇstˇe jak´ ysi mezistupeˇ n – chemick´e vzorce, kter´e pomoc´ı projekce zn´azorˇ nuj´ı model. Chemick´e vzorce jsou dvourozmˇern´e znakov´e modely slouˇcenin. Umoˇzn ˇuj´ı vyj´adˇrit kvalitativn´ı sloˇzen´ı, jak jsou jednotliv´e atomy v molekule vz´ajemnˇe v´az´any a jak´e je jejich prostorov´e uspoˇr´ad´an´ı. Strukturu lze vˇsak zachytit i pomoc´ı jin´ ych symbol˚ u, jako napˇr´ıklad topologickou matic´ı orientovan´eho grafu nebo orbit´aln´ıho diagramu.
7
Obr´azek 2.1: V´ yvoj symboliky slouˇcenin (jako pˇr´ıklad je uveden ethanol) [6]
Obr´azek 2.2: N´avrhy vzorce pro molekulu benzenu. Obecnˇe lze vzorce rozdˇelit podle m´ıry charakterizace sloˇzen´ı a struktury na • stechiometrick´e (empirick´e) vzorce – vyjadˇruj´ı pouze pomˇer, v jak´em jsou atomy jednotliv´ ych prvk˚ u v molekule zastoupeny (1 se neuv´ad´ı) CH2 O – methanal, ethanov´a kyselina, glukosa, . . . • molekulov´e (sum´arn´ı, souhrnn´e) vzorce – oproti stechiometrick´ ym vzorc˚ um nezachycuj´ı pouze pomˇery, ale skuteˇcn´e poˇcty atom˚ u C6 H4 ClNO2 – 2-chlornitrobenzen, 3-chlornitrobenzen, . . . • funkˇcn´ı (racion´aln´ı) vzorce – vyjadˇruj´ı jednotliv´e charakteristick´e (dˇr´ıve funkˇcn´ı) skupiny (CH3 )2 CO – propan-2-on • strukturn´ı vzorce – popisuj´ı strukturu, tj. vz´ajemn´e vazby a jejich uspoˇr´ad´an´ı; podle toho, zda popisuj´ı konstituci, konfiguraci nebo i konformaci se rozliˇsuj´ı – Konstituˇcn´ı vzorce – benzen CH3 − CH3 – ethan – kyselina octov´a (elektronov´ y vzorec)
8
– Konfiguraˇcn´ı vzorce ∗ Boˇ cn´ a projekce – smˇer dopˇredu je vyj´adˇren kl´ınem, smˇer dozadu pˇreruˇsovanou ˇc´arou – chlormethan ∗ Fischerova projekce – vazba smˇeˇruj´ıc´ı pod (nad) rovinu n´akresny je vyj´adˇrena vertik´alou (horizont´alou) – L-glyceraldehyd ∗ Haworthova projekce – s´ıla vazby (ve smyslu ˇs´ıˇrky) zn´azorˇ nuje vzd´alenost od pozorovatele – D-glukopyranosa – Konformaˇcn´ı vzorce ∗ Perspektivn´ı projekce – 1,2-dichlorethan ∗ Boˇ cn´ a projekce – 1,2-dichlorethan ∗ Newmanova projekce – projekce ve smˇeru vazby spojuj´ıc´ı uhl´ıkov´e atomy – 1,2-dichlorethan • Jin´e formy vyj´adˇren´ı struktury – Distanˇcn´ı matice
– mravenˇc´ı kyselina – Incidenˇcn´ı matice
– mravenˇc´ı kyselina
9
– Grafy – vrcholy grafu jsou atomy a hrany jsou vazby mezi nimi, voln´e elektronov´e p´ary jsou vyj´adˇreny smyˇckami – mravenˇc´ı kyselina Modely molekul je moˇzn´e rozdˇelit na materi´aln´ı a poˇc´ıtaˇcov´e. Stejnˇe jako u vzorc˚ u z´aleˇz´ı pˇri v´ ybˇeru typu modelu na u ´ˇcelu jeho pouˇzit´ı. Z´akladn´ımi typy materi´aln´ıch model˚ u jsou: • kuliˇckov´e modely – atomy jsou reprezentov´any kuliˇckami r˚ uzn´e barvy (podle prvku), vazby pak zn´azorˇ nuj´ı tyˇcky pˇr´ısluˇsn´e d´elky mezi nimi,
– ethan • kalotov´e modely – vznikaj´ı spojov´an´ım ˇcepiˇcek (fr. calotte), polomˇery odpov´ıdaj´ı van der Waalsov´ ym efektivn´ım polomˇer˚ um,
– ethan • trubiˇckov´e modely – jedn´a se o soustavu trubiˇcek nesouc´ıch v´ yznam vazby, kde oblasti pˇr´ısluˇs´ıc´ı jednotliv´ ym atom˚ um jsou vyznaˇceny zbarven´ım,
–butan 10
• Dreidingovy modely – atomy jsou pˇredstavov´any krouˇzky popˇr. kuliˇckami s v´ ystupky, vazby pak trubiˇckami na nˇe nasazen´ ymi.
ˇ snaˇz´ı napodobit modely materi´aln´ı (pak se Poˇc´ıtaˇcov´e modely se bud tedy opˇet jedn´a o modely kuliˇckov´e, kalotov´e, . . . ) nebo se snaˇz´ı zobrazen´ı kombinovat (napˇr. polopr˚ uhledn´ y kalotov´ y model, uvnitˇr kter´eho je zobrazen model trubiˇckov´ y). Nˇekdy jde jeˇstˇe d´al za ,,moˇznosti” materi´aln´ıho modelu (napˇr. zobrazen´ı mapy elektrostatick´eho potenci´alu, hustoty elektron˚ u na vazb´ach, atd.). I tyto modely je moˇzn´e d´ale kombinovat mezi sebou.
Obr´azek 2.3: Pˇrehled nˇekter´ ych druh˚ u poˇc´ıtaˇcov´ ych model˚ u benzenu. Aˇt uˇz je k zachycen´ı struktury molekuly pouˇzita jak´akoliv metoda, je vˇzdy probl´em u slouˇcenin se sd´ılen´ ymi elektrony. Jedn´a se totiˇz v podstatˇe o jednu vazbu mezi v´ıce neˇz dvˇema atomy. Pro benzenov´a j´adra existuje u konstituˇcn´ıch vzorc˚ u speci´aln´ı symbol – krouˇzek (viz Obr´azek 2.2), ale napˇr´ıklad ozon jiˇz ˇz´adnou takovou znaˇcku nem´a. Z nouze se pak v takov´ ych pˇr´ıpadech pouˇz´ıv´a nˇekter´ y z tzv. ,,rezonanˇcn´ıch hybrid˚ u”, coˇz je ovˇsem trochu zav´adˇej´ıc´ı (v´ ysledn´a molekula je totiˇz kombinac´ı vˇsech tˇechto hybrid˚ u). Tento probl´em vych´az´ı z nedostatk˚ u Lewisovy teorie lokalizovan´ ych vazeb, kter´a je z´akladem vˇsech v´ yˇse zm´ınˇen´ ych chemick´ ych znaˇcen´ı. Pˇredstavou rezonance lze odstranit jen nˇekter´e z probl´em˚ u Lewisovy teorie, pro dalˇs´ı lze pouˇz´ıt pˇredstavu hypervalence nebo elektronov´eho deficitu, pˇresto vˇsak u nˇekter´ ych molekul nast´avaj´ı pot´ıˇze [10].
11
Kapitola 3 Dekompozice Protoˇze je program rozs´ahl´ y a jeden z vytyˇcen´ ych c´ıl˚ u byla modularita, byl rozˇclenˇen na nˇekolik relativnˇe (aˇz na datov´e struktury a nutn´ y interface) nez´avisl´ ych ˇc´ast´ı. Svou koncepc´ı se program bl´ıˇz´ı pˇrekladaˇci. Vstup je nejprve zpracov´an modulem Scanner (lexik´aln´ı anal´ yza), kter´ y ho rozdˇel´ı na tokeny a vrac´ı jejich ˇc´ıseln´e k´ody definovan´e v souboru ,,terminaly.gra”. Nav´ıc ˇreˇs´ı z´akladn´ı kontextov´e probl´emy (vypouˇstˇen´ı a vkl´ad´an´ı samohl´asek), k ˇcemuˇz vyuˇz´ıv´a soubor ,,konstanty.txt”. Tokeny vstupuj´ı jako termin´aly do dalˇs´ıho modulu zvan´eho Parser (syntaktick´a anal´ yza). Zde je z nich vystavˇen derivaˇcn´ı strom dle gramatiky v souboru ,,gramatika.gra”. V tomto souboru nav´ıc n´asleduje za kaˇzd´ ym pravidlem sekvence instrukc´ı, kter´e se v pˇr´ıpadˇe pouˇzit´ı pravidla aplikuj´ı v pˇr´ısluˇsn´em uzlu. To zajist´ı modul Semantika (s´emantick´a anal´ yza). V´ ystupem tohoto modulu je jiˇz graf molekuly. Ten je tˇreba um´ıstit do prostoru, aby vznikl model, coˇz zajiˇsˇtuje modul Model, kter´ y pomoc´ı vol´an´ı modulu Grafika zajist´ı i v´ ystup ve form´atu VRML [7] s parametry definovan´ ymi v souborech ,,prvky.gra” (zde jsou veˇsker´e potˇrebn´e parametry jednotliv´ ych prvk˚ u – n´aboj, v´aha, pˇr´ıpustn´e elektronov´e konfigurace, polomˇer a barva) a ,,sablona.wrl” (zde je uloˇzena cel´a hlaviˇcka v´ ysledn´eho dokumentu, to znamen´a Viewpoints, uzly PROTO pro atomy a vazby, zvolen´e k´odov´an´ı, atd.). Jm´ena vˇsech pouˇzit´ ych soubor˚ u jsou definov´ana v souboru ,,settings.ini”, kter´ y program dostane jako parametr. Pro vˇetˇs´ı uˇzivatelovo pohodl´ı byla implementov´ana dvˇe rozhran´ı. Konzolov´ y skript ,,run-console.bat” (popˇr. ,,run-console.sh”) pˇrij´ım´a n´azev molekuly jako parametr a vytvoˇren´ y VRML model zobraz´ı v aplikaci asociovan´e s pˇr´ıponou ,,wrl”. Druh´ y interface pak tvoˇr´ı jednoduch´ y HTTP server, kter´ y pˇrij´ım´a dotazy na str´anku s modelem molekuly, pot´e zavol´a skript ,,run.bat” (popˇr. ,,run.sh”) s n´azvem v parametru. Pokud takov´ y jeˇstˇe nebyl vytvoˇren,
12
Obr´azek 3.1: Sch´ema zapojen´ı programov´ ych modul˚ u a jejich komunikace tak ho vytvoˇr´ı (pomoc´ı vol´an´ı v´ yˇse popsan´eho j´adra) a vr´at´ı str´anku, kter´a model obsahuje. Z v´ yˇse uveden´eho je zˇrejm´e, ˇze program potˇrebuje pro svou plnohodˇ plugin pro zobrazov´an´ı VRML do nˇejak´eho internetov´eho notnou pr´aci bud prohl´ıˇzeˇce (v pˇr´ıpadˇe uˇzit´ı druh´eho interface) nebo jak´ ykoliv jin´ y program schopn´ y interpretace VRML soubor˚ u (v pˇr´ıpadˇe uˇzit´ı prvn´ıho – ale v podstatˇe i druh´eho – interface).
13
Kapitola 4 Technick´ a realizace – j´ adro Tato kapitola obsahuje podrobn´ y rozbor implementace modul˚ u, ze kter´ ych se skl´ad´a j´adro programu, a jejich vz´ajemn´e komunikace. Tˇemito moduly jsou Scanner, Parser, Semantika, Model a Grafika.
4.1
Scanner
Jak jiˇz bylo ˇreˇceno, tento modul m´a za u ´kol prov´est lexik´aln´ı anal´ yzu poˇzadovan´eho n´azvu. To nen´ı vhodn´e uˇcinit standardn´ım zp˚ usobem, totiˇz postaven´ım automatu, kter´ y je resetov´an po kaˇzd´em pˇrijat´em tokenu, protoˇze toto pˇredzpracov´an´ı by bylo (vzhledem k poˇctu token˚ u, kter´e budou rozpozn´any) pˇr´ıliˇs ˇcasovˇe n´aroˇcn´e. Bylo tedy pouˇzito jednoduˇsˇs´ı ˇreˇsen´ı. Program postav´ı z token˚ u naˇcten´ ych ze souboru ,,terminaly.gra” lexik´aln´ı strom. Pˇri zpracov´av´an´ı n´azvu se v nˇem hled´a vˇzdy nejdelˇs´ı cesta od koˇrene odpov´ıdaj´ıc´ı dosud nepˇreˇcten´emu tokenu. Pˇri dosaˇzen´ı uzlu ve stromˇe, kter´ y jiˇz nem´a pˇrechod pˇres n´asleduj´ıc´ı znak v n´azvu ˇci pˇri dosaˇzen´ı konce n´azvu se program vr´at´ı zpˇet do posledn´ıho uzlu, kter´ y je oznaˇcen jako v´ ystupn´ı. Z odpov´ıdaj´ıc´ıho m´ısta v n´azvu pak pokraˇcuje nov´e hled´an´ı. Pokud se stane, ˇze je pˇri n´avratu po vˇetvi dosaˇzen koˇren, znamen´a to, ˇze se zb´ yvaj´ıc´ı ˇc´ast n´azvu nepodaˇrilo urˇcit. Program se vr´at´ı do posledn´ıho urˇcen´eho tokenu a pokraˇcuje se v hled´an´ı (smˇerem ke koˇrenu). Pokud je dosaˇzen koˇren pˇri hled´an´ı prvn´ıho tokenu, znamen´a to, ˇze se programu nepodaˇrilo n´azev na tokeny rozloˇzit a je vyvol´ana chybov´a hl´aˇska, v n´ıˇz je uveden nejkratˇs´ı sufix, kter´emu se nepodaˇrilo porozumˇet. Dalˇs´ı zvl´aˇstnost´ı implementace tohoto modulu je, ˇze nevyuˇz´ıv´a sdruˇzoˇ by totiˇz muselo b´ v´an´ı token˚ u. Bud yt jejich rozliˇsen´ı v s´emantick´e anal´ yze implementov´ano pevnˇe, nebo by to vyˇzadovalo rozˇs´ıˇren´ı jazyka s´emantick´e anal´ yzy o jejich rozliˇsov´an´ı a to kv˚ uli uˇsetˇren´ı jednoho (sdruˇzovac´ıho) neter14
min´alu. Pˇresto je interface tohoto modulu pro sdruˇzov´an´ı pˇripraven, protoˇze pouˇz´ıv´a soubor ,,konstanty.txt”, kter´ y pˇriˇrazuje interval˚ um token˚ u jm´ena. Tento soubor je nav´ıc vyuˇzit k oˇsetˇren´ı nˇekter´ ych kontextov´ ych probl´em˚ u. Prvn´ım je vkl´ad´an´ı a vypouˇstˇen´ı samohl´asek ve ˇsvu slova, tj. vypouˇstˇen´ı koncov´eho ,,a” nebo ,,o” v tokenu, popˇr´ıpadˇe vkl´ad´an´ı ,,o” mezi tokeny. Souˇcasn´a implementace vypad´a tak, ˇze koncov´e ,,a” je moˇzn´e vypustit kdykoliv a ,,o” je moˇzn´e vloˇzit do ˇsvu, pokud se jedn´a o jm´eno prvku, charakteristickou skupinu, ˇreckou ˇc´ıslovku nekonˇc´ıc´ı samohl´askou, koˇren trivi´aln´ıho n´azvu nebo cel´ y trivi´aln´ı n´azev. Druh´ y kontextov´ y probl´em oˇsetˇren´ y v tomto modulu je existence samostatn´ ych hl´asek jako token˚ u (napˇr. ,,a” v ,,4a,9abut[2]enoanthracen” nebo v ,,dibenzo[a,j ]anthracen”). Tyto tokeny nesmˇej´ı n´asledovat po p´ısmenu, protoˇze to by umoˇzn ˇovalo vracet jako tokeny pouze jednotliv´e hl´asky (napˇr´ıklad ,,methan” by bylo rozdˇeleno jako ,,metha|n” m´ısto ,,meth|an”) a chyba by byla vˇzdy vyvol´ana aˇz v syntaktick´e anal´ yze, nam´ısto v lexik´aln´ı. Pr´ace s t´ımto modulem prob´ıh´a pomoc´ı nˇekolika funkc´ı. Nejprve je potˇreba naˇc´ıst intervaly token˚ u z ,,konstanty.txt”, pro potˇreby ˇreˇsen´ı v´ yˇse popsan´ ych kontextov´ ych z´aleˇzitost´ı na u ´rovni lexik´aln´ı anal´ yzy. Toto naˇcten´ı zajist´ı procedura inicializace intervalu , kter´a v parametru oˇcek´av´a otevˇren´ y soubor. N´asleduje naˇcten´ı seznamu token˚ u, pˇriˇcemˇz se z nich postav´ı lexik´aln´ı strom. Pro tyto potˇreby slouˇz´ı procedura inicializace . Pot´e se ym n´azvem v parametru. Ta ho rozdˇel´ı vol´a procedura parse se zpracov´avan´ na tokeny, ale pouze v bufferu. Tyto tokeny jsou pak vraceny postupnˇe vˇcetnˇe sv´ ych flag˚ u a poˇradov´eho ˇc´ısla ve funkci yylex . Obsaˇzeny jsou jeˇstˇe dvˇe funkce, hodnota a text , kter´e pˇrev´ad´ı ˇc´ıseln´ y k´od termin´alu na jeho jm´eno a naopak. To je vyuˇzito hlavnˇe v modulu Parser k naˇcten´ı gramatiky.
4.2
Parser
Parser je modul zajiˇsˇtuj´ıc´ı syntaktickou anal´ yzu n´azvu. Nejprve se provede inicializace a to tak, ˇze se naˇcte ze souboru ,,gramatika.gra” vˇse potˇrebn´e, tedy gramatick´a pravidla a jejich s´emantick´ y v´ yznam (sekvence pˇr´ıkaz˚ u). Pˇri naˇc´ıt´an´ı se rovnou pˇrev´ad´ı hodnoty termin´al˚ u na k´ody token˚ u a stejnˇe tak jm´ena netermin´al˚ u. Tˇem je nav´ıc potˇreba jeˇstˇe k´ody pˇriˇrazovat, coˇz se dˇeje v poˇrad´ı, v jak´em se vyskytuj´ı na vstupu. S´emantick´a pravidla se nijak nezpracov´avaj´ı, ponech´avaj´ı se ve sv´e textov´e podobˇe. O jejich interpretaci se star´a aˇz v pˇr´ıpadˇe potˇreby modul Semantika. Inicializace je zakonˇcena testem, zda nejsou obsaˇzeny netermin´aly, pro kter´e neexistuje ˇz´adn´e odvozovac´ı pravidlo a pˇr´ıpadnˇe se tento nedostatek ohl´as´ı uˇzivateli.
15
Pr´ace pˇri hlavn´ım vol´an´ı vypad´a n´asledovnˇe. Program dokola vol´a yylex dokud dost´av´a tokeny a pˇritom z nich tvoˇr´ı graf typu cesta, kde tokeny tvoˇr´ı orientovan´e hrany. N´asleduje budov´an´ı derivaˇcn´ıho stromu nad t´ımto grafem. To prob´ıh´a tak, ˇze se postupnˇe proch´az´ı pravidla a u kaˇzd´eho se zjiˇsˇtuje, zda je moˇzn´e ho aplikovat, tj. zda prav´a strana pravidla odpov´ıd´a orientovan´e cestˇe v dosavadn´ım grafu. Pokud ano, pˇrid´a se hrana spojuj´ıc´ı zaˇc´atek a konec t´eto cesty, pˇriˇcemˇz jej´ı hodnota odpov´ıd´a k´odu netermin´alu na lev´e stranˇe pravidla. Takto se hledaj´ı hrany, dokud existuje moˇznost, ˇze se nˇejak´a pˇrid´a a z´aroveˇ n se jeˇstˇe nepodaˇrilo aplikovat pravidlo, kter´e by vytvoˇrilo hranu poˇc´ateˇcn´ıho netermin´alu pˇres celou p˚ uvodn´ı cestu. Z´aroveˇ n s t´ımto grafem se buduje derivaˇcn´ı strom a to tak, ˇze vrcholy jsou tvoˇreny hranami p˚ uvodn´ıho grafu a hrany v nˇem vedou z A do B, pokud byla hrana odpov´ıdaj´ıc´ı B pouˇzita pˇri vytv´aˇren´ı hrany odpov´ıdaj´ıc´ı A. Z´aroveˇ n se odstran´ı vˇsechny vrcholy (a do nich, pˇr´ıpadnˇe z nich, vedouc´ı hrany), kter´e nejsou souˇc´ast´ı hlavn´ıho stromu.
Obr´azek 4.1: Pˇr´ıklad gramatiky
Obr´azek 4.2: Vygenerovan´ y graf pro slovo ABCD S ostatn´ımi moduly prob´ıh´a komunikace n´asledovnˇe. K inicializaci slouˇz´ı procedura inicializace , kter´a naˇcte gramatiku ze souboru, kter´ y oˇcek´av´a otevˇren´ y ve sv´em parametru. Pro pˇreklad k´odu symbolu (termin´alu nebo netermin´alu) na jeho textovou reprezentaci slouˇz´ı funkce kod2str . To je vyuˇzito pouze pˇri chybov´ ych v´ ystupech. Komunikaci s okol´ım zajiˇsˇtuje jeˇstˇe funkce yyparse , kter´a vrac´ı ukazatel na typ derivacni strom::derivat . Tato tˇr´ıda je velmi jednoduch´a, obsahuje pouze seznam ukazatel˚ u na potomky, iter´ator na pravidlo gramatiky, kter´e je dan´ ym uzlem reprezentov´ano a rozsah index˚ u token˚ u, jeˇz do dan´eho podstromu spadaj´ı – tedy veˇsker´e informace potˇrebn´e k dalˇs´ımu zpracov´an´ı. 16
Obr´azek 4.3: V´ ysledn´ y derivaˇcn´ı strom
4.3
Semantika
Tvorba modelu molekuly je zapoˇcata vytvoˇren´ım jej´ıho grafu. To se dˇeje v modulu Semantika. Ten nejprve zavol´a funkci yyparse , kter´a vr´at´ı derivaˇcn´ı strom zpracov´avan´eho n´azvu, ten vyhodnot´ı a strom zruˇs´ı. V´ ysledek vyhodnocen´ı je pot´e vr´acen k dalˇs´ımu zpracov´an´ı. Vyhodnocov´an´ı prob´ıh´a tak, ˇze se vol´a rekurzivnˇe na podstromy a z navr´acen´ ych dat se stav´ı pole. V aktu´alnˇe zpracov´avan´em uzlu se pak vezme sekvence pˇr´ıkaz˚ u jemu pˇr´ısluˇs´ıc´ı (z gramatiky v modulu Parser) a ta se poˇcne aplikovat na pˇredem vytvoˇren´e pole. Jak postupuj´ı meziv´ ysledky stromem nahoru, nakonec se dostane v´ ypoˇcet i do koˇrene, kter´ y sv˚ uj v´ ysledek vr´at´ı jako v´ ysledek cel´eho vyhodnocov´an´ı. N´avratov´a hodnota je struktura, kter´a mimo jin´e obsahuje poloˇzku typu skelet , ve kter´e je uloˇzena poˇzadovan´a molekula (tedy pouze jej´ı struktura, jm´ena atom˚ u, atd.). Celkovˇe se postupuje tak, ˇze se molekula buduje bez vod´ık˚ u a aˇz kdyˇz je vˇse ostatn´ı hotovo, pˇripoj´ı se na ,,voln´e” pozice vod´ıky. Pokud se stane, ˇze pravidlo nˇekter´eho uzlu neobsahuje ˇz´adn´e pˇr´ıkazy, pak je na tuto situaci uˇzivatel upozornˇen. Jazyk s´emantiky je velice jednoduch´ y, aby byla jeho interpretace co nejsnazˇs´ı. Jeho podrobn´ y popis je v Pˇr´ıloze A. Pro spr´avnou interpretaci je nutn´e zn´at nˇekter´e z´akladn´ı charakteristiky pouˇzit´ ych prvk˚ u. Ty jsou naˇcteny ze souboru ,,prvky.gra” pˇri inicializaci y soubor). (procedura inicializace , kter´a oˇcek´av´a v parametru otevˇren´ Anal´ yza se pak spouˇst´ı pomoc´ı vol´an´ı funkce yysem , kter´a vrac´ı graf molekuly typu skelet .
17
4.4
Model
Z grafu molekuly, kter´ y vr´at´ı modul Semantika je potˇreba vytvoˇrit model. To znamen´a urˇcit polohy jednotliv´ ych atom˚ u v prostoru, coˇz zajiˇsˇtuje tento modul. Zm´ınˇenou u ´lohu je velmi obt´ıˇzn´e pˇresnˇe vyˇreˇsit a tak byl zvolen n´asleduj´ıc´ı model. V molekule dominuj´ı dvˇe s´ıly. Atomy se v d˚ usledku elektrick´eho n´aboje odpuzuj´ı, ale jako protiv´aha je drˇz´ı pohromadˇe vz´ajemn´e vazby. Stejnˇe tak p˚ usob´ı v pouˇzit´em modelu dvˇe protich˚ udn´e s´ıly. Kaˇzd´a dvojice atom˚ u na sebe p˚ usob´ı podle Coulombova z´akona, pˇriˇcemˇz jejich n´aboje jsou pˇr´ımo u ´mˇern´e protonov´emu ˇc´ıslu Z (coˇz odpov´ıd´a realitˇe). Vazebn´e s´ıly jsou pak modelov´any jako guma nap´ınan´a mezi atomy. Vyuˇzity jsou tedy n´asleduj´ıc´ı dva vzorce. Prvn´ım je Coulomb˚ uv z´akon: Fe =
1 Q1 Q2 , kde 4πε r2
• ε je permitivita vakua (konstanta), • Qi jsou n´aboje jednotliv´ ych atom˚ u (Qi = e0 Zi , kde e0 je n´aboj elektronu), • r je vzd´alenost mezi atomy. Druh´ y vzorec pak popisuje s´ılu mezi v´azan´ ymi atomy n´asledovnˇe: Fp = K∆y, kde • K je line´arn´ı tuhost (materi´alov´a konstanta), • ∆y je vzd´alenost mezi atomy zmenˇsen´a o d´elku gumy (ta je stanovena experiment´alnˇe na hodnotu 4, 0). Dalˇs´ıho zjednoduˇsen´ı bylo dosaˇzeno nahrazen´ım spojit´e simulace diskr´etn´ı variantou. Program v dan´em okamˇziku vˇzdy spoˇc´ıt´a v´ yslednici sil p˚ usob´ıc´ıch na atomy (F ). Tuto s´ılu pak nech´a konstantnˇe p˚ usobit po dobu ti (jedn´a se tedy o rovnomˇernˇe zrychlen´ y/zpomalen´ y pohyb). Takto je zjiˇstˇena nov´a Fi t2i poloha (Pi+1 = Pi + vi ti + 2m ) a rychlost (vi+1 = vi + Fmi ) atom˚ u a v´ ypoˇcet se opakuje, tentokr´at se vˇsak s´ıly nechaj´ı p˚ usobit po dobu ti+1 . Posloupnost ti je navrˇzena tak, aby v´ ypoˇcet nutnˇe konvergoval (pouˇzita byla geometrick´a posloupnost s kvocientem 0, 999 a hodnotou prvn´ıho ˇclenu 0, 01). Aˇckoliv to nen´ı zˇrejm´e, v´ yznamn´ y vliv na v´ ysledek m´a i inicializace. Je potˇreba, aby probˇehla co nejrychleji, z´aroveˇ n vˇsak mus´ı umoˇznit rychl´ y 18
pˇresun vˇsech atom˚ u do ,,spr´avn´e” (tj. v r´amci modelu co nejkvalitnˇejˇs´ı moˇzn´e) konfigurace. Nejjednoduˇsˇs´ı varianta, jak atomy rozm´ıstit, je um´ıstit je do ˇrady vedle sebe (napˇr´ıklad na souˇradnice [4i, 0, 0]). To by ale mˇelo za n´asledek, ˇze by vˇsechny p˚ usob´ıc´ı s´ıly mˇely smˇer rovnobˇeˇzn´ y s touto pˇr´ımkou, tud´ıˇz by vˇsechny atomy z˚ ustaly na t´eto pˇr´ımce. Podobn´ y v´ ysledek by byl dosaˇzen, pokud by vˇsechny atomy leˇzely v jedn´e rovinˇe. Dalˇs´ı zvaˇzovanou variantou bylo rozm´ıstˇen´ı podle vzorce: h
i
{[xi , yi , zi ]}i := i, i (−1)i , i2 (−1)i , kde [xi , yi , zi ] jsou souˇradnice i-t´eho atomu. Pˇri n´avrhu tohoto vzorce byl zohlednˇen fakt, ˇze indexy atom˚ u spojen´ ych vazbou se vˇetˇsinou liˇs´ı o jedna a ˇze je dobr´e inicializovat je tak, aby jim v pohybu k sobˇe nic nebr´anilo. Tato inicializace vˇsak byla dostaˇcuj´ıc´ı pouze pro molekuly s m´enˇe neˇz 40 atomy. U vˇetˇs´ıch model˚ u byly jiˇz vzd´alenosti pˇr´ıliˇs velk´e na to, aby se model bˇehem kr´atk´e doby po kterou byl simulov´an stihl ust´alit. Hlavn´ım d˚ uvodem je evidentnˇe kvadratick´a z´avislost max. souˇradnice na poˇctu atom˚ u. Bylo tedy tˇreba navrhnout jinou inicializaci, kter´a by oproti pˇredchoz´ı variantˇe zohlednila i potˇrebu um´ıstit vˇsechny atomy relativnˇe bl´ızko poˇc´atku (resp. atom˚ u s nimiˇz je ve vazbˇe). Zd´a se, ˇze n´apad vytvoˇrit poˇc´ateˇcn´ı pozici atom˚ u jako rovnomˇern´e pokryt´ı sf´ery m´a potenci´al ˇreˇsit vˇsechny v´ yˇse uveden´e poˇzadavky. Pˇrin´aˇs´ı vˇsak nˇekolik probl´em˚ u nov´ ych: • Jak´ y m´a m´ıt sf´era polomˇer? • Jak um´ıstit atomy mezi nimiˇz je vazba bl´ızko sebe? • Jak rozm´ıstit atomy rovnomˇernˇe? Nejproblematiˇcnˇejˇs´ı z tˇechto ot´azek je ta posledn´ı – neexistuje totiˇz algoritmus ˇreˇs´ıc´ı tento probl´em. Zde jsou vˇsak pˇribliˇzn´a ˇreˇsen´ı naprosto dostaˇcuj´ıc´ı a je-li vyuˇzito to, kter´e atomy rozm´ıst´ı na sf´eru rovnomˇernˇe po spir´ale, je nav´ıc vyˇreˇsena i druh´a ot´azka z v´ yˇse uveden´eho seznamu.[11] Zb´ yv´a tak pouze urˇcit vhodn´ y polomˇer pouˇzit´e sf´ery. Polomˇer s minim´aln´ı energi´ı lze odhadnout n´asledovnˇe. Pˇredpokl´adejme, ˇze atomy jsou rozm´ıstˇeny rovnomˇenˇe. Tuto situaci lze odhadnout tak, ˇze tvoˇr´ı triangulaci, jej´ıˇz vˇsechny stˇeny jsou rovnostrann´e troj´ uheln´ıky stejn´e velikosti. Hled´ame-li stav s minim´aln´ı energi´ı, pak mus´ı m´ıt kaˇzd´a hrana d´elku odpov´ıdaj´ıc´ı optim´aln´ı d´elce vazby, kterou zn´ame. Nyn´ı jsme jiˇz schopni dopoˇc´ıtat poˇzadovanou plochu kaˇzd´e stˇeny, poˇzadovan´ y povrch sf´ery a tedy i jej´ı polomˇer. Pˇri pouˇzit´ı tohoto polomˇeru nicm´enˇe doch´az´ı k situac´ım, kdy syst´em od zaˇc´atku nem´a dostatek energie pro dobr´e 19
formov´an´ı. Z toho d˚ uvodu byla cel´a sf´era o proti v´ yˇse uveden´emu odhadu nˇekolikan´asobnˇe zvˇetˇsena. Pro dalˇs´ı zjednoduˇsen´ı modelu (resp. poˇc´ıt´an´ı v nˇem) se neuvaˇzuj´ı skuteˇcn´e hodnoty konstant (n´aboj, hmotnost, permitivita vakua, . . . ), ale jsou nahrazeny hodnotami vyˇsˇs´ımi. T´ım, ˇze jsou takto upraveny vˇsechny konstanty ve spr´avn´em pomˇeru, je zachov´ano chov´an´ı modelu, ale v´ ypoˇcty jsou pˇresunuty z ˇr´adu 10−27 do ˇr´adu jednotek, kde je dosahov´ano vyˇsˇs´ı pˇresnosti. V´ ypoˇcty tedy prob´ıhaj´ı podle n´asleduj´ıc´ıch vzorc˚ u: Fe = Fp
Z1 Z 2 r2
4, 0 = r 1− r
(= ∆y)
Obr´azek 4.4: Vz´ajemn´a interakce mezi dvˇema atomy spojen´ ymi vazbou podle modelu Interface tohoto modulu nen´ı pˇr´ıliˇs rozs´ahl´ y. Hlavn´ı je metoda yymodel , kter´a vyp´ıˇse pomoc´ı n´asleduj´ıc´ıho modulu Grafika v´ ysledek sv´e pr´ace – vytvoˇren´ y model molekuly. Ten vznikne tak, ˇze se naˇcte graf molekuly z parametru do vlastn´ı tˇr´ıdy skelet a zavol´a se jej´ı metoda optimalize , kter´a pracuje v´ yˇse popsan´ ym zp˚ usobem.
4.5
Grafika
Tento modul zajiˇsˇtuje v´ ystup. Slouˇz´ı k tomu jeho funkce tisk , jej´ıˇz parametr je model a vr´acen´a hodnota odpov´ıd´a jeho VRML z´apisu. V hlaviˇcce (kter´a je v souboru ,,sablona.wrl” a naˇc´ıt´a se do pamˇeti funkc´ı inicializace ) jsou pˇreddefinov´any pohledy (VIEWPOINT) a prototypy (PROTO) pro Atom ( Atom ) a jednotliv´e typy vazeb ( Vazba1 , Vazba2 a Vazba3 ) (viz Pˇr´ıloha D.6). N´asleduj´ı definice atom˚ u skuteˇcnˇe pouˇzit´ ych a to jako specifikace obecn´eho Atom (je urˇcena barva, znaˇcka a velikost). Pot´e jiˇz je vyps´ana konkr´etn´ı molekula. Kaˇzd´ y atom je nav´ıc instanciov´an s parametrem obsahuj´ıc´ım seznam vˇsech lokant˚ u, kter´e mu bˇehem stavby 20
molekuly pˇr´ısluˇsely, s t´ım, ˇze ty, kter´e jiˇz nejsou platn´e, jsou prefixov´any vykˇriˇcn´ıkem. Pro snazˇs´ı zach´azen´ı nejsou struktury vnoˇreny (stejnˇe by bylo obt´ıˇzn´e urˇcit, kter´emu ze dvou v´azan´ ych atom˚ u vazba n´aleˇz´ı). Pro urˇcen´ı transformace vazby do poˇzadovan´e polohy, bylo tˇreba stanovit osu a u ´hel otoˇcen´ı ze sv´e poˇc´ateˇcn´ı (s osou y rovnobˇeˇzn´e) pozice. Pro snazˇs´ı manipulaci je vazba (v´alec/v´alce) nejprve posunuta doln´ı podstavou do poˇc´atku (v generovan´e pozici leˇz´ı poˇc´atek lok´aln´ıho souˇradn´eho syst´emu uprostˇred vazby). Nakonec je posunut do prvn´ıho z v´azan´ ych atom˚ u (zde se projev´ı v´ yhoda prvn´ıho posunu).
Obr´azek 4.5: V´ ypoˇcet parametr˚ u pro otoˇcen´ı vazby do spr´avn´eho smˇeru V´ ypoˇcet parametr˚ u otoˇcen´ı (tedy osy a u ´hlu) je relativnˇe jednoduch´ ya vych´az´ı z n´asleduj´ıc´ıch pˇredpoklad˚ u: Znaˇcen´ı: A – p˚ uvodn´ı smˇer vazby, B – transformovan´ y smˇer vazby, o – smˇer osy rotace, φ – velikost rotace, L – d´elka vazby (= kAk).
21
o = B×A A·B cos(φ) = kAk · kBk A × B = [a2 b3 − a3 b2 , a3 b1 − a1 b3 , a1 b2 − a2 b1 ] A = [0, L, 0] Po dosazen´ı posledn´ıho vztahu do pˇredchoz´ıch a n´asledn´em vyj´adˇren´ı nezn´am´ ych jsou z´ısk´any k´ yˇzen´e parametry transformace: • o = (−b3 , 0, b1 ) (u osy je nutn´e zajistit pouze smˇer vektoru, nikoliv jeho velikost, proto je moˇzno cel´ y v´ yraz zjednoduˇsit o jistˇe nenulovou hodnotu L), • φ = arccos
b2 kBk
.
N´asobnost vazby je vyznaˇcena poˇctem v´alc˚ u. Aby byl v´ ysledn´ y vzhled pˇrirozen´ y, bylo potˇreba dos´ahnout opticky shodn´e s´ıly vazeb, z´aroveˇ n vˇsak bylo potˇreba uˇcinit je snadno rozliˇsiteln´ ymi. To se snad podaˇrilo tak, ˇze pr˚ uˇrezu kaˇzd´e vazby lze opsat jednotkovou kruˇznici a stˇred podstavy kaˇzd´eho v´alce leˇz´ı na hranici v´alc˚ u ostatn´ıch (viz Obr´azek 4.6).
Obr´azek 4.6: Odvozen´ı tvaru n´asobn´ ych vazeb v modelu
22
Kapitola 5 Technick´ a realizace – rozhran´ı V pˇredchoz´ı kapitole je pops´ano j´adro cel´eho programu. To ovˇsem pracuje pouze na pˇr´ıkazov´e ˇr´adce, coˇz sice pro vstup nevad´ı, ale v´ ystup, tj. 3D model molekuly, je potˇreba nˇejak interpretovat. Implementov´ana jsou dvˇe ˇreˇsen´ı.
5.1
run-console
Jedn´a se o velice jednoduch´ y skript, kter´ y oˇcek´av´a jako parametr jm´eno poˇzadovan´e molekuly. Zjist´ı, zda jiˇz model existuje ve sloˇzce ,,outs”. Pokud ne, je za pomoci j´adra na tomto m´ıstˇe vytvoˇren. Za situace, ˇze se toto podaˇrilo, je vytvoˇren´ y model otevˇren definovan´e aplikaci (schopn´e zobrazit soubory VRML). Defaultnˇe je t´ımto programem internetov´ y prohl´ıˇzeˇc.
5.2
HTTP server
Aˇckoliv se jedn´a sp´ıˇse o koncov´ y modul cel´eho programu, byl pro vyˇsˇs´ı variabilitu implementov´an jako samostatn´ y program. Jedn´a se o mal´ y a co do funkˇcnosti velice omezen´ y HTTP server [8]. Pˇri startu je naˇctena ˇsablona str´anky (tj. obsah souboru ,,index.htm”, ymi kde v m´ıstech pro nadpis je text $NAZEV$ , pro nadpis s neinterpretovan´ HTML entitami $NAZEV*$ a pro tˇelo $TELO$ ). Pot´e server zaˇcne poslouchat poˇzadavky pˇrich´azej´ıc´ı na port, jehoˇz ˇc´ıslo bylo zad´ano jako parametr (doporuˇceno je ˇc´ıslo bˇeˇznˇe uˇz´ıvan´e pro HTTP servery – 80). Kladnˇe jsou vyˇr´ızeny pouze n´asleduj´ıc´ı poˇzadavky: • GET /chenom , • GET /chenom?mol=nazev molekuly – pokus´ı se vytvoˇrit model molekuly s dan´ ym n´azvem (pokud se to podaˇr´ı, vr´at´ı str´anku, kter´a model 23
obsahuje, jinak se na str´ance zobraz´ı seznam vygenerovan´ ych chybov´ ych hl´aˇsen´ı), • GET /outs/nazev molekuly.wrl – vr´at´ı model, kter´ y existuje, • GET /STOP – ukonˇc´ı server, • GET /RESET – zp˚ usob´ı znovunaˇcten´ı ˇsablony ze souboru ,,index.htm”. V ostatn´ıch pˇr´ıpadech je vr´acena str´anka s chybovou hl´aˇskou. V druh´e variantˇe dotazu je pro zajiˇstˇen´ı existence dotazovan´eho modelu molekuly pouˇzit skript ,,run”, kter´ y vol´a j´adro chenom s voliteln´ ym parametrem -e . Ten zp˚ usob´ı, ˇze je na vstupu oˇcek´av´an oescapovan´ y (pomoc´ı ,,htmlencode”) n´azev. V´ ystup je pot´e uloˇzen do stejnojmenn´eho souboru do sloˇzky ,,outs”. Chyby jsou ukl´ad´any do souboru ,,error.log”, jehoˇz obsah je v pˇr´ıpadˇe ne´ uspˇechu generov´an´ı zobrazen uˇzivateli. Server je navrhov´an jako localhostov´a aplikace a jako takov´a nem´a velk´e n´aroky na provoz. Nav´ıc zpracov´av´an´ı dotazu m˚ uˇze trvat i nˇekolik minut pˇri 100% z´atˇeˇzi procesoru. Z tˇechto d˚ uvod˚ u bylo pˇri implementaci pˇristoupeno k jednovl´aknov´e variantˇe.
24
Kapitola 6 Probl´ emy implementace Je zˇrejm´e, ˇze nen´ı moˇzn´e implementovat obecnou a u ´plnou interpretaci organick´eho n´azvoslov´ı. Pˇri pr´aci na programu CheNom vˇsak byla vyvinuta snaha o moˇznost pozdˇejˇs´ıho rozˇs´ıˇren´ı o vˇsechny (v´ıce ˇci m´enˇe dobrovolnˇe) opomenut´e aspekty a to nejl´epe bez nutnosti mˇenit k´od programu (a tedy rekompilovat), ale pouh´ ym z´asahem do datov´ ych soubor˚ u. Z tohoto pˇr´ıstupu vyplynuly n´asleduj´ıc´ı probl´emy.
6.1
Pˇ rid´ av´ an´ı trivi´ aln´ıch n´ azv˚ u
Protoˇze nen´ı moˇzn´e do programu zan´est vˇsechny trivi´aln´ı n´azvy, je nutn´e umoˇznit jejich co nejsnazˇs´ı pˇrid´av´an´ı. Tento poˇzadavek pˇrinesl nˇekolik komplikac´ı. Modifikace zdrojov´eho k´odu programu rozhodnˇe nen´ı snadn´e pˇrid´an´ı. Je tedy nutn´e toto prov´adˇet ve vnˇejˇs´ım (datov´em) souboru. Nejedn´a se vˇsak pouze o trivi´aln´ı n´azvy, uˇzivatel m˚ uˇze potˇrebovat pˇridat tˇreba funkˇcn´ı skupinu. Pak je tedy potˇreba um´ıstit do vnˇejˇs´ıho souboru celou gramatiku. T´ım odpad´a moˇznost vyuˇzit´ı pomocn´ ych n´astroj˚ u jako flex ˇci bison. Nav´ıc je nutn´e v tomto souboru s gramatikou popsat s´emantiku jednotliv´ ych pravidel. Pro tento jazyk je nutn´e vytvoˇrit interpret, a proto je vhodn´e vytvoˇrit mal´ y, snadno analyzovateln´ y jazyk s v´ yrazov´ ymi prostˇredky pˇresnˇe vytvoˇren´ ymi pro potˇreby popisu s´emantiky n´azvotvorn´ ych operac´ı.
6.2
Tˇ r´ıda jazyka organick´ e chemie
Existence u ´prav jako nahrazen´ı koncovky ,,-ov´a kyselina” koncovkou ,,-´at” nebo vkl´ad´an´ı infix˚ u do n´azv˚ u (napˇr. z´amˇenn´ y infix ,,-imido-”) dˇel´a jazyk organick´e chemie v´ yraznˇe kontextov´ ym. Tato skuteˇcnost velice komplikuje jak lexik´aln´ı, tak syntaktickou anal´ yzu. Situaci neprosp´ıv´a ani nejednoznaˇcnost 25
pravidel. Napˇr´ıklad pravidlo R-0.1.7.3 popisuje vkl´ad´an´ı ,,o” n´asledovnˇe: ,,Pro lepˇs´ı v´yslovnost a libozvuˇcnost se nˇekdy mezi souhl´ asky pˇredpony vkl´ ad´ a samohl´aska -o-” [2]. Tak´e obraty jako ,,zvaˇzuje komise” nebo ,,bude pops´ ano v budouc´ı publikaci” nejsou v´ yjimeˇcn´e [2]. Nˇekter´e z tˇechto probl´em˚ u se podaˇrilo odstranit v lexik´aln´ı anal´ yze. Jako souˇca´st lokant˚ u v n´azvoslov´ı kondenzovan´ ych polycykl˚ u se pouˇz´ıvaj´ı p´ısmena latinky. Pˇri bezkontextov´em zpracov´an´ı je tak moˇzn´e rozdˇelit kaˇzd´ y n´azev ˇ tak, ˇze jednomu tokenu odpov´ıd´a jeden znak. C´asteˇcnˇe lze tomuto zabr´anit t´ım, ˇze se m´ısto obvykl´e varianty pouˇzit´ı prvn´ıho (nejkratˇs´ıho) nalezen´eho tokenu pouˇzije nejdelˇs´ı. I tak by ale napˇr´ıklad anal´ yza n´azvu ,,methan” vr´atila tokeny ,,metha” a ,,n”. Kontextov´e pravidlo umoˇzn ˇuj´ıc´ı vr´atit token odpov´ıdaj´ıc´ı jednomu p´ısmenu latinky pouze v pˇr´ıpadˇe, ˇze pˇredchoz´ı token nekonˇc´ı p´ısmenem, ˇreˇs´ı i tento nedostatek. Dalˇs´ım kontextov´ ym pravidlem uplatnˇen´ ym v lexik´aln´ı anal´ yze je jiˇz zm´ınˇen´e vypouˇstˇen´ı a vkl´ad´an´ı samohl´asek. Probl´emy s kontextovost´ı infixov´ ych n´azvotvorn´ ych operac´ı se nepodaˇrilo odstranit, a proto bylo od jejich implementace upuˇstˇeno. Syntaktick´a anal´ yza byla zvolena pro co nejˇsirˇs´ı tˇr´ıdu jazyk˚ u a tedy bezkontextov´a nedeterministick´a na zp˚ usob Q-syst´em˚ u.
6.3
N´ azvy ˇ cin´ıc´ı komplikace
Sestaven´ı gramatiky n´azvoslov´ı organick´e chemie tak, aby pokud moˇzno neobsahovala ˇz´adn´e konflikty (a to ani po jej´ım rozˇsiˇrov´an´ı) je velmi n´aroˇcn´e. Napˇr´ıklad HI lze oznaˇcit jako jodan, I− pak jako jodyl. Jodid se zd´a b´ yt − obdobou jodylu a tedy I . Ve skuteˇcnosti je vˇsak jodid n´azev charakteristick´e skupiny I− a pro I− je pˇr´ıpustn´e pouze oznaˇcen´ı jodanid. Vˇetˇs´ım probl´emem je spojen´ı ,,karboxylov´a kyselina”. Jak je totiˇz methanal a methylaldehyd dvoj´ı oznaˇcen´ı t´ehoˇz, tak v d˚ usledku shody funkˇcn´ıho skupinov´eho n´azvu a substituˇcn´ı pˇr´ıpony charakteristick´e skupiny pˇredstavuj´ı n´azvy ,,methankarboxylov´a kyselina” a ,,methylkarboxylov´a kyselina” tut´eˇz slouˇceninu. Ovˇsem byla-li by ch´ap´ana druh´a varianta ve smyslu prvn´ı, pak by byla na pˇripojovan´em uhl´ıku vytvoˇrena nevyuˇzit´a voln´a vazba (v takov´em pˇr´ıpadˇe by bylo spr´avnˇejˇs´ı oznaˇcen´ı ,,1-oylmethylkarboxylov´a kyselina”). Mnoho komplikac´ı ˇcin´ı tak´e nˇekolik skupin n´azv˚ u, kter´e se mohou zd´at pˇri nejmenˇs´ım zav´adˇej´ıc´ı. To samozˇrejmˇe komplikuje i jejich automatick´e zpracov´an´ı. Patˇr´ı mezi nˇe napˇr´ıklad: • ethylen (−CH2 − CH2 −) – nen´ı moˇzn´e interpretovat jako ethenyl (t´eˇz vinyl, CH2 = CH−). 26
• rhodanid – jedn´a se o zastaral´e oznaˇcen´ı pro thiokyan´at a souvislost s rhodiem je jen zd´anliv´a. • rhodanin – synonymum pro 2-thioxothiazolidin-4-on, tedy opˇet ˇz´adn´e rhodium. • per – infix ,,-peroxo-” znamen´a n´ahradu −O− za −O − O−, ale ,,per” samo o sobˇe m´a v´ yznam zcela, takˇze pˇredpona ,,perhydro-” vyjadˇruje proces nasycen´ı vˇsech vazeb. Druh´ y z v´ yznam˚ u je vˇsak podle doporuˇcen´ı 1993 jiˇz zastaral´ y a nemˇel by se tedy uˇz´ıvat. • S – oznaˇcuje stereodeskriptor chir´aln´ıch slouˇcenin, ale tak´e se jedn´a o znaˇcku s´ıry. • fluoren – trivi´aln´ı n´azev tricyklick´e slouˇceniny, kter´ y m˚ uˇze budit dojem fluoru a dvojn´e vazby. • propadien – tento n´azev sice nen´ı zav´adˇej´ıc´ı, pˇresto je problematick´ y – ,,dien” je totiˇz ekvivalentn´ı n´azev pro ethen. ,,propa-” je pak moˇzn´e ch´apat jako pˇredponu.
6.4
Konstituce, konfigurace, konformace
Implementov´ana mus´ı b´ yt konstituce, protoˇze jeden sum´arn´ı vzorec m˚ uˇze oznaˇcovat velk´e mnoˇzstv´ı l´atek naprosto odliˇsn´ ych vlastnost´ı. Aby mohla b´ yt implementov´ana konfigurace, je nutn´e spr´avnˇe modelovat (nem´a smysl ˇreˇsit, zda m´a b´ yt atom um´ıstˇen nad nebo pod rovinou cyklu, pokud je pˇri modelov´an´ı um´ıstˇen do t´eto roviny). Stejnˇe jako konfigurace ani konformace nebyly implementov´any. Hlavn´ı d˚ uvod je ten, ˇze v drtiv´e vˇetˇsinˇe pˇr´ıpad˚ u nem´a n´azvoslov´ı n´astroje je od sebe odliˇsit (napˇr´ıklad vaniˇckov´a a ˇzidliˇckov´a konformace cyklohexanu).
27
Kapitola 7 Uˇ zivatelsk´ a dokumentace Program CheNom je vytvoˇren za u ´ˇcelem vizualizace organick´ ych molekul podle jejich jm´ena. Zdrojov´e k´ody byly ps´any tak, aby bylo moˇzn´e program provozovat jak pod operaˇcn´ımi syst´emy Windows (98+), tak pod tˇemi z rodiny Linux. Tato kapitola by mˇela sezn´amit ˇcten´aˇre s moˇznostmi programu a jejich vyuˇz´ıv´an´ım od instalace pˇres bˇeˇzn´e pouˇzit´ı aˇz po pokroˇcilou konfiguraci.
7.1
Instalace
K provozov´an´ı programu je nutn´e m´ıt nainstalovan´ y VRML prohl´ıˇzeˇc, a to nejl´epe integrovan´ y do internetov´eho prohl´ıˇzeˇce, kter´ y um´ı otevˇr´ıt soubor obsahuj´ıc´ı v n´azvu znak %. To umoˇzn ˇuje pouˇz´ıt WWW rozhran´ı programu. Pokud se jedn´a o standalone aplikaci, je moˇzn´e program pouˇz´ıvat z pˇr´ıkazov´e ˇr´adky.
7.1.1
Windows
1. Nainstalujte internetov´ y prohl´ıˇzeˇc splˇ nuj´ıc´ı v´ yˇse uvedenou podm´ınku (Internet Explorer ne) vˇcetnˇe pluginu pro VRML. 2. Zkop´ırujte z pˇriloˇzen´eho CD sloˇzku ,,\Windows\CheNom” na m´ısto, kde si pˇrejete program m´ıt. 3. Pokud jste jako prohl´ıˇzeˇc nezvolili Firefox, pak v textov´em editoru ˇ (napˇr. Pozn´amkov´ y blok) otevˇrete soubor ,,START.bat” a nahradte slovo firefox pˇr´ıkazem pro spuˇstˇen´ı vaˇseho prohl´ıˇzeˇce. Zmˇeny uloˇzte. 4. Program se spouˇst´ı obsaˇzen´ ym skriptem ,,START.bat”, popˇr. jeho konzolovou variantou ,,run-console.bat”. 28
7.1.2
Linux
1. Nainstalujte VRML plugin pro v´aˇs internetov´ y prohl´ıˇzeˇc. 2. Zkop´ırujte z pˇriloˇzen´eho CD sloˇzku ,,/Linux/CheNom” na m´ısto, kde si pˇrejete program m´ıt. 3. Spusˇtte v dan´e sloˇzce pˇr´ıkaz ./compile . 4. Program se spouˇst´ı obsaˇzen´ ym skriptem ,,START.sh”, popˇr. jeho konzolovou variantou ,,run-console.sh”.
7.2
Obsluha pˇ res WWW rozhran´ı
Po spuˇstˇen´ı serveru je moˇzn´e pˇristupovat k nˇemu pˇres internetov´ y prohl´ıˇzeˇc. WWW adresa, na n´ıˇz je sluˇzba dostupn´a je http://pocitac:port/chenom, tedy pro poˇc´ıtaˇc, na nˇemˇz je program spuˇstˇen na portu 80 (standardn´ı spuˇstˇen´ı) je to http://127.0.0.1:80/chenom, ale protoˇze port 80 se m˚ uˇze vynechat (std. port pro HTTP protokol), staˇc´ı pouˇz´ıt http://127.0.0.1/chenom. Pozor, na linuxov´ ych syst´emech sm´ı na portech niˇzˇs´ıch neˇz 1024 spouˇstˇet sluˇzby pouze spr´avce! Pokud j´ım nejste, obvykle se postupuje tak, ˇze se pouˇzije port 8080. Obsluha je velmi jednoduch´a. Staˇc´ı do b´ıl´e kolonky ve str´ance vyplnit jm´eno slouˇceniny a stisknout Enter, pˇr´ıp. tlaˇc´ıtko Zobrazit . Pro vkl´ad´an´ı speci´aln´ıch znak˚ u a form´atov´an´ı jsou pod touto kolonkou tlaˇc´ıtka. Modr´a tlaˇc´ıtka slouˇz´ı k form´atov´an´ı (jmenov´ano zleva se jedn´a o kurz´ıvu [ i ], doln´ı index [ sub ] a horn´ı index [ sup ]) a k vkl´ad´an´ı mezery [ ]. Pˇresnˇe tak, jak se tyto symboly pouˇz´ıvaj´ı v HTML. Pro vkl´ad´an´ı mal´ ych ˇreck´ ych p´ısmen slouˇz´ı zelen´a tlaˇc´ıtka [ α – ω ]. Po stisknut´ı odesl´an´ı dotazu je tento zpracov´an a nastat mohou dvˇe alˇ je zadan´e jm´eno vyhodnoceno jako chybn´e, nen´ı vygenerov´an ternativy. Bud ˇz´adn´ y model a je vr´acena str´anka obsahuj´ıc´ı seznam vˇsech vygenerovan´ ych chybov´ ych hl´aˇsen´ı, nebo vˇse probˇehne u ´spˇeˇsnˇe, podaˇr´ı se vygenerovat model zadan´e molekuly a vr´acena je str´anka, kter´a jej obsahuje v tagu <embed> . Program se ukonˇcuje kliknut´ım na ˇcerven´e tlaˇc´ıtko KONEC v prav´em horn´ım rohu. Jedn´a se o odkaz vedouc´ı na /STOP.
7.3
Obsluha z pˇ r´ıkazov´ eˇ r´ adky
K obsluze z pˇr´ıkazov´e ˇr´adky slouˇz´ı skript run-console . Pouˇzit´ı je snadn´e, staˇc´ı zadat do parametru jm´eno poˇzadovan´e molekuly (m˚ uˇze, ale nemus´ı b´ yt 29
v uvozovk´ach, pozor vˇsak na meta znaky jako ,,<”, ,,>”, ,,;”, . . . ). Program n´aslednˇe otevˇre vytvoˇren´ y model (pokud nebyl n´azev vyhodnocen jako chybn´ y) v asociovan´e aplikaci a skript se ukonˇc´ı.
7.4
Manipulace s modelem
Kromˇe bˇeˇzn´e manipulace jako je ot´aˇcen´ı ˇci pˇribliˇzov´an´ı, je moˇzn´e zjiˇsˇtovat chemickou znaˇcku atomu a seznam jemu odpov´ıdaj´ıc´ıch lokant˚ u kliknut´ım na nˇej. Nav´ıc zde tato informace z˚ ustane polopr˚ uhlednˇe zobrazena i po puˇstˇen´ı tlaˇc´ıtka myˇsi. Tato vlastnost m˚ uˇze pomoci pˇri orientaci ve sloˇzitˇejˇs´ıch modelech, nav´ıc pom˚ uˇze odliˇsit atomy, kter´e jsou zobrazeny stejnou nebo podobnou barvou.
7.5
Konfigurace
Cel´ y program (ve smyslu kaˇzd´a jeho ˇc´ast) je konfigurovateln´ y, od zmˇeny vzhledu generovan´ ych model˚ u aˇz po proveden´ı rozhran´ı.
7.5.1
Datab´ aze n´ azv˚ u
Datab´azi n´azv˚ u molekul, kter´e je program schopn´ y interpretovat, lze snadno a do libovoln´e m´ıry rozˇsiˇrovat. Nadmˇern´ ym rozˇsiˇrov´an´ım se vˇsak v´ yznamnˇe prodluˇzuje doba potˇrebn´a na vytvoˇren´ı derivaˇcn´ıho stromu a s n´ı i celkov´a doba bˇehu programu. Pˇri rozˇsiˇrov´an´ı je tak´e potˇreba postupovat opatrnˇe a d´avat pozor, aby v gramatice nevznikl konflikt. Pro tyto u ´ˇcely je dobr´e vytvoˇrit si sadu n´azv˚ u se spr´avn´ ymi v´ ysledky a po kaˇzd´e v´ yznamnˇejˇs´ı zmˇenˇe spustit skript, kter´ y odhal´ı pˇr´ıpadnou neshodu. Dalˇs´ı moˇznost´ı je pouˇz´ıt pˇripraven´ y skript, kter´ y pˇrevede soubor gramatiky do form´atu pouˇz´ıvan´eho programem bison. Pˇr´ıkaz bison -n -r solved gramatika.y pak vytvoˇr´ı nepotˇrebn´ y soubor ,,gramatika.tab.c” a soubor ,,gramatika.output”, kde je mimo jin´e pops´an stavov´ y automat pˇrij´ımaj´ıc´ı danou gramatiku, ale hlavnˇe seznam vˇsech konflikt˚ u. To usnadˇ nuje jejich hled´an´ı a nav´ıc na rozd´ıl od test˚ u zaruˇcuje nalezen´ı vˇsech. Naopak vznik´a opaˇcn´ y probl´em – nalezen´ı ,,faleˇsn´ ych” konflikt˚ u, kter´e ve skuteˇcnosti ˇz´adn´ ymi konflikty nejsou (bison totiˇz um´ı pracovat pouze s gramatikami ze tˇr´ıdy LALR(1), ale gramatika chenomu je bezkontextov´a (BKJ), coˇz je v´ yrazn´a nadmnoˇzina [viz Obr´azek 7.2). Vlastn´ı rozˇsiˇrov´an´ı je snadn´e. Je-li pˇrid´an nov´ y termin´al, je potˇreba ho zaˇradit do seznamu v souboru ,,terminaly.gra” a to na spr´avnou pozici. ˇ jeho zaps´an´ım za nˇej oddˇelenˇe Kaˇzd´emu termin´alu je pˇriˇrazeno ˇc´ıslo a to bud 30
sekvenc´ı b´ıl´ ych znak˚ u, nebo je to ˇc´ıslo o jedna vˇetˇs´ı neˇz jak´e bylo pouˇzito na pˇredchoz´ım ˇr´adku. Termin´al mus´ı b´ yt uveden v apostrofech, jinak je ˇr´adek povaˇzov´an za koment´aˇr (nesm´ı obsahovat mezeru), ale pˇr´ıpadn´e uveden´e ˇc´ıslo je pouˇzito. Spr´avnou pozic´ı nov´eho termin´alu se mysl´ı takov´a, kdy z˚ ustanou zachov´any pˇr´ısluˇsnosti k jednotliv´ ym interval˚ um definovan´ ym v souboru ,,konstanty.txt”. Ten vypad´a tak, ˇze je na kaˇzd´em ˇr´adku definov´an jeden interval. Definice m´a tvar doln´ı mez, libovoln´ y znak, horn´ı mez, sekvence b´ıl´ ych znak˚ u (SBZ), pomlˇcka, SBZ, jm´eno intervalu, SBZ, popis bez mezer. Pokud je na m´ıstˇe pomlˇcky jin´ y znak, pˇredpokl´ad´a se, ˇze jiˇz n´asleduje jen SBZ a ˇr´adek je ignorov´an. Nejobt´ıˇznˇejˇs´ım krokem rozˇsiˇrov´an´ı gramatiky je pˇrid´an´ı nov´eho pravidla. To se prov´ad´ı do souboru ,,gramatika.gra”. Jeho syntax je uvedena v Pˇr´ıloze D.
7.5.2
Skripty
Spouˇstˇec´ı skripty lze jednoduˇse modifikovat pro specifick´e potˇreby uˇzivatele pouh´ ym odkomentov´an´ım/zakomentov´an´ım pˇr´ısluˇsn´eho ˇr´adku. Bliˇzˇs´ı informace o moˇznostech jsou obsaˇzeny pˇr´ımo v koment´aˇr´ıch jednotliv´ ych skript˚ u (viz Pˇr´ıloha C).
7.5.3
WWW rozhran´ı
Cel´ y vzhled WWW str´anky pouˇzit´e v tomto rozhran´ı lze zmˇenit v souboru ,,index.htm”. Je pouze nutn´e zachovat nˇekolik n´asleduj´ıc´ıch pravidel: • Nejsou vkl´ad´any ˇz´adn´e soubory (obr´azky, videa, skripty, styly, . . . ). • Vˇsechna m´ısta, kde m´a b´ yt um´ıstˇeno jm´eno zobrazen´e molekuly, jsou oznaˇcena ˇretˇezcem $NAZEV$ (popˇr. ˇretˇezcem $NAZEV*$ , pokud nemaj´ı b´ yt interpretov´any HTML entity, coˇz je vhodn´e k pˇredvyplnˇen´ı aktu´aln´ıho n´azvu do vstupn´ıho pole pro moˇznost jeho opravy). • Vˇsechna m´ısta, kde m´a b´ yt vloˇzen v´ ysledek zpracov´an´ı n´azvu molekuly, jsou oznaˇcena ˇretˇezcem $TELO$ . • Formul´aˇr pro odesl´an´ı dotazu . . . – je odesl´an metodou GET. – m´a atribut action nastaven na /chenom.
31
– obsahuje jedin´ y prvek (kromˇe tlaˇc´ıtka submit ) – poloˇzku jm´enem mol , v n´ıˇz je vyplnˇen n´azev poˇzadovan´e molekuly. • Form´atov´an´ı lze prov´ezt pomoc´ı CSS, pouˇzity jsou dvˇe tˇr´ıdy: – error pro chybov´ y v´ ystup (element div ), – vystup pro okno molekuly (element embed ).
7.5.4
Vzhled modelu
R˚ uzn´e souˇc´asti vzhledu vytvoˇren´ ych model˚ u jsou definov´any na r˚ uzn´ ych m´ıstech. Pokud se m´a zmˇena vzhledu projevit i v modelech, kter´e jiˇz byly ˇ zmˇenu vytvoˇreny (pˇri zapnut´em cachov´an´ı [viz Pˇr´ıloha C]), je nutn´e bud prov´est i v nich, nebo (coˇz je obvykle jednoduˇsˇs´ı) smazat obsah sloˇzky ,,outs” a modely se vytvoˇr´ı znovu pˇri pˇr´ıˇst´ım poˇzadavku na nˇe jiˇz se spr´avn´ ym vzhledem. Definice vlastnost´ı jednotliv´ ych atom˚ u (barva a polomˇer) jsou um´ıstˇeny v souboru ,,prvky.gra”. Jedn´a se o 5. (polomˇer) a 7. (barva v HTML form´atu) sloupec. Sloupce jsou oddˇeleny pomoc´ı SBZ. Pokud ˇr´adek nezaˇc´ın´a dvojic´ı znak˚ u ,,>>” (tˇesnˇe pˇredch´azej´ıc´ı prvn´ımu sloupci), je povaˇzov´an za koment´aˇr. Vˇsechny ostatn´ı vlastnosti t´ ykaj´ıc´ı se vzhledu jsou um´ıstˇeny v souboru ,,sablona.wrl”. Jedn´a se o hlaviˇcku v´ ysledn´eho VRML dokumentu – modelu. Jsou zde definov´any pˇr´ıpadn´e Viewpointy, z´akladn´ı vzhled atom˚ u a vazeb (jm´ena tˇechto prototyp˚ u a jejich atributy mus´ı b´ yt zachov´any).
32
Obr´azek 7.1: Takto vypad´a vygenerovan´a str´anka
33
Obr´azek 7.2: Hierarchie tˇr´ıd gramatik [9]
Obr´azek 7.3: Hierarchie prototyp˚ u v dokumentu modelu
34
Kapitola 8 Z´ avˇ er C´ılem t´eto pr´ace bylo vytvoˇrit program, kter´ y by pomohl pˇredevˇs´ım student˚ um stˇredn´ıch ˇskol pˇri studiu n´azvoslov´ı organick´e chemie. Tento vytyˇcen´ y c´ıl byl snad programem CheNom naplnˇen. Pˇresto je moˇzn´e mnoh´e vˇeci vylepˇsit.
8.1
Moˇ znosti rozˇ siˇ rov´ an´ı
Urˇcit´a zlepˇsen´ı je moˇzn´e prov´est zpˇresnˇen´ım modelov´an´ı, rozˇs´ıˇren´ım o interpretaci n´azv˚ u nˇekter´ ych druh˚ u slouˇcenin a stereochemick´ ych n´azv˚ u nebo zjednoduˇsen´ım instalace. Nepˇresnosti v modelov´an´ı spoˇc´ıvaj´ı v pˇr´ıliˇsn´em zjednoduˇsen´ı pouˇzit´eho modelu. Bylo by ji vhodn´e nahrait za nˇekterou chemiky pouˇz´ıvanou metodu, jako napˇr´ıklad hybridizace nebo VSEPR[10]. Systematick´e n´azvoslov´ı heterocykl˚ u a kondenzovan´ ych polycykl˚ u nebylo implementov´ano, protoˇze m´a zcela odliˇsn´a pravidla tvoˇren´ı n´azv˚ u a ˇcasto jsou tyto n´azvy ch´ap´any sp´ıˇse jako trivi´aln´ı. Implementovat stereochemick´a pravidla nem´a smysl, dokud je pouˇzit pro modelov´an´ı souˇcasn´ y model, kter´ y nen´ı schopen zaruˇcit jejich dodrˇzen´ı. Dalˇs´ıho zpˇresnˇen´ı modelu by bylo dosaˇzeno, kdyby byl program schopen pˇri dalˇs´ım dotazu na stejnou molekulu ji d´ale aproximovat (napˇr. vˇzdy po dobu dalˇs´ıch 10 s). Pro vˇetˇs´ı pohodl´ı uˇzivatele by bylo moˇzn´e vytvoˇrit instal´ator / instalaˇcn´ı skript, kter´ y by umoˇzn ˇoval nakonfigurovat program automaticky. Jednalo by se o um´ıstˇen´ı z´astupce programu na plochu ˇci do nab´ıdky start, urˇcen´ı pouˇz´ıvan´eho interface, rozsahu cachov´an´ı, atd.
35
8.2
Alternativn´ı implementace
V pr˚ ubˇehu tvorby programu byly zvaˇzov´any r˚ uzn´e zp˚ usoby implementace jednotliv´ ych modul˚ u. V modulu Parser pˇrich´azela v u ´vahu alternativa urychluj´ıc´ı proces stavby derivaˇcn´ıho stromu. Program by neproch´azel st´ale dokola vˇsechna pravidla gramatiky, ale m´ısto toho pouˇzil z´asobn´ık (nebo frontu) na uloˇzen´ı tˇech pravidel, kter´a by bylo moˇzn´e pouˇz´ıt. Seznam pravidel v z´asobn´ıku (frontˇe) nejprve tvoˇr´ı vˇsechna pravidla gramatiky. Pˇri snaze o vytvoˇren´ı derivaˇcn´ıho stromu jsou nepouˇzit´a pravidla odstraˇ nov´ana a naopak jsou pˇrid´av´ana pravidla pouˇzit´a pravidla obsahuj´ıc´ı. Gramatika programu CheNom ovˇsem nen´ı natolik rozs´ahl´a, aby takto pracn´a implementace mˇela v´ yznam (doba v´ ypoˇctu v modulu Model je totiˇz v´ yraznˇe delˇs´ı). V modulu Server byla zvaˇzov´ana moˇznost vkl´ad´an´ı r˚ uzn´ ych soubor˚ u (obr´azky, skripty, kask´adov´e styly, atd.) do WWW str´anky rozhran´ı. Tato moˇznost byla z bezpeˇcnostn´ıch d˚ uvod˚ u zavrhnuta. Bylo by nutn´e oˇsetˇrit, aby uˇzivatel nemohl program zneuˇz´ıt pro obejit´ı nepovolen´eho pˇr´ıstupu k soubor˚ um.
8.3
Porovn´ an´ı s existuj´ıc´ım SW
V souˇcasnosti je na trhu nepˇrebern´e mnoˇzstv´ı program˚ u zamˇeˇren´ ych na problematiku r˚ uzn´ ych oblast´ı chemie. Co se t´ yˇce interpretace ˇcesk´eho n´azvu organick´ ych slouˇcenin, ˇz´adn´ y takov´ y software neexistuje. Pˇr´ıkladem programu, kter´ y se tak´e zab´ yv´a vizualizac´ı molekul, je program ACD/Labs 8.0. Jeho pˇrednost´ı je pˇresn´ y model molekuly, ve kter´em je moˇzn´e tak´e mˇeˇrit vzd´alenosti mezi atomy a vazebn´e u ´hly. Nav´ıc umoˇzn ˇuje snadno pˇrech´azet mezi r˚ uzn´ ymi typy zobrazen´ı (napˇr. barvy a velikosti atom˚ u). Naopak nev´ yhodami jsou moˇznost pr´ace s n´azvem pouze ve smˇeru od struktury, neschopnost programu v modelu graficky rozliˇsit n´asobnosti vazeb a jeho nedostupnost v ˇceˇstinˇe (a tedy ani programem generovan´e n´azvy nejsou ˇcesky).
36
Pouˇ zit´ a literatura [1] IUPAC, Commission on Nomenclature of Organic Chemistry: A Guide to IUPAC Nomenclature of Organic Compounds (Recommendations 1993) Blackwell Scientific publications, 1993 [2] Kahovec, J. a kol.: Pr˚ uvodce n´azvoslov´ım organick´ ych slouˇcenin podle IUPAC. Doporuˇcen´ı 1993, Academia, Praha 2000 ´ [3] Schejbalov´a, H., Stibor, I.: Uvod do studia organick´e a makromolekul´arn´ı chemie, Vyd. TUL, Liberec 2004 [4] Kol´aˇr, K. a kol.: Chemie /organick´a a biochemie/ II pro gymn´azia, SPN, Praha 1997 [5] Myˇsiˇcka, K. a kol.: Vzorce, modely a poˇc´ıtaˇcov´a grafika ve v´ yuce chemie, Gaudeamus, Hradec Kr´alov´e 2006 [6] Dalton, J.: A New System of Chemical Philosophy, John Weale, London 1842 [7] Zrzav´ y, J.: VRML, Tvorba dokonal´ ych WWW str´anek, GRADA, Praha 1999 [8] Berners-Lee T. a kol.: RFC 1945 – Hypertext Transfer Protocol – HTTP/1.0, 1996 [9] Yaghob J.: Principy pˇrekladaˇc˚ u, Lexik´aln´ı a syntaktick´a anal´ yza, [http://ulita.ms.mff.cuni.cz/pub/predn/pp/pp-03-lasxa.ppt], 2005 [10] Miˇcka Z. a kol.: Anorganick´a chemie I. Teoretick´a ˇc´ast, Karolinum, Praha 2003 [11] Saff, E.B., Kuijlaars, A.B.J.: Distributing many points on a sphere. Mathematical Intelligencer; Winter97, Vol. 19 Issue 1, 1997
37
Pˇ r´ıloha A S´ emantika - jazyk A.1
Konstanty
• ˇ c´ıslo: #10 (nez´aporn´e cel´e ˇc´ıslo) • n´ aboj: #2, # − 2 (cel´e ˇc´ıslo) • ˇ retˇ ezec: ∼text∼ • vazba: − (jednoduch´a), = (dvojn´a), % (trojn´a)
A.2
Parametry – reference
Syntaktick´ y strom se proch´az´ı postfixovˇe a v kaˇzd´em uzlu se vyhodnocuje s´emantika na z´akladˇe (jiˇz vyhodnocen´ ych) potomk˚ u. V pr´avˇe vyhodnocovan´em uzlu je vytvoˇreno pole obsahuj´ıc´ı v´ ysledn´e hodnoty vˇsech potomk˚ ua na nultou pozici se zapisuje vlastn´ı v´ ysledek. Tyto poloˇzky jsou dostupn´e pod sv´ ym indexem (tedy prvn´ı syn odpov´ıd´a $1). Kaˇzd´ y takov´ y uzel je struct , na jehoˇz poloˇzky se pˇristupuje standardn´ı teˇckovou notac´ı. V kaˇzd´e instrukci m´a kaˇzd´ y parametr nˇejakou defaultn´ı poloˇzku, kterou nen´ı nutn´e (ale je moˇzn´e) uv´adˇet. Poloˇzky jsou n´asleduj´ıc´ı: • .int – ˇc´ıslo, • .str – ˇretˇezec, • .zdo – seznam dvojic lokant˚ u (pokud to nen´ı odkud-kam, ale pouze kde, tj. nen´ı to dvojice, pak se v definici neuv´ad´ı druh´a poloˇzka a jej´ı hodnota je nastavena na pr´azdn´ y ˇretˇezec) 38
– .z – podpoloˇzka odkud/kde (ze seznamu vr´at´ı posledn´ı hodnotu – Pouze pro ˇcten´ı!), – .k – podpoloˇzka kam (ze seznamu vr´at´ı posledn´ı hodnotu – Pouze pro ˇcten´ı!), • .mol – skelet – atomy a vazby mezi nimi, pokud je potˇreba definovat jen nˇekter´e jeho vlastnosti, vkl´ad´a se atom oznaˇcen´ y jako ∼.∼; jemu je pak moˇzn´e nastavovat vlastnosti jako vaznost, n´aboj, . . . ; pokud je potˇreba definovat pouze vazbu, pak voln´a vede z 1 do 0 a kaˇzd´a jin´a z 1 do 1.
A.3
Instrukce
Jazyk obsahuje nˇekolik tˇr´ıd instrukc´ı, pˇr´ıstup se prov´ad´ı pˇres standardn´ı ˇctyˇrteˇckovou ( class::method ) konstrukci. Za kaˇzdou instrukc´ı n´asleduje stˇredn´ık.
A.3.1
Konvence:
• Nepovinn´e parametry jsou v hranat´e z´avorce (tedy XXX(a [,b ]) znaˇ XXX(a,b ), nebo XXX(a )). men´a bud • Jm´ena parametr˚ u jsou volena podle pˇr´ıpustn´eho obsahu a to podle n´asleduj´ıc´ıho seznamu: – n – nez´aporn´e cel´e ˇc´ıslo – rn – reference na n (defaultn´ı poloˇzka je .int) – N – n nebo rn – z – cel´e ˇc´ıslo – rz – reference na z (defaultn´ı poloˇzka je .int) – Z – z nebo rz – s – ˇretˇezec – rs – reference na s (defaultn´ı a jedin´a poloˇzka je .str) – S – s nebo rs – l – seznam (dvojic) lokant˚ u – rl – reference na l (defaultn´ı poloˇzka je .zdo) – L – l nebo rl 39
– m – skelet – zapisuje se n´asleduj´ıc´ım zp˚ usobem: ∗ definice se skl´ad´a ze dvou ˇc´ast´ı oddˇelen´ ych dvojteˇckou ∗ prvn´ı ˇc´ast obsahuje definice atom˚ u, tj. seznam definic atom˚ u oddˇelen´ ych pomlˇckou uzavˇren´ y do hranat´ ych z´avorek ∗ definice atomu vypad´a takto: (∼znacka ∼,#nasobnost,seznam jmen ) ∗ v seznam jmen se alternativn´ı n´azvy oddˇeluj´ı ˇc´arkou a cel´ y je uzavˇren do sloˇzen´ ych z´avorek ∗ druh´a ˇc´ast obsahuje definice vazeb, tj. seznam definic vazeb oddˇelen´ ych ˇc´arkou uzavˇren´ y do hranat´ ych z´avorek ∗ definice vazby vypad´a n´asledovnˇe: zVk, kde z a k jsou poˇradov´a ˇc´ısla v´azan´ ych atom˚ u z prvn´ı ˇc´asti definice (0 znamen´a voln´ y konec) a V je typ vazby (tj. jeden ze symbol˚ u -, =, %) ∗ Pˇ r.: [(∼P∼,#3,{∼1∼})-(∼N∼,#5,{∼2∼,∼a∼})]:[1%2,2=0] – rm – reference na m (defaultn´ı poloˇzka je .mol) – M – m nebo rm
A.3.2
INT – ˇ c´ıslo
• NEW(N ) – dosad´ı do $0.int hodnotu N Pˇ r.: INT::NEW(#3);INT::NEW($1.int);INT::NEW($1); • ADD(rn,N ) – poloˇzku rn zvˇetˇs´ı o hodnotu N Pˇ r.: INT::ADD($0.int,#3);INT::ADD($0,$2.int); • MUL(rn,N ) – poloˇzku rn zvˇetˇs´ı N -kr´at Pˇ r.: INT::MUL($0.int,#10);INT::MUL($0,$2.int);
A.3.3
STR – ˇ retˇ ezec
• NEW(S) – dosad´ı do $0.str hodnotu S Pˇ r.: INT::NEW(∼abc∼); INT::NEW($1.str); INT::NEW($1); • APP(rs,S) – za rs pˇripoj´ı ˇretˇezec S Pˇ r.: INT::ADD($0.str,∼abc∼);INT::ADD($0,$2.str);
40
A.3.4
MOL – skelet
ˇ • ZDO(rl,S1 [,S2 ]) – na konec rl pˇripoj´ı novˇe vytvoˇren´ y lokant bud z S1 (kde), nebo z S1 (odkud) do S2 (kam) Pˇ r.: MOL::ZDO($0.zdo,$1.str,∼1∼);MOL::ZDO($0,$1); • LAP(rl,L) – za seznam lokant˚ u rl pˇripoj´ı seznam lokant˚ uL Pˇ r.: MOL::LAP($0.zdo,$1.zdo);MOL::LAP($1,$2); • NEW(m) – dosad´ı do $0.mol hodnotu m Pˇ r.: MOL::NEW([(∼N∼,#3,{∼1∼})-(∼N∼,#5,{∼2∼,∼a∼})]:[1%2,2=0]); • CPY(rm) – dosad´ı do $0.mol hodnotu rm Pˇ r.: MOL::CPY($1.mol); • NWA(S) – dosad´ı do $0.mol atom (se standardn´ı vaznost´ı), jehoˇz znaˇcka je S a pˇriˇrad´ı mu lokant ∼1∼ Pˇ r.: MOL::NWA(∼Na∼);MOL::NWA($1.str);MOL::NWA($1); • SUB(rm1 ,rm2 ,N [,L]) – v rm1 nahrad´ı atomy na pozic´ıch L atomem rm2 (skelet obsahuj´ıc´ı pr´avˇe jeden atom), z´aroveˇ n otestuje, zda jich je N ; pokud L chyb´ı, nahrad´ı se vˇsechny atomy v rm1 , kter´ ych je v tom pˇr´ıpadˇe oˇcek´av´ano N Pˇ r.: MOL::SUB($5.mol,$4.mol,$3.int,$1.zdo); • DLA(rm,N ,L) – v rm odstran´ı atomy na pozic´ıch L (pokud je atom pˇripojen jednou vazbou — kromˇe vod´ık˚ u —, tak je tato pouze zruˇsena, pokud dvˇema stejn´e n´asobnosti, tak jsou tito ,,soused´e” propojeni), z´aroveˇ n otestuje, zda jich je N Pˇ r.: MOL::DLA($4.mol,$3.int,$1.zdo); • DLX(rm,S) – v rm odstran´ı atom na pozici S (vˇsechny vazby jsou ponech´any jako voln´e) Pˇ r.: MOL::DLX($4.mol,∼1∼); • DLV(rm,N ,L) – v rm odstran´ı vˇsechny vazby dle L(.z – .k), z´aroveˇ n otestuje, zda jich je N Pˇ r.: MOL::DLV($3.mol,$2.int,$1.zdo);MOL::DLV($3,$2,$1);
41
• DEC(rm,N ,L) – v rm sn´ıˇz´ı n´asobnosti vazeb o 1 (pˇr´ıpadnˇe je zruˇs´ı) dle L, z´aroveˇ n otestuje, zda jich je N (pokud je v L u vˇsech poloˇzek .zdo.k pr´azdn´ y ˇretˇezec, pak se poˇzaduje dvojn´asobn´a velikost L oproti N a poloˇzky se berou po dvou) Pˇ r.: MOL::DEC($3.mol,$2.int,$1.zdo);MOL::DEC($3,$2,$1); • INC(rm,N [,L]) – opak DEC, tedy v rm zv´ yˇs´ı n´asobnosti vazeb o 1 (pˇr´ıpadnˇe je vytvoˇr´ı) dle L, z´aroveˇ n otestuje, zda jich je N (pokud je v L u vˇsech poloˇzek .zdo.k pr´azdn´ y ˇretˇezec, pak se poˇzaduje dvojn´asobn´a velikost L oproti N a poloˇzky se berou po dvou); pokud je N nula, pak se spojuje prvn´ı atom s posledn´ım a L se neuv´ad´ı Pˇ r.: MOL::INC($3.mol,$2.int,$1.zdo);MOL::INC($3,#0); • MVV(rm,S1 ,S2 ,S3 ,S4 ) – v rm pˇresune vazbu mezi S1 a S2 na vazbu mezi S3 a S4 Pˇ r.: MOL::MVV($10,$1.zdo.z,$3.zdo.z,$1.zdo.z,$5.zdo.z); • ION(rm,Z) – do torza skeletu rm pˇrid´a (ve smyslu souˇctu) n´aboj Z Pˇ r.: MOL::ION($1.mol,#-2); • APL(rm1 ,rm2 ,N [,L]) – v rm1 aplikuje vˇse platn´e z rm2 (nesm´ı b´ yt atomy, jen vazba, n´aboj, arita, . . . ) na pozice L (kter´ ych se otestuje, jestli je N ); pokud rm2 obsahuje i vazbu, kter´a nen´ı voln´a (nevede do 0), ˇ dle L v .zdo.k, nebo v n´asleduj´ıc´ım pak m´a tato druh´ y konec bud prvku po .zdo.z; pokud L chyb´ı, tak se aplikuje dle N na vˇsechny atomy v rm1 (pokud jich je N ), pokud je N o 1 menˇs´ı, pak je vynech´an posledn´ı atom, pokud je N = 1, tak se aplikuje na prvn´ı atom Pˇ r.: MOL::APL($1.mol,$6.mol,$5.int,$3.zdo); • APP(rm1 ,rm2 ,N ,L) – za atomy rm1 (do rm1 ) pˇripoj´ı rm2 a spoj´ı prvn´ı atom rm2 s atomem dle L (kde), toto provede pro vˇsechny poloˇzky L (otestuje, zda jich je N ) Pˇ r.: MOL::APP($5.mol,$4.mol,$3.int,$1.zdo); • CON(rm1 ,rm2 ,N [,L]) – za atomy rm1 (do rm1 ) pˇripoj´ı rm2 a spoj´ı vˇsechny voln´e vazby rm2 s atomem dle L, toto provede pro vˇsechny poloˇzky L (otestuje, zda jich je N ), pokud L nen´ı definov´an, pak se pˇripojen´ı provede N -kr´at na atom ∼1∼ Pˇ r.: MOL::CON($5,$4,$3,$1);
42
• COI(rm1 ,rm2 ,N [,L]) – za atomy rm1 (do rm1 ) pˇripoj´ı rm2 a spoj´ı prvn´ı volnou vazbu rm2 s atomem dle L, toto provede pro vˇsechny poloˇzky L (otestuje, zda jich je N ), pokud L nen´ı definov´an, pak se pˇripojen´ı provede N -kr´at na atom ∼1∼ Pˇ r.: MOL::COI($5,$4,$3,$1); • LIN(rm1 ,rm2 ,N ) – vezme rm2 , d´a ji N -kr´at za sebe (spoj´ı vˇzdy prvn´ı atom nov´e kopie s posledn´ım atomem pˇredchoz´ı kopie), s t´ım, ˇze v kaˇzd´e kopii zruˇs´ı vˇsechna jm´ena, v´ ysledek uloˇz´ı do rm1 a oˇc´ısluje (od jedniˇcky) Pˇ r.: MOL::LIN($0.mol,$0.mol,$1.mol); • CHN(rm1 ,rm2 ,N [,L]) – vezme rm2 , d´a ji N -kr´at za sebe, s t´ım, ˇze v kaˇzd´e kopii maj´ı vˇsechny lokanty pˇrid´anu ˇc´arku (oproti pˇredchoz´ı kopii), a pot´e spoj´ı dvojice dle L (pokud je uvedeno, jinak atomy se jm´enem 1 a poˇctem ˇc´arek liˇs´ıc´ım se o jedna, tj. 1-1’, 1’-1", . . . ) jednoduchou vazbou Pˇ r.: MOL::CHN($0.mol,$2.mol,$1.int); • ADD(rm1 ,rm2 ,N ) – k torzu skeletu rm1 , pˇrid´a N -kr´at torzo skeletu rm2 (tj. seˇctou se n´aboje a slouˇc´ı se seznamy vazeb) Pˇ r.: MOL::ADD($0.mol,$2.mol,#1); • FIN(rm) – dopln´ zd´emu atomu vod´ıkytak, aby mu nic nechybˇelo P ı kaˇ vaznost = (vazby) nasobnost + |naboj| , pokud toto splnit nelze, tj. vaznost atomu je niˇzˇs´ı, neˇz poˇcet jeho vazeb, je vyvol´ana chyba Pˇ r.: MOL::FIN($1.mol);
43
Pˇ r´ıloha B index.htm <meta http-equiv="content-type" content="text/html; charset=windows-1250" />
CheNom - $NAZEV$ <style> /* popis form´ atov´ an´ ı */ ... <script> /* javascript obsluhuj´ ıc´ ı tlaˇ c´ ıtka formul´ aˇ re */ ...
$NAZEV$
$TELO$
44
Pˇ r´ıloha C Skripty C.1
START.bat
@echo off cd Complet \ @echo on start server 80 start firefox "http://127.0.0.1/chenom"
C.2
START.sh
#!/bin/sh cd Complet ./server 8080& firefox "http://127.0.0.1:8080/chenom"
C.3
run.bat
rem @echo off set jmeno=%1 echo %jmeno% >input set vystup="outs\%jmeno:~1,-1%.wrl"
45
if EXIST %vystup% goto cached rem rem rem rem
-----------------necachovat modely: del /F /Q "outs\*.wrl" ------------------
chenom.exe DATA\cp1250\settings.ini -e >%vystup% 2>error.log < input if ERRORLEVEL 1 ( del input rem -----------------------rem podrobny chybovy vystup: echo ===================================== >> error.log type %vystup% >> error.log rem -----------------------del %vystup% rem pause @echo on exit 3 ) :cached del input @echo on
C.4
run.sh
#!/bin/sh vstup=input vystup="outs/
[email protected]" echo $@ >$vstup # -----------------# necachovat modely: rm -f outs/*.wrl # -----------------if [ ! -e $vystup ]; then if ! ( \ ./chenom DATA/utf8/settings.ini -e <$vstup >$vystup 2>error.log \ ); then
46
# -----------------------# podrobny chybovy vystup: echo ======================== >> error.log cat $vystup >> error.log # -----------------------rm -f $vstup rm -f $vystup exit 3 fi fi rm -f $vstup
C.5
run-console.bat
@echo off set jmeno=%1 echo %jmeno% >input set vystup="outs\%jmeno:~1,-1%.wrl" if EXIST %vystup% goto cached rem rem rem rem
-----------------necachovat modely: del /F /Q "outs\*.wrl" ------------------
chenom.exe DATA\cp1250\settings.ini >%vystup% < input set chyba=%ERRORLEVEL% if ERRORLEVEL 1 ( del input rem -----------------------rem podrobny chybovy vystup: echo =========================== >> error.log type %vystup% >> error.log rem -----------------------del %vystup% pause @echo on exit /B %chyba% ) :cached
47
del input rem -------------------------rem zde napiste prikaz, ktery otevre model ve vasem prohlizeci rem cesta k souboru je %vystup% rem explorer %vystup% %vystup% rem -------------------------rem necachovat (druha varianta): rem del %vystup% rem -------------------------@echo on
C.6
run-console.sh
#!/bin/sh echo $@ >input vstup=input vystup="outs/
[email protected]" # -----------------# necachovat modely: rm -f outs/*.wrl # -----------------if [ ! -e $vystup ]; then if ! ( \ ./chenom DATA/utf8/settings.ini <$vstup >$vystup 2>error.log \ ); then # -----------------------# podrobny chybovy vystup: echo ======================== >> error.log cat $vystup >> error.log # -----------------------rm -f $vstup rm -f $vystup exit 3 fi fi rm -f $vstup # zde napiste prikaz, ktery otevre model ve vasem prohlizeci # cesta k souboru je $vystup
48
Pˇ r´ıloha D Datab´ azov´ e soubory D.1
settings.ini
[Soubory] Konstanty = konstanty.txt Terminaly = terminaly.gra Gramatika = gramatika.gra Prvky = prvky.gra Vystup = sablona.wrl
Jm´eno souboru nesm´ı obsahovat mezeru, pokud je pouˇzita relativn´ı cesta, nesm´ı b´ yt z bezpeˇcnostn´ıch d˚ uvod˚ u pouˇzit odkaz do nadˇrazen´e sloˇzky. Cesta je vztaˇzena ke sloˇzce, v n´ıˇz se nach´az´ı tento soubor. Tedy pokud je absolutn´ı cesta k tomuto souboru ,,C:\chenom\DATA\settings.ini”, ukazuje cesta ,,v2\prvky” na soubor ,,C:\chenom\DATA\v2\prvky”.
D.2
konstanty.txt
0000-0006 0007-0007 0008-0019 0020-0029 0030-0039 0040-0049 0050-0059
< < -
Separator (.,,,:,;,-,->) Carka (’) Zavorka ((,),[,],{,}) Operace (de,nor,anhydro,cyklo,seko,abeo,retro) Formatovani (
,<sub>,...)
49
0060-0099 0100-0199 0200-0299 0300-0499 0500-0529 0530-0999 1000-1009 1010-1099 1100-1199 1200-1229 1230-1249 1250-1399 1400-1433 1434-1499 1500-1999 2000-2199 2200-2999 3000-3999 4000-4999 5000-9999
D.3
< < < < < < -
CharakteristickaSkupina (yl,an,en,yn,...) Stereodeskriptory (cis,trans,meso,...) AnorgPripona (n´ y,nat´ y,...) Cislice (0123456789) Alfabeta (αβ...) Latinka (abcd...) Samohlaska (a´ ae´ eˇ ei´ ıo´ ou´ u˚ uy´ y) u--pˇ ridat_n´ asobnost_lokant˚ u,...) ReckePocty (#lokant˚ LatinskePocty (poˇ cty_opakov´ an´ ı_struktur,...) ZnackaPrvku (H,He,...) JmenoPrvku (oxa,sila,...) TypSlouceniny (aren,oxokyselina,keton,...) TrivKoren (bora,oxida,joda,metha,...) TrivNazvy (acetylen,ethan,...)
terminaly.gra
========= 0000 ’-’ ’;’ ’:’ ’,’ ’.’ ’->’ ’’’ --------- 0020 ’(’ ’)’ ’[’ ’]’ ’’ ’’ --------- 0030 ’de’ ’nor’ ’anhydro’ ’cyklo’
50
’seko’ ’abeo’ ’retro’ ’per’ --------- 0050 ’ ’ ’<sup>’ ’’ ’<sub>’ ’’ ’’ ’’ ========= 0100 ’yl’ ’yliden’ ’ylidyn’ ’ium’ ’ylium’ ’id’ ’it’ ’´ at’ ’an’ ’en’ ’yn’ ’al’ ’ol’ ’on’ ’lat’ ’at’ ’oyl’ ’imin’ ’amoyl’ ’o´ at’ ’os’ . . .
51
D.4
gramatika.gra
52
D.5
prvky.gra
--Zn Z arita hybridizace polomˇ er hmotnost barva --------------------------------------------------------->>H 1 1 s1 1 1.E-3 #0000ff --He 2 -1 1 1.E-3 #ffffff --Li 3 -1 1 1.E-3 #ffffff --Be 4 -1 1 1.E-3 #ffffff --B 5 3 1 1.E-3 #ffffff >>C 6 4 s1p3 1 1.E-2 #ff0000 >>N 7 3 s1p2 1 1.E-3 #00ff00 >>N 7 5 s1p3d1 1 1.E-3 #00ff00 >>O 8 2 s1p1 1 1.E-3 #ffffff >>F 9 1 s1 1 1.E-3 #00ffff --Ne 10 -1 1 1.E-3 #ffffff . . . . . . . . . . . . . . . . . . . . .
D.6
sablona.wrl
#VRML V2.0 utf8 NavigationInfo { type "EXAMINE" } ############################## pohledy ############################## Viewpoint { position 0 0 50 description "above" } # ... ############################ atom - vzor ############################ PROTO Atom[ field SFColor dCol 1.0 1.0 1.0 # barva atomu field SFFloat fRad 1. # polomer atomu field MFString sSig [] # znacka prvku field MFString sLoc [] # seznam lokantu atomu ]{ Transform{ children[ DEF java Script{ eventIn SFBool popisky eventOut SFFloat outputVis
53
eventOut SFVec3f outputPos url "javascript: function popisky(value){ if (value){ outputVis = 0.0; outputPos[0] = 0.0; outputPos[1] = 0.0; outputPos[2] = 8.0; }else{ outputVis = 0.5; outputPos[0] = 0.0; outputPos[1] = 0.0; outputPos[2] = 1.0; } } " } Billboard{ axisOfRotation 0. 0. 0. children[ DEF pozice Transform{ translation .0 .0 1. # -fRad/2 -fRad/2 fRad children[ Shape{ #znacka prvku geometry Text { string IS sSig fontStyle FontStyle{ justify ["MIDDLE","MIDDLE"] } } appearance Appearance{ material DEF vzhled Material { diffuseColor 1. .0 .0 #barva popisku transparency 1. } } } Transform{ #seznam lokantu translation .0 -1. .0 children[ Shape{ geometry Text { string IS sLoc fontStyle FontStyle{ justify ["BEGIN","TOP"] family ["Palatino Linotype" ]
54
} } appearance Appearance{ material DEF vzhledLoc Material { diffuseColor 1. 1. .0 #barva popisku transparency 1. } } } ] } ] } Shape{ geometry Sphere { #polomer vnitrni casti radius .5 } appearance Appearance{ material Material { diffuseColor IS dCol transparency 0. #vnitrni cast - viditelnost } } } Shape{ geometry Sphere { radius IS fRad } appearance Appearance{ material Material { diffuseColor IS dCol transparency .5 #vnejsi cast - viditelnost } } } DEF tl TouchSensor{ #atom bude reagovat na stisk tl. } ] } ] } ROUTE tl.isActive TO java.popisky ROUTE java.outputVis TO vzhled.transparency ROUTE java.outputVis TO vzhledLoc.transparency
55
ROUTE java.outputPos TO pozice.translation } ########################### vazby - vzory ########################### PROTO Spoj[ field SFColor dCol 1.0 1.0 1.0 field SFFloat fLen 2. field SFVec3f fPos 0 1 0. #0 fLen/2 0 field SFFloat fRad .5 ]{ Transform{ translation IS fPos children[ Shape{ geometry Cylinder { height IS fLen radius IS fRad } appearance Appearance{ material Material { diffuseColor IS dCol transparency 0 } } } ] } } PROTO Vazba1 [ field SFFloat fDist 2. field SFVec3f fPoz 0 1 0. ]{ Spoj { dCol 1.0 1.0 1.0 fLen IS fDist fPos IS fPoz } } PROTO Vazba2 [ field SFFloat fDist 2. field SFVec3f fPoz 0 1 0. ]{ Transform{ children[
56
Transform{ translation .16666666 0 0 children Spoj { dCol 0 1 1 fRad .33333333 fLen IS fDist fPos IS fPoz } } Transform{ translation -.16666666 0 0 children Spoj { dCol 0 1 1 fRad .33333333 fLen IS fDist fPos IS fPoz } } ] } } # PROTO Vazba3 - obdobne #####################################################################
57