@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(); }
@Override public void configure() throws Exception { slope = UserUtil.queryDouble("Enter slope of correction transformatoin", slope); // offset = UserUtil.queryDouble("Enter offset of correction transformation", offset); measureHard = UserUtil.queryDouble("Measurement of hard material [HU]", measureHard); measureSoft = UserUtil.queryDouble("Measurement of soft material [HU]", measureSoft); projectionXShift = UserUtil.queryDouble("Enter projection x shift", projectionXShift); projectionYShift = UserUtil.queryDouble("Enter projection y shift", projectionYShift); lambda0 = VolumeAttenuationFactorCorrectionTool.getLambda0(measureHard, measureSoft); lut = Configuration.getGlobalConfiguration().getBeamHardeningLookupTable(); ImagePlus[] images = ImageUtil.getAvailableImagePlusAsArray(); hardMaterial = ImageUtil.wrapImagePlus( (ImagePlus) JOptionPane.showInputDialog( null, "Select projections with hard material: ", "Select source", JOptionPane.PLAIN_MESSAGE, null, images, images[0])); configured = true; }
/** * Configures the heart simulation. Currently uses learning shapes as heart description. This will * be changed later using the HeartParameterLUT class. */ public void configure() throws Exception { // heartBase = UserUtil.queryString("Specify path to model data file.", // "C:\\Stanford\\CONRAD\\data\\CardiacModel\\"); heartBase = System.getProperty("user.dir") + "\\data\\CardiacModel\\"; heartBeats = UserUtil.queryInt("Number of heart beats in this scene:", 1); boolean rotTrans = UserUtil.queryBoolean("Apply rotatation and translation?"); if (!rotTrans) { new SimpleMatrix(); this.rot = SimpleMatrix.I_3; this.trans = new SimpleVector(3); } else { String rtfile = UserUtil.queryString( "Specify file containing rotation and translation:", heartBase + "rotTrans.txt"); RotTransIO rtinput = new RotTransIO(rtfile); this.rot = rtinput.getRotation(); this.trans = rtinput.getTranslation(); } this.max = new PointND(0, 0, 0); this.min = new PointND(0, 0, 0); // read config file for offsets etc CONRADCardiacModelConfig info = new CONRADCardiacModelConfig(heartBase); info.read(); // read the PCs of all phases ActiveShapeModel parameters = new ActiveShapeModel(heartBase + "\\CCmScores.ccm"); double[] scores; boolean predefined = UserUtil.queryBoolean("Use predefined model?"); if (predefined) { Object tobj = UserUtil.chooseObject( "Choose heart to be simulated:", "Predefined models:", PredefinedModels.getList(), PredefinedModels.getList()[0]); scores = PredefinedModels.getValue(tobj.toString()); } else { scores = UserUtil.queryArray("Specify model parameters: ", new double[parameters.numComponents]); // the scores are defined with respect to variance but we want to have them with respect to // standard deviation therefore divide by // sqrt of variance for (int i = 0; i < parameters.numComponents; i++) { scores[i] /= Math.sqrt(parameters.getEigenvalues()[i]); } } SimpleVector paramVec = parameters.getModel(scores).getPoints().getCol(0); // for all components // loop through all phases and create splines describing the motion for each vertex System.out.println("Starting model generation.\n"); System.out.println("__________________________________"); System.out.println("Calculating phantom at each phase.\n"); this.splines = new ArrayList<Mesh4D>(); for (int i = 0; i < numPhases; i++) { int start = 0; for (int j = 0; j < i; j++) { start += (j == 0) ? 0 : info.principalComp[j - 1]; } double[] param = paramVec.getSubVec(start, info.principalComp[i]).copyAsDoubleArray(); createPhantom(i, param, info, splines); } // calculate splines System.out.println("Fitting temporal splines.\n"); for (int i = 0; i < info.numAnatComp; i++) { splines.get(i).calculateSplines(); } System.out.println("__________________________________"); setConfigured(true); System.out.println("Configuration done.\n"); }