MATSIM
ActivityWriter.java
Go to the documentation of this file.
1 package org.matsim.analysis;
2 
3 import jakarta.inject.Inject;
4 import org.apache.commons.csv.CSVFormat;
5 import org.apache.commons.csv.CSVPrinter;
6 import org.apache.logging.log4j.LogManager;
7 import org.apache.logging.log4j.Logger;
8 import org.matsim.api.core.v01.Id;
12 import org.matsim.core.config.Config;
17 import org.matsim.core.utils.io.IOUtils;
18 
19 import java.io.BufferedWriter;
20 import java.io.IOException;
21 import java.util.ArrayList;
22 import java.util.List;
23 import java.util.Map;
24 
25 public class ActivityWriter {
26 
27  @Inject
28  private Config config;
29 
30  @Inject
32 
33  @Inject
35 
36  private static final Logger log = LogManager.getLogger(ActivityWriter.class);
37 
38  void writeCsv(int iteration) {
39  log.info("Writing all Activities to " + Controler.DefaultFiles.activitiescsv);
40 
41  List<String> attributes = prepareAttributes();
42  String[] header = prepareHeader(attributes);
43 
44  try{
45  BufferedWriter bufferedWriter = IOUtils.getBufferedWriter(outputDirectoryHierarchy.getIterationFilename(iteration, Controler.DefaultFiles.activitiescsv));
46  CSVPrinter csvPrinter = new CSVPrinter(bufferedWriter, CSVFormat.Builder.create()
47  .setDelimiter(config.global().getDefaultDelimiter().charAt(0))
48  .setHeader(header).build());
49 
50  for (Map.Entry<Id<Person>, Plan> e : experiencedPlansService.getExperiencedPlans().entrySet()) {
51  writeActivitiesPerPerson(e.getKey(), e.getValue(), attributes, csvPrinter);
52  }
53 
54  csvPrinter.close();
55  } catch (IOException e) {
56  e.printStackTrace();
57  }
58 
59  log.info("...done");
60  }
61 
62  private static void writeActivitiesPerPerson(Id<Person> personId, Plan plan, List<String> attributes, CSVPrinter csvPrinter) throws IOException {
63  int i = 0;
65 
66  List<Object> line = new ArrayList<>();
67  int id = ++i;
68  line.add(personId);
69  line.add(id);
70  line.add(personId.toString() + "_" + id);
71  line.add(act.getType());
72 
73  line.add(act.getStartTime().isDefined() ? act.getStartTime().seconds() : "");
74  line.add(act.getEndTime().isDefined() ? act.getEndTime().seconds() : "");
75  line.add(act.getMaximumDuration().isDefined() ? act.getMaximumDuration().seconds() : "");
76  line.add(act.getLinkId() != null ? act.getLinkId() : "");
77  line.add(act.getFacilityId() != null ? act.getFacilityId(): "");
78 
79  if (act.getCoord() != null) {
80  line.add(act.getCoord().getX());
81  line.add(act.getCoord().getY());
82  } else {
83  line.add("");
84  line.add("");
85  }
86 
87  for (String attribute : attributes) {
88  Object value = plan.getAttributes().getAttribute(attribute);
89  String result = value != null ? String.valueOf(value) : "";
90  line.add(result);
91  }
92 
93  csvPrinter.printRecord(line);
94  }
95  }
96 
97  private List<String> prepareAttributes() {
98  return experiencedPlansService.getExperiencedPlans().values().stream()
100  .flatMap(act -> act.getAttributes().getAsMap().keySet().stream())
101  .sorted().distinct().toList();
102  }
103 
104  private static String[] prepareHeader(List<String> attributes) {
105  List<String> header = new ArrayList<>();
106  header.add("person");
107  header.add("activity_number");
108  header.add("activity_id");
109  header.add("activity_type");
110  header.add("start_time");
111  header.add("end_time");
112  header.add("maximum_duration");
113  header.add("link_id");
114  header.add("facility_id");
115  header.add("coord_x");
116  header.add("coord_y");
117  header.addAll(attributes);
118  return header.toArray(String[]::new);
119  }
120 }
static String [] prepareHeader(List< String > attributes)
final String getIterationFilename(final int iteration, final String filename)
OutputDirectoryHierarchy outputDirectoryHierarchy
static List< Activity > getActivities(final Plan plan, final StageActivityHandling stageActivityHandling)
static BufferedWriter getBufferedWriter(URL url, Charset charset, boolean append)
Definition: IOUtils.java:390
ExperiencedPlansService experiencedPlansService
static void writeActivitiesPerPerson(Id< Person > personId, Plan plan, List< String > attributes, CSVPrinter csvPrinter)
final GlobalConfigGroup global()
Definition: Config.java:395