private void count() {
		if (type instanceof Reaction.A2_B2__2AB) {
			Reaction.A2_B2__2AB r = (Reaction.A2_B2__2AB) type;
			int idA = r.getIDA();
			int idB = r.getIDB();
			int nAA = 0;
			int nBB = 0;
			int nAB = 0;
			synchronized (bonds.getSynchronizationLock()) {
				for (Iterator it = bonds.iterator(); it.hasNext();) {
					rBond = (RadialBond) it.next();
					if (rBond.atom1.getID() == idA && rBond.atom2.getID() == idA)
						nAA++;
					else if (rBond.atom1.getID() == idB && rBond.atom2.getID() == idB)
						nBB++;
					else if ((rBond.atom1.getID() == idA && rBond.atom2.getID() == idB)
							|| (rBond.atom1.getID() == idB && rBond.atom2.getID() == idA))
						nAB++;
				}
			}
			float inv = 200.0f / numberOfAtoms;
			try {
				r.moleFractionA2().update(nAA * inv);
				r.moleFractionB2().update(nBB * inv);
				r.moleFractionAB().update(nAB * inv);
				r.numberOfA2().update(nAA);
				r.numberOfB2().update(nBB);
				r.numberOfAB().update(nAB);
			}
			catch (Exception e) {
				int n = movie.getCapacity();
				r.init(n, modelTimeQueue);
				r.moleFractionA2().update(nAA * inv);
				r.moleFractionB2().update(nBB * inv);
				r.moleFractionAB().update(nAB * inv);
				r.numberOfA2().update(nAA);
				r.numberOfB2().update(nBB);
				r.numberOfAB().update(nAB);
			}
		}
		else if (type instanceof Reaction.A2_B2_C__2AB_C) {
			Reaction.A2_B2_C__2AB_C r = (Reaction.A2_B2_C__2AB_C) type;
			int idA = r.getIDA();
			int idB = r.getIDB();
			int idC = r.getIDC();
			int nAA = 0;
			int nBB = 0;
			int nAB = 0;
			synchronized (bonds.getSynchronizationLock()) {
				for (Iterator it = bonds.iterator(); it.hasNext();) {
					rBond = (RadialBond) it.next();
					if (rBond.atom1.getID() == idA && rBond.atom2.getID() == idA)
						nAA++;
					else if (rBond.atom1.getID() == idB && rBond.atom2.getID() == idB)
						nBB++;
					else if ((rBond.atom1.getID() == idA && rBond.atom2.getID() == idB)
							|| (rBond.atom1.getID() == idB && rBond.atom2.getID() == idA))
						nAB++;
				}
			}
			int nC = 0;
			for (int i = 0; i < numberOfAtoms; i++) {
				if (atom[i].getID() == idC && atom[i].isRadical())
					nC++;
			}
			float inv = 200.0f / numberOfAtoms;
			try {
				r.moleFractionA2().update(nAA * inv);
				r.moleFractionB2().update(nBB * inv);
				r.moleFractionAB().update(nAB * inv);
				r.numberOfA2().update(nAA);
				r.numberOfB2().update(nBB);
				r.numberOfAB().update(nAB);
				r.numberOfC().update(nC);
			}
			catch (Exception e) {
				int n = movie.getCapacity();
				r.init(n, modelTimeQueue);
				r.moleFractionA2().update(nAA * inv);
				r.moleFractionB2().update(nBB * inv);
				r.moleFractionAB().update(nAB * inv);
				r.numberOfA2().update(nAA);
				r.numberOfB2().update(nBB);
				r.numberOfAB().update(nAB);
				r.numberOfC().update(nC);
			}
		}
		else if (type instanceof Reaction.O2_2H2__2H2O) {
			Reaction.O2_2H2__2H2O r = (Reaction.O2_2H2__2H2O) type;
			int idH = r.getIDH();
			int idO = r.getIDO();
			int nH2 = 0;
			int nO2 = 0;
			int nH2O = 0;
			synchronized (bonds.getSynchronizationLock()) {
				for (Iterator it = bonds.iterator(); it.hasNext();) {
					rBond = (RadialBond) it.next();
					if (rBond.atom1.getID() == idH && rBond.atom2.getID() == idH)
						nH2++;
					else if (rBond.atom1.getID() == idO && rBond.atom2.getID() == idO)
						nO2++;
				}
			}
			synchronized (molecules.getSynchronizationLock()) {
				for (Iterator it = molecules.iterator(); it.hasNext();) {
					if (((Molecule) it.next()).size() == 3)
						nH2O++;
				}
			}
			float inv = 100.0f / numberOfAtoms;
			try {
				r.moleFractionH2().update(2 * nH2 * inv);
				r.moleFractionO2().update(2 * nO2 * inv);
				r.moleFractionH2O().update(3 * nH2O * inv);
				r.numberOfH2().update(nH2);
				r.numberOfO2().update(nO2);
				r.numberOfH2O().update(nH2O);
			}
			catch (Exception e) {
				int n = movie.getCapacity();
				r.init(n, modelTimeQueue);
				r.moleFractionH2().update(2 * nH2 * inv);
				r.moleFractionO2().update(2 * nO2 * inv);
				r.moleFractionH2O().update(3 * nH2O * inv);
				r.numberOfH2().update(nH2);
				r.numberOfO2().update(nO2);
				r.numberOfH2O().update(nH2O);
			}
		}
	}