Commit in SlicDiagnostics/src/org/lcsim/slic/diagnostics on MAIN
UserOptions.java+123added 1.1
CommandLineProcessor.java+66-301.4 -> 1.5
Runner.java+13-121.6 -> 1.7
SlicDiagnosticsDriver.java+124-511.17 -> 1.18
+326-93
1 added + 3 modified, total 4 files
JM: Add more command-line options and support properties files

SlicDiagnostics/src/org/lcsim/slic/diagnostics
UserOptions.java added at 1.1
diff -N UserOptions.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ UserOptions.java	16 Mar 2006 02:34:01 -0000	1.1
@@ -0,0 +1,123 @@
+package org.lcsim.slic.diagnostics;
+
+import java.util.Properties;
+import java.util.Map;
+import java.util.HashMap;
+
+/**
+ * 
+ * Represents simple options set from properties file or command-line.
+ * 
+ * @author Jeremy McCormick
+ * @version $Id: UserOptions.java,v 1.1 2006/03/16 02:34:01 jeremy Exp $
+ */
+public final class UserOptions
+{    
+    Map<String, Boolean> _booleanOptions = new HashMap<String, Boolean>();
+    Map<String, Integer> _integerOptions = new HashMap<String, Integer>();    
+    
+    Properties _properties = null;
+
+    UserOptions(Properties prop)
+    {
+        _properties = prop;
+        setDefaultOptions();
+        parse(prop);
+    }
+    
+    UserOptions()
+    {
+        _properties = new Properties();
+        setDefaultOptions();
+    }
+    
+    public boolean getBooleanOption(String k)
+    {
+        return _booleanOptions.get(k);
+    }
+    
+    public int getIntegerOption(String k)
+    {
+        return _integerOptions.get(k);
+    }
+    
+    public void setBooleanOption(String k, boolean b)
+    {        
+        _booleanOptions.put(k, b);
+    }
+    
+    public void setIntegerOption(String k, int i)
+    {        
+        _integerOptions.put(k, i);
+    }
+        
+    private void setDefaultOptions()
+    {
+        // boolean options
+        setBooleanOption("genParticles", false);
+        setBooleanOption("simParticles", false);
+        setBooleanOption("cheatClusters", false);
+        setBooleanOption("clusterPlots", false);
+        setBooleanOption("particlePlots", true);
+        setBooleanOption("trackerHitPlots", true);
+        setBooleanOption("calorimeterHitPlots", true);
+        setBooleanOption("genericHitPlots", true);
+        setBooleanOption("eventPlots", true);
+        
+        // int options
+        setIntegerOption("eventNoticeInterval", 100);
+        setIntegerOption("verbosity", 0);
+        setIntegerOption("maxEvents", -1);
+    }
+    
+    private void parse(Properties prop)
+    {
+        // boolean options
+        parseBooleanOption("genParticles");
+        parseBooleanOption("simParticles");
+        parseBooleanOption("cheatClusters");
+        parseBooleanOption("clusterPlots");
+        parseBooleanOption("particlePlots");
+        parseBooleanOption("trackerHitPlots");
+        parseBooleanOption("calorimeterHitPlots");
+        parseBooleanOption("genericHitPlots");
+        parseBooleanOption("eventPlots");
+        
+        // int options
+        parseIntegerOption("eventNoticeInterval");
+        parseIntegerOption("verbosity");
+        parseIntegerOption("maxEvents");
+    }
+
+    private void parseBooleanOption(String k)
+    {
+        String p = _properties.getProperty(k);
+        if (p != null)
+        {
+            setBooleanOption(k, Boolean.parseBoolean(p));
+        }
+    }
+    
+    private void parseIntegerOption(String k)
+    {
+        String p = _properties.getProperty(k);        
+        if (p != null)
+        {            
+            setIntegerOption(k, Integer.parseInt(p));
+        }
+    }
+    
+    public String toString()
+    {
+        StringBuffer sb = new StringBuffer();
+        for (String k : _booleanOptions.keySet())
+        {
+            sb.append(k + "=" + _booleanOptions.get(k) + '\n');
+        }
+        for (String k : _integerOptions.keySet())
+        {
+            sb.append(k + "=" + _integerOptions.get(k) + '\n');
+        }
+        return sb.toString();
+    }
+}
\ No newline at end of file

