diff --git a/CHANGELOG b/CHANGELOG index ad866953ecbe4a7494ab9617b75be625b0d26a7b..f6e346cea7556fe4bc4e5dd4c5ab0932d66b3b8a 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,9 +1,45 @@ <<<<<<< HEAD -26.03.2019: Upadte to V3.2.0: +08.02.2020: Update to V3.4.0 + - Bugfix: download_images_by_times produzierte doppelte Werte im Zeit und Bildvektor + - + Update to V3.3.3: + - + Update to V3.3.2: + - + Update to V3.3.1: + - + Update to V3.3.0: + - + Update to V3.2.5: + + Update to V3.2.4: + + Update to V3.2.3: + - bugfix: finding right version for meta informations + Update to V3.2.2: + - bugfix: fix of paths due to movement of data from Test Archive to ArchiveDB; range overflow fix for calibration + - fix: timeout, closing of connections + - changes: modification of download_heatflux_mapping_reference(): + - The points of the vertical target in 'X' and 'Y' get now shifted and rotated to appear on top of the horizontal target in order to avaoid overlap when plotting. + - Added new boolean peremter 'get_thickness=False' triggers optional calculation of distance of profile points to adjacent profiles. This is used to derive a thickness of the profile at each point for integration of heat loads. + - changes: systematically used named parameter instead of positional + - changes: removed unecessary trigger call + - changes: made get_calib() flexible for program/t0/t1 input + - changes: fixes and improvements with portnr, T_version + - changes: testmode=False is now default + Update to V3.2.1: + - bugfixes: (1) load request, (2) AEF50 data got nuced with 0, fixed +26.03.2019: Update to V3.2.0: - scne model download possible - scene model reference download possible for heat flux data - downsampled temperature image stream possible - extration of temperature profiles possible + Update V3.1.2: + - bugfix: versioning and smaller bugs + Update V3.1.1: + - bugfix: path building, versioning of raw data +22.01.2019: Update to V3.1.0: + - Integrated load added as download function and new Data in ArchiveDB 27/28/29.11.2018: update to V3 - add file upload_heatflux.py - add plot_heatflux_example.py @@ -48,6 +84,8 @@ bugfixes in downloadversionIRdata: - fixed: wrong time intervall for TC divertor data Versions: +V3.4.0: chaching functionality included, request for all cameras included + Bugfixes +V3.3.0: code-cleaning, unification of variable names, new functions: get_trigger_from_PID, V3.2.0: download of scene models possible, temperature profiles can be extracted, downsampled temperature images available V3.1.0: add of divertor loads in the upload and the download V3.0.2: change the upload of heat flux from float64 to float32. extract profile accepts now also timewindows. diff --git a/downloadversionIRdata.py b/downloadversionIRdata.py index cd3d940a3b58c209cf28b4b54e2363662ede6cc2..2938d1a1235a22b7d5e1771893870ff15b2c77f1 100644 --- a/downloadversionIRdata.py +++ b/downloadversionIRdata.py @@ -4,7 +4,7 @@ Created on Wed Oct 25 15:51:46 2017 updated on Tue Aug 21 10:20:00 2018 last update on Fr Nov 23 15:37:00 2018 -Version: 3.3.3 +Version: 3.4.0 (Numbering: #of big changes(OP1.2a download V1, OP1.2b download V2, heatflux V3) . #of updates to add functionalities @@ -12,6 +12,7 @@ Version: 3.3.3 #number of updates for bug fixes ) @author: holn """ +version="V3.4.0" import numpy as np import IR_image_tools as IR_tools @@ -299,6 +300,9 @@ def download_NUC_by_times(port, starttime, stoptime, exposure, testmode=False, v def get_NUC_by_program(port, program, exposure, version=0, testmode=False, verbose=0): ''' + Loads NUC elements (gain, offset cold image, bad pixels) for an IR camera + in a given port and time interval. Depending on time and camera, reconstruct + the cold frame and/or compute the gain, offset from the hot and cold frame. ''' # prog=get_program_from_PID(program) # try: @@ -374,14 +378,19 @@ def get_NUC_by_times(port, starttime, stoptime, t_exp, version=0, testmode=False gain, offset = IR_tools.calculate_gain_offset_image(ci, None, coldref, hotref, verbose=verbose-1) gain[gain == np.inf] = 0 offset[offset == np.inf] = 0 - badpixels = find_badpixels(port, gain, offset, niterations=10, tolerance=10, verbose=verbose-1) + badpixels = find_badpixels(port, gain, offset, niterations=10, tolerance=10, verbose=verbose-1) gain_error = 0 offset_error = 0 return True, [gain, offset, ci, badpixels, gain_error, offset_error], ['gain', 'offset', 'cold', 'badpixels', 'gain_error', 'offset_error'] else: if verbose > 0: print('get_NUC_by_times: downloading NUC') - return download_NUC_by_times(port, starttime, stoptime, t_exp, testmode=testmode) + NUC_DL = download_NUC_by_times(port, starttime, stoptime, t_exp, testmode=testmode) + #True, images, ['gain', 'offset', 'cold', 'badpixels', 'gain_error', 'offset_error'] + if NUC_DL[0]: + badpixels = find_badpixels(port,NUC_DL[1][0],NUC_DL[1][1],niterations=10, tolerance=10, verbose=verbose-1) + NUC_DL[1][3]=badpixels + return NUC_DL elif OP == "OP1.2b": gain_error = 0 offset_error = 0 @@ -580,20 +589,20 @@ def download_background_by_times(port, starttime, stoptime, exposure, camera_fil except Exception as e: print('download_background_by_times: Error! ', e) goon = False - if goon: + if goon: n = 0 backtimes = [0] for backpar in signal_list['values']: if backpar['structure']['Texp'] == exposure: if port == 50:# camera=="INFRATEC" or camera=="infratec" or camera=="Infratec": if backpar['structure']['filter'] == camera_filter: - backtimes=[signal_list['dimensions'][2*n], signal_list['dimensions'][2*n+1]] + backtimes = [signal_list['dimensions'][2*n], signal_list['dimensions'][2*n+1]] else: - backtimes=[signal_list['dimensions'][2*n], signal_list['dimensions'][2*n+1]] + backtimes = [signal_list['dimensions'][2*n], signal_list['dimensions'][2*n+1]] n += 1 if backtimes[0] != 0: backdat = read_restdb(larchivepath+"DATASTREAM/V"+str(version)+"/_signal.json?from="+str(backtimes[0]-10)+"&upto="+str(backtimes[1]+10)) - if backdat[0]: + if backdat[0]: return backdat#[True, backdat[2]] else: print("download_background_by_times: Error! background image for requested exposure time(, filter) not found") @@ -604,7 +613,7 @@ def download_background_by_times(port, starttime, stoptime, exposure, camera_fil else: return False, 0, 0 elif OP == "OP1.2b": - NUC_DL =get_NUC_by_times(port, starttime, stoptime, t_exp=exposure, version=version, testmode=testmode, verbose=verbose-1)#download_NUC_by_times(port, t0, t1, t_exp, version) + NUC_DL = get_NUC_by_times(port, starttime, stoptime, t_exp=exposure, version=version, testmode=testmode, verbose=verbose-1)#download_NUC_by_times(port, t0, t1, t_exp, version) if NUC_DL[0] == False: raise Warning("download_background_by_times: NUC was not found") # return False, 0, 0 @@ -617,38 +626,38 @@ def download_background_by_times(port, starttime, stoptime, exposure, camera_fil # check quality of NUC elements gain[np.isnan(gain)] = 0 offset[np.isnan(offset)] = 0 - offset[offset<-1e100] = 0 + offset[offset < -1e100] = 0 return get_NUCed_background_by_times(port=port, t0=starttime, t1=stoptime, t_exp=exposure, cfilter=camera_filter, gain=gain, offset=offset, version=version, verbose=verbose-1) def get_NUCed_background_by_times(port, t0, t1, t_exp, cfilter, gain, offset, version=0, testmode=False, plot_it=False, verbose=0): """ OP1.2b function """ - exist, btime, backgroundframes=download_calibration_raw_files_by_time(port, t_exp, t0, t1, frametype=1, version=version, testmode=testmode, verbose=verbose-1) - camera = portcamdict["OP1.2b"]["AEF"+str(port)] + exist, btime, backgroundframes = download_calibration_raw_files_by_time(port, t_exp, t0, t1, frametype=1, version=version, testmode=testmode, verbose=verbose-1) + camera = portcamdict["OP1.2b"]["AEF"+str(port)] if verbose > 50: print("camera is", camera) - background=np.zeros(np.shape(backgroundframes[0]),dtype=np.uint64) + background = np.zeros(np.shape(backgroundframes[0]), dtype=np.uint64) for frame in backgroundframes: background += frame - background = np.asarray(background/len(backgroundframes),dtype=np.uint16) + background = np.asarray(background/len(backgroundframes), dtype=np.uint16) if plot_it: plt.figure() plt.imshow(background, vmin=np.median(background)-500, vmax=np.median(background)+500) plt.title("background image unnuced") if not camera.split("_")[0] == "Infratec": - background=apply_NUC([background], gain, offset)[0] - if plot_it: + background = apply_NUC([background], gain, offset)[0] + if plot_it: plt.figure() plt.imshow(background, vmin=np.median(background)-500, vmax=np.median(background)+500) plt.title("background image nuced") return exist, btime[0], background -def get_NUCed_coldframe_by_program(port, program, exposure=None, version=0, +def get_NUCed_coldframe_by_program(port, program, exposure=None, version=0, testmode=False, plot_it=False, verbose=0): - """ - Load the raw cold refences frame taken bofore this program and NUC it with + """ + Load the raw cold refences frame taken bofore this program and NUC it with the NUC of the previous program (or next one, if the previous does not exist). INPUT @@ -670,7 +679,7 @@ def get_NUCed_coldframe_by_program(port, program, exposure=None, version=0, verbose: integer, optional feedback level (details of print messages) (OPTIONAL: if not provided, only ERROR output) - + RESULT ------ exist: bool @@ -685,7 +694,7 @@ def get_NUCed_coldframe_by_program(port, program, exposure=None, version=0, except: print('get_NUCed_coldframe_by_program: ERROR! no exposure time found!') return False, [] - + t_exp = exposure[0] else: t_exp = exposure @@ -697,29 +706,29 @@ def get_NUCed_coldframe_by_program(port, program, exposure=None, version=0, except: print('get_NUCed_coldframe_by_program: ERROR! no cold frame found!') return False, [] - + if exist: cold_raw = data[2] porg_nr = int(program.split('.')[1]) - + ref_program = '{0}.{1:03d}'.format(program.split('.')[0], porg_nr-1) exist2, data, desc = get_NUC_by_program(port, ref_program, t_exp, version=version, testmode=testmode, verbose=verbose-1) if exist2: - coldframe = apply_NUC([cold_raw],data[0],data[1])[0] + coldframe = apply_NUC([cold_raw], data[0], data[1])[0] if verbose > 0: print('get_NUCed_coldframe_by_program: using NUC of program {0}'.format(ref_program)) else: print('get_NUCed_coldframe_by_program: WARNING! no adjacent program found! --> cold frame is not NUCed') coldframe = cold_raw - + if plot_it: - plt.figure(figsize=[8,4]) - plt.subplot(1,2,1) - plt.imshow(cold_raw, vmin=np.percentile(cold_raw, 1), vmax=np.percentile(cold_raw, 99) ) + plt.figure(figsize=[8, 4]) + plt.subplot(1, 2, 1) + plt.imshow(cold_raw, vmin=np.percentile(cold_raw, 1), vmax=np.percentile(cold_raw, 99)) plt.colorbar() plt.title('averaged raw\nof {0}'.format(program)) - plt.subplot(1,2,2) - plt.imshow(coldframe, vmin=np.percentile(coldframe, 1), vmax=np.percentile(coldframe, 99) ) + plt.subplot(1, 2, 2) + plt.imshow(coldframe, vmin=np.percentile(coldframe, 1), vmax=np.percentile(coldframe, 99)) plt.colorbar() plt.title('NUCed based on\ngain/offset from {0}'.format(ref_program)) plt.suptitle('cold frame of port {0}'.format(port)) @@ -728,7 +737,7 @@ def get_NUCed_coldframe_by_program(port, program, exposure=None, version=0, else: print('get_NUCed_coldframe_by_program: ERROR! No cold frame found for program {0}!'.format(program)) coldframe = [] - + return exist, coldframe @@ -744,16 +753,16 @@ def download_raw_images_by_program(port, program, time_window=0, version=0, test # starttime=prog[0]['trigger']['1'][0] # stoptime=prog[0]['trigger']['6'][0] if exist: - if type(time_window)==list or type(time_window)==np.ndarray: - if len(time_window)>2 or time_window[0]>1000: + if type(time_window) == list or type(time_window) == np.ndarray: + if len(time_window) > 2 or time_window[0] > 1000: raise Exception("download_raw_images_by_program: invalid input for the time_window!") - tstart=time_window[0] - tstop=time_window[1] - if tstop<tstart: + tstart = time_window[0] + tstop = time_window[1] + if tstop <tstart: raise Exception("download_raw_images_by_program: t_stop before t_start") return download_raw_images_by_times(port, int(starttime+tstart*1e9), int(starttime+tstop*1e9), version, testmode=testmode, verbose=verbose) else: - if time_window==0: + if time_window == 0: return download_raw_images_by_times(port, starttime, stoptime, version, testmode=testmode, verbose=verbose) else: return download_raw_images_by_times(port, starttime, int(starttime+time_window*1e9), version, testmode=testmode, verbose=verbose) @@ -764,23 +773,23 @@ def download_raw_images_by_program(port, program, time_window=0, version=0, test def download_raw_images_by_times(port, starttime, stoptime, version=0, intervalSize=1E9, testmode=False, verbose=0): """ """ - OP = IR_tools.get_OP_by_time(time_ns=starttime) + OP = IR_tools.get_OP_by_time(time_ns=starttime) if version == 0: version = get_latest_version(portpathdict[OP]["AEF"+str(port)]+"raw_DATASTREAM", t_from=starttime, t_to=stoptime, testmode=testmode) if testmode: - larchivepath = testarchivepath+project+"/"+portpathdict[OP]["AEF"+str(port)]+"raw_DATASTREAM/V"+str(version)+"/0/raw" + larchivepath = testarchivepath+project+"/"+portpathdict[OP]["AEF"+str(port)]+"raw_DATASTREAM/V"+str(version)+"/0/raw" else: - larchivepath = archivepath+project+"/"+portpathdict[OP]["AEF"+str(port)]+"raw_DATASTREAM/V"+str(version)+"/0/raw" - return download_images_by_times(larchivepath, starttime=starttime, stoptime=stoptime, intervalSize=intervalSize, verbose=verbose)#version=version, - -def download_images_by_times(larchivepath, starttime, stoptime, intervalSize=1E9, verbose=0):#version=0, + larchivepath = archivepath+project+"/"+portpathdict[OP]["AEF"+str(port)]+"raw_DATASTREAM/V"+str(version)+"/0/raw" + return download_images_by_times(larchivepath, starttime=starttime, stoptime=stoptime, intervalSize=intervalSize, verbose=verbose)#version=version, + +def download_images_by_times(larchivepath, starttime, stoptime, intervalSize=1E9, verbose=0):#version=0, """ """ if '_raw' in larchivepath: - typo = np.uint16 + typo = np.uint16 else: typo = np.float32 - if (stoptime-starttime)/intervalSize>1: + if (stoptime-starttime)/intervalSize > 1: nrinterv = int(np.ceil((stoptime-starttime)/intervalSize)) if verbose > 0: print("download_images_by_times: time_window to large, splitting {0}s interval into {1} smaller fractions".format((stoptime-starttime)/1e9, nrinterv)) @@ -798,7 +807,7 @@ def download_images_by_times(larchivepath, starttime, stoptime, intervalSize=1E9 print("download_images_by_times: reading from\n {0}".format(url)) res = urllib.request.urlopen(url) signal_list = json.loads(res.read().decode('utf-8')) - res.close() + res.close() images = [np.array(ele, dtype=typo) for ele in signal_list['values']] # signal=np.array(signal_list['values'],dtype=np.uint16) t = np.array(signal_list['dimensions']) @@ -807,20 +816,20 @@ def download_images_by_times(larchivepath, starttime, stoptime, intervalSize=1E9 allimages = images.copy() time = t else: - allimages = allimages+images#np.append(ressignal, signal,axis=0) - time = np.append(time, t) + allimages = allimages+images[1:]#np.append(ressignal, signal,axis=0) + time = np.append(time, t[1:]) del images, t success = True except urllib.error.URLError as e: - print('download_images_by_times: Error in sub-interval {0}! {1}'.format(i, e)) + print('download_images_by_times: Error in sub-interval {0}! {1}'.format(i, e)) except Exception as e: - print('download_images_by_times: Error in sub-interval {0}! {1}'.format(i, e)) - return success, time,allimages + print('download_images_by_times: Error in sub-interval {0}! {1}'.format(i, e)) + return success, time, allimages else: try: if verbose > 100: print(larchivepath+"/_signal.json?from="+str(starttime-10)+"&upto="+str(stoptime)) - res = urllib.request.urlopen(larchivepath+"/_signal.json?from="+str(starttime-10)+"&upto="+str(stoptime)) + res = urllib.request.urlopen(larchivepath+"/_signal.json?from="+str(starttime-10)+"&upto="+str(stoptime)) signal_list = json.loads(res.read().decode('utf-8')) res.close() images = [np.array(ele, dtype=typo) for ele in signal_list['values']] @@ -830,10 +839,10 @@ def download_images_by_times(larchivepath, starttime, stoptime, intervalSize=1E9 return True, t, images except urllib.error.URLError as e: print('download_images_by_times: Error! ', e) - return False, 0,-1 + return False, 0, -1 except Exception as e: print('download_images_by_times: Error! ', e) - return False, 0,-1 + return False, 0, -1 if fastDL: def download_raw_images_by_program_via_png(port, program, time_window=0, version=0, @@ -849,12 +858,12 @@ if fastDL: # return False, [0], [0] # starttime=prog[1]['trigger']['1'][0] # stoptime=prog[1]['trigger']['6'][0] - + trigger_exist, _, starttime, stoptime = get_trigger_from_PID(program, port, testmode, verbose=verbose-1) if not trigger_exist: print("download_raw_images_by_program_via_png: Error! trigger not found, cannot download the data") OP = IR_tools.get_OP_by_time(time_ns=starttime) - + # get raw data from latest or requested version if version == 0: version = get_latest_version(portpathdict[OP]["AEF"+str(port)]+"raw_DATASTREAM", testmode=testmode, program=program) @@ -862,17 +871,17 @@ if fastDL: larchivepath = testarchivepath+project+"/"+portpathdict[OP]["AEF"+str(port)]+"raw_DATASTREAM/V"+str(version)+"/0/raw" else: larchivepath = archivepath+project+"/"+portpathdict[OP]["AEF"+str(port)]+"raw_DATASTREAM/V"+str(version)+"/0/raw" - + return download_images_by_time_via_png(larchivepath, starttime, stoptime, time_window=time_window, threads=threads, version=version, verbose=verbose-1) - - + + def download_images_by_time_via_png(larchivepath, starttime, stoptime, time_window=0, threads=1, version=0, verbose=0, framerate='max'): """ """ - success = True + success = True if type(time_window) == list: tstart = time_window[0] tstop = time_window[1] @@ -887,7 +896,7 @@ if fastDL: print('download_images_by_time_via_png: Warning! time_window cropped by end of data') # stdate=datetime.datetime.utcfromtimestamp((starttime-100)/1e9+tstart) # stdate=stdate.isoformat() -# enddate=datetime.datetime.utcfromtimestamp((starttime)/1e9+tstop) +# enddate=datetime.datetime.utcfromtimestamp((starttime)/1e9+tstop) # enddate=enddate.isoformat() else: # stdate=datetime.datetime.utcfromtimestamp((starttime-100)/1e9) @@ -895,11 +904,11 @@ if fastDL: time_from = starttime-100 if time_window == 0: time_to = stoptime -# enddate=datetime.datetime.utcfromtimestamp(stoptime/1e9) +# enddate=datetime.datetime.utcfromtimestamp(stoptime/1e9) # enddate=enddate.isoformat() else: time_to = starttime+int(time_window*1E9) -# enddate=datetime.datetime.utcfromtimestamp((starttime)/1e9+time_window) +# enddate=datetime.datetime.utcfromtimestamp((starttime)/1e9+time_window) # enddate=enddate.isoformat() #"2017-11-15 08:00:00" try: @@ -909,13 +918,13 @@ if fastDL: # print('download_images_by_time_via_png: Error loading times from ', larchivepath, stdate.replace("T", " "), enddate.replace("T", " ")) print('download_images_by_time_via_png: Error loading times from {0} between [{1}, {2}]'.format(larchivepath, time_from, time_to)) raise Warning(E) -# return False, [0], [0] - - if framerate != 'max': +# return False, [0], [0] + + if framerate != 'max': if verbose > 5: print("download_images_by_time_via_png: downsampling active; number of original frames:", len(times)) if type(framerate) == float or type(framerate) == int: - realrate=1e9/((times[0]-times[-1])[0]/len(times)) + realrate = 1e9/((times[0]-times[-1])[0]/len(times)) if framerate < realrate: steps = int(round(realrate/framerate, 0)) dummy = [] @@ -933,7 +942,7 @@ if fastDL: imag = download_last_raw_image_by_time(larchivepath, ele[0]-10, ele[0]+10) if imag[0]: time.append(ele[0]) - images.append(np.array(imag[1],dtype=np.uint16)) + images.append(np.array(imag[1], dtype=np.uint16)) else: success = False return success, np.array(time), images @@ -950,29 +959,29 @@ if fastDL: resultdict = [] for i in range(threads): if verbose > 0: - print("download_images_by_time_via_png: Start Thread ", i+1) - TH=download_images_thread(i, larchivepath, tim[intervalls[i]:intervalls[i+1]],resultdict, version) + print("download_images_by_time_via_png: Start Thread ", i+1) + TH = download_images_thread(i, larchivepath, tim[intervalls[i]:intervalls[i+1]], resultdict, version) jobs.append(TH) TH.start() for p in jobs: p.join() if verbose > 0: print("download_images_by_time_via_png: all threads are done") - order=[] + order = [] for ele in resultdict: order.append(ele[0]) if len(np.where(np.asarray(ele[1])==False)[0])>0: - success=False - times=[]#np.array(resultdict[order.index(0)][2]) + success=False + times = []#np.array(resultdict[order.index(0)][2]) images=[]#np.array(resultdict[order.index(0)][3]) for i in range(threads): - images=images+resultdict[order.index(i)][3] - times=times+resultdict[order.index(i)][2] - resultdict[order.index(i)]=[] + images = images+resultdict[order.index(i)][3] + times = times+resultdict[order.index(i)][2] + resultdict[order.index(i)] = [] del resultdict return success, np.array(times), images - - + + class download_images_thread(threading.Thread): def __init__(self, threadID, larchivepath, times, resultlist, version=0): threading.Thread.__init__(self) @@ -982,11 +991,11 @@ if fastDL: self.resultlist = resultlist self.version = version def run(self): - images=[] - time=[] - successes=[] + images = [] + time = [] + successes = [] for i in self.times: - imag=download_last_raw_image_by_time(self.archivepath, i-10, i+10, version=self.version) + imag = download_last_raw_image_by_time(self.archivepath, i-10, i+10)#, version=self.version if imag[0]: images.append(np.array(imag[1],dtype=np.uint16)) time.append(i) @@ -1005,23 +1014,23 @@ if fastDL: self.archivepath = larchivepath self.resultlist = resultlist self.version = version - self.gain=gain - self.offset=offset - self.background=background - self.LUT=LUT - self.refT=refT - self.gain_error=gain_error - self.offset_error=offset_error - self.give_ERROR=give_ERROR - self.FOV=FOV - self.badpixels=badpixels - self.verbose=verbose + self.gain = gain + self.offset = offset + self.background = background + self.LUT = LUT + self.refT = refT + self.gain_error = gain_error + self.offset_error = offset_error + self.give_ERROR = give_ERROR + self.FOV = FOV + self.badpixels = badpixels + self.verbose = verbose def run(self): - images=[] - time=[] - successes=[] + images = [] + time = [] + successes = [] for i in self.times: - imag=download_last_raw_image_by_time(self.archivepath, i-10, i+10, version=self.version) + imag = download_last_raw_image_by_time(self.archivepath, i-10, i+10)#, version=self.version if imag[0]: images.append(np.array(imag[1],dtype=np.uint16)) time.append(i) @@ -1029,15 +1038,15 @@ if fastDL: else: successes.append(False) if self.give_ERROR: - success, images, error_images=apply_calib_on_raw(images, self.background, self.LUT, self.refT, self.gain, self.offset, self.gain_error, self.offset_error, False, self.give_ERROR, verbose=self.verbose-1) + success, images, error_images = apply_calib_on_raw(images, self.background, self.LUT, self.refT, self.gain, self.offset, self.gain_error, self.offset_error, False, self.give_ERROR, verbose=self.verbose-1) else: success, images=apply_calib_on_raw(images, self.background, self.LUT, self.refT, self.gain, self.offset, self.gain_error, self.offset_error, False, self.give_ERROR, verbose=self.verbose-1) for i in range(len(images)): - images[i]=(images[i]*self.FOV).astype(np.float32) + images[i] = (images[i]*self.FOV).astype(np.float32) if self.verbose > 0: print(datetime.datetime.now(), "convert_raw_to_temp_thread: correcting bad pixels") - images=IR_tools.correct_images(images, self.badpixels, verbose=self.verbose-1) + images = IR_tools.correct_images(images, self.badpixels, verbose=self.verbose-1) self.resultlist.append([self.threadID, successes, time, images]) class NUC_raw_thread(threading.Thread): @@ -1066,7 +1075,7 @@ if fastDL: time=[] successes=[] for i in self.times: - imag=download_last_raw_image_by_time(self.archivepath, i-10, i+10, version=self.version) + imag=download_last_raw_image_by_time(self.archivepath, i-10, i+10)#, version=self.version if imag[0]: images.append(np.array(imag[1],dtype=np.uint16)) time.append(i) @@ -1312,7 +1321,7 @@ def download_FLIR_Psets(larchivepath, timess, threads, versions, verbose=0): tsets=[] return exist, time, frames, tsets -def download_last_raw_image_by_time(larchivepath, starttime, stoptime, version=0): +def download_last_raw_image_by_time(larchivepath, starttime, stoptime):#, version=0 """ """ try: @@ -1711,12 +1720,12 @@ def get_TC_data_for_port_by_program(port, program, part=0, version=0, verbose=0) # stoptime=prog[0]['trigger']['6'][0] exist, _, starttime, stoptime = get_trigger_from_PID(program, port, testmode=False, verbose=verbose-1) if exist: - return get_TC_data_for_port(port, starttime, stoptime, part, version) + return get_TC_data_for_port(port, starttime, stoptime, part)#, version) else: #except: print("get_TC_data_for_port_by_program: Error! cannot find the program") return False, 0, 0 -def get_TC_data_for_port(port, starttime, stoptime, part=0, version=0): +def get_TC_data_for_port(port, starttime, stoptime, part=0):#, version=0 """ """ urlstart="http://archive-webapi.ipp-hgw.mpg.de/ArchiveDB/raw/W7X/CoDaStationDesc.115/DataModuleDesc.19471_DATASTREAM/" @@ -2031,26 +2040,26 @@ def get_temp_from_raw_by_program(portnr, program, time_window=0, emi=0.8, T_vers if version == 0: version = get_latest_version(portpathdict[OP]["AEF"+str(portnr)]+"raw_DATASTREAM", testmode=testmode, program=program) if testmode: - larchivepath=testarchivepath+project+"/"+portpathdict[OP]["AEF"+str(portnr)]+"raw_DATASTREAM/V"+str(version)+"/0/raw" + larchivepath = testarchivepath+project+"/"+portpathdict[OP]["AEF"+str(portnr)]+"raw_DATASTREAM/V"+str(version)+"/0/raw" else: - larchivepath=archivepath+project+"/"+portpathdict[OP]["AEF"+str(portnr)]+"raw_DATASTREAM/V"+str(version)+"/0/raw" + larchivepath = archivepath+project+"/"+portpathdict[OP]["AEF"+str(portnr)]+"raw_DATASTREAM/V"+str(version)+"/0/raw" if verbose > 0: print(datetime.datetime.now(), "get_temp_from_raw_by_program: raw download start") if fastDL: - exist, time, frames=download_images_by_time_via_png(larchivepath, starttime=t1, stoptime=t6, time_window=time_window, version=version, threads=threads, verbose=verbose-1, framerate=framerate) + exist, time, frames = download_images_by_time_via_png(larchivepath, starttime=t1, stoptime=t6, time_window=time_window, version=version, threads=threads, verbose=verbose-1, framerate=framerate) else: - exist, time, frames=download_raw_images_by_program(portnr, program, time_window, version, testmode=testmode, verbose=verbose-1) + exist, time, frames = download_raw_images_by_program(portnr, program, time_window, version, testmode=testmode, verbose=verbose-1) if exist: - frames=[im.swapaxes(0,1) for im in frames] + frames = [im.swapaxes(0,1) for im in frames] if not exist: raise Warning("get_temp_from_raw_by_program: data not found in database!") return False, [0], [0], False if verbose > 0: print(datetime.datetime.now(), "get_temp_from_raw_by_program: raw download finished") # calibrate frames - FOV=get_FOV_mask(portnr) + FOV = get_FOV_mask(portnr) if use_firstframe_as_background: - bim=apply_NUC([frames[0]], gain, offset) + bim = apply_NUC([frames[0]], gain, offset) background=get_average_background_recangle(portnr, bim[0]) if give_ERROR: success, frames, error_images=apply_calib_on_raw(frames, background, LUT,refT, gain, offset, gain_error, offset_error, False, give_ERROR, verbose=verbose-1) @@ -2537,7 +2546,7 @@ def get_calib_data(port, program=None, t0=None, t1=None, t6=None, emissivity=0.8 # treat cameras with and w/o filters differently if cfilter==0 and not Camera.split("_")[0] == "Infratec": - # --- Infratec Camera case --- + # --- Ircam Camera case --- if verbose > 0: print('get_calib_data: getting NUC arrays') NUC_DL=get_NUC_by_times(port, t0, t1, t_exp, version, testmode, verbose=verbose-1)#download_NUC_by_times(port, t0, t1, t_exp, version) @@ -2584,7 +2593,7 @@ def get_calib_data(port, program=None, t0=None, t1=None, t6=None, emissivity=0.8 raise Warning("get_calib_data: cannot find the first frame of the discharge, reconstruction failed") # return False, 0, LUT, 0, gain, offset, badpixels, t_exp, cfilter, gain_error, offset_error else: - # --- Ircam Camera case --- + # --- Infratec Camera case --- gain = 0 offset = 0 badpixels = 0 @@ -2795,9 +2804,9 @@ def get_average_background_recangle(port, image): """ """ try: - points=valid_background_rectangle[port] + points = valid_background_rectangle[port] # FOV=get_FOV_mask(port) - dummy=image[points[1]:points[3], points[0]:points[2]]#FOV*image# + dummy = image[points[1]:points[3], points[0]:points[2]]#FOV*image# return np.min(dummy[np.nonzero(dummy)]) except Exception as E: print('get_average_background_recangle: Error! ', E) @@ -2806,14 +2815,14 @@ def get_average_background_recangle(port, image): def estimate_offset(port, program, plot_it=False, verbose=0): """ """ - explist=[1,2,3,4,5,6,7,8,9] - meanlist=[] - exlist=[] - FOV=get_FOV_mask(port) + explist = [1, 2, 3, 4, 5, 6, 7, 8, 9] + meanlist = [] + exlist = [] + FOV = get_FOV_mask(port) for exposure in explist: - exist, time, frame=download_background_by_program(port, program, exposure) + exist, time, frame = download_background_by_program(port, program, exposure) if exist: - meanlist.append(np.mean(frame[np.where(FOV==1)])) + meanlist.append(np.mean(frame[np.where(FOV == 1)])) exlist.append(exposure) if len(meanlist)>=2: # print(exlist,meanlist) @@ -2831,8 +2840,8 @@ def estimate_offset(port, program, plot_it=False, verbose=0): else: return -1 -def download_heatflux_by_program(port, program, time_window=0, threads=1, testmode=False, - version=0, verbose=0, givealpha=False,request=True,moffset=0): +def download_heatflux_by_program(port, program, time_window=0, testmode=False, + version=0, verbose=0, givealpha=False,request=True,moffset=0):#threads=1, """ port: string or integer program: string @@ -2972,22 +2981,22 @@ def download_heatflux_mapping_reference(timepoint=None, version=0, testmode=Fals """ return exist(boolean) and dictonary of the mappings informations """ - if timepoint==None: - timepoint=int(TimeToNs([2017,9,26], [8, 0, 0, 0])) + if timepoint == None: + timepoint = int(TimeToNs([2017,9,26], [8, 0, 0, 0])) if testmode: - base=testarchivepath + base = testarchivepath else: - base=archivepath + base = archivepath # OP = IR_tools.get_OP_by_time(time_ns=timepoint) if version == 0: version = get_latest_version("QRT_IRCAM/Mapping_reference_DATASTREAM", project=project_ana, testmode=testmode, t_from=timepoint) - larchivepath=base+project_ana+"/"+"QRT_IRCAM/Mapping_reference_DATASTREAM/V"+str(version)+"/0/reference" + larchivepath = base+project_ana+"/"+"QRT_IRCAM/Mapping_reference_DATASTREAM/V"+str(version)+"/0/reference" ### test for the testsample### # if version == 0: # version = get_latest_version("QRT_IRCAM_Test/Mapping_reference_Test_1_PARLOG", project=project_ana, testmode=testmode) # larchivepath=base+project_ana+"/QRT_IRCAM_Test/Mapping_reference_Test_1_DATASTREAM/V"+str(version)+"/0/reference" ### end of testsample ### - exist, time, frames=download_images_by_times(larchivepath, starttime=timepoint, stoptime=int(timepoint+1e9), verbose=verbose-1) + exist, time, frames = download_images_by_times(larchivepath, starttime=timepoint, stoptime=int(timepoint+1e9), verbose=verbose-1) mappings={} if exist: mappings['s']=frames[0] @@ -3104,13 +3113,13 @@ def download_heatflux_scene_model_reference(port, timepoint=None, program=None, """ return exist(boolean) and dictonary of the mappings informations """ - if type(port)==int or type(port)==float: - portnam="AEF"+str(port) - elif type(port)==str: - portnam=port - if timepoint==None and program==None: - timepoint=int(TimeToNs([2017,8,28], [8, 0, 0, 0])) - elif timepoint==None: + if type(port) == int or type(port) == float: + portnam = "AEF"+str(port) + elif type(port) == str: + portnam = port + if timepoint == None and program == None: + timepoint = int(TimeToNs([2017,8,28], [8, 0, 0, 0])) + elif timepoint == None: # prog=get_program_from_PID(program) # if prog[0]: # timepoint=prog[1]['trigger']['1'][0] @@ -3148,7 +3157,7 @@ def download_heatflux_scene_model_reference(port, timepoint=None, program=None, goon=False if goon: timepoint=signal_list['values'][0] - exist, time, frames = download_images_by_times(larchivepath, starttime=timepoint-10, stoptime=int(timepoint+1e8), version=version, verbose=verbose-1) + exist, time, frames = download_images_by_times(larchivepath, starttime=timepoint-10, stoptime=int(timepoint+1e8), verbose=verbose-1) del time mappings={} if exist: @@ -3398,8 +3407,36 @@ def extract_temperature_profile_from_DL(port, time, images, profile, finger=None ------ port: int or str the camera port as number or full string (e.g. 'AEF10') - return exist, time, s in m, heat flux in W/m2 - time_point default (None) returns entire shot. + time: array or numpy array + the time vector for the given images + images: numpy array + temperature flux images, from which the profile should be extracted + profile: + + finger: + + time_window: + + inputchecked: + + verbose: integer, optional + feedback level (details of print messages) + reference_time : float, optional, default is 0 + reference timepoint for the mapping data + RESULT + ------ + exist: boolean + indicates whether data was found (True) or not (False) + + time + s in m + heat flux in W/m2 + + + + + NOTES + ----- """ goon = True if time_window == None: @@ -3602,7 +3639,7 @@ def download_divertor_load(port, targetmodule=None, program=None, tstart=None, if exist == False: now = datetime.datetime.now() if verbose > 0: - print(now, "download_divertor_load: divertor_load data is not available, creating request") + print(now, "download_divertor_load: divertor_load data is not available") if request: try: programid=AKF_2.get_program_id(tstart) @@ -3688,7 +3725,7 @@ def download_scene_model(port, program=None, timepoint=None, version=0, testmode if goon: timepoint=signal_list['values'][0]['meta-data']['timestamp'] height=signal_list['values'][0]['meta-data']['height'] - exist, time, frames = download_images_by_times(larchivepath, starttime=timepoint-10, stoptime=int(timepoint+1e8), version=version, verbose=verbose-1) + exist, time, frames = download_images_by_times(larchivepath, starttime=timepoint-10, stoptime=int(timepoint+1e8), verbose=verbose-1) del time stacked_image = np.array(frames[0], dtype='float64') channels = np.array(np.vsplit(stacked_image, stacked_image.shape[0]/height)) @@ -3718,6 +3755,8 @@ the following functions are copied from W7xrest.read_restdb to remove this depen def read_restdb_old(request_url): """ Reads JSON data from W7-X REST API + INPUT + ------ Returns ------