1 added + 3 modified, total 4 files
SlicDiagnostics/src/org/lcsim/slic/diagnostics
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
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
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
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