Author: [log in to unmask] Date: Thu Oct 23 00:44:35 2014 New Revision: 1277 Log: Abstract class providing some of the common functionality used in creating an SVT conditions object. Modified: java/branches/hps_java_trunk_HPSJAVA-255/conditions/src/main/java/org/hps/conditions/svt/AbstractSvtConditionsConverter.java Modified: java/branches/hps_java_trunk_HPSJAVA-255/conditions/src/main/java/org/hps/conditions/svt/AbstractSvtConditionsConverter.java ============================================================================= --- java/branches/hps_java_trunk_HPSJAVA-255/conditions/src/main/java/org/hps/conditions/svt/AbstractSvtConditionsConverter.java (original) +++ java/branches/hps_java_trunk_HPSJAVA-255/conditions/src/main/java/org/hps/conditions/svt/AbstractSvtConditionsConverter.java Thu Oct 23 00:44:35 2014 @@ -12,9 +12,12 @@ import org.lcsim.conditions.ConditionsManager; import org.hps.conditions.DatabaseConditionsManager; import org.hps.conditions.TableMetaData; +import org.hps.conditions.svt.SvtBadChannel.SvtBadChannelCollection; import org.hps.conditions.svt.SvtCalibration.SvtCalibrationCollection; import org.hps.conditions.svt.SvtChannel.SvtChannelCollection; +import org.hps.conditions.svt.SvtGain.SvtGainCollection; import org.hps.conditions.svt.SvtShapeFitParameters.SvtShapeFitParametersCollection; +import org.hps.conditions.svt.SvtT0Shift.SvtT0ShiftCollection; /** @@ -25,15 +28,64 @@ * * @param <T> SVT conditions object type */ -public abstract class AbstractSvtConditionsConverter<T> implements ConditionsConverter<T> { +public abstract class AbstractSvtConditionsConverter<T extends AbstractSvtConditions> implements ConditionsConverter<T> { private TableMetaData metaData = null; private String tableName = null; + + protected T conditions; - public abstract T getData(ConditionsManager manager, String name); + /** + * Create and return the SVT conditions object. + * @param manager The current conditions manager. + * @param name The conditions key, which is ignored for now. + */ + public T getData(ConditionsManager manager, String name){ + + DatabaseConditionsManager dbConditionsManager = (DatabaseConditionsManager) manager; + + SvtChannelCollection channels = this.getSvtChannelMap(dbConditionsManager); + + // Create the SVT conditions object to use to encapsulate SVT condition collections + conditions.setChannelMap(channels); + + SvtCalibrationCollection calibrations = this.getCalibrations(dbConditionsManager); + for (SvtCalibration calibration : calibrations.getObjects()) { + SvtChannel channel = conditions.getChannelMap().findChannel(calibration.getChannelID()); + conditions.getChannelConstants(channel).setCalibration(calibration); + } + + SvtShapeFitParametersCollection shapeFitParametersCollection = this.getShapeFitParameters(dbConditionsManager); + for (SvtShapeFitParameters shapeFitParameters : shapeFitParametersCollection.getObjects()) { + SvtChannel channel = conditions.getChannelMap().findChannel(shapeFitParameters.getChannelID()); + conditions.getChannelConstants(channel).setShapeFitParameters(shapeFitParameters); + } + try { + + SvtBadChannelCollection badChannels = this.getBadChannels(dbConditionsManager); + for (SvtBadChannel badChannel : badChannels.getObjects()) { + SvtChannel channel = conditions.getChannelMap().findChannel(badChannel.getChannelId()); + conditions.getChannelConstants(channel).setBadChannel(true); + } + } catch (RuntimeException e) { + System.out.println("[ " + conditions.getClass().getSimpleName() + "]: A set of bad channels were not found!"); + } + + SvtGainCollection channelGains = this.getChannelGains(dbConditionsManager); + for (SvtGain channelGain : channelGains.getObjects()) { + int channelId = channelGain.getChannelID(); + SvtChannel channel = conditions.getChannelMap().findChannel(channelId); + conditions.getChannelConstants(channel).setGain(channelGain); + } + + SvtT0ShiftCollection t0Shifts = this.getT0Shits(dbConditionsManager); + conditions.setTimeShifts(t0Shifts); + + return conditions; + } - private SvtChannelCollection getSvtChannelMap(DatabaseConditionsManager dbConditionsManager){ + protected SvtChannelCollection getSvtChannelMap(DatabaseConditionsManager dbConditionsManager){ // Get the table name containing the SVT channel map from the // database configuration. If it doesn't exist, use the default value. @@ -50,7 +102,7 @@ return channels; } - private SvtCalibrationCollection getCalibrations(DatabaseConditionsManager dbConditionsManager){ + protected SvtCalibrationCollection getCalibrations(DatabaseConditionsManager dbConditionsManager){ // Get the table name containing the SVT calibrations (baseline, noise) // from the database configuration. If it doesn't exist, use the @@ -67,7 +119,7 @@ return calibrations; } - private SvtShapeFitParametersCollection getShapeFitParameters(DatabaseConditionsManager dbConditionsManager){ + protected SvtShapeFitParametersCollection getShapeFitParameters(DatabaseConditionsManager dbConditionsManager){ // Get the table name containing the SVT pulse shape parameters from // the database configuration. If it doesn't exist, use the default value. metaData = dbConditionsManager.findTableMetaData(SvtShapeFitParametersCollection.class); @@ -81,4 +133,56 @@ return shapeFitParametersCollection; } + + // FIXME: This should be changed to catch a conditions record not found exception instead of + // a runtime exception. + protected SvtBadChannelCollection getBadChannels(DatabaseConditionsManager dbConditionsManager) + throws RuntimeException { + // Get the table name containing the SVT bad channel map from the + // database configuration. If it doesn't exist, use the default value. + metaData = dbConditionsManager.findTableMetaData(SvtBadChannelCollection.class); + if(metaData != null){ + tableName = metaData.getTableName(); + } else { + tableName = SVT_BAD_CHANNELS; + } + + // Add bad channels. + SvtBadChannelCollection badChannels = dbConditionsManager.getCachedConditions(SvtBadChannelCollection.class, tableName).getCachedData(); + + return badChannels; + } + + protected SvtGainCollection getChannelGains(DatabaseConditionsManager dbConditionsManager){ + + // Get the table name containing the SVT gains from the database + // configuration. If it doesn't exist, use the default value. + metaData = dbConditionsManager.findTableMetaData(SvtGainCollection.class); + if(metaData != null){ + tableName = metaData.getTableName(); + } else { + tableName = SVT_GAINS; + } + + // Add gains by channel. + SvtGainCollection gains = dbConditionsManager.getCachedConditions(SvtGainCollection.class, tableName).getCachedData(); + + return gains; + } + + protected SvtT0ShiftCollection getT0Shits(DatabaseConditionsManager dbConditionsManager){ + + // Get the table name containing the SVT t0 shifts. If it doesn't + // exist, use the default value. + metaData = dbConditionsManager.findTableMetaData(SvtT0ShiftCollection.class); + if(metaData != null){ + tableName = metaData.getTableName(); + } else { + tableName = SVT_TIME_SHIFTS; + } + // Set the t0 shifts by sensor. + SvtT0ShiftCollection t0Shifts = dbConditionsManager.getCachedConditions(SvtT0ShiftCollection.class, tableName).getCachedData(); + + return t0Shifts; + } }