adjusted gui for moench and proper 2d plots, which are not scans for 1ds

git-svn-id: file:///afs/psi.ch/project/sls_det_software/svn/slsDetectorGui@172 af1100a4-978c-4157-bff7-07162d2ba061
This commit is contained in:
l_maliakal_d 2013-04-16 13:43:28 +00:00
parent 050bec703d
commit c605c77037
13 changed files with 224 additions and 130 deletions

View File

@ -255,6 +255,20 @@ static const int64_t GUI_VERSION=0x20121213;
//------------------------------------------------------------------------------------------------------------------------------------------------- //-------------------------------------------------------------------------------------------------------------------------------------------------
/** scan arguments*/
enum scanArgumentList{
None,
Level0,
Level1,
FileIndex,
AllFrames
};
//-------------------------------------------------------------------------------------------------------------------------------------------------
}; };

View File

@ -125,8 +125,7 @@ public:
* and this is reset when the gui really starts/stops- to know when to return * and this is reset when the gui really starts/stops- to know when to return
*/ */
bool GetClientInitiated(){return clientInitiated;}; bool GetClientInitiated(){return clientInitiated;};
/** Unzoom plot 2d as it will affect scans */
void plot2DUnzoom();
public slots: public slots:
/** To select 1D or 2D plot /** To select 1D or 2D plot
@ -460,7 +459,6 @@ bool isFrameEnabled;
bool isTriggerEnabled; bool isTriggerEnabled;
/** scan arguments*/ /** scan arguments*/
enum scanArgumentList{None,Level0,Level1,FileIndex,AllFrames};
int scanArgument; int scanArgument;
/** enable angle plot */ /** enable angle plot */
@ -482,6 +480,10 @@ bool backwardScanPlot;
bool fileSaveEnable; bool fileSaveEnable;
/** true of originally 2d */
bool originally2D;
//pedstal //pedstal
/** Number of pedestal frames*/ /** Number of pedestal frames*/
static const int NUM_PEDESTAL_FRAMES = 20; static const int NUM_PEDESTAL_FRAMES = 20;

View File

@ -2,10 +2,10 @@
#define SVNURL "file:///afs/psi.ch/project/sls_det_software/svn/slsDetectorGui" #define SVNURL "file:///afs/psi.ch/project/sls_det_software/svn/slsDetectorGui"
//#define SVNREPPATH "" //#define SVNREPPATH ""
#define SVNREPUUID "af1100a4-978c-4157-bff7-07162d2ba061" #define SVNREPUUID "af1100a4-978c-4157-bff7-07162d2ba061"
//#define SVNREV 0x167 //#define SVNREV 0x171
//#define SVNKIND "" //#define SVNKIND ""
//#define SVNSCHED "" //#define SVNSCHED ""
#define SVNAUTH "l_maliakal_d" #define SVNAUTH "l_maliakal_d"
#define SVNREV 0x167 #define SVNREV 0x171
#define SVNDATE 0x20130315 #define SVNDATE 0x20130410
// //

View File

