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;
  }
Exemple #2
0
void Act_SetI()
{
	int n=ArgNum();
	ITEM *i=ArgItem();
	if(n==1)
		Item1=i;
	else
		Item2=i;
}
Exemple #3
0
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;
  }