From 7231877c1902274083c4b79bf3b1b6df9bfb202e Mon Sep 17 00:00:00 2001 From: martin-mann Date: Thu, 10 Dec 2020 16:43:38 +0100 Subject: [PATCH 01/21] bugfix: max length == 1 smaller --- ChangeLog | 9 ++++++++- src/IntaRNA/AccessibilityFromStream.cpp | 3 ++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index c6c53f91..2cafce28 100644 --- a/ChangeLog +++ b/ChangeLog @@ -11,12 +11,19 @@ ################################################################################ # IntaRNA - +- BUGFIX: maximal interaction length correction for precomputed accessibility + data was one to large (wrong dangling end computation for maximally long RRIs) + (thanks to Sabine Reisser) ################################################################################ ################################################################################ +201210 Martin Raden + * IntaRNA/AccessibilityFromStream : + * bugfix: max length == 1 smaller than max-accessibility-data-length due to + dangling-end treatment (thanks to Sabine Reisser) + ################################################################################ ### version 3.2.1 ################################################################################ diff --git a/src/IntaRNA/AccessibilityFromStream.cpp b/src/IntaRNA/AccessibilityFromStream.cpp index 86eff91f..0f555a7f 100644 --- a/src/IntaRNA/AccessibilityFromStream.cpp +++ b/src/IntaRNA/AccessibilityFromStream.cpp @@ -87,7 +87,8 @@ parseRNAplfold_text( std::istream & inStream, const Z_type RT, const bool parseP // check if maxLength <= max available length size_t cutEnd = line.find_last_of("1234567890"); size_t cutStart = line.find_last_not_of("1234567890", cutEnd ); - size_t maxAvailLength = boost::lexical_cast( line.substr(cutStart+1,cutEnd-cutStart)); + // max length == 1 smaller than max-accessibility-data-length due to dangling-end treatment + size_t maxAvailLength = (boost::lexical_cast( line.substr(cutStart+1,cutEnd-cutStart)) -1); if (maxAvailLength < getMaxLength()) { #if INTARNA_MULITHREADING #pragma omp critical(intarna_omp_logOutput) From fe46efad457c8b34761f8e002c2236ef1778f953 Mon Sep 17 00:00:00 2001 From: martin-mann Date: Thu, 11 Feb 2021 16:12:15 +0100 Subject: [PATCH 02/21] fixes #194 (issue with explicit seeds) --- ChangeLog | 15 +++++++++++++++ src/IntaRNA/SeedConstraint.h | 2 +- src/IntaRNA/SeedHandlerExplicit.cpp | 13 +++++++------ src/IntaRNA/SeedHandlerExplicit.h | 8 ++++---- src/bin/CommandLineParsing.cpp | 10 ++++++---- src/bin/IntaRNA.cpp | 4 ++-- 6 files changed, 35 insertions(+), 17 deletions(-) diff --git a/ChangeLog b/ChangeLog index 2cafce28..a4af3b6d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -14,10 +14,25 @@ - BUGFIX: maximal interaction length correction for precomputed accessibility data was one to large (wrong dangling end computation for maximally long RRIs) (thanks to Sabine Reisser) +- BUGFIX: explicit seed encodings within last 7 nucleotides (seedBP) were + ignored (thanks to Sebastian Holler) ################################################################################ ################################################################################ +210211 Martin Raden + * IntaRNA/SeedConstraint : + * constructor: bp>2 check only if no explicit seed present + * IntaRNA/SeedHandlerExplicit : + - getSeedMaxBP() : obsolete, replaced by getSeedMinBP() + + getSeedMinBP() : minimal number of bps within encoded seeds; used for seed + constraint initialization + * traceBackSeed() : + * bugfix: check for minimal seed length sufficient on one side + * bin/CommandLineParsing : + * seedBP now set to getSeedMinBP() if explicit seeds present + * bin/IntaRNA : + * exception information now motivates to send input along with report 201210 Martin Raden * IntaRNA/AccessibilityFromStream : diff --git a/src/IntaRNA/SeedConstraint.h b/src/IntaRNA/SeedConstraint.h index 1d7bd4da..d0214b34 100644 --- a/src/IntaRNA/SeedConstraint.h +++ b/src/IntaRNA/SeedConstraint.h @@ -290,7 +290,7 @@ SeedConstraint::SeedConstraint( , bpGUendAllowed(!noGUendAllowed) , lpAllowed(!noLP) { - if (bp < 2) throw std::runtime_error("SeedConstraint() : base pair number ("+toString(bp)+") < 2"); + if (bp < 2 && explicitSeeds.empty()) throw std::runtime_error("SeedConstraint() : base pair number ("+toString(bp)+") < 2"); } ///////////////////////////////////////////////////////////////////////////// diff --git a/src/IntaRNA/SeedHandlerExplicit.cpp b/src/IntaRNA/SeedHandlerExplicit.cpp index eec4d52b..85830834 100644 --- a/src/IntaRNA/SeedHandlerExplicit.cpp +++ b/src/IntaRNA/SeedHandlerExplicit.cpp @@ -81,23 +81,23 @@ SeedHandlerExplicit:: size_t SeedHandlerExplicit:: -getSeedMaxBP( const std::string & seedEncoding ) +getSeedMinBP( const std::string & seedEncoding ) { - size_t maxBP = 0; + size_t minBP = 99999; if (!seedEncoding.empty()) { #if INTARNA_IN_DEBUG_MODE - if (!checkSeedEncoding(seedEncoding).empty()) throw std::runtime_error("SeedHandlerExplicit::getSeedMaxBP() : no valid seed encoding : "+checkSeedEncoding(seedEncoding)); + if (!checkSeedEncoding(seedEncoding).empty()) throw std::runtime_error("SeedHandlerExplicit::getSeedMinBP() : no valid seed encoding : "+checkSeedEncoding(seedEncoding)); #endif size_t curBP = 0; for( const char & c : seedEncoding ) { switch(c){ case ',' : - case '&' : maxBP = std::max( maxBP, curBP ); curBP = 0; break; + case '&' : minBP = std::min( minBP, curBP ); curBP = 0; break; case '|' : curBP++; } } } - return maxBP; + return minBP; } ///////////////////////////////////////////////////////////////////////////// @@ -171,6 +171,7 @@ fillSeed( const size_t i1min, const size_t i1max, const size_t i2min, const size withinIntervals++; } } + // return identified number return withinIntervals; } @@ -194,7 +195,7 @@ traceBackSeed( Interaction & interaction // fill data structure for current seed const SeedData & s = seed->second; // check if seed can not contain at least three base pairs - if (s.dotBar1.size() < 3 && s.dotBar2.size() < 3) { + if (s.dotBar1.size() < 3 || s.dotBar2.size() < 3) { return; } // get positions of second base pair within seed (if any) diff --git a/src/IntaRNA/SeedHandlerExplicit.h b/src/IntaRNA/SeedHandlerExplicit.h index 9d2743e5..6c624c81 100644 --- a/src/IntaRNA/SeedHandlerExplicit.h +++ b/src/IntaRNA/SeedHandlerExplicit.h @@ -120,14 +120,14 @@ class SeedHandlerExplicit : public SeedHandler checkSeedEncoding( const std::string & seed ); /** - * parses the given explicit seed encoding for the maximal number of - * base pairs within a seed + * parses the given explicit seed encoding for the minimal number of + * base pairs within any of the encoded seed * @param seedEncoding the explicit seed encoding to parse - * @return the maximal number of base pairs among all encoded seeds + * @return the minimal number of base pairs among all encoded seeds */ static size_t - getSeedMaxBP( const std::string & seedEncoding ); + getSeedMinBP( const std::string & seedEncoding ); /** * Replace the input variables i1 and i2 to values to within the given range diff --git a/src/bin/CommandLineParsing.cpp b/src/bin/CommandLineParsing.cpp index f3a9cc76..e73cfee6 100644 --- a/src/bin/CommandLineParsing.cpp +++ b/src/bin/CommandLineParsing.cpp @@ -1267,8 +1267,10 @@ parse(int argc, char** argv) if (target.size()>1 || query.size() > 1) { throw error("explicit seed definition only for single query/target available"); } - // input sanity check : maybe seed constraints defined -> warn if (seedBP.isSet()) LOG(INFO) <<"explicit seeds defined, but seedBP provided (will be ignored)"; + // reset seedBP to minimal bps in any of the seeds + seedBP.val = SeedHandlerExplicit::getSeedMinBP(seedTQ); + // input sanity check : maybe seed constraints defined -> warn if (seedMaxUP.isSet()) LOG(INFO) <<"explicit seeds defined, but seedMaxUP provided (will be ignored)"; if (seedQMaxUP.isSet()) LOG(INFO) <<"explicit seeds defined, but seedQMaxUP provided (will be ignored)"; if (seedTMaxUP.isSet()) LOG(INFO) <<"explicit seeds defined, but seedTMaxUP provided (will be ignored)"; @@ -1533,9 +1535,9 @@ parse(int argc, char** argv) // check compatibility of seed constraint with helix setup if (!noSeedRequired) { // check if helixMaxBP >= seedBP - if (helixMaxBP.val < ( seedTQ.empty() ? seedBP.val : SeedHandlerExplicit::getSeedMaxBP(seedTQ) ) ) { - throw error("maximum number of seed base pairs (" - +toString(( seedTQ.empty() ? seedBP.val : SeedHandlerExplicit::getSeedMaxBP(seedTQ) )) + if (helixMaxBP.val < seedBP.val) { + throw error("minimum number of seed base pairs (" + +toString(seedBP.val) +") exceeds the maximally allowed number of helix base pairs ("+toString(helixMaxBP.val)+")"); } } diff --git a/src/bin/IntaRNA.cpp b/src/bin/IntaRNA.cpp index ca9f77b1..438e55e5 100644 --- a/src/bin/IntaRNA.cpp +++ b/src/bin/IntaRNA.cpp @@ -420,13 +420,13 @@ int main(int argc, char **argv){ ////////////////////// exception handling /////////////////////////// } catch (std::exception & e) { LOG(WARNING) <<"Exception raised : " < Please report to the IntaRNA development team! Thanks!\n"; + <<" ==> Please report (including input) to the IntaRNA development team! Thanks!\n"; el::Loggers::flushAll(); return -1; } catch (...) { std::exception_ptr eptr = std::current_exception(); LOG(WARNING) <<"Unknown exception raised \n\n" - <<" ==> Please report to the IntaRNA development team! Thanks!\n"; + <<" ==> Please report (including input) to the IntaRNA development team! Thanks!\n"; el::Loggers::flushAll(); return -1; } From 721abbdd08f8f903689437b74b46cb9f76b0a29d Mon Sep 17 00:00:00 2001 From: martin-mann Date: Thu, 11 Feb 2021 19:27:23 +0100 Subject: [PATCH 03/21] bugfix #190 outNoLP : missing recursion cases --- ChangeLog | 10 + .../IntaRNA-outNoLP.PredictorMfe2d.svg | 677 ++++++++++ .../IntaRNA-outNoLP.PredictorMfe2dSeed.svg | 1111 +++++++++++++++++ doc/recursions/IntaRNA.PredictorMfe2d.svg | 552 ++++++++ doc/recursions/IntaRNA.PredictorMfe2dSeed.svg | 425 +++++++ src/IntaRNA/PredictorMfe2d.cpp | 7 +- src/IntaRNA/PredictorMfe2dHeuristic.cpp | 37 +- src/IntaRNA/PredictorMfe2dHeuristicSeed.cpp | 105 +- src/IntaRNA/PredictorMfe2dSeed.cpp | 31 +- src/IntaRNA/PredictorMfeEns2dHeuristic.cpp | 40 + 10 files changed, 2985 insertions(+), 10 deletions(-) create mode 100644 doc/recursions/IntaRNA-outNoLP.PredictorMfe2d.svg create mode 100644 doc/recursions/IntaRNA-outNoLP.PredictorMfe2dSeed.svg create mode 100644 doc/recursions/IntaRNA.PredictorMfe2d.svg create mode 100644 doc/recursions/IntaRNA.PredictorMfe2dSeed.svg diff --git a/ChangeLog b/ChangeLog index a4af3b6d..0498425f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -16,6 +16,8 @@ (thanks to Sabine Reisser) - BUGFIX: explicit seed encodings within last 7 nucleotides (seedBP) were ignored (thanks to Sebastian Holler) +- BUGFIX: outNoLP option was not correctly implemented (missing recursion cases) + and was thus missing interactions ################################################################################ ################################################################################ @@ -33,6 +35,14 @@ * seedBP now set to getSeedMinBP() if explicit seeds present * bin/IntaRNA : * exception information now motivates to send input along with report + + docs/recursions : recursion depictions for sanity checks of implementations + + PredictorMfe2d (+outNoLP) + + PredictorMfe2dSeed (+outNoLP) + * IntaRNA/PredictorMfe2dSeed : + * IntaRNA/PredictorMfe2dHeuristic : + * IntaRNA/PredictorMfe2dHeuristicSeed : + * IntaRNA/PredictorMfeEns2dHeuristic : + * bugfix outNoLP : missing recursion cases 201210 Martin Raden * IntaRNA/AccessibilityFromStream : diff --git a/doc/recursions/IntaRNA-outNoLP.PredictorMfe2d.svg b/doc/recursions/IntaRNA-outNoLP.PredictorMfe2d.svg new file mode 100644 index 00000000..d4a5936d --- /dev/null +++ b/doc/recursions/IntaRNA-outNoLP.PredictorMfe2d.svg @@ -0,0 +1,677 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + = + + + = + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/recursions/IntaRNA-outNoLP.PredictorMfe2dSeed.svg b/doc/recursions/IntaRNA-outNoLP.PredictorMfe2dSeed.svg new file mode 100644 index 00000000..ec4047ee --- /dev/null +++ b/doc/recursions/IntaRNA-outNoLP.PredictorMfe2dSeed.svg @@ -0,0 +1,1111 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + = + = + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +   + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/recursions/IntaRNA.PredictorMfe2d.svg b/doc/recursions/IntaRNA.PredictorMfe2d.svg new file mode 100644 index 00000000..bd5dc4b0 --- /dev/null +++ b/doc/recursions/IntaRNA.PredictorMfe2d.svg @@ -0,0 +1,552 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + = + + + = + + + + + diff --git a/doc/recursions/IntaRNA.PredictorMfe2dSeed.svg b/doc/recursions/IntaRNA.PredictorMfe2dSeed.svg new file mode 100644 index 00000000..4307b14a --- /dev/null +++ b/doc/recursions/IntaRNA.PredictorMfe2dSeed.svg @@ -0,0 +1,425 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/IntaRNA/PredictorMfe2d.cpp b/src/IntaRNA/PredictorMfe2d.cpp index 90d066d8..21b59427 100644 --- a/src/IntaRNA/PredictorMfe2d.cpp +++ b/src/IntaRNA/PredictorMfe2d.cpp @@ -100,6 +100,10 @@ fillHybridE( const size_t j1, const size_t j2 throw std::runtime_error("PredictorMfe2d::fillHybridE() : i1init > j1 : "+toString(i1init)+" > "+toString(j1)); if (i2init > j2) throw std::runtime_error("PredictorMfe2d::fillHybridE() : i2init > j2 : "+toString(i2init)+" > "+toString(j2)); + if (!energy.isAccessible2(j1)) + throw std::runtime_error("PredictorMfe2d::fillHybridE() : !energy.isAccessible2(j1) : "+toString(j1)); + if (!energy.isAccessible2(j2)) + throw std::runtime_error("PredictorMfe2d::fillHybridE() : !energy.isAccessible2(j2) : "+toString(j2)); #endif // get minimal start indices heeding max interaction length @@ -166,6 +170,7 @@ fillHybridE( const size_t j1, const size_t j2 iStackE = energy.getE_interLeft(i1,i1+noLpShift,i2,i2+noLpShift); // init with stacking only + // or stacking with right extension curMinE = iStackE + ((w1==2&&w2==2) ? energy.getE_init() : hybridE_pq(i1+noLpShift, i2+noLpShift) ); } else { // @@ -274,7 +279,7 @@ traceBack( Interaction & interaction ) // get stacking term iStackE = energy.getE_interLeft(i1,i1+noLpShift, i2,i2+noLpShift); - // check just stacking + // check just stacking with right extension if ( E_equal( curE, iStackE + hybridE_pq(i1+noLpShift,i2+noLpShift) )) { // store bp interaction.basePairs.push_back( energy.getBasePair(i1+noLpShift,i2+noLpShift) ); diff --git a/src/IntaRNA/PredictorMfe2dHeuristic.cpp b/src/IntaRNA/PredictorMfe2dHeuristic.cpp index 91750cc8..d0b12253 100644 --- a/src/IntaRNA/PredictorMfe2dHeuristic.cpp +++ b/src/IntaRNA/PredictorMfe2dHeuristic.cpp @@ -124,7 +124,8 @@ fillHybridE() // set to interaction initiation with according boundary // if valid right boundary - if (!outConstraint.noGUend || !energy.isGU(i1+noLpShift,i2+noLpShift)) + if (E_isNotINF(iStackE) + && (!outConstraint.noGUend || !energy.isGU(i1+noLpShift,i2+noLpShift))) { *curCell = BestInteractionE(iStackE + energy.getE_init(), i1+noLpShift, i2+noLpShift); // current best total energy value (covers to far E_init only) @@ -133,6 +134,40 @@ fillHybridE() updateZall( i1,curCell->j1,i2,curCell->j2, curCellEtotal, false ); } + ///////////////////////////////////////// + // check direct extension to the right of the noLP stacking + ///////////////////////////////////////// + if(outConstraint.noLP) + { + + // direct cell access (const) + rightExt = &(hybridE(i1+noLpShift,i2+noLpShift)); + // check if right side can pair + // check if interaction length is within boundary + if (E_isNotINF(rightExt->val) + && (rightExt->j1 +1 -i1) <= energy.getAccessibility1().getMaxLength() + && (rightExt->j2 +1 -i2) <= energy.getAccessibility2().getMaxLength() ) + { + // compute energy direct extension with stacking + curE = iStackE + rightExt->val; + // check if this combination yields better energy + curEtotal = energy.getE(i1,rightExt->j1,i2,rightExt->j2,curE); + // update best extension + if ( curEtotal < curCellEtotal ) + { + // update current best for this left boundary + // copy right boundary + *curCell = *rightExt; + // set new energy + curCell->val = curE; + // store total energy to avoid recomputation + curCellEtotal = curEtotal; + } + // update Zall + updateZall( i1,rightExt->j1,i2,rightExt->j2, curEtotal, false ); + } + } + // iterate over all loop sizes w1 (seq1) and w2 (seq2) (minus 1) for (w1=1; w1-1 <= energy.getMaxInternalLoopSize1() && i1+w1+noLpShift= i1+noLpShift) { + // get energy of seed only explicitly + curE = seedE + energy.getE_init(); + // check if this combination yields better energy + curEseedtotal = energy.getE(i1,sj1,i2,sj2,curE); + // update Zall for seed only (if otherwise stacking enforced) + updateZall( i1,sj1,i2,sj2, curEseedtotal, false ); + } // for noLP : check for explicit interior loop after seed // assumption: seed fulfills noLP @@ -252,6 +255,73 @@ fillHybridE() // if !noLP or stacking bp possible if (E_isNotINF(iStackE)) { + + if (outConstraint.noLP) { + ///////////////////////////////////////// + // check direct extension to the right of the noLP stacking + ///////////////////////////////////////// + + ////////////////////////////////////////////////////////// + // update hybridE without seed constraint + ////////////////////////////////////////////////////////// + + // direct cell access (const) + rightExt = &(hybridE(i1+noLpShift,i2+noLpShift)); + + // check if right side can pair + // check if interaction length is within boundary + if ( E_isNotINF(rightExt->val) + && (rightExt->j1 +1 -i1) <= energy.getAccessibility1().getMaxLength() + && (rightExt->j2 +1 -i2) <= energy.getAccessibility2().getMaxLength() ) + { + // compute energy for direct stack extension + curE = iStackE + rightExt->val; + // check if this combination yields better energy + curEtotal = energy.getE(i1,rightExt->j1,i2,rightExt->j2,curE); + if ( curEtotal < curCellEtotal ) + { + // update current best for this left boundary + // copy right boundary + *curCell = *rightExt; + // set new energy + curCell->val = curE; + // store total energy to avoid recomputation + curCellEtotal = curEtotal; + } + } + + ////////////////////////////////////////////////////////// + // update hybridE_seed including seed constraint + ////////////////////////////////////////////////////////// + + // direct cell access to right side end of loop (seed has to be to the right of it) + rightExt = &(hybridE_seed(i1+noLpShift,i2+noLpShift)); + // check if right side of loop can pair + // check if interaction length is within boundary + if (E_isNotINF(rightExt->val) + && (rightExt->j1 +1 -i1) <= energy.getAccessibility1().getMaxLength() + && (rightExt->j2 +1 -i2) <= energy.getAccessibility2().getMaxLength() ) + { + // compute energy for direct stack extension + curE = iStackE + rightExt->val; + // check if this combination yields better energy + curEseedtotal = energy.getE(i1,rightExt->j1,i2,rightExt->j2,curE); + if ( curEseedtotal < curCellSeedEtotal ) + { + // update current best for this left boundary + // copy right boundary + *curCellSeed = *rightExt; + // set new energy + curCellSeed->val = curE; + // store overall energy + curCellSeedEtotal = curEseedtotal; + } + // avoid Z update; otherwise double-counting of interactions + // --> that way, underestimation of Z + } + } + + // iterate over all loop sizes w1 (seq1) and w2 (seq2) (minus 1) for (w1=1; w1-1 <= energy.getMaxInternalLoopSize1() && i1+noLpShift+w1j1 == j1 && curCell->j2 == j2 && + // and energy is the source of curE + E_equal( curE, (iStackE + curCell->val ) ) ) + { + // stop searching + traceNotFound = false; + // store bp + interaction.basePairs.push_back( energy.getBasePair(i1+noLpShift,i2+noLpShift) ); + // trace right part of stacking + i1+=noLpShift; + i2+=noLpShift; + curE = curCell->val; + } + } + // check all combinations of decompositions into (i1,i2)..(k1,k2)-(j1,j2) for (k1=std::min(j1,i1+energy.getMaxInternalLoopSize1()+1+noLpShift); traceNotFound && k1>i1+noLpShift; k1--) { for (k2=std::min(j2,i2+energy.getMaxInternalLoopSize2()+1+noLpShift); traceNotFound && k2>i2+noLpShift; k2--) { @@ -454,7 +544,7 @@ traceBack( Interaction & interaction ) i2 = k2; break; } - // trace remaining base pairs + // trace right bulge extension of seed in noLP mode if (outConstraint.noLP) { for (size_t l1=std::min(j1-1,k1+energy.getMaxInternalLoopSize1()+1); traceNotFound && l1>k1; l1--) { for (size_t l2=std::min(j2-1,k2+energy.getMaxInternalLoopSize2()+1); traceNotFound && l2>k2; l2--) { @@ -477,6 +567,7 @@ traceBack( Interaction & interaction ) }} // l1 l2 } if (traceNotFound){ + // as to be direct right extension of seed without bulge curCell = &(hybridE(k1,k2)); // sanity check assert( E_equal( curE, (seedE+(curCell->val)) ) diff --git a/src/IntaRNA/PredictorMfe2dSeed.cpp b/src/IntaRNA/PredictorMfe2dSeed.cpp index fbb8fe4a..16ddee26 100644 --- a/src/IntaRNA/PredictorMfe2dSeed.cpp +++ b/src/IntaRNA/PredictorMfe2dSeed.cpp @@ -192,6 +192,7 @@ fillHybridE( const size_t j1, const size_t j2 iStackE = energy.getE_interLeft(i1,i1+noLpShift,i2,i2+noLpShift); // init with stacking only + // or stacking with right extension curMinE = iStackE + ((w1==2&&w2==2) ? energy.getE_init() : hybridE_pq(i1+noLpShift, i2+noLpShift) ); } else { // @@ -214,7 +215,8 @@ fillHybridE( const size_t j1, const size_t j2 curMinEseed = std::min( curMinEseed, seedHandler.getSeedE(i1,i2) + hybridE_pq(k1,k2) ); } else // just the seed up to right boundary (explicit noLP handling) - if (k1 == j1 && k2 == j2) { + // ensure minimal seed length in noLP mode + if (k1 == j1 && k2 == j2 && k1>=i1+noLpShift) { curMinEseed = std::min( curMinEseed, seedHandler.getSeedE(i1,i2) + energy.getE_init() ); } // handle interior loops after seeds in noLP-mode @@ -238,6 +240,13 @@ fillHybridE( const size_t j1, const size_t j2 } } + // handle direct left-stacking in noLP-mode + if ( outConstraint.noLP) { + if ( E_isNotINF( hybridE_pq_seed(i1+noLpShift,i2+noLpShift) ) ) { + curMinEseed = std::min( curMinEseed, (iStackE + hybridE_pq_seed(i1+noLpShift,i2+noLpShift) ) ); + } + } + // check all combinations of decompositions into (i1,i2)..(k1,k2)-(j1,j2) if (w1 > 2 && w2 > 2) { for (k1=std::min(j1-1,i1+energy.getMaxInternalLoopSize1()+1+noLpShift); k1>i1+noLpShift; k1--) { @@ -433,6 +442,26 @@ traceBack( Interaction & interaction ) } } + // explicit check of direct left-end stacking (in noLP mode) + if (outConstraint.noLP) { + if ( E_isNotINF( hybridE_pq_seed(i1+noLpShift,i2+noLpShift) ) ) { + // check if correct split + if (E_equal ( curE, + (iStackE + hybridE_pq_seed(i1+noLpShift,i2+noLpShift) ) + ) ) + { + // store stacked base pair + interaction.basePairs.push_back( energy.getBasePair(i1+noLpShift,i2+noLpShift) ); + // update trace back boundary + i1+=noLpShift; + i2+=noLpShift; + curE= hybridE_pq_seed(i1,i2); + // start next iteration if trace was found + continue; + } + } + } + // check all interval splits if ( (j1-i1) > 1 && (j2-i2) > 1) { // check all combinations of decompositions into (i1,i2)..(k1,k2)-(j1,j2) diff --git a/src/IntaRNA/PredictorMfeEns2dHeuristic.cpp b/src/IntaRNA/PredictorMfeEns2dHeuristic.cpp index 1c43f418..8d33466b 100644 --- a/src/IntaRNA/PredictorMfeEns2dHeuristic.cpp +++ b/src/IntaRNA/PredictorMfeEns2dHeuristic.cpp @@ -133,6 +133,46 @@ fillHybridZ() curCellEtotal = energy.getE(i1,i1+noLpShift, i2,i2+noLpShift ,energy.getE(curCell->val)); // update overall partition function information for initial bps only updateZ( i1,curCell->j1, i2,curCell->j2, curCell->val, true ); + + if(outConstraint.noLP) { + ///////////////////////////////////////// + // check direct extension to the right of the noLP stacking + ///////////////////////////////////////// + + // direct cell access (const) + rightExt = &(hybridZ(i1+noLpShift,i2+noLpShift)); + // check if right side can pair + if (Z_equal(rightExt->val, 0.0)) { + continue; + } + // check if interaction length is within boundary + if ( (rightExt->j1 +1 -i1) > energy.getAccessibility1().getMaxLength() + || (rightExt->j2 +1 -i2) > energy.getAccessibility2().getMaxLength() ) + { + continue; + } + + // compute Z for direct extension with stacking + curZ = iStackZ * rightExt->val; + + // update overall partition function information for current right extension + updateZ( i1,rightExt->j1, i2,rightExt->j2, curZ, true ); + + // check if this combination yields better energy + curEtotal = energy.getE(i1,rightExt->j1, i2,rightExt->j2, energy.getE(curZ)); + + // update best right extension for (i1,i2) in curCell + if ( curEtotal < curCellEtotal ) + { + // update current best for this left boundary + // copy right boundary + *curCell = *rightExt; + // set new partition function + curCell->val = curZ; + // store total energy to avoid recomputation + curCellEtotal = curEtotal; + } + } } From 83af45875e66e0cdb54e496e0a181be310fd4eef Mon Sep 17 00:00:00 2001 From: martin-mann Date: Thu, 11 Feb 2021 19:44:24 +0100 Subject: [PATCH 04/21] recursions extended --- .../IntaRNA-outNoLP.PredictorMfe2d.svg | 23 +- .../IntaRNA-outNoLP.PredictorMfe2dSeed.svg | 2123 +++++++++++------ doc/recursions/IntaRNA.PredictorMfe2d.svg | 245 +- doc/recursions/IntaRNA.PredictorMfe2dSeed.svg | 776 +++--- 4 files changed, 1939 insertions(+), 1228 deletions(-) diff --git a/doc/recursions/IntaRNA-outNoLP.PredictorMfe2d.svg b/doc/recursions/IntaRNA-outNoLP.PredictorMfe2d.svg index d4a5936d..974282cb 100644 --- a/doc/recursions/IntaRNA-outNoLP.PredictorMfe2d.svg +++ b/doc/recursions/IntaRNA-outNoLP.PredictorMfe2d.svg @@ -16,7 +16,7 @@ version="1.1" id="svg8899" inkscape:version="0.48.4 r9939" - sodipodi:docname="IntarnaPredictor-noLP.svg"> + sodipodi:docname="IntaRNA-outNoLP.PredictorMfe2d.svg"> - + sodipodi:docname="IntaRNA-outNoLP.PredictorMfe2dSeed.svg"> - + transform="translate(-12.400514,-59.763047)"> + id="g3536"> + + transform="translate(2,100.63473)" + id="g3226"> + + + + + + + + + + + + + + + + + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - - - - - - - - - - - - - - - - - - - - - - + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;letter-spacing:normal;word-spacing:normal;text-anchor:start;fill:#000000;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10.43299961;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" /> + + + + + + + + + + + + + + + = + = + + + + + + + transform="translate(-1.9973,0.1622281)" + id="g3354"> + + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;letter-spacing:normal;word-spacing:normal;text-anchor:start;fill:#000000;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10.43299961;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" /> + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;letter-spacing:normal;word-spacing:normal;text-anchor:start;fill:#000000;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10.43299961;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" /> + + + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;letter-spacing:normal;word-spacing:normal;text-anchor:start;fill:#000000;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10.43299961;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" /> + - - + d="m 566.81881,293.95477 0.057,-0.1716 0.057,-0.1716 0.057,-0.17161 0.057,-0.1716 v -0.1716 l 0.057,-0.1716 0.057,-0.11442 0.057,-0.11437 0.057,-0.11442 0.057,-0.11441 0.057,-0.11441 0.1145,-0.11442 0.057,-0.11441 0.1144,-0.0572 0.057,-0.11441 0.1145,-0.0572 0.1144,-0.11442 0.1715,-0.0572 0.1145,-0.0572 0.1715,-0.0572 0.1715,-0.0572 h 0.1715 l 0.1144,-0.0572 h 0.1145 0.1144 l 0.1145,-0.0572 h 0.1144 0.1145 0.1144 l 0.1145,-0.0572 h 0.1144 0.1715 0.1145 0.1715 0.1715 l 0.1144,-0.0572 h 0.1715 0.1715 0.1715 0.1715 0.2282 0.1715 c 1.4857,0 1.9428,0 1.9428,-1.14282 0,-0.62858 -0.6286,-0.62858 -0.8,-0.62858 -1.6,0 -5.7143,0.17161 -7.3143,0.17161 -1.6,0 -5.6571,-0.17161 -7.3143,-0.17161 -0.457,0 -1.0857,0 -1.0857,1.14287 0,0.62853 0.5143,0.62853 1.6,0.62853 0.1145,0 1.2,0 2.1715,0.11442 1.0285,0.11437 1.5428,0.1716 1.5428,0.91426 0,0.2288 -0.057,0.34271 -0.2289,1.08572 l -3.4285,13.88571 h -17.3715 l 3.3715,-13.37142 c 0.5142,-2.05715 0.6857,-2.62857 4.7428,-2.62857 1.4857,0 1.9429,0 1.9429,-1.14283 0,-0.62858 -0.5714,-0.62858 -0.7429,-0.62858 -1.5999,0 -5.7143,0.17161 -7.3143,0.17161 -1.6571,0 -5.7143,-0.17161 -7.3714,-0.17161 -0.4571,0 -1.0286,0 -1.0286,1.14287 0,0.62854 0.5143,0.62854 1.5429,0.62854 0.1144,0 1.2,0 2.1714,0.11441 1.0286,0.11441 1.5429,0.1716 1.5429,0.91427 0,0.22879 -0.057,0.39989 -0.2289,1.08572 l -7.6,30.57145 c -0.5714,2.22857 -0.6857,2.68576 -5.2,2.68576 -1.0286,0 -1.5429,0 -1.5429,1.14279 0,0.62858 0.6858,0.62858 0.8,0.62858 1.6001,0 5.6572,-0.1715 7.2572,-0.1715 1.1428,0 2.4,0.0571 3.6,0.0571 1.2571,0 2.5143,0.11445 3.7143,0.11445 0.4571,0 1.1428,0 1.1428,-1.14285 0,-0.62852 -0.5142,-0.62852 -1.6,-0.62852 -2.1143,0 -3.7142,0 -3.7142,-1.02858 0,-0.34264 0.1144,-0.62859 0.1715,-0.9715 l 3.8857,-15.59996 h 17.3714 c -2.4,9.42853 -3.7143,14.85713 -3.9428,15.7143 -0.5715,1.82859 -1.6572,1.88574 -5.1429,1.88574 -0.8571,0 -1.3714,0 -1.3714,1.14279 0,0.62858 0.6857,0.62858 0.8,0.62858 1.6,0 5.6,-0.17149 7.2,-0.17149 1.2,0 2.4571,0.0571 3.6571,0.0571 1.2572,0 2.5143,0.11445 3.7143,0.11445 0.4571,0 1.1429,0 1.1429,-1.14286 0,-0.62851 -0.5143,-0.62851 -1.6001,-0.62851 -2.1142,0 -3.7143,0 -3.7143,-1.02859 0,-0.34264 0.1145,-0.62858 0.1715,-0.9715 z" + id="path7548-9" /> + + + + + + + + + + + + + + + transform="translate(-2,6.814524)" + id="g3308"> + y="430.49667" + x="668.14008" + height="81.030212" + width="85.151833" + id="rect5853-2" + style="fill:#b3b3b3;fill-opacity:0.97619042;stroke:#000000;stroke-width:3;stroke-linecap:square;stroke-miterlimit:10.43299961;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" /> + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;letter-spacing:normal;word-spacing:normal;text-anchor:start;fill:#000000;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10.43299961;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" /> + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;letter-spacing:normal;word-spacing:normal;text-anchor:start;fill:#000000;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10.43299961;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" /> + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;letter-spacing:normal;word-spacing:normal;text-anchor:start;fill:#000000;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10.43299961;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" /> + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;letter-spacing:normal;word-spacing:normal;text-anchor:start;fill:#000000;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10.43299961;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" /> + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;letter-spacing:normal;word-spacing:normal;text-anchor:start;fill:#000000;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10.43299961;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" /> + + d="m 732.24739,455.95477 0.057,-0.1716 0.057,-0.1716 0.057,-0.17161 0.057,-0.1716 v -0.1716 l 0.057,-0.1716 0.057,-0.11442 0.057,-0.11437 0.057,-0.11442 0.057,-0.11441 0.057,-0.11441 0.1145,-0.11442 0.057,-0.11441 0.1144,-0.0572 0.057,-0.11441 0.1145,-0.0572 0.1144,-0.11442 0.1715,-0.0572 0.1145,-0.0572 0.1715,-0.0572 0.1715,-0.0572 h 0.1715 l 0.1144,-0.0572 h 0.1145 0.1144 l 0.1145,-0.0572 h 0.1144 0.1145 0.1144 l 0.1145,-0.0572 h 0.1144 0.1715 0.1145 0.1715 0.1715 l 0.1144,-0.0572 h 0.1715 0.1715 0.1715 0.1715 0.2282 0.1715 c 1.4857,0 1.9428,0 1.9428,-1.14282 0,-0.62858 -0.6286,-0.62858 -0.8,-0.62858 -1.6,0 -5.7143,0.17161 -7.3143,0.17161 -1.6,0 -5.6571,-0.17161 -7.3143,-0.17161 -0.457,0 -1.0857,0 -1.0857,1.14287 0,0.62853 0.5143,0.62853 1.6,0.62853 0.1145,0 1.2,0 2.1715,0.11442 1.0285,0.11437 1.5428,0.1716 1.5428,0.91426 0,0.2288 -0.057,0.34271 -0.2289,1.08572 l -3.4285,13.88571 h -17.3715 l 3.3715,-13.37142 c 0.5142,-2.05715 0.6857,-2.62857 4.7428,-2.62857 1.4857,0 1.9429,0 1.9429,-1.14283 0,-0.62858 -0.5714,-0.62858 -0.7429,-0.62858 -1.5999,0 -5.7143,0.17161 -7.3143,0.17161 -1.6571,0 -5.7143,-0.17161 -7.3714,-0.17161 -0.4571,0 -1.0286,0 -1.0286,1.14287 0,0.62854 0.5143,0.62854 1.5429,0.62854 0.1144,0 1.2,0 2.1714,0.11441 1.0286,0.11441 1.5429,0.1716 1.5429,0.91427 0,0.22879 -0.057,0.39989 -0.2289,1.08572 l -7.6,30.57145 c -0.5714,2.22857 -0.6857,2.68576 -5.2,2.68576 -1.0286,0 -1.5429,0 -1.5429,1.14279 0,0.62858 0.6858,0.62858 0.8,0.62858 1.6001,0 5.6572,-0.1715 7.2572,-0.1715 1.1428,0 2.4,0.0571 3.6,0.0571 1.2571,0 2.5143,0.11445 3.7143,0.11445 0.4571,0 1.1428,0 1.1428,-1.14285 0,-0.62852 -0.5142,-0.62852 -1.6,-0.62852 -2.1143,0 -3.7142,0 -3.7142,-1.02858 0,-0.34264 0.1144,-0.62859 0.1715,-0.9715 l 3.8857,-15.59996 h 17.3714 c -2.4,9.42853 -3.7143,14.85713 -3.9428,15.7143 -0.5715,1.82859 -1.6572,1.88574 -5.1429,1.88574 -0.8571,0 -1.3714,0 -1.3714,1.14279 0,0.62858 0.6857,0.62858 0.8,0.62858 1.6,0 5.6,-0.17149 7.2,-0.17149 1.2,0 2.4571,0.0571 3.6571,0.0571 1.2572,0 2.5143,0.11445 3.7143,0.11445 0.4571,0 1.1429,0 1.1429,-1.14286 0,-0.62851 -0.5143,-0.62851 -1.6001,-0.62851 -2.1142,0 -3.7143,0 -3.7143,-1.02859 0,-0.34264 0.1145,-0.62858 0.1715,-0.9715 z" + id="path7548-9-3" /> + + + + + + + + + + + + + + + +   + + + + + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;letter-spacing:normal;word-spacing:normal;text-anchor:start;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10.43299961;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" /> + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;letter-spacing:normal;word-spacing:normal;text-anchor:start;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10.43299961;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" /> + + + + + + + + + + + + d="m 525.95268,783.47286 0.057,-0.1715 0.057,-0.17149 0.057,-0.1715 0.057,-0.1715 v -0.17149 l 0.057,-0.1715 0.057,-0.11445 0.057,-0.11445 0.057,-0.11444 0.057,-0.11445 0.057,-0.11445 0.1145,-0.11445 0.057,-0.11445 0.1144,-0.0571 0.057,-0.11445 0.1145,-0.057 0.1144,-0.11445 0.1715,-0.0571 0.1144,-0.057 0.1715,-0.057 0.1715,-0.0571 h 0.1715 l 0.1145,-0.0571 h 0.1144 0.1145 l 0.1144,-0.057 h 0.1145 0.1144 0.1145 l 0.1144,-0.0574 h 0.1145 0.1715 0.1144 0.1715 0.1715 l 0.1145,-0.057 h 0.1715 0.1715 0.1714 0.1715 0.2282 0.1715 c 1.4857,0 1.9429,0 1.9429,-1.14283 0,-0.62858 -0.6286,-0.62858 -0.8,-0.62858 -1.6,0 -5.7143,0.1715 -7.3143,0.1715 -1.6,0 -5.6571,-0.1715 -7.3143,-0.1715 -0.4571,0 -1.0857,0 -1.0857,1.14289 0,0.62852 0.5143,0.62852 1.6,0.62852 0.1145,0 1.2,0 2.1714,0.11445 1.0286,0.11444 1.5429,0.17149 1.5429,0.91424 0,0.2289 -0.057,0.34264 -0.2289,1.08574 l -3.4285,13.88569 h -17.3715 l 3.3714,-13.37142 c 0.5143,-2.05713 0.6858,-2.62856 4.7429,-2.62856 1.4857,0 1.9428,0 1.9428,-1.14282 0,-0.62859 -0.5714,-0.62859 -0.7428,-0.62859 -1.6,0 -5.7143,0.1715 -7.3143,0.1715 -1.6571,0 -5.7143,-0.1715 -7.3714,-0.1715 -0.4571,0 -1.0286,0 -1.0286,1.14286 0,0.62855 0.5143,0.62855 1.5429,0.62855 0.1144,0 1.2,0 2.1714,0.11445 1.0286,0.11445 1.5428,0.17149 1.5428,0.91428 0,0.22889 -0.057,0.39989 -0.2289,1.08574 l -7.5999,30.57144 c -0.5714,2.22852 -0.6857,2.68572 -5.2,2.68572 -1.0286,0 -1.5429,0 -1.5429,1.14282 0,0.62858 0.6857,0.62858 0.8,0.62858 1.6,0 5.6572,-0.17149 7.2572,-0.17149 1.1428,0 2.4,0.057 3.6,0.057 1.2571,0 2.5143,0.11445 3.7142,0.11445 0.4571,0 1.1429,0 1.1429,-1.14286 0,-0.62854 -0.5143,-0.62854 -1.6,-0.62854 -2.1143,0 -3.7143,0 -3.7143,-1.02855 0,-0.34264 0.1145,-0.62862 0.1715,-0.97151 l 3.8858,-15.59994 h 17.3714 c -2.4,9.42853 -3.7143,14.85712 -3.9428,15.71425 -0.5715,1.82859 -1.6572,1.88575 -5.1429,1.88575 -0.8572,0 -1.3715,0 -1.3715,1.14282 0,0.62858 0.6858,0.62858 0.8,0.62858 1.6001,0 5.6001,-0.17149 7.2,-0.17149 1.2,0 2.4572,0.057 3.6572,0.057 1.2571,0 2.5143,0.11445 3.7143,0.11445 0.4571,0 1.1428,0 1.1428,-1.14286 0,-0.62854 -0.5142,-0.62854 -1.6,-0.62854 -2.1143,0 -3.7143,0 -3.7143,-1.02855 0,-0.34264 0.1145,-0.62862 0.1715,-0.97151 z" + id="path7548-8" /> + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - = - = + id="g4027" + transform="translate(173.71429,26.571428)"> + + + + + + + + + + + - - - + style="fill:#000000;stroke-width:0" /> - - - - + id="path7890-6-7" + d="m 714.9401,491.83942 v -0.0699 -0.0354 l -0.0349,-0.0698 v -0.0699 -0.0699 l -0.0349,-0.0354 v -0.0699 l -0.0349,-0.0354 v -0.0699 l -0.0349,-0.0699 -0.0349,-0.0354 -0.0349,-0.0699 -0.0349,-0.0354 -0.0349,-0.0354 -0.0349,-0.0699 -0.0349,-0.0354 -0.0349,-0.0354 -0.0698,-0.0354 -0.0349,-0.0354 -0.0698,-0.0354 -0.0349,-0.0354 -0.0698,-0.0354 -0.0349,-0.0354 -0.0698,-0.0354 -0.0698,-0.0354 h -0.0698 l -0.0698,-0.0354 h -0.0698 -0.0698 l -0.0698,-0.0354 h -0.0698 -0.0698 c -0.80304,0 -1.85048,0.80306 -1.85048,1.85052 0,0.69828 0.48882,1.25691 1.29184,1.25691 0.94269,0 1.88539,-0.9078 1.88539,-1.85047 z" /> + id="path7892-7-1" + d="m 707.92226,515.33696 -0.0349,0.24449 -0.0698,0.24449 -0.10473,0.20956 -0.0698,0.24448 -0.0699,0.24449 -0.10473,0.20956 -0.10473,0.20957 -0.10473,0.20956 -0.10473,0.20956 -0.10473,0.20956 -0.10473,0.17463 -0.13966,0.20957 -0.10473,0.17463 -0.13966,0.17463 -0.13965,0.17464 -0.13966,0.13971 -0.13966,0.17463 -0.13965,0.13971 -0.13966,0.13971 -0.17459,0.10478 -0.13965,0.1397 -0.17459,0.10478 -0.13965,0.0699 -0.17459,0.10478 -0.17458,0.0699 -0.17458,0.0699 -0.17459,0.0698 -0.13965,0.0699 -0.20952,0.0354 h -0.17458 l -0.17458,0.0354 h -0.17459 c -0.20951,0 -0.73321,0 -1.36167,-0.31434 1.04744,-0.24449 1.57116,-1.15218 1.57116,-1.85047 0,-0.55863 -0.38405,-1.22203 -1.32676,-1.22203 -0.87286,-6e-5 -1.88539,0.73315 -1.88539,1.99006 0,1.39662 1.39659,2.16471 3.07249,2.16471 2.44402,0 5.65617,-1.85047 6.52904,-5.27209 l 3.21214,-12.74386 c 0.17458,-0.69828 0.17458,-1.18706 0.17458,-1.29184 0,-1.99012 -1.46641,-3.21211 -3.21214,-3.21211 -3.52638,0 -5.51651,5.06258 -5.51651,5.37682 0,0.34927 0.34917,0.34927 0.41897,0.34927 0.31424,0 0.34917,-0.0354 0.62847,-0.69829 0.87286,-2.12978 2.44402,-4.25961 4.36432,-4.25961 0.48883,0 1.11727,0.13971 1.11727,1.60608 0,0.80307 -0.10473,1.18711 -0.24439,1.78067 z" /> + d="m 713.38856,381.10749 v -0.0913 -0.0912 -0.0455 -0.0913 l -0.0456,-0.0912 v -0.0913 l -0.0456,-0.0456 v -0.0912 l -0.0456,-0.0456 -0.0456,-0.0913 -0.0456,-0.0912 v -0.0455 l -0.0456,-0.0456 -0.0456,-0.0912 -0.0913,-0.0456 -0.0456,-0.0456 -0.0456,-0.0456 -0.0456,-0.0912 -0.0912,-0.0456 -0.0456,-0.0456 -0.0456,-0.0455 h -0.0912 l -0.0913,-0.0456 -0.0456,-0.0456 -0.0913,-0.0456 h -0.0912 l -0.0913,-0.0456 h -0.0913 -0.0456 l -0.13688,-0.0456 h -0.0912 -0.0913 c -1.23174,0 -2.46348,1.18613 -2.46348,2.41788 0,0.86678 0.63868,1.64233 1.73356,1.64233 1.04927,0 2.41788,-1.04927 2.41788,-2.41787 z" + id="path8062-3-1" /> + d="m 709.96704,398.21511 0.0456,-0.13667 0.0456,-0.0911 0.0456,-0.13667 v -0.0911 l 0.0456,-0.0911 0.0456,-0.0911 0.0456,-0.0911 0.0456,-0.0911 v -0.0456 l 0.0456,-0.0911 v -0.0911 l 0.0456,-0.0455 0.0456,-0.0911 v -0.0456 l 0.0456,-0.13667 0.0456,-0.13667 0.0456,-0.13667 0.0456,-0.0456 v -0.0911 l 0.0456,-0.0456 v -0.0911 l 0.0456,-0.0455 0.0456,-0.0911 v -0.0911 l 0.0456,-0.0911 0.0456,-0.0911 0.0456,-0.0911 v -0.13683 l 0.0456,-0.0911 c 0.36496,-0.91242 0.59306,-1.5511 0.59306,-2.41788 0,-2.05291 -1.41422,-3.74086 -3.69524,-3.74086 -4.2883,0 -6.02187,6.61491 -6.02187,7.02553 0,0.45607 0.45623,0.45607 0.54744,0.45607 0.45623,0 0.50184,-0.0911 0.72993,-0.82113 1.23175,-4.28832 3.05655,-5.65693 4.60765,-5.65693 0.36496,0 1.1405,0 1.1405,1.45985 0,0.95803 -0.31935,1.91605 -0.50183,2.37225 -0.36496,1.18612 -2.41787,6.47811 -3.1478,8.39413 -0.45623,1.18615 -1.04926,2.69161 -1.04926,3.64962 0,2.14416 1.55108,3.74088 3.74086,3.74088 4.24268,0 5.93063,-6.61497 5.93063,-7.02554 0,-0.45607 -0.41057,-0.45607 -0.54744,-0.45607 -0.45623,0 -0.45623,0.13667 -0.68431,0.82114 -0.82116,2.87408 -2.32663,5.65695 -4.60764,5.65695 -0.77555,0 -1.09489,-0.45608 -1.09489,-1.5055 0,-1.1405 0.27375,-1.7792 1.32298,-4.56203 z" + id="path8064-5-5" /> - - + d="m 858.57498,492.65038 v 0 0 0 0 0 -0.0405 0 0 -0.0405 0 -0.0405 0 -0.0405 h -0.038 v -0.0405 0 -0.0405 h -0.038 v -0.0405 0 h -0.038 v -0.0405 0 h -0.038 v 0 -0.0405 h -0.038 v 0 0 h -0.038 v 0 -0.0405 h -0.038 v 0 h -0.038 v 0 0 h -0.038 v 0 l -0.038,-0.0405 v 0 h -0.038 -0.038 v 0 h -0.038 c -0.87798,0 -3.62643,0.30523 -4.61893,0.38166 -0.30538,0.0405 -0.72528,0.0764 -0.72528,0.80165 0,0.41963 0.38171,0.41963 0.95432,0.41963 1.8323,0 1.87047,0.3437 1.87047,0.64893 l -0.1145,0.76348 -4.80979,19.01014 c -0.1145,0.41963 -0.19088,0.6871 -0.19088,1.29787 0,2.17584 1.6796,3.51192 3.47373,3.51192 1.25971,0 2.17586,-0.76348 2.8248,-2.13768 0.68712,-1.45058 1.14519,-3.66464 1.14519,-3.74097 0,-0.38166 -0.34355,-0.38166 -0.45805,-0.38166 -0.38171,0 -0.41988,0.15286 -0.53442,0.68709 -0.61077,2.48123 -1.33606,4.73346 -2.86297,4.73346 -1.14519,0 -1.14519,-1.22153 -1.14519,-1.75596 0,-0.91615 0.038,-1.10703 0.22905,-1.8323 z" + id="path8939-5-1-2" /> + id="path4196-3-7" + d="m 1035.9057,687.85151 c -3.0373,-4.47312 -12.2903,-17.56088 -14.1974,-46.22137 -0.2119,-4.30735 -0.2119,-4.6386 -0.2119,-6.79242 l -2e-4,-126.57022 -0.071,-1.82242 0,-1.6566 -0.071,-1.82232 -0.1413,-1.98795 -0.1412,-1.82247 -0.2119,-1.9881 -0.2118,-1.988 -0.2119,-1.98789 -0.2825,-1.98805 -0.2825,-2.15367 -0.3532,-1.98805 -0.4238,-2.15373 -0.3532,-1.98794 -0.4944,-2.15373 -0.4945,-2.15362 -0.4944,-1.98805 -0.5651,-2.15367 -0.5651,-1.98805 -0.6357,-1.98794 -0.7063,-1.98805 -0.6357,-1.9881 -0.777,-1.988 -0.777,-1.98795 -0.777,-1.82237 -0.9182,-1.82232 -0.8476,-1.82232 -0.9183,-1.6567 -0.9888,-1.6567 -0.9889,-1.6566 -1.0595,-1.49102 -1.1302,-1.49113 -1.1301,-1.49092 c 7.6285,-9.44322 16.7403,-28.82623 17.5879,-59.64052 l 0.071,-0.99402 0,-114.4765 c 0,-13.41907 0,-16.40108 0.5651,-22.6965 1.2008,-13.2534 4.5912,-29.65452 13.5617,-41.91395" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;letter-spacing:normal;word-spacing:normal;text-anchor:start;fill:none;stroke:#000000;stroke-width:3.54330707;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10.43299961;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" /> + d="m 1061.449,614.58549 v 15.25718 c 0,2.57143 -0.6286,2.57143 -4.4,2.57143 v 1.7714 c 2,-0.0572 4.8571,-0.1716 6.4,-0.1716 1.4857,0 4.4571,0.1144 6.4,0.1716 v -1.7714 c -3.8286,0 -4.4572,0 -4.4572,-2.57143 v -10.45716 c 0,-5.94289 4.0572,-9.14285 7.7143,-9.14285 3.5429,0 4.1715,3.08572 4.1715,6.34283 v 13.25718 c 0,2.57143 -0.6286,2.57143 -4.4,2.57143 v 1.7714 c 1.9428,-0.0572 4.8571,-0.1716 6.4,-0.1716 1.4857,0 4.4571,0.1144 6.4,0.1716 v -1.7714 c -3.8286,0 -4.4572,0 -4.4572,-2.57143 v -10.45716 c 0,-5.94289 4.0572,-9.14285 7.7143,-9.14285 3.5429,0 4.1714,3.08572 4.1714,6.34283 v 13.25718 c 0,2.57143 -0.6285,2.57143 -4.4,2.57143 v 1.7714 c 1.9429,-0.0572 4.8572,-0.1716 6.4,-0.1716 1.4858,0 4.4572,0.1144 6.4,0.1716 v -1.7714 c -2.9714,0 -4.4,0 -4.4571,-1.71431 v -10.85714 c 0,-4.91427 0,-6.68572 -1.7714,-8.74286 -0.8,-0.97142 -2.6857,-2.11429 -6,-2.11429 -4.7429,0 -7.2572,3.42855 -8.2286,5.59999 -0.8,-4.97141 -5.0286,-5.59999 -7.5429,-5.59999 -4.1714,0 -6.8571,2.45713 -8.4571,5.99998 v -5.99998 l -8,0.62858 v 1.7714 c 3.9429,0 4.4,0.39989 4.4,3.20001 z" + id="path5824-3-3-6" /> + d="m 1112.7061,608.9855 -7.9428,0.62858 v 1.7714 c 3.7143,0 4.2286,0.34269 4.2286,3.14286 v 15.31433 c 0,2.57143 -0.6286,2.57143 -4.4572,2.57143 v 1.7714 c 1.8286,-0.0572 4.9143,-0.1716 6.2857,-0.1716 1.9429,0 3.9429,0.1144 5.8857,0.1716 v -1.7714 c -3.7714,0 -4,-0.28549 -4,-2.51434 z" + id="path5826-5-3-1" /> + d="m 1112.9347,599.09977 v -0.1716 -0.17159 -0.1716 l -0.057,-0.1144 v -0.1716 l -0.057,-0.17159 -0.057,-0.1144 -0.057,-0.1716 -0.057,-0.1144 -0.057,-0.11439 -0.1143,-0.1144 -0.057,-0.1716 -0.1143,-0.1144 -0.057,-0.1144 -0.1143,-0.0572 -0.1143,-0.11439 -0.057,-0.1144 -0.1143,-0.1144 -0.1143,-0.0572 -0.1714,-0.0572 -0.1143,-0.1144 -0.1143,-0.0572 -0.1143,-0.0572 -0.1143,-0.0572 -0.1715,-0.0572 -0.1143,-0.0572 h -0.1714 l -0.1143,-0.0572 h -0.1714 -0.1143 l -0.1715,-0.0572 h -0.1714 c -1.7143,0 -2.9715,1.54286 -2.9715,3.02857 0,1.54285 1.2572,3.02856 2.9715,3.02856 1.6,0 3.0285,-1.19996 3.0285,-3.02856 z" + id="path5828-6-4-42" /> + d="m 1124.7061,614.58549 v 15.25718 c 0,2.57143 -0.6285,2.57143 -4.4,2.57143 v 1.7714 c 1.9429,-0.0572 4.8572,-0.1716 6.4,-0.1716 1.4857,0 4.4572,0.1144 6.4,0.1716 v -1.7714 c -3.8286,0 -4.4571,0 -4.4571,-2.57143 v -10.45716 c 0,-5.94289 4.0572,-9.14285 7.7143,-9.14285 3.5429,0 4.1714,3.08572 4.1714,6.34283 v 13.25718 c 0,2.57143 -0.6285,2.57143 -4.4,2.57143 v 1.7714 c 2,-0.0572 4.8572,-0.1716 6.4,-0.1716 1.4857,0 4.4572,0.1144 6.4,0.1716 v -1.7714 c -2.9714,0 -4.4,0 -4.4571,-1.71431 v -10.85714 c 0,-4.91427 0,-6.68572 -1.7715,-8.74286 -0.8,-0.97142 -2.6857,-2.11429 -6,-2.11429 -4.1142,0 -6.8,2.45713 -8.4,5.99998 v -5.99998 l -8,0.62858 v 1.7714 c 3.9429,0 4.4,0.39989 4.4,3.20001 z" + id="path5830-2-6-3" /> + id="path8333-7-6-2" + d="m 1085.3992,667.58749 -0.037,0.11035 v 0.11035 l -0.037,0.11035 -0.037,0.11035 v 0.0734 l -0.037,0.11035 -0.037,0.0734 -0.037,0.0734 v 0.0734 l -0.037,0.0734 -0.037,0.0734 -0.037,0.0354 -0.037,0.0734 -0.037,0.0354 -0.037,0.0354 -0.037,0.0354 -0.073,0.0354 -0.037,0.0354 -0.073,0.0354 -0.073,0.0354 -0.037,0.0354 h -0.073 l -0.1103,0.0354 h -0.073 l -0.073,0.0354 h -0.1102 -0.073 l -0.037,0.0354 h -0.073 -0.037 -0.073 -0.037 -0.073 -0.073 -0.073 -0.073 -0.074 -0.073 c -0.441,0 -0.8452,0 -0.8452,0.69813 0,0.2941 0.1838,0.44089 0.4777,0.44089 0.9921,0 2.0578,-0.11035 3.0866,-0.11035 1.2126,0 2.462,0.11035 3.6378,0.11035 0.1838,0 0.6615,0 0.6615,-0.73488 0,-0.40394 -0.3675,-0.40394 -0.8819,-0.40394 -1.8373,0 -1.8373,-0.25714 -1.8373,-0.58793 0,-0.44089 1.5433,-6.39375 1.8005,-7.31238 0.4777,1.06563 1.4698,2.3517 3.3439,2.3517 l -0.037,-0.80838 c -2.3885,0 -2.8662,-3.04988 -2.8662,-3.27037 0,-0.0734 0,-0.1468 0.1103,-0.58794 l 1.7638,-7.16538 c 0.2572,-0.99212 1.2493,-2.021 1.9107,-2.57218 1.2861,-1.13913 2.3517,-1.39632 2.9764,-1.39632 1.4698,0 2.3517,1.28607 2.3517,3.45407 0,2.16799 -1.2126,6.35699 -1.874,7.75331 -1.2493,2.57219 -3.0131,3.78481 -4.3727,3.78481 l 0.037,0.80838 c 4.2625,0 8.8189,-5.36482 8.8189,-10.72969 0,-3.45412 -2.0577,-5.87931 -4.8504,-5.87931 -1.8373,0 -3.6011,1.32287 -4.8137,2.75593 -0.3674,-1.98425 -1.9107,-2.75593 -3.2703,-2.75593 -1.6903,0 -2.3885,1.43306 -2.7192,2.0945 -0.6614,1.24937 -1.1391,3.45406 -1.1391,3.56431 0,0.36749 0.3674,0.36749 0.4409,0.36749 0.3675,0 0.4042,-0.0354 0.6247,-0.84518 0.6247,-2.60893 1.3596,-4.37269 2.6824,-4.37269 0.6247,0 1.1391,0.29409 1.1391,1.69026 0,0.84518 -0.1102,1.24937 -0.2572,1.87405 z" /> + d="m 1124.2338,648.20889 v 0 0 -0.0354 h -0.034 v -0.0354 0 0 -0.0354 0 -0.0354 h -0.034 v -0.0354 0 0 -0.0354 h -0.034 v 0 -0.0354 h -0.034 v 0 l -0.034,-0.0354 v 0 0 l -0.034,-0.0354 v 0 h -0.034 v 0 h -0.034 -0.034 v -0.0354 h -0.034 v 0 c -0.373,0 -1.7293,1.35633 -2.3058,2.33965 -0.7459,-1.81575 -2.0683,-2.35828 -3.1534,-2.35828 v 0.74597 c 2.2041,0 2.6788,2.74657 2.6788,2.98392 0,0.20349 -1.865,7.59548 -1.9667,7.73109 -0.5086,0.94946 -2.4075,3.11958 -4.2724,3.11958 v 0 c -2.0345,0 -2.1702,-2.61096 -2.1702,-3.18741 0,-1.62759 0.9834,-5.28965 1.5598,-6.7138 1.0173,-2.50922 2.7805,-3.93338 4.1707,-3.93338 v -0.7463 c -3.9673,0 -8.138,5.01844 -8.138,9.90122 0,3.32301 2.0006,5.42531 4.4759,5.42531 1.4242,0 2.7466,-0.8138 3.9673,-2.03452 -0.3052,1.18681 -1.4242,5.73054 -1.5259,6.03567 -0.2712,0.94945 -0.5425,1.08511 -2.4075,1.11898 -0.4408,0 -0.7799,0 -0.7799,0.67819 0,0.0354 0,0.37305 0.4408,0.37305 1.0851,0 2.238,-0.10174 3.3569,-0.10174 1.1529,0 2.3736,0.10174 3.4926,0.10174 0.1695,0 0.6103,0 0.6103,-0.67818 0,-0.37306 -0.339,-0.37306 -0.8816,-0.37306 -1.6276,0 -1.6276,-0.23741 -1.6276,-0.54253 0,-0.23741 0.068,-0.44089 0.1357,-0.74597 z" + id="path8531-7-7-2" /> + d="m 1172.481,547.93528 v -0.0911 -0.0911 -0.0455 -0.0911 l -0.045,-0.0911 v -0.0911 l -0.046,-0.0456 v -0.0911 l -0.046,-0.0456 -0.046,-0.0911 -0.045,-0.0911 v -0.0455 l -0.046,-0.0456 -0.046,-0.0911 -0.091,-0.0455 -0.046,-0.0456 -0.045,-0.0456 -0.046,-0.0911 -0.091,-0.0456 -0.046,-0.0455 -0.046,-0.0456 h -0.091 l -0.091,-0.0456 -0.046,-0.0455 -0.091,-0.0456 h -0.091 l -0.091,-0.0456 h -0.091 -0.046 l -0.1366,-0.0455 h -0.091 -0.091 c -1.2318,0 -2.4635,1.18614 -2.4635,2.4179 0,0.86679 0.6386,1.64232 1.7335,1.64232 1.0493,0 2.4179,-1.04927 2.4179,-2.41785 z" + id="path8062-7-2-16" /> - - - - - - + d="m 1169.0595,565.04287 0.046,-0.13667 0.046,-0.0911 0.046,-0.13667 v -0.0911 l 0.046,-0.0911 0.046,-0.0911 0.046,-0.0911 0.046,-0.0911 v -0.0456 l 0.046,-0.0911 v -0.0911 l 0.046,-0.0456 0.045,-0.0911 v -0.0456 l 0.046,-0.13667 0.046,-0.13667 0.046,-0.13667 0.046,-0.0456 v -0.0911 l 0.046,-0.0456 v -0.0911 l 0.046,-0.0456 0.046,-0.0911 v -0.0911 l 0.046,-0.0911 0.046,-0.0911 0.046,-0.0911 v -0.13667 l 0.046,-0.0911 c 0.365,-0.9124 0.5931,-1.55111 0.5931,-2.4179 0,-2.05289 -1.4142,-3.74082 -3.6953,-3.74082 -4.2883,0 -6.0218,6.61489 -6.0218,7.02551 0,0.45608 0.4561,0.45608 0.5474,0.45608 0.4561,0 0.5017,-0.0911 0.73,-0.82114 1.2317,-4.28831 3.0565,-5.65694 4.6076,-5.65694 0.3649,0 1.1405,0 1.1405,1.45984 0,0.95806 -0.3194,1.91607 -0.5016,2.3723 -0.365,1.18609 -2.4179,6.47807 -3.1478,8.39409 -0.4561,1.18615 -1.0493,2.6916 -1.0493,3.64961 0,2.14415 1.5511,3.74087 3.7409,3.74087 4.2427,0 5.9306,-6.61495 5.9306,-7.02552 0,-0.45607 -0.4105,-0.45607 -0.5474,-0.45607 -0.4561,0 -0.4561,0.13667 -0.6844,0.82113 -0.8211,2.87408 -2.3266,5.65694 -4.6076,5.65694 -0.7756,0 -1.0949,-0.45607 -1.0949,-1.5055 0,-1.14049 0.2739,-1.77919 1.323,-4.562 z" + id="path8064-9-70-8" /> + id="path7890-0-36-5" + d="m 1174.0323,661.45079 v -0.0699 -0.0354 l -0.035,-0.0699 v -0.0699 -0.0698 l -0.035,-0.0354 v -0.0699 l -0.035,-0.0354 v -0.0699 l -0.035,-0.0699 -0.035,-0.0354 -0.035,-0.0699 -0.035,-0.0354 -0.035,-0.0354 -0.035,-0.0699 -0.035,-0.0354 -0.035,-0.0354 -0.07,-0.0354 -0.035,-0.0354 -0.07,-0.0354 -0.035,-0.0354 -0.07,-0.0354 -0.035,-0.0354 -0.07,-0.0354 -0.07,-0.0354 h -0.07 l -0.07,-0.0354 h -0.07 -0.07 l -0.07,-0.0354 h -0.07 -0.07 c -0.803,0 -1.8504,0.80306 -1.8504,1.85052 0,0.69828 0.489,1.25691 1.2918,1.25691 0.9427,0 1.8854,-0.9078 1.8854,-1.85047 z" /> + id="path7892-2-0-7" + d="m 1167.0145,684.94833 -0.035,0.24449 -0.07,0.24448 -0.1048,0.20957 -0.07,0.24448 -0.07,0.24449 -0.1047,0.20956 -0.1048,0.20956 -0.1048,0.20957 -0.1048,0.20956 -0.1048,0.20956 -0.1047,0.17463 -0.1397,0.20956 -0.1048,0.17464 -0.1397,0.17463 -0.1397,0.17464 -0.1397,0.1397 -0.1398,0.17464 -0.1397,0.13971 -0.1397,0.1397 -0.1746,0.10478 -0.1397,0.13971 -0.1746,0.10478 -0.1398,0.0699 -0.1746,0.10478 -0.1746,0.0698 -0.1747,0.0699 -0.1746,0.0699 -0.1397,0.0698 -0.2096,0.0354 h -0.1746 l -0.1746,0.0354 h -0.1747 c -0.2095,0 -0.7332,0 -1.3616,-0.31434 1.0474,-0.24449 1.5711,-1.15219 1.5711,-1.85047 0,-0.55863 -0.3841,-1.22204 -1.3267,-1.22204 -0.8729,0 -1.8854,0.73322 -1.8854,1.99013 0,1.39662 1.3966,2.16471 3.0725,2.16471 2.444,0 5.6562,-1.85047 6.529,-5.27209 l 3.2122,-12.74386 c 0.1746,-0.69828 0.1746,-1.18706 0.1746,-1.29184 0,-1.99012 -1.4664,-3.21211 -3.2122,-3.21211 -3.5263,0 -5.5164,5.06258 -5.5164,5.37682 0,0.34927 0.3492,0.34927 0.4191,0.34927 0.3143,0 0.3492,-0.0354 0.6284,-0.69829 0.8729,-2.12978 2.444,-4.25961 4.3643,-4.25961 0.489,0 1.1173,0.13971 1.1173,1.60608 0,0.80307 -0.1048,1.18711 -0.2445,1.78067 z" /> + id="path8333-6" + d="m 1319.1847,570.38238 -0.035,0.11035 v 0.11035 l -0.035,0.11035 -0.035,0.11035 v 0.0734 l -0.035,0.11034 -0.035,0.0734 -0.035,0.0734 v 0.0734 l -0.035,0.0734 -0.035,0.0734 -0.035,0.0354 -0.035,0.0734 -0.035,0.0354 -0.035,0.0354 -0.035,0.0354 -0.073,0.0354 -0.035,0.0354 -0.073,0.0354 -0.073,0.0354 -0.035,0.0354 h -0.073 l -0.1104,0.0354 h -0.073 l -0.073,0.0354 h -0.1103 -0.073 l -0.035,0.0354 h -0.073 -0.035 -0.073 -0.035 -0.073 -0.073 -0.073 -0.073 -0.073 -0.073 c -0.4409,0 -0.8451,0 -0.8451,0.69814 0,0.29409 0.1837,0.44088 0.4778,0.44088 0.9921,0 2.0577,-0.11034 3.0866,-0.11034 1.2126,0 2.462,0.11034 3.6378,0.11034 0.1838,0 0.6615,0 0.6615,-0.73488 0,-0.40444 -0.3675,-0.40444 -0.8819,-0.40444 -1.8373,0 -1.8373,-0.25714 -1.8373,-0.58794 0,-0.44088 1.5433,-6.39374 1.8005,-7.31237 0.4779,1.06562 1.4699,2.35169 3.3439,2.35169 l -0.035,-0.80838 c -2.3885,0 -2.8662,-3.04987 -2.8662,-3.27037 0,-0.0734 0,-0.14679 0.1104,-0.58793 l 1.7637,-7.16538 c 0.2572,-0.99213 1.2494,-2.021 1.9108,-2.57219 1.2861,-1.13912 2.3517,-1.39631 2.9764,-1.39631 1.4698,0 2.3517,1.28606 2.3517,3.45406 0,2.168 -1.2126,6.357 -1.874,7.75331 -1.2494,2.57219 -3.0131,3.78481 -4.3727,3.78481 l 0.035,0.80838 c 4.2625,0 8.8189,-5.36482 8.8189,-10.72969 0,-3.45411 -2.0578,-5.8793 -4.8504,-5.8793 -1.8373,0 -3.601,1.32286 -4.8137,2.75593 -0.3675,-1.98425 -1.9107,-2.75593 -3.2703,-2.75593 -1.6903,0 -2.3885,1.43306 -2.7192,2.09449 -0.6614,1.24937 -1.1391,3.45407 -1.1391,3.56432 0,0.36749 0.3675,0.36749 0.4409,0.36749 0.3675,0 0.4039,-0.0354 0.6247,-0.84518 0.6246,-2.60894 1.3595,-4.37269 2.6824,-4.37269 0.6246,0 1.1391,0.29409 1.1391,1.69025 0,0.84518 -0.1104,1.24937 -0.2572,1.87406 z" /> + d="m 1330.8773,664.88359 v 0 0 -0.0354 h -0.035 v -0.0354 0 0 -0.0354 0 -0.0354 h -0.035 v -0.0354 0 0 -0.0354 h -0.035 v 0 -0.0354 h -0.035 v 0 l -0.035,-0.0354 v 0 0 l -0.035,-0.0354 v 0 h -0.035 v 0 h -0.035 -0.035 v -0.0354 h -0.035 v 0 c -0.3731,0 -1.7294,1.35633 -2.3058,2.33965 -0.746,-1.83103 -2.0684,-2.37356 -3.1534,-2.37356 v 0.74597 c 2.204,0 2.6787,2.74656 2.6787,2.98392 0,0.20348 -1.8649,7.59548 -1.9667,7.73109 -0.5086,0.94945 -2.4075,3.11957 -4.2724,3.11957 v 0 c -2.0345,0 -2.1701,-2.61096 -2.1701,-3.1874 0,-1.6276 0.9833,-5.28965 1.5597,-6.71381 1.0173,-2.50922 2.7805,-3.93337 4.1708,-3.93337 v -0.74597 c -3.9673,0 -8.1381,5.01843 -8.1381,9.90121 0,3.32302 2.0006,5.42531 4.4759,5.42531 1.4242,0 2.7466,-0.81379 3.9673,-2.03451 -0.3052,1.1868 -1.4241,5.73053 -1.5259,6.03566 -0.2713,0.94946 -0.5425,1.08512 -2.4074,1.11898 -0.4409,0 -0.7799,0 -0.7799,0.67819 0,0.0354 0,0.37306 0.4409,0.37306 1.085,0 2.2379,-0.10174 3.3569,-0.10174 1.1529,0 2.3736,0.10174 3.4925,0.10174 0.1696,0 0.6104,0 0.6104,-0.67819 0,-0.37306 -0.3391,-0.37306 -0.8816,-0.37306 -1.6276,0 -1.6276,-0.2374 -1.6276,-0.54253 0,-0.2374 0.068,-0.44089 0.1356,-0.74597 z" + id="path8531-1" /> + id="path8733-61-8" + d="m 1458.3856,548.77859 v 0 0 0 0 0 -0.0405 0 0 -0.0405 0 -0.0405 0 -0.0405 h -0.041 v -0.0405 0 -0.0405 h -0.041 v -0.0405 h -0.04 v 0 -0.0405 0 h -0.041 v 0 -0.0405 h -0.041 v 0 0 h -0.041 v 0 -0.0405 h -0.04 v 0 h -0.041 v 0 h -0.041 v 0 0 l -0.04,-0.0405 h -0.041 v 0 h -0.041 v 0 h -0.041 c -0.9022,0 -3.7263,0.31384 -4.7461,0.3923 -0.3139,0.0405 -0.7453,0.0785 -0.7453,0.78449 0,0.47075 0.3528,0.47075 0.9414,0.47075 1.8828,0 1.922,0.27435 1.922,0.66685 l -0.1179,0.78449 -5.6484,22.51483 c -0.1569,0.54911 -0.1569,0.62757 -0.1569,0.8629 0,0.90217 0.7845,1.09832 1.1375,1.09832 0.5099,0 1.0983,-0.35281 1.3336,-0.82372 0.1964,-0.35281 1.9613,-7.60955 2.1966,-8.55096 1.3337,0.11744 4.5108,0.70608 4.5108,3.29487 0,0.27435 0,0.43127 -0.1174,0.82372 -0.078,0.47075 -0.1569,0.9414 -0.1569,1.37283 0,2.31428 1.569,3.88326 3.6086,3.88326 1.1768,0 2.2358,-0.62762 3.0988,-2.07891 0.9806,-1.72589 1.3728,-3.88321 1.3728,-3.96167 0,-0.39229 -0.3138,-0.39229 -0.4312,-0.39229 -0.3923,0 -0.4313,0.15691 -0.5884,0.70602 -0.7453,2.8634 -1.6474,4.86385 -3.3733,4.86385 -0.7453,0 -1.2552,-0.43127 -1.2552,-1.84353 0,-0.66685 0.1569,-1.56903 0.3138,-2.1966 0.157,-0.6668 0.157,-0.82372 0.157,-1.21596 0,-2.54956 -2.4712,-3.64788 -5.8052,-4.07936 1.2159,-0.70603 2.4711,-1.96122 3.3732,-2.90257 1.8828,-2.07891 3.6872,-3.76558 5.6091,-3.76558 0.2354,0 0.2744,0 0.3529,0.0405 0.4707,0.0785 0.4707,0.0785 0.8237,0.31383 0.079,0.0405 0.079,0.0785 0.1174,0.15692 -1.8436,0.11794 -2.1966,1.64744 -2.1966,2.11814 0,0.62757 0.4313,1.37283 1.4905,1.37283 1.0199,0 2.1182,-0.86295 2.1182,-2.3927 0,-1.17673 -0.9022,-2.4711 -2.6281,-2.4711 -1.0983,0 -2.9026,0.31384 -5.7267,3.45174 -1.3336,1.49052 -2.8634,3.05949 -4.3147,3.64789 z" /> + d="m 1462.2353,662.26165 v 0 0 0 0 0 -0.0405 0 0 -0.0405 0 -0.0405 0 -0.0405 h -0.041 v -0.0405 0 -0.0405 h -0.041 v -0.0405 0 h -0.04 v -0.0405 0 h -0.041 v 0 -0.0405 h -0.041 v 0 0 h -0.041 v 0 -0.0405 h -0.04 v 0 h -0.041 v 0 0 h -0.041 v 0 l -0.04,-0.0405 v 0 h -0.041 -0.041 v 0 h -0.04 c -0.878,0 -3.6265,0.30523 -4.619,0.38167 -0.3052,0.0405 -0.7252,0.0764 -0.7252,0.80165 0,0.41962 0.3816,0.41962 0.9543,0.41962 1.8323,0 1.8704,0.34371 1.8704,0.64894 l -0.1144,0.76348 -4.8098,19.01014 c -0.1144,0.42014 -0.1908,0.6871 -0.1908,1.29787 0,2.17584 1.6796,3.51192 3.4738,3.51192 1.2597,0 2.1758,-0.76348 2.8247,-2.13768 0.6872,-1.45058 1.1452,-3.66464 1.1452,-3.74097 0,-0.38167 -0.3437,-0.38167 -0.4581,-0.38167 -0.3816,0 -0.4201,0.15287 -0.5344,0.6871 -0.6108,2.48123 -1.3361,4.73345 -2.863,4.73345 -1.1452,0 -1.1452,-1.22152 -1.1452,-1.75596 0,-0.91614 0.041,-1.10703 0.2293,-1.83229 z" + id="path8939-7-9" /> + - + sodipodi:nodetypes="ccccccccc" /> + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;letter-spacing:normal;word-spacing:normal;text-anchor:start;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10.43299961;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" /> + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;letter-spacing:normal;word-spacing:normal;text-anchor:start;fill:#000000;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10.43299961;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" /> + + d="m 1069.8274,381.60603 v -0.092 -0.092 -0.0461 -0.092 l -0.045,-0.092 v -0.092 l -0.046,-0.0461 v -0.092 l -0.046,-0.0461 -0.046,-0.092 -0.045,-0.092 v -0.0461 l -0.046,-0.0461 -0.046,-0.092 -0.092,-0.0461 -0.046,-0.0461 -0.046,-0.0461 -0.046,-0.092 -0.092,-0.0461 -0.045,-0.0461 -0.046,-0.0461 h -0.092 l -0.092,-0.0461 -0.046,-0.0461 -0.092,-0.0461 h -0.092 l -0.092,-0.0461 h -0.092 -0.046 l -0.1374,-0.0461 h -0.092 -0.092 c -1.2366,0 -2.4732,1.19557 -2.4732,2.43712 0,0.87369 0.6412,1.65541 1.7404,1.65541 1.0534,0 2.4274,-1.05762 2.4274,-2.43712 z" + id="path8062-7-1" /> + d="m 1066.3924,398.84982 0.046,-0.13793 0.046,-0.092 0.045,-0.13793 v -0.092 l 0.046,-0.092 0.046,-0.092 0.046,-0.092 0.045,-0.092 v -0.0461 l 0.046,-0.092 v -0.092 l 0.046,-0.0461 0.045,-0.092 v -0.0461 l 0.046,-0.13794 0.046,-0.13794 0.045,-0.13793 0.046,-0.0461 v -0.092 l 0.046,-0.0461 v -0.092 l 0.045,-0.0461 0.046,-0.092 v -0.092 l 0.046,-0.092 0.045,-0.092 0.046,-0.092 v -0.13794 l 0.046,-0.092 c 0.3664,-0.91967 0.5954,-1.56344 0.5954,-2.43712 0,-2.06926 -1.4198,-3.77065 -3.7097,-3.77065 -4.3052,0 -6.0455,6.66761 -6.0455,7.08145 0,0.45982 0.458,0.45982 0.5496,0.45982 0.458,0 0.5038,-0.092 0.7328,-0.8277 1.2365,-4.32244 3.0685,-5.70195 4.6257,-5.70195 0.3664,0 1.145,0 1.145,1.47148 0,0.96565 -0.3207,1.9313 -0.5038,2.39114 -0.3664,1.19556 -2.4274,6.52965 -3.1602,8.46095 -0.458,1.19557 -1.0534,2.71303 -1.0534,3.67868 0,2.16122 1.5572,3.77064 3.7556,3.77064 4.2593,0 5.9539,-6.6676 5.9539,-7.08145 0,-0.45982 -0.4122,-0.45982 -0.5496,-0.45982 -0.458,0 -0.458,0.13793 -0.687,0.8277 -0.8244,2.89696 -2.3358,5.70195 -4.6257,5.70195 -0.7786,0 -1.0992,-0.45982 -1.0992,-1.51746 0,-1.14958 0.2748,-1.79335 1.3282,-4.59834 z" + id="path8064-9-23" /> + id="path8733-3" + d="m 1334.3738,381.89282 v 0 0 0 0 0 -0.0395 0 0 -0.0395 0 -0.0395 0 -0.0395 h -0.041 v -0.0395 0 -0.0395 h -0.041 v -0.0395 h -0.04 v 0 -0.0395 0 h -0.041 v 0 -0.0395 h -0.041 v 0 0 h -0.041 v 0 -0.0395 h -0.04 v 0 h -0.041 v 0 h -0.041 v 0 0 l -0.04,-0.0395 h -0.041 v 0 h -0.041 v 0 h -0.041 c -0.9057,0 -3.741,0.31632 -4.7648,0.39539 -0.3148,0.0395 -0.7482,0.0791 -0.7482,0.79073 0,0.47445 0.3544,0.47445 0.9451,0.47445 1.8902,0 1.9296,0.27673 1.9296,0.67212 l -0.118,0.79074 -5.6705,22.69408 c -0.1574,0.55351 -0.1574,0.63259 -0.1574,0.86981 0,0.90934 0.7876,1.10703 1.142,1.10703 0.5119,0 1.1026,-0.35585 1.3389,-0.83027 0.1969,-0.35585 1.9689,-7.67013 2.2052,-8.61901 1.3388,0.1186 4.5285,0.71166 4.5285,3.32109 0,0.27678 0,0.43491 -0.118,0.83027 -0.079,0.47445 -0.1574,0.94888 -0.1574,1.38378 0,2.33267 1.5752,3.91414 3.6228,3.91414 1.1814,0 2.2446,-0.63259 3.1109,-2.09544 0.9845,-1.73962 1.3782,-3.91414 1.3782,-3.99322 0,-0.39538 -0.3148,-0.39538 -0.4332,-0.39538 -0.3939,0 -0.4333,0.15813 -0.5907,0.71166 -0.7482,2.88618 -1.6539,4.90255 -3.3866,4.90255 -0.7482,0 -1.2601,-0.43491 -1.2601,-1.85822 0,-0.67213 0.1575,-1.58147 0.3149,-2.21406 0.1574,-0.67212 0.1574,-0.83027 0.1574,-1.22564 0,-2.56988 -2.4808,-3.67691 -5.828,-4.11182 1.2208,-0.71166 2.4809,-1.97683 3.3866,-2.92572 1.8901,-2.09544 3.7015,-3.79552 5.631,-3.79552 0.2364,0 0.2759,0 0.3544,0.0395 0.4728,0.0791 0.4728,0.0791 0.8269,0.31627 0.079,0.0395 0.079,0.0791 0.118,0.15813 -1.8508,0.1186 -2.2052,1.66054 -2.2052,2.13498 0,0.63259 0.4333,1.38379 1.4964,1.38379 1.0238,0 2.1264,-0.86981 2.1264,-2.41174 0,-1.1861 -0.9057,-2.49082 -2.6383,-2.49082 -1.1026,0 -2.914,0.31632 -5.7493,3.47924 -1.3388,1.50239 -2.8746,3.08386 -4.3316,3.67691 z" /> + id="path7890-0-41" + d="m 1071.3851,499.70601 v -0.0704 -0.0354 l -0.035,-0.0704 v -0.0704 -0.0704 l -0.035,-0.0354 v -0.0704 l -0.035,-0.0354 v -0.0704 l -0.035,-0.0704 -0.035,-0.0354 -0.035,-0.0704 -0.035,-0.0354 -0.035,-0.0354 -0.035,-0.0704 -0.035,-0.0354 -0.035,-0.0354 -0.07,-0.0354 -0.035,-0.0354 -0.07,-0.0354 -0.035,-0.0354 -0.07,-0.0354 -0.035,-0.0354 -0.07,-0.0354 -0.07,-0.0354 h -0.07 l -0.07,-0.0354 h -0.07 -0.07 l -0.07,-0.0354 h -0.07 -0.07 c -0.8062,0 -1.8577,0.80944 -1.8577,1.86525 0,0.70385 0.4907,1.26693 1.2969,1.26693 0.9464,0 1.8928,-0.91503 1.8928,-1.86525 z" /> + id="path7892-2-1" + d="m 1064.3397,523.39064 -0.035,0.24652 -0.07,0.24651 -0.1051,0.21108 -0.07,0.24651 -0.07,0.24651 -0.1051,0.21108 -0.1052,0.21108 -0.1051,0.21108 -0.1051,0.21108 -0.1052,0.21108 -0.1051,0.17616 -0.1402,0.21108 -0.1052,0.17615 -0.1402,0.17615 -0.1402,0.17615 -0.1402,0.14072 -0.1402,0.17616 -0.1402,0.14072 -0.1402,0.14072 -0.1753,0.10579 -0.1402,0.14072 -0.1752,0.10579 -0.1403,0.0704 -0.1752,0.10529 -0.1752,0.0704 -0.1753,0.0704 -0.1752,0.0704 -0.1402,0.0704 -0.2104,0.0354 h -0.1752 l -0.1752,0.0354 h -0.1753 c -0.2103,0 -0.7361,0 -1.367,-0.31688 1.0515,-0.24651 1.5773,-1.16139 1.5773,-1.86524 0,-0.56309 -0.3855,-1.23171 -1.3319,-1.23171 -0.8763,0 -1.8928,0.73903 -1.8928,2.00597 0,1.4077 1.402,2.18192 3.0845,2.18192 2.4536,0 5.6784,-1.8652 6.5547,-5.31405 l 3.2247,-12.8453 c 0.1753,-0.70385 0.1753,-1.19657 0.1753,-1.30211 0,-2.00602 -1.4722,-3.23773 -3.2248,-3.23773 -3.5402,0 -5.5381,5.10292 -5.5381,5.41964 0,0.3518 0.3505,0.3518 0.4206,0.3518 0.3155,0 0.3505,-0.0354 0.6309,-0.70385 0.8763,-2.14679 2.4536,-4.29353 4.3815,-4.29353 0.4907,0 1.1216,0.14072 1.1216,1.61889 0,0.80939 -0.1051,1.19652 -0.2453,1.79479 z" /> - - - - - - -   + d="m 1338.2386,500.52341 v 0 0 0 0 0 -0.0405 0 0 -0.0405 0 -0.0405 0 -0.0405 h -0.04 v -0.0405 0 -0.0405 h -0.041 v -0.0405 0 h -0.041 v -0.0405 0 h -0.04 v 0 -0.0405 h -0.041 v 0 0 h -0.041 v 0 -0.0405 h -0.041 v 0 h -0.04 v 0 0 h -0.041 v 0 l -0.041,-0.0405 v 0 h -0.04 -0.041 v 0 h -0.041 c -0.8814,0 -3.6406,0.30776 -4.6371,0.3847 -0.3067,0.0405 -0.7281,0.0769 -0.7281,0.80803 0,0.42317 0.3832,0.42317 0.9581,0.42317 1.8395,0 1.8778,0.34623 1.8778,0.65415 l -0.1149,0.7695 -4.8287,19.1615 c -0.1149,0.42317 -0.1913,0.69256 -0.1913,1.30818 0,2.19321 1.6861,3.53992 3.4873,3.53992 1.2647,0 2.1844,-0.76956 2.8359,-2.15474 0.6898,-1.46212 1.1497,-3.69374 1.1497,-3.77073 0,-0.3847 -0.3447,-0.3847 -0.4596,-0.3847 -0.3832,0 -0.4217,0.15388 -0.5366,0.69256 -0.6131,2.50102 -1.3413,4.77116 -2.8741,4.77116 -1.1497,0 -1.1497,-1.23124 -1.1497,-1.76993 0,-0.92348 0.041,-1.11584 0.2298,-1.84692 z" + id="path8939-3" /> + + + - - - + = + + + = + + + + + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;letter-spacing:normal;word-spacing:normal;text-anchor:start;fill:#000000;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10.43299961;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" /> + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;letter-spacing:normal;word-spacing:normal;text-anchor:start;fill:#000000;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10.43299961;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" /> + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;letter-spacing:normal;word-spacing:normal;text-anchor:start;fill:#000000;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10.43299961;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" /> + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;letter-spacing:normal;word-spacing:normal;text-anchor:start;fill:#000000;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10.43299961;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" /> + - + d="m 229.86,484.16 v 0 0 0.01 0 0 0.01 h -0.01 v 0 0.01 0 0.01 0 l -0.01,0.01 v 0 0 0.01 h -0.01 v 0.01 0 h -0.01 v 0.01 h -0.01 v 0 h -0.01 v 0.01 0 h -0.01 v 0 0 h -0.01 v 0 0 h -0.01 v 0 l -0.01,0.01 v 0 0 h -0.01 v 0 c -0.05,0 -0.06,-0.01 -0.18,-0.15 l -0.48,-0.57 c -0.26,0.47 -0.78,0.72 -1.42,0.72 -1.27,0 -2.46,-1.15 -2.46,-2.36 0,-0.8 0.52,-1.26 1.03,-1.41 l 1.07,-0.28 c 0.37,-0.09 0.92,-0.24 0.92,-1.06 0,-0.89 -0.82,-1.83 -1.8,-1.83 -0.64,0 -1.74,0.22 -1.74,1.46 0,0.24 0.05,0.48 0.06,0.54 0.01,0.04 0.02,0.04 0.02,0.06 0,0.1 -0.07,0.11 -0.12,0.11 -0.05,0 -0.07,-0.01 -0.1,-0.04 -0.04,-0.04 -0.6,-2.31 -0.6,-2.34 0,-0.06 0.05,-0.1 0.11,-0.1 0.05,0 0.06,0.01 0.18,0.15 l 0.49,0.57 c 0.43,-0.58 1.1,-0.72 1.68,-0.72 1.36,0 2.53,1.33 2.53,2.56 0,0.69 -0.34,1.03 -0.49,1.17 -0.22,0.23 -0.38,0.27 -1.26,0.5 -0.22,0.06 -0.58,0.16 -0.67,0.18 -0.27,0.09 -0.61,0.38 -0.61,0.9 0,0.81 0.8,1.66 1.75,1.66 0.82,0 1.43,-0.43 1.43,-1.55 0,-0.32 -0.04,-0.5 -0.04,-0.55 0,-0.02 0,-0.11 0.12,-0.11 0.1,0 0.11,0.03 0.15,0.21 z" + id="path4624-6" /> + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;letter-spacing:normal;word-spacing:normal;text-anchor:start;fill:#000000;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10.43299961;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" /> + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;letter-spacing:normal;word-spacing:normal;text-anchor:start;fill:#000000;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10.43299961;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" /> + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;letter-spacing:normal;word-spacing:normal;text-anchor:start;fill:#000000;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10.43299961;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" /> + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;letter-spacing:normal;word-spacing:normal;text-anchor:start;fill:#000000;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10.43299961;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" /> + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;letter-spacing:normal;word-spacing:normal;text-anchor:start;fill:#000000;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10.43299961;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" /> - + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;letter-spacing:normal;word-spacing:normal;text-anchor:start;fill:#000000;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10.43299961;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" /> + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;letter-spacing:normal;word-spacing:normal;text-anchor:start;fill:#000000;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10.43299961;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" /> + transform="matrix(5.061867,0,0,5.061867,634.64875,-65.400275)" + id="g3118-5"> + id="path5110-4-0" /> + id="path5112-8-24" /> + id="path5116-8-8" /> + id="path5945-4-5-0" /> + id="path5116-8-1-0" /> + + + + + + + + diff --git a/doc/recursions/IntaRNA.PredictorMfe2d.svg b/doc/recursions/IntaRNA.PredictorMfe2d.svg index bd5dc4b0..a0b0f5e5 100644 --- a/doc/recursions/IntaRNA.PredictorMfe2d.svg +++ b/doc/recursions/IntaRNA.PredictorMfe2d.svg @@ -10,13 +10,13 @@ xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="716.3551" - height="427.61667" - viewBox="0 0 141.51992 84.478052" + width="716.33838" + height="295.48615" + viewBox="0 0 141.51662 58.374932" version="1.1" id="svg8899" - inkscape:version="0.92.3 (2405546, 2018-03-11)" - sodipodi:docname="IntarnaPredictor.svg"> + inkscape:version="0.48.4 r9939" + sodipodi:docname="IntaRNA.PredictorMfe2d.svg"> @@ -59,7 +59,7 @@ inkscape:label="Layer 1" inkscape:groupmode="layer" id="layer1" - transform="translate(-16.002227,-68.275928)"> + transform="translate(-16.002223,-81.25815)"> @@ -122,7 +122,7 @@ height="15.881528" width="24.733528" id="rect5853-7-9" - style="fill:#005a00;stroke:#000000;stroke-width:0.84666669;stroke-linecap:square;stroke-miterlimit:10.43299961;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;fill-opacity:0.58823532" /> + style="fill:#005a00;fill-opacity:0.58823529;stroke:#000000;stroke-width:0.84666669;stroke-linecap:square;stroke-miterlimit:10.43299961;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" /> + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;letter-spacing:normal;word-spacing:normal;text-anchor:start;fill:#000000;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10.43299961;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" /> + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;letter-spacing:normal;word-spacing:normal;text-anchor:start;fill:#000000;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10.43299961;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" /> + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;letter-spacing:normal;word-spacing:normal;text-anchor:start;fill:#000000;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10.43299961;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" /> + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;letter-spacing:normal;word-spacing:normal;text-anchor:start;fill:#000000;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10.43299961;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" /> + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;letter-spacing:normal;word-spacing:normal;text-anchor:start;fill:#000000;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10.43299961;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" /> + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;letter-spacing:normal;word-spacing:normal;text-anchor:start;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10.43299961;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" /> + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;letter-spacing:normal;word-spacing:normal;text-anchor:start;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10.43299961;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" /> + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;letter-spacing:normal;word-spacing:normal;text-anchor:start;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10.43299961;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" /> + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;letter-spacing:normal;word-spacing:normal;text-anchor:start;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10.43299961;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" /> + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;letter-spacing:normal;word-spacing:normal;text-anchor:start;fill:#000000;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10.43299961;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" /> + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;letter-spacing:normal;word-spacing:normal;text-anchor:start;fill:#000000;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10.43299961;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" /> + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;letter-spacing:normal;word-spacing:normal;text-anchor:start;fill:#000000;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10.43299961;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" /> + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;letter-spacing:normal;word-spacing:normal;text-anchor:start;fill:#000000;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10.43299961;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" /> + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;letter-spacing:normal;word-spacing:normal;text-anchor:start;fill:#000000;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10.43299961;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" /> + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;letter-spacing:normal;word-spacing:normal;text-anchor:start;fill:#000000;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10.43299961;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" /> + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;letter-spacing:normal;word-spacing:normal;text-anchor:start;fill:#000000;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10.43299961;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" /> + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;letter-spacing:normal;word-spacing:normal;text-anchor:start;fill:#000000;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10.43299961;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" /> + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;letter-spacing:normal;word-spacing:normal;text-anchor:start;fill:#000000;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10.43299961;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" /> + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;letter-spacing:normal;word-spacing:normal;text-anchor:start;fill:#000000;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10.43299961;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" /> + style="fill:#005a00;fill-opacity:0.58823529;stroke:#000000;stroke-width:0.84666669;stroke-linecap:square;stroke-miterlimit:10.43299961;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" /> + d="m 127.84274,131.05868 c -1.16957,0.29934 -1.80855,0.59868 -3.53822,0.89802 -1.44997,0.13574 -2.99912,0.0436 -4.91799,-0.89802 -1.3089,0.373 -1.23148,0.84253 -4.23404,1.09759 -2.09684,0.0224 -2.67435,-0.73086 -4.00899,-1.09759 l 0.41744,-15.86995 3.25328,-0.84667 c 1.19283,-0.69299 5.49296,0.19249 5.94669,0.49823 5.18725,-2.31403 4.84555,0.2141 7.04655,0.38372" + style="fill:none;stroke:#000000;stroke-width:0.85737354;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /> - - - - - - - - - - - - - - - - - - - + transform="translate(0.29229679,13.82889)"> @@ -26,19 +25,19 @@ borderopacity="1.0" inkscape:pageopacity="0.0" inkscape:pageshadow="2" - inkscape:zoom="1.979899" - inkscape:cx="212.05912" - inkscape:cy="140.61025" + inkscape:zoom="0.35" + inkscape:cx="598.34736" + inkscape:cy="437.55639" inkscape:document-units="mm" - inkscape:current-layer="g1021" + inkscape:current-layer="g6491" showgrid="false" fit-margin-top="0" fit-margin-left="0" fit-margin-right="0" fit-margin-bottom="0" - inkscape:window-width="1820" - inkscape:window-height="1178" - inkscape:window-x="1458" + inkscape:window-width="1266" + inkscape:window-height="746" + inkscape:window-x="92" inkscape:window-y="-8" inkscape:window-maximized="1" units="mm" /> @@ -58,286 +57,252 @@ inkscape:label="Layer 1" inkscape:groupmode="layer" id="layer1" - transform="translate(-136.17903,-43.031244)"> - - - - - - - - - - - - - - - - - + transform="translate(-136.17903,-42.329674)"> - - - - - - - + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;letter-spacing:normal;word-spacing:normal;text-anchor:start;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10.43299961;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" /> + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;letter-spacing:normal;word-spacing:normal;text-anchor:start;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10.43299961;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" /> - - - - + id="rect5853-7-9" + style="fill:#e6e6e6;fill-opacity:0.96078431;stroke:#000000;stroke-width:1.2095238;stroke-linecap:square;stroke-miterlimit:10.43299961;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" /> - + d="m 163.6573,83.094609 0.0161,-0.04838 0.0161,-0.04838 0.0161,-0.04838 0.0161,-0.04838 v -0.04838 l 0.0161,-0.04838 0.0161,-0.03225 0.0161,-0.03225 0.0161,-0.03225 0.0161,-0.03225 0.0161,-0.03225 0.0323,-0.03225 0.0161,-0.03225 0.0323,-0.01613 0.0161,-0.03225 0.0323,-0.01613 0.0323,-0.03225 0.0484,-0.01613 0.0323,-0.01613 0.0484,-0.01613 0.0484,-0.01613 h 0.0484 l 0.0322,-0.01613 h 0.0323 0.0323 l 0.0323,-0.01613 h 0.0323 0.0322 0.0323 l 0.0323,-0.01613 h 0.0323 0.0484 0.0323 0.0484 0.0484 l 0.0323,-0.01613 h 0.0484 0.0484 0.0484 0.0484 0.0645 0.0484 c 0.4193,0 0.54832,0 0.54832,-0.32254 0,-0.177397 -0.1774,-0.177397 -0.22578,-0.177397 -0.45156,0 -1.6127,0.04838 -2.06426,0.04838 -0.45155,0 -1.59657,-0.04838 -2.06425,-0.04838 -0.12902,0 -0.30641,0 -0.30641,0.32254 0,0.177397 0.14514,0.177397 0.45155,0.177397 0.0323,0 0.33867,0 0.61283,0.03225 0.29028,0.03225 0.43543,0.04838 0.43543,0.258032 0,0.06451 -0.0161,0.09676 -0.0645,0.306412 l -0.96762,3.918857 h -4.9026 l 0.95149,-3.773714 c 0.14514,-0.580571 0.19352,-0.741841 1.33854,-0.741841 0.4193,0 0.54832,0 0.54832,-0.32254 0,-0.177397 -0.16127,-0.177397 -0.20966,-0.177397 -0.45155,0 -1.61269,0.04838 -2.06425,0.04838 -0.46768,0 -1.6127,-0.04838 -2.08038,-0.04838 -0.12902,0 -0.29029,0 -0.29029,0.32254 0,0.177397 0.14515,0.177397 0.43543,0.177397 0.0323,0 0.33867,0 0.61283,0.03225 0.29028,0.03225 0.43543,0.04838 0.43543,0.258032 0,0.06451 -0.0161,0.112888 -0.0645,0.306412 l -2.14489,8.627937 c -0.16127,0.628952 -0.19352,0.757968 -1.46756,0.757968 -0.29028,0 -0.43542,0 -0.43542,0.32254 0,0.177396 0.19352,0.177396 0.22577,0.177396 0.45156,0 1.59658,-0.04838 2.04813,-0.04838 0.32254,0 0.67733,0.01613 1.016,0.01613 0.35479,0 0.70959,0.03225 1.04825,0.03225 0.12902,0 0.32254,0 0.32254,-0.322539 0,-0.177397 -0.14514,-0.177397 -0.45155,-0.177397 -0.5967,0 -1.04826,0 -1.04826,-0.290286 0,-0.09676 0.0323,-0.177397 0.0484,-0.274159 l 1.09663,-4.402666 h 4.9026 c -0.67733,2.660952 -1.04825,4.193016 -1.11276,4.43492 -0.16127,0.516064 -0.46768,0.532191 -1.45143,0.532191 -0.2419,0 -0.38704,0 -0.38704,0.32254 0,0.177396 0.19352,0.177396 0.22577,0.177396 0.45156,0 1.58045,-0.04838 2.032,-0.04838 0.33867,0 0.69346,0.01613 1.03213,0.01613 0.35479,0 0.70959,0.03225 1.04825,0.03225 0.12902,0 0.32254,0 0.32254,-0.322539 0,-0.177397 -0.14514,-0.177397 -0.45155,-0.177397 -0.5967,0 -1.04826,0 -1.04826,-0.290286 0,-0.09676 0.0323,-0.177397 0.0484,-0.274159 z" + id="path7548-6" /> - + sodipodi:nodetypes="ccscccccccccccccccccccccccccccccccccccscc" /> - - - + id="g6491" + transform="translate(0,4.0037388)"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + width="21.524111" + height="10.548239" + x="246.79298" + y="59.997478" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id="g6626" + transform="translate(-2.0203051,88.893423)"> + + + + + + + + + + + + + + + + + + From 386f62327109695375d13a8bf7bff98c66c6fd00 Mon Sep 17 00:00:00 2001 From: martin-mann Date: Thu, 11 Feb 2021 20:15:26 +0100 Subject: [PATCH 05/21] heuristic recursions --- ...ntaRNA-outNoLP.PredictorMfe2dHeuristic.svg | 558 ++++++ ...NA-outNoLP.PredictorMfe2dHeuristicSeed.svg | 1500 +++++++++++++++++ .../IntaRNA.PredictorMfe2dHeuristic.svg | 342 ++++ .../IntaRNA.PredictorMfe2dHeuristicSeed.svg | 570 +++++++ 4 files changed, 2970 insertions(+) create mode 100644 doc/recursions/IntaRNA-outNoLP.PredictorMfe2dHeuristic.svg create mode 100644 doc/recursions/IntaRNA-outNoLP.PredictorMfe2dHeuristicSeed.svg create mode 100644 doc/recursions/IntaRNA.PredictorMfe2dHeuristic.svg create mode 100644 doc/recursions/IntaRNA.PredictorMfe2dHeuristicSeed.svg diff --git a/doc/recursions/IntaRNA-outNoLP.PredictorMfe2dHeuristic.svg b/doc/recursions/IntaRNA-outNoLP.PredictorMfe2dHeuristic.svg new file mode 100644 index 00000000..aac1bcc1 --- /dev/null +++ b/doc/recursions/IntaRNA-outNoLP.PredictorMfe2dHeuristic.svg @@ -0,0 +1,558 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/recursions/IntaRNA-outNoLP.PredictorMfe2dHeuristicSeed.svg b/doc/recursions/IntaRNA-outNoLP.PredictorMfe2dHeuristicSeed.svg new file mode 100644 index 00000000..84f611ee --- /dev/null +++ b/doc/recursions/IntaRNA-outNoLP.PredictorMfe2dHeuristicSeed.svg @@ -0,0 +1,1500 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +   + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/recursions/IntaRNA.PredictorMfe2dHeuristic.svg b/doc/recursions/IntaRNA.PredictorMfe2dHeuristic.svg new file mode 100644 index 00000000..400ccf6e --- /dev/null +++ b/doc/recursions/IntaRNA.PredictorMfe2dHeuristic.svg @@ -0,0 +1,342 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/recursions/IntaRNA.PredictorMfe2dHeuristicSeed.svg b/doc/recursions/IntaRNA.PredictorMfe2dHeuristicSeed.svg new file mode 100644 index 00000000..51e4d496 --- /dev/null +++ b/doc/recursions/IntaRNA.PredictorMfe2dHeuristicSeed.svg @@ -0,0 +1,570 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 103109a75a8cb2683838fd0ccfbf03a24dcabe98 Mon Sep 17 00:00:00 2001 From: martin-mann Date: Thu, 11 Feb 2021 21:04:30 +0100 Subject: [PATCH 06/21] tests corrected --- src/IntaRNA/AccessibilityFromStream.cpp | 6 ++-- tests/AccessibilityFromStream_test.cpp | 48 ++++++++----------------- 2 files changed, 17 insertions(+), 37 deletions(-) diff --git a/src/IntaRNA/AccessibilityFromStream.cpp b/src/IntaRNA/AccessibilityFromStream.cpp index 0f555a7f..d486c189 100644 --- a/src/IntaRNA/AccessibilityFromStream.cpp +++ b/src/IntaRNA/AccessibilityFromStream.cpp @@ -102,7 +102,7 @@ parseRNAplfold_text( std::istream & inStream, const Z_type RT, const bool parseP } // resize data structure to fill - edValues.resize( getSequence().size(), getSequence().size(), 0, getMaxLength() ); + edValues.resize( getSequence().size(), getSequence().size(), 0, 1+getMaxLength() ); // TODO rewrite to support "nan" and "inf" parsing via boost::spirit::qi // http://stackoverflow.com/questions/11420263/is-it-possible-to-read-infinity-or-nan-values-using-input-streams @@ -136,7 +136,7 @@ parseRNAplfold_text( std::istream & inStream, const Z_type RT, const bool parseP // parse probabilities or EDs for this line and store double curVal; - size_t minI = j - std::min( j, getMaxLength() ); + size_t minI = j - std::min( j, 1+getMaxLength() ); for ( size_t i = j; i>minI; i--) { if ( inStream >>curVal ) { // check if we parse probabilities @@ -163,7 +163,7 @@ parseRNAplfold_text( std::istream & inStream, const Z_type RT, const bool parseP } } // check if full line was already parsed - if (j < maxAvailLength || minI > 0) { + if (j < 1+maxAvailLength || minI > 0) { // skip rest till end of line inStream.ignore(std::numeric_limits::max(), '\n'); } diff --git a/tests/AccessibilityFromStream_test.cpp b/tests/AccessibilityFromStream_test.cpp index d6ff0d08..7dab2a9c 100644 --- a/tests/AccessibilityFromStream_test.cpp +++ b/tests/AccessibilityFromStream_test.cpp @@ -62,19 +62,19 @@ TEST_CASE( "AccessibilityFromStream", "[AccessibilityFromStream]" ) { std::istringstream accStream(accString); // trigger parsing - AccessibilityFromStream acc( rna, 10, NULL, accStream, AccessibilityFromStream::Pu_RNAplfold_Text, 1.0 ); + AccessibilityFromStream acc( rna, 9, NULL, accStream, AccessibilityFromStream::Pu_RNAplfold_Text, 1.0 ); // std::cerr <<"orig data:\n" < 0.998 ); // REQUIRE( std::exp( - acc.getED(29, 29) ) < 0.999 ); -// REQUIRE( std::exp( - acc.getED(20, 29) ) > 0.0006 ); -// REQUIRE( std::exp( - acc.getED(20, 29) ) < 0.0007 ); +// REQUIRE( std::exp( - acc.getED(21, 29) ) > 0.0001 ); +// REQUIRE( std::exp( - acc.getED(21, 29) ) < 0.00011 ); } SECTION("Pu_RNAplfold output reparsed") { @@ -83,31 +83,21 @@ TEST_CASE( "AccessibilityFromStream", "[AccessibilityFromStream]" ) { std::istringstream accStream(accString); // trigger parsing - AccessibilityFromStream acc( rna, 10, NULL, accStream, AccessibilityFromStream::Pu_RNAplfold_Text, 1.0 ); + AccessibilityFromStream acc( rna, 9, NULL, accStream, AccessibilityFromStream::Pu_RNAplfold_Text, 1.0 ); // check elements REQUIRE( acc.getED(29, 29) == 0 ); - REQUIRE( acc.getED(20, 29) == 732 ); -// // old checks not working for integer-based ED type -// REQUIRE( std::exp( - acc.getED(29, 29) ) > 0.998 ); -// REQUIRE( std::exp( - acc.getED(29, 29) ) < 0.999 ); -// REQUIRE( std::exp( - acc.getED(20, 29) ) > 0.0006 ); -// REQUIRE( std::exp( - acc.getED(20, 29) ) < 0.0007 ); + REQUIRE( acc.getED(21, 29) == 690 ); std::stringstream accStream2; acc.writeRNAplfold_Pu_text( accStream2, 1.0 ); // trigger parsing - AccessibilityFromStream acc2( rna, 10, NULL, accStream2, AccessibilityFromStream::Pu_RNAplfold_Text, 1.0 ); + AccessibilityFromStream acc2( rna, 9, NULL, accStream2, AccessibilityFromStream::Pu_RNAplfold_Text, 1.0 ); // check elements REQUIRE( acc.getED(29, 29) == 0 ); - REQUIRE( acc.getED(20, 29) == 732 ); -// // old checks not working for integer-based ED type -// REQUIRE( std::exp( - acc2.getED(29, 29) ) > 0.998 ); -// REQUIRE( std::exp( - acc2.getED(29, 29) ) < 0.999 ); -// REQUIRE( std::exp( - acc2.getED(20, 29) ) > 0.0006 ); -// REQUIRE( std::exp( - acc2.getED(20, 29) ) < 0.0007 ); + REQUIRE( acc.getED(21, 29) == 690 ); } @@ -117,31 +107,21 @@ TEST_CASE( "AccessibilityFromStream", "[AccessibilityFromStream]" ) { std::istringstream accStream(accString); // trigger parsing - AccessibilityFromStream acc( rna, 10, NULL, accStream, AccessibilityFromStream::Pu_RNAplfold_Text, 1.0 ); + AccessibilityFromStream acc( rna, 9, NULL, accStream, AccessibilityFromStream::Pu_RNAplfold_Text, 1.0 ); // check elements REQUIRE( acc.getED(29, 29) == 0 ); - REQUIRE( acc.getED(20, 29) == 732 ); -// // old checks not working for integer-based ED type -// REQUIRE( std::exp( - acc.getED(29, 29) ) > 0.998 ); -// REQUIRE( std::exp( - acc.getED(29, 29) ) < 0.999 ); -// REQUIRE( std::exp( - acc.getED(20, 29) ) > 0.0006 ); -// REQUIRE( std::exp( - acc.getED(20, 29) ) < 0.0007 ); + REQUIRE( acc.getED(21, 29) == 690 ); std::stringstream accStream2; acc.writeRNAplfold_ED_text( accStream2 ); // trigger parsing - AccessibilityFromStream acc2( rna, 10, NULL, accStream2, AccessibilityFromStream::ED_RNAplfold_Text, 1.0 ); + AccessibilityFromStream acc2( rna, 9, NULL, accStream2, AccessibilityFromStream::ED_RNAplfold_Text, 1.0 ); // check elements REQUIRE( acc.getED(29, 29) == 0 ); - REQUIRE( acc.getED(20, 29) == 732 ); -// // old checks not working for integer-based ED type -// REQUIRE( std::exp( - acc2.getED(29, 29) ) > 0.998 ); -// REQUIRE( std::exp( - acc2.getED(29, 29) ) < 0.999 ); -// REQUIRE( std::exp( - acc2.getED(20, 29) ) > 0.0006 ); -// REQUIRE( std::exp( - acc2.getED(20, 29) ) < 0.0007 ); + REQUIRE( acc.getED(21, 29) == 690 ); } @@ -150,7 +130,7 @@ TEST_CASE( "AccessibilityFromStream", "[AccessibilityFromStream]" ) { std::istringstream accStream(accString); RnaSequence rnaDouble("tooLong",seq+seq); // trigger parsing exception - REQUIRE_THROWS( AccessibilityFromStream( rnaDouble, 10, NULL, accStream, AccessibilityFromStream::Pu_RNAplfold_Text, 1.0 ) ); + REQUIRE_THROWS( AccessibilityFromStream( rnaDouble, 9, NULL, accStream, AccessibilityFromStream::Pu_RNAplfold_Text, 1.0 ) ); } SECTION("test decomposeByMaxED()") { @@ -158,7 +138,7 @@ TEST_CASE( "AccessibilityFromStream", "[AccessibilityFromStream]" ) { std::istringstream accStream(accString); RnaSequence rna("tooLong",seq); // read PU values for fake ED values - AccessibilityFromStream acc( rna, 10, NULL, accStream, AccessibilityFromStream::ED_RNAplfold_Text, 1.0 ); + AccessibilityFromStream acc( rna, 9, NULL, accStream, AccessibilityFromStream::ED_RNAplfold_Text, 1.0 ); // new validation values for integer-based ED type just copied from failing tests // ! not manually checked for sanity ! From 3dfc9cc53c3d6fa1258674418097063b4f2c415a Mon Sep 17 00:00:00 2001 From: martin-mann Date: Thu, 11 Feb 2021 21:05:22 +0100 Subject: [PATCH 07/21] docu of changes --- ChangeLog | 3 +++ 1 file changed, 3 insertions(+) diff --git a/ChangeLog b/ChangeLog index 0498425f..691376b7 100644 --- a/ChangeLog +++ b/ChangeLog @@ -43,6 +43,9 @@ * IntaRNA/PredictorMfe2dHeuristicSeed : * IntaRNA/PredictorMfeEns2dHeuristic : * bugfix outNoLP : missing recursion cases + * IntaRNA/AccessibilityFromStream : + * bugfix read from stream + * test updated 201210 Martin Raden * IntaRNA/AccessibilityFromStream : From e095ebbd836f498c1ac88b9e2f0e5a6a3a72bc92 Mon Sep 17 00:00:00 2001 From: Martin Raden Date: Wed, 17 Mar 2021 11:27:31 +0100 Subject: [PATCH 08/21] shape data example --- README.md | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index a14b1d7d..16e67f13 100644 --- a/README.md +++ b/README.md @@ -1182,10 +1182,28 @@ molecule. IntaRNA supports such data by interfacing the Vienna RNA package capabilities for SHAPE reactivity data incorporation, see Lorenz et al. ([2015](https://doi.org/10.1093/bioinformatics/btv523), [2016](https://dx.doi.org/10.1186%2Fs13015-016-0070-z)) or the [RNAfold manpage](https://www.tbi.univie.ac.at/RNA/RNAfold.1.html). +To use this feature, ViennaRNA-based accessibility computation is needed, +i.e. `--t|qAcc=C`, which is the default mode (no action required). The SHAPE reactivity data can be provided via file using `--qShape` or -`--tShape` for query or target sequence, respectively. -Independently for each, it is possible +`--tShape` for query or target sequence, respectively. The input format is a +space-separated 3-column format providing position, nucleotide and reactivity value as +exmemplified below. + +```[bash] + 1 G 0.134 + 2 C 0.044 + 3 C 0.057 + 4 G 0.114 + 5 U 0.094 + 6 C 0.035 + 7 G 0.909 + 8 C 0.224 + 9 C 0.529 + 10 A 1.475 +``` + +Independently for each sequence, it is possible to define the methods to be used to convert the data into pseudo energies and pairing probabilities. The respective IntaRNA arguments are `--qShapeMethod`|`--tShapeMethod` @@ -1193,6 +1211,13 @@ and `--qShapeConversion`|`--tShapeConversion`, which mimics the according tool arguments in the Vienna RNA package (see e.g. the [RNAfold manpage](https://www.tbi.univie.ac.at/RNA/RNAfold.1.html)). +An example call that shows the effect of SHAPE data incorporation is given below (assuming the SHAPE data from above is stored in +the file `data-SHAPE.txt`). +```[bash] +IntaRNA -q GCCGUCGCCA -t GCCGUCGCCA --tShape=data-SHAPE.txt --noseed --out=qAcc:STDOUT --out=tAcc:STDERR --out=/dev/null +``` + + For further details, please refer to our respective publication - [Integration of accessibility data from structure probing into RNA-RNA interaction prediction.](https://doi.org/10.1093/bioinformatics/bty1029) From 52014a522797d3da475a4fc8c71893edd049e488 Mon Sep 17 00:00:00 2001 From: Martin Raden Date: Wed, 17 Mar 2021 11:28:21 +0100 Subject: [PATCH 09/21] shape example call simplified --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 16e67f13..38477603 100644 --- a/README.md +++ b/README.md @@ -1214,7 +1214,7 @@ tool arguments in the Vienna RNA package (see e.g. the An example call that shows the effect of SHAPE data incorporation is given below (assuming the SHAPE data from above is stored in the file `data-SHAPE.txt`). ```[bash] -IntaRNA -q GCCGUCGCCA -t GCCGUCGCCA --tShape=data-SHAPE.txt --noseed --out=qAcc:STDOUT --out=tAcc:STDERR --out=/dev/null +IntaRNA -q GCCGUCGCCA -t GCCGUCGCCA --tShape=data-SHAPE.txt --out=qAcc:STDOUT --out=tAcc:STDERR --out=/dev/null ``` From 7c60c485655fe553411aacd82d03c7a4412f9f0d Mon Sep 17 00:00:00 2001 From: Martin Raden Date: Fri, 7 Jan 2022 21:21:18 +0100 Subject: [PATCH 10/21] replace deprecated expand_scale() with expansion() --- R/IntaRNA_plotRegions.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/IntaRNA_plotRegions.R b/R/IntaRNA_plotRegions.R index 99048fd2..bf7306b5 100644 --- a/R/IntaRNA_plotRegions.R +++ b/R/IntaRNA_plotRegions.R @@ -123,7 +123,7 @@ coveragePlot = geom_density() + ylab("coverage") + xlab( ifelse( is.null(title) , "position" , title ) ) + - scale_y_continuous(position = "right", expand=expand_scale(mult = c(0, .02))) + + scale_y_continuous(position = "right", expand=expansion(mult = c(0, .02))) + scale_x_continuous(expand = c(0, 0), limits=c(xmin,xmax)); if (!is.null(title)) { From 576abeddf7ad677e90a9b31e97d14fd0cdc3589f Mon Sep 17 00:00:00 2001 From: Martin Raden Date: Mon, 10 Jan 2022 10:43:22 +0100 Subject: [PATCH 11/21] update grep to be working without "-P" option --- configure.ac | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/configure.ac b/configure.ac index d0b2f54e..6259bc5e 100644 --- a/configure.ac +++ b/configure.ac @@ -411,7 +411,7 @@ AS_IF([test "$DEPENDENCYNOTFOUND" = "1"], [ ########################################################################## # get available personalities -AC_SUBST([PERSONALITIES],[`grep -P "^\\s+case\\s+IntaRNA\\S+\\s*:\\s*return" ./src/bin/CommandLineParsing.h | sed "s/^\\s*case\\s\\+\\(IntaRNA\\S*\\)\\s\\+:\\s\\+return.*/\\1/g" | tr "\\n" " "`]) +AC_SUBST([PERSONALITIES],[`grep "^\\s*case\\s*IntaRNA\\S*\\s*:\\s*return" ./src/bin/CommandLineParsing.h | sed "s/^\\s*case\\s\\+\\(IntaRNA\\S*\\)\\s\\+:\\s\\+return.*/\\1/g" | tr "\\n" " "`]) ########################################################################## @@ -476,4 +476,4 @@ You can run 'make', 'make tests' and 'make install' now! Run 'make install prefix=XYZ' for installation in an alternative directory. ====================================== -]) \ No newline at end of file +]) From 58766b57a8a8312302f6d36618bc3abaaa95ebd7 Mon Sep 17 00:00:00 2001 From: Martin Raden Date: Mon, 10 Jan 2022 16:53:53 +0100 Subject: [PATCH 12/21] recent changes + v3.2.3 --- ChangeLog | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/ChangeLog b/ChangeLog index 691376b7..76abec0e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -10,6 +10,11 @@ # changes in development version since last release ################################################################################ + +################################################################################ +### version 3.2.2 +################################################################################ + # IntaRNA - BUGFIX: maximal interaction length correction for precomputed accessibility data was one to large (wrong dangling end computation for maximally long RRIs) @@ -18,10 +23,16 @@ ignored (thanks to Sebastian Holler) - BUGFIX: outNoLP option was not correctly implemented (missing recursion cases) and was thus missing interactions +- BUGFIX: osx: configure adaptation to old grep version in osx ################################################################################ ################################################################################ +220110 Martin Raden + * configure.ac : + * rewrite of grep personality call to be compatible with old grep version on osx + + 210211 Martin Raden * IntaRNA/SeedConstraint : * constructor: bp>2 check only if no explicit seed present @@ -71,6 +82,8 @@ * bin/CommandLineParsing : * changing import and usage of boost::bind and boost::placeholders namespace (thanks to Behra Phani Rama Krishna) + * R/IntaRNA_plotRegions.R : + * replace deprecated expand_scale() with expansion() 200615 Martin Raden * IntaRNA/OutputConstraint : From efec9904b3e1d0a0d871752fe55a1b58c70cf2e9 Mon Sep 17 00:00:00 2001 From: Martin Raden Date: Mon, 10 Jan 2022 17:01:51 +0100 Subject: [PATCH 13/21] Update ChangeLog --- ChangeLog | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 76abec0e..bc61f4a3 100644 --- a/ChangeLog +++ b/ChangeLog @@ -31,7 +31,9 @@ 220110 Martin Raden * configure.ac : * rewrite of grep personality call to be compatible with old grep version on osx - + +201204 Simon Bray (thanks!) : + * replace travis with github action 210211 Martin Raden * IntaRNA/SeedConstraint : From 665ee4f26e3b11c88ebd2b6eef81adf68e8bdf48 Mon Sep 17 00:00:00 2001 From: Martin Raden Date: Mon, 10 Jan 2022 17:23:23 +0100 Subject: [PATCH 14/21] conda libboost removed --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 71b1695d..f5bcaccc 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -19,7 +19,7 @@ jobs: - name: Create conda environement run: | source `conda info --base`/etc/profile.d/conda.sh - conda create -q -n build-IntaRNA -c conda-forge -c bioconda gcc_linux-64 gxx_linux-64 boost-cpp libboost viennarna>=2.4.14 pkgconfig + conda create -q -n build-IntaRNA -c conda-forge -c bioconda gcc_linux-64 gxx_linux-64 boost-cpp viennarna>=2.4.14 pkgconfig conda activate build-IntaRNA - name: Script run: | From 6dfdd1cdfbaa8714c2879dcafdd3d33c65889419 Mon Sep 17 00:00:00 2001 From: Martin Raden Date: Mon, 10 Jan 2022 17:27:46 +0100 Subject: [PATCH 15/21] explicit boost lib dir --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index f5bcaccc..c871a0a6 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -28,7 +28,7 @@ jobs: # generate autotools's files bash autotools-init.sh # run configure (without boost checks) - ./configure --prefix=$HOME/IntaRNA --with-vrna=`conda info --base`/envs/build-IntaRNA --with-boost=no --without-zlib + ./configure --prefix=$HOME/IntaRNA --with-vrna=`conda info --base`/envs/build-IntaRNA --with-boost-libdir=`conda info --base`/envs/build-IntaRNA/lib --without-zlib # compile documentation # - make doxygen-doc # compile, test and install IntaRNA From d3e4b876a6012b5933be802b54c607f162fd07e0 Mon Sep 17 00:00:00 2001 From: Martin Raden Date: Mon, 10 Jan 2022 17:30:50 +0100 Subject: [PATCH 16/21] boost dir missing --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index c871a0a6..c57392fe 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -28,7 +28,7 @@ jobs: # generate autotools's files bash autotools-init.sh # run configure (without boost checks) - ./configure --prefix=$HOME/IntaRNA --with-vrna=`conda info --base`/envs/build-IntaRNA --with-boost-libdir=`conda info --base`/envs/build-IntaRNA/lib --without-zlib + ./configure --prefix=$HOME/IntaRNA --with-vrna=`conda info --base`/envs/build-IntaRNA --with-boost=`conda info --base`/envs/build-IntaRNA --with-boost-libdir=`conda info --base`/envs/build-IntaRNA/lib --without-zlib # compile documentation # - make doxygen-doc # compile, test and install IntaRNA From ea21cb1ea5de169a3adf99a1fc708237f2075eff Mon Sep 17 00:00:00 2001 From: Martin Raden Date: Mon, 10 Jan 2022 17:46:05 +0100 Subject: [PATCH 17/21] reset script order --- .github/workflows/build.yml | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index c57392fe..76d14c47 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -28,11 +28,18 @@ jobs: # generate autotools's files bash autotools-init.sh # run configure (without boost checks) - ./configure --prefix=$HOME/IntaRNA --with-vrna=`conda info --base`/envs/build-IntaRNA --with-boost=`conda info --base`/envs/build-IntaRNA --with-boost-libdir=`conda info --base`/envs/build-IntaRNA/lib --without-zlib + ENVPREFIX=`conda info --base`/envs/build-IntaRNA + ./configure \ + --prefix=$HOME/IntaRNA \ + --with-vrna=$ENVPREFIX \ + --with-boost=$ENVPREFIX \ + --with-boost-libdir=$ENVPREFIX/lib \ + --with-zlib=$ENVPREFIX # compile documentation # - make doxygen-doc # compile, test and install IntaRNA - make -j 2 && make tests -j 2 && make install + make -j 2 && make install + make tests -j 2 ##### check IntaRNA build ##### # run installed IntaRNA with help output $HOME/IntaRNA/bin/IntaRNA -h From 3d71f4ee59a50454598d0d8d65a0c88ab0250e15 Mon Sep 17 00:00:00 2001 From: Martin Raden Date: Mon, 10 Jan 2022 17:52:50 +0100 Subject: [PATCH 18/21] setting LD_LIBRARY_PATH --- .github/workflows/build.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 76d14c47..833c39da 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -29,6 +29,7 @@ jobs: bash autotools-init.sh # run configure (without boost checks) ENVPREFIX=`conda info --base`/envs/build-IntaRNA + export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ENVPREFIX/lib ./configure \ --prefix=$HOME/IntaRNA \ --with-vrna=$ENVPREFIX \ From a72c8d7e8163c2853e497dfe8a0633760d5ec440 Mon Sep 17 00:00:00 2001 From: Martin Raden Date: Mon, 10 Jan 2022 17:55:40 +0100 Subject: [PATCH 19/21] build env --- .github/workflows/build.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 833c39da..8634ff3c 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -23,6 +23,8 @@ jobs: conda activate build-IntaRNA - name: Script run: | + ##### activate build env ##### + conda activate build-IntaRNA ##### start IntaRNA build ##### pwd # generate autotools's files From 235423740fd8176763e8bb2f0972c0985c2909e0 Mon Sep 17 00:00:00 2001 From: Martin Raden Date: Mon, 10 Jan 2022 18:00:28 +0100 Subject: [PATCH 20/21] should work now --- .github/workflows/build.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 8634ff3c..833c39da 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -23,8 +23,6 @@ jobs: conda activate build-IntaRNA - name: Script run: | - ##### activate build env ##### - conda activate build-IntaRNA ##### start IntaRNA build ##### pwd # generate autotools's files From c0567fbc917462c63bc91613b5e8c9d998fb6a42 Mon Sep 17 00:00:00 2001 From: Martin Raden Date: Mon, 10 Jan 2022 18:02:56 +0100 Subject: [PATCH 21/21] v2.3.2 --- configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configure.ac b/configure.ac index 6259bc5e..811bbd62 100644 --- a/configure.ac +++ b/configure.ac @@ -1,7 +1,7 @@ AC_PREREQ([2.65]) # 5 argument version only available with aclocal >= 2.64 -AC_INIT([IntaRNA], [3.2.1], [], [intaRNA], [http://www.bioinf.uni-freiburg.de] ) +AC_INIT([IntaRNA], [3.2.2], [], [intaRNA], [http://www.bioinf.uni-freiburg.de] ) # minimal required version of the boost library BOOST_REQUIRED_VERSION=1.50.0