Merge branch '3.0.1' into developer

This commit is contained in:
Dhanya Maliakal 2017-12-05 13:41:26 +01:00
commit 3b684c4662
3 changed files with 315 additions and 309 deletions

View File

@ -4859,7 +4859,6 @@ int multiSlsDetector::readConfigurationFile(string const fname){
int nd=thisMultiDetector->numberOfDetectors; int nd=thisMultiDetector->numberOfDetectors;
for (int i=0; i<nd; ++i) { for (int i=0; i<nd; ++i) {
// sprintf(ext,".det%d",i);
if (detectors[i]) { if (detectors[i]) {
detectors[i]->freeSharedMemory(); detectors[i]->freeSharedMemory();
} }
@ -4867,7 +4866,7 @@ int multiSlsDetector::readConfigurationFile(string const fname){
thisMultiDetector->numberOfDetectors=0; thisMultiDetector->numberOfDetectors=0;
multiSlsDetectorClient *cmd; multiSlsDetectorClient *cmd;
// char ext[100];
setAcquiringFlag(false); setAcquiringFlag(false);
clearAllErrorMask(); clearAllErrorMask();
@ -4977,92 +4976,93 @@ int multiSlsDetector::readConfigurationFile(string const fname){
int multiSlsDetector::writeConfigurationFile(string const fname){ int multiSlsDetector::writeConfigurationFile(string const fname){
string names[]={ \
"detsizechan", \
"hostname", \
"master", \
"sync", \
"outdir", \
"ffdir", \
"headerbefore", \
"headerafter", \
"headerbeforepar", \
"headerafterpar", \
"badchannels", \
"angconv", \
"globaloff", \
"binsize", \
"threaded" };
int nvar=15;
char *args[100];
for (int ia=0; ia<100; ++ia) {
args[ia]=new char[1000];
}
int ret=OK,ret1=OK;
string names[]={ \ ofstream outfile;
"type", \ int iline = 0;
"master", \
"sync", \
"outdir", \
"ffdir", \
"headerbefore", \
"headerafter", \
"headerbeforepar", \
"headerafterpar", \
"badchannels", \
"angconv", \
"globaloff", \
"binsize", \
"threaded" };
int nvar=14; outfile.open(fname.c_str(),ios_base::out);
if (outfile.is_open()) {
// char ext[100];
int iv=0;
char *args[100];
for (int ia=0; ia<100; ++ia) {
args[ia]=new char[1000];
}
int ret=OK;
ofstream outfile; slsDetectorCommand *cmd=new slsDetectorCommand(this);
int iline = 0;
outfile.open(fname.c_str(),ios_base::out); // complete size of detector
if (outfile.is_open()) { cout << iline << " " << names[iline] << endl;
strcpy(args[0],names[iline].c_str());
outfile << names[iline] << " " << cmd->executeLine(1,args,GET_ACTION) << std::endl;
++iline;
// hostname of the detectors
cout << iline << " " << names[iline] << endl;
strcpy(args[0],names[iline].c_str());
outfile << names[iline] << " " << cmd->executeLine(1,args,GET_ACTION) << std::endl;
++iline;
// single detector configuration
for (int i=0; i<thisMultiDetector->numberOfDetectors; ++i) {
// sprintf(ext,".det%d",i);
if (detectors[i]) {
ret1 = detectors[i]->writeConfigurationFile(outfile,i);
if(detectors[i]->getErrorMask())
setErrorMask(getErrorMask()|(1<<i));
if (ret1 == FAIL)
ret = FAIL;
}
}
//other configurations
while (iline < nvar) {
cout << iline << " " << names[iline] << endl;
strcpy(args[0],names[iline].c_str());
outfile << names[iline] << " " << cmd->executeLine(1,args,GET_ACTION) << std::endl;
++iline;
}
slsDetectorCommand *cmd=new slsDetectorCommand(this); delete cmd;
outfile.close();
// detector types!!!
cout << iv << " " << names[iv] << endl;
strcpy(args[0],names[iv].c_str());
outfile << names[iv] << " " << cmd->executeLine(1,args,GET_ACTION) << std::endl;
++iline;
// single detector configuration
for (int i=0; i<thisMultiDetector->numberOfDetectors; ++i) {
// sprintf(ext,".det%d",i);
if (detectors[i]) {
iv+=detectors[i]->writeConfigurationFile(outfile,i);
if(detectors[i]->getErrorMask())
setErrorMask(getErrorMask()|(1<<i));
}
}
//other configurations
for (iv=1; iv<nvar; ++iv) {
cout << iv << " " << names[iv] << endl;
strcpy(args[0],names[iv].c_str());
outfile << names[iv] << " " << cmd->executeLine(1,args,GET_ACTION) << std::endl;
++iline;
}
delete cmd;
outfile.close();
#ifdef VERBOSE #ifdef VERBOSE
std::cout<< "wrote " <<iline << " lines to configuration file " << std::endl; std::cout<< "wrote " <<iline << " lines to configuration file " << std::endl;
#endif #endif
} else { } else {
std::cout<< "Error opening configuration file " << fname << " for writing" << std::endl; std::cout<< "Error opening configuration file " << fname << " for writing" << std::endl;
ret = FAIL; ret = FAIL;
} }
for (int ia=0; ia<100; ++ia) { for (int ia=0; ia<100; ++ia) {
delete [] args[ia]; delete [] args[ia];
} }
return ret; return ret;
}
};

View File

@ -7179,7 +7179,6 @@ int slsDetector::readConfigurationFile(ifstream &infile){
int slsDetector::writeConfigurationFile(string const fname){ int slsDetector::writeConfigurationFile(string const fname){
ofstream outfile; ofstream outfile;
#ifdef VERBOSE #ifdef VERBOSE
int ret; int ret;
@ -7207,56 +7206,78 @@ int slsDetector::writeConfigurationFile(string const fname){
int slsDetector::writeConfigurationFile(ofstream &outfile, int id){ int slsDetector::writeConfigurationFile(ofstream &outfile, int id){
;
slsDetectorCommand *cmd=new slsDetectorCommand(this); slsDetectorCommand *cmd=new slsDetectorCommand(this);
int nvar=15; detectorType type = thisDetector->myDetectorType;
string names[100];
int nvar=0;
string names[20]={ \ // common config
"hostname", \ names[nvar++] = "hostname";
"port", \ names[nvar++] = "port";
"stopport", \ names[nvar++] = "stopport";
"settingsdir", \ names[nvar++] = "settingsdir";
"outdir", \ names[nvar++] = "caldir";
"angdir", \ names[nvar++] = "ffdir";
"moveflag", \ names[nvar++] = "outdir";
"lock", \ names[nvar++] = "angdir";
"caldir", \ names[nvar++] = "moveflag";
"ffdir", \ names[nvar++] = "lock";
"nmod", \
"waitstates", \
"setlength", \
"clkdivider", \
"extsig" };
// to be added in the future // receiver config
// "trimen", if (type != MYTHEN) {
// "receiverTCPPort", names[nvar++] = "detectormac";
names[nvar++] = "detectorip";
if ((thisDetector->myDetectorType==GOTTHARD)|| names[nvar++] = "zmqport";
(thisDetector->myDetectorType==PROPIX)|| names[nvar++] = "rx_zmqport";
(thisDetector->myDetectorType==JUNGFRAU)|| names[nvar++] = "rx_tcpport";
(thisDetector->myDetectorType==MOENCH)) { names[nvar++] = "rx_udpport";
names[0]= "hostname"; names[nvar++] = "rx_udpport2";
names[1]= "port"; names[nvar++] = "rx_udpip";
names[2]= "stopport"; names[nvar++] = "rx_hostname";
names[3]= "settingsdir"; names[nvar++] = "r_readfreq";
names[4]= "angdir";
names[5]= "moveflag";
names[6]= "lock";
names[7]= "caldir";
names[8]= "ffdir";
names[9]= "extsig";
names[10]="detectormac";
names[11]="detectorip";
names[12]= "rx_tcpport";
names[13]= "rx_udpport";
names[14]="rx_udpip";
names[15]="rx_hostname";
names[16]="outdir";
names[17]="vhighvoltage";
nvar=18;
} }
// detector specific config
switch (type) {
case MYTHEN:
names[nvar++] = "nmod";
names[nvar++] = "waitstates";
names[nvar++] = "setlength";
names[nvar++] = "clkdivider";
names[nvar++] = "extsig";
break;
case GOTTHARD:
case PROPIX:
names[nvar++] = "extsig";
names[nvar++] = "vhighvoltage";
break;
break;
case MOENCH:
names[nvar++] = "extsig";
names[nvar++] = "vhighvoltage";
break;
case EIGER:
names[nvar++] = "vhighvoltage";
names[nvar++] = "trimen";
names[nvar++] = "iodelay";
names[nvar++] = "tengiga";
break;
case JUNGFRAU:
names[nvar++] = "powerchip";
names[nvar++] = "vhighvoltage";
break;
case JUNGFRAUCTB:
names[nvar++] = "powerchip";
names[nvar++] = "vhighvoltage";
break;
default:
std::cout << "detector type " << getDetectorType(thisDetector->myDetectorType) << " not implemented in writing config file" << std::endl;
nvar = 0;
break;
}
int nsig=4;//-1; int nsig=4;//-1;
int iv=0; int iv=0;
@ -7264,8 +7285,6 @@ int slsDetector::writeConfigurationFile(ofstream &outfile, int id){
char myargs[100][1000]; char myargs[100][1000];
for (int ia=0; ia<100; ++ia) { for (int ia=0; ia<100; ++ia) {
//args[ia]=new char[1000];
args[ia]=myargs[ia]; args[ia]=myargs[ia];
} }
@ -7288,6 +7307,7 @@ int slsDetector::writeConfigurationFile(ofstream &outfile, int id){
outfile << names[iv] << " " << cmd->executeLine(1,args,GET_ACTION) << std::endl; outfile << names[iv] << " " << cmd->executeLine(1,args,GET_ACTION) << std::endl;
} }
} }
delete cmd; delete cmd;
return OK; return OK;
} }

View File

@ -735,37 +735,51 @@ int slsDetectorUtils::retrieveDetectorSetup(string const fname1, int level){
int slsDetectorUtils::dumpDetectorSetup(string const fname, int level){ int slsDetectorUtils::dumpDetectorSetup(string const fname, int level){
slsDetectorCommand *cmd; slsDetectorCommand *cmd;
string names[100]; detectorType type = getDetectorsType();
int nvar=0; string names[100];
int nvar=0;
names[nvar++]="fname"; // common config
names[nvar++]="index"; names[nvar++]="fname";
names[nvar++]="dr"; names[nvar++]="index";
names[nvar++]="settings"; names[nvar++]="enablefwrite";
names[nvar++]="exptime"; names[nvar++]="overwrite";
names[nvar++]="period"; names[nvar++]="dr";
names[nvar++]="frames"; names[nvar++]="settings";
names[nvar++]="cycles"; names[nvar++]="exptime";
names[nvar++]="measurements"; names[nvar++]="period";
names[nvar++]="timing"; names[nvar++]="frames";
names[nvar++]="cycles";
names[nvar++]="measurements";
names[nvar++]="timing";
names[nvar++]="flatfield";
names[nvar++]="badchannels";
switch (getDetectorsType()) { switch (type) {
case EIGER: case EIGER:
names[nvar++]="flags"; names[nvar++]="flags";
names[nvar++]="clkdivider";
names[nvar++]="threshold"; names[nvar++]="threshold";
names[nvar++]="ratecorr"; names[nvar++]="ratecorr";
names[nvar++]="trimbits";
break; break;
case GOTTHARD: case GOTTHARD:
case PROPIX: case PROPIX:
case JUNGFRAU: names[nvar++]="flags";
names[nvar++]="flags";
names[nvar++]="delay"; names[nvar++]="delay";
names[nvar++]="gates"; names[nvar++]="gates";
names[nvar++]="ratecorr"; names[nvar++]="ratecorr";
break; break;
case MYTHEN: case JUNGFRAU:
names[nvar++]="flags"; names[nvar++]="flags";
names[nvar++]="delay";
names[nvar++]="gates";
names[nvar++]="ratecorr";
names[nvar++]="clkdivider";
break;
case MYTHEN:
names[nvar++]="flags";
names[nvar++]="threshold"; names[nvar++]="threshold";
names[nvar++]="delay"; names[nvar++]="delay";
names[nvar++]="gates"; names[nvar++]="gates";
@ -774,188 +788,160 @@ int slsDetectorUtils::dumpDetectorSetup(string const fname, int level){
names[nvar++]="ratecorr"; names[nvar++]="ratecorr";
names[nvar++]="trimbits"; names[nvar++]="trimbits";
break; break;
case JUNGFRAUCTB: case JUNGFRAUCTB:
names[nvar++]="dac:0";
names[nvar++]="dac:0"; names[nvar++]="dac:1";
names[nvar++]="dac:1"; names[nvar++]="dac:2";
names[nvar++]="dac:2"; names[nvar++]="dac:3";
names[nvar++]="dac:3"; names[nvar++]="dac:4";
names[nvar++]="dac:4"; names[nvar++]="dac:5";
names[nvar++]="dac:5"; names[nvar++]="dac:6";
names[nvar++]="dac:6"; names[nvar++]="dac:7";
names[nvar++]="dac:7"; names[nvar++]="dac:8";
names[nvar++]="dac:8"; names[nvar++]="dac:9";
names[nvar++]="dac:9"; names[nvar++]="dac:10";
names[nvar++]="dac:10"; names[nvar++]="dac:11";
names[nvar++]="dac:11"; names[nvar++]="dac:12";
names[nvar++]="dac:12"; names[nvar++]="dac:13";
names[nvar++]="dac:13"; names[nvar++]="dac:14";
names[nvar++]="dac:14"; names[nvar++]="dac:15";
names[nvar++]="dac:15"; names[nvar++]="adcvpp";
names[nvar++]="adcvpp";
names[nvar++]="adcclk"; names[nvar++]="adcclk";
names[nvar++]="clkdivider"; names[nvar++]="clkdivider";
names[nvar++]="adcphase"; names[nvar++]="adcphase";
names[nvar++]="adcpipeline"; names[nvar++]="adcpipeline";
names[nvar++]="adcinvert"; // names[nvar++]="adcinvert"; //
names[nvar++]="adcdisable"; names[nvar++]="adcdisable";
names[nvar++]="patioctrl"; names[nvar++]="patioctrl";
names[nvar++]="patclkctrl"; names[nvar++]="patclkctrl";
names[nvar++]="patlimits"; names[nvar++]="patlimits";
names[nvar++]="patloop0"; names[nvar++]="patloop0";
names[nvar++]="patnloop0"; names[nvar++]="patnloop0";
names[nvar++]="patwait0"; names[nvar++]="patwait0";
names[nvar++]="patwaittime0"; names[nvar++]="patwaittime0";
names[nvar++]="patloop1"; names[nvar++]="patloop1";
names[nvar++]="patnloop1"; names[nvar++]="patnloop1";
names[nvar++]="patwait1"; names[nvar++]="patwait1";
names[nvar++]="patwaittime1"; names[nvar++]="patwaittime1";
names[nvar++]="patloop2"; names[nvar++]="patloop2";
names[nvar++]="patnloop2"; names[nvar++]="patnloop2";
names[nvar++]="patwait2"; names[nvar++]="patwait2";
names[nvar++]="patwaittime2"; names[nvar++]="patwaittime2";
break; break;
default: default:
break; break;
} }
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";
int iv=0;
string fname1;
names[nvar++]="startscript"; ofstream outfile;
names[nvar++]="startscriptpar"; char *args[4];
names[nvar++]="stopscript"; for (int ia=0; ia<4; ia++) {
names[nvar++]="stopscriptpar"; args[ia]=new char[1000];
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";
switch (getDetectorsType()) {
case EIGER:
case MYTHEN:
case GOTTHARD:
case PROPIX:
case JUNGFRAU:
names[nvar++]="flatfield";
names[nvar++]="badchannels";
break;
default:
break;
}
switch (getDetectorsType()) { int nargs;
case EIGER: if (level==2)
case MYTHEN: nargs=2;
names[nvar++]="trimbits"; else
break; nargs=1;
default:
break;
}
// char ext[100];
int iv=0; if (level==2) {
string fname1; fname1=fname+string(".config");
writeConfigurationFile(fname1);
fname1=fname+string(".det");
} else
fname1=fname;
ofstream outfile; outfile.open(fname1.c_str(),ios_base::out);
char *args[4]; if (outfile.is_open()) {
for (int ia=0; ia<4; ia++) { cmd=new slsDetectorCommand(this);
args[ia]=new char[1000]; for (iv=0; iv<nvar-3; iv++) {
} strcpy(args[0],names[iv].c_str());
outfile << names[iv] << " " << cmd->executeLine(1,args,GET_ACTION) << std::endl;
}
strcpy(args[0],names[iv].c_str());
if (level==2) {
fname1=fname+string(".ff");
strcpy(args[1],fname1.c_str());
}
outfile << names[iv] << " " << cmd->executeLine(nargs,args,GET_ACTION) << std::endl;
iv++;
strcpy(args[0],names[iv].c_str());
if (level==2) {
fname1=fname+string(".bad");
strcpy(args[1],fname1.c_str());
}
outfile << names[iv] << " " << cmd->executeLine(nargs,args,GET_ACTION) << std::endl;
iv++;
if (level==2) {
strcpy(args[0],names[iv].c_str());
int nargs; size_t c=fname.rfind('/');
if (level==2) if (c<string::npos) {
nargs=2; fname1=fname.substr(0,c+1)+string("trim_")+fname.substr(c+1);
else } else {
nargs=1; fname1=string("trim_")+fname;
}
strcpy(args[1],fname1.c_str());
if (level==2) {
fname1=fname+string(".config");
writeConfigurationFile(fname1);
fname1=fname+string(".det");
} else
fname1=fname;
outfile.open(fname1.c_str(),ios_base::out);
if (outfile.is_open()) {
cmd=new slsDetectorCommand(this);
for (iv=0; iv<nvar-3; iv++) {
strcpy(args[0],names[iv].c_str());
outfile << names[iv] << " " << cmd->executeLine(1,args,GET_ACTION) << std::endl;
}
strcpy(args[0],names[iv].c_str());
if (level==2) {
fname1=fname+string(".ff");
strcpy(args[1],fname1.c_str());
}
outfile << names[iv] << " " << cmd->executeLine(nargs,args,GET_ACTION) << std::endl;
iv++;
strcpy(args[0],names[iv].c_str());
if (level==2) {
fname1=fname+string(".bad");
strcpy(args[1],fname1.c_str());
}
outfile << names[iv] << " " << cmd->executeLine(nargs,args,GET_ACTION) << std::endl;
iv++;
if (level==2) {
strcpy(args[0],names[iv].c_str());
size_t c=fname.rfind('/');
if (c<string::npos) {
fname1=fname.substr(0,c+1)+string("trim_")+fname.substr(c+1);
} else {
fname1=string("trim_")+fname;
}
strcpy(args[1],fname1.c_str());
#ifdef VERBOSE #ifdef VERBOSE
std::cout<< "writing to file " << fname1 << std::endl; std::cout<< "writing to file " << fname1 << std::endl;
#endif #endif
outfile << names[iv] << " " << cmd->executeLine(nargs,args,GET_ACTION) << std::endl; outfile << names[iv] << " " << cmd->executeLine(nargs,args,GET_ACTION) << std::endl;
iv++; iv++;
} }
delete cmd; delete cmd;
outfile.close(); outfile.close();
} }
else { else {
std::cout<< "Error opening parameters file " << fname1 << " for writing" << std::endl; std::cout<< "Error opening parameters file " << fname1 << " for writing" << std::endl;
return FAIL; return FAIL;
} }
#ifdef VERBOSE #ifdef VERBOSE
std::cout<< "wrote " <<iv << " lines to "<< fname1 << std::endl; std::cout<< "wrote " <<iv << " lines to "<< fname1 << std::endl;
#endif #endif
return OK; return OK;
} }