Print

Print


Author: omoreno
Date: Mon Oct 27 11:57:19 2014
New Revision: 1318

Log:
Add a class to encapsulate all test run SVT conditions along with a test run SVT conditions converter.  Also add a class describing a test run SVT sensor channel.

Added:
    java/branches/hps_java_trunk_HPSJAVA-255/conditions/src/main/java/org/hps/conditions/svt/TestRunSvtChannel.java   (with props)
    java/branches/hps_java_trunk_HPSJAVA-255/conditions/src/main/java/org/hps/conditions/svt/TestRunSvtConditions.java   (with props)
    java/branches/hps_java_trunk_HPSJAVA-255/conditions/src/main/java/org/hps/conditions/svt/TestRunSvtConditionsConverter.java   (with props)

Added: java/branches/hps_java_trunk_HPSJAVA-255/conditions/src/main/java/org/hps/conditions/svt/TestRunSvtChannel.java
 =============================================================================
--- java/branches/hps_java_trunk_HPSJAVA-255/conditions/src/main/java/org/hps/conditions/svt/TestRunSvtChannel.java	(added)
+++ java/branches/hps_java_trunk_HPSJAVA-255/conditions/src/main/java/org/hps/conditions/svt/TestRunSvtChannel.java	Mon Oct 27 11:57:19 2014
@@ -0,0 +1,74 @@
+package org.hps.conditions.svt;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+import org.hps.util.Pair;
+
+public final class TestRunSvtChannel extends AbstractSvtChannel {
+
+    public static class TestRunSvtChannelCollection 
+        extends AbstractSvtChannel.AbstractSvtChannelCollection<TestRunSvtChannel> {
+
+        @Override
+        public Collection<TestRunSvtChannel> find(Pair<Integer, Integer> pair) {
+            List<TestRunSvtChannel> channels = new ArrayList<TestRunSvtChannel>();
+            int fpga = pair.getFirstElement();
+            int hybrid = pair.getSecondElement();
+            for(TestRunSvtChannel channel : this.getObjects()){
+                if(channel.getFpgaID() == fpga && channel.getHybridID() == hybrid){
+                    channels.add(channel);
+                }
+            }
+            return channels;
+        }
+    }
+    
+    /**
+     * Get the FPGA ID.
+     * 
+     * @return The FPGA ID
+     */
+    public int getFpgaID(){
+        return getFieldValue("fpga");
+    }
+   
+    /**
+     * Get the hybrid ID.
+     * 
+     * @return The hybrid ID.
+     */
+    public int getHybridID(){
+        return getFieldValue("hybrid");
+    }
+
+    /**
+     * Convert this object to a human readable string.
+     * @return This object as a string.
+     */
+    public String toString() {
+        return "channel_id: " + getChannelID() +
+               ", fpga: " + getFpgaID() + 
+               ", hybrid: " + getHybridID() +
+               ", channel: " + getChannel();
+    }
+    
+    /**
+     * Implementation of equals.
+     * @return True if the object equals this one; false if not.
+     */
+    public boolean equals(Object o) {
+        if (o == null)
+            return false;
+        if (!(o instanceof TestRunSvtChannel))
+            return false;
+        if (o == this)
+            return true;
+        TestRunSvtChannel channel = (TestRunSvtChannel) o;
+        return getChannelID() == channel.getChannelID() 
+                && getFpgaID() == channel.getFpgaID() 
+                && getHybridID() == channel.getHybridID() 
+                && getChannel() == channel.getChannel();
+    }
+}

Added: java/branches/hps_java_trunk_HPSJAVA-255/conditions/src/main/java/org/hps/conditions/svt/TestRunSvtConditions.java
 =============================================================================
