scripts/channelClasses/standard/GratPreclean.java

/////////////////////////////////////////////////////////////////
// Gratton filtering, with custom precleaning
//
// This code is compiled at runtime, but compilation can be tested by:
//    javac -cp build scripts/channelClasses/standard/GratPreclean.java
//    rm scripts/channelClasses/standard/GratPreclean.class 
/////////////////////////////////////////////////////////////////
package standard;

import java.io.*;
import java.util.*;

import generalClasses.*;
import recordingClasses.Recording;
import seriesClasses.*;
import channelClasses.ChannelScript;
import static channelClasses.Channel.*;

/////////////////////////////////////////////////////////////////
/** Gratton filtering, with custom precleaning
 */
public class GratPreclean extends ChannelScript
{
    /** Recording instance to be operated on */
    Recording rec = null;
    /** Cutoff in Hz, applied only to EEG,EMG,EOG */
    float highpassCutoff;
    /** Log of warnings generated during update */
    ArrayList<String> warnings = null;


    ////////////////////////////////////////////////////////////////////
    /** Initialize instance by setting its parameters to specified values.
     * @param highpassCutoff Highpass cutoff applied to EEG,EMG and EOG
     */
    public GratPreclean(Recording rec, float highpassCutoff) {
        this.rec = rec;
        this.highpassCutoff = highpassCutoff;
        warnings = new ArrayList<String>();
    } // GratPreclean

    ////////////////////////////////////////////////////////////////////
    /** Initialize instance by setting its parameters to default values.
     */
    public GratPreclean(Recording rec) {
        this(rec, 2.0f);
    } // GratPreclean

    ////////////////////////////////////////////////////////////////////
    /** Update recording data by performing channel-oriented operations.
     * <p>Available modes in are EEG, EOG, REF, EMG, EDA, RES, ECG, EVE.
     */
    public void update() {
        // Process EEG,EMG,EOG
        ArrayList<SeriesAnalog> subset = selectMode(rec, DataMode.EEG);
        subset = listsUnion(subset,selectMode(rec, DataMode.EMG));
        subset = listsUnion(subset,selectMode(rec, DataMode.EOG));
        subset = discardSite("O[12z]",subset);
        filterHP(highpassCutoff, subset); // NB: this does not remove DC
        subtractTemporalMean(subset);
        ArrayList<SeriesAnalog> result = subset;

        // Process EDA,EVE: do nothing to them
        subset = selectMode(rec, DataMode.EDA);
        subset = listsUnion(subset,selectMode(rec, DataMode.EVE));
        result = listsUnion(result, subset);

        // Process RES,ECG,REF: subtract temporal mean
        subset = selectMode(rec, DataMode.ECG);
        subset = listsUnion(subset,selectMode(rec, DataMode.RES));
        subset = listsUnion(subset,selectMode(rec, DataMode.REF));
        subtractTemporalMean(subset);
        result = listsUnion(result, subset);

        // Update Recording object
        replaceAllSeries(rec, result);

        // Perform Gratton correction
        float epochDur = 0.0f;  // Let Gratton choose epochs
        doGratton(rec, epochDur);
    } // update

    ////////////////////////////////////////////////////////////////////
    /** Dump summary of this class or object
     * @return String representation of this object
     */
    public String toString() {
        String s = "<<<"+this.getClass().toString()+">>>\n";
        s += "Highpass (Hz) = "+ highpassCutoff+"\n";
        for(String w: warnings)
            s += w+"\n";
        return s;
    } // toString
}

 


Validate HTML CSS Generated 2009-09-06T16:13:22+1000 Chris Rennie