Executing Drivers conditionally

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");
        }
    }
}
  • No labels