Ok I see now how I can include all the sequence from the PDB file, and then just put dashes in the alignment in the target. I've been making models of the tetramer and they are making sense by eye.
Do I need to do all the pairs (AB, AC, AD, BC, BD, CD) or only the minimal (AB, BC, CD)? In other words is the symmetry like the transitive property of equality? Would C3 symmetry between chains ABC be (AB, AC, BC) or just (AB, BC)?
# Override the 'special_restraints' and 'user_after_single_model' methods:
class MyModel(automodel):
def special_restraints(self, aln):
# Constrain the A and B chains to be identical (but only restrain
# the C-alpha atoms, to reduce the number of interatomic distances
# that need to be calculated):
s1 = selection(self.chains['A']).only_atom_types('CA')
s2 = selection(self.chains['B']).only_atom_types('CA')
s3 = selection(self.chains['C']).only_atom_types('CA')
s4 = selection(self.chains['D']).only_atom_types('CA')
self.restraints.symmetry.append(symmetry(s1, s2, 1.0))
self.restraints.symmetry.append(symmetry(s1, s3, 1.0))
self.restraints.symmetry.append(symmetry(s1, s4, 1.0))
self.restraints.symmetry.append(symmetry(s2, s3, 1.0))
self.restraints.symmetry.append(symmetry(s2, s4, 1.0))
self.restraints.symmetry.append(symmetry(s3, s4, 1.0))
def user_after_single_model(self):
# Report on symmetry violations greater than 1A after building
# each model:
self.restraints.symmetry.report(1.0)