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"); + } + +}