예제 #1
0
 public MethodData(double con, bool en, int prob_index, int sub_prob_index, int frame_index,
                   SpectrDataView data_view_sig, SpectrDataView data_view_nul,
                   Dispers disp)
 {
     Con          = con;
     Disp         = disp;
     En           = en;
     ProbIndex    = prob_index;
     SubProbIndex = sub_prob_index;
     FrameIndex   = frame_index;
     DataViewSig  = data_view_sig;
     DataViewNull = data_view_nul;
     float[][] nul = DataViewNull.GetFullDataNoClone();
     float[][] sig = DataViewSig.GetFullDataNoClone();
     DataMinusNull = new float[nul.Length][];
     for (int s = 0; s < nul.Length; s++)
     {
         int len = nul[s].Length;
         DataMinusNull[s] = new float[len];
         for (int i = 0; i < len; i++)
         {
             DataMinusNull[s][i] = sig[s][i] - nul[s][i];
         }
     }
 }
예제 #2
0
        static public SpectrDataView Add(SpectrDataView sdv1, SpectrDataView sdv2)
        {
            float[][] data1 = sdv1.GetFullData();
            float[][] data2 = sdv2.GetFullDataNoClone();
            for (int sn = 0; sn < data1.Length; sn++)
            {
                for (int i = 0; i < data1[sn].Length; i++)
                {
                    data1[sn][i] = (data1[sn][i] + data2[sn][i]) / 2;
                }
            }
            SpectrDataView ret = new SpectrDataView(sdv1.GetCondition(), data1,
                                                    (short)sdv1.OverloadLevel, (short)sdv1.MaxLinarLevel);

            return(ret);
        }
예제 #3
0
        List <double> HasLine(int sn, double ly, Dispers disp, int plus_minus, out double ly_real, out List <float[]> data)
        {
            int prob_count = Method.GetProbCount();
            //double ret = 0;
            int n_ret = 0;

            ly_real = 0;
            List <double> ret = new List <double>();

            data = new List <float[]>();
            for (int pr = 0; pr < prob_count; pr++)
            {
                MethodSimpleProb msp = Method.GetProbHeader(pr);
                for (int spr = 0; spr < msp.MeasuredSpectrs.Count; spr++)
                {
                    MethodSimpleProbMeasuring pm = msp.MeasuredSpectrs[spr];
                    if (pm.Sp == null)
                    {
                        continue;
                    }
                    SpectrDataView sdv      = pm.Sp.GetDefultView();
                    double         tmp      = 0;
                    double         ly_cur   = 0;
                    float[]        data_cur = null;
                    try
                    {
                        tmp = CheckLine(sn, ly, sdv.GetFullDataNoClone(), disp, plus_minus, out ly_cur, out data_cur);
                    }
                    catch
                    {
                    }
                    if (tmp == 0)
                    {
                        ly_real = -1;
                        data    = null;
                        return(null);
                    }
                    ly_real += ly_cur;
                    ret.Add(tmp);
                    data.Add(data_cur);
                    n_ret++;
                }
            }
            ly_real /= n_ret;
            return(ret);// / n_ret;
        }
예제 #4
0
        //0-empty-14 15-blank-28 29-signal-3676 3677-blank-3690
        float[] getData(SpectrDataView view)
        {
            short[] start = view.BlankStart[0];
            short[] end   = view.BlankEnd[0];
            float[] data  = view.GetFullDataNoClone()[0];
            float[] res   = new float[4096];
            int     ind   = 0;

            for (int i = 0; i < start.Length; i++, ind++)
            {
                res[ind] = start[i];
            }
            for (int i = 0; i < data.Length; i++, ind++)
            {
                res[ind] = data[i];
            }
            for (int i = 0; i < end.Length; i++, ind++)
            {
                res[ind] = end[i];
            }
            return(res);
        }
예제 #5
0
        void GetData(SpectrDataView data, Dispers disp, OpticFk fk,
                     out int[] sn, out int[] pixel, out int[] vpixel, out float[] signal, out float[] sens)
        {
            int[]     ss   = disp.GetSensorSizes();
            float[][] vals = data.GetFullDataNoClone();
            int       len  = 0;

            for (int s = 0; s < ss.Length; s++)
            {
                if (data.BlankStart != null)
                {
                    len += data.BlankStart[s].Length;
                }
                if (data.BlankEnd != null)
                {
                    len += data.BlankEnd[s].Length;
                }
                len += vals[s].Length;
            }

            sn     = new int[len];
            pixel  = new int[len];
            vpixel = new int[len];
            signal = new float[len];
            sens   = new float[len];

            int ind = 0;

            for (int s = 0; s < ss.Length; s++)
            {
                int pix  = 0;
                int vpix = 0;
                int l;
                if (data.BlankStart != null)
                {
                    l = data.BlankStart[s].Length;
                    for (int i = 0; i < l; i++, ind++, pix++)
                    {
                        sn[ind]     = s;
                        pixel[ind]  = pix;
                        vpixel[ind] = -1;
                        sens[ind]   = 1;
                        signal[ind] = data.BlankStart[s][i];
                    }
                }
                l = vals[s].Length;
                for (int i = 0; i < l; i++, ind++, pix++, vpix++)
                {
                    sn[ind]     = s;
                    pixel[ind]  = pix;
                    vpixel[ind] = vpix;
                    signal[ind] = vals[s][i];
                    sens[ind]   = 1;//fk.SensK[s][i];
                }
                if (data.BlankEnd != null)
                {
                    l = data.BlankEnd[s].Length;
                    for (int i = 0; i < l; i++, ind++, pix++)
                    {
                        sn[ind]     = s;
                        pixel[ind]  = pix;
                        vpixel[ind] = -1;
                        sens[ind]   = 1;
                        signal[ind] = data.BlankEnd[s][i];
                    }
                }
            }
        }