21 package org.matsim.core.controler.corelisteners;
23 import org.apache.logging.log4j.LogManager;
24 import org.apache.logging.log4j.Logger;
36 import com.google.inject.Inject;
37 import com.google.inject.Singleton;
51 final class PlansDumpingImpl
implements PlansDumping, BeforeMobsimListener {
53 static final private Logger log = LogManager.getLogger(PlansDumpingImpl.class);
55 @Inject
private Config config;
56 @Inject
private Network network;
57 @Inject
private Population population;
58 @Inject
private IterationStopWatch stopwatch;
59 @Inject
private OutputDirectoryHierarchy controlerIO;
60 private int writePlansInterval ;
62 private int writeMoreUntilIteration;
65 PlansDumpingImpl(ControllerConfigGroup config) {
66 this.writePlansInterval = config.getWritePlansInterval();
67 this.writeMoreUntilIteration = config.getWritePlansUntilIteration() ;
71 public void notifyBeforeMobsim(
final BeforeMobsimEvent event) {
72 final boolean writingPlansAtAll = writePlansInterval > 0;
73 final boolean regularWritePlans = writingPlansAtAll && (
event.getIteration()>0 &&
event.getIteration() % writePlansInterval== 0);
74 final boolean earlyIteration =
event.getIteration() <= writeMoreUntilIteration ;
75 if ( writingPlansAtAll && (regularWritePlans || earlyIteration) ) {
76 stopwatch.beginOperation(
"dump all plans");
77 log.info(
"dumping plans...");
78 final String inputCRS = config.plans().getInputCRS();
79 final String internalCRS = config.global().getCoordinateSystem();
81 if ( inputCRS == null ) {
82 new PopulationWriter(population, network).write(controlerIO.getIterationFilename(event.getIteration(), Controler.DefaultFiles.population));
85 log.info(
"re-projecting population from "+internalCRS+
" back to "+inputCRS+
" for export" );
87 final CoordinateTransformation transformation =
92 new PopulationWriter(transformation, population, network).write(controlerIO.getIterationFilename(event.getIteration(), Controler.DefaultFiles.population));
94 log.info(
"finished plans dump.");
95 stopwatch.endOperation(
"dump all plans");