Note
Go to the end to download the full example code.
Ab-initio Pipeline Demonstration¶
This tutorial demonstrates some key components of an ab-initio
reconstruction pipeline using synthetic data generated with ASPIRE’s
Simulation
class of objects.
Download an Example Volume¶
We begin by downloading a high resolution volume map of the 80S Ribosome, sourced from EMDB: https://www.ebi.ac.uk/emdb/EMD-2660. This is one of several volume maps that can be downloaded with ASPIRE’s data downloading utility by using the following import.
from aspire.downloader import emdb_2660
# Load 80s Ribosome as a ``Volume`` object.
original_vol = emdb_2660()
# During the preprocessing stages of the pipeline we will downsample
# the images to an image size of 64 pixels. Here, we also downsample the
# volume so we can compare to our reconstruction later.
res = 64
vol_ds = original_vol.downsample(res)
Note
A Volume
can be saved using the Volume.save()
method as follows:
fn = f"downsampled_80s_ribosome_size{res}.mrc"
vol_ds.save(fn, overwrite=True)
Create a Simulation Source¶
ASPIRE’s Simulation
class can be used to generate a synthetic
dataset of projection images. A Simulation
object produces
random projections of a supplied Volume and applies noise and CTF
filters. The resulting stack of 2D images is stored in an Image
object.
CTF Filters¶
Let’s start by creating CTF filters. The operators
package
contains a collection of filter classes that can be supplied to a
Simulation
. We use RadialCTFFilter
to generate a set of CTF
filters with various defocus values.
# Create CTF filters
import numpy as np
from aspire.operators import RadialCTFFilter
# Radial CTF Filter
defocus_min = 15000 # unit is angstroms
defocus_max = 25000
defocus_ct = 7
ctf_filters = [
RadialCTFFilter(pixel_size=original_vol.pixel_size, defocus=d)
for d in np.linspace(defocus_min, defocus_max, defocus_ct)
]
Initialize Simulation Object¶
We feed our Volume
and filters into Simulation
to generate
the dataset of images. When controlled white Gaussian noise is
desired, WhiteNoiseAdder(var=VAR)
can be used to generate a
simulation data set around a specific noise variance.
Alternatively, users can bring their own images using an
ArrayImageSource
, or define their own custom noise functions via
Simulation(..., noise_adder=CustomNoiseAdder(...))
. Examples
can be found in tutorials/class_averaging.py
and
experiments/simulated_abinitio_pipeline.py
.
from aspire.noise import WhiteNoiseAdder
from aspire.source import Simulation
# For this ``Simulation`` we set all 2D offset vectors to zero,
# but by default offset vectors will be randomly distributed.
# We cache the Simulation to prevent regenerating the projections
# for each preprocessing stage.
src = Simulation(
n=2500, # number of projections
vols=original_vol, # volume source
offsets=0, # Default: images are randomly shifted
unique_filters=ctf_filters,
noise_adder=WhiteNoiseAdder(var=0.0002), # desired noise variance
).cache()
0%| | 0/5 [00:00<?, ?it/s]
20%|██ | 1/5 [00:33<02:12, 33.24s/it]
40%|████ | 2/5 [01:06<01:39, 33.17s/it]
60%|██████ | 3/5 [01:39<01:06, 33.19s/it]
80%|████████ | 4/5 [02:12<00:33, 33.15s/it]
100%|██████████| 5/5 [02:42<00:00, 32.02s/it]
100%|██████████| 5/5 [02:42<00:00, 32.53s/it]
Note
The noise variance value above was chosen based on other parameters for this quick tutorial, and can be changed to adjust the power of the additive noise. Alternatively, an SNR value can be prescribed as follows:
Simulation(..., noise_adder=WhiteNoiseAdder.from_snr(SNR))
Several Views of the Projection Images¶
We can access several views of the projection images.
# with no corruption applied
src.projections[0:10].show()

# with no noise corruption
src.clean_images[0:10].show()

# with noise and CTF corruption
src.images[0:10].show()

Image Preprocessing¶
We apply some image preprocessing techniques to prepare the the images for denoising via Class Averaging.
Downsampling¶
We downsample the images. Reducing the image size will improve the efficiency of subsequent pipeline stages. Metadata such as pixel size is scaled accordingly to correspond correctly with the image resolution.
src = src.downsample(res)
src.images[:10].show()

CTF Correction¶
We apply phase_flip()
to correct for CTF effects.
src = src.phase_flip()
src.images[:10].show()

Normalize Background¶
We apply normalize_background()
to prepare the image class averaging.
src = src.normalize_background()
src.images[:10].show()

Noise Whitening¶
We apply whiten()
to estimate and whiten the noise.
src = src.whiten()
src.images[:10].show()

