Skip to content
Snippets Groups Projects
cws_read__readdata_LAR.pro 6.38 KiB
;
;   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