--- java/branches/hps_java_trunk_HPSJAVA-255/conditions/src/main/java/org/hps/conditions/svt/TestRunSvtConditions.java	(added)
+++ java/branches/hps_java_trunk_HPSJAVA-255/conditions/src/main/java/org/hps/conditions/svt/TestRunSvtConditions.java	Mon Oct 27 11:57:19 2014
@@ -0,0 +1,168 @@
+package org.hps.conditions.svt;
+
+import org.hps.conditions.svt.TestRunSvtChannel.TestRunSvtChannelCollection;
+import org.hps.conditions.svt.TestRunSvtDaqMapping.TestRunSvtDaqMappingCollection;
+
+// TODO: Move all constants to their own class
+import static org.hps.conditions.svt.SvtChannel.MAX_NUMBER_OF_SAMPLES;
+
+/**
+ * This class contains all test run SVT conditions data by readout channel. {@link SvtChannel}
+ * objects from the {@linkSvtChannelMap} should be used to lookup the conditions using the
+ * {@link #getChannelConstants(SvtChannel)} method.
+ * 
+ * @author Jeremy McCormick <[log in to unmask]>
+ * @author Omar Moreno <[log in to unmask]>
+ */
+public class TestRunSvtConditions extends AbstractSvtConditions {
+
+    protected TestRunSvtDaqMappingCollection daqMap = null;
+    
+	/**
+     * Get the {@link TestRunSvtDaqMappingCollection} associated with these conditions.
+     * 
+     * @return The SVT DAQ map.
+     */
+    @Override
+    public TestRunSvtDaqMappingCollection getDaqMap() {
+        return daqMap;
+    }
+
+    @Override
+    public TestRunSvtChannelCollection getChannelMap() {
+        return (TestRunSvtChannelCollection) channelMap;
+    }
+
+    /**
+     * Set the {@link TestRunSvtDaqMappingCollection} associated with these conditions.
+     * 
+     * @param daqMap The SVT DAQ map.
+	 * @return 
+     */
+    public void setDaqMap(TestRunSvtDaqMappingCollection daqMap) {
+        this.daqMap = daqMap;
+    }
+    
+    /**
+     * Set the channel map of type {@link TestRunSvtChannelCollection}.
+     * 
+     *  @param channelMap The SVT channel map.
+     */
+    public void setChannelMap(TestRunSvtChannelCollection channelMap){
+    	this.channelMap = channelMap;
+    }
+
+    /**
+     * Convert this object to a human readable string. This method prints a formatted
+     * table of channel data independently of how its member objects implement their
+     * string conversion method. For now, it does not print the time shifts by sensor as
+     * all other information is by channel.
+     * 
+     * @return This object converted to a string, without the DAQ map.
+     * TODO: Make this look more human readable.  At the moment, reading this
+     * 		 requires a huge terminal window.
+     */
+    public String toString() {
+        StringBuffer buff = new StringBuffer();
+
+        buff.append('\n');
+        buff.append("Printing SVTConditions ...");
+        buff.append('\n');
+        buff.append('\n');
+
+        // Table header:
+        buff.append("Channel ID");
+        buff.append("     ");
+        buff.append("FPGA ID");
+        buff.append("  ");
+        buff.append("Hybrid ID");
+        buff.append("   ");
+        buff.append("Channel");
+        buff.append("  ");
+        buff.append("Pedestal sample 0");
+        buff.append("     ");
+        buff.append("Pedestal sample 1");
+        buff.append("     ");
+        buff.append("Pedestal sample 2");
+        buff.append("     ");
+        buff.append("Pedestal sample 3");
+        buff.append("     ");
+        buff.append("Pedestal sample 4");
+        buff.append("     ");
+        buff.append("Pedestal sample 5");
+        buff.append("     ");
+        buff.append("Noise sample 0");
+        buff.append("     ");
+        buff.append("Noise sample 1");
+        buff.append("     ");
+        buff.append("Noise sample 2");
+        buff.append("     ");
+        buff.append("Noise sample 3");
+        buff.append("     ");
+        buff.append("Noise sample 4");
+        buff.append("     ");
+        buff.append("Noise sample 5");
+        buff.append("     ");
+        buff.append("Gain");
+        buff.append("   ");
+        buff.append("Offset");
+        buff.append("    ");
+        buff.append("Amplitude");
+        buff.append("  ");
+        buff.append("t0");
+        buff.append("       ");
+        buff.append("tp");
+        buff.append("    ");
+        buff.append("Bad Channels");
+        buff.append('\n');
+        for (int i = 0; i < 115; i++) {
+            buff.append("-");
+        }
+        buff.append('\n');
+        // Loop over channels.
+        for (TestRunSvtChannel channel : this.getChannelMap().getObjects()) {
+
+            System.out.println("Channel: " + channel.toString());
+            
+            // Get the conditions for the channel.
+            ChannelConstants constants = getChannelConstants(channel);
+            SvtGain gain = constants.getGain();
+            SvtShapeFitParameters shapeFit = constants.getShapeFitParameters();
+            SvtCalibration calibration = constants.getCalibration();
+
+            // Channel data.
+            buff.append(String.format("%-6d %-5d %-8d %-8d ", channel.getChannelID(), channel.getFpgaID(), channel.getHybridID(), channel.getChannel()));
+
+            // Calibration.
+            for(int sample = 0; sample < MAX_NUMBER_OF_SAMPLES; sample++){
+            	buff.append(calibration.getPedestal(sample));
+            	buff.append("      ");
+            }
+            for(int sample = 0; sample < MAX_NUMBER_OF_SAMPLES; sample++){
+            	buff.append(calibration.getNoise(sample));
+            	buff.append("      ");
+            }
+
+            // Gain.
+            buff.append(String.format("%-6.4f %-9.4f ", gain.getGain(), gain.getOffset()));
+
+            // Pulse shape.
+            buff.append(String.format("%-10.4f %-8.4f %-8.4f", shapeFit.getAmplitude(), shapeFit.getT0(), shapeFit.getTp()));
+
+            // Bad channel.
+            buff.append(constants.isBadChannel());
+
+            buff.append('\n');
+        }
+
+        buff.append('\n');
+        buff.append("Printing SVT DAQ Map...");
+        buff.append('\n');
+        buff.append('\n');
+        buff.append(getDaqMap());
+
+        return buff.toString();
+    }
+
+
+}