0%| | 0/5 [00:00<?, ?it/s]
20%|██ | 1/5 [00:00<00:02, 1.78it/s]
40%|████ | 2/5 [00:01<00:01, 1.72it/s]
60%|██████ | 3/5 [00:01<00:01, 1.68it/s]
80%|████████ | 4/5 [00:02<00:00, 1.71it/s]
100%|██████████| 5/5 [00:02<00:00, 1.79it/s]
100%|██████████| 5/5 [00:02<00:00, 1.75it/s]
Contrast Inversion¶
We apply invert_contrast()
to ensure a positive valued signal.
src = src.invert_contrast()
0%| | 0/5 [00:00<?, ?it/s]
20%|██ | 1/5 [00:00<00:02, 1.51it/s]
40%|████ | 2/5 [00:01<00:01, 1.53it/s]
60%|██████ | 3/5 [00:01<00:01, 1.53it/s]
80%|████████ | 4/5 [00:02<00:00, 1.55it/s]
100%|██████████| 5/5 [00:03<00:00, 1.62it/s]
100%|██████████| 5/5 [00:03<00:00, 1.58it/s]
Caching¶
We apply cache
to store the results of the ImageSource
pipeline up to this point. This is optional, but can provide
benefit when used intently on machines with adequate memory.
src = src.cache()
0%| | 0/5 [00:00<?, ?it/s]
20%|██ | 1/5 [00:00<00:02, 1.59it/s]
40%|████ | 2/5 [00:01<00:01, 1.55it/s]
60%|██████ | 3/5 [00:01<00:01, 1.55it/s]
80%|████████ | 4/5 [00:02<00:00, 1.53it/s]
100%|██████████| 5/5 [00:03<00:00, 1.63it/s]
100%|██████████| 5/5 [00:03<00:00, 1.59it/s]
Class Averaging¶
For this tutorial we use the DebugClassAvgSource
to generate an ImageSource
of class averages. Internally, DebugClassAvgSource
uses the RIRClass2D
object to classify the source images via the rotationally invariant representation
(RIR) algorithm and the TopClassSelector
object to select the first n_classes
images in the original order from the source. In practice, class selection is commonly
done by sorting class averages based on some configurable notion of quality
(contrast, neighbor distance etc) which can be accomplished by providing a custom
class selector to ClassAverageSource
, which changes the ordering of the classes
returned by ClassAverageSource
.
from aspire.denoising import DebugClassAvgSource
avgs = DebugClassAvgSource(src=src)
# We'll continue our pipeline using only the first ``n_classes`` from
# ``avgs``. The ``cache()`` call is used here to precompute results
# for the ``:n_classes`` slice. This avoids recomputing the same
# images twice when peeking in the next cell then requesting them in
# the following ``CLSyncVoting`` algorithm. Outside of demonstration
# purposes, where we are repeatedly peeking at various stage results,
# such caching can be dropped allowing for more lazy evaluation.
n_classes = 250
avgs = avgs[:n_classes].cache()
0%| | 0/1 [00:00<?, ?it/s]
0%| | 0/5 [00:00<?, ?it/s]
100%|██████████| 5/5 [00:00<00:00, 228.34it/s]
0%| | 0/5 [00:00<?, ?it/s]
20%|██ | 1/5 [00:00<00:00, 6.17it/s]
40%|████ | 2/5 [00:00<00:00, 6.22it/s]
60%|██████ | 3/5 [00:00<00:00, 6.21it/s]
80%|████████ | 4/5 [00:00<00:00, 6.28it/s]
100%|██████████| 5/5 [00:00<00:00, 6.58it/s]
100%|██████████| 5/5 [00:00<00:00, 6.42it/s]
Rotationally aligning classes: 0%| | 0/250 [00:00<?, ?it/s]
Rotationally aligning classes: 1%| | 2/250 [00:00<00:14, 17.68it/s]
Rotationally aligning classes: 2%|▏ | 4/250 [00:00<00:17, 13.98it/s]
Rotationally aligning classes: 2%|▏ | 6/250 [00:00<00:19, 12.58it/s]
Rotationally aligning classes: 3%|▎ | 8/250 [00:00<00:21, 11.37it/s]
Rotationally aligning classes: 4%|▍ | 10/250 [00:00<00:20, 11.55it/s]
Rotationally aligning classes: 5%|▍ | 12/250 [00:00<00:20, 11.54it/s]
Rotationally aligning classes: 6%|▌ | 14/250 [00:01<00:21, 10.79it/s]
Rotationally aligning classes: 6%|▋ | 16/250 [00:01<00:22, 10.24it/s]
Rotationally aligning classes: 7%|▋ | 18/250 [00:01<00:21, 10.59it/s]
Rotationally aligning classes: 8%|▊ | 20/250 [00:01<00:21, 10.52it/s]
Rotationally aligning classes: 9%|▉ | 22/250 [00:01<00:20, 10.91it/s]
Rotationally aligning classes: 10%|▉ | 24/250 [00:02<00:20, 10.97it/s]
Rotationally aligning classes: 10%|█ | 26/250 [00:02<00:20, 10.83it/s]
Rotationally aligning classes: 11%|█ | 28/250 [00:02<00:20, 10.95it/s]
Rotationally aligning classes: 12%|█▏ | 30/250 [00:02<00:19, 11.13it/s]
Rotationally aligning classes: 13%|█▎ | 32/250 [00:02<00:19, 11.43it/s]
Rotationally aligning classes: 14%|█▎ | 34/250 [00:03<00:19, 10.95it/s]
Rotationally aligning classes: 14%|█▍ | 36/250 [00:03<00:20, 10.23it/s]
Rotationally aligning classes: 15%|█▌ | 38/250 [00:03<00:22, 9.58it/s]
Rotationally aligning classes: 16%|█▌ | 39/250 [00:03<00:22, 9.33it/s]
Rotationally aligning classes: 16%|█▌ | 40/250 [00:03<00:22, 9.13it/s]
Rotationally aligning classes: 17%|█▋ | 42/250 [00:03<00:21, 9.61it/s]
Rotationally aligning classes: 18%|█▊ | 44/250 [00:04<00:20, 10.25it/s]
Rotationally aligning classes: 18%|█▊ | 46/250 [00:04<00:19, 10.25it/s]
Rotationally aligning classes: 19%|█▉ | 48/250 [00:04<00:19, 10.58it/s]
Rotationally aligning classes: 20%|██ | 50/250 [00:04<00:18, 10.64it/s]
Rotationally aligning classes: 21%|██ | 52/250 [00:04<00:18, 10.73it/s]
Rotationally aligning classes: 22%|██▏ | 54/250 [00:05<00:18, 10.63it/s]
Rotationally aligning classes: 22%|██▏ | 56/250 [00:05<00:17, 10.80it/s]
Rotationally aligning classes: 23%|██▎ | 58/250 [00:05<00:17, 10.95it/s]
Rotationally aligning classes: 24%|██▍ | 60/250 [00:05<00:17, 10.98it/s]
Rotationally aligning classes: 25%|██▍ | 62/250 [00:05<00:18, 10.44it/s]
Rotationally aligning classes: 26%|██▌ | 64/250 [00:05<00:17, 10.61it/s]
Rotationally aligning classes: 26%|██▋ | 66/250 [00:06<00:16, 10.86it/s]
Rotationally aligning classes: 27%|██▋ | 68/250 [00:06<00:16, 10.90it/s]
Rotationally aligning classes: 28%|██▊ | 70/250 [00:06<00:16, 10.85it/s]
Rotationally aligning classes: 29%|██▉ | 72/250 [00:06<00:15, 11.18it/s]
Rotationally aligning classes: 30%|██▉ | 74/250 [00:06<00:17, 10.13it/s]
Rotationally aligning classes: 30%|███ | 76/250 [00:07<00:17, 9.76it/s]
Rotationally aligning classes: 31%|███ | 78/250 [00:07<00:17, 9.95it/s]
Rotationally aligning classes: 32%|███▏ | 80/250 [00:07<00:16, 10.20it/s]
Rotationally aligning classes: 33%|███▎ | 82/250 [00:07<00:15, 10.58it/s]
Rotationally aligning classes: 34%|███▎ | 84/250 [00:07<00:15, 10.53it/s]
Rotationally aligning classes: 34%|███▍ | 86/250 [00:08<00:15, 10.42it/s]
Rotationally aligning classes: 35%|███▌ | 88/250 [00:08<00:15, 10.58it/s]
Rotationally aligning classes: 36%|███▌ | 90/250 [00:08<00:15, 10.58it/s]
Rotationally aligning classes: 37%|███▋ | 92/250 [00:08<00:14, 10.70it/s]
Rotationally aligning classes: 38%|███▊ | 94/250 [00:08<00:14, 10.68it/s]
Rotationally aligning classes: 38%|███▊ | 96/250 [00:08<00:14, 10.91it/s]
Rotationally aligning classes: 39%|███▉ | 98/250 [00:09<00:13, 11.06it/s]
Rotationally aligning classes: 40%|████ | 100/250 [00:09<00:13, 11.15it/s]
Rotationally aligning classes: 41%|████ | 102/250 [00:09<00:13, 11.23it/s]
Rotationally aligning classes: 42%|████▏ | 104/250 [00:09<00:13, 11.21it/s]
Rotationally aligning classes: 42%|████▏ | 106/250 [00:09<00:13, 10.48it/s]
Rotationally aligning classes: 43%|████▎ | 108/250 [00:10<00:13, 10.74it/s]
Rotationally aligning classes: 44%|████▍ | 110/250 [00:10<00:13, 10.48it/s]
Rotationally aligning classes: 45%|████▍ | 112/250 [00:10<00:13, 10.44it/s]
Rotationally aligning classes: 46%|████▌ | 114/250 [00:10<00:13, 10.38it/s]
Rotationally aligning classes: 46%|████▋ | 116/250 [00:10<00:12, 10.32it/s]
Rotationally aligning classes: 47%|████▋ | 118/250 [00:11<00:12, 10.60it/s]
Rotationally aligning classes: 48%|████▊ | 120/250 [00:11<00:12, 10.73it/s]
Rotationally aligning classes: 49%|████▉ | 122/250 [00:11<00:12, 10.01it/s]
Rotationally aligning classes: 50%|████▉ | 124/250 [00:11<00:11, 10.64it/s]
Rotationally aligning classes: 50%|█████ | 126/250 [00:11<00:12, 9.77it/s]
Rotationally aligning classes: 51%|█████ | 128/250 [00:12<00:12, 9.51it/s]
Rotationally aligning classes: 52%|█████▏ | 129/250 [00:12<00:13, 9.26it/s]
Rotationally aligning classes: 52%|█████▏ | 131/250 [00:12<00:11, 10.05it/s]
Rotationally aligning classes: 53%|█████▎ | 133/250 [00:12<00:10, 11.14it/s]
Rotationally aligning classes: 54%|█████▍ | 135/250 [00:12<00:10, 11.07it/s]
Rotationally aligning classes: 55%|█████▍ | 137/250 [00:12<00:10, 11.10it/s]
Rotationally aligning classes: 56%|█████▌ | 139/250 [00:13<00:10, 10.92it/s]
Rotationally aligning classes: 56%|█████▋ | 141/250 [00:13<00:10, 10.78it/s]
Rotationally aligning classes: 57%|█████▋ | 143/250 [00:13<00:09, 10.90it/s]
Rotationally aligning classes: 58%|█████▊ | 145/250 [00:13<00:09, 10.96it/s]
Rotationally aligning classes: 59%|█████▉ | 147/250 [00:13<00:09, 10.69it/s]
Rotationally aligning classes: 60%|█████▉ | 149/250 [00:13<00:09, 11.06it/s]
Rotationally aligning classes: 60%|██████ | 151/250 [00:14<00:08, 11.24it/s]
Rotationally aligning classes: 61%|██████ | 153/250 [00:14<00:08, 10.88it/s]
Rotationally aligning classes: 62%|██████▏ | 155/250 [00:14<00:08, 11.05it/s]
Rotationally aligning classes: 63%|██████▎ | 157/250 [00:14<00:08, 10.58it/s]
Rotationally aligning classes: 64%|██████▎ | 159/250 [00:14<00:08, 10.24it/s]
Rotationally aligning classes: 64%|██████▍ | 161/250 [00:15<00:09, 9.83it/s]
Rotationally aligning classes: 65%|██████▌ | 163/250 [00:15<00:08, 10.25it/s]
Rotationally aligning classes: 66%|██████▌ | 165/250 [00:15<00:08, 10.19it/s]
Rotationally aligning classes: 67%|██████▋ | 167/250 [00:15<00:08, 9.94it/s]
Rotationally aligning classes: 68%|██████▊ | 169/250 [00:15<00:08, 9.96it/s]
Rotationally aligning classes: 68%|██████▊ | 171/250 [00:16<00:08, 9.68it/s]
Rotationally aligning classes: 69%|██████▉ | 172/250 [00:16<00:08, 9.41it/s]
Rotationally aligning classes: 70%|██████▉ | 174/250 [00:16<00:08, 9.37it/s]
Rotationally aligning classes: 70%|███████ | 176/250 [00:16<00:07, 9.34it/s]
Rotationally aligning classes: 71%|███████ | 178/250 [00:16<00:07, 9.83it/s]
Rotationally aligning classes: 72%|███████▏ | 180/250 [00:17<00:06, 10.03it/s]
Rotationally aligning classes: 73%|███████▎ | 182/250 [00:17<00:06, 10.19it/s]
Rotationally aligning classes: 74%|███████▎ | 184/250 [00:17<00:06, 10.50it/s]
Rotationally aligning classes: 74%|███████▍ | 186/250 [00:17<00:06, 10.63it/s]
Rotationally aligning classes: 75%|███████▌ | 188/250 [00:17<00:05, 11.02it/s]
Rotationally aligning classes: 76%|███████▌ | 190/250 [00:18<00:05, 10.84it/s]
Rotationally aligning classes: 77%|███████▋ | 192/250 [00:18<00:05, 10.67it/s]
Rotationally aligning classes: 78%|███████▊ | 194/250 [00:18<00:05, 10.81it/s]
Rotationally aligning classes: 78%|███████▊ | 196/250 [00:18<00:04, 11.06it/s]
Rotationally aligning classes: 79%|███████▉ | 198/250 [00:18<00:04, 10.88it/s]
Rotationally aligning classes: 80%|████████ | 200/250 [00:18<00:04, 10.99it/s]
Rotationally aligning classes: 81%|████████ | 202/250 [00:19<00:04, 10.65it/s]
Rotationally aligning classes: 82%|████████▏ | 204/250 [00:19<00:04, 9.95it/s]
Rotationally aligning classes: 82%|████████▏ | 206/250 [00:19<00:04, 10.27it/s]
Rotationally aligning classes: 83%|████████▎ | 208/250 [00:19<00:03, 10.56it/s]
Rotationally aligning classes: 84%|████████▍ | 210/250 [00:19<00:03, 10.66it/s]
Rotationally aligning classes: 85%|████████▍ | 212/250 [00:20<00:03, 10.59it/s]
Rotationally aligning classes: 86%|████████▌ | 214/250 [00:20<00:03, 10.38it/s]
Rotationally aligning classes: 86%|████████▋ | 216/250 [00:20<00:03, 10.39it/s]
Rotationally aligning classes: 87%|████████▋ | 218/250 [00:20<00:03, 10.22it/s]
Rotationally aligning classes: 88%|████████▊ | 220/250 [00:20<00:02, 10.46it/s]
Rotationally aligning classes: 89%|████████▉ | 222/250 [00:21<00:02, 10.64it/s]
Rotationally aligning classes: 90%|████████▉ | 224/250 [00:21<00:02, 10.97it/s]
Rotationally aligning classes: 90%|█████████ | 226/250 [00:21<00:02, 10.82it/s]
Rotationally aligning classes: 91%|█████████ | 228/250 [00:21<00:02, 10.54it/s]
Rotationally aligning classes: 92%|█████████▏| 230/250 [00:21<00:01, 10.67it/s]
Rotationally aligning classes: 93%|█████████▎| 232/250 [00:21<00:01, 10.96it/s]
Rotationally aligning classes: 94%|█████████▎| 234/250 [00:22<00:01, 10.86it/s]
Rotationally aligning classes: 94%|█████████▍| 236/250 [00:22<00:01, 10.81it/s]
Rotationally aligning classes: 95%|█████████▌| 238/250 [00:22<00:01, 10.17it/s]
Rotationally aligning classes: 96%|█████████▌| 240/250 [00:22<00:00, 10.97it/s]
Rotationally aligning classes: 97%|█████████▋| 242/250 [00:22<00:00, 10.13it/s]
Rotationally aligning classes: 98%|█████████▊| 244/250 [00:23<00:00, 10.65it/s]
Rotationally aligning classes: 98%|█████████▊| 246/250 [00:23<00:00, 10.96it/s]
Rotationally aligning classes: 99%|█████████▉| 248/250 [00:23<00:00, 10.94it/s]
Rotationally aligning classes: 100%|██████████| 250/250 [00:23<00:00, 10.81it/s]
Rotationally aligning classes: 100%|██████████| 250/250 [00:23<00:00, 10.57it/s]
Stacking and evaluating class averages from FFBBasis2D to Cartesian: 0%| | 0/1 [00:00<?, ?it/s]
Stacking batch: 0%| | 0/250 [00:00<?, ?it/s]
Stacking batch: 1%| | 2/250 [00:00<00:14, 16.89it/s]
Stacking batch: 5%|▌ | 13/250 [00:00<00:03, 67.62it/s]
Stacking batch: 10%|█ | 26/250 [00:00<00:02, 91.90it/s]
Stacking batch: 16%|█▌ | 39/250 [00:00<00:02, 103.30it/s]
Stacking batch: 21%|██ | 52/250 [00:00<00:01, 109.65it/s]
Stacking batch: 26%|██▌ | 65/250 [00:00<00:01, 113.41it/s]
Stacking batch: 31%|███ | 78/250 [00:00<00:01, 115.95it/s]
Stacking batch: 36%|███▋ | 91/250 [00:00<00:01, 117.60it/s]
Stacking batch: 42%|████▏ | 104/250 [00:00<00:01, 118.65it/s]
Stacking batch: 47%|████▋ | 117/250 [00:01<00:01, 119.12it/s]
Stacking batch: 52%|█████▏ | 130/250 [00:01<00:01, 119.62it/s]
Stacking batch: 57%|█████▋ | 143/250 [00:01<00:00, 120.05it/s]
Stacking batch: 62%|██████▏ | 156/250 [00:01<00:00, 118.21it/s]
Stacking batch: 68%|██████▊ | 169/250 [00:01<00:00, 119.01it/s]
Stacking batch: 73%|███████▎ | 182/250 [00:01<00:00, 119.52it/s]
Stacking batch: 78%|███████▊ | 195/250 [00:01<00:00, 119.96it/s]
Stacking batch: 83%|████████▎ | 208/250 [00:01<00:00, 120.31it/s]
Stacking batch: 88%|████████▊ | 221/250 [00:01<00:00, 120.40it/s]
Stacking batch: 94%|█████████▎| 234/250 [00:02<00:00, 120.51it/s]
Stacking batch: 99%|█████████▉| 247/250 [00:02<00:00, 119.56it/s]
Stacking and evaluating class averages from FFBBasis2D to Cartesian: 100%|██████████| 1/1 [00:02<00:00, 2.40s/it]
Stacking and evaluating class averages from FFBBasis2D to Cartesian: 100%|██████████| 1/1 [00:02<00:00, 2.40s/it]
100%|██████████| 1/1 [00:36<00:00, 36.96s/it]
100%|██████████| 1/1 [00:36<00:00, 36.96s/it]
View the Class Averages¶
# Show class averages
avgs.images[0:10].show()

# Show original images corresponding to those classes. This 1:1
# comparison is only expected to work because we used
# ``TopClassSelector`` to classify our images.
src.images[0:10].show()

