content: package edu.stanford.rsl.conrad.volume3d.operations;
  
  public class FFTShifter extends ParallelVolumeOperation {
  
  	@Override
  	public void performOperation() {
  		float [] tmp_buffer = new float[vol.getInternalDimension()];
  		
  		for (int indexX=beginIndexX; indexX<endIndexX; indexX++) {
  			for (int indexY=0; indexY<vol.size[1]; indexY++) {
  				for (int indexZ=0; indexZ<vol.size[2]/2; indexZ++) {
  					int newX = (indexX + vol.size[0]/2) % vol.size[0];
  					int newY = (indexY + vol.size[1]/2) % vol.size[1];
  					int newZ = (indexZ + vol.size[2]/2) % vol.size[2];
  					int in_dim = vol.getInternalDimension();
  					for(int i=0;i<in_dim;i++){
  						tmp_buffer[i]=vol.data[indexX][indexY][indexZ*in_dim+i];
  					}
  					for(int i=0;i<in_dim;i++){
  						vol.data[indexX][indexY][indexZ*in_dim+i] = vol.data[newX][newY][newZ*in_dim+i];
  					}
  					for(int i=0;i<in_dim;i++){
  						vol.data[newX][newY][newZ*in_dim+i] = tmp_buffer[i];
  					}
  				}
  			}
  		}
  
  	}
  
  	@Override
  	public ParallelVolumeOperation clone() {
  		return new FFTShifter();
  	}
  
  }
  /*
   * Copyright (C) 2010-2014  Andreas Maier
   * CONRAD is developed as an Open Source project under the GNU General Public License (GPL).
  */