diff --git a/crpptbx/AUG/plot_torbeam.m b/crpptbx/AUG/plot_torbeam.m new file mode 100644 index 0000000000000000000000000000000000000000..03b4a63b120897dcb3ca555c3bc209887fd48f09 --- /dev/null +++ b/crpptbx/AUG/plot_torbeam.m @@ -0,0 +1,64 @@ +function fig_handles=plot_torbeam(torbeam_out_struct,varargin); +% +% fig_handles=plot_torbeam(torbeam_out_struct,varargin); +% +% Default plots of structure torbeam_out_struct obtained from run_torbeam_fullshot.m +% +% varargin: list of fields to be plotted versus time +% (default: 'pow','rhopol_dep', 'pdens_peak', 'rhopol_pdens_width') +% +% []: if empty then a list with multiple choice is proposed +% + +fig_handles = []; + +if isempty(torbeam_out_struct); return; end + +set_colos; +list_fields = {'pow','rhopol_dep', 'pdens_peak', 'rhopol_pdens_width'}; + +abc=cat(1,torbeam_out_struct{:}); +tb_fields = []; +if ~isempty(abc); tb_fields = fields(abc(1)); end + +if nargin >= 2 + if isempty(varargin{1}) + % asks from list + if ~isempty(tb_fields) + h_for_waitfor=figure; + global field_chosen2 + h1=uicontrol('Style','listbox','string',tb_fields,'pos',[20 20 200 300],'Max',20, ... + 'callback', ['global field_chosen2;field_chosen2=get(gcbo,''value'') ;']); + h2=uicontrol('Style','text','pos',[20 330 200 30],'string','choose fields to plot (ctrl-enter for multiple choices) then quit'); + h3=uicontrol('Style','pushbutton','string','quit','pos',[300 20 30 20],'callback', ['field_chosen=get(' num2str(h1,'%.15e') ',''value''); close gcf;']); + waitfor(h_for_waitfor); + list_fields = tb_fields(field_chosen2); + clear global field_chosen2 + else + disp('torbeam_out_struct empty'); + return + end + elseif length(varargin) == 1 + list_fields = varargin{1}; + else + list_fields = varargin; + end +end + +for ifield=1:length(list_fields) + titleg = []; + eval(['fig_handles.' list_fields{ifield} '.fig = figure(''name'',''' list_fields{ifield} ''');']); + for igyro=1:length(torbeam_out_struct) + if ~isempty(torbeam_out_struct{igyro}) + eval(['array_to_plot = torbeam_out_struct{igyro}.' list_fields{ifield} ';']); + plotos(torbeam_out_struct{igyro}.time,array_to_plot,'-',[],[],colos(igyro,:)); + hold on + titleg{end+1} = ['L' num2str(igyro)]; + end + end + if ~isempty(titleg) ; legend(titleg); end + eval(['fig_handles.' list_fields{ifield} '.titleg = titleg;']); + xlabel('time [s]') + eval(['ylabel(''' list_fields{ifield} ''');']); + title(['AUG #' num2str(torbeam_out_struct{igyro}.shot(1))]); +end diff --git a/crpptbx/AUG/run_torbeam_fullshot.m b/crpptbx/AUG/run_torbeam_fullshot.m index 2b0c09b4fa5b9a4e7d2dbef0536239faa84905ea..c1a93372be92fb530a7add9f0f4534befbc3b8b2 100644 --- a/crpptbx/AUG/run_torbeam_fullshot.m +++ b/crpptbx/AUG/run_torbeam_fullshot.m @@ -1,13 +1,16 @@ function [torbeam_out_struct, file_out_prefix]=run_torbeam_fullshot(shot,varargin); % +% [torbeam_out_struct, file_out_prefix]=run_torbeam_fullshot(shot,varargin); +% % Run tbdemo, using line command execution of TORBEAM, to run torbeam acroos full shot on reduced time axis % % shot: shot number for which to run Torbeam. % If empty or not given, ask for it % if negative, assume output file exists, do not re-run TORBEAM and just reads data into structure torbeam_out_struct % -% varargin{1:2}: 'time',time_array: time points for which to run Torbeam (by default run every 50ms for each ECRH2 gyrotron having power>0) -% varargin{3:4}: 'file_prefix', filename_prefix: results are saved on [filename '_gyroXX.dat'] (default: tbdemo_shot_gyroXX.dat with XX being the gyro nb) +% varargin given in pairs: 'keyword', value +% 'time',time_array: time points for which to run Torbeam (by default run every 50ms for each ECRH2 gyrotron having power>0) +% 'file_prefix', filename_prefix: results are saved on [filename '_gyroXX.dat'] (default: tbdemo_shot_gyroXX.dat with XX being the gyro nb) % % Examples: % torbeam_out_struct = run_torbeam_fullshot(shot); % standard call to run Torbeam @@ -16,6 +19,8 @@ function [torbeam_out_struct, file_out_prefix]=run_torbeam_fullshot(shot,varargi % torbeam_out_struct = run_torbeam_fullshot(shot,'time',linspace(tstart,tend,nbpoints)); % to run on given time array % torbeam_out_struct = run_torbeam_fullshot(shot,'time',[t1 t2 t3...],'file_prefix','tbdemo_shot_fewtimes_gyro'); % to run on specific times +torbeam_out_struct = []; + if ~exist('shot') shot=input('shot: '); end @@ -42,7 +47,15 @@ end if shot>0 pgyro=gdat(shot,'pgyro',1); - for igyro=5:8 + run_with_IDA = 0; + % test if IDA present + hhh = sfread('IDA', shot); + if hhh.handle~=0; + run_with_IDA = 1; + disp('use IDA since shotfile exists') + end + + for igyro=1:8 filename=[file_out_prefix num2str(igyro) '.dat']; unix(['rm ' filename ' >& /dev/null']); % since cannot write over an existing file by default unix(['rm ' '.' filename ' >& /dev/null']); % since cannot write over an existing file by default @@ -55,25 +68,43 @@ if shot>0 disp(['running system ' num2str(igyro) '...']); for j=1:length(itt_tok) if pgyro_tok(j)>1e5 - [a,b]=unix(['ssh sxaug21.aug.ipp.mpg.de ~rem/public/tbm_demo/tbmdemo -batch -silent -shot ' num2str(shot) ' -time ' num2str(time_array(itt_tok(j))) ' -system ' num2str(igyro) ' -usedcr -eqdiag EQI -betapol -usemirror -cdrive 1 >> ' ['.' filename]]); + if run_with_IDA==0 + % [a,b]=unix(['ssh sxaug21.aug.ipp.mpg.de ~rem/public/tbm_demo/tbmdemo -batch -silent -shot ' num2str(shot) ' -time ' num2str(time_array(itt_tok(j))) ' -system ' num2str(igyro) ' -usedcr -eqdiag EQI -betapol -usemirror -cdrive 1 >> ' ['.' filename]]); + [a,b]=unix(['ssh sxaug21.aug.ipp.mpg.de ~rem/public/tbm_demo/tbmdemo -batch -silent -shot ' num2str(shot) ' -time ' num2str(time_array(itt_tok(j))) ' -system ' num2str(igyro) ' -ntm -usedcr -eqdiag EQI -betapol -usemirror -cdrive 1 >> ' ['.' filename]]); + else + % -shot 29672 -time 3.0 -system 5 -batch -ntm -silent -usemirror -cdrive 1 + [a,b]=unix(['ssh sxaug21.aug.ipp.mpg.de ~rem/public/tbm_demo/tbmdemo -batch -silent -shot ' num2str(shot) ' -time ' num2str(time_array(itt_tok(j))) ' -system ' num2str(igyro) ' -ntm -usemirror -cdrive 1 >> ' ['.' filename]]); + end end end - [a,b]=unix(['grep -v ''could not''' ' .' filename '| grep -v ''invalid'' > ' filename]); + % [a,b]=unix(['grep -v ''could not''' ' .' filename '| grep -v ''invalid'' | grep -v ''Error'' | egrep -e ''^$'' -v > ' filename]); + [a,b]=unix(['egrep -e ''^Shot''' ' .' filename ' > ' filename]); end end end end -for igyro=5:8 +for igyro=1:8 try - eval(['[gyro_tbnam,tbout{igyro}.gyro,shot_tbnam,tbout{igyro}.shot,time_tbnam,tbout{igyro}.time,pol_tbnam,tbout{igyro}.pol,tor_tbnam,tbout{igyro}.tor,' ... - 'pow_tbnam,tbout{igyro}.pow,r_tbnam,tbout{igyro}.r,z_tbnam,tbout{igyro}.z,pwr_dep_tbnam,tbout{igyro}.rhopol_pwr_dep,rhopol_cd_dep_tbnam,tbout{igyro}.rhopol_cd_dep,jcd_peak_tbnam,' ... - 'tbout{igyro}.jcd_peak,rhopol_c_wid_tbnam,tbout{igyro}.rhopol_c_wid,pni_tbnam,tbout{igyro}.pni,picr_tbnam,tbout{igyro}.picr,prad_tbnam,tbout{igyro}.prad,' ... - 'betan_tbnam,tbout{igyro}.betan,ipl_tbnam,tbout{igyro}.ipl,bt_tbnam,tbout{igyro}.bt,a1_tbnam,tbout{igyro}.a1,a2_tbnam,tbout{igyro}.a2,rhopolntm_tbnam,tbout{igyro}.rhopolntm]=' ... - 'textread(''' file_out_prefix num2str(igyro) '.dat'',''%s%d%s%d%s%f%s%f%s%f%s%f%s%f%s%f%s%f%s%f%s%f%s%f%s%f%s%f%s%f%s%f%s%f%s%f%s%f%s%f%s%f'');']); + eval(['[shot_tbnam,tbout{igyro}.shot,time_tbnam,tbout{igyro}.time,gyro_tbnam,tbout{igyro}.gyro,pol_tbnam,tbout{igyro}.pol,tor_tbnam,tbout{igyro}.tor,' ... + 'pow_tbnam,tbout{igyro}.pow,r_tbnam,tbout{igyro}.r,z_tbnam,tbout{igyro}.z,rho_tbnam,tbout{igyro}.rhopol_dep,pwr_dep_tbnam,tbout{igyro}.rhopol_pwr_dep,rhopol_cd_dep_tbnam,tbout{igyro}.rhopol_cd_dep,pdens_peak_tbnam,' ... + 'tbout{igyro}.pdens_peak,rhopol_pdens_wid_tbnam,tbout{igyro}.rhopol_pdens_width,jcd_peak_tbnam,tbout{igyro}.jcd_peak,rhopol_c_wid_tbnam,tbout{igyro}.rhopol_jcd_width,pni_tbnam,tbout{igyro}.pni,picr_tbnam,tbout{igyro}.picr,prad_tbnam,tbout{igyro}.prad,' ... + 'betan_tbnam,tbout{igyro}.betan,ipl_tbnam,tbout{igyro}.ipl,bt_tbnam,tbout{igyro}.bt,a1_tbnam,tbout{igyro}.ampN1,a2_tbnam,tbout{igyro}.ampN2,rhopolntm_tbnam,tbout{igyro}.rhopolntm]=' ... + 'textread(''' file_out_prefix num2str(igyro) '.dat'',''%s%d%s%f%s%f%s%f%s%f%s%f%s%f%s%f%s%f%s%f%s%f%s%f%s%f%s%f%s%f%s%f%s%f%s%f%s%f%s%f%s%f%s%f%s%f%s%f'');']); + + % eval(['[gyro_tbnam,tbout{igyro}.gyro,shot_tbnam,tbout{igyro}.shot,time_tbnam,tbout{igyro}.time,pol_tbnam,tbout{igyro}.pol,tor_tbnam,tbout{igyro}.tor,' ... + % 'pow_tbnam,tbout{igyro}.pow,r_tbnam,tbout{igyro}.r,z_tbnam,tbout{igyro}.z,pwr_dep_tbnam,tbout{igyro}.rhopol_pwr_dep,rhopol_cd_dep_tbnam,tbout{igyro}.rhopol_cd_dep,jcd_peak_tbnam,' ... + % 'tbout{igyro}.jcd_peak,rhopol_c_wid_tbnam,tbout{igyro}.rhopol_c_wid,pni_tbnam,tbout{igyro}.pni,picr_tbnam,tbout{igyro}.picr,prad_tbnam,tbout{igyro}.prad,' ... + % 'betan_tbnam,tbout{igyro}.betan,ipl_tbnam,tbout{igyro}.ipl,bt_tbnam,tbout{igyro}.bt,a1_tbnam,tbout{igyro}.a1,a2_tbnam,tbout{igyro}.a2,rhopolntm_tbnam,tbout{igyro}.rhopolntm]=' ... + % 'textread(''' file_out_prefix num2str(igyro) '.dat'',''%s%d%s%d%s%f%s%f%s%f%s%f%s%f%s%f%s%f%s%f%s%f%s%f%s%f%s%f%s%f%s%f%s%f%s%f%s%f%s%f%s%f'');']); + catch disp(['problems reading file ' file_out_prefix num2str(igyro) '.dat: may be some errors with tbdemo, check file, skipped']) end end -torbeam_out_struct = tbout; +if exist('tbout'); + torbeam_out_struct = tbout; +end + +fig_handles=plot_torbeam(torbeam_out_struct);