This notebook contains material from PyRosetta; content is available on Github.

Part I: Parallelized Global Ligand Docking with pyrosetta.distributed

Warning: This notebook uses pyrosetta.distributed.viewer code, which runs in jupyter notebook and might not run if you're using jupyterlab.

Note: This Jupyter notebook uses parallelization and is not meant to be executed within a Google Colab environment.

Note: This Jupyter notebook requires the PyRosetta distributed layer which is obtained by building PyRosetta with the --serialization flag or installing PyRosetta from the RosettaCommons conda channel

Please see the setup instructions in Chapter 16.00

In [1]:
import logging
logging.basicConfig(level=logging.INFO)
import json
import matplotlib
import matplotlib.pyplot as plt
%matplotlib inline
import numpy as np
import os
import pandas as pd
import pyrosetta
import pyrosetta.distributed.dask
import pyrosetta.distributed.io as io
import pyrosetta.distributed.packed_pose as packed_pose
import pyrosetta.distributed.tasks.rosetta_scripts as rosetta_scripts
import pyrosetta.distributed.tasks.score as score
import pyrosetta.distributed.viewer as viewer
import seaborn
seaborn.set()
import sys

from dask_jobqueue import SLURMCluster
from dask.distributed import Client, progress, as_completed
from IPython import display

if 'google.colab' in sys.modules:
    print("This Jupyter notebook uses parallelization and is therefore not set up for the Google Colab environment.")
    sys.exit(0)

Setup PyRosetta command line flags:

In [2]:
ligand_params = "inputs/TPA.am1-bcc.fa.params"
flags = f"""
-extra_res_fa {ligand_params}
-ignore_unrecognized_res 1
-out:level 200
"""
pyrosetta.distributed.init(flags)
INFO:pyrosetta.distributed:maybe_init performing pyrosetta initialization: {'extra_options': '-extra_res_fa inputs/TPA.am1-bcc.fa.params -ignore_unrecognized_res 1 -out:level 200', 'silent': True}
INFO:pyrosetta.rosetta:Found rosetta database at: /home/klimaj/anaconda3/envs/PyRosetta.notebooks/lib/python3.7/site-packages/pyrosetta/database; using it....
INFO:pyrosetta.rosetta:PyRosetta-4 2020 [Rosetta PyRosetta4.conda.linux.CentOS.python37.Release 2020.02+release.22ef835b4a2647af94fcd6421a85720f07eddf12 2020-01-05T17:31:56] retrieved from: http://www.pyrosetta.org
(C) Copyright Rosetta Commons Member Institutions. Created in JHU by Sergey Lyskov and PyRosetta Team.

Setup dask workers to run ligand docking simulations:

In [3]:
if not os.getenv("DEBUG"):
    scratch_dir = os.path.join("/net/scratch", os.environ["USER"]) # Change to your scratch directory
    cluster = SLURMCluster(cores=1,
                           processes=1,
                           job_cpu=1,
                           memory="3GB",
                           queue="short",
                           walltime="02:59:00",
                           local_directory=scratch_dir,
                           job_extra=["-o {}".format(os.path.join(scratch_dir, "slurm-%j.out"))],
                           extra=pyrosetta.distributed.dask.worker_extra(init_flags=flags))
    n_workers = 20
    cluster.scale(n_workers)
    client = Client(cluster)
else:
    cluster, client = None, None
In [4]:
client
Out[4]:

Client

Cluster

  • Workers: 0
  • Cores: 0
  • Memory: 0 B

Setup global ligand docking RosettaScripts protocol within pyrosetta.distributed:

