forked from PacificBiosciences/DALIGNER
-
Notifications
You must be signed in to change notification settings - Fork 0
/
DB2Falcon.c
133 lines (103 loc) · 2.96 KB
/
DB2Falcon.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
/********************************************************************************************
*
* Recreate all the .fasta files that have been loaded into a specified database.
*
* Author: Gene Myers
* Date : May 2014
*
********************************************************************************************/
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "DB.h"
static char *Usage = "[-U] [-w<int(80)>] <path:db>";
int main(int argc, char *argv[])
{ HITS_DB _db, *db = &_db;
FILE *dbfile;
int nfiles;
int UPPER, WIDTH;
// Process arguments
{ int i, j, k;
int flags[128];
char *eptr;
ARG_INIT("DB2fasta")
WIDTH = 80;
j = 1;
for (i = 1; i < argc; i++)
if (argv[i][0] == '-')
switch (argv[i][1])
{ default:
ARG_FLAGS("U")
break;
case 'w':
ARG_NON_NEGATIVE(WIDTH,"Line width")
break;
}
else
argv[j++] = argv[i];
argc = j;
UPPER = 1 + flags['U'];
if (argc != 2)
{ fprintf(stderr,"Usage: %s %s\n",Prog_Name,Usage);
exit (1);
}
}
// Open db and also db image file (dbfile)
if (Open_DB(argv[1],db))
{ fprintf(stderr,"%s: Database %s.db could not be opened\n",Prog_Name,argv[1]);
exit (1);
}
if (db->part > 0)
{ fprintf(stderr,"%s: Cannot be called on a block: %s.db\n",Prog_Name,argv[1]);
exit (1);
}
Trim_DB(db);
{ char *pwd, *root;
pwd = PathTo(argv[1]);
root = Root(argv[1],".db");
dbfile = Fopen(Catenate(pwd,"/",root,".db",NULL),"r");
free(pwd);
free(root);
if (dbfile == NULL)
exit (1);
}
// nfiles = # of files in data base
fscanf(dbfile,DB_NFILE,&nfiles);
// For each file do:
{ HITS_READ *reads;
char *read;
int f, first;
FILE *ofile;
reads = db->reads;
read = New_Read_Buffer(db);
first = 0;
if ((ofile = Fopen("preads4falcon.fasta","w")) == NULL)
exit (1);
for (f = 0; f < nfiles; f++)
{ int i, last;
char prolog[MAX_NAME], fname[MAX_NAME];
// Scan db image file line, create .fasta file for writing
fscanf(dbfile,DB_FDATA,&last,fname,prolog);
// For the relevant range of reads, write each to the file
// recreating the original headers with the index meta-data about each read
for (i = first; i < last && i < db->nreads; i++)
{ int j, len;
HITS_READ *r;
r = reads + i;
len = r->rlen;
fprintf(ofile,">%09lld", (long long int) i);
fprintf(ofile,"\n");
Load_Read(db,i,read,UPPER);
for (j = 0; j+WIDTH < len; j += WIDTH)
fprintf(ofile,"%.*s\n",WIDTH,read+j);
if (j < len)
fprintf(ofile,"%s\n",read+j);
}
first = last;
}
fclose(ofile);
}
fclose(dbfile);
Close_DB(db);
exit (0);
}