Пример #1
0
    def regridFunc(self, regridTool, regridMethod):
        """
        Run the regrid method from selected variables and store on the 
        command line
        @param regridTool ESMF, LibCF, Regrid2
        @param regridMethod Conserve, Linear, Patch
        """
        import systemCommands
        import __main__
        from gui.application import get_vistrails_application
        from api import get_current_project_controller
        _app = get_vistrails_application()

        QText = QtGui.QTextEdit()
        QLine = QtGui.QLineEdit()
        prj_controller = get_current_project_controller()

        useVars=self.root.dockVariable.widget().getSelectedDefinedVariables()
        sV = self.root.dockVariable.widget().varList.selectedItems()

        if len(useVars) > 2:
            print "\nOnly two variables can be selected to regrid"
            return

        argsStr = "regridTool = %s, regridMethod = %s" % (regridTool, regridMethod)
        # Get the variables
        vSrc = sV[0]
        vDst = sV[1]
        vSrcName = vSrc.varName
        vDstName = vDst.varName
        useSrc = useVars.pop(0)
        useDst = useVars.pop(0)
        varname = "regrid_%s_%s" % (vSrcName, vDstName)
#        varname = "regridVar"
        rhsCommand = "%s.regrid(%s.getGrid(), %s)" % \
                          (vSrcName, vDstName, argsStr)
        pycommand = "%s = %s" % (varname, rhsCommand)
        QLine.setText(QtCore.QString(pycommand.strip()))
        QText.setTextColor(QtGui.QColor(0,0,0))
        commandLine = ">>> " + pycommand + "\n"
        QText.insertPlainText(commandLine)
        systemCommands.commandHistory.append(pycommand)
        systemCommands.command_num = 0

        exec( "import MV2,genutil,cdms2,vcs,cdutil,numpy", __main__.__dict__ )
        regridVar = eval(rhsCommand, __main__.__dict__)
        res = self.root.stick_main_dict_into_defvar(None)
        regridVar.id = varname

        _app.uvcdatWindow.dockVariable.widget().addVariable(regridVar)

        self.root.record("## Regrid command sent from PCMDITools->Regridding->%s>%s" % \
                                (regridTool, regridMethod))
        self.root.record(pycommand)
        prj_controller.process_typed_calculator_command(varname, rhsCommand)
        prj_controller.calculator_command(sV, "REGRID", varname, rhsCommand.strip())
        QLine.setFocus()
Пример #2
0
def getDatabase():
    import api
    global moduleStoreDatabase
    page_id = 0
    try:
        prj_controller = api.get_current_project_controller()
        page_id = prj_controller.name
    except:
        pass
    return moduleStoreDatabase.setdefault(page_id, {})
Пример #3
0
def getCdmsDatabase():
    import api
    global cdmsStoreDatabase
    page_id = 0
    prj_controller = api.get_current_project_controller()
    try:
        page_id = prj_controller.name
    except:
        pass
    return cdmsStoreDatabase.setdefault(page_id, {})
Пример #4
0
def getCdmsDatabase():
    import api

    global cdmsStoreDatabase
    page_id = 0
    prj_controller = api.get_current_project_controller()
    try:
        page_id = prj_controller.name
    except:
        pass
    return cdmsStoreDatabase.setdefault(page_id, {})
Пример #5
0
def getDatabase():
    import api

    global moduleStoreDatabase
    page_id = 0
    try:
        prj_controller = api.get_current_project_controller()
        page_id = prj_controller.name
    except:
        pass
    return moduleStoreDatabase.setdefault(page_id, {})
Пример #6
0
 def executeCurrentWorkflow( self, moduleId ):
     import api
     if self.isServer: 
        ( vistrailName, versionName, dimensions ) = self.cells[ moduleId ] 
        print "  *** ExecuteWorkflow--> cell: %s" % str( moduleId )
        sheetTabWidget = getSheetTabWidget()
        sheetName = sheetTabWidget.getSheetName()          
        proj_controller = api.get_current_project_controller()
        ( col, row ) = ( dimensions[0], dimensions[1] )
        cell = proj_controller.sheet_map[ sheetName ][ ( row, col ) ]
        pipeline = proj_controller.vt_controller.vistrail.getPipeline( cell.current_parent_version ) 
        self.server.executePipeline( pipeline, self.deviceName, vistrailName, versionName, moduleId, dimensions )
Пример #7
0
 def seasons(self,action):
     menu = str(action.parentWidget().title())
     nm = str(action.text())
     rec = "## Computing "
     ## First which season ?
     if nm == "Annual Means":
         func = cdutil.times.YEAR
         funcnm = 'cdutil.times.YEAR'
     elif nm == "Seasonal Means":
         func = cdutil.times.SEASONALCYCLE
         funcnm = 'cdutil.times.SEASONALCYCLE'
     elif nm == "Monthly Means":
         func = cdutil.times.ANNUALCYCLE
         funcnm = 'cdutil.times.ANNUALCYCLE'
     else:
         func = getattr(cdutil.times,nm)
         funcnm = "cdutil.times.%s" % nm
     vtdesc = nm
     ## Now which operator?
     if menu == "Climatology":
         func = func.climatology
         funcnm+=".climatology"
         rec = "climatological "
         vtdesc = "climatological " + nm.lower()
     elif menu == "Departures":
         func=func.departures
         funcnm+=".departures"
         rec = "departures from "
         vtdesc = "departures from " + nm.lower()
     rec += nm.lower()
     selectedVars=self.root.dockVariable.widget().getSelectedDefinedVariables()
     for v in selectedVars:
         #tmp = func(v)
         ext = "".join(nm.lower().split())
         newid = "%s_%s" % (v.id,ext)
         if menu != "Extract":
             newid+=menu.lower()
         #tmp.id = newid
         #self.root.dockVariable.widget().addVariable(tmp)
         self.root.record(rec)
         self.root.record("%s = %s(%s)" % (newid,funcnm,v.id))
         
         #send command to project controller to be stored as provenance
         from api import get_current_project_controller
         prj_controller = get_current_project_controller()
         vtfuncnm = "%s(%s)"%(funcnm,v.id)
         prj_controller.calculator_command([v.id], vtdesc, vtfuncnm, newid)            
         tmp = prj_controller.create_exec_new_variable_pipeline(newid)
         if tmp is not None:
             tmp.id = newid
             self.root.dockVariable.widget().addVariable(tmp)
