//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; }
//透過率比 private double MakeLuminousTransmittance(SamplingResult src) { double result = src.GetSigData() / src._refDat; return result; }
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; }
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; } } }
//平均されたデータから更にオフセットが引かれたデータを使って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; }
////素直に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; }
//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; }
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; }
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; }