コード例 #1
0
    def execute(self, **args ):
        import api
        from packages.vtDV3D.CDMS_DatasetReaders import CDMSDataset
        cdms_vars = self.getInputValues( "variable"  ) 
        if cdms_vars and len(cdms_vars):
            iVar = 1
            cdms_var = cdms_vars.pop(0)
            self.cdmsDataset = CDMSDataset()
            var, dsetId = self.addCDMSVariable( cdms_var, iVar )
            self.newDataset = ( self.datasetId <> dsetId )
            if self.newDataset: ModuleStore.archiveCdmsDataset( dsetId, self.cdmsDataset )
            self.newLayerConfiguration = self.newDataset
            self.datasetId = dsetId
            self.designateAxes(var)
            self.nTimesteps = 1
            self.timeRange = [ 0, self.nTimesteps, 0.0, 0.0 ]
            self.timeAxis = var.getTime()
            if self.timeAxis:
                self.nTimesteps = len( self.timeAxis ) if self.timeAxis else 1
                try:
                    comp_time_values = self.timeAxis.asComponentTime()
                    t0 = comp_time_values[0].torel(self.referenceTimeUnits).value
                    if (t0 < 0):
                        self.referenceTimeUnits = self.timeAxis.units
                        t0 = comp_time_values[0].torel(self.referenceTimeUnits).value
                    dt = 0.0
                    if self.nTimesteps > 1:
                        t1 = comp_time_values[-1].torel(self.referenceTimeUnits).value
                        dt = (t1-t0)/(self.nTimesteps-1)
                        self.timeRange = [ 0, self.nTimesteps, t0, dt ]
                except:
                    values = self.timeAxis.getValue()
                    t0 = values[0] if len(values) > 0 else 0
                    t1 = values[-1] if len(values) > 1 else t0
                    dt = ( values[1] - values[0] )/( len(values) - 1 ) if len(values) > 1 else 0
                    self.timeRange = [ 0, self.nTimesteps, t0, dt ]
            self.setParameter( "timeRange" , self.timeRange )
            self.cdmsDataset.timeRange = self.timeRange
            self.cdmsDataset.referenceTimeUnits = self.referenceTimeUnits
            self.timeLabels = self.cdmsDataset.getTimeValues()
            timeData = args.get( 'timeData', [ self.cdmsDataset.timeRange[2], 0, False ] )
            self.timeValue = cdtime.reltime( float(timeData[0]), self.referenceTimeUnits )
            self.timeIndex = timeData[1]
            self.useTimeIndex = timeData[2]
#            print "Set Time [mid = %d]: %s, NTS: %d, Range: %s, Index: %d (use: %s)" % ( self.moduleID, str(self.timeValue), self.nTimesteps, str(self.timeRange), self.timeIndex, str(self.useTimeIndex) )
#            print "Time Step Labels: %s" % str( self.timeLabels )
            intersectedRoi = self.cdmsDataset.gridBounds
            intersectedRoi = self.getIntersectedRoi( cdms_var, intersectedRoi )
            while( len(cdms_vars) ):
                cdms_var2 = cdms_vars.pop(0)
                if cdms_var2: 
                    iVar = iVar+1
                    self.addCDMSVariable( cdms_var2, iVar )
                    intersectedRoi = self.getIntersectedRoi( cdms_var2, intersectedRoi )
                  
            for iVarInputIndex in range( 2,5 ):
                cdms_var2 = self.getInputValue( "variable%d" % iVarInputIndex  ) 
                if cdms_var2: 
                    iVar = iVar+1
                    self.addCDMSVariable( cdms_var2, iVar )
                    intersectedRoi = self.getIntersectedRoi( cdms_var2, intersectedRoi )
                    
            self.generateOutput(roi=intersectedRoi)
#            if self.newDataset: self.addAnnotation( "datasetId", self.datasetId )
        else:
            dset = self.getInputValue( "dataset"  ) 
            if dset: 
                self.cdmsDataset = dset
#                dsetid = self.getAnnotation( "datasetId" )
#                if dsetid: self.datasetId = dsetid 
                dsetId = self.cdmsDataset.getDsetId()
#                self.newDataset = ( self.datasetId <> dsetId )
                self.newLayerConfiguration = True # self.newDataset
                self.datasetId = dsetId
                ModuleStore.archiveCdmsDataset( self.datasetId, self.cdmsDataset )
                self.timeRange = self.cdmsDataset.timeRange
                timeData = args.get( 'timeData', [ self.cdmsDataset.timeRange[2], 0, False ] )
                self.timeValue = cdtime.reltime( float(timeData[0]), self.referenceTimeUnits )
                self.timeIndex = timeData[1]
                self.useTimeIndex = timeData[2]
                self.timeLabels = self.cdmsDataset.getTimeValues()
                self.nTimesteps = self.timeRange[1]
#                print "Set Time: %s, NTS: %d, Range: %s, Index: %d (use: %s)" % ( str(self.timeValue), self.nTimesteps, str(self.timeRange), self.timeIndex, str(self.useTimeIndex) )
#                print "Time Step Labels: %s" % str( self.timeLabels ) 
                self.generateOutput()