scripts/channelClasses/mock_ec/White.java

/////////////////////////////////////////////////////////////////
// This script generates (somewhat) realistic EC data.
//
// Run with (for example)
//    java -cp build:lib/derby.jar -Dserver.cache.enable=false -Djava.library.path=c frontendClasses/CLI -scriptChannel mock_ec/White -reviewSeries -paradigm ec -binZ site -transform power -display "TiledStack()" -v
/////////////////////////////////////////////////////////////////
package mock_ec;

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

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

/////////////////////////////////////////////////////////////////
/** This script generates (somewhat) realistic EC data.  
 * This script generates white noise, which is then filtered.
 * The channels comprise:
 * <ol><li>three examples of HP filtering</li>
 *     <li>two examples of BP and BS filtering</li>
 *     <li>three examples of LP filtering</li>
 * </ol>
 *
 * <p>The intended effect is:
 * <ul><li>Visualization of location and width of cutoffs</li>
 * </ul>
 */
public class White extends ChannelScript
{
    /** Recording instance to be operated on */
    Recording rec = null;
    /** Time series */
    ArrayList<SeriesAnalog> list = new ArrayList<SeriesAnalog>();
    /** Events.  May be left empty */
    ArrayList<Event> ev = new ArrayList<Event>();

    ////////////////////////////////////////////////////////////////////
    /** Initialize instance by setting its parameters to default values.
     */
    public White(Recording rec) {
        this.rec = rec;
    } // White

    ////////////////////////////////////////////////////////////////////
    /** Update recording data by performing channel-oriented operations.
     */
    public void update() {
        // Template - used to encapsulate all sampling characteristics
        float x0 = 10.0f;            // in seconds: times start at x0
        float xDelta = 0.004f;       // in seconds: times increment by xDelta
        float duration = 120.0f;     // in seconds: times end at x0+duration
        int nIndexes = Math.round(duration/xDelta);
        SeriesAnalog template = new SeriesAnalog(new SiteSet(), // sites
                                                 x0,            // x0
                                                 xDelta,        // xDelta
                                                 new Units(Unit.s),  // xUnits
                                                 nIndexes,      // # samples
                                                 new Units(Unit.uV), // yUnits
                                                 DataMode.EEG);      // DataMode

        // Channels with different filter settings
        String[] labels = {"HP0.5", "HP1", "HP2",
                           "BP5-15", "BP47-53", "BS47-53",
                           "LP10", "LP20", "LP50"};

        float sd = 10.0f;
        SeriesAnalog white = SeriesAnalog.getWhiteTimeseries(template,sd);

        // Generate all time series
        for(int site=0; site<labels.length; site++) {
            // What is the SiteSet?
            SiteSet ss = new SiteSet(new Site(labels[site]));

            Pattern p1 = Pattern.compile("([HL]P)([0-9.]+)");
            Pattern p2 = Pattern.compile("(B[PS])([0-9.]+)-([0-9.]+)");
            Matcher m = p1.matcher(labels[site]);
            if(m.matches() && m.groupCount()==2) {
                String type = m.group(1);
                float cutoff = Float.parseFloat(m.group(2));

                if(type.equals("HP"))
                    list.add( white.clone().filterHP(cutoff).setSites(ss) );
                else if(type.equals("LP"))
                    list.add( white.clone().filterLP(cutoff).setSites(ss) );
            } else if(m.usePattern(p2).matches() && m.groupCount()==3) {
                String type = m.group(1);
                float cutoff1 = Float.parseFloat(m.group(2));
                float cutoff2 = Float.parseFloat(m.group(3));
        
                if(type.equals("BP"))
                    list.add( white.clone().filterBP(cutoff1,cutoff2).setSites(ss) );
                else if(type.equals("BS"))
                    list.add( white.clone().filterBS(cutoff1,cutoff2).setSites(ss) );
            }
        }

        // Add synthetic time series to the currently empty Recording
        replaceAllSeries(rec, list);
        replaceAllEvents(rec, ev);
    } // update

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

}

 


Validate HTML CSS Generated 2011-08-12T10:28:13+1000 Chris Rennie