diff --git a/src/main/scala/org/xcit/nback/generators/EvenSequenceGenerator.scala b/src/main/scala/org/xcit/nback/generators/EvenSequenceGenerator.scala index ac80cd7..021ea42 100644 --- a/src/main/scala/org/xcit/nback/generators/EvenSequenceGenerator.scala +++ b/src/main/scala/org/xcit/nback/generators/EvenSequenceGenerator.scala @@ -13,13 +13,13 @@ */ class EvenSequenceGenerator(alphabet: String = "BCDEFGJKLMNQRSQVWXYZ", target: Char = 'A') extends SequenceGenerator { /** - * Generate the actual sequence as a string, takes only the length of desired sequence - * @param length number of items in n-back sequence. - * @return string of size "length" with random alphanumeric characters. + * Generate the actual sequence as a string, takes only the length of desired sequence (num of trials) + * @param trials number of items in n-back sequence. + * @return string of size "trials" with random alphanumeric characters. */ - override def generate(length: Int = 8): String = { + override def generate(trials: Int = 64): String = { var results = mutable.ListBuffer[String]() - val items = List.range(0, length) + val items = List.range(0, trials) // decide if target or non-target with 50/50 chance. //TODO change probability according to a new class param diff --git a/src/main/scala/org/xcit/nback/generators/EvenSequenceGenerator.scala b/src/main/scala/org/xcit/nback/generators/EvenSequenceGenerator.scala index ac80cd7..021ea42 100644 --- a/src/main/scala/org/xcit/nback/generators/EvenSequenceGenerator.scala +++ b/src/main/scala/org/xcit/nback/generators/EvenSequenceGenerator.scala @@ -13,13 +13,13 @@ */ class EvenSequenceGenerator(alphabet: String = "BCDEFGJKLMNQRSQVWXYZ", target: Char = 'A') extends SequenceGenerator { /** - * Generate the actual sequence as a string, takes only the length of desired sequence - * @param length number of items in n-back sequence. - * @return string of size "length" with random alphanumeric characters. + * Generate the actual sequence as a string, takes only the length of desired sequence (num of trials) + * @param trials number of items in n-back sequence. + * @return string of size "trials" with random alphanumeric characters. */ - override def generate(length: Int = 8): String = { + override def generate(trials: Int = 64): String = { var results = mutable.ListBuffer[String]() - val items = List.range(0, length) + val items = List.range(0, trials) // decide if target or non-target with 50/50 chance. //TODO change probability according to a new class param diff --git a/src/main/scala/org/xcit/nback/generators/RandomSequenceGenerator.scala b/src/main/scala/org/xcit/nback/generators/RandomSequenceGenerator.scala index bcef1e2..8488984 100644 --- a/src/main/scala/org/xcit/nback/generators/RandomSequenceGenerator.scala +++ b/src/main/scala/org/xcit/nback/generators/RandomSequenceGenerator.scala @@ -2,14 +2,14 @@ import scala.util.Random -class RandomSequenceGenerator(n: Int) extends SequenceGenerator { +class RandomSequenceGenerator(N: Int) extends SequenceGenerator { /** * Generate simple alphanumeric string of size N * - * @param length number of items in n-back sequence. - * @return string of size "length" with random alphanumeric characters. + * @param trials number of items in n-back sequence. + * @return string of size "trials" with random alphanumeric characters. */ - override def generate(length: Int = 0): String = { - Random.alphanumeric.take(length).mkString("") + override def generate(trials: Int = 0): String = { + Random.alphanumeric.take(trials).mkString("") } } diff --git a/src/main/scala/org/xcit/nback/generators/EvenSequenceGenerator.scala b/src/main/scala/org/xcit/nback/generators/EvenSequenceGenerator.scala index ac80cd7..021ea42 100644 --- a/src/main/scala/org/xcit/nback/generators/EvenSequenceGenerator.scala +++ b/src/main/scala/org/xcit/nback/generators/EvenSequenceGenerator.scala @@ -13,13 +13,13 @@ */ class EvenSequenceGenerator(alphabet: String = "BCDEFGJKLMNQRSQVWXYZ", target: Char = 'A') extends SequenceGenerator { /** - * Generate the actual sequence as a string, takes only the length of desired sequence - * @param length number of items in n-back sequence. - * @return string of size "length" with random alphanumeric characters. + * Generate the actual sequence as a string, takes only the length of desired sequence (num of trials) + * @param trials number of items in n-back sequence. + * @return string of size "trials" with random alphanumeric characters. */ - override def generate(length: Int = 8): String = { + override def generate(trials: Int = 64): String = { var results = mutable.ListBuffer[String]() - val items = List.range(0, length) + val items = List.range(0, trials) // decide if target or non-target with 50/50 chance. //TODO change probability according to a new class param diff --git a/src/main/scala/org/xcit/nback/generators/RandomSequenceGenerator.scala b/src/main/scala/org/xcit/nback/generators/RandomSequenceGenerator.scala index bcef1e2..8488984 100644 --- a/src/main/scala/org/xcit/nback/generators/RandomSequenceGenerator.scala +++ b/src/main/scala/org/xcit/nback/generators/RandomSequenceGenerator.scala @@ -2,14 +2,14 @@ import scala.util.Random -class RandomSequenceGenerator(n: Int) extends SequenceGenerator { +class RandomSequenceGenerator(N: Int) extends SequenceGenerator { /** * Generate simple alphanumeric string of size N * - * @param length number of items in n-back sequence. - * @return string of size "length" with random alphanumeric characters. + * @param trials number of items in n-back sequence. + * @return string of size "trials" with random alphanumeric characters. */ - override def generate(length: Int = 0): String = { - Random.alphanumeric.take(length).mkString("") + override def generate(trials: Int = 0): String = { + Random.alphanumeric.take(trials).mkString("") } } diff --git a/src/main/scala/org/xcit/nback/generators/SequenceGenerator.scala b/src/main/scala/org/xcit/nback/generators/SequenceGenerator.scala index 74ad01c..9cb0604 100644 --- a/src/main/scala/org/xcit/nback/generators/SequenceGenerator.scala +++ b/src/main/scala/org/xcit/nback/generators/SequenceGenerator.scala @@ -9,8 +9,9 @@ * */ object SequenceGenerator { - def random(n: Int = 3, length: Int = 0): String = new RandomSequenceGenerator(n).generate(length) - def even(n: Int = 3, length: Int = 0, alphabet: String = "", target: Char): String = new EvenSequenceGenerator().generate(length) + def random(N: Int = 3, trials: Int = 0): String = new RandomSequenceGenerator(N).generate(trials) + def even(N: Int = 3, trials: Int = 0, alphabet: String = "bcdg", target: Char = 'a'): String = new EvenSequenceGenerator().generate(trials) + def skewed() = new SkewedSequenceGenerator(T = 24, D = 32, L1 = 4, L2 = 4).generate(64) } /** @@ -20,8 +21,8 @@ /** * Generate simple alphanumeric string of size N - * @param length number of items in n-back sequence. - * @return string of size "length" with random alphanumeric characters. + * @param trials number of items in n-back sequence. + * @return string of size "trials" with random alphanumeric characters. */ - def generate(length: Int = 0): String + def generate(trials: Int = 0): String } diff --git a/src/main/scala/org/xcit/nback/generators/EvenSequenceGenerator.scala b/src/main/scala/org/xcit/nback/generators/EvenSequenceGenerator.scala index ac80cd7..021ea42 100644 --- a/src/main/scala/org/xcit/nback/generators/EvenSequenceGenerator.scala +++ b/src/main/scala/org/xcit/nback/generators/EvenSequenceGenerator.scala @@ -13,13 +13,13 @@ */ class EvenSequenceGenerator(alphabet: String = "BCDEFGJKLMNQRSQVWXYZ", target: Char = 'A') extends SequenceGenerator { /** - * Generate the actual sequence as a string, takes only the length of desired sequence - * @param length number of items in n-back sequence. - * @return string of size "length" with random alphanumeric characters. + * Generate the actual sequence as a string, takes only the length of desired sequence (num of trials) + * @param trials number of items in n-back sequence. + * @return string of size "trials" with random alphanumeric characters. */ - override def generate(length: Int = 8): String = { + override def generate(trials: Int = 64): String = { var results = mutable.ListBuffer[String]() - val items = List.range(0, length) + val items = List.range(0, trials) // decide if target or non-target with 50/50 chance. //TODO change probability according to a new class param diff --git a/src/main/scala/org/xcit/nback/generators/RandomSequenceGenerator.scala b/src/main/scala/org/xcit/nback/generators/RandomSequenceGenerator.scala index bcef1e2..8488984 100644 --- a/src/main/scala/org/xcit/nback/generators/RandomSequenceGenerator.scala +++ b/src/main/scala/org/xcit/nback/generators/RandomSequenceGenerator.scala @@ -2,14 +2,14 @@ import scala.util.Random -class RandomSequenceGenerator(n: Int) extends SequenceGenerator { +class RandomSequenceGenerator(N: Int) extends SequenceGenerator { /** * Generate simple alphanumeric string of size N * - * @param length number of items in n-back sequence. - * @return string of size "length" with random alphanumeric characters. + * @param trials number of items in n-back sequence. + * @return string of size "trials" with random alphanumeric characters. */ - override def generate(length: Int = 0): String = { - Random.alphanumeric.take(length).mkString("") + override def generate(trials: Int = 0): String = { + Random.alphanumeric.take(trials).mkString("") } } diff --git a/src/main/scala/org/xcit/nback/generators/SequenceGenerator.scala b/src/main/scala/org/xcit/nback/generators/SequenceGenerator.scala index 74ad01c..9cb0604 100644 --- a/src/main/scala/org/xcit/nback/generators/SequenceGenerator.scala +++ b/src/main/scala/org/xcit/nback/generators/SequenceGenerator.scala @@ -9,8 +9,9 @@ * */ object SequenceGenerator { - def random(n: Int = 3, length: Int = 0): String = new RandomSequenceGenerator(n).generate(length) - def even(n: Int = 3, length: Int = 0, alphabet: String = "", target: Char): String = new EvenSequenceGenerator().generate(length) + def random(N: Int = 3, trials: Int = 0): String = new RandomSequenceGenerator(N).generate(trials) + def even(N: Int = 3, trials: Int = 0, alphabet: String = "bcdg", target: Char = 'a'): String = new EvenSequenceGenerator().generate(trials) + def skewed() = new SkewedSequenceGenerator(T = 24, D = 32, L1 = 4, L2 = 4).generate(64) } /** @@ -20,8 +21,8 @@ /** * Generate simple alphanumeric string of size N - * @param length number of items in n-back sequence. - * @return string of size "length" with random alphanumeric characters. + * @param trials number of items in n-back sequence. + * @return string of size "trials" with random alphanumeric characters. */ - def generate(length: Int = 0): String + def generate(trials: Int = 0): String } diff --git a/src/main/scala/org/xcit/nback/generators/SkewedSequenceGenerator.scala b/src/main/scala/org/xcit/nback/generators/SkewedSequenceGenerator.scala index 627109f..6e82300 100644 --- a/src/main/scala/org/xcit/nback/generators/SkewedSequenceGenerator.scala +++ b/src/main/scala/org/xcit/nback/generators/SkewedSequenceGenerator.scala @@ -1,5 +1,34 @@ package org.xcit.nback.generators -class SkewedSequenceGenerator { +/** + * Reference: Ralph2014 - Appendix A + * @param alphabet Alphabet used to generate the sequence, excluding the target item + * @param target Target character. + * @param N The set size of stimuli to remember (n in n-back). Default is 3. + * @param T Probability of matching target in a trial (from 0 to 100). + * @param D Probability of showing a non-matching distractor in a trial (from 0 to 100). + * @param L1 Probability of showing a matching item with n-1 item (pre-trial match), in a trial (from 0 to 100). + * @param L2 Probability of showing a matching item with n+1 item (post-trial match) in a trial (from 0 to 100). + * @param trials Number of trials (length of the generated string). + */ +class SkewedSequenceGenerator( + alphabet: String = "ABCDEFGH", + target: Char = 'A', + N: Int = 3, + T: Double = 24, + D: Double = 32, + L1: Double = 4, + L2: Double = 4) + extends SequenceGenerator { + private class TrialType extends Enumeration { + //TODO Types: LURE1, LURE2, TARGET, DISTRACTOR + } + override def generate(trials: Int): String = { + //1. Init alphabet and buffer + //2. For each trial, generate a random type + //3. Based on the generated type, generate the item and append it to the buffer + //4. Convert buffer to string and return it as result + ??? + } }