int main(int argc, char *argv[]){ Read *Read = CreateRead(65536+GUARD, 65535+GUARD); int32_t seqSize = 0, x, n; uint64_t cutted = 0, totalReads = 0; if(argc < 2 || ArgBin(0, argv, argc, "-h") || ArgBin(0, argv, argc, "?")){ PrintArgs(argv[0]); return EXIT_SUCCESS; } int k = ArgNum(5, argv, argc, "-k", 0, 9999999); int min_QS_window = ArgNum(25, argv, argc, "-w", 0, 9999999); int min_QS = ArgNum(33, argv, argc, "-m", 0, 9999999); fprintf(stderr, "Minimum QS: %d\n", min_QS); uint32_t position = 0; while(GetRead(stdin, Read)){ seqSize = strlen((char *) Read->bases) - 1; for(x = seqSize ; x >= 0 ; x--){ if(x >= k){ int tmp_QS = 0; for(n = 0 ; n < k ; ++n){ tmp_QS += ((int) Read->scores[x - 1 - n]) - min_QS; } if(((double) tmp_QS / k) < (double) min_QS_window){ ++cutted; position = x; break; } } } ++totalReads; if(x > seqSize - k) continue; // PRINT READ fprintf(stdout, "@"); for(n = 0 ; n < strlen((char *) Read->header1) ; ++n) fprintf(stdout, "%c", Read->header1[n]); for(n = position ; n < seqSize ; ++n) fprintf(stdout, "%c", Read->bases[n]); fprintf(stdout, "\n+\n"); for(n = position ; n < seqSize ; ++n) fprintf(stdout, "%c", Read->scores[n]); fprintf(stdout, "\n"); } fprintf(stderr, "Total reads : %"PRIu64"\n", totalReads); fprintf(stderr, "Trimmed reads : %"PRIu64"\n", cutted); FreeRead(Read); return EXIT_SUCCESS; }
void Act_SetI() { int n=ArgNum(); ITEM *i=ArgItem(); if(n==1) Item1=i; else Item2=i; }
int main(int argc, char *argv[]){ Read *Read = CreateRead(65536+GUARD, 65535+GUARD); uint32_t seqSize = 0, totalQS = 0, N = 0, x, n; uint64_t okReads = 0, totalReads = 0; if(ArgBin(0, argv, argc, "-h") || ArgBin(0, argv, argc, "?")){ PrintArgs(argv[0]); return EXIT_SUCCESS; } int max_n = ArgNum(0, argv, argc, "-n", 0, 9999999); int k = ArgNum(5, argv, argc, "-k", 0, 9999999); int min_QS_window = ArgNum(25, argv, argc, "-w", 0, 9999999); int min_avg_qs = ArgNum(25, argv, argc, "-a", 0, 9999999); int min_read_size = ArgNum(35, argv, argc, "-m", 0, 9999999); // LOAD PARAMETERS while(GetRead(stdin, Read)){ seqSize = strlen((char *) Read->bases) - 1; totalQS = 0; N = 0; for(x = 0 ; x < seqSize ; ++x){ if(Read->bases[x] == 'N'){ ++N; } totalQS += ((int) Read->scores[x]) - 33; // PHRED +33 if(x < seqSize - k){ int tmp_QS = 0; for(n = 0 ; n < k ; ++n) tmp_QS += ((int) Read->scores[x + n]) - 33; if(tmp_QS / k < min_QS_window) break; } } ++totalReads; // EVALUATE TO DISCARD: if(N > max_n) continue; if((totalQS / seqSize) < min_avg_qs) continue; if(x < min_read_size) continue; // PRINT READ for(n = 0 ; n < strlen((char *) Read->header1) ; ++n) fprintf(stdout, "%c", Read->header1[n]); for(n = 0 ; n < x ; ++n) fprintf(stdout, "%c", Read->bases[n]); fprintf(stdout, "\n+\n"); for(n = 0 ; n < x ; ++n) fprintf(stdout, "%c", Read->scores[n]); fprintf(stdout, "\n"); ++okReads; } fprintf(stderr, "Total reads : %"PRIu64"\n", totalReads); fprintf(stderr, "Filtered reads : %"PRIu64"\n", totalReads-okReads); FreeRead(Read); return EXIT_SUCCESS; }