Пример #1
0
int main(int argc, char *argv[])
{ int   i;

  Prog_Name = Strdup("DBrm","");

  if (argc <= 1)
    fprintf(stderr,"Usage: %s %s\n",Prog_Name,Usage);

  for (i = 1; i < argc; i++)
    if (List_DB_Files(argv[i],HANDLER) < 0)
      fprintf(stderr,"%s: Could not list database %s\n",Prog_Name,argv[i]);

  exit (0);
}
Пример #2
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);
}