BornAgain  1.19.0
Simulate and fit neutron and x-ray scattering at grazing incidence
SimulationSetupWidget.cpp
Go to the documentation of this file.
1 // ************************************************************************************************
2 //
3 // BornAgain: simulate and fit reflection and scattering
4 //
5 //! @file GUI/coregui/Views/SimulationWidgets/SimulationSetupWidget.cpp
6 //! @brief Implements class SimulationSetupWidget
7 //!
8 //! @homepage http://www.bornagainproject.org
9 //! @license GNU General Public License v3 or higher (see COPYING)
10 //! @copyright Forschungszentrum Jülich GmbH 2018
11 //! @authors Scientific Computing Group at MLZ (see CITATION, AUTHORS)
12 //
13 // ************************************************************************************************
14 
27 #include <QMessageBox>
28 #include <QPushButton>
29 #include <QVBoxLayout>
30 
32  : QWidget(parent)
33  , m_applicationModels(0)
34  , runSimulationButton(0)
35  , exportToPyScriptButton(0)
36  , m_simDataSelectorWidget(new SimulationDataSelectorWidget(this))
37  , m_simOptionsWidget(new SimulationOptionsWidget(this))
38 {
39  QVBoxLayout* mainLayout = new QVBoxLayout;
40  mainLayout->addWidget(m_simDataSelectorWidget);
41  mainLayout->addWidget(m_simOptionsWidget);
42  mainLayout->addWidget(createButtonWidget());
43  mainLayout->addStretch(10);
44  setLayout(mainLayout);
45 
46  // signal and slots
47  connect(runSimulationButton, &QPushButton::clicked, this,
49  connect(exportToPyScriptButton, &QPushButton::clicked, this,
51 }
52 
54 {
55  ASSERT(model);
56  if (model != m_applicationModels) {
57  m_applicationModels = model;
60  }
61 }
62 
64 {
67 }
68 
70 {
72  const auto instrumentItem = m_simDataSelectorWidget->selectedInstrumentItem();
74 
75  SimulationSetupAssistant assistant;
76  if (!assistant.isValidSimulationSetup(multiLayerItem, instrumentItem, realDataItem))
77  return;
78 
80  multiLayerItem, instrumentItem, realDataItem,
82 
83  if (jobItem->runImmediately() || jobItem->runInBackground())
84  m_applicationModels->jobModel()->runJob(jobItem->index());
85 }
86 
88 {
90  const auto instrumentItem = m_simDataSelectorWidget->selectedInstrumentItem();
91 
92  SimulationSetupAssistant assistant;
93  if (!assistant.isValidSimulationSetup(multiLayerItem, instrumentItem))
94  return;
95 
96  PythonScriptWidget* pythonWidget = new PythonScriptWidget(this);
97  pythonWidget->show();
98  pythonWidget->raise();
99  pythonWidget->generatePythonScript(
100  multiLayerItem, instrumentItem,
103 }
104 
106 {
107  QWidget* result = new QWidget;
108 
109  QHBoxLayout* simButtonLayout = new QHBoxLayout;
110  // run simulation button
111  runSimulationButton = new QPushButton("Run simulation");
112  runSimulationButton->setIcon(QIcon(":/images/main_simulation.png"));
113  runSimulationButton->setMinimumWidth(100);
114  runSimulationButton->setMinimumHeight(50);
115  runSimulationButton->setToolTip("Run the simulation using settings above.\n"
116  " Global shortcut ctrl-r can be used to run from sample view.");
117  // QPalette palette = runSimulationButton->palette();
118  // palette.setColor(QPalette::Button, QColor(Constants::BUTTON_COLOR));
119  // palette.setColor(QPalette::ButtonText, QColor(Constants::BUTTON_TEXT_COLOR));
120  // runSimulationButton->setPalette(palette);
121 
122  // export simulation to a python script
123  exportToPyScriptButton = new QPushButton("Export to Python Script");
124  exportToPyScriptButton->setIcon(QIcon(":/images/mode_script.png"));
125  exportToPyScriptButton->setMinimumWidth(100);
126  exportToPyScriptButton->setMinimumHeight(50);
127  exportToPyScriptButton->setToolTip("Export the simulation using settings above to "
128  "a python script.\n");
129  // exportToPyScriptButton->setPalette(palette);
130 
131  simButtonLayout->addStretch();
132  simButtonLayout->addWidget(runSimulationButton);
133  simButtonLayout->addWidget(exportToPyScriptButton);
134  simButtonLayout->addStretch();
135 
136  result->setLayout(simButtonLayout);
137 
138  return result;
139 }
Defines class AppSvc.
Defines class holding all application models.
#define ASSERT(condition)
Definition: Assert.h:31
Defines class DocumentModel.
Defines class ProjectManager.
Defines InstrumentItems classes.
Defines class JobItem.
Defines class JobModel.
Defines class PythonScriptWidget.
Defines class SimulationDataSelectorWidget.
Defines class SimulationOptionsWidget.
Defines class SimulationSetupAssistant.
Defines class SimulationSetupWidget.
static ProjectManager * projectManager()
Definition: AppSvc.cpp:18
DocumentModel * documentModel()
SimulationOptionsItem * simulationOptionsItem()
bool runImmediately() const
Definition: JobItem.cpp:209
bool runInBackground() const
Definition: JobItem.cpp:214
void runJob(const QModelIndex &index)
Definition: JobModel.cpp:179
JobItem * addJob(const MultiLayerItem *multiLayerItem, const InstrumentItem *instrumentItem, const RealDataItem *realDataItem, const SimulationOptionsItem *optionItem)
Main method to add a job.
Definition: JobModel.cpp:73
QString projectDir() const
Returns name of the current project directory.
The PythonScriptWidget displays a python script which represents full simulation.
void generatePythonScript(const MultiLayerItem *sampleItem, const InstrumentItem *instrumentItem, const SimulationOptionsItem *optionItem=0, const QString &outputDir="")
The RealDataItem class represents intensity data imported from file and intended for fitting.
Definition: RealDataItem.h:35
QModelIndex index() const
Returns model index of this item.
Definition: SessionItem.cpp:80
The SimulationDataSelectorWidget class represents widget to select instrument, sample and real data.
const MultiLayerItem * selectedMultiLayerItem() const
Returns selected MultiLayerItem taking into account that there might be several multilayers with same...
const RealDataItem * selectedRealDataItem() const
Returns selected real data item taking into account that there might be several items with same name.
void setApplicationModels(ApplicationModels *applicationModels)
const InstrumentItem * selectedInstrumentItem() const
Returns selected InstrumentItem taking into account that there might be several instruments with same...
Holds widgets related to the setup of simulation/job options (nthreads, run policy,...
void setItem(SimulationOptionsItem *item)
The SimulationSetupAssistant class provides sample, instrument and real data validation before submit...
bool isValidSimulationSetup(const MultiLayerItem *multiLayerItem, const InstrumentItem *instrumentItem, const RealDataItem *realData=0)
ApplicationModels * m_applicationModels
void setApplicationModels(ApplicationModels *model)
SimulationDataSelectorWidget * m_simDataSelectorWidget
SimulationOptionsWidget * m_simOptionsWidget
QPushButton * exportToPyScriptButton
SimulationSetupWidget(QWidget *parent=0)