public ProcessPaperPageRank(String dir) throws PubmedPagerankException {
		try {
			properties = Utility.loadProperties(dir, PAGERANK_PROPERTIES);
		} catch (Exception e) { throw new PubmedPagerankException("An exception occurred loading the pagerank properties file", e); }
		
		threadCnt = Integer.parseInt(properties.getProperty(PROPERTY_THREADCNT));
		filePath = properties.getProperty(PROPERTY_PROCESSDIR, System.getProperty("user.dir") + File.separator + DEFAULT_PATH);
		Utility.setupLogging(filePath); //Setup the Log4J logging
		log.info("ProcessPaperPageRank: path used for all file access = " + filePath);
		String nodeFileName = filePath + File.separator + properties.getProperty(PROPERTY_NODE_FILE);
		String edgeFileName = filePath + File.separator + properties.getProperty(PROPERTY_EDGE_FILE);
		nodeScoresDirName = properties.getProperty(PROPERTY_NODE_SCORE_DIR);
		outputDirName = properties.getProperty(PROPERTY_OUTPUT_DIR);
		outputPrefix = properties.getProperty(PROPERTY_OUTPUT_PREFIX);
		// Create the array of workers
		pageRankWorkers = new MeshPaperPageRank[threadCnt];
		if (setupWorkers(threadCnt, nodeFileName, edgeFileName) != threadCnt) {
			throw new PubmedPagerankException("The page rank workers were not successfully created.");
		}
		// Load the job queue
		loadWorkQueue();
		return;
	}// end of constructor