public void AddFittingProfile(ROISpectra currentROI) { string base_name = currentROI.Name; string name = base_name; int i = 0; while (FittingProfiles.Select(p => p.Name).Contains(name)) { i++; name = $"{base_name}({i})"; } FittingProfiles.Add(new FittingProfile() { Name = name, // 微分を考慮していない! RangeBegin = currentROI.Parameter.Start, RangeEnd = currentROI.Parameter.Stop }); }
/// <summary> /// 指定したROIについてのスペクトルデータを出力します.diffRangeに正の値を与えると,微分スペクトルを出力します. /// </summary> /// <param name="roi"></param> /// <param name="destination"></param> /// <param name="diffRange"></param> /// <returns></returns> public async Task ExportCsvAsync(ROISpectra roi, string destination, int diffRange = 0) { if (diffRange < 0) { throw new ArgumentException("diffRangeには0か正の値を指定して下さい.", "diffRange"); } using (var writer = new StreamWriter(destination, false)) { if (diffRange > 0) { await roi.Differentiate(diffRange).ExportCsvAsync(writer); } else { await roi.ExportCsvAsync(writer); } } }
// (0.3.0)Tiltを考慮. #region *パラメータを読み込む(ReadParaPeakAsync) /// <summary> /// para.peakファイルを読み込みます。 /// </summary> /// <param name="directory"></param> /// <returns></returns> protected async Task <ROISpectra[]> ReadParaPeakAsync(string directory) { // $AP_DEP_ROI_NOFEXE 6 /* * $AP_DEP_ROI_EXEMOD 1 1 * $AP_DEP_ROI_NAME 1 Ti * $AP_DEP_ROI_START 1 404.00 * $AP_DEP_ROI_STOP 1 431.00 * $AP_DEP_ROI_STEP 1 0.50 * $AP_DEP_ROI_POINTS 1 55 * $AP_DEP_ROI_DWELL 1 200 * $AP_DEP_ROI_SWEEPS 1 5 * $AP_DEP_ROI_ACQRSF 1 0.414 */ //ROIParameters[0] = new ROIParameter(); ROISpectra[] roi_spectra = null; decimal? current = null; double? tilt = null; using (var reader = new StreamReader(new FileStream(Path.Combine(directory, "para"), FileMode.Open, FileAccess.Read))) { while (reader.Peek() > -1) { var line = await reader.ReadLineAsync(); var cols = line.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries); if (cols.Count() > 1) { switch (cols[0]) { case "$AP_DEP_CYCLES": Cycles = Convert.ToInt32(cols[1]); break; case "$AP_PCURRENT": current = ScanParameter.ConvertPressure(cols[1], cols[2]); break; case "$AP_STGTILT": tilt = Convert.ToDouble(cols[1]); break; case "$AP_DEP_ROI_NOFEXE": int count = Convert.ToInt32(cols[1]); roi_spectra = new ROISpectra[count]; for (int i = 0; i < count; i++) { // ここで各要素を初期化しておく。 roi_spectra[i] = new ROISpectra(); } break; //goto SCAN_ROI; // switch内でループから脱出するための黒魔術。 } } } } if (roi_spectra == null) { throw new Exception("para.peakファイルに $AP_DEP_ROI_NOFEXEキーがありませんでした。"); } // roi_parametersが初期化されていることを保証するために、ループを2つに分ける。 //SCAN_ROI: int ch; using (var reader = new StreamReader(new FileStream(Path.Combine(directory, "para.peak"), FileMode.Open, FileAccess.Read))) { while (reader.Peek() > -1) { var line = reader.ReadLine(); var cols = line.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries); if (cols.Count() > 1) { switch (cols[0]) { case "$AP_DEP_ROI_NAME": ch = Convert.ToInt32(cols[1]) - 1; roi_spectra[ch].Name = cols[2]; break; case "$AP_DEP_ROI_START": ch = Convert.ToInt32(cols[1]) - 1; roi_spectra[ch].Parameter.Start = Convert.ToDecimal(cols[2]); break; case "$AP_DEP_ROI_STOP": ch = Convert.ToInt32(cols[1]) - 1; roi_spectra[ch].Parameter.Stop = Convert.ToDecimal(cols[2]); break; case "$AP_DEP_ROI_STEP": ch = Convert.ToInt32(cols[1]) - 1; roi_spectra[ch].Parameter.Step = Convert.ToDecimal(cols[2]); break; //case "$AP_DEP_ROI_POINTS": // ch = Convert.ToInt32(cols[1]) - 1; // ROIParameters[ch].noPoints = Convert.ToInt32(cols[2]); // break; case "$AP_DEP_ROI_DWELL": ch = Convert.ToInt32(cols[1]) - 1; roi_spectra[ch].Parameter.Dwell = Convert.ToInt32(cols[2]) * 1e-3M; // ここでcurrentを設定する。 roi_spectra[ch].Parameter.Current = current.Value; // HasValueでないことは想定していない。 // ※AP_STGTILTがAP_DEP_ROI_NOFEXEより後に出てくるので,ここでは値が設定されていない! roi_spectra[ch].Parameter.Tilt = tilt.Value; // HasValueでないことは想定していない。 break; } } } } return(roi_spectra); }
// 指定したROIを,フィッティング対象に追加する. public void AddFittingProfile(ROISpectra roi) { FittingCondition.AddFittingProfile(roi); }