## 📊 LicelFile 📋

### Описание проекта

Данный проект реализует средства для чтения и обработки специализированных научных файлов формата Licel (transient recorder), используемых в лазерных измерительных приборах (лидарах). Библиотека разработана на языке Python и предоставляет высокоуровневый интерфейс для удобного доступа к данным измерений, хранящимся в таких файлах.

### Особенности библиотеки:

- Возможность прямого чтения данных из бинарных файлов формата Licel.
- Гибкий API для удобной навигации и анализа полученных данных.
- Поддерживает коллективную работу с несколькими файлами посредством сжатия в архивы формата ZIP.
- Эффективная обработка больших объемов данных с минимальными накладными расходами ресурсов.

### 🏷️ Ключевая терминология

- **Licel File**: Файл, содержащий измерения, выполненные прибором-лидаром.
- **Dataset**: Набор данных в рамках одного измерения, характеризующийся параметрами прибора и условиями эксперимента.
- **Profile**: Информация о конкретном канале измерения (частота лазера, ширина канала, разрешение и др.)

### 💻 Требования к среде

- Python >= 3.7
- Необходимые библиотеки:
  - `dataclasses`
  - `numpy`
  - `zipfile`
  - `datetime`
  - `struct`

### 💥 Основные классы и методы

- **`LicelProfile`**: Представляет профиль, связанный с конкретным каналом измерения (лазером).
- **`LicelFile`**: Основной класс, инкапсулирующий всю информацию, прочитанную из файла Licel.
- **`LicelFilePack`**: Класс, представляющий состав zip архива измерений.
- **`load_licel_file`**: Метод для загрузки и чтения одиночного файла Licel.
- **`load_licelfile_pack`**: Метод для массовой загрузки файлов из архива ZIP.

### 🚀 Быстрый старт

1. **Установка библиотеки**:
   Проект распространяется как самостоятельный модуль, доступный через PIP:

   ```bash
   pip install licelfile
   ```

2. **Базовый сценарий использования**:

   ```python
   from licelfile import load_licel_file

   # Чтение одиночного файла
   licel_file = load_licel_file('path/to/your/file.lic')

   # Доступ к данным
   datasets = licel_file.profiles
   for ds in datasets:
       print(ds.wavelength)
   ```

3. **Работа с архивами ZIP**:

   ```python
   from licelfile import load_licelfile_pack

   # Чтение группы файлов из ZIP
   licel_pack = load_licelfile_pack('path/to/your/data.zip')

   # Проходим по каждому файлу
   for filename, licel_file in licel_pack.files.items():
       print(f"Файл: {filename}, начало измерения: {licel_file.measurementStartTime}")
   ```

### 🩺 Тестирование

Проект сопровождается автоматизированными тестами, расположенными в директории `/tests`. Запуск тестов возможен следующей командой:

```bash
python -m unittest discover tests
```

### 🔮 Будущие планы

- Экспорт результатов в распространенные форматы (CSV, Excel, HDF5).
- Адаптация библиотеки для параллельной обработки больших объемов данных.