Пример #8
0
 def extractRegions(self,action):
     nm = str(action.text())
     
     import gui
     rec = "## Computing"
     if nm == "Transcom Regions":
         func = gui.uvcdat.regionExtractor.REGIONS_1
         funcnm = 'gui.uvcdat.regionExtractor.REGIONS_1'
     elif nm == "Koeppen-Geiger":
         func = gui.uvcdat.regionExtractor.REGIONS_2;
         funcnm = 'gui.uvcdat.regionExtractor.REGIONS_2'
     elif nm == "Dominant \"pure\" PFT":
         func = gui.uvcdat.regionExtractor.REGIONS_3
         funcnm = 'gui.uvcdat.regionExtractor.REGIONS_3'
     elif nm == "Vegetated Mask":
         func = gui.uvcdat.regionExtractor.REGIONS_4
         funcnm = 'gui.uvcdat.regionExtractor.REGIONS_4'
     self.bDialog = QtGui.QInputDialog()
     
     regions = func.getRegions();
     region,ok = self.bDialog.getItem(self, nm, 'Choose Region: ', regions, editable=False);
     if ok is False:
         return
     region = str(region)
     vtdesc = nm
     rec += nm.lower()
     selectedVars=self.root.dockVariable.widget().getSelectedDefinedVariables()
     for v in selectedVars:
         #create new variable
         #tmp = func(v, region)
         ext = "".join(region.lower().split())
         newid = "%s_%s" % (v.id,ext)
         #tmp.id = newid
         
         #save new variable
         #self.root.dockVariable.widget().addVariable(tmp)
         self.root.record(rec)
         self.root.record("%s = %s(%s, '%s')" % (newid, funcnm, v.id, str(regions)))
         
         #send command to project controller to be stored as provenance
         from api import get_current_project_controller
         prj_controller = get_current_project_controller()
         vtfuncnm = "%s(%s, '%s')"%(funcnm,v.id, region)
         prj_controller.calculator_command([v.id], vtdesc, vtfuncnm, newid)
         
         tmp = prj_controller.create_exec_new_variable_pipeline(newid)
         if tmp is not None:
             tmp.id = newid
             self.root.dockVariable.widget().addVariable(tmp)
Пример #9
0
 def executeCurrentWorkflow(self, moduleId):
     import api
     if self.isServer:
         (vistrailName, versionName, dimensions) = self.cells[moduleId]
         print "  *** ExecuteWorkflow--> cell: %s" % str(moduleId)
         sheetTabWidget = getSheetTabWidget()
         sheetName = sheetTabWidget.getSheetName()
         proj_controller = api.get_current_project_controller()
         (col, row) = (dimensions[0], dimensions[1])
         cell = proj_controller.sheet_map[sheetName][(row, col)]
         pipeline = proj_controller.vt_controller.vistrail.getPipeline(
             cell.current_parent_version)
         self.server.executePipeline(pipeline, self.deviceName,
                                     vistrailName, versionName, moduleId,
                                     dimensions)
Пример #10
0
 def setBounds(self,action):
     nm = str(action.text())
     if nm == "Set Bounds For X-Daily Data":
         self.bDialog = QtGui.QInputDialog()
         ## self.bDialog.setInputMode(QtGui.QInputDialog.DoubleInput)
         val,ok = self.bDialog.getDouble(self,"Reset Time Bounds to X-Hourly", "Frequency (# of samples per day)")
         if ok is False or val <= 0.:
             return
     selectedVars=self.root.dockVariable.widget().getSelectedDefinedVariables()
     for v in selectedVars:
         vtnm = nm
         if nm == "Set Bounds For Yearly Data":
             #cdutil.times.setTimeBoundsYearly(v)
             self.root.record("## Set Bounds For Yearly Data")
             self.root.record("cdutil.times.setTimeBoundsYearly(%s)" % v.id)
         elif nm == "Set Bounds For Monthly Data":
             #cdutil.times.setTimeBoundsMonthly(v)
             self.root.record("## Set Bounds For Monthly Data")
             self.root.record("cdutil.times.setTimeBoundsMonthly(%s)" % v.id)
         elif nm == "Set Bounds For Daily Data":
             #cdutil.times.setTimeBoundsDaily(v)
             self.root.record("## Set Bounds For Daily Data")
             self.root.record("cdutil.times.setTimeBoundsDaily(%s)" % v.id)
         elif nm == "Set Bounds For Twice-daily Data":
             #cdutil.times.setTimeBoundsDaily(v,2)
             self.root.record("## Set Bounds For Twice-daily Data")
             self.root.record("cdutil.times.setTimeBoundsDaily(%s,2)" % v.id)
         elif nm == "Set Bounds For 6-Hourly Data":
             #cdutil.times.setTimeBoundsDaily(v,4)
             self.root.record("## Set Bounds For 6-Hourly Data")
             self.root.record("cdutil.times.setTimeBoundsDaily(%s,4)" % v.id)
         elif nm == "Set Bounds For Hourly Data":
             #cdutil.times.setTimeBoundsDaily(v,24)
             self.root.record("## Set Bounds For Hourly Data")
             self.root.record("cdutil.times.setTimeBoundsDaily(%s,24)" % v.id)
         elif nm == "Set Bounds For X-Daily Data":
             #cdutil.times.setTimeBoundsDaily(v,val)
             self.root.record("## Set Bounds For X-Daily Data")
             self.root.record("cdutil.times.setTimeBoundsDaily(%s,%g)" % (v.id,val))
             vtnm = "%s:%g"%(nm,val)
         #send command to project controller to be stored as provenance
         prj_controller = get_current_project_controller()
         prj_controller.change_defined_variable_time_bounds(v.id, vtnm)
