diff --git a/crpptbx/AUG/aug_help_parameters.m b/crpptbx/AUG/aug_help_parameters.m index fef32e4125a0f3822d7ac048216e646b183d9587..6d4c02bbcd234fd731eced94f7048be1e58b7adc 100644 --- a/crpptbx/AUG/aug_help_parameters.m +++ b/crpptbx/AUG/aug_help_parameters.m @@ -27,16 +27,16 @@ help_struct_all = struct(... % $$$ help_struct_all.time_interval = ['if provided sets a specific time interval [tstart tend].' ... % $$$ char(10) 'cxrs: (time_interval can have several nbs) take data and average over time interval(s) only, plots from CXRS_get_profiles are then provided' ... % $$$ ' as well']; -% $$$ help_struct_all.fit_tension = ['smoothing value used in interpos fitting routine, -30 means ''30 times default value'', thus -1 often a' ... -% $$$ ' good value' char(10) ... -% $$$ 'cxrs: if numeric, default for all cases, if structure, default for non given fields']; +help_struct_all.fit_tension = ['smoothing value used in interpos fitting routine, -30 means ''30 times default value'', thus -1 often a' ... + ' good value' char(10) ... + 'cxrs, nete: if numeric, default for all cases, if structure, default for non given fields']; help_struct_all.time = 'time(s) value(s) if relevant, for example eqdsk is provided by default only for time=1.0s'; % $$$ help_struct_all.zshift = 'vertical shift of equilibrium, either for eqdsk (1 to shift to zaxis=0) or for mapping measurements on to rho surfaces [m]'; help_struct_all.cocos = ['cocos value desired in output, uses eqdsk_cocos_transform. Note should use latter if a specific Ip and/or B0 sign' ... 'is wanted. See O. Sauter et al Comput. Phys. Commun. 184 (2013) 293']; % $$$ help_struct_all.edge = '0 (default), 1 to get edge Thomson values'; -% $$$ help_struct_all.fit = '0, no fit profiles, 1 (default) if fit profiles desired as well, relevant for _rho profiles. See also fit_type'; -% $$$ help_struct_all.fit_type = 'provenance of fitted profiles ''conf'' (default) from conf nodes, ''avg'' or ''local'' for resp. proffit: nodes'; +help_struct_all.fit = '0, no fit profiles, 1 (default) if fit profiles desired as well, relevant for _rho profiles. See also fit_type'; +help_struct_all.fit_type = 'type of fits ''std'' (default) uses diagnostic error bars, ''pedestal'', uses manual error bars with smaller values outside 0.8'; help_struct_all.source = 'sxr: ''G'' (default, with ssx), camera name ''J'', ''G'', ...[[F-M], case insensitive;; cxrs: ''CEZ'' (default), ''CMZ'''; help_struct_all.camera = ['[] (default, all), [i1 i2 ...] chord nbs ([1 3 5] if only chords 1, 3 and 5 are desired), ''central'' uses J_049']; help_struct_all.freq = '''slow'', default (means ssx, 500kHz), lower sampling; ''fast'' full samples 2MHz; integer value nn for downsampling every nn''th points'; diff --git a/crpptbx/AUG/gdat_aug.m b/crpptbx/AUG/gdat_aug.m index b2c205afbc06d128c88460ab1f153db6a21f136d..60e0ccad5c3eacd2d4c1833385813491a4586928 100644 --- a/crpptbx/AUG/gdat_aug.m +++ b/crpptbx/AUG/gdat_aug.m @@ -524,7 +524,7 @@ elseif strcmp(mapping_for_aug.method,'switchcase') gdat_data.fit.raw.rhotornorm = []; gdat_data.fit.raw.ti.data = []; gdat_data.fit.raw.vrot.data = []; - fit_tension_default = -1.; + fit_tension_default = -1; if isfield(gdat_data.gdat_params,'fit_tension') fit_tension = gdat_data.gdat_params.fit_tension; else @@ -536,7 +536,7 @@ elseif strcmp(mapping_for_aug.method,'switchcase') 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 + if ~isfield(fit_tension,'vrot '); fit_tension.vrot = fit_tension_default; end end gdat_data.gdat_params.fit_tension = fit_tension; % @@ -547,6 +547,7 @@ elseif strcmp(mapping_for_aug.method,'switchcase') gdat_data.fit.raw.vrot.data = NaN*ones(size(gdat_data.vrot.data)); rhotornormfit = linspace(0,1,161)'; gdat_data.fit.rhotornorm = rhotornormfit; + gdat_data.fit.t = gdat_data.t; 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 @@ -1037,6 +1038,9 @@ elseif strcmp(mapping_for_aug.method,'switchcase') %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% case {'ne_rho', 'te_rho', 'nete_rho'} + 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; + end params_eff = gdat_data.gdat_params; params_eff.data_request=data_request_eff(1:2); % start with ne if nete_rho % get raw data @@ -1165,6 +1169,77 @@ elseif strcmp(mapping_for_aug.method,'switchcase') gdat_data.data_fullpath=['pe=1.6e-19*ne*Te in data, .ne, .te ' gdat_data.data_fullpath(3:end)]; gdat_data.label = 'pe'; end + + % defaults for fits, so user always gets std structure + gdat_data.fit.rhotornorm = []; % same for both ne and te + gdat_data.fit.rhopolnorm = []; + gdat_data.fit.t = []; + gdat_data.fit.te.data = []; + gdat_data.fit.te.drhotornorm = []; + gdat_data.fit.ne.data = []; + gdat_data.fit.ne.drhotornorm = []; + gdat_data.fit.raw.rhotornorm = []; + gdat_data.fit.raw.te.data = []; + gdat_data.fit.raw.ne.data = []; + fit_tension_default = -0.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.te = fit_tension; + fit_tension_eff.ne = fit_tension; + fit_tension = fit_tension_eff; + else + if ~isfield(fit_tension,'te'); fit_tension.te = fit_tension_default; end + if ~isfield(fit_tension,'ne '); fit_tension.ne = 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.te.data)); + gdat_data.fit.raw.te.data = NaN*ones(size(gdat_data.te.data)); + gdat_data.fit.raw.ne.data = NaN*ones(size(gdat_data.ne.data)); + rhotornormfit = linspace(0,1,161)'; + gdat_data.fit.rhotornorm = rhotornormfit; + gdat_data.fit.t = gdat_data.t; + for it=1:length(gdat_data.t) + % make rhotor->rhopol transformation for each time since equilibrium might have changed + irhook=find(gdat_data.grids_1d.rhotornorm(:,it)>0 & gdat_data.grids_1d.rhotornorm(:,it)<1); % no need for ~isnan + [rhoeff isort]=sort(gdat_data.grids_1d.rhotornorm(irhook,it)); + gdat_data.fit.rhopolnorm(:,it)=interpos([0; rhoeff; 1],[0; gdat_data.grids_1d.rhopolnorm(irhook(isort),it); 1],rhotornormfit,-0.1,[2 2],[0 1]); + idata = find(gdat_data.te.data(:,it)>0 & gdat_data.grids_1d.rhotornorm(:,it)<=1.05); + if length(idata)>0 + gdat_data.fit.te.raw.rhotornorm(idata,it) = gdat_data.grids_1d.rhotornorm(idata,it); + gdat_data.fit.te.raw.data(idata,it) = gdat_data.te.data(idata,it); + gdat_data.fit.te.raw.error_bar(idata,it) = gdat_data.te.error_bar(idata,it); + gdat_data.fit.ne.raw.rhotornorm(idata,it) = gdat_data.grids_1d.rhotornorm(idata,it); + gdat_data.fit.ne.raw.data(idata,it) = gdat_data.ne.data(idata,it); + gdat_data.fit.ne.raw.error_bar(idata,it) = gdat_data.ne.error_bar(idata,it); + [rhoeff,irhoeff] = sort(gdat_data.grids_1d.rhotornorm(idata,it)); + rhoeff = [0; rhoeff]; + teeff = gdat_data.te.data(idata(irhoeff),it); + te_err_eff = gdat_data.te.error_bar(idata(irhoeff),it); + % they are some strange low error_bars, so remove these by max(Te/error_bar)<=10; and changing it to large error bar + ij=find(teeff./te_err_eff>10.); + if ~isempty(ij); te_err_eff(ij) = teeff(ij)./0.1; end + neeff = gdat_data.ne.data(idata(irhoeff),it); + ne_err_eff = gdat_data.ne.error_bar(idata(irhoeff),it); + ij=find(neeff./ne_err_eff>10.); + if ~isempty(ij); ne_err_eff(ij) = neeff(ij)./0.1; end + % + teeff = [teeff(1); teeff]; + te_err_eff = [1e4; te_err_eff]; + neeff = [neeff(1); neeff]; + ne_err_eff = [1e21; ne_err_eff]; + [gdat_data.fit.te.data(:,it), gdat_data.fit.te.drhotornorm(:,it)] = interpos(rhoeff,teeff,rhotornormfit,fit_tension.te,[1 0],[0 0],te_err_eff); + [gdat_data.fit.ne.data(:,it), gdat_data.fit.ne.drhotornorm(:,it)] = interpos(rhoeff,neeff,rhotornormfit,fit_tension.ne,[1 0],[0 0],ne_err_eff); + end + end + end + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% case {'pgyro'}