/*
    Student's T Tester v. 0.05  Written by G. Rob Burgess 1997
    Feel free to adapt for your own use.
 */

import java.awt.*;
import java.util.*;
import java.lang.*;
import java.applet.*;
import VisualNumerics.math.Statistics;

public class Students_t05 extends Applet {

        public void init() {
                super.init();


                //{{INIT_CONTROLS
                setLayout(null);
                addNotify();
                resize(501,305);
                Compute = new java.awt.Button("Compute");
                Compute.reshape(384,24,90,36);
                add(Compute);
                tScore = new java.awt.TextField();
                tScore.setEditable(false);
                tScore.reshape(384,144,72,24);
                add(tScore);
                variB = new java.awt.TextField();
                variB.setEditable(false);
                variB.reshape(168,252,84,24);
                add(variB);
                variA = new java.awt.TextField();
                variA.setEditable(false);
                variA.reshape(72,252,84,24);
                add(variA);
                label7 = new java.awt.Label("Variance");
                label7.reshape(0,252,72,24);
                add(label7);
                avgB = new java.awt.TextField();
                avgB.setEditable(false);
                avgB.reshape(168,216,84,24);
                add(avgB);
                avgA = new java.awt.TextField();
                avgA.setEditable(false);
                avgA.reshape(72,216,84,24);
                add(avgA);
                label6 = new java.awt.Label("Average");
                label6.reshape(0,216,72,24);
                add(label6);
                numA = new java.awt.TextField();
                numA.setEditable(false);
                numA.reshape(96,180,36,24);
                add(numA);
                label3 = new java.awt.Label("Data set 1");
                label3.reshape(72,156,96,24);
                add(label3);
                label4 = new java.awt.Label("Data set 2");
                label4.reshape(168,156,84,24);
                add(label4);
                label5 = new java.awt.Label("N");
                label5.reshape(36,180,40,24);
                add(label5);
                numB = new java.awt.TextField();
                numB.setEditable(false);
                numB.reshape(192,180,36,24);
                add(numB);
                dataB = new java.awt.TextField();
                dataB.reshape(96,108,355,24);
                add(dataB);
                dataA = new java.awt.TextField();
                dataA.reshape(96,72,355,24);
                add(dataA);
                label1 = new java.awt.Label("Data set 1:");
                label1.reshape(0,72,84,24);
                add(label1);
                label2 = new java.awt.Label("Data set 2:");
                label2.reshape(0,108,84,24);
                add(label2);
                label9 = new java.awt.Label("Student's T Tester v. 0.05  Enter data separated by commas.");
                label9.reshape(0,0,396,24);
                add(label9);
                label10 = new java.awt.Label("Example: 13.4,14.5,14.003,16,16.2,16");
                label10.reshape(12,36,360,24);
                add(label10);
                degf = new java.awt.TextField();
                degf.setEditable(false);
                degf.reshape(384,180,36,24);
                add(degf);
                label11 = new java.awt.Label("degrees of freedom");
                label11.reshape(252,180,132,24);
                add(label11);
                label12 = new java.awt.Label("One tailed  P value");
                label12.reshape(252,216,132,24);
                add(label12);
                probab = new java.awt.TextField();
                probab.setEditable(false);
                probab.reshape(384,216,72,28);
                add(probab);
                label13 = new java.awt.Label("Two tailed  P value");
                label13.reshape(252,252,132,24);
                add(label13);
                twoprobab = new java.awt.TextField();
                twoprobab.setEditable(false);
                twoprobab.reshape(384,252,72,28);
                add(twoprobab);
                label8 = new java.awt.Label("T Score:");
                label8.reshape(312,144,72,24);
                add(label8);
                //}}
        }
        public String getAppletInfo() {
        return "Student's T Tester v. 0.05.  Written by G. Rob Burgess.";
    }

        public boolean action(Event event, Object arg) {
            // If the compute button was clicked, compute!
                if (event.target == Compute) {

                // Stuff to do when button is pressed
                // Read DataA

          // Get text from data textField
                  String value = dataA.getText();
                  Stats A = new Stats(value);
                  value = dataB.getText();
                  Stats B = new Stats(value);

                  double t = (A.avg-B.avg)/(Math.sqrt(((A.n-1)*A.vari+(B.n-1)*B.vari)/(A.n+B.n-2))*Math.sqrt((1.0/A.n+1.0/B.n)));

                  //new stuff

                  double df = A.n + B.n - 2.0;
                  double tt = Math.abs(t);
                  double prob = Statistics.tCdf(tt,df);
          if (prob < 0.000001) {
            prob = 0.0;
          }  
          else if (prob > 0.50) {
            prob = 1.0 - prob;
          }
          prob = (Math.round(prob * 10000.0)) / 10000.0;
          double twoprob = 2 * prob;
          t = (Math.round(t * 10000.0)) / 10000.0;

                  //end new stuff
                  Double f = new Double(A.n);
                  numA.setText(f.toString());
                  f = new Double(B.n);
                  numB.setText(f.toString());
                  f = new Double(A.avg);
                  avgA.setText(f.toString());
                  f = new Double(B.avg);
                  avgB.setText(f.toString());
                  f = new Double(A.vari);
                  variA.setText(f.toString());
                  f = new Double(B.vari);
                  variB.setText(f.toString());
                  f = new Double(t);
                  tScore.setText(f.toString());
                  f = new Double(df);
                  degf.setText(f.toString());
                  if (prob == 0.0) {
                    probab.setText(" << 0.0001");
                    twoprobab.setText(" << 0.0001");
                  }
                  else {
                    f = new Double(prob);
                    probab.setText(f.toString());
                    f = new Double(twoprob);
                    twoprobab.setText(f.toString());
                  }  
                 }
                return true;
        }


        public boolean handleEvent(Event event) {
                return super.handleEvent(event);
        }

        //{{DECLARE_CONTROLS
        java.awt.Button Compute;
        java.awt.TextField tScore;
        java.awt.TextField variB;
        java.awt.TextField variA;
        java.awt.Label label7;
        java.awt.TextField avgB;
        java.awt.TextField avgA;
        java.awt.Label label6;
        java.awt.TextField numA;
        java.awt.Label label3;
        java.awt.Label label4;
        java.awt.Label label5;
        java.awt.TextField numB;
        java.awt.TextField dataB;
        java.awt.TextField dataA;
        java.awt.Label label1;
        java.awt.Label label2;
        java.awt.Label label9;
        java.awt.Label label10;
        java.awt.TextField degf;
        java.awt.Label label11;
        java.awt.Label label12;
        java.awt.TextField probab;
        java.awt.Label label13;
        java.awt.TextField twoprobab;
        java.awt.Label label8;
        //}}
}
