_extractSheets()

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);
    }
  }