EpisimInitialInfectionEvent.java

package org.matsim.episim.events;

import org.matsim.api.core.v01.Id;
import org.matsim.api.core.v01.events.Event;
import org.matsim.api.core.v01.population.Person;
import org.matsim.core.api.internal.HasPersonId;
import org.matsim.episim.model.VirusStrain;

import java.util.Map;


/**
 * Event for an initial infection.
 */
public class EpisimInitialInfectionEvent extends Event implements HasPersonId, Comparable<Event> {

	public static final String EVENT_TYPE = "episimInitialInfection";

	private final Id<Person> personId;
	private final VirusStrain virusStrain;
	private final double antibodies;
	private final double maxAntibodies;
	private final int numVaccinations;


	/**
	 * Constructor.
	 */
	public EpisimInitialInfectionEvent(double time, Id<Person> personId, VirusStrain strain, double antibodies, double maxAntibodies, int numVaccinations) {

		super(time);

		this.personId = personId;
		this.virusStrain = strain;
		this.antibodies = antibodies;
		this.maxAntibodies = maxAntibodies;
		this.numVaccinations = numVaccinations;
	}

	/**
	 * Return initial infection as "normal" infection event.
	 */
	public EpisimInfectionEvent asInfectionEvent() {
		return new EpisimInfectionEvent(getTime(), personId, null, null, null, -1, virusStrain, 0, antibodies, maxAntibodies, numVaccinations);
	}

	@Override
	public String getEventType() {
		return EVENT_TYPE;
	}

	@Override
	public Id<Person> getPersonId() {
		return personId;
	}

	public VirusStrain getVirusStrain() {
		return virusStrain;
	}

	@Override
	public Map<String, String> getAttributes() {
		Map<String, String> attr = super.getAttributes();
		attr.put(EpisimInfectionEvent.VIRUS_STRAIN, virusStrain.toString());
		attr.put(EpisimInfectionEvent.ANTIBODIES, Double.toString(antibodies));
		attr.put(EpisimInfectionEvent.MAX_ANTIBODIES, Double.toString(maxAntibodies));
		attr.put(EpisimInfectionEvent.NUM_VACCINATIONS, Integer.toString(numVaccinations));

		return attr;
	}

	@Override
	public int compareTo(Event obj) {
		// Defines a stable ordering for events
		return Double.compare(getTime(), obj.getTime());
	}
}