SlicDiagnostics/src/org/lcsim/slic/diagnostics
CommandLineProcessor.java 1.4 -> 1.5
diff -u -r1.4 -r1.5
--- CommandLineProcessor.java	1 Mar 2006 00:32:19 -0000	1.4
+++ CommandLineProcessor.java	16 Mar 2006 02:34:01 -0000	1.5
@@ -7,6 +7,7 @@
 import java.io.InputStreamReader;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Properties;
 
 import org.apache.commons.cli.CommandLine;
 import org.apache.commons.cli.CommandLineParser;
@@ -27,17 +28,17 @@
  * Main.
  * 
  * @author Jeremy McCormick
- * @version $Id: CommandLineProcessor.java,v 1.4 2006/03/01 00:32:19 jeremy Exp $
+ * @version $Id: CommandLineProcessor.java,v 1.5 2006/03/16 02:34:01 jeremy Exp $
  */
 public class CommandLineProcessor
 {
     private Options _options = new Options();
     private CommandLineParser _parser = new PosixParser();
-
+    private Properties _properties = new Properties();
+    private UserOptions _userOptions = null;
     private List<File> _infiles = new ArrayList<File>();
     private File _outfile = null;
-    private int _maxevents = -1;
-    private int _verbosity = 0;
+    int _verbosity = 0;
 
     /** Create a CommandLineProcessor where parse will be called later. */
     public CommandLineProcessor()
@@ -93,7 +94,11 @@
         opt.setArgs(1);
         _options.addOption(opt);
 
-        opt = new Option("p", false, "add a pattern to match files in directories (no directories uses current dir)");
+        opt = new Option("r", false, "add a pattern to match files in directories (no directories uses current dir)");
+        opt.setArgs(1);
+        _options.addOption(opt);
+        
+        opt = new Option("p", false, "select a properties file with SlicDiagnostics options");
         opt.setArgs(1);
         _options.addOption(opt);
     }
@@ -106,10 +111,44 @@
 
         // Print usage if no args or -h option was specified
         if (cl.hasOption("h") || args.length == 0 || 
-                (!cl.hasOption("f") && !cl.hasOption("i") && !cl.hasOption("d") && !cl.hasOption("p")))
+                (!cl.hasOption("f") && !cl.hasOption("i") && !cl.hasOption("d") && !cl.hasOption("r")))
         {
             printUsage(true);
         }
+                       
+        // Process properties file
+        if (cl.hasOption("p"))
+        {            
+            String propFilename = cl.getOptionValue("p");
+            
+            FileInputStream propFile = null;
+            try {
+                propFile = new FileInputStream(propFilename);
+                _properties.load(propFile);
+            }
+            catch (Exception e)
+            {
+                throw new RuntimeException("An error occured processing the properties file " + propFilename + ".", e);
+            }
+            
+            _userOptions = new UserOptions(_properties);            
+        }
+        else {
+            _userOptions = new UserOptions();
+        }
+        
+        // Verbosity, overriding setting from properties file, if exists
+        if (cl.hasOption("v"))
+        {
+            _verbosity = Integer.parseInt(cl.getOptionValue("v"));
+            _userOptions.setIntegerOption("verbosity", _verbosity);
+        }
+        
+        // Max events
+        if (cl.hasOption("n"))
+        {
+            _userOptions.setIntegerOption("maxEvents",Integer.parseInt(cl.getOptionValue("n")));
+        }
         
         // Process lists of files
         String infileList[] = null;
@@ -138,18 +177,6 @@
             }
         }
 
-        // Max events
-        if (cl.hasOption("n"))
-        {
-            _maxevents = Integer.parseInt(cl.getOptionValue("n"));
-        }
-
-        // Verbosity
-        if (cl.hasOption("v"))
-        {
-            _verbosity = Integer.parseInt(cl.getOptionValue("v"));
-        }
-
         // Directories
         List<File> userDirs = new ArrayList<File>();
         if (cl.hasOption("d"))
@@ -163,7 +190,7 @@
 
         // Process input file patterns
         List<String> patternList = new ArrayList<String>();
