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)
24 write (iout,*) "ichain",ichain," indchain",indchain
25 write (iout,*) "chain_border",chain_border(1,ichain),
26 & chain_border(2,ichain)
28 do i=1,chain_length(ichain)
29 c do i=nstart_sup(ichain),nend_sup(ichain)
30 ichain1=chain_border(1,ichain)+i-1
31 ichain2=chain_border(1,indchain)+i-1
32 if (ichain1.lt.nz_start .or. ichain1.gt.nz_end .or.
33 & ichain2.lt.nz_start .or. ichain2.gt.nz_end) cycle
36 write (iout,*) "back",ii," ichain1",ichain1,
37 & " ichain2",ichain2," i",i,chain_border(1,ichain)+i-1
40 cc(j,ii)=ccc(j,ichain2)
41 creff(j,ii)=cccref(j,ichain1)
44 write (iout,'(3f10.5,5x,3f10.5)')
45 & (cc(j,ii),j=1,3),(creff(j,ii),j=1,3)
52 indchain=tabpermchain(ichain,iperm)
53 do i=1,chain_length(ichain)
54 c do i=nstart_sup(ichain),nend_sup(ichain)
55 ichain1=chain_border(1,ichain)+i-1
56 ichain2=chain_border(1,indchain)+i-1
57 if (ichain1.lt.nz_start .or. ichain1.gt.nz_end .or.
58 & ichain2.lt.nz_start .or. ichain2.gt.nz_end) cycle
59 if (itype(ichain1).ne.10) then
62 write (iout,*) "side",ii," ichain1",ichain1,
66 cc(j,ii)=ccc(j,ichain2+nres)
67 creff(j,ii)=cccref(j,ichain1+nres)
70 write (iout,'(3f10.5,5x,3f10.5)')
71 & (cc(j,ii),j=1,3),(creff(j,ii),j=1,3)
77 c write (iout,*) "rmscalc: iprot",iprot," nsup",nsup(iprot)," ii",ii
78 call fitsq(rms,cc(1,1),creff(1,1),ii,przes,obrot,non_conv)
80 write (iout,*) 'Error: FITSQ non-convergent'
82 else if (rms.lt.-1.0d-6) then
83 print *,'Error: rms^2 = ',rms
85 else if (rms.ge.1.0d-6 .and. rms.lt.0) then
90 if (rms.lt.rmsmin) then
95 write (iout,*) "iperm",iperm," rms",rms
100 write (iout,*) "ipermmin",ipermmin," rmsmin",rmsmin
104 c------------------------------------------------------------------------
105 double precision function rmscalc_thet(ttheta,theta_reff,
109 include 'COMMON.IOUNITS'
110 include 'COMMON.CHAIN'
111 include 'COMMON.INTERACT'
113 integer iperm,k,ichain,indchain,kchain1,kchain2,nnnn
114 double precision ttheta(maxres),theta_reff(maxres),rmsthet,dtheta
118 indchain=tabpermchain(ichain,iperm)
119 c write (iout,*) "ichain",ichain," iperm",iperm,
120 c & " indchain",indchain
122 do k=3,chain_length(ichain)
123 kchain1=chain_border(1,ichain)+k-1
124 kchain2=chain_border(1,indchain)+k-1
126 dtheta = ttheta(kchain2)-theta_reff(kchain1)
127 c write (iout,*) k,theta(k),theta_ref(k,iref,ib,iprot),
129 rmsthet = rmsthet+dtheta*dtheta
133 rmsthet=dsqrt(rmsthet/nnnn)
135 write (iout,*) "nnnn",nnnn," rmsthet",rmsthet
140 c------------------------------------------------------------------------
141 double precision function rmscalc_phi(pphi,phi_reff,iperm)
144 include 'COMMON.IOUNITS'
145 include 'COMMON.CHAIN'
146 include 'COMMON.INTERACT'
148 integer iperm,k,ichain,indchain,kchain1,kchain2,nnnn
149 double precision pphi(maxres),phi_reff(maxres),rmsphi,dphi
150 double precision pinorm
154 indchain=tabpermchain(ichain,iperm)
155 do k=4,chain_length(ichain)
156 kchain1=chain_border(1,ichain)+k-1
157 kchain2=chain_border(1,indchain)+k-1
159 dphi=pinorm(pphi(kchain2)-phi_reff(kchain1))
160 c write (iout,*) k,phi(k),phi_ref(k,iref,ib,iprot),
161 c & pinorm(phi(k)-phi_ref(k,iref,ib,iprot))
162 rmsphi = rmsphi + dphi*dphi
166 rmsphi=dsqrt(rmsphi/nnnn)
168 write (iout,*) "nnnn",nnnn," rmsphi",rmsphi
173 c------------------------------------------------------------------------
174 double precision function rmscalc_side(xxtabb,yytabb,zztabb,
175 & xxreff,yyreff,zzreff,iperm)
178 include 'COMMON.IOUNITS'
179 include 'COMMON.CHAIN'
180 include 'COMMON.INTERACT'
182 integer iperm,k,ichain,indchain,kchain1,kchain2,nnnn
183 double precision xxtabb(maxres),yytabb(maxres),zztabb(maxres),
184 & xxreff(maxres),yyreff(maxres),zzreff(maxres),rmsside,
189 indchain=tabpermchain(ichain,iperm)
190 do k=1,chain_length(ichain)
191 kchain1=chain_border(1,ichain)+k-1
192 kchain2=chain_border(1,indchain)+k-1
193 if (itype(kchain1).eq.ntyp1) cycle
195 dxref = xxtabb(kchain2)-xxreff(kchain1)
196 dyref = yytabb(kchain2)-yyreff(kchain1)
197 dzref = zztabb(kchain2)-zzreff(kchain1)
198 rmsside = rmsside + dxref*dxref+dyref*dyref+dzref*dzref
201 rmsside=dsqrt(rmsside/nnnn)
203 write (iout,*) "nnnn",nnnn," rmsside",rmsside