#!/usr/bin/env wolframscript (* ::Package:: *) dataFile0="../example_stat_report0.txt"; dataFile1="../example_stat_report1.txt"; graphWidth=480; graphColours={Darker[Blue],Darker[Red]}; (* functions *) readFileFunc[fileName_]:=( SetStreamPosition[fileName,0]; dat=<|"FileName"->fileName, Read[fileName,Word]->Read[fileName,Number], Read[fileName,Word]->Read[fileName,Number], Read[fileName,Word]->Read[fileName,Number], Read[fileName,Word]->Read[fileName,Real], Read[fileName,Word]->Read[fileName,Real], Read[fileName,Word]->Read[fileName,Real], Read[fileName,Word]->Read[fileName,Real], Read[fileName,Word]->Read[fileName,Number], Read[fileName,Word]->Read[fileName,Real], Read[fileName,Word]->ToExpression[StringSplit[Read[fileName,String]," "]], Read[fileName,Word]->ToExpression[StringSplit[Read[fileName,String]," "]], Read[fileName,Word]->ToExpression[StringSplit[Read[fileName,String]," "]], Read[fileName,Word]->ToExpression[StringSplit[Read[fileName,String]," "]], Read[fileName,Word]->ToExpression[StringSplit[Read[fileName,String]," "]], Read[fileName,Word]->ToExpression[StringSplit[Read[fileName,String]," "]], Read[fileName,Word]->ToExpression[StringSplit[Read[fileName,String]," "]], Read[fileName,Word]->ToExpression[StringSplit[Read[fileName,String]," "]], Read[fileName,Word]->ToExpression[StringSplit[Read[fileName,String]," "]] |>; Close[fileName]; Return[dat]; ) calcUncListFunc[dat_,member_]:=Table[ {dat["Sensor_uncertainty"][[i]],dat[member][[i]]}, {i,1,Length[dat["Sensor_uncertainty"]]}]; calcSigListFuncUp[dat_,exp_,member_]:=Table[ {dat["Sensor_uncertainty"][[i]],dat[exp][[i]]+ dat[member][[i]]}, {i,1,Length[dat["Sensor_uncertainty"]]}]; mainLeg[datLeg_]:="Dim:"<>ToString[datLeg["Dimensionality"]]<> "; Known spheres:"<>ToString[datLeg["Number_of_known_spheres"]]<> "; Mult:"<>ToString[datLeg["Multiplier"]]<> "; Runs:"<>ToString[datLeg["Number_of_runs"]]<> ";\nUncertainties:["<>ToString[datLeg["Start_uncertainty"]]<> ", "<>ToString[datLeg["End_uncertainty"]]<>"], increment:"<> ToString[datLeg["Uncertainty_incr"]]<>"\nSamples: "<> ToString[datLeg["Samples_for_one_uncertainty_value"]]<>" x Uncertainties"<> ";Statistical discretisation: "<> ToString[datLeg["Statistical_discretisation"]]; (* get data *) data0=readFileFunc[dataFile0]; data1=readFileFunc[dataFile1]; (* error calculations *) expErrList0=calcUncListFunc[data0,"Expected_err"]; expErrList1=calcUncListFunc[data1,"Expected_err"]; sigmaErrList0up=calcSigListFuncUp[data0,"Expected_err","Sigma_err"]; sigmaErrList1up=calcSigListFuncUp[data1,"Expected_err","Sigma_err"]; minsErrList0=calcUncListFunc[data0,"Min_err"]; maxsErrList0=calcUncListFunc[data0,"Max_err"]; minsErrList1=calcUncListFunc[data1,"Min_err"]; maxsErrList1=calcUncListFunc[data1,"Max_err"]; (* error drawing *) expErrGraph=ListLinePlot[{Legended[expErrList0,mainLeg[data0]], Legended[sigmaErrList0up,"\[Mu]+\[Sigma]"], Legended[minsErrList0,"min/max"],maxsErrList0, Legended[expErrList1,mainLeg[data1]], Legended[sigmaErrList1up,"\[Mu]+\[Sigma]"], Legended[minsErrList1,"min/max"],maxsErrList1}, PlotStyle->{graphColours[[1]], {Dashed,Lighter[graphColours[[1]]]}, {Dotted,Lighter[graphColours[[1]]]},{Dotted,Lighter[graphColours[[1]]]}, graphColours[[2]], {Dashed,Lighter[graphColours[[2]]]}, {Dotted,Lighter[graphColours[[2]]]},{Dotted,Lighter[graphColours[[2]]]}}, ImageSize->graphWidth,PlotLabel->"Expected Error", Frame->True,FrameLabel->{"Sensor uncertainty","Expected value"}, GridLines->Automatic,GridLinesStyle->Directive[Gray,Dashed]] (* solves calculations *) expSlvList0=calcUncListFunc[data0,"Expected_solves"]; expSlvList1=calcUncListFunc[data1,"Expected_solves"]; sigmaSlvList0up=calcSigListFuncUp[data0,"Expected_solves","Sigma_solves"]; sigmaSlvList1up=calcSigListFuncUp[data1,"Expected_solves","Sigma_solves"]; minsSlvList0=calcUncListFunc[data0,"Min_solves"]; maxsSlvList0=calcUncListFunc[data0,"Max_solves"]; minsSlvList1=calcUncListFunc[data1,"Min_solves"]; maxsSlvList1=calcUncListFunc[data1,"Max_solves"]; (* solves drawing *) expSlvGraph=ListLinePlot[{Legended[expSlvList0,mainLeg[data0]], Legended[sigmaSlvList0up,"\[Mu]+\[Sigma]"], Legended[minsSlvList0,"min/max"],maxsSlvList0, Legended[expSlvList1,mainLeg[data1]], Legended[sigmaSlvList1up,"\[Mu]+\[Sigma]"], Legended[minsSlvList1,"min/max"],maxsSlvList1}, PlotStyle->{graphColours[[1]], {Dashed,Lighter[graphColours[[1]]]}, {Dotted,Lighter[graphColours[[1]]]},{Dotted,Lighter[graphColours[[1]]]}, graphColours[[2]], {Dashed,Lighter[graphColours[[2]]]}, {Dotted,Lighter[graphColours[[2]]]},{Dotted,Lighter[graphColours[[2]]]}}, ImageSize->graphWidth,PlotLabel->"Expected Solves", Frame->True,FrameLabel->{"Sensor uncertainty","Expected value"}, GridLines->Automatic,GridLinesStyle->Directive[Gray,Dashed]] Export["errors.png",expErrGraph] Export["errors.svg",expErrGraph] Export["solves.png",expSlvGraph] Export["solves.svg",expSlvGraph]