Skip to content
Snippets Groups Projects
Commit 52a8a0e5 authored by David Sehnal's avatar David Sehnal
Browse files

Merge "single residue units" together in Structure.ofModel

parent 199b27a8
No related branches found
No related tags found
No related merge requests found
...@@ -99,10 +99,9 @@ export function printLinks(structure: Structure, showIntra: boolean, showInter: ...@@ -99,10 +99,9 @@ export function printLinks(structure: Structure, showIntra: boolean, showInter:
if (!Unit.isAtomic(unit)) continue; if (!Unit.isAtomic(unit)) continue;
for (const pairLinks of links.getLinkedUnits(unit)) { for (const pairLinks of links.getLinkedUnits(unit)) {
if (!pairLinks.areUnitsOrdered) continue; if (!pairLinks.areUnitsOrdered || pairLinks.bondCount === 0) continue;
const { unitA, unitB } = pairLinks; const { unitA, unitB } = pairLinks;
console.log(`${pairLinks.unitA.id} - ${pairLinks.unitB.id}: ${pairLinks.bondCount} bond(s)`); console.log(`${pairLinks.unitA.id} - ${pairLinks.unitB.id}: ${pairLinks.bondCount} bond(s)`);
for (const aI of pairLinks.linkedElementIndices) { for (const aI of pairLinks.linkedElementIndices) {
...@@ -193,12 +192,12 @@ export function printIHMModels(model: Model) { ...@@ -193,12 +192,12 @@ export function printIHMModels(model: Model) {
async function run(mmcif: mmCIF_Database) { async function run(mmcif: mmCIF_Database) {
const models = await Model.create({ kind: 'mmCIF', data: mmcif }).run(); const models = await Model.create({ kind: 'mmCIF', data: mmcif }).run();
const structure = Structure.ofModel(models[0]); const structure = Structure.ofModel(models[0]);
printSequence(models[0]); //printSequence(models[0]);
//printIHMModels(models[0]); //printIHMModels(models[0]);
printUnits(structure); printUnits(structure);
printRings(structure); //printRings(structure);
printLinks(structure, false, true); printLinks(structure, true, true);
printModRes(models[0]); //printModRes(models[0]);
//printSecStructure(models[0]); //printSecStructure(models[0]);
} }
......
...@@ -5,4 +5,5 @@ ...@@ -5,4 +5,5 @@
left: 0; left: 0;
bottom: 0; bottom: 0;
overflow: hidden; overflow: hidden;
overflow-x: scroll;
} }
\ No newline at end of file
...@@ -39,11 +39,12 @@ function findHierarchyOffsets({ data }: mmCIF_Format, bounds: Interval) { ...@@ -39,11 +39,12 @@ function findHierarchyOffsets({ data }: mmCIF_Format, bounds: Interval) {
const start = Interval.start(bounds), end = Interval.end(bounds); const start = Interval.start(bounds), end = Interval.end(bounds);
const residues = [start], chains = [start]; const residues = [start], chains = [start];
const { label_entity_id, auth_asym_id, auth_seq_id, pdbx_PDB_ins_code, label_comp_id } = data.atom_site; const { label_entity_id, label_asym_id, label_seq_id, auth_seq_id, pdbx_PDB_ins_code, label_comp_id } = data.atom_site;
for (let i = start + 1; i < end; i++) { for (let i = start + 1; i < end; i++) {
const newChain = !label_entity_id.areValuesEqual(i - 1, i) || !auth_asym_id.areValuesEqual(i - 1, i); const newChain = !label_entity_id.areValuesEqual(i - 1, i) || !label_asym_id.areValuesEqual(i - 1, i);
const newResidue = newChain const newResidue = newChain
|| !label_seq_id.areValuesEqual(i - 1, i)
|| !auth_seq_id.areValuesEqual(i - 1, i) || !auth_seq_id.areValuesEqual(i - 1, i)
|| !pdbx_PDB_ins_code.areValuesEqual(i - 1, i) || !pdbx_PDB_ins_code.areValuesEqual(i - 1, i)
|| !label_comp_id.areValuesEqual(i - 1, i); || !label_comp_id.areValuesEqual(i - 1, i);
......
...@@ -98,8 +98,21 @@ namespace Structure { ...@@ -98,8 +98,21 @@ namespace Structure {
const chains = model.atomicHierarchy.chainSegments; const chains = model.atomicHierarchy.chainSegments;
const builder = new StructureBuilder(); const builder = new StructureBuilder();
const { residueSegments: { segmentMap: residueIndex } } = model.atomicHierarchy;
for (let c = 0; c < chains.count; c++) { for (let c = 0; c < chains.count; c++) {
const elements = SortedArray.ofBounds(chains.segments[c], chains.segments[c + 1]); const start = chains.segments[c];
let end = chains.segments[c + 1];
let rStart = residueIndex[start], rEnd = residueIndex[end - 1];
while (rEnd - rStart <= 1 && c + 1 < chains.count) {
c++;
end = chains.segments[c + 1];
rStart = rEnd;
rEnd = residueIndex[end - 1];
}
const elements = SortedArray.ofBounds(start, end);
builder.addUnit(Unit.Kind.Atomic, model, SymmetryOperator.Default, elements); builder.addUnit(Unit.Kind.Atomic, model, SymmetryOperator.Default, elements);
} }
......
...@@ -39,7 +39,7 @@ export class Stage { ...@@ -39,7 +39,7 @@ export class Stage {
this.viewer = Viewer.create(canvas, container) this.viewer = Viewer.create(canvas, container)
this.viewer.animate() this.viewer.animate()
this.ctx.viewer = this.viewer this.ctx.viewer = this.viewer
// this.loadPdbid('1crn') //this.loadPdbid('1jj2')
this.loadMmcifUrl(`../../examples/1cbs_full.bcif`) this.loadMmcifUrl(`../../examples/1cbs_full.bcif`)
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment