Пример #1
0
static void OPEN_MASKS(char *path, char *extn)
{ char *dot, *dot2;
  FILE *data, *anno;
  int   size;

  dot = rindex(extn,'.');
  if (dot != NULL && strcmp(dot,".anno") == 0)
    { *dot = '\0';
      if (rindex(extn,'.') == NULL)
        { dot2 = rindex(path,'.');
          strcpy(dot2,".data");
          data = fopen(path,"r");
          if (data != NULL)
            { strcpy(dot2,".anno");
              anno = fopen(path,"r");
              if (anno != NULL)
                { if (fread(&size,sizeof(int),1,anno) == 1)
                    if (fread(&size,sizeof(int),1,anno) == 1)
                      if (size == 0)
                        Load_Track(MODEL.db1,extn);
                  fclose(anno);
                }
              fclose(data);
            }
        }
      *dot = '.';
    }
}
Пример #2
0
static HITS_DB *read_DB(char *name, int dust)
{ static HITS_DB  block;
  HITS_TRACK     *dtrack;

  if (Open_DB(name,&block))
    exit (1);

  if (dust)
    dtrack = Load_Track(&block,"dust");
  else
    dtrack = NULL;

  Trim_DB(&block);

  if (block.totlen > 0x7fffffffll)
    { fprintf(stderr,"File (%s) is too large\n",name);
      exit (1);
    }
  if (block.nreads > 0xffff)
    { fprintf(stderr,"There are more than %d reads in file (%s)\n",0xffff,name);
      exit (1);
    }
  if (block.maxlen > 0xffff)
    { fprintf(stderr,"Reads are over %d bases long in file (%s)\n",0xffff,name);
      exit (1);
    }

  Read_All_Sequences(&block,0);

  if (dtrack != NULL)
    { int *anno = (int *) (dtrack->anno); 
      int  i;

      for (i = 0; i <= block.nreads; i++)
        anno[i] /= sizeof(int);
    }

  return (&block);
}
Пример #3
0
static int read_DB(HITS_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)
    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
          mstat[i] = -3;
      else
        mstat[i] = status;
      if (status == 0 && kind == MASK_TRACK)
        Load_Track(block,mask[i]);
    }

  Trim_DB(block);

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

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

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

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

      nsize = Merge_Size(block,stop);
      track = Merge_Tracks(block,stop,nsize);

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

      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);
            exit (1);
          }
    }

  Read_All_Sequences(block,0);

  return (isdam);
}
Пример #4
0
char *openModel(char *Alas, char *Adb, char *Bdb, int first, int last,
                int nolink, int nolap, int elim, int max_comp, int max_expn)
{ static char buffer[2*MAX_NAME+100];
  static DAZZ_DB _db1;
  static DAZZ_DB _db2;

  FILE *dbfile;

  if (FIRSTCALL)
    { FIRSTCALL = 0;
      Prog_Name = Strdup("DaViewer","");
    }

  if ( ! UNDEFINED)
    { Close_DB(MODEL.db1);
      if (MODEL.db1 != MODEL.db2)
        Close_DB(MODEL.db2);
      fclose(MODEL.input);
      free(MODEL.local);
      free(MODEL.pile+MODEL.first);
      free(MODEL.tbuf);
    }
  UNDEFINED = 1;

  { int   i, nfiles, nblocks, cutoff, all, oindx;
    int64 size;
    int   la_first, la_last;
    int   db_first, db_last;
    FILE *input;

    input = fopen(Alas,"r");
    if (input == NULL)
      { if (rindex(Alas,'/') != NULL)
          Alas = rindex(Alas,'/')+1;
        EPRINTF(EPLACE,"%s: Cannot open file %s\n",Prog_Name,Alas);
        return (Ebuffer);
      }

    if (scanLAS(input,&la_first,&la_last))
      { if (rindex(Alas,'/') != NULL)
          Alas = rindex(Alas,'/')+1;
        EPRINTF(EPLACE,"%s: LAS file %s has no overlaps !\n",Prog_Name,Alas);
        fclose(input);
        return (Ebuffer);
      }
    fclose(input);
 
    dbfile = Fopen(Adb,"r");
    if (dbfile == NULL)
      return (Ebuffer);
    if (fscanf(dbfile,DB_NFILE,&nfiles) != 1)
      goto junk;
    for (i = 0; i < nfiles; i++)
      if (fgets(buffer,2*MAX_NAME+100,dbfile) == NULL)
        goto junk;
    if (fscanf(dbfile,DB_NBLOCK,&nblocks) != 1)
      { if (feof(dbfile))
          { EPRINTF(EPLACE,"%s: Database has not been split!",Prog_Name);
            goto error;
          }
        goto junk;
      }
    if (fscanf(dbfile,DB_PARAMS,&size,&cutoff,&all) != 3)
      goto junk;

    for (i = 0; i <= nblocks; i++)
      { if (fscanf(dbfile,DB_BDATA,&oindx,&db_last) != 2)
          goto junk;
        if (la_first >= db_last)
          db_first = db_last; 
        if (la_last < db_last)
          break;
      }
    fclose(dbfile);

    if (first >= 0)
      { if (first >= db_last)
          { EPRINTF(EPLACE,"First requested read %d is > last read in las block %d\n",
                           first+1,db_last);
            return (Ebuffer);
          }
        else if (first > db_first)
          db_first = first;
      }
    if (last >= 0)
      { if (last <= db_first)
          { EPRINTF(EPLACE,"Last requested read %d is < first read in las block %d\n",
                           last,db_first+1);
            return (Ebuffer);
          }
        else if (last < db_last)
          db_last = last;
      }
    MODEL.first = db_first;
    MODEL.last  = db_last;
  }

  MODEL.db1 = &_db1;
  if (Open_DB(Adb,MODEL.db1) < 0)
    return (Ebuffer);
  if (Bdb == NULL)
    MODEL.db2 = MODEL.db1;
  else
    { MODEL.db2 = &_db2;
      if (Open_DB(Bdb,MODEL.db2) < 0)
        { Close_DB(MODEL.db1);
          return (Ebuffer);
        }
      Trim_DB(MODEL.db2);
    }
  Trim_DB(MODEL.db1);

  if (List_DB_Files(Adb,OPEN_MASKS))
    return (Ebuffer);

  { int        i, n;
    DAZZ_READ *read = MODEL.db2->reads;
 
    n = MODEL.db2->nreads;
    for (i = 0; i < n; i++)
      read[i].flags &= (DB_CSS | DB_BEST);
  }

  { int kind;

    if (Check_Track(MODEL.db1,"prof",&kind) > -2)
      { MODEL.prf = Load_Track(MODEL.db1,"prof");
        if (MODEL.prf == NULL)
          { Close_DB(MODEL.db1);
            if (MODEL.db2 != MODEL.db1)
              Close_DB(MODEL.db2);
            return (Ebuffer);
          }
      }
    else
      MODEL.prf = NULL;

    if (Check_Track(MODEL.db1,"qual",&kind) > -2)
      { MODEL.qvs = Load_Track(MODEL.db1,"qual");
        if (MODEL.qvs == NULL)
          { Close_DB(MODEL.db1);
            if (MODEL.db2 != MODEL.db1)
              Close_DB(MODEL.db2);
            return (Ebuffer);
          }
      }
    else
      MODEL.qvs = NULL;
  }

  MODEL.input = fopen(Alas,"r");

  if (buildModel(nolink,nolap,elim,max_comp,max_expn))
    { fclose(MODEL.input);
      Close_DB(MODEL.db1);
      if (MODEL.db2 != MODEL.db1)
        Close_DB(MODEL.db2);
      return (Ebuffer);
    }

  { DAZZ_TRACK *t, *u, *v;
    int         j;
    int64      *anno;

    u = NULL;
    for (t = MODEL.db1->tracks; t != NULL; t = v)
      { v = t->next;
        t->next = u; 
        u = t;
      }
    MODEL.db1->tracks = u;

    for (t = MODEL.db1->tracks; t != MODEL.qvs && t != MODEL.prf; t = t->next)
      { anno = (int64 *) (t->anno);
        for (j = 0; j <= MODEL.db1->nreads; j++) 
          anno[j] >>= 2;
      }
  }

  UNDEFINED = 0;
  return (NULL);

junk:
  if (rindex(Adb,'/') != NULL)
    Adb = rindex(Adb,'/')+1;
  EPRINTF(EPLACE,"%s: Stub file %s is junk!\n",Prog_Name,Adb);
error:
  fclose(dbfile);
  return (Ebuffer);
}