content: package edu.stanford.rsl.conrad.phantom.renderer;
  
  import edu.stanford.rsl.conrad.data.numeric.Grid2D;
  import edu.stanford.rsl.conrad.utils.CONRAD;
  import edu.stanford.rsl.conrad.utils.UserUtil;
  
  /**
   * Class which generates an intensity ramp across the image in each image of the stack. Useful to investigate intensity-dependent processing.
   * 
   * @author akmaier
   *
   */
  public class RampProjectionPhantomRenderer extends PhantomRenderer {
  
  	private int width = 620;
  	private int height = 480;
  	private int stack = 191;
  	private double slope = 0.008;
  	private int projectionNumber;
  	
  	private Grid2D createFloatProcessor(int k){
  		Grid2D fl = new Grid2D(width, height);
  		double middle = ((width * slope) / 2) + 0.2;
  		double currentSlope = slope * (((1.0 * k) - (this.stack / 2)) / (this.stack / 2));
  		for (int j = 0; j < height; j++){
  			for (int i = 0; i < width; i++) {
  				fl.putPixelValue(i, j, middle + ((i - (width / 2)) * currentSlope));
  			}
  		}
  		return fl;
  	}
  	
  	@Override
  	public void createPhantom(){
  
  	}
  
  	/**
  	 * sets the width of the image to be rendered
  	 * @param width the image width
  	 */
  	public void setWidth(int width) {
  		this.width = width;
  	}
  
  	/**
  	 * returns the width
  	 * @return the width
  	 */
  	public int getWidth() {
  		return width;
  	}
  
  	public void setHeight(int height) {
  		this.height = height;
  	}
  
  	public int getHeight() {
  		return height;
  	}
  
  	public void setStack(int stack) {
  		this.stack = stack;
  	}
  
  	public int getStack() {
  		return stack;
  	}
  
  	public void setSlope(double slope) {
  		this.slope = slope;
  	}
  
  	public double getSlope() {
  		return slope;
  	}
  
  	public String toString(){
  		return "Ramp Projection Phantom";
  	}
  
  	@Override
  	public String getBibtexCitation() {
  		return CONRAD.CONRADBibtex;
  	}
  
  	@Override
  	public String getMedlineCitation() {
  		return CONRAD.CONRADMedline;
  	}
  
  	@Override
  	public void configure() throws Exception {
  		try {
  			width = UserUtil.queryInt("Enter width", width);
  			height = UserUtil.queryInt("Enter height:", height);
  			stack = UserUtil.queryInt("Enter number of projection images", stack);
  			slope = UserUtil.queryDouble("Enter slope: ", slope);
  			configured = true;
  		} catch (Exception e){
  			System.out.println(e.getLocalizedMessage());
  		}
  	}
  
  	@Override
  	public Grid2D getNextProjection() {
  		Grid2D proc  = null;
  		if (projectionNumber < stack) {
  			proc = createFloatProcessor(projectionNumber);
  			projectionNumber ++;
  		}
  		return proc;
  	}
  
  
  }
  /*
   * Copyright (C) 2010-2014 Andreas Maier
   * CONRAD is developed as an Open Source project under the GNU General Public License (GPL).
  */