Esempio n. 1
0
File: sort.c Progetto: jwalle/ft_ls2
void	merge_sort(t_list **ref, t_opt *opt)
{
	t_list *head;
	t_list *a;
	t_list *b;

	head = *ref;
	if (!head || !head->next)
		return ;
	split(head, &a, &b);
	merge_sort(&a, opt);
	merge_sort(&b, opt);
	if (opt->sort == 't')
		*ref = (opt->r) ? (merge_time_r(a, b)) : (merge_time(a, b));
	else if (opt->sort == 'S')
		*ref = (opt->r) ? (merge_size_r(a, b)) : (merge_size(a, b));
	else if (opt->sort == 'd')
		*ref = (opt->r) ? (merge_r(a, b)) : (merge(a, b));
}
Esempio n. 2
0
static int read_DB(DAZZ_DB *block, char *name, char **mask, int *mstat, int mtop, int kmer)
{ int i, isdam, status, kind, stop;

  isdam = Open_DB(name,block);
  if (isdam < 0)
    Clean_Exit(1);

  for (i = 0; i < mtop; i++)
    { status = Check_Track(block,mask[i],&kind);
      if (status >= 0)
        if (kind == MASK_TRACK)
          mstat[i] = 0;
        else
          { if (mstat[i] != 0)
              mstat[i] = -3;
          }
      else
        { if (mstat[i] == -2)
            mstat[i] = status;
        }
      if (status == 0 && kind == MASK_TRACK)
        Open_Track(block,mask[i]);
    }

  Trim_DB(block);

  stop = 0;
  for (i = 0; i < mtop; i++)
    { DAZZ_TRACK *track;
      int64      *anno;
      int         j;

      status = Check_Track(block,mask[i],&kind);
      if (status < 0 || kind != MASK_TRACK)
        continue;
      stop += 1;
      track = Open_Track(block,mask[i]);

      Load_All_Track_Data(track);

      anno = (int64 *) (track->anno); 
      for (j = 0; j <= block->nreads; j++)
        anno[j] /= sizeof(int);
    }

  if (stop > 1)
    { int64       nsize;
      DAZZ_TRACK *track;

      nsize = merge_size(block,stop);
      track = merge_tracks(block,stop,nsize);

      while (block->tracks != NULL)
        Close_Track(block,block->tracks);

      block->tracks = track;
    }

  if (block->cutoff < kmer)
    { for (i = 0; i < block->nreads; i++)
        if (block->reads[i].rlen < kmer)
          { fprintf(stderr,"%s: Block %s contains reads < %dbp long !  Run DBsplit.\n",
                           Prog_Name,name,kmer);
            Clean_Exit(1);
          }
    }

  Load_All_Reads(block,0);

  return (isdam);
}