Пример #11
0
    def ok(self):

        ## First construct the args list
        ## starting with the sleected vars
        args = self.root.dockVariable.widget().getSelectedDefinedVariables()
        vtvars = []
        for arg in args:
            vtvars.append(arg.id)
        kargs = {}
        ## now do we have an axis option
        if self.defs.get("axes", True):
            ## single axis or multi?
            if self.defs.get("multiAxes", True):
                nms = ""
                for c in self.selAxes:
                    if c.isChecked():
                        nms += "(%s)" % str(c.text())
            else:
                nms = "(%s)" % str(self.selAxes.currentText())
            if nms == "":
                self.parent.errorMsg.showMessage(
                    "%s requires at least one axis to be checked" %
                    (self.defs["func"].__name__))
                return
            kargs["axis"] = nms

        ## Now the Options
        for c in self.choices:
            if isinstance(c, uvcdatCommons.QRadioButtonFrame):
                val = eval(str(c.buttonGroup.checkedButton().text()))
                nm = str(c.label.text())
            elif isinstance(c, QtGui.QComboBox):
                val = eval(str(c.itemText(c.currentIndex())))
                nm = str(c.label.text())
            elif isinstance(c, QtGui.QCheckBox):
                nm = str(c.text())
                if c.isChecked():
                    val = 1
                else:
                    val = 0
            kargs[nm] = val

        ## Entries section
        for e in self.entries:
            if isinstance(e, QFileOpener):
                nm = str(e.label.text())
                val = str(e.fileEntry.text())
            else:
                nm = str(e.label.text())
                try:
                    val = eval(str(e.text()))
                except:
                    val = str(e.text())
            kargs[nm] = val

        fnm = str(self.windowTitle())
        c = self.cursor()
        self.setCursor(QtCore.Qt.BusyCursor)
        #        try:
        #            tmp  = self.defs["func"](*args,**kargs)
        #        except Exception, err:
        #            self.parent.errorMsg.showMessage("The following exception was raised while runnning %s:\n%s" % (self.defs["func"].__name__,str(err)))
        #            self.setCursor(c)
        #            self.accept()
        #            return

        #        resobjs = []
        #        if isinstance(tmp,cdms2.tvariable.TransientVariable):
        #            tmp.id="%s_%s" % (tmp.id,fnm.replace(".","_"))
        #            self.root.dockVariable.widget().addVariable(tmp)
        #            res = ", %s" % tmp.id
        #            resobjs.append(tmp)
        #        else:
        #            res = self.processList(tmp,"%s_%s" % (args[0].id,fnm.replace(".","_")),"",resobjs)
        varname = "%s_%s" % (args[0].id, fnm.replace(".", "_"))
        self.root.record("## %s" % fnm)
        cargs = args[0].id
        for a in args[1:]:
            cargs += ", %s" % a.id
        ckargs = ""
        for k in kargs.keys():
            ckargs += ", %s=%s" % (k, repr(kargs[k]))
        cmd = "%s = %s(%s%s)" % (varname, fnm, cargs, ckargs)

        self.root.record(cmd)
        #vistrails
        #        newvars = []
        #        for o in resobjs:
        #            if isinstance(o,cdms2.tvariable.TransientVariable):
        #                newvars.append(o.id)

        vtcmd = "%s(%s%s)" % (fnm, cargs, ckargs)

        #        if len(newvars) > 1:
        #            debug.warning("Function: '%s' returns more than one variable and is not supported yet." %fnm)
        #        else:

        #send command to project controller to be stored as provenance
        from api import get_current_project_controller
        prj_controller = get_current_project_controller()
        prj_controller.calculator_command(vtvars, fnm, vtcmd, varname)

        tmp = prj_controller.create_exec_new_variable_pipeline(varname)
        if tmp is not None:
            tmp.id = varname
            self.root.dockVariable.widget().addVariable(tmp)

        self.setCursor(c)

        self.accept()
