예제 #1
0
        //SamplingResultのsig,ref含めた全データの平均を作る
        private List<SamplingResult> GetSamplingResultAverage(List<List<SamplingResult>> src,int avgCount) {
            List<SamplingResult> result = new List<SamplingResult>();

            for (int j = 0; j < src[0].Count; j++) {
                double sigDat = 0;
                double refDat = 0;
                double rDat = 0;
                //for (int i = 0; i < src.Count; i++) {
                for (int i = 0; i < avgCount; i++) {
                    sigDat += src[i][j]._sigDat;
                    refDat += src[i][j]._refDat;
                    rDat += src[i][j]._sigrefDivDat;
                }
                double avgSigDat = sigDat / (double)avgCount;
                double avgRefDat = refDat / (double)avgCount;
                double avgRDat = rDat / (double)avgCount;
                SamplingResult sr = new SamplingResult(avgSigDat, avgRefDat, avgRDat);
                result.Add(sr);
            }
            return result;
        }
예제 #2
0
		//透過率比
		private double MakeLuminousTransmittance(SamplingResult src) {
			double result = src.GetSigData() / src._refDat;
			return result;
		}
예제 #3
0
        public List<SamplingResult> MakeSamplingResultAverage(List<List<SamplingResult>> src) {
            List<SamplingResult> result = new List<SamplingResult>();
            double sigsum = 0;
            double refsum = 0;

            for (int j = 1; j < src[0].Count; j++) {
                for (int i = 0; i < src.Count; i++) {
                    sigsum += src[i][j].GetSigData();
                    refsum += src[i][j].GetRefData();
                }
                double avgSig = sigsum/(src.Count);
                double avgRef = refsum/(src.Count);
                double avgSigDivRef = avgSig/avgRef;

                SamplingResult sr = new SamplingResult(avgSig, avgRef, avgSigDivRef);
                result.Add(sr);
            }
            return result;
        }
예제 #4
0
        private void MovingAverage(List<List<SamplingResult>> src, int averageCnt) {

            List<List<SamplingResult>> result = new List<List<SamplingResult>>();

            int idx = 0;

            while (true) {
                if (idx + averageCnt < src.Count) {
                    SamplingResult[] buf = new SamplingResult[8];

                    for (int i = idx; i < averageCnt; i++) {
                        //List<SamplingResult> buf = new List<SamplingResult>();  //offset,ch1...ch8用
                        for (int j = 0; j < src[0].Count; j++) {
                            buf[j]._sigDat += src[i][j]._sigDat;
                            buf[j]._refDat += src[i][j]._refDat;
                            buf[j]._sigrefDivDat += src[i][j]._sigrefDivDat;
                        }
                    }

                    for (int j = 0; j < buf.Length; j++) {
                        buf[j]._sigDat /= averageCnt;
                        buf[j]._refDat /= averageCnt;
                        buf[j]._sigrefDivDat /= averageCnt;
                    }

                    idx++;

                } else {
                    break;
                }
            }


        }
예제 #5
0
		//平均されたデータから更にオフセットが引かれたデータを使ってSamplingResultを得る
		private List<SamplingResult> GetSamplingAverage(List<List<SamplingResult>> allSamplingResult) {
			List<SamplingResult> result = new List<SamplingResult>();

			for (int i = 0; i < allSamplingResult[0].Count; i++) {
				double sigBuf = 0;
				double refBuf = 0;
				double sigRefDivBuf = 0;

				for (int j = 0; j < allSamplingResult.Count; j++) {
					sigBuf += allSamplingResult[j][i].GetSigData();
					refBuf += allSamplingResult[j][i].GetRefData();
					sigRefDivBuf += allSamplingResult[j][i]._sigrefDivDat;
				}
				double avgSig = (double)sigBuf / (double)allSamplingResult.Count;
				double avgRef = (double)refBuf / (double)allSamplingResult.Count;
				double avgSigRefDiv = (double)sigRefDivBuf / (double)allSamplingResult.Count;

				SamplingResult sr = new SamplingResult(avgSig, avgRef, avgSigRefDiv);
				result.Add(sr);

			}
			return result;
		}
예제 #6
0
        ////素直にsig/refをする用
        private List<SamplingResult> MakeSigRefDivData(List<SamplingData> src) {
			List<SamplingResult> result = new List<SamplingResult>();
			foreach (SamplingData sd in src) {
				double sigRefDiv = (double)sd.GetSigData() / (double)sd.GetRefData();
				SamplingResult sr = new SamplingResult(sd.GetSigData(), sd.GetRefData(), sigRefDiv);
				result.Add(sr);
			}
			return result;
        }
