enableWriteToFile added

git-svn-id: file:///afs/psi.ch/project/sls_det_software/svn/slsDetectorSoftware@204 951219d9-93cf-4727-9268-0efd64621fa3
This commit is contained in:
ramani_n
2012-07-17 10:05:43 +00:00
parent c04ed80b83
commit aa480795c6
10 changed files with 71 additions and 24 deletions

View File

@ -1,5 +1,5 @@
CFLAGS= -DC_ONLY CFLAGS= -DC_ONLY
FLAGS= -DVERBOSE -DVERYVERBOSE #FLAGS= -DVERBOSE -DVERYVERBOSE
INCLUDES= -IcommonFiles -IslsDetector -IMySocketTCP -IusersFunctions -ImultiSlsDetector -IslsDetectorUtils -IslsDetectorCommand -IslsDetectorAnalysis INCLUDES= -IcommonFiles -IslsDetector -IMySocketTCP -IusersFunctions -ImultiSlsDetector -IslsDetectorUtils -IslsDetectorCommand -IslsDetectorAnalysis
#EPICSFLAGS=-D EPICS -I/usr/local/epics/base/include/ -I /usr/local/epics/base/include/os/Linux/ -L /usr/local/epics/base/lib/SL5-x86/ -Wl,-R/usr/local/epics/base/lib/SL5-x86 -lca -lCom #EPICSFLAGS=-D EPICS -I/usr/local/epics/base/include/ -I /usr/local/epics/base/include/os/Linux/ -L /usr/local/epics/base/lib/SL5-x86/ -Wl,-R/usr/local/epics/base/lib/SL5-x86 -lca -lCom

View File

@ -103,7 +103,7 @@ typedef struct {
int reg; /**< is the module register (e.g. dynamic range?) int reg; /**< is the module register (e.g. dynamic range?)
\see moduleRegisterBit */ \see moduleRegisterBit */
float *dacs; /**< is the pointer to the array of the dac values (in V) */ float *dacs; /**< is the pointer to the array of the dac values (in V) */
float *adcs; /**< is the pointer to the array of the adc values (in V) */ float *adcs; /**< is the pointer to the array of the adc values (in V) FLAT_FIELD_CORRECTION*/
int *chipregs; /**< is the pointer to the array of the chip registers int *chipregs; /**< is the pointer to the array of the chip registers
\see ::chipRegisterBit */ \see ::chipRegisterBit */
int *chanregs; /**< is the pointer to the array of the channel registers int *chanregs; /**< is the pointer to the array of the channel registers
@ -426,6 +426,7 @@ enum correctionFlags {
FLAT_FIELD_CORRECTION, /**< data are flat field corrected */ FLAT_FIELD_CORRECTION, /**< data are flat field corrected */
RATE_CORRECTION, /**< data are rate corrected */ RATE_CORRECTION, /**< data are rate corrected */
ANGULAR_CONVERSION,/**< angular conversion is calculated */ ANGULAR_CONVERSION,/**< angular conversion is calculated */
WRITE_FILE,
I0_NORMALIZATION I0_NORMALIZATION
}; };
/** port type */ /** port type */

View File

