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