In [5]:
xml = """
<ROSETTASCRIPTS>
  <SCOREFXNS>
    <ScoreFunction name="fa_standard" weights="ref2015.wts"/>
  </SCOREFXNS>
  <RESIDUE_SELECTORS>
    <Chain name="chX" chains="X"/>
  </RESIDUE_SELECTORS>
  <SIMPLE_METRICS>
    <RMSDMetric name="rmsd_chX" residue_selector="chX" reference_name="store_native" residue_selector_ref="chX" robust="true" rmsd_type="rmsd_all" />
  </SIMPLE_METRICS>
  <SCORINGGRIDS ligand_chain="X" width="25">
    <ClassicGrid grid_name="vdw" weight="1.0"/>
  </SCORINGGRIDS>
  <LIGAND_AREAS>
    <LigandArea name="docking_sidechain_X" chain="X" cutoff="6.0" add_nbr_radius="true" all_atom_mode="true" minimize_ligand="10"/>
    <LigandArea name="final_sidechain_X" chain="X" cutoff="6.0" add_nbr_radius="true" all_atom_mode="true"/>
    <LigandArea name="final_backbone_X" chain="X" cutoff="7.0" add_nbr_radius="false" all_atom_mode="true" Calpha_restraints="0.3"/>
  </LIGAND_AREAS>
  <INTERFACE_BUILDERS>
    <InterfaceBuilder name="side_chain_for_docking" ligand_areas="docking_sidechain_X"/>
    <InterfaceBuilder name="side_chain_for_final" ligand_areas="final_sidechain_X"/>
    <InterfaceBuilder name="backbone" ligand_areas="final_backbone_X" extension_window="3"/>
  </INTERFACE_BUILDERS>
  <MOVEMAP_BUILDERS>
    <MoveMapBuilder name="docking" sc_interface="side_chain_for_docking" minimize_water="true"/>
    <MoveMapBuilder name="final" sc_interface="side_chain_for_final" bb_interface="backbone" minimize_water="true"/>
  </MOVEMAP_BUILDERS>
  <MOVERS>
    <SavePoseMover name="spm" restore_pose="0" reference_name="store_native"/>
    <Transform name="transform" chain="X" box_size="20.0" move_distance="10" angle="360" initial_perturb="2" cycles="500" repeats="5" temperature="1000"/>
    <HighResDocker name="high_res_docker" cycles="9" repack_every_Nth="3" scorefxn="fa_standard" movemap_builder="docking"/>
    <FinalMinimizer name="final" scorefxn="fa_standard" movemap_builder="final"/>
  </MOVERS>
  <FILTERS>
      <LigInterfaceEnergy name="interfE" scorefxn="fa_standard" energy_cutoff="0.0" confidence="0"/>
      <SimpleMetricFilter name="rmsd_chX" metric="rmsd_chX" cutoff="999999." comparison_type="lt" confidence="0"/>
  </FILTERS>
  <PROTOCOLS>
    <Add mover="spm"/>
    <Add mover="transform"/>
    <Add mover="high_res_docker"/>
    <Add mover="final"/>
    <Add filter="interfE"/>
    <Add filter="rmsd_chX"/>
  </PROTOCOLS>
</ROSETTASCRIPTS>
"""
xml_obj = rosetta_scripts.SingleoutputRosettaScriptsTask(xml)
xml_obj.setup()

Setup input pose as PackedPose object:

In [6]:
pose_obj = io.pose_from_file(filename="inputs/test_lig.pdb")

Submit 100 global ligand docking trajectories, very similar to using command line -nstruct flag:

In [7]:
if not os.getenv("DEBUG"):
    futures = [client.submit(xml_obj, pose_obj) for i in range(100)]
    results = [future.result() for future in futures]

As results accumulate, you may wish to keep an eye on the progress bar in the dask dashboard.

The called future.result() transfers the PackedPose objects back to this Jupyter session, so we can inspect the scores in memory!

In [8]:
if not os.getenv("DEBUG"):
    df = pd.DataFrame.from_records(packed_pose.to_dict(results))
else:
    df = pd.DataFrame()
df.head(10)
Out[8]:
interfE rmsd_chX fa_atr fa_rep fa_sol fa_intra_rep fa_intra_sol_xover4 lk_ball_wtd fa_elec pro_close ... hbond_sc dslf_fa13 omega fa_dun p_aa_pp yhh_planarity ref rama_prepro total_score pickled_pose
0 -4.310011 10.997455 -2130.421364 1372.830226 1342.091523 1567.159132 92.416371 -46.938660 -480.843762 73.297583 ... -20.281951 0.0 18.053992 2857.865936 -84.797614 0.888190 81.74634 121.092490 1519.496943 gANjcHlyb3NldHRhLnJvc2V0dGEuY29yZS5wb3NlClBvc2...
1 -8.195594 3.577211 -2135.910044 1318.839250 1335.130959 1547.841577 89.528559 -46.535040 -494.360305 112.373971 ... -26.992728 0.0 35.874193 2796.785539 -82.061873 0.459685 81.74634 121.579602 1464.965851 gANjcHlyb3NldHRhLnJvc2V0dGEuY29yZS5wb3NlClBvc2...
2 -11.780600 10.575939 -2108.091527 1427.892584 1315.435127 1569.009467 91.189021 -47.187082 -477.396443 73.368136 ... -20.403877 0.0 9.313265 2937.585191 -82.630985 0.182146 81.74634 122.942322 1598.446543 gANjcHlyb3NldHRhLnJvc2V0dGEuY29yZS5wb3NlClBvc2...
3 -0.488049 10.196235 -2133.253857 1308.852951 1330.667092 1569.550466 90.640954 -48.087869 -487.683161 90.501048 ... -26.772007 0.0 16.721523 2877.101694 -81.773872 0.768894 81.74634 118.714493 1486.058971 gANjcHlyb3NldHRhLnJvc2V0dGEuY29yZS5wb3NlClBvc2...
4 -9.646654 8.200747 -2141.088456 1355.053989 1350.135926 1555.036380 95.491082 -49.469960 -495.744410 112.964123 ... -24.894757 0.0 24.439469 2848.390589 -84.245172 0.653257 81.74634 122.317473 1527.550166 gANjcHlyb3NldHRhLnJvc2V0dGEuY29yZS5wb3NlClBvc2...
5 -28.049520 0.410507 -2139.844163 1340.995350 1340.559376 1486.966604 90.701248 -49.300368 -512.861177 92.580508 ... -27.259618 0.0 28.276716 2812.418716 -83.225966 0.577041 81.74634 119.882265 1436.749142 gANjcHlyb3NldHRhLnJvc2V0dGEuY29yZS5wb3NlClBvc2...
6 -5.690134 7.620458 -2130.595116 1354.924302 1334.472949 1557.508418 91.275502 -50.127856 -501.494557 90.156339 ... -22.113947 0.0 20.892161 2836.642389 -80.592124 0.408904 81.74634 122.775680 1480.337855 gANjcHlyb3NldHRhLnJvc2V0dGEuY29yZS5wb3NlClBvc2...
7 14.108461 10.286517 -2126.883065 1448.345060 1340.929737 1557.858541 91.888944 -50.352979 -473.366614 100.846834 ... -17.972557 0.0 12.739968 2954.099768 -81.498249 0.318019 81.74634 126.208785 1672.480828 gANjcHlyb3NldHRhLnJvc2V0dGEuY29yZS5wb3NlClBvc2...
8 7.068296 12.266051 -2120.110236 1440.787969 1334.509376 1561.362908 88.834847 -46.673847 -472.052175 73.222180 ... -21.723378 0.0 11.727213 2931.140423 -84.009779 0.881952 81.74634 124.730197 1613.066484 gANjcHlyb3NldHRhLnJvc2V0dGEuY29yZS5wb3NlClBvc2...
9 -16.541498 4.480207 -2138.568676 1526.769708 1334.117940 1558.405903 91.668703 -50.730091 -478.995700 90.225311 ... -23.088410 0.0 19.319679 2872.540493 -83.013527 0.145924 81.74634 121.200031 1613.064400 gANjcHlyb3NldHRhLnJvc2V0dGEuY29yZS5wb3NlClBvc2...

