From b256f2cba313944038aee17bbca28588f6b0799d Mon Sep 17 00:00:00 2001 From: Paul Sharp <44529197+DrPaulSharp@users.noreply.github.com> Date: Wed, 25 Jun 2025 14:33:18 +0100 Subject: [PATCH 01/16] Reduced normal reflectivity calculations to one routine --- targetFunctions/+normalTF/customXY.m | 14 +- targetFunctions/+normalTF/standardLayers.m | 234 ++++++++++++++++----- targetFunctions/reflectivityCalculation.m | 37 +--- 3 files changed, 194 insertions(+), 91 deletions(-) diff --git a/targetFunctions/+normalTF/customXY.m b/targetFunctions/+normalTF/customXY.m index 63c84a903..f8ab66426 100644 --- a/targetFunctions/+normalTF/customXY.m +++ b/targetFunctions/+normalTF/customXY.m @@ -108,14 +108,7 @@ [qzshift,scalefactor,bulkIn,bulkOut] = backSort( ... qzshiftIndex,scalefactorIndex,bulkInIndex,bulkOutIndex, ... qzshiftValues,scalefactorValues,bulkInValues,bulkOutValues); - - % Resample the layers - reSLD = sldProfile(:,[1,2]); - imSLD = sldProfile(:,[1,3]); - resampledLayers = resampleLayers(reSLD,imSLD,resampleMinAngle,resampleNPoints); - layers = resampledLayers; - % Apply scale factors and q shifts to the data shiftedData = shiftData(scalefactor,qzshift,dataPresent,data,dataLimits,simulationLimits,numSimulationPoints); [simulationXData, dataIndices] = makeSimulationRange(shiftedData, simulationLimits); @@ -125,6 +118,13 @@ resolution = constructResolution(resolutionType,resolutionParamIndex,... shiftedData,customFiles,resolutionParamValues,simulationXData,dataIndices); + % Resample the layers + reSLD = sldProfile(:,[1,2]); + imSLD = sldProfile(:,[1,3]); + resampledLayers = resampleLayers(reSLD,imSLD,resampleMinAngle,resampleNPoints); + + layers = resampledLayers; + reflectivityType = 'standardAbeles'; [reflectivity,simulation] = callReflectivity(bulkIn,bulkOut,simulationXData,dataIndices,1,layers,roughness,resolution,parallel,reflectivityType); diff --git a/targetFunctions/+normalTF/standardLayers.m b/targetFunctions/+normalTF/standardLayers.m index 9a22a189d..548e86d83 100644 --- a/targetFunctions/+normalTF/standardLayers.m +++ b/targetFunctions/+normalTF/standardLayers.m @@ -13,9 +13,10 @@ contrastResolutionIndices, ~, backgroundParamValues, qzshiftValues,... scalefactorValues, bulkInValues, bulkOutValues, resolutionParamValues,... ~, dataPresent, nParams, paramValues, ~, resample, contrastBackgroundTypes,... - contrastBackgroundActions, contrastResolutionTypes, ~, useImaginary,... - repeatLayers, data, dataLimits, simulationLimits, contrastLayersIndices,... - layersDetails, customFiles, ~] = extractProblemParams(problemStruct); + contrastBackgroundActions, contrastResolutionTypes, contrastCustomFiles,... + useImaginary, repeatLayers, data, dataLimits, simulationLimits, ... + contrastLayersIndices, layersDetails, customFiles, ~... + ] = extractProblemParams(problemStruct); calcSld = controls.calcSldDuringFit; parallel = controls.parallel; @@ -40,56 +41,141 @@ layers = cell(numberOfContrasts,1); resampledLayers = cell(numberOfContrasts,1); - % First we need to allocate the absolute values of the input - % parameters to all the layers in the layers list. This only needs - % to be done once, and so is done outside the contrasts loop - layerValues = allocateParamsToLayers(paramValues, layersDetails); + switch lower(problemStruct.modelType) + + case coderEnums.modelTypes.StandardLayers + + % First we need to allocate the absolute values of the input + % parameters to all the layers in the layers list. This only needs + % to be done once, and so is done outside the contrasts loop + layerValues = allocateParamsToLayers(paramValues, layersDetails); + + contrastLayers = cell(numberOfContrasts,1); + for i = 1:numberOfContrasts - % Substrate roughness is always first parameter for standard layers - for i = 1:numberOfContrasts - subRoughs(i) = paramValues(1); - end + % Substrate roughness is always first parameter for + % standard layers + subRoughs(i) = paramValues(1); - if strcmpi(parallel, coderEnums.parallelOptions.Contrasts) + % Also need to determine which layers from the overall layers + % list are required for this contrast, and put them in the + % correct order according to geometry + layerIndices = contrastLayersIndices{i}; + contrastLayers{i} = zeros(length(layerIndices), 6); + for j = 1:length(layerIndices) + contrastLayers{i}(j,:) = layerValues{layerIndices(j)}; + end - % Loop over all the contrasts - parfor i = 1:numberOfContrasts + end + + case coderEnums.modelTypes.CustomLayers + + % Process the custom models + numberOfOutputColumns = 6; + [contrastLayers,subRoughs] = normalTF.processCustomFunction(contrastBulkInIndices,contrastBulkOutIndices,... + bulkInValues,bulkOutValues,contrastCustomFiles,numberOfContrasts,numberOfOutputColumns,customFiles,paramValues,useImaginary); + + case coderEnums.modelTypes.CustomXY + otherwise + coderException(coderEnums.errorCodes.invalidOption, 'The model type "%s" is not supported', problemStruct.modelType); + + end - [qzshifts(i),scalefactors(i),bulkIns(i),bulkOuts(i),chis(i),... - reflectivity{i},simulation{i},shiftedData{i},backgrounds{i},... - resolutions{i},sldProfiles{i},layers{i},resampledLayers{i}... - ] = contrastCalculation(contrastBackgroundIndices{i},... - contrastQzshiftIndices(i),contrastScalefactorIndices(i),... - contrastBulkInIndices(i),contrastBulkOutIndices(i),... - contrastResolutionIndices{i},backgroundParamValues,qzshiftValues,... - scalefactorValues,bulkInValues,bulkOutValues,resolutionParamValues,... - dataPresent(i),data{i},dataLimits{i},simulationLimits{i},repeatLayers(i),... - contrastBackgroundTypes{i},contrastBackgroundActions{i},... - contrastResolutionTypes{i},customFiles,nParams,parallel,... - numSimulationPoints,resampleMinAngle,resampleNPoints,resample(i),... - geometry,subRoughs(i),calcSld,contrastLayersIndices{i},layerValues); + if strcmpi(problemStruct.modelType, coderEnums.modelTypes.CustomXY) + + % Process the custom models + numberOfOutputColumns = 3; + [slds,subRoughs] = normalTF.processCustomFunction(contrastBulkInIndices,... + contrastBulkOutIndices,bulkInValues,bulkOutValues,... + contrastCustomFiles,numberOfContrasts,numberOfOutputColumns,... + customFiles,paramValues,useImaginary); + + if strcmpi(parallel, coderEnums.parallelOptions.Contrasts) + + % Loop over all the contrasts + parfor i = 1:numberOfContrasts + + [qzshifts(i),scalefactors(i),bulkIns(i),bulkOuts(i),chis(i),... + reflectivity{i},simulation{i},shiftedData{i},backgrounds{i},... + resolutions{i},sldProfiles{i},layers{i},resampledLayers{i}... + ] = customXYContrastCalculation(contrastBackgroundIndices{i},... + contrastQzshiftIndices(i),contrastScalefactorIndices(i),... + contrastBulkInIndices(i),contrastBulkOutIndices(i),... + contrastResolutionIndices{i},backgroundParamValues,qzshiftValues,... + scalefactorValues,bulkInValues,bulkOutValues,resolutionParamValues,... + dataPresent(i),data{i},dataLimits{i},simulationLimits{i},... + contrastBackgroundTypes{i},contrastBackgroundActions{i},... + contrastResolutionTypes{i},customFiles,nParams,parallel,... + numSimulationPoints,resampleMinAngle,resampleNPoints,... + subRoughs(i),slds{i}); + + end + + else + + % Loop over all the contrasts + for i = 1:numberOfContrasts + + [qzshifts(i),scalefactors(i),bulkIns(i),bulkOuts(i),chis(i),... + reflectivity{i},simulation{i},shiftedData{i},backgrounds{i},... + resolutions{i},sldProfiles{i},layers{i},resampledLayers{i}... + ] = customXYContrastCalculation(contrastBackgroundIndices{i},... + contrastQzshiftIndices(i),contrastScalefactorIndices(i),... + contrastBulkInIndices(i),contrastBulkOutIndices(i),... + contrastResolutionIndices{i},backgroundParamValues,qzshiftValues,... + scalefactorValues,bulkInValues,bulkOutValues,resolutionParamValues,... + dataPresent(i),data{i},dataLimits{i},simulationLimits{i},... + contrastBackgroundTypes{i},contrastBackgroundActions{i},... + contrastResolutionTypes{i},customFiles,nParams,parallel,... + numSimulationPoints,resampleMinAngle,resampleNPoints,... + subRoughs(i),slds{i}); + end end - + else - % Loop over all the contrasts - for i = 1:numberOfContrasts + if strcmpi(parallel, coderEnums.parallelOptions.Contrasts) + + % Loop over all the contrasts + parfor i = 1:numberOfContrasts + + [qzshifts(i),scalefactors(i),bulkIns(i),bulkOuts(i),chis(i),... + reflectivity{i},simulation{i},shiftedData{i},backgrounds{i},... + resolutions{i},sldProfiles{i},layers{i},resampledLayers{i}... + ] = layersContrastCalculation(contrastBackgroundIndices{i},... + contrastQzshiftIndices(i),contrastScalefactorIndices(i),... + contrastBulkInIndices(i),contrastBulkOutIndices(i),... + contrastResolutionIndices{i},backgroundParamValues,qzshiftValues,... + scalefactorValues,bulkInValues,bulkOutValues,resolutionParamValues,... + dataPresent(i),data{i},dataLimits{i},simulationLimits{i},repeatLayers(i),... + contrastBackgroundTypes{i},contrastBackgroundActions{i},... + contrastResolutionTypes{i},customFiles,nParams,parallel,... + numSimulationPoints,resampleMinAngle,resampleNPoints,resample(i),... + geometry,subRoughs(i),calcSld,contrastLayers{i}); + + end - [qzshifts(i),scalefactors(i),bulkIns(i),bulkOuts(i),chis(i),... - reflectivity{i},simulation{i},shiftedData{i},backgrounds{i},... - resolutions{i},sldProfiles{i},layers{i},resampledLayers{i}... - ] = contrastCalculation(contrastBackgroundIndices{i},... - contrastQzshiftIndices(i),contrastScalefactorIndices(i),... - contrastBulkInIndices(i),contrastBulkOutIndices(i),... - contrastResolutionIndices{i},backgroundParamValues,qzshiftValues, ... - scalefactorValues,bulkInValues,bulkOutValues,resolutionParamValues,... - dataPresent(i),data{i},dataLimits{i},simulationLimits{i},repeatLayers(i),... - contrastBackgroundTypes{i},contrastBackgroundActions{i},... - contrastResolutionTypes{i},customFiles,nParams,parallel,... - numSimulationPoints,resampleMinAngle,resampleNPoints,resample(i),... - geometry,subRoughs(i),calcSld,contrastLayersIndices{i},layerValues); - + else + + % Loop over all the contrasts + for i = 1:numberOfContrasts + + [qzshifts(i),scalefactors(i),bulkIns(i),bulkOuts(i),chis(i),... + reflectivity{i},simulation{i},shiftedData{i},backgrounds{i},... + resolutions{i},sldProfiles{i},layers{i},resampledLayers{i}... + ] = layersContrastCalculation(contrastBackgroundIndices{i},... + contrastQzshiftIndices(i),contrastScalefactorIndices(i),... + contrastBulkInIndices(i),contrastBulkOutIndices(i),... + contrastResolutionIndices{i},backgroundParamValues,qzshiftValues, ... + scalefactorValues,bulkInValues,bulkOutValues,resolutionParamValues,... + dataPresent(i),data{i},dataLimits{i},simulationLimits{i},repeatLayers(i),... + contrastBackgroundTypes{i},contrastBackgroundActions{i},... + contrastResolutionTypes{i},customFiles,nParams,parallel,... + numSimulationPoints,resampleMinAngle,resampleNPoints,resample(i),... + geometry,subRoughs(i),calcSld,contrastLayers{i}); + + end end end @@ -106,14 +192,14 @@ function [qzshift,scalefactor,bulkIn,bulkOut,chi,reflectivity,simulation,... shiftedData,background,resolution,sldProfile,layers,... - resampledLayers] = contrastCalculation(backgroundParamIndex,qzshiftIndex,... + resampledLayers] = layersContrastCalculation(backgroundParamIndex,qzshiftIndex,... scalefactorIndex,bulkInIndex,bulkOutIndex,resolutionParamIndex,... - backgroundParamValues,qzshiftValues,scalefactorValues,bulkInValues,... - bulkOutValues,resolutionParamValues,dataPresent,data,dataLimits,... + backgroundParams,qzshiftValues,scalefactorValues,bulkInValues,... + bulkOutValues,resolutionParams,dataPresent,data,dataLimits,... simulationLimits,repeatLayers,backgroundType,backgroundAction,... resolutionType,customFiles,nParams,parallel,numSimulationPoints,... resampleMinAngle,resampleNPoints,resample,geometry,roughness,calcSld,... - layerIndices,layerValues) + contrastLayers) % Extract the relevant parameter values for this contrast % from the input arrays. @@ -122,20 +208,15 @@ [qzshift,scalefactor,bulkIn,bulkOut] = backSort( ... qzshiftIndex,scalefactorIndex,bulkInIndex,bulkOutIndex, ... qzshiftValues,scalefactorValues,bulkInValues,bulkOutValues); - - % Also need to determine which layers from the overall layers list - % are required for this contrast, and put them in the correct order - % according to geometry - contrastLayers = allocateLayersForContrast(layerIndices,layerValues); % Apply scale factors and q shifts to the data shiftedData = shiftData(scalefactor,qzshift,dataPresent,data,dataLimits,simulationLimits,numSimulationPoints); [simulationXData, dataIndices] = makeSimulationRange(shiftedData, simulationLimits); background = constructBackground(backgroundType,backgroundParamIndex, ... - shiftedData,customFiles,backgroundParamValues,simulationXData,dataIndices); + shiftedData,customFiles,backgroundParams,simulationXData,dataIndices); resolution = constructResolution(resolutionType,resolutionParamIndex, ... - shiftedData,customFiles,resolutionParamValues,simulationXData,dataIndices); + shiftedData,customFiles,resolutionParams,simulationXData,dataIndices); % Call the core layers calculation [reflectivity,simulation,shiftedData,sldProfile,layers,... @@ -147,3 +228,46 @@ chi = chiSquared(shiftedData,reflectivity,nParams); end + +function [qzshift,scalefactor,bulkIn,bulkOut,chi,reflectivity,simulation,... + shiftedData,background,resolution,sldProfile,layers,... + resampledLayers] = customXYContrastCalculation(backgroundParamIndex,... + qzshiftIndex,scalefactorIndex,bulkInIndex,bulkOutIndex,resolutionParamIndex,... + backgroundParams,qzshiftValues,scalefactorValues,bulkInValues,bulkOutValues,... + resolutionParams,dataPresent,data,dataLimits,simulationLimits,... + backgroundType,backgroundAction,resolutionType,customFiles,nParams,... + parallel,numSimulationPoints,resampleMinAngle,resampleNPoints,roughness,... + sld) + + % Extract the relevant parameter values for this contrast + % from the input arrays. + % First need to decide which values of the backgrounds, scalefactors + % data shifts and bulk contrasts are associated with this contrast + [qzshift,scalefactor,bulkIn,bulkOut] = backSort( ... + qzshiftIndex,scalefactorIndex,bulkInIndex,bulkOutIndex, ... + qzshiftValues,scalefactorValues,bulkInValues,bulkOutValues); + + % Apply scale factors and q shifts to the data + shiftedData = shiftData(scalefactor,qzshift,dataPresent,data,dataLimits,simulationLimits,numSimulationPoints); + [simulationXData, dataIndices] = makeSimulationRange(shiftedData, simulationLimits); + + background = constructBackground(backgroundType,backgroundParamIndex,... + shiftedData,customFiles,backgroundParams,simulationXData,dataIndices); + resolution = constructResolution(resolutionType,resolutionParamIndex,... + shiftedData,customFiles,resolutionParams,simulationXData,dataIndices); + + % Resample the layers + sldProfile = sld(:,[1,2]); + sldProfileIm = sld(:,[1,3]); + resampledLayers = resampleLayers(sldProfile,sldProfileIm,resampleMinAngle,resampleNPoints); + + layers = resampledLayers; + + reflectivityType = 'standardAbeles'; + [reflectivity,simulation] = callReflectivity(bulkIn,bulkOut,simulationXData,dataIndices,1,layers,roughness,resolution,parallel,reflectivityType); + + [reflectivity,simulation,shiftedData] = applyBackgroundCorrection(reflectivity,simulation,shiftedData,background,backgroundAction); + + chi = chiSquared(shiftedData,reflectivity,nParams); + +end diff --git a/targetFunctions/reflectivityCalculation.m b/targetFunctions/reflectivityCalculation.m index 15ed21d16..09dc3d428 100644 --- a/targetFunctions/reflectivityCalculation.m +++ b/targetFunctions/reflectivityCalculation.m @@ -31,34 +31,13 @@ modelType = problemStruct.modelType; switch targetFunction + case coderEnums.calculationTypes.Normal - - switch lower(modelType) - - case coderEnums.modelTypes.StandardLayers - - [qzshifts,scalefactors,bulkIns,bulkOuts,chis,reflectivity,... - simulation,shiftedData,backgrounds,resolutions,sldProfiles,... - layers,resampledLayers,subRoughs... - ] = normalTF.standardLayers(problemStruct,controls); - - case coderEnums.modelTypes.CustomLayers - - [qzshifts,scalefactors,bulkIns,bulkOuts,chis,reflectivity,... - simulation,shiftedData,backgrounds,resolutions,sldProfiles,... - layers,resampledLayers,subRoughs... - ] = normalTF.customLayers(problemStruct,controls); - case coderEnums.modelTypes.CustomXY - - [qzshifts,scalefactors,bulkIns,bulkOuts,chis,reflectivity,... - simulation,shiftedData,backgrounds,resolutions,sldProfiles,... - layers,resampledLayers,subRoughs... - ] = normalTF.customXY(problemStruct,controls); - - otherwise - coderException(coderEnums.errorCodes.invalidOption, 'The model type "%s" is not supported', modelType); - end + [~,scalefactors,bulkIns,bulkOuts,chis,reflectivity,... + simulation,shiftedData,backgrounds,resolutions,sldProfiles,... + layers,resampledLayers,subRoughs... + ] = normalTF.standardLayers(problemStruct,controls); case coderEnums.calculationTypes.Domains @@ -66,21 +45,21 @@ case coderEnums.modelTypes.StandardLayers - [qzshifts,scalefactors,bulkIns,bulkOuts,chis,reflectivity,... + [~,scalefactors,bulkIns,bulkOuts,chis,reflectivity,... simulation,shiftedData,backgrounds,resolutions,sldProfiles,... layers,resampledLayers,subRoughs... ] = domainsTF.standardLayers(problemStruct,controls); case coderEnums.modelTypes.CustomLayers - [qzshifts,scalefactors,bulkIns,bulkOuts,chis,reflectivity,... + [~,scalefactors,bulkIns,bulkOuts,chis,reflectivity,... simulation,shiftedData,backgrounds,resolutions,sldProfiles,... layers,resampledLayers,subRoughs... ] = domainsTF.customLayers(problemStruct,controls); case coderEnums.modelTypes.CustomXY - [qzshifts,scalefactors,bulkIns,bulkOuts,chis,reflectivity,... + [~,scalefactors,bulkIns,bulkOuts,chis,reflectivity,... simulation,shiftedData,backgrounds,resolutions,sldProfiles,... layers,resampledLayers,subRoughs... ] = domainsTF.customXY(problemStruct,controls); From 0d2dccd4f868e99b46c5a52491bd4a22f68f97bd Mon Sep 17 00:00:00 2001 From: Paul Sharp <44529197+DrPaulSharp@users.noreply.github.com> Date: Wed, 25 Jun 2025 15:24:29 +0100 Subject: [PATCH 02/16] Adds routine "setupCalculation" --- targetFunctions/+normalTF/standardLayers.m | 133 ++++++++++----------- 1 file changed, 65 insertions(+), 68 deletions(-) diff --git a/targetFunctions/+normalTF/standardLayers.m b/targetFunctions/+normalTF/standardLayers.m index 548e86d83..07be56ac9 100644 --- a/targetFunctions/+normalTF/standardLayers.m +++ b/targetFunctions/+normalTF/standardLayers.m @@ -40,6 +40,17 @@ sldProfiles = cell(numberOfContrasts,1); layers = cell(numberOfContrasts,1); resampledLayers = cell(numberOfContrasts,1); + + % Extract the relevant parameter values for this contrast + % from the input arrays. + % First need to decide which values of the data shifts, scalefactors, + % and bulk contrasts are associated with this contrast + for i = 1:numberOfContrasts + [qzshifts(i),scalefactors(i),bulkIns(i),bulkOuts(i)] = backSort( ... + contrastQzshiftIndices(i),contrastScalefactorIndices(i),... + contrastBulkInIndices(i),contrastBulkOutIndices(i),... + qzshiftValues,scalefactorValues,bulkInValues,bulkOutValues); + end switch lower(problemStruct.modelType) @@ -76,6 +87,14 @@ bulkInValues,bulkOutValues,contrastCustomFiles,numberOfContrasts,numberOfOutputColumns,customFiles,paramValues,useImaginary); case coderEnums.modelTypes.CustomXY + + % Process the custom models + numberOfOutputColumns = 3; + [slds,subRoughs] = normalTF.processCustomFunction(contrastBulkInIndices,... + contrastBulkOutIndices,bulkInValues,bulkOutValues,... + contrastCustomFiles,numberOfContrasts,numberOfOutputColumns,... + customFiles,paramValues,useImaginary); + otherwise coderException(coderEnums.errorCodes.invalidOption, 'The model type "%s" is not supported', problemStruct.modelType); @@ -83,26 +102,17 @@ if strcmpi(problemStruct.modelType, coderEnums.modelTypes.CustomXY) - % Process the custom models - numberOfOutputColumns = 3; - [slds,subRoughs] = normalTF.processCustomFunction(contrastBulkInIndices,... - contrastBulkOutIndices,bulkInValues,bulkOutValues,... - contrastCustomFiles,numberOfContrasts,numberOfOutputColumns,... - customFiles,paramValues,useImaginary); - if strcmpi(parallel, coderEnums.parallelOptions.Contrasts) % Loop over all the contrasts parfor i = 1:numberOfContrasts - [qzshifts(i),scalefactors(i),bulkIns(i),bulkOuts(i),chis(i),... + [chis(i),... reflectivity{i},simulation{i},shiftedData{i},backgrounds{i},... resolutions{i},sldProfiles{i},layers{i},resampledLayers{i}... ] = customXYContrastCalculation(contrastBackgroundIndices{i},... - contrastQzshiftIndices(i),contrastScalefactorIndices(i),... - contrastBulkInIndices(i),contrastBulkOutIndices(i),... - contrastResolutionIndices{i},backgroundParamValues,qzshiftValues,... - scalefactorValues,bulkInValues,bulkOutValues,resolutionParamValues,... + contrastResolutionIndices{i},backgroundParamValues,resolutionParamValues,... + qzshifts(i),scalefactors(i),bulkIns(i),bulkOuts(i),... dataPresent(i),data{i},dataLimits{i},simulationLimits{i},... contrastBackgroundTypes{i},contrastBackgroundActions{i},... contrastResolutionTypes{i},customFiles,nParams,parallel,... @@ -116,14 +126,12 @@ % Loop over all the contrasts for i = 1:numberOfContrasts - [qzshifts(i),scalefactors(i),bulkIns(i),bulkOuts(i),chis(i),... + [chis(i),... reflectivity{i},simulation{i},shiftedData{i},backgrounds{i},... resolutions{i},sldProfiles{i},layers{i},resampledLayers{i}... ] = customXYContrastCalculation(contrastBackgroundIndices{i},... - contrastQzshiftIndices(i),contrastScalefactorIndices(i),... - contrastBulkInIndices(i),contrastBulkOutIndices(i),... - contrastResolutionIndices{i},backgroundParamValues,qzshiftValues,... - scalefactorValues,bulkInValues,bulkOutValues,resolutionParamValues,... + contrastResolutionIndices{i},backgroundParamValues,resolutionParamValues,... + qzshifts(i),scalefactors(i),bulkIns(i),bulkOuts(i),... dataPresent(i),data{i},dataLimits{i},simulationLimits{i},... contrastBackgroundTypes{i},contrastBackgroundActions{i},... contrastResolutionTypes{i},customFiles,nParams,parallel,... @@ -140,14 +148,12 @@ % Loop over all the contrasts parfor i = 1:numberOfContrasts - [qzshifts(i),scalefactors(i),bulkIns(i),bulkOuts(i),chis(i),... + [chis(i),... reflectivity{i},simulation{i},shiftedData{i},backgrounds{i},... resolutions{i},sldProfiles{i},layers{i},resampledLayers{i}... ] = layersContrastCalculation(contrastBackgroundIndices{i},... - contrastQzshiftIndices(i),contrastScalefactorIndices(i),... - contrastBulkInIndices(i),contrastBulkOutIndices(i),... - contrastResolutionIndices{i},backgroundParamValues,qzshiftValues,... - scalefactorValues,bulkInValues,bulkOutValues,resolutionParamValues,... + contrastResolutionIndices{i},backgroundParamValues,resolutionParamValues,... + qzshifts(i),scalefactors(i),bulkIns(i),bulkOuts(i),... dataPresent(i),data{i},dataLimits{i},simulationLimits{i},repeatLayers(i),... contrastBackgroundTypes{i},contrastBackgroundActions{i},... contrastResolutionTypes{i},customFiles,nParams,parallel,... @@ -161,14 +167,12 @@ % Loop over all the contrasts for i = 1:numberOfContrasts - [qzshifts(i),scalefactors(i),bulkIns(i),bulkOuts(i),chis(i),... + [chis(i),... reflectivity{i},simulation{i},shiftedData{i},backgrounds{i},... resolutions{i},sldProfiles{i},layers{i},resampledLayers{i}... ] = layersContrastCalculation(contrastBackgroundIndices{i},... - contrastQzshiftIndices(i),contrastScalefactorIndices(i),... - contrastBulkInIndices(i),contrastBulkOutIndices(i),... - contrastResolutionIndices{i},backgroundParamValues,qzshiftValues, ... - scalefactorValues,bulkInValues,bulkOutValues,resolutionParamValues,... + contrastResolutionIndices{i},backgroundParamValues,resolutionParamValues,... + qzshifts(i),scalefactors(i),bulkIns(i),bulkOuts(i),... dataPresent(i),data{i},dataLimits{i},simulationLimits{i},repeatLayers(i),... contrastBackgroundTypes{i},contrastBackgroundActions{i},... contrastResolutionTypes{i},customFiles,nParams,parallel,... @@ -190,33 +194,21 @@ end -function [qzshift,scalefactor,bulkIn,bulkOut,chi,reflectivity,simulation,... +function [chi,reflectivity,simulation,... shiftedData,background,resolution,sldProfile,layers,... - resampledLayers] = layersContrastCalculation(backgroundParamIndex,qzshiftIndex,... - scalefactorIndex,bulkInIndex,bulkOutIndex,resolutionParamIndex,... - backgroundParams,qzshiftValues,scalefactorValues,bulkInValues,... - bulkOutValues,resolutionParams,dataPresent,data,dataLimits,... + resampledLayers] = layersContrastCalculation(backgroundParamIndex,resolutionParamIndex,... + backgroundParams,resolutionParams,qzshift,scalefactor,bulkIn,bulkOut,... + dataPresent,data,dataLimits,... simulationLimits,repeatLayers,backgroundType,backgroundAction,... resolutionType,customFiles,nParams,parallel,numSimulationPoints,... resampleMinAngle,resampleNPoints,resample,geometry,roughness,calcSld,... contrastLayers) - % Extract the relevant parameter values for this contrast - % from the input arrays. - % First need to decide which values of the backgrounds, scalefactors - % data shifts and bulk contrasts are associated with this contrast - [qzshift,scalefactor,bulkIn,bulkOut] = backSort( ... - qzshiftIndex,scalefactorIndex,bulkInIndex,bulkOutIndex, ... - qzshiftValues,scalefactorValues,bulkInValues,bulkOutValues); - - % Apply scale factors and q shifts to the data - shiftedData = shiftData(scalefactor,qzshift,dataPresent,data,dataLimits,simulationLimits,numSimulationPoints); - [simulationXData, dataIndices] = makeSimulationRange(shiftedData, simulationLimits); - - background = constructBackground(backgroundType,backgroundParamIndex, ... - shiftedData,customFiles,backgroundParams,simulationXData,dataIndices); - resolution = constructResolution(resolutionType,resolutionParamIndex, ... - shiftedData,customFiles,resolutionParams,simulationXData,dataIndices); + [background,resolution,shiftedData,simulationXData, dataIndices... + ] = setupCalculation(backgroundParamIndex,... + resolutionParamIndex,backgroundParams,resolutionParams,qzshift,scalefactor,... + dataPresent,data,dataLimits,simulationLimits,... + backgroundType,resolutionType,customFiles,numSimulationPoints); % Call the core layers calculation [reflectivity,simulation,shiftedData,sldProfile,layers,... @@ -229,32 +221,20 @@ end -function [qzshift,scalefactor,bulkIn,bulkOut,chi,reflectivity,simulation,... +function [chi,reflectivity,simulation,... shiftedData,background,resolution,sldProfile,layers,... resampledLayers] = customXYContrastCalculation(backgroundParamIndex,... - qzshiftIndex,scalefactorIndex,bulkInIndex,bulkOutIndex,resolutionParamIndex,... - backgroundParams,qzshiftValues,scalefactorValues,bulkInValues,bulkOutValues,... - resolutionParams,dataPresent,data,dataLimits,simulationLimits,... + resolutionParamIndex,backgroundParams,resolutionParams,qzshift,scalefactor,bulkIn,bulkOut,... + dataPresent,data,dataLimits,simulationLimits,... backgroundType,backgroundAction,resolutionType,customFiles,nParams,... parallel,numSimulationPoints,resampleMinAngle,resampleNPoints,roughness,... sld) - % Extract the relevant parameter values for this contrast - % from the input arrays. - % First need to decide which values of the backgrounds, scalefactors - % data shifts and bulk contrasts are associated with this contrast - [qzshift,scalefactor,bulkIn,bulkOut] = backSort( ... - qzshiftIndex,scalefactorIndex,bulkInIndex,bulkOutIndex, ... - qzshiftValues,scalefactorValues,bulkInValues,bulkOutValues); - - % Apply scale factors and q shifts to the data - shiftedData = shiftData(scalefactor,qzshift,dataPresent,data,dataLimits,simulationLimits,numSimulationPoints); - [simulationXData, dataIndices] = makeSimulationRange(shiftedData, simulationLimits); - - background = constructBackground(backgroundType,backgroundParamIndex,... - shiftedData,customFiles,backgroundParams,simulationXData,dataIndices); - resolution = constructResolution(resolutionType,resolutionParamIndex,... - shiftedData,customFiles,resolutionParams,simulationXData,dataIndices); + [background,resolution,shiftedData,simulationXData, dataIndices... + ] = setupCalculation(backgroundParamIndex,... + resolutionParamIndex,backgroundParams,resolutionParams,qzshift,scalefactor,... + dataPresent,data,dataLimits,simulationLimits,... + backgroundType,resolutionType,customFiles,numSimulationPoints); % Resample the layers sldProfile = sld(:,[1,2]); @@ -271,3 +251,20 @@ chi = chiSquared(shiftedData,reflectivity,nParams); end + +function [background,resolution,shiftedData,simulationXData, dataIndices... + ] = setupCalculation(backgroundParamIndex,... + resolutionParamIndex,backgroundParams,resolutionParams,qzshift,scalefactor,... + dataPresent,data,dataLimits,simulationLimits,... + backgroundType,resolutionType,customFiles,numSimulationPoints) + + % Apply scale factors and q shifts to the data + shiftedData = shiftData(scalefactor,qzshift,dataPresent,data,dataLimits,simulationLimits,numSimulationPoints); + [simulationXData, dataIndices] = makeSimulationRange(shiftedData, simulationLimits); + + background = constructBackground(backgroundType,backgroundParamIndex,... + shiftedData,customFiles,backgroundParams,simulationXData,dataIndices); + resolution = constructResolution(resolutionType,resolutionParamIndex,... + shiftedData,customFiles,resolutionParams,simulationXData,dataIndices); + +end From e2fd285c1dfc046a5d8ddd29af97d84f2a7097ca Mon Sep 17 00:00:00 2001 From: Paul Sharp <44529197+DrPaulSharp@users.noreply.github.com> Date: Wed, 25 Jun 2025 16:28:16 +0100 Subject: [PATCH 03/16] Refactors calculation routines --- targetFunctions/+normalTF/standardLayers.m | 144 +++++++++------------ 1 file changed, 58 insertions(+), 86 deletions(-) diff --git a/targetFunctions/+normalTF/standardLayers.m b/targetFunctions/+normalTF/standardLayers.m index 07be56ac9..55334c202 100644 --- a/targetFunctions/+normalTF/standardLayers.m +++ b/targetFunctions/+normalTF/standardLayers.m @@ -106,17 +106,19 @@ % Loop over all the contrasts parfor i = 1:numberOfContrasts - - [chis(i),... - reflectivity{i},simulation{i},shiftedData{i},backgrounds{i},... - resolutions{i},sldProfiles{i},layers{i},resampledLayers{i}... - ] = customXYContrastCalculation(contrastBackgroundIndices{i},... - contrastResolutionIndices{i},backgroundParamValues,resolutionParamValues,... - qzshifts(i),scalefactors(i),bulkIns(i),bulkOuts(i),... + + [backgrounds{i},resolutions{i},shiftedData{i},simulationXData,dataIndices... + ] = setupCalculation(contrastBackgroundIndices{i},... + contrastResolutionIndices{i},backgroundParamValues,resolutionParamValues,qzshifts(i),scalefactors(i),... dataPresent(i),data{i},dataLimits{i},simulationLimits{i},... - contrastBackgroundTypes{i},contrastBackgroundActions{i},... - contrastResolutionTypes{i},customFiles,nParams,parallel,... - numSimulationPoints,resampleMinAngle,resampleNPoints,... + contrastBackgroundTypes{i},contrastResolutionTypes{i},customFiles,numSimulationPoints); + + [reflectivity{i},simulation{i},shiftedData{i},... + sldProfiles{i},layers{i},resampledLayers{i},chis(i)... + ] = customXYContrastCalculation(bulkIns(i),bulkOuts(i),... + shiftedData{i},simulationXData,dataIndices,... + resolutions{i},backgrounds{i},contrastBackgroundActions{i},... + nParams,parallel,resampleMinAngle,resampleNPoints,... subRoughs(i),slds{i}); end @@ -125,17 +127,19 @@ % Loop over all the contrasts for i = 1:numberOfContrasts - - [chis(i),... - reflectivity{i},simulation{i},shiftedData{i},backgrounds{i},... - resolutions{i},sldProfiles{i},layers{i},resampledLayers{i}... - ] = customXYContrastCalculation(contrastBackgroundIndices{i},... - contrastResolutionIndices{i},backgroundParamValues,resolutionParamValues,... - qzshifts(i),scalefactors(i),bulkIns(i),bulkOuts(i),... + + [backgrounds{i},resolutions{i},shiftedData{i},simulationXData,dataIndices... + ] = setupCalculation(contrastBackgroundIndices{i},... + contrastResolutionIndices{i},backgroundParamValues,resolutionParamValues,qzshifts(i),scalefactors(i),... dataPresent(i),data{i},dataLimits{i},simulationLimits{i},... - contrastBackgroundTypes{i},contrastBackgroundActions{i},... - contrastResolutionTypes{i},customFiles,nParams,parallel,... - numSimulationPoints,resampleMinAngle,resampleNPoints,... + contrastBackgroundTypes{i},contrastResolutionTypes{i},customFiles,numSimulationPoints); + + [reflectivity{i},simulation{i},shiftedData{i},... + sldProfiles{i},layers{i},resampledLayers{i},chis(i)... + ] = customXYContrastCalculation(bulkIns(i),bulkOuts(i),... + shiftedData{i},simulationXData,dataIndices,... + resolutions{i},backgrounds{i},contrastBackgroundActions{i},... + nParams,parallel,resampleMinAngle,resampleNPoints,... subRoughs(i),slds{i}); end @@ -148,18 +152,19 @@ % Loop over all the contrasts parfor i = 1:numberOfContrasts - [chis(i),... - reflectivity{i},simulation{i},shiftedData{i},backgrounds{i},... - resolutions{i},sldProfiles{i},layers{i},resampledLayers{i}... - ] = layersContrastCalculation(contrastBackgroundIndices{i},... - contrastResolutionIndices{i},backgroundParamValues,resolutionParamValues,... - qzshifts(i),scalefactors(i),bulkIns(i),bulkOuts(i),... - dataPresent(i),data{i},dataLimits{i},simulationLimits{i},repeatLayers(i),... - contrastBackgroundTypes{i},contrastBackgroundActions{i},... - contrastResolutionTypes{i},customFiles,nParams,parallel,... - numSimulationPoints,resampleMinAngle,resampleNPoints,resample(i),... - geometry,subRoughs(i),calcSld,contrastLayers{i}); - + [backgrounds{i},resolutions{i},shiftedData{i},simulationXData,dataIndices... + ] = setupCalculation(contrastBackgroundIndices{i},... + contrastResolutionIndices{i},backgroundParamValues,resolutionParamValues,qzshifts(i),scalefactors(i),... + dataPresent(i),data{i},dataLimits{i},simulationLimits{i},... + contrastBackgroundTypes{i},contrastResolutionTypes{i},customFiles,numSimulationPoints); + + [reflectivity{i},simulation{i},shiftedData{i},sldProfiles{i},layers{i},... + resampledLayers{i}] = normalTF.coreLayersCalculation(contrastLayers{i},subRoughs(i),... + geometry,bulkIns(i),bulkOuts(i),resample(i),calcSld,shiftedData{i},simulationXData,dataIndices,repeatLayers(i),... + resolutions{i},backgrounds{i},contrastBackgroundActions{i},parallel,resampleMinAngle,resampleNPoints); + + chis(i) = chiSquared(shiftedData{i},reflectivity{i},nParams); + end else @@ -167,18 +172,19 @@ % Loop over all the contrasts for i = 1:numberOfContrasts - [chis(i),... - reflectivity{i},simulation{i},shiftedData{i},backgrounds{i},... - resolutions{i},sldProfiles{i},layers{i},resampledLayers{i}... - ] = layersContrastCalculation(contrastBackgroundIndices{i},... - contrastResolutionIndices{i},backgroundParamValues,resolutionParamValues,... - qzshifts(i),scalefactors(i),bulkIns(i),bulkOuts(i),... - dataPresent(i),data{i},dataLimits{i},simulationLimits{i},repeatLayers(i),... - contrastBackgroundTypes{i},contrastBackgroundActions{i},... - contrastResolutionTypes{i},customFiles,nParams,parallel,... - numSimulationPoints,resampleMinAngle,resampleNPoints,resample(i),... - geometry,subRoughs(i),calcSld,contrastLayers{i}); - + [backgrounds{i},resolutions{i},shiftedData{i},simulationXData,dataIndices... + ] = setupCalculation(contrastBackgroundIndices{i},... + contrastResolutionIndices{i},backgroundParamValues,resolutionParamValues,qzshifts(i),scalefactors(i),... + dataPresent(i),data{i},dataLimits{i},simulationLimits{i},... + contrastBackgroundTypes{i},contrastResolutionTypes{i},customFiles,numSimulationPoints); + + [reflectivity{i},simulation{i},shiftedData{i},sldProfiles{i},layers{i},... + resampledLayers{i}] = normalTF.coreLayersCalculation(contrastLayers{i},subRoughs(i),... + geometry,bulkIns(i),bulkOuts(i),resample(i),calcSld,shiftedData{i},simulationXData,dataIndices,repeatLayers(i),... + resolutions{i},backgrounds{i},contrastBackgroundActions{i},parallel,resampleMinAngle,resampleNPoints); + + chis(i) = chiSquared(shiftedData{i},reflectivity{i},nParams); + end end end @@ -193,49 +199,15 @@ end - -function [chi,reflectivity,simulation,... - shiftedData,background,resolution,sldProfile,layers,... - resampledLayers] = layersContrastCalculation(backgroundParamIndex,resolutionParamIndex,... - backgroundParams,resolutionParams,qzshift,scalefactor,bulkIn,bulkOut,... - dataPresent,data,dataLimits,... - simulationLimits,repeatLayers,backgroundType,backgroundAction,... - resolutionType,customFiles,nParams,parallel,numSimulationPoints,... - resampleMinAngle,resampleNPoints,resample,geometry,roughness,calcSld,... - contrastLayers) - - [background,resolution,shiftedData,simulationXData, dataIndices... - ] = setupCalculation(backgroundParamIndex,... - resolutionParamIndex,backgroundParams,resolutionParams,qzshift,scalefactor,... - dataPresent,data,dataLimits,simulationLimits,... - backgroundType,resolutionType,customFiles,numSimulationPoints); - - % Call the core layers calculation - [reflectivity,simulation,shiftedData,sldProfile,layers,... - resampledLayers] = normalTF.coreLayersCalculation(contrastLayers,roughness,... - geometry,bulkIn,bulkOut,resample,calcSld,shiftedData,simulationXData,dataIndices,repeatLayers,... - resolution,background,backgroundAction,parallel,resampleMinAngle,resampleNPoints); - - % Calculate chi squared - chi = chiSquared(shiftedData,reflectivity,nParams); - -end - -function [chi,reflectivity,simulation,... - shiftedData,background,resolution,sldProfile,layers,... - resampledLayers] = customXYContrastCalculation(backgroundParamIndex,... - resolutionParamIndex,backgroundParams,resolutionParams,qzshift,scalefactor,bulkIn,bulkOut,... - dataPresent,data,dataLimits,simulationLimits,... - backgroundType,backgroundAction,resolutionType,customFiles,nParams,... - parallel,numSimulationPoints,resampleMinAngle,resampleNPoints,roughness,... +function [reflectivity,simulation,... + shiftedData,sldProfile,layers,... + resampledLayers,chi] = customXYContrastCalculation(bulkIn,bulkOut,... + shiftedData,simulationXData,dataIndices,... + resolution,background,... + backgroundAction,nParams,... + parallel,resampleMinAngle,resampleNPoints,roughness,... sld) - [background,resolution,shiftedData,simulationXData, dataIndices... - ] = setupCalculation(backgroundParamIndex,... - resolutionParamIndex,backgroundParams,resolutionParams,qzshift,scalefactor,... - dataPresent,data,dataLimits,simulationLimits,... - backgroundType,resolutionType,customFiles,numSimulationPoints); - % Resample the layers sldProfile = sld(:,[1,2]); sldProfileIm = sld(:,[1,3]); @@ -252,7 +224,7 @@ end -function [background,resolution,shiftedData,simulationXData, dataIndices... +function [background,resolution,shiftedData,simulationXData,dataIndices... ] = setupCalculation(backgroundParamIndex,... resolutionParamIndex,backgroundParams,resolutionParams,qzshift,scalefactor,... dataPresent,data,dataLimits,simulationLimits,... From 93e9fcb95b03a53e72a9058ef462593e6338da7e Mon Sep 17 00:00:00 2001 From: Paul Sharp <44529197+DrPaulSharp@users.noreply.github.com> Date: Thu, 26 Jun 2025 10:46:03 +0100 Subject: [PATCH 04/16] Tidies up calculation routine --- targetFunctions/+normalTF/standardLayers.m | 129 ++++++++++++--------- 1 file changed, 77 insertions(+), 52 deletions(-) diff --git a/targetFunctions/+normalTF/standardLayers.m b/targetFunctions/+normalTF/standardLayers.m index 55334c202..7b1661be1 100644 --- a/targetFunctions/+normalTF/standardLayers.m +++ b/targetFunctions/+normalTF/standardLayers.m @@ -1,11 +1,12 @@ function [qzshifts,scalefactors,bulkIns,bulkOuts,chis,reflectivity,... simulation,shiftedData,backgrounds,resolutions,sldProfiles,layers,... resampledLayers,subRoughs] = standardLayers(problemStruct,controls) - % This is the main reflectivity calculation of the standard layers - % calculation type. It extracts the required parameters for the contrasts + % This is the main normal reflectivity calculation. + % It extracts the required parameters for the contrasts % from the input arrays, then passes the main calculation to - % 'coreLayersCalculation', which carries out the calculation itself. - % The core calculation is common for both standard and custom layers. + % the appropriate core calculation, which carries out the calculation + % itself. The core layers calculation is common for both standard and + % custom layers, with an additional core custom XY calculation. % Extract parameters from problemStruct [numberOfContrasts, geometry, contrastBackgroundIndices, contrastQzshiftIndices,... @@ -41,15 +42,16 @@ layers = cell(numberOfContrasts,1); resampledLayers = cell(numberOfContrasts,1); - % Extract the relevant parameter values for this contrast - % from the input arrays. - % First need to decide which values of the data shifts, scalefactors, - % and bulk contrasts are associated with this contrast + % Extract the relevant parameter values for this contrast from the + % input arrays. We need to determine which values of the data shifts, + % scalefactors, and bulk contrasts are associated with this contrast. for i = 1:numberOfContrasts + [qzshifts(i),scalefactors(i),bulkIns(i),bulkOuts(i)] = backSort( ... - contrastQzshiftIndices(i),contrastScalefactorIndices(i),... - contrastBulkInIndices(i),contrastBulkOutIndices(i),... - qzshiftValues,scalefactorValues,bulkInValues,bulkOutValues); + contrastQzshiftIndices(i),contrastScalefactorIndices(i),... + contrastBulkInIndices(i),contrastBulkOutIndices(i),... + qzshiftValues,scalefactorValues,bulkInValues,bulkOutValues); + end switch lower(problemStruct.modelType) @@ -62,15 +64,16 @@ layerValues = allocateParamsToLayers(paramValues, layersDetails); contrastLayers = cell(numberOfContrasts,1); + for i = 1:numberOfContrasts % Substrate roughness is always first parameter for - % standard layers + % standard layers. subRoughs(i) = paramValues(1); - % Also need to determine which layers from the overall layers - % list are required for this contrast, and put them in the - % correct order according to geometry + % Also need to determine which layers from the overall + % layers list are required for this contrast, and put them + % in the correct order according to geometry. layerIndices = contrastLayersIndices{i}; contrastLayers{i} = zeros(length(layerIndices), 6); for j = 1:length(layerIndices) @@ -83,19 +86,23 @@ % Process the custom models numberOfOutputColumns = 6; - [contrastLayers,subRoughs] = normalTF.processCustomFunction(contrastBulkInIndices,contrastBulkOutIndices,... - bulkInValues,bulkOutValues,contrastCustomFiles,numberOfContrasts,numberOfOutputColumns,customFiles,paramValues,useImaginary); + [contrastLayers,subRoughs] = normalTF.processCustomFunction(... + contrastBulkInIndices,contrastBulkOutIndices,... + bulkInValues,bulkOutValues,contrastCustomFiles,... + numberOfContrasts,numberOfOutputColumns,customFiles,... + paramValues,useImaginary); case coderEnums.modelTypes.CustomXY % Process the custom models numberOfOutputColumns = 3; - [slds,subRoughs] = normalTF.processCustomFunction(contrastBulkInIndices,... - contrastBulkOutIndices,bulkInValues,bulkOutValues,... - contrastCustomFiles,numberOfContrasts,numberOfOutputColumns,... - customFiles,paramValues,useImaginary); + [slds,subRoughs] = normalTF.processCustomFunction( ... + contrastBulkInIndices,contrastBulkOutIndices,bulkInValues,... + bulkOutValues,contrastCustomFiles,numberOfContrasts,... + numberOfOutputColumns,customFiles,paramValues,useImaginary); otherwise + coderException(coderEnums.errorCodes.invalidOption, 'The model type "%s" is not supported', problemStruct.modelType); end @@ -107,11 +114,14 @@ % Loop over all the contrasts parfor i = 1:numberOfContrasts - [backgrounds{i},resolutions{i},shiftedData{i},simulationXData,dataIndices... + [backgrounds{i},resolutions{i},shiftedData{i},... + simulationXData,dataIndices... ] = setupCalculation(contrastBackgroundIndices{i},... - contrastResolutionIndices{i},backgroundParamValues,resolutionParamValues,qzshifts(i),scalefactors(i),... + contrastResolutionIndices{i},backgroundParamValues,... + resolutionParamValues,qzshifts(i),scalefactors(i),... dataPresent(i),data{i},dataLimits{i},simulationLimits{i},... - contrastBackgroundTypes{i},contrastResolutionTypes{i},customFiles,numSimulationPoints); + contrastBackgroundTypes{i},contrastResolutionTypes{i},... + customFiles,numSimulationPoints); [reflectivity{i},simulation{i},shiftedData{i},... sldProfiles{i},layers{i},resampledLayers{i},chis(i)... @@ -128,11 +138,14 @@ % Loop over all the contrasts for i = 1:numberOfContrasts - [backgrounds{i},resolutions{i},shiftedData{i},simulationXData,dataIndices... + [backgrounds{i},resolutions{i},shiftedData{i},... + simulationXData,dataIndices... ] = setupCalculation(contrastBackgroundIndices{i},... - contrastResolutionIndices{i},backgroundParamValues,resolutionParamValues,qzshifts(i),scalefactors(i),... + contrastResolutionIndices{i},backgroundParamValues,... + resolutionParamValues,qzshifts(i),scalefactors(i),... dataPresent(i),data{i},dataLimits{i},simulationLimits{i},... - contrastBackgroundTypes{i},contrastResolutionTypes{i},customFiles,numSimulationPoints); + contrastBackgroundTypes{i},contrastResolutionTypes{i},... + customFiles,numSimulationPoints); [reflectivity{i},simulation{i},shiftedData{i},... sldProfiles{i},layers{i},resampledLayers{i},chis(i)... @@ -152,16 +165,23 @@ % Loop over all the contrasts parfor i = 1:numberOfContrasts - [backgrounds{i},resolutions{i},shiftedData{i},simulationXData,dataIndices... + [backgrounds{i},resolutions{i},shiftedData{i},... + simulationXData,dataIndices... ] = setupCalculation(contrastBackgroundIndices{i},... - contrastResolutionIndices{i},backgroundParamValues,resolutionParamValues,qzshifts(i),scalefactors(i),... + contrastResolutionIndices{i},backgroundParamValues,... + resolutionParamValues,qzshifts(i),scalefactors(i),... dataPresent(i),data{i},dataLimits{i},simulationLimits{i},... - contrastBackgroundTypes{i},contrastResolutionTypes{i},customFiles,numSimulationPoints); + contrastBackgroundTypes{i},contrastResolutionTypes{i},... + customFiles,numSimulationPoints); - [reflectivity{i},simulation{i},shiftedData{i},sldProfiles{i},layers{i},... - resampledLayers{i}] = normalTF.coreLayersCalculation(contrastLayers{i},subRoughs(i),... - geometry,bulkIns(i),bulkOuts(i),resample(i),calcSld,shiftedData{i},simulationXData,dataIndices,repeatLayers(i),... - resolutions{i},backgrounds{i},contrastBackgroundActions{i},parallel,resampleMinAngle,resampleNPoints); + [reflectivity{i},simulation{i},shiftedData{i},... + sldProfiles{i},layers{i},resampledLayers{i}... + ] = normalTF.coreLayersCalculation(contrastLayers{i},... + subRoughs(i),geometry,bulkIns(i),bulkOuts(i),resample(i),... + calcSld,shiftedData{i},simulationXData,dataIndices,... + repeatLayers(i),resolutions{i},backgrounds{i},... + contrastBackgroundActions{i},parallel,... + resampleMinAngle,resampleNPoints); chis(i) = chiSquared(shiftedData{i},reflectivity{i},nParams); @@ -172,16 +192,23 @@ % Loop over all the contrasts for i = 1:numberOfContrasts - [backgrounds{i},resolutions{i},shiftedData{i},simulationXData,dataIndices... + [backgrounds{i},resolutions{i},shiftedData{i},... + simulationXData,dataIndices... ] = setupCalculation(contrastBackgroundIndices{i},... - contrastResolutionIndices{i},backgroundParamValues,resolutionParamValues,qzshifts(i),scalefactors(i),... + contrastResolutionIndices{i},backgroundParamValues,... + resolutionParamValues,qzshifts(i),scalefactors(i),... dataPresent(i),data{i},dataLimits{i},simulationLimits{i},... - contrastBackgroundTypes{i},contrastResolutionTypes{i},customFiles,numSimulationPoints); + contrastBackgroundTypes{i},contrastResolutionTypes{i},... + customFiles,numSimulationPoints); - [reflectivity{i},simulation{i},shiftedData{i},sldProfiles{i},layers{i},... - resampledLayers{i}] = normalTF.coreLayersCalculation(contrastLayers{i},subRoughs(i),... - geometry,bulkIns(i),bulkOuts(i),resample(i),calcSld,shiftedData{i},simulationXData,dataIndices,repeatLayers(i),... - resolutions{i},backgrounds{i},contrastBackgroundActions{i},parallel,resampleMinAngle,resampleNPoints); + [reflectivity{i},simulation{i},shiftedData{i},... + sldProfiles{i},layers{i},resampledLayers{i}... + ] = normalTF.coreLayersCalculation(contrastLayers{i},... + subRoughs(i),geometry,bulkIns(i),bulkOuts(i),resample(i),... + calcSld,shiftedData{i},simulationXData,dataIndices,... + repeatLayers(i),resolutions{i},backgrounds{i},... + contrastBackgroundActions{i},parallel,... + resampleMinAngle,resampleNPoints); chis(i) = chiSquared(shiftedData{i},reflectivity{i},nParams); @@ -199,14 +226,11 @@ end -function [reflectivity,simulation,... - shiftedData,sldProfile,layers,... +function [reflectivity,simulation,shiftedData,sldProfile,layers,... resampledLayers,chi] = customXYContrastCalculation(bulkIn,bulkOut,... - shiftedData,simulationXData,dataIndices,... - resolution,background,... - backgroundAction,nParams,... - parallel,resampleMinAngle,resampleNPoints,roughness,... - sld) + shiftedData,simulationXData,dataIndices,resolution,background,... + backgroundAction,nParams,parallel,resampleMinAngle,resampleNPoints,... + roughness,sld) % Resample the layers sldProfile = sld(:,[1,2]); @@ -225,13 +249,14 @@ end function [background,resolution,shiftedData,simulationXData,dataIndices... - ] = setupCalculation(backgroundParamIndex,... - resolutionParamIndex,backgroundParams,resolutionParams,qzshift,scalefactor,... - dataPresent,data,dataLimits,simulationLimits,... - backgroundType,resolutionType,customFiles,numSimulationPoints) + ] = setupCalculation(backgroundParamIndex,resolutionParamIndex,... + backgroundParams,resolutionParams,qzshift,scalefactor,... + dataPresent,data,dataLimits,simulationLimits,backgroundType,... + resolutionType,customFiles,numSimulationPoints) % Apply scale factors and q shifts to the data shiftedData = shiftData(scalefactor,qzshift,dataPresent,data,dataLimits,simulationLimits,numSimulationPoints); + [simulationXData, dataIndices] = makeSimulationRange(shiftedData, simulationLimits); background = constructBackground(backgroundType,backgroundParamIndex,... From 427db6580e61f68e26cbe50ae52382cef3ad4f07 Mon Sep 17 00:00:00 2001 From: Paul Sharp <44529197+DrPaulSharp@users.noreply.github.com> Date: Thu, 26 Jun 2025 12:29:02 +0100 Subject: [PATCH 05/16] Refactors and merges domains layer calculation routines. --- targetFunctions/+domainsTF/standardLayers.m | 145 +++++++++++--------- targetFunctions/reflectivityCalculation.m | 2 +- 2 files changed, 83 insertions(+), 64 deletions(-) diff --git a/targetFunctions/+domainsTF/standardLayers.m b/targetFunctions/+domainsTF/standardLayers.m index 38956fb6d..4e566b486 100644 --- a/targetFunctions/+domainsTF/standardLayers.m +++ b/targetFunctions/+domainsTF/standardLayers.m @@ -14,9 +14,10 @@ qzshiftValues, scalefactorValues, bulkInValues, bulkOutValues,... resolutionParamValues, domainRatioValues, dataPresent, nParams, paramValues,... ~, resample, contrastBackgroundTypes, contrastBackgroundActions,... - contrastResolutionTypes, ~, useImaginary, repeatLayers, data, dataLimits,... - simulationLimits, contrastLayers, layersDetails, customFiles,... - domainContrastLayers] = extractProblemParams(problemStruct); + contrastResolutionTypes, contrastCustomFiles, useImaginary,... + repeatLayers, data, dataLimits, simulationLimits, inputContrastLayers,... + layersDetails, customFiles, domainContrastLayers... + ] = extractProblemParams(problemStruct); calcSld = controls.calcSldDuringFit; parallel = controls.parallel; @@ -29,6 +30,7 @@ scalefactors = zeros(numberOfContrasts,1); bulkIns = zeros(numberOfContrasts,1); bulkOuts = zeros(numberOfContrasts,1); + domainRatios = zeros(numberOfContrasts,1); subRoughs = zeros(numberOfContrasts,1); chis = zeros(numberOfContrasts,1); @@ -45,44 +47,86 @@ layers = cell(numberOfContrasts,1); resampledLayers = cell(numberOfContrasts,1); - domainContrastLayers1 = cell(numberOfContrasts,1); - domainContrastLayers2 = cell(numberOfContrasts,1); - - % First we need to allocate the absolute values of the input - % parameters to all the layers in the layers list. This only needs - % to be done once, and so is done outside the contrasts loop - layerValues = allocateParamsToLayers(paramValues, layersDetails); - - % Substrate roughness is always first parameter for standard layers + contrastLayers1 = cell(numberOfContrasts,1); + contrastLayers2 = cell(numberOfContrasts,1); + + % Extract the relevant parameter values for this contrast from the + % input arrays. We need to determine which values of the data shifts, + % scalefactors, and bulk contrasts are associated with this contrast. for i = 1:numberOfContrasts - subRoughs(i) = paramValues(1); + + [qzshifts(i),scalefactors(i),bulkIns(i),bulkOuts(i)] = backSort( ... + contrastQzshiftIndices(i),contrastScalefactorIndices(i),... + contrastBulkInIndices(i),contrastBulkOutIndices(i),... + qzshiftValues,scalefactorValues,bulkInValues,bulkOutValues); + + % Get the domain ratio for this contrast + if isempty(contrastDomainRatioIndices(i)) + contrastDomainRatioIndices(i) = 1; + end + domainRatios(i) = domainRatioValues(contrastDomainRatioIndices(i)); + end - for i = 1:numberOfContrasts - domainContrastLayers1{i} = domainContrastLayers{contrastLayers{i}(1)}; - domainContrastLayers2{i} = domainContrastLayers{contrastLayers{i}(2)}; + + switch lower(problemStruct.modelType) + + case coderEnums.modelTypes.StandardLayers + + % First we need to allocate the absolute values of the input + % parameters to all the layers in the layers list. This only needs + % to be done once, and so is done outside the contrasts loop + layerValues = allocateParamsToLayers(paramValues, layersDetails); + + for i = 1:numberOfContrasts + + % Substrate roughness is always first parameter for standard layers + subRoughs(i) = paramValues(1); + + % Also need to determine which layers from the overall layers list + % are required for this contrast, and put them in the correct order + % according to geometry. We run it twice, once for each domain + contrastLayers1{i} = allocateLayersForContrast(domainContrastLayers{inputContrastLayers{i}(1)},layerValues); + contrastLayers2{i} = allocateLayersForContrast(domainContrastLayers{inputContrastLayers{i}(2)},layerValues); + + end + + case coderEnums.modelTypes.CustomLayers + + numberOfOutputColumns = 6; + [contrastLayers,subRoughs] = domainsTF.processCustomFunction( ... + contrastBulkInIndices,contrastBulkOutIndices,bulkInValues,bulkOutValues, ... + contrastCustomFiles,numberOfContrasts,numberOfOutputColumns,customFiles,paramValues,useImaginary); + + for i = 1:size(contrastLayers,1) + contrastLayers1{i} = contrastLayers{i,1}; + contrastLayers2{i} = contrastLayers{i,2}; + end + end + + + + + if strcmpi(parallel, coderEnums.parallelOptions.Contrasts) % Loop over all the contrasts parfor i = 1:numberOfContrasts - [qzshifts(i),scalefactors(i),bulkIns(i),bulkOuts(i),chis(i),... + [chis(i),... reflectivity{i},simulation{i},shiftedData{i},backgrounds{i},... resolutions{i},sldProfiles{i},layers{i},resampledLayers{i}... ] = contrastCalculation(contrastBackgroundIndices{i},... - contrastQzshiftIndices(i),contrastScalefactorIndices(i),... - contrastBulkInIndices(i),contrastBulkOutIndices(i),... - contrastResolutionIndices{i},contrastDomainRatioIndices(i),... - backgroundParamValues,qzshiftValues,scalefactorValues,bulkInValues,... - bulkOutValues,resolutionParamValues,domainRatioValues,dataPresent(i),... - data{i},dataLimits{i},simulationLimits{i},repeatLayers(i),... + contrastResolutionIndices{i},backgroundParamValues,... + resolutionParamValues,... + qzshifts(i),scalefactors(i),bulkIns(i),bulkOuts(i),domainRatios(i),... + dataPresent(i),data{i},dataLimits{i},simulationLimits{i},repeatLayers(i),... contrastBackgroundTypes{i},contrastBackgroundActions{i},... contrastResolutionTypes{i},customFiles,nParams,parallel,... numSimulationPoints,resampleMinAngle,resampleNPoints,resample(i),... - geometry,subRoughs(i),calcSld,domainContrastLayers1{i},... - domainContrastLayers2{i},layerValues); + geometry,subRoughs(i),calcSld,contrastLayers1{i},contrastLayers2{i}); end @@ -91,22 +135,19 @@ % Loop over all the contrasts for i = 1:numberOfContrasts - [qzshifts(i),scalefactors(i),bulkIns(i),bulkOuts(i),chis(i),... + [chis(i),... reflectivity{i},simulation{i},shiftedData{i},backgrounds{i},... resolutions{i},sldProfiles{i},layers{i},resampledLayers{i}... ] = contrastCalculation(contrastBackgroundIndices{i},... - contrastQzshiftIndices(i),contrastScalefactorIndices(i),... - contrastBulkInIndices(i),contrastBulkOutIndices(i),... - contrastResolutionIndices{i},contrastDomainRatioIndices(i),... - backgroundParamValues,qzshiftValues,scalefactorValues,bulkInValues,... - bulkOutValues,resolutionParamValues,domainRatioValues,dataPresent(i),... - data{i},dataLimits{i},simulationLimits{i},repeatLayers(i),... + contrastResolutionIndices{i},backgroundParamValues,... + resolutionParamValues,... + qzshifts(i),scalefactors(i),bulkIns(i),bulkOuts(i),domainRatios(i),... + dataPresent(i),data{i},dataLimits{i},simulationLimits{i},repeatLayers(i),... contrastBackgroundTypes{i},contrastBackgroundActions{i},... contrastResolutionTypes{i},customFiles,nParams,parallel,... numSimulationPoints,resampleMinAngle,resampleNPoints,resample(i),... - geometry,subRoughs(i),calcSld,domainContrastLayers1{i},... - domainContrastLayers2{i},layerValues); - + geometry,subRoughs(i),calcSld,contrastLayers1{i},contrastLayers2{i}); + end end @@ -140,38 +181,16 @@ end -function [qzshift,scalefactor,bulkIn,bulkOut,chi,reflectivity,simulation,... +function [chi,reflectivity,simulation,... shiftedData,background,resolution,sldProfile,layers,... - resampledLayers] = contrastCalculation(backgroundParamIndex,qzshiftIndex,... - scalefactorIndex,bulkInIndex,bulkOutIndex,resolutionParamIndex,... - domainRatioIndex,backgroundParamValues,qzshiftValues,scalefactorValues,... - bulkInValues,bulkOutValues,resolutionParamValues,domainRatioValues,... + resampledLayers] = contrastCalculation(backgroundParamIndex,... + resolutionParamIndex,backgroundParamValues,resolutionParamValues,... + qzshift,scalefactor,bulkIn,bulkOut,domainRatio,... dataPresent,data,dataLimits,simulationLimits,repeatLayers,... backgroundType,backgroundAction,resolutionType,customFiles,nParams,... parallel,numSimulationPoints,resampleMinAngle,resampleNPoints,resample,... - geometry,roughness,calcSld,domainLayersIndices1,domainLayersIndices2,... - layerValues) - - % Get the domain ratio for this contrast - if isempty(domainRatioIndex) - domainRatioIndex = 1; - end - domainRatio = domainRatioValues(domainRatioIndex); - - % Extract the relevant parameter values for this contrast - % from the input arrays. - % First need to decide which values of the backgrounds, scalefactors - % data shifts and bulk contrasts are associated with this contrast - [qzshift,scalefactor,bulkIn,bulkOut] = backSort( ... - qzshiftIndex,scalefactorIndex,bulkInIndex,bulkOutIndex, ... - qzshiftValues,scalefactorValues,bulkInValues,bulkOutValues); - - % Also need to determine which layers from the overall layers list - % are required for this contrast, and put them in the correct order - % according to geometry. We run it twice, once for each domain - contrastLayers1 = allocateLayersForContrast(domainLayersIndices1,layerValues); - contrastLayers2 = allocateLayersForContrast(domainLayersIndices2,layerValues); - + geometry,roughness,calcSld,contrastLayers1,contrastLayers2) + % Apply scale factors and q shifts to the data shiftedData = shiftData(scalefactor,qzshift,dataPresent,data,dataLimits,simulationLimits,numSimulationPoints); [simulationXData, dataIndices] = makeSimulationRange(shiftedData, simulationLimits); diff --git a/targetFunctions/reflectivityCalculation.m b/targetFunctions/reflectivityCalculation.m index 09dc3d428..dd3766123 100644 --- a/targetFunctions/reflectivityCalculation.m +++ b/targetFunctions/reflectivityCalculation.m @@ -55,7 +55,7 @@ [~,scalefactors,bulkIns,bulkOuts,chis,reflectivity,... simulation,shiftedData,backgrounds,resolutions,sldProfiles,... layers,resampledLayers,subRoughs... - ] = domainsTF.customLayers(problemStruct,controls); + ] = domainsTF.standardLayers(problemStruct,controls); case coderEnums.modelTypes.CustomXY From cfb38e08a344e9c127fc7aa3370450951827c8b3 Mon Sep 17 00:00:00 2001 From: Paul Sharp <44529197+DrPaulSharp@users.noreply.github.com> Date: Thu, 26 Jun 2025 15:44:03 +0100 Subject: [PATCH 06/16] Adds routine "setupCoreCalculation" and fixes build issues --- targetFunctions/+domainsTF/standardLayers.m | 100 ++++++++----- targetFunctions/+normalTF/standardLayers.m | 138 +++++++++--------- .../setupCoreReflectivityCalculation.m | 17 +++ 3 files changed, 151 insertions(+), 104 deletions(-) create mode 100644 targetFunctions/setupCoreReflectivityCalculation.m diff --git a/targetFunctions/+domainsTF/standardLayers.m b/targetFunctions/+domainsTF/standardLayers.m index 4e566b486..8f237dd41 100644 --- a/targetFunctions/+domainsTF/standardLayers.m +++ b/targetFunctions/+domainsTF/standardLayers.m @@ -50,6 +50,16 @@ contrastLayers1 = cell(numberOfContrasts,1); contrastLayers2 = cell(numberOfContrasts,1); + for i = 1:numberOfContrasts + contrastLayers1{i} = zeros(1, 6); + contrastLayers2{i} = zeros(1, 6); + + domainLayers{i,1} = zeros(1, 6); + domainLayers{i,2} = zeros(1, 6); + domainResampledLayers{i,1} = zeros(1, 6); + domainResampledLayers{i,2} = zeros(1, 6); + end + % Extract the relevant parameter values for this contrast from the % input arrays. We need to determine which values of the data shifts, % scalefactors, and bulk contrasts are associated with this contrast. @@ -114,19 +124,31 @@ % Loop over all the contrasts parfor i = 1:numberOfContrasts + + [inputBackground,inputResolution,inputShiftedData,... + simulationXData,dataIndices... + ] = setupCoreReflectivityCalculation(... + contrastBackgroundIndices{i},contrastResolutionIndices{i},... + backgroundParamValues,resolutionParamValues,qzshifts(i),... + scalefactors(i),dataPresent(i),data{i},dataLimits{i},... + simulationLimits{i},contrastBackgroundTypes{i},... + contrastResolutionTypes{i},customFiles,numSimulationPoints); [chis(i),... - reflectivity{i},simulation{i},shiftedData{i},backgrounds{i},... - resolutions{i},sldProfiles{i},layers{i},resampledLayers{i}... - ] = contrastCalculation(contrastBackgroundIndices{i},... - contrastResolutionIndices{i},backgroundParamValues,... - resolutionParamValues,... - qzshifts(i),scalefactors(i),bulkIns(i),bulkOuts(i),domainRatios(i),... - dataPresent(i),data{i},dataLimits{i},simulationLimits{i},repeatLayers(i),... - contrastBackgroundTypes{i},contrastBackgroundActions{i},... - contrastResolutionTypes{i},customFiles,nParams,parallel,... - numSimulationPoints,resampleMinAngle,resampleNPoints,resample(i),... + reflectivity{i},simulation{i},shiftedData{i},sldProfiles{i},... + layers{i},resampledLayers{i}... + ] = contrastLayersCalculation(bulkIns(i),bulkOuts(i),domainRatios(i),... + inputShiftedData,... + simulationXData,dataIndices,... + inputResolution,inputBackground,... + repeatLayers(i),... + contrastBackgroundActions{i},... + nParams,parallel,... + resampleMinAngle,resampleNPoints,resample(i),... geometry,subRoughs(i),calcSld,contrastLayers1{i},contrastLayers2{i}); + + backgrounds{i} = inputBackground; + resolutions{i} = inputResolution; end @@ -135,19 +157,31 @@ % Loop over all the contrasts for i = 1:numberOfContrasts + [inputBackground,inputResolution,inputShiftedData,... + simulationXData,dataIndices... + ] = setupCoreReflectivityCalculation(... + contrastBackgroundIndices{i},contrastResolutionIndices{i},... + backgroundParamValues,resolutionParamValues,qzshifts(i),... + scalefactors(i),dataPresent(i),data{i},dataLimits{i},... + simulationLimits{i},contrastBackgroundTypes{i},... + contrastResolutionTypes{i},customFiles,numSimulationPoints); + [chis(i),... - reflectivity{i},simulation{i},shiftedData{i},backgrounds{i},... - resolutions{i},sldProfiles{i},layers{i},resampledLayers{i}... - ] = contrastCalculation(contrastBackgroundIndices{i},... - contrastResolutionIndices{i},backgroundParamValues,... - resolutionParamValues,... - qzshifts(i),scalefactors(i),bulkIns(i),bulkOuts(i),domainRatios(i),... - dataPresent(i),data{i},dataLimits{i},simulationLimits{i},repeatLayers(i),... - contrastBackgroundTypes{i},contrastBackgroundActions{i},... - contrastResolutionTypes{i},customFiles,nParams,parallel,... - numSimulationPoints,resampleMinAngle,resampleNPoints,resample(i),... + reflectivity{i},simulation{i},shiftedData{i},sldProfiles{i},... + layers{i},resampledLayers{i}... + ] = contrastLayersCalculation(bulkIns(i),bulkOuts(i),domainRatios(i),... + inputShiftedData,... + simulationXData,dataIndices,... + inputResolution,inputBackground,... + repeatLayers(i),... + contrastBackgroundActions{i},... + nParams,parallel,... + resampleMinAngle,resampleNPoints,resample(i),... geometry,subRoughs(i),calcSld,contrastLayers1{i},contrastLayers2{i}); + backgrounds{i} = inputBackground; + resolutions{i} = inputResolution; + end end @@ -182,24 +216,16 @@ function [chi,reflectivity,simulation,... - shiftedData,background,resolution,sldProfile,layers,... - resampledLayers] = contrastCalculation(backgroundParamIndex,... - resolutionParamIndex,backgroundParamValues,resolutionParamValues,... - qzshift,scalefactor,bulkIn,bulkOut,domainRatio,... - dataPresent,data,dataLimits,simulationLimits,repeatLayers,... - backgroundType,backgroundAction,resolutionType,customFiles,nParams,... - parallel,numSimulationPoints,resampleMinAngle,resampleNPoints,resample,... + shiftedData,sldProfile,layers,... + resampledLayers] = contrastLayersCalculation(bulkIn,bulkOut,domainRatio,... + shiftedData,... + simulationXData,dataIndices,... + resolution,background, ... + repeatLayers,... + backgroundAction,nParams,... + parallel,resampleMinAngle,resampleNPoints,resample,... geometry,roughness,calcSld,contrastLayers1,contrastLayers2) - - % Apply scale factors and q shifts to the data - shiftedData = shiftData(scalefactor,qzshift,dataPresent,data,dataLimits,simulationLimits,numSimulationPoints); - [simulationXData, dataIndices] = makeSimulationRange(shiftedData, simulationLimits); - - background = constructBackground(backgroundType,backgroundParamIndex,... - shiftedData,customFiles,backgroundParamValues,simulationXData,dataIndices); - resolution = constructResolution(resolutionType,resolutionParamIndex,... - shiftedData,customFiles,resolutionParamValues,simulationXData,dataIndices); - + % Call the core layers calculation - need to do this once for each % domain [reflectivity1,simulation1,~,sldProfile1,layers1,resampledLayers1] = normalTF.coreLayersCalculation( ... diff --git a/targetFunctions/+normalTF/standardLayers.m b/targetFunctions/+normalTF/standardLayers.m index 7b1661be1..201ecdbdd 100644 --- a/targetFunctions/+normalTF/standardLayers.m +++ b/targetFunctions/+normalTF/standardLayers.m @@ -42,6 +42,16 @@ layers = cell(numberOfContrasts,1); resampledLayers = cell(numberOfContrasts,1); + contrastLayers = cell(numberOfContrasts,1); + for i = 1:numberOfContrasts + contrastLayers{i} = zeros(1, 6); + end + + slds = cell(numberOfContrasts,1); + for i = 1:numberOfContrasts + slds{i} = zeros(1, 3); + end + % Extract the relevant parameter values for this contrast from the % input arrays. We need to determine which values of the data shifts, % scalefactors, and bulk contrasts are associated with this contrast. @@ -62,8 +72,6 @@ % parameters to all the layers in the layers list. This only needs % to be done once, and so is done outside the contrasts loop layerValues = allocateParamsToLayers(paramValues, layersDetails); - - contrastLayers = cell(numberOfContrasts,1); for i = 1:numberOfContrasts @@ -73,12 +81,8 @@ % Also need to determine which layers from the overall % layers list are required for this contrast, and put them - % in the correct order according to geometry. - layerIndices = contrastLayersIndices{i}; - contrastLayers{i} = zeros(length(layerIndices), 6); - for j = 1:length(layerIndices) - contrastLayers{i}(j,:) = layerValues{layerIndices(j)}; - end + % in the correct order according to geometry. + contrastLayers{i} = allocateLayersForContrast(contrastLayersIndices{i},layerValues); end @@ -114,23 +118,26 @@ % Loop over all the contrasts parfor i = 1:numberOfContrasts - [backgrounds{i},resolutions{i},shiftedData{i},... + [inputBackground,inputResolution,inputShiftedData,... simulationXData,dataIndices... - ] = setupCalculation(contrastBackgroundIndices{i},... - contrastResolutionIndices{i},backgroundParamValues,... - resolutionParamValues,qzshifts(i),scalefactors(i),... - dataPresent(i),data{i},dataLimits{i},simulationLimits{i},... - contrastBackgroundTypes{i},contrastResolutionTypes{i},... - customFiles,numSimulationPoints); + ] = setupCoreReflectivityCalculation(... + contrastBackgroundIndices{i},contrastResolutionIndices{i},... + backgroundParamValues,resolutionParamValues,qzshifts(i),... + scalefactors(i),dataPresent(i),data{i},dataLimits{i},... + simulationLimits{i},contrastBackgroundTypes{i},... + contrastResolutionTypes{i},customFiles,numSimulationPoints); [reflectivity{i},simulation{i},shiftedData{i},... sldProfiles{i},layers{i},resampledLayers{i},chis(i)... ] = customXYContrastCalculation(bulkIns(i),bulkOuts(i),... - shiftedData{i},simulationXData,dataIndices,... - resolutions{i},backgrounds{i},contrastBackgroundActions{i},... + inputShiftedData,simulationXData,dataIndices,... + inputResolution,inputBackground,contrastBackgroundActions{i},... nParams,parallel,resampleMinAngle,resampleNPoints,... subRoughs(i),slds{i}); + backgrounds{i} = inputBackground; + resolutions{i} = inputResolution; + end else @@ -138,23 +145,26 @@ % Loop over all the contrasts for i = 1:numberOfContrasts - [backgrounds{i},resolutions{i},shiftedData{i},... + [inputBackground,inputResolution,inputShiftedData,... simulationXData,dataIndices... - ] = setupCalculation(contrastBackgroundIndices{i},... - contrastResolutionIndices{i},backgroundParamValues,... - resolutionParamValues,qzshifts(i),scalefactors(i),... - dataPresent(i),data{i},dataLimits{i},simulationLimits{i},... - contrastBackgroundTypes{i},contrastResolutionTypes{i},... - customFiles,numSimulationPoints); + ] = setupCoreReflectivityCalculation(... + contrastBackgroundIndices{i},contrastResolutionIndices{i},... + backgroundParamValues,resolutionParamValues,qzshifts(i),... + scalefactors(i),dataPresent(i),data{i},dataLimits{i},... + simulationLimits{i},contrastBackgroundTypes{i},... + contrastResolutionTypes{i},customFiles,numSimulationPoints); [reflectivity{i},simulation{i},shiftedData{i},... sldProfiles{i},layers{i},resampledLayers{i},chis(i)... ] = customXYContrastCalculation(bulkIns(i),bulkOuts(i),... - shiftedData{i},simulationXData,dataIndices,... - resolutions{i},backgrounds{i},contrastBackgroundActions{i},... + inputShiftedData,simulationXData,dataIndices,... + inputResolution,inputBackground,contrastBackgroundActions{i},... nParams,parallel,resampleMinAngle,resampleNPoints,... subRoughs(i),slds{i}); - + + backgrounds{i} = inputBackground; + resolutions{i} = inputResolution; + end end @@ -165,25 +175,31 @@ % Loop over all the contrasts parfor i = 1:numberOfContrasts - [backgrounds{i},resolutions{i},shiftedData{i},... + [inputBackground,inputResolution,inputShiftedData,... simulationXData,dataIndices... - ] = setupCalculation(contrastBackgroundIndices{i},... - contrastResolutionIndices{i},backgroundParamValues,... - resolutionParamValues,qzshifts(i),scalefactors(i),... - dataPresent(i),data{i},dataLimits{i},simulationLimits{i},... - contrastBackgroundTypes{i},contrastResolutionTypes{i},... - customFiles,numSimulationPoints); + ] = setupCoreReflectivityCalculation(... + contrastBackgroundIndices{i},contrastResolutionIndices{i},... + backgroundParamValues,resolutionParamValues,qzshifts(i),... + scalefactors(i),dataPresent(i),data{i},dataLimits{i},... + simulationLimits{i},contrastBackgroundTypes{i},... + contrastResolutionTypes{i},customFiles,numSimulationPoints); - [reflectivity{i},simulation{i},shiftedData{i},... + [outputReflectivity,simulation{i},outputShiftedData,... sldProfiles{i},layers{i},resampledLayers{i}... ] = normalTF.coreLayersCalculation(contrastLayers{i},... subRoughs(i),geometry,bulkIns(i),bulkOuts(i),resample(i),... - calcSld,shiftedData{i},simulationXData,dataIndices,... - repeatLayers(i),resolutions{i},backgrounds{i},... + calcSld,inputShiftedData,simulationXData,dataIndices,... + repeatLayers(i),inputResolution,inputBackground,... contrastBackgroundActions{i},parallel,... resampleMinAngle,resampleNPoints); - chis(i) = chiSquared(shiftedData{i},reflectivity{i},nParams); + backgrounds{i} = inputBackground; + resolutions{i} = inputResolution; + + chis(i) = chiSquared(outputShiftedData,outputReflectivity,nParams); + + shiftedData{i} = outputShiftedData; + reflectivity{i} = outputReflectivity; end @@ -192,25 +208,31 @@ % Loop over all the contrasts for i = 1:numberOfContrasts - [backgrounds{i},resolutions{i},shiftedData{i},... + [inputBackground,inputResolution,inputShiftedData,... simulationXData,dataIndices... - ] = setupCalculation(contrastBackgroundIndices{i},... - contrastResolutionIndices{i},backgroundParamValues,... - resolutionParamValues,qzshifts(i),scalefactors(i),... - dataPresent(i),data{i},dataLimits{i},simulationLimits{i},... - contrastBackgroundTypes{i},contrastResolutionTypes{i},... - customFiles,numSimulationPoints); + ] = setupCoreReflectivityCalculation(... + contrastBackgroundIndices{i},contrastResolutionIndices{i},... + backgroundParamValues,resolutionParamValues,qzshifts(i),... + scalefactors(i),dataPresent(i),data{i},dataLimits{i},... + simulationLimits{i},contrastBackgroundTypes{i},... + contrastResolutionTypes{i},customFiles,numSimulationPoints); - [reflectivity{i},simulation{i},shiftedData{i},... + [outputReflectivity,simulation{i},outputShiftedData,... sldProfiles{i},layers{i},resampledLayers{i}... ] = normalTF.coreLayersCalculation(contrastLayers{i},... subRoughs(i),geometry,bulkIns(i),bulkOuts(i),resample(i),... - calcSld,shiftedData{i},simulationXData,dataIndices,... - repeatLayers(i),resolutions{i},backgrounds{i},... + calcSld,inputShiftedData,simulationXData,dataIndices,... + repeatLayers(i),inputResolution,inputBackground,... contrastBackgroundActions{i},parallel,... resampleMinAngle,resampleNPoints); - chis(i) = chiSquared(shiftedData{i},reflectivity{i},nParams); + backgrounds{i} = inputBackground; + resolutions{i} = inputResolution; + + chis(i) = chiSquared(outputShiftedData,outputReflectivity,nParams); + + shiftedData{i} = outputShiftedData; + reflectivity{i} = outputReflectivity; end end @@ -247,21 +269,3 @@ chi = chiSquared(shiftedData,reflectivity,nParams); end - -function [background,resolution,shiftedData,simulationXData,dataIndices... - ] = setupCalculation(backgroundParamIndex,resolutionParamIndex,... - backgroundParams,resolutionParams,qzshift,scalefactor,... - dataPresent,data,dataLimits,simulationLimits,backgroundType,... - resolutionType,customFiles,numSimulationPoints) - - % Apply scale factors and q shifts to the data - shiftedData = shiftData(scalefactor,qzshift,dataPresent,data,dataLimits,simulationLimits,numSimulationPoints); - - [simulationXData, dataIndices] = makeSimulationRange(shiftedData, simulationLimits); - - background = constructBackground(backgroundType,backgroundParamIndex,... - shiftedData,customFiles,backgroundParams,simulationXData,dataIndices); - resolution = constructResolution(resolutionType,resolutionParamIndex,... - shiftedData,customFiles,resolutionParams,simulationXData,dataIndices); - -end diff --git a/targetFunctions/setupCoreReflectivityCalculation.m b/targetFunctions/setupCoreReflectivityCalculation.m new file mode 100644 index 000000000..0a505a8ad --- /dev/null +++ b/targetFunctions/setupCoreReflectivityCalculation.m @@ -0,0 +1,17 @@ +function [background,resolution,shiftedData,simulationXData,dataIndices... + ] = setupCoreReflectivityCalculation(backgroundParamIndex,... + resolutionParamIndex,backgroundParams,resolutionParams,qzshift,... + scalefactor,dataPresent,data,dataLimits,simulationLimits,... + backgroundType,resolutionType,customFiles,numSimulationPoints) + + % Apply scale factors and q shifts to the data + shiftedData = shiftData(scalefactor,qzshift,dataPresent,data,dataLimits,simulationLimits,numSimulationPoints); + + [simulationXData, dataIndices] = makeSimulationRange(shiftedData, simulationLimits); + + background = constructBackground(backgroundType,backgroundParamIndex,... + shiftedData,customFiles,backgroundParams,simulationXData,dataIndices); + resolution = constructResolution(resolutionType,resolutionParamIndex,... + shiftedData,customFiles,resolutionParams,simulationXData,dataIndices); + +end \ No newline at end of file From 79625a81fbd13be46478c51d406e0704e0d69acf Mon Sep 17 00:00:00 2001 From: Paul Sharp <44529197+DrPaulSharp@users.noreply.github.com> Date: Thu, 26 Jun 2025 16:23:19 +0100 Subject: [PATCH 07/16] Merges in domains customXY calculation --- targetFunctions/+domainsTF/standardLayers.m | 245 +++++++++++++----- targetFunctions/+normalTF/standardLayers.m | 2 +- targetFunctions/common/extractProblemParams.m | 3 +- targetFunctions/reflectivityCalculation.m | 32 +-- .../testDomainsReflectivityCalculations.m | 23 +- .../testReflectivityCalculations.m | 23 +- 6 files changed, 198 insertions(+), 130 deletions(-) diff --git a/targetFunctions/+domainsTF/standardLayers.m b/targetFunctions/+domainsTF/standardLayers.m index 8f237dd41..8d90ae0aa 100644 --- a/targetFunctions/+domainsTF/standardLayers.m +++ b/targetFunctions/+domainsTF/standardLayers.m @@ -13,7 +13,7 @@ contrastResolutionIndices, contrastDomainRatioIndices, backgroundParamValues,... qzshiftValues, scalefactorValues, bulkInValues, bulkOutValues,... resolutionParamValues, domainRatioValues, dataPresent, nParams, paramValues,... - ~, resample, contrastBackgroundTypes, contrastBackgroundActions,... + resample, contrastBackgroundTypes, contrastBackgroundActions,... contrastResolutionTypes, contrastCustomFiles, useImaginary,... repeatLayers, data, dataLimits, simulationLimits, inputContrastLayers,... layersDetails, customFiles, domainContrastLayers... @@ -49,15 +49,20 @@ contrastLayers1 = cell(numberOfContrasts,1); contrastLayers2 = cell(numberOfContrasts,1); + slds1 = cell(numberOfContrasts,1); + slds2 = cell(numberOfContrasts,1); for i = 1:numberOfContrasts - contrastLayers1{i} = zeros(1, 6); - contrastLayers2{i} = zeros(1, 6); + contrastLayers1{i} = zeros(1,6); + contrastLayers2{i} = zeros(1,6); - domainLayers{i,1} = zeros(1, 6); - domainLayers{i,2} = zeros(1, 6); - domainResampledLayers{i,1} = zeros(1, 6); - domainResampledLayers{i,2} = zeros(1, 6); + slds1{i} = zeros(1,3); + slds2{i} = zeros(1,3); + + domainLayers{i,1} = zeros(1,6); + domainLayers{i,2} = zeros(1,6); + domainResampledLayers{i,1} = zeros(1,6); + domainResampledLayers{i,2} = zeros(1,6); end % Extract the relevant parameter values for this contrast from the @@ -113,77 +118,149 @@ contrastLayers2{i} = contrastLayers{i,2}; end - end + case coderEnums.modelTypes.CustomXY + numberOfOutputColumns = 3; + [slds,subRoughs] = domainsTF.processCustomFunction(contrastBulkInIndices,contrastBulkOutIndices,... + bulkInValues,bulkOutValues,contrastCustomFiles,numberOfContrasts,numberOfOutputColumns,customFiles,paramValues,useImaginary); + + for i = 1:size(slds,1) + slds1{i} = slds{i,1}; + slds2{i} = slds{i,2}; + end + otherwise + + coderException(coderEnums.errorCodes.invalidOption, 'The model type "%s" is not supported', problemStruct.modelType); - + end + if strcmpi(problemStruct.modelType, coderEnums.modelTypes.CustomXY) - if strcmpi(parallel, coderEnums.parallelOptions.Contrasts) + if strcmpi(parallel, coderEnums.parallelOptions.Contrasts) + + parfor i = 1:numberOfContrasts + + [inputBackground,inputResolution,inputShiftedData,... + simulationXData,dataIndices... + ] = setupCoreReflectivityCalculation(... + contrastBackgroundIndices{i},contrastResolutionIndices{i},... + backgroundParamValues,resolutionParamValues,qzshifts(i),... + scalefactors(i),dataPresent(i),data{i},dataLimits{i},... + simulationLimits{i},contrastBackgroundTypes{i},... + contrastResolutionTypes{i},customFiles,numSimulationPoints); + + [chis(i),... + reflectivity{i},simulation{i},shiftedData{i},backgrounds{i},... + resolutions{i},sldProfiles{i},layers{i},resampledLayers{i}... + ] = contrastCustomXYCalculation(bulkIns(i),bulkOuts(i),domainRatios(i),... + inputShiftedData,... + simulationXData,dataIndices,... + inputResolution,inputBackground,... + contrastBackgroundActions{i},... + nParams,parallel,... + resampleMinAngle,resampleNPoints,... + subRoughs(i),slds1{i},slds2{i}); - % Loop over all the contrasts - parfor i = 1:numberOfContrasts - - [inputBackground,inputResolution,inputShiftedData,... - simulationXData,dataIndices... - ] = setupCoreReflectivityCalculation(... - contrastBackgroundIndices{i},contrastResolutionIndices{i},... - backgroundParamValues,resolutionParamValues,qzshifts(i),... - scalefactors(i),dataPresent(i),data{i},dataLimits{i},... - simulationLimits{i},contrastBackgroundTypes{i},... - contrastResolutionTypes{i},customFiles,numSimulationPoints); + end - [chis(i),... - reflectivity{i},simulation{i},shiftedData{i},sldProfiles{i},... - layers{i},resampledLayers{i}... - ] = contrastLayersCalculation(bulkIns(i),bulkOuts(i),domainRatios(i),... - inputShiftedData,... - simulationXData,dataIndices,... - inputResolution,inputBackground,... - repeatLayers(i),... - contrastBackgroundActions{i},... - nParams,parallel,... - resampleMinAngle,resampleNPoints,resample(i),... - geometry,subRoughs(i),calcSld,contrastLayers1{i},contrastLayers2{i}); + else + + for i = 1:numberOfContrasts - backgrounds{i} = inputBackground; - resolutions{i} = inputResolution; + [inputBackground,inputResolution,inputShiftedData,... + simulationXData,dataIndices... + ] = setupCoreReflectivityCalculation(... + contrastBackgroundIndices{i},contrastResolutionIndices{i},... + backgroundParamValues,resolutionParamValues,qzshifts(i),... + scalefactors(i),dataPresent(i),data{i},dataLimits{i},... + simulationLimits{i},contrastBackgroundTypes{i},... + contrastResolutionTypes{i},customFiles,numSimulationPoints); + + [chis(i),... + reflectivity{i},simulation{i},shiftedData{i},backgrounds{i},... + resolutions{i},sldProfiles{i},layers{i},resampledLayers{i}... + ] = contrastCustomXYCalculation(bulkIns(i),bulkOuts(i),domainRatios(i),... + inputShiftedData,... + simulationXData,dataIndices,... + inputResolution,inputBackground,... + contrastBackgroundActions{i},... + nParams,parallel,... + resampleMinAngle,resampleNPoints,... + subRoughs(i),slds1{i},slds2{i}); + end + end - + else + + if strcmpi(parallel, coderEnums.parallelOptions.Contrasts) + + % Loop over all the contrasts + parfor i = 1:numberOfContrasts - % Loop over all the contrasts - for i = 1:numberOfContrasts - - [inputBackground,inputResolution,inputShiftedData,... - simulationXData,dataIndices... - ] = setupCoreReflectivityCalculation(... - contrastBackgroundIndices{i},contrastResolutionIndices{i},... - backgroundParamValues,resolutionParamValues,qzshifts(i),... - scalefactors(i),dataPresent(i),data{i},dataLimits{i},... - simulationLimits{i},contrastBackgroundTypes{i},... - contrastResolutionTypes{i},customFiles,numSimulationPoints); - - [chis(i),... - reflectivity{i},simulation{i},shiftedData{i},sldProfiles{i},... - layers{i},resampledLayers{i}... - ] = contrastLayersCalculation(bulkIns(i),bulkOuts(i),domainRatios(i),... - inputShiftedData,... - simulationXData,dataIndices,... - inputResolution,inputBackground,... + [inputBackground,inputResolution,inputShiftedData,... + simulationXData,dataIndices... + ] = setupCoreReflectivityCalculation(... + contrastBackgroundIndices{i},contrastResolutionIndices{i},... + backgroundParamValues,resolutionParamValues,qzshifts(i),... + scalefactors(i),dataPresent(i),data{i},dataLimits{i},... + simulationLimits{i},contrastBackgroundTypes{i},... + contrastResolutionTypes{i},customFiles,numSimulationPoints); + + [chis(i),... + reflectivity{i},simulation{i},shiftedData{i},sldProfiles{i},... + layers{i},resampledLayers{i}... + ] = contrastLayersCalculation(bulkIns(i),bulkOuts(i),domainRatios(i),... + inputShiftedData,... + simulationXData,dataIndices,... + inputResolution,inputBackground,... repeatLayers(i),... - contrastBackgroundActions{i},... - nParams,parallel,... - resampleMinAngle,resampleNPoints,resample(i),... - geometry,subRoughs(i),calcSld,contrastLayers1{i},contrastLayers2{i}); - - backgrounds{i} = inputBackground; - resolutions{i} = inputResolution; - - end + contrastBackgroundActions{i},... + nParams,parallel,... + resampleMinAngle,resampleNPoints,resample(i),... + geometry,subRoughs(i),calcSld,contrastLayers1{i},contrastLayers2{i}); + + backgrounds{i} = inputBackground; + resolutions{i} = inputResolution; + + end + + else + + % Loop over all the contrasts + for i = 1:numberOfContrasts + [inputBackground,inputResolution,inputShiftedData,... + simulationXData,dataIndices... + ] = setupCoreReflectivityCalculation(... + contrastBackgroundIndices{i},contrastResolutionIndices{i},... + backgroundParamValues,resolutionParamValues,qzshifts(i),... + scalefactors(i),dataPresent(i),data{i},dataLimits{i},... + simulationLimits{i},contrastBackgroundTypes{i},... + contrastResolutionTypes{i},customFiles,numSimulationPoints); + + [chis(i),... + reflectivity{i},simulation{i},shiftedData{i},sldProfiles{i},... + layers{i},resampledLayers{i}... + ] = contrastLayersCalculation(bulkIns(i),bulkOuts(i),domainRatios(i),... + inputShiftedData,... + simulationXData,dataIndices,... + inputResolution,inputBackground,... + repeatLayers(i),... + contrastBackgroundActions{i},... + nParams,parallel,... + resampleMinAngle,resampleNPoints,resample(i),... + geometry,subRoughs(i),calcSld,contrastLayers1{i},contrastLayers2{i}); + + backgrounds{i} = inputBackground; + resolutions{i} = inputResolution; + + end + + end + end for i = 1:numberOfContrasts @@ -250,3 +327,43 @@ resampledLayers = {resampledLayers1, resampledLayers2}; end + +function [chi,reflectivity,simulation,... + shiftedData,background,resolution,sldProfile,layers,... + resampledLayers] = contrastCustomXYCalculation(bulkIn,bulkOut,domainRatio,... + shiftedData,... + simulationXData,dataIndices,... + resolution,background, ... + backgroundAction,nParams,... + parallel,resampleMinAngle,resampleNPoints,roughness,... + sld1,sld2) + + % Resample the sld profiles + sldProfile1 = sld1(:,[1,2]); + sldProfileIm1 = sld1(:,[1,3]); + + sldProfile2 = sld2(:,[1,2]); + sldProfileIm2 = sld2(:,[1,3]); + + layers1 = resampleLayers(sldProfile1,sldProfileIm1,resampleMinAngle,resampleNPoints); + layers2 = resampleLayers(sldProfile2,sldProfileIm2,resampleMinAngle,resampleNPoints); + + reflectivityType = 'standardAbeles'; + [reflectivity1,simulation1] = callReflectivity(bulkIn,bulkOut,simulationXData, ... + dataIndices,1,layers1,roughness,resolution,parallel,reflectivityType); + [reflectivity2,simulation2] = callReflectivity(bulkIn,bulkOut,simulationXData, ... + dataIndices,1,layers2,roughness,resolution,parallel,reflectivityType); + + [reflectivity1,simulation1,~] = applyBackgroundCorrection(reflectivity1,simulation1,shiftedData,background,backgroundAction); + [reflectivity2,simulation2,shiftedData] = applyBackgroundCorrection(reflectivity2,simulation2,shiftedData,background,backgroundAction); + + % Calculate the average reflectivities + [reflectivity,simulation] = domainsTF.averageReflectivity(reflectivity1,reflectivity2,simulation1,simulation2,domainRatio); + + chi = chiSquared(shiftedData,reflectivity,nParams); + + sldProfile = {sldProfile1, sldProfile2}; + layers = {layers1, layers2}; + resampledLayers = {layers1, layers2}; + +end diff --git a/targetFunctions/+normalTF/standardLayers.m b/targetFunctions/+normalTF/standardLayers.m index 201ecdbdd..982c78a89 100644 --- a/targetFunctions/+normalTF/standardLayers.m +++ b/targetFunctions/+normalTF/standardLayers.m @@ -13,7 +13,7 @@ contrastScalefactorIndices, contrastBulkInIndices, contrastBulkOutIndices,... contrastResolutionIndices, ~, backgroundParamValues, qzshiftValues,... scalefactorValues, bulkInValues, bulkOutValues, resolutionParamValues,... - ~, dataPresent, nParams, paramValues, ~, resample, contrastBackgroundTypes,... + ~, dataPresent, nParams, paramValues, resample, contrastBackgroundTypes,... contrastBackgroundActions, contrastResolutionTypes, contrastCustomFiles,... useImaginary, repeatLayers, data, dataLimits, simulationLimits, ... contrastLayersIndices, layersDetails, customFiles, ~... diff --git a/targetFunctions/common/extractProblemParams.m b/targetFunctions/common/extractProblemParams.m index e5d6631d3..578175097 100644 --- a/targetFunctions/common/extractProblemParams.m +++ b/targetFunctions/common/extractProblemParams.m @@ -1,6 +1,6 @@ function [numberOfContrasts, geometry, contrastBackgroundParams, contrastQzshifts, contrastScalefactors, contrastBulkIns, contrastBulkOuts,... contrastResolutionParams, contrastDomainRatios, backgroundParams, qzshifts, scalefactors, bulkIns, bulkOuts, resolutionParams,... -domainRatios, dataPresent, nParams, params, numberOfLayers, resample, contrastBackgroundTypes, contrastBackgroundActions, contrastResolutionTypes,... +domainRatios, dataPresent, nParams, params, resample, contrastBackgroundTypes, contrastBackgroundActions, contrastResolutionTypes,... contrastCustomFiles, useImaginary, repeatLayers, data, dataLimits, simulationLimits, contrastLayers, layersDetails, customFiles, domainContrastLayers] = extractProblemParams(problemStruct) numberOfContrasts = problemStruct.numberOfContrasts; @@ -24,7 +24,6 @@ dataPresent = problemStruct.dataPresent; nParams = length(problemStruct.params); params = problemStruct.params; -numberOfLayers = problemStruct.numberOfLayers; resample = problemStruct.resample; useImaginary = problemStruct.useImaginary; repeatLayers = problemStruct.repeatLayers; diff --git a/targetFunctions/reflectivityCalculation.m b/targetFunctions/reflectivityCalculation.m index dd3766123..532036034 100644 --- a/targetFunctions/reflectivityCalculation.m +++ b/targetFunctions/reflectivityCalculation.m @@ -40,33 +40,11 @@ ] = normalTF.standardLayers(problemStruct,controls); case coderEnums.calculationTypes.Domains - - switch lower(modelType) - - case coderEnums.modelTypes.StandardLayers - - [~,scalefactors,bulkIns,bulkOuts,chis,reflectivity,... - simulation,shiftedData,backgrounds,resolutions,sldProfiles,... - layers,resampledLayers,subRoughs... - ] = domainsTF.standardLayers(problemStruct,controls); - - case coderEnums.modelTypes.CustomLayers - - [~,scalefactors,bulkIns,bulkOuts,chis,reflectivity,... - simulation,shiftedData,backgrounds,resolutions,sldProfiles,... - layers,resampledLayers,subRoughs... - ] = domainsTF.standardLayers(problemStruct,controls); - - case coderEnums.modelTypes.CustomXY - - [~,scalefactors,bulkIns,bulkOuts,chis,reflectivity,... - simulation,shiftedData,backgrounds,resolutions,sldProfiles,... - layers,resampledLayers,subRoughs... - ] = domainsTF.customXY(problemStruct,controls); - - otherwise - coderException(coderEnums.errorCodes.invalidOption, 'The model type "%s" is not supported', modelType); - end + + [~,scalefactors,bulkIns,bulkOuts,chis,reflectivity,... + simulation,shiftedData,backgrounds,resolutions,sldProfiles,... + layers,resampledLayers,subRoughs... + ] = domainsTF.standardLayers(problemStruct,controls); otherwise coderException(coderEnums.errorCodes.invalidOption, 'The calculation type "%s" is not supported', targetFunction); diff --git a/tests/domainsTFReflectivityCalculation/testDomainsReflectivityCalculations.m b/tests/domainsTFReflectivityCalculation/testDomainsReflectivityCalculations.m index 3bdf86196..a6f19f9fa 100644 --- a/tests/domainsTFReflectivityCalculation/testDomainsReflectivityCalculations.m +++ b/tests/domainsTFReflectivityCalculation/testDomainsReflectivityCalculations.m @@ -151,24 +151,12 @@ function testReflectivityCalculation(testCase, parallel, useCompiled) testCase.verifyEqual(result, testCase.expectedResultStruct, 'RelTol', testCase.tolerance, 'AbsTol', testCase.absTolerance); end - function testDomainsTFReflectivityCalculation(testCase, parallel, TFFile) + function testDomainsTFReflectivityCalculation(testCase, parallel) testCase.controls.parallel = parallel; - % Choose the appropriate routine for each test case - switch TFFile - case 'domainsStandardLayersTFParams.mat' - [qzshifts,scalefactors,bulkIn,bulkOut,chis,reflectivity,... - simulation,shiftedData,backgrounds,resolutions,SLDProfiles,layers,resampledLayers,... - subRoughs] = domainsTF.standardLayers(testCase.problemStruct,testCase.controls); - case 'domainsCustomLayersTFParams.mat' - [qzshifts,scalefactors,bulkIn,bulkOut,chis,reflectivity,... - simulation,shiftedData,backgrounds,resolutions,SLDProfiles,layers,resampledLayers,... - subRoughs] = domainsTF.customLayers(testCase.problemStruct,testCase.controls); - case 'domainsCustomXYTFParams.mat' - [qzshifts,scalefactors,bulkIn,bulkOut,chis,reflectivity,... - simulation,shiftedData,backgrounds,resolutions,SLDProfiles,layers,resampledLayers,... - subRoughs] = domainsTF.customXY(testCase.problemStruct,testCase.controls); - end + [qzshifts,scalefactors,bulkIn,bulkOut,chis,reflectivity,... + simulation,shiftedData,backgrounds,resolutions,SLDProfiles,layers,resampledLayers,... + subRoughs] = domainsTF.standardLayers(testCase.problemStruct,testCase.controls); testCase.verifyEqual(qzshifts, testCase.TFQzshifts, 'RelTol', testCase.tolerance, 'AbsTol', testCase.absTolerance); testCase.verifyEqual(scalefactors, testCase.TFScalefactors, 'RelTol', testCase.tolerance, 'AbsTol', testCase.absTolerance); @@ -267,7 +255,7 @@ function testCheckIndices(testCase) function testExtractProblemParams(testCase) [numberOfContrasts, geometry, contrastBackgroundParams, ~, contrastScalefactors, contrastBulkIns, contrastBulkOuts,... contrastResolutionParams, contrastDomainRatios, backgroundParams, ~, scalefactors, bulkIns, bulkOuts, resolutionParams, domainRatios,... - dataPresent, nParams, params, numberOfLayers, resample, backgroundTypes, backgroundActions, resolutionTypes, contrastCustomFiles, useImaginary,... + dataPresent, nParams, params, resample, backgroundTypes, backgroundActions, resolutionTypes, contrastCustomFiles, useImaginary,... repeatLayers, data, dataLimits, simulationLimits, contrastLayers, layersDetails, customFiles, domainContrastLayers] = extractProblemParams(testCase.problemStruct); testCase.verifyEqual(numberOfContrasts, testCase.problemStruct.numberOfContrasts, 'RelTol', testCase.tolerance, 'AbsTol', testCase.absTolerance); @@ -287,7 +275,6 @@ function testExtractProblemParams(testCase) testCase.verifyEqual(dataPresent, testCase.problemStruct.dataPresent, 'RelTol', testCase.tolerance, 'AbsTol', testCase.absTolerance); testCase.verifyEqual(nParams, length(testCase.problemStruct.params), 'RelTol', testCase.tolerance, 'AbsTol', testCase.absTolerance); testCase.verifyEqual(params, testCase.problemStruct.params, 'RelTol', testCase.tolerance, 'AbsTol', testCase.absTolerance); - testCase.verifyEqual(numberOfLayers, testCase.problemStruct.numberOfLayers, 'RelTol', testCase.tolerance, 'AbsTol', testCase.absTolerance); testCase.verifyEqual(resample, testCase.problemStruct.resample, 'RelTol', testCase.tolerance, 'AbsTol', testCase.absTolerance); testCase.verifyEqual(backgroundTypes, testCase.problemStruct.contrastBackgroundTypes, 'RelTol', testCase.tolerance, 'AbsTol', testCase.absTolerance); testCase.verifyEqual(backgroundActions, testCase.problemStruct.contrastBackgroundActions, 'RelTol', testCase.tolerance, 'AbsTol', testCase.absTolerance); diff --git a/tests/normalTFReflectivityCalculation/testReflectivityCalculations.m b/tests/normalTFReflectivityCalculation/testReflectivityCalculations.m index fc297ea88..f4f9cd22f 100644 --- a/tests/normalTFReflectivityCalculation/testReflectivityCalculations.m +++ b/tests/normalTFReflectivityCalculation/testReflectivityCalculations.m @@ -165,24 +165,12 @@ function testReflectivityCalculation(testCase, parallel, useCompiled) testCase.verifyEqual(result, testCase.expectedResultStruct, 'RelTol', testCase.tolerance, 'AbsTol', testCase.absTolerance); end - function testNormalTFReflectivityCalculation(testCase, parallel, TFFile) + function testNormalTFReflectivityCalculation(testCase, parallel) testCase.controls.parallel = parallel; - % Choose the appropriate routine for each test case - switch TFFile - case 'standardLayersTFParams.mat' - [qzshifts,scalefactors,bulkIn,bulkOut,chis,reflectivity,... - simulation,shiftedData,backgrounds,resolutions,SLDProfiles,layers,resampledLayers,... - subRoughs] = normalTF.standardLayers(testCase.problemStruct,testCase.controls); - case {'customLayersTFParams.mat', 'absorptionTFParams.mat'} - [qzshifts,scalefactors,bulkIn,bulkOut,chis,reflectivity,... - simulation,shiftedData,backgrounds,resolutions,SLDProfiles,layers,resampledLayers,... - subRoughs] = normalTF.customLayers(testCase.problemStruct,testCase.controls); - case 'customXYTFParams.mat' - [qzshifts,scalefactors,bulkIn,bulkOut,chis,reflectivity,... - simulation,shiftedData,backgrounds,resolutions,SLDProfiles,layers,resampledLayers,... - subRoughs] = normalTF.customXY(testCase.problemStruct,testCase.controls); - end + [qzshifts,scalefactors,bulkIn,bulkOut,chis,reflectivity,... + simulation,shiftedData,backgrounds,resolutions,SLDProfiles,layers,resampledLayers,... + subRoughs] = normalTF.standardLayers(testCase.problemStruct,testCase.controls); testCase.verifyEqual(qzshifts, testCase.TFQzshifts, 'RelTol', testCase.tolerance, 'AbsTol', testCase.absTolerance); testCase.verifyEqual(scalefactors, testCase.TFScalefactors, 'RelTol', testCase.tolerance, 'AbsTol', testCase.absTolerance); @@ -281,7 +269,7 @@ function testCheckIndices(testCase) function testExtractProblemParams(testCase) [numberOfContrasts, geometry, contrastBackgroundParams, ~, contrastScalefactors, contrastBulkIns, contrastBulkOuts,... contrastResolutionParams, contrastDomainRatios, backgroundParams, ~, scalefactors, bulkIns, bulkOuts, resolutionParams, domainRatios,... - dataPresent, nParams, params, numberOfLayers, resample, backgroundTypes, backgroundActions, resolutionTypes, contrastCustomFiles, useImaginary,... + dataPresent, nParams, params, resample, backgroundTypes, backgroundActions, resolutionTypes, contrastCustomFiles, useImaginary,... repeatLayers, data, dataLimits, simulationLimits, contrastLayers, layersDetails, customFiles, domainContrastLayers] = extractProblemParams(testCase.problemStruct); testCase.verifyEqual(numberOfContrasts, testCase.problemStruct.numberOfContrasts, 'RelTol', testCase.tolerance, 'AbsTol', testCase.absTolerance); @@ -301,7 +289,6 @@ function testExtractProblemParams(testCase) testCase.verifyEqual(dataPresent, testCase.problemStruct.dataPresent, 'RelTol', testCase.tolerance, 'AbsTol', testCase.absTolerance); testCase.verifyEqual(nParams, length(testCase.problemStruct.params), 'RelTol', testCase.tolerance, 'AbsTol', testCase.absTolerance); testCase.verifyEqual(params, testCase.problemStruct.params, 'RelTol', testCase.tolerance, 'AbsTol', testCase.absTolerance); - testCase.verifyEqual(numberOfLayers, testCase.problemStruct.numberOfLayers, 'RelTol', testCase.tolerance, 'AbsTol', testCase.absTolerance); testCase.verifyEqual(resample, testCase.problemStruct.resample, 'RelTol', testCase.tolerance, 'AbsTol', testCase.absTolerance); testCase.verifyEqual(backgroundTypes, testCase.problemStruct.contrastBackgroundTypes, 'RelTol', testCase.tolerance, 'AbsTol', testCase.absTolerance); testCase.verifyEqual(backgroundActions, testCase.problemStruct.contrastBackgroundActions, 'RelTol', testCase.tolerance, 'AbsTol', testCase.absTolerance); From b004c6b8bdbc408d326f52da4c0393a1175d6d05 Mon Sep 17 00:00:00 2001 From: Paul Sharp <44529197+DrPaulSharp@users.noreply.github.com> Date: Thu, 26 Jun 2025 17:51:59 +0100 Subject: [PATCH 08/16] Vectorises "backSort" --- targetFunctions/+domainsTF/standardLayers.m | 14 ++++------- targetFunctions/+normalTF/standardLayers.m | 16 +++--------- targetFunctions/common/backSort.m | 28 ++++++++++----------- 3 files changed, 23 insertions(+), 35 deletions(-) diff --git a/targetFunctions/+domainsTF/standardLayers.m b/targetFunctions/+domainsTF/standardLayers.m index 8d90ae0aa..f497af1b0 100644 --- a/targetFunctions/+domainsTF/standardLayers.m +++ b/targetFunctions/+domainsTF/standardLayers.m @@ -26,10 +26,6 @@ resampleNPoints = controls.resampleNPoints; % Allocate the memory for the output arrays before the main loop - qzshifts = zeros(numberOfContrasts,1); - scalefactors = zeros(numberOfContrasts,1); - bulkIns = zeros(numberOfContrasts,1); - bulkOuts = zeros(numberOfContrasts,1); domainRatios = zeros(numberOfContrasts,1); subRoughs = zeros(numberOfContrasts,1); chis = zeros(numberOfContrasts,1); @@ -68,12 +64,12 @@ % Extract the relevant parameter values for this contrast from the % input arrays. We need to determine which values of the data shifts, % scalefactors, and bulk contrasts are associated with this contrast. - for i = 1:numberOfContrasts + [qzshifts,scalefactors,bulkIns,bulkOuts] = backSort(... + contrastQzshiftIndices,contrastScalefactorIndices,... + contrastBulkInIndices,contrastBulkOutIndices,... + qzshiftValues,scalefactorValues,bulkInValues,bulkOutValues); - [qzshifts(i),scalefactors(i),bulkIns(i),bulkOuts(i)] = backSort( ... - contrastQzshiftIndices(i),contrastScalefactorIndices(i),... - contrastBulkInIndices(i),contrastBulkOutIndices(i),... - qzshiftValues,scalefactorValues,bulkInValues,bulkOutValues); + for i = 1:numberOfContrasts % Get the domain ratio for this contrast if isempty(contrastDomainRatioIndices(i)) diff --git a/targetFunctions/+normalTF/standardLayers.m b/targetFunctions/+normalTF/standardLayers.m index 982c78a89..fde8aad88 100644 --- a/targetFunctions/+normalTF/standardLayers.m +++ b/targetFunctions/+normalTF/standardLayers.m @@ -26,10 +26,6 @@ resampleNPoints = controls.resampleNPoints; % Allocate the memory for the output arrays before the main loop - qzshifts = zeros(numberOfContrasts,1); - scalefactors = zeros(numberOfContrasts,1); - bulkIns = zeros(numberOfContrasts,1); - bulkOuts = zeros(numberOfContrasts,1); chis = zeros(numberOfContrasts,1); subRoughs = zeros(numberOfContrasts,1); @@ -55,15 +51,11 @@ % Extract the relevant parameter values for this contrast from the % input arrays. We need to determine which values of the data shifts, % scalefactors, and bulk contrasts are associated with this contrast. - for i = 1:numberOfContrasts - - [qzshifts(i),scalefactors(i),bulkIns(i),bulkOuts(i)] = backSort( ... - contrastQzshiftIndices(i),contrastScalefactorIndices(i),... - contrastBulkInIndices(i),contrastBulkOutIndices(i),... - qzshiftValues,scalefactorValues,bulkInValues,bulkOutValues); + [qzshifts,scalefactors,bulkIns,bulkOuts] = backSort(... + contrastQzshiftIndices,contrastScalefactorIndices,... + contrastBulkInIndices,contrastBulkOutIndices,... + qzshiftValues,scalefactorValues,bulkInValues,bulkOutValues); - end - switch lower(problemStruct.modelType) case coderEnums.modelTypes.StandardLayers diff --git a/targetFunctions/common/backSort.m b/targetFunctions/common/backSort.m index 3761beb43..236a30d7a 100644 --- a/targetFunctions/common/backSort.m +++ b/targetFunctions/common/backSort.m @@ -1,25 +1,25 @@ -function [qzshift,scalefactor,bulkIn,bulkOut] = backSort(qzshiftIndex,scalefactorIndex,bulkInIndex,bulkOutIndex,qzshiftValues,scalefactorValues,bulkInValues,bulkOutValues) +function [qzshifts,scalefactors,bulkIns,bulkOuts] = backSort(qzshiftIndices,scalefactorIndices,bulkInIndices,bulkOutIndices,qzshiftValues,scalefactorValues,bulkInValues,bulkOutValues) % Distributes the background and shift values among the different contrasts % % INPUTS: - % * qzshiftIndex: Index of the qzshift value associated with this contrast - % * scalefactorIndex: Index of the scalefactor value associated with this contrast - % * bulkInIndex: Index of the BulkIn value associated with this contrast - % * bulkOutIndex: Index of the BulkOut value associated with this contrast + % * qzshiftIndices: Indices of the qzshift values associated with each contrast + % * scalefactorIndices: Indices of the scalefactor values associated with each contrast + % * bulkInIndices: Indices of the BulkIn values associated with each contrast + % * bulkOutIndices: Indices of the BulkOut values associated with each contrast % * qzshiftValues: List of all qzshift values % * scalefactorValues: List of all scalefactor values % * bulkInValues: List of all bulk In values % * bulkOutValues: List of all bulk Out values % % OUTPUTS: - % * qzshift: qzshift value for this contrast - % * scalefactor: scalefactor value for this contrast - % * bulkIn: bulk In value for this contrast - % * bulkOut: bulk Out value for this contrast - - qzshift = qzshiftValues(qzshiftIndex); - scalefactor = scalefactorValues(scalefactorIndex); - bulkIn = bulkInValues(bulkInIndex); - bulkOut = bulkOutValues(bulkOutIndex); + % * qzshifts: qzshift value for each contrast + % * scalefactors: scalefactor value for each contrast + % * bulkIns: bulk In value for each contrast + % * bulkOuts: bulk Out value for each contrast + + qzshifts = qzshiftValues(qzshiftIndices)'; + scalefactors = scalefactorValues(scalefactorIndices)'; + bulkIns = bulkInValues(bulkInIndices)'; + bulkOuts = bulkOutValues(bulkOutIndices)'; end From 30ddb26fa3fa16b93bc95485461750835a13433f Mon Sep 17 00:00:00 2001 From: Paul Sharp <44529197+DrPaulSharp@users.noreply.github.com> Date: Fri, 27 Jun 2025 11:23:31 +0100 Subject: [PATCH 09/16] Removes unused calculation routines and renames the refactored routines --- targetFunctions/+domainsTF/customLayers.m | 196 ------------------ targetFunctions/+domainsTF/customXY.m | 194 ----------------- ...standardLayers.m => domainsReflectivity.m} | 190 ++++++++--------- targetFunctions/+normalTF/customLayers.m | 138 ------------ targetFunctions/+normalTF/customXY.m | 135 ------------ ...{standardLayers.m => normalReflectivity.m} | 24 ++- targetFunctions/reflectivityCalculation.m | 11 +- .../testDomainsReflectivityCalculations.m | 2 +- .../testReflectivityCalculations.m | 2 +- 9 files changed, 109 insertions(+), 783 deletions(-) delete mode 100644 targetFunctions/+domainsTF/customLayers.m delete mode 100644 targetFunctions/+domainsTF/customXY.m rename targetFunctions/+domainsTF/{standardLayers.m => domainsReflectivity.m} (66%) delete mode 100644 targetFunctions/+normalTF/customLayers.m delete mode 100644 targetFunctions/+normalTF/customXY.m rename targetFunctions/+normalTF/{standardLayers.m => normalReflectivity.m} (94%) diff --git a/targetFunctions/+domainsTF/customLayers.m b/targetFunctions/+domainsTF/customLayers.m deleted file mode 100644 index b38f1e665..000000000 --- a/targetFunctions/+domainsTF/customLayers.m +++ /dev/null @@ -1,196 +0,0 @@ -function [qzshifts,scalefactors,bulkIns,bulkOuts,chis,reflectivity,... - simulation,shiftedData,backgrounds,resolutions,domainSldProfiles,... - domainLayers,domainResampledLayers,subRoughs] = customLayers(problemStruct,controls) - % The custom layers, domainsTF reflectivity calculation. - % The function extracts the relevant parameters from the input arrays, - % allocates these on a pre-contrast basis, then calls the - % 'coreLayersCalculation' (the core layers domainsTF calc is shared - % between multiple calculation types). - - % Extract parameters from problemStruct - [numberOfContrasts, geometry, contrastBackgroundIndices, contrastQzshiftIndices,... - contrastScalefactorIndices, contrastBulkInIndices, contrastBulkOutIndices,... - contrastResolutionIndices, contrastDomainRatioIndices, backgroundParamValues,... - qzshiftValues, scalefactorValues, bulkInValues, bulkOutValues, resolutionParamValues,... - domainRatioValues, dataPresent, nParams, params, ~, resample,... - contrastBackgroundTypes, contrastBackgroundActions, contrastResolutionTypes,... - contrastCustomFiles, useImaginary, ~, data, dataLimits, simulationLimits,... - ~, ~, customFiles, ~] = extractProblemParams(problemStruct); - - calcSld = controls.calcSldDuringFit; - parallel = controls.parallel; - numSimulationPoints = controls.numSimulationPoints; - resampleMinAngle = controls.resampleMinAngle; - resampleNPoints = controls.resampleNPoints; - - % Pre-Allocation of output arrays... - qzshifts = zeros(numberOfContrasts,1); - scalefactors = zeros(numberOfContrasts,1); - bulkIns = zeros(numberOfContrasts,1); - bulkOuts = zeros(numberOfContrasts,1); - chis = zeros(numberOfContrasts,1); - - reflectivity = cell(numberOfContrasts,1); - simulation = cell(numberOfContrasts,1); - shiftedData = cell(numberOfContrasts,1); - backgrounds = cell(numberOfContrasts,1); - resolutions = cell(numberOfContrasts,1); - domainSldProfiles = cell(numberOfContrasts,2); - domainLayers = cell(numberOfContrasts,2); - domainResampledLayers = cell(numberOfContrasts,2); - - sldProfiles = cell(numberOfContrasts,1); - layers = cell(numberOfContrasts,1); - resampledLayers = cell(numberOfContrasts,1); - - contrastLayers1 = cell(numberOfContrasts,1); - for i = 1:numberOfContrasts - contrastLayers1{i} = [1; 1]; - end - - contrastLayers2 = cell(numberOfContrasts,1); - for i = 1:numberOfContrasts - contrastLayers2{i} = [1; 1]; - end - - % Process the custom models - numberOfOutputColumns = 6; - [contrastLayers,subRoughs] = domainsTF.processCustomFunction( ... - contrastBulkInIndices,contrastBulkOutIndices,bulkInValues,bulkOutValues, ... - contrastCustomFiles,numberOfContrasts,numberOfOutputColumns,customFiles,params,useImaginary); - - for i = 1:size(contrastLayers,1) - contrastLayers1{i} = contrastLayers{i,1}; - contrastLayers2{i} = contrastLayers{i,2}; - end - - if strcmpi(parallel, coderEnums.parallelOptions.Contrasts) - - % Parallel over all contrasts - parfor i = 1:numberOfContrasts - - [qzshifts(i),scalefactors(i),bulkIns(i),bulkOuts(i),chis(i),... - reflectivity{i},simulation{i},shiftedData{i},backgrounds{i},... - resolutions{i},sldProfiles{i},layers{i},resampledLayers{i}... - ] = contrastCalculation(contrastBackgroundIndices{i},... - contrastQzshiftIndices(i),contrastScalefactorIndices(i),... - contrastBulkInIndices(i),contrastBulkOutIndices(i),... - contrastResolutionIndices{i},contrastDomainRatioIndices(i),... - backgroundParamValues,qzshiftValues,scalefactorValues,bulkInValues,... - bulkOutValues,resolutionParamValues,domainRatioValues,dataPresent(i),... - data{i},dataLimits{i},simulationLimits{i},contrastBackgroundTypes{i},... - contrastBackgroundActions{i},contrastResolutionTypes{i},... - customFiles,nParams,parallel,numSimulationPoints,resampleMinAngle,... - resampleNPoints,resample(i),geometry,subRoughs(i),calcSld,... - contrastLayers1{i},contrastLayers2{i}); - - end - - else - - for i = 1:numberOfContrasts - - [qzshifts(i),scalefactors(i),bulkIns(i),bulkOuts(i),chis(i),... - reflectivity{i},simulation{i},shiftedData{i},backgrounds{i},... - resolutions{i},sldProfiles{i},layers{i},resampledLayers{i}... - ] = contrastCalculation(contrastBackgroundIndices{i},... - contrastQzshiftIndices(i),contrastScalefactorIndices(i),... - contrastBulkInIndices(i),contrastBulkOutIndices(i),... - contrastResolutionIndices{i},contrastDomainRatioIndices(i),... - backgroundParamValues,qzshiftValues,scalefactorValues,bulkInValues,... - bulkOutValues,resolutionParamValues,domainRatioValues,dataPresent(i),... - data{i},dataLimits{i},simulationLimits{i},contrastBackgroundTypes{i},... - contrastBackgroundActions{i},contrastResolutionTypes{i},... - customFiles,nParams,parallel,numSimulationPoints,resampleMinAngle,... - resampleNPoints,resample(i),geometry,subRoughs(i),calcSld,... - contrastLayers1{i},contrastLayers2{i}); - - end - - end - - for i = 1:numberOfContrasts - - contrastSLDProfiles = sldProfiles{i}; - domainSldProfiles{i,1} = contrastSLDProfiles{1}; - domainSldProfiles{i,2} = contrastSLDProfiles{2}; - - contrastLayersValues = layers{i}; - domainLayers{i,1} = contrastLayersValues{1}; - domainLayers{i,2} = contrastLayersValues{2}; - - contrastResampledLayers = resampledLayers{i}; - domainResampledLayers{i,1} = contrastResampledLayers{1}; - domainResampledLayers{i,2} = contrastResampledLayers{2}; - - end - - % Remove dummy imaginary column if present - if ~useImaginary - for i=1:numberOfContrasts - domainLayers{i,1}(:,3) = []; - domainLayers{i,2}(:,3) = []; - domainResampledLayers{i,1}(:,3) = []; - domainResampledLayers{i,2}(:,3) = []; - end - end - -end - - -function [qzshift,scalefactor,bulkIn,bulkOut,chi,reflectivity,simulation,... - shiftedData,background,resolution,sldProfile,layers,... - resampledLayers] = contrastCalculation(backgroundParamIndex,... - qzshiftIndex,scalefactorIndex,bulkInIndex,bulkOutIndex,resolutionParamIndex,... - domainRatioIndex,backgroundParamValues,qzshiftValues,scalefactorValues,... - bulkInValues,bulkOutValues,resolutionParamValues,domainRatioValues,... - dataPresent,data,dataLimits,simulationLimits,backgroundType,... - backgroundAction,resolutionType,customFiles,nParams,parallel,... - numSimulationPoints,resampleMinAngle,resampleNPoints,resample,geometry,... - roughness,calcSld,contrastLayers1,contrastLayers2) - - % Get the domain ratio for this contrast - if isempty(domainRatioIndex) - domainRatioIndex = 1; - end - domainRatio = domainRatioValues(domainRatioIndex); - - % Extract the relevant parameter values for this contrast - % from the input arrays. - % First need to decide which values of the backgrounds, scalefactors - % data shifts and bulk contrasts are associated with this contrast - [qzshift,scalefactor,bulkIn,bulkOut] = backSort( ... - qzshiftIndex,scalefactorIndex,bulkInIndex,bulkOutIndex,... - qzshiftValues,scalefactorValues,bulkInValues,bulkOutValues); - - % Apply scale factors and q shifts to the data - shiftedData = shiftData(scalefactor,qzshift,dataPresent,data,dataLimits,simulationLimits,numSimulationPoints); - [simulationXData, dataIndices] = makeSimulationRange(shiftedData, simulationLimits); - - background = constructBackground(backgroundType,backgroundParamIndex,... - shiftedData,customFiles,backgroundParamValues,simulationXData,dataIndices); - resolution = constructResolution(resolutionType,resolutionParamIndex,... - shiftedData,customFiles,resolutionParamValues,simulationXData,dataIndices); - - % Call the core layers calculation - need to do this once for each - % domain - [reflectivity1,simulation1,~,sldProfile1,layers1,resampledLayers1] = normalTF.coreLayersCalculation(contrastLayers1,roughness,... - geometry,bulkIn,bulkOut,resample,calcSld,shiftedData,simulationXData,dataIndices,1,... - resolution,background,backgroundAction,parallel,resampleMinAngle,resampleNPoints); - - [reflectivity2,simulation2,shiftedData,sldProfile2,layers2,resampledLayers2] = normalTF.coreLayersCalculation(contrastLayers2,roughness,... - geometry,bulkIn,bulkOut,resample,calcSld,shiftedData,simulationXData,dataIndices,1,... - resolution,background,backgroundAction,parallel,resampleMinAngle,resampleNPoints); - - % Calculate the average reflectivities - [reflectivity,simulation] = domainsTF.averageReflectivity(reflectivity1,reflectivity2,simulation1,simulation2,domainRatio); - - % Get an overall chi-squared for the new averaged curve - chi = chiSquared(shiftedData,reflectivity,nParams); - - % Store returned values for this contrast in the output arrays - sldProfile = {sldProfile1, sldProfile2}; - layers = {layers1, layers2}; - resampledLayers = {resampledLayers1, resampledLayers2}; - -end diff --git a/targetFunctions/+domainsTF/customXY.m b/targetFunctions/+domainsTF/customXY.m deleted file mode 100644 index 4b10a79cb..000000000 --- a/targetFunctions/+domainsTF/customXY.m +++ /dev/null @@ -1,194 +0,0 @@ -function [qzshifts,scalefactors,bulkIns,bulkOuts,chis,reflectivity,... - simulation,shiftedData,backgrounds,resolutions,domainSldProfiles,... - domainLayers,domainResampledLayers,subRoughs] = customXY(problemStruct,controls) - - % Extract parameters from problemStruct - [numberOfContrasts, ~, contrastBackgroundIndices, contrastQzshiftIndices,... - contrastScalefactorIndices, contrastBulkInIndices, contrastBulkOutIndices,... - contrastResolutionIndices, contrastDomainRatioIndices, backgroundParamValues,... - qzshiftValues, scalefactorValues, bulkInValues, bulkOutValues, resolutionParamValues,... - domainRatioValues, dataPresent, nParams, params, ~, ~, contrastBackgroundTypes,... - contrastBackgroundActions, contrastResolutionTypes, contrastCustomFiles, useImaginary,... - ~, data, dataLimits, simulationLimits, ~, ~, customFiles, ~] = extractProblemParams(problemStruct); - - parallel = controls.parallel; - numSimulationPoints = controls.numSimulationPoints; - resampleMinAngle = controls.resampleMinAngle; - resampleNPoints = controls.resampleNPoints; - - %Pre-Allocation - qzshifts = zeros(numberOfContrasts,1); - scalefactors = zeros(numberOfContrasts,1); - bulkIns = zeros(numberOfContrasts,1); - bulkOuts = zeros(numberOfContrasts,1); - chis = zeros(numberOfContrasts,1); - - reflectivity = cell(numberOfContrasts,1); - simulation = cell(numberOfContrasts,1); - shiftedData = cell(numberOfContrasts,1); - backgrounds = cell(numberOfContrasts,1); - resolutions = cell(numberOfContrasts,1); - domainSldProfiles = cell(numberOfContrasts,2); - domainLayers = cell(numberOfContrasts,2); - domainResampledLayers = cell(numberOfContrasts,2); - - sldProfiles = cell(numberOfContrasts,1); - layers = cell(numberOfContrasts,1); - resampledLayers = cell(numberOfContrasts,1); - - slds1 = cell(numberOfContrasts,1); - for i = 1:numberOfContrasts - slds1{i} = [1; 1]; - end - - slds2 = cell(numberOfContrasts,1); - for i = 1:numberOfContrasts - slds2{i} = [1; 1]; - end - - numberOfOutputColumns = 3; - [slds,subRoughs] = domainsTF.processCustomFunction(contrastBulkInIndices,contrastBulkOutIndices,... - bulkInValues,bulkOutValues,contrastCustomFiles,numberOfContrasts,numberOfOutputColumns,customFiles,params,useImaginary); - - for i = 1:size(slds,1) - slds1{i} = slds{i,1}; - slds2{i} = slds{i,2}; - end - - if strcmpi(parallel, coderEnums.parallelOptions.Contrasts) - - parfor i = 1:numberOfContrasts - - [qzshifts(i),scalefactors(i),bulkIns(i),bulkOuts(i),chis(i),... - reflectivity{i},simulation{i},shiftedData{i},backgrounds{i},... - resolutions{i},sldProfiles{i},layers{i},resampledLayers{i}... - ] = contrastCalculation(contrastBackgroundIndices{i},... - contrastQzshiftIndices(i),contrastScalefactorIndices(i),... - contrastBulkInIndices(i),contrastBulkOutIndices(i),... - contrastResolutionIndices{i},contrastDomainRatioIndices(i),... - backgroundParamValues,qzshiftValues,scalefactorValues,bulkInValues,... - bulkOutValues,resolutionParamValues,domainRatioValues,dataPresent(i),... - data{i},dataLimits{i},simulationLimits{i},... - contrastBackgroundTypes{i},contrastBackgroundActions{i},... - contrastResolutionTypes{i},customFiles,nParams,parallel,... - numSimulationPoints,resampleMinAngle,resampleNPoints,... - subRoughs(i),slds1{i},slds2{i}); - - end - - else - - for i = 1:numberOfContrasts - - [qzshifts(i),scalefactors(i),bulkIns(i),bulkOuts(i),chis(i),... - reflectivity{i},simulation{i},shiftedData{i},backgrounds{i},... - resolutions{i},sldProfiles{i},layers{i},resampledLayers{i}... - ] = contrastCalculation(contrastBackgroundIndices{i},... - contrastQzshiftIndices(i),contrastScalefactorIndices(i),... - contrastBulkInIndices(i),contrastBulkOutIndices(i),... - contrastResolutionIndices{i},contrastDomainRatioIndices(i),... - backgroundParamValues,qzshiftValues,scalefactorValues,bulkInValues,... - bulkOutValues,resolutionParamValues,domainRatioValues,dataPresent(i),... - data{i},dataLimits{i},simulationLimits{i},... - contrastBackgroundTypes,contrastBackgroundActions{i},... - contrastResolutionTypes{i},customFiles,nParams,parallel,... - numSimulationPoints,resampleMinAngle,resampleNPoints,... - subRoughs(i),slds1{i},slds2{i}); - - end - - end - - for i = 1:numberOfContrasts - - contrastSLDProfiles = sldProfiles{i}; - domainSldProfiles{i,1} = contrastSLDProfiles{1}; - domainSldProfiles{i,2} = contrastSLDProfiles{2}; - - contrastLayersValues = layers{i}; - domainLayers{i,1} = contrastLayersValues{1}; - domainLayers{i,2} = contrastLayersValues{2}; - - contrastResampledLayers = resampledLayers{i}; - domainResampledLayers{i,1} = contrastResampledLayers{1}; - domainResampledLayers{i,2} = contrastResampledLayers{2}; - - end - - % Remove dummy imaginary column if present - if ~useImaginary - for i=1:numberOfContrasts - domainSldProfiles{i,1}(:,3) = []; - domainSldProfiles{i,2}(:,3) = []; - domainLayers{i,1}(:,3) = []; - domainLayers{i,2}(:,3) = []; - domainResampledLayers{i,1}(:,3) = []; - domainResampledLayers{i,2}(:,3) = []; - end - end - -end - - -function [qzshift,scalefactor,bulkIn,bulkOut,chi,reflectivity,simulation,... - shiftedData,background,resolution,sldProfile,layers,... - resampledLayers] = contrastCalculation(backgroundParamIndex,... - qzshiftIndex,scalefactorIndex,bulkInIndex,bulkOutIndex,resolutionParamIndex,... - domainRatioIndex,backgroundParamValues,qzshiftValues,scalefactorValues,... - bulkInValues,bulkOutValues,resolutionParamValues,domainRatioValues,... - dataPresent,data,dataLimits,simulationLimits,backgroundType,... - backgroundAction,resolutionType,customFiles,nParams,parallel,... - numSimulationPoints,resampleMinAngle,resampleNPoints,roughness,... - sldProfile1,sldProfile2) - - % Get the domain ratio for this contrast - if isempty(domainRatioIndex) - domainRatioIndex = 1; - end - domainRatio = domainRatioValues(domainRatioIndex); - - % Extract the relevant parameter values for this contrast - % from the input arrays. - % First need to decide which values of the backgrounds, scalefactors - % data shifts and bulk contrasts are associated with this contrast - [qzshift,scalefactor,bulkIn,bulkOut] = backSort( ... - qzshiftIndex,scalefactorIndex,bulkInIndex,bulkOutIndex, ... - qzshiftValues,scalefactorValues,bulkInValues,bulkOutValues); - - % Resample the sld profiles - reSLD1 = sldProfile1(:,[1,2]); - imSLD1 = sldProfile1(:,[1,3]); - - reSLD2 = sldProfile2(:,[1,2]); - imSLD2 = sldProfile2(:,[1,3]); - - layers1 = resampleLayers(reSLD1,imSLD1,resampleMinAngle,resampleNPoints); - layers2 = resampleLayers(reSLD2,imSLD2,resampleMinAngle,resampleNPoints); - - layers = {layers1, layers2}; - resampledLayers = {layers1, layers2}; - sldProfile = {sldProfile1, sldProfile2}; - - shiftedData = shiftData(scalefactor,qzshift,dataPresent,data,dataLimits,simulationLimits,numSimulationPoints); - [simulationXData, dataIndices] = makeSimulationRange(shiftedData, simulationLimits); - - background = constructBackground(backgroundType,backgroundParamIndex,... - shiftedData,customFiles,backgroundParamValues,simulationXData,dataIndices); - resolution = constructResolution(resolutionType,resolutionParamIndex,... - shiftedData,customFiles,resolutionParamValues,simulationXData,dataIndices); - - reflectivityType = 'standardAbeles'; - [reflectivity1,simulation1] = callReflectivity(bulkIn,bulkOut,simulationXData, ... - dataIndices,1,layers1,roughness,resolution,parallel,reflectivityType); - [reflectivity2,simulation2] = callReflectivity(bulkIn,bulkOut,simulationXData, ... - dataIndices,1,layers2,roughness,resolution,parallel,reflectivityType); - - [reflectivity1,simulation1,~] = applyBackgroundCorrection(reflectivity1,simulation1,shiftedData,background,backgroundAction); - [reflectivity2,simulation2,shiftedData] = applyBackgroundCorrection(reflectivity2,simulation2,shiftedData,background,backgroundAction); - - % Calculate the average reflectivities - [reflectivity,simulation] = domainsTF.averageReflectivity(reflectivity1,reflectivity2,simulation1,simulation2,domainRatio); - - chi = chiSquared(shiftedData,reflectivity,nParams); - -end diff --git a/targetFunctions/+domainsTF/standardLayers.m b/targetFunctions/+domainsTF/domainsReflectivity.m similarity index 66% rename from targetFunctions/+domainsTF/standardLayers.m rename to targetFunctions/+domainsTF/domainsReflectivity.m index f497af1b0..b8321e402 100644 --- a/targetFunctions/+domainsTF/standardLayers.m +++ b/targetFunctions/+domainsTF/domainsReflectivity.m @@ -1,12 +1,13 @@ function [qzshifts,scalefactors,bulkIns,bulkOuts,chis,reflectivity,... simulation,shiftedData,backgrounds,resolutions,domainSldProfiles,... - domainLayers,domainResampledLayers,subRoughs] = standardLayers(problemStruct,controls) - % This is the main reflectivity calculation of the standard layers - % calculation type. It extracts the required parameters for the contrasts + domainLayers,domainResampledLayers,subRoughs] = domainsReflectivity(problemStruct,controls) + % This is the main domains reflectivity calculation. + % It extracts the required parameters for the contrasts % from the input arrays, then passes the main calculation to - % 'coreLayersCalculation', which carries out the calculation itself. - % The core calculation is common for both standard and custom layers. - + % the appropriate core calculation, which carries out the calculation + % itself. The core layers calculation is common for both standard and + % custom layers, with an additional core custom XY calculation. + % Extract parameters from problemStruct [numberOfContrasts, geometry, contrastBackgroundIndices, contrastQzshiftIndices,... contrastScalefactorIndices, contrastBulkInIndices, contrastBulkOutIndices,... @@ -85,29 +86,35 @@ case coderEnums.modelTypes.StandardLayers % First we need to allocate the absolute values of the input - % parameters to all the layers in the layers list. This only needs - % to be done once, and so is done outside the contrasts loop + % parameters to all the layers in the layers list. This only + % needs to be done once, and so is done outside the contrasts + % loop layerValues = allocateParamsToLayers(paramValues, layersDetails); for i = 1:numberOfContrasts - % Substrate roughness is always first parameter for standard layers + % Substrate roughness is always first parameter for + % standard layers subRoughs(i) = paramValues(1); - % Also need to determine which layers from the overall layers list - % are required for this contrast, and put them in the correct order - % according to geometry. We run it twice, once for each domain - contrastLayers1{i} = allocateLayersForContrast(domainContrastLayers{inputContrastLayers{i}(1)},layerValues); - contrastLayers2{i} = allocateLayersForContrast(domainContrastLayers{inputContrastLayers{i}(2)},layerValues); + % Also need to determine which layers from the overall + % layers list are required for this contrast, and put them + % in the correct order according to geometry. We run it + % twice, once for each domain + contrastLayers1{i} = allocateLayersForContrast(... + domainContrastLayers{inputContrastLayers{i}(1)},layerValues); + contrastLayers2{i} = allocateLayersForContrast(... + domainContrastLayers{inputContrastLayers{i}(2)},layerValues); end case coderEnums.modelTypes.CustomLayers numberOfOutputColumns = 6; - [contrastLayers,subRoughs] = domainsTF.processCustomFunction( ... - contrastBulkInIndices,contrastBulkOutIndices,bulkInValues,bulkOutValues, ... - contrastCustomFiles,numberOfContrasts,numberOfOutputColumns,customFiles,paramValues,useImaginary); + [contrastLayers,subRoughs] = domainsTF.processCustomFunction(... + contrastBulkInIndices,contrastBulkOutIndices,bulkInValues,... + bulkOutValues,contrastCustomFiles,numberOfContrasts,... + numberOfOutputColumns,customFiles,paramValues,useImaginary); for i = 1:size(contrastLayers,1) contrastLayers1{i} = contrastLayers{i,1}; @@ -117,8 +124,10 @@ case coderEnums.modelTypes.CustomXY numberOfOutputColumns = 3; - [slds,subRoughs] = domainsTF.processCustomFunction(contrastBulkInIndices,contrastBulkOutIndices,... - bulkInValues,bulkOutValues,contrastCustomFiles,numberOfContrasts,numberOfOutputColumns,customFiles,paramValues,useImaginary); + [slds,subRoughs] = domainsTF.processCustomFunction(... + contrastBulkInIndices,contrastBulkOutIndices,bulkInValues,... + bulkOutValues,contrastCustomFiles,numberOfContrasts,... + numberOfOutputColumns,customFiles,paramValues,useImaginary); for i = 1:size(slds,1) slds1{i} = slds{i,1}; @@ -146,17 +155,13 @@ simulationLimits{i},contrastBackgroundTypes{i},... contrastResolutionTypes{i},customFiles,numSimulationPoints); - [chis(i),... - reflectivity{i},simulation{i},shiftedData{i},backgrounds{i},... - resolutions{i},sldProfiles{i},layers{i},resampledLayers{i}... - ] = contrastCustomXYCalculation(bulkIns(i),bulkOuts(i),domainRatios(i),... - inputShiftedData,... - simulationXData,dataIndices,... - inputResolution,inputBackground,... - contrastBackgroundActions{i},... - nParams,parallel,... - resampleMinAngle,resampleNPoints,... - subRoughs(i),slds1{i},slds2{i}); + [reflectivity{i},simulation{i},shiftedData{i},backgrounds{i},... + resolutions{i},sldProfiles{i},layers{i},resampledLayers{i},... + chis(i)] = contrastCustomXYCalculation(bulkIns(i),... + bulkOuts(i),domainRatios(i),inputShiftedData,simulationXData,... + dataIndices,inputResolution,inputBackground,... + contrastBackgroundActions{i},nParams,parallel,resampleMinAngle,... + resampleNPoints,subRoughs(i),slds1{i},slds2{i}); end @@ -173,17 +178,13 @@ simulationLimits{i},contrastBackgroundTypes{i},... contrastResolutionTypes{i},customFiles,numSimulationPoints); - [chis(i),... - reflectivity{i},simulation{i},shiftedData{i},backgrounds{i},... - resolutions{i},sldProfiles{i},layers{i},resampledLayers{i}... - ] = contrastCustomXYCalculation(bulkIns(i),bulkOuts(i),domainRatios(i),... - inputShiftedData,... - simulationXData,dataIndices,... - inputResolution,inputBackground,... - contrastBackgroundActions{i},... - nParams,parallel,... - resampleMinAngle,resampleNPoints,... - subRoughs(i),slds1{i},slds2{i}); + [reflectivity{i},simulation{i},shiftedData{i},backgrounds{i},... + resolutions{i},sldProfiles{i},layers{i},resampledLayers{i},... + chis(i)] = contrastCustomXYCalculation(bulkIns(i),... + bulkOuts(i),domainRatios(i),inputShiftedData,simulationXData,... + dataIndices,inputResolution,inputBackground,... + contrastBackgroundActions{i},nParams,parallel,resampleMinAngle,... + resampleNPoints,subRoughs(i),slds1{i},slds2{i}); end @@ -193,7 +194,6 @@ if strcmpi(parallel, coderEnums.parallelOptions.Contrasts) - % Loop over all the contrasts parfor i = 1:numberOfContrasts [inputBackground,inputResolution,inputShiftedData,... @@ -205,18 +205,15 @@ simulationLimits{i},contrastBackgroundTypes{i},... contrastResolutionTypes{i},customFiles,numSimulationPoints); - [chis(i),... - reflectivity{i},simulation{i},shiftedData{i},sldProfiles{i},... - layers{i},resampledLayers{i}... - ] = contrastLayersCalculation(bulkIns(i),bulkOuts(i),domainRatios(i),... - inputShiftedData,... - simulationXData,dataIndices,... - inputResolution,inputBackground,... - repeatLayers(i),... - contrastBackgroundActions{i},... - nParams,parallel,... + [reflectivity{i},simulation{i},shiftedData{i},sldProfiles{i},... + layers{i},resampledLayers{i},chis(i)... + ] = contrastLayersCalculation(bulkIns(i),bulkOuts(i),... + domainRatios(i),inputShiftedData,simulationXData,dataIndices,... + inputResolution,inputBackground,repeatLayers(i),... + contrastBackgroundActions{i},nParams,parallel,... resampleMinAngle,resampleNPoints,resample(i),... - geometry,subRoughs(i),calcSld,contrastLayers1{i},contrastLayers2{i}); + geometry,subRoughs(i),calcSld,contrastLayers1{i},... + contrastLayers2{i}); backgrounds{i} = inputBackground; resolutions{i} = inputResolution; @@ -225,7 +222,6 @@ else - % Loop over all the contrasts for i = 1:numberOfContrasts [inputBackground,inputResolution,inputShiftedData,... @@ -237,18 +233,14 @@ simulationLimits{i},contrastBackgroundTypes{i},... contrastResolutionTypes{i},customFiles,numSimulationPoints); - [chis(i),... - reflectivity{i},simulation{i},shiftedData{i},sldProfiles{i},... - layers{i},resampledLayers{i}... - ] = contrastLayersCalculation(bulkIns(i),bulkOuts(i),domainRatios(i),... - inputShiftedData,... - simulationXData,dataIndices,... - inputResolution,inputBackground,... - repeatLayers(i),... - contrastBackgroundActions{i},... - nParams,parallel,... - resampleMinAngle,resampleNPoints,resample(i),... - geometry,subRoughs(i),calcSld,contrastLayers1{i},contrastLayers2{i}); + [reflectivity{i},simulation{i},shiftedData{i},sldProfiles{i},... + layers{i},resampledLayers{i},chis(i)... + ] = contrastLayersCalculation(bulkIns(i),bulkOuts(i),... + domainRatios(i),inputShiftedData,simulationXData,dataIndices,... + inputResolution,inputBackground,repeatLayers(i),... + contrastBackgroundActions{i},nParams,parallel,resampleMinAngle,... + resampleNPoints,resample(i),geometry,subRoughs(i),calcSld,... + contrastLayers1{i},contrastLayers2{i}); backgrounds{i} = inputBackground; resolutions{i} = inputResolution; @@ -288,31 +280,30 @@ end -function [chi,reflectivity,simulation,... - shiftedData,sldProfile,layers,... - resampledLayers] = contrastLayersCalculation(bulkIn,bulkOut,domainRatio,... - shiftedData,... - simulationXData,dataIndices,... - resolution,background, ... - repeatLayers,... - backgroundAction,nParams,... - parallel,resampleMinAngle,resampleNPoints,resample,... - geometry,roughness,calcSld,contrastLayers1,contrastLayers2) +function [reflectivity,simulation,shiftedData,sldProfile,layers,... + resampledLayers,chi] = contrastLayersCalculation(bulkIn,bulkOut,... + domainRatio,shiftedData,simulationXData,dataIndices,resolution,... + background,repeatLayers,backgroundAction,nParams,parallel,... + resampleMinAngle,resampleNPoints,resample,geometry,roughness,calcSld,... + contrastLayers1,contrastLayers2) % Call the core layers calculation - need to do this once for each % domain - [reflectivity1,simulation1,~,sldProfile1,layers1,resampledLayers1] = normalTF.coreLayersCalculation( ... - contrastLayers1,roughness,geometry,bulkIn,bulkOut,resample,calcSld,shiftedData, ... - simulationXData,dataIndices,repeatLayers,resolution,background, ... - backgroundAction,parallel,resampleMinAngle,resampleNPoints); - - [reflectivity2,simulation2,shiftedData,sldProfile2,layers2,resampledLayers2] = normalTF.coreLayersCalculation( ... - contrastLayers2,roughness,geometry,bulkIn,bulkOut,resample,calcSld,shiftedData, ... - simulationXData,dataIndices,repeatLayers,resolution,background, ... - backgroundAction,parallel,resampleMinAngle,resampleNPoints); + [reflectivity1,simulation1,~,sldProfile1,layers1,resampledLayers1... + ] = normalTF.coreLayersCalculation(contrastLayers1,roughness,geometry,... + bulkIn,bulkOut,resample,calcSld,shiftedData,simulationXData,dataIndices,... + repeatLayers,resolution,background,backgroundAction,parallel,... + resampleMinAngle,resampleNPoints); + + [reflectivity2,simulation2,shiftedData,sldProfile2,layers2,resampledLayers2... + ] = normalTF.coreLayersCalculation(contrastLayers2,roughness,geometry,... + bulkIn,bulkOut,resample,calcSld,shiftedData,simulationXData,dataIndices,... + repeatLayers,resolution,background,backgroundAction,parallel,... + resampleMinAngle,resampleNPoints); % Calculate the average reflectivities - [reflectivity,simulation] = domainsTF.averageReflectivity(reflectivity1,reflectivity2,simulation1,simulation2,domainRatio); + [reflectivity,simulation] = domainsTF.averageReflectivity(... + reflectivity1,reflectivity2,simulation1,simulation2,domainRatio); % Get an overall chi-squared for the new averaged curve chi = chiSquared(shiftedData,reflectivity,nParams); @@ -324,15 +315,11 @@ end -function [chi,reflectivity,simulation,... - shiftedData,background,resolution,sldProfile,layers,... - resampledLayers] = contrastCustomXYCalculation(bulkIn,bulkOut,domainRatio,... - shiftedData,... - simulationXData,dataIndices,... - resolution,background, ... - backgroundAction,nParams,... - parallel,resampleMinAngle,resampleNPoints,roughness,... - sld1,sld2) +function [reflectivity,simulation,shiftedData,background,resolution,... + sldProfile,layers,resampledLayers,chi] = contrastCustomXYCalculation(... + bulkIn,bulkOut,domainRatio,shiftedData,simulationXData,dataIndices,... + resolution,background,backgroundAction,nParams,parallel,... + resampleMinAngle,resampleNPoints,roughness,sld1,sld2) % Resample the sld profiles sldProfile1 = sld1(:,[1,2]); @@ -345,16 +332,19 @@ layers2 = resampleLayers(sldProfile2,sldProfileIm2,resampleMinAngle,resampleNPoints); reflectivityType = 'standardAbeles'; - [reflectivity1,simulation1] = callReflectivity(bulkIn,bulkOut,simulationXData, ... + [reflectivity1,simulation1] = callReflectivity(bulkIn,bulkOut,simulationXData,... dataIndices,1,layers1,roughness,resolution,parallel,reflectivityType); - [reflectivity2,simulation2] = callReflectivity(bulkIn,bulkOut,simulationXData, ... + [reflectivity2,simulation2] = callReflectivity(bulkIn,bulkOut,simulationXData,... dataIndices,1,layers2,roughness,resolution,parallel,reflectivityType); - [reflectivity1,simulation1,~] = applyBackgroundCorrection(reflectivity1,simulation1,shiftedData,background,backgroundAction); - [reflectivity2,simulation2,shiftedData] = applyBackgroundCorrection(reflectivity2,simulation2,shiftedData,background,backgroundAction); + [reflectivity1,simulation1,~] = applyBackgroundCorrection(... + reflectivity1,simulation1,shiftedData,background,backgroundAction); + [reflectivity2,simulation2,shiftedData] = applyBackgroundCorrection(... + reflectivity2,simulation2,shiftedData,background,backgroundAction); % Calculate the average reflectivities - [reflectivity,simulation] = domainsTF.averageReflectivity(reflectivity1,reflectivity2,simulation1,simulation2,domainRatio); + [reflectivity,simulation] = domainsTF.averageReflectivity(... + reflectivity1,reflectivity2,simulation1,simulation2,domainRatio); chi = chiSquared(shiftedData,reflectivity,nParams); diff --git a/targetFunctions/+normalTF/customLayers.m b/targetFunctions/+normalTF/customLayers.m deleted file mode 100644 index 37b095a21..000000000 --- a/targetFunctions/+normalTF/customLayers.m +++ /dev/null @@ -1,138 +0,0 @@ -function [qzshifts,scalefactors,bulkIns,bulkOuts,chis,reflectivity,... - simulation,shiftedData,backgrounds,resolutions,sldProfiles,layers,... - resampledLayers,subRoughs] = customLayers(problemStruct,controls) - % The custom layers, normalTF reflectivity calculation. - % The function extracts the relevant parameters from the input arrays, - % allocates these on a pre-contrast basis, then calls the - % 'coreLayersCalculation' (the core layers normalTF calc is - % shared between multiple calculation types). - - % Extract parameters from problemStruct - [numberOfContrasts, geometry, contrastBackgroundIndices, contrastQzshiftIndices,... - contrastScalefactorIndices, contrastBulkInIndices, contrastBulkOutIndices,... - contrastResolutionIndices, ~, backgroundParamValues, qzshiftValues,... - scalefactorValues, bulkInValues, bulkOutValues, resolutionParamValues, ~,... - dataPresent, nParams, paramValues, ~, resample, contrastBackgroundTypes,... - contrastBackgroundActions, contrastResolutionTypes, contrastCustomFiles, useImaginary,... - ~, data, dataLimits, simulationLimits, ~, ~, customFiles, ~] = extractProblemParams(problemStruct); - - calcSld = controls.calcSldDuringFit; - parallel = controls.parallel; - numSimulationPoints = controls.numSimulationPoints; - resampleMinAngle = controls.resampleMinAngle; - resampleNPoints = controls.resampleNPoints; - - % Pre-Allocation of output arrays... - qzshifts = zeros(numberOfContrasts,1); - scalefactors = zeros(numberOfContrasts,1); - bulkIns = zeros(numberOfContrasts,1); - bulkOuts = zeros(numberOfContrasts,1); - chis = zeros(numberOfContrasts,1); - - reflectivity = cell(numberOfContrasts,1); - simulation = cell(numberOfContrasts,1); - shiftedData = cell(numberOfContrasts,1); - backgrounds = cell(numberOfContrasts,1); - resolutions = cell(numberOfContrasts,1); - sldProfiles = cell(numberOfContrasts,1); - layers = cell(numberOfContrasts,1); - resampledLayers = cell(numberOfContrasts,1); - - % Process the custom models - numberOfOutputColumns = 6; - [contrastLayers,subRoughs] = normalTF.processCustomFunction(contrastBulkInIndices,contrastBulkOutIndices,... - bulkInValues,bulkOutValues,contrastCustomFiles,numberOfContrasts,numberOfOutputColumns,customFiles,paramValues,useImaginary); - - if strcmpi(parallel, coderEnums.parallelOptions.Contrasts) - - % Multi cored over all contrasts - parfor i = 1:numberOfContrasts - - [qzshifts(i),scalefactors(i),bulkIns(i),bulkOuts(i),chis(i),... - reflectivity{i},simulation{i},shiftedData{i},backgrounds{i},... - resolutions{i},sldProfiles{i},layers{i},resampledLayers{i}... - ] = contrastCalculation(contrastBackgroundIndices{i},... - contrastQzshiftIndices(i),contrastScalefactorIndices(i),... - contrastBulkInIndices(i),contrastBulkOutIndices(i),... - contrastResolutionIndices{i},backgroundParamValues,qzshiftValues,... - scalefactorValues,bulkInValues,bulkOutValues,resolutionParamValues,... - dataPresent(i),data{i},dataLimits{i},simulationLimits{i},... - contrastBackgroundTypes{i},contrastBackgroundActions{i},... - contrastResolutionTypes{i},customFiles,nParams,parallel,... - numSimulationPoints,resampleMinAngle,resampleNPoints,... - resample(i),geometry,subRoughs(i),calcSld,contrastLayers{i}); - - end - - else - - % Single cored over all contrasts - for i = 1:numberOfContrasts - - [qzshifts(i),scalefactors(i),bulkIns(i),bulkOuts(i),chis(i),... - reflectivity{i},simulation{i},shiftedData{i},backgrounds{i},... - resolutions{i},sldProfiles{i},layers{i},resampledLayers{i}... - ] = contrastCalculation(contrastBackgroundIndices{i},... - contrastQzshiftIndices(i),contrastScalefactorIndices(i),... - contrastBulkInIndices(i),contrastBulkOutIndices(i),... - contrastResolutionIndices{i},backgroundParamValues,qzshiftValues,... - scalefactorValues,bulkInValues,bulkOutValues,resolutionParamValues,... - dataPresent(i),data{i},dataLimits{i},simulationLimits{i},... - contrastBackgroundTypes{i},contrastBackgroundActions{i},... - contrastResolutionTypes{i},customFiles,nParams,parallel,... - numSimulationPoints,resampleMinAngle,resampleNPoints,... - resample(i),geometry,subRoughs(i),calcSld,contrastLayers{i}); - - end - - end - - % Remove dummy imaginary column if present - if ~useImaginary - for i=1:numberOfContrasts - layers{i}(:,3) = []; - resampledLayers{i}(:,3) = []; - end - end - -end - - -function [qzshift,scalefactor,bulkIn,bulkOut,chi,reflectivity,simulation,... - shiftedData,background,resolution,sldProfile,layers,... - resampledLayers] = contrastCalculation(backgroundParamIndex,... - qzshiftIndex,scalefactorIndex,bulkInIndex,bulkOutIndex,resolutionParamIndex,... - backgroundParamValues,qzshiftValues,scalefactorValues,bulkInValues,... - bulkOutValues,resolutionParamValues,dataPresent,data,dataLimits,... - simulationLimits,backgroundType,backgroundAction,resolutionType,... - customFiles,nParams,parallel,numSimulationPoints,resampleMinAngle,... - resampleNPoints,resample,geometry,roughness,calcSld,contrastLayers) - - % Extract the relevant parameter values for this contrast - % from the input arrays. - % First need to decide which values of the backgrounds, scalefactors - % data shifts and bulk contrasts are associated with this contrast - [qzshift,scalefactor,bulkIn,bulkOut] = backSort( ... - qzshiftIndex,scalefactorIndex,bulkInIndex,bulkOutIndex, ... - qzshiftValues,scalefactorValues,bulkInValues,bulkOutValues); - - % Apply scale factors and q shifts to the data - shiftedData = shiftData(scalefactor,qzshift,dataPresent,data,dataLimits,simulationLimits,numSimulationPoints); - [simulationXData, dataIndices] = makeSimulationRange(shiftedData, simulationLimits); - - background = constructBackground(backgroundType,backgroundParamIndex,... - shiftedData,customFiles,backgroundParamValues,simulationXData,dataIndices); - resolution = constructResolution(resolutionType,resolutionParamIndex,... - shiftedData,customFiles,resolutionParamValues,simulationXData,dataIndices); - - % Call the core layers calculation - [reflectivity,simulation,shiftedData,sldProfile,layers,... - resampledLayers] = normalTF.coreLayersCalculation(contrastLayers,roughness,... - geometry,bulkIn,bulkOut,resample,calcSld,shiftedData,simulationXData,... - dataIndices,1,resolution,background,backgroundAction,parallel,... - resampleMinAngle,resampleNPoints); - - % Calculate chi squared - chi = chiSquared(shiftedData,reflectivity,nParams); - -end diff --git a/targetFunctions/+normalTF/customXY.m b/targetFunctions/+normalTF/customXY.m deleted file mode 100644 index f8ab66426..000000000 --- a/targetFunctions/+normalTF/customXY.m +++ /dev/null @@ -1,135 +0,0 @@ -function [qzshifts,scalefactors,bulkIns,bulkOuts,chis,reflectivity,... - simulation,shiftedData,backgrounds,resolutions,sldProfiles,layers,... - resampledLayers,subRoughs] = customXY(problemStruct,controls) - - % Extract parameters from problemStruct - [numberOfContrasts, ~, contrastBackgroundIndices, contrastQzshiftIndices,... - contrastScalefactorIndices, contrastBulkInIndices, contrastBulkOutIndices,... - contrastResolutionIndices, ~, backgroundParamValues, qzshiftValues,... - scalefactorValues, bulkInValues, bulkOutValues, resolutionParamValues,... - ~, dataPresent, nParams, paramValues, ~, ~, contrastBackgroundTypes,... - contrastBackgroundActions, contrastResolutionTypes, contrastCustomFiles,... - useImaginary, ~, data, dataLimits, simulationLimits, ~, ~,... - customFiles, ~] = extractProblemParams(problemStruct); - - parallel = controls.parallel; - numSimulationPoints = controls.numSimulationPoints; - resampleMinAngle = controls.resampleMinAngle; - resampleNPoints = controls.resampleNPoints; - - %Pre-Allocation... - qzshifts = zeros(numberOfContrasts,1); - scalefactors = zeros(numberOfContrasts,1); - bulkIns = zeros(numberOfContrasts,1); - bulkOuts = zeros(numberOfContrasts,1); - chis = zeros(numberOfContrasts,1); - - reflectivity = cell(numberOfContrasts,1); - simulation = cell(numberOfContrasts,1); - shiftedData = cell(numberOfContrasts,1); - backgrounds = cell(numberOfContrasts,1); - resolutions = cell(numberOfContrasts,1); - sldProfiles = cell(numberOfContrasts,1); - layers = cell(numberOfContrasts,1); - resampledLayers = cell(numberOfContrasts,1); - - % Process the custom models - numberOfOutputColumns = 3; - [slds,subRoughs] = normalTF.processCustomFunction(contrastBulkInIndices,contrastBulkOutIndices,... - bulkInValues,bulkOutValues,contrastCustomFiles,numberOfContrasts,numberOfOutputColumns,customFiles,paramValues,useImaginary); - - if strcmpi(parallel, coderEnums.parallelOptions.Contrasts) - - parfor i = 1:numberOfContrasts - - [qzshifts(i),scalefactors(i),bulkIns(i),bulkOuts(i),chis(i),... - reflectivity{i},simulation{i},shiftedData{i},backgrounds{i},... - resolutions{i},sldProfiles{i},layers{i},resampledLayers{i}... - ] = contrastCalculation(contrastBackgroundIndices{i},... - contrastQzshiftIndices(i),contrastScalefactorIndices(i),... - contrastBulkInIndices(i),contrastBulkOutIndices(i),... - contrastResolutionIndices{i},backgroundParamValues,qzshiftValues,... - scalefactorValues,bulkInValues,bulkOutValues,resolutionParamValues,... - dataPresent(i),data{i},dataLimits{i},simulationLimits{i},... - contrastBackgroundTypes{i},contrastBackgroundActions{i},... - contrastResolutionTypes{i},customFiles,nParams,parallel,... - numSimulationPoints,resampleMinAngle,resampleNPoints,... - subRoughs(i),slds{i}); - end - - else - - for i = 1:numberOfContrasts - - [qzshifts(i),scalefactors(i),bulkIns(i),bulkOuts(i),chis(i),... - reflectivity{i},simulation{i},shiftedData{i},backgrounds{i},... - resolutions{i},sldProfiles{i},layers{i},resampledLayers{i}... - ] = contrastCalculation(contrastBackgroundIndices{i},... - contrastQzshiftIndices(i),contrastScalefactorIndices(i),... - contrastBulkInIndices(i),contrastBulkOutIndices(i),... - contrastResolutionIndices{i},backgroundParamValues,qzshiftValues,... - scalefactorValues,bulkInValues,bulkOutValues,resolutionParamValues,... - dataPresent(i),data{i},dataLimits{i},simulationLimits{i},... - contrastBackgroundTypes{i},contrastBackgroundActions{i},... - contrastResolutionTypes{i},customFiles,nParams,parallel,... - numSimulationPoints,resampleMinAngle,resampleNPoints,... - subRoughs(i),slds{i}); - - end - - end - - % Remove dummy imaginary column if present - if ~useImaginary - for i=1:numberOfContrasts - sldProfiles{i}(:,3) = []; - layers{i}(:,3) = []; - resampledLayers{i}(:,3) = []; - end - end - -end - - -function [qzshift,scalefactor,bulkIn,bulkOut,chi,reflectivity,simulation,... - shiftedData,background,resolution,sldProfile,layers,... - resampledLayers] = contrastCalculation(backgroundParamIndex,... - qzshiftIndex,scalefactorIndex,bulkInIndex,bulkOutIndex,resolutionParamIndex,... - backgroundParams,qzshiftValues,scalefactorValues,bulkInValues,bulkOutValues,... - resolutionParamValues,dataPresent,data,dataLimits,simulationLimits,... - backgroundType,backgroundAction,resolutionType,customFiles,nParams,... - parallel,numSimulationPoints,resampleMinAngle,resampleNPoints,roughness,... - sldProfile) - - % Extract the relevant parameter values for this contrast - % from the input arrays. - % First need to decide which values of the backgrounds, scalefactors - % data shifts and bulk contrasts are associated with this contrast - [qzshift,scalefactor,bulkIn,bulkOut] = backSort( ... - qzshiftIndex,scalefactorIndex,bulkInIndex,bulkOutIndex, ... - qzshiftValues,scalefactorValues,bulkInValues,bulkOutValues); - - % Apply scale factors and q shifts to the data - shiftedData = shiftData(scalefactor,qzshift,dataPresent,data,dataLimits,simulationLimits,numSimulationPoints); - [simulationXData, dataIndices] = makeSimulationRange(shiftedData, simulationLimits); - - background = constructBackground(backgroundType,backgroundParamIndex,... - shiftedData,customFiles,backgroundParams,simulationXData,dataIndices); - resolution = constructResolution(resolutionType,resolutionParamIndex,... - shiftedData,customFiles,resolutionParamValues,simulationXData,dataIndices); - - % Resample the layers - reSLD = sldProfile(:,[1,2]); - imSLD = sldProfile(:,[1,3]); - resampledLayers = resampleLayers(reSLD,imSLD,resampleMinAngle,resampleNPoints); - - layers = resampledLayers; - - reflectivityType = 'standardAbeles'; - [reflectivity,simulation] = callReflectivity(bulkIn,bulkOut,simulationXData,dataIndices,1,layers,roughness,resolution,parallel,reflectivityType); - - [reflectivity,simulation,shiftedData] = applyBackgroundCorrection(reflectivity,simulation,shiftedData,background,backgroundAction); - - chi = chiSquared(shiftedData,reflectivity,nParams); - -end diff --git a/targetFunctions/+normalTF/standardLayers.m b/targetFunctions/+normalTF/normalReflectivity.m similarity index 94% rename from targetFunctions/+normalTF/standardLayers.m rename to targetFunctions/+normalTF/normalReflectivity.m index fde8aad88..7538ce2f4 100644 --- a/targetFunctions/+normalTF/standardLayers.m +++ b/targetFunctions/+normalTF/normalReflectivity.m @@ -1,6 +1,6 @@ function [qzshifts,scalefactors,bulkIns,bulkOuts,chis,reflectivity,... simulation,shiftedData,backgrounds,resolutions,sldProfiles,layers,... - resampledLayers,subRoughs] = standardLayers(problemStruct,controls) + resampledLayers,subRoughs] = normalReflectivity(problemStruct,controls) % This is the main normal reflectivity calculation. % It extracts the required parameters for the contrasts % from the input arrays, then passes the main calculation to @@ -61,8 +61,9 @@ case coderEnums.modelTypes.StandardLayers % First we need to allocate the absolute values of the input - % parameters to all the layers in the layers list. This only needs - % to be done once, and so is done outside the contrasts loop + % parameters to all the layers in the layers list. This only + % needs to be done once, and so is done outside the contrasts + % loop layerValues = allocateParamsToLayers(paramValues, layersDetails); for i = 1:numberOfContrasts @@ -74,7 +75,8 @@ % Also need to determine which layers from the overall % layers list are required for this contrast, and put them % in the correct order according to geometry. - contrastLayers{i} = allocateLayersForContrast(contrastLayersIndices{i},layerValues); + contrastLayers{i} = allocateLayersForContrast( ... + contrastLayersIndices{i},layerValues); end @@ -107,7 +109,6 @@ if strcmpi(parallel, coderEnums.parallelOptions.Contrasts) - % Loop over all the contrasts parfor i = 1:numberOfContrasts [inputBackground,inputResolution,inputShiftedData,... @@ -134,7 +135,6 @@ else - % Loop over all the contrasts for i = 1:numberOfContrasts [inputBackground,inputResolution,inputShiftedData,... @@ -164,7 +164,6 @@ if strcmpi(parallel, coderEnums.parallelOptions.Contrasts) - % Loop over all the contrasts parfor i = 1:numberOfContrasts [inputBackground,inputResolution,inputShiftedData,... @@ -197,7 +196,6 @@ else - % Loop over all the contrasts for i = 1:numberOfContrasts [inputBackground,inputResolution,inputShiftedData,... @@ -249,14 +247,18 @@ % Resample the layers sldProfile = sld(:,[1,2]); sldProfileIm = sld(:,[1,3]); - resampledLayers = resampleLayers(sldProfile,sldProfileIm,resampleMinAngle,resampleNPoints); + resampledLayers = resampleLayers(sldProfile,sldProfileIm,... + resampleMinAngle,resampleNPoints); layers = resampledLayers; reflectivityType = 'standardAbeles'; - [reflectivity,simulation] = callReflectivity(bulkIn,bulkOut,simulationXData,dataIndices,1,layers,roughness,resolution,parallel,reflectivityType); + [reflectivity,simulation] = callReflectivity(bulkIn,bulkOut,... + simulationXData,dataIndices,1,layers,roughness,resolution,parallel,... + reflectivityType); - [reflectivity,simulation,shiftedData] = applyBackgroundCorrection(reflectivity,simulation,shiftedData,background,backgroundAction); + [reflectivity,simulation,shiftedData] = applyBackgroundCorrection(... + reflectivity,simulation,shiftedData,background,backgroundAction); chi = chiSquared(shiftedData,reflectivity,nParams); diff --git a/targetFunctions/reflectivityCalculation.m b/targetFunctions/reflectivityCalculation.m index 532036034..b2b435a3c 100644 --- a/targetFunctions/reflectivityCalculation.m +++ b/targetFunctions/reflectivityCalculation.m @@ -27,27 +27,24 @@ % The results of the calculation. % Decide which target function we are calling and call the relevant routines -targetFunction = problemStruct.TF; -modelType = problemStruct.modelType; - -switch targetFunction +switch problemStruct.TF case coderEnums.calculationTypes.Normal [~,scalefactors,bulkIns,bulkOuts,chis,reflectivity,... simulation,shiftedData,backgrounds,resolutions,sldProfiles,... layers,resampledLayers,subRoughs... - ] = normalTF.standardLayers(problemStruct,controls); + ] = normalTF.normalReflectivity(problemStruct,controls); case coderEnums.calculationTypes.Domains [~,scalefactors,bulkIns,bulkOuts,chis,reflectivity,... simulation,shiftedData,backgrounds,resolutions,sldProfiles,... layers,resampledLayers,subRoughs... - ] = domainsTF.standardLayers(problemStruct,controls); + ] = domainsTF.domainsReflectivity(problemStruct,controls); otherwise - coderException(coderEnums.errorCodes.invalidOption, 'The calculation type "%s" is not supported', targetFunction); + coderException(coderEnums.errorCodes.invalidOption, 'The calculation type "%s" is not supported', problemStruct.TF); end % Make the result struct diff --git a/tests/domainsTFReflectivityCalculation/testDomainsReflectivityCalculations.m b/tests/domainsTFReflectivityCalculation/testDomainsReflectivityCalculations.m index a6f19f9fa..dab22b565 100644 --- a/tests/domainsTFReflectivityCalculation/testDomainsReflectivityCalculations.m +++ b/tests/domainsTFReflectivityCalculation/testDomainsReflectivityCalculations.m @@ -156,7 +156,7 @@ function testDomainsTFReflectivityCalculation(testCase, parallel) testCase.controls.parallel = parallel; [qzshifts,scalefactors,bulkIn,bulkOut,chis,reflectivity,... simulation,shiftedData,backgrounds,resolutions,SLDProfiles,layers,resampledLayers,... - subRoughs] = domainsTF.standardLayers(testCase.problemStruct,testCase.controls); + subRoughs] = domainsTF.domainsReflectivity(testCase.problemStruct,testCase.controls); testCase.verifyEqual(qzshifts, testCase.TFQzshifts, 'RelTol', testCase.tolerance, 'AbsTol', testCase.absTolerance); testCase.verifyEqual(scalefactors, testCase.TFScalefactors, 'RelTol', testCase.tolerance, 'AbsTol', testCase.absTolerance); diff --git a/tests/normalTFReflectivityCalculation/testReflectivityCalculations.m b/tests/normalTFReflectivityCalculation/testReflectivityCalculations.m index f4f9cd22f..e73ebd9f1 100644 --- a/tests/normalTFReflectivityCalculation/testReflectivityCalculations.m +++ b/tests/normalTFReflectivityCalculation/testReflectivityCalculations.m @@ -170,7 +170,7 @@ function testNormalTFReflectivityCalculation(testCase, parallel) testCase.controls.parallel = parallel; [qzshifts,scalefactors,bulkIn,bulkOut,chis,reflectivity,... simulation,shiftedData,backgrounds,resolutions,SLDProfiles,layers,resampledLayers,... - subRoughs] = normalTF.standardLayers(testCase.problemStruct,testCase.controls); + subRoughs] = normalTF.normalReflectivity(testCase.problemStruct,testCase.controls); testCase.verifyEqual(qzshifts, testCase.TFQzshifts, 'RelTol', testCase.tolerance, 'AbsTol', testCase.absTolerance); testCase.verifyEqual(scalefactors, testCase.TFScalefactors, 'RelTol', testCase.tolerance, 'AbsTol', testCase.absTolerance); From 39afbb0cbfcbbaa11b822886af7a38aab4bf419a Mon Sep 17 00:00:00 2001 From: Paul Sharp <44529197+DrPaulSharp@users.noreply.github.com> Date: Fri, 27 Jun 2025 11:54:18 +0100 Subject: [PATCH 10/16] Moves "backSort" into "extractProblemParams" --- .../+domainsTF/domainsReflectivity.m | 34 +++++------------ .../+domainsTF/processCustomFunction.m | 18 ++++----- .../+normalTF/normalReflectivity.m | 35 ++++++------------ .../+normalTF/processCustomFunction.m | 14 +++---- targetFunctions/common/backSort.m | 25 ------------- targetFunctions/common/extractProblemParams.m | 26 ++++++++----- .../testDomainsReflectivityCalculations.m | 21 ++++++----- .../testReflectivityCalculations.m | 21 ++++++----- tests/testCommonFunctions/backSortInputs.mat | Bin 268 -> 0 bytes tests/testCommonFunctions/backSortOutputs.mat | Bin 219 -> 0 bytes .../testCommonFunctions/testCommonFunctions.m | 9 ----- 11 files changed, 71 insertions(+), 132 deletions(-) delete mode 100644 targetFunctions/common/backSort.m delete mode 100644 tests/testCommonFunctions/backSortInputs.mat delete mode 100644 tests/testCommonFunctions/backSortOutputs.mat diff --git a/targetFunctions/+domainsTF/domainsReflectivity.m b/targetFunctions/+domainsTF/domainsReflectivity.m index b8321e402..e7288f04c 100644 --- a/targetFunctions/+domainsTF/domainsReflectivity.m +++ b/targetFunctions/+domainsTF/domainsReflectivity.m @@ -9,16 +9,14 @@ % custom layers, with an additional core custom XY calculation. % Extract parameters from problemStruct - [numberOfContrasts, geometry, contrastBackgroundIndices, contrastQzshiftIndices,... - contrastScalefactorIndices, contrastBulkInIndices, contrastBulkOutIndices,... + [numberOfContrasts, geometry, contrastBackgroundIndices,... contrastResolutionIndices, contrastDomainRatioIndices, backgroundParamValues,... - qzshiftValues, scalefactorValues, bulkInValues, bulkOutValues,... - resolutionParamValues, domainRatioValues, dataPresent, nParams, paramValues,... - resample, contrastBackgroundTypes, contrastBackgroundActions,... - contrastResolutionTypes, contrastCustomFiles, useImaginary,... - repeatLayers, data, dataLimits, simulationLimits, inputContrastLayers,... - layersDetails, customFiles, domainContrastLayers... - ] = extractProblemParams(problemStruct); + resolutionParamValues, qzshifts, scalefactors, bulkIns, bulkOuts,... + domainRatioValues, dataPresent, nParams, paramValues, resample,... + contrastBackgroundTypes, contrastBackgroundActions,... + contrastResolutionTypes, contrastCustomFiles, useImaginary, repeatLayers,... + data, dataLimits, simulationLimits, inputContrastLayers, layersDetails,... + customFiles, domainContrastLayers] = extractProblemParams(problemStruct); calcSld = controls.calcSldDuringFit; parallel = controls.parallel; @@ -60,17 +58,6 @@ domainLayers{i,2} = zeros(1,6); domainResampledLayers{i,1} = zeros(1,6); domainResampledLayers{i,2} = zeros(1,6); - end - - % Extract the relevant parameter values for this contrast from the - % input arrays. We need to determine which values of the data shifts, - % scalefactors, and bulk contrasts are associated with this contrast. - [qzshifts,scalefactors,bulkIns,bulkOuts] = backSort(... - contrastQzshiftIndices,contrastScalefactorIndices,... - contrastBulkInIndices,contrastBulkOutIndices,... - qzshiftValues,scalefactorValues,bulkInValues,bulkOutValues); - - for i = 1:numberOfContrasts % Get the domain ratio for this contrast if isempty(contrastDomainRatioIndices(i)) @@ -80,7 +67,6 @@ end - switch lower(problemStruct.modelType) case coderEnums.modelTypes.StandardLayers @@ -112,8 +98,7 @@ numberOfOutputColumns = 6; [contrastLayers,subRoughs] = domainsTF.processCustomFunction(... - contrastBulkInIndices,contrastBulkOutIndices,bulkInValues,... - bulkOutValues,contrastCustomFiles,numberOfContrasts,... + bulkIns,bulkOuts,contrastCustomFiles,numberOfContrasts,... numberOfOutputColumns,customFiles,paramValues,useImaginary); for i = 1:size(contrastLayers,1) @@ -125,8 +110,7 @@ numberOfOutputColumns = 3; [slds,subRoughs] = domainsTF.processCustomFunction(... - contrastBulkInIndices,contrastBulkOutIndices,bulkInValues,... - bulkOutValues,contrastCustomFiles,numberOfContrasts,... + bulkIns,bulkOuts,contrastCustomFiles,numberOfContrasts,... numberOfOutputColumns,customFiles,paramValues,useImaginary); for i = 1:size(slds,1) diff --git a/targetFunctions/+domainsTF/processCustomFunction.m b/targetFunctions/+domainsTF/processCustomFunction.m index e60995b55..2d5968951 100644 --- a/targetFunctions/+domainsTF/processCustomFunction.m +++ b/targetFunctions/+domainsTF/processCustomFunction.m @@ -1,18 +1,14 @@ -function [outputs,subRoughs] = processCustomFunction(contrastBulkIns,contrastBulkOuts,... - bulkInValues,bulkOutValues,contrastCustomFiles,numberOfContrasts,numberOfOutputColumns,customFiles,paramValues,useImaginary) +function [outputs,subRoughs] = processCustomFunction(bulkIns,bulkOuts,... + contrastCustomFiles,numberOfContrasts,numberOfOutputColumns,customFiles,paramValues,useImaginary) - % Top-level function for processing custom layers for all the - % contrasts. + % Top-level function for processing custom layers for all the contrasts outputs = cell(numberOfContrasts,2); subRoughs = zeros(numberOfContrasts,1); - bulkOuts = bulkOutValues(contrastBulkOuts); - for i = 1:numberOfContrasts % Choose which custom file is associated with this contrast functionHandle = customFiles{contrastCustomFiles(i)}; - bulkIn = bulkInValues(contrastBulkIns(i)); output1 = zeros(1, numberOfOutputColumns); coder.varsize('output1',[10000 numberOfOutputColumns],[1 1]); @@ -21,11 +17,11 @@ coder.varsize('output2',[10000 numberOfOutputColumns],[1 1]); if isnan(str2double(functionHandle)) - [output1, subRoughs(i)] = callMatlabFunction(functionHandle, paramValues, bulkIn, bulkOuts, i, 1); - [output2, ~] = callMatlabFunction(functionHandle, paramValues, bulkIn, bulkOuts, i, 2); + [output1, subRoughs(i)] = callMatlabFunction(functionHandle, paramValues, bulkIns(i), bulkOuts, i, 1); + [output2, ~] = callMatlabFunction(functionHandle, paramValues, bulkIns(i), bulkOuts, i, 2); else - [output1, subRoughs(i)] = callCppFunction(functionHandle, paramValues, bulkIn, bulkOuts, i-1, 0); - [output2, ~] = callCppFunction(functionHandle, paramValues, bulkIn, bulkOuts, i-1, 1); + [output1, subRoughs(i)] = callCppFunction(functionHandle, paramValues, bulkIns(i), bulkOuts, i-1, 0); + [output2, ~] = callCppFunction(functionHandle, paramValues, bulkIns(i), bulkOuts, i-1, 1); end % If SLD is real, add dummy imaginary column diff --git a/targetFunctions/+normalTF/normalReflectivity.m b/targetFunctions/+normalTF/normalReflectivity.m index 7538ce2f4..873a8e98a 100644 --- a/targetFunctions/+normalTF/normalReflectivity.m +++ b/targetFunctions/+normalTF/normalReflectivity.m @@ -9,15 +9,13 @@ % custom layers, with an additional core custom XY calculation. % Extract parameters from problemStruct - [numberOfContrasts, geometry, contrastBackgroundIndices, contrastQzshiftIndices,... - contrastScalefactorIndices, contrastBulkInIndices, contrastBulkOutIndices,... - contrastResolutionIndices, ~, backgroundParamValues, qzshiftValues,... - scalefactorValues, bulkInValues, bulkOutValues, resolutionParamValues,... - ~, dataPresent, nParams, paramValues, resample, contrastBackgroundTypes,... - contrastBackgroundActions, contrastResolutionTypes, contrastCustomFiles,... - useImaginary, repeatLayers, data, dataLimits, simulationLimits, ... - contrastLayersIndices, layersDetails, customFiles, ~... - ] = extractProblemParams(problemStruct); + [numberOfContrasts, geometry, contrastBackgroundIndices,... + contrastResolutionIndices, ~, backgroundParamValues, resolutionParamValues,... + qzshifts, scalefactors, bulkIns, bulkOuts, ~, dataPresent, nParams,... + paramValues, resample, contrastBackgroundTypes, contrastBackgroundActions,... + contrastResolutionTypes, contrastCustomFiles, useImaginary, repeatLayers,... + data, dataLimits, simulationLimits, contrastLayersIndices, layersDetails,... + customFiles, ~] = extractProblemParams(problemStruct); calcSld = controls.calcSldDuringFit; parallel = controls.parallel; @@ -48,14 +46,6 @@ slds{i} = zeros(1, 3); end - % Extract the relevant parameter values for this contrast from the - % input arrays. We need to determine which values of the data shifts, - % scalefactors, and bulk contrasts are associated with this contrast. - [qzshifts,scalefactors,bulkIns,bulkOuts] = backSort(... - contrastQzshiftIndices,contrastScalefactorIndices,... - contrastBulkInIndices,contrastBulkOutIndices,... - qzshiftValues,scalefactorValues,bulkInValues,bulkOutValues); - switch lower(problemStruct.modelType) case coderEnums.modelTypes.StandardLayers @@ -85,18 +75,15 @@ % Process the custom models numberOfOutputColumns = 6; [contrastLayers,subRoughs] = normalTF.processCustomFunction(... - contrastBulkInIndices,contrastBulkOutIndices,... - bulkInValues,bulkOutValues,contrastCustomFiles,... - numberOfContrasts,numberOfOutputColumns,customFiles,... - paramValues,useImaginary); + bulkIns,bulkOuts,contrastCustomFiles,numberOfContrasts,... + numberOfOutputColumns,customFiles,paramValues,useImaginary); case coderEnums.modelTypes.CustomXY % Process the custom models numberOfOutputColumns = 3; - [slds,subRoughs] = normalTF.processCustomFunction( ... - contrastBulkInIndices,contrastBulkOutIndices,bulkInValues,... - bulkOutValues,contrastCustomFiles,numberOfContrasts,... + [slds,subRoughs] = normalTF.processCustomFunction(... + bulkIns,bulkOuts,contrastCustomFiles,numberOfContrasts,... numberOfOutputColumns,customFiles,paramValues,useImaginary); otherwise diff --git a/targetFunctions/+normalTF/processCustomFunction.m b/targetFunctions/+normalTF/processCustomFunction.m index ab73b20e1..28015c88d 100644 --- a/targetFunctions/+normalTF/processCustomFunction.m +++ b/targetFunctions/+normalTF/processCustomFunction.m @@ -1,26 +1,22 @@ -function [outputs,subRoughs] = processCustomFunction(contrastBulkIns,contrastBulkOuts,... - bulkInValues,bulkOutValues,contrastCustomFiles,numberOfContrasts,numberOfOutputColumns,customFiles,paramValues,useImaginary) +function [outputs,subRoughs] = processCustomFunction(bulkIns,bulkOuts,... + contrastCustomFiles,numberOfContrasts,numberOfOutputColumns,customFiles,paramValues,useImaginary) - % Top-level function for processing custom layers for all the - % contrasts. + % Top-level function for processing custom layers for all the contrasts outputs = cell(numberOfContrasts,1); subRoughs = zeros(numberOfContrasts,1); - bulkOuts = bulkOutValues(contrastBulkOuts); - for i = 1:numberOfContrasts % TODO - the ambition is for parfor here, but would fail for Matlab and Python CM's.. % Choose which custom file is associated with this contrast functionHandle = customFiles{contrastCustomFiles(i)}; - bulkIn = bulkInValues(contrastBulkIns(i)); output = zeros(1, numberOfOutputColumns); coder.varsize('output',[10000 numberOfOutputColumns],[1 1]); if isnan(str2double(functionHandle)) - [output, subRoughs(i)] = callMatlabFunction(functionHandle, paramValues, bulkIn, bulkOuts, i, 0); + [output, subRoughs(i)] = callMatlabFunction(functionHandle, paramValues, bulkIns(i), bulkOuts, i, 0); else - [output, subRoughs(i)] = callCppFunction(functionHandle, paramValues, bulkIn, bulkOuts, i-1, -1); + [output, subRoughs(i)] = callCppFunction(functionHandle, paramValues, bulkIns(i), bulkOuts, i-1, -1); end % If SLD is real, add dummy imaginary column diff --git a/targetFunctions/common/backSort.m b/targetFunctions/common/backSort.m deleted file mode 100644 index 236a30d7a..000000000 --- a/targetFunctions/common/backSort.m +++ /dev/null @@ -1,25 +0,0 @@ -function [qzshifts,scalefactors,bulkIns,bulkOuts] = backSort(qzshiftIndices,scalefactorIndices,bulkInIndices,bulkOutIndices,qzshiftValues,scalefactorValues,bulkInValues,bulkOutValues) - % Distributes the background and shift values among the different contrasts - % - % INPUTS: - % * qzshiftIndices: Indices of the qzshift values associated with each contrast - % * scalefactorIndices: Indices of the scalefactor values associated with each contrast - % * bulkInIndices: Indices of the BulkIn values associated with each contrast - % * bulkOutIndices: Indices of the BulkOut values associated with each contrast - % * qzshiftValues: List of all qzshift values - % * scalefactorValues: List of all scalefactor values - % * bulkInValues: List of all bulk In values - % * bulkOutValues: List of all bulk Out values - % - % OUTPUTS: - % * qzshifts: qzshift value for each contrast - % * scalefactors: scalefactor value for each contrast - % * bulkIns: bulk In value for each contrast - % * bulkOuts: bulk Out value for each contrast - - qzshifts = qzshiftValues(qzshiftIndices)'; - scalefactors = scalefactorValues(scalefactorIndices)'; - bulkIns = bulkInValues(bulkInIndices)'; - bulkOuts = bulkOutValues(bulkOutIndices)'; - -end diff --git a/targetFunctions/common/extractProblemParams.m b/targetFunctions/common/extractProblemParams.m index 578175097..b7a1dce57 100644 --- a/targetFunctions/common/extractProblemParams.m +++ b/targetFunctions/common/extractProblemParams.m @@ -1,5 +1,5 @@ -function [numberOfContrasts, geometry, contrastBackgroundParams, contrastQzshifts, contrastScalefactors, contrastBulkIns, contrastBulkOuts,... -contrastResolutionParams, contrastDomainRatios, backgroundParams, qzshifts, scalefactors, bulkIns, bulkOuts, resolutionParams,... +function [numberOfContrasts, geometry, contrastBackgroundParams,... +contrastResolutionParams, contrastDomainRatios, backgroundParams, resolutionParams, qzshifts, scalefactors, bulkIns, bulkOuts,... domainRatios, dataPresent, nParams, params, resample, contrastBackgroundTypes, contrastBackgroundActions, contrastResolutionTypes,... contrastCustomFiles, useImaginary, repeatLayers, data, dataLimits, simulationLimits, contrastLayers, layersDetails, customFiles, domainContrastLayers] = extractProblemParams(problemStruct) @@ -8,17 +8,11 @@ contrastBackgroundParams = problemStruct.contrastBackgroundParams; contrastBackgroundTypes = problemStruct.contrastBackgroundTypes; contrastBackgroundActions = problemStruct.contrastBackgroundActions; -contrastScalefactors = problemStruct.contrastScalefactors; -contrastBulkIns = problemStruct.contrastBulkIns; -contrastBulkOuts = problemStruct.contrastBulkOuts; contrastResolutionParams = problemStruct.contrastResolutionParams; contrastResolutionTypes = problemStruct.contrastResolutionTypes; contrastDomainRatios = problemStruct.contrastDomainRatios; contrastCustomFiles = problemStruct.contrastCustomFiles; backgroundParams = problemStruct.backgroundParams; -scalefactors = problemStruct.scalefactors; -bulkIns = problemStruct.bulkIns; -bulkOuts = problemStruct.bulkOuts; resolutionParams = problemStruct.resolutionParams; domainRatios = problemStruct.domainRatios; dataPresent = problemStruct.dataPresent; @@ -38,6 +32,20 @@ % qzshifts are not included as a parameter in RAT, so we set up dummy % values for the reflectivity calculation contrastQzshifts = ones(1,problemStruct.numberOfContrasts); -qzshifts = 0.0; +qzshiftValues = 0.0; + +contrastScalefactors = problemStruct.contrastScalefactors; +contrastBulkIns = problemStruct.contrastBulkIns; +contrastBulkOuts = problemStruct.contrastBulkOuts; + +scalefactorValues = problemStruct.scalefactors; +bulkInValues = problemStruct.bulkIns; +bulkOutValues = problemStruct.bulkOuts; + +% Find the actual values from the indices given in each contrast +qzshifts = qzshiftValues(contrastQzshifts)'; +scalefactors = scalefactorValues(contrastScalefactors)'; +bulkIns = bulkInValues(contrastBulkIns)'; +bulkOuts = bulkOutValues(contrastBulkOuts)'; end diff --git a/tests/domainsTFReflectivityCalculation/testDomainsReflectivityCalculations.m b/tests/domainsTFReflectivityCalculation/testDomainsReflectivityCalculations.m index dab22b565..f9d6fe27b 100644 --- a/tests/domainsTFReflectivityCalculation/testDomainsReflectivityCalculations.m +++ b/tests/domainsTFReflectivityCalculation/testDomainsReflectivityCalculations.m @@ -253,24 +253,25 @@ function testCheckIndices(testCase) end function testExtractProblemParams(testCase) - [numberOfContrasts, geometry, contrastBackgroundParams, ~, contrastScalefactors, contrastBulkIns, contrastBulkOuts,... - contrastResolutionParams, contrastDomainRatios, backgroundParams, ~, scalefactors, bulkIns, bulkOuts, resolutionParams, domainRatios,... - dataPresent, nParams, params, resample, backgroundTypes, backgroundActions, resolutionTypes, contrastCustomFiles, useImaginary,... - repeatLayers, data, dataLimits, simulationLimits, contrastLayers, layersDetails, customFiles, domainContrastLayers] = extractProblemParams(testCase.problemStruct); + [numberOfContrasts, geometry, contrastBackgroundParams, contrastResolutionParams, contrastDomainRatios, backgroundParams, resolutionParams,... + ~, scalefactors, bulkIns, bulkOuts, domainRatios, dataPresent, nParams, params, resample, backgroundTypes, backgroundActions, resolutionTypes,... + contrastCustomFiles, useImaginary, repeatLayers, data, dataLimits, simulationLimits, contrastLayers, layersDetails, customFiles, domainContrastLayers... + ] = extractProblemParams(testCase.problemStruct); + + testScalefactors = testCase.problemStruct.scalefactors(testCase.problemStruct.contrastScalefactors)'; + testBulkIns = testCase.problemStruct.bulkIns(testCase.problemStruct.contrastBulkIns)'; + testBulkOuts = testCase.problemStruct.bulkOuts(testCase.problemStruct.contrastBulkOuts)'; testCase.verifyEqual(numberOfContrasts, testCase.problemStruct.numberOfContrasts, 'RelTol', testCase.tolerance, 'AbsTol', testCase.absTolerance); testCase.verifyEqual(geometry, testCase.problemStruct.geometry, 'RelTol', testCase.tolerance, 'AbsTol', testCase.absTolerance); testCase.verifyEqual(contrastBackgroundParams, testCase.problemStruct.contrastBackgroundParams, 'RelTol', testCase.tolerance, 'AbsTol', testCase.absTolerance); - testCase.verifyEqual(contrastScalefactors, testCase.problemStruct.contrastScalefactors, 'RelTol', testCase.tolerance, 'AbsTol', testCase.absTolerance); - testCase.verifyEqual(contrastBulkIns, testCase.problemStruct.contrastBulkIns, 'RelTol', testCase.tolerance, 'AbsTol', testCase.absTolerance); - testCase.verifyEqual(contrastBulkOuts, testCase.problemStruct.contrastBulkOuts, 'RelTol', testCase.tolerance, 'AbsTol', testCase.absTolerance); testCase.verifyEqual(contrastResolutionParams, testCase.problemStruct.contrastResolutionParams, 'RelTol', testCase.tolerance, 'AbsTol', testCase.absTolerance); testCase.verifyEqual(contrastDomainRatios, testCase.problemStruct.contrastDomainRatios, 'RelTol', testCase.tolerance, 'AbsTol', testCase.absTolerance); testCase.verifyEqual(backgroundParams, testCase.problemStruct.backgroundParams, 'RelTol', testCase.tolerance, 'AbsTol', testCase.absTolerance); - testCase.verifyEqual(scalefactors, testCase.problemStruct.scalefactors, 'RelTol', testCase.tolerance, 'AbsTol', testCase.absTolerance); - testCase.verifyEqual(bulkIns, testCase.problemStruct.bulkIns, 'RelTol', testCase.tolerance, 'AbsTol', testCase.absTolerance); - testCase.verifyEqual(bulkOuts, testCase.problemStruct.bulkOuts, 'RelTol', testCase.tolerance, 'AbsTol', testCase.absTolerance); testCase.verifyEqual(resolutionParams, testCase.problemStruct.resolutionParams, 'RelTol', testCase.tolerance, 'AbsTol', testCase.absTolerance); + testCase.verifyEqual(scalefactors, testScalefactors, 'RelTol', testCase.tolerance, 'AbsTol', testCase.absTolerance); + testCase.verifyEqual(bulkIns, testBulkIns, 'RelTol', testCase.tolerance, 'AbsTol', testCase.absTolerance); + testCase.verifyEqual(bulkOuts, testBulkOuts, 'RelTol', testCase.tolerance, 'AbsTol', testCase.absTolerance); testCase.verifyEqual(domainRatios, testCase.problemStruct.domainRatios, 'RelTol', testCase.tolerance, 'AbsTol', testCase.absTolerance); testCase.verifyEqual(dataPresent, testCase.problemStruct.dataPresent, 'RelTol', testCase.tolerance, 'AbsTol', testCase.absTolerance); testCase.verifyEqual(nParams, length(testCase.problemStruct.params), 'RelTol', testCase.tolerance, 'AbsTol', testCase.absTolerance); diff --git a/tests/normalTFReflectivityCalculation/testReflectivityCalculations.m b/tests/normalTFReflectivityCalculation/testReflectivityCalculations.m index e73ebd9f1..cd7ea2fe7 100644 --- a/tests/normalTFReflectivityCalculation/testReflectivityCalculations.m +++ b/tests/normalTFReflectivityCalculation/testReflectivityCalculations.m @@ -267,24 +267,25 @@ function testCheckIndices(testCase) end function testExtractProblemParams(testCase) - [numberOfContrasts, geometry, contrastBackgroundParams, ~, contrastScalefactors, contrastBulkIns, contrastBulkOuts,... - contrastResolutionParams, contrastDomainRatios, backgroundParams, ~, scalefactors, bulkIns, bulkOuts, resolutionParams, domainRatios,... - dataPresent, nParams, params, resample, backgroundTypes, backgroundActions, resolutionTypes, contrastCustomFiles, useImaginary,... - repeatLayers, data, dataLimits, simulationLimits, contrastLayers, layersDetails, customFiles, domainContrastLayers] = extractProblemParams(testCase.problemStruct); + [numberOfContrasts, geometry, contrastBackgroundParams, contrastResolutionParams, contrastDomainRatios, backgroundParams, resolutionParams,... + ~, scalefactors, bulkIns, bulkOuts, domainRatios, dataPresent, nParams, params, resample, backgroundTypes, backgroundActions, resolutionTypes,... + contrastCustomFiles, useImaginary, repeatLayers, data, dataLimits, simulationLimits, contrastLayers, layersDetails, customFiles, domainContrastLayers... + ] = extractProblemParams(testCase.problemStruct); + + testScalefactors = testCase.problemStruct.scalefactors(testCase.problemStruct.contrastScalefactors)'; + testBulkIns = testCase.problemStruct.bulkIns(testCase.problemStruct.contrastBulkIns)'; + testBulkOuts = testCase.problemStruct.bulkOuts(testCase.problemStruct.contrastBulkOuts)'; testCase.verifyEqual(numberOfContrasts, testCase.problemStruct.numberOfContrasts, 'RelTol', testCase.tolerance, 'AbsTol', testCase.absTolerance); testCase.verifyEqual(geometry, testCase.problemStruct.geometry, 'RelTol', testCase.tolerance, 'AbsTol', testCase.absTolerance); testCase.verifyEqual(contrastBackgroundParams, testCase.problemStruct.contrastBackgroundParams, 'RelTol', testCase.tolerance, 'AbsTol', testCase.absTolerance); - testCase.verifyEqual(contrastScalefactors, testCase.problemStruct.contrastScalefactors, 'RelTol', testCase.tolerance, 'AbsTol', testCase.absTolerance); - testCase.verifyEqual(contrastBulkIns, testCase.problemStruct.contrastBulkIns, 'RelTol', testCase.tolerance, 'AbsTol', testCase.absTolerance); - testCase.verifyEqual(contrastBulkOuts, testCase.problemStruct.contrastBulkOuts, 'RelTol', testCase.tolerance, 'AbsTol', testCase.absTolerance); testCase.verifyEqual(contrastResolutionParams, testCase.problemStruct.contrastResolutionParams, 'RelTol', testCase.tolerance, 'AbsTol', testCase.absTolerance); testCase.verifyEqual(contrastDomainRatios, testCase.problemStruct.contrastDomainRatios, 'RelTol', testCase.tolerance, 'AbsTol', testCase.absTolerance); testCase.verifyEqual(backgroundParams, testCase.problemStruct.backgroundParams, 'RelTol', testCase.tolerance, 'AbsTol', testCase.absTolerance); - testCase.verifyEqual(scalefactors, testCase.problemStruct.scalefactors, 'RelTol', testCase.tolerance, 'AbsTol', testCase.absTolerance); - testCase.verifyEqual(bulkIns, testCase.problemStruct.bulkIns, 'RelTol', testCase.tolerance, 'AbsTol', testCase.absTolerance); - testCase.verifyEqual(bulkOuts, testCase.problemStruct.bulkOuts, 'RelTol', testCase.tolerance, 'AbsTol', testCase.absTolerance); testCase.verifyEqual(resolutionParams, testCase.problemStruct.resolutionParams, 'RelTol', testCase.tolerance, 'AbsTol', testCase.absTolerance); + testCase.verifyEqual(scalefactors, testScalefactors, 'RelTol', testCase.tolerance, 'AbsTol', testCase.absTolerance); + testCase.verifyEqual(bulkIns, testBulkIns, 'RelTol', testCase.tolerance, 'AbsTol', testCase.absTolerance); + testCase.verifyEqual(bulkOuts, testBulkOuts, 'RelTol', testCase.tolerance, 'AbsTol', testCase.absTolerance); testCase.verifyEqual(domainRatios, testCase.problemStruct.domainRatios, 'RelTol', testCase.tolerance, 'AbsTol', testCase.absTolerance); testCase.verifyEqual(dataPresent, testCase.problemStruct.dataPresent, 'RelTol', testCase.tolerance, 'AbsTol', testCase.absTolerance); testCase.verifyEqual(nParams, length(testCase.problemStruct.params), 'RelTol', testCase.tolerance, 'AbsTol', testCase.absTolerance); diff --git a/tests/testCommonFunctions/backSortInputs.mat b/tests/testCommonFunctions/backSortInputs.mat deleted file mode 100644 index adff8d7ebcce55081e1c4f393fe72efdea41194f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 268 zcmeZu4DoSvQZUssQ1EpO(M`+DN!3vZ$Vn_o%P-2cQV4Jk_w+L}(NSTc0RWLNLGBL3-HC8Y(Ffvpi5-`93qo*%Fklg~r6>}aZGccvGv6(3x zWjxZuBXFSW$n(Za3Z^qFS(mCF<>9Gu*v820Brh#i+vD-fkTFu>+X}lozic>OB)eTY z&Ur-0;m+@}*G=z_o872fbKm&&<*!;6zJ1mb8YTN#Ie%F!d^G=W^0{|@b{X#L{)I1l b8$DO-u2S@WzMa>uH(Ect$;_bLui^{<-`rRj diff --git a/tests/testCommonFunctions/backSortOutputs.mat b/tests/testCommonFunctions/backSortOutputs.mat deleted file mode 100644 index 24e6d08b30e510f57520e29fb2b2776240120fd2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 219 zcmeZu4DoSvQZUssQ1EpO(M`+DN!3vZ$Vn_o%P-2cQV4Jk_w+L}(NSTc0RWLNLGBLF>u~aZJFfvpi5-`93qo*%FkR1%f6>}aZCnTI;NHSA+ z)^JJT0M}Dvr=t!g)&kF`PZOCkO~kl>=_Z@Qo!@1zo8BKcyJ5JXf&bh5zscv``PpTB cKeeTH_2os;W!6uk;@RKLNatrb6(qg`09Hjq=Kufz diff --git a/tests/testCommonFunctions/testCommonFunctions.m b/tests/testCommonFunctions/testCommonFunctions.m index 82b94e663..2b996c61b 100644 --- a/tests/testCommonFunctions/testCommonFunctions.m +++ b/tests/testCommonFunctions/testCommonFunctions.m @@ -2,8 +2,6 @@ classdef testCommonFunctions < matlab.unittest.TestCase properties - backSortInputs; - backSortOutputs; chiSquaredInputs; chiSquaredOutputs; shiftDataInputs; @@ -72,13 +70,6 @@ function addDataPath(testCase) path = fullfile(getappdata(0, 'root'), 'tests', 'testCommonFunctions'); testCase.applyFixture(PathFixture(path)) end - - function loadBackSort(testCase) - inputs = load('backSortInputs.mat'); - outputs = load('backSortOutputs.mat'); - testCase.backSortInputs = inputs.inputs; - testCase.backSortOutputs = outputs.outputs; - end function loadChiSquared(testCase) inputs = load('chiSquaredInputs.mat'); From 8ace65182e3a882dc24a2f4456478371c77fbc78 Mon Sep 17 00:00:00 2001 From: Paul Sharp <44529197+DrPaulSharp@users.noreply.github.com> Date: Fri, 27 Jun 2025 14:09:38 +0100 Subject: [PATCH 11/16] Adds routine "coreCustomXYCalculation" --- .../+domainsTF/domainsReflectivity.m | 88 +++++++------------ .../+domainsTF/processCustomFunction.m | 13 +-- .../+normalTF/coreCustomXYCalculation.m | 23 +++++ .../+normalTF/normalReflectivity.m | 29 +++--- 4 files changed, 83 insertions(+), 70 deletions(-) create mode 100644 targetFunctions/+normalTF/coreCustomXYCalculation.m diff --git a/targetFunctions/+domainsTF/domainsReflectivity.m b/targetFunctions/+domainsTF/domainsReflectivity.m index e7288f04c..829e44051 100644 --- a/targetFunctions/+domainsTF/domainsReflectivity.m +++ b/targetFunctions/+domainsTF/domainsReflectivity.m @@ -97,26 +97,17 @@ case coderEnums.modelTypes.CustomLayers numberOfOutputColumns = 6; - [contrastLayers,subRoughs] = domainsTF.processCustomFunction(... - bulkIns,bulkOuts,contrastCustomFiles,numberOfContrasts,... - numberOfOutputColumns,customFiles,paramValues,useImaginary); - - for i = 1:size(contrastLayers,1) - contrastLayers1{i} = contrastLayers{i,1}; - contrastLayers2{i} = contrastLayers{i,2}; - end + [contrastLayers1,contrastLayers2,subRoughs... + ] = domainsTF.processCustomFunction(bulkIns,bulkOuts,... + contrastCustomFiles,numberOfContrasts,numberOfOutputColumns,... + customFiles,paramValues,useImaginary); case coderEnums.modelTypes.CustomXY numberOfOutputColumns = 3; - [slds,subRoughs] = domainsTF.processCustomFunction(... + [slds1,slds2,subRoughs] = domainsTF.processCustomFunction(... bulkIns,bulkOuts,contrastCustomFiles,numberOfContrasts,... numberOfOutputColumns,customFiles,paramValues,useImaginary); - - for i = 1:size(slds,1) - slds1{i} = slds{i,1}; - slds2{i} = slds{i,2}; - end otherwise @@ -189,18 +180,15 @@ simulationLimits{i},contrastBackgroundTypes{i},... contrastResolutionTypes{i},customFiles,numSimulationPoints); - [reflectivity{i},simulation{i},shiftedData{i},sldProfiles{i},... - layers{i},resampledLayers{i},chis(i)... - ] = contrastLayersCalculation(bulkIns(i),bulkOuts(i),... + [reflectivity{i},simulation{i},shiftedData{i},backgrounds{i},... + resolutions{i},sldProfiles{i},layers{i},resampledLayers{i},... + chis(i)] = contrastLayersCalculation(bulkIns(i),bulkOuts(i),... domainRatios(i),inputShiftedData,simulationXData,dataIndices,... inputResolution,inputBackground,repeatLayers(i),... contrastBackgroundActions{i},nParams,parallel,... resampleMinAngle,resampleNPoints,resample(i),... geometry,subRoughs(i),calcSld,contrastLayers1{i},... contrastLayers2{i}); - - backgrounds{i} = inputBackground; - resolutions{i} = inputResolution; end @@ -217,18 +205,15 @@ simulationLimits{i},contrastBackgroundTypes{i},... contrastResolutionTypes{i},customFiles,numSimulationPoints); - [reflectivity{i},simulation{i},shiftedData{i},sldProfiles{i},... - layers{i},resampledLayers{i},chis(i)... - ] = contrastLayersCalculation(bulkIns(i),bulkOuts(i),... + [reflectivity{i},simulation{i},shiftedData{i},backgrounds{i},... + resolutions{i},sldProfiles{i},layers{i},resampledLayers{i},... + chis(i)] = contrastLayersCalculation(bulkIns(i),bulkOuts(i),... domainRatios(i),inputShiftedData,simulationXData,dataIndices,... inputResolution,inputBackground,repeatLayers(i),... contrastBackgroundActions{i},nParams,parallel,resampleMinAngle,... resampleNPoints,resample(i),geometry,subRoughs(i),calcSld,... contrastLayers1{i},contrastLayers2{i}); - backgrounds{i} = inputBackground; - resolutions{i} = inputResolution; - end end @@ -264,15 +249,14 @@ end -function [reflectivity,simulation,shiftedData,sldProfile,layers,... - resampledLayers,chi] = contrastLayersCalculation(bulkIn,bulkOut,... - domainRatio,shiftedData,simulationXData,dataIndices,resolution,... - background,repeatLayers,backgroundAction,nParams,parallel,... +function [reflectivity,simulation,shiftedData,background,resolution,... + sldProfile,layers,resampledLayers,chi] = contrastLayersCalculation(... + bulkIn,bulkOut,domainRatio,shiftedData,simulationXData,dataIndices,... + resolution,background,repeatLayers,backgroundAction,nParams,parallel,... resampleMinAngle,resampleNPoints,resample,geometry,roughness,calcSld,... contrastLayers1,contrastLayers2) - % Call the core layers calculation - need to do this once for each - % domain + % Call the core layers calculation once for each domain [reflectivity1,simulation1,~,sldProfile1,layers1,resampledLayers1... ] = normalTF.coreLayersCalculation(contrastLayers1,roughness,geometry,... bulkIn,bulkOut,resample,calcSld,shiftedData,simulationXData,dataIndices,... @@ -304,36 +288,32 @@ bulkIn,bulkOut,domainRatio,shiftedData,simulationXData,dataIndices,... resolution,background,backgroundAction,nParams,parallel,... resampleMinAngle,resampleNPoints,roughness,sld1,sld2) - - % Resample the sld profiles - sldProfile1 = sld1(:,[1,2]); - sldProfileIm1 = sld1(:,[1,3]); - - sldProfile2 = sld2(:,[1,2]); - sldProfileIm2 = sld2(:,[1,3]); - - layers1 = resampleLayers(sldProfile1,sldProfileIm1,resampleMinAngle,resampleNPoints); - layers2 = resampleLayers(sldProfile2,sldProfileIm2,resampleMinAngle,resampleNPoints); - - reflectivityType = 'standardAbeles'; - [reflectivity1,simulation1] = callReflectivity(bulkIn,bulkOut,simulationXData,... - dataIndices,1,layers1,roughness,resolution,parallel,reflectivityType); - [reflectivity2,simulation2] = callReflectivity(bulkIn,bulkOut,simulationXData,... - dataIndices,1,layers2,roughness,resolution,parallel,reflectivityType); - - [reflectivity1,simulation1,~] = applyBackgroundCorrection(... - reflectivity1,simulation1,shiftedData,background,backgroundAction); - [reflectivity2,simulation2,shiftedData] = applyBackgroundCorrection(... - reflectivity2,simulation2,shiftedData,background,backgroundAction); + % Call the core custom XY calculation once for each domain + [reflectivity1,simulation1,~,... + sldProfile1,layers1,resampledLayers1... + ] = normalTF.coreCustomXYCalculation(bulkIn,bulkOut,... + shiftedData,simulationXData,dataIndices,... + resolution,background,backgroundAction,... + parallel,resampleMinAngle,resampleNPoints,roughness,sld1); + + [reflectivity2,simulation2,shiftedData,... + sldProfile2,layers2,resampledLayers2... + ] = normalTF.coreCustomXYCalculation(bulkIn,bulkOut,... + shiftedData,simulationXData,dataIndices,... + resolution,background,backgroundAction,... + parallel,resampleMinAngle,resampleNPoints,roughness,sld2); + % Calculate the average reflectivities [reflectivity,simulation] = domainsTF.averageReflectivity(... reflectivity1,reflectivity2,simulation1,simulation2,domainRatio); + % Get an overall chi-squared for the new averaged curve chi = chiSquared(shiftedData,reflectivity,nParams); + % Store returned values for this contrast in the output arrays sldProfile = {sldProfile1, sldProfile2}; layers = {layers1, layers2}; - resampledLayers = {layers1, layers2}; + resampledLayers = {resampledLayers1, resampledLayers2}; end diff --git a/targetFunctions/+domainsTF/processCustomFunction.m b/targetFunctions/+domainsTF/processCustomFunction.m index 2d5968951..05c83a2ed 100644 --- a/targetFunctions/+domainsTF/processCustomFunction.m +++ b/targetFunctions/+domainsTF/processCustomFunction.m @@ -1,8 +1,9 @@ -function [outputs,subRoughs] = processCustomFunction(bulkIns,bulkOuts,... +function [outputs1,outputs2,subRoughs] = processCustomFunction(bulkIns,bulkOuts,... contrastCustomFiles,numberOfContrasts,numberOfOutputColumns,customFiles,paramValues,useImaginary) % Top-level function for processing custom layers for all the contrasts - outputs = cell(numberOfContrasts,2); + outputs1 = cell(numberOfContrasts,1); + outputs2 = cell(numberOfContrasts,1); subRoughs = zeros(numberOfContrasts,1); for i = 1:numberOfContrasts @@ -26,11 +27,11 @@ % If SLD is real, add dummy imaginary column if ~useImaginary - outputs{i,1} = [output1(:,1:2) zeros(size(output1, 1), 1) output1(:,3:end)]; - outputs{i,2} = [output2(:,1:2) zeros(size(output2, 1), 1) output2(:,3:end)]; + outputs1{i} = [output1(:,1:2) zeros(size(output1, 1), 1) output1(:,3:end)]; + outputs2{i} = [output2(:,1:2) zeros(size(output2, 1), 1) output2(:,3:end)]; else - outputs{i,1} = output1; - outputs{i,2} = output2; + outputs1{i} = output1; + outputs2{i} = output2; end end diff --git a/targetFunctions/+normalTF/coreCustomXYCalculation.m b/targetFunctions/+normalTF/coreCustomXYCalculation.m new file mode 100644 index 000000000..8da541168 --- /dev/null +++ b/targetFunctions/+normalTF/coreCustomXYCalculation.m @@ -0,0 +1,23 @@ +function [reflectivity,simulation,shiftedData,sldProfile,layers,... + resampledLayers] = coreCustomXYCalculation(bulkIn,bulkOut,... + shiftedData,simulationXData,dataIndices,resolution,background,... + backgroundAction,parallel,resampleMinAngle,resampleNPoints,... + roughness,sld) + + % Resample the layers - always required for a custom XY calculation + sldProfile = sld(:,[1,2]); + sldProfileIm = sld(:,[1,3]); + resampledLayers = resampleLayers(sldProfile,sldProfileIm,... + resampleMinAngle,resampleNPoints); + + layers = resampledLayers; + + reflectivityType = 'standardAbeles'; + [reflectivity,simulation] = callReflectivity(bulkIn,bulkOut,... + simulationXData,dataIndices,1,layers,roughness,resolution,parallel,... + reflectivityType); + + [reflectivity,simulation,shiftedData] = applyBackgroundCorrection(... + reflectivity,simulation,shiftedData,background,backgroundAction); + +end \ No newline at end of file diff --git a/targetFunctions/+normalTF/normalReflectivity.m b/targetFunctions/+normalTF/normalReflectivity.m index 873a8e98a..be6cf32bd 100644 --- a/targetFunctions/+normalTF/normalReflectivity.m +++ b/targetFunctions/+normalTF/normalReflectivity.m @@ -107,17 +107,22 @@ simulationLimits{i},contrastBackgroundTypes{i},... contrastResolutionTypes{i},customFiles,numSimulationPoints); - [reflectivity{i},simulation{i},shiftedData{i},... - sldProfiles{i},layers{i},resampledLayers{i},chis(i)... - ] = customXYContrastCalculation(bulkIns(i),bulkOuts(i),... + [outputReflectivity,simulation{i},outputShiftedData,... + sldProfiles{i},layers{i},resampledLayers{i}... + ] = normalTF.coreCustomXYCalculation(bulkIns(i),bulkOuts(i),... inputShiftedData,simulationXData,dataIndices,... inputResolution,inputBackground,contrastBackgroundActions{i},... - nParams,parallel,resampleMinAngle,resampleNPoints,... - subRoughs(i),slds{i}); + parallel,resampleMinAngle,resampleNPoints,subRoughs(i),slds{i}); backgrounds{i} = inputBackground; resolutions{i} = inputResolution; + chis(i) = chiSquared(outputShiftedData,outputReflectivity,nParams); + + shiftedData{i} = outputShiftedData; + reflectivity{i} = outputReflectivity; + + end else @@ -133,16 +138,20 @@ simulationLimits{i},contrastBackgroundTypes{i},... contrastResolutionTypes{i},customFiles,numSimulationPoints); - [reflectivity{i},simulation{i},shiftedData{i},... - sldProfiles{i},layers{i},resampledLayers{i},chis(i)... - ] = customXYContrastCalculation(bulkIns(i),bulkOuts(i),... + [outputReflectivity,simulation{i},outputShiftedData,... + sldProfiles{i},layers{i},resampledLayers{i}... + ] = normalTF.coreCustomXYCalculation(bulkIns(i),bulkOuts(i),... inputShiftedData,simulationXData,dataIndices,... inputResolution,inputBackground,contrastBackgroundActions{i},... - nParams,parallel,resampleMinAngle,resampleNPoints,... - subRoughs(i),slds{i}); + parallel,resampleMinAngle,resampleNPoints,subRoughs(i),slds{i}); backgrounds{i} = inputBackground; resolutions{i} = inputResolution; + + chis(i) = chiSquared(outputShiftedData,outputReflectivity,nParams); + + shiftedData{i} = outputShiftedData; + reflectivity{i} = outputReflectivity; end end From 95501864988b73866501cb742e377e7afd627f19 Mon Sep 17 00:00:00 2001 From: Paul Sharp <44529197+DrPaulSharp@users.noreply.github.com> Date: Fri, 27 Jun 2025 20:30:27 +0100 Subject: [PATCH 12/16] Moves chi squared into core reflectivity calculations --- .../+domainsTF/domainsReflectivity.m | 124 +++++++++--------- .../+domainsTF/processCustomFunction.m | 4 +- .../+normalTF/coreCustomXYCalculation.m | 14 +- .../+normalTF/coreLayersCalculation.m | 10 +- .../+normalTF/normalReflectivity.m | 115 +++++----------- .../common/costFunctions/chiSquared.m | 11 +- 6 files changed, 112 insertions(+), 166 deletions(-) diff --git a/targetFunctions/+domainsTF/domainsReflectivity.m b/targetFunctions/+domainsTF/domainsReflectivity.m index 829e44051..0d728ad68 100644 --- a/targetFunctions/+domainsTF/domainsReflectivity.m +++ b/targetFunctions/+domainsTF/domainsReflectivity.m @@ -1,6 +1,7 @@ function [qzshifts,scalefactors,bulkIns,bulkOuts,chis,reflectivity,... simulation,shiftedData,backgrounds,resolutions,domainSldProfiles,... - domainLayers,domainResampledLayers,subRoughs] = domainsReflectivity(problemStruct,controls) + domainLayers,domainResampledLayers,subRoughs... + ] = domainsReflectivity(problemStruct,controls) % This is the main domains reflectivity calculation. % It extracts the required parameters for the contrasts % from the input arrays, then passes the main calculation to @@ -34,6 +35,7 @@ shiftedData = cell(numberOfContrasts,1); backgrounds = cell(numberOfContrasts,1); resolutions = cell(numberOfContrasts,1); + domainSldProfiles = cell(numberOfContrasts,2); domainLayers = cell(numberOfContrasts,2); domainResampledLayers = cell(numberOfContrasts,2); @@ -44,18 +46,23 @@ contrastLayers1 = cell(numberOfContrasts,1); contrastLayers2 = cell(numberOfContrasts,1); - slds1 = cell(numberOfContrasts,1); - slds2 = cell(numberOfContrasts,1); + + contrastSlds1 = cell(numberOfContrasts,1); + contrastSlds2 = cell(numberOfContrasts,1); for i = 1:numberOfContrasts + backgrounds{i} = zeros(1,3); + resolutions{i} = zeros(1,2); + contrastLayers1{i} = zeros(1,6); contrastLayers2{i} = zeros(1,6); - slds1{i} = zeros(1,3); - slds2{i} = zeros(1,3); + contrastSlds1{i} = zeros(1,3); + contrastSlds2{i} = zeros(1,3); domainLayers{i,1} = zeros(1,6); domainLayers{i,2} = zeros(1,6); + domainResampledLayers{i,1} = zeros(1,6); domainResampledLayers{i,2} = zeros(1,6); @@ -64,9 +71,10 @@ contrastDomainRatioIndices(i) = 1; end domainRatios(i) = domainRatioValues(contrastDomainRatioIndices(i)); - end +%% Obtain model specific parameters + switch lower(problemStruct.modelType) case coderEnums.modelTypes.StandardLayers @@ -105,7 +113,7 @@ case coderEnums.modelTypes.CustomXY numberOfOutputColumns = 3; - [slds1,slds2,subRoughs] = domainsTF.processCustomFunction(... + [contrastSlds1,contrastSlds2,subRoughs] = domainsTF.processCustomFunction(... bulkIns,bulkOuts,contrastCustomFiles,numberOfContrasts,... numberOfOutputColumns,customFiles,paramValues,useImaginary); @@ -115,13 +123,15 @@ end +%% Run the core calculation for each contrast + if strcmpi(problemStruct.modelType, coderEnums.modelTypes.CustomXY) if strcmpi(parallel, coderEnums.parallelOptions.Contrasts) parfor i = 1:numberOfContrasts - [inputBackground,inputResolution,inputShiftedData,... + [backgrounds{i},resolutions{i},inputShiftedData,... simulationXData,dataIndices... ] = setupCoreReflectivityCalculation(... contrastBackgroundIndices{i},contrastResolutionIndices{i},... @@ -130,13 +140,13 @@ simulationLimits{i},contrastBackgroundTypes{i},... contrastResolutionTypes{i},customFiles,numSimulationPoints); - [reflectivity{i},simulation{i},shiftedData{i},backgrounds{i},... - resolutions{i},sldProfiles{i},layers{i},resampledLayers{i},... + [reflectivity{i},simulation{i},shiftedData{i},... + sldProfiles{i},layers{i},resampledLayers{i},... chis(i)] = contrastCustomXYCalculation(bulkIns(i),... bulkOuts(i),domainRatios(i),inputShiftedData,simulationXData,... - dataIndices,inputResolution,inputBackground,... + dataIndices,backgrounds{i},resolutions{i},... contrastBackgroundActions{i},nParams,parallel,resampleMinAngle,... - resampleNPoints,subRoughs(i),slds1{i},slds2{i}); + resampleNPoints,subRoughs(i),contrastSlds1{i},contrastSlds2{i}); end @@ -144,7 +154,7 @@ for i = 1:numberOfContrasts - [inputBackground,inputResolution,inputShiftedData,... + [backgrounds{i},resolutions{i},inputShiftedData,... simulationXData,dataIndices... ] = setupCoreReflectivityCalculation(... contrastBackgroundIndices{i},contrastResolutionIndices{i},... @@ -153,13 +163,13 @@ simulationLimits{i},contrastBackgroundTypes{i},... contrastResolutionTypes{i},customFiles,numSimulationPoints); - [reflectivity{i},simulation{i},shiftedData{i},backgrounds{i},... - resolutions{i},sldProfiles{i},layers{i},resampledLayers{i},... + [reflectivity{i},simulation{i},shiftedData{i},... + sldProfiles{i},layers{i},resampledLayers{i},... chis(i)] = contrastCustomXYCalculation(bulkIns(i),... bulkOuts(i),domainRatios(i),inputShiftedData,simulationXData,... - dataIndices,inputResolution,inputBackground,... + dataIndices,backgrounds{i},resolutions{i},... contrastBackgroundActions{i},nParams,parallel,resampleMinAngle,... - resampleNPoints,subRoughs(i),slds1{i},slds2{i}); + resampleNPoints,subRoughs(i),contrastSlds1{i},contrastSlds2{i}); end @@ -171,7 +181,7 @@ parfor i = 1:numberOfContrasts - [inputBackground,inputResolution,inputShiftedData,... + [backgrounds{i},resolutions{i},inputShiftedData,... simulationXData,dataIndices... ] = setupCoreReflectivityCalculation(... contrastBackgroundIndices{i},contrastResolutionIndices{i},... @@ -180,11 +190,11 @@ simulationLimits{i},contrastBackgroundTypes{i},... contrastResolutionTypes{i},customFiles,numSimulationPoints); - [reflectivity{i},simulation{i},shiftedData{i},backgrounds{i},... - resolutions{i},sldProfiles{i},layers{i},resampledLayers{i},... + [reflectivity{i},simulation{i},shiftedData{i},... + sldProfiles{i},layers{i},resampledLayers{i},... chis(i)] = contrastLayersCalculation(bulkIns(i),bulkOuts(i),... domainRatios(i),inputShiftedData,simulationXData,dataIndices,... - inputResolution,inputBackground,repeatLayers(i),... + backgrounds{i},resolutions{i},repeatLayers(i),... contrastBackgroundActions{i},nParams,parallel,... resampleMinAngle,resampleNPoints,resample(i),... geometry,subRoughs(i),calcSld,contrastLayers1{i},... @@ -196,7 +206,7 @@ for i = 1:numberOfContrasts - [inputBackground,inputResolution,inputShiftedData,... + [backgrounds{i},resolutions{i},inputShiftedData,... simulationXData,dataIndices... ] = setupCoreReflectivityCalculation(... contrastBackgroundIndices{i},contrastResolutionIndices{i},... @@ -205,11 +215,11 @@ simulationLimits{i},contrastBackgroundTypes{i},... contrastResolutionTypes{i},customFiles,numSimulationPoints); - [reflectivity{i},simulation{i},shiftedData{i},backgrounds{i},... - resolutions{i},sldProfiles{i},layers{i},resampledLayers{i},... + [reflectivity{i},simulation{i},shiftedData{i},... + sldProfiles{i},layers{i},resampledLayers{i},... chis(i)] = contrastLayersCalculation(bulkIns(i),bulkOuts(i),... domainRatios(i),inputShiftedData,simulationXData,dataIndices,... - inputResolution,inputBackground,repeatLayers(i),... + backgrounds{i},resolutions{i},repeatLayers(i),... contrastBackgroundActions{i},nParams,parallel,resampleMinAngle,... resampleNPoints,resample(i),geometry,subRoughs(i),calcSld,... contrastLayers1{i},contrastLayers2{i}); @@ -221,53 +231,45 @@ end for i = 1:numberOfContrasts - - contrastSldProfiles = sldProfiles{i}; - domainSldProfiles{i,1} = contrastSldProfiles{1}; - domainSldProfiles{i,2} = contrastSldProfiles{2}; - - contrastLayerValues = layers{i}; - domainLayers{i,1} = contrastLayerValues{1}; - domainLayers{i,2} = contrastLayerValues{2}; - - contrastResampledLayers = resampledLayers{i}; - domainResampledLayers{i,1} = contrastResampledLayers{1}; - domainResampledLayers{i,2} = contrastResampledLayers{2}; - + for j = 1:2 + domainSldProfiles{i,j} = sldProfiles{i}{j}; + domainLayers{i,j} = layers{i}{j}; + domainResampledLayers{i,j} = resampledLayers{i}{j}; + end end % Remove dummy imaginary column if present if ~useImaginary for i=1:numberOfContrasts - domainLayers{i,1}(:,3) = []; - domainLayers{i,2}(:,3) = []; - domainResampledLayers{i,1}(:,3) = []; - domainResampledLayers{i,2}(:,3) = []; + for j = 1:2 + domainLayers{i,j}(:,3) = []; + domainResampledLayers{i,j}(:,3) = []; + end end end end -function [reflectivity,simulation,shiftedData,background,resolution,... - sldProfile,layers,resampledLayers,chi] = contrastLayersCalculation(... +function [reflectivity,simulation,shiftedData,sldProfile,layers,... + resampledLayers,chi] = contrastLayersCalculation(... bulkIn,bulkOut,domainRatio,shiftedData,simulationXData,dataIndices,... - resolution,background,repeatLayers,backgroundAction,nParams,parallel,... + background,resolution,repeatLayers,backgroundAction,nParams,parallel,... resampleMinAngle,resampleNPoints,resample,geometry,roughness,calcSld,... contrastLayers1,contrastLayers2) % Call the core layers calculation once for each domain - [reflectivity1,simulation1,~,sldProfile1,layers1,resampledLayers1... + [reflectivity1,simulation1,~,sldProfile1,layers1,resampledLayers1,~... ] = normalTF.coreLayersCalculation(contrastLayers1,roughness,geometry,... bulkIn,bulkOut,resample,calcSld,shiftedData,simulationXData,dataIndices,... - repeatLayers,resolution,background,backgroundAction,parallel,... - resampleMinAngle,resampleNPoints); + repeatLayers,background,resolution,backgroundAction,parallel,... + resampleMinAngle,resampleNPoints,nParams); - [reflectivity2,simulation2,shiftedData,sldProfile2,layers2,resampledLayers2... + [reflectivity2,simulation2,shiftedData,sldProfile2,layers2,resampledLayers2,~... ] = normalTF.coreLayersCalculation(contrastLayers2,roughness,geometry,... bulkIn,bulkOut,resample,calcSld,shiftedData,simulationXData,dataIndices,... - repeatLayers,resolution,background,backgroundAction,parallel,... - resampleMinAngle,resampleNPoints); + repeatLayers,background,resolution,backgroundAction,parallel,... + resampleMinAngle,resampleNPoints,nParams); % Calculate the average reflectivities [reflectivity,simulation] = domainsTF.averageReflectivity(... @@ -283,26 +285,26 @@ end -function [reflectivity,simulation,shiftedData,background,resolution,... - sldProfile,layers,resampledLayers,chi] = contrastCustomXYCalculation(... +function [reflectivity,simulation,shiftedData,sldProfile,layers,... + resampledLayers,chi] = contrastCustomXYCalculation(... bulkIn,bulkOut,domainRatio,shiftedData,simulationXData,dataIndices,... - resolution,background,backgroundAction,nParams,parallel,... - resampleMinAngle,resampleNPoints,roughness,sld1,sld2) + background,resolution,backgroundAction,nParams,parallel,... + resampleMinAngle,resampleNPoints,roughness,contrastSld1,contrastSld2) % Call the core custom XY calculation once for each domain [reflectivity1,simulation1,~,... - sldProfile1,layers1,resampledLayers1... + sldProfile1,layers1,resampledLayers1,~... ] = normalTF.coreCustomXYCalculation(bulkIn,bulkOut,... shiftedData,simulationXData,dataIndices,... - resolution,background,backgroundAction,... - parallel,resampleMinAngle,resampleNPoints,roughness,sld1); + background,resolution,backgroundAction,... + parallel,resampleMinAngle,resampleNPoints,roughness,contrastSld1,nParams); [reflectivity2,simulation2,shiftedData,... - sldProfile2,layers2,resampledLayers2... + sldProfile2,layers2,resampledLayers2,~... ] = normalTF.coreCustomXYCalculation(bulkIn,bulkOut,... shiftedData,simulationXData,dataIndices,... - resolution,background,backgroundAction,... - parallel,resampleMinAngle,resampleNPoints,roughness,sld2); + background,resolution,backgroundAction,... + parallel,resampleMinAngle,resampleNPoints,roughness,contrastSld2,nParams); % Calculate the average reflectivities [reflectivity,simulation] = domainsTF.averageReflectivity(... diff --git a/targetFunctions/+domainsTF/processCustomFunction.m b/targetFunctions/+domainsTF/processCustomFunction.m index 05c83a2ed..df835e218 100644 --- a/targetFunctions/+domainsTF/processCustomFunction.m +++ b/targetFunctions/+domainsTF/processCustomFunction.m @@ -12,10 +12,10 @@ functionHandle = customFiles{contrastCustomFiles(i)}; output1 = zeros(1, numberOfOutputColumns); - coder.varsize('output1',[10000 numberOfOutputColumns],[1 1]); + coder.varsize('output1',[10000 numberOfOutputColumns], [1 1]); output2 = zeros(1, numberOfOutputColumns); - coder.varsize('output2',[10000 numberOfOutputColumns],[1 1]); + coder.varsize('output2',[10000 numberOfOutputColumns], [1 1]); if isnan(str2double(functionHandle)) [output1, subRoughs(i)] = callMatlabFunction(functionHandle, paramValues, bulkIns(i), bulkOuts, i, 1); diff --git a/targetFunctions/+normalTF/coreCustomXYCalculation.m b/targetFunctions/+normalTF/coreCustomXYCalculation.m index 8da541168..174ebe70d 100644 --- a/targetFunctions/+normalTF/coreCustomXYCalculation.m +++ b/targetFunctions/+normalTF/coreCustomXYCalculation.m @@ -1,12 +1,12 @@ function [reflectivity,simulation,shiftedData,sldProfile,layers,... - resampledLayers] = coreCustomXYCalculation(bulkIn,bulkOut,... - shiftedData,simulationXData,dataIndices,resolution,background,... + resampledLayers,chi] = coreCustomXYCalculation(bulkIn,bulkOut,... + shiftedData,simulationXData,dataIndices,background,resolution,... backgroundAction,parallel,resampleMinAngle,resampleNPoints,... - roughness,sld) + roughness,contrastSld,nParams) % Resample the layers - always required for a custom XY calculation - sldProfile = sld(:,[1,2]); - sldProfileIm = sld(:,[1,3]); + sldProfile = contrastSld(:,[1,2]); + sldProfileIm = contrastSld(:,[1,3]); resampledLayers = resampleLayers(sldProfile,sldProfileIm,... resampleMinAngle,resampleNPoints); @@ -20,4 +20,6 @@ [reflectivity,simulation,shiftedData] = applyBackgroundCorrection(... reflectivity,simulation,shiftedData,background,backgroundAction); -end \ No newline at end of file + chi = chiSquared(shiftedData,reflectivity,nParams); + +end diff --git a/targetFunctions/+normalTF/coreLayersCalculation.m b/targetFunctions/+normalTF/coreLayersCalculation.m index 41828b82a..44801cb27 100644 --- a/targetFunctions/+normalTF/coreLayersCalculation.m +++ b/targetFunctions/+normalTF/coreLayersCalculation.m @@ -1,8 +1,8 @@ -function [reflectivity,simulation,shiftedData,sldProfile,layers,resampledLayers] = ... +function [reflectivity,simulation,shiftedData,sldProfile,layers,resampledLayers,chi] = ... coreLayersCalculation(contrastLayers,roughness,geometry,bulkIn,bulkOut,resample,... - calcSld,shiftedData,simulationXData,dataIndices,repeatLayers,resolution,... - background,backgroundAction,parallelPoints,resampleMinAngle,... - resampleNPoints) + calcSld,shiftedData,simulationXData,dataIndices,repeatLayers,... + background,resolution,backgroundAction,parallelPoints,resampleMinAngle,... + resampleNPoints,nParams) % This is the main reflectivity calculation for all layers models in the % normal target function. @@ -60,4 +60,6 @@ % Apply background correction [reflectivity,simulation,shiftedData] = applyBackgroundCorrection(reflectivity,simulation,shiftedData,background,backgroundAction); +chi = chiSquared(shiftedData,reflectivity,nParams); + end diff --git a/targetFunctions/+normalTF/normalReflectivity.m b/targetFunctions/+normalTF/normalReflectivity.m index be6cf32bd..65b2c828a 100644 --- a/targetFunctions/+normalTF/normalReflectivity.m +++ b/targetFunctions/+normalTF/normalReflectivity.m @@ -37,15 +37,17 @@ resampledLayers = cell(numberOfContrasts,1); contrastLayers = cell(numberOfContrasts,1); - for i = 1:numberOfContrasts - contrastLayers{i} = zeros(1, 6); - end + contrastSlds = cell(numberOfContrasts,1); - slds = cell(numberOfContrasts,1); for i = 1:numberOfContrasts - slds{i} = zeros(1, 3); + backgrounds{i} = zeros(1,3); + resolutions{i} = zeros(1,2); + contrastLayers{i} = zeros(1,6); + contrastSlds{i} = zeros(1,3); end +%% Obtain model specific parameters + switch lower(problemStruct.modelType) case coderEnums.modelTypes.StandardLayers @@ -82,7 +84,7 @@ % Process the custom models numberOfOutputColumns = 3; - [slds,subRoughs] = normalTF.processCustomFunction(... + [contrastSlds,subRoughs] = normalTF.processCustomFunction(... bulkIns,bulkOuts,contrastCustomFiles,numberOfContrasts,... numberOfOutputColumns,customFiles,paramValues,useImaginary); @@ -91,6 +93,8 @@ coderException(coderEnums.errorCodes.invalidOption, 'The model type "%s" is not supported', problemStruct.modelType); end + +%% Run the core calculation for each contrast if strcmpi(problemStruct.modelType, coderEnums.modelTypes.CustomXY) @@ -98,7 +102,7 @@ parfor i = 1:numberOfContrasts - [inputBackground,inputResolution,inputShiftedData,... + [backgrounds{i},resolutions{i},inputShiftedData,... simulationXData,dataIndices... ] = setupCoreReflectivityCalculation(... contrastBackgroundIndices{i},contrastResolutionIndices{i},... @@ -107,21 +111,12 @@ simulationLimits{i},contrastBackgroundTypes{i},... contrastResolutionTypes{i},customFiles,numSimulationPoints); - [outputReflectivity,simulation{i},outputShiftedData,... - sldProfiles{i},layers{i},resampledLayers{i}... + [reflectivity{i},simulation{i},shiftedData{i},... + sldProfiles{i},layers{i},resampledLayers{i},chis(i)... ] = normalTF.coreCustomXYCalculation(bulkIns(i),bulkOuts(i),... inputShiftedData,simulationXData,dataIndices,... - inputResolution,inputBackground,contrastBackgroundActions{i},... - parallel,resampleMinAngle,resampleNPoints,subRoughs(i),slds{i}); - - backgrounds{i} = inputBackground; - resolutions{i} = inputResolution; - - chis(i) = chiSquared(outputShiftedData,outputReflectivity,nParams); - - shiftedData{i} = outputShiftedData; - reflectivity{i} = outputReflectivity; - + backgrounds{i},resolutions{i},contrastBackgroundActions{i},... + parallel,resampleMinAngle,resampleNPoints,subRoughs(i),contrastSlds{i},nParams); end @@ -129,7 +124,7 @@ for i = 1:numberOfContrasts - [inputBackground,inputResolution,inputShiftedData,... + [backgrounds{i},resolutions{i},inputShiftedData,... simulationXData,dataIndices... ] = setupCoreReflectivityCalculation(... contrastBackgroundIndices{i},contrastResolutionIndices{i},... @@ -138,20 +133,12 @@ simulationLimits{i},contrastBackgroundTypes{i},... contrastResolutionTypes{i},customFiles,numSimulationPoints); - [outputReflectivity,simulation{i},outputShiftedData,... - sldProfiles{i},layers{i},resampledLayers{i}... + [reflectivity{i},simulation{i},shiftedData{i},... + sldProfiles{i},layers{i},resampledLayers{i},chis(i)... ] = normalTF.coreCustomXYCalculation(bulkIns(i),bulkOuts(i),... inputShiftedData,simulationXData,dataIndices,... - inputResolution,inputBackground,contrastBackgroundActions{i},... - parallel,resampleMinAngle,resampleNPoints,subRoughs(i),slds{i}); - - backgrounds{i} = inputBackground; - resolutions{i} = inputResolution; - - chis(i) = chiSquared(outputShiftedData,outputReflectivity,nParams); - - shiftedData{i} = outputShiftedData; - reflectivity{i} = outputReflectivity; + backgrounds{i},resolutions{i},contrastBackgroundActions{i},... + parallel,resampleMinAngle,resampleNPoints,subRoughs(i),contrastSlds{i},nParams); end end @@ -162,7 +149,7 @@ parfor i = 1:numberOfContrasts - [inputBackground,inputResolution,inputShiftedData,... + [backgrounds{i},resolutions{i},inputShiftedData,... simulationXData,dataIndices... ] = setupCoreReflectivityCalculation(... contrastBackgroundIndices{i},contrastResolutionIndices{i},... @@ -171,22 +158,14 @@ simulationLimits{i},contrastBackgroundTypes{i},... contrastResolutionTypes{i},customFiles,numSimulationPoints); - [outputReflectivity,simulation{i},outputShiftedData,... - sldProfiles{i},layers{i},resampledLayers{i}... + [reflectivity{i},simulation{i},shiftedData{i},... + sldProfiles{i},layers{i},resampledLayers{i},chis(i)... ] = normalTF.coreLayersCalculation(contrastLayers{i},... subRoughs(i),geometry,bulkIns(i),bulkOuts(i),resample(i),... calcSld,inputShiftedData,simulationXData,dataIndices,... - repeatLayers(i),inputResolution,inputBackground,... + repeatLayers(i),backgrounds{i},resolutions{i},... contrastBackgroundActions{i},parallel,... - resampleMinAngle,resampleNPoints); - - backgrounds{i} = inputBackground; - resolutions{i} = inputResolution; - - chis(i) = chiSquared(outputShiftedData,outputReflectivity,nParams); - - shiftedData{i} = outputShiftedData; - reflectivity{i} = outputReflectivity; + resampleMinAngle,resampleNPoints,nParams); end @@ -194,7 +173,7 @@ for i = 1:numberOfContrasts - [inputBackground,inputResolution,inputShiftedData,... + [backgrounds{i},resolutions{i},inputShiftedData,... simulationXData,dataIndices... ] = setupCoreReflectivityCalculation(... contrastBackgroundIndices{i},contrastResolutionIndices{i},... @@ -203,22 +182,14 @@ simulationLimits{i},contrastBackgroundTypes{i},... contrastResolutionTypes{i},customFiles,numSimulationPoints); - [outputReflectivity,simulation{i},outputShiftedData,... - sldProfiles{i},layers{i},resampledLayers{i}... + [reflectivity{i},simulation{i},shiftedData{i},... + sldProfiles{i},layers{i},resampledLayers{i},chis(i)... ] = normalTF.coreLayersCalculation(contrastLayers{i},... subRoughs(i),geometry,bulkIns(i),bulkOuts(i),resample(i),... calcSld,inputShiftedData,simulationXData,dataIndices,... - repeatLayers(i),inputResolution,inputBackground,... + repeatLayers(i),backgrounds{i},resolutions{i},... contrastBackgroundActions{i},parallel,... - resampleMinAngle,resampleNPoints); - - backgrounds{i} = inputBackground; - resolutions{i} = inputResolution; - - chis(i) = chiSquared(outputShiftedData,outputReflectivity,nParams); - - shiftedData{i} = outputShiftedData; - reflectivity{i} = outputReflectivity; + resampleMinAngle,resampleNPoints,nParams); end end @@ -233,29 +204,3 @@ end end - -function [reflectivity,simulation,shiftedData,sldProfile,layers,... - resampledLayers,chi] = customXYContrastCalculation(bulkIn,bulkOut,... - shiftedData,simulationXData,dataIndices,resolution,background,... - backgroundAction,nParams,parallel,resampleMinAngle,resampleNPoints,... - roughness,sld) - - % Resample the layers - sldProfile = sld(:,[1,2]); - sldProfileIm = sld(:,[1,3]); - resampledLayers = resampleLayers(sldProfile,sldProfileIm,... - resampleMinAngle,resampleNPoints); - - layers = resampledLayers; - - reflectivityType = 'standardAbeles'; - [reflectivity,simulation] = callReflectivity(bulkIn,bulkOut,... - simulationXData,dataIndices,1,layers,roughness,resolution,parallel,... - reflectivityType); - - [reflectivity,simulation,shiftedData] = applyBackgroundCorrection(... - reflectivity,simulation,shiftedData,background,backgroundAction); - - chi = chiSquared(shiftedData,reflectivity,nParams); - -end diff --git a/targetFunctions/common/costFunctions/chiSquared.m b/targetFunctions/common/costFunctions/chiSquared.m index d77d7869c..9d64478ac 100644 --- a/targetFunctions/common/costFunctions/chiSquared.m +++ b/targetFunctions/common/costFunctions/chiSquared.m @@ -7,15 +7,10 @@ eb = shiftedData(:,3); fit = reflectivity(:,2); - N = max(size(y)); - if N <= nParams - N = (nParams + 1); - end + N = max([size(y), nParams + 1]); terms = ((y-fit)./eb).^2; - n = find(terms == Inf); - if ~isempty(n) - terms(n) = 0; - end + terms(terms==Inf)=0; + chi2 = sum(terms)/(N-nParams); end \ No newline at end of file From b4f877afd005cf6c5ea187df8cf89b4780556018 Mon Sep 17 00:00:00 2001 From: Paul Sharp <44529197+DrPaulSharp@users.noreply.github.com> Date: Fri, 27 Jun 2025 21:07:53 +0100 Subject: [PATCH 13/16] Refactors targetFunctions directory layout --- addPaths.m | 3 ++- targetFunctions/+domainsTF/domainsReflectivity.m | 15 ++++++++------- targetFunctions/+normalTF/normalReflectivity.m | 8 ++++---- .../callReflectivity}/coreCustomXYCalculation.m | 0 .../callReflectivity}/coreLayersCalculation.m | 0 .../{ => setupReflectivity}/constructBackground.m | 0 .../{ => setupReflectivity}/constructResolution.m | 0 .../{ => setupReflectivity}/makeSimulationRange.m | 0 .../setupCoreReflectivityCalculation.m | 0 .../common/{ => setupReflectivity}/shiftData.m | 0 .../makeDomainsInputsAndOutputs.m | 6 +++--- .../testDomainsReflectivityCalculations.m | 2 +- .../makeInputsAndOutputs.m | 8 ++++---- 13 files changed, 22 insertions(+), 20 deletions(-) rename targetFunctions/{+normalTF => common/callReflectivity}/coreCustomXYCalculation.m (100%) rename targetFunctions/{+normalTF => common/callReflectivity}/coreLayersCalculation.m (100%) rename targetFunctions/common/{ => setupReflectivity}/constructBackground.m (100%) rename targetFunctions/common/{ => setupReflectivity}/constructResolution.m (100%) rename targetFunctions/common/{ => setupReflectivity}/makeSimulationRange.m (100%) rename targetFunctions/{ => common/setupReflectivity}/setupCoreReflectivityCalculation.m (100%) rename targetFunctions/common/{ => setupReflectivity}/shiftData.m (100%) diff --git a/addPaths.m b/addPaths.m index 50c087666..71733825a 100644 --- a/addPaths.m +++ b/addPaths.m @@ -47,7 +47,8 @@ fullfile(root,'targetFunctions','common','makeSLDProfiles'); fullfile(root,'targetFunctions','common','reflectivityCalculations','abeles'); fullfile(root,'targetFunctions','common','resampleLayers'); - fullfile(root,'targetFunctions','common','resolutionFunctions','simpleGaussian'); + fullfile(root,'targetFunctions','common','resolutionFunctions','simpleGaussian'); + fullfile(root,'targetFunctions','common','setupReflectivity'); fullfile(root,'utilities'); fullfile(root,'utilities','misc'); diff --git a/targetFunctions/+domainsTF/domainsReflectivity.m b/targetFunctions/+domainsTF/domainsReflectivity.m index 0d728ad68..41d730329 100644 --- a/targetFunctions/+domainsTF/domainsReflectivity.m +++ b/targetFunctions/+domainsTF/domainsReflectivity.m @@ -113,9 +113,10 @@ case coderEnums.modelTypes.CustomXY numberOfOutputColumns = 3; - [contrastSlds1,contrastSlds2,subRoughs] = domainsTF.processCustomFunction(... - bulkIns,bulkOuts,contrastCustomFiles,numberOfContrasts,... - numberOfOutputColumns,customFiles,paramValues,useImaginary); + [contrastSlds1,contrastSlds2,subRoughs... + ] = domainsTF.processCustomFunction(bulkIns,bulkOuts,... + contrastCustomFiles,numberOfContrasts,numberOfOutputColumns,... + customFiles,paramValues,useImaginary); otherwise @@ -260,13 +261,13 @@ % Call the core layers calculation once for each domain [reflectivity1,simulation1,~,sldProfile1,layers1,resampledLayers1,~... - ] = normalTF.coreLayersCalculation(contrastLayers1,roughness,geometry,... + ] = coreLayersCalculation(contrastLayers1,roughness,geometry,... bulkIn,bulkOut,resample,calcSld,shiftedData,simulationXData,dataIndices,... repeatLayers,background,resolution,backgroundAction,parallel,... resampleMinAngle,resampleNPoints,nParams); [reflectivity2,simulation2,shiftedData,sldProfile2,layers2,resampledLayers2,~... - ] = normalTF.coreLayersCalculation(contrastLayers2,roughness,geometry,... + ] = coreLayersCalculation(contrastLayers2,roughness,geometry,... bulkIn,bulkOut,resample,calcSld,shiftedData,simulationXData,dataIndices,... repeatLayers,background,resolution,backgroundAction,parallel,... resampleMinAngle,resampleNPoints,nParams); @@ -294,14 +295,14 @@ % Call the core custom XY calculation once for each domain [reflectivity1,simulation1,~,... sldProfile1,layers1,resampledLayers1,~... - ] = normalTF.coreCustomXYCalculation(bulkIn,bulkOut,... + ] = coreCustomXYCalculation(bulkIn,bulkOut,... shiftedData,simulationXData,dataIndices,... background,resolution,backgroundAction,... parallel,resampleMinAngle,resampleNPoints,roughness,contrastSld1,nParams); [reflectivity2,simulation2,shiftedData,... sldProfile2,layers2,resampledLayers2,~... - ] = normalTF.coreCustomXYCalculation(bulkIn,bulkOut,... + ] = coreCustomXYCalculation(bulkIn,bulkOut,... shiftedData,simulationXData,dataIndices,... background,resolution,backgroundAction,... parallel,resampleMinAngle,resampleNPoints,roughness,contrastSld2,nParams); diff --git a/targetFunctions/+normalTF/normalReflectivity.m b/targetFunctions/+normalTF/normalReflectivity.m index 65b2c828a..76e57ef28 100644 --- a/targetFunctions/+normalTF/normalReflectivity.m +++ b/targetFunctions/+normalTF/normalReflectivity.m @@ -113,7 +113,7 @@ [reflectivity{i},simulation{i},shiftedData{i},... sldProfiles{i},layers{i},resampledLayers{i},chis(i)... - ] = normalTF.coreCustomXYCalculation(bulkIns(i),bulkOuts(i),... + ] = coreCustomXYCalculation(bulkIns(i),bulkOuts(i),... inputShiftedData,simulationXData,dataIndices,... backgrounds{i},resolutions{i},contrastBackgroundActions{i},... parallel,resampleMinAngle,resampleNPoints,subRoughs(i),contrastSlds{i},nParams); @@ -135,7 +135,7 @@ [reflectivity{i},simulation{i},shiftedData{i},... sldProfiles{i},layers{i},resampledLayers{i},chis(i)... - ] = normalTF.coreCustomXYCalculation(bulkIns(i),bulkOuts(i),... + ] = coreCustomXYCalculation(bulkIns(i),bulkOuts(i),... inputShiftedData,simulationXData,dataIndices,... backgrounds{i},resolutions{i},contrastBackgroundActions{i},... parallel,resampleMinAngle,resampleNPoints,subRoughs(i),contrastSlds{i},nParams); @@ -160,7 +160,7 @@ [reflectivity{i},simulation{i},shiftedData{i},... sldProfiles{i},layers{i},resampledLayers{i},chis(i)... - ] = normalTF.coreLayersCalculation(contrastLayers{i},... + ] = coreLayersCalculation(contrastLayers{i},... subRoughs(i),geometry,bulkIns(i),bulkOuts(i),resample(i),... calcSld,inputShiftedData,simulationXData,dataIndices,... repeatLayers(i),backgrounds{i},resolutions{i},... @@ -184,7 +184,7 @@ [reflectivity{i},simulation{i},shiftedData{i},... sldProfiles{i},layers{i},resampledLayers{i},chis(i)... - ] = normalTF.coreLayersCalculation(contrastLayers{i},... + ] = coreLayersCalculation(contrastLayers{i},... subRoughs(i),geometry,bulkIns(i),bulkOuts(i),resample(i),... calcSld,inputShiftedData,simulationXData,dataIndices,... repeatLayers(i),backgrounds{i},resolutions{i},... diff --git a/targetFunctions/+normalTF/coreCustomXYCalculation.m b/targetFunctions/common/callReflectivity/coreCustomXYCalculation.m similarity index 100% rename from targetFunctions/+normalTF/coreCustomXYCalculation.m rename to targetFunctions/common/callReflectivity/coreCustomXYCalculation.m diff --git a/targetFunctions/+normalTF/coreLayersCalculation.m b/targetFunctions/common/callReflectivity/coreLayersCalculation.m similarity index 100% rename from targetFunctions/+normalTF/coreLayersCalculation.m rename to targetFunctions/common/callReflectivity/coreLayersCalculation.m diff --git a/targetFunctions/common/constructBackground.m b/targetFunctions/common/setupReflectivity/constructBackground.m similarity index 100% rename from targetFunctions/common/constructBackground.m rename to targetFunctions/common/setupReflectivity/constructBackground.m diff --git a/targetFunctions/common/constructResolution.m b/targetFunctions/common/setupReflectivity/constructResolution.m similarity index 100% rename from targetFunctions/common/constructResolution.m rename to targetFunctions/common/setupReflectivity/constructResolution.m diff --git a/targetFunctions/common/makeSimulationRange.m b/targetFunctions/common/setupReflectivity/makeSimulationRange.m similarity index 100% rename from targetFunctions/common/makeSimulationRange.m rename to targetFunctions/common/setupReflectivity/makeSimulationRange.m diff --git a/targetFunctions/setupCoreReflectivityCalculation.m b/targetFunctions/common/setupReflectivity/setupCoreReflectivityCalculation.m similarity index 100% rename from targetFunctions/setupCoreReflectivityCalculation.m rename to targetFunctions/common/setupReflectivity/setupCoreReflectivityCalculation.m diff --git a/targetFunctions/common/shiftData.m b/targetFunctions/common/setupReflectivity/shiftData.m similarity index 100% rename from targetFunctions/common/shiftData.m rename to targetFunctions/common/setupReflectivity/shiftData.m diff --git a/tests/domainsTFReflectivityCalculation/makeDomainsInputsAndOutputs.m b/tests/domainsTFReflectivityCalculation/makeDomainsInputsAndOutputs.m index 70477041d..77f48ba14 100644 --- a/tests/domainsTFReflectivityCalculation/makeDomainsInputsAndOutputs.m +++ b/tests/domainsTFReflectivityCalculation/makeDomainsInputsAndOutputs.m @@ -42,7 +42,7 @@ % (c) TF Parameters [qzshifts,scalefactors,bulkIn,bulkOut,chis,reflectivity,simulation,... shiftedData,backgrounds,resolutions,sldProfiles,layers,... - resampledLayers,subRoughs] = domainsTF.standardLayers(problemStruct,controls); + resampledLayers,subRoughs] = domainsTF.domainsReflectivity(problemStruct,controls); TFParams.qzshifts = qzshifts; TFParams.scalefactors = scalefactors; @@ -100,7 +100,7 @@ % (c) TF Parameters [qzshifts,scalefactors,bulkIn,bulkOut,chis,reflectivity,simulation,... shiftedData,backgrounds,resolutions,sldProfiles,layers,... - resampledLayers,subRoughs] = domainsTF.customXY(problemStruct,controls); + resampledLayers,subRoughs] = domainsTF.domainsReflectivity(problemStruct,controls); TFParams.qzshifts = qzshifts; TFParams.scalefactors = scalefactors; @@ -157,7 +157,7 @@ % (c) TF Parameters [qzshifts,scalefactors,bulkIn,bulkOut,chis,reflectivity,simulation,... shiftedData,backgrounds,resolutions,sldProfiles,layers,... - resampledLayers,subRoughs] = domainsTF.customLayers(problemStruct,controls); + resampledLayers,subRoughs] = domainsTF.domainsReflectivity(problemStruct,controls); TFParams.qzshifts = qzshifts; TFParams.scalefactors = scalefactors; diff --git a/tests/domainsTFReflectivityCalculation/testDomainsReflectivityCalculations.m b/tests/domainsTFReflectivityCalculation/testDomainsReflectivityCalculations.m index f9d6fe27b..993aef0ff 100644 --- a/tests/domainsTFReflectivityCalculation/testDomainsReflectivityCalculations.m +++ b/tests/domainsTFReflectivityCalculation/testDomainsReflectivityCalculations.m @@ -18,7 +18,7 @@ end properties (TestParameter) - parallel = {'single', 'points', 'contrasts'} % How the reflectivity calculation is parallelised + parallel = {'single', 'points', 'contrasts'} % How the reflectivity calculation is parallelised useCompiled = {false, true} % Choose either the MATLAB or MEX version end diff --git a/tests/normalTFReflectivityCalculation/makeInputsAndOutputs.m b/tests/normalTFReflectivityCalculation/makeInputsAndOutputs.m index 648b666be..5e00dbb1b 100644 --- a/tests/normalTFReflectivityCalculation/makeInputsAndOutputs.m +++ b/tests/normalTFReflectivityCalculation/makeInputsAndOutputs.m @@ -41,7 +41,7 @@ % (c) TF Parameters [qzshifts,scalefactors,bulkIn,bulkOut,chis,reflectivity,simulation,... shiftedData,backgrounds,resolutions,sldProfiles,layers,... - resampledLayers,subRoughs] = normalTF.customLayers(problemStruct,controls); + resampledLayers,subRoughs] = normalTF.normalReflectivity(problemStruct,controls); TFParams.qzshifts = qzshifts; TFParams.scalefactors = scalefactors; @@ -99,7 +99,7 @@ % (c) TF Parameters [qzshifts,scalefactors,bulkIn,bulkOut,chis,reflectivity,simulation,... shiftedData,backgrounds,resolutions,sldProfiles,layers,... - resampledLayers,subRoughs] = normalTF.customXY(problemStruct,controls); + resampledLayers,subRoughs] = normalTF.normalReflectivity(problemStruct,controls); TFParams.qzshifts = qzshifts; TFParams.scalefactors = scalefactors; @@ -157,7 +157,7 @@ % (c) TF Parameters [qzshifts,scalefactors,bulkIn,bulkOut,chis,reflectivity,simulation,... shiftedData,backgrounds,resolutions,sldProfiles,layers,... - resampledLayers,subRoughs] = normalTF.standardLayers(problemStruct,controls); + resampledLayers,subRoughs] = normalTF.normalReflectivity(problemStruct,controls); TFParams.qzshifts = qzshifts; TFParams.scalefactors = scalefactors; @@ -215,7 +215,7 @@ % (c) TF Parameters [qzshifts,scalefactors,bulkIn,bulkOut,chis,reflectivity,simulation,... shiftedData,backgrounds,resolutions,sldProfiles,layers,... - resampledLayers,subRoughs] = normalTF.customLayers(problemStruct,controls); + resampledLayers,subRoughs] = normalTF.normalReflectivity(problemStruct,controls); TFParams.qzshifts = qzshifts; TFParams.scalefactors = scalefactors; From bae2abe48425f50500f01a2aa2b3b87016761ef5 Mon Sep 17 00:00:00 2001 From: Paul Sharp <44529197+DrPaulSharp@users.noreply.github.com> Date: Mon, 30 Jun 2025 13:11:30 +0100 Subject: [PATCH 14/16] Moves removal of shiftedData columns to "setupCoreReflectivityCalculation --- .../+domainsTF/domainsReflectivity.m | 19 ++++++++++-------- .../+normalTF/normalReflectivity.m | 17 ++++++++-------- .../applyBackgroundCorrection.m | 5 +---- .../setupCoreReflectivityCalculation.m | 11 ++++++---- .../applyBackgroundCorrectionInputs.mat | Bin 5607 -> 4499 bytes 5 files changed, 28 insertions(+), 24 deletions(-) diff --git a/targetFunctions/+domainsTF/domainsReflectivity.m b/targetFunctions/+domainsTF/domainsReflectivity.m index 41d730329..52c738b02 100644 --- a/targetFunctions/+domainsTF/domainsReflectivity.m +++ b/targetFunctions/+domainsTF/domainsReflectivity.m @@ -51,6 +51,9 @@ contrastSlds2 = cell(numberOfContrasts,1); for i = 1:numberOfContrasts + + shiftedData{i} = zeros(1,3); + backgrounds{i} = zeros(1,3); resolutions{i} = zeros(1,2); @@ -132,7 +135,7 @@ parfor i = 1:numberOfContrasts - [backgrounds{i},resolutions{i},inputShiftedData,... + [backgrounds{i},resolutions{i},shiftedData{i},... simulationXData,dataIndices... ] = setupCoreReflectivityCalculation(... contrastBackgroundIndices{i},contrastResolutionIndices{i},... @@ -144,7 +147,7 @@ [reflectivity{i},simulation{i},shiftedData{i},... sldProfiles{i},layers{i},resampledLayers{i},... chis(i)] = contrastCustomXYCalculation(bulkIns(i),... - bulkOuts(i),domainRatios(i),inputShiftedData,simulationXData,... + bulkOuts(i),domainRatios(i),shiftedData{i},simulationXData,... dataIndices,backgrounds{i},resolutions{i},... contrastBackgroundActions{i},nParams,parallel,resampleMinAngle,... resampleNPoints,subRoughs(i),contrastSlds1{i},contrastSlds2{i}); @@ -155,7 +158,7 @@ for i = 1:numberOfContrasts - [backgrounds{i},resolutions{i},inputShiftedData,... + [backgrounds{i},resolutions{i},shiftedData{i},... simulationXData,dataIndices... ] = setupCoreReflectivityCalculation(... contrastBackgroundIndices{i},contrastResolutionIndices{i},... @@ -167,7 +170,7 @@ [reflectivity{i},simulation{i},shiftedData{i},... sldProfiles{i},layers{i},resampledLayers{i},... chis(i)] = contrastCustomXYCalculation(bulkIns(i),... - bulkOuts(i),domainRatios(i),inputShiftedData,simulationXData,... + bulkOuts(i),domainRatios(i),shiftedData{i},simulationXData,... dataIndices,backgrounds{i},resolutions{i},... contrastBackgroundActions{i},nParams,parallel,resampleMinAngle,... resampleNPoints,subRoughs(i),contrastSlds1{i},contrastSlds2{i}); @@ -182,7 +185,7 @@ parfor i = 1:numberOfContrasts - [backgrounds{i},resolutions{i},inputShiftedData,... + [backgrounds{i},resolutions{i},shiftedData{i},... simulationXData,dataIndices... ] = setupCoreReflectivityCalculation(... contrastBackgroundIndices{i},contrastResolutionIndices{i},... @@ -194,7 +197,7 @@ [reflectivity{i},simulation{i},shiftedData{i},... sldProfiles{i},layers{i},resampledLayers{i},... chis(i)] = contrastLayersCalculation(bulkIns(i),bulkOuts(i),... - domainRatios(i),inputShiftedData,simulationXData,dataIndices,... + domainRatios(i),shiftedData{i},simulationXData,dataIndices,... backgrounds{i},resolutions{i},repeatLayers(i),... contrastBackgroundActions{i},nParams,parallel,... resampleMinAngle,resampleNPoints,resample(i),... @@ -207,7 +210,7 @@ for i = 1:numberOfContrasts - [backgrounds{i},resolutions{i},inputShiftedData,... + [backgrounds{i},resolutions{i},shiftedData{i},... simulationXData,dataIndices... ] = setupCoreReflectivityCalculation(... contrastBackgroundIndices{i},contrastResolutionIndices{i},... @@ -219,7 +222,7 @@ [reflectivity{i},simulation{i},shiftedData{i},... sldProfiles{i},layers{i},resampledLayers{i},... chis(i)] = contrastLayersCalculation(bulkIns(i),bulkOuts(i),... - domainRatios(i),inputShiftedData,simulationXData,dataIndices,... + domainRatios(i),shiftedData{i},simulationXData,dataIndices,... backgrounds{i},resolutions{i},repeatLayers(i),... contrastBackgroundActions{i},nParams,parallel,resampleMinAngle,... resampleNPoints,resample(i),geometry,subRoughs(i),calcSld,... diff --git a/targetFunctions/+normalTF/normalReflectivity.m b/targetFunctions/+normalTF/normalReflectivity.m index 76e57ef28..c09bd6aaa 100644 --- a/targetFunctions/+normalTF/normalReflectivity.m +++ b/targetFunctions/+normalTF/normalReflectivity.m @@ -40,6 +40,7 @@ contrastSlds = cell(numberOfContrasts,1); for i = 1:numberOfContrasts + shiftedData{i} = zeros(1,3); backgrounds{i} = zeros(1,3); resolutions{i} = zeros(1,2); contrastLayers{i} = zeros(1,6); @@ -102,7 +103,7 @@ parfor i = 1:numberOfContrasts - [backgrounds{i},resolutions{i},inputShiftedData,... + [backgrounds{i},resolutions{i},shiftedData{i},... simulationXData,dataIndices... ] = setupCoreReflectivityCalculation(... contrastBackgroundIndices{i},contrastResolutionIndices{i},... @@ -114,7 +115,7 @@ [reflectivity{i},simulation{i},shiftedData{i},... sldProfiles{i},layers{i},resampledLayers{i},chis(i)... ] = coreCustomXYCalculation(bulkIns(i),bulkOuts(i),... - inputShiftedData,simulationXData,dataIndices,... + shiftedData{i},simulationXData,dataIndices,... backgrounds{i},resolutions{i},contrastBackgroundActions{i},... parallel,resampleMinAngle,resampleNPoints,subRoughs(i),contrastSlds{i},nParams); @@ -124,7 +125,7 @@ for i = 1:numberOfContrasts - [backgrounds{i},resolutions{i},inputShiftedData,... + [backgrounds{i},resolutions{i},shiftedData{i},... simulationXData,dataIndices... ] = setupCoreReflectivityCalculation(... contrastBackgroundIndices{i},contrastResolutionIndices{i},... @@ -136,7 +137,7 @@ [reflectivity{i},simulation{i},shiftedData{i},... sldProfiles{i},layers{i},resampledLayers{i},chis(i)... ] = coreCustomXYCalculation(bulkIns(i),bulkOuts(i),... - inputShiftedData,simulationXData,dataIndices,... + shiftedData{i},simulationXData,dataIndices,... backgrounds{i},resolutions{i},contrastBackgroundActions{i},... parallel,resampleMinAngle,resampleNPoints,subRoughs(i),contrastSlds{i},nParams); @@ -149,7 +150,7 @@ parfor i = 1:numberOfContrasts - [backgrounds{i},resolutions{i},inputShiftedData,... + [backgrounds{i},resolutions{i},shiftedData{i},... simulationXData,dataIndices... ] = setupCoreReflectivityCalculation(... contrastBackgroundIndices{i},contrastResolutionIndices{i},... @@ -162,7 +163,7 @@ sldProfiles{i},layers{i},resampledLayers{i},chis(i)... ] = coreLayersCalculation(contrastLayers{i},... subRoughs(i),geometry,bulkIns(i),bulkOuts(i),resample(i),... - calcSld,inputShiftedData,simulationXData,dataIndices,... + calcSld,shiftedData{i},simulationXData,dataIndices,... repeatLayers(i),backgrounds{i},resolutions{i},... contrastBackgroundActions{i},parallel,... resampleMinAngle,resampleNPoints,nParams); @@ -173,7 +174,7 @@ for i = 1:numberOfContrasts - [backgrounds{i},resolutions{i},inputShiftedData,... + [backgrounds{i},resolutions{i},shiftedData{i},... simulationXData,dataIndices... ] = setupCoreReflectivityCalculation(... contrastBackgroundIndices{i},contrastResolutionIndices{i},... @@ -186,7 +187,7 @@ sldProfiles{i},layers{i},resampledLayers{i},chis(i)... ] = coreLayersCalculation(contrastLayers{i},... subRoughs(i),geometry,bulkIns(i),bulkOuts(i),resample(i),... - calcSld,inputShiftedData,simulationXData,dataIndices,... + calcSld,shiftedData{i},simulationXData,dataIndices,... repeatLayers(i),backgrounds{i},resolutions{i},... contrastBackgroundActions{i},parallel,... resampleMinAngle,resampleNPoints,nParams); diff --git a/targetFunctions/common/callReflectivity/applyBackgroundCorrection.m b/targetFunctions/common/callReflectivity/applyBackgroundCorrection.m index ecd92b230..7d7868afd 100644 --- a/targetFunctions/common/callReflectivity/applyBackgroundCorrection.m +++ b/targetFunctions/common/callReflectivity/applyBackgroundCorrection.m @@ -1,4 +1,4 @@ -function [reflectivity,simulation,outputData] = applyBackgroundCorrection(reflectivity,simulation,shiftedData,background,backgroundAction) +function [reflectivity,simulation,shiftedData] = applyBackgroundCorrection(reflectivity,simulation,shiftedData,background,backgroundAction) % Find where the data range lies within the simulation range lowXVals = find(simulation(:,1) == shiftedData(1,1)); @@ -24,7 +24,4 @@ coderException(coderEnums.errorCodes.invalidOption, '"%s" does not represent a valid contrast background action.', backgroundAction); end -% Reduce data to original three columns -outputData = shiftedData(:,1:3); - end diff --git a/targetFunctions/common/setupReflectivity/setupCoreReflectivityCalculation.m b/targetFunctions/common/setupReflectivity/setupCoreReflectivityCalculation.m index 0a505a8ad..9e3eaa8eb 100644 --- a/targetFunctions/common/setupReflectivity/setupCoreReflectivityCalculation.m +++ b/targetFunctions/common/setupReflectivity/setupCoreReflectivityCalculation.m @@ -5,13 +5,16 @@ backgroundType,resolutionType,customFiles,numSimulationPoints) % Apply scale factors and q shifts to the data - shiftedData = shiftData(scalefactor,qzshift,dataPresent,data,dataLimits,simulationLimits,numSimulationPoints); + fullShiftedData = shiftData(scalefactor,qzshift,dataPresent,data,dataLimits,simulationLimits,numSimulationPoints); - [simulationXData, dataIndices] = makeSimulationRange(shiftedData, simulationLimits); + [simulationXData, dataIndices] = makeSimulationRange(fullShiftedData, simulationLimits); background = constructBackground(backgroundType,backgroundParamIndex,... - shiftedData,customFiles,backgroundParams,simulationXData,dataIndices); + fullShiftedData,customFiles,backgroundParams,simulationXData,dataIndices); resolution = constructResolution(resolutionType,resolutionParamIndex,... - shiftedData,customFiles,resolutionParams,simulationXData,dataIndices); + fullShiftedData,customFiles,resolutionParams,simulationXData,dataIndices); + + % Reduce data to original three columns + shiftedData = fullShiftedData(:,1:3); end \ No newline at end of file diff --git a/tests/testCommonFunctions/applyBackgroundCorrectionInputs.mat b/tests/testCommonFunctions/applyBackgroundCorrectionInputs.mat index 2d0698b8185c20d5ea2fea16e6ca90799acfb22a..8fcedc281afe98c699c022bc321b95e7a04413f0 100644 GIT binary patch delta 4437 zcmV-b5vuOzE0ZITG#E{9ZXil^ZXh!-ATcvKFgZFkGaxcBGBuG=BavVQe~b_S00000 z0003=O%DJ700a;K0C=42n0YkSYum@SBSSVK63Uzm88Q>yS0pMW*_0A8wnZhj%tM9@ zN%kfsRK{)0cu15XA(S?;Lnvj+384&UYd=np=e%pR-uL$iU2&$>7<7|e_`2E)9nf2^zV8|L4OY3-Te?_k8(Ui4VaZ@{px<#blV-Ota)3C@=;V*Xy7t6{?OKj$<5a=!c8ofy{g z8&^YgwLaYcb=j$JQPAHn|AL`98ftv<_Fueq9l~tuNck2qaP3BEf1rxe4X9rUW?|-v zg@h+rDT?1?!KB%qS@z>iFy+#D`otv;njJ3Fi4$?~-oAL)%!LT4982ezzY^hxtJk&7-PKu34b)!`Hnj$Y+E_@G+M!v9;neIcZmtoWSx%*IF@Mp6g;Q{nA zPwh*ceE{j$&z7TvG|2G5T&FFkf$$c(mwtFU@C}ZLKjq1Qf3qj!$pzUNKmva6slAyn zby^RN_htecUfk8&HwzM6J+&l7v!Q(COmu#0HWb~?W_9x=!^|^Xy#&P^7|s`ZuJt(w zY&!W1GxBo5QA1^!;+6+b)VJ+Y>d1p;Ils+sQ}W?TPWFyTw*qL*O|?C5R0wy=(8wLR zhfsSE-&Vz2e*`J29MPi;#gOSrEZ-JT3?m%7=Y(j*V8uUi;7ec$jBqBmv@?~0|JMV4 zHF2d7%g{SHAW{ZMO#703SsCblwQsjFDu*iE9t-+dIdDf8K5&lu9T?PpcP&(`0Bfq^ zTaNw;c+b5hFZp^UPagApji?l~TlsZH`fAX{n`c0Hx4TU`hHQhG>7}IJ< zTT~i-C|LsxyYK1lr`Ldo!gF)Sp(ntljT^6NdJ46iDJtpZwQzJXD{#=P4hG{R!cTYA zL3l-q(Pi^`up$!^Tl?#wS1&Gfvr_{sM&8+cXubicbtg9RMLdJCrui^Q;YQd$ENmq5 zxDhCAf6|GTr=Nq?R03xY{W(lY-k|KsYl48pvHF2i%`gg?Lr*zdKt}wT>|jd^*oDpD zKSsWQI48NguZ&xvyyeQ%`+{xoDzBsa#2;<2i2In8+}I9vV-eg9883ldgc~Ow^$Nlq z7=ndIKw&edLcy-JtOE;@#jezxd>6P!Bx(lfJs9;qEuS zAAhNt)REw+RlVq4>7Mv?8uoju*kz?ofn3NNKeIFAfJu&>7Txv^`l7GRm}tHRY~gXK ze`2#H&|bK>Bpy`D(3?B(B$BCpKK`O zU04zfP6r)|pGwBbdmysg9Gj?~1ZpX*%DXn*g0x{awrVmFHdaV(oGQNo4Y|CoA336+ zT5dxLpHeu?J>E2X@cUILb$jS09}x(1f4=mg+dq6@?gC?nisBVu)W-3(Ex3bL)svdD zdTv1H9^fCEb%9-K)Zjv1JXE_7In7)Tv9;CV4x+m6JxnA z$y$KLjPqd7DRWSKB55eHWD0e9MH8Y6CLp$K$59+(3|v+Ext?MGUmdEwm>e}g7S z2%ATQc4$CPGIqInKpm6|Jh%M#f2;oOFL4V@Vgg~<*NYxT6&B^l6ru6w^SLiOt#a^4OvzCEJu>HjcZ7GP`Yb>55 zED5r9*|9xr5^(s@wi#naF%U1UEm{&02I77F%g#1}FtbH-;>asL5WI@Ge_#9XfQxQf z?Lx+BgQT-Fy-bugZ6fuwHVvo7yPJBTu z2Aqb2Up^trtxUCdKJ}xF8V)bcOBA#*(QERXY$KvNR(Xub{f_kSR}lH{W}>;n6+Cv# ziKx#=l`onQk0heomqa}7f1;#@$if4pbhOvIwqzlSjF5Rtm27Dqa<=zpBjfTBV>5R+ z{#-7)^u|Uh%{>bV)>m`)bd zBue<&edN^T5L6dj7n0@bg(j_8GySROkk{?2cI>65=r3O_X8pf?HS&M))!@~Qmw}oY zx{hApvv=+#amE`YX@!d){Ct7(7%!pB;tv5n62>8<0Fcof^zIZ2g7bdu$BAaaP}e7O zPD}7A@a>84|1fkFe_WG35u>s~pkYy$tmG03{1*3XdUuDx#Y!6G>h~~cr;T00|Q-RIYRe%<;hfg=PA`IpD{dGXDI#%>1p)Yf4+&e_#5gZo@D23~M^KR>$y5 zKkb+Ne{^Lnzs@D=T(Zt3{~RunK6iN1XkHJE1t0JJE_wtd7h%t$rIW}ZMNVf%&E_Y! zyl4CG^8m(QxTTnFeIBsR3G1BjPvV63po6smLNlO0z#{s4)HHNODCAs9nuaSYAp^x1 zrr}Ek_NAxbe;;rtHF#&kwGTiZKd3+#>jDz7te7m+3OuvA9ZucPKrzGOqO)2ZgyIYF z9x0WOSCRZaIlBzbm75=O5Ge-C3&Qw(O+FaGhd+8&{g>MBB-<#F1}D0{=~Kh+gSm?> zU!PVg^qB7Jqhpf6#`dp2KqBltz{#yaCV^|I!Cw80f9nu=WQoh{MlAgH^93WItYq_C zL1s7%wvQV=lL>|CW5%aug|32Zq2Q3aNdSnog+xKLFF11~w6>0Tf&_`GRntQNhIew- za_pC3vuF2g)r*S|`#tKY=VliOmZU9&)9`?yC&(WE?gX4geUtGd2k^f{bks?JvQ5MqAbdT^?>4<`EG(k8?V>@(iX-&BQ$5vn+HV*Q) z;)RHc45ky_++eU_+jXUEb~qG8ckYvCh46WnO?qb-fuFCLApc?oZPJ@pgt_mibYFV* z#J6cgAw+JOR~|>7gmoRHmIjd*ytfM5fAt3CY`B&poY9JC*_$n>j?Yk9#MY*#f|8|s zH18@kAIepT6h%|-biWNo>etN!=5~>hKMU{I4AwFfse^CcVOfG&Uq-l!-MNR}e@U}k zYdw~TN~{M2Jp7AMDm{lO=H7L5&X#=1of7x-$juA+5A}kPriDFr!7K~W_bLc;6Yrz1 zqZO>nH@s1k!4{0i_=TrKkyEFr_$c7cb>7-_Bm#mvO)}yfu0f{<)+%aWI2hdZX7TO} zfmXv5n?ZSBh%ZsAP}aE&n_3Svf0YNHhwEqMBT0RZK-nzlrPXf->bNEcJ_8%rjTd9c zXtRWlgfXlO!2+apcZ|Q;a{@?K&H}j$1gJR0JgOYz1fjyB#(af#5GtYJ6Fgu8X_CFF z7)LA6EtNEJcE&;erJcfc_JXf z+;GkqyB#oxBW*LT@xv_RLF4Y7e4rC5VAns#1Gg7xXZ>Qi;bq~pq3`G>uqE4({q)&^ zZfP1ksk#v?bpk>I`k7$|f4+8kESw26WkmgC@B9X_xR>t+6Bz(^HYc9)fR0$%@Co&2 zS5R=o$`ZFA4V_kUV;JLELbC6%VS(lg=s4Dg^ud`2?spEE-2D>^ss!PF+!Pb+n&fBR zBE$rH`3^+s?Zp87Ag67!-VY>&5tt0m%A-Ww;`v00g@ zb7>p<;i)tf`s@mwHkpbj1sEZ5^(4ea4WsP)b_-#x?P=RTf5oFGtmLzX0&ys6@)NH& z$4wMd%t3h?5r>SZ2iz;R5|NT#dBCogIAr-oV5obVh|p}H)Q@Z;YUsc`V+`vF?q28ab?*NE&*yG@`TfB{Q!)CF{tEyA|NrZK zyLG|$V;k&xN9j>|lpduC&PsKW&UbgI delta 5572 zcmV;#6+7yaBj+oSG#FH9bs$e;bRaV^ATc#MFfckaI3O}GGBlA)YOr4B3dxDr1s4GtqOKqEeEfl+1HfVvEd~r(`2C zRmN@1cu15X^N==Uc1wec!*|?+@2n_qx`5J@>ty=UwYv?{%$* z9)rO=k;Y&sx0!moe#875e-t~uydv z^RD&|wm2JWGiwVR#?r#d(QZe#u);aqyn*=#^xLIN_22tb{<6Qz&Y8$|^u61~v)v!; z{igi#_iz{)5o;%_iGbQW`RX@9A|c44KDNLp3PSFc`ASRPgN99ie=16bXo!E2ohtDo z8gyH&D1|5QgC2wO%NLF@&}w~a3qKnJAFN6y3>@*0Mz?N9`3(<0Ewu0Fc*a7Rt#wQd zbsU_hc)v_?hy!2w(K2;X9K1^nv{Q?V2NT&I#&z)rKucC%YS;4s>H=h}h`0oBeJ*-L zjyn;Ci)^G0_9ViAe_@Q1O3*`?(x{;kf+VnTtXzuSN&?U?Hr~^c48El7lRmL2@Y?Cp zOrT9FT;iP)>_=(vEme%Cg6k1zPkp5(P&|fccdeFd%a5U=@XuB?+!Gk0oL5O(dIA~P zFUHfjbjZAei6m{L0~gDdyGC#Zu#Qdfy=2M+^Gk7r!kkQqe+71r`4d?%e?<+=3}pe0 zJ)e_@XEww;xhV?pveR~+yufhoFU%ZErMV8T9o@~dwtOwp&bby1Xo_qUT?wJ~K7O*S+) z%3ThKSLvozc{!+lv+6R@u7GO&<3?MbD}XVg=!rx4??5K|yHk-wC72FMyrUbbgb$1? z`6-cAklUgyAFlcg_~c*Ft&yGqUhwqb*_YKYqAU4&e>~_p$f~~e!RXaM`kLhQQ-N9_ zJN8IbeXAB+#hVRn#$Nz~lKxC>%S))EPnFK7sDpEB*}h{2^)MC}8hoX%9)c@VwQm_V zfC&Mg&@s{gLuxUB`)wOxE$rd`(<_ZISbuRZYv?QZ+_DlRz|{om6I|Nd&zpeQc{IWJ zN;4?Vf5+1gY&FBYz&+ye{1)&@_}nmhxfP}%Yy2gB8wl~e5*}-71IwUA`^m6&h_Mw- zey!616>Ya)KIZI%*ZDpD7ysylHT}u#l%_7I{~XHLnAr`q+>H8s;jbacnvCh0TMsZ_ zEzE6@c>|;8wj(Tf0wjND{rMLg2%hzy z-{u=0RW1qN7C_xY+A=$B9z+A)dKp}u0ZdBt0?&c>FdPxGsH^Y>utgUHOAJ~-Y4yfB ze_wb#yc;7|W;L#civ^F|TqnxmD4TEuvwtz1c~O>UA(aQ%({p2ycXFVdd3BxBKLeDB zUecMD9s&0;Lu`Uv63C`@NQvxw0O=DnG&KY~?5z~oJ6~}R8uOT)Ch5YVMs!apt7I@N zKi{`>>c?FubAIY97U~Pjo?GLIKkvZue|7R6X^GoFuB6Y}x#|Ln)h}wz)tq6Aag=?0 z$q__k2mOnf?V-kLFiD4K4Ts-anKsc|Li>Pj4v&i&=qLH~jQJWv7e1QtrmzthEjo<( zT{Z-X7Xn(`>v~YHRy@nIstddumUJaiI>1n^LC7f8h6d*ARSTz21E)X+wn0S;f28Fr zPj`l$1kvnwX4jZB0RP?lfnL8F@Rpp{G;30Ybx-#T4jn4s+8a>M@+ZL4Y|}m!F972n zFCSM41j2*jw(1|0fqN^scep_b8a$YlIjW9B6_aCP;xk21xc+{fy-@-9xeP-Cd*opt z1-sEYDhE=9ZY)2)$ikKND2?wce=?9<92fU>LmFcBd@2x03g(3i+WgieVQ*N^0N>&< z(3m|v%h4(Uf_3;RLxLD|N`9H_3lxDoY{*i*sSrGagY6%c1R>^x4qp*=L=VvL z!Etc%7RI@Q*caIhb+6B8$T8+1ISVc^5Ihxx)mGs^wvaf2|onxI|1s zn;Q%F3fqLFX(+*U;=sA-Ff!l@9RDp!=1*ktFyn!3=n7hnKJT12`xQ}X(rb-<{e+C! zDC!=58bO)0bnf&wiD++v``mZoCNyYM?K&m;JJNVuiDysFLd$0=nJg(2(6F`)YXmM1 z@key6bGs&^q{gtKld&1-e}qR}>1sFuA;Y$6;j(<>VC79i&@Vvbt&G9;c6sRLTQkXY zmu$q@P(%0I*(XRLUb@|M=Rnlq)&@*cE9?umCTY0LD`U%pyG{lEKa*#F?G{@V-Pz6zPDHtule#Bw)& z(E|iXMQb0uJc0P!o?nW}8+`8Y>jcF5fRMtNNADp&xaQS$0dL?B^}|ATikx?W^?0cF z$ML)1l=KN7o*e*y^(!wZXu7`!68`oco#g zduoM3i;RmPA6*z6jPFtI=naEipWpTQU7!EY@%d-P${P9NDX^Q2$&|KiOZ zeK(iv=91l9@}HASj@q4>(_T?SpZzcN|KK@`Qi`$WX#EnhP8C&Nlr{T1x5Tjg-}eEO zzvLEkmfib+-JGzS6aJHOLYLpEI-f&}pfO6t^LzLL^o5G&-b`A6+nWKSCD#|=YbCbZ zjq?vUo#ua}e=+1E5N1w^Z}Ij)EWW&iaHs>AmQ;Ie`(J@XrqK-t*?I`HFS2({t%Cf@ zln*I61MUNb&&lNvRL z!zE+qf38ZKf}D*>Z1v0)(BL|#Mdfz|DDO;+rFUP1xThj)6|HBi7wo)ah*@>JO{yy%o&S`I?(JL`zT>l8$9bj=3kOK1xKjG z8*W;kfi{a{e!*QQ!G%UyweXZC=tU=-b(Mo*>=&)Jwqr)Jb3 zmviiB_$7e!Q057i(i1>1Z#8w5KLOesS-ICUj)QoN>3g#$3Q(lYxEE)x0JAOOv%HUF z;aL>7K5d6IsN!6!Xe*?k)9lPrLWCrAOitC0avy``_O8uZO>sEikrg6`5dkBwXx}gN ze@9`WgxEY&dKm2WIS1CS@&Q%<6nnKY52!}qxRT@#LN7~4{Nq2^fOT_p#0)>fQY`zG3_wju$`KTw%UM$YW_1w_P! zv8+hVpif+?)`II}$Q?eI1c|&wxqCuVf4MR{5GiNB(V)#Mlpe~~@{%(PX@8gNHtmf@ ztEo0I)F$Z&PnR2iVDu@ni1Gd^-dBk9ZIqm8?DLSrl2BK%Lj`*MfFViDrwFY$39bY( z6d?(ow1@rg{E=Lwq0h1i0eMp~f6JsUM`6nLt%r?EQAc;E6Ys-E=>1WukdE^Sf2h=S zl*84#1f^}|Qbaw9M0OU0n=ZtdmuK%^FLZV2 zwP>_O$x8vq?zsb*th zo)A|mTPdY{3-)!KY^m_S29f4se_^r1HbC6Z>8?0p33B=^)~uRlaLk^UEVI)Xdg4E0 z9dSl*RQ2%8+v67@*2IA$ZxsiXmno;E{A?kRi${mG$Pxni!ApYe~tzQHR7@` z(B(>)p_BrO*e{%=AP%JlaaGas!jMeogwqQX0PEV+wg3-)P!DFZWzOdYZpubG9qd8C zoC&kY3}J^Q@>4qfM_55Qki&9hnF$itNakMAjL==QpyfHe4=f0l1TPI**fQ4hpOe`O z#>zf{J|mQH*uHM#b1(%ce+cn-2|xS|qV>Dqk0p?SzIkpO@yQmVrm>H2FyBP}p_}WB zoFsHb(wXct(>fCVfDQ6BTtyeKcVa&}Fu~*AaoyxUu^@xv8quGp0FgO%N|r+uaDw$@ zxY`K}Y@MRFXjS`(1Tlx^f|}Qm8_p-C|N0MP&%PKd>$;4Jsn2M>f0J24em-dqr1YqbeKV1dtJ!9J*E)dQB}c98k5MyzF$9yWdcp#76`uRKaMy_&w1+x zMiAqmmr~z@A=Jy?Z>X(4h^iU#%&K3b=Hq+Z z?XxW^Ua&;@)*?gjV;&MKL*h_ zc1sWk?xXr?e@A|$!f4d3SvFWkeGiR2G>bk;fk#-L2W#Ysc*GyKk6LjRkD~bBxxKL6 z-ftJX*u^gXpYbmM00960?Uz|l6IK+4lPZf!GJwcX7f=)xMG-*}7k(3T)TXZBhSC-h zLC9DXRCX7F0Td(waUlrGY5+lq$PyrI0og)Ogg^n6e+E!117bDWP#P+>zVx9ledy$y z`RBj)+;h&{hx>33fuKZ*5+zEM{4->Q1~mu-RfVe)KKU3bCyIjp50X}oLoo5HYcvY8o^Q<#)^Q+&p!zXlh31EMoBeu4}#vlc)nyA1IHf7#pm8JP^oL*XUq@A z^iyMj3-D;s(e~ZMgwW!|0z*;=W=4zF);5PA*uN=v|F5Cw=veZQSQG}n57*|{g^OS~ z3fSrUF5yCWPN2D2ILb!Os;O#5Ai6l2WBM)ve>f^7j8l)SFCL7~A ze;nQO-mpin1GZTQCJJvLP@cRofE|lQ`riH^XAbtxkuGSlj>8aV$!wnfP0*yT)l*gC z5pjBx&}}##yo}$fsa^??s1B@;dy|0MQ(hkE^}2;bAHqfX$6L^!HhOwP@NMXJNexS; zCgO*^QK=aziC{y|dthA>2JETU{gNb1e|9ybd;2CMntsyCXm$#C(t}~?wJFHDnxgLE zn~K2-3N_j^4bRhORaw1E!}ra4nTgyxaJDr6DE8o@c;$@6W+E=CP5iXmIO#Z*mNM^^ zM+R!|#5uarGI1lm_C*iO%B92*`$%v}|~mJR1&re=jz^ z4!j2`Iku)=B?taP8~yl^Ifx)iUUeGe!g|h{ADwb@K^bzYccAf5V7q$XXde$+VVMa> zL+^vQ;yyjoG!NgknzoTT^6*q^8aMXh1EdLQmZ6k<7+O}4Wb%Bl7Hnz#wxj?ZJIorp z8HHFuc^p94RfJnIv);Q#d=Qu2f27!q^5MC(YPWNDF*MiM_Va}$C?#{uZ}UpARhAss zWhX#a6f@ZVkpRJY9NO{SWpGGk#ng6`K|+lT(mqlSS;#f*EpN-wD%dkgmsx>6;ai50 zekE+4>(dMhDnX9wPFH$&JQswcyp9Dv6(7heocbWzR2lklFSm$5z%u(8ts&Pi%mOftIad zXd@VhiBt1WilB2aBdyG$3Gz!*)TlX42yyjNyJs%OgMr>V-*hr~0rTV} z68@fhw8rDazkDKLtIc*>;&_gy*NLOYTt3xp{-TaFp8t7XQXTK{f4R@tUhmVg^Q$k; zKI;!I?6PhT000020RRAaoa19)VCZ0BU|<8%96-#;00FE}J|hrEus~=KV1n`)7(IPK zd_ExF!Hm$)ghf9LL&RCYa*R+lzRv!^Fmno!%n^jDXN1!%V6`AVFA%$B=A?!fB^DH< z7RARy^&24RN7x79f3u;v1El@~18#pGKvT~I6=Q+2EkNM_ax)Mw0OA#(aDZZvy2QLn zhT@W<%)E34oPY_77o@l9`hk$!w;tWXo9*3HLI~WM$e+JZej{qBp S$p0P$>?bz=g8%>~Dj Date: Mon, 30 Jun 2025 13:42:14 +0100 Subject: [PATCH 15/16] Rearranges function arguments --- .../+domainsTF/domainsReflectivity.m | 42 +++++++++---------- .../+normalTF/normalReflectivity.m | 42 +++++++++---------- targetFunctions/common/extractProblemParams.m | 21 +++++----- .../setupCoreReflectivityCalculation.m | 6 +-- targetFunctions/reflectivityCalculation.m | 12 +++--- .../testDomainsReflectivityCalculations.m | 7 ++-- .../testReflectivityCalculations.m | 7 ++-- 7 files changed, 70 insertions(+), 67 deletions(-) diff --git a/targetFunctions/+domainsTF/domainsReflectivity.m b/targetFunctions/+domainsTF/domainsReflectivity.m index 52c738b02..df1600a01 100644 --- a/targetFunctions/+domainsTF/domainsReflectivity.m +++ b/targetFunctions/+domainsTF/domainsReflectivity.m @@ -1,6 +1,6 @@ -function [qzshifts,scalefactors,bulkIns,bulkOuts,chis,reflectivity,... - simulation,shiftedData,backgrounds,resolutions,domainSldProfiles,... - domainLayers,domainResampledLayers,subRoughs... +function [reflectivity,simulation,shiftedData,backgrounds,resolutions,... + domainSldProfiles,domainLayers,domainResampledLayers,qzshifts,... + scalefactors,bulkIns,bulkOuts,subRoughs,chis... ] = domainsReflectivity(problemStruct,controls) % This is the main domains reflectivity calculation. % It extracts the required parameters for the contrasts @@ -99,9 +99,9 @@ % in the correct order according to geometry. We run it % twice, once for each domain contrastLayers1{i} = allocateLayersForContrast(... - domainContrastLayers{inputContrastLayers{i}(1)},layerValues); + domainContrastLayers{inputContrastLayers{i}(1)}, layerValues); contrastLayers2{i} = allocateLayersForContrast(... - domainContrastLayers{inputContrastLayers{i}(2)},layerValues); + domainContrastLayers{inputContrastLayers{i}(2)}, layerValues); end @@ -139,10 +139,10 @@ simulationXData,dataIndices... ] = setupCoreReflectivityCalculation(... contrastBackgroundIndices{i},contrastResolutionIndices{i},... - backgroundParamValues,resolutionParamValues,qzshifts(i),... - scalefactors(i),dataPresent(i),data{i},dataLimits{i},... - simulationLimits{i},contrastBackgroundTypes{i},... - contrastResolutionTypes{i},customFiles,numSimulationPoints); + backgroundParamValues,resolutionParamValues,... + contrastBackgroundTypes{i},contrastResolutionTypes{i},... + customFiles,qzshifts(i),scalefactors(i),dataPresent(i),... + data{i},dataLimits{i},simulationLimits{i},numSimulationPoints); [reflectivity{i},simulation{i},shiftedData{i},... sldProfiles{i},layers{i},resampledLayers{i},... @@ -162,10 +162,10 @@ simulationXData,dataIndices... ] = setupCoreReflectivityCalculation(... contrastBackgroundIndices{i},contrastResolutionIndices{i},... - backgroundParamValues,resolutionParamValues,qzshifts(i),... - scalefactors(i),dataPresent(i),data{i},dataLimits{i},... - simulationLimits{i},contrastBackgroundTypes{i},... - contrastResolutionTypes{i},customFiles,numSimulationPoints); + backgroundParamValues,resolutionParamValues,... + contrastBackgroundTypes{i},contrastResolutionTypes{i},... + customFiles,qzshifts(i),scalefactors(i),dataPresent(i),... + data{i},dataLimits{i},simulationLimits{i},numSimulationPoints); [reflectivity{i},simulation{i},shiftedData{i},... sldProfiles{i},layers{i},resampledLayers{i},... @@ -189,10 +189,10 @@ simulationXData,dataIndices... ] = setupCoreReflectivityCalculation(... contrastBackgroundIndices{i},contrastResolutionIndices{i},... - backgroundParamValues,resolutionParamValues,qzshifts(i),... - scalefactors(i),dataPresent(i),data{i},dataLimits{i},... - simulationLimits{i},contrastBackgroundTypes{i},... - contrastResolutionTypes{i},customFiles,numSimulationPoints); + backgroundParamValues,resolutionParamValues,... + contrastBackgroundTypes{i},contrastResolutionTypes{i},... + customFiles,qzshifts(i),scalefactors(i),dataPresent(i),... + data{i},dataLimits{i},simulationLimits{i},numSimulationPoints); [reflectivity{i},simulation{i},shiftedData{i},... sldProfiles{i},layers{i},resampledLayers{i},... @@ -214,10 +214,10 @@ simulationXData,dataIndices... ] = setupCoreReflectivityCalculation(... contrastBackgroundIndices{i},contrastResolutionIndices{i},... - backgroundParamValues,resolutionParamValues,qzshifts(i),... - scalefactors(i),dataPresent(i),data{i},dataLimits{i},... - simulationLimits{i},contrastBackgroundTypes{i},... - contrastResolutionTypes{i},customFiles,numSimulationPoints); + backgroundParamValues,resolutionParamValues,... + contrastBackgroundTypes{i},contrastResolutionTypes{i},... + customFiles,qzshifts(i),scalefactors(i),dataPresent(i),... + data{i},dataLimits{i},simulationLimits{i},numSimulationPoints); [reflectivity{i},simulation{i},shiftedData{i},... sldProfiles{i},layers{i},resampledLayers{i},... diff --git a/targetFunctions/+normalTF/normalReflectivity.m b/targetFunctions/+normalTF/normalReflectivity.m index c09bd6aaa..eeb69b79b 100644 --- a/targetFunctions/+normalTF/normalReflectivity.m +++ b/targetFunctions/+normalTF/normalReflectivity.m @@ -1,6 +1,6 @@ -function [qzshifts,scalefactors,bulkIns,bulkOuts,chis,reflectivity,... - simulation,shiftedData,backgrounds,resolutions,sldProfiles,layers,... - resampledLayers,subRoughs] = normalReflectivity(problemStruct,controls) +function [reflectivity,simulation,shiftedData,backgrounds,resolutions,... + sldProfiles,layers,resampledLayers,qzshifts,scalefactors,bulkIns,... + bulkOuts,subRoughs,chis] = normalReflectivity(problemStruct,controls) % This is the main normal reflectivity calculation. % It extracts the required parameters for the contrasts % from the input arrays, then passes the main calculation to @@ -24,8 +24,8 @@ resampleNPoints = controls.resampleNPoints; % Allocate the memory for the output arrays before the main loop - chis = zeros(numberOfContrasts,1); subRoughs = zeros(numberOfContrasts,1); + chis = zeros(numberOfContrasts,1); reflectivity = cell(numberOfContrasts,1); simulation = cell(numberOfContrasts,1); @@ -69,7 +69,7 @@ % layers list are required for this contrast, and put them % in the correct order according to geometry. contrastLayers{i} = allocateLayersForContrast( ... - contrastLayersIndices{i},layerValues); + contrastLayersIndices{i}, layerValues); end @@ -107,10 +107,10 @@ simulationXData,dataIndices... ] = setupCoreReflectivityCalculation(... contrastBackgroundIndices{i},contrastResolutionIndices{i},... - backgroundParamValues,resolutionParamValues,qzshifts(i),... - scalefactors(i),dataPresent(i),data{i},dataLimits{i},... - simulationLimits{i},contrastBackgroundTypes{i},... - contrastResolutionTypes{i},customFiles,numSimulationPoints); + backgroundParamValues,resolutionParamValues, ... + contrastBackgroundTypes{i},contrastResolutionTypes{i},... + customFiles,qzshifts(i),scalefactors(i),dataPresent(i),... + data{i},dataLimits{i},simulationLimits{i},numSimulationPoints); [reflectivity{i},simulation{i},shiftedData{i},... sldProfiles{i},layers{i},resampledLayers{i},chis(i)... @@ -129,10 +129,10 @@ simulationXData,dataIndices... ] = setupCoreReflectivityCalculation(... contrastBackgroundIndices{i},contrastResolutionIndices{i},... - backgroundParamValues,resolutionParamValues,qzshifts(i),... - scalefactors(i),dataPresent(i),data{i},dataLimits{i},... - simulationLimits{i},contrastBackgroundTypes{i},... - contrastResolutionTypes{i},customFiles,numSimulationPoints); + backgroundParamValues,resolutionParamValues,... + contrastBackgroundTypes{i},contrastResolutionTypes{i},... + customFiles,qzshifts(i),scalefactors(i),dataPresent(i),... + data{i},dataLimits{i},simulationLimits{i},numSimulationPoints); [reflectivity{i},simulation{i},shiftedData{i},... sldProfiles{i},layers{i},resampledLayers{i},chis(i)... @@ -154,10 +154,10 @@ simulationXData,dataIndices... ] = setupCoreReflectivityCalculation(... contrastBackgroundIndices{i},contrastResolutionIndices{i},... - backgroundParamValues,resolutionParamValues,qzshifts(i),... - scalefactors(i),dataPresent(i),data{i},dataLimits{i},... - simulationLimits{i},contrastBackgroundTypes{i},... - contrastResolutionTypes{i},customFiles,numSimulationPoints); + backgroundParamValues,resolutionParamValues,... + contrastBackgroundTypes{i},contrastResolutionTypes{i},... + customFiles,qzshifts(i),scalefactors(i),dataPresent(i),... + data{i},dataLimits{i},simulationLimits{i},numSimulationPoints); [reflectivity{i},simulation{i},shiftedData{i},... sldProfiles{i},layers{i},resampledLayers{i},chis(i)... @@ -178,10 +178,10 @@ simulationXData,dataIndices... ] = setupCoreReflectivityCalculation(... contrastBackgroundIndices{i},contrastResolutionIndices{i},... - backgroundParamValues,resolutionParamValues,qzshifts(i),... - scalefactors(i),dataPresent(i),data{i},dataLimits{i},... - simulationLimits{i},contrastBackgroundTypes{i},... - contrastResolutionTypes{i},customFiles,numSimulationPoints); + backgroundParamValues,resolutionParamValues,... + contrastBackgroundTypes{i},contrastResolutionTypes{i},... + customFiles,qzshifts(i),scalefactors(i),dataPresent(i),... + data{i},dataLimits{i},simulationLimits{i},numSimulationPoints); [reflectivity{i},simulation{i},shiftedData{i},... sldProfiles{i},layers{i},resampledLayers{i},chis(i)... diff --git a/targetFunctions/common/extractProblemParams.m b/targetFunctions/common/extractProblemParams.m index b7a1dce57..95f47af0c 100644 --- a/targetFunctions/common/extractProblemParams.m +++ b/targetFunctions/common/extractProblemParams.m @@ -3,32 +3,33 @@ domainRatios, dataPresent, nParams, params, resample, contrastBackgroundTypes, contrastBackgroundActions, contrastResolutionTypes,... contrastCustomFiles, useImaginary, repeatLayers, data, dataLimits, simulationLimits, contrastLayers, layersDetails, customFiles, domainContrastLayers] = extractProblemParams(problemStruct) +resample = problemStruct.resample; +data = problemStruct.data; +dataPresent = problemStruct.dataPresent; +dataLimits = problemStruct.dataLimits; +simulationLimits = problemStruct.simulationLimits; numberOfContrasts = problemStruct.numberOfContrasts; geometry = problemStruct.geometry; +useImaginary = problemStruct.useImaginary; +repeatLayers = problemStruct.repeatLayers; contrastBackgroundParams = problemStruct.contrastBackgroundParams; contrastBackgroundTypes = problemStruct.contrastBackgroundTypes; contrastBackgroundActions = problemStruct.contrastBackgroundActions; contrastResolutionParams = problemStruct.contrastResolutionParams; contrastResolutionTypes = problemStruct.contrastResolutionTypes; contrastDomainRatios = problemStruct.contrastDomainRatios; -contrastCustomFiles = problemStruct.contrastCustomFiles; backgroundParams = problemStruct.backgroundParams; resolutionParams = problemStruct.resolutionParams; -domainRatios = problemStruct.domainRatios; -dataPresent = problemStruct.dataPresent; nParams = length(problemStruct.params); params = problemStruct.params; -resample = problemStruct.resample; -useImaginary = problemStruct.useImaginary; -repeatLayers = problemStruct.repeatLayers; -data = problemStruct.data; -dataLimits = problemStruct.dataLimits; -simulationLimits = problemStruct.simulationLimits; contrastLayers = problemStruct.contrastLayers; -layersDetails = problemStruct.layersDetails; customFiles = problemStruct.customFiles; +contrastCustomFiles = problemStruct.contrastCustomFiles; +layersDetails = problemStruct.layersDetails; +domainRatios = problemStruct.domainRatios; domainContrastLayers = problemStruct.domainContrastLayers; + % qzshifts are not included as a parameter in RAT, so we set up dummy % values for the reflectivity calculation contrastQzshifts = ones(1,problemStruct.numberOfContrasts); diff --git a/targetFunctions/common/setupReflectivity/setupCoreReflectivityCalculation.m b/targetFunctions/common/setupReflectivity/setupCoreReflectivityCalculation.m index 9e3eaa8eb..7027386cc 100644 --- a/targetFunctions/common/setupReflectivity/setupCoreReflectivityCalculation.m +++ b/targetFunctions/common/setupReflectivity/setupCoreReflectivityCalculation.m @@ -1,8 +1,8 @@ function [background,resolution,shiftedData,simulationXData,dataIndices... ] = setupCoreReflectivityCalculation(backgroundParamIndex,... - resolutionParamIndex,backgroundParams,resolutionParams,qzshift,... - scalefactor,dataPresent,data,dataLimits,simulationLimits,... - backgroundType,resolutionType,customFiles,numSimulationPoints) + resolutionParamIndex,backgroundParams,resolutionParams,backgroundType,... + resolutionType,customFiles,qzshift,scalefactor,dataPresent,data,... + dataLimits,simulationLimits,numSimulationPoints) % Apply scale factors and q shifts to the data fullShiftedData = shiftData(scalefactor,qzshift,dataPresent,data,dataLimits,simulationLimits,numSimulationPoints); diff --git a/targetFunctions/reflectivityCalculation.m b/targetFunctions/reflectivityCalculation.m index b2b435a3c..3d8e2decb 100644 --- a/targetFunctions/reflectivityCalculation.m +++ b/targetFunctions/reflectivityCalculation.m @@ -31,16 +31,16 @@ case coderEnums.calculationTypes.Normal - [~,scalefactors,bulkIns,bulkOuts,chis,reflectivity,... - simulation,shiftedData,backgrounds,resolutions,sldProfiles,... - layers,resampledLayers,subRoughs... + [reflectivity,simulation,shiftedData,backgrounds,resolutions,... + sldProfiles,layers,resampledLayers,~,scalefactors,bulkIns,... + bulkOuts,subRoughs,chis... ] = normalTF.normalReflectivity(problemStruct,controls); case coderEnums.calculationTypes.Domains - [~,scalefactors,bulkIns,bulkOuts,chis,reflectivity,... - simulation,shiftedData,backgrounds,resolutions,sldProfiles,... - layers,resampledLayers,subRoughs... + [reflectivity,simulation,shiftedData,backgrounds,resolutions,... + sldProfiles,layers,resampledLayers,~,scalefactors,bulkIns,... + bulkOuts,subRoughs,chis... ] = domainsTF.domainsReflectivity(problemStruct,controls); otherwise diff --git a/tests/domainsTFReflectivityCalculation/testDomainsReflectivityCalculations.m b/tests/domainsTFReflectivityCalculation/testDomainsReflectivityCalculations.m index 993aef0ff..b73728390 100644 --- a/tests/domainsTFReflectivityCalculation/testDomainsReflectivityCalculations.m +++ b/tests/domainsTFReflectivityCalculation/testDomainsReflectivityCalculations.m @@ -154,9 +154,10 @@ function testReflectivityCalculation(testCase, parallel, useCompiled) function testDomainsTFReflectivityCalculation(testCase, parallel) testCase.controls.parallel = parallel; - [qzshifts,scalefactors,bulkIn,bulkOut,chis,reflectivity,... - simulation,shiftedData,backgrounds,resolutions,SLDProfiles,layers,resampledLayers,... - subRoughs] = domainsTF.domainsReflectivity(testCase.problemStruct,testCase.controls); + [reflectivity,simulation,shiftedData,backgrounds,resolutions,... + SLDProfiles,layers,resampledLayers,qzshifts,scalefactors,bulkIn,... + bulkOut,subRoughs,chis] = domainsTF.domainsReflectivity(... + testCase.problemStruct,testCase.controls); testCase.verifyEqual(qzshifts, testCase.TFQzshifts, 'RelTol', testCase.tolerance, 'AbsTol', testCase.absTolerance); testCase.verifyEqual(scalefactors, testCase.TFScalefactors, 'RelTol', testCase.tolerance, 'AbsTol', testCase.absTolerance); diff --git a/tests/normalTFReflectivityCalculation/testReflectivityCalculations.m b/tests/normalTFReflectivityCalculation/testReflectivityCalculations.m index cd7ea2fe7..8b7fe0858 100644 --- a/tests/normalTFReflectivityCalculation/testReflectivityCalculations.m +++ b/tests/normalTFReflectivityCalculation/testReflectivityCalculations.m @@ -168,9 +168,10 @@ function testReflectivityCalculation(testCase, parallel, useCompiled) function testNormalTFReflectivityCalculation(testCase, parallel) testCase.controls.parallel = parallel; - [qzshifts,scalefactors,bulkIn,bulkOut,chis,reflectivity,... - simulation,shiftedData,backgrounds,resolutions,SLDProfiles,layers,resampledLayers,... - subRoughs] = normalTF.normalReflectivity(testCase.problemStruct,testCase.controls); + [reflectivity,simulation,shiftedData,backgrounds,resolutions,... + SLDProfiles,layers,resampledLayers,qzshifts,scalefactors,bulkIn,... + bulkOut,subRoughs,chis] = normalTF.normalReflectivity(... + testCase.problemStruct,testCase.controls); testCase.verifyEqual(qzshifts, testCase.TFQzshifts, 'RelTol', testCase.tolerance, 'AbsTol', testCase.absTolerance); testCase.verifyEqual(scalefactors, testCase.TFScalefactors, 'RelTol', testCase.tolerance, 'AbsTol', testCase.absTolerance); From fabcbd2cdc7eb3046f996e2223b528ea5fda9df3 Mon Sep 17 00:00:00 2001 From: Paul Sharp <44529197+DrPaulSharp@users.noreply.github.com> Date: Mon, 30 Jun 2025 18:53:13 +0100 Subject: [PATCH 16/16] Updates test data creation scripts --- .../makeDomainsInputsAndOutputs.m | 57 +++++++------- .../makeInputsAndOutputs.m | 76 +++++++++---------- 2 files changed, 63 insertions(+), 70 deletions(-) diff --git a/tests/domainsTFReflectivityCalculation/makeDomainsInputsAndOutputs.m b/tests/domainsTFReflectivityCalculation/makeDomainsInputsAndOutputs.m index 77f48ba14..bedff8057 100644 --- a/tests/domainsTFReflectivityCalculation/makeDomainsInputsAndOutputs.m +++ b/tests/domainsTFReflectivityCalculation/makeDomainsInputsAndOutputs.m @@ -40,16 +40,9 @@ save([root filesep 'tests/domainsTFReflectivityCalculation/domainsStandardLayersOutputs'],'outputs'); % (c) TF Parameters -[qzshifts,scalefactors,bulkIn,bulkOut,chis,reflectivity,simulation,... - shiftedData,backgrounds,resolutions,sldProfiles,layers,... - resampledLayers,subRoughs] = domainsTF.domainsReflectivity(problemStruct,controls); - -TFParams.qzshifts = qzshifts; -TFParams.scalefactors = scalefactors; -TFParams.bulkIn = bulkIn; -TFParams.bulkOut = bulkOut; -TFParams.chis = chis; -TFParams.subRoughs = subRoughs; +[reflectivity,simulation,shiftedData,backgrounds,resolutions,sldProfiles,... + layers,resampledLayers,qzshifts,scalefactors,bulkIn,bulkOut,subRoughs,chis... + ] = normalTF.normalReflectivity(problemStruct,controls); TFParams.reflectivity = reflectivity; TFParams.simulation = simulation; @@ -59,6 +52,12 @@ TFParams.sldProfiles = sldProfiles; TFParams.layers = layers; TFParams.resampledLayers = resampledLayers; +TFParams.qzshifts = qzshifts; +TFParams.scalefactors = scalefactors; +TFParams.bulkIn = bulkIn; +TFParams.bulkOut = bulkOut; +TFParams.subRoughs = subRoughs; +TFParams.chis = chis; save([root filesep 'tests/domainsTFReflectivityCalculation/domainsStandardLayersTFParams'],'TFParams'); @@ -98,16 +97,9 @@ save([root filesep 'tests/domainsTFReflectivityCalculation/domainsCustomXYOutputs'],'outputs'); % (c) TF Parameters -[qzshifts,scalefactors,bulkIn,bulkOut,chis,reflectivity,simulation,... - shiftedData,backgrounds,resolutions,sldProfiles,layers,... - resampledLayers,subRoughs] = domainsTF.domainsReflectivity(problemStruct,controls); - -TFParams.qzshifts = qzshifts; -TFParams.scalefactors = scalefactors; -TFParams.bulkIn = bulkIn; -TFParams.bulkOut = bulkOut; -TFParams.chis = chis; -TFParams.subRoughs = subRoughs; +[reflectivity,simulation,shiftedData,backgrounds,resolutions,sldProfiles,... + layers,resampledLayers,qzshifts,scalefactors,bulkIn,bulkOut,subRoughs,chis... + ] = normalTF.normalReflectivity(problemStruct,controls); TFParams.reflectivity = reflectivity; TFParams.simulation = simulation; @@ -117,6 +109,12 @@ TFParams.sldProfiles = sldProfiles; TFParams.layers = layers; TFParams.resampledLayers = resampledLayers; +TFParams.qzshifts = qzshifts; +TFParams.scalefactors = scalefactors; +TFParams.bulkIn = bulkIn; +TFParams.bulkOut = bulkOut; +TFParams.subRoughs = subRoughs; +TFParams.chis = chis; save([root filesep 'tests/domainsTFReflectivityCalculation/domainsCustomXYTFParams'],'TFParams'); @@ -155,16 +153,9 @@ save([root filesep 'tests/domainsTFReflectivityCalculation/domainsCustomLayersOutputs'],'outputs'); % (c) TF Parameters -[qzshifts,scalefactors,bulkIn,bulkOut,chis,reflectivity,simulation,... - shiftedData,backgrounds,resolutions,sldProfiles,layers,... - resampledLayers,subRoughs] = domainsTF.domainsReflectivity(problemStruct,controls); - -TFParams.qzshifts = qzshifts; -TFParams.scalefactors = scalefactors; -TFParams.bulkIn = bulkIn; -TFParams.bulkOut = bulkOut; -TFParams.chis = chis; -TFParams.subRoughs = subRoughs; +[reflectivity,simulation,shiftedData,backgrounds,resolutions,sldProfiles,... + layers,resampledLayers,qzshifts,scalefactors,bulkIn,bulkOut,subRoughs,chis... + ] = normalTF.normalReflectivity(problemStruct,controls); TFParams.reflectivity = reflectivity; TFParams.simulation = simulation; @@ -174,5 +165,11 @@ TFParams.sldProfiles = sldProfiles; TFParams.layers = layers; TFParams.resampledLayers = resampledLayers; +TFParams.qzshifts = qzshifts; +TFParams.scalefactors = scalefactors; +TFParams.bulkIn = bulkIn; +TFParams.bulkOut = bulkOut; +TFParams.subRoughs = subRoughs; +TFParams.chis = chis; save([root filesep 'tests/domainsTFReflectivityCalculation/domainsCustomLayersTFParams'],'TFParams'); diff --git a/tests/normalTFReflectivityCalculation/makeInputsAndOutputs.m b/tests/normalTFReflectivityCalculation/makeInputsAndOutputs.m index 5e00dbb1b..23185f461 100644 --- a/tests/normalTFReflectivityCalculation/makeInputsAndOutputs.m +++ b/tests/normalTFReflectivityCalculation/makeInputsAndOutputs.m @@ -39,16 +39,9 @@ save([root filesep 'tests/normalTFReflectivityCalculation/customLayersOutputs'],'outputs'); % (c) TF Parameters -[qzshifts,scalefactors,bulkIn,bulkOut,chis,reflectivity,simulation,... - shiftedData,backgrounds,resolutions,sldProfiles,layers,... - resampledLayers,subRoughs] = normalTF.normalReflectivity(problemStruct,controls); - -TFParams.qzshifts = qzshifts; -TFParams.scalefactors = scalefactors; -TFParams.bulkIn = bulkIn; -TFParams.bulkOut = bulkOut; -TFParams.chis = chis; -TFParams.subRoughs = subRoughs; +[reflectivity,simulation,shiftedData,backgrounds,resolutions,sldProfiles,... + layers,resampledLayers,qzshifts,scalefactors,bulkIn,bulkOut,subRoughs,chis... + ] = normalTF.normalReflectivity(problemStruct,controls); TFParams.reflectivity = reflectivity; TFParams.simulation = simulation; @@ -58,6 +51,12 @@ TFParams.sldProfiles = sldProfiles; TFParams.layers = layers; TFParams.resampledLayers = resampledLayers; +TFParams.qzshifts = qzshifts; +TFParams.scalefactors = scalefactors; +TFParams.bulkIn = bulkIn; +TFParams.bulkOut = bulkOut; +TFParams.subRoughs = subRoughs; +TFParams.chis = chis; save([root filesep 'tests/normalTFReflectivityCalculation/customLayersTFParams'],'TFParams'); @@ -97,16 +96,9 @@ save([root filesep 'tests/normalTFReflectivityCalculation/customXYOutputs'],'outputs'); % (c) TF Parameters -[qzshifts,scalefactors,bulkIn,bulkOut,chis,reflectivity,simulation,... - shiftedData,backgrounds,resolutions,sldProfiles,layers,... - resampledLayers,subRoughs] = normalTF.normalReflectivity(problemStruct,controls); - -TFParams.qzshifts = qzshifts; -TFParams.scalefactors = scalefactors; -TFParams.bulkIn = bulkIn; -TFParams.bulkOut = bulkOut; -TFParams.chis = chis; -TFParams.subRoughs = subRoughs; +[reflectivity,simulation,shiftedData,backgrounds,resolutions,sldProfiles,... + layers,resampledLayers,qzshifts,scalefactors,bulkIn,bulkOut,subRoughs,chis... + ] = normalTF.normalReflectivity(problemStruct,controls); TFParams.reflectivity = reflectivity; TFParams.simulation = simulation; @@ -116,6 +108,12 @@ TFParams.sldProfiles = sldProfiles; TFParams.layers = layers; TFParams.resampledLayers = resampledLayers; +TFParams.qzshifts = qzshifts; +TFParams.scalefactors = scalefactors; +TFParams.bulkIn = bulkIn; +TFParams.bulkOut = bulkOut; +TFParams.subRoughs = subRoughs; +TFParams.chis = chis; save([root filesep 'tests/normalTFReflectivityCalculation/customXYTFParams'],'TFParams'); @@ -155,16 +153,9 @@ save([root filesep 'tests/normalTFReflectivityCalculation/standardLayersOutputs'],'outputs'); % (c) TF Parameters -[qzshifts,scalefactors,bulkIn,bulkOut,chis,reflectivity,simulation,... - shiftedData,backgrounds,resolutions,sldProfiles,layers,... - resampledLayers,subRoughs] = normalTF.normalReflectivity(problemStruct,controls); - -TFParams.qzshifts = qzshifts; -TFParams.scalefactors = scalefactors; -TFParams.bulkIn = bulkIn; -TFParams.bulkOut = bulkOut; -TFParams.chis = chis; -TFParams.subRoughs = subRoughs; +[reflectivity,simulation,shiftedData,backgrounds,resolutions,sldProfiles,... + layers,resampledLayers,qzshifts,scalefactors,bulkIn,bulkOut,subRoughs,chis... + ] = normalTF.normalReflectivity(problemStruct,controls); TFParams.reflectivity = reflectivity; TFParams.simulation = simulation; @@ -174,6 +165,12 @@ TFParams.sldProfiles = sldProfiles; TFParams.layers = layers; TFParams.resampledLayers = resampledLayers; +TFParams.qzshifts = qzshifts; +TFParams.scalefactors = scalefactors; +TFParams.bulkIn = bulkIn; +TFParams.bulkOut = bulkOut; +TFParams.subRoughs = subRoughs; +TFParams.chis = chis; save([root filesep 'tests/normalTFReflectivityCalculation/standardLayersTFParams'],'TFParams'); @@ -213,16 +210,9 @@ save([root filesep 'tests/normalTFReflectivityCalculation/absorptionOutputs'],'outputs'); % (c) TF Parameters -[qzshifts,scalefactors,bulkIn,bulkOut,chis,reflectivity,simulation,... - shiftedData,backgrounds,resolutions,sldProfiles,layers,... - resampledLayers,subRoughs] = normalTF.normalReflectivity(problemStruct,controls); - -TFParams.qzshifts = qzshifts; -TFParams.scalefactors = scalefactors; -TFParams.bulkIn = bulkIn; -TFParams.bulkOut = bulkOut; -TFParams.chis = chis; -TFParams.subRoughs = subRoughs; +[reflectivity,simulation,shiftedData,backgrounds,resolutions,sldProfiles,... + layers,resampledLayers,qzshifts,scalefactors,bulkIn,bulkOut,subRoughs,chis... + ] = normalTF.normalReflectivity(problemStruct,controls); TFParams.reflectivity = reflectivity; TFParams.simulation = simulation; @@ -232,6 +222,12 @@ TFParams.sldProfiles = sldProfiles; TFParams.layers = layers; TFParams.resampledLayers = resampledLayers; +TFParams.qzshifts = qzshifts; +TFParams.scalefactors = scalefactors; +TFParams.bulkIn = bulkIn; +TFParams.bulkOut = bulkOut; +TFParams.subRoughs = subRoughs; +TFParams.chis = chis; save([root filesep 'tests/normalTFReflectivityCalculation/absorptionTFParams'],'TFParams');