Mercurial > repos > bitlab > gecko
view gecko/src/filterHits.c @ 11:cf4c0c822ca9 draft
Uploaded
author | bitlab |
---|---|
date | Wed, 18 Nov 2020 08:37:31 +0000 |
parents | 9db88f0f32b7 |
children |
line wrap: on
line source
/* filterHits Syntax: filterHits fileIn fileOut dist FilterIsolatedHits fileIn Ordered Hits file (Diag/posX/posY) fileOut Ordered Out file (Diag/posX/posY) dist Hits that occurs at a less than a distance "dist" from the previous hit are removed (only the first hit remains) distance is measure from END-to-Head of 2 hits FilterIsolatedHits (0=not - 1=Yes) ----------------------------------------ortrelles@uma.es /Dic2011---*/ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <inttypes.h> #include "structs.h" #include "commonFunctions.h" #include "comparisonFunctions.h" int differentSequences(hit h1, hit h2){ return h1.seqX != h2.seqX || h1.seqY != h2.seqY; } int main(int ac, char** av) { int wSize = 32; int64_t diagonal; uint64_t lastPosition; uint64_t originalNumberOfHits = 0, finalNumberOfHits = 0, hitsRead = 0; FILE* fIn, *fOut; hit hits[2]; if (ac != 4) terror("USE:filterHits fileIn fileOut wordSize"); if ((fIn = fopen(av[1], "rb")) == NULL) terror("opening HITS input file"); if ((fOut = fopen(av[2], "wb")) == NULL) terror("opening HITS OUT file"); wSize = atoi(av[3]); lastPosition = 0; hitsRead = fread(&hits[0], sizeof(hit), 1, fIn); originalNumberOfHits += hitsRead; if(hitsRead>0) finalNumberOfHits += fwrite(&hits[0], sizeof(hit), 1, fOut); diagonal = hits[0].diag; while (hitsRead > 0) { hitsRead = fread(&hits[1], sizeof(hit), 1, fIn); originalNumberOfHits += hitsRead; if(differentSequences(hits[0], hits[1])){ lastPosition = hits[1].posX + (2 * wSize - 1); diagonal = hits[1].diag; finalNumberOfHits += fwrite(&hits[1], sizeof(hit), 1, fOut); memcpy(&hits[0], &hits[1], sizeof(hit)); continue; } if (hitsRead == 0 && originalNumberOfHits > 1) { if(diagonal != hits[0].diag || hits[0].posX > (lastPosition)){ finalNumberOfHits += fwrite(&hits[0], sizeof(hit), 1, fOut); } continue; } if (diagonal != hits[1].diag || hits[1].posX > lastPosition) { lastPosition = hits[1].posX + (2 * wSize - 1); diagonal = hits[1].diag; finalNumberOfHits += fwrite(&hits[1], sizeof(hit), 1, fOut); memcpy(&hits[0], &hits[1], sizeof(hit)); } } fprintf(stdout, "\nfilterHits\noriginal number of Hits=%" PRIu64 " Final number of hits=%" PRIu64 "\n", originalNumberOfHits, finalNumberOfHits); fclose(fIn); fclose(fOut); return 0; }