153 lines
5.2 KiB
Python
153 lines
5.2 KiB
Python
"""
|
||
Интерфейс командной строки для использования вычислительных функций
|
||
Позволяет использовать расчёты без графического интерфейса
|
||
"""
|
||
|
||
import json
|
||
import argparse
|
||
from typing import List, Dict
|
||
|
||
from calculations import (
|
||
calculate_medium_composition,
|
||
generate_factorial_design,
|
||
analyze_experiment,
|
||
convert_units,
|
||
VOLUME_UNITS,
|
||
MASS_UNITS
|
||
)
|
||
|
||
|
||
def demo_medium_calculation():
|
||
"""Демонстрация расчёта питательной среды"""
|
||
print("\n" + "=" * 60)
|
||
print("ДЕМОНСТРАЦИЯ РАСЧЁТА ПИТАТЕЛЬНОЙ СРЕДЫ")
|
||
print("=" * 60)
|
||
|
||
# Пример реагентов
|
||
reagents = [
|
||
{
|
||
'name': 'Глюкоза',
|
||
'percentage': 2.0,
|
||
'unit': 'г',
|
||
'conversion_factor': 1.0,
|
||
'dilution_factor': 1.0
|
||
},
|
||
{
|
||
'name': 'Пептон',
|
||
'percentage': 1.0,
|
||
'unit': 'г',
|
||
'conversion_factor': 1.0,
|
||
'dilution_factor': 1.0
|
||
},
|
||
{
|
||
'name': 'Дрожжевой экстракт',
|
||
'percentage': 0.5,
|
||
'unit': 'г',
|
||
'conversion_factor': 1.0,
|
||
'dilution_factor': 1.0
|
||
}
|
||
]
|
||
|
||
print("\nИсходные данные:")
|
||
print(f"Общий объём: 1000 мл")
|
||
print("Реагенты:")
|
||
for r in reagents:
|
||
print(f" - {r['name']}: {r['percentage']}%")
|
||
|
||
# Расчёт
|
||
result = calculate_medium_composition(
|
||
total_volume=1000,
|
||
volume_unit='мл',
|
||
reagents=reagents,
|
||
solvent_name='Вода'
|
||
)
|
||
|
||
print("\nРезультаты расчёта:")
|
||
print(f"Растворитель ({result['solvent_name']}): {result['solvent_volume']:.2f} {result['total_unit']} "
|
||
f"({result['solvent_percentage']:.1f}%)")
|
||
print("\nКоличества реагентов:")
|
||
for r in result['reagents']:
|
||
print(f" - {r['name']}: {r['calculated_amount']:.4f} {r['unit']}")
|
||
|
||
|
||
def demo_doe_calculation():
|
||
"""Демонстрация планирования эксперимента"""
|
||
print("\n" + "=" * 60)
|
||
print("ДЕМОНСТРАЦИЯ ПЛАНИРОВАНИЯ ЭКСПЕРИМЕНТА")
|
||
print("=" * 60)
|
||
|
||
# Факторы
|
||
factors = [
|
||
{'name': 'Температура', 'low': 25, 'high': 37, 'center': 31, 'unit': '°C'},
|
||
{'name': 'pH', 'low': 6.5, 'high': 7.5, 'center': 7.0, 'unit': ''}
|
||
]
|
||
|
||
print("\nФакторы эксперимента:")
|
||
for f in factors:
|
||
print(f" - {f['name']}: {f['low']} – {f['high']} {f['unit']} (центр: {f['center']})")
|
||
|
||
# Генерация плана
|
||
design = generate_factorial_design(factors, center_points=3, randomize=True)
|
||
|
||
print(f"\nСгенерировано {len(design)} опытов:")
|
||
for i, exp in enumerate(design):
|
||
is_center = exp.get('is_center', False)
|
||
type_str = "Центральная" if is_center else "Факторная"
|
||
|
||
values = []
|
||
for key in sorted(exp.keys()):
|
||
if key.startswith('Фактор_'):
|
||
values.append(f"{exp[key]['natural']}{exp[key]['unit']}")
|
||
|
||
print(f" {i+1}. {type_str}: {', '.join(values)}")
|
||
|
||
|
||
def demo_unit_conversion():
|
||
"""Демонстрация конвертации единиц"""
|
||
print("\n" + "=" * 60)
|
||
print("ДЕМОНСТРАЦИЯ КОНВЕРТАЦИИ ЕДИНИЦ")
|
||
print("=" * 60)
|
||
|
||
print("\nОбъёмные единицы (база: мкл):")
|
||
for unit, factor in VOLUME_UNITS.items():
|
||
print(f" 1 {unit} = {factor} мкл")
|
||
|
||
print("\nМассовые единицы (база: мг):")
|
||
for unit, factor in MASS_UNITS.items():
|
||
print(f" 1 {unit} = {factor} мг")
|
||
|
||
print("\nПримеры конвертации:")
|
||
print(f" 100 мл = {convert_units(100, 'мл', 'мкл'):.0f} мкл")
|
||
print(f" 5000 мкл = {convert_units(5000, 'мкл', 'мл'):.2f} мл")
|
||
print(f" 2 г = {convert_units(2, 'г', 'мг'):.0f} мг")
|
||
print(f" 500 мг = {convert_units(500, 'мг', 'г'):.2f} г")
|
||
|
||
|
||
def main():
|
||
parser = argparse.ArgumentParser(description='Биохимический помощник - командная строка')
|
||
parser.add_argument('--demo', choices=['medium', 'doe', 'units', 'all'],
|
||
default='all', help='Демонстрация расчётов')
|
||
|
||
args = parser.parse_args()
|
||
|
||
if args.demo in ['medium', 'all']:
|
||
demo_medium_calculation()
|
||
|
||
if args.demo in ['doe', 'all']:
|
||
demo_doe_calculation()
|
||
|
||
if args.demo in ['units', 'all']:
|
||
demo_unit_conversion()
|
||
|
||
print("\n" + "=" * 60)
|
||
print("Советы по использованию библиотеки:")
|
||
print(" from calculations import *")
|
||
print(" result = calculate_medium_composition(...)")
|
||
print(" design = generate_factorial_design(...)")
|
||
print(" analysis = analyze_experiment(...)")
|
||
print("=" * 60)
|
||
|
||
|
||
if __name__ == "__main__":
|
||
main()
|