美文网首页
TCID50计算器-6.0JAVA版

TCID50计算器-6.0JAVA版

作者: 火卫控 | 来源:发表于2023-10-12 09:29 被阅读0次

代码如下:

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.text.AttributeSet.ColorAttribute;
import java.awt.*;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.*;



public class jframe_tcid50
{
    String s;
    public static void main(String[] agrs)
    {
        JFrame jFrame=new JFrame("TCID50计算器 6.0.1 Java版");    //创建Frame窗口
        ImageIcon imageIcon=new ImageIcon("./image/1.png");
        jFrame.setIconImage(imageIcon.getImage()); 
        //jFrame.getContentPane().setBackground(Color.red);
        // jFrame.setBackground(Color.GREEN);
        JPanel jPanel=new JPanel();    //创建面板
        
        
        JPanel jpanel2 = new JPanel(new  FlowLayout());
        

        // Color c = new Color(240,240,251);
        // jPanel.setBackground(c);

            // 1:设置字段

            Font fon =new Font("等线",Font.PLAIN, 20);

            // 2:创建一个标签

            JLabel labone= new JLabel("输入各稀释倍数的病变孔数(正整数)(从低稀释倍数开始)          ");

            // 3:设置它的字体

            labone.setFont(fon);

            // 4:设置标签的大小

            labone.setBounds(0,0,200,60);

            // 5:设置标签字体的颜色
            Color la1 = new Color(50,50,50);

            labone.setForeground(la1);

        JTextField jt1 = new JTextField();
        jt1.setColumns(4);
        jt1.setText("8");
        jt1.setFont(new Font("黑体",Font.PLAIN,20));
        // jt1.setBackground(c);
        jt1.setHorizontalAlignment(JTextField.CENTER);

        JTextField jt2 = new JTextField();
        jt2.setColumns(4);
        jt2.setText("8");
        jt2.setFont(new Font("黑体",Font.PLAIN,20));

        JTextField jt3 = new JTextField();
        jt3.setColumns(4);
        jt3.setText("8");
        jt3.setFont(new Font("黑体",Font.PLAIN,20));

        JTextField jt4 = new JTextField();
        jt4.setColumns(4);
        jt4.setText("7");
        jt4.setFont(new Font("黑体",Font.PLAIN,20));

        JTextField jt5 = new JTextField();
        jt5.setColumns(4);
        jt5.setText("3");
        jt5.setFont(new Font("黑体",Font.PLAIN,20));

        JTextField jt6 = new JTextField();
        jt6.setColumns(4);
        jt6.setText("1");
        jt6.setFont(new Font("黑体",Font.PLAIN,20));

        JTextField jt7 = new JTextField();
        jt7.setColumns(4);
        jt7.setText("0");
        jt7.setFont(new Font("黑体",Font.PLAIN,20));

        JTextField jt8 = new JTextField();
        jt8.setColumns(4);
        jt8.setText("0");
        jt8.setFont(new Font("黑体",Font.PLAIN,20));

        jt1.setHorizontalAlignment(JTextField.CENTER);
        jt2.setHorizontalAlignment(JTextField.CENTER);
        jt3.setHorizontalAlignment(JTextField.CENTER);
        jt4.setHorizontalAlignment(JTextField.CENTER);
        jt5.setHorizontalAlignment(JTextField.CENTER);
        jt6.setHorizontalAlignment(JTextField.CENTER);
        jt7.setHorizontalAlignment(JTextField.CENTER);
        jt8.setHorizontalAlignment(JTextField.CENTER);

        jPanel.add(labone);  //添加Lable控件
        jPanel.add(jt1);
        jPanel.add(jt2);
        
        jPanel.add(jt3);
        jPanel.add(jt4);
        jPanel.add(jt5);
        jPanel.add(jt6);
        jPanel.add(jt7);
        jPanel.add(jt8);

        // JButton btn1=new JButton("TCID50的值为:10 ^ (?) / mL");    //创建按钮

        Font fon2 =new Font("等线",Font.BOLD, 18);
        JLabel lab2= new JLabel("TCID50的值为:10 ^ (?) / mL");
        lab2.setFont(fon2);
        lab2.setBounds(0,0,200,60);
        Color la2 = new Color(50,50,50);
        lab2.setForeground(la2);

        JTextField jtout = new JTextField();
        jtout.setColumns(12);
        jtout.setText("");
        jtout.setFont(new Font("黑体",Font.PLAIN,20));
        jtout.setHorizontalAlignment(JTextField.CENTER);
        // jtout.setBackground(Color.LIGHT_GRAY);
        jtout.setForeground(Color.RED);

        JButton btn2=new JButton("计算");
        btn2.setBackground(Color.orange);
        jFrame.getRootPane().setDefaultButton(btn2);
        JButton btn3=new JButton("清除");
        btn3.setBackground(Color.orange);
        
        
        
        
        
        
        // jpanel2.add(btn1);    //面板中添加按钮
        jPanel.add(lab2);
        jpanel2.add(jtout);
        jpanel2.add(btn2);
        jpanel2.add(btn3);
    
        //向JPanel添加FlowLayout布局管理器,将组件间的横向和纵向间隙都设置为20像素
        jPanel.setLayout(new FlowLayout(FlowLayout.LEADING,20,20));
        // jPanel.setBackground(Color.gray);    //设置背景色

        jFrame.add(jPanel);    //添加面板到容器
        
        Color jpb = new Color(220,220,250);
        jPanel.setBackground(jpb);

        jFrame.setBounds(300,200,600,250);    //设置容器的大小
        
        jPanel.add(jpanel2);

        Font fon3 =new Font("等线",Font.PLAIN, 18);
        JLabel lab3= new JLabel("Copyright © 2022 SCAU ");
        lab3.setFont(fon3);
        lab3.setBounds(0,0,200,60);
        Color la3 = new Color(50,50,50);
        lab3.setForeground(la3);

        //第三行
        JButton btn4=new JButton("帮助");
        btn4.setBackground(Color.orange);
        
        JPanel jPanle3 = new JPanel();
        jPanle3.add(lab3);
        // jPanle3.add(btn4);

        jPanel.add(jPanle3);
        jPanel.add(btn4);

        //版本号Label
        Font fon4 =new Font("楷体",Font.PLAIN, 18);
        JLabel lab4= new JLabel("华南农业大学 传染病教研室");
        lab4.setFont(fon4);
        lab4.setBounds(0,0,200,60);
        Color la4 = new Color(50,50,50);
        lab4.setForeground(la4);

        jPanel.add(lab4);

        //计算
        btn2.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e){
                Double a1 = Double.parseDouble(jt1.getText());
                Double a2 = Double.parseDouble(jt2.getText());
                Double a3 = Double.parseDouble(jt3.getText());
                Double a4 = Double.parseDouble(jt4.getText());
                Double a5 = Double.parseDouble(jt5.getText());
                Double a6 = Double.parseDouble(jt6.getText());
                Double a7 = Double.parseDouble(jt7.getText());
                Double a8 = Double.parseDouble(jt8.getText());

                Double[] cpes = {a1,a2,a3,a4,a5,a6,a7,a8};
                // Double  tcid50v=0.0 ;
                // for(Double x:cpe){
                //     tcid50v = tcid50v + x;
                // }
                // String s = String.valueOf(tcid50v);
                // String s1 = jisuan(cpe[8]);

                // System.out.println("文本框中的内容为:" + jt.getText());
                // System.out.println(cpe);
                // s = jisuan(cpe);
                
            double[] b = new double[8];
            double[] a_acc = new double[8];
            double[] b_acc = new double[8];
            double[] ab_acc = new double[8];
            double[] a_ratio = new double[8];
            double gd50z = 0.0,
                    gd50 = 0.0,
                    d50 = 0.0,
                    s = 0.0,
                    tcid50j = 0.0,
                    copies = 8;  //重复数
            // copies = Convert.ToDouble(textBox10.Text);

            for (int i = 0; i < 8; i++)
            {
                b[i] = copies - cpes[i];
            }

            // 计算CPE累积孔数,


            for (int i = 7; i >= 0; i--)
            {
                s = s + cpes[i];
                a_acc[i] = s;
            }
            // Console.WriteLine("\n CPE累积孔数为:\n " + a_acc[0]);

            //计算非CPE累积孔数
            s = 0;
            for (int i = 0; i < 8; i++)
            {
                s = s + b[i];
                b_acc[i] = s;
            }
            // Console.WriteLine("\n 非CPE累积孔数为:\n " + b_acc[0]);

            // 计算总累积孔数
            for (int i = 0; i < 8; i++)
            {
                ab_acc[i] = a_acc[i] + b_acc[i];
            }
            // Console.WriteLine("\n 总累积孔数为:\n " + ab_acc[0]);

            // 计算各CPE累积孔数 占 总累积孔数(CPE累积和非CPE累积)的 比例
            for (int i = 0; i < 8; i++)
            {

                a_ratio[i] = a_acc[i] / ab_acc[i];
            }

            // Console.WriteLine("\n CPE累积占比为:\n " + a_ratio[0] + a_ratio[1] + a_ratio[2] + a_ratio[3] + a_ratio[4]);


            // 寻找大于等于最接近于50%的稀释度 占率


            for (int i = 7; i >= 0; i--)
            {

                if (a_ratio[i] >= 0.5)
                {
                    gd50z = a_ratio[i];
                    gd50 = i;
                    break;
                }
            }



            // 寻找小于50%且最近于50%的稀释度 占率

            for (int i = 0; i < 8; i++)
            {
                if (a_ratio[i] < 0.5)
                {
                    // Console.WriteLine("现在a-ra为: " + a_ratio[i] + "  i为: " + i);
                    d50 = a_ratio[i];
                    break;
                }
            }



            // 计算距离
            s = (gd50z - 0.5) / (gd50z - d50);
            // Console.WriteLine("gd50, gd50z分别为:  " + gd50 + gd50z);
            // Console.WriteLine("距离为:  " + s);
            // 计算lg(TCID50) =
            double tcid50 = -(gd50  + 1 + s);

            // Console.WriteLine(tcid50);

            // Double unit_index = Convert.ToDouble(comboBox1.SelectedIndex);   //获取原液上样体积
            
            // Double init = Convert.ToDouble(textBox11.Text);             //获取起始稀释度

            //考虑毒液测试体积,通常为100uL,index为0
            // if (unit_index == 0)
            // {
            //     tcid50 = tcid50 - 1;
            // }
            // else if (unit_index == 1)
            // {
            //     tcid50 = tcid50 - Math.Log(5, 10);
            // }
            // else if (unit_index == 2)
            // {
            //     tcid50 = tcid50 - Math.Log(2, 10);
            // }
            // else if (unit_index == 3)
            // {
            //     tcid50 = tcid50;
            // }

            // //考虑起始稀释倍数,负对数通常为-1
            // tcid50 = tcid50 - init;


            // Double tcid50_unit = Convert.ToDouble(textBox19.Text);             //获取TCID50单位
            // //处理结果单位
            // Double volume_change = Math.Log(1/tcid50_unit)/Math.Log(10);
            // tcid50 = (tcid50 - volume_change) ;

            // //格式化输出
            // String tcid50f4 = tcid50.ToString("F4");
            // textBox9.Text = tcid50f4;
            // //textBox9.Text = Convert.ToString(tcid50).ToString("F4");

            // String tcid50v =String.valueOf(tcid50);
            String result = new java.text.DecimalFormat("#.0000").format(tcid50);

                jtout.setText(result);  //请空文本框
                jt1.requestFocus();//获取焦点
            }
        });

        //清除
        btn3.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e){
                jtout.setText("");  //请空文本框
                jt1.setText("");
                jt2.setText("");
                jt3.setText("");
                jt4.setText("");
                jt5.setText("");
                jt6.setText("");
                jt7.setText("");
                jt8.setText("");
                // jt.setText("");
                jt1.requestFocus();//获取焦点
            }
        });        

        //帮助
        btn4.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e){
                // String help_info = "本款TCID50计算器采用Reed-Muench两氏法,可用于计算TCID50, EID50等\r\n";

                String line1 = "本款TCID50计算器采用Reed-Muench两氏法,可用于计算TCID50, EID50等.";
                String line2 = "TCID50, median tissue culture infective dose, 半数组织培养感染剂量, 即指\r\n能在培养板孔或试管内引起半数细胞病变或死亡(cytopathic effect, CPE)\r\n所需的病毒量,用以表征病毒的滴度。";
                String line3 = "\n注意:这里的病毒量不是具体的浓度,而是将原始样品稀释的倍数。";
                String line4 = "比如,1 mL培养液,稀释1000倍后恰好导致50 % 的细胞感染,则TCID50为\r\n1000 / mL。意思是每mL样品中含有的病毒导致50 % 细胞感染需要稀释的倍数。";
                String line5 = "可根据测试病毒体积,起始稀释倍数等参数计算TCID50,";
                String line6 = "\n版本号:6.0.1_java版";
                String line7 = "更新日期:2022 / 1 / 25";
                String line8 = "作者:艾强云";
                String line9 = "联系方式(E - mail):aqy0716@163.com";
                String help_info =(line1 + "\r\n" + line2 + "\r\n" + line3 + "\r\n" + line4 + "\r\n" + line5 + "\r\n" + line6 + "\r\n" + line7 + "\r\n" + line8 + "\r\n" + line9);
       
                // TCID50, median tissue culture infective dose, 半数组织培养感染剂量, 即指能在培养板孔或试管内引起半数细胞病变或死亡(cytopathic effect, CPE)所需的病毒量,用以表征病毒的滴度。";
                // \n注意:这里的病毒量不是具体的浓度,而是将原始样品稀释的倍数。
                // 比如,1 mL培养液,稀释1000倍后恰好导致50 % 的细胞感染,则TCID50为1000 / mL。意思是每mL样品中含有的病毒导致50 % 细胞感染需要稀释的倍数。
                // 可根据测试病毒体积,起始稀释倍数等参数计算TCID50,
                // \n版本号:6.0.1_java版
                // 更新日期:2022 / 1 / 25
                // 作者:艾强云
                // 联系方式(E - mail):aqy0716@163.com";
                // String help_info="jfdska";
                JOptionPane.showMessageDialog( null,help_info,"帮助信息",1);
            }
        });   
        

        jFrame.setVisible(true);
        jFrame.setResizable(false);
        jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    public  static String jisuan(Double [] cpe){
        String s="";
        Double  tcid50v=0.0 ;
                for(Double x:cpe){
                    tcid50v = tcid50v + x;
                }
        s  = String.valueOf(tcid50v);
        return s;    
    }
}

相关文章

网友评论

      本文标题:TCID50计算器-6.0JAVA版

      本文链接:https://www.haomeiwen.com/subject/guhsbdtx.html