Louis BECQUEY

v pre-1.6b


Former-commit-id: 33fafe91
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
......
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
......