@ -255,11 +255,14 @@ void SlsQt2DPlot::Update(){
setAxisScale(QwtPlot::yRight,zInterval.minValue(), zInterval.maxValue()); setAxisScale(QwtPlot::yRight,zInterval.minValue(), zInterval.maxValue());
#ifdef VERYVERBOSE
cout << "axis scale set" << endl; cout << "axis scale set" << endl;
#endif
plotLayout()->setAlignCanvasToScales(true); plotLayout()->setAlignCanvasToScales(true);
#ifdef VERYVERBOSE
cout << "layout" << endl; cout << "layout" << endl;
#endif #endif
#endif
#ifdef VERYVERBOSE #ifdef VERYVERBOSE
cout << "going to replot" << endl; cout << "going to replot" << endl;
#endif #endif

View File

@ -231,6 +231,7 @@ void qDetectorMain::SetUpDetector(const string fName){
case slsDetectorDefs::EIGER: break; case slsDetectorDefs::EIGER: break;
case slsDetectorDefs::GOTTHARD: actionLoadTrimbits->setText("Load Settings"); actionSaveTrimbits->setText("Save Settings"); 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; case slsDetectorDefs::AGIPD: actionLoadTrimbits->setText("Load Settings"); actionSaveTrimbits->setText("Save Settings"); break;
case slsDetectorDefs::MOENCH: actionLoadTrimbits->setText("Load Settings"); actionSaveTrimbits->setText("Save Settings"); break;
default: default:
string detName = myDet->slsDetectorBase::getDetectorType(detType); string detName = myDet->slsDetectorBase::getDetectorType(detType);
qDefs::checkErrorMessage(myDet); qDefs::checkErrorMessage(myDet);

View File

@ -60,6 +60,19 @@ void qDrawPlot::SetupWidgetWindow(){
#ifdef VERBOSE #ifdef VERBOSE
cout << "Setting up plot variables" << endl; cout << "Setting up plot variables" << endl;
#endif #endif
// Depending on whether the detector is 1d or 2d
switch(myDet->getDetectorsType()){
case slsDetectorDefs::MYTHEN: originally2D = false; break;
case slsDetectorDefs::EIGER: originally2D = true; break;
case slsDetectorDefs::GOTTHARD: originally2D = false; break;
case slsDetectorDefs::MOENCH: originally2D = true; break;
default:
cout << "ERROR: Detector Type is Generic" << endl;
exit(-1);
}
data_pause_over = true;//to get the first image data_pause_over = true;//to get the first image
currentMeasurement = 0; currentMeasurement = 0;
@ -95,8 +108,8 @@ void qDrawPlot::SetupWidgetWindow(){
plotTitle = ""; plotTitle = "";
plotTitle_prefix = ""; plotTitle_prefix = "";
plot_in_scope = 0; plot_in_scope = 0;
nPixelsX = myDet->getTotalNumberOfChannels(); nPixelsX = myDet->getTotalNumberOfChannels(slsDetectorDefs::X); cout<<"nPixelsX:"<<nPixelsX<<endl;
nPixelsY = 100; nPixelsY = myDet->getTotalNumberOfChannels(slsDetectorDefs::Y); cout<<"nPixelsY:"<<nPixelsY<<endl;
nAnglePixelsX = 1; nAnglePixelsX = 1;
minPixelsY = 0; minPixelsY = 0;
maxPixelsY = 0; maxPixelsY = 0;
@ -154,7 +167,7 @@ void qDrawPlot::SetupWidgetWindow(){
isFrameEnabled = false; isFrameEnabled = false;
isTriggerEnabled = false; isTriggerEnabled = false;
scanArgument = None; scanArgument = qDefs::None;
anglePlot = false; anglePlot = false;
alreadyDisplayed = false; alreadyDisplayed = false;
@ -406,8 +419,9 @@ bool qDrawPlot::StartOrStopThread(bool start){
//sets up the measurement parameters //sets up the measurement parameters
SetupMeasurement(); SetupMeasurement();
//refixing all the min and max for 2ds if zoomed in //refixing all the min and max for all scans
if (scanArgument != None) if (scanArgument == qDefs::None);
else
plot2D->GetPlot()->SetZoom(-0.5,startPixel,nPixelsX,endPixel-startPixel); plot2D->GetPlot()->SetZoom(-0.5,startPixel,nPixelsX,endPixel-startPixel);
@ -432,7 +446,7 @@ bool qDrawPlot::StartOrStopThread(bool start){
void qDrawPlot::SetScanArgument(int scanArg){ void qDrawPlot::SetScanArgument(int scanArg){
#ifdef VERBOSE #ifdef VERBOSE
cout << "SetScanArgument function:" << running << endl; cout << "SetScanArgument function:" << scanArg << " running:" << running << endl;
#endif #endif
scanArgument = scanArg; scanArgument = scanArg;
@ -442,11 +456,11 @@ void qDrawPlot::SetScanArgument(int scanArg){
LockLastImageArray(); LockLastImageArray();
nPixelsX = myDet->getTotalNumberOfChannels(); nPixelsX = myDet->getTotalNumberOfChannels(slsDetectorDefs::X);
nPixelsY = 100;//if number of exposures, this should be checked before acquisition nPixelsY = myDet->getTotalNumberOfChannels(slsDetectorDefs::Y);
//cannot do this in between measurements , so update instantly //cannot do this in between measurements , so update instantly
if(scanArgument==Level0){ if(scanArgument==qDefs::Level0){
//no need to check if numsteps=0,cuz otherwise this mode wont be set in plot tab //no need to check if numsteps=0,cuz otherwise this mode wont be set in plot tab
int numSteps = myDet->getScanSteps(0); int numSteps = myDet->getScanSteps(0);
double *values = new double[numSteps]; double *values = new double[numSteps];
@ -455,7 +469,7 @@ void qDrawPlot::SetScanArgument(int scanArg){
maxPixelsY = values[numSteps-1]; maxPixelsY = values[numSteps-1];
minPixelsY = values[0]; minPixelsY = values[0];
nPixelsY = numSteps; nPixelsY = numSteps;
}else if(scanArgument==Level1) { }else if(scanArgument==qDefs::Level1) {
//no need to check if numsteps=0,cuz otherwise this mode wont be set in plot tab //no need to check if numsteps=0,cuz otherwise this mode wont be set in plot tab
int numSteps = myDet->getScanSteps(1); int numSteps = myDet->getScanSteps(1);
double *values = new double[numSteps]; double *values = new double[numSteps];
@ -522,9 +536,8 @@ void qDrawPlot::SetupMeasurement(){
for(int px=0;px<(int)nPixelsX;px++) for(int px=0;px<(int)nPixelsX;px++)
lastImageArray[py*nPixelsX+px] = 0; lastImageArray[py*nPixelsX+px] = 0;
//1d with no scan
//no scan if ((!originally2D) && (scanArgument==qDefs::None)){
if(scanArgument==None){
if(!running){ if(!running){
maxPixelsY = 100; maxPixelsY = 100;
minPixelsY = 0; minPixelsY = 0;
@ -532,13 +545,20 @@ void qDrawPlot::SetupMeasurement(){
endPixel = nPixelsY-0.5; endPixel = nPixelsY-0.5;
} }
} }
else {//all frames else {
if(scanArgument==AllFrames){ //2d with no scan
if ((originally2D) && (scanArgument==qDefs::None)){
maxPixelsY = nPixelsY;
minPixelsY = 0;
}
//all frames
else if(scanArgument==qDefs::AllFrames){
maxPixelsY = number_of_exposures - 1; maxPixelsY = number_of_exposures - 1;
minPixelsY = 0; minPixelsY = 0;
if(!running) nPixelsY = number_of_exposures; if(!running) nPixelsY = number_of_exposures;
}//file index }//file index
else if(scanArgument==FileIndex){ else if(scanArgument==qDefs::FileIndex){
maxPixelsY = number_of_frames - 1; maxPixelsY = number_of_frames - 1;
minPixelsY = 0; minPixelsY = 0;
if(!running) nPixelsY = number_of_frames; if(!running) nPixelsY = number_of_frames;
@ -563,13 +583,14 @@ void qDrawPlot::SetupMeasurement(){
} }
} }
/*
cout<<"nPixelsX:"<<nPixelsX<<endl; cout<<"nPixelsX:"<<nPixelsX<<endl;
cout<<"nPixelsY:"<<nPixelsY<<endl; cout<<"nPixelsY:"<<nPixelsY<<endl;
cout<<"minPixelsY:"<<minPixelsY<<endl; cout<<"minPixelsY:"<<minPixelsY<<endl;
cout<<"maxPixelsY:"<<maxPixelsY<<endl; cout<<"maxPixelsY:"<<maxPixelsY<<endl;
cout<<"startPixel:"<<startPixel<<endl; cout<<"startPixel:"<<startPixel<<endl;
cout<<"endPixel:"<<endPixel<<endl<<endl; cout<<"endPixel:"<<endPixel<<endl<<endl;
*/
UnlockLastImageArray(); UnlockLastImageArray();
} }
@ -684,9 +705,9 @@ int qDrawPlot::GetData(detectorData *data,int fIndex){
//Not Nth Frame, to check time out(NOT for 2dScans and angle plots) //Not Nth Frame, to check time out(NOT for Scans and angle plots)
else{ else{
if(scanArgument==None){ if (scanArgument == qDefs::None) {
//if the time is not over, RETURN //if the time is not over, RETURN
if(!data_pause_over){ if(!data_pause_over){
return 0; return 0;
@ -699,77 +720,77 @@ int qDrawPlot::GetData(detectorData *data,int fIndex){
//if scan argument is 2d //if scan
if(scanArgument!=None){ //alframes
//alframes if(scanArgument==qDefs::AllFrames){
if(scanArgument==AllFrames){ while(1){
while(1){ if(!pthread_mutex_trylock(&(last_image_complete_mutex))){
if(!pthread_mutex_trylock(&(last_image_complete_mutex))){ //set title
//set title plotTitle=QString(plotTitle_prefix)+QString(data->fileName).section('/',-1);
plotTitle=QString(plotTitle_prefix)+QString(data->fileName).section('/',-1); //variables
//variables lastImageNumber= currentFrame+1;
lastImageNumber= currentFrame+1; //title
//title imageTitle = temp_title;
imageTitle = temp_title; //copy data
//copy data memcpy(lastImageArray+(currentScanDivLevel*nPixelsX),data->values,nPixelsX*sizeof(double));
memcpy(lastImageArray+(currentScanDivLevel*nPixelsX),data->values,nPixelsX*sizeof(double)); pthread_mutex_unlock(&(last_image_complete_mutex));
pthread_mutex_unlock(&(last_image_complete_mutex)); break;
break;
}
} }
currentFrame++;
currentScanDivLevel++;
return 0;
} }
//file index currentFrame++;
if(scanArgument==FileIndex){ currentScanDivLevel++;
while(1){ return 0;
if(!pthread_mutex_trylock(&(last_image_complete_mutex))){ }
//set title //file index
plotTitle=QString(plotTitle_prefix)+QString(data->fileName).section('/',-1); if(scanArgument==qDefs::FileIndex){
//variables while(1){
if(currentFrameIndex == 0) currentScanDivLevel = 0; if(!pthread_mutex_trylock(&(last_image_complete_mutex))){
lastImageNumber= currentFrame+1; //set title
//title plotTitle=QString(plotTitle_prefix)+QString(data->fileName).section('/',-1);
imageTitle = temp_title; //variables
//copy data if(currentFrameIndex == 0) currentScanDivLevel = 0;
for(unsigned int px=0;px<nPixelsX;px++) lastImageArray[currentScanDivLevel*nPixelsX+px] += data->values[px]; lastImageNumber= currentFrame+1;
pthread_mutex_unlock(&(last_image_complete_mutex)); //title
break; imageTitle = temp_title;
} //copy data
for(unsigned int px=0;px<nPixelsX;px++) lastImageArray[currentScanDivLevel*nPixelsX+px] += data->values[px];
pthread_mutex_unlock(&(last_image_complete_mutex));
break;
} }
currentFrame++;
currentScanDivLevel++;
return 0;
} }
//level0 currentFrame++;
if(scanArgument==Level0){ currentScanDivLevel++;
while(1){ return 0;
if(!pthread_mutex_trylock(&(last_image_complete_mutex))){ }
//set title //level0
plotTitle=QString(plotTitle_prefix)+QString(data->fileName).section('/',-1); if(scanArgument==qDefs::Level0){
//get scanvariable0 while(1){
int ci = 0, fi = 0, p = 0, di = 0; double cs0 = 0 , cs1 = 0; if(!pthread_mutex_trylock(&(last_image_complete_mutex))){
fileIOStatic::getVariablesFromFileName(string(data->fileName), ci, fi, p, cs0, cs1, di); //set title
//variables plotTitle=QString(plotTitle_prefix)+QString(data->fileName).section('/',-1);
if(cs0!=currentScanValue) { //get scanvariable0
if(backwardScanPlot) currentScanDivLevel--; int ci = 0, fi = 0, p = 0, di = 0; double cs0 = 0 , cs1 = 0;
else currentScanDivLevel++; fileIOStatic::getVariablesFromFileName(string(data->fileName), ci, fi, p, cs0, cs1, di);
} //variables
currentScanValue = cs0; if(cs0!=currentScanValue) {
lastImageNumber= currentFrame+1; if(backwardScanPlot) currentScanDivLevel--;
//title else currentScanDivLevel++;
imageTitle = temp_title;
//copy data
for(unsigned int px=0;px<nPixelsX;px++) lastImageArray[currentScanDivLevel*nPixelsX+px] += data->values[px];
pthread_mutex_unlock(&(last_image_complete_mutex));
break;
} }
currentScanValue = cs0;
lastImageNumber= currentFrame+1;
//title
imageTitle = temp_title;
//copy data
for(unsigned int px=0;px<nPixelsX;px++) lastImageArray[currentScanDivLevel*nPixelsX+px] += data->values[px];
pthread_mutex_unlock(&(last_image_complete_mutex));
break;
} }
currentFrame++;
return 0;
} }
//level1 currentFrame++;
return 0;
}
//level1
if(scanArgument==qDefs::Level1){
while(1){ while(1){
if(!pthread_mutex_trylock(&(last_image_complete_mutex))){ if(!pthread_mutex_trylock(&(last_image_complete_mutex))){
//set title //set title
@ -794,9 +815,10 @@ int qDrawPlot::GetData(detectorData *data,int fIndex){
} }
currentFrame++; currentFrame++;
return 0; return 0;
} }
//normal measurement or 1d scans //normal measurement or 1d scans
if(!pthread_mutex_trylock(&(last_image_complete_mutex))){ if(!pthread_mutex_trylock(&(last_image_complete_mutex))){
//set title //set title
@ -846,15 +868,17 @@ int qDrawPlot::GetData(detectorData *data,int fIndex){
} }
//2d //2d
else{cout<<endl<<"****************************IN HERE-2D*******************************************"<<endl<<endl; else{
// Titles // Titles
imageTitle = temp_title; imageTitle = temp_title;
// manufacture data for now // manufacture data for now
/*
for(unsigned int px=0;px<nPixelsX;px++) for(unsigned int px=0;px<nPixelsX;px++)
for(unsigned int py=0;py<nPixelsY;py++) for(unsigned int py=0;py<nPixelsY;py++)
lastImageArray[py*nPixelsX+px] = sqrt(pow(currentFrame+1,2)*pow(double(px)-nPixelsX/2,2)/pow(nPixelsX/2,2)/pow(number_of_exposures+1,2) + pow(double(py)-nPixelsY/2,2)/pow(nPixelsY/2,2))/sqrt(2); lastImageArray[py*nPixelsX+px] = sqrt(pow(currentFrame+1,2)*pow(double(px)-nPixelsX/2,2)/pow(nPixelsX/2,2)/pow(number_of_exposures+1,2) + pow(double(py)-nPixelsY/2,2)/pow(nPixelsY/2,2))/sqrt(2);
*/
// copy data // copy data
//SHOULD BE memcpy(lastImageArray,data->values,nPixelsX*nPixelsY*sizeof(double)); memcpy(lastImageArray,data->values,nPixelsX*nPixelsY*sizeof(double));
} }
pthread_mutex_unlock(&(last_image_complete_mutex)); pthread_mutex_unlock(&(last_image_complete_mutex));
} }
@ -1085,7 +1109,6 @@ void qDrawPlot::UpdatePlot(){
XYRangeChanged = false; XYRangeChanged = false;
} }
if(saveAll) SavePlotAutomatic(); if(saveAll) SavePlotAutomatic();
cout<<"updated 2d plot: ymin:"<<plot2D->GetPlot()->GetYMinimum()<< "\tymax:"<<plot2D->GetPlot()->GetYMaximum()<<endl;
} }
} }
//} //}
@ -1390,7 +1413,7 @@ int qDrawPlot::UpdateTrimbitPlot(bool fromDetector,bool Histogram){
if(detType == slsDetectorDefs::MYTHEN){ if(detType == slsDetectorDefs::MYTHEN){
//get trimbits //get trimbits
actualPixelsX = myDet->getTotalNumberOfChannels(); actualPixelsX = myDet->getTotalNumberOfChannels(slsDetectorDefs::X);
if(histTrimbits) delete [] histTrimbits; histTrimbits = new double[actualPixelsX]; if(histTrimbits) delete [] histTrimbits; histTrimbits = new double[actualPixelsX];
ret = myDet->getChanRegs(histTrimbits,fromDetector); ret = myDet->getChanRegs(histTrimbits,fromDetector);
if(!ret){ if(!ret){
@ -1551,16 +1574,4 @@ void qDrawPlot::CalculatePedestal(){
} }
//-------------------------------------------------------------------------------------------------------------------------------------------------
void qDrawPlot::plot2DUnzoom(){
plot2D->GetPlot()->SetXMinMax(plot2D->GetPlot()->GetXMinimum(),plot2D->GetPlot()->GetXMaximum());
plot2D->GetPlot()->SetYMinMax(plot2D->GetPlot()->GetYMinimum(),plot2D->GetPlot()->GetYMaximum());
//if(scanArgument!=None)/*if(plot_in_scope==2)*/
// plot2D->GetPlot()->UnZoom();
}
//------------------------------------------------------------------------------------------------------------------------------------------------- //-------------------------------------------------------------------------------------------------------------------------------------------------

View File

@ -181,7 +181,7 @@ void qTabActions::SetupWidgetWindow(){
//Number of positions is only for mythen or gotthard //Number of positions is only for mythen or gotthard
detType = myDet->getDetectorsType(); detType = myDet->getDetectorsType();
if((detType == slsDetectorDefs::EIGER) || (detType == slsDetectorDefs::AGIPD)) { if((detType == slsDetectorDefs::EIGER) || (detType == slsDetectorDefs::AGIPD) || (detType == slsDetectorDefs::MOENCH)) {
lblName[NumPositions]->setEnabled(false); lblName[NumPositions]->setEnabled(false);
btnExpand[NumPositions]->setEnabled(false); btnExpand[NumPositions]->setEnabled(false);
}else{ }else{

View File

@ -75,7 +75,15 @@ void qTabAdvanced::SetupWidgetWindow(){
switch(detType){ switch(detType){
case slsDetectorDefs::MYTHEN: isEnergy = true; isAngular = true; break; case slsDetectorDefs::MYTHEN: isEnergy = true; isAngular = true; break;
case slsDetectorDefs::EIGER: isEnergy = true; isAngular = false; break; case slsDetectorDefs::EIGER: isEnergy = true; isAngular = false; break;
case slsDetectorDefs::MOENCH:
isEnergy = false;
isAngular = false;
lblIP->setEnabled(true);
lblMAC->setEnabled(true);
dispIP->setEnabled(true);
dispMAC->setEnabled(true);
boxRxr->setEnabled(true);
break;
case slsDetectorDefs::GOTTHARD: case slsDetectorDefs::GOTTHARD:
isEnergy = false; isEnergy = false;
isAngular = true; isAngular = true;
@ -208,7 +216,7 @@ void qTabAdvanced::Initialization(){
connect(spinStopPort, SIGNAL(valueChanged(int)), this, SLOT(SetStopPort(int))); connect(spinStopPort, SIGNAL(valueChanged(int)), this, SLOT(SetStopPort(int)));
connect(comboOnline, SIGNAL(currentIndexChanged(int)), this, SLOT(SetOnline(int))); connect(comboOnline, SIGNAL(currentIndexChanged(int)), this, SLOT(SetOnline(int)));
if(detType==slsDetectorDefs::GOTTHARD){ if((detType==slsDetectorDefs::GOTTHARD) || (detType==slsDetectorDefs::MOENCH)){
//network //network
connect(spinTCPPort, SIGNAL(valueChanged(int)), this, SLOT(SetRxrTCPPort(int))); connect(spinTCPPort, SIGNAL(valueChanged(int)), this, SLOT(SetRxrTCPPort(int)));
@ -1030,7 +1038,7 @@ void qTabAdvanced::Refresh(){
if(detType==slsDetectorDefs::GOTTHARD){ if ((detType==slsDetectorDefs::GOTTHARD) || (detType==slsDetectorDefs::MOENCH)){
//disconnect //disconnect
disconnect(spinTCPPort, SIGNAL(valueChanged(int)), this, SLOT(SetRxrTCPPort(int))); disconnect(spinTCPPort, SIGNAL(valueChanged(int)), this, SLOT(SetRxrTCPPort(int)));
disconnect(spinUDPPort, SIGNAL(valueChanged(int)), this, SLOT(SetRxrUDPPort(int))); disconnect(spinUDPPort, SIGNAL(valueChanged(int)), this, SLOT(SetRxrUDPPort(int)));

View File

@ -85,6 +85,18 @@ void qTabDebugging::SetupWidgetWindow(){
chkChip->setEnabled(false); chkChip->setEnabled(false);
chkModuleFirmware->setEnabled(false); chkModuleFirmware->setEnabled(false);
break; break;
case slsDetectorDefs::MOENCH:
lblDetector->setText("Module:");
chkDetectorFirmware->setText("Module Firmware:");
chkDetectorSoftware->setText("Module Software:");
chkDetectorMemory->setText("Module Memory:");
chkDetectorBus->setText("Module Bus:");
lblModule->hide();
comboModule->hide();
chkModuleFirmware->hide();
chkChip->setEnabled(false);
chkModuleFirmware->setEnabled(false);
break;
case slsDetectorDefs::MYTHEN: case slsDetectorDefs::MYTHEN:
break; break;
default: default:
@ -191,7 +203,7 @@ void qTabDebugging::GetInfo(){
switch(detType){ switch(detType){
case slsDetectorDefs::MYTHEN:{ case slsDetectorDefs::MYTHEN:
//display widget //display widget
formLayout->addWidget(new QLabel("Readout:"),0,0); formLayout->addWidget(new QLabel("Readout:"),0,0);
formLayout->addItem(new QSpacerItem(15,20,QSizePolicy::Fixed,QSizePolicy::Fixed),0,1); formLayout->addItem(new QSpacerItem(15,20,QSizePolicy::Fixed,QSizePolicy::Fixed),0,1);
@ -228,11 +240,11 @@ void qTabDebugging::GetInfo(){
} }
break; break;
}
case slsDetectorDefs::EIGER:{
case slsDetectorDefs::EIGER:
//display widget //display widget
formLayout->addWidget(new QLabel("Half Module:"),0,0); formLayout->addWidget(new QLabel("Half Module:"),0,0);
formLayout->addItem(new QSpacerItem(15,20,QSizePolicy::Fixed,QSizePolicy::Fixed),0,1); formLayout->addItem(new QSpacerItem(15,20,QSizePolicy::Fixed,QSizePolicy::Fixed),0,1);
@ -257,11 +269,33 @@ void qTabDebugging::GetInfo(){
treeDet->topLevelItem(i*2)->insertChildren(0,childItems); treeDet->topLevelItem(i*2)->insertChildren(0,childItems);
} }
break; break;
}
case slsDetectorDefs::GOTTHARD:{ case slsDetectorDefs::MOENCH:
//display widget
formLayout->addWidget(new QLabel("Module:"),0,0);
formLayout->addItem(new QSpacerItem(15,20,QSizePolicy::Fixed,QSizePolicy::Fixed),0,1);
formLayout->addWidget(lblDetectorId,0,2);
formLayout->addWidget(new QLabel("Module MAC Address:"),1,0);
formLayout->addWidget(lblDetectorSerial,1,2);
formLayout->addWidget(new QLabel("Module Firmware Version:"),2,0);
formLayout->addWidget(lblDetectorFirmware,2,2);
formLayout->addWidget(new QLabel("Module Software Version:"),3,0);
formLayout->addWidget(lblDetectorSoftware,3,2);
//tree widget
treeDet->setHeaderLabel("Moench Detector");
//gets det names
for (int i=0;i<comboDetector->count();i++)
items.append(new QTreeWidgetItem((QTreeWidget*)0, QStringList(QString("Module (%1)").arg(comboDetector->itemText(i)))));
treeDet->insertTopLevelItems(0, items);
break;
case slsDetectorDefs::GOTTHARD:
//display widget //display widget
formLayout->addWidget(new QLabel("Module:"),0,0); formLayout->addWidget(new QLabel("Module:"),0,0);
@ -281,7 +315,7 @@ void qTabDebugging::GetInfo(){
treeDet->insertTopLevelItems(0, items); treeDet->insertTopLevelItems(0, items);
break; break;
}
@ -315,7 +349,7 @@ void qTabDebugging::SetParameters(QTreeWidgetItem *item){
switch(detType){ switch(detType){
case slsDetectorDefs::MYTHEN:{ case slsDetectorDefs::MYTHEN:
if(item->text(0).contains("Readout")){ if(item->text(0).contains("Readout")){
//find index //find index
for(i=0;i<comboDetector->count();i++) for(i=0;i<comboDetector->count();i++)
@ -362,12 +396,12 @@ void qTabDebugging::SetParameters(QTreeWidgetItem *item){
qDefs::checkErrorMessage(det); qDefs::checkErrorMessage(det);
} }
break; break;
}
case slsDetectorDefs::EIGER:{
case slsDetectorDefs::EIGER:
//only if half module clicked //only if half module clicked
if(item->text(0).contains("Half Module")){ if(item->text(0).contains("Half Module")){
//find index //find index
@ -388,12 +422,12 @@ void qTabDebugging::SetParameters(QTreeWidgetItem *item){
qDefs::checkErrorMessage(det); qDefs::checkErrorMessage(det);
} }
break; break;
}
case slsDetectorDefs::GOTTHARD:{ case slsDetectorDefs::MOENCH:
case slsDetectorDefs::GOTTHARD:
//find index //find index
for(i=0;i<comboDetector->count();i++) for(i=0;i<comboDetector->count();i++)
if(item== treeDet->topLevelItem(i)) if(item== treeDet->topLevelItem(i))
@ -411,7 +445,7 @@ void qTabDebugging::SetParameters(QTreeWidgetItem *item){
qDefs::checkErrorMessage(det); qDefs::checkErrorMessage(det);
break; break;
}
@ -439,6 +473,7 @@ void qTabDebugging::TestDetector(){
message = QString("<nobr>Test Results for %1 and %2:</nobr><br><br>").arg(comboDetector->currentText(),comboModule->currentText()); message = QString("<nobr>Test Results for %1 and %2:</nobr><br><br>").arg(comboDetector->currentText(),comboModule->currentText());
break; break;
case slsDetectorDefs::EIGER: Detector = "Half Module"; break; case slsDetectorDefs::EIGER: Detector = "Half Module"; break;
case slsDetectorDefs::MOENCH:
case slsDetectorDefs::GOTTHARD: Detector = "Module"; break; case slsDetectorDefs::GOTTHARD: Detector = "Module"; break;
default: break; default: break;
} }

View File

@ -95,6 +95,22 @@ void qTabDeveloper::SetupWidgetWindow(){
adcNames.push_back("Temperature ADC:"); adcNames.push_back("Temperature ADC:");
adcNames.push_back("Temperature FPGA:"); adcNames.push_back("Temperature FPGA:");
break;
case slsDetectorDefs::MOENCH:
NUM_DAC_WIDGETS = 8;
NUM_ADC_WIDGETS = 2;
dacNames.push_back("v Reference:");
dacNames.push_back("v Cascode n:");
dacNames.push_back("v Cascode p:");
dacNames.push_back("v Comp. Output:");
dacNames.push_back("v Cascode out");
dacNames.push_back("v Comp. Input:");
dacNames.push_back("v Comp. Ref:");
dacNames.push_back("i Base Test:");
adcNames.push_back("Temperature ADC:");
adcNames.push_back("Temperature FPGA:");
break; break;
default: default:
qDefs::Message(qDefs::CRITICAL,string("Unknown detector type:")+myDet->slsDetectorBase::getDetectorType(detType),"Developer"); qDefs::Message(qDefs::CRITICAL,string("Unknown detector type:")+myDet->slsDetectorBase::getDetectorType(detType),"Developer");
@ -122,7 +138,7 @@ void qTabDeveloper::SetupWidgetWindow(){
CreateDACWidgets(); CreateDACWidgets();
//HV for gotthard //HV for gotthard
if(detType==slsDetectorDefs::GOTTHARD){ if ((detType==slsDetectorDefs::GOTTHARD) || (detType==slsDetectorDefs::MOENCH)){
boxDacs->setFixedHeight(boxDacs->height()+35); boxDacs->setFixedHeight(boxDacs->height()+35);
lblHV = new QLabel("High Voltage",boxDacs); lblHV = new QLabel("High Voltage",boxDacs);
@ -145,7 +161,7 @@ void qTabDeveloper::SetupWidgetWindow(){
//adcs //adcs
if((detType==slsDetectorDefs::GOTTHARD)||(detType==slsDetectorDefs::AGIPD)){ if((detType==slsDetectorDefs::GOTTHARD) || (detType==slsDetectorDefs::MOENCH)){
setFixedHeight((50+(NUM_DAC_WIDGETS/2)*35)+(50+(NUM_ADC_WIDGETS/2)*35)); setFixedHeight((50+(NUM_DAC_WIDGETS/2)*35)+(50+(NUM_ADC_WIDGETS/2)*35));
boxAdcs = new QGroupBox("ADCs",this); boxAdcs = new QGroupBox("ADCs",this);
boxAdcs->setFixedHeight(25+(NUM_ADC_WIDGETS/2)*35); boxAdcs->setFixedHeight(25+(NUM_ADC_WIDGETS/2)*35);
@ -206,7 +222,7 @@ void qTabDeveloper::CreateADCWidgets(){
lblAdcs[i] = new QLabel(QString(adcNames[i].c_str()),boxAdcs); lblAdcs[i] = new QLabel(QString(adcNames[i].c_str()),boxAdcs);
spinAdcs[i] = new QDoubleSpinBox(boxAdcs); spinAdcs[i] = new QDoubleSpinBox(boxAdcs);
spinAdcs[i]->setMaximum(10000); spinAdcs[i]->setMaximum(10000);
if(detType==slsDetectorDefs::GOTTHARD) spinAdcs[i]->setSuffix(0x00b0+QString("C")); if((detType==slsDetectorDefs::GOTTHARD) || (detType==slsDetectorDefs::MOENCH)) spinAdcs[i]->setSuffix(0x00b0+QString("C"));
adcLayout->addWidget(lblAdcs[i],(int)(i/2),((i%2)==0)?1:4); adcLayout->addWidget(lblAdcs[i],(int)(i/2),((i%2)==0)?1:4);
adcLayout->addWidget(spinAdcs[i],(int)(i/2),((i%2)==0)?2:5); adcLayout->addWidget(spinAdcs[i],(int)(i/2),((i%2)==0)?2:5);
@ -283,6 +299,7 @@ slsDetectorDefs::dacIndex qTabDeveloper::getSLSIndex(int index){
return slsDetectorDefs::HUMIDITY; return slsDetectorDefs::HUMIDITY;
/**fill in here*/ /**fill in here*/
break; break;
case slsDetectorDefs::MOENCH:
case slsDetectorDefs::GOTTHARD: case slsDetectorDefs::GOTTHARD:
switch(index){ switch(index){
case 0: return slsDetectorDefs::G_VREF_DS; case 0: return slsDetectorDefs::G_VREF_DS;
@ -344,7 +361,7 @@ void qTabDeveloper::Refresh(){
if(NUM_ADC_WIDGETS) RefreshAdcs(); if(NUM_ADC_WIDGETS) RefreshAdcs();
//gotthard -high voltage //gotthard -high voltage
if(detType == slsDetectorDefs::GOTTHARD){ if((detType == slsDetectorDefs::GOTTHARD) || (detType == slsDetectorDefs::MOENCH)){
disconnect(comboHV, SIGNAL(currentIndexChanged(int)), this, SLOT(SetHighVoltage())); disconnect(comboHV, SIGNAL(currentIndexChanged(int)), this, SLOT(SetHighVoltage()));
//default should be correct //default should be correct

View File

@ -140,6 +140,7 @@ void qTabMeasurement::SetupTimingMode(){
item[(int)Gated_Start]->setEnabled(false); item[(int)Gated_Start]->setEnabled(false);
item[(int)Trigger_Window]->setEnabled(true); item[(int)Trigger_Window]->setEnabled(true);
break; break;
case slsDetectorDefs::MOENCH:
case slsDetectorDefs::GOTTHARD: case slsDetectorDefs::GOTTHARD:
item[(int)Trigger_Exp_Series]->setEnabled(true); item[(int)Trigger_Exp_Series]->setEnabled(true);
item[(int)Trigger_Frame]->setEnabled(false); item[(int)Trigger_Frame]->setEnabled(false);

View File

@ -142,9 +142,10 @@ void qTabPlot::SetupWidgetWindow(){
// Depending on whether the detector is 1d or 2d // Depending on whether the detector is 1d or 2d
switch(myDet->getDetectorsType()){ switch(myDet->getDetectorsType()){
case slsDetectorDefs::MYTHEN: isOriginallyOneD = true; break; case slsDetectorDefs::MYTHEN: isOriginallyOneD = true; break;
case slsDetectorDefs::EIGER: isOriginallyOneD = false; break; case slsDetectorDefs::EIGER: isOriginallyOneD = false; break;
case slsDetectorDefs::GOTTHARD: isOriginallyOneD = true; break; case slsDetectorDefs::GOTTHARD: isOriginallyOneD = true; break;
case slsDetectorDefs::MOENCH: isOriginallyOneD = false; break;
default: default:
cout << "ERROR: Detector Type is Generic" << endl; cout << "ERROR: Detector Type is Generic" << endl;
exit(-1); exit(-1);
@ -765,7 +766,7 @@ void qTabPlot::SetScanArgument(){
//histogram //histogram
if(histogram){ if(histogram){
//allFrames //allFrames
myPlot->SetScanArgument(4); myPlot->SetScanArgument(qDefs::AllFrames);
//default titles for 2d scan //default titles for 2d scan
dispXAxis->setText("Channel Number"); dispXAxis->setText("Channel Number");
@ -817,7 +818,7 @@ void qTabPlot::SetScanArgument(){
myPlot->Select2DPlot(); myPlot->Select2DPlot();
}else //done here so that it isnt set by default each time }else //done here so that it isnt set by default each time
myPlot->SetScanArgument(0); myPlot->SetScanArgument(qDefs::None);
qDefs::checkErrorMessage(myDet); qDefs::checkErrorMessage(myDet);

View File

@ -103,6 +103,7 @@ void qTabSettings::SetupDetectorSettings(){
item[(int)MediumGain]->setEnabled(false); item[(int)MediumGain]->setEnabled(false);
item[(int)VeryHighGain]->setEnabled(false); item[(int)VeryHighGain]->setEnabled(false);
break; break;
case slsDetectorDefs::MOENCH:
case slsDetectorDefs::GOTTHARD: case slsDetectorDefs::GOTTHARD:
item[(int)Standard]->setEnabled(false); item[(int)Standard]->setEnabled(false);
item[(int)Fast]->setEnabled(false); item[(int)Fast]->setEnabled(false);