Mercurial > hg > mep
view MelodyResults.java @ 47:be66ee2fe9fe
Added abstract class EndBlockPanel to deliver end of block messages (e.g. end of practice block).
Added and implemented EndTestPanel which gives "thank you for participating" etc message at end of test.
author | Carl Bussey <c.bussey@se10.qmul.ac.uk> |
---|---|
date | Thu, 13 Jun 2013 18:33:34 +0100 |
parents | d3977e825d91 |
children |
line wrap: on
line source
/*============================================================================= * File: MelodyResults.java * Author: Marcus Pearce <m.pearce@gold.ac.uk> * Created: <2007-02-14 11:28:27 marcusp> * Time-stamp: <2011-11-04 17:35:30 marcusp> *============================================================================= */ import java.util.ArrayList; import java.util.Iterator; import java.io.*; public class MelodyResults { /* Probe positions, subject responses and times, note onsets and IOIs */ private ArrayList probes, responses, responseTimes, questions, answers, onsets, iois, durations, pitches; private String composition; private String subjectID; /* accessors */ public String getSubjectID() { return subjectID; } public void setSubjectID(String id) { subjectID = id; } /* constructor */ public MelodyResults (String midifile, ArrayList pr, ArrayList o, ArrayList i, ArrayList d, ArrayList pi) { questions = new ArrayList(); answers = new ArrayList(); responses = new ArrayList(); responseTimes = new ArrayList(); composition = compositionName(midifile); probes = pr; onsets = o; iois = i; durations = d; pitches = pi; // Iterator oi = onsets.iterator(); // Iterator di = durations.iterator(); // Iterator ioii = iois.iterator(); // Iterator piti = pitches.iterator(); // while(oi.hasNext()) { // long onset = ((Long)oi.next()).longValue(); // long duration = ((Long)di.next()).longValue(); // long ioi = ((Long)ioii.next()).longValue(); // int pitch = ((Integer)piti.next()).intValue(); // System.out.println(onset + " " + duration + " " + ioi + " " + // pitch + " "); // } } private String compositionName(String midifile) { // assuming extension is '.mid' return midifile.substring(0, midifile.length() - 4); } /* add a reponse i and time t (nanoseconds) */ public void addResponse(int i, long t) { //if (exp.getDebug()) // System.out.println("addResponse(" + i + ", " + t + ")"); responses.add(i); responseTimes.add(t); } public int countResponses() { return responses.size(); } /* add question */ public void addQuestion(String question) { questions.add(question); } /* add response to question */ public void addAnswer(String answer) { answers.add(answer); } public void writeResults(File outputFile, boolean header, boolean append) { Writer writer = null; try { writer = new FileWriter (outputFile, append); } catch (IOException e) { System.out.println("Could not write file: " + outputFile.getPath()); return; } try { writeResults(writer, header); writer.close(); } catch (IOException e) { System.out.println (e.getMessage()); return; } } private void writeResults(Writer w, boolean header) throws IOException { Iterator oi = onsets.iterator(); Iterator di = durations.iterator(); Iterator ioii = iois.iterator(); Iterator piti = pitches.iterator(); Iterator pi = probes.iterator(); Iterator ri = responses.iterator(); Iterator rti = responseTimes.iterator(); int eventIndex = 1; if (header) writeHeader(w); String answerString = new String(""); Iterator ai = answers.iterator(); while(ai.hasNext()) answerString = answerString + (String)ai.next() + " "; while(oi.hasNext()) { long onset = ((Long)oi.next()).longValue(); long duration = ((Long)di.next()).longValue(); long ioi = ((Long)ioii.next()).longValue(); int pitch = ((Integer)piti.next()).intValue(); ProbeID p = (ProbeID)pi.next(); int probe = 0; int response = 0; long responseTime = 0; switch(p) { case NOT_PROBE: case START_CLOCK: case BEFORE_PROBE: case AFTER_PROBE: break; case PROBE: case PROBE_EX: case PROBE_UNEX: if (p == ProbeID.PROBE_UNEX) probe = 1; else if (p == ProbeID.PROBE_EX) probe = 2; else if (p == ProbeID.PROBE) probe = 1; if (ri.hasNext()) response = ((Integer)ri.next()).intValue(); if (rti.hasNext()) { responseTime = ((Long)rti.next()).longValue(); } break; default: System.out.println("Unexpected probe id: " + p); break; } w.write(subjectID + " " + composition + " " + eventIndex + " " + onset + " " + duration + " " + ioi + " " + pitch + " " + probe + " " + response + " " + responseTime + " " + answerString + "\n"); eventIndex++; } } private void writeHeader(Writer w) throws IOException { w.write("subject melody note " + "onset duration ioi pitch " + "probe response time"); Iterator qi = questions.iterator(); while(qi.hasNext()) w.write(" " + (String)qi.next()); w.write("\n"); } }