Commit 7c523fe3 authored by Holger Niemann's avatar Holger Niemann
Browse files

Merge branch 'master' into 'Holgers'

Master into Holgers to have an up-to-date working branch

See merge request holn/IR_data_access!38
parents 4156e369 60d966a8
......@@ -11,6 +11,7 @@ IRCamColdframes_fittingpath=calibpath+"IRCamColdframes_fitting\\"
IRCamRefImagespath = calibpath+'IRCamReferenceImages\\'
IRCAMBadPixels_path = calibpath + 'IRCAMBadPixels\\'
heatflux_requestlist_path="\\\\x-drive\\Diagnostic-logbooks\\QRT-DivertorThermography\\ArchiveDB_heatflux_pipeline\\"
parameter_file_path = ".\\data"
try:
# import sys
path=str(repr(__file__)).split("IR_config_constants")[0].split("'")[1]+"upload_config"
......
This diff is collapsed.
# Finger widths of TDU;;;;;
# continuous ID of divertor fingers;ID of divertor section;target module number within horizontal or vertical target;number of profiles in standard mapping;width used for integration of averaged central profile;finger_part indicates if finger is the second part of the previous finger (in h_m)
# finger_ID;target;target element;n_profiles;width [m];finger_part
0;h_l;1;13;0.0553;0
1;h_l;1;14;0.0538;0
2;h_l;1;14;0.0538;0
3;h_l;1;14;0.0538;0
4;h_l;1;14;0.0538;0
5;h_l;1;14;0.0538;0
6;h_l;1;14;0.0537;0
7;h_l;2;14;0.0537;0
8;h_l;2;14;0.0538;0
9;h_l;2;14;0.0538;0
10;h_l;2;15;0.0582;0
11;h_l;2;15;0.0582;0
12;h_l;2;14;0.0538;0
13;h_l;2;14;0.0582;0
14;h_l;3;14;0.0569;0
15;h_l;3;13;0.0523;0
16;h_l;3;13;0.0523;0
17;h_l;3;13;0.0523;0
18;h_l;3;13;0.0523;0
19;h_l;3;13;0.0523;0
20;h_l;3;13;0.0523;0
21;h_l;3;13;0.0523;0
22;h_l;4;13;0.0523;0
23;h_l;4;13;0.0523;0
24;h_l;4;13;0.0523;0
25;h_l;4;13;0.0523;0
26;h_l;4;13;0.0523;0
27;h_l;4;13;0.0523;0
28;h_l;4;13;0.0523;0
29;h_l;4;13;0.0523;0
30;h_m;5;14;0.0543;0
31;h_m;5;15;0.0543;1
32;h_m;5;14;0.0543;0
33;h_m;5;15;0.0543;1
34;h_m;5;14;0.0542;0
35;h_m;5;15;0.0542;1
36;h_m;5;14;0.0542;0
37;h_m;5;15;0.0542;1
38;h_m;5;14;0.0541;0
39;h_m;5;15;0.0541;1
40;h_m;5;14;0.0541;0
41;h_m;5;15;0.0541;1
42;h_m;5;14;0.0541;0
43;h_m;5;15;0.0541;1
44;h_m;5;14;0.0541;0
45;h_m;5;15;0.0541;1
46;h_m;5;14;0.0541;0
47;h_m;5;15;0.0541;1
48;h_m;5;14;0.0541;0
49;h_m;5;15;0.0541;1
50;h_m;5;14;0.0541;0
51;h_m;5;15;0.0541;1
52;h_m;5;14;0.0541;0
53;h_m;5;15;0.0541;1
54;h_m;6;14;0.0539;0
55;h_m;6;15;0.0539;1
56;h_m;6;14;0.0539;0
57;h_m;6;15;0.0539;1
58;h_m;6;14;0.0539;0
59;h_m;6;15;0.0539;1
60;h_m;6;14;0.0539;0
61;h_m;6;15;0.0539;1
62;h_m;6;14;0.0539;0
63;h_m;6;15;0.0539;1
64;h_m;6;14;0.0541;0
65;h_m;6;15;0.0541;1
66;h_m;6;14;0.0541;0
67;h_m;6;15;0.0541;1
68;h_m;6;14;0.0541;0
69;h_m;6;15;0.0541;1
70;h_m;6;14;0.0541;0
71;h_m;6;15;0.0541;1
72;h_m;6;14;0.0541;0
73;h_m;6;15;0.0541;1
74;h_m;6;14;0.0541;0
75;h_m;6;15;0.0541;1
76;h_m;6;14;0.0541;0
77;h_m;6;15;0.0541;1
78;h_h;7;15;0.0552;0
79;h_h;7;14;0.0522;0
80;h_h;7;14;0.0522;0
81;h_h;7;14;0.0522;0
82;h_h;7;14;0.0522;0
83;h_h;7;15;0.0567;0
84;h_h;8;16;0.0602;0
85;h_h;8;15;0.0557;0
86;h_h;8;15;0.0557;0
87;h_h;8;15;0.0557;0
88;h_h;8;15;0.0557;0
89;h_h;8;15;0.0557;0
90;h_h;8;15;0.0557;0
91;h_h;8;15;0.0557;0
92;h_h;8;15;0.0557;0
93;h_h;8;15;0.0557;0
94;h_h;8;15;0.0557;0
95;h_h;8;15;0.0557;0
96;h_h;9;15;0.0557;0
97;h_h;9;15;0.0557;0
98;h_h;9;15;0.0557;0
99;h_h;9;15;0.0557;0
100;h_h;9;15;0.0557;0
101;h_h;9;15;0.0557;0
102;h_h;9;15;0.0557;0
103;h_h;9;15;0.0557;0
104;h_h;9;15;0.0557;0
105;h_h;9;15;0.0557;0
106;h_h;9;15;0.0557;0
107;h_h;9;15;0.0557;0
108;v;1;15;0.0547;0
109;v;1;15;0.0548;0
110;v;1;15;0.0548;0
111;v;1;15;0.0549;0
112;v;1;15;0.0548;0
113;v;1;15;0.0548;0
114;v;1;15;0.0548;0
115;v;1;15;0.0548;0
116;v;1;15;0.0548;0
117;v;1;15;0.0547;0
118;v;2;15;0.0547;0
119;v;2;15;0.0547;0
120;v;2;15;0.0547;0
121;v;2;15;0.0547;0
122;v;2;15;0.0547;0
123;v;2;15;0.0547;0
124;v;2;15;0.0547;0
125;v;2;15;0.0547;0
126;v;2;15;0.0547;0
127;v;2;15;0.0547;0
128;v;3;15;0.0547;0
129;v;3;15;0.0548;0
130;v;3;15;0.0547;0
131;v;3;15;0.0548;0
132;v;3;15;0.0547;0
133;v;3;15;0.0549;0
134;v;3;15;0.0547;0
135;v;3;15;0.0547;0
136;v;3;15;0.0547;0
# Finger widths of TDU;;;;;
# continuous ID of divertor fingers;ID of divertor section;target module number within horizontal or vertical target;number of profiles in standard mapping;width used for integration of averaged central profile;finger_part indicates if finger is the second part of the previous finger (in h_m)
# finger_ID;target;target element;n_profiles;width [m];finger_part
0;h_l;1;13;0.051072;0
1;h_l;1;14;0.053565;0
2;h_l;1;14;0.053565;0
3;h_l;1;14;0.053565;0
4;h_l;1;14;0.053565;0
5;h_l;1;14;0.053565;0
6;h_l;1;14;0.053565;0
7;h_l;2;14;0.053565;0
8;h_l;2;14;0.053565;0
9;h_l;2;14;0.053565;0
10;h_l;2;15;0.058047;0
11;h_l;2;15;0.05794;0
12;h_l;2;14;0.053565;0
13;h_l;2;14;0.055486;0
14;h_l;3;14;0.054198;0
15;h_l;3;13;0.052192;0
16;h_l;3;13;0.052192;0
17;h_l;3;13;0.052192;0
18;h_l;3;13;0.052192;0
19;h_l;3;13;0.052192;0
20;h_l;3;13;0.052192;0
21;h_l;3;13;0.052192;0
22;h_l;4;13;0.052192;0
23;h_l;4;13;0.052192;0
24;h_l;4;13;0.052192;0
25;h_l;4;13;0.052192;0
26;h_l;4;13;0.052192;0
27;h_l;4;13;0.052192;0
28;h_l;4;13;0.052192;0
29;h_l;4;13;0.052192;0
30;h_m;5;14;0.054328;0
31;h_m;5;15;0.054328;1
32;h_m;5;14;0.054328;0
33;h_m;5;15;0.054328;1
34;h_m;5;14;0.054152;0
35;h_m;5;15;0.054152;1
36;h_m;5;14;0.054152;0
37;h_m;5;15;0.054152;1
38;h_m;5;14;0.05408;0
39;h_m;5;15;0.05408;1
40;h_m;5;14;0.054134;0
41;h_m;5;15;0.054134;1
42;h_m;5;14;0.054134;0
43;h_m;5;15;0.054134;1
44;h_m;5;14;0.054134;0
45;h_m;5;15;0.054134;1
46;h_m;5;14;0.054134;0
47;h_m;5;15;0.054134;1
48;h_m;5;14;0.054134;0
49;h_m;5;15;0.054134;1
50;h_m;5;14;0.054134;0
51;h_m;5;15;0.054134;1
52;h_m;5;14;0.054134;0
53;h_m;5;15;0.054134;1
54;h_m;6;14;0.053823;0
55;h_m;6;15;0.053823;1
56;h_m;6;14;0.053823;0
57;h_m;6;15;0.053823;1
58;h_m;6;14;0.053823;0
59;h_m;6;15;0.053823;1
60;h_m;6;14;0.053823;0
61;h_m;6;15;0.053823;1
62;h_m;6;14;0.053823;0
63;h_m;6;15;0.053823;1
64;h_m;6;14;0.05406;0
65;h_m;6;15;0.05406;1
66;h_m;6;14;0.05406;0
67;h_m;6;15;0.05406;1
68;h_m;6;14;0.05406;0
69;h_m;6;15;0.05406;1
70;h_m;6;14;0.05406;0
71;h_m;6;15;0.05406;1
72;h_m;6;14;0.05406;0
73;h_m;6;15;0.05406;1
74;h_m;6;14;0.05406;0
75;h_m;6;15;0.05406;1
76;h_m;6;14;0.05406;0
77;h_m;6;15;0.05406;1
78;h_h;7;15;0.056351;0
79;h_h;7;14;0.052463;0
80;h_h;7;14;0.052463;0
81;h_h;7;14;0.052463;0
82;h_h;7;14;0.052463;0
83;h_h;7;15;0.054963;0
84;h_h;8;16;0.057662;0
85;h_h;8;15;0.055162;0
86;h_h;8;15;0.055162;0
87;h_h;8;15;0.055162;0
88;h_h;8;15;0.055162;0
89;h_h;8;15;0.055162;0
90;h_h;8;15;0.055162;0
91;h_h;8;15;0.055162;0
92;h_h;8;15;0.055162;0
93;h_h;8;15;0.055162;0
94;h_h;8;15;0.055162;0
95;h_h;8;15;0.055162;0
96;h_h;9;15;0.055162;0
97;h_h;9;15;0.055162;0
98;h_h;9;15;0.055162;0
99;h_h;9;15;0.055162;0
100;h_h;9;15;0.055162;0
101;h_h;9;15;0.055162;0
102;h_h;9;15;0.055162;0
103;h_h;9;15;0.055162;0
104;h_h;9;15;0.055162;0
105;h_h;9;15;0.055162;0
106;h_h;9;15;0.055162;0
107;h_h;9;15;0.055162;0
108;v;1;15;0.054426;0
109;v;1;15;0.054426;0
110;v;1;15;0.054426;0
111;v;1;15;0.054426;0
112;v;1;15;0.054426;0
113;v;1;15;0.054426;0
114;v;1;15;0.054426;0
115;v;1;15;0.054426;0
116;v;1;15;0.054426;0
117;v;1;15;0.054426;0
118;v;2;15;0.054426;0
119;v;2;15;0.054426;0
120;v;2;15;0.054426;0
121;v;2;15;0.054426;0
122;v;2;15;0.054426;0
123;v;2;15;0.054426;0
124;v;2;15;0.054426;0
125;v;2;15;0.054426;0
126;v;2;15;0.054426;0
127;v;2;15;0.054426;0
128;v;3;15;0.054426;0
129;v;3;15;0.054426;0
130;v;3;15;0.054426;0
131;v;3;15;0.054426;0
132;v;3;15;0.054426;0
133;v;3;15;0.054426;0
134;v;3;15;0.054426;0
135;v;3;15;0.054426;0
136;v;3;15;0.054426;0
......@@ -430,7 +430,8 @@ def download_hot_cold_reference_by_times(port,exposure,starttime=150390720000000
if version==0:
version=get_latest_version(portpathdict[OP]["AEF"+str(port)]+"raw_DATASTREAM",t_from=starttime)
try:
res = urllib.request.urlopen(larchivepath+"PARLOG/V"+str(version)+"/_signal.json?from="+str(starttime)+"&upto="+str(int(starttime+1e9)))
path_string = larchivepath+"PARLOG/V"+str(version)+"/_signal.json?from="+str(starttime)+"&upto="+str(int(starttime+1e9))
res = urllib.request.urlopen(path_string)
signal_list = json.loads(res.read().decode('utf-8'))
res.close()
goon=True
......@@ -550,6 +551,97 @@ def get_NUCed_background_by_times(port,t0,t1,t_exp,cfilter,gain,offset,version=0
plt.title("background image nuced")
return exist,btime[0],background
def get_NUCed_coldframe_by_program(port, program, exposure=None, version=0, plot_it=False, verbose=0):
"""
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
-----
port: int
number of camera AEF port (e.g. 10, 11, 20,...)
program: str
experiment program identifier as a string of format 'DATE.PROG_NO',
e.g. '20180904.015'
exposure: float, optional
camera exposure time in us
(OPTIONAL: default is to take the exposure time of the first data frame)
version: int, optional
calibration version to be used
(OPTIONAL: default is 0)
plot_it: bool, optional
switch of whether to plot intermediate results or not
(OPTIONAL: deafult is NOT to plot)
verbose: integer, optional
feedback level (details of print messages)
(OPTIONAL: if not provided, only ERROR output)
RESULT
------
exist: bool
indicator, of coldframe could be found
coldframe: numpy array
NUCed cold frame
"""
if exposure is None:
try:
exist, t, exposure = get_exposure_by_program(port, program, version=version)
except:
print('get_NUCed_coldframe_by_program: ERROR! no exposure time found!')
return False, []
t_exp = exposure[0]
else:
if verbose>0:
print('get_NUCed_coldframe_by_program: using exposure time {0}'.format(exposure))
t_exp = exposure
try:
exist, data, desc = get_NUC_by_program(port, program, t_exp, version=version, verbose=verbose-1)
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, verbose=verbose-1)
if exist2:
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:
ref_program = '{0}.{1:03d}'.format(program.split('.')[0], porg_nr+1)
if verbose>0:
print('get_NUCed_coldframe_by_program: program {0} has no predecessor.\n --> using NUC of {1}'.format(program, ref_program))
exist2, data, desc = get_NUC_by_program(port, ref_program, t_exp, version=version, verbose=verbose-1)
if exist2:
coldframe = apply_NUC([cold_raw],data[0],data[1])[0]
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.colorbar()
plt.title('raw cold frame\nof {0}'.format(program))
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.tight_layout()
plt.show()
else:
print('get_NUCed_coldframe_by_program: ERROR! No cold frame found for program {0}!'.foramt(program))
coldframe = []
return exist, coldframe
def download_raw_images_by_program(port,program,time_window=0,version=0,verbose=0):
"""
"""
......@@ -2748,7 +2840,7 @@ def download_heatflux_mapping_reference(timepoint=None,version=0,testmode=False,
d[np.where(profile_no==i_profile)] = \
abs((y2_p-y1_p)*x_f - (x2_p-x1_p)*y_f + x2_p*y1_p - y2_p*x1_p) / np.sqrt((y2_p-y1_p)**2 + (x2_p-x1_p)**2) /2 + \
abs((y2_n-y1_n)*x_f - (x2_n-x1_n)*y_f + x2_n*y1_n - y2_n*x1_n) / np.sqrt((y2_n-y1_n)**2 + (x2_n-x1_n)**2) /2
mappings['thickness'] = d
mappings['Thickness'] = d
if verbose>0:
print("download_heatflux_mapping_reference: 'thickness' of profiles added to mapping reference dictionary")
......@@ -2763,7 +2855,29 @@ def download_heatflux_mapping_reference(timepoint=None,version=0,testmode=False,
Y[index_ver] = -np.sin(22.5/180*np.pi)*x1 + np.cos(22.5/180*np.pi)*y1 + 0.7
if verbose>0:
print("download_heatflux_mapping_reference: vertical target moved and rotated in 'X' and 'Y' for better plotting")
# define target modules array
TM = (np.copy(mappings['Finger_ID'][0]),{1:'TM1h', 2:'TM2h', 3:'TM3h', 4:'TM4h',
5:'TM5h', 6:'TM6h',
7:'TM7h', 8:'TM8h', 9:'TM9h',
10:'TM1v', 11:'TM2v', 12:'TM3v'})
Finger_ID = np.copy(mappings['Finger_ID'][0])
Finger_ID[np.isnan(Finger_ID)] = -1
TM[0][np.logical_and(Finger_ID >= 0, Finger_ID < 700)] = 1
TM[0][np.logical_and(Finger_ID >= 700, Finger_ID < 1400)] = 2
TM[0][np.logical_and(Finger_ID >= 1400, Finger_ID < 2200)] = 3
TM[0][np.logical_and(Finger_ID >= 2200, Finger_ID < 3000)] = 4
TM[0][np.logical_and(Finger_ID >= 3000, Finger_ID < 5400)] = 5
TM[0][np.logical_and(Finger_ID >= 5400, Finger_ID < 7800)] = 6
TM[0][np.logical_and(Finger_ID >= 7800, Finger_ID < 8400)] = 7
TM[0][np.logical_and(Finger_ID >= 8400, Finger_ID < 9600)] = 8
TM[0][np.logical_and(Finger_ID >= 9600, Finger_ID < 10800)] = 9
TM[0][np.logical_and(Finger_ID >= 10800, Finger_ID < 11800)] = 10
TM[0][np.logical_and(Finger_ID >= 11800, Finger_ID < 12800)] = 11
TM[0][np.logical_and(Finger_ID >= 12800, Finger_ID < 13700)] = 12
TM[0][TM[0]==-1] = np.nan
mappings['Target_Module'] = TM
return exist,mappings
def download_heatflux_scene_model_reference(port,timepoint=None,program=None,version=0,testmode=False,verbose=0):
......@@ -2909,7 +3023,7 @@ def get_heatflux_profile(port,profile,finger=None,timepoint=1,program=None,tstar
"""
### checking whether input is valid and whether the download can be started
if program==None and tstart==None:
raise Exception("get_heatflux_profile: No Program given, please specify the program you are want heatflux from")
raise Exception("get_heatflux_profile: No Program given, please specify the program you want heatflux from")
else:
### some informations about the program are given, is the timepoint given in a usefull way?
if timepoint==None or (type(timepoint)!=int and type(timepoint)!=float):
......@@ -3021,7 +3135,7 @@ def extract_heatflux_profile_from_DL(time,images,profile,finger=None,time_window
else:
fingerID=finger*100+profile
### okay finderID is fine, data is given, lets get the mapping
exist,mapping=download_heatflux_mapping_reference(testmode=testmode)
exist,mapping=download_heatflux_mapping_reference(testmode=testmode, verbose=verbose-1)
if exist:
Fingermap=np.asarray(mapping['Finger_ID'][0],dtype=np.int)
locs=np.where(Fingermap==fingerID)
......@@ -3224,6 +3338,8 @@ def download_divertor_load(port,targetmodule=None,program=None,tstart=None,tend=
return exist,time,load,error
def download_scene_model(port,program=None,timepoint=None,version=0,verbose=0):
"""
"""
if type(port)==int or type(port)==float:
portnam="AEF"+str(port)
elif type(port)==str:
......@@ -3269,7 +3385,7 @@ def download_scene_model(port,program=None,timepoint=None,version=0,verbose=0):
"x": channels[8],
"y": channels[9],
"z": channels[10]
}
}
return exist,scene_model
else:
return False,[0]
......@@ -3448,6 +3564,7 @@ if __name__=='__main__':
# plt.figure(),plt.imshow(images[50],vmin=0)
# status,mapping=download_heatflux_mapping_reference(verbose=4)
# test=get_heatflux_profile(20,1605,timepoint=1,program="20171109.008",verbose=4)
#%% loads test
# port=10
# prog="20171207.016"#"20181011.015"#"20171114.052"
......@@ -3478,3 +3595,10 @@ if __name__=='__main__':
# dset.write_direct(imags)
# File.create_dataset('timestamps', data=list(bla[1]), dtype='uint64')#,compression="gzip")
# File.close()
#%% get hot cold image test
port=10
program="20180904.002"
exist, coldframe = get_NUCed_coldframe_by_program(port, program, exposure=None, version=0, plot_it=True, verbose=3)
\ No newline at end of file
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment