mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2025-04-29 09:30:02 +02:00
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:
parent
3b3e4eb8c3
commit
1ed2ba63b5
@ -322,7 +322,7 @@ int multiSlsDetector::addSlsDetector(int id, int pos) {
|
|||||||
thisMultiDetector->dataBytes+=detectors[pos]->getDataBytes();
|
thisMultiDetector->dataBytes+=detectors[pos]->getDataBytes();
|
||||||
|
|
||||||
thisMultiDetector->numberOfChannels+=detectors[pos]->getTotalNumberOfChannels();
|
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 multiSlsDetector::getMaxMod(dimension d){
|
||||||
|
|
||||||
int ret=0, ret1;
|
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) {
|
int multiSlsDetector::writeDataFile(string fname, double *data, double *err, double *ang, char dataformat, int nch) {
|
||||||
|
|
||||||
#ifdef VERBOSE
|
#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
|
#endif
|
||||||
|
|
||||||
|
|
||||||
@ -4044,7 +4059,8 @@ int multiSlsDetector::writeDataFile(string fname, double *data, double *err, dou
|
|||||||
#ifdef VERBOSE
|
#ifdef VERBOSE
|
||||||
cout << " write " << i << " position " << off << " offset " << choff << endl;
|
cout << " write " << i << " position " << off << " offset " << choff << endl;
|
||||||
#endif
|
#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())
|
if(detectors[i]->getErrorMask())
|
||||||
setErrorMask(getErrorMask()|(1<<i));
|
setErrorMask(getErrorMask()|(1<<i));
|
||||||
|
|
||||||
@ -4063,7 +4079,6 @@ int multiSlsDetector::writeDataFile(string fname, double *data, double *err, dou
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
outfile.close();
|
outfile.close();
|
||||||
return OK;
|
return OK;
|
||||||
} else {
|
} else {
|
||||||
|
@ -318,13 +318,13 @@ class multiSlsDetector : public slsDetectorUtils {
|
|||||||
angleConversionConstant *getAngularConversionPointer(int imod=0);
|
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];};
|
int getMaxNumberOfChannelsPerDetector(dimension d){return thisMultiDetector->maxNumberOfChannelsPerDetector[d];};
|
||||||
|
|
||||||
|
Binary file not shown.
@ -2242,14 +2242,74 @@ int set_dynamic_range(int file_des) {
|
|||||||
|
|
||||||
int set_roi(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) {
|
int get_roi(int file_des) {
|
||||||
|
return set_roi(file_des);
|
||||||
|
|
||||||
|
|
||||||
return FAIL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int set_speed(int file_des) {
|
int set_speed(int file_des) {
|
||||||
|
@ -560,7 +560,7 @@ int slsDetector::initializeDetectorSize(detectorType type) {
|
|||||||
}
|
}
|
||||||
thisDetector->nChans=thisDetector->nChan[X]*thisDetector->nChan[Y];
|
thisDetector->nChans=thisDetector->nChan[X]*thisDetector->nChan[Y];
|
||||||
thisDetector->nChips=thisDetector->nChip[X]*thisDetector->nChip[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 */
|
/** number of modules is initally the maximum number of modules */
|
||||||
thisDetector->nMod[X]=thisDetector->nModMax[X];
|
thisDetector->nMod[X]=thisDetector->nModMax[X];
|
||||||
thisDetector->nMod[Y]=thisDetector->nModMax[Y];
|
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;
|
thisDetector->chanoff=thisDetector->chipoff+sizeof(int)*thisDetector->nChips*thisDetector->nModsMax;
|
||||||
|
|
||||||
|
|
||||||
|
//update?!?!?!?
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -1524,7 +1527,10 @@ int slsDetector::getMaxNumberOfModules(dimension d){
|
|||||||
return retval;
|
return retval;
|
||||||
} else {
|
} else {
|
||||||
thisDetector->nModMax[d]=retval;
|
thisDetector->nModMax[d]=retval;
|
||||||
thisDetector->nModsMax=thisDetector->nModMax[0]*thisDetector->nModMax[1];
|
thisDetector->nModsMax=thisDetector->nModMax[X]*thisDetector->nModMax[Y];
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
return thisDetector->nModMax[d];
|
return thisDetector->nModMax[d];
|
||||||
};
|
};
|
||||||
|
@ -1651,6 +1651,7 @@ string slsDetectorCommand::cmdFlatField(int narg, char *args[], int action){
|
|||||||
sval=string(args[1]);
|
sval=string(args[1]);
|
||||||
else
|
else
|
||||||
sval="none";
|
sval="none";
|
||||||
|
// cout << myDet->getMaxNumberOfChannels() << endl;
|
||||||
double corr[ myDet->getMaxNumberOfChannels()], ecorr[myDet->getMaxNumberOfChannels()];
|
double corr[ myDet->getMaxNumberOfChannels()], ecorr[myDet->getMaxNumberOfChannels()];
|
||||||
if (myDet->getFlatFieldCorrection(corr,ecorr)) {
|
if (myDet->getFlatFieldCorrection(corr,ecorr)) {
|
||||||
if (sval!="none") {
|
if (sval!="none") {
|
||||||
|
@ -80,12 +80,13 @@ void slsDetectorUtils::acquire(int delflag){
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (getActionMode(angCalLog))
|
if (getActionMode(angCalLog)) {
|
||||||
aclog=new angCalLogClass(this);
|
aclog=new angCalLogClass(this);
|
||||||
|
}
|
||||||
if (getActionMode(enCalLog))
|
if (getActionMode(enCalLog)) {
|
||||||
eclog=new enCalLogClass(this);
|
eclog=new enCalLogClass(this);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -227,6 +227,8 @@ int fileIO::writeDataFile(ofstream &outfile, int nch, double *data, double *err,
|
|||||||
|
|
||||||
// args|=0x10; // one line per channel!
|
// args|=0x10; // one line per channel!
|
||||||
|
|
||||||
|
cout << "Static file " << endl;
|
||||||
|
|
||||||
|
|
||||||
for (int ichan=0; ichan<nch; ichan++) {
|
for (int ichan=0; ichan<nch; ichan++) {
|
||||||
if (ang==NULL) {
|
if (ang==NULL) {
|
||||||
|
@ -52,6 +52,8 @@ int fileIO::writeDataFile(string fname, double *data, double *err, double *ang,
|
|||||||
if (nch==-1)
|
if (nch==-1)
|
||||||
nch=getTotalNumberOfChannels();
|
nch=getTotalNumberOfChannels();
|
||||||
|
|
||||||
|
cout << "Write filexxx...." << endl;
|
||||||
|
|
||||||
return fileIOStatic::writeDataFile(fname, nch, data, err, ang, dataformat);
|
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)
|
if (nch==-1)
|
||||||
nch=getTotalNumberOfChannels();
|
nch=getTotalNumberOfChannels();
|
||||||
|
|
||||||
|
cout << "Write file...." << endl;
|
||||||
|
|
||||||
return fileIOStatic::writeDataFile(outfile, nch, data, err, ang, dataformat, offset);
|
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){
|
int fileIO::writeDataFile(ofstream &outfile, int *data, int offset){
|
||||||
|
|
||||||
|
cout << "Write raw file...." << endl;
|
||||||
return fileIOStatic::writeDataFile(outfile, getTotalNumberOfChannels(), data, offset);
|
return fileIOStatic::writeDataFile(outfile, getTotalNumberOfChannels(), data, offset);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -108,6 +113,7 @@ int fileIO::writeDataFile(void *data, int iframe) {
|
|||||||
|
|
||||||
|
|
||||||
int fileIO::closeDataFile() {
|
int fileIO::closeDataFile() {
|
||||||
|
cout << "close file...." << endl;
|
||||||
if (filefd)
|
if (filefd)
|
||||||
fclose(filefd);
|
fclose(filefd);
|
||||||
filefd=NULL;
|
filefd=NULL;
|
||||||
@ -120,6 +126,7 @@ int fileIO::closeDataFile() {
|
|||||||
|
|
||||||
int fileIO::writeDataFile(string fname, short int *data){
|
int fileIO::writeDataFile(string fname, short int *data){
|
||||||
|
|
||||||
|
cout << "Write raw file...." << endl;
|
||||||
return fileIOStatic::writeDataFile(fname, getTotalNumberOfChannels(), data);
|
return fileIOStatic::writeDataFile(fname, getTotalNumberOfChannels(), data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -341,9 +341,9 @@ class fileIOStatic {
|
|||||||
\param offset start channel number
|
\param offset start channel number
|
||||||
\returns OK or FAIL if it could not write the file or data=NULL
|
\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; \
|
int idata; \
|
||||||
if (data==NULL) { \
|
if (data==NULL || nch==0) { \
|
||||||
cout << "No data to write!" << endl; \
|
cout << "No data to write!" << endl; \
|
||||||
return slsDetectorDefs::FAIL; \
|
return slsDetectorDefs::FAIL; \
|
||||||
} \
|
} \
|
||||||
|
@ -117,6 +117,7 @@ void postProcessing::processFrame(int *myData, int delflag) {
|
|||||||
if (getDetectorsType()==MYTHEN){
|
if (getDetectorsType()==MYTHEN){
|
||||||
// if (fdata) {
|
// if (fdata) {
|
||||||
//uses static function?!?!?!?
|
//uses static function?!?!?!?
|
||||||
|
// cout << "write to file?!?!?!?" << endl;
|
||||||
writeDataFile (fname+string(".raw"),fdata, NULL, NULL, 'i');
|
writeDataFile (fname+string(".raw"),fdata, NULL, NULL, 'i');
|
||||||
} else {
|
} else {
|
||||||
writeDataFile ((void*)myData, currentFrameIndex);
|
writeDataFile ((void*)myData, currentFrameIndex);
|
||||||
@ -130,6 +131,9 @@ void postProcessing::processFrame(int *myData, int delflag) {
|
|||||||
doProcessing(fdata,delflag, fname);
|
doProcessing(fdata,delflag, fname);
|
||||||
} else
|
} else
|
||||||
if (dataReady){
|
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());
|
thisData=new detectorData(fdata,NULL,NULL,getCurrentProgress(),(fname+string(".raw")).c_str(),getTotalNumberOfChannels());
|
||||||
dataReady(thisData, currentFrameIndex, pCallbackArg);
|
dataReady(thisData, currentFrameIndex, pCallbackArg);
|
||||||
delete thisData;
|
delete thisData;
|
||||||
@ -220,6 +224,7 @@ void postProcessing::doProcessing(double *lfdata, int delflag, string fname) {
|
|||||||
|
|
||||||
val=new double[arraySize];
|
val=new double[arraySize];
|
||||||
err=new double[arraySize];
|
err=new double[arraySize];
|
||||||
|
|
||||||
initDataset(0);
|
initDataset(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -250,6 +255,8 @@ void postProcessing::doProcessing(double *lfdata, int delflag, string fname) {
|
|||||||
|
|
||||||
|
|
||||||
if (dataReady) {
|
if (dataReady) {
|
||||||
|
cout << "callback arg "<< getCurrentProgress()<< " " << (fname+ext).c_str() << " " << np << endl;
|
||||||
|
|
||||||
thisData=new detectorData(val,err,ang,getCurrentProgress(),(fname+ext).c_str(),np);
|
thisData=new detectorData(val,err,ang,getCurrentProgress(),(fname+ext).c_str(),np);
|
||||||
dataReady(thisData, currentFrameIndex, pCallbackArg);
|
dataReady(thisData, currentFrameIndex, pCallbackArg);
|
||||||
delete thisData;
|
delete thisData;
|
||||||
@ -758,6 +765,9 @@ void postProcessing::initDataset(int r) {
|
|||||||
|
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
|
cout << "implicit inti dataset! " << endl;
|
||||||
|
|
||||||
ppFun->initDataset();
|
ppFun->initDataset();
|
||||||
|
|
||||||
|
|
||||||
|
@ -18,9 +18,11 @@ int postProcessingFuncs::initDataset() {
|
|||||||
me=new double[nBins];
|
me=new double[nBins];
|
||||||
mm=new int[nBins];
|
mm=new int[nBins];
|
||||||
resetMerging(mp,mv,me,mm, nBins);
|
resetMerging(mp,mv,me,mm, nBins);
|
||||||
|
cout << "nbins " << nBins << endl;
|
||||||
} else {
|
} else {
|
||||||
mv=new double[totalChans];
|
mv=new double[totalChans];
|
||||||
me=new double[totalChans];
|
me=new double[totalChans];
|
||||||
|
cout << "nchans " << totalChans << endl;
|
||||||
}
|
}
|
||||||
totalI0=0;
|
totalI0=0;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user