git-svn-id: file:///afs/psi.ch/project/sls_det_software/svn/slsDetectorGui@60 af1100a4-978c-4157-bff7-07162d2ba061
This commit is contained in:
l_maliakal_d 2012-09-19 14:40:27 +00:00
parent ee264e9b56
commit d01852892b
15 changed files with 450 additions and 216 deletions

View File

@ -241,7 +241,6 @@
<string>&amp;Modes</string>
</property>
<addaction name="actionDebug"/>
<addaction name="actionBeamline"/>
<addaction name="actionExpert"/>
<addaction name="actionDockable"/>
</widget>

View File

@ -656,7 +656,7 @@ Plots Trimbits from Detector. This will take time.
</layout>
</widget>
</widget>
<widget class="QGroupBox" name="groupBox_2">
<widget class="QGroupBox" name="boxLogs">
<property name="geometry">
<rect>
<x>405</x>

View File

@ -123,9 +123,13 @@ private:
* */
void Initialization();
/** Loads config file at start up
* */
void LoadConfigFile(const string fName);
private slots:
/** Enables modes as selected -Debug, Beamline, Expert, Dockable(calls setdockablemode())
/** Enables modes as selected -Debug, Expert, Dockable(calls setdockablemode())
* */
void EnableModes(QAction *action);

View File

@ -113,6 +113,8 @@ private:
/** Trimming mode */
slsDetectorDefs::trimMode trimmingMode;
bool isEnergy;
bool isAngular;
};

View File

@ -6,7 +6,7 @@ UI_HEADERS_DIR = forms/include
RESOURCES += icons.qrc
DEFINES += VERBOSE VERYVERBOSE #DACS_INT #VERYVERBOSE
DEFINES += VERBOSE #DACS_INT #VERYVERBOSE
target.path += $(DESTDIR)

View File

