public void showROI(ImagePlus ip, Roi roi, StateContainer sc_in) {

		// green coloured pixel for alive set pixel visualization
		final int[] ALIVE_PIXEL = new int[] {0, 255, 0, 0};
		// red coloured pixel for trial set (band) pixel visualization
		final int[] BAND_PIXEL = new int[] {255, 0, 0, 0};

		final ImageProgressContainer progress = new ImageProgressContainer(new ImageContainer(ip));	
		final DeferredObjectArray3D<States> map;
		StateContainer sc_test = null;
		
		if ( sc_in != null ) {
			sc_test = sc_in;
		}		
		if ( roi != null ) {
			sc_test = new StateContainer();
			sc_test.setROI(roi, progress.getWidth(), progress.getHeight(), progress.getImageCount(), 1);
		}
		if ( sc_test == null) {
			IJ.error("sc_test not set");
			return;
		}
		
		map = sc_test.getForSparseField();

		
		int px_alive=0, px_band=0, px_far=0;

		final ImageProgressContainer output = progress;
		if (ask_params) progress.showProgressStep();
		StateContainer.States cell_state = StateContainer.States.OUTSIDE;
		for (int z = 0; z < map.getZLength(); z++)
		{
			for (int x = 0; x < map.getXLength(); x++)
			{
				for (int y = 0; y < map.getYLength(); y++)
				{
					cell_state = map.get(x, y, z);
					if (cell_state == StateContainer.States.INSIDE)
					{
						output.setPixel(x, y, z, ALIVE_PIXEL);
						px_alive++;
					}
					else if (cell_state == StateContainer.States.ZERO)
					{
						output.setPixel(x, y, z, BAND_PIXEL);
						px_band++;
					}
					else {
						px_far++;
					}
				}
			}
		}
		progress.showProgressStep();
	}