Gaussian Cube Files

Original written by Paul Bourke
December 2003

Wprowadzenie

Plik kostki opisuje dane wolumetryczne, jak również pozycje atomów i pochodzi z pakietu oprogramowania Gaussian. Plik składa się z nagłówka, który zawiera informację o atomie i rozmiar oraz orientację danych wolumetrycznych. Następują dane wolumetryczne, jeden skalar na element wokselowy. Wszystkie aspekty tego pliku to tekst (czytelny dla człowieka), początkowo wartości liczbowe wynosiły 5 szerokości dla liczb całkowitych, które rozpoczynały każdą linię nagłówka (po pierwszej), a wartości zmiennoprzecinkowe zostały sformatowane 12.6, czyli 12 znaków szerokości z sześcioma miejscami dziesiętnymi.

Nagłówek

Pierwsze dwa wiersze nagłówka są komentarzami i są zwykle ignorowane przy parsowaniu pakietów lub używane jako dwie domyślne etykiety.

Trzecia linia zawiera liczbę atomów zawartych w pliku, po których następuje pozycja początku danych wolumetrycznych.

Następne trzy linie podają liczbę wokseli wzdłuż każdej osi (x, y, z), po których następuje wektor osi. Uwaga: oznacza to, że wolumin nie musi być wyrównany z osią współrzędnych, w rzeczywistości oznacza to również, że może być ścinany, chociaż większość pakietów wolumetrycznych tego nie obsługuje. Długość każdego wektora jest długością boku woksela, umożliwiając w ten sposób nie objętość sześcienną. Jeśli znak liczby wokseli w wymiarze jest dodatni, to jednostki są Bohrami, jeśli są ujemne, to Angstremami.

Ostatnia sekcja w nagłówku to jedna linia dla każdego atomu składającego się z pięciu liczb, pierwsza to liczba atomów, druga (?), A ostatnie trzy to współrzędne x, y i z centrum atomu.

Dane wolumetryczne

Dane wolumetryczne są proste, jedna liczba zmiennoprzecinkowa dla każdego elementu wolumetrycznego. Oryginalny format Gaussa układa wartości w formacie pokazanym poniżej w przykładzie, większość parsujących programów może odczytywać dowolny format rozdzielony białymi spacjami. Tradycyjnie siatka jest ułożona z osią "x" jako zewnętrzną pętla i oś "z" jako wewnętrzną pętla, na przykład zapisana jako

   for (ix=0;ix<NX;ix++) {
      for (iy=0;iy<NY;iy++) {
         for (iz=0;iz<NZ;iz++) {
            printf("%g ",data[ix][iy][iz]);
            if (iz % 6 == 5)
               printf("\n");
         }
         printf("\n");
      }
   }
Przykład

W poniższym przykładzie dane wolumetryczne wynoszą 40 na 40 na 40 oczek, każdy woksel ma szerokość 0.283459 jednostek, a objętość jest wyrównana z osią współrzędnych. Są tutaj trzy atomy.

CPMD CUBE FILE.
 OUTER LOOP: X, MIDDLE LOOP: Y, INNER LOOP: Z
    3    0.000000    0.000000    0.000000
   40    0.283459    0.000000    0.000000
   40    0.000000    0.283459    0.000000
   40    0.000000    0.000000    0.283459
    8    0.000000    5.570575    5.669178    5.593517
    1    0.000000    5.562867    5.669178    7.428055
    1    0.000000    7.340606    5.669178    5.111259
 -0.25568E-04  0.59213E-05  0.81068E-05  0.10868E-04  0.11313E-04  0.35999E-05
      :             :             :           :            :            :
      :             :             :           :            :            :
      :             :             :           :            :            :
        In this case there will be 40 x 40 x 40 floating point values
      :             :             :           :            :            :
      :             :             :           :            :            :
      :             :             :           :            :            :