solved bug on the number of chans of multiSlsDetector

git-svn-id: file:///afs/psi.ch/project/sls_det_software/svn/slsDetectorSoftware@697 951219d9-93cf-4727-9268-0efd64621fa3
This commit is contained in:
bergamaschi 2013-11-21 15:57:57 +00:00
parent 3b3e4eb8c3
commit 1ed2ba63b5
13 changed files with 125 additions and 21 deletions

View File

@ -322,7 +322,7 @@ int multiSlsDetector::addSlsDetector(int id, int pos) {
thisMultiDetector->dataBytes+=detectors[pos]->getDataBytes();
thisMultiDetector->numberOfChannels+=detectors[pos]->getTotalNumberOfChannels();
thisMultiDetector->maxNumberOfChannels+=detectors[j]->getMaxNumberOfChannels();
thisMultiDetector->maxNumberOfChannels+=detectors[pos]->getMaxNumberOfChannels();
@ -3466,6 +3466,21 @@ int multiSlsDetector::getMaxMods() {
}
int multiSlsDetector::getTotalNumberOfChannels(){thisMultiDetector->numberOfChannels=0; for (int id=0; id< thisMultiDetector->numberOfDetectors; id++) thisMultiDetector->numberOfChannels+=detectors[id]->getTotalNumberOfChannels(); return thisMultiDetector->numberOfChannels;};
int multiSlsDetector::getTotalNumberOfChannels(dimension d){thisMultiDetector->numberOfChannel[d]=0; for (int id=0; id< thisMultiDetector->numberOfDetectors; id++) thisMultiDetector->numberOfChannel[d]+=detectors[id]->getTotalNumberOfChannels(d); return thisMultiDetector->numberOfChannel[d];};
int multiSlsDetector::getMaxNumberOfChannels(){thisMultiDetector->maxNumberOfChannels=0; for (int id=0; id< thisMultiDetector->numberOfDetectors; id++) thisMultiDetector->maxNumberOfChannels+=detectors[id]->getMaxNumberOfChannels();return thisMultiDetector->maxNumberOfChannels;};
int multiSlsDetector::getMaxNumberOfChannels(dimension d){thisMultiDetector->maxNumberOfChannel[d]=0; for (int id=0; id< thisMultiDetector->numberOfDetectors; id++) thisMultiDetector->maxNumberOfChannel[d]+=detectors[id]->getMaxNumberOfChannels(d);return thisMultiDetector->maxNumberOfChannel[d];};
int multiSlsDetector::getMaxMod(dimension d){
int ret=0, ret1;
@ -4014,7 +4029,7 @@ int multiSlsDetector::writeConfigurationFile(string const fname){
int multiSlsDetector::writeDataFile(string fname, double *data, double *err, double *ang, char dataformat, int nch) {
#ifdef VERBOSE
cout << "using overloaded multiSlsDetector function to write formatted data file " << endl;
cout << "using overloaded multiSlsDetector function to write formatted data file " << getTotalNumberOfChannels()<< endl;
#endif
@ -4044,7 +4059,8 @@ int multiSlsDetector::writeDataFile(string fname, double *data, double *err, dou
#ifdef VERBOSE
cout << " write " << i << " position " << off << " offset " << choff << endl;
#endif
detectors[i]->writeDataFile(outfile,n, data+off, pe, pa, dataformat, choff);
//detectors[i]->writeDataFile(outfile,n, data+off, pe, pa, dataformat, choff);
fileIOStatic::writeDataFile(outfile,n, data+off, pe, pa, dataformat, choff);
if(detectors[i]->getErrorMask())
setErrorMask(getErrorMask()|(1<<i));
@ -4063,7 +4079,6 @@ int multiSlsDetector::writeDataFile(string fname, double *data, double *err, dou
}
}
outfile.close();
return OK;
} else {

View File

@ -318,13 +318,13 @@ class multiSlsDetector : public slsDetectorUtils {
angleConversionConstant *getAngularConversionPointer(int imod=0);
int getTotalNumberOfChannels(){return thisMultiDetector->numberOfChannels;};
int getTotalNumberOfChannels();
int getTotalNumberOfChannels(dimension d){return thisMultiDetector->numberOfChannel[d];};
int getTotalNumberOfChannels(dimension d);
int getMaxNumberOfChannels(){return thisMultiDetector->maxNumberOfChannels;};
int getMaxNumberOfChannels();
int getMaxNumberOfChannels(dimension d){return thisMultiDetector->maxNumberOfChannel[d];};
int getMaxNumberOfChannels(dimension d);
int getMaxNumberOfChannelsPerDetector(dimension d){return thisMultiDetector->maxNumberOfChannelsPerDetector[d];};

View File

@ -2242,14 +2242,74 @@ int set_dynamic_range(int file_des) {
int set_roi(int file_des) {
return FAIL;
int arg=-1;
int n;
ROI roiLimits[MAX_ROIS];
int ret=OK;
ROI retval;
int nm=setNMod(-1), nmax=getNModBoard(), nroi;
sprintf(mess,"can't set ROI\n");
n = receiveDataOnly(file_des,&arg,sizeof(arg));
if(arg>0){
n+=receiveDataOnly(file_des,roiLimits,arg*sizeof(ROI));
}
if (arg>1) {
ret=FAIL;
sprintf(mess,"can't set more than 1 ROI per detector\n");
} else
ret=OK;
if (arg>0) {
nm=(roiLimits[0].xmax-1)/1280+1;
if (roiLimits[0].xmin>0) {
roiLimits[0].xmin=0;
ret=FAIL;
sprintf(mess,"ROI starts at 0\n");
}
if (nm>nmax) {
retval.xmax=setNMod(-1)*1280;
ret=FAIL;
sprintf(mess,"ROI max larger than detector size\n");
}
} else if (arg==0) {
setNMod(nmax);
}
n = sendDataOnly(file_des,&ret,sizeof(ret));
if (ret==FAIL) {
n = sendDataOnly(file_des,mess,sizeof(mess));
} else {
retval.xmin=0;
retval.xmax=setNMod(-1)*1280;
retval.ymin=0;
retval.ymax=0;
if (setNMod(-1)<nmax)
nroi=1;
else
nroi=0;
n = sendDataOnly(file_des,&nroi,sizeof(nroi));
if (nroi)
n = sendDataOnly(file_des,&retval,nroi*sizeof(retval));
}
return ret;
}
int get_roi(int file_des) {
return set_roi(file_des);
return FAIL;
}
int set_speed(int file_des) {

View File

@ -560,7 +560,7 @@ int slsDetector::initializeDetectorSize(detectorType type) {
}
thisDetector->nChans=thisDetector->nChan[X]*thisDetector->nChan[Y];
thisDetector->nChips=thisDetector->nChip[X]*thisDetector->nChip[Y];
thisDetector->nModsMax=thisDetector->nModMax[0]*thisDetector->nModMax[1];
thisDetector->nModsMax=thisDetector->nModMax[X]*thisDetector->nModMax[Y];
/** number of modules is initally the maximum number of modules */
thisDetector->nMod[X]=thisDetector->nModMax[X];
thisDetector->nMod[Y]=thisDetector->nModMax[Y];
@ -666,6 +666,9 @@ int slsDetector::initializeDetectorSize(detectorType type) {
thisDetector->chanoff=thisDetector->chipoff+sizeof(int)*thisDetector->nChips*thisDetector->nModsMax;
//update?!?!?!?
}
@ -1524,7 +1527,10 @@ int slsDetector::getMaxNumberOfModules(dimension d){
return retval;
} else {
thisDetector->nModMax[d]=retval;
thisDetector->nModsMax=thisDetector->nModMax[0]*thisDetector->nModMax[1];
thisDetector->nModsMax=thisDetector->nModMax[X]*thisDetector->nModMax[Y];
}
return thisDetector->nModMax[d];
};

View File

@ -685,7 +685,7 @@ class slsDetector : public slsDetectorUtils, public energyConversion {
*/
int getMaxNumberOfModules(dimension d=X); //
/**
set/get the use of an external signal
\param pol meaning of the signal \sa externalSignalFlag

View File

@ -1651,6 +1651,7 @@ string slsDetectorCommand::cmdFlatField(int narg, char *args[], int action){
sval=string(args[1]);
else
sval="none";
// cout << myDet->getMaxNumberOfChannels() << endl;
double corr[ myDet->getMaxNumberOfChannels()], ecorr[myDet->getMaxNumberOfChannels()];
if (myDet->getFlatFieldCorrection(corr,ecorr)) {
if (sval!="none") {

View File

@ -80,12 +80,13 @@ void slsDetectorUtils::acquire(int delflag){
}
if (getActionMode(angCalLog))
if (getActionMode(angCalLog)) {
aclog=new angCalLogClass(this);
if (getActionMode(enCalLog))
}
if (getActionMode(enCalLog)) {
eclog=new enCalLogClass(this);
}

View File

@ -227,6 +227,8 @@ int fileIO::writeDataFile(ofstream &outfile, int nch, double *data, double *err,
// args|=0x10; // one line per channel!
cout << "Static file " << endl;
for (int ichan=0; ichan<nch; ichan++) {
if (ang==NULL) {

View File

@ -52,6 +52,8 @@ int fileIO::writeDataFile(string fname, double *data, double *err, double *ang,
if (nch==-1)
nch=getTotalNumberOfChannels();
cout << "Write filexxx...." << endl;
return fileIOStatic::writeDataFile(fname, nch, data, err, ang, dataformat);
}
@ -59,6 +61,8 @@ int fileIO::writeDataFile(ofstream &outfile, double *data, double *err, double *
if (nch==-1)
nch=getTotalNumberOfChannels();
cout << "Write file...." << endl;
return fileIOStatic::writeDataFile(outfile, nch, data, err, ang, dataformat, offset);
}
@ -74,6 +78,7 @@ int fileIO::writeDataFile(string fname, int *data){
int fileIO::writeDataFile(ofstream &outfile, int *data, int offset){
cout << "Write raw file...." << endl;
return fileIOStatic::writeDataFile(outfile, getTotalNumberOfChannels(), data, offset);
}
@ -108,6 +113,7 @@ int fileIO::writeDataFile(void *data, int iframe) {
int fileIO::closeDataFile() {
cout << "close file...." << endl;
if (filefd)
fclose(filefd);
filefd=NULL;
@ -120,6 +126,7 @@ int fileIO::closeDataFile() {
int fileIO::writeDataFile(string fname, short int *data){
cout << "Write raw file...." << endl;
return fileIOStatic::writeDataFile(fname, getTotalNumberOfChannels(), data);
}

View File

@ -341,12 +341,12 @@ class fileIOStatic {
\param offset start channel number
\returns OK or FAIL if it could not write the file or data=NULL
*/
static int writeDataFile(ofstream &outfile, int nch, double *data, double *err=NULL, double *ang=NULL, char dataformat='f', int offset=0){ \
static int writeDataFile(ofstream &outfile, int nch, double *data, double *err=NULL, double *ang=NULL, char dataformat='f', int offset=0){
int idata; \
if (data==NULL) { \
if (data==NULL || nch==0) { \
cout << "No data to write!" << endl; \
return slsDetectorDefs::FAIL; \
} \
} \
for (int ichan=0; ichan<nch; ichan++) { \
if (ang==NULL) { \
outfile << ichan+offset << " "; \

View File

@ -117,6 +117,7 @@ void postProcessing::processFrame(int *myData, int delflag) {
if (getDetectorsType()==MYTHEN){
// if (fdata) {
//uses static function?!?!?!?
// cout << "write to file?!?!?!?" << endl;
writeDataFile (fname+string(".raw"),fdata, NULL, NULL, 'i');
} else {
writeDataFile ((void*)myData, currentFrameIndex);
@ -130,6 +131,9 @@ void postProcessing::processFrame(int *myData, int delflag) {
doProcessing(fdata,delflag, fname);
} else
if (dataReady){
cout << "callback arg "<< getCurrentProgress()<< " " << (fname+string(".raw")).c_str() << " " << getTotalNumberOfChannels() << endl;
thisData=new detectorData(fdata,NULL,NULL,getCurrentProgress(),(fname+string(".raw")).c_str(),getTotalNumberOfChannels());
dataReady(thisData, currentFrameIndex, pCallbackArg);
delete thisData;
@ -220,6 +224,7 @@ void postProcessing::doProcessing(double *lfdata, int delflag, string fname) {
val=new double[arraySize];
err=new double[arraySize];
initDataset(0);
}
@ -250,6 +255,8 @@ void postProcessing::doProcessing(double *lfdata, int delflag, string fname) {
if (dataReady) {
cout << "callback arg "<< getCurrentProgress()<< " " << (fname+ext).c_str() << " " << np << endl;
thisData=new detectorData(val,err,ang,getCurrentProgress(),(fname+ext).c_str(),np);
dataReady(thisData, currentFrameIndex, pCallbackArg);
delete thisData;
@ -758,6 +765,9 @@ void postProcessing::initDataset(int r) {
} else {
cout << "implicit inti dataset! " << endl;
ppFun->initDataset();

View File

@ -18,9 +18,11 @@ int postProcessingFuncs::initDataset() {
me=new double[nBins];
mm=new int[nBins];
resetMerging(mp,mv,me,mm, nBins);
cout << "nbins " << nBins << endl;
} else {
mv=new double[totalChans];
me=new double[totalChans];
cout << "nchans " << totalChans << endl;
}
totalI0=0;