next up previous index
Következő: 9.1.3 tcl/tk Fel: 9.1.2 AWK mindenkinek Előző: 9.1.2.1 Válogassunk!   Index

9.1.2.2 Adatkonverzió

Nézzünk egy picit bonyolultabb feladatot: készítsünk egy táblázatból három másikat úgy, hogy közben koordináta transzformációt végzünk, mértékegységet váltunk és a táblázat oszlopainak szélességét és sorrendjét is megváltoztatjuk - mint ahogy bizonyára kitalálták - a táblázatokat bemenő adatként felhasználó programok igényei szerint.

A kiinduló táblázat egy kristály elemi cellájában található 12 db. atom koordinátáit tartalmazza - cellaméret egységekben. A mintának választott kristály (Na2SO3) sajnos hexagonális, így a rendelkezésre álló koordináták ferdeszögű koordinátarendszerben vannak megadva.

Az első eredményfájl úgynevezett XYZ adatfájl lesz, ami pl. az Xmol, Rasmol, Molwin és hasonló programok által felismert adatformátum. Ebben az Angströmben megadott koordinátákat egy kétsoros fejléc előzi meg (atomok száma és egy címsor).

A második és a harmadik eredményfájl a DVscat nevű DV-Xa molekula modellező programhoz szükséges. Hogy ne unatkozzunk, a második eredményfájlban derékszögű rendszerben és atomi egységben kell megadni a koordinátákat, míg a harmadikban - a bemenő fájlhoz hasonlóan - ferdeszögű rendszerben és cella egységeket használva kell megadni az atomok pozícióját.


Táblázat: A kiindulási adatsor (egy elemi cella két Na2SO3 egységet tartalmaz, s az egységcella oldalai: a = b = 5.4587 A; c=6.1792 A)
atom x/a y/b z/c
S1 0.33333 0.66666 0.1730
S2 -0.33333 -0.66666 -0.1730
O3 0.1313 0.38200 0.2683
O4 -0.1313 -0.38200 -0.2683
O5 0.3820 0.25070 -0.2683
O6 -0.3820 -0.25070 0.2683
O7 0.2507 -0.1313 0.2683
O8 -0.2507 0.1313 -0.2683
Na9 0 0 0
Na10 0 0 0.5
Na11 0.33333 0.66666 0.66666
Na12 -0.33333 -0.66666 -0.66666

A feladatot az alábbi programocskával oldottam meg, melyet így kell futtatni:

awk -f so3.awk Na2SO3
ahol Na2SO3 a táblázatban kilistázott adatokat tartalmazza (fejléc nélkül), so3.awk az itt látható program, s az eredmény pedig a Na2SO3.xyz, Na2SO3.f05 és Na2SO3.f03 fájlokba kerül.

Az so3.awk program listája

#Átszámolja a hexagonális Na2SO3 kristály egy elemi cellájában 
#levő atomok koordinátáit Descartes koordináta rendszerre.
# cx=cos 120 degs 
# cy=sin 120 degs
# x,y,z    ferdeszögű koordináták cella egységben
# xa,yb,zc Descartes koordináták (Angström egységekben)
# au       konverziós faktor az atomi hosszegység és az Angström között
# cella méret: a=5.4587 A ; c=6.1792 A

#
# Az első rekord beolvasásakor végezzük el az inicializálásokat
# Ezek egyrészét a BEGIN szekcióba is tehettük volna, 
# de a FILENAME változó ott még nem áll rendelkezésre!!!
NR==1 { a=5.4587; c=6.1792
        cx=-0.5;  cy=0.8660254
        au=0.529177
# Háromféle adatfájlt készítünk
        f1= FILENAME ".xyz"
        f2= FILENAME ".f05"
        f3= FILENAME ".f03"
# Az XYZ eredményfájl elejére fejlécet is írunk
        print 12 > f1
        print FILENAME " unit cell" >> f1
      }