@ -3977,7 +3977,9 @@ float* slsDetector::decodeData(int *datain, float *fdata) {
} }
*/ */
int slsDetector::setFlatFieldCorrection(string fname){ int slsDetector::setFlatFieldCorrection(string fname)
{
float data[thisDetector->nModMax[X]*thisDetector->nModMax[Y]*thisDetector->nChans*thisDetector->nChips]; float data[thisDetector->nModMax[X]*thisDetector->nModMax[Y]*thisDetector->nChans*thisDetector->nChips];
//float err[thisDetector->nModMax[X]*thisDetector->nModMax[Y]*thisDetector->nChans*thisDetector->nChips]; //float err[thisDetector->nModMax[X]*thisDetector->nModMax[Y]*thisDetector->nChans*thisDetector->nChips];
float xmed[thisDetector->nModMax[X]*thisDetector->nModMax[Y]*thisDetector->nChans*thisDetector->nChips]; float xmed[thisDetector->nModMax[X]*thisDetector->nModMax[Y]*thisDetector->nChans*thisDetector->nChips];

View File

@ -64,7 +64,7 @@ using namespace std;
*/ */
//public virtual slsDetectorUsers, //public virtual slsDetectorUsers,
class slsDetectorBase : public virtual slsDetectorDefs, public slsDetectorUsers { class slsDetectorBase : public virtual slsDetectorUsers , public virtual slsDetectorDefs {
public: public:

View File

@ -183,6 +183,11 @@ slsDetectorCommand::slsDetectorCommand(slsDetectorUtils *det) {
descrToFuncMap[i].m_pFuncPtr=&slsDetectorCommand::cmdOnline; descrToFuncMap[i].m_pFuncPtr=&slsDetectorCommand::cmdOnline;
i++; i++;
descrToFuncMap[i].m_pFuncName="enablefwrite"; //
descrToFuncMap[i].m_pFuncPtr=&slsDetectorCommand::cmdEnablefwrite;
i++;
/* Acquisition actions */ /* Acquisition actions */
descrToFuncMap[i].m_pFuncName="positions"; // descrToFuncMap[i].m_pFuncName="positions"; //
@ -530,6 +535,7 @@ slsDetectorCommand::slsDetectorCommand(slsDetectorUtils *det) {
descrToFuncMap[i].m_pFuncPtr=&slsDetectorCommand::cmdTimer; descrToFuncMap[i].m_pFuncPtr=&slsDetectorCommand::cmdTimer;
i++; i++;
/* read only timers */ /* read only timers */
descrToFuncMap[i].m_pFuncName="exptimel"; // descrToFuncMap[i].m_pFuncName="exptimel"; //
@ -1295,6 +1301,32 @@ string slsDetectorCommand::helpFileName(int narg, char *args[], int action){
} }
//enable file write
string slsDetectorCommand::cmdEnablefwrite(int narg, char *args[], int action){
int i;
char ans[100];
if (action==HELP_ACTION) {
return helpFileName(narg, args, action);
}
if (action==PUT_ACTION) {
if (sscanf(args[1],"%d",&i))
myDet->enableWriteToFile(i);
;
}
return string(myDet->getFileName());
}
string slsDetectorCommand::helpEnablefwrite(int narg, char *args[], int action){
ostringstream os;
if (action==GET_ACTION || action==HELP_ACTION)
os << string("When Enabled writes the data into the file\n");
if (action==PUT_ACTION || action==HELP_ACTION)
os << string(" i \t should be 1 or 0 or -1\n");
return os.str();
}
string slsDetectorCommand::cmdFileIndex(int narg, char *args[], int action){ string slsDetectorCommand::cmdFileIndex(int narg, char *args[], int action){

View File

@ -81,7 +81,7 @@ class slsDetectorCommand : public virtual slsDetectorDefs {
static string helpImage(int narg, char *args[], int action); static string helpImage(int narg, char *args[], int action);
static string helpCounter(int narg, char *args[], int action); static string helpCounter(int narg, char *args[], int action);
static string helpADC(int narg, char *args[], int action); static string helpADC(int narg, char *args[], int action);
static string helpEnablefwrite(int narg, char *args[], int action);
@ -151,7 +151,8 @@ class slsDetectorCommand : public virtual slsDetectorDefs {
string cmdImage(int narg, char *args[], int action); string cmdImage(int narg, char *args[], int action);
string cmdCounter(int narg, char *args[], int action); string cmdCounter(int narg, char *args[], int action);
string cmdADC(int narg, char *args[], int action); string cmdADC(int narg, char *args[], int action);
//string helpADC(int narg, char *args[], int action);
string cmdEnablefwrite(int narg, char *args[], int action);

View File

@ -141,6 +141,7 @@ class slsDetectorUsers
\returns 0 if disable (or file could not be read), >0 otherwise \returns 0 if disable (or file could not be read), >0 otherwise
*/ */
virtual int setFlatFieldCorrectionFile(string fname="")=0; virtual int setFlatFieldCorrectionFile(string fname="")=0;
/** /**
@ -171,6 +172,10 @@ class slsDetectorUsers
*/ */
virtual int enableAngularConversion(int i=-1)=0; virtual int enableAngularConversion(int i=-1)=0;
/**Enable write file function included*/
virtual int enableWriteToFile(int i=-1)=0;
/** /**
@short set positions for the acquisition @short set positions for the acquisition
\param nPos number of positions \param nPos number of positions

View File

@ -2,6 +2,7 @@
#include "usersFunctions.h" #include "usersFunctions.h"
postProcessing::postProcessing(){ postProcessing::postProcessing(){
pthread_mutex_t mp1 = PTHREAD_MUTEX_INITIALIZER; pthread_mutex_t mp1 = PTHREAD_MUTEX_INITIALIZER;
mp=mp1; mp=mp1;
@ -33,7 +34,7 @@ int postProcessing::flatFieldCorrect(float datain, float errin, float &dataout,
if (dataout>0) if (dataout>0)
errout=sqrt(e*ffcoefficient*e*ffcoefficient+datain*fferr*datain*fferr); errout=sqrt(e*ffcoefficient*e*ffcoefficient+datain*fferr*datain*fferr);
else else
errout=1.; errout=1.0;
return 0; return 0;
}; };
@ -147,12 +148,19 @@ void postProcessing::processFrame(int *myData, int delflag) {
fdata=decodeData(myData, fdata); fdata=decodeData(myData, fdata);
fname=createFileName();
fname=createFileName();
//Checking for write flag
if(*correctionMask&(1<<WRITE_FILE))
{
//uses static function?!?!?!? //uses static function?!?!?!?
writeDataFile (fname+string(".raw"),fdata, NULL, NULL, 'i'); writeDataFile (fname+string(".raw"),fdata, NULL, NULL, 'i');
}
doProcessing(fdata,delflag, fname); doProcessing(fdata,delflag, fname);
delete [] myData; delete [] myData;

View File

@ -31,11 +31,11 @@ using namespace std;
(including thread for writing data files and plotting in parallel with the acquisition) (including thread for writing data files and plotting in parallel with the acquisition)
*/ */
class postProcessing : public angularConversion, public fileIO
//: public virtual angularConversion, public virtual fileIO class postProcessing : public virtual angularConversion, public virtual fileIO {
{
//: public angularConversion, public fileIO
public: public:
postProcessing(); postProcessing();
@ -66,7 +66,7 @@ class postProcessing : public angularConversion, public fileIO
\param ecorr if !=NULL the flat field correction errors will be filled with ecorr (1 otherwise) \param ecorr if !=NULL the flat field correction errors will be filled with ecorr (1 otherwise)
\returns 0 if ff correction disabled, >0 otherwise \returns 0 if ff correction disabled, >0 otherwise
*/ */
virtual int setFlatFieldCorrection(float *corr, float *ecorr=NULL)=0; virtual int setFlatFieldCorrection(float *corr, float *ecorr=NULL)=0;
/** /**
set bad channels correction set bad channels correction
@ -120,16 +120,17 @@ class postProcessing : public angularConversion, public fileIO
static int rateCorrect(float datain, float errin, float &dataout, float &errout, float tau, float t); static int rateCorrect(float datain, float errin, float &dataout, float &errout, float tau, float t);
int enableWriteToFile(int i=-1) {if (i>0) ((*correctionMask)|=(1<<WRITE_FILE)); if(i==0) ((*correctionMask)&=~(1<< WRITE_FILE)); return ((*correctionMask)&(1<< WRITE_FILE));};
int setAngularCorrectionMask(int i=-1){if (i==0) (*correctionMask)&=~(1<< ANGULAR_CONVERSION); if (i>0) (*correctionMask)|=(1<< ANGULAR_CONVERSION); return ((*correctionMask)&(1<< ANGULAR_CONVERSION));}; int setAngularCorrectionMask(int i=-1){if (i==0) (*correctionMask)&=~(1<< ANGULAR_CONVERSION); if (i>0) (*correctionMask)|=(1<< ANGULAR_CONVERSION); return ((*correctionMask)&(1<< ANGULAR_CONVERSION));};
int enableAngularConversion(int i=-1) {if (i>0) return setAngularConversionFile("default"); if (i==0) return setAngularConversionFile(""); return setAngularCorrectionMask();} int enableAngularConversion(int i=-1) {if (i>0) return setAngularConversionFile("default"); if (i==0) return setAngularConversionFile(""); return setAngularCorrectionMask();};
int enableBadChannelCorrection(int i=-1) {if (i>0) return setBadChannelCorrection("default"); if (i==0) return setBadChannelCorrection(""); return ((*correctionMask)&(1<< DISCARD_BAD_CHANNELS));} int enableBadChannelCorrection(int i=-1) {if (i>0) return setBadChannelCorrection("default"); if (i==0) return setBadChannelCorrection(""); return ((*correctionMask)&(1<< DISCARD_BAD_CHANNELS));};
@ -138,11 +139,7 @@ class postProcessing : public angularConversion, public fileIO
string getBadChannelCorrectionFile() {if ((*correctionMask)&(1<< DISCARD_BAD_CHANNELS)) return string(badChanFile); else return string("none");}; string getBadChannelCorrectionFile() {if ((*correctionMask)&(1<< DISCARD_BAD_CHANNELS)) return string(badChanFile); else return string("none");};
/**
/**
get flat field corrections file directory get flat field corrections file directory
\returns flat field correction file directory \returns flat field correction file directory
*/ */
@ -169,7 +166,7 @@ s
\returns thread flag \returns thread flag
*/ */
int setThreadedProcessing(int b=-1) {if (b>=0) *threadedProcessing=b; return *threadedProcessing;} int setThreadedProcessing(int b=-1) {if (b>=0) *threadedProcessing=b; return *threadedProcessing;};

View File

@ -158,10 +158,10 @@ float defaultGetPosition(void *d) {
return pos return pos;
;
} }
/* moves the encoder to position p */ /* moves the encoder to position p */
@ -179,6 +179,7 @@ int defaultGoToPosition(float p,void *d) {
#ifdef VERBOSE #ifdef VERBOSE
printf("caput: success\n"); printf("caput: success\n");
#endif #endif
} else } else
printf(ca_message(status)); printf(ca_message(status));
#else #else