; docformat = 'rst' ; ; NAME: ; getCameraFilter ; PURPOSE: ; Retrieve filter ID from FITS header ; ;+ ; :Description: ; Retrieve filter ID from FITS header. ; ; :Categories: ; FITS, Camera ; ; :Returns: A structure with filter basic parameters. Fields are:: ; .id: Filter unique identifier ; .central: Central wavelength - micron ; .width: Width of the bandpass - micron ; .min: Minimum wavelength - micron ; .max: Maximum wavelength - micron ; If fails, return codes are:: ; -1: Syntax error ; -2: Unknown Camera ; -3: Unknown Telescope ; ; :Params: ; head: in, required, type=string ; A FITS header from the telescope ; tel: in, optional, type=string ; The ID of the telescope (from getTelescopeID) ; cam: in, optional, type=string ; The ID of the camera (from getCameraID) ; ; :Keywords: ; empty: in, optional, type=boolean, default=0 ; If set, return an empty structure ; ; :Uses: ; sxpar, lxpar, initIDL, getTelescopeID, getCameraID, astroSummary_read ; ; :Author: ; B.Carry (OCA) ; ; :History: ; Change History:: ; Written in August 2014, B. Carry (IMCCE) ; 2016 Aug.: B.Carry (OCA) - Added SPHERE/IRDIS ; 2016 Aug.: B.Carry (OCA) - Added a dictionnary table to standardize filter names ; 2017 May.: B.Carry (OCA) - Added SPHERE/IFS ; 2017 May.: B.Carry (OCA) - Output is now a structure, with ID and wavelengths ; 2017 Nov.- B.Carry (OCA) - Added SPHERE/ZIMPOL @ ESO-VLT ; 2022 Nov.- B.Carry (OCA) - Added CFHT/PUEO ; 2023 Jan.- B.Carry (OCA) - Added C2PU/QHY600 ; 2023 Dec.: B.Carry (OCA) - Added LBTO ; 2024 Mar.: B.Carry (OCA) - Added VLT/ERIS/NIX ;- function getCameraFilter, head, tel, cam, empty=empty, obsINFO=obsINFO COMPILE_OPT hidden, idl2 ;-----------------------------------------------------------------------------------------------; ;-----------------------------------------------------------------------------------------------; ;--- TAG --- I -- Initialization And Input Verification -----------------------; ;-----------------------------------------------------------------------------------------------; ;-----------------------------------------------------------------------------------------------; ;--I.1-- Syntax Verification -----------------------------------------------------------------; if n_params() lt 1 then begin message, 'Syntax : filter = getCameraFilter(head, [tel, cam])' return, -1 endif ;--I.2-- Filter Structure --------------------------------------------------------------------; filter = {id:'', central:0., width:0., min:0., max:0.} if keyword_set(empty) then return, filter ;--I.3-- Telescope and Camera ID -------------------------------------------------------------; if not keyword_set(tel) then tel=getTelescopeID(head) if not keyword_set(cam) then cam=getCameraID(head) ;--I.4-- Observatory Information -------------------------------------------------------------; if not keyword_set(obsINFO) then begin confAstroIM= initIDL() obsINFO=confAstroIM.path.obs endif ;-----------------------------------------------------------------------------------------------; ;-----------------------------------------------------------------------------------------------; ;--- TAG --- II -- Header Parsing and Filter ID Extraction -----------------------; ;-----------------------------------------------------------------------------------------------; ;-----------------------------------------------------------------------------------------------; case tel of ;--II.1-- ESO-VLT Telescopes --------------------------------------------------------------; 'ESO-VLT': begin case cam of ;--II.1.1-- NACO ----------------------------------------------------------------------; 'NACO': begin opti4 = strtrim(lxpar( head, 'HIERARCH ESO INS OPTI4 NAME' ),2) opti5 = strtrim(lxpar( head, 'HIERARCH ESO INS OPTI5 NAME' ),2) opti6 = strtrim(lxpar( head, 'HIERARCH ESO INS OPTI6 NAME' ),2) if ~strCmp(opti4,'empty') then filter.id+= ' '+opti4 if ~strCmp(opti5,'empty') then filter.id+= ' '+opti5 if ~strCmp(opti6,'empty') then filter.id+= ' '+opti6 filter.id=strTrim(filter.id,2) if strCmp(filter.id,'-2 -2 -2') then filter.id = strTrim( sxpar(head,'FILTER'), 2) end ;--II.1.2-- Hawk-I --------------------------------------------------------------------; 'Hawk-I': begin opti1 = strTrim(lxpar( head, 'HIERARCH ESO INS FILT1 NAME' ),2) opti2 = strTrim(lxpar( head, 'HIERARCH ESO INS FILT2 NAME' ),2) if ~strCmp(opti1,'empty') then filter.id+= ' '+opti1 if ~strCmp(opti2,'empty') then filter.id+= ' '+opti2 filter.id=strTrim(filter.id,2) end ;--II.1.4-- SPHERE/IRDIS --------------------------------------------------------------; 'SPHERE/IRDIS': begin filter.id = strTrim(lxpar( head, 'HIERARCH ESO INS1 FILT NAME' ),2) case filter.id of 'B_Y': filter.id = 'Y' 'B_J': filter.id = 'J' 'B_H': filter.id = 'H' 'B_Ks': filter.id = 'Ks' else: endcase end ;--II.1.5-- SPHERE/IFS ----------------------------------------------------------------; 'SPHERE/IFS': begin filter.id = strTrim(lxpar( head, 'HIERARCH ESO INS2 OPTI2 ID' ),2) case filter.id of 'PRIS_YJH': filter.id = 'YJH' else: endcase end ;--II.1.6-- SPHERE/ZIMPOL -------------------------------------------------------------; 'SPHERE/ZIMPOL': begin filter.id = strTrim(lxpar( head, 'HIERARCH ESO INS3 OPTI5 NAME' ),2) case filter.id of 'N_R': filter.id = 'R' 'N_V': filter.id = 'V' else: endcase end ;--II.1.7-- FORS2 ---------------------------------------------------------------------; 'FORS2': begin filter.id = strTrim(lxpar( head, 'HIERARCH ESO INS FILT1 NAME' ),2) case filter.id of 'R_SPECIAL': filter.id = 'R' else: endcase end ;--II.1.8-- ERIS/NIX ------------------------------------------------------------------; 'ERIS/NIX': begin filter.id = strTrim(lxpar( head, 'HIERARCH ESO INS2 NXFW NAME' ),2) case filter.id of 'Pa-b': filter.id = 'Pa-b' else: endcase end ;--II.1.x-- Unknown -------------------------------------------------------------------; else: begin message, 'getCameraFilter: ESO camera not known' return, -2 end endcase end ;--II.2-- ESO-LSO Telescopes --------------------------------------------------------------; 'ESO-LSO': begin case cam of ;--II.2.1-- EFOSC2 --------------------------------------------------------------------; 'EFOSC2': begin filter.id = strTrim(lxpar( head, 'HIERARCH ESO INS FILT1 NAME' ),2) end ;--II.2.x-- Unknown -------------------------------------------------------------------; else: begin message, 'getCameraFilter: ESO camera not known' return, -2 end endcase end ;--II.3-- Keck Observatory ----------------------------------------------------------------; 'KeckII': begin case cam of ;--II.3.1-- NIRC2 ---------------------------------------------------------------------; 'NIRC2': begin filter.id = strTrim(sxpar( head, 'FILTER', count=nbFound ),2) case filter.id of 'J + clear': filter.id = 'J' 'H + clear': filter.id = 'H' 'K + clear': filter.id = 'K' 'Ks + clear': filter.id = 'Ks' 'Kp + clear': filter.id = 'Kp' else: endcase end ;--II.3.2-- NIRSPEC -------------------------------------------------------------------; 'NIRSPEC': begin filter.id = strTrim(sxpar( head, 'FILNAME', count=nbFound ),2) case filter.id of 'NIRSPEC-2-AO': filter.id = 'Js' 'NIRSPEC-5-AO': filter.id = 'H' 'NIRSPEC-6-AO': filter.id = 'Ks' else: endcase end ;--II.3.x-- Unknown -------------------------------------------------------------------; else: begin message, 'getCameraFilter: Keck camera not known' return, -2 end endcase end ;--II.4-- CFHT ----------------------------------------------------------------------------; 'CFHT': begin filter.id = strTrim(sxpar( head, 'FILTER' ),2) case filter.id of "J#6108" : filter.id = "J" "Jcont#6111" : filter.id = "Jc" "H#6210" : filter.id = "H" "Kprime#6308" : filter.id = "Kp" "K#6315" : filter.id = "K" "FeIIcont#6213": filter.id = "FeII" "BrGamma#6311" : filter.id = "BrGamma" else: endcase end ;--II.5-- Gemini Observatory --------------------------------------------------------------; 'Gem-S': begin filter.id = strTrim(sxpar( head, 'FILTER1' ),2) case filter.id of 'Kshort_G0205': filter.id = 'Ks' 'Kprime_G0206': filter.id = 'Kp' else: endcase end 'Gem-N': begin filter.id = strTrim(sxpar( head, 'FILTER1' ),2) case filter.id of 'Kshort_G0205': filter.id = 'Ks' 'Kprime_G0206': filter.id = 'Kp' else: endcase end ;--II.6-- C2PU ----------------------------------------------------------------------------; 'C2PU-Om': begin filter.id = strTrim(sxpar( head, 'INSTFILT' ),2) case filter.id of "SDSS_gp": filter.id = "gp" "SDSS_rp": filter.id = "rp" "SDSS_ip": filter.id = "ip" "SDSS_zp": filter.id = "zp" else: endcase end ;--II.7-- LBTO ----------------------------------------------------------------------------; 'LBTO': begin filter.id = strTrim(sxpar( head, 'FILTER' ),2) case filter.id of "H": filter.id = "H" else: endcase end ;--II.x-- Unknown -------------------------------------------------------------------------; else: begin message, 'getCameraFilter: Telescope not known' return, -3 end endcase ;-----------------------------------------------------------------------------------------------; ;-----------------------------------------------------------------------------------------------; ;--- TAG --- III -- Filter Detailed Parameters -----------------------; ;-----------------------------------------------------------------------------------------------; ;-----------------------------------------------------------------------------------------------; if file_test(obsINFO,/Read) then begin ;--III.1-- Read Observatory File -----------------------------------------------------------; obs = astroSummary_read( obsINFO, /Observatory ) ;--III.2-- Identify Observatory ------------------------------------------------------------; sel = where( strcmp(obs.obsName,tel,/Fold) and strcmp(obs.instName,cam,/Fold)) ;--III.3-- Fill Filter Structure -----------------------------------------------------------; if sel[0] ne -1 then begin filter.central = obs[sel[0]].centralWave * 10000. filter.width = obs[sel[0]].bandWidth * 10000. filter.min = filter.central - filter.width / 2. filter.max = filter.central + filter.width / 2. endif endif ;--III.X-- Return Filter Structure -----------------------------------------------------------; return, filter end