[e40e335] | 1 | c **************************************************************
|
---|
| 2 | c
|
---|
| 3 | c This file contains the subroutines: bldmol, fnd3ba,eyring,
|
---|
| 4 | c setsys,setgbl
|
---|
| 5 | c
|
---|
| 6 | c Copyright 2003-2005 Frank Eisenmenger, U.H.E. Hansmann,
|
---|
| 7 | c Shura Hayryan, Chin-Ku
|
---|
| 8 | c Copyright 2007 Frank Eisenmenger, U.H.E. Hansmann,
|
---|
| 9 | c Jan H. Meinke, Sandipan Mohanty
|
---|
| 10 | c
|
---|
| 11 | c **************************************************************
|
---|
| 12 |
|
---|
| 13 | subroutine bldmol(nml)
|
---|
| 14 |
|
---|
| 15 | c .................................................
|
---|
| 16 | c PURPOSE: calculate coordinates for molecule 'nml'
|
---|
| 17 | c
|
---|
| 18 | c OUTPUT: xat,yat,zat,xbaat,ybaat,zbaat,xtoat,ytoat,
|
---|
| 19 | c ztoat (via 'eyring')
|
---|
| 20 | c
|
---|
| 21 | c 1st backbone atom of 1st residue of 'nml':
|
---|
| 22 | c
|
---|
| 23 | c - it's position: from 'gbpr(1-3,nml)'
|
---|
| 24 | c - it's axes: from 'setgbl' according to
|
---|
| 25 | c global angles 'gbpr(4-5,nml)'
|
---|
| 26 | c
|
---|
| 27 | c CALLS: eyring, fnd3ba,setgbl,setsys
|
---|
| 28 | c .................................................
|
---|
| 29 |
|
---|
| 30 | include 'INCL.H'
|
---|
| 31 |
|
---|
| 32 | dimension xg(3),zg(3)
|
---|
| 33 |
|
---|
| 34 |
|
---|
| 35 | call fnd3ba(nml,i1,i2,i3)
|
---|
| 36 | c ------------------------------ first 3 bb atoms of 'nml'
|
---|
| 37 | ixrfpt(1,nml)=i1
|
---|
| 38 | ixrfpt(2,nml)=i2
|
---|
| 39 | ixrfpt(3,nml)=i3
|
---|
| 40 |
|
---|
| 41 | c ------------------------------ position of 1st bb atom
|
---|
| 42 | xat(i1) = gbpr(1,nml)
|
---|
| 43 | yat(i1) = gbpr(2,nml)
|
---|
| 44 | zat(i1) = gbpr(3,nml)
|
---|
| 45 |
|
---|
| 46 | rfpt(1,nml)=xat(i1)
|
---|
| 47 | rfpt(2,nml)=yat(i1)
|
---|
| 48 | rfpt(3,nml)=zat(i1)
|
---|
| 49 |
|
---|
| 50 | call setgbl(nml,i1,i2,i3, xg, zg)
|
---|
| 51 |
|
---|
| 52 | xbaat(i1) = zg(1)
|
---|
| 53 | ybaat(i1) = zg(2)
|
---|
| 54 | zbaat(i1) = zg(3)
|
---|
| 55 |
|
---|
| 56 | xtoat(i1) = xg(1)
|
---|
| 57 | ytoat(i1) = xg(2)
|
---|
| 58 | ztoat(i1) = xg(3)
|
---|
| 59 |
|
---|
| 60 | ifirs=irsml1(nml)
|
---|
| 61 |
|
---|
| 62 | do i=ifirs,irsml2(nml)
|
---|
| 63 | if (i.eq.ifirs) then ! not construct
|
---|
| 64 | jj=iatrs1(i)+1 ! 1st bb atom again
|
---|
| 65 | else
|
---|
| 66 | jj=iatrs1(i)
|
---|
| 67 | endif
|
---|
| 68 | do j=jj,iatrs2(i)
|
---|
| 69 | jow=iowat(j)
|
---|
| 70 | call eyring(j,jow)
|
---|
| 71 | enddo
|
---|
| 72 | enddo
|
---|
| 73 |
|
---|
| 74 | call setsys(i1,i2,i3, x1,x2,x3,y1,y2,y3,z1,z2,z3)
|
---|
| 75 |
|
---|
| 76 | xrfax(1,nml)=x1 ! J
|
---|
| 77 | xrfax(2,nml)=x2
|
---|
| 78 | xrfax(3,nml)=x3
|
---|
| 79 | yrfax(1,nml)=-y1 ! K
|
---|
| 80 | yrfax(2,nml)=-y2
|
---|
| 81 | yrfax(3,nml)=-y3
|
---|
| 82 | zrfax(1,nml)=-z1 ! L
|
---|
| 83 | zrfax(2,nml)=-z2
|
---|
| 84 | zrfax(3,nml)=-z3
|
---|
| 85 |
|
---|
| 86 | return
|
---|
| 87 | end
|
---|
| 88 | c ***********************************
|
---|
| 89 | subroutine fnd3ba(nml,i1,i2,i3)
|
---|
| 90 |
|
---|
| 91 | c .................................................
|
---|
| 92 | c PURPOSE: return indices 'i1,i2,i3' of
|
---|
| 93 | c first 3 backbone atoms in molecule 'nml'
|
---|
| 94 | c
|
---|
| 95 | c CALLS: fndbrn
|
---|
| 96 | c .................................................
|
---|
| 97 |
|
---|
| 98 | include 'INCL.H'
|
---|
| 99 |
|
---|
| 100 | dimension ibd(4)
|
---|
| 101 | logical bb
|
---|
| 102 |
|
---|
| 103 |
|
---|
| 104 | irs=irsml1(nml)
|
---|
| 105 |
|
---|
| 106 | c --------------------------- 1st bb atom
|
---|
| 107 | i1=iatrs1(irs)
|
---|
| 108 |
|
---|
| 109 | call fndbrn(nml,irs,i1,i,ix,i2,bb)
|
---|
| 110 |
|
---|
| 111 | c --------------------------- 2nd bb atom
|
---|
| 112 | i2=i+1
|
---|
| 113 |
|
---|
| 114 | c ------------------------ check for ring
|
---|
| 115 |
|
---|
| 116 | ibd(1)=iowat(i1)
|
---|
| 117 | ibd(2)=ibdat(1,i1)
|
---|
| 118 | ibd(3)=ibdat(2,i1)
|
---|
| 119 | ibd(4)=ibdat(3,i1)
|
---|
| 120 |
|
---|
| 121 | ix = 0
|
---|
| 122 | do i=1,nbdat(i1)+1
|
---|
| 123 |
|
---|
| 124 | if (iowat(ibd(i)).ne.i1) then
|
---|
| 125 |
|
---|
| 126 | if (ix.ne.0) then
|
---|
| 127 | write (*,'(2a,i3)')
|
---|
| 128 | # ' fnd3ba> Can handle only simple ring at 1st',
|
---|
| 129 | # ' atom of molecule #',nml
|
---|
| 130 | stop
|
---|
| 131 | endif
|
---|
| 132 |
|
---|
| 133 | ix=ibd(i)
|
---|
| 134 | endif
|
---|
| 135 | enddo
|
---|
| 136 |
|
---|
| 137 | c --------------------------- 3rd bb atom
|
---|
| 138 |
|
---|
| 139 | ix=ixatrs(irs)
|
---|
| 140 |
|
---|
| 141 | if (i2.eq.ix) then
|
---|
| 142 |
|
---|
| 143 | if (irs.lt.irsml2(nml)) then
|
---|
| 144 | i3 = iatrs1(irs+1)
|
---|
| 145 | return
|
---|
| 146 | endif
|
---|
| 147 |
|
---|
| 148 | else
|
---|
| 149 |
|
---|
| 150 | do i = ix,i2+1,-1
|
---|
| 151 | if (iowat(i).eq.i2) then
|
---|
| 152 | i3=i
|
---|
| 153 | return
|
---|
| 154 | endif
|
---|
| 155 | enddo
|
---|
| 156 |
|
---|
| 157 | endif
|
---|
| 158 |
|
---|
| 159 | write (*,'(4a,i4,a,i4)')
|
---|
| 160 | # ' fnd3ba> Cannot find backbone atom following ',nmat(i2),
|
---|
| 161 | # ' of residue ',seq(irs),irs,' in molecule #',nml
|
---|
| 162 | stop
|
---|
| 163 |
|
---|
| 164 | end
|
---|
| 165 | c ***************************
|
---|
| 166 | subroutine eyring(i,ia)
|
---|
| 167 |
|
---|
| 168 | c .........................................................
|
---|
| 169 | c PURPOSE: calculate cartesian coordinates of atom 'i'
|
---|
| 170 | c using EYRING's algorithm
|
---|
| 171 | c INPUT: i - index of atom to be constructed
|
---|
| 172 | c for 'i': blat,csbaat,snbaat,cstoat,sntoat
|
---|
| 173 | c ia- index of atom from which 'i' is to be built
|
---|
| 174 | c OUTPUT: for 'i': xat,yat,zat,xbaat,ybaat,zbaat,xtoat,ytoat,ztoat
|
---|
| 175 | c
|
---|
| 176 | c CALLS: none
|
---|
| 177 | c .........................................................
|
---|
| 178 |
|
---|
| 179 | include 'INCL.H'
|
---|
| 180 |
|
---|
| 181 | ct=cstoat(i)
|
---|
| 182 | st=sntoat(i)
|
---|
| 183 | ca=csbaat(i)
|
---|
| 184 | sa=snbaat(i)
|
---|
| 185 | bl=blat(i)
|
---|
| 186 |
|
---|
| 187 | x1=xtoat(ia)
|
---|
| 188 | x2=ytoat(ia)
|
---|
| 189 | x3=ztoat(ia)
|
---|
| 190 |
|
---|
| 191 | z1=xbaat(ia)
|
---|
| 192 | z2=ybaat(ia)
|
---|
| 193 | z3=zbaat(ia)
|
---|
| 194 |
|
---|
| 195 | y1=z2*x3-z3*x2
|
---|
| 196 | y2=z3*x1-z1*x3
|
---|
| 197 | y3=z1*x2-z2*x1
|
---|
| 198 |
|
---|
| 199 | h2=-sa*ct
|
---|
| 200 | h3=-sa*st
|
---|
| 201 |
|
---|
| 202 | x1=-ca*x1+h2*y1+h3*z1
|
---|
| 203 | x2=-ca*x2+h2*y2+h3*z2
|
---|
| 204 | x3=-ca*x3+h2*y3+h3*z3
|
---|
| 205 |
|
---|
| 206 | dx=one/sqrt(x1*x1+x2*x2+x3*x3)
|
---|
| 207 | x1=x1*dx
|
---|
| 208 | x2=x2*dx
|
---|
| 209 | x3=x3*dx
|
---|
| 210 |
|
---|
| 211 | xtoat(i)=x1
|
---|
| 212 | ytoat(i)=x2
|
---|
| 213 | ztoat(i)=x3
|
---|
| 214 |
|
---|
| 215 | z1=-st*y1+ct*z1
|
---|
| 216 | z2=-st*y2+ct*z2
|
---|
| 217 | z3=-st*y3+ct*z3
|
---|
| 218 |
|
---|
| 219 | dz=one/sqrt(z1*z1+z2*z2+z3*z3)
|
---|
| 220 | xbaat(i)=z1*dz
|
---|
| 221 | ybaat(i)=z2*dz
|
---|
| 222 | zbaat(i)=z3*dz
|
---|
| 223 |
|
---|
| 224 | xat(i)=xat(ia)+x1*bl
|
---|
| 225 | yat(i)=yat(ia)+x2*bl
|
---|
| 226 | zat(i)=zat(ia)+x3*bl
|
---|
| 227 |
|
---|
| 228 | return
|
---|
| 229 | end
|
---|
| 230 | c ***********************************************************
|
---|
| 231 | subroutine setsys(i1,i2,i3, x1,x2,x3,y1,y2,y3,z1,z2,z3)
|
---|
| 232 |
|
---|
| 233 | c ..........................................................
|
---|
| 234 | c PURPOSE: calculate axes X,Y,Z of right-handed orthogonal
|
---|
| 235 | c system given by three atom positions R1, R2, R3
|
---|
| 236 | c
|
---|
| 237 | c X = (R2-R1)/ |( )|
|
---|
| 238 | c Z = {X x (R2-R3)} / |{ }|
|
---|
| 239 | c Y = Z x X
|
---|
| 240 | c
|
---|
| 241 | c INPUT: i1, i2, i3 - indices of three atoms
|
---|
| 242 | c OUTPUT: x1,x2,x3 |
|
---|
| 243 | c y1,y2,y3 | -direction cosines of X,Y,Z
|
---|
| 244 | c z1,z2,z3 |
|
---|
| 245 | c
|
---|
| 246 | c CALLS: none
|
---|
| 247 | c ...................................................
|
---|
| 248 |
|
---|
| 249 |
|
---|
| 250 | include 'INCL.H'
|
---|
| 251 |
|
---|
| 252 | h1=xat(i2)
|
---|
| 253 | h2=yat(i2)
|
---|
| 254 | h3=zat(i2)
|
---|
| 255 |
|
---|
| 256 | x1=h1-xat(i1)
|
---|
| 257 | x2=h2-yat(i1)
|
---|
| 258 | x3=h3-zat(i1)
|
---|
| 259 |
|
---|
| 260 | y1=h1-xat(i3)
|
---|
| 261 | y2=h2-yat(i3)
|
---|
| 262 | y3=h3-zat(i3)
|
---|
| 263 |
|
---|
| 264 | z1=x2*y3-x3*y2
|
---|
| 265 | z2=x3*y1-x1*y3
|
---|
| 266 | z3=x1*y2-x2*y1
|
---|
| 267 |
|
---|
| 268 | dx=one/sqrt(x1*x1+x2*x2+x3*x3)
|
---|
| 269 | x1=x1*dx
|
---|
| 270 | x2=x2*dx
|
---|
| 271 | x3=x3*dx
|
---|
| 272 |
|
---|
| 273 | dz=one/sqrt(z1*z1+z2*z2+z3*z3)
|
---|
| 274 | z1=z1*dz
|
---|
| 275 | z2=z2*dz
|
---|
| 276 | z3=z3*dz
|
---|
| 277 |
|
---|
| 278 | y1=z2*x3-z3*x2
|
---|
| 279 | y2=z3*x1-z1*x3
|
---|
| 280 | y3=z1*x2-z2*x1
|
---|
| 281 |
|
---|
| 282 | return
|
---|
| 283 | end
|
---|
| 284 |
|
---|
| 285 | c *****************************************
|
---|
| 286 | subroutine setgbl(nml,i1,i2,i3,xg,zg)
|
---|
| 287 |
|
---|
| 288 | c ...................................................
|
---|
| 289 | c
|
---|
| 290 | c PURPOSE: 1. Obtain global axes (J,K,L)
|
---|
| 291 | c related to x(1 0 0),y(0 1 0),z(0 0 1)
|
---|
| 292 | c by 3 rotations (gbl. parameters #4-#6):
|
---|
| 293 | c
|
---|
| 294 | c - round z by angle alpha
|
---|
| 295 | c - round x' by a. beta
|
---|
| 296 | c - round y" by a. gamma
|
---|
| 297 | c
|
---|
| 298 | c 2. Return x-axis (xg) & z-axis (zg)
|
---|
| 299 | c for atom #1 in order to orientate J
|
---|
| 300 | c along the bond from backbone atom #1
|
---|
| 301 | c to bb.a. #2 and L according to the
|
---|
| 302 | c cross product [ bond(#1->#2) x
|
---|
| 303 | c bond(#2->#3) ] when using Eyring's
|
---|
| 304 | c algorithm to get the coordinates
|
---|
| 305 | c
|
---|
| 306 | c CALLS: none
|
---|
| 307 | c ..............................................
|
---|
| 308 |
|
---|
| 309 | include 'INCL.H'
|
---|
| 310 |
|
---|
| 311 | dimension xg(3),zg(3),ag(3,3)
|
---|
| 312 |
|
---|
| 313 |
|
---|
| 314 | ca = cos(gbpr(4,nml)) ! alpha
|
---|
| 315 | sa = sin(gbpr(4,nml))
|
---|
| 316 | cb = cos(gbpr(5,nml)) ! beta
|
---|
| 317 | sb = sin(gbpr(5,nml))
|
---|
| 318 | cg = cos(gbpr(6,nml)) ! gamma
|
---|
| 319 | sg = sin(gbpr(6,nml))
|
---|
| 320 |
|
---|
| 321 | c ----------------------------- J
|
---|
| 322 | x1 = ca*cg - sa*sb*sg
|
---|
| 323 | x2 = sa*cg + ca*sb*sg
|
---|
| 324 | x3 = -cb*sg
|
---|
| 325 |
|
---|
| 326 | d = sqrt(x1**2+x2**2+x3**2)
|
---|
| 327 | ag(1,1) = x1/d
|
---|
| 328 | ag(2,1) = x2/d
|
---|
| 329 | ag(3,1) = x3/d
|
---|
| 330 | c ----------------------------- K
|
---|
| 331 | y1 = -sa*cb
|
---|
| 332 | y2 = ca*cb
|
---|
| 333 | y3 = sb
|
---|
| 334 |
|
---|
| 335 | d = sqrt(y1**2+y2**2+y3**2)
|
---|
| 336 | ag(1,2) = y1/d
|
---|
| 337 | ag(2,2) = y2/d
|
---|
| 338 | ag(3,2) = y3/d
|
---|
| 339 | c ----------------------------- L
|
---|
| 340 | z1 = ca*sg + sa*sb*cg
|
---|
| 341 | z2 = sa*sg - ca*sb*cg
|
---|
| 342 | z3 = cb*cg
|
---|
| 343 |
|
---|
| 344 | d = sqrt(z1**2+z2**2+z3**2)
|
---|
| 345 | ag(1,3) = z1/d
|
---|
| 346 | ag(2,3) = z2/d
|
---|
| 347 | ag(3,3) = z3/d
|
---|
| 348 |
|
---|
| 349 | c ------------------------------------ X1
|
---|
| 350 | ct2 = cstoat(i2)
|
---|
| 351 | st2 = sntoat(i2)
|
---|
| 352 | sa2 = snbaat(i2)
|
---|
| 353 |
|
---|
| 354 | x1 = -csbaat(i2)
|
---|
| 355 | x2 = -sa2*ct2
|
---|
| 356 | x3 = -sa2*st2
|
---|
| 357 |
|
---|
| 358 | dx = sqrt(x1**2+x2**2+x3**2)
|
---|
| 359 | x1 = x1/dx
|
---|
| 360 | x2 = x2/dx
|
---|
| 361 | x3 = x3/dx
|
---|
| 362 | c ------------------------------------- Z1
|
---|
| 363 | st3 = sntoat(i3)
|
---|
| 364 | ct3 = cstoat(i3)
|
---|
| 365 |
|
---|
| 366 | z1 = -st3*(st2*x3+ct2*x2)
|
---|
| 367 | z2 = st3*ct2*x1 + ct3*st2
|
---|
| 368 | z3 = st3*st2*x1 - ct3*ct2
|
---|
| 369 |
|
---|
| 370 | dz = sqrt(z1**2+z2**2+z3**2)
|
---|
| 371 | z1 = z1/dz
|
---|
| 372 | z2 = z2/dz
|
---|
| 373 | z3 = z3/dz
|
---|
| 374 | c ------------------------------------- Y1
|
---|
| 375 | y1 = z2 * x3 - z3 * x2
|
---|
| 376 | y3 = z1 * x2 - z2 * x1 ! do not need y2
|
---|
| 377 |
|
---|
| 378 | c ----------------------------- into global system
|
---|
| 379 |
|
---|
| 380 | xg(1) = ag(1,1)*x1 + ag(1,2)*y1 + ag(1,3)*z1
|
---|
| 381 | xg(2) = ag(2,1)*x1 + ag(2,2)*y1 + ag(2,3)*z1
|
---|
| 382 | xg(3) = ag(3,1)*x1 + ag(3,2)*y1 + ag(3,3)*z1
|
---|
| 383 |
|
---|
| 384 | dx = sqrt(xg(1)**2+xg(2)**2+xg(3)**2)
|
---|
| 385 |
|
---|
| 386 | zg(1) = ag(1,1)*x3 + ag(1,2)*y3 + ag(1,3)*z3
|
---|
| 387 | zg(2) = ag(2,1)*x3 + ag(2,2)*y3 + ag(2,3)*z3
|
---|
| 388 | zg(3) = ag(3,1)*x3 + ag(3,2)*y3 + ag(3,3)*z3
|
---|
| 389 |
|
---|
| 390 | dz = sqrt(zg(1)**2+zg(2)**2+zg(3)**2)
|
---|
| 391 |
|
---|
| 392 | do i=1,3
|
---|
| 393 | xg(i) = xg(i)/dx
|
---|
| 394 | zg(i) = zg(i)/dz
|
---|
| 395 | enddo
|
---|
| 396 |
|
---|
| 397 | return
|
---|
| 398 | end
|
---|
| 399 |
|
---|