def runWizard(self): self.wizard = Wizard() self.wizard.setWindowIcon(QIcon("./images/projectnew.png")) if self.wizard.exec_(): #print "complete" self.project = self.wizard.project self.setWindowTitle("PopGen: Version-1.1 (%s)" % (self.project.name)) self.project.save() self.fileManager.project = self.project self.fileManager.populate() self.enableFunctions(True)
def runWizard(self): self.wizard = Wizard() self.wizard.setWindowIcon(QIcon("./images/projectnew.png")) if self.wizard.exec_(): # print "complete" self.project = self.wizard.project self.setWindowTitle("PopGen: Version-1.1 (%s)" % (self.project.name)) self.project.save() self.fileManager.project = self.project self.fileManager.populate() self.enableFunctions(True)
class MainWindow(QMainWindow): def __init__(self, parent=None): super(MainWindow, self).__init__(parent) import pp ppservers = () if len(sys.argv) > 1: ncpus = int(sys.argv[1]) self.job_server = pp.Server(ncpus, ppservers=ppservers, restart=True) else: self.job_server = pp.Server(ppservers=ppservers, restart=True) # print dir(self.job_server) # print 'number of workers', self.job_server.get_ncpus() # self.job_server.set_ncpus(1) # print 'number of workers', self.job_server.get_ncpus() self.dirty = False self.projectName = None self.setWindowTitle("PopGen Version-1.1") self.setWindowIcon(QIcon("./images/popsyn.png")) self.workingWindow = QLabel() self.showMaximized() self.setMinimumSize(800, 500) self.workingWindow.setAlignment(Qt.AlignCenter) bkground = QPixmap("./images/background.png") self.workingWindow.setPixmap(bkground) self.workingWindow.setScaledContents(True) self.setCentralWidget(self.workingWindow) self.sizeLabel = QLabel() self.sizeLabel.setFrameStyle(QFrame.StyledPanel | QFrame.Sunken) status = self.statusBar() status.setSizeGripEnabled(False) status.addPermanentWidget(self.sizeLabel) status.showMessage("Ready", 5000) # FILE MENU # Defining menu/toolbar actions projectNewAction = self.createAction( "&New Project", self.projectNew, QKeySequence.New, "projectnew", "Create a new PopGen project." ) projectOpenAction = self.createAction( "&Open Project", self.projectOpen, QKeySequence.Open, "projectopen", "Open an existing PopGen project." ) self.projectSaveAction = self.createAction( "&Save Project", self.projectSave, QKeySequence.Save, "projectsave", "Save the current PopGen project." ) self.projectSaveAsAction = self.createAction( "Save Project &As...", self.projectSaveAs, icon="projectsaveas", tip="Save the current PopGen project with a new name.", ) self.projectCloseAction = self.createAction( "&Close Project", self.projectClose, "Ctrl+W", tip="Close the current PopGen project." ) applicationQuitAction = self.createAction( "&Quit", self.close, "Ctrl+Q", icon="quit", tip="Close the application." ) self.projectSaveAction.setEnabled(False) self.projectSaveAsAction.setEnabled(False) self.projectCloseAction.setEnabled(False) # Adding actions to menu self.fileMenu = self.menuBar().addMenu("&File") # self.addActions(self.fileMenu, (projectNewAction, projectOpenAction, None, self.projectSaveAction, # self.projectSaveAsAction, None, self.projectCloseAction, None, applicationQuitAction)) self.addActions( self.fileMenu, ( projectNewAction, projectOpenAction, None, self.projectSaveAction, None, self.projectCloseAction, None, applicationQuitAction, ), ) # Adding actions to toolbar self.fileToolBar = self.addToolBar("File") self.fileToolBar.setObjectName("FileToolBar") # self.addActions(self.fileToolBar, (projectNewAction, projectOpenAction, self.projectSaveAction, self.projectSaveAsAction)) self.addActions(self.fileToolBar, (projectNewAction, projectOpenAction, self.projectSaveAction)) # DATA MENU # Defining menu/toolbar actions dataSourceAction = self.createAction( "Data Source &Connection", self.dataSource, icon="datasource", tip="Enter MySQL connection settings." ) dataImportAction = self.createAction( "&Import", self.dataImport, icon="fileimport", tip="Import data into MySQL database." ) # dataStatisticsAction = self.createAction("&Statistics", self.dataStatistics, # icon="statistics", tip="Conduct descriptive analysis.") dataModifyAction = self.createAction( "&Display", self.dataModify, icon="modifydata", tip="View, analyze and modify the input data." ) dataMargsHhldAction = self.createAction( "&Household", self.dataMargsHhld, tip="Modify the distribution of household variables of interest." ) dataMargsGQAction = self.createAction( "&Groupquarter", self.dataMargsGQ, tip="Modify the distribution of household variables of interest." ) dataMargsPersAction = self.createAction( "&Person", self.dataMargsPers, tip="Modify the distribution of household variables of interest." ) # Adding actions to menu self.dataMenu = self.menuBar().addMenu("&Data") # self.addActions(self.dataMenu, (dataSourceAction, None, dataImportAction, dataStatisticsAction, dataModifyAction)) self.addActions(self.dataMenu, (dataSourceAction, None, dataImportAction, dataModifyAction, None)) self.dataMargsSubMenu = self.dataMenu.addMenu(QIcon("images/Marginals.png"), "Modify Marginals Distributions") self.addActions(self.dataMargsSubMenu, (dataMargsHhldAction, dataMargsGQAction, dataMargsPersAction)) # Adding actions to toolbar self.dataToolBar = self.addToolBar("Data") self.dataToolBar.setObjectName("DataToolBar") # self.addActions(self.dataToolBar, (dataSourceAction, dataImportAction, dataStatisticsAction, dataModifyAction)) self.addActions(self.dataToolBar, (dataSourceAction, dataImportAction, dataModifyAction)) self.dataMenu.setDisabled(True) self.dataToolBar.setDisabled(True) # SYNTHESIZER MENU # Defining menu/toolbar actions # synthesizerControlVariablesAction = self.createAction("Control &Variables", self.synthesizerControlVariables, # icon="controlvariables", # tip="Select variables to control.") setCorrespondenceAction = self.createAction( "Set Corresponding Variables", self.synthesizerSetCorrBetVariables, icon="varcorr", tip="""Select the variables and """ """set the correspondence map between the variables """ """in the sample file and variables in the control file.""", ) synthesizerParameterAction = self.createAction( "&Parameters/Settings", self.synthesizerParameter, icon="parameters", tip="Set parameter values." ) synthesizerRunAction = self.createAction("Run", self.synthesizerRun, icon="run", tip="Run synthesizer.") synthesizerStopAction = self.createAction( "Stop", self.synthesizerStop, icon="stop", tip="Stop the current population synthesis run." ) # Adding actions to menu self.synthesizerMenu = self.menuBar().addMenu("&Synthesizer") # self.addActions(self.synthesizerMenu, (setCorrespondenceAction, # synthesizerParameterAction, None, # synthesizerRunAction, synthesizerStopAction)) self.addActions( self.synthesizerMenu, (setCorrespondenceAction, synthesizerParameterAction, None, synthesizerRunAction) ) # Adding actions to toolbar self.synthesizerToolBar = self.addToolBar("Synthesizer") # self.addActions(self.synthesizerToolBar, (synthesizerControlVariablesAction, synthesizerParameterAction, # synthesizerRunAction)) self.addActions( self.synthesizerToolBar, (setCorrespondenceAction, synthesizerParameterAction, synthesizerRunAction) ) self.synthesizerMenu.setDisabled(True) self.synthesizerToolBar.setDisabled(True) self.scenarioComboBox = QComboBox() scenarioItems = ["Scenario - 1", "Scenario - 2", "Scenario - 3", "Scenario - 4", "Scenario - 5"] self.scenarioComboBox.addItems(scenarioItems) self.scenarioToolBar = self.addToolBar("Scenario") self.scenarioToolBar.addWidget(self.scenarioComboBox) self.scenarioToolBar.setDisabled(True) # RESULTS MENU # Defining menu/toolbar actions resultsRegionalAARDAction = self.createAction( "Average Absolute Relative Difference (AARD)", self.resultsRegionalAARD, tip="""Display the distribution of Average Absolute Relative Difference (AARD) """ """across individual geographies.""", ) resultsRegionalPValueAction = self.createAction( "p-Value", self.resultsRegionalPValue, tip="""Display the distribution of p-value """ """for the synthetic population across individual geographies.""", ) resultsRegionalHousDistAction = self.createAction( "Distribution of Housing Variables", self.resultsRegionalHousDist, tip="Comparison of housing variables." ) resultsRegionalPersDistAction = self.createAction( "Distribution of Person Variables", self.resultsRegionalPersDist, tip="Comparison of person variables." ) resultsRegionalAction = self.createAction( "Regional Geography Statistics", self.resultsRegional, icon="region", tip="Display performance statistics for the entire region.", ) resultsIndividualAction = self.createAction( "&Individual Geography Statistics", self.resultsIndividual, icon="individualgeo", tip="Display performance statistics for individual geographies.", ) resultsViewHHAction = self.createAction( "&View Households", self.resultsViewHH, icon="viewhh", tip="Display synthesized households for the entire region.", ) resultsExportCSVAction = self.createAction( "Into &CSV Format", self.resultsCSVExport, tip="Export results into a comma-seperated file" ) resultsExportTabAction = self.createAction( "Into &Tab-delimited Format", self.resultsTabExport, tip="Export results into a tab-delimited file" ) resultsExportSummaryAction = self.createAction( "Summary Statistics", self.resultsExportSummary, tip="Export summary statistics for the synthetic population", ) thematicMapsHhldAction = self.createAction( "Household", self.thematicMapsHhld, tip="""Display thematic maps of the synthetic population for """ """household attribute categories""", ) thematicMapsGQAction = self.createAction( "Groupquarter", self.thematicMapsGQ, tip="""Display thematic maps of the synthetic population for """ """groupquarter attribute categories""", ) thematicMapsPersonAction = self.createAction( "Person", self.thematicMapsPerson, tip="""Display thematic maps of the synthetic population for """ """person attribute categories""", ) # Adding actions to menu self.resultsMenu = self.menuBar().addMenu("&Results") self.regionwideSubMenu = self.resultsMenu.addMenu(QIcon("images/region.png"), "Regional Statistics") self.addActions( self.regionwideSubMenu, ( resultsRegionalAARDAction, resultsRegionalPValueAction, resultsRegionalHousDistAction, resultsRegionalPersDistAction, ), ) self.addActions(self.resultsMenu, (resultsIndividualAction,)) self.thematicMapsSubMenu = self.resultsMenu.addMenu(QIcon("images/thematic.png"), "&Thematic Maps") self.addActions( self.thematicMapsSubMenu, (thematicMapsHhldAction, thematicMapsGQAction, thematicMapsPersonAction) ) self.addActions(self.resultsMenu, (None,)) self.exportSubMenu = self.resultsMenu.addMenu(QIcon("images/export.png"), "&Export Synthetic Population Tables") self.addActions( self.exportSubMenu, (resultsExportCSVAction, resultsExportTabAction, None, resultsExportSummaryAction) ) # self.addActions(self.resultsMenu, (resultsViewHHAction,)) # Adding actions to toolbar # self.resultsToolBar = self.addToolBar("Results") # self.resultsToolBar.addToolBar(QIcon("Regional SubMenu")) # self.addActions(self.resultsToolBar, (resultsRegionalAction, resultsIndividualAction)) self.resultsMenu.setDisabled(True) # self.resultsToolBar.setDisabled(True) # HELP MENU # Defining menu/toolbar actions helpDocumentationAction = self.createAction( "Documentation", self.showDocumentation, tip="Display the documentation of PopGen.", icon="documentation" ) helpHelpAction = self.createAction( "Help", self.showHelp, tip="Quick reference for important parameters.", icon="help" ) helpAboutAction = self.createAction("About PopGen", self.showAbout, tip="Display software information") dataHhldSample = self.createAction( "Household Sample", self.showHhldSampleStruct, tip="Data structure for the household sample file." ) dataGQSample = self.createAction( "Groupquarter Sample", self.showGQSampleStruct, tip="Data structure for the groupquarter sample file." ) dataPersonSample = self.createAction( "Person Sample", self.showPersonSampleStruct, tip="Data structure for the person sample file." ) dataHhldMarginals = self.createAction( "Household Marginals", self.showHhldMarginalsStruct, tip="Data structure for the household marginals file." ) dataGQMarginals = self.createAction( "Groupquarter Marginals", self.showGQMarginalsStruct, tip="Data structure for the groupquarter marginals file.", ) dataPersonMarginals = self.createAction( "Person Marginals", self.showPersonMarginalsStruct, tip="Data structure for the person marginals file." ) dataGeocorr = self.createAction( "Geographic Correspondence", self.showGeocorrStruct, tip="Data structure for the geographic correspondence file.", ) resHousingSyn = self.createAction( "Housing Synthetic Data", self.showHousingSyn, tip="Data structure for the housing synthetic data file." ) resPersonSyn = self.createAction( "Person Synthetic Data", self.showPersonSyn, tip="Data structure for the person synthetic data file." ) self.helpMenu = self.menuBar().addMenu("&Help") self.helpDataTemplateSubMenu = self.helpMenu.addMenu(QIcon("images/structure.png"), "&Data Structures") self.addActions( self.helpDataTemplateSubMenu, ( dataHhldSample, dataGQSample, dataPersonSample, None, dataHhldMarginals, dataGQMarginals, dataPersonMarginals, None, dataGeocorr, None, resHousingSyn, resPersonSyn, ), ) # self.addActions(self.helpMenu, (None, helpDocumentationAction, helpHelpAction, None, helpAboutAction)) self.addActions(self.helpMenu, (None, helpDocumentationAction, None, helpAboutAction)) # FILE MANAGER # Setting up the file manager fileManagerDockWidget = QDockWidget("File Manager", self) fileManagerDockWidget.setObjectName("FileManagerDockWidget") fileManagerDockWidget.setAllowedAreas(Qt.LeftDockWidgetArea) self.fileManager = QTreeWidgetCMenu() fileManagerDockWidget.setWidget(self.fileManager) self.addDockWidget(Qt.LeftDockWidgetArea, fileManagerDockWidget) # self.connect(self.fileManager, SIGNAL("itemDoubleClicked(QTreeWidgetItem *,int)"), self.fileManager.editItem) self.connect(self.fileManager, SIGNAL("itemClicked(QTreeWidgetItem *,int)"), self.fileManager.click) self.connect(self, SIGNAL("Dirty(bool)"), self.windowDirty) self.connect(self.scenarioComboBox, SIGNAL("currentIndexChanged(int)"), self.scenarioChanged) def scenarioChanged(self, index): file = ( self.project.location + os.path.sep + self.project.name + os.path.sep + "%s%s%s.pop" % (self.project.name, "scenario", index + 1) ) file = os.path.realpath(file) with open(file, "rb") as f: self.project = pickle.load(f) self.setWindowTitle("PopGen: Version-1.1 (%s)" % self.project.name) self.project.scenario = index + 1 self.project.save() self.fileManager.project = self.project self.fileManager.populate() def windowDirty(self, value): # print 'entering dirty %s' %value if value: self.setWindowTitle("PopGen: Version-1.1 %s*" % self.project.name) else: self.setWindowTitle("PopGen: Version-1.1 %s" % self.project.name) # Defining all the slots and supporting methods def projectNew(self): if not self.fileManager.isEnabled(): self.runWizard() else: reply = QMessageBox.question( None, "Project Setup Wizard", QString("""A PopGen project already open. Would you like to continue?"""), QMessageBox.Yes | QMessageBox.No, ) if reply == QMessageBox.Yes: save = QMessageBox.question( None, "Project Setup Wizard", QString("""Would you like to save the project?"""), QMessageBox.Yes | QMessageBox.No, ) self.fileManager.clear() self.fileManager.setEnabled(False) self.enableFunctions(False) self.project = None if save == QMessageBox.Yes: self.project.save() self.runWizard() def runWizard(self): self.wizard = Wizard() self.wizard.setWindowIcon(QIcon("./images/projectnew.png")) if self.wizard.exec_(): # print "complete" self.project = self.wizard.project self.setWindowTitle("PopGen: Version-1.1 (%s)" % (self.project.name)) self.project.save() self.fileManager.project = self.project self.fileManager.populate() self.enableFunctions(True) def enableFunctions(self, option): self.projectSaveAction.setEnabled(option) self.projectSaveAsAction.setEnabled(option) self.projectCloseAction.setEnabled(option) self.dataMenu.setEnabled(option) self.dataToolBar.setEnabled(option) self.synthesizerMenu.setEnabled(option) self.synthesizerToolBar.setEnabled(option) self.resultsMenu.setEnabled(option) # self.resultsToolBar.setEnabled(option) self.scenarioToolBar.setEnabled(option) def projectOpen(self): project = OpenProject() if not project.file.isEmpty(): if self.fileManager.isEnabled(): reply = QMessageBox.warning( None, "Open Existing Project", QString("""A PopGen project already open. Would you like to continue?"""), QMessageBox.Yes | QMessageBox.No, ) if reply == QMessageBox.Yes: save = QMessageBox.warning( None, "Save Existing Project", QString("""Would you like to save the project?"""), QMessageBox.Yes | QMessageBox.No, ) if save == QMessageBox.Yes: SaveProject(self.project) with open(project.file, "rb") as f: self.project = pickle.load(f) self.setWindowTitle("PopGen: Version-1.1 (%s)" % self.project.name) self.fileManager.project = self.project self.fileManager.populate() self.enableFunctions(True) self.scenarioComboBox.setCurrentIndex((self.project.scenario - 1)) # PopulateFileManager(self.project, self.fileManager) else: with open(project.file, "rb") as f: self.project = pickle.load(f) self.setWindowTitle("PopGen: Version-1.1 (%s)" % self.project.name) self.fileManager.project = self.project self.fileManager.populate() self.enableFunctions(True) self.scenarioComboBox.setCurrentIndex(self.project.scenario - 1) # PopulateFileManager(self.project, self.fileManager) def projectSave(self): if self.project: self.project.save() def projectSaveAs(self): file = QFileDialog.getSaveFileName( self, QString("Save As..."), "%s" % self.project.location, "PopGen File (*.pop)" ) file = re.split("[/.]", file) filename = file[-2] if not filename.isEmpty(): reply = QMessageBox.warning( self, "Save Existing Project As...", QString("""Would you like to continue?"""), QMessageBox.Yes | QMessageBox.No, ) if reply == QMessageBox.Yes: self.project.filename = filename self.project.save() self.setWindowTitle("PopGen: Version-1.1 (%s)" % self.project.name) def projectClose(self): self.fileManager.clear() self.fileManager.setEnabled(False) self.enableFunctions(False) self.project = None def dataSource(self): dataConnectionDia = DBConnectionDialog(self.project) if dataConnectionDia.exec_(): if self.project <> dataConnectionDia.project: self.project = dataConnectionDia.project self.project.save() self.fileManager.populate() def dataImport(self): dataprocesscheck = DataDialog(self.project) dataprocesscheck.exec_() self.fileManager.populate() def dataStatistics(self): QMessageBox.information(self, "Information", "Run some descriptive analysis", QMessageBox.Ok) def dataModify(self): try: check = self.fileManager.item.parent().text(0) == "Data Tables" tablename = self.fileManager.item.text(0) if check: b = DisplayTable(self.project, tablename) b.exec_() except Exception, e: QMessageBox.warning( self, "Data", """Select a table and then choose this option to display a table""" """or use the context menu to view a table.""", QMessageBox.Ok, )
class MainWindow(QMainWindow): def __init__(self, parent=None): super(MainWindow, self).__init__(parent) import pp ppservers = () if len(sys.argv) > 1: ncpus = int(sys.argv[1]) self.job_server = pp.Server(ncpus, ppservers=ppservers, restart=True) else: self.job_server = pp.Server(ppservers=ppservers, restart=True) #print dir(self.job_server) #print 'number of workers', self.job_server.get_ncpus() #self.job_server.set_ncpus(1) #print 'number of workers', self.job_server.get_ncpus() self.dirty = False self.projectName = None self.setWindowTitle("PopGen Version-1.1") self.setWindowIcon(QIcon("./images/popsyn.png")) self.workingWindow = QLabel() self.showMaximized() self.setMinimumSize(800, 500) self.workingWindow.setAlignment(Qt.AlignCenter) bkground = QPixmap("./images/background.png") self.workingWindow.setPixmap(bkground) self.workingWindow.setScaledContents(True) self.setCentralWidget(self.workingWindow) self.sizeLabel = QLabel() self.sizeLabel.setFrameStyle(QFrame.StyledPanel | QFrame.Sunken) status = self.statusBar() status.setSizeGripEnabled(False) status.addPermanentWidget(self.sizeLabel) status.showMessage("Ready", 5000) # FILE MENU # Defining menu/toolbar actions projectNewAction = self.createAction("&New Project", self.projectNew, QKeySequence.New, "projectnew", "Create a new PopGen project.") projectOpenAction = self.createAction( "&Open Project", self.projectOpen, QKeySequence.Open, "projectopen", "Open an existing PopGen project.") self.projectSaveAction = self.createAction( "&Save Project", self.projectSave, QKeySequence.Save, "projectsave", "Save the current PopGen project.") self.projectSaveAsAction = self.createAction( "Save Project &As...", self.projectSaveAs, icon="projectsaveas", tip="Save the current PopGen project with a new name.") self.projectCloseAction = self.createAction( "&Close Project", self.projectClose, "Ctrl+W", tip="Close the current PopGen project.") applicationQuitAction = self.createAction("&Quit", self.close, "Ctrl+Q", icon="quit", tip="Close the application.") self.projectSaveAction.setEnabled(False) self.projectSaveAsAction.setEnabled(False) self.projectCloseAction.setEnabled(False) # Adding actions to menu self.fileMenu = self.menuBar().addMenu("&File") #self.addActions(self.fileMenu, (projectNewAction, projectOpenAction, None, self.projectSaveAction, # self.projectSaveAsAction, None, self.projectCloseAction, None, applicationQuitAction)) self.addActions( self.fileMenu, (projectNewAction, projectOpenAction, None, self.projectSaveAction, None, self.projectCloseAction, None, applicationQuitAction)) # Adding actions to toolbar self.fileToolBar = self.addToolBar("File") self.fileToolBar.setObjectName("FileToolBar") #self.addActions(self.fileToolBar, (projectNewAction, projectOpenAction, self.projectSaveAction, self.projectSaveAsAction)) self.addActions( self.fileToolBar, (projectNewAction, projectOpenAction, self.projectSaveAction)) # DATA MENU # Defining menu/toolbar actions dataSourceAction = self.createAction( "Data Source &Connection", self.dataSource, icon="datasource", tip="Enter MySQL connection settings.") dataImportAction = self.createAction( "&Import", self.dataImport, icon="fileimport", tip="Import data into MySQL database.") #dataStatisticsAction = self.createAction("&Statistics", self.dataStatistics, # icon="statistics", tip="Conduct descriptive analysis.") dataModifyAction = self.createAction( "&Display", self.dataModify, icon="modifydata", tip="View, analyze and modify the input data.") dataMargsHhldAction = self.createAction( "&Household", self.dataMargsHhld, tip="Modify the distribution of household variables of interest.") dataMargsGQAction = self.createAction( "&Groupquarter", self.dataMargsGQ, tip="Modify the distribution of household variables of interest.") dataMargsPersAction = self.createAction( "&Person", self.dataMargsPers, tip="Modify the distribution of household variables of interest.") # Adding actions to menu self.dataMenu = self.menuBar().addMenu("&Data") #self.addActions(self.dataMenu, (dataSourceAction, None, dataImportAction, dataStatisticsAction, dataModifyAction)) self.addActions( self.dataMenu, (dataSourceAction, None, dataImportAction, dataModifyAction, None)) self.dataMargsSubMenu = self.dataMenu.addMenu( QIcon("images/Marginals.png"), "Modify Marginals Distributions") self.addActions( self.dataMargsSubMenu, (dataMargsHhldAction, dataMargsGQAction, dataMargsPersAction)) # Adding actions to toolbar self.dataToolBar = self.addToolBar("Data") self.dataToolBar.setObjectName("DataToolBar") #self.addActions(self.dataToolBar, (dataSourceAction, dataImportAction, dataStatisticsAction, dataModifyAction)) self.addActions(self.dataToolBar, (dataSourceAction, dataImportAction, dataModifyAction)) self.dataMenu.setDisabled(True) self.dataToolBar.setDisabled(True) # SYNTHESIZER MENU # Defining menu/toolbar actions #synthesizerControlVariablesAction = self.createAction("Control &Variables", self.synthesizerControlVariables, # icon="controlvariables", # tip="Select variables to control.") setCorrespondenceAction = self.createAction( "Set Corresponding Variables", self.synthesizerSetCorrBetVariables, icon="varcorr", tip="""Select the variables and """ """set the correspondence map between the variables """ """in the sample file and variables in the control file.""") synthesizerParameterAction = self.createAction( "&Parameters/Settings", self.synthesizerParameter, icon="parameters", tip="Set parameter values.") synthesizerRunAction = self.createAction("Run", self.synthesizerRun, icon="run", tip="Run synthesizer.") synthesizerStopAction = self.createAction( "Stop", self.synthesizerStop, icon="stop", tip="Stop the current population synthesis run.") # Adding actions to menu self.synthesizerMenu = self.menuBar().addMenu("&Synthesizer") #self.addActions(self.synthesizerMenu, (setCorrespondenceAction, # synthesizerParameterAction, None, # synthesizerRunAction, synthesizerStopAction)) self.addActions(self.synthesizerMenu, (setCorrespondenceAction, synthesizerParameterAction, None, synthesizerRunAction)) # Adding actions to toolbar self.synthesizerToolBar = self.addToolBar("Synthesizer") #self.addActions(self.synthesizerToolBar, (synthesizerControlVariablesAction, synthesizerParameterAction, # synthesizerRunAction)) self.addActions(self.synthesizerToolBar, (setCorrespondenceAction, synthesizerParameterAction, synthesizerRunAction)) self.synthesizerMenu.setDisabled(True) self.synthesizerToolBar.setDisabled(True) self.scenarioComboBox = QComboBox() scenarioItems = [ 'Scenario - 1', 'Scenario - 2', 'Scenario - 3', 'Scenario - 4', 'Scenario - 5' ] self.scenarioComboBox.addItems(scenarioItems) self.scenarioToolBar = self.addToolBar("Scenario") self.scenarioToolBar.addWidget(self.scenarioComboBox) self.scenarioToolBar.setDisabled(True) # RESULTS MENU # Defining menu/toolbar actions resultsRegionalAARDAction = self.createAction( "Average Absolute Relative Difference (AARD)", self.resultsRegionalAARD, tip= """Display the distribution of Average Absolute Relative Difference (AARD) """ """across individual geographies.""") resultsRegionalPValueAction = self.createAction( "p-Value", self.resultsRegionalPValue, tip="""Display the distribution of p-value """ """for the synthetic population across individual geographies.""") resultsRegionalHousDistAction = self.createAction( "Distribution of Housing Variables", self.resultsRegionalHousDist, tip="Comparison of housing variables.") resultsRegionalPersDistAction = self.createAction( "Distribution of Person Variables", self.resultsRegionalPersDist, tip="Comparison of person variables.") resultsRegionalAction = self.createAction( "Regional Geography Statistics", self.resultsRegional, icon="region", tip="Display performance statistics for the entire region.") resultsIndividualAction = self.createAction( "&Individual Geography Statistics", self.resultsIndividual, icon="individualgeo", tip="Display performance statistics for individual geographies.") resultsViewHHAction = self.createAction( "&View Households", self.resultsViewHH, icon="viewhh", tip="Display synthesized households for the entire region.") resultsExportCSVAction = self.createAction( "Into &CSV Format", self.resultsCSVExport, tip="Export results into a comma-seperated file") resultsExportTabAction = self.createAction( "Into &Tab-delimited Format", self.resultsTabExport, tip="Export results into a tab-delimited file") resultsExportSummaryAction = self.createAction( "Summary Statistics", self.resultsExportSummary, tip="Export summary statistics for the synthetic population") thematicMapsHhldAction = self.createAction( "Household", self.thematicMapsHhld, tip="""Display thematic maps of the synthetic population for """ """household attribute categories""") thematicMapsGQAction = self.createAction( "Groupquarter", self.thematicMapsGQ, tip="""Display thematic maps of the synthetic population for """ """groupquarter attribute categories""") thematicMapsPersonAction = self.createAction( "Person", self.thematicMapsPerson, tip="""Display thematic maps of the synthetic population for """ """person attribute categories""") # Adding actions to menu self.resultsMenu = self.menuBar().addMenu("&Results") self.regionwideSubMenu = self.resultsMenu.addMenu( QIcon("images/region.png"), "Regional Statistics") self.addActions( self.regionwideSubMenu, (resultsRegionalAARDAction, resultsRegionalPValueAction, resultsRegionalHousDistAction, resultsRegionalPersDistAction)) self.addActions(self.resultsMenu, (resultsIndividualAction, )) self.thematicMapsSubMenu = self.resultsMenu.addMenu( QIcon("images/thematic.png"), "&Thematic Maps") self.addActions(self.thematicMapsSubMenu, (thematicMapsHhldAction, thematicMapsGQAction, thematicMapsPersonAction)) self.addActions(self.resultsMenu, (None, )) self.exportSubMenu = self.resultsMenu.addMenu( QIcon("images/export.png"), "&Export Synthetic Population Tables") self.addActions(self.exportSubMenu, (resultsExportCSVAction, resultsExportTabAction, None, resultsExportSummaryAction)) #self.addActions(self.resultsMenu, (resultsViewHHAction,)) # Adding actions to toolbar #self.resultsToolBar = self.addToolBar("Results") #self.resultsToolBar.addToolBar(QIcon("Regional SubMenu")) #self.addActions(self.resultsToolBar, (resultsRegionalAction, resultsIndividualAction)) self.resultsMenu.setDisabled(True) #self.resultsToolBar.setDisabled(True) # HELP MENU # Defining menu/toolbar actions helpDocumentationAction = self.createAction( "Documentation", self.showDocumentation, tip="Display the documentation of PopGen.", icon="documentation") helpHelpAction = self.createAction( "Help", self.showHelp, tip="Quick reference for important parameters.", icon="help") helpAboutAction = self.createAction("About PopGen", self.showAbout, tip="Display software information") dataHhldSample = self.createAction( "Household Sample", self.showHhldSampleStruct, tip="Data structure for the household sample file.") dataGQSample = self.createAction( "Groupquarter Sample", self.showGQSampleStruct, tip="Data structure for the groupquarter sample file.") dataPersonSample = self.createAction( "Person Sample", self.showPersonSampleStruct, tip="Data structure for the person sample file.") dataHhldMarginals = self.createAction( "Household Marginals", self.showHhldMarginalsStruct, tip="Data structure for the household marginals file.") dataGQMarginals = self.createAction( "Groupquarter Marginals", self.showGQMarginalsStruct, tip="Data structure for the groupquarter marginals file.") dataPersonMarginals = self.createAction( "Person Marginals", self.showPersonMarginalsStruct, tip="Data structure for the person marginals file.") dataGeocorr = self.createAction( "Geographic Correspondence", self.showGeocorrStruct, tip="Data structure for the geographic correspondence file.") resHousingSyn = self.createAction( "Housing Synthetic Data", self.showHousingSyn, tip="Data structure for the housing synthetic data file.") resPersonSyn = self.createAction( "Person Synthetic Data", self.showPersonSyn, tip="Data structure for the person synthetic data file.") self.helpMenu = self.menuBar().addMenu("&Help") self.helpDataTemplateSubMenu = self.helpMenu.addMenu( QIcon("images/structure.png"), "&Data Structures") self.addActions( self.helpDataTemplateSubMenu, (dataHhldSample, dataGQSample, dataPersonSample, None, dataHhldMarginals, dataGQMarginals, dataPersonMarginals, None, dataGeocorr, None, resHousingSyn, resPersonSyn)) #self.addActions(self.helpMenu, (None, helpDocumentationAction, helpHelpAction, None, helpAboutAction)) self.addActions(self.helpMenu, (None, helpDocumentationAction, None, helpAboutAction)) # FILE MANAGER # Setting up the file manager fileManagerDockWidget = QDockWidget("File Manager", self) fileManagerDockWidget.setObjectName("FileManagerDockWidget") fileManagerDockWidget.setAllowedAreas(Qt.LeftDockWidgetArea) self.fileManager = QTreeWidgetCMenu() fileManagerDockWidget.setWidget(self.fileManager) self.addDockWidget(Qt.LeftDockWidgetArea, fileManagerDockWidget) #self.connect(self.fileManager, SIGNAL("itemDoubleClicked(QTreeWidgetItem *,int)"), self.fileManager.editItem) self.connect(self.fileManager, SIGNAL("itemClicked(QTreeWidgetItem *,int)"), self.fileManager.click) self.connect(self, SIGNAL("Dirty(bool)"), self.windowDirty) self.connect(self.scenarioComboBox, SIGNAL("currentIndexChanged(int)"), self.scenarioChanged) def scenarioChanged(self, index): file = (self.project.location + os.path.sep + self.project.name + os.path.sep + '%s%s%s.pop' % (self.project.name, 'scenario', index + 1)) file = os.path.realpath(file) with open(file, 'rb') as f: self.project = pickle.load(f) self.setWindowTitle("PopGen: Version-1.1 (%s)" % self.project.name) self.project.scenario = index + 1 self.project.save() self.fileManager.project = self.project self.fileManager.populate() def windowDirty(self, value): #print 'entering dirty %s' %value if value: self.setWindowTitle("PopGen: Version-1.1 %s*" % self.project.name) else: self.setWindowTitle("PopGen: Version-1.1 %s" % self.project.name) # Defining all the slots and supporting methods def projectNew(self): if not self.fileManager.isEnabled(): self.runWizard() else: reply = QMessageBox.question( None, "Project Setup Wizard", QString( """A PopGen project already open. Would you like to continue?""" ), QMessageBox.Yes | QMessageBox.No) if reply == QMessageBox.Yes: save = QMessageBox.question( None, "Project Setup Wizard", QString("""Would you like to save the project?"""), QMessageBox.Yes | QMessageBox.No) self.fileManager.clear() self.fileManager.setEnabled(False) self.enableFunctions(False) self.project = None if save == QMessageBox.Yes: self.project.save() self.runWizard() def runWizard(self): self.wizard = Wizard() self.wizard.setWindowIcon(QIcon("./images/projectnew.png")) if self.wizard.exec_(): #print "complete" self.project = self.wizard.project self.setWindowTitle("PopGen: Version-1.1 (%s)" % (self.project.name)) self.project.save() self.fileManager.project = self.project self.fileManager.populate() self.enableFunctions(True) def enableFunctions(self, option): self.projectSaveAction.setEnabled(option) self.projectSaveAsAction.setEnabled(option) self.projectCloseAction.setEnabled(option) self.dataMenu.setEnabled(option) self.dataToolBar.setEnabled(option) self.synthesizerMenu.setEnabled(option) self.synthesizerToolBar.setEnabled(option) self.resultsMenu.setEnabled(option) #self.resultsToolBar.setEnabled(option) self.scenarioToolBar.setEnabled(option) def projectOpen(self): project = OpenProject() if not project.file.isEmpty(): if self.fileManager.isEnabled(): reply = QMessageBox.warning( None, "Open Existing Project", QString( """A PopGen project already open. Would you like to continue?""" ), QMessageBox.Yes | QMessageBox.No) if reply == QMessageBox.Yes: save = QMessageBox.warning( None, "Save Existing Project", QString("""Would you like to save the project?"""), QMessageBox.Yes | QMessageBox.No) if save == QMessageBox.Yes: SaveProject(self.project) with open(project.file, 'rb') as f: self.project = pickle.load(f) self.setWindowTitle("PopGen: Version-1.1 (%s)" % self.project.name) self.fileManager.project = self.project self.fileManager.populate() self.enableFunctions(True) self.scenarioComboBox.setCurrentIndex( (self.project.scenario - 1)) #PopulateFileManager(self.project, self.fileManager) else: with open(project.file, 'rb') as f: self.project = pickle.load(f) self.setWindowTitle("PopGen: Version-1.1 (%s)" % self.project.name) self.fileManager.project = self.project self.fileManager.populate() self.enableFunctions(True) self.scenarioComboBox.setCurrentIndex( self.project.scenario - 1) #PopulateFileManager(self.project, self.fileManager) def projectSave(self): if self.project: self.project.save() def projectSaveAs(self): file = QFileDialog.getSaveFileName(self, QString("Save As..."), "%s" % self.project.location, "PopGen File (*.pop)") file = re.split("[/.]", file) filename = file[-2] if not filename.isEmpty(): reply = QMessageBox.warning( self, "Save Existing Project As...", QString("""Would you like to continue?"""), QMessageBox.Yes | QMessageBox.No) if reply == QMessageBox.Yes: self.project.filename = filename self.project.save() self.setWindowTitle("PopGen: Version-1.1 (%s)" % self.project.name) def projectClose(self): self.fileManager.clear() self.fileManager.setEnabled(False) self.enableFunctions(False) self.project = None def dataSource(self): dataConnectionDia = DBConnectionDialog(self.project) if dataConnectionDia.exec_(): if self.project <> dataConnectionDia.project: self.project = dataConnectionDia.project self.project.save() self.fileManager.populate() def dataImport(self): dataprocesscheck = DataDialog(self.project) dataprocesscheck.exec_() self.fileManager.populate() def dataStatistics(self): QMessageBox.information(self, "Information", "Run some descriptive analysis", QMessageBox.Ok) def dataModify(self): try: check = self.fileManager.item.parent().text(0) == 'Data Tables' tablename = self.fileManager.item.text(0) if check: b = DisplayTable(self.project, tablename) b.exec_() except Exception, e: QMessageBox.warning( self, "Data", """Select a table and then choose this option to display a table""" """or use the context menu to view a table.""", QMessageBox.Ok)