void drawBackbone(Graphics g, Rectangle r, boolean upperPart, boolean inRNA, boolean codonBorder) {
		if (g == null)
			return;
		Rectangle backboneTipRect = null;
		Color oldColor = g.getColor();
		Color rColor = getBackboneColor(inRNA);
		if (rBackBone == null)
			rBackBone = new Rectangle(r.x, 0, r.width, 4);
		if (upperPart) {
			rBackBone.translate(r.x - rBackBone.x, r.y - rBackBone.height - rBackBone.y);
			if (codonBorder) {
				if (backboneTipRectUp == null) {
					backboneTipRectUp = new Rectangle(rBackBone.x, rBackBone.y - 2, 2, 2);
				}
				else {
					backboneTipRectUp.translate(rBackBone.x - backboneTipRectUp.x, rBackBone.y - 2 - backboneTipRectUp.y);
				}
				backboneTipRect = backboneTipRectUp;
			}
		}
		else {
			rBackBone.translate(r.x - rBackBone.x, r.y + r.height - rBackBone.y);
			if (codonBorder) {
				if (backboneTipRectDown == null) {
					backboneTipRectDown = new Rectangle(rBackBone.x, rBackBone.y, 2, 2);
				}
				else {
					backboneTipRectDown.translate(rBackBone.x - backboneTipRectDown.x, rBackBone.y + rBackBone.height + 1 - backboneTipRectDown.y);
				}
				backboneTipRect = backboneTipRectDown;
			}
		}
		g.setColor(rColor);
		((Graphics2D) g).fill(rBackBone);
		g.setColor(rColor.darker());
		((Graphics2D) g).draw(rBackBone);
		g.setColor(Color.black);
		if (backboneTipRect != null)
			((Graphics2D) g).fill(backboneTipRect);
		g.setColor(oldColor);
	}