import java.applet.*; import java.awt.*; import java.util.Vector; public class TransCalculator extends Applet { TextField chemicalField, densityField, lambdaField; TextField packingField, percentField; Button calculate; Label thickLabel, mfpLabel; CheckboxGroup geometryGroup; Checkbox[] geometryBoxes; Vector elementVector; double density, packingFraction, percentScatterer, wavelength; public void init() { Font font = new Font("TimesRoman",Font.PLAIN,12); setLayout(new GridLayout(0,2)); setBackground(Color.white); Label compoundLabel = new Label("Compound"); compoundLabel.setFont(font); chemicalField = new TextField(20); chemicalField.setFont(font); add(compoundLabel); add(chemicalField); Label densityLabel = new Label("Density (g/cm^3)"); densityLabel.setFont(font); densityField = new TextField(20); densityField.setFont(font); densityField.setText("1.0"); add(densityLabel); add(densityField); Label packingLabel = new Label("Packing Fraction (0.0-1.0)"); packingLabel.setFont(font); packingField = new TextField(20); packingField.setFont(font); packingField.setText("1.0"); add(packingLabel); add(packingField); Label percentLabel = new Label("Percent Scatterer (0-100)"); percentLabel.setFont(font); percentField = new TextField(20); percentField.setFont(font); percentField.setText("10"); add(percentLabel); add(percentField); Label geometryLabel = new Label("Geometry"); geometryLabel.setFont(font); geometryGroup = new CheckboxGroup(); geometryBoxes = new Checkbox[2]; geometryBoxes[0] = new Checkbox("Annulus", geometryGroup, true); geometryBoxes[1] = new Checkbox("Slab", geometryGroup, false); geometryBoxes[0].setFont(font); geometryBoxes[1].setFont(font); Panel geometryPanel = new Panel(); geometryPanel.setLayout( new FlowLayout()); geometryPanel.add(geometryBoxes[0]); geometryPanel.add(geometryBoxes[1]); add(geometryLabel); add(geometryPanel); Label lambdaLabel = new Label("Wavelength (A)"); lambdaLabel.setFont(font); lambdaField = new TextField(20); lambdaField.setFont(font); lambdaField.setText("1.8"); add(lambdaLabel); add(lambdaField); Label spacer = new Label(" "); spacer.setFont(font); calculate = new Button("Calculate"); calculate.setFont(font); add(spacer); add(calculate); Label mfpExplLabel = new Label("Mean Free Path: "); mfpExplLabel.setFont(font); add(mfpExplLabel); mfpLabel = new Label("0.00 (cm)"); mfpLabel.setFont(font); add(mfpLabel); Label thickExplLabel = new Label("Thickness: "); thickExplLabel.setFont(font); add(thickExplLabel); thickLabel = new Label("0.00 (cm)"); thickLabel.setFont(font); add(thickLabel); validate(); } public boolean action(Event e, Object a) { if (e.target instanceof Button) { //parse chemical field String inputString = chemicalField.getText(); try { elementVector = NCNRUtils.parseCompound(inputString); } catch (BadCompoundException exc) { mfpLabel.setText(exc.getMessage()); thickLabel.setText(exc.getMessage()); return true; } //parse density field density=-1.; String errorText = "Bad Value for Density"; try { density=Double.valueOf(densityField.getText()).doubleValue(); } catch (NumberFormatException exc) { mfpLabel.setText(errorText); thickLabel.setText(errorText); return true; } if((density <= 0.0) || Double.isNaN(density)){ mfpLabel.setText(errorText); thickLabel.setText(errorText); return true; } //parse packing field packingFraction=-1.; errorText = "Bad Value for Packing"; try { packingFraction=Double.valueOf(packingField.getText()).doubleValue(); } catch (NumberFormatException exc) { mfpLabel.setText(errorText); thickLabel.setText(errorText); return true; } if (packingFraction > 1.0) { packingFraction = 1.0; packingField.setText(String.valueOf(1.0)); } if (packingFraction <= 0.0) { packingFraction = 0.01; packingField.setText(String.valueOf(0.01)); } if(Double.isNaN(packingFraction)){ mfpLabel.setText(errorText); thickLabel.setText(errorText); return true; } //parse percent field percentScatterer=-1.; errorText = "Bad Value for Percent"; try { percentScatterer=Double.valueOf(percentField.getText()).doubleValue(); } catch (NumberFormatException exc) { mfpLabel.setText(errorText); thickLabel.setText(errorText); return true; } if (percentScatterer >= 100.0) { percentScatterer = 99.0; percentField.setText(String.valueOf(99.0)); } if (percentScatterer <= 0.0) { percentScatterer = 1.0; percentField.setText(String.valueOf(1.0)); } if(Double.isNaN(percentScatterer)){ mfpLabel.setText(errorText); thickLabel.setText(errorText); return true; } //parse wavelength field wavelength=1.8; try { wavelength=Double.valueOf(lambdaField.getText()).doubleValue(); } catch (NumberFormatException exc) { lambdaField.setText(String.valueOf(1.8)); } if (wavelength <= 0.0) { wavelength = 1.8; lambdaField.setText(String.valueOf(1.8)); } String geometryString = geometryGroup.getCurrent().getLabel(); int geometry = 0; if (geometryString.equalsIgnoreCase("Slab")) geometry = 1; String signString = "+"; String outputText = ""; String realText =""; double[] output = NCNRUtils.calculateTrans(elementVector, density*packingFraction, percentScatterer, geometry, wavelength); double tempValue; double count; long tempSLD; //Arrange mean free path label if(Double.isNaN(output[0])) { outputText = "NaN"; mfpLabel.setText(outputText); } else { realText = String.valueOf(NCNRUtils.sigfigs(output[0],3)); outputText = realText+" (cm)"; mfpLabel.setText(outputText); } //Arrange thickness label if(Double.isNaN(output[1])) { outputText = "NaN"; thickLabel.setText(outputText); } else { realText = String.valueOf(NCNRUtils.sigfigs(output[1],3)); outputText = realText+" (cm)"; thickLabel.setText(outputText); } } return true; } }