org.lcsim allows you to add (Sub-)Drivers to your (Parent-)Driver.
add(new SubDriverClass()); |
You can put this anywhere in your code!
The Event loop process needs to be told to execute the child Drivers specifically. This is done with
super.process() |
Again, this statement can appear anywhere in your code, even in conditional statements.
You can combie these statements to specifically run your Drivers only on certain events. Like so:
import java.util.List; import org.lcsim.event.EventHeader; import org.lcsim.event.MCParticle; import org.lcsim.util.Driver; class PrintDriver1 extends Driver { public void process(EventHeader e) { System.out.println("PrintDriver1 has been called"); } } class PrintDriver2 extends Driver { public void process(EventHeader e) { System.out.println("PrintDriver2 has been called"); } } public class FilterExample extends Driver { // Permanently add a Sub-Driver to this one public FilterExample() { add(new PrintDriver1()); } public void process(EventHeader e) { List<MCParticle> parts = e.getMCParticles(); System.out.println("Size: " + parts.size()); if (parts.size() < 100) { // Execute all added Sub-Drivers super.process(e); } else if (parts.size() < 150) { // Add a Driver just for now PrintDriver2 p2 = new PrintDriver2(); add(p2); // again, execute ALL Sub-Drivers super.process(e); // you can even remove a Driver. remove(p2); } else { System.out.println("None is called"); } } } |