double multiplyEpsilonFor(int idOfI, int idOfJ) {

		/* same element */
		if (idOfI == idOfJ)
			return getElement(idOfI).getEpsilon() * getElement(idOfJ).getEpsilon();

		/* disulfide bonds */
		if ((idOfI == ID_CYS || idOfI == ID_MET) && (idOfJ == ID_CYS || idOfJ == ID_MET))
			return 100.0;

		/* A-T complement */
		if ((idOfI == ID_A && idOfJ == ID_T) || (idOfI == ID_T && idOfJ == ID_A))
			return 4.0f * hbStrength * hbStrength;

		/* C-G complement */
		if ((idOfI == ID_C && idOfJ == ID_G) || (idOfI == ID_G && idOfJ == ID_C))
			return 9.0f * hbStrength * hbStrength;

		/* A-U complement */
		if ((idOfI == ID_A && idOfJ == ID_U) || (idOfI == ID_U && idOfJ == ID_A))
			return 4.0f * hbStrength * hbStrength;

		/* others */
		if (affinity.isLBMixed(getElement(idOfI), getElement(idOfJ)))
			return getElement(idOfI).getEpsilon() * getElement(idOfJ).getEpsilon();

		double x = affinity.getEpsilon(getElement(idOfI), getElement(idOfJ));
		return x * x;

	}