int main (int argc, char *argv[]) { GfrEntry *currGE; int count; int countRemoved; int i; if (argc != 3) { usage ("%s <offsetCutoff> <minNumUniqueReads>",argv[0]); } count = 0; countRemoved = 0; int offsetCutOff = atoi (argv[1]); int minNumUniqueReads = atoi (argv[2]); gfr_init ("-"); puts (gfr_writeHeader ()); while (currGE = gfr_nextEntry ()) { Array starts = arrayCreate( 100, int); for (i = 0; i < arrayMax( currGE->interReads ); i++) { int currStart = arrp(currGE->interReads, i, GfrInterRead)->readStart1 + arrp(currGE->interReads, i, GfrInterRead)->readStart2; array(starts, arrayMax(starts), int) = currStart; } arraySort( starts, (ARRAYORDERF) arrayIntcmp ); arrayUniq( starts, NULL, (ARRAYORDERF) arrayIntcmp ) ; int numUniqeOffsets = arrayMax( starts ); arrayDestroy( starts ); if (arrayMax( currGE->readsTranscript1 ) != arrayMax( currGE->readsTranscript2 ) ) die( "The two ends have a different number of reads"); Texta reads = textCreate(arrayMax(currGE->readsTranscript1)); for (i = 0; i < arrayMax(currGE->readsTranscript1); i++) { Stringa strA = stringCreate( strlen(textItem( currGE->readsTranscript1, i) ) * 2 + 1); stringAppendf( strA, textItem( currGE->readsTranscript1,i)); stringAppendf( strA, textItem( currGE->readsTranscript2,i)); textAdd( reads, string(strA)); stringDestroy( strA ); } textUniqKeepOrder( reads ); int numRemaining = arrayMax( reads ); textDestroy ( reads ); if (numRemaining <= minNumUniqueReads || numUniqeOffsets <= offsetCutOff) { countRemoved++; continue; } puts (gfr_writeGfrEntry (currGE)); count++; } gfr_deInit (); warn("%s_PCRFilter: offset=%d minNumUniqueReads=%d", argv[0],offsetCutOff, minNumUniqueReads); warn("%s_numRemoved: %d",argv[0],countRemoved); warn("%s_numGfrEntries: %d",argv[0],count); return 0; }
int main(int argc, char *argv[]) { Array breakPoints; BreakPoint *currBP; BreakPointRead *currBPR; int minNumReads, minNumUniqueOffsets, minNumReadsForKS,numPossibleOffsets; double pValueCutoffForKS; Array offsets; Array randomNumbers; double *observedOffsets; double *randomOffsets; if (argc != 6) { usage((char*) "%s <minNumReads> <minNumUniqueOffsets> " "<minNumReadsForKS> <pValueCutoffForKS> <numPossibleOffsets>", argv[0]); } minNumReads = std::atoi(argv[1]); minNumUniqueOffsets = std::atoi(argv[2]); minNumReadsForKS = std::atoi(argv[3]); pValueCutoffForKS = std::atof(argv[4]); numPossibleOffsets = std::atoi(argv[5]); bp_init("-"); offsets = arrayCreate(100, int); randomNumbers = arrayCreate(100, int); breakPoints = bp_getBreakPoints(); for (int i = 0; i < arrayMax(breakPoints); i++) { currBP = arrp(breakPoints, i, BreakPoint); arrayClear(offsets); for (int j = 0; j < arrayMax(currBP->breakPointReads); j++) { currBPR = arrp(currBP->breakPointReads, j, BreakPointRead); array(offsets, arrayMax(offsets), int) = currBPR->offset; } arraySort(offsets, (ARRAYORDERF) arrayIntcmp); arrayUniq(offsets, NULL, (ARRAYORDERF) arrayIntcmp); if (arrayMax(currBP->breakPointReads) >= minNumReads && arrayMax(currBP->breakPointReads) < minNumReadsForKS) { if (arrayMax(offsets) >= minNumUniqueOffsets) std::puts(bp_writeBreakPoint(currBP)); } else if (arrayMax(currBP->breakPointReads) >= minNumReads && arrayMax(currBP->breakPointReads) >= minNumReadsForKS) { arrayClear(randomNumbers); for (int j = 0; j < arrayMax(offsets); j++) array(randomNumbers, arrayMax(randomNumbers), int) = std::rand() % numPossibleOffsets; arraySort(randomNumbers, (ARRAYORDERF) arrayIntcmp); observedOffsets = (double *) hlr_malloc(arrayMax(offsets) * sizeof(double)); randomOffsets = (double *) hlr_malloc(arrayMax(offsets) * sizeof(double)); for (int j = 0; j < arrayMax(offsets); j++) { observedOffsets[j] = arru(offsets, j, int); randomOffsets[j] = arru(randomNumbers, j, int); } if (pValueCutoffForKS < TMath::KolmogorovTest(arrayMax(offsets), observedOffsets, arrayMax(offsets), randomOffsets, "")) std::puts(bp_writeBreakPoint(currBP)); hlr_free(observedOffsets); hlr_free(randomOffsets); } }