@@ -66,6 +66,7 @@ void CompressTarget(Threads T){
6666 Shadow = (CModel * * ) Calloc (P -> nModels , sizeof (CModel * ));
6767 for (n = 0 ; n < P -> nModels ; ++ n )
6868 Shadow [n ] = CreateShadowModel (Models [n ]);
69+
6970 pModel = (PModel * * ) Calloc (totModels , sizeof (PModel * ));
7071 for (n = 0 ; n < totModels ; ++ n )
7172 pModel [n ] = CreatePModel (ALPHABET_SIZE );
@@ -79,28 +80,28 @@ void CompressTarget(Threads T){
7980 exit (1 );
8081 }
8182
82- char name_o [4096 ];
83- sprintf (name_o , "%s.%u" , P -> output , T .id );
84- FILE * Writer = Fopen (name_o , "w" );
85-
83+ char name_o [10000 ];
84+ sprintf (name_o , "%s.%u" , P -> output , T .id );
85+ FILE * Writer = Fopen (name_o , "w" );
8686 srand (T .id );
87- Read * Read = CreateRead (10000 , 40000 );
88- while ((Read = GetRead (Reader , Read )) != NULL ){
87+ Read * Read = CreateRead (50000 , 100000 );
8988
90- if (PA -> nRead % P -> nThreads == T .id ){
89+ while ((Read = GetRead (Reader , Read )) != NULL )
90+ {
91+ if (PA -> nRead % P -> nThreads == T .id )
92+ {
9193 nBase = strlen (Read -> bases ) - 1 ; // IT ALSO LOADS '\n' AT THE END
9294 bits = 0 ;
9395
94- for (idxPos = 0 ; idxPos < nBase ; ++ idxPos ){
95-
96+ for (idxPos = 0 ; idxPos < nBase ; ++ idxPos )
97+ {
9698 sym = Read -> bases [idxPos ];
97-
98- if (sym == 'N' ) sym = 0 ;// rand() % 4; // ASSUME A 'A' -> 0, CAUSE:
99- // RANDOM BASE MODIFY THE RESULTS USING DIFFERENT THREADS
100- else sym = DNASymToNum (sym );
99+
100+ if ((sym = DNASymToNum (sym )) == 4 )
101+ sym = rand () % 4 ;
101102
102103 symBuf -> buf [symBuf -> idx ] = sym ;
103- memset ((void * )PT -> freqs , 0 , ALPHABET_SIZE * sizeof (double ));
104+ memset ((void * )PT -> freqs , 0 , ( ALPHABET_SIZE ) * sizeof (double ));
104105 n = 0 ;
105106 pos = & symBuf -> buf [symBuf -> idx - 1 ];
106107 for (cModel = 0 ; cModel < P -> nModels ; ++ cModel ){
@@ -126,22 +127,14 @@ void CompressTarget(Threads T){
126127 CorrectXModels (Shadow , pModel , sym , P -> nModels );
127128 UpdateCBuffer (symBuf );
128129 }
129-
130+
130131 if (BPBB (bits , nBase ) < P -> threshold ){
131- if (P -> invert ){
132- fputc ('0' , Writer ); // IGNORE READ
133- }
134- else {
135- fputc ('1' , Writer ); // WRITE READ
136- }
132+ if (P -> invert ) fputc ('0' , Writer ); // IGNORE READ
133+ else fputc ('1' , Writer ); // WRITE READ
137134 }
138135 else {
139- if (P -> invert ){
140- fputc ('1' , Writer ); // WRITE READ
141- }
142- else {
143- fputc ('0' , Writer ); // IGNORE READ
144- }
136+ if (P -> invert ) fputc ('1' , Writer ); // WRITE READ
137+ else fputc ('0' , Writer ); // IGNORE READ
145138 }
146139 ResetModelsAndParam (symBuf , Shadow , CMW );
147140 }
@@ -197,10 +190,12 @@ void LoadReference(char *refName){
197190 idx = 0 ;
198191 continue ;
199192 }
193+
200194 if (sym == 'N' ) // WE CAN RAND HERE CAUSE IS ALWAYS IN ONE THREAD
201- symBuf -> buf [symBuf -> idx ] = sym = (rand () % 4 );
195+ symBuf -> buf [symBuf -> idx ] = sym = 0 ; // (rand() % 4);
202196 else
203197 symBuf -> buf [symBuf -> idx ] = sym = DNASymToNum (sym );
198+
204199 for (n = 0 ; n < P -> nModels ; ++ n ){
205200 CModel * CM = Models [n ];
206201 GetPModelIdx (symBuf -> buf + symBuf -> idx - 1 , CM );
@@ -248,20 +243,25 @@ void CompressAction(Threads *T, char *refName, char *baseName){
248243 fprintf (stderr , "Done!\n" );
249244
250245 fprintf (stderr , " [+] Joinning streams ............. " );
251- FILE * OUT = Fopen (P -> output , "w" );
252- FILE * IN = Fopen (P -> base , "r" );
253- FILE * * TMP = (FILE * * ) Calloc (P -> nThreads , sizeof (FILE * ));
246+ FILE * OUT = Fopen (P -> output , "w" );
247+ FILE * OUT2 = Fopen (P -> output2 , "w" );
248+ FILE * IN = Fopen (P -> base , "r" );
249+ FILE * * TMP = (FILE * * ) Calloc (P -> nThreads , sizeof (FILE * ));
254250 for (n = 0 ; n < P -> nThreads ; ++ n ){
255251 char name_o [MAX_NAME_OUT ];
256252 sprintf (name_o , "%s.%u" , P -> output , n );
257253 TMP [n ] = Fopen (name_o , "r" );
258254 }
255+
259256 Read * Read = CreateRead (10000 , 40000 );
260257 n = 0 ;
261258 while ((Read = GetRead (IN , Read )) != NULL ){
262259 if (fgetc (TMP [n ++ % P -> nThreads ]) == '1' )
263260 PutRead (Read , OUT );
261+ else
262+ PutRead (Read , OUT2 );
264263 }
264+
265265 for (n = 0 ; n < P -> nThreads ; ++ n ){
266266 fclose (TMP [n ]);
267267 char name_o [MAX_NAME_OUT ];
@@ -270,6 +270,7 @@ void CompressAction(Threads *T, char *refName, char *baseName){
270270 }
271271 fclose (IN );
272272 fclose (OUT );
273+ fclose (OUT2 );
273274 fprintf (stderr , "Done!\n" );
274275 }
275276
@@ -282,7 +283,7 @@ void CompressAction(Threads *T, char *refName, char *baseName){
282283
283284int32_t main (int argc , char * argv []){
284285
285- char * * p = * & argv , * * xargv , * xpl = NULL ;
286+ char * * p = * & argv , * * xargv , * xpl = NULL ;
286287 int32_t xargc = 0 ;
287288 uint32_t n , k , col , ref ;
288289 double gamma ;
@@ -344,12 +345,16 @@ int32_t main(int argc, char *argv[]){
344345 P -> threshold = fabs (ArgsDouble (0.9 , p , argc , "-t" , "--threshold" ));
345346 P -> gamma = ((int )(P -> gamma * 65536 )) / 65536.0 ;
346347 P -> output = ArgsFileGen (p , argc , "-o" , "filtered" , ".fq" );
348+ P -> output2 = ArgsFileGen (p , argc , "-2" , "not-filtered" , ".fq" );
347349
348350 FILE * OUTPUT = NULL ;
349351 if (!P -> force )
350352 FAccessWPerm (P -> output );
351353 OUTPUT = Fopen (P -> output , "w" );
352354
355+ FILE * OUTPUT2 = NULL ;
356+ OUTPUT2 = Fopen (P -> output2 , "w" );
357+
353358 if (P -> nModels == 0 ){
354359 fprintf (stderr , "Error: at least you need to use a context model!\n" );
355360 return EXIT_FAILURE ;
@@ -389,11 +394,16 @@ int32_t main(int argc, char *argv[]){
389394 fprintf (stderr , "\n" );
390395
391396 fprintf (stderr , "==[ RESULTS ]=======================\n" );
392- fprintf (stderr , "Results have been sent to file:%s\n" , P -> output );
397+ fprintf (stderr , "Filtered reads in : %s\n" , P -> output );
398+ fprintf (stderr , "Unfiltered reads in : %s\n" , P -> output2 );
399+ fprintf (stderr , "\n" );
393400
394- //fprintf(stderr, "==[ STATISTICS ]====================\n");
395- //StopCalcAll(Time, clock());
396- //fprintf(stderr, "\n");
401+ if (P -> verbose )
402+ {
403+ fprintf (stderr , "==[ STATISTICS ]====================\n" );
404+ StopCalcAll (Time , clock ());
405+ fprintf (stderr , "\n" );
406+ }
397407
398408 RemoveClock (Time );
399409 for (ref = 0 ; ref < P -> nThreads ; ++ ref )
0 commit comments