diff --git a/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp b/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp index c1ba4aa5c..f2af190cd 100644 --- a/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp +++ b/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp @@ -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<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];}; diff --git a/slsDetectorSoftware/mythenDetectorServer/mythenDetectorServer b/slsDetectorSoftware/mythenDetectorServer/mythenDetectorServer index 9be5a0871..676b1fc36 100755 Binary files a/slsDetectorSoftware/mythenDetectorServer/mythenDetectorServer and b/slsDetectorSoftware/mythenDetectorServer/mythenDetectorServer differ diff --git a/slsDetectorSoftware/mythenDetectorServer/server_funcs.c b/slsDetectorSoftware/mythenDetectorServer/server_funcs.c index 35322323e..1c35b06de 100755 --- a/slsDetectorSoftware/mythenDetectorServer/server_funcs.c +++ b/slsDetectorSoftware/mythenDetectorServer/server_funcs.c @@ -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)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]; }; diff --git a/slsDetectorSoftware/slsDetector/slsDetector.h b/slsDetectorSoftware/slsDetector/slsDetector.h index 02a150886..219bc0bbf 100644 --- a/slsDetectorSoftware/slsDetector/slsDetector.h +++ b/slsDetectorSoftware/slsDetector/slsDetector.h @@ -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 diff --git a/slsDetectorSoftware/slsDetector/slsDetectorCommand.cpp b/slsDetectorSoftware/slsDetector/slsDetectorCommand.cpp index c552bf5c9..552c0ef25 100644 --- a/slsDetectorSoftware/slsDetector/slsDetectorCommand.cpp +++ b/slsDetectorSoftware/slsDetector/slsDetectorCommand.cpp @@ -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") { diff --git a/slsDetectorSoftware/slsDetector/slsDetectorUtils.cpp b/slsDetectorSoftware/slsDetector/slsDetectorUtils.cpp index b77575f95..6547d6f67 100644 --- a/slsDetectorSoftware/slsDetector/slsDetectorUtils.cpp +++ b/slsDetectorSoftware/slsDetector/slsDetectorUtils.cpp @@ -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); - + + } diff --git a/slsDetectorSoftware/slsDetectorAnalysis/FileIO_Standalone.cpp b/slsDetectorSoftware/slsDetectorAnalysis/FileIO_Standalone.cpp index 406059cbe..27bee95b3 100644 --- a/slsDetectorSoftware/slsDetectorAnalysis/FileIO_Standalone.cpp +++ b/slsDetectorSoftware/slsDetectorAnalysis/FileIO_Standalone.cpp @@ -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; ichaninitDataset(); diff --git a/slsDetectorSoftware/slsDetectorAnalysis/postProcessingFuncs.cpp b/slsDetectorSoftware/slsDetectorAnalysis/postProcessingFuncs.cpp index 6eff3db78..06dd2b99c 100644 --- a/slsDetectorSoftware/slsDetectorAnalysis/postProcessingFuncs.cpp +++ b/slsDetectorSoftware/slsDetectorAnalysis/postProcessingFuncs.cpp @@ -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;