Ignore:
Timestamp:
08/07/11 16:42:21 (13 years ago)
Author:
tbretz
Message:
Changed the Apply function to avoid too high numbers; little improvements to GetPixelStats
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Mars/mcore/DrsCalib.h

    r11816 r11831  
    204204    static void Apply(float *vec, const int16_t *val, const int16_t *start, uint32_t roi,
    205205                      const int32_t *offset, const uint32_t scaleabs,
    206                       const int64_t *gain,   const uint64_t scalegain,
    207                       const int64_t *trgoff, const uint64_t scalerel)
    208     {
     206                      const int64_t *gain,   /*const*/ uint64_t scalegain,
     207                      const int64_t *trgoff, /*const*/ uint64_t scalerel)
     208    {
     209
     210        /*
     211        scalegain *= scaleabs;
     212        scalerel  *= scaleabs;
     213
    209214        for (size_t ch=0; ch<1440; ch++)
    210215        {
    211216            const size_t pos = ch*roi;
    212 
    213217            const int16_t spos = start[ch];
    214218            if (spos<0)
     
    236240                vec[rel] = double(v)*scalegain/div;
    237241            }
     242        }*/
     243
     244        for (size_t ch=0; ch<1440; ch++)
     245        {
     246            const size_t pos = ch*roi;
     247
     248            const int16_t spos = start[ch];
     249            if (spos<0)
     250            {
     251                memset(vec+pos, 0, roi);
     252                continue;
     253            }
     254
     255            for (size_t i=0; i<roi; i++)
     256            {
     257                // Value is relative to trigger
     258                // Offset is relative to DRS pipeline
     259                // Abs is corresponding index relative to DRS pipeline
     260                const size_t rel = pos +  i;
     261                const size_t abs = pos + (spos+i)%1024;
     262
     263                const int64_t v =
     264                    + (int64_t(val[rel])*scaleabs-offset[abs])*scalerel
     265                    - trgoff[rel]
     266                    ;
     267
     268                const int64_t div = gain[abs]*scalerel;
     269                vec[rel] = double(v)*scalegain/div;
     270            }
    238271        }
    239272    }
     
    317350    static void GetPixelStats(float *ptr, const float *data, uint16_t roi)
    318351    {
     352        if (roi==0)
     353            return;
     354
    319355        for (int i=0; i<1440; i++)
    320356        {
    321357            const float *vec = data+i*roi;
    322358
    323             double max = vec[0];
    324             int    pos = 0;
     359            int    pos  = 0;
    325360            double sum  = vec[0];
    326361            double sum2 = vec[0]*vec[0];
     
    330365                sum2 += vec[j]*vec[j];
    331366
    332                 if (vec[j]>max)
    333                 {
    334                     max = vec[j];
     367                if (vec[j]>vec[pos])
    335368                    pos = j;
    336                 }
    337369            }
    338370            sum  /= roi;
     
    341373            *(ptr+0*1440+i) = sum;
    342374            *(ptr+1*1440+i) = sqrt(sum2 - sum * sum);
    343             *(ptr+2*1440+i) = max;
     375            *(ptr+2*1440+i) = vec[pos];
    344376            *(ptr+3*1440+i) = pos;
    345377        }
Note: See TracChangeset for help on using the changeset viewer.