Пример #12
0
    def issueCmd(self, button):
        st = ""
        nm = ""
        vars = []
        txt = str(button.text())
        pressEnter = False
        selected = self.root.dockVariable.widget().varList.selectedItems()
        # Funcs that can take many many many variables
        if txt in ["*", "+", "/", "-"]:
            if len(selected) == 0:
                st = txt
            elif len(selected) == 1:
                if len(str(self.le.text())) == 0:
                    st = selected[0].varName + txt
                else:
                    st = txt + selected[0].varName
            else:
                if txt == "+":
                    nm = "add_"
                elif txt == "-":
                    nm = "sub_"
                elif txt == "/":
                    nm = "div_"
                elif txt == "*":
                    nm = "mul_"
                st = selected[0].varName
                nm += selected[0].varName
                for s in selected[1:]:
                    st += txt + s.varName
                    nm += "_%s" % s.varName
                nm += " = "
                #self.root.dockVariable.widget().unselectItems(selected)
                #vistrails
                for s in selected:
                    vars.append(s.varName)
                if str(self.le.text()) == "":
                    pressEnter = True
        # 2 variable commands
        elif txt in ["x<y", "x>y", "x<>y", "x==y"]:
            if len(selected) != 2:
                st = txt[1:-1]
            else:
                vars = [selected[0].varName, selected[1].varName]
                st = selected[0].varName + txt[1:-1] + selected[1].varName
                if txt[1:-1] == "<":
                    nm = "less_"
                if txt[1:-1] == ">":
                    nm = "greater_"
                if txt[1:-1] == "<>":
                    nm = "notequal_"
                if txt[1:-1] == "==":
                    nm = "equal_"
                nm += selected[0].varName + "_" + selected[1].varName + " = "
                #self.root.dockVariable.widget().unselectItems(selected)
                if str(self.le.text()) == "":
                    pressEnter = True
        elif txt == "x^y":
            if len(selected) != 2:
                st = "MV2.power("
            else:
                vars = [selected[0].varName, selected[1].varName]
                st = "MV2.power(%s,%s)" % (selected[0].varName,
                                           selected[1].varName)
                #self.root.dockVariable.widget().unselectItems(selected)
                nm = "power_" + selected[0].varName + "_" + selected[
                    1].varName + " = "
                if str(self.le.text()) == "":
                    pressEnter = True
        elif txt == "REGRID":
            if len(selected) == 0:
                st = ".regrid("
            if len(selected) == 1:
                vars = [selected[0].varName]
                st = "StandardGrid.regrid(%s)" % (selected[0].varName)
                self.root.dockVariable.widget().unselectItems(selected)
                nm = "regrid_" + selected[0].varName + " = "
                if str(self.le.text()) == "":
                    pressEnter = True
            else:
                vars = [selected[0].varName, selected[1].varName]
                st = "%s.regrid(%s.getGrid())" % (selected[0].varName,
                                                  selected[1].varName)
                #self.root.dockVariable.widget().unselectItems(selected)
                nm = "regrid_" + selected[0].varName + "_" + selected[
                    1].varName + " = "
                if str(self.le.text()) == "":
                    pressEnter = True
        elif txt == "MASK":
            if len(selected) != 2:
                st = "MV2.masked_where("
            else:
                vars = [selected[0].varName, selected[1].varName]
                st = "MV2.masked_where(%s,%s)" % (selected[0].varName,
                                                  selected[1].varName)
                #self.root.dockVariable.widget().unselectItems(selected)
                nm = "maskedwhere_" + selected[0].varName + "_" + selected[
                    1].varName + " = "
                if str(self.le.text()) == "":
                    pressEnter = True
        elif txt == "GET_MASK":
            if len(selected) == 1:
                vars = [selected[0].varName]
                st = "MV2.getmask(%s)" % (selected[0].varName)
                nm = selected[0].varName + "_mask = "
                if str(self.le.text()) == "":
                    pressEnter = True
            else:
                st = "MV2.getmask("
        elif txt == "GROWER":
            if len(selected) != 2:
                st = "genutil.grower("
            else:
                vars = [selected[0].varName, selected[1].varName]
                st = "genutil.grower(%s,%s)" % (selected[0].varName,
                                                selected[1].varName)
                #self.root.dockVariable.widget().unselectItems(selected)
                nm = "%s_grown_to_%s, %s_grown_to_%s = " % (vars[0], vars[1],
                                                            vars[1], vars[0])

                if str(self.le.text()) == "":
                    pressEnter = True
        # ! variable only
        elif txt == "x^2":
            if len(selected) == 1:
                vars = [selected[0].varName]
                st = "%s**2" % selected[0].varName
                #self.root.dockVariable.widget().unselectItems(selected)
                nm = "square_" + selected[0].varName + " = "
                if str(self.le.text()) == "":
                    pressEnter = True
            else:
                st = "**2"
        elif txt == "sqRT":
            if len(selected) == 1:
                vars = [selected[0].varName]
                st = "MV2.sqrt(%s)" % selected[0].varName
                #self.root.dockVariable.widget().unselectItems(selected)
                nm = "sqrt_" + selected[0].varName + " = "
                if str(self.le.text()) == "":
                    pressEnter = True
            else:
                st = "MV2.sqrt("
        elif txt == "1/x":
            if len(selected) == 1:
                vars = [selected[0].varName]
                st = "1/%s" % selected[0].varName
                #self.root.dockVariable.widget().unselectItems(selected)
                nm = "invert_" + selected[0].varName + " = "
                if str(self.le.text()) == "":
                    pressEnter = True
            else:
                st = "1/"
        elif txt == "LN":
            if len(selected) == 1:
                vars = [selected[0].varName]
                st = "MV2.log(%s)" % selected[0].varName
                #self.root.dockVariable.widget().unselectItems(selected)
                nm = "ln_" + selected[0].varName + " = "
                if str(self.le.text()) == "":
                    pressEnter = True
            else:
                st = "MV2.log("
        elif txt == "LOG":
            if len(selected) == 1:
                vars = [selected[0].varName]
                st = "MV2.log10(%s)" % selected[0].varName
                #self.root.dockVariable.widget().unselectItems(selected)
                nm = "log10_" + selected[0].varName + " = "
                if str(self.le.text()) == "":
                    pressEnter = True
            else:
                st = "MV2.log10("
        elif txt == "e^x":
            if len(selected) == 1:
                vars = [selected[0].varName]
                st = "MV2.exp(%s)" % selected[0].varName
                #self.root.dockVariable.widget().unselectItems(selected)
                nm = "exp_" + selected[0].varName + " = "
                if str(self.le.text()) == "":
                    pressEnter = True
            else:
                st = "MV2.exp("
        elif txt == "10^x":
            if len(selected) == 1:
                vars = [selected[0].varName]
                st = "MV2.power(10,%s)" % selected[0].varName
                #self.root.dockVariable.widget().unselectItems(selected)
                nm = "power10_" + selected[0].varName + " = "
                if str(self.le.text()) == "":
                    pressEnter = True
            else:
                st = "MV2.power(10,"
        elif txt == "ABS":
            if len(selected) == 1:
                vars = [selected[0].varName]
                st = "MV2.absolute(%s)" % selected[0].varName
                #self.root.dockVariable.widget().unselectItems(selected)
                nm = "abs_" + selected[0].varName + " = "
                if str(self.le.text()) == "":
                    pressEnter = True
            else:
                st = "MV2.absolute(,"
        elif txt in ["SIN", "ARCSIN", "COS", "ARCCOS", "TAN", "ARCTAN"]:
            if len(selected) == 1:
                vars = [selected[0].varName]
                st = "MV2.%s(%s)" % (txt.lower(), selected[0].varName)
                #self.root.dockVariable.widget().unselectItems(selected)
                nm = txt.lower() + "_" + selected[0].varName + " = "
                if str(self.le.text()) == "":
                    pressEnter = True
            else:
                st = "MV2.%s(," % (txt.lower())
        elif txt == "STD":
            if len(selected) == 1:
                vars = [selected[0].varName]
                st = "genutil.statistics.std(%s)" % (txt.lower(),
                                                     selected[0].varName)
                #self.root.dockVariable.widget().unselectItems(selected)
                nm = "std_" + selected[0].varName + " = "
                if str(self.le.text()) == "":
                    pressEnter = True
            else:
                st = "genutil.statistics.std(," % (txt.lower())
        elif txt == "Clear":
            self.le.clear()
        elif txt == "Del":
            st = str(self.le.text())[:-1]
            self.le.clear()
        elif txt == "Enter":
            pressEnter = True
        elif txt == "Plot":
            if len(str(self.le.text())) != 0:
                res = self.run_command()
                self.root.dockVariable.widget().unselectItems(selected)
                self.root.dockVariable.widget().selectVariableFromName(res)
                self.root.tabView.widget(1).plot()
            elif len(selected) != 0:
                self.root.tabView.widget(1).plot()
        elif txt == "=":
            if len(selected) == 1:
                st = "%s =" % selected[0].varName
                #self.root.dockVariable.widget().unselectItems(selected)
            else:
                st = "="
        elif txt == "PI":
            st = "numpy.pi"
        elif txt == "e":
            st = "numpy.e"
        elif txt == "+/-":
            st = str(self.le.text())
            if st[:2] == "-(" and st[-1] == ")" and st.count("(") == st.count(
                    ")"):
                st = st[2:-1]
            else:
                if len(st) == 0 and len(selected) == 1:
                    st = "-%s" % selected[0].varName
                    #self.root.dockVariable.widget().unselectItems(selected)
                else:
                    st = "-(%s)" % st
            self.le.clear()
        else:
            st = txt

        #make sure name is unique
        newname = nm[:-3].strip()
        items = self.root.dockVariable.widget().getItems(project=False)
        varNameSet = set([str(it.text()).split()[1] for it in items])
        suffix = ""
        if newname in varNameSet:
            suffix = 1
            while (newname + str(suffix)) in varNameSet:
                suffix += 1
            newname = newname + str(suffix)
            nm = newname + nm[-3:]

        if st != "":
            if pressEnter:
                orst = st
                st = "%s%s" % (nm, st)
            self.le.setText(str(self.le.text()) + st)
        if pressEnter:
            self.run_command(processed=True)
            #send command to project controller to be stored as provenance
            from api import get_current_project_controller
            prj_controller = get_current_project_controller()
            varname = nm[:-3].strip()
            prj_controller.calculator_command(vars, txt, orst, varname)

            varnames = varname.split(',')
            varname = varnames[0].strip()
            tmp = prj_controller.create_exec_new_variable_pipeline(varname)
            if tmp is not None:
                tmp.id = varname
                self.root.dockVariable.widget().addVariable(tmp)

            if len(varnames) == 2:
                varname2 = varnames[1].strip()
                tmp2 = prj_controller.create_exec_new_variable_pipeline(
                    varname2)
                if tmp2 is not None:
                    tmp2.id = varname2
                    self.root.dockVariable.widget().addVariable(tmp2)

        self.le.setFocus()
