scripts/channelClasses/mock_ec/ModelEeg.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/ModelEeg -reviewSeries -paradigm ec -binZ site -transform power -display "TiledStack()" -v
/////////////////////////////////////////////////////////////////
package mock_ec;
import java.io.*;
import java.util.*;
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 (somewhat) realistic EC data. The EEG is as
* generated by the model. The channels comprise:
* <ol><li>three identical timeseries (for testing variance intrinsic
* to fits)</li>
* <li>three simulations with same parameters (for testing effect of
* different but equivalent data)</li>
* </ol>
*
* <p>The intended effect is:
* <ul><li>Two alpha sources, nearly overlapping in time, frequency
* and topography</li>
* </ul>
*/
public class ModelEeg 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 ModelEeg(Recording rec) {
this.rec = rec;
} // ModelEeg
////////////////////////////////////////////////////////////////////
/** 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 resulting that are either equal or equivalent
String[] labels = {"A1", "A2", "A3", "B", "C", "D"};
// Generate timeseries "A"
float t0 = 0.090f;
SeriesAnalog seriesA = getEegWithAlpha(template, t0);
// Generate time series
for(int site=0; site<labels.length; site++) {
// What modality? What is the SiteSet?
DataMode mode = DataMode.EEG;
SiteSet ss = new SiteSet(new Site(labels[site]));
// Append series to result
if(site<labels.length/2)
list.add(seriesA.clone().setSites(ss));
else
list.add(getEegWithAlpha(template, t0).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
////////////////////////////////////////////////////////////////////
/** Generate pseudo EEG containing alpha
*/
private SeriesAnalog getEegWithAlpha(SeriesAnalog template, float t0) {
float lnorm = 2.8f;
return SeriesAnalog.getModelledEegTimeseries(template,t0,lnorm);
} // getEegWithAlpha
}