CH04샘플러 · 컬럼 · 검출기 설정
바이알을 트레이에 놓고 주입량을 정하며, 컬럼을 방향에 맞춰 장착 · 평형하고, 검출 파장과 램프를 설정하는 방법을 익힙니다.
학습 목표#
- 시료 양에 맞춰 바이알 · 셉타 캡 · 인서트를 고르고, 기포 없이 적정 높이로 채워 트레이의 위치 번호에 놓을 수 있습니다.
- 시뮬레이터의 샘플러 설정 화면에서 주입량 · 니들 세척을 정하고, 주입 밸브의 Load → Inject 동작을 애니메이션으로 따라가며 설명할 수 있습니다.
- 컬럼 라벨(충전제 · 길이 × 내경 · 입자 크기 · 최대 압력 · pH 범위)을 읽고, 유로 방향 → 입구 먼저 → 출구 순서로 장착한 뒤 30 °C 에서 평형시킬 수 있습니다.
- 비어-람베르트 법칙(A = ε·b·c)으로 흡광도와 농도 · 광로 길이의 관계를 설명하고, 분석물 흡수와 용매 UV 컷오프를 함께 고려해 검출 파장을 고를 수 있습니다.
- 램프 예열 · 피크 폭(응답 시간) · Balance(오토 제로) 를 설정하고, Python 으로 베이스라인의 노이즈 · 드리프트를 계산해 비교할 수 있습니다.
이론#
1교시 — 바이알 샘플러 설정과 컬럼 장착#
이 단원에서 할 일#
ch03 에서 이동상을 준비하고 펌프 압력이 안정되는 것까지 확인했습니다. 이제 이동상이 지나가는 길 위의 나머지 두 모듈, 바이알 샘플러(G7129A) 와 멀티컬럼 온도조절기(G7116A) 를 설정합니다. 이번 단원에서는 바이알을 준비해 트레이에 놓고, 주입량 · 니들 세척을 정한 뒤, C18 컬럼을 방향에 맞게 달고 평형(equilibration) 시킵니다. 마지막으로 Python 으로 컬럼 부피와 평형 시간을 계산합니다.
3D 장비 모델(assets/robot/robot.json)은 강좌 진행에 맞춰 추가됩니다. 차시 머리에 3D 뷰어 버튼이 보이지 않으면 아직 준비 중입니다. 그동안은 이 차시의 그림과 Playground 실습으로 같은 내용을 익히고, 모델이 준비되면 아래 따라하기를 다시 해 봅니다.
바이알 · 셉타 캡 · 인서트 고르기#
| 부품 | 고르는 기준 | 이 강좌의 기본값 |
|---|---|---|
| 바이알 (vial) | 샘플러 트레이에 맞는 크기. 빛에 약한 시료는 갈색(amber) 유리 | 2 mL 투명 유리 바이알 |
| 셉타 캡 (septum cap) | 니들이 뚫고 들어가는 막. 안쪽 면이 시료와 닿으므로 PTFE 면이 시료 쪽을 향하게 끼웁니다. 여러 번 찌를 시료는 다시 막히는(resealing) 셉타를 씁니다 | 스크루 캡 + PTFE/실리콘 셉타 |
| 인서트 (insert) | 시료가 적어(수백 µL 이하) 2 mL 바이알 바닥에서는 니들이 빨 수 없을 때 넣는 작은 내부 용기 | 250 µL 유리 인서트 (필요할 때만) |
- 바이알 · 캡 · 인서트의 정확한 규격(지름 · 높이)은 트레이와 샘플러 모델이 정합니다. 실물에서는 애질런트 소모품 목록에서 G7129A 호환 제품을 확인합니다.
- 셉타를 거꾸로 끼우면 실리콘 면이 시료(특히 유기 용매)에 닿아 불순물 피크가 생길 수 있습니다.
시료를 채우는 높이와 기포 제거
- 시료는 바이알 어깨 아래(약 2/3 ~ 3/4) 까지 채웁니다. 가득 채우면 니들이 셉타를 뚫을 때 시료가 넘치거나 압력이 생깁니다.
- 너무 적게 채우면 니들 끝이 액면 위에 있어 공기를 빨아들입니다(주입량 부족 · 피크 면적 감소).
- 캡을 닫은 뒤 바이알을 세워 들고 벽을 손가락으로 가볍게 톡톡 쳐서 바닥 · 벽의 기포를 위로 올립니다. 인서트는 바닥이 뾰족해 기포가 잘 걸리므로 특히 확인합니다.
- 바이알 겉면에 시료 이름 · 날짜를 적습니다. 라벨 스티커가 두꺼우면 트레이 칸에 끼므로 얇은 라벨이나 바이알 전용 펜을 씁니다.
트레이 위치 번호와 시퀀스#
ch02 에서 본 것처럼, 시뮬레이터는 트레이를 앞줄 왼쪽부터 1, 2, 3, … 으로 번호를 매깁니다(실물 1260 의 위치 표기는 트레이 · 서랍 종류에 따라 다르므로 설명서의 트레이 그림을 확인합니다).
- 장비는 바이알의 내용을 모릅니다. 오직 위치 번호로 바이알을 찾아가 시료를 빨아들입니다.
- 그래서 나중에 시퀀스(ch05)를 만들 때 "1번 줄: 위치 1, 시료명 STD-1, 주입량 10 µL" 처럼 위치 번호와 시료 이름을 짝지어 적습니다. 바이알을 다른 칸에 놓으면 장비는 엉뚱한 시료를 엉뚱한 이름으로 기록합니다.
- 이 강좌는 위치를 다음처럼 나눠 씁니다: 1 ~ 6 시료 · 표준물, 7 세척 바이알, 그 밖은 비워 둠.
바이알을 놓기 전에 종이나 메모에 "위치 → 시료" 표를 먼저 적고, 그 표대로 놓은 뒤 3D 뷰에서 칸마다 마우스를 올려 다시 확인합니다. 바이알을 놓은 다음에 표를 만들면 놓은 순서와 기억이 섞입니다.
주입량 · 니들 세척과 주입 밸브 동작#
| 설정 | 뜻 | 정하는 기준 |
|---|---|---|
| 주입량 (injection volume) | 한 번에 컬럼으로 보내는 시료 부피 (µL) | 일반 분석 컬럼(4.6 mm)에서는 수 ~ 수십 µL. 많이 넣으면 피크가 커지지만 넓어지고, 컬럼 용량을 넘으면 모양이 일그러짐 |
| 흡입 · 토출 속도 (draw / eject speed) | 계량 장치가 시료를 빨고 내보내는 속도 | 점도가 큰 시료는 흡입 속도를 낮춰 기포가 생기지 않게 함 |
| 니들 높이 오프셋 (needle height offset) | 니들 끝이 바이알 바닥에서 멈추는 높이를 위아래로 조정 | 인서트를 쓰면 바닥이 높고 뾰족하므로 니들이 닿지 않게 확인 |
| 니들 세척 (needle wash) | 주입 전 니들 바깥에 묻은 시료를 씻어 다음 시료로 옮겨 가지(carryover) 않게 함 | 세척 바이알(트레이의 한 칸) 또는 플러시 포트(옵션 장착 시) |
시뮬레이터의 주입량 범위는 기본 계량 장치 기준 0.1 ~ 100 µL 입니다. 실물은 장착된 계량 장치 · 루프 옵션에 따라 다르므로 설명서를 확인합니다.
한 번 주입할 때 일어나는 일 — ch02 의 주입 밸브 그림을 시간 순서로 펼친 것입니다.
- Load: 이동상은 펌프 → 밸브 → 곧장 컬럼으로 흐릅니다. 시료 경로(니들 · 시트 · 계량 장치)는 흐름에서 떨어져 있습니다.
- 니들 세척(설정했다면): 니들이 세척 바이알에 잠깐 담갔다가 나옵니다.
- 흡입(draw): 니들이 정한 위치의 바이알로 가서 셉타를 뚫고, 계량 장치가 주입량만큼 시료를 빨아들입니다.
- 니들이 니들 시트로 돌아와 꽂힙니다.
- Inject: 밸브가 돌아가 이동상이 시료 경로를 지나며 시료를 컬럼으로 밀어 넣습니다. 이 순간이 크로마토그램의 시간 0 입니다.
- 애질런트 바이알 샘플러는 흐름 통과(flow-through) 방식이라 분석이 끝날 때까지 이동상이 시료 경로를 계속 씻어 냅니다(ch02 팁: Inject ≈ Mainpass).
| 영역 | 이름 | 하는 일 |
|---|---|---|
| A | 바이알 트레이 | 트레이를 위에서 본 지도. 칸을 더블클릭하면 바이알을 놓거나 뺍니다. 마우스를 올리면 번호 · 바이알 종류 · 시료량이 보입니다. |
| B | 주입 설정 | 주입량 · 흡입/토출 속도 · 니들 높이 오프셋 · 시험 주입할 바이알 위치 |
| C | 니들 세척 | 세척 방식(없음 / 세척 바이알 / 플러시 포트)과 세척 바이알 위치 |
| D | 주입 밸브 애니메이션 | 밸브 유로를 실선(이동상) · 점선(시료 경로)으로 보여 줍니다. 한 번 주입 ▶ 을 누르면 위 1 ~ 5 단계를 천천히 재생합니다. |
따라하기 — 바이알 놓고 주입 설정하기#
물:메탄올 70:30 이동상을 시료 대신 넣은 "바탕(blank)" 바이알 두 개와 세척 바이알 하나를 놓는다고 하겠습니다.
- ch03 처럼 펌프가 1 mL/min 에서
● 안정인 상태에서 시작합니다(펌프는 켜 둡니다). - 상단 메뉴에서 <b>모드 › 샘플러 설정</b>(<kbd>Ctrl</kbd>+<kbd>Shift</kbd>+<kbd>L</kbd>)을 고릅니다. 3D 뷰가 샘플러 앞쪽으로 확대되고 A ~ D 영역이 나타납니다.
- <b>편집 › 바이알 준비</b>에서 바이알
2 mL 투명, 캡스크루 + PTFE/실리콘, 인서트없음, 시료량1.2mL, 시료 이름BLANK-1을 넣고 만들기를 누릅니다. 3D 뷰에 바이알이 손에 들린 상태로 나타납니다. - 3D 뷰에서 바이알을 클릭한 채 <kbd>T</kbd> 를 눌러 톡톡 치기를 합니다. 바닥의 작은 기포가 위로 올라가 사라지는 것을 봅니다.
- 트레이 지도(A)에서 1번 칸을 더블클릭하면 바이알이 그 칸에 놓입니다. 3 ~ 5 단계를 반복해
BLANK-2를 2번 칸에 놓습니다. - 같은 방법으로 시료량
1.5mL, 이름WASH (메탄올)인 세척 바이알을 만들어 7번 칸에 놓습니다. - 주입 설정(B)에 주입량
10.0µL, 흡입 속도100µL/min, 토출 속도400µL/min, 니들 높이 오프셋0.0mm, 바이알 위치1을 넣고 <kbd>Enter</kbd> 를 누릅니다. - 니들 세척(C)에서 세척 바이알을 고르고 위치
7, 담그는 횟수1을 넣습니다. - D 영역에서 한 번 주입 ▶ 을 누릅니다. 애니메이션이
Load → 세척(7) → 흡입(1) → 시트 복귀 → Inject순서로 재생되는 것을 봅니다. - 다시 Load 로 돌리려면 3D 뷰에서 주입 밸브를 클릭하고 <kbd>V</kbd> 를 누릅니다. 이벤트 로그에
Injection valve: Load가 뜹니다.
결과 확인#
- 트레이 지도(A)에서 1 · 2 · 7번 칸이 색칠되어 있고, 마우스를 올리면
BLANK-1 · 1.2 mL처럼 보입니다. - 이벤트 로그가
Needle wash (vial 7)→Draw 10.0 uL from vial 1→Injection valve: Inject순서입니다. - 주입 순간 펌프 제어 화면(ch03)의 압력 그래프에 아주 짧은 흔들림이 보입니다. 밸브가 돌면서 유로가 잠깐 바뀌기 때문이며 정상입니다.
- 바이알을 트레이 배치표와 다른 칸에 놓습니다 → 장비는 위치 번호만 보고 주입하므로 결과가 다른 시료 이름으로 저장됩니다.
- 셉타를 거꾸로(실리콘 면이 시료 쪽) 끼웁니다 → 시뮬레이터는
Septum orientation경고를 띄우고, 바탕 크로마토그램에 작은 불순물 피크를 넣습니다. - 인서트를 넣고 니들 높이 오프셋을 그대로 둡니다 → 니들이 인서트 바닥을 쳐서
Needle bottom contact오류가 납니다(아래 오류 2번). - 세척 바이알 위치를 시료 칸(예: 1)으로 적습니다 → 니들이 시료에 담갔다가 다시 시료를 빨아 세척이 되지 않습니다.
| 동작 | 메뉴 · 버튼 | 단축키 |
|---|---|---|
| 샘플러 설정 화면 열기 / 닫기 | <b>모드 › 샘플러 설정</b> | <kbd>Ctrl</kbd>+<kbd>Shift</kbd>+<kbd>L</kbd> |
| 바이알 만들기 | <b>편집 › 바이알 준비</b> | — |
| 바이알 톡톡 치기 (기포 제거) | 3D 뷰에서 바이알 선택 후 | <kbd>T</kbd> |
| 바이알 놓기 / 빼기 | 트레이 지도(A) 칸 | 더블클릭 |
| 주입 밸브 Load ↔ Inject 전환 | 3D 뷰에서 밸브 선택 후 | <kbd>V</kbd> |
| 한 번 주입 (애니메이션) | D 영역 한 번 주입 ▶ | — |
| 입력값 적용 | 입력 칸에서 | <kbd>Enter</kbd> |
컬럼 정보 읽기#
컬럼 몸통이나 상자 · 성적서(certificate)에는 다음 정보가 적혀 있습니다. 이 강좌의 시뮬레이터 기본 컬럼은 C18, 150 × 4.6 mm, 5 µm 입니다.
| 항목 | 예 | 뜻 |
|---|---|---|
| 충전제 (stationary phase) | C18 (옥타데실, ODS) | 실리카 입자 표면에 탄소 18개 사슬을 붙인 역상(reversed-phase) 충전제. 소수성이 큰 성분일수록 오래 붙잡습니다. |
| 길이 × 내경 | 150 × 4.6 mm | 길수록 분리는 좋아지지만 압력 · 분석 시간이 늘어납니다. 내경 4.6 mm 는 1 mL/min 정도 유속에 맞는 "일반 분석용" 크기입니다. |
| 입자 크기 | 5 µm | 작을수록 피크가 날카롭지만 압력이 크게 오릅니다. |
| 최대 압력 | 예: 400 bar | 이 값을 넘기면 충전층이 상할 수 있습니다. ch03 의 최대 압력 한계는 이보다 낮게 정합니다. |
| pH 범위 | 예: pH 2 ~ 9 | 실리카 기반 충전제는 범위를 벗어나면 결합상이 떨어지거나 실리카가 녹습니다. |
| 온도 한계 | 예: 60 °C | 컬럼마다 다릅니다. |
| 일련번호 (S/N) | — | 컬럼 사용 기록(주입 횟수 · 압력 변화)을 남길 때 씁니다. |
위 표의 최대 압력 · pH · 온도는 예시입니다. 실제 컬럼은 제조사 성적서의 값을 따릅니다(확인 필요).
컬럼 장착 순서#
- 유로 방향 확인 — 컬럼 몸통의 화살표(→)가 열교환기 쪽에서 검출기 쪽을 가리키게 잡습니다(ch02).
- 입구 먼저 — 열교환기 출구 캐필러리를 컬럼 입구에 연결합니다. 출구는 아직 연결하지 않습니다.
- 낮은 유속으로 밀어내기 — 0.2 mL/min 정도로 흘려 컬럼 출구에서 방울이 일정하게 떨어지는지 봅니다. 컬럼 안의 보관 용매와 공기가 이때 빠져나갑니다. 공기를 검출기 플로셀로 보내지 않으려는 것입니다.
- 출구 연결 — 방울이 고르게 떨어지면 펌프를 잠시 멈추고 컬럼 출구를 검출기 플로셀 입구 캐필러리에 연결합니다.
- 유속을 단계적으로 — 0.2 → 0.5 → 1.0 mL/min 으로 올리며 압력이 매끄럽게 따라 오르는지 봅니다. 한 번에 올리면 압력 충격이 생깁니다.
- 온도 설정 · 문 닫기 — 컬럼 온도를 정하고 온도조절기 문을 끝까지 닫습니다.
새 컬럼이나 보관했던 컬럼에는 보관 용매(보통 아세토니트릴/물 같은 유기 용매 혼합액)가 들어 있습니다. 이동상에 완충액이 들어 있으면, 곧바로 흘렸을 때 ch03 에서 본 염 석출이 컬럼 안에서 일어납니다. 이때는 염이 없는 물/유기 용매 혼합액으로 먼저 바꾼 뒤 완충액 이동상을 흘립니다. 이번 차시의 이동상(물/메탄올)은 염이 없어 바로 흘려도 됩니다.
컬럼 온도 설정#
- 온도조절기는 이동상을 열교환기에서 먼저 데운 뒤 컬럼에 넣습니다. 그래서 실온이 바뀌어도 머무름 시간이 흔들리지 않습니다.
- 이 강좌는 30 °C 를 씁니다. 실온보다 조금 높게 잡아야 온도조절기가 "데우는 쪽"으로만 제어해 안정됩니다.
- 온도가 오르면 이동상 점도가 줄어 압력이 낮아지고 머무름 시간이 짧아집니다. 그래서 온도가 설정값에 도달한 뒤에 평형을 판단합니다.
- 실물 G7116A 의 설정 범위 · 승온 속도는 사용자 설명서를 확인합니다(확인 필요). 시뮬레이터는 실온 25 °C 에서 30 °C 까지 약 5분 걸리게 만들었습니다.
컬럼 평형 — 얼마나 흘려야 하나#
평형(equilibration)은 컬럼 충전제 표면이 지금 흐르는 이동상과 완전히 같은 상태가 되도록 충분히 흘리는 일입니다. 평형이 덜 되면 머무름 시간 · 베이스라인이 분석 내내 움직입니다.
- 기준: 보통 컬럼 부피(column volume)의 10배 이상을 흘립니다. 이동상 조성이 크게 바뀌었거나 첨가제가 있으면 더 흘립니다.
- 컬럼 부피(V₀, 빈 공간 부피) ≈ π · r² · L · ε — r 은 내경의 절반, L 은 길이, ε 은 충전층에서 용매가 차지하는 비율(전체 공극률, 다공성 실리카 컬럼은 대략 0.6 ~ 0.7).
- 150 × 4.6 mm 컬럼: 빈 관 부피 = π × 0.23² × 15 ≈ 2.49 mL, ε = 0.65 이면 V₀ ≈ 1.6 mL. 10배는 약 16 mL 이므로 1 mL/min 에서 약 16분입니다.
- 계산 시간만 믿지 않고, 압력과 베이스라인이 둘 다 안정한지 화면으로 확인합니다.
| 판단 항목 | 어디서 보나 | 안정 기준 (시뮬레이터) |
|---|---|---|
| 압력 | 펌프 제어(ch03) E 영역 | 30 s 창 RSD 0.5 % 이하, 앞 창과 평균 차이 1 bar 이하 |
| 컬럼 온도 | 컬럼 · 온도 화면 | 설정값 ± 0.5 °C 안에서 2분 이상 유지 |
| 베이스라인 | 검출기 설정(2교시) D 영역 | 드리프트 · 노이즈가 2교시 기준 이하 |
따라하기 — C18 컬럼 장착과 평형#
- 펌프를 끕니다(<kbd>F9</kbd>). 컬럼을 연결 · 분리할 때는 항상 흐름을 멈춥니다.
- <b>모드 › 컬럼 · 온도</b>(<kbd>Ctrl</kbd>+<kbd>Shift</kbd>+<kbd>H</kbd>)를 고릅니다. 3D 뷰가 온도조절기 문을 연 상태로 확대됩니다.
- 왼쪽 컬럼 보관함에서
C18 150 x 4.6 mm 5 um을 고르고 <b>정보 보기</b>(<kbd>I</kbd>)로 라벨의 최대 압력 · pH 범위를 확인합니다. - 컬럼을 끌어 컬럼 클립 위에 놓습니다. 화살표가 반대이면 놓기 전에 <kbd>R</kbd> 로 앞뒤를 뒤집습니다. 놓은 뒤 화살표가 열교환기 → 검출기 쪽인지 다시 봅니다.
- 열교환기 출구 캐필러리 끝을 끌어 컬럼 입구에 놓습니다. 로그에
Column inlet connected가 뜹니다. - 펌프 제어(<kbd>Ctrl</kbd>+<kbd>Shift</kbd>+<kbd>F</kbd>)에서 유속
0.2mL/min 을 넣고 펌프를 켭니다(<kbd>F9</kbd>). 3D 뷰에서 컬럼 출구 끝에 방울이 떨어지는 것을 확인합니다. - 방울이 고르게 떨어지면 펌프를 끄고, 검출기 쪽 캐필러리(ST 0.12 × 280) 끝을 끌어 컬럼 출구에 놓습니다. 로그에
Column outlet connected. - 컬럼 · 온도 화면에서 온도
30.0°C 를 넣고 <kbd>Enter</kbd>, 3D 뷰에서 문을 클릭해 닫습니다(로그Door closed). - 펌프를 켜고 유속을
0.5→1.000mL/min 으로 30 s 쯤 간격을 두고 올립니다. 최대 압력 한계는 컬럼 한계보다 낮은350bar 로 정합니다. - 온도가 30.0 °C 에 도달하고, 펌프 압력이
● 안정이 될 때까지 기다립니다. 상태 막대의 평형 진행률(흘린 부피 ÷ 10 컬럼 부피)이 100 % 가 되는지도 봅니다.
결과 확인#
- 이벤트 로그가
Column inlet connected→Column outlet connected→Temperature reached 30.0 C→Equilibration 100 %순서입니다. - 펌프 압력은 컬럼을 달기 전(ch03)보다 높아졌고, 온도가 오르는 동안 조금 내려갔다가 일정해졌습니다.
- 컬럼 · 온도 화면의 컬럼 카드에
방향 OK · 연결 2/2 · 30.0 C가 표시됩니다.
- 컬럼 출구까지 한꺼번에 연결하고 펌프를 켭니다 → 컬럼 속 공기가 플로셀로 들어가 베이스라인에 뾰족한 잡음이 생깁니다.
- 유속을 0 에서 곧바로 1 mL/min 으로 올립니다 → 압력이 급하게 올라 시뮬레이터가
Pressure ramp too fast경고를 띄웁니다. - 컬럼 최대 압력을 확인하지 않고 ch03 의 400 bar 한계를 그대로 둡니다 → 한계가 컬럼 허용치와 같아 컬럼을 지켜 주지 못합니다.
- 온도가 설정값에 닿기 전에 "압력이 안정됐다"고 판단합니다 → 온도가 오르며 압력이 계속 조금씩 내려갑니다.
| 동작 | 메뉴 · 버튼 | 단축키 |
|---|---|---|
| 컬럼 · 온도 화면 열기 / 닫기 | <b>모드 › 컬럼 · 온도</b> | <kbd>Ctrl</kbd>+<kbd>Shift</kbd>+<kbd>H</kbd> |
| 컬럼 정보 보기 | 컬럼 선택 후 <b>정보 보기</b> | <kbd>I</kbd> |
| 컬럼 앞뒤 뒤집기 | 컬럼을 들고 있을 때 | <kbd>R</kbd> |
| 펌프 켜기 / 끄기 | 상단 도구 막대 펌프 | <kbd>F9</kbd> |
| 온도조절기 문 열기 / 닫기 | 3D 뷰에서 문 클릭 | <kbd>O</kbd> (선택 후) |
| 되돌리기 | <b>편집 › 되돌리기</b> | <kbd>Ctrl</kbd>+<kbd>Z</kbd> |
단축키는 시뮬레이터 버전에 따라 바뀔 수 있습니다. <b>도움말 › 단축키 목록</b>(<kbd>?</kbd>)에서 항상 최신 목록을 확인합니다.
Python 으로 컬럼 부피와 평형 시간 구하기#
import math
# 컬럼 크기 -> 빈 관 부피, 컬럼 부피(V0), 10 컬럼 부피를 흘리는 시간
def column_volume_mL(length_mm, id_mm, porosity=0.65):
r_cm = id_mm / 10 / 2 # mm -> cm, 반지름
empty = math.pi * r_cm ** 2 * (length_mm / 10) # cm3 = mL
return empty, empty * porosity
for L, d in [(150, 4.6), (250, 4.6), (100, 2.1)]:
empty, v0 = column_volume_mL(L, d)
t10 = 10 * v0 / 1.0 # 1 mL/min 일 때 분
print(f"{L:3d} x {d:3.1f} mm 빈 관 {empty:5.2f} mL V0 {v0:5.2f} mL "
f"10 CV = {10 * v0:5.1f} mL ({t10:4.1f} min @ 1 mL/min)")- 2.1 mm 컬럼은 부피가 작아 1 mL/min 이면 금방 평형되지만, 실제로는 내경에 맞춰 유속도 낮춰 씁니다(대략 내경² 비율). 그 계산은 ch08 에서 다룹니다.
- 공극률 0.65 는 설명용 가정값입니다. 실제 컬럼의 V₀ 는 머무르지 않는 성분이 나오는 시간(t₀) × 유속으로 잴 수 있으며, ch07 에서 다시 씁니다.
2교시 — 검출기 설정과 베이스라인 확인#
이 단원에서 할 일#
컬럼에서 나온 성분은 검출기 플로셀을 지나며 빛을 흡수합니다. 이번 단원에서는 흡광도의 원리(비어-람베르트 법칙)를 짧게 정리하고, 램프 켜기 · 예열 → 파장 고르기 → 피크 폭 설정 → Balance → 베이스라인 확인 순서로 VWD 를 설정합니다. 마지막으로 파장을 바꿔 가며 노이즈를 비교합니다.
흡광도와 비어-람베르트 법칙#
검출기는 플로셀에 들어간 빛의 세기(I₀)와 지나온 빛의 세기(I)를 비교해 흡광도(absorbance, A) 를 계산합니다.
- A = log₁₀(I₀ / I) — 빛이 1/10 로 줄면 A = 1, 1/100 이면 A = 2 입니다. 단위는 AU(absorbance unit)이고, 크로마토그램에는 보통 mAU(1/1000 AU)로 표시합니다.
- 비어-람베르트 법칙: A = ε · b · c
- ε — 몰 흡광 계수(L·mol⁻¹·cm⁻¹). 물질과 파장마다 다릅니다.
- b — 광로 길이(cm). 빛이 시료를 지나는 길이, 즉 플로셀 광로 길이입니다.
- c — 농도(mol/L).
- 흡광도는 농도에 비례합니다. 그래서 피크 면적으로 농도를 구할 수 있습니다(정량은 ch07).
- 광로가 2배면 같은 농도에서 흡광도도 2배입니다. 1260 VWD · DAD 의 표준 플로셀 광로는 10 mm 이고, 감도를 높이는 긴 광로 플로셀 · 부피를 줄인 마이크로 플로셀이 따로 있습니다(모델별 사양은 설명서 확인).
# 비어-람베르트: A = e * b * c
eps = 9740 # L/(mol cm), 273 nm 부근 카페인 몰 흡광계수 (문헌 근사값)
mw = 194.19 # g/mol, 카페인
b_cm = 1.0 # 10 mm 플로셀
for mg_L in [1, 5, 10, 20, 50]:
c = mg_L / 1000 / mw # mol/L
A = eps * b_cm * c
print(f"{mg_L:3d} mg/L -> {c * 1e6:7.2f} umol/L -> A = {A:6.4f} AU = {A * 1000:7.1f} mAU")- 이것은 플로셀에 그 농도의 용액이 가득 찼을 때의 값입니다. 실제 피크는 컬럼에서 희석되어 꼭대기 높이가 이보다 훨씬 낮습니다.
- 흡광도가 너무 크면(대략 1 ~ 2 AU 이상) 지나온 빛이 너무 약해 직선성이 깨집니다. 이 범위는 검출기 사양을 확인합니다(확인 필요).
램프 켜기 · 예열과 사용 시간#
1260 VWD · DAD 는 중수소(D2) 램프로 자외선을 냅니다.
| 항목 | 내용 |
|---|---|
| 켜기 | 데이터 시스템이나 장비에서 램프를 켭니다. 점등 직후에는 빛의 세기가 계속 변해 베이스라인이 흘러내립니다(드리프트). |
| 예열 | 베이스라인이 안정될 때까지 기다립니다. 실물은 보통 수십 분 ~ 1시간 정도 예열하라고 권장합니다(설명서 확인). 시뮬레이터는 30분 예열 막대를 보여 줍니다. |
| 사용 시간 | 램프가 켜져 있던 누적 시간. D2 램프는 쓸수록 세기가 줄어 노이즈가 커집니다. 시뮬레이터는 2000 h 를 교체 권장 시점으로 가정합니다. |
| 강도(intensity) 확인 | 램프 세기를 파장별로 재는 진단 기능. 세기가 낮아지면 램프 교체 · 플로셀 오염을 의심합니다. 교체 절차는 ch09 에서 다룹니다. |
- 램프를 자주 껐다 켜면 수명이 줄어듭니다. 하루 안에 분석이 이어지면 켜 둡니다.
- 분석을 다 마친 날에는 끕니다. 밤새 켜 두면 사용 시간만 늘어납니다.
검출 파장 고르기#
파장은 두 가지를 함께 보고 고릅니다.
- 분석물의 최대 흡수 파장(λmax) — 흡광도가 가장 커서 감도가 좋고, 파장이 조금 흔들려도 신호가 덜 변합니다. 예: 카페인은 273 nm 근처.
- 이동상 용매의 UV 컷오프(UV cutoff) — 용매 자체가 빛을 많이 흡수하기 시작하는 파장. 이보다 짧은 파장에서는 바탕 흡광도가 높아 노이즈 · 드리프트가 커집니다.
| 용매 | UV 컷오프 (대략) | 뜻 |
|---|---|---|
| 물 | 190 nm 미만 | 거의 문제없음 |
| 아세토니트릴 (ACN) | 약 190 nm | 짧은 파장(200 ~ 220 nm)에서도 쓰기 좋음 |
| 메탄올 (MeOH) | 약 205 nm | 210 nm 근처에서는 바탕 흡광도가 높아 노이즈 · 기울기 드리프트가 커짐 |
- 컷오프 값은 용매 등급 · 제조사 표에 따라 조금씩 다릅니다. 사용하는 용매 병의 성적서 값을 확인합니다.
- 254 nm 는 많은 방향족 화합물이 흡수하는 "범용" 파장으로 자주 씁니다. 최적 파장은 아니지만 처음 보는 시료를 훑어볼 때 편합니다.
- ch03 에서 본 첨가제(포름산 · 아세트산 등)도 짧은 파장에서 흡수합니다. 짧은 파장을 쓸 때는 첨가제 컷오프도 확인합니다.
VWD 와 DAD 의 파장 설정#
| 항목 | VWD (G7114A, 기본) | DAD (설정에서 바꿔 봄) |
|---|---|---|
| 신호 | 기본은 한 파장. 시간 프로그램으로 분석 중에 파장을 바꿀 수 있음 | 여러 파장 신호(예: A ~ H)를 동시에 기록 |
| 대역폭 (bandwidth) | 고정 | 신호마다 대역폭을 정함 (넓으면 노이즈↓, 선택성↓) |
| 기준 파장 (reference) | 없음 | 분석물이 흡수하지 않는 파장을 기준으로 빼서 드리프트를 줄임. 기준 파장에서도 흡수하는 성분이 있으면 피크가 작아지므로 주의 |
| 스펙트럼 저장 | 없음 | 없음 / 피크 정점 / 모두 중 선택. "모두"는 파일이 커지지만 나중에 아무 파장이나 다시 볼 수 있음 |
- 정량이 목적이고 파장을 이미 알면 VWD 한 파장으로 충분합니다.
- 피크가 한 성분인지(피크 순도) 확인하거나, 처음 보는 시료의 λmax 를 찾을 때 DAD 스펙트럼이 필요합니다.
피크 폭(peak width)과 응답 시간#
검출기 설정의 피크 폭(peak width) 은 "내가 볼 가장 좁은 피크의 폭"을 알려 주는 값입니다. 장비는 이 값에 맞춰 응답 시간(response time, 신호를 평활하는 시간) 과 데이터 속도(Hz) 를 정합니다.
| 피크 폭 설정 (시뮬레이터) | 응답 시간 | 데이터 속도 | 쓰는 경우 |
|---|---|---|---|
| > 0.025 min | 0.5 s | 10 Hz | 아주 좁은 피크 (작은 입자 · 짧은 컬럼) |
| > 0.05 min | 1 s | 5 Hz | 좁은 피크 |
| > 0.1 min | 2 s | 2.5 Hz | 이 강좌 기본 (150 × 4.6 mm, 5 µm) |
| > 0.2 min | 4 s | 1.25 Hz | 넓은 피크 |
- 위 표는 시뮬레이터 값입니다. 실물의 선택지는 검출기 모델 · 펌웨어에 따라 다르므로 설명서의 표를 확인합니다(확인 필요).
- 응답 시간이 길면 노이즈가 줄어 베이스라인이 매끈하지만, 좁은 피크는 낮고 넓게 뭉개지고 뒤로 밀립니다.
- 응답 시간이 짧으면 피크 모양은 정확하지만 노이즈가 커지고 데이터 파일이 커집니다.
- 기준: 가장 좁은 관심 피크의 반높이 폭에 맞는 설정을 고릅니다. 실습 D 에서 직접 비교합니다.
오토 제로(Balance)와 베이스라인 확인#
Balance(오토 제로, auto zero) 는 지금의 흡광도를 0 mAU 로 다시 맞추는 기능입니다. 이동상 자체의 바탕 흡광도를 빼 주어 크로마토그램이 0 근처에서 시작하게 합니다.
- Balance 는 평형이 끝난 뒤, 분석을 시작하기 직전에 합니다. 평형 중에 하면 베이스라인이 계속 움직여 금방 다시 벗어납니다.
- Balance 는 신호를 옮길 뿐 노이즈 · 드리프트를 줄이지 않습니다.
베이스라인은 두 숫자로 판단합니다.
| 지표 | 뜻 | 재는 법 (이 강좌) | 시뮬레이터 안정 기준 |
|---|---|---|---|
| 노이즈 (noise) | 짧은 시간의 무작위 흔들림 | 30 s 구간마다 최댓값 − 최솟값(peak-to-peak), 그 평균 | 0.1 mAU 이하 |
| 드리프트 (drift) | 시간에 따라 한쪽으로 꾸준히 움직임 | 10분 신호에 직선 맞춤 → 기울기를 1시간당으로 환산 | 2 mAU/h 이하 |
이 기준은 시뮬레이터가 정한 연습용 값입니다. 실물 검출기의 노이즈 · 드리프트 사양과 측정 조건은 설명서를 따릅니다.
| 영역 | 이름 | 하는 일 |
|---|---|---|
| A | 램프 | 켜짐/꺼짐, 예열 진행 막대, 누적 사용 시간. 강도 시험으로 램프 세기를 확인합니다. |
| B | 파장 | VWD 신호 파장(nm). DAD 로 바꾸면 신호 A ~ H, 대역폭, 기준 파장, 스펙트럼 저장 칸이 생깁니다. |
| C | 피크 폭 | 피크 폭 선택 → 응답 시간 · 데이터 속도가 함께 표시됩니다. |
| D | 실시간 신호 | 신호(mAU)와 노이즈 · 드리프트 · 바탕 흡광도, Balance 버튼, ● 베이스라인 안정 표시 |
따라하기 — 램프 켜기부터 베이스라인 확인까지#
- 1교시에서 평형시킨 상태(30 °C, 1 mL/min, 물:메탄올 70:30)에서 시작합니다.
- <b>모드 › 검출기 설정</b>(<kbd>Ctrl</kbd>+<kbd>Shift</kbd>+<kbd>D</kbd>)을 고릅니다. 3D 뷰가 VWD 앞판으로 확대되고 A ~ D 영역이 나타납니다.
- 램프가 꺼져 있으면 <kbd>F10</kbd> 을 누릅니다. 로그에
Lamp ignited가 뜨고 A 영역에 예열 막대가 차오릅니다. 시뮬레이터에서 기다리는 시간을 줄이려면 <b>보기 › 시간 배속 › ×10</b>(<kbd>Ctrl</kbd>+<kbd>]</kbd>)을 씁니다. - A 영역에서 사용 시간을 읽고, <b>검출기 설정 › 진단 › 강도 시험</b>을 눌러 결과가
Pass인지 확인합니다. - 파장(B)에
254nm 를 넣고 <kbd>Enter</kbd> 를 누릅니다. - 피크 폭(C)에서
>0.1 min (2 s)를 고릅니다. - 예열이 끝나면(로그
Lamp warm-up complete) D 영역의 Balance 를 누르거나 <kbd>Z</kbd> 를 누릅니다. 신호가 0 mAU 근처로 옮겨집니다. - 10분(배속이면 1분) 동안 D 영역을 지켜보고 노이즈 · 드리프트 값을 읽습니다.
● 베이스라인 안정이 뜨는지 확인합니다. - <b>파일 › 그래프 내보내기 › CSV</b>로 신호 로그를 저장합니다. 파일 이름에 파장을 넣습니다(예:
baseline_254nm.csv).
결과 확인#
- 로그가
Lamp ignited→Lamp warm-up complete→Wavelength 254 nm→Balance순서입니다. - D 영역에 노이즈 0.1 mAU 이하, 드리프트 2 mAU/h 이하,
● 베이스라인 안정이 보입니다. - Balance 전 바탕 흡광도(예: 0.1 AU 안팎)가 표시되고, Balance 뒤 신호가 0 mAU 근처입니다.
- 램프를 켜자마자 Balance 하고 분석을 시작합니다 → 예열 중이라 베이스라인이 계속 흘러내립니다.
- 메탄올 이동상에서 205 nm 같은 컷오프 근처 파장을 고릅니다 → 바탕 흡광도가 높고 노이즈가 커서 작은 피크가 묻힙니다.
- 피크 폭을 가장 넓은 값(> 0.2 min)으로 두면 "베이스라인이 예뻐진다"고 그대로 씁니다 → 좁은 피크가 낮고 넓어져 분리가 나빠 보입니다.
- Balance 로 드리프트를 없앴다고 생각합니다 → Balance 는 0 으로 옮길 뿐이며, 드리프트는 곧 다시 나타납니다.
| 동작 | 메뉴 · 버튼 | 단축키 |
|---|---|---|
| 검출기 설정 화면 열기 / 닫기 | <b>모드 › 검출기 설정</b> | <kbd>Ctrl</kbd>+<kbd>Shift</kbd>+<kbd>D</kbd> |
| 램프 켜기 / 끄기 | 상단 도구 막대 램프 | <kbd>F10</kbd> |
| Balance (오토 제로) | D 영역 Balance | <kbd>Z</kbd> |
| 램프 강도 시험 | <b>검출기 설정 › 진단 › 강도 시험</b> | — |
| 시간 배속 올리기 / 내리기 | <b>보기 › 시간 배속</b> | <kbd>Ctrl</kbd>+<kbd>]</kbd> / <kbd>Ctrl</kbd>+<kbd>[</kbd> |
| 신호 로그 저장 (CSV) | <b>파일 › 그래프 내보내기 › CSV</b> | — |
| 검출기 종류 바꾸기 (VWD ↔ DAD) | <b>설정 › 장비 구성 › 검출기</b> | — |
Python 으로 노이즈와 드리프트 구하기#
D 영역이 하는 계산을 직접 해 봅니다. 신호를 30 s 구간으로 나눠 peak-to-peak 노이즈를 구하고, 전체 신호에 직선을 맞춰 드리프트를 구합니다.
import numpy as np
# 시뮬레이터 CSV 형식과 같은 베이스라인 (2.5 Hz, 10분)
rng = np.random.default_rng(4)
hz = 2.5
t = np.arange(0, 600, 1 / hz) # s
signal = 0.0003 * t + rng.normal(0, 0.008, t.size) # mAU: 느린 기울기 + 무작위 흔들림
def noise_pp(t, y, seg_s=30):
vals = []
for s in np.arange(0, t[-1], seg_s):
w = y[(t >= s) & (t < s + seg_s)]
if w.size > 2:
vals.append(w.max() - w.min())
return float(np.mean(vals))
slope, intercept = np.polyfit(t, signal, 1) # mAU / s
print(f"노이즈 (30 s 구간 p-p 평균): {noise_pp(t, signal):.3f} mAU")
print(f"드리프트: {slope * 3600:.2f} mAU/h")np.polyfit(t, y, 1)은 1차식(직선) 맞춤으로 [기울기, 절편] 을 돌려줍니다. 기울기 × 3600 이 1시간당 드리프트입니다.- p-p 노이즈는 점이 많을수록 커지는 성질이 있으므로, 비교할 때는 같은 구간 길이 · 같은 데이터 속도로 잽니다.
실습 (시뮬레이터)#
- 1교시 따라하기 1 ~ 10단계대로 C18 150 × 4.6 mm, 5 µm 컬럼을 방향에 맞게 달고, 30 °C · 1 mL/min 에서 평형시킵니다.
- 이벤트 로그에서 펌프를 1 mL/min 으로 올린 시각과
Equilibration 100 %가 뜬 시각을 적습니다. - 아래 코드의 TODO 를 채워 컬럼 부피 · 10 CV 부피 · 평형 시간을 구하고, 시뮬레이터의 시간과 비교합니다.
- 추가로 조성을 바꿀 때를 대비해 20 CV 로 평형하면 몇 분인지도 구합니다.
import math
length_mm, id_mm = 150, 4.6
porosity = 0.65 # 전체 공극률 (가정값)
flow_mL_min = 1.0
n_cv = 10
empty_mL = 0 # TODO: 빈 관 부피 = pi * r^2 * L (cm 단위로 계산하면 mL)
v0_mL = 0 # TODO: 컬럼 부피 = 빈 관 부피 * 공극률
need_mL = 0 # TODO: n_cv 배 부피
minutes = 0 # TODO: 그 부피를 흘리는 시간
print(f"빈 관 {empty_mL:.2f} mL, V0 {v0_mL:.2f} mL")
print(f"{n_cv} CV = {need_mL:.1f} mL -> {minutes:.1f} min @ {flow_mL_min} mL/min")import math
length_mm, id_mm = 150, 4.6
porosity = 0.65
flow_mL_min = 1.0
r_cm = id_mm / 10 / 2
empty_mL = math.pi * r_cm ** 2 * (length_mm / 10)
v0_mL = empty_mL * porosity
print(f"빈 관 {empty_mL:.2f} mL, V0 {v0_mL:.2f} mL")
for n_cv in (10, 20):
need_mL = n_cv * v0_mL
minutes = need_mL / flow_mL_min
print(f"{n_cv} CV = {need_mL:.1f} mL -> {minutes:.1f} min @ {flow_mL_min} mL/min")
# 빈 관 부피를 기준으로 잡는 실험실도 있습니다 (더 보수적)
print(f"(빈 관 기준 10배 = {10 * empty_mL:.1f} mL -> {10 * empty_mL / flow_mL_min:.1f} min)")빈 관 부피는 약 2.49 mL, V₀ 는 약 1.62 mL 이므로 10 CV 는 약 16 mL, 1 mL/min 에서 약 16분입니다(20 CV 는 약 32분). 시뮬레이터의 평형 진행률은 V₀ 기준이지만, 컬럼 온도가 30 °C 에 닿을 때까지 기다리면 실제 걸린 시간은 이보다 길 수 있습니다. 시간보다 압력 · 온도 · 베이스라인 안정을 함께 보고 판단합니다.
2 mL 바이알에 시료 1.2 mL 를 넣었습니다. 니들 끝 아래에 남아 빨 수 없는 양이 약 0.1 mL 이고, 주입 한 번에 주입량 + 여분 5 µL(니들 · 시트를 채우는 양, 가정값)가 빠져나간다고 합시다. 주입량 5 · 10 · 20 · 50 µL 일 때 몇 번 주입할 수 있는지 구하고, 같은 시료를 250 µL 인서트(시료 150 µL, 빨 수 없는 양 약 10 µL)에 넣으면 어떻게 되는지 비교합니다.
import numpy as np
inj_uL = np.array([5, 10, 20, 50])
extra_uL = 5 # 주입마다 더 빠지는 양 (가정값)
vial_uL, dead_vial_uL = 1200, 100
insert_uL, dead_insert_uL = 150, 10
n_vial = 0 # TODO: (시료량 - 빨 수 없는 양) // (주입량 + 여분), 주입량 배열 전체에 대해
n_insert = 0 # TODO: 인서트에 대해 같은 계산
print(f"주입량 (uL): {inj_uL}")
print(f"2 mL 바이알 : {n_vial}")
print(f"인서트 : {n_insert}")import numpy as np
inj_uL = np.array([5, 10, 20, 50])
extra_uL = 5
vial_uL, dead_vial_uL = 1200, 100
insert_uL, dead_insert_uL = 150, 10
n_vial = (vial_uL - dead_vial_uL) // (inj_uL + extra_uL)
n_insert = (insert_uL - dead_insert_uL) // (inj_uL + extra_uL)
print(f"주입량 (uL): {inj_uL}")
print(f"2 mL 바이알 : {n_vial}")
print(f"인서트 : {n_insert}")
# 시료가 150 uL 밖에 없는데 인서트 없이 2 mL 바이알에 넣으면?
print("인서트 없이 150 uL :", np.maximum((150 - dead_vial_uL) // (inj_uL + extra_uL), 0))1.2 mL 바이알은 10 µL 주입으로 73번, 인서트(150 µL)는 9번 주입할 수 있습니다. 시료가 150 µL 뿐인데 인서트 없이 2 mL 바이알에 넣으면 빨 수 있는 양이 50 µL 밖에 안 되어 10 µL 로도 3번이 한계이고, 액면이 낮아 니들이 공기를 빨 위험이 큽니다. 시료가 적으면 인서트를 씁니다. 같은 바이알을 여러 번 찌르면 셉타 조각 · 증발도 생기므로, 반복 주입이 많으면 바이알을 나눠 놓습니다.
C18 컬럼(150 × 4.6 mm)을 장착하는 순서로 가장 알맞은 것은?
- 입구 · 출구를 모두 연결하고 1 mL/min 으로 바로 흘린다
- 출구를 먼저 검출기에 연결하고, 입구를 연결한 뒤 1 mL/min 으로 흘린다
- 화살표 방향을 확인하고 입구를 먼저 연결한 뒤, 낮은 유속으로 출구에서 방울을 확인하고 출구를 연결한다
- 화살표 방향과 관계없이 연결하고, 압력이 높으면 뒤집는다
정답 보기
③ — 방향 확인 → 입구 먼저 → 낮은 유속으로 공기 · 보관 용매를 밀어내 출구에서 방울 확인 → 출구 연결 순서입니다. ①②는 컬럼 속 공기가 플로셀로 들어가고 압력 충격이 생깁니다. ④ 거꾸로 흘리면 입구 쪽 입자가 충전층을 흐트러뜨릴 수 있습니다.샘플러 설정에서 세척 바이알을 7번에 놓고 주입 위치를 1번으로 정했습니다. 그런데 시퀀스의 1번 줄에 시료 이름 STD-1 을 적었고, 실제로 STD-1 바이알은 2번 칸에 놓았습니다. 무슨 일이 생길까요?
- 장비가 바이알 라벨을 읽어 자동으로 2번 칸의 STD-1 을 찾아 주입한다
- 1번 칸의 바이알이 주입되고, 그 결과가
STD-1이라는 이름으로 저장된다 - 7번 세척 바이알이 주입된다
- 이름이 맞지 않아 주입이 취소된다
정답 보기
② — 장비는 바이알의 내용이나 글씨를 모르고 **위치 번호**로만 찾아갑니다. 그래서 1번 칸에 있던 다른 시료가 STD-1 이름으로 기록됩니다. 바이알을 놓기 전에 위치 → 시료 배치표를 만들고, 놓은 뒤 트레이 지도에서 다시 확인합니다.- 2교시 따라하기 1 ~ 7단계로 램프를 예열하고, 이동상 물:메탄올 70:30, 30 °C, 1 mL/min, 피크 폭
>0.1 min (2 s)로 맞춥니다. - 파장(B)을
210nm 로 바꾸고 <kbd>Enter</kbd> → 2분 기다린 뒤 Balance(<kbd>Z</kbd>) → 10분 동안 신호를 기록하고 CSV 로 저장합니다(baseline_210nm.csv). - 같은 방법으로
254nm,273nm 에서도 기록합니다. 이동상 · 유속 · 온도 · 피크 폭은 바꾸지 않습니다. - 아래 코드의 TODO 를 채워 파장별 바탕 흡광도 · 노이즈 · 드리프트 표를 만듭니다. 시뮬레이터가 준비되지 않았다면 코드가 만든 예시 신호로 진행합니다.
- 표를 보고 "이 이동상에서 210 nm 를 쓰면 어떤 문제가 생기는지" 한 문장으로 적습니다.
import numpy as np
# 파장별 베이스라인 예시 - 시뮬레이터 CSV 의 신호 열과 같은 형식 (2.5 Hz, 10분)
rng = np.random.default_rng(21)
hz = 2.5
t = np.arange(0, 600, 1 / hz)
# 파장: (Balance 전 바탕 흡광도 AU, 노이즈 크기 mAU, 드리프트 mAU/h) - 시뮬레이터 모델 값
model = {210: (0.62, 0.060, 4.0), 254: (0.05, 0.008, 0.6), 273: (0.03, 0.007, 0.5)}
logs = {}
for wl, (bg, sd, dr) in model.items():
logs[wl] = (bg, dr / 3600 * t + rng.normal(0, sd, t.size))
def noise_pp(t, y, seg_s=30):
# TODO: 30 s 구간마다 (최댓값 - 최솟값) 을 구해 평균을 돌려주세요
return 0.0
def drift_per_h(t, y):
# TODO: np.polyfit 으로 기울기(mAU/s)를 구해 1시간당 값으로 돌려주세요
return 0.0
print("파장(nm) | 바탕 흡광도(AU) | 노이즈 p-p(mAU) | 드리프트(mAU/h) | 판정")
for wl, (bg, y) in logs.items():
n, d = noise_pp(t, y), drift_per_h(t, y)
ok = "안정" if (n <= 0.1 and abs(d) <= 2) else "불안정"
print(f"{wl:8d} | {bg:15.2f} | {n:15.3f} | {d:15.2f} | {ok}")import numpy as np
rng = np.random.default_rng(21)
hz = 2.5
t = np.arange(0, 600, 1 / hz)
model = {210: (0.62, 0.060, 4.0), 254: (0.05, 0.008, 0.6), 273: (0.03, 0.007, 0.5)}
logs = {}
for wl, (bg, sd, dr) in model.items():
logs[wl] = (bg, dr / 3600 * t + rng.normal(0, sd, t.size))
def noise_pp(t, y, seg_s=30):
vals = []
for s in np.arange(0, t[-1], seg_s):
w = y[(t >= s) & (t < s + seg_s)]
if w.size > 2:
vals.append(w.max() - w.min())
return float(np.mean(vals))
def drift_per_h(t, y):
slope, _ = np.polyfit(t, y, 1)
return slope * 3600
print("파장(nm) | 바탕 흡광도(AU) | 노이즈 p-p(mAU) | 드리프트(mAU/h) | 판정")
for wl, (bg, y) in logs.items():
n, d = noise_pp(t, y), drift_per_h(t, y)
ok = "안정" if (n <= 0.1 and abs(d) <= 2) else "불안정"
print(f"{wl:8d} | {bg:15.2f} | {n:15.3f} | {d:15.2f} | {ok}")
n210 = noise_pp(t, logs[210][1])
n273 = noise_pp(t, logs[273][1])
print(f"210 nm 노이즈는 273 nm 의 약 {n210 / n273:.0f} 배")210 nm 는 메탄올의 UV 컷오프(약 205 nm)에 가까워 바탕 흡광도가 높고, 지나오는 빛이 약해 노이즈가 수 배 커지며 드리프트도 기준(2 mAU/h)을 넘습니다. 254 · 273 nm 는 바탕 흡광도가 낮고 노이즈 · 드리프트가 모두 기준 이하입니다. 210 nm 에서 분석해야 한다면 컷오프가 더 짧은 아세토니트릴로 이동상을 바꾸는 방법을 생각합니다(조건 최적화는 ch08). 이 예시의 모델 값은 시뮬레이터가 쓰는 연습용 값이며, 실물 수치는 장비 · 용매 로트마다 다릅니다.
반높이 폭 약 0.1 min(6 s)인 피크 하나에 노이즈가 섞인 신호를 만들고, 응답 시간 0.5 · 2 · 8 s 로 평활했을 때 피크 높이 · 피크 꼭대기 시간 · 노이즈가 어떻게 바뀌는지 표로 봅니다. 응답 시간은 1차 지연 필터(신호가 새 값을 천천히 따라가는 필터)로 흉내 냅니다.
import numpy as np
rng = np.random.default_rng(3)
dt = 0.1 # s, 원 신호 간격
t = np.arange(0, 120, dt)
fwhm = 6.0 # s, 반높이 폭
sigma = fwhm / 2.355
true = 20 * np.exp(-0.5 * ((t - 60) / sigma) ** 2) # mAU
raw = true + rng.normal(0, 0.15, t.size)
def lag_filter(y, tau_s):
# TODO: out[i] = out[i-1] + a * (y[i] - out[i-1]), a = dt / (tau_s + dt)
return y.copy()
print("응답시간(s) | 피크 높이(mAU) | 꼭대기 시간(s) | 노이즈 SD(mAU)")
for tau in (0.5, 2, 8):
f = lag_filter(raw, tau)
base = f[(t > 20) & (t < 40)] # 피크 앞 구간 = 베이스라인 (필터 시작 구간 제외)
print(f"{tau:11.1f} | {f.max():14.2f} | {t[f.argmax()]:14.1f} | {base.std():14.3f}")import numpy as np
rng = np.random.default_rng(3)
dt = 0.1
t = np.arange(0, 120, dt)
fwhm = 6.0
sigma = fwhm / 2.355
true = 20 * np.exp(-0.5 * ((t - 60) / sigma) ** 2)
raw = true + rng.normal(0, 0.15, t.size)
def lag_filter(y, tau_s):
a = dt / (tau_s + dt)
out = np.empty_like(y)
out[0] = y[0]
for i in range(1, y.size):
out[i] = out[i - 1] + a * (y[i] - out[i - 1])
return out
print("응답시간(s) | 피크 높이(mAU) | 꼭대기 시간(s) | 노이즈 SD(mAU)")
for tau in (0.5, 2, 8):
f = lag_filter(raw, tau)
base = f[(t > 20) & (t < 40)]
print(f"{tau:11.1f} | {f.max():14.2f} | {t[f.argmax()]:14.1f} | {base.std():14.3f}")
print(f"참값: 높이 20.00 mAU, 꼭대기 60.0 s")응답 시간이 길어질수록 노이즈 SD 는 줄지만, 피크는 낮아지고 꼭대기가 뒤로 밀립니다. 8 s 에서는 높이가 크게 줄고 꼭대기가 수 초 늦어집니다. 반높이 폭이 6 s(0.1 min)인 피크에는 2 s(>0.1 min) 정도가 노이즈와 모양 사이의 균형점입니다. 피크가 좁아지는 조건(작은 입자 컬럼 등)에서는 피크 폭 설정도 함께 줄입니다.
물:메탄올 이동상으로 분석하면서 검출 파장을 205 nm 로 정했더니 베이스라인 노이즈가 크고 계속 흘러내립니다. 가장 알맞은 설명과 조치는?
- 램프가 고장 났으므로 바로 교체한다
- 메탄올의 UV 컷오프(약 205 nm)에 가까워 바탕 흡광도가 높기 때문이므로, 더 긴 파장을 쓰거나 아세토니트릴로 바꾸는 것을 검토한다
- Balance 를 여러 번 누르면 노이즈가 없어진다
- 피크 폭을 가장 좁은 값으로 바꾸면 노이즈가 줄어든다
정답 보기
② — 컷오프 근처에서는 용매가 빛을 많이 흡수해 지나오는 빛이 약하고, 그만큼 노이즈 · 드리프트가 커집니다. ③ Balance 는 0 으로 옮길 뿐 노이즈를 줄이지 않습니다. ④ 피크 폭을 좁히면 응답 시간이 짧아져 노이즈는 오히려 커집니다. ① 다른 파장에서도 같은 증상이 있을 때 램프 강도 시험으로 확인합니다.10 mm 플로셀에서 어떤 성분의 흡광도가 0.20 AU 였습니다. 같은 용액을 광로 길이가 6 mm 인 플로셀로 재면 흡광도는 얼마일까요? (다른 조건은 같음)
- 0.12 AU
- 0.20 AU
- 0.33 AU
- 0.06 AU
정답 보기
① — A = ε·b·c 에서 ε 와 c 가 같으면 흡광도는 광로 길이 b 에 비례합니다. 0.20 × 6/10 = 0.12 AU 입니다. 광로가 짧은 플로셀은 감도가 낮지만 부피가 작아 좁은 피크를 덜 넓힙니다.자주 나는 오류와 해결#
1) 주입했는데 피크가 작거나 들쭉날쭉함#
[Sampler] Warning: air drawn - liquid level below needle tip (vial 2)- 원인: 바이알 시료량이 적어 니들 끝이 액면 위에 있거나, 인서트 바닥에 기포가 있어 시료 대신 공기를 빨았습니다.
- 해결: 바이알을 빼서(트레이 칸 더블클릭) 시료를 어깨 아래까지 채우거나, 시료가 적으면 인서트를 씁니다. 바이알을 선택하고 <kbd>T</kbd> 로 톡톡 쳐 기포를 올린 뒤 다시 놓습니다.
2) 니들이 바이알 바닥에 닿음#
[Sampler] Error: needle bottom contact (vial 1) - injection aborted- 원인: 인서트를 넣었거나 바닥이 높은 바이알인데 니들 높이 오프셋이 0 입니다. 실물에서는 니들 끝이 휘거나 인서트가 깨질 수 있습니다.
- 해결: 주입 설정(B)의 니들 높이 오프셋을 올립니다(시뮬레이터 인서트 기본 권장값은 바이알 정보에 표시). 실물 값은 설명서와 인서트 규격을 확인합니다.
3) 바이알이 없다는 오류#
[Sampler] Error: no vial at position 3- 원인: 주입 위치(또는 시퀀스의 위치 번호)에 바이알이 없습니다. 바이알을 다른 칸에 놓았을 가능성이 큽니다.
- 해결: 트레이 지도(A)에서 실제 바이알 위치를 확인하고, 바이알을 옮기거나 주입 위치를 고칩니다. 배치표와 트레이를 번호 하나씩 맞춰 봅니다.
4) 컬럼 방향 오류#
[Column] Error: flow direction reversed (C18 150 x 4.6 mm) - pump start blocked- 원인: 컬럼 화살표가 검출기 → 열교환기 쪽을 가리킵니다.
- 해결: 펌프가 꺼진 상태에서 컬럼 출구 · 입구 연결을 풀고, 컬럼을 들어 <kbd>R</kbd> 로 뒤집은 뒤 입구 먼저 다시 연결합니다. 실물에서 거꾸로 흘린 적이 있으면 압력 · 피크 모양 변화를 기록해 담당자에게 알립니다.
5) 컬럼을 단 뒤 압력이 한계를 넘어 펌프가 멈춤#
[Pump] Pressure above upper limit (350 bar) - pump stopped
[Column] Flow ramp 0.0 -> 1.0 mL/min in 1 s- 원인: 유속을 0 에서 한 번에 올렸거나, 컬럼 온도가 아직 낮아 이동상 점도가 큰 상태에서 높은 유속을 넣었습니다. 압력이 계속 높으면 입구 프릿 막힘일 수 있습니다.
- 해결: 0.2 → 0.5 → 1.0 mL/min 으로 단계적으로 올리고, 온도가 설정값에 닿은 뒤 압력을 판단합니다. 같은 조건에서 전보다 압력이 크게 높으면 ch09 의 막힘 진단을 봅니다.
6) 램프가 켜지지 않음#
[VWD] Lamp ignition failed (attempt 3/3)- 원인: 시뮬레이터 시나리오에서 램프 사용 시간이 수명을 넘었거나, 앞판이 열린 상태입니다. 실물에서는 램프 노후 · 커넥터 접촉 불량 등이 원인입니다.
- 해결: 3D 뷰에서 검출기 앞판이 닫혔는지 확인하고 <kbd>F10</kbd> 으로 다시 켭니다. A 영역의 사용 시간이 2000 h 를 넘었으면 램프 교체 시나리오(ch09)로 넘어갑니다. 실물 램프는 뜨겁고 자외선을 내므로 끈 뒤 충분히 식힌 다음 다룹니다.
7) 베이스라인이 계속 흘러내리거나 노이즈가 큼#
[VWD] Baseline drift 9.8 mAU/h, noise 0.21 mAU - not stable- 원인: (a) 램프 예열이 덜 됨, (b) 용매 컷오프 근처 파장, (c) 컬럼 평형 · 온도 미도달, (d) 플로셀에 기포.
- 해결: (a) 예열 막대가 끝날 때까지 기다림 → (b) 파장을 확인(메탄올이면 210 nm 이하 피함) → (c) 컬럼 · 온도 화면에서
Equilibration 100 %· 온도 도달 확인 → (d) 유속을 잠시 올렸다 내려 기포를 밀어냄. 하나씩 바꾸고 다시 10분 기록합니다.
과제 / 팀 미션#
아래 다섯 문제를 풀고, 각 답의 근거를 한 줄씩 적어 제출합니다. 실습 C 에서 만든 파장별 노이즈 표도 함께 냅니다.
- 시료가 120 µL 밖에 없을 때 알맞은 준비는? ① 2 mL 바이알에 그대로 넣는다 ② 인서트를 넣은 바이알에 넣고 니들 높이를 확인한다 ③ 물을 부어 1 mL 로 만든다 ④ 바이알을 눕혀 놓는다
- 150 × 4.6 mm 컬럼(공극률 0.65)을 1 mL/min 에서 10 컬럼 부피만큼 평형하는 데 걸리는 시간에 가장 가까운 것은? ① 약 2분 ② 약 16분 ③ 약 60분 ④ 약 150분
- 컬럼을 장착할 때 출구를 마지막에 연결하는 가장 큰 이유는? ① 출구 피팅이 더 약해서 ② 컬럼 속 공기 · 보관 용매를 먼저 빼 검출기 플로셀로 보내지 않으려고 ③ 온도를 빨리 올리려고 ④ 주입량을 정확히 하려고
- 물:메탄올 이동상에서 노이즈가 가장 클 것으로 예상되는 파장은? ① 210 nm ② 254 nm ③ 273 nm ④ 세 파장 모두 같다
- 피크 폭(응답 시간) 설정을 필요 이상으로 크게 하면 생기는 일은? ① 노이즈가 커지고 피크가 날카로워진다 ② 노이즈가 줄지만 좁은 피크가 낮고 넓어지며 뒤로 밀린다 ③ 아무 변화가 없다 ④ 바탕 흡광도가 0 이 된다
정답 보기
1-② 소량 시료는 인서트로 액면을 높이고, 인서트 바닥에 니들이 닿지 않게 오프셋을 확인합니다. 2-② V₀ ≈ π × 0.23² × 15 × 0.65 ≈ 1.6 mL, 10배 16 mL ÷ 1 mL/min ≈ 16분. 3-② 입구로 밀려 나온 공기 · 보관 용매를 출구에서 방울로 빼낸 뒤 연결합니다. 4-① 메탄올 컷오프(약 205 nm)에 가까워 바탕 흡광도 · 노이즈가 큽니다. 5-② 응답 시간이 길면 평활이 세져 노이즈는 줄지만 피크 모양이 뭉개집니다.참고자료#
- Agilent 1260 Infinity II LC 시스템 제품 페이지: https://www.agilent.com/en/product/liquid-chromatography/hplc-systems/analytical-hplc-systems/1260-infinity-ii-lc-system
- Agilent 1260 Infinity II Vialsampler (G7129A) · Multicolumn Thermostat (G7116A) · Variable Wavelength Detector (G7114A) User Manual — 주입량 범위 · 니들 높이 · 온도 범위 · 피크 폭 표 · 램프 예열. Agilent 문헌 라이브러리에서 모델 번호로 검색: https://www.agilent.com/en/support
- Agilent, The LC Handbook — Guide to LC Columns and Method Development (컬럼 선택 · 평형 · 검출 파장): https://www.agilent.com/cs/library/primers/public/LC-Handbook-Complete-2.pdf
- 이 사이트의 도구: Python Playground · 3D 뷰어 · 3D 시뮬레이터
- 이전 차시: ch03 이동상 준비와 펌프 조작 · 다음 차시: ch05 메서드와 시퀀스 작성