I can see at least three possible basic strategies when it comes to interfacing X-PLOR and GraphEnt. The first is to tell X-PLOR to (i) expand your reflections to P1, and (ii) to write them out in an ASCII X-PLOR reflection format. Then (and assuming that your text editor can record macros), edit this ASCII file and convert it to the format that GraphEnt expects. I wouldn't suggest this method for any but the simplest cases.
A second possible way is to use xdlmapman to convert an X-PLOR reflection file to a .mtz file. This may not work very well if your X-PLOR file contains weights and/or a figure-of-merit column.
A third, more reproducible way to do the trick, is to use f2mtz to convert the X-PLOR reflection file
to .mtz, and then use the .mtz wrapper of GraphEnt to do the calculation. I will illustrate this
with an example based on the nfo-mfc_phicalc_map.inp file distributed with X-PLOR 3.851, and
assuming that you want to calculate a
-weighted
2mFo - DFc map.
The first step is to add the following bold lines in the X-PLOR script :
...........
...........
do (fcalc=$k2*fcalc) (all) { apply scaling to all reflections }
declare name=diff domain=reciprocal type=complex end
declare name=testamp domain=reciprocal type=complex end
if ($sigmaa_flag=true) then
{* Compute sigmaa weights. *}
declare name=eobs domain=reciprocal type=real end
.............
.............
do (diff = combine($nn * fom * ampl(fobs) - $mm * dd * ampl(fcalc), phase(fcalc)) )
( acentric and sel=1 )
do (diff = combine(fom * ampl(fobs), phase(fcalc)) ) ( centric and sel=1 )
do (testamp = combine($nn * ampl(fobs) - $mm * dd * ampl(fcalc) / fom, phase(fcalc)) )
( acentric and sel=1 )
do (testamp = combine( ampl(fobs), phase(fcalc)) ) ( centric and sel=1 )
undeclare name=eobs domain=reciprocal end
undeclare name=ecalc domain=reciprocal end
undeclare name=sigmaa domain=reciprocal end
undeclare name=dd domain=reciprocal end
else
{* Compute unweighted n fo-m fc difference. *}
do (diff = combine($nn * ampl(fobs) - $mm * ampl(fcalc), phase(fcalc)) ) ( sel=1 )
end if
do (SIGMA = $nn * SIGMA)(acentric and sel=1)
write reflection output=GraphEnt.hkl testamp SIGMA fom end
declare name=map1 domain=real end do (map1=ft(diff)) ( sel=1 ) remarks ($nn fo- $mm fc, phicalc) map write map ............... ...............
Please note that the assignment of standard deviation for the quantity $nn * ampl(fobs) - $mm * dd * ampl(fcalc)/fom is wrong in this example. If you are fluent with error propagation and you have derived the correct expression, please do mail it to me as well. When you execute the script, and in addition to the map file, you should also get a reflection file with the name GraphEnt.hkl which would look like this :
NREFlection= 7271
ANOMalous=FALSe { equiv. to HERMitian=TRUE}
DECLare NAME=TESTAMP DOMAin=RECIprocal TYPE=COMP END
DECLare NAME=SIGMA DOMAin=RECIprocal TYPE=REAL END
DECLare NAME=FOM DOMAin=RECIprocal TYPE=REAL END
INDE 2 0 0 TESTAMP= 37.700 360.000 SIGMA= 2.050
FOM= 0.878
INDE 4 0 0 TESTAMP= 43.500 0.000 SIGMA= 1.710
FOM= 0.099
..........................
You can now convert this to .mtz with f2mtz :
f2mtz hklin GraphEnt.hkl hklout GraphEnt.mtz << eof TITLE 2fo-fc coefficients from X-plor CELL 54.476 42.565 51.722 90.000 104.684 90.000 SYMMETRY 5 LABOUT H K L FP PHIB SIGFP FOM CTYPOUT H H H F P Q W SKIP 5 FORMAT '(6X,3F5.0,9X,2F10.3,7X,1F10.3/23X,1F10.3)' END eof
Before running GraphEnt with this file, you need one additional step in order to put the columns in the order that GraphEnt expects to find them. You can do this with CAD, or mtzutils, or interactively with sftools :
Origin ~/trm6/17
Origin ~/trm6/17 d *.mtz
-rw-r--r-- 1 glykos user 205508 Mar 3 17:12 GraphEnt.mtz
Origin ~/trm6/17
Origin ~/trm6/17 sftools
OPTIONS ARE:
ABSENT MODE CALC CHECKHKL COMPLETE CORREL
DELETE EXPAND FFT FOURPT HLCONV I2F
LIST MAP MAP2SF MAPIN MAPLIMIT MAPOUT
MAPSTAT MERGE OPTION1 PHASHFT PLOT PURGE
READ REDUCE REINDEX RFREE SELECT SET
SORT STOP WINDOW WRITE
>> give your option (or hit <return> to list options)
read GraphEnt.mtz
selected: READ
User: glykos Logical Name: GraphEnt.mtz
Status: READONLY Filename: GraphEnt.mtz
Reading file : GraphEnt.mtz
With format : MTZ
!!! WARNING, sort order improper !!!
Sort order will be set to 1 2 3
Use option SORT [h k l] later if needed
The following columns will be read:
TYPE LABEL
===========
F FP
P PHIB
Q SIGFP
W FOM
now sorting the reflections
now merging the reflections
7271 reflections read from file
0 reflections appended to existing data
7271 reflections newly created
7271 reflections now stored in memory
>> give your option (or hit <return> to list options)
write ready.mtz column 1 3 2 4
selected: WRITE
Writing file : ready.mtz
With format : MTZ
Columns used :
1 3 2 4
The following columns will be written :
TYPE LABEL
===========
F FP
Q SIGFP
P PHIB
W FOM
(Q)QOPEN allocated # 1
User: glykos Logical Name: ready.mtz
Status: UNKNOWN Filename: ready.mtz
>> give your option (or hit <return> to list options)
exit
selected: EXIT
Normal end program sftools
Origin ~/trm6/17
Origin ~/trm6/17
Origin ~/trm6/17 d *.mtz
-rw-r--r-- 1 glykos user 205508 Mar 3 17:12 GraphEnt.mtz
-rw-r--r-- 1 glykos user 205508 Mar 3 17:13 ready.mtz