🌊

LabRAD入門③:Data Vaultの使い方

2021/10/09に公開

Registryでvaultの場所を変更

Data VaultはLabRAD上でデータを保存したり、開いたりするときに使うサーバー。データを保存するときのデータの拡張子はhdf5になっている。

import labrad
cxn = labrad.connect()
reg = cxn.registry
# Registry内で~\Servers\Data Vault\Repositoryというディレクトリに移動
reg.cd(['','Servers', 'Data Vault','Repository'])
# ([], ['__default__', 'pc_name']) # PCの名前がpc_nameのとき。

#現在のvaultの場所を取得
reg.get('pc_name')
# デフォルトなら'C:\\Users\\User/.labrad/vault'

#new_path: 新しいvaultのpath
new_path = 'D:\\labrad_data/vault'
# vaultの場所をnew_pathに変更
reg.set('pc_name', new_path)

ファイル作成、データ保存、データ取得

Data Vaultではファイル作成、データ保存、データ取得などの際に下記の関数を使用する。

import labrad
cxn = labrad.connect()
DV = cxn.data_vault

# 主な関数
DV.dir() #サブディレクトリとファイルをリストが入ったtupleとして返す。
# index 0がサブディレクトリ、index 1がファイル:([Directry1, Directry2...], [file1, file2, file3...])

DV.cd('name') #'name' ディレクトリに移動。移動後のパスをリストとして返す。

DV.mkdir('name') #'name' ディレクトリを作成。作成したディレクトリ内のパスをリストとして返す。

DV.new(file_name, scan_variables, measured_variables) 
#新しいhdf5(ファイル名は、"**** - fine_name.hdf5" ****は番号)をを作成. file_name:string(測定ファイル名), scan_variables:リスト (コントロール変数、例えば温度、磁場、ゲート電圧など)、measred_variables:リスト (測定変数。例えば測定電圧、測定電流、測定磁場など) 戻り値としてファイルのpathとファイル名を返す。

DV.add(data) #測定データをdata: numpy.arrayとして追加。コントロール変数の合計がM、測定点がNだとすると、(N, M)のnumpy.arrayを入力する。

DV.add_parameter('key', value) # 測定装置のパラメーターなど追加。DV.add_parameterで後からparameterを取得可。

DV.variables(file_number) #返り値として、ファイル作成時に入力したコントロール変数と測定変数を取得。

#以下はファイルを開いて、データを取得する方法の例

DV.cd('') #ホームディレクトリ(vaultフォルダ)に移動

DV.cd(file_path) #データが入っているフォルダに移動
#file_pathには保存フォルダ(device1)がホームディレクトリ(vault)にあるときには'device1'とか、vault/Data/Project1/sample1にあるときには、['', 'Data', 'Project1', 'sample1']と入力する。

DV.open(file_index) #ディレクトリ内のファイルを開く。ファイル番号のindexを入力,ファイル名は通常0001-name.py, 0002-name.pyと続いていくが、pythonのindexは0から始まるので注意 

data = DV.get() # DimensionlessArrayとしてデータを取得

Data Vaultの実際の使用例

実際に適当なファイル名でファイルを作成して、適当なデータをそのファイルに保存して、そのファイルからデータを取り出すということをやってみる。

import numpy as np
import pandas as pd
import labrad 

cxn = labrad.connect()
DV = cxn.data_vault
DV.cd('') #ホームディレクトリ(vaultフォルダに移動)

#device1というディレクトリを作成
file_path = 'device1' 
try:
    DV.mkdir(file_path)
    DV.cd(file_path)
except Exception:
    DV.cd(file_path)

file_name = 'device1_resistance_vs_gate'
scan_variables = ['gate_voltage', 'temperature', 'magnetic_field']
measured_variables = ['measured_voltage', 'measured_current']
DV.new(file_name, scan_variables, measured_variables) # 例えば0001 - device1_resistance_vs_gate.hdf5というファイルが作成される。

DV.add_parameter('current [nA]', 100) #パラメータの情報を追加

'''
dataは測定データの例(gate_voltageを変化させて5点だけ測定する場合)
gate_volatge は2から-2まで変化
temperature は0.2で固定
magnetic_fieldは0.5で固定
measured_voltageは0.1と-0.1を交互にとる
measured_voltageは0.3と-0.3を交互にとる
'''
data = np.array([[2, 0.2, 0.5, 0.1, 0.3],
                [1, 0.2, 0.5, -0.1, -0.3],
                [0, 0.2, 0.5, 0.1, 0.3],
                [-1, 0.2, 0.5, -0.1, -0.3],
                [-2, 0.2, 0.5, 0.1, 0.3]])
DV.add(data) #測定データhdf5ファイルに追加: numpy.arrayとして追加。コントロール変数の合計がM、測定点がNだとすると、(N, M)のnumpy.arrayを入力する。

###以下はファイルを開いて、データを取得する方法の例

# 戻り値として、ファイル作成時に入力したコントロール変数と測定変数をリストとして返す。
DV.cd('') #ホームディレクトリ(vaultフォルダ)に移動
DV.cd(file_path) #データが入っているフォルダに移動
DV.open(DV.dir()[1][file_index) #ディレクトリ内のファイルを開く。file_indexはフォルダ内のファイルのindexを入力,ファイル名は通常0001-name.py, 0002-name.pyと続いていくが、pythonのindexは0から始まるので注意 
measured_data = DV.get() # DimensionlessArrayとしてデータを取得
#ファイル作成時に入力したコントロール変数と測定変数をリストとして取得。
cl = [DV.variables()[0][i][0] for i in range(len(DV.variables()[0]))] + [DV.variables()[1][i][0] for i in range(len(DV.variables()[1]))]

# 例えばデータフレームを使ってデータを取得。
df = pd.DataFrame(data, columns = cl)
display(df)

https://zenn.dev/yseeker/articles/3f4cd32a10ace3

Discussion