public static Distribution getDistributionFromConfigFile(String mainTagPath) throws CorruptConfigurationEntryException {
		getRandom(); // initialize the randomGenerator
		String distributionName = Configuration.getStringParameter(mainTagPath + "/distribution");
		
		try {
			Class<?> c = Class.forName("sinalgo.tools.statistics." + distributionName + "Distribution");
			// construct the array of class-types of the objects
			Class<?>[] parameterTypes = {String.class};
			// find the corresponding constructor ...
			Constructor<?> constructor = c.getConstructor(parameterTypes);
			// ... and create an instance of the object
			return (Distribution) constructor.newInstance(mainTagPath);
		} catch(ClassNotFoundException e) {
			throw new IllegalArgumentException("Cannot find an implementation of 'tools.statistics." + distributionName + "'Distribution.java' to create a distribution given its name. (" + e.getMessage() + ")");
		} catch(NoSuchMethodException e) {
			throw new IllegalArgumentException("Cannot find the constructor of 'tools.statistics." + distributionName + "'Distribution.java' to create a distribution given a configuration-file entry name. (" + e.getMessage() + ")");
		} catch(InvocationTargetException e) {
			throw new IllegalArgumentException("Cannot create an instance of 'tools.statistics." + distributionName + "'Distribution.java' (" + e.getCause().getMessage() + ")");
		} catch(IllegalAccessException e) {
			throw new IllegalArgumentException("Cannot create an instance of 'tools.statistics." + distributionName + "'Distribution.java' (" + e.getMessage() + ")");
		} catch(InstantiationException e) {
			throw new IllegalArgumentException("Cannot create an instance of 'tools.statistics." + distributionName + "'Distribution.java' (" + e.getMessage() + ")");
		} 
	}