Louis BECQUEY

merge

......@@ -23,5 +23,11 @@ results/*
log_of_the_run.sh
logBadDesc.txt
gurobi.log
IL*
HL*
temp/*
# data
data/modules/BGSU/HL/3.2/diagnostic/*
data/modules/BGSU/HL/3.2/lib/*
data/modules/BGSU/IL/3.2/diagnostic/*
data/modules/BGSU/IL/3.2/lib/*
data/modules/DESC/*.desc
\ No newline at end of file
......
......@@ -2,9 +2,6 @@
CPLEXDir="/opt/ibm/ILOG/CPLEX_Studio128"
IEIGEN="/usr/local/include/eigen3"
INUPACK="/usr/local/include/nupack"
biorseoDir="/home/persalteas/Software/biorseo"
jar3dexec="/home/persalteas/Software/jar3dbin/jar3d_2014-12-11.jar"
ILmotifDir="/home/persalteas/Data/RNA/motifs/Matlab_results/IL/3.2/lib"
HLmotifDir="/home/persalteas/Data/RNA/motifs/Matlab_results/HL/3.2/lib"
descfolder="/home/persalteas/Data/RNA/motifs/No_Redondance_DESC/"
bypdir="/home/persalteas/Software/BayesPairing/bayespairing/src"
biorseoDir="/home/persalteas/Software/biorseo"
......
This is a bi-objective integer programming algorithm.
It predicts the secondary structure of a RNA sequence with pieces of 3D information (non-canonical contacts) at some places,
by identifying zones that can fold like known motifs from the RNA 3D Motif Atlas.
Biorseo (Bi-Objective RNA Structure Efficient Optimizer)
===================================
This tool predicts the secondary structure of a RNA sequence with pieces of 3D information (non-canonical contacts) at some places,
by identifying zones that can fold like known modules from data like the RNA 3D Motif Atlas or Rna3Dmotifs.
Contact : louis.becquey@univ-evry.fr
1/ How it works
===================================
......@@ -8,24 +12,123 @@ INPUT:
- An RNA sequence (tested with sequences ~100 bases)
THEN
- Identifies possible 2D folds with RNAsubopt.
- Knowing possible 2D folds, locate every possibly unpaired loop (hairpin loop, internal loop, multiple loop...)
- align each unpaired loop to the catalogue of models of known RNA motifs (The 3D Motif Atlas of the BGSU RNA group)
- retrieve a list of potential motif-insertion-sites in the RNA sequence. Use them to define the constraints for the IP problem.
- Solve a bi-objective IP problem:
* Maximize the expected accuracy of the secondary structure,
* Maximize the number and size of motifs inserted in the structure.
- **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)
- **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)
- **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.
OUTPUT:
- A set of secondary structures from the pareto front,
- The list of known motif inserted in the corresponding structures (and the non-canonical contacts)
- (lower score structures from k-Pareto sets, not implemented yet.)
- A set of secondary structures from the Pareto front,
- The list of known modules inserted inplace in the corresponding structures
2/ The different models
==================================
MODULE SOURCES
Biorseo can be used with two modules datasets (yet):
* Rna3Dmotifs (from the work of *Djelloul & Denise, 2008*), but with the 3D data of 2018
* The RNA 3D Motif Atlas of BGSU's RNA lab (*Petrov et al, 2013*, see http://rna.bgsu.edu/rna3dhub/motifs/)
* RNA-Bricks 2 or CaRNAval could theoretically be used, but are not supported (yet). You might write your own API.
2/ Installation
PATTERN MATCHING STEP
- 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.
- 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.
- 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.
OBJECTIVE FUNCTIONS FOR THE MODULE INSERTION CRITERIA
* **Function A** : weights a module by its squared number of nucleotides (like RNA-MoIP).
* **Function B** : weights a module by its number of components (strands) and penalizes it by the log^(_2) of its nucleotide size.
* **Function C** : weights a module by its insertion site score (JAR3D or BayesPairing score).
* **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.
3/ Recommended uses
==================================
- Download and install RNAsubopt from the ViennaRNA package (https://www.tbi.univie.ac.at/RNA/)
- Download and install IBM ILOG Cplex optimization studio (https://www.ibm.com/analytics/cplex-optimizer), free academic account required
- If **you know you have no pseudoknot**:
* Benchmarks show Biorseo does not perform better than simpler tools like RNAsubopt alone. Please use RNAsubopt (ViennaRNA package) or Fold (RNAstructure package).
- If you **might expect a pseudoknot, or don't know**:
* 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:
`./bin/biorseo -s PDB_00304.fa --descfolder ./data/modules/DESC --type B -o PDB_00304.rawB `
* 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:
`./bin/biorseo -s PDB_00304.fa --jar3dcsv PDB_00304.sites.csv --type B -o PDB_00304.jar3dB`
4/ Installation
==================================
### DEPENDENCIES
- Make sure you have Python 3.5+, Cmake, and a C++ compiler installed on your distribution.
- Install automake and libboost-filesystem.
- 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.
- Download and install Eigen: Get the latest Eigen archive from http://eigen.tuxfamily.org. Unpack it, and install it.
```bash
wget http://bitbucket.org/eigen/eigen/get/3.3.7.tar.gz -O eigen_src.tar.gz
tar -xf eigen_src.tar.gz
cd eigen-eigen-323c052e1731
mkdir build
cd build
cmake ..
sudo make install
```
- 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:
```bash
wget http://www.nupack.org/downloads/serve_file/nupack3.2.2.tar.gz
tar -xf nupack3.2.2.tar.gz
cd nupack3.2.2
mkdir build
cd build
cmake ..
make -j4
sudo make install
```
### OPTIONAL DEPENDENCIES FOR USE OF JAR3D
- Download and install RNAsubopt from the [ViennaRNA package](https://www.tbi.univie.ac.at/RNA/).
- Download and install Java runtime (Tested with Java 10)
- Download and install the latest JAR3D executable "jar3d_releasedate.jar" and motif models in this folder (http://rna.bgsu.edu/data/jar3d/models/)
Note that for HL and ILs, only the latest version is required (not all the versions provided in the folders).
- Download and install a C++ compiler and building dependencies and utilities (g++ or clang, automake, libboost)
- Download the latest JAR3D executable "*jar3d_releasedate.jar*", and latest IL and HL models from [here](http://rna.bgsu.edu/data/jar3d/models/).
Note that only the latest version is required (not all the versions provided in the folders).
### OPTIONAL DEPENDENCIES FOR USE OF BAYESPAIRING
- Download and install RNAfold from the [ViennaRNA package](https://www.tbi.univie.ac.at/RNA/).
- Make sure you have Python 3.5+ with packages networkx, numpy, regex, wrapt and biopython
- Clone the latest BayesPairing Git repo, and install it :
```
git clone http://jwgitlab.cs.mcgill.ca/sarrazin/rnabayespairing.git BayesPairing
cd BayesPairing
pip install .
```
### RNA3DMOTIFS DATA
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`.
### THE RNA 3D MOTIF ATLAS DATA
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`.
### BUILDING
* Clone this git repository : `git clone https://github.com/persalteas/biorseo.git` and `cd biorseo`.
* 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:
* CPLEXDir="/opt/ibm/ILOG/CPLEX_Studio128_Student"
* IEIGEN="/usr/local/include/eigen3"
* INUPACK="/usr/local/include/nupack"
* jar3dexec="/nhome/siniac/lbecquey/Software/jar3dbin/jar3d_2014-12-11.jar"
* ILmotifDir="/nhome/siniac/lbecquey/Data/RNA/motifs/BGSU/Matlab_results/IL/3.2/lib"
* HLmotifDir="/nhome/siniac/lbecquey/Data/RNA/motifs/BGSU/Matlab_results/HL/3.2/lib"
* descfolder="/nhome/siniac/lbecquey/Data/RNA/motifs/Rna3Dmotifs/No_Redondance_DESC/"
* bypdir="/nhome/siniac/lbecquey/Software/BayesPairing/bayespairing/src"
* biorseoDir="/nhome/siniac/lbecquey/Software/biorseo"
* You might want to edit `Makefile` if you are not using clang as compiler. For example, if you use g++, replace clang++ by g++.
* Build it: `make -j4`
* The working executable file is `./bin/biorseo`.
### BAYESPAIRING USERS: PREPARE BAYESIAN NETWORKS
We run an example job for it to build the bayesian networks of our modules.
```
cd rnabayespairing/src
python3 parse_sequences.py -d rna3dmotif -seq ACACGGGGUAAGAGCUGAACGCAUCUAAGCUCGAAACCCACUUGGAAAAGAGACACCGCCGAGGUCCCGCGUACAAGACGCGGUCGAUAGACUCGGGGUGUGCGCGUCGAGGUAACGAGACGUUAAGCCCACGAGCACUAACAGACCAAAGCCAUCAU -ss ".................................................................((...............)xxxx(...................................................)xxx).............."
```
Use `-d rna3dmotif` or `-d 3dmotifatlas` depending on the module source you are planning to use.
This is a quite long step, but the bayesian networks will be ready for all the future uses.
......
>E.coli_alpha_operon_mRNA
UGUGCGUUUCCAUUUGAGUAUCCUGAAAACGGGCUUUUCAGCAUGGAACGUACAUAUUAAAUAGUAGGAGUGCAUAGUGGCCCGUAUAGCAGGCAUUAACAUUCCUGA
(((((((.(((((........[[[[....[[[[....{{{{.))))))))))))..........................]]]].....]]]]...........}}}}
\ No newline at end of file
>E.coli_alpha_operon_mRNA
UGUGCGUUUCCAUUUGAGUAUCCUGAAAACGGGCUUUUCAGCAUGGAACGUACAUAUUAAAUAGUAGGAGUGCAUAGUGGCCCGUAUAGCAGGCAUUAACAUUCCUGA
E.coli_alpha_operon_mRNA
UGUGCGUUUCCAUUUGAGUAUCCUGAAAACGGGCUUUUCAGCAUGGAACGUACAUAUUAAAUAGUAGGAGUGCAUAGUGGCCCGUAUAGCAGGCAUUAACAUUCCUGA
((.((.((..(((((.((...((........))...)).)).))).)).)).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 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
((.((.((..(((((.((...((........))...)).)).))).)).)).))..((..[[))((.((.((..((.((.((.((]].)).)))).)).)).)).)). + 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
((.((.((..(((((.((...((........))...)).)).))).)).)).))..((..[[))((.((.((..((.((.((.((]].)).)))).)).)).)).)). + 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
((.((.((..(((((.((...((........))...)).)).))).)).)).))..((..[[))((.((.((..((.((.((.((]].)).)))).)).)).)).)). + 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
((.((.((..(((((.((...((........))...)).)).))).)).)).))..((..[[))((.((.((..((.((.((.((]].)).)))).)).)).)).)). + 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
((.((.((..(((((.((...((........))...)).)).))).)).)).))..((..[[))((.((.((..((.((.((.((]].)).)))).)).)).)).)). + 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
((.((.((..(((((.((...((........))...)).)).))).)).)).))..((..[[))((.((.((..((.((.((.((]].)).)))).)).)).)).)). + 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
((.((.((..(((((.((...((........))...)).)).))).)).)).))..((..[[))((.((.((..((.((.((.((]].)).)))).)).)).)).)). + 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
((.((.((..(((((.((...((........))...)).)).))).)).)).))..((..[[))((.((.((..((.((.((.((]].)).)))).)).)).)).)). + 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
((.((.((..(((((.((...((........))...)).)).))).)).)).))..((..[[))((.((.((..((.((.((.((]].)).)))).)).)).)).)). + 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
((.((.((..(((((.((...((........))...)).)).))).)).)).))..((..[[))((.((.((..((.((.((.((]].)).)))).)).)).)).)). + 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
((.((.((..(((((.((...((........))...)).)).))).)).)).))..((..[[))((.((.((..((.((.((.((]].)).)))).)).)).)).)). + 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
((.((.((..(((((.((...((........))...)).)).))).)).)).))..((..[[))((.((.((..((.((.((.((]].)).)))).)).)).)).)). + 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
((.((.((..(((((.((...((........))...)).)).))).)).)).))..((..[[))((.((.((..((.((.((.((]].)).)))).)).)).)).)). + 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
((.((.((..(((((.((...((........))...)).)).))).)).)).))..((..[[))((.((.((..((.((.((.((]].)).)))).)).)).)).)). + 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
((.((.((..(((((.((...((........))...)).)).))).)).)).))..((..[[))((.((.((..((.((.((.((]].)).)))).)).)).)).)). + 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
((.((.((..(((((.((...((........))...)).)).))).)).)).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 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
((.((.((..(((((.((...((........))...)).)).))).)).)).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 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
((.((.((..(((((.((...((........))...)).)).))).)).)).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 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
((.((.((..(((((.((...((........))...)).)).))).)).)).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 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
((.((.((..(((((.((...((........))...)).)).))).)).)).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 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
((.((.((..(((((.((...((........))...)).)).))).)).)).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 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
((.((.((..(((((.((...((........))...)).)).))).)).)).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 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
((.((.((..(((((.((...((........))...)).)).))).)).)).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 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
((.((.((..(((((.((...((........))...)).)).))).)).)).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 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
((.((.((..(((((.((...((........))...)).)).))).)).)).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 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
((.((.((..(((((.((...((........))...)).)).))).)).)).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 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
((.((.((..(((((.((...((........))...)).)).))).)).)).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 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
((.((.((..(((((.((...((........))...)).)).))).)).)).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 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
((.((.((..(((((.((...((........))...)).)).))).)).)).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 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
((.((.((..(((((.((...((........))...)).)).))).)).)).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 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
(((((((.(((((........[[[[....[[[[....{{{{.))))))))))))..........................]]]].....]]]]...........}}}}
E.coli_alpha_operon_mRNA
UGUGCGUUUCCAUUUGAGUAUCCUGAAAACGGGCUUUUCAGCAUGGAACGUACAUAUUAAAUAGUAGGAGUGCAUAGUGGCCCGUAUAGCAGGCAUUAACAUUCCUGA
((.((.((..(((((.((...((........))...)).)).))).)).)).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 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
((.((.((..(((((.((...((((....))))...)).)).))).)).)).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 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
((.((.((..(((((.((...((((....))))...)).)).))).)).)).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 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
((.((.((..(((((.((...((((.[[.))))...)).)).))).)).)).))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 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
((.((((.((.((((.((...((((....))))...)).)).)).)))))).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 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
((.((((.((.((((.((...((((.[[.))))...)).)).)).)))))).))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 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
(((((((.((.((((.((...((((....))))...)).)).)).)))))))))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 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
(((((((.((.((((.((...((((.[[.))))...)).)).)).)))))))))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 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
(((((((.((.((((.((...((((....))))...)).)).)).)))))))))(((...))).(((((.((..((.((.((.((...)).)))).)).)).))))). + 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
(((((((.((.((((.((...((((.[[.))))...)).)).)).)))))))))..]]..((..[[[[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]]]]]. + 1F1T.A.4 + 2BTE.E.3 + 2Z4N.B.71 + 3IZ9.A.80 + 3IZE.A.89 + 3O58.1.74 4.5809424 29.7824221
(((((((.((.(((((((...((((....))))...))))).)).)))))))))(((...))).(((((.((..((.((.((.((...)).)))).)).)).))))). + 1YIT.0.13 + 2Z4N.B.71 + 3IZ9.A.196 + 3IZ9.A.80 + 3IZE.A.89 + 3IZE.A.89 4.2379134 30.7351363
(((((((.((.(((((((...((((.[[.))))...))))).)).)))))))))..]]..((..[[[[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]]]]]. + 1JZX.A.84 + 3IZ9.A.196 + 3IZ9.A.80 + 3IZE.A.89 + 3O58.1.74 3.8072368 30.7789696
(((((((.((.(((((((...((((....))))...))))).)).)))))))))(((...))).((((((((..((.((.((.((...)).)))).)).)))))))). + 1F1T.A.4 + 1YIT.0.13 + 2Z4N.B.71 + 3IZ9.A.80 + 3IZE.A.89 3.4642078 31.7297337
(((((((.((.(((((((...((((.[[.))))...))))).)).)))))))))..]]..((..[[[[[[[[..[[.[[.[[.[[)).]].]]]].]].]]]]]]]]. + 1F1T.A.4 + 2Z4N.B.71 + 3IZ9.A.80 + 3IZE.A.89 3.0335312 31.7735670
(((((((.((((((((((...((((....))))...))))).))))))))))))(((...))).((((((((..((.((.((.((...)).)))).)).)))))))). + 1F1T.A.4 + 1YIT.0.13 + 3IZ9.A.80 + 3IZE.A.89 2.6905022 32.7192790
(((((((.((((((((((...((((.[[.))))...))))).))))))))))))..]]..((..[[[[[[[[..[[.[[.[[.[[)).]].]]]].]].]]]]]]]]. + 1F1T.A.4 + 3IZ9.A.80 + 3IZE.A.89 2.2598256 32.7631123
(((((((.((((((((((...((((....))))...))))).))))))))))))(((...))).((((((((..((((.(((.((...)).))))))).)))))))). + 1F1T.A.4 + 1YIT.0.13 + 3IZ9.A.80 1.9167965 33.6749642
(((((((.((((((((((...((((.[[.))))...))))).))))))))))))..]]..((..[[[[[[[[..[[[[.[[[.[[)).]].]]]]]]].]]]]]]]]. + 1F1T.A.4 + 3IZ9.A.80 1.4861200 33.7187975
(((((((.((((((((((...((((.[[.))))...))))).))))))))))))..]]..((..[[[[[[[[..[[[[.[[[.[[)).]].]]]]]]].]]]]]]]]. + 3IZ9.A.196 + 3IZ9.A.80 1.4861200 33.7187975
(((((((.((((((((((...((((....))))...))))).))))))))))))(((...))).((((((((..((((.(((.((...)).))))))).)))))))). + 1YIT.0.13 + 3IZ9.A.196 + 3IZ9.A.80 1.9167965 33.6749642
(((((((.((((((((((...((((.[[.))))...))))).))))))))))))..]]..((..[[[[[[[[..[[.[[.[[.[[)).]].]]]].]].]]]]]]]]. + 1F1T.A.4 + 3IZ9.A.80 + 3O58.1.74 2.2598256 32.7631123
(((((((.((((((((((...((((.[[.))))...))))).))))))))))))..]]..((..[[[[[[[[..[[.[[.[[.[[)).]].]]]].]].]]]]]]]]. + 3IZ9.A.196 + 3IZ9.A.80 + 3O58.1.74 2.2598256 32.7631123
(((((((.((((((((((...((((.[[.))))...))))).))))))))))))..]]..((..[[[[[[[[..[[.[[.[[.[[)).]].]]]].]].]]]]]]]]. + 3IZ9.A.196 + 3IZ9.A.80 + 3IZE.A.89 2.2598256 32.7631123
(((((((.((((((((((...((((....))))...))))).))))))))))))(((...))).((((((((..((.((.((.((...)).)))).)).)))))))). + 1YIT.0.13 + 3IZ9.A.196 + 3IZ9.A.80 + 3IZE.A.89 2.6905022 32.7192790
(((((((.((((((((((...((((....))))...))))).))))))))))))(((...))).((((((((..((.((.((.((...)).)))).)).)))))))). + 1YIT.0.13 + 3IZ9.A.196 + 3IZ9.A.80 + 3O58.1.74 2.6905022 32.7192790
(((((((.((((((((((...((((....))))...))))).))))))))))))(((...))).((((((((..((.((.((.((...)).)))).)).)))))))). + 1F1T.A.4 + 1YIT.0.13 + 3IZ9.A.80 + 3O58.1.74 2.6905022 32.7192790
(((((((.((.(((((((...((((.[[.))))...))))).)).)))))))))..]]..((..[[[[[[[[..[[.[[.[[.[[)).]].]]]].]].]]]]]]]]. + 2Z4N.B.71 + 3IZ9.A.196 + 3IZ9.A.80 + 3IZE.A.89 3.0335312 31.7735670
(((((((.((.(((((((...((((.[[.))))...))))).)).)))))))))..]]..((..[[[[[[[[..[[.[[.[[.[[)).]].]]]].]].]]]]]]]]. + 1JZX.A.84 + 3IZ9.A.196 + 3IZ9.A.80 + 3IZE.A.89 3.0335312 31.7735670
(((((((.((.(((((((...((((.[[.))))...))))).)).)))))))))..]]..((..[[[[[[[[..[[.[[.[[.[[)).]].]]]].]].]]]]]]]]. + 1F1T.A.4 + 1JZX.A.84 + 3IZ9.A.80 + 3IZE.A.89 3.0335312 31.7735670
(((((((.((.(((((((...((((.[[.))))...))))).)).)))))))))..]]..((..[[[[[[[[..[[.[[.[[.[[)).]].]]]].]].]]]]]]]]. + 1JZX.A.84 + 3IZ9.A.196 + 3IZ9.A.80 + 3O58.1.74 3.0335312 31.7735670
(((((((.((.(((((((...((((.[[.))))...))))).)).)))))))))..]]..((..[[[[[[[[..[[.[[.[[.[[)).]].]]]].]].]]]]]]]]. + 1F1T.A.4 + 1JZX.A.84 + 3IZ9.A.80 + 3O58.1.74 3.0335312 31.7735670
(((((((.((.(((((((...((((.[[.))))...))))).)).)))))))))..]]..((..[[[[[[[[..[[.[[.[[.[[)).]].]]]].]].]]]]]]]]. + 1F1T.A.4 + 2Z4N.B.71 + 3IZ9.A.80 + 3O58.1.74 3.0335312 31.7735670
(((((((.((.(((((((...((((.[[.))))...))))).)).)))))))))..]]..((..[[[[[[[[..[[.[[.[[.[[)).]].]]]].]].]]]]]]]]. + 2Z4N.B.71 + 3IZ9.A.196 + 3IZ9.A.80 + 3O58.1.74 3.0335312 31.7735670
(((((((.((.(((((((...((((....))))...))))).)).)))))))))(((...))).((((((((..((.((.((.((...)).)))).)).)))))))). + 1JZX.A.84 + 1YIT.0.13 + 3IZ9.A.196 + 3IZ9.A.80 + 3IZE.A.89 3.4642078 31.7297337
(((((((.((.(((((((...((((....))))...))))).)).)))))))))(((...))).((((((((..((.((.((.((...)).)))).)).)))))))). + 1YIT.0.13 + 2Z4N.B.71 + 3IZ9.A.196 + 3IZ9.A.80 + 3IZE.A.89 3.4642078 31.7297337
(((((((.((.(((((((...((((....))))...))))).)).)))))))))(((...))).((((((((..((.((.((.((...)).)))).)).)))))))). + 1F1T.A.4 + 1JZX.A.84 + 1YIT.0.13 + 3IZ9.A.80 + 3IZE.A.89 3.4642078 31.7297337
(((((((.((.(((((((...((((....))))...))))).)).)))))))))(((...))).((((((((..((.((.((.((...)).)))).)).)))))))). + 1F1T.A.4 + 1JZX.A.84 + 1YIT.0.13 + 3IZ9.A.80 + 3O58.1.74 3.4642078 31.7297337
(((((((.((.(((((((...((((....))))...))))).)).)))))))))(((...))).((((((((..((.((.((.((...)).)))).)).)))))))). + 1JZX.A.84 + 1YIT.0.13 + 3IZ9.A.196 + 3IZ9.A.80 + 3O58.1.74 3.4642078 31.7297337
(((((((.((.(((((((...((((....))))...))))).)).)))))))))(((...))).((((((((..((.((.((.((...)).)))).)).)))))))). + 1YIT.0.13 + 2Z4N.B.71 + 3IZ9.A.196 + 3IZ9.A.80 + 3O58.1.74 3.4642078 31.7297337
(((((((.((.(((((((...((((....))))...))))).)).)))))))))(((...))).((((((((..((.((.((.((...)).)))).)).)))))))). + 1F1T.A.4 + 1YIT.0.13 + 2Z4N.B.71 + 3IZ9.A.80 + 3O58.1.74 3.4642078 31.7297337
(((((((.((.(((((((...((((.[[.))))...))))).)).)))))))))..]]..((..[[[[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]]]]]. + 2Z4N.B.71 + 3IZ9.A.196 + 3IZ9.A.80 + 3IZE.A.89 + 3O58.1.74 3.8072368 30.7789696
(((((((.((.(((((((...((((.[[.))))...))))).)).)))))))))..]]..((..[[[[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]]]]]. + 1JZX.A.84 + 3IZ9.A.196 + 3IZ9.A.80 + 3IZE.A.89 + 3IZE.A.89 3.8072368 30.7789696
(((((((.((.(((((((...((((.[[.))))...))))).)).)))))))))..]]..((..[[[[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]]]]]. + 2Z4N.B.71 + 3IZ9.A.196 + 3IZ9.A.80 + 3IZE.A.89 + 3IZE.A.89 3.8072368 30.7789696
(((((((.((.(((((((...((((.[[.))))...))))).)).)))))))))..]]..((..[[[[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]]]]]. + 1F1T.A.4 + 1JZX.A.84 + 3IZ9.A.80 + 3IZE.A.89 + 3O58.1.74 3.8072368 30.7789696
(((((((.((.(((((((...((((.[[.))))...))))).)).)))))))))..]]..((..[[[[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]]]]]. + 2Z4N.B.71 + 3IZ9.A.196 + 3IZ9.A.80 + 3O58.1.74 + 3O58.1.74 3.8072368 30.7789696
(((((((.((.(((((((...((((.[[.))))...))))).)).)))))))))..]]..((..[[[[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]]]]]. + 1JZX.A.84 + 3IZ9.A.196 + 3IZ9.A.80 + 3IZE.A.89 + 3O58.1.74 3.8072368 30.7789696
(((((((.((.(((((((...((((.[[.))))...))))).)).)))))))))..]]..((..[[[[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]]]]]. + 1F1T.A.4 + 2Z4N.B.71 + 3IZ9.A.80 + 3IZE.A.89 + 3IZE.A.89 3.8072368 30.7789696
(((((((.((.(((((((...((((.[[.))))...))))).)).)))))))))..]]..((..[[[[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]]]]]. + 2Z4N.B.71 + 3IZ9.A.196 + 3IZ9.A.80 + 3IZE.A.89 + 3O58.1.74 3.8072368 30.7789696
(((((((.((.(((((((...((((.[[.))))...))))).)).)))))))))..]]..((..[[[[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]]]]]. + 1F1T.A.4 + 2Z4N.B.71 + 3IZ9.A.80 + 3IZE.A.89 + 3O58.1.74 3.8072368 30.7789696
(((((((.((.(((((((...((((.[[.))))...))))).)).)))))))))..]]..((..[[[[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]]]]]. + 1JZX.A.84 + 3IZ9.A.196 + 3IZ9.A.80 + 3O58.1.74 + 3O58.1.74 3.8072368 30.7789696
(((((((.((.(((((((...((((.[[.))))...))))).)).)))))))))..]]..((..[[[[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]]]]]. + 1F1T.A.4 + 1JZX.A.84 + 3IZ9.A.80 + 3O58.1.74 + 3O58.1.74 3.8072368 30.7789696
(((((((.((.(((((((...((((.[[.))))...))))).)).)))))))))..]]..((..[[[[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]]]]]. + 1F1T.A.4 + 1JZX.A.84 + 3IZ9.A.80 + 3IZE.A.89 + 3O58.1.74 3.8072368 30.7789696
(((((((.((.(((((((...((((.[[.))))...))))).)).)))))))))..]]..((..[[[[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]]]]]. + 1F1T.A.4 + 2Z4N.B.71 + 3IZ9.A.80 + 3IZE.A.89 + 3O58.1.74 3.8072368 30.7789696
(((((((.((.(((((((...((((.[[.))))...))))).)).)))))))))..]]..((..[[[[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]]]]]. + 1F1T.A.4 + 2Z4N.B.71 + 3IZ9.A.80 + 3O58.1.74 + 3O58.1.74 3.8072368 30.7789696
(((((((.((.(((((((...((((.[[.))))...))))).)).)))))))))..]]..((..[[[[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]]]]]. + 1F1T.A.4 + 1JZX.A.84 + 3IZ9.A.80 + 3IZE.A.89 + 3IZE.A.89 3.8072368 30.7789696
(((((((.((.(((((((...((((....))))...))))).)).)))))))))(((...))).(((((.((..((.((.((.((...)).)))).)).)).))))). + 1YIT.0.13 + 2Z4N.B.71 + 3IZ9.A.196 + 3IZ9.A.80 + 3O58.1.74 + 3O58.1.74 4.2379134 30.7351363
(((((((.((.(((((((...((((....))))...))))).)).)))))))))(((...))).(((((.((..((.((.((.((...)).)))).)).)).))))). + 1YIT.0.13 + 2Z4N.B.71 + 3IZ9.A.196 + 3IZ9.A.80 + 3IZE.A.89 + 3O58.1.74 4.2379134 30.7351363
(((((((.((.(((((((...((((....))))...))))).)).)))))))))(((...))).(((((.((..((.((.((.((...)).)))).)).)).))))). + 1F1T.A.4 + 1YIT.0.13 + 2Z4N.B.71 + 3IZ9.A.80 + 3IZE.A.89 + 3O58.1.74 4.2379134 30.7351363
(((((((.((.(((((((...((((....))))...))))).)).)))))))))(((...))).(((((.((..((.((.((.((...)).)))).)).)).))))). + 1JZX.A.84 + 1YIT.0.13 + 3IZ9.A.196 + 3IZ9.A.80 + 3IZE.A.89 + 3O58.1.74 4.2379134 30.7351363
(((((((.((.(((((((...((((....))))...))))).)).)))))))))(((...))).(((((.((..((.((.((.((...)).)))).)).)).))))). + 1F1T.A.4 + 1YIT.0.13 + 2Z4N.B.71 + 3IZ9.A.80 + 3IZE.A.89 + 3IZE.A.89 4.2379134 30.7351363
(((((((.((.(((((((...((((....))))...))))).)).)))))))))(((...))).(((((.((..((.((.((.((...)).)))).)).)).))))). + 1F1T.A.4 + 1YIT.0.13 + 2Z4N.B.71 + 3IZ9.A.80 + 3IZE.A.89 + 3O58.1.74 4.2379134 30.7351363
(((((((.((.(((((((...((((....))))...))))).)).)))))))))(((...))).(((((.((..((.((.((.((...)).)))).)).)).))))). + 1JZX.A.84 + 1YIT.0.13 + 3IZ9.A.196 + 3IZ9.A.80 + 3O58.1.74 + 3O58.1.74 4.2379134 30.7351363
(((((((.((.(((((((...((((....))))...))))).)).)))))))))(((...))).(((((.((..((.((.((.((...)).)))).)).)).))))). + 1F1T.A.4 + 1JZX.A.84 + 1YIT.0.13 + 3IZ9.A.80 + 3IZE.A.89 + 3O58.1.74 4.2379134 30.7351363
(((((((.((.(((((((...((((....))))...))))).)).)))))))))(((...))).(((((.((..((.((.((.((...)).)))).)).)).))))). + 1F1T.A.4 + 1JZX.A.84 + 1YIT.0.13 + 3IZ9.A.80 + 3O58.1.74 + 3O58.1.74 4.2379134 30.7351363
(((((((.((.(((((((...((((....))))...))))).)).)))))))))(((...))).(((((.((..((.((.((.((...)).)))).)).)).))))). + 1F1T.A.4 + 1JZX.A.84 + 1YIT.0.13 + 3IZ9.A.80 + 3IZE.A.89 + 3IZE.A.89 4.2379134 30.7351363
(((((((.((.(((((((...((((....))))...))))).)).)))))))))(((...))).(((((.((..((.((.((.((...)).)))).)).)).))))). + 1F1T.A.4 + 1JZX.A.84 + 1YIT.0.13 + 3IZ9.A.80 + 3IZE.A.89 + 3O58.1.74 4.2379134 30.7351363
(((((((.((.(((((((...((((....))))...))))).)).)))))))))(((...))).(((((.((..((.((.((.((...)).)))).)).)).))))). + 1JZX.A.84 + 1YIT.0.13 + 3IZ9.A.196 + 3IZ9.A.80 + 3IZE.A.89 + 3O58.1.74 4.2379134 30.7351363
(((((((.((.(((((((...((((....))))...))))).)).)))))))))(((...))).(((((.((..((.((.((.((...)).)))).)).)).))))). + 1YIT.0.13 + 2Z4N.B.71 + 3IZ9.A.196 + 3IZ9.A.80 + 3IZE.A.89 + 3O58.1.74 4.2379134 30.7351363
(((((((.((.(((((((...((((....))))...))))).)).)))))))))(((...))).(((((.((..((.((.((.((...)).)))).)).)).))))). + 1F1T.A.4 + 1YIT.0.13 + 2Z4N.B.71 + 3IZ9.A.80 + 3O58.1.74 + 3O58.1.74 4.2379134 30.7351363
(((((((.((.(((((((...((((....))))...))))).)).)))))))))(((...))).(((((.((..((.((.((.((...)).)))).)).)).))))). + 1JZX.A.84 + 1YIT.0.13 + 3IZ9.A.196 + 3IZ9.A.80 + 3IZE.A.89 + 3IZE.A.89 4.2379134 30.7351363
(((((((.((.((((.((...((((....))))...)).)).)).)))))))))(((...))).(((((.((..((.((.((.((...)).)))).)).)).))))). + 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
(((((((.((.((((.((...((((....))))...)).)).)).)))))))))(((...))).(((((.((..((.((.((.((...)).)))).)).)).))))). + 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
(((((((.((.((((.((...((((....))))...)).)).)).)))))))))(((...))).(((((.((..((.((.((.((...)).)))).)).)).))))). + 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
(((((((.((.((((.((...((((....))))...)).)).)).)))))))))(((...))).(((((.((..((.((.((.((...)).)))).)).)).))))). + 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
(((((((.((.((((.((...((((....))))...)).)).)).)))))))))(((...))).(((((.((..((.((.((.((...)).)))).)).)).))))). + 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
(((((((.((.((((.((...((((....))))...)).)).)).)))))))))(((...))).(((((.((..((.((.((.((...)).)))).)).)).))))). + 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
(((((((.((.((((.((...((((....))))...)).)).)).)))))))))(((...))).(((((.((..((.((.((.((...)).)))).)).)).))))). + 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
(((((((.((.((((.((...((((....))))...)).)).)).)))))))))(((...))).(((((.((..((.((.((.((...)).)))).)).)).))))). + 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
(((((((.((.((((.((...((((....))))...)).)).)).)))))))))(((...))).(((((.((..((.((.((.((...)).)))).)).)).))))). + 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
(((((((.((.((((.((...((((....))))...)).)).)).)))))))))(((...))).(((((.((..((.((.((.((...)).)))).)).)).))))). + 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
(((((((.((.((((.((...((((....))))...)).)).)).)))))))))(((...))).(((((.((..((.((.((.((...)).)))).)).)).))))). + 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
(((((((.((.((((.((...((((....))))...)).)).)).)))))))))(((...))).(((((.((..((.((.((.((...)).)))).)).)).))))). + 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
(((((((.((.((((.((...((((....))))...)).)).)).)))))))))(((...))).(((((.((..((.((.((.((...)).)))).)).)).))))). + 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
(((((((.((.((((.((...((((....))))...)).)).)).)))))))))(((...))).(((((.((..((.((.((.((...)).)))).)).)).))))). + 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
(((((((.((.((((.((...((((....))))...)).)).)).)))))))))(((...))).(((((.((..((.((.((.((...)).)))).)).)).))))). + 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
(((((((.((.((((.((...((((.[[.))))...)).)).)).)))))))))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 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
(((((((.((.((((.((...((((.[[.))))...)).)).)).)))))))))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 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
(((((((.((.((((.((...((((.[[.))))...)).)).)).)))))))))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 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
(((((((.((.((((.((...((((.[[.))))...)).)).)).)))))))))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 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
(((((((.((.((((.((...((((.[[.))))...)).)).)).)))))))))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 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
(((((((.((.((((.((...((((.[[.))))...)).)).)).)))))))))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 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
(((((((.((.((((.((...((((.[[.))))...)).)).)).)))))))))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 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
(((((((.((.((((.((...((((.[[.))))...)).)).)).)))))))))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 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
(((((((.((.((((.((...((((.[[.))))...)).)).)).)))))))))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 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
(((((((.((.((((.((...((((.[[.))))...)).)).)).)))))))))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 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
(((((((.((.((((.((...((((.[[.))))...)).)).)).)))))))))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 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
(((((((.((.((((.((...((((.[[.))))...)).)).)).)))))))))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 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
(((((((.((.((((.((...((((.[[.))))...)).)).)).)))))))))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 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
(((((((.((.((((.((...((((.[[.))))...)).)).)).)))))))))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 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
(((((((.((.((((.((...((((.[[.))))...)).)).)).)))))))))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 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
(((((((.((.((((.((...((((.[[.))))...)).)).)).)))))))))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 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
(((((((.((.((((.((...((((.[[.))))...)).)).)).)))))))))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 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
(((((((.((.((((.((...((((.[[.))))...)).)).)).)))))))))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 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
(((((((.((.((((.((...((((.[[.))))...)).)).)).)))))))))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 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
(((((((.((.((((.((...((((.[[.))))...)).)).)).)))))))))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 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
(((((((.((.((((.((...((((.[[.))))...)).)).)).)))))))))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 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
(((((((.((.((((.((...((((.[[.))))...)).)).)).)))))))))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 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
(((((((.((.((((.((...((((.[[.))))...)).)).)).)))))))))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 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
(((((((.((.((((.((...((((.[[.))))...)).)).)).)))))))))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 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
(((((((.((.((((.((...((((.[[.))))...)).)).)).)))))))))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 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
(((((((.((.((((.((...((((.[[.))))...)).)).)).)))))))))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 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
(((((((.((.((((.((...((((.[[.))))...)).)).)).)))))))))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 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
(((((((.((.((((.((...((((.[[.))))...)).)).)).)))))))))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 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
(((((((.((.((((.((...((((.[[.))))...)).)).)).)))))))))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 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
(((((((.((.((((.((...((((.[[.))))...)).)).)).)))))))))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 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
(((((((.((.((((.((...((((.[[.))))...)).)).)).)))))))))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 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
(((((((.((.((((.((...((((....))))...)).)).)).)))))))))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 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
(((((((.((.((((.((...((((....))))...)).)).)).)))))))))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 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
(((((((.((.((((.((...((((....))))...)).)).)).)))))))))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 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
(((((((.((.((((.((...((((....))))...)).)).)).)))))))))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 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
(((((((.((.((((.((...((((....))))...)).)).)).)))))))))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 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
(((((((.((.((((.((...((((....))))...)).)).)).)))))))))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 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
(((((((.((.((((.((...((((....))))...)).)).)).)))))))))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 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
(((((((.((.((((.((...((((....))))...)).)).)).)))))))))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 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
(((((((.((.((((.((...((((....))))...)).)).)).)))))))))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 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
(((((((.((.((((.((...((((....))))...)).)).)).)))))))))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 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
(((((((.((.((((.((...((((....))))...)).)).)).)))))))))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 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
(((((((.((.((((.((...((((....))))...)).)).)).)))))))))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 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
(((((((.((.((((.((...((((....))))...)).)).)).)))))))))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 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
(((((((.((.((((.((...((((....))))...)).)).)).)))))))))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 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
(((((((.((.((((.((...((((....))))...)).)).)).)))))))))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 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
(((((((.((.((((.((...((((....))))...)).)).)).)))))))))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 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
(((((((.((.((((.((...((((....))))...)).)).)).)))))))))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 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
(((((((.((.((((.((...((((....))))...)).)).)).)))))))))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 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
(((((((.((.((((.((...((((....))))...)).)).)).)))))))))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 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
(((((((.((.((((.((...((((....))))...)).)).)).)))))))))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 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
(((((((.((.((((.((...((((....))))...)).)).)).)))))))))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 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
(((((((.((.((((.((...((((....))))...)).)).)).)))))))))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 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
(((((((.((.((((.((...((((....))))...)).)).)).)))))))))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 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
(((((((.((.((((.((...((((....))))...)).)).)).)))))))))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 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
(((((((.((.((((.((...((((....))))...)).)).)).)))))))))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 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
(((((((.((.((((.((...((((....))))...)).)).)).)))))))))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 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
(((((((.((.((((.((...((((....))))...)).)).)).)))))))))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 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
(((((((.((.((((.((...((((....))))...)).)).)).)))))))))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 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
(((((((.((.((((.((...((((....))))...)).)).)).)))))))))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 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
(((((((.((.((((.((...((((....))))...)).)).)).)))))))))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 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
(((((((.((.((((.((...((((....))))...)).)).)).)))))))))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 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
((.((((.((.((((.((...((((.[[.))))...)).)).)).)))))).))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 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
((.((((.((.((((.((...((((.[[.))))...)).)).)).)))))).))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 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
((.((((.((.((((.((...((((.[[.))))...)).)).)).)))))).))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 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
((.((((.((.((((.((...((((.[[.))))...)).)).)).)))))).))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 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
((.((((.((.((((.((...((((.[[.))))...)).)).)).)))))).))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 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
((.((((.((.((((.((...((((.[[.))))...)).)).)).)))))).))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 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
((.((((.((.((((.((...((((.[[.))))...)).)).)).)))))).))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 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
((.((((.((.((((.((...((((.[[.))))...)).)).)).)))))).))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 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
((.((((.((.((((.((...((((.[[.))))...)).)).)).)))))).))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 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
((.((((.((.((((.((...((((.[[.))))...)).)).)).)))))).))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 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
((.((((.((.((((.((...((((.[[.))))...)).)).)).)))))).))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 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
((.((((.((.((((.((...((((.[[.))))...)).)).)).)))))).))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 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
((.((((.((.((((.((...((((.[[.))))...)).)).)).)))))).))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 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
((.((((.((.((((.((...((((.[[.))))...)).)).)).)))))).))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 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
((.((((.((.((((.((...((((.[[.))))...)).)).)).)))))).))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 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
((.((((.((.((((.((...((((.[[.))))...)).)).)).)))))).))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 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
((.((((.((.((((.((...((((.[[.))))...)).)).)).)))))).))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 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
((.((((.((.((((.((...((((.[[.))))...)).)).)).)))))).))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 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
((.((((.((.((((.((...((((.[[.))))...)).)).)).)))))).))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 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
((.((((.((.((((.((...((((.[[.))))...)).)).)).)))))).))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 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
((.((((.((.((((.((...((((.[[.))))...)).)).)).)))))).))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 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
((.((((.((.((((.((...((((.[[.))))...)).)).)).)))))).))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 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
((.((((.((.((((.((...((((.[[.))))...)).)).)).)))))).))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 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
((.((((.((.((((.((...((((.[[.))))...)).)).)).)))))).))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 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
((.((((.((.((((.((...((((.[[.))))...)).)).)).)))))).))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 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
((.((((.((.((((.((...((((.[[.))))...)).)).)).)))))).))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 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
((.((((.((.((((.((...((((.[[.))))...)).)).)).)))))).))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 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
((.((((.((.((((.((...((((.[[.))))...)).)).)).)))))).))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 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
((.((((.((.((((.((...((((.[[.))))...)).)).)).)))))).))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 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
((.((((.((.((((.((...((((.[[.))))...)).)).)).)))))).))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 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
((.((((.((.((((.((...((((.[[.))))...)).)).)).)))))).))..]]..((..[[.[[.[[..[[.[[.[[.[[)).]].]]]].]].]].]].]]. + 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
((.((((.((.((((.((...((((....))))...)).)).)).)))))).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 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
((.((((.((.((((.((...((((....))))...)).)).)).)))))).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 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
((.((((.((.((((.((...((((....))))...)).)).)).)))))).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 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
((.((((.((.((((.((...((((....))))...)).)).)).)))))).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 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
((.((((.((.((((.((...((((....))))...)).)).)).)))))).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 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
((.((((.((.((((.((...((((....))))...)).)).)).)))))).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 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
((.((((.((.((((.((...((((....))))...)).)).)).)))))).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 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
((.((((.((.((((.((...((((....))))...)).)).)).)))))).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 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
((.((((.((.((((.((...((((....))))...)).)).)).)))))).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 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
((.((((.((.((((.((...((((....))))...)).)).)).)))))).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 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
((.((((.((.((((.((...((((....))))...)).)).)).)))))).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 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
((.((((.((.((((.((...((((....))))...)).)).)).)))))).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 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
((.((((.((.((((.((...((((....))))...)).)).)).)))))).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 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
((.((((.((.((((.((...((((....))))...)).)).)).)))))).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 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
((.((((.((.((((.((...((((....))))...)).)).)).)))))).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 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
((.((((.((.((((.((...((((....))))...)).)).)).)))))).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 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
((.((((.((.((((.((...((((....))))...)).)).)).)))))).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 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
((.((((.((.((((.((...((((....))))...)).)).)).)))))).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 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
((.((((.((.((((.((...((((....))))...)).)).)).)))))).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 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
((.((((.((.((((.((...((((....))))...)).)).)).)))))).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 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
((.((((.((.((((.((...((((....))))...)).)).)).)))))).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 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
((.((((.((.((((.((...((((....))))...)).)).)).)))))).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 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
((.((((.((.((((.((...((((....))))...)).)).)).)))))).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 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
((.((((.((.((((.((...((((....))))...)).)).)).)))))).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 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
((.((((.((.((((.((...((((....))))...)).)).)).)))))).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 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
((.((((.((.((((.((...((((....))))...)).)).)).)))))).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 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
((.((((.((.((((.((...((((....))))...)).)).)).)))))).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 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
((.((((.((.((((.((...((((....))))...)).)).)).)))))).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 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
((.((((.((.((((.((...((((....))))...)).)).)).)))))).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 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
((.((((.((.((((.((...((((....))))...)).)).)).)))))).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 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
((.((((.((.((((.((...((((....))))...)).)).)).)))))).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 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
((.((.((..(((((.((...((........))...)).)).))).)).)).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 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
((.((.((..(((((.((...((........))...)).)).))).)).)).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 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
((.((.((..(((((.((...((........))...)).)).))).)).)).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 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
((.((.((..(((((.((...((........))...)).)).))).)).)).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 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
((.((.((..(((((.((...((........))...)).)).))).)).)).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 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
((.((.((..(((((.((...((........))...)).)).))).)).)).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 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
((.((.((..(((((.((...((........))...)).)).))).)).)).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 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
((.((.((..(((((.((...((........))...)).)).))).)).)).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 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
((.((.((..(((((.((...((........))...)).)).))).)).)).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 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
((.((.((..(((((.((...((........))...)).)).))).)).)).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 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
((.((.((..(((((.((...((........))...)).)).))).)).)).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 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
((.((.((..(((((.((...((........))...)).)).))).)).)).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 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
((.((.((..(((((.((...((........))...)).)).))).)).)).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 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
((.((.((..(((((.((...((........))...)).)).))).)).)).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 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
((.((.((..(((((.((...((........))...)).)).))).)).)).))(((...))).((.((.((..((.((.((.((...)).)))).)).)).)).)). + 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
#!/usr/bin/python3
# coding=utf-8
import sys
import getopt
from scipy import stats
import subprocess
from os import path, makedirs, getcwd, chdir, devnull
import matplotlib.pyplot as plt
from matplotlib import colors
from math import sqrt
from multiprocessing import Pool, cpu_count, Manager
import multiprocessing
import ast
# ================== DEFINITION OF THE PATHS ==============================
# Retrieve Paths from file EditMe
jar3dexec = ""
bypdir = ""
biorseoDir = "."
exec(compile(open(biorseoDir+"/EditMe").read(), '', 'exec'))
runDir = path.dirname(path.realpath(__file__))
outputDir = biorseoDir + "/results/"
HLmotifDir = biorseoDir + "/data/modules/BGSU/HL/3.2/lib"
ILmotifDir = biorseoDir + "/data/modules/BGSU/IL/3.2/lib"
descfolder = biorseoDir + "/data/modules/DESC"
# ================== CLASSES AND FUNCTIONS ================================
class NoDaemonProcess(multiprocessing.Process):
@property
def daemon(self):
return False
@daemon.setter
def daemon(self, value):
pass
class NoDaemonContext(type(multiprocessing.get_context())):
Process = NoDaemonProcess
# We sub-class multiprocessing.pool.Pool instead of multiprocessing.Pool
# because the latter is only a wrapper function, not a proper class.
class MyPool(multiprocessing.pool.Pool):
def __init__(self, *args, **kwargs):
kwargs['context'] = NoDaemonContext()
super(MyPool, self).__init__(*args, **kwargs)
class Loop:
def __init__(self, header, subsequence, looptype, position):
self.header = header
self.seq = subsequence
self.type = looptype
self.position = position
def get_header(self):
return self.header
def subsequence(self):
return self.seq
class InsertionSite:
def __init__(self, loop, csv_line):
# BEWARE : jar3d csv output is crap because of java's locale settings.
# On french OSes, it uses commas to delimit the fields AND as floating point delimiters !!
# Parse with caution, and check what the csv output files look like on your system...
info = csv_line.split(',')
self.loop = loop # the Loop object that has been searched with jar3d
# position of the loop's components, so the motif's ones, in the query sequence.
self.position = loop.position
# Motif model identifier of the RNA 3D Motif Atlas
self.atlas_id = info[2]
# alignment score of the subsequence to the motif model
self.score = int(float(info[4]))
# should the motif model be inverted to fit the sequence ?
self.rotation = int(info[-2])
def __lt__(self, other):
return self.score < other.score
def __gt__(self, other):
return self.score > other.score
class Job:
def __init__(self, command=[], function=None, args=[], how_many_in_parallel=0, priority=1, timeout=None, checkFunc=None, checkArgs=[]):
self.cmd_ = command
self.func_ = function
self.args_ = args
self.checkFunc_ = checkFunc
self.checkArgs_ = checkArgs
self.priority_ = priority
self.timeout_ = timeout
if not how_many_in_parallel:
self.nthreads = cpu_count()
elif how_many_in_parallel == -1:
self.nthreads = cpu_count() - 1
else:
self.nthreads = how_many_in_parallel
class BiorseoInstance:
def __init__(self, argv):
# set default options
self.type = "dpm"
self.modules = "desc"
self.func = 'B'
self.outputf = outputDir
self.jobcount = 0
# Parse options
try:
opts, args = getopt.getopt(
argv, "hil::o:", ["type=", "func=", "modules="])
except getopt.GetoptError:
print("Please provide arguments !")
sys.exit(2)
for opt, arg in opts:
if opt == "-h":
print("biorseo.py -i myRNA.fa -o myRNA.jar3dB --type jar3d --func B")
sys.exit()
elif opt == "-i":
self.inputfile = arg
self.mode = 0 # single sequence mode
elif opt == "-l":
self.inputfile = arg
self.mode = 1 # batch mode
elif opt == "-o":
self.outputf = arg # output file or folder...
elif opt == "--func":
if arg in ['A', 'B', 'C', 'D']:
self.func = arg
else:
raise "Unknown scoring function " + arg
elif opt == "--type":
if arg in ['dpm', 'jar3d', 'byp']:
self.type = arg
else:
raise "Unknown pattern matching method " + arg
elif opt == "--modules":
if arg in ['desc', 'bgsu']:
self.modules = arg
else:
raise "Unsupported module model type " + arg
else:
raise "Unknown option " + opt
if self.mode:
# Create a job manager
self.manager = Manager()
self.running_stats = self.manager.list()
self.running_stats.append(0) # n_launched
self.running_stats.append(0) # n_finished
self.running_stats.append(0) # n_skipped
self.fails = self.manager.list()
# Create the output folder
subprocess.call(["mkdir", "-p", self.outputf])
def enumerate_loops(self, s):
def resort(unclosedLoops):
loops.insert(len(loops)-1-unclosedLoops, loops[-1])
loops.pop(-1)
opened = []
openingStart = []
closingStart = []
loops = []
loopsUnclosed = 0
consecutiveOpenings = []
if s[0] == '(':
consecutiveOpenings.append(1)
consecutiveClosings = 0
lastclosed = -1
previous = ''
for i in range(len(s)):
# If we arrive on an unpaired segment
if s[i] == '.':
if previous == '(':
openingStart.append(i-1)
if previous == ')':
closingStart.append(i-1)
# Opening basepair
if s[i] == '(':
if previous == '(':
consecutiveOpenings[-1] += 1
else:
consecutiveOpenings.append(1)
if previous == ')':
closingStart.append(i-1)
# We have something like (...(
if len(openingStart) and openingStart[-1] == opened[-1]:
# Create a new loop starting with this component.
loops.append([(openingStart[-1], i)])
openingStart.pop(-1)
loopsUnclosed += 1
# We have something like )...( or even )(
if len(closingStart) and closingStart[-1] == lastclosed:
# Append a component to existing multiloop
loops[-1].append((closingStart[-1], i))
closingStart.pop(-1)
opened.append(i)
# Closing basepair
if s[i] == ')':
if previous == ')':
consecutiveClosings += 1
else:
consecutiveClosings = 1
# This is not supposed to happen in real data, but whatever.
if previous == '(':
openingStart.append(i-1)
# We have something like (...) or ()
if len(openingStart) and openingStart[-1] == opened[-1]:
# Create a new loop, and save it as already closed (HL)
loops.append([(openingStart[-1], i)])
openingStart.pop(-1)
resort(loopsUnclosed)
# We have something like )...)
if len(closingStart) and closingStart[-1] == lastclosed:
# Append a component to existing multiloop and close it.
loops[-1].append((closingStart[-1], i))
closingStart.pop(-1)
loopsUnclosed -= 1
resort(loopsUnclosed)
if i+1 < len(s):
if s[i+1] != ')': # We are on something like: ).
# an openingStart has not been correctly detected, like in ...((((((...)))...)))
if consecutiveClosings < consecutiveOpenings[-1]:
# Create a new loop (uncompleted)
loops.append([(opened[-2], opened[-1])])
loopsUnclosed += 1
# We just completed an HL+stem, like ...(((...))).., we can forget its info
if consecutiveClosings == consecutiveOpenings[-1]:
consecutiveClosings = 0
consecutiveOpenings.pop(-1)
else: # There are still several basepairs to remember, forget only the processed ones, keep the others
consecutiveOpenings[-1] -= consecutiveClosings
consecutiveClosings = 0
else: # We are on something like: ))
# we are on an closingStart that cannot be correctly detected, like in ...(((...(((...))))))
if consecutiveClosings == consecutiveOpenings[-1]:
# Append a component to the uncomplete loop and close it.
loops[-1].append((i, i+1))
loopsUnclosed -= 1
resort(loopsUnclosed)
# Forget the info about the processed stem.
consecutiveClosings = 0
consecutiveOpenings.pop(-1)
opened.pop(-1)
lastclosed = i
previous = s[i]
# print(i,"=",s[i],"\t", "consec. Op=", consecutiveOpenings,"Cl=",consecutiveClosings)
return(loops)
def launch_JAR3D_worker(self, loop):
# write motif to a file
newpath = getcwd()+'/'+loop.header[1:]
if not path.exists(newpath):
makedirs(newpath)
chdir(newpath)
filename = loop.header[1:]+".fasta"
fasta = open(filename, 'w')
fasta.write('>'+loop.get_header()+'\n'+loop.subsequence()+'\n')
fasta.close()
# Launch Jar3D on it
if loop.type == 'h':
cmd = ["java", "-jar", jar3dexec, filename, HLmotifDir+"/all.txt",
loop.header[1:]+".HLloop.csv", loop.header[1:]+".HLseq.csv"]
else:
cmd = ["java", "-jar", jar3dexec, filename, ILmotifDir+"/all.txt",
loop.header[1:]+".ILloop.csv", loop.header[1:]+".ILseq.csv"]
nowhere = open(devnull, 'w')
logfile = open("log_of_the_run.sh", 'a')
logfile.write(' '.join(cmd))
logfile.write("\n")
logfile.close()
subprocess.call(cmd, stdout=nowhere)
nowhere.close()
# Retrieve results
insertion_sites = []
if loop.type == 'h':
capstype = "HL"
else:
capstype = "IL"
csv = open(loop.header[1:]+".%sseq.csv" % capstype, 'r')
l = csv.readline()
while l:
if "true" in l:
insertion_sites.append(InsertionSite(loop, l))
l = csv.readline()
csv.close()
# Cleaning
chdir("..")
subprocess.call(["rm", "-r", loop.header[1:]])
return insertion_sites
def launch_JAR3D(self, seq_, basename):
rnasubopt_preds = []
# Extracting probable loops from RNA-subopt structures
rna = open(outputDir + basename + ".subopt", "r")
lines = rna.readlines()
rna.close()
for i in range(2, len(lines)):
ss = lines[i].split(' ')[0]
if ss not in rnasubopt_preds:
rnasubopt_preds.append(ss)
HLs = []
ILs = []
for ss in rnasubopt_preds:
loop_candidates = self.enumerate_loops(ss)
for loop_candidate in loop_candidates:
if len(loop_candidate) == 1 and loop_candidate not in HLs:
HLs.append(loop_candidate)
if len(loop_candidate) == 2 and loop_candidate not in ILs:
ILs.append(loop_candidate)
# Retrieve subsequences corresponding to the possible loops
loops = []
for i, l in enumerate(HLs):
loops.append(
Loop(">HL%d" % (i+1), seq_[l[0][0]-1:l[0][1]], "h", l))
for i, l in enumerate(ILs):
loops.append(
Loop(">IL%d" % (i+1), seq_[l[0][0]-1:l[0][1]]+'*'+seq_[l[1][0]-1:l[1][1]], "i", l))
# Scanning loop subsequences against motif database
pool = MyPool(processes=cpu_count())
insertion_sites = [x for y in pool.map(
self.launch_JAR3D_worker, loops) for x in y]
insertion_sites.sort(reverse=True)
# Writing results to CSV file
c = 0
resultsfile = open(outputDir+basename+".sites.csv", "w")
resultsfile.write("Motif,Rotation,Score,Start1,End1,Start2,End2\n")
for site in insertion_sites:
if site.score > 10:
c += 1
string = "FOUND with score %d:\t\t possible insertion of motif " % site.score + site.atlas_id
if site.rotation:
string += " (reversed)"
string += (" on " + site.loop.get_header() + " at positions")
resultsfile.write(site.atlas_id+',' +
str(bool(site.rotation))+",%d" % site.score+',')
positions = [','.join([str(y) for y in x]) for x in site.position]
if len(positions) == 1:
positions.append("-,-")
resultsfile.write(','.join(positions)+'\n')
resultsfile.close()
def launch_BayesPairing(self, module_type, seq_, header_, basename):
chdir(bypdir)
cmd = ["python3", "parse_sequences.py", "-seq", outputDir +
basename + ".fa", "-d", module_type, "-interm", "1"]
logfile = open("log_of_the_run.sh", 'a')
logfile.write(" ".join(cmd))
logfile.write("\n")
logfile.close()
out = subprocess.check_output(cmd).decode('utf-8')
BypLog = out.split('\n')
idx = 0
l = BypLog[idx]
while l[:3] != "PUR":
idx += 1
l = BypLog[idx]
insertion_sites = [x for x in ast.literal_eval(l.split(":")[1][1:])]
if module_type == "rna3dmotif":
rna = open(outputDir + basename + ".byp.csv", "w")
else:
rna = open(outputDir + basename + ".bgsubyp.csv", "w")
rna.write("Motif,Score,Start1,End1,Start2,End2...\n")
for i, module in enumerate(insertion_sites):
if len(module):
for (score, positions, sequence) in zip(*[iter(module)]*3):
pos = []
q = -2
for p in positions:
if p-q > 1:
pos.append(q)
pos.append(p)
q = p
pos.append(q)
rna.write(module_type+str(i)+','+str(int(score)))
for (p, q) in zip(*[iter(pos[1:])]*2):
if q > p:
rna.write(','+str(p)+','+str(q))
rna.write('\n')
rna.close()
def execute_job(self, j):
if j.checkFunc_ is not None:
if j.checkFunc_(*j.checkArgs_):
self.running_stats[2] += 1
print("["+str(self.running_stats[0]+self.running_stats[2]) +
'/'+str(self.jobcount)+"]\tSkipping a finished job")
return 0
self.running_stats[0] += 1
if len(j.cmd_):
logfile = open("log_of_the_run.sh", 'a')
logfile.write(" ".join(j.cmd_))
logfile.write("\n")
logfile.close()
print("["+str(self.running_stats[0]+self.running_stats[2]) +
'/'+str(self.jobcount)+"]\t"+" ".join(j.cmd_))
r = subprocess.call(j.cmd_, timeout=j.timeout_)
elif j.func_ is not None:
print("["+str(self.running_stats[0]+self.running_stats[2])+'/'+str(self.jobcount) +
"]\t"+j.func_.__name__+'('+", ".join([a for a in j.args_])+')')
try:
r = j.func_(*j.args_)
except:
r = 1
pass
if r:
self.fails.append(j)
self.running_stats[1] += 1
return r
def check_result_existence(self, datatype, method, function, with_PK, basename):
folder = self.outputf+"PK/" if with_PK else self.outputf+"noPK/"
if datatype == "bgsu":
if method == "jar3d":
extension = ".jar3d"
elif method == "byp":
extension = ".bgsubyp"
else:
raise "Unknown method !"
elif datatype == "desc":
if method == "dpm":
extension = ".raw"
elif method == "byp":
extension = ".byp"
else:
raise "Unknown method !"
else:
raise "Unknown data type !"
return path.isfile(folder + basename + extension + function)
def check_csv_existence(self, datatype, method, basename):
if datatype == "bgsu":
if method == "jar3d":
extension = ".sites.csv"
elif method == "byp":
extension = ".bgsubyp.csv"
else:
raise "Unknown method !"
elif datatype == "desc":
if method == "byp":
extension = ".byp.csv"
else:
raise "You cannot use " + method + " with " + datatype + " data !"
else:
raise "Unknown data type !"
return path.isfile(self.outputf + basename + extension)
if __name__ == "__main__":
BiorseoInstance(sys.argv)
......@@ -8,7 +8,7 @@
#include <string>
#include <vector>
using Eigen::MatrixXf, Eigen::Matrix;
using Eigen::MatrixXf;
using std::map;
using std::pair;
using std::string;
......
......@@ -15,15 +15,15 @@ import ast
# Retrieve Paths from file EditMe
jar3dexec = ""
HLmotifDir = ""
ILmotifDir = ""
descfolder = ""
bypdir = ""
biorseoDir = "."
exec(compile(open(biorseoDir+"/EditMe").read(), '', 'exec'))
runDir = path.dirname(path.realpath(__file__))
dataFile = argv[1]
outputDir = biorseoDir + "/results/"
HLmotifDir = biorseoDir + "/data/modules/BGSU/HL/3.2/lib"
ILmotifDir = biorseoDir + "/data/modules/BGSU/IL/3.2/lib"
descfolder = biorseoDir + "/data/modules/DESC"
# Create some folders to store the results
subprocess.call(["mkdir", "-p", outputDir])
......@@ -1022,37 +1022,37 @@ print("Loaded %d RNAs of length between 10 and 100. %d of them contain pseudokno
# 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]))
# 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]))
# 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]))
# 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]))
# 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]))
# 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]))
# 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]))
# # biorseoBGSUBayesPairA-D
# 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]))
# 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]))
# 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]))
# 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]))
# 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]))
# 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]))
# 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]))
# 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]))
# biorseoBayesPairA-D
# 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]))
# 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]))
# 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]))
# 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]))
# 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]))
# 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]))
# 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]))
# 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]))
# biorseoRawA,B
# 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]))
# 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]))
# 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]))
# 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]))
# RNA MoIP
# joblist.append(Job(function=launch_RNAMoIP, args=[instance.seq_, instance.header_, basename], priority=3, timeout=3600, checkFunc=check_RNAMoIP, checkArgs=[basename]))
# Biokop
# 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]))
# 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]))
# 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]))
# 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]))
# 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]))
# # biorseoBGSUBayesPairA-D
# 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]))
# 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]))
# 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]))
# 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]))
# 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]))
# 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]))
# 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]))
# 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]))
# # biorseoBayesPairA-D
# 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]))
# 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]))
# 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]))
# 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]))
# 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]))
# 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]))
# 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]))
# 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]))
# # biorseoRawA,B
# 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]))
# 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]))
# 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]))
# 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]))
# # RNA-MoIP
# joblist.append(Job(function=launch_RNAMoIP, args=[instance.seq_, instance.header_, basename], priority=3, timeout=3600, checkFunc=check_RNAMoIP, checkArgs=[basename]))
# # Biokop
# 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]))
# # execute jobs
......@@ -1147,7 +1147,7 @@ x_noPK_fully = [
print()
print("Without PK:")
print("%s RNAsubopt predictions" % is_all(len(x_noPK[0]), tot))
print("%s RNA MoIP predictions" % is_all(len(x_noPK[1]), tot))
print("%s RNA-MoIP predictions" % is_all(len(x_noPK[1]), tot))
print("%s biorseo + BGSU + JAR3D + f1A predictions" % is_all(len(x_noPK[2]), tot))
print("%s biorseo + BGSU + JAR3D + f1B predictions" % is_all(len(x_noPK[3]), tot))
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
# print("RNA-MOIP",":",x_noPK[1])
# for data, name in zip(x_PK, labels):
# print(name,":",data)
# 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"]
# 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"]
# for r in RNAcontainer:
# print("\n",r.header_,"\nTrue structure:\t", r.true2d)
# 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
merge = [ x_PK_fully[0], # Biokop
x_noPK_fully[0], # RNA subopt
x_noPK_fully[1], # RNA MoIP
x_noPK_fully[1], # RNA-MoIP
x_noPK_fully[2], x_PK_fully[2], #biorseoRawA
x_noPK_fully[3], x_PK_fully[3], #biorseoRawB
x_noPK_fully[4], x_PK_fully[4], #biorseoBayesPairA
......@@ -1329,7 +1329,7 @@ colors = [ 'green', 'blue', 'goldenrod',
'lime', 'lime'
]
labels = [ "Biokop", "RNAsubopt",
"RNA MoIP",
"RNA-MoIP",
"$f_{1A}$",
"$f_{1B}$",
"$f_{1A}$",
......@@ -1363,7 +1363,7 @@ plt.xticks([1.0+i for i in range(16)], labels[1:])
plt.ylim((0.5, 1.01))
plt.ylabel("MCC", fontsize=12)
plt.subplots_adjust(left=0.05, right=0.95)
plt.title("Performance without pseudoknots (%d RNAs included)" % len(x_noPK_fully[0]))
# plt.title("Performance without pseudoknots (%d RNAs included)" % len(x_noPK_fully[0]))
ax = plt.subplot(212)
......@@ -1385,36 +1385,36 @@ plt.xticks([1.0+i for i in range(16)], labels)
plt.ylim((0.5, 1.01))
plt.ylabel("MCC", fontsize=12)
plt.subplots_adjust(left=0.05, right=0.95)
plt.text(6.2,-0.3,"Performance with pseudoknots (%d RNAs included)" % len(x_PK_fully[0]), fontsize=12)
# plt.text(6.2,-0.3,"Performance with pseudoknots (%d RNAs included)" % len(x_PK_fully[0]), fontsize=12)
plt.show()
# ================== MCC performance ====================================
RNAcontainer.sort(key=lambda x: x.rnasubopt.max_mcc)
# # ================== MCC performance ====================================
# RNAcontainer.sort(key=lambda x: x.rnasubopt.max_mcc)
x = [
[ rna.rnasubopt.max_mcc for rna in RNAcontainer],
[ rna.rnamoip.max_mcc for rna in RNAcontainer],
# [ rna.biorseoRawA.max_mcc for rna in RNAs_fully_predicted],
# [ rna.biorseoRawB.max_mcc for rna in RNAs_fully_predicted],
# [ rna.biokop.max_mcc for rna in RNAs_fully_predicted],
# [ rna.biorseoBGSUJAR3DA.max_mcc for rna in RNAs_fully_predicted]
]
colors = ['xkcd:blue','goldenrod']#xkcd:red', 'green', 'cyan']
labels = ["Best RNAsubopt MCC", "Best RNA-MoIP MCC"]# "Best RawA prediction", "Best Biokop prediction", "Best JAR3DA prediction"]
for y, col, lab in zip(x, colors, labels):
x_data = [ i for i in range(len(y)) if y[i]]
y_data = [ i for i in y if i]
plt.scatter(x_data, y_data, color=col, label=lab, marker='o', s=2.5)
plt.axhline(y=0, color='black', linewidth=1)
plt.axvline(x=0, color='black', linewidth=1)
# plt.xlabel("608 RNA structures structures (10 < |nt| < 100)")
# plt.ylabel("Mattews Correlation Coefficient")
plt.title("Performance of the prediction method")
plt.legend(loc="upper left")
plt.show()
# x = [
# [ rna.rnasubopt.max_mcc for rna in RNAcontainer],
# [ rna.rnamoip.max_mcc for rna in RNAcontainer],
# # [ rna.biorseoRawA.max_mcc for rna in RNAs_fully_predicted],
# # [ rna.biorseoRawB.max_mcc for rna in RNAs_fully_predicted],
# # [ rna.biokop.max_mcc for rna in RNAs_fully_predicted],
# # [ rna.biorseoBGSUJAR3DA.max_mcc for rna in RNAs_fully_predicted]
# ]
# colors = ['xkcd:blue','goldenrod']#xkcd:red', 'green', 'cyan']
# labels = ["Best RNAsubopt MCC", "Best RNA-MoIP MCC"]# "Best RawA prediction", "Best Biokop prediction", "Best JAR3DA prediction"]
# for y, col, lab in zip(x, colors, labels):
# x_data = [ i for i in range(len(y)) if y[i]]
# y_data = [ i for i in y if i]
# plt.scatter(x_data, y_data, color=col, label=lab, marker='o', s=2.5)
# plt.axhline(y=0, color='black', linewidth=1)
# plt.axvline(x=0, color='black', linewidth=1)
# # plt.xlabel("608 RNA structures structures (10 < |nt| < 100)")
# # plt.ylabel("Mattews Correlation Coefficient")
# plt.title("Performance of the prediction method")
# plt.legend(loc="upper left")
# plt.show()
......@@ -1542,7 +1542,7 @@ plt.show()
# [ rna.biokop.max_mcc - rna.rnasubopt.max_mcc for rna in RNAcontainer if len(rna.biokop.predictions)],
#]
# colors = ['xkcd:goldenrod', 'xkcd:red', 'firebrick', 'limegreen']
# labels = ["$\Delta$MCC(RNAsubopt,RNA MoIP)","$\Delta$MCC(RNAsubopt,RNA MoBOIP)",
# labels = ["$\Delta$MCC(RNAsubopt,RNA-MoIP)","$\Delta$MCC(RNAsubopt,RNA MoBOIP)",
# "$\Delta$MCC(RNAsubopt,RNA MoBOIP++)","$\Delta$MCC(RNAsubopt,Biokop)"]
# bplot = plt.boxplot(x, vert=False, patch_artist=True, notch=False, whis=[3,97])
# for patch, color in zip(bplot['boxes'], colors):
......