Einführung

Die Cube-Datei beschreibt sowohl volumetrische Daten als auch Atompositionen, sie stammt aus dem Gaussian-Softwarepaket. Die Datei besteht aus einem Header, der die Atominformationen und die Größe sowie die Ausrichtung der volumetrischen Daten enthält. Diesem folgen die volumetrischen Daten, ein Skalar pro Voxelelement. Alle Aspekte der Datei sind Text (menschlich lesbar), ursprünglich waren die numerischen Werte 5 breit für ganze Zahlen, die jede Kopfzeile (nach dem ersten) begannen, und Fließkommawerte waren 12,6 formatiert, dh 12 Zeichen breit mit 6 Dezimalstellen.

Header

Die ersten beiden Zeilen des Headers sind Kommentare, sie werden im Allgemeinen von Parsing-Paketen ignoriert oder als zwei Standard-Labels verwendet.

Die dritte Zeile enthält die Anzahl der in der Datei enthaltenen Atome, gefolgt von der Position des Ursprungs der volumetrischen Daten.

Die nächsten drei Zeilen geben die Anzahl der Voxel entlang jeder Achse (x, y, z) gefolgt vom Achsenvektor an. Beachten Sie, dass das Volumen nicht mit der Koordinatenachse ausgerichtet sein muss. Es bedeutet auch, dass es geschert werden kann, obwohl die meisten Volumenpakete dies nicht unterstützen. Die Länge jedes Vektors ist die Länge der Seite des Voxels, wodurch nicht-kubische Volumina ermöglicht werden. Wenn das Vorzeichen der Anzahl der Voxel in einer Dimension positiv ist, sind die Einheiten Bohr, wenn sie negativ sind, dann Angström.

Der letzte Abschnitt im Header ist eine Zeile für jedes Atom bestehend aus 5 Zahlen, die erste ist die Atomzahl, die zweite (?), Die letzten drei sind die x, y, z Koordinaten des Atomzentrums.

Volumetrische Daten

Die volumetrischen Daten sind einfach, eine Fließkommazahl für jedes volumetrische Element. Das ursprüngliche Gauß-Format hat die Werte in dem unten gezeigten Format angeordnet, die meisten Analyseprogramme können jedes durch Leerzeichen getrennte Format lesen. Traditionell wird das Gitter mit der x-Achse als äußere Schleife und der z-Achse als innere Schleife, zum Beispiel geschrieben, als

   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");
      }
   }
Beispiel

Im folgende Beispiel ist die Volumendaten ein 40 um 40 um 40 Raster, wobei jedes Voxel 0,283459 Einheiten breit und das Volumen mit der Koordinatenachse ausgerichtet ist. Es gibt drei Atome.

 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
      :             :             :           :            :            :
      :             :             :           :            :            :
      :             :             :           :            :            :