# FISS 제어 프로그램 메뉴얼 (v 1.1)
-----
**작성자: 강주형**
**Original Markdwon File download: Korean.md**
**PDF File Download: Korean.pdf**
정보: 본 메뉴얼은 2020년 컴퓨터 업그레이드 이후 개발된 제어 프로그램에 해당하는 메뉴얼 입니다.
----
## 1. 프로그램 정보
현재 가용 가능한 FISS 제어 프로그램은 기존에 [CVI](https://www.ni.com/en-us/shop/electronic-test-instrumentation/programming-environments-for-electronic-test-and-instrumentation/what-is-labwindows-cvi.html)로 작성된 것과 달리 [Python](https://www.python.org/)을 이용하여 개발되었다. 해당 프로그램은 Python 3.6 버전 이상에서 호환되며, 기존에 CVI로 작성된 제어 툴 중 일부를 동적라이브러리 (dll)로 불러들여 사용 중이다. 카메라 제어는 CCD.dll, 그레이팅과 초점 모터는 gratfocus.dll, 그리고 스캐너와 관측모드 제어는 scanobs.dll 에 들어있다. GUI 등의 주 인터페이스는 Python의 PyQt5 를 활용하여 제작되었고 관측 중 4~5개의 쓰레드가 돌게 설계되었다. 해당프로그램의 초기 버전은 한국 시간 기준 2020년 7월 20일 기준으로 최종 디버깅 완료되었으며, 서울대학교 태양 그룹 구성원 중 한 명인 [강주형](http://fiss.snu.ac.kr/people/)에 의해 작성되었다.
제어 프로그램은 [GitHub](https://github.com/)를 통해 관리되고 있으며, 현지 컴퓨터에 "C:\Control_Program\fiss_control\new" 디렉토리에 있습니다. 프로그램 수정시 프로그램 관리자인 양희수 또는 강주형에게 연락 바랍니다.
위험: 2020년 7월 기준으로 간혹 30초에서 1분 가량 GUI가 멈추는 상황이 발생하고 있다. 관측에는 크게 영향을 주지 않으니 무방할 것으로 생각되지만 혹여라도 프로그램이 멈췄다고 생각해서 강제 종료 하지 않기를 권고한다.
## 2. 초기화 및 관측 수행
**Step 1**
Cover 제거 (Grating/ Scanner)
**Step 2**
서버실 내 FISS control box 및 컴퓨터 켜기 (chrome 원격 데스크톱 지원받기 또는 vnc로 원격 연결)
**Step 3**
바탕화면의 FISS 구동 프로그램 바로가기 실행 ( 아이콘)

**Step 4**
Setting Parameter 에서 온도 확인 후 Instrument Setting 에서 Apply 버튼 클릭
**Step 5**
Power의 On 버튼을 눌러 전원을 킨다 (약 5~10 초 후 CCD, Scanner, Grating and Focus에 connection 불이 들어오면 성공적으로 켜진 것), -30도 기준 CCD 쿨링까지 약 30분 정도 소요되니 광정렬 전에 미리 Power On을 눌러서 쿨링 진행한다.
위험: 쿨링 되기 전에는 관측 불가하게 설정되어 있다.
**Step 6**
쿠데룸 내에 FISS slit cover가 열렸는지 확인
위험: 2020년 현재 슬릿 커버 모터의 오동작으로 손으로 직접 열어야 함.
**Step 7**
FISS 기기 내 광정렬 확인. 종이로 가려가면서 입사광이 수직으로 들어오는지 (FISS 기기 내 천정으로 빛이 입사. 벽에 ray path가 중심에 오는지 확인), Grating에 제대로 입사하는지 확인 (이전에 VIS를 사용하고 있을 확률이 높으므로 광정렬시 빅베어측에 미리 문의)
**Step 8**
관측할 파장 free filter 교체
* Set 1 - CamA: H$\alpha$ 6563 Å / CamB: Ca II 8542 Å
* Set 2 - CamA: Na I D2 5890 Å / CamB: Fe I 5434 Å
CCD 앞 filter 교체. Filter는 FISS 공구박스에 있음. 유리면이 CCD 바깥쪽, 거울면이 CCD 안쪽을 향하게 부착
**Step 9**
CCD의 온도가 안정화 되면 Observation Setting에서 Open 버튼을 눌러서 관측 인자 파일 (.par)을 연다. ".par" 파일을 열면 다음 그림과 같다. 관측 인자 파일 설정 방식은 [3. 관측 인자 설정](#3-관측-인자-설정)에서 확인할 수 있다.
정보: 기본적으로 Power를 키면 C:\Data\YYYY\MM\DD\par 디렉토리에 sample 파일이 생성된다.

**Step 10**
Focus 맞추기. 종이로 슬릿 일부를 가린 뒤 display 상에 경계가 명확한지. 혹은 태양의 spectrogram에서 공간방향 (y축)으로 밝기 변화가 sharp하게 변하는지 확인. (AcqMode 를 0 video mode 로 설정한 후 Apply를 누르고 Run 버튼을 눌러 관측되는 spectrogram과 line profile 을 보면서 맞추면 편하다.)
History: scan mirror 앞 flat mirror로 조정가능, 2017년 focus위치 = 23.
비디오 모드시 다음 그림과 같이 이미지를 출력하는 창이 새로 생성된다.

**Step 11**
Flat 관측, Flat 관측은 관측 전후로 총 2차례, 그리고 필터를 바꾸면 찍어야한다. 이때 Operator 에게 Flat을 찍자고 요구한다 (Disk center without AO). AcqMode 를 10 Take Flat으로 설정하고 관측한다. 수정완료하면 Apply 버튼을 누른 후 Run 버튼을 눌러 수행한다. Flat 이미지는 C:\Data\YYYY\MM\DD\cal 디렉토리에 저장된다.
정보: 시스템 구조상 Flat 이미지는 실시간으로 출력되지 않는다 다만 Take(nScan) 장 수 가 7장까지 변하는 것을 보고 몇번 째 Flat frame을 찍는지 알 수 있다.
History: 기존 Flat은 100장을 찍고 평균했는데 스캔 마지막 frame이 빌 때가 있어서 이것이 에러로 들어갈 여지가 있다. 따라서 이 프로그램에서는 총 101장을 찍고 마지막 한 장을 버린 후 평균함으로써 이를 회피한다.
**Step 12**
관측 인자 파일을 open 해서 그대로 사용하거나 또는 열린 파일의 값이 나온 우상단의 표를 직접 수정하여 사용한다 (관측 인자를 설정하는 법을 잘 모르면 [3. 관측 인자 설정](#3-관측-인자-설정)에서 이를 먼저 확인하기를 추천한다). 일반적인 관측 인자는 sample_files.zip 에서 확인할 수 있다. 관측 전 gain 과 exptime을 조정하여 적어도 한 번 확인해보기를 권고한다. 관측 filter set 별 주요 인자는 다음과 같다.
| Filter Set | Set1 - A: H$\alpha$ / B: Ca II | Set2 - A: Na I D2 / B: Fe I |
|----|----------|----------|
| **wvIndex[^wvIndex]** | 1 | 2 |
| **PGain** | *A*: 2 / *B*: 2 | *A*: 2 / *B*: 1 or 0 |
| **Exp. Time (ms)** | *A*: 30 / *B*: 30 | *A*: 30 / B: 10 |
[^wvIndex]: 이미 정의된 회절격자 각도 및 해당 각도의 파장 차수로 설정한다. 만약 0으로 설정시 수동으로 이에 해당하는 *gWv*, *gOrder*, *gStep*, *gAngle* 값을 정의해서 사용하여야한다. 이 중 gStep이 실제 그레이팅이 움직이는 모터의 스텝 카운트 값이다.
경고: 중요한 인자 중 하나는 Target 이다. 이 Target의 이름이 관측 데이터가 저장될 디렉토리 이름이 된다. 따라서 띄어쓰기 없이 이를 매 관측 target이 바뀔 때 마다 수정하여 사용하기를 권장한다.
**Step 13**
수정이 끝난 후 Apply 버튼을 누르면 /par 디렉토리에 "*applied.par*" 라는 임시파일이 생성된다 (Apply 버튼을 누르기 전에는 Run 버튼이 활성화 되지 않는다). 그 후 Run 버튼을 눌러 관측을 수행한다. 관측 중 중단하고 싶으면 Stop 버튼을 누르면 된다.
**Step 13-1**
본 관측에 앞서서 관측 대상이 FOV 중심에 들어오게 하기 위해서 FOV를 넓게 측정하면서 스캐너를 조금씩 움직인다. 이때 nScan은 1로 하도록 한다. 스캔이 완료 되면 Move Scanner 에 값을 입력하고 Go 버튼을 누른다. 원하는 위치에 도달하고 난 후 Home 버튼을 눌러 해당 위치를 원점으로 맞춘다. 얼추 맞은 후 FOV를 원하는 FOV로 수정한 후 다시 한번 관측해 본다. 같은 작업을 반복하여 원하는 위치에 오도록 스캐너 위치를 설정한다.
History: 2017년 기준 약 -3500 정도 했을 때 얼추 맞았다.
**Step 13-2**
이제 본 관측으로 들어가기 위해 관측 인자를 수정한다. 관측 인자에서 nScan을 적당히 크게 한 후 관측을 종료하고 싶을 때 Stop을 눌러 종료하는 것도 좋은 방법 중 하나이다. 관측 인자 중 **Target** 은 관측 자료가 저장될 디렉토리 이름이기 때문에 이를 꼭 관측 대상에 맞는 이름으로 설정하기를 권고한다. 기본적으로 관측 자료가 저장되는 위치는 C:\Data\YYYY\MM\DD\raw\ {Target} 이다. 관측된 자료는 스캔 시작시간을 파일명으로 갖고 ms 단위 까지 파일명으로 저장된다 (예: FISS_YYYYMMDD_HHMMSS.SSS_A.fts). 자세한 관측인자 설명과 nSteps 별 cadence 는 [3. 관측 인자 설정](#3-관측-인자-설정)에서 확인할 수 있다.
관측 시 다음 그림과 같이 이미지를 출력하는 창이 새로 생성된다.

정보: 이미지 출력 창은 관측 중단 혹은 종료 후 약 15 초 후에 꺼지고 이후 부터 다음 관측이 가능하다.
**Step 14**
잊지말고 관측 종료 후 Flat을 찍도록 한다.
**Step 15**
Flat 까지 찍고 관측이 마무리되면 Power Off 를 누른다. Power Off를 누르면 CCD를 5도 까지 heating 하고 온도가 안정화 된 후 프로그램이 자동으로 꺼진다. Heating 까지 시간이 다소 소요 될 수 있다. 히팅 되는 동안 스캐너 및 그레이팅 커버를 닫는 것을 추천한다.
위혐: Heating 이 되기 전에 프로그램을 강제종료 하지 않도록 주의한다.
**Step 16**
관측 파일을 옮기기 위해 외장하드를 컴퓨터에 꽂고 파일 다운로드를 진행한다. 제어 프로그램이 꺼지면 컴퓨터를 제외한 나머지 컨트롤러는 전원을 끄고 숙소로 돌아가도 무방하다.
## 3. 관측 인자 설정
기존 관측 프로그램과 달리 관측 인자를 텍스트 형태로 넣을 수 있다. 예제 파일을 sample_files.zip 먼저 확인하여 어떤 방식으로 작성되는 지 확인하기를 바란다. 관측 인자 파일을 만들어주는 프로그램 (mk_obspar.exe)을 다운받아서 이 파일을 만들 수도 있다. 관측 프로그램 내에서도 이를 수정할 수 있지만, 관측 loop 의 개수 (nRun)는 정의할 수 없다. 관측 loop의 개수는 오로지 관측 인자 파일 (.par)에서 nRun 값을 수정하거나 또는 인자 파일 생성 프로그램을 통해서만 설정할 수 있다. 관측 인자 파일과 인자 파일 생성 프로그램은 아래 그림과 같다.


각각의 관측 루프는 begin 과 endbegin 으로 구분 된다. 첫번째 관측 loop에는 모든 관측 인자를 정의하여야 하지만, 이후의 loop 에서는 수정할 관측 인자만 수정하면 된다. sample_files.zip 에 있는 example_nloop.par 파일을 확인하여 어떤식으로 각각의 루프를 정의하는 지 알 수 있다.
-----
.par 파일 내의 관측 인자는 다음과 같은 것들이 있다.
* **nRun:** 은 총 수행할 관측 loop의 개수이다.
* **CameraMode:** 는 싱글 카메라로 찍을지 듀얼로 찍을지 설정하는 것이다. 특이한 사항이 없으면 2 (Both) 로 설정하기를 권장한다.
* **wvIndex:** 는 관측할 파장대역을 선택하는 것으로 1 은 Set1 (A: H$\alpha$ / B: Ca II 8542 Å)을 의미하고 2는 Set2 (A: Na I D2 5890 Å / B: Fe I 5434 Å) 를 의미한다. manual 로 설정할 시 (wvIndex = 0)에는 *gWv, gOrder, gStep, gAngle* 값을 수정해야 한다.
* **nSteps:** 는 기존의 nFrame과 같은 것으로 총 스캔할 Step (Frame)수를 의미한다. nStep이 1인 경우 스캐너는 정지해 있는다.
* **nScan:** 은 총 몇번 스캔을 반복할지 설정하는 인자이다.
* **CCD1_exptime:** 카메라의 노출시간을 설정한다. 단위는 초 (sec) 이다.
* **CCD1_PGain:** PGain 값을 설정한다. 기본적으로 2를 설정하면 되는데 자세한 것은 **Step 12** 의 표를 참조하기 바란다. (0-2 의 값, 정수)
* **CCD1_Gain:** Gain 값을 설정한다. (0-255 의 값, 정수)
* **Target:** 관측 타겟 이름을 정의한다. 타겟이 바뀔 때 마다 바꿔주는 것을 권고한다.
경고: 이 인자가 데이터가 저장될 디렉토리 이름이 되므로 특수문자 및 띄어쓰기를 엄격히 금한다.
* **Observer:** 관측자 이름을 표기한다.
* **TelXpos:** 망원경의 pointing 위치를 기술한다.
* **stepSize:** 스캐너가 움직일 간격 (step Size)을 정의한다. 단위는 um 이다.
* **HBin:** 수평 방향 (스펙트럼 방향) 비닝값
* **VBin:** 수직 방향 (슬릿 방향) 비닝값
* **AcqMode:** 촬영 방법으로 일반적인 관측시 1 (Single Step)을 권장한다. 0: Video Focus / 1: Single Step / 5: Scan Stop / 6: Frame Transfer / 8: Scan Continuous / 10: Take Flat. 이 중 0, 1, 10 만 지원 되며 5 와 8은 삭제 예정, 6은 추후 추가될 기능이다.
* **ScanMode:** 스캔 방식이며 현재 0: spectrograph 모드만 가능
* **Trigger:** 카메라 트리거 방식. 현재 0: internal 트리거 방식만 가능
* **ReadMode:** 카메라 readout 방식. 1: full vertical binning, 4: imaging. 기본적으로 4를 사용하면 된다.
* **ShutterMode:** 카메라 셔터 방식 관측시 1: open을 권장. 0: auto, 1: open, 2: close
## 4. Cadence
2020년 테스트 관측에서 얻은 nStep 과 노출시간에 따른 cadence는 다음과 같다.
exptime: 30 ms / 30 ms
100 frames (16 arcsec): 13.4 sec
125 frames (20 arcsec): 16.1 sec
150 frames (24 arcsec): 18.8 sec
200 frames (32 arcsec): 24.1 sec