X-Git-Url: http://git.euphorik.ch/?a=blobdiff_plain;f=Parasitemia%2FParasitemiaUI%2FProgram.fs;h=feab9ec2037a59b91621369b8b62a332e575adaf;hb=23466ba92c5595f6c0b9f97c86a221a4e5ffebe9;hp=bbf20b37da02e981916507772bc7e33947ee8fd1;hpb=4bfa3cbdc6145e6944f02e24829ab2ef3a851ac1;p=master-thesis.git diff --git a/Parasitemia/ParasitemiaUI/Program.fs b/Parasitemia/ParasitemiaUI/Program.fs index bbf20b3..feab9ec 100644 --- a/Parasitemia/ParasitemiaUI/Program.fs +++ b/Parasitemia/ParasitemiaUI/Program.fs @@ -29,11 +29,11 @@ let parseArgs (args: string[]) : Arguments = let runningMode = match Array.tryFindIndex ((=) "--folder") args, output with | Some i, Some i_output when i < args.Length - 2 && i_output < args.Length - 2 -> - CmdLine ((Dir args.[i+1]), args.[i_output + 1]) + CmdLine ((Dir args.[i + 1]), args.[i_output + 1]) | _ -> match Array.tryFindIndex ((=) "--file") args, output with | Some i, Some i_output when i < args.Length - 2 && i_output < args.Length - 2 -> - CmdLine ((File args.[i+1]), args.[i_output + 1]) + CmdLine ((File args.[i + 1]), args.[i_output + 1]) |_ -> Window (if args.Length > 0 && not (args.[0].StartsWith("--")) then Some args.[0] else None) @@ -59,7 +59,8 @@ let main args = Directory.CreateDirectory output |> ignore use logFile = new StreamWriter(new FileStream(Path.Combine(output, "log.txt"), FileMode.Append, FileAccess.Write)) - Log.AddListener({ new IListener with member this.NewEntry mess severity = logFile.WriteLine(mess) }) + let listener = { new IListener with member this.NewEntry severity mess = logFile.WriteLine(mess) } + Log.AddListener(listener) Log.User (sprintf "=== New run : %A %A ===" DateTime.Now (if debug then "[DEBUG]" else "[RELEASE]")) @@ -73,12 +74,18 @@ let main args = let images = [ for file in files -> Path.GetFileNameWithoutExtension(FileInfo(file).Name), config.Copy(), new Image(file) ] Log.LogWithTime("Whole analyze", Severity.USER, (fun () -> - let results = ParasitemiaCore.Analysis.doMultipleAnalysis images None - - for id, cells in results do - let config = images |> List.pick (fun (id', config', _) -> if id' = id then Some config' else None) - let total, infected = countCells cells - fprintf resultFile "File: %s %d %d %.2f (diameter: %A)\n" id total infected (100. * (float infected) / (float total)) config.RBCRadius)) + match ParasitemiaCore.Analysis.doMultipleAnalysis images None with + | Some results -> + for id, cells in results do + let config, img = images |> List.pick (fun (id', config', img') -> if id' = id then Some (config', img') else None) + img.Dispose() + let total, infected = countCells cells + fprintf resultFile "File: %s %d %d %.2f (diameter: %A)\n" id total infected (100. * (float infected) / (float total)) config.RBCRadius + | None -> + fprintf resultFile "Analysis aborted" + Some ())) |> ignore + + Log.RmListener(listener) 0 | Window fileToOpen ->