10 rows × 23 columns

Now plot the ligand binding energy landscape:

In [9]:
if not os.getenv("DEBUG"):
    matplotlib.rcParams['figure.figsize'] = [12.0, 8.0]
    seaborn.scatterplot(x="rmsd_chX", y="interfE", data=df)

Let's look at the lowest energy model according to interfE!

In [10]:
if not os.getenv("DEBUG"):
    lowest_energy_df = df["interfE"].sort_values()
    lowest_energy_index = lowest_energy_df.index[-1]
    lowest_energy_pose = results[lowest_energy_index]

    view = viewer.init(lowest_energy_pose)
    view.add(viewer.setStyle())
    view.add(viewer.setStyle(command=({"hetflag": True}, {"stick": {"colorscheme": "brownCarbon", "radius": 0.2}})))
    view.add(viewer.setHydrogenBonds())
    view.add(viewer.setZoomTo(residue_selector=pyrosetta.rosetta.core.select.residue_selector.ChainSelector("X")))
    view()

You appear to be running in JupyterLab (or JavaScript failed to load for some other reason). You need to install the 3dmol extension:
jupyter labextension install jupyterlab_3dmol

View the five lowest energy poses according to interfE:

In [11]:
if not os.getenv("DEBUG"):
    lowest_energy_poses = list(packed_pose.dict_to_pose(df.sort_values(by="interfE").head(5).to_dict()).values())
    view = viewer.init(lowest_energy_poses)
    view.add(viewer.setStyle())
    view.add(viewer.setStyle(command=({"hetflag": True}, {"stick": {"colorscheme": "brownCarbon", "radius": 0.2}})))
    view.add(viewer.setHydrogenBonds())
    view.add(viewer.setZoomTo(residue_selector=pyrosetta.rosetta.core.select.residue_selector.ChainSelector("X")))
    view()

If you wish to save any PackedPose objects as .pdb files:

In [ ]:
# for i, p in enumerate(results):
#     with open("outputs/RESULT_%i.pdb" % i, "w") as f:
#         f.write(io.to_pdbstring(p))

If you wish to save a scorefile:

In [ ]:
# with open(os.path.join("outputs", "ligand_docking_scores.fasc"), "w") as f:
#     for result in results:
#         json.dump(result.scores, f)

Part II: Parallelized Global Ligand Docking with dask.distributed.as_completed and pyrosetta.distributed

Example using dask.distributed.as_completed() function:

"Give me at least 5 global ligand docks where the ligand RMSD is at least 0.4 Angstroms from the input ligand coordinates.":

