#include "math.hpp"#include <map>#include <cmath>#include <cassert>#include <string>#include "tools.h"usingnamespacestd;conststaticmap<int,float>Z_SCORES={{90,1.2816},{95,1.6449},{99,2.3263},{999,3.0902}};intcompute_nb_kmers_limit(intkmer_size,intnb_occ,intsequence_length,intp_value){if(Z_SCORES.count(p_value)==0){throwinvalid_argument("You can't use a p_value of "+to_string(p_value));}floatempirical_proba=nb_occ*1./(sequence_length-kmer_size+1);if(empirical_proba>1)returnnb_occ;floatmin_proba=empirical_proba-Z_SCORES.at(p_value)*sqrt(empirical_proba*(1-empirical_proba)/(sequence_length-kmer_size+1));if(min_proba<=0)return0;// “Converts” the probability to a number of k-mersreturnmin_proba*(sequence_length-kmer_size+1);}