Index: fact/tools/rootmacros/zerosearch.C
===================================================================
--- fact/tools/rootmacros/zerosearch.C	(revision 14802)
+++ fact/tools/rootmacros/zerosearch.C	(revision 14803)
@@ -220,12 +220,14 @@
     int VerbosityLevel)
 {
-if ( FallingEdgeWidth < 1){
-    if (VerbosityLevel > 0){
-      cout << " removeRegionOnFallingEdge: FallingEdgeWidth  < 1" << endl;
-      cout << " FallingEdgeWidth =" << FallingEdgeWidth << endl;
-      cout << "returning." << endl;
-    return regions.size();
-    }
-  }
+    //throw exceptions
+    if ( FallingEdgeWidth < 1){
+        if (VerbosityLevel > 0){
+            cout << " removeRegionOnFallingEdge: FallingEdgeWidth  < 1" << endl;
+            cout << " FallingEdgeWidth =" << FallingEdgeWidth << endl;
+            cout << "returning." << endl;
+            return regions.size();
+        }
+    }
+    //throw exceptions
     if (regions.size() < 1){
         if (VerbosityLevel > 3)
@@ -260,5 +262,5 @@
     if (EdgeWidth < 1){
         if (VerbosityLevel > 0){
-            cout << "removeReginWithMaximaOnEdge: EdgeWidth < 1" << endl;
+            cout << "removeRegionWithMaximaOnEdge: EdgeWidth < 1" << endl;
             cout << "EdgeWidth=" << EdgeWidth << endl;
             cout << "returning." << endl;
@@ -466,5 +468,25 @@
         // ALARM check for out of range values...
 
-
+        bool passed = false;
+        for (int slice=reg->maxPos;
+                    slice > 1; --slice)
+        {
+            if ( data[slice] < 0.9*data[reg->maxPos] && !passed)
+            {
+                beginRisingEdge = reg->maxPos - slice;
+                passed = true;
+            }
+
+            if ( data[slice] < 0.1*data[reg->maxPos])
+            {
+                endRisingEdge = reg->maxPos - slice;
+                passed = false;
+                reg->lengthOfRisingEdge=endRisingEdge - beginRisingEdge;
+                break;
+            }
+        }
+
+
+        //calculate mean of x and y coordinate
         for (int slice=reg->maxPos - beginRisingEdge;
                     slice > reg->maxPos - endRisingEdge; --slice)
@@ -478,12 +500,16 @@
         xmean /= counter;
         ymean /= counter;
+
         if (VerbosityLevel > 2) cout << "## xmean: " << xmean << endl;
         if (VerbosityLevel > 2) cout << "## ymean: " << ymean << endl;
 
+        cov = 0.0;
+        var = 0.0;
+
         for (int slice=reg->maxPos - beginRisingEdge;
                     slice > reg->maxPos - endRisingEdge; --slice)
         {
-            cov = (data[slice] - ymean) * (slice - xmean);
-            var = (slice - xmean) * (slice - xmean);
+            cov += (data[slice] - ymean) * (slice - xmean);
+            var += (slice - xmean) * (slice - xmean);
         }
         if (VerbosityLevel > 2) cout << "## cov: " << cov << endl;
@@ -492,4 +518,5 @@
         slope = cov / var;
         intercept = ymean - slope * xmean;
+
         // now calculate, where the fittet line crosses the threshold
         pos_of_thr_Xing = (thr - intercept) / slope;
