public boolean loadVcf() {
		//---
		// Create data structure
		//---
		Timer.showStdErr("Counting lines form file: " + vcfFileName);
		int numLines = Gpr.countLines(vcfFileName);
		Timer.showStdErr("Done. Number of lines: " + numLines);

		Timer.showStdErr("Loading file " + vcfFileName);
		VcfFileIterator vcf = new VcfFileIterator(vcfFileName);
		int entryNum = 0;
		for (VcfEntry ve : vcf) {
			if (genotypeVectors == null) {
				long mem = ((long) ve.getVcfGenotypes().size()) * numLines / 4L;
				double memG = mem / (1024.0 * 1024 * 1024);
				Timer.showStdErr(String.format("Initializing data structures. Expected memory consumption (lower bound): %d bytes (%.2f Gb).", mem, memG));

				genotypeVectors = new GenotypeVector[ve.getVcfGenotypes().size()];
				for (int i = 0; i < genotypeVectors.length; i++)
					genotypeVectors[i] = new GenotypeVector(numLines);

				Timer.showStdErr("Done.");
				Timer.showStdErr("Loading: ");
			}

			//System.out.print(ve.getChromosomeName() + ":" + ve.getStart());
			int sampleNum = 0;
			for (VcfGenotype vg : ve) {
				set(entryNum, sampleNum++, vg);
				//System.out.print(String.format("%2d", code));
			}
			//System.out.println("");

			entryNum++;
			Gpr.showMark(entryNum, MARK);
		}

		System.err.println("");
		Timer.showStdErr("Done");
		return true;
	}