1 double precision function rmscalc(ccc,cccref,ipermmin)
4 include 'COMMON.IOUNITS'
6 include 'COMMON.INTERACT'
8 double precision cccref(3,maxres2),creff(3,maxres2),
9 & ccc(3,maxres2),cc(3,maxres2)
10 double precision przes(3),obrot(3,3)
12 integer i,ii,j,ib,ichain,indchain,ichain1,ichain2,
14 double precision rms,rmsmin
15 C Loop over chain permutations
21 indchain=tabpermchain(ichain,iperm)
23 write (iout,*) "ichain",ichain," indchain",indchain
24 write (iout,*) "chain_border",chain_border(1,ichain),
25 & chain_border(2,ichain)
27 do i=1,chain_length(ichain)
28 c do i=nstart_sup(ichain),nend_sup(ichain)
29 ichain1=chain_border(1,ichain)+i-1
30 ichain2=chain_border(1,indchain)+i-1
31 if (ichain1.lt.nz_start .or. ichain1.gt.nz_end .or.
32 & ichain2.lt.nz_start .or. ichain2.gt.nz_end) cycle
35 write (iout,*) "back",ii," ichain1",ichain1,
36 & " ichain2",ichain2," i",i,chain_border(1,ichain)+i-1
39 cc(j,ii)=ccc(j,ichain2)
40 creff(j,ii)=cccref(j,ichain1)
43 write (iout,'(3f10.5,5x,3f10.5)')
44 & (cc(j,ii),j=1,3),(creff(j,ii),j=1,3)
51 indchain=tabpermchain(ichain,iperm)
52 do i=1,chain_length(ichain)
53 c do i=nstart_sup(ichain),nend_sup(ichain)
54 ichain1=chain_border(1,ichain)+i-1
55 ichain2=chain_border(1,indchain)+i-1
56 if (ichain1.lt.nz_start .or. ichain1.gt.nz_end .or.
57 & ichain2.lt.nz_start .or. ichain2.gt.nz_end) cycle
58 if (itype(ichain1).ne.10) then
61 write (iout,*) "side",ii," ichain1",ichain1,
65 cc(j,ii)=ccc(j,ichain2+nres)
66 creff(j,ii)=cccref(j,ichain1+nres)
69 write (iout,'(3f10.5,5x,3f10.5)')
70 & (cc(j,ii),j=1,3),(creff(j,ii),j=1,3)
76 c write (iout,*) "rmscalc: iprot",iprot," nsup",nsup(iprot)," ii",ii
77 call fitsq(rms,cc(1,1),creff(1,1),ii,przes,obrot,non_conv)
79 write (iout,*) 'Error: FITSQ non-convergent'
81 else if (rms.lt.-1.0d-6) then
82 print *,'Error: rms^2 = ',rms
84 else if (rms.ge.1.0d-6 .and. rms.lt.0) then
89 if (rms.lt.rmsmin) then
94 write (iout,*) "iperm",iperm," rms",rms
99 write (iout,*) "ipermmin",ipermmin," rmsmin",rmsmin
103 c------------------------------------------------------------------------
104 double precision function rmscalc_thet(ttheta,theta_reff,
108 include 'COMMON.IOUNITS'
109 include 'COMMON.CHAIN'
110 include 'COMMON.INTERACT'
112 integer iperm,k,ichain,indchain,kchain1,kchain2,nnnn
113 double precision ttheta(maxres),theta_reff(maxres),rmsthet,dtheta
117 indchain=tabpermchain(ichain,iperm)
118 c write (iout,*) "ichain",ichain," iperm",iperm,
119 c & " indchain",indchain
121 do k=3,chain_length(ichain)
122 kchain1=chain_border(1,ichain)+k-1
123 kchain2=chain_border(1,indchain)+k-1
125 dtheta = ttheta(kchain2)-theta_reff(kchain1)
126 c write (iout,*) k,theta(k),theta_ref(k,iref,ib,iprot),
128 rmsthet = rmsthet+dtheta*dtheta
132 rmsthet=dsqrt(rmsthet/nnnn)
134 write (iout,*) "nnnn",nnnn," rmsthet",rmsthet
139 c------------------------------------------------------------------------
140 double precision function rmscalc_phi(pphi,phi_reff,iperm)
143 include 'COMMON.IOUNITS'
144 include 'COMMON.CHAIN'
145 include 'COMMON.INTERACT'
147 integer iperm,k,ichain,indchain,kchain1,kchain2,nnnn
148 double precision pphi(maxres),phi_reff(maxres),rmsphi,dphi
149 double precision pinorm
153 indchain=tabpermchain(ichain,iperm)
154 do k=4,chain_length(ichain)
155 kchain1=chain_border(1,ichain)+k-1
156 kchain2=chain_border(1,indchain)+k-1
158 dphi=pinorm(pphi(kchain2)-phi_reff(kchain1))
159 c write (iout,*) k,phi(k),phi_ref(k,iref,ib,iprot),
160 c & pinorm(phi(k)-phi_ref(k,iref,ib,iprot))
161 rmsphi = rmsphi + dphi*dphi
165 rmsphi=dsqrt(rmsphi/nnnn)
167 write (iout,*) "nnnn",nnnn," rmsphi",rmsphi
172 c------------------------------------------------------------------------
173 double precision function rmscalc_side(xxtabb,yytabb,zztabb,
174 & xxreff,yyreff,zzreff,iperm)
177 include 'COMMON.IOUNITS'
178 include 'COMMON.CHAIN'
179 include 'COMMON.INTERACT'
181 integer iperm,k,ichain,indchain,kchain1,kchain2,nnnn
182 double precision xxtabb(maxres),yytabb(maxres),zztabb(maxres),
183 & xxreff(maxres),yyreff(maxres),zzreff(maxres),rmsside,
188 indchain=tabpermchain(ichain,iperm)
189 do k=1,chain_length(ichain)
190 kchain1=chain_border(1,ichain)+k-1
191 kchain2=chain_border(1,indchain)+k-1
192 if (itype(kchain1).eq.ntyp1) cycle
194 dxref = xxtabb(kchain2)-xxreff(kchain1)
195 dyref = yytabb(kchain2)-yyreff(kchain1)
196 dzref = zztabb(kchain2)-zzreff(kchain1)
197 rmsside = rmsside + dxref*dxref+dyref*dyref+dzref*dzref
200 rmsside=dsqrt(rmsside/nnnn)
202 write (iout,*) "nnnn",nnnn," rmsside",rmsside