/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package util;
import java.util.Vector;
import java.util.Collections;
/**
*
* @author admin
*/
public class LatinSquareGenerator {
private static Vector subOrders = new Vector();
private static Vector conditions = new Vector();
private static void fillConditions(){
//create a vector of our 15 conditions, from 0-14
for (int i = 0; i<15; i++){
conditions.add(i, new Integer(i));
}
}
//make the latin square row to determine axis condition order
static private Vector getRow(int n){
Vector result = new Vector();
if (n == 1){
result.add(0,new Integer(3));
result.add(1,new Integer(4));
result.add(2,new Integer(1));
result.add(3,new Integer(5));
result.add(4,new Integer(2));
}
if (n == 2){
result.add(new Integer(5));
result.add(new Integer(1));
result.add(new Integer(2));
result.add(new Integer(4));
result.add(new Integer(3));
}
if (n == 3){
result.add(new Integer(1));
result.add(new Integer(3));
result.add(new Integer(5));
result.add(new Integer(2));
result.add(new Integer(4));
}
if (n == 4){
result.add(new Integer(4));
result.add(new Integer(2));
result.add(new Integer(3));
result.add(new Integer(1));
result.add(new Integer(5));
}
if (n == 0){
result.add(new Integer(2));
result.add(new Integer(5));
result.add(new Integer(4));
result.add(new Integer(3));
result.add(new Integer(1));
}
return result;
}
//generates a random order of the 6 possible sub-orders
private static void generateSubOrder(){
Vector temp = new Vector();
for (int i = 1; i < 7; i++){
temp.add(new Integer(i));
}
Collections.shuffle(temp);
for (int i = 0; i < temp.size(); i++){
switch (((Integer)temp.get(i)).intValue()){
case 1:
subOrders.add(new Integer(0));
subOrders.add(new Integer(1));
subOrders.add(new Integer(2));
break;
case 2:
subOrders.add(new Integer(0));
subOrders.add(new Integer(2));
subOrders.add(new Integer(1));
break;
case 3:
subOrders.add(new Integer(1));
subOrders.add(new Integer(0));
subOrders.add(new Integer(2));
break;
case 4:
subOrders.add(new Integer(1));
subOrders.add(new Integer(2));
subOrders.add(new Integer(0));
break;
case 5:
subOrders.add(new Integer(2));
subOrders.add(new Integer(0));
subOrders.add(new Integer(1));
break;
case 6:
subOrders.add(new Integer(2));
subOrders.add(new Integer(1));
subOrders.add(new Integer(0));
break;
}
}
}
//take in subject number and generate condition order for 15 conditions
static public Vector getConditionOrder(int n) {
Vector result = new Vector();
Vector numberOrder = new Vector();
fillConditions();
generateSubOrder();
numberOrder = (Vector)getRow(n%5); //gives the overall axis type order
int count = 0;
for (int i = 0; i < 5; i++){
int start = ((Integer)numberOrder.get(i)).intValue(); //tells us which axis type we are drawing from
int index = (start - 1)*3; //gets us to the appropriate spot on the read-in conditions from BasicJND config file
//get the index for .3, .6, or .9
//drawing from the random ordering generated by generateSuborder()
for (int j = 0; j < 3; j++){
int curr = ((Integer)subOrders.get(count)).intValue();
result.add(new Integer(index + curr));
count++; //move along the suborder vector
}
}
count = 0; //re-set
subOrders.clear(); //re-set
numberOrder.clear(); //re-set
return result;
}
}