1 subroutine chain_symmetry(nchain,nres,itype,chain_border,
2 & chain_length,npermchain,tabpermchain,nchain_group,nequiv,
5 c Determine chain symmetry. nperm is the number of permutations and
6 c tabperchain contains the allowed permutations of the chains.
10 include "COMMON.IOUNITS"
11 include "COMMON.CONTROL"
12 integer nchain,nres,itype(nres),chain_border(2,maxchain),
13 & chain_length(nchain),itemp(maxchain),
14 & npermchain,tabpermchain(maxchain,maxperm),
15 & tabperm(maxchain,maxperm),mapchain(maxchain),
16 & chaingroup(maxchain),iequiv(maxchain,maxres),iflag(maxres)
17 integer i,j,k,l,ii,nchain_group,nequiv(maxchain),iieq,
19 logical lprn /.false./
23 c print*,"npermchain",npermchain," tabpermchain",tabpermchain(1,1)
30 c Look for equivalent chains
33 write(iout,*) "nchain",nchain
35 write(iout,*) "chain",i," from",chain_border(1,i),
36 & " to",chain_border(2,i)
38 & "sequence ",(itype(j),j=chain_border(1,i),chain_border(2,i))
46 if (iflag(i).gt.0) cycle
48 nchain_group=nchain_group+1
50 iequiv(iieq,nchain_group)=i
53 if (iflag(j).gt.0.or.chain_length(i).ne.chain_length(j)) cycle
55 c do while(k.lt.chain_length(i) .and.
56 c & itype(chain_border(1,i)+k).eq.itype(chain_border(1,j)+k))
57 do k=0,chain_length(i)-1
59 if (itype(chain_border(1,i)+k).ne.
60 & itype(chain_border(1,j)+k)) exit
62 if (k.lt.chain_length(i)) cycle
65 iequiv(iieq,nchain_group)=j
68 nequiv(nchain_group)=iieq
70 write(iout,*) "Number of equivalent chain groups:",nchain_group
71 write(iout,*) "Equivalent chain groups"
73 write(iout,*) "group",i," #members",nequiv(i)," chains",
74 & (iequiv(j,i),j=1,nequiv(i))
80 mapchain(ind)=iequiv(j,i)
84 write (iout,*) "mapchain"
86 write (iout,*) i,mapchain(i)
88 write (iout,*) "chaingroup"
90 write (iout,*) i,chaingroup(i)
92 if (npermut.eq.0) then
101 call permut(nequiv(i),nperm,tabperm)
107 tabpermchain(k,j)=iequiv(tabperm(k,j),i)
112 npermchain=npermchain*nperm
118 tabpermchain(l,ind)=tabpermchain(l,j)
121 tabpermchain(ii+l,ind)=iequiv(tabperm(l,k),i)
130 itemp(mapchain(j))=tabpermchain(j,i)
133 tabpermchain(j,i)=itemp(j)
136 write(iout,*) "Number of chain permutations",npermchain
138 write(iout,*) "Permutations"
140 write(iout,'(20i4)') (tabpermchain(j,i),j=1,nchain)
145 c---------------------------------------------------------------------
146 integer function tperm(i,iperm,tabpermchain)
150 integer tabpermchain(maxchain,maxperm)
154 tperm=tabpermchain(i,iperm)