Orientation Estimation¶
We create an OrientedSource
, which consumes an ImageSource
object, an
orientation estimator, and returns a new source which lazily estimates orientations.
In this case we supply avgs
for our source and a CLSyncVoting
class instance for our orientation estimator. The CLSyncVoting
algorithm employs
a common-lines method with synchronization and voting.
from aspire.abinitio import CLSyncVoting
from aspire.source import OrientedSource
from aspire.utils import Rotation
# Stash true rotations for later comparison
true_rotations = Rotation(src.rotations[:n_classes])
# Instantiate a ``CLSyncVoting`` object for estimating orientations.
orient_est = CLSyncVoting(avgs)
# Instantiate an ``OrientedSource``.
oriented_src = OrientedSource(avgs, orient_est)
# Estimate Rotations.
est_rotations = oriented_src.rotations
Searching over common line pairs: 0%| | 0/31125 [00:00<?, ?it/s]
Searching over common line pairs: 0%| | 31/31125 [00:00<01:41, 306.19it/s]
Searching over common line pairs: 0%| | 62/31125 [00:00<01:41, 306.12it/s]
Searching over common line pairs: 0%| | 93/31125 [00:00<01:41, 306.86it/s]
Searching over common line pairs: 0%| | 124/31125 [00:00<01:40, 307.15it/s]
Searching over common line pairs: 0%| | 155/31125 [00:00<01:40, 307.58it/s]
Searching over common line pairs: 1%| | 186/31125 [00:00<01:40, 307.78it/s]
Searching over common line pairs: 1%| | 217/31125 [00:00<01:40, 307.58it/s]
Searching over common line pairs: 1%| | 248/31125 [00:00<01:40, 307.79it/s]
Searching over common line pairs: 1%| | 279/31125 [00:00<01:40, 307.78it/s]
Searching over common line pairs: 1%| | 310/31125 [00:01<01:40, 307.76it/s]
Searching over common line pairs: 1%| | 341/31125 [00:01<01:39, 308.00it/s]
Searching over common line pairs: 1%| | 372/31125 [00:01<01:39, 308.04it/s]
Searching over common line pairs: 1%|▏ | 403/31125 [00:01<01:39, 307.94it/s]
Searching over common line pairs: 1%|▏ | 434/31125 [00:01<01:39, 307.82it/s]
Searching over common line pairs: 1%|▏ | 465/31125 [00:01<01:39, 307.41it/s]
Searching over common line pairs: 2%|▏ | 497/31125 [00:01<01:38, 310.02it/s]
Searching over common line pairs: 2%|▏ | 529/31125 [00:01<01:38, 309.82it/s]
Searching over common line pairs: 2%|▏ | 560/31125 [00:01<01:38, 309.42it/s]
Searching over common line pairs: 2%|▏ | 591/31125 [00:01<01:38, 309.13it/s]
Searching over common line pairs: 2%|▏ | 622/31125 [00:02<01:38, 308.99it/s]
Searching over common line pairs: 2%|▏ | 655/31125 [00:02<01:36, 314.98it/s]
Searching over common line pairs: 2%|▏ | 695/31125 [00:02<01:29, 338.76it/s]
Searching over common line pairs: 2%|▏ | 735/31125 [00:02<01:25, 355.27it/s]
Searching over common line pairs: 2%|▏ | 775/31125 [00:02<01:22, 366.19it/s]
Searching over common line pairs: 3%|▎ | 815/31125 [00:02<01:20, 374.65it/s]
Searching over common line pairs: 3%|▎ | 854/31125 [00:02<01:19, 378.95it/s]
Searching over common line pairs: 3%|▎ | 894/31125 [00:02<01:18, 383.32it/s]
Searching over common line pairs: 3%|▎ | 934/31125 [00:02<01:18, 386.46it/s]
Searching over common line pairs: 3%|▎ | 974/31125 [00:02<01:17, 387.88it/s]
Searching over common line pairs: 3%|▎ | 1014/31125 [00:03<01:17, 389.47it/s]
Searching over common line pairs: 3%|▎ | 1054/31125 [00:03<01:17, 389.75it/s]
Searching over common line pairs: 4%|▎ | 1094/31125 [00:03<01:16, 390.55it/s]
Searching over common line pairs: 4%|▎ | 1134/31125 [00:03<01:16, 391.78it/s]
Searching over common line pairs: 4%|▍ | 1174/31125 [00:03<01:16, 392.29it/s]
Searching over common line pairs: 4%|▍ | 1214/31125 [00:03<01:16, 392.92it/s]
Searching over common line pairs: 4%|▍ | 1254/31125 [00:03<01:16, 392.12it/s]
Searching over common line pairs: 4%|▍ | 1294/31125 [00:03<01:15, 392.75it/s]
Searching over common line pairs: 4%|▍ | 1334/31125 [00:03<01:15, 392.54it/s]
Searching over common line pairs: 4%|▍ | 1374/31125 [00:03<01:15, 392.45it/s]
Searching over common line pairs: 5%|▍ | 1414/31125 [00:04<01:15, 392.65it/s]
Searching over common line pairs: 5%|▍ | 1454/31125 [00:04<01:15, 392.85it/s]
Searching over common line pairs: 5%|▍ | 1494/31125 [00:04<01:15, 392.66it/s]
Searching over common line pairs: 5%|▍ | 1534/31125 [00:04<01:15, 393.43it/s]
Searching over common line pairs: 5%|▌ | 1574/31125 [00:04<01:15, 392.97it/s]
Searching over common line pairs: 5%|▌ | 1614/31125 [00:04<01:15, 392.88it/s]
Searching over common line pairs: 5%|▌ | 1654/31125 [00:04<01:14, 393.12it/s]
Searching over common line pairs: 5%|▌ | 1694/31125 [00:04<01:14, 393.34it/s]
Searching over common line pairs: 6%|▌ | 1734/31125 [00:04<01:14, 394.07it/s]
Searching over common line pairs: 6%|▌ | 1774/31125 [00:04<01:14, 393.67it/s]
Searching over common line pairs: 6%|▌ | 1814/31125 [00:05<01:14, 393.74it/s]
Searching over common line pairs: 6%|▌ | 1854/31125 [00:05<01:14, 393.30it/s]
Searching over common line pairs: 6%|▌ | 1894/31125 [00:05<01:14, 393.48it/s]
Searching over common line pairs: 6%|▌ | 1934/31125 [00:05<01:14, 393.79it/s]
Searching over common line pairs: 6%|▋ | 1974/31125 [00:05<01:14, 393.75it/s]
Searching over common line pairs: 6%|▋ | 2014/31125 [00:05<01:13, 393.79it/s]
Searching over common line pairs: 7%|▋ | 2054/31125 [00:05<01:13, 393.87it/s]
Searching over common line pairs: 7%|▋ | 2094/31125 [00:05<01:13, 394.05it/s]
Searching over common line pairs: 7%|▋ | 2134/31125 [00:05<01:13, 394.02it/s]
Searching over common line pairs: 7%|▋ | 2174/31125 [00:05<01:13, 394.16it/s]
Searching over common line pairs: 7%|▋ | 2214/31125 [00:06<01:13, 393.83it/s]
Searching over common line pairs: 7%|▋ | 2254/31125 [00:06<01:13, 393.55it/s]
Searching over common line pairs: 7%|▋ | 2294/31125 [00:06<01:13, 393.84it/s]
Searching over common line pairs: 7%|▋ | 2334/31125 [00:06<01:13, 394.22it/s]
Searching over common line pairs: 8%|▊ | 2374/31125 [00:06<01:12, 394.07it/s]
Searching over common line pairs: 8%|▊ | 2414/31125 [00:06<01:12, 394.01it/s]
Searching over common line pairs: 8%|▊ | 2454/31125 [00:06<01:12, 393.60it/s]
Searching over common line pairs: 8%|▊ | 2494/31125 [00:06<01:12, 393.70it/s]
Searching over common line pairs: 8%|▊ | 2534/31125 [00:06<01:12, 393.72it/s]
Searching over common line pairs: 8%|▊ | 2574/31125 [00:06<01:12, 393.75it/s]
Searching over common line pairs: 8%|▊ | 2614/31125 [00:07<01:12, 393.36it/s]
Searching over common line pairs: 9%|▊ | 2654/31125 [00:07<01:12, 393.28it/s]
Searching over common line pairs: 9%|▊ | 2694/31125 [00:07<01:12, 393.50it/s]
Searching over common line pairs: 9%|▉ | 2734/31125 [00:07<01:12, 393.55it/s]
Searching over common line pairs: 9%|▉ | 2774/31125 [00:07<01:12, 393.22it/s]
Searching over common line pairs: 9%|▉ | 2814/31125 [00:07<01:11, 393.47it/s]
Searching over common line pairs: 9%|▉ | 2854/31125 [00:07<01:11, 393.64it/s]
Searching over common line pairs: 9%|▉ | 2894/31125 [00:07<01:11, 393.67it/s]
Searching over common line pairs: 9%|▉ | 2934/31125 [00:07<01:11, 393.67it/s]
Searching over common line pairs: 10%|▉ | 2974/31125 [00:08<01:11, 393.88it/s]
Searching over common line pairs: 10%|▉ | 3014/31125 [00:08<01:11, 391.29it/s]
Searching over common line pairs: 10%|▉ | 3054/31125 [00:08<01:11, 392.26it/s]
Searching over common line pairs: 10%|▉ | 3094/31125 [00:08<01:11, 391.40it/s]
Searching over common line pairs: 10%|█ | 3134/31125 [00:08<01:11, 391.66it/s]
Searching over common line pairs: 10%|█ | 3174/31125 [00:08<01:11, 392.63it/s]
Searching over common line pairs: 10%|█ | 3214/31125 [00:08<01:11, 392.90it/s]
Searching over common line pairs: 10%|█ | 3254/31125 [00:08<01:10, 393.19it/s]
Searching over common line pairs: 11%|█ | 3294/31125 [00:08<01:10, 393.70it/s]
Searching over common line pairs: 11%|█ | 3334/31125 [00:08<01:10, 394.14it/s]
Searching over common line pairs: 11%|█ | 3374/31125 [00:09<01:10, 393.81it/s]
Searching over common line pairs: 11%|█ | 3414/31125 [00:09<01:10, 393.20it/s]
Searching over common line pairs: 11%|█ | 3454/31125 [00:09<01:10, 393.18it/s]
Searching over common line pairs: 11%|█ | 3494/31125 [00:09<01:10, 393.82it/s]
Searching over common line pairs: 11%|█▏ | 3534/31125 [00:09<01:10, 393.71it/s]
Searching over common line pairs: 11%|█▏ | 3574/31125 [00:09<01:09, 394.17it/s]
Searching over common line pairs: 12%|█▏ | 3614/31125 [00:09<01:09, 394.23it/s]
Searching over common line pairs: 12%|█▏ | 3654/31125 [00:09<01:09, 394.22it/s]
Searching over common line pairs: 12%|█▏ | 3694/31125 [00:09<01:09, 394.19it/s]
Searching over common line pairs: 12%|█▏ | 3734/31125 [00:09<01:09, 394.27it/s]
Searching over common line pairs: 12%|█▏ | 3774/31125 [00:10<01:09, 394.55it/s]
Searching over common line pairs: 12%|█▏ | 3814/31125 [00:10<01:09, 393.56it/s]
Searching over common line pairs: 12%|█▏ | 3854/31125 [00:10<01:09, 393.92it/s]
Searching over common line pairs: 13%|█▎ | 3894/31125 [00:10<01:09, 393.94it/s]
Searching over common line pairs: 13%|█▎ | 3934/31125 [00:10<01:09, 393.34it/s]
Searching over common line pairs: 13%|█▎ | 3974/31125 [00:10<01:09, 393.44it/s]
Searching over common line pairs: 13%|█▎ | 4014/31125 [00:10<01:08, 393.83it/s]
Searching over common line pairs: 13%|█▎ | 4054/31125 [00:10<01:08, 393.54it/s]
Searching over common line pairs: 13%|█▎ | 4094/31125 [00:10<01:08, 393.84it/s]
Searching over common line pairs: 13%|█▎ | 4134/31125 [00:10<01:08, 393.72it/s]
Searching over common line pairs: 13%|█▎ | 4174/31125 [00:11<01:08, 393.28it/s]
Searching over common line pairs: 14%|█▎ | 4214/31125 [00:11<01:08, 393.07it/s]
Searching over common line pairs: 14%|█▎ | 4254/31125 [00:11<01:08, 393.70it/s]
Searching over common line pairs: 14%|█▍ | 4294/31125 [00:11<01:08, 393.94it/s]
Searching over common line pairs: 14%|█▍ | 4334/31125 [00:11<01:08, 393.80it/s]
Searching over common line pairs: 14%|█▍ | 4374/31125 [00:11<01:07, 393.84it/s]
Searching over common line pairs: 14%|█▍ | 4414/31125 [00:11<01:07, 393.89it/s]
Searching over common line pairs: 14%|█▍ | 4454/31125 [00:11<01:07, 394.02it/s]
Searching over common line pairs: 14%|█▍ | 4494/31125 [00:11<01:07, 394.24it/s]
Searching over common line pairs: 15%|█▍ | 4534/31125 [00:11<01:07, 394.38it/s]
Searching over common line pairs: 15%|█▍ | 4574/31125 [00:12<01:07, 394.23it/s]
Searching over common line pairs: 15%|█▍ | 4614/31125 [00:12<01:07, 393.45it/s]
Searching over common line pairs: 15%|█▍ | 4654/31125 [00:12<01:07, 393.65it/s]
Searching over common line pairs: 15%|█▌ | 4694/31125 [00:12<01:07, 393.06it/s]
Searching over common line pairs: 15%|█▌ | 4734/31125 [00:12<01:07, 393.31it/s]
Searching over common line pairs: 15%|█▌ | 4774/31125 [00:12<01:06, 393.42it/s]
Searching over common line pairs: 15%|█▌ | 4814/31125 [00:12<01:06, 393.24it/s]
Searching over common line pairs: 16%|█▌ | 4854/31125 [00:12<01:06, 393.68it/s]
Searching over common line pairs: 16%|█▌ | 4894/31125 [00:12<01:06, 393.58it/s]
Searching over common line pairs: 16%|█▌ | 4934/31125 [00:12<01:06, 393.79it/s]
Searching over common line pairs: 16%|█▌ | 4974/31125 [00:13<01:06, 391.84it/s]
Searching over common line pairs: 16%|█▌ | 5014/31125 [00:13<01:06, 392.60it/s]
Searching over common line pairs: 16%|█▌ | 5054/31125 [00:13<01:06, 393.09it/s]
Searching over common line pairs: 16%|█▋ | 5094/31125 [00:13<01:06, 393.29it/s]
Searching over common line pairs: 16%|█▋ | 5134/31125 [00:13<01:06, 393.69it/s]
Searching over common line pairs: 17%|█▋ | 5174/31125 [00:13<01:05, 393.44it/s]
Searching over common line pairs: 17%|█▋ | 5214/31125 [00:13<01:05, 393.84it/s]
Searching over common line pairs: 17%|█▋ | 5254/31125 [00:13<01:05, 393.49it/s]
Searching over common line pairs: 17%|█▋ | 5294/31125 [00:13<01:05, 393.73it/s]
Searching over common line pairs: 17%|█▋ | 5334/31125 [00:14<01:05, 393.80it/s]
Searching over common line pairs: 17%|█▋ | 5374/31125 [00:14<01:05, 391.46it/s]
Searching over common line pairs: 17%|█▋ | 5414/31125 [00:14<01:05, 392.19it/s]
Searching over common line pairs: 18%|█▊ | 5454/31125 [00:14<01:05, 392.94it/s]
Searching over common line pairs: 18%|█▊ | 5494/31125 [00:14<01:05, 392.88it/s]
Searching over common line pairs: 18%|█▊ | 5534/31125 [00:14<01:05, 393.57it/s]
Searching over common line pairs: 18%|█▊ | 5574/31125 [00:14<01:04, 393.45it/s]
Searching over common line pairs: 18%|█▊ | 5614/31125 [00:14<01:04, 393.71it/s]
Searching over common line pairs: 18%|█▊ | 5654/31125 [00:14<01:04, 393.85it/s]
Searching over common line pairs: 18%|█▊ | 5694/31125 [00:14<01:04, 393.84it/s]
Searching over common line pairs: 18%|█▊ | 5734/31125 [00:15<01:04, 394.05it/s]
Searching over common line pairs: 19%|█▊ | 5774/31125 [00:15<01:04, 392.92it/s]
Searching over common line pairs: 19%|█▊ | 5814/31125 [00:15<01:04, 393.18it/s]
Searching over common line pairs: 19%|█▉ | 5854/31125 [00:15<01:04, 393.43it/s]
Searching over common line pairs: 19%|█▉ | 5894/31125 [00:15<01:04, 393.60it/s]
Searching over common line pairs: 19%|█▉ | 5934/31125 [00:15<01:04, 393.31it/s]
Searching over common line pairs: 19%|█▉ | 5974/31125 [00:15<01:03, 393.18it/s]
Searching over common line pairs: 19%|█▉ | 6014/31125 [00:15<01:03, 393.43it/s]
Searching over common line pairs: 19%|█▉ | 6054/31125 [00:15<01:03, 393.56it/s]
Searching over common line pairs: 20%|█▉ | 6094/31125 [00:15<01:03, 393.34it/s]
Searching over common line pairs: 20%|█▉ | 6134/31125 [00:16<01:03, 393.64it/s]
Searching over common line pairs: 20%|█▉ | 6174/31125 [00:16<01:03, 392.24it/s]
Searching over common line pairs: 20%|█▉ | 6214/31125 [00:16<01:03, 392.90it/s]
Searching over common line pairs: 20%|██ | 6254/31125 [00:16<01:03, 393.36it/s]
Searching over common line pairs: 20%|██ | 6294/31125 [00:16<01:03, 393.51it/s]
Searching over common line pairs: 20%|██ | 6334/31125 [00:16<01:02, 394.04it/s]
Searching over common line pairs: 20%|██ | 6374/31125 [00:16<01:02, 394.01it/s]
Searching over common line pairs: 21%|██ | 6414/31125 [00:16<01:02, 393.47it/s]
Searching over common line pairs: 21%|██ | 6454/31125 [00:16<01:02, 393.75it/s]
Searching over common line pairs: 21%|██ | 6494/31125 [00:16<01:02, 393.90it/s]
Searching over common line pairs: 21%|██ | 6534/31125 [00:17<01:02, 393.70it/s]
Searching over common line pairs: 21%|██ | 6574/31125 [00:17<01:02, 393.26it/s]
Searching over common line pairs: 21%|██ | 6614/31125 [00:17<01:02, 393.28it/s]
Searching over common line pairs: 21%|██▏ | 6654/31125 [00:17<01:02, 393.49it/s]
Searching over common line pairs: 22%|██▏ | 6694/31125 [00:17<01:02, 392.98it/s]
Searching over common line pairs: 22%|██▏ | 6734/31125 [00:17<01:02, 393.02it/s]
Searching over common line pairs: 22%|██▏ | 6774/31125 [00:17<01:01, 393.20it/s]
Searching over common line pairs: 22%|██▏ | 6814/31125 [00:17<01:01, 393.39it/s]
Searching over common line pairs: 22%|██▏ | 6854/31125 [00:17<01:01, 393.65it/s]
Searching over common line pairs: 22%|██▏ | 6894/31125 [00:17<01:01, 393.52it/s]
Searching over common line pairs: 22%|██▏ | 6934/31125 [00:18<01:01, 393.43it/s]
Searching over common line pairs: 22%|██▏ | 6974/31125 [00:18<01:01, 393.09it/s]
Searching over common line pairs: 23%|██▎ | 7014/31125 [00:18<01:01, 393.57it/s]
Searching over common line pairs: 23%|██▎ | 7054/31125 [00:18<01:01, 392.38it/s]
Searching over common line pairs: 23%|██▎ | 7094/31125 [00:18<01:01, 392.30it/s]
Searching over common line pairs: 23%|██▎ | 7134/31125 [00:18<01:01, 392.51it/s]
Searching over common line pairs: 23%|██▎ | 7174/31125 [00:18<01:00, 393.31it/s]
Searching over common line pairs: 23%|██▎ | 7214/31125 [00:18<01:00, 393.67it/s]
Searching over common line pairs: 23%|██▎ | 7254/31125 [00:18<01:00, 393.90it/s]
Searching over common line pairs: 23%|██▎ | 7294/31125 [00:18<01:00, 393.96it/s]
Searching over common line pairs: 24%|██▎ | 7334/31125 [00:19<01:00, 393.51it/s]
Searching over common line pairs: 24%|██▎ | 7374/31125 [00:19<01:00, 392.88it/s]
Searching over common line pairs: 24%|██▍ | 7414/31125 [00:19<01:00, 392.79it/s]
Searching over common line pairs: 24%|██▍ | 7454/31125 [00:19<01:00, 393.08it/s]
Searching over common line pairs: 24%|██▍ | 7494/31125 [00:19<01:00, 392.98it/s]
Searching over common line pairs: 24%|██▍ | 7534/31125 [00:19<00:59, 393.21it/s]
Searching over common line pairs: 24%|██▍ | 7574/31125 [00:19<00:59, 393.42it/s]
Searching over common line pairs: 24%|██▍ | 7614/31125 [00:19<00:59, 394.00it/s]
Searching over common line pairs: 25%|██▍ | 7654/31125 [00:19<00:59, 393.96it/s]
Searching over common line pairs: 25%|██▍ | 7694/31125 [00:20<00:59, 393.97it/s]
Searching over common line pairs: 25%|██▍ | 7734/31125 [00:20<00:59, 392.93it/s]
Searching over common line pairs: 25%|██▍ | 7774/31125 [00:20<00:59, 391.93it/s]
Searching over common line pairs: 25%|██▌ | 7814/31125 [00:20<00:59, 392.29it/s]
Searching over common line pairs: 25%|██▌ | 7854/31125 [00:20<00:59, 392.62it/s]
Searching over common line pairs: 25%|██▌ | 7894/31125 [00:20<00:59, 393.11it/s]
Searching over common line pairs: 25%|██▌ | 7934/31125 [00:20<00:58, 393.07it/s]
Searching over common line pairs: 26%|██▌ | 7974/31125 [00:20<00:58, 393.13it/s]
Searching over common line pairs: 26%|██▌ | 8014/31125 [00:20<00:58, 393.68it/s]
Searching over common line pairs: 26%|██▌ | 8054/31125 [00:20<00:58, 393.40it/s]
Searching over common line pairs: 26%|██▌ | 8094/31125 [00:21<00:58, 393.51it/s]
Searching over common line pairs: 26%|██▌ | 8134/31125 [00:21<00:58, 393.15it/s]
Searching over common line pairs: 26%|██▋ | 8174/31125 [00:21<00:58, 393.15it/s]
Searching over common line pairs: 26%|██▋ | 8214/31125 [00:21<00:58, 393.48it/s]
Searching over common line pairs: 27%|██▋ | 8254/31125 [00:21<00:58, 393.65it/s]
Searching over common line pairs: 27%|██▋ | 8294/31125 [00:21<00:57, 393.85it/s]
Searching over common line pairs: 27%|██▋ | 8334/31125 [00:21<00:57, 393.51it/s]
Searching over common line pairs: 27%|██▋ | 8374/31125 [00:21<00:57, 393.61it/s]
Searching over common line pairs: 27%|██▋ | 8414/31125 [00:21<00:57, 393.85it/s]
Searching over common line pairs: 27%|██▋ | 8454/31125 [00:21<00:57, 394.08it/s]
Searching over common line pairs: 27%|██▋ | 8494/31125 [00:22<00:57, 393.98it/s]
Searching over common line pairs: 27%|██▋ | 8534/31125 [00:22<00:57, 393.80it/s]
Searching over common line pairs: 28%|██▊ | 8574/31125 [00:22<00:57, 393.78it/s]
Searching over common line pairs: 28%|██▊ | 8614/31125 [00:22<00:57, 394.17it/s]
Searching over common line pairs: 28%|██▊ | 8654/31125 [00:22<00:57, 393.87it/s]
Searching over common line pairs: 28%|██▊ | 8694/31125 [00:22<00:56, 393.86it/s]
Searching over common line pairs: 28%|██▊ | 8734/31125 [00:22<00:56, 393.83it/s]
Searching over common line pairs: 28%|██▊ | 8774/31125 [00:22<00:56, 393.76it/s]
Searching over common line pairs: 28%|██▊ | 8814/31125 [00:22<00:56, 393.85it/s]
Searching over common line pairs: 28%|██▊ | 8854/31125 [00:22<00:56, 393.64it/s]
Searching over common line pairs: 29%|██▊ | 8894/31125 [00:23<00:56, 393.76it/s]
Searching over common line pairs: 29%|██▊ | 8934/31125 [00:23<00:56, 393.59it/s]
Searching over common line pairs: 29%|██▉ | 8974/31125 [00:23<00:56, 393.23it/s]
Searching over common line pairs: 29%|██▉ | 9014/31125 [00:23<00:56, 393.65it/s]
Searching over common line pairs: 29%|██▉ | 9054/31125 [00:23<00:56, 393.70it/s]
Searching over common line pairs: 29%|██▉ | 9094/31125 [00:23<00:55, 393.42it/s]
Searching over common line pairs: 29%|██▉ | 9134/31125 [00:23<00:55, 393.47it/s]
Searching over common line pairs: 29%|██▉ | 9174/31125 [00:23<00:55, 393.58it/s]
Searching over common line pairs: 30%|██▉ | 9214/31125 [00:23<00:55, 393.16it/s]
Searching over common line pairs: 30%|██▉ | 9254/31125 [00:23<00:55, 393.18it/s]
Searching over common line pairs: 30%|██▉ | 9294/31125 [00:24<00:55, 393.37it/s]
Searching over common line pairs: 30%|██▉ | 9334/31125 [00:24<00:55, 393.13it/s]
Searching over common line pairs: 30%|███ | 9374/31125 [00:24<00:55, 393.17it/s]
Searching over common line pairs: 30%|███ | 9414/31125 [00:24<00:55, 393.40it/s]
Searching over common line pairs: 30%|███ | 9454/31125 [00:24<00:55, 393.65it/s]
Searching over common line pairs: 31%|███ | 9494/31125 [00:24<00:54, 393.49it/s]
Searching over common line pairs: 31%|███ | 9534/31125 [00:24<00:54, 393.66it/s]
Searching over common line pairs: 31%|███ | 9574/31125 [00:24<00:54, 393.87it/s]
Searching over common line pairs: 31%|███ | 9614/31125 [00:24<00:54, 393.69it/s]
Searching over common line pairs: 31%|███ | 9654/31125 [00:24<00:54, 393.87it/s]
Searching over common line pairs: 31%|███ | 9694/31125 [00:25<00:54, 393.72it/s]
Searching over common line pairs: 31%|███▏ | 9734/31125 [00:25<00:54, 393.19it/s]
Searching over common line pairs: 31%|███▏ | 9774/31125 [00:25<00:54, 393.66it/s]
Searching over common line pairs: 32%|███▏ | 9814/31125 [00:25<00:54, 393.60it/s]
Searching over common line pairs: 32%|███▏ | 9854/31125 [00:25<00:54, 393.65it/s]
Searching over common line pairs: 32%|███▏ | 9894/31125 [00:25<00:54, 392.88it/s]
Searching over common line pairs: 32%|███▏ | 9934/31125 [00:25<00:53, 393.32it/s]
Searching over common line pairs: 32%|███▏ | 9974/31125 [00:25<00:53, 393.66it/s]
Searching over common line pairs: 32%|███▏ | 10014/31125 [00:25<00:53, 393.45it/s]
Searching over common line pairs: 32%|███▏ | 10054/31125 [00:26<00:53, 393.59it/s]
Searching over common line pairs: 32%|███▏ | 10094/31125 [00:26<00:53, 392.92it/s]
Searching over common line pairs: 33%|███▎ | 10134/31125 [00:26<00:53, 391.32it/s]
Searching over common line pairs: 33%|███▎ | 10174/31125 [00:26<00:53, 392.33it/s]
Searching over common line pairs: 33%|███▎ | 10214/31125 [00:26<00:53, 392.64it/s]
Searching over common line pairs: 33%|███▎ | 10254/31125 [00:26<00:53, 393.14it/s]
Searching over common line pairs: 33%|███▎ | 10294/31125 [00:26<00:52, 393.22it/s]
Searching over common line pairs: 33%|███▎ | 10334/31125 [00:26<00:52, 393.65it/s]
Searching over common line pairs: 33%|███▎ | 10374/31125 [00:26<00:52, 393.80it/s]
Searching over common line pairs: 33%|███▎ | 10414/31125 [00:26<00:52, 393.75it/s]
Searching over common line pairs: 34%|███▎ | 10454/31125 [00:27<00:52, 393.60it/s]
Searching over common line pairs: 34%|███▎ | 10494/31125 [00:27<00:52, 393.30it/s]
Searching over common line pairs: 34%|███▍ | 10534/31125 [00:27<00:52, 393.51it/s]
Searching over common line pairs: 34%|███▍ | 10574/31125 [00:27<00:52, 393.35it/s]
Searching over common line pairs: 34%|███▍ | 10614/31125 [00:27<00:52, 393.26it/s]
Searching over common line pairs: 34%|███▍ | 10654/31125 [00:27<00:52, 393.44it/s]
Searching over common line pairs: 34%|███▍ | 10694/31125 [00:27<00:51, 393.45it/s]
Searching over common line pairs: 34%|███▍ | 10734/31125 [00:27<00:51, 394.05it/s]
Searching over common line pairs: 35%|███▍ | 10774/31125 [00:27<00:51, 394.25it/s]
Searching over common line pairs: 35%|███▍ | 10814/31125 [00:27<00:51, 394.26it/s]
Searching over common line pairs: 35%|███▍ | 10854/31125 [00:28<00:51, 394.21it/s]
Searching over common line pairs: 35%|███▌ | 10894/31125 [00:28<00:51, 393.50it/s]
Searching over common line pairs: 35%|███▌ | 10934/31125 [00:28<00:51, 393.81it/s]
Searching over common line pairs: 35%|███▌ | 10974/31125 [00:28<00:51, 391.32it/s]
Searching over common line pairs: 35%|███▌ | 11014/31125 [00:28<00:51, 392.40it/s]
Searching over common line pairs: 36%|███▌ | 11054/31125 [00:28<00:51, 393.22it/s]
Searching over common line pairs: 36%|███▌ | 11094/31125 [00:28<00:50, 393.12it/s]
Searching over common line pairs: 36%|███▌ | 11134/31125 [00:28<00:50, 393.76it/s]
Searching over common line pairs: 36%|███▌ | 11174/31125 [00:28<00:50, 393.91it/s]
Searching over common line pairs: 36%|███▌ | 11214/31125 [00:28<00:50, 393.49it/s]
Searching over common line pairs: 36%|███▌ | 11254/31125 [00:29<00:50, 393.59it/s]
Searching over common line pairs: 36%|███▋ | 11294/31125 [00:29<00:50, 393.31it/s]
Searching over common line pairs: 36%|███▋ | 11334/31125 [00:29<00:50, 393.32it/s]
Searching over common line pairs: 37%|███▋ | 11374/31125 [00:29<00:50, 393.60it/s]
Searching over common line pairs: 37%|███▋ | 11414/31125 [00:29<00:50, 393.31it/s]
Searching over common line pairs: 37%|███▋ | 11454/31125 [00:29<00:50, 393.31it/s]
Searching over common line pairs: 37%|███▋ | 11494/31125 [00:29<00:49, 393.38it/s]
Searching over common line pairs: 37%|███▋ | 11534/31125 [00:29<00:49, 393.72it/s]
Searching over common line pairs: 37%|███▋ | 11574/31125 [00:29<00:49, 393.74it/s]
Searching over common line pairs: 37%|███▋ | 11614/31125 [00:29<00:49, 393.45it/s]
Searching over common line pairs: 37%|███▋ | 11654/31125 [00:30<00:49, 393.49it/s]
Searching over common line pairs: 38%|███▊ | 11694/31125 [00:30<00:49, 393.36it/s]
Searching over common line pairs: 38%|███▊ | 11734/31125 [00:30<00:49, 392.97it/s]
Searching over common line pairs: 38%|███▊ | 11774/31125 [00:30<00:49, 392.90it/s]
Searching over common line pairs: 38%|███▊ | 11814/31125 [00:30<00:49, 392.91it/s]
Searching over common line pairs: 38%|███▊ | 11854/31125 [00:30<00:49, 392.99it/s]
Searching over common line pairs: 38%|███▊ | 11894/31125 [00:30<00:48, 393.13it/s]
Searching over common line pairs: 38%|███▊ | 11934/31125 [00:30<00:48, 393.20it/s]
Searching over common line pairs: 38%|███▊ | 11974/31125 [00:30<00:48, 393.25it/s]
Searching over common line pairs: 39%|███▊ | 12014/31125 [00:30<00:48, 390.90it/s]
Searching over common line pairs: 39%|███▊ | 12054/31125 [00:31<00:48, 391.43it/s]
Searching over common line pairs: 39%|███▉ | 12094/31125 [00:31<00:48, 392.07it/s]
Searching over common line pairs: 39%|███▉ | 12134/31125 [00:31<00:48, 390.42it/s]
Searching over common line pairs: 39%|███▉ | 12174/31125 [00:31<00:48, 391.90it/s]
Searching over common line pairs: 39%|███▉ | 12214/31125 [00:31<00:48, 392.61it/s]
Searching over common line pairs: 39%|███▉ | 12254/31125 [00:31<00:48, 392.77it/s]
Searching over common line pairs: 39%|███▉ | 12294/31125 [00:31<00:47, 393.00it/s]
Searching over common line pairs: 40%|███▉ | 12334/31125 [00:31<00:47, 393.46it/s]
Searching over common line pairs: 40%|███▉ | 12374/31125 [00:31<00:47, 393.41it/s]
Searching over common line pairs: 40%|███▉ | 12414/31125 [00:32<00:47, 393.41it/s]
Searching over common line pairs: 40%|████ | 12454/31125 [00:32<00:47, 393.28it/s]
Searching over common line pairs: 40%|████ | 12494/31125 [00:32<00:47, 392.07it/s]
Searching over common line pairs: 40%|████ | 12534/31125 [00:32<00:47, 392.77it/s]
Searching over common line pairs: 40%|████ | 12574/31125 [00:32<00:47, 393.35it/s]
Searching over common line pairs: 41%|████ | 12614/31125 [00:32<00:47, 393.62it/s]
Searching over common line pairs: 41%|████ | 12654/31125 [00:32<00:46, 393.58it/s]
Searching over common line pairs: 41%|████ | 12694/31125 [00:32<00:46, 393.76it/s]
Searching over common line pairs: 41%|████ | 12734/31125 [00:32<00:46, 393.76it/s]
Searching over common line pairs: 41%|████ | 12774/31125 [00:32<00:46, 392.86it/s]
Searching over common line pairs: 41%|████ | 12814/31125 [00:33<00:46, 389.99it/s]
Searching over common line pairs: 41%|████▏ | 12854/31125 [00:33<00:46, 390.93it/s]
Searching over common line pairs: 41%|████▏ | 12894/31125 [00:33<00:50, 363.21it/s]
Searching over common line pairs: 42%|████▏ | 12933/31125 [00:33<00:49, 370.54it/s]
Searching over common line pairs: 42%|████▏ | 12973/31125 [00:33<00:48, 377.58it/s]
Searching over common line pairs: 42%|████▏ | 13013/31125 [00:33<00:47, 382.12it/s]
Searching over common line pairs: 42%|████▏ | 13053/31125 [00:33<00:46, 385.22it/s]
Searching over common line pairs: 42%|████▏ | 13093/31125 [00:33<00:46, 387.77it/s]
Searching over common line pairs: 42%|████▏ | 13133/31125 [00:33<00:46, 389.51it/s]
Searching over common line pairs: 42%|████▏ | 13173/31125 [00:33<00:45, 390.79it/s]
Searching over common line pairs: 42%|████▏ | 13213/31125 [00:34<00:45, 391.47it/s]
Searching over common line pairs: 43%|████▎ | 13253/31125 [00:34<00:45, 391.11it/s]
Searching over common line pairs: 43%|████▎ | 13293/31125 [00:34<00:45, 391.59it/s]
Searching over common line pairs: 43%|████▎ | 13333/31125 [00:34<00:45, 392.75it/s]
Searching over common line pairs: 43%|████▎ | 13373/31125 [00:34<00:45, 392.83it/s]
Searching over common line pairs: 43%|████▎ | 13413/31125 [00:34<00:45, 393.05it/s]
Searching over common line pairs: 43%|████▎ | 13453/31125 [00:34<00:45, 392.46it/s]
Searching over common line pairs: 43%|████▎ | 13493/31125 [00:34<00:44, 393.11it/s]
Searching over common line pairs: 43%|████▎ | 13533/31125 [00:34<00:44, 393.58it/s]
Searching over common line pairs: 44%|████▎ | 13573/31125 [00:34<00:44, 393.41it/s]
Searching over common line pairs: 44%|████▎ | 13613/31125 [00:35<00:44, 393.70it/s]
Searching over common line pairs: 44%|████▍ | 13653/31125 [00:35<00:44, 393.64it/s]
Searching over common line pairs: 44%|████▍ | 13693/31125 [00:35<00:44, 393.71it/s]
Searching over common line pairs: 44%|████▍ | 13733/31125 [00:35<00:44, 394.19it/s]
Searching over common line pairs: 44%|████▍ | 13773/31125 [00:35<00:44, 394.23it/s]
Searching over common line pairs: 44%|████▍ | 13813/31125 [00:35<00:43, 393.76it/s]
Searching over common line pairs: 45%|████▍ | 13853/31125 [00:35<00:43, 393.92it/s]
Searching over common line pairs: 45%|████▍ | 13893/31125 [00:35<00:43, 393.71it/s]
Searching over common line pairs: 45%|████▍ | 13933/31125 [00:35<00:43, 393.75it/s]
Searching over common line pairs: 45%|████▍ | 13973/31125 [00:36<00:43, 393.86it/s]
Searching over common line pairs: 45%|████▌ | 14013/31125 [00:36<00:43, 392.99it/s]
Searching over common line pairs: 45%|████▌ | 14053/31125 [00:36<00:43, 392.86it/s]
Searching over common line pairs: 45%|████▌ | 14093/31125 [00:36<00:43, 392.83it/s]
Searching over common line pairs: 45%|████▌ | 14133/31125 [00:36<00:43, 393.36it/s]
Searching over common line pairs: 46%|████▌ | 14173/31125 [00:36<00:43, 393.40it/s]
Searching over common line pairs: 46%|████▌ | 14213/31125 [00:36<00:43, 392.94it/s]
Searching over common line pairs: 46%|████▌ | 14253/31125 [00:36<00:42, 393.32it/s]
Searching over common line pairs: 46%|████▌ | 14293/31125 [00:36<00:42, 393.54it/s]
Searching over common line pairs: 46%|████▌ | 14333/31125 [00:36<00:42, 394.05it/s]
Searching over common line pairs: 46%|████▌ | 14373/31125 [00:37<00:42, 393.95it/s]
Searching over common line pairs: 46%|████▋ | 14413/31125 [00:37<00:42, 393.37it/s]
Searching over common line pairs: 46%|████▋ | 14453/31125 [00:37<00:42, 393.82it/s]
Searching over common line pairs: 47%|████▋ | 14493/31125 [00:37<00:42, 393.18it/s]
Searching over common line pairs: 47%|████▋ | 14533/31125 [00:37<00:42, 393.38it/s]
Searching over common line pairs: 47%|████▋ | 14573/31125 [00:37<00:42, 393.51it/s]
Searching over common line pairs: 47%|████▋ | 14613/31125 [00:37<00:41, 393.43it/s]
Searching over common line pairs: 47%|████▋ | 14653/31125 [00:37<00:41, 393.66it/s]
Searching over common line pairs: 47%|████▋ | 14693/31125 [00:37<00:41, 393.87it/s]
Searching over common line pairs: 47%|████▋ | 14733/31125 [00:37<00:41, 393.40it/s]
Searching over common line pairs: 47%|████▋ | 14773/31125 [00:38<00:41, 393.57it/s]
Searching over common line pairs: 48%|████▊ | 14813/31125 [00:38<00:41, 393.33it/s]
Searching over common line pairs: 48%|████▊ | 14853/31125 [00:38<00:41, 391.11it/s]
Searching over common line pairs: 48%|████▊ | 14893/31125 [00:38<00:41, 391.10it/s]
Searching over common line pairs: 48%|████▊ | 14933/31125 [00:38<00:41, 391.84it/s]
Searching over common line pairs: 48%|████▊ | 14973/31125 [00:38<00:41, 392.79it/s]
Searching over common line pairs: 48%|████▊ | 15013/31125 [00:38<00:40, 393.04it/s]
Searching over common line pairs: 48%|████▊ | 15053/31125 [00:38<00:40, 393.53it/s]
Searching over common line pairs: 48%|████▊ | 15093/31125 [00:38<00:40, 393.97it/s]
Searching over common line pairs: 49%|████▊ | 15133/31125 [00:38<00:40, 393.58it/s]
Searching over common line pairs: 49%|████▊ | 15173/31125 [00:39<00:40, 393.93it/s]
Searching over common line pairs: 49%|████▉ | 15213/31125 [00:39<00:40, 393.50it/s]
Searching over common line pairs: 49%|████▉ | 15253/31125 [00:39<00:40, 393.43it/s]
Searching over common line pairs: 49%|████▉ | 15293/31125 [00:39<00:40, 393.66it/s]
Searching over common line pairs: 49%|████▉ | 15333/31125 [00:39<00:40, 393.46it/s]
Searching over common line pairs: 49%|████▉ | 15373/31125 [00:39<00:40, 393.58it/s]
Searching over common line pairs: 50%|████▉ | 15413/31125 [00:39<00:39, 393.75it/s]
Searching over common line pairs: 50%|████▉ | 15453/31125 [00:39<00:39, 393.86it/s]
Searching over common line pairs: 50%|████▉ | 15493/31125 [00:39<00:39, 394.29it/s]
Searching over common line pairs: 50%|████▉ | 15533/31125 [00:39<00:39, 393.87it/s]
Searching over common line pairs: 50%|█████ | 15573/31125 [00:40<00:39, 393.83it/s]
Searching over common line pairs: 50%|█████ | 15613/31125 [00:40<00:39, 393.58it/s]
Searching over common line pairs: 50%|█████ | 15653/31125 [00:40<00:39, 393.65it/s]
Searching over common line pairs: 50%|█████ | 15693/31125 [00:40<00:39, 393.53it/s]
Searching over common line pairs: 51%|█████ | 15733/31125 [00:40<00:39, 393.54it/s]
Searching over common line pairs: 51%|█████ | 15773/31125 [00:40<00:38, 393.80it/s]
Searching over common line pairs: 51%|█████ | 15813/31125 [00:40<00:38, 393.52it/s]
Searching over common line pairs: 51%|█████ | 15853/31125 [00:40<00:38, 393.81it/s]
Searching over common line pairs: 51%|█████ | 15893/31125 [00:40<00:38, 393.54it/s]
Searching over common line pairs: 51%|█████ | 15933/31125 [00:40<00:38, 393.54it/s]
Searching over common line pairs: 51%|█████▏ | 15973/31125 [00:41<00:38, 393.38it/s]
Searching over common line pairs: 51%|█████▏ | 16013/31125 [00:41<00:38, 393.13it/s]
Searching over common line pairs: 52%|█████▏ | 16053/31125 [00:41<00:38, 393.54it/s]
Searching over common line pairs: 52%|█████▏ | 16093/31125 [00:41<00:38, 393.91it/s]
Searching over common line pairs: 52%|█████▏ | 16133/31125 [00:41<00:38, 393.72it/s]
Searching over common line pairs: 52%|█████▏ | 16173/31125 [00:41<00:37, 393.66it/s]
Searching over common line pairs: 52%|█████▏ | 16213/31125 [00:41<00:37, 393.93it/s]
Searching over common line pairs: 52%|█████▏ | 16253/31125 [00:41<00:37, 393.83it/s]
Searching over common line pairs: 52%|█████▏ | 16293/31125 [00:41<00:37, 393.95it/s]
Searching over common line pairs: 52%|█████▏ | 16333/31125 [00:42<00:37, 393.82it/s]
Searching over common line pairs: 53%|█████▎ | 16373/31125 [00:42<00:37, 393.61it/s]
Searching over common line pairs: 53%|█████▎ | 16413/31125 [00:42<00:37, 393.59it/s]
Searching over common line pairs: 53%|█████▎ | 16453/31125 [00:42<00:37, 393.52it/s]
Searching over common line pairs: 53%|█████▎ | 16493/31125 [00:42<00:37, 394.02it/s]
Searching over common line pairs: 53%|█████▎ | 16533/31125 [00:42<00:37, 392.77it/s]
Searching over common line pairs: 53%|█████▎ | 16573/31125 [00:42<00:37, 384.98it/s]
Searching over common line pairs: 53%|█████▎ | 16613/31125 [00:42<00:37, 387.28it/s]
Searching over common line pairs: 54%|█████▎ | 16653/31125 [00:42<00:37, 389.51it/s]
Searching over common line pairs: 54%|█████▎ | 16693/31125 [00:42<00:36, 391.15it/s]
Searching over common line pairs: 54%|█████▍ | 16733/31125 [00:43<00:36, 391.97it/s]
Searching over common line pairs: 54%|█████▍ | 16773/31125 [00:43<00:36, 391.79it/s]
Searching over common line pairs: 54%|█████▍ | 16813/31125 [00:43<00:36, 392.41it/s]
Searching over common line pairs: 54%|█████▍ | 16853/31125 [00:43<00:36, 392.94it/s]
Searching over common line pairs: 54%|█████▍ | 16893/31125 [00:43<00:36, 393.58it/s]
Searching over common line pairs: 54%|█████▍ | 16933/31125 [00:43<00:36, 393.60it/s]
Searching over common line pairs: 55%|█████▍ | 16973/31125 [00:43<00:35, 393.11it/s]
Searching over common line pairs: 55%|█████▍ | 17013/31125 [00:43<00:35, 393.53it/s]
Searching over common line pairs: 55%|█████▍ | 17053/31125 [00:43<00:35, 393.66it/s]
Searching over common line pairs: 55%|█████▍ | 17093/31125 [00:43<00:35, 393.61it/s]
Searching over common line pairs: 55%|█████▌ | 17133/31125 [00:44<00:35, 393.70it/s]
Searching over common line pairs: 55%|█████▌ | 17173/31125 [00:44<00:35, 393.26it/s]
Searching over common line pairs: 55%|█████▌ | 17213/31125 [00:44<00:35, 391.49it/s]
Searching over common line pairs: 55%|█████▌ | 17253/31125 [00:44<00:35, 391.82it/s]
Searching over common line pairs: 56%|█████▌ | 17293/31125 [00:44<00:35, 392.24it/s]
Searching over common line pairs: 56%|█████▌ | 17333/31125 [00:44<00:35, 392.85it/s]
Searching over common line pairs: 56%|█████▌ | 17373/31125 [00:44<00:35, 392.52it/s]
Searching over common line pairs: 56%|█████▌ | 17413/31125 [00:44<00:34, 392.88it/s]
Searching over common line pairs: 56%|█████▌ | 17453/31125 [00:44<00:34, 393.25it/s]
Searching over common line pairs: 56%|█████▌ | 17493/31125 [00:44<00:34, 393.18it/s]
Searching over common line pairs: 56%|█████▋ | 17533/31125 [00:45<00:34, 392.99it/s]
Searching over common line pairs: 56%|█████▋ | 17573/31125 [00:45<00:34, 393.05it/s]
Searching over common line pairs: 57%|█████▋ | 17613/31125 [00:45<00:34, 393.32it/s]
Searching over common line pairs: 57%|█████▋ | 17653/31125 [00:45<00:34, 393.18it/s]
Searching over common line pairs: 57%|█████▋ | 17693/31125 [00:45<00:34, 393.60it/s]
Searching over common line pairs: 57%|█████▋ | 17733/31125 [00:45<00:34, 393.69it/s]
Searching over common line pairs: 57%|█████▋ | 17773/31125 [00:45<00:33, 393.26it/s]
Searching over common line pairs: 57%|█████▋ | 17813/31125 [00:45<00:33, 393.68it/s]
Searching over common line pairs: 57%|█████▋ | 17853/31125 [00:45<00:33, 393.79it/s]
Searching over common line pairs: 57%|█████▋ | 17893/31125 [00:45<00:33, 393.66it/s]
Searching over common line pairs: 58%|█████▊ | 17933/31125 [00:46<00:33, 393.37it/s]
Searching over common line pairs: 58%|█████▊ | 17973/31125 [00:46<00:33, 393.21it/s]
Searching over common line pairs: 58%|█████▊ | 18013/31125 [00:46<00:33, 393.10it/s]
Searching over common line pairs: 58%|█████▊ | 18053/31125 [00:46<00:33, 393.66it/s]
Searching over common line pairs: 58%|█████▊ | 18093/31125 [00:46<00:33, 393.81it/s]
Searching over common line pairs: 58%|█████▊ | 18133/31125 [00:46<00:33, 393.54it/s]
Searching over common line pairs: 58%|█████▊ | 18173/31125 [00:46<00:32, 393.42it/s]
Searching over common line pairs: 59%|█████▊ | 18213/31125 [00:46<00:32, 393.60it/s]
Searching over common line pairs: 59%|█████▊ | 18253/31125 [00:46<00:32, 393.66it/s]
Searching over common line pairs: 59%|█████▉ | 18293/31125 [00:46<00:32, 393.65it/s]
Searching over common line pairs: 59%|█████▉ | 18333/31125 [00:47<00:32, 393.69it/s]
Searching over common line pairs: 59%|█████▉ | 18373/31125 [00:47<00:32, 393.73it/s]
Searching over common line pairs: 59%|█████▉ | 18413/31125 [00:47<00:32, 393.64it/s]
Searching over common line pairs: 59%|█████▉ | 18453/31125 [00:47<00:32, 393.73it/s]
Searching over common line pairs: 59%|█████▉ | 18493/31125 [00:47<00:32, 393.62it/s]
Searching over common line pairs: 60%|█████▉ | 18533/31125 [00:47<00:32, 393.28it/s]
Searching over common line pairs: 60%|█████▉ | 18573/31125 [00:47<00:31, 393.37it/s]
Searching over common line pairs: 60%|█████▉ | 18613/31125 [00:47<00:31, 393.42it/s]
Searching over common line pairs: 60%|█████▉ | 18653/31125 [00:47<00:31, 393.38it/s]
Searching over common line pairs: 60%|██████ | 18693/31125 [00:48<00:31, 393.65it/s]
Searching over common line pairs: 60%|██████ | 18733/31125 [00:48<00:31, 393.53it/s]
Searching over common line pairs: 60%|██████ | 18773/31125 [00:48<00:31, 393.61it/s]
Searching over common line pairs: 60%|██████ | 18813/31125 [00:48<00:31, 393.00it/s]
Searching over common line pairs: 61%|██████ | 18853/31125 [00:48<00:31, 392.16it/s]
Searching over common line pairs: 61%|██████ | 18893/31125 [00:48<00:31, 392.76it/s]
Searching over common line pairs: 61%|██████ | 18933/31125 [00:48<00:31, 392.91it/s]
Searching over common line pairs: 61%|██████ | 18973/31125 [00:48<00:30, 393.44it/s]
Searching over common line pairs: 61%|██████ | 19013/31125 [00:48<00:30, 393.71it/s]
Searching over common line pairs: 61%|██████ | 19053/31125 [00:48<00:30, 393.97it/s]
Searching over common line pairs: 61%|██████▏ | 19093/31125 [00:49<00:30, 393.88it/s]
Searching over common line pairs: 61%|██████▏ | 19133/31125 [00:49<00:30, 393.67it/s]
Searching over common line pairs: 62%|██████▏ | 19173/31125 [00:49<00:30, 393.44it/s]
Searching over common line pairs: 62%|██████▏ | 19213/31125 [00:49<00:30, 393.64it/s]
Searching over common line pairs: 62%|██████▏ | 19253/31125 [00:49<00:30, 393.43it/s]
Searching over common line pairs: 62%|██████▏ | 19293/31125 [00:49<00:30, 393.43it/s]
Searching over common line pairs: 62%|██████▏ | 19333/31125 [00:49<00:29, 393.27it/s]
Searching over common line pairs: 62%|██████▏ | 19373/31125 [00:49<00:29, 393.29it/s]
Searching over common line pairs: 62%|██████▏ | 19413/31125 [00:49<00:29, 393.42it/s]
Searching over common line pairs: 62%|██████▏ | 19453/31125 [00:49<00:29, 393.72it/s]
Searching over common line pairs: 63%|██████▎ | 19493/31125 [00:50<00:29, 393.71it/s]
Searching over common line pairs: 63%|██████▎ | 19533/31125 [00:50<00:29, 393.42it/s]
Searching over common line pairs: 63%|██████▎ | 19573/31125 [00:50<00:29, 392.07it/s]
Searching over common line pairs: 63%|██████▎ | 19613/31125 [00:50<00:29, 392.47it/s]
Searching over common line pairs: 63%|██████▎ | 19653/31125 [00:50<00:29, 392.48it/s]
Searching over common line pairs: 63%|██████▎ | 19693/31125 [00:50<00:29, 392.92it/s]
Searching over common line pairs: 63%|██████▎ | 19733/31125 [00:50<00:28, 392.85it/s]
Searching over common line pairs: 64%|██████▎ | 19773/31125 [00:50<00:28, 393.00it/s]
Searching over common line pairs: 64%|██████▎ | 19813/31125 [00:50<00:28, 393.19it/s]
Searching over common line pairs: 64%|██████▍ | 19853/31125 [00:50<00:28, 393.45it/s]
Searching over common line pairs: 64%|██████▍ | 19893/31125 [00:51<00:28, 393.60it/s]
Searching over common line pairs: 64%|██████▍ | 19933/31125 [00:51<00:28, 393.36it/s]
Searching over common line pairs: 64%|██████▍ | 19973/31125 [00:51<00:28, 393.61it/s]
Searching over common line pairs: 64%|██████▍ | 20013/31125 [00:51<00:28, 393.65it/s]
Searching over common line pairs: 64%|██████▍ | 20053/31125 [00:51<00:28, 393.67it/s]
Searching over common line pairs: 65%|██████▍ | 20093/31125 [00:51<00:28, 393.71it/s]
Searching over common line pairs: 65%|██████▍ | 20133/31125 [00:51<00:27, 393.38it/s]
Searching over common line pairs: 65%|██████▍ | 20173/31125 [00:51<00:27, 393.67it/s]
Searching over common line pairs: 65%|██████▍ | 20213/31125 [00:51<00:27, 394.10it/s]
Searching over common line pairs: 65%|██████▌ | 20253/31125 [00:51<00:27, 393.85it/s]
Searching over common line pairs: 65%|██████▌ | 20293/31125 [00:52<00:27, 393.80it/s]
Searching over common line pairs: 65%|██████▌ | 20333/31125 [00:52<00:27, 393.52it/s]
Searching over common line pairs: 65%|██████▌ | 20373/31125 [00:52<00:27, 393.94it/s]
Searching over common line pairs: 66%|██████▌ | 20413/31125 [00:52<00:27, 394.12it/s]
Searching over common line pairs: 66%|██████▌ | 20453/31125 [00:52<00:27, 394.08it/s]
Searching over common line pairs: 66%|██████▌ | 20493/31125 [00:52<00:26, 393.92it/s]
Searching over common line pairs: 66%|██████▌ | 20533/31125 [00:52<00:26, 393.73it/s]
Searching over common line pairs: 66%|██████▌ | 20573/31125 [00:52<00:26, 393.95it/s]
Searching over common line pairs: 66%|██████▌ | 20613/31125 [00:52<00:26, 394.35it/s]
Searching over common line pairs: 66%|██████▋ | 20653/31125 [00:52<00:26, 393.93it/s]
Searching over common line pairs: 66%|██████▋ | 20693/31125 [00:53<00:26, 393.84it/s]
Searching over common line pairs: 67%|██████▋ | 20733/31125 [00:53<00:26, 393.63it/s]
Searching over common line pairs: 67%|██████▋ | 20773/31125 [00:53<00:26, 393.49it/s]
Searching over common line pairs: 67%|██████▋ | 20813/31125 [00:53<00:26, 393.85it/s]
Searching over common line pairs: 67%|██████▋ | 20853/31125 [00:53<00:26, 393.73it/s]
Searching over common line pairs: 67%|██████▋ | 20893/31125 [00:53<00:26, 393.36it/s]
Searching over common line pairs: 67%|██████▋ | 20933/31125 [00:53<00:25, 393.50it/s]
Searching over common line pairs: 67%|██████▋ | 20973/31125 [00:53<00:25, 393.66it/s]
Searching over common line pairs: 68%|██████▊ | 21013/31125 [00:53<00:25, 393.73it/s]
Searching over common line pairs: 68%|██████▊ | 21053/31125 [00:54<00:25, 393.63it/s]
Searching over common line pairs: 68%|██████▊ | 21093/31125 [00:54<00:25, 393.46it/s]
Searching over common line pairs: 68%|██████▊ | 21133/31125 [00:54<00:25, 393.39it/s]
Searching over common line pairs: 68%|██████▊ | 21173/31125 [00:54<00:25, 393.69it/s]
Searching over common line pairs: 68%|██████▊ | 21213/31125 [00:54<00:25, 394.11it/s]
Searching over common line pairs: 68%|██████▊ | 21253/31125 [00:54<00:25, 393.64it/s]
Searching over common line pairs: 68%|██████▊ | 21293/31125 [00:54<00:24, 393.41it/s]
Searching over common line pairs: 69%|██████▊ | 21333/31125 [00:54<00:24, 393.73it/s]
Searching over common line pairs: 69%|██████▊ | 21373/31125 [00:54<00:24, 394.16it/s]
Searching over common line pairs: 69%|██████▉ | 21413/31125 [00:54<00:24, 394.07it/s]
Searching over common line pairs: 69%|██████▉ | 21453/31125 [00:55<00:24, 394.07it/s]
Searching over common line pairs: 69%|██████▉ | 21493/31125 [00:55<00:24, 393.98it/s]
Searching over common line pairs: 69%|██████▉ | 21533/31125 [00:55<00:24, 393.83it/s]
Searching over common line pairs: 69%|██████▉ | 21573/31125 [00:55<00:24, 393.94it/s]
Searching over common line pairs: 69%|██████▉ | 21613/31125 [00:55<00:24, 393.62it/s]
Searching over common line pairs: 70%|██████▉ | 21653/31125 [00:55<00:24, 394.31it/s]
Searching over common line pairs: 70%|██████▉ | 21693/31125 [00:55<00:23, 393.92it/s]
Searching over common line pairs: 70%|██████▉ | 21733/31125 [00:55<00:23, 393.65it/s]
Searching over common line pairs: 70%|██████▉ | 21773/31125 [00:55<00:23, 393.92it/s]
Searching over common line pairs: 70%|███████ | 21813/31125 [00:55<00:23, 393.70it/s]
Searching over common line pairs: 70%|███████ | 21853/31125 [00:56<00:23, 393.89it/s]
Searching over common line pairs: 70%|███████ | 21893/31125 [00:56<00:23, 391.41it/s]
Searching over common line pairs: 70%|███████ | 21933/31125 [00:56<00:23, 390.32it/s]
Searching over common line pairs: 71%|███████ | 21973/31125 [00:56<00:23, 391.39it/s]
Searching over common line pairs: 71%|███████ | 22013/31125 [00:56<00:23, 392.38it/s]
Searching over common line pairs: 71%|███████ | 22053/31125 [00:56<00:23, 392.84it/s]
Searching over common line pairs: 71%|███████ | 22093/31125 [00:56<00:23, 392.51it/s]
Searching over common line pairs: 71%|███████ | 22133/31125 [00:56<00:22, 392.85it/s]
Searching over common line pairs: 71%|███████ | 22173/31125 [00:56<00:22, 393.40it/s]
Searching over common line pairs: 71%|███████▏ | 22213/31125 [00:56<00:22, 393.75it/s]
Searching over common line pairs: 71%|███████▏ | 22253/31125 [00:57<00:22, 393.63it/s]
Searching over common line pairs: 72%|███████▏ | 22293/31125 [00:57<00:22, 393.50it/s]
Searching over common line pairs: 72%|███████▏ | 22333/31125 [00:57<00:22, 393.44it/s]
Searching over common line pairs: 72%|███████▏ | 22373/31125 [00:57<00:22, 393.17it/s]
Searching over common line pairs: 72%|███████▏ | 22413/31125 [00:57<00:22, 393.37it/s]
Searching over common line pairs: 72%|███████▏ | 22453/31125 [00:57<00:22, 393.14it/s]
Searching over common line pairs: 72%|███████▏ | 22493/31125 [00:57<00:21, 393.32it/s]
Searching over common line pairs: 72%|███████▏ | 22533/31125 [00:57<00:21, 393.49it/s]
Searching over common line pairs: 73%|███████▎ | 22573/31125 [00:57<00:21, 393.83it/s]
Searching over common line pairs: 73%|███████▎ | 22613/31125 [00:57<00:21, 393.11it/s]
Searching over common line pairs: 73%|███████▎ | 22653/31125 [00:58<00:21, 393.18it/s]
Searching over common line pairs: 73%|███████▎ | 22693/31125 [00:58<00:21, 393.10it/s]
Searching over common line pairs: 73%|███████▎ | 22733/31125 [00:58<00:21, 393.48it/s]
Searching over common line pairs: 73%|███████▎ | 22773/31125 [00:58<00:21, 392.87it/s]
Searching over common line pairs: 73%|███████▎ | 22813/31125 [00:58<00:21, 393.14it/s]
Searching over common line pairs: 73%|███████▎ | 22853/31125 [00:58<00:21, 393.29it/s]
Searching over common line pairs: 74%|███████▎ | 22893/31125 [00:58<00:20, 393.34it/s]
Searching over common line pairs: 74%|███████▎ | 22933/31125 [00:58<00:20, 393.31it/s]
Searching over common line pairs: 74%|███████▍ | 22973/31125 [00:58<00:20, 393.58it/s]
Searching over common line pairs: 74%|███████▍ | 23013/31125 [00:58<00:20, 393.55it/s]
Searching over common line pairs: 74%|███████▍ | 23053/31125 [00:59<00:20, 393.41it/s]
Searching over common line pairs: 74%|███████▍ | 23093/31125 [00:59<00:20, 393.07it/s]
Searching over common line pairs: 74%|███████▍ | 23133/31125 [00:59<00:20, 393.10it/s]
Searching over common line pairs: 74%|███████▍ | 23173/31125 [00:59<00:20, 393.13it/s]
Searching over common line pairs: 75%|███████▍ | 23213/31125 [00:59<00:20, 393.14it/s]
Searching over common line pairs: 75%|███████▍ | 23253/31125 [00:59<00:20, 392.80it/s]
Searching over common line pairs: 75%|███████▍ | 23293/31125 [00:59<00:19, 392.99it/s]
Searching over common line pairs: 75%|███████▍ | 23333/31125 [00:59<00:19, 393.05it/s]
Searching over common line pairs: 75%|███████▌ | 23373/31125 [00:59<00:19, 393.58it/s]
Searching over common line pairs: 75%|███████▌ | 23413/31125 [01:00<00:19, 393.64it/s]
Searching over common line pairs: 75%|███████▌ | 23453/31125 [01:00<00:19, 393.28it/s]
Searching over common line pairs: 75%|███████▌ | 23493/31125 [01:00<00:19, 393.23it/s]
Searching over common line pairs: 76%|███████▌ | 23533/31125 [01:00<00:19, 393.06it/s]
Searching over common line pairs: 76%|███████▌ | 23573/31125 [01:00<00:19, 393.11it/s]
Searching over common line pairs: 76%|███████▌ | 23613/31125 [01:00<00:19, 393.32it/s]
Searching over common line pairs: 76%|███████▌ | 23653/31125 [01:00<00:19, 392.91it/s]
Searching over common line pairs: 76%|███████▌ | 23693/31125 [01:00<00:18, 393.43it/s]
Searching over common line pairs: 76%|███████▋ | 23733/31125 [01:00<00:18, 393.43it/s]
Searching over common line pairs: 76%|███████▋ | 23773/31125 [01:00<00:18, 393.55it/s]
Searching over common line pairs: 77%|███████▋ | 23813/31125 [01:01<00:18, 393.41it/s]
Searching over common line pairs: 77%|███████▋ | 23853/31125 [01:01<00:18, 393.57it/s]
Searching over common line pairs: 77%|███████▋ | 23893/31125 [01:01<00:18, 393.30it/s]
Searching over common line pairs: 77%|███████▋ | 23933/31125 [01:01<00:18, 393.49it/s]
Searching over common line pairs: 77%|███████▋ | 23973/31125 [01:01<00:18, 393.51it/s]
Searching over common line pairs: 77%|███████▋ | 24013/31125 [01:01<00:19, 371.36it/s]
Searching over common line pairs: 77%|███████▋ | 24051/31125 [01:01<00:19, 361.87it/s]
Searching over common line pairs: 77%|███████▋ | 24091/31125 [01:01<00:18, 371.17it/s]
Searching over common line pairs: 78%|███████▊ | 24131/31125 [01:01<00:18, 377.72it/s]
Searching over common line pairs: 78%|███████▊ | 24171/31125 [01:01<00:18, 382.33it/s]
Searching over common line pairs: 78%|███████▊ | 24211/31125 [01:02<00:17, 385.72it/s]
Searching over common line pairs: 78%|███████▊ | 24251/31125 [01:02<00:17, 387.83it/s]
Searching over common line pairs: 78%|███████▊ | 24290/31125 [01:02<00:17, 387.99it/s]
Searching over common line pairs: 78%|███████▊ | 24330/31125 [01:02<00:17, 389.85it/s]
Searching over common line pairs: 78%|███████▊ | 24370/31125 [01:02<00:17, 390.93it/s]
Searching over common line pairs: 78%|███████▊ | 24410/31125 [01:02<00:17, 392.05it/s]
Searching over common line pairs: 79%|███████▊ | 24450/31125 [01:02<00:17, 392.27it/s]
Searching over common line pairs: 79%|███████▊ | 24490/31125 [01:02<00:16, 392.67it/s]
Searching over common line pairs: 79%|███████▉ | 24530/31125 [01:02<00:16, 393.02it/s]
Searching over common line pairs: 79%|███████▉ | 24570/31125 [01:02<00:16, 393.01it/s]
Searching over common line pairs: 79%|███████▉ | 24610/31125 [01:03<00:16, 393.38it/s]
Searching over common line pairs: 79%|███████▉ | 24650/31125 [01:03<00:16, 393.02it/s]
Searching over common line pairs: 79%|███████▉ | 24690/31125 [01:03<00:16, 393.15it/s]
Searching over common line pairs: 79%|███████▉ | 24730/31125 [01:03<00:16, 393.47it/s]
Searching over common line pairs: 80%|███████▉ | 24770/31125 [01:03<00:16, 393.48it/s]
Searching over common line pairs: 80%|███████▉ | 24810/31125 [01:03<00:16, 393.21it/s]
Searching over common line pairs: 80%|███████▉ | 24850/31125 [01:03<00:15, 393.25it/s]
Searching over common line pairs: 80%|███████▉ | 24890/31125 [01:03<00:15, 393.32it/s]
Searching over common line pairs: 80%|████████ | 24930/31125 [01:03<00:15, 393.15it/s]
Searching over common line pairs: 80%|████████ | 24970/31125 [01:04<00:15, 393.33it/s]
Searching over common line pairs: 80%|████████ | 25010/31125 [01:04<00:15, 393.60it/s]
Searching over common line pairs: 80%|████████ | 25050/31125 [01:04<00:15, 393.42it/s]
Searching over common line pairs: 81%|████████ | 25090/31125 [01:04<00:15, 393.53it/s]
Searching over common line pairs: 81%|████████ | 25130/31125 [01:04<00:15, 393.57it/s]
Searching over common line pairs: 81%|████████ | 25170/31125 [01:04<00:15, 393.63it/s]
Searching over common line pairs: 81%|████████ | 25210/31125 [01:04<00:15, 393.59it/s]
Searching over common line pairs: 81%|████████ | 25250/31125 [01:04<00:14, 393.32it/s]
Searching over common line pairs: 81%|████████▏ | 25290/31125 [01:04<00:14, 393.58it/s]
Searching over common line pairs: 81%|████████▏ | 25330/31125 [01:04<00:14, 393.68it/s]
Searching over common line pairs: 82%|████████▏ | 25370/31125 [01:05<00:14, 393.47it/s]
Searching over common line pairs: 82%|████████▏ | 25410/31125 [01:05<00:14, 393.47it/s]
Searching over common line pairs: 82%|████████▏ | 25450/31125 [01:05<00:14, 393.66it/s]
Searching over common line pairs: 82%|████████▏ | 25490/31125 [01:05<00:14, 393.42it/s]
Searching over common line pairs: 82%|████████▏ | 25530/31125 [01:05<00:14, 393.68it/s]
Searching over common line pairs: 82%|████████▏ | 25570/31125 [01:05<00:14, 393.67it/s]
Searching over common line pairs: 82%|████████▏ | 25610/31125 [01:05<00:14, 393.81it/s]
Searching over common line pairs: 82%|████████▏ | 25650/31125 [01:05<00:13, 393.74it/s]
Searching over common line pairs: 83%|████████▎ | 25690/31125 [01:05<00:13, 394.02it/s]
Searching over common line pairs: 83%|████████▎ | 25730/31125 [01:05<00:13, 393.94it/s]
Searching over common line pairs: 83%|████████▎ | 25770/31125 [01:06<00:13, 393.81it/s]
Searching over common line pairs: 83%|████████▎ | 25810/31125 [01:06<00:13, 393.62it/s]
Searching over common line pairs: 83%|████████▎ | 25850/31125 [01:06<00:13, 393.34it/s]
Searching over common line pairs: 83%|████████▎ | 25890/31125 [01:06<00:13, 393.33it/s]
Searching over common line pairs: 83%|████████▎ | 25930/31125 [01:06<00:13, 393.67it/s]
Searching over common line pairs: 83%|████████▎ | 25970/31125 [01:06<00:13, 393.46it/s]
Searching over common line pairs: 84%|████████▎ | 26010/31125 [01:06<00:12, 393.47it/s]
Searching over common line pairs: 84%|████████▎ | 26050/31125 [01:06<00:12, 393.46it/s]
Searching over common line pairs: 84%|████████▍ | 26090/31125 [01:06<00:12, 393.47it/s]
Searching over common line pairs: 84%|████████▍ | 26130/31125 [01:06<00:12, 393.41it/s]
Searching over common line pairs: 84%|████████▍ | 26170/31125 [01:07<00:12, 393.41it/s]
Searching over common line pairs: 84%|████████▍ | 26210/31125 [01:07<00:12, 393.20it/s]
Searching over common line pairs: 84%|████████▍ | 26250/31125 [01:07<00:12, 393.00it/s]
Searching over common line pairs: 84%|████████▍ | 26290/31125 [01:07<00:12, 393.08it/s]
Searching over common line pairs: 85%|████████▍ | 26330/31125 [01:07<00:12, 393.07it/s]
Searching over common line pairs: 85%|████████▍ | 26370/31125 [01:07<00:12, 393.21it/s]
Searching over common line pairs: 85%|████████▍ | 26410/31125 [01:07<00:11, 393.22it/s]
Searching over common line pairs: 85%|████████▍ | 26450/31125 [01:07<00:11, 393.17it/s]
Searching over common line pairs: 85%|████████▌ | 26490/31125 [01:07<00:11, 393.28it/s]
Searching over common line pairs: 85%|████████▌ | 26530/31125 [01:07<00:11, 393.25it/s]
Searching over common line pairs: 85%|████████▌ | 26570/31125 [01:08<00:11, 393.05it/s]
Searching over common line pairs: 85%|████████▌ | 26610/31125 [01:08<00:11, 393.18it/s]
Searching over common line pairs: 86%|████████▌ | 26650/31125 [01:08<00:11, 391.86it/s]
Searching over common line pairs: 86%|████████▌ | 26690/31125 [01:08<00:11, 390.42it/s]
Searching over common line pairs: 86%|████████▌ | 26730/31125 [01:08<00:11, 391.68it/s]
Searching over common line pairs: 86%|████████▌ | 26770/31125 [01:08<00:11, 392.26it/s]
Searching over common line pairs: 86%|████████▌ | 26810/31125 [01:08<00:10, 392.62it/s]
Searching over common line pairs: 86%|████████▋ | 26850/31125 [01:08<00:10, 393.35it/s]
Searching over common line pairs: 86%|████████▋ | 26890/31125 [01:08<00:10, 393.77it/s]
Searching over common line pairs: 87%|████████▋ | 26930/31125 [01:08<00:10, 393.82it/s]
Searching over common line pairs: 87%|████████▋ | 26970/31125 [01:09<00:10, 393.65it/s]
Searching over common line pairs: 87%|████████▋ | 27010/31125 [01:09<00:10, 393.18it/s]
Searching over common line pairs: 87%|████████▋ | 27050/31125 [01:09<00:10, 393.04it/s]
Searching over common line pairs: 87%|████████▋ | 27090/31125 [01:09<00:10, 393.44it/s]
Searching over common line pairs: 87%|████████▋ | 27130/31125 [01:09<00:10, 393.46it/s]
Searching over common line pairs: 87%|████████▋ | 27170/31125 [01:09<00:10, 393.50it/s]
Searching over common line pairs: 87%|████████▋ | 27210/31125 [01:09<00:09, 393.73it/s]
Searching over common line pairs: 88%|████████▊ | 27250/31125 [01:09<00:09, 393.97it/s]
Searching over common line pairs: 88%|████████▊ | 27290/31125 [01:09<00:09, 393.68it/s]
Searching over common line pairs: 88%|████████▊ | 27330/31125 [01:10<00:09, 393.96it/s]
Searching over common line pairs: 88%|████████▊ | 27370/31125 [01:10<00:09, 393.68it/s]
Searching over common line pairs: 88%|████████▊ | 27410/31125 [01:10<00:09, 393.76it/s]
Searching over common line pairs: 88%|████████▊ | 27450/31125 [01:10<00:09, 393.97it/s]
Searching over common line pairs: 88%|████████▊ | 27490/31125 [01:10<00:09, 393.65it/s]
Searching over common line pairs: 88%|████████▊ | 27530/31125 [01:10<00:09, 393.49it/s]
Searching over common line pairs: 89%|████████▊ | 27570/31125 [01:10<00:09, 393.59it/s]
Searching over common line pairs: 89%|████████▊ | 27610/31125 [01:10<00:08, 393.68it/s]
Searching over common line pairs: 89%|████████▉ | 27650/31125 [01:10<00:08, 393.91it/s]
Searching over common line pairs: 89%|████████▉ | 27690/31125 [01:10<00:08, 393.72it/s]
Searching over common line pairs: 89%|████████▉ | 27730/31125 [01:11<00:08, 393.80it/s]
Searching over common line pairs: 89%|████████▉ | 27770/31125 [01:11<00:08, 393.50it/s]
Searching over common line pairs: 89%|████████▉ | 27810/31125 [01:11<00:08, 393.62it/s]
Searching over common line pairs: 89%|████████▉ | 27850/31125 [01:11<00:08, 393.90it/s]
Searching over common line pairs: 90%|████████▉ | 27890/31125 [01:11<00:08, 393.22it/s]
Searching over common line pairs: 90%|████████▉ | 27930/31125 [01:11<00:08, 393.46it/s]
Searching over common line pairs: 90%|████████▉ | 27970/31125 [01:11<00:08, 393.62it/s]
Searching over common line pairs: 90%|████████▉ | 28010/31125 [01:11<00:07, 393.90it/s]
Searching over common line pairs: 90%|█████████ | 28050/31125 [01:11<00:07, 393.81it/s]
Searching over common line pairs: 90%|█████████ | 28090/31125 [01:11<00:07, 393.90it/s]
Searching over common line pairs: 90%|█████████ | 28130/31125 [01:12<00:07, 393.99it/s]
Searching over common line pairs: 91%|█████████ | 28170/31125 [01:12<00:07, 393.74it/s]
Searching over common line pairs: 91%|█████████ | 28210/31125 [01:12<00:07, 393.86it/s]
Searching over common line pairs: 91%|█████████ | 28250/31125 [01:12<00:07, 392.18it/s]
Searching over common line pairs: 91%|█████████ | 28290/31125 [01:12<00:07, 392.65it/s]
Searching over common line pairs: 91%|█████████ | 28330/31125 [01:12<00:07, 392.87it/s]
Searching over common line pairs: 91%|█████████ | 28370/31125 [01:12<00:07, 393.15it/s]
Searching over common line pairs: 91%|█████████▏| 28410/31125 [01:12<00:06, 393.50it/s]
Searching over common line pairs: 91%|█████████▏| 28450/31125 [01:12<00:06, 393.59it/s]
Searching over common line pairs: 92%|█████████▏| 28490/31125 [01:12<00:06, 393.81it/s]
Searching over common line pairs: 92%|█████████▏| 28530/31125 [01:13<00:06, 393.49it/s]
Searching over common line pairs: 92%|█████████▏| 28570/31125 [01:13<00:06, 393.17it/s]
Searching over common line pairs: 92%|█████████▏| 28610/31125 [01:13<00:06, 393.50it/s]
Searching over common line pairs: 92%|█████████▏| 28650/31125 [01:13<00:06, 393.55it/s]
Searching over common line pairs: 92%|█████████▏| 28690/31125 [01:13<00:06, 393.76it/s]
Searching over common line pairs: 92%|█████████▏| 28730/31125 [01:13<00:06, 393.74it/s]
Searching over common line pairs: 92%|█████████▏| 28770/31125 [01:13<00:05, 393.23it/s]
Searching over common line pairs: 93%|█████████▎| 28810/31125 [01:13<00:05, 393.12it/s]
Searching over common line pairs: 93%|█████████▎| 28850/31125 [01:13<00:05, 393.18it/s]
Searching over common line pairs: 93%|█████████▎| 28890/31125 [01:13<00:05, 393.31it/s]
Searching over common line pairs: 93%|█████████▎| 28930/31125 [01:14<00:05, 393.22it/s]
Searching over common line pairs: 93%|█████████▎| 28970/31125 [01:14<00:05, 392.83it/s]
Searching over common line pairs: 93%|█████████▎| 29010/31125 [01:14<00:05, 391.24it/s]
Searching over common line pairs: 93%|█████████▎| 29050/31125 [01:14<00:05, 392.03it/s]
Searching over common line pairs: 93%|█████████▎| 29090/31125 [01:14<00:05, 392.25it/s]
Searching over common line pairs: 94%|█████████▎| 29130/31125 [01:14<00:05, 392.58it/s]
Searching over common line pairs: 94%|█████████▎| 29170/31125 [01:14<00:04, 392.97it/s]
Searching over common line pairs: 94%|█████████▍| 29210/31125 [01:14<00:04, 393.29it/s]
Searching over common line pairs: 94%|█████████▍| 29250/31125 [01:14<00:04, 393.37it/s]
Searching over common line pairs: 94%|█████████▍| 29290/31125 [01:14<00:04, 393.28it/s]
Searching over common line pairs: 94%|█████████▍| 29330/31125 [01:15<00:04, 393.38it/s]
Searching over common line pairs: 94%|█████████▍| 29370/31125 [01:15<00:04, 392.61it/s]
Searching over common line pairs: 94%|█████████▍| 29410/31125 [01:15<00:04, 392.87it/s]
Searching over common line pairs: 95%|█████████▍| 29450/31125 [01:15<00:04, 392.98it/s]
Searching over common line pairs: 95%|█████████▍| 29490/31125 [01:15<00:04, 393.19it/s]
Searching over common line pairs: 95%|█████████▍| 29530/31125 [01:15<00:04, 393.39it/s]
Searching over common line pairs: 95%|█████████▌| 29570/31125 [01:15<00:03, 393.31it/s]
Searching over common line pairs: 95%|█████████▌| 29610/31125 [01:15<00:03, 393.10it/s]
Searching over common line pairs: 95%|█████████▌| 29650/31125 [01:15<00:03, 392.99it/s]
Searching over common line pairs: 95%|█████████▌| 29690/31125 [01:16<00:03, 393.19it/s]
Searching over common line pairs: 96%|█████████▌| 29730/31125 [01:16<00:03, 392.53it/s]
Searching over common line pairs: 96%|█████████▌| 29770/31125 [01:16<00:03, 392.57it/s]
Searching over common line pairs: 96%|█████████▌| 29810/31125 [01:16<00:03, 392.94it/s]
Searching over common line pairs: 96%|█████████▌| 29850/31125 [01:16<00:03, 393.43it/s]
Searching over common line pairs: 96%|█████████▌| 29890/31125 [01:16<00:03, 393.61it/s]
Searching over common line pairs: 96%|█████████▌| 29930/31125 [01:16<00:03, 393.52it/s]
Searching over common line pairs: 96%|█████████▋| 29970/31125 [01:16<00:02, 393.74it/s]
Searching over common line pairs: 96%|█████████▋| 30010/31125 [01:16<00:02, 393.82it/s]
Searching over common line pairs: 97%|█████████▋| 30050/31125 [01:16<00:02, 394.00it/s]
Searching over common line pairs: 97%|█████████▋| 30090/31125 [01:17<00:02, 393.91it/s]
Searching over common line pairs: 97%|█████████▋| 30130/31125 [01:17<00:02, 393.89it/s]
Searching over common line pairs: 97%|█████████▋| 30170/31125 [01:17<00:02, 393.52it/s]
Searching over common line pairs: 97%|█████████▋| 30210/31125 [01:17<00:02, 393.74it/s]
Searching over common line pairs: 97%|█████████▋| 30250/31125 [01:17<00:02, 393.38it/s]
Searching over common line pairs: 97%|█████████▋| 30290/31125 [01:17<00:02, 392.84it/s]
Searching over common line pairs: 97%|█████████▋| 30330/31125 [01:17<00:02, 393.03it/s]
Searching over common line pairs: 98%|█████████▊| 30370/31125 [01:17<00:01, 393.04it/s]
Searching over common line pairs: 98%|█████████▊| 30410/31125 [01:17<00:01, 393.59it/s]
Searching over common line pairs: 98%|█████████▊| 30450/31125 [01:17<00:01, 393.32it/s]
Searching over common line pairs: 98%|█████████▊| 30490/31125 [01:18<00:01, 393.24it/s]
Searching over common line pairs: 98%|█████████▊| 30530/31125 [01:18<00:01, 393.33it/s]
Searching over common line pairs: 98%|█████████▊| 30570/31125 [01:18<00:01, 393.33it/s]
Searching over common line pairs: 98%|█████████▊| 30610/31125 [01:18<00:01, 392.05it/s]
Searching over common line pairs: 98%|█████████▊| 30650/31125 [01:18<00:01, 392.49it/s]
Searching over common line pairs: 99%|█████████▊| 30690/31125 [01:18<00:01, 392.66it/s]
Searching over common line pairs: 99%|█████████▊| 30730/31125 [01:18<00:01, 392.82it/s]
Searching over common line pairs: 99%|█████████▉| 30770/31125 [01:18<00:00, 393.05it/s]
Searching over common line pairs: 99%|█████████▉| 30810/31125 [01:18<00:00, 392.86it/s]
Searching over common line pairs: 99%|█████████▉| 30850/31125 [01:18<00:00, 392.75it/s]
Searching over common line pairs: 99%|█████████▉| 30890/31125 [01:19<00:00, 392.99it/s]
Searching over common line pairs: 99%|█████████▉| 30930/31125 [01:19<00:00, 392.64it/s]
Searching over common line pairs: 100%|█████████▉| 30970/31125 [01:19<00:00, 392.45it/s]
Searching over common line pairs: 100%|█████████▉| 31010/31125 [01:19<00:00, 392.78it/s]
Searching over common line pairs: 100%|█████████▉| 31050/31125 [01:19<00:00, 392.61it/s]
Searching over common line pairs: 100%|█████████▉| 31090/31125 [01:19<00:00, 392.63it/s]
Searching over common line pairs: 100%|██████████| 31125/31125 [01:19<00:00, 390.75it/s]
LSQR Least-squares solution of Ax = b
The matrix A has 31125 rows and 500 columns
damp = 0.00000000000000e+00 calc_var = 0
atol = 1.00e-06 conlim = 1.00e+08
btol = 1.00e-06 iter_lim = 1000
Itn x[0] r1norm r2norm Compatible LS Norm A Cond A
0 0.00000e+00 2.345e+01 2.345e+01 1.0e+00 7.2e-02
1 -3.24878e-03 2.308e+01 2.308e+01 9.8e-01 2.5e-02 9.5e+00 1.0e+00
2 -2.88802e-03 2.307e+01 2.307e+01 9.8e-01 9.2e-03 1.3e+01 2.0e+00
3 -6.20265e-03 2.307e+01 2.307e+01 9.8e-01 3.6e-03 1.5e+01 3.5e+00
4 -5.92380e-03 2.307e+01 2.307e+01 9.8e-01 9.4e-04 1.8e+01 4.7e+00
5 -6.20474e-03 2.307e+01 2.307e+01 9.8e-01 2.4e-04 2.0e+01 5.8e+00
6 -6.14411e-03 2.307e+01 2.307e+01 9.8e-01 8.8e-05 2.2e+01 6.9e+00
7 -6.14930e-03 2.307e+01 2.307e+01 9.8e-01 3.6e-05 2.4e+01 8.1e+00
8 -6.14063e-03 2.307e+01 2.307e+01 9.8e-01 1.6e-05 2.6e+01 9.3e+00
9 -6.13784e-03 2.307e+01 2.307e+01 9.8e-01 6.2e-06 2.7e+01 1.1e+01
10 -6.13693e-03 2.307e+01 2.307e+01 9.8e-01 2.3e-06 2.8e+01 1.2e+01
11 -6.13683e-03 2.307e+01 2.307e+01 9.8e-01 8.9e-07 3.0e+01 1.3e+01
LSQR finished
The least-squares solution is good enough, given atol
istop = 2 r1norm = 2.3e+01 anorm = 3.0e+01 arnorm = 6.1e-04
itn = 11 r2norm = 2.3e+01 acond = 1.3e+01 xnorm = 4.7e-01
Mean Error of Estimated Rotations¶
ASPIRE has the built-in utility function, mean_aligned_angular_distance
, which globally
aligns the estimated rotations to the true rotations and computes the mean
angular distance (in degrees).
from aspire.utils import mean_aligned_angular_distance
# Compare with known true rotations
mean_ang_dist = mean_aligned_angular_distance(est_rotations, true_rotations)
print(f"Mean aligned angular distance: {mean_ang_dist} degrees")
Mean aligned angular distance: 1.9023730754852295 degrees
Volume Reconstruction¶
Now that we have our class averages and rotation estimates, we can estimate the mean volume by supplying the class averages and basis for back projection.
from aspire.reconstruction import MeanEstimator
# Setup an estimator to perform the back projection.
estimator = MeanEstimator(oriented_src)
# Perform the estimation and save the volume.
estimated_volume = estimator.estimate()
Comparison of Estimated Volume with Source Volume¶
To get a visual confirmation that our results are sane, we rotate the estimated volume by the estimated rotations and project along the z-axis. These estimated projections should align with the original projection images.
# Get the first 10 projections from the estimated volume using the
# estimated orientations. Recall that ``project`` returns an
# ``Image`` instance, which we can peek at with ``show``.
projections_est = estimated_volume.project(est_rotations[0:10])
# We view the first 10 projections of the estimated volume.
projections_est.show()

