public void parameterSweep(ThreadPool pool) {
		try {
			for (Reaction reaction : scenarioFittingParameters.keySet()) {
				ScenarioFitting scnFitting = scenarioFittingParameters.get(reaction);
				if (scnFitting == null) continue;
				for (String parName : reaction.getScenarioCfg().getParameters().keySet()) {
					if (scnFitting.getParameterSetting(parName).isFixed() && !scnFitting.getParameterSetting(parName).getFixedValue().equals(reaction.getScenarioCfg().getParameters().get(parName))) {
						reaction.getScenarioCfg().getParameters().put(parName, scnFitting.getParameterSetting(parName).getFixedValue());
					}
				}
			}
			Vector<Pair<ScenarioCfg, ParameterSetting>> parameterList = enumerateVariableParameters();
			updateTotalComputations();
			nComputations = 0;
			currentSettingIndex = -1; //Please notice that nSettings counts the computation index as we start it (so that we can keep the results ordered), while nComputations counts the number of computations we have finished
			visitParameterSettings(parameterList, 0, pool);
			do {
				try {
					Thread.sleep(200);
				} catch (Exception ex) {
					ex.printStackTrace();
				}
			} while (!pool.isEmpty());
			pool.terminateAll();
		} catch (Exception ex) {
			System.err.println("Error: " + ex);
			ex.printStackTrace();
		}
	}