Author: [log in to unmask] Date: Thu Aug 20 17:29:01 2015 New Revision: 3392 Log: Merge trunk changes into branch. Added: java/branches/conditions-HPSJAVA-517/src/main/java/org/hps/conditions/svt/SvtBiasMyaDataReader.java - copied unchanged from r3391, java/trunk/conditions/src/main/java/org/hps/conditions/svt/SvtBiasMyaDataReader.java java/branches/conditions-HPSJAVA-517/src/main/java/org/hps/conditions/svt/SvtMotorMyaDataReader.java - copied unchanged from r3391, java/trunk/conditions/src/main/java/org/hps/conditions/svt/SvtMotorMyaDataReader.java java/branches/conditions-HPSJAVA-517/src/main/java/org/hps/conditions/svt/SvtMotorPosition.java - copied unchanged from r3391, java/trunk/conditions/src/main/java/org/hps/conditions/svt/SvtMotorPosition.java Modified: java/branches/conditions-HPSJAVA-517/ (props changed) java/branches/conditions-HPSJAVA-517/src/main/java/org/hps/conditions/api/ConditionsObjectUtilities.java java/branches/conditions-HPSJAVA-517/src/main/java/org/hps/conditions/database/ConnectionParameters.java java/branches/conditions-HPSJAVA-517/src/main/java/org/hps/conditions/database/DatabaseConditionsManager.java java/branches/conditions-HPSJAVA-517/src/main/java/org/hps/conditions/ecal/EcalChannelConstants.java java/branches/conditions-HPSJAVA-517/src/main/java/org/hps/conditions/ecal/EcalConditionsConverter.java java/branches/conditions-HPSJAVA-517/src/main/java/org/hps/conditions/ecal/TestRunEcalConditionsConverter.java java/branches/conditions-HPSJAVA-517/src/main/java/org/hps/conditions/run/RunSpreadsheet.java java/branches/conditions-HPSJAVA-517/src/main/java/org/hps/conditions/svt/SvtBiasConditionsLoader.java java/branches/conditions-HPSJAVA-517/src/main/java/org/hps/conditions/svt/SvtBiasConstant.java java/branches/conditions-HPSJAVA-517/src/main/java/org/hps/conditions/svt/SvtBiasMyaDumpReader.java Modified: java/branches/conditions-HPSJAVA-517/src/main/java/org/hps/conditions/api/ConditionsObjectUtilities.java ============================================================================= --- java/branches/conditions-HPSJAVA-517/src/main/java/org/hps/conditions/api/ConditionsObjectUtilities.java (original) +++ java/branches/conditions-HPSJAVA-517/src/main/java/org/hps/conditions/api/ConditionsObjectUtilities.java Thu Aug 20 17:29:01 2015 @@ -83,6 +83,7 @@ final TableMetaData tableInfo = TableRegistry.getTableRegistry().findByTableName(tableName); final ConditionsObjectCollection<?> collection = tableInfo.newCollection(); collection.setConnection(MANAGER.getConnection()); + collection.setTableMetaData(tableInfo); return collection; } @@ -97,6 +98,7 @@ final TableMetaData tableInfo = TableRegistry.getTableRegistry().findByTableName(tableName); final ConditionsObject object = tableInfo.newObject(); object.setConnection(MANAGER.getConnection()); + object.setTableMetaData(tableInfo); return object; } Modified: java/branches/conditions-HPSJAVA-517/src/main/java/org/hps/conditions/database/ConnectionParameters.java ============================================================================= --- java/branches/conditions-HPSJAVA-517/src/main/java/org/hps/conditions/database/ConnectionParameters.java (original) +++ java/branches/conditions-HPSJAVA-517/src/main/java/org/hps/conditions/database/ConnectionParameters.java Thu Aug 20 17:29:01 2015 @@ -177,6 +177,7 @@ */ public String getConnectionString() { return "jdbc:mysql://" + this.hostname + ":" + this.port + "/"; + //String connectionString = "jdbc:mysql://localhost/" + database + "?user=" + user + "&password=" + password + "&useUnicode=true&characterEncoding=UTF-8"; } /** @@ -223,4 +224,14 @@ String getUser() { return this.user; } + + /** + * Convert to human readable string. + * + * @return this object converted to a string + */ + public String toString() { + return "ConnectionParameters { database: " + database + ", hostname: " + hostname + ", password: " + password + + ", port: " + port + ", user: " + user + " }"; + } } Modified: java/branches/conditions-HPSJAVA-517/src/main/java/org/hps/conditions/database/DatabaseConditionsManager.java ============================================================================= --- java/branches/conditions-HPSJAVA-517/src/main/java/org/hps/conditions/database/DatabaseConditionsManager.java (original) +++ java/branches/conditions-HPSJAVA-517/src/main/java/org/hps/conditions/database/DatabaseConditionsManager.java Thu Aug 20 17:29:01 2015 @@ -110,11 +110,9 @@ */ public static synchronized DatabaseConditionsManager getInstance() { - logger.finest("getting conditions manager instance"); - // Is there no manager installed yet? if (!ConditionsManager.isSetup() || !(ConditionsManager.defaultInstance() instanceof DatabaseConditionsManager)) { - logger.finest("creating new DatabaseConditionsManager"); + logger.finest("creating new DatabaseConditionsManager instance"); // Create a new instance if necessary, which will install it globally as the default. new DatabaseConditionsManager(); } @@ -122,12 +120,10 @@ // Get the instance back from the default conditions system and check that the type is correct now. final ConditionsManager manager = ConditionsManager.defaultInstance(); if (!(manager instanceof DatabaseConditionsManager)) { - logger.severe("default conditions manager has wrong type"); + logger.severe("default conditions manager has wrong type: " + manager.getClass()); throw new RuntimeException("Default conditions manager has the wrong type: " + ConditionsManager.defaultInstance().getClass().getName()); } - - logger.finest("returning conditions manager instance"); return (DatabaseConditionsManager) manager; } Modified: java/branches/conditions-HPSJAVA-517/src/main/java/org/hps/conditions/ecal/EcalChannelConstants.java ============================================================================= --- java/branches/conditions-HPSJAVA-517/src/main/java/org/hps/conditions/ecal/EcalChannelConstants.java (original) +++ java/branches/conditions-HPSJAVA-517/src/main/java/org/hps/conditions/ecal/EcalChannelConstants.java Thu Aug 20 17:29:01 2015 @@ -12,17 +12,17 @@ public final class EcalChannelConstants { /** - * True if channel is bad and should not be used for reconstruction. + * <code>true</code> if channel is bad and should not be used for reconstruction. */ private boolean badChannel = false; /** - * The channel {@link EcalCalibration} conditions. + * The channel's {@link EcalCalibration} conditions (pedestal and noise). */ private EcalCalibration calibration = null; /** - * The channel {@link EcalGain} conditions. + * The channel {@link EcalGain} conditions (per channel gain value). */ private EcalGain gain = null; @@ -30,6 +30,11 @@ * The channel {@link EcalTimeShift} conditions. */ private EcalTimeShift timeShift = null; + + /** + * The channel's {@link EcalPulseWidth} conditions. + */ + private EcalPulseWidth pulseWidth = null; /** * Class constructor, which is package protected. @@ -38,36 +43,45 @@ } /** - * Get the calibration. + * Get the channel calibration. * - * @return The calibration. + * @return the channel calibration */ public EcalCalibration getCalibration() { return this.calibration; } /** - * Get the gain. + * Get the channel gain. * - * @return The gain. + * @return the channel gain */ public EcalGain getGain() { return this.gain; + } + + /** + * Get the pulse width or <code>null</code> if it does not exist. + * + * @return the pulse width + */ + public EcalPulseWidth getPulseWidth() { + return this.pulseWidth; } /** * Get the time shift. * - * @return The time shift. + * @return the time shift */ public EcalTimeShift getTimeShift() { return this.timeShift; } /** - * True if this is a bad channel. + * <code>true</code> if this is a bad channel. * - * @return True if channel is bad. + * @return <code>true</code> if channel is bad */ public boolean isBadChannel() { return this.badChannel; @@ -94,7 +108,7 @@ /** * Set the gain. * - * @param gain the new gain object + * @param gain the channel gain */ void setGain(final EcalGain gain) { this.gain = gain; @@ -103,9 +117,18 @@ /** * Set the time shift. * - * @param timeShift the new time shift + * @param timeShift the time shift */ void setTimeShift(final EcalTimeShift timeShift) { this.timeShift = timeShift; } + + /** + * Set the pulse width. + * + * @param pulseWidth the pulse width + */ + void setPulseWidth(final EcalPulseWidth pulseWidth) { + this.pulseWidth = pulseWidth; + } } Modified: java/branches/conditions-HPSJAVA-517/src/main/java/org/hps/conditions/ecal/EcalConditionsConverter.java ============================================================================= --- java/branches/conditions-HPSJAVA-517/src/main/java/org/hps/conditions/ecal/EcalConditionsConverter.java (original) +++ java/branches/conditions-HPSJAVA-517/src/main/java/org/hps/conditions/ecal/EcalConditionsConverter.java Thu Aug 20 17:29:01 2015 @@ -8,6 +8,7 @@ import org.hps.conditions.ecal.EcalChannel.ChannelId; import org.hps.conditions.ecal.EcalChannel.EcalChannelCollection; import org.hps.conditions.ecal.EcalGain.EcalGainCollection; +import org.hps.conditions.ecal.EcalPulseWidth.EcalPulseWidthCollection; import org.hps.conditions.ecal.EcalTimeShift.EcalTimeShiftCollection; import org.lcsim.conditions.ConditionsConverter; import org.lcsim.conditions.ConditionsManager; @@ -27,7 +28,7 @@ * @see EcalTimeShift */ public class EcalConditionsConverter implements ConditionsConverter<EcalConditions> { - + /** * Create combined ECAL conditions object containing all data for the current run. * @@ -36,34 +37,29 @@ */ @Override public final EcalConditions getData(final ConditionsManager manager, final String name) { + + // Get the ECal channel map from the conditions database. + final EcalChannelCollection channels = this.getEcalChannelCollection(); - final DatabaseConditionsManager databaseConditionsManager = (DatabaseConditionsManager) manager; - - // Get the ECal channel map from the conditions database - final EcalChannelCollection channels = this.getEcalChannelCollection(databaseConditionsManager); - - // Create the ECal conditions object that will be used to encapsulate - // ECal conditions collections - final Detector detector = databaseConditionsManager.getDetectorObject(); - final EcalConditions conditions = new EcalConditions(detector.getSubdetector(databaseConditionsManager + // Create the ECal conditions object that will be used to encapsulate ECal conditions collections. + final Detector detector = getDatabaseConditionsManager().getDetectorObject(); + final EcalConditions conditions = new EcalConditions(detector.getSubdetector(getDatabaseConditionsManager() .getEcalName())); // Set the channel map. conditions.setChannelCollection(channels); - // Get the ECal gains from the conditions database and add them to the - // conditions set - final EcalGainCollection gains = this.getEcalGainCollection(databaseConditionsManager); + // Get the ECal gains from the conditions database and add them to the conditions set + final EcalGainCollection gains = this.getEcalGainCollection(); for (final EcalGain gain : gains) { final ChannelId channelId = new ChannelId(new int[] {gain.getChannelId()}); final EcalChannel channel = channels.findChannel(channelId); conditions.getChannelConstants(channel).setGain(gain); } + // Get the bad channel collections and merge them together. final ConditionsSeries<EcalBadChannel, EcalBadChannelCollection> badChannelSeries = this - .getEcalBadChannelSeries(databaseConditionsManager); - // FIXME: How to get EcalBadChannelCollection here instead for the collection type? - // API of ConditionsSeries and ConditionsSeriesConverter needs to be changed! + .getEcalBadChannelSeries(); for (final ConditionsObjectCollection<EcalBadChannel> badChannels : badChannelSeries) { for (final EcalBadChannel badChannel : badChannels) { final ChannelId channelId = new ChannelId(new int[] {badChannel.getChannelId()}); @@ -72,26 +68,38 @@ } } - // Get the ECal calibrations from the conditions database and add them - // to the conditions set. - final EcalCalibrationCollection calibrations = this.getEcalCalibrationCollection(databaseConditionsManager); + // Get the ECal calibrations from the conditions database and add them to the conditions set. + final EcalCalibrationCollection calibrations = this.getEcalCalibrationCollection(); for (final EcalCalibration calibration : calibrations) { final ChannelId channelId = new ChannelId(new int[] {calibration.getChannelId()}); final EcalChannel channel = channels.findChannel(channelId); conditions.getChannelConstants(channel).setCalibration(calibration); } - // Get the ECal time shifts from the conditions database and add them to - // the conditions set. - if (databaseConditionsManager.hasConditionsRecord("ecal_time_shifts")) { - final EcalTimeShiftCollection timeShifts = this.getEcalTimeShiftCollection(databaseConditionsManager); + // Get the ECal time shifts from the conditions database and add them to the conditions set. + if (getDatabaseConditionsManager().hasConditionsRecord("ecal_time_shifts")) { + final EcalTimeShiftCollection timeShifts = this.getEcalTimeShiftCollection(); for (final EcalTimeShift timeShift : timeShifts) { final ChannelId channelId = new ChannelId(new int[] {timeShift.getChannelId()}); final EcalChannel channel = channels.findChannel(channelId); conditions.getChannelConstants(channel).setTimeShift(timeShift); } } else { - DatabaseConditionsManager.getLogger().warning("no ecal_time_shifts collection found"); + // If time shifts do not exist it is not a fatal error. + DatabaseConditionsManager.getLogger().warning("no conditions found for EcalTimeShiftCollection"); + } + + // Set the channel pulse width if it exists in the database. + if (getDatabaseConditionsManager().hasConditionsRecord("ecal_pulse_widths")) { + final EcalPulseWidthCollection pulseWidths = this.getEcalPulseWidthCollection(); + for (final EcalPulseWidth pulseWidth : pulseWidths) { + final ChannelId channelId = new ChannelId(new int[] {pulseWidth.getChannelId()}); + final EcalChannel channel = channels.findChannel(channelId); + conditions.getChannelConstants(channel).setPulseWidth(pulseWidth); + } + } else { + // If pulse widths do not exist it is not a fatal error. + DatabaseConditionsManager.getLogger().warning("no conditions found for EcalPulseWidthCollection"); } // Return the conditions object to caller. @@ -104,9 +112,8 @@ * @param manager the conditions manager * @return the collections of ECAL bad channel objects */ - protected ConditionsSeries<EcalBadChannel, EcalBadChannelCollection> getEcalBadChannelSeries( - final DatabaseConditionsManager manager) { - return manager.getConditionsSeries(EcalBadChannelCollection.class, "ecal_bad_channels"); + protected ConditionsSeries<EcalBadChannel, EcalBadChannelCollection> getEcalBadChannelSeries() { + return getDatabaseConditionsManager().getConditionsSeries(EcalBadChannelCollection.class, "ecal_bad_channels"); } /** @@ -115,8 +122,8 @@ * @param manager the conditions manager * @return the collection of ECAL channel calibration objects */ - protected EcalCalibrationCollection getEcalCalibrationCollection(final DatabaseConditionsManager manager) { - return manager.getCachedConditions(EcalCalibrationCollection.class, "ecal_calibrations").getCachedData(); + protected EcalCalibrationCollection getEcalCalibrationCollection() { + return getDatabaseConditionsManager().getCachedConditions(EcalCalibrationCollection.class, "ecal_calibrations").getCachedData(); } /** @@ -125,8 +132,8 @@ * @param manager the conditions manager * @return the default ECAL channel object collection */ - protected EcalChannelCollection getEcalChannelCollection(final DatabaseConditionsManager manager) { - return manager.getCachedConditions(EcalChannelCollection.class, "ecal_channels").getCachedData(); + protected EcalChannelCollection getEcalChannelCollection() { + return getDatabaseConditionsManager().getCachedConditions(EcalChannelCollection.class, "ecal_channels").getCachedData(); } /** @@ -135,8 +142,8 @@ * @param manager the conditions manager * @return the ECAL channel gain collection */ - protected EcalGainCollection getEcalGainCollection(final DatabaseConditionsManager manager) { - return manager.getCachedConditions(EcalGainCollection.class, "ecal_gains").getCachedData(); + protected EcalGainCollection getEcalGainCollection() { + return getDatabaseConditionsManager().getCachedConditions(EcalGainCollection.class, "ecal_gains").getCachedData(); } /** @@ -145,8 +152,18 @@ * @param manager the conditions manager * @return the collection of ECAL time shift objects */ - protected EcalTimeShiftCollection getEcalTimeShiftCollection(final DatabaseConditionsManager manager) { - return manager.getCachedConditions(EcalTimeShiftCollection.class, "ecal_time_shifts").getCachedData(); + protected EcalTimeShiftCollection getEcalTimeShiftCollection() { + return getDatabaseConditionsManager().getCachedConditions(EcalTimeShiftCollection.class, "ecal_time_shifts").getCachedData(); + } + + /** + * Get the default {@link EcalPulseWith} collection. + * + * @param manager the conditions manager + * @return the collection of ECAL pulse widths + */ + protected EcalPulseWidthCollection getEcalPulseWidthCollection() { + return getDatabaseConditionsManager().getCachedConditions(EcalPulseWidthCollection.class, "ecal_pulse_widths").getCachedData(); } /** @@ -158,4 +175,13 @@ public final Class<EcalConditions> getType() { return EcalConditions.class; } + + /** + * Get the current instance of the conditions manager. + * + * @return the current instance of the conditions manager + */ + protected final DatabaseConditionsManager getDatabaseConditionsManager() { + return DatabaseConditionsManager.getInstance(); + } } Modified: java/branches/conditions-HPSJAVA-517/src/main/java/org/hps/conditions/ecal/TestRunEcalConditionsConverter.java ============================================================================= --- java/branches/conditions-HPSJAVA-517/src/main/java/org/hps/conditions/ecal/TestRunEcalConditionsConverter.java (original) +++ java/branches/conditions-HPSJAVA-517/src/main/java/org/hps/conditions/ecal/TestRunEcalConditionsConverter.java Thu Aug 20 17:29:01 2015 @@ -1,7 +1,6 @@ package org.hps.conditions.ecal; import org.hps.conditions.api.ConditionsSeries; -import org.hps.conditions.database.DatabaseConditionsManager; import org.hps.conditions.ecal.EcalBadChannel.EcalBadChannelCollection; import org.hps.conditions.ecal.EcalCalibration.EcalCalibrationCollection; import org.hps.conditions.ecal.EcalChannel.EcalChannelCollection; @@ -25,9 +24,8 @@ * @return the Test Run bad channel collections */ @Override - protected ConditionsSeries<EcalBadChannel, EcalBadChannelCollection> getEcalBadChannelSeries( - final DatabaseConditionsManager manager) { - return manager.getConditionsSeries(EcalBadChannelCollection.class, "test_run_ecal_bad_channels"); + protected ConditionsSeries<EcalBadChannel, EcalBadChannelCollection> getEcalBadChannelSeries() { + return getDatabaseConditionsManager().getConditionsSeries(EcalBadChannelCollection.class, "test_run_ecal_bad_channels"); } /** @@ -37,8 +35,8 @@ * @return the Test Run ECAL calibration collection */ @Override - protected EcalCalibrationCollection getEcalCalibrationCollection(final DatabaseConditionsManager manager) { - return manager.getCachedConditions(EcalCalibrationCollection.class, "test_run_ecal_calibrations") + protected EcalCalibrationCollection getEcalCalibrationCollection() { + return getDatabaseConditionsManager().getCachedConditions(EcalCalibrationCollection.class, "test_run_ecal_calibrations") .getCachedData(); } @@ -49,8 +47,8 @@ * @return the Test Run ECAL channel collection */ @Override - protected EcalChannelCollection getEcalChannelCollection(final DatabaseConditionsManager manager) { - return manager.getCachedConditions(EcalChannelCollection.class, "test_run_ecal_channels").getCachedData(); + protected EcalChannelCollection getEcalChannelCollection() { + return getDatabaseConditionsManager().getCachedConditions(EcalChannelCollection.class, "test_run_ecal_channels").getCachedData(); } /** @@ -60,8 +58,8 @@ * @return the Test Run ECAL gain collection */ @Override - protected EcalGainCollection getEcalGainCollection(final DatabaseConditionsManager manager) { - return manager.getCachedConditions(EcalGainCollection.class, "test_run_ecal_gains").getCachedData(); + protected EcalGainCollection getEcalGainCollection() { + return getDatabaseConditionsManager().getCachedConditions(EcalGainCollection.class, "test_run_ecal_gains").getCachedData(); } /** @@ -71,7 +69,7 @@ * @return the Test Run ECAL time shift collection */ @Override - protected EcalTimeShiftCollection getEcalTimeShiftCollection(final DatabaseConditionsManager manager) { - return manager.getCachedConditions(EcalTimeShiftCollection.class, "test_run_ecal_time_shifts").getCachedData(); + protected EcalTimeShiftCollection getEcalTimeShiftCollection() { + return getDatabaseConditionsManager().getCachedConditions(EcalTimeShiftCollection.class, "test_run_ecal_time_shifts").getCachedData(); } } Modified: java/branches/conditions-HPSJAVA-517/src/main/java/org/hps/conditions/run/RunSpreadsheet.java ============================================================================= --- java/branches/conditions-HPSJAVA-517/src/main/java/org/hps/conditions/run/RunSpreadsheet.java (original) +++ java/branches/conditions-HPSJAVA-517/src/main/java/org/hps/conditions/run/RunSpreadsheet.java Thu Aug 20 17:29:01 2015 @@ -187,14 +187,21 @@ run = parseRunNumber(this.record); try { startDate = RunSpreadsheet.parseStartDate(this.record); - } catch (ParseException e) { + } catch (ParseException e) { } try { endDate = RunSpreadsheet.parseEndDate(this.record); - } catch (ParseException e) { - } - } - + } catch (ParseException e) { + } + } + + public RunData(Date startDate, Date endDate, int run) { + this.startDate = startDate; + this.endDate = endDate; + this.run = run; + record = null; + } + public int getRun() { return run; } @@ -213,6 +220,10 @@ public CSVRecord getRecord() { return record; + } + + public boolean isJunk() { + return "JUNK".compareToIgnoreCase(record.get("to_tape")) == 0; } } Modified: java/branches/conditions-HPSJAVA-517/src/main/java/org/hps/conditions/svt/SvtBiasConditionsLoader.java ============================================================================= --- java/branches/conditions-HPSJAVA-517/src/main/java/org/hps/conditions/svt/SvtBiasConditionsLoader.java (original) +++ java/branches/conditions-HPSJAVA-517/src/main/java/org/hps/conditions/svt/SvtBiasConditionsLoader.java Thu Aug 20 17:29:01 2015 @@ -1,22 +1,24 @@ -/** - * - */ package org.hps.conditions.svt; import hep.aida.*; - +import java.io.BufferedReader; import java.io.File; +import java.io.FileReader; +import java.io.IOException; import java.sql.SQLException; +import java.text.SimpleDateFormat; import java.util.ArrayList; +import java.util.Collections; import java.util.Date; +import java.util.GregorianCalendar; +import java.util.HashMap; import java.util.HashSet; -import java.util.LinkedHashMap; import java.util.List; -import java.util.Map.Entry; +import java.util.Map; import java.util.Set; +import java.util.TimeZone; 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.HelpFormatter; @@ -24,7 +26,6 @@ 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; @@ -32,10 +33,11 @@ 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.conditions.svt.SvtBiasMyaDataReader.SvtBiasMyaRange; +import org.hps.conditions.svt.SvtBiasMyaDataReader.SvtBiasRunRange; +import org.hps.conditions.svt.SvtMotorMyaDataReader.SvtPositionMyaRange; +import org.hps.conditions.svt.SvtMotorMyaDataReader.SvtPositionRunRange; +import org.hps.conditions.svt.SvtMotorPosition.SvtMotorPositionCollection; import org.hps.util.BasicLogFormatter; import org.lcsim.util.aida.AIDA; import org.lcsim.util.log.LogUtil; @@ -47,13 +49,13 @@ public class SvtBiasConditionsLoader { private static final Set<String> FIELDS = new HashSet<String>(); - private static Logger logger = LogUtil.create(SvtBiasConditionsLoader.class, new BasicLogFormatter(),Level.INFO); - + private static Logger logger = LogUtil.create(SvtBiasConditionsLoader.class, new BasicLogFormatter(), Level.INFO); /** * Setup conditions. */ private static final DatabaseConditionsManager MANAGER = DatabaseConditionsManager.getInstance(); + static { FIELDS.add("run"); FIELDS.add("date"); @@ -64,62 +66,63 @@ /** * Setup control plots. */ - private static AIDA aida = AIDA.defaultInstance(); + private static final AIDA aida = AIDA.defaultInstance(); static IDataPointSet dpsRuns = null; static IDataPointSet dpsBiasRuns = null; - + static IDataPointSet dpsPositionRuns = null; + 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); + dpsRuns = dpsf.create("dpsRuns", "Run intervals", 2); + dpsBiasRuns = dpsf.create("dpsBiasRuns", "Bias ON intervals associated with runs", 2); + dpsPositionRuns = dpsf.create("dpsPositionRuns", "Position stable intervals associated with runs", 2); IPlotter plotter = aida.analysisFactory().createPlotterFactory().create("Bias run ranges"); IPlotterStyle plotterStyle = aida.analysisFactory().createPlotterFactory().createPlotterStyle(); plotterStyle.xAxisStyle().setParameter("type", "date"); - plotter.createRegions(1, 3); - plotter.region(0).plot(dpsRuns,plotterStyle); - plotter.region(1).plot(dpsBiasRuns,plotterStyle); - plotter.region(2).plot(dpsRuns,plotterStyle); - plotter.region(2).plot(dpsBiasRuns,plotterStyle,"mode=overlay"); - if(show) plotter.show(); - - } - + plotter.createRegions(1, 4); + plotter.region(0).plot(dpsRuns, plotterStyle); + plotter.region(1).plot(dpsBiasRuns, plotterStyle); + plotter.region(2).plot(dpsPositionRuns, plotterStyle); + plotter.region(3).plot(dpsRuns, plotterStyle); + plotter.region(3).plot(dpsBiasRuns, plotterStyle, "mode=overlay"); + plotter.region(3).plot(dpsPositionRuns, plotterStyle, "mode=overlay"); + if (show) { + plotter.show(); + } + + } + private static IDataPoint addPoint(IDataPointSet dps, long mstime, double val) { IDataPoint dp = dps.addPoint(); - dp.coordinate(0).setValue(mstime/1000.); + dp.coordinate(0).setValue(mstime / 1000.); dp.coordinate(1).setValue(val); return dp; } - - + /** - * Default constructor + * Default constructor */ public SvtBiasConditionsLoader() { } - - - /** * 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))) { + if (data.getStartDate() == null || data.getEndDate() == null || data.getStartDate().before((new GregorianCalendar(1999, 1, 1)).getTime())) { logger.fine("This run data is not valid: " + data.toString()); return false; - } + } if (data.getStartDate().after(data.getEndDate())) { throw new RuntimeException("start date is after end date?!" + data.toString()); } return true; } - + //private static Options options = null; - - public static RunMap getRunMapFromSpreadSheet(String path) { // Load in CSV records from the exported run spreadsheet. logger.info(path); @@ -128,65 +131,51 @@ // Find the run ranges that have the same fields values. final List<RunRange> ranges = RunRange.findRunRanges(runSheet, FIELDS); logger.info("Found " + ranges.size() + " ranges."); - for(RunRange range : ranges) logger.fine(range.toString()); + for (RunRange range : ranges) { + logger.fine(range.toString()); + } // find the run records (has converted dates and stuff) for these ranges - RunMap runmap = runSheet.getRunMap(ranges); + RunMap runmap = runSheet.getRunMap(ranges); logger.info("Found " + runmap.size() + " runs in the run map."); return runmap; } - - public static List<SvtBiasRunRange> getBiasRunRanges(RunMap runmap, - SvtBiasMyaDumpReader biasMyaReader) { - List<SvtBiasRunRange> biasRunRanges = new ArrayList<SvtBiasRunRange>(); - // loop over runs from CSV - RunData prev = null; - for(Entry<Integer,RunData> entry : runmap.entrySet()) { - int run = entry.getKey(); - RunData data = entry.getValue(); - logger.fine("Processing " + run + " " + data.toString()); - - //check that data is ok + + public static List<RunData> getRunListFromSpreadSheet(String path) { + // Load in CSV records from the exported run spreadsheet. + List<RunData> runList = new ArrayList<RunData>(); + + // find the run records (has converted dates and stuff) for these ranges + RunMap runmap = getRunMapFromSpreadSheet(path); + + List<Integer> runNums = new ArrayList<Integer>(runmap.keySet()); + Collections.sort(runNums); + for (Integer runNum : runNums) { + RunData data = runmap.get(runNum); if (isValid(data)) { - if(prev!=null) { - if(isValid(prev)) { - if(prev.getEndDate().after(data.getStartDate())) { - throw new RuntimeException("prev end date after run started?: " + prev.toString() + " " + data.toString()); - } else if(prev.getStartDate().after(data.getEndDate())) { - throw new RuntimeException("prev start date before run ended?: " + prev.toString() + " " + data.toString()); - } - } - } - - // find the bias ranges applicable to this run - SvtBiasMyaRanges overlaps = biasMyaReader.findOverlappingRanges(data.getStartDate(), data.getEndDate()); - logger.fine("Found " + overlaps.size() + " overlapping bias ranges"); - logger.fine(overlaps.toString()); - - biasRunRanges.add(new SvtBiasRunRange(data,overlaps)); - prev = data; - - } - } - return biasRunRanges; - } - - - - - + runList.add(data); + } + } + return runList; + } + /** * 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.) + * + * @param args the command line arguments (requires a CVS run log file and a + * MYA dump file.) */ public static void main(String[] args) { 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("c", true, "CSV run file")); + options.addOption(new Option("m", true, "MYA dump file for bias")); + options.addOption(new Option("p", true, "MYA dump file for motor positions")); + options.addOption(new Option("t", false, "use run table format (from crawler) for bias")); + options.addOption(new Option("d", false, "discard first line of MYA data (for myaData output)")); options.addOption(new Option("g", false, "Actually load stuff into DB")); + options.addOption(new Option("b", true, "beam current file")); options.addOption(new Option("s", false, "Show plots")); - + final CommandLineParser parser = new PosixParser(); CommandLine cl = null; try { @@ -194,83 +183,99 @@ } catch (ParseException e) { throw new RuntimeException("Cannot parse.", e); } - - if(!cl.hasOption("c") || !cl.hasOption("m")) { + + if (!cl.hasOption("c") || (!cl.hasOption("m") && !cl.hasOption("p"))) { printUsage(options); return; } - - - + // Setup plots - setupPlots(cl.hasOption("s")?true:false); - - + setupPlots(cl.hasOption("s")); + // Load in CSV records from the exported run spreadsheet. - RunMap runmap = getRunMapFromSpreadSheet(cl.getOptionValue("c")); - - + List<RunData> runList; + if (cl.hasOption("t")) { + runList = SvtBiasMyaDataReader.readRunTable(new File(cl.getOptionValue("c"))); + } else { + runList = getRunListFromSpreadSheet(cl.getOptionValue("c")); + } + + List<SvtBiasRunRange> biasRunRanges = null; + List<SvtPositionRunRange> positionRunRanges = null; // Load MYA dump - SvtBiasMyaDumpReader biasMyaReader = new SvtBiasMyaDumpReader(cl.getOptionValue("m")); - logger.info("Got " + biasMyaReader.getRanges().size() + " bias ranges"); - - + if (cl.hasOption("m")) { + List<SvtBiasMyaRange> biasRanges = SvtBiasMyaDataReader.readMyaData(new File(cl.getOptionValue("m")), 178.0, 2000, cl.hasOption("d")); + logger.info("Got " + biasRanges.size() + " bias ranges"); + biasRunRanges = SvtBiasMyaDataReader.findOverlappingRanges(runList, biasRanges); + } + + if (cl.hasOption("p")) { + List<SvtPositionMyaRange> positionRanges = SvtMotorMyaDataReader.readMyaData(new File(cl.getOptionValue("p")), 200, 10000); + logger.info("Got " + positionRanges.size() + " position ranges"); + positionRunRanges = SvtMotorMyaDataReader.findOverlappingRanges(runList, positionRanges); + } + // Combine them to run ranges when bias was on // each run may have multiple bias ranges - - List<SvtBiasRunRange> biasRunRanges = getBiasRunRanges(runmap,biasMyaReader); - - - // 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); - } - - - } - - } - } - - + if (cl.hasOption("s")) { + if (cl.hasOption("m")) { + 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.getStartDate().getTime(), 0.0); + addPoint(dpsBiasRuns, br.getStartDate().getTime(), 0.3); + addPoint(dpsBiasRuns, br.getEndDate().getTime(), 0.3); + addPoint(dpsBiasRuns, br.getEndDate().getTime(), 0.0); + } + } + } + } + if (cl.hasOption("p")) { + for (SvtPositionRunRange r : positionRunRanges) { + logger.info(r.toString()); + if (r.getRun().getRun() > 5600) {//9999999999999.0) { + //if(dpsRuns.size()/4.0<500) {//9999999999999.0) { + for (SvtPositionMyaRange br : r.getRanges()) { + addPoint(dpsPositionRuns, br.getStartDate().getTime(), 0.0); + addPoint(dpsPositionRuns, br.getStartDate().getTime(), 0.5 + 100 * Math.max(br.getTop(), br.getBottom())); + addPoint(dpsPositionRuns, br.getEndDate().getTime(), 0.5 + 100 * Math.max(br.getTop(), br.getBottom())); + addPoint(dpsPositionRuns, br.getEndDate().getTime(), 0.0); + } + } + } + } + } + + if (cl.hasOption("b") && cl.hasOption("m") && cl.hasOption("p")) { + readBeamData(new File(cl.getOptionValue("b")), runList, positionRunRanges, biasRunRanges); + } + // load to DB - if(cl.hasOption("g")) { - loadToConditionsDB(biasRunRanges); - } - } - - + if (cl.hasOption("g")) { + if (cl.hasOption("m")) { + loadBiasesToConditionsDB(biasRunRanges); + } + if (cl.hasOption("p")) { + loadPositionsToConditionsDB(positionRunRanges); + } + } + } private static void printUsage(Options options) { - HelpFormatter formatter = new HelpFormatter(); - formatter.printHelp("Need to adhere to these options", options); - - } - - 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) { + HelpFormatter formatter = new HelpFormatter(); + formatter.printHelp("Need to adhere to these options", options); + + } + + private static void loadBiasesToConditionsDB(List<SvtBiasRunRange> ranges) { logger.info("Load to DB..."); // Create a new collection for each run @@ -293,6 +298,10 @@ // create a collection SvtBiasConstantCollection collection = new SvtBiasConstantCollection(); + // Set the table meta data + collection.setTableMetaData(MANAGER.findTableMetaData("svt_bias_constants")); + collection.setConnection(MANAGER.getConnection()); + int collectionId = -1; try { collectionId = MANAGER.getCollectionId(collection, "run ranges for SVT HV bias ON"); @@ -305,28 +314,30 @@ final ConditionsRecord condition = new ConditionsRecord(); condition.setFieldValue("run_start", rundata.getRun()); condition.setFieldValue("run_end", rundata.getRun()); - condition.setFieldValue("name", "svt_bias"); + condition.setFieldValue("name", "svt_bias_constants"); condition.setFieldValue("table_name", "svt_bias_constants"); condition.setFieldValue("notes", "constants from mya"); condition.setFieldValue("created", new Date()); condition.setFieldValue("created_by", System.getProperty("user.name")); condition.setFieldValue("collection_id", collectionId); + condition.setTableMetaData(MANAGER.findTableMetaData("conditions")); + condition.setConnection(MANAGER.getConnection()); + logger.info(condition.toString()); try { for (SvtBiasMyaRange biasRange : range.getRanges()) { // 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()); + constant.setFieldValue("start", biasRange.getStartDate().getTime()); + constant.setFieldValue("end", biasRange.getEndDate().getTime()); + constant.setFieldValue("value", biasRange.getValue()); collection.add(constant); - logger.info(condition.toString()); } - + // Insert collection data. collection.insert(); - + // Insert conditions record. condition.insert(); @@ -335,4 +346,170 @@ } } } + + private static void loadPositionsToConditionsDB(List<SvtPositionRunRange> ranges) { + logger.info("Load to DB..."); + + // Create a new collection for each run + List<Integer> runsadded = new ArrayList<Integer>(); + + for (SvtPositionRunRange 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()); + + if (range.getRanges().isEmpty()) { + logger.info("No position range for run " + range.getRun().getRun()); + continue; + } + + // create a collection + SvtMotorPositionCollection collection = new SvtMotorPositionCollection(); + + // Set the table meta data + collection.setTableMetaData(MANAGER.findTableMetaData("svt_motor_positions")); + collection.setConnection(MANAGER.getConnection()); + + int collectionId = -1; + try { + collectionId = MANAGER.getCollectionId(collection, "run ranges for SVT positions"); + } catch (SQLException e1) { + throw new RuntimeException(e1); + } + + collection.setCollectionId(collectionId); + + final ConditionsRecord condition = new ConditionsRecord(); + condition.setFieldValue("run_start", rundata.getRun()); + condition.setFieldValue("run_end", rundata.getRun()); + condition.setFieldValue("name", "svt_motor_positions"); + condition.setFieldValue("table_name", "svt_motor_positions"); + condition.setFieldValue("notes", "constants from mya"); + condition.setFieldValue("created", new Date()); + condition.setFieldValue("created_by", System.getProperty("user.name")); + condition.setFieldValue("collection_id", collectionId); + condition.setTableMetaData(MANAGER.findTableMetaData("conditions")); + condition.setConnection(MANAGER.getConnection()); + logger.info(condition.toString()); + + try { + + for (SvtPositionMyaRange positionRange : range.getRanges()) { + // create a constant and add to the collection + final SvtMotorPosition constant = new SvtMotorPosition(); + constant.setFieldValue("start", positionRange.getStartDate().getTime()); + constant.setFieldValue("end", positionRange.getEndDate().getTime()); + constant.setFieldValue("top", positionRange.getTop()); + constant.setFieldValue("bottom", positionRange.getBottom()); + collection.add(constant); + } + + // Insert collection data. + collection.insert(); + + // Insert conditions record. + condition.insert(); + + } catch (Exception e) { + throw new RuntimeException(e); + } + } + } + + private static void readBeamData(File file, List<RunData> runList, List<SvtPositionRunRange> positionRanges, List<SvtBiasRunRange> biasRanges) { + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); + dateFormat.setTimeZone(TimeZone.getTimeZone("America/New_York")); + + Map<Integer, SvtPositionRunRange> positionRangeMap = new HashMap<Integer, SvtPositionRunRange>(); + for (SvtPositionRunRange range : positionRanges) { + positionRangeMap.put(range.getRun().getRun(), range); + } + Map<Integer, SvtBiasRunRange> biasRangeMap = new HashMap<Integer, SvtBiasRunRange>(); + for (SvtBiasRunRange range : biasRanges) { + biasRangeMap.put(range.getRun().getRun(), range); + } + + try { + BufferedReader br = new BufferedReader(new FileReader(file)); + String line; + System.out.println("myaData header: " + br.readLine()); //discard the first line + + for (RunData run : runList) { + double totalCharge = 0; + double totalChargeWithBias = 0; + double totalChargeWithBiasAtNominal = 0; + double totalChargeWithBiasAt1pt5 = 0; + Date lastDate = null; + + while ((line = br.readLine()) != null) { + String arr[] = line.split(" +"); + + if (arr.length != 3) { + throw new java.text.ParseException("this line is not correct.", 0); + } + Date date = dateFormat.parse(arr[0] + " " + arr[1]); + if (date.after(run.getEndDate())) { + break; + } + if (date.before(run.getStartDate())) { + continue; + } + + double current; + if (arr[2].equals("<undefined>")) { + current = 0; + } else { + current = Double.parseDouble(arr[2]); + } + + if (date.after(run.getStartDate())) { + if (lastDate != null) { + double dt = (date.getTime() - lastDate.getTime()) / 1000.0; + double dq = dt * current; // nC + + totalCharge += dq; + SvtBiasRunRange biasRunRange = biasRangeMap.get(run.getRun()); + if (biasRunRange != null) { + for (SvtBiasMyaRange biasRange : biasRunRange.getRanges()) { + if (biasRange.includes(date)) { + totalChargeWithBias += dq; + + SvtPositionRunRange positionRunRange = positionRangeMap.get(run.getRun()); + if (positionRunRange != null) { + for (SvtPositionMyaRange positionRange : positionRunRange.getRanges()) { + if (positionRange.includes(date)) { + if (Math.abs(positionRange.getBottom()) < 0.0001 && Math.abs(positionRange.getTop()) < 0.0001) { + totalChargeWithBiasAtNominal += dq; + } else if (Math.abs(positionRange.getBottom() - 0.0033) < 0.0001 && Math.abs(positionRange.getTop() - 0.0031) < 0.0001) { + totalChargeWithBiasAt1pt5 += dq; + } + break; + } + } + } + + break; + } + } + } + + } + } + lastDate = date; + } + + System.out.format("run\t%d\ttotalQ\t%.0f\ttotalQBias\t%.0f\tfracBias\t%f\ttotalQNom\t%.0f\tfracNom\t%f\ttotalQ1pt5\t%.0f\tfrac1pt5\t%f\n", run.getRun(), totalCharge, totalChargeWithBias, totalChargeWithBias / totalCharge, totalChargeWithBiasAtNominal, totalChargeWithBiasAtNominal / totalCharge, totalChargeWithBiasAt1pt5, totalChargeWithBiasAt1pt5 / totalCharge); + } + br.close(); + + } catch (IOException e) { + throw new RuntimeException(e); + } catch (java.text.ParseException e) { + throw new RuntimeException(e); + } + } } Modified: java/branches/conditions-HPSJAVA-517/src/main/java/org/hps/conditions/svt/SvtBiasConstant.java ============================================================================= --- java/branches/conditions-HPSJAVA-517/src/main/java/org/hps/conditions/svt/SvtBiasConstant.java (original) +++ java/branches/conditions-HPSJAVA-517/src/main/java/org/hps/conditions/svt/SvtBiasConstant.java Thu Aug 20 17:29:01 2015 @@ -13,7 +13,7 @@ * * Encapsulates an SVT bias constant, which is range in time where bias was ON. * - * @author Per Hansson Adrian <[log in to unmask]> + * @author Per Hansson Adrian, SLAC */ @Table(names = "svt_bias_constants") @Converter(multipleCollectionsAction = MultipleCollectionsAction.LAST_CREATED) @@ -34,7 +34,7 @@ */ public SvtBiasConstant find(Date date) { for (SvtBiasConstant constant : this) { - if(date.after(constant.getStart()) && date.before(constant.getEnd())) { + if(date.getTime() >= constant.getStart() && date.getTime() <= constant.getEnd()) { return constant; } } @@ -44,22 +44,22 @@ /** - * The start date. + * The start date as a Unix timestamp in milliseconds (GMT). * - * @return the start date + * @return the start date as a Unix timestamp */ @Field(names = {"start"}) - public Date getStart() { + public Long getStart() { return getFieldValue("start"); } /** - * The end date. + * The end date as a Unix timestamp in milliseconds (GMT). * - * @return the end date + * @return the end date as a Unix timestamp */ @Field(names = {"end"}) - public Date getEnd() { + public Long getEnd() { return getFieldValue("end"); } Modified: java/branches/conditions-HPSJAVA-517/src/main/java/org/hps/conditions/svt/SvtBiasMyaDumpReader.java ============================================================================= --- java/branches/conditions-HPSJAVA-517/src/main/java/org/hps/conditions/svt/SvtBiasMyaDumpReader.java (original) +++ java/branches/conditions-HPSJAVA-517/src/main/java/org/hps/conditions/svt/SvtBiasMyaDumpReader.java Thu Aug 20 17:29:01 2015 @@ -34,13 +34,15 @@ } - private static final SimpleDateFormat DATE_FORMAT = new RunSpreadsheet.AnotherSimpleDateFormat("yyyy-MM-dd HH:mm:ss"); +// private static final SimpleDateFormat DATE_FORMAT = new RunSpreadsheet.AnotherSimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + private static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //private static final TimeZone timeZone = TimeZone.getTimeZone("EST"); public static final double BIASVALUEON = 178.0; private List<SvtBiasMyaEntry> myaEntries = new ArrayList<SvtBiasMyaEntry>(); private SvtBiasMyaRanges biasRanges = new SvtBiasMyaRanges(); public SvtBiasMyaDumpReader() { + DATE_FORMAT.setTimeZone(TimeZone.getTimeZone("America/New_York")); } public SvtBiasMyaRanges findOverlappingRanges(Date date_start, Date date_end) {