private void readFileToFillCounter(final String inputFile, final boolean isZoneBW27To42) { try (BufferedReader reader = IOUtils.getBufferedReader(inputFile)) { String line = reader.readLine(); List<String> labels = new ArrayList<>(); while (line != null) { String row[] = line.split("\t"); List<String> strs = Arrays.asList(row); if (row[0].substring(0, 1).matches("[A-Za-z]") // labels && !row[0].startsWith("NA") // "NA" could also be inside the data ) { for (String s : strs) { labels.add(s); } } else { // main data String mode = strs.get(labels.indexOf(PatnaDemandLabels.mode.toString())); String monthlyIncome = strs.get(labels.indexOf(PatnaDemandLabels.monthlyIncome.toString())); String dailyExpenditure = strs.get(labels.indexOf(PatnaDemandLabels.dailyTransportCost.toString())); String tripPurpose = strs.get(labels.indexOf(PatnaDemandLabels.tripPurpose.toString())); if (tripPurpose.equals("9999") && isZoneBW27To42) { tripPurpose = PatnaUrbanActivityTypes.work.toString(); } else tripPurpose = PatnaCalibrationUtils.getTripPurpose(tripPurpose); // -- if (PatnaUtils.ALL_MODES.contains(mode)) ; // one of non-slum file have modes instead of codes. else if (Integer.valueOf(mode) <= 9) mode = PatnaCalibrationUtils.getTravelModeFromCode(mode); else mode = "NA"; if (tripPurpose.equalsIgnoreCase( PatnaUrbanActivityTypes.work .toString())) { // only work trips; distri is also taken for work trips if (pdc.mode2counter.containsKey(mode)) pdc.mode2counter.put(mode, pdc.mode2counter.get(mode) + 1); else pdc.mode2counter.put(mode, 1); } // -- // -- if (!monthlyIncome.equals("a") && !monthlyIncome.equals("99999")) monthlyIncome = String.valueOf(PatnaCalibrationUtils.getIncomeInterval(monthlyIncome)); else monthlyIncome = "NA"; if (pdc.inc2counter.containsKey(monthlyIncome)) pdc.inc2counter.put(monthlyIncome, pdc.inc2counter.get(monthlyIncome) + 1); else pdc.inc2counter.put(monthlyIncome, 1); // -- // -- if (!dailyExpenditure.equals("a") && !dailyExpenditure.equals("") && !dailyExpenditure.equals("9999")) { dailyExpenditure = String.valueOf(PatnaCalibrationUtils.getDailyExpenditureInterval(dailyExpenditure)); } else dailyExpenditure = "NA"; if (pdc.dailyExp2counter.containsKey(dailyExpenditure)) pdc.dailyExp2counter.put( dailyExpenditure, pdc.dailyExp2counter.get(dailyExpenditure) + 1); else pdc.dailyExp2counter.put(dailyExpenditure, 1); // -- } line = reader.readLine(); } } catch (IOException e) { throw new RuntimeException(". Reason " + e); } }
public void readZonesFileAndWriteData( final String inputFile, final boolean isZoneBW27To42 // only HBW trips are available for 27 to 42; rest is imputed. ) { BufferedReader reader = IOUtils.getBufferedReader(inputFile); String line; try { line = reader.readLine(); } catch (IOException e1) { throw new RuntimeException(". Reason " + e1); } List<String> labels = new ArrayList<>(); while (line != null) { String row[] = line.split("\t"); List<String> strs = Arrays.asList(row); if (row[0].substring(0, 1).matches("[A-Za-z]") // labels && !row[0].startsWith("NA") // "NA" could also be inside the data ) { for (String s : strs) { labels.add(s); } } else { // main data String ward = strs.get(labels.indexOf(PatnaDemandLabels.ward.toString())); String member = strs.get(labels.indexOf(PatnaDemandLabels.member.toString())); String sex = strs.get(labels.indexOf(PatnaDemandLabels.sex.toString())); String age = strs.get(labels.indexOf(PatnaDemandLabels.age.toString())); String occupation = strs.get(labels.indexOf(PatnaDemandLabels.occupation.toString())); String originWard = strs.get(labels.indexOf(PatnaDemandLabels.originZone.toString())); String destinationWard = strs.get(labels.indexOf(PatnaDemandLabels.destinationZone.toString())); String tripPurpose = strs.get(labels.indexOf(PatnaDemandLabels.tripPurpose.toString())); String mode = strs.get(labels.indexOf(PatnaDemandLabels.mode.toString())); String monthlyIncome = strs.get(labels.indexOf(PatnaDemandLabels.monthlyIncome.toString())); // Rs or na String dailyExpenditure = strs.get(labels.indexOf(PatnaDemandLabels.dailyTransportCost.toString())); // Rs or na String tripFreq = strs.get(labels.indexOf(PatnaDemandLabels.tripFrequency.toString())); if (tripPurpose.equals("9999") && isZoneBW27To42) { tripPurpose = PatnaUrbanActivityTypes.work.toString(); } else tripPurpose = PatnaCalibrationUtils.getTripPurpose(tripPurpose); if (mode.equals("9999")) { mode = pdc.randomModes.remove(0); // always take what is on top. } else if (PatnaUtils.ALL_MODES.contains(mode)) { // nothing to do. } else if (Integer.valueOf(mode) <= 9) { mode = PatnaCalibrationUtils.getTravelModeFromCode(mode); } if (monthlyIncome.equals("a") || monthlyIncome.equals("99999")) { monthlyIncome = pdc.monthlyIncInterval.remove(0); // interval and NOT actual income monthlyIncome = String.valueOf(PatnaUtils.getAverageIncome(monthlyIncome)); } if (dailyExpenditure.equals("a")) { dailyExpenditure = pdc.dailyCostInterval.remove(0); // interval and NOT actual cost dailyExpenditure = String.valueOf(PatnaUtils.getAverageDailyTranportCost(dailyExpenditure)); } monthlyIncome = String.valueOf(PatnaCalibrationUtils.getIncomeInterval(monthlyIncome)); dailyExpenditure = String.valueOf(PatnaCalibrationUtils.getDailyExpenditureInterval(dailyExpenditure)); try { writer.write( ward + "\t" + member + "\t" + sex + "\t" + age + "\t" + occupation + "\t" + monthlyIncome + "\t" + dailyExpenditure + "\t" + originWard + "\t" + destinationWard + "\t" + tripPurpose + "\t" + // all of entries in this file is HBW trips mode + "\t" + tripFreq + "\n"); } catch (IOException e) { throw new RuntimeException(". Reason " + e); } } try { line = reader.readLine(); } catch (IOException e) { throw new RuntimeException(". Reason " + e); } } }