/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package sim.app.socialsystems2;
import java.awt.Color;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JPanel;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.GrayPaintScale;
import org.jfree.chart.renderer.PaintScale;
import org.jfree.chart.renderer.xy.XYBlockRenderer;
import org.jfree.data.DomainOrder;
import org.jfree.data.general.DatasetChangeListener;
import org.jfree.data.general.DatasetGroup;
import org.jfree.data.xy.XYZDataset;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.RefineryUtilities;
/**
*
* @author epokh
*/
public class RetinalFlowShallow extends ApplicationFrame{
private static boolean computeC=false;
private int empower_order=1;
private int max_word_size=32;
private int min_word_size=1;
public int timebreak=200000;
public String base;
public String datasimfile;
int stage;
EntropyString retinal_flow[];
EntropyString mioreflex;
public RetinalFlowShallow(String title)
{
super(title);
JPanel chartPanel = createDemoPanel();
chartPanel.setPreferredSize(new java.awt.Dimension(500, 270));
setContentPane(chartPanel);
base="/home/epokh/DataSim/shallow/";
datasimfile="predictive/datasim.dat";
try {
for(int order=4;order<=6;order++)
{
stage=order;
computeRetinalFlow(base+datasimfile,order,4,225);
saveRetinal2CSV(base+"retinal"+order+".dat");
computeRetinalFlow(base+datasimfile,order,4,225);
saveReflex2CSV(base+"reflex"+order+".dat");
}
} catch (FileNotFoundException ex) {
Logger.getLogger(RetinalFlowShallow.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(RetinalFlowShallow.class.getName()).log(Level.SEVERE, null, ex);
}
}
public void computeRetinalFlow(String inputfile,int order,int toskip,int retinalsize) throws FileNotFoundException
{
CsvReader datalog=new CsvReader(inputfile);
try {
/*
datalog.setDelimiter('\t');
for(int k=1;k<=toskip;k++)
{
datalog.skipLine();
//datalog.readRecord();
}
datalog.readHeaders();
*/
mioreflex=new EntropyString(0,true,"unbiased");
mioreflex.setBase(7,2,order,1);
retinal_flow = new EntropyString[retinalsize];
for(int k=0;k<retinalsize;k=k+1)
{
retinal_flow[k]=new EntropyString(0,true,"unbiased");
retinal_flow[k].setBase(7,2,order,1);
}
datalog.setDelimiter('\t');
while (datalog.readRecord()) {
String[] record = datalog.getValues();
if (record.length >= (3+retinalsize)) {
int timestamp = Integer.valueOf(record[0]);
int reflex = Integer.valueOf(record[1]);
int motor = Integer.valueOf(record[2]);
mioreflex.addEmpoweredSymbol(motor, reflex);
for (int k = 0; k < retinalsize; k = k + 1) {
int pixel = Integer.valueOf(record[3+k]);
retinal_flow[k].addEmpoweredSymbol(motor, pixel);
}
}
}
datalog.close();
} catch (IOException ex) {
Logger.getLogger(RetinalFlowShallow.class.getName()).log(Level.SEVERE, null, ex);
}
}
/**
* Creates a sample dataset.
*/
private static XYZDataset createDataset() {
return new XYZDataset() {
public int getSeriesCount() {
return 1;
}
public int getItemCount(int series) {
return 10000;
}
public Number getX(int series, int item) {
return new Double(getXValue(series, item));
}
public double getXValue(int series, int item) {
return item / 100 - 50;
}
public Number getY(int series, int item) {
return new Double(getYValue(series, item));
}
public double getYValue(int series, int item) {
return item - (item / 100) * 100 - 50;
}
public Number getZ(int series, int item) {
return new Double(getZValue(series, item));
}
public double getZValue(int series, int item) {
double x = getXValue(series, item);
double y = getYValue(series, item);
return Math.sin(Math.sqrt(x * x + y * y) / 5.0);
}
public void addChangeListener(DatasetChangeListener listener) {
// ignore - this dataset never changes
}
public void removeChangeListener(DatasetChangeListener listener) {
// ignore
}
public DatasetGroup getGroup() {
return null;
}
public void setGroup(DatasetGroup group) {
// ignore
}
public Comparable getSeriesKey(int series) {
return "sin(sqrt(x + y))";
}
public int indexOf(Comparable seriesKey) {
return 0;
}
public DomainOrder getDomainOrder() {
return DomainOrder.ASCENDING;
}
};
}
/**
* Creates a panel for the demo.
*
* @return A panel.
*/
public static JPanel createDemoPanel() {
return new ChartPanel(createChart(createDataset()));
}
private static JFreeChart createChart(XYZDataset dataset) {
NumberAxis xAxis = new NumberAxis("X");
xAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
xAxis.setLowerMargin(0.0);
xAxis.setUpperMargin(0.0);
NumberAxis yAxis = new NumberAxis("Y");
yAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
yAxis.setLowerMargin(0.0);
yAxis.setUpperMargin(0.0);
XYBlockRenderer renderer = new XYBlockRenderer();
PaintScale scale = new GrayPaintScale(-2.0, 1.0);
//renderer.setPaintScale(scale);
XYPlot plot = new XYPlot(dataset, xAxis, yAxis, renderer);
plot.setBackgroundPaint(Color.lightGray);
plot.setDomainGridlinesVisible(false);
plot.setRangeGridlinePaint(Color.white);
JFreeChart chart = new JFreeChart("XYBlockChartDemo1", plot);
chart.removeLegend();
chart.setBackgroundPaint(Color.white);
return chart;
}
public void saveReflex2CSV(final String filename)
{
//generate a Csv writer for every time series
CsvWriter csvoutput = new CsvWriter(filename);
try {
//export every time series to a file
// the first record is the header of the file
final String[] record=new String[2];
record[0]=String.valueOf(0);
record[1]=String.valueOf(mioreflex.getMutualInformation(false,2));
csvoutput.writeRecord(record);
csvoutput.flush();
} catch (IOException ex) {
Logger.getLogger(RetinalFlowShallow.class.getName()).log(Level.SEVERE, null, ex);
}
csvoutput.close();
}
public void saveRetinal2CSV(final String filename) {
//generate a Csv writer for every time series
CsvWriter csvoutput = new CsvWriter(filename);
//export every time series to a file
// the first record is the header of the file
final String[] record = new String[225];
for (int k = 0; k < 225; k++) {
record[k] = String.valueOf(retinal_flow[k].getMutualInformation(false, 2));
}
try {
csvoutput.writeRecord(record);
csvoutput.flush();
} catch (IOException ex) {
Logger.getLogger(RetinalFlowShallow.class.getName()).log(Level.SEVERE, null, ex);
}
csvoutput.close();
}
public static void main(String[] args){
RetinalFlowShallow demo = new RetinalFlowShallow("Block Chart Demo");
demo.pack();
RefineryUtilities.centerFrameOnScreen(demo);
demo.setVisible(true);
}
}