private void getMolecules() {
		if (moleculeCount > 0)
			return;
		moleculeCount = 0;
		int atomCount = getAtomCount();
		BitSet atomlist = new BitSet(atomCount);
		BitSet bs = new BitSet(atomCount);
		int thisModelIndex = -1;
		int modelIndex = -1;
		int indexInModel = -1;
		int moleculeCount0 = -1;
		for (int i = 0; i < atomCount; i++)
			if (!atomlist.get(i) && !bs.get(i)) {
				modelIndex = atoms[i].modelIndex;
				if (modelIndex != thisModelIndex) {
					indexInModel = -1;
					mmset.getModel(modelIndex).firstMolecule = moleculeCount;
					moleculeCount0 = moleculeCount - 1;
					thisModelIndex = modelIndex;
				}
				indexInModel++;
				bs = getConnectedBitSet(i);
				atomlist.or(bs);
				if (moleculeCount == molecules.length)
					molecules = (Molecule[]) ArrayUtil.setLength(molecules, moleculeCount * 2);
				molecules[moleculeCount] = new Molecule(moleculeCount, bs, thisModelIndex, indexInModel);
				mmset.getModel(thisModelIndex).moleculeCount = moleculeCount - moleculeCount0;
				moleculeCount++;
			}
	}