def try_fetch_local(input_data, bare_chan): """ return data if in the local cache, otherwise None doesn't work for single channel HJ data. sgn (not gain) be only be used at the single channel base/fetch level """ for each_path in pyfusion.config.get('global', 'localdatapath').split('+'): # check for multi value shot number, e.g. utc bounds for W7-X data shot = input_data.shot # MDSplus style path to access sorted files into folders by shot path, patt = os.path.split(each_path) # print(patt) if len(patt) == 2*len(patt.replace('~','')): # a subdir code based on date subdir = '' # reverse the order of both the pattern and the shot so a posn is 0th char strshot = str(shot[0]) if len(np.shape(shot))>0 else str(shot) revshot = strshot[::-1] for i,ch in enumerate(patt): if (i%2) == 0: if ch != '~': raise LookupError("Can't parse {d} as a MDS style subdir" .format(d=patt)) continue subdir += revshot[ord(ch) - ord('a')] else: subdir = patt debug_(pyfusion.DEBUG, 3, key='MDS style subdir', msg=each_path) each_path = os.path.join(path, subdir) if isinstance(shot, (tuple, list, ndarray)): shot_str = '{s0}_{s1}'.format(s0=shot[0], s1=shot[1]) else: shot_str = str(shot) input_data.localname = os.path.join(each_path, '{shot}_{bc}.npz' .format(shot=shot_str, bc=bare_chan)) # original - data_filename %filename_dict) if pyfusion.VERBOSE>2: print(each_path,input_data.localname) files_exist = os.path.exists(input_data.localname) debug_(pyfusion.DEBUG, 3, key='try_local_fetch') if files_exist: intmp = np.any([st in input_data.localname.lower() for st in ['tmp', 'temp']]) # add anything you wish to warn about if pyfusion.VERBOSE>0 or intmp: if intmp: pyfusion.logging.warning('Using {f} in temporary directory!' .format(f=input_data.localname)) print('found local data in {f}'. format(f=input_data.localname)) break if not files_exist: return None signal_dict = newload(input_data.localname) if 'params' in signal_dict and 'name' in signal_dict['params'] and 'W7X_L5' in signal_dict['params']['name']: if signal_dict['params']['pyfusion_version'] < '0.6.8b': raise ValueError('probe assignments in error LP11-22 in {fn}' .format(fn=input_data.localname)) if np.nanmax(signal_dict['timebase']) == 0: pyfusion.logging.warning('making a fake timebase for {fn}' .format(fn=input_data.localname)) signal_dict['timebase'] = 2e-6*np.cumsum(1.0 + 0*signal_dict['signal']) coords = get_coords_for_channel(**input_data.__dict__) #ch = Channel(bare_chan, Coords('dummy', (0,0,0))) ch = Channel(bare_chan, coords) output_data = TimeseriesData(timebase=Timebase(signal_dict['timebase']), signal=Signal(signal_dict['signal']), channels=ch) # bdb - used "fetcher" instead of "self" in the "direct from LHD data" version # when using saved files, should use the name - not input_data.config_name # it WAS the config_name coming from the raw format. output_data.config_name = bare_chan # would be nice to get to the gain here - but how - maybe setup will get it output_data.meta.update({'shot':input_data.shot}) if 'params' in signal_dict: output_data.params = signal_dict['params'] if 'utc' in signal_dict['params']: output_data.utc = signal_dict['params'].get('utc',None) else: # yes, it seems like duplication, but no output_data.utc = None output_data.params = dict(comment = 'old npz file has no params') oldsrc = ', originally from ' + output_data.params['source'] if 'source' in output_data.params else '' output_data.params.update(dict(source='from npz cache' + oldsrc)) return(output_data)
import matplotlib.pyplot as plt import sys PF_path = os.getenv('PYFUSION_PATH','/home/bdb112/pyfusion/working/pyfusion/') print('assume pyfusion is at ', PF_path, ': can override by setting PYFUSION_PATH') sys.path.append(PF_path) from pyfusion.data.save_compress import newload # print(sys.argv) if len(sys.argv) < 2: print('plot_npz_data "filename"') else: filename = sys.argv.pop(1) verbose = 0 if len(sys.argv) < 2 else int(sys.argv[1]) dat = newload(filename, verbose=abs(verbose)) # -1 means info only no plot if verbose >= 0: plt.plot(dat['timebase'], dat['signal']) # hold if called from a bin directory - otherwise (e.g. interactive) don't # originally tested if '/bin' in argv[0], but this fails for run ~/bin/plot.. under ipython block_me = not hasattr(sys, 'ps1') print('block_me = {b}, args={a}'.format(b=block_me, a=sys.argv)) if 'params' in list(dat): import pprint pprint.pprint(dat['params'], indent=4) try: print('timebase is {0}, signal is {1}' .format(dat['timebasetype'], dat['signaltype'])) except:
#!/usr/bin/env python # this won't work from ~/bin unless we include pyfusion in PYTHONPATH #import os #print(os.path.dirname(__file__)) import matplotlib.pyplot as plt import sys sys.path.append('/home/bdb112/pyfusion/working/pyfusion/') from pyfusion.data.save_compress import newload # print(sys.argv) if len(sys.argv) < 2: print('plot_npz_data "filename"') else: filename = sys.argv[1] dat = newload(filename) plt.plot(dat['timebase'], dat['signal']) # hold if called from a bin directory - otherwise (e.g. interactive) don't plt.show('/bin' in sys.argv[0])