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()
pipeline demo
# with no noise corruption
src.clean_images[0:10].show()
pipeline demo
# with noise and CTF corruption
src.images[0:10].show()
pipeline demo

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()
pipeline demo

CTF Correction

We apply phase_flip() to correct for CTF effects.

src = src.phase_flip()
src.images[:10].show()
pipeline demo

Normalize Background

We apply normalize_background() to prepare the image class averaging.

src = src.normalize_background()
src.images[:10].show()
pipeline demo

Noise Whitening

We apply whiten() to estimate and whiten the noise.

src = src.whiten()
src.images[:10].show()
pipeline demo
  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()
pipeline demo
# 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()
pipeline demo

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()
pipeline demo
# For comparison, we view the first 10 source projections.
src.projections[0:10].show()
pipeline demo

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)
Fourier Shell Correlation
(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)

Gallery generated by Sphinx-Gallery