Last active
June 22, 2025 04:59
-
-
Save partrita/6dc90106a8abec3b22a06395c2b62fca to your computer and use it in GitHub Desktop.
simple python script for calculator of chromatography
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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