public void parseArguments(){
		numberOfHashTables = getIntegerValue("-t",4);
		numberOfHashes = getIntegerValue("-h",4);
		numberOfNeighbours = getIntegerValue("-n",4);
		String hashFamilyType = getValue("-f", "l2");
		
		
		linear = hasOption("-l");
		
		radius = getDoubleValue("-r",0.0);
		printHelp = hasOption("--help") || arguments.length == 0;
		benchmark = hasOption("-b");
		String datasetFile = getValue("-d", null);
		String queryFile = getValue("-q", null);
		if(benchmark){
			dimensions = 256;
			if(radius==0){
				radius = 10;
			}
			dataset = TestUtils.generate(dimensions, 100,512);
			TestUtils.addNeighbours(dataset, numberOfNeighbours, radius);
		}
		if(datasetFile !=null){
			dataset = LSH.readDataset(datasetFile,Integer.MAX_VALUE);
			dimensions = dataset.get(0).getDimensions();
		}
		if(queryFile != null){
			queries = LSH.readDataset(queryFile,Integer.MAX_VALUE);
			dimensions = queries.get(0).getDimensions();
		}
		if(radius == 0 && hashFamilyType.equalsIgnoreCase("l1")){
			measure = new CityBlockDistance();
			radius = LSH.determineRadius(dataset, measure, timeout);
		} else if (radius == 0 && hashFamilyType.equalsIgnoreCase("l2")){
			measure =  new EuclideanDistance();
			radius = LSH.determineRadius(dataset, measure, timeout);
		}
		family = getHashFamily(radius,hashFamilyType,dimensions);
	}