content: package edu.stanford.rsl.conrad.geometry.trajectories;
  
  import edu.stanford.rsl.conrad.geometry.Projection;
  import edu.stanford.rsl.conrad.utils.Configuration;
  
  
  public class MultiSweepTrajectory extends
  Trajectory {
  
  	/**
  	 * 
  	 */
  	private static final long serialVersionUID = 800597336777372574L;
  	
  	public MultiSweepTrajectory(Trajectory geometry) {
  		super(geometry);
  	}
  
  
  	public void extrapolateProjectionGeometry(){
  		int numSweeps = Configuration.getGlobalConfiguration().getNumSweeps();
  		if (numSweeps > 1) { 
  			int newProjectionNumber = numProjectionMatrices * numSweeps;
  			Projection [] newMatrices = new Projection[newProjectionNumber];
  			double [] newAngles = new double[newProjectionNumber];
  
  			// Sweeps go now backward then forward ...
  			for (int sweep = 0; sweep < numSweeps; sweep++) {
  				int index = sweep * numProjectionMatrices;
  				boolean forward = (sweep % 2 == 0);
  				for (int i = 0; i < numProjectionMatrices; i++){
  					if (forward) {
  						newMatrices[index + i] = projectionMatrices[i];
  						newAngles[index + i] = primaryAngles[i];
  					} else { // backward
  						newMatrices[index + numProjectionMatrices - i -1] = projectionMatrices[i];
  						newAngles[index + numProjectionMatrices - i -1] = primaryAngles[i];
  					}
  				}	
  			}
  			projectionMatrices = newMatrices;
  			numProjectionMatrices = newProjectionNumber;
  			primaryAngles = newAngles;
  		}
  	}
  
  	public static int getImageIndexInSingleSweepGeometry(int index){
  		Configuration config =  Configuration.getGlobalConfiguration();
  		int revan = index;
  		if (config.getNumSweeps() > 1){
  			int numProjectionMatrices = config.getGeometry().getNumProjectionMatrices();
  			int numProjectionsPerSweep = numProjectionMatrices / config.getNumSweeps();
  			int sweep = index / numProjectionsPerSweep;
  			boolean forward = (sweep % 2 == 0);
  			revan = index - (sweep * numProjectionsPerSweep);
  			if (!forward) {
  				revan = numProjectionsPerSweep - index - 1;
  			} 
  		}
  		return revan;
  	}
  
  }
  /*
   * Copyright (C) 2010-2014 Andreas Maier
   * CONRAD is developed as an Open Source project under the GNU General Public License (GPL).
  */