# For comparison, we view the first 10 source projections.
src.projections[0:10].show()

Fourier Shell Correlation¶
Additionally, we can compare our reconstruction to the known source volume
by performing a Fourier shell correlation (FSC). We first find a rotation
matrix which best aligns the estimated rotations to the ground truth rotations
using the find_registration
method. We then use that rotation to align
the reconstructed volume to the ground truth volume.
# `find_registration` returns the best aligning rotation, `Q`, as well as
# a `flag` which indicates if the volume needs to be reflected.
Q, flag = Rotation(est_rotations).find_registration(true_rotations)
aligned_vol = estimated_volume
if flag == 1:
aligned_vol = aligned_vol.flip()
aligned_vol = aligned_vol.rotate(Rotation(Q.T))
# Compute the FSC.
vol_ds.fsc(aligned_vol, cutoff=0.143, plot=True)

(array([15.07500038]), array([[0.9932882 , 0.9935612 , 0.9805665 , 0.9837297 , 0.98384166,
0.9861812 , 0.9872117 , 0.9891384 , 0.9894551 , 0.9906447 ,
0.99165976, 0.99161446, 0.99088407, 0.9889242 , 0.98686516,
0.9816125 , 0.970167 , 0.9455031 , 0.9030994 , 0.85690296,
0.8462188 , 0.8760401 , 0.8963849 , 0.89977264, 0.89481854,
0.86362785, 0.80934006, 0.7319778 , 0.69343716, 0.7151937 ,
0.71565497, 0.5008745 ]], dtype=float32))
Total running time of the script: (6 minutes 21.143 seconds)