in packages/miew/src/io/parsers/CIFParser.js [356:408]
_extractSheets(complex, sheetData) {
const { asymDict } = this;
if (!sheetData.sheet_id || !sheetData.id || !sheetData.beg_label_seq_id || !sheetData.end_label_seq_id
|| !sheetData.beg_label_asym_id) {
return;
}
// Strand(sheet, start, end, sense, cur, prev)
const sheets = complex._sheets;
function getSheet(name) {
const n = sheets.length;
for (let i = 0; i < n; ++i) {
if (sheets[i]._name === name) {
return sheets[i];
}
}
sheets[n] = new Sheet(name, 0);
return sheets[n];
}
const sheetNames = arrize(sheetData.sheet_id);
const strandNames = arrize(sheetData.id);
const starts = arrize(sheetData.beg_auth_seq_id);
const ends = arrize(sheetData.end_auth_seq_id);
const chains = arrize(sheetData.beg_label_asym_id);
const stICodes = arrize(sheetData.pdbx_beg_PDB_ins_code) || [];
const endICodes = arrize(sheetData.pdbx_end_PDB_ins_code) || [];
for (let i = 0, n = strandNames.length; i < n; ++i) {
const chain = complex.getChain(asymDict[chains[i]]);
const sheet = getSheet(sheetNames[i]);
const startIdx = starts[i];
const endIdx = ends[i];
const startICode = stICodes[i] || ' ';
const endICode = endICodes[i] || ' ';
const start = chain.findResidue(startIdx, startICode);
const end = chain.findResidue(endIdx, endICode);
// TODO think about last condition
if (!start || !end) {
continue;
}
const strand = new Strand(sheet, start[0], end[0], 0, null, null);
const residues = chain.getResidues();
for (let r = start[1]; r <= end[1]; ++r) {
residues[r]._secondary = strand;
}
sheet.addStrand(strand);
complex.structures.push(strand);
}
}