Пример #13
0
    def run_command(self, processed=False):
        self.dumpToWindow = True
        """ Event that processes the CDAT/Python command and displays the 
        stdout or stderr in the text editor window. """
        #-----------------------------------------------------------------------
        # isolate the command and display it in the text editor window
        #-----------------------------------------------------------------------
        command = str(self.le.text())  # read the command
        # strip leading and/or trailing whitespaces from the command
        command = command.strip()
        if command == "":
            return
        # set the text editor output window text to black
        self.te.setTextColor(QtGui.QColor(0, 0, 0))
        commandLine = ">>> " + command + "\n"
        # display the command in the text window
        self.te.insertPlainText(commandLine)

        #-----------------------------------------------------------------------
        # append the command to the list and rest the list number to 0
        #-----------------------------------------------------------------------
        if command != "": systemCommands.commandHistory.append(command)
        systemCommands.command_num = 0

        #-----------------------------------------------------------------------
        # execute the command and clear the line entry if no error occurs
        #-----------------------------------------------------------------------
        #        results = "temp_results_holder"
        #        acommand = "temp_results_holder = %s"  % command
        #        exec( "import MV2,genutil,cdms2,vcs,cdutil,numpy", __main__.__dict__ )
        #        self.le.clear()
        #        try:
        #            exec( command, __main__.__dict__ )
        #        except Exception:
        #            #print exception to the command window
        #            errorText = StringIO.StringIO()
        #            errorText.write('Your command produced an error.\n')
        #            errorText.write('-'*60+'\n')
        #            traceback.print_exc(file=errorText)
        #            errorText.write('-'*60)
        #            self.te.insertPlainText(errorText.getvalue())

        #        res = self.root.stick_main_dict_into_defvar(None)

        #-----------------------------------------------------------------------
        # record the command for reproducibility
        #-----------------------------------------------------------------------
        clist = command.split("=", 1)
        varname = clist[0].strip()

        self.root.record("## Command sent from prompt by user")

        if len(clist) > 1:
            self.root.record(command)
        else:
            self.root.record("%s = %s" % (varname, command))

        if not processed and len(clist) > 1 and isidentifier(varname):
            pycommand = clist[1].strip()
            # project controller will only capture the results that return
            # a variable
            #send command to project controller to be stored as provenance
            from api import get_current_project_controller
            prj_controller = get_current_project_controller()

            # returns if we have existing variables involved, otherwise
            # we assume it's a generic command
            if prj_controller.process_typed_calculator_command(
                    varname, pycommand):
                tmp = prj_controller.create_exec_new_variable_pipeline(varname)
                if tmp is not None:
                    tmp.id = varname
                    self.root.dockVariable.widget().addVariable(tmp)
                processed = True

        if not processed:
            # try to run things "normally"
            try:
                exec(compile(command, "<string>", "single"), __main__.__dict__)
            except Exception:
                traceback.print_exc(file=sys.stderr)

        self.le.clear()
        self.dumpToWindow = False
        return varname
Пример #14
0
    def ok(self):

        ## First construct the args list
        ## starting with the sleected vars
        args = self.root.dockVariable.widget().getSelectedDefinedVariables()
        vtvars = []
        for arg in args:
            vtvars.append(arg.id)
        kargs = {}
        ## now do we have an axis option
        if self.defs.get("axes",True):
            ## single axis or multi?
            if self.defs.get("multiAxes",True):
                nms = ""
                for c in self.selAxes:
                    if c.isChecked():
                        nms+="(%s)" % str(c.text())
            else:
                nms = "(%s)" % str(self.selAxes.currentText())
            if nms == "":
                self.parent.errorMsg.showMessage("%s requires at least one axis to be checked" % (self.defs["func"].__name__))
                return
            kargs["axis"]=nms

        ## Now the Options
        for c in self.choices:
            if isinstance(c,uvcdatCommons.QRadioButtonFrame):
                val = eval(str(c.buttonGroup.checkedButton().text()))
                nm = str(c.label.text())
            elif isinstance(c,QtGui.QComboBox):
                val = eval(str(c.itemText(c.currentIndex())))
                nm = str(c.label.text())
            elif isinstance(c,QtGui.QCheckBox):
                nm = str(c.text())
                if c.isChecked():
                    val = 1
                else:
                    val = 0
            kargs[nm]=val

        ## Entries section
        for e in self.entries:
            if isinstance(e,QFileOpener):
                nm = str(e.label.text())
                val = str(e.fileEntry.text())
            else:
                nm = str(e.label.text())
                try:
                    val = eval(str(e.text()))
                except:
                    val = str(e.text())
            kargs[nm]=val

        fnm = str(self.windowTitle())
        c = self.cursor()
        self.setCursor(QtCore.Qt.BusyCursor)
