X-Git-Url: http://git.euphorik.ch/?a=blobdiff_plain;f=Parasitemia%2FParasitemiaUI%2FUtils.fs;h=810494e679ec3a01f5ee09651468d10ac9120b35;hb=77cb62e17c3e8e7de65b8dab6769be84ca794b92;hp=324e5f048c81758f8189efad5d0fcec66e2dbbce;hpb=c4a76a01f62568c6353396ff85551a3151fc5236;p=master-thesis.git diff --git a/Parasitemia/ParasitemiaUI/Utils.fs b/Parasitemia/ParasitemiaUI/Utils.fs index 324e5f0..810494e 100644 --- a/Parasitemia/ParasitemiaUI/Utils.fs +++ b/Parasitemia/ParasitemiaUI/Utils.fs @@ -1,12 +1,78 @@ module ParasitemiaUI.Utils -let listAsStr (s: 'a seq) = - s |> Seq.fold (fun acc obj -> acc + (if acc = "" then "" else ", ") + obj.ToString()) "" +open System.IO -let percentText (nbTotal: int, nb: int) : string = - if nbTotal = 0 - then +open Newtonsoft.Json +open Newtonsoft.Json.Converters + +open Types + +let inline listAsStr (s : 'a seq) = + s |> Seq.fold (fun acc obj -> acc + (if acc = "" then "" else ", ") + string obj) "" + +let percentText (nbTotal : int, nb : int) : string = + if nbTotal = 0 then "" else let percent = 100. * (float nb) / (float nbTotal) - sprintf "%.1f %% (%d / %d)" percent nb nbTotal \ No newline at end of file + sprintf "%.1f %% (%d / %d)" percent nb nbTotal + +let roamingDir = + Path.Combine (System.Environment.GetFolderPath (System.Environment.SpecialFolder.ApplicationData), "Parasitemia") + +let predefinedPPIFilename = "predefined-ppi.json" +let predefinedPPIFilepath = Path.Combine (roamingDir, predefinedPPIFilename) + +let sensorSizesFilename = "sensor-sizes.json" +let sensorSizesFilepath = Path.Combine (roamingDir, sensorSizesFilename) + +let private savePredefinedPPIToFile (predefinedPPI : PredefinedPPI list) = + try + Directory.CreateDirectory roamingDir |> ignore + use file = new StreamWriter (predefinedPPIFilepath) + file.Write (JsonConvert.SerializeObject (predefinedPPI, JsonSerializerSettings (Formatting = Formatting.Indented))) + with + ex -> + Logger.Log.Error "Unable to save predefined PPI to file \"%s\": %O" predefinedPPIFilepath ex + +let private saveSensorSizesToFile (sensorSizes : SensorSize list) = + try + Directory.CreateDirectory roamingDir |> ignore + use file = new StreamWriter (sensorSizesFilepath) + file.Write (JsonConvert.SerializeObject (sensorSizes, JsonSerializerSettings (Formatting = Formatting.Indented))) + with + ex -> + Logger.Log.Error "Unable to save sensor sizes to file \"%s\": %O" sensorSizesFilepath ex + +let predefinedPPI : PredefinedPPI list = + try + use file = new StreamReader (predefinedPPIFilepath) + JsonConvert.DeserializeObject (file.ReadToEnd ()) + with + | _ex -> + savePredefinedPPIToFile defaultPredefinedPPI + defaultPredefinedPPI + +let sensorSizes : SensorSize list = + try + use file = new StreamReader (sensorSizesFilepath) + JsonConvert.DeserializeObject (file.ReadToEnd ()) + with + | _ex -> + saveSensorSizesToFile defaultSensorSizes + defaultSensorSizes + +let argsHelp = + let programName = System.AppDomain.CurrentDomain.FriendlyName + "Usage of Parasitemia:\n" + + "Non-interactive mode:\n" + + (sprintf " %s (--folder |--file ) --output [--debug]\n" programName) + + " --folder : an input folder containing images to analyze\n" + + " --file : an image file to be analyzed\n" + + " --output : a folder to put the results\n" + + " --debug : output more information like intermediate images (it takes more CPU and memory)\n" + + + "Interactive mode:\n" + + (sprintf " %s [] [--debug]\n" programName) + + " : a PIAZ file to automatically open at startup\n" + + " --debug : output information like intermediate images in the current directory (it takes more CPU and memory)" \ No newline at end of file