Source code for nabu.pipeline.helical.helical_utils

from ...resources.logger import LoggerOrPrint
import numpy as np

logger = LoggerOrPrint(None)


[docs] def find_mirror_indexes(angles_deg, tolerance_factor=1.0): """return a list of indexes where the ith elememnt contains the index of the angles_deg array element which has the value the closest to angles_deg[i] + 180. It is used for padding in halftomo. Parameters: ----------- angles_deg: a nd.array of floats tolerance: float if the mirror positions are not within a distance less than tolerance fro; the ideal position a warning is raised """ av_step = abs(np.diff(angles_deg).mean()) tolerance = av_step * tolerance_factor tmp_mirror_angles_deg = angles_deg + 180 mirror_angle_relative_indexes = (abs(abs(np.mod(tmp_mirror_angles_deg[:, None] - angles_deg, 360) - 180))).argmax( axis=-1 ) mirror_values = angles_deg[mirror_angle_relative_indexes] differences = abs(np.mod(mirror_values - angles_deg, 360) - 180) if differences.max() > tolerance: logger.warning( f"""In function find_mirror_indexes the mirror position are far beyon tolerance from ideal position tolerance is {tolerance} given by average step {av_step} and tolerance_factor {tolerance_factor} and the maximum error is {differences.max()} """ ) return mirror_angle_relative_indexes