-        if (cl.hasOption("p"))
+        if (cl.hasOption("r"))
         {
             // Search curr dir if none specified
             if (userDirs.size() == 0)
@@ -171,7 +198,7 @@
                 userDirs.add(new File("."));
             }
 
-            String patterns[] = cl.getOptionValues("p");
+            String patterns[] = cl.getOptionValues("r");
 
             for (String pattern : patterns)
             {
@@ -236,11 +263,9 @@
                     System.out.println("pattern=" + s);
                 }
             }
-
-            for (File file : _infiles)
-            {
-                System.out.println("inputFile=" + file.getAbsoluteFile());
-            }
+           
+            System.out.println("user options ...");
+            System.out.println(_userOptions.toString());
         }
 
         // There should be some files to process at this point, or the command
@@ -267,6 +292,11 @@
         if (_verbosity > 0)
         {
             System.out.println("outputFile=" + _outfile.getAbsoluteFile());
+            
+            for (File file : _infiles)
+            {
+                System.out.println("inputFile=" + file.getAbsoluteFile());
+            }                      
         }
     }
 
@@ -287,11 +317,17 @@
     {
         return _verbosity;
     }
-
-    /** Get the maximum number of events to process. */
-    public int maxEvents()
+    
+    /** Get the properties created with the -p option. */
+    public Properties getProperties()
     {
-        return _maxevents;
+        return _properties;
+    }
+    
+    /** Get a parsed version of the properties for easy usage. */
+    public UserOptions getUserOptions()
+    {
+        return _userOptions;
     }
 
     /** Print usage and exit (optionally). */
@@ -368,5 +404,5 @@
     {
         FileInputStream fin = new FileInputStream(fileName);
         return new BufferedReader(new InputStreamReader(fin));
-    }
+    }       
 }

SlicDiagnostics/src/org/lcsim/slic/diagnostics
Runner.java 1.6 -> 1.7
diff -u -r1.6 -r1.7
--- Runner.java	17 Feb 2006 01:26:34 -0000	1.6
+++ Runner.java	16 Mar 2006 02:34:01 -0000	1.7
@@ -10,7 +10,7 @@
  * by using LCIOEventSource and LCSimLoop.
  *
  * @author jeremym
