Package: demerge
de:mergeDESHIMA merge code for observed datasetsMergeToDfits()クラスの代わりとなるmerge_to_dems()関数を実装し、DEMSオブジェクトを生成できるようにしました。今回の更新では、付属のPythonパッケージdemergeをPython環境にインストールすることで、同名のコマンドdemergeが利用可能となります（demerge/run.shのラッパースクリプトです）。これを実行するとmerge_to_dems()関数が実行され、解析結果がまとまったZarrファイルが生成されます。DEMSの構造についてはdeshima-dev/demsをご覧ください。動作環境CPython: 3.9-3.12Dependent packages:pyproject.tomlをご確認くださいインストール一般ユーザpipでPyPIからインストールしてください。pipinstalldemerge==2.11.0インストール後、demergeコマンドが利用可能になります。開発者以下のコマンドで実行環境にダウンロード（クローン）してください。# テストデータを含める場合gitclone--recursivehttps://github.com/deshima-dev/demerge.gitcddemerge&&gitcheckoutv2.11.0# 最小構成でダウンロードする場合gitclone--depth=1https://github.com/deshima-dev/demerge.gitcddemerge&&gitcheckoutv2.11.0続けて、demergeパッケージのPython環境へのインストールを行います。cd/path/to/demerge# pipでインストールする場合pipinstall-e.# Poetryでインストールする場合poetryinstallインストール後、demergeコマンドが利用可能になります。解析の実行例以下のコマンドでOBSID=20171103184436の解析を行います。観測データはdataに格納されているものとします。demerge-ddata20171103184436以下のコマンドでテスト用のデータをダウンロードすることができます。deshima-rawdatadownload20171103184436-ddata-eどのデータがダウンロードできるかは、データリストをご確認ください。deshima-rawdatalistdemergeコマンドの引数以下の引数を指定すると、データの取得ディレクトリや保存先などを変更することができます。引数説明デフォルト-d観測データディレクトリの指定data-cキャッシュディレクトリを指定cache-gグラフディレクトリを指定graph-bDDBファイルを指定dmerge/ddb_20231123.fits.gz（パッケージに同梱）-o出力データディレクトリを指定cache-mマージオプションを指定（例：-m "--coordinate radec"）なし観測データの保存先の構造data
├── cosmos_20171103184436
│   ├── 20171103184436_info.txt
│   ├── 20171103184436.ant
│   ├── 20171103184436.cabin
│   ├── 20171103184436.fits.gz
│   ├── 20171103184436.misti
│   ├── 20171103184436.obs
│   ├── 20171103184436.roomchop
│   ├── 20171103184436.skychop
│   ├── 20171103184436.tsky
│   ├── 20171103184436.wea
│   ├── kids.list
│   ├── localsweep_info.txt
│   ├── localsweep.sweep
│   └── pretune
│       ├── kids.list
│       ├── localsweep_info.txt
│       └── localsweep.sweep

((( 続く )))解析結果の保存場所demergeコマンドを実行すると、デフォルトでは直下にcacheとgraphというディレクトリが作成されます。これらのディレクトリの中にはさらにobsidのディレクトリが作成され、そこに解析結果が保存されます。最終結果のZarrファイルもcache/dems_((OBSID))/((OBSID)).zarr.zipというパスに保存されます。以下にOBSID=20171103184436を解析した時のcache内のファイル構造を示します。cache
├── 20171103184436
│   ├── dems_20171103184436.zarr.zip <--- これがmerge_to_dems.pyで生成されるファイル
│   ├── kid00000.pkl
│   ├── kid00001.pkl
│   ├── kid00002.pkl
│   ├── kid00003.pkl
│   ├── kid00004.pkl
│   ├── kid00005.pkl

(((中略)))

│   ├── kid00057.pkl
│   ├── kid00058.pkl
│   ├── kid00059.pkl
│   ├── kid00060.pkl
│   ├── kid00061.pkl
│   ├── kid00062.pkl
│   └── reduced_20171103184436.fits

