Residual threshold annealing: To find the solution to (2), we proceed by rounds consisting of a fitting and a trimming phase as described above. We begin by letting Q (0) := Q, but this subset gets updated in each round. In the fitting phase of the k-th round, we minimize over M the loss in (2) by fixing Q ⋆ = Q (k) . Note that such minimization is an ordinary least-squares problem, which has a closed-form solution. Once its optima M (k) is computed, the trimming phase consists of looking at each residual, i.e., each M (k) qv q , and defining Q (k) as the set with all reciprocal spots with a residual smaller than the current residual threshold. This residual threshold starts with a large enough value and gets monotonically decreased at each iteration as in Algorithm 1, approaching the maximum allowed error that a valid solution can have as the iterations increase. In this way, we monotonically reduce the value of the loss in (2) in each iteration. We stop whenever we go below the maximum acceptable error value and output the remaining reciprocal spots as our solution for Q ⋆ along with the corresponding M * . However, since we have the constraint that any valid solution should have a minimum number of reciprocal spots k min , whenever we are left with fewer than k min reciprocal spots, we stop and output that there is no valid solution for this instance. A summary of the robust estimation procedure can be found in Algorithm 1.