Skip to content

Instantly share code, notes, and snippets.

@partrita
Last active June 22, 2025 04:59
Show Gist options
  • Select an option

  • Save partrita/6dc90106a8abec3b22a06395c2b62fca to your computer and use it in GitHub Desktop.

Select an option

Save partrita/6dc90106a8abec3b22a06395c2b62fca to your computer and use it in GitHub Desktop.
simple python script for calculator of chromatography
import click
import math
# 상수는 전역적으로 정의
PI = math.pi # math.pi를 사용하여 더 정확한 파이 값 사용
def calculate_cross_sectional_area(diameter_cm: float) -> float:
"""
주어진 직경에 대한 원형 단면적을 계산합니다.
"""
return PI * (diameter_cm ** 2) / 4.0
@click.group()
def cli():
"""
컬럼 크로마토그래피 관련 계산을 위한 CLI 도구입니다.
"""
pass
@cli.command()
@click.option(
'-l', '--linear-flow', prompt='선형 유속 (cm/h)?',
type=float, # 선형 유속은 정수뿐만 아니라 소수점도 가능하므로 float으로 변경
help='컬럼의 선형 유속 (cm/h).'
)
@click.option(
'-d', '--diameter', prompt='컬럼 직경 (cm)?',
type=float,
help='컬럼의 직경 (cm).'
)
def flowrate(linear_flow: float, diameter: float):
"""
선형 유속과 직경을 사용하여 부피 유속 (ml/min)을 계산합니다.
"""
# 선형 유속을 cm/min으로 변환
linear_flow_cm_per_min = linear_flow / 60.0
# 단면적 계산
cross_sectional_area = calculate_cross_sectional_area(diameter)
# 부피 유속 계산
volumetric_flow_rate = linear_flow_cm_per_min * cross_sectional_area
click.echo(f'계산된 부피 유속은 {volumetric_flow_rate:.2f} ml/min 입니다.')
@cli.command()
@click.option(
'-v', '--volumetric-flow', prompt='부피 유속 (ml/min)?',
type=float,
help='컬럼의 부피 유속 (ml/min).'
)
@click.option(
'-d', '--diameter', prompt='컬럼 직경 (cm)?',
type=float,
help='컬럼의 직경 (cm).'
)
def linear_flow(volumetric_flow: float, diameter: float):
"""
부피 유속과 직경을 사용하여 선형 유속 (cm/h)을 계산합니다.
"""
# 단면적 계산
cross_sectional_area = calculate_cross_sectional_area(diameter)
# 선형 유속 (cm/min) 계산
linear_flow_cm_per_min = volumetric_flow / cross_sectional_area
# 선형 유속을 cm/h으로 변환
linear_flow_cm_per_hour = linear_flow_cm_per_min * 60.0
click.echo(f'계산된 선형 유속은 {linear_flow_cm_per_hour:.2f} cm/h 입니다.')
@cli.command()
@click.option(
'-l', '--linear-flow', prompt='선형 유속 (cm/h)?',
type=float, # 선형 유속은 정수뿐만 아니라 소수점도 가능하므로 float으로 변경
help='컬럼의 선형 유속 (cm/h).'
)
@click.option(
'-b', '--bed-height', prompt='컬럼 베드 높이 (cm)?',
type=float, # 베드 높이도 float으로 변경
help='컬럼의 베드 높이 (cm).'
)
def residence_time(linear_flow: float, bed_height: float):
"""
선형 유속과 베드 높이를 사용하여 체류 시간 (min)을 계산합니다.
"""
if linear_flow == 0:
click.echo("오류: 선형 유속은 0이 될 수 없습니다. 체류 시간을 계산할 수 없습니다.", err=True)
return
# 체류 시간 계산
# (베드 높이 cm / 선형 유속 cm/h) * 60 min/h
residence_time_minutes = (bed_height / linear_flow) * 60.0
click.echo(f'계산된 체류 시간은 {residence_time_minutes:.2f} min 입니다.')
if __name__ == '__main__':
cli()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment