Переработан интерфейс программы, расчёт занчений в процессе исправления.
This commit is contained in:
@@ -0,0 +1,152 @@
|
||||
"""
|
||||
Интерфейс командной строки для использования вычислительных функций
|
||||
Позволяет использовать расчёты без графического интерфейса
|
||||
"""
|
||||
|
||||
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()
|
||||
Reference in New Issue
Block a user