content: package edu.stanford.rsl.conrad.phantom;
  
  import edu.stanford.rsl.conrad.geometry.shapes.simple.Cylinder;
  import edu.stanford.rsl.conrad.geometry.shapes.simple.Sphere;
  import edu.stanford.rsl.conrad.geometry.transforms.Translation;
  import edu.stanford.rsl.conrad.numerics.SimpleVector;
  import edu.stanford.rsl.conrad.physics.PhysicalObject;
  import edu.stanford.rsl.conrad.physics.materials.database.MaterialsDB;
  
  /**
   * MTF phantom defined by Lars Wigstroem. The phantom is a simple elipsoid torso with two high contrast bone-like objects in it. Furthermore, there are three high-beads in the phantom that can be exploited to measure the MTF. 
   * 
   * @author akmaier
   *
   */
  public class MTFBeadPhantom extends AnalyticPhantom {
  
  	/**
  	 * 
  	 */
  	private static final long serialVersionUID = -3843719205362984060L;
  
  	@Override
  	public String getName(){
  		return "MTF Bead Phantom";
  	}
  
  	@Override
  	public String getMedlineCitation(){
  		return "Maier A, Wigström L, Hofmann H, Hornegger J, Zhu L, Strobel N, Fahrig R. Three-dimensional anisotropic adaptive filtering of projection data for noise reduction in cone beam CT. Medical Physics 38(11):5896-5909, 2011.";
  	}
  
  	@Override
  	public String getBibtexCitation(){
  		return "@article{Maier11-TAA,\n" +
  		"  number={11},\n" +
  		"  author={Andreas Maier and Lars Wigstr{\"o}m and Hannes Hofmann and Joachim Hornegger and Lei Zhu and Norbert Strobel and Rebecca Fahrig},\n" +
  		"  url={http://www5.informatik.uni-erlangen.de/Forschung/Publikationen/2011/Maier11-TAA.pdf},\n" +
  		"  doi={10.1118/1.3633901},\n" +
  		"  journal={Medical Physics},\n" +
  		"  volume={38},\n" +
  		"  title={{Three-dimensional anisotropic adaptive filtering of projection data for noise reduction in cone beam CT}},\n" +
  		"  year={2011},\n" +
  		"  pages={5896--5909}\n" +
  		"}";
  	}
  
  	/**
  	 * Construtor which creates the phnatom. Internally the simple geometric objects are created and converted into physical objects by adding material to the geometry. 
  	 */
  	public MTFBeadPhantom () {
  		// Body of the phantom.
  		Cylinder mainCylinder = new Cylinder(120, 60, 300);
  		PhysicalObject po = new PhysicalObject();
  		po.setMaterial(MaterialsDB.getMaterialWithFormula("H2O")); //D = 1
  		po.setShape(mainCylinder);
  		add(po);
  		// high contrast bone-like structures
  		Cylinder left = new Cylinder(35,20,300);
  		left.applyTransform(new Translation(new SimpleVector(-80,0,0)));
  		po = new PhysicalObject();
  		po.setMaterial(MaterialsDB.getMaterialWithName("Glass"));//D = 2.5
  		po.setShape(left);
  		add(po);
  		Cylinder right = new Cylinder(35,20,300);
  		right.applyTransform(new Translation(new SimpleVector(80,0,0)));
  		po = new PhysicalObject();
  		po.setMaterial(MaterialsDB.getMaterialWithName("Glass"));//D = 2.5
  		po.setShape(right);
  		add(po);
  		// Small spheres to measure MTF.
  		Sphere bead1 = new Sphere(0.75);
  		po = new PhysicalObject();
  		po.setMaterial(MaterialsDB.getMaterial("Al"));//D = 2.99
  		po.setShape(bead1);
  		add(po);
  		Sphere bead2 = new Sphere(0.75);
  		bead2.applyTransform(new Translation(new SimpleVector(0,40,0)));
  		po = new PhysicalObject();
  		po.setMaterial(MaterialsDB.getMaterial("Al"));
  		po.setShape(bead2);
  		add(po);
  		Sphere bead3 = new Sphere(0.75);
  		bead3.applyTransform(new Translation(new SimpleVector(0,-40,0)));
  		po = new PhysicalObject();
  		po.setMaterial(MaterialsDB.getMaterial("Al"));
  		po.setShape(bead3);
  		add(po);
  	}
  
  }
  /*
   * Copyright (C) 2010-2014 Andreas Maier
   * CONRAD is developed as an Open Source project under the GNU General Public License (GPL).
  */