1 double precision function rmsnat(ib,jcon,iref,iprot,iperm)
4 include 'DIMENSIONS.ZSCOPT'
5 include 'COMMON.IOUNITS'
6 include 'COMMON.COMPAR'
8 include 'COMMON.INTERACT'
10 double precision creff(3,maxres2),cc(3,maxres2)
11 integer jcon,ib,iref,iprot,iperm
12 double precision rmscalc
13 rmsnat=rmscalc(c(1,1),cref(1,1,iref,ib,iprot),jcon,iref,iprot,
17 c------------------------------------------------------------------------
18 double precision function rmscalc(ccc,cccref,jcon,iref,iprot,
22 include 'DIMENSIONS.ZSCOPT'
23 include 'COMMON.IOUNITS'
24 include 'COMMON.COMPAR'
25 include 'COMMON.CHAIN'
26 include 'COMMON.INTERACT'
28 double precision cccref(3,maxres2),creff(3,maxres2),
29 & ccc(3,maxres2),cc(3,maxres2)
30 double precision przes(3),obrot(3,3)
32 integer i,ii,j,jcon,ib,iref,iprot,ichain,indchain,ichain1,ichain2,
34 double precision rms,rmsmin
35 C Loop over chain permutations
39 if (.not.sconly(iprot)) then
41 indchain=tabpermchain(ichain,iperm)
43 write (iout,*) "ichain",ichain," indchain",indchain
44 write (iout,*) "chain_border",chain_border(1,ichain),
45 & chain_border(2,ichain)
47 do i=1,chain_length(ichain)
48 ichain1=chain_border(1,ichain)+i-1
49 ichain2=chain_border(1,indchain)+i-1
52 write (iout,*) "back",ii," ichain1",ichain1,
53 & " ichain2",ichain2," i",i,chain_border(1,ichain)+i-1
56 cc(j,ii)=ccc(j,ichain2)
57 creff(j,ii)=cccref(j,ichain1)
60 write (iout,'(3f10.5,5x,3f10.5)')
61 & (cc(j,ii),j=1,3),(creff(j,ii),j=1,3)
66 if (.not.caonly(iprot)) then
68 indchain=tabpermchain(ichain,iperm)
69 do i=1,chain_length(ichain)
70 ichain1=chain_border(1,ichain)+i-1
71 ichain2=chain_border(1,indchain)+i-1
72 if (itype(ichain1).ne.10) then
75 write (iout,*) "side",ii," ichain1",ichain1,
79 cc(j,ii)=ccc(j,ichain2+nres)
80 creff(j,ii)=cccref(j,ichain1+nres)
83 write (iout,'(3f10.5,5x,3f10.5)')
84 & (cc(j,ii),j=1,3),(creff(j,ii),j=1,3)
90 c write (iout,*) "rmscalc: iprot",iprot," nsup",nsup(iprot)," ii",ii
91 call fitsq(rms,cc(1,1),creff(1,1),ii,przes,obrot,non_conv)
93 write (iout,*) 'Error: FITSQ non-convergent, iprot',iprot,
94 & ' jcon',jcon,' iref',iref
96 else if (rms.lt.-1.0d-6) then
97 print *,'Error: rms^2 = ',rms,jcon
99 else if (rms.ge.1.0d-6 .and. rms.lt.0) then
104 if (rms.lt.rmsmin) then
109 write (iout,*) "iperm",iperm," rms",rms
114 write (iout,*) "ipermmin",ipermmin," rmsmin",rmsmin
118 c------------------------------------------------------------------------
119 double precision function rmscalc_thet(ttheta,theta_reff,
123 include 'DIMENSIONS.ZSCOPT'
124 include 'COMMON.IOUNITS'
125 include 'COMMON.COMPAR'
126 include 'COMMON.CHAIN'
127 include 'COMMON.INTERACT'
129 integer iperm,k,ichain,indchain,kchain1,kchain2,nnnn
130 double precision ttheta(maxres),theta_reff(maxres),rmsthet,dtheta
134 indchain=tabpermchain(ichain,iperm)
135 c write (iout,*) "ichain",ichain," iperm",iperm,
136 c & " indchain",indchain
138 do k=3,chain_length(ichain)
139 kchain1=chain_border(1,ichain)+k-1
140 kchain2=chain_border(1,indchain)+k-1
142 dtheta = ttheta(kchain2)-theta_reff(kchain1)
143 c write (iout,*) k,theta(k),theta_ref(k,iref,ib,iprot),
145 rmsthet = rmsthet+dtheta*dtheta
149 rmsthet=dsqrt(rmsthet/nnnn)
151 write (iout,*) "nnnn",nnnn," rmsthet",rmsthet
156 c------------------------------------------------------------------------
157 double precision function rmscalc_phi(pphi,phi_reff,iperm)
160 include 'DIMENSIONS.ZSCOPT'
161 include 'COMMON.IOUNITS'
162 include 'COMMON.COMPAR'
163 include 'COMMON.CHAIN'
164 include 'COMMON.INTERACT'
166 integer iperm,k,ichain,indchain,kchain1,kchain2,nnnn
167 double precision pphi(maxres),phi_reff(maxres),rmsphi,dphi
168 double precision pinorm
172 indchain=tabpermchain(ichain,iperm)
173 do k=4,chain_length(ichain)
174 kchain1=chain_border(1,ichain)+k-1
175 kchain2=chain_border(1,indchain)+k-1
177 dphi=pinorm(pphi(kchain2)-phi_reff(kchain1))
178 c write (iout,*) k,phi(k),phi_ref(k,iref,ib,iprot),
179 c & pinorm(phi(k)-phi_ref(k,iref,ib,iprot))
180 rmsphi = rmsphi + dphi*dphi
184 rmsphi=dsqrt(rmsphi/nnnn)
186 write (iout,*) "nnnn",nnnn," rmsphi",rmsphi
191 c------------------------------------------------------------------------
192 double precision function rmscalc_side(xxtabb,yytabb,zztabb,
193 & xxreff,yyreff,zzreff,iperm)
196 include 'DIMENSIONS.ZSCOPT'
197 include 'COMMON.IOUNITS'
198 include 'COMMON.COMPAR'
199 include 'COMMON.CHAIN'
200 include 'COMMON.INTERACT'
202 integer iperm,k,ichain,indchain,kchain1,kchain2,nnnn
203 double precision xxtabb(maxres),yytabb(maxres),zztabb(maxres),
204 & xxreff(maxres),yyreff(maxres),zzreff(maxres),rmsside,
209 indchain=tabpermchain(ichain,iperm)
210 do k=1,chain_length(ichain)
211 kchain1=chain_border(1,ichain)+k-1
212 kchain2=chain_border(1,indchain)+k-1
213 if (itype(kchain1).eq.ntyp1) cycle
215 dxref = xxtabb(kchain2)-xxreff(kchain1)
216 dyref = yytabb(kchain2)-yyreff(kchain1)
217 dzref = zztabb(kchain2)-zzreff(kchain1)
218 rmsside = rmsside + dxref*dxref+dyref*dyref+dzref*dzref
221 rmsside=dsqrt(rmsside/nnnn)
223 write (iout,*) iii,iref," nnnn",nnnn," rmsside",rmsside