In [20]:
from IPython import display
import matplotlib.pyplot as plt
if not os.getenv("DEBUG"):
    with seaborn.color_palette("Blues_d", n_colors=1):
        nstruct = n_workers
        futures = [client.submit(xml_obj, pose_obj) for j in range(nstruct)]
        seq = as_completed(futures, with_results=True)

        results = []
        for i, (future, result) in enumerate(seq, start=1):

            # Update dataset
            results.append(result)
            df = pd.DataFrame.from_records(packed_pose.to_dict(results))
            lowest_rmsd_chX = df["rmsd_chX"].sort_values().values[0]

            # Update display
            display.clear_output(wait=True)
            print(f"After {i} dock(s), the lowest rmsd_chX is {lowest_rmsd_chX}")
            seaborn.scatterplot(x="rmsd_chX", y="interfE", data=df)
            display.display(plt.gcf())

            # Submit more futures if condition is not met
            if (i >= nstruct) and (not lowest_rmsd_chX <= 0.4):
                nstruct += n_workers
                for j in range(n_workers):
                    seq.add(client.submit(xml_obj, pose_obj))
else:
    df = pd.DataFrame()
After 160 dock(s), the lowest rmsd_chX is 0.39600881934165955

View resulting scores in the order they completed:

In [21]:
df
Out[21]:
dslf_fa13 fa_atr fa_dun fa_elec fa_intra_rep fa_intra_sol_xover4 fa_rep fa_sol hbond_bb_sc hbond_lr_bb ... lk_ball_wtd omega p_aa_pp pickled_pose pro_close rama_prepro ref rmsd_chX total_score yhh_planarity
0 0.0 -2109.618677 2987.532787 -460.804889 1559.392664 89.338830 1458.616496 1311.399444 -44.488264 -47.474618 ... -47.848602 2.151970 -82.041905 gANjcHlyb3NldHRhLnJvc2V0dGEuY29yZS5wb3NlClBvc2... 77.684772 126.412105 81.74634 14.902432 1671.067996 0.001560
1 0.0 -2105.305311 3030.807182 -473.205698 1565.130192 88.835417 1466.777358 1306.459782 -44.193357 -47.478300 ... -47.121203 2.086357 -83.405589 gANjcHlyb3NldHRhLnJvc2V0dGEuY29yZS5wb3NlClBvc2... 107.356720 125.158339 81.74634 13.538095 1727.336287 0.034064
2 0.0 -2091.360701 2920.175148 -458.826812 1549.394863 89.453679 1414.442840 1290.735470 -43.107482 -48.027345 ... -45.137232 3.902656 -85.342361 gANjcHlyb3NldHRhLnJvc2V0dGEuY29yZS5wb3NlClBvc2... 60.624014 125.865720 81.74634 14.128614 1577.831018 0.003817
3 0.0 -2112.834614 3042.513417 -473.404657 1571.410352 91.188546 1438.914976 1316.596837 -46.476363 -48.967521 ... -45.276509 0.378058 -84.547864 gANjcHlyb3NldHRhLnJvc2V0dGEuY29yZS5wb3NlClBvc2... 90.257290 116.533949 81.74634 11.305335 1695.618878 0.317765
4 0.0 -2109.328779 2972.604335 -465.324664 1566.721694 90.843550 1464.755765 1309.718084 -45.480755 -48.664992 ... -48.883264 2.703349 -81.230578 gANjcHlyb3NldHRhLnJvc2V0dGEuY29yZS5wb3NlClBvc2... 69.661009 127.680286 81.74634 12.924160 1646.933591 0.568650
5 0.0 -2105.875106 3005.359107 -469.423503 1566.750444 90.932732 1431.706080 1307.627006 -46.425932 -47.498704 ... -49.178075 1.584126 -81.226150 gANjcHlyb3NldHRhLnJvc2V0dGEuY29yZS5wb3NlClBvc2... 73.785812 116.678258 81.74634 13.518868 1646.780415 0.318403
6 0.0 -2098.265444 2999.853778 -480.017785 1566.494637 91.157908 1434.674832 1305.641416 -47.730424 -47.898621 ... -46.782256 3.223878 -83.081812 gANjcHlyb3NldHRhLnJvc2V0dGEuY29yZS5wb3NlClBvc2... 73.755589 117.291586 81.74634 12.783246 1641.040765 0.432204
7 0.0 -2110.698465 2869.381021 -460.049169 1567.186498 92.688303 1441.397298 1310.055850 -45.114707 -48.420000 ... -46.953026 1.985867 -82.933240 gANjcHlyb3NldHRhLnJvc2V0dGEuY29yZS5wb3NlClBvc2... 68.282715 117.970601 81.74634 16.523289 1562.130649 0.005626
8 0.0 -2112.557027 3006.368632 -482.342878 1583.026679 91.840579 1435.416531 1325.239038 -46.112840 -47.094844 ... -47.120504 4.112792 -81.840670 gANjcHlyb3NldHRhLnJvc2V0dGEuY29yZS5wb3NlClBvc2... 73.961269 118.710661 81.74634 18.389835 1651.309911 0.525410
9 0.0 -2140.951789 2815.279697 -499.213543 1492.173947 91.568987 1395.512136 1341.710954 -49.993331 -48.131888 ... -47.493369 14.691859 -79.592624 gANjcHlyb3NldHRhLnJvc2V0dGEuY29yZS5wb3NlClBvc2... 112.802109 121.506811 81.74634 3.046977 1509.839941 0.175492
10 0.0 -2125.202418 2899.647079 -490.601152 1577.842337 94.088460 1364.360645 1321.908084 -48.402136 -48.807028 ... -52.663667 11.696737 -83.983555 gANjcHlyb3NldHRhLnJvc2V0dGEuY29yZS5wb3NlClBvc2... 91.684185 117.754046 81.74634 4.803723 1528.784703 0.579358
11 0.0 -2155.349982 2866.573512 -499.250685 1564.640648 93.248657 1372.809050 1366.323752 -52.773522 -48.771073 ... -45.402964 12.095227 -81.154449 gANjcHlyb3NldHRhLnJvc2V0dGEuY29yZS5wb3NlClBvc2... 113.188497 120.657288 81.74634 4.438206 1543.729105 0.273438
12 0.0 -2143.695576 2870.783085 -508.316996 1553.961034 91.311421 1333.413117 1345.722553 -51.085523 -50.438284 ... -49.633188 19.001951 -85.718842 gANjcHlyb3NldHRhLnJvc2V0dGEuY29yZS5wb3NlClBvc2... 91.863679 109.427641 81.74634 0.571745 1470.210182 0.712728
13 0.0 -2138.760325 2883.528075 -507.675106 1555.302304 91.425703 1342.506043 1346.710152 -52.357046 -50.791051 ... -47.232543 20.972475 -85.407315 gANjcHlyb3NldHRhLnJvc2V0dGEuY29yZS5wb3NlClBvc2... 91.121341 117.044811 81.74634 0.458164 1492.028097 0.265234
14 0.0 -2141.493998 2875.760396 -507.733081 1554.016971 90.550086 1358.862737 1346.042027 -52.412001 -48.918483 ... -47.661767 18.668030 -84.522635 gANjcHlyb3NldHRhLnJvc2V0dGEuY29yZS5wb3NlClBvc2... 92.281822 110.266770 81.74634 0.523277 1491.822023 0.559944
15 0.0 -2134.853320 2891.884801 -500.087096 1561.372403 95.831907 1397.209219 1347.606185 -50.128969 -48.672139 ... -50.227723 9.610174 -81.519870 gANjcHlyb3NldHRhLnJvc2V0dGEuY29yZS5wb3NlClBvc2... 113.027827 128.181629 81.74634 7.744215 1578.898789 0.234016
16 0.0 -2130.427648 2881.176233 -496.131231 1570.843354 91.898012 1339.781289 1337.382302 -45.748851 -48.195453 ... -47.484841 7.367173 -86.249748 gANjcHlyb3NldHRhLnJvc2V0dGEuY29yZS5wb3NlClBvc2... 89.905552 105.720056 81.74634 9.534376 1493.788142 0.458969
17 0.0 -2143.602814 2822.606888 -516.117864 1553.945026 90.813275 1349.433735 1347.903526 -52.802795 -49.483066 ... -48.694123 15.371134 -84.446278 gANjcHlyb3NldHRhLnJvc2V0dGEuY29yZS5wb3NlClBvc2... 91.337428 115.291089 81.74634 0.551091 1436.930209 0.516437
18 0.0 -2134.259123 2881.342369 -485.592146 1564.430338 92.438196 1389.168657 1339.053392 -45.521617 -48.479279 ... -49.904600 9.005801 -83.414992 gANjcHlyb3NldHRhLnJvc2V0dGEuY29yZS5wb3NlClBvc2... 91.612744 118.626644 81.74634 8.627629 1545.765237 0.477236
19 0.0 -2126.636797 2841.377136 -477.699566 1546.361526 88.201996 1359.387637 1331.322346 -49.295576 -47.120713 ... -46.866553 2.950709 -85.684841 gANjcHlyb3NldHRhLnJvc2V0dGEuY29yZS5wb3NlClBvc2... 83.539327 116.446194 81.74634 9.911260 1496.631196 0.358909
20 0.0 -2099.876577 3053.322166 -459.911551 1561.670084 89.250294 1487.101282 1300.466035 -44.590540 -47.492736 ... -48.152031 2.074202 -79.725613 gANjcHlyb3NldHRhLnJvc2V0dGEuY29yZS5wb3NlClBvc2... 112.613937 128.147025 81.74634 18.609829 1781.341725 0.000542
21 0.0 -2104.857879 2967.536299 -475.225631 1547.768357 89.805057 1401.763081 1310.761519 -44.628433 -48.130686 ... -46.436055 6.419433 -82.970515 gANjcHlyb3NldHRhLnJvc2V0dGEuY29yZS5wb3NlClBvc2... 75.474255 124.365157 81.74634 13.007985 1611.021294 0.000835
22 0.0 -2109.173324 2977.394968 -473.401098 1552.688648 88.579277 1470.842003 1306.794087 -45.728224 -47.767174 ... -47.948895 4.079821 -83.241786 gANjcHlyb3NldHRhLnJvc2V0dGEuY29yZS5wb3NlClBvc2... 91.383545 124.787573 81.74634 13.712020 1664.879856 0.000420
23 0.0 -2101.393052 2971.352950 -464.045810 1573.502264 90.905007 1410.055449 1303.956990 -42.918329 -47.492736 ... -46.786348 1.875207 -81.089453 gANjcHlyb3NldHRhLnJvc2V0dGEuY29yZS5wb3NlClBvc2... 112.708610 123.976339 81.74634 22.744999 1675.195354 0.000087
24 0.0 -2105.652440 2956.671354 -474.040724 1556.543667 91.855892 1427.450697 1304.386599 -45.245211 -48.259940 ... -48.943641 2.931243 -79.980137 gANjcHlyb3NldHRhLnJvc2V0dGEuY29yZS5wb3NlClBvc2... 89.802055 119.134186 81.74634 13.405077 1623.914808 0.248590
25 0.0 -2085.413680 2929.150908 -465.750461 1480.795379 90.009520 1436.627226 1285.343302 -44.190242 -48.220168 ... -48.951817 1.052240 -85.199877 gANjcHlyb3NldHRhLnJvc2V0dGEuY29yZS5wb3NlClBvc2... 115.206491 119.984651 81.74634 13.476092 1650.659776 0.012628
26 0.0 -2101.628661 2971.976524 -474.411807 1566.467597 90.489791 1399.767634 1312.757199 -44.722650 -47.365084 ... -45.263438 3.017197 -83.739637 gANjcHlyb3NldHRhLnJvc2V0dGEuY29yZS5wb3NlClBvc2... 73.968443 113.443861 81.74634 14.559041 1612.857007 0.411724
27 0.0 -2118.643816 2996.024222 -489.979578 1570.581483 91.765952 1420.675262 1327.652560 -47.387580 -47.044725 ... -48.976915 2.541301 -81.951286 gANjcHlyb3NldHRhLnJvc2V0dGEuY29yZS5wb3NlClBvc2... 90.022492 115.867676 81.74634 10.867241 1637.750748 0.349443
28 0.0 -2107.079858 3003.622174 -490.472694 1563.475816 89.961561 1433.007813 1316.154141 -45.870439 -47.509188 ... -45.673606 -0.025740 -81.813110 gANjcHlyb3NldHRhLnJvc2V0dGEuY29yZS5wb3NlClBvc2... 74.074750 116.513346 81.74634 14.340094 1631.802149 0.500080
29 0.0 -2126.522938 3034.914502 -464.312573 1586.979586 91.633191 1430.301992 1329.961156 -46.781839 -47.583167 ... -51.084924 1.860717 -83.669307 gANjcHlyb3NldHRhLnJvc2V0dGEuY29yZS5wb3NlClBvc2... 89.410144 121.510983 81.74634 11.965659 1697.051010 0.129238
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
130 0.0 -2144.247767 2874.821828 -486.237434 1562.937353 92.504753 1395.042099 1356.419704 -49.583866 -52.326697 ... -51.688019 7.829886 -86.784765 gANjcHlyb3NldHRhLnJvc2V0dGEuY29yZS5wb3NlClBvc2... 112.776218 108.666837 81.74634 7.510662 1561.287190 0.211556
131 0.0 -2108.623761 3015.873114 -470.283459 1568.464078 92.700884 1455.075332 1310.351722 -47.000685 -47.495473 ... -46.902628 3.249567 -82.596549 gANjcHlyb3NldHRhLnJvc2V0dGEuY29yZS5wb3NlClBvc2... 91.245910 128.104097 81.74634 13.882904 1695.773877 0.008729
132 0.0 -2147.331578 2802.445830 -478.452413 1487.326846 93.919518 1395.653006 1355.038940 -49.448565 -48.912378 ... -48.656269 16.500387 -86.895370 gANjcHlyb3NldHRhLnJvc2V0dGEuY29yZS5wb3NlClBvc2... 112.768683 109.321224 81.74634 7.420938 1525.656662 0.249148
133 0.0 -2106.255520 2934.031255 -482.577483 1563.100271 92.230946 1399.849826 1319.494447 -45.299200 -47.533875 ... -49.679166 5.361302 -81.586007 gANjcHlyb3NldHRhLnJvc2V0dGEuY29yZS5wb3NlClBvc2... 71.868096 115.843937 81.74634 15.196031 1575.959519 0.519367
134 0.0 -2122.192139 2854.128944 -486.235476 1558.704520 89.695543 1332.781739 1330.520349 -49.524705 -47.519634 ... -49.932088 7.083149 -80.914587 gANjcHlyb3NldHRhLnJvc2V0dGEuY29yZS5wb3NlClBvc2... 89.907381 113.516248 81.74634 10.152369 1489.767849 0.425513
135 0.0 -2137.693008 2880.027282 -514.322799 1554.171866 90.760142 1340.874379 1344.047156 -53.767339 -48.577084 ... -46.736234 16.448148 -84.167860 gANjcHlyb3NldHRhLnJvc2V0dGEuY29yZS5wb3NlClBvc2... 91.114415 111.377747 81.74634 0.489456 1475.288892 0.221439
136 0.0 -2126.182610 2873.203731 -484.996225 1561.493325 90.799041 1404.717419 1333.117035 -45.096734 -48.530084 ... -49.044955 9.338754 -83.552379 gANjcHlyb3NldHRhLnJvc2V0dGEuY29yZS5wb3NlClBvc2... 112.961193 118.683174 81.74634 8.992439 1575.451840 0.611699
137 0.0 -2126.969328 2852.784259 -492.551061 1560.839514 91.486683 1366.953229 1337.166167 -46.348315 -48.135581 ... -48.719557 5.676320 -82.403045 gANjcHlyb3NldHRhLnJvc2V0dGEuY29yZS5wb3NlClBvc2... 74.124990 112.917160 81.74634 6.333091 1477.084582 0.328078
138 0.0 -2143.665896 2860.508577 -517.304266 1556.332351 91.097130 1337.176240 1348.637250 -51.219139 -50.750459 ... -47.329610 15.380754 -83.311322 gANjcHlyb3NldHRhLnJvc2V0dGEuY29yZS5wb3NlClBvc2... 90.375868 114.521055 81.74634 0.517323 1453.565034 0.419099
139 0.0 -2133.792450 2801.508040 -479.126763 1573.261299 90.875984 1331.229444 1330.838429 -47.463442 -48.296040 ... -49.620461 7.701313 -79.752192 gANjcHlyb3NldHRhLnJvc2V0dGEuY29yZS5wb3NlClBvc2... 112.891746 120.483307 81.74634 6.601025 1476.895986 0.235007
140 0.0 -2090.957259 2928.147676 -461.303731 1523.715187 89.506157 1403.598636 1283.312769 -43.544720 -47.758117 ... -48.872491 2.065291 -82.291367 gANjcHlyb3NldHRhLnJvc2V0dGEuY29yZS5wb3NlClBvc2... 115.206491 124.390576 81.74634 15.595661 1639.266849 0.014259
141 0.0 -2110.032023 3006.100929 -489.555266 1560.462360 90.682503 1450.398007 1317.864595 -47.006041 -47.844067 ... -48.013885 2.084970 -80.596617 gANjcHlyb3NldHRhLnJvc2V0dGEuY29yZS5wb3NlClBvc2... 90.144134 120.264349 81.74634 12.044857 1661.901465 0.234651
142 0.0 -2113.521394 2999.112155 -472.508995 1554.817132 89.633994 1463.947663 1314.773482 -49.315623 -48.684258 ... -46.441628 7.139928 -83.631649 gANjcHlyb3NldHRhLnJvc2V0dGEuY29yZS5wb3NlClBvc2... 113.083494 126.285954 81.74634 10.216402 1709.817568 0.000746
143 0.0 -2097.005518 2937.948356 -464.917374 1566.558809 95.668453 1432.836943 1304.714259 -47.001855 -47.867360 ... -47.729151 1.091405 -84.224396 gANjcHlyb3NldHRhLnJvc2V0dGEuY29yZS5wb3NlClBvc2... 75.292368 124.678258 81.74634 14.740225 1620.182180 0.038664
144 0.0 -2124.913178 2944.514831 -493.783012 1573.530655 88.989992 1407.598308 1344.928613 -49.961994 -48.568667 ... -44.867162 5.069023 -81.610190 gANjcHlyb3NldHRhLnJvc2V0dGEuY29yZS5wb3NlClBvc2... 73.807503 117.400894 81.74634 11.582264 1579.328288 0.348630
145 0.0 -2130.088561 2870.161785 -489.130122 1492.698308 89.344045 1411.618221 1333.232092 -47.261742 -48.705428 ... -49.300383 8.348099 -84.118442 gANjcHlyb3NldHRhLnJvc2V0dGEuY29yZS5wb3NlClBvc2... 112.378684 109.404614 81.74634 9.134458 1557.512770 0.460359
146 0.0 -2125.127198 2850.554976 -473.968178 1561.440253 91.014990 1382.390972 1330.658495 -46.276677 -48.726469 ... -50.388715 6.165901 -83.264292 gANjcHlyb3NldHRhLnJvc2V0dGEuY29yZS5wb3NlClBvc2... 73.912396 111.071225 81.74634 6.286298 1507.335258 0.416813
147 0.0 -2132.053031 2898.781949 -495.785338 1573.291405 93.740735 1344.445871 1331.943941 -47.832939 -47.929045 ... -48.964468 11.452339 -82.866998 gANjcHlyb3NldHRhLnJvc2V0dGEuY29yZS5wb3NlClBvc2... 74.032834 108.798061 81.74634 10.278420 1490.416464 0.620342
148 0.0 -2139.826448 2841.177077 -484.121259 1548.640063 91.386511 1363.220708 1343.080905 -51.723530 -47.995901 ... -47.802350 12.742675 -81.557880 gANjcHlyb3NldHRhLnJvc2V0dGEuY29yZS5wb3NlClBvc2... 112.866188 121.589212 81.74634 6.045925 1527.918170 0.200723
149 0.0 -2143.382034 2897.265992 -514.952390 1560.487409 91.368863 1343.953646 1348.323361 -51.508157 -50.565540 ... -47.394245 17.041907 -83.387448 gANjcHlyb3NldHRhLnJvc2V0dGEuY29yZS5wb3NlClBvc2... 91.992981 117.487554 81.74634 0.429813 1489.807209 0.382470
150 0.0 -2120.741111 2809.449008 -475.470457 2467.572674 113.563104 1375.959600 1322.874806 -46.658919 -51.433403 ... -52.009173 11.170164 -86.872222 gANjcHlyb3NldHRhLnJvc2V0dGEuY29yZS5wb3NlClBvc2... 115.206491 115.685800 81.74634 6.670057 1541.463355 0.166151
151 0.0 -2136.325178 2884.628860 -513.920456 1559.878870 92.388043 1334.333687 1338.505606 -51.686538 -49.118018 ... -47.821198 15.070663 -84.282077 gANjcHlyb3NldHRhLnJvc2V0dGEuY29yZS5wb3NlClBvc2... 91.376807 112.595560 81.74634 0.632104 1471.135782 0.358777
152 0.0 -2133.797178 2853.978348 -484.145637 1567.668634 91.337656 1322.515770 1332.110312 -48.348268 -49.988059 ... -48.039441 6.949739 -82.454699 gANjcHlyb3NldHRhLnJvc2V0dGEuY29yZS5wb3NlClBvc2... 112.928183 114.040345 81.74634 9.934315 1506.579752 0.236804
153 0.0 -2128.454653 2851.394925 -487.328831 1555.157010 92.242113 1324.665368 1324.336250 -51.016076 -47.300948 ... -48.059293 13.992234 -78.853827 gANjcHlyb3NldHRhLnJvc2V0dGEuY29yZS5wb3NlClBvc2... 112.912418 124.456656 81.74634 5.436119 1508.890703 0.478339
154 0.0 -2139.368330 2936.076321 -483.449818 1550.783879 91.800679 1345.199075 1348.714499 -50.549542 -46.956615 ... -47.609642 4.619060 -80.734718 gANjcHlyb3NldHRhLnJvc2V0dGEuY29yZS5wb3NlClBvc2... 89.821609 118.733501 81.74634 9.639002 1560.839200 0.342402
155 0.0 -2137.555643 2795.451017 -499.644407 1484.424961 91.736192 1402.262453 1343.911470 -49.831555 -47.649349 ... -46.528055 14.005410 -83.143630 gANjcHlyb3NldHRhLnJvc2V0dGEuY29yZS5wb3NlClBvc2... 112.776401 117.556135 81.74634 3.344627 1505.488812 0.149157
156 0.0 -2128.284730 2796.317148 -492.157328 1520.329803 89.342317 1342.262161 1335.670777 -48.167967 -50.223889 ... -48.775716 7.738594 -84.801371 gANjcHlyb3NldHRhLnJvc2V0dGEuY29yZS5wb3NlClBvc2... 78.839587 105.630601 81.74634 8.682234 1418.647669 0.552394
157 0.0 -2147.804722 2850.778752 -514.751781 1549.533153 90.799332 1349.972499 1353.027955 -52.763912 -48.775347 ... -48.102799 15.068571 -83.769684 gANjcHlyb3NldHRhLnJvc2V0dGEuY29yZS5wb3NlClBvc2... 92.271461 112.442378 81.74634 0.396009 1462.094842 0.572291
158 0.0 -2149.813611 2861.453420 -497.179059 1554.640882 91.733647 1343.436391 1365.364092 -49.025013 -48.886184 ... -46.047302 14.037734 -81.954909 gANjcHlyb3NldHRhLnJvc2V0dGEuY29yZS5wb3NlClBvc2... 112.953796 111.888166 81.74634 5.757547 1527.601223 0.190742
159 0.0 -2124.745177 2812.671157 -493.382837 1558.498507 89.970193 1301.256917 1329.799382 -47.415557 -47.226482 ... -45.766534 12.734397 -81.703491 gANjcHlyb3NldHRhLnJvc2V0dGEuY29yZS5wb3NlClBvc2... 90.459127 110.839783 81.74634 8.080812 1441.060819 0.230237

160 rows × 23 columns