pro sofie_read_l2m_netcdf,file,idump,imode,z,data,date,time,lat,lon,orbit,event,mode,nevent,nz,dp_vers,miss,losb,fovl ;----------------------------------------------------------------------------------------------------------- ; Routine reads a SOFIE level2 "mission" (L2m) NetCDF file. ; The L2m files contain 1 variable (e.g., temperature, H2O, etc...) for the entire ; mission, for sunrise and sunset. ; ; Input: ; ; file.......path + name of the SOFIE data file ; idump......1 = echo the variable names ; 0 = be quiet ; imode......0 = return only sunrise events ; 1 = return only sunset events ; -1 = return all events (rise (NH) and set (SH)) ; ; Output: ; ; Scalars, header info: ; ; dp_vers.....SOFIE data product version, string, scalar ; nevent......number of events, scalar ; nz..........number of altitude points in profiles, scalar ; miss........number that represents missing data (-1e24) ; ; Vectors, 1 value per event: ; ; orbit........AIM orbit number ; event........SOFIE event number ; mode.........occultation mode, 0 = sunrise, 1 = sunset ; date.........date as yyyyddd ; time.........time at 83 km tangent point, as UT ; lat..........latitude (deg, -90 to 90), @ 83 km tangent point ; lon..........longitude (deg E, 0 to 360), @ 83 km tangent point ; LOSb.........line of sight bearing, SOFIE to Sun (deg E) ; FOVl.........Field of view lockdown angle relative to the top edge of the sun (arcmin) ; ; Profile data: ; ; z............altitude scale (km), dblarr(nz) ; data.........the data for this file, dblarr(nz,nevent) ; (e.g., T (K), H2O (ppmv), O3 (ppmv), CH4 (ppmv), NO (ppmv), CO2 (ppmv), ...) ; ; Source: Mark Hervig, GATS Inc. ; ; Revision: 9/24/2012: created ; ;---------------------------------------------------------------------------------------------------------------- ;- miscelaneous miss = -1d24 ; missing data value ;- open the file id = ncdf_open(file,/nowrite) glob = ncdf_inquire(id) ;- echo the file contents glob = ncdf_inquire(id) varname = strarr(glob.nvars) ; this will contain the variable names for i = 0,glob.nvars-1 do begin info = ncdf_varinq(id, i) varname(i) = info.name if (idump eq 1) then print,info.name endfor ;- get the global attributes ncdf_diminq,id,'altitude',name,nz ; number of points in profiles ncdf_attget,id,/global,'Title',out & title = string(out) ncdf_attget,id,/global,'DP_Type',out & dp_type = string(out) ncdf_attget,id,/global,'Source',out & source = string(out) ncdf_attget,id,/global,'Mission',out & mission = string(out) ncdf_attget,id,/global,'DP_Version',out & dp_vers = string(out) ncdf_attget,id,/global,'PF_Version',out & pf_version = string(out) ncdf_attget,id,/global,'SW_Version',out & sw_version = string(out) ncdf_attget,id,/global,'SW_Name',out & sw_name = string(out) ncdf_attget,id,/global,'Calib_Version',out & cal_version = string(out) ncdf_attget,id,/global,'Description',out & description = string(out) ncdf_attget,id,/global,'History',out & history = string(out) ncdf_attget,id,/global,'Gen_Date',out & gen_date = string(out) if (idump eq 1) then begin print,' ' print,'Title: ',title print,'DP_Type: ',dp_type print,'Source: ',source print,'DP_Version: ',dp_vers print,'PF_Version: ',pf_version print,'SW_Version: ',sw_version print,'SW_Name: ',sw_name print,'Calib_Version: ',cal_version print,'Gen_Date: ',gen_date endif ;- Read the header data ncdf_varget,id,'event' , event ncdf_varget,id,'Orbit' , orbit ncdf_varget,id,'Mode' , mode ncdf_varget,id,'Date' , date ncdf_varget,id,'Time_UT' , time ; UT time ncdf_varget,id,'Longitude_83km', lon ncdf_varget,id,'Latitude_83km' , lat losb = event * 0 -999 k = where(varname eq 'LOS_Bearing',nk) if nk gt 0 then ncdf_varget,id,'LOS_Bearing' , LOSb fovl = event * 0 -999 k = where(varname eq 'FOV_Lock',nk) if nk gt 0 then ncdf_varget,id,'FOV_Lock' , FOVl nevent = n_elements(event) ;- Read the data ncdf_varget,id,'Altitude' , z data = miss vect = 'n' ; IWC is a vector, others are fltarr(z,time) k = where(varname eq 'Pressure',nk) if nk gt 0 then begin ncdf_varget,id,'Pressure', data endif k = where(varname eq 'Temperature',nk) if nk gt 0 then begin ncdf_varget,id,'Temperature', data endif k = where(varname eq 'H2O_vmr',nk) if nk gt 0 then begin ncdf_varget,id,'H2O_vmr', data data = data *1d6 ; ppmv endif k = where(varname eq 'O3_vmr',nk) if nk gt 0 then begin ncdf_varget,id,'O3_vmr', data data = data *1d6 ; ppmv endif k = where(varname eq 'CH4_vmr',nk) if nk gt 0 then begin ncdf_varget,id,'CH4_vmr', data data = data *1d6 ; ppmv endif k = where(varname eq 'CO2_vmr',nk) if nk gt 0 then begin ncdf_varget,id,'CO2_vmr', data data = data *1d6 ; ppmv endif k = where(varname eq 'NO_vmr',nk) if nk gt 0 then begin ncdf_varget,id,'NO_vmr', data data = data *1d6 ; ppmv endif k = where(varname eq 'WACCM_CO2',nk) if nk gt 0 then begin ncdf_varget,id,'WACCM_CO2', data data = data *1d6 ; ppmv endif k = where(varname eq 'IWC',nk) if nk gt 0 then begin ncdf_varget,id,'IWC', data vect = 'y' ; IWC is a vector, others are fltarr(z,time) endif k = where(varname eq 'Extinction_2939',nk) if nk gt 0 then begin ncdf_varget,id,'Extinction_2939', data endif k = where(varname eq 'Extinction_3064',nk) if nk gt 0 then begin ncdf_varget,id,'Extinction_3064', data endif k = where(varname eq 'Extinction_3186',nk) if nk gt 0 then begin ncdf_varget,id,'Extinction_3186', data endif ;- Return selected mode (rise or set) if (imode eq 0 or imode eq 1) then begin k = where(mode eq imode, nevent) if (vect eq 'n') then data = data(*,k) if (vect eq 'y') then data = data(k) date = date(k) time = time(k) lat = lat(k) lon = lon(k) orbit= orbit(k) event= event(k) mode = mode(k) losb = losb(k) fovl = fovl(k) endif print,'file: ',file print,'returning ',nevent,' events' ;- Close the file ncdf_close,id ;- Done return end