# CCD Library Function Description CCD library contains CCD.dll, CCD.lib, CCD.h The Source code of this is CCD.c and CCD.h. ------ **Structure** ```c typedef struct CCDInformation{ ... }CCDInfo; ``` * long **camera**: Atmcd32.h 의 GetCameraHandle 로 얻은 값 * int **status**: CCD 현재 상태 (**-1**: 연결되지 않음, **1**: 연결, **0**: 종료) * int **HBin**: 파장 방향 비닝 값 * int **VBin**: 슬릿 방향 비닝 값 * int **ScanNum**: 스캔하는 총 스탭 수 (frame number) * int **Gain**: EM gain 값 (0-255) * int **PGain**: preampgain 값 (0-2) * int **Trigger**: 내부 또는 외부 트리거 사용 유무 (**0**: Internal, **1**: External) * int **AcqMode**: Acqusition mode. (**1**: Single (Step), **0**: Video(Focous), **6**: Frame Transfer, **5**:Scan stop, **8**: Single (continuous)) * int **ReadMode**: 어떻게 찍을지 설정 ex. image, track, line (**4**: Imaging mode, **1**: Full Vertical Binning). 4 만 유효하다. * int **ShutterMode**: shutter mode (**0**: Fully Auto, **1**: Permanently Open, **2**: Permanently Closed) * int **ScanMode**: i.e. scan mode - 0:spectrograph, 1:imaging mode, -1:None * int **FanSpeed**: Fan Speed (**0**: High, **1**: low, **2**: off) * int **nx**: 비닝 까지 한 후 계산 결과 얻은 파장 방향 픽셀 값 //nwidth, nhdim * int **ny**: 비닝 까지 한 후 계산 결과 얻은 슬릿 방향 픽셀 값 //nheight, nydim * int **CCD_XPix**: CCD 가 가질 수 있는 비닝 전 파장 방향 총 픽셀 값 * int **CCD_YPix**: CCD 가 가질 수 있는 비닝 전 슬릿 방향 총 픽셀 값 * int **Temperature**: CCD 온도 값 * int **wvIndex**: grating_focous.h 에 있는 WvSet 에서 선택할 설정 값의 index * int **TelXpos**: 관측 중인 X 축 위치 값 (arcsec) * int **TelYpos**: 관측 중인 Y 축 위치 값 (arcsec) * int **gStep**: Grating step count * float **gWv**: Grating wavelength * float **gAngle**: Grating angle * float **exptime**: 노출시간 * float **elapseTime**: 관측 완료까지 걸린 시간 * float **stepTime**: 1 스텝 스캔하는데 걸린 시간 * float **stepSize**: 1 스텝의 실제 스캔 사이즈, 스캐너에 지령을 줄 때는 이 값의 절반을 사용하여야 한다. // real_scan_size * float **scanSpeed**: 1 스텝 스캔하는 속도 //scan_speed * float **scanDist**: 스캔하여 움직이는 거리 //scan_stroke * char **FilePath[256]**: fits 파일이 저장될 파일 위치 * char **CCDPath[256]**: CCD 컨트롤하는 작업 디렉토리 (output) * char **camID[2]**: 카메라 A 인지 B 인지를 표시하는 인자. * char **ccdName[32]**: CCD 모델명 * char **stTime[64]**: 관측 시작 시간 * char **edTime[64]**: 관측 종료 시간 * char **Target[64]**: Target 명 * char **Observer[32]**: 관측자 이름 * unsigned short* **RawData**: 관측된 결과가 저장되는 포인터 * unsigned short* **BiasDark**: 관측된 BiasDark 가 저장될 포인터 * float* **FlatCube**: 관측된 Flat 을 저장할 포인터 ------ ```c int OpenCamera(CCDInfo* CCD) ``` Power on and initialize the camera. 여기서 카메라가 가질 수 있는 총 픽셀수를 얻는다. **Parameters** * CCDInfo **CCD**: ccdinfo 구조체 포인터. **Return** * int: 성공 또는 에러 여부 (**1**: 성공, **-1**: 초기화 오류, **-2**: 카메라 정보 받아오기 실패, **-99**: 컴퓨터 타이머(diff_time 계산시 필요) 세팅 오류) ---------- ```c int CloseCamera(CCDInfo* CCD) ``` 관측 데이터 메모리를 반환하고 카메라를 초기 설정으로 되돌린 후 종료한다. **Parameters** * CCDInfo **CCD**: ccdinfo 구조체 포인터. **Return** * int: 성공 또는 에러 여부 (**1**: 성공, **-6**: status 오류, **-7**: 셔터 오류, **-8**: 팬 종료 오류, **-9**: 카메라 종료 오류) ---------- ```c int GetCameraInfo(char* array) ``` Get camera information. **Parameter** * char* **array**: 카메라 정보를 출력 받을 문자열. **Return** * int: 성공 또는 에러 여부 (**1**:성공, **-2**: 카메라 정보 받아오기 오류, **-3**: ANDOR capabilities 정보 받아오기 오류, **-4**: HeadModel 정보 받아오기 오류, **-5**: AD 채널 수 받아오기 오류) ------------ ```c int SetCameraParam(CCDInfo* CCD, char* statOut) ``` binning, 촬영 모드 메모리 초기 할당 등 카메라를 세팅한다. **Parameter** * CCDInfo **CCD**: ccdinfo 구조체 포인터. * char* **StatOut**: 설정한 노출 시간과 실제로 설정된 노출시간을 저장한 문자열. (Output) **Return** * int: 성공 유무 (**1**: 성공, **-7**: 셔터 오류, **-8**: fan 오류, **-10**: 메모리 할당 오류, **-11**: 관측 모드 (acqusition) 오류, **-12**: 프레임 수 오류, **-13**: readmode 오류, **-14**: preampgain 오류, **-15**: gain 오류, **-16**: 트리거 오류, **-17**: 노출시간 오류) ---------- ```c int TakeImage(void) ``` 촬영 시작 **Return** * int: 성공 유무 (**1**: 성공, **-18**: 관측 에러) ---------- ```c int SaveFits(CCDInfo CCD, double* diff_time) ``` **Parameter** * CCDInfo **CCD**: ccdinfo 구조체. * double* **diff_time**: fits 파일 저장하는 데 걸리는 시간을 문자열로 가지고 온다. (Output) **Return** * int: 성공유무 (**1**: 성공) ----------- ```c int DataDump(CCDInfo* CCD, int i) ``` 관측된 데이터를 컴퓨터 메모리로 반환한다. **Parameter**: * CCDInfo **CCD**: ccdinfo 구조체 포인터. * int **i**: i 번째 프레임 ------ ```c int TakeBiasDark(CCDInfo* CCD) ``` BiasDark 이미지를 100 장 촬영하고 합쳐서 master BiasDark 를 만든다. 반드시 SetCameraParam 을 먼저 수행해야한다. **Parameter** * CCDInfo **CCD**: ccdinfo 구조체 포인터. **Return** * int: 성공유무 (**1**: 성공, **-18**: 관측 오류, **-6**: 상태 오류) ----- ```c int TakeImage_FTmode(CCDInfo* CCD) ``` Frame Transfer 모드로 이미지를 관측한다. **Parameter** * CCDInfo **CCD**: ccdinfo 구조체 포인터. **Return** * int: 성공유무 (**1**: 성공, **-18**: 관측 오류, **-6**: 상태 오류) ------ ```c void marktime(char* timestring, LARGE_INTEGER* gTime) ``` **Parameter** * char* **timestring**: 현재 시간을 밀리초 단위 까지 가지고 isot 형식으로 문자열을 가지고 온다. (ex. 2019-12-18T19:26:30.375) * LARGE_INTEGER* **gTime**: 추후에 elapsetime 을 계산하기 위해 시스템 시간을 고분해능으로 가지고 나온다. ------ ```c float time_difference() ``` 입력된 두 시간 사이의 차이를 계산한다. **Parameters** * LARGE_INTEGER* **gStart**: 시작 시간 * LARGE_INTEGER* **gEnd**: 종료 시간 **Return** * float **timediff**: 종료 시간과 시작 시간의 시간차이 --------- ```c int SaveBiasDark(CCDInfo CCD, double* diff_time) ``` 관측된 BiasDark 이미지를 fits 파일로 저장한다. **Parameters** * CCDInfo **CCD**: ccdinfo 구조체. * double* **diff_time**: fits 파일 저장하는 데 걸리는 시간을 문자열로 가지고 온다. (Output) **Return** * int: 성공유무 (**1**: 성공) ------- ```c int SaveFlatFits(CCDInfo CCD, int number, double* diff_time) ``` 관측된 Flat 이미지를 fits 파일로 저장한다. **Parameters** * CCDInfo **CCD**: ccdinfo 구조체. * int **number**: grating 바꾸는 횟수 (초기값: 7) * double* **diff_time**: fits 파일 저장하는 데 걸리는 시간을 문자열로 가지고 온다. (Output) -------- ```c int TempSet(CCDInfo CCD, int OnOff, int Temp) ``` Turn on or Turn of the CCD cooler. **Parameter** * CCDInfo **CCD**: ccdinfo 구조체. * int **Onoff**: Turn on/off the CCD. (1 is true) * int **Temp**: Set the cooling temperature of the CCD in degree. **Output** * int: 성공 유무 (**1**: 성공, **2**: 에러) ----------- ```c void StructTestCCD(CCDInfo* CCD) ``` dll 에서 로드 할때 구조체에 변수가 제대로 들어가는 지 확인하기 위해서 사용 **Parameter** * CCDInfo **CCD**: ccdinfo 구조체. (Output)