WriteContactsPerDay.java
package org.matsim.episim.model.listener;
import com.google.inject.Inject;
import org.matsim.api.core.v01.Id;
import org.matsim.api.core.v01.population.Person;
import org.matsim.episim.EpisimPerson;
import org.matsim.episim.EpisimReporting;
import org.matsim.episim.InfectionEventHandler;
import org.matsim.episim.model.SimulationListener;
import org.matsim.episim.model.VirusStrain;
import org.matsim.facilities.ActivityFacility;
import org.matsim.vehicles.Vehicle;
import java.io.BufferedWriter;
import java.time.LocalDate;
import java.util.Arrays;
import java.util.Map;
import java.util.SplittableRandom;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
/**
* Writes contacts for each day.
*/
public class WriteContactsPerDay implements SimulationListener {
private Map<Id<Person>, EpisimPerson> persons;
@Inject
private EpisimReporting reporting;
private BufferedWriter writer;
@Override
public void init(SplittableRandom rnd, Map<Id<Person>, EpisimPerson> persons, Map<Id<ActivityFacility>, InfectionEventHandler.EpisimFacility> facilities, Map<Id<Vehicle>, InfectionEventHandler.EpisimVehicle> vehicles) {
this.persons = persons;
}
@Override
public void onIterationEnd(int iteration, LocalDate date) {
if (writer == null) {
writer = reporting.registerWriter("contactsPerDay.tsv");
reporting.writeAsync(writer, "date\tavgContacts\n");
}
reporting.writeAsync(writer, date + "\t" + reporting.getTotalContacts() / (double) persons.size() + "\n");
}
}