verbose = 0 # these were the original lines shots=np.loadtxt('pyfusion/acquisition/LHD/lhd_clk4.txt',dtype=type(1)) fileformat = '/data/datamining/cache/fircall@{0}.dat.bz2' # 2015 update - shots=[105396] fileformat = '/data/datamining/cache/wp/wp@{0}.dat.bz2' separate=0 import pyfusion.utils exec(pf.utils.process_cmd_line_args()) missing_shots = [] good_shots =[] for shot in shots: try: dat=igetfile(fileformat,shot=shot) if separate: pl.figure() dat.plot(hold=1,ch=1) good_shots.append(shot) except IOError: missing_shots.append(shot) pl.show(block=0) print("{0} missing shots out of {1}".format(len(missing_shots),(len(missing_shots)+len(good_shots)))) if verbose>0: print('missing shots are {0}'.format(missing_shots))
ndiags = None for (i, diag) in enumerate(diag_names.split(",")): data = dev.acq.getdata(shot, diag) if i == 0: if len(np.shape(data.channels)) == 0: ndiags = 1 else: ndisgs = len(data.channels) if ndiags == 1: (fig, ax1) = pl.subplots() if offset is not None: data.timebase += offset data.plot_signals(labeleg="True", color="g") # ,downsamplefactor=10) not much diff pl.ylim(-abs(max(pl.ylim())), abs(max(pl.ylim()))) if ndiags == 1: ax2 = ax1.twinx() else: ax2 = pl.gca() ax2.set_autoscaley_on(True) for eg in egdiags.split(","): egdat = igetfile("{d}@{s}.dat".format(s=shot, d=eg)) egdat.plot(1) ax2.set_ylim(-abs(max(ax2.get_ylim())), abs(max(ax2.get_ylim()))) pl.show()
def get_basic_diagnostics(diags=None, shot=54196, times=None, delay=None, exception=False, debug=0): """ return a list of np.arrays of normally numeric values for the times given, for the given shot. """ global lhd_summary # if no exception given and we are not debugging # note - exception=None is a valid entry, meaning tolerate no exceptions # so the "default" we use is False if exception==False and debug==0: exception=Exception if diags == None: diags = "<n_e19>,b_0,i_p,w_p,dw_pdt,dw_pdt2".split(',') if len(np.shape(diags)) == 0: diags = [diags] if delay == None: delay = get_delay(shot) if times == None: times = np.linspace(0,4,4000) times = np.array(times) vals = {} # create an extra time array to allow a cross check vals.update({'check_tm':times}) vals.update({'check_shot':np.zeros(len(times),dtype=np.int)+shot}) for diag in diags: if not(file_info.has_key(diag)): warn('diagnostic {0} not found in shot {1}'.format(diag, shot),stacklevel=2) vals.update({diag: np.nan + times}) else: info = file_info[diag] varname = info['name'] subfolder = info['format'].split('@')[0] filepath = os.path.sep.join([localigetfilepath,subfolder,info['format']]) if ':' in varname: (oper,varname) = varname.split(':') else: oper = None if info['format'].find('.csv') > 0: try: test=lhd_summary.keys() except: print('reloading {0}'.format(info['format'])) lhd_summary = read_csv_data(acq_LHD+'/'+info['format'], header=3) val = lhd_summary[varname][shot] valarr = np.double(val)+(times*0) else: debug_(max(pyfusion.DEBUG, debug), level=4, key='find_data') try: dg = igetfile(filepath, shot=shot, debug=debug-1) except IOError: try: dg = igetfile(filepath+'.bz2', shot=shot, debug=debug-1) except IOError: try: dg = igetfile(filepath + '.gz', shot=shot, debug=debug-1) except exception: if debug>0: print('diag at {fp} not found' .format(fp=filepath)) dg=None #break # give up and try next diagnostic if dg==None: # messy - break doesn't do what I want? valarr=None else: nd=dg.vardict['DimNo'] if nd != 1: raise ValueError( 'Expecting a 1 D array in {0}, got {1}!' .format(dg.filename, nd)) # pre re. w = np.where(np.array(dg.vardict['ValName'])==varname)[0] matches = [re.match(varname,nam) != None for nam in dg.vardict['ValName']] w = np.where(np.array(matches) != False)[0] # get the column(s) of the array corresponding to the name if (oper in 'sum,average,rms,max,min'.split(',')): if oper=='sum': op = np.sum elif oper=='average': op = np.average elif oper=='min': op = np.min elif oper=='std': op = np.std else: raise ValueError('operator {o} in {n} not known to get_basic_diagnostics' .format(o=oper, n=info['name'])) valarr = op(dg.data[:,nd+w],1) else: if len(w) != 1: raise LookupError( 'Need just one instance of variable {0} in {1}' .format(varname, dg.filename)) if len(np.shape(dg.data))!=2: raise LookupError( 'insufficient data for {0} in {1}' .format(varname, dg.filename)) valarr = dg.data[:,nd+w[0]] tim = dg.data[:,0] - delay if oper == 'ddt': # derivative operator valarr = np.diff(valarr)/(np.average(np.diff(tim))) tim = (tim[0:-1] + tim[1:])/2.0 if oper == 'ddt2': # abd(ddw)*derivative operator dw = np.diff(valarr)/(np.average(np.diff(tim))) ddw = np.diff(dw)/(np.average(np.diff(tim))) tim = tim[2:] valarr = 4e-6 * dw[1:] * np.abs(ddw) if (len(tim) < 10) or (np.std(tim)<0.1): raise ValueError('Insufficient points or degenerate' 'timebase data in {0}, {1}' .format(varname, dg.filename)) valarr = (stineman_interp(times, tim, valarr)) w = np.where(times > max(tim)) valarr[w] = np.nan if valarr != None: vals.update({diag: valarr}) debug_(max(pyfusion.DEBUG, debug), level=5, key='interp') return(vals)
def get_basic_params(diags=None, shot=54196, times=None, delay=None, debug=0): """ return a list of np.arrays of normally numeric values for the times given, for the given shot. """ global lhd_summary if diags is None: diags = "<n_e19>,b_0,i_p,w_p,dw_pdt,dw_pdt2".split(',') if delay is None: delay = get_delay(shot) if times is None: times = np.linspace(0,4,4000) times = np.array(times) vals = {} # create an extra time array to allow a cross check vals.update({'check_tm':times}) vals.update({'check_shot':np.zeros(len(times),dtype=np.int)+shot}) for diag in diags: if diag not in file_info: warn('diagnostic {0} not found in shot {1}'.format(diag, shot),stacklevel=2) vals.update({diag: np.nan + times}) else: info = file_info[diag] varname = info['name'] if ':' in varname: (oper,varname) = varname.split(':') else: oper = None if info['format'].find('.csv') > 0: try: test=lhd_summary.keys() except: print('reloading {0}'.format(info['format'])) lhd_summary = read_csv_data(acq_LHD+info['format'], header=3) val = lhd_summary[varname][shot] valarr = np.double(val)+(times*0) else: try: dg = igetfile(local_dir + info['format'], shot=shot) except IOError: try: dg = igetfile(local_dir + info['format']+'.bz2', shot=shot) except IOError: try: dg = igetfile(local_dir + info['format']+'.gz', shot=shot) except exception: #debug_(1) dg=None #break # give up and try next diagnostic if dg is None: # messy - break doesn't do what I want? valarr=None else: nd=dg.vardict['DimNo'] if nd != 1: raise ValueError( 'Expecting a 1 D array in {0}, got {1}!' .format(dg.filename, nd)) # pre re. w = np.where(np.array(dg.vardict['ValName'])==varname)[0] matches = [re.match(varname,nam) != None for nam in dg.vardict['ValName']] w = np.where(np.array(matches) != False)[0] if len(w) != 1: raise LookupError( 'Need just one instance of variable {0} in {1}'. format(varname, dg.filename)) # get the column of the array corresponding to the name valarr = dg.data[:,nd+w[0]] tim = dg.data[:,0] - delay if oper == 'ddt': # derivative operator valarr = np.diff(valarr)/(np.average(np.diff(tim))) tim = (tim[0:-1] + tim[1:])/2.0 if oper == 'ddt2': # abd(ddw)*derivative operator dw = np.diff(valarr)/(np.average(np.diff(tim))) ddw = np.diff(dw)/(np.average(np.diff(tim))) tim = tim[2:] valarr = 4e-6 * dw[1:] * np.abs(ddw) valarr = (stineman_interp(times, tim, valarr)) w = np.where(times > max(tim)) valarr[w] = np.nan if valarr != None: vals.update({diag: valarr}) debug_(max(pyfusion.DEBUG, debug), level=5, key='interp') return(vals)
def get_basic_params(diags=None, shot=54196, times=None, delay=None, debug=0): """ return a list of np.arrays of normally numeric values for the times given, for the given shot. """ global lhd_summary if diags is None: diags = "<n_e19>,b_0,i_p,w_p,dw_pdt,dw_pdt2".split(',') if delay is None: delay = get_delay(shot) if times is None: times = np.linspace(0, 4, 4000) times = np.array(times) vals = {} # create an extra time array to allow a cross check vals.update({'check_tm': times}) vals.update({'check_shot': np.zeros(len(times), dtype=np.int) + shot}) for diag in diags: if diag not in file_info: warn('diagnostic {0} not found in shot {1}'.format(diag, shot), stacklevel=2) vals.update({diag: np.nan + times}) else: info = file_info[diag] varname = info['name'] if ':' in varname: (oper, varname) = varname.split(':') else: oper = None if info['format'].find('.csv') > 0: try: test = lhd_summary.keys() except: print('reloading {0}'.format(info['format'])) lhd_summary = read_csv_data(acq_LHD + info['format'], header=3) val = lhd_summary[varname][shot] valarr = np.double(val) + (times * 0) else: try: dg = igetfile(local_dir + info['format'], shot=shot) except IOError: try: dg = igetfile(local_dir + info['format'] + '.bz2', shot=shot) except IOError: try: dg = igetfile(local_dir + info['format'] + '.gz', shot=shot) except exception: #debug_(1) dg = None #break # give up and try next diagnostic if dg is None: # messy - break doesn't do what I want? valarr = None else: nd = dg.vardict['DimNo'] if nd != 1: raise ValueError( 'Expecting a 1 D array in {0}, got {1}!'.format( dg.filename, nd)) # pre re. w = np.where(np.array(dg.vardict['ValName'])==varname)[0] matches = [ re.match(varname, nam) != None for nam in dg.vardict['ValName'] ] w = np.where(np.array(matches) != False)[0] if len(w) != 1: raise LookupError( 'Need just one instance of variable {0} in {1}'. format(varname, dg.filename)) # get the column of the array corresponding to the name valarr = dg.data[:, nd + w[0]] tim = dg.data[:, 0] - delay if oper == 'ddt': # derivative operator valarr = np.diff(valarr) / (np.average(np.diff(tim))) tim = (tim[0:-1] + tim[1:]) / 2.0 if oper == 'ddt2': # abd(ddw)*derivative operator dw = np.diff(valarr) / (np.average(np.diff(tim))) ddw = np.diff(dw) / (np.average(np.diff(tim))) tim = tim[2:] valarr = 4e-6 * dw[1:] * np.abs(ddw) valarr = (stineman_interp(times, tim, valarr)) w = np.where(times > max(tim)) valarr[w] = np.nan if valarr != None: vals.update({diag: valarr}) debug_(max(pyfusion.DEBUG, debug), level=5, key='interp') return (vals)
def get_basic_diagnostics(diags=None, file_info=file_info, shot=54196, times=None, delay=None, exception=False, debug=0): """ return a list of np.arrays of normally numeric values for the times given, for the given shot. Will access server if env('IGETFILE') points to an exe, else accesses cache This is the first version to specifically allow for access through pyfusion.cfg There are two types of access: I/ single diag on its own timebase II/ the original multi diag on a given timebase (i.e. that from flucstrcs) Stage 1 puts the file_info into .cfg file just for I/ single diag access. Ideally the file_info for II/ sho;d be in .cfg also. For stage I/, we call it with a file_info dict constructed on the spot as a dictionary with one just entry (for diags[0]). """ global lhd_summary # if no exception given and we are not debugging # note - exception=None is a valid entry, meaning tolerate no exceptions # so the "default" we use is False if exception==False and debug==0: exception=Exception if diags is None: diags = "<n_e19>,b_0,i_p,w_p,dw_pdt,dw_pdt2".split(',') if len(np.shape(diags)) == 0: diags = [diags] if delay is None: delay = get_delay(shot) if times is None: if len(diags)>1: times = np.linspace(0,4,4000) # this is a crude guess. # else leave it None else: # make sure it is an array times = np.array(times) vals = {} for diag in diags: if not(diag in file_info): warn('diagnostic {0} not found in shot {1}'.format(diag, shot),stacklevel=2) vals.update({diag: np.nan + times}) else: info = file_info[diag] varname = info['name'] # refers to name for igetfile - can contain ':' subfolder = info['format'].split('@')[0] filepath = os.path.sep.join([localigetfilepath,subfolder,info['format']]) if ':' in varname: (oper,varname) = varname.split(':') else: oper = None if info['format'].find('.csv') > 0: try: test=list(lhd_summary.keys()) except: csvfilename = acq_LHD+'/'+info['format'] if pyfusion.DBG() > 1: print('looking for lhd summary in' + csvfilename) if not os.path.exists(csvfilename): csvfilename += ".bz2" print('reloading {0}'.format(csvfilename)) lhd_summary = read_csv_data(csvfilename, header=3) # should make this more formal - last shots # from an 'extra' file, and finally, from shot info if shot>117000: # fudge to get latest data lhd_summary = np.load(acq_LHD+'/LHD_summary.npz')['LHD'].tolist() print('loading newer shots from a separate file - fix-me') # val = lhd_summary[varname][shot-70000] # not needed # else: val = lhd_summary[varname][shot] valarr = np.double(val)+(times*0) else: try: # now igetfile checks for .gz etc dg = igetfile(filepath, shot=shot, debug=debug-1) except exception as details: if debug>0: print('diag at {fp} not found' .format(fp=filepath)) print(details,details.args) dg=None #break # give up and try next diagnostic if dg is None: # messy - break doesn't do what I want? valarr=None else: nd=dg.vardict['DimNo'] if nd != 1: raise ValueError( 'Expecting a 1 D array in {0}, got {1}!' .format(dg.filename, nd)) # pre re. w = np.where(np.array(dg.vardict['ValName'])==varname)[0] matches = [re.match(varname,nam) != None for nam in dg.vardict['ValName']] w = np.where(np.array(matches) != False)[0] # get the column(s) of the array corresponding to the name if (oper in 'sum,average,rms,max,min'.split(',')): if oper=='sum': op = np.sum elif oper=='average': op = np.average elif oper=='min': op = np.min elif oper=='std': op = np.std else: raise ValueError('operator {o} in {n} not known to get_basic_diagnostics' .format(o=oper, n=info['name'])) valarr = op(dg.data[:,nd+w],1) else: if len(w) != 1: raise LookupError( 'Need just one instance of variable {0} in {1}' .format(varname, dg.filename)) if len(np.shape(dg.data))!=2: raise LookupError( 'insufficient data for {0} in {1}' .format(varname, dg.filename)) valarr = dg.data[:,nd+w[0]] tim = dg.data[:,0] - delay if oper == 'ddt': # derivative operator valarr = np.diff(valarr)/(np.average(np.diff(tim))) tim = (tim[0:-1] + tim[1:])/2.0 if oper == 'ddt2': # abd(ddw)*derivative operator dw = np.diff(valarr)/(np.average(np.diff(tim))) ddw = np.diff(dw)/(np.average(np.diff(tim))) tim = tim[2:] valarr = 4e-6 * dw[1:] * np.abs(ddw) if (len(tim) < 10) or (np.std(tim)<0.1): raise ValueError('Insufficient points or degenerate' 'timebase data in {0}, {1}' .format(varname, dg.filename)) if times is not None: debug_(max(pyfusion.DEBUG, debug), level=5, key='interp') valarr = (stineman_interp(times, tim, valarr)) w = np.where(times > max(tim)) valarr[w] = np.nan else: times = tim if valarr is not None: vals.update({diag: valarr}) # create an extra time array to allow a cross check vals.update({'check_tm':times}) vals.update({'check_shot':np.zeros(len(times),dtype=np.int)+shot}) return(vals)
# trivial example to illustrate the igetfile class import pylab as pl import os import traceback from pyfusion.acquisition.LHD.read_igetfile import igetfile testfile = os.path.join(os.path.dirname(__file__),'[email protected]') try: dat=igetfile(testfile,plot=1) pl.figure() dat.plot() except Exception as reason: print('unable to read EG data from examples - maybe no files there "{r}"'.format(r=reason)) pl.figure() try: # nice if we could always have it in this place (may be a soft link( dat=igetfile(os.getenv('HOME')+'/data/datamining/cache/wp/[email protected]',plot=1) except Exception as reason: print('unable to read file - maybe no files there "{r}"'.format(r=reason)) traceback.print_exc() # plot the lot pl.figure() dat.plot() pl.show(block=0)
def get_basic_diagnostics(diags=None, file_info=file_info, shot=54196, times=None, delay=None, exception=False, debug=0): """ return a list of np.arrays of normally numeric values for the times given, for the given shot. Will access server if env('IGETFILE') points to an exe, else accesses cache This is the first version to specifically allow for access through pyfusion.cfg There are two types of access: I/ single diag on its own timebase II/ the original multi diag on a given timebase (i.e. that from flucstrcs) Stage 1 puts the file_info into .cfg file just for I/ single diag access. Ideally the file_info for II/ sho;d be in .cfg also. For stage I/, we call it with a file_info dict constructed on the spot as a dictionary with one just entry (for diags[0]). """ global lhd_summary # if no exception given and we are not debugging # note - exception=None is a valid entry, meaning tolerate no exceptions # so the "default" we use is False if exception == False and debug == 0: exception = Exception if diags is None: diags = "<n_e19>,b_0,i_p,w_p,dw_pdt,dw_pdt2".split(',') if len(np.shape(diags)) == 0: diags = [diags] if delay is None: delay = get_delay(shot) if times is None: if len(diags) > 1: times = np.linspace(0, 4, 4000) # this is a crude guess. # else leave it None else: # make sure it is an array times = np.array(times) vals = {} for diag in diags: if not (diag in file_info): warn('diagnostic {0} not found in shot {1}'.format(diag, shot), stacklevel=2) vals.update({diag: np.nan + times}) else: info = file_info[diag] varname = info[ 'name'] # refers to name for igetfile - can contain ':' subfolder = info['format'].split('@')[0] filepath = os.path.sep.join( [localigetfilepath, subfolder, info['format']]) if ':' in varname: (oper, varname) = varname.split(':') else: oper = None if info['format'].find('.csv') > 0: try: test = list(lhd_summary.keys()) except: csvfilename = acq_LHD + '/' + info['format'] if pyfusion.DBG() > 1: print('looking for lhd summary in' + csvfilename) if not os.path.exists(csvfilename): csvfilename += ".bz2" print('reloading {0}'.format(csvfilename)) lhd_summary = read_csv_data(csvfilename, header=3) # should make this more formal - last shots # from an 'extra' file, and finally, from shot info if shot > 117000: # fudge to get latest data lhd_summary = np.load(acq_LHD + '/LHD_summary.npz')['LHD'].tolist() print('loading newer shots from a separate file - fix-me') # val = lhd_summary[varname][shot-70000] # not needed # else: val = lhd_summary[varname][shot] valarr = np.double(val) + (times * 0) else: try: # now igetfile checks for .gz etc dg = igetfile(filepath, shot=shot, debug=debug - 1) except exception as details: if debug > 0: print('diag at {fp} not found'.format(fp=filepath)) print(details, details.args) dg = None #break # give up and try next diagnostic if dg is None: # messy - break doesn't do what I want? valarr = None else: nd = dg.vardict['DimNo'] if nd != 1: raise ValueError( 'Expecting a 1 D array in {0}, got {1}!'.format( dg.filename, nd)) # pre re. w = np.where(np.array(dg.vardict['ValName'])==varname)[0] matches = [ re.match(varname, nam) != None for nam in dg.vardict['ValName'] ] w = np.where(np.array(matches) != False)[0] # get the column(s) of the array corresponding to the name if (oper in 'sum,average,rms,max,min'.split(',')): if oper == 'sum': op = np.sum elif oper == 'average': op = np.average elif oper == 'min': op = np.min elif oper == 'std': op = np.std else: raise ValueError( 'operator {o} in {n} not known to get_basic_diagnostics' .format(o=oper, n=info['name'])) valarr = op(dg.data[:, nd + w], 1) else: if len(w) != 1: raise LookupError( 'Need just one instance of variable {0} in {1}' .format(varname, dg.filename)) if len(np.shape(dg.data)) != 2: raise LookupError( 'insufficient data for {0} in {1}'.format( varname, dg.filename)) valarr = dg.data[:, nd + w[0]] tim = dg.data[:, 0] - delay if oper == 'ddt': # derivative operator valarr = np.diff(valarr) / (np.average(np.diff(tim))) tim = (tim[0:-1] + tim[1:]) / 2.0 if oper == 'ddt2': # abd(ddw)*derivative operator dw = np.diff(valarr) / (np.average(np.diff(tim))) ddw = np.diff(dw) / (np.average(np.diff(tim))) tim = tim[2:] valarr = 4e-6 * dw[1:] * np.abs(ddw) if (len(tim) < 10) or (np.std(tim) < 0.1): raise ValueError('Insufficient points or degenerate' 'timebase data in {0}, {1}'.format( varname, dg.filename)) if times is not None: debug_(max(pyfusion.DEBUG, debug), level=5, key='interp') valarr = (stineman_interp(times, tim, valarr)) w = np.where(times > max(tim)) valarr[w] = np.nan else: times = tim if valarr is not None: vals.update({diag: valarr}) # create an extra time array to allow a cross check vals.update({'check_tm': times}) vals.update({'check_shot': np.zeros(len(times), dtype=np.int) + shot}) return (vals)
def get_basic_diagnostics(diags=None, shot=54196, times=None, delay=None, exception=False, debug=0): """ return a list of np.arrays of normally numeric values for the times given, for the given shot. """ global lhd_summary # if no exception given and we are not debugging # note - exception=None is a valid entry, meaning tolerate no exceptions # so the "default" we use is False if exception == False and debug == 0: exception = Exception if diags == None: diags = "<n_e19>,b_0,i_p,w_p,dw_pdt,dw_pdt2".split(',') if len(np.shape(diags)) == 0: diags = [diags] if delay == None: delay = get_delay(shot) if times == None: times = np.linspace(0, 4, 4000) times = np.array(times) vals = {} # create an extra time array to allow a cross check vals.update({'check_tm': times}) vals.update({'check_shot': np.zeros(len(times), dtype=np.int) + shot}) for diag in diags: if not (file_info.has_key(diag)): warn('diagnostic {0} not found in shot {1}'.format(diag, shot), stacklevel=2) vals.update({diag: np.nan + times}) else: info = file_info[diag] varname = info['name'] subfolder = info['format'].split('@')[0] filepath = os.path.sep.join( [localigetfilepath, subfolder, info['format']]) if ':' in varname: (oper, varname) = varname.split(':') else: oper = None if info['format'].find('.csv') > 0: try: test = lhd_summary.keys() except: print('reloading {0}'.format(info['format'])) lhd_summary = read_csv_data(acq_LHD + '/' + info['format'], header=3) val = lhd_summary[varname][shot] valarr = np.double(val) + (times * 0) else: debug_(max(pyfusion.DEBUG, debug), level=4, key='find_data') try: dg = igetfile(filepath, shot=shot, debug=debug - 1) except IOError: try: dg = igetfile(filepath + '.bz2', shot=shot, debug=debug - 1) except IOError: try: dg = igetfile(filepath + '.gz', shot=shot, debug=debug - 1) except exception: if debug > 0: print('diag at {fp} not found'.format( fp=filepath)) dg = None #break # give up and try next diagnostic if dg == None: # messy - break doesn't do what I want? valarr = None else: nd = dg.vardict['DimNo'] if nd != 1: raise ValueError( 'Expecting a 1 D array in {0}, got {1}!'.format( dg.filename, nd)) # pre re. w = np.where(np.array(dg.vardict['ValName'])==varname)[0] matches = [ re.match(varname, nam) != None for nam in dg.vardict['ValName'] ] w = np.where(np.array(matches) != False)[0] # get the column(s) of the array corresponding to the name if (oper in 'sum,average,rms,max,min'.split(',')): if oper == 'sum': op = np.sum elif oper == 'average': op = np.average elif oper == 'min': op = np.min elif oper == 'std': op = np.std else: raise ValueError( 'operator {o} in {n} not known to get_basic_diagnostics' .format(o=oper, n=info['name'])) valarr = op(dg.data[:, nd + w], 1) else: if len(w) != 1: raise LookupError( 'Need just one instance of variable {0} in {1}' .format(varname, dg.filename)) if len(np.shape(dg.data)) != 2: raise LookupError( 'insufficient data for {0} in {1}'.format( varname, dg.filename)) valarr = dg.data[:, nd + w[0]] tim = dg.data[:, 0] - delay if oper == 'ddt': # derivative operator valarr = np.diff(valarr) / (np.average(np.diff(tim))) tim = (tim[0:-1] + tim[1:]) / 2.0 if oper == 'ddt2': # abd(ddw)*derivative operator dw = np.diff(valarr) / (np.average(np.diff(tim))) ddw = np.diff(dw) / (np.average(np.diff(tim))) tim = tim[2:] valarr = 4e-6 * dw[1:] * np.abs(ddw) if (len(tim) < 10) or (np.std(tim) < 0.1): raise ValueError('Insufficient points or degenerate' 'timebase data in {0}, {1}'.format( varname, dg.filename)) valarr = (stineman_interp(times, tim, valarr)) w = np.where(times > max(tim)) valarr[w] = np.nan if valarr != None: vals.update({diag: valarr}) debug_(max(pyfusion.DEBUG, debug), level=5, key='interp') return (vals)
ndiags = None for (i, diag) in enumerate(diag_names.split(',')): data = dev.acq.getdata(shot, diag) if (i == 0): if len(np.shape(data.channels)) == 0: ndiags = 1 else: ndisgs = len(data.channels) if ndiags == 1: (fig, ax1) = pl.subplots() if offset is not None: data.timebase += offset data.plot_signals(labeleg='True', color='g') # ,downsamplefactor=10) not much diff pl.ylim(-abs(max(pl.ylim())), abs(max(pl.ylim()))) if ndiags == 1: ax2 = ax1.twinx() else: ax2 = pl.gca() ax2.set_autoscaley_on(True) for eg in egdiags.split(','): egdat = igetfile('{d}@{s}.dat'.format(s=shot, d=eg)) egdat.plot(1) ax2.set_ylim(-abs(max(ax2.get_ylim())), abs(max(ax2.get_ylim()))) pl.show()
# trivial example to illustrate the igetfile class # this does not use pyfusion, so the paths are hard coded. import pylab as pl import os import traceback from pyfusion.acquisition.LHD.read_igetfile import igetfile testfile = os.path.join(os.path.dirname(__file__), '[email protected]') try: dat = igetfile(testfile, plot=1) pl.figure() dat.plot() except Exception as reason: print('unable to read EG data from examples - maybe no files there "{r}"'. format(r=reason)) pl.figure() try: # nice if we could always have it in this place (may be a soft link( dat = igetfile(os.getenv('HOME') + '/data/datamining/cache/LHD/wp/[email protected]', plot=1) except Exception as reason: print('unable to read file - maybe no files there "{r}"'.format(r=reason)) traceback.print_exc() # plot the lot pl.figure() dat.plot()