@Override public void workOnSlice(int sliceNumber) { PrioritizableScene phantomScene = phantom; if (phantom instanceof AnalyticPhantom4D) { AnalyticPhantom4D scene4D = (AnalyticPhantom4D) phantom; phantomScene = scene4D.getScene(((double) sliceNumber) / trajectory.getProjectionStackSize()); String disableAutoCenterBoolean = Configuration.getGlobalConfiguration() .getRegistryEntry(RegKeys.DISABLE_CENTERING_4DPHANTOM_PROJECTION_RENDERING); boolean disableAutoCenter = false; if (disableAutoCenterBoolean != null) { disableAutoCenter = Boolean.parseBoolean(disableAutoCenterBoolean); } Translation centerTranslation = new Translation(new SimpleVector(0, 0, 0)); if (!disableAutoCenter) { SimpleVector center = SimpleOperators.add( phantom.getMax().getAbstractVector(), phantom.getMin().getAbstractVector()) .dividedBy(2); centerTranslation = new Translation(center.negated()); } for (PhysicalObject o : phantomScene) { o.getShape().applyTransform(centerTranslation); // System.out.println(o.getShape().getMax() + " " + o.getShape().getMin()); // Translate a part of XCAT to the center of source & detector for 2D projection (e.g. knee // at the center of the 2d projection) String translationString = Configuration.getGlobalConfiguration() .getRegistryEntry(RegKeys.GLOBAL_TRANSLATION_4DPHANTOM_PROJECTION_RENDERING); if (translationString != null) { // Center b/w RKJC & LKJC: -292.6426 211.7856 440.7783 (subj 5, static60),-401.1700 // 165.9885 478.5600 (subj 2, static60) // XCAT Center by min & max: -177.73999504606988, 179.8512744259873, 312.19713254613583 // translationVector = (XCAT Center by min & max) - (Center b/w RKJC & LKJC)=> // 114.9026, -31.9343, -128.5811 (subj5), 120, 3, -110(subj2) Try 114.0568 2.4778 // -106.2550 String[] values = translationString.split(", "); SimpleVector translationVector = new SimpleVector( Double.parseDouble(values[0]), Double.parseDouble(values[1]), Double.parseDouble(values[2])); Translation translationToRotationCenter = new Translation(translationVector); o.getShape().applyTransform(translationToRotationCenter); } } // System.out.println(phantomScene.getMax() + " " + phantomScene.getMin()); } Grid2D slice = raytraceScene(phantomScene, trajectory.getProjectionMatrix(sliceNumber)); this.imageBuffer.add(slice, sliceNumber); }
public void configure(AnalyticPhantom phan, XRayDetector detector) throws Exception { this.detector = detector; this.detector.init(); phantom = phan; if (phantom.getBackgroundMaterial() == null) { Material mat = null; String materialstr = "vacuum"; mat = MaterialsDB.getMaterialWithName(materialstr); phantom.setBackground(mat); } rayTracer.setScene((PrioritizableScene) phantom); environment.setMaterial(phantom.getBackgroundMaterial()); super.configure(); }
public SliceWorker clone() { AnalyticPhantomProjectorWorker newRend = new AnalyticPhantomProjectorWorker(); newRend.phantom = phantom; newRend.detector = detector; newRend.environment.setMaterial(phantom.getBackgroundMaterial()); newRend.rayTracer.setScene((PrioritizableScene) phantom); return newRend; }
@Override public void configure() throws Exception { // We will now read this from the Configuration. The detector needs to be preconfigured! // detector = (XRayDetector) UserUtil.queryObject("Select Detector:", "Detector Selection", // XRayDetector.class); // detector.configure(); detector = Configuration.getGlobalConfiguration().getDetector(); detector.init(); phantom = UserUtil.queryPhantom("Select Phantom", "Select Phantom"); Material mat = null; do { String materialstr = UserUtil.queryString("Enter Background Medium:", "vacuum"); mat = MaterialsDB.getMaterialWithName(materialstr); } while (mat == null); phantom.setBackground(mat); phantom.configure(); rayTracer.setScene((PrioritizableScene) phantom); environment.setMaterial(phantom.getBackgroundMaterial()); super.configure(); }