void run() {
		long countUnknown = 0;
		long lineNum = 1;

		Timer.showStdErr("Converting lines from QSEQ to FASTQ (Sanger)");

		// Process file
		try {
			String linePe1, linePe2, lineIdx;

			// Open inputs
			BufferedReader inPe1Buff = new BufferedReader(new InputStreamReader(new FileInputStream(inPe1)));
			BufferedReader inPe2Buff = new BufferedReader(new InputStreamReader(new FileInputStream(inPe2)));
			BufferedReader indexBuff = new BufferedReader(new InputStreamReader(new FileInputStream(inIndex)));

			// Open outputs
			for( String seq : seqs ) {
				String fileName = outBase + "_1_" + seq + ".fastq";
				BufferedWriter outBuff = new BufferedWriter(new FileWriter(fileName));
				outsPe1.put(seq, outBuff);

				fileName = outBase + "_2_" + seq + ".fastq";
				outBuff = new BufferedWriter(new FileWriter(fileName));
				outsPe2.put(seq, outBuff);
			}

			// Read inputs
			for( ; ((linePe1 = inPe1Buff.readLine()) != null) & ((linePe2 = inPe2Buff.readLine()) != null) & ((lineIdx = indexBuff.readLine()) != null); lineNum++ ) {
				// Get index sequence
				String t[] = lineIdx.split("\t");
				String seqIdx = t[8].toUpperCase();
				if( seqs.contains(seqIdx) ) { // Is it one of the sequences from command line?
					writeFastq(linePe1, outsPe1.get(seqIdx), lineNum);
					writeFastq(linePe2, outsPe2.get(seqIdx), lineNum);
				} else {
					// Gpr.debug("Line: " + lineNum + "\t" + seqIdx);
					countUnknown++;
				}

				if( lineNum % SHOW_EVERY == 0 ) Timer.showStdErr(lineNum + " lines, " + countUnknown + " unknown.");
			}

			// Close outputs
			for( String seq : seqs ) {
				outsPe1.get(seq).close();
				outsPe2.get(seq).close();
			}

			// Close inputs
			inPe1Buff.close();
			inPe2Buff.close();
			indexBuff.close();
		} catch(Exception e) {
			throw new RuntimeException(e);
		}

		lineNum--;
		Timer.showStdErr(lineNum + " lines, " + countUnknown + " unknown.");
	}