@@ -101,6 +101,7 @@ def getCoordIndex( self, var, coord ):
101101 return axis_order .index (coord )
102102 except ValueError , err :
103103 print >> sys .stderr , "Can't find axis %s in axis order spec '%s' " % ( coord , axis_order )
104+ return None
104105
105106
106107 def getCoordDataBlock ( self , var ):
@@ -109,42 +110,74 @@ def getCoordDataBlock( self, var ):
109110 def getDataBlock ( self , var ):
110111 np_var_data_block = None
111112 iTimeIndex = self .getCoordIndex ( var , 't' )
112- if iTimeIndex <> 0 :
113- print >> sys .stderr , "Unimplemented axis order: %s " % var .getOrder ()
114- else :
115- if self .lev == None :
116- if len ( var .shape ) == 2 :
117- np_var_data_block = var [ self .iTimeStep , self .istart ::self .istep ].data
118- if self .roi_mask <> None :
119- np_var_data_block = numpy .compress ( self .roi_mask , np_var_data_block )
120- elif len ( var .shape ) == 3 :
121- np_var_data_block = var [ self .iTimeStep , :, self .istart ::self .istep ].data
122- np_var_data_block = np_var_data_block .reshape ( [ np_var_data_block .shape [0 ] * np_var_data_block .shape [1 ], ] )
123- self .nLevels = 1
113+ try :
114+ if iTimeIndex > 0 :
115+ print >> sys .stderr , "Unimplemented axis order: %s " % var .getOrder ()
116+ elif iTimeIndex is None :
117+ if self .lev == None :
118+ if len ( var .shape ) == 1 :
119+ np_var_data_block = var [ self .istart ::self .istep ].data
120+ if self .roi_mask <> None :
121+ np_var_data_block = numpy .compress ( self .roi_mask , np_var_data_block )
122+ elif len ( var .shape ) == 2 :
123+ np_var_data_block = var [ :, self .istart ::self .istep ].data
124+ np_var_data_block = np_var_data_block .reshape ( [ np_var_data_block .shape [0 ] * np_var_data_block .shape [1 ], ] )
125+ self .nLevels = 1
126+ else :
127+ iLevIndex = self .getCoordIndex ( var , 'z' )
128+ if len ( var .shape ) == 2 :
129+ if iLevIndex == 0 :
130+ np_var_data_block = var [ :, self .istart ::self .istep ].data
131+ elif iLevIndex == 1 :
132+ np_var_data_block = var [ self .istart ::self .istep , : ].data
133+ np_var_data_block = numpy .swapaxes ( np_var_data_block , 0 , 1 )
134+ else :
135+ print >> sys .stderr , "Unimplemented axis order: %s " % var .getOrder ()
136+ if not isNone ( np_var_data_block ):
137+ if not isNone ( self .roi_mask ):
138+ np_var_data_block = numpy .compress ( self .roi_mask , np_var_data_block , axis = 1 )
139+ elif len ( var .shape ) == 3 :
140+ lev_data_arrays = []
141+ for ilev in range ( var .shape [1 ] ):
142+ data_z_slice = var [ ilev ].flatten ()
143+ lev_data_arrays .append ( data_z_slice [self .istart ::self .istep ] )
144+ np_var_data_block = numpy .concatenate ( lev_data_arrays ).astype ( numpy .float32 )
124145 else :
125- iLevIndex = self .getCoordIndex ( var , 'z' )
126- if len ( var .shape ) == 3 :
127- if iLevIndex == 1 :
146+ if self .lev == None :
147+ if len ( var .shape ) == 2 :
148+ np_var_data_block = var [ self .iTimeStep , self .istart ::self .istep ].data
149+ if self .roi_mask <> None :
150+ np_var_data_block = numpy .compress ( self .roi_mask , np_var_data_block )
151+ elif len ( var .shape ) == 3 :
128152 np_var_data_block = var [ self .iTimeStep , :, self .istart ::self .istep ].data
129- elif iLevIndex == 2 :
130- np_var_data_block = var [ self .iTimeStep , self .istart ::self .istep , : ].data
131- np_var_data_block = numpy .swapaxes ( np_var_data_block , 0 , 1 )
132- else :
133- print >> sys .stderr , "Unimplemented axis order: %s " % var .getOrder ()
134- if not isNone ( np_var_data_block ):
135- if not isNone ( self .roi_mask ):
136- np_var_data_block = numpy .compress ( self .roi_mask , np_var_data_block , axis = 1 )
137- elif len ( var .shape ) == 4 :
138- lev_data_arrays = []
139- for ilev in range ( var .shape [1 ] ):
140- data_z_slice = var [ self .iTimeStep , ilev ].flatten ()
141- lev_data_arrays .append ( data_z_slice [self .istart ::self .istep ] )
142- np_var_data_block = numpy .concatenate ( lev_data_arrays ).astype ( numpy .float32 )
143- # print " GetDataBlock, var.shape = %s, grid = %s, ts = %d, newshape = %s, type = %s " % ( str(var.shape), str((self.istart,self.istep)), self.iTimeStep, str(np_var_data_block.shape), np_var_data_block.__class__.__name__ )
144-
145- if not isNone ( np_var_data_block ):
146- if self .missing_value : np_var_data_block = numpy .ma .masked_equal ( np_var_data_block , self .missing_value , False ).flatten ()
147- else : np_var_data_block = np_var_data_block .flatten ()
153+ np_var_data_block = np_var_data_block .reshape ( [ np_var_data_block .shape [0 ] * np_var_data_block .shape [1 ], ] )
154+ self .nLevels = 1
155+ else :
156+ iLevIndex = self .getCoordIndex ( var , 'z' )
157+ if len ( var .shape ) == 3 :
158+ if iLevIndex == 1 :
159+ np_var_data_block = var [ self .iTimeStep , :, self .istart ::self .istep ].data
160+ elif iLevIndex == 2 :
161+ np_var_data_block = var [ self .iTimeStep , self .istart ::self .istep , : ].data
162+ np_var_data_block = numpy .swapaxes ( np_var_data_block , 0 , 1 )
163+ else :
164+ print >> sys .stderr , "Unimplemented axis order: %s " % var .getOrder ()
165+ if not isNone ( np_var_data_block ):
166+ if not isNone ( self .roi_mask ):
167+ np_var_data_block = numpy .compress ( self .roi_mask , np_var_data_block , axis = 1 )
168+ elif len ( var .shape ) == 4 :
169+ lev_data_arrays = []
170+ for ilev in range ( var .shape [1 ] ):
171+ data_z_slice = var [ self .iTimeStep , ilev ].flatten ()
172+ lev_data_arrays .append ( data_z_slice [self .istart ::self .istep ] )
173+ np_var_data_block = numpy .concatenate ( lev_data_arrays ).astype ( numpy .float32 )
174+ except Exception , err :
175+ print " Error in GetDataBlock, var.shape = %s, grid = %s, ts = %d " % ( str (var .shape ), str ((self .istart ,self .istep )), self .iTimeStep )
176+ print str (err )
177+
178+ if not isNone ( np_var_data_block ):
179+ if self .missing_value : np_var_data_block = numpy .ma .masked_equal ( np_var_data_block , self .missing_value , False ).flatten ()
180+ else : np_var_data_block = np_var_data_block .flatten ()
148181
149182 return np_var_data_block
150183
0 commit comments