public void loadGeneIds(String geneIdsFile) {
		//---
		// Load Gene IDs data
		//---
		if (verbose) Timer.showStdErr("Loading Gene IDs from " + geneIdsFile);
		GeneIds geneIds = new GeneIds(geneIdsFile);

		// Assign to geneIDs
		Pattern patternEnsg = Pattern.compile("ENSG[0-9]*");
		Pattern patternEnst = Pattern.compile("ENST[0-9]*");
		Pattern patternRefSeqNm = Pattern.compile("NM_[0-9]*");
		Pattern patternRefSeqNp = Pattern.compile("NP_[0-9]*");

		// Find matching gene IDs for all entities
		int countMatched = 0, countUnMatched = 0;
		for (Entity e : this) {
			String name = e.getName();

			List<String> gids = null;
			String gname = null;

			// Try to match: From most specific to least specific
			if (hasRegexp(patternEnst, name)) {
				// Found ENSEMBL transcript
				gname = findRegexp(patternEnst, name);
				gids = geneIds.getId2tr().getIds(gname);
			} else if (hasRegexp(patternEnsg, name)) {
				// Found ENSEMBL gene ID
				gname = findRegexp(patternEnsg, name);
				gids = new LinkedList<String>();
				gids.add(gname);
			} else if (hasRegexp(patternRefSeqNm, name)) {
				// Found RefeSeq mRNA ID
				gname = findRegexp(patternRefSeqNm, name);
				gids = geneIds.getId2refseqId().getIds(gname);
			} else if (hasRegexp(patternRefSeqNp, name)) {
				// Found RefeSeq protein ID
				gname = findRegexp(patternRefSeqNp, name);
				gids = geneIds.getId2refseqProtId().getIds(gname);
			} else {
				// May be it's gene name followed by some other stuff
				gname = name.split(" ")[0];
				gids = geneIds.getId2geneName().getIds(gname);
			}

			// Found any GeneIDs
			if (gids != null) {
				countMatched++;

				// Add all gene IDs
				for (String gid : gids)
					add(e, gid);

			} else countUnMatched++;

		}

		if (verbose) Timer.showStdErr("Done. Entities matched to geneIDs:" + countMatched + " / " + countUnMatched);
	}