#        try:
#            tmp  = self.defs["func"](*args,**kargs)
#        except Exception, err:
#            self.parent.errorMsg.showMessage("The following exception was raised while runnning %s:\n%s" % (self.defs["func"].__name__,str(err)))
#            self.setCursor(c)
#            self.accept()
#            return

#        resobjs = []
#        if isinstance(tmp,cdms2.tvariable.TransientVariable):
#            tmp.id="%s_%s" % (tmp.id,fnm.replace(".","_"))
#            self.root.dockVariable.widget().addVariable(tmp)
#            res = ", %s" % tmp.id
#            resobjs.append(tmp)
#        else:
#            res = self.processList(tmp,"%s_%s" % (args[0].id,fnm.replace(".","_")),"",resobjs)
        varname = "%s_%s" % (args[0].id, fnm.replace(".","_"))
        self.root.record("## %s" % fnm)
        cargs=args[0].id
        for a in args[1:]:
            cargs+=", %s" % a.id
        ckargs = ""
        for k in kargs.keys():
            ckargs+=", %s=%s" % (k,repr(kargs[k]))
        cmd="%s = %s(%s%s)" % (varname,fnm,cargs,ckargs)
        
        self.root.record(cmd)
        #vistrails
#        newvars = []
#        for o in resobjs:
#            if isinstance(o,cdms2.tvariable.TransientVariable):
#                newvars.append(o.id)
        
        vtcmd = "%s(%s%s)"  % (fnm,cargs,ckargs)
        
#        if len(newvars) > 1:
#            debug.warning("Function: '%s' returns more than one variable and is not supported yet." %fnm)
#        else:

        #send command to project controller to be stored as provenance
        from api import get_current_project_controller
        prj_controller = get_current_project_controller()
        prj_controller.calculator_command(vtvars, fnm, vtcmd, varname)
        
        tmp = prj_controller.create_exec_new_variable_pipeline(varname)
        if tmp is not None:
            tmp.id = varname
            self.root.dockVariable.widget().addVariable(tmp)
            
        self.setCursor(c)

        self.accept()
Пример #15
0
    def run_command(self,processed=False):
        """ Event that processes the CDAT/Python command and displays the 
        stdout or stderr in the text editor window. """
        #-----------------------------------------------------------------------
        # isolate the command and display it in the text editor window
        #-----------------------------------------------------------------------
        command = str(self.le.text())    # read the command
        # strip leading and/or trailing whitespaces from the command
        command = command.strip()  
        if command == "":
            return
        # set the text editor output window text to black
        self.te.setTextColor( QtGui.QColor(0,0,0)) 
        commandLine =  ">>> " + command + "\n"
        # display the command in the text window
        self.te.insertPlainText( commandLine )     

        #-----------------------------------------------------------------------
        # append the command to the list and rest the list number to 0
        #-----------------------------------------------------------------------
        if command != "": systemCommands.commandHistory.append( command )
        systemCommands.command_num = 0

        #-----------------------------------------------------------------------
        # execute the command and clear the line entry if no error occurs
        #-----------------------------------------------------------------------
        results = "temp_results_holder"
        acommand = "temp_results_holder = %s"  % command
        exec( "import MV2,genutil,cdms2,vcs,cdutil,numpy", __main__.__dict__ )
        self.le.clear()
        try:
            exec( command, __main__.__dict__ )
        except Exception:
            #print exception to the command window    
            errorText = StringIO.StringIO()
            errorText.write('Your command produced an error.\n')
            errorText.write('-'*60+'\n')
            traceback.print_exc(file=errorText)
            errorText.write('-'*60)
            self.te.insertPlainText(errorText.getvalue())

        res = self.root.stick_main_dict_into_defvar(None)
        #-----------------------------------------------------------------------
        # record the command for preproducibility
        #-----------------------------------------------------------------------
        self.root.record("## Command sent from prompt by user")
        if res == command.split("=")[0] or res is None:
            self.root.record(command)
        else:
            self.root.record("%s = %s" % (res,command))
        clist = command.split("=", 1)
        if not processed and len(clist) > 1 and isidentifier(clist[0]):
            varname = clist[0].strip()
            pycommand = clist[1].strip()
            # project controller will only capture the results that return 
            # a variable
            #send command to project controller to be stored as provenance
            from api import get_current_project_controller
            prj_controller = get_current_project_controller()
            prj_controller.process_typed_calculator_command(varname,pycommand)
        return res
