message: lazy calculation of Structure.polymerResidueCount
diff: @@ -64,8 +64,8 @@ class Structure {
  } = {
  hashCode: -1,
  transformHash: -1,
  - elementCount: 0,
  - polymerResidueCount: 0,
  + elementCount: -1,
  + polymerResidueCount: -1,
  coordinateSystem: SymmetryOperator.Default,
  label: ''
  };
  @@ -105,6 +105,13 @@ class Structure {
  /** Count of all polymer residues in the structure */
  get polymerResidueCount() {
  + if (this._props.polymerResidueCount === -1) {
  + let polymerResidueCount = 0
  + for (let i = 0, _i = this.units.length; i < _i; i++) {
  + polymerResidueCount += this.units[i].polymerElements.length;
  + }
  + this._props.polymerResidueCount = polymerResidueCount
  + }
  return this._props.polymerResidueCount;
  }
  @@ -269,21 +276,19 @@ class Structure {
  }
  getModelIndex(m: Model) {
  - return this.model
  + return this.models.indexOf(m)
  }
  private initUnits(units: ArrayLike<Unit>) {
  const unitMap = IntMap.Mutable<Unit>();
  const unitIndexMap = IntMap.Mutable<number>();
  let elementCount = 0;
  - let polymerResidueCount = 0;
  let isSorted = true;
  let lastId = units.length > 0 ? units[0].id : 0;
  for (let i = 0, _i = units.length; i < _i; i++) {
  const u = units[i];
  unitMap.set(u.id, u);
  elementCount += u.elements.length;
  - polymerResidueCount += u.polymerElements.length;
  if (u.id < lastId) isSorted = false;
  lastId = u.id;
  }
  @@ -292,7 +297,6 @@ class Structure {
  unitIndexMap.set(units[i].id, i);
  }
  this._props.elementCount = elementCount;
  - this._props.polymerResidueCount = polymerResidueCount;
  return { unitMap, unitIndexMap };
  }
  