Index: /trunk/Mars/mcore/DrsCalib.h
===================================================================
--- /trunk/Mars/mcore/DrsCalib.h	(revision 11830)
+++ /trunk/Mars/mcore/DrsCalib.h	(revision 11831)
@@ -204,11 +204,15 @@
     static void Apply(float *vec, const int16_t *val, const int16_t *start, uint32_t roi,
                       const int32_t *offset, const uint32_t scaleabs,
-                      const int64_t *gain,   const uint64_t scalegain,
-                      const int64_t *trgoff, const uint64_t scalerel)
-    {
+                      const int64_t *gain,   /*const*/ uint64_t scalegain,
+                      const int64_t *trgoff, /*const*/ uint64_t scalerel)
+    {
+
+        /*
+        scalegain *= scaleabs;
+        scalerel  *= scaleabs;
+
         for (size_t ch=0; ch<1440; ch++)
         {
             const size_t pos = ch*roi;
-
             const int16_t spos = start[ch];
             if (spos<0)
@@ -236,4 +240,33 @@
                 vec[rel] = double(v)*scalegain/div;
             }
+        }*/
+
+        for (size_t ch=0; ch<1440; ch++)
+        {
+            const size_t pos = ch*roi;
+
+            const int16_t spos = start[ch];
+            if (spos<0)
+            {
+                memset(vec+pos, 0, roi);
+                continue;
+            }
+
+            for (size_t i=0; i<roi; i++)
+            {
+                // Value is relative to trigger
+                // Offset is relative to DRS pipeline
+                // Abs is corresponding index relative to DRS pipeline
+                const size_t rel = pos +  i;
+                const size_t abs = pos + (spos+i)%1024;
+
+                const int64_t v =
+                    + (int64_t(val[rel])*scaleabs-offset[abs])*scalerel
+                    - trgoff[rel]
+                    ;
+
+                const int64_t div = gain[abs]*scalerel;
+                vec[rel] = double(v)*scalegain/div;
+            }
         }
     }
@@ -317,10 +350,12 @@
     static void GetPixelStats(float *ptr, const float *data, uint16_t roi)
     {
+        if (roi==0)
+            return;
+
         for (int i=0; i<1440; i++)
         {
             const float *vec = data+i*roi;
 
-            double max = vec[0];
-            int    pos = 0;
+            int    pos  = 0;
             double sum  = vec[0];
             double sum2 = vec[0]*vec[0];
@@ -330,9 +365,6 @@
                 sum2 += vec[j]*vec[j];
 
-                if (vec[j]>max)
-                {
-                    max = vec[j];
+                if (vec[j]>vec[pos])
                     pos = j;
-                }
             }
             sum  /= roi;
@@ -341,5 +373,5 @@
             *(ptr+0*1440+i) = sum;
             *(ptr+1*1440+i) = sqrt(sum2 - sum * sum);
-            *(ptr+2*1440+i) = max;
+            *(ptr+2*1440+i) = vec[pos];
             *(ptr+3*1440+i) = pos;
         }
