Offline flag implemented

git-svn-id: file:///afs/psi.ch/project/sls_det_software/svn/slsDetectorSoftware@19 951219d9-93cf-4727-9268-0efd64621fa3
This commit is contained in:
bergamaschi
2010-06-10 15:16:03 +00:00
parent 8a5bc0750d
commit a60ac8963c
2 changed files with 36 additions and 29 deletions

View File

@ -347,6 +347,13 @@ string mythenDetector::executeLine(int narg, char *args[], int action) {
} }
sprintf(answer,"%d",setThreadedProcessing()); sprintf(answer,"%d",setThreadedProcessing());
return string(answer); return string(answer);
} else if (var=="online") {
if (action==PUT_ACTION) {
sscanf(args[1],"%d",&ival);
setOnline(ival);
}
sprintf(answer,"%d",setOnline());
return string(answer);
} }
@ -517,21 +524,21 @@ string mythenDetector::executeLine(int narg, char *args[], int action) {
else if (var=="exptime") { else if (var=="exptime") {
if (action==PUT_ACTION) { if (action==PUT_ACTION) {
sscanf(args[1],"%f",&fval);// in seconds! sscanf(args[1],"%f",&fval);// in seconds!
setTimer(ACQUISITION_TIME,fval*1E+9); setTimer(ACQUISITION_TIME,(int64_t)(fval*1E+9));
} }
sprintf(answer,"%f",(float)setTimer(ACQUISITION_TIME)*1E-9); sprintf(answer,"%f",(float)setTimer(ACQUISITION_TIME)*1E-9);
return string(answer); return string(answer);
} else if (var=="period") { } else if (var=="period") {
if (action==PUT_ACTION) { if (action==PUT_ACTION) {
sscanf(args[1],"%f",&fval);// in seconds! sscanf(args[1],"%f",&fval);// in seconds!
setTimer(FRAME_PERIOD,fval*1E+9); setTimer(FRAME_PERIOD,(int64_t)(fval*1E+9));
} }
sprintf(answer,"%f",(float)setTimer(FRAME_PERIOD)*1E-9); sprintf(answer,"%f",(float)setTimer(FRAME_PERIOD)*1E-9);
return string(answer); return string(answer);
} else if (var=="delay") { } else if (var=="delay") {
if (action==PUT_ACTION) { if (action==PUT_ACTION) {
sscanf(args[1],"%f",&fval);// in seconds! sscanf(args[1],"%f",&fval);// in seconds!
setTimer(DELAY_AFTER_TRIGGER,fval*1E+9); setTimer(DELAY_AFTER_TRIGGER,(int64_t)(fval*1E+9));
} }
sprintf(answer,"%f",(float)setTimer(DELAY_AFTER_TRIGGER)*1E-9); sprintf(answer,"%f",(float)setTimer(DELAY_AFTER_TRIGGER)*1E-9);
return string(answer); return string(answer);
@ -991,10 +998,8 @@ string mythenDetector::helpLine( int action) {
int mythenDetector::readConfigurationFile(string const fname){ int mythenDetector::readConfigurationFile(string const fname){
string ans; string ans;
char line[500];
string str; string str;
ifstream infile; ifstream infile;
string::size_type pos;
int iargval; int iargval;
int interrupt=0; int interrupt=0;
char *args[100]; char *args[100];
@ -1084,7 +1089,6 @@ int mythenDetector::writeConfigurationFile(string const fname){
args[ia]=new char[1000]; args[ia]=new char[1000];
} }
int nargs;
outfile.open(fname.c_str(),ios_base::out); outfile.open(fname.c_str(),ios_base::out);
if (outfile.is_open()) { if (outfile.is_open()) {
@ -1134,7 +1138,6 @@ int mythenDetector::dumpDetectorSetup(string fname, int level){
int iv=0; int iv=0;
string fname1; string fname1;
ofstream outfile; ofstream outfile;
char dum[100];
char *args[2]; char *args[2];
for (int ia=0; ia<2; ia++) { for (int ia=0; ia<2; ia++) {
args[ia]=new char[1000]; args[ia]=new char[1000];
@ -1217,7 +1220,7 @@ int mythenDetector::dumpDetectorSetup(string fname, int level){
#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 0;
} }
@ -1226,10 +1229,8 @@ int mythenDetector::retrieveDetectorSetup(string fname1, int level){
string fname; string fname;
char line[500];
string str; string str;
ifstream infile; ifstream infile;
string::size_type pos;
int iargval; int iargval;
int interrupt=0; int interrupt=0;
char *args[2]; char *args[2];
@ -1321,9 +1322,8 @@ int mythenDetector::retrieveDetectorSetup(string fname1, int level){
string str; string str;
ifstream infile; ifstream infile;
ostringstream oss; ostringstream oss;
int isgood=1;
int iline=0; int iline=0;
string names[]={"Vtrim", "Vthresh", "Rgsh1", "Rgsh2", "Rgpr", "Vcal", "outBuffEnable"}; // string names[]={"Vtrim", "Vthresh", "Rgsh1", "Rgsh2", "Rgpr", "Vcal", "outBuffEnable"};
string sargname; string sargname;
int ival; int ival;
int ichan=0, ichip=0, idac=0; int ichan=0, ichip=0, idac=0;
@ -1464,7 +1464,7 @@ int mythenDetector::writeTrimFile(string fname, sls_detector_module mod){
if (outfile.is_open()) { if (outfile.is_open()) {
for (idac=0; idac<mod.ndac; idac++) { for (idac=0; idac<mod.ndac; idac++) {
iv=mod.dacs[idac]; iv=(int)mod.dacs[idac];
outfile << names[idac] << " " << iv << std::endl; outfile << names[idac] << " " << iv << std::endl;
} }
@ -1542,7 +1542,7 @@ int mythenDetector::writeDataFile(string fname, float *data, float *err, float *
break; break;
case 'i': case 'i':
default: default:
idata=*(data+ichan); idata=(int)(*(data+ichan));
outfile << idata << " "; outfile << idata << " ";
} }
if (err) { if (err) {
@ -1626,7 +1626,7 @@ int mythenDetector::readDataFile(string fname, float *data, float *err, float *a
ssstr >> ichan >> fdata; ssstr >> ichan >> fdata;
ich=ichan; ich=ichan;
if (ich!=iline) if (ich!=iline)
std::cout<< "Channel number " << ichan << " does not match with line number " << iline << std::endl; std::cout<< "Channel number " << ichan << " does not match with line number " << iline << " " << dataformat << std::endl;
} else { } else {
ssstr >> fang >> fdata; ssstr >> fang >> fdata;
ich=iline; ich=iline;
@ -1716,7 +1716,6 @@ int mythenDetector::readDataFile(string fname, int *data){
int mythenDetector::readCalibrationFile(string fname, float &gain, float &offset){ int mythenDetector::readCalibrationFile(string fname, float &gain, float &offset){
char line[500];
string str; string str;
ifstream infile; ifstream infile;
#ifdef VERBOSE #ifdef VERBOSE
@ -1740,7 +1739,22 @@ int mythenDetector::readCalibrationFile(string fname, float &gain, float &offset
}; };
int mythenDetector::writeCalibrationFile(string fname, float gain, float offset){ int mythenDetector::writeCalibrationFile(string fname, float gain, float offset){
std::cout<< "Function not yet implemented " << std::endl; //std::cout<< "Function not yet implemented " << std::endl;
ofstream outfile;
outfile.open (fname.c_str());
// >> i/o operations here <<
if (outfile.is_open()) {
outfile << offset << " " << gain << std::endl;
} else {
std::cout<< "Could not open calibration file "<< fname << " for writing" << std::endl;
return -1;
}
outfile.close();
return 0;
}; };
@ -1817,7 +1831,6 @@ int mythenDetector::getAngularConversion(int &direction, angleConversionConstan
int mythenDetector::readAngularConversion(string fname) { int mythenDetector::readAngularConversion(string fname) {
char line[500];
string str; string str;
ifstream infile; ifstream infile;
int mod; int mod;
@ -1926,7 +1939,7 @@ int mythenDetector::addToMerging(float *p1, float *v1, float *e1, float *mp, fl
float binmi=-180., binma; float binmi=-180., binma;
int ibin=0; int ibin=0;
int imod; int imod;
float ang; float ang=0;
if (thisDetector->binSize>0) if (thisDetector->binSize>0)
binsize=thisDetector->binSize; binsize=thisDetector->binSize;
@ -2098,12 +2111,10 @@ void* mythenDetector::processData(int delflag) {
float *ffcdata=NULL, *ffcerr=NULL; float *ffcdata=NULL, *ffcerr=NULL;
float *ang=NULL; float *ang=NULL;
float bs=0.004; float bs=0.004;
int i=0;
int imod; int imod;
int nb; int nb;
int np; int np;
detectorData *thisData; detectorData *thisData;
int outer_c_s;
int dum=1; int dum=1;
// thisDetector->progressIndex=0; // thisDetector->progressIndex=0;
@ -2194,7 +2205,7 @@ void* mythenDetector::processData(int delflag) {
thisDetector->binSize=bs; thisDetector->binSize=bs;
nb=(360./bs); nb=(int)(360./bs);
mergingBins=new float[nb]; mergingBins=new float[nb];
mergingCounts=new float[nb]; mergingCounts=new float[nb];
@ -2329,16 +2340,15 @@ void* mythenDetector::processData(int delflag) {
} }
dum=0; dum=0;
} // ???????????????????????? } // ????????????????????????
return 0;
} }
void mythenDetector::startThread(int delflag) { void mythenDetector::startThread(int delflag) {
pthread_attr_t tattr, mattr; pthread_attr_t tattr;
int ret; int ret;
int newprio;
sched_param param, mparam; sched_param param, mparam;
void *arg;
int policy= SCHED_OTHER; int policy= SCHED_OTHER;
@ -2374,7 +2384,6 @@ void mythenDetector::startThread(int delflag) {
void* startProcessData(void *n) { void* startProcessData(void *n) {
//void* processData(void *n) { //void* processData(void *n) {
void *w;
mythenDetector *myDet=(mythenDetector*)n; mythenDetector *myDet=(mythenDetector*)n;
myDet->processData(1); myDet->processData(1);
pthread_exit(NULL); pthread_exit(NULL);
@ -2383,7 +2392,6 @@ void* startProcessData(void *n) {
void* startProcessDataNoDelete(void *n) { void* startProcessDataNoDelete(void *n) {
//void* processData(void *n) { //void* processData(void *n) {
void *w;
mythenDetector *myDet=(mythenDetector*)n; mythenDetector *myDet=(mythenDetector*)n;
myDet->processData(0); myDet->processData(0);
pthread_exit(NULL); pthread_exit(NULL);

View File

@ -34,7 +34,7 @@ class mythenDetector : public slsDetector{
//slsDetector(string const fname); //slsDetector(string const fname);
// ~slsDetector(){while(dataQueue.size()>0){}}; // ~slsDetector(){while(dataQueue.size()>0){}};
/** destructor */ /** destructor */
~mythenDetector(){}; virtual ~mythenDetector(){};
/** /**
executes a set of string arguments according to a given format. It is used to read/write configuration file, dump and retrieve detector settings and for the command line interface command parsing executes a set of string arguments according to a given format. It is used to read/write configuration file, dump and retrieve detector settings and for the command line interface command parsing
@ -311,7 +311,6 @@ enum {GET_ACTION, PUT_ACTION, READOUT_ACTION};
int64_t getTimeLeft(timerIndex index); int64_t getTimeLeft(timerIndex index);
/**
/** /**
get run status on the stop socket get run status on the stop socket
\returns status mask \returns status mask