Molecular structures with many identical units can be generated using the principles discussed above. However, it would be inefficient to generate the whole multimer in one generation protocol since the segment statement uses a pairwise atom check. Instead, a molecular structure file for a protomer should be generated. Then, the duplicate statement should be used to create the multimer. Assume that the ``protomer.psf" file contains the molecular structure of a protomer with blank segment name.
If a multimer coordinate file exists, one has to split the coordinates of the multimer into several files, one for each protomer with disjoint segment names. The following shows an example for a trimeric structure (ignore the "multiple coordinates" error messages).
structure @protomer.psf vector do (segid="a") ( segid " " ) coordinates @a.pdb {* Read protomer a.*} duplicate segid="b" selection=( segid "a" ) end coordinates @b.pdb {* Read protomer b.*} duplicate segid="c" selection=( segid "a" ) end coordinates @c.pdb {* Read protomer c.*}Note that if using the NCS strict statement (Section 16.2.1), one has to create only one protomer structure.
If a protomer coordinate file exists and one knows the appropriate transformations between the monomers, one should read the monomer, use the duplicate statement to duplicate the molecular structure as well as the coordinates, and apply appropriate coordinate transformations (marked by ... in the example below) to produce the other monomers.
structure @protomer.psf coordinate @protomer.pdb vector do (segid="a") ( segid " " ) duplicate segid="b" selection=( segid "a" ) end coordinates rotate ... selection=( segid "b" end coordinates translate ... selection=( segid "b" ) end duplicate segid="c" selection=( segid "a" ) end coordinates rotate ... selection=( segid "c" end coordinates translate ... selection=( segid "c" ) end