package org.dawnsci.surfacescatter;
import java.util.ArrayList;
import java.util.Arrays;
import org.eclipse.january.dataset.Dataset;
import org.eclipse.january.dataset.DatasetFactory;
public class ClosestNoFinder {
public static double closestNo (double myNum, ArrayList<Double> numbers){
double distance = Math.abs(numbers.get(0) - myNum);
int idx = 0;
for(int c = 1; c < numbers.size(); c++){
double cdistance = Math.abs(numbers.get(c) - myNum);
if(cdistance < distance){
idx = c;
distance = cdistance;
}
}
return numbers.get(idx);
}
public static double closestNo (double myNum, Dataset numbers){
double distance = Math.abs(numbers.getDouble(0) - myNum);
int idx = 0;
for(int c = 1; c < numbers.getSize(); c++){
double cdistance = Math.abs(numbers.getDouble(c) - myNum);
if(cdistance < distance){
idx = c;
distance = cdistance;
}
}
return numbers.getDouble(idx);
}
public static int closestNoPos (double myNum, ArrayList<Double> numbers){
double distance = Math.abs(numbers.get(0) - myNum);
int idx = 0;
for(int c = 1; c < numbers.size(); c++){
double cdistance = Math.abs(numbers.get(c)- myNum);
if(cdistance < distance){
idx = c;
distance = cdistance;
}
}
return idx;
}
public static int closestNoPos (double myNum, Dataset numbers){
double distance = Math.abs(numbers.getDouble(0) - myNum);
int idx = 0;
for(int c = 1; c < numbers.getSize(); c++){
double cdistance = Math.abs(numbers.getDouble(c)- myNum);
if(cdistance < distance){
idx = c;
distance = cdistance;
}
}
return idx;
}
public static int closestIntegerInStack (double myNum, int noImages){
Dataset numbers = DatasetFactory.createRange(noImages, Dataset.INT);
double distance = Math.abs(numbers.getDouble(0) - myNum);
int idx = 0;
for(int c = 1; c < numbers.getSize(); c++){
double cdistance = Math.abs(numbers.getDouble(c)- myNum);
if(cdistance < distance){
idx = c;
distance = cdistance;
}
}
return idx;
}
public static int closestNoWithLocation (double myNum,
Dataset numbers,
ArrayList<double[]> locationList){
double[] test = new double[] {0,0,0,0,0,0,0,0};
double distance = Math.abs(numbers.getDouble(0) - myNum);
int idx = 0;
for(int d =0; d<numbers.getSize(); d++){
if(test.equals(Arrays.equals(locationList.get(d), test) == false) & Arrays.equals(locationList.get(d), null) == false){
idx = d;
distance = Math.abs(numbers.getDouble(0) - myNum);
break;
}
}
for(int c = 0; c < numbers.getSize(); c++){
double cdistance = Math.abs(numbers.getDouble(c)- myNum);
if((cdistance < distance) & (Arrays.equals(locationList.get(c), test) == false) & Arrays.equals(locationList.get(c), null) == false){
idx = c;
distance = cdistance;
}
}
return idx;
}
public static int closestNoWithoutDone (double myNum,
Dataset numbers,
String[] doneArray,
int[] filepathSortedArray){
String test = "done";
double distance = Math.abs(numbers.getDouble(0) - myNum);
int idx = 0;
for(int d =0; d<numbers.getSize(); d++){
if(test.equals(doneArray[filepathSortedArray[d]]) == false){
idx = d;
distance = Math.abs(numbers.getDouble(0) - myNum);
break;
}
}
for(int c = 1; c < numbers.getSize(); c++){
double cdistance = Math.abs(numbers.getDouble(c)- myNum);
if((cdistance < distance) & (test.equals(doneArray[filepathSortedArray[c]]) == false)){
idx = c;
distance = cdistance;
}
}
return idx;
}
public static boolean full (String[] stringArray, String test){
for (int u = 0; u <stringArray.length; u++){
if (test.equals(stringArray[u]) == false){
return false;
}
}
return true;
}
public static int closestNoWithDone (double myNum,
Dataset numbers,
String[] doneArray,
int[] filepathSortedArray){
String test = "done";
double distance = Math.abs(numbers.getDouble(0) - myNum);
int idx = 0;
for(int d =0; d<numbers.getSize(); d++){
if(test.equals(doneArray[filepathSortedArray[d]])){
idx = d;
distance = Math.abs(numbers.getDouble(0) - myNum);
break;
}
}
for(int c = 1; c < numbers.getSize(); c++){
double cdistance = Math.abs(numbers.getDouble(c)- myNum);
if((cdistance < distance) & (test.equals(doneArray[filepathSortedArray[c]]))){
idx = c;
distance = cdistance;
}
}
return idx;
}
}