This is a list of the main development projects I developed for research and teaching. These are based on the PC; prior to 1993, I wrote programs for the BBC microcomputer.
Since 2005, most of the programs I have written are for data analysis and for computer administration. Since 2008, I have developed a particular interest in bulk-processing large data sets. The dates generally refer to the first release; nearly all these programs are still available but some require special hardware that is no longer supported.
A C++/OpenGL program to present an animated task where participants use a mouse to touch some moving symbols whilst avoiding others. At certain intervals, the participant is asked to rate their feeling of self agency and of performance. Based on papers by Janet Metcalfe.
A C++/OpenGL program to present participants with a visual search task where they have to identify the left/right orientation of an arrow symbol presented alongside up/down distractor arrows. Reaction time was measured with a standard keyboard. Based on papers by Andrea Tales.
A C++/OpenGL program to present pictures of people's faces as they express different emotions. The task is to identify the particular emotion as quickly as possible. Decision time is measured with a simple key press.
An online form for staff to compile applications and proposals from PhD applicants.
An adaptation, in Java, of the GO:NO-GO (Stop signal) task published by Dr. Gijsbert Stoet as part of his PsyToolkit.
A C++ program that reads Polar HRM files (RR mode, or regular samples) and computes time-domain and frequency-domain (FFT) properties for windows of arbitrary width. Resampling done with a cubic spline interpolation.
A set of ASP pages with an Access database to simplify the entry and management of student examination and project marks.
A set of Perl scripts that produce a list of words, and the frequency with which they appear from chatroom dialogues.
A VBScript script to prepare the data, and a gnuplot plot-script for calculating and plotting the best-fit hyperbolic function, for temporal cash discounting.
Small utility written in C# that converts values in tab-separated text files from HH:MM:SS, HH:MM, and MM:SS to an integer number of seconds. Useful for preprocessing time data for gnuplot.
VBScript and .BAT scripts to count the number of responses made to Gary Freegard's Vigilance program. Counts valid responses and performs some data validation on comma-separated values.
A VB2010 program for presenting questionnaires on a computer, designed specially to ease the entry of questions. Basically a non-networked version of WebQuest (see below).
A suite of programs, one VB2010 program for listing the X,Y coordinates of an eye-tracker's target in each frame of an AVI video, and some VBScript and .BAT scripts for converting the interest-area coordinates (which were recorded in tab-separated values using one resolution) to gaze-movement coordinates (which were recorded in excel format using a different resolution), and identifying the appropriate interest-area.
A MATLAB script that attempts to calculate a simple, objective, measure of an image's complexity, along with a Perl script for arranging the results into a presentable HTML document.
VB 2008 (.NET) program to display a contrast grating for the purposes of demonstrating that visual adaptation to a grating is specific to the grating's physical properties. Allows adjustment of contrast, frequency and orientation (tilt).
A VBScript script and gnuplot plot-script for analysing the real-time weight of a meal into rates of consumption and satiety.
Two scripts written in Visual Basic Scripting Edition. Each reads its own raw-data files (one file per subject, where each file contains trials in rows and variables in columns). Then removes header (comment) lines and unused columns. Each writes its output to a single file containing one subject per line.
A script written in Visual Basic Scripting Edition. This reads a tab-separated ASCII file exported from BESA and selects a (time) portion of the data specified by the user. It then calculates the mean, maximum and minimum values for each electrode over that time portion and writes the results to a tab-separated file.
A Visual Basic Scripting Edition script that reads a tab-separated text file and converts rows to columns. Writes output to standard output (the screen), which can easily be redirected into a file.
An AWK script that 'repairs' survey results collected using checkbox answers (allowing multiple choices to be made), where Likert scale answers (where only one choice can be made) should have been used.
A project to speed up the performance of a MATLAB script published on MathWorks' File Exchange, and used for EEG analysis. Its speed was effectively doubled.
A Visual Basic Scripting Edition Script that scans the department's IP subnet looking for machines that are improperly registered. It does this by attempting to match the hostname for each entry in the IP database with the NetBios hostname, and attempting to ping the machine. Reports any mismatches in hostname or online status.
A Visual Basic Scripting Edition script that reads Windows' Security event log and writes important events to a tab-separated plain text file. This script runs automatically on our servers, and the output file is emailed to the administrator's email account.
A Visual Basic Forms-based application that searches the CELEX Lexical Database for words that are the same length as some given word, but have one letter that is different.
I assisted Dr Rob Lowe with the MATLAB programming for a neural network that was based on a 1985 paper by McLelland and Rumelhart.
A Perl script that runs on our web server, reading the HTTP log and extracting only the key information about the most important types of HTTP errors.
An ASP–based script that generates questionnaire in the form of a web page. This script essentially allows researchers to generate a web page without having to learn HTML. The page contains a series of questions each with its own answer area (that can appear in a variety of formats, such as the Likert Scale). The questions and answer formats are defined by the researcher using a configuration file written in a simple strict format. The page visitor's responses are stored in a structured–format text file. See the demonstration here.
An AWK script to remove some columns and swap other columns in the CELEX Lexical Database.
A Microsoft Excel macro for importing the output from an autoassociator neural network.
Before 2005, most of the software I wrote was for reaction time studies, which required accurate and precise timing. The PC usually requires additional hardware to perform timing and interfacing with sufficiently high accuracy for our needs. It was possible to achieve millisecond timing using the onboard interrupt controller, and interfacing using the parallel port, but for reasons of portability and reliability, we chose to use proprietary PC-BUS (ISA) cards for both timing and interfacing.
Except where indicated, all PC programs were written using Borland's Turbo Pascal. Timing and interfacing (current buffering) was performed by proprietary hardware in the form of ISA cards. The accuracy and resolution of timing was within 1 millisecond. Results were written to flat ASCII (plain text) files in either fixed width or delimited format for easy importing to standard publication and analysis software.
We typically use Windows, but due to its lack of real-time features and inherent timing inconsistencies, I developed some projects on QNX, using its Photon GUI—I started using this in summer 2001 as the platform for my MSc dissertation, which was an evaluation of QNX's suitability for psychological experimentation. See my QNX pages for information about QNX. However, due to its specialist nature and our researchers' unfamiliarity with QNX, it is not satisfactory for our purposes, so we still use Windows, but take precautions to control timing errors.
My colleague, Gary Freegard, also specialises in reaction-time software, and he has even created a special button pad for measuring reaction times with exceptionally good accuracy and precision. See Gary's pages for more details.
The classic Stroop experiment written in C for QNX using Photon. The participants responded vocally, so the voice switch I built some years ago was used to trigger the interrupt line of the parallel port to obtain accurate response timings.
A program written in C for QNX, using the Photon GUI. Individual letters are displayed scattered randomly on the screen. The participant has to search the letter to find a given letter. A simple search would be looking for a K amongst O's, whilst a difficult search would be looking for a K amongst Z's. The target letter in this case was displayed in one of 16 predefined positions in a circle (like hours of a clock face), chosen randomly. This project was used to test for spatial neglect in brain injured patients.
A further modification of the ESP v2 project to change the experimental procedure.
A C++ program for generating pseudo-random bit patterns conforming to specified criteria, for input to an autoassociator neural network.
This program was written in C on QNX using the Photon GUI. It performed a multi-task test of icon efficacy. My dissertation was an evaluation of QNX's suitability for psychological experimentation.
The participant had to identify icons as quickly as possible, whilst simultaneously monitoring two moving objects. The two distractor tasks were designed to increase workload; one task was a dot moving randonmly in a square region — the participant had to press a key to change the direction of the dot before it moved outside of the region. The other task featured three vertical bars — the participant had to press a key to centre these bars before they moved beyond certain limits.
A Visual Basic program that measured the time taken to find a given icon in an array of icons displayed in random positions. This was an adaptation of Dr Oscar De Bruijn's original source code to modify the experimental procedure.
A Visual Basic macro to create Microsoft Outlook contacts and email distribution lists from an Access database of people.
This system allows users to save Microsoft Word documents to our web server, where they are allocated a unique identity code, and stored in an organised set of folders for retrieval via web pages. The Visual Basic program is built into a Word document template. The user interface consists of three toolbar buttons and a simple dialog box for entering details about the document.
Uses a data logging package to control a slide projector and sound generator, whilst continuously measuring the subject's heart and eye blink activity. Subjects are presented with slides of pleasant and unpleasant images whilst being startled at random occasions (synchronised to the presentation of the slides) by a loud white noise played over headphones.
Provides a measure of vigilance based on the Bakan or Rapid Information Processing task. Subjects monitor a sequence of pseudo-random digits displayed on screen once every 600msec. Subject responds when three odd numbers are presented contiguously. Subject accuracy and speed is measured, statistically analysed, and output in tabular form.
Records operant conditioning of human subjects using multiple variable interval schedules.
The PCIB40 interface card is used extensively in projects requiring an interface between a PC computer and laboratory hardware, and millisecond timing. Object-oriented drivers were written to provide a modular and reusable means of controlling the card.
Tests simple and multi-choice reaction time based on the Hick paradigm. The computer is connected to a custom-built reaction pad of 8 LEDs and buttons laid out in a semicircle, with a 'home' button at the centre of the radius. The subject responds to the lighting of an LED by pressing its corresponding button as quickly as possible.
Performs a geometric progressive ratio schedule for operant conditioning of human subjects. No special hardware is required, but reprogramming of the keyboard is done to permit accurate measurement of keyboard presses. Results are analysed and presented graphically and in tabular format.
To centralise the control of multiple data logging systems, I wrote a set of object-oriented real-time software drivers using the Kermit protocol to transmit data and commands bi-directionally over serial RS-232 lines. Real-time communication and data logging take place concurrently.
Performs the classic Stroop test. A colour word is displayed on screen in a certain 'ink colour'. Control (non-word), congruent word-colour, and incongruent word-colour tests are presented. The subject's task is to respond to the ink colour and not the colour word, using a five-button response pad. The accuracy and speed of the subject’s response is recorded.
Home | About Me | Copyright © Neil Carter |