diff --git a/cws_read__readdata.pro b/cws_read__readdata.pro index 92538ac5ae17af5df9819f0b90a89ad74ff9c6b2..023d850ea8568da56a96b063b49bd6aa9cb3296a 100644 --- a/cws_read__readdata.pro +++ b/cws_read__readdata.pro @@ -75,6 +75,13 @@ FUNCTION cws_read::readData, version=version return, self.readdata_CLV() end + + 'LARN': begin + + return, self.readdata_LARN() + + end + 'MPF': BEGIN @@ -856,249 +863,7 @@ FUNCTION cws_read::readData, version=version ;------------------------------------------------ 'LAR': BEGIN - - if keyword_set(uncertainty) then error_message_uncertainty, self.grp - - bin_flag = 0 - self.infile = FILE_SEARCH(self->build_source_path()+'MSGP.' $ - + self->get_date(/string,/year,/day_of_year) $ - + '.'+self->get_date(/string,/hour,/minute)+ '00.03K.BIN',c=c) - stop - IF c EQ 1 THEN BEGIN - - ; read binary file - bin_flag = 1 - - structure = { $ - lon:fltarr(3712,3712), $ - lat:fltarr(3712,3712), $ - refl2:fltarr(3712,3712), $ - bt039 :fltarr(3712,3712), $ - bt108 :fltarr(3712,3712), $ - cph:fltarr(3712,3712), $ - cod:fltarr(3712,3712), $ - refW:fltarr(3712,3712), $ - refI:fltarr(3712,3712), $ - lwp:fltarr(3712,3712), $ - iwp:fltarr(3712,3712), $ - ctt:fltarr(3712,3712), $ - ctp:fltarr(3712,3712), $ - ctpE:fltarr(3712,3712), $ - cth:fltarr(3712,3712), $ - cthE:fltarr(3712,3712), $ - cbh:fltarr(3712,3712) $ - } - - dum = fltarr(3712,3712) - - openr,lun,self.infile,/get_lun,/swap_endian - - FOR i=0,14 DO BEGIN - readu,lun,dum - structure.(i) = dum - ENDFOR - - free_lun,lun - - ENDIF ELSE BEGIN - - ; search netCDF files - self.infile = FILE_SEARCH(self->build_source_path()+'MET9.' $ - + self->get_date(/string,/year,/day_of_year) $ - + '.'+self->get_date(/string,/hour,/minute)+ '00.03K.CDF',c=c) - IF c eq 0 THEN RETURN,-1 - - ; read indicies - col = ulonarr(10281010) - openr,lun,self->build_source_path()+'/../col_lut.dat',/get_lun,/swap_endian - readu,lun,col - free_lun,lun - - row = ulonarr(10281010) - openr,lun,self->build_source_path()+'/../row_lut.dat',/get_lun,/swap_endian - readu,lun,row - free_lun,lun - - bin_flag = 0 - - ENDELSE - - CASE self.product of - - 'cmb': BEGIN - - IF bin_flag eq 0 THEN BEGIN - fileID = ncdf_open(self.inFile) - cmbID = ncdf_varID(fileID,'cloud_phase') - ncdf_varget,fileID,cmbID,cmb - ncdf_close,fileID - - data = make_array([3712,3712],value=-99.) - data[col,row]=cmb - ENDIF ELSE data = structure.cph - - img = rotate((data ge 6) + 2.* ( between(data,-1,5)) ,7) - undefine,data - undefine,cmb - - RETURN,img - - END - - 'cth' : BEGIN - IF bin_flag eq 0 THEN BEGIN - fileID = ncdf_open(self.inFile) - cmbID = ncdf_varID(fileID,'cloud_top_height') - ncdf_varget,fileID,cmbID,data - ncdf_close,fileID - - img = make_array([3712,3712],value=-99.) - img[col,row] = data - endIF ELSE img = structure.cth - img = rotate(img,7) - nodata_idx = where(img lt 0 ,nodata_anz) - IF nodata_anz gt 0 THEN img[nodata_idx]=-1. - - RETURN,img - - end - - - - 'ctp' : BEGIN - IF bin_flag eq 0 THEN BEGIN - fileID = ncdf_open(self.inFile) - cmbID = ncdf_varID(fileID,'cloud_top_pressure') - ncdf_varget,fileID,cmbID,data - ncdf_close,fileID - - img = make_array([3712,3712],value=-1.) - img[col,row] = data - endIF ELSE img = structure.ctp - img = rotate(img,7) - - nodata_idx = where(img lt 0 ,nodata_anz) - IF nodata_anz gt 0 THEN img[nodata_idx]=-1. - - - RETURN,img - end - - - 'ctt' : BEGIN - IF bin_flag eq 0 THEN BEGIN - fileID = ncdf_open(self.inFile) - cmbID = ncdf_varID(fileID,'cloud_effective_temperature') - ncdf_varget,fileID,cmbID,data - ncdf_close,fileID - - img = make_array([3712,3712],value=-1.) - img[col,row] = data - ENDIF ELSE img = structure.ctt - img = rotate(img,7) - - nodata_idx = where(img lt 0 ,nodata_anz) - IF nodata_anz gt 0 THEN img[nodata_idx]=-1. - - - RETURN,img - end - - 'cod' : BEGIN - IF bin_flag eq 0 THEN BEGIN - fileID = ncdf_open(self.inFile) - cmbID = ncdf_varID(fileID,'visible_optical_depth') - ncdf_varget,fileID,cmbID,data - ncdf_close,fileID - - img = make_array([3712,3712],value=-1.) - img[col,row] = data - ENDIF ELSE img = structure.cod - img = rotate(img,7) - - nodata_idx = where(img lt 0 ,nodata_anz) - IF nodata_anz gt 0 THEN img[nodata_idx]=-1. - - - RETURN,img - END - - 'ref' : BEGIN - - IF bin_flag eq 0 THEN BEGIN - fileID = ncdf_open(self.inFile) - cmbID = ncdf_varID(fileID,'particle_size') - ncdf_varget,fileID,cmbID,data - ncdf_close,fileID - - img = make_array([3712,3712],value=-1.) - img[col,row] = data - - img = rotate(img,7) - self->set_product,'cph' - cph = self->get_data() - self->set_product,'ref' - idx_ice = where(round(cph) eq 2,cIce) - - IF cIce gt 0 THEN img[idx_ice] /= 2. - ENDIF ELSE BEGIN - wat = structure.refW - ice = (structure.refI)/2. - img = wat > ice - ENDELSE - nodata_idx = where(img lt 0 ,nodata_anz) - IF nodata_anz gt 0 THEN img[nodata_idx]=-1. - - RETURN,img - END - - 'lwp' : BEGIN - IF bin_flag eq 0 THEN BEGIN - fileID = ncdf_open(self.inFile) - cmbID = ncdf_varID(fileID,'liquid_water_path') - ncdf_varget,fileID,cmbID,data - ncdf_close,fileID - - img = make_array([3712,3712],value=-1.) - img[col,row] = data - ENDIF ELSE BEGIN - lwp = structure.lwp - iwp = structure.iwp - img = lwp > iwp - ENDELSE - img = rotate(img,7) - - nodata_idx = where(img lt 0 ,nodata_anz) - IF nodata_anz gt 0 THEN img[nodata_idx]=-1. - - - RETURN,img - END - - 'cph' : BEGIN - IF bin_flag eq 0 THEN BEGIN - fileID = ncdf_open(self.inFile) - cmbID = ncdf_varID(fileID,'cloud_phase') - ncdf_varget,fileID,cmbID,data - ncdf_close,fileID - - img = make_array([3712,3712],value=-1.) - img[col,row] = data - ENDIF ELSE img = structure.cph - cph = rotate(img,7) - - cmb = self->get_data(product='cmb') - self->set_product,'cph' - - data = 0.*(cmb eq 0) + 1.*( cph eq 1 or cph eq 2 or cph eq 3) $ - + 2.*( cph eq 4 or (cph eq 5) ) $ - - + 4.*( (cph eq 6 or cph eq 9) and (cmb eq 1) ) - RETURN,data - - END - - ENDCASE + return,self.readdata_LAR() END ;------------------------------------------------ diff --git a/cws_read__readdata_LAR.pro b/cws_read__readdata_LAR.pro new file mode 100644 index 0000000000000000000000000000000000000000..e98c4036bbf81409f60d31e99cc8f060163eebfe --- /dev/null +++ b/cws_read__readdata_LAR.pro @@ -0,0 +1,250 @@ +; +; LAR or CREW +; +function cws_read::readdata_LAR + + + if keyword_set(uncertainty) then error_message_uncertainty, self.grp + + bin_flag = 0 + self.infile = FILE_SEARCH(self->build_source_path()+'MSGP.' $ + + self->get_date(/string,/year,/day_of_year) $ + + '.'+self->get_date(/string,/hour,/minute)+ '00.03K.BIN',c=c) + stop + IF c EQ 1 THEN BEGIN + + ; read binary file + bin_flag = 1 + + structure = { $ + lon:fltarr(3712,3712), $ + lat:fltarr(3712,3712), $ + refl2:fltarr(3712,3712), $ + bt039 :fltarr(3712,3712), $ + bt108 :fltarr(3712,3712), $ + cph:fltarr(3712,3712), $ + cod:fltarr(3712,3712), $ + refW:fltarr(3712,3712), $ + refI:fltarr(3712,3712), $ + lwp:fltarr(3712,3712), $ + iwp:fltarr(3712,3712), $ + ctt:fltarr(3712,3712), $ + ctp:fltarr(3712,3712), $ + ctpE:fltarr(3712,3712), $ + cth:fltarr(3712,3712), $ + cthE:fltarr(3712,3712), $ + cbh:fltarr(3712,3712) $ + } + + dum = fltarr(3712,3712) + + openr,lun,self.infile,/get_lun,/swap_endian + + FOR i=0,14 DO BEGIN + readu,lun,dum + structure.(i) = dum + ENDFOR + + free_lun,lun + + ENDIF ELSE BEGIN + + ; search netCDF files + self.infile = FILE_SEARCH(self->build_source_path()+'MET9.' $ + + self->get_date(/string,/year,/day_of_year) $ + + '.'+self->get_date(/string,/hour,/minute)+ '00.03K.CDF',c=c) + IF c eq 0 THEN RETURN,-1 + + ; read indicies + col = ulonarr(10281010) + openr,lun,self->build_source_path()+'/../col_lut.dat',/get_lun,/swap_endian + readu,lun,col + free_lun,lun + + row = ulonarr(10281010) + openr,lun,self->build_source_path()+'/../row_lut.dat',/get_lun,/swap_endian + readu,lun,row + free_lun,lun + + bin_flag = 0 + + ENDELSE + + CASE self.product of + + 'cmb': BEGIN + + IF bin_flag eq 0 THEN BEGIN + fileID = ncdf_open(self.inFile) + cmbID = ncdf_varID(fileID,'cloud_phase') + ncdf_varget,fileID,cmbID,cmb + ncdf_close,fileID + + data = make_array([3712,3712],value=-99.) + data[col,row]=cmb + ENDIF ELSE data = structure.cph + + img = rotate((data ge 6) + 2.* ( between(data,-1,5)) ,7) + undefine,data + undefine,cmb + + RETURN,img + + END + + 'cth' : BEGIN + IF bin_flag eq 0 THEN BEGIN + fileID = ncdf_open(self.inFile) + cmbID = ncdf_varID(fileID,'cloud_top_height') + ncdf_varget,fileID,cmbID,data + ncdf_close,fileID + + img = make_array([3712,3712],value=-99.) + img[col,row] = data + endIF ELSE img = structure.cth + img = rotate(img,7) + nodata_idx = where(img lt 0 ,nodata_anz) + IF nodata_anz gt 0 THEN img[nodata_idx]=-1. + + RETURN,img + + end + + + + 'ctp' : BEGIN + IF bin_flag eq 0 THEN BEGIN + fileID = ncdf_open(self.inFile) + cmbID = ncdf_varID(fileID,'cloud_top_pressure') + ncdf_varget,fileID,cmbID,data + ncdf_close,fileID + + img = make_array([3712,3712],value=-1.) + img[col,row] = data + endIF ELSE img = structure.ctp + img = rotate(img,7) + + nodata_idx = where(img lt 0 ,nodata_anz) + IF nodata_anz gt 0 THEN img[nodata_idx]=-1. + + + RETURN,img + end + + + 'ctt' : BEGIN + IF bin_flag eq 0 THEN BEGIN + fileID = ncdf_open(self.inFile) + cmbID = ncdf_varID(fileID,'cloud_effective_temperature') + ncdf_varget,fileID,cmbID,data + ncdf_close,fileID + + img = make_array([3712,3712],value=-1.) + img[col,row] = data + ENDIF ELSE img = structure.ctt + img = rotate(img,7) + + nodata_idx = where(img lt 0 ,nodata_anz) + IF nodata_anz gt 0 THEN img[nodata_idx]=-1. + + + RETURN,img + end + + 'cod' : BEGIN + IF bin_flag eq 0 THEN BEGIN + fileID = ncdf_open(self.inFile) + cmbID = ncdf_varID(fileID,'visible_optical_depth') + ncdf_varget,fileID,cmbID,data + ncdf_close,fileID + + img = make_array([3712,3712],value=-1.) + img[col,row] = data + ENDIF ELSE img = structure.cod + img = rotate(img,7) + + nodata_idx = where(img lt 0 ,nodata_anz) + IF nodata_anz gt 0 THEN img[nodata_idx]=-1. + + + RETURN,img + END + + 'ref' : BEGIN + + IF bin_flag eq 0 THEN BEGIN + fileID = ncdf_open(self.inFile) + cmbID = ncdf_varID(fileID,'particle_size') + ncdf_varget,fileID,cmbID,data + ncdf_close,fileID + + img = make_array([3712,3712],value=-1.) + img[col,row] = data + + img = rotate(img,7) + self->set_product,'cph' + cph = self->get_data() + self->set_product,'ref' + idx_ice = where(round(cph) eq 2,cIce) + + IF cIce gt 0 THEN img[idx_ice] /= 2. + ENDIF ELSE BEGIN + wat = structure.refW + ice = (structure.refI)/2. + img = wat > ice + ENDELSE + nodata_idx = where(img lt 0 ,nodata_anz) + IF nodata_anz gt 0 THEN img[nodata_idx]=-1. + + RETURN,img + END + + 'lwp' : BEGIN + IF bin_flag eq 0 THEN BEGIN + fileID = ncdf_open(self.inFile) + cmbID = ncdf_varID(fileID,'liquid_water_path') + ncdf_varget,fileID,cmbID,data + ncdf_close,fileID + + img = make_array([3712,3712],value=-1.) + img[col,row] = data + ENDIF ELSE BEGIN + lwp = structure.lwp + iwp = structure.iwp + img = lwp > iwp + ENDELSE + img = rotate(img,7) + + nodata_idx = where(img lt 0 ,nodata_anz) + IF nodata_anz gt 0 THEN img[nodata_idx]=-1. + + + RETURN,img + END + + 'cph' : BEGIN + IF bin_flag eq 0 THEN BEGIN + fileID = ncdf_open(self.inFile) + cmbID = ncdf_varID(fileID,'cloud_phase') + ncdf_varget,fileID,cmbID,data + ncdf_close,fileID + + img = make_array([3712,3712],value=-1.) + img[col,row] = data + ENDIF ELSE img = structure.cph + cph = rotate(img,7) + + cmb = self->get_data(product='cmb') + self->set_product,'cph' + + data = 0.*(cmb eq 0) + 1.*( cph eq 1 or cph eq 2 or cph eq 3) $ + + 2.*( cph eq 4 or (cph eq 5) ) $ + + + 4.*( (cph eq 6 or cph eq 9) and (cmb eq 1) ) + RETURN,data + + END + + ENDCASE + +end diff --git a/cws_read__readdata_LARN.pro b/cws_read__readdata_LARN.pro new file mode 100644 index 0000000000000000000000000000000000000000..de9d3b56a8a1f1fed1d5c8f9ee11b8ef041e2c7e --- /dev/null +++ b/cws_read__readdata_LARN.pro @@ -0,0 +1,109 @@ +; +; LAR for ICWG2 + +function cws_read::readdata_LARN + self.infile = file_search(self.build_source_path()+'MT9V04.0.' $ + + self.get_date(/string,/year,/day_of_year) $ + +'.'+self->get_date(/string,/hour,/minute)+'.PX.03K.NC', c =c ) + + IF c eq 0 THEN RETURN,-1 + + + case self.product of + 'cmb': begin + ncdf_get,self.infile,'cloud_top_pressure',d + ncdf_get,self.infile,'latitude',ll + ctp = d['cloud_top_pressure','value'] + lat = ll['latitude','value'] + + cmb = (lat lt 200) + (ctp lt 2000) + cmb = rotate(cmb,7) + return,cmb + + end + + 'cph': begin + ncdf_get,self.infile,'cloud_phase',d + ncdf_get,self.infile,'latitude',ll + cph = d['cloud_phase','value'] + lat = ll['latitude','value'] + + ;cmb = (lat lt 200) + (ctp lt 2000) + cph = rotate(cph,7) + return,cph + + end + + + 'ctp': begin + ncdf_get,self.infile,'cloud_top_pressure',d + ctp = d['cloud_top_pressure','value'] + idx = where (ctp gt 2000) + ctp[idx] = -999. + + ctp = rotate(ctp,7) + return,ctp + end + + + 'ctt': begin + ncdf_get,self.infile,'cloud_top_temperature',d + ctt = d['cloud_top_temperature','value'] + idx = where (ctt gt 2000) + ctt[idx] = -999. + + ctt = rotate(ctt,7) + return,ctt + end + + + 'cth': begin + ncdf_get,self.infile,'cloud_top_height',d + cth = d['cloud_top_height','value'] + idx = where (cth gt 2000) + cth[idx] = -999. + + cth = rotate(cth,7) + return,cth + end + + 'cod': begin + ncdf_get,self.infile,'cloud_visible_optical_depth',d + cod = d['cloud_visible_optical_depth','value'] + idx = where (cod gt 2000) + cod[idx] = -999. + + cod = rotate(cod,7) + return,cod + end + + 'ref': begin + ncdf_get,self.infile,'cloud_particle_size',d + ref = d['cloud_particle_size','value'] + idx = where (ref gt 2000) + ref[idx] = -999. + + ref = rotate(ref,7) + return,ref + end + + 'lwp': begin + ncdf_get,self.infile,'cloud_lwp_iwp',d + cwp = d['cloud_lwp_iwp','value'] + idx = where (cwp gt 2000) + cwp[idx] = -999. + + cwp = rotate(cwp,7) + return,cwp + + end + + + + + endcase + + + + +end diff --git a/icwg2_transform.pro b/icwg2_transform.pro index 924731befd5307ef4b01e757a8068c6fec449d40..6b528f9b9db8bcdb1053f9a2f4fe921f6f84e3c3 100644 --- a/icwg2_transform.pro +++ b/icwg2_transform.pro @@ -4,7 +4,7 @@ pro icwg2_transform, grp default,grp,'TPS' prd_list = ['cmb','ctp','ctt','cth','cod','ref','cph','lwp'] -prd_list=['cmb','ctp'] +;prd_list=['cmb','ctp'] o=cws_read() o.set_group,grp