/components/tools/cellprofiler/CPsubfunctions/CPcalculateStatistics.m

https://github.com/aherbert/openmicroscopy · Objective C · 113 lines · 100 code · 13 blank · 0 comment · 27 complexity · 4f86e91ab1beec8d4dd0ec4b949f1f42 MD5 · raw file

  1. function handles = CPcalculateStatistics(handles,DataName,LogOrLinear,FigureName,ModuleName,LicenseStats)
  2. FigureIncrement = 1;
  3. %%% Get all fieldnames in Measurements
  4. ObjectFields = fieldnames(handles.Measurements);
  5. GroupingStrings = handles.Measurements.Image.(DataName);
  6. %%% Need column vector
  7. GroupingValues = str2num(char(GroupingStrings')); %#ok Ignore MLint
  8. %%% Get the handle to the waitbar and update the text in the waitbar
  9. waitbarhandle = CPwaitbar(0,'');
  10. CPwaitbar(0,waitbarhandle,'CPcalculateStatistics Progress');
  11. for i = 1:length(ObjectFields)
  12. ObjectName = char(ObjectFields(i));
  13. %%% Filter out Experiment and Image fields
  14. if ~strcmp(ObjectName,'Experiment')
  15. try
  16. %%% Get all fieldnames in Measurements.(ObjectName)
  17. MeasureFields = fieldnames(handles.Measurements.(ObjectName));
  18. catch %%% Must have been text field and ObjectName is class 'cell'
  19. continue
  20. end
  21. for j = 1:length(MeasureFields)
  22. MeasureFeatureName = char(MeasureFields(j));
  23. if length(MeasureFeatureName) > 7
  24. if strcmp(MeasureFeatureName(end-7:end),'Features')
  25. %%% Not placed with above if statement since
  26. %%% MeasureFeatureName may not be 8 characters long
  27. if ~strcmp(MeasureFeatureName(1:8),'Location')
  28. if strcmp(MeasureFeatureName,'ModuleErrorFeatures')
  29. continue;
  30. end
  31. %%% Get Features
  32. MeasureFeatures = handles.Measurements.(ObjectName).(MeasureFeatureName);
  33. %%% Get Measure name
  34. MeasureName = MeasureFeatureName(1:end-8);
  35. %%% Check for measurements
  36. if ~isfield(handles.Measurements.(ObjectName),MeasureName)
  37. CPwarndlg(['There is a problem in the ' ModuleName ' module becaue it could not find the measurements you specified. CellProfiler will proceed but this module will be skipped.']);
  38. return;
  39. end
  40. Ymatrix = zeros(handles.Current.NumberOfImageSets,length(MeasureFeatures));
  41. for k = 1:handles.Current.NumberOfImageSets
  42. for l = 1:length(MeasureFeatures)
  43. if isempty(handles.Measurements.(ObjectName).(MeasureName){k})
  44. Ymatrix(k,l) = 0;
  45. else
  46. Ymatrix(k,l) = mean(handles.Measurements.(ObjectName).(MeasureName){k}(:,l));
  47. end
  48. end
  49. end
  50. GroupingValueRows = size(GroupingValues,1);
  51. YmatrixRows = size(Ymatrix,1);
  52. if GroupingValueRows ~= YmatrixRows
  53. CPwarndlg('There was an error in the Calculate Statistics module involving the number of text elements loaded for it. CellProfiler will proceed but this module will be skipped.');
  54. return;
  55. else
  56. [v, z, OrderedUniqueDoses, OrderedAverageValues] = CP_VZfactors(GroupingValues,Ymatrix);
  57. if LicenseStats == 1
  58. if ~strcmpi(FigureName,'Do not save')
  59. PartialFigureName = fullfile(handles.Current.DefaultOutputDirectory,FigureName);
  60. else PartialFigureName = FigureName;
  61. end
  62. try
  63. [FigureIncrement, ec50stats] = CPec50(OrderedUniqueDoses',OrderedAverageValues,LogOrLinear,PartialFigureName,ModuleName,DataName,FigureIncrement);
  64. catch
  65. ec50stats = zeros(size(OrderedAverageValues,2),4);
  66. end
  67. ec = ec50stats(:,3);
  68. if strcmpi(LogOrLinear,'Yes')
  69. ec = exp(ec);
  70. end
  71. end
  72. end
  73. measurefield = [ObjectName,'Statistics'];
  74. featuresfield = [ObjectName,'StatisticsFeatures'];
  75. if isfield(handles.Measurements,'Experiment')
  76. if isfield(handles.Measurements.Experiment,measurefield)
  77. OldEnd = length(handles.Measurements.Experiment.(featuresfield));
  78. else OldEnd = 0;
  79. end
  80. else OldEnd = 0;
  81. end
  82. for a = 1:length(z)
  83. handles.Measurements.Experiment.(measurefield){1}(1,OldEnd+a) = z(a);
  84. handles.Measurements.Experiment.(measurefield){1}(1,OldEnd+length(z)+a) = v(a);
  85. handles.Measurements.Experiment.(featuresfield){OldEnd+a} = ['Zfactor_',MeasureName,'_',MeasureFeatures{a}];
  86. handles.Measurements.Experiment.(featuresfield){OldEnd+length(z)+a} = ['Vfactor_',MeasureName,'_',MeasureFeatures{a}];
  87. if LicenseStats == 1
  88. handles.Measurements.Experiment.(measurefield){1}(1,OldEnd+2*length(z)+a) = ec(a);
  89. handles.Measurements.Experiment.(featuresfield){OldEnd+2*length(z)+a} = ['EC50_',MeasureName,'_',MeasureFeatures{a}];
  90. end
  91. end
  92. end
  93. end
  94. end
  95. end
  96. end
  97. %%% Update waitbar
  98. CPwaitbar(i./length(ObjectFields),waitbarhandle);
  99. end
  100. close(waitbarhandle)