@@ -246,9 +246,9 @@ def get_start_stop_time(timestamp):
246
246
'''
247
247
from pycqed .analysis import measurement_analysis as MA
248
248
ma = MA .MeasurementAnalysis (timestamp = timestamp )
249
- timestring_start = a_tools . get_instrument_setting (
249
+ timestring_start = get_instrument_setting (
250
250
ma , 'MC' , 'measurement_begintime' )
251
- timestring_stop = a_tools . get_instrument_setting (
251
+ timestring_stop = get_instrument_setting (
252
252
ma , 'MC' , 'measurement_endtime' )
253
253
date_start , time_start = timestring_start .split (' ' )
254
254
date_stop , time_stop = timestring_stop .split (' ' )
@@ -291,9 +291,11 @@ def get_data_from_timestamp_legacy(timestamps, param_names, TwoD=False, max_file
291
291
'This data file attribute does not exist or hasn' 't been coded for extraction.' )
292
292
293
293
else :
294
- if param .split ('.' )[0 ] in ma .data_file .get ('Instrument settings' , {}):
295
- data [param ].append (ma .data_file ['Instrument settings' ][
296
- param .split ('.' )[0 ]].attrs [param .split ('.' )[1 ]])
294
+ if param .split ('.' )[0 ] in ma .data_file .get (
295
+ 'Instrument settings' , {}):
296
+ data [param ].append (eval (
297
+ ma .data_file ['Instrument settings' ][
298
+ param .split ('.' )[0 ]].attrs [param .split ('.' )[1 ]]))
297
299
elif param .split ('.' )[0 ] in ma .data_file .get ('Analysis' , {}):
298
300
temp = ma .data_file ['Analysis' ]
299
301
for ii in range (len (param .split ('.' ))- 1 ):
@@ -303,7 +305,10 @@ def get_data_from_timestamp_legacy(timestamps, param_names, TwoD=False, max_file
303
305
temp = ma .data_file
304
306
for ii in range (len (param .split ('.' ))- 1 ):
305
307
temp = temp [param .split ('.' )[ii ]]
306
- data [param ].append (temp [param .split ('.' )[- 1 ]])
308
+ try :
309
+ data [param ].append (eval (temp [param .split ('.' )[- 1 ]]))
310
+ except KeyError :
311
+ data [param ].append (temp [param .split ('.' )[- 1 ]])
307
312
else :
308
313
warnings .warn (
309
314
'This data file attribute does not exist or '
@@ -317,7 +322,8 @@ def get_param_value_from_file(file_path, instr_name, param_name, h5mode='r+'):
317
322
instr_settings = data_file ['Instrument settings' ]
318
323
if instr_name in list (instr_settings .keys ()):
319
324
if param_name in list (instr_settings [instr_name ].attrs ):
320
- param_val = float (instr_settings [instr_name ].attrs [param_name ])
325
+ param_val = eval (instr_settings [instr_name ].attrs [
326
+ param_name ])
321
327
else :
322
328
raise KeyError ('"{}" does not exist for instrument "{}"' .format (
323
329
param_name , instr_name ))
@@ -344,10 +350,11 @@ def get_qb_channel_map_from_hdf(qb_names, file_path, value_names, h5mode='r+'):
344
350
ro_type = 'w'
345
351
346
352
for qbn in qb_names :
347
- qbchs = [str (instr_settings [qbn ].attrs ['acq_I_channel' ])]
348
- ro_acq_weight_type = instr_settings [qbn ].attrs ['acq_weights_type' ]
353
+ qbchs = [str (eval (instr_settings [qbn ].attrs ['acq_I_channel' ]))]
354
+ # eval because strings are saved as representations
355
+ ro_acq_weight_type = eval (instr_settings [qbn ].attrs ['acq_weights_type' ])
349
356
if ro_acq_weight_type in ['SSB' , 'DSB' , 'optimal_qutrit' ]:
350
- qbchs += [str (instr_settings [qbn ].attrs ['acq_Q_channel' ])]
357
+ qbchs += [str (eval ( instr_settings [qbn ].attrs ['acq_Q_channel' ]) )]
351
358
channel_map [qbn ] = [ch for ch in value_names for nr in qbchs
352
359
if ro_type + nr in ch ]
353
360
@@ -362,9 +369,8 @@ def get_qb_thresholds_from_file(qb_names, file_path, h5mode='r+'):
362
369
instr_settings = data_file ['Instrument settings' ]
363
370
thresholds = {}
364
371
for qbn in qb_names :
365
- ro_channel = int (
366
- instr_settings [qbn ].attrs ['RO_acq_weight_function_I' ])
367
- thresholds [qbn ] = 1.5 * float (
372
+ ro_channel = eval (instr_settings [qbn ].attrs ['RO_acq_weight_function_I' ])
373
+ thresholds [qbn ] = 1.5 * eval (
368
374
instr_settings ['UHFQC' ].attrs ['quex_thres_{}_level' .format (
369
375
ro_channel )])
370
376
return thresholds
@@ -392,9 +398,10 @@ def get_data_from_ma_v1(ma, param_names):
392
398
'This data file attribute does not exist or hasn' 't been coded for extraction.' )
393
399
394
400
else :
395
- if param .split ('.' )[0 ] in ma .data_file .get ('Instrument settings' , {}):
396
- data [param ] = ma .data_file ['Instrument settings' ][
397
- param .split ('.' )[0 ]].attrs [param .split ('.' )[1 ]]
401
+ if param .split ('.' )[0 ] in ma .data_file .get (
402
+ 'Instrument settings' , {}):
403
+ data [param ] = eval (ma .data_file ['Instrument settings' ][
404
+ param .split ('.' )[0 ]].attrs [param .split ('.' )[1 ]])
398
405
elif param .split ('.' )[0 ] in ma .data_file .get ('Analysis' , {}):
399
406
temp = ma .data_file ['Analysis' ]
400
407
for ii in range (len (param .split ('.' ))- 1 ):
@@ -404,10 +411,14 @@ def get_data_from_ma_v1(ma, param_names):
404
411
temp = ma .data_file
405
412
for ii in range (len (param .split ('.' ))- 1 ):
406
413
temp = temp [param .split ('.' )[ii ]]
407
- data [param ] = temp [param .split ('.' )[- 1 ]]
414
+ try :
415
+ data [param ] = eval (temp [param .split ('.' )[- 1 ]])
416
+ except KeyError :
417
+ data [param ] = temp [param .split ('.' )[- 1 ]]
408
418
else :
409
419
warnings .warn (
410
- 'This data file attribute does not exist or hasn' 't been coded for extraction.' )
420
+ 'This data file attribute does not exist or '
421
+ 'hasn"t been coded for extraction.' )
411
422
return data
412
423
413
424
@@ -444,17 +455,19 @@ def get_data_from_ma_v2(ma, param_names, numeric_params=None):
444
455
# tmp_var is a temporary fix!
445
456
# should be removed at some point
446
457
try :
447
- tmp_var = ma .data_file ['Instrument settings' ][
448
- 'MC' ].attrs ['detector_function_name' ]
458
+ tmp_var = eval ( ma .data_file ['Instrument settings' ][
459
+ 'MC' ].attrs ['detector_function_name' ])
449
460
except :
450
461
tmp_var = None
451
462
if tmp_var == 'TimeDomainDetector' :
452
463
temp2 = ma .data_file ['Instrument settings' ]['TD_Meas' ]
453
464
exec (
454
- ('cal_zero = %s' % (temp2 .attrs ['cal_zero_points' ])), locals ())
465
+ ('cal_zero = %s' % (eval (temp2 .attrs ['cal_zero_points' ]))),
466
+ locals ())
455
467
exec (
456
- ('cal_one = %s' % (temp2 .attrs ['cal_one_points' ])), locals ())
457
- dofs = int (temp2 .attrs ['NoSegments' ]) - \
468
+ ('cal_one = %s' % (eval (temp2 .attrs ['cal_one_points' ]))),
469
+ locals ())
470
+ dofs = eval (temp2 .attrs ['NoSegments' ]) - \
458
471
len (cal_zero ) - len (cal_one )
459
472
else :
460
473
dofs = len (ma .sweep_points )
@@ -480,29 +493,34 @@ def get_data_from_ma_v2(ma, param_names, numeric_params=None):
480
493
data [param ] = np .double (ma .data_file ['Analysis' ][param ])
481
494
else :
482
495
warnings .warn (
483
- 'The data file attribute %s does not exist or hasn' 't been coded for extraction.' % (param ))
484
- # print 'boo9', data['amp']
485
-
496
+ 'The data file attribute %s does not exist or '
497
+ 'hasn"t been coded for extraction.' % (param ))
486
498
else :
487
- if param .split ('.' )[0 ] in list (ma .data_file .get ('Instrument settings' , {}).keys ()):
488
- data [param ] = ma .data_file ['Instrument settings' ][
489
- param .split ('.' )[0 ]].attrs [param .split ('.' )[1 ]]
499
+ if param .split ('.' )[0 ] in list (ma .data_file .get (
500
+ 'Instrument settings' , {}).keys ()):
501
+ data [param ] = eval (ma .data_file ['Instrument settings' ][
502
+ param .split ('.' )[0 ]].attrs [param .split ('.' )[1 ]])
490
503
else :
491
504
extract_param = True
492
- if param .split ('.' )[0 ] in list (ma .data_file .get ('Analysis' , {}).keys ()):
505
+ if param .split ('.' )[0 ] in list (ma .data_file .get (
506
+ 'Analysis' , {}).keys ()):
493
507
temp = ma .data_file ['Analysis' ]
494
508
elif param .split ('.' )[0 ] in list (ma .data_file .keys ()):
495
509
temp = ma .data_file
496
510
else :
497
511
extract_param = False
498
512
warnings .warn (
499
- 'The data file attribute %s does not exist or hasn' 't been coded for extraction.' % (param ))
513
+ 'The data file attribute %s does not exist or '
514
+ 'hasn"t been coded for extraction.' % (param ))
500
515
if extract_param :
501
516
for ii in range (len (param .split ('.' ))- 1 ):
502
517
temp = temp [param .split ('.' )[ii ]]
503
518
param_end = param .split ('.' )[- 1 ]
504
519
if param_end in list (temp .attrs .keys ()):
505
- data [param ] = temp .attrs [param_end ]
520
+ try :
521
+ data [param ] = eval (temp .attrs [param_end ])
522
+ except TypeError :
523
+ data [param ] = temp .attrs [param_end ]
506
524
elif param_end in list (temp .keys ()):
507
525
data [param ] = temp [param_end ].value
508
526
if numeric_params is not None :
@@ -690,14 +708,16 @@ def get_all_msmt_filepaths(folder, suffix='hdf5', pattern=''):
690
708
def get_instrument_setting (analysis_object , instrument_name , parameter ):
691
709
instrument_settings = analysis_object .data_file ['Instrument settings' ]
692
710
instrument = instrument_settings [instrument_name ]
693
- attr = instrument .attrs [parameter ]
711
+ attr = eval ( instrument .attrs [parameter ])
694
712
return attr
695
713
696
714
697
715
def compare_instrument_settings_timestamp (timestamp_a , timestamp_b ):
698
716
'''
699
- Takes two analysis objects as input and prints the differences between the instrument settings.
700
- Currently it only compares settings existing in object_a, this function can be improved to not care about the order of arguments.
717
+ Takes two analysis objects as input and prints the differences between
718
+ the instrument settings. Currently it only compares settings existing in
719
+ object_a, this function can be improved to not care about the order of
720
+ arguments.
701
721
'''
702
722
703
723
h5mode = 'r+'
@@ -724,13 +744,13 @@ def compare_instrument_settings_timestamp(timestamp_a, timestamp_b):
724
744
print ('Instrument "%s" does have parameter "%s"' % (
725
745
ins_key , par_key ))
726
746
727
- if ins_a .attrs [par_key ] == ins_b .attrs [par_key ]:
747
+ if eval ( ins_a .attrs [par_key ]) == eval ( ins_b .attrs [par_key ]) :
728
748
pass
729
749
else :
730
750
print (' "%s" has a different value '
731
751
' "%s" for %s, "%s" for %s' % (
732
- par_key , ins_a .attrs [par_key ], timestamp_a ,
733
- ins_b .attrs [par_key ], timestamp_b ))
752
+ par_key , eval ( ins_a .attrs [par_key ]) , timestamp_a ,
753
+ eval ( ins_b .attrs [par_key ]) , timestamp_b ))
734
754
diffs_found = True
735
755
736
756
if not diffs_found :
@@ -742,8 +762,10 @@ def compare_instrument_settings_timestamp(timestamp_a, timestamp_b):
742
762
743
763
def compare_instrument_settings (analysis_object_a , analysis_object_b ):
744
764
'''
745
- Takes two analysis objects as input and prints the differences between the instrument settings.
746
- Currently it only compares settings existing in object_a, this function can be improved to not care about the order of arguments.
765
+ Takes two analysis objects as input and prints the differences between the
766
+ instrument settings. Currently it only compares settings existing in
767
+ object_a, this function can be improved to not care about the order
768
+ of arguments.
747
769
'''
748
770
sets_a = analysis_object_a .data_file ['Instrument settings' ]
749
771
sets_b = analysis_object_b .data_file ['Instrument settings' ]
@@ -764,13 +786,13 @@ def compare_instrument_settings(analysis_object_a, analysis_object_b):
764
786
print ('Instrument "%s" does have parameter "%s"' % (
765
787
ins_key , par_key ))
766
788
767
- if ins_a .attrs [par_key ] == ins_b .attrs [par_key ]:
789
+ if eval ( ins_a .attrs [par_key ]) == eval ( ins_b .attrs [par_key ]) :
768
790
pass
769
791
else :
770
792
print (' "%s" has a different value '
771
793
' "%s" for a, "%s" for b' % (
772
- par_key , ins_a .attrs [par_key ],
773
- ins_b .attrs [par_key ]))
794
+ par_key , eval ( ins_a .attrs [par_key ]) ,
795
+ eval ( ins_b .attrs [par_key ]) ))
774
796
diffs_found = True
775
797
776
798
if not diffs_found :
0 commit comments