#include <tscope.h>
#define SLEN 2
#define MASK 2
#define MASK1 2
#define LP5 5
#define LP7 7
#define LPPRACT 3
#define SL5 5
#define SL7 7
#define SLPRACT 3
#define TARGET 15
#define CELLS5 (LP5*SL5*TARGET)
#define NTRIALS5 (CELLS5*MASK)
#define CELLS7 (LP7*SL7*TARGET)
#define NTRIALS7 (CELLS7)
#define CELLSPRACT (LPPRACT*SLPRACT)
#define NBLOCKPRACT 15
#define NTRIALSPRACT (CELLSPRACT*NBLOCKPRACT)
#define MAXTRIALS (NTRIALSPRACT+NTRIALS5)
struct {
int session;
int subj;
enum { FIVE, SEVEN } slen;
enum mtype { SMALL, LARGE } mask1;
int stime;
enum { PRACT, EXP } phase;
int block;
enum mtype mask;
int lpos;
int sloc;
int lnr;
int fpos;
int lloc;
int targetno;
char target;
char r;
enum { E, C } corr;
int rt, re;
} data[MAXTRIALS];
char alltargets[15] =
{ 'B', 'C', 'D', 'F', 'H', 'G', 'J', 'K', 'L', 'M', 'N', 'P', 'R', 'S',
'T'
};
void initdata()
{
int i;
for (i = 0; i < MAXTRIALS; i++) {
data[i].session = -1;
data[i].subj = -1;
data[i].slen = -1;
data[i].mask1 = -1;
data[i].stime = -1;
data[i].phase = -1;
data[i].block = -1;
data[i].mask = -1;
data[i].lpos = -1;
data[i].sloc = -1;
data[i].lnr = -1;
data[i].fpos = -1;
data[i].lloc = -1;
data[i].targetno = -1;
data[i].target = 'X';
data[i].r = 'Y';
data[i].corr = -1;
data[i].rt = -1;
data[i].re = -1;
}
}
void writedata()
{
char fname[40];
sprintf(fname, "vpl%03d.dat", data[0].session);
FILE *fp;
fp = fopen(fname, "a+");
if (fp == NULL) {
printf("error opening output file %s.\n", fname);
exit(EXIT_FAILURE);
}
int ntrials;
if (data[0].slen == FIVE)
ntrials = NTRIALSPRACT + NTRIALS5;
else
ntrials = NTRIALSPRACT + NTRIALS7;
int i;
for (i = 0; i < ntrials; i++) {
fprintf(fp, "%d ", data[i].session);
fprintf(fp, "%d ", data[i].subj);
fprintf(fp, "%d \t", data[i].slen);
fprintf(fp, "%d ", data[i].mask1);
fprintf(fp, "%d \t", data[i].stime);
fprintf(fp, "%03d ", i);
fprintf(fp, "%d ", data[i].phase);
fprintf(fp, "%d ", data[i].block);
fprintf(fp, "%d \t", data[i].mask);
fprintf(fp, "%+d ", data[i].lpos);
fprintf(fp, "%+d ", data[i].sloc);
fprintf(fp, "%d ", data[i].lnr);
fprintf(fp, "%d ", data[i].fpos);
fprintf(fp, "%+d ", data[i].lloc);
fprintf(fp, "%2d ", data[i].targetno);
fprintf(fp, "%c ", data[i].target);
fprintf(fp, "%c \t", data[i].r);
fprintf(fp, "%d ", data[i].corr);
fprintf(fp, "%d ", data[i].rt);
fprintf(fp, "%d ", data[i].re);
fprintf(fp, "\n");
}
fclose(fp);
}
#define RNDTEST 0
void randomize(int subj, int slen)
{
initdata();
int ntrials;
if (slen == FIVE)
ntrials = NTRIALSPRACT + NTRIALS5;
else
ntrials = NTRIALSPRACT + NTRIALS7;
int i, tmplist[MAXTRIALS];
if (RNDTEST) {
for (i = 0; i < NTRIALSPRACT; i++)
tmplist[i] = i % CELLSPRACT;
for (i = NTRIALSPRACT; i < ntrials; i++) {
if (slen == FIVE)
tmplist[i] = i - NTRIALSPRACT % CELLS5;
else
tmplist[i] = i - NTRIALSPRACT % CELLS7;
}
} else {
for (i = 0; i < NBLOCKPRACT; i++)
ts_rlist(CELLSPRACT, 1, &tmplist[0 + i * CELLSPRACT]);
if (slen == 5) {
ts_rlist(CELLS5, 1, &tmplist[NTRIALSPRACT]);
ts_rlist(CELLS5, 1, &tmplist[NTRIALSPRACT + CELLS5]);
} else {
ts_rlist(CELLS7, 1, &tmplist[NTRIALSPRACT]);
}
}
for (i = 0; i < ntrials; i++) {
data[i].session = slen * 100 + subj;
data[i].subj = subj;
data[i].slen = slen;
data[i].mask1 = slen % MASK;
data[i].stime = 6;
if (i < NTRIALSPRACT)
data[i].phase = PRACT;
else
data[i].phase = EXP;
if (i < NTRIALSPRACT)
data[i].block = 0;
else {
if (slen == 7)
data[i].block = 1;
if (slen == 5 && i - NTRIALSPRACT < CELLS5)
data[i].block = 1;
else
data[i].block = 2;
}
if (data[i].block < 2)
data[i].mask = data[i].mask1;
else
data[i].mask = !data[i].mask1;
if (data[i].phase == PRACT) {
data[i].lpos = (tmplist[i] % LPPRACT) - 1;
data[i].sloc = ((tmplist[i] / LPPRACT) % SLPRACT) - 1;
int t = ts_rint(TARGET);
data[i].target = alltargets[t];
} else {
if (data[i].slen == 5) {
data[i].lpos = (tmplist[i] % LP5) - 2;
data[i].sloc = ((tmplist[i] / LP5) % SL5) - 2;
data[i].lnr = data[i].lpos + 3;
data[i].fpos = -data[i].sloc + 3;
data[i].targetno = ((tmplist[i] / LP5 / SL5) % TARGET) + 1;
data[i].target = alltargets[data[i].targetno - 1];
} else {
data[i].lpos = (tmplist[i] % LP7) - 3;
data[i].sloc = ((tmplist[i] / LP7) % SL7) - 3;
data[i].lnr = data[i].lpos + 4;
data[i].fpos = -data[i].sloc + 4;
data[i].targetno = ((tmplist[i] / LP7 / SL7) % TARGET) + 1;
data[i].target = alltargets[data[i].targetno - 1];
}
}
data[i].lloc = data[i].lpos + data[i].sloc;
}
}
#define CONTINUE 0
#define STOP 1
int adjust_stime(int i)
{
static int same_stime = 1;
if (i % CELLSPRACT == 0 && i > 0 && i < NTRIALSPRACT) {
int j, corr = 0, new_stime;
for (j = i - 9; j < i; j++)
corr += data[i].corr;
if (corr > 6)
new_stime = data[i - 1].stime--;
if (corr < 6)
new_stime = data[i - 1].stime++;
if (new_stime > 6)
new_stime = 6;
if (new_stime < 3)
new_stime = 3;
if (new_stime == data[i - 1].stime)
same_stime++;
else
same_stime = 1;
for (j = i; j < MAXTRIALS; j++)
data[j].stime = new_stime;
}
if (same_stime >= 4)
return STOP;
else
return CONTINUE;
}
#ifndef VPL_TRIAL_C
int main()
{
randomize(0, 5);
writedata();
return 0;
}
END_OF_MAIN();
#endif