예제 #7
0
        //SigとRef情報を使ってSig/Refを SamplingResultインスタンスに追加する
        private List<SamplingResult> MakeSigRefDivData(List<SamplingData> src, bool isForGamma) {
            List<SamplingResult> result = new List<SamplingResult>();

            //オフセットデータを削除
            //List<SamplingData> offsetRemovedSrc = new List<SamplingData>(src);
            //offsetRemovedSrc.RemoveAt(0);

            //下村さんの要請により16/3/18に変更 γ用のRと表示用のRの計算式を分ける
            if (isForGamma) {
                //校正係数成分を追加(γを求めるためのR用
                //R = k * (sig / ref)
                //後に右記の式でγを出す ln(Rk/R1) / ln(R2/R1)
                
                for (int i = 0; i < src.Count; i++) {
                    if (i == 0) {
                        //offset = ch0には校正係数が存在しないため、1をかけている。
                        double sigRefDiv = 1 * ((double)src[i].GetSigData() / (double)src[i].GetRefData());
                        SamplingResult sr = new SamplingResult(src[i].GetSigData(), src[i].GetRefData(), sigRefDiv);
                        result.Add(sr);
                    } else {
                        double sigRefDiv = double.Parse(_settings._data._ldCalib[i-1]) * ((double)src[i].GetSigData() / (double)src[i].GetRefData());
                        SamplingResult sr = new SamplingResult(src[i].GetSigData(), src[i].GetRefData(), sigRefDiv);
                        result.Add(sr);
                    }
                }
            } else {
                //通常の反射率算出用
                //R = k * [ (Sig / AgSig) / (Ref / AgRef)]
                //Ag...Attenator Gain
                for (int i = 0; i < src.Count; i++) {
                    if (i == 0) {
                        //offset = ch0には校正係数が存在しないため、1をかけている。
                        double sigRefDiv = 1 * (((double)src[i].GetSigData() / double.Parse(_settings._data._gain._sig)) / ((double)src[i].GetRefData() / double.Parse(_settings._data._gain._ref)));
                        SamplingResult sr = new SamplingResult(src[i].GetSigData(), src[i].GetRefData(), sigRefDiv);
                        result.Add(sr);
                    } else {
                        double sigRefDiv = double.Parse(_settings._data._ldCalib[i-1]) * (((double)src[i].GetSigData() / double.Parse(_settings._data._gain._sig)) / ((double)src[i].GetRefData() / double.Parse(_settings._data._gain._ref)));
                        SamplingResult sr = new SamplingResult(src[i].GetSigData(), src[i].GetRefData(), sigRefDiv);
                        result.Add(sr);

                    }
                }

            }

            return result;
        }
예제 #8
0
		private List<SamplingResult[]> MakeResult(List<double[]> sigDat, List<double[]> refDat, List<double[]> sigrefDivDat) {
			List<SamplingResult[]> sampResultList = new List<SamplingResult[]>();
			List<SamplingResult> srBuf = new List<SamplingResult>();
			for (int i = 0; i < sigDat.Count; i++) {
				for (int j = 0; j < sigDat[0].Length; j++) {
					SamplingResult sr = new SamplingResult(sigDat[i][j], refDat[i][j], sigrefDivDat[i][j]);
					srBuf.Add(sr);
				}
				sampResultList.Add(srBuf.ToArray());
				srBuf.Clear();
			}

			return sampResultList;
		}
예제 #9
0
        private List<SamplingResult> GetSamplingResultAverage(List<List<SamplingResult>> src) {
            List<SamplingResult> result = new List<SamplingResult>();
            int avgCount = src[0].Count;

            for (int i = 0; i < src.Count; i++) {
                double sigbuf = 0;
                double refbuf = 0;
                double sigrefdiv = 0;
                for (int j = 0; j < src[0].Count; j++) {
                    sigbuf += src[i][j].GetSigData();
                    refbuf += src[i][j]._refDat;
                    sigrefdiv += src[i][j]._sigrefDivDat;
                }
                SamplingResult sr = new SamplingResult(sigbuf / avgCount, refbuf / avgCount, sigrefdiv / avgCount);
                result.Add(sr);
            }

            return result;
        }