Ignore:
Timestamp:
25/06/09 13:39:01 (10 years ago)
Author:
dgrant
Message:

Code following grid - except that I don't think it is a grid

File:
1 edited

Legend:

Unmodified
Added
Removed
  • qesdi/data_processing/convertPre.py

    r5406 r5419  
    11import netCDF4 
    22import sys 
     3import numpy 
     4import time 
     5 
    36from TMCReader import TMCReader 
     7from netCDF4 import Dataset 
    48 
    59class PrecipetationReader(TMCReader): 
     
    812    def storeLine(self, line): 
    913        precipDataPt = PrecipetationDataPt(line.split()) 
    10         self._coordTable.insert(precipDataPt, precipDataPt.lat, precipDataPt.lon) 
     14        self.coordTable.insert(precipDataPt, precipDataPt.lat, precipDataPt.lon) 
    1115 
    1216 
     
    1620 
    1721    def __init__(self,preVals): 
    18         self.lat=preVals[0] 
    19         self.lon=preVals[1] 
    20         self.jan=preVals[2] 
    21         self.feb=preVals[3] 
    22         self.mar=preVals[4] 
    23         self.apr=preVals[5] 
    24         self.may=preVals[6] 
    25         self.jun=preVals[7] 
    26         self.jul=preVals[8] 
    27         self.aug=preVals[9] 
    28         self.sep=preVals[10] 
    29         self.oct=preVals[11] 
    30         self.nov=preVals[12] 
    31         self.dec=preVals[13] 
     22        self.lat=float(preVals[0]) 
     23        self.lon=float(preVals[1]) 
     24        self.jan=float(preVals[2]) 
     25        self.feb=float(preVals[3]) 
     26        self.mar=float(preVals[4]) 
     27        self.apr=float(preVals[5]) 
     28        self.may=float(preVals[6]) 
     29        self.jun=float(preVals[7]) 
     30        self.jul=float(preVals[8]) 
     31        self.aug=float(preVals[9]) 
     32        self.sep=float(preVals[10]) 
     33        self.oct=float(preVals[11]) 
     34        self.nov=float(preVals[12]) 
     35        self.dec=float(preVals[13]) 
     36 
     37class PrecipetationWriter: 
     38    """Class to read precipetation data""" 
     39 
     40    def __init__(self,lookupTable): 
     41        self.dataTable = lookupTable 
     42 
     43    def writeData(self, path): 
     44        self.rootgrp = Dataset(path, 'w',format='NETCDF4') 
     45        self.createDimensions() 
     46        self.createVariables() 
     47        preVar = self.rootgrp.createVariable('Precipetation','f',('time','lat','lon')) 
     48        self.setGlobalAttributes() 
     49        self.setVariableAttributes() 
     50        self.writeVariables() 
     51        self.rootgrp.close() 
     52 
     53    def createDimensions(self): 
     54        self.rootgrp.createDimension('time', 12) 
     55        self.rootgrp.createDimension('nv', 2) 
     56        self.rootgrp.createDimension('n',self.lookupTable.getLength) 
     57 
     58    def createVariables(self): 
     59        self.timeVar = self.rootgrp.createVariable('time','d', ('time',)) 
     60        self.latVar = self.rootgrp.createVariable('lat', 'f4', ('lat',)) 
     61        self.lonVar = self.rootgrp.createVariable('lon', 'f4', ('lon',)) 
     62        self.boundsVar = self.rootgrp.createVariable('climatology_bounds','d',('time','nv',)) 
     63        self.preVar = self.rootgrp.createVariable('precipetation','f4',('time','lat','lon',)) 
     64 
     65    def setGlobalAttributes(self): 
     66        self.rootgrp.history = 'Created ' + time.ctime(time.time()) 
     67 
     68    def setVariableAttributes(self): 
     69        self.latVar.units = 'degrees north' 
     70        self.lonVar.units ='degrees east' 
     71        self.timeVar.units = 'days since 1961-1-1' 
     72        self.timeVar.climatology = 'climatology bounds' 
     73 
     74    def writeVariables(self): 
     75        self.latVar[:] = self.dataTable.getLats() 
     76        self.lonVar[:] = self.dataTable.getLons() 
     77        self.timeVar[:] = [15,45,75,105,135,165,195,225,255,285,315,345] 
     78        self.preVar[:] = self.getPrecipetationData() 
     79 
     80    def getPrecipetationData(self): 
     81        for lt in self.latVar: 
     82            for ln in self.lonVar: 
     83                print lt + ln 
     84                precipetationDataPt = self.dataTable.lookup(lt,ln) 
     85                self.preVar[0][lt][ln] = precipetationDataPt.jan 
     86                self.preVar[1][lt][ln] = precipetationDataPt.feb 
     87                self.preVar[2][lt][ln] = precipetationDataPt.mar 
     88                self.preVar[3][lt][ln] = precipetationDataPt.apr 
     89                self.preVar[4][lt][ln] = precipetationDataPt.may 
     90                self.preVar[5][lt][ln] = precipetationDataPt.jun 
     91                self.preVar[6][lt][ln] = precipetationDataPt.jul 
     92                self.preVar[7][lt][ln] = precipetationDataPt.aug 
     93                self.preVar[8][lt][ln] = precipetationDataPt.sep 
     94                self.preVar[9][lt][ln] = precipetationDataPt.oct 
     95                self.preVar[10][lt][ln] = precipetationDataPt.nov 
     96                self.preVar[11][lt][ln] = precipetationDataPt.dec 
    3297 
    3398 
    3499def main(): 
     100    print time.ctime(time.time()) 
    35101    precipetationReader = PrecipetationReader() 
    36102    precipetationReader.readData(sys.argv[1]) 
    37     lookupTable = precipetationReader.getLookupTable() 
    38     print lookupTable.lookup('-59.083', '-26.583').jan 
     103    print precipetationReader.getLookupTable().lookup(-59.083,  -26.583).jan 
     104    print 'lat len ' + str(len(precipetationReader.getLookupTable().getLats())) 
     105    print 'lon len ' + str(len(precipetationReader.getLookupTable().getLons())) 
     106    precipetationWriter = PrecipetationWriter(precipetationReader.getLookupTable()) 
     107    precipetationWriter.writeData(sys.argv[2]) 
    39108 
    40109if __name__ == "__main__": 
Note: See TracChangeset for help on using the changeset viewer.