public static HashMap<String, ContextCount> 
		getContextMap( File fastQFile, int leftHashLength, 
						int rightHashLength) throws Exception
	{
		HashMap<String, ContextCount> map = new HashMap<String, ContextCount>();
		
		BufferedReader reader = new BufferedReader(new FileReader(fastQFile));
		
		int numLines=0;
		
		for(  FastQ fastq = FastQ.readOneOrNull(reader); 
					fastq != null; 
						fastq = FastQ.readOneOrNull(reader))
		{
			numLines++;
			String seq = fastq.getSequence().toUpperCase();
			
			// todo: test to make sure we are getting to the end of the sequence
			// todo: add the reverse complement
			int stopPoint = seq.length() - (leftHashLength + rightHashLength + 1);
			
			for( int x=0; x < stopPoint; x++ )
			{
				String leftHash = seq.substring(x, x + leftHashLength);
				
				char insert = seq.charAt(x + leftHashLength);
				
				String rightHash = seq.substring(x + leftHashLength + 1, 
						x + leftHashLength + 1 + rightHashLength);
				
				String key = leftHash + rightHash;
				
				if(allValid(key) && valid(insert))
				{
					ContextCount cc = map.get(key);
					
					if( cc == null)
					{
						cc = new ContextCount();
						map.put(key, cc);
					}
					
					cc.increment(insert);
				}
			}
			
			if( numLines % 10000 ==0)
			{
				System.out.println(numLines + " " + map.size() + " " + ((float)map.size() / numLines));
				writeMap(map, new File( "c:\\temp\\out.txt"));
				System.exit(1);
			}
				
		}
		
		return map;
	}