package edu.stanford.rsl.conrad.calibration.crossratios; import ij.IJ; import ij.ImagePlus; import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import com.jogamp.opencl.CLContext; import com.jogamp.opencl.CLDevice; import edu.stanford.rsl.conrad.data.numeric.Grid3D; import edu.stanford.rsl.conrad.geometry.shapes.simple.PointND; import edu.stanford.rsl.conrad.geometry.shapes.simple.Sphere; import edu.stanford.rsl.conrad.opencl.OpenCLProjectionPhantomRenderer; import edu.stanford.rsl.conrad.opencl.OpenCLUtil; import edu.stanford.rsl.conrad.phantom.AnalyticPhantom; import edu.stanford.rsl.conrad.phantom.renderer.PhantomRenderer; import edu.stanford.rsl.conrad.physics.PhysicalObject; import edu.stanford.rsl.conrad.physics.materials.database.MaterialsDB; import edu.stanford.rsl.conrad.utils.CONRAD; import edu.stanford.rsl.conrad.utils.Configuration; import edu.stanford.rsl.conrad.utils.ImageUtil; public class CreateProjectionData { public static void main(String[] args) { // read phantom definition AnalyticPhantom objects = new AnalyticPhantom() { /** * */ private static final long serialVersionUID = 3622828209730135558L; @Override public String getMedlineCitation() { return CONRAD.CONRADMedline; } @Override public String getBibtexCitation() { // TODO Auto-generated method stub return CONRAD.CONRADBibtex; } @Override public String getName() { return "Cross Ratio Phantom"; } }; try { @SuppressWarnings("resource") BufferedReader reader = new BufferedReader(new FileReader(args[0])); String line = reader.readLine(); while (line != null){ String [] numbers = line.split(";"); double x = Double.parseDouble(numbers[0]); double y = Double.parseDouble(numbers[1]); double z = Double.parseDouble(numbers[2]); double radius = Double.parseDouble(numbers[3]); Sphere sp = new Sphere(radius, new PointND(x,y,z)); PhysicalObject po = new PhysicalObject(); po.setNameString("Bead " + objects.size()); po.setShape(sp); po.setMaterial(MaterialsDB.getMaterial("tungsten")); objects.add(po); line = reader.readLine(); }; } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } // create projection data Configuration.loadConfiguration(); long time = System.currentTimeMillis(); OpenCLProjectionPhantomRenderer render = new OpenCLProjectionPhantomRenderer(); ImagePlus image = null; try { CLContext context = OpenCLUtil.createContext(); CLDevice device = context.getMaxFlopsDevice(); render.configure(objects, context, device, true); Grid3D result = PhantomRenderer.generateProjections(render); image = ImageUtil.wrapGrid3D(result, objects.toString()); time = System.currentTimeMillis() - time; System.out.println("Runtime: " + time/1000.0 + " s"); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } // write to disk if (image != null){ IJ.save(image, args[1]); } } }