10Gbe, some functions in gotthard and eiger servers including mv in dacs, mv in dacs, changing settings file

This commit is contained in:
Maliakal Dhanya
2014-07-11 13:06:48 +02:00
parent 018b800117
commit 828a2dbd17
21 changed files with 867 additions and 863 deletions

View File

@ -655,6 +655,7 @@ int slsDetector::initializeDetectorSize(detectorType type) {
thisDetector->actionMask=0;
thisDetector->tenGigaEnable=0;
for (int ia=0; ia<MAX_ACTIONS; ia++) {
strcpy(thisDetector->actionScript[ia],"none");
@ -2000,16 +2001,17 @@ int slsDetector::readRegister(int addr){
}{};
*/
dacs_t slsDetector::setDAC(dacs_t val, dacIndex index, int imod){
dacs_t slsDetector::setDAC(dacs_t val, dacIndex index, int mV, int imod){
dacs_t retval;
dacs_t retval[2];
int fnum=F_SET_DAC;
int ret=FAIL;
char mess[100];
int arg[2];
int arg[3];
arg[0]=index;
arg[1]=imod;
arg[2]=mV;
#ifdef VERBOSE
std::cout<< std::endl;
@ -2022,16 +2024,16 @@ dacs_t slsDetector::setDAC(dacs_t val, dacIndex index, int imod){
controlSocket->SendDataOnly(&val,sizeof(val));
controlSocket->ReceiveDataOnly(&ret,sizeof(ret));
if (ret!=FAIL) {
controlSocket->ReceiveDataOnly(&retval,sizeof(retval));
controlSocket->ReceiveDataOnly(retval,sizeof(retval));
if (index < thisDetector->nDacs){
if (dacs) {
if (imod>=0) {
*(dacs+index+imod*thisDetector->nDacs)=retval;
*(dacs+index+imod*thisDetector->nDacs)=retval[0];
}
else {
for (imod=0; imod<thisDetector->nModsMax; imod++)
*(dacs+index+imod*thisDetector->nDacs)=retval;
*(dacs+index+imod*thisDetector->nDacs)=retval[0];
}
}
}
@ -2046,12 +2048,15 @@ dacs_t slsDetector::setDAC(dacs_t val, dacIndex index, int imod){
}
}
#ifdef VERBOSE
std::cout<< "Dac set to "<< retval << std::endl;
std::cout<< "Dac set to "<< retval[0] << " dac units (" << retval[1] << "mV)" << std::endl;
#endif
if (ret==FAIL) {
std::cout<< "Set dac failed " << std::endl;
}
return retval;
if(mV)
return retval[1];
return retval[0];
};
@ -4930,6 +4935,7 @@ char* slsDetector::setReceiver(string receiverIP){
std::cout << "frame period:" << thisDetector->timerValue[FRAME_PERIOD] << endl;
std::cout << "frame number:" << thisDetector->timerValue[FRAME_NUMBER] << endl;
std::cout << "dynamic range:" << thisDetector->dynamicRange << endl << endl;
std::cout << "10GbE:" << thisDetector->tenGigaEnable << endl << endl;
/** enable compresison, */
#endif
if(setDetectorType()!= GENERIC){
@ -4950,6 +4956,8 @@ char* slsDetector::setReceiver(string receiverIP){
setDynamicRange(thisDetector->dynamicRange);
//set scan tag
setUDPConnection();
if(thisDetector->myDetectorType == EIGER)
enableTenGigabitEthernet(thisDetector->tenGigaEnable);
}
}
@ -6707,20 +6715,22 @@ int slsDetector::enableTenGigabitEthernet(int i){
if(ret!=FAIL){
//must also configuremac
if((i != -1)&&(retval == i))
configureMAC();
ret = FAIL;
retval=-1;
if(setReceiverOnline(ONLINE_FLAG)==ONLINE_FLAG){
#ifdef VERBOSE
std::cout << "Enabling / Disabling 10Gbe in receiver: " << i << std::endl;
#endif
if (connectData() == OK)
ret=thisReceiver->sendInt(fnum,retval,i);
if(ret==FAIL)
setErrorMask((getErrorMask())|(RECEIVER_TEN_GIGA));
}
if(configureMAC() != FAIL){
ret = FAIL;
retval=-1;
if(setReceiverOnline(ONLINE_FLAG)==ONLINE_FLAG){
#ifdef VERBOSE
std::cout << "Enabling / Disabling 10Gbe in receiver: " << i << std::endl;
#endif
if (connectData() == OK)
ret=thisReceiver->sendInt(fnum2,retval,i);
if(ret==FAIL)
setErrorMask((getErrorMask())|(RECEIVER_TEN_GIGA));
}
}
}
if(ret != FAIL)
thisDetector->tenGigaEnable=retval;
return retval;
}

View File

@ -251,6 +251,9 @@ class slsDetector : public slsDetectorUtils, public energyConversion {
/** online flag - is set if the receiver is connected, unset if socket connection is not possible */
int receiverOnlineFlag;
/** 10 Gbe enable*/
int tenGigaEnable;
} sharedSlsDetector;
@ -779,10 +782,11 @@ class slsDetector : public slsDetectorUtils, public energyConversion {
set dacs value
\param val value (in V)
\param index DAC index
\param mV 0 in dac units or 1 in mV
\param imod module number (if -1 alla modules)
\returns current DAC value
*/
dacs_t setDAC(dacs_t val, dacIndex index, int imod=-1);
dacs_t setDAC(dacs_t val, dacIndex index , int mV, int imod=-1);
/**
set dacs value

View File

@ -423,7 +423,7 @@ int slsDetectorActions::executeScan(int level, int istep) {
setThresholdEnergy((int)currentScanVariable[level]); //energy scan
break;
case thresholdScan:
setDAC((dacs_t)currentScanVariable[level],THRESHOLD); // threshold scan
setDAC((dacs_t)currentScanVariable[level],THRESHOLD,0); // threshold scan
break;
case trimbitsScan:
trimbit=(int)currentScanVariable[level];

View File

@ -188,13 +188,14 @@ class slsDetectorActions : public virtual slsDetectorBase
/**
set dacs value
\param val value (in V)
\param index DAC index
\param imod module number (if -1 alla modules)
\returns current DAC value
set dacs value
\param val value (in V)
\param index DAC index
\param mV 0 in dac units or 1 in mV
\param imod module number (if -1 alla modules)
\returns current DAC value
*/
virtual dacs_t setDAC(dacs_t val, dacIndex index , int imod=-1)=0;
virtual dacs_t setDAC(dacs_t val, dacIndex index , int mV, int imod=-1)=0;
virtual int setThresholdEnergy(int, int im=-1, detectorSettings isettings=GET_SETTINGS)=0;

View File

@ -3229,10 +3229,12 @@ string slsDetectorCommand::cmdDAC(int narg, char *args[], int action) {
if (action==HELP_ACTION)
return helpDAC(narg, args, action);
dacIndex dac;
dacs_t val=-1;
char answer[1000];
int mode=0;
if (cmd=="vthreshold")
dac=THRESHOLD;
else if (cmd=="vcalibration")
@ -3327,23 +3329,30 @@ string slsDetectorCommand::cmdDAC(int narg, char *args[], int action) {
myDet->setOnline(ONLINE_FLAG);
if (action==PUT_ACTION) {
if(narg > 2)
if(!strcasecmp(args[2],"mv"))
mode = 1;
#ifdef DACS_INT
if (sscanf(args[1],"%d", &val))
if (sscanf(args[1],"%d", &val))
#else
if (sscanf(args[1],"%f", &val))
if (sscanf(args[1],"%f", &val))
#endif
;
else
return string("cannot scan DAC value ")+string(args[1]);
myDet->setDAC(val,dac);
myDet->setDAC(val,dac,mode);
}
#ifdef DACS_INT
sprintf(answer,"%d",myDet->setDAC(-1,dac));
sprintf(answer,"%d",myDet->setDAC(-1,dac,mode));
#else
sprintf(answer,"%f",myDet->setDAC(-1,dac));
sprintf(answer,"%f",myDet->setDAC(-1,dac,mode));
#endif
if(mode)
strcat(answer,"mV");
return string(answer);
}
@ -3414,6 +3423,8 @@ string slsDetectorCommand::helpDAC(int narg, char *args[], int action) {
os << "vcn" << "dacu\t sets vcn " << std::endl;
os << "vis" << "dacu\t sets vis " << std::endl;
os << "<dac name> mv <value> if you want in mV else <dac name> <value> in dac units " << std::endl;
}
if (action==GET_ACTION || action==HELP_ACTION) {

View File

@ -237,7 +237,7 @@ void slsDetectorUtils::acquire(int delflag){
aclog->addStep(getCurrentPosition(), getCurrentFileName());
if (eclog)
eclog->addStep(setDAC(-1,THRESHOLD), getCurrentFileName());
eclog->addStep(setDAC(-1,THRESHOLD,0), getCurrentFileName());
if (*correctionMask&(1<< I0_NORMALIZATION)) {
@ -773,45 +773,118 @@ int slsDetectorUtils::retrieveDetectorSetup(string const fname1, int level){
int slsDetectorUtils::dumpDetectorSetup(string const fname, int level){
slsDetectorCommand *cmd;
string names[100];
int nvar=0;
switch (getDetectorsType()) {
case EIGER:
names[nvar++]="fname";
names[nvar++]="index";
names[nvar++]="flags";
names[nvar++]="dr";
names[nvar++]="settings";
names[nvar++]="threshold";
names[nvar++]="exptime";
names[nvar++]="period";
names[nvar++]="frames";
names[nvar++]="cycles";
names[nvar++]="timing";
names[nvar++]="fineoff";
names[nvar++]="startscript";
names[nvar++]="startscriptpar";
names[nvar++]="stopscript";
names[nvar++]="stopscriptpar";
names[nvar++]="scriptbefore";
names[nvar++]="scriptbeforepar";
names[nvar++]="scriptafter";
names[nvar++]="scriptafterpar";
names[nvar++]="scan0script";
names[nvar++]="scan0par";
names[nvar++]="scan0prec";
names[nvar++]="scan0steps";
names[nvar++]="scan1script";
names[nvar++]="scan1par";
names[nvar++]="scan1prec";
names[nvar++]="scan1steps";
names[nvar++]="ratecorr";
names[nvar++]="flatfield";
names[nvar++]="badchannels";
break;
case GOTTHARD:
names[nvar++]="fname";
names[nvar++]="index";
names[nvar++]="flags";
names[nvar++]="dr";
names[nvar++]="settings";
names[nvar++]="exptime";
names[nvar++]="period";
names[nvar++]="delay";
names[nvar++]="gates";
names[nvar++]="frames";
names[nvar++]="cycles";
names[nvar++]="timing";
names[nvar++]="fineoff";
names[nvar++]="startscript";
names[nvar++]="startscriptpar";
names[nvar++]="stopscript";
names[nvar++]="stopscriptpar";
names[nvar++]="scriptbefore";
names[nvar++]="scriptbeforepar";
names[nvar++]="scriptafter";
names[nvar++]="scriptafterpar";
names[nvar++]="scan0script";
names[nvar++]="scan0par";
names[nvar++]="scan0prec";
names[nvar++]="scan0steps";
names[nvar++]="scan1script";
names[nvar++]="scan1par";
names[nvar++]="scan1prec";
names[nvar++]="scan1steps";
names[nvar++]="ratecorr";
names[nvar++]="flatfield";
names[nvar++]="badchannels";
break;
case MYTHEN:
names[nvar++]="fname";
names[nvar++]="index";
names[nvar++]="flags";
names[nvar++]="dr";
names[nvar++]="settings";
names[nvar++]="threshold";
names[nvar++]="exptime";
names[nvar++]="period";
names[nvar++]="delay";
names[nvar++]="gates";
names[nvar++]="frames";
names[nvar++]="cycles";
names[nvar++]="probes";
names[nvar++]="timing";
names[nvar++]="fineoff";
names[nvar++]="startscript";
names[nvar++]="startscriptpar";
names[nvar++]="stopscript";
names[nvar++]="stopscriptpar";
names[nvar++]="scriptbefore";
names[nvar++]="scriptbeforepar";
names[nvar++]="scriptafter";
names[nvar++]="scriptafterpar";
names[nvar++]="scan0script";
names[nvar++]="scan0par";
names[nvar++]="scan0prec";
names[nvar++]="scan0steps";
names[nvar++]="scan1script";
names[nvar++]="scan1par";
names[nvar++]="scan1prec";
names[nvar++]="scan1steps";
names[nvar++]="ratecorr";
names[nvar++]="flatfield";
names[nvar++]="badchannels";
names[nvar++]="trimbits";
break;
}
string names[]={
"fname",\
"index",\
"flags",\
"dr",\
"settings",\
"threshold",\
"exptime",\
"period",\
"delay",\
"gates",\
"frames",\
"cycles",\
"probes",\
"timing",\
"fineoff",\
"startscript",\
"startscriptpar",\
"stopscript",\
"stopscriptpar",\
"scriptbefore",\
"scriptbeforepar",\
"scriptafter",\
"scriptafterpar",\
"scan0script",\
"scan0par",\
"scan0prec",\
"scan0steps",\
"scan1script",\
"scan1par",\
"scan1prec",\
"scan1steps",\
"ratecorr",\
"flatfield",\
"badchannels",\
"trimbits"
};
int nvar=35;

View File

@ -496,10 +496,11 @@ class slsDetectorUtils : public slsDetectorActions, public postProcessing {
set dacs value
\param val value (in V)
\param index DAC index
\param mV 0 in dac units or 1 in mV
\param imod module number (if -1 alla modules)
\returns current DAC value
*/
virtual dacs_t setDAC(dacs_t val, dacIndex index , int imod=-1)=0;
virtual dacs_t setDAC(dacs_t val, dacIndex index , int mV, int imod=-1)=0;
/**