/*
* DerInt.java
*
*/
package com.imsl.demo.SeriesAnalysis.Lib;
import java.util.ArrayList;
import com.imsl.demo.SeriesAnalysis.SeriesAnalysis;
/**
*
* @author Ed Stewart
* @created March 4, 2003
*/
public class DerInt extends javax.swing.JDialog {
private ArrayList data;
private ArrayList params;
private int index1;
private javax.swing.JFrame parentFrame;
public DerInt(javax.swing.JFrame parent) {
super(parent, false);
parentFrame = parent;
initComponents();
java.awt.Dimension parentSize = parent.getSize();
java.awt.Point parentLoc = parent.getLocationOnScreen();
parentLoc.x += parentSize.width/2.5;
parentLoc.y += parentSize.height/2.5;
setLocation(parentLoc.x, parentLoc.y);
}
public void setData(ArrayList paramsList, ArrayList dataList) {
params = paramsList;
data = dataList;
jList1.setVisibleRowCount(params.size());
jList1.setPreferredSize(jList1.getPreferredScrollableViewportSize());
jList1.setListData(params.toArray());
jButtonInt.setEnabled(false);
jButtonDer.setEnabled(false);
jButtonMov.setEnabled(false);
}
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
private void initComponents() {//GEN-BEGIN:initComponents
jScrollPane1 = new javax.swing.JScrollPane();
jList1 = new javax.swing.JList();
jPanel2 = new javax.swing.JPanel();
jPanel3 = new javax.swing.JPanel();
jLabel1 = new javax.swing.JLabel();
jTextField1 = new javax.swing.JTextField();
jLabel2 = new javax.swing.JLabel();
jPanel11 = new javax.swing.JPanel();
jLabel3 = new javax.swing.JLabel();
jButtonInt = new javax.swing.JButton();
jButtonDer = new javax.swing.JButton();
jButtonMov = new javax.swing.JButton();
getContentPane().setLayout(new javax.swing.BoxLayout(getContentPane(), javax.swing.BoxLayout.X_AXIS));
setTitle("Integrals & Derivatives");
addWindowListener(new java.awt.event.WindowAdapter() {
public void windowClosing(java.awt.event.WindowEvent evt) {
exitForm(evt);
}
});
jScrollPane1.setPreferredSize(new java.awt.Dimension(100, 300));
jList1.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
jList1.setFixedCellHeight(18);
jList1.setPreferredSize(new java.awt.Dimension(300, 500));
jList1.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
jList1.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
jList1MouseClicked(evt);
}
});
jScrollPane1.setViewportView(jList1);
getContentPane().add(jScrollPane1);
jPanel2.setLayout(new java.awt.BorderLayout());
jPanel2.setPreferredSize(new java.awt.Dimension(300, 300));
jPanel3.setPreferredSize(new java.awt.Dimension(300, 75));
jLabel1.setText("Parameter Name:");
jLabel1.setMaximumSize(new java.awt.Dimension(32767, 32767));
jLabel1.setMinimumSize(new java.awt.Dimension(4, 20));
jLabel1.setPreferredSize(new java.awt.Dimension(150, 20));
jLabel1.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
jPanel3.add(jLabel1);
jTextField1.setEditable(false);
jTextField1.setMaximumSize(new java.awt.Dimension(32767, 32767));
jTextField1.setPreferredSize(new java.awt.Dimension(150, 20));
jPanel3.add(jTextField1);
jPanel2.add(jPanel3, java.awt.BorderLayout.NORTH);
jLabel2.setText("Select Time Series to Compute:");
jPanel2.add(jLabel2, java.awt.BorderLayout.CENTER);
jPanel11.setPreferredSize(new java.awt.Dimension(300, 40));
jLabel3.setText("Select Time Series to Compute:");
jPanel11.add(jLabel3);
jButtonInt.setText("Integral (Cumulative Sum)");
jButtonInt.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButtonIntActionPerformed(evt);
}
});
jPanel11.add(jButtonInt);
jButtonDer.setText("Derivative");
jButtonDer.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButtonDerActionPerformed(evt);
}
});
jPanel11.add(jButtonDer);
jButtonMov.setText("20pt Moving Average");
jButtonMov.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButtonMovActionPerformed(evt);
}
});
jPanel11.add(jButtonMov);
jPanel2.add(jPanel11, java.awt.BorderLayout.CENTER);
getContentPane().add(jPanel2);
pack();
}//GEN-END:initComponents
private void jButtonDerActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonDerActionPerformed
double[] dataArray = (double[]) data.get(index1);
double[] deriv = new double[dataArray.length];
deriv[0] = dataArray[1]-dataArray[0];
deriv[dataArray.length-1] = dataArray[dataArray.length-1]-dataArray[dataArray.length-2];
for (int i=1; i<(dataArray.length-1); i++) {
deriv[i] = (dataArray[i+1] - dataArray[i-1])/2;
}
params.add((String) params.get(index1) + "_Derivative");
data.add(deriv);
jList1.setVisibleRowCount(params.size());
jList1.setPreferredSize(jList1.getPreferredScrollableViewportSize());
jList1.setListData(params.toArray());
((SeriesAnalysis)parentFrame).updateList();
}//GEN-LAST:event_jButtonDerActionPerformed
private void jButtonMovActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonMovActionPerformed
final int period = 20;
double[] dataArray = (double[]) data.get(index1);
double[] mov = new double[dataArray.length];
int num = 0;
double sum = 0.0;
for (int i=0; i<dataArray.length; i++) {
sum += dataArray[i];
if (i < period) {
num++;
mov[i] = sum/num;
} else {
sum -= dataArray[i-period];
mov[i] = sum/period;
}
}
params.add((String) params.get(index1) + "_MovingAvg");
data.add(mov);
jList1.setVisibleRowCount(params.size());
jList1.setPreferredSize(jList1.getPreferredScrollableViewportSize());
jList1.setListData(params.toArray());
((SeriesAnalysis)parentFrame).updateList();
}//GEN-LAST:event_jButtonMovActionPerformed
private void jList1MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jList1MouseClicked
index1 = jList1.locationToIndex(evt.getPoint());
jTextField1.setText((String) params.get(index1));
jButtonInt.setEnabled(true);
jButtonDer.setEnabled(true);
jButtonMov.setEnabled(true);
}//GEN-LAST:event_jList1MouseClicked
private void jButtonIntActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonIntActionPerformed
double[] dataArray = (double[]) data.get(index1);
double[] integral = new double[dataArray.length];
integral[0] = dataArray[0];
for (int i=1; i<dataArray.length; i++) {
integral[i] = integral[i-1] + dataArray[i];
}
params.add((String) params.get(index1) + "_Integral");
data.add(integral);
jList1.setVisibleRowCount(params.size());
jList1.setPreferredSize(jList1.getPreferredScrollableViewportSize());
jList1.setListData(params.toArray());
//((SeriesAnalysis)parentFrame).setData(data);
//((SeriesAnalysis)parentFrame).setParams(params);
((SeriesAnalysis)parentFrame).updateList();
}//GEN-LAST:event_jButtonIntActionPerformed
/** Exit the Application */
private void exitForm(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_exitForm
setVisible(false);
dispose();
}//GEN-LAST:event_exitForm
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel3;
private javax.swing.JPanel jPanel3;
private javax.swing.JLabel jLabel2;
private javax.swing.JPanel jPanel2;
private javax.swing.JPanel jPanel11;
private javax.swing.JList jList1;
private javax.swing.JButton jButtonDer;
private javax.swing.JButton jButtonInt;
private javax.swing.JTextField jTextField1;
private javax.swing.JButton jButtonMov;
// End of variables declaration//GEN-END:variables
}