public void setCutOffMatrix(float cutoff) {
		if (cutoff <= 0)
			throw new IllegalArgumentException("cutoff<=0");
		rCutOff = cutoff;
		double[] sig = new double[Element.NMAX];
		sig[ID_NT] = nt.getSigma();
		sig[ID_PL] = pl.getSigma();
		sig[ID_WS] = ws.getSigma();
		sig[ID_CK] = ck.getSigma();
		sig[ID_MO] = mo.getSigma();
		sig[ID_SP] = sp.getSigma();
		for (int i = ID_ALA; i <= ID_VAL; i++)
			sig[i] = aminoAcidElement[i - ID_ALA].getSigma();
		for (int i = ID_A; i <= ID_U; i++)
			sig[i] = nucleotideElement[i - ID_A].getSigma();
		int n = sig.length;
		int scale = 1;
		for (int i = 0; i < n - 1; i++) {
			for (int j = i + 1; j < n; j++) {
				if (isComplementary(i, j)) {
					// the following is used to extend the interaction range between A-T and C-G so that they
					// can attract slightly more strongly. However, if cutoff is set short, we mean to turn off
					// all attractions, I think.
					if (cutoff > 1.5)
						scale = 4;
				}
				cutOffSquareMatrix[j][i] = cutOffSquareMatrix[i][j] = sig[j] * sig[i] * cutoff * cutoff * scale;
			}
		}
		for (int i = 0; i < n; i++) {
			cutOffSquareMatrix[i][i] = sig[i] * sig[i] * cutoff * cutoff;
		}
		setShiftMatrix(cutoff);
	}