changed structure of callFMTOMO to class

This commit is contained in:
Marcel Paffrath 2016-07-27 14:42:11 +02:00
parent adfe9cc027
commit 638f552d6d
2 changed files with 122 additions and 83 deletions

View File

@ -9,9 +9,8 @@ matplotlib.rcParams['backend.qt4']='PySide'
from PySide import QtCore, QtGui from PySide import QtCore, QtGui
from pylot.core.active import activeSeismoPick, surveyUtils, fmtomoUtils, seismicArrayPreparation from pylot.core.active import activeSeismoPick, surveyUtils, fmtomoUtils, seismicArrayPreparation
from pylot.core.active.gui.asp3d_layout import * from pylot.core.active.gui.asp3d_layout import *
from pylot.core.active.gui.fmtomo_parameters_layout import *
from pylot.core.active.gui.vtk_tools_layout import * from pylot.core.active.gui.vtk_tools_layout import *
from pylot.core.active.gui.windows import Gen_SeisArray, Gen_Survey_from_SA, Gen_Survey_from_SR, Call_autopicker from pylot.core.active.gui.windows import Gen_SeisArray, Gen_Survey_from_SA, Gen_Survey_from_SR, Call_autopicker, Call_FMTOMO
from pylot.core.active.gui.windows import openFile, saveFile, browseDir, getMaxCPU from pylot.core.active.gui.windows import openFile, saveFile, browseDir, getMaxCPU
from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg as FigureCanvas from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg as FigureCanvas
@ -36,10 +35,14 @@ class gui_control(object):
self.mainUI.progressBar.setVisible(False) self.mainUI.progressBar.setVisible(False)
self.printSurveyTextbox() self.printSurveyTextbox()
self.printSeisArrayTextbox() self.printSeisArrayTextbox()
self.initWindowObjects()
def initWindowObjects(self):
self.gsa = None self.gsa = None
self.gssa = None self.gssa = None
self.gssr = None self.gssr = None
self.autopicker = None self.autopicker = None
self.fmtomo = None
def setInitStates(self): def setInitStates(self):
self.setPickState(False) self.setPickState(False)
@ -56,7 +59,7 @@ class gui_control(object):
QtCore.QObject.connect(self.mainUI.actionConnect_to_Survey, QtCore.SIGNAL("triggered()"), self.connect2Survey) QtCore.QObject.connect(self.mainUI.actionConnect_to_Survey, QtCore.SIGNAL("triggered()"), self.connect2Survey)
QtCore.QObject.connect(self.mainUI.actionInterpolate_Receivers, QtCore.SIGNAL("triggered()"), self.interpolate_receivers) QtCore.QObject.connect(self.mainUI.actionInterpolate_Receivers, QtCore.SIGNAL("triggered()"), self.interpolate_receivers)
QtCore.QObject.connect(self.mainUI.actionGenerate_new_Survey, QtCore.SIGNAL("triggered()"), self.gen_survey) QtCore.QObject.connect(self.mainUI.actionGenerate_new_Survey, QtCore.SIGNAL("triggered()"), self.gen_survey)
QtCore.QObject.connect(self.mainUI.actionAutomatic_Picking, QtCore.SIGNAL("triggered()"), self.callPicker) QtCore.QObject.connect(self.mainUI.actionAutomatic_Picking, QtCore.SIGNAL("triggered()"), self.startPicker)
QtCore.QObject.connect(self.mainUI.actionPostprocessing, QtCore.SIGNAL("triggered()"), self.postprocessing) QtCore.QObject.connect(self.mainUI.actionPostprocessing, QtCore.SIGNAL("triggered()"), self.postprocessing)
QtCore.QObject.connect(self.mainUI.actionStart_FMTOMO_Simulation, QtCore.SIGNAL("triggered()"), self.startFMTOMO) QtCore.QObject.connect(self.mainUI.actionStart_FMTOMO_Simulation, QtCore.SIGNAL("triggered()"), self.startFMTOMO)
QtCore.QObject.connect(self.mainUI.actionVTK_Visualization, QtCore.SIGNAL("triggered()"), self.startVTKtools) QtCore.QObject.connect(self.mainUI.actionVTK_Visualization, QtCore.SIGNAL("triggered()"), self.startVTKtools)
@ -331,7 +334,7 @@ class gui_control(object):
print('Connected Seismic Array to active Survey object.') print('Connected Seismic Array to active Survey object.')
def callPicker(self): def startPicker(self):
if not self.checkSurveyState(): if not self.checkSurveyState():
self.printDialogMessage('No Survey defined.') self.printDialogMessage('No Survey defined.')
return return
@ -356,14 +359,13 @@ class gui_control(object):
if not self.checkPickState(): if not self.checkPickState():
self.printDialogMessage('Survey not picked.') self.printDialogMessage('Survey not picked.')
return return
fmtomo_parameters = QtGui.QDialog(self.mainwindow)
ui = Ui_fmtomo_parameters()
ui.setupUi(fmtomo_parameters)
ui.nproc.setMaximum(getMaxCPU())
self.fmtomo_parameters_ui = ui if self.fmtomo is None:
self.connectButtons_startFMTOMO() self.fmtomo = Call_FMTOMO(self.mainwindow, self.survey)
self.getFMTOMOparameters(ui, fmtomo_parameters) else:
self.fmtomo.start_dialog()
#if self.fmtomo.executed:
def startVTKtools(self): def startVTKtools(self):
@ -380,45 +382,6 @@ class gui_control(object):
vtk_tools.exec_() vtk_tools.exec_()
def getFMTOMOparameters(self, ui, fmtomo_parameters):
if fmtomo_parameters.exec_():
fmtomo_dir = ui.fmtomo_dir.text()
nIter = int(ui.nIter.value())
nproc = int(ui.nproc.value())
btop = float(ui.btop.text())
bbot = float(ui.bbot.text())
propgrid = (int(ui.pgrid_x.text()), int(ui.pgrid_y.text()), int(ui.pgrid_z.text()))
vgrid = (int(ui.invgrid_x.text()), int(ui.invgrid_y.text()), int(ui.invgrid_z.text()))
cushionfactor = float(ui.cushion.text())/100.
customgrid = ui.customgrid.text()
simuldir = ui.simuldir.text()
picks_dir = os.path.join(simuldir, 'picks')
if not os.path.isdir(picks_dir):
err = os.mkdir(picks_dir)
self.survey.exportFMTOMO(picks_dir)
cwd = os.getcwd()
interpolationMethod = 'linear'
os.chdir(simuldir)
if self.seisarray.twoDim:
interpolationMethod = 'nearest'
self.survey.seisarray.generateFMTOMOinputFromArray(propgrid, vgrid, (bbot, btop), cushionfactor,
interpolationMethod, customgrid = customgrid,
writeVTK = True)
os.chdir(cwd)
tomo = fmtomoUtils.Tomo3d(fmtomo_dir, simuldir)
tomo.runTOMO3D(nproc, nIter)
def connectButtons_startFMTOMO(self):
QtCore.QObject.connect(self.fmtomo_parameters_ui.browse_tomodir, QtCore.SIGNAL("clicked()"), self.chooseFMTOMOdir)
QtCore.QObject.connect(self.fmtomo_parameters_ui.browse_customgrid, QtCore.SIGNAL("clicked()"), self.chooseCustomgrid)
QtCore.QObject.connect(self.fmtomo_parameters_ui.browse_simuldir, QtCore.SIGNAL("clicked()"), self.chooseSimuldir)
def connectButtons_vtk_tools(self): def connectButtons_vtk_tools(self):
QtCore.QObject.connect(self.vtk_tools_ui.pushButton_vg, QtCore.SIGNAL("clicked()"), self.chooseVgrid) QtCore.QObject.connect(self.vtk_tools_ui.pushButton_vg, QtCore.SIGNAL("clicked()"), self.chooseVgrid)
QtCore.QObject.connect(self.vtk_tools_ui.pushButton_vgref, QtCore.SIGNAL("clicked()"), self.chooseVgridref) QtCore.QObject.connect(self.vtk_tools_ui.pushButton_vgref, QtCore.SIGNAL("clicked()"), self.chooseVgridref)
@ -513,22 +476,6 @@ class gui_control(object):
self.vtk_tools_ui.lineEdit_vgout.setText(saveFile()) self.vtk_tools_ui.lineEdit_vgout.setText(saveFile())
def chooseFMTOMOdir(self):
self.fmtomo_parameters_ui.fmtomo_dir.setText(browseDir())
def chooseCustomgrid(self):
self.fmtomo_parameters_ui.customgrid.setText(openFile())
def chooseSimuldir(self):
self.fmtomo_parameters_ui.simuldir.setText(browseDir())
def chooseSeisarray(self):
self.fmtomo_parameters_ui.seisarray.setText(openFile())
def postprocessing(self): def postprocessing(self):
if not self.checkSurveyState(): if not self.checkSurveyState():
self.printDialogMessage('No Survey defined.') self.printDialogMessage('No Survey defined.')

