diff --git a/matRad/bioModels/matRad_BiologicalModel.m b/matRad/bioModels/matRad_BiologicalModel.m index b770dd9b4..cfd18ddec 100644 --- a/matRad/bioModels/matRad_BiologicalModel.m +++ b/matRad/bioModels/matRad_BiologicalModel.m @@ -128,6 +128,13 @@ folders = [folders matRad_cfg.userfolders]; persistent metaBioModels lastOptionalPaths + + %First we do a sanity check if persistently stored metaclasses are valid + if ~matRad_cfg.isOctave && ~isempty(metaBioModels) && ~all(cellfun(@isvalid,metaBioModels)) + matRad_cfg.dispWarning('Found invalid BioModels, updating model cache.'); + metaBioModels = []; + end + if isempty(metaBioModels) || (~isempty(lastOptionalPaths) && ~isequal(lastOptionalPaths, folders)) lastOptionalPaths = folders; metaBioModels = matRad_findSubclasses(meta.class.fromName(mfilename('class')),'folders',folders,'includeSubfolders',true); diff --git a/matRad/doseCalc/+DoseEngines/@matRad_DoseEngineBase/getAvailableEngines.m b/matRad/doseCalc/+DoseEngines/@matRad_DoseEngineBase/getAvailableEngines.m index 445b5b79d..44582f171 100644 --- a/matRad/doseCalc/+DoseEngines/@matRad_DoseEngineBase/getAvailableEngines.m +++ b/matRad/doseCalc/+DoseEngines/@matRad_DoseEngineBase/getAvailableEngines.m @@ -37,6 +37,14 @@ %Get available, valid classes through call to matRad helper function %for finding subclasses persistent allAvailableDoseEngines lastOptionalPaths + +%First we do a sanity check if persistently stored metaclasses are valid +if ~matRad_cfg.isOctave && ~isempty(allAvailableDoseEngines) && ~all(cellfun(@isvalid,allAvailableDoseEngines)) + matRad_cfg.dispWarning('Found invalid Dose Engines, updating engine cache.'); + allAvailableDoseEngines = []; +end + +%Check if we need to find the engines and if yes, do if isempty(allAvailableDoseEngines) || (~isempty(lastOptionalPaths) && ~isequal(lastOptionalPaths, optionalPaths)) lastOptionalPaths = optionalPaths; allAvailableDoseEngines = matRad_findSubclasses('DoseEngines.matRad_DoseEngineBase','packages',{'DoseEngines'},'folders',optionalPaths,'includeAbstract',false); diff --git a/matRad/scenarios/matRad_ScenarioModel.m b/matRad/scenarios/matRad_ScenarioModel.m index 640ed52c4..f84a3dfc3 100644 --- a/matRad/scenarios/matRad_ScenarioModel.m +++ b/matRad/scenarios/matRad_ScenarioModel.m @@ -234,6 +234,13 @@ function listAllScenarios(this) folders = [folders matRad_cfg.userfolders]; persistent metaScenarioModels lastOptionalPaths + + %First we do a sanity check if persistently stored metaclasses are valid + if ~matRad_cfg.isOctave && ~isempty(metaScenarioModels) && ~all(cellfun(@isvalid,metaScenarioModels)) + matRad_cfg.dispWarning('Found invalid ScenarioModels, updating model cache.'); + metaScenarioModels = []; + end + if isempty(metaScenarioModels) || (~isempty(lastOptionalPaths) && ~isequal(lastOptionalPaths, folders)) lastOptionalPaths = folders; metaScenarioModels = matRad_findSubclasses(meta.class.fromName(mfilename('class')),'folders',folders,'includeSubfolders',true); diff --git a/matRad/steering/matRad_StfGeneratorBase.m b/matRad/steering/matRad_StfGeneratorBase.m index 1f48daf88..31c5a11ee 100644 --- a/matRad/steering/matRad_StfGeneratorBase.m +++ b/matRad/steering/matRad_StfGeneratorBase.m @@ -446,6 +446,13 @@ function createPatientGeometry(this) %Get available, valid classes through call to matRad helper function %for finding subclasses persistent allAvailableStfGenerators lastOptionalPaths + + %First we do a sanity check if persistently stored metaclasses are valid + if ~matRad_cfg.isOctave && ~isempty(allAvailableStfGenerators) && ~all(cellfun(@isvalid,allAvailableStfGenerators)) + matRad_cfg.dispWarning('Found invalid Steering Geometry Generators, updating cache.'); + allAvailableStfGenerators = []; + end + if isempty(allAvailableStfGenerators) || (~isempty(lastOptionalPaths) && ~isequal(lastOptionalPaths, optionalPaths)) lastOptionalPaths = optionalPaths; allAvailableStfGenerators = matRad_findSubclasses(mfilename('class'),'folders',optionalPaths,'includeAbstract',false);