Пример #16
0
    def issueCmd(self,button):
        st=""
        nm=""
        vars = []
        txt = str(button.text())
        pressEnter=False
        selected = self.root.dockVariable.widget().varList.selectedItems()
        # Funcs that can take many many many variables
        if txt  in ["*","+","/","-"]:
            if len(selected)==0:
                st=txt
            elif len(selected)==1:
                if len(str(self.le.text()))==0:
                    st = selected[0].varName+txt
                else:
                    st = txt+selected[0].varName
            else:
                if txt == "+":
                    nm="add_"
                elif txt == "-":
                    nm="sub_"
                elif txt == "/":
                    nm="div_"
                elif txt == "*":
                    nm="mul_"
                st = selected[0].varName
                nm+=selected[0].varName
                for s in selected[1:]:
                    st+=txt+s.varName
                    nm+="_%s" % s.varName
                nm+=" = "
                self.root.dockVariable.widget().unselectItems(selected)
                #vistrails
                for s in selected:
                    vars.append(s.varName)
                if str(self.le.text())=="" :
                    pressEnter=True
        # 2 variable commands
        elif txt in ["x<y","x>y","x<>y","x==y"]:
            if len(selected)!=2:
                st=txt[1:-1]
            else:
                vars = [selected[0].varName,selected[1].varName]
                st=selected[0].varName+txt[1:-1]+selected[1].varName
                if txt[1:-1]=="<":
                    nm="less_"
                if txt[1:-1]==">":
                    nm="greater_"
                if txt[1:-1]=="<>":
                    nm="notequal_"
                if txt[1:-1]=="==":
                    nm="equal_"
                nm+=selected[0].varName+"_"+selected[1].varName+" = "
                self.root.dockVariable.widget().unselectItems(selected)
                if str(self.le.text())=="" :
                    pressEnter=True
        elif txt == "x^y":
            if len(selected)!=2:
                st="MV2.power("
            else:
                vars = [selected[0].varName,selected[1].varName]
                st="MV2.power(%s,%s)" % (selected[0].varName,selected[1].varName)
                self.root.dockVariable.widget().unselectItems(selected)
                nm="power_"+selected[0].varName+"_"+selected[1].varName+" = "
                if str(self.le.text())=="" :
                    pressEnter=True
        elif txt == "REGRID":
            if len(selected)!=2:
                st=".regrid("
            else:
                vars = [selected[0].varName,selected[1].varName]
                st="%s.regrid(%s.getGrid())" % (
                                     selected[0].varName,selected[1].varName)
                self.root.dockVariable.widget().unselectItems(selected)
                nm="regrid_"+selected[0].varName+"_"+selected[1].varName+" = "
                if str(self.le.text())=="" :
                    pressEnter=True
        elif txt == "MASK":
            if len(selected)!=2:
                st="MV2.masked_where("
            else:
                vars = [selected[0].varName,selected[1].varName]
                st="MV2.masked_where(%s,%s)" % (
                                    selected[0].varName,selected[1].varName)
                self.root.dockVariable.widget().unselectItems(selected)
                nm="maskedwhere_"+selected[0].varName+"_"+selected[1].varName+" = "
                if str(self.le.text())=="" :
                    pressEnter=True
        elif txt == "GET_MASK":
            if len(selected)==1:
                vars = [selected[0].varName]
                st="MV2.getmask(%s)" % (selected[0].varName)
                nm=selected[0].varName+"_mask = "
                if str(self.le.text())=="" :
                    pressEnter=True
            else:
                st="MV2.getmask("
        elif txt == "GROWER":
            if len(selected)!=2:
                st="genutil.grower("
            else:
                vars = [selected[0].varName,selected[1].varName]
                st="genutil.grower(%s,%s)" % (
                                     selected[0].varName,selected[1].varName)
                self.root.dockVariable.widget().unselectItems(selected)
                nm=selected[0].varName+", "+selected[1].varName+" = "
                if str(self.le.text())=="" :
                    pressEnter=True
        # ! variable only
        elif txt == "x^2":
            if len(selected)==1:
                vars = [selected[0].varName]
                st="%s**2" % selected[0].varName
                self.root.dockVariable.widget().unselectItems(selected)
                nm="square_"+selected[0].varName+" = "
                if str(self.le.text())=="" :
                    pressEnter=True
            else:
                st="**2"
        elif txt == "sqRT":
            if len(selected)==1:
                vars = [selected[0].varName]
                st="MV2.sqrt(%s)" % selected[0].varName
                self.root.dockVariable.widget().unselectItems(selected)
                nm="sqrt_"+selected[0].varName+" = "
                if str(self.le.text())=="" :
                    pressEnter=True
            else:
                st="MV2.sqrt("
        elif txt == "1/x":
            if len(selected)==1:
                vars = [selected[0].varName]
                st="1/%s" % selected[0].varName
                self.root.dockVariable.widget().unselectItems(selected)
                nm="invert_"+selected[0].varName+" = "
                if str(self.le.text())=="" :
                    pressEnter=True
            else:
                st="1/"
        elif txt == "LN":
            if len(selected)==1:
                vars = [selected[0].varName]
                st="MV2.log(%s)" % selected[0].varName
                self.root.dockVariable.widget().unselectItems(selected)
                nm="ln_"+selected[0].varName+" = "
                if str(self.le.text())=="" :
                    pressEnter=True
            else:
                st="MV2.log("
        elif txt == "LOG":
            if len(selected)==1:
                vars = [selected[0].varName]
                st="MV2.log10(%s)" % selected[0].varName
                self.root.dockVariable.widget().unselectItems(selected)
                nm="log10_"+selected[0].varName+" = "
                if str(self.le.text())=="" :
                    pressEnter=True
            else:
                st="MV2.log10("
        elif txt == "e^x":
            if len(selected)==1:
                vars = [selected[0].varName]
                st="MV2.exp(%s)" % selected[0].varName
                self.root.dockVariable.widget().unselectItems(selected)
                nm="exp_"+selected[0].varName+" = "
                if str(self.le.text())=="" :
                    pressEnter=True
            else:
                st="MV2.exp("
        elif txt == "10^x":
            if len(selected)==1:
                vars = [selected[0].varName]
                st="MV2.power(10,%s)" % selected[0].varName
                self.root.dockVariable.widget().unselectItems(selected)
                nm="power10_"+selected[0].varName+" = "
                if str(self.le.text())=="" :
                    pressEnter=True
            else:
                st="MV2.power(10,"
        elif txt == "ABS":
            if len(selected)==1:
                vars = [selected[0].varName]
                st="MV2.absolute(%s)" % selected[0].varName
                self.root.dockVariable.widget().unselectItems(selected)
                nm="abs_"+selected[0].varName+" = "
                if str(self.le.text())=="" :
                    pressEnter=True
            else:
                st="MV2.absolute(,"
        elif txt in ["SIN","ARCSIN","COS","ARCOS","TAN","ARCTAN"]:
            if len(selected)==1:
                vars = [selected[0].varName]
                st="MV2.%s(%s)" % (txt.lower(),selected[0].varName)
                self.root.dockVariable.widget().unselectItems(selected)
                nm=txt.lower()+"_"+selected[0].varName+" = "
                if str(self.le.text())=="" :
                    pressEnter=True
            else:
                st="MV2.%s(," % (txt.lower())
        elif txt == "STD":
            if len(selected)==1:
                vars = [selected[0].varName]
                st="genutil.statistics.std(%s)" % (
                                             txt.lower(),selected[0].varName)
                self.root.dockVariable.widget().unselectItems(selected)
                nm="std_"+selected[0].varName+" = "
                if str(self.le.text())=="" :
                    pressEnter=True
            else:
                st="genutil.statistics.std(," % (txt.lower())
        elif txt == "Clear":
            self.le.clear()
        elif txt == "Del":
            st = str(self.le.text())[:-1]
            self.le.clear()
        elif txt == "Enter":
            pressEnter = True
        elif txt == "Plot":
            if len(str(self.le.text()))!=0:
                res = self.run_command()
                self.root.dockVariable.widget().unselectItems(selected)
                self.root.dockVariable.widget().selectVariableFromName(res)
                self.root.tabView.widget(1).plot()
            elif len(selected)!=0:
                self.root.tabView.widget(1).plot()
        elif txt == "=":
            if len(selected)==1:
                st = "%s =" % selected[0].varName
                self.root.dockVariable.widget().unselectItems(selected)
            else:
                st="="
        elif txt == "PI":
            st="numpy.pi"
        elif txt=="e":
            st="numpy.e"
        elif txt == "+/-":
            st = str(self.le.text())
            if st[:2]=="-(" and st[-1]==")" and st.count("(")==st.count(")"):
                st=st[2:-1]
            else:
                if len(st)==0 and len(selected)==1:
                    st = "-%s" % selected[0].varName
                    self.root.dockVariable.widget().unselectItems(selected)
                else:
                    st="-(%s)" % st
            self.le.clear()
        else:
            st=txt


 
        if st!="":
            if pressEnter:
                orst = st
                st="%s%s" % (nm,st)
            self.le.setText(str(self.le.text())+st)
        if pressEnter:
            self.run_command(processed=True)
            #send command to project controller to be stored as provenance
            from api import get_current_project_controller
            prj_controller = get_current_project_controller()
            prj_controller.calculator_command(vars, txt, orst, nm[:-3].strip())
        self.le.setFocus()
