Changeset 929


Ignore:
Timestamp:
15/05/06 16:45:38 (13 years ago)
Author:
domlowe
Message:

basic writing of subsetted netcdf file

Location:
TI02-CSML/trunk/parser
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • TI02-CSML/trunk/parser/csmlio.py

    r928 r929  
    1919    import csmldataiface 
    2020except: 
    21     print 'Could not import CSML Data Interface module. Make sure the Parser code is in ../parser directory on the same level as ../Scanner directory.' 
     21    print 'Could not import CSML Data Interface module. Make sure the Parser code is in ../newparser directory on the same level as ../Scanner directory.' 
    2222    sys.exit() 
    2323 
     
    3030        self.currentFeature=None 
    3131        self.currentArrayDescriptor = None 
     32        self.domainReference=None 
     33        self.domainComplement=None 
    3234        #this is a fix to the  ElementTree namespace problem that namespaces are usually represented as ns0, ns1, ns2 etc. 
    3335        etree._namespace_map.update({ 
     
    131133         
    132134     
    133  
     135    def writeNetCDF(self,var, timeSubset, fulldata,**kwargs): 
     136        #writes a new netcdf file containing a subsetted dataset: 
     137        #var contains the variable name 
     138        #timeSubset contains the time values(axis) 
     139        #fulldata contains the data 
     140        #and kwargs should contain the subset (from which the axes eg lat lon are extracted) 
     141                
     142        output_file='temp.nc' 
     143        from Scientific.IO.NetCDF import *  #use this for it's simple interface.. 
     144        from Numeric import * 
     145        ncfile = NetCDFFile ( output_file, 'w' ) 
     146        # create the dimensions 
     147         
     148         
     149        ncfile.createDimension ( 'time', len(timeSubset)) 
     150        time_var = ncfile.createVariable ( 'time', Float, ('time',) ) 
     151        time_var.longname = 'time' 
     152        #time_var.units = 'days since %s' % starting_julian_date.strftime() 
     153        floatTimes=[] 
     154        for time in timeSubset: 
     155            #floatTimes.append(float(time)) 
     156            floatTimes.append(5) # NEED TO CONVERT 'back' from string to standard julian day.. . 
     157        time_var[:] =floatTimes[:] 
     158        for item in self.domainComplement: 
     159            if item in kwargs: 
     160                #need to get subset.. 
     161                vals=[] 
     162                for value in self.domainComplement[item]: 
     163                    if value >= kwargs[item][0]: 
     164                        if value <= kwargs[item] [1]: 
     165                            vals.append(value) 
     166                #print kwargs[item] 
     167            else: 
     168                #use complete 'axis' 
     169                vals=self.domainComplement[item] 
     170            ncfile.createDimension(item, len(vals))  
     171            item_var = ncfile.createVariable ( item, Float, (item,) ) 
     172            item_var[:]=vals[:] 
     173         
     174        print fulldata 
     175        #TODO: need to order items in domainComplement to match order in subsetted data 
     176        #for now this will work 
     177        dc = self.currentFeature.domain.domainComplement 
     178#         print dc.ordinates[0].definesAxis 
     179#         print dc.ordinates[1].definesAxis 
     180#         print dc.ordinates[2].definesAxis 
     181         
     182             
     183        if len(dc.ordinates)==3: 
     184            feature_var = ncfile.createVariable (self.currentFeature.id, Float, ('time',dc.ordinates[2].definesAxis,dc.ordinates[1].definesAxis,dc.ordinates[0].definesAxis)) 
     185        
     186        feature_var[:]=fulldata[:] 
     187             
     188        ncfile.close() 
     189         
    134190     
    135191    def getDataForExtract(self, fileExtractID): 
     
    153209        DI.openFile(file) 
    154210        DI.setVariable(variable) 
    155          
    156          
    157211        if kwargs: 
    158212            data = DI.getSubsetOfDataForVar(**kwargs) 
     
    221275                            #print fulldata 
    222276                            print 'length' + str(len(fulldata)) 
    223                 print 'FILES:' +str(filelog) 
     277                print 'FILES:' +str(filelog)                 
     278                self.writeNetCDF(var, timeSubset,fulldata,**kwargs) 
    224279        return fulldata 
    225280     
     
    252307        #OrientedPosition 
    253308        #TimeInstant 
     309        self.domainReference=domainref 
    254310        return domainref 
    255311     
     
    265321        #DirectPositionList 
    266322        #Grid 
     323         
    267324        if isinstance(dc, Grid): 
    268          
    269325            for ordinate in dc.ordinates: 
    270326                domaincomp[ordinate.definesAxis]=self.getDataForExtract(ordinate.axisValues.id) 
     
    274330#                 newaxis.append(data) 
    275331#                 domaincomp.append(newaxis) 
     332        self.domainComplement=domaincomp 
    276333        return domaincomp 
    277334     
  • TI02-CSML/trunk/parser/ioDemo.py

    r925 r929  
    4848spatialSubsetDictionary= {} 
    4949spatialSubsetDictionary['latitude']=(0.,10.0) 
    50 spatialSubsetDictionary['longitude']=(90, 100.0) 
     50spatialSubsetDictionary['longitude']=(90, 120.0) 
    5151 
    5252featureValues=csml.getDataForFeature('solar_3', timeSelection, **spatialSubsetDictionary) 
    5353 
    54 print featureValues 
     54#print featureValues 
    5555sys.exit() 
    5656#print type(featureValues) 
Note: See TracChangeset for help on using the changeset viewer.