public void left_right_smooths_W(Matrix eigenFeatDict, Matrix left_singular_vectors,Matrix right_singular_vectors){
		
		ArrayList<Integer> countsList; 
		double[][] nEigenDict=new double[_opt.vocabSize+1][_num_hidden];
		
		
		int num_OOV=(int)_numTokens-_opt.vocabSize;
		if (num_OOV <=0)
			num_OOV=1;//Prevent Divide by zero errors.
		
		
		try {
			createNewEigDict();
			processDocsParallel(eigenFeatDict,left_singular_vectors,right_singular_vectors);
			//processDocsSerial(eigenFeatDict,left_singular_vectors,right_singular_vectors);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (ExecutionException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		
		countsList=_rin.getSortedCountList();
		nEigenDict=newEigenDict.getArray();
		
		for (int i=1;i<=_opt.vocabSize;i++){ //leave OOV
			for (int j=0;j<_num_hidden;j++){
				nEigenDict[i][j]/=countsList.get(i-1);
			}
		}
		
		
		for (int j=0;j<_num_hidden;j++)
			nEigenDict[0][j]/=num_OOV;
		
	
		setEigenFeatDict(new Matrix(nEigenDict));
	}