(((続く)))以下にOBSID=20171103184436を解析した時のgraph内のファイル構造を示します。graph
├── 20171103184436
│   ├── sweep_kid00000.png
│   ├── sweep_kid00001.png
│   ├── sweep_kid00002.png
│   ├── sweep_kid00003.png
│   ├── sweep_kid00004.png
│   ├── sweep_kid00005.png

(((中略)))

│   ├── sweep_kid00059.png
│   ├── sweep_kid00060.png
│   ├── sweep_kid00061.png
│   ├── sweep_kid00062.png
│   ├── tod_kid00000.png
│   ├── tod_kid00001.png
│   ├── tod_kid00002.png
│   ├── tod_kid00003.png
│   ├── tod_kid00004.png
│   ├── tod_kid00005.png

(((中略)))

│   ├── tod_kid00059.png
│   ├── tod_kid00060.png
│   ├── tod_kid00061.png
│   └── tod_kid00062.png

(((続く)))テストの実行方法cd/path/to/demerge/test
./mktd.sh# テストに必要なダミーデータを生成しますpython-munittest# merge_to_dems関数およびmerge_functionモジュールのテストを実行しますテストを実行するにはダミーデータとテストデータが必要になります。ダミーデータはmktd.shスクリプトを実行することで生成されます。テストデータはdata/cosmos_20171103184436/の中のものを使いますので、上記の手順であらかじめダウンロードしてください。merge_to_dems.pyについてmerge_to_dems()関数が定義されています。この関数は以下の8つのファイルからDEMSオブジェクトを生成します。DDBファイル(.fits.gz)obsファイル(.obs)antennaファイル(.ant)skychopファイル(.skychop)weatherファイル(.wea)mistiファイル(.misti)cabinファイル(.cabin)reduced readoutファイル(.fits)reduced readoutファイルはdemerge/run.shを実行することによって生成されます。DDBファイルはdemergeのリポジトリに含まれているキャリブレーションデータです。その他のファイル(obs, antenna, skychop, weather, misti, cabin)は観測とともに得られるデータです。merge_to_dems()関数は以下の必須引数とオプション引数をとることができます。必須引数引数名型説明filename文字列出力ファイルへのパスを指定して下さい(.zarr.zip)--ddb文字列DDBファイルへのパスを指定して下さい(.fits.gz)--obs文字列obsファイルへのパスを指定して下さい(.obs)--antenna文字列antennaファイルへのパスを指定して下さい(.antenna)--readout文字列reduced readoutファイルへのパスを指定して下さい(.fits)--skychop文字列skychopファイルへのパスを指定して下さい(.skychop)--weather文字列weatherファイルへのパスを指定して下さい(.weather)--misti文字列mistiファイルへのパスを指定して下さい(.misti)--cabin文字列cabinファイルへのパスを指定して下さい(.cabin)オプション引数引数名型既定値説明--coordinate文字列'azel'座標系(azel/radec)を文字列で指定します--loadtype文字列'fshift'読み込むデータを文字列で指定します--findRフラグなし指定するとFindR, Skyを実行します--ch整数0findRに利用するチャネルを整数で指定します--Rth実数280.0R閾値を実数で指定します--skyth実数150.0sky閾値を実数で指定します--cutnum整数1findRでのカット数を整数で指定します--stillフラグなし指定するとstill観測用の解析を行います--period整数2still観測の1/2周期(秒)を整数で指定します--shuttleフラグなし指定するとshuttle観測用の解析を行います--lon_min_off実数0.0shuttle観測時のOFFにするlongitudeの最小値を実数で指定します--lon_max_off実数0.0shuttle観測時のOFFにするlongitudeの最大値を実数で指定します--lon_min_on実数0.0shuttle観測時のONにするlongitudeの最小値を実数で指定します--lon_max_on実数0.0shuttle観測時のONにするlongitudeの最大値を実数で指定します--offset_time_antenna整数0TODデータとAntennaログの時刻のずれの補正値(ms)を整数で指定します--debugフラグなし指定すると全ての引数の値をログとして表示します--loadtypeはTsignal(空の輝度温度)とfshift(MKIDのdf/f)を指定できます。demerge/run.shでは上記オプション引数を文字列として-m "--coordinate radec --findR --debug"のように指定することができます。tdmaker.pyについてtdmaker.pyにはTestDataMakerクラスが定義されています。このクラスを利用するとmerge_to_dems()関数のテストに必要なダミーデータを生成することができます。以下のファイルを個別に生成することができます。ファイルの種類周期(秒)拡張子ddb-.fits.gzantenna0.1.antreadout0.00625.fitsskychop0.001.skychopweather10.weamisti0.1.misticabin60.cabindfits-.fits.gzdfitsファイル(.fits.gz) (dfitsファイルはdeshima1.0のdemergeで生成されていたファイルです。これらのファイルの測定開始時刻は同一時刻に設定されます。同じ時刻から始まり各ファイル毎の周期でデータが記録されます。TestDataMakerクラスはオプションを指定することで様々なデータを生成することができます。以下にtdmaker.pyで指定できる引数を示します。引数名型既定値説明data_name文字列-個別にデータを生成する場合はデータ名を指定します。指定しない場合は全てのデータが生成されます。--time整数3観測時間(分)を整数で指定して下さい--p0実数1.0p0をfloatで指定して下さい--etaf実数0.5etafをfloatで指定して下さい--T0実数1.0T0をfloatで指定して下さい--Qr実数1.1Qrをfloatで指定して下さい--linyfc実数0.25linyfcをfloatで指定して下さい--linear_readout文字列-readoutの値を線形に変化させる場合はinc/decのいずれかを指定して下さい--linear_antenna真理値Falseantennaのlonを線形に変化させる場合はTrueを指定して下さい--all_grad真理値FalseすべてのSCAN状態をGRADにする場合はTrueを指定して下さい--lower_cabin_temp実数15.0MainCabinの温度(degC)をfloatで指定して下さい--prefix文字列'testdata'生成されるファイル名のprefixを指定して下さい--measure_time整数-環境測定時間(分)を整数で指定して下さいdata_nameを指定すると指定されたデータだけが生成されます。指定しない場合は全ての種類のデータが生成されます。--timeは観測時間(分)を指定します。--measure_timeを指定しなければ観測時間と環境測定時間は同じになります。観測時間とはreadoutの時間であり、環境測定時間はreadout以外のcabinやweatherなどの測定時間になります。通常--timeだけを指定した場合、または--timeも--measure_timeも省略した場合は環境測定時間が観測時間よりも少し長くなるように生成されます。このようなデータではreadoutの時刻に合わせて環境測定時間を補間する場合に外挿処理は発生しません。外挿処理が発生した場合の振る舞いを調べる場合に--measure_timeオプションで--timeよりも短い時間を指定します。--p0,--etaf,--T0,--Qr,--linyfcはmerge_function.pyで定義されているTlos_model()関数とcalibrate_to_power()関数で計算に利用される係数を設定します。mktd.shでは計算値のTsignalが定数になるように設定したり、0Kから300Kまで3分間で線形に変化するように係数を設定しています。計算結果のTsignalを線形に変化させるためには--linear_readoutにincまたはdecの文字列を指定します。incはTsignalが単調増加し、decは単調減少します。 同様にantennaのlongitudeも線形に変化させることができます。--linear_antennaにTrueを設定するとantennaのlongitudeが線形に増加します。--all_gradをTrueにするとSCAN状態が全てGRADのantennaデータができます。省略(Falseを設定すると)すると観測時間の半分でGRADからONに切り替わるデータとなります。--lower_cabin_tempはMainCabinの温度を指定します。--prefixには生成するデータの接頭語を指定します。用途に合わせてわかりやすい名前を付けます。TestDataMakerクラスの詳細な使い方はmktd.shスクリプトをご覧下さい。