@SuppressWarnings("unchecked")
	public void initialize(String pathToYml) throws IOException {
		YamlReader reader = new YamlReader(new FileReader(pathToYml));
		Map<String, Object> input = (Map<String, Object>) reader.read();
		this.blastDbSettings = (Map<String, Map<String, String>>) input
				.get(BLAST_DBS_KEY);
		setPathToProteinsFasta((String) input.get(PROTEINS_FASTA_KEY));
		setPathToInterproDatabase((String) input.get(INTERPRO_DATABASE_KEY));
		setPathToInterproResults((String) input.get(INTERPRO_RESULT_KEY));
		setPathToGeneOntologyResults((String) input
				.get(GENE_ONTOLOGY_RESULT_KEY));
		setPathToOutput((String) input.get(OUTPUT_KEY));
		setTokenScoreBitScoreWeight(Double.parseDouble((String) input
				.get(TOKEN_SCORE_BIT_SCORE_WEIGHT)));
		setTokenScoreDatabaseScoreWeight(Double.parseDouble((String) input
				.get(TOKEN_SCORE_DATABASE_SCORE_WEIGHT)));
		setTokenScoreOverlapScoreWeight(Double.parseDouble((String) input
				.get(TOKEN_SCORE_OVERLAP_SCORE_WEIGHT)));
		setDescriptionScorePatternFactorWeight(Double
				.parseDouble((String) input
						.get(DESCRIPTION_SCORE_RELATIVE_DESCIPTION_FREQUENCY_WEIGHT)));
		setWriteTokenSetToOutput(Boolean.parseBoolean((String) input
				.get(WRITE_TOKEN_SET_TO_OUTPUT)));
		setWriteBestBlastHitsToOutput(Boolean.parseBoolean((String) input
				.get(WRITE_BEST_BLAST_HITS_TO_OUTPUT)));
		setWriteScoresToOutput(Boolean.parseBoolean((String) input
				.get(WRITE_SCORES_TO_OUTPUT)));
		// Generate the Blacklists and Filters for each Blast-Database from
		// their appropriate files:
		for (String blastDatabaseName : getBlastDatabases()) {
			this.blastResultsBlacklists
					.put(blastDatabaseName,
							fromFile(getPathToBlastResultsBlackList(blastDatabaseName)));
			this.blastResultsFilter.put(blastDatabaseName,
					fromFile(getPathToBlastResultsFilter(blastDatabaseName)));
			this.tokenBlacklists.put(blastDatabaseName,
					fromFile(getPathToTokenBlacklist(blastDatabaseName)));
			// Set Database-Weights and Description-Score-Bit-Score-Weight:
			this.getParameters().setBlastDbWeight(
					blastDatabaseName,
					this.getBlastDbSettings(blastDatabaseName).get(
							Settings.BLAST_DB_WEIGHT_KEY));
			this.getParameters().setDescriptionScoreBitScoreWeight(
					blastDatabaseName,
					this.getBlastDbSettings(blastDatabaseName).get(
							Settings.DESCRIPTION_SCORE_BIT_SCORE_WEIGHT));
		}
		// If started to train the algorithm references are stored in this file:
		setPathToReferencesFasta((String) input.get(REFERENCES_FASTA_KEY));
		// If started in training-mode the F-Measure's Beta-Parameter can be set
		// to some other value than 1.0
		if (input.get(F_MEASURE_BETA_PARAM_KEY) != null)
			this.fMeasureBetaParameter = Double.parseDouble((String) input
					.get(F_MEASURE_BETA_PARAM_KEY));
		// If started to compare AHRD with Blast2Go, enable reading of
		// B2G-Annotations:
		if (input.get(BLAST_2_GO_ANNOT_FILE_KEY) != null)
			this.pathToBlast2GoAnnotations = (String) input
					.get(BLAST_2_GO_ANNOT_FILE_KEY);
		// Simulated Annealing can be started with custom temperature and value
		// it is cooled-down by each step:
		if (input.get(TEMPERATURE_KEY) != null)
			setTemperature(Integer
					.parseInt((String) input.get(TEMPERATURE_KEY)));
		if (input.get(COOL_DOWN_BY_KEY) != null)
			this.coolDownBy = Integer.parseInt((String) input
					.get(COOL_DOWN_BY_KEY));
		if (input.get(REMEMBER_SIMULATED_ANNEALING_PATH_KEY) != null
				&& Boolean.parseBoolean(input.get(
						REMEMBER_SIMULATED_ANNEALING_PATH_KEY).toString()))
			this.rememberSimulatedAnnealingPath = true;
		// Evaluation or Optimization might be interested in the highest
		// possibly achievable evaluation-score:
		if (input.get(FIND_HIGHEST_POSSIBLE_EVALUATION_SCORE_KEY) != null
				&& Boolean.parseBoolean(input.get(
						FIND_HIGHEST_POSSIBLE_EVALUATION_SCORE_KEY).toString()))
			this.findHighestPossibleEvaluationScore = true;
	}