solved bug in angular conversion

git-svn-id: file:///afs/psi.ch/project/sls_det_software/svn/slsDetectorSoftware@186 951219d9-93cf-4727-9268-0efd64621fa3
This commit is contained in:
bergamaschi 2012-06-01 13:57:31 +00:00
parent 0a561c1c1f
commit ed84d21da0
3 changed files with 39 additions and 23 deletions

View File

@ -204,6 +204,10 @@ int angularConversion::finalizeMerging(float *mp, float *mv, float *me, int *mm,
int np=0;
for (int ibin=0; ibin<nb; ibin++) {
if (mm[ibin]>0) {
#ifdef VERBOSE
cout << "finalize " << ibin << " "<< mm[ibin] << " " << mp[ibin]<< mv[ibin] << me[ibin] << endl;
#endif
mp[np]=mp[ibin]/mm[ibin];
mv[np]=mv[ibin]/mm[ibin];
me[np]=me[ibin]/mm[ibin];
@ -218,6 +222,7 @@ int angularConversion::finalizeMerging(float *mp, float *mv, float *me, int *mm,
//static
int angularConversion::addToMerging(float *p1, float *v1, float *e1, float *mp, float *mv,float *me, int *mm, int nchans, float binsize,int nbins, int *badChanMask ) {
float binmi=-180.;
int ibin=0;
@ -238,11 +243,11 @@ int angularConversion::addToMerging(float *p1, float *v1, float *e1, float *mp,
if (nchans==0)
return FAIL;
if (binsize==0)
return FAIL;
if (nbins==0)
if (binsize<=0)
return FAIL;
if (nbins<=0)
return FAIL;
for (int ip=0; ip<nchans; ip++) {
if (badChanMask) {
@ -255,6 +260,7 @@ int angularConversion::addToMerging(float *p1, float *v1, float *e1, float *mp,
}
ibin=(int)((p1[ip]-binmi)/binsize);
if (ibin<nbins && ibin>=0) {
mp[ibin]+=p1[ip];
mv[ibin]+=v1[ip];
@ -263,6 +269,10 @@ int angularConversion::addToMerging(float *p1, float *v1, float *e1, float *mp,
else
me[ibin]+=v1[ip];
mm[ibin]++;
#ifdef VERBOSE
cout << "add " << ibin << " "<< mm[ibin] << " " << mp[ibin]<< mv[ibin] << me[ibin] << endl;
#endif
} else
return FAIL;
}
@ -287,6 +297,7 @@ int angularConversion::deleteMerging() {
int angularConversion::resetMerging() {
getAngularConversionParameter(BIN_SIZE);
mergingBins=new float[nBins];
@ -304,6 +315,7 @@ int angularConversion::resetMerging() {
}
int angularConversion::resetMerging(float *mp, float *mv, float *me, int *mm) {
getAngularConversionParameter(BIN_SIZE);
if (nBins)
return resetMerging(mp, mv, me, mm,nBins);
else
@ -327,7 +339,6 @@ int angularConversion::finalizeMerging() {
int angularConversion::finalizeMerging(float *mp, float *mv, float *me, int *mm) {
if (nBins)
return finalizeMerging(mp, mv, me, mm, nBins);
else
@ -344,20 +355,24 @@ int angularConversion::addToMerging(float *p1, float *v1, float *e1, int *badCh
int angularConversion::addToMerging(float *p1, float *v1, float *e1, float *mp, float *mv,float *me, int *mm, int *badChanMask ) {
int del=0;
if (*binSize==0)
if (getAngularConversionParameter(BIN_SIZE)==0){
cout << "no bin size " << endl;
return FAIL;
}
if (nBins==0)
if (nBins==0) {
cout << "no bins " << endl;
return FAIL;
}
if (p1==NULL) {
del=1;
p1=convertAngles();
}
int ret=addToMerging(p1, v1, e1, mp, mv,me, mm,getTotalNumberOfChannels(), *binSize,nBins, badChanMask );
@ -430,6 +445,10 @@ float angularConversion::getAngularConversionParameter(angleConversionParameter
case FINE_OFFSET:
return *fineOffset;
case BIN_SIZE:
if (*binSize>0)
nBins=360./(*binSize);
else
nBins=0;
return *binSize;
case MOVE_FLAG:
if (moveFlag)

View File

@ -227,7 +227,7 @@ class angularConversion : public virtual slsDetectorBase {
\param bs bin size to be set
\returns actual bin size
*/
float setBinSize(float bs){return setAngularConversionParameter(BIN_SIZE,bs);};
float setBinSize(float bs){if (bs>0) nBins=360/bs; return setAngularConversionParameter(BIN_SIZE,bs);};
/**
get detector bin size

View File

@ -183,7 +183,6 @@ void postProcessing::doProcessing(float *lfdata, int delflag, string fname) {
float *rcdata=NULL, *rcerr=NULL;
float *ffcdata=NULL, *ffcerr=NULL;
float *ang=NULL;
@ -253,10 +252,8 @@ void postProcessing::doProcessing(float *lfdata, int delflag, string fname) {
cout << "add to merging "<< getCurrentPositionIndex() << endl;
#endif
if (*correctionMask&(1<< ANGULAR_CONVERSION))
addToMerging(ang, ffcdata, ffcerr, badChannelMask );
#ifdef VERBOSE
cout << getCurrentPositionIndex() << " " << getNumberOfPositions() << endl;