content: package edu.stanford.rsl.conrad.volume3d.operations;
  
  public class CopySlabData extends ParallelVolumeOperation {
  
  	@Override
  	public void performOperation() {
  		for (int indexX=beginIndexX; indexX<endIndexX; indexX++) {
  			//System.out.println(indexX);
  			switch (vol1.getInternalDimension()) {
  			case 1:
  				if (vol2.getInternalDimension() == 1) {
  					// 1 to 1
  					if ((scalar1 == scalar2)&&(scalar1 == 0f)){
  						// Absolute Value
  						for (int indexY=0; indexY<vol1.size[1]; indexY++) {
  							for (int indexZ=0; indexZ<vol1.size[2]; indexZ++) {
  								vol1.data[indexX][indexY][indexZ] = Math.abs(vol2.data[indexX][indexY][indexZ]);
  							}
  						}
  					} else {
  						// Plain Copy
  						for (int indexY=0; indexY<vol1.size[1]; indexY++) {
  							for (int indexZ=0; indexZ<vol1.size[2]; indexZ++) {
  								vol1.data[indexX][indexY][indexZ] = vol2.data[indexX][indexY][indexZ];
  							}
  						}	
  					}
  				} else {
  					// from 2 to 1:
  					if ((scalar1 == 0f) && (scalar2 == 0f)){
  						// compute power spectrum
  						for (int indexY=0; indexY<vol1.size[1]; indexY++) {
  							for (int indexZ=0; indexZ<vol1.size[2]; indexZ++) {
  								vol1.data[indexX][indexY][indexZ] = (float) Math.sqrt(Math.pow(vol2.data[indexX][indexY][indexZ*2],2 ) + Math.pow(vol2.data[indexX][indexY][indexZ*2+1],2));
  							}
  						}
  					} else {
  						if (scalar1 != 0f) {
  							// get real part
  							for (int indexY=0; indexY<vol1.size[1]; indexY++) {
  								for (int indexZ=0; indexZ<vol1.size[2]; indexZ++) {
  									vol1.data[indexX][indexY][indexZ] = vol2.data[indexX][indexY][indexZ*2];
  								}
  							}
  						} else {
  							// get imaginary part
  							for (int indexY=0; indexY<vol1.size[1]; indexY++) {
  								for (int indexZ=0; indexZ<vol1.size[2]; indexZ++) {
  									vol1.data[indexX][indexY][indexZ] = vol2.data[indexX][indexY][indexZ*2+1];
  								}
  							}
  
  						}
  					}
  				}
  				break;
  			case 2:
  				if (vol2.getInternalDimension() == 1) {
  					// from 1 to 2
  					for (int indexY=0; indexY<vol1.size[1]; indexY++) {
  						//System.out.println(indexY);
  						for (int indexZ=0; indexZ<vol1.size[2]; indexZ++) {
  							vol1.data[indexX][indexY][indexZ*2]   = vol2.data[indexX][indexY][indexZ];
  						}
  					}
  				} else {
  					// from 2 to 2
  					for (int indexY=0; indexY<vol1.size[1]; indexY++) {
  						for (int indexZ=0; indexZ<vol1.size[2]; indexZ++) {
  							vol1.data[indexX][indexY][indexZ*2]   = vol2.data[indexX][indexY][indexZ*2];
  							vol1.data[indexX][indexY][indexZ*2+1] = vol2.data[indexX][indexY][indexZ*2+1];
  						}
  					}
  				}
  				break;
  			default:
  				System.out.println("vol_mult_sc: Invalid dimension\n");
  			}
  		}
  	}
  
  	@Override
  	public ParallelVolumeOperation clone() {
  		return new CopySlabData();
  	}
  
  }
  /*
   * Copyright (C) 2010-2014  Andreas Maier
   * CONRAD is developed as an Open Source project under the GNU General Public License (GPL).
  */