package edu.stanford.rsl.conrad.geometry.trajectories; import java.io.IOException; import edu.stanford.rsl.conrad.data.numeric.Grid2D; import edu.stanford.rsl.conrad.data.numeric.Grid3D; import edu.stanford.rsl.conrad.geometry.Projection; import edu.stanford.rsl.conrad.io.DennerleinProjectionSource; import edu.stanford.rsl.conrad.io.ImagePlusDataSink; import edu.stanford.rsl.conrad.numerics.SimpleMatrix; /** * Class to read a projection file in Dennerlein Format. * * */ public class DennerleinProjectionTableFileTrajectory extends ConfigFileBasedTrajectory{ /** * */ private static final long serialVersionUID = -1392472185220533956L; private boolean success = false; public DennerleinProjectionTableFileTrajectory(String filename, Trajectory model) throws IOException{ super(model); readConfigFile(filename); } public DennerleinProjectionTableFileTrajectory(Trajectory model) { super(model); } public void readConfigFile(String filename) throws IOException{ DennerleinProjectionSource source = new DennerleinProjectionSource(); source.initStream(filename); ImagePlusDataSink sink = new ImagePlusDataSink(); Grid2D imp = source.getNextProjection(); try { int i =0; while (imp != null){ sink.process(imp, i); i++; imp = source.getNextProjection(); } sink.close(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } Grid3D matrices = sink.getResult(); numProjectionMatrices = matrices.getSize()[2]; this.projectionStackSize = numProjectionMatrices; projectionMatrices = new Projection[numProjectionMatrices]; secondaryAngles = new double[numProjectionMatrices]; primaryAngles = new double[numProjectionMatrices]; for (int i = 0; i<numProjectionMatrices;i++){ SimpleMatrix mat = new SimpleMatrix(3,4); for (int j =0; j <3;j++){ for(int k = 0; k < 4;k++){ mat.setElementValue(j, k, matrices.getSubGrid(i).getPixelValue(k, j)); } } projectionMatrices[i] = new Projection(mat); } updatePrimaryAngles(); } @Override public boolean getSuccess() { return success; } } /* * Copyright (C) 2010-2014 Chris Schwemmer * CONRAD is developed as an Open Source project under the GNU General Public License (GPL). */