private static TobiiHeader readHeader(CSVReader reader) throws IOException {
		
		TobiiHeader header = new TobiiHeader();
		
		//
		// SYSTEM PROPERTIES section
		String line[] = reader.readNext();
		assert(line[0].equalsIgnoreCase("System Properties:"));
		
		line = reader.readNext();
		assert(line[0].equalsIgnoreCase("Operating System:"));
		header.setSysOS(line[1]);
		
		line = reader.readNext();
		assert(line[0].equalsIgnoreCase("System User Name:"));
		header.setSysUser(line[1]);
		
		line = reader.readNext();
		assert(line[0].equalsIgnoreCase("Machine Name:"));
		header.setSysMachine(line[1]);
							
		//
		// DATA PROPERTIES section
		reader.readNext();
		line = reader.readNext();
		assert(line[0].equalsIgnoreCase("Data Properties:"));
		
		//
		// RECORDING section
		reader.readNext();
		line = reader.readNext();
		assert(line[0].equalsIgnoreCase("Recording name:"));
		if(!line[1].isEmpty()) {
			header.setRecName(line[1]);
		} else if(!line[2].isEmpty()) {
			header.setRecName(line[2]);	
		}
		
		// Date and Time of the recording in Tobii.  We combine these into one Date
		// Formatted as, e.g., "6/24/2011" and "11:42:32 AM"
		line = reader.readNext();
		assert(line[0].equalsIgnoreCase("Recording date:"));
		String recDateStr = line[1].trim();
		line = reader.readNext();
		assert(line[0].equalsIgnoreCase("Recording time:"));
		String recTimeStr = line[1].trim();
		
		DateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy hh:mm:ss a");
		try {
			Date recDateTime = dateFormat.parse(recDateStr + " " + recTimeStr);
			header.setRecDateTime(recDateTime);
			header.setRecDateTimestamp(recDateTime.getTime());
		} catch(ParseException e) {
			System.err.println("Had trouble parsing the date/times in a Tobii header file.  Non-fatal.");
			System.err.println("Date string: " + recDateStr + "\t\tTime string: " + recTimeStr);
		}
		
		
		// Resolution at which the Tobii experiment was recorded
		// Formatted as string, e.g., "1024 x 768"
		line = reader.readNext();
		assert(line[0].equalsIgnoreCase("Recording resolution:"));
		String[] recResolutionStr = line[1].trim().split(" ");
		int width = Double.valueOf(recResolutionStr[0]).intValue();
		int height = Double.valueOf(recResolutionStr[2]).intValue();
		header.setRecResolution(new Dimension(width, height));
		
		// Newer version of Tobii also reports screen size in millimeters;
		// older versions skip straight to the export section (added Feb. 2012)
		line = reader.readNext();
		if(line.length > 1) {
			assert(line[0].equalsIgnoreCase("Recording screen size in millimeter:"));
			String[] screenSizeStr = line[1].trim().split(" ");
			double widthMM = Double.valueOf(screenSizeStr[0]).doubleValue();
			double heightMM = Double.valueOf(screenSizeStr[2]).doubleValue();
			header.setScreenSizeMM(new Rectangle2D.Double(0,0,widthMM, heightMM));
			reader.readNext();
		}
		
		//
		// EXPORT section
		
		// Date and Time of the recording in Tobii.  We combine these into one Date
		// Formatted as, e.g., "6/24/2011" and "11:42:32 AM"
		line = reader.readNext();
		assert(line[0].equalsIgnoreCase("Export date:"));
		String exportDateStr = line[1].trim();
		line = reader.readNext();
		assert(line[0].equalsIgnoreCase("Export time:"));
		String exportTimeStr = line[1].trim();
		
		try {
			Date exportDateTime = dateFormat.parse(exportDateStr + " " + exportTimeStr);
			header.setExportDateTime(exportDateTime);
		} catch(ParseException e) {
			System.err.println("Had trouble parsing the date/times in a Tobii header file.  Non-fatal.");
			System.err.println("Date string: " + exportDateStr + "\t\tTime string: " + exportTimeStr);
		}
		
		//
		// PARTICIPANT section
		reader.readNext();
		line = reader.readNext();
		assert(line[0].equalsIgnoreCase("Participant:"));
		header.setParticipant(line[1]);
		
		return header;
	}