Showing
12 changed files
with
1708 additions
and
85 deletions
1 | ############################################################################################ | 1 | ############################################################################################ |
2 | +v 1.6 beta, August 2021 | ||
3 | + | ||
4 | +Aglaé Tabot joins the development team. Khodor Hannoush leaves. | ||
5 | + | ||
6 | +FEATURE CHANGES | ||
7 | + - Distinct options --cmalign-opts and --cmalign-rrna-opts allow to adapt the parameters for LSU and SSU families. | ||
8 | + The LSU and SSU are now aligned with Infernal options '--cpu 10 --mxsize 8192 --mxtau 0.1', which is slow, | ||
9 | + requires up to 100 GB of RAM, and yields a suboptimal alignment (tau=0.1 is quite bad), but is homogenous with the other families. | ||
10 | + - The LSU and SSU therefore have defined cm_coords fields, and therefore distance matrices can be computed. | ||
11 | + - We now provide for download the renumbered (standardised) 3D MMCIF files, the nucleotides being numbered by their "index_chain" in the database. | ||
12 | + - We now provide for download the sequences of the 3D chains aligned by Rfam family (without Rfam sequences, which have been removed). | ||
13 | + - statistics.py now computes histograms and a density estimation with Gaussian mixture models for a large set of geometric parameters, | ||
14 | + measured on the unmapped data at a given resolution threshold. The parameters include: | ||
15 | + * All atom bonded distances and torsion angles | ||
16 | + * Distances, flat angles and torsion angles in the Pyle/VFold model | ||
17 | + * Distances, flat angles and torsion anfles in the HiRE-RNA model | ||
18 | + * Sequence-dependant geometric parameters of the basepairs for all non-canonical basepairs in the HiRE-RNA model. | ||
19 | + The data is saved as JSON files of parameters, and numerous figures are produced to illustrate the distributions. | ||
20 | + The number of gaussians to use in the GMMs are hard-coded in geometric_stats.py after our first estimation. If you do not want to trust this estimation, | ||
21 | + you can ignore it with option --rescan-nmodes. An exploration of the number of Gaussians from 1 to 8 will be performed, and the best GMM will be kept. | ||
22 | + | ||
23 | +BUG CORRECTIONS | ||
24 | + - New code file geometric_stats.py | ||
25 | + - New automation script that starts from scratch | ||
26 | + - Many small fixes | ||
27 | + - Performance tweaks | ||
28 | + | ||
29 | +TECHNICAL CHANGES | ||
30 | + - Switched to DSSR Pro. | ||
31 | + - Switched to esl-alimerge instead of cmalign --merge to merge alignments. | ||
32 | + | ||
33 | +############################################################################################ | ||
2 | v 1.5 beta, April 2021 | 34 | v 1.5 beta, April 2021 |
3 | 35 | ||
4 | FEATURE CHANGES | 36 | FEATURE CHANGES | ... | ... |
1 | MIT License | 1 | MIT License |
2 | 2 | ||
3 | -Copyright (c) 2019 Louis Becquey | 3 | +Copyright (c) 2019-2021 IBISC, Université Paris Saclay |
4 | 4 | ||
5 | Permission is hereby granted, free of charge, to any person obtaining a copy | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy |
6 | of this software and associated documentation files (the "Software"), to deal | 6 | of this software and associated documentation files (the "Software"), to deal | ... | ... |
... | @@ -57,13 +57,14 @@ def trace_unhandled_exceptions(func): | ... | @@ -57,13 +57,14 @@ def trace_unhandled_exceptions(func): |
57 | return func(*args, **kwargs) | 57 | return func(*args, **kwargs) |
58 | except: | 58 | except: |
59 | s = traceback.format_exc() | 59 | s = traceback.format_exc() |
60 | - with open(runDir + "/errors.txt", "a") as f: | 60 | + if not "KeyboardInterrupt" in s: |
61 | - f.write("Exception in "+func.__name__+"\n") | 61 | + with open(runDir + "/errors.txt", "a") as f: |
62 | - f.write(s) | 62 | + f.write("Exception in "+func.__name__+"\n") |
63 | - f.write("\n\n") | 63 | + f.write(s) |
64 | - | 64 | + f.write("\n\n") |
65 | - warn('Exception in '+func.__name__, error=True) | 65 | + |
66 | - print(s) | 66 | + warn('Exception in '+func.__name__, error=True) |
67 | + print(s) | ||
67 | return wrapped_func | 68 | return wrapped_func |
68 | 69 | ||
69 | pd.set_option('display.max_rows', None) | 70 | pd.set_option('display.max_rows', None) |
... | @@ -261,7 +262,7 @@ class Chain: | ... | @@ -261,7 +262,7 @@ class Chain: |
261 | new_s.add(new_model) | 262 | new_s.add(new_model) |
262 | 263 | ||
263 | # renumber this structure (portion of the original) with the index_chain and save it in a cif file | 264 | # renumber this structure (portion of the original) with the index_chain and save it in a cif file |
264 | - t=pdb.Structure.Structure(new_s.get_id()) | 265 | + t = pdb.Structure.Structure(new_s.get_id()) |
265 | for model in new_s: | 266 | for model in new_s: |
266 | new_model_t=pdb.Model.Model(model.get_id()) | 267 | new_model_t=pdb.Model.Model(model.get_id()) |
267 | for chain in model: | 268 | for chain in model: |
... | @@ -288,7 +289,7 @@ class Chain: | ... | @@ -288,7 +289,7 @@ class Chain: |
288 | # particular case 6n5s_1_A, residue 201 in the original cif file (resname = G and HETATM = H_G) | 289 | # particular case 6n5s_1_A, residue 201 in the original cif file (resname = G and HETATM = H_G) |
289 | if nt == 'A' or (nt == 'G' and (self.chain_label != '6n5s_1_A' or resseq != 201)) or nt == 'C' or nt == 'U' or nt in ['DG', 'DU', 'DC', 'DA', 'DI', 'DT' ] or nt == 'N' or nt == 'I' : | 290 | if nt == 'A' or (nt == 'G' and (self.chain_label != '6n5s_1_A' or resseq != 201)) or nt == 'C' or nt == 'U' or nt in ['DG', 'DU', 'DC', 'DA', 'DI', 'DT' ] or nt == 'N' or nt == 'I' : |
290 | res=chain[(' ', resseq, icode_res)] | 291 | res=chain[(' ', resseq, icode_res)] |
291 | - else : #modified nucleotides (e.g. chain 5l4o_1_A) | 292 | + else : # modified nucleotides (e.g. chain 5l4o_1_A) |
292 | het='H_' + nt | 293 | het='H_' + nt |
293 | res=chain[(het, resseq, icode_res)] | 294 | res=chain[(het, resseq, icode_res)] |
294 | res_id=res.get_id() | 295 | res_id=res.get_id() |
... | @@ -1599,7 +1600,7 @@ class Pipeline: | ... | @@ -1599,7 +1600,7 @@ class Pipeline: |
1599 | try: | 1600 | try: |
1600 | fam_pbar = tqdm(total=len(self.fam_list), desc="RNA families", position=0, leave=True) | 1601 | fam_pbar = tqdm(total=len(self.fam_list), desc="RNA families", position=0, leave=True) |
1601 | # Apply work_pssm_remap to each RNA family | 1602 | # Apply work_pssm_remap to each RNA family |
1602 | - for i, _ in enumerate(p.imap_unordered(work_pssm_remap, self.fam_list, chunksize=1)): | 1603 | + for i, _ in enumerate(p.imap_unordered(partial(work_pssm_remap, useSina=pp.USESINA), self.fam_list, chunksize=1)): |
1603 | # Everytime the iteration finishes on a family, update the global progress bar over the RNA families | 1604 | # Everytime the iteration finishes on a family, update the global progress bar over the RNA families |
1604 | fam_pbar.update(1) | 1605 | fam_pbar.update(1) |
1605 | fam_pbar.close() | 1606 | fam_pbar.close() |
... | @@ -1654,7 +1655,7 @@ class Pipeline: | ... | @@ -1654,7 +1655,7 @@ class Pipeline: |
1654 | p = Pool(initializer=init_with_tqdm, initargs=(tqdm.get_lock(),), processes=3) | 1655 | p = Pool(initializer=init_with_tqdm, initargs=(tqdm.get_lock(),), processes=3) |
1655 | try: | 1656 | try: |
1656 | pbar = tqdm(total=len(self.loaded_chains), desc="Saving chains to CSV", position=0, leave=True) | 1657 | pbar = tqdm(total=len(self.loaded_chains), desc="Saving chains to CSV", position=0, leave=True) |
1657 | - for _, _2 in enumerate(p.imap_unordered(work_save, self.loaded_chains)): | 1658 | + for _, _2 in enumerate(p.imap_unordered(partial(work_save, homology=pp.HOMOLOGY), self.loaded_chains)): |
1658 | pbar.update(1) | 1659 | pbar.update(1) |
1659 | pbar.close() | 1660 | pbar.close() |
1660 | p.close() | 1661 | p.close() |
... | @@ -1700,18 +1701,28 @@ class Pipeline: | ... | @@ -1700,18 +1701,28 @@ class Pipeline: |
1700 | if self.ARCHIVE: | 1701 | if self.ARCHIVE: |
1701 | os.makedirs(runDir + "/archive", exist_ok=True) | 1702 | os.makedirs(runDir + "/archive", exist_ok=True) |
1702 | datestr = time.strftime('%Y%m%d') | 1703 | datestr = time.strftime('%Y%m%d') |
1704 | + | ||
1705 | + # The text files | ||
1703 | subprocess.run(["rm", "-f", runDir + f"/archive/RNANET_datapoints_latest.tar.gz"]) | 1706 | subprocess.run(["rm", "-f", runDir + f"/archive/RNANET_datapoints_latest.tar.gz"]) |
1704 | subprocess.run(["tar", "-C", path_to_3D_data + "/datapoints", "-czf", runDir + f"/archive/RNANET_datapoints_{datestr}.tar.gz", "."]) | 1707 | subprocess.run(["tar", "-C", path_to_3D_data + "/datapoints", "-czf", runDir + f"/archive/RNANET_datapoints_{datestr}.tar.gz", "."]) |
1705 | subprocess.run(["ln", "-s", runDir + f"/archive/RNANET_datapoints_{datestr}.tar.gz", runDir + f"/archive/RNANET_datapoints_latest.tar.gz"]) | 1708 | subprocess.run(["ln", "-s", runDir + f"/archive/RNANET_datapoints_{datestr}.tar.gz", runDir + f"/archive/RNANET_datapoints_latest.tar.gz"]) |
1706 | 1709 | ||
1710 | + # The alignments | ||
1707 | if self.HOMOLOGY: | 1711 | if self.HOMOLOGY: |
1708 | - # gather the alignments | ||
1709 | os.makedirs(path_to_seq_data + "realigned/3d_only", exist_ok=True) | 1712 | os.makedirs(path_to_seq_data + "realigned/3d_only", exist_ok=True) |
1710 | for f in os.listdir(path_to_seq_data + "realigned"): | 1713 | for f in os.listdir(path_to_seq_data + "realigned"): |
1711 | if "3d_only.afa" in f: | 1714 | if "3d_only.afa" in f: |
1712 | subprocess.run(["cp", path_to_seq_data + "realigned/" + f, path_to_seq_data + "realigned/3d_only"]) | 1715 | subprocess.run(["cp", path_to_seq_data + "realigned/" + f, path_to_seq_data + "realigned/3d_only"]) |
1713 | - subprocess.run(["rm", "-f", runDir + f"/archive/RNANET_alignments_latest.tar.gz"]) | 1716 | + subprocess.run(["rm", "-f", runDir + f"/archive/RNANET_3dOnlyAlignments_latest.tar.gz"]) |
1714 | - subprocess.run(["tar", "-C", path_to_seq_data + "realigned/3d_only" , "-czf", runDir + f"/archive/RNANET_alignments_latest.tar.gz", "."]) | 1717 | + subprocess.run(["tar", "-C", path_to_seq_data + "realigned/3d_only" , "-czf", runDir + f"/archive/RNANET_3dOnlyAlignments_latest.tar.gz", "."]) |
1718 | + | ||
1719 | + # The 3D files | ||
1720 | + if os.path.isdir(path_to_3D_data + "rna_mapped_to_Rfam"): | ||
1721 | + subprocess.run(["rm", "-f", runDir + f"/archive/RNANET_MMCIFmappedToRfam_latest.tar.gz"]) | ||
1722 | + subprocess.run(["tar", "-C", path_to_3D_data + "rna_mapped_to_Rfam" , "-czf", runDir + f"/archive/RNANET_MMCIFmappedToRfam_latest.tar.gz", "."]) | ||
1723 | + if os.path.isdir(path_to_3D_data + "rna_only"): | ||
1724 | + subprocess.run(["rm", "-f", runDir + f"/archive/RNANET_MMCIFall_latest.tar.gz"]) | ||
1725 | + subprocess.run(["tar", "-C", path_to_3D_data + "rna_only" , "-czf", runDir + f"/archive/RNANET_MMCIFall_latest.tar.gz", "."]) | ||
1715 | 1726 | ||
1716 | def sanitize_database(self): | 1727 | def sanitize_database(self): |
1717 | """Searches for issues in the database and correct them""" | 1728 | """Searches for issues in the database and correct them""" |
... | @@ -1813,7 +1824,7 @@ def warn(message, error=False): | ... | @@ -1813,7 +1824,7 @@ def warn(message, error=False): |
1813 | """ | 1824 | """ |
1814 | # Cut if too long | 1825 | # Cut if too long |
1815 | if len(message) > 66: | 1826 | if len(message) > 66: |
1816 | - x = message.find(' ', 50, 66) | 1827 | + x = message.find(' ', 40, 66) |
1817 | if x != -1: | 1828 | if x != -1: |
1818 | warn(message[:x], error=error) | 1829 | warn(message[:x], error=error) |
1819 | warn(message[x+1:], error=error) | 1830 | warn(message[x+1:], error=error) |
... | @@ -2809,7 +2820,7 @@ def work_save_pydca(f,alignment): | ... | @@ -2809,7 +2820,7 @@ def work_save_pydca(f,alignment): |
2809 | warn(e) | 2820 | warn(e) |
2810 | 2821 | ||
2811 | @trace_unhandled_exceptions | 2822 | @trace_unhandled_exceptions |
2812 | -def work_pssm_remap(f): | 2823 | +def work_pssm_remap(f, useSina=False): |
2813 | """Computes Position-Specific-Scoring-Matrices given the multiple sequence alignment of the RNA family. | 2824 | """Computes Position-Specific-Scoring-Matrices given the multiple sequence alignment of the RNA family. |
2814 | This also remaps the 3D object sequence with the aligned sequence in the MSA. | 2825 | This also remaps the 3D object sequence with the aligned sequence in the MSA. |
2815 | If asked, the 3D object sequence is completed by the consensus nucleotide when one of them is missing. | 2826 | If asked, the 3D object sequence is completed by the consensus nucleotide when one of them is missing. |
... | @@ -2991,7 +3002,7 @@ def work_pssm_remap(f): | ... | @@ -2991,7 +3002,7 @@ def work_pssm_remap(f): |
2991 | setproctitle(f"RNAnet.py work_pssm_remap({f}) insert/match states") | 3002 | setproctitle(f"RNAnet.py work_pssm_remap({f}) insert/match states") |
2992 | 3003 | ||
2993 | # Get back the information of match/insertion states from the STK file | 3004 | # Get back the information of match/insertion states from the STK file |
2994 | - if (not use_sina) or (f not in SSU_set and f not in LSU_set): | 3005 | + if (not useSina) or (f not in SSU_set and f not in LSU_set): |
2995 | alignstk = AlignIO.read(path_to_seq_data + "realigned/" + f + "++.stk", "stockholm") | 3006 | alignstk = AlignIO.read(path_to_seq_data + "realigned/" + f + "++.stk", "stockholm") |
2996 | consensus_2d = alignstk.column_annotations["secondary_structure"] | 3007 | consensus_2d = alignstk.column_annotations["secondary_structure"] |
2997 | del alignstk | 3008 | del alignstk |
... | @@ -3037,8 +3048,6 @@ def work_pssm_remap(f): | ... | @@ -3037,8 +3048,6 @@ def work_pssm_remap(f): |
3037 | gap_percent, consensus, cons_sec_struct) | 3048 | gap_percent, consensus, cons_sec_struct) |
3038 | VALUES (?, 0, 0, NULL, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, '-', NULL);""", data=(f,)) | 3049 | VALUES (?, 0, 0, NULL, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, '-', NULL);""", data=(f,)) |
3039 | 3050 | ||
3040 | - | ||
3041 | - | ||
3042 | # Save the number of "used columns" to table family ( = the length of the alignment if it was composed only of the RNANet chains) | 3051 | # Save the number of "used columns" to table family ( = the length of the alignment if it was composed only of the RNANet chains) |
3043 | sql_execute(conn, f"UPDATE family SET ali_filtered_len = ? WHERE rfam_acc = ?;", data=(len(columns_to_save), f)) | 3052 | sql_execute(conn, f"UPDATE family SET ali_filtered_len = ? WHERE rfam_acc = ?;", data=(len(columns_to_save), f)) |
3044 | conn.close() | 3053 | conn.close() |
... | @@ -3171,15 +3180,9 @@ if __name__ == "__main__": | ... | @@ -3171,15 +3180,9 @@ if __name__ == "__main__": |
3171 | print(f"Among errors, {len(no_nts_set)} structures seem to contain RNA chains without defined nucleotides:", no_nts_set, flush=True) | 3180 | print(f"Among errors, {len(no_nts_set)} structures seem to contain RNA chains without defined nucleotides:", no_nts_set, flush=True) |
3172 | if len(weird_mappings): | 3181 | if len(weird_mappings): |
3173 | print(f"{len(weird_mappings)} mappings to Rfam were taken as absolute positions instead of residue numbers:", weird_mappings, flush=True) | 3182 | print(f"{len(weird_mappings)} mappings to Rfam were taken as absolute positions instead of residue numbers:", weird_mappings, flush=True) |
3174 | - if pp.SELECT_ONLY is None: | 3183 | + if pp.HOMOLOGY and pp.SELECT_ONLY is None: |
3175 | pp.checkpoint_save_chains() | 3184 | pp.checkpoint_save_chains() |
3176 | 3185 | ||
3177 | - if not pp.HOMOLOGY: | ||
3178 | - # Save chains to file | ||
3179 | - for c in pp.loaded_chains: | ||
3180 | - work_save(c, homology=False) | ||
3181 | - print("Completed.") | ||
3182 | - | ||
3183 | # At this point, structure, chain and nucleotide tables of the database are up to date. | 3186 | # At this point, structure, chain and nucleotide tables of the database are up to date. |
3184 | # (Modulo some statistics computed by statistics.py) | 3187 | # (Modulo some statistics computed by statistics.py) |
3185 | 3188 | ||
... | @@ -3187,33 +3190,34 @@ if __name__ == "__main__": | ... | @@ -3187,33 +3190,34 @@ if __name__ == "__main__": |
3187 | # Homology information | 3190 | # Homology information |
3188 | # =========================================================================== | 3191 | # =========================================================================== |
3189 | 3192 | ||
3190 | - if pp.SELECT_ONLY is None: | 3193 | + if pp.HOMOLOGY: |
3191 | - # If your job failed, you can comment all the "3D information" part and start from here. | 3194 | + if pp.SELECT_ONLY is None: |
3192 | - pp.checkpoint_load_chains() | 3195 | + # If your job failed, you can comment all the "3D information" part and start from here. |
3196 | + pp.checkpoint_load_chains() | ||
3193 | 3197 | ||
3194 | - # Get the list of Rfam families found in the update | 3198 | + # Get the list of Rfam families found in the update |
3195 | - rfam_acc_to_download = {} | 3199 | + rfam_acc_to_download = {} |
3196 | - for c in pp.loaded_chains: | 3200 | + for c in pp.loaded_chains: |
3197 | - if c.mapping.rfam_acc not in rfam_acc_to_download.keys(): | 3201 | + if c.mapping.rfam_acc not in rfam_acc_to_download.keys(): |
3198 | - rfam_acc_to_download[c.mapping.rfam_acc] = [c] | 3202 | + rfam_acc_to_download[c.mapping.rfam_acc] = [c] |
3199 | - else: | 3203 | + else: |
3200 | - rfam_acc_to_download[c.mapping.rfam_acc].append(c) | 3204 | + rfam_acc_to_download[c.mapping.rfam_acc].append(c) |
3201 | 3205 | ||
3202 | - print(f"> Identified {len(rfam_acc_to_download.keys())} families to update and re-align with the crystals' sequences") | 3206 | + print(f"> Identified {len(rfam_acc_to_download.keys())} families to update and re-align with the crystals' sequences") |
3203 | - pp.fam_list = sorted(rfam_acc_to_download.keys()) | 3207 | + pp.fam_list = sorted(rfam_acc_to_download.keys()) |
3204 | 3208 | ||
3205 | - if len(pp.fam_list): | 3209 | + if len(pp.fam_list): |
3206 | - pp.prepare_sequences() | 3210 | + pp.prepare_sequences() |
3207 | - pp.realign() | 3211 | + pp.realign() |
3208 | 3212 | ||
3209 | - # At this point, the family table is almost up to date | 3213 | + # At this point, the family table is almost up to date |
3210 | - # (lacking idty_percent and ali_filtered_length, both set in statistics.py) | 3214 | + # (lacking idty_percent and ali_filtered_length, both set in statistics.py) |
3211 | 3215 | ||
3212 | - thr_idx_mgr = Manager() | 3216 | + thr_idx_mgr = Manager() |
3213 | - idxQueue = thr_idx_mgr.Queue() | 3217 | + idxQueue = thr_idx_mgr.Queue() |
3214 | 3218 | ||
3215 | - pp.remap() | 3219 | + pp.remap() |
3216 | - pp.extractCMs() | 3220 | + pp.extractCMs() |
3217 | 3221 | ||
3218 | # At this point, the align_column and re_mapping tables are up-to-date. | 3222 | # At this point, the align_column and re_mapping tables are up-to-date. |
3219 | 3223 | ... | ... |
... | @@ -35,7 +35,7 @@ nohup bash -c 'time docker run --rm -v /path/to/3D/data/folder:/3D -v /path/to/s | ... | @@ -35,7 +35,7 @@ nohup bash -c 'time docker run --rm -v /path/to/3D/data/folder:/3D -v /path/to/s |
35 | # Method 2 : Classical command line installation (Linux only) | 35 | # Method 2 : Classical command line installation (Linux only) |
36 | 36 | ||
37 | You need to install the dependencies: | 37 | You need to install the dependencies: |
38 | -- DSSR 1.9.9 or newer, you need to register to the X3DNA forum [here](http://forum.x3dna.org/site-announcements/download-instructions/) and then download the DSSR binary [on that page](http://forum.x3dna.org/downloads/3dna-download/). Make sure to have the `x3dna-dssr` binary in your $PATH variable so that RNANet.py finds it. | 38 | +- DSSR 1.9.9 or newer, you need to register to ask for a DSSR (academic) license [on that page](http://innovation.columbia.edu/technologies/CU20391). Make sure to have the `x3dna-dssr` binary in your $PATH variable so that RNANet.py finds it. |
39 | - Infernal 1.1.4 or newer, to download at [Eddylab](http://eddylab.org/infernal/), several options are available depending on your preferences. Make sure to have the `cmalign`, `cmfetch`, `cmbuild`, `esl-alimanip`, `esl-alimerge`, `esl-alipid` and `esl-reformat` binaries in your $PATH variable, so that RNANet.py can find them. | 39 | - Infernal 1.1.4 or newer, to download at [Eddylab](http://eddylab.org/infernal/), several options are available depending on your preferences. Make sure to have the `cmalign`, `cmfetch`, `cmbuild`, `esl-alimanip`, `esl-alimerge`, `esl-alipid` and `esl-reformat` binaries in your $PATH variable, so that RNANet.py can find them. |
40 | - SINA (if you plan to use it), follow [these instructions](https://sina.readthedocs.io/en/latest/install.html) for example. Make sure to have the `sina` binary in your $PATH. | 40 | - SINA (if you plan to use it), follow [these instructions](https://sina.readthedocs.io/en/latest/install.html) for example. Make sure to have the `sina` binary in your $PATH. |
41 | - Sqlite 3, available under the name *sqlite* in every distro's package manager, | 41 | - Sqlite 3, available under the name *sqlite* in every distro's package manager, | ... | ... |
This diff could not be displayed because it is too large.
1 | -7nqh_1_BA_1-1457 | 1 | +6cfj_1_1X |
2 | +6cfj_1_2X | ||
3 | +5hcq_1_1X | ||
4 | +6cae_1_1X | ||
5 | +5hcq_1_2X | ||
6 | +5hcr_1_1X | ||
7 | +4z8c_1_1X | ||
8 | +5j4b_1_1X | ||
9 | +6xhy_1_1X | ||
10 | +6xhy_1_2X | ||
11 | +5j4b_1_2X | ||
12 | +4z8c_1_2X | ||
13 | +6cae_1_2X | ||
14 | +5j4c_1_1X | ||
15 | +5w4k_1_1X | ||
16 | +6of1_1_1X | ||
17 | +6xhw_1_1X | ||
18 | +5hcr_1_2X | ||
19 | +5hd1_1_1X | ||
20 | +5hcp_1_1X | ||
21 | +6of1_1_2X | ||
22 | +5hau_1_1W | ||
23 | +5j4c_1_2X | ||
24 | +5wis_1_1X | ||
25 | +6xhv_1_1X | ||
26 | +6xqd_1_1X | ||
27 | +6nd5_1_1X | ||
28 | +5w4k_1_2X | ||
29 | +6xhw_1_2X | ||
30 | +5hau_1_2W | ||
31 | +6xqd_1_2X | ||
32 | +6xhv_1_2X | ||
33 | +4y4p_1_1X | ||
34 | +6o97_1_1X | ||
35 | +5hcp_1_2X | ||
36 | +5doy_1_1X | ||
37 | +4zer_1_1X | ||
38 | +5wit_1_1X | ||
39 | +5hd1_1_2X | ||
40 | +6nd5_1_2X | ||
41 | +4z3s_1_1X | ||
42 | +7jql_1_1X | ||
43 | +7jqm_1_1X | ||
44 | +7jql_1_2X | ||
45 | +5wis_1_2X | ||
46 | +6nd6_1_1X | ||
47 | +6o97_1_2X | ||
48 | +4y4p_1_2X | ||
49 | +7jqm_1_2X | ||
50 | +4z3s_1_2X | ||
51 | +4zer_1_2X | ||
52 | +6uo1_1_2X | ||
53 | +6uo1_1_1X | ||
54 | +5doy_1_2X | ||
55 | +5wit_1_2X | ||
56 | +5f8k_1_1X | ||
57 | +6nd6_1_2X | ||
58 | +6xqe_1_1X | ||
59 | +6xqe_1_2X | ||
60 | +6n9e_1_1X | ||
61 | +6n9e_1_2X | ||
62 | +6n9f_1_1X | ||
63 | +5f8k_1_2X | ||
64 | +6n9f_1_2X | ||
65 | +6xz7_1_F | ||
66 | +6xzb_1_F2 | ||
67 | +6xza_1_F2 | ||
68 | +6y69_1_W | ||
69 | +5afi_1_V | ||
70 | +5afi_1_W | ||
71 | +6h4n_1_W | ||
72 | +5wdt_1_V | ||
73 | +5wfs_1_V | ||
74 | +5wdt_1_W | ||
75 | +5wfs_1_W | ||
76 | +5we4_1_V | ||
77 | +5we4_1_W | ||
78 | +5uq8_1_Y | ||
79 | +6c4i_1_Y | ||
80 | +6c4i_1_X | ||
81 | +6yef_1_X | ||
82 | +5zeb_1_V | ||
83 | +5zep_1_W | ||
84 | +5lzd_1_V | ||
85 | +5we6_1_V | ||
86 | +5wfk_1_V | ||
87 | +5wfk_1_W | ||
88 | +5we6_1_W | ||
89 | +5u4i_1_Y | ||
90 | +5uq7_1_Y | ||
91 | +5u4i_1_X | ||
92 | +5lza_1_V | ||
93 | +5wf0_1_V | ||
94 | +5wf0_1_W | ||
95 | +5zeu_1_V | ||
96 | +5l3p_1_X | ||
97 | +3jcj_1_V | ||
98 | +6gxm_1_X | ||
99 | +6gwt_1_X | ||
100 | +6gxn_1_X | ||
101 | +6gxo_1_X | ||
102 | +3j9y_1_V | ||
103 | +6o9k_1_Y | ||
104 | +6o7k_1_V | ||
105 | +5lzf_1_V | ||
106 | +3jcn_1_V | ||
107 | +5lzc_1_V | ||
108 | +5u4j_1_X | ||
109 | +5u4j_1_Z | ||
110 | +5lzb_1_V | ||
111 | +6h58_1_W | ||
112 | +6h58_1_WW | ||
113 | +5j8b_1_X | ||
114 | +4v7j_1_AV | ||
115 | +4v7j_1_BV | ||
116 | +4v7k_1_BV | ||
117 | +4v7k_1_AV | ||
118 | +4v7k_1_BW | ||
119 | +4v7k_1_AW | ||
120 | +4v7j_1_AW | ||
121 | +4v7j_1_BW | ||
122 | +4v4j_1_Z | ||
123 | +6i0v_1_B | ||
124 | +5k77_1_X | ||
125 | +5k77_1_V | ||
126 | +5k77_1_Y | ||
127 | +5k77_1_W | ||
128 | +5k77_1_Z | ||
129 | +4pei_1_X | ||
130 | +4pei_1_V | ||
131 | +4pei_1_W | ||
132 | +4pei_1_Z | ||
133 | +4pei_1_Y | ||
134 | +4a3c_1_P | ||
135 | +4a3e_1_P | ||
136 | +6lkq_1_U | ||
137 | +7k00_1_B | ||
138 | +6ys3_1_A | ||
139 | +6qdw_1_A | ||
140 | +6hcj_1_Q3 | ||
141 | +6hcq_1_Q3 | ||
142 | +6o8w_1_U | ||
143 | +5mmm_1_Z | ||
144 | +4w2e_1_W | ||
145 | +5j4b_1_1Y | ||
146 | +6cfj_1_1W | ||
147 | +5w4k_1_1Y | ||
148 | +6xhy_1_1W | ||
149 | +5wit_1_1W | ||
150 | +6cfj_1_1Y | ||
151 | +6cfj_1_2W | ||
152 | +5j4c_1_1W | ||
153 | +5wis_1_1Y | ||
154 | +5j4c_1_1Y | ||
155 | +6xhw_1_1W | ||
156 | +6cfj_1_2Y | ||
157 | +5wis_1_1W | ||
158 | +5j4b_1_1W | ||
159 | +6xhv_1_1W | ||
160 | +6xhy_1_2W | ||
161 | +5j4c_1_2W | ||
162 | +5j4b_1_2W | ||
163 | +5j4b_1_2Y | ||
164 | +5j4c_1_2Y | ||
165 | +5w4k_1_1W | ||
166 | +6nd5_1_1Y | ||
167 | +6xhw_1_2W | ||
168 | +5wis_1_2Y | ||
169 | +5wit_1_2W | ||
170 | +6xhv_1_2W | ||
171 | +5doy_1_1Y | ||
172 | +5w4k_1_2Y | ||
173 | +4y4p_1_1Y | ||
174 | +4z3s_1_1Y | ||
175 | +5doy_1_1W | ||
176 | +5doy_1_2Y | ||
177 | +6nd5_1_1W | ||
178 | +4z3s_1_2Y | ||
179 | +4z3s_1_1W | ||
180 | +5w4k_1_2W | ||
181 | +6nd5_1_2Y | ||
182 | +4y4p_1_2Y | ||
183 | +6uo1_1_2Y | ||
184 | +6uo1_1_2W | ||
185 | +4y4p_1_1W | ||
186 | +4z3s_1_2W | ||
187 | +6uo1_1_1Y | ||
188 | +6xhy_1_1Y | ||
189 | +6uo1_1_1W | ||
190 | +5wis_1_2W | ||
191 | +5wit_1_1Y | ||
192 | +6nd5_1_2W | ||
193 | +4y4p_1_2W | ||
194 | +5doy_1_2W | ||
195 | +5wit_1_2Y | ||
196 | +6xhv_1_1Y | ||
197 | +6xhy_1_2Y | ||
198 | +6xhw_1_1Y | ||
199 | +6xhw_1_2Y | ||
200 | +6ucq_1_1Y | ||
201 | +6xhv_1_2Y | ||
202 | +4v4i_1_Z | ||
203 | +6ucq_1_1X | ||
204 | +6ucq_1_2Y | ||
205 | +4w2e_1_X | ||
206 | +6ucq_1_2X | ||
207 | +7n1p_1_DT | ||
208 | +7n2u_1_DT | ||
209 | +6yss_1_W | ||
210 | +7n30_1_DT | ||
211 | +7n31_1_DT | ||
212 | +7n2c_1_DT | ||
213 | +5afi_1_Y | ||
214 | +5uq8_1_Z | ||
215 | +5wdt_1_Y | ||
216 | +5wfs_1_Y | ||
217 | +6ysr_1_W | ||
218 | +5we4_1_Y | ||
219 | +6yst_1_W | ||
220 | +5uq7_1_Z | ||
221 | +5we6_1_Y | ||
222 | +5wfk_1_Y | ||
223 | +5wf0_1_Y | ||
224 | +6o9j_1_V | ||
225 | +6ysu_1_W | ||
226 | +3j46_1_A | ||
227 | +5j8b_1_Y | ||
228 | +5j8b_1_W | ||
229 | +3bbv_1_Z | ||
230 | +5aj0_1_BV | ||
231 | +5aj0_1_BW | ||
232 | +4wt8_1_AB | ||
233 | +4wt8_1_BB | ||
234 | +4v4j_1_Y | ||
235 | +4v4i_1_Y | ||
236 | +5uq8_1_X | ||
237 | +5uq7_1_X | ||
238 | +4v4j_1_W | ||
239 | +4v4i_1_W | ||
240 | +4wt8_1_CS | ||
241 | +4wt8_1_DS | ||
242 | +4v4j_1_X | ||
243 | +4v4i_1_X | ||
244 | +6lkq_1_S | ||
245 | +5h5u_1_H | ||
246 | +7d6z_1_F | ||
247 | +5lze_1_Y | ||
248 | +5lze_1_V | ||
249 | +5lze_1_X | ||
250 | +3jcj_1_G | ||
251 | +6o7k_1_G | ||
252 | +6d30_1_C | ||
253 | +6j7z_1_C | ||
254 | +3er9_1_D | ||
255 | +5kal_1_Y | ||
256 | +4nia_1_3 | ||
257 | +5kal_1_Z | ||
258 | +4nia_1_7 | ||
259 | +4nia_1_4 | ||
260 | +5new_1_C | ||
261 | +4nia_1_U | ||
262 | +4nia_1_6 | ||
263 | +4oq9_1_7 | ||
264 | +4nia_1_1 | ||
265 | +4oq9_1_4 | ||
266 | +4nia_1_8 | ||
267 | +4oq9_1_8 | ||
268 | +4nia_1_5 | ||
269 | +2vrt_1_E | ||
270 | +4nia_1_W | ||
271 | +4oq9_1_6 | ||
272 | +4oq8_1_D | ||
273 | +4nia_1_Z | ||
274 | +4oq9_1_W | ||
275 | +4oq9_1_5 | ||
276 | +4nia_1_2 | ||
277 | +2vrt_1_F | ||
278 | +4oq9_1_U | ||
279 | +4oq9_1_Z | ||
280 | +4oq9_1_2 | ||
281 | +4oq9_1_3 | ||
282 | +1ddl_1_E | ||
283 | +4oq9_1_1 | ||
284 | +6rt5_1_A | ||
285 | +6rt5_1_E | ||
286 | +6lkq_1_T | ||
287 | +6ys3_1_B | ||
288 | +6qdw_1_B | ||
289 | +3jbv_1_B | ||
290 | +3jbu_1_B | ||
291 | +6do8_1_B | ||
292 | +6dpi_1_B | ||
293 | +6dp9_1_B | ||
294 | +6dpb_1_B | ||
295 | +6dmn_1_B | ||
296 | +6dpp_1_B | ||
297 | +6dpk_1_B | ||
298 | +6dpd_1_B | ||
299 | +6dot_1_B | ||
300 | +6dok_1_B | ||
301 | +6dp8_1_B | ||
302 | +6dpl_1_B | ||
303 | +6dpg_1_B | ||
304 | +6dou_1_B | ||
305 | +6dpc_1_B | ||
306 | +6do9_1_B | ||
307 | +6dmv_1_B | ||
308 | +6dp4_1_B | ||
309 | +6dpn_1_B | ||
310 | +6doj_1_B | ||
311 | +6dph_1_B | ||
312 | +6dos_1_B | ||
313 | +6doo_1_B | ||
314 | +6dp6_1_B | ||
315 | +6dox_1_B | ||
316 | +6dp5_1_B | ||
317 | +6dol_1_B | ||
318 | +6dp1_1_B | ||
319 | +6doz_1_B | ||
320 | +6dp7_1_B | ||
321 | +6doq_1_B | ||
322 | +6dpa_1_B | ||
323 | +6dom_1_B | ||
324 | +6dog_1_B | ||
325 | +6dop_1_B | ||
326 | +6doh_1_B | ||
327 | +6doa_1_B | ||
328 | +6don_1_B | ||
329 | +6dov_1_B | ||
330 | +6dpo_1_B | ||
331 | +6dod_1_B | ||
332 | +6dob_1_B | ||
333 | +6dow_1_B | ||
334 | +6dpm_1_B | ||
335 | +6dpf_1_B | ||
336 | +6dp3_1_B | ||
337 | +6dp2_1_B | ||
338 | +6dpe_1_B | ||
339 | +6dpj_1_B | ||
340 | +6dor_1_B | ||
341 | +6dof_1_B | ||
342 | +6dp0_1_B | ||
343 | +6doi_1_B | ||
344 | +6doc_1_B | ||
345 | +6doe_1_B | ||
346 | +6n6g_1_D | ||
347 | +4b3r_1_W | ||
348 | +4b3t_1_W | ||
349 | +4b3s_1_W | ||
350 | +7b5k_1_X | ||
351 | +5o2r_1_X | ||
352 | +5kcs_1_1X | ||
353 | +7n1p_1_PT | ||
354 | +7n2u_1_PT | ||
355 | +7n30_1_PT | ||
356 | +7n31_1_PT | ||
357 | +7n2c_1_PT | ||
358 | +6zvk_1_E2 | ||
359 | +6zvk_1_H2 | ||
360 | +7a01_1_E2 | ||
361 | +7a01_1_H2 | ||
362 | +6fti_1_U | ||
363 | +6fti_1_W | ||
364 | +6ftj_1_U | ||
365 | +6ftj_1_W | ||
366 | +6ftg_1_U | ||
367 | +6ftg_1_W | ||
368 | +6x1b_1_D | ||
369 | +6x1b_1_F | ||
370 | +5f6c_1_C | ||
371 | +6i0t_1_B | ||
372 | +1b2m_1_C | ||
373 | +1b2m_1_D | ||
374 | +1b2m_1_E | ||
375 | +2uxc_1_Y | ||
376 | +4a3g_1_P | ||
377 | +4a3j_1_P | ||
378 | +7k00_1_5 | ||
379 | +5mmi_1_Z | ||
380 | +3j9m_1_U | ||
381 | +7a5k_1_U3 | ||
382 | +6nu2_1_U | ||
383 | +7a5g_1_U3 | ||
384 | +6nu3_1_U | ||
385 | +5c0y_1_C | ||
386 | +6n6f_1_D | ||
387 | +4ohy_1_B | ||
388 | +4oi1_1_B | ||
389 | +4oi0_1_B | ||
390 | +5ipl_1_3 | ||
391 | +6utw_1_333 | ||
392 | +5ipm_1_3 | ||
393 | +5ipn_1_3 | ||
394 | +4ylo_1_3 | ||
395 | +4yln_1_6 | ||
396 | +4ylo_1_6 | ||
397 | +4yln_1_3 | ||
398 | +4yln_1_9 | ||
399 | +5lzf_1_Y | ||
400 | +1n32_1_Z | ||
401 | +5zsl_1_D | ||
402 | +5zsd_1_C | ||
403 | +5zsd_1_D | ||
404 | +5zsl_1_E | ||
405 | +4nku_1_D | ||
406 | +4nku_1_H | ||
407 | +1cwp_1_E | ||
408 | +6thn_1_A | ||
409 | +6qik_1_Y | ||
410 | +6rzz_1_Y | ||
411 | +6ri5_1_Y | ||
412 | +6qt0_1_Y | ||
413 | +6qtz_1_Y | ||
414 | +6t83_1_1B | ||
415 | +6t83_1_3B | ||
416 | +6t83_1_AA | ||
417 | +6t83_1_CA | ||
418 | +6s05_1_Y | ||
419 | +5jcs_1_X | ||
420 | +5fl8_1_X | ||
421 | +6ole_1_V | ||
422 | +6om0_1_V | ||
423 | +6oli_1_V | ||
424 | +6om7_1_V | ||
425 | +6w6l_1_V | ||
426 | +6olf_1_V | ||
427 | +3erc_1_G | ||
428 | +6of1_1_1W | ||
429 | +6cae_1_1Y | ||
430 | +6o97_1_1W | ||
431 | +6of1_1_1Y | ||
432 | +6of1_1_2W | ||
433 | +6o97_1_1Y | ||
434 | +6nd6_1_1Y | ||
435 | +6cae_1_1W | ||
436 | +6of1_1_2Y | ||
437 | +6cae_1_2Y | ||
438 | +6nd6_1_1W | ||
439 | +6cae_1_2W | ||
440 | +6o97_1_2Y | ||
441 | +6nd6_1_2Y | ||
442 | +6o97_1_2W | ||
443 | +6nd6_1_2W | ||
444 | +4wtm_1_T | ||
445 | +4wtm_1_P | ||
446 | +6gz4_1_BW | ||
447 | +6xz7_1_G | ||
448 | +6xzb_1_G2 | ||
449 | +6gz5_1_BW | ||
450 | +6gz3_1_BW | ||
451 | +4hot_1_X | ||
452 | +6d2z_1_C | ||
453 | +7eh0_1_I | ||
454 | +4tu0_1_F | ||
455 | +4tu0_1_G | ||
456 | +6r9o_1_B | ||
457 | +6is0_1_C | ||
458 | +5lzc_1_X | ||
459 | +5lzb_1_X | ||
460 | +5lzd_1_Y | ||
461 | +5lzc_1_Y | ||
462 | +5lzb_1_Y | ||
463 | +6zvi_1_E | ||
464 | +6sv4_1_MC | ||
465 | +6sv4_1_MB | ||
466 | +7nrd_1_SM | ||
467 | +6i7o_1_MB | ||
468 | +6zvi_1_D | ||
469 | +6sv4_1_NB | ||
470 | +6sv4_1_NC | ||
471 | +6i7o_1_NB | ||
472 | +7nsq_1_V | ||
473 | +6swa_1_Q | ||
474 | +6swa_1_R | ||
475 | +6ole_1_T | ||
476 | +6om0_1_T | ||
477 | +6oli_1_T | ||
478 | +6om7_1_T | ||
479 | +6olf_1_T | ||
480 | +6w6l_1_T | ||
481 | +6tnu_1_M | ||
482 | +5mc6_1_M | ||
483 | +7nrc_1_SM | ||
484 | +6tb3_1_N | ||
485 | +7b7d_1_SM | ||
486 | +7b7d_1_SN | ||
487 | +6tnu_1_N | ||
488 | +7nrc_1_SN | ||
489 | +7nrd_1_SN | ||
490 | +6zot_1_C | ||
491 | +4qu6_1_B | ||
492 | +2uxb_1_X | ||
493 | +2x1f_1_B | ||
494 | +2x1a_1_B | ||
495 | +5o1y_1_B | ||
496 | +4kzy_1_I | ||
497 | +4kzz_1_I | ||
498 | +4kzx_1_I | ||
499 | +6dzi_1_H | ||
500 | +5zeu_1_A | ||
501 | +6evj_1_N | ||
502 | +6evj_1_M | ||
503 | +6wub_1_A | ||
504 | +6wua_1_A | ||
505 | +6mpi_1_W | ||
506 | +5mfx_1_B | ||
507 | +5w0m_1_J | ||
508 | +5bud_1_E | ||
509 | +5w0m_1_I | ||
510 | +5w0m_1_H | ||
511 | +4j7m_1_B | ||
512 | +5bud_1_D | ||
513 | +6a4e_1_B | ||
514 | +6a4e_1_D | ||
515 | +6hxx_1_AA | ||
516 | +6hxx_1_AB | ||
517 | +6hxx_1_AC | ||
518 | +6hxx_1_AD | ||
519 | +6hxx_1_AE | ||
520 | +6hxx_1_AF | ||
521 | +6hxx_1_AG | ||
522 | +6hxx_1_AH | ||
523 | +6hxx_1_AI | ||
524 | +6hxx_1_AJ | ||
525 | +6hxx_1_AK | ||
526 | +6hxx_1_AL | ||
527 | +6hxx_1_AM | ||
528 | +6hxx_1_AN | ||
529 | +6hxx_1_AO | ||
530 | +6hxx_1_AP | ||
531 | +6hxx_1_AQ | ||
532 | +6hxx_1_AR | ||
533 | +6hxx_1_AS | ||
534 | +6hxx_1_AT | ||
535 | +6hxx_1_AU | ||
536 | +6hxx_1_AV | ||
537 | +6hxx_1_AW | ||
538 | +6hxx_1_AX | ||
539 | +6hxx_1_AY | ||
540 | +6hxx_1_AZ | ||
541 | +6hxx_1_BA | ||
542 | +6hxx_1_BB | ||
543 | +6hxx_1_BC | ||
544 | +6hxx_1_BD | ||
545 | +6hxx_1_BE | ||
546 | +6hxx_1_BF | ||
547 | +6hxx_1_BG | ||
548 | +6hxx_1_BH | ||
549 | +6hxx_1_BI | ||
550 | +5odv_1_A | ||
551 | +5odv_1_B | ||
552 | +5odv_1_C | ||
553 | +5odv_1_D | ||
554 | +5odv_1_E | ||
555 | +5odv_1_F | ||
556 | +5odv_1_G | ||
557 | +5odv_1_H | ||
558 | +5odv_1_I | ||
559 | +5odv_1_J | ||
560 | +5odv_1_K | ||
561 | +5odv_1_L | ||
562 | +5odv_1_M | ||
563 | +5odv_1_N | ||
564 | +5odv_1_O | ||
565 | +5odv_1_P | ||
566 | +5odv_1_Q | ||
567 | +5odv_1_R | ||
568 | +5odv_1_S | ||
569 | +5odv_1_T | ||
570 | +5odv_1_U | ||
571 | +5odv_1_V | ||
572 | +5odv_1_W | ||
573 | +5odv_1_X | ||
574 | +6t34_1_A | ||
575 | +6t34_1_B | ||
576 | +6t34_1_C | ||
577 | +6t34_1_D | ||
578 | +6t34_1_E | ||
579 | +6t34_1_F | ||
580 | +6t34_1_G | ||
581 | +6t34_1_H | ||
582 | +6t34_1_I | ||
583 | +6t34_1_J | ||
584 | +6t34_1_K | ||
585 | +6t34_1_L | ||
586 | +6t34_1_M | ||
587 | +6t34_1_N | ||
588 | +6t34_1_O | ||
589 | +6t34_1_P | ||
590 | +6t34_1_Q | ||
591 | +6t34_1_R | ||
592 | +6t34_1_S | ||
593 | +6ip8_1_ZY | ||
594 | +6ip5_1_ZY | ||
595 | +6ip5_1_ZU | ||
596 | +6ip6_1_ZY | ||
597 | +6ip8_1_ZZ | ||
598 | +6ip6_1_ZZ | ||
599 | +6uu3_1_333 | ||
600 | +6uu1_1_333 | ||
601 | +3er8_1_H | ||
602 | +3er8_1_G | ||
603 | +3er8_1_F | ||
604 | +5o3j_1_B | ||
605 | +4dr7_1_B | ||
606 | +1i5l_1_Y | ||
607 | +1i5l_1_U | ||
608 | +4dr6_1_B | ||
609 | +6i2n_1_U | ||
610 | +4v68_1_A0 | ||
611 | +6vyu_1_Y | ||
612 | +6vyw_1_Y | ||
613 | +6vz7_1_Y | ||
614 | +6vz5_1_Y | ||
615 | +6vz3_1_Y | ||
616 | +6vyy_1_Y | ||
617 | +6vyx_1_Y | ||
618 | +6vyz_1_Y | ||
619 | +6vz2_1_Y | ||
620 | +1mvr_1_1 | ||
621 | +6vyt_1_Y | ||
622 | +1cgm_1_I | ||
623 | +3jb7_1_T | ||
624 | +3jb7_1_M | ||
625 | +3j0o_1_D | ||
626 | +3j0l_1_D | ||
627 | +3j0q_1_D | ||
628 | +3j0p_1_D | ||
629 | +2tmv_1_R | ||
630 | +5a79_1_R | ||
631 | +5a7a_1_R | ||
632 | +2om3_1_R | ||
633 | +2xea_1_R | ||
634 | +4v7e_1_AA | ||
635 | +4v7e_1_AC | ||
636 | +4wtl_1_T | ||
637 | +4wtl_1_P | ||
638 | +1xnq_1_W | ||
639 | +7n2v_1_DT | ||
640 | +4peh_1_Z | ||
641 | +1vq6_1_4 | ||
642 | +4am3_1_D | ||
643 | +4am3_1_H | ||
644 | +4am3_1_I | ||
645 | +4lj0_1_C | ||
646 | +4lj0_1_D | ||
647 | +4lj0_1_E | ||
648 | +5lzy_1_HH | ||
649 | +4wtj_1_T | ||
650 | +4wtj_1_P | ||
651 | +4xbf_1_D | ||
652 | +6n6d_1_D | ||
653 | +6n6k_1_C | ||
654 | +6n6k_1_D | ||
655 | +3rtj_1_D | ||
656 | +6ty9_1_M | ||
657 | +6tz1_1_N | ||
658 | +6q1h_1_D | ||
659 | +6q1h_1_H | ||
660 | +6p7p_1_F | ||
661 | +6p7p_1_E | ||
662 | +6p7p_1_D | ||
663 | +6vm6_1_J | ||
664 | +6vm6_1_G | ||
665 | +6wan_1_K | ||
666 | +6wan_1_H | ||
667 | +6wan_1_G | ||
668 | +6wan_1_L | ||
669 | +6wan_1_I | ||
670 | +6ywo_1_F | ||
671 | +6wan_1_J | ||
672 | +4oau_1_A | ||
673 | +6ywo_1_E | ||
674 | +6ywo_1_K | ||
675 | +6vm6_1_I | ||
676 | +6vm6_1_H | ||
677 | +6ywo_1_I | ||
678 | +2a1r_1_C | ||
679 | +6m6v_1_F | ||
680 | +6m6v_1_E | ||
681 | +2a1r_1_D | ||
682 | +3gpq_1_E | ||
683 | +3gpq_1_F | ||
684 | +6o79_1_C | ||
685 | +6vm6_1_K | ||
686 | +6m6v_1_G | ||
687 | +6hyu_1_D | ||
688 | +1laj_1_R | ||
689 | +6ybv_1_K | ||
690 | +6sce_1_B | ||
691 | +6xl1_1_C | ||
692 | +6scf_1_I | ||
693 | +6scf_1_K | ||
694 | +6yud_1_K | ||
695 | +6yud_1_O | ||
696 | +6scf_1_M | ||
697 | +6yud_1_P | ||
698 | +6scf_1_L | ||
699 | +6yud_1_M | ||
700 | +6yud_1_Q | ||
701 | +6w11_1_C | ||
702 | +6o6x_1_D | ||
703 | +4ba2_1_R | ||
704 | +7bdv_1_F | ||
705 | +7bdv_1_H | ||
706 | +6o6x_1_C | ||
707 | +7did_1_C | ||
708 | +6o7b_1_C | ||
709 | +6o6v_1_C | ||
710 | +6wxx_1_Y | ||
711 | +6wxx_1_X | ||
712 | +6r7b_1_D | ||
713 | +6r9r_1_D | ||
714 | +6ov0_1_E | ||
715 | +6ov0_1_H | ||
716 | +6ov0_1_G | ||
717 | +6o6v_1_D | ||
718 | +6ov0_1_F | ||
719 | +6o7b_1_D | ||
720 | +5e02_1_C | ||
721 | +6r9r_1_E | ||
722 | +6r7b_1_E | ||
723 | +6o7i_1_I | ||
724 | +6o7h_1_K | ||
725 | +7l6t_1_C | ||
726 | +7jyy_1_F | ||
727 | +7jyy_1_E | ||
728 | +7jz0_1_F | ||
729 | +7jz0_1_E | ||
730 | +6rt6_1_A | ||
731 | +6rt6_1_E | ||
732 | +1y1y_1_P | ||
733 | +5zuu_1_I | ||
734 | +5zuu_1_G | ||
735 | +7am2_1_R1 | ||
736 | +4peh_1_W | ||
737 | +4peh_1_V | ||
738 | +4peh_1_X | ||
739 | +4peh_1_Y | ||
740 | +7d8c_1_C | ||
741 | +6mkn_1_W | ||
742 | +7kl3_1_B | ||
743 | +4cxg_1_C | ||
744 | +4cxh_1_C | ||
745 | +4eya_1_E | ||
746 | +4eya_1_F | ||
747 | +4eya_1_Q | ||
748 | +4eya_1_R | ||
749 | +4ht9_1_E | ||
750 | +6z1p_1_AB | ||
751 | +6z1p_1_AA | ||
752 | +4ii9_1_C | ||
753 | +5mq0_1_3 | ||
754 | +5uk4_1_X | ||
755 | +5uk4_1_V | ||
756 | +5uk4_1_W | ||
757 | +5uk4_1_U | ||
758 | +5f6c_1_E | ||
759 | +7nwh_1_HH | ||
760 | +4rcj_1_B | ||
761 | +1xnr_1_W | ||
762 | +6e0o_1_C | ||
763 | +6o75_1_D | ||
764 | +6o75_1_C | ||
765 | +6e0o_1_B | ||
766 | +3j06_1_R | ||
767 | +4eya_1_G | ||
768 | +4eya_1_H | ||
769 | +4eya_1_S | ||
770 | +4eya_1_T | ||
771 | +4dr4_1_V | ||
772 | +1ibl_1_Z | ||
773 | +1ibm_1_Z | ||
774 | +4dr5_1_V | ||
775 | +4d61_1_J | ||
776 | +7nwg_1_Q3 | ||
777 | +5tbw_1_SR | ||
778 | +6hhq_1_SR | ||
779 | +6zvi_1_H | ||
780 | +6sv4_1_2B | ||
781 | +6sv4_1_2C | ||
782 | +6t83_1_2B | ||
783 | +6t83_1_A | ||
784 | +6i7o_1_2B | ||
785 | +6q8y_1_N | ||
786 | +6sv4_1_N | ||
787 | +6i7o_1_N | ||
788 | +6swa_1_S | ||
789 | +5k8h_1_A | ||
790 | +5z4a_1_B | ||
791 | +3jbu_1_V | ||
792 | +1h2c_1_R | ||
793 | +1h2d_1_S | ||
794 | +1h2d_1_R | ||
795 | +6szs_1_X | ||
796 | +5mgp_1_X | ||
797 | +6enu_1_X | ||
798 | +6enf_1_X | ||
799 | +6enj_1_X | ||
800 | +1pvo_1_L | ||
801 | +1pvo_1_G | ||
802 | +1pvo_1_H | ||
803 | +1pvo_1_J | ||
804 | +1pvo_1_K | ||
805 | +2ht1_1_K | ||
806 | +2ht1_1_J | ||
807 | +5sze_1_C | ||
808 | +6wre_1_D | ||
809 | +6i0u_1_B | ||
810 | +5zsa_1_C | ||
811 | +5zsa_1_D | ||
812 | +1n34_1_Z | ||
813 | +3pf5_1_S | ||
814 | +6ppn_1_A | ||
815 | +6ppn_1_I | ||
816 | +5flx_1_Z | ||
817 | +6eri_1_AX | ||
818 | +7k5l_1_R | ||
819 | +7d80_1_Y | ||
820 | +7du2_1_R | ||
821 | +4v8z_1_CX | ||
822 | +6kqe_1_I | ||
823 | +5uh8_1_I | ||
824 | +5vi5_1_Q | ||
825 | +4xln_1_T | ||
826 | +4xlr_1_T | ||
827 | +4xln_1_Q | ||
828 | +5i2d_1_K | ||
829 | +5i2d_1_V | ||
830 | +4xlr_1_Q | ||
831 | +6sty_1_C | ||
832 | +6sty_1_F | ||
833 | +2xs5_1_D | ||
834 | +3ok4_1_N | ||
835 | +3ok4_1_L | ||
836 | +3ok4_1_Z | ||
837 | +3ok4_1_4 | ||
838 | +3ok4_1_V | ||
839 | +3ok4_1_X | ||
840 | +3ok4_1_P | ||
841 | +3ok4_1_H | ||
842 | +3ok4_1_J | ||
843 | +3ok4_1_R | ||
844 | +3ok4_1_T | ||
845 | +3ok4_1_2 | ||
846 | +6n6h_1_D | ||
847 | +5wnt_1_B | ||
848 | +3b0u_1_B | ||
849 | +3b0u_1_A | ||
850 | +4x9e_1_G | ||
851 | +4x9e_1_H | ||
852 | +6z1p_1_BB | ||
853 | +6z1p_1_BA | ||
854 | +2uxd_1_X | ||
855 | +6ywe_1_BB | ||
856 | +3ol9_1_D | ||
857 | +3ol9_1_H | ||
858 | +3ol9_1_L | ||
859 | +3ol9_1_P | ||
860 | +3olb_1_L | ||
861 | +3olb_1_P | ||
862 | +3olb_1_D | ||
863 | +3olb_1_H | ||
864 | +3ol6_1_D | ||
865 | +3ol6_1_H | ||
866 | +3ol6_1_L | ||
867 | +3ol6_1_P | ||
868 | +3ol8_1_D | ||
869 | +3ol8_1_H | ||
870 | +3ol7_1_L | ||
871 | +3ol7_1_P | ||
872 | +3ol7_1_D | ||
873 | +3ol7_1_H | ||
874 | +3ol8_1_L | ||
875 | +3ol8_1_P | ||
876 | +6yrq_1_E | ||
877 | +6yrq_1_H | ||
878 | +6yrq_1_G | ||
879 | +6yrq_1_F | ||
880 | +6yrb_1_C | ||
881 | +6yrb_1_D | ||
882 | +6gz5_1_BV | ||
883 | +6gz4_1_BV | ||
884 | +6gz3_1_BV | ||
885 | +6fti_1_Q | ||
886 | +7njc_1_B | ||
887 | +4v7e_1_AB | ||
888 | +4v7e_1_AE | ||
889 | +4v7e_1_AD | ||
890 | +4x62_1_B | ||
891 | +4x64_1_B | ||
892 | +4x65_1_B | ||
893 | +1xmq_1_W | ||
894 | +4x66_1_B | ||
895 | +3t1h_1_W | ||
896 | +3t1y_1_W | ||
897 | +1xmo_1_W | ||
898 | +6kr6_1_B | ||
899 | +6z8k_1_X | ||
900 | +4csf_1_U | ||
901 | +4csf_1_Q | ||
902 | +4csf_1_G | ||
903 | +4csf_1_M | ||
904 | +4csf_1_K | ||
905 | +4csf_1_A | ||
906 | +4csf_1_I | ||
907 | +4csf_1_S | ||
908 | +4csf_1_C | ||
909 | +4csf_1_W | ||
910 | +4csf_1_O | ||
911 | +4csf_1_E | ||
912 | +6ywx_1_BB | ||
913 | +6th6_1_AA | ||
914 | +6skg_1_AA | ||
915 | +6skf_1_AA | ||
916 | +6q8y_1_M | ||
917 | +6i7o_1_M | ||
918 | +6zmw_1_W | ||
919 | +6ybv_1_W | ||
920 | +2fz2_1_D | ||
921 | +2xpj_1_D | ||
922 | +2vrt_1_H | ||
923 | +2vrt_1_G | ||
924 | +6r9m_1_B | ||
925 | +4nia_1_C | ||
926 | +4nia_1_A | ||
927 | +4nia_1_H | ||
928 | +4nia_1_N | ||
929 | +4nia_1_G | ||
930 | +4nia_1_D | ||
931 | +4nia_1_B | ||
932 | +4nia_1_I | ||
933 | +4nia_1_E | ||
934 | +4nia_1_M | ||
935 | +4oq9_1_I | ||
936 | +4oq9_1_G | ||
937 | +4oq9_1_C | ||
938 | +4oq9_1_H | ||
939 | +4oq9_1_N | ||
940 | +4oq9_1_A | ||
941 | +4oq9_1_D | ||
942 | +4oq9_1_E | ||
943 | +4oq9_1_M | ||
944 | +4oq9_1_B | ||
945 | +5uhc_1_I | ||
946 | +1uvn_1_F | ||
947 | +1uvn_1_B | ||
948 | +1uvn_1_D | ||
949 | +4wtk_1_T | ||
950 | +4wtk_1_P | ||
951 | +1vqn_1_4 | ||
952 | +4oav_1_C | ||
953 | +4oav_1_A | ||
954 | +4i67_1_B | ||
955 | +6k32_1_T | ||
956 | +6k32_1_P | ||
957 | +5mmj_1_A | ||
958 | +5x8r_1_A | ||
959 | +6yw5_1_AA | ||
960 | +6ywe_1_AA | ||
961 | +6ywy_1_AA | ||
962 | +6ywx_1_AA | ||
963 | +3nvk_1_G | ||
964 | +3nvk_1_S | ||
965 | +1cwp_1_D | ||
966 | +1cwp_1_F | ||
967 | +5z4j_1_B | ||
968 | +5gmf_1_E | ||
969 | +5gmf_1_H | ||
970 | +6e4p_1_J | ||
971 | +5gmf_1_F | ||
972 | +5gmf_1_G | ||
973 | +5gmg_1_D | ||
974 | +5gmg_1_C | ||
975 | +6e4p_1_K | ||
976 | +3ie1_1_E | ||
977 | +3ie1_1_H | ||
978 | +3ie1_1_F | ||
979 | +4dr7_1_V | ||
980 | +3ie1_1_G | ||
981 | +3s4g_1_C | ||
982 | +3s4g_1_B | ||
983 | +2qqp_1_R | ||
984 | +1nb7_1_E | ||
985 | +1nb7_1_F | ||
986 | +4hos_1_X | ||
987 | +3p6y_1_T | ||
988 | +3p6y_1_V | ||
989 | +3p6y_1_U | ||
990 | +3p6y_1_Q | ||
991 | +3p6y_1_W | ||
992 | +5dto_1_B | ||
993 | +4cxh_1_X | ||
994 | +1uvj_1_F | ||
995 | +1uvj_1_D | ||
996 | +1uvj_1_E | ||
997 | +6kqd_1_I | ||
998 | +6kqd_1_S | ||
999 | +5uh5_1_I | ||
1000 | +1ytu_1_F | ||
1001 | +1ytu_1_D | ||
1002 | +4kzz_1_J | ||
1003 | +7a09_1_F | ||
1004 | +5t2c_1_AN | ||
1005 | +3j6b_1_E | ||
1006 | +4v4f_1_B6 | ||
1007 | +4v4f_1_A5 | ||
1008 | +4v4f_1_A3 | ||
1009 | +4v4f_1_B0 | ||
1010 | +4v4f_1_B9 | ||
1011 | +4v4f_1_A2 | ||
1012 | +4v4f_1_A8 | ||
1013 | +4v4f_1_A1 | ||
1014 | +4v4f_1_A9 | ||
1015 | +4v4f_1_BZ | ||
1016 | +4v4f_1_B8 | ||
1017 | +4v4f_1_B7 | ||
1018 | +4v4f_1_B5 | ||
1019 | +4v4f_1_A0 | ||
1020 | +4v4f_1_A7 | ||
1021 | +4v4f_1_A4 | ||
1022 | +4v4f_1_AZ | ||
1023 | +4v4f_1_B3 | ||
1024 | +4v4f_1_B1 | ||
1025 | +4v4f_1_B4 | ||
1026 | +4v4f_1_A6 | ||
1027 | +4v4f_1_B2 | ||
1028 | +7m4y_1_V | ||
1029 | +7m4x_1_V | ||
1030 | +6v3a_1_V | ||
1031 | +6v39_1_V | ||
1032 | +5it9_1_I | ||
1033 | +7jqc_1_I | ||
1034 | +5zsb_1_C | ||
1035 | +5zsb_1_D | ||
1036 | +5zsn_1_D | ||
1037 | +5zsn_1_E | ||
1038 | +6gfw_1_R | ||
1039 | +6zm6_1_X | ||
1040 | +6zm5_1_X | ||
1041 | +6zm6_1_W | ||
1042 | +6zm5_1_W | ||
1043 | +6n6e_1_D | ||
1044 | +4g7o_1_I | ||
1045 | +4g7o_1_S | ||
1046 | +5x22_1_S | ||
1047 | +5x22_1_I | ||
1048 | +5x21_1_I | ||
1049 | +5uh6_1_I | ||
1050 | +6l74_1_I | ||
1051 | +5uh9_1_I | ||
1052 | +7a5j_1_X | ||
1053 | +6sag_1_R | ||
1054 | +4udv_1_R | ||
1055 | +5zsc_1_D | ||
1056 | +5zsc_1_C | ||
1057 | +6woy_1_I | ||
1058 | +6wox_1_I | ||
1059 | +4gkk_1_W | ||
1060 | +4v9e_1_AG | ||
1061 | +4v9e_1_BM | ||
1062 | +4v9e_1_AM | ||
1063 | +4v9e_1_AA | ||
1064 | +4v9e_1_BA | ||
1065 | +4v9e_1_BG | ||
1066 | +5lzs_1_II | ||
1067 | +6fqr_1_C | ||
1068 | +6ha1_1_X | ||
1069 | +5kcr_1_1X | ||
1070 | +6uu4_1_333 | ||
1071 | +6uu0_1_333 | ||
1072 | +6uuc_1_333 | ||
1073 | +6uu2_1_333 | ||
1074 | +6xl9_1_R | ||
1075 | +6b6h_1_3 | ||
1076 | +6xh8_1_3 | ||
1077 | +6pb4_1_3 | ||
1078 | +3m7n_1_Z | ||
1079 | +3m85_1_X | ||
1080 | +3m85_1_Z | ||
1081 | +3m85_1_Y | ||
1082 | +5wnp_1_B | ||
1083 | +5wnv_1_B | ||
1084 | +5yts_1_B | ||
1085 | +1utd_1_6 | ||
1086 | +1utd_1_Z | ||
1087 | +1utd_1_4 | ||
1088 | +1utd_1_7 | ||
1089 | +1utd_1_9 | ||
1090 | +1utd_1_5 | ||
1091 | +1utd_1_3 | ||
1092 | +1utd_1_2 | ||
1093 | +1utd_1_8 | ||
1094 | +1utd_1_1 | ||
1095 | +6n6i_1_C | ||
1096 | +6n6i_1_D | ||
1097 | +6n6a_1_D | ||
1098 | +6ij2_1_F | ||
1099 | +6ij2_1_G | ||
1100 | +6ij2_1_H | ||
1101 | +6ij2_1_E | ||
1102 | +3u2e_1_D | ||
1103 | +3u2e_1_C | ||
1104 | +7eh1_1_I | ||
1105 | +5uef_1_C | ||
1106 | +5uef_1_D | ||
1107 | +7eh2_1_R | ||
1108 | +7eh2_1_I | ||
1109 | +4x4u_1_H | ||
1110 | +4afy_1_D | ||
1111 | +6oy5_1_I | ||
1112 | +6owl_1_B | ||
1113 | +6owl_1_C | ||
1114 | +4afy_1_C | ||
1115 | +4lq3_1_R | ||
1116 | +6s0m_1_C | ||
1117 | +6ymw_1_C | ||
1118 | +7a5g_1_J | ||
1119 | +6gx6_1_B | ||
1120 | +4k4s_1_D | ||
1121 | +4k4s_1_H | ||
1122 | +4k4t_1_H | ||
1123 | +4k4t_1_D | ||
1124 | +1xpu_1_G | ||
1125 | +1xpu_1_L | ||
1126 | +1xpr_1_L | ||
1127 | +1xpu_1_H | ||
1128 | +1xpo_1_K | ||
1129 | +1xpo_1_J | ||
1130 | +1xpu_1_J | ||
1131 | +1xpo_1_H | ||
1132 | +1xpr_1_J | ||
1133 | +1xpu_1_K | ||
1134 | +1xpr_1_K | ||
1135 | +1xpo_1_M | ||
1136 | +1xpo_1_L | ||
1137 | +1xpu_1_M | ||
1138 | +1xpr_1_M | ||
1139 | +1xpo_1_G | ||
1140 | +1xpr_1_H | ||
1141 | +1xpr_1_G | ||
1142 | +5x70_1_E | ||
1143 | +5x70_1_G | ||
1144 | +6gc5_1_F | ||
1145 | +6gc5_1_H | ||
1146 | +6gc5_1_G | ||
1147 | +1n1h_1_B | ||
1148 | +7n2v_1_PT | ||
1149 | +4ohz_1_B | ||
1150 | +6t83_1_6B | ||
1151 | +4gv6_1_C | ||
1152 | +4gv6_1_B | ||
1153 | +4gv3_1_C | ||
1154 | +4gv3_1_B | ||
1155 | +4gv9_1_E | ||
1156 | +6i7o_1_L | ||
1157 | +2a8v_1_D | ||
1158 | +6qx3_1_G | ||
1159 | +2xnr_1_C | ||
1160 | +4gkj_1_W | ||
1161 | +5y88_1_X | ||
1162 | +3j0o_1_H | ||
1163 | +3j0l_1_H | ||
1164 | +3j0p_1_H | ||
1165 | +3j0q_1_H | ||
1166 | +3j0o_1_F | ||
1167 | +3j0l_1_F | ||
1168 | +3j0p_1_F | ||
1169 | +3j0q_1_F | ||
1170 | +3j0o_1_B | ||
1171 | +3j0l_1_B | ||
1172 | +3j0o_1_C | ||
1173 | +3j0l_1_C | ||
1174 | +3j0q_1_C | ||
1175 | +3j0p_1_C | ||
1176 | +3j0o_1_A | ||
1177 | +3j0l_1_A | ||
1178 | +3j0q_1_A | ||
1179 | +3j0p_1_A | ||
1180 | +6ys3_1_V | ||
1181 | +6qdw_1_V | ||
1182 | +5hk0_1_F | ||
1183 | +4qm6_1_D | ||
1184 | +4qm6_1_C | ||
1185 | +4jzu_1_C | ||
1186 | +4jzv_1_C | ||
1187 | +5ytv_1_B | ||
1188 | +4k4z_1_P | ||
1189 | +4k4z_1_D | ||
1190 | +4k4x_1_L | ||
1191 | +4k4z_1_L | ||
1192 | +4k4x_1_D | ||
1193 | +4k4z_1_H | ||
1194 | +4k4x_1_H | ||
1195 | +4k4x_1_P | ||
1196 | +4a3b_1_P | ||
1197 | +4a3m_1_P | ||
1198 | +6u6y_1_E | ||
1199 | +6u6y_1_G | ||
1200 | +6u6y_1_F | ||
1201 | +6u6y_1_H | ||
1202 | +6qik_1_X | ||
1203 | +6rzz_1_X | ||
1204 | +6ri5_1_X | ||
1205 | +6qt0_1_X | ||
1206 | +6qtz_1_X | ||
1207 | +6s05_1_X | ||
1208 | +6t83_1_BB | ||
1209 | +6t83_1_4B | ||
1210 | +5fl8_1_Z | ||
1211 | +5jcs_1_Z | ||
1212 | +5mrc_1_BB | ||
1213 | +5mre_1_BB | ||
1214 | +5mrf_1_BB | ||
1215 | +3j46_1_P | ||
1216 | +4e6b_1_A | ||
1217 | +4e6b_1_B | ||
1218 | +6a6l_1_D | ||
1219 | +1uvi_1_D | ||
1220 | +1uvi_1_F | ||
1221 | +1uvi_1_E | ||
1222 | +4m7d_1_P | ||
1223 | +4k4u_1_D | ||
1224 | +4k4u_1_H | ||
1225 | +6rt7_1_E | ||
1226 | +6rt7_1_A | ||
1227 | +2voo_1_C | ||
1228 | +2voo_1_D | ||
1229 | +5k78_1_X | ||
1230 | +5k78_1_Y | ||
1231 | +4ylo_1_9 | ||
1232 | +5vyc_1_I2 | ||
1233 | +5vyc_1_I3 | ||
1234 | +5vyc_1_I5 | ||
1235 | +5vyc_1_I1 | ||
1236 | +5vyc_1_I6 | ||
1237 | +5vyc_1_I4 | ||
1238 | +6ip8_1_2M | ||
1239 | +6ip5_1_2M | ||
1240 | +6ip6_1_2M | ||
1241 | +6qcs_1_M | ||
1242 | +7b5k_1_Z | ||
1243 | +4nia_1_O | ||
1244 | +4nia_1_J | ||
1245 | +4nia_1_K | ||
1246 | +4nia_1_L | ||
1247 | +4nia_1_F | ||
1248 | +4oq9_1_K | ||
1249 | +4oq9_1_O | ||
1250 | +4oq9_1_J | ||
1251 | +4oq9_1_F | ||
1252 | +4oq9_1_L | ||
1253 | +6r9q_1_B | ||
1254 | +7m4u_1_A | ||
1255 | +6v3a_1_SN1 | ||
1256 | +6v3b_1_SN1 | ||
1257 | +6v39_1_SN1 | ||
1258 | +6v3e_1_SN1 | ||
1259 | +4dr6_1_V | ||
1260 | +6kql_1_I | ||
1261 | +4eya_1_M | ||
1262 | +4eya_1_N | ||
1263 | +4eya_1_A | ||
1264 | +4eya_1_B | ||
1265 | +2wj8_1_D | ||
1266 | +2wj8_1_I | ||
1267 | +2wj8_1_L | ||
1268 | +2wj8_1_F | ||
1269 | +2wj8_1_C | ||
1270 | +2wj8_1_Q | ||
1271 | +2wj8_1_J | ||
1272 | +2wj8_1_P | ||
1273 | +2wj8_1_K | ||
1274 | +2wj8_1_E | ||
1275 | +2wj8_1_T | ||
1276 | +2wj8_1_B | ||
1277 | +2wj8_1_O | ||
1278 | +2wj8_1_N | ||
1279 | +2wj8_1_A | ||
1280 | +2wj8_1_H | ||
1281 | +2wj8_1_R | ||
1282 | +2wj8_1_M | ||
1283 | +2wj8_1_S | ||
1284 | +2wj8_1_G | ||
1285 | +4e6b_1_E | ||
1286 | +4e6b_1_F | ||
1287 | +6p71_1_I | ||
1288 | +3pdm_1_R | ||
1289 | +5det_1_P | ||
1290 | +5els_1_I | ||
1291 | +4n2s_1_B | ||
1292 | +5fl8_1_Y | ||
1293 | +5jcs_1_Y | ||
1294 | +4yoe_1_E | ||
1295 | +6ow3_1_I | ||
1296 | +6ovy_1_I | ||
1297 | +6oy6_1_I | ||
1298 | +4qvd_1_H | ||
1299 | +5gxi_1_B | ||
1300 | +7n06_1_G | ||
1301 | +7n06_1_H | ||
1302 | +7n06_1_I | ||
1303 | +7n06_1_J | ||
1304 | +7n06_1_K | ||
1305 | +7n06_1_L | ||
1306 | +7n33_1_G | ||
1307 | +7n33_1_H | ||
1308 | +7n33_1_I | ||
1309 | +7n33_1_J | ||
1310 | +7n33_1_K | ||
1311 | +7n33_1_L | ||
1312 | +5mc6_1_N | ||
1313 | +4eya_1_O | ||
1314 | +4eya_1_P | ||
1315 | +4eya_1_C | ||
1316 | +4eya_1_D | ||
1317 | +6htq_1_V | ||
1318 | +6htq_1_W | ||
1319 | +6htq_1_U | ||
1320 | +6uu6_1_333 | ||
1321 | +5a0v_1_F | ||
1322 | +3avt_1_T | ||
1323 | +6d1v_1_C | ||
1324 | +4s2x_1_B | ||
1325 | +4s2y_1_B | ||
1326 | +5wnu_1_B | ||
1327 | +1vtm_1_R | ||
1328 | +5elt_1_F | ||
1329 | +5elt_1_E | ||
1330 | +6xlj_1_R | ||
1331 | +6u9x_1_H | ||
1332 | +6u9x_1_K | ||
1333 | +5elk_1_R | ||
1334 | +6okk_1_G | ||
1335 | +4cxg_1_A | ||
1336 | +4cxh_1_A | ||
1337 | +6bk8_1_I | ||
1338 | +4cxg_1_B | ||
1339 | +4cxh_1_B | ||
1340 | +5z4d_1_B | ||
1341 | +6o78_1_E | ||
1342 | +6xa1_1_BV | ||
1343 | +6ha8_1_X | ||
1344 | +1m8w_1_E | ||
1345 | +1m8w_1_F | ||
1346 | +5udi_1_B | ||
1347 | +5udl_1_B | ||
1348 | +5udk_1_B | ||
1349 | +5udj_1_B | ||
1350 | +5w5i_1_B | ||
1351 | +5w5i_1_D | ||
1352 | +5w5h_1_B | ||
1353 | +5w5h_1_D | ||
1354 | +4eya_1_K | ||
1355 | +4eya_1_L | ||
1356 | +4eya_1_I | ||
1357 | +4eya_1_J | ||
1358 | +4g9z_1_E | ||
1359 | +4g9z_1_F | ||
1360 | +3nma_1_B | ||
1361 | +3nma_1_C | ||
1362 | +6een_1_G | ||
1363 | +6een_1_I | ||
1364 | +6een_1_H | ||
1365 | +4wti_1_T | ||
1366 | +4wti_1_P | ||
1367 | +5l3p_1_Y | ||
1368 | +4hor_1_X | ||
1369 | +3rzo_1_R | ||
1370 | +2f4v_1_Z | ||
1371 | +1qln_1_R | ||
1372 | +3cw1_1_X | ||
1373 | +3cw1_1_W | ||
1374 | +7b0y_1_A | ||
1375 | +6ogy_1_M | ||
1376 | +6ogy_1_N | ||
1377 | +6uej_1_B | ||
1378 | +6ywy_1_BB | ||
1379 | +5ytx_1_B | ||
1380 | +4g0a_1_H | ||
1381 | +6r9p_1_B | ||
1382 | +3koa_1_C | ||
1383 | +4n48_1_D | ||
1384 | +4n48_1_G | ||
1385 | +6kug_1_B | ||
1386 | +6ktc_1_V | ||
1387 | +6ole_1_U | ||
1388 | +6om0_1_U | ||
1389 | +6olg_1_BV | ||
1390 | +6oli_1_U | ||
1391 | +6om7_1_U | ||
1392 | +6w6l_1_U | ||
1393 | +6olz_1_BV | ||
1394 | +6olf_1_U | ||
1395 | +5lzd_1_X | ||
1396 | +6m7k_1_B | ||
1397 | +3cd6_1_4 | ||
1398 | +3cma_1_5 | ||
1399 | +6n9e_1_2W | ||
1400 | +1vqo_1_4 | ||
1401 | +1qvg_1_3 | ||
1402 | +3cme_1_5 | ||
1403 | +5lzd_1_W | ||
1404 | +5lze_1_W | ||
1405 | +5lzc_1_W | ||
1406 | +5lzb_1_W | ||
1407 | +3wzi_1_C | ||
1408 | +1n33_1_Z | ||
1409 | +6dti_1_W | ||
1410 | +3d2s_1_F | ||
1411 | +3d2s_1_H | ||
1412 | +5mrc_1_AA | ||
1413 | +5mre_1_AA | ||
1414 | +5mrf_1_AA | ||
1415 | +7jhy_1_Z | ||
1416 | +4wkr_1_C | ||
1417 | +4v99_1_EC | ||
1418 | +4v99_1_AC | ||
1419 | +4v99_1_BH | ||
1420 | +4v99_1_CH | ||
1421 | +4v99_1_AM | ||
1422 | +4v99_1_DC | ||
1423 | +4v99_1_JW | ||
1424 | +4v99_1_EH | ||
1425 | +4v99_1_BW | ||
1426 | +4v99_1_FW | ||
1427 | +4v99_1_AW | ||
1428 | +4v99_1_BC | ||
1429 | +4v99_1_BM | ||
1430 | +4v99_1_IC | ||
1431 | +4v99_1_EM | ||
1432 | +4v99_1_ER | ||
1433 | +4v99_1_IW | ||
1434 | +4v99_1_JH | ||
1435 | +4v99_1_JR | ||
1436 | +4v99_1_AH | ||
1437 | +4v99_1_GR | ||
1438 | +4v99_1_IR | ||
1439 | +4v99_1_BR | ||
1440 | +4v99_1_CW | ||
1441 | +4v99_1_HR | ||
1442 | +4v99_1_FH | ||
1443 | +4v99_1_HC | ||
1444 | +4v99_1_DW | ||
1445 | +4v99_1_GC | ||
1446 | +4v99_1_JC | ||
1447 | +4v99_1_DM | ||
1448 | +4v99_1_EW | ||
1449 | +4v99_1_AR | ||
1450 | +4v99_1_CR | ||
1451 | +4v99_1_JM | ||
1452 | +4v99_1_CC | ||
1453 | +4v99_1_IH | ||
1454 | +4v99_1_FR | ||
1455 | +4v99_1_CM | ||
1456 | +4v99_1_IM | ||
1457 | +4v99_1_FM | ||
1458 | +4v99_1_FC | ||
1459 | +4v99_1_GH | ||
1460 | +4v99_1_HM | ||
1461 | +4v99_1_HH | ||
1462 | +4v99_1_DR | ||
1463 | +4v99_1_HW | ||
1464 | +4v99_1_GW | ||
1465 | +4v99_1_DH | ||
1466 | +4v99_1_GM | ||
1467 | +6rt4_1_D | ||
1468 | +6rt4_1_C | ||
1469 | +6zvh_1_X | ||
1470 | +4dwa_1_D | ||
1471 | +6n6c_1_D | ||
1472 | +6n6j_1_C | ||
1473 | +6n6j_1_D | ||
1474 | +6p7q_1_E | ||
1475 | +6p7q_1_F | ||
1476 | +6p7q_1_D | ||
1477 | +6rcl_1_C | ||
1478 | +5jju_1_C | ||
1479 | +4ejt_1_G | ||
1480 | +6lkq_1_W | ||
1481 | +3qsu_1_P | ||
1482 | +3qsu_1_R | ||
1483 | +2xs7_1_B | ||
1484 | +1n38_1_B | ||
1485 | +4qvc_1_G | ||
1486 | +6mpf_1_W | ||
1487 | +6spc_1_A | ||
1488 | +6spe_1_A | ||
1489 | +6zvk_1_D2 | ||
1490 | +7a01_1_D2 | ||
1491 | +6fti_1_V | ||
1492 | +6ftj_1_V | ||
1493 | +6ftg_1_V | ||
1494 | +4g0a_1_G | ||
1495 | +4g0a_1_F | ||
1496 | +4g0a_1_E | ||
1497 | +2b2d_1_S | ||
1498 | +5hkc_1_C | ||
1499 | +1rmv_1_B | ||
1500 | +4qu7_1_X | ||
1501 | +4qu7_1_V | ||
1502 | +4qu7_1_U | ||
1503 | +6pmi_1_3 | ||
1504 | +6pmj_1_3 | ||
1505 | +5hjz_1_C | ||
2 | 6ydp_1_AA_1176-2737 | 1506 | 6ydp_1_AA_1176-2737 |
3 | 6ydw_1_AA_1176-2737 | 1507 | 6ydw_1_AA_1176-2737 |
4 | 7d1a_1_A_805-902 | 1508 | 7d1a_1_A_805-902 |
... | @@ -10,18 +1514,18 @@ | ... | @@ -10,18 +1514,18 @@ |
10 | 7o7z_1_AH_144-220 | 1514 | 7o7z_1_AH_144-220 |
11 | 4c9d_1_D_29-1 | 1515 | 4c9d_1_D_29-1 |
12 | 4c9d_1_C_29-1 | 1516 | 4c9d_1_C_29-1 |
13 | -7aih_1_1_2984-3610 | ||
14 | 7aih_1_1_2400-2963 | 1517 | 7aih_1_1_2400-2963 |
15 | -7ane_1_2_2489-3115 | 1518 | +7aih_1_1_2984-3610 |
16 | 7ane_1_2_1904-2468 | 1519 | 7ane_1_2_1904-2468 |
1520 | +7ane_1_2_2489-3115 | ||
17 | 5g2x_1_A_595-692 | 1521 | 5g2x_1_A_595-692 |
18 | -7aor_1_2_2589-3210 | ||
19 | 7aor_1_2_2020-2579 | 1522 | 7aor_1_2_2020-2579 |
1523 | +7aor_1_2_2589-3210 | ||
20 | 7a5p_1_2_259-449 | 1524 | 7a5p_1_2_259-449 |
21 | -7aor_1_A_2589-3210 | ||
22 | 7aor_1_A_2020-2579 | 1525 | 7aor_1_A_2020-2579 |
23 | -7am2_1_1_2491-3117 | 1526 | +7aor_1_A_2589-3210 |
24 | 7am2_1_1_1904-2470 | 1527 | 7am2_1_1_1904-2470 |
25 | -7ane_1_1_2489-3115 | 1528 | +7am2_1_1_2491-3117 |
26 | 7ane_1_1_1904-2468 | 1529 | 7ane_1_1_1904-2468 |
1530 | +7ane_1_1_2489-3115 | ||
27 | 6uz7_1_8_2140-2825 | 1531 | 6uz7_1_8_2140-2825 | ... | ... |
This diff could not be displayed because it is too large.
... | @@ -5,7 +5,7 @@ rm -rf latest_run.log errors.txt | ... | @@ -5,7 +5,7 @@ rm -rf latest_run.log errors.txt |
5 | 5 | ||
6 | # Run RNANet | 6 | # Run RNANet |
7 | bash -c 'time python3.8 ./RNAnet.py --3d-folder /home/lbecquey/Data/RNA/3D/ --seq-folder /home/lbecquey/Data/RNA/sequences/ -r 20.0 --no-homology --redundant --extract' > latest_run.log 2>&1 | 7 | bash -c 'time python3.8 ./RNAnet.py --3d-folder /home/lbecquey/Data/RNA/3D/ --seq-folder /home/lbecquey/Data/RNA/sequences/ -r 20.0 --no-homology --redundant --extract' > latest_run.log 2>&1 |
8 | -bash -c 'time python3.8 ./RNAnet.py --3d-folder /home/lbecquey/Data/RNA/3D/ --seq-folder /home/lbecquey/Data/RNA/sequences/ -r 20.0 --redundant --sina --extract -s --stats-opts="--wadley --distance-matrices" --archive' > latest_run.log 2>&1 | 8 | +bash -c 'time python3.8 ./RNAnet.py --3d-folder /home/lbecquey/Data/RNA/3D/ --seq-folder /home/lbecquey/Data/RNA/sequences/ -r 20.0 --redundant --extract -s --stats-opts="-r 20.0 --wadley --hire-rna --distance-matrices" --archive' >> latest_run.log 2>&1 |
9 | echo 'Compressing RNANet.db.gz...' >> latest_run.log | 9 | echo 'Compressing RNANet.db.gz...' >> latest_run.log |
10 | touch results/RNANet.db # update last modification date | 10 | touch results/RNANet.db # update last modification date |
11 | gzip -k /home/lbecquey/Projects/RNANet/results/RNANet.db # compress it | 11 | gzip -k /home/lbecquey/Projects/RNANet/results/RNANet.db # compress it | ... | ... |
scripts/automate_from_scratch.sh
0 → 100755
1 | +# This is a script supposed to be run periodically as a cron job | ||
2 | +# This one uses argument --from-scratch, so all is recomputed ! /!\ | ||
3 | +# run it one or twice a year, otherwise, the faster update runs should be enough. | ||
4 | + | ||
5 | +cd /home/lbecquey/Projects/RNANet | ||
6 | +rm -rf latest_run.log errors.txt | ||
7 | + | ||
8 | +# Run RNANet | ||
9 | +bash -c 'time python3.8 ./RNAnet.py --3d-folder /home/lbecquey/Data/RNA/3D/ --seq-folder /home/lbecquey/Data/RNA/sequences/ --from-scratch --ignore-issues -r 20.0 --no-homology --redundant --extract' > latest_run.log 2>&1 | ||
10 | +bash -c 'time python3.8 ./RNAnet.py --3d-folder /home/lbecquey/Data/RNA/3D/ --seq-folder /home/lbecquey/Data/RNA/sequences/ --from-scratch --ignore-issues -r 20.0 --redundant --extract -s --stats-opts="-r 20.0 --wadley --hire-rna --distance-matrices" --archive' >> latest_run.log 2>&1 | ||
11 | +echo 'Compressing RNANet.db.gz...' >> latest_run.log | ||
12 | +touch results/RNANet.db # update last modification date | ||
13 | +gzip -k /home/lbecquey/Projects/RNANet/results/RNANet.db # compress it | ||
14 | +rm -f results/RNANet.db-wal results/RNANet.db-shm # SQLite temporary files | ||
15 | + | ||
16 | +# Save the latest results | ||
17 | +export DATE=`date +%Y%m%d` | ||
18 | +echo "Creating new release in ./archive/ folder ($DATE)..." >> latest_run.log | ||
19 | +cp /home/lbecquey/Projects/RNANet/results/summary.csv /home/lbecquey/Projects/RNANet/archive/summary_latest.csv | ||
20 | +cp /home/lbecquey/Projects/RNANet/results/summary.csv "/home/lbecquey/Projects/RNANet/archive/summary_$DATE.csv" | ||
21 | +cp /home/lbecquey/Projects/RNANet/results/families.csv /home/lbecquey/Projects/RNANet/archive/families_latest.csv | ||
22 | +cp /home/lbecquey/Projects/RNANet/results/families.csv "/home/lbecquey/Projects/RNANet/archive/families_$DATE.csv" | ||
23 | +cp /home/lbecquey/Projects/RNANet/results/frequencies.csv /home/lbecquey/Projects/RNANet/archive/frequencies_latest.csv | ||
24 | +cp /home/lbecquey/Projects/RNANet/results/pair_types.csv /home/lbecquey/Projects/RNANet/archive/pair_types_latest.csv | ||
25 | +mv /home/lbecquey/Projects/RNANet/results/RNANet.db.gz /home/lbecquey/Projects/RNANet/archive/ | ||
26 | + | ||
27 | +# Init Seafile synchronization between RNANet library and ./archive/ folder (just the first time !) | ||
28 | +# seaf-cli sync -l 8e082c6e-b9ed-4b2f-9279-de2177134c57 -s https://entrepot.ibisc.univ-evry.fr -u l****.b*****y@univ-evry.fr -p ****************** -d archive/ | ||
29 | + | ||
30 | +# Sync in Seafile | ||
31 | +seaf-cli start >> latest_run.log 2>&1 | ||
32 | +echo 'Waiting 10m for SeaFile synchronization...' >> latest_run.log | ||
33 | +sleep 15m | ||
34 | +echo `seaf-cli status` >> latest_run.log | ||
35 | +seaf-cli stop >> latest_run.log 2>&1 | ||
36 | +echo 'We are '`date`', update completed.' >> latest_run.log | ||
37 | + |
... | @@ -36,6 +36,6 @@ for fam in families: | ... | @@ -36,6 +36,6 @@ for fam in families: |
36 | 36 | ||
37 | # Now re run RNANet normally. | 37 | # Now re run RNANet normally. |
38 | command = ["python3.8", "./RNAnet.py", "--3d-folder", path_to_3D_data, "--seq-folder", path_to_seq_data, "-r", "20.0", | 38 | command = ["python3.8", "./RNAnet.py", "--3d-folder", path_to_3D_data, "--seq-folder", path_to_seq_data, "-r", "20.0", |
39 | - "--redundant", "--sina", "--extract", "-s", "--stats-opts=\"--wadley --distance-matrices\""] | 39 | + "--redundant", "--extract", "-s", "--stats-opts=\"-r 20.0 --wadley --hire-rna --distance-matrices\""] |
40 | print(' '.join(command)) | 40 | print(' '.join(command)) |
41 | subprocess.run(command) | 41 | subprocess.run(command) |
... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
... | @@ -3,8 +3,9 @@ import subprocess, os, sys | ... | @@ -3,8 +3,9 @@ import subprocess, os, sys |
3 | 3 | ||
4 | # Put a list of problematic chains here, they will be properly deleted and recomputed | 4 | # Put a list of problematic chains here, they will be properly deleted and recomputed |
5 | problems = [ | 5 | problems = [ |
6 | - "1k73_1_A", | 6 | + "7nhm_1_A_1-2923" |
7 | - "1k73_1_B" | 7 | + "4wfa_1_X_1-2923" |
8 | + "4wce_1_X_1-2923" | ||
8 | ] | 9 | ] |
9 | 10 | ||
10 | # provide the path to your data folders, the RNANet.db file, and the RNANet.py file as arguments to this script | 11 | # provide the path to your data folders, the RNANet.db file, and the RNANet.py file as arguments to this script |
... | @@ -22,6 +23,7 @@ for p in problems: | ... | @@ -22,6 +23,7 @@ for p in problems: |
22 | 23 | ||
23 | # Remove the datapoints files and 3D files | 24 | # Remove the datapoints files and 3D files |
24 | subprocess.run(["rm", '-f', path_to_3D_data + f"/rna_mapped_to_Rfam/{p}.cif"]) | 25 | subprocess.run(["rm", '-f', path_to_3D_data + f"/rna_mapped_to_Rfam/{p}.cif"]) |
26 | + subprocess.run(["rm", '-f', path_to_3D_data + f"/rna_only/{p}.cif"]) | ||
25 | files = [ f for f in os.listdir(path_to_3D_data + "/datapoints") if p in f ] | 27 | files = [ f for f in os.listdir(path_to_3D_data + "/datapoints") if p in f ] |
26 | for f in files: | 28 | for f in files: |
27 | subprocess.run(["rm", '-f', path_to_3D_data + f"/datapoints/{f}"]) | 29 | subprocess.run(["rm", '-f', path_to_3D_data + f"/datapoints/{f}"]) |
... | @@ -38,14 +40,14 @@ for p in problems: | ... | @@ -38,14 +40,14 @@ for p in problems: |
38 | print(' '.join(command)) | 40 | print(' '.join(command)) |
39 | subprocess.run(command) | 41 | subprocess.run(command) |
40 | 42 | ||
41 | - command = ["python3.8", path_to_RNANet, "--3d-folder", path_to_3D_data, "--seq-folder", path_to_seq_data, "-r", "20.0", "--extract", "--only", p] | 43 | + command = ["python3.8", path_to_RNANet, "--3d-folder", path_to_3D_data, "--seq-folder", path_to_seq_data, "--redundant", "-r", "20.0", "--extract", "--only", p] |
42 | else: | 44 | else: |
43 | # Delete the chain from the database, and the associated nucleotides and re_mappings, using foreign keys | 45 | # Delete the chain from the database, and the associated nucleotides and re_mappings, using foreign keys |
44 | command = ["sqlite3", path_to_db, f"PRAGMA foreign_keys=ON; delete from chain where structure_id=\"{structure}\" and chain_name=\"{chain}\" and rfam_acc is null;"] | 46 | command = ["sqlite3", path_to_db, f"PRAGMA foreign_keys=ON; delete from chain where structure_id=\"{structure}\" and chain_name=\"{chain}\" and rfam_acc is null;"] |
45 | print(' '.join(command)) | 47 | print(' '.join(command)) |
46 | subprocess.run(command) | 48 | subprocess.run(command) |
47 | 49 | ||
48 | - command = ["python3.8", path_to_RNANet, "--3d-folder", path_to_3D_data, "--seq-folder", path_to_seq_data, "-r", "20.0", "--no-homology", "--extract", "--only", p] | 50 | + command = ["python3.8", path_to_RNANet, "--3d-folder", path_to_3D_data, "--seq-folder", path_to_seq_data, "--redundant", "-r", "20.0", "--no-homology", "--extract", "--only", p] |
49 | 51 | ||
50 | # Re-run RNANet | 52 | # Re-run RNANet |
51 | os.chdir(os.path.dirname(os.path.realpath(path_to_db)) + '/../') | 53 | os.chdir(os.path.dirname(os.path.realpath(path_to_db)) + '/../') | ... | ... |
... | @@ -7,7 +7,7 @@ | ... | @@ -7,7 +7,7 @@ |
7 | # Run this file if you want the base counts, pair-type counts, identity percents, etc | 7 | # Run this file if you want the base counts, pair-type counts, identity percents, etc |
8 | # in the database. | 8 | # in the database. |
9 | 9 | ||
10 | -import getopt, glob, json, os, sqlite3, shlex, subprocess, sys, warnings | 10 | +import getopt, json, os, sqlite3, shlex, subprocess, sys, warnings |
11 | import numpy as np | 11 | import numpy as np |
12 | import pandas as pd | 12 | import pandas as pd |
13 | import scipy.stats as st | 13 | import scipy.stats as st |
... | @@ -27,7 +27,6 @@ from tqdm import tqdm | ... | @@ -27,7 +27,6 @@ from tqdm import tqdm |
27 | from collections import Counter | 27 | from collections import Counter |
28 | from setproctitle import setproctitle | 28 | from setproctitle import setproctitle |
29 | from RNAnet import Job, read_cpu_number, sql_ask_database, sql_execute, warn, notify, init_with_tqdm, trace_unhandled_exceptions | 29 | from RNAnet import Job, read_cpu_number, sql_ask_database, sql_execute, warn, notify, init_with_tqdm, trace_unhandled_exceptions |
30 | -from geometric_stats import * | ||
31 | 30 | ||
32 | np.set_printoptions(threshold=sys.maxsize, linewidth=np.inf, precision=8) | 31 | np.set_printoptions(threshold=sys.maxsize, linewidth=np.inf, precision=8) |
33 | path_to_3D_data = "tobedefinedbyoptions" | 32 | path_to_3D_data = "tobedefinedbyoptions" |
... | @@ -38,6 +37,8 @@ res_thr = 20.0 # default: all structures | ... | @@ -38,6 +37,8 @@ res_thr = 20.0 # default: all structures |
38 | LSU_set = ("RF00002", "RF02540", "RF02541", "RF02543", "RF02546") # From Rfam CLAN 00112 | 37 | LSU_set = ("RF00002", "RF02540", "RF02541", "RF02543", "RF02546") # From Rfam CLAN 00112 |
39 | SSU_set = ("RF00177", "RF02542", "RF02545", "RF01959", "RF01960") # From Rfam CLAN 00111 | 38 | SSU_set = ("RF00177", "RF02542", "RF02545", "RF01959", "RF01960") # From Rfam CLAN 00111 |
40 | 39 | ||
40 | +from geometric_stats import * # after definition of the variables | ||
41 | + | ||
41 | @trace_unhandled_exceptions | 42 | @trace_unhandled_exceptions |
42 | def reproduce_wadley_results(carbon=4, show=False, sd_range=(1,4), res=2.0): | 43 | def reproduce_wadley_results(carbon=4, show=False, sd_range=(1,4), res=2.0): |
43 | """ | 44 | """ |
... | @@ -934,7 +935,7 @@ def par_distance_matrix(filelist, f, label, cm_coords, consider_all_atoms, s): | ... | @@ -934,7 +935,7 @@ def par_distance_matrix(filelist, f, label, cm_coords, consider_all_atoms, s): |
934 | coordinates = nt_3d_centers(filename, consider_all_atoms) | 935 | coordinates = nt_3d_centers(filename, consider_all_atoms) |
935 | if not len(coordinates): | 936 | if not len(coordinates): |
936 | # there is not nucleotides in the file, or no C1' atoms for example. | 937 | # there is not nucleotides in the file, or no C1' atoms for example. |
937 | - warn("No C1' atoms in " + filename) | 938 | + warn("No C1' atoms in " + filename.split('/')[-1] + ", ignoring") |
938 | return None, None, None | 939 | return None, None, None |
939 | except FileNotFoundError: | 940 | except FileNotFoundError: |
940 | return None, None, None | 941 | return None, None, None |
... | @@ -951,8 +952,8 @@ def par_distance_matrix(filelist, f, label, cm_coords, consider_all_atoms, s): | ... | @@ -951,8 +952,8 @@ def par_distance_matrix(filelist, f, label, cm_coords, consider_all_atoms, s): |
951 | try: | 952 | try: |
952 | coordinates_with_gaps.append(coordinates[i - nb_gap]) | 953 | coordinates_with_gaps.append(coordinates[i - nb_gap]) |
953 | except IndexError as e: | 954 | except IndexError as e: |
954 | - warn(f"{filename} : {s.seq} at position {i}, we get {e}.", error=True) | 955 | + warn(f"{filename.split('/')[-1]} : {s.seq} at position {i}, we get {e}.", error=True) |
955 | - exit(0) | 956 | + return None, None, None |
956 | 957 | ||
957 | # Build the pairwise distances | 958 | # Build the pairwise distances |
958 | d = np.zeros((len(s.seq), len(s.seq)), dtype=np.float32) | 959 | d = np.zeros((len(s.seq), len(s.seq)), dtype=np.float32) |
... | @@ -1099,7 +1100,7 @@ def get_avg_std_distance_matrix(f, consider_all_atoms, multithread=False): | ... | @@ -1099,7 +1100,7 @@ def get_avg_std_distance_matrix(f, consider_all_atoms, multithread=False): |
1099 | std = np.divide(std, counts, where=counts>0, out=np.full_like(std, np.NaN)) | 1100 | std = np.divide(std, counts, where=counts>0, out=np.full_like(std, np.NaN)) |
1100 | mask = np.invert(np.isnan(std)) | 1101 | mask = np.invert(np.isnan(std)) |
1101 | value = std[mask] - np.power(avg[mask], 2) | 1102 | value = std[mask] - np.power(avg[mask], 2) |
1102 | - if ((value[value<0] < -1e-2).any()): | 1103 | + if ((value[value < 0] < -1e-2).any()): |
1103 | warn("Erasing very negative variance value !") | 1104 | warn("Erasing very negative variance value !") |
1104 | value[value<0] = 0.0 # floating point problems ! | 1105 | value[value<0] = 0.0 # floating point problems ! |
1105 | std[mask] = np.sqrt(value) | 1106 | std[mask] = np.sqrt(value) |
... | @@ -1127,8 +1128,48 @@ def get_avg_std_distance_matrix(f, consider_all_atoms, multithread=False): | ... | @@ -1127,8 +1128,48 @@ def get_avg_std_distance_matrix(f, consider_all_atoms, multithread=False): |
1127 | if not multithread: | 1128 | if not multithread: |
1128 | idxQueue.put(thr_idx) # replace the thread index in the queue | 1129 | idxQueue.put(thr_idx) # replace the thread index in the queue |
1129 | setproctitle(f"RNANet statistics.py Worker {thr_idx+1} finished") | 1130 | setproctitle(f"RNANet statistics.py Worker {thr_idx+1} finished") |
1131 | + else: | ||
1132 | + # basically, for the rRNAs | ||
1133 | + # we delete the unique csv files for each chain, they wheight hundreds of gigabytes together | ||
1134 | + warn(f"Removing {f} ({label}) individual distance matrices, they weight too much. keeping the averages and standard deviations.") | ||
1135 | + for csv in glob.glob(runDir + '/results/distance_matrices/' + f + '_'+ label + "/*-" + f + ".csv"): | ||
1136 | + try: | ||
1137 | + os.remove(csv) | ||
1138 | + except FileNotFoundError: | ||
1139 | + pass | ||
1130 | return 0 | 1140 | return 0 |
1131 | 1141 | ||
1142 | +@trace_unhandled_exceptions | ||
1143 | +def measure_from_structure(f): | ||
1144 | + """ | ||
1145 | + Do geometric measures required on a given filename | ||
1146 | + """ | ||
1147 | + | ||
1148 | + name = f.split('.')[0] | ||
1149 | + | ||
1150 | + global idxQueue | ||
1151 | + thr_idx = idxQueue.get() | ||
1152 | + setproctitle(f"RNANet statistics.py Worker {thr_idx+1} measure_from_structure({f})") | ||
1153 | + | ||
1154 | + # Open the structure | ||
1155 | + with warnings.catch_warnings(): | ||
1156 | + # Ignore the PDB problems. This mostly warns that some chain is discontinuous. | ||
1157 | + warnings.simplefilter('ignore', Bio.PDB.PDBExceptions.PDBConstructionWarning) | ||
1158 | + warnings.simplefilter('ignore', Bio.PDB.PDBExceptions.BiopythonWarning) | ||
1159 | + parser = MMCIFParser() | ||
1160 | + s = parser.get_structure(f, os.path.abspath(path_to_3D_data+ "rna_only/" + f)) | ||
1161 | + | ||
1162 | + #pyle_measures(name, s, thr_idx) | ||
1163 | + measures_aa(name, s, thr_idx) | ||
1164 | + if DO_HIRE_RNA_MEASURES: | ||
1165 | + measures_hrna(name, s, thr_idx) | ||
1166 | + measures_hrna_basepairs(name, s, path_to_3D_data, thr_idx) | ||
1167 | + if DO_WADLEY_ANALYSIS: | ||
1168 | + measures_pyle(name, s, thr_idx) | ||
1169 | + | ||
1170 | + idxQueue.put(thr_idx) # replace the thread index in the queue | ||
1171 | + setproctitle(f"RNANet statistics.py Worker {thr_idx+1} finished") | ||
1172 | + | ||
1132 | def family_order(f): | 1173 | def family_order(f): |
1133 | # sort the RNA families so that the plots are readable | 1174 | # sort the RNA families so that the plots are readable |
1134 | 1175 | ||
... | @@ -1154,7 +1195,11 @@ def nt_3d_centers(cif_file, consider_all_atoms): | ... | @@ -1154,7 +1195,11 @@ def nt_3d_centers(cif_file, consider_all_atoms): |
1154 | try: | 1195 | try: |
1155 | structure = MMCIFParser().get_structure(cif_file, cif_file) | 1196 | structure = MMCIFParser().get_structure(cif_file, cif_file) |
1156 | except Exception as e: | 1197 | except Exception as e: |
1157 | - warn(f"{cif_file} : {e}", error=True) | 1198 | + warn(f"{cif_file.split('/')[-1]} : {e}", error=True) |
1199 | + with open(runDir + "/errors.txt", "a") as f: | ||
1200 | + f.write(f"Exception in nt_3d_centers({cif_file.split('/')[-1]})\n") | ||
1201 | + f.write(str(e)) | ||
1202 | + f.write("\n\n") | ||
1158 | return result | 1203 | return result |
1159 | for model in structure: | 1204 | for model in structure: |
1160 | for chain in model: | 1205 | for chain in model: |
... | @@ -1205,6 +1250,7 @@ def log_to_pbar(pbar): | ... | @@ -1205,6 +1250,7 @@ def log_to_pbar(pbar): |
1205 | pbar.update(1) | 1250 | pbar.update(1) |
1206 | return update | 1251 | return update |
1207 | 1252 | ||
1253 | +@trace_unhandled_exceptions | ||
1208 | def process_jobs(joblist): | 1254 | def process_jobs(joblist): |
1209 | """ | 1255 | """ |
1210 | Starts a Pool to run the Job() objects in joblist. | 1256 | Starts a Pool to run the Job() objects in joblist. |
... | @@ -1302,7 +1348,7 @@ if __name__ == "__main__": | ... | @@ -1302,7 +1348,7 @@ if __name__ == "__main__": |
1302 | os.makedirs(runDir + "/results/figures/GMM/HiRE-RNA/angles/", exist_ok=True) | 1348 | os.makedirs(runDir + "/results/figures/GMM/HiRE-RNA/angles/", exist_ok=True) |
1303 | os.makedirs(runDir + "/results/figures/GMM/HiRE-RNA/torsions/", exist_ok=True) | 1349 | os.makedirs(runDir + "/results/figures/GMM/HiRE-RNA/torsions/", exist_ok=True) |
1304 | os.makedirs(runDir + "/results/figures/GMM/HiRE-RNA/basepairs/", exist_ok=True) | 1350 | os.makedirs(runDir + "/results/figures/GMM/HiRE-RNA/basepairs/", exist_ok=True) |
1305 | - elif opt == "rescan-nmodes": | 1351 | + elif opt == "--rescan-nmodes": |
1306 | RESCAN_GMM_COMP_NUM = True | 1352 | RESCAN_GMM_COMP_NUM = True |
1307 | 1353 | ||
1308 | # Load mappings. famlist will contain only families with structures at this resolution threshold. | 1354 | # Load mappings. famlist will contain only families with structures at this resolution threshold. |
... | @@ -1388,7 +1434,6 @@ if __name__ == "__main__": | ... | @@ -1388,7 +1434,6 @@ if __name__ == "__main__": |
1388 | if path.isfile(path_to_3D_data + "datapoints/" + f.split('.')[0]): | 1434 | if path.isfile(path_to_3D_data + "datapoints/" + f.split('.')[0]): |
1389 | joblist.append(Job(function=measure_from_structure, args=(f,), how_many_in_parallel=nworkers)) # All-atom distances | 1435 | joblist.append(Job(function=measure_from_structure, args=(f,), how_many_in_parallel=nworkers)) # All-atom distances |
1390 | 1436 | ||
1391 | - | ||
1392 | process_jobs(joblist) | 1437 | process_jobs(joblist) |
1393 | 1438 | ||
1394 | # Now process the memory-heavy tasks family by family | 1439 | # Now process the memory-heavy tasks family by family |
... | @@ -1412,24 +1457,23 @@ if __name__ == "__main__": | ... | @@ -1412,24 +1457,23 @@ if __name__ == "__main__": |
1412 | general_stats() | 1457 | general_stats() |
1413 | os.makedirs(runDir+"/results/figures/GMM/", exist_ok=True) | 1458 | os.makedirs(runDir+"/results/figures/GMM/", exist_ok=True) |
1414 | os.makedirs(runDir+"/results/geometry/json/", exist_ok=True) | 1459 | os.makedirs(runDir+"/results/geometry/json/", exist_ok=True) |
1415 | - concat_dataframes(runDir + '/results/geometry/all-atoms/distances/', 'dist_atoms.csv') | 1460 | + concat_dataframes(runDir + '/results/geometry/all-atoms/distances/', 'dist_atoms.csv', nworkers) |
1416 | if DO_HIRE_RNA_MEASURES: | 1461 | if DO_HIRE_RNA_MEASURES: |
1417 | - concat_dataframes(runDir + '/results/geometry/HiRE-RNA/distances/', 'distances_HiRERNA.csv') | 1462 | + concat_dataframes(runDir + '/results/geometry/HiRE-RNA/distances/', 'distances_HiRERNA.csv', nworkers) |
1418 | - concat_dataframes(runDir + '/results/geometry/HiRE-RNA/angles/', 'angles_HiRERNA.csv') | 1463 | + concat_dataframes(runDir + '/results/geometry/HiRE-RNA/angles/', 'angles_HiRERNA.csv', nworkers) |
1419 | - concat_dataframes(runDir + '/results/geometry/HiRE-RNA/torsions/', 'torsions_HiRERNA.csv') | 1464 | + concat_dataframes(runDir + '/results/geometry/HiRE-RNA/torsions/', 'torsions_HiRERNA.csv', nworkers) |
1420 | - concat_dataframes(runDir + '/results/geometry/HiRE-RNA/basepairs/', 'basepairs_HiRERNA.csv') | 1465 | + concat_dataframes(runDir + '/results/geometry/HiRE-RNA/basepairs/', 'basepairs_HiRERNA.csv', nworkers) |
1421 | if DO_WADLEY_ANALYSIS: | 1466 | if DO_WADLEY_ANALYSIS: |
1422 | - concat_dataframes(runDir + '/results/geometry/Pyle/distances/', 'distances_pyle.csv') | 1467 | + concat_dataframes(runDir + '/results/geometry/Pyle/distances/', 'distances_pyle.csv', nworkers) |
1423 | - concat_dataframes(runDir + '/results/geometry/Pyle/angles/', 'flat_angles_pyle.csv') | 1468 | + concat_dataframes(runDir + '/results/geometry/Pyle/angles/', 'flat_angles_pyle.csv', nworkers) |
1424 | joblist = [] | 1469 | joblist = [] |
1425 | - joblist.append(Job(function=gmm_aa_dists, args=(RESCAN_GMM_COMP_NUM))) | 1470 | + joblist.append(Job(function=gmm_aa_dists, args=(RESCAN_GMM_COMP_NUM,))) |
1426 | - joblist.append(Job(function=gmm_aa_torsions, args=(RESCAN_GMM_COMP_NUM))) | 1471 | + joblist.append(Job(function=gmm_aa_torsions, args=(RESCAN_GMM_COMP_NUM, res_thr))) |
1427 | if DO_HIRE_RNA_MEASURES: | 1472 | if DO_HIRE_RNA_MEASURES: |
1428 | - joblist.append(Job(function=gmm_hrna, args=(RESCAN_GMM_COMP_NUM))) | 1473 | + joblist.append(Job(function=gmm_hrna, args=(RESCAN_GMM_COMP_NUM,))) |
1429 | - joblist.append(Job(function=gmm_hrna_basepairs, args=(RESCAN_GMM_COMP_NUM))) | 1474 | + joblist.append(Job(function=gmm_hrna_basepairs, args=(RESCAN_GMM_COMP_NUM,))) |
1430 | if DO_WADLEY_ANALYSIS: | 1475 | if DO_WADLEY_ANALYSIS: |
1431 | - joblist.append(Job(function=gmm_pyle, args=(RESCAN_GMM_COMP_NUM))) | 1476 | + joblist.append(Job(function=gmm_pyle, args=(RESCAN_GMM_COMP_NUM, res_thr))) |
1432 | - if len(joblist): | 1477 | + process_jobs(joblist) |
1433 | - process_jobs(joblist) | ||
1434 | merge_jsons() | 1478 | merge_jsons() |
1435 | 1479 | ... | ... |
-
Please register or login to post a comment