From d07bed48cd75839a629dbc91eea4924896dac97f Mon Sep 17 00:00:00 2001 From: Susan Higashi <syh@umr5558-higashi.univ-lyon1.fr> Date: Mon, 2 Dec 2013 12:57:52 +0100 Subject: [PATCH] First upload: version e8a554 from sourceforge --- Align.cpp | 801 +++++++++++++++++++++++++++++++++++++ Align.hpp | 146 +++++++ Definitions.hpp | 82 ++++ Energy.cpp | 438 ++++++++++++++++++++ Energy.hpp | 171 ++++++++ Options.cpp | 20 + Options.hpp | 236 +++++++++++ Sequence.cpp | 15 + Sequence.hpp | 27 ++ Util.cpp | 270 +++++++++++++ Util.hpp | 96 +++++ format_r_seq.sh | 57 +++ kseq.h | 227 +++++++++++ parameters/dangle.txt | 12 + parameters/dangle_text.txt | 12 + parameters/int11.txt | 24 ++ parameters/int21.txt | 96 +++++ parameters/int22.txt | 576 ++++++++++++++++++++++++++ parameters/stack.txt | 68 ++++ parameters/tstack.txt | 68 ++++ readme.txt | 5 + 21 files changed, 3447 insertions(+) create mode 100644 Align.cpp create mode 100644 Align.hpp create mode 100644 Definitions.hpp create mode 100644 Energy.cpp create mode 100644 Energy.hpp create mode 100644 Options.cpp create mode 100644 Options.hpp create mode 100644 Sequence.cpp create mode 100644 Sequence.hpp create mode 100644 Util.cpp create mode 100644 Util.hpp create mode 100644 format_r_seq.sh create mode 100644 kseq.h create mode 100644 parameters/dangle.txt create mode 100644 parameters/dangle_text.txt create mode 100644 parameters/int11.txt create mode 100644 parameters/int21.txt create mode 100644 parameters/int22.txt create mode 100644 parameters/stack.txt create mode 100644 parameters/tstack.txt create mode 100644 readme.txt diff --git a/Align.cpp b/Align.cpp new file mode 100644 index 0000000..500d554 --- /dev/null +++ b/Align.cpp @@ -0,0 +1,801 @@ +// ============================================================================= +/// @file Align.cpp + +#include "Align.hpp" +#include "Definitions.hpp" +#include "Energy.hpp" +#include "Util.hpp" + +#include<math.h> + +// ============================================================================= +// Constructor + +Align::Align( string path2param, unsigned int st_arm ) +{ + // --- Table to check pair type + + this->size_seq = st_arm; + + for( unsigned int i = 0; i < X; ++i ) + { + for( unsigned int j = 0; j < X; ++j ) + ismatch[i][j] = MI; + } + + ismatch[A][T] = MA; + ismatch[T][A] = MA; + ismatch[C][G] = MA; + ismatch[G][C] = MA; + ismatch[G][T] = MA; + ismatch[T][G] = MA; + + // --- Initializes 'movement' matrix + + move = new int*[ size_seq+1 ]; + for( unsigned int i = 0; i < size_seq+1; ++i ) + move[i] = new int[ size_seq+1 ]; + + // --- Loading energy data, taken from NNDB (turner2004) + + e = new Energy(); + + e->parser_stack( path2param + "stack.txt", false ); + e->parser_stack( path2param + "tstack.txt", true ); + e->parser_int11( path2param + "int11.txt"); + e->parser_int22( path2param + "int22.txt"); + e->parser_int21( path2param + "int21.txt"); + e->parser_dangle( path2param + "dangle.txt"); +} + +// ============================================================================= +// Destructor + +Align::~Align() +{ + for( unsigned int i = 0; i < size_seq+1; ++i ) + delete[] move[i]; + delete [] move; + + delete e; +} + +// ============================================================================= +// Get alignemnt path + +const vector<PairType>& Align::get_path() +{ + return path; +} + +// ============================================================================= +// Encode nucleotide according to its position in the param file + +int Align::encode( const char base ) +{ + if( base == 'A' ) { return A; } + else if( base == 'T' ) { return T; } + else if( base == 'C' ) { return C; } + else if( base == 'G' ) { return G; } + + cout << "Unknown nucleotide: [ " << base << " ]" << endl; + return EXIT_FAILURE; +} + +// ============================================================================= +// Print the matrix on screen + +void Align::print_matrix( int** &mat, string &arm1, string &arm2 ) +{ + string hori=" "; + string tmp; + for(unsigned int i=0; i<((26*5)/2) ; ++i) + { + hori = hori + " _"; + } + + // --- Nucleotide of sequence 2 + cout << " "; + for (unsigned int j = 0; j < arm2.size(); ++j) + { + cout << " " << arm2[j]; + } + cout << endl; + + for( unsigned int i = 0; i < arm1.size()+1; ++i ) + { + if(i%(tbl-1)==0) + cout << hori << endl; + if(i!=0) + cout << arm1[i-1] << " "; + else + cout << " "; + for (unsigned int j = 0; j < arm2.size()+1; ++j) + { + if(j%(tbl-1)==0) + tmp="|"; + else + tmp=" "; + if(mat[i][j] > 9 || mat [i][j] < 0) + cout << tmp << mat[i][j] << tmp << " "; + else + cout << tmp << mat[i][j] << " " << tmp << " "; + } + + cout << endl; + if(i%(tbl-1)==0) + cout << hori << endl; + } +} + +// ============================================================================= +// Get penality score of the nucleotide pair type + +int Align::getIsmatchScore( int nuc1, int nuc2 ) +{ + if( ismatch[nuc1][nuc2] == MA ){ + return MAscore; } + + return MIscore; +} + +// ============================================================================= +// Needleman–Wunsch algorithm using diagonal method + +void Align::align_forward_diag( string &arm1, string &arm2, int dw ) +{ + int limit_L = 1; + int limit_U = dw; + + // --- Memory for dp matrix + + int **matrix = new int*[ arm1.size()+1 ]; + for( unsigned int i = 0; i < arm1.size()+1; ++i ) + matrix[i] = new int[ arm2.size()+1 ]; + + // --- DP base case + + for( int i = 0; i < dw; ++i ) + { + matrix[i][0] = 0; + matrix[0][i] = 0; + } + + // --- Fill the diagonal matrix (forward) + + for( int i = 1; i < (int)arm1.size()+1; ++i ) + { + int nuc1 = encode(arm1[i-1]); + + // --- Update limit Left and limit Up + + if( limit_L != 1 ) + { + limit_L++; + } + else if( (i-dw)+1 > 1) + { + limit_L = (i-dw)+1; + } + + // --- + + if( i != 1 && limit_U != (int)arm2.size() ) + { + limit_U++; + } + + // --- Fill the diagonal matrix + + for( int j = limit_L; j < limit_U+1; ++j ) + { + int nuc2 = encode(arm2[j-1]); + matrix[i][j] = matrix[i-1][j-1]+getIsmatchScore( nuc1, nuc2 ); + move[i][j] = ismatch[nuc1][nuc2]; + + // --- Case where cell on the top diagonal limit : choices are Left or Diag + + if( i == j-(dw-1) ) + { + if( matrix[i][j-1]+GAscore > matrix[i][j] ) + { + matrix[i][j] = matrix[i][j-1]+GAscore; + move[i][j] = GL; + } + } + // --- Case where cell on the left diagonal limit : choices are Up or Diag + else if(j == i-(dw-1) ) + { + if( matrix[i-1][j]+GAscore > matrix[i][j] ) + { + matrix[i][j] = matrix[i-1][j]+GAscore; + move[i][j] = GU; + } + } + // --- Others. + else + { + if( matrix[i][j-1]+GAscore > matrix[i-1][j]+GAscore ) + { + if( matrix[i][j-1]+GAscore > matrix[i][j] ) + { + matrix[i][j] = matrix[i][j-1]+GAscore; + move[i][j] = GL; + } + } + else if( matrix[i-1][j]+GAscore > matrix[i][j] ) + { + matrix[i][j] = matrix[i-1][j]+GAscore; + move[i][j] = GU; + } + } + } + } + + for( unsigned int i = 0; i < arm1.size()+1; ++i ) + { + delete[] matrix[i]; + } + + delete[] matrix; +} + +// ============================================================================= +// Needleman–Wunsch algorithm. + +void Align::align_forward( string &arm1, string &arm2 ) +{ + // --- Allocate memory for dp matrix + + int **matrix = new int*[ arm1.size()+1 ]; + for( unsigned int i = 0; i < arm1.size()+1; ++i ) + matrix[i] = new int[ arm2.size()+1 ]; + + // --- DP base case + + for( unsigned int i = 0; i < arm1.size()+1; ++i ) + matrix[i][0] = 0; + + for( unsigned int j = 0; j < arm2.size()+1; ++j ) + matrix[0][j] = 0; + + // --- Fill the DP matrix (forward) + + for( unsigned int i = 1; i < arm1.size()+1; ++i ) + { + int nuc1 = encode( arm1[i-1] ); + + for( unsigned int j = 1; j < arm2.size()+1; ++j ) + { + int nuc2 = encode( arm2[j-1] ); + + matrix[i][j] = matrix[i-1][j-1]+getIsmatchScore( nuc1, nuc2 ); + move[i][j] = ismatch[nuc1][nuc2]; + + if( matrix[i][j-1]+GAscore > matrix[i-1][j]+GAscore ) + { + if( matrix[i][j-1]+GAscore > matrix[i][j] ) + { + matrix[i][j] = matrix[i][j-1]+GAscore; + move[i][j] = GL; + } + } + else if( matrix[i-1][j]+GAscore > matrix[i][j] ) + { + matrix[i][j] = matrix[i-1][j]+GAscore; + move[i][j] = GU; + } + } + } + + // --- Free memory of DP matrix + + for( unsigned int i = 0; i < arm1.size()+1; ++i ) + { + delete[] matrix[i]; + } + delete[] matrix; +} + + +// ============================================================================= +// Backtracking to get the alignment path + +void Align::align_backward( string &arm1, string &arm2, int i, int j ) +{ + PairType p; + + if( i == 0 && j == 0 ) + { + path.clear(); + return; + } + else if( j == 0 ) + { + align_backward( arm1, arm2, i-1, j ); + p.type = GU; + p.nuc1 = arm1[i]; + p.nuc2 = '-'; + } + else if( i == 0 ) + { + align_backward( arm1, arm2, i, j-1 ); + p.type = GL; + p.nuc1 = '-'; + p.nuc2 = arm2[j]; + + } + else // j > 0 && i > 0 + { + switch ( move[i][j] ) + { + case MA: // match -> helix + align_backward( arm1, arm2, i-1, j-1 ); + p.type = MA; + p.nuc1 = arm1[i]; + p.nuc2 = arm2[j]; + break; + + case MI: // mis -> internal loop + align_backward( arm1, arm2, i-1, j-1 ); + p.type = MI; + p.nuc1 = arm1[i]; + p.nuc2 = arm2[j]; + break; + + case GU: // gap_up -> bulge_up + align_backward( arm1, arm2, i-1, j ); + p.type = GU; + p.nuc1 = arm1[i]; + p.nuc2 = '-'; + break; + + case GL: // gap_left -> bulge_left + align_backward( arm1, arm2, i, j-1 ); + p.type = GL; + p.nuc1 = '-'; + p.nuc2 = arm2[j]; + break; + } + } + + path.push_back(p); +} + +// ============================================================================= +// Backtracking to get the alignment path (Diagonal) + +bool Align::align_backward_diag( string &arm1, string &arm2, int i, int j, int dw, int overflow, bool verdict ) +{ + // If path hit the diagonal, we don't need to go deeply so we stop the recursion here. + + if( fabs(overflow) >= dw-1 || not verdict ) + { + path.clear(); + return(false); + } + + // Else, run normaly the backward alignment. + PairType p; + + if( i == 0 && j == 0 ) + { + path.clear(); + return(true); + } + else if( j == 0 ) + { + overflow--; + verdict = align_backward_diag( arm1, arm2, i-1, j, dw, overflow, verdict ); + p.type = GU; + p.nuc1 = arm1[i]; + p.nuc2 = '-'; + } + else if( i == 0 ) + { + overflow++; + verdict = align_backward_diag( arm1, arm2, i, j-1, dw, overflow, verdict ); + p.type = GL; + p.nuc1 = '-'; + p.nuc2 = arm2[j]; + } + else // j > 0 && i > 0 + { + switch ( move[i][j] ) + { + case MA: // match -> helix + verdict = align_backward_diag( arm1, arm2, i-1, j-1, dw, overflow, verdict ); + p.type = MA; + p.nuc1 = arm1[i]; + p.nuc2 = arm2[j]; + break; + + case MI: // mis -> internal loop + verdict = align_backward_diag( arm1, arm2, i-1, j-1, dw, overflow, verdict ); + p.type = MI; + p.nuc1 = arm1[i]; + p.nuc2 = arm2[j]; + break; + + case GU: // gap_up -> bulge_up + overflow--; + verdict = align_backward_diag( arm1, arm2, i-1, j, dw, overflow, verdict ); + p.type = GU; + p.nuc1 = arm1[i]; + p.nuc2 = '-'; + break; + + case GL: // gap_left -> bulge_left + overflow++; + verdict = align_backward_diag( arm1, arm2, i, j-1, dw, overflow, verdict ); + p.type = GL; + p.nuc1 = '-'; + p.nuc2 = arm2[j]; + break; + } + } + + path.push_back(p); + + return(verdict); +} + +// ============================================================================= +// Stacking + +float Align::compute_stack(vector<PairType>& path) +{ + Util *u = new Util(); + + float acc_stack = 0.0; + + // stacking + for( unsigned int i = 0; i < path.size()-1; ++i ) + { + if( path[i].type == MA ) + { + int a = u->encode_dimer( path[i].nuc1, path[i+1].nuc1 ); // 5- AT -3 + int b = u->encode_dimer( path[i].nuc2, path[i+1].nuc2 ); // 3- TA -5 + + if( path[i+1].type == MA ) + { + acc_stack += e->get_stack(a, b); + } + else + { + acc_stack += e->get_tstack(a, b); + } + } + + } + + delete u; + + return acc_stack; +} + +// ============================================================================= +// Dangling ends + +float Align::compute_dangle( vector<PairType>& path ) +{ + float acc_dangle = 0.0; + char nuc1mat, nuc2mat, nuc_dangle; + bool dangle_seq1 = false; + + if( path[1].type == MA ) + { + if( path[0].nuc1 == '-' && path[0].nuc2 != '-' ) + { + nuc_dangle = path[0].nuc2; + dangle_seq1 = false; + + nuc1mat = path[1].nuc1; + nuc2mat = path[1].nuc2; + + acc_dangle = e->get_dangle( nuc_dangle, dangle_seq1, nuc1mat, nuc2mat ); + } + else if( path[0].nuc1 != '-' && path[0].nuc2 == '-' ) + { + nuc_dangle = path[0].nuc1; + dangle_seq1 = true; + + nuc1mat = path[1].nuc1; + nuc2mat = path[1].nuc2; + + acc_dangle = e->get_dangle( nuc_dangle, dangle_seq1, nuc1mat, nuc2mat ); + } + } + + return acc_dangle; +} + +// ============================================================================= +// Bulges + +float Align::compute_bulge( vector<PairType>& path ) +{ + // --- Bulge loop down (Gap Right) + + vector<PairType>::iterator it = path.begin()+1; + int cgu; // counter + float acc_bulge_up = 0.0; + Util *u = new Util(); + + while( it != path.end()-1 ) + { + cgu = 0; + + while( (*it).type == GU && it != path.end()-1 ) + { + // first AU end + if( cgu == 0 ) + { + if( ( (*(it-1)).nuc1 == 'A' && (*(it-1)).nuc2 == 'T' ) || ( (*(it-1)).nuc1 == 'T' && (*(it-1)).nuc2 == 'A' ) ) + acc_bulge_up += eAU; + } + + ++cgu; + ++it; + } + + if( cgu == 0 ) + { + ++it; + } + else if( cgu == 1 ) + { + char nt = (*(it-1)).nuc1; + vector<PairType>::iterator aux = it; + int states = 1; + + while( (*(it++)).nuc1 == nt && it < path.end() ) + { + ++states; + } + it = aux; + while( (*(it--)).nuc1 == nt && it > path.begin() ) + { + ++states; + } + it = aux; + + int a = u->encode_dimer( (*(it-2)).nuc1, (*it).nuc1 ); // 5- A^{C}^T -3 + int b = u->encode_dimer( (*(it-2)).nuc2, (*it).nuc2 ); // 3- T_{_}_A -5 + + float stack = e->get_stack(a, b); + + acc_bulge_up += e->get_bulge(cgu) + stack - ( RT * log(states) ); + + if( (*(it-1)).nuc1 == 'C' ) + { + acc_bulge_up += eCBU; + } + } + else if( cgu < LIMIT_bulge ) + { + if( (*(it-(cgu+1))).type == MA && (*it).type == MA ) + { + acc_bulge_up += e->get_bulge(cgu); + + // second AU end + if( ( (*it).nuc1 == 'A' && (*it).nuc2 == 'T' ) || ( (*it).nuc1 == 'T' && (*it).nuc2 == 'A' ) ) + { + acc_bulge_up += eAU; + } + } + } + } + + // --- Bulge loop left (Gap Left) + + it = path.begin()+1; + int cgl; + float acc_bulge_le = 0.0; + + while( it != path.end()-1 ) + { + cgl = 0; + + while( (*it).type == GL && it != path.end()-1 ) + { + // first AU end + if( cgl == 0 ) + { + if( ( (*(it-1)).nuc1 == 'A' && (*(it-1)).nuc2 == 'T' ) || ( (*(it-1)).nuc1 == 'T' && (*(it-1)).nuc2 == 'A' ) ) + acc_bulge_le += eAU; + } + + ++cgl; + ++it; + } + + if( cgl == 0 ) + { + ++it; + } + else if( cgl == 1 ) + { + char nt = (*(it-1)).nuc1; + vector<PairType>::iterator aux = it; + int states = 1; + + while( (*(it++)).nuc1 == nt && it < path.end() ) + { + ++states; + } + it = aux; + while( (*(it--)).nuc1 == nt && it > path.begin() ) + { + ++states; + } + it = aux; + + int a = u->encode_dimer( (*(it-2)).nuc1, (*it).nuc1 ); // 5- A^{C}^T -3 + int b = u->encode_dimer( (*(it-2)).nuc2, (*it).nuc2 ); // 3- T_{_}_A -5 + + float stack = e->get_stack(a, b); + + acc_bulge_up += e->get_bulge(cgl) + stack - ( RT * log(states) ); + + if( (*(it-1)).nuc1 == 'C' ) + { + acc_bulge_up += eCBU; + } + } + else if( cgl < LIMIT_bulge ) + { + if( (*(it-(cgl+1))).type == MA && (*it).type == MA ) + { + acc_bulge_le += e->get_bulge(cgl); + + // second AU end + if( ( (*it).nuc1 == 'A' && (*it).nuc2 == 'T' ) || ( (*it).nuc1 == 'T' && (*it).nuc2 == 'A' ) ) + { + acc_bulge_le += eAU; + } + } + } + } + + delete u; + + return (acc_bulge_up + acc_bulge_le); +} + +// ============================================================================= +// Internal loop + +float Align::compute_internal( vector<PairType>& path ) +{ + Util *u = new Util(); + unsigned int i = 1; + float acc_int3 = 0.0; + float acc_int11 = 0.0; + float acc_int22 = 0.0; + float acc_int21 = 0.0; + + char a=' ', b=' ', c=' ', d=' '; + + while( i != path.size()-1 ) + { + int cmis = 0; + int closure1 = 0; // int11 + int closure2 = 0; // int11 + int closure = 0; // int22 + vector<char> mis; + + int n1 = 0; // for assymentry (n1 - n2) + int n2 = 0; + + // counting the mismatches + while( (path[i].type == MI) && (i < path.size()-1) ) + { + if( path[i].nuc1 == '-' ) + ++n1; + + if( path[i].nuc2 == '-' ) + ++n2; + + cmis++; + i++; + } + + // motif processing according to the number of mismatches + if( cmis == 0 ) + { + i++; + } + else if( cmis == 1 ) + { + // first closure (=match) + closure1 = u->encode_closure( path[i-cmis-1].nuc1, path[i-cmis-1].nuc2 ); + + // single mismatch int11 + int nuc1mis = u->encode( path[i-1].nuc1 ); + int nuc2mis = u->encode( path[i-1].nuc2 ); + + // int21 + if( path[i].type == GU && i < path.size()-1 ) + { + closure2 = u->encode_closure( path[i+1].nuc1, path[i+1].nuc2 ); + + acc_int21 += e->get_int21( closure1, closure2, nuc1mis, nuc2mis ); + } + // int11 + else + { + closure2 = u->encode_closure( path[i].nuc1, path[i].nuc2 ); + + acc_int11 += e->get_int11( closure1, closure2, nuc1mis, nuc2mis ); + } + } + else if( cmis == 2 ) + { + // first closure + a = path[i-cmis-1].nuc1; + b = path[i-cmis-1].nuc2; + + // second closure + c = path[i].nuc1; + d = path[i].nuc2; + + // double mismatch int22 + int mis1 = u->encode( path[i-1].nuc1, path[i-1].nuc2 ); + int mis2 = u->encode( path[i-2].nuc1, path[i-2].nuc2 ); + + closure = u->encode_closure( a, b, c, d ); + + acc_int22 += e->get_int22( closure, mis1, mis2 ); + } + else if( cmis == 3 ) + { + int a = u->encode_dimer( path[i-1].nuc1, path[i-1].nuc2 ); + int b = u->encode_dimer( path[i-cmis].nuc1, path[i-cmis].nuc2 ); + + acc_int3 = e->get_tstack( a, b ); + + acc_int3 += e->get_int3( cmis ); + } + else + { + //ΔG° internal = + //ΔG° initiation(n) + + //ΔG° asymmetry×| n1 – n2| + + //ΔG° mismatch(mismatch 1) + + //ΔG° mismatch(mismatch 2) + + //ΔG° AU/GU closure(per AU or GU closure) *** missing GU closure *** + + int a = u->encode_dimer( path[i-cmis-1].nuc1, path[i-cmis].nuc1 ); + int b = u->encode_dimer( path[i-cmis-1].nuc2, path[i-cmis].nuc2 ); + + float mis1 = e->get_stack(a, b); + + int c = u->encode_dimer( path[i-1].nuc1, path[i].nuc1 ); + int d = u->encode_dimer( path[i-1].nuc2, path[i].nuc2 ); + + float mis2 = e->get_stack(c, d); + + acc_int3 = e->get_int3( cmis ) + ( eASYM * abs( n1 - n2 ) ) + mis1 + mis2; + } + + if( cmis > 0 ) + { + // first AU end + if( (path[i-cmis-1].nuc1 == 'A' && path[i-cmis-1].nuc2 == 'T') || (path[i-cmis-1].nuc1 == 'T' && path[i-cmis-1].nuc2 == 'A') ) + { + acc_int11 += eAU; + } + + // check second AU end + if( (path[i].nuc1 == 'A' && path[i].nuc2 == 'T') || (path[i].nuc1 == 'T' && path[i].nuc2 == 'A') ) + { + acc_int11 += eAU; + } + } + } + + delete u; + + return (acc_int11 + acc_int22 + acc_int21 + acc_int3); +} diff --git a/Align.hpp b/Align.hpp new file mode 100644 index 0000000..06b5d95 --- /dev/null +++ b/Align.hpp @@ -0,0 +1,146 @@ +// ============================================================================= +/// @file Align.h + +#ifndef ALIGN_H_ +#define ALIGN_H_ + +#include "Align.hpp" +#include "Definitions.hpp" +#include "Energy.hpp" + +#include<string.h> + +#include<iostream> +#include<vector> + +using namespace std; + +// ============================================================================= +/// \class Align +/// \brief Tackle with the global alignment of the stem-arms of +/// a pre-miRNA stemloop sequence. Uses the Needleman–Wunsch +/// algorithm. + +class Align +{ + public: + + /// Constructor + /// Initializes the matrix \c ismatch, the dynamic programming (DP) \c matrix and its base case, + /// the \c move(ment) matrix and load the energy parameters. + + Align( string path2param, unsigned int st_arm); + + /// Destructor + + ~Align(); + + /// \fn int Align::encode( const char &base ) + /// \brief Encodes a letter (nucleotide, base) in an integer. + /// \param base A letter to be encoded. + /// \return Encoded base. + + int encode( const char base ); + + /// \fn void Align::align_forward_diag( string &arm1, string &arm2, int dw ) + /// \brief Fills the DP matrix for the alignment of two nucleotide sequences with the diagonal method. + /// \param stemarm1 First nucleotide sequence--stem-arm of the stemloop. + /// \param stemarm2 Second nucleotide sequence--stem-arm of the stemloop. + /// \param dw Diagonal width. + + void align_forward_diag( string &arm1, string &arm2, int dw); + + /// \fn void Align::align_forward( string &arm1, string &arm2 ) + /// \brief Fills the DP matrix for the alignment of two nucleotide sequences. + /// \param stemarm1 First nucleotide sequence--stem-arm of the stemloop. + /// \param stemarm2 Second nucleotide sequence--stem-arm of the stemloop. + + void align_forward( string &arm1, string &arm2 ); + + /// \fn void Align::align_backward( int i, int j, string &arm1, string &arm2 ) + /// \brief Backtracks into the matrix to recover the path of the alignment. + /// \param i Line of the DP matrix. + /// \param j Column of the DP matrix. + /// \param arm1 First nucleotide sequence. + /// \param arm2 Second nucleotide sequence. + /// \param dw Diagonal width. + /// \param overflow Counter of gap for see if there is an overflow. + /// \param verdict Boolean indicate if alignment is ok or overflow. + + bool align_backward_diag( string &arm1, string &arm2, int i, int j, int dw, int overflow, bool verdict ); + void align_backward( string &arm1, string &arm2, int i, int j ); + + /// \fn float Align::compute_stack( vector<PairType>& path ) + /// \brief Computes the Gibbs free energy (kcal/mol) of the alignment using + /// the Nearest Neighbor (NN) method (Turner 2004) for a stacking motif. + /// \param path Path returned by the backtracking of the DP referring to the alignment of the sequences. + /// \return The free energy of the stacking. + + float compute_stack( vector<PairType>& path ); + + /// \fn float Align::compute_dangle( vector<PairType>& path ) + /// \brief Computes the free energy of the alignment using + /// the NN method (Turner 2004) for a dangling ends. + /// \param path Path returned by the backtracking of the DP referring to the alignment of the sequences. + /// \return The free energy of the dangling end. + + float compute_dangle( vector<PairType>& path ); + + /// \fn float Align::compute_bulge( vector<PairType>& path ) + /// \brief Computes the free energy of the alignment using + /// the NN method (Turner 2004) for a dangling ends. + /// \param path Path returned by the backtracking of the DP referring to the alignment of the sequences. + /// \return The free energy of the bulge motif. + + float compute_bulge( vector<PairType>& path ); + + /// \fn float Align::compute_internal( vector<PairType>& path ) + /// \brief Computes the free energy of the alignment using + /// the NN method (Turner 2004) for a dangling ends. + /// \param path Path returned by the backtracking of the DP referring to the alignment of the sequences. + /// \return The free energy of the internal loop. + + float compute_internal( vector<PairType>& path ); + + /// \fn const Align::vector<PairType>& get_path( void ) + /// \return The path in the DP matrix corresponding to the sequence alignment. + + const vector<PairType>& get_path( void ); + + /// \fn void Align::print_matrix( int &mat , string &arm1, string &arm2 ) + /// \brief Print the matrix on screen. + /// \param mat Matrix. + /// \param arm1 First nucleotide sequence. + /// \param arm2 Second nucleotide sequence. + + void print_matrix( int** &mat , string &arm1, string &arm2 ); + + /// \fn int Align::getIsmatchScore( int a, int b ) + /// \return The penality score of the nucleotide pair type. + + int getIsmatchScore( int nuc1, int nuc2 ); + + private: + + /// \var move Matrix for the movements--diagonal, up, left--performed in the forward step. + + int **move; + + /// \var ismatch Matrix for the canonical base pairs. + + int ismatch[X][X]; + + /// \var path Path in the DP matrix referring to the alignment. + + vector<PairType> path; + + /// \var e Pointer to the methods to compute the free energy. + + Energy *e; + + /// \var size_seq Length of the sequence + + unsigned int size_seq; +}; + +#endif diff --git a/Definitions.hpp b/Definitions.hpp new file mode 100644 index 0000000..2396bd3 --- /dev/null +++ b/Definitions.hpp @@ -0,0 +1,82 @@ +// ============================================================================= +/// @file Definitons.h + +#ifndef DEFINITIONS_H_ +#define DEFINITIONS_H_ + +#include<iostream> + +using namespace std; + +// ============================================================================= +// Pre-miRNA stem-loop features + +static const unsigned int ST_ARM = 25; // stem arm length +static const unsigned int STL_MIN = 5; // stem loop minimum length +static const unsigned int STL_MAX = 20; // stem loop maximun length +static const float LIMIT = 0.0; // free energy threshold +static const unsigned int W = 2; // word size + +static const unsigned int LIMIT_int3ini = 30; +static const unsigned int LIMIT_bulge = 30; + +// ============================================================================= +// Dynamic programming parameters + +static const int MA = 4; +static const int MI = 5; +static const int GU = 6; // gap in seq2 +static const int GL = 7; // gap in seq1 + +static const int MAscore = 7; +static const int MIscore = 0; +static const int GAscore = -10; + +static const int A = 0; +static const int C = 1; +static const int G = 2; +static const int T = 3; + +static const unsigned int X = 4; // alphabet size + +// ============================================================================= +// Features of the alignment path + +struct PairType +{ + char nuc1; // nucleotide from sequence 5->3 + char nuc2; // nucleotide from sequence 3->5 + int type; // MA,MI,GU,GL +}; + +// ============================================================================= +// Optimisation parameters + +static const unsigned int DW = 6; // diagonal width at first line ( max diagonal during alignment = 2*DW-1 ) +static const unsigned int tbl = 4; // t-blocks length //MODIF + +// ============================================================================= +// Features of a t-block + +struct tBlock +{ + int Ab; // Intersection of first row and column of the block + int Rb[tbl-1]; // First row of the block (minus A) + int Cb[tbl-1]; // First column of the block (minus A) + string Db; // Substrings of the first nucleotide sequence (vertical) + string Eb; // Substrings of the second nucleotide sequence (horizontal) + int Ob[2*tbl-1]; // Last row and column (row numbers followed by column numbers from bottom to top) +}; + +// ============================================================================= +// NN energy model constant energies + +static const float eINI = 4.09; // intermolecular initiation +static const float eSYM = 0.43; // symmetry correction (is applied to self-complementary duplexes) +static const float eAU = 0.45; // per AU end +static const float eCBU = -0.9; // special C bulge +static const float eASYM = 0.6; //asymetry internal loop + +static const float RT = 0.616; // gas constant x tempeture (310K) + +#endif diff --git a/Energy.cpp b/Energy.cpp new file mode 100644 index 0000000..e3ec8ed --- /dev/null +++ b/Energy.cpp @@ -0,0 +1,438 @@ +// ============================================================================= +/// @file Energy.cpp + +#include "Energy.hpp" +#include "Definitions.hpp" +#include "Options.hpp" +#include "Util.hpp" + +// ============================================================================= +// Constructor + +Energy::Energy() +{ + // stacking and tstacking energy matrix + + unsigned int size = pow(4, W); + + for(unsigned int i = 0; i < size; ++i) + { + for(unsigned int j = 0; j < size; ++j) + { + stack[i][j] = 0.0; + tstack[i][j] = 0.0; + } + } + + // dangle ends -- dangle.txt + + for(unsigned int i = 0; i < 12+2; ++i) + dangle[i][0] = 0.0; + + for(unsigned int j = 0; j < 4+2; ++j) + dangle[0][j] = 0.0; + + // bulge loop initiation + + bulge[0] = 0.0; + bulge[1] = 3.8; bulge[2] = 2.8; bulge[3] = 3.2; + bulge[4] = 3.6; bulge[5] = 4.0; bulge[6] = 4.4; + bulge[7] = 4.6; bulge[8] = 4.7; bulge[9] = 4.8; + bulge[10] = 4.9; bulge[11] = 5.0; bulge[12] = 5.1; + bulge[13] = 5.2; bulge[14] = 5.3; bulge[15] = 5.4; + bulge[16] = 5.4; bulge[17] = 5.5; bulge[18] = 5.5; + bulge[19] = 5.6; bulge[20] = 5.7; bulge[21] = 5.7; + bulge[22] = 5.8; bulge[23] = 5.8; bulge[24] = 5.8; + bulge[25] = 5.9; bulge[26] = 5.9; bulge[27] = 6.0; + bulge[28] = 6.0; bulge[29] = 6.0; bulge[30] = 6.1; + + // internal loop 1x1 -- int11.txt + + for(unsigned int i = 0; i < 24+2; ++i) + { + int11[i][0] = 0.0; + int11[0][i] = 0.0; + } + + // internal loop 2x2 -- int22.txt + + for(unsigned int i = 0; i < 576+2; ++i) + int22[i][0] = 0.0; + + for(unsigned int j = 0; j < 16+2; ++j) + int22[0][j] = 0.0; + + // internal loop 2x1 -- int21.txt + + for(unsigned int i = 0; i < 96+2; ++i) + int21[i][0] = 0.0; + + for(unsigned int j = 0; j < 24+2; ++j) + int21[0][j] = 0.0; + + // internal loop init > 3 + + int3ini[0] = 0.0; int3ini[1] = 0.0; int3ini[2] = 0.0; + int3ini[3] = 1.1; int3ini[4] = 2.1; int3ini[5] = 1.9; + int3ini[6] = 2.0; int3ini[7] = 2.2; int3ini[8] = 2.3; + int3ini[9] = 2.4; int3ini[10] = 2.5; int3ini[11] = 2.6; + int3ini[12] = 2.7; int3ini[13] = 2.8; int3ini[14] = 2.8; + int3ini[15] = 2.9; int3ini[16] = 3.0; int3ini[17] = 3.0; + int3ini[18] = 3.1; int3ini[19] = 3.2; int3ini[20] = 3.2; + int3ini[21] = 3.3; int3ini[22] = 3.3; int3ini[23] = 3.4; + int3ini[24] = 3.4; int3ini[25] = 3.4; int3ini[26] = 3.5; + int3ini[27] = 3.5; int3ini[28] = 3.6; int3ini[29] = 3.6; +} + +// ============================================================================= +// Getters + +const float Energy::get_stack( int i, int j ) const +{ + return stack[i][j]; +} + +// --- + +const float Energy::get_tstack( int i, int j ) const +{ + return tstack[i][j]; +} + +// --- + +const float Energy::get_dangle( int nuc_dangle, bool dangle_seq1, char nuc53mat, char nuc35mat ) const +{ + Util *u = new Util(); + + int i = u->encode_closure(nuc35mat, nuc53mat); + + if( dangle_seq1 ) + i = i+6; // adjusting it according to dangle.txt + + int j = u->encode_dangle(nuc_dangle); + + delete u; + + return dangle[i][j]; +} + +// ============================================================================= +// Bulge loop + +const float Energy::get_bulge( unsigned int cbulge ) const +{ + if( cbulge > LIMIT_bulge || cbulge < 0 ) + { + cout << "Bulge: " << cbulge << " must be in the range of 0 and " << LIMIT_bulge << endl; + return EXIT_FAILURE; + } + + return bulge[ cbulge ]; +} + +// ============================================================================= +// Internal loop + +const float Energy::get_int11(int closure1, int closure2, int nuc53mis, int nuc35mis) const +{ + if( closure1 == 0 || closure2 == 0 ) + return 0.0; + + int i = ((closure1 * 4)+1) - nuc53mis; + int j = ((closure2 * 4)+1) - nuc35mis; + + return int11[i][j]; +} + +// --- + +const float Energy::get_int21(int closure1, int closure2, int nuc53mis, int nuc35mis) const +{ + if( closure1 == 0 || closure2 == 0 ) + return 0.0; + + int i = (closure1 * 16) - nuc53mis; + int j = (closure2 * 4) - nuc35mis; + + return int21[i][j]; +} + +// --- + +const float Energy::get_int22(int closure, int mis1, int mis2) const +{ + if( closure == 0 ) + return 0.0; + + int i = ((closure * 16) - 16) + mis2; + int j = mis1; + + return int22[i][j]; +} + +// --- + +const float Energy::get_int3( unsigned int cmis ) const +{ + if( cmis > LIMIT_int3ini || cmis < 0 ) + { + cout << "Internal loop of size 3: " << cmis << " must be in the range of 0 and " << LIMIT_int3ini << endl; + return EXIT_FAILURE; + } + + return int3ini[ cmis ]; +} + +// ============================================================================= +// Parsers + +void Energy::parser_dangle( string filename ) +{ + ifstream file( filename.c_str() ); + + int i = 1; + int j = 1; + + while( !file.eof() ) + { + file >> dangle[i][j]; + j++; + + if(j == 4+1) + { + j = 1; + i++; + } + } + + file.close(); +} + +// --- + +void Energy::parser_int11( string filename ) +{ + ifstream file( filename.c_str() ); + + int i = 1; + int j = 1; + + while(!file.eof()) + { + file >> int11[i][j]; + j++; + + if( j == 24+1 ) + { + j = 1; + i++; + } + } + + file.close(); +} + +// --- + +void Energy::parser_int22( string filename ) +{ + ifstream file( filename.c_str() ); + + int i = 1; + int j = 1; + + while(!file.eof()) + { + file >> int22[i][j]; + j++; + + if( j == 16+1 ) + { + j = 1; + i++; + } + } + + file.close(); +} + +// --- + +void Energy::parser_int21( string filename ) +{ + ifstream file( filename.c_str() ); + + int i = 1; + int j = 1; + + while(!file.eof()) + { + file >> int21[i][j]; + j++; + + if( j == 24+1 ) + { + j = 1; + i++; + } + } + + file.close(); +} + +// --- + +void Energy::parser_stack(string filename, bool isTerminal) +{ + Util *u = new Util(); + + ifstream file( filename.c_str() ); + + string line, token; + + int line_num = 0; // file line number + int lin = 0; // 'matrix' line number + + char dimerf[W+1]; + dimerf[0] = ' '; + dimerf[1] = ' '; + dimerf[W] = '\0'; + + char dimerr[W+1]; + dimerr[0] = ' '; + dimerr[1] = ' '; + dimerr[W] = '\0'; + + while( getline(file, line) ) + { + ++line_num; + + stringstream ss(line); + + vector<string> tokens; + + while(ss >> token) + tokens.push_back(token); + + size_t found; + + if( (found = line.find("AX", 0)) != string::npos) + { + dimerf[0] = 'A'; + dimerr[0] = 'T'; + lin = 0; + } + else if( (found = line.find("CX", 0)) != string::npos) + { + dimerf[0] = 'C'; + dimerr[0] = 'G'; + lin = 0; + } + else if( (found = line.find("GX", 0)) != string::npos) + { + dimerf[0] = 'G'; + dimerr[0] = 'C'; + lin = 0; + } + else if( (found = line.find("UX", 0)) != string::npos) + { + dimerf[0] = 'T'; + dimerr[0] = 'A'; + lin = 0; + } + + // --- line is energy + + if( tokens.size() == 16 && tokens[0] != "A" ) + { + ++lin; + + for( unsigned int col = 0; col < tokens.size(); ++col ) + { + if( tokens[col] != ".") + { + // --- it is not *GC*, it is *GU* + if( line_num > 50 && line_num < 56 ) + { + if( col > 11 && col < 16 ) + { + dimerr[0] = 'T'; + } + else if ( col > 3 && col < 8 ) + { + dimerr[0] = 'C'; + } + } + + // --- it is not *UA*, it is *UG* + + if( line_num > 62 && line_num < 68 ) + { + if( col > 7 && col < 12 ) + { + dimerr[0] = 'G'; + } + else if( col >= 0 && col < 4 ) + { + dimerr[0] = 'A'; + } + } + + // --- nucletide line + + switch( lin ) + { + case 1: + dimerf[1] = 'A'; + break; + case 2: + dimerf[1] = 'C'; + break; + case 3: + dimerf[1] = 'G'; + break; + case 4: + dimerf[1] = 'T'; + break; + } + + // --- nucletide column + + switch( col % 4 ) + { + case 0:// col = 0,4,8,12 + dimerr[1] = 'A'; + break; + case 1:// col = 1,5,9,13 + dimerr[1] = 'C'; + break; + case 2:// col = 2,6,10,14 + dimerr[1] = 'G'; + break; + case 3:// col = 3,7,11,15 + dimerr[1] = 'T'; + break; + } + + int i = u->encode_dimer( dimerf[0], dimerf[1] ); + int j = u->encode_dimer( dimerr[0], dimerr[1] ); + + float energy = atof(tokens[col].c_str()); + + if(isTerminal) + { + tstack[i][j] = energy; + } + else + { + stack[i][j] = energy; + } + } + } + } + } + + delete u; + file.close(); +} diff --git a/Energy.hpp b/Energy.hpp new file mode 100644 index 0000000..81ac9ec --- /dev/null +++ b/Energy.hpp @@ -0,0 +1,171 @@ +// ============================================================================= +/// @file Energy.h + +#ifndef ENERGY_H_ +#define ENERGY_H_ + +#include<string.h> +#include<fstream> +#include<vector> +#include<sstream> +#include<math.h> + +#include "Util.hpp" + +using namespace std; + +// ============================================================================= +/// \class Energy +/// \brief For loading, setting and getting the Gibbs free energies +/// of dimers, according to the Nearest Neighbor method for +/// themodynamics. + +class Energy +{ + public: + + /// Constructor + /// Allocates memory for all free energy matrices \c stack, \c tstack, \c dangle + /// \c bulge, \c int11, \c int22 and \c int21. + + Energy(); + + // --- Getters + + /// \fn const float Energy::get_stack( int i, int j ) + /// \brief Get the stacking free energy referring to two dimer. + /// \param i Code of the dimer1. + /// \param j Code of the dimer2. + /// \return The free energy for stacking two consecutive base pairs. + + const float get_stack( int i, int j ) const; + + /// \fn const float Energy::get_tstack( int i, int j ) + /// \brief Get the terminal stacking free energy referring to two dimer. + /// \param i Code of the dimer1 5->3. + /// \param j Code of the dimer2 3->5. + /// \return The free energy for stacking a terminal two consecutive base pairs. + + const float get_tstack( int i, int j ) const; + + /// \fn const float Energy::get_dangle( int nuc_dangle, bool dangle_seq1, char nuc1mat, char nuc2mat ) + /// \brief Get the dagle ends free energy according to the dangling nucleotide + /// and consecutive match. + /// \param nuc_dangle Dangling nucleotide. + /// \param dangle_seq1 Indicate if the dangle is in 5->3 (sequence 1) or 3->5 (sequence 2). + /// \param nuc1mat First nucleotide of the consecutive match. + /// \param nuc2mat Second nucleotide of the consecutive match. + /// \return The free ernergy of a dangle end. + + const float get_dangle( int nuc_dangle, bool dangle_seq1, char nuc1mat, char nuc2mat ) const; + + /// \fn const float Energy::get_bulge( int i ); + /// \brief Get the bulge free energy according to the size of the bulge. + /// \param i Size of the bulge, that is the number of nucletides in the bulge. + /// \return The free ernergy of a bulge (ie, consecutive gap(s)). + + const float get_bulge( unsigned int cbulge ) const; + + /// \fn const float Energy::get_int11(int closure1, int closure2, int nuc1mis, int nuc2mis); + /// \brief Get the internal loop (with one mismatch) free energy according to the + /// flanking matches and its mismatch. + /// \param closure1 Left side match. + /// \param closure2 Right side match. + /// \param nuc1mis First nucleotide of the mismatch. + /// \param nuc2mis Second nucleotide of the mismatch. + /// \return The free ernergy of an internal loop of size 1x1 (ie, one mismatch). + + const float get_int11(int closure1, int closure2, int nuc1mis, int nuc2mis) const; + + /// \fn const float Energy::get_int22(int closure, int mis1, int mis2); + /// \brief Get the internall loop (with two mismatches) free energy according to + /// the flaking matches and its two mismatches. + /// \param closure1 Left side match. + /// \param closure2 Right side match. + /// \param nuc1mis Code of the first dimer mismatch. + /// \param nuc2mis Code of the second dimer mismatch. + /// \return The free ernergy of an internal loop of size 2x2 (ie, two consecutive mismatches). + + const float get_int22(int closure, int mis1, int mis2) const; + + /// \fn const float Energy::get_int21(int closure1, int closure2, int nuc1mis, int nuc2mis); + /// \brief Get the internall loop (with one mismatch and one gap) free energy + /// according to the flanking matches and its mismatche and gap. + /// \param closure1 Left side match. + /// \param closure2 Right side match. + /// \param nuc1mis Code of the first dimer mismatch. + /// \param nuc2mis Code of the second dimer mismatch. + /// \return The free ernergy of an internal loop of size 2x1 (ie, one mismatch followed by one gap). + + const float get_int21(int closure1, int closure2, int nuc1mis, int nuc2mis) const; + + /// \fn const float get_int3(int cmis); + + const float get_int3( unsigned int cmis ) const; + + // --- Parsers + + /// \fn void Energy::parser_stack(string filename, bool isTerminal ) + /// \brief Parser for loading (terminal) stacking free energy. + + void parser_stack( string filename, bool isTerminal ); + + /// \fn void Energy::parser_dangle( string filename ); + /// \brief Parser for loading dangle ends free energy. + + void parser_dangle( string filename ); + + /// \fn void Energy::parser_int11( string filename ) + /// \brief Parser for loading internal loop 1x1 free energy + /// \param filename Internal loop 1x1 energies file name. + + void parser_int11( string filename ); + + /// \fn void Energy::parser_int22( string filename ) + /// \brief Parser for loading internal loop 2x2 free energy. + /// \param filename Internal loop 2x2 energies file name. + + void parser_int22( string filename ); + + /// \fn void Energy::parser_int21( string filename ) + /// \brief Parser for loading internal loop 2x1 free energy. + /// \param filename Internal loop 2x1 energies file name. + + void parser_int21( string filename ); + + private: + + /// \var stack Stores stacking free energy. + + float stack[16][16]; //4^W + + /// \var tstack Stores terminal stacking free energy. + + float tstack[16][16]; + + /// \var dangle Stores gangle ends free energy. + + float dangle[14][6]; + + /// \var bulge Stores bulge initiation free energy. + + float bulge[31]; + + /// \var Stores internal loop 1x1 free energy. + + float int11[26][26]; + + /// \var Stores internal loop 2x2 free energy. + + float int22[578][18]; + + /// \var Stores internal loop 2x1 free energy. + + float int21[98][26]; + + /// \var Stores internal loop initialization free energy (loops > 3). + + float int3ini[30]; +}; + +#endif diff --git a/Options.cpp b/Options.cpp new file mode 100644 index 0000000..efed91f --- /dev/null +++ b/Options.cpp @@ -0,0 +1,20 @@ +// ============================================================================= +/// @file Options.cpp + +#include "Options.hpp" + +// ============================================================================= + +Options::Options( void ): + +ifile( "" ), +ofile( "" ), +st_arm( ST_ARM ), +stl_min( STL_MIN ), +stl_max( STL_MAX ), +limit( LIMIT ), +dw( DW ), +r_seq( ""), +path2param( "./parameters/" ) + +{} diff --git a/Options.hpp b/Options.hpp new file mode 100644 index 0000000..44612b8 --- /dev/null +++ b/Options.hpp @@ -0,0 +1,236 @@ +// ============================================================================= +/// @file Options.h + +#ifndef OPTIONS_H_ +#define OPTIONS_H_ + +#include"Definitions.hpp" + +#include<stdio.h> +#include<stdlib.h> +#include<string.h> +#include<unistd.h> + +#include<iostream> +#include<string> + +using namespace std; + +// ============================================================================= +/// OptionsClass +/// \brief Parsing command-line options. + +class Options +{ + public: + + /// Constructor + /// Set default values for the variables. + + Options( void ); + + /// \fn void Options::usage( void ) + /// \brief Print usage message. + + void usage( void ); + + /// \fn void Options::setupOptions( int argc, char** argv ) + /// \brief Setup command line options and its respectives values. + /// \param arc Number of arguments. + /// \param argv Array with the arguments. + + void setupOptions( int argc, char** argv ); + + /// \fn string Options::get_outname( string ifile ) + /// \brief + /// \param + + string get_outname( string ifile ); + + // --- + + /// \var fname Name of the input file containing the genome sequence(s) in FASTA format; + /// -f fasta_file + + string ifile; + + /// \var output Name of the output file containing the data about the pre-miRNA filtered candidates; + /// -o output_file + + string ofile; + + /// \var st_arm Length of the stem arm; + /// -a st_arm_length---default: 25nt + + unsigned int st_arm; + + /// \var stl_min Minimum length of the stem loop; + /// -n st_loop_min_length---default: 5nt + + unsigned int stl_min; + + /// \var stl_max Maximum length of the stem loop; + /// -x st_loop_max_length---default: 20 nt + + unsigned int stl_max; + + /// \var limit + /// -l energy_threshold---default: 0.0 kcal/mol + + float limit; + + /// \var dw + /// -w width of the diagonal---default: 3 ( means max width = 2*dw-1 = 5 ) + + unsigned int dw; + + /// \var r_seq Name of the file containing the names of the restricted sequence(s). Only there sequences will be analysed. + /// -r restricted_file + + string r_seq; + + /// \var param + /// -p path_to_parameters + + string path2param; +}; + +// ============================================================================= + +inline void Options::setupOptions( int argc, char** argv ) +{ + if( argc == 1 || argc > 18 ) + { + usage(); + exit(1); + } + + int c; + size_t foundSlash; + string ofilename; + + while ( (c = getopt( argc, argv, "f:o:a:n:x:l:p:w:r:h" )) != -1 ) + { + switch (c) + { + case 'f': + ifile = optarg; + break; + case 'o': + ofile = optarg; + + foundSlash = ofile.find_last_of( "/" ); + + if( foundSlash != string::npos ) // if found + { + if( ofile.size()-1 == foundSlash ) // output_filename: not given + { + ofilename = get_outname( ifile ); + ofile += ofilename; + } + else if( ofile.size()-1 > foundSlash ) // output_filename: given + { + foundSlash = ofile.find( ".fe" );//it is not a slash, just reusing memory + + if( foundSlash != string::npos ) // extention .fe: given + { + ofilename = ofile + ".gz"; + ofile = ofilename; + } + else // extention .fe: not given + { + ofilename = ofile + ".fe.gz"; + ofile = ofilename; + } + } + } + + break; + case 'a': + if( atoi(optarg) == 0 ) + { + cout << "Stem arm length must be greater than 0" << endl; + exit(1); + } + st_arm = atoi(optarg); + break; + case 'n': + stl_min = atoi(optarg); + break; + case 'x': + stl_max = atoi(optarg); + break; + case 'l': + limit = atof(optarg); + break; + case 'p': + path2param = optarg; + break; + case 'w': + if(atoi(optarg) < 1 || atoi(optarg) > (int)st_arm) + { + cout << "Width diagonal must be included in range 1 - " << st_arm << endl; + exit(1); + } + dw = atoi(optarg); + break; + case 'r': + r_seq = optarg; + break; + case 'h': + usage(); + exit(1); + } + } + + if( ifile == "" ) + { + cout << "option is mandatory -- f" << endl; + exit(1); + } + + if( ofile == "" ) + { + ofile = get_outname( ifile ); + } +} + +// ============================================================================= + +inline string Options::get_outname( string ifile ) +{ + size_t foundSlash = ifile.find_last_of( "/" ); + size_t foundDot = ifile.find( ".fasta" ); + // .fa .fas?? + + string filename; + + if( foundDot != string::npos ) + { + filename = ifile.substr( foundSlash+1, (foundDot-foundSlash-1) ); + filename += ".fe.gz"; + } + else + { + filename = ifile + ".fe.gz"; + } + + return filename; +} + +// ============================================================================= + +inline void Options::usage( void ) +{ + cout << "Usage: ./mirinho [OPTIONS] -f sequence.fasta" << endl; + cout << "\t-a PARAM\tLength of the stem arm - default: " << ST_ARM << " nt" << endl; + cout << "\t-n PARAM\tMinimum length of the stem loop - default: " << STL_MIN << " nt" << endl; + cout << "\t-x PARAM\tMaximum length of the stem loop - default: " << STL_MAX << " nt" << endl; + cout << "\t-l PARAM\tFree energy threshold - default: " << LIMIT << " kcal/mol " << endl; + cout << "\t-o PARAM\tOutput file name - default: seq_name.fe.gz" << endl; + cout << "\t-p PARAM\tPath to parameters folder - default: ." << endl; + cout << "\t-w PARAM\tWidth of the diagonal for alignment- default: " << DW << endl; + cout << "\t-r PARAM\tRestricted file name (see format_r_seq.sh to get this file)" << endl; +} + +#endif diff --git a/Sequence.cpp b/Sequence.cpp new file mode 100644 index 0000000..a396b52 --- /dev/null +++ b/Sequence.cpp @@ -0,0 +1,15 @@ +// ============================================================================= +/// @file Sequence.cpp + +#include "Sequence.hpp" + +// ============================================================================= + +Sequence::Sequence( string& seq, string& id, string& strand, gzFile ofile ): + +seq( seq ), +id( id ), +strand( strand ), +ofile( ofile ) + +{} diff --git a/Sequence.hpp b/Sequence.hpp new file mode 100644 index 0000000..e42e0f2 --- /dev/null +++ b/Sequence.hpp @@ -0,0 +1,27 @@ +// ============================================================================= +/// @file Sequence.h + +#ifndef SEQUENCE_H_ +#define SEQUENCE_H_ + +#include<zlib.h> +#include<string> + +using namespace std; + +// ============================================================================= +/// \class Sequence +/// \brief Sequence metadata. + +class Sequence +{ + public: + Sequence( string& seq, string& id, string& strand, gzFile ofile ); + + string seq; + string id; + string strand; + gzFile ofile; +}; + +#endif diff --git a/Util.cpp b/Util.cpp new file mode 100644 index 0000000..cdcb2f6 --- /dev/null +++ b/Util.cpp @@ -0,0 +1,270 @@ +// ============================================================================= +/// @file Util.cpp + +#include "Definitions.hpp" +#include "Options.hpp" +#include "Util.hpp" + +#include <fstream> + +// ============================================================================= + +string Util::clean_sequence( string& sequence ) +{ + // --- Sequence in upper case + + transform( sequence.begin(), sequence.end(), sequence.begin(), ::toupper ); + + // --- Substitute the unknown nucleotides by N + + for( unsigned int i = 0; i < sequence.size(); ++i ) + { + if( !isATCG( sequence[i] ) ) + { + sequence[i] = 'N'; + } + } + + return sequence; +} + +// ============================================================================= + +bool Util::isATCG( char nucleotide ) +{ + if( nucleotide == 'A' || nucleotide == 'T' || nucleotide == 'C' || nucleotide == 'G' ) + { + return true; + } + + return false; +} + +// ============================================================================= +// Encoders + +int Util::encode_dimer( char first, char second ) +{ + /*if( first != 'A' || != 'T' ) + return 0;*/ + + /*static char bin[CHAR_BIT + 1] = {0}; + int i; + + for ( i = CHAR_BIT - 1; i >= 0; i-- ) + { + bin[i] = (c % 2) + '0'; + c /= 2; + } + + return bin;*/ + + if( first == 'A' && second == 'A' ){ return 0; } + else if( first == 'A' && second == 'T' ){ return 1; } + else if( first == 'A' && second == 'G' ){ return 2; } + else if( first == 'A' && second == 'C' ){ return 3; } + + else if( first == 'T' && second == 'T' ){ return 4; } + else if( first == 'T' && second == 'G' ){ return 5; } + else if( first == 'T' && second == 'C' ){ return 6; } + else if( first == 'T' && second == 'A' ){ return 7; } + + else if( first == 'C' && second == 'C' ){ return 8; } + else if( first == 'C' && second == 'G' ){ return 9; } + else if( first == 'C' && second == 'T' ){ return 10; } + else if( first == 'C' && second == 'A' ){ return 11; } + + else if( first == 'G' && second == 'G' ){ return 12; } + else if( first == 'G' && second == 'T' ){ return 13; } + else if( first == 'G' && second == 'C' ){ return 14; } + else if( first == 'G' && second == 'A' ){ return 15; } + + return 0; +} + +// ============================================================================= + +int Util::encode_closure(char a, char b) +{ + /*corresponds to the single mismatch from the file int11.txt + corresponds to a block of four lines/columns from the file int11.txt + a -> nuc53 -> seq1 -> seq_up + b -> nuc35 -> seq2 -> seq_down*/ + + if( a == 'A' && b == 'T' ) { return 1; } + else if( a == 'C' && b == 'G' ) { return 2; } + else if( a == 'G' && b == 'C' ) { return 3; } + else if( a == 'T' && b == 'A' ) { return 4; } + else if( a == 'G' && b == 'T' ) { return 5; } + else if( a == 'T' && b == 'G' ) { return 6; } + + return 0; +} + +// ============================================================================= + +int Util::encode_closure( char a, char b, char c, char d ) +{ + if( a == 'A' && b == 'T' && c == 'A' && d == 'T' ) { return 1; } + else if( a == 'A' && b == 'T' && c == 'C' && d == 'G' ) { return 2; } + else if( a == 'A' && b == 'T' && c == 'G' && d == 'C' ) { return 3; } + else if( a == 'A' && b == 'T' && c == 'G' && d == 'T' ) { return 4; } + else if( a == 'A' && b == 'T' && c == 'T' && d == 'A' ) { return 5; } + else if( a == 'A' && b == 'T' && c == 'T' && d == 'G' ) { return 6; } + + else if( a == 'C' && b == 'G' && c == 'A' && d == 'T' ) { return 7; } + else if( a == 'C' && b == 'G' && c == 'C' && d == 'G' ) { return 8; } + else if( a == 'C' && b == 'G' && c == 'G' && d == 'C' ) { return 9; } + else if( a == 'C' && b == 'G' && c == 'G' && d == 'T' ) { return 10; } + else if( a == 'C' && b == 'G' && c == 'T' && d == 'A' ) { return 11; } + else if( a == 'C' && b == 'G' && c == 'T' && d == 'G' ) { return 12; } + + else if( a == 'G' && b == 'C' && c == 'A' && d == 'T' ) { return 13; } + else if( a == 'G' && b == 'C' && c == 'C' && d == 'G' ) { return 14; } + else if( a == 'G' && b == 'C' && c == 'G' && d == 'C' ) { return 15; } + else if( a == 'G' && b == 'C' && c == 'G' && d == 'T' ) { return 16; } + else if( a == 'G' && b == 'C' && c == 'T' && d == 'A' ) { return 17; } + else if( a == 'G' && b == 'C' && c == 'T' && d == 'G' ) { return 18; } + + else if( a == 'T' && b == 'A' && c == 'A' && d == 'T' ) { return 19; } + else if( a == 'T' && b == 'A' && c == 'C' && d == 'G' ) { return 20; } + else if( a == 'T' && b == 'A' && c == 'G' && d == 'C' ) { return 21; } + else if( a == 'T' && b == 'A' && c == 'G' && d == 'T' ) { return 22; } + else if( a == 'T' && b == 'A' && c == 'T' && d == 'A' ) { return 23; } + else if( a == 'T' && b == 'A' && c == 'T' && d == 'G' ) { return 24; } + + else if( a == 'G' && b == 'T' && c == 'A' && d == 'T' ) { return 25; } + else if( a == 'G' && b == 'T' && c == 'C' && d == 'G' ) { return 26; } + else if( a == 'G' && b == 'T' && c == 'G' && d == 'C' ) { return 27; } + else if( a == 'G' && b == 'T' && c == 'G' && d == 'T' ) { return 28; } + else if( a == 'G' && b == 'T' && c == 'T' && d == 'A' ) { return 29; } + else if( a == 'G' && b == 'T' && c == 'T' && d == 'G' ) { return 30; } + + else if( a == 'T' && b == 'G' && c == 'A' && d == 'T' ) { return 31; } + else if( a == 'T' && b == 'G' && c == 'C' && d == 'G' ) { return 32; } + else if( a == 'T' && b == 'G' && c == 'G' && d == 'C' ) { return 33; } + else if( a == 'T' && b == 'G' && c == 'G' && d == 'T' ) { return 34; } + else if( a == 'T' && b == 'G' && c == 'T' && d == 'A' ) { return 35; } + else if( a == 'T' && b == 'G' && c == 'T' && d == 'G' ) { return 36; } + + return 0; +} + +// ============================================================================= + +int Util::encode( char a ) +{ + /*corresponds to the single mismatch from the file int11.txt*/ + if(a == 'A') { return 4; } + else if(a == 'C') { return 3; } + else if(a == 'G') { return 2; } + else if(a == 'T') { return 1; } + + return 0; +} + +// ============================================================================= + +int Util::encode(char a, char b) +{ + if( a == 'A' && b == 'A' ) { return 1; } + else if( a == 'A' && b == 'C' ) { return 2; } + else if( a == 'A' && b == 'G' ) { return 3; } + else if( a == 'A' && b == 'T' ) { return 4; } + + else if( a == 'C' && b == 'A' ) { return 5; } + else if( a == 'C' && b == 'C' ) { return 6; } + else if( a == 'C' && b == 'G' ) { return 7; } + else if( a == 'C' && b == 'T' ) { return 8; } + + else if( a == 'G' && b == 'A' ) { return 9; } + else if( a == 'G' && b == 'C' ) { return 10; } + else if( a == 'G' && b == 'G' ) { return 11; } + else if( a == 'G' && b == 'T' ) { return 12; } + + else if( a == 'T' && b == 'A' ) { return 13; } + else if( a == 'T' && b == 'C' ) { return 14; } + else if( a == 'T' && b == 'G' ) { return 15; } + else if( a == 'T' && b == 'T' ) { return 16; } + + return 0; +} + +// ============================================================================= + +int Util::encode_dangle(char a) +{ + if(a == 'A') { return 1; } + else if(a == 'C') { return 2; } + else if(a == 'G') { return 3; } + else if(a == 'T') { return 4; } + + return 0; +} + +// ============================================================================= + +pair<string*,unsigned int> Util::restricted_seq( string r_seq ) +{ + unsigned int taille = 1; + unsigned int r_count = 0; + pair<string*,unsigned int> restr_seq; + restr_seq.second = 1; + + if( r_seq != "" ) + { + ifstream r_premiRNA( r_seq.c_str() , ios::in ); + + string line; + + getline( r_premiRNA, line); + + taille = atoi(line.c_str()); + + string *premiRNA = new string[ taille ]; + + while( getline( r_premiRNA, line ) ) + { + premiRNA[r_count] = line; + r_count++; + } + + restr_seq.first = premiRNA; + restr_seq.second = taille; + } + + return( restr_seq ); +} + +// ============================================================================= + +bool Util::is_in_restricted_seq( string r_seq, string sequenceID, string* premiRNA, unsigned int taille, string output_file) +{ + if( r_seq != "" ) + { + for( unsigned int ab = 0; ab < taille; ab++ ) + { + size_t found = sequenceID.find(premiRNA[ab]); + + if (found!=string::npos) + { + // Test if the file already exist and is readable. + ifstream my_file( output_file.c_str() ); + + if (my_file.good()) + { + cout << "File for sequence '" << premiRNA[ab] << "' already exist, so it will not be analysed.\t" << endl; + return( false ); + } + else + { + return( true ); + } + } + } + // This sequenceID is not in the restricted sequences. + return( false ); + } + // Don't use the option 'restricted sequence'. + return( true ); +} diff --git a/Util.hpp b/Util.hpp new file mode 100644 index 0000000..f9f67ba --- /dev/null +++ b/Util.hpp @@ -0,0 +1,96 @@ +// ============================================================================= +/// @file Util.h + +#ifndef UTIL_H_ +#define UTIL_H_ + +#include<string.h> +#include<string> +#include<algorithm> + +using namespace std; + +// ============================================================================= +/// \class Util +/// \brief Utilities methods, such as for encode single nucleotides, +/// dimers, (mis)match pairs, etc. + +class Util +{ + public: + /// \fn Util::isATCG( char nucleotide ) + /// \brief + /// \param + + bool isATCG( char nucleotide ); + + /// \fn string Util::clean_sequence( string& sequence ) + /// \brief Substitute R Y S W K M B D H V by N. + /// Substitute masked sequences (lower case letters), + /// if they exists, by N. + /// \param sequence Nucleotide sequence. + + string clean_sequence( string& sequence ); + + /// \fn int Util::encode_dimer( char first, char second ) + /// \brief Encode a dimer (two nucleotides) in an integer. + /// \param first First nucleotide of the dimer. + /// \param second Second nucleotide of the dimer. + + int encode_dimer( char first, char second ); + + /// \fn int Util::encode_closure(char a, char b); + /// \brief Encode the matching closure of a internal loop 1x1. + /// \param a First nucleotide of the match. + /// \param b Second nucleotide of the match. + + int encode_closure(char a, char b); + + /// \fn int Util::encode_closure( char a, char b, char c, char d ); + /// \brief Encode the matching closure of a internal loop 2x2. + /// \param a First nucleotide of the first match. + /// \param b Second nucleotide of the first match. + /// \param c First nucleotide of the second match. + /// \param d Second nucleotide of the second match. + + int encode_closure( char a, char b, char c, char d ); + + /// \fn int Util::encode(char a); + /// \brief Encodes the nucleotide of the single mismatch of internal 1x1. + /// \param a Nucleotide of the single mismatch. + + int encode(char a); + + /// \fn int Util::encode(char a, char b); + /// \brief Encodes the nucleotides of a mismatch (int22). + /// \param a First nucleotide of a mismatch. + /// \param b Second nucleotide of a mismatch. + + int encode(char a, char b); + + /// \fn int Util::encode_dangle(char a); + /// \brief Encodes the dangling nucleotide of a dangle end. + /// \param a Dangling nucleotide. + + int encode_dangle(char a); + + /// \fn string Util::restricted_seq(); + /// \brief Select only the sequences wanted in the genome -> we just read the file and stock sequences ID. + /// \param r_seq is the restricted file name. + + pair<string*,unsigned int> restricted_seq( string r_seq ); + + /// \fn bool Util::is_in_restricted_seq( string r_seq, string sequenceID, string* premiRNA, unsigned int taille, string file_name) + /// \brief Check if the sequenceID is in our restricted files, and if this + /// file doesn't already exist. + /// \param r_seq is the restricted file name. + /// \param sequenceID the sequence ID of the current sequence. + /// \param premiRNA is the vector with all wanted sequence ID. + /// \param taille is the length of the premiRNA vector (nb of sequence ID) + /// \param output_file is the output file name. + + bool is_in_restricted_seq( string r_seq, string sequenceID, string* premiRNA, unsigned int taille, string output_file); +}; + + +#endif diff --git a/format_r_seq.sh b/format_r_seq.sh new file mode 100644 index 0000000..87a9d01 --- /dev/null +++ b/format_r_seq.sh @@ -0,0 +1,57 @@ +#!/bin/sh + +# format_r_seq.sh +# +# +# Created by Cyril Fournier on 5/21/13. +# Copyright (c) 2013 __MyCompanyName__. All rights reserved. + +# ========================================================= +# Return a text file named "file_restricted.txt" containing +# all unique sequence ID, for the mirirnho -r option. +# ========================================================= + +if [ $# != 1 ]; then + +echo "usage: $0 <file.gff>" +exit 1 + +fi + +fileGff=$1 + +# ------------------------------------------------------------- +# Parse GFF file + +id=`date | cut -d" " -f 2,5 |sed -e 's/ //g' | sed -e 's/://g'`; + +grep -v "#" $fileGff | grep -P "\tmiRNA\t" > .tmp_${id} + +# ------------------------------------------------------------- +# Compare the GFF w/ Alvinho's FE predictions + +repeat="nothing" +count=0 + +while read line; +do + + seq=`echo ${line} | cut -d" " -f1` + + if [ "$repeat" != "$seq" ]; then + + count=$(($count + 1)) + repeat=$seq + echo "$seq" + + fi + +done < .tmp_${id} > .output_${id} + +output=`echo ${fileGff} | cut -d. -f1` + +echo "$count" > ${output}_restricted.txt +cat .output_${id} >> ${output}_restricted.txt + +rm .tmp_${id} +rm .output_${id} diff --git a/kseq.h b/kseq.h new file mode 100644 index 0000000..efe68f9 --- /dev/null +++ b/kseq.h @@ -0,0 +1,227 @@ +//////////////////////////////////////////////////////////////// +/// @file kseq.h +/// @brief For parsing fasta files (by Heng Li) + +/* The MIT License + + Copyright (c) 2008 Genome Research Ltd (GRL). + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be + included in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS + BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. +*/ + +/* Contact: Heng Li <lh3@sanger.ac.uk> */ + +/* Last Modified: 12APR2009 */ + +#ifndef AC_KSEQ_H +#define AC_KSEQ_H + +#include <ctype.h> +#include <string.h> +#include <stdlib.h> + +#define KS_SEP_SPACE 0 // isspace(): \t, \n, \v, \f, \r +#define KS_SEP_TAB 1 // isspace() && !' ' +#define KS_SEP_MAX 1 + +#define __KS_TYPE(type_t) \ + typedef struct __kstream_t { \ + char *buf; \ + int begin, end, is_eof; \ + type_t f; \ + } kstream_t; + +#define ks_eof(ks) ((ks)->is_eof && (ks)->begin >= (ks)->end) +#define ks_rewind(ks) ((ks)->is_eof = (ks)->begin = (ks)->end = 0) + +#define __KS_BASIC(type_t, __bufsize) \ + static inline kstream_t *ks_init(type_t f) \ + { \ + kstream_t *ks = (kstream_t*)calloc(1, sizeof(kstream_t)); \ + ks->f = f; \ + ks->buf = (char*)malloc(__bufsize); \ + return ks; \ + } \ + static inline void ks_destroy(kstream_t *ks) \ + { \ + if (ks) { \ + free(ks->buf); \ + free(ks); \ + } \ + } + +#define __KS_GETC(__read, __bufsize) \ + static inline int ks_getc(kstream_t *ks) \ + { \ + if (ks->is_eof && ks->begin >= ks->end) return -1; \ + if (ks->begin >= ks->end) { \ + ks->begin = 0; \ + ks->end = __read(ks->f, ks->buf, __bufsize); \ + if (ks->end < __bufsize) ks->is_eof = 1; \ + if (ks->end == 0) return -1; \ + } \ + return (int)ks->buf[ks->begin++]; \ + } + +#ifndef KSTRING_T +#define KSTRING_T kstring_t +typedef struct __kstring_t { + size_t l, m; + char *s; +} kstring_t; +#endif + +#ifndef kroundup32 +#define kroundup32(x) (--(x), (x)|=(x)>>1, (x)|=(x)>>2, (x)|=(x)>>4, (x)|=(x)>>8, (x)|=(x)>>16, ++(x)) +#endif + +#define __KS_GETUNTIL(__read, __bufsize) \ + static int ks_getuntil(kstream_t *ks, int delimiter, kstring_t *str, int *dret) \ + { \ + if (dret) *dret = 0; \ + str->l = 0; \ + if (ks->begin >= ks->end && ks->is_eof) return -1; \ + for (;;) { \ + int i; \ + if (ks->begin >= ks->end) { \ + if (!ks->is_eof) { \ + ks->begin = 0; \ + ks->end = __read(ks->f, ks->buf, __bufsize); \ + if (ks->end < __bufsize) ks->is_eof = 1; \ + if (ks->end == 0) break; \ + } else break; \ + } \ + if (delimiter > KS_SEP_MAX) { \ + for (i = ks->begin; i < ks->end; ++i) \ + if (ks->buf[i] == delimiter) break; \ + } else if (delimiter == KS_SEP_SPACE) { \ + for (i = ks->begin; i < ks->end; ++i) \ + if (isspace(ks->buf[i])) break; \ + } else if (delimiter == KS_SEP_TAB) { \ + for (i = ks->begin; i < ks->end; ++i) \ + if (isspace(ks->buf[i]) && ks->buf[i] != ' ') break; \ + } else i = 0; /* never come to here! */ \ + if (str->m - str->l < i - ks->begin + 1) { /* warning s and u comp */ \ + str->m = str->l + (i - ks->begin) + 1; \ + kroundup32(str->m); \ + str->s = (char*)realloc(str->s, str->m); \ + } \ + memcpy(str->s + str->l, ks->buf + ks->begin, i - ks->begin); \ + str->l = str->l + (i - ks->begin); \ + ks->begin = i + 1; \ + if (i < ks->end) { \ + if (dret) *dret = ks->buf[i]; \ + break; \ + } \ + } \ + if (str->l == 0) { \ + str->m = 1; \ + str->s = (char*)calloc(1, 1); \ + } \ + str->s[str->l] = '\0'; \ + return str->l; \ + } + +#define KSTREAM_INIT(type_t, __read, __bufsize) \ + __KS_TYPE(type_t) \ + __KS_BASIC(type_t, __bufsize) \ + __KS_GETC(__read, __bufsize) \ + __KS_GETUNTIL(__read, __bufsize) + +#define __KSEQ_BASIC(type_t) \ + static inline kseq_t *kseq_init(type_t fd) \ + { \ + kseq_t *s = (kseq_t*)calloc(1, sizeof(kseq_t)); \ + s->f = ks_init(fd); \ + return s; \ + } \ + static inline void kseq_rewind(kseq_t *ks) \ + { \ + ks->last_char = 0; \ + ks->f->is_eof = ks->f->begin = ks->f->end = 0; \ + } \ + static inline void kseq_destroy(kseq_t *ks) \ + { \ + if (!ks) return; \ + free(ks->name.s); free(ks->comment.s); free(ks->seq.s); free(ks->qual.s); \ + ks_destroy(ks->f); \ + free(ks); \ + } + +/* Return value: + >=0 length of the sequence (normal) + -1 end-of-file + -2 truncated quality string + */ +#define __KSEQ_READ \ + static int kseq_read(kseq_t *seq) \ + { \ + int c; \ + kstream_t *ks = seq->f; \ + if (seq->last_char == 0) { /* then jump to the next header line */ \ + while ((c = ks_getc(ks)) != -1 && c != '>' && c != '@'); \ + if (c == -1) return -1; /* end of file */ \ + seq->last_char = c; \ + } /* the first header char has been read */ \ + seq->comment.l = seq->seq.l = seq->qual.l = 0; \ + if (ks_getuntil(ks, 0, &seq->name, &c) < 0) return -1; \ + if (c != '\n') ks_getuntil(ks, '\n', &seq->comment, 0); \ + while ((c = ks_getc(ks)) != -1 && c != '>' && c != '+' && c != '@') { \ + if (isgraph(c)) { /* printable non-space character */ \ + if (seq->seq.l + 1 >= seq->seq.m) { /* double the memory */ \ + seq->seq.m = seq->seq.l + 2; \ + kroundup32(seq->seq.m); /* rounded to next closest 2^k */ \ + seq->seq.s = (char*)realloc(seq->seq.s, seq->seq.m); \ + } \ + seq->seq.s[seq->seq.l++] = (char)c; \ + } \ + } \ + if (c == '>' || c == '@') seq->last_char = c; /* the first header char has been read */ \ + seq->seq.s[seq->seq.l] = 0; /* null terminated string */ \ + if (c != '+') return seq->seq.l; /* FASTA */ \ + if (seq->qual.m < seq->seq.m) { /* allocate enough memory */ \ + seq->qual.m = seq->seq.m; \ + seq->qual.s = (char*)realloc(seq->qual.s, seq->qual.m); \ + } \ + while ((c = ks_getc(ks)) != -1 && c != '\n'); /* skip the rest of '+' line */ \ + if (c == -1) return -2; /* we should not stop here */ \ + while ((c = ks_getc(ks)) != -1 && seq->qual.l < seq->seq.l) \ + if (c >= 33 && c <= 127) seq->qual.s[seq->qual.l++] = (unsigned char)c; \ + seq->qual.s[seq->qual.l] = 0; /* null terminated string */ \ + seq->last_char = 0; /* we have not come to the next header line */ \ + if (seq->seq.l != seq->qual.l) return -2; /* qual string is shorter than seq string */ \ + return seq->seq.l; \ + } + +#define __KSEQ_TYPE(type_t) \ + typedef struct { \ + kstring_t name, comment, seq, qual; \ + int last_char; \ + kstream_t *f; \ + } kseq_t; + +#define KSEQ_INIT(type_t, __read) \ + KSTREAM_INIT(type_t, __read, 4096) \ + __KSEQ_TYPE(type_t) \ + __KSEQ_BASIC(type_t) \ + __KSEQ_READ + +#endif diff --git a/parameters/dangle.txt b/parameters/dangle.txt new file mode 100644 index 0000000..22f88a0 --- /dev/null +++ b/parameters/dangle.txt @@ -0,0 +1,12 @@ +-0.8 -0.5 -0.8 -0.6 +-1.7 -0.8 -1.7 -1.2 +-1.1 -0.4 -1.3 -0.6 +-0.7 -0.1 -0.7 -0.1 +-0.8 -0.5 -0.8 -0.6 +-0.7 -0.1 -0.7 -0.1 +-0.3 -0.1 -0.2 -0.2 +-0.2 -0.3 -0 -0 +-0.5 -0.3 -0.2 -0.1 +-0.3 -0.3 -0.4 -0.2 +-0.3 -0.1 -0.2 -0.2 +-0.3 -0.3 -0.4 -0.2 diff --git a/parameters/dangle_text.txt b/parameters/dangle_text.txt new file mode 100644 index 0000000..1517ed1 --- /dev/null +++ b/parameters/dangle_text.txt @@ -0,0 +1,12 @@ +-0.8 -0.5 -0.8 -0.6//AU +-1.7 -0.8 -1.7 -1.2//CG +-1.1 -0.4 -1.3 -0.6//GC +-0.7 -0.1 -0.7 -0.1//UA=UG +-0.8 -0.5 -0.8 -0.6//GU +-0.7 -0.1 -0.7 -0.1//UG=UA +-0.3 -0.1 -0.2 -0.2//AU +-0.2 -0.3 -0 -0//CG +-0.5 -0.3 -0.2 -0.1//GC +-0.3 -0.3 -0.4 -0.2//UA=UG +-0.3 -0.1 -0.2 -0.2//GU +-0.3 -0.3 -0.4 -0.2//UG=UA diff --git a/parameters/int11.txt b/parameters/int11.txt new file mode 100644 index 0000000..e41eaa7 --- /dev/null +++ b/parameters/int11.txt @@ -0,0 +1,24 @@ +1.9 1.9 1.9 1.9 1.2 1.2 1.2 1.2 1.2 1.2 1.2 1.2 1.9 1.9 1.9 1.9 1.9 1.9 1.9 1.9 1.9 1.9 1.9 1.9 +1.9 1.9 1.9 1.9 1.2 1.2 1.2 1.2 1.2 1.2 1.2 1.2 1.9 1.9 1.9 1.9 1.9 1.9 1.9 1.9 1.9 1.9 1.9 1.9 +1.9 1.9 -0.7 1.9 1.2 1.2 -1.4 1.2 1.2 1.2 -1.4 1.2 1.9 1.9 -0.7 1.9 1.9 1.9 -0.7 1.9 1.9 1.9 -0.7 1.9 +1.9 1.9 1.9 1.5 1.2 1.2 1.2 0.8 1.2 1.2 1.2 0.8 1.9 1.9 1.9 1.2 1.9 1.9 1.9 1.6 1.9 1.9 1.9 1.2 +1.2 1.2 1.2 1.2 0.9 -0.4 0.5 0.5 0.9 0.5 0.5 0.5 1.2 1.2 1.2 1.2 2.2 1.3 1.2 1.2 0.6 0.5 1.2 1.2 +1.2 1.2 1.2 1.2 0.3 0.5 0.5 0.6 0.5 0.5 0.5 0.5 1.2 1.2 1.2 1.2 1.2 1.7 1.2 1.2 1.2 1.2 1.2 1.2 +1.2 1.2 -1.4 1.2 -0.1 0.5 -2.2 0.5 0.5 0.5 -1.4 0.5 1.2 1.2 -1.4 1.2 1.2 1.2 -1.4 1.2 -0.2 1.2 -1.4 1.2 +1.2 1.2 1.2 1.2 0.5 0.0 0.5 -0.1 0.5 0.5 0.5 0.4 1.2 1.2 1.2 0.8 1.2 1.2 1.2 1.1 1.2 1.0 1.2 1.1 +1.2 1.2 1.2 1.2 0.8 0.5 0.5 0.5 0.9 0.3 -0.1 0.5 1.2 1.2 1.2 1.2 1.6 1.2 1.0 1.2 1.9 1.2 1.5 1.2 +1.2 1.2 1.2 1.2 0.5 0.5 0.5 0.5 -0.4 0.5 0.5 0.0 1.2 1.2 1.2 1.2 1.2 1.2 1.2 1.2 1.2 1.2 1.2 1.2 +1.2 1.2 -1.4 1.2 0.5 0.5 -2.3 0.5 0.5 0.5 -2.2 0.5 1.2 1.2 -1.4 1.2 1.2 1.2 -1.4 1.2 1.2 1.2 -1.4 1.2 +1.2 1.2 1.2 1.2 0.5 0.5 0.5 -0.6 0.5 0.6 0.5 -0.1 1.2 1.2 1.2 0.8 1.2 1.2 1.2 0.7 1.2 1.2 1.2 1.5 +1.9 1.9 1.9 1.9 1.2 1.2 1.2 1.2 1.2 1.2 1.2 1.2 1.9 1.9 1.9 1.9 1.9 1.9 1.9 1.9 1.9 1.9 1.9 1.9 +1.9 1.9 1.9 1.9 1.2 1.2 1.2 1.2 1.2 1.2 1.2 1.2 1.9 1.9 1.9 1.9 1.9 1.9 1.9 1.9 1.9 1.9 1.9 1.9 +1.9 1.9 -0.7 1.9 1.2 1.2 -1.4 1.2 1.2 1.2 -1.4 1.2 1.9 1.9 -0.7 1.9 1.9 1.9 -0.7 1.9 1.9 1.9 -0.7 1.9 +1.9 1.9 1.9 1.7 1.2 1.2 1.2 1.2 1.2 1.2 1.2 1.2 1.9 1.9 1.9 1.5 1.9 1.9 1.9 1.9 1.9 1.9 1.9 1.6 +1.9 1.9 1.9 1.9 1.9 1.2 1.2 1.2 0.6 1.2 -0.2 1.2 1.9 1.9 1.9 1.9 1.9 1.9 1.9 1.9 1.9 1.9 1.9 1.9 +1.9 1.9 1.9 1.9 1.2 1.2 1.2 1.2 0.5 1.2 1.2 1.0 1.9 1.9 1.9 1.9 1.9 1.9 1.9 1.9 1.9 1.9 1.9 1.9 +1.9 1.9 -0.7 1.9 1.5 1.2 -1.4 1.2 1.2 1.2 -1.4 1.2 1.9 1.9 -0.7 1.9 1.9 1.9 -0.7 1.9 1.9 1.9 -0.7 1.9 +1.9 1.9 1.9 1.6 1.2 1.2 1.2 1.5 1.2 1.2 1.2 1.1 1.9 1.9 1.9 1.2 1.9 1.9 1.9 1.6 1.9 1.9 1.9 1.2 +1.9 1.9 1.9 1.9 1.6 1.2 1.2 1.2 2.2 1.2 1.2 1.2 1.9 1.9 1.9 1.9 1.9 1.9 1.9 1.9 1.9 1.9 1.9 1.9 +1.9 1.9 1.9 1.9 1.2 1.2 1.2 1.2 1.3 1.7 1.2 1.2 1.9 1.9 1.9 1.9 1.9 1.9 1.9 1.9 1.9 1.9 1.9 1.9 +1.9 1.9 -0.7 1.9 1.0 1.2 -1.4 1.2 1.2 1.2 -1.4 1.2 1.9 1.9 -0.7 1.9 1.9 1.9 -0.7 1.9 1.9 1.9 -0.7 1.9 +1.9 1.9 1.9 1.9 1.2 1.2 1.2 0.7 1.2 1.2 1.2 1.1 1.9 1.9 1.9 1.6 1.9 1.9 1.9 1.9 1.9 1.9 1.9 1.6 diff --git a/parameters/int21.txt b/parameters/int21.txt new file mode 100644 index 0000000..4083e11 --- /dev/null +++ b/parameters/int21.txt @@ -0,0 +1,96 @@ + 3.7 3.7 3.7 3.7 2.9 2.9 2.9 2.9 2.9 2.9 2.9 2.9 3.7 3.7 3.7 3.7 3.7 3.7 3.7 3.7 3.7 3.7 3.7 3.7 + 3.7 3.7 3.7 3.7 2.9 2.9 2.9 2.9 2.9 2.9 2.9 2.9 3.7 3.7 3.7 3.7 3.7 3.7 3.7 3.7 3.7 3.7 3.7 3.7 + 2.6 2.6 2.6 2.6 1.8 2.9 1.8 2.9 1.8 1.8 1.8 1.8 2.6 3.7 2.6 3.7 2.6 2.6 2.6 2.6 2.6 3.7 2.6 3.7 + 3.7 3.7 3.7 3.0 2.9 2.9 2.9 2.2 2.9 2.9 2.9 2.2 3.7 3.7 3.7 3.0 3.7 3.7 3.7 3.0 3.7 3.7 3.7 3.0 + 3.7 3.7 3.7 3.7 2.9 2.9 2.9 2.9 2.9 2.9 2.9 2.9 3.7 3.7 3.7 3.7 3.7 3.7 3.7 3.7 3.7 3.7 3.7 3.7 + 3.7 3.7 3.7 3.7 2.9 2.9 2.9 2.9 2.9 2.9 2.9 2.9 3.7 3.7 3.7 3.7 3.7 3.7 3.7 3.7 3.7 3.7 3.7 3.7 + 2.6 3.7 2.6 3.7 1.8 3.7 1.8 3.7 1.8 3.7 1.8 3.7 2.6 3.7 2.6 3.7 2.6 3.7 2.6 3.7 2.6 3.7 2.6 3.7 + 3.7 3.7 3.7 3.0 2.9 2.9 2.9 2.2 2.9 2.9 2.9 2.2 3.7 3.7 3.7 3.0 3.7 3.7 3.7 3.0 3.7 3.7 3.7 3.0 + 2.6 2.6 2.6 2.6 1.8 1.8 1.8 1.8 1.8 1.8 1.8 1.8 2.6 2.6 2.6 2.6 2.6 2.6 2.6 2.6 2.6 2.6 2.6 2.6 + 2.6 3.7 3.7 3.7 1.8 2.9 2.9 2.9 1.8 2.9 2.9 2.9 2.6 3.7 3.7 3.7 2.6 3.7 3.7 3.7 2.6 3.7 3.7 3.7 + 2.6 2.6 2.6 2.6 1.8 1.8 1.8 1.8 1.8 1.8 1.8 1.8 2.6 2.6 2.6 2.6 2.6 2.6 2.6 2.6 2.6 2.6 2.6 2.6 + 2.6 3.7 3.7 3.0 1.8 2.9 2.9 2.2 1.8 2.9 2.9 2.2 2.6 3.7 3.7 3.0 2.6 3.7 3.7 3.0 2.6 3.7 3.7 3.0 + 3.7 3.7 3.7 3.7 2.9 2.9 2.9 2.9 2.9 2.9 2.9 2.9 3.7 3.7 3.7 3.7 3.7 3.7 3.7 3.7 3.7 3.7 3.7 3.7 + 3.7 3.7 3.7 3.7 2.9 2.9 2.9 2.9 2.9 2.9 2.9 2.9 3.7 3.7 3.7 3.7 3.7 3.7 3.7 3.7 3.7 3.7 3.7 3.7 + 2.6 3.7 2.6 3.7 1.8 2.9 1.8 2.9 1.8 2.9 1.8 2.9 2.6 3.7 2.6 3.7 2.6 3.7 2.6 3.7 2.6 3.7 2.6 3.7 + 3.0 3.0 3.0 3.0 2.2 2.2 2.2 2.2 2.2 2.2 2.2 2.2 3.0 3.0 3.0 3.0 3.0 3.0 3.0 3.0 3.0 3.0 3.0 3.0 + 2.9 2.9 1.8 2.9 2.5 2.2 1.1 2.2 2.2 2.2 1.1 2.2 2.9 2.9 1.8 2.9 2.9 2.9 1.8 2.9 2.9 2.9 1.8 2.9 + 2.9 2.9 2.9 2.9 2.3 2.2 2.2 2.2 2.2 2.2 2.2 2.2 2.9 2.9 2.9 2.9 2.9 2.9 2.9 2.9 2.9 2.9 2.9 2.9 + 1.8 1.8 1.8 1.8 1.7 2.2 0.8 2.2 1.1 1.1 1.1 1.1 1.8 2.9 1.8 2.9 1.8 1.8 1.8 1.8 1.8 1.8 1.8 1.8 + 2.9 2.9 2.9 2.2 2.2 2.2 2.2 1.5 2.2 2.2 2.2 1.5 2.9 2.9 2.9 2.2 2.9 2.9 2.9 2.2 2.9 2.9 2.9 2.2 + 2.9 2.9 1.8 2.9 2.2 1.7 1.1 2.2 2.2 2.2 1.1 2.2 2.9 2.9 1.8 2.9 2.9 2.9 1.8 2.9 2.9 2.9 1.8 2.9 + 2.9 2.9 2.9 2.9 2.2 2.5 2.2 2.2 2.2 2.2 2.2 2.2 2.9 2.9 2.9 2.9 2.9 2.9 2.9 2.9 2.9 2.9 2.9 2.9 + 1.8 2.9 1.8 2.9 1.1 2.2 1.1 2.2 1.1 2.2 1.8 2.2 1.8 2.9 1.8 2.9 1.8 2.9 1.8 2.9 1.8 2.9 1.8 2.9 + 2.9 2.9 2.9 2.2 2.2 2.2 2.2 1.5 2.2 2.2 2.2 1.5 2.9 2.9 2.9 2.2 2.9 2.9 2.9 2.2 2.9 2.9 2.9 2.2 + 1.8 1.8 1.8 1.8 0.8 1.1 1.1 1.1 1.1 1.1 1.1 1.1 1.8 1.8 1.8 1.8 1.8 1.8 1.8 1.8 1.8 1.8 1.8 1.8 + 1.8 2.9 2.9 2.9 1.1 2.2 2.2 2.2 1.1 2.2 2.2 2.2 1.8 2.9 2.9 2.9 1.8 2.9 2.9 2.9 1.8 2.9 2.9 2.9 + 1.8 1.8 1.8 1.8 1.2 1.1 1.1 1.1 1.1 1.1 1.1 1.1 1.8 1.8 1.8 1.8 1.8 1.8 1.8 1.8 1.8 1.8 1.8 1.8 + 1.8 2.9 2.9 2.2 1.1 2.2 2.2 1.5 1.1 2.2 2.2 1.5 1.8 2.9 2.9 2.2 1.8 2.9 2.9 2.2 1.8 2.9 2.9 2.2 + 2.9 2.9 1.8 2.9 2.2 2.2 1.1 2.2 2.2 2.2 1.1 2.2 2.9 2.9 1.8 2.9 2.9 2.9 1.8 2.9 2.9 2.9 1.8 2.9 + 2.9 2.9 2.9 2.9 2.5 2.2 2.2 2.2 2.2 2.2 2.2 2.2 2.9 2.9 2.9 2.9 2.9 2.9 2.9 2.9 2.9 2.9 2.9 2.9 + 1.8 2.9 1.8 2.9 1.1 2.2 1.1 2.2 1.1 2.2 1.8 2.2 1.8 2.9 1.8 2.9 1.8 2.9 1.8 2.9 1.8 2.9 1.8 2.9 + 2.2 2.2 2.2 2.2 1.5 1.5 1.5 1.4 1.5 1.5 1.5 1.5 2.2 2.2 2.2 2.2 2.2 2.2 2.2 2.2 2.2 2.2 2.2 2.2 + 2.9 2.9 2.9 2.9 2.2 2.2 2.2 2.2 2.5 2.2 2.1 2.2 2.9 2.9 2.9 2.9 2.9 2.9 2.9 2.9 2.9 2.9 2.9 2.9 + 2.9 2.9 2.9 2.9 2.2 2.2 2.2 2.2 2.2 2.2 2.2 2.2 2.9 2.9 2.9 2.9 2.9 2.9 2.9 2.9 2.9 2.9 2.9 2.9 + 1.8 1.8 1.8 1.8 1.1 2.2 1.1 2.2 1.1 1.1 1.1 1.1 1.8 2.9 1.8 2.9 1.8 1.8 1.8 1.8 1.8 1.8 1.8 1.8 + 2.9 2.9 2.9 2.2 2.2 2.2 2.2 1.5 2.2 2.2 2.2 1.5 2.9 2.9 2.9 2.2 2.9 2.9 2.9 2.2 2.9 2.9 2.9 2.2 + 2.9 2.9 2.9 2.9 2.2 2.2 2.2 2.2 2.2 2.2 2.2 2.2 2.9 2.9 2.9 2.9 2.9 2.9 2.9 2.9 2.9 2.9 2.9 2.9 + 2.9 2.9 2.9 2.9 2.2 2.2 2.2 2.2 2.2 2.2 2.2 2.2 2.9 2.9 2.9 2.9 2.9 2.9 2.9 2.9 2.9 2.9 2.9 2.9 + 1.8 2.9 1.8 2.9 1.1 2.2 1.1 2.2 1.1 2.2 1.8 2.2 1.8 2.9 1.8 2.9 1.8 2.9 1.8 2.9 1.8 2.9 1.8 2.9 + 2.9 2.9 2.9 2.2 2.2 2.2 2.2 1.5 2.2 2.2 2.2 1.5 2.9 2.9 2.9 2.2 2.9 2.9 2.9 2.2 2.9 2.9 2.9 2.2 + 1.8 1.8 1.8 1.8 1.1 1.1 1.1 1.1 1.2 1.1 1.1 1.1 1.8 1.8 1.8 1.8 1.8 1.8 1.8 1.8 1.8 1.8 1.8 1.8 + 1.8 2.9 2.9 2.9 1.1 2.2 2.2 2.2 1.1 2.2 2.2 2.2 1.8 2.9 2.9 2.9 1.8 2.9 2.9 2.9 1.8 2.9 2.9 2.9 + 1.8 1.8 1.8 1.8 1.1 1.1 1.1 1.1 1.1 1.1 1.1 1.1 1.8 1.8 1.8 1.8 1.8 1.8 1.8 1.8 1.8 1.8 1.8 1.8 + 1.8 2.9 2.9 2.2 1.1 2.2 2.2 1.5 1.1 2.2 2.2 1.5 1.8 2.9 2.9 2.2 1.8 2.9 2.9 2.2 1.8 2.9 2.9 2.2 + 2.9 2.9 2.9 2.9 2.2 2.2 2.2 2.2 2.2 2.2 2.2 2.2 2.9 2.9 2.9 2.9 2.9 2.9 2.9 2.9 2.9 2.9 2.9 2.9 + 2.9 2.9 2.9 2.9 2.2 2.2 2.2 2.2 2.2 1.9 2.2 2.2 2.9 2.9 2.9 2.9 2.9 2.9 2.9 2.9 2.9 2.9 2.9 2.9 + 1.8 2.9 1.8 2.9 1.1 2.2 1.1 2.2 1.1 2.2 1.8 2.2 1.8 2.9 1.8 2.9 1.8 2.9 1.8 2.9 1.8 2.9 1.8 2.9 + 2.2 2.2 2.2 2.2 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5 2.2 2.2 2.2 2.2 2.2 2.2 2.2 2.2 2.2 2.2 2.2 2.2 + 3.7 3.7 2.6 3.7 2.9 2.9 1.8 2.9 2.9 2.9 1.8 2.9 3.7 3.7 2.6 3.7 3.7 3.7 2.6 3.7 3.7 3.7 2.6 3.7 + 3.7 3.7 3.7 3.7 2.9 2.9 2.9 2.9 2.9 2.9 2.9 2.9 3.7 3.7 3.7 3.7 3.7 3.7 3.7 3.7 3.7 3.7 3.7 3.7 + 2.6 2.6 2.6 2.6 1.8 2.9 1.8 2.9 1.8 1.8 1.8 1.8 2.6 3.7 2.6 3.7 2.6 2.6 2.6 2.6 2.6 3.7 2.6 3.7 + 3.7 3.7 3.7 3.0 2.9 2.9 2.9 2.2 2.9 2.9 2.9 2.2 3.7 3.7 3.7 3.0 3.7 3.7 3.7 3.0 3.7 3.7 3.7 3.0 + 3.7 3.7 2.6 3.7 2.9 2.9 1.8 2.9 2.9 2.9 1.8 2.9 3.7 3.7 2.6 3.7 3.7 3.7 2.6 3.7 3.7 3.7 2.6 3.7 + 3.7 3.7 3.7 3.7 2.9 2.9 2.9 2.9 2.9 2.9 2.9 2.9 3.7 3.7 3.7 3.7 3.7 3.7 3.7 3.7 3.7 3.7 3.7 3.7 + 2.6 3.7 2.6 3.7 1.8 3.7 1.8 3.7 1.8 3.7 1.8 3.7 2.6 3.7 2.6 3.7 2.6 3.7 2.6 3.7 2.6 3.7 2.6 3.7 + 3.7 3.7 3.7 3.0 2.9 2.9 2.9 2.2 2.9 2.9 2.9 2.2 3.7 3.7 3.7 3.0 3.7 3.7 3.7 3.0 3.7 3.7 3.7 3.0 + 2.6 2.6 2.6 2.6 1.8 1.8 1.8 1.8 1.8 1.8 1.8 1.8 2.6 2.6 2.6 2.6 2.6 2.6 2.6 2.6 2.6 2.6 2.6 2.6 + 2.6 3.7 3.7 3.7 1.8 2.9 2.9 2.9 1.8 2.9 2.9 2.9 2.6 3.7 3.7 3.7 2.6 3.7 3.7 3.7 2.6 3.7 3.7 3.7 + 2.6 2.6 2.6 2.6 1.8 1.8 1.8 1.8 1.8 1.8 1.8 1.8 2.6 2.6 2.6 2.6 2.6 2.6 2.6 2.6 2.6 2.6 2.6 2.6 + 2.6 3.7 3.7 3.0 1.8 2.9 2.9 2.2 1.8 2.9 2.9 2.2 2.6 3.7 3.7 3.0 2.6 3.7 3.7 3.0 2.6 3.7 3.7 3.0 + 3.7 3.7 2.6 3.7 2.9 2.9 1.8 2.9 2.9 2.9 1.8 2.9 3.7 3.7 2.6 3.7 3.7 3.7 2.6 3.7 3.7 3.7 2.6 3.7 + 3.7 3.7 3.7 3.7 2.9 2.9 2.9 2.9 2.9 2.9 2.9 2.9 3.7 3.7 3.7 3.7 3.7 3.7 3.7 3.7 3.7 3.7 3.7 3.7 + 2.6 3.7 2.6 3.7 1.8 2.9 1.8 2.9 1.8 2.9 1.8 2.9 2.6 3.7 2.6 3.7 2.6 3.7 2.6 3.7 2.6 3.7 2.6 3.7 + 3.0 3.0 3.0 3.0 2.2 2.2 2.2 2.2 2.2 2.2 2.2 2.2 3.0 3.0 3.0 3.0 3.0 3.0 3.0 3.0 3.0 3.0 3.0 3.0 + 3.7 3.7 3.7 3.7 2.9 2.9 2.9 2.9 2.9 2.9 2.9 2.9 3.7 3.7 3.7 3.7 3.7 3.7 3.7 3.7 3.7 3.7 3.7 3.7 + 3.7 3.7 3.7 3.7 2.9 2.9 2.9 2.9 2.9 2.9 2.9 2.9 3.7 3.7 3.7 3.7 3.7 3.7 3.7 3.7 3.7 3.7 3.7 3.7 + 2.6 2.6 2.6 2.6 1.8 2.9 1.8 2.9 1.8 1.8 1.8 1.8 2.6 3.7 2.6 3.7 2.6 2.6 2.6 2.6 2.6 3.7 2.6 3.7 + 3.7 3.7 3.7 3.0 2.9 2.9 2.9 2.2 2.9 2.9 2.9 2.2 3.7 3.7 3.7 3.0 3.7 3.7 3.7 3.0 3.7 3.7 3.7 3.0 + 3.7 3.7 3.7 3.7 2.9 2.9 2.9 2.9 2.9 2.9 2.9 2.9 3.7 3.7 3.7 3.7 3.7 3.7 3.7 3.7 3.7 3.7 3.7 3.7 + 3.7 3.7 3.7 3.7 2.9 2.9 2.9 2.9 2.9 2.9 2.9 2.9 3.7 3.7 3.7 3.7 3.7 3.7 3.7 3.7 3.7 3.7 3.7 3.7 + 2.6 3.7 2.6 3.7 1.8 3.7 1.8 3.7 1.8 3.7 1.8 3.7 2.6 3.7 2.6 3.7 2.6 3.7 2.6 3.7 2.6 3.7 2.6 3.7 + 3.7 3.7 3.7 3.0 2.9 2.9 2.9 2.2 2.9 2.9 2.9 2.2 3.7 3.7 3.7 3.0 3.7 3.7 3.7 3.0 3.7 3.7 3.7 3.0 + 2.6 2.6 2.6 2.6 1.8 1.8 1.8 1.8 1.8 1.8 1.8 1.8 2.6 2.6 2.6 2.6 2.6 2.6 2.6 2.6 2.6 2.6 2.6 2.6 + 2.6 3.7 3.7 3.7 1.8 2.9 2.9 2.9 1.8 2.9 2.9 2.9 2.6 3.7 3.7 3.7 2.6 3.7 3.7 3.7 2.6 3.7 3.7 3.7 + 2.6 2.6 2.6 2.6 1.8 1.8 1.8 1.8 1.8 1.8 1.8 1.8 2.6 2.6 2.6 2.6 2.6 2.6 2.6 2.6 2.6 2.6 2.6 2.6 + 2.6 3.7 3.7 3.0 1.8 2.9 2.9 2.2 1.8 2.9 2.9 2.2 2.6 3.7 3.7 3.0 2.6 3.7 3.7 3.0 2.6 3.7 3.7 3.0 + 3.7 3.7 3.7 3.7 2.9 2.9 2.9 2.9 2.9 2.9 2.9 2.9 3.7 3.7 3.7 3.7 3.7 3.7 3.7 3.7 3.7 3.7 3.7 3.7 + 3.7 3.7 3.7 3.7 2.9 2.9 2.9 2.9 2.9 2.9 2.9 2.9 3.7 3.7 3.7 3.7 3.7 3.7 3.7 3.7 3.7 3.7 3.7 3.7 + 2.6 3.7 2.6 3.7 1.8 2.9 1.8 2.9 1.8 2.9 1.8 2.9 2.6 3.7 2.6 3.7 2.6 3.7 2.6 3.7 2.6 3.7 2.6 3.7 + 3.0 3.0 3.0 3.0 2.2 2.2 2.2 2.2 2.2 2.2 2.2 2.2 3.0 3.0 3.0 3.0 3.0 3.0 3.0 3.0 3.0 3.0 3.0 3.0 + 3.7 3.7 2.6 3.7 2.9 2.9 1.8 2.9 2.9 2.9 1.8 2.9 3.7 3.7 2.6 3.7 3.7 3.7 2.6 3.7 3.7 3.7 2.6 3.7 + 3.7 3.7 3.7 3.7 2.9 2.9 2.9 2.9 2.9 2.9 2.9 2.9 3.7 3.7 3.7 3.7 3.7 3.7 3.7 3.7 3.7 3.7 3.7 3.7 + 2.6 2.6 2.6 2.6 1.8 2.9 1.8 2.9 1.8 1.8 1.8 1.8 2.6 3.7 2.6 3.7 2.6 2.6 2.6 2.6 2.6 3.7 2.6 3.7 + 3.7 3.7 3.7 3.0 2.9 2.9 2.9 2.2 2.9 2.9 2.9 2.2 3.7 3.7 3.7 3.0 3.7 3.7 3.7 3.0 3.7 3.7 3.7 3.0 + 3.7 3.7 2.6 3.7 2.9 2.9 1.8 2.9 2.9 2.9 1.8 2.9 3.7 3.7 2.6 3.7 3.7 3.7 2.6 3.7 3.7 3.7 2.6 3.7 + 3.7 3.7 3.7 3.7 2.9 2.9 2.9 2.9 2.9 2.9 2.9 2.9 3.7 3.7 3.7 3.7 3.7 3.7 3.7 3.7 3.7 3.7 3.7 3.7 + 2.6 3.7 2.6 3.7 1.8 3.7 1.8 3.7 1.8 3.7 1.8 3.7 2.6 3.7 2.6 3.7 2.6 3.7 2.6 3.7 2.6 3.7 2.6 3.7 + 3.7 3.7 3.7 3.0 2.9 2.9 2.9 2.2 2.9 2.9 2.9 2.2 3.7 3.7 3.7 3.0 3.7 3.7 3.7 3.0 3.7 3.7 3.7 3.0 + 2.6 2.6 2.6 2.6 1.8 1.8 1.8 1.8 1.8 1.8 1.8 1.8 2.6 2.6 2.6 2.6 2.6 2.6 2.6 2.6 2.6 2.6 2.6 2.6 + 2.6 3.7 3.7 3.7 1.8 2.9 2.9 2.9 1.8 2.9 2.9 2.9 2.6 3.7 3.7 3.7 2.6 3.7 3.7 3.7 2.6 3.7 3.7 3.7 + 2.6 2.6 2.6 2.6 1.8 1.8 1.8 1.8 1.8 1.8 1.8 1.8 2.6 2.6 2.6 2.6 2.6 2.6 2.6 2.6 2.6 2.6 2.6 2.6 + 2.6 3.7 3.7 3.0 1.8 2.9 2.9 2.2 1.8 2.9 2.9 2.2 2.6 3.7 3.7 3.0 2.6 3.7 3.7 3.0 2.6 3.7 3.7 3.0 + 3.7 3.7 2.6 3.7 2.9 2.9 1.8 2.9 2.9 2.9 1.8 2.9 3.7 3.7 2.6 3.7 3.7 3.7 2.6 3.7 3.7 3.7 2.6 3.7 + 3.7 3.7 3.7 3.7 2.9 2.9 2.9 2.9 2.9 2.9 2.9 2.9 3.7 3.7 3.7 3.7 3.7 3.7 3.7 3.7 3.7 3.7 3.7 3.7 + 2.6 3.7 2.6 3.7 1.8 2.9 1.8 2.9 1.8 2.9 1.8 2.9 2.6 3.7 2.6 3.7 2.6 3.7 2.6 3.7 2.6 3.7 2.6 3.7 + 3.0 3.0 3.0 3.0 2.2 2.2 2.2 2.2 2.2 2.2 2.2 2.2 3.0 3.0 3.0 3.0 3.0 3.0 3.0 3.0 3.0 3.0 3.0 3.0 diff --git a/parameters/int22.txt b/parameters/int22.txt new file mode 100644 index 0000000..4d66bb2 --- /dev/null +++ b/parameters/int22.txt @@ -0,0 +1,576 @@ + 2.8 2.3 1.7 2.3 2.8 2.8 2.8 2.8 1.8 2.3 1.2 2.3 2.8 2.5 2.8 2.5 + 2.6 2.2 1.6 2.2 2.6 2.6 2.6 2.6 1.7 2.2 1.1 2.2 2.6 2.3 2.6 1.8 + 2.2 1.8 1.2 1.8 2.2 2.8 2.2 2.8 1.3 1.8 2.0 1.8 2.2 2.5 2.2 1.4 + 2.6 2.2 1.6 2.2 2.6 2.6 2.6 2.6 1.7 2.2 1.1 2.2 2.6 2.3 2.6 1.8 + 2.5 2.1 1.5 2.1 2.5 2.5 2.5 2.5 1.6 2.1 1.0 2.1 2.5 2.2 2.5 1.7 + 2.6 2.1 2.1 2.1 2.6 2.6 2.6 2.6 2.2 2.1 1.0 2.1 2.6 2.3 2.6 1.7 + 2.5 2.1 1.5 2.1 2.5 2.5 2.5 2.5 1.6 2.1 1.0 2.1 2.5 2.2 2.5 1.7 + 2.6 2.1 2.1 2.1 2.6 2.6 2.6 2.6 2.2 2.1 1.0 2.1 2.6 2.3 2.6 1.7 + 1.5 1.1 0.5 1.1 1.5 2.1 1.5 2.1 0.6 1.1 1.3 1.1 1.5 1.8 1.5 0.7 + 2.6 2.2 1.6 2.2 2.6 2.6 2.6 2.6 1.7 2.2 1.1 2.2 2.6 2.3 2.6 1.8 + 1.0 0.6 1.3 0.6 1.0 1.0 1.0 1.0 1.4 0.6 2.1 0.6 1.0 0.7 1.0 1.5 + 2.6 2.2 1.6 2.2 2.6 2.6 2.6 2.6 1.7 2.2 1.1 2.2 2.6 2.3 2.6 1.8 + 2.5 2.1 1.5 2.1 2.5 2.5 2.5 2.5 1.6 2.1 1.0 2.1 2.5 2.2 2.5 1.7 + 2.6 2.1 2.1 2.1 2.6 2.6 2.6 2.6 2.2 2.1 1.0 2.1 2.6 2.3 2.6 1.7 + 2.5 2.1 1.5 2.1 2.5 2.5 2.5 2.5 1.6 2.1 1.0 2.1 2.5 2.2 2.5 1.7 + 2.3 1.2 0.6 1.2 1.7 1.7 1.7 1.7 0.7 1.2 1.4 1.2 1.7 1.4 1.7 0.8 + 2.1 1.9 0.1 1.9 1.8 1.9 1.8 1.9 0.7 1.9 0.5 1.9 1.8 1.9 1.8 1.7 + 2.0 1.7 0.0 1.7 1.7 1.7 1.7 1.7 0.6 1.7 0.3 1.7 1.7 1.8 1.7 1.0 + 1.6 1.3 -0.4 1.3 1.3 1.9 1.3 1.9 0.2 1.3 1.2 1.3 1.3 2.0 1.3 0.6 + 2.0 1.7 0.0 1.7 1.7 1.7 1.7 1.7 0.6 1.7 0.3 1.7 1.7 1.8 1.7 1.0 + 1.9 1.6 -0.1 1.6 1.6 1.6 1.6 1.6 0.5 1.6 0.2 1.6 1.6 1.7 1.6 0.9 + 1.9 1.7 0.5 1.7 1.6 1.7 1.6 1.7 1.1 1.7 0.3 1.7 1.6 1.7 1.6 0.9 + 1.9 1.6 -0.1 1.6 1.6 1.6 1.6 1.6 0.5 1.6 0.2 1.6 1.6 1.7 1.6 0.9 + 1.9 1.7 0.5 1.7 1.6 1.7 1.6 1.7 1.1 1.7 0.3 1.7 1.6 1.7 1.6 0.9 + 0.9 0.6 -1.1 0.6 0.6 1.2 0.6 1.2 -0.5 0.6 0.5 0.6 0.6 1.3 0.6 -0.1 + 2.0 1.7 0.0 1.7 1.7 1.7 1.7 1.7 0.6 1.7 0.3 1.7 1.7 1.8 1.7 1.0 + 0.4 0.1 -0.3 0.1 0.1 0.1 0.1 0.1 0.3 0.1 1.3 0.1 0.1 0.2 0.1 0.7 + 2.0 1.7 0.0 1.7 1.7 1.7 1.7 1.7 0.6 1.7 0.3 1.7 1.7 1.8 1.7 1.0 + 1.9 1.6 -0.1 1.6 1.6 1.6 1.6 1.6 0.5 1.6 0.2 1.6 1.6 1.7 1.6 0.9 + 1.9 1.7 0.5 1.7 1.6 1.7 1.6 1.7 1.1 1.7 0.3 1.7 1.6 1.7 1.6 0.9 + 1.9 1.6 -0.1 1.6 1.6 1.6 1.6 1.6 0.5 1.6 0.2 1.6 1.6 1.7 1.6 0.9 + 1.6 0.8 -1.0 0.8 0.7 0.8 0.7 0.8 -0.3 0.8 0.7 0.8 0.7 0.8 0.7 0.0 + 2.0 1.9 1.0 1.9 2.4 2.2 2.4 2.1 1.0 1.9 0.5 1.9 2.4 2.1 2.4 1.8 + 1.8 1.8 0.9 1.8 2.2 2.1 2.2 1.9 0.9 1.8 0.3 1.8 2.2 1.9 2.2 1.0 + 1.4 1.4 0.5 1.4 1.8 2.3 1.8 2.1 0.5 1.4 1.2 1.4 1.8 2.1 1.8 0.6 + 1.8 1.8 0.9 1.8 2.2 2.1 2.2 1.9 0.9 1.8 0.3 1.8 2.2 1.9 2.2 1.0 + 1.7 1.7 0.8 1.7 2.1 2.0 2.1 1.8 0.8 1.7 0.2 1.7 2.1 1.8 2.1 0.9 + 1.8 1.7 1.4 1.7 2.2 2.0 2.2 1.9 1.4 1.7 0.3 1.7 2.2 1.9 2.2 1.0 + 1.7 1.7 0.8 1.7 2.1 2.0 2.1 1.8 0.8 1.7 0.2 1.7 2.1 1.8 2.1 0.9 + 1.8 1.7 1.4 1.7 2.2 2.0 2.2 1.9 1.4 1.7 0.3 1.7 2.2 1.9 2.2 1.0 + 0.7 0.7 -0.2 0.7 1.1 1.6 1.1 1.4 -0.2 0.7 0.5 0.7 1.1 1.4 1.1 0.0 + 1.8 1.8 0.9 1.8 2.2 2.1 2.2 1.9 0.9 1.8 0.3 1.8 2.2 1.9 2.2 1.0 + 0.2 0.2 0.6 0.2 0.6 0.5 0.6 0.3 0.6 0.2 1.3 0.2 0.6 0.3 0.6 0.7 + 1.8 1.8 0.9 1.8 2.2 2.1 2.2 1.9 0.9 1.8 0.3 1.8 2.2 1.9 2.2 1.0 + 1.7 1.7 0.8 1.7 2.1 2.0 2.1 1.8 0.8 1.7 0.2 1.7 2.1 1.8 2.1 0.9 + 1.8 1.7 1.4 1.7 2.2 2.0 2.2 1.9 1.4 1.7 0.3 1.7 2.2 1.9 2.2 1.0 + 1.7 1.7 0.8 1.7 2.1 2.0 2.1 1.8 0.8 1.7 0.2 1.7 2.1 1.8 2.1 0.9 + 1.5 0.8 0.0 0.8 1.3 1.1 1.3 1.0 0.0 0.8 0.7 0.8 1.3 1.0 1.3 0.1 + 2.4 2.8 1.4 2.8 2.8 2.8 2.8 2.8 3.1 2.8 1.5 2.8 2.8 2.8 2.8 3.4 + 2.3 2.6 1.3 2.6 2.6 2.6 2.6 2.6 2.9 2.6 1.3 2.6 2.6 2.6 2.6 2.6 + 1.9 2.2 0.9 2.2 2.2 2.8 2.2 2.8 2.5 2.2 2.2 2.2 2.2 2.8 2.2 2.2 + 2.3 2.6 1.3 2.6 2.6 2.6 2.6 2.6 2.9 2.6 1.3 2.6 2.6 2.6 2.6 2.6 + 2.2 2.5 1.2 2.5 2.5 2.5 2.5 2.5 2.8 2.5 1.2 2.5 2.5 2.5 2.5 2.5 + 2.2 2.6 1.8 2.6 2.6 2.6 2.6 2.6 3.5 2.6 1.3 2.6 2.6 2.6 2.6 2.6 + 2.2 2.5 1.2 2.5 2.5 2.5 2.5 2.5 2.8 2.5 1.2 2.5 2.5 2.5 2.5 2.5 + 2.2 2.6 1.8 2.6 2.6 2.6 2.6 2.6 3.5 2.6 1.3 2.6 2.6 2.6 2.6 2.6 + 1.2 1.5 0.2 1.5 1.5 2.1 1.5 2.1 1.8 1.5 1.5 1.5 1.5 2.1 1.5 1.5 + 2.3 2.6 1.3 2.6 2.6 2.6 2.6 2.6 2.9 2.6 1.3 2.6 2.6 2.6 2.6 2.6 + 0.7 1.0 1.0 1.0 1.0 1.0 1.0 1.0 2.6 1.0 2.3 1.0 1.0 1.0 1.0 2.3 + 2.3 2.6 1.3 2.6 2.6 2.6 2.6 2.6 2.9 2.6 1.3 2.6 2.6 2.6 2.6 2.6 + 2.2 2.5 1.2 2.5 2.5 2.5 2.5 2.5 2.8 2.5 1.2 2.5 2.5 2.5 2.5 2.5 + 2.2 2.6 1.8 2.6 2.6 2.6 2.6 2.6 3.5 2.6 1.3 2.6 2.6 2.6 2.6 2.6 + 2.2 2.5 1.2 2.5 2.5 2.5 2.5 2.5 2.8 2.5 1.2 2.5 2.5 2.5 2.5 2.5 + 1.9 1.7 0.3 1.7 1.7 1.7 1.7 1.7 2.0 1.7 1.7 1.7 1.7 1.7 1.7 1.7 + 2.8 2.5 1.5 2.5 2.6 2.6 2.6 2.6 2.2 2.5 1.0 2.5 2.6 2.6 2.6 2.3 + 2.6 2.4 1.4 2.4 2.5 2.4 2.5 2.4 2.1 2.4 0.9 2.4 2.5 2.4 2.5 1.5 + 2.2 2.0 1.0 2.0 2.1 2.6 2.1 2.6 1.7 2.0 1.8 2.0 2.1 2.6 2.1 1.1 + 2.6 2.4 1.4 2.4 2.5 2.4 2.5 2.4 2.1 2.4 0.9 2.4 2.5 2.4 2.5 1.5 + 2.5 2.3 1.3 2.3 2.4 2.3 2.4 2.3 2.0 2.3 0.8 2.3 2.4 2.3 2.4 1.4 + 2.6 2.3 1.9 2.3 2.4 2.4 2.4 2.4 2.6 2.3 0.8 2.3 2.4 2.4 2.4 1.5 + 2.5 2.3 1.3 2.3 2.4 2.3 2.4 2.3 2.0 2.3 0.8 2.3 2.4 2.3 2.4 1.4 + 2.6 2.3 1.9 2.3 2.4 2.4 2.4 2.4 2.6 2.3 0.8 2.3 2.4 2.4 2.4 1.5 + 1.5 1.3 0.3 1.3 1.4 1.9 1.4 1.9 1.0 1.3 1.1 1.3 1.4 1.9 1.4 0.4 + 2.6 2.4 1.4 2.4 2.5 2.4 2.5 2.4 2.1 2.4 0.9 2.4 2.5 2.4 2.5 1.5 + 1.0 0.8 1.1 0.8 0.9 0.8 0.9 0.8 1.8 0.8 1.9 0.8 0.9 0.8 0.9 1.2 + 2.6 2.4 1.4 2.4 2.5 2.4 2.5 2.4 2.1 2.4 0.9 2.4 2.5 2.4 2.5 1.5 + 2.5 2.3 1.3 2.3 2.4 2.3 2.4 2.3 2.0 2.3 0.8 2.3 2.4 2.3 2.4 1.4 + 2.6 2.3 1.9 2.3 2.4 2.4 2.4 2.4 2.6 2.3 0.8 2.3 2.4 2.4 2.4 1.5 + 2.5 2.3 1.3 2.3 2.4 2.3 2.4 2.3 2.0 2.3 0.8 2.3 2.4 2.3 2.4 1.4 + 2.3 1.4 0.4 1.4 1.5 1.5 1.5 1.5 1.1 1.4 1.2 1.4 1.5 1.5 1.5 0.6 + 3.4 3.1 2.3 3.1 3.1 3.1 3.1 3.1 2.7 3.1 1.8 3.1 3.1 3.1 3.1 3.7 + 3.3 2.9 2.1 2.9 2.9 2.9 2.9 2.9 2.5 2.9 1.6 2.9 2.9 2.9 2.9 2.9 + 2.9 2.5 1.7 2.5 2.5 3.1 2.5 3.1 2.1 2.5 2.5 2.5 2.5 3.1 2.5 2.5 + 3.3 2.9 2.1 2.9 2.9 2.9 2.9 2.9 2.5 2.9 1.6 2.9 2.9 2.9 2.9 2.9 + 3.2 2.8 2.0 2.8 2.8 2.8 2.8 2.8 2.4 2.8 1.5 2.8 2.8 2.8 2.8 2.8 + 3.2 2.9 2.7 2.9 2.9 2.9 2.9 2.9 3.1 2.9 1.6 2.9 2.9 2.9 2.9 2.9 + 3.2 2.8 2.0 2.8 2.8 2.8 2.8 2.8 2.4 2.8 1.5 2.8 2.8 2.8 2.8 2.8 + 3.2 2.9 2.7 2.9 2.9 2.9 2.9 2.9 3.1 2.9 1.6 2.9 2.9 2.9 2.9 2.9 + 2.2 1.8 1.0 1.8 1.8 2.4 1.8 2.4 1.4 1.8 1.8 1.8 1.8 2.4 1.8 1.8 + 3.3 2.9 2.1 2.9 2.9 2.9 2.9 2.9 2.5 2.9 1.6 2.9 2.9 2.9 2.9 2.9 + 1.7 1.3 1.8 1.3 1.3 1.3 1.3 1.3 2.2 1.3 2.6 1.3 1.3 1.3 1.3 2.6 + 3.3 2.9 2.1 2.9 2.9 2.9 2.9 2.9 2.5 2.9 1.6 2.9 2.9 2.9 2.9 2.9 + 3.2 2.8 2.0 2.8 2.8 2.8 2.8 2.8 2.4 2.8 1.5 2.8 2.8 2.8 2.8 2.8 + 3.2 2.9 2.7 2.9 2.9 2.9 2.9 2.9 3.1 2.9 1.6 2.9 2.9 2.9 2.9 2.9 + 3.2 2.8 2.0 2.8 2.8 2.8 2.8 2.8 2.4 2.8 1.5 2.8 2.8 2.8 2.8 2.8 + 2.9 2.0 1.2 2.0 2.0 2.0 2.0 2.0 1.6 2.0 2.0 2.0 2.0 2.0 2.0 2.0 + 2.0 1.5 0.9 1.5 2.0 2.0 2.0 2.0 1.0 1.5 0.4 1.5 2.0 1.7 2.0 1.7 + 2.4 1.9 1.3 1.9 2.4 2.4 2.4 2.4 1.4 1.9 0.8 1.9 2.4 2.1 2.4 1.5 + 1.0 0.6 0.0 0.6 1.0 1.6 1.0 1.6 0.1 0.6 0.8 0.6 1.0 1.3 1.0 0.2 + 2.4 1.9 1.3 1.9 2.4 2.4 2.4 2.4 1.4 1.9 0.8 1.9 2.4 2.1 2.4 1.5 + 1.9 1.5 0.9 1.5 1.9 1.9 1.9 1.9 1.0 1.5 0.4 1.5 1.9 1.6 1.9 1.1 + 2.2 1.8 1.8 1.8 2.2 2.2 2.2 2.2 1.9 1.8 0.7 1.8 2.2 1.9 2.2 1.4 + 1.9 1.5 0.9 1.5 1.9 1.9 1.9 1.9 1.0 1.5 0.4 1.5 1.9 1.6 1.9 1.1 + 2.1 1.6 1.6 1.6 2.1 2.1 2.1 2.1 1.7 1.6 0.5 1.6 2.1 1.8 2.1 1.2 + 1.0 0.6 0.0 0.6 1.0 1.6 1.0 1.6 0.1 0.6 0.8 0.6 1.0 1.3 1.0 0.2 + 2.4 1.9 1.3 1.9 2.4 2.4 2.4 2.4 1.4 1.9 0.8 1.9 2.4 2.1 2.4 1.5 + 0.5 0.0 0.7 0.0 0.5 0.5 0.5 0.5 0.8 0.0 1.5 0.0 0.5 0.2 0.5 0.9 + 2.4 1.9 1.3 1.9 2.4 2.4 2.4 2.4 1.4 1.9 0.8 1.9 2.4 2.1 2.4 1.5 + 1.9 1.5 0.9 1.5 1.9 1.9 1.9 1.9 1.0 1.5 0.4 1.5 1.9 1.6 1.9 1.1 + 2.1 1.6 1.6 1.6 2.1 2.1 2.1 2.1 1.7 1.6 0.5 1.6 2.1 1.8 2.1 1.2 + 1.9 1.5 0.9 1.5 1.9 1.9 1.9 1.9 1.0 1.5 0.4 1.5 1.9 1.6 1.9 1.1 + 1.8 0.7 0.1 0.7 1.2 1.2 1.2 1.2 0.2 0.7 0.9 0.7 1.2 0.9 1.2 0.3 + 1.3 1.1 -0.3 1.1 1.0 1.1 1.0 1.1 0.4 1.1 -0.3 1.1 1.0 1.1 1.0 1.5 + 0.6 1.5 0.1 1.5 0.5 1.5 1.4 1.5 0.3 1.5 -0.3 1.5 1.4 1.5 1.4 0.0 + 0.0 -0.7 -1.6 0.1 -1.0 -0.6 0.1 0.7 -0.7 0.1 0.0 0.1 0.1 0.8 0.1 0.9 + 1.7 1.5 -0.3 1.5 1.4 1.5 1.4 1.5 0.3 1.5 0.1 1.5 1.4 1.5 1.4 0.7 + 1.3 1.0 -0.7 1.0 1.1 1.0 1.0 1.0 0.7 1.0 -0.4 1.0 1.0 1.1 1.0 -0.2 + 2.2 1.3 0.7 1.3 1.9 1.3 1.3 1.3 0.7 1.3 -0.1 1.3 1.3 1.4 1.3 -0.1 + 1.3 1.0 -0.7 1.0 1.0 1.0 1.0 1.0 -0.1 1.0 -0.4 1.0 1.0 1.1 1.0 0.3 + 1.4 1.2 0.0 1.2 1.1 1.2 1.1 1.7 0.6 1.2 0.2 1.2 1.1 1.2 1.1 0.2 + -0.2 -0.4 -1.7 0.1 0.7 0.7 0.1 0.7 -0.5 0.1 -0.3 0.1 0.1 0.8 0.1 0.9 + 1.7 1.5 -0.3 1.5 1.4 1.5 1.4 1.5 0.3 1.5 0.1 1.5 1.4 1.5 1.4 0.7 + -0.1 -0.4 -0.9 -0.4 -0.5 -0.4 -0.5 0.2 -0.3 -0.4 0.8 -0.4 -0.5 -0.5 -0.5 1.4 + 1.7 1.5 -0.3 1.5 1.4 1.5 1.4 1.5 0.3 1.5 0.1 1.5 1.4 1.5 1.4 0.7 + 1.3 1.0 -0.7 1.0 1.0 1.0 1.0 1.0 -0.1 1.0 -0.4 1.0 1.0 1.1 1.0 0.3 + 1.4 1.2 0.0 1.2 1.1 1.2 1.1 1.2 0.5 1.2 -0.6 1.2 1.1 1.2 1.1 0.4 + 1.3 1.0 -0.7 1.0 1.0 1.0 1.0 1.0 -0.1 1.0 -0.4 1.0 1.0 1.1 1.0 0.3 + 1.4 0.3 0.5 0.3 0.3 0.3 0.2 0.3 1.4 0.3 0.7 0.3 0.2 0.3 0.2 -0.6 + 1.2 1.1 0.2 1.1 1.6 1.4 1.6 1.3 0.2 1.1 -0.3 1.1 1.6 1.3 1.6 1.0 + 1.6 1.5 0.6 1.5 2.0 1.8 2.0 1.7 0.6 1.5 0.1 1.5 2.0 1.7 2.0 0.8 + 0.2 0.2 -0.7 0.2 0.6 1.1 0.6 0.9 -0.7 0.2 0.0 0.2 0.6 0.9 0.6 -0.5 + 1.6 1.5 0.6 1.5 2.0 1.8 2.0 1.7 0.6 1.5 0.1 1.5 2.0 1.7 2.0 0.8 + 1.1 1.1 0.2 1.1 1.5 1.4 1.5 1.2 0.2 1.1 -0.4 1.1 1.5 1.2 1.5 0.3 + 1.4 1.4 1.1 1.4 1.8 1.7 1.8 1.5 1.1 1.4 -0.1 1.4 1.8 1.5 1.8 0.6 + 1.1 1.1 0.2 1.1 1.5 1.4 1.5 1.2 0.2 1.1 -0.4 1.1 1.5 1.2 1.5 0.3 + 1.3 1.2 0.9 1.2 1.7 1.5 1.7 1.4 0.9 1.2 -0.2 1.2 1.7 1.4 1.7 0.5 + 0.2 0.2 -0.7 0.2 0.6 1.1 0.6 0.9 -0.7 0.2 0.0 0.2 0.6 0.9 0.6 -0.5 + 1.6 1.5 0.6 1.5 2.0 1.8 2.0 1.7 0.6 1.5 0.1 1.5 2.0 1.7 2.0 0.8 + -0.3 -0.4 0.0 -0.4 0.1 -0.1 0.1 -0.2 0.0 -0.4 0.8 -0.4 0.1 -0.2 0.1 0.2 + 1.6 1.5 0.6 1.5 2.0 1.8 2.0 1.7 0.6 1.5 0.1 1.5 2.0 1.7 2.0 0.8 + 1.1 1.1 0.2 1.1 1.5 1.4 1.5 1.2 0.2 1.1 -0.4 1.1 1.5 1.2 1.5 0.3 + 1.3 1.2 0.9 1.2 1.7 1.5 1.7 1.4 0.9 1.2 -0.2 1.2 1.7 1.4 1.7 0.5 + 1.1 1.1 0.2 1.1 1.5 1.4 1.5 1.2 0.2 1.1 -0.4 1.1 1.5 1.2 1.5 0.3 + 1.0 0.3 -0.5 0.3 0.8 0.6 0.8 0.5 -0.5 0.3 0.2 0.3 0.8 0.5 0.8 -0.4 + 1.6 2.0 0.6 2.0 2.0 2.0 2.0 2.0 2.3 2.0 0.7 2.0 2.0 2.0 2.0 2.6 + 2.0 2.4 1.0 2.4 2.4 2.4 2.4 2.4 2.7 2.4 1.1 2.4 2.4 2.4 2.4 2.4 + 0.7 1.0 -0.3 1.0 1.0 1.6 1.0 1.6 1.3 1.0 1.0 1.0 1.0 1.6 1.0 1.0 + 2.0 2.4 1.0 2.4 2.4 2.4 2.4 2.4 2.7 2.4 1.1 2.4 2.4 2.4 2.4 2.4 + 1.6 1.9 0.6 1.9 1.9 1.9 1.9 1.9 2.2 1.9 0.6 1.9 1.9 1.9 1.9 1.9 + 1.9 2.2 1.5 2.2 2.2 2.2 2.2 2.2 3.1 2.2 0.9 2.2 2.2 2.2 2.2 2.2 + 1.6 1.9 0.6 1.9 1.9 1.9 1.9 1.9 2.2 1.9 0.6 1.9 1.9 1.9 1.9 1.9 + 1.7 2.1 1.3 2.1 2.1 2.1 2.1 2.1 3.0 2.1 0.8 2.1 2.1 2.1 2.1 2.1 + 0.7 1.0 -0.3 1.0 1.0 1.6 1.0 1.6 1.3 1.0 1.0 1.0 1.0 1.6 1.0 1.0 + 2.0 2.4 1.0 2.4 2.4 2.4 2.4 2.4 2.7 2.4 1.1 2.4 2.4 2.4 2.4 2.4 + 0.1 0.5 0.4 0.5 0.5 0.5 0.5 0.5 2.1 0.5 1.8 0.5 0.5 0.5 0.5 1.8 + 2.0 2.4 1.0 2.4 2.4 2.4 2.4 2.4 2.7 2.4 1.1 2.4 2.4 2.4 2.4 2.4 + 1.6 1.9 0.6 1.9 1.9 1.9 1.9 1.9 2.2 1.9 0.6 1.9 1.9 1.9 1.9 1.9 + 1.7 2.1 1.3 2.1 2.1 2.1 2.1 2.1 3.0 2.1 0.8 2.1 2.1 2.1 2.1 2.1 + 1.6 1.9 0.6 1.9 1.9 1.9 1.9 1.9 2.2 1.9 0.6 1.9 1.9 1.9 1.9 1.9 + 1.4 1.2 -0.1 1.2 1.2 1.2 1.2 1.2 1.5 1.2 1.2 1.2 1.2 1.2 1.2 1.2 + 2.0 1.7 0.7 1.7 1.8 1.8 1.8 1.8 1.4 1.7 0.2 1.7 1.8 1.8 1.8 1.5 + 2.4 2.1 1.1 2.1 2.2 2.2 2.2 2.2 1.8 2.1 0.6 2.1 2.2 2.2 2.2 1.3 + 1.0 0.8 -0.2 0.8 0.9 1.4 0.9 1.4 0.5 0.8 0.6 0.8 0.9 1.4 0.9 0.0 + 2.4 2.1 1.1 2.1 2.2 2.2 2.2 2.2 1.8 2.1 0.6 2.1 2.2 2.2 2.2 1.3 + 1.9 1.7 0.7 1.7 1.8 1.7 1.8 1.7 1.4 1.7 0.2 1.7 1.8 1.7 1.8 0.8 + 2.2 2.0 1.6 2.0 2.1 2.0 2.1 2.0 2.3 2.0 0.5 2.0 2.1 2.0 2.1 1.1 + 1.9 1.7 0.7 1.7 1.8 1.7 1.8 1.7 1.4 1.7 0.2 1.7 1.8 1.7 1.8 0.8 + 2.1 1.8 1.4 1.8 1.9 1.9 1.9 1.9 2.1 1.8 0.3 1.8 1.9 1.9 1.9 1.0 + 1.0 0.8 -0.2 0.8 0.9 1.4 0.9 1.4 0.5 0.8 0.6 0.8 0.9 1.4 0.9 0.0 + 2.4 2.1 1.1 2.1 2.2 2.2 2.2 2.2 1.8 2.1 0.6 2.1 2.2 2.2 2.2 1.3 + 0.5 0.2 0.5 0.2 0.3 0.3 0.3 0.3 1.2 0.2 1.3 0.2 0.3 0.3 0.3 0.7 + 2.4 2.1 1.1 2.1 2.2 2.2 2.2 2.2 1.8 2.1 0.6 2.1 2.2 2.2 2.2 1.3 + 1.9 1.7 0.7 1.7 1.8 1.7 1.8 1.7 1.4 1.7 0.2 1.7 1.8 1.7 1.8 0.8 + 2.1 1.8 1.4 1.8 1.9 1.9 1.9 1.9 2.1 1.8 0.3 1.8 1.9 1.9 1.9 1.0 + 1.9 1.7 0.7 1.7 1.8 1.7 1.8 1.7 1.4 1.7 0.2 1.7 1.8 1.7 1.8 0.8 + 1.8 0.9 0.0 0.9 1.0 1.0 1.0 1.0 0.6 0.9 0.7 0.9 1.0 1.0 1.0 0.1 + 2.7 2.3 1.5 2.3 2.3 2.3 2.3 2.3 1.9 2.3 1.0 2.3 2.3 2.3 2.3 2.9 + 3.0 2.7 1.9 2.7 2.7 2.7 2.7 2.7 2.3 2.7 1.4 2.7 2.7 2.7 2.7 2.7 + 1.7 1.3 0.5 1.3 1.3 1.9 1.3 1.9 0.9 1.3 1.3 1.3 1.3 1.9 1.3 1.3 + 3.0 2.7 1.9 2.7 2.7 2.7 2.7 2.7 2.3 2.7 1.4 2.7 2.7 2.7 2.7 2.7 + 2.6 2.2 1.4 2.2 2.2 2.2 2.2 2.2 1.8 2.2 0.9 2.2 2.2 2.2 2.2 2.2 + 2.9 2.5 2.3 2.5 2.5 2.5 2.5 2.5 2.7 2.5 1.2 2.5 2.5 2.5 2.5 2.5 + 2.6 2.2 1.4 2.2 2.2 2.2 2.2 2.2 1.8 2.2 0.9 2.2 2.2 2.2 2.2 2.2 + 2.7 2.4 2.2 2.4 2.4 2.4 2.4 2.4 2.6 2.4 1.1 2.4 2.4 2.4 2.4 2.4 + 1.7 1.3 0.5 1.3 1.3 1.9 1.3 1.9 0.9 1.3 1.3 1.3 1.3 1.9 1.3 1.3 + 3.0 2.7 1.9 2.7 2.7 2.7 2.7 2.7 2.3 2.7 1.4 2.7 2.7 2.7 2.7 2.7 + 1.1 0.8 1.3 0.8 0.8 0.8 0.8 0.8 1.7 0.8 2.1 0.8 0.8 0.8 0.8 2.1 + 3.0 2.7 1.9 2.7 2.7 2.7 2.7 2.7 2.3 2.7 1.4 2.7 2.7 2.7 2.7 2.7 + 2.6 2.2 1.4 2.2 2.2 2.2 2.2 2.2 1.8 2.2 0.9 2.2 2.2 2.2 2.2 2.2 + 2.7 2.4 2.2 2.4 2.4 2.4 2.4 2.4 2.6 2.4 1.1 2.4 2.4 2.4 2.4 2.4 + 2.6 2.2 1.4 2.2 2.2 2.2 2.2 2.2 1.8 2.2 0.9 2.2 2.2 2.2 2.2 2.2 + 2.4 1.5 0.7 1.5 1.5 1.5 1.5 1.5 1.1 1.5 1.5 1.5 1.5 1.5 1.5 1.5 + 2.1 1.7 1.1 1.7 2.1 2.1 2.1 2.1 1.2 1.7 0.6 1.7 2.1 1.8 2.1 1.9 + 1.8 1.4 0.8 1.4 1.8 1.8 1.8 1.8 0.9 1.4 0.3 1.4 1.8 1.5 1.8 1.0 + 0.7 0.3 -0.3 0.3 0.7 1.3 0.7 1.3 -0.2 0.3 0.5 0.3 0.7 1.0 0.7 -0.1 + 1.8 1.4 0.8 1.4 1.8 1.8 1.8 1.8 0.9 1.4 0.3 1.4 1.8 1.5 1.8 1.0 + 1.9 1.4 0.8 1.4 1.9 1.9 1.9 1.9 0.9 1.4 0.3 1.4 1.9 1.6 1.9 1.0 + 1.9 1.4 1.4 1.4 1.9 1.9 1.9 1.9 1.5 1.4 0.3 1.4 1.9 1.6 1.9 1.0 + 1.9 1.4 0.8 1.4 1.9 1.9 1.9 1.9 0.9 1.4 0.3 1.4 1.9 1.6 1.9 1.0 + 1.9 1.5 1.5 1.5 1.9 1.9 1.9 1.9 1.6 1.5 0.4 1.5 1.9 1.6 1.9 1.1 + 0.1 -0.3 -0.9 -0.3 0.1 0.7 0.1 0.7 -0.8 -0.3 -0.1 -0.3 0.1 0.4 0.1 -0.7 + 1.8 1.4 0.8 1.4 1.8 1.8 1.8 1.8 0.9 1.4 0.3 1.4 1.8 1.5 1.8 1.0 + 0.5 0.0 0.7 0.0 0.5 0.5 0.5 0.5 0.8 0.0 1.5 0.0 0.5 0.2 0.5 0.9 + 1.8 1.4 0.8 1.4 1.8 1.8 1.8 1.8 0.9 1.4 0.3 1.4 1.8 1.5 1.8 1.0 + 1.9 1.4 0.8 1.4 1.9 1.9 1.9 1.9 0.9 1.4 0.3 1.4 1.9 1.6 1.9 1.0 + 1.9 1.4 1.4 1.4 1.9 1.9 1.9 1.9 1.5 1.4 0.3 1.4 1.9 1.6 1.9 1.0 + 1.9 1.4 0.8 1.4 1.9 1.9 1.9 1.9 0.9 1.4 0.3 1.4 1.9 1.6 1.9 1.0 + 1.7 0.7 0.1 0.7 1.1 1.1 1.1 1.1 0.2 0.7 0.9 0.7 1.1 0.8 1.1 0.3 + 1.5 1.2 -0.5 1.2 1.2 1.2 1.2 1.2 0.1 1.2 -0.2 1.2 1.2 1.3 1.2 1.1 + 1.2 0.9 -0.8 0.9 0.9 0.9 0.9 0.9 -0.2 0.9 -0.5 0.9 0.9 1.0 0.9 0.2 + 0.1 -0.1 -1.9 -0.1 -0.2 0.5 -0.2 0.5 -1.3 -0.1 -0.2 -0.1 -0.2 0.5 -0.2 -0.9 + 1.2 0.9 -0.8 0.9 0.9 0.9 0.9 0.9 -0.2 0.9 -0.5 0.9 0.9 1.0 0.9 0.2 + 1.2 1.0 -0.8 1.0 0.9 1.0 0.9 1.0 -0.1 1.0 -0.4 1.0 0.9 1.0 0.9 0.2 + 1.2 1.0 -0.2 1.0 0.9 1.0 0.9 1.0 0.5 1.0 -0.4 1.0 0.9 1.0 0.9 0.2 + 1.2 1.0 -0.8 1.0 0.9 1.0 0.9 1.0 -0.1 1.0 -0.4 1.0 0.9 1.0 0.9 0.2 + 1.3 1.0 -0.1 1.0 1.0 1.0 1.0 1.0 0.5 1.0 -0.4 1.0 1.0 1.1 1.0 0.3 + -0.5 -0.8 -2.6 -0.8 -0.8 -0.2 -0.8 -0.2 -1.9 -0.8 -0.9 -0.8 -0.8 -0.1 -0.8 -1.5 + 1.2 0.9 -0.8 0.9 0.9 0.9 0.9 0.9 -0.2 0.9 -0.5 0.9 0.9 1.0 0.9 0.2 + -0.2 -0.4 -0.9 -0.4 -0.5 -0.4 -0.5 -0.4 -0.2 -0.4 0.8 -0.4 -0.5 -0.4 -0.5 0.1 + 1.2 0.9 -0.8 0.9 0.9 0.9 0.9 0.9 -0.2 0.9 -0.5 0.9 0.9 1.0 0.9 0.2 + 1.2 1.0 -0.8 1.0 0.9 1.0 0.9 1.0 -0.1 1.0 -0.4 1.0 0.9 1.0 0.9 0.2 + 1.2 1.0 -0.2 1.0 0.9 1.0 0.9 1.0 0.5 1.0 -0.4 1.0 0.9 1.0 0.9 0.2 + 1.2 1.0 -0.8 1.0 0.9 1.0 0.9 1.0 -0.1 1.0 -0.4 1.0 0.9 1.0 0.9 0.2 + 1.1 0.2 -1.5 0.2 0.2 0.2 0.2 0.2 -0.9 0.2 0.1 0.2 0.2 0.3 0.2 -0.5 + 1.3 1.3 -0.2 1.3 0.6 2.2 1.7 1.4 0.0 1.3 -0.1 1.3 1.7 1.4 1.7 1.4 + 1.0 1.1 0.7 1.0 0.5 1.9 1.4 1.1 -1.0 1.0 -0.5 1.0 1.4 1.1 1.4 0.3 + 0.4 0.7 -0.5 -0.1 0.3 0.7 0.3 0.5 -0.7 -0.1 -0.3 -0.1 0.3 0.6 0.3 1.4 + 1.0 1.0 0.1 1.0 1.4 1.3 1.4 1.1 0.1 1.0 -0.5 1.0 1.4 1.1 1.4 0.2 + 1.1 1.0 -0.4 1.0 1.5 1.3 1.5 1.2 -0.7 1.0 -0.4 1.0 1.5 1.2 1.5 0.3 + 1.1 1.0 0.7 1.0 1.5 1.3 1.5 1.2 -0.6 1.0 -0.4 1.0 1.5 1.2 1.5 0.3 + 1.1 1.0 0.1 1.0 1.5 1.3 1.5 1.2 0.1 1.0 -0.4 1.0 1.5 1.2 1.5 0.3 + 1.1 1.1 0.8 1.1 1.5 1.4 1.5 1.2 0.8 1.1 -0.5 1.1 1.5 1.2 1.5 0.3 + -0.3 -0.7 -1.7 -0.7 0.1 0.7 -0.3 0.0 -1.6 -0.7 -0.9 -0.7 -0.3 0.0 -0.3 0.5 + 1.0 1.0 0.1 1.0 1.4 1.3 1.4 1.1 0.1 1.0 -0.5 1.0 1.4 1.1 1.4 0.2 + -0.3 -0.4 -0.3 -0.4 -0.3 -0.1 0.1 -0.6 0.0 -0.4 0.8 -0.4 0.1 0.2 0.1 0.7 + 1.0 1.0 0.1 1.0 1.4 1.3 1.4 1.1 0.1 1.0 -0.5 1.0 1.4 1.1 1.4 0.2 + 1.1 1.0 0.1 1.0 1.5 1.3 1.5 1.2 0.1 1.0 -0.4 1.0 1.5 1.2 1.5 0.3 + 1.1 1.0 0.7 1.0 1.5 1.3 1.5 1.2 0.7 1.0 0.2 1.0 1.5 1.7 1.5 0.3 + 1.1 1.0 0.1 1.0 1.5 1.3 1.5 1.2 0.1 1.0 -0.4 1.0 1.5 1.2 1.5 0.3 + 1.5 -0.2 0.9 0.3 0.0 -0.1 0.7 0.4 0.9 0.3 1.4 0.3 0.7 0.2 0.7 -0.6 + 1.9 2.1 0.8 2.1 2.1 2.1 2.1 2.1 2.4 2.1 0.8 2.1 2.1 2.1 2.1 2.7 + 1.5 1.8 0.5 1.8 1.8 1.8 1.8 1.8 2.1 1.8 0.5 1.8 1.8 1.8 1.8 1.8 + 0.4 0.7 -0.6 0.7 0.7 1.3 0.7 1.3 1.0 0.7 0.7 0.7 0.7 1.3 0.7 0.7 + 1.5 1.8 0.5 1.8 1.8 1.8 1.8 1.8 2.1 1.8 0.5 1.8 1.8 1.8 1.8 1.8 + 1.5 1.9 0.5 1.9 1.9 1.9 1.9 1.9 2.2 1.9 0.6 1.9 1.9 1.9 1.9 1.9 + 1.5 1.9 1.1 1.9 1.9 1.9 1.9 1.9 2.8 1.9 0.6 1.9 1.9 1.9 1.9 1.9 + 1.5 1.9 0.5 1.9 1.9 1.9 1.9 1.9 2.2 1.9 0.6 1.9 1.9 1.9 1.9 1.9 + 1.6 1.9 1.2 1.9 1.9 1.9 1.9 1.9 2.8 1.9 0.6 1.9 1.9 1.9 1.9 1.9 + -0.2 0.1 -1.2 0.1 0.1 0.7 0.1 0.7 0.4 0.1 0.1 0.1 0.1 0.7 0.1 0.1 + 1.5 1.8 0.5 1.8 1.8 1.8 1.8 1.8 2.1 1.8 0.5 1.8 1.8 1.8 1.8 1.8 + 0.1 0.5 0.4 0.5 0.5 0.5 0.5 0.5 2.1 0.5 1.8 0.5 0.5 0.5 0.5 1.8 + 1.5 1.8 0.5 1.8 1.8 1.8 1.8 1.8 2.1 1.8 0.5 1.8 1.8 1.8 1.8 1.8 + 1.5 1.9 0.5 1.9 1.9 1.9 1.9 1.9 2.2 1.9 0.6 1.9 1.9 1.9 1.9 1.9 + 1.5 1.9 1.1 1.9 1.9 1.9 1.9 1.9 2.8 1.9 0.6 1.9 1.9 1.9 1.9 1.9 + 1.5 1.9 0.5 1.9 1.9 1.9 1.9 1.9 2.2 1.9 0.6 1.9 1.9 1.9 1.9 1.9 + 1.4 1.1 -0.2 1.1 1.1 1.1 1.1 1.1 1.4 1.1 1.1 1.1 1.1 1.1 1.1 1.1 + 2.1 1.9 0.9 1.9 2.0 1.9 2.0 1.9 1.6 1.9 0.4 1.9 2.0 1.9 2.0 1.6 + 1.8 1.6 0.6 1.6 1.7 1.6 1.7 1.6 1.3 1.6 0.1 1.6 1.7 1.6 1.7 0.7 + 0.7 0.5 -0.5 0.5 0.6 1.1 0.6 1.1 0.2 0.5 0.3 0.5 0.6 1.1 0.6 -0.3 + 1.8 1.6 0.6 1.6 1.7 1.6 1.7 1.6 1.3 1.6 0.1 1.6 1.7 1.6 1.7 0.7 + 1.9 1.6 0.6 1.6 1.7 1.7 1.7 1.7 1.3 1.6 0.1 1.6 1.7 1.7 1.7 0.8 + 1.9 1.6 1.2 1.6 1.7 1.7 1.7 1.7 1.9 1.6 0.1 1.6 1.7 1.7 1.7 0.8 + 1.9 1.6 0.6 1.6 1.7 1.7 1.7 1.7 1.3 1.6 0.1 1.6 1.7 1.7 1.7 0.8 + 1.9 1.7 1.3 1.7 1.8 1.7 1.8 1.7 2.0 1.7 0.2 1.7 1.8 1.7 1.8 0.8 + 0.1 -0.1 -1.1 -0.1 0.0 0.5 0.0 0.5 -0.4 -0.1 -0.3 -0.1 0.0 0.5 0.0 -1.0 + 1.8 1.6 0.6 1.6 1.7 1.6 1.7 1.6 1.3 1.6 0.1 1.6 1.7 1.6 1.7 0.7 + 0.5 0.2 0.5 0.2 0.3 0.3 0.3 0.3 1.2 0.2 1.3 0.2 0.3 0.3 0.3 0.7 + 1.8 1.6 0.6 1.6 1.7 1.6 1.7 1.6 1.3 1.6 0.1 1.6 1.7 1.6 1.7 0.7 + 1.9 1.6 0.6 1.6 1.7 1.7 1.7 1.7 1.3 1.6 0.1 1.6 1.7 1.7 1.7 0.8 + 1.9 1.6 1.2 1.6 1.7 1.7 1.7 1.7 1.9 1.6 0.1 1.6 1.7 1.7 1.7 0.8 + 1.9 1.6 0.6 1.6 1.7 1.7 1.7 1.7 1.3 1.6 0.1 1.6 1.7 1.7 1.7 0.8 + 1.7 0.9 -0.1 0.9 1.0 0.9 1.0 0.9 0.6 0.9 0.7 0.9 1.0 0.9 1.0 0.0 + 2.8 2.4 1.6 2.4 2.4 2.4 2.4 2.4 2.0 2.4 1.1 2.4 2.4 2.4 2.4 3.0 + 2.5 2.1 1.3 2.1 2.1 2.1 2.1 2.1 1.7 2.1 0.8 2.1 2.1 2.1 2.1 2.1 + 1.4 1.0 0.2 1.0 1.0 1.6 1.0 1.6 0.6 1.0 1.0 1.0 1.0 1.6 1.0 1.0 + 2.5 2.1 1.3 2.1 2.1 2.1 2.1 2.1 1.7 2.1 0.8 2.1 2.1 2.1 2.1 2.1 + 2.5 2.2 1.4 2.2 2.2 2.2 2.2 2.2 1.8 2.2 0.9 2.2 2.2 2.2 2.2 2.2 + 2.5 2.2 2.0 2.2 2.2 2.2 2.2 2.2 2.4 2.2 0.9 2.2 2.2 2.2 2.2 2.2 + 2.5 2.2 1.4 2.2 2.2 2.2 2.2 2.2 1.8 2.2 0.9 2.2 2.2 2.2 2.2 2.2 + 2.6 2.2 2.0 2.2 2.2 2.2 2.2 2.2 2.4 2.2 0.9 2.2 2.2 2.2 2.2 2.2 + 0.7 0.4 -0.4 0.4 0.4 1.0 0.4 1.0 0.0 0.4 0.4 0.4 0.4 1.0 0.4 0.4 + 2.5 2.1 1.3 2.1 2.1 2.1 2.1 2.1 1.7 2.1 0.8 2.1 2.1 2.1 2.1 2.1 + 1.1 0.8 1.3 0.8 0.8 0.8 0.8 0.8 1.7 0.8 2.1 0.8 0.8 0.8 0.8 2.1 + 2.5 2.1 1.3 2.1 2.1 2.1 2.1 2.1 1.7 2.1 0.8 2.1 2.1 2.1 2.1 2.1 + 2.5 2.2 1.4 2.2 2.2 2.2 2.2 2.2 1.8 2.2 0.9 2.2 2.2 2.2 2.2 2.2 + 2.5 2.2 2.0 2.2 2.2 2.2 2.2 2.2 2.4 2.2 0.9 2.2 2.2 2.2 2.2 2.2 + 2.5 2.2 1.4 2.2 2.2 2.2 2.2 2.2 1.8 2.2 0.9 2.2 2.2 2.2 2.2 2.2 + 2.4 1.4 0.6 1.4 1.4 1.4 1.4 1.4 1.0 1.4 1.4 1.4 1.4 1.4 1.4 1.4 + 2.8 2.3 1.7 2.3 2.8 2.8 2.8 2.8 1.8 2.3 1.2 2.3 2.8 2.5 2.8 2.5 + 2.8 2.3 1.7 2.3 2.8 2.8 2.8 2.8 1.8 2.3 1.2 2.3 2.8 2.5 2.8 1.9 + 1.8 1.4 0.8 1.4 1.8 2.4 1.8 2.4 0.9 1.4 1.6 1.4 1.8 2.1 1.8 1.0 + 2.8 2.3 1.7 2.3 2.8 2.8 2.8 2.8 1.8 2.3 1.2 2.3 2.8 2.5 2.8 1.9 + 2.3 1.9 1.3 1.9 2.3 2.3 2.3 2.3 1.4 1.9 0.8 1.9 2.3 2.0 2.3 1.5 + 2.8 2.3 2.3 2.3 2.8 2.8 2.8 2.8 2.4 2.3 1.2 2.3 2.8 2.5 2.8 1.9 + 2.3 1.9 1.3 1.9 2.3 2.3 2.3 2.3 1.4 1.9 0.8 1.9 2.3 2.0 2.3 1.5 + 2.5 2.0 2.0 2.0 2.5 2.5 2.5 2.5 2.1 2.0 0.9 2.0 2.5 2.2 2.5 1.6 + 1.7 1.3 0.7 1.3 1.7 2.3 1.7 2.3 0.8 1.3 1.5 1.3 1.7 2.0 1.7 0.9 + 2.8 2.3 1.7 2.3 2.8 2.8 2.8 2.8 1.8 2.3 1.2 2.3 2.8 2.5 2.8 1.9 + 1.2 0.8 1.5 0.8 1.2 1.2 1.2 1.2 1.6 0.8 2.3 0.8 1.2 0.9 1.2 1.7 + 2.8 2.3 1.7 2.3 2.8 2.8 2.8 2.8 1.8 2.3 1.2 2.3 2.8 2.5 2.8 1.9 + 2.3 1.9 1.3 1.9 2.3 2.3 2.3 2.3 1.4 1.9 0.8 1.9 2.3 2.0 2.3 1.5 + 2.8 2.3 2.3 2.3 2.8 2.8 2.8 2.8 2.4 2.3 1.2 2.3 2.8 2.5 2.8 1.9 + 2.3 1.9 1.3 1.9 2.3 2.3 2.3 2.3 1.4 1.9 0.8 1.9 2.3 2.0 2.3 1.5 + 2.5 1.5 0.9 1.5 1.9 1.9 1.9 1.9 1.0 1.5 1.7 1.5 1.9 1.6 1.9 1.1 + 2.1 1.9 0.1 1.9 1.8 1.9 1.8 1.9 0.7 1.9 0.5 1.9 1.8 1.9 1.8 1.7 + 2.1 1.9 0.1 1.9 1.8 1.9 1.8 1.9 0.7 1.9 0.5 1.9 1.8 1.9 1.8 1.1 + 1.2 0.9 -0.8 0.9 0.9 1.5 0.9 1.5 -0.2 0.9 0.8 0.9 0.9 1.6 0.9 0.2 + 2.1 1.9 0.1 1.9 1.8 1.9 1.8 1.9 0.7 1.9 0.5 1.9 1.8 1.9 1.8 1.1 + 1.7 1.4 -0.3 1.4 1.4 1.4 1.4 1.4 0.3 1.4 0.0 1.4 1.4 1.5 1.4 0.7 + 2.1 1.9 0.7 1.9 1.8 1.9 1.8 1.9 1.3 1.9 0.5 1.9 1.8 1.9 1.8 1.1 + 1.7 1.4 -0.3 1.4 1.4 1.4 1.4 1.4 0.3 1.4 0.0 1.4 1.4 1.5 1.4 0.7 + 1.8 1.6 0.4 1.6 1.5 1.6 1.5 1.6 1.0 1.6 0.2 1.6 1.5 1.6 1.5 0.8 + 1.1 0.8 -0.9 0.8 0.8 1.4 0.8 1.4 -0.3 0.8 0.7 0.8 0.8 1.5 0.8 0.1 + 2.1 1.9 0.1 1.9 1.8 1.9 1.8 1.9 0.7 1.9 0.5 1.9 1.8 1.9 1.8 1.1 + 0.6 0.3 -0.1 0.3 0.3 0.3 0.3 0.3 0.5 0.3 1.5 0.3 0.3 0.4 0.3 0.9 + 2.1 1.9 0.1 1.9 1.8 1.9 1.8 1.9 0.7 1.9 0.5 1.9 1.8 1.9 1.8 1.1 + 1.7 1.4 -0.3 1.4 1.4 1.4 1.4 1.4 0.3 1.4 0.0 1.4 1.4 1.5 1.4 0.7 + 2.1 1.9 0.7 1.9 1.8 1.9 1.8 1.9 1.3 1.9 0.5 1.9 1.8 1.9 1.8 1.1 + 1.7 1.4 -0.3 1.4 1.4 1.4 1.4 1.4 0.3 1.4 0.0 1.4 1.4 1.5 1.4 0.7 + 1.9 1.0 -0.7 1.0 1.0 1.0 1.0 1.0 -0.1 1.0 0.9 1.0 1.0 1.1 1.0 0.3 + 2.0 1.9 1.0 1.9 2.4 2.2 2.4 2.1 1.0 1.9 0.5 1.9 2.4 2.1 2.4 1.8 + 2.0 1.9 1.0 1.9 2.4 2.2 2.4 2.1 1.0 1.9 0.5 1.9 2.4 2.1 2.4 1.2 + 1.0 1.0 0.1 1.0 1.4 1.9 1.4 1.7 0.1 1.0 0.8 1.0 1.4 1.7 1.4 0.2 + 2.0 1.9 1.0 1.9 2.4 2.2 2.4 2.1 1.0 1.9 0.5 1.9 2.4 2.1 2.4 1.2 + 1.5 1.5 0.6 1.5 1.9 1.8 1.9 1.6 0.6 1.5 0.0 1.5 1.9 1.6 1.9 0.7 + 2.0 1.9 1.6 1.9 2.4 2.2 2.4 2.1 1.6 1.9 0.5 1.9 2.4 2.1 2.4 1.2 + 1.5 1.5 0.6 1.5 1.9 1.8 1.9 1.6 0.6 1.5 0.0 1.5 1.9 1.6 1.9 0.7 + 1.7 1.6 1.3 1.6 2.1 1.9 2.1 1.8 1.3 1.6 0.2 1.6 2.1 1.8 2.1 0.9 + 0.9 0.9 0.0 0.9 1.3 1.8 1.3 1.6 0.0 0.9 0.7 0.9 1.3 1.6 1.3 0.1 + 2.0 1.9 1.0 1.9 2.4 2.2 2.4 2.1 1.0 1.9 0.5 1.9 2.4 2.1 2.4 1.2 + 0.4 0.4 0.8 0.4 0.8 0.7 0.8 0.5 0.8 0.4 1.5 0.4 0.8 0.5 0.8 0.9 + 2.0 1.9 1.0 1.9 2.4 2.2 2.4 2.1 1.0 1.9 0.5 1.9 2.4 2.1 2.4 1.2 + 1.5 1.5 0.6 1.5 1.9 1.8 1.9 1.6 0.6 1.5 0.0 1.5 1.9 1.6 1.9 0.7 + 2.0 1.9 1.6 1.9 2.4 2.2 2.4 2.1 1.6 1.9 0.5 1.9 2.4 2.1 2.4 1.2 + 1.5 1.5 0.6 1.5 1.9 1.8 1.9 1.6 0.6 1.5 0.0 1.5 1.9 1.6 1.9 0.7 + 1.7 1.1 0.2 1.1 1.5 1.4 1.5 1.2 0.2 1.1 0.9 1.1 1.5 1.2 1.5 0.3 + 2.4 2.8 1.4 2.8 2.8 2.8 2.8 2.8 3.1 2.8 1.5 2.8 2.8 2.8 2.8 3.4 + 2.4 2.8 1.4 2.8 2.8 2.8 2.8 2.8 3.1 2.8 1.5 2.8 2.8 2.8 2.8 2.8 + 1.5 1.8 0.5 1.8 1.8 2.4 1.8 2.4 2.1 1.8 1.8 1.8 1.8 2.4 1.8 1.8 + 2.4 2.8 1.4 2.8 2.8 2.8 2.8 2.8 3.1 2.8 1.5 2.8 2.8 2.8 2.8 2.8 + 2.0 2.3 1.0 2.3 2.3 2.3 2.3 2.3 2.6 2.3 1.0 2.3 2.3 2.3 2.3 2.3 + 2.4 2.8 2.0 2.8 2.8 2.8 2.8 2.8 3.7 2.8 1.5 2.8 2.8 2.8 2.8 2.8 + 2.0 2.3 1.0 2.3 2.3 2.3 2.3 2.3 2.6 2.3 1.0 2.3 2.3 2.3 2.3 2.3 + 2.1 2.5 1.7 2.5 2.5 2.5 2.5 2.5 3.4 2.5 1.2 2.5 2.5 2.5 2.5 2.5 + 1.4 1.7 0.4 1.7 1.7 2.3 1.7 2.3 2.0 1.7 1.7 1.7 1.7 2.3 1.7 1.7 + 2.4 2.8 1.4 2.8 2.8 2.8 2.8 2.8 3.1 2.8 1.5 2.8 2.8 2.8 2.8 2.8 + 0.9 1.2 1.2 1.2 1.2 1.2 1.2 1.2 2.8 1.2 2.5 1.2 1.2 1.2 1.2 2.5 + 2.4 2.8 1.4 2.8 2.8 2.8 2.8 2.8 3.1 2.8 1.5 2.8 2.8 2.8 2.8 2.8 + 2.0 2.3 1.0 2.3 2.3 2.3 2.3 2.3 2.6 2.3 1.0 2.3 2.3 2.3 2.3 2.3 + 2.4 2.8 2.0 2.8 2.8 2.8 2.8 2.8 3.7 2.8 1.5 2.8 2.8 2.8 2.8 2.8 + 2.0 2.3 1.0 2.3 2.3 2.3 2.3 2.3 2.6 2.3 1.0 2.3 2.3 2.3 2.3 2.3 + 2.2 1.9 0.6 1.9 1.9 1.9 1.9 1.9 2.2 1.9 1.9 1.9 1.9 1.9 1.9 1.9 + 2.8 2.5 1.5 2.5 2.6 2.6 2.6 2.6 2.2 2.5 1.0 2.5 2.6 2.6 2.6 2.3 + 2.8 2.5 1.5 2.5 2.6 2.6 2.6 2.6 2.2 2.5 1.0 2.5 2.6 2.6 2.6 1.7 + 1.8 1.6 0.6 1.6 1.7 2.2 1.7 2.2 1.3 1.6 1.4 1.6 1.7 2.2 1.7 0.7 + 2.8 2.5 1.5 2.5 2.6 2.6 2.6 2.6 2.2 2.5 1.0 2.5 2.6 2.6 2.6 1.7 + 2.3 2.1 1.1 2.1 2.2 2.1 2.2 2.1 1.8 2.1 0.6 2.1 2.2 2.1 2.2 1.2 + 2.8 2.5 2.1 2.5 2.6 2.6 2.6 2.6 2.8 2.5 1.0 2.5 2.6 2.6 2.6 1.7 + 2.3 2.1 1.1 2.1 2.2 2.1 2.2 2.1 1.8 2.1 0.6 2.1 2.2 2.1 2.2 1.2 + 2.5 2.2 1.8 2.2 2.3 2.3 2.3 2.3 2.5 2.2 0.7 2.2 2.3 2.3 2.3 1.4 + 1.7 1.5 0.5 1.5 1.6 2.1 1.6 2.1 1.2 1.5 1.3 1.5 1.6 2.1 1.6 0.6 + 2.8 2.5 1.5 2.5 2.6 2.6 2.6 2.6 2.2 2.5 1.0 2.5 2.6 2.6 2.6 1.7 + 1.2 1.0 1.3 1.0 1.1 1.0 1.1 1.0 2.0 1.0 2.1 1.0 1.1 1.0 1.1 1.4 + 2.8 2.5 1.5 2.5 2.6 2.6 2.6 2.6 2.2 2.5 1.0 2.5 2.6 2.6 2.6 1.7 + 2.3 2.1 1.1 2.1 2.2 2.1 2.2 2.1 1.8 2.1 0.6 2.1 2.2 2.1 2.2 1.2 + 2.8 2.5 2.1 2.5 2.6 2.6 2.6 2.6 2.8 2.5 1.0 2.5 2.6 2.6 2.6 1.7 + 2.3 2.1 1.1 2.1 2.2 2.1 2.2 2.1 1.8 2.1 0.6 2.1 2.2 2.1 2.2 1.2 + 2.5 1.7 0.7 1.7 1.8 1.7 1.8 1.7 1.4 1.7 1.5 1.7 1.8 1.7 1.8 0.8 + 3.4 3.1 2.3 3.1 3.1 3.1 3.1 3.1 2.7 3.1 1.8 3.1 3.1 3.1 3.1 3.7 + 3.4 3.1 2.3 3.1 3.1 3.1 3.1 3.1 2.7 3.1 1.8 3.1 3.1 3.1 3.1 3.1 + 2.5 2.1 1.3 2.1 2.1 2.7 2.1 2.7 1.7 2.1 2.1 2.1 2.1 2.7 2.1 2.1 + 3.4 3.1 2.3 3.1 3.1 3.1 3.1 3.1 2.7 3.1 1.8 3.1 3.1 3.1 3.1 3.1 + 3.0 2.6 1.8 2.6 2.6 2.6 2.6 2.6 2.2 2.6 1.3 2.6 2.6 2.6 2.6 2.6 + 3.4 3.1 2.9 3.1 3.1 3.1 3.1 3.1 3.3 3.1 1.8 3.1 3.1 3.1 3.1 3.1 + 3.0 2.6 1.8 2.6 2.6 2.6 2.6 2.6 2.2 2.6 1.3 2.6 2.6 2.6 2.6 2.6 + 3.1 2.8 2.6 2.8 2.8 2.8 2.8 2.8 3.0 2.8 1.5 2.8 2.8 2.8 2.8 2.8 + 2.4 2.0 1.2 2.0 2.0 2.6 2.0 2.6 1.6 2.0 2.0 2.0 2.0 2.6 2.0 2.0 + 3.4 3.1 2.3 3.1 3.1 3.1 3.1 3.1 2.7 3.1 1.8 3.1 3.1 3.1 3.1 3.1 + 1.9 1.5 2.0 1.5 1.5 1.5 1.5 1.5 2.4 1.5 2.8 1.5 1.5 1.5 1.5 2.8 + 3.4 3.1 2.3 3.1 3.1 3.1 3.1 3.1 2.7 3.1 1.8 3.1 3.1 3.1 3.1 3.1 + 3.0 2.6 1.8 2.6 2.6 2.6 2.6 2.6 2.2 2.6 1.3 2.6 2.6 2.6 2.6 2.6 + 3.4 3.1 2.9 3.1 3.1 3.1 3.1 3.1 3.3 3.1 1.8 3.1 3.1 3.1 3.1 3.1 + 3.0 2.6 1.8 2.6 2.6 2.6 2.6 2.6 2.2 2.6 1.3 2.6 2.6 2.6 2.6 2.6 + 3.2 2.2 1.4 2.2 2.2 2.2 2.2 2.2 1.8 2.2 2.2 2.2 2.2 2.2 2.2 2.2 + 3.4 3.0 2.4 3.0 3.4 3.4 3.4 3.4 2.5 3.0 1.9 3.0 3.4 3.1 3.4 3.2 + 3.1 2.6 2.0 2.6 3.1 3.1 3.1 3.1 2.1 2.6 1.5 2.6 3.1 2.8 3.1 2.2 + 2.7 2.2 1.6 2.2 2.7 3.3 2.7 3.3 1.7 2.2 2.4 2.2 2.7 3.0 2.7 1.8 + 3.1 2.6 2.0 2.6 3.1 3.1 3.1 3.1 2.1 2.6 1.5 2.6 3.1 2.8 3.1 2.2 + 3.1 2.6 2.0 2.6 3.1 3.1 3.1 3.1 2.1 2.6 1.5 2.6 3.1 2.8 3.1 2.2 + 3.1 2.6 2.6 2.6 3.1 3.1 3.1 3.1 2.7 2.6 1.5 2.6 3.1 2.8 3.1 2.2 + 3.1 2.6 2.0 2.6 3.1 3.1 3.1 3.1 2.1 2.6 1.5 2.6 3.1 2.8 3.1 2.2 + 3.1 2.6 2.6 2.6 3.1 3.1 3.1 3.1 2.7 2.6 1.5 2.6 3.1 2.8 3.1 2.2 + 2.3 1.8 1.2 1.8 2.3 2.9 2.3 2.9 1.3 1.8 2.0 1.8 2.3 2.6 2.3 1.4 + 3.1 2.6 2.0 2.6 3.1 3.1 3.1 3.1 2.1 2.6 1.5 2.6 3.1 2.8 3.1 2.2 + 1.8 1.3 2.0 1.3 1.8 1.8 1.8 1.8 2.1 1.3 2.8 1.3 1.8 1.5 1.8 2.2 + 3.1 2.6 2.0 2.6 3.1 3.1 3.1 3.1 2.1 2.6 1.5 2.6 3.1 2.8 3.1 2.2 + 3.1 2.6 2.0 2.6 3.1 3.1 3.1 3.1 2.1 2.6 1.5 2.6 3.1 2.8 3.1 2.2 + 3.1 2.6 2.6 2.6 3.1 3.1 3.1 3.1 2.7 2.6 1.5 2.6 3.1 2.8 3.1 2.2 + 3.1 2.6 2.0 2.6 3.1 3.1 3.1 3.1 2.1 2.6 1.5 2.6 3.1 2.8 3.1 2.2 + 3.7 2.6 2.0 2.6 3.1 3.1 3.1 3.1 2.1 2.6 2.8 2.6 3.1 2.8 3.1 2.2 + 2.8 2.5 0.7 2.5 2.5 2.5 2.5 2.5 1.4 2.5 1.1 2.5 2.5 2.6 2.5 2.4 + 2.4 2.2 0.4 2.2 2.1 2.2 2.1 2.2 1.0 2.2 0.8 2.2 2.1 2.2 2.1 1.4 + 2.0 1.8 0.0 1.8 1.7 2.4 1.7 2.4 0.6 1.8 1.7 1.8 1.7 2.4 1.7 1.0 + 2.4 2.2 0.4 2.2 2.1 2.2 2.1 2.2 1.0 2.2 0.8 2.2 2.1 2.2 2.1 1.4 + 2.4 2.2 0.4 2.2 2.1 2.2 2.1 2.2 1.0 2.2 0.8 2.2 2.1 2.2 2.1 1.4 + 2.4 2.2 1.0 2.2 2.1 2.2 2.1 2.2 1.6 2.2 0.8 2.2 2.1 2.2 2.1 1.4 + 2.4 2.2 0.4 2.2 2.1 2.2 2.1 2.2 1.0 2.2 0.8 2.2 2.1 2.2 2.1 1.4 + 2.4 2.2 1.0 2.2 2.1 2.2 2.1 2.2 1.6 2.2 0.8 2.2 2.1 2.2 2.1 1.4 + 1.6 1.4 -0.4 1.4 1.3 2.0 1.3 2.0 0.2 1.4 1.3 1.4 1.3 2.0 1.3 0.6 + 2.4 2.2 0.4 2.2 2.1 2.2 2.1 2.2 1.0 2.2 0.8 2.2 2.1 2.2 2.1 1.4 + 1.1 0.9 0.4 0.9 0.8 0.9 0.8 0.9 1.0 0.9 2.1 0.9 0.8 0.9 0.8 1.4 + 2.4 2.2 0.4 2.2 2.1 2.2 2.1 2.2 1.0 2.2 0.8 2.2 2.1 2.2 2.1 1.4 + 2.4 2.2 0.4 2.2 2.1 2.2 2.1 2.2 1.0 2.2 0.8 2.2 2.1 2.2 2.1 1.4 + 2.4 2.2 1.0 2.2 2.1 2.2 2.1 2.2 1.6 2.2 0.8 2.2 2.1 2.2 2.1 1.4 + 2.4 2.2 0.4 2.2 2.1 2.2 2.1 2.2 1.0 2.2 0.8 2.2 2.1 2.2 2.1 1.4 + 3.0 2.2 0.4 2.2 2.1 2.2 2.1 2.2 1.0 2.2 2.1 2.2 2.1 2.2 2.1 1.4 + 2.7 2.6 1.7 2.6 3.0 2.9 3.0 2.7 1.7 2.6 1.1 2.6 3.0 2.7 3.0 2.4 + 2.3 2.2 1.3 2.2 2.7 2.5 2.7 2.4 1.3 2.2 0.8 2.2 2.7 2.4 2.7 1.5 + 1.9 1.8 0.9 1.8 2.3 2.7 2.3 2.6 0.9 1.8 1.7 1.8 2.3 2.6 2.3 1.1 + 2.3 2.2 1.3 2.2 2.7 2.5 2.7 2.4 1.3 2.2 0.8 2.2 2.7 2.4 2.7 1.5 + 2.3 2.2 1.3 2.2 2.7 2.5 2.7 2.4 1.3 2.2 0.8 2.2 2.7 2.4 2.7 1.5 + 2.3 2.2 1.9 2.2 2.7 2.5 2.7 2.4 1.9 2.2 0.8 2.2 2.7 2.4 2.7 1.5 + 2.3 2.2 1.3 2.2 2.7 2.5 2.7 2.4 1.3 2.2 0.8 2.2 2.7 2.4 2.7 1.5 + 2.3 2.2 1.9 2.2 2.7 2.5 2.7 2.4 1.9 2.2 0.8 2.2 2.7 2.4 2.7 1.5 + 1.5 1.4 0.5 1.4 1.9 2.3 1.9 2.2 0.5 1.4 1.3 1.4 1.9 2.2 1.9 0.7 + 2.3 2.2 1.3 2.2 2.7 2.5 2.7 2.4 1.3 2.2 0.8 2.2 2.7 2.4 2.7 1.5 + 1.0 0.9 1.3 0.9 1.4 1.2 1.4 1.1 1.3 0.9 2.1 0.9 1.4 1.1 1.4 1.5 + 2.3 2.2 1.3 2.2 2.7 2.5 2.7 2.4 1.3 2.2 0.8 2.2 2.7 2.4 2.7 1.5 + 2.3 2.2 1.3 2.2 2.7 2.5 2.7 2.4 1.3 2.2 0.8 2.2 2.7 2.4 2.7 1.5 + 2.3 2.2 1.9 2.2 2.7 2.5 2.7 2.4 1.9 2.2 0.8 2.2 2.7 2.4 2.7 1.5 + 2.3 2.2 1.3 2.2 2.7 2.5 2.7 2.4 1.3 2.2 0.8 2.2 2.7 2.4 2.7 1.5 + 2.9 2.2 1.3 2.2 2.7 2.5 2.7 2.4 1.3 2.2 2.1 2.2 2.7 2.4 2.7 1.5 + 3.6 3.4 2.2 3.4 3.4 3.4 3.4 3.4 3.7 3.4 2.1 3.4 3.4 3.4 3.4 4.0 + 2.7 3.1 1.7 3.1 3.1 3.1 3.1 3.1 3.4 3.1 1.8 3.1 3.1 3.1 3.1 3.1 + 3.6 2.7 1.3 2.7 2.7 3.3 2.7 3.3 3.0 2.7 2.7 2.7 2.7 3.3 2.7 2.7 + 2.7 3.1 1.7 3.1 3.1 3.1 3.1 3.1 3.4 3.1 1.8 3.1 3.1 3.1 3.1 3.1 + 2.7 3.1 1.7 3.1 3.1 3.1 3.1 3.1 3.4 3.1 1.8 3.1 3.1 3.1 3.1 3.1 + 2.7 3.1 2.3 3.1 3.1 3.1 3.1 3.1 4.0 3.1 1.8 3.1 3.1 3.1 3.1 3.1 + 2.7 3.1 1.7 3.1 3.1 3.1 3.1 3.1 3.4 3.1 1.8 3.1 3.1 3.1 3.1 3.1 + 2.7 3.1 2.3 3.1 3.1 3.1 3.1 3.1 4.0 3.1 1.8 3.1 3.1 3.1 3.1 3.1 + 1.9 2.3 0.2 2.3 2.3 2.9 2.3 2.9 2.6 2.3 2.3 2.3 2.3 2.9 2.3 2.3 + 2.7 3.1 1.7 3.1 3.1 3.1 3.1 3.1 3.4 3.1 1.8 3.1 3.1 3.1 3.1 3.1 + 1.4 1.8 1.7 1.8 1.8 1.8 1.8 1.8 3.4 1.8 3.1 1.8 1.8 1.8 1.8 3.1 + 2.7 3.1 1.7 3.1 3.1 3.1 3.1 3.1 3.4 3.1 1.8 3.1 3.1 3.1 3.1 3.1 + 2.7 3.1 1.7 3.1 3.1 3.1 3.1 3.1 3.4 3.1 1.8 3.1 3.1 3.1 3.1 3.1 + 2.7 3.1 2.3 3.1 3.1 3.1 3.1 3.1 4.0 3.1 1.8 3.1 3.1 3.1 3.1 3.1 + 2.7 3.1 1.7 3.1 3.1 3.1 3.1 3.1 3.4 3.1 1.8 3.1 3.1 3.1 3.1 3.1 + 3.3 3.1 1.7 3.1 3.1 3.1 3.1 3.1 3.4 3.1 3.1 3.1 3.1 3.1 3.1 3.1 + 3.4 3.2 2.2 3.2 3.3 3.2 3.3 3.2 2.9 3.2 1.7 3.2 3.3 3.2 3.3 2.9 + 3.1 2.8 1.8 2.8 2.9 2.9 2.9 2.9 2.5 2.8 1.3 2.8 2.9 2.9 2.9 2.0 + 2.7 2.4 1.4 2.4 2.5 3.1 2.5 3.1 2.1 2.4 2.2 2.4 2.5 3.1 2.5 1.6 + 3.1 2.8 1.8 2.8 2.9 2.9 2.9 2.9 2.5 2.8 1.3 2.8 2.9 2.9 2.9 2.0 + 3.1 2.8 1.8 2.8 2.9 2.9 2.9 2.9 2.5 2.8 1.3 2.8 2.9 2.9 2.9 2.0 + 3.1 2.8 2.4 2.8 2.9 2.9 2.9 2.9 3.1 2.8 1.3 2.8 2.9 2.9 2.9 2.0 + 3.1 2.8 1.8 2.8 2.9 2.9 2.9 2.9 2.5 2.8 1.3 2.8 2.9 2.9 2.9 2.0 + 3.1 2.8 2.4 2.8 2.9 2.9 2.9 2.9 3.1 2.8 1.3 2.8 2.9 2.9 2.9 2.0 + 2.3 2.0 1.0 2.0 2.1 2.7 2.1 2.7 1.7 2.0 1.8 2.0 2.1 2.7 2.1 1.2 + 3.1 2.8 1.8 2.8 2.9 2.9 2.9 2.9 2.5 2.8 1.3 2.8 2.9 2.9 2.9 2.0 + 1.8 1.5 1.8 1.5 1.6 1.6 1.6 1.6 2.5 1.5 2.6 1.5 1.6 1.6 1.6 2.0 + 3.1 2.8 1.8 2.8 2.9 2.9 2.9 2.9 2.5 2.8 1.3 2.8 2.9 2.9 2.9 2.0 + 3.1 2.8 1.8 2.8 2.9 2.9 2.9 2.9 2.5 2.8 1.3 2.8 2.9 2.9 2.9 2.0 + 3.1 2.8 2.4 2.8 2.9 2.9 2.9 2.9 3.1 2.8 1.3 2.8 2.9 2.9 2.9 2.0 + 3.1 2.8 1.8 2.8 2.9 2.9 2.9 2.9 2.5 2.8 1.3 2.8 2.9 2.9 2.9 2.0 + 3.7 2.8 1.8 2.8 2.9 2.9 2.9 2.9 2.5 2.8 2.6 2.8 2.9 2.9 2.9 2.0 + 4.1 3.7 2.9 3.7 3.7 3.7 3.7 3.7 3.3 3.7 2.4 3.7 3.7 3.7 3.7 4.3 + 3.7 3.4 2.6 3.4 3.4 3.4 3.4 3.4 3.0 3.4 2.1 3.4 3.4 3.4 3.4 3.4 + 3.3 3.0 2.2 3.0 3.0 3.6 3.0 3.6 2.6 3.0 3.0 3.0 3.0 3.6 3.0 3.0 + 3.7 3.4 2.6 3.4 3.4 3.4 3.4 3.4 3.0 3.4 2.1 3.4 3.4 3.4 3.4 3.4 + 3.7 3.4 2.6 3.4 3.4 3.4 3.4 3.4 3.0 3.4 2.1 3.4 3.4 3.4 3.4 3.4 + 3.7 3.4 3.2 3.4 3.4 3.4 3.4 3.4 3.6 3.4 2.1 3.4 3.4 3.4 3.4 3.4 + 3.7 3.4 2.6 3.4 3.4 3.4 3.4 3.4 3.0 3.4 2.1 3.4 3.4 3.4 3.4 3.4 + 3.7 3.4 3.2 3.4 3.4 3.4 3.4 3.4 3.6 3.4 2.1 3.4 3.4 3.4 3.4 3.4 + 2.9 2.6 1.8 2.6 2.6 3.2 2.6 3.2 2.2 2.6 2.6 2.6 2.6 3.2 2.6 2.6 + 3.7 3.4 2.6 3.4 3.4 3.4 3.4 3.4 3.0 3.4 2.1 3.4 3.4 3.4 3.4 3.4 + 2.4 2.1 2.6 2.1 2.1 2.1 2.1 2.1 3.0 2.1 3.4 2.1 2.1 2.1 2.1 3.4 + 3.7 3.4 2.6 3.4 3.4 3.4 3.4 3.4 3.0 3.4 2.1 3.4 3.4 3.4 3.4 3.4 + 3.7 3.4 2.6 3.4 3.4 3.4 3.4 3.4 3.0 3.4 2.1 3.4 3.4 3.4 3.4 3.4 + 3.7 3.4 3.2 3.4 3.4 3.4 3.4 3.4 3.6 3.4 2.1 3.4 3.4 3.4 3.4 3.4 + 3.7 3.4 2.6 3.4 3.4 3.4 3.4 3.4 3.0 3.4 2.1 3.4 3.4 3.4 3.4 3.4 + 4.3 3.4 2.6 3.4 3.4 3.4 3.4 3.4 3.0 3.4 3.4 3.4 3.4 3.4 3.4 3.4 + 2.4 2.0 1.4 2.0 2.4 2.4 2.4 2.4 1.5 2.0 0.9 2.0 2.4 2.1 2.4 2.2 + 2.8 2.3 1.7 2.3 2.8 2.8 2.8 2.8 1.8 2.3 1.2 2.3 2.8 2.5 2.8 1.9 + 3.1 2.6 2.0 2.6 3.1 3.7 3.1 3.7 2.1 2.6 2.8 2.6 3.1 3.4 3.1 2.2 + 2.8 2.3 1.7 2.3 2.8 2.8 2.8 2.8 1.8 2.3 1.2 2.3 2.8 2.5 2.8 1.9 + 2.8 2.3 1.7 2.3 2.8 2.8 2.8 2.8 1.8 2.3 1.2 2.3 2.8 2.5 2.8 1.9 + 2.8 2.3 2.3 2.3 2.8 2.8 2.8 2.8 2.4 2.3 1.2 2.3 2.8 2.5 2.8 1.9 + 2.8 2.3 1.7 2.3 2.8 2.8 2.8 2.8 1.8 2.3 1.2 2.3 2.8 2.5 2.8 1.9 + 2.8 2.3 2.3 2.3 2.8 2.8 2.8 2.8 2.4 2.3 1.2 2.3 2.8 2.5 2.8 1.9 + 1.4 1.0 0.4 1.0 1.4 2.0 1.4 2.0 0.5 1.0 1.2 1.0 1.4 1.7 1.4 0.6 + 2.8 2.3 1.7 2.3 2.8 2.8 2.8 2.8 1.8 2.3 1.2 2.3 2.8 2.5 2.8 1.9 + 1.5 1.0 1.7 1.0 1.5 1.5 1.5 1.5 1.8 1.0 2.5 1.0 1.5 1.2 1.5 1.9 + 2.8 2.3 1.7 2.3 2.8 2.8 2.8 2.8 1.8 2.3 1.2 2.3 2.8 2.5 2.8 1.9 + 2.8 2.3 1.7 2.3 2.8 2.8 2.8 2.8 1.8 2.3 1.2 2.3 2.8 2.5 2.8 1.9 + 2.8 2.3 2.3 2.3 2.8 2.8 2.8 2.8 2.4 2.3 1.2 2.3 2.8 2.5 2.8 1.9 + 2.8 2.3 1.7 2.3 2.8 2.8 2.8 2.8 1.8 2.3 1.2 2.3 2.8 2.5 2.8 1.9 + 3.4 2.3 1.7 2.3 2.8 2.8 2.8 2.8 1.8 2.3 2.5 2.3 2.8 2.5 2.8 1.9 + 1.9 1.5 -0.2 1.5 1.5 1.5 1.5 1.5 0.4 1.5 0.1 1.5 1.5 1.6 1.5 1.4 + 2.1 1.9 0.1 1.9 1.8 1.9 1.8 1.9 0.7 1.9 0.5 1.9 1.8 1.9 1.8 1.1 + 2.4 2.2 0.4 2.2 2.1 2.8 2.1 2.8 1.0 2.2 2.1 2.2 2.1 2.8 2.1 1.4 + 2.1 1.9 0.1 1.9 1.8 1.9 1.8 1.9 0.7 1.9 0.5 1.9 1.8 1.9 1.8 1.1 + 2.1 1.9 0.1 1.9 1.8 1.9 1.8 1.9 0.7 1.9 0.5 1.9 1.8 1.9 1.8 1.1 + 2.1 1.9 0.7 1.9 1.8 1.9 1.8 1.9 1.3 1.9 0.5 1.9 1.8 1.9 1.8 1.1 + 2.1 1.9 0.1 1.9 1.8 1.9 1.8 1.9 0.7 1.9 0.5 1.9 1.8 1.9 1.8 1.1 + 2.1 1.9 0.7 1.9 1.8 1.9 1.8 1.9 1.3 1.9 0.5 1.9 1.8 1.9 1.8 1.1 + 0.8 0.5 -1.2 0.5 0.5 1.1 0.5 1.1 -0.6 0.5 0.4 0.5 0.5 1.2 0.5 -0.2 + 2.1 1.9 0.1 1.9 1.8 1.9 1.8 1.9 0.7 1.9 0.5 1.9 1.8 1.9 1.8 1.1 + 0.8 0.6 0.1 0.6 0.5 0.6 0.5 0.6 0.7 0.6 1.8 0.6 0.5 0.6 0.5 1.1 + 2.1 1.9 0.1 1.9 1.8 1.9 1.8 1.9 0.7 1.9 0.5 1.9 1.8 1.9 1.8 1.1 + 2.1 1.9 0.1 1.9 1.8 1.9 1.8 1.9 0.7 1.9 0.5 1.9 1.8 1.9 1.8 1.1 + 2.1 1.9 0.7 1.9 1.8 1.9 1.8 1.9 1.3 1.9 0.5 1.9 1.8 1.9 1.8 1.1 + 2.1 1.9 0.1 1.9 1.8 1.9 1.8 1.9 0.7 1.9 0.5 1.9 1.8 1.9 1.8 1.1 + 2.7 1.9 0.1 1.9 1.8 1.9 1.8 1.9 0.7 1.9 1.8 1.9 1.8 1.9 1.8 1.1 + 1.6 1.6 0.7 1.6 2.0 1.9 2.0 1.7 0.7 1.6 0.1 1.6 2.0 1.7 2.0 1.4 + 2.0 1.9 1.0 1.9 2.4 2.2 2.4 2.1 1.0 1.9 0.5 1.9 2.4 2.1 2.4 1.2 + 2.3 2.2 1.3 2.2 2.7 3.1 2.7 3.0 1.3 2.2 2.1 2.2 2.7 3.0 2.7 1.5 + 2.0 1.9 1.0 1.9 2.4 2.2 2.4 2.1 1.0 1.9 0.5 1.9 2.4 2.1 2.4 1.2 + 2.0 1.9 1.0 1.9 2.4 2.2 2.4 2.1 1.0 1.9 0.5 1.9 2.4 2.1 2.4 1.2 + 2.0 1.9 1.6 1.9 2.4 2.2 2.4 2.1 1.6 1.9 0.5 1.9 2.4 2.1 2.4 1.2 + 2.0 1.9 1.0 1.9 2.4 2.2 2.4 2.1 1.0 1.9 0.5 1.9 2.4 2.1 2.4 1.2 + 2.0 1.9 1.6 1.9 2.4 2.2 2.4 2.1 1.6 1.9 0.5 1.9 2.4 2.1 2.4 1.2 + 0.6 0.6 -0.3 0.6 1.0 1.5 1.0 1.3 -0.3 0.6 0.4 0.6 1.0 1.3 1.0 -0.1 + 2.0 1.9 1.0 1.9 2.4 2.2 2.4 2.1 1.0 1.9 0.5 1.9 2.4 2.1 2.4 1.2 + 0.7 0.6 1.0 0.6 1.1 0.9 1.1 0.8 1.0 0.6 1.8 0.6 1.1 0.8 1.1 1.2 + 2.0 1.9 1.0 1.9 2.4 2.2 2.4 2.1 1.0 1.9 0.5 1.9 2.4 2.1 2.4 1.2 + 2.0 1.9 1.0 1.9 2.4 2.2 2.4 2.1 1.0 1.9 0.5 1.9 2.4 2.1 2.4 1.2 + 2.0 1.9 1.6 1.9 2.4 2.2 2.4 2.1 1.6 1.9 0.5 1.9 2.4 2.1 2.4 1.2 + 2.0 1.9 1.0 1.9 2.4 2.2 2.4 2.1 1.0 1.9 0.5 1.9 2.4 2.1 2.4 1.2 + 2.6 1.9 1.0 1.9 2.4 2.2 2.4 2.1 1.0 1.9 1.8 1.9 2.4 2.1 2.4 1.2 + 2.1 2.4 1.1 2.4 2.4 2.4 2.4 2.4 2.7 2.4 1.1 2.4 2.4 2.4 2.4 3.0 + 2.4 2.8 1.4 2.8 2.8 2.8 2.8 2.8 3.1 2.8 1.5 2.8 2.8 2.8 2.8 2.8 + 2.7 3.1 1.7 3.1 3.1 3.7 3.1 3.7 3.4 3.1 3.1 3.1 3.1 3.7 3.1 3.1 + 2.4 2.8 1.4 2.8 2.8 2.8 2.8 2.8 3.1 2.8 1.5 2.8 2.8 2.8 2.8 2.8 + 2.4 2.8 1.4 2.8 2.8 2.8 2.8 2.8 3.1 2.8 1.5 2.8 2.8 2.8 2.8 2.8 + 2.4 2.8 2.0 2.8 2.8 2.8 2.8 2.8 3.7 2.8 1.5 2.8 2.8 2.8 2.8 2.8 + 2.4 2.8 1.4 2.8 2.8 2.8 2.8 2.8 3.1 2.8 1.5 2.8 2.8 2.8 2.8 2.8 + 2.4 2.8 2.0 2.8 2.8 2.8 2.8 2.8 3.7 2.8 1.5 2.8 2.8 2.8 2.8 2.8 + 1.1 1.4 0.1 1.4 1.4 2.0 1.4 2.0 1.7 1.4 1.4 1.4 1.4 2.0 1.4 1.4 + 2.4 2.8 1.4 2.8 2.8 2.8 2.8 2.8 3.1 2.8 1.5 2.8 2.8 2.8 2.8 2.8 + 1.1 1.5 1.4 1.5 1.5 1.5 1.5 1.5 3.1 1.5 2.8 1.5 1.5 1.5 1.5 2.8 + 2.4 2.8 1.4 2.8 2.8 2.8 2.8 2.8 3.1 2.8 1.5 2.8 2.8 2.8 2.8 2.8 + 2.4 2.8 1.4 2.8 2.8 2.8 2.8 2.8 3.1 2.8 1.5 2.8 2.8 2.8 2.8 2.8 + 2.4 2.8 2.0 2.8 2.8 2.8 2.8 2.8 3.7 2.8 1.5 2.8 2.8 2.8 2.8 2.8 + 2.4 2.8 1.4 2.8 2.8 2.8 2.8 2.8 3.1 2.8 1.5 2.8 2.8 2.8 2.8 2.8 + 3.0 2.8 1.4 2.8 2.8 2.8 2.8 2.8 3.1 2.8 2.8 2.8 2.8 2.8 2.8 2.8 + 2.4 2.2 1.2 2.2 2.3 2.2 2.3 2.2 1.9 2.2 0.7 2.2 2.3 2.2 2.3 1.9 + 2.8 2.5 1.5 2.5 2.6 2.6 2.6 2.6 2.2 2.5 1.0 2.5 2.6 2.6 2.6 1.7 + 3.1 2.8 1.8 2.8 2.9 3.5 2.9 3.5 2.5 2.8 2.6 2.8 2.9 3.5 2.9 2.0 + 2.8 2.5 1.5 2.5 2.6 2.6 2.6 2.6 2.2 2.5 1.0 2.5 2.6 2.6 2.6 1.7 + 2.8 2.5 1.5 2.5 2.6 2.6 2.6 2.6 2.2 2.5 1.0 2.5 2.6 2.6 2.6 1.7 + 2.8 2.5 2.1 2.5 2.6 2.6 2.6 2.6 2.8 2.5 1.0 2.5 2.6 2.6 2.6 1.7 + 2.8 2.5 1.5 2.5 2.6 2.6 2.6 2.6 2.2 2.5 1.0 2.5 2.6 2.6 2.6 1.7 + 2.8 2.5 2.1 2.5 2.6 2.6 2.6 2.6 2.8 2.5 1.0 2.5 2.6 2.6 2.6 1.7 + 1.4 1.2 0.2 1.2 1.3 1.8 1.3 1.8 0.9 1.2 1.0 1.2 1.3 1.8 1.3 0.3 + 2.8 2.5 1.5 2.5 2.6 2.6 2.6 2.6 2.2 2.5 1.0 2.5 2.6 2.6 2.6 1.7 + 1.5 1.2 1.5 1.2 1.3 1.3 1.3 1.3 2.2 1.2 2.3 1.2 1.3 1.3 1.3 1.7 + 2.8 2.5 1.5 2.5 2.6 2.6 2.6 2.6 2.2 2.5 1.0 2.5 2.6 2.6 2.6 1.7 + 2.8 2.5 1.5 2.5 2.6 2.6 2.6 2.6 2.2 2.5 1.0 2.5 2.6 2.6 2.6 1.7 + 2.8 2.5 2.1 2.5 2.6 2.6 2.6 2.6 2.8 2.5 1.0 2.5 2.6 2.6 2.6 1.7 + 2.8 2.5 1.5 2.5 2.6 2.6 2.6 2.6 2.2 2.5 1.0 2.5 2.6 2.6 2.6 1.7 + 3.4 2.5 1.5 2.5 2.6 2.6 2.6 2.6 2.2 2.5 2.3 2.5 2.6 2.6 2.6 1.7 + 3.6 2.7 1.9 2.7 2.7 2.7 2.7 2.7 3.6 2.7 1.4 2.7 2.7 2.7 2.7 3.3 + 3.4 3.1 2.3 3.1 3.1 3.1 3.1 3.1 2.7 3.1 1.8 3.1 3.1 3.1 3.1 3.1 + 3.7 3.4 2.6 3.4 3.4 4.0 3.4 4.0 3.0 3.4 3.4 3.4 3.4 4.0 3.4 3.4 + 3.4 3.1 2.3 3.1 3.1 3.1 3.1 3.1 2.7 3.1 1.8 3.1 3.1 3.1 3.1 3.1 + 3.4 3.1 2.3 3.1 3.1 3.1 3.1 3.1 2.7 3.1 1.8 3.1 3.1 3.1 3.1 3.1 + 3.4 3.1 2.9 3.1 3.1 3.1 3.1 3.1 3.3 3.1 1.8 3.1 3.1 3.1 3.1 3.1 + 3.4 3.1 2.3 3.1 3.1 3.1 3.1 3.1 2.7 3.1 1.8 3.1 3.1 3.1 3.1 3.1 + 3.4 3.1 2.9 3.1 3.1 3.1 3.1 3.1 3.3 3.1 1.8 3.1 3.1 3.1 3.1 3.1 + 2.2 1.7 0.2 1.7 1.7 2.3 1.7 2.3 1.3 1.7 1.7 1.7 1.7 2.3 1.7 1.7 + 3.4 3.1 2.3 3.1 3.1 3.1 3.1 3.1 2.7 3.1 1.8 3.1 3.1 3.1 3.1 3.1 + 2.1 1.8 2.3 1.8 1.8 1.8 1.8 1.8 2.7 1.8 3.1 1.8 1.8 1.8 1.8 3.1 + 3.4 3.1 2.3 3.1 3.1 3.1 3.1 3.1 2.7 3.1 1.8 3.1 3.1 3.1 3.1 3.1 + 3.4 3.1 2.3 3.1 3.1 3.1 3.1 3.1 2.7 3.1 1.8 3.1 3.1 3.1 3.1 3.1 + 3.4 3.1 2.9 3.1 3.1 3.1 3.1 3.1 3.3 3.1 1.8 3.1 3.1 3.1 3.1 3.1 + 3.4 3.1 2.3 3.1 3.1 3.1 3.1 3.1 2.7 3.1 1.8 3.1 3.1 3.1 3.1 3.1 + 4.0 3.1 2.3 3.1 3.1 3.1 3.1 3.1 2.7 3.1 3.1 3.1 3.1 3.1 3.1 3.1 diff --git a/parameters/stack.txt b/parameters/stack.txt new file mode 100644 index 0000000..cf51a56 --- /dev/null +++ b/parameters/stack.txt @@ -0,0 +1,68 @@ +Data Arrangement: + Y + ------------------ + (X) A C G U + ------------------ + 5' ==> 3' + AX + AY + 3' <== 5' + (A) . . . . + (C) . . . . + (G) . . . . + (U) -0.7 -0.1 -0.7 -0.1 +-------------------------------- +STACKING ENERGIES : + + Y Y Y Y +------------------ ------------------ ------------------ ------------------ + A C G U A C G U A C G U A C G U +------------------ ------------------ ------------------ ------------------ + 5' --> 3' 5' --> 3' 5' --> 3' 5' --> 3' + AX AX AX AX + AY CY GY UY + 3' <-- 5' 3' <-- 5' 3' <-- 5' 3' <-- 5' + . . . . . . . . . . . . . . . -0.9 + . . . . . . . . . . . . . . -2.2 . + . . . . . . . . . . . . . -2.1 . -0.6 + . . . . . . . . . . . . -1.1 . -1.4 . + + Y Y Y Y +------------------ ------------------ ------------------ ------------------ + A C G U A C G U A C G U A C G U +------------------ ------------------ ------------------ ------------------ + 5' --> 3' 5' --> 3' 5' --> 3' 5' --> 3' + CX CX CX CX + AY CY GY UY + 3' <-- 5' 3' <-- 5' 3' <-- 5' 3' <-- 5' + . . . . . . . . . . . -2.1 . . . . + . . . . . . . . . . -3.3 . . . . . + . . . . . . . . . -2.4 . -1.4 . . . . + . . . . . . . . -2.1 . -2.1 . . . . . + + Y Y Y Y +------------------ ------------------ ------------------ ------------------ + A C G U A C G U A C G U A C G U +------------------ ------------------ ------------------ ------------------ + 5' --> 3' 5' --> 3' 5' --> 3' 5' --> 3' + GX GX GX GX + AY CY GY UY + 3' <-- 5' 3' <-- 5' 3' <-- 5' 3' <-- 5' + . . . . . . . -2.4 . . . . . . . -1.3 + . . . . . . -3.4 . . . . . . . -2.5 . + . . . . . -3.3 . -1.5 . . . . . -2.1 . -0.5 + . . . . -2.2 . -2.5 . . . . . -1.4 . +1.3 . + + Y Y Y Y +------------------ ------------------ ------------------ ------------------ + A C G U A C G U A C G U A C G U +------------------ ------------------ ------------------ ------------------ + 5' --> 3' 5' --> 3' 5' --> 3' 5' --> 3' + UX UX UX UX + AY CY GY UY + 3' <-- 5' 3' <-- 5' 3' <-- 5' 3' <-- 5' + . . . -1.3 . . . . . . . -1.0 . . . . + . . -2.4 . . . . . . . -1.5 . . . . . + . -2.1 . -1.0 . . . . . -1.4 . +0.3 . . . . +-0.9 . -1.3 . . . . . -0.6 . -0.5 . . . . . + diff --git a/parameters/tstack.txt b/parameters/tstack.txt new file mode 100644 index 0000000..58a1f7e --- /dev/null +++ b/parameters/tstack.txt @@ -0,0 +1,68 @@ +Data Arangement: + Y + ------------------ + (X) A C G U + ------------------ + 5' ==> 3' + AX + AY + 3' <== 5' + (A) . . . . + (C) . . . . + (G) . . . . + (U) -0.7 -0.1 -0.7 -0.1 +-------------------------------- +STACKING ENERGIES : TERMINAL MISMATCHES AND BASE-PAIRS. + + Y Y Y Y +------------------ ------------------ ------------------ ------------------ + A C G U A C G U A C G U A C G U +------------------ ------------------ ------------------ ------------------ + 5' --> 3' 5' --> 3' 5' --> 3' 5' --> 3' + AX AX AX AX + AY CY GY UY + 3' <-- 5' 3' <-- 5' 3' <-- 5' 3' <-- 5' + . . . . . . . . . . . . -0.8 -1.0 -0.8 -1.0 + . . . . . . . . . . . . -0.6 -0.7 -0.6 -0.7 + . . . . . . . . . . . . -0.8 -1.0 -0.8 -1.0 + . . . . . . . . . . . . -0.6 -0.8 -0.6 -0.8 + + Y Y Y Y +------------------ ------------------ ------------------ ------------------ + A C G U A C G U A C G U A C G U +------------------ ------------------ ------------------ ------------------ + 5' --> 3' 5' --> 3' 5' --> 3' 5' --> 3' + CX CX CX CX + AY CY GY UY + 3' <-- 5' 3' <-- 5' 3' <-- 5' 3' <-- 5' + . . . . . . . . -1.5 -1.5 -1.4 -1.5 . . . . + . . . . . . . . -1.0 -1.1 -1.0 -0.8 . . . . + . . . . . . . . -1.4 -1.5 -1.6 -1.5 . . . . + . . . . . . . . -1.0 -1.4 -1.0 -1.2 . . . . + + Y Y Y Y +------------------ ------------------ ------------------ ------------------ + A C G U A C G U A C G U A C G U +------------------ ------------------ ------------------ ------------------ + 5' --> 3' 5' --> 3' 5' --> 3' 5' --> 3' + GX GX GX GX + AY CY GY UY + 3' <-- 5' 3' <-- 5' 3' <-- 5' 3' <-- 5' + . . . . -1.1 -1.5 -1.3 -1.5 . . . . -0.3 -1.0 -0.8 -1.0 + . . . . -1.1 -0.7 -1.1 -0.5 . . . . -0.6 -0.7 -0.6 -0.7 + . . . . -1.6 -1.5 -1.4 -1.5 . . . . -0.6 -1.0 -0.8 -1.0 + . . . . -1.1 -1.0 -1.1 -0.7 . . . . -0.6 -0.8 -0.6 -0.6 + + Y Y Y Y +------------------ ------------------ ------------------ ------------------ + A C G U A C G U A C G U A C G U +------------------ ------------------ ------------------ ------------------ + 5' --> 3' 5' --> 3' 5' --> 3' 5' --> 3' + UX UX UX UX + AY CY GY UY + 3' <-- 5' 3' <-- 5' 3' <-- 5' 3' <-- 5' +-1.0 -0.8 -1.1 -0.8 . . . . -1.0 -0.8 -1.1 -0.8 . . . . +-0.7 -0.6 -0.7 -0.5 . . . . -0.7 -0.6 -0.7 -0.5 . . . . +-1.1 -0.8 -1.2 -0.8 . . . . -0.5 -0.8 -0.8 -0.8 . . . . +-0.7 -0.6 -0.7 -0.5 . . . . -0.7 -0.6 -0.7 -0.5 . . . . + diff --git a/readme.txt b/readme.txt new file mode 100644 index 0000000..2a488ae --- /dev/null +++ b/readme.txt @@ -0,0 +1,5 @@ +To compile it simply type make + +To run it check the usage typing ./mirinho + +Contact: Susan Higashi ( susanhigashi@gmail.com ) -- GitLab