After some speed optimization...

git-svn-id: file:///afs/psi.ch/project/sls_det_software/svn/slsDetectorSoftware@171 951219d9-93cf-4727-9268-0efd64621fa3
This commit is contained in:
bergamaschi
2012-04-13 13:03:53 +00:00
parent 3ddafe3baf
commit ab4e569b6c
18 changed files with 714 additions and 362 deletions

View File

@ -1402,22 +1402,30 @@ int multiSlsDetector::setROI(int nroi, int *xmin, int *xmax, int *ymin, int *yma
*/
float* multiSlsDetector::decodeData(int *datain) {
float *dataout=new float[thisMultiDetector->numberOfChannels];
int ich=0;
float *detp;
float* multiSlsDetector::decodeData(int *datain, float *fdata) {
float *dataout;
if (fdata)
dataout=fdata;
else
dataout=new float[thisMultiDetector->numberOfChannels];
// int ich=0;
float *detp=dataout;
int *datap=datain;
for (int i=0; i<thisMultiDetector->numberOfDetectors; i++) {
if (detectors[i]) {
detp=detectors[i]->decodeData(datap);
detectors[i]->decodeData(datap, detp);
datap+=detectors[i]->getDataBytes()/sizeof(int);
for (int j=0; j<detectors[i]->getTotalNumberOfChannels(); j++) {
dataout[ich]=detp[j];
ich++;
}
delete [] detp;
detp+=detectors[i]->getTotalNumberOfChannels();
// for (int j=0; j<detectors[i]->getTotalNumberOfChannels(); j++) {
// dataout[ich]=detp[j];
// ich++;
// }
//delete [] detp;
}
}
@ -3339,7 +3347,7 @@ int multiSlsDetector::writeDataFile(string fname, float *data, float *err, float
ofstream outfile;
int choff=0, off=0; //idata,
float *pe=err, *pa=ang;
int nch_left=nch, n;
int nch_left=nch, n, nd;
if (nch_left<=0)
nch_left=getTotalNumberOfChannels();
@ -3348,28 +3356,35 @@ int multiSlsDetector::writeDataFile(string fname, float *data, float *err, float
if (data==NULL)
return FAIL;
// args|=0x10; // one line per channel!
outfile.open (fname.c_str(),ios_base::out);
if (outfile.is_open())
{
for (int i=0; i<thisMultiDetector->numberOfDetectors; i++) {
if (detectors[i]) {
n=detectors[i]->getTotalNumberOfChannels();
if (nch_left<n)
if (nch_left<nd)
n=nch_left;
detectors[i]->writeDataFile(outfile,n, data+off, pe, pa, dataformat, choff);
nch_left-=n;
choff+=detectors[i]->getMaxNumberOfChannels();
off+=n;
if (pe)
pe=pe+off;
if (pa)
pa=pa+off;
}
}
outfile.close();
return OK;
} else {

View File

@ -721,7 +721,7 @@ class multiSlsDetector : public slsDetectorUtils {
\param datain data from the detector
\returns pointer to a float array with a data per channel
*/
float* decodeData(int *datain);
float* decodeData(int *datain, float *fdata=NULL);