PageRenderTime 22ms CodeModel.GetById 26ms RepoModel.GetById 0ms app.codeStats 0ms

/mat2nc.py

https://gitlab.com/pkormos/phase_python
Python | 193 lines | 36 code | 26 blank | 131 comment | 0 complexity | 2292cb31e8d95c88d3e277d076a93c8a MD5 | raw file
  1. '''
  2. bring_in_ml_files -- this program will take the corrected weather data in the .mat files and pull it into netcdf formats
  3. does precip station data
  4. rh station data (which is then modified and resaved)
  5. precipitation totals
  6. @author: patrick kormos
  7. @contact: patrick.kormos@ars.usda.gov
  8. '''
  9. import netCDF4 as nc
  10. import numpy as np
  11. from pandas import DataFrame, date_range
  12. import h5py
  13. # #### THIS CODE CHUNK WILL CONVERT PRECIPITATION STATION DATA .MAT FILE TO .NC FILE ####
  14. # pmat = h5py.File('/Users/pkormos/rcew_met_dist/met/latest_data/rcew_ppt_pk.mat') # connect to .mat database
  15. # p_list = np.array(['rc-047', 'rc-055', 'rc-059', 'rc-074', 'rc-075', 'rc-076', 'rc-078', 'rc-083', # manually bring in column headers
  16. # 'rc-088', 'rc-095b', 'rc-097', 'rc-106', 'rc-114', 'rc-119', 'rc-128', 'rc.fl-057',
  17. # 'rc.lsc-127', 'rc.mc-043041', 'rc.mc-053', 'rc.mc-054', 'rc.mc-061', 'rc.mc-072',
  18. # 'rc.ng-098c', 'rc.ng-108', 'rc.sc-012', 'rc.sc-015', 'rc.sc-023', 'rc.sc-024',
  19. # 'rc.sc-031','rc.sc-045', 'rc.sc.mp-033', 'rc.sum-049', 'rc.tg-116c','rc.tg-126',
  20. # 'rc.tg-145', 'rc.tg-147', 'rc.tg-155', 'rc.tg-156', 'rc.tg-165', 'rc.tg-167',
  21. # 'rc.tg-174', 'rc.tg.dc-144', 'rc.tg.dc-154', 'rc.tg.dc-163', 'rc.tg.dc-163',
  22. # 'rc.tg.dc.jd-124', 'rc.tg.dc.jd-124b', 'rc.tg.dc.jd-125', 'rc.tg.rme-166b',
  23. # 'rc.tg.rme-176', 'rc.tg.rme-rmsp', 'rc.tg.rmw-166x94','rc.usc-138031',
  24. # 'rc.usc-138044', 'rc.usc-d03','rc.usc-j10', 'rc.usc-l21'])
  25. # ppt = DataFrame(np.transpose(pmat.get("ppt_corrected")), index=date_range('1962-1-1', '2014-12-31 23:00', freq='H'), columns = p_list) # make pandas dataset
  26. # ppt = ppt.replace('NaN',-9999)
  27. #
  28. #
  29. # # create the ppt netcdf file.
  30. # pnc = '/Volumes/bunnyhill/HUMIDITY_WORK_2016/rcew_ppt_pk.nc' # netcdf file name
  31. # pn = nc.Dataset(pnc, 'w',format="NETCDF4",clobber=True) # create precip ncdf file
  32. # time = pn.createDimension("time", None) # create time dimension
  33. # stns = pn.createDimension("stations",np.size(p_list)) # create stations dimension
  34. # tvar = pn.createVariable("time","int",("time"))
  35. # tvar[:] = np.arange(0,np.shape(ppt)[0])
  36. # tvar.units = "hours since 1962-01-01 00:00:00 -7:00"
  37. # tvar.long_name = "time"
  38. # stnn = pn.createVariable("stations","int",("stations"))
  39. # for i in np.arange(0,np.shape(p_list)[0]):
  40. # setattr(pn.variables['stations'], 'station_%s'%i,p_list[i])
  41. # stnn[:] = np.arange(0,np.shape(p_list)[0])
  42. # pvar = pn.createVariable("precipitation","f4",("time","stations",),fill_value=-9999)
  43. # pvar.long_name = "corrected precipitation depth per hour time step"
  44. # pvar.units = "mm"
  45. # pvar[:] = ppt.as_matrix()
  46. # pn.close()
  47. ####################################################################################################################################
  48. # # rh has been modified by plot_and_correct_humitiyxxx.py. if you uncomment and rerun this code, you must rerun these scripts.
  49. #### THIS CODE CHUNK WILL CONVERT RELATIVE HUMIDITY MAT FILE TO A .NC FILE ####
  50. rmat = h5py.File('/Users/pkormos/rcew_met_dist/met/latest_data/rcew_rh_pk.mat') # connect to .mat database
  51. r_list = np.array(['rc-076','rc-095b','rc-128','rc.lsc-127','rc.sc-012','rc.sc-031',
  52. 'rc.tg-145','rc.tg-167','rc.tg-167b','rc.tg-174','rc.tg.dc-144',
  53. 'rc.tg.dc-163',
  54. 'rc.tg.dc.jd-124',
  55. 'rc.tg.dc.jd-124b',
  56. 'rc.tg.dc.jd-125',
  57. 'rc.tg.rme-166b',
  58. 'rc.tg.rme-176',
  59. 'rc.tg.rme-rmsp',
  60. 'rc.usc-d03',
  61. 'rc.usc-j10',
  62. 'rc.usc-l21',
  63. 'rc-076_tf',
  64. 'rc-128_tf',
  65. 'rc.lsc-127_tf',
  66. 'rc.tg.rme-176_tf'])
  67. rh = DataFrame(np.transpose(rmat.get("rh")), index=date_range('18-Jun-1981 11:00:00', '01-Oct-2014', freq='H'), columns = r_list) # make pandas dataset
  68. rh = rh.replace('NaN',-9999)
  69. rnc = '/Volumes/bunnyhill/HUMIDITY_WORK_2016/rcew_rh_pk.nc' # netcdf file name
  70. # rn = nc.Dataset(rnc, 'w',format="NETCDF4",clobber=True) # create rh ncdf file
  71. # time = rn.createDimension("time", None) # create time dimension
  72. # stns = rn.createDimension("stations",np.size(r_list)) # create stations dimension
  73. # tvar = rn.createVariable("time","int",("time"))
  74. # tvar[:] = np.arange(0,np.shape(rh)[0])
  75. # tvar.units = "hours since 1981-06-18 11:00:00 -7:00"
  76. # tvar.long_name = "time"
  77. # stnn = rn.createVariable("stations","int",("stations"))
  78. # stnn[:] = np.arange(0,np.shape(r_list)[0])
  79. # for i in np.arange(0,np.shape(r_list)[0]):
  80. # setattr(rn.variables['stations'], 'station_%s'%i,r_list[i])
  81. # rvar = rn.createVariable("relative_humidity","f4",("time","stations",),fill_value=-9999)
  82. # rvar.long_name = "relative humidity"
  83. # rvar.units = "decimal percent"
  84. # rvar[:] = rh.as_matrix()
  85. # rn.close()
  86. rn = nc.Dataset(rnc, 'r+') # open rh ncdf file
  87. rn_rh = rn.variables['relative_humidity']
  88. rn_rh[:,np.squeeze(np.argwhere(r_list=='rc-128'))] = rh['rc-128'].as_matrix()
  89. rn.close()
  90. # # append station xyz onto rh file
  91. # rmat = h5py.File('/Users/pkormos/rcew_met_dist/met/latest_data/rcew_rh_pk.mat') # connect to .mat database
  92. coords = rmat.get("rh_stn_xyz")
  93. # rnc = '/Volumes/bunnyhill/HUMIDITY_WORK_2016/rcew_rh_pk.nc' # netcdf file name
  94. # rn = nc.Dataset(rnc, 'r+',format="NETCDF4") # create precip ncdf file
  95. xyzdim = rn.createDimension("easting_northing_elev",3) # create stations dimension
  96. xyzvar = rn.createVariable("easting_northing_elev","float",("stations","easting_northing_elev"))
  97. xyzvar[:] = np.transpose(coords[:])
  98. xyzvar.station_coordinate_0 = "easting (meters)"
  99. xyzvar.station_coordinate_1 = "northing (meters)"
  100. xyzvar.Coordinate_System = "UTM_NAD83_Zone11"
  101. rn.close()
  102. # ####################################################################################################################################
  103. # ####### CODE TO CONVERT WATER YEAR TOTAL PRECIPTIATION FROM .MAT FILE TO NETCDF FILE ###############################################
  104. # ####################################################################################################################################
  105. # wyoi = range(1984,2015)
  106. # ptmat = h5py.File('/Users/pkormos/rcew_met_dist/snow_data/phase_analysis/ppt_wytot.mat') # connect to .mat database
  107. # ppt = np.transpose(ptmat.get("ppt_wytot"),(0,2,1))
  108. # ppt_file = "/Volumes/LaCie/precip_cf/precip_wy1984.nc"
  109. # p_ncid = nc.Dataset(ppt_file,'r') # open ncdf file with correct x and y information
  110. # ppt_tot_file = nc.Dataset("/Volumes/megadozer/CZO/data_products/rcew_ppt_wytot.nc",'w')
  111. # ppt_tot_file.createDimension('time',size=None) # make an unlimited dimension
  112. # ydim = p_ncid.dimensions['y']
  113. # ppt_tot_file.createDimension(ydim.name,len(ydim))
  114. # xdim = p_ncid.dimensions['x']
  115. # ppt_tot_file.createDimension(xdim.name,len(xdim))
  116. # wyvar = ppt_tot_file.createVariable("time","i","time")
  117. # wyvar[:] = wyoi
  118. # px = p_ncid.variables['x']
  119. # x = ppt_tot_file.createVariable(px.name,px.datatype,px.dimensions) # make same xvar
  120. # x[:] = px[:] # put x coords in there
  121. # py = p_ncid.variables['y']
  122. # y = ppt_tot_file.createVariable(py.name,py.datatype,py.dimensions) # make same xvar
  123. # y[:] = py[:] # put x coords in there
  124. # wytot_var = ppt_tot_file.createVariable('ppt_wytot','f4',('time','y','x')) # create vp variable
  125. # wytot_var[:] = ppt[:,:,:]
  126. # p_ncid.close()
  127. # ppt_tot_file.close()
  128. # # could improve this sometime to make it more netcdf complient
  129. ####################################################################################################################################
  130. ####### CODE TO CONVERT WINTER WATER YEAR TOTAL PRECIPTIATION FROM .MAT FILE TO NETCDF FILE ########################################
  131. ####################################################################################################################################
  132. # wyoi = range(1984,2015)
  133. # ptmat = h5py.File('/Users/pkormos/rcew_met_dist/snow_data/phase_analysis/ppt_wtot.mat') # connect to .mat database
  134. # ppt = np.transpose(ptmat.get("wppt_total"),(0,2,1))
  135. #
  136. #
  137. # ppt_file = "/Volumes/LaCie/precip_cf/precip_wy1984.nc"
  138. # p_ncid = nc.Dataset(ppt_file,'r') # open ncdf file with correct x and y information
  139. #
  140. # ppt_tot_file = nc.Dataset("/Volumes/megadozer/CZO/data_products/rcew_ppt_winter_tot.nc",'w')
  141. # ppt_tot_file.createDimension('time',size=None) # make an unlimited dimension
  142. #
  143. # ydim = p_ncid.dimensions['y']
  144. # ppt_tot_file.createDimension(ydim.name,len(ydim))
  145. # xdim = p_ncid.dimensions['x']
  146. # ppt_tot_file.createDimension(xdim.name,len(xdim))
  147. #
  148. #
  149. # wyvar = ppt_tot_file.createVariable("time","i","time")
  150. # wyvar[:] = wyoi
  151. #
  152. # px = p_ncid.variables['x']
  153. # x = ppt_tot_file.createVariable(px.name,px.datatype,px.dimensions) # make same xvar
  154. # x[:] = px[:] # put x coords in there
  155. #
  156. # py = p_ncid.variables['y']
  157. # y = ppt_tot_file.createVariable(py.name,py.datatype,py.dimensions) # make same xvar
  158. # y[:] = py[:] # put x coords in there
  159. #
  160. # wytot_var = ppt_tot_file.createVariable('ppt_winter_tot','f4',('time','y','x')) # create vp variable
  161. # wytot_var[:] = ppt[:,:,:]
  162. #
  163. # p_ncid.close()
  164. # ppt_tot_file.close()
  165. # could improve this sometime to make it more netcdf complient