|
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 |
@@ -712,9 +713,23 @@ def _calculate_curvature(list_metric): |
712 | 713 |
|
713 | 714 | # work mostly on CPU here - we have very small arrays here |
714 | 715 | list1 = cp.asnumpy(list_metric[min_pos - radi : min_pos + radi + 1]) |
715 | | - afact1 = np.polyfit(np.arange(0, 2 * radi + 1), list1, 2)[0] |
| 716 | + if not all(map(np.isfinite, list1)): |
| 717 | + raise ValueError( |
| 718 | + "The list of metrics (list1) contains nan's or infs. Check your input data" |
| 719 | + ) |
| 720 | + |
| 721 | + series1 = Polynomial.fit(np.arange(0, 2 * radi + 1), list1, deg=2) |
| 722 | + afact1 = series1.convert().coef[-1] |
| 723 | + |
716 | 724 | list2 = cp.asnumpy(list_metric[min_pos - 1 : min_pos + 2]) |
717 | | - (afact2, bfact2, _) = np.polyfit(np.arange(min_pos - 1, min_pos + 2), list2, 2) |
| 725 | + if not all(map(np.isfinite, list2)): |
| 726 | + raise ValueError( |
| 727 | + "The list of metrics (list2) contains nan's or infs. Check your input data" |
| 728 | + ) |
| 729 | + |
| 730 | + series2 = Polynomial.fit(np.arange(min_pos - 1, min_pos + 2), list2, deg=2) |
| 731 | + afact2 = series2.convert().coef[-1] |
| 732 | + bfact2 = series2.convert().coef[-1 - 1] |
718 | 733 |
|
719 | 734 | curvature = np.abs(afact1) |
720 | 735 | if afact2 != 0.0: |
|
0 commit comments