private static bool WriteLineLog(ref HelixSoloSensor sensor, HelixImage image, string resultFolder) { List <string> logLines = new List <string>(); logLines.AddRange(new string[] { $"{sensor.SerialNumber}\t{sensor.PartNumber}\t{sensor.Date}", image.Name, "CG_Row\tCG_Col\tWidth\tPeak_Intensity\tFocus_Score" }); if (image.CGs.Count > 0) { foreach (CGInfo cg in image.CGs) { logLines.Add(cg.ToString()); } logLines.AddRange(new string[] { $"\nCG Count:\t{image.CGs.Count}\n", $"CG Avg:\t{image.CgAverages.Item2}", $"CG Avg Left:\t{image.CgAverages.Item1}", $"CG Avg Right:\t{image.CgAverages.Item3}\n", $"Width Avg:\t{image.WidthAverages.Item2}", $"Width Avg Left:\t{image.WidthAverages.Item1}", $"Width Avg Right:\t{image.WidthAverages.Item3}\n", $"Line Angle Degrees:\t{image.LineAngle}\n", $"Line Focus Score:\t{image.FocusScore}" }); } else { logLines.Add("\nNo laser line found"); } string path = Path.Join(resultFolder, $"{Path.GetFileNameWithoutExtension(image.Name)}.txt"); File.WriteAllLines(path, logLines); return(true); }
static public HelixSoloSensor SingleSoloAccuracyFromLog(HelixSoloSensor sensor, bool first = false) { List <string[]> resultSplit = GetResultsLogSplit(); foreach (string[] lineSplit in resultSplit) { if (lineSplit[0] == sensor.SerialNumber) { if (lineSplit.Length < 190) { continue; } //Check "Test Accuracy Status" and "0 Deg. 2 RMS error" if ((lineSplit[187] == "Finished") & float.TryParse(lineSplit[45], out float rms2)) { if (rms2 ! < 0) { continue; } if (sensor.AccuracyResult.UpdateFromLog(lineSplit)) { if (first) { break; } } } } } return(sensor); }
static public HelixSoloSensor AllSoloDataSingle(HelixSoloSensor sensor) { if (sensor.SerialNumber != "") { return(SingleSoloAccuracyFromLog( SingleSensorSoloFocus( SingleSensorSoloLaser(sensor )))); } else { return(sensor); } }
private static bool WriteSummaryLog(ref HelixSoloSensor sensor, List <HelixImage> images, string resultFolder) { List <string> logLines = new List <string>(); logLines.AddRange(new string[] { $"{sensor.SerialNumber}\t{sensor.PartNumber}\t{sensor.Date}\n", "Z_Values\t Focus_Score" }); foreach (HelixImage image in images) { logLines.Add($"{image.ZValue}\t{image.FocusScore}"); } string path = Path.Join(resultFolder, "Focus_Summary.txt"); File.WriteAllLines(path, logLines); return(true); }
static public HelixSoloSensor SingleSensorSoloFocus(HelixSoloSensor sensor) { foreach (string line in File.ReadAllLines(Config.SoloFocusLog)) { string[] split = line.Split("\t"); if (split.Length < 20) { continue; } if (split[4] == sensor.SerialNumber) { sensor.FocusData = new SoloFocusData(line); } } return(sensor); }
public static void LineAnalysis(string rectFolder) { if (!Directory.Exists(rectFolder)) //If folder doesn't exist { MessageBox.Show("The specified directory doesn't exist.", "Directory Not Found", MessageBoxButton.OK, MessageBoxImage.Error); return; } HelixSoloSensor sensor = new HelixSoloSensor(rectFolder); List <HelixImage> images = GetSoloLineImages(rectFolder); if (images.Count == 0) //If no images { MessageBox.Show("No unfiltered laser images found", "No Laser Images", MessageBoxButton.OK, MessageBoxImage.Error); return; } //Create results folder string resultFolder = Path.Join(rectFolder, @"\Line Analysis"); Directory.CreateDirectory(resultFolder); if (!GetCgs(ref images)) { return; } ProgressBar pb = new ProgressBar() { Title = "Writing Logs", Visibility = Visibility.Visible }; pb.SetProgressTick(images.Count + 1); pb.SetLabel($"Writing log (1/{images.Count+1}): Focus_Summary.txt"); WriteSummaryLog(ref sensor, images, resultFolder); foreach (HelixImage image in images) { if (pb.Canceled) { pb.Close(); break; } pb.SetLabel($"Writing log ({images.IndexOf(image)+2}/{images.Count+1}): {Path.GetFileNameWithoutExtension(image.Name)}.txt"); pb.TickProgress(); WriteLineLog(ref sensor, image, resultFolder); } pb.SetValueComplete(); pb.Close(); MessageBox.Show("Line analysis complete.", "Done", MessageBoxButton.OK, MessageBoxImage.Information); }
static public HelixSoloSensor SingleSensorSoloLaser(HelixSoloSensor sensor) { foreach (string line in File.ReadAllLines(Config.SoloLaserAlignLog)) { string[] split = line.Split("\t"); if (split.Length < 30) { continue; } if (sensor.SerialNumber == split[4]) { sensor.PartNumber = split[5]; sensor.LaserAlign = new SoloLaserAlign(line); } } return(sensor); }