LISTSERV mailing list manager LISTSERV 16.5

Help for LCDET-SVN Archives


LCDET-SVN Archives

LCDET-SVN Archives


LCDET-SVN@LISTSERV.SLAC.STANFORD.EDU


View:

Message:

[

First

|

Previous

|

Next

|

Last

]

By Topic:

[

First

|

Previous

|

Next

|

Last

]

By Author:

[

First

|

Previous

|

Next

|

Last

]

Font:

Proportional Font

LISTSERV Archives

LISTSERV Archives

LCDET-SVN Home

LCDET-SVN Home

LCDET-SVN  December 2014

LCDET-SVN December 2014

Subject:

r3468 - /projects/lcsim/trunk/event-processing/src/main/java/org/lcsim/util/Driver.java

From:

[log in to unmask]

Reply-To:

Notification of commits to the lcdet svn repository <[log in to unmask]>

Date:

Sat, 20 Dec 2014 04:49:21 -0000

Content-Type:

text/plain

Parts/Attachments:

Parts/Attachments

text/plain (724 lines)

Author: [log in to unmask]
Date: Fri Dec 19 20:49:16 2014
New Revision: 3468

Log:
Add setter for log level.

Modified:
    projects/lcsim/trunk/event-processing/src/main/java/org/lcsim/util/Driver.java

Modified: projects/lcsim/trunk/event-processing/src/main/java/org/lcsim/util/Driver.java
 =============================================================================
--- projects/lcsim/trunk/event-processing/src/main/java/org/lcsim/util/Driver.java	(original)
+++ projects/lcsim/trunk/event-processing/src/main/java/org/lcsim/util/Driver.java	Fri Dec 19 20:49:16 2014
@@ -16,367 +16,347 @@
 import org.lcsim.geometry.Detector;
 
 /**
- * A driver is a steering routine which can deal with event processing, and/or
- * call any number of child drivers. When used as a child driver all parameters such as
- * histogramLevel and logger are inherited from the parent driver.
+ * A driver is a steering routine which can deal with event processing, and/or call any number of child drivers. When used as a child driver all parameters such as histogramLevel and logger are
+ * inherited from the parent driver.
  * <p>
- * It also allows controlling the histogram level of the processors being called
- * and handles coordination of random numbers between Monte Carlo processors.
+ * It also allows controlling the histogram level of the processors being called and handles coordination of random numbers between Monte Carlo processors.
  *
  * @author Tony Johnson
  * @version $Id: Driver.java,v 1.14 2007/09/11 00:21:00 tonyj Exp $
  */
 
