annotate MelodyResults.java @ 10:3dd7636ca811

Add facility for printing out debugging info. Ignore-this: 8073cadd49dcc4a7e7cc81dd25f90e89
author Marcus Pearce <m.pearce@gold.ac.uk>
date Fri, 04 Nov 2011 17:44:38 +0000
parents 1fe7ac28a3ca
children 84d943797cf2
rev   line source
m@0 1 /*=============================================================================
m@0 2 * File: MelodyResults.java
m@0 3 * Author: Marcus Pearce <m.pearce@gold.ac.uk>
m@0 4 * Created: <2007-02-14 11:28:27 marcusp>
m@10 5 * Time-stamp: <2011-11-04 17:35:30 marcusp>
m@0 6 *=============================================================================
m@0 7 */
m@0 8
m@0 9 import java.util.ArrayList;
m@0 10 import java.util.Iterator;
m@0 11 import java.io.*;
m@0 12
m@0 13 public class MelodyResults {
m@0 14
m@0 15 /* Probe positions, subject responses and times, note onsets and IOIs */
m@0 16 private ArrayList probes, responses, responseTimes, questions, answers,
m@0 17 onsets, iois, durations, pitches;
m@0 18 private String composition;
m@0 19 private int subjectID;
m@0 20
m@0 21 /* accessors */
m@0 22 public int getSubjectID() { return subjectID; }
m@0 23 public void setSubjectID(int id) { subjectID = id; }
m@0 24
m@0 25 /* constructor */
m@0 26 public MelodyResults (String midifile, ArrayList pr, ArrayList o,
m@0 27 ArrayList i, ArrayList d, ArrayList pi) {
m@0 28 questions = new ArrayList();
m@0 29 answers = new ArrayList();
m@0 30 responses = new ArrayList();
m@0 31 responseTimes = new ArrayList();
m@0 32 composition = compositionName(midifile);
m@0 33 probes = pr;
m@0 34 onsets = o;
m@0 35 iois = i;
m@0 36 durations = d;
m@0 37 pitches = pi;
m@0 38
m@0 39 // Iterator oi = onsets.iterator();
m@0 40 // Iterator di = durations.iterator();
m@0 41 // Iterator ioii = iois.iterator();
m@0 42 // Iterator piti = pitches.iterator();
m@0 43 // while(oi.hasNext()) {
m@0 44 // long onset = ((Long)oi.next()).longValue();
m@0 45 // long duration = ((Long)di.next()).longValue();
m@0 46 // long ioi = ((Long)ioii.next()).longValue();
m@0 47 // int pitch = ((Integer)piti.next()).intValue();
m@0 48 // System.out.println(onset + " " + duration + " " + ioi + " " +
m@0 49 // pitch + " ");
m@0 50 // }
m@0 51 }
m@0 52
m@0 53 private String compositionName(String midifile) {
m@0 54 // assuming extension is '.mid'
m@0 55 return midifile.substring(0, midifile.length() - 4);
m@0 56 }
m@0 57
m@0 58 /* add a reponse i and time t (nanoseconds) */
m@0 59 public void addResponse(int i, long t) {
m@10 60 //if (exp.getDebug())
m@10 61 // System.out.println("addResponse(" + i + ", " + t + ")");
m@0 62 responses.add(i);
m@0 63 responseTimes.add(t);
m@0 64 }
m@0 65
m@0 66 /* add question */
m@0 67 public void addQuestion(String question) {
m@0 68 questions.add(question);
m@0 69 }
m@0 70
m@0 71 /* add response to question */
m@0 72 public void addAnswer(String answer) {
m@0 73 answers.add(answer);
m@0 74 }
m@0 75
m@2 76 public void writeResults(File outputFile, boolean header, boolean append) {
m@0 77 Writer writer = null;
m@0 78 try {
m@2 79 writer = new FileWriter (outputFile, append);
m@0 80 } catch (IOException e) {
m@0 81 System.out.println("Could not write file: " + outputFile.getPath());
m@0 82 return;
m@0 83 }
m@0 84
m@0 85 try {
m@0 86 writeResults(writer, header);
m@0 87 writer.close();
m@0 88 } catch (IOException e) {
m@0 89 System.out.println (e.getMessage());
m@0 90 return;
m@0 91 }
m@0 92 }
m@0 93
m@0 94 private void writeResults(Writer w, boolean header) throws IOException {
m@0 95 Iterator oi = onsets.iterator();
m@0 96 Iterator di = durations.iterator();
m@0 97 Iterator ioii = iois.iterator();
m@0 98 Iterator piti = pitches.iterator();
m@0 99
m@0 100 Iterator pi = probes.iterator();
m@0 101 Iterator ri = responses.iterator();
m@0 102 Iterator rti = responseTimes.iterator();
m@0 103 int eventIndex = 1;
m@0 104
m@0 105 if (header)
m@0 106 writeHeader(w);
m@0 107
m@0 108 String answerString = new String("");
m@0 109 Iterator ai = answers.iterator();
m@0 110 while(ai.hasNext())
m@0 111 answerString = answerString + (String)ai.next() + " ";
m@0 112
m@0 113 while(oi.hasNext()) {
m@0 114 long onset = ((Long)oi.next()).longValue();
m@0 115 long duration = ((Long)di.next()).longValue();
m@0 116 long ioi = ((Long)ioii.next()).longValue();
m@0 117 int pitch = ((Integer)piti.next()).intValue();
m@0 118
m@0 119 ProbeID p = (ProbeID)pi.next();
m@0 120
m@0 121 int probe = 0;
m@0 122 int response = 0;
m@0 123 long responseTime = 0;
m@0 124
m@0 125 switch(p) {
m@0 126 case NOT_PROBE:
m@0 127 case START_CLOCK:
m@0 128 case BEFORE_PROBE:
m@0 129 case AFTER_PROBE:
m@0 130 break;
m@0 131 case PROBE:
m@0 132 case PROBE_EX:
m@0 133 case PROBE_UNEX:
m@0 134 if (p == ProbeID.PROBE_UNEX)
m@0 135 probe = 1;
m@0 136 else if (p == ProbeID.PROBE_EX)
m@0 137 probe = 2;
m@0 138 else if (p == ProbeID.PROBE)
m@0 139 probe = 1;
m@0 140
m@0 141 if (ri.hasNext())
m@0 142 response = ((Integer)ri.next()).intValue();
m@0 143 if (rti.hasNext()) {
m@0 144 responseTime = ((Long)rti.next()).longValue();
m@0 145 }
m@0 146 break;
m@0 147 default:
m@0 148 System.out.println("Unexpected probe id: " + p);
m@0 149 break;
m@0 150 }
m@0 151 w.write(subjectID + " " + composition + " " +
m@0 152 eventIndex + " " +
m@0 153 onset + " " + duration + " " + ioi + " " +
m@0 154 pitch + " " +
m@0 155 probe + " " + response + " " + responseTime + " " +
m@0 156 answerString + "\n");
m@0 157 eventIndex++;
m@0 158 }
m@0 159 }
m@0 160
m@0 161 private void writeHeader(Writer w) throws IOException {
m@0 162 w.write("subject melody note " +
m@0 163 "onset duration ioi pitch " +
m@0 164 "probe response time");
m@0 165 Iterator qi = questions.iterator();
m@0 166 while(qi.hasNext())
m@0 167 w.write(" " + (String)qi.next());
m@0 168 w.write("\n");
m@0 169 }
m@0 170 }