|
21 | 21 | """Modules for finding the axis of rotation for 180 and 360 degrees scans""" |
22 | 22 |
|
23 | 23 | import numpy as np |
| 24 | +from numpy.polynomial import Polynomial |
24 | 25 | from httomolibgpu import cupywrapper |
25 | 26 |
|
26 | 27 | cp = cupywrapper.cp |
@@ -718,9 +719,23 @@ def _calculate_curvature(list_metric): |
718 | 719 |
|
719 | 720 | # work mostly on CPU here - we have very small arrays here |
720 | 721 | list1 = cp.asnumpy(list_metric[min_pos - radi : min_pos + radi + 1]) |
721 | | - afact1 = np.polyfit(np.arange(0, 2 * radi + 1), list1, 2)[0] |
| 722 | + if not all(map(np.isfinite, list1)): |
| 723 | + raise ValueError( |
| 724 | + "The list of metrics (list1) contains nan's or infs. Check your input data" |
| 725 | + ) |
| 726 | + |
| 727 | + series1 = Polynomial.fit(np.arange(0, 2 * radi + 1), list1, deg=2) |
| 728 | + afact1 = series1.convert().coef[-1] |
| 729 | + |
722 | 730 | list2 = cp.asnumpy(list_metric[min_pos - 1 : min_pos + 2]) |
723 | | - (afact2, bfact2, _) = np.polyfit(np.arange(min_pos - 1, min_pos + 2), list2, 2) |
| 731 | + if not all(map(np.isfinite, list2)): |
| 732 | + raise ValueError( |
| 733 | + "The list of metrics (list2) contains nan's or infs. Check your input data" |
| 734 | + ) |
| 735 | + |
| 736 | + series2 = Polynomial.fit(np.arange(min_pos - 1, min_pos + 2), list2, deg=2) |
| 737 | + afact2 = series2.convert().coef[-1] |
| 738 | + bfact2 = series2.convert().coef[-1 - 1] |
724 | 739 |
|
725 | 740 | curvature = np.abs(afact1) |
726 | 741 | if afact2 != 0.0: |
|
0 commit comments