/* 
    File:               vpw_data.c
    Author:             michael stevens
    Experiment:          Viewing position effect (words)
                        Stevens & Grainger 2003

        Data-management and randomization

            Between:    Mask type
                        Latin Square group 5-letter words (ppn/stim)
                        Latin Square group 7-letter words (ppn/stim)

            Within:     Word length
                        Location stimulus on screen (5/7)
                        Target word (15 * length * fixation position)

            Derived variable:
                        Position fixation on word

            Measured variable:
                        Respons 

*/



// include functions from vpw_wlist.c
#define VPW_DATA_C
#include "vpw_wlist.c"

// n of levels of each variable
#define MASK        2

#define LSQ5        5
#define LSQ7        7

#define SL5         5
#define SL7         7

#define TARGET     15

// n of trials trials
#define NTRIALS5    (SL5*TARGET)
#define NTRIALS7    (SL7*TARGET)
#define NTRIALSPRACT  (20)

#define NTRIALS     (NTRIALSPRACT+NTRIALS5+NTRIALS7)

// data structure with all trial variables
struct {
    int subj;

    enum { SMALL, LARGE } mask;
    int lsq5p, lsq7p;
    enum { PRACT, EXP } fase;

    enum { five, seven } wlen;
    int lsqs;
    int sloc;                   // locatie stimulus on scherm
    int fpos;                   // fixatie postition on string
    int stimno;

    char stim[10];
    char resp[40];

    enum { E, C } corr;         // feedback
} data[NTRIALS];



void initdata()
{
    int i;
    for (i = 0; i < NTRIALS; i++) {
        data[i].subj = -1;
        data[i].mask = -1;
        data[i].lsq5p = -1;
        data[i].lsq7p = -1;
        data[i].fase = -1;
        data[i].wlen = -1;
        data[i].lsqs = -1;
        data[i].sloc = -1;
        data[i].fpos = -1;
        data[i].stimno = -1;
        data[i].stim[0] = '\0';
        data[i].resp[0] = '\0';
        data[i].corr = -1;
    }
}

// write data
void writedata()
{
    // use subject nr to determine file name
    char fname[40];
    sprintf(fname, "vpw%02d.dat", data[0].subj);

    // open file
    FILE *fp;
    fp = fopen(fname, "a+");

    if (fp == NULL) {
        printf("error opening output file %s.\n", fname);
        exit(EXIT_FAILURE);
    }
    // write data
    int i;
    for (i = 0; i < NTRIALS; i++) {

        fprintf(fp, "%d ", data[i].subj);
        fprintf(fp, "%d \t", data[i].mask);

        fprintf(fp, "%d ", data[i].lsq5p);
        fprintf(fp, "%d ", data[i].lsq7p);
        fprintf(fp, "%d \t", data[i].fase);

        fprintf(fp, "%03d ", i);
        fprintf(fp, "%d ", data[i].wlen);
        fprintf(fp, "%d ", data[i].lsqs);
        fprintf(fp, "%+d ", data[i].sloc);
        fprintf(fp, "%d ", data[i].fpos);
        fprintf(fp, "%03d ", data[i].stimno);
        fprintf(fp, "%d \t", data[i].corr);

        fprintf(fp, "%10s ", data[i].stim);
        fprintf(fp, "%s ", data[i].resp);

        fprintf(fp, "\n");
    }

    // close file
    fclose(fp);
}



#define RNDTEST 1
void randomize(int subj)
{
    initdata();

    int i, tmplist[NTRIALS];
    if (RNDTEST) {
        for (i = 0; i < NTRIALSPRACT; i++)
            tmplist[i] = i;
        for (i = NTRIALSPRACT; i < NTRIALS; i++)
            tmplist[i] = i - NTRIALSPRACT;
    } else {
        ts_rlist(NTRIALSPRACT, 1, &tmplist[0]);
        ts_rlist(NTRIALS - NTRIALSPRACT, 1, &tmplist[NTRIALSPRACT]);
    }


    for (i = 0; i < NTRIALS; i++) {
        data[i].subj = subj;
        data[i].mask = subj % MASK;
        data[i].lsq5p = (subj / MASK) % LSQ5;
        data[i].lsq7p = (subj / MASK / LSQ5) % LSQ7;

        if (i < NTRIALSPRACT)
            data[i].fase = PRACT;
        else
            data[i].fase = EXP;

        if (data[i].fase == PRACT) {
            data[i].stimno = tmplist[i];
            strcpy(data[i].stim, wpract[data[i].stimno]);
            data[i].wlen = 5;
            data[i].lsqs = 0;
            data[i].sloc = ts_rint(5) - 2;
        } else {
            if (tmplist[i] < NTRIALS5) {
                data[i].stimno = tmplist[i];
                strcpy(data[i].stim, w5[data[i].stimno]);
                data[i].wlen = 5;
                data[i].lsqs = data[i].stimno % 5;
                data[i].sloc = (data[i].lsq5p + data[i].lsqs) % 5 - 2;
                data[i].fpos = -data[i].sloc + 3;
            } else {
                data[i].stimno = tmplist[i] - NTRIALS5;
                strcpy(data[i].stim, w7[data[i].stimno]);
                data[i].wlen = 7;
                data[i].lsqs = data[i].stimno % 7;
                data[i].sloc = (data[i].lsq7p + data[i].lsqs) % 7 - 3;
                data[i].fpos = -data[i].sloc + 4;
            }
        }
    }
}


// test-function that generates 1 datafile
#ifndef VPW_TRIAL_C
int main()
{
    readwords();
    randomize(0);
    writedata();
    return 0;
}

END_OF_MAIN();
#endif                          // VPW_TRIAL_C


top
Persoonlijke pagina Universiteit GentTscope
Allegro | Cygwin | Gcc
© See license.html for copyright information