This O has a number of programs that can be used for averaging electron density maps. This describes just 2 of them bones_mask and average. More information is contained in the paper [9]. A new system of programs, RAVE [11], has been developed from the A programs, and is available from the authors. In particular, it improves on the mask handling and allows one to average between different space groups.
To carry out averaging, one need a mask surrounding the object that forms the non-crystallographic asymmetric unit. The unit contained in this mask is the origin defining molecule. The mask can be made from skeleton atoms in O by the Bones_mask command. There is also a program Pdb_mask to make it from a coordinate dataset.
One useful way of making the mask is to select one skeleton atom, roughly in the middle of the molecule and generate a spherical mask from it using a fairly large radius. This mask can then be edited with a simple macro such that every skeleton atom that is identified, adds a small volume to the mask. Such a macro would look like
mask_set 1 1 3. 3. 8. red mask_on centre_id wait_id yes mask_contour
and would zap pixel points within 3Å of the identified atom, contouring within 8Å. This process by-passes the tedious process of painting the skeleton atoms to the desired colours.
The programs also need a set of transformation operators to describe the
non-crystallographic symmetry. These operators are applied to the points in
the mask of the origin molecule, to bring them into the related
molecule. If our origin molecule is called A, and the others are B and C,
we therfore need transformations A ->
B and A ->
C.
These can come from O and must be in O datablocks.
The number of grid points along the axes must correspond to the values in the electron density map.
vega [39]# ../bin/bones_mask File name of mask datablock : ano1_mask.o Data block name :ANO1_MASK Number of values 498 Unit cell constants : 91.8 99.5 56.5 90. 90. 90. Number of grid points along each axis: 76 84 48 28.00004 37.93949 10.32552 3.000000 57.00026 66.58566 43.87030 3.000000 Enter file name of transformation datablock : unit_rt.o Data block name : unit_rt Mask atoms 498 Origin 25 34 7 Extent 36 37 41 Grid 76 84 48 RT operator 1.00000 0.00000 0.00000 RT operator 0.00000 1.00000 0.00000 RT operator 0.00000 0.00000 1.00000 RT operator 0.00000 0.00000 0.00000 Enter file name of transformation datablock : Enter file name of mask to written out: q.mask
Any number of operators could have been defined. We just used the unit transformation.
Now it can be averaged. One need the space group operators in O database format. The following is edited to remove CCP4 verbosity.
vega [40]# ../bin/average Map a: ano1.E Read header. Fourier parameters as read from the data-set Origin ................................ 0 0 0 Extent ................................ 76 84 48 Grid .................................. 76 84 48 uvw (fast, medium, slow) .............. Z X Y Header done. Map read OK. Map b mask: q.mask Reading Mask. Mask read OK. Number of points in mask 13559 New averaged map (a CCP4 map): qq.E Expand map ([Y]/N) ? y Enter file name of space group operators (O style) : symmop.o Data block name :A_SYMMOP Enter file name of transformation datablock (<cr> to quit) : unit_rt.o Data block name :unit_rt Enter file name of transformation datablock (<cr> to quit) : a_to_b.o Data block name :.LSQ_RT_A_TO_B Enter file name of transformation datablock (<cr> to quit) : a_to_c.o Data block name :.LSQ_RT_A_TO_C Enter file name of transformation datablock (<cr> to quit) : Average. Expand. Average in solvent= -0.598989E-03 Average in map = 0.489301E-08 Minimum density in map = -0.04697 Maximum density = 0.05885 Mean density = 0.00000 Rms deviation from mean = 0.01074 Map written out. vega [43]#
If one enters ``n'' to the expand prompt, one gets just the averaged map within the same envelope as the mask. The expanded map fills up the same envelope as the input map. The non-molecule grid points are set to a constant value to make the average in the map equal to 0.0.