package edu.stanford.rsl.conrad.phantom; import edu.stanford.rsl.conrad.geometry.shapes.simple.Cylinder; 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.jpop.utils.UserUtil; public class SinoPhantom extends AnalyticPhantom { /** * */ private static final long serialVersionUID = 4301675158282413757L; private double cylRadius = 100.; private double cylHeight = 200.; private int numberOfBeads = 21; private double beadRadius = 2.; @Override public String getBibtexCitation() { // TODO Auto-generated method stub return null; } @Override public String getMedlineCitation() { // TODO Auto-generated method stub return null; } @Override public String getName() { return "Sino Phantom"; } @Override public void configure() { try { cylHeight = UserUtil.queryDouble("Cylinder height", cylHeight); cylRadius = UserUtil.queryDouble("Cylinder radius", cylRadius); beadRadius = UserUtil.queryDouble("Bead radius", beadRadius); numberOfBeads = UserUtil.queryInt("Number of beads", numberOfBeads); buildPhantom(); } catch (Exception e) { // TODO: handle exception } } private void buildPhantom() { Cylinder shape = new Cylinder(cylRadius, cylRadius, cylHeight); PhysicalObject po = new PhysicalObject(); po.setMaterial(MaterialsDB.getMaterialWithName("Plexiglass")); po.setShape(shape); add(po); for (double phi = 0.; phi < Math.PI; phi += (2 * Math.PI / numberOfBeads)) { double z = (phi * cylHeight) / (2 * Math.PI); double y = Math.sin(phi) * cylRadius; double x = Math.cos(phi) * cylRadius; Sphere sp1 = new Sphere(beadRadius, new PointND(x, y, z)); po = new PhysicalObject(); po.setMaterial(MaterialsDB.getMaterial("PWO")); po.setShape(sp1); add(po); Sphere sp2 = new Sphere(beadRadius, new PointND(x, -y, -z)); po = new PhysicalObject(); po.setMaterial(MaterialsDB.getMaterial("PWO")); po.setShape(sp2); add(po); // Sphere sp3 = new Sphere(beadRadius, new PointND(y, 0, z)); // po = new PhysicalObject(); // po.setMaterial(MaterialsDB.getMaterial("PWO")); // po.setShape(sp3); // add(po); // // Sphere sp4 = new Sphere(beadRadius, new PointND(-y, 0, -z)); // po = new PhysicalObject(); // po.setMaterial(MaterialsDB.getMaterial("PWO")); // po.setShape(sp4); // add(po); } } }