private void SetFolder(string path, bool updateTree = true) { // stop people from clicking on a new path while this one is loading treeViewDirUC1.Enabled = false; if (updateTree) { // update the tree (will can an event to re-call fhis function) treeViewDirUC1.SelectPath(path); return; } lsFolder = new LineScanFolder(path, analyzeImmediately: false); UpdateGuiFromLinescanFirst(); UpdateGuiFromLinescan(); if (!lsFolder.isValid) { SaveNeeded(false); } if (lsFolder.isValid && System.IO.File.Exists(lsFolder.pathIniFile)) { SaveNeeded(false); } // unlock the treeview treeViewDirUC1.Enabled = true; }
/// <summary> /// Load baseline, structure, and filter settings from LineScanSettings.ini in the linescan folder /// </summary> public static void Load(LineScanFolder ls) { if (!ls.isValid) { return; } if (!System.IO.File.Exists(ls.pathIniFile)) { return; } foreach (string rawLine in System.IO.File.ReadAllLines(ls.pathIniFile)) { string line = rawLine.Trim(); if (line.StartsWith(";")) { continue; } if (!line.Contains("=")) { continue; } string[] lineParts = line.Split('='); string var = lineParts[0]; string valStr = lineParts[1]; if (var == "baseline1") { ls.baseline1 = int.Parse(valStr); } else if (var == "baseline2") { ls.baseline2 = int.Parse(valStr); } else if (var == "structure1") { ls.structure1 = int.Parse(valStr); } else if (var == "structure2") { ls.structure2 = int.Parse(valStr); } else if (var == "filterPx") { ls.filterPx = int.Parse(valStr); } } }
/// <summary> /// Default filter time and baseline duration for unanalyzed linescans is stored in an INI next to this EXE. /// </summary> public static void LoadDefaultSettings(LineScanFolder ls) { if (!ls.isValid) { return; } if (!System.IO.File.Exists(ls.pathProgramSettings)) { StringBuilder sb = new StringBuilder(); sb.AppendLine("; ScanAGator default settings"); sb.AppendLine("baselineEndFrac = 0.10"); sb.AppendLine(";filterTimeMs = 50.0"); System.IO.File.WriteAllText(ls.pathProgramSettings, sb.ToString()); } string raw = System.IO.File.ReadAllText(ls.pathProgramSettings); string[] lines = raw.Split('\n'); foreach (string thisLine in lines) { string line = thisLine.Trim(); if (line.StartsWith(";") || !line.Contains("=")) { continue; } string var = line.Split('=')[0].Trim(); string val = line.Split('=')[1].Trim(); if (var == "baselineEndFrac") { ls.defaultBaselineEndFrac = double.Parse(val); } if (var == "filterTimeMs") { ls.defaultFilterTimeMs = double.Parse(val); } } }
/// <summary> /// Save baseline, structure, and filter settings to LineScanSettings.ini in the linescan folder /// </summary> public static void Save(LineScanFolder ls) { if (!ls.isValid) { return; } if (!System.IO.Directory.Exists(ls.pathSaveFolder)) { System.IO.Directory.CreateDirectory(ls.pathSaveFolder); } StringBuilder sb = new StringBuilder(); sb.AppendLine("; Scan-A-Gator Linescan Settings"); sb.AppendLine($"version={ls.version}"); sb.AppendLine($"baseline1={ls.baseline1}"); sb.AppendLine($"baseline2={ls.baseline2}"); sb.AppendLine($"structure1={ls.structure1}"); sb.AppendLine($"structure2={ls.structure2}"); sb.AppendLine($"filterPx={ls.filterPx}"); System.IO.File.WriteAllText(ls.pathIniFile, sb.Replace("\n", "\r\n").ToString().Trim()); }
public static string Text(LineScanFolder ls) { // name, unit, comment, data... int dataPoints = ls.imgG.height; string[] csvLines = new string[dataPoints + 3]; // times (ms) csvLines[0] = "Time, "; csvLines[1] = "ms, "; csvLines[2] = ls.folderName + ", "; for (int i = 0; i < dataPoints; i++) csvLines[i + 3] = Math.Round(ls.timesMsec[i], 3).ToString() + ", "; // raw PMT values (R) if (ls.curveR != null) { csvLines[0] += "R, "; csvLines[1] += "AFU, "; csvLines[2] += ", "; for (int i = 0; i < dataPoints; i++) csvLines[i + 3] += Math.Round(ls.curveR[i], 3).ToString() + ", "; } // raw PMT values (G) if (ls.curveG != null) { csvLines[0] += "G, "; csvLines[1] += "AFU, "; csvLines[2] += ", "; for (int i = 0; i < dataPoints; i++) csvLines[i + 3] += Math.Round(ls.curveG[i], 3).ToString() + ", "; } // delta raw PMT values (G) if (ls.curveDeltaG != null) { csvLines[0] += "dG, "; csvLines[1] += "AFU, "; csvLines[2] += ", "; for (int i = 0; i < dataPoints; i++) csvLines[i + 3] += Math.Round(ls.curveDeltaG[i], 3).ToString() + ", "; csvLines[0] += "f(dG), "; csvLines[1] += "AFU, "; csvLines[2] += "filtered, "; double[] filteredChopped = ls.GetFilteredYs(ls.curveDeltaG); double[] filtered = new double[dataPoints]; for (int i = 0; i < dataPoints; i++) filtered[i] = 0; Array.Copy(filteredChopped, 0, filtered, ls.filterPx * 2, filteredChopped.Length); for (int i = 0; i < dataPoints; i++) if (i < ls.filterPx * 2 || i > (dataPoints - ls.filterPx * 2 * 2)) csvLines[i + 3] += ", "; else csvLines[i + 3] += Math.Round(filtered[i], 3).ToString() + ", "; } // Green over Red if (ls.curveGoR != null) { csvLines[0] += "G/R, "; csvLines[1] += "%, "; csvLines[2] += ", "; for (int i = 0; i < dataPoints; i++) csvLines[i + 3] += Math.Round(ls.curveGoR[i], 3).ToString() + ", "; } // Delta Green over Red if (ls.curveDeltaGoR != null) { csvLines[0] += "dG/R, "; csvLines[1] += "%, "; csvLines[2] += ", "; for (int i = 0; i < dataPoints; i++) csvLines[i + 3] += Math.Round(ls.curveDeltaGoR[i], 3).ToString() + ", "; csvLines[0] += "f(dG/R), "; csvLines[1] += "AFU, "; csvLines[2] += "filtered, "; double[] filteredChopped = ls.GetFilteredYs(ls.curveDeltaGoR); double[] filtered = new double[dataPoints]; for (int i = 0; i < dataPoints; i++) filtered[i] = 0; Array.Copy(filteredChopped, 0, filtered, ls.filterPx * 2, filteredChopped.Length); for (int i = 0; i < dataPoints; i++) if (i < ls.filterPx * 2 || i > (dataPoints - ls.filterPx * 2 * 2)) csvLines[i + 3] += ", "; else csvLines[i + 3] += Math.Round(filtered[i], 3).ToString() + ", "; } // convert to CSV string csv = ""; foreach (string line in csvLines) csv += line + "\n"; return csv; }