1 /* Generating, shuffling, and randomizing sequences.
2  */
3 #ifndef eslRANDOMSEQ_INCLUDED
4 #define eslRANDOMSEQ_INCLUDED
5 #include "esl_config.h"
6 
7 #include "esl_alphabet.h"
8 #include "esl_random.h"
9 
10 /* Control flag passed to esl_rsq_Sample():                          */
11 #define eslRSQ_SAMPLE_ALNUM  1	/* isalpha | isdigit                 */
12 #define eslRSQ_SAMPLE_ALPHA  2	/* islower | isupper                 */
13 #define eslRSQ_SAMPLE_LOWER  3	/* ASCII: a-z                        */
14 #define eslRSQ_SAMPLE_UPPER  4	/* ASCII: A-Z                        */
15 #define eslRSQ_SAMPLE_DIGIT  5	/* 0-9                               */
16 #define eslRSQ_SAMPLE_XDIGIT 6	/* 0-9, a-f, A-F                     */
17 #define eslRSQ_SAMPLE_CNTRL  7	/* ASCII: 0..0x1F, plus 0x7F (DEL)   */
18 #define eslRSQ_SAMPLE_GRAPH  8  /* isprint && ! ' ' (space)          */
19 #define eslRSQ_SAMPLE_SPACE  9	/* ' ', '\f', '\n', '\r', '\t', '\v' */
20 #define eslRSQ_SAMPLE_BLANK  10	/* ' ', '\t'                         */
21 #define eslRSQ_SAMPLE_PRINT  11 /* ASCII: 0x20 ' ' through 0x7E '~'  */
22 #define eslRSQ_SAMPLE_PUNCT  12	/* isprint && !(isspace || isalnum)  */
23 
24 
25 /* 1. Generating simple random character strings. */
26 extern int esl_rsq_Sample(ESL_RANDOMNESS *rng, int allowed_chars_flag, int L, char **ret_s);
27 
28 /* 2. Generating iid sequences. */
29 extern int esl_rsq_IID  (ESL_RANDOMNESS *r, const char *alphabet, const double *p, int K, int L, char *s);
30 extern int esl_rsq_fIID (ESL_RANDOMNESS *r, const char *alphabet, const float  *p, int K, int L, char *s);
31 
32 /* 3. Shuffling sequences. */
33 extern int esl_rsq_CShuffle       (ESL_RANDOMNESS *r, const char *s,        char *shuffled);
34 extern int esl_rsq_CShuffleDP     (ESL_RANDOMNESS *r, const char *s,        char *shuffled);
35 extern int esl_rsq_CShuffleKmers  (ESL_RANDOMNESS *r, const char *s, int K, char *shuffled);
36 extern int esl_rsq_CReverse       (const char *s, char *rev);
37 extern int esl_rsq_CShuffleWindows(ESL_RANDOMNESS *r, const char *s, int w, char *shuffled);
38 
39 /* 4. Randomizing sequences */
40 extern int esl_rsq_CMarkov0  (ESL_RANDOMNESS *r, const char *s, char *markoved);
41 extern int esl_rsq_CMarkov1  (ESL_RANDOMNESS *r, const char *s, char *markoved);
42 
43 /* 5. Generating iid sequences (digital mode). */
44 extern int esl_rsq_xIID       (ESL_RANDOMNESS *r, const double *p, int K, int L, ESL_DSQ *dsq);
45 extern int esl_rsq_xfIID      (ESL_RANDOMNESS *r, const float  *p, int K, int L, ESL_DSQ *dsq);
46 extern int esl_rsq_SampleDirty(ESL_RANDOMNESS *rng, ESL_ALPHABET *abc, double **byp_p, int L, ESL_DSQ *dsq);
47 
48 /* 6. Shuffling sequences (digital mode). */
49 extern int esl_rsq_XShuffle       (ESL_RANDOMNESS *r, const ESL_DSQ *dsq, int L,        ESL_DSQ *shuffled);
50 extern int esl_rsq_XShuffleDP     (ESL_RANDOMNESS *r, const ESL_DSQ *dsq, int L, int K, ESL_DSQ *shuffled);
51 extern int esl_rsq_XShuffleKmers  (ESL_RANDOMNESS *r, const ESL_DSQ *dsq, int L, int K, ESL_DSQ *shuffled);
52 extern int esl_rsq_XReverse(const ESL_DSQ *dsq, int L, ESL_DSQ *rev);
53 extern int esl_rsq_XShuffleWindows(ESL_RANDOMNESS *r, const ESL_DSQ *dsq, int L, int w, ESL_DSQ *shuffled);
54 
55 /* 7. Randomizing sequences (digital mode) */
56 extern int esl_rsq_XMarkov0  (ESL_RANDOMNESS *r, const ESL_DSQ *dsq, int L, int K, ESL_DSQ *markoved);
57 extern int esl_rsq_XMarkov1  (ESL_RANDOMNESS *r, const ESL_DSQ *dsq, int L, int K, ESL_DSQ *markoved);
58 
59 #endif /*eslRANDOMSEQ_INCLUDED*/
60 
61