Print

Print


Author: [log in to unmask]
Date: Thu Jun 11 14:43:13 2015
New Revision: 3140

Log:
Bias conditions classes

Added:
    java/trunk/conditions/src/main/java/org/hps/conditions/svt/SvtBiasConstant.java
Modified:
    java/trunk/conditions/src/main/java/org/hps/conditions/svt/SvtBiasConditionsLoader.java

Modified: java/trunk/conditions/src/main/java/org/hps/conditions/svt/SvtBiasConditionsLoader.java
 =============================================================================
--- java/trunk/conditions/src/main/java/org/hps/conditions/svt/SvtBiasConditionsLoader.java	(original)
+++ java/trunk/conditions/src/main/java/org/hps/conditions/svt/SvtBiasConditionsLoader.java	Thu Jun 11 14:43:13 2015
@@ -16,14 +16,24 @@
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
+import org.apache.commons.cli.CommandLine;
+import org.apache.commons.cli.CommandLineParser;
+import org.apache.commons.cli.Option;
+import org.apache.commons.cli.Options;
+import org.apache.commons.cli.ParseException;
+import org.apache.commons.cli.PosixParser;
+import org.hps.conditions.api.ConditionsObjectException;
+import org.hps.conditions.api.ConditionsRecord;
 import org.hps.conditions.database.DatabaseConditionsManager;
 import org.hps.conditions.run.RunRange;
 import org.hps.conditions.run.RunSpreadsheet;
 import org.hps.conditions.run.RunSpreadsheet.RunData;
 import org.hps.conditions.run.RunSpreadsheet.RunMap;
+import org.hps.conditions.svt.SvtBiasConstant.SvtBiasConstantCollection;
 import org.hps.conditions.svt.SvtBiasMyaDumpReader.SvtBiasMyaRange;
 import org.hps.conditions.svt.SvtBiasMyaDumpReader.SvtBiasMyaRanges;
 import org.hps.conditions.svt.SvtBiasMyaDumpReader.SvtBiasRunRange;
+import org.hps.conditions.svt.SvtTimingConstants.SvtTimingConstantsCollection;
 import org.hps.util.BasicLogFormatter;
 import org.lcsim.util.aida.AIDA;
 import org.lcsim.util.log.LogUtil;
@@ -41,7 +51,7 @@
     /**
      * Setup conditions.
      */
