private static void modelSummarizer(File res_dln, File res_ln, File bic_dln, File bic_ln) throws Exception {
		String tweetURL = new String();
		double[] maxLikelihood = {0.0, 0.0};
		stopWatch("Reading: " + res_dln.getPath());

		try{
			InputStreamReader isr = new InputStreamReader(new FileInputStream(res_dln));
			BufferedReader br = new BufferedReader(isr);
			tweetURL = br.readLine();
			
			while(!br.readLine().isEmpty());

			ArrayList<double[]> clusters = new ArrayList<double[]>();
			String line = new String();
			while((line = br.readLine()).startsWith("#")) {
				double[] params = new double[4];
				line = br.readLine();
				params[0] = Double.parseDouble(line.substring(8)); //"weight: "
				line = br.readLine();
				params[1] = Double.parseDouble(line.substring(6)); //"mean: "
				line = br.readLine();
				params[2] = Double.parseDouble(line.substring(10)); //"variance: "
				line = br.readLine();
				params[3] = Double.parseDouble(line.substring(7)); //"delay: "
				br.readLine();
				clusters.add(params);
			}
			
			while((line = br.readLine()) != null){ //cޓxSǂݎ
				maxLikelihood[0] = Double.parseDouble(line); //ŏIsL^
			}
			
			
			br.close();
			isr.close();
			
			double[] charVector = new double[1 + 4*ref];
			charVector[0] = clusters.size();
			
			int[] weightMaxIndex = new int[ref];
			ArrayList<Integer> alrdyPicked = new ArrayList<Integer>();
			for(int r=0; r<ref; r++){
				double weightMin = 0.0;
				for (int k = 0; k < clusters.size(); k++) {
					double[] params = clusters.get(k);
					if(params[0] > weightMin && !alrdyPicked.contains(k)) {
						weightMin = params[0];
						weightMaxIndex[r] = k;
					}
				}
				for (int i=0; i<4; i++) {
					if(!alrdyPicked.contains(weightMaxIndex[r])) {
						double[] params = clusters.get(weightMaxIndex[r]);
						charVector[1 + 4*r + i] = params[i];
					}else{
						charVector[1 + 4*r + i] = 0.0;
					}
				}
				if(!alrdyPicked.contains(weightMaxIndex[r])) alrdyPicked.add(weightMaxIndex[r]);
			}

			if(res_ln.exists()){
				InputStreamReader isr2 = new InputStreamReader(new FileInputStream(res_ln));
				BufferedReader br2 = new BufferedReader(isr2);
				
				line = new String();
				while((line = br2.readLine()) != null){
					try{
						maxLikelihood[1] = Double.parseDouble(line);
					}catch(NumberFormatException e) {
						continue;
					}
				}
				
				br2.close();
				isr2.close();
			}

			File infrootFile = new File(infroot);
			File char_vec = new File(infrootFile, infrootFile.getName() + ".char_vec.csv");
			
			OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(char_vec, vecAppend));
			BufferedWriter bw = new BufferedWriter(osw); 
			if (!vecAppend) {
				stopWatch("Writing: "+ char_vec.getPath());
				bw.write("Tweet URL,# of Cluster");
				for(int r=0; r<ref; r++) {
					bw.write(String.format(",weight%d,mean%d,variance%d,delay%d",r,r,r,r));
				}
				bw.newLine();
				vecAppend = true;
			}else{
				stopWatch("Appending: "+ char_vec.getPath());
			}
			bw.write(tweetURL);
			for(int i=0; i<charVector.length; i++) bw.write("," + charVector[i]);
			bw.newLine();
			
			bw.close();
			osw.close();
		
		}catch(FileNotFoundException e){
			try{
			InputStreamReader isr = new InputStreamReader(new FileInputStream(res_ln));
			BufferedReader br = new BufferedReader(isr);
			tweetURL = br.readLine();
			String line = new String();
			while((line = br.readLine()) != null){
				try {
					maxLikelihood[1] = Double.parseDouble(line);
				}catch(NumberFormatException f) {
					continue;
				}
			}
			
			br.close();
			isr.close();
			}catch(Exception d){
				e.printStackTrace();
			}
		}catch (NumberFormatException e) {
			e.printStackTrace();
		}
				
		BICSummarizer(bic_dln, bic_ln, tweetURL, maxLikelihood);
	}