Пример #17
0
 def redo(self):
     get_current_project_controller().redo()
Пример #18
0
 def undo(self):
     get_current_project_controller().undo()
Пример #19
0
    def regridFunc(self, regridTool, regridMethod):
        """
        Run the regrid method from selected variables and store on the 
        command line
        @param regridTool ESMF, LibCF, Regrid2
        @param regridMethod Conserve, Linear, Patch
        """
        import systemCommands
        import __main__
        from gui.application import get_vistrails_application
        from api import get_current_project_controller
        _app = get_vistrails_application()

        QText = QtGui.QTextEdit()
        QLine = QtGui.QLineEdit()
        prj_controller = get_current_project_controller()

        useVars=self.root.dockVariable.widget().getSelectedDefinedVariables()
        sV = self.root.dockVariable.widget().varList.selectedItems()

        if len(useVars) > 2:
            print "\nOnly two variables can be selected to regrid"
            return

        argsStr = "regridTool = %s, regridMethod = %s" % (regridTool, regridMethod)
        # Get the variables
        vSrc = sV[0]
        vDst = sV[1]
        vSrcName = vSrc.varName
        vDstName = vDst.varName
        useSrc = useVars.pop(0)
        useDst = useVars.pop(0)
        varname = "regrid_%s_%s" % (vSrcName, vDstName)
#        varname = "regridVar"
        rhsCommand = "%s.regrid(%s.getGrid(), %s)" % \
                          (vSrcName, vDstName, argsStr)
        pycommand = "%s = %s" % (varname, rhsCommand)
        QLine.setText(QtCore.QString(pycommand.strip()))
        QText.setTextColor(QtGui.QColor(0,0,0))
        commandLine = ">>> " + pycommand + "\n"
        QText.insertPlainText(commandLine)
        systemCommands.commandHistory.append(pycommand)
        systemCommands.command_num = 0

        #exec( "import MV2,genutil,cdms2,vcs,cdutil,numpy", __main__.__dict__ )
        #regridVar = eval(rhsCommand, __main__.__dict__)
        #res = self.root.stick_main_dict_into_defvar(None)
        #regridVar.id = varname

        #_app.uvcdatWindow.dockVariable.widget().addVariable(regridVar)

        self.root.record("## Regrid command sent from PCMDITools->Regridding->%s>%s" % \
                                (regridTool, regridMethod))
        self.root.record(pycommand)
        prj_controller.process_typed_calculator_command(varname, rhsCommand)
        prj_controller.calculator_command(sV, "REGRID", varname, rhsCommand.strip())
        QLine.setFocus()
            
        tmp = prj_controller.create_exec_new_variable_pipeline(varname)
        if tmp is not None:
            tmp.id = varname
            _app.uvcdatWindow.dockVariable.widget().addVariable(tmp)
Пример #20
0
        
        self.root.record(cmd)
        #vistrails
        newvars = []
        for o in resobjs:
            if isinstance(o,cdms2.tvariable.TransientVariable):
                newvars.append(o.id)
        
        vtcmd = "%s(%s%s)"  % (fnm,cargs,ckargs)
        
        if len(newvars) > 1:
            debug.warning("Function: '%s' returns more than one variable and is not supported yet." %fnm)
        else:
            #send command to project controller to be stored as provenance
            from api import get_current_project_controller
            prj_controller = get_current_project_controller()
            prj_controller.calculator_command(vtvars, fnm, vtcmd, newvars[0])

        self.accept()

    def processList(self,myList,fnm,res,resobjs):
        for v in myList:
            if isinstance(v,cdms2.tvariable.TransientVariable):
                v.id="%s.%s" % (v.id,fnm)
                res+=", %s" %v.id
                self.root.dockVariable.widget().addVariable(v)
                resobjs.append(v)
            elif isinstance(v,(list,tuple)):
                res+=", (%s)" % self.processList(v,fnm,"",resobjs)[2:]
            else:
                res+=", nonvar"