-    //private static final DatabaseConditionsManager MANAGER = DatabaseConditionsManager.getInstance();
+    private static final DatabaseConditionsManager MANAGER = DatabaseConditionsManager.getInstance();
     static {
         FIELDS.add("run");
         FIELDS.add("date");
@@ -56,7 +66,7 @@
     static IDataPointSet dpsRuns = null;
     static IDataPointSet dpsBiasRuns = null;
     
-    private static void setupPlots() {
+    private static void setupPlots(boolean show) {
         IDataPointSetFactory dpsf = aida.analysisFactory().createDataPointSetFactory(aida.tree());
         dpsRuns = dpsf.create("dpsRuns","Run intervals", 2);
         dpsBiasRuns = dpsf.create("dpsBiasRuns","Bias ON intervals associated with runs", 2);
@@ -68,7 +78,7 @@
         plotter.region(1).plot(dpsBiasRuns,plotterStyle);
         plotter.region(2).plot(dpsRuns,plotterStyle);
         plotter.region(2).plot(dpsBiasRuns,plotterStyle,"mode=overlay");
-        plotter.show();
+        if(show) plotter.show();
         
     }
     
@@ -81,7 +91,7 @@
     
     
     /**
-     * 
+     *  Default constructor
      */
     public SvtBiasConditionsLoader() {
     }
@@ -89,6 +99,11 @@
     
     
     
+    /**
+     * Check validity of @link RunData
+     * @param data the @link RunData to check
+     * @return <code>true</code> if valid, <code>false</code> otherwise.
+     */
     private static boolean isValid(RunData data) {
         if(data.getStartDate() == null || data.getEndDate() == null || data.getStartDate().before(new Date(99,1,1))) {
             logger.warning("This run data is not valid: " + data.toString());
@@ -100,17 +115,38 @@
         return true;
     }
     
-    /**
-     * @param args
+    //private static Options options = null;
+    
+    
+    /**
+     * Load SVT HV bias constants into the conditions database.
+     * 
+     * @param args the command line arguments (requires a CVS run log file and a MYA dump file.)
      */
     public static void main(String[] args) {
 
-        setupPlots();
-
-        
-     // Load in CSV records from the exported run spreadsheet.
-        final String path = args[0];
-        logger.info(args[0]);
+        Options options = new Options();
+        options.addOption(new Option("c", true, "CVS run file"));
+        options.addOption(new Option("m", true, "MYA dump file"));
+        options.addOption(new Option("g", false, "Actually load stuff into DB"));
+        options.addOption(new Option("s", false, "Show plots"));
+        
+        final CommandLineParser parser = new PosixParser();
+        CommandLine cl = null;
+        try {
+            cl = parser.parse(options, args);
+        } catch (ParseException e) {
+            throw new RuntimeException("Cannot parse.", e);
+        }
+        
+ 
+        // Setup plots
+        setupPlots(cl.hasOption("s")?true:false);
+
+        
+        // Load in CSV records from the exported run spreadsheet.
+        final String path = cl.getOptionValue("c");
+        logger.info(path);
         final RunSpreadsheet runSheet = new RunSpreadsheet(new File(path));
 
         // Find the run ranges that have the same fields values.
@@ -124,7 +160,7 @@
         
         
         // Load MYA dump
-        SvtBiasMyaDumpReader biasMyaReader = new SvtBiasMyaDumpReader(args[1]);
+        SvtBiasMyaDumpReader biasMyaReader = new SvtBiasMyaDumpReader(cl.getOptionValue("m"));
         logger.info("Got " + biasMyaReader.getRanges().size() + " bias ranges");
         
         
@@ -163,32 +199,94 @@
         }
         
         
-
-        for(SvtBiasRunRange r : biasRunRanges) {
-            logger.info(r.toString());
-            if(r.getRun().getRun()>5600) {//9999999999999.0) {
-                //if(dpsRuns.size()/4.0<500) {//9999999999999.0) {
-                addPoint(dpsRuns, r.getRun().getStartDate().getTime(),0.0);
-                addPoint(dpsRuns, r.getRun().getStartDate().getTime(),1.0);
-                addPoint(dpsRuns, r.getRun().getEndDate().getTime(),1.0);
-                addPoint(dpsRuns, r.getRun().getEndDate().getTime(),0.0);
-
-                for(SvtBiasMyaRange br : r.getRanges()) {
-                    addPoint(dpsBiasRuns, br.getStart().getDate().getTime(),0.0);
-                    addPoint(dpsBiasRuns, br.getStart().getDate().getTime(),0.5);
-                    addPoint(dpsBiasRuns, br.getEnd().getDate().getTime(),0.5);
-                    addPoint(dpsBiasRuns, br.getEnd().getDate().getTime(),0.0);
+        // fill graphs
+        if(cl.hasOption("s")) {
+            for(SvtBiasRunRange r : biasRunRanges) {
+                logger.info(r.toString());
+                if(r.getRun().getRun()>5600) {//9999999999999.0) {
+                    //if(dpsRuns.size()/4.0<500) {//9999999999999.0) {
+                    addPoint(dpsRuns, r.getRun().getStartDate().getTime(),0.0);
+                    addPoint(dpsRuns, r.getRun().getStartDate().getTime(),1.0);
+                    addPoint(dpsRuns, r.getRun().getEndDate().getTime(),1.0);
+                    addPoint(dpsRuns, r.getRun().getEndDate().getTime(),0.0);
+
+                    for(SvtBiasMyaRange br : r.getRanges()) {
+                        addPoint(dpsBiasRuns, br.getStart().getDate().getTime(),0.0);
+                        addPoint(dpsBiasRuns, br.getStart().getDate().getTime(),0.5);
+                        addPoint(dpsBiasRuns, br.getEnd().getDate().getTime(),0.5);
+                        addPoint(dpsBiasRuns, br.getEnd().getDate().getTime(),0.0);
+                    }
+
+
+                }   
+
+            }
+        }
+
+        
+        // load to DB
+        loadToConditionsDB(biasRunRanges,cl.hasOption("g")?true:false);
+        
+    }
+    
+    private final static SvtBiasConstantCollection findCollection(final List<SvtBiasConstantCollection> list, Date date) {
+        for( SvtBiasConstantCollection collection : list) {
+            if(collection.find(date) != null) {
+                return collection;
+            } 
+        }
+        return null;
+    }
+
+    private static final void loadToConditionsDB(List<SvtBiasRunRange> ranges, boolean doIt) {
+        logger.info("Load to DB...");
+        
+        // Create a new collection for each run
+        List<Integer> runsadded = new ArrayList<Integer>();
+        
+        for(SvtBiasRunRange range : ranges) {
+            logger.info("Loading " + range.toString());
+            RunData rundata = range.getRun();
+            if(runsadded.contains(rundata.getRun())) {
+                logger.warning("Run " + Integer.toString(rundata.getRun()) + " was already added?");
+                throw new RuntimeException("Run " + Integer.toString(rundata.getRun()) + " was already added?");
+            }
+            runsadded.add(rundata.getRun());
+            for (SvtBiasMyaRange biasRange : range.getRanges()) {
+                //create a collection
+                SvtBiasConstantCollection collection = new SvtBiasConstantCollection();
+                //create a constant and add to the collection
+                final SvtBiasConstant constant = new SvtBiasConstant();
+                constant.setFieldValue("start", biasRange.getStartDate());
+                constant.setFieldValue("end", biasRange.getEndDate());
+                constant.setFieldValue("value", biasRange.getStart().getValue());
+                collection.add(constant);
+                
+                final ConditionsRecord condition = new ConditionsRecord();
+                condition.setFieldValue("run_start", rundata.getRun());
+                condition.setFieldValue("run_end", rundata.getRun());
+                condition.setFieldValue("name", "svt_bias");
+                condition.setFieldValue("table_name", "svt_bias");
+                condition.setFieldValue("notes", "constants from mya");
+                condition.setFieldValue("created", new Date());
+                condition.setFieldValue("created_by", System.getProperty("user.name"));
+                
+                condition.setFieldValue("collection_id", collection.getCollectionId());
+                
+                logger.info(condition.toString());
+
+                if(doIt) {
+                    try {
+                        condition.insert();
+                    } catch (ConditionsObjectException e) {
+                        throw new RuntimeException(e);
+                    }
                 }
-                
-
-            }   
-
-        }
-        
-        
-        
-    }
-
+            }
+        }
+        
+
+    }
     
    
     

Added: java/trunk/conditions/src/main/java/org/hps/conditions/svt/SvtBiasConstant.java
 =============================================================================
--- java/trunk/conditions/src/main/java/org/hps/conditions/svt/SvtBiasConstant.java	(added)
+++ java/trunk/conditions/src/main/java/org/hps/conditions/svt/SvtBiasConstant.java	Thu Jun 11 14:43:13 2015
@@ -0,0 +1,79 @@
+/**
+ * 
+ */
+package org.hps.conditions.svt;
+
+import java.util.Date;
+
+import org.hps.conditions.api.BaseConditionsObject;
+import org.hps.conditions.api.BaseConditionsObjectCollection;
+import org.hps.conditions.database.Converter;
+import org.hps.conditions.database.Field;
+import org.hps.conditions.database.MultipleCollectionsAction;
+import org.hps.conditions.database.Table;
+
+/**
+ * 
+ * Encapsulates an SVT bias constant, which is range in time where bias was ON.
+ * 
+ * @author Per Hansson Adrian <[log in to unmask]>
+ *
+ */
+@Table(names  = "svt_bias")
+@Converter(multipleCollectionsAction = MultipleCollectionsAction.LAST_UPDATED)
+public final class SvtBiasConstant extends BaseConditionsObject {
+
+    /**
+     * The collection implementation for {@link SvtBiasConstant}.
+     */
+    @SuppressWarnings("serial")
+    public static class SvtBiasConstantCollection extends BaseConditionsObjectCollection<SvtBiasConstant> {
+        
+        
+        /**
+         * Find bias constant by date.
+         * 
+         * @param date the offset
+         * @return the constant containing the date or <code>null</code> otherwise.
+         * 
+         */
+        public SvtBiasConstant find(Date date) {
+            for (SvtBiasConstant constant : this) {
+                if(date.after(constant.getStart()) && date.before(constant.getEnd())) {
+                    return constant;
+                }
+            }
+            return null;
+        }
+    }
+    
+    
+    /**
+     * The start date. 
+     * @return the start date
+     */
+    @Field(names = {"start"})
+    public Date getStart() {
+        return getFieldValue("start");
+    }
+
+    /**
+     * The end date. 
+     * @return the end date
+     */
+    @Field(names = {"end"})
+    public Date getEnd() {
+        return getFieldValue("end");
+    }
+
+    /**
+     * The bias value
+     * . 
+     * @return the bias value
+     */
+    @Field(names = {"value"})
+    public double getValue() {
+        return getFieldValue("value");
+    }
+    
+}