diff --git a/src/libaevol/biochemistry/GeneticUnit.cpp b/src/libaevol/biochemistry/GeneticUnit.cpp index cba2080ee43c6b089e085d942e7fe2d402d5d7d5..9122e92acf3b0ecc7da447a0cfe73c7abf16460a 100644 --- a/src/libaevol/biochemistry/GeneticUnit.cpp +++ b/src/libaevol/biochemistry/GeneticUnit.cpp @@ -828,9 +828,19 @@ void GeneticUnit::do_transcription() { rna->set_transcript_length(-1); int32_t i; + #ifdef __EUKARYOTE + for (i = (strand_id == Strand::LEADING ? transcript_start : 0) ; + i < (strand_id == Strand::LEADING ? genome_length : transcript_start); + ++i) { + #else for (i = 0; i < genome_length; ++i) { + #endif if (is_terminator(strand_id, - transcript_start + (strand_id == Strand::LEADING ? i : -i))) { + #ifdef __EUKARYOTE + (strand_id == Strand::LEADING ? i : transcript_start-i))) { + #else + transcript_start + (strand_id == Strand::LEADING ? i : -i))) { + #endif // Found terminator => set transcript's length rna->set_transcript_length(i + @@ -1330,6 +1340,11 @@ bool GeneticUnit::is_promoter(Strand strand, int32_t pos, int8_t& dist) const { int8_t prom_dist[PROM_SIZE]; if(strand == Strand::LEADING) { + #ifdef __EUKARYOTE + if (pos >= len - PROM_SIZE){ + return false; // Too close to the border + } + #endif // #pragma omp parallel for // #pragma omp simd // if (indiv_->id() == 0)printf("Search for Promoter %d : ",pos); @@ -1346,6 +1361,11 @@ bool GeneticUnit::is_promoter(Strand strand, int32_t pos, int8_t& dist) const { // if (indiv_->id() == 0)printf("\n"); } else { // LAGGING + #ifdef __EUKARYOTE + if (pos < 0 + PROM_SIZE) { + return false; // Too close to the border + } + #endif // #pragma omp parallel for // #pragma omp simd for (int8_t i = 0; i < PROM_SIZE; i++) { @@ -1374,6 +1394,11 @@ bool GeneticUnit::is_terminator(Strand strand, int32_t pos) const { const char* genome = dna_->data(); int32_t len = dna_->length(); if (strand == Strand::LEADING) { + #ifdef __EUKARYOTE + if (pos + TERM_SIZE >= len) { + return false; + } + #endif for (int8_t i = 0; i < TERM_STEM_SIZE; i++) { #ifdef BASE_2 if (genome[Utils::mod(pos + i, len)] == @@ -1404,6 +1429,11 @@ bool GeneticUnit::is_terminator(Strand strand, int32_t pos) const { } else // (strand == LAGGING) { + #ifdef __EUKARYOTE + if (pos - TERM_SIZE < 0) { + return false; + } + #endif for (int8_t i = 0; i < TERM_STEM_SIZE; i++) { #ifdef BASE_2 if (genome[Utils::mod(pos - i, len)] ==