/* * 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; } }