ComQum-Pol-EXAFS

ComQum-Pol-Exafs is a combination of quantum chemistry or QM/MM and polarised EXAFS refinement. This page shows how to set up such a calculation.

In fact, there are three separate approaches:
The method was designed by Ulf Ryde 2010, partly based on scripts provided by Victor Batista and Eduardo Sproviero.

The method will be described in:
All source files are in: /away/bio/Exafs/
All executables are linked to /away/bio/Bin or /away/bio/Bin/Linux.

How to set up a ComQum-EXAFS calculation

  1. Currently, the program is designed for exerimental data, provided only in R space.

  2. Start from Turbomole files of the desired QM system.
    Run the program turbo2pfeff to get 3 feff[123].inp files.
    The program reads the file transform to perform some coordinate transformations; This is partly hardcoded now (some of the transformations are double transformations), so it will probably not fully work for other proteins.
    Currently, the parameters of feff are hard coded, so you need to change the code to modify the parameters.
    Consider to change the keywords TITLE, RPATH, NLEG, CRITERIA, and HOLE, (cf. the FEFF page).
    It is not possible calculate Debye-Waller factors. Instead, we use fixed factors.

  3. Run cqpefixenergy to get all three polarised EXAFS calculations.
    This program will run feff83 three times. This is the only version of FEFF that seems to work for polarised EXAFS.
    The only output of feff83 needed are the xmu.dat file, which then is postprocessed by other programs (xmu2chi and ifeffit) to finally obtain a Chi^2 estimate and a R-factor.
    The file all.dat contains the three experimental and calculated spectra, ready to be plotted by gnuplot
    Template commands for gnuplot are:
    plot "all.dat" using 1:2 with lines,"all.dat" using 1:5 with lines
    plot "all.dat" using 1:3 with lines,"all.dat" using 1:6 with lines
    plot "all.dat" using 1:4 with lines,"all.dat" using 1:7 with lines

    To run this command, you need a comqum.dat file with the following lines:
    $weight_exafs
     1.0
    $weight_qm
     1.0
    $r_range
      1.0 4.3
    $e0
     6543.3
    $expfile
    pexafs_exp.txt

    $r_range gives rmin and rmax, used in the calculation of chi^2.
    $e0 is E0
    $expfile is the name of the file with the experimental data

    This is all needed to do single-point energy calculations

  4. To run a geometry optimisation, you need to add some additional data to the file comqum.dat file (sample file).
    You should check the atoms for which you want to calculate the gradients in the keyword $exafs_gradients (see below for an explanation); by default internal gradients are calculated for all paths shorter than 3.0 Å.
    You may change $weight_exafs and perhaps also $weight_qm.

    You man also turn on the double-sided gradients (increases the time by a factor 2 in the EXAFS calculations):
    $double_sided_gradient on
    Finally, you may change the step size for the numerical EXAFS gradients (although the default is normally OK). However, note that you should not use values smaller than ~1E-4, because there are only five decimals in the xmu.dat file, so that you will loose precision and may get zero gradients.
    $g_step
     1.0D-4

  5. Set up the Turbomole ComQum, or ComQum-X calculations as usual, and add the needed keywords to the comqum.dat file (explained above).

    In addition, you need the file with the exafs raw data, the transform file, a file process.iff with the following content (no changes should be needed to this file - it only converts the calculated data from k to R-space):

    # This is the file process.iff, set up for ComQum-PExafs calculations
    # It converts the calculated data from k-space to R-space.
    # Ulf Ryde, 15/3-10, based on templates from V. Batista and E. Sproviero.
    #
    read_data(file = fe_chi.DAT, type = chi, group = fe_chi)
    fek_chi.k = sqrt(0.2624683*fe_chi.k)
    newfe.k = range(0,ceil(fek_chi.k),0.05)
    newfe.chi = qinterp(fek_chi.k, fe_chi.chi, newfe.k)
    fftf(newfe.chi, k=newfe.k, kmin=floor(fek_chi.k), kmax=ceil(fek_chi.k), dk=1,kweight=3, kwindow='hanning')
    write_data(file=fe_FT.out,newfe.r,newfe.chir_mag)
    exit

  6. It is normally wise to first run (in a separate directory)
    ridft>logd
    rdgrad>logg
    cqpefixenergy>loge
    cqpefixgrad>logi
    And then move to the original comqum.dat file
    $norm_scale
     0.67531351E-09 (or whatever)
    Otherwise, the first energy will be different from the following ones.

  7. Start ComQum-E by
    for QM+pEXAFS
    jobexpe -backup -ri -c 200
    or for QM/MM+pEXAFS:
    comqumpe -backup -ri -c 200
    or for ComQum-X+pEXAFS:
    comqumxpe -backup -ri -c 200

  8. When finished, the results are in the files energy (the first energy is the ComQum-EXAFS energy, the third is the Turbomole energy, and the fourth is chi_squared EXAFS energy) and all.out.
    $energy      SCF               SCFKIN            SCFPOT
         2 -4043.63646887853  4024.47271869400 -4043.63702859200 22325.04453929200

  9.  If you have problem with convergence, you may:
  1. Finally, you can remove unnecessary files by typing
    purtur


