Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | 308x 308x 308x 308x 20108x 20108x 20108x 1560x 1560x 1560x 308x 10092x 308x 1560x 1560x 58062x 58062x 58062x 1509x 56553x 28593x 28593x 5346x 5346x 2664x 2664x 1539x 342x 339x 339x 342x 342x 342x | // this will identify all hydrogen bonds between backbone // atoms; assume atom names are correct, only identifies // single closest hbond export function assignBackboneHBonds(atomsarray, hbondCutoff) { let maxlength = hbondCutoff || 3.2; let maxlengthSq = maxlength*maxlength; let atoms = []; for (let i = 0, n = atomsarray.length; i < n; i++) { atomsarray[i].index = i; // only consider 'N' and 'O' var atom = atomsarray[i]; if (!atom.hetflag && (atom.atom === "N" || atom.atom === "O")) { atoms.push(atom); atom.hbondOther = null; atom.hbondDistanceSq = Number.POSITIVE_INFINITY; } } atoms.sort(function (a, b) { return a.z - b.z; }); for (let i = 0, n = atoms.length; i < n; i++) { var ai = atoms[i]; for (let j = i + 1; j < n; j++) { var aj = atoms[j]; var zdiff = aj.z - ai.z; if (zdiff > maxlength) // can't be connected break; if (aj.atom == ai.atom) continue; // can't be connected, but later might be var ydiff = Math.abs(aj.y - ai.y); if (ydiff > maxlength) continue; var xdiff = Math.abs(aj.x - ai.x); if (xdiff > maxlength) continue; var dist = xdiff * xdiff + ydiff * ydiff + zdiff * zdiff; if (dist > maxlengthSq) continue; if (aj.chain == ai.chain && Math.abs(aj.resi - ai.resi) < 4) continue; // ignore bonds between too close residues // select closest hbond if (dist < ai.hbondDistanceSq) { ai.hbondOther = aj; ai.hbondDistanceSq = dist; } if (dist < aj.hbondDistanceSq) { aj.hbondOther = ai; aj.hbondDistanceSq = dist; } } } } |