package Paparamborde.Actions;
import Paparamborde.ATOM_DATA.ATOM_DATA;
import Paparamborde.SRIM.SRIM;
import Paparamborde.STIMspectra.STIMspectra;
import Paparamborde.Layer.Layer;
import Paparamborde.Sample.Sample;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Date;
import java.util.StringTokenizer;
import javax.swing.JTextArea;
import javax.swing.JFileChooser;
import javax.swing.JRadioButton;
import javax.swing.JTextField;
/**
*
* @author Dev�s Guillaume, CENBG
*/
public class Actions{
public Actions(){
}
public void saveResults(javax.swing.JTextArea j){
}
/**
* Selects files to be computed and implements arraylist
* @param spectraArray
* @param jTA
* @param jFC
*/
public void selectFiles(ArrayList <STIMspectra> spectraArray, JTextArea jTA, JFileChooser jFC){
//Action performed for 'select files' button
spectraArray.clear();
jTA.setText("");
File [] selectedFiles = jFC.getSelectedFiles();
for (File f : selectedFiles){
jFC.setCurrentDirectory(f);
jTA.append(f.getAbsolutePath()+System.getProperty("line.separator" ));
STIMspectra spectra=new STIMspectra(f.getAbsolutePath());
spectraArray.add(spectra);
}
}
/**
* This function is used when update sample button is pressed
* @param layer1 Layer type Top layer
* @param layer2 Layer type Back layer
* @param jTA_results Text Area where results are displayed
* @param jTF_layer1 Text Field for top layer composition
* @param jTF_layer2 Text Field for back layer composition
* @param atm Atom_Data file required for srim
* @param srim
* @param jTF_density1 Text field for top layer density
* @param jTF_density2 Text field for back layer density
* @param jRB_state solid or gaz state of sample
* @param jTF_corr correction for stopping power calculation
*/
public void UpdateSample(Layer layer1, Layer layer2, JTextArea jTA_results, JTextField jTF_layer1, JTextField jTF_layer2, ATOM_DATA atm, SRIM srim1, JTextField jTF_density1, JTextField jTF_density2, JRadioButton jRB_state, JTextField jTF_corr){
try{
// Tab sample; Add button
layer1.reset();
layer2.reset();
jTA_results.setText("");
StringTokenizer st=new StringTokenizer(jTF_layer1.getText());
while (st.hasMoreTokens()) {
layer1.addElement(atm.getZ(st.nextToken()),Float.valueOf(st.nextToken()));
}
StringTokenizer st2=new StringTokenizer(jTF_layer2.getText());
while (st2.hasMoreTokens()) {
layer2.addElement(atm.getZ(st2.nextToken()),Float.valueOf(st2.nextToken()));
}
layer1.setDensity(Float.valueOf(jTF_density1.getText()));
layer2.setDensity(Float.valueOf(jTF_density2.getText()));
srim1.setSolidTarget((jRB_state.isSelected())?0:1);
srim1.setCorr(Float.valueOf(jTF_corr.getText()));
//Displays read composition in text field
jTA_results.append("Layer 1 :"+"\n");
for (int i=0;i<layer1.getNElement();i++){
jTA_results.append(String.valueOf(layer1.getZ(i))+ " " + String.valueOf(layer1.getAtConc(i)/layer1.NormalizeAtConc())+"\n");
}
jTA_results.append("Density: " +String.valueOf(layer1.getDensity())+ "\n"+"\n");
jTA_results.append("Layer 2 :"+"\n");
for (int i=0;i<layer2.getNElement();i++){
jTA_results.append(String.valueOf(layer2.getZ(i))+ " " + String.valueOf(layer2.getAtConc(i)/layer2.NormalizeAtConc())+"\n");
}
jTA_results.append("Density: " +String.valueOf(layer2.getDensity())+ "\n");
Date d=new Date();
jTA_results.append("Done: "+d.toString()+"\n");
}
catch (Exception e){
jTA_results.append("Error: " +e.toString());
}
}
public void UpdateSample(Layer layer, JTextArea jTA_results, JTextField jTF_sample, ATOM_DATA atm, SRIM srim, JTextField jTF_density, JRadioButton jRB_state, JTextField jTF_corr){
try{
// Tab sample; Add button
layer.reset();
StringTokenizer st=new StringTokenizer(jTF_sample.getText());
while (st.hasMoreTokens()) {
layer.addElement(atm.getZ(st.nextToken()),Float.valueOf(st.nextToken()));
}
layer.setDensity(Float.valueOf(jTF_density.getText()));
srim.setSolidTarget((jRB_state.isSelected())?0:1);
srim.setCorr(Float.valueOf(jTF_corr.getText()));
//Displays read composition in text field
jTA_results.append("Layer :"+"\n");
for (int i=0;i<layer.getNElement();i++){
jTA_results.append(String.valueOf(layer.getZ(i))+ " " + String.valueOf(layer.getAtConc(i)/layer.NormalizeAtConc())+"\n");
}
jTA_results.append("Density: " +String.valueOf(layer.getDensity())+ "\n"+"\n");
Date d=new Date();
jTA_results.append("Done: "+d.toString()+"\n"+"\n");
}
catch (Exception e){
jTA_results.append("Error: " +e.toString());
}
}
public void Calibrate(JTextField jTF_Z, JTextField jTF_E0, JTextField jTF_a,JTextField jTF_b,JTextField jTF_c, ArrayList <STIMspectra> spectraArray, JTextArea jTA_results){
//Action performed for 'calibrate' button
jTA_results.setText("");
int Z=Integer.valueOf(jTF_Z.getText());
float E0, a, b, c;
E0=Float.valueOf(jTF_E0.getText());
a=Float.valueOf(jTF_a.getText());
b=Float.valueOf(jTF_b.getText());
c=Float.valueOf(jTF_c.getText());
for (int i=0;i<spectraArray.size();i++){
(spectraArray.get(i)).calibrate(Z,E0,a,b,c);
}
jTA_results.append("number of files= "+ String.valueOf(spectraArray.size())+"\n");
if (spectraArray.size()>0){
jTA_results.append("E0="+String.valueOf((spectraArray.get(0)).getE0())+"\n");
jTA_results.append("Z="+String.valueOf((spectraArray.get(0)).getIon())+"\n");
jTA_results.append("a="+String.valueOf((spectraArray.get(0)).getA())+"\n");
jTA_results.append("b="+String.valueOf((spectraArray.get(0)).getB())+"\n");
jTA_results.append("c="+String.valueOf((spectraArray.get(0)).getC())+"\n");
}
Date d=new Date();
jTA_results.append("Done: "+d.toString()+"\n");
}
/*public void WriteSRIN(JTextArea jTA_IN, SRIM srim, ArrayList <STIMspectra> spectraArray, Layer smp, JTextField jTF_min, JTextField jTF_max){
jTA_IN.setText("");
Date d=new Date();
try {
srim.writeSRIN(spectraArray.get(0),smp,Integer.valueOf(jTF_min.getText()),Integer.valueOf(jTF_max.getText()));
srim.runSRModule();
Thread.sleep(200);
//Implements spectra
for (int i=0;i<spectraArray.size();i++){
srim.readSROUT(spectraArray.get(i),spectraArray.get(i).get1stChannel());
}
//Display result in window
InputStream ips=new FileInputStream(srim.getSRINpath());
InputStreamReader ipsr=new InputStreamReader(ips);
BufferedReader br=new BufferedReader(ipsr);
String ligne=br.readLine();
while (ligne!= null){
jTA_IN.append(ligne+"\n");
ligne=br.readLine();
}
jTA_IN.append("Done: " +d.toString());
}
catch (Exception e){
jTA_IN.append(d.toString() +"Error: " +e.toString()+"\n"+d.toString()+"\n");
}
}*/
public void WriteSRIN(JTextArea jTA_IN, SRIM srim, ArrayList <STIMspectra> spectraArray, Sample sample,int nlayer, JTextField jTF_min, JTextField jTF_max){
//jTA_IN.setText("");
Date d=new Date();
try {
srim.writeSRIN(spectraArray.get(0),sample.getLayer(nlayer),Integer.valueOf(jTF_min.getText()),Integer.valueOf(jTF_max.getText()));
srim.runSRModule();
Thread.sleep(200);
//Implements spectra
srim.readSROUT(spectraArray.get(0), spectraArray.get(0).get1stChannel());
spectraArray.get(0).measure();
sample.setLayerMPC(nlayer,(ArrayList<Float>)(spectraArray.get(0).getMassArray()).clone());
//Display result in window
InputStream ips=new FileInputStream(srim.getSRINpath());
InputStreamReader ipsr=new InputStreamReader(ips);
BufferedReader br=new BufferedReader(ipsr);
String ligne=br.readLine();
while (ligne!= null){
jTA_IN.append(ligne+"\n");
ligne=br.readLine();
}
jTA_IN.append("Done: " +d.toString());
}
catch (Exception e){
jTA_IN.append(d.toString() +"Error: " +e.toString()+"\n"+d.toString()+"\n");
}
}
public void Calculate(ArrayList <STIMspectra> spectraArray,JTextArea jTA_results, JTextField jTF_min,JTextField jTF_max, JTextField jTF_density, int nLayer){
Date d=new Date();
Sample s=new Sample(2);
//try{
for (int i=0;i<spectraArray.size();i++){
spectraArray.get(i).measure(Integer.valueOf(jTF_min.getText()),Integer.valueOf(jTF_max.getText()));
s.setCounts(spectraArray.get(i));
jTA_results.append("Spectrum: " + spectraArray.get(i).getPath()+" Mass (�g/cm�): " + spectraArray.get(i).massCalc()+"\n");
jTA_results.append("Thichness (nm): " + 10*spectraArray.get(i).massCalc()/Float.valueOf(jTF_density.getText()) +"\n");
jTA_results.append("Mass: " + s.getMass(nLayer-1) +"\n");
}
jTA_results.append("Done: "+d.toString()+"\n");
/*}
catch (Exception e){
jTA_results.append(d.toString()+ " Error: " +e.toString()+"\n");
}*/
}
public void Calculate(Sample sample,ArrayList <STIMspectra> spectraArray,JTextArea jTA_results, JTextField jTF_min,JTextField jTF_max, JTextField jTF_density, int nLayer, JTextField jTF_limit){
Date d=new Date();
//try{
for (int i=0;i<spectraArray.size();i++){
sample.setCounts(spectraArray.get(i));
float [] results = new float [2];
results=sample.getMass(2, Float.valueOf(jTF_limit.getText()));
jTA_results.append("Spectrum: " + spectraArray.get(i).getPath()+" Layer 1 (�g/cm�): " + String.valueOf(results[1]) +"\n");
jTA_results.append("Spectrum: " + spectraArray.get(i).getPath()+" Layer 2 (�g/cm�): " + String.valueOf(results[2]) +"\n");
jTA_results.append("Spectrum: " + spectraArray.get(i).getPath()+" Not corrected (�g/cm�): " + String.valueOf(spectraArray.get(0).massCalc()) +"\n");
jTA_results.append("Interface (keV): [" + String.valueOf(results[0]) +"] " +String.valueOf(spectraArray.get(0).getE0()-results[0]*spectraArray.get(0).getB())+"\n");
}
jTA_results.append("Done: "+d.toString()+"\n");
/*}
catch (Exception e){
jTA_results.append(d.toString()+ " Error: " +e.toString()+"\n");
}*/
}
public void Calculate(ArrayList <STIMspectra> spectraArray,JTextArea jTA_results){
Date d=new Date();
try{
for (int i=0;i<spectraArray.size();i++){
spectraArray.get(i).measure();
jTA_results.append("Spectrum: " + spectraArray.get(i).getPath()+" Mass (�g/cm�): " + spectraArray.get(i).massCalc()+"\n");
}
jTA_results.append("Done: "+d.toString()+"\n");
}
catch (Exception e){
jTA_results.append(d.toString()+ " Error: " +e.toString()+"\n");
}
}
public void ReadSROut(JTextArea jTA_OUT, SRIM srim){
//jTA_OUT.setText("");
jTA_OUT.setText(srim.getSRout());
}
public void runSRModule(SRIM srim){
srim.runSRModule();
}
}