The CNS electron density map file contains information about the unit cell, indexing of the map, and the actual electron density map. The grid size of the map is determined by the GRID parameter in the FFT statement.
The following lines show the beginning of a typical electron density map file:
2 !NTITLE
REMARKS FILENAME=""
REMARKS DATE:18-Jun-98 12:24:08 created by user:
30 4 12 15 5 10 16 2 12
0.40960E+02 0.18650E+02 0.22520E+02 0.90000E+02 0.90770E+02 0.90000E+02
ZYX
0
-0.97086E+00-0.49927E+00-0.82774E+00-0.13491E+01-0.57034E+00-0.71253E-01
-0.19491E+00 0.61017E+00 0.10064E+01-0.22888E+01-0.94020E+00 0.77451E+00
0.57539E+00-0.31211E-01-0.27430E+00-0.36526E+00 0.34772E+00 0.81884E+00
-0.19954E+01-0.10117E+01 0.18038E+01 0.19008E+01 0.11886E+00-0.41646E+00
0.47560E-01 0.48855E+00 0.57606E+00-0.22320E+00-0.12787E+01 0.47590E+00
....
-9999
0.2044E-09 0.9999E+00
The following is a FORTRAN example of how to read the formatted (QFORM=.TRUE.) or unformatted (QFORM=.FALSE.) version of the electron density maps:
C
C read title
IF (QFORM) THEN
READ(UNIT,'(/I8)',END=6,ERR=7) NTITLE
IF (NTITLE .LE. 0) THEN
READ( UNIT, '(A)',END=6,ERR=7)
ELSE
DO J = 1, NTITLE
TITLE(J) = ' '
READ (UNIT, '(A)',END=6,ERR=7) TITLE(J)
ENDDO
ENDIF
ELSE
DO J=1,MXTITL
TITLE(J)=' '
END DO
READ(UNIT,END=6,ERR=7) NTITLE,(TITLE(J)(1:80),J=1,NTITLE)
END IF
C
C read sectioning information
IF (QFORM) THEN
READ(U,'(9I8)',END=6,ERR=7)
& NA,AMIN,AMAX,NB,BMIN,BMAX,NC,CMIN,CMAX
ELSE
READ(U,END=6,ERR=7)
& NA,AMIN,AMAX,NB,BMIN,BMAX,NC,CMIN,CMAX
END IF
C
C read unit cell constants in angstroms and degrees
IF (QFORM) THEN
READ(U,'(6E12.5)',END=6,ERR=7) (CELL(I),I=1,6)
ELSE
READ(U,END=6,ERR=7) (CELL(I),I=1,6)
END IF
END IF
C
C read matrix mode
IF (QFORM) THEN
READ(U,'(3A)',END=6,ERR=7) MODE
ELSE
READ(U,END=6,ERR=7) MODE
END IF
IF (MODE.NE.'ZYX') THEN
CALL WRNDIE(-5,'RMAP','error in matrix mode')
GOTO 7
END IF
C
C read density matrix, c is slowest ("z-sections").
DO C=CMIN,CMAX
C
C read next section
IF (QFORM) THEN
READ(U,'(I8)',END=6,ERR=7) KSECT
READ(U,'(6E12.5)',END=6,ERR=7)
& ((MAP(A,B,C),A=AMIN,AMAX),B=BMIN,BMAX)
ELSE
READ(U,END=6,ERR=7) KSECT
READ(U,END=6,ERR=7)
& ((MAP(A,B,C),A=AMIN,AMAX),B=BMIN,BMAX)
END IF
C
END DO
C
C read average and scale factor for map
IF (QFORM) THEN
READ(U,'(I8)',END=6,ERR=7) KSECT
READ(U,'(2(E12.4,1X))',END=6,ERR=7) RAVE, RSIGMA
ELSE
READ(U,END=6,ERR=7) KSECT
READ(U,END=6,ERR=7) RAVE, RSIGMA
END IF