public static async Task BatchAQ1(this UISettings ui, List <FileData> listfiles) { try { Directory.CreateDirectory($"{ui.WorkDirectory}\\{ui.ProjectName}\\LMAQ1"); // quantify with 1-dist using (var file = File.AppendText($"{ui.WorkDirectory}\\{ui.ProjectName}\\_{ui.ProjectName}_LMAQ1.csv")) { file.Write("\n" + CalPAQ1.getEntryNote + "\n" + CalPAQ1.getDescription + "\n" + CalPAQ1.getHeader); } var progress = new Progress($"Analyzing {listfiles.Count} files ...", listfiles.Count); using (ui.cts = new CancellationTokenSource()) { if (!ui.MultiThreadingSwitch) // false - single thread { foreach (FileData imgfile in listfiles) { using (var img = await Task <CalPAQ1> .Factory.StartNew(() => { return(new CalPAQ1(ui, imgfile)); })) { ui.UpdateImageSource(img.BitmapOriginal, img.BitmapMarkup, img.BitmapExclude, img.BitmapGray, img.BitmapBlackWhite, img.BitmapResult); ui.Export2Bitmap(img.BitmapMarkup, img.BitmapResult, $"{ui.WorkDirectory}\\{ui.ProjectName}\\LMAQ1\\{img.OutName}.png", ui.ExportDetailSwitch); progress.Increment(ui, $"{ui.WorkDirectory}\\{ui.ProjectName}\\_{ui.ProjectName}_LMAQ1.csv", img.getResult); } ui.cts.Token.ThrowIfCancellationRequested(); } } else // true - open multi thread pool { await Task.Factory.StartNew(() => { Parallel.ForEach(listfiles, new ParallelOptions() { CancellationToken = ui.cts.Token, MaxDegreeOfParallelism = Environment.ProcessorCount }, (FileData imgfile) => { using (var img = new CalPAQ1(ui, imgfile)) { ui.Export2Bitmap(img.BitmapMarkup, img.BitmapResult, $"{ui.WorkDirectory}\\{ui.ProjectName}\\LMAQ1\\{img.OutName}.jpe", ui.ExportDetailSwitch); progress.Increment(ui, $"{ui.WorkDirectory}\\{ui.ProjectName}\\_{ui.ProjectName}_LMAQ1.csv", img.getResult); } }); }); } } } catch { throw new Exception("Error encountered during batch airspace quantification."); } }
public static async Task BatchAP1(this UISettings ui, List <FileData> listfiles) { try { Directory.CreateDirectory($"{ui.WorkDirectory}\\{ui.ProjectName}\\LMAP"); // profile using (var file = File.AppendText($"{ui.WorkDirectory}\\{ui.ProjectName}\\_{ui.ProjectName}_LMAP.csv")) { file.Write("\n" + CalPAC.getEntryNote + "\n" + CalPAC.getDescription + "\n" + CalPAC.getHeader); } Directory.CreateDirectory($"{ui.WorkDirectory}\\{ui.ProjectName}\\LMAQ1"); // quantify with 1-dist using (var file = File.AppendText($"{ui.WorkDirectory}\\{ui.ProjectName}\\_{ui.ProjectName}_LMAQ1.csv")) { file.Write("\n" + CalPAQ1.getEntryNote + "\n" + CalPAQ1.getDescription + "\n" + CalPAQ1.getHeader); } switch (ui.ProfilingIndex) { case 0: foreach (FileData f in listfiles) { f.Grouping = "All"; } break; case 1: foreach (FileData f in listfiles) { f.Grouping = f.Group; } break; case 2: foreach (FileData f in listfiles) { f.Grouping = f.Group + "-" + f.Individual; } break; case 3: foreach (FileData f in listfiles) { f.Grouping = f.OutName; } break; } var filegroups = listfiles.GroupBy(g => g.Grouping).Select(l => l.ToList()).ToList(); var progress = new Progress($"Analyzing {listfiles.Count} files in {filegroups.Count} groups ...", listfiles.Count * 2 + filegroups.Count); // 2X the work + additional categorization using (ui.cts = new CancellationTokenSource()) { foreach (List <FileData> filegroup in filegroups) // Process each group { if (!ui.MultiThreadingSwitch) // false - single thread { var areaPool = new ConcurrentBag <double>(); foreach (FileData imgfile in filegroup) { using (var img = await Task <CalPAP> .Factory.StartNew(() => { return(new CalPAP(ui, imgfile, ref areaPool)); })) { ui.UpdateImageSource(img.BitmapOriginal, img.BitmapMarkup, img.BitmapExclude, img.BitmapGray, img.BitmapBlackWhite, img.BitmapResult); ui.Export2Bitmap(img.BitmapMarkup, img.BitmapResult, $"{ui.WorkDirectory}\\{ui.ProjectName}\\LMAP\\{img.OutName}.jpe", ui.ExportDetailSwitch); progress.Increment(ui); //incremenet without writing result } ui.cts.Token.ThrowIfCancellationRequested(); } var categ = await Task <CalPAC> .Factory.StartNew(() => { return(new CalPAC(ui, filegroup[0].Grouping, filegroup.Count, areaPool.ToList())); }); ui.Graph1 = categ.ToOxyPlot(1); ui.Graph1.ExportPng($"{ui.WorkDirectory}\\{ui.ProjectName}\\{filegroup[0].Grouping}_1-Count.png"); ui.Graph2 = categ.ToOxyPlot(2); ui.Graph2.ExportPng($"{ui.WorkDirectory}\\{ui.ProjectName}\\{filegroup[0].Grouping}_2-Area.png"); ui.Graph3 = categ.ToOxyPlot(3); ui.Graph3.ExportPng($"{ui.WorkDirectory}\\{ui.ProjectName}\\{filegroup[0].Grouping}_3-Count&Area.png"); progress.Increment(ui, $"{ui.WorkDirectory}\\{ui.ProjectName}\\_{ui.ProjectName}_LMAP.csv", categ.getResult); ui.cts.Token.ThrowIfCancellationRequested(); foreach (FileData imgfile in filegroup) { using (var img = await Task <CalPAQ1> .Factory.StartNew(() => { return(new CalPAQ1(ui, imgfile, categ)); })) { ui.UpdateImageSource(img.BitmapOriginal, img.BitmapMarkup, img.BitmapExclude, img.BitmapGray, img.BitmapBlackWhite, img.BitmapResult); ui.Export2Bitmap(img.BitmapMarkup, img.BitmapResult, $"{ui.WorkDirectory}\\{ui.ProjectName}\\LMAQ1\\{img.OutName}.png", ui.ExportDetailSwitch); progress.Increment(ui, $"{ui.WorkDirectory}\\{ui.ProjectName}\\_{ui.ProjectName}_LMAQ1.csv", img.getResult); } ui.cts.Token.ThrowIfCancellationRequested(); } } else // true - open multi thread pool { var categ = await Task <CalPAC> .Factory.StartNew(() => { var areaPool = new ConcurrentBag <double>(); Parallel.ForEach(filegroup, new ParallelOptions() { CancellationToken = ui.cts.Token, MaxDegreeOfParallelism = Environment.ProcessorCount }, (FileData imgfile) => { using (var img = new CalPAP(ui, imgfile, ref areaPool)) { ui.Export2Bitmap(img.BitmapMarkup, img.BitmapResult, $"{ui.WorkDirectory}\\{ui.ProjectName}\\LMAP\\{img.OutName}.jpe", ui.ExportDetailSwitch); progress.Increment(ui); //incremenet without writing result } }); return(new CalPAC(ui, filegroup[0].Grouping, filegroup.Count, areaPool.ToList())); }); ui.cts.Token.ThrowIfCancellationRequested(); ui.Graph1 = categ.ToOxyPlot(1); ui.Graph1.ExportPng($"{ui.WorkDirectory}\\{ui.ProjectName}\\{filegroup[0].Grouping}_1-Count.png"); ui.Graph2 = categ.ToOxyPlot(2); ui.Graph2.ExportPng($"{ui.WorkDirectory}\\{ui.ProjectName}\\{filegroup[0].Grouping}_2-Area.png"); ui.Graph3 = categ.ToOxyPlot(3); ui.Graph3.ExportPng($"{ui.WorkDirectory}\\{ui.ProjectName}\\{filegroup[0].Grouping}_3-Count&Area.png"); progress.Increment(ui, $"{ui.WorkDirectory}\\{ui.ProjectName}\\_{ui.ProjectName}_LMAP.csv", categ.getResult); ui.cts.Token.ThrowIfCancellationRequested(); await Task.Factory.StartNew(() => { Parallel.ForEach(filegroup, new ParallelOptions() { CancellationToken = ui.cts.Token, MaxDegreeOfParallelism = Environment.ProcessorCount }, (FileData imgfile) => { using (var img = new CalPAQ1(ui, imgfile, categ)) { ui.Export2Bitmap(img.BitmapMarkup, img.BitmapResult, $"{ui.WorkDirectory}\\{ui.ProjectName}\\LMAQ1\\{img.OutName}.jpe", ui.ExportDetailSwitch); progress.Increment(ui, $"{ui.WorkDirectory}\\{ui.ProjectName}\\_{ui.ProjectName}_LMAQ1.csv", img.getResult); } }); }); ui.cts.Token.ThrowIfCancellationRequested(); } } } } catch { throw new Exception("Error encountered during batch airspace profiling."); } }