The following programs are needed for running comqume
(they are all in /away/bio/Exafs or /away/bio/Exafs/Linux)

Example of a comqum.dat file

$title
CuS2N2 complex, BP/RI, SVP, 7/4-05
$weight_exafs
 10000.0
$weight_qm
 1.0
$norm_scale
 0.25071102E-09
$r_range
  1.0 4.3
$e0
 6543.3
$expfile
pexafs_exp.txt
$exafs_gradients

 internal
 4
 1  2
 1  3
 1 27
 1 28
$g_step
 1.0D-4
$double_sided_gradient on
$end


Alternative formats for $exafs_gradients:
  1. Cartesian
    Cartesian gradients in the three Cartesian directions (x, y, z)
    The list gives the atoms for which gradients should be calculated. It can include the absorber(s), but it is normally better to use it to correct the total sum of the forces, using the keyword correct (followed either by the atom to give the negative sum of the forces, or the number of atoms and (on the next line) a list of atoms to which the resultant (divided by #atoms)  should be added.
    $exafs_gradients
      cartesian
      4
      2  3   27   28
     correct
     1
     1

  2. Internal
    Internal gradients only along a bond.
    The two numbers are the absorber and the ligand.
    $exafs_gradients
     internal
     4
     1  2
     1  3
     1 27
     1 28
  3. Shell
    Internal gradients only along several bonds.
    The first number is the number of atoms in the shell.
    The second is the absorber.
    The final numbers are the ligand.
    The same internal gradient is added to all ligand atoms and the negative of their vector sum to the absorber in each shell.
    $exafs_gradients
      shell
     2
      2  1  2  3
      2  1 27 28
  4. Test
    Runs both shell and cartesian to check if cartesian is needed.
    The format is the same as for shell and the program decides itself for which atoms Cartesian gradients should be calculated.
    $exafs_gradients
      test
     4
      1  1  2
      1  1  3
      1  1 27
      1  1 28
  5. Mixed
    Input as for internal gradients:
    Cartesian gradients will be used for atoms that are used more than once (either as the first or the second atom) and internal gradients for the other atoms along the specified bond.
    $exafs_gradients
     internal
     4
     1  2
     1  3
     1 27
     1 28
Note that all atom numbers are in the order of the atoms in the control file (not in the feff.inp file).

Template of file transform

The first number is the number of transformations to be read

 4
# Symmetry operations for OEC
# Data from Batista & Sproviero
# Symmetry Transformation  0
   -0.841   0.313  -0.440  38.39445
    0.314  -0.380  -0.870  47.64779
   -0.440  -0.870   0.221  47.85023
# Symmetry Transformation  1
   -1.000   0.000   0.000  67.496
    0.000  -1.000   0.000   0.000
    0.000   0.000   1.000 154.970
# Symmetry Transformation  2
   -1.000   0.000   0.000   0.000
    0.000   1.000   0.000 114.425
    0.000   0.000  -1.000 154.970
# Symmetry Transformation  3
    1.000   0.000   0.000  67.496
    0.000  -1.000   0.000 114.424
    0.000   0.000  -1.000   0.000