@ -48,11 +48,12 @@ int main (int argc, char **argv) {
qDetectorMain::qDetectorMain(int argc, char **argv, QApplication *app, QWidget *parent) :
QMainWindow(parent), theApp(app),myDet(0),detID(0),myPlot(NULL),tabs(NULL),isDeveloper(0){
string configFName = "";
// Getting all the command line arguments
for(int iarg=1; iarg<argc; iarg++){
if(!strcasecmp(argv[iarg],"-developer")) {isDeveloper=1;}
if(!strcasecmp(argv[iarg],"-id")) {detID=atoi(argv[iarg+1]);}
if(!strcasecmp(argv[iarg],"-config")) {configFName=string(argv[iarg+1]);}
if(!strcasecmp(argv[iarg],"-help")){
cout << "Possible Arguments are:" << endl;
cout << "-help \t\t : \t This help" << endl;
@ -66,6 +67,8 @@ qDetectorMain::qDetectorMain(int argc, char **argv, QApplication *app, QWidget *
SetUpDetector();
SetUpWidgetWindow();
Initialization();
if(!configFName.empty()) LoadConfigFile(configFName);
}
@ -140,24 +143,22 @@ void qDetectorMain::SetUpWidgetWindow(){
// mode setup - to set up the tabs initially as disabled, not in form so done here
#ifdef VERBOSE
cout << "Setting Debug Mode to 0\nSetting Beamline Mode to 0\n"
"Setting Expert Mode to 0\nSetting Dockable Mode to false\n"
"Setting Developer Mode to " << isDeveloper << endl;
cout << "Setting Debug Mode to 0\n"
"Setting Expert Mode to 0\n"
"Setting Developer Mode to " << isDeveloper << ""
"\nSetting Dockable Mode to false\n" << endl;
#endif
tabs->setTabEnabled(Debugging,false);
//beamline mode to false
tabs->setTabEnabled(Advanced,false);
tabs->setTabEnabled(Developer,isDeveloper);
actionLoadTrimbits->setVisible(false);
actionSaveTrimbits->setVisible(false);
actionLoadCalibration->setVisible(false);
actionSaveCalibration->setVisible(false);
dockWidgetPlot->setFloating(false);
dockWidgetPlot->setFeatures(QDockWidget::NoDockWidgetFeatures);
tabs->setTabEnabled(Developer,isDeveloper);
if(!digitalDetector) actionExpert->setEnabled(false);
#ifdef VERBOSE
cout << "Advanced Enabled:" << digitalDetector << endl;
#endif
// Other setup
//Height of plot and central widget
heightPlotWindow = dockWidgetPlot->size().height();
@ -175,7 +176,7 @@ void qDetectorMain::SetUpDetector(){
//instantiate detector and set window title
myDet = new multiSlsDetector();
myDet = new multiSlsDetector(detID);
string host = myDet->getHostname();
//if hostname doesnt exist even in shared memory
@ -198,11 +199,10 @@ void qDetectorMain::SetUpDetector(){
// Check if type valid. If not, exit
slsDetectorDefs::detectorType detType = myDet->getDetectorsType();
switch(detType){
//digitalDetector decides if trimbits should be shown
case slsDetectorDefs::MYTHEN: digitalDetector = true; break;
case slsDetectorDefs::EIGER: digitalDetector = true; break;
case slsDetectorDefs::GOTTHARD: digitalDetector = false;break;
case slsDetectorDefs::AGIPD: digitalDetector = false;break;
case slsDetectorDefs::MYTHEN: break;
case slsDetectorDefs::EIGER: break;
case slsDetectorDefs::GOTTHARD: actionLoadTrimbits->setText("Load Settings"); actionSaveTrimbits->setText("Save Settings"); break;
case slsDetectorDefs::AGIPD: actionLoadTrimbits->setText("Load Settings"); actionSaveTrimbits->setText("Save Settings"); break;
default:
string detName = myDet->slsDetectorBase::getDetectorType(detType);
string errorMess = host+string(" has unknown detector type \"")+
@ -236,9 +236,11 @@ void qDetectorMain::Initialization(){
connect(tab_measurement, SIGNAL(EnableNthFrameSignal(bool)), tab_plot,SLOT(EnableNthFrame(bool)));
// Data Output Tab
connect(tab_dataoutput, SIGNAL(AngularConversionSignal(bool)), tab_actions,SLOT(EnablePositions(bool)));
//enable scanbox( for angles)
connect(tab_dataoutput, SIGNAL(AngularConversionSignal(bool)), tab_plot,SLOT(EnableScanBox()));
// Plot tab
connect(tab_plot, SIGNAL(DisableZoomSignal(bool)), this,SLOT(SetZoomToolTip(bool)));
// Actions tab (also for angles)
// Actions tab (only for scan)
connect(tab_actions, SIGNAL(EnableScanBox()), tab_plot,SLOT(EnableScanBox()));
//settings to advanced tab(int=id is always 0 to only refresh)
connect(tab_settings, SIGNAL(UpdateTrimbitSignal(int)), tab_advanced,SLOT(UpdateTrimbitPlot(int)));
@ -259,6 +261,23 @@ void qDetectorMain::Initialization(){
}
//-------------------------------------------------------------------------------------------------------------------------------------------------
void qDetectorMain::LoadConfigFile(const string fName){
#ifdef VERBOSe
cout << "Loading config file at start up:" << fName << endl;
#endif
QString file = QString(fName.c_str());//.section('/',-1);
if((file.contains('.'))&&(QFile::exists(file))){
if(myDet->readConfigurationFile(fName)!=slsDetectorDefs::FAIL)
qDefs::Message(qDefs::INFORMATION,"The Configuration Parameters have been loaded successfully at start up.","Main");
else qDefs::Message(qDefs::WARNING,string("Could not load the Configuration Parameters at start up from file:\n")+fName,"Main");
}else qDefs::Message(qDefs::WARNING,string("Start up configuration failed to load. The following file does not exist:\n")+fName,"Main");
}
//-------------------------------------------------------------------------------------------------------------------------------------------------
@ -274,14 +293,6 @@ void qDetectorMain::EnableModes(QAction *action){
#endif
}
//Set BeamlineMode
else if(action==actionBeamline){
enable = actionBeamline->isChecked();
#ifdef VERBOSE
cout << "Setting Beamline Mode to " << enable << endl;
#endif
}
//Set ExpertMode(comes here only if its a digital detector)
else if(action==actionExpert){
enable = actionExpert->isChecked();
@ -291,13 +302,8 @@ void qDetectorMain::EnableModes(QAction *action){
actionSaveTrimbits->setVisible(enable);
actionLoadCalibration->setVisible(enable);
actionSaveCalibration->setVisible(enable);
if(digitalDetector){
tab_measurement->SetExpertMode(enable);
tab_settings->SetExpertMode(enable);
}
tab_measurement->SetExpertMode(enable);
tab_settings->SetExpertMode(enable);
#ifdef VERBOSE
cout << "Setting Expert Mode to " << enable << endl;
#endif
@ -385,33 +391,71 @@ void qDetectorMain::ExecuteUtilities(QAction *action){
}
}
else if(action==actionLoadTrimbits){
#ifdef VERBOSE
cout << "Loading Trimbits" << endl;
#endif
QString fName = QString(myDet->getSettingsDir());
fName = QFileDialog::getOpenFileName(this,
tr("Load Detector Trimbits"),fName,
tr("Trimbit files (*.trim noise.sn*)"));
// Gets called when cancelled as well
if (!fName.isEmpty()){
if(myDet->loadSettingsFile(string(fName.toAscii().constData()),-1)!=slsDetectorDefs::FAIL)
qDefs::Message(qDefs::INFORMATION,"The Trimbits have been loaded successfully.","Main");
else qDefs::Message(qDefs::WARNING,string("Could not load the Trimbits from file:\n")+fName.toAscii().constData(),"Main");
//gotthard
if(actionLoadTrimbits->text().contains("Settings")){
#ifdef VERBOSE
cout << "Loading Settings" << endl;
#endif
fName = QFileDialog::getOpenFileName(this,
tr("Load Detector Settings"),fName,
tr("Settings files (*.settings settings.sn*)"));
// Gets called when cancelled as well
if (!fName.isEmpty()){
if(myDet->loadSettingsFile(string(fName.toAscii().constData()),-1)!=slsDetectorDefs::FAIL)
qDefs::Message(qDefs::INFORMATION,"The Settings have been loaded successfully.","Main");
else qDefs::Message(qDefs::WARNING,string("Could not load the Settings from file:\n")+fName.toAscii().constData(),"Main");
}
}//mythen and eiger
else{
#ifdef VERBOSE
cout << "Loading Trimbits" << endl;
#endif
fName = QFileDialog::getOpenFileName(this,
tr("Load Detector Trimbits"),fName,
tr("Trimbit files (*.trim noise.sn*)"));
// Gets called when cancelled as well
if (!fName.isEmpty()){
if(myDet->loadSettingsFile(string(fName.toAscii().constData()),-1)!=slsDetectorDefs::FAIL)
qDefs::Message(qDefs::INFORMATION,"The Trimbits have been loaded successfully.","Main");
else qDefs::Message(qDefs::WARNING,string("Could not load the Trimbits from file:\n")+fName.toAscii().constData(),"Main");
}
}
}
else if(action==actionSaveTrimbits){
//gotthard
if(actionLoadTrimbits->text().contains("Settings")){
#ifdef VERBOSE
cout << "Saving Trimbits" << endl;
cout << "Saving Settings" << endl;
#endif
//different output directory so as not to overwrite
QString fName = QString(myDet->getSettingsDir());
fName = QFileDialog::getSaveFileName(this,
tr("Save Current Detector Settings"),fName,
tr("Settings files (*.settings settings.sn*) "));
// Gets called when cancelled as well
if (!fName.isEmpty()){
if(myDet->saveSettingsFile(string(fName.toAscii().constData()),-1)!=slsDetectorDefs::FAIL)
qDefs::Message(qDefs::INFORMATION,"The Settings have been saved successfully.","Main");
else qDefs::Message(qDefs::WARNING,string("Could not save the Settings to file:\n")+fName.toAscii().constData(),"Main");
}
}//mythen and eiger
else{
#ifdef VERBOSE
cout << "Saving Trimbits" << endl;
#endif//different output directory so as not to overwrite
QString fName = QString(myDet->getSettingsDir());
fName = QFileDialog::getSaveFileName(this,
tr("Save Current Detector Trimbits"),fName,
tr("Trimbit files (*.trim noise.sn*) "));
// Gets called when cancelled as well
if (!fName.isEmpty()){
if(myDet->saveSettingsFile(string(fName.toAscii().constData()),-1)!=slsDetectorDefs::FAIL)
qDefs::Message(qDefs::INFORMATION,"The Trimbits have been saved successfully.","Main");
else qDefs::Message(qDefs::WARNING,string("Could not save the Trimbits to file:\n")+fName.toAscii().constData(),"Main");
QString fName = QString(myDet->getSettingsDir());
fName = QFileDialog::getSaveFileName(this,
tr("Save Current Detector Trimbits"),fName,
tr("Trimbit files (*.trim noise.sn*) "));
// Gets called when cancelled as well
if (!fName.isEmpty()){
if(myDet->saveSettingsFile(string(fName.toAscii().constData()),-1)!=slsDetectorDefs::FAIL)
qDefs::Message(qDefs::INFORMATION,"The Trimbits have been saved successfully.","Main");
else qDefs::Message(qDefs::WARNING,string("Could not save the Trimbits to file:\n")+fName.toAscii().constData(),"Main");
}
}
}
else if(action==actionLoadCalibration){
@ -579,41 +623,20 @@ void qDetectorMain::EnableTabs(){
actionSaveConfiguration->setEnabled(enable);
actionMeasurementWizard->setEnabled(enable);
actionDebug->setEnabled(enable);
actionBeamline->setEnabled(enable);
actionExpert->setEnabled(enable);
// special tabs
if(enable==false){
tabs->setTabEnabled(Debugging,enable);
tabs->setTabEnabled(Advanced,enable);
actionLoadTrimbits->setVisible(false);
actionSaveTrimbits->setVisible(false);
actionLoadCalibration->setVisible(false);
actionSaveCalibration->setVisible(false);
tabs->setTabEnabled(Developer,enable);
}
else{
// enable these tabs only if they were enabled earlier
if(actionDebug->isChecked())
tabs->setTabEnabled(Debugging,enable);
if(actionExpert->isChecked()){
tabs->setTabEnabled(Advanced,enable);
if((enable)&&(digitalDetector)){
actionLoadTrimbits->setVisible(true);
actionSaveTrimbits->setVisible(true);
actionLoadCalibration->setVisible(true);
actionSaveCalibration->setVisible(true);
}else{
actionLoadTrimbits->setVisible(false);
actionSaveTrimbits->setVisible(false);
actionLoadCalibration->setVisible(false);
actionSaveCalibration->setVisible(false);
}
}
if(isDeveloper)
tabs->setTabEnabled(Developer,enable);
}
tabs->setTabEnabled(Debugging,enable && (actionDebug->isChecked()));
tabs->setTabEnabled(Developer,enable && isDeveloper);
//expert
bool expertTab = enable && (actionExpert->isChecked());
tabs->setTabEnabled(Advanced,expertTab);
actionLoadTrimbits->setVisible(expertTab);
actionSaveTrimbits->setVisible(expertTab);
actionLoadCalibration->setVisible(expertTab);
actionSaveCalibration->setVisible(expertTab);
}

View File

@ -468,13 +468,14 @@ void qDrawPlot::SetupMeasurement(int currentIndex){
endPixel = maxPixelsY + (pixelWidth/2);
}
}
cout<<"\nnPixelsY:"<<nPixelsY<<endl;
cout<<"minPixelsY:"<<minPixelsY;
cout<<"\tmaxPixelsY:"<<maxPixelsY<<endl;
cout<<"startPixel:"<<startPixel;
cout<<"\tendPixel:"<<endPixel<<endl<<endl;
/*
cout<<"nPixelsX:"<<nPixelsX<<endl;
cout<<"nPixelsY:"<<nPixelsY<<endl;
cout<<"minPixelsY:"<<minPixelsY<<endl;
cout<<"maxPixelsY:"<<maxPixelsY<<endl;
cout<<"startPixel:"<<startPixel<<endl;
cout<<"endPixel:"<<endPixel<<endl<<endl;
*/
UnlockLastImageArray();
}
@ -520,6 +521,43 @@ int qDrawPlot::GetData(detectorData *data){
if(!plotEnable) return 0;
//angle plotting
if(anglePlot){
if(!pthread_mutex_trylock(&(last_image_complete_mutex))){
cout<<"angle plot"<<endl;
if(data->angles==NULL){
cout<<"\n\nWARNING:RETURNED NULL instead of angles."<<endl;
lastImageNumber= currentFrame+1;
nAnglePixelsX = nPixelsX;
histNBins = nAnglePixelsX;
nHists=1;
memcpy(histXAngleAxis,histXAxis,nAnglePixelsX*sizeof(double));
memcpy(histYAngleAxis,data->values,nAnglePixelsX*sizeof(double));
SetHistXAxisTitle("Channel Number");
}
else{
lastImageNumber= currentFrame+1;
nAnglePixelsX = data->npoints;
histNBins = nAnglePixelsX;
nHists=1;
if(histXAngleAxis) delete [] histXAngleAxis; histXAngleAxis = new double[nAnglePixelsX];
if(histYAngleAxis) delete [] histYAngleAxis; histYAngleAxis = new double[nAnglePixelsX];
memcpy(histXAngleAxis,data->angles,nAnglePixelsX*sizeof(double));
memcpy(histYAngleAxis,data->values,nAnglePixelsX*sizeof(double));
SetHistXAxisTitle("Angles");
}
pthread_mutex_unlock(&(last_image_complete_mutex));
}
currentFrame++;
return 0;
}
//Nth Frame
if(frameFactor){
//plots if numfactor becomes 0
@ -535,7 +573,7 @@ int qDrawPlot::GetData(detectorData *data){
//Not Nth Frame, to check time out(NOT for 2dScans and angle plots)
else{
if((scanArgument==None)&&(!anglePlot)){
if(scanArgument==None){
//if the time is not over, RETURN
if(!data_pause_over){
return 0;
@ -548,25 +586,6 @@ int qDrawPlot::GetData(detectorData *data){
//angle plotting
if(anglePlot){
if(!pthread_mutex_trylock(&(last_image_complete_mutex))){
lastImageNumber= currentFrame+1;
nAnglePixelsX = data->npoints;
histNBins = nAnglePixelsX;
nHists=1;
if(histXAngleAxis) delete [] histXAngleAxis; histXAngleAxis = new double[nAnglePixelsX];
if(histYAngleAxis) delete [] histYAngleAxis; histYAngleAxis = new double[nAnglePixelsX];
memcpy(histXAngleAxis,data->angles,nAnglePixelsX*sizeof(double));
memcpy(histYAngleAxis,data->values,nAnglePixelsX*sizeof(double));
pthread_mutex_unlock(&(last_image_complete_mutex));
}
currentFrame++;
return 0;
}
//if scan argument is 2d
if(scanArgument!=None){
//alframes
@ -708,9 +727,12 @@ int qDrawPlot::GetAcquisitionFinishedCallBack(double currentProgress,int detecto
int qDrawPlot::AcquisitionFinished(double currentProgress, int detectorStatus){
#ifdef VERBOSE
cout << "\nEntering Acquisition Finished with status " ;
#endif
QString status = QString(slsDetectorBase::runStatusType(slsDetectorDefs::runStatus(detectorStatus)).c_str());
#ifdef VERBOSE
cout << "\nEntering Acquisition Finished with status " << status.toAscii().constData() << " and progress " << currentProgress << endl;
cout << status.toAscii().constData() << " and progress " << currentProgress << endl;
#endif
//error or stopped
if((stop_signal)||(detectorStatus==slsDetectorDefs::ERROR)){
@ -766,7 +788,8 @@ int qDrawPlot::MeasurementFinished(int currentMeasurementIndex, int fileIndex){
cout << "Entering Measurement Finished with currentMeasurement " << currentMeasurementIndex << " and fileIndex " << fileIndex << endl;
#endif
//to make sure it plots the last frame before setting lastimagearray all to 0
if(plot_in_scope==2) usleep(500000);
//if(plot_in_scope==2)
usleep(500000);
currentMeasurement = currentMeasurementIndex + 1;
#ifdef VERBOSE
@ -827,6 +850,9 @@ void qDrawPlot::UpdatePlot(){
//1-d plot stuff
if(plot_in_scope==1){
if(lastImageNumber){
#ifdef VERYVERBOSE
cout << "Last Image Number:" << lastImageNumber << endl;
#endif
if(histNBins){
Clear1DPlot();
plot1D->SetXTitle(histXAxisTitle.toAscii().constData());
@ -902,7 +928,9 @@ void qDrawPlot::UpdatePlot(){
else
plot_update_timer->start((int)PLOT_TIMER_MS);
}
#ifdef VERYVERBOSE
cout << "Exiting UpdatePlot function" << endl;
#endif
}
@ -1071,20 +1099,6 @@ void qDrawPlot::SavePlot(){
}
//-------------------------------------------------------------------------------------------------------------------------------------------------
/*
void qDrawPlot::SaveAll(bool enable){
string msg = string("The Files will be saved as:\n")+
string(myDet->getFilePath().c_str())+string("/")+
string(myDet->getFileName().c_str())+string("[title].png");
qDefs::Message(qDefs::INFORMATION,msg,"Dock");
saveAll = enable;
}
*/
//-------------------------------------------------------------------------------------------------------------------------------------------------

View File

@ -324,7 +324,6 @@ void qTabActions::SetPosition(){
qDefs::Message(qDefs::WARNING,"The positions list was not set for some reason.","Actions");
emit EnableScanBox();
}
@ -375,6 +374,7 @@ void qTabActions::EnablePositions(bool enable){
lblName[NumPositions]->setEnabled(false);
btnExpand[NumPositions]->setEnabled(false);
}
}
@ -383,7 +383,7 @@ void qTabActions::EnablePositions(bool enable){
void qTabActions::Refresh(){
#ifdef VERBOSE
cout << "\nUpdating all action widgets: " << endl;
cout << endl <<"**Updating all action widgets: " << endl;
#endif
if((detType == slsDetectorDefs::MYTHEN) || (detType == slsDetectorDefs::GOTTHARD)){
//positions is enabled only if angular conversion is enabled
@ -428,8 +428,10 @@ void qTabActions::Refresh(){
scanWidget[i]->Refresh();
for(int i=0;i<qActionsWidget::NUM_ACTION_WIDGETS;i++)
actionWidget[i]->Refresh();
cout << endl;
UpdateCollapseColors();
#ifdef VERBOSE
cout << "**Updated all action widgets: " << endl << endl;
#endif
}

View File

@ -21,7 +21,7 @@ using namespace std;
qTabAdvanced::qTabAdvanced(QWidget *parent,multiSlsDetector*& detector, qDrawPlot*& plot):
QWidget(parent),myDet(detector),myPlot(plot),btnGroup(NULL){
QWidget(parent),myDet(detector),myPlot(plot),btnGroup(NULL),isEnergy(false),isAngular(false){
setupUi(this);
SetupWidgetWindow();
}
@ -42,27 +42,42 @@ qTabAdvanced::~qTabAdvanced(){
void qTabAdvanced::SetupWidgetWindow(){
//executed even for non digital, so make sure its necessary
slsDetectorDefs::detectorType detType = myDet->getDetectorsType();
if((detType==slsDetectorDefs::MYTHEN)||(detType==slsDetectorDefs::EIGER)){
outputDirTip = dispFile->toolTip();
errOutputTip = QString("<br><br><font color=\"red\"><nobr>"
"<b>Output Trim File</b> should contain both existing directory and a file name.</nobr><br>"
"<nobr>The extensions are automatically added.</nobr><br><br>"
"<nobr>Enter valid<b> Output Trim File</b> to enable <b>Start Trimming</b> button.</nobr></font>");
red = QPalette();
red.setColor(QPalette::Active,QPalette::WindowText,Qt::red);
boxTrimming->setChecked(false);
SetOptimize(false);
btnGroup = new QButtonGroup(this);
btnGroup->addButton(btnRefresh,0);
btnGroup->addButton(btnGetTrimbits,1);
switch(detType){
case slsDetectorDefs::MYTHEN: isEnergy = true; isAngular = true; break;
case slsDetectorDefs::EIGER: isEnergy = true; isAngular = false; break;
case slsDetectorDefs::GOTTHARD: isEnergy = false; isAngular = true; break;
default: break;
}
if(!isAngular && !isEnergy) boxLogs->setEnabled(false);
else{
if(!isAngular) chkAngularLog->setEnabled(false);
if(!isEnergy){
chkEnergyLog->setEnabled(false);
boxPlot->setEnabled(false);
boxTrimming->setEnabled(false);
}
else{
outputDirTip = dispFile->toolTip();
errOutputTip = QString("<br><br><font color=\"red\"><nobr>"
"<b>Output Trim File</b> should contain both existing directory and a file name.</nobr><br>"
"<nobr>The extensions are automatically added.</nobr><br><br>"
"<nobr>Enter valid<b> Output Trim File</b> to enable <b>Start Trimming</b> button.</nobr></font>");
red = QPalette();
red.setColor(QPalette::Active,QPalette::WindowText,Qt::red);
boxTrimming->setChecked(false);
SetOptimize(false);
btnGroup = new QButtonGroup(this);
btnGroup->addButton(btnRefresh,0);
btnGroup->addButton(btnGetTrimbits,1);
}
Initialization();
}
}
@ -71,35 +86,38 @@ void qTabAdvanced::SetupWidgetWindow(){
void qTabAdvanced::Initialization(){
//energy/angular logs
connect(chkEnergyLog, SIGNAL(toggled(bool)), this, SLOT(SetLogs()));
connect(chkAngularLog, SIGNAL(toggled(bool)), this, SLOT(SetLogs()));
if(isAngular)
connect(chkEnergyLog, SIGNAL(toggled(bool)), this, SLOT(SetLogs()));
//exptime
connect(spinExpTime, SIGNAL(valueChanged(double)), this, SLOT(SetExposureTime()));
connect(comboExpUnit, SIGNAL(currentIndexChanged(int)), this, SLOT(SetExposureTime()));
if(isEnergy){
connect(chkAngularLog, SIGNAL(toggled(bool)), this, SLOT(SetLogs()));
//threshold dac
connect(spinThreshold, SIGNAL(valueChanged(double)), this, SLOT(SetThreshold()));
//exptime
connect(spinExpTime, SIGNAL(valueChanged(double)), this, SLOT(SetExposureTime()));
connect(comboExpUnit, SIGNAL(currentIndexChanged(int)), this, SLOT(SetExposureTime()));
//output directory
connect(dispFile, SIGNAL(editingFinished()), this, SLOT(SetOutputFile()));
connect(btnFile, SIGNAL(clicked()), this, SLOT(BrowseOutputFile()));
//threshold dac
connect(spinThreshold, SIGNAL(valueChanged(double)), this, SLOT(SetThreshold()));
//enable trimming method group box
connect(boxTrimming, SIGNAL(toggled(bool)), this, SLOT(EnableTrimming(bool)));
//output directory
connect(dispFile, SIGNAL(editingFinished()), this, SLOT(SetOutputFile()));
connect(btnFile, SIGNAL(clicked()), this, SLOT(BrowseOutputFile()));
//trimming method combo
connect(comboMethod, SIGNAL(currentIndexChanged(int)), this, SLOT(SetTrimmingMethod(int)));
//enable trimming method group box
connect(boxTrimming, SIGNAL(toggled(bool)), this, SLOT(EnableTrimming(bool)));
//method options
connect(chkOptimize, SIGNAL(toggled(bool)), this, SLOT(SetOptimize(bool)));
//trimming method combo
connect(comboMethod, SIGNAL(currentIndexChanged(int)), this, SLOT(SetTrimmingMethod(int)));
//start Trimming
connect(btnStart, SIGNAL(clicked()), this, SLOT(StartTrimming()));
//method options
connect(chkOptimize, SIGNAL(toggled(bool)), this, SLOT(SetOptimize(bool)));
//refresh
connect(btnGroup, SIGNAL(buttonClicked(int)), this, SLOT(UpdateTrimbitPlot(int)));
//start Trimming
connect(btnStart, SIGNAL(clicked()), this, SLOT(StartTrimming()));
//refresh
connect(btnGroup, SIGNAL(buttonClicked(int)), this, SLOT(UpdateTrimbitPlot(int)));
}
}
@ -295,7 +313,7 @@ void qTabAdvanced::SetTrimmingMethod(int mode){
void qTabAdvanced::StartTrimming(){
int parameter1, parameter2;
int parameter1=0, parameter2=0;
//optimize
bool optimize = chkOptimize->isChecked();
@ -364,45 +382,66 @@ void qTabAdvanced::UpdateTrimbitPlot(int id){
void qTabAdvanced::Refresh(){
//disconnect
disconnect(chkEnergyLog, SIGNAL(toggled(bool)), this, SLOT(SetLogs()));
disconnect(chkAngularLog, SIGNAL(toggled(bool)), this, SLOT(SetLogs()));
disconnect(spinExpTime, SIGNAL(valueChanged(double)), this, SLOT(SetExposureTime()));
disconnect(comboExpUnit, SIGNAL(currentIndexChanged(int)), this, SLOT(SetExposureTime()));
disconnect(spinThreshold, SIGNAL(valueChanged(double)), this, SLOT(SetThreshold()));
//energy/angular logs
chkEnergyLog->setChecked(myDet->getActionMode(slsDetectorDefs::enCalLog));
chkAngularLog->setChecked(myDet->getActionMode(slsDetectorDefs::angCalLog));
#ifdef VERBOSE
cout << "Energy Calibration Log set to " << chkEnergyLog->isChecked() << endl;
cout << "Angular Calibration Log set to " << chkAngularLog->isChecked() << endl;
cout << endl << "**Updating Advanced Tab" << endl;
#endif
//exptime
qDefs::timeUnit unit;
double time = qDefs::getCorrectTime(unit,((double)(myDet->setTimer(slsDetectorDefs::ACQUISITION_TIME,-1)*(1E-9))));
if(isAngular){
#ifdef VERBOSE
cout << "Getting acquisition time : " << time << qDefs::getUnitString(unit) << endl;
cout << "Angular Calibration Log set to " << chkAngularLog->isChecked() << endl;
#endif
spinExpTime->setValue(time);
comboExpUnit->setCurrentIndex((int)unit);
disconnect(chkAngularLog, SIGNAL(toggled(bool)), this, SLOT(SetLogs()));
chkAngularLog->setChecked(myDet->getActionMode(slsDetectorDefs::angCalLog));
connect(chkAngularLog, SIGNAL(toggled(bool)), this, SLOT(SetLogs()));
}
//threshold
double threshold = (double)myDet->setDAC(-1,slsDetectorDefs::THRESHOLD);
if(isEnergy){
//disconnect
disconnect(chkEnergyLog, SIGNAL(toggled(bool)), this, SLOT(SetLogs()));
disconnect(spinExpTime, SIGNAL(valueChanged(double)), this, SLOT(SetExposureTime()));
disconnect(comboExpUnit, SIGNAL(currentIndexChanged(int)), this, SLOT(SetExposureTime()));
disconnect(spinThreshold, SIGNAL(valueChanged(double)), this, SLOT(SetThreshold()));
//energy/angular logs
chkEnergyLog->setChecked(myDet->getActionMode(slsDetectorDefs::enCalLog));
#ifdef VERBOSE
cout << "Energy Calibration Log set to " << chkEnergyLog->isChecked() << endl;
#endif
//exptime
qDefs::timeUnit unit;
double time = qDefs::getCorrectTime(unit,((double)(myDet->setTimer(slsDetectorDefs::ACQUISITION_TIME,-1)*(1E-9))));
#ifdef VERBOSE
cout << "Getting acquisition time : " << time << qDefs::getUnitString(unit) << endl;
#endif
spinExpTime->setValue(time);
comboExpUnit->setCurrentIndex((int)unit);
//threshold
double threshold = (double)myDet->setDAC(-1,slsDetectorDefs::THRESHOLD);
#ifdef VERBOSE
cout << "Getting Threshold DACu : " << threshold << endl;
#endif
spinThreshold->setValue(threshold);
spinThreshold->setValue(threshold);
//connect
connect(chkEnergyLog, SIGNAL(toggled(bool)), this, SLOT(SetLogs()));
connect(chkAngularLog, SIGNAL(toggled(bool)), this, SLOT(SetLogs()));
connect(spinExpTime, SIGNAL(valueChanged(double)), this, SLOT(SetExposureTime()));
connect(comboExpUnit, SIGNAL(currentIndexChanged(int)), this, SLOT(SetExposureTime()));
connect(spinThreshold, SIGNAL(valueChanged(double)), this, SLOT(SetThreshold()));
//connect
connect(chkEnergyLog, SIGNAL(toggled(bool)), this, SLOT(SetLogs()));
connect(spinExpTime, SIGNAL(valueChanged(double)), this, SLOT(SetExposureTime()));
connect(comboExpUnit, SIGNAL(currentIndexChanged(int)), this, SLOT(SetExposureTime()));
connect(spinThreshold, SIGNAL(valueChanged(double)), this, SLOT(SetThreshold()));
}
#ifdef VERBOSE
cout << "**Updated Advanced Tab" << endl << endl;
#endif
}

View File

@ -30,8 +30,6 @@ qTabDataOutput::qTabDataOutput(QWidget *parent,multiSlsDetector*& detector):
QWidget(parent),myDet(detector){
setupUi(this);
SetupWidgetWindow();
Initialization();
Refresh();
}
@ -66,6 +64,52 @@ void qTabDataOutput::SetupWidgetWindow(){
QString("<nobr><font color=\"red\">"
"Enter a valid file to enable Flat Field.</font></nobr>");
Initialization();
// output dir
#ifdef VERBOSE
cout << "Getting output directory" << endl;
#endif
dispOutputDir->setText(QString(myDet->getFilePath().c_str()));
//flat field correction from server
#ifdef VERBOSE
cout << "Getting flat field" << endl;
#endif
UpdateFlatFieldFromServer();
//rate correction - not for charge integrating detectors
if((detType == slsDetectorDefs::MYTHEN)||(detType == slsDetectorDefs::EIGER)){
#ifdef VERBOSE
cout << "Getting rate correction" << endl;
#endif
UpdateRateCorrectionFromServer();
}
//update angular conversion from server
if((detType == slsDetectorDefs::MYTHEN)||(detType == slsDetectorDefs::GOTTHARD)){
#ifdef VERBOSE
cout << "Getting angular conversion" << endl;
#endif
int ang;
if(myDet->getAngularConversion(ang))
chkAngular->setChecked(true);
emit AngularConversionSignal(chkAngular->isChecked());
}
//discard bad channels from server
#ifdef VERBOSE
cout << "Getting bad channel correction" << endl;
#endif
if(myDet->getBadChannelCorrection()) chkDiscardBad->setChecked(true);
}
@ -396,22 +440,56 @@ void qTabDataOutput::DiscardBadChannels(){
void qTabDataOutput::Refresh(){
#ifdef VERBOSE
cout << endl << "**Updating DataOutput Tab" << endl;
#endif
// output dir
#ifdef VERBOSE
cout << "Getting output directory" << endl;
#endif
dispOutputDir->setText(QString(myDet->getFilePath().c_str()));
//flat field correction from server
#ifdef VERBOSE
cout << "Getting flat field" << endl;
#endif
UpdateFlatFieldFromServer();
//rate correction - not for charge integrating detectors
if((detType == slsDetectorDefs::MYTHEN)||(detType == slsDetectorDefs::EIGER))
if((detType == slsDetectorDefs::MYTHEN)||(detType == slsDetectorDefs::EIGER)){
#ifdef VERBOSE
cout << "Getting rate correction" << endl;
#endif
UpdateRateCorrectionFromServer();
}
//update angular conversion from server
if((detType == slsDetectorDefs::MYTHEN)||(detType == slsDetectorDefs::GOTTHARD)){
#ifdef VERBOSE
cout << "Getting angular conversion" << endl;
#endif
int ang;
if(myDet->getAngularConversion(ang))
chkAngular->setChecked(true);
emit AngularConversionSignal(chkAngular->isChecked());
}
//discard bad channels from server
#ifdef VERBOSE
cout << "Getting bad channel correction" << endl;
#endif
if(myDet->getBadChannelCorrection()) chkDiscardBad->setChecked(true);
#ifdef VERBOSE
cout << "**Updated DataOutput Tab" << endl << endl;
#endif
}

View File

@ -112,6 +112,9 @@ void qTabDebugging::Initialization(){
void qTabDebugging::UpdateModuleList(){
#ifdef VERBOSE
cout << "Getting Module List" << endl;
#endif
det = myDet->getSlsDetector(comboDetector->currentIndex());
//deletes all modules except "all modules"
for(int i=0;i<comboModule->count()-1;i++)
@ -127,6 +130,9 @@ void qTabDebugging::UpdateModuleList(){
void qTabDebugging::UpdateStatus(){
#ifdef VERBOSE
cout << "Getting Status" << endl;
#endif
det = myDet->getSlsDetector(comboDetector->currentIndex());
int detStatus = (int)det->getRunStatus();
string status = slsDetectorBase::runStatusType(slsDetectorDefs::runStatus(detStatus));
@ -140,6 +146,9 @@ void qTabDebugging::UpdateStatus(){
void qTabDebugging::GetInfo(){
#ifdef VERBOSE
cout << "Getting Info" << endl;
#endif
//window
QFrame* popup1 = new QFrame(this, Qt::Popup | Qt::SubWindow );
QList<QTreeWidgetItem *> items;
@ -477,8 +486,13 @@ void qTabDebugging::TestDetector(){
void qTabDebugging::Refresh(){
#ifdef VERBOSE
cout << endl << "**Updating Debugging Tab" << endl;
#endif
UpdateStatus();
#ifdef VERBOSE
cout << "**Updated Debugging Tab" << endl << endl;
#endif
}

View File

@ -313,7 +313,11 @@ void qTabDeveloper::RefreshAdcs(){
void qTabDeveloper::Refresh(){
#ifdef VERBOSE
cout << "Updating Dacs and Adcs" <<endl;
cout << endl << "**Updating Developer Tab" << endl;
#endif
#ifdef VERBOSE
cout << "Gettings DACs" << endl;
#endif
//dacs
for(int i=0;i<NUM_DAC_WIDGETS;i++)
@ -331,7 +335,7 @@ void qTabDeveloper::Refresh(){
lblHV->setToolTip(tipHV);
comboHV->setToolTip(tipHV);
//getting hv value
int ret = myDet->setDAC(-1,slsDetectorDefs::HV_POT);
int ret = (int)myDet->setDAC(-1,slsDetectorDefs::HV_POT);
switch(ret){
case 0: comboHV->setCurrentIndex(0);break;
case 90: comboHV->setCurrentIndex(1);break;
@ -353,6 +357,9 @@ void qTabDeveloper::Refresh(){
connect(comboHV, SIGNAL(currentIndexChanged(int)), this, SLOT(SetHighVoltage()));
}
#ifdef VERBOSE
cout << "**Updated Developer Tab" << endl << endl;
#endif
}

View File

@ -726,16 +726,35 @@ void qTabMeasurement::EnableFileWrite(bool enable){
void qTabMeasurement::Refresh(){
#ifdef VERBOSE
cout << endl << "**Updating Measurement Tab" << endl;
#endif
if(!myPlot->isRunning()){
//Number of measurements
#ifdef VERBOSE
cout << "Getting number of measurements" << endl;
#endif
spinNumMeasurements->setValue((int)myDet->setTimer(slsDetectorDefs::MEASUREMENTS_NUMBER,-1));
//File Name
#ifdef VERBOSE
cout << "Getting file name" << endl;
#endif
dispFileName->setText(QString(myDet->getFileName().c_str()));
//File Index
#ifdef VERBOSE
cout << "Getting file index" << endl;
#endif
spinIndex->setValue(myDet->getFileIndex());cout<<"file index:"<<myDet->getFileIndex()<<endl;
//progress label index
lblProgressIndex->setText(QString::number(myDet->getFileIndex()));
//Timing mode*
//Timing mode
SetupTimingMode();
// to let qdrawplot know that triggers or frames are used
@ -743,6 +762,9 @@ void qTabMeasurement::Refresh(){
myPlot->setTriggerEnabled(lblNumTriggers->isEnabled());
}
#ifdef VERBOSE
cout << "**Updated Measurement Tab" << endl << endl;
#endif
}

View File

@ -506,9 +506,9 @@ void qTabPlot::EnableScanBox(){
//if it was checked before or disabled before, it remembers to check it again
bool checkedBefore = boxScan->isChecked();//||(!boxScan->isEnabled()));
int ang;
//none of these scan plotting options make sense if positions>0
bool positionsExist = myDet->getPositions();
bool positionsExist = myDet->getAngularConversion(ang);//myDet->getPositions();
//only now enable/disable
boxScan->setEnabled((mode0||mode1)&&(!positionsExist));
@ -603,6 +603,7 @@ void qTabPlot::SetScanArgument(){
}
Select1DPlot(isOrginallyOneD);
int ang;
//if scans(1D or 2D)
if(boxScan->isEnabled()){
//setting the title according to the scans
@ -613,7 +614,8 @@ void qTabPlot::SetScanArgument(){
Select1DPlot(isOrginallyOneD);
}//angles (1D)
else if(myDet->getPositions()){
else if(myDet->getAngularConversion(ang)){
//else if(myDet->getPositions()){
//if scan, change title
if((myDet->getScanMode(0))||(myDet->getScanMode(1))){
QString mainTitle = QString(" Level 0 : ") + modeNames[myDet->getScanMode(0)] +
@ -674,6 +676,9 @@ void qTabPlot::SetScanArgument(){
void qTabPlot::Refresh(){
#ifdef VERBOSE
cout << endl << "**Updating Plot Tab" << endl;
#endif
if(!myPlot->isRunning()){
connect(boxScan, SIGNAL(toggled(bool)), this, SLOT(EnableScanBox()));
SetFrequency();
@ -682,6 +687,9 @@ void qTabPlot::Refresh(){
disconnect(boxScan, SIGNAL(toggled(bool)), this, SLOT(EnableScanBox()));
boxScan->setEnabled(false);
}
#ifdef VERBOSE
cout << "**Updated Plot Tab" << endl << endl;
#endif
}

View File

@ -56,6 +56,7 @@ void qTabSettings::SetupWidgetWindow(){
// Dynamic Range
switch(myDet->setDynamicRange(-1)){
case 32: comboDynamicRange->setCurrentIndex(0); break;
case 24: comboDynamicRange->setCurrentIndex(0); break;
case 16: comboDynamicRange->setCurrentIndex(1); break;
case 8: comboDynamicRange->setCurrentIndex(2); break;
case 4: comboDynamicRange->setCurrentIndex(3); break;
@ -214,10 +215,11 @@ void qTabSettings::SetDynamicRange(int index){
case 3: dr=4; break;
default: dr=32; break;
}
ret=myDet->setDynamicRange(dr);
if((ret==24)&&(dr==32)) dr = ret;
#ifdef VERBOSE
cout << "Setting dynamic range to "<< dr << endl;
#endif
ret=myDet->setDynamicRange(dr);
if(ret!=dr){
qDefs::Message(qDefs::WARNING,"Dynamic Range cannot be set to this value.","Settings");
#ifdef VERBOSE
@ -225,6 +227,7 @@ void qTabSettings::SetDynamicRange(int index){
#endif
switch(ret){
case 32: comboDynamicRange->setCurrentIndex(0); break;
case 24: comboDynamicRange->setCurrentIndex(0); break;
case 16: comboDynamicRange->setCurrentIndex(1); break;
case 8: comboDynamicRange->setCurrentIndex(2); break;
case 4: comboDynamicRange->setCurrentIndex(3); break;
@ -246,11 +249,10 @@ void qTabSettings::SetEnergy(){
int ret = (int)myDet->getThresholdEnergy();
if((ret-index)>200){
qDefs::Message(qDefs::WARNING,"Threshold energy could not be set. The difference is greater than 200.","Settings");
disconnect(spinThreshold, SIGNAL(valueChanged(int)), this, SLOT(SetEnergy()));
spinThreshold->setValue(ret);
connect(spinThreshold, SIGNAL(valueChanged(int)), this, SLOT(SetEnergy()));
}
disconnect(spinThreshold, SIGNAL(valueChanged(int)), this, SLOT(SetEnergy()));
spinThreshold->setValue(ret);
connect(spinThreshold, SIGNAL(valueChanged(int)), this, SLOT(SetEnergy()));
}
@ -258,19 +260,34 @@ void qTabSettings::SetEnergy(){
void qTabSettings::Refresh(){
#ifdef VERBOSE
cout << endl << "**Updating Settings Tab" << endl;
#endif
// Settings
#ifdef VERBOSE
cout << "Getting settings" << endl;
#endif
SetupDetectorSettings();
//changin the combo settings also plots the trimbits for mythen and eiger, so disconnect
disconnect(comboSettings, SIGNAL(currentIndexChanged(int)), this, SLOT(setSettings(int)));
comboSettings->setCurrentIndex(myDet->getSettings());
connect(comboSettings, SIGNAL(currentIndexChanged(int)), this, SLOT(setSettings(int)));
// Number of Modules
#ifdef VERBOSE
cout << "Getting number of modules" << endl;
#endif
spinNumModules->setValue(myDet->setNumberOfModules());
// Dynamic Range
#ifdef VERBOSE
cout << "Getting dynamic range" << endl;
#endif
switch(myDet->setDynamicRange(-1)){
case 32: comboDynamicRange->setCurrentIndex(0); break;
case 24: comboDynamicRange->setCurrentIndex(0); break;
case 16: comboDynamicRange->setCurrentIndex(1); break;
case 8: comboDynamicRange->setCurrentIndex(2); break;
case 4: comboDynamicRange->setCurrentIndex(3); break;
@ -287,11 +304,16 @@ void qTabSettings::Refresh(){
}else{
lblThreshold->setEnabled(true);
spinThreshold->setEnabled(true);
#ifdef VERBOSE
cout << "Getting threshold energy" << endl;
#endif
SetEnergy();
}
}
#ifdef VERBOSE
cout << "**Updated Settings Tab" << endl << endl;
#endif
}