Расширен функционал, начата разработка функционала по оптимизации
This commit is contained in:
@@ -1,194 +1,55 @@
|
||||
# Калькулятор питательных сред
|
||||
markdown
|
||||
# 🧬 Цифровой помощник биохимика
|
||||
|
||||
Программа для расчёта состава питательных сред с поддержкой разбавленных реагентов.
|
||||
**Биотехнологические инструменты для лаборатории**
|
||||
|
||||
## 📋 Функционал
|
||||
## 📋 О проекте
|
||||
|
||||
- **Расчёт состава среды** по процентному содержанию компонентов
|
||||
- **Поддержка разных единиц измерения** (нг, мкг, мг, г, кг, нл, мкл, мл, л)
|
||||
- **Коэффициент пересчёта** для каждого реагента (например, для перевода объёма в массу)
|
||||
- **Разбавление реагентов** — возможность указать, во сколько раз разбавлен исходный реактив
|
||||
- **Автоматический расчёт растворителя** с учётом объёма вносимых разбавленных реагентов
|
||||
- **Сохранение и загрузка** состава в JSON-файл
|
||||
- **Интерактивная таблица** с возможностью добавления/удаления реагентов
|
||||
Цифровой помощник биохимика — это программный комплекс для автоматизации лабораторных расчётов и планирования экспериментов в области биотехнологии и биохимии.
|
||||
|
||||
## 🚀 Установка и запуск
|
||||
## 🚀 Возможности
|
||||
|
||||
### Требования
|
||||
- Python 3.6 или выше
|
||||
- PyQt5
|
||||
### 1. 🥼 Калькулятор питательных сред
|
||||
- Расчёт состава питательных сред по процентному содержанию компонентов
|
||||
- Поддержка различных единиц измерения (нг, мкг, мг, г, кг, нл, мкл, мл, л)
|
||||
- Учёт разбавления исходных реактивов
|
||||
- Автоматический расчёт количества растворителя
|
||||
- Сохранение и загрузка рецептов в JSON
|
||||
|
||||
### Установка зависимостей
|
||||
```bash
|
||||
pip install PyQt5
|
||||
```
|
||||
### 2. 📊 Планирование эксперимента (DoE)
|
||||
- Полнофакторный дизайн эксперимента (2^k факторный план)
|
||||
- Интерактивное создание матрицы планирования
|
||||
- Регрессионный анализ (в разработке)
|
||||
- Визуализация результатов (в разработке)
|
||||
|
||||
### Запуск программы
|
||||
```bash
|
||||
python main.py
|
||||
```
|
||||
## 🛠 Технологии
|
||||
|
||||
## 📖 Использование
|
||||
|
||||
### Основные параметры
|
||||
1. **Общее количество** — конечный объём/масса готовой среды
|
||||
2. **Единица измерения** — нл, мкл, мл, л
|
||||
3. **Растворитель** — название растворителя (отображается в первой строке таблицы)
|
||||
|
||||
### Таблица реагентов
|
||||
|
||||
| Колонка | Описание |
|
||||
|---------|----------|
|
||||
| Название | Имя реагента |
|
||||
| % | Процентное содержание в конечной среде |
|
||||
| Единица | В каких единицах измеряется реагент |
|
||||
| Коэфф. | Коэффициент пересчёта (например, для перевода объёма в массу) |
|
||||
| Разбавление (x) | Во сколько раз разбавлен исходный реактив (1 = не разбавлен) |
|
||||
| Нужно взять (разб.) | Рассчитанное количество разбавленного реагента |
|
||||
|
||||
### Пример расчёта
|
||||
|
||||
**Задача:** Приготовить 100 мл питательной среды с 10% соли.
|
||||
|
||||
**Вариант 1 — соль не разбавлена:**
|
||||
- Разбавление = 1
|
||||
- Нужно взять: 10 г соли
|
||||
- Растворителя: 100 мл
|
||||
|
||||
**Вариант 2 — есть 10-кратно разбавленная соль:**
|
||||
- Разбавление = 10
|
||||
- Нужно взять: 1 мл разбавленной соли (10 г / 10)
|
||||
- Растворителя: 99 мл (100 мл - 1 мл)
|
||||
|
||||
## 🧠 Особенности реализации
|
||||
|
||||
### Расчёт растворителя
|
||||
|
||||
**Важное примечание:** При расчёте объёма растворителя учитываются только те реагенты, которые заданы в **объёмных единицах** (нл, мкл, мл, л). Реагенты в **единицах массы** (нг, мкг, мг, г, кг) считаются не имеющими объёма и не влияют на расчёт растворителя.
|
||||
|
||||
Это сделано потому, что:
|
||||
1. Массовые реагенты обычно добавляются в твёрдом виде и их объём пренебрежимо мал
|
||||
2. Для корректного учёта объёма твёрдых веществ потребовалась бы плотность
|
||||
|
||||
```python
|
||||
# Пример из model.py
|
||||
if is_volume:
|
||||
# Реагент в объёмных единицах — учитываем его объём
|
||||
reagent_volume_base = diluted_amount * VOLUME_UNITS[reagent.unit]
|
||||
else:
|
||||
# Реагент в массовых единицах — не учитываем (объём = 0)
|
||||
reagent_volume_base = 0
|
||||
```
|
||||
|
||||
### Алгоритм расчёта
|
||||
|
||||
1. **Расчёт неразбавленного состава**
|
||||
- Количество чистого вещества = (процент / 100) × общий объём
|
||||
|
||||
2. **Пересчёт с учётом разбавления**
|
||||
- Количество разбавленного реагента = чистое вещество / фактор разбавления
|
||||
|
||||
3. **Расчёт объёма вносимых реагентов**
|
||||
- Для объёмных реагентов: объём = количество разбавленного реагента
|
||||
- Для массовых реагентов: объём = 0
|
||||
|
||||
4. **Расчёт растворителя**
|
||||
- Объём растворителя = общий объём − сумма объёмов всех реагентов
|
||||
- Python 3.6+
|
||||
- PyQt5 — графический интерфейс
|
||||
- JSON — хранение данных
|
||||
|
||||
## 📁 Структура проекта
|
||||
digital_biochemist_assistant/
|
||||
├── main.py # Точка входа
|
||||
├── main_window.py # Главное окно с выбором инструментов
|
||||
├── controller.py # Контроллер калькулятора сред
|
||||
├── model.py # Модель расчётов
|
||||
├── view.py # Интерфейс калькулятора
|
||||
├── reagent.py # Класс реагента
|
||||
├── experiment_design.py # Инструмент планирования эксперимента
|
||||
└── README.md # Документация
|
||||
|
||||
```
|
||||
nutrient_medium_pyqt/
|
||||
├── main.py # Точка входа, инициализация приложения
|
||||
├── controller.py # Контроллер — связь между моделью и представлением
|
||||
├── model.py # Модель — бизнес-логика и расчёты
|
||||
├── view.py # Представление — GUI на PyQt5
|
||||
├── reagent.py # Класс Reagent для хранения данных
|
||||
└── README.md # Документация
|
||||
```
|
||||
text
|
||||
|
||||
## 🔧 Описание кода
|
||||
## 🎯 Планы развития
|
||||
|
||||
### main.py
|
||||
Инициализирует QApplication, создаёт экземпляр Controller и запускает главный цикл обработки событий.
|
||||
|
||||
### reagent.py
|
||||
```python
|
||||
class Reagent:
|
||||
def __init__(self, name: str, percentage: float, unit: str, conversion_factor: float = 1.0)
|
||||
```
|
||||
Хранит данные о реагенте:
|
||||
- `name` — название
|
||||
- `percentage` — процентное содержание
|
||||
- `unit` — единица измерения
|
||||
- `conversion_factor` — коэффициент пересчёта
|
||||
- `dilution_factor` — коэффициент разбавления (добавляется динамически)
|
||||
|
||||
### model.py
|
||||
Содержит бизнес-логику программы:
|
||||
|
||||
**Константы:**
|
||||
```python
|
||||
VOLUME_UNITS = {'нл': 0.001, 'мкл': 1.0, 'мл': 1000.0, 'л': 1000000.0}
|
||||
MASS_UNITS = {'нг': 0.000001, 'мкг': 0.001, 'мг': 1.0, 'г': 1000.0, 'кг': 1000000.0}
|
||||
```
|
||||
|
||||
**Основные методы:**
|
||||
- `convert_amount()` — пересчёт между единицами измерения через базовые (мкл для объёма, мкг для массы)
|
||||
- `calculate_amounts()` — главный расчётный метод
|
||||
- `save_to_file()` / `load_from_file()` — сериализация в JSON
|
||||
|
||||
### view.py
|
||||
Реализует графический интерфейс на PyQt5:
|
||||
|
||||
**Основные компоненты:**
|
||||
- `QDoubleSpinBox` для общего количества
|
||||
- `QComboBox` для выбора единиц измерения
|
||||
- `QTableWidget` для таблицы реагентов (6 колонок)
|
||||
- Кнопки: Добавить, Удалить, Рассчитать, Сохранить, Загрузить
|
||||
|
||||
**Ключевые методы:**
|
||||
- `add_solvent_row()` — создаёт нередактируемую строку растворителя
|
||||
- `add_new_row()` — добавляет строку реагента
|
||||
- `update_results()` — обновляет результаты расчёта
|
||||
- `update_solvent_result()` — обновляет количество растворителя
|
||||
|
||||
### controller.py
|
||||
Координирует взаимодействие Model и View:
|
||||
|
||||
**Сигналы (слоты):**
|
||||
- `add_row_btn.clicked` → `add_reagent_row()`
|
||||
- `calculate_btn.clicked` → `_perform_calculation()`
|
||||
- `save_btn.clicked` → `save_composition()`
|
||||
- `load_btn.clicked` → `load_composition()`
|
||||
|
||||
**Основные методы:**
|
||||
- `_update_model_from_view()` — переносит данные из таблицы в модель
|
||||
- `_update_view_from_model()` — заполняет таблицу из модели
|
||||
- `_perform_calculation()` — вызывает расчёт и обновляет интерфейс
|
||||
|
||||
## 📝 Формат JSON-файла
|
||||
|
||||
```json
|
||||
{
|
||||
"total_amount": 1000.0,
|
||||
"amount_unit": "мл",
|
||||
"solvent": "Вода",
|
||||
"reagents": [
|
||||
{
|
||||
"name": "NaCl",
|
||||
"percentage": 0.9,
|
||||
"unit": "г",
|
||||
"conversion_factor": 1.0,
|
||||
"dilution_factor": 1.0
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
## 🤝 Вклад в проект
|
||||
|
||||
При обнаружении ошибок или наличии предложений создавайте Issue или Pull Request.
|
||||
- [ ] Расширенный статистический анализ
|
||||
- [ ] Визуализация поверхностей отклика
|
||||
- [ ] Экспорт в Excel и PDF
|
||||
- [ ] База данных реагентов и рецептов
|
||||
- [ ] Графический редактор плана эксперимента
|
||||
- [ ] Модуль концентраций и разбавлений
|
||||
- [ ] Калькулятор растворов
|
||||
|
||||
## 📄 Лицензия
|
||||
|
||||
@@ -196,4 +57,17 @@ MIT License
|
||||
|
||||
## 👨💻 Автор
|
||||
|
||||
Kolobov Artem
|
||||
Kolobov artem
|
||||
|
||||
|
||||
Основные изменения:
|
||||
|
||||
1. Новое название - "Цифровой помощник биохимика" (Digital Biotechnologist Assistant)
|
||||
|
||||
2. Современный дизайн - градиентный фон, иконки, улучшенная стилизация
|
||||
|
||||
3. Расширенный DoE модуль - уже умеет генерировать матрицу планирования для 2^k факторного плана
|
||||
|
||||
4. Улучшенная навигация - вкладки, понятные описания
|
||||
|
||||
5. Профессиональный вид - современный интерфейс, подходящий для лаборатории
|
||||
|
||||
Reference in New Issue
Block a user