Louis BECQUEY

merge

...@@ -23,5 +23,11 @@ results/* ...@@ -23,5 +23,11 @@ results/*
23 log_of_the_run.sh 23 log_of_the_run.sh
24 logBadDesc.txt 24 logBadDesc.txt
25 gurobi.log 25 gurobi.log
26 -IL* 26 +temp/*
27 -HL* 27 +
28 +# data
29 +data/modules/BGSU/HL/3.2/diagnostic/*
30 +data/modules/BGSU/HL/3.2/lib/*
31 +data/modules/BGSU/IL/3.2/diagnostic/*
32 +data/modules/BGSU/IL/3.2/lib/*
33 +data/modules/DESC/*.desc
...\ No newline at end of file ...\ No newline at end of file
......
...@@ -2,9 +2,6 @@ ...@@ -2,9 +2,6 @@
2 CPLEXDir="/opt/ibm/ILOG/CPLEX_Studio128" 2 CPLEXDir="/opt/ibm/ILOG/CPLEX_Studio128"
3 IEIGEN="/usr/local/include/eigen3" 3 IEIGEN="/usr/local/include/eigen3"
4 INUPACK="/usr/local/include/nupack" 4 INUPACK="/usr/local/include/nupack"
5 +biorseoDir="/home/persalteas/Software/biorseo"
5 jar3dexec="/home/persalteas/Software/jar3dbin/jar3d_2014-12-11.jar" 6 jar3dexec="/home/persalteas/Software/jar3dbin/jar3d_2014-12-11.jar"
6 -ILmotifDir="/home/persalteas/Data/RNA/motifs/Matlab_results/IL/3.2/lib"
7 -HLmotifDir="/home/persalteas/Data/RNA/motifs/Matlab_results/HL/3.2/lib"
8 -descfolder="/home/persalteas/Data/RNA/motifs/No_Redondance_DESC/"
9 bypdir="/home/persalteas/Software/BayesPairing/bayespairing/src" 7 bypdir="/home/persalteas/Software/BayesPairing/bayespairing/src"
10 -biorseoDir="/home/persalteas/Software/biorseo"
......
1 -This is a bi-objective integer programming algorithm. 1 +Biorseo (Bi-Objective RNA Structure Efficient Optimizer)
2 -It predicts the secondary structure of a RNA sequence with pieces of 3D information (non-canonical contacts) at some places, 2 +===================================
3 -by identifying zones that can fold like known motifs from the RNA 3D Motif Atlas. 3 +
4 +This tool predicts the secondary structure of a RNA sequence with pieces of 3D information (non-canonical contacts) at some places,
5 +by identifying zones that can fold like known modules from data like the RNA 3D Motif Atlas or Rna3Dmotifs.
6 +
7 +Contact : louis.becquey@univ-evry.fr
4 8
5 1/ How it works 9 1/ How it works
6 =================================== 10 ===================================
...@@ -8,24 +12,123 @@ INPUT: ...@@ -8,24 +12,123 @@ INPUT:
8 - An RNA sequence (tested with sequences ~100 bases) 12 - An RNA sequence (tested with sequences ~100 bases)
9 13
10 THEN 14 THEN
11 -- Identifies possible 2D folds with RNAsubopt. 15 +- **Pattern-matching step** : Find all possible occurrences of known RNAmodules in the query sequence, by finding subsequences of the querythat score well with the probabilistic models of the modules (like JAR3D, or BayesPairing)
12 -- Knowing possible 2D folds, locate every possibly unpaired loop (hairpin loop, internal loop, multiple loop...) 16 +- **Constraints definition step** : Define constraints on the secondary structure imposed by modules if they would be included (in this case, some of the canonical base-pairs are forbidden)
13 -- align each unpaired loop to the catalogue of models of known RNA motifs (The 3D Motif Atlas of the BGSU RNA group) 17 +- **Solve a bi-objective IP problem** : Find a secondary structure that satisfies as much as possible both the expected accuracy of the structure and a criterion taking into account module inclusions, by solving a bi-objective integer linear programming problem, using the previous constraints defined in the previous step.
14 -- retrieve a list of potential motif-insertion-sites in the RNA sequence. Use them to define the constraints for the IP problem.
15 -- Solve a bi-objective IP problem:
16 - * Maximize the expected accuracy of the secondary structure,
17 - * Maximize the number and size of motifs inserted in the structure.
18 18
19 OUTPUT: 19 OUTPUT:
20 -- A set of secondary structures from the pareto front, 20 +- A set of secondary structures from the Pareto front,
21 -- The list of known motif inserted in the corresponding structures (and the non-canonical contacts) 21 +- The list of known modules inserted inplace in the corresponding structures
22 -- (lower score structures from k-Pareto sets, not implemented yet.) 22 +
23 +2/ The different models
24 +==================================
25 +MODULE SOURCES
26 +
27 +Biorseo can be used with two modules datasets (yet):
28 +* Rna3Dmotifs (from the work of *Djelloul & Denise, 2008*), but with the 3D data of 2018
29 +* The RNA 3D Motif Atlas of BGSU's RNA lab (*Petrov et al, 2013*, see http://rna.bgsu.edu/rna3dhub/motifs/)
30 +* RNA-Bricks 2 or CaRNAval could theoretically be used, but are not supported (yet). You might write your own API.
23 31
24 -2/ Installation 32 +PATTERN MATCHING STEP
33 +- Use **simple pattern matching**. Rna3Dmotifs modules are available with sequence information. We use regular expressions to find those known loops in your query. This is the approach of RNA-MoIP (*Reinharz et al, 2012*), we deal the same way with short components and wildcards.
34 +
35 +- Use **JAR3D**. The RNA 3D Motif Atlas modules can be scored against a given loop sequence by an hybrid SCFG/MRF method (*Zirbel et al, 2015*). This first requires to identify potential loops, which is achieved by a run of RNAsubopt first.
36 +
37 +- Use **Bayesian networks with BayesPairing**. To accurately model probability dependancies between nucleotides, one can use BayesPairing to build bayesian networks of the modules (the RNA 3D Motif Atlas and Rna3Dmotifs are both supported). Then, sequences are sampled with the Bayesian network of a module, and we use regular expressions to find them in your query.
38 +
39 +OBJECTIVE FUNCTIONS FOR THE MODULE INSERTION CRITERIA
40 +
41 +* **Function A** : weights a module by its squared number of nucleotides (like RNA-MoIP).
42 +* **Function B** : weights a module by its number of components (strands) and penalizes it by the log^(_2) of its nucleotide size.
43 +* **Function C** : weights a module by its insertion site score (JAR3D or BayesPairing score).
44 +* **Function D** : weights a module by its number of components (strands) and insertion site score (JAR3D or BayesPairing score), and penalizes it by the log^(_2) of its nucleotide size.
45 +
46 +3/ Recommended uses
25 ================================== 47 ==================================
26 -- Download and install RNAsubopt from the ViennaRNA package (https://www.tbi.univie.ac.at/RNA/) 48 +- If **you know you have no pseudoknot**:
27 -- Download and install IBM ILOG Cplex optimization studio (https://www.ibm.com/analytics/cplex-optimizer), free academic account required 49 + * Benchmarks show Biorseo does not perform better than simpler tools like RNAsubopt alone. Please use RNAsubopt (ViennaRNA package) or Fold (RNAstructure package).
50 +
51 +- If you **might expect a pseudoknot, or don't know**:
52 + * The most promising method is the use of direct pattern matching with Rna3Dmotifs and function B. But this method is sometimes subject to combinatorial explosion issues. If you have a long RNA or a large number of loops, don't use it. Example:
53 + `./bin/biorseo -s PDB_00304.fa --descfolder ./data/modules/DESC --type B -o PDB_00304.rawB `
54 +
55 + * The use of the RNA 3D Motif Atlas placed by JAR3D and scored with function B is not subject to combinatorial issues, but performs a bit worse. It also returns less solutions. Example:
56 + `./bin/biorseo -s PDB_00304.fa --jar3dcsv PDB_00304.sites.csv --type B -o PDB_00304.jar3dB`
57 +
58 +
59 +4/ Installation
60 +==================================
61 +### DEPENDENCIES
62 +- Make sure you have Python 3.5+, Cmake, and a C++ compiler installed on your distribution.
63 +- Install automake and libboost-filesystem.
64 +- Download and install [IBM ILOG Cplex optimization studio](https://www.ibm.com/analytics/cplex-optimizer), an academic account is required. The free version is too limited, you must register as academic. This is also free.
65 +- Download and install Eigen: Get the latest Eigen archive from http://eigen.tuxfamily.org. Unpack it, and install it.
66 +```bash
67 +wget http://bitbucket.org/eigen/eigen/get/3.3.7.tar.gz -O eigen_src.tar.gz
68 +tar -xf eigen_src.tar.gz
69 +cd eigen-eigen-323c052e1731
70 +mkdir build
71 +cd build
72 +cmake ..
73 +sudo make install
74 +```
75 +- Download and install NUPACK: Register on [Nupack's website](http://www.nupack.org/downloads/source), download the source, unpack it, build it, and install it:
76 +```bash
77 +wget http://www.nupack.org/downloads/serve_file/nupack3.2.2.tar.gz
78 +tar -xf nupack3.2.2.tar.gz
79 +cd nupack3.2.2
80 +mkdir build
81 +cd build
82 +cmake ..
83 +make -j4
84 +sudo make install
85 +```
86 +
87 +### OPTIONAL DEPENDENCIES FOR USE OF JAR3D
88 +- Download and install RNAsubopt from the [ViennaRNA package](https://www.tbi.univie.ac.at/RNA/).
28 - Download and install Java runtime (Tested with Java 10) 89 - Download and install Java runtime (Tested with Java 10)
29 -- Download and install the latest JAR3D executable "jar3d_releasedate.jar" and motif models in this folder (http://rna.bgsu.edu/data/jar3d/models/) 90 +- Download the latest JAR3D executable "*jar3d_releasedate.jar*", and latest IL and HL models from [here](http://rna.bgsu.edu/data/jar3d/models/).
30 - Note that for HL and ILs, only the latest version is required (not all the versions provided in the folders). 91 + Note that only the latest version is required (not all the versions provided in the folders).
31 -- Download and install a C++ compiler and building dependencies and utilities (g++ or clang, automake, libboost) 92 +
93 +### OPTIONAL DEPENDENCIES FOR USE OF BAYESPAIRING
94 +- Download and install RNAfold from the [ViennaRNA package](https://www.tbi.univie.ac.at/RNA/).
95 +- Make sure you have Python 3.5+ with packages networkx, numpy, regex, wrapt and biopython
96 +- Clone the latest BayesPairing Git repo, and install it :
97 +```
98 +git clone http://jwgitlab.cs.mcgill.ca/sarrazin/rnabayespairing.git BayesPairing
99 +cd BayesPairing
100 +pip install .
101 +```
102 +
103 +### RNA3DMOTIFS DATA
104 +
105 +If you use Rna3Dmotifs, you need to get RNA-MoIP's .DESC dataset: download it from [GitHub](https://github.com/McGill-CSB/RNAMoIP/blob/master/CATALOGUE.tgz). Put all the .desc from the `Non_Redundant_DESC` folder into `./data/modules/DESC`. Otherwise, you also can run Rna3Dmotifs' `catalog` program to get your own DESC modules collection from updated 3D data (download [Rna3Dmotifs](https://rna3dmotif.lri.fr/Rna3Dmotif.tgz)). You also need to move the final DESC files into `./data/modules/DESC`.
106 +
107 +### THE RNA 3D MOTIF ATLAS DATA
108 +
109 +If not done during the installation of JAR3D, get the latest version of the HL and IL module models from the [BGSU website](http://rna.bgsu.edu/data/jar3d/models/) and extract the Zip files. Put the HL and IL folders into `./data/modules/BGSU`.
110 +
111 +### BUILDING
112 +* Clone this git repository : `git clone https://github.com/persalteas/biorseo.git` and `cd biorseo`.
113 +* Edit the file `EditMe` to set the paths of the above dependencies and data. Fileds that you will not use can be ignored (ex: bypdir if you do not use BayesPairing). Example of my setup:
114 + * CPLEXDir="/opt/ibm/ILOG/CPLEX_Studio128_Student"
115 + * IEIGEN="/usr/local/include/eigen3"
116 + * INUPACK="/usr/local/include/nupack"
117 + * jar3dexec="/nhome/siniac/lbecquey/Software/jar3dbin/jar3d_2014-12-11.jar"
118 + * ILmotifDir="/nhome/siniac/lbecquey/Data/RNA/motifs/BGSU/Matlab_results/IL/3.2/lib"
119 + * HLmotifDir="/nhome/siniac/lbecquey/Data/RNA/motifs/BGSU/Matlab_results/HL/3.2/lib"
120 + * descfolder="/nhome/siniac/lbecquey/Data/RNA/motifs/Rna3Dmotifs/No_Redondance_DESC/"
121 + * bypdir="/nhome/siniac/lbecquey/Software/BayesPairing/bayespairing/src"
122 + * biorseoDir="/nhome/siniac/lbecquey/Software/biorseo"
123 +* You might want to edit `Makefile` if you are not using clang as compiler. For example, if you use g++, replace clang++ by g++.
124 +* Build it: `make -j4`
125 +* The working executable file is `./bin/biorseo`.
126 +
127 +### BAYESPAIRING USERS: PREPARE BAYESIAN NETWORKS
128 +We run an example job for it to build the bayesian networks of our modules.
129 +```
130 +cd rnabayespairing/src
131 +python3 parse_sequences.py -d rna3dmotif -seq ACACGGGGUAAGAGCUGAACGCAUCUAAGCUCGAAACCCACUUGGAAAAGAGACACCGCCGAGGUCCCGCGUACAAGACGCGGUCGAUAGACUCGGGGUGUGCGCGUCGAGGUAACGAGACGUUAAGCCCACGAGCACUAACAGACCAAAGCCAUCAU -ss ".................................................................((...............)xxxx(...................................................)xxx).............."
132 +```
133 +Use `-d rna3dmotif` or `-d 3dmotifatlas` depending on the module source you are planning to use.
134 +This is a quite long step, but the bayesian networks will be ready for all the future uses.
......
1 ->E.coli_alpha_operon_mRNA
2 -UGUGCGUUUCCAUUUGAGUAUCCUGAAAACGGGCUUUUCAGCAUGGAACGUACAUAUUAAAUAGUAGGAGUGCAUAGUGGCCCGUAUAGCAGGCAUUAACAUUCCUGA
3 -(((((((.(((((........[[[[....[[[[....{{{{.))))))))))))..........................]]]].....]]]]...........}}}}
...\ No newline at end of file ...\ No newline at end of file
1 ->E.coli_alpha_operon_mRNA
2 -UGUGCGUUUCCAUUUGAGUAUCCUGAAAACGGGCUUUUCAGCAUGGAACGUACAUAUUAAAUAGUAGGAGUGCAUAGUGGCCCGUAUAGCAGGCAUUAACAUUCCUGA
1 -E.coli_alpha_operon_mRNA
2 -UGUGCGUUUCCAUUUGAGUAUCCUGAAAACGGGCUUUUCAGCAUGGAACGUACAUAUUAAAUAGUAGGAGUGCAUAGUGGCCCGUAUAGCAGGCAUUAACAUUCCUGA
3 -((.((.((..(((((.((...((........))...)).)).))).)).)).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 1F1T.A.4 + 1FKA.A.92 + 1YIT.0.13 + 2BTE.E.3 + 2OM7.B.1 + 2VHN.B.71 + 3IZ9.A.80 + 3IZE.A.89 + 3IZE.A.89 + 3IZF.A.191 + 3PYO.A.85 475.0000000 24.6241106
4 -((.((.((..(((((.((...((........))...)).)).))).)).)).))..((..[[))((.((.((..((.((.((.((]].)).)))).)).)).)).)). + 1F1T.A.4 + 1FKA.A.92 + 2BTE.E.3 + 2OM7.B.1 + 2VHN.B.71 + 3IZ9.A.80 + 3IZE.A.89 + 3IZE.A.89 + 3IZF.A.191 + 3PYO.A.85 450.0000000 24.6634106
5 -((.((.((..(((((.((...((........))...)).)).))).)).)).))..((..[[))((.((.((..((.((.((.((]].)).)))).)).)).)).)). + 1F1T.A.4 + 1FKA.A.92 + 2BTE.E.3 + 2OM7.B.1 + 2VHN.B.71 + 3IZ9.A.80 + 3IZE.A.89 + 3IZF.A.191 + 3O58.1.74 + 3PYO.A.85 450.0000000 24.6634106
6 -((.((.((..(((((.((...((........))...)).)).))).)).)).))..((..[[))((.((.((..((.((.((.((]].)).)))).)).)).)).)). + 1FKA.A.92 + 2BTE.E.3 + 2OM7.B.1 + 2V49.A.72 + 2VHN.B.71 + 3IZ9.A.196 + 3IZ9.A.80 + 3IZF.A.191 + 3O58.1.74 + 3O58.1.74 450.0000000 24.6634106
7 -((.((.((..(((((.((...((........))...)).)).))).)).)).))..((..[[))((.((.((..((.((.((.((]].)).)))).)).)).)).)). + 1FKA.A.92 + 2BTE.E.3 + 2OM7.B.1 + 2V49.A.72 + 2VHN.B.71 + 3IZ9.A.196 + 3IZ9.A.80 + 3IZE.A.89 + 3IZE.A.89 + 3IZF.A.191 450.0000000 24.6634106
8 -((.((.((..(((((.((...((........))...)).)).))).)).)).))..((..[[))((.((.((..((.((.((.((]].)).)))).)).)).)).)). + 1FKA.A.92 + 2BTE.E.3 + 2OM7.B.1 + 2VHN.B.71 + 3IZ9.A.196 + 3IZ9.A.80 + 3IZE.A.89 + 3IZF.A.191 + 3O58.1.74 + 3PYO.A.85 450.0000000 24.6634106
9 -((.((.((..(((((.((...((........))...)).)).))).)).)).))..((..[[))((.((.((..((.((.((.((]].)).)))).)).)).)).)). + 1F1T.A.4 + 1FKA.A.92 + 2BTE.E.3 + 2OM7.B.1 + 2VHN.B.71 + 3IZ9.A.80 + 3IZE.A.89 + 3IZF.A.191 + 3O58.1.74 + 3PYO.A.85 450.0000000 24.6634106
10 -((.((.((..(((((.((...((........))...)).)).))).)).)).))..((..[[))((.((.((..((.((.((.((]].)).)))).)).)).)).)). + 1F1T.A.4 + 1FKA.A.92 + 2BTE.E.3 + 2OM7.B.1 + 2VHN.B.71 + 3IZ9.A.80 + 3IZF.A.191 + 3O58.1.74 + 3O58.1.74 + 3PYO.A.85 450.0000000 24.6634106
11 -((.((.((..(((((.((...((........))...)).)).))).)).)).))..((..[[))((.((.((..((.((.((.((]].)).)))).)).)).)).)). + 1FKA.A.92 + 2BTE.E.3 + 2OM7.B.1 + 2VHN.B.71 + 3IZ9.A.196 + 3IZ9.A.80 + 3IZE.A.89 + 3IZF.A.191 + 3O58.1.74 + 3PYO.A.85 450.0000000 24.6634106
12 -((.((.((..(((((.((...((........))...)).)).))).)).)).))..((..[[))((.((.((..((.((.((.((]].)).)))).)).)).)).)). + 1F1T.A.4 + 1FKA.A.92 + 2BTE.E.3 + 2OM7.B.1 + 2V49.A.72 + 2VHN.B.71 + 3IZ9.A.80 + 3IZF.A.191 + 3O58.1.74 + 3O58.1.74 450.0000000 24.6634106
13 -((.((.((..(((((.((...((........))...)).)).))).)).)).))..((..[[))((.((.((..((.((.((.((]].)).)))).)).)).)).)). + 1FKA.A.92 + 2BTE.E.3 + 2OM7.B.1 + 2V49.A.72 + 2VHN.B.71 + 3IZ9.A.196 + 3IZ9.A.80 + 3IZE.A.89 + 3IZF.A.191 + 3O58.1.74 450.0000000 24.6634106
14 -((.((.((..(((((.((...((........))...)).)).))).)).)).))..((..[[))((.((.((..((.((.((.((]].)).)))).)).)).)).)). + 1FKA.A.92 + 2BTE.E.3 + 2OM7.B.1 + 2VHN.B.71 + 3IZ9.A.196 + 3IZ9.A.80 + 3IZF.A.191 + 3O58.1.74 + 3O58.1.74 + 3PYO.A.85 450.0000000 24.6634106
15 -((.((.((..(((((.((...((........))...)).)).))).)).)).))..((..[[))((.((.((..((.((.((.((]].)).)))).)).)).)).)). + 1F1T.A.4 + 1FKA.A.92 + 2BTE.E.3 + 2OM7.B.1 + 2V49.A.72 + 2VHN.B.71 + 3IZ9.A.80 + 3IZE.A.89 + 3IZE.A.89 + 3IZF.A.191 450.0000000 24.6634106
16 -((.((.((..(((((.((...((........))...)).)).))).)).)).))..((..[[))((.((.((..((.((.((.((]].)).)))).)).)).)).)). + 1FKA.A.92 + 2BTE.E.3 + 2OM7.B.1 + 2V49.A.72 + 2VHN.B.71 + 3IZ9.A.196 + 3IZ9.A.80 + 3IZE.A.89 + 3IZF.A.191 + 3O58.1.74 450.0000000 24.6634106
17 -((.((.((..(((((.((...((........))...)).)).))).)).)).))..((..[[))((.((.((..((.((.((.((]].)).)))).)).)).)).)). + 1F1T.A.4 + 1FKA.A.92 + 2BTE.E.3 + 2OM7.B.1 + 2V49.A.72 + 2VHN.B.71 + 3IZ9.A.80 + 3IZE.A.89 + 3IZF.A.191 + 3O58.1.74 450.0000000 24.6634106
18 -((.((.((..(((((.((...((........))...)).)).))).)).)).))..((..[[))((.((.((..((.((.((.((]].)).)))).)).)).)).)). + 1F1T.A.4 + 1FKA.A.92 + 2BTE.E.3 + 2OM7.B.1 + 2V49.A.72 + 2VHN.B.71 + 3IZ9.A.80 + 3IZE.A.89 + 3IZF.A.191 + 3O58.1.74 450.0000000 24.6634106
19 -((.((.((..(((((.((...((........))...)).)).))).)).)).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 1F1T.A.4 + 1FKA.A.92 + 1YIT.0.13 + 2BTE.E.3 + 2OM7.B.1 + 2VHN.B.71 + 3IZ9.A.80 + 3IZE.A.89 + 3IZF.A.191 + 3O58.1.74 + 3PYO.A.85 475.0000000 24.6241106
20 -((.((.((..(((((.((...((........))...)).)).))).)).)).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 1F1T.A.4 + 1FKA.A.92 + 1YIT.0.13 + 2BTE.E.3 + 2OM7.B.1 + 2VHN.B.71 + 3IZ9.A.80 + 3IZE.A.89 + 3IZF.A.191 + 3O58.1.74 + 3PYO.A.85 475.0000000 24.6241106
21 -((.((.((..(((((.((...((........))...)).)).))).)).)).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 1FKA.A.92 + 1YIT.0.13 + 2BTE.E.3 + 2OM7.B.1 + 2V49.A.72 + 2VHN.B.71 + 3IZ9.A.196 + 3IZ9.A.80 + 3IZF.A.191 + 3O58.1.74 + 3O58.1.74 475.0000000 24.6241106
22 -((.((.((..(((((.((...((........))...)).)).))).)).)).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 1FKA.A.92 + 1YIT.0.13 + 2BTE.E.3 + 2OM7.B.1 + 2V49.A.72 + 2VHN.B.71 + 3IZ9.A.196 + 3IZ9.A.80 + 3IZE.A.89 + 3IZE.A.89 + 3IZF.A.191 475.0000000 24.6241106
23 -((.((.((..(((((.((...((........))...)).)).))).)).)).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 1FKA.A.92 + 1YIT.0.13 + 2BTE.E.3 + 2OM7.B.1 + 2VHN.B.71 + 3IZ9.A.196 + 3IZ9.A.80 + 3IZF.A.191 + 3O58.1.74 + 3O58.1.74 + 3PYO.A.85 475.0000000 24.6241106
24 -((.((.((..(((((.((...((........))...)).)).))).)).)).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 1F1T.A.4 + 1FKA.A.92 + 1YIT.0.13 + 2BTE.E.3 + 2OM7.B.1 + 2V49.A.72 + 2VHN.B.71 + 3IZ9.A.80 + 3IZF.A.191 + 3O58.1.74 + 3O58.1.74 475.0000000 24.6241106
25 -((.((.((..(((((.((...((........))...)).)).))).)).)).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 1FKA.A.92 + 1YIT.0.13 + 2BTE.E.3 + 2OM7.B.1 + 2VHN.B.71 + 3IZ9.A.196 + 3IZ9.A.80 + 3IZE.A.89 + 3IZE.A.89 + 3IZF.A.191 + 3PYO.A.85 475.0000000 24.6241106
26 -((.((.((..(((((.((...((........))...)).)).))).)).)).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 1FKA.A.92 + 1YIT.0.13 + 2BTE.E.3 + 2OM7.B.1 + 2V49.A.72 + 2VHN.B.71 + 3IZ9.A.196 + 3IZ9.A.80 + 3IZE.A.89 + 3IZF.A.191 + 3O58.1.74 475.0000000 24.6241106
27 -((.((.((..(((((.((...((........))...)).)).))).)).)).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 1F1T.A.4 + 1FKA.A.92 + 1YIT.0.13 + 2BTE.E.3 + 2OM7.B.1 + 2V49.A.72 + 2VHN.B.71 + 3IZ9.A.80 + 3IZE.A.89 + 3IZF.A.191 + 3O58.1.74 475.0000000 24.6241106
28 -((.((.((..(((((.((...((........))...)).)).))).)).)).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 1FKA.A.92 + 1YIT.0.13 + 2BTE.E.3 + 2OM7.B.1 + 2V49.A.72 + 2VHN.B.71 + 3IZ9.A.196 + 3IZ9.A.80 + 3IZE.A.89 + 3IZF.A.191 + 3O58.1.74 475.0000000 24.6241106
29 -((.((.((..(((((.((...((........))...)).)).))).)).)).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 1FKA.A.92 + 1YIT.0.13 + 2BTE.E.3 + 2OM7.B.1 + 2VHN.B.71 + 3IZ9.A.196 + 3IZ9.A.80 + 3IZE.A.89 + 3IZF.A.191 + 3O58.1.74 + 3PYO.A.85 475.0000000 24.6241106
30 -((.((.((..(((((.((...((........))...)).)).))).)).)).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 1F1T.A.4 + 1FKA.A.92 + 1YIT.0.13 + 2BTE.E.3 + 2OM7.B.1 + 2V49.A.72 + 2VHN.B.71 + 3IZ9.A.80 + 3IZE.A.89 + 3IZE.A.89 + 3IZF.A.191 475.0000000 24.6241106
31 -((.((.((..(((((.((...((........))...)).)).))).)).)).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 1FKA.A.92 + 1YIT.0.13 + 2BTE.E.3 + 2OM7.B.1 + 2VHN.B.71 + 3IZ9.A.196 + 3IZ9.A.80 + 3IZE.A.89 + 3IZF.A.191 + 3O58.1.74 + 3PYO.A.85 475.0000000 24.6241106
32 -((.((.((..(((((.((...((........))...)).)).))).)).)).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 1F1T.A.4 + 1FKA.A.92 + 1YIT.0.13 + 2BTE.E.3 + 2OM7.B.1 + 2V49.A.72 + 2VHN.B.71 + 3IZ9.A.80 + 3IZE.A.89 + 3IZF.A.191 + 3O58.1.74 475.0000000 24.6241106
33 -((.((.((..(((((.((...((........))...)).)).))).)).)).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 1F1T.A.4 + 1FKA.A.92 + 1YIT.0.13 + 2BTE.E.3 + 2OM7.B.1 + 2VHN.B.71 + 3IZ9.A.80 + 3IZF.A.191 + 3O58.1.74 + 3O58.1.74 + 3PYO.A.85 475.0000000 24.6241106
34 -(((((((.(((((........[[[[....[[[[....{{{{.))))))))))))..........................]]]].....]]]]...........}}}}
1 -E.coli_alpha_operon_mRNA
2 -UGUGCGUUUCCAUUUGAGUAUCCUGAAAACGGGCUUUUCAGCAUGGAACGUACAUAUUAAAUAGUAGGAGUGCAUAGUGGCCCGUAUAGCAGGCAUUAACAUUCCUGA
3 -((.((.((..(((((.((...((........))...)).)).))).)).)).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 1FKA.A.92 + 1YIT.0.13 + 2BTE.E.3 + 2OM7.B.1 + 2VHN.B.71 + 3IZ9.A.196 + 3IZ9.A.80 + 3IZE.A.89 + 3IZE.A.89 + 3IZF.A.191 + 3PYO.A.85 7.5724746 24.6241106
4 -((.((.((..(((((.((...((((....))))...)).)).))).)).)).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 1F1T.A.4 + 1YIT.0.13 + 2BTE.E.3 + 2OM7.B.1 + 2VHN.B.71 + 3IZ9.A.80 + 3IZE.A.89 + 3IZE.A.89 + 3IZF.A.191 + 3PYO.A.85 7.2714446 26.4308597
5 -((.((.((..(((((.((...((((....))))...)).)).))).)).)).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 1YIT.0.13 + 2BTE.E.3 + 2OM7.B.1 + 2VHN.B.71 + 3IZ9.A.196 + 3IZ9.A.80 + 3IZE.A.89 + 3IZE.A.89 + 3IZF.A.191 + 3PYO.A.85 7.2714382 26.4308697
6 -((.((.((..(((((.((...((((.[[.))))...)).)).))).)).)).))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 1F1T.A.4 + 2BTE.E.3 + 2OM7.B.1 + 2VHN.B.71 + 3IZ9.A.80 + 3IZE.A.89 + 3IZE.A.89 + 3IZF.A.191 + 3PYO.A.85 6.8407653 26.4747054
7 -((.((((.((.((((.((...((((....))))...)).)).)).)))))).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 1YIT.0.13 + 2BTE.E.3 + 2Z4N.B.71 + 3IZ9.A.196 + 3IZ9.A.80 + 3IZE.A.89 + 3IZE.A.89 + 3IZF.A.191 + 3PYO.A.85 6.5590302 27.7426287
8 -((.((((.((.((((.((...((((.[[.))))...)).)).)).)))))).))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 1F1T.A.4 + 2BTE.E.3 + 2Z4N.B.71 + 3IZ9.A.80 + 3IZE.A.89 + 3IZE.A.89 + 3IZF.A.191 + 3PYO.A.85 6.1283537 27.7864620
9 -(((((((.((.((((.((...((((....))))...)).)).)).)))))))))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 1F1T.A.4 + 1YIT.0.13 + 2BTE.E.3 + 2Z4N.B.71 + 3IZ9.A.80 + 3IZE.A.89 + 3IZE.A.89 + 3PYO.A.85 5.7853246 28.7416005
10 -(((((((.((.((((.((...((((.[[.))))...)).)).)).)))))))))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 1F1T.A.4 + 2BTE.E.3 + 2Z4N.B.71 + 3IZ9.A.80 + 3O58.1.74 + 3O58.1.74 + 3PYO.A.85 5.3546481 28.7854338
11 -(((((((.((.((((.((...((((....))))...)).)).)).)))))))))(((...))).(((((.((..((.((.((.((...)).)))).)).)).))))). + 1F1T.A.4 + 1YIT.0.13 + 2BTE.E.3 + 2Z4N.B.71 + 3IZ9.A.80 + 3IZE.A.89 + 3O58.1.74 5.0116190 29.7385888
12 -(((((((.((.((((.((...((((.[[.))))...)).)).)).)))))))))..]]..((..[[[[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]]]]]. + 1F1T.A.4 + 2BTE.E.3 + 2Z4N.B.71 + 3IZ9.A.80 + 3IZE.A.89 + 3O58.1.74 4.5809424 29.7824221
13 -(((((((.((.(((((((...((((....))))...))))).)).)))))))))(((...))).(((((.((..((.((.((.((...)).)))).)).)).))))). + 1YIT.0.13 + 2Z4N.B.71 + 3IZ9.A.196 + 3IZ9.A.80 + 3IZE.A.89 + 3IZE.A.89 4.2379134 30.7351363
14 -(((((((.((.(((((((...((((.[[.))))...))))).)).)))))))))..]]..((..[[[[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]]]]]. + 1JZX.A.84 + 3IZ9.A.196 + 3IZ9.A.80 + 3IZE.A.89 + 3O58.1.74 3.8072368 30.7789696
15 -(((((((.((.(((((((...((((....))))...))))).)).)))))))))(((...))).((((((((..((.((.((.((...)).)))).)).)))))))). + 1F1T.A.4 + 1YIT.0.13 + 2Z4N.B.71 + 3IZ9.A.80 + 3IZE.A.89 3.4642078 31.7297337
16 -(((((((.((.(((((((...((((.[[.))))...))))).)).)))))))))..]]..((..[[[[[[[[..[[.[[.[[.[[)).]].]]]].]].]]]]]]]]. + 1F1T.A.4 + 2Z4N.B.71 + 3IZ9.A.80 + 3IZE.A.89 3.0335312 31.7735670
17 -(((((((.((((((((((...((((....))))...))))).))))))))))))(((...))).((((((((..((.((.((.((...)).)))).)).)))))))). + 1F1T.A.4 + 1YIT.0.13 + 3IZ9.A.80 + 3IZE.A.89 2.6905022 32.7192790
18 -(((((((.((((((((((...((((.[[.))))...))))).))))))))))))..]]..((..[[[[[[[[..[[.[[.[[.[[)).]].]]]].]].]]]]]]]]. + 1F1T.A.4 + 3IZ9.A.80 + 3IZE.A.89 2.2598256 32.7631123
19 -(((((((.((((((((((...((((....))))...))))).))))))))))))(((...))).((((((((..((((.(((.((...)).))))))).)))))))). + 1F1T.A.4 + 1YIT.0.13 + 3IZ9.A.80 1.9167965 33.6749642
20 -(((((((.((((((((((...((((.[[.))))...))))).))))))))))))..]]..((..[[[[[[[[..[[[[.[[[.[[)).]].]]]]]]].]]]]]]]]. + 1F1T.A.4 + 3IZ9.A.80 1.4861200 33.7187975
21 -(((((((.((((((((((...((((.[[.))))...))))).))))))))))))..]]..((..[[[[[[[[..[[[[.[[[.[[)).]].]]]]]]].]]]]]]]]. + 3IZ9.A.196 + 3IZ9.A.80 1.4861200 33.7187975
22 -(((((((.((((((((((...((((....))))...))))).))))))))))))(((...))).((((((((..((((.(((.((...)).))))))).)))))))). + 1YIT.0.13 + 3IZ9.A.196 + 3IZ9.A.80 1.9167965 33.6749642
23 -(((((((.((((((((((...((((.[[.))))...))))).))))))))))))..]]..((..[[[[[[[[..[[.[[.[[.[[)).]].]]]].]].]]]]]]]]. + 1F1T.A.4 + 3IZ9.A.80 + 3O58.1.74 2.2598256 32.7631123
24 -(((((((.((((((((((...((((.[[.))))...))))).))))))))))))..]]..((..[[[[[[[[..[[.[[.[[.[[)).]].]]]].]].]]]]]]]]. + 3IZ9.A.196 + 3IZ9.A.80 + 3O58.1.74 2.2598256 32.7631123
25 -(((((((.((((((((((...((((.[[.))))...))))).))))))))))))..]]..((..[[[[[[[[..[[.[[.[[.[[)).]].]]]].]].]]]]]]]]. + 3IZ9.A.196 + 3IZ9.A.80 + 3IZE.A.89 2.2598256 32.7631123
26 -(((((((.((((((((((...((((....))))...))))).))))))))))))(((...))).((((((((..((.((.((.((...)).)))).)).)))))))). + 1YIT.0.13 + 3IZ9.A.196 + 3IZ9.A.80 + 3IZE.A.89 2.6905022 32.7192790
27 -(((((((.((((((((((...((((....))))...))))).))))))))))))(((...))).((((((((..((.((.((.((...)).)))).)).)))))))). + 1YIT.0.13 + 3IZ9.A.196 + 3IZ9.A.80 + 3O58.1.74 2.6905022 32.7192790
28 -(((((((.((((((((((...((((....))))...))))).))))))))))))(((...))).((((((((..((.((.((.((...)).)))).)).)))))))). + 1F1T.A.4 + 1YIT.0.13 + 3IZ9.A.80 + 3O58.1.74 2.6905022 32.7192790
29 -(((((((.((.(((((((...((((.[[.))))...))))).)).)))))))))..]]..((..[[[[[[[[..[[.[[.[[.[[)).]].]]]].]].]]]]]]]]. + 2Z4N.B.71 + 3IZ9.A.196 + 3IZ9.A.80 + 3IZE.A.89 3.0335312 31.7735670
30 -(((((((.((.(((((((...((((.[[.))))...))))).)).)))))))))..]]..((..[[[[[[[[..[[.[[.[[.[[)).]].]]]].]].]]]]]]]]. + 1JZX.A.84 + 3IZ9.A.196 + 3IZ9.A.80 + 3IZE.A.89 3.0335312 31.7735670
31 -(((((((.((.(((((((...((((.[[.))))...))))).)).)))))))))..]]..((..[[[[[[[[..[[.[[.[[.[[)).]].]]]].]].]]]]]]]]. + 1F1T.A.4 + 1JZX.A.84 + 3IZ9.A.80 + 3IZE.A.89 3.0335312 31.7735670
32 -(((((((.((.(((((((...((((.[[.))))...))))).)).)))))))))..]]..((..[[[[[[[[..[[.[[.[[.[[)).]].]]]].]].]]]]]]]]. + 1JZX.A.84 + 3IZ9.A.196 + 3IZ9.A.80 + 3O58.1.74 3.0335312 31.7735670
33 -(((((((.((.(((((((...((((.[[.))))...))))).)).)))))))))..]]..((..[[[[[[[[..[[.[[.[[.[[)).]].]]]].]].]]]]]]]]. + 1F1T.A.4 + 1JZX.A.84 + 3IZ9.A.80 + 3O58.1.74 3.0335312 31.7735670
34 -(((((((.((.(((((((...((((.[[.))))...))))).)).)))))))))..]]..((..[[[[[[[[..[[.[[.[[.[[)).]].]]]].]].]]]]]]]]. + 1F1T.A.4 + 2Z4N.B.71 + 3IZ9.A.80 + 3O58.1.74 3.0335312 31.7735670
35 -(((((((.((.(((((((...((((.[[.))))...))))).)).)))))))))..]]..((..[[[[[[[[..[[.[[.[[.[[)).]].]]]].]].]]]]]]]]. + 2Z4N.B.71 + 3IZ9.A.196 + 3IZ9.A.80 + 3O58.1.74 3.0335312 31.7735670
36 -(((((((.((.(((((((...((((....))))...))))).)).)))))))))(((...))).((((((((..((.((.((.((...)).)))).)).)))))))). + 1JZX.A.84 + 1YIT.0.13 + 3IZ9.A.196 + 3IZ9.A.80 + 3IZE.A.89 3.4642078 31.7297337
37 -(((((((.((.(((((((...((((....))))...))))).)).)))))))))(((...))).((((((((..((.((.((.((...)).)))).)).)))))))). + 1YIT.0.13 + 2Z4N.B.71 + 3IZ9.A.196 + 3IZ9.A.80 + 3IZE.A.89 3.4642078 31.7297337
38 -(((((((.((.(((((((...((((....))))...))))).)).)))))))))(((...))).((((((((..((.((.((.((...)).)))).)).)))))))). + 1F1T.A.4 + 1JZX.A.84 + 1YIT.0.13 + 3IZ9.A.80 + 3IZE.A.89 3.4642078 31.7297337
39 -(((((((.((.(((((((...((((....))))...))))).)).)))))))))(((...))).((((((((..((.((.((.((...)).)))).)).)))))))). + 1F1T.A.4 + 1JZX.A.84 + 1YIT.0.13 + 3IZ9.A.80 + 3O58.1.74 3.4642078 31.7297337
40 -(((((((.((.(((((((...((((....))))...))))).)).)))))))))(((...))).((((((((..((.((.((.((...)).)))).)).)))))))). + 1JZX.A.84 + 1YIT.0.13 + 3IZ9.A.196 + 3IZ9.A.80 + 3O58.1.74 3.4642078 31.7297337
41 -(((((((.((.(((((((...((((....))))...))))).)).)))))))))(((...))).((((((((..((.((.((.((...)).)))).)).)))))))). + 1YIT.0.13 + 2Z4N.B.71 + 3IZ9.A.196 + 3IZ9.A.80 + 3O58.1.74 3.4642078 31.7297337
42 -(((((((.((.(((((((...((((....))))...))))).)).)))))))))(((...))).((((((((..((.((.((.((...)).)))).)).)))))))). + 1F1T.A.4 + 1YIT.0.13 + 2Z4N.B.71 + 3IZ9.A.80 + 3O58.1.74 3.4642078 31.7297337
43 -(((((((.((.(((((((...((((.[[.))))...))))).)).)))))))))..]]..((..[[[[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]]]]]. + 2Z4N.B.71 + 3IZ9.A.196 + 3IZ9.A.80 + 3IZE.A.89 + 3O58.1.74 3.8072368 30.7789696
44 -(((((((.((.(((((((...((((.[[.))))...))))).)).)))))))))..]]..((..[[[[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]]]]]. + 1JZX.A.84 + 3IZ9.A.196 + 3IZ9.A.80 + 3IZE.A.89 + 3IZE.A.89 3.8072368 30.7789696
45 -(((((((.((.(((((((...((((.[[.))))...))))).)).)))))))))..]]..((..[[[[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]]]]]. + 2Z4N.B.71 + 3IZ9.A.196 + 3IZ9.A.80 + 3IZE.A.89 + 3IZE.A.89 3.8072368 30.7789696
46 -(((((((.((.(((((((...((((.[[.))))...))))).)).)))))))))..]]..((..[[[[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]]]]]. + 1F1T.A.4 + 1JZX.A.84 + 3IZ9.A.80 + 3IZE.A.89 + 3O58.1.74 3.8072368 30.7789696
47 -(((((((.((.(((((((...((((.[[.))))...))))).)).)))))))))..]]..((..[[[[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]]]]]. + 2Z4N.B.71 + 3IZ9.A.196 + 3IZ9.A.80 + 3O58.1.74 + 3O58.1.74 3.8072368 30.7789696
48 -(((((((.((.(((((((...((((.[[.))))...))))).)).)))))))))..]]..((..[[[[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]]]]]. + 1JZX.A.84 + 3IZ9.A.196 + 3IZ9.A.80 + 3IZE.A.89 + 3O58.1.74 3.8072368 30.7789696
49 -(((((((.((.(((((((...((((.[[.))))...))))).)).)))))))))..]]..((..[[[[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]]]]]. + 1F1T.A.4 + 2Z4N.B.71 + 3IZ9.A.80 + 3IZE.A.89 + 3IZE.A.89 3.8072368 30.7789696
50 -(((((((.((.(((((((...((((.[[.))))...))))).)).)))))))))..]]..((..[[[[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]]]]]. + 2Z4N.B.71 + 3IZ9.A.196 + 3IZ9.A.80 + 3IZE.A.89 + 3O58.1.74 3.8072368 30.7789696
51 -(((((((.((.(((((((...((((.[[.))))...))))).)).)))))))))..]]..((..[[[[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]]]]]. + 1F1T.A.4 + 2Z4N.B.71 + 3IZ9.A.80 + 3IZE.A.89 + 3O58.1.74 3.8072368 30.7789696
52 -(((((((.((.(((((((...((((.[[.))))...))))).)).)))))))))..]]..((..[[[[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]]]]]. + 1JZX.A.84 + 3IZ9.A.196 + 3IZ9.A.80 + 3O58.1.74 + 3O58.1.74 3.8072368 30.7789696
53 -(((((((.((.(((((((...((((.[[.))))...))))).)).)))))))))..]]..((..[[[[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]]]]]. + 1F1T.A.4 + 1JZX.A.84 + 3IZ9.A.80 + 3O58.1.74 + 3O58.1.74 3.8072368 30.7789696
54 -(((((((.((.(((((((...((((.[[.))))...))))).)).)))))))))..]]..((..[[[[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]]]]]. + 1F1T.A.4 + 1JZX.A.84 + 3IZ9.A.80 + 3IZE.A.89 + 3O58.1.74 3.8072368 30.7789696
55 -(((((((.((.(((((((...((((.[[.))))...))))).)).)))))))))..]]..((..[[[[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]]]]]. + 1F1T.A.4 + 2Z4N.B.71 + 3IZ9.A.80 + 3IZE.A.89 + 3O58.1.74 3.8072368 30.7789696
56 -(((((((.((.(((((((...((((.[[.))))...))))).)).)))))))))..]]..((..[[[[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]]]]]. + 1F1T.A.4 + 2Z4N.B.71 + 3IZ9.A.80 + 3O58.1.74 + 3O58.1.74 3.8072368 30.7789696
57 -(((((((.((.(((((((...((((.[[.))))...))))).)).)))))))))..]]..((..[[[[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]]]]]. + 1F1T.A.4 + 1JZX.A.84 + 3IZ9.A.80 + 3IZE.A.89 + 3IZE.A.89 3.8072368 30.7789696
58 -(((((((.((.(((((((...((((....))))...))))).)).)))))))))(((...))).(((((.((..((.((.((.((...)).)))).)).)).))))). + 1YIT.0.13 + 2Z4N.B.71 + 3IZ9.A.196 + 3IZ9.A.80 + 3O58.1.74 + 3O58.1.74 4.2379134 30.7351363
59 -(((((((.((.(((((((...((((....))))...))))).)).)))))))))(((...))).(((((.((..((.((.((.((...)).)))).)).)).))))). + 1YIT.0.13 + 2Z4N.B.71 + 3IZ9.A.196 + 3IZ9.A.80 + 3IZE.A.89 + 3O58.1.74 4.2379134 30.7351363
60 -(((((((.((.(((((((...((((....))))...))))).)).)))))))))(((...))).(((((.((..((.((.((.((...)).)))).)).)).))))). + 1F1T.A.4 + 1YIT.0.13 + 2Z4N.B.71 + 3IZ9.A.80 + 3IZE.A.89 + 3O58.1.74 4.2379134 30.7351363
61 -(((((((.((.(((((((...((((....))))...))))).)).)))))))))(((...))).(((((.((..((.((.((.((...)).)))).)).)).))))). + 1JZX.A.84 + 1YIT.0.13 + 3IZ9.A.196 + 3IZ9.A.80 + 3IZE.A.89 + 3O58.1.74 4.2379134 30.7351363
62 -(((((((.((.(((((((...((((....))))...))))).)).)))))))))(((...))).(((((.((..((.((.((.((...)).)))).)).)).))))). + 1F1T.A.4 + 1YIT.0.13 + 2Z4N.B.71 + 3IZ9.A.80 + 3IZE.A.89 + 3IZE.A.89 4.2379134 30.7351363
63 -(((((((.((.(((((((...((((....))))...))))).)).)))))))))(((...))).(((((.((..((.((.((.((...)).)))).)).)).))))). + 1F1T.A.4 + 1YIT.0.13 + 2Z4N.B.71 + 3IZ9.A.80 + 3IZE.A.89 + 3O58.1.74 4.2379134 30.7351363
64 -(((((((.((.(((((((...((((....))))...))))).)).)))))))))(((...))).(((((.((..((.((.((.((...)).)))).)).)).))))). + 1JZX.A.84 + 1YIT.0.13 + 3IZ9.A.196 + 3IZ9.A.80 + 3O58.1.74 + 3O58.1.74 4.2379134 30.7351363
65 -(((((((.((.(((((((...((((....))))...))))).)).)))))))))(((...))).(((((.((..((.((.((.((...)).)))).)).)).))))). + 1F1T.A.4 + 1JZX.A.84 + 1YIT.0.13 + 3IZ9.A.80 + 3IZE.A.89 + 3O58.1.74 4.2379134 30.7351363
66 -(((((((.((.(((((((...((((....))))...))))).)).)))))))))(((...))).(((((.((..((.((.((.((...)).)))).)).)).))))). + 1F1T.A.4 + 1JZX.A.84 + 1YIT.0.13 + 3IZ9.A.80 + 3O58.1.74 + 3O58.1.74 4.2379134 30.7351363
67 -(((((((.((.(((((((...((((....))))...))))).)).)))))))))(((...))).(((((.((..((.((.((.((...)).)))).)).)).))))). + 1F1T.A.4 + 1JZX.A.84 + 1YIT.0.13 + 3IZ9.A.80 + 3IZE.A.89 + 3IZE.A.89 4.2379134 30.7351363
68 -(((((((.((.(((((((...((((....))))...))))).)).)))))))))(((...))).(((((.((..((.((.((.((...)).)))).)).)).))))). + 1F1T.A.4 + 1JZX.A.84 + 1YIT.0.13 + 3IZ9.A.80 + 3IZE.A.89 + 3O58.1.74 4.2379134 30.7351363
69 -(((((((.((.(((((((...((((....))))...))))).)).)))))))))(((...))).(((((.((..((.((.((.((...)).)))).)).)).))))). + 1JZX.A.84 + 1YIT.0.13 + 3IZ9.A.196 + 3IZ9.A.80 + 3IZE.A.89 + 3O58.1.74 4.2379134 30.7351363
70 -(((((((.((.(((((((...((((....))))...))))).)).)))))))))(((...))).(((((.((..((.((.((.((...)).)))).)).)).))))). + 1YIT.0.13 + 2Z4N.B.71 + 3IZ9.A.196 + 3IZ9.A.80 + 3IZE.A.89 + 3O58.1.74 4.2379134 30.7351363
71 -(((((((.((.(((((((...((((....))))...))))).)).)))))))))(((...))).(((((.((..((.((.((.((...)).)))).)).)).))))). + 1F1T.A.4 + 1YIT.0.13 + 2Z4N.B.71 + 3IZ9.A.80 + 3O58.1.74 + 3O58.1.74 4.2379134 30.7351363
72 -(((((((.((.(((((((...((((....))))...))))).)).)))))))))(((...))).(((((.((..((.((.((.((...)).)))).)).)).))))). + 1JZX.A.84 + 1YIT.0.13 + 3IZ9.A.196 + 3IZ9.A.80 + 3IZE.A.89 + 3IZE.A.89 4.2379134 30.7351363
73 -(((((((.((.((((.((...((((....))))...)).)).)).)))))))))(((...))).(((((.((..((.((.((.((...)).)))).)).)).))))). + 1F1T.A.4 + 1YIT.0.13 + 2BTE.E.3 + 2Z4N.B.71 + 3IZ9.A.80 + 3IZE.A.89 + 3IZE.A.89 5.0116190 29.7385888
74 -(((((((.((.((((.((...((((....))))...)).)).)).)))))))))(((...))).(((((.((..((.((.((.((...)).)))).)).)).))))). + 1F1T.A.4 + 1JZX.A.84 + 1YIT.0.13 + 2BTE.E.3 + 3IZ9.A.80 + 3IZE.A.89 + 3IZE.A.89 5.0116190 29.7385888
75 -(((((((.((.((((.((...((((....))))...)).)).)).)))))))))(((...))).(((((.((..((.((.((.((...)).)))).)).)).))))). + 1YIT.0.13 + 2BTE.E.3 + 2Z4N.B.71 + 3IZ9.A.196 + 3IZ9.A.80 + 3IZE.A.89 + 3IZE.A.89 5.0116190 29.7385888
76 -(((((((.((.((((.((...((((....))))...)).)).)).)))))))))(((...))).(((((.((..((.((.((.((...)).)))).)).)).))))). + 1YIT.0.13 + 2BTE.E.3 + 2Z4N.B.71 + 3IZ9.A.196 + 3IZ9.A.80 + 3IZE.A.89 + 3O58.1.74 5.0116190 29.7385888
77 -(((((((.((.((((.((...((((....))))...)).)).)).)))))))))(((...))).(((((.((..((.((.((.((...)).)))).)).)).))))). + 1YIT.0.13 + 2BTE.E.3 + 2Z4N.B.71 + 3IZ9.A.196 + 3IZ9.A.80 + 3O58.1.74 + 3O58.1.74 5.0116190 29.7385888
78 -(((((((.((.((((.((...((((....))))...)).)).)).)))))))))(((...))).(((((.((..((.((.((.((...)).)))).)).)).))))). + 1JZX.A.84 + 1YIT.0.13 + 2BTE.E.3 + 3IZ9.A.196 + 3IZ9.A.80 + 3O58.1.74 + 3O58.1.74 5.0116190 29.7385888
79 -(((((((.((.((((.((...((((....))))...)).)).)).)))))))))(((...))).(((((.((..((.((.((.((...)).)))).)).)).))))). + 1F1T.A.4 + 1YIT.0.13 + 2BTE.E.3 + 2Z4N.B.71 + 3IZ9.A.80 + 3IZE.A.89 + 3O58.1.74 5.0116190 29.7385888
80 -(((((((.((.((((.((...((((....))))...)).)).)).)))))))))(((...))).(((((.((..((.((.((.((...)).)))).)).)).))))). + 1F1T.A.4 + 1JZX.A.84 + 1YIT.0.13 + 2BTE.E.3 + 3IZ9.A.80 + 3O58.1.74 + 3O58.1.74 5.0116190 29.7385888
81 -(((((((.((.((((.((...((((....))))...)).)).)).)))))))))(((...))).(((((.((..((.((.((.((...)).)))).)).)).))))). + 1F1T.A.4 + 1JZX.A.84 + 1YIT.0.13 + 2BTE.E.3 + 3IZ9.A.80 + 3IZE.A.89 + 3O58.1.74 5.0116190 29.7385888
82 -(((((((.((.((((.((...((((....))))...)).)).)).)))))))))(((...))).(((((.((..((.((.((.((...)).)))).)).)).))))). + 1JZX.A.84 + 1YIT.0.13 + 2BTE.E.3 + 3IZ9.A.196 + 3IZ9.A.80 + 3IZE.A.89 + 3O58.1.74 5.0116190 29.7385888
83 -(((((((.((.((((.((...((((....))))...)).)).)).)))))))))(((...))).(((((.((..((.((.((.((...)).)))).)).)).))))). + 1JZX.A.84 + 1YIT.0.13 + 2BTE.E.3 + 3IZ9.A.196 + 3IZ9.A.80 + 3IZE.A.89 + 3IZE.A.89 5.0116190 29.7385888
84 -(((((((.((.((((.((...((((....))))...)).)).)).)))))))))(((...))).(((((.((..((.((.((.((...)).)))).)).)).))))). + 1JZX.A.84 + 1YIT.0.13 + 2BTE.E.3 + 3IZ9.A.196 + 3IZ9.A.80 + 3IZE.A.89 + 3O58.1.74 5.0116190 29.7385888
85 -(((((((.((.((((.((...((((....))))...)).)).)).)))))))))(((...))).(((((.((..((.((.((.((...)).)))).)).)).))))). + 1YIT.0.13 + 2BTE.E.3 + 2Z4N.B.71 + 3IZ9.A.196 + 3IZ9.A.80 + 3IZE.A.89 + 3O58.1.74 5.0116190 29.7385888
86 -(((((((.((.((((.((...((((....))))...)).)).)).)))))))))(((...))).(((((.((..((.((.((.((...)).)))).)).)).))))). + 1F1T.A.4 + 1JZX.A.84 + 1YIT.0.13 + 2BTE.E.3 + 3IZ9.A.80 + 3IZE.A.89 + 3O58.1.74 5.0116190 29.7385888
87 -(((((((.((.((((.((...((((....))))...)).)).)).)))))))))(((...))).(((((.((..((.((.((.((...)).)))).)).)).))))). + 1F1T.A.4 + 1YIT.0.13 + 2BTE.E.3 + 2Z4N.B.71 + 3IZ9.A.80 + 3O58.1.74 + 3O58.1.74 5.0116190 29.7385888
88 -(((((((.((.((((.((...((((.[[.))))...)).)).)).)))))))))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 2BTE.E.3 + 2Z4N.B.71 + 3IZ9.A.196 + 3IZ9.A.80 + 3IZE.A.89 + 3IZE.A.89 + 3PYO.A.85 5.3546481 28.7854338
89 -(((((((.((.((((.((...((((.[[.))))...)).)).)).)))))))))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 1F1T.A.4 + 2BTE.E.3 + 2Z4N.B.71 + 3IZ9.A.80 + 3IZE.A.89 + 3IZE.A.89 + 3PYO.A.85 5.3546481 28.7854338
90 -(((((((.((.((((.((...((((.[[.))))...)).)).)).)))))))))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 1F1T.A.4 + 1JZX.A.84 + 2BTE.E.3 + 2V49.A.72 + 3IZ9.A.80 + 3O58.1.74 + 3O58.1.74 5.3546481 28.7854338
91 -(((((((.((.((((.((...((((.[[.))))...)).)).)).)))))))))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 1F1T.A.4 + 2BTE.E.3 + 2Z4N.B.71 + 3IZ9.A.80 + 3IZE.A.89 + 3O58.1.74 + 3PYO.A.85 5.3546481 28.7854338
92 -(((((((.((.((((.((...((((.[[.))))...)).)).)).)))))))))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 2BTE.E.3 + 2Z4N.B.71 + 3IZ9.A.196 + 3IZ9.A.80 + 3IZE.A.89 + 3O58.1.74 + 3PYO.A.85 5.3546481 28.7854338
93 -(((((((.((.((((.((...((((.[[.))))...)).)).)).)))))))))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 1JZX.A.84 + 2BTE.E.3 + 2V49.A.72 + 3IZ9.A.196 + 3IZ9.A.80 + 3IZE.A.89 + 3IZE.A.89 5.3546481 28.7854338
94 -(((((((.((.((((.((...((((.[[.))))...)).)).)).)))))))))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 1F1T.A.4 + 1JZX.A.84 + 2BTE.E.3 + 3IZ9.A.80 + 3IZE.A.89 + 3O58.1.74 + 3PYO.A.85 5.3546481 28.7854338
95 -(((((((.((.((((.((...((((.[[.))))...)).)).)).)))))))))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 1F1T.A.4 + 1JZX.A.84 + 2BTE.E.3 + 3IZ9.A.80 + 3IZE.A.89 + 3IZE.A.89 + 3PYO.A.85 5.3546481 28.7854338
96 -(((((((.((.((((.((...((((.[[.))))...)).)).)).)))))))))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 1JZX.A.84 + 2BTE.E.3 + 2V49.A.72 + 3IZ9.A.196 + 3IZ9.A.80 + 3O58.1.74 + 3O58.1.74 5.3546481 28.7854338
97 -(((((((.((.((((.((...((((.[[.))))...)).)).)).)))))))))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 1F1T.A.4 + 2BTE.E.3 + 2Z4N.B.71 + 3IZ9.A.80 + 3IZE.A.89 + 3O58.1.74 + 3PYO.A.85 5.3546481 28.7854338
98 -(((((((.((.((((.((...((((.[[.))))...)).)).)).)))))))))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 1F1T.A.4 + 1JZX.A.84 + 2BTE.E.3 + 3IZ9.A.80 + 3IZE.A.89 + 3O58.1.74 + 3PYO.A.85 5.3546481 28.7854338
99 -(((((((.((.((((.((...((((.[[.))))...)).)).)).)))))))))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 1F1T.A.4 + 2BTE.E.3 + 2V49.A.72 + 2Z4N.B.71 + 3IZ9.A.80 + 3IZE.A.89 + 3IZE.A.89 5.3546481 28.7854338
100 -(((((((.((.((((.((...((((.[[.))))...)).)).)).)))))))))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 2BTE.E.3 + 2V49.A.72 + 2Z4N.B.71 + 3IZ9.A.196 + 3IZ9.A.80 + 3IZE.A.89 + 3O58.1.74 5.3546481 28.7854338
101 -(((((((.((.((((.((...((((.[[.))))...)).)).)).)))))))))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 2BTE.E.3 + 2V49.A.72 + 2Z4N.B.71 + 3IZ9.A.196 + 3IZ9.A.80 + 3IZE.A.89 + 3O58.1.74 5.3546481 28.7854338
102 -(((((((.((.((((.((...((((.[[.))))...)).)).)).)))))))))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 1F1T.A.4 + 1JZX.A.84 + 2BTE.E.3 + 2V49.A.72 + 3IZ9.A.80 + 3IZE.A.89 + 3IZE.A.89 5.3546481 28.7854338
103 -(((((((.((.((((.((...((((.[[.))))...)).)).)).)))))))))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 1F1T.A.4 + 1JZX.A.84 + 2BTE.E.3 + 2V49.A.72 + 3IZ9.A.80 + 3IZE.A.89 + 3O58.1.74 5.3546481 28.7854338
104 -(((((((.((.((((.((...((((.[[.))))...)).)).)).)))))))))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 1F1T.A.4 + 2BTE.E.3 + 2V49.A.72 + 2Z4N.B.71 + 3IZ9.A.80 + 3IZE.A.89 + 3O58.1.74 5.3546481 28.7854338
105 -(((((((.((.((((.((...((((.[[.))))...)).)).)).)))))))))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 1JZX.A.84 + 2BTE.E.3 + 3IZ9.A.196 + 3IZ9.A.80 + 3IZE.A.89 + 3O58.1.74 + 3PYO.A.85 5.3546481 28.7854338
106 -(((((((.((.((((.((...((((.[[.))))...)).)).)).)))))))))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 2BTE.E.3 + 2Z4N.B.71 + 3IZ9.A.196 + 3IZ9.A.80 + 3O58.1.74 + 3O58.1.74 + 3PYO.A.85 5.3546481 28.7854338
107 -(((((((.((.((((.((...((((.[[.))))...)).)).)).)))))))))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 1F1T.A.4 + 1JZX.A.84 + 2BTE.E.3 + 2V49.A.72 + 3IZ9.A.80 + 3IZE.A.89 + 3O58.1.74 5.3546481 28.7854338
108 -(((((((.((.((((.((...((((.[[.))))...)).)).)).)))))))))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 1F1T.A.4 + 2BTE.E.3 + 2V49.A.72 + 2Z4N.B.71 + 3IZ9.A.80 + 3IZE.A.89 + 3O58.1.74 5.3546481 28.7854338
109 -(((((((.((.((((.((...((((.[[.))))...)).)).)).)))))))))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 1JZX.A.84 + 2BTE.E.3 + 2V49.A.72 + 3IZ9.A.196 + 3IZ9.A.80 + 3IZE.A.89 + 3O58.1.74 5.3546481 28.7854338
110 -(((((((.((.((((.((...((((.[[.))))...)).)).)).)))))))))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 2BTE.E.3 + 2Z4N.B.71 + 3IZ9.A.196 + 3IZ9.A.80 + 3IZE.A.89 + 3O58.1.74 + 3PYO.A.85 5.3546481 28.7854338
111 -(((((((.((.((((.((...((((.[[.))))...)).)).)).)))))))))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 1F1T.A.4 + 2BTE.E.3 + 2V49.A.72 + 2Z4N.B.71 + 3IZ9.A.80 + 3O58.1.74 + 3O58.1.74 5.3546481 28.7854338
112 -(((((((.((.((((.((...((((.[[.))))...)).)).)).)))))))))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 2BTE.E.3 + 2V49.A.72 + 2Z4N.B.71 + 3IZ9.A.196 + 3IZ9.A.80 + 3O58.1.74 + 3O58.1.74 5.3546481 28.7854338
113 -(((((((.((.((((.((...((((.[[.))))...)).)).)).)))))))))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 1JZX.A.84 + 2BTE.E.3 + 2V49.A.72 + 3IZ9.A.196 + 3IZ9.A.80 + 3IZE.A.89 + 3O58.1.74 5.3546481 28.7854338
114 -(((((((.((.((((.((...((((.[[.))))...)).)).)).)))))))))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 1JZX.A.84 + 2BTE.E.3 + 3IZ9.A.196 + 3IZ9.A.80 + 3IZE.A.89 + 3IZE.A.89 + 3PYO.A.85 5.3546481 28.7854338
115 -(((((((.((.((((.((...((((.[[.))))...)).)).)).)))))))))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 2BTE.E.3 + 2V49.A.72 + 2Z4N.B.71 + 3IZ9.A.196 + 3IZ9.A.80 + 3IZE.A.89 + 3IZE.A.89 5.3546481 28.7854338
116 -(((((((.((.((((.((...((((.[[.))))...)).)).)).)))))))))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 1JZX.A.84 + 2BTE.E.3 + 3IZ9.A.196 + 3IZ9.A.80 + 3IZE.A.89 + 3O58.1.74 + 3PYO.A.85 5.3546481 28.7854338
117 -(((((((.((.((((.((...((((.[[.))))...)).)).)).)))))))))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 1JZX.A.84 + 2BTE.E.3 + 3IZ9.A.196 + 3IZ9.A.80 + 3O58.1.74 + 3O58.1.74 + 3PYO.A.85 5.3546481 28.7854338
118 -(((((((.((.((((.((...((((.[[.))))...)).)).)).)))))))))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 1F1T.A.4 + 1JZX.A.84 + 2BTE.E.3 + 3IZ9.A.80 + 3O58.1.74 + 3O58.1.74 + 3PYO.A.85 5.3546481 28.7854338
119 -(((((((.((.((((.((...((((....))))...)).)).)).)))))))))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 1YIT.0.13 + 2BTE.E.3 + 2Z4N.B.71 + 3IZ9.A.196 + 3IZ9.A.80 + 3IZE.A.89 + 3IZE.A.89 + 3PYO.A.85 5.7853246 28.7416005
120 -(((((((.((.((((.((...((((....))))...)).)).)).)))))))))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 1YIT.0.13 + 2BTE.E.3 + 2V49.A.72 + 2Z4N.B.71 + 3IZ9.A.196 + 3IZ9.A.80 + 3IZE.A.89 + 3IZE.A.89 5.7853246 28.7416005
121 -(((((((.((.((((.((...((((....))))...)).)).)).)))))))))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 1F1T.A.4 + 1JZX.A.84 + 1YIT.0.13 + 2BTE.E.3 + 2V49.A.72 + 3IZ9.A.80 + 3O58.1.74 + 3O58.1.74 5.7853246 28.7416005
122 -(((((((.((.((((.((...((((....))))...)).)).)).)))))))))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 1JZX.A.84 + 1YIT.0.13 + 2BTE.E.3 + 2V49.A.72 + 3IZ9.A.196 + 3IZ9.A.80 + 3O58.1.74 + 3O58.1.74 5.7853246 28.7416005
123 -(((((((.((.((((.((...((((....))))...)).)).)).)))))))))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 1JZX.A.84 + 1YIT.0.13 + 2BTE.E.3 + 3IZ9.A.196 + 3IZ9.A.80 + 3O58.1.74 + 3O58.1.74 + 3PYO.A.85 5.7853246 28.7416005
124 -(((((((.((.((((.((...((((....))))...)).)).)).)))))))))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 1F1T.A.4 + 1JZX.A.84 + 1YIT.0.13 + 2BTE.E.3 + 2V49.A.72 + 3IZ9.A.80 + 3IZE.A.89 + 3O58.1.74 5.7853246 28.7416005
125 -(((((((.((.((((.((...((((....))))...)).)).)).)))))))))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 1F1T.A.4 + 1JZX.A.84 + 1YIT.0.13 + 2BTE.E.3 + 2V49.A.72 + 3IZ9.A.80 + 3IZE.A.89 + 3O58.1.74 5.7853246 28.7416005
126 -(((((((.((.((((.((...((((....))))...)).)).)).)))))))))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 1F1T.A.4 + 1YIT.0.13 + 2BTE.E.3 + 2V49.A.72 + 2Z4N.B.71 + 3IZ9.A.80 + 3O58.1.74 + 3O58.1.74 5.7853246 28.7416005
127 -(((((((.((.((((.((...((((....))))...)).)).)).)))))))))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 1JZX.A.84 + 1YIT.0.13 + 2BTE.E.3 + 2V49.A.72 + 3IZ9.A.196 + 3IZ9.A.80 + 3IZE.A.89 + 3O58.1.74 5.7853246 28.7416005
128 -(((((((.((.((((.((...((((....))))...)).)).)).)))))))))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 1JZX.A.84 + 1YIT.0.13 + 2BTE.E.3 + 2V49.A.72 + 3IZ9.A.196 + 3IZ9.A.80 + 3IZE.A.89 + 3IZE.A.89 5.7853246 28.7416005
129 -(((((((.((.((((.((...((((....))))...)).)).)).)))))))))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 1JZX.A.84 + 1YIT.0.13 + 2BTE.E.3 + 3IZ9.A.196 + 3IZ9.A.80 + 3IZE.A.89 + 3IZE.A.89 + 3PYO.A.85 5.7853246 28.7416005
130 -(((((((.((.((((.((...((((....))))...)).)).)).)))))))))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 1JZX.A.84 + 1YIT.0.13 + 2BTE.E.3 + 3IZ9.A.196 + 3IZ9.A.80 + 3IZE.A.89 + 3O58.1.74 + 3PYO.A.85 5.7853246 28.7416005
131 -(((((((.((.((((.((...((((....))))...)).)).)).)))))))))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 1YIT.0.13 + 2BTE.E.3 + 2V49.A.72 + 2Z4N.B.71 + 3IZ9.A.196 + 3IZ9.A.80 + 3IZE.A.89 + 3O58.1.74 5.7853246 28.7416005
132 -(((((((.((.((((.((...((((....))))...)).)).)).)))))))))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 1F1T.A.4 + 1JZX.A.84 + 1YIT.0.13 + 2BTE.E.3 + 3IZ9.A.80 + 3O58.1.74 + 3O58.1.74 + 3PYO.A.85 5.7853246 28.7416005
133 -(((((((.((.((((.((...((((....))))...)).)).)).)))))))))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 1F1T.A.4 + 1JZX.A.84 + 1YIT.0.13 + 2BTE.E.3 + 3IZ9.A.80 + 3IZE.A.89 + 3O58.1.74 + 3PYO.A.85 5.7853246 28.7416005
134 -(((((((.((.((((.((...((((....))))...)).)).)).)))))))))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 1F1T.A.4 + 1YIT.0.13 + 2BTE.E.3 + 2Z4N.B.71 + 3IZ9.A.80 + 3IZE.A.89 + 3O58.1.74 + 3PYO.A.85 5.7853246 28.7416005
135 -(((((((.((.((((.((...((((....))))...)).)).)).)))))))))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 1F1T.A.4 + 1JZX.A.84 + 1YIT.0.13 + 2BTE.E.3 + 2V49.A.72 + 3IZ9.A.80 + 3IZE.A.89 + 3IZE.A.89 5.7853246 28.7416005
136 -(((((((.((.((((.((...((((....))))...)).)).)).)))))))))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 1F1T.A.4 + 1JZX.A.84 + 1YIT.0.13 + 2BTE.E.3 + 3IZ9.A.80 + 3IZE.A.89 + 3IZE.A.89 + 3PYO.A.85 5.7853246 28.7416005
137 -(((((((.((.((((.((...((((....))))...)).)).)).)))))))))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 1F1T.A.4 + 1JZX.A.84 + 1YIT.0.13 + 2BTE.E.3 + 3IZ9.A.80 + 3IZE.A.89 + 3O58.1.74 + 3PYO.A.85 5.7853246 28.7416005
138 -(((((((.((.((((.((...((((....))))...)).)).)).)))))))))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 1F1T.A.4 + 1YIT.0.13 + 2BTE.E.3 + 2Z4N.B.71 + 3IZ9.A.80 + 3IZE.A.89 + 3O58.1.74 + 3PYO.A.85 5.7853246 28.7416005
139 -(((((((.((.((((.((...((((....))))...)).)).)).)))))))))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 1F1T.A.4 + 1YIT.0.13 + 2BTE.E.3 + 2V49.A.72 + 2Z4N.B.71 + 3IZ9.A.80 + 3IZE.A.89 + 3IZE.A.89 5.7853246 28.7416005
140 -(((((((.((.((((.((...((((....))))...)).)).)).)))))))))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 1JZX.A.84 + 1YIT.0.13 + 2BTE.E.3 + 2V49.A.72 + 3IZ9.A.196 + 3IZ9.A.80 + 3IZE.A.89 + 3O58.1.74 5.7853246 28.7416005
141 -(((((((.((.((((.((...((((....))))...)).)).)).)))))))))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 1YIT.0.13 + 2BTE.E.3 + 2V49.A.72 + 2Z4N.B.71 + 3IZ9.A.196 + 3IZ9.A.80 + 3IZE.A.89 + 3O58.1.74 5.7853246 28.7416005
142 -(((((((.((.((((.((...((((....))))...)).)).)).)))))))))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 1YIT.0.13 + 2BTE.E.3 + 2V49.A.72 + 2Z4N.B.71 + 3IZ9.A.196 + 3IZ9.A.80 + 3O58.1.74 + 3O58.1.74 5.7853246 28.7416005
143 -(((((((.((.((((.((...((((....))))...)).)).)).)))))))))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 1YIT.0.13 + 2BTE.E.3 + 2Z4N.B.71 + 3IZ9.A.196 + 3IZ9.A.80 + 3IZE.A.89 + 3O58.1.74 + 3PYO.A.85 5.7853246 28.7416005
144 -(((((((.((.((((.((...((((....))))...)).)).)).)))))))))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 1JZX.A.84 + 1YIT.0.13 + 2BTE.E.3 + 3IZ9.A.196 + 3IZ9.A.80 + 3IZE.A.89 + 3O58.1.74 + 3PYO.A.85 5.7853246 28.7416005
145 -(((((((.((.((((.((...((((....))))...)).)).)).)))))))))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 1YIT.0.13 + 2BTE.E.3 + 2Z4N.B.71 + 3IZ9.A.196 + 3IZ9.A.80 + 3IZE.A.89 + 3O58.1.74 + 3PYO.A.85 5.7853246 28.7416005
146 -(((((((.((.((((.((...((((....))))...)).)).)).)))))))))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 1YIT.0.13 + 2BTE.E.3 + 2Z4N.B.71 + 3IZ9.A.196 + 3IZ9.A.80 + 3O58.1.74 + 3O58.1.74 + 3PYO.A.85 5.7853246 28.7416005
147 -(((((((.((.((((.((...((((....))))...)).)).)).)))))))))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 1F1T.A.4 + 1YIT.0.13 + 2BTE.E.3 + 2Z4N.B.71 + 3IZ9.A.80 + 3O58.1.74 + 3O58.1.74 + 3PYO.A.85 5.7853246 28.7416005
148 -(((((((.((.((((.((...((((....))))...)).)).)).)))))))))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 1F1T.A.4 + 1YIT.0.13 + 2BTE.E.3 + 2V49.A.72 + 2Z4N.B.71 + 3IZ9.A.80 + 3IZE.A.89 + 3O58.1.74 5.7853246 28.7416005
149 -(((((((.((.((((.((...((((....))))...)).)).)).)))))))))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 1F1T.A.4 + 1YIT.0.13 + 2BTE.E.3 + 2V49.A.72 + 2Z4N.B.71 + 3IZ9.A.80 + 3IZE.A.89 + 3O58.1.74 5.7853246 28.7416005
150 -((.((((.((.((((.((...((((.[[.))))...)).)).)).)))))).))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 2BTE.E.3 + 2Z4N.B.71 + 3IZ9.A.196 + 3IZ9.A.80 + 3IZE.A.89 + 3IZE.A.89 + 3IZF.A.191 + 3PYO.A.85 6.1283537 27.7864620
151 -((.((((.((.((((.((...((((.[[.))))...)).)).)).)))))).))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 1F1T.A.4 + 2BTE.E.3 + 2Z4N.B.71 + 3IZ9.A.80 + 3IZE.A.89 + 3IZF.A.191 + 3O58.1.74 + 3PYO.A.85 6.1283537 27.7864620
152 -((.((((.((.((((.((...((((.[[.))))...)).)).)).)))))).))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 1F1T.A.4 + 2BTE.E.3 + 2Z4N.B.71 + 3IZ9.A.80 + 3IZE.A.89 + 3IZF.A.191 + 3O58.1.74 + 3PYO.A.85 6.1283537 27.7864620
153 -((.((((.((.((((.((...((((.[[.))))...)).)).)).)))))).))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 1F1T.A.4 + 2BTE.E.3 + 2V49.A.72 + 2Z4N.B.71 + 3IZ9.A.80 + 3IZE.A.89 + 3IZE.A.89 + 3IZF.A.191 6.1283537 27.7864620
154 -((.((((.((.((((.((...((((.[[.))))...)).)).)).)))))).))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 1F1T.A.4 + 1JZX.A.84 + 2BTE.E.3 + 3IZ9.A.80 + 3IZE.A.89 + 3IZE.A.89 + 3IZF.A.191 + 3PYO.A.85 6.1283537 27.7864620
155 -((.((((.((.((((.((...((((.[[.))))...)).)).)).)))))).))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 1JZX.A.84 + 2BTE.E.3 + 3IZ9.A.196 + 3IZ9.A.80 + 3IZE.A.89 + 3IZE.A.89 + 3IZF.A.191 + 3PYO.A.85 6.1283537 27.7864620
156 -((.((((.((.((((.((...((((.[[.))))...)).)).)).)))))).))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 1F1T.A.4 + 2BTE.E.3 + 2V49.A.72 + 2Z4N.B.71 + 3IZ9.A.80 + 3IZE.A.89 + 3IZF.A.191 + 3O58.1.74 6.1283537 27.7864620
157 -((.((((.((.((((.((...((((.[[.))))...)).)).)).)))))).))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 2BTE.E.3 + 2Z4N.B.71 + 3IZ9.A.196 + 3IZ9.A.80 + 3IZE.A.89 + 3IZF.A.191 + 3O58.1.74 + 3PYO.A.85 6.1283537 27.7864620
158 -((.((((.((.((((.((...((((.[[.))))...)).)).)).)))))).))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 1F1T.A.4 + 2BTE.E.3 + 2V49.A.72 + 2Z4N.B.71 + 3IZ9.A.80 + 3IZE.A.89 + 3IZF.A.191 + 3O58.1.74 6.1283537 27.7864620
159 -((.((((.((.((((.((...((((.[[.))))...)).)).)).)))))).))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 2BTE.E.3 + 2V49.A.72 + 2Z4N.B.71 + 3IZ9.A.196 + 3IZ9.A.80 + 3IZE.A.89 + 3IZE.A.89 + 3IZF.A.191 6.1283537 27.7864620
160 -((.((((.((.((((.((...((((.[[.))))...)).)).)).)))))).))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 1JZX.A.84 + 2BTE.E.3 + 2V49.A.72 + 3IZ9.A.196 + 3IZ9.A.80 + 3IZE.A.89 + 3IZE.A.89 + 3IZF.A.191 6.1283537 27.7864620
161 -((.((((.((.((((.((...((((.[[.))))...)).)).)).)))))).))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 1JZX.A.84 + 2BTE.E.3 + 2V49.A.72 + 3IZ9.A.196 + 3IZ9.A.80 + 3IZE.A.89 + 3IZF.A.191 + 3O58.1.74 6.1283537 27.7864620
162 -((.((((.((.((((.((...((((.[[.))))...)).)).)).)))))).))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 1F1T.A.4 + 2BTE.E.3 + 2Z4N.B.71 + 3IZ9.A.80 + 3IZF.A.191 + 3O58.1.74 + 3O58.1.74 + 3PYO.A.85 6.1283537 27.7864620
163 -((.((((.((.((((.((...((((.[[.))))...)).)).)).)))))).))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 1F1T.A.4 + 1JZX.A.84 + 2BTE.E.3 + 3IZ9.A.80 + 3IZE.A.89 + 3IZF.A.191 + 3O58.1.74 + 3PYO.A.85 6.1283537 27.7864620
164 -((.((((.((.((((.((...((((.[[.))))...)).)).)).)))))).))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 1F1T.A.4 + 1JZX.A.84 + 2BTE.E.3 + 3IZ9.A.80 + 3IZE.A.89 + 3IZF.A.191 + 3O58.1.74 + 3PYO.A.85 6.1283537 27.7864620
165 -((.((((.((.((((.((...((((.[[.))))...)).)).)).)))))).))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 1F1T.A.4 + 1JZX.A.84 + 2BTE.E.3 + 2V49.A.72 + 3IZ9.A.80 + 3IZE.A.89 + 3IZE.A.89 + 3IZF.A.191 6.1283537 27.7864620
166 -((.((((.((.((((.((...((((.[[.))))...)).)).)).)))))).))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 2BTE.E.3 + 2Z4N.B.71 + 3IZ9.A.196 + 3IZ9.A.80 + 3IZE.A.89 + 3IZF.A.191 + 3O58.1.74 + 3PYO.A.85 6.1283537 27.7864620
167 -((.((((.((.((((.((...((((.[[.))))...)).)).)).)))))).))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 2BTE.E.3 + 2V49.A.72 + 2Z4N.B.71 + 3IZ9.A.196 + 3IZ9.A.80 + 3IZE.A.89 + 3IZF.A.191 + 3O58.1.74 6.1283537 27.7864620
168 -((.((((.((.((((.((...((((.[[.))))...)).)).)).)))))).))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 1JZX.A.84 + 2BTE.E.3 + 3IZ9.A.196 + 3IZ9.A.80 + 3IZE.A.89 + 3IZF.A.191 + 3O58.1.74 + 3PYO.A.85 6.1283537 27.7864620
169 -((.((((.((.((((.((...((((.[[.))))...)).)).)).)))))).))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 1JZX.A.84 + 2BTE.E.3 + 2V49.A.72 + 3IZ9.A.196 + 3IZ9.A.80 + 3IZF.A.191 + 3O58.1.74 + 3O58.1.74 6.1283537 27.7864620
170 -((.((((.((.((((.((...((((.[[.))))...)).)).)).)))))).))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 1JZX.A.84 + 2BTE.E.3 + 2V49.A.72 + 3IZ9.A.196 + 3IZ9.A.80 + 3IZE.A.89 + 3IZF.A.191 + 3O58.1.74 6.1283537 27.7864620
171 -((.((((.((.((((.((...((((.[[.))))...)).)).)).)))))).))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 2BTE.E.3 + 2V49.A.72 + 2Z4N.B.71 + 3IZ9.A.196 + 3IZ9.A.80 + 3IZF.A.191 + 3O58.1.74 + 3O58.1.74 6.1283537 27.7864620
172 -((.((((.((.((((.((...((((.[[.))))...)).)).)).)))))).))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 2BTE.E.3 + 2Z4N.B.71 + 3IZ9.A.196 + 3IZ9.A.80 + 3IZF.A.191 + 3O58.1.74 + 3O58.1.74 + 3PYO.A.85 6.1283537 27.7864620
173 -((.((((.((.((((.((...((((.[[.))))...)).)).)).)))))).))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 1JZX.A.84 + 2BTE.E.3 + 3IZ9.A.196 + 3IZ9.A.80 + 3IZE.A.89 + 3IZF.A.191 + 3O58.1.74 + 3PYO.A.85 6.1283537 27.7864620
174 -((.((((.((.((((.((...((((.[[.))))...)).)).)).)))))).))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 1F1T.A.4 + 2BTE.E.3 + 2V49.A.72 + 2Z4N.B.71 + 3IZ9.A.80 + 3IZF.A.191 + 3O58.1.74 + 3O58.1.74 6.1283537 27.7864620
175 -((.((((.((.((((.((...((((.[[.))))...)).)).)).)))))).))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 1F1T.A.4 + 1JZX.A.84 + 2BTE.E.3 + 2V49.A.72 + 3IZ9.A.80 + 3IZF.A.191 + 3O58.1.74 + 3O58.1.74 6.1283537 27.7864620
176 -((.((((.((.((((.((...((((.[[.))))...)).)).)).)))))).))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 1F1T.A.4 + 1JZX.A.84 + 2BTE.E.3 + 2V49.A.72 + 3IZ9.A.80 + 3IZE.A.89 + 3IZF.A.191 + 3O58.1.74 6.1283537 27.7864620
177 -((.((((.((.((((.((...((((.[[.))))...)).)).)).)))))).))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 1F1T.A.4 + 1JZX.A.84 + 2BTE.E.3 + 3IZ9.A.80 + 3IZF.A.191 + 3O58.1.74 + 3O58.1.74 + 3PYO.A.85 6.1283537 27.7864620
178 -((.((((.((.((((.((...((((.[[.))))...)).)).)).)))))).))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 1JZX.A.84 + 2BTE.E.3 + 3IZ9.A.196 + 3IZ9.A.80 + 3IZF.A.191 + 3O58.1.74 + 3O58.1.74 + 3PYO.A.85 6.1283537 27.7864620
179 -((.((((.((.((((.((...((((.[[.))))...)).)).)).)))))).))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 2BTE.E.3 + 2V49.A.72 + 2Z4N.B.71 + 3IZ9.A.196 + 3IZ9.A.80 + 3IZE.A.89 + 3IZF.A.191 + 3O58.1.74 6.1283537 27.7864620
180 -((.((((.((.((((.((...((((.[[.))))...)).)).)).)))))).))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 1F1T.A.4 + 1JZX.A.84 + 2BTE.E.3 + 2V49.A.72 + 3IZ9.A.80 + 3IZE.A.89 + 3IZF.A.191 + 3O58.1.74 6.1283537 27.7864620
181 -((.((((.((.((((.((...((((....))))...)).)).)).)))))).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 1F1T.A.4 + 1YIT.0.13 + 2BTE.E.3 + 2Z4N.B.71 + 3IZ9.A.80 + 3IZE.A.89 + 3IZE.A.89 + 3IZF.A.191 + 3PYO.A.85 6.5590302 27.7426287
182 -((.((((.((.((((.((...((((....))))...)).)).)).)))))).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 1YIT.0.13 + 2BTE.E.3 + 2V49.A.72 + 2Z4N.B.71 + 3IZ9.A.196 + 3IZ9.A.80 + 3IZE.A.89 + 3IZE.A.89 + 3IZF.A.191 6.5590302 27.7426287
183 -((.((((.((.((((.((...((((....))))...)).)).)).)))))).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 1F1T.A.4 + 1JZX.A.84 + 1YIT.0.13 + 2BTE.E.3 + 2V49.A.72 + 3IZ9.A.80 + 3IZF.A.191 + 3O58.1.74 + 3O58.1.74 6.5590302 27.7426287
184 -((.((((.((.((((.((...((((....))))...)).)).)).)))))).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 1JZX.A.84 + 1YIT.0.13 + 2BTE.E.3 + 2V49.A.72 + 3IZ9.A.196 + 3IZ9.A.80 + 3IZF.A.191 + 3O58.1.74 + 3O58.1.74 6.5590302 27.7426287
185 -((.((((.((.((((.((...((((....))))...)).)).)).)))))).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 1JZX.A.84 + 1YIT.0.13 + 2BTE.E.3 + 3IZ9.A.196 + 3IZ9.A.80 + 3IZF.A.191 + 3O58.1.74 + 3O58.1.74 + 3PYO.A.85 6.5590302 27.7426287
186 -((.((((.((.((((.((...((((....))))...)).)).)).)))))).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 1F1T.A.4 + 1JZX.A.84 + 1YIT.0.13 + 2BTE.E.3 + 2V49.A.72 + 3IZ9.A.80 + 3IZE.A.89 + 3IZF.A.191 + 3O58.1.74 6.5590302 27.7426287
187 -((.((((.((.((((.((...((((....))))...)).)).)).)))))).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 1F1T.A.4 + 1JZX.A.84 + 1YIT.0.13 + 2BTE.E.3 + 2V49.A.72 + 3IZ9.A.80 + 3IZE.A.89 + 3IZF.A.191 + 3O58.1.74 6.5590302 27.7426287
188 -((.((((.((.((((.((...((((....))))...)).)).)).)))))).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 1F1T.A.4 + 1YIT.0.13 + 2BTE.E.3 + 2V49.A.72 + 2Z4N.B.71 + 3IZ9.A.80 + 3IZF.A.191 + 3O58.1.74 + 3O58.1.74 6.5590302 27.7426287
189 -((.((((.((.((((.((...((((....))))...)).)).)).)))))).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 1JZX.A.84 + 1YIT.0.13 + 2BTE.E.3 + 2V49.A.72 + 3IZ9.A.196 + 3IZ9.A.80 + 3IZE.A.89 + 3IZF.A.191 + 3O58.1.74 6.5590302 27.7426287
190 -((.((((.((.((((.((...((((....))))...)).)).)).)))))).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 1JZX.A.84 + 1YIT.0.13 + 2BTE.E.3 + 2V49.A.72 + 3IZ9.A.196 + 3IZ9.A.80 + 3IZE.A.89 + 3IZE.A.89 + 3IZF.A.191 6.5590302 27.7426287
191 -((.((((.((.((((.((...((((....))))...)).)).)).)))))).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 1JZX.A.84 + 1YIT.0.13 + 2BTE.E.3 + 3IZ9.A.196 + 3IZ9.A.80 + 3IZE.A.89 + 3IZE.A.89 + 3IZF.A.191 + 3PYO.A.85 6.5590302 27.7426287
192 -((.((((.((.((((.((...((((....))))...)).)).)).)))))).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 1JZX.A.84 + 1YIT.0.13 + 2BTE.E.3 + 3IZ9.A.196 + 3IZ9.A.80 + 3IZE.A.89 + 3IZF.A.191 + 3O58.1.74 + 3PYO.A.85 6.5590302 27.7426287
193 -((.((((.((.((((.((...((((....))))...)).)).)).)))))).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 1YIT.0.13 + 2BTE.E.3 + 2V49.A.72 + 2Z4N.B.71 + 3IZ9.A.196 + 3IZ9.A.80 + 3IZE.A.89 + 3IZF.A.191 + 3O58.1.74 6.5590302 27.7426287
194 -((.((((.((.((((.((...((((....))))...)).)).)).)))))).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 1F1T.A.4 + 1JZX.A.84 + 1YIT.0.13 + 2BTE.E.3 + 3IZ9.A.80 + 3IZF.A.191 + 3O58.1.74 + 3O58.1.74 + 3PYO.A.85 6.5590302 27.7426287
195 -((.((((.((.((((.((...((((....))))...)).)).)).)))))).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 1F1T.A.4 + 1JZX.A.84 + 1YIT.0.13 + 2BTE.E.3 + 3IZ9.A.80 + 3IZE.A.89 + 3IZF.A.191 + 3O58.1.74 + 3PYO.A.85 6.5590302 27.7426287
196 -((.((((.((.((((.((...((((....))))...)).)).)).)))))).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 1F1T.A.4 + 1YIT.0.13 + 2BTE.E.3 + 2Z4N.B.71 + 3IZ9.A.80 + 3IZE.A.89 + 3IZF.A.191 + 3O58.1.74 + 3PYO.A.85 6.5590302 27.7426287
197 -((.((((.((.((((.((...((((....))))...)).)).)).)))))).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 1F1T.A.4 + 1JZX.A.84 + 1YIT.0.13 + 2BTE.E.3 + 2V49.A.72 + 3IZ9.A.80 + 3IZE.A.89 + 3IZE.A.89 + 3IZF.A.191 6.5590302 27.7426287
198 -((.((((.((.((((.((...((((....))))...)).)).)).)))))).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 1F1T.A.4 + 1JZX.A.84 + 1YIT.0.13 + 2BTE.E.3 + 3IZ9.A.80 + 3IZE.A.89 + 3IZE.A.89 + 3IZF.A.191 + 3PYO.A.85 6.5590302 27.7426287
199 -((.((((.((.((((.((...((((....))))...)).)).)).)))))).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 1F1T.A.4 + 1JZX.A.84 + 1YIT.0.13 + 2BTE.E.3 + 3IZ9.A.80 + 3IZE.A.89 + 3IZF.A.191 + 3O58.1.74 + 3PYO.A.85 6.5590302 27.7426287
200 -((.((((.((.((((.((...((((....))))...)).)).)).)))))).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 1F1T.A.4 + 1YIT.0.13 + 2BTE.E.3 + 2Z4N.B.71 + 3IZ9.A.80 + 3IZE.A.89 + 3IZF.A.191 + 3O58.1.74 + 3PYO.A.85 6.5590302 27.7426287
201 -((.((((.((.((((.((...((((....))))...)).)).)).)))))).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 1F1T.A.4 + 1YIT.0.13 + 2BTE.E.3 + 2V49.A.72 + 2Z4N.B.71 + 3IZ9.A.80 + 3IZE.A.89 + 3IZE.A.89 + 3IZF.A.191 6.5590302 27.7426287
202 -((.((((.((.((((.((...((((....))))...)).)).)).)))))).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 1JZX.A.84 + 1YIT.0.13 + 2BTE.E.3 + 2V49.A.72 + 3IZ9.A.196 + 3IZ9.A.80 + 3IZE.A.89 + 3IZF.A.191 + 3O58.1.74 6.5590302 27.7426287
203 -((.((((.((.((((.((...((((....))))...)).)).)).)))))).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 1YIT.0.13 + 2BTE.E.3 + 2V49.A.72 + 2Z4N.B.71 + 3IZ9.A.196 + 3IZ9.A.80 + 3IZE.A.89 + 3IZF.A.191 + 3O58.1.74 6.5590302 27.7426287
204 -((.((((.((.((((.((...((((....))))...)).)).)).)))))).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 1YIT.0.13 + 2BTE.E.3 + 2V49.A.72 + 2Z4N.B.71 + 3IZ9.A.196 + 3IZ9.A.80 + 3IZF.A.191 + 3O58.1.74 + 3O58.1.74 6.5590302 27.7426287
205 -((.((((.((.((((.((...((((....))))...)).)).)).)))))).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 1YIT.0.13 + 2BTE.E.3 + 2Z4N.B.71 + 3IZ9.A.196 + 3IZ9.A.80 + 3IZE.A.89 + 3IZF.A.191 + 3O58.1.74 + 3PYO.A.85 6.5590302 27.7426287
206 -((.((((.((.((((.((...((((....))))...)).)).)).)))))).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 1JZX.A.84 + 1YIT.0.13 + 2BTE.E.3 + 3IZ9.A.196 + 3IZ9.A.80 + 3IZE.A.89 + 3IZF.A.191 + 3O58.1.74 + 3PYO.A.85 6.5590302 27.7426287
207 -((.((((.((.((((.((...((((....))))...)).)).)).)))))).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 1YIT.0.13 + 2BTE.E.3 + 2Z4N.B.71 + 3IZ9.A.196 + 3IZ9.A.80 + 3IZE.A.89 + 3IZF.A.191 + 3O58.1.74 + 3PYO.A.85 6.5590302 27.7426287
208 -((.((((.((.((((.((...((((....))))...)).)).)).)))))).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 1YIT.0.13 + 2BTE.E.3 + 2Z4N.B.71 + 3IZ9.A.196 + 3IZ9.A.80 + 3IZF.A.191 + 3O58.1.74 + 3O58.1.74 + 3PYO.A.85 6.5590302 27.7426287
209 -((.((((.((.((((.((...((((....))))...)).)).)).)))))).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 1F1T.A.4 + 1YIT.0.13 + 2BTE.E.3 + 2V49.A.72 + 2Z4N.B.71 + 3IZ9.A.80 + 3IZE.A.89 + 3IZF.A.191 + 3O58.1.74 6.5590302 27.7426287
210 -((.((((.((.((((.((...((((....))))...)).)).)).)))))).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 1F1T.A.4 + 1YIT.0.13 + 2BTE.E.3 + 2V49.A.72 + 2Z4N.B.71 + 3IZ9.A.80 + 3IZE.A.89 + 3IZF.A.191 + 3O58.1.74 6.5590302 27.7426287
211 -((.((((.((.((((.((...((((....))))...)).)).)).)))))).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 1F1T.A.4 + 1YIT.0.13 + 2BTE.E.3 + 2Z4N.B.71 + 3IZ9.A.80 + 3IZF.A.191 + 3O58.1.74 + 3O58.1.74 + 3PYO.A.85 6.5590302 27.7426287
212 -((.((.((..(((((.((...((........))...)).)).))).)).)).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 1FKA.A.92 + 1YIT.0.13 + 2BTE.E.3 + 2OM7.B.1 + 2VHN.B.71 + 3IZ9.A.196 + 3IZ9.A.80 + 3IZE.A.89 + 3IZF.A.191 + 3O58.1.74 + 3PYO.A.85 7.5724746 24.6241106
213 -((.((.((..(((((.((...((........))...)).)).))).)).)).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 1FKA.A.92 + 1YIT.0.13 + 2BTE.E.3 + 2OM7.B.1 + 2V49.A.72 + 2VHN.B.71 + 3IZ9.A.196 + 3IZ9.A.80 + 3IZE.A.89 + 3IZE.A.89 + 3IZF.A.191 7.5724746 24.6241106
214 -((.((.((..(((((.((...((........))...)).)).))).)).)).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 1F1T.A.4 + 1FKA.A.92 + 1YIT.0.13 + 2BTE.E.3 + 2OM7.B.1 + 2V49.A.72 + 2VHN.B.71 + 3IZ9.A.80 + 3IZE.A.89 + 3IZE.A.89 + 3IZF.A.191 7.5724746 24.6241106
215 -((.((.((..(((((.((...((........))...)).)).))).)).)).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 1FKA.A.92 + 1YIT.0.13 + 2BTE.E.3 + 2OM7.B.1 + 2VHN.B.71 + 3IZ9.A.196 + 3IZ9.A.80 + 3IZE.A.89 + 3IZF.A.191 + 3O58.1.74 + 3PYO.A.85 7.5724746 24.6241106
216 -((.((.((..(((((.((...((........))...)).)).))).)).)).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 1F1T.A.4 + 1FKA.A.92 + 1YIT.0.13 + 2BTE.E.3 + 2OM7.B.1 + 2VHN.B.71 + 3IZ9.A.80 + 3IZE.A.89 + 3IZE.A.89 + 3IZF.A.191 + 3PYO.A.85 7.5724746 24.6241106
217 -((.((.((..(((((.((...((........))...)).)).))).)).)).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 1F1T.A.4 + 1FKA.A.92 + 1YIT.0.13 + 2BTE.E.3 + 2OM7.B.1 + 2V49.A.72 + 2VHN.B.71 + 3IZ9.A.80 + 3IZF.A.191 + 3O58.1.74 + 3O58.1.74 7.5724746 24.6241106
218 -((.((.((..(((((.((...((........))...)).)).))).)).)).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 1FKA.A.92 + 1YIT.0.13 + 2BTE.E.3 + 2OM7.B.1 + 2V49.A.72 + 2VHN.B.71 + 3IZ9.A.196 + 3IZ9.A.80 + 3IZF.A.191 + 3O58.1.74 + 3O58.1.74 7.5724746 24.6241106
219 -((.((.((..(((((.((...((........))...)).)).))).)).)).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 1FKA.A.92 + 1YIT.0.13 + 2BTE.E.3 + 2OM7.B.1 + 2V49.A.72 + 2VHN.B.71 + 3IZ9.A.196 + 3IZ9.A.80 + 3IZE.A.89 + 3IZF.A.191 + 3O58.1.74 7.5724746 24.6241106
220 -((.((.((..(((((.((...((........))...)).)).))).)).)).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 1F1T.A.4 + 1FKA.A.92 + 1YIT.0.13 + 2BTE.E.3 + 2OM7.B.1 + 2V49.A.72 + 2VHN.B.71 + 3IZ9.A.80 + 3IZE.A.89 + 3IZF.A.191 + 3O58.1.74 7.5724746 24.6241106
221 -((.((.((..(((((.((...((........))...)).)).))).)).)).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 1F1T.A.4 + 1FKA.A.92 + 1YIT.0.13 + 2BTE.E.3 + 2OM7.B.1 + 2VHN.B.71 + 3IZ9.A.80 + 3IZE.A.89 + 3IZF.A.191 + 3O58.1.74 + 3PYO.A.85 7.5724746 24.6241106
222 -((.((.((..(((((.((...((........))...)).)).))).)).)).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 1F1T.A.4 + 1FKA.A.92 + 1YIT.0.13 + 2BTE.E.3 + 2OM7.B.1 + 2V49.A.72 + 2VHN.B.71 + 3IZ9.A.80 + 3IZE.A.89 + 3IZF.A.191 + 3O58.1.74 7.5724746 24.6241106
223 -((.((.((..(((((.((...((........))...)).)).))).)).)).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 1F1T.A.4 + 1FKA.A.92 + 1YIT.0.13 + 2BTE.E.3 + 2OM7.B.1 + 2VHN.B.71 + 3IZ9.A.80 + 3IZE.A.89 + 3IZF.A.191 + 3O58.1.74 + 3PYO.A.85 7.5724746 24.6241106
224 -((.((.((..(((((.((...((........))...)).)).))).)).)).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 1FKA.A.92 + 1YIT.0.13 + 2BTE.E.3 + 2OM7.B.1 + 2V49.A.72 + 2VHN.B.71 + 3IZ9.A.196 + 3IZ9.A.80 + 3IZE.A.89 + 3IZF.A.191 + 3O58.1.74 7.5724746 24.6241106
225 -((.((.((..(((((.((...((........))...)).)).))).)).)).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 1FKA.A.92 + 1YIT.0.13 + 2BTE.E.3 + 2OM7.B.1 + 2VHN.B.71 + 3IZ9.A.196 + 3IZ9.A.80 + 3IZF.A.191 + 3O58.1.74 + 3O58.1.74 + 3PYO.A.85 7.5724746 24.6241106
226 -((.((.((..(((((.((...((........))...)).)).))).)).)).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 1F1T.A.4 + 1FKA.A.92 + 1YIT.0.13 + 2BTE.E.3 + 2OM7.B.1 + 2VHN.B.71 + 3IZ9.A.80 + 3IZF.A.191 + 3O58.1.74 + 3O58.1.74 + 3PYO.A.85 7.5724746 24.6241106
1 +#!/usr/bin/python3
2 +# coding=utf-8
3 +import sys
4 +import getopt
5 +from scipy import stats
6 +import subprocess
7 +from os import path, makedirs, getcwd, chdir, devnull
8 +import matplotlib.pyplot as plt
9 +from matplotlib import colors
10 +from math import sqrt
11 +from multiprocessing import Pool, cpu_count, Manager
12 +import multiprocessing
13 +import ast
14 +
15 +
16 +# ================== DEFINITION OF THE PATHS ==============================
17 +
18 +# Retrieve Paths from file EditMe
19 +jar3dexec = ""
20 +bypdir = ""
21 +biorseoDir = "."
22 +exec(compile(open(biorseoDir+"/EditMe").read(), '', 'exec'))
23 +runDir = path.dirname(path.realpath(__file__))
24 +outputDir = biorseoDir + "/results/"
25 +HLmotifDir = biorseoDir + "/data/modules/BGSU/HL/3.2/lib"
26 +ILmotifDir = biorseoDir + "/data/modules/BGSU/IL/3.2/lib"
27 +descfolder = biorseoDir + "/data/modules/DESC"
28 +
29 +
30 +# ================== CLASSES AND FUNCTIONS ================================
31 +
32 +
33 +class NoDaemonProcess(multiprocessing.Process):
34 + @property
35 + def daemon(self):
36 + return False
37 +
38 + @daemon.setter
39 + def daemon(self, value):
40 + pass
41 +
42 +
43 +class NoDaemonContext(type(multiprocessing.get_context())):
44 + Process = NoDaemonProcess
45 +
46 +# We sub-class multiprocessing.pool.Pool instead of multiprocessing.Pool
47 +# because the latter is only a wrapper function, not a proper class.
48 +
49 +
50 +class MyPool(multiprocessing.pool.Pool):
51 + def __init__(self, *args, **kwargs):
52 + kwargs['context'] = NoDaemonContext()
53 + super(MyPool, self).__init__(*args, **kwargs)
54 +
55 +
56 +class Loop:
57 + def __init__(self, header, subsequence, looptype, position):
58 + self.header = header
59 + self.seq = subsequence
60 + self.type = looptype
61 + self.position = position
62 +
63 + def get_header(self):
64 + return self.header
65 +
66 + def subsequence(self):
67 + return self.seq
68 +
69 +
70 +class InsertionSite:
71 + def __init__(self, loop, csv_line):
72 + # BEWARE : jar3d csv output is crap because of java's locale settings.
73 + # On french OSes, it uses commas to delimit the fields AND as floating point delimiters !!
74 + # Parse with caution, and check what the csv output files look like on your system...
75 + info = csv_line.split(',')
76 + self.loop = loop # the Loop object that has been searched with jar3d
77 + # position of the loop's components, so the motif's ones, in the query sequence.
78 + self.position = loop.position
79 + # Motif model identifier of the RNA 3D Motif Atlas
80 + self.atlas_id = info[2]
81 + # alignment score of the subsequence to the motif model
82 + self.score = int(float(info[4]))
83 + # should the motif model be inverted to fit the sequence ?
84 + self.rotation = int(info[-2])
85 +
86 + def __lt__(self, other):
87 + return self.score < other.score
88 +
89 + def __gt__(self, other):
90 + return self.score > other.score
91 +
92 +
93 +class Job:
94 + def __init__(self, command=[], function=None, args=[], how_many_in_parallel=0, priority=1, timeout=None, checkFunc=None, checkArgs=[]):
95 + self.cmd_ = command
96 + self.func_ = function
97 + self.args_ = args
98 + self.checkFunc_ = checkFunc
99 + self.checkArgs_ = checkArgs
100 + self.priority_ = priority
101 + self.timeout_ = timeout
102 + if not how_many_in_parallel:
103 + self.nthreads = cpu_count()
104 + elif how_many_in_parallel == -1:
105 + self.nthreads = cpu_count() - 1
106 + else:
107 + self.nthreads = how_many_in_parallel
108 +
109 +
110 +class BiorseoInstance:
111 + def __init__(self, argv):
112 + # set default options
113 + self.type = "dpm"
114 + self.modules = "desc"
115 + self.func = 'B'
116 + self.outputf = outputDir
117 + self.jobcount = 0
118 +
119 + # Parse options
120 + try:
121 + opts, args = getopt.getopt(
122 + argv, "hil::o:", ["type=", "func=", "modules="])
123 + except getopt.GetoptError:
124 + print("Please provide arguments !")
125 + sys.exit(2)
126 + for opt, arg in opts:
127 + if opt == "-h":
128 + print("biorseo.py -i myRNA.fa -o myRNA.jar3dB --type jar3d --func B")
129 + sys.exit()
130 + elif opt == "-i":
131 + self.inputfile = arg
132 + self.mode = 0 # single sequence mode
133 + elif opt == "-l":
134 + self.inputfile = arg
135 + self.mode = 1 # batch mode
136 + elif opt == "-o":
137 + self.outputf = arg # output file or folder...
138 + elif opt == "--func":
139 + if arg in ['A', 'B', 'C', 'D']:
140 + self.func = arg
141 + else:
142 + raise "Unknown scoring function " + arg
143 + elif opt == "--type":
144 + if arg in ['dpm', 'jar3d', 'byp']:
145 + self.type = arg
146 + else:
147 + raise "Unknown pattern matching method " + arg
148 + elif opt == "--modules":
149 + if arg in ['desc', 'bgsu']:
150 + self.modules = arg
151 + else:
152 + raise "Unsupported module model type " + arg
153 + else:
154 + raise "Unknown option " + opt
155 +
156 + if self.mode:
157 + # Create a job manager
158 + self.manager = Manager()
159 + self.running_stats = self.manager.list()
160 + self.running_stats.append(0) # n_launched
161 + self.running_stats.append(0) # n_finished
162 + self.running_stats.append(0) # n_skipped
163 + self.fails = self.manager.list()
164 +
165 + # Create the output folder
166 + subprocess.call(["mkdir", "-p", self.outputf])
167 +
168 + def enumerate_loops(self, s):
169 + def resort(unclosedLoops):
170 + loops.insert(len(loops)-1-unclosedLoops, loops[-1])
171 + loops.pop(-1)
172 +
173 + opened = []
174 + openingStart = []
175 + closingStart = []
176 + loops = []
177 + loopsUnclosed = 0
178 + consecutiveOpenings = []
179 + if s[0] == '(':
180 + consecutiveOpenings.append(1)
181 + consecutiveClosings = 0
182 +
183 + lastclosed = -1
184 + previous = ''
185 + for i in range(len(s)):
186 +
187 + # If we arrive on an unpaired segment
188 + if s[i] == '.':
189 + if previous == '(':
190 + openingStart.append(i-1)
191 + if previous == ')':
192 + closingStart.append(i-1)
193 +
194 + # Opening basepair
195 + if s[i] == '(':
196 + if previous == '(':
197 + consecutiveOpenings[-1] += 1
198 + else:
199 + consecutiveOpenings.append(1)
200 + if previous == ')':
201 + closingStart.append(i-1)
202 +
203 + # We have something like (...(
204 + if len(openingStart) and openingStart[-1] == opened[-1]:
205 + # Create a new loop starting with this component.
206 + loops.append([(openingStart[-1], i)])
207 + openingStart.pop(-1)
208 + loopsUnclosed += 1
209 + # We have something like )...( or even )(
210 + if len(closingStart) and closingStart[-1] == lastclosed:
211 + # Append a component to existing multiloop
212 + loops[-1].append((closingStart[-1], i))
213 + closingStart.pop(-1)
214 +
215 + opened.append(i)
216 +
217 + # Closing basepair
218 + if s[i] == ')':
219 + if previous == ')':
220 + consecutiveClosings += 1
221 + else:
222 + consecutiveClosings = 1
223 + # This is not supposed to happen in real data, but whatever.
224 + if previous == '(':
225 + openingStart.append(i-1)
226 +
227 + # We have something like (...) or ()
228 + if len(openingStart) and openingStart[-1] == opened[-1]:
229 + # Create a new loop, and save it as already closed (HL)
230 + loops.append([(openingStart[-1], i)])
231 + openingStart.pop(-1)
232 + resort(loopsUnclosed)
233 + # We have something like )...)
234 + if len(closingStart) and closingStart[-1] == lastclosed:
235 + # Append a component to existing multiloop and close it.
236 + loops[-1].append((closingStart[-1], i))
237 + closingStart.pop(-1)
238 + loopsUnclosed -= 1
239 + resort(loopsUnclosed)
240 +
241 + if i+1 < len(s):
242 + if s[i+1] != ')': # We are on something like: ).
243 + # an openingStart has not been correctly detected, like in ...((((((...)))...)))
244 + if consecutiveClosings < consecutiveOpenings[-1]:
245 + # Create a new loop (uncompleted)
246 + loops.append([(opened[-2], opened[-1])])
247 + loopsUnclosed += 1
248 +
249 + # We just completed an HL+stem, like ...(((...))).., we can forget its info
250 + if consecutiveClosings == consecutiveOpenings[-1]:
251 + consecutiveClosings = 0
252 + consecutiveOpenings.pop(-1)
253 + else: # There are still several basepairs to remember, forget only the processed ones, keep the others
254 + consecutiveOpenings[-1] -= consecutiveClosings
255 + consecutiveClosings = 0
256 +
257 + else: # We are on something like: ))
258 + # we are on an closingStart that cannot be correctly detected, like in ...(((...(((...))))))
259 + if consecutiveClosings == consecutiveOpenings[-1]:
260 + # Append a component to the uncomplete loop and close it.
261 + loops[-1].append((i, i+1))
262 + loopsUnclosed -= 1
263 + resort(loopsUnclosed)
264 + # Forget the info about the processed stem.
265 + consecutiveClosings = 0
266 + consecutiveOpenings.pop(-1)
267 +
268 + opened.pop(-1)
269 + lastclosed = i
270 +
271 + previous = s[i]
272 + # print(i,"=",s[i],"\t", "consec. Op=", consecutiveOpenings,"Cl=",consecutiveClosings)
273 +
274 + return(loops)
275 +
276 + def launch_JAR3D_worker(self, loop):
277 + # write motif to a file
278 + newpath = getcwd()+'/'+loop.header[1:]
279 + if not path.exists(newpath):
280 + makedirs(newpath)
281 + chdir(newpath)
282 + filename = loop.header[1:]+".fasta"
283 + fasta = open(filename, 'w')
284 + fasta.write('>'+loop.get_header()+'\n'+loop.subsequence()+'\n')
285 + fasta.close()
286 +
287 + # Launch Jar3D on it
288 + if loop.type == 'h':
289 + cmd = ["java", "-jar", jar3dexec, filename, HLmotifDir+"/all.txt",
290 + loop.header[1:]+".HLloop.csv", loop.header[1:]+".HLseq.csv"]
291 + else:
292 + cmd = ["java", "-jar", jar3dexec, filename, ILmotifDir+"/all.txt",
293 + loop.header[1:]+".ILloop.csv", loop.header[1:]+".ILseq.csv"]
294 + nowhere = open(devnull, 'w')
295 + logfile = open("log_of_the_run.sh", 'a')
296 + logfile.write(' '.join(cmd))
297 + logfile.write("\n")
298 + logfile.close()
299 + subprocess.call(cmd, stdout=nowhere)
300 + nowhere.close()
301 +
302 + # Retrieve results
303 + insertion_sites = []
304 + if loop.type == 'h':
305 + capstype = "HL"
306 + else:
307 + capstype = "IL"
308 + csv = open(loop.header[1:]+".%sseq.csv" % capstype, 'r')
309 + l = csv.readline()
310 + while l:
311 + if "true" in l:
312 + insertion_sites.append(InsertionSite(loop, l))
313 + l = csv.readline()
314 + csv.close()
315 +
316 + # Cleaning
317 + chdir("..")
318 + subprocess.call(["rm", "-r", loop.header[1:]])
319 + return insertion_sites
320 +
321 + def launch_JAR3D(self, seq_, basename):
322 + rnasubopt_preds = []
323 + # Extracting probable loops from RNA-subopt structures
324 + rna = open(outputDir + basename + ".subopt", "r")
325 + lines = rna.readlines()
326 + rna.close()
327 + for i in range(2, len(lines)):
328 + ss = lines[i].split(' ')[0]
329 + if ss not in rnasubopt_preds:
330 + rnasubopt_preds.append(ss)
331 + HLs = []
332 + ILs = []
333 + for ss in rnasubopt_preds:
334 + loop_candidates = self.enumerate_loops(ss)
335 + for loop_candidate in loop_candidates:
336 + if len(loop_candidate) == 1 and loop_candidate not in HLs:
337 + HLs.append(loop_candidate)
338 + if len(loop_candidate) == 2 and loop_candidate not in ILs:
339 + ILs.append(loop_candidate)
340 + # Retrieve subsequences corresponding to the possible loops
341 + loops = []
342 + for i, l in enumerate(HLs):
343 + loops.append(
344 + Loop(">HL%d" % (i+1), seq_[l[0][0]-1:l[0][1]], "h", l))
345 + for i, l in enumerate(ILs):
346 + loops.append(
347 + Loop(">IL%d" % (i+1), seq_[l[0][0]-1:l[0][1]]+'*'+seq_[l[1][0]-1:l[1][1]], "i", l))
348 + # Scanning loop subsequences against motif database
349 + pool = MyPool(processes=cpu_count())
350 + insertion_sites = [x for y in pool.map(
351 + self.launch_JAR3D_worker, loops) for x in y]
352 + insertion_sites.sort(reverse=True)
353 + # Writing results to CSV file
354 + c = 0
355 + resultsfile = open(outputDir+basename+".sites.csv", "w")
356 + resultsfile.write("Motif,Rotation,Score,Start1,End1,Start2,End2\n")
357 + for site in insertion_sites:
358 + if site.score > 10:
359 + c += 1
360 + string = "FOUND with score %d:\t\t possible insertion of motif " % site.score + site.atlas_id
361 + if site.rotation:
362 + string += " (reversed)"
363 + string += (" on " + site.loop.get_header() + " at positions")
364 + resultsfile.write(site.atlas_id+',' +
365 + str(bool(site.rotation))+",%d" % site.score+',')
366 + positions = [','.join([str(y) for y in x]) for x in site.position]
367 + if len(positions) == 1:
368 + positions.append("-,-")
369 + resultsfile.write(','.join(positions)+'\n')
370 + resultsfile.close()
371 +
372 + def launch_BayesPairing(self, module_type, seq_, header_, basename):
373 + chdir(bypdir)
374 +
375 + cmd = ["python3", "parse_sequences.py", "-seq", outputDir +
376 + basename + ".fa", "-d", module_type, "-interm", "1"]
377 +
378 + logfile = open("log_of_the_run.sh", 'a')
379 + logfile.write(" ".join(cmd))
380 + logfile.write("\n")
381 + logfile.close()
382 +
383 + out = subprocess.check_output(cmd).decode('utf-8')
384 + BypLog = out.split('\n')
385 + idx = 0
386 + l = BypLog[idx]
387 + while l[:3] != "PUR":
388 + idx += 1
389 + l = BypLog[idx]
390 + insertion_sites = [x for x in ast.literal_eval(l.split(":")[1][1:])]
391 + if module_type == "rna3dmotif":
392 + rna = open(outputDir + basename + ".byp.csv", "w")
393 + else:
394 + rna = open(outputDir + basename + ".bgsubyp.csv", "w")
395 + rna.write("Motif,Score,Start1,End1,Start2,End2...\n")
396 + for i, module in enumerate(insertion_sites):
397 + if len(module):
398 + for (score, positions, sequence) in zip(*[iter(module)]*3):
399 + pos = []
400 + q = -2
401 + for p in positions:
402 + if p-q > 1:
403 + pos.append(q)
404 + pos.append(p)
405 + q = p
406 + pos.append(q)
407 + rna.write(module_type+str(i)+','+str(int(score)))
408 + for (p, q) in zip(*[iter(pos[1:])]*2):
409 + if q > p:
410 + rna.write(','+str(p)+','+str(q))
411 + rna.write('\n')
412 + rna.close()
413 +
414 + def execute_job(self, j):
415 + if j.checkFunc_ is not None:
416 + if j.checkFunc_(*j.checkArgs_):
417 + self.running_stats[2] += 1
418 + print("["+str(self.running_stats[0]+self.running_stats[2]) +
419 + '/'+str(self.jobcount)+"]\tSkipping a finished job")
420 + return 0
421 + self.running_stats[0] += 1
422 + if len(j.cmd_):
423 + logfile = open("log_of_the_run.sh", 'a')
424 + logfile.write(" ".join(j.cmd_))
425 + logfile.write("\n")
426 + logfile.close()
427 + print("["+str(self.running_stats[0]+self.running_stats[2]) +
428 + '/'+str(self.jobcount)+"]\t"+" ".join(j.cmd_))
429 + r = subprocess.call(j.cmd_, timeout=j.timeout_)
430 + elif j.func_ is not None:
431 + print("["+str(self.running_stats[0]+self.running_stats[2])+'/'+str(self.jobcount) +
432 + "]\t"+j.func_.__name__+'('+", ".join([a for a in j.args_])+')')
433 + try:
434 + r = j.func_(*j.args_)
435 + except:
436 + r = 1
437 + pass
438 + if r:
439 + self.fails.append(j)
440 + self.running_stats[1] += 1
441 + return r
442 +
443 + def check_result_existence(self, datatype, method, function, with_PK, basename):
444 + folder = self.outputf+"PK/" if with_PK else self.outputf+"noPK/"
445 + if datatype == "bgsu":
446 + if method == "jar3d":
447 + extension = ".jar3d"
448 + elif method == "byp":
449 + extension = ".bgsubyp"
450 + else:
451 + raise "Unknown method !"
452 + elif datatype == "desc":
453 + if method == "dpm":
454 + extension = ".raw"
455 + elif method == "byp":
456 + extension = ".byp"
457 + else:
458 + raise "Unknown method !"
459 + else:
460 + raise "Unknown data type !"
461 + return path.isfile(folder + basename + extension + function)
462 +
463 + def check_csv_existence(self, datatype, method, basename):
464 + if datatype == "bgsu":
465 + if method == "jar3d":
466 + extension = ".sites.csv"
467 + elif method == "byp":
468 + extension = ".bgsubyp.csv"
469 + else:
470 + raise "Unknown method !"
471 + elif datatype == "desc":
472 + if method == "byp":
473 + extension = ".byp.csv"
474 + else:
475 + raise "You cannot use " + method + " with " + datatype + " data !"
476 + else:
477 + raise "Unknown data type !"
478 + return path.isfile(self.outputf + basename + extension)
479 +
480 +
481 +if __name__ == "__main__":
482 + BiorseoInstance(sys.argv)
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
8 #include <string> 8 #include <string>
9 #include <vector> 9 #include <vector>
10 10
11 -using Eigen::MatrixXf, Eigen::Matrix; 11 +using Eigen::MatrixXf;
12 using std::map; 12 using std::map;
13 using std::pair; 13 using std::pair;
14 using std::string; 14 using std::string;
......
...@@ -15,15 +15,15 @@ import ast ...@@ -15,15 +15,15 @@ import ast
15 15
16 # Retrieve Paths from file EditMe 16 # Retrieve Paths from file EditMe
17 jar3dexec = "" 17 jar3dexec = ""
18 -HLmotifDir = ""
19 -ILmotifDir = ""
20 -descfolder = ""
21 bypdir = "" 18 bypdir = ""
22 biorseoDir = "." 19 biorseoDir = "."
23 exec(compile(open(biorseoDir+"/EditMe").read(), '', 'exec')) 20 exec(compile(open(biorseoDir+"/EditMe").read(), '', 'exec'))
24 runDir = path.dirname(path.realpath(__file__)) 21 runDir = path.dirname(path.realpath(__file__))
25 dataFile = argv[1] 22 dataFile = argv[1]
26 outputDir = biorseoDir + "/results/" 23 outputDir = biorseoDir + "/results/"
24 +HLmotifDir = biorseoDir + "/data/modules/BGSU/HL/3.2/lib"
25 +ILmotifDir = biorseoDir + "/data/modules/BGSU/IL/3.2/lib"
26 +descfolder = biorseoDir + "/data/modules/DESC"
27 27
28 # Create some folders to store the results 28 # Create some folders to store the results
29 subprocess.call(["mkdir", "-p", outputDir]) 29 subprocess.call(["mkdir", "-p", outputDir])
...@@ -1022,37 +1022,37 @@ print("Loaded %d RNAs of length between 10 and 100. %d of them contain pseudokno ...@@ -1022,37 +1022,37 @@ print("Loaded %d RNAs of length between 10 and 100. %d of them contain pseudokno
1022 # joblist.append(Job(command=[biorseoDir+"/bin/biorseo", "-s", outputDir+basename+".fa", "--jar3dcsv", outputDir+basename+".sites.csv", "-o", outputDir+"noPK/"+basename+".jar3dB", "--type", "B", "-n"], priority=4, timeout=3600, how_many_in_parallel=3, checkFunc=check_biorseoBGSUJAR3DB, checkArgs=[basename, False])) 1022 # joblist.append(Job(command=[biorseoDir+"/bin/biorseo", "-s", outputDir+basename+".fa", "--jar3dcsv", outputDir+basename+".sites.csv", "-o", outputDir+"noPK/"+basename+".jar3dB", "--type", "B", "-n"], priority=4, timeout=3600, how_many_in_parallel=3, checkFunc=check_biorseoBGSUJAR3DB, checkArgs=[basename, False]))
1023 # joblist.append(Job(command=[biorseoDir+"/bin/biorseo", "-s", outputDir+basename+".fa", "--jar3dcsv", outputDir+basename+".sites.csv", "-o", outputDir+"noPK/"+basename+".jar3dC", "--type", "C", "-n"], priority=4, timeout=3600, how_many_in_parallel=3, checkFunc=check_biorseoBGSUJAR3DC, checkArgs=[basename, False])) 1023 # joblist.append(Job(command=[biorseoDir+"/bin/biorseo", "-s", outputDir+basename+".fa", "--jar3dcsv", outputDir+basename+".sites.csv", "-o", outputDir+"noPK/"+basename+".jar3dC", "--type", "C", "-n"], priority=4, timeout=3600, how_many_in_parallel=3, checkFunc=check_biorseoBGSUJAR3DC, checkArgs=[basename, False]))
1024 # joblist.append(Job(command=[biorseoDir+"/bin/biorseo", "-s", outputDir+basename+".fa", "--jar3dcsv", outputDir+basename+".sites.csv", "-o", outputDir+"noPK/"+basename+".jar3dD", "--type", "D", "-n"], priority=4, timeout=3600, how_many_in_parallel=3, checkFunc=check_biorseoBGSUJAR3DD, checkArgs=[basename, False])) 1024 # joblist.append(Job(command=[biorseoDir+"/bin/biorseo", "-s", outputDir+basename+".fa", "--jar3dcsv", outputDir+basename+".sites.csv", "-o", outputDir+"noPK/"+basename+".jar3dD", "--type", "D", "-n"], priority=4, timeout=3600, how_many_in_parallel=3, checkFunc=check_biorseoBGSUJAR3DD, checkArgs=[basename, False]))
1025 - # joblist.append(Job(command=[biorseoDir+"/bin/biorseo", "-s", outputDir+basename+".fa", "--jar3dcsv", outputDir+basename+".sites.csv", "-o", outputDir+"PK/"+basename+".jar3dA", "--type", "A"], priority=4, timeout=3600, how_many_in_parallel=3, checkFunc=check_biorseoBGSUJAR3DA, checkArgs=[basename, True])) 1025 +# joblist.append(Job(command=[biorseoDir+"/bin/biorseo", "-s", outputDir+basename+".fa", "--jar3dcsv", outputDir+basename+".sites.csv", "-o", outputDir+"PK/"+basename+".jar3dA", "--type", "A"], priority=4, timeout=3600, how_many_in_parallel=3, checkFunc=check_biorseoBGSUJAR3DA, checkArgs=[basename, True]))
1026 - # joblist.append(Job(command=[biorseoDir+"/bin/biorseo", "-s", outputDir+basename+".fa", "--jar3dcsv", outputDir+basename+".sites.csv", "-o", outputDir+"PK/"+basename+".jar3dB", "--type", "B"], priority=4, timeout=3600, how_many_in_parallel=3, checkFunc=check_biorseoBGSUJAR3DB, checkArgs=[basename, True])) 1026 +# joblist.append(Job(command=[biorseoDir+"/bin/biorseo", "-s", outputDir+basename+".fa", "--jar3dcsv", outputDir+basename+".sites.csv", "-o", outputDir+"PK/"+basename+".jar3dB", "--type", "B"], priority=4, timeout=3600, how_many_in_parallel=3, checkFunc=check_biorseoBGSUJAR3DB, checkArgs=[basename, True]))
1027 - # joblist.append(Job(command=[biorseoDir+"/bin/biorseo", "-s", outputDir+basename+".fa", "--jar3dcsv", outputDir+basename+".sites.csv", "-o", outputDir+"PK/"+basename+".jar3dC", "--type", "C"], priority=4, timeout=3600, how_many_in_parallel=3, checkFunc=check_biorseoBGSUJAR3DC, checkArgs=[basename, True])) 1027 +# joblist.append(Job(command=[biorseoDir+"/bin/biorseo", "-s", outputDir+basename+".fa", "--jar3dcsv", outputDir+basename+".sites.csv", "-o", outputDir+"PK/"+basename+".jar3dC", "--type", "C"], priority=4, timeout=3600, how_many_in_parallel=3, checkFunc=check_biorseoBGSUJAR3DC, checkArgs=[basename, True]))
1028 - # joblist.append(Job(command=[biorseoDir+"/bin/biorseo", "-s", outputDir+basename+".fa", "--jar3dcsv", outputDir+basename+".sites.csv", "-o", outputDir+"PK/"+basename+".jar3dD", "--type", "D"], priority=4, timeout=3600, how_many_in_parallel=3, checkFunc=check_biorseoBGSUJAR3DD, checkArgs=[basename, True])) 1028 +# joblist.append(Job(command=[biorseoDir+"/bin/biorseo", "-s", outputDir+basename+".fa", "--jar3dcsv", outputDir+basename+".sites.csv", "-o", outputDir+"PK/"+basename+".jar3dD", "--type", "D"], priority=4, timeout=3600, how_many_in_parallel=3, checkFunc=check_biorseoBGSUJAR3DD, checkArgs=[basename, True]))
1029 - # # biorseoBGSUBayesPairA-D 1029 +# # biorseoBGSUBayesPairA-D
1030 - # joblist.append(Job(command=[biorseoDir+"/bin/biorseo", "-s", outputDir+basename+".fa", "--bayespaircsv", outputDir+basename+".bgsubyp.csv", "-o", outputDir+"noPK/"+basename+".bgsubypA", "--type", "A", "-n"], priority=4, timeout=3600, how_many_in_parallel=3, checkFunc=check_biorseoBGSUBayesPairA, checkArgs=[basename, False])) 1030 +# joblist.append(Job(command=[biorseoDir+"/bin/biorseo", "-s", outputDir+basename+".fa", "--bayespaircsv", outputDir+basename+".bgsubyp.csv", "-o", outputDir+"noPK/"+basename+".bgsubypA", "--type", "A", "-n"], priority=4, timeout=3600, how_many_in_parallel=3, checkFunc=check_biorseoBGSUBayesPairA, checkArgs=[basename, False]))
1031 - # joblist.append(Job(command=[biorseoDir+"/bin/biorseo", "-s", outputDir+basename+".fa", "--bayespaircsv", outputDir+basename+".bgsubyp.csv", "-o", outputDir+"noPK/"+basename+".bgsubypB", "--type", "B", "-n"], priority=4, timeout=3600, how_many_in_parallel=3, checkFunc=check_biorseoBGSUBayesPairB, checkArgs=[basename, False])) 1031 +# joblist.append(Job(command=[biorseoDir+"/bin/biorseo", "-s", outputDir+basename+".fa", "--bayespaircsv", outputDir+basename+".bgsubyp.csv", "-o", outputDir+"noPK/"+basename+".bgsubypB", "--type", "B", "-n"], priority=4, timeout=3600, how_many_in_parallel=3, checkFunc=check_biorseoBGSUBayesPairB, checkArgs=[basename, False]))
1032 - # joblist.append(Job(command=[biorseoDir+"/bin/biorseo", "-s", outputDir+basename+".fa", "--bayespaircsv", outputDir+basename+".bgsubyp.csv", "-o", outputDir+"noPK/"+basename+".bgsubypC", "--type", "C", "-n"], priority=4, timeout=3600, how_many_in_parallel=3, checkFunc=check_biorseoBGSUBayesPairC, checkArgs=[basename, False])) 1032 +# joblist.append(Job(command=[biorseoDir+"/bin/biorseo", "-s", outputDir+basename+".fa", "--bayespaircsv", outputDir+basename+".bgsubyp.csv", "-o", outputDir+"noPK/"+basename+".bgsubypC", "--type", "C", "-n"], priority=4, timeout=3600, how_many_in_parallel=3, checkFunc=check_biorseoBGSUBayesPairC, checkArgs=[basename, False]))
1033 - # joblist.append(Job(command=[biorseoDir+"/bin/biorseo", "-s", outputDir+basename+".fa", "--bayespaircsv", outputDir+basename+".bgsubyp.csv", "-o", outputDir+"noPK/"+basename+".bgsubypD", "--type", "D", "-n"], priority=4, timeout=3600, how_many_in_parallel=3, checkFunc=check_biorseoBGSUBayesPairD, checkArgs=[basename, False])) 1033 +# joblist.append(Job(command=[biorseoDir+"/bin/biorseo", "-s", outputDir+basename+".fa", "--bayespaircsv", outputDir+basename+".bgsubyp.csv", "-o", outputDir+"noPK/"+basename+".bgsubypD", "--type", "D", "-n"], priority=4, timeout=3600, how_many_in_parallel=3, checkFunc=check_biorseoBGSUBayesPairD, checkArgs=[basename, False]))
1034 - # joblist.append(Job(command=[biorseoDir+"/bin/biorseo", "-s", outputDir+basename+".fa", "--bayespaircsv", outputDir+basename+".bgsubyp.csv", "-o", outputDir+"PK/"+basename+".bgsubypA", "--type", "A"], priority=4, timeout=3600, how_many_in_parallel=3, checkFunc=check_biorseoBGSUBayesPairA, checkArgs=[basename, True])) 1034 +# joblist.append(Job(command=[biorseoDir+"/bin/biorseo", "-s", outputDir+basename+".fa", "--bayespaircsv", outputDir+basename+".bgsubyp.csv", "-o", outputDir+"PK/"+basename+".bgsubypA", "--type", "A"], priority=4, timeout=3600, how_many_in_parallel=3, checkFunc=check_biorseoBGSUBayesPairA, checkArgs=[basename, True]))
1035 - # joblist.append(Job(command=[biorseoDir+"/bin/biorseo", "-s", outputDir+basename+".fa", "--bayespaircsv", outputDir+basename+".bgsubyp.csv", "-o", outputDir+"PK/"+basename+".bgsubypB", "--type", "B"], priority=4, timeout=3600, how_many_in_parallel=3, checkFunc=check_biorseoBGSUBayesPairB, checkArgs=[basename, True])) 1035 +# joblist.append(Job(command=[biorseoDir+"/bin/biorseo", "-s", outputDir+basename+".fa", "--bayespaircsv", outputDir+basename+".bgsubyp.csv", "-o", outputDir+"PK/"+basename+".bgsubypB", "--type", "B"], priority=4, timeout=3600, how_many_in_parallel=3, checkFunc=check_biorseoBGSUBayesPairB, checkArgs=[basename, True]))
1036 - # joblist.append(Job(command=[biorseoDir+"/bin/biorseo", "-s", outputDir+basename+".fa", "--bayespaircsv", outputDir+basename+".bgsubyp.csv", "-o", outputDir+"PK/"+basename+".bgsubypC", "--type", "C"], priority=4, timeout=3600, how_many_in_parallel=3, checkFunc=check_biorseoBGSUBayesPairC, checkArgs=[basename, True])) 1036 +# joblist.append(Job(command=[biorseoDir+"/bin/biorseo", "-s", outputDir+basename+".fa", "--bayespaircsv", outputDir+basename+".bgsubyp.csv", "-o", outputDir+"PK/"+basename+".bgsubypC", "--type", "C"], priority=4, timeout=3600, how_many_in_parallel=3, checkFunc=check_biorseoBGSUBayesPairC, checkArgs=[basename, True]))
1037 - # joblist.append(Job(command=[biorseoDir+"/bin/biorseo", "-s", outputDir+basename+".fa", "--bayespaircsv", outputDir+basename+".bgsubyp.csv", "-o", outputDir+"PK/"+basename+".bgsubypD", "--type", "D"], priority=4, timeout=3600, how_many_in_parallel=3, checkFunc=check_biorseoBGSUBayesPairD, checkArgs=[basename, True])) 1037 +# joblist.append(Job(command=[biorseoDir+"/bin/biorseo", "-s", outputDir+basename+".fa", "--bayespaircsv", outputDir+basename+".bgsubyp.csv", "-o", outputDir+"PK/"+basename+".bgsubypD", "--type", "D"], priority=4, timeout=3600, how_many_in_parallel=3, checkFunc=check_biorseoBGSUBayesPairD, checkArgs=[basename, True]))
1038 - # biorseoBayesPairA-D 1038 +# # biorseoBayesPairA-D
1039 - # joblist.append(Job(command=[biorseoDir+"/bin/biorseo", "-s", outputDir+basename+".fa", "--bayespaircsv", outputDir+basename+".byp.csv", "-o", outputDir+"noPK/"+basename+".bypA", "--type", "A", "-n"], priority=4, timeout=3600, how_many_in_parallel=3, checkFunc=check_biorseoBayesPairA, checkArgs=[basename, False])) 1039 +# joblist.append(Job(command=[biorseoDir+"/bin/biorseo", "-s", outputDir+basename+".fa", "--bayespaircsv", outputDir+basename+".byp.csv", "-o", outputDir+"noPK/"+basename+".bypA", "--type", "A", "-n"], priority=4, timeout=3600, how_many_in_parallel=3, checkFunc=check_biorseoBayesPairA, checkArgs=[basename, False]))
1040 - # joblist.append(Job(command=[biorseoDir+"/bin/biorseo", "-s", outputDir+basename+".fa", "--bayespaircsv", outputDir+basename+".byp.csv", "-o", outputDir+"noPK/"+basename+".bypB", "--type", "B", "-n"], priority=4, timeout=3600, how_many_in_parallel=3, checkFunc=check_biorseoBayesPairB, checkArgs=[basename, False])) 1040 +# joblist.append(Job(command=[biorseoDir+"/bin/biorseo", "-s", outputDir+basename+".fa", "--bayespaircsv", outputDir+basename+".byp.csv", "-o", outputDir+"noPK/"+basename+".bypB", "--type", "B", "-n"], priority=4, timeout=3600, how_many_in_parallel=3, checkFunc=check_biorseoBayesPairB, checkArgs=[basename, False]))
1041 - # joblist.append(Job(command=[biorseoDir+"/bin/biorseo", "-s", outputDir+basename+".fa", "--bayespaircsv", outputDir+basename+".byp.csv", "-o", outputDir+"noPK/"+basename+".bypC", "--type", "C", "-n"], priority=4, timeout=3600, how_many_in_parallel=3, checkFunc=check_biorseoBayesPairC, checkArgs=[basename, False])) 1041 +# joblist.append(Job(command=[biorseoDir+"/bin/biorseo", "-s", outputDir+basename+".fa", "--bayespaircsv", outputDir+basename+".byp.csv", "-o", outputDir+"noPK/"+basename+".bypC", "--type", "C", "-n"], priority=4, timeout=3600, how_many_in_parallel=3, checkFunc=check_biorseoBayesPairC, checkArgs=[basename, False]))
1042 - # joblist.append(Job(command=[biorseoDir+"/bin/biorseo", "-s", outputDir+basename+".fa", "--bayespaircsv", outputDir+basename+".byp.csv", "-o", outputDir+"noPK/"+basename+".bypD", "--type", "D", "-n"], priority=4, timeout=3600, how_many_in_parallel=3, checkFunc=check_biorseoBayesPairD, checkArgs=[basename, False])) 1042 +# joblist.append(Job(command=[biorseoDir+"/bin/biorseo", "-s", outputDir+basename+".fa", "--bayespaircsv", outputDir+basename+".byp.csv", "-o", outputDir+"noPK/"+basename+".bypD", "--type", "D", "-n"], priority=4, timeout=3600, how_many_in_parallel=3, checkFunc=check_biorseoBayesPairD, checkArgs=[basename, False]))
1043 - # joblist.append(Job(command=[biorseoDir+"/bin/biorseo", "-s", outputDir+basename+".fa", "--bayespaircsv", outputDir+basename+".byp.csv", "-o", outputDir+"PK/"+basename+".bypA", "--type", "A"], priority=4, timeout=3600, how_many_in_parallel=3, checkFunc=check_biorseoBayesPairA, checkArgs=[basename, True])) 1043 +# joblist.append(Job(command=[biorseoDir+"/bin/biorseo", "-s", outputDir+basename+".fa", "--bayespaircsv", outputDir+basename+".byp.csv", "-o", outputDir+"PK/"+basename+".bypA", "--type", "A"], priority=4, timeout=3600, how_many_in_parallel=3, checkFunc=check_biorseoBayesPairA, checkArgs=[basename, True]))
1044 - # joblist.append(Job(command=[biorseoDir+"/bin/biorseo", "-s", outputDir+basename+".fa", "--bayespaircsv", outputDir+basename+".byp.csv", "-o", outputDir+"PK/"+basename+".bypB", "--type", "B"], priority=4, timeout=3600, how_many_in_parallel=3, checkFunc=check_biorseoBayesPairB, checkArgs=[basename, True])) 1044 +# joblist.append(Job(command=[biorseoDir+"/bin/biorseo", "-s", outputDir+basename+".fa", "--bayespaircsv", outputDir+basename+".byp.csv", "-o", outputDir+"PK/"+basename+".bypB", "--type", "B"], priority=4, timeout=3600, how_many_in_parallel=3, checkFunc=check_biorseoBayesPairB, checkArgs=[basename, True]))
1045 - # joblist.append(Job(command=[biorseoDir+"/bin/biorseo", "-s", outputDir+basename+".fa", "--bayespaircsv", outputDir+basename+".byp.csv", "-o", outputDir+"PK/"+basename+".bypC", "--type", "C"], priority=4, timeout=3600, how_many_in_parallel=3, checkFunc=check_biorseoBayesPairC, checkArgs=[basename, True])) 1045 +# joblist.append(Job(command=[biorseoDir+"/bin/biorseo", "-s", outputDir+basename+".fa", "--bayespaircsv", outputDir+basename+".byp.csv", "-o", outputDir+"PK/"+basename+".bypC", "--type", "C"], priority=4, timeout=3600, how_many_in_parallel=3, checkFunc=check_biorseoBayesPairC, checkArgs=[basename, True]))
1046 - # joblist.append(Job(command=[biorseoDir+"/bin/biorseo", "-s", outputDir+basename+".fa", "--bayespaircsv", outputDir+basename+".byp.csv", "-o", outputDir+"PK/"+basename+".bypD", "--type", "D"], priority=4, timeout=3600, how_many_in_parallel=3, checkFunc=check_biorseoBayesPairD, checkArgs=[basename, True])) 1046 +# joblist.append(Job(command=[biorseoDir+"/bin/biorseo", "-s", outputDir+basename+".fa", "--bayespaircsv", outputDir+basename+".byp.csv", "-o", outputDir+"PK/"+basename+".bypD", "--type", "D"], priority=4, timeout=3600, how_many_in_parallel=3, checkFunc=check_biorseoBayesPairD, checkArgs=[basename, True]))
1047 - # biorseoRawA,B 1047 +# # biorseoRawA,B
1048 - # joblist.append(Job(command=[biorseoDir+"/bin/biorseo", "-s", outputDir + basename + ".fa", "-d", descfolder, "-o", outputDir+"noPK/" + basename + ".rawA", "--type", "A", "-n"], priority=4, timeout=3600, how_many_in_parallel=3, checkFunc=check_biorseoRawA, checkArgs=[basename, False])) 1048 +# joblist.append(Job(command=[biorseoDir+"/bin/biorseo", "-s", outputDir + basename + ".fa", "-d", descfolder, "-o", outputDir+"noPK/" + basename + ".rawA", "--type", "A", "-n"], priority=4, timeout=3600, how_many_in_parallel=3, checkFunc=check_biorseoRawA, checkArgs=[basename, False]))
1049 - # joblist.append(Job(command=[biorseoDir+"/bin/biorseo", "-s", outputDir + basename + ".fa", "-d", descfolder, "-o", outputDir+"noPK/" + basename + ".rawB", "--type", "B", "-n"], priority=4, timeout=3600, how_many_in_parallel=3, checkFunc=check_biorseoRawB, checkArgs=[basename, False])) 1049 +# joblist.append(Job(command=[biorseoDir+"/bin/biorseo", "-s", outputDir + basename + ".fa", "-d", descfolder, "-o", outputDir+"noPK/" + basename + ".rawB", "--type", "B", "-n"], priority=4, timeout=3600, how_many_in_parallel=3, checkFunc=check_biorseoRawB, checkArgs=[basename, False]))
1050 - # joblist.append(Job(command=[biorseoDir+"/bin/biorseo", "-s", outputDir + basename + ".fa", "-d", descfolder, "-o", outputDir+"PK/" + basename + ".rawA", "--type", "A"], priority=4, timeout=3600, how_many_in_parallel=3, checkFunc=check_biorseoRawA, checkArgs=[basename, True])) 1050 +# joblist.append(Job(command=[biorseoDir+"/bin/biorseo", "-s", outputDir + basename + ".fa", "-d", descfolder, "-o", outputDir+"PK/" + basename + ".rawA", "--type", "A"], priority=4, timeout=3600, how_many_in_parallel=3, checkFunc=check_biorseoRawA, checkArgs=[basename, True]))
1051 - # joblist.append(Job(command=[biorseoDir+"/bin/biorseo", "-s", outputDir + basename + ".fa", "-d", descfolder, "-o", outputDir+"PK/" + basename + ".rawB", "--type", "B"], priority=4, timeout=3600, how_many_in_parallel=3, checkFunc=check_biorseoRawB, checkArgs=[basename, True])) 1051 +# joblist.append(Job(command=[biorseoDir+"/bin/biorseo", "-s", outputDir + basename + ".fa", "-d", descfolder, "-o", outputDir+"PK/" + basename + ".rawB", "--type", "B"], priority=4, timeout=3600, how_many_in_parallel=3, checkFunc=check_biorseoRawB, checkArgs=[basename, True]))
1052 - # RNA MoIP 1052 +# # RNA-MoIP
1053 - # joblist.append(Job(function=launch_RNAMoIP, args=[instance.seq_, instance.header_, basename], priority=3, timeout=3600, checkFunc=check_RNAMoIP, checkArgs=[basename])) 1053 +# joblist.append(Job(function=launch_RNAMoIP, args=[instance.seq_, instance.header_, basename], priority=3, timeout=3600, checkFunc=check_RNAMoIP, checkArgs=[basename]))
1054 - # Biokop 1054 +# # Biokop
1055 - # joblist.append(Job(command=[biorseoDir + "/../biokop/biokop", "-n1", "-i", outputDir + basename + ".fa", "-o", outputDir + basename + ".biok"], priority=5, timeout=15000, how_many_in_parallel=3, checkFunc=check_biokop, checkArgs=[basename])) 1055 +# joblist.append(Job(command=[biorseoDir + "/../biokop/biokop", "-n1", "-i", outputDir + basename + ".fa", "-o", outputDir + basename + ".biok"], priority=5, timeout=15000, how_many_in_parallel=3, checkFunc=check_biokop, checkArgs=[basename]))
1056 1056
1057 1057
1058 # # execute jobs 1058 # # execute jobs
...@@ -1147,7 +1147,7 @@ x_noPK_fully = [ ...@@ -1147,7 +1147,7 @@ x_noPK_fully = [
1147 print() 1147 print()
1148 print("Without PK:") 1148 print("Without PK:")
1149 print("%s RNAsubopt predictions" % is_all(len(x_noPK[0]), tot)) 1149 print("%s RNAsubopt predictions" % is_all(len(x_noPK[0]), tot))
1150 -print("%s RNA MoIP predictions" % is_all(len(x_noPK[1]), tot)) 1150 +print("%s RNA-MoIP predictions" % is_all(len(x_noPK[1]), tot))
1151 print("%s biorseo + BGSU + JAR3D + f1A predictions" % is_all(len(x_noPK[2]), tot)) 1151 print("%s biorseo + BGSU + JAR3D + f1A predictions" % is_all(len(x_noPK[2]), tot))
1152 print("%s biorseo + BGSU + JAR3D + f1B predictions" % is_all(len(x_noPK[3]), tot)) 1152 print("%s biorseo + BGSU + JAR3D + f1B predictions" % is_all(len(x_noPK[3]), tot))
1153 print("%s biorseo + BGSU + JAR3D + f1C predictions" % is_all(len(x_noPK[4]), tot)) 1153 print("%s biorseo + BGSU + JAR3D + f1C predictions" % is_all(len(x_noPK[4]), tot))
...@@ -1271,7 +1271,7 @@ print("Wilcoxon signed rank test with PK: H0 = 'The position parameter of Biokop ...@@ -1271,7 +1271,7 @@ print("Wilcoxon signed rank test with PK: H0 = 'The position parameter of Biokop
1271 # print("RNA-MOIP",":",x_noPK[1]) 1271 # print("RNA-MOIP",":",x_noPK[1])
1272 # for data, name in zip(x_PK, labels): 1272 # for data, name in zip(x_PK, labels):
1273 # print(name,":",data) 1273 # print(name,":",data)
1274 -# labels = ["RNAsubopt","Biokop\t", "RNA MoIP\t","RawA\t","RawB\t","BayesPairingA","BayesPairingB","BayesPairingC","BayesPairingD","JAR3DA\t","JAR3DB\t","JAR3DC\t","JAR3DD\t","BGSUBPairingA","BGSUBPairingB","BGSUBPairingC","BGSUBPairingD"] 1274 +# labels = ["RNAsubopt","Biokop\t", "RNA-MoIP\t","RawA\t","RawB\t","BayesPairingA","BayesPairingB","BayesPairingC","BayesPairingD","JAR3DA\t","JAR3DB\t","JAR3DC\t","JAR3DD\t","BGSUBPairingA","BGSUBPairingB","BGSUBPairingC","BGSUBPairingD"]
1275 # for r in RNAcontainer: 1275 # for r in RNAcontainer:
1276 # print("\n",r.header_,"\nTrue structure:\t", r.true2d) 1276 # print("\n",r.header_,"\nTrue structure:\t", r.true2d)
1277 # for m, name in zip([r.rnasubopt, r.biokop, r.rnamoip, 1277 # for m, name in zip([r.rnasubopt, r.biokop, r.rnamoip,
...@@ -1295,7 +1295,7 @@ print("Wilcoxon signed rank test with PK: H0 = 'The position parameter of Biokop ...@@ -1295,7 +1295,7 @@ print("Wilcoxon signed rank test with PK: H0 = 'The position parameter of Biokop
1295 1295
1296 merge = [ x_PK_fully[0], # Biokop 1296 merge = [ x_PK_fully[0], # Biokop
1297 x_noPK_fully[0], # RNA subopt 1297 x_noPK_fully[0], # RNA subopt
1298 - x_noPK_fully[1], # RNA MoIP 1298 + x_noPK_fully[1], # RNA-MoIP
1299 x_noPK_fully[2], x_PK_fully[2], #biorseoRawA 1299 x_noPK_fully[2], x_PK_fully[2], #biorseoRawA
1300 x_noPK_fully[3], x_PK_fully[3], #biorseoRawB 1300 x_noPK_fully[3], x_PK_fully[3], #biorseoRawB
1301 x_noPK_fully[4], x_PK_fully[4], #biorseoBayesPairA 1301 x_noPK_fully[4], x_PK_fully[4], #biorseoBayesPairA
...@@ -1329,7 +1329,7 @@ colors = [ 'green', 'blue', 'goldenrod', ...@@ -1329,7 +1329,7 @@ colors = [ 'green', 'blue', 'goldenrod',
1329 'lime', 'lime' 1329 'lime', 'lime'
1330 ] 1330 ]
1331 labels = [ "Biokop", "RNAsubopt", 1331 labels = [ "Biokop", "RNAsubopt",
1332 - "RNA MoIP", 1332 + "RNA-MoIP",
1333 "$f_{1A}$", 1333 "$f_{1A}$",
1334 "$f_{1B}$", 1334 "$f_{1B}$",
1335 "$f_{1A}$", 1335 "$f_{1A}$",
...@@ -1363,7 +1363,7 @@ plt.xticks([1.0+i for i in range(16)], labels[1:]) ...@@ -1363,7 +1363,7 @@ plt.xticks([1.0+i for i in range(16)], labels[1:])
1363 plt.ylim((0.5, 1.01)) 1363 plt.ylim((0.5, 1.01))
1364 plt.ylabel("MCC", fontsize=12) 1364 plt.ylabel("MCC", fontsize=12)
1365 plt.subplots_adjust(left=0.05, right=0.95) 1365 plt.subplots_adjust(left=0.05, right=0.95)
1366 -plt.title("Performance without pseudoknots (%d RNAs included)" % len(x_noPK_fully[0])) 1366 +# plt.title("Performance without pseudoknots (%d RNAs included)" % len(x_noPK_fully[0]))
1367 1367
1368 1368
1369 ax = plt.subplot(212) 1369 ax = plt.subplot(212)
...@@ -1385,36 +1385,36 @@ plt.xticks([1.0+i for i in range(16)], labels) ...@@ -1385,36 +1385,36 @@ plt.xticks([1.0+i for i in range(16)], labels)
1385 plt.ylim((0.5, 1.01)) 1385 plt.ylim((0.5, 1.01))
1386 plt.ylabel("MCC", fontsize=12) 1386 plt.ylabel("MCC", fontsize=12)
1387 plt.subplots_adjust(left=0.05, right=0.95) 1387 plt.subplots_adjust(left=0.05, right=0.95)
1388 -plt.text(6.2,-0.3,"Performance with pseudoknots (%d RNAs included)" % len(x_PK_fully[0]), fontsize=12) 1388 +# plt.text(6.2,-0.3,"Performance with pseudoknots (%d RNAs included)" % len(x_PK_fully[0]), fontsize=12)
1389 1389
1390 1390
1391 plt.show() 1391 plt.show()
1392 1392
1393 1393
1394 -# ================== MCC performance ==================================== 1394 +# # ================== MCC performance ====================================
1395 -RNAcontainer.sort(key=lambda x: x.rnasubopt.max_mcc) 1395 +# RNAcontainer.sort(key=lambda x: x.rnasubopt.max_mcc)
1396 1396
1397 -x = [ 1397 +# x = [
1398 - [ rna.rnasubopt.max_mcc for rna in RNAcontainer], 1398 +# [ rna.rnasubopt.max_mcc for rna in RNAcontainer],
1399 - [ rna.rnamoip.max_mcc for rna in RNAcontainer], 1399 +# [ rna.rnamoip.max_mcc for rna in RNAcontainer],
1400 - # [ rna.biorseoRawA.max_mcc for rna in RNAs_fully_predicted], 1400 +# # [ rna.biorseoRawA.max_mcc for rna in RNAs_fully_predicted],
1401 - # [ rna.biorseoRawB.max_mcc for rna in RNAs_fully_predicted], 1401 +# # [ rna.biorseoRawB.max_mcc for rna in RNAs_fully_predicted],
1402 - # [ rna.biokop.max_mcc for rna in RNAs_fully_predicted], 1402 +# # [ rna.biokop.max_mcc for rna in RNAs_fully_predicted],
1403 - # [ rna.biorseoBGSUJAR3DA.max_mcc for rna in RNAs_fully_predicted] 1403 +# # [ rna.biorseoBGSUJAR3DA.max_mcc for rna in RNAs_fully_predicted]
1404 -] 1404 +# ]
1405 -colors = ['xkcd:blue','goldenrod']#xkcd:red', 'green', 'cyan'] 1405 +# colors = ['xkcd:blue','goldenrod']#xkcd:red', 'green', 'cyan']
1406 -labels = ["Best RNAsubopt MCC", "Best RNA-MoIP MCC"]# "Best RawA prediction", "Best Biokop prediction", "Best JAR3DA prediction"] 1406 +# labels = ["Best RNAsubopt MCC", "Best RNA-MoIP MCC"]# "Best RawA prediction", "Best Biokop prediction", "Best JAR3DA prediction"]
1407 -for y, col, lab in zip(x, colors, labels): 1407 +# for y, col, lab in zip(x, colors, labels):
1408 - x_data = [ i for i in range(len(y)) if y[i]] 1408 +# x_data = [ i for i in range(len(y)) if y[i]]
1409 - y_data = [ i for i in y if i] 1409 +# y_data = [ i for i in y if i]
1410 - plt.scatter(x_data, y_data, color=col, label=lab, marker='o', s=2.5) 1410 +# plt.scatter(x_data, y_data, color=col, label=lab, marker='o', s=2.5)
1411 -plt.axhline(y=0, color='black', linewidth=1) 1411 +# plt.axhline(y=0, color='black', linewidth=1)
1412 -plt.axvline(x=0, color='black', linewidth=1) 1412 +# plt.axvline(x=0, color='black', linewidth=1)
1413 -# plt.xlabel("608 RNA structures structures (10 < |nt| < 100)") 1413 +# # plt.xlabel("608 RNA structures structures (10 < |nt| < 100)")
1414 -# plt.ylabel("Mattews Correlation Coefficient") 1414 +# # plt.ylabel("Mattews Correlation Coefficient")
1415 -plt.title("Performance of the prediction method") 1415 +# plt.title("Performance of the prediction method")
1416 -plt.legend(loc="upper left") 1416 +# plt.legend(loc="upper left")
1417 -plt.show() 1417 +# plt.show()
1418 1418
1419 1419
1420 1420
...@@ -1542,7 +1542,7 @@ plt.show() ...@@ -1542,7 +1542,7 @@ plt.show()
1542 # [ rna.biokop.max_mcc - rna.rnasubopt.max_mcc for rna in RNAcontainer if len(rna.biokop.predictions)], 1542 # [ rna.biokop.max_mcc - rna.rnasubopt.max_mcc for rna in RNAcontainer if len(rna.biokop.predictions)],
1543 #] 1543 #]
1544 # colors = ['xkcd:goldenrod', 'xkcd:red', 'firebrick', 'limegreen'] 1544 # colors = ['xkcd:goldenrod', 'xkcd:red', 'firebrick', 'limegreen']
1545 -# labels = ["$\Delta$MCC(RNAsubopt,RNA MoIP)","$\Delta$MCC(RNAsubopt,RNA MoBOIP)", 1545 +# labels = ["$\Delta$MCC(RNAsubopt,RNA-MoIP)","$\Delta$MCC(RNAsubopt,RNA MoBOIP)",
1546 # "$\Delta$MCC(RNAsubopt,RNA MoBOIP++)","$\Delta$MCC(RNAsubopt,Biokop)"] 1546 # "$\Delta$MCC(RNAsubopt,RNA MoBOIP++)","$\Delta$MCC(RNAsubopt,Biokop)"]
1547 # bplot = plt.boxplot(x, vert=False, patch_artist=True, notch=False, whis=[3,97]) 1547 # bplot = plt.boxplot(x, vert=False, patch_artist=True, notch=False, whis=[3,97])
1548 # for patch, color in zip(bplot['boxes'], colors): 1548 # for patch, color in zip(bplot['boxes'], colors):
......