Added: java/branches/hps_java_trunk_HPSJAVA-255/conditions/src/main/java/org/hps/conditions/svt/TestRunSvtConditionsConverter.java
 =============================================================================
--- java/branches/hps_java_trunk_HPSJAVA-255/conditions/src/main/java/org/hps/conditions/svt/TestRunSvtConditionsConverter.java	(added)
+++ java/branches/hps_java_trunk_HPSJAVA-255/conditions/src/main/java/org/hps/conditions/svt/TestRunSvtConditionsConverter.java	Mon Oct 27 11:57:19 2014
@@ -0,0 +1,52 @@
+package org.hps.conditions.svt;
+
+import org.lcsim.conditions.ConditionsManager;
+import org.hps.conditions.DatabaseConditionsManager;
+import org.hps.conditions.svt.TestRunSvtChannel.TestRunSvtChannelCollection;
+import org.hps.conditions.svt.TestRunSvtDaqMapping.TestRunSvtDaqMappingCollection;
+
+public final class TestRunSvtConditionsConverter extends AbstractSvtConditionsConverter<TestRunSvtConditions> {
+
+   
+    public TestRunSvtConditionsConverter(){
+        this.conditions = new TestRunSvtConditions(); 
+    }
+
+    /**
+     * Create and return an {@link TestRunSvtConditions} object
+     * 
+     * @param manager The current conditions manager.
+     * @param name The conditions key, which is ignored for now.
+     */
+    @Override
+    public TestRunSvtConditions getData(ConditionsManager manager, String name){
+        
+        DatabaseConditionsManager dbConditionsManager = (DatabaseConditionsManager) manager;
+       
+    	// Get the channel map from the conditions database
+        TestRunSvtChannelCollection channels = this.getCollection(TestRunSvtChannelCollection.class, dbConditionsManager);
+
+        //System.out.println("Test run channels: " + channels.toString());
+        
+        // Create the SVT conditions object to use to encapsulate SVT condition collections
+        conditions.setChannelMap(channels);
+        
+        // Get the DAQ map from the conditions database
+        TestRunSvtDaqMappingCollection daqMap = this.getCollection(TestRunSvtDaqMappingCollection.class, dbConditionsManager);
+        conditions.setDaqMap(daqMap);
+        
+        conditions = super.getData(manager, name);
+
+        return conditions;
+    }
+   
+   
+    /**
+     * Get the type handled by this converter.
+     * @return The type handled by this converter.
+     */
+	@Override
+	public Class<TestRunSvtConditions> getType() {
+		return TestRunSvtConditions.class;
+	}
+}