View File

@ -1,11 +1,13 @@
#!/usr/bin/env python #!/usr/bin/env python
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
import os
from PySide import QtCore, QtGui from PySide import QtCore, QtGui
from pylot.core.active import surveyUtils, activeSeismoPick, seismicArrayPreparation from pylot.core.active import surveyUtils, activeSeismoPick, seismicArrayPreparation, fmtomoUtils
from generate_survey_layout import * from generate_survey_layout import Ui_generate_survey
from generate_survey_layout_minimal import * from generate_survey_layout_minimal import Ui_generate_survey_minimal
from generate_seisarray_layout import * from generate_seisarray_layout import Ui_generate_seisarray
from picking_parameters_layout import * from picking_parameters_layout import Ui_picking_parameters
from fmtomo_parameters_layout import Ui_fmtomo_parameters
import numpy as np import numpy as np
import matplotlib import matplotlib
@ -62,7 +64,7 @@ class Gen_SeisArray(object):
def start_dialog(self): def start_dialog(self):
self.init_last_selection() self.init_last_selection()
if self.qdialog.exec_(): if self.qdialog.exec_():
self.refresh_filenames() self.refresh_selection()
if self.ui.radioButton_interpolatable.isChecked(): if self.ui.radioButton_interpolatable.isChecked():
self.seisarray = seismicArrayPreparation.SeisArray(self.recfile, True) self.seisarray = seismicArrayPreparation.SeisArray(self.recfile, True)
elif self.ui.radioButton_normal.isChecked(): elif self.ui.radioButton_normal.isChecked():
@ -73,10 +75,10 @@ class Gen_SeisArray(object):
self.seisarray.addMeasuredTopographyPoints(self.ptsfile) self.seisarray.addMeasuredTopographyPoints(self.ptsfile)
self.executed = True self.executed = True
else: else:
self.refresh_filenames() self.refresh_selection()
self.executed = False self.executed = False
def refresh_filenames(self): def refresh_selection(self):
self.srcfile = self.ui.lineEdit_src.text() self.srcfile = self.ui.lineEdit_src.text()
self.recfile = self.ui.lineEdit_rec.text() self.recfile = self.ui.lineEdit_rec.text()
self.ptsfile = self.ui.lineEdit_pts.text() self.ptsfile = self.ui.lineEdit_pts.text()
@ -128,16 +130,16 @@ class Gen_Survey_from_SA(object):
def start_dialog(self): def start_dialog(self):
self.init_last_selection() self.init_last_selection()
if self.qdialog.exec_(): if self.qdialog.exec_():
self.refresh_filenames() self.refresh_selection()
self.survey = activeSeismoPick.Survey(self.obsdir, seisArray = self.seisarray, self.survey = activeSeismoPick.Survey(self.obsdir, seisArray = self.seisarray,
useDefaultParas = True, fstart = self.fstart, useDefaultParas = True, fstart = self.fstart,
fend = self.fend) fend = self.fend)
self.executed = True self.executed = True
else: else:
self.refresh_filenames() self.refresh_selection()
self.executed = False self.executed = False
def refresh_filenames(self): def refresh_selection(self):
self.obsdir = self.ui.lineEdit_obs.text() self.obsdir = self.ui.lineEdit_obs.text()
self.fstart = self.ui.fstart.text() self.fstart = self.ui.fstart.text()
self.fend = self.ui.fend.text() self.fend = self.ui.fend.text()
@ -180,16 +182,16 @@ class Gen_Survey_from_SR(object):
def start_dialog(self): def start_dialog(self):
self.init_last_selection() self.init_last_selection()
if self.qdialog.exec_(): if self.qdialog.exec_():
self.refresh_filenames() self.refresh_selection()
self.survey = activeSeismoPick.Survey(self.obsdir, self.srcfile, self.recfile, self.survey = activeSeismoPick.Survey(self.obsdir, self.srcfile, self.recfile,
useDefaultParas = True, useDefaultParas = True,
fstart = self.fstart, fend = self.fend) fstart = self.fstart, fend = self.fend)
self.executed = True self.executed = True
else: else:
self.refresh_filenames() self.refresh_selection()
self.executed = False self.executed = False
def refresh_filenames(self): def refresh_selection(self):
self.obsdir = self.ui.lineEdit_obs.text() self.obsdir = self.ui.lineEdit_obs.text()
self.srcfile = self.ui.lineEdit_src.text() self.srcfile = self.ui.lineEdit_src.text()
self.recfile = self.ui.lineEdit_rec.text() self.recfile = self.ui.lineEdit_rec.text()
@ -347,9 +349,6 @@ class Call_autopicker(object):
self.ui.p1.setValue(self.p1) self.ui.p1.setValue(self.p1)
self.ui.p2.setValue(self.p2) self.ui.p2.setValue(self.p2)
def get_survey(self):
return self.survey
def connectButtons(self): def connectButtons(self):
QtCore.QObject.connect(self.ui.slider_folm, QtCore.SIGNAL("valueChanged(int)"), self.refreshFolm) QtCore.QObject.connect(self.ui.slider_folm, QtCore.SIGNAL("valueChanged(int)"), self.refreshFolm)
QtCore.QObject.connect(self.ui.shift_snr, QtCore.SIGNAL("valueChanged(int)"), self.plotDynSNR) QtCore.QObject.connect(self.ui.shift_snr, QtCore.SIGNAL("valueChanged(int)"), self.plotDynSNR)
@ -366,3 +365,96 @@ class Call_autopicker(object):
def chooseRecfile(self): def chooseRecfile(self):
self.ui.lineEdit_rec.setText(openFile('Open receiverfile.')) self.ui.lineEdit_rec.setText(openFile('Open receiverfile.'))
class Call_FMTOMO(object):
def __init__(self, mainwindow, survey):
self.mainwindow = mainwindow
self.survey = survey
self.init_dialog()
self.refresh_selection()
self.start_dialog()
def init_dialog(self):
qdialog = QtGui.QDialog(self.mainwindow)
ui = Ui_fmtomo_parameters()
ui.setupUi(qdialog)
ui.nproc.setMaximum(getMaxCPU())
self.ui = ui
self.qdialog = qdialog
self.connectButtons()
def start_dialog(self):
self.init_last_selection()
if self.qdialog.exec_():
self.refresh_selection()
if not os.path.isdir(self.picks_dir):
err = os.mkdir(self.picks_dir) # error not handled yet
self.survey.exportFMTOMO(self.picks_dir)
cwd = os.getcwd()
interpolationMethod = 'linear'
os.chdir(self.simuldir)
if self.survey.seisarray.twoDim:
interpolationMethod = 'nearest'
self.survey.seisarray.generateFMTOMOinputFromArray(self.propgrid, self.vgrid, (self.bbot, self.btop),
self.cushionfactor/100., interpolationMethod,
customgrid = self.customgrid, writeVTK = True)
os.chdir(cwd)
tomo = fmtomoUtils.Tomo3d(self.fmtomo_dir, self.simuldir)
tomo.runTOMO3D(self.nproc, self.nIter)
self.executed = True
else:
self.refresh_selection()
self.executed = False
def refresh_selection(self):
self.fmtomo_dir = self.ui.fmtomo_dir.text()
self.nIter = int(self.ui.nIter.value())
self.nproc = int(self.ui.nproc.value())
self.btop = float(self.ui.btop.text())
self.bbot = float(self.ui.bbot.text())
self.propgrid = (int(self.ui.pgrid_x.value()), int(self.ui.pgrid_y.value()), int(self.ui.pgrid_z.value()))
self.vgrid = (int(self.ui.invgrid_x.value()), int(self.ui.invgrid_y.value()), int(self.ui.invgrid_z.value()))
self.cushionfactor = float(self.ui.cushion.value())
self.customgrid = self.ui.customgrid.text()
self.simuldir = self.ui.simuldir.text()
self.picks_dir = os.path.join(self.simuldir, 'picks')
def init_last_selection(self):
self.ui.fmtomo_dir.setText(self.fmtomo_dir)
self.ui.nIter.setValue(self.nIter)
self.ui.nproc.setValue(self.nproc)
self.ui.btop.setText(str(self.btop))
self.ui.bbot.setText(str(self.bbot))
self.ui.pgrid_x.setValue(self.propgrid[0])
self.ui.pgrid_y.setValue(self.propgrid[1])
self.ui.pgrid_z.setValue(self.propgrid[2])
self.ui.invgrid_x.setValue(self.vgrid[0])
self.ui.invgrid_y.setValue(self.vgrid[1])
self.ui.invgrid_z.setValue(self.vgrid[2])
self.ui.cushion.setValue(self.cushionfactor)
self.ui.customgrid.setText(self.customgrid)
self.ui.simuldir.setText(self.simuldir)
def connectButtons(self):
QtCore.QObject.connect(self.ui.browse_tomodir, QtCore.SIGNAL("clicked()"), self.chooseFMTOMOdir)
QtCore.QObject.connect(self.ui.browse_customgrid, QtCore.SIGNAL("clicked()"), self.chooseCustomgrid)
QtCore.QObject.connect(self.ui.browse_simuldir, QtCore.SIGNAL("clicked()"), self.chooseSimuldir)
def chooseFMTOMOdir(self):
self.ui.fmtomo_dir.setText(browseDir())
def chooseCustomgrid(self):
self.ui.customgrid.setText(openFile())
def chooseSimuldir(self):
self.ui.simuldir.setText(browseDir())