- let parameters = seq {
- for srcImgCtrl in sourceImagesControls do
- let srcImg = srcImgCtrl.Tag :?> SourceImage
- let isChecked = srcImgCtrl.chkSelection.IsChecked
- match parseAndValidatePPI srcImgCtrl.txtResolution.Text with
- | Some resolution ->
- yield Some (srcImg, isChecked.HasValue && isChecked.Value, { srcImg.config.Parameters with resolution = resolution * 1.<ppi> })
- | None ->
- MessageBox.Show(sprintf "No resolution defined for the image number %d" srcImg.num, "No resolution defined", MessageBoxButton.OK, MessageBoxImage.Information) |> ignore
- yield None } |> Seq.takeWhile (fun e -> e.IsSome) |> Seq.map (fun e -> e.Value) |> List.ofSeq
- if parameters.Count() <> sourceImagesControls.Count()
- then None
- else Some parameters
-
- win.butClose.Click.AddHandler(fun obj args -> win.Root.Close())
-
- win.butStart.Click.AddHandler(fun obj args ->
- match getInputImagesParameters () with
- | Some imagesParameters ->
- let imagesToProcess = [
- for srcImg, selected, parameters in imagesParameters do
- srcImg.config.Parameters <- parameters // Save parameters.
- if selected
- then yield srcImg.num.ToString(), srcImg.config, srcImg.img ]
-
- if imagesToProcess.IsEmpty
- then
- MessageBox.Show("No image selected", "Cannot start analysis", MessageBoxButton.OK, MessageBoxImage.Information) |> ignore
- else
- win.stackSourceImagesSelection.IsEnabled <- false
- analysisPerformed <- false
- win.butStart.IsEnabled <- false
- win.butClose.Content <- "Abort"
-
- async {
- let maybeResults =
- ParasitemiaCore.Analysis.doMultipleAnalysis
- imagesToProcess
- (Some (fun progress -> win.Root.Dispatcher.Invoke(fun () -> win.progress.Value <- float progress); not analysisCancelled))
-
- lock monitor (
- fun() ->
- match maybeResults with
- | Some results ->
- for id, cells in results do
- state.SetResult (int id) cells
- Logger.Log.User("All analyses terminated successfully")
- atLeastOneAnalysisPerformed <- true
- analysisPerformed <- true
- | None ->
- Logger.Log.User("Analysis aborted")
-
- win.Root.Dispatcher.Invoke(fun () ->
- win.progress.Value <- if maybeResults.IsSome then 100. else 0.
- win.stackSourceImagesSelection.IsEnabled <- true
- win.butStart.IsEnabled <- true
- win.butClose.Content <- "Close"
- updateSourceImages ()))
- } |> Async.Start
- | _ -> ())
-
- win.Root.Loaded.AddHandler(fun obj args -> updateSourceImages ())
-
- win.Root.ShowDialog() |> ignore
-
- Logger.Log.RmListener(logListener)
-
- lock monitor (fun () ->
- if not analysisPerformed
- then
+ let parameters =
+ seq {
+ for srcImgCtrl in sourceImagesControls do
+ let srcImg = srcImgCtrl.Tag :?> SourceImage
+ let isChecked = srcImgCtrl.chkSelection.IsChecked
+ match parseAndValidatePPI srcImgCtrl.txtResolution.Text with
+ | Some resolution ->
+ yield Some (srcImg, isChecked.HasValue && isChecked.Value, { srcImg.Config.Parameters with resolution = resolution * 1.<ppi> })
+ | None ->
+ MessageBox.Show (sprintf "No resolution defined for the image number %d" srcImg.Num, "No resolution defined", MessageBoxButton.OK, MessageBoxImage.Information) |> ignore
+ yield None
+ } |> Seq.takeWhile (fun e -> e.IsSome) |> Seq.map (fun e -> e.Value) |> List.ofSeq
+
+ if parameters.Count () <> sourceImagesControls.Count () then
+ None
+ else
+ Some parameters
+
+ win.butClose.Click.AddHandler (fun obj args -> win.Close ())
+
+ win.butStart.Click.AddHandler (
+ fun obj args ->
+ match getInputImagesParameters () with
+ | Some imagesParameters ->
+ let imagesToProcess =
+ [
+ for srcImg, selected, parameters in imagesParameters do
+ srcImg.Config.Parameters <- parameters // Save parameters.
+ if selected then
+ yield string srcImg.Num, srcImg.Config, srcImg.Img
+ ]
+
+ if imagesToProcess.IsEmpty then
+ MessageBox.Show ("No image selected", "Cannot start analysis", MessageBoxButton.OK, MessageBoxImage.Information) |> ignore
+ else
+ win.stackSourceImagesSelection.IsEnabled <- false
+ analysisPerformed <- false
+ win.butStart.IsEnabled <- false
+ win.textLog.Text <- ""
+ win.butClose.Content <- "Abort"
+
+ async {
+ let maybeResults =
+ ParasitemiaCore.Analysis.doMultipleAnalysis
+ imagesToProcess
+ (Some (fun progress -> win.Dispatcher.Invoke (fun () -> win.progress.Value <- float progress); not analysisCancelled))
+
+ lock monitor (
+ fun () ->
+ match maybeResults with
+ | Some results ->
+ for id, cells in results do
+ state.SetResult (int id) cells
+ Logger.Log.Info "All analyses terminated successfully"
+ atLeastOneAnalysisPerformed <- true
+ analysisPerformed <- true
+ | None ->
+ Logger.Log.Info "Analysis aborted"
+
+ win.Dispatcher.Invoke (
+ fun () ->
+ win.progress.Value <- if maybeResults.IsSome then 100. else 0.
+ win.stackSourceImagesSelection.IsEnabled <- true
+ win.butStart.IsEnabled <- true
+ win.butClose.Content <- "Close"
+ updateSourceImages ()
+ )
+ )
+ } |> Async.Start
+ | _ -> ()
+ )
+
+ win.Loaded.AddHandler (fun obj args -> updateSourceImages ())
+
+ win.ShowDialog () |> ignore
+
+ Logger.Log.RmListener (logListener)
+
+ lock monitor (
+ fun () ->
+ if not analysisPerformed then