1 double precision function rmscalc(ccc,cccref,przes_min,obrot_min,
5 include 'COMMON.IOUNITS'
7 include 'COMMON.INTERACT'
9 double precision cccref(3,maxres2),creff(3,maxres2),
10 & ccc(3,maxres2),cc(3,maxres2)
11 double precision przes(3),obrot(3,3),przes_min(3),obrot_min(3,3)
13 integer i,ii,j,ib,ichain,indchain,ichain1,ichain2,
15 double precision rms,rmsmin
16 C Loop over chain permutations
22 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)
27 write (iout,*) "chain_length",chain_length(ichain)
28 write (iout,*) "nstart_sup",nstart_sup," nend_sup",nend_sup
30 do i=1,chain_length(ichain)
31 c do i=nstart_sup(ichain),nend_sup(ichain)
32 ichain1=chain_border(1,ichain)+i-1
33 ichain2=chain_border(1,indchain)+i-1
34 if (ichain1.lt.nstart_sup .or. ichain1.gt.nend_sup .or.
35 & ichain2.lt.nstart_sup .or. ichain2.gt.nend_sup) cycle
38 write (iout,*) "back",ii," ichain1",ichain1,
39 & " ichain2",ichain2," i",i,chain_border(1,ichain)+i-1
42 cc(j,ii)=ccc(j,ichain2)
43 creff(j,ii)=cccref(j,ichain1)
46 write (iout,'(3f10.5,5x,3f10.5)')
47 & (cc(j,ii),j=1,3),(creff(j,ii),j=1,3)
54 indchain=tabpermchain(ichain,iperm)
55 do i=1,chain_length(ichain)
56 c do i=nstart_sup(ichain),nend_sup(ichain)
57 ichain1=chain_border(1,ichain)+i-1
58 ichain2=chain_border(1,indchain)+i-1
59 if (ichain1.lt.nstart_sup .or. ichain1.gt.nend_sup .or.
60 & ichain2.lt.nstart_sup .or. ichain2.gt.nend_sup) cycle
61 if (itype(ichain1).ne.10) then
64 write (iout,*) "side",ii," ichain1",ichain1,
68 cc(j,ii)=ccc(j,ichain2+nres)
69 creff(j,ii)=cccref(j,ichain1+nres)
72 write (iout,'(3f10.5,5x,3f10.5)')
73 & (cc(j,ii),j=1,3),(creff(j,ii),j=1,3)
79 c write (iout,*) "rmscalc: iprot",iprot," nsup",nsup(iprot)," ii",ii
80 call fitsq(rms,cc(1,1),creff(1,1),ii,przes,obrot,non_conv)
82 write (iout,*) 'Error: FITSQ non-convergent'
84 else if (rms.lt.-1.0d-6) then
85 print *,'Error: rms^2 = ',rms
87 else if (rms.ge.1.0d-6 .and. rms.lt.0) then
92 if (rms.lt.rmsmin) then
99 write (iout,*) "iperm",iperm," rms",rms
104 write (iout,*) "ipermmin",ipermmin," rmsmin",rmsmin
108 c------------------------------------------------------------------------
109 double precision function rmscalc_thet(ttheta,theta_reff,
113 include 'COMMON.IOUNITS'
114 include 'COMMON.CHAIN'
115 include 'COMMON.INTERACT'
117 integer iperm,k,ichain,indchain,kchain1,kchain2,nnnn
118 double precision ttheta(maxres),theta_reff(maxres),rmsthet,dtheta
122 indchain=tabpermchain(ichain,iperm)
123 c write (iout,*) "ichain",ichain," iperm",iperm,
124 c & " indchain",indchain
126 do k=3,chain_length(ichain)
127 kchain1=chain_border(1,ichain)+k-1
128 kchain2=chain_border(1,indchain)+k-1
130 dtheta = ttheta(kchain2)-theta_reff(kchain1)
131 c write (iout,*) k,theta(k),theta_ref(k,iref,ib,iprot),
133 rmsthet = rmsthet+dtheta*dtheta
137 rmsthet=dsqrt(rmsthet/nnnn)
139 write (iout,*) "nnnn",nnnn," rmsthet",rmsthet
144 c------------------------------------------------------------------------
145 double precision function rmscalc_phi(pphi,phi_reff,iperm)
148 include 'COMMON.IOUNITS'
149 include 'COMMON.CHAIN'
150 include 'COMMON.INTERACT'
152 integer iperm,k,ichain,indchain,kchain1,kchain2,nnnn
153 double precision pphi(maxres),phi_reff(maxres),rmsphi,dphi
154 double precision pinorm
158 indchain=tabpermchain(ichain,iperm)
159 do k=4,chain_length(ichain)
160 kchain1=chain_border(1,ichain)+k-1
161 kchain2=chain_border(1,indchain)+k-1
163 dphi=pinorm(pphi(kchain2)-phi_reff(kchain1))
164 c write (iout,*) k,phi(k),phi_ref(k,iref,ib,iprot),
165 c & pinorm(phi(k)-phi_ref(k,iref,ib,iprot))
166 rmsphi = rmsphi + dphi*dphi
170 rmsphi=dsqrt(rmsphi/nnnn)
172 write (iout,*) "nnnn",nnnn," rmsphi",rmsphi
177 c------------------------------------------------------------------------
178 double precision function rmscalc_side(xxtabb,yytabb,zztabb,
179 & xxreff,yyreff,zzreff,iperm)
182 include 'COMMON.IOUNITS'
183 include 'COMMON.CHAIN'
184 include 'COMMON.INTERACT'
186 integer iperm,k,ichain,indchain,kchain1,kchain2,nnnn
187 double precision xxtabb(maxres),yytabb(maxres),zztabb(maxres),
188 & xxreff(maxres),yyreff(maxres),zzreff(maxres),rmsside,
193 indchain=tabpermchain(ichain,iperm)
194 do k=1,chain_length(ichain)
195 kchain1=chain_border(1,ichain)+k-1
196 kchain2=chain_border(1,indchain)+k-1
197 if (itype(kchain1).eq.ntyp1) cycle
199 dxref = xxtabb(kchain2)-xxreff(kchain1)
200 dyref = yytabb(kchain2)-yyreff(kchain1)
201 dzref = zztabb(kchain2)-zzreff(kchain1)
202 rmsside = rmsside + dxref*dxref+dyref*dyref+dzref*dzref
205 rmsside=dsqrt(rmsside/nnnn)