mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2025-04-28 01:00: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->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 {
|
||||
|
@ -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];};
|
||||
|
||||
|
Binary file not shown.
@ -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) {
|
||||
|
@ -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];
|
||||
};
|
||||
|
@ -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
|
||||
|
@ -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") {
|
||||
|
@ -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);
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
@ -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) {
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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 << " "; \
|
||||
|
@ -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();
|
||||
|
||||
|
||||
|
@ -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;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user