content: package edu.stanford.rsl.conrad.phantom;
  
  import edu.stanford.rsl.conrad.geometry.shapes.simple.PointND;
  import edu.stanford.rsl.conrad.geometry.shapes.simple.Sphere;
  import edu.stanford.rsl.conrad.physics.PhysicalObject;
  import edu.stanford.rsl.conrad.physics.materials.database.MaterialsDB;
  import edu.stanford.rsl.conrad.utils.CONRAD;
  
  /**
   * Phantom to test forward and back projection resolution.
   * 
   * Creates a several small spheres of high contrast at several locations in the scene. (Diameter 0.1 mm)
   * The material is set to Plexiglass (density of 1.95).
   * 
   * @author Andreas Maier
   *
   */
  public class SpherePhantom extends AnalyticPhantom {
  
  	/**
  	 * 
  	 */
  	private static final long serialVersionUID = 5781085850910993618L;
  
  	@Override
  	public String getBibtexCitation() {
  		return CONRAD.CONRADBibtex;
  	}
  
  	@Override
  	public String getMedlineCitation() {
  		return CONRAD.CONRADMedline;
  	}
  
  	@Override
  	public String getName() {
  		return "Sphere Phantom";
  	}
  
  	public SpherePhantom() {
  		// Body of the phantom.
  		double radius = 0.1;
  		PointND center = new PointND(0,0,0);
  		
  		// center bead
  		Sphere sp = new Sphere(radius, center);
  		sp.setName("High Constrast Bead");
  		PhysicalObject po = new PhysicalObject();
  		po.setMaterial(MaterialsDB.getMaterialWithName("Plexiglass")); // D = 1.95
  		po.setShape(sp);
  		add(po);
  		
  		// left
  		center = new PointND(100,0,0);
  		sp = new Sphere(radius, center);
  		sp.setName("High Constrast Bead");
  		po = new PhysicalObject();
  		po.setMaterial(MaterialsDB.getMaterialWithName("Plexiglass")); // D = 1.95
  		po.setShape(sp);
  		add(po);
  		
  		// right
  		center = new PointND(-100,0,0);
  		sp = new Sphere(radius, center);
  		sp.setName("High Constrast Bead");
  		po = new PhysicalObject();
  		po.setMaterial(MaterialsDB.getMaterialWithName("Plexiglass")); // D = 1.95
  		po.setShape(sp);
  		add(po);
  		
  		// top
  		center = new PointND(0, -100,0);
  		sp = new Sphere(radius, center);
  		sp.setName("High Constrast Bead");
  		po = new PhysicalObject();
  		po.setMaterial(MaterialsDB.getMaterialWithName("Plexiglass")); // D = 1.95
  		po.setShape(sp);
  		add(po);
  		
  		// bottom
  		center = new PointND(0, 100,0);
  		sp = new Sphere(radius, center);
  		sp.setName("High Constrast Bead");
  		po = new PhysicalObject();
  		po.setMaterial(MaterialsDB.getMaterialWithName("Plexiglass")); // D = 1.95
  		po.setShape(sp);
  		add(po);
  		
  		// down
  		center = new PointND(0, 0, -100);
  		sp = new Sphere(radius, center);
  		sp.setName("High Constrast Bead");
  		po = new PhysicalObject();
  		po.setMaterial(MaterialsDB.getMaterialWithName("Plexiglass")); // D = 1.95
  		po.setShape(sp);
  		add(po);
  		
  		// up
  		center = new PointND(0, 0, 100);
  		sp = new Sphere(radius, center);
  		sp.setName("High Constrast Bead");
  		po = new PhysicalObject();
  		po.setMaterial(MaterialsDB.getMaterialWithName("Plexiglass")); // D = 1.95
  		po.setShape(sp);
  		add(po);
  		
  	}
  }
  /*
   * Copyright (C) 2010-2014 Andreas Maier
   * CONRAD is developed as an Open Source project under the GNU General Public License (GPL).
  */