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 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 | 11x 11x 11x 8380x 8380x 8380x 8374x 11x 11x 8367x 8364x 11x 11x 11x 8374x 8374x 841x 841x 841x 8374x 8374x 144618x 144618x 144573x 8131x 136442x 8486x 3692x 3692x 3692x 3692x 8486x | // this is optimized for proteins where it is assumed connected
// atoms are on the same or next residue
import { areConnected } from "./areConnected";
import { assignBonds } from "./assignBonds";
import { standardResidues } from "./standardResidues";
/*
* @param {AtomSpec[]}
* atomsarray
*/
export function assignPDBBonds(atomsarray) {
// assign bonds - yuck, can't count on connect records
var protatoms: any[] = [];
var hetatoms: any[] = [];
var i, n;
for (i = 0, n = atomsarray.length; i < n; i++) {
var atom: any = atomsarray[i];
atom.index = i;
if (atom.hetflag || !standardResidues.has(atom.resn)) hetatoms.push(atom);
else protatoms.push(atom);
}
assignBonds(hetatoms);
// sort by resid
protatoms.sort(function (a: any, b: any) {
if (a.chain != b.chain) return a.chain < b.chain ? -1 : 1;
return a.resi - b.resi;
});
// for identifying connected residues
var currentResi = -1;
var reschain = -1;
var lastResConnected;
for (i = 0, n = protatoms.length; i < n; i++) {
var ai = protatoms[i];
if (ai.resi !== currentResi) {
currentResi = ai.resi;
if (!lastResConnected) reschain++;
lastResConnected = false;
}
ai.reschain = reschain;
for (var j = i + 1; j < protatoms.length; j++) {
var aj = protatoms[j];
if (aj.chain != ai.chain) break;
if (aj.resi - ai.resi > 1)
// can't be connected
break;
if (areConnected(ai, aj)) {
if (ai.bonds.indexOf(aj.index) === -1) {
// only add if not already there
ai.bonds.push(aj.index);
ai.bondOrder.push(1);
aj.bonds.push(ai.index);
aj.bondOrder.push(1);
}
if (ai.resi !== aj.resi) lastResConnected = true;
}
}
}
}
|