#
# Az alábbi műveleteket minden beolvasott rekordra elvégezzük
      {
# A negtív koordinátákat eltolással a pozitív térnyolcadba transzformáljuk 
        x=$2; if (x<0) x=x+1
        y=$3; if (y<0) y=y+1
        z=$4; if (z<0) z=z+1
# Az egységcellát az origóra centráljuk
        x=x-0.5
        y=y-0.5
        z=z-0.5
# A ferdeszögű koordinátákat derékszögűvé transzformáljuk
        xa=(x+cx*y)*a
        yb=y*cy*a
        zc=z*c
# A koordinátákat és az atom nevét mindhárom fájlba kiírjuk
        printf("%-4s %8.5f %8.5f %8.5f\n", $1,xa,yb,zc) >> f1
printf("%20.10E%20.10E%20.10E%5s\n", xa/au,yb/au,zc/au,$1) >> f2
printf("%20.10E%20.10E%20.10E%5s\n", x,y,z,$1) >> f3
}

12
Na2SO3 unit cell

Táblázat: Az Na2SO3.xyz eredményfájl listája
S1 -1.36468 0.78786 -2.02060
S2 1.36468 -0.78786 2.02060
O3 -1.69056 -0.55783 -1.43172
O4 1.69056 0.55783 1.43172
O5 0.03630 -1.17853 1.43172
O6 -0.03630 1.17853 -1.43172
O7 -2.36717 1.74298 -1.43172
O8 2.36717 -1.74298 1.43172
Na9 -1.36468 -2.36369 -3.08960
Na10 -1.36468 -2.36369 0.00000
Na11 -1.36468 0.78786 1.02983
Na12 1.36468 -0.78786 -1.02983


Táblázat: Az Na2SO3.f05 eredményfájl listája
-2.578863027E+00 1.488847700E+00 -3.818379106E+00 S1 2.578863027E+00 -1.488847700E+00 3.818379106E+00 S2 -3.194695518E+00 -1.054146337E+00 -2.705560975E+00 O3 3.194695518E+00 1.054146337E+00 2.705560975E+00 O4 6.859775652E-02 -2.227107474E+00 2.705560975E+00 O5 -6.859775652E-02 2.227107474E+00 -2.705560975E+00 O6 -4.473295807E+00 3.293760632E+00 -2.705560975E+00 O7 4.473295807E+00 -3.293760632E+00 2.705560975E+00 O8 -2.578863027E+00 -4.466721769E+00 -5.838500162E+00 Na9 -2.578863027E+00 -4.466721769E+00 0.000000000E+00 Na10 -2.578863027E+00 1.488847700E+00 1.946088874E+00 Na11 2.578863027E+00 -1.488847700E+00 -1.946088874E+00 Na12      


Táblázat: Az Na2SO3.f03 eredményfájl listája
-1.666700000E-01 1.666600000E-01 -3.270000000E-01 S1 1.666700000E-01 -1.666600000E-01 3.270000000E-01 S2 -3.687000000E-01 -1.180000000E-01 -2.317000000E-01 O3 3.687000000E-01 1.180000000E-01 2.317000000E-01 O4 -1.180000000E-01 -2.493000000E-01 2.317000000E-01 O5 1.180000000E-01 2.493000000E-01 -2.317000000E-01 O6 -2.493000000E-01 3.687000000E-01 -2.317000000E-01 O7 2.493000000E-01 -3.687000000E-01 2.317000000E-01 O8 -5.000000000E-01 -5.000000000E-01 -5.000000000E-01 Na9 -5.000000000E-01 -5.000000000E-01 0.000000000E+00 Na10 -1.666700000E-01 1.666600000E-01 1.666600000E-01 Na11 1.666700000E-01 -1.666600000E-01 -1.666600000E-01 Na12      

Ez az oldal elérhető: http://esca.atomki.hu/dlug/commodus/awk.html 698
next up previous index
Következő: 9.1.3 tcl/tk Fel: 9.1.2 AWK mindenkinek Előző: 9.1.2.1 Válogassunk!   Index

1999-09-17