def main(): #Get arguments args = argParse() print("- ARGS :") print(args, "\n") #create indexedReference print("- REFERENCE :") reference = Reference() #check if already indexed fileName = path.splitext(args.ref)[0] # retrieve from .gz if (path.exists(fileName + ".dumped.gz")): reference.load(fileName) print("reference loaded from dumped.gz") #index sequence else: sequence = getSequence(args.ref) reference.createIndex(sequence) reference.save(fileName) print("reference indexed and saved") print("DEBUG", reference.N) print("Reference : ", "\n", reference.text[:10], "...", "\n") #open Reads print("- READS :") readStream = openReads(args.reads) readName, readContent = getNextRead(readStream) print("First read :", readName, readContent) print("RevCompl :", reverseCompl(readContent), "\n") #outputStream outputStream = open(args.out, "w") #Start the timer print("- FINDING ALIGNEMENT :") with Timer() as total_time: while (readContent != -1): print(readName, "(processing)") isRevCompl = False bestScore, bestPos = getBestSemiGlobalAlg(readContent, reference, args.k, args.dmax) bestScoreRev, bestPosRev = getBestSemiGlobalAlg( reverseCompl(readContent), reference, args.k, args.dmax) #if the reverse search is better we take it if (bestScoreRev < bestScore): bestScore, bestPos = bestScoreRev, bestPosRev isRevCompl = True #Found a result if (bestScore != len(readContent)): if bestScore <= args.dmax: appendResults(outputStream, readName, bestPos, isRevCompl, bestScore) #with tabs readName, readContent = getNextRead(readStream) total_time.print('\nIt tooks {} secondes.', 5) print() readStream.close() outputStream.close() #print out file print("- RESULTS :") f = open(args.out, "r") print(f.read()) f.close() print("exported in:", args.out)