content: package edu.stanford.rsl.conrad.reconstruction;
  
  
  import edu.stanford.rsl.conrad.filtering.ImageFilteringTool;
  import edu.stanford.rsl.conrad.utils.Configuration;
  
  
  /**
   * 
   * All iterative reconstruction algorithms are based on the iterative reconstruction filter
   * The iterative reconstruction is the abstract class that describe a general outline for a
   * iterative reconstruction algorithm. It splits the geometry computation into ray-driven, 
   * distance-driven and separable footprints. The iteration methods also may be splitted into
   * ART, SART and some other model-based reconstruction.
   * @author Meng Wu
   *
   */
  
  public abstract class IterativeReconstruction extends ReconstructionFilter {
  
  
  	private static final long serialVersionUID = 1L;
  
  	
  	public abstract void iterativeReconstruct() throws Exception;
  	
  	@Override
  	protected void reconstruct() throws Exception{
  			try {
  				iterativeReconstruct();
  			} catch (Exception e){
  				System.out.println("An error occured during iterations ");
  			}
  			if (Configuration.getGlobalConfiguration().getUseHounsfieldScaling()) applyHounsfieldScaling();
  			int [] size = projectionVolume.getSize();
  			
  			for (int k = 0; k < size[2]; k++){
  				sink.process(projectionVolume.getSubGrid(k), k);
  			}
  			sink.close();
  			init = false;
  	}
  
  	@Override
  	public void configure() throws Exception {
  		// TODO Auto-generated method stub
  	}
  
  	@Override
  	public ImageFilteringTool clone() {
  		return this;
  	}
  
  	@Override
  	public boolean isDeviceDependent() {
  		return false;
  	}
  
  }
  /*
   * Copyright (C) 2010-2014 Meng Wu
   * CONRAD is developed as an Open Source project under the GNU General Public License (GPL).
  */