-public class Driver
-{
-   // We dont use an enum, because we want to be able to test for level>some value.
-   // and because drivers can use special values for special purposes.
-   public final static int HLEVEL_DEFAULT = -1;
-   public final static int HLEVEL_OFF = 0;
-   public final static int HLEVEL_NORMAL=1;
-   public final static int HLEVEL_HIGH=3;
-   public final static int HLEVEL_FULL=5;
-   
-   private static Driver mother = new MotherOfAllDrivers();
-   private final List<Driver> subDrivers = new ArrayList<Driver>();
-   private Driver parent = mother;
-   private int histogramLevel = HLEVEL_DEFAULT;
-   private Random random;
-   private final String driverName;
-   private int nEvents;
-   private long nNanos;
-   
-   /** Creates a driver
-    */
-   public Driver()
-   {
-      this(null);
-   }
-   
-   Driver(String name)
-   {
-      if (name == null || name.length() == 0)
-      {
-         String id = getClass().getName();
-         int pos = id.lastIndexOf('.');
-         driverName = id.substring(pos < 0 ? 0 : pos+1);
-      }
-      else
-      {
-         driverName = name;
-      }
-   }
-   
-   /**
-    * Add a sub-Driver to this Driver. Sub-drivers are automatically
-    * called from the process method.
-    * @param driver The Driver to be added
-    */
-   public void add(Driver driver)
-   {
-      subDrivers.add(driver);
-      driver.parent = this;
-   }
-   /**
-    * Removes a sub-Driver from this Driver
-    * @param driver The Driver to be removed
-    */
-   public void remove(Driver driver)
-   {
-      subDrivers.remove(driver);
-      driver.parent = mother;
-   }
-   /**
-    * Returns a List of all the drivers added to this Driver
-    */
-   public List<Driver> drivers()
-   {
-      return subDrivers;
-   }
-   /**
-    * Tests to see if a given Driver is already a child of this Driver
-    * @param driver Driver to be checked
-    */
-   public boolean contains(Driver driver)
-   {
-      return subDrivers.contains(driver);
-   }
-   /**
-    * Returns a logger for logging diagnostic messages from this driver
-    */
-   public Logger getLogger()
-   {
-      return Logger.getLogger(pathToMother());
-   }
-   
-   /**
-    * Get the name of this driver. Normally this will be the class name of the
-    * driver (without the packaging information).
-    */
-   public String getName()
-   {
-      return driverName;
-   }
-   
-   String pathToMother()
-   {
-      return parent.pathToMother() + "." + driverName;
-   }
-   
-   /**
-    * Get the default histogram level for this driver
-    */
-   public int getHistogramLevel()
-   {
-      return histogramLevel <= HLEVEL_DEFAULT ? parent.getHistogramLevel() : histogramLevel;
-   }
-   /**
-    * Set the histogram level for this driver (and its child drivers)
-    */
-   public void setHistogramLevel(int level)
-   {
-      histogramLevel = level;
-   }
-   
-   public ConditionsManager getConditionsManager()
-   {
-      return parent.getConditionsManager();
-   }
-   
-   /**
-    * Called by the framework when event processing is suspended.
-    */
-   protected void suspend()
-   {
-      for (Driver driver : subDrivers) driver.suspend();
-   }
-   /**
-    * Called by the framework when event processing is resumed.
-    */
-   protected void resume()
-   {
-      for (Driver driver : subDrivers) driver.resume();
-   }
-   /**
-    * Called when all data processing is finished.
-    */
-   protected void endOfData()
-   {
-      for (Driver driver : subDrivers) driver.endOfData();
-   }
-   /**
-    * Called before the first event is processed, or after a rewind.
-    */
-   protected void startOfData()
-   {
-      for (Driver driver : subDrivers) driver.startOfData();
-   }
-   
-   /** Called by the framework before process method when the detector geometry changes.
-    * This method is gauranteed to be called once before the first call to process.
-    * @param Detector The new detector
-    */
-   protected void detectorChanged(Detector detector)
-   {
-      for (Driver driver : subDrivers) driver.detectorChanged(detector);
-   }
-   /**
-    * Called by the framework to process an event. Don't forget to call
-    * <code>super.process(event)</code> to cause the child processes to
-    * be executed. In addition the process event can call throw some special
-    * exceptions:
-    * <ul>
-    * <li>NextEventException - aborts further processing of this event</li>
-    * <li>StopRunException - causes event processing to be stopped</li>
-    * </ul>
-    * @param event The event to be processed
-    * @see Driver.NextEventException
-    * @see Driver.AbortRunException
-    */
-   protected void process(EventHeader event)
-   {
-      processChildren(event);
-   }
-   /**
-    * Clear statistics
-    */
-   public void clearStatistics()
-   {
-      nEvents = 0;
-      nNanos = 0;
-   }
-   /**
-    * Print statistics for this driver and its children
-    */
-   public void printStatistics(PrintStream out)
-   {
-      printStatistics(out,0,0);
-   }
-   private void printStatistics(PrintStream out, int indent, long parentNanos)
-   {
-      printStatisticsLine(out,indent,getName(), nEvents, nNanos, parentNanos);
-      if (!subDrivers.isEmpty())
-      {
-         int nIndent = indent+1;
-         long self = nNanos;
-         for (Driver driver : subDrivers)
-         {
-            driver.printStatistics(out,nIndent,nNanos);
-            self -= driver.nNanos;
-         }
-         printStatisticsLine(out,nIndent,"*self", nEvents, self, nNanos);
-      }
-   }
-   private static void printStatisticsLine(PrintStream out, int indent, String name, int nEvents, long time, long parentTime)
-   {
-      out.print(formatName(indent, name, 40));
-      out.print(' ');
-      out.print(nEvents);
-      out.print(' ');
-      out.printf(formatTime(time));
-      if (parentTime > 0)
-      {
-         out.print(' ');
-         out.printf("%3.1f",100.*time/parentTime);
-         out.print('%');
-      }      
-      out.println();
-   }
-   private static String formatName(int indent, String name, int width)
-   {
-      StringBuilder builder = new StringBuilder();
-      for (int i=0; i<indent; i++) builder.append("   ");
-      builder.append(name);
-      if (builder.length() > width) builder.setLength(width);
-      else for (int i=builder.length(); i<width; i++) builder.append(' ');
-      return builder.toString();
-   }
-   private static String formatTime(long nanos)
-   {
-      String unit = "ms";
-      double time = nanos/1000000.;
-      if (time > 1000)
-      {
-         time /= 1000;
-         unit = "s";
-      }
-      java.util.Formatter formatter = new java.util.Formatter();
-      formatter.format("%3.3g",time);
-      formatter.format("%s",unit);
-      return formatter.toString();
-   }
-   
-   void doProcess(EventHeader event)
-   {
-      nEvents++;
-      long start = System.nanoTime();
-      process(event);
-      long stop = System.nanoTime();
-      nNanos += (stop-start);
-   }
-   /**
-    * Calls the sub-Drivers process() method.
-    * <b>Note:</b> This method is only public so that it can be called from
-    * Jython, see LCSIM-30
-    */
-   public void processChildren(EventHeader event)
-   {
-      for (Driver driver : subDrivers) driver.doProcess(event);
-   }
-   public Random getRandom()
-   {
-      return random == null ?  parent.getRandom() : random;
-   }
-   /** Set default random number generator for this driver and all child drivers.
-    * @param random The random number generator, or <code>null</code> to reset to default
-    */
-   public void setRandom(Random random)
-   {
-      this.random = random;
-   }
-   
-   
-   // The only driver that does not have a parent
-   // This is used to set defaults for "inherited" items
-   private static class MotherOfAllDrivers extends Driver
-   {
-      private Random random = new Random();
-      MotherOfAllDrivers()
-      {
-         super("TOP");
-         StreamHandler handler = new StreamHandler(System.out,new DriverFormatter());
-         handler.setLevel(Level.ALL);
-         getLogger().setUseParentHandlers(false);
-         getLogger().addHandler(handler);
-         getLogger().setLevel(Level.WARNING);
-      }
-      
-      public Random getRandom()
-      {
-         return random;
-      }
-      public int getHistogramLevel()
-      {
-         return 0;
-      }
-      public ConditionsManager getConditionsManager()
-      {
-         return ConditionsManager.defaultInstance();
-      }
-      String pathToMother()
-      {
-         return getName();
-      }
-   }
-   private static class DriverFormatter extends Formatter
-   {
-      public synchronized String format(LogRecord record)
-      {
-         StringBuilder sb = new StringBuilder();
-         sb.append(record.getLoggerName().substring("TOP".length()+1));
-         sb.append(": ");
-         sb.append(record.getLevel().getLocalizedName());
-         sb.append(": ");
-         sb.append(formatMessage(record));
-         sb.append('\n');
-         if (record.getThrown() != null)
-         {
-            try
-            {
-               StringWriter sw = new StringWriter();
-               PrintWriter pw = new PrintWriter(sw);
-               record.getThrown().printStackTrace(pw);
-               pw.close();
-               sb.append(sw.toString());
+public class Driver {
+    // We dont use an enum, because we want to be able to test for level>some value.
+    // and because drivers can use special values for special purposes.
+    public final static int HLEVEL_DEFAULT = -1;
+    public final static int HLEVEL_OFF = 0;
+    public final static int HLEVEL_NORMAL = 1;
+    public final static int HLEVEL_HIGH = 3;
+    public final static int HLEVEL_FULL = 5;
+
+    private static Driver mother = new MotherOfAllDrivers();
+    private final List<Driver> subDrivers = new ArrayList<Driver>();
+    private Driver parent = mother;
+    private int histogramLevel = HLEVEL_DEFAULT;
+    private Random random;
+    private final String driverName;
+    private int nEvents;
+    private long nNanos;
+
+    /**
+     * Creates a driver
+     */
+    public Driver() {
+        this(null);
+    }
+
+    Driver(String name) {
+        if (name == null || name.length() == 0) {
+            String id = getClass().getName();
+            int pos = id.lastIndexOf('.');
+            driverName = id.substring(pos < 0 ? 0 : pos + 1);
+        } else {
+            driverName = name;
+        }
+    }
+
+    /**
+     * Add a sub-Driver to this Driver. Sub-drivers are automatically called from the process method.
+     * @param driver The Driver to be added
+     */
+    public void add(Driver driver) {
+        subDrivers.add(driver);
+        driver.parent = this;
+    }
+
+    /**
+     * Removes a sub-Driver from this Driver
+     * @param driver The Driver to be removed
+     */
+    public void remove(Driver driver) {
+        subDrivers.remove(driver);
+        driver.parent = mother;
+    }
+
+    /**
+     * Returns a List of all the drivers added to this Driver
+     */
+    public List<Driver> drivers() {
+        return subDrivers;
+    }
+
+    /**
+     * Tests to see if a given Driver is already a child of this Driver     
+     * @param driver Driver to be checked
+     */
+    public boolean contains(Driver driver) {
+        return subDrivers.contains(driver);
+    }
+
+    /**
+     * Returns a logger for logging diagnostic messages from this driver
+     */
+    public Logger getLogger() {
+        return Logger.getLogger(pathToMother());
+    }
+
+    /**
+     * Get the name of this driver. Normally this will be the class name of the driver (without the packaging information).
+     */
+    public String getName() {
+        return driverName;
+    }
+
+    String pathToMother() {
+        return parent.pathToMother() + "." + driverName;
+    }
+
+    /**
+     * Get the default histogram level for this driver
+     */
+    public int getHistogramLevel() {
+        return histogramLevel <= HLEVEL_DEFAULT ? parent.getHistogramLevel() : histogramLevel;
+    }
+
+    /**
+     * Set the histogram level for this driver (and its child drivers)
+     */
+    public void setHistogramLevel(int level) {
+        histogramLevel = level;
+    }
+
+    public ConditionsManager getConditionsManager() {
+        return parent.getConditionsManager();
+    }
+
+    /**
+     * Called by the framework when event processing is suspended.
+     */
+    protected void suspend() {
+        for (Driver driver : subDrivers)
+            driver.suspend();
+    }
+
+    /**
+     * Called by the framework when event processing is resumed.
+     */
+    protected void resume() {
+        for (Driver driver : subDrivers)
+            driver.resume();
+    }
+
+    /**
+     * Called when all data processing is finished.
+     */
+    protected void endOfData() {
+        for (Driver driver : subDrivers)
+            driver.endOfData();
+    }
+
+    /**
+     * Called before the first event is processed, or after a rewind.
+     */
+    protected void startOfData() {
+        for (Driver driver : subDrivers)
+            driver.startOfData();
+    }
+
+    /**
+     * Called by the framework before process method when the detector geometry changes. This method is gauranteed to be called once before the first call to process.
+     * 
+     * @param Detector The new detector
+     */
+    protected void detectorChanged(Detector detector) {
+        for (Driver driver : subDrivers)
+            driver.detectorChanged(detector);
+    }
+
+    /**
+     * Called by the framework to process an event. Don't forget to call <code>super.process(event)</code> to cause the child processes to be executed. In addition the process event can call throw
+     * some special exceptions:
+     * <ul>
+     * <li>NextEventException - aborts further processing of this event</li>
+     * <li>StopRunException - causes event processing to be stopped</li>
+     * </ul>
+     *
+     * @param event The event to be processed
+     * @see Driver.NextEventException
+     * @see Driver.AbortRunException
+     */
+    protected void process(EventHeader event) {
+        processChildren(event);
+    }
+
+    /**
+     * Clear statistics
+     */
+    public void clearStatistics() {
+        nEvents = 0;
+        nNanos = 0;
+    }
+
+    /**
+     * Print statistics for this driver and its children
+     */
+    public void printStatistics(PrintStream out) {
+        printStatistics(out, 0, 0);
+    }
+
+    private void printStatistics(PrintStream out, int indent, long parentNanos) {
+        printStatisticsLine(out, indent, getName(), nEvents, nNanos, parentNanos);
+        if (!subDrivers.isEmpty()) {
+            int nIndent = indent + 1;
+            long self = nNanos;
+            for (Driver driver : subDrivers) {
+                driver.printStatistics(out, nIndent, nNanos);
+                self -= driver.nNanos;
             }
-            catch (Exception ex)
-            {
+            printStatisticsLine(out, nIndent, "*self", nEvents, self, nNanos);
+        }
+    }
+
+    private static void printStatisticsLine(PrintStream out, int indent, String name, int nEvents, long time, long parentTime) {
+        out.print(formatName(indent, name, 40));
+        out.print(' ');
+        out.print(nEvents);
+        out.print(' ');
+        out.printf(formatTime(time));
+        if (parentTime > 0) {
+            out.print(' ');
+            out.printf("%3.1f", 100. * time / parentTime);
+            out.print('%');
+        }
+        out.println();
+    }
+
+    private static String formatName(int indent, String name, int width) {
+        StringBuilder builder = new StringBuilder();
+        for (int i = 0; i < indent; i++)
+            builder.append("   ");
+        builder.append(name);
+        if (builder.length() > width)
+            builder.setLength(width);
+        else
+            for (int i = builder.length(); i < width; i++)
+                builder.append(' ');
+        return builder.toString();
+    }
+
+    private static String formatTime(long nanos) {
+        String unit = "ms";
+        double time = nanos / 1000000.;
+        if (time > 1000) {
+            time /= 1000;
+            unit = "s";
+        }
+        java.util.Formatter formatter = new java.util.Formatter();
+        formatter.format("%3.3g", time);
+        formatter.format("%s", unit);
+        return formatter.toString();
+    }
+
+    void doProcess(EventHeader event) {
+        nEvents++;
+        long start = System.nanoTime();
+        process(event);
+        long stop = System.nanoTime();
+        nNanos += (stop - start);
+    }
+
+    /**
+     * Calls the sub-Drivers process() method. <b>Note:</b> This method is only public so that it can be called from Jython, see LCSIM-30
+     */
+    public void processChildren(EventHeader event) {
+        for (Driver driver : subDrivers)
+            driver.doProcess(event);
+    }
+
+    public Random getRandom() {
+        return random == null ? parent.getRandom() : random;
+    }
+
+    /**
+     * Set default random number generator for this driver and all child drivers.
+     * 
+     * @param random The random number generator, or <code>null</code> to reset to default
+     */
+    public void setRandom(Random random) {
+        this.random = random;
+    }
+
+    public void setLogLevel(String logLevel) {
+        this.getLogger().setLevel(Level.parse(logLevel));
+    }
+
+    // The only driver that does not have a parent
+    // This is used to set defaults for "inherited" items
+    private static class MotherOfAllDrivers extends Driver {
+        private Random random = new Random();
+
+        MotherOfAllDrivers() {
+            super("TOP");
+            StreamHandler handler = new StreamHandler(System.out, new DriverFormatter());
+            handler.setLevel(Level.ALL);
+            getLogger().setUseParentHandlers(false);
+            getLogger().addHandler(handler);
+            getLogger().setLevel(Level.WARNING);
+        }
+
+        public Random getRandom() {
+            return random;
+        }
+
+        public int getHistogramLevel() {
+            return 0;
+        }
+
+        public ConditionsManager getConditionsManager() {
+            return ConditionsManager.defaultInstance();
+        }
+
+        String pathToMother() {
+            return getName();
+        }
+    }
+
+    private static class DriverFormatter extends Formatter {
+        public synchronized String format(LogRecord record) {
+            StringBuilder sb = new StringBuilder();
+            sb.append(record.getLoggerName().substring("TOP".length() + 1));
+            sb.append(": ");
+            sb.append(record.getLevel().getLocalizedName());
+            sb.append(": ");
+            sb.append(formatMessage(record));
+            sb.append('\n');
+            if (record.getThrown() != null) {
+                try {
+                    StringWriter sw = new StringWriter();
+                    PrintWriter pw = new PrintWriter(sw);
+                    record.getThrown().printStackTrace(pw);
+                    pw.close();
+                    sb.append(sw.toString());
+                } catch (Exception ex) {
+                }
             }
-         }
-         return sb.toString();
-      }
-   }
-   /**
-    * If thrown during the process method of a driver, causes
-    * processing of the current event to be aborted. Event procssing skips
-    * immediately to the next event.
-    */
-   public static class NextEventException extends RuntimeException
-   {
-      public NextEventException()
-      {
-         super("Next Event");
-      }
-   }
-   /**
-    * If thrown during the process method of a driver, causes
-    * processing of events to be aborted.
-    */
-   public static class AbortRunException extends RuntimeException
-   {
-      public AbortRunException()
-      {
-         super("Abort Run");
-      }
-   }
+            return sb.toString();
+        }
+    }
+
+    /**
+     * If thrown during the process method of a driver, causes processing of the current event to be aborted. Event procssing skips immediately to the next event.
+     */
+    public static class NextEventException extends RuntimeException {
+        public NextEventException() {
+            super("Next Event");
+        }
+    }
+
+    /**
+     * If thrown during the process method of a driver, causes processing of events to be aborted.
+     */
+    public static class AbortRunException extends RuntimeException {
+        public AbortRunException() {
+            super("Abort Run");
+        }
+    }
 }

########################################################################
Use REPLY-ALL to reply to list

To unsubscribe from the LCDET-SVN list, click the following link:
https://listserv.slac.stanford.edu/cgi-bin/wa?SUBED1=LCDET-SVN&A=1

Top of Message | Previous Page | Permalink

Advanced Options


Options

Log In

Log In

Get Password

Get Password


Search Archives

Search Archives


Subscribe or Unsubscribe

Subscribe or Unsubscribe


Archives

January 2016
December 2015
November 2015
October 2015
September 2015
August 2015
July 2015
June 2015
May 2015
April 2015
March 2015
February 2015
January 2015
December 2014
November 2014
October 2014
September 2014
August 2014
July 2014
June 2014
May 2014
April 2014
March 2014
February 2014
January 2014
December 2013
November 2013

ATOM RSS1 RSS2



LISTSERV.SLAC.STANFORD.EDU

Secured by F-Secure Anti-Virus CataList Email List Search Powered by the LISTSERV Email List Manager

Privacy Notice, Security Notice and Terms of Use