modified: n.fq
[GalaxyCodeBases.git] / c_cpp / salusFstReCoord / src1 / input.c
bloba43784c5a49ebad8832e8778675e567724e967a1
1 #include <stdio.h> // fprintf
2 #include <zlib-ng.h>
4 #include "kseq.h"
5 KSEQ_INIT(gzFile, zng_gzread)
6 #include "common.h"
8 void fqReader_init(void) {
9 int rc;
10 const char *pattern = "R[0-9]{3}(:)?C[0-9]{3}";
11 if ((rc = regcomp(&Parameters.regex, pattern, REG_EXTENDED)) != 0) {
12 regerror(rc, &Parameters.regex, Parameters.buffer, PARAMETERS_BUFFER_SIZE);
13 printf("[x]=%d=regcomp(\"%s\") failed with '%s'.\n", rc, pattern, Parameters.buffer);
14 exit(EXIT_FAILURE);
16 Parameters.ksfp = zng_gzopen(Parameters.inFastqFilename, "r");
17 if (unlikely(Parameters.ksfp == NULL)) {
18 fprintf(stderr, "[x]gzopen error on opening [%s]: %s.\n", Parameters.inFastqFilename, strerror(errno));
19 exit(1);
21 rc = zng_gzbuffer(Parameters.ksfp, GZBUFSIZE);
22 if (unlikely(rc != 0)) {
23 fprintf(stderr, "[x]gzbuffer error: %s.\n", strerror(errno));
24 exit(1);
26 Parameters.kseq = kseq_init(Parameters.ksfp);
29 void fqReader_destroy(void) {
30 regfree(&Parameters.regex);
31 kseq_destroy(Parameters.kseq);
32 zng_gzclose(Parameters.ksfp);
35 void fill_worker(int_least16_t worker_id) {
36 kseq_t *seq = Parameters.kseq;
37 workerArray_t *worker = &Parameters.workerArray[worker_id];
38 uint64_t index = 0;
39 regmatch_t matches[2];
41 for (uint64_t index = 0; index < JOBITEMSIZE; index++) {
42 fstBCdata_t *fstBCdata_p = &worker->input_array[index];
43 if (kseq_read(seq) >= MINBARCODELEN) {
44 // strncpy((char *)fstBCdata_p->name, seq->name.s, sizeof(fstBCdata_p->name));
45 STRcpyARRAY(fstBCdata_p->name, seq->name.s);
46 /* seq->comment.s is discarded */
47 STRcpyARRAY(fstBCdata_p->seq, seq->seq.s);
48 STRcpyARRAY(fstBCdata_p->qual, seq->qual.s);
49 if (unlikely(seq->comment.l > 0)) {
50 if (likely(fstBCdata_p->comment != NULL)) {
51 size_t oldSize = MALLOCSIZE(fstBCdata_p->comment);
52 if (unlikely(1 + seq->comment.l > oldSize)) {
53 free(fstBCdata_p->comment);
54 fstBCdata_p->comment = strdup(seq->comment.s);
55 } else {
56 STRcpySTR(fstBCdata_p->comment, seq->comment.s);
59 } else {
60 if (unlikely(fstBCdata_p->comment != NULL)) {
61 free(fstBCdata_p->comment);
62 fstBCdata_p->comment = NULL;
65 #ifndef RELEASE
66 fprintf(stderr, "- %llu -\n", index);
67 ARRAYcpySTR(Parameters.buffer, fstBCdata_p->name);
68 // snprintf(Parameters.buffer, 1 + sizeof(fstBCdata_p->name), "%s", fstBCdata_p->name);
69 fprintf(stderr, "->Name:[%s]\n", Parameters.buffer);
70 ARRAYcpySTR(Parameters.buffer, fstBCdata_p->seq);
71 fprintf(stderr, "->Sequ:[%s]\n", Parameters.buffer);
72 ARRAYcpySTR(Parameters.buffer, fstBCdata_p->qual);
73 fprintf(stderr, "->Qual:[%s]\n", Parameters.buffer);
74 #endif
75 } else {
76 fstBCdata_p->name[0] = '\0';
77 fstBCdata_p->seq[0] = '\0';
78 fstBCdata_p->qual[0] = '\0';
80 // continue;
82 // Update the worker's flag to indicate the processing is complete
83 atomic_store(&worker->flag, 1);