SXRMBEXAFSScanConfigurationView::SXRMBEXAFSScanConfigurationView(SXRMBEXAFSScanConfiguration *configuration, QWidget *parent) : SXRMBScanConfigurationView(parent) { SXRMBBeamline *sxrmbBL = SXRMBBeamline::sxrmb(); configuration_ = configuration; regionsView_ = new AMEXAFSScanAxisView("SXRMB Region Configuration", configuration_); autoRegionButton_ = new QPushButton("Auto Set XANES Regions"); connect(autoRegionButton_, SIGNAL(clicked()), this, SLOT(setupDefaultXANESScanRegions())); pseudoXAFSButton_ = new QPushButton("Auto Set EXAFS Regions"); connect(pseudoXAFSButton_, SIGNAL(clicked()), this, SLOT(setupDefaultEXAFSScanRegions())); // Energy (Eo) selection energy_ = new QDoubleSpinBox; energy_->setSuffix(" eV"); energy_->setMinimum(0); energy_->setMaximum(10000); connect(energy_, SIGNAL(editingFinished()), this, SLOT(setEnergy())); elementChoice_ = new QToolButton; connect(elementChoice_, SIGNAL(clicked()), this, SLOT(onElementChoiceClicked())); lineChoice_ = new QComboBox; connect(lineChoice_, SIGNAL(currentIndexChanged(int)), this, SLOT(onLinesComboBoxIndexChanged(int))); if (configuration_->edge().isEmpty()){ elementChoice_->setText("Cl"); fillLinesComboBox(AMPeriodicTable::table()->elementBySymbol("Cl")); lineChoice_->setCurrentIndex(0); } // Resets the view for the view to what it should be. Using the saved for the energy in case it is different from the original line energy. else { elementChoice_->setText(configuration_->edge().split(" ").first()); lineChoice_->blockSignals(true); fillLinesComboBox(AMPeriodicTable::table()->elementBySymbol(elementChoice_->text())); lineChoice_->setCurrentIndex(lineChoice_->findText(configuration_->edge(), Qt::MatchStartsWith | Qt::MatchCaseSensitive)); lineChoice_->blockSignals(false); energy_->setValue(configuration_->energy()); } connect(configuration_, SIGNAL(edgeChanged(QString)), this, SLOT(onEdgeChanged())); QFormLayout *energySetpointLayout = new QFormLayout; energySetpointLayout->addRow("Energy:", energy_); QHBoxLayout *energyLayout = new QHBoxLayout; energyLayout->addLayout(energySetpointLayout); energyLayout->addWidget(elementChoice_); energyLayout->addWidget(lineChoice_); QHBoxLayout *regionsHL = new QHBoxLayout(); regionsHL->addStretch(); regionsHL->addWidget(autoRegionButton_); regionsHL->addWidget(pseudoXAFSButton_); QVBoxLayout *scanRegionConfigurationBoxLayout = new QVBoxLayout; scanRegionConfigurationBoxLayout->addLayout(energyLayout); scanRegionConfigurationBoxLayout->addWidget(regionsView_); scanRegionConfigurationBoxLayout->addLayout(regionsHL); QGroupBox *scanRegionConfigurationGroupBox = new QGroupBox("Scan Region Configuration"); scanRegionConfigurationGroupBox->setLayout(scanRegionConfigurationBoxLayout); // Scan information: scan name selection scanName_ = new QLineEdit(configuration_->userScanName()); scanName_->setAlignment(Qt::AlignCenter); connect(scanName_, SIGNAL(editingFinished()), this, SLOT(onScanNameEdited())); connect(configuration_, SIGNAL(nameChanged(QString)), scanName_, SLOT(setText(QString))); onScanNameEdited(); QFormLayout *scanNameLayout = new QFormLayout; scanNameLayout->addRow("Scan Name:", scanName_); // Scan information: the estimated scan time. estimatedTime_ = new QLabel; connect(configuration_, SIGNAL(totalTimeChanged(double)), this, SLOT(onEstimatedTimeChanged())); onEstimatedTimeChanged(); QVBoxLayout *scanInfoBoxLayout = new QVBoxLayout; scanInfoBoxLayout->addLayout(scanNameLayout); scanInfoBoxLayout->addWidget(estimatedTime_); QGroupBox *scanInfoGroupBox = new QGroupBox("Scan Information"); scanInfoGroupBox->setLayout(scanInfoBoxLayout); // Beamline setting layout QGroupBox *beamlineSettingsGroupBox = createAndLayoutBeamlineSettings(); // Bruker detector setting QGroupBox *detectorSettingGroupBox = createAndLayoutDetectorSettings(configuration_); // layout the contents QGridLayout *contentLayout = new QGridLayout(); contentLayout->addWidget(scanRegionConfigurationGroupBox, 0, 0, 1, 1); contentLayout->addWidget(scanInfoGroupBox, 1, 0, 1, 1); contentLayout->addWidget(beamlineSettingsGroupBox, 0, 4, 1, 1); contentLayout->addWidget(detectorSettingGroupBox, 1, 4, 1, 1); contentLayout->setContentsMargins(20,0,0,20); contentLayout->setSpacing(1); setLayout(contentLayout); connect(configuration_->dbObject(), SIGNAL(xChanged(double)), this, SLOT(onScanConfigurationSampleStageXChanged(double))); connect(configuration_->dbObject(), SIGNAL(zChanged(double)), this, SLOT(onScanConfigurationSampleStageZChanged(double))); connect(configuration_->dbObject(), SIGNAL(yChanged(double)), this, SLOT(onScanConfigurationNormalChanged(double))); connect(configuration_->dbObject(), SIGNAL(rotationChanged(double)), this, SLOT(onScanConfigurationRotationChanged(double))); connect(sxrmbBL, SIGNAL(endstationChanged(SXRMB::Endstation, SXRMB::Endstation)), this, SLOT(onBeamlineEndstationChanged(SXRMB::Endstation, SXRMB::Endstation))); if(sxrmbBL->isConnected()) updateBeamlineSettingWarning(); }
VESPERSEXAFSScanConfigurationView::VESPERSEXAFSScanConfigurationView(VESPERSEXAFSScanConfiguration *config, QWidget *parent) : VESPERSScanConfigurationView(parent) { configuration_ = config; AMTopFrame *frame = new AMTopFrame("VESPERS EXAFS Configuration"); // Regions setup regionsView_ = new AMEXAFSScanAxisView("", configuration_); QVBoxLayout *regionsViewLayout = new QVBoxLayout; regionsViewLayout->addWidget(regionsView_); QGroupBox *regionsViewGroupBox = new QGroupBox("Regions Setup"); regionsViewGroupBox->setLayout(regionsViewLayout); // The fluorescence detector setup fluorescenceDetectorComboBox_ = createFluorescenceComboBox(); connect(fluorescenceDetectorComboBox_, SIGNAL(currentIndexChanged(int)), this, SLOT(onFluorescenceChoiceChanged(int))); connect(configuration_->dbObject(), SIGNAL(fluorescenceDetectorChanged(int)), this, SLOT(updateFluorescenceDetectorComboBox(int))); fluorescenceDetectorComboBox_->setCurrentIndex((int)configuration_->fluorescenceDetector()); // Ion chamber selection itComboBox_ = createIonChamberComboBox(); connect(itComboBox_, SIGNAL(currentIndexChanged(int)), this, SLOT(onItClicked(int))); connect(configuration_->dbObject(), SIGNAL(transmissionChoiceChanged(int)), this, SLOT(updateItComboBox(int))); i0ComboBox_ = createIonChamberComboBox(); connect(i0ComboBox_, SIGNAL(currentIndexChanged(int)), this, SLOT(onI0Clicked(int))); connect(configuration_->dbObject(), SIGNAL(incomingChoiceChanged(int)), this, SLOT(updateI0ComboBox(int))); QHBoxLayout *ionChambersLayout = new QHBoxLayout; ionChambersLayout->addWidget(i0ComboBox_); ionChambersLayout->addWidget(itComboBox_); // Scan name selection scanName_ = createScanNameView(configuration_->name()); connect(scanName_, SIGNAL(editingFinished()), this, SLOT(onScanNameEdited())); connect(configuration_, SIGNAL(nameChanged(QString)), scanName_, SLOT(setText(QString))); onScanNameEdited(); // The estimated scan time. estimatedTime_ = new QLabel; connect(configuration_, SIGNAL(totalTimeChanged(double)), this, SLOT(onEstimatedTimeChanged())); onEstimatedTimeChanged(); QFormLayout *scanNameLayout = new QFormLayout; scanNameLayout->addRow("Scan Name:", scanName_); scanNameLayout->addRow(estimatedTime_); QGroupBox *scanNameGroupBox = new QGroupBox("Scan Name"); scanNameGroupBox->setLayout(scanNameLayout); // Energy (Eo) selection energy_ = new QDoubleSpinBox; energy_->setSuffix(" eV"); energy_->setMinimum(0); energy_->setMaximum(30000); connect(energy_, SIGNAL(editingFinished()), this, SLOT(setEnergy())); elementChoice_ = new QToolButton; connect(elementChoice_, SIGNAL(clicked()), this, SLOT(onElementChoiceClicked())); lineChoice_ = new QComboBox; connect(lineChoice_, SIGNAL(currentIndexChanged(int)), this, SLOT(onLinesComboBoxIndexChanged(int))); if (configuration_->edge().isEmpty()){ elementChoice_->setText("Cu"); fillLinesComboBox(AMPeriodicTable::table()->elementBySymbol("Cu")); lineChoice_->setCurrentIndex(0); } // Resets the view for the view to what it should be. Using the saved for the energy in case it is different from the original line energy. else onEdgeChanged(); connect(configuration_, SIGNAL(edgeChanged(QString)), this, SLOT(onEdgeChanged())); QFormLayout *energySetpointLayout = new QFormLayout; energySetpointLayout->addRow("Energy:", energy_); QHBoxLayout *energyLayout = new QHBoxLayout; energyLayout->addLayout(energySetpointLayout); energyLayout->addWidget(elementChoice_); energyLayout->addWidget(lineChoice_); // Setting the scan position. QGroupBox *goToPositionGroupBox = addGoToPositionView(configuration_->goToPosition(), configuration_->x(), configuration_->y()); connect(configuration_, SIGNAL(gotoPositionChanged(bool)), goToPositionCheckBox_, SLOT(setChecked(bool))); connect(goToPositionCheckBox_, SIGNAL(toggled(bool)), configuration_, SLOT(setGoToPosition(bool))); connect(goToPositionCheckBox_, SIGNAL(toggled(bool)), setCurrentPositionButton_, SLOT(setEnabled(bool))); connect(goToPositionCheckBox_, SIGNAL(toggled(bool)), savedXPosition_, SLOT(setEnabled(bool))); connect(goToPositionCheckBox_, SIGNAL(toggled(bool)), savedYPosition_, SLOT(setEnabled(bool))); connect(goToPositionCheckBox_, SIGNAL(toggled(bool)), positionsSaved_, SLOT(setEnabled(bool))); connect(setCurrentPositionButton_, SIGNAL(clicked()), this, SLOT(setScanPosition())); connect(configuration_->dbObject(), SIGNAL(motorChanged(int)), this, SLOT(onMotorsUpdated(int))); onMotorsUpdated(configuration_->motor()); // Label showing where the data will be saved. QLabel *exportPath = addExportPathLabel(); // Default XANES and EXAFS buttons. QPushButton *defaultXANESButton = new QPushButton("Default XANES"); connect(defaultXANESButton, SIGNAL(clicked()), this, SLOT(setupDefaultXANESScanRegions())); QPushButton *defaultEXAFSButton = new QPushButton("Default EXAFS"); connect(defaultEXAFSButton, SIGNAL(clicked()), this, SLOT(setupDefaultEXAFSScanRegions())); // Setting up the steps to show the time offset for scan time estimation. connect(this, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(onCustomContextMenuRequested(QPoint))); setContextMenuPolicy(Qt::CustomContextMenu); QGroupBox *timeOffsetBox = addTimeOffsetLabel(configuration_->timeOffset()); connect(timeOffset_, SIGNAL(valueChanged(double)), this, SLOT(setTimeOffset(double))); // Auto-export option. QGroupBox *autoExportGroupBox = addExporterOptionsView(QStringList(), configuration_->exportSpectraSources(), configuration_->exportSpectraInRows()); connect(autoExportSpectra_, SIGNAL(toggled(bool)), configuration_, SLOT(setExportSpectraSources(bool))); connect(autoExportSpectra_, SIGNAL(toggled(bool)), exportSpectraInRows_, SLOT(setEnabled(bool))); connect(exportSpectraInRows_, SIGNAL(toggled(bool)), this, SLOT(updateExportSpectraInRows(bool))); fluorescenceDetectorComboBox_->setCurrentIndex((int)configuration_->fluorescenceDetector()); i0ComboBox_->setCurrentIndex((int)configuration_->incomingChoice()); itComboBox_->setCurrentIndex((int)configuration_->transmissionChoice()); disableStandardI0Options(); disableStandardItOptions(); QVBoxLayout *defaultLayout = new QVBoxLayout; defaultLayout->addSpacing(35); defaultLayout->addWidget(defaultXANESButton); defaultLayout->addWidget(defaultEXAFSButton); defaultLayout->addStretch(); QFormLayout *detectorLayout = new QFormLayout; detectorLayout->addRow("XRF:", fluorescenceDetectorComboBox_); detectorLayout->addRow("I0:", i0ComboBox_); detectorLayout->addRow("It:", itComboBox_); QGroupBox *detectorGroupBox = new QGroupBox("Detectors"); detectorGroupBox->setLayout(detectorLayout); QGroupBox *afterScanBox = createAfterScanOptionsBox(configuration_->closeFastShutter(), configuration_->returnToOriginalPosition(), configuration_->cleanupScaler()); connect(closeFastShutterCheckBox_, SIGNAL(toggled(bool)), this, SLOT(setCloseFastShutter(bool))); // connect(goToPositionCheckBox_, SIGNAL(toggled(bool)), this, SLOT(setReturnToOriginalPosition(bool))); connect(cleanupScalerCheckBox_, SIGNAL(toggled(bool)), this, SLOT(setCleanupScaler(bool))); goToPositionCheckBox_->setDisabled(true); // Setting up the layout. QGridLayout *contentsLayout = new QGridLayout; contentsLayout->addLayout(energyLayout, 0, 0, 1, 3); contentsLayout->addWidget(regionsViewGroupBox, 1, 0, 2, 3); contentsLayout->addWidget(scanNameGroupBox, 3, 0, 1, 2); contentsLayout->addWidget(goToPositionGroupBox, 4, 0, 1, 1); contentsLayout->addWidget(timeOffsetBox, 5, 0, 1, 1); contentsLayout->addWidget(detectorGroupBox, 3, 2, 1, 1); contentsLayout->addWidget(autoExportGroupBox, 4, 1, 1, 2); contentsLayout->addWidget(afterScanBox, 5, 2, 1, 1); QHBoxLayout *squeezeContents = new QHBoxLayout; squeezeContents->addStretch(); squeezeContents->addLayout(defaultLayout); squeezeContents->addLayout(contentsLayout); squeezeContents->addStretch(); QVBoxLayout *configViewLayout = new QVBoxLayout; configViewLayout->addWidget(frame); configViewLayout->addStretch(); configViewLayout->addSpacing(30); configViewLayout->addLayout(squeezeContents); configViewLayout->addSpacing(30); configViewLayout->addWidget(exportPath, 0, Qt::AlignCenter); configViewLayout->addStretch(); setLayout(configViewLayout); }