[Home] DMelt member access. Java source code: org.statcato.dialogs.calc.probdist.ExponentialDistributionDialog
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
/*
* ExponentialDistributionDialog.java
*
* Created on Mar 26, 2010, 1:13:50 PM
*/
package org.statcato.dialogs.calc.probdist;
import org.statcato.*;
import org.statcato.spreadsheet.*;
import org.statcato.utils.HelperFunctions;
import org.statcato.statistics.*;
import javax.swing.*;
import java.util.*;
/**
* A dialog for exponential probability distribution.
* Provides options to compute the probability density, cumulative
* probability, and inverse cumulative probability.
*
* @author Margaret Yau
* @version %I%, %G%
* @since 1.0
*/
public class ExponentialDistributionDialog extends StatcatoDialog {
/** Creates new form ExponentialDistributionDialog */
public ExponentialDistributionDialog(java.awt.Frame parent, boolean modal) {
super(parent, modal);
this.app = (Statcato)parent;
this.ParentSpreadsheet = app.getSpreadsheet();
initComponents();
ButtonGroup group1 = new ButtonGroup();
group1.add(ProbDensityRadioButton);
group1.add(CumProbRadioButton);
group1.add(InvCumProbRadioButton);
ButtonGroup group2 = new ButtonGroup();
group2.add(ConstRadioButton);
group2.add(ColumnRadioButton);
ParentSpreadsheet.populateComboBox(ColumnComboBox);
getRootPane().setDefaultButton(OKButton);
setHelpFile("calc-exponential");
name = "Exponential Probability Distribution";
description = "For calculations on exponential probability distribution.";
helpStrings.add("Enter the rate parameter of the distribution.");
helpStrings.add("Choose probability density for P(x), cumulative " +
"probability for (P(<= x), and inverse cumulative probability " +
"for finding x given a such that P(<= x) = a.");
helpStrings.add("Inputs can be numbers within a column or a single " +
"constant.");
}
/**
* Updates elements on the dialog so that they have the most
* current values. Called by {@link #setVisible} to make
* sure the dialog displays current values when made visible again.
*
* @see #setVisible(boolean)
*/
@Override
public void updateElements() {
updateComboBox(ColumnComboBox);
}
/** 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.
*/
@SuppressWarnings("unchecked")
// //GEN-BEGIN:initComponents
private void initComponents() {
jPanel2 = new javax.swing.JPanel();
ConstTextField = new javax.swing.JTextField();
jLabel7 = new javax.swing.JLabel();
jLabel6 = new javax.swing.JLabel();
ColumnComboBox = new javax.swing.JComboBox();
ConstRadioButton = new javax.swing.JRadioButton();
ColumnRadioButton = new javax.swing.JRadioButton();
jLabel5 = new javax.swing.JLabel();
StoreTextField = new javax.swing.JTextField();
jPanel1 = new javax.swing.JPanel();
jLabel1 = new javax.swing.JLabel();
jLabel2 = new javax.swing.JLabel();
CumProbRadioButton = new javax.swing.JRadioButton();
jLabel4 = new javax.swing.JLabel();
InvCumProbRadioButton = new javax.swing.JRadioButton();
ProbDensityRadioButton = new javax.swing.JRadioButton();
RateTextField = new javax.swing.JTextField();
OKButton = new javax.swing.JButton();
CancelButton = new javax.swing.JButton();
setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
setTitle("Exponential Probability Distribution");
jPanel2.setBorder(javax.swing.BorderFactory.createTitledBorder("Inputs and Outputs"));
ConstTextField.setEnabled(false);
jLabel7.setText("(e.g. C1 for column label, or variable name)");
jLabel6.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N
jLabel6.setText("Store Results in: (optional)");
ConstRadioButton.setText("Constant:");
ConstRadioButton.addChangeListener(new javax.swing.event.ChangeListener() {
public void stateChanged(javax.swing.event.ChangeEvent evt) {
ConstRadioButtonStateChanged(evt);
}
});
ColumnRadioButton.setSelected(true);
ColumnRadioButton.setText("Column:");
ColumnRadioButton.addChangeListener(new javax.swing.event.ChangeListener() {
public void stateChanged(javax.swing.event.ChangeEvent evt) {
ColumnRadioButtonStateChanged(evt);
}
});
jLabel5.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N
jLabel5.setText("Input(s):");
javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
jPanel2.setLayout(jPanel2Layout);
jPanel2Layout.setHorizontalGroup(
jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel2Layout.createSequentialGroup()
.addContainerGap()
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jLabel5)
.addGroup(jPanel2Layout.createSequentialGroup()
.addGap(19, 19, 19)
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(ConstRadioButton)
.addComponent(ColumnRadioButton))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
.addComponent(ConstTextField)
.addComponent(ColumnComboBox, 0, 117, Short.MAX_VALUE)))
.addComponent(jLabel6)
.addGroup(jPanel2Layout.createSequentialGroup()
.addGap(21, 21, 21)
.addComponent(StoreTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 105, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jLabel7)))
.addContainerGap())
);
jPanel2Layout.setVerticalGroup(
jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel2Layout.createSequentialGroup()
.addContainerGap()
.addComponent(jLabel5)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(ColumnRadioButton)
.addComponent(ColumnComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(ConstRadioButton)
.addComponent(ConstTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jLabel6)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(StoreTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jLabel7))
.addContainerGap())
);
jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder("Distribution"));
jLabel1.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N
jLabel1.setText("Distribution Parameters:");
jLabel2.setText("Rate:");
CumProbRadioButton.setText("Cumulative probability");
jLabel4.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N
jLabel4.setText("Compute:");
InvCumProbRadioButton.setText("Inverse cumulative probability");
ProbDensityRadioButton.setSelected(true);
ProbDensityRadioButton.setText("Probability density");
RateTextField.setText("0");
javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
jPanel1.setLayout(jPanel1Layout);
jPanel1Layout.setHorizontalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addContainerGap()
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jLabel1)
.addComponent(jLabel4)
.addGroup(jPanel1Layout.createSequentialGroup()
.addGap(19, 19, 19)
.addComponent(InvCumProbRadioButton))
.addGroup(jPanel1Layout.createSequentialGroup()
.addGap(19, 19, 19)
.addComponent(ProbDensityRadioButton))
.addGroup(jPanel1Layout.createSequentialGroup()
.addGap(19, 19, 19)
.addComponent(CumProbRadioButton))
.addGroup(jPanel1Layout.createSequentialGroup()
.addGap(18, 18, 18)
.addComponent(jLabel2)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(RateTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 91, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
jPanel1Layout.setVerticalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addContainerGap()
.addComponent(jLabel1)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel2)
.addComponent(RateTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(18, 18, 18)
.addComponent(jLabel4)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(ProbDensityRadioButton)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(CumProbRadioButton)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(InvCumProbRadioButton)
.addContainerGap())
);
OKButton.setText("Compute");
OKButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
OKButtonActionPerformed(evt);
}
});
CancelButton.setText("Close");
CancelButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
CancelButtonActionPerformed(evt);
}
});
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
.addComponent(jPanel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
.addGroup(layout.createSequentialGroup()
.addGap(97, 97, 97)
.addComponent(OKButton)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(CancelButton)))
.addContainerGap(19, Short.MAX_VALUE))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addGap(19, 19, 19)
.addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addGap(18, 18, 18)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(OKButton)
.addComponent(CancelButton))
.addGap(20, 20, 20))
);
pack();
}// //GEN-END:initComponents
private void ConstRadioButtonStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_ConstRadioButtonStateChanged
if (ConstRadioButton.isSelected()) {
ColumnComboBox.setEnabled(false);
ConstTextField.setEnabled(true);
} else {
ColumnComboBox.setEnabled(true);
ConstTextField.setEnabled(false);
}
}//GEN-LAST:event_ConstRadioButtonStateChanged
private void ColumnRadioButtonStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_ColumnRadioButtonStateChanged
if (ColumnRadioButton.isSelected()) {
ColumnComboBox.setEnabled(true);
ConstTextField.setEnabled(false);
} else {
ColumnComboBox.setEnabled(false);
ConstTextField.setEnabled(true);
}
}//GEN-LAST:event_ColumnRadioButtonStateChanged
private void OKButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_OKButtonActionPerformed
app.compoundEdit = new DialogEdit("exponential pdf");
double lambda = 0;
String heading = "Exponential Distribution: ";
String text = "";
// get rate parameter from dialog
try {
lambda = Double.parseDouble(RateTextField.getText());
} catch (NumberFormatException e) {
app.showErrorDialog("Enter a positive number for the rate parameter.");
return;
}
if (lambda <= 0) {
app.showErrorDialog("Enter a positive number for the rate parameter.");
return;
}
heading += "rate parameter: " + lambda;
Vector ColumnVector = new Vector();
// get input
if (ColumnRadioButton.isSelected()) {
// get data for selected input column
String columnLabel = ColumnComboBox.getSelectedItem().toString();
if (columnLabel.equals("")) { // no input variable
app.showErrorDialog("Select the input column.");
return;
}
int column = ParentSpreadsheet.parseColumnNumber(columnLabel);
Vector StrColumnVector = ParentSpreadsheet.getColumn(column);
ColumnVector = HelperFunctions.ConvertInputVectorToDoubles(StrColumnVector);
if (ColumnVector == null) {
app.showErrorDialog("Invalid input column " + columnLabel +
": all data must be numbers.");
return;
}
text += "Input: " + columnLabel + " ";
} else {
// get input from constant text field
try {
double num = Double.parseDouble(ConstTextField.getText());
ColumnVector.addElement(num);
text += "Input: " + num + " ";
} catch (NumberFormatException e) {
app.showErrorDialog("Invalid constant input. Enter a valid number.");
return;
}
}
// compute results
ExponentialProbabilityDistribution npd = new ExponentialProbabilityDistribution(lambda);
Vector ResultVector = new Vector();
if (ProbDensityRadioButton.isSelected()) {
text += "Type: Probability density ";
text += "";
text += "| X | P(X) | ";
for (int i = 0; i < ColumnVector.size(); ++i) {
Double elm = ColumnVector.elementAt(i);
if (elm != null) {
double x = elm.doubleValue();
double density = npd.density(x);
text += "| " + x + " | " +
HelperFunctions.formatFloat(density, 6) + " | ";
ResultVector.addElement(density+"");
}
}
text += " ";
} else if (CumProbRadioButton.isSelected()) {
text += "Type: Cumulative probability ";
text += "";
text += "| X | P(<<=X) | ";
for (int i = 0; i < ColumnVector.size(); ++i) {
Double elm = ColumnVector.elementAt(i);
if (elm != null) {
double x = elm.doubleValue();
double density = npd.cumulativeProbability(x);
text += "| " + x + " | " +
HelperFunctions.formatFloat(density, 6) + " | ";
ResultVector.addElement(density+"");
}
}
text += " ";
} else if (InvCumProbRadioButton.isSelected()) {
text += "Type: Inverse cumulative probability ";
text += "";
text += "| P(<<=X) | X | ";
for (int i = 0; i < ColumnVector.size(); ++i) {
Double elm = ColumnVector.elementAt(i);
if (elm != null) {
double area = elm.doubleValue();
double x = npd.inverseCumulativeProbability(area);
text += "| " + area + " | " +
HelperFunctions.formatFloat(x, 4) + " | ";
ResultVector.addElement(HelperFunctions.formatFloat(x, 4)+"");
}
}
text += " ";
}
String storeColumn = StoreTextField.getText();
if (!storeColumn.equals("")) {
// check if Column is valid
int storeColumnNum = ParentSpreadsheet.getColumnNumber(storeColumn);
if (storeColumnNum == -1) { // invalid column
app.showErrorDialog("Enter a valid column name (e.g. C1) or a valid variable name to store the results.");
return;
}
ParentSpreadsheet.setColumn(storeColumnNum, ResultVector);
}
app.addLogParagraph(heading, text);
app.compoundEdit.end();
app.addCompoundEdit(app.compoundEdit);
setVisible(false);
}//GEN-LAST:event_OKButtonActionPerformed
private void CancelButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_CancelButtonActionPerformed
setVisible(false);
}//GEN-LAST:event_CancelButtonActionPerformed
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JButton CancelButton;
private javax.swing.JComboBox ColumnComboBox;
private javax.swing.JRadioButton ColumnRadioButton;
private javax.swing.JRadioButton ConstRadioButton;
private javax.swing.JTextField ConstTextField;
private javax.swing.JRadioButton CumProbRadioButton;
private javax.swing.JRadioButton InvCumProbRadioButton;
private javax.swing.JButton OKButton;
private javax.swing.JRadioButton ProbDensityRadioButton;
private javax.swing.JTextField RateTextField;
private javax.swing.JTextField StoreTextField;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel4;
private javax.swing.JLabel jLabel5;
private javax.swing.JLabel jLabel6;
private javax.swing.JLabel jLabel7;
private javax.swing.JPanel jPanel1;
private javax.swing.JPanel jPanel2;
// End of variables declaration//GEN-END:variables
}
|
Ads help maintain this website.