Changeset 16603 for trunk


Ignore:
Timestamp:
06/02/13 16:24:14 (11 years ago)
Author:
tbretz
Message:
Fixed some stupid mistakes of the changes yesterday... maybe I was too tired altready that I evern misinterpreted the output of my test program.
File:
1 edited

Legend:

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

    r16561 r16603  
    2929
    3030public:
    31     DrsCalibrate() : fNumEntries(0), fNumSamples(0), fNumChannels(0) { }
     31    DrsCalibrate() : fNumEntries(0), fNumSamples(0), fNumChannels(0)
     32    {
     33        fSum.reserve(1024*1440);
     34        fSum2.reserve(1024*1440);
     35    }
     36
    3237    void Reset()
    3338    {
     
    4550        fNumSamples  = samples;
    4651
    47         fSum.resize(samples*channels);
    48         fSum2.resize(samples*channels);
     52        fSum.assign(samples*channels, 0);
     53        fSum2.assign(samples*channels, 0);
    4954    }
    5055
     
    7176                fSum2[abs] += v*v;
    7277            }
    73         */
     78        }*/
    7479
    7580        // This version is 2.5 times faster because the compilers optimization
     
    8388            const size_t pos = ch*1024;
    8489
    85             const int16_t *pval    = val + pos;
    86             const int16_t *end_val = val + 1024;
    87 
    88             int64_t *beg_sum  = fSum.data()  + pos;
    89             int64_t *beg_sum2 = fSum2.data() + pos;
    90 
    91             int64_t *psum  = beg_sum  + spos;
    92             int64_t *psum2 = beg_sum2 + spos;
     90            const int16_t *beg_val  = val          + pos;
     91            int64_t       *beg_sum  = fSum.data()  + pos;
     92            int64_t       *beg_sum2 = fSum2.data() + pos;
     93
     94            const int16_t *pval  = beg_val;          // val[rel]
     95            int64_t       *psum  = beg_sum  + spos;  // fSum[abs]
     96            int64_t       *psum2 = beg_sum2 + spos;  // fSum2[abs]
    9397
    9498            while (psum<beg_sum+1024)
     
    96100                const int64_t v = *pval++;
    97101
    98                 *psum++  = v;
    99                 *psum2++ = v*v;
     102                *psum++  += v;
     103                *psum2++ += v*v;
    100104            }
    101105
     
    103107            psum2 = beg_sum2;
    104108
    105             while (pval<end_val)
     109            while (pval<beg_val+1024)
    106110            {
    107111                const int64_t v = *pval++;
    108112
    109                 *psum++  = v;
    110                 *psum2++ = v*v;
     113                *psum++  += v;
     114                *psum2++ += v*v;
    111115            }
    112116        }
     
    152156            const size_t pos = ch*1024;
    153157
    154             const int16_t *pval    = val + pos;
    155             const int16_t *end_val = val + 1024;
    156 
    157             const int32_t *beg_offset = offset + pos;
    158             const int32_t *poffset    = beg_offset + spos;
    159 
    160             int64_t *beg_sum  = fSum.data()  + pos;
    161             int64_t *beg_sum2 = fSum2.data() + pos;
    162 
    163             int64_t *psum     = beg_sum    + spos;
    164             int64_t *psum2    = beg_sum2   + spos;
     158            const int16_t *beg_val    = val          + pos;
     159            const int32_t *beg_offset = offset       + pos;
     160            int64_t       *beg_sum    = fSum.data()  + pos;
     161            int64_t       *beg_sum2   = fSum2.data() + pos;
     162
     163
     164            const int16_t *pval    = beg_val;            // val[rel]
     165            const int32_t *poffset = beg_offset + spos;  // offset[abs]
     166            int64_t       *psum    = beg_sum    + spos;  // fSum[abs]
     167            int64_t       *psum2   = beg_sum2   + spos;  // fSum2[abs]
    165168
    166169            while (psum<beg_sum+1024)
     
    168171                const int64_t v = int64_t(*pval++)*scale - *poffset++;
    169172
    170                 *psum++  = v;
    171                 *psum2++ = v*v;
     173                *psum++  += v;
     174                *psum2++ += v*v;
    172175            }
    173176
     
    176179            poffset = beg_offset;
    177180
    178             while (pval<end_val)
     181            while (pval<beg_val+1024)
    179182            {
    180183                const int64_t v = int64_t(*pval++)*scale - *poffset++;
    181184
    182                 *psum++  = v;
    183                 *psum2++ = v*v;
     185                *psum++  += v;
     186                *psum2++ += v*v;
    184187            }
    185188        }
     
    244247                fSum2[rel] += v*v;
    245248            }
    246         }*/
     249            }*/
    247250
    248251        // This version is 1.5 times faster because the compilers optimization
     
    256259            const size_t pos = ch*fNumSamples;
    257260
    258             const int16_t *pval = val + pos;
    259 
    260             const int32_t *beg_offset = offset + ch*1024;
    261             const int32_t *poffset    = beg_offset + spos;
    262 
    263             int64_t *beg_sum  = fSum.data()  + pos;
    264             int64_t *beg_sum2 = fSum2.data() + pos;
    265 
    266             int64_t *psum     = beg_sum;
    267             int64_t *psum2    = beg_sum2;
     261            const int32_t *beg_offset = offset       + ch*1024;
     262            const int16_t *beg_val    = val          + pos;
     263            int64_t *beg_sum          = fSum.data()  + pos;
     264            int64_t *beg_sum2         = fSum2.data() + pos;
     265
     266
     267            const int16_t *pval    = beg_val;             // val[rel]
     268            const int32_t *poffset = beg_offset + spos;   // offset[abs]
     269            int64_t *psum          = beg_sum;             // fSum[rel]
     270            int64_t *psum2         = beg_sum2;            // fSum2[rel]
    268271
    269272            if (spos+fNumSamples>1024)
     
    273276                    const int64_t v = int64_t(*pval++)*scale - *poffset++;
    274277
    275                     *psum++  = v;
    276                     *psum2++ = v*v;
     278                    *psum++  += v;
     279                    *psum2++ += v*v;
    277280                }
    278281
     
    284287                const int64_t v = int64_t(*pval++)*scale - *poffset++;
    285288
    286                 *psum++  = v;
    287                 *psum2++ = v*v;
     289                *psum++  += v;
     290                *psum2++ += v*v;
    288291            }
    289292        }
     
    302305            return;
    303306        }
    304 
    305307        /*
    306308        for (size_t i=0; i<roi; i++)
     
    317319            const int64_t div = gain[abs];
    318320            vec[i] = div==0 ? 0 : double(v)*scalegain/div;
    319         }*/
     321        }
     322        */
    320323
    321324        // This version is faster because the compilers optimization
    322325        // is not biased by the evaluation of %1024
    323326        // (Here we are dominated by numerics... improvement ~10%)
    324         const int32_t *poffset = offset + start;
    325         const int64_t *pgain   = gain   + start;
    326         const int16_t *pval    = val;
    327 
    328         float *pvec = vec;
     327        const int32_t *poffset = offset + start; // offset[abs]
     328        const int64_t *pgain   = gain   + start; // gain[abs]
     329        const int16_t *pval    = val;            // val[rel]
     330        float         *pvec    = vec;            // vec[rel]
    329331
    330332        if (start+roi>1024)
     
    382384            const int64_t div = gain[abs]*scalerel;
    383385            vec[i] = div==0 ? 0 : double(v)*scalegain/div;
    384         }*/
    385 
     386        }
     387        */
    386388        // (Here we are dominated by numerics... improvement ~10%)
    387         const int32_t *poffset = offset + start;
    388         const int64_t *pgain   = gain   + start;
    389         const int16_t *pval    = val;
    390         const int64_t *ptrgoff = trgoff;
    391 
    392         float *pvec = vec;
     389        const int32_t *poffset = offset + start; // offset[abs]
     390        const int64_t *pgain   = gain   + start; // gain[abs]
     391        const int16_t *pval    = val;            // val[rel]
     392        const int64_t *ptrgoff = trgoff;         // trgoff[rel]
     393        float         *pvec    = vec;            // vec[rel]
    393394
    394395        if (start+roi>1024)
Note: See TracChangeset for help on using the changeset viewer.