X-GEN Manual, Section 5 MULTIREF (merged-reflection binary) File Formats

The MULTIREF file (name.mrf) is a binary file describing reflections after they have had their intensities measured. The reflections are grouped such that all the symmetry-related observations of a particular reflection are recorded together. The file consists of a 256-byte CRYSTAL header, followed by M 256-byte DATARUN headers, where M is the number of data runs encompassed by the file; and then a set of records describing each unique reflection. The individual reflection records contain information on the reflection indices, the number of primary and Bijvoet observations, and then a series of sub-records describing the individual observations.

Specifically, the CRYSTAL header contains the following information:

typedef struct {		/* structure type for each crystal: 256 bytes */
		char	xt_code[16];	/* 16-character code name of crystal */
		char	xt_desc[48];	/* description of crystal */
		char	xt_notes[64];	/* notes on crystal itself */
		char	xt_spaceg[8];	/* spacegroup */
		char	xt_device[8];	/* name of xray device */
		short	xt_intl;	/* International Tables' spacegroup #*/
		short	xt_isys;	/* spacegroup system number */
		short	xt_shhold[2];	/* extra "short" variables */
		float	xt_ar[3];	/* unit cell lengths in Angstroms */
		float	xt_ang[3];	/* unit cell angles in degrees */
		float	xt_stdpos[3];	/* goniostat position where c* is along
						+Z and b* mostly +Y, +Z */
		float	xt_lambda;	/* X-ray wavelength in Angstroms */
		float	xt_reslim;	/* overall resolution limit, Angstrom*/
		float	xt_ssqmax;	/* largest squared scattvector length*/
		xglong	xt_ninteg;	/* total # of observations integrated*/
		xglong	xt_nrefls;	/* total # non-Bijvoet-merged refls */
		xglong	xt_nmerged;	/* total # of Bijvoet-merged refls */
		short	xt_nruns;	/* total # of data collection runs */
		short	xt_nshifts;	/* total # of shifts */
		short	xt_dettype;	/* detector type code */
		short	xt_version;	/* X-GEN version code */
		char	xt_rffu[XT_HOLDER];	/* space holders */
		} CRYSTAL;

Each DATARUN record contains the following information:

typedef struct {		/* structure type for a data run: 256 bytes */
		char	run_code[8];	/* 8-character code name of run */
		char	run_notes[64];	/* notes on the run */
		short	run_id;		/* integer identifier of the run */
		short	run_volxray;	/* X-ray voltage in kV */
		short	run_curxray;	/* X-ray current in ma */
		short	run_chvol;	/* chamber voltage in kV */
		short	run_stepsize;	/* stepsize,units of 1/96 deg*/
		short	run_nframes;	/* number of frames in run */
		short	run_motor;	/* motor being moved during run */
		short	run_nshifts;	/* number of shifts in the run */
		short	run_nchams;	/* # of chambers being used */
		short	run_temp;	/* temperature during run */
		short	run_width;	/*horizontal dimension of detector(s)*/
		short	run_height;	/*vertical dimension of detector(s)*/
		xglong	run_ninteg;	/* # of refls successfully integrated*/
		xglong	run_nexam;	/* # of refls examined during run */
		float	run_lambda;	/* Xray wavelength in Angstroms */
		float	run_startpos[3]; /* start-of-run goniostat position */
		float	run_recip[3][3]; /* reciprocal-space unit cell matrix:
						columns are a*, b*, c* */
		float	run_fmmin;	/* first image that produced data */
		/* float run_refval; reference value of motor in motion*/
		float	run_expos;	/* exposure time per frame */
		float	run_fmmax;	/* last image that produced data */
		/* float run_bgiexpo;	 expos time/frame in background run */
		float	run_d0pos[3]; /* coords of center of detector #0 */
		float	run_d0ang[3]; /* angular attitude of detector #0 */
		float	run_d1pos[3]; /* coords of center of detector #1 */
		float	run_aduperph;	/* # of adu per photon */
		float	run_eperadu;	/* # of electrons that produce 1 adu */
		float	run_eperph;	/* # of electrons per photon */
		/* float	run_d1ang[3]; angular attitude of detector #1*/
		float	run_wtsum;	/* sum of weights in the next 3 aves */
		float	run_intave;	/* average value of I in run */
		float	run_sigave;	/* average value of sigma in run */
		float	run_iosave;	/*  */
		float	run_delomave;	/* */
		float	run_rffu;	/* reserved for future use */
		/* float	run_rmsomave; */ /* RMS error in omega */
		float	run_ssqave;	/* 

The VOFLOW structures are organized as follows:

typedef struct {
		u_short	value, xcoord, ycoord;
		} VOFLOW;

Each overall reflection record is as organized as follows:

typedef struct {			/* structure for merged reflection */
			/* 16+MAXOB*16=16+127*16=128*16=2048 bytes */
		u_char	mr_hkl[4];	/* hkl of reflection */
		u_short	mr_nob;		/* # of obs total */
		u_char	mr_nobpri; /* # of obs. of primary refl.*/
		u_char	mr_nobbij; /* # of obs. of Bijvoet refl.*/
		u_short	mr_ibar; /* averaged, scaled intensity */
		u_short	mr_isig; /* esd of averaged, scaled intensity*/
		float		mr_stl;		/* sin theta over lambda */
		ABBROB	mr_ob[MAXOB];	/* array of observation structures */
		} MERGEDREF;

The average intensity and sigma values in the MERGEDREF structure are not used for anything other than documentation: the intensities in the ABBROB structures (below) do get used. There are not in fact 128 ABBROB structures in each MERGEDREF reflection in the file: there are mr_nob of them. Each of the ABBROB structures is defined thus:

typedef struct {		/* abbreviated observation structure:16 bytes*/
		short	abo_shift;		/* "shift" or "bin" number*/
		short	abo_omob;		/* omega observed */
		u_char	abo_chamno;	/* chamber number */
		u_char	abo_runno;	/* integer identifier of run */
		u_char	abo_xob;	/* observed chamber x */
		u_char	abo_yob;	/* observed chamber y */
		float	abo_ii;			/* integrated intensity */
		float	abo_sigma;		/* sigma */
		} ABBROB;

The MULTIREF is initially created in a run of reduce. A group of MULTIREFs can be merged together in the "mrmerge" facility.

Usage: $WORK/<idname>.mrf
Written from: reduce and mrmerge.
Modified in: reject (flagging bad observations);
cutoff (resolution cutoffs)
Read in: "scalek", "scalem", "makemu", "stats", "spaceg".

Report bugs to Andy Howard at howard@iit.edu or 312-567-5881.