- * @version $Id: Runner.java,v 1.6 2006/02/17 01:26:34 jeremy Exp $
+ * @version $Id: Runner.java,v 1.7 2006/03/16 02:34:01 jeremy Exp $
  */
 public class Runner
 {    
@@ -18,20 +18,18 @@
     public static void run(List<File> files) throws Exception
     {        
         String outfile = files.get(0).toString().replace(".slcio","");
-        run(files, new File(outfile), -1, 1);
+        run(files, new File(outfile), new UserOptions());
     }
     
     /** Run on list files with all args. */
-    public static void run(List<File> files, File outfile, int maxevents, int verbosity) throws Exception
+    public static void run(List<File> files, File outfile, UserOptions options) throws Exception
     {           
-        SlicDiagnosticsDriver driver = new SlicDiagnosticsDriver();
-        
+        // New driver
+        SlicDiagnosticsDriver driver = new SlicDiagnosticsDriver(options);
+              
         // Set name of output AIDA file
         driver.setAidaFileName(outfile.toString());
-        
-        // Set verbosity of driver
-        driver.setVerbosity(verbosity);
-                
+                                        
         // Create a new record source with the list of files
         LCIOEventSource src = new LCIOEventSource("SlicDiagnostics", files);               
         
@@ -44,13 +42,16 @@
         // Add the SlicDiagnostics driver
         loop.add(driver);
         
-        if (maxevents != -1)
+        // Print the max number of events
+        int maxevents = options.getIntegerOption("maxEvents");     
+        if (driver.getVerbosity() > 0)
         {
-            System.out.println("Maximum Events <" + maxevents + ">");
+            SlicDiagnosticsDriver.message("Maximum Events <" + maxevents + ">");
         }
-        
+                
         try
         {
+            // Set the max number of events in the event loop
             loop.loop(maxevents);     
         }
         catch (org.freehep.record.loop.NoLoopRecordException nlre)

SlicDiagnostics/src/org/lcsim/slic/diagnostics
SlicDiagnosticsDriver.java 1.17 -> 1.18
diff -u -r1.17 -r1.18
--- SlicDiagnosticsDriver.java	1 Mar 2006 00:32:19 -0000	1.17
+++ SlicDiagnosticsDriver.java	16 Mar 2006 02:34:01 -0000	1.18
@@ -4,124 +4,192 @@
 import hep.aida.ITree;
 
 import java.io.File;
+import java.util.Properties;
 
 import org.freehep.application.Application;
 import org.freehep.application.studio.Studio;
 import org.freehep.record.loop.SequentialRecordLoop;
 import org.freehep.record.source.SequentialRecordSource;
 import org.lcsim.event.EventHeader;
-import org.lcsim.recon.cluster.cheat.CheatClusterDriver;
 import org.lcsim.util.Driver;
 import org.lcsim.util.aida.AIDA;
+import org.lcsim.recon.cluster.cheat.CheatClusterDriver;
+import org.lcsim.event.util.CreateFinalStateMCParticleList;
 
 /**
  * A mother driver that loads all of the package's subdrivers.
- *
+ * 
  * @author jeremym
- * @version $Id: SlicDiagnosticsDriver.java,v 1.17 2006/03/01 00:32:19 jeremy Exp $
+ * @version $Id: SlicDiagnosticsDriver.java,v 1.17 2006/03/01 00:32:19 jeremy
+ *          Exp $
  */
 public class SlicDiagnosticsDriver extends Driver
 {
+    private UserOptions _options = null;
     private static AIDA _aida = AIDA.defaultInstance();
     private static ITree _tree = _aida.tree();
-    
-    private String _fileName = null;
-    private static final String _defaultFileName = "SlicDiagnostics";            
-    private EventHeader _currentEvent = null;
+    private String _fileName = null;    
+    private static final String _defaultFileName = "SlicDiagnostics";    
+    private EventHeader _currentEvent = null;    
     private int _verbosity = 0;
-    
     private int _evtCnt = 0;
+    private int _eventNoticeInterval = 100;       
+
+    public SlicDiagnosticsDriver(UserOptions options)
+    {
+        super();        
+        setUserOptions(options);        
+        addDefaultSubdrivers();
+    }
     
     public SlicDiagnosticsDriver()
     {
-        super();
+        super();        
+        setUserOptions(new UserOptions());        
         addDefaultSubdrivers();
+    }
+
+    public void setUserOptions(UserOptions options)
+    {
+        _options = options;
         
+        // Set verbosity of driver                       
+        setVerbosity(_options.getIntegerOption("verbosity"));
+                
+        // Set event notice interval
+        setEventNoticeInterval(_options.getIntegerOption("eventNoticeInterval"));        
+    }
+
+    private void addDefaultSubdrivers()
+    {
         if (_verbosity > 0)
         {
             message(this.getClass().getSimpleName() + " is loaded.");
         }
+        
+        // Create gen FS particle list.
+        if (_options.getBooleanOption("genParticles"))
+        {
+            add(new CreateFinalStateMCParticleList("Gen"));
+        }
+
+        // Create sim FS particle list.
+        if (_options.getBooleanOption("simParticles"))
+        {
+            add(new CreateFinalStateMCParticleList("Sim"));
+        }
+
+        // Needed for creating perfect clusters.
+        if (_options.getBooleanOption("cheatClusters"))
+        {
+            add(new CheatClusterDriver());
+        }
+
+        if (_options.getBooleanOption("particlePlots"))
+        {
+            add(new MCParticlePlotsDriver(this));
+        }
+
+        if (_options.getBooleanOption("genericHitPlots"))
+        {
+            add(new GenericHitPlotsDriver(this));
+        }
+
+        if (_options.getBooleanOption("calorimeterHitPlots"))
+        {
+            add(new CalorimeterHitPlotsDriver(this));
+        }
+
+        if (_options.getBooleanOption("trackerHitPlots"))
+        {
+            add(new TrackerHitPlotsDriver(this));
+        }
+
+        if (_options.getBooleanOption("eventPlots"))
+        {
+            add(new EventSummaryPlotsDriver(this));
+        }
+
+        if (_options.getBooleanOption("clusterPlots"))
+        {
+            add(new ClusterPlotsDriver(this));
+        }
+        
+        if (drivers().size() == 0)
+        {
+            System.err.println("WARNING: SlicDiagnosticsDriver was not initialized with any subdrivers.");
+        }        
     }
-    
-    private void addDefaultSubdrivers()
-    {
-        add(new CheatClusterDriver()); // Needed for creating perfect clusters.
-        add(new GenericHitPlotsDriver(this) );
-        add(new MCParticlePlotsDriver(this) );
-        add(new CalorimeterHitPlotsDriver(this) );
-        add(new TrackerHitPlotsDriver(this) );
-        add(new EventSummaryPlotsDriver(this) );
-        add(new ClusterPlotsDriver(this));
-    }
-    
+
     protected void process(EventHeader event)
     {
         _currentEvent = event;
         super.process(event);
         ++_evtCnt;
-                
-        if (_verbosity > 1 && (_evtCnt % 100 == 0))
+
+        if (_verbosity > 1 && (_evtCnt % _eventNoticeInterval == 0))
         {
             message("Processed events <" + _evtCnt + ">");
         }
     }
-    
+
     protected void startOfData()
-    {        
-        super.startOfData();        
+    {
+        super.startOfData();
         setFilename();
         _evtCnt = 0;
     }
-    
+
     protected void endOfData()
     {
         super.endOfData();
         savePlots();
-        
+
         if (_verbosity > 0)
         {
             message("Total events processed <" + _evtCnt + ">");
         }
     }
-    
+
     static AIDA aida()
     {
         return _aida;
     }
-    
+
     static IPlotter plotter()
     {
         return aida().analysisFactory().createPlotterFactory().create();
     }
-    
+
     public int getEventCount()
     {
         return _evtCnt;
     }
-    
+
     public EventHeader getCurrentEvent()
     {
         return _currentEvent;
     }
-    
+
     /** Set the filename to argument basename. */
     public void setAidaFileName(String path)
     {
         _fileName = (new File(path)).getName() + ".aida";
     }
-    
+
     private void setFilename()
     {
-        if ( _fileName == null )
+        if (_fileName == null)
         {
-            if ( Application.getApplication() != null)
+            if (Application.getApplication() != null)
             {
-                SequentialRecordLoop loop = (SequentialRecordLoop) ((Studio) Application.getApplication()).getLookup().lookup(SequentialRecordLoop.class);
-                
-                if ( loop != null )
+                SequentialRecordLoop loop = (SequentialRecordLoop) ((Studio) Application.getApplication()).getLookup()
+                        .lookup(SequentialRecordLoop.class);
+
+                if (loop != null)
                 {
                     SequentialRecordSource source = loop.getRecordSource();
-                    if ( source != null )
+                    if (source != null)
                     {
                         String s = source.getSourceName();
                         int slashPos = s.lastIndexOf("/");
@@ -129,23 +197,23 @@
                         {
                             s = s.substring(slashPos);
                         }
-                        
+
                         setAidaFileName(s);
                     }
                 }
             }
-            
+
             /* set filename to default */
-            if ( _fileName == null )
+            if (_fileName == null)
             {
-                setAidaFileName( _defaultFileName );
+                setAidaFileName(_defaultFileName);
             }
         }
     }
-    
+
     private void savePlots()
     {
-        if ( Application.getApplication() == null )
+        if (Application.getApplication() == null)
         {
             try
             {
@@ -158,20 +226,25 @@
             }
         }
     }
-    
-    private void message(String m)
+
+    static public final void message(String m)
     {
         System.out.println("SlicDiagnosticsDriver - " + m);
     }
-    
+
     public void setVerbosity(int verbosity)
     {
-        assert(verbosity >= 0 && verbosity <= 4);
+        assert (verbosity >= 0 && verbosity <= 4);
         _verbosity = verbosity;
     }
-    
+
     public int getVerbosity()
     {
         return _verbosity;
     }
+
+    public void setEventNoticeInterval(int interval)
+    {
+        _eventNoticeInterval = interval;
+    }
 }
\ No newline at end of file
CVSspam 0.2.8