package edu.harvard.mcb.leschziner.particlegenerator;
import java.util.Collection;
import java.util.Vector;
import edu.harvard.mcb.leschziner.core.Particle;
import edu.harvard.mcb.leschziner.core.ParticleGenerator;
import edu.harvard.mcb.leschziner.particlefilter.Shifter;
public class ShiftGenerator implements ParticleGenerator {
/**
*
*/
private static final long serialVersionUID = -2017066268978441033L;
private final Vector<Shifter> shifters;
public ShiftGenerator(int maxShift, int deltaShift) {
shifters = new Vector<Shifter>();
for (int x = -maxShift; x <= maxShift; x += deltaShift) {
for (int y = -maxShift; y <= maxShift; y += deltaShift) {
shifters.add(new Shifter(x, y));
}
}
}
@Override public Collection<Particle> generate(Particle seed) {
// Apply each rotator to the particle
Vector<Particle> shifted = new Vector<Particle>(shifters.size());
for (Shifter shifter : shifters) {
shifted.add(shifter.filter(seed));
}
return shifted;
}
@Override public Collection<Particle> generate(Collection<Particle> seeds) {
Vector<Particle> shifted = new Vector<Particle>(seeds.size()
* shifters.size());
for (Particle seed : seeds) {
shifted.addAll(generate(seed));
}
return shifted;
}
}