content: package edu.stanford.rsl.conrad.phantom.workers;
  
  import edu.stanford.rsl.conrad.data.numeric.Grid2D;
  import edu.stanford.rsl.conrad.geometry.trajectories.Trajectory;
  import edu.stanford.rsl.conrad.reconstruction.voi.VolumeOfInterest;
  import edu.stanford.rsl.conrad.utils.CONRAD;
  import edu.stanford.rsl.conrad.utils.Configuration;
  import edu.stanford.rsl.conrad.utils.FileUtil;
  import ij.process.FloatProcessor;
  
  public class VolumeOfInterestPhantom extends SliceWorker {
  
  	private VolumeOfInterest voi = null;
  	private Trajectory geometry = null;
  
  	@Override
  	public void workOnSlice(int k) {
  		Trajectory traj = Configuration.getGlobalConfiguration().getGeometry();
  		int dimx = traj.getReconDimensionX();
  		int dimy = traj.getReconDimensionY();
  		int dimz = traj.getReconDimensionZ();
  		FloatProcessor current = new FloatProcessor(dimx, dimy);
  		double offsetX = (dimx /2) * geometry.getVoxelSpacingX();
  		double offsetY = (dimy /2) * geometry.getVoxelSpacingY();
  		double offsetZ = (dimz /2) * geometry.getVoxelSpacingZ();
  		for (int i=0; i< dimx; i++) {
  			for (int j = 0; j< dimy; j++){
  				double value = 0;
  				if (voi.contains((this.geometry.getVoxelSpacingX() * i) - offsetX, (this.geometry.getVoxelSpacingY() * j) - offsetY, (this.geometry.getVoxelSpacingZ() * k) - offsetZ)) value = 1;
  				current.putPixelValue(i, j, value);
  			}
  		}
  		Grid2D grid = new Grid2D((float[])current.getPixels(), current.getWidth(), current.getHeight());
  		this.imageBuffer.add(grid, k);
  	}
  
  	@Override
  	public String getProcessName() {
  		return "Volume of Interest Phantom";
  	}
  
  	@Override
  	public String getBibtexCitation() {
  		return CONRAD.CONRADBibtex;
  	}
  
  	@Override
  	public String getMedlineCitation() {
  		return CONRAD.CONRADMedline;
  	}
  
  	@Override
  	public void configure() throws Exception{
  		String file = FileUtil.myFileChoose(".txt", false);
  		voi = VolumeOfInterest.openAsVolume(file);
  		geometry = Configuration.getGlobalConfiguration().getGeometry();
  		super.configure();
  	}
  
  	@Override
  	public SliceWorker clone() {
  		VolumeOfInterestPhantom clone = new VolumeOfInterestPhantom();
  		clone.geometry = geometry;
  		clone.voi = voi;
  		return clone;
  	}
  
  }
  /*
   * Copyright (C) 2010-2014 Andreas Maier
   * CONRAD is developed as an Open Source project under the GNU General Public License (GPL).
  */