************************************************************************ * * * Program S Y S T E R version 0.9 Aug 24, 2000 * * * ************************************************************************ * * * J.M.M. Smits and R. de Gelder * * Department of Inorganic Chemistry * * University of Nijmegen * * Toernooiveld 1 * * 6525 ED Nijmegen * * The Netherlands * * [email protected] and [email protected] * * * * This program is freeware, which means that the user is invited * * to adapt this program to his/her situation. However, some * * subroutines are independent of any such situation, and should * * be used unaltered. Proper credits would be appreciated, though. * * * ************************************************************************ Contents ======== Program Description Program Units Subroutine callcode Integer function leng Input / Output files used The *.crysda file and the CRYSDA program Compiling and installing SYSTER Executing SYSTER Output file definition Current limitations Program Description =================== SYSTER is used to collect data items which are scattered throughout several data files and program output listing files and to write a single formatted output file which is input to SYSTERPLOT, the companion program which can show various plots based on these data. In this way it is also used to get a uniform input to SYSTERPLOT in a laboratory setup which is undefined and widely varying. It means that it is up to the user to adapt this program to his/her local situation. There is not much to tell about what the program does, it is clear and straightforward. But because some programming action by the user is required, the emphasis in this manual is on the structure of the program. As it is, the program writes 13 different variables to the output file, defined in 'Output file definition'. It is possible to replace any variable by 1.000 as a substitute. It is vital to keep the variables in their proper place. Program Units ============= program syster subroutine get_scale gets the scale factor to scale fc to fo from the SHELXL *.res file. subroutine get_isyst gets several data from the *.crysda file. subroutine get_fcf reads the calculated data from the *.fcf file, packs hkl-values into one word, and sorts the data on these packed hkl-values. subroutine norm_hkl converts the hkl-values ihs, iks and ils to 'normalized' values as used by SHELXL. subroutine find_fc finds the position of jhkl in an ordered list of integer values ihkl(1..nfcf), using a binary search strategy. subroutine sorti sort ix(nx) creating pointers array ip. subroutine callcode returns calling sequence argument, see below. integer function leng returns character string length, see below. subroutine oldfile tests the presence of a file assumed to be present, and opens it. subroutine newfile opens a new file. subroutine files opens all necessary input/output files. Subroutine callcode =================== Subroutine callcode gets the first argument given in the program calling sequence; if no argument is given it is asked for. It is assumed that this argument is the compound code, which is subsequently used to construct several file names. This subroutine uses two special statements which are / may be platform dependent: iargc() integer function, returns the number of arguments given in the calling sequence, excluding the program name itself; returns 0 if no arguments are given. getarg(i,s) this subroutine gets the i-th argument from the calling sequence, excluding the program name, and stores the argument value in character string s. If you cannot adapt these calls to your local platform, it is quite easy to remove these calls from the program. In that case any calling sequence parameters will be ignored and the compound code will always be asked for. Integer function leng ===================== Integer function leng returns the length in bytes of the meaningful part of a string, i.e. excluding trailing blanks; leng = 0 if an empty string is supplied. To be used if no such intrinsic is supplied by the compiler. N.B. the standard intrinsic integer function len returns the defined length of a string in bytes. Input / Output files used ========================= unit extension input files containing reflection data ----------------------------------------------- 1 *.hkl data reduction output, source of Fo and sig(Fo) 2 *.rf1 measurement output, source of angular info 3 *.fcf SHELXL output, source of Fc 4 *.drift data reduction output, source of drift info 5 *.empabs data reduction output, source of abscor info ----------------------------------------------- input files containing crystal data ----------------------------------------------- 8 *.res SHELXL output, source of scale and weight 9 *.crysda local program output, source of symmetry info (see manual for specifics and how to get it) ----------------------------------------------- output file ----------------------------------------------- 11 *.syster current program output, input to SYSTERPLOT The *.crysda file and the CRYSDA program ======================================== CRYSDA is a FORTRAN program that creates a *.crysda file containing all pertinent crystal data that are needed or usefull for a crystal structure determination. Based on a minimum of information (cell dimensions with esd's, space group, molecular formula, Z and radiation type) a lot of derived data (symmetry, scattering factors, matrices, etc.) is stored in a *.crysda file. If present, the celldimensions, esd's, and the radiation type can be found from the Nonius CAD4 output. Alternatively, CRYSDA can read its input from a separate *.crysin file. The program is part of the DIRDIF program system, a powerfull direct methods program system that uses difference structure factors to expand a partially known structure, e.g. by Patterson search techniques or vector search methods, both included in the system. CRYSDA can be run as an option of the DIRDIF program system, for instance during the data reduction step. DIRDIF is available from the same site as SYSTER and SYSTERPLOT (http:/www.sci.kun.nl/software). The CRYSDA file is organized in records containing a keyword with associated data. Two of them, with keywords ICENT and ISYST, are used in SYSTER. ICENT = 1 for noncentrosymmetric and ICENT = 2 for centrosymmetric space groups. ISYST = 1, 2, 3, 4, 5, 6, 7, or 8 for triclinic, monoclinic, orthorhombic, tetragonal, trigonal with rhomboedric axes, trigonal with hexagonal axes, hexagonal and cubic, respectively. A third record with keyword IUNIQ will be used in a future release. IUNIQ indicates the unique axis with IUNIQ = 0 if there is no unique axis, or 1, 2, or 3 for a, b or c unique, respectively. Compiling and installing SYSTER =============================== Before SYSTER can be 'made', it has to be adapted, see Executing SYSTER. The 'makesyster' file as supplied with the source code has nothing to do with a Unix-like make procedure. It just contains the necessary Silicon Graphics IRIX compile statement, and can be executed after the necessary mode has been set, e.g. 'chmod 7** makesyster'. It only shows how it is done on our platform. To install SYSTER, just copy the executable to a suitable place pointed to in your path, and probably do a rehash. Executing SYSTER ================ SYSTER is meant to be executed from the directory containing your data files. However, the way in which data are organized locally varies widely. Therefore you have to adapt the program before Compiling and Installing so that the input files can be found. In our own local setup we use a directory named after the crystal's compound code. This directory has several subdirectories, two of them being 'data' and 'shelxl'. Subdirectory 'data' contains the measured data files and the result of the data reduction. Subroutine 'shelxl' contains all files pertaining to the least squares refinement. It also holds links to necessary input files to SHELXL which are stored in subdirectory 'data'. The program source text reflects this situation. Another point is that the program reflects our measuring device: we use a Nonius CAD4 diffractometer. The setting angles are defined in the so-called kappa-geometry. If you use an Eulerian diffractometer, just read 'chi' for 'kappa'. To run the program just enter 'syster compound-code' (mind the lower case). If you leave out the compound code, it will be asked for. Output file definition ====================== For all variables a format of F10.x is used; x depends on the value range that the variable is expected to cover. variable 1: reflection number variable 2: observed structure factor Fobs variable 3: calculated structure factor, scaled to Fobs variable 4: sigma( Fobs ) variable 5: xraytime variable 6: theta variable 7: phik (or phi in Eulerian setup) variable 8: omk (or omega in Eulerian setup) variable 9: kappa (or chi in Eulerian setup) variable 10: background ratio (always >= 1.0) variable 11: absorption correction factor variable 12: drift c.q. crystal decay correction factor variable 13: weight in least-squares refinement Current limitations =================== There are a few limitations to the program. The number of reflections is limited to the size of various arrays, i.e. 20,000. To prevent problems with defining dynamic memory allocations on various platforms, predefined arrays are used. By changing the size of the arrays in 'syster.inc' and parameter 'isize' in main, this number can be changed. This, of course, should be done in concord with SYSTERPLOT, which uses the same array sizes. At present 13 different variables are written to the output file. The program SYSTERPLOT has a limit of 15 different variables. But also this limit can be adapted. The subroutine norm_hkl works for triclinic, monoclinic and orthorhmbic only, as yet. Future releases will include higher symmetries as well. In the monoclinic system, b must be the unique axis, as yet.