diff --git a/__pycache__/IR_config_constants.cpython-36.pyc b/__pycache__/IR_config_constants.cpython-36.pyc deleted file mode 100644 index 225fdbe5060b98d544786f1ccecbf0c35244f8a4..0000000000000000000000000000000000000000 Binary files a/__pycache__/IR_config_constants.cpython-36.pyc and /dev/null differ diff --git a/__pycache__/IR_image_tools.cpython-36.pyc b/__pycache__/IR_image_tools.cpython-36.pyc deleted file mode 100644 index f9cc1ae14ab9de1a0420d2be88bd8c426a0bb0f1..0000000000000000000000000000000000000000 Binary files a/__pycache__/IR_image_tools.cpython-36.pyc and /dev/null differ diff --git a/__pycache__/downloadversionIRdata.cpython-36.pyc b/__pycache__/downloadversionIRdata.cpython-36.pyc deleted file mode 100644 index a1277411396bcf5c6940f6c8cf62db7696bba8c1..0000000000000000000000000000000000000000 Binary files a/__pycache__/downloadversionIRdata.cpython-36.pyc and /dev/null differ diff --git a/downloadversionIRdata.py b/downloadversionIRdata.py index a49b778303718ed565f2eebf297c505c28458ea1..b90c6681e8926cbc751e429462bc93e75fb1cf10 100644 --- a/downloadversionIRdata.py +++ b/downloadversionIRdata.py @@ -301,6 +301,8 @@ def get_NUC_by_times(port,starttime,endtime,t_exp,version=0,verbose=0): amap = np.load(join(IRCamColdframes_fittingpath, filestring + '_a.npy')) bmap = np.load(join(IRCamColdframes_fittingpath, filestring + '_b.npy')) cirebuild = IR_tools.reconstruct_coldframe(t_exp, sT, amap, bmap, coldref) + if verbose>0: + print('get_NUC_by_times: calculate gain, offset and bad pixels') gain, offset = IR_tools.calculate_gain_offset_image(cirebuild, None, coldref, hotref,verbose=verbose-1) gain[gain == np.inf] = 0 offset[offset == np.inf] = 0 @@ -309,6 +311,8 @@ def get_NUC_by_times(port,starttime,endtime,t_exp,version=0,verbose=0): offset_error=0 return True,[gain,offset,cirebuild,badpixels,gain_error,offset_error],['gain','offset','cold','badpixels','gain_error','offset_error'] elif (port == 11) or (port == 21): + if verbose>0: + print('get_NUC_by_times: downloading NUC') # coldref, hotref = IR_tools.load_ref_images('AEF' + str(port), t_exp) gotit,hotcold,describtion=download_hot_cold_reference_by_times(port,t_exp) if gotit: @@ -329,6 +333,8 @@ def get_NUC_by_times(port,starttime,endtime,t_exp,version=0,verbose=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,endtime,t_exp) elif OP=="OP1.2b": gain_error=0 @@ -858,9 +864,9 @@ if fastDL: images,error_images=apply_NUC(images,self.gain,self.offset,self.gain_error,self.offset_error,self.give_ERROR) else: images=apply_NUC(images,self.gain,self.offset,self.gain_error,self.offset_error,self.give_ERROR) - for i in range(len(images)): images[i]=(images[i]*self.FOV).astype(np.float32) + if self.verbose>0: print(datetime.datetime.now(),"NUC_raw_thread: correcting bad pixels") images=IR_tools.correct_images(images,self.badpixels,verbose=self.verbose-1) @@ -1534,7 +1540,7 @@ def get_temp_from_raw_by_program_V1(portnr,program,time_window=0,emi=0.8,diverto version=0,intervalSize=1E9,give_ERROR=False,verbose=0): """ """ - background,LUT,refT,gain,offset,badpixels,t_exp,cfilter,gain_error,offset_error=get_calib_data(portnr,program,emi,1,version,verbose=verbose-1) + background,LUT,refT,gain,offset,badpixels,t_exp,cfilter,gain_error,offset_error=get_calib_data(portnr,program=program,emissivity=emi,T_version=1,version=version,verbose=verbose-1) # prog=AKF_1.get_program_from_PID(program) try: t_program = AKF_2.get_program_from_to(program) @@ -1634,12 +1640,10 @@ def get_temp_from_raw_by_program(portnr,program,time_window=0,emi=0.8,T_version= FLIR=False prog=get_program_from_PID(program) if prog[0]: - t0=prog[1]['trigger']['0'][0] t1=prog[1]['trigger']['1'][0] t6=prog[1]['trigger']['6'][0] success=True OP=IR_tools.get_OP_by_time(time_ns=t1) - if type(portnr) is str: try: camera=portcamdict[OP][portnr] @@ -1651,9 +1655,10 @@ def get_temp_from_raw_by_program(portnr,program,time_window=0,emi=0.8,T_version= goon=True except Exception as E: raise Exception("get_temp_from_raw_by_program: unknown Port!"+E) - elif type(portnr) is int: + elif isinstance(portnr, (int, np.integer, float, np.float)): FLIR=False goon=True + portnr=int(portnr) else: goon=False if not goon: @@ -1739,7 +1744,7 @@ def get_temp_from_raw_by_program(portnr,program,time_window=0,emi=0.8,T_version= print("get_temp_from_raw_by_program: Error! FLIR data not found") return False,[0],[0],[] else: - cexist,background,LUT,refT,gain,offset,badpixels,t_exp,cfilter,gain_error,offset_error=get_calib_data(portnr,t0,t1,t6,emi,T_version,version,back_emissivity,verbose=verbose-1) + cexist,background,LUT,refT,gain,offset,badpixels,t_exp,cfilter,gain_error,offset_error=get_calib_data(portnr,program=program,emissivity=emi,T_version=T_version,version=version,back_emissivity=back_emissivity,verbose=verbose-1) if not cexist: if verbose>0: print("get_temp_from_raw_by_program: Unable to load the complete calibration data for",program," please confirm that this data was uploaded") @@ -1837,17 +1842,11 @@ def get_temp_from_raw_by_program_fullthreads(portnr,program,time_window=0,emi=0. elif type(portnr) is int: FLIR=False goon=True + portnr=int(portnr) else: goon=False - prog=get_program_from_PID(program) - if prog[0]: - t0=prog[1]['trigger']['0'][0] - t1=prog[1]['trigger']['1'][0] - t6=prog[1]['trigger']['6'][0] - else: - goon=False if goon and not FLIR: - exist,background,LUT,refT,gain,offset,badpixels,t_exp,cfilter,gain_error,offset_error=get_calib_data(portnr,t0,t1,t6,emi,T_version,version,verbose=verbose-1) + exist,background,LUT,refT,gain,offset,badpixels,t_exp,cfilter,gain_error,offset_error=get_calib_data(portnr,program=program,emissivity=emi,T_version=T_version,version=version,verbose=verbose-1) FOV=get_FOV_mask(portnr) prog=get_program_from_PID(program) if prog[0]: @@ -1939,11 +1938,12 @@ def get_temp_from_raw_by_program_fullthreads(portnr,program,time_window=0,emi=0. else: return success,np.array(times),images,valid -def get_nuced_raw_by_program(portnr,program,time_window=0,version=0,threads=1, +def get_nuced_raw_by_program(portnr,program,time_window=0,version=0, + emi=1,T_version=2,threads=1, give_ERROR=False,verbose=0): """ """ - background,LUT,refT,gain,offset,badpixels,t_exp,cfilter,gain_error,offset_error=get_calib_data(portnr,program,emi=1,T_version=2,version=version,verbose=verbose-1) + exist,background,LUT,refT,gain,offset,badpixels,t_exp,cfilter,gain_error,offset_error=get_calib_data(portnr,program=program,emissivity=emi,T_version=T_version,version=version,verbose=verbose-1) if verbose>0: print(datetime.datetime.now(),"get_nuced_raw_by_program: raw download start") if fastDL: @@ -1983,17 +1983,21 @@ def get_nuced_raw_by_program_fullthreads(portnr,program,time_window=0,emi=0.8, """ prog=get_program_from_PID(program) if prog[0]: - t0=prog[1]['trigger']['0'][0] - t1=prog[1]['trigger']['1'][0] - t6=prog[1]['trigger']['6'][0] + starttime=prog[1]['trigger']['1'][0] + stoptime=prog[1]['trigger']['6'][0] if threads==1 or not fastDL: - return get_nuced_raw_by_program(portnr,program,time_window,emi,T_version, - version,threads,give_ERROR,verbose=verbose-1) + return get_nuced_raw_by_program(portnr,program, + time_window=time_window,emi=emi, + T_version=T_version,version=version, + threads=threads,give_ERROR=give_ERROR, + verbose=verbose-1) else: - exist,background,LUT,refT,gain,offset,badpixels,t_exp,cfilter,gain_error,offset_error=get_calib_data(portnr,t0,t1,t6,emi,T_version,version,verbose=verbose-1) + exist,background,LUT,refT,gain,offset,badpixels,t_exp,cfilter,gain_error,offset_error=get_calib_data(portnr,program=program,emissivity=emi,T_version=T_version,version=version,verbose=verbose-1) FOV=get_FOV_mask(portnr) success=True - OP=IR_tools.get_OP_by_time(time_ns=t1) + OP=IR_tools.get_OP_by_time(time_ns=starttime) + if verbose>0: + print('get_nuced_raw_by_program_fullthreads: prepare loading images by threads') if version==0: version=get_latest_version(portpathdict[OP]["AEF"+str(portnr)]+"raw_DATASTREAM") larchivepath=archivepath+"W7X/"+portpathdict[OP]["AEF"+str(portnr)]+"raw_DATASTREAM/V"+str(version)+"/0/raw" @@ -2002,18 +2006,18 @@ def get_nuced_raw_by_program_fullthreads(portnr,program,time_window=0,emi=0.8, tstop=time_window[1] if tstop<tstart: raise Exception("get_nuced_raw_by_program_fullthreads: endtime before starttime") - stdate=datetime.datetime.utcfromtimestamp((t1-100)/1e9+tstart) + stdate=datetime.datetime.utcfromtimestamp((starttime-100)/1e9+tstart) stdate=stdate.isoformat() - enddate=datetime.datetime.utcfromtimestamp((t1)/1e9+tstop) + enddate=datetime.datetime.utcfromtimestamp((starttime)/1e9+tstop) enddate=enddate.isoformat() else: - stdate=datetime.datetime.utcfromtimestamp((t1-100)/1e9) + stdate=datetime.datetime.utcfromtimestamp((starttime-100)/1e9) stdate=stdate.isoformat() if time_window==0: - enddate=datetime.datetime.utcfromtimestamp(t6/1e9) + enddate=datetime.datetime.utcfromtimestamp(stoptime/1e9) enddate=enddate.isoformat() else: - enddate=datetime.datetime.utcfromtimestamp((t1)/1e9+time_window) + enddate=datetime.datetime.utcfromtimestamp((starttime)/1e9+time_window) enddate=enddate.isoformat() times=AKF_2.get_time_intervals(larchivepath,stdate.replace("T"," "),enddate.replace("T"," "))# lnt=len(times) @@ -2031,7 +2035,10 @@ def get_nuced_raw_by_program_fullthreads(portnr,program,time_window=0,emi=0.8, if verbose>0: print("get_nuced_raw_by_program_fullthreads: Start Thread ",i+1) # p = multiprocessing.Process(target=NUC_raw_thread, args=(portnr,tim[intervalls[i]:intervalls[i+1]],out_q,i,version,background,LUT,refT,gain,offset,gain_error,offset_error,give_ERROR,FOV,badpixels,)) - p = NUC_raw_thread(larchivepath,tim[intervalls[i]:intervalls[i+1]],resultdict,i,version,background,LUT,refT,gain,offset,gain_error,offset_error,give_ERROR,FOV,badpixels,verbose=verbose-1) + p = NUC_raw_thread(larchivepath,tim[intervalls[i]:intervalls[i+1]], + resultdict,i,version,background,LUT,refT, + gain,offset,gain_error,offset_error,give_ERROR, + FOV,badpixels,verbose=verbose-1) jobs.append(p) p.start() for p in jobs: @@ -2175,27 +2182,33 @@ def get_cooling_water_temperature_by_time(time_ns): result_out=[False,0,0] return result_in[0] and result_out[0],inlet,outlet -def get_calib_data(port,t0,t1,t6,emissivity=0.8,Temp_V=2,version=0,back_emissivity=0.82,verbose=0): +def get_calib_data(port,program=None,t0=None,t1=None,t6=None,emissivity=0.8, + T_version=2,version=0,back_emissivity=0.82,verbose=0): """ get_calib_data return exist,background,LUT,refT,gain,offset,badpixels,t_exp,cfilter,gain_error,offset_error """ -# prog=get_program_from_PID(program) - OP=IR_tools.get_OP_by_time(time_ns=t0)#program_str=program) + if t0 is None or t1 is None or t6 is None: + if program is None: + if t0 is not None: + program = AKF_2.get_program_id(t0) + elif t1 is not None: + program = AKF_2.get_program_id(t1) + else: + raise Exception('get_calib_data: ERROR! Missing time definition!') + print(' function requires either a program ID or the trigger times t0, t1 and t6') + # get start and end times from program ID + prog=get_program_from_PID(program) + if prog[0]: + t0=prog[1]['trigger']['0'][0] + t1=prog[1]['trigger']['1'][0] + t6=prog[1]['trigger']['6'][0] + else: + raise Exception('get_calib_data: ERROR! program {0} not found!'.format(program)) + + OP=IR_tools.get_OP_by_time(time_ns=t0) exist=True -# try: -# t_program = AKF_2.get_program_from_to(program) -# prog =AKF_2.get_program_list(t_program[0], t_program[1]) -# if prog[0]: -# t0=prog[1]['trigger']['0'][0] -# t1=prog[1]['trigger']['1'][0] -# t6=prog[1]['trigger']['6'][0] -# except Exception as E: -# print("Warning: Program was not found: ",E) -# return 0,0,0,0,0,0,0,0,0,0 -# else: -# raise Warning("cannot find the program!") -# return False,0,0,0,0,0,0,0,0,0,0 + if verbose>0: print('get_calib_data: loading data for camera {1} in {0}'.format(OP,port)) Camera=portcamdict[OP]['AEF'+str(port)] @@ -2219,18 +2232,44 @@ def get_calib_data(port,t0,t1,t6,emissivity=0.8,Temp_V=2,version=0,back_emissivi if LUT_DL[0]: LUT=LUT_DL[1] del LUT_DL - if cfilter==0 and not Camera.split("_")[0]=="Infratec": + if cfilter==0 and not Camera.split("_")[0]=="Infratec": + if verbose>0: + print('get_calib_data: getting NUC arrays') NUC_DL=get_NUC_by_times(port,t0,t1,t_exp,version,verbose=verbose-1)#download_NUC_by_times(port,t0,t1,t_exp,version) if NUC_DL[0]==False: raise Warning("get_calib_data: NUC was not found") return False,0,LUT,0,0,0,0,t_exp,cfilter,0,0 else: + # extract NUC elements + gain = [] + offset = [] + badpixels = [] + gain_error = [] + offset_error = [] gain=np.array(NUC_DL[1][0]) offset=np.array(NUC_DL[1][1]) - offset[offset<-1e300]=0 - gain_error=np.array(NUC_DL[1][4]) - offset_error=np.array(NUC_DL[1][5]) badpixels=np.array(NUC_DL[1][3],dtype=np.ubyte) + # check quality of NUC elements + badpixels[np.isnan(gain)] = 1 + badpixels[np.isnan(offset)] = 1 + gain[np.isnan(gain)]=0 + offset[np.isnan(offset)]=0 + badpixels[offset<-1e100] = 1 + offset[offset<-1e100]=0 + # catch cases of error frames being the value "0" + if NUC_DL[1][4] is 0: + gain_error = np.zeros(np.shape(gain), dtype=np.int8) + else: + gain_error=np.array(NUC_DL[1][4]) + badpixels[np.isnan(gain_error)] = 1 + gain_error[np.isnan(gain_error)]=np.nanmax(gain_error)+1 + if NUC_DL[1][5] is 0: + offset_error = np.zeros(np.shape(offset), dtype=np.int8) + else: + offset_error=np.array(NUC_DL[1][5]) + badpixels[np.isnan(offset_error)] = 1 + offset_error[np.isnan(offset_error)]=np.nanmax(offset_error)+1 + # catch special case for AEF11 and AEF21 in OP1.2a if ((port == 11) or (port == 21)) and OP=="OP1.2a": exist,time,frames=download_raw_images_by_times(port,t1,int(t1+0.02*1e9),version,verbose=verbose-1) if exist: @@ -2254,7 +2293,7 @@ def get_calib_data(port,t0,t1,t6,emissivity=0.8,Temp_V=2,version=0,back_emissivi raise Exception("get_calib_data: unknown Operation Phase or calibration method not implemented for this campaign") if back_DL[0]: background=back_DL[2] - if Temp_V==1: + if T_version==1: if verbose>0: print('get_calib_data: use temperature calibration version 1') backtime=back_DL[1] @@ -2269,7 +2308,7 @@ def get_calib_data(port,t0,t1,t6,emissivity=0.8,Temp_V=2,version=0,back_emissivi refT=np.average(TCT_dl[2]) else: raise Exception("get_calib_data: Unable to find thermocouple data") - elif Temp_V==2: + elif T_version==2: if verbose>0: print('get_calib_data: use temperature calibration version 2') frame=background.copy() @@ -2279,7 +2318,7 @@ def get_calib_data(port,t0,t1,t6,emissivity=0.8,Temp_V=2,version=0,back_emissivi refT=waterout else: refT=28.5 - elif Temp_V==3: + elif T_version==3: if verbose>0: print('get_calib_data: use temperature calibration version 3, TEST CASE!!!') frame=background.copy() @@ -2326,6 +2365,8 @@ def get_calib_data(port,t0,t1,t6,emissivity=0.8,Temp_V=2,version=0,back_emissivi init_bp_list = IR_tools.read_bad_pixels_from_file(port, time_ns=t1) # find more bad pixel badpixels = find_badpixels(port, gain, offset, init_bp_list=init_bp_list, niterations=10, tolerance=10,verbose=verbose-1) + if verbose>0: + print('get_calib_data: NUC arrays ready') return exist,background,LUT,refT,gain,offset,badpixels,t_exp,cfilter,gain_error,offset_error # except Exception as E: # print("Warning: Program was not found: ",E) @@ -2554,9 +2595,10 @@ def download_heatflux_by_times(port,tstart,tend,time_window=0,threads=1,testmode goon=True except Exception as E: raise Exception("download_heatflux_by_times: unknown Port!"+E) - elif type(port) is int: + elif isinstance(port, (int, np.integer, float, np.float)): FLIR=False goon=True + port=int(port) else: goon=False if not goon: @@ -2817,9 +2859,10 @@ def get_heatflux_profile(port,profile,finger=None,timepoint=1,program=None,tstar except Exception as E: raise Warning("get_heatflux_profile: unknown Port!"+E) return False,0,0,0 - elif type(port) is int: + elif isinstance(port, (int, np.integer, float, np.float)): FLIR=False goon=True + port=port else: goon=False if not goon or FLIR: