# `haniwers-v1 daq`（データ取得を開始する）

```bash
uv run haniwers-v1 daq
```

`daq`コマンドは、OSECHI検出器から宇宙線イベントデータを取得し、CSVファイルに保存します。

## クイックスタート

### 最も簡単な実行方法

```bash
haniwers-v1 daq --config config.toml
```

設定ファイル（`config.toml`）に必要なパラメータを設定すれば、このコマンド1つでデータ取得が開始されます。

### よくある使用例

**例1: 基本的なデータ取得**

```bash
haniwers-v1 daq --config config.toml
```

**例2: ポートを一時的に変更**

```bash
haniwers-v1 daq --config config.toml --port /dev/ttyUSB1
```

**例3: 30秒間のテスト測定**

```bash
haniwers-v1 daq --config config.toml --duration 30
```

**例4: 出力ディレクトリを変更**

```bash
haniwers-v1 daq --config config.toml --workspace /mnt/usb_drive/data
```

## 実行時の動作

### ディレクトリ構造の自動作成

`daq`コマンド実行時、以下の構造が自動的に作成されます：

```
workspace/
└── YYYYMMDD/              # 実行日付のフォルダが自動作成
    ├── osechi_data_YYYY-mm-ddTHHhMMmSSs_NNNNNN.csv   # タイムスタンプ付きのデータファイル
    └── ...
```

**例**：2025年1月20日に実行した場合：
```
data/
└── 20250120/
    ├── osechi_data_2025-01-20T13h04m05s_000000.csv
    └── osechi_data_2025-01-20T13h05m00s_000001.csv
```

### 測定の進行

データ取得中、以下のような表示が出ます：

```
Starting DAQ session...
[████████████░░░░░░░░] 40% (1000/2500 events)
```

### 完了時の表示

```
DAQ completed successfully
Total events: 2500
Output directory: data/20250120/
Files created: 3
```

## 主要オプション

### `--config` - 設定ファイル指定

デフォルトの設定ファイルのパスを指定します。

```bash
haniwers-v1 daq --config ./config.toml
haniwers-v1 daq --config /path/to/custom-config.toml
```

**重要**: 設定ファイルは通常、最初に指定します。

### `--port` - シリアルポートの変更

使用するシリアルポートを一時的に変更します。設定ファイルより優先されます。

```bash
haniwers-v1 daq --port /dev/ttyUSB1
```

### `--workspace` - 出力ディレクトリの変更

データを保存するベースディレクトリを変更します。

```bash
haniwers-v1 daq --workspace ./experiment02
```

### `--filename-prefix` - ファイル名の接頭辞

生成されるCSVファイルの名前を変更します。

```bash
haniwers-v1 daq --filename-prefix run002
```

出力: `run002_HHMMSS.csv`

### `--events-per-file` - ファイル当たりのイベント数

count_basedモードで、1ファイル当たりのイベント数を指定します。

```bash
haniwers-v1 daq --events-per-file 5000
```

### `--mode` - 取得モードの指定

データ取得方式を明示的に指定します。

```bash
# イベント数ベース（デフォルト）
haniwers-v1 daq --mode count_based

# 時間ベース（デフォルトは10秒）
haniwers-v1 daq --mode time_based
```

### `--duration` - 測定時間（time_basedモード）

時間ベースの測定で、測定時間を秒単位で指定します。

```bash
# 30秒間測定
haniwers-v1 daq --duration 30

# 5分間測定
haniwers-v1 daq --duration 300
```

**注意**: `--duration`を指定すると、自動的に`mode="time_based"`に変更されます。

## 取得モードについて

### count_based（イベント数ベース）

固定イベント数でファイルを区切ります。**デフォルトモード**です。

```bash
haniwers-v1 daq
```

**設定例**:

```toml
[sampler]
mode = "count_based"
events_per_file = 1000
number_of_files = 10
```

このモードでは最大10,000イベント取得します。

### time_based（時間ベース）

固定時間の測定を行います。スレッショルドスキャンやテスト測定に有用です。

```bash
haniwers-v1 daq --mode time_based --duration 30
```

**設定例**:

```toml
[sampler]
mode = "time_based"
duration = 30
```

このモードでは30秒間測定します。

## トラブルシューティング

### 「接続に失敗しました」というエラーが出た

```
[ERROR] Failed to open port /dev/ttyUSB0
```

**確認項目**:

1. ポート名が正しいか確認：
   ```bash
   haniwers-v1 port list
   ```

2. ポート接続をテスト：
   ```bash
   haniwers-v1 port test /dev/ttyUSB0
   ```

3. 別のポートを試す：
   ```bash
   haniwers-v1 daq --config config.toml --port /dev/ttyUSB1
   ```

### 「CSVファイルが生成されない」

**確認項目**:

1. ディレクトリが作成されているか：
   ```bash
   ls -la data/20250120/
   ```

2. 出力ディレクトリが存在するか：
   ```bash
   mkdir -p data/
   ```

3. 書き込み権限があるか：
   ```bash
   touch data/test.txt && rm data/test.txt
   ```

### 「タイムアウトエラー」が頻繁に出る

**解決方法**:

1. タイムアウト値を増やす：
   ```bash
   haniwers-v1 daq --timeout 3.0
   # config.tomlで timeout = 3.0 に変更
   ```

2. ケーブルの接触を確認

3. 別のUSBポートを試す

## データ品質について

取得中、以下のようなメッセージが表示されることがあります：

```
WARNING | Skipped invalid/empty detector line (total skipped: 2)
```

これは、検出器から不正なデータが送信されたことを意味しますが、DAQは中断せず継続します。
詳しくは[データ品質について](./data-quality.md)を参照してください。

## 参考資料

- **[設定ファイルの作成](./config.md)**: config.tomlの詳細パラメータ
- **[ポート管理](./port.md)**: シリアルポート接続の確認
- **[データ品質について](./data-quality.md)**: ノイズ対処とデータ検証
- **[ワークフロー](./workflows-daq.md)**: DAQ実行の全体フロー
