From dc00b8e7d4344988556d161d45a80cc9c3fe7d37 Mon Sep 17 00:00:00 2001 From: Olivier Sauter <olivier.sauter@epfl.ch> Date: Thu, 18 Feb 2016 10:44:21 +0000 Subject: [PATCH] add fit to cxrs git-svn-id: https://spcsvn.epfl.ch/repos/TCV/gdat/trunk@5483 d63d8f72-b253-0410-a779-e742ad2e26cf --- crpptbx/AUG/gdat_aug.m | 74 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) diff --git a/crpptbx/AUG/gdat_aug.m b/crpptbx/AUG/gdat_aug.m index 816b5244..b2c205af 100644 --- a/crpptbx/AUG/gdat_aug.m +++ b/crpptbx/AUG/gdat_aug.m @@ -392,6 +392,12 @@ elseif strcmp(mapping_for_aug.method,'expression') elseif strcmp(mapping_for_aug.method,'switchcase') switch data_request_eff % not lower(...) since data_request_eff should be lower case already at this stage case {'cxrs', 'cxrs_rho'} + % if 'fit' option is added: 'fit',1, then the fitted profiles are returned which means "_rho" is effectively called + if ~isfield(gdat_data.gdat_params,'fit') || isempty(gdat_data.gdat_params.fit) || ~isnumeric(gdat_data.gdat_params.fit) + gdat_data.gdat_params.fit = 0; + elseif gdat_data.gdat_params.fit==1 + data_request_eff = 'cxrs_rho'; + end exp_name_eff = gdat_data.gdat_params.exp_name; if ~isfield(gdat_data.gdat_params,'source') || isempty(gdat_data.gdat_params.source) || strcmp(upper(gdat_data.gdat_params.source),'CEZ') gdat_data.gdat_params.source = 'CEZ'; @@ -507,6 +513,74 @@ elseif strcmp(mapping_for_aug.method,'switchcase') gdat_data.rhopolnorm = rhopolnorm_out; gdat_data.rhotornorm = rhotornorm_out; gdat_data.rhovolnorm = rhovolnorm_out; + % defaults for fits, so user always gets std structure + gdat_data.fit.rhotornorm = []; % same for both ti and vrot + gdat_data.fit.rhopolnorm = []; + gdat_data.fit.t = []; + gdat_data.fit.ti.data = []; + gdat_data.fit.ti.drhotornorm = []; + gdat_data.fit.vrot.data = []; + gdat_data.fit.vrot.drhotornorm = []; + gdat_data.fit.raw.rhotornorm = []; + gdat_data.fit.raw.ti.data = []; + gdat_data.fit.raw.vrot.data = []; + fit_tension_default = -1.; + if isfield(gdat_data.gdat_params,'fit_tension') + fit_tension = gdat_data.gdat_params.fit_tension; + else + fit_tension = fit_tension_default; + end + if ~isstruct(fit_tension) + fit_tension_eff.ti = fit_tension; + fit_tension_eff.vrot = fit_tension; + fit_tension = fit_tension_eff; + else + if ~isfield(fit_tension,'ti'); fit_tension.ti = fit_tension_default; end + if ~isfield(fit_tension,'vrot '); fit_tension.vi = fit_tension_default; end + end + gdat_data.gdat_params.fit_tension = fit_tension; + % + if gdat_data.gdat_params.fit==1 + % add fits + gdat_data.fit.raw.rhotornorm = NaN*ones(size(gdat_data.ti.data)); + gdat_data.fit.raw.ti.data = NaN*ones(size(gdat_data.ti.data)); + gdat_data.fit.raw.vrot.data = NaN*ones(size(gdat_data.vrot.data)); + rhotornormfit = linspace(0,1,161)'; + gdat_data.fit.rhotornorm = rhotornormfit; + for it=1:length(gdat_data.t) + % make rhotor->rhopol transformation for each time since equilibrium might have changed + irhook=find(gdat_data.rhotornorm(:,it)>0 & gdat_data.rhotornorm(:,it)<1); % no need for ~isnan + [rhoeff isort]=sort(gdat_data.rhotornorm(irhook,it)); + gdat_data.fit.rhopolnorm(:,it)=interpos([0; rhoeff; 1],[0; gdat_data.rhopolnorm(irhook(isort),it); 1],rhotornormfit,-0.1,[2 2],[0 1]); + idata = find(gdat_data.ti.data(:,it)>0 & gdat_data.rhotornorm(:,it)<1.01); + if length(idata)>0 + gdat_data.fit.ti.raw.rhotornorm(idata,it) = gdat_data.rhotornorm(idata,it); + gdat_data.fit.ti.raw.data(idata,it) = gdat_data.ti.data(idata,it); + gdat_data.fit.ti.raw.error_bar(idata,it) = gdat_data.ti.error_bar(idata,it); + gdat_data.fit.vrot.raw.rhotornorm(idata,it) = gdat_data.rhotornorm(idata,it); + gdat_data.fit.vrot.raw.data(idata,it) = gdat_data.vrot.data(idata,it); + gdat_data.fit.vrot.raw.error_bar(idata,it) = gdat_data.vrot.error_bar(idata,it); + [rhoeff,irhoeff] = sort(gdat_data.rhotornorm(idata,it)); + rhoeff = [0; rhoeff]; + % they are some strange low error_bars, so remove these by max(Ti/error_bar)<=10; and changing it to large error bar + tieff = gdat_data.ti.data(idata(irhoeff),it); + ti_err_eff = gdat_data.ti.error_bar(idata(irhoeff),it); + ij=find(tieff./ti_err_eff>10.); + if ~isempty(ij); ti_err_eff(ij) = tieff(ij)./0.1; end + vroteff = gdat_data.vrot.data(idata(irhoeff),it); + vrot_err_eff = gdat_data.vrot.error_bar(idata(irhoeff),it); + ij=find(vroteff./vrot_err_eff>10.); + if ~isempty(ij); vrot_err_eff(ij) = vroteff(ij)./0.1; end + % + tieff = [tieff(1); tieff]; + ti_err_eff = [1e4; ti_err_eff]; + vroteff = [vroteff(1); vroteff]; + vrot_err_eff = [1e5; vrot_err_eff]; + [gdat_data.fit.ti.data(:,it), gdat_data.fit.ti.drhotornorm(:,it)] = interpos(rhoeff,tieff,rhotornormfit,fit_tension.ti,[1 0],[0 0],ti_err_eff); + [gdat_data.fit.vrot.data(:,it), gdat_data.fit.vrot.drhotornorm(:,it)] = interpos(rhoeff,vroteff,rhotornormfit,fit_tension.vrot,[1 0],[0 0],vrot_err_eff); + end + end + end end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -- GitLab