Print

Print


Author: [log in to unmask]
Date: Wed Oct 29 12:17:43 2014
New Revision: 1334

Log:
Class used to load the database conditions onto HpsTestRunSiSensors.

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

Added: java/branches/hps_java_trunk_HPSJAVA-255/conditions/src/main/java/org/hps/conditions/svt/TestRunSvtDetectorSetup.java
 =============================================================================
--- java/branches/hps_java_trunk_HPSJAVA-255/conditions/src/main/java/org/hps/conditions/svt/TestRunSvtDetectorSetup.java	(added)
+++ java/branches/hps_java_trunk_HPSJAVA-255/conditions/src/main/java/org/hps/conditions/svt/TestRunSvtDetectorSetup.java	Wed Oct 29 12:17:43 2014
@@ -0,0 +1,112 @@
+package org.hps.conditions.svt;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.lcsim.geometry.compact.Subdetector;
+import org.lcsim.detector.tracker.silicon.HpsSiSensor;
+import org.lcsim.detector.tracker.silicon.HpsTestRunSiSensor;
+
+import org.hps.conditions.svt.SvtT0Shift.SvtT0ShiftCollection;
+import org.hps.conditions.svt.TestRunSvtChannel.TestRunSvtChannelCollection;
+import org.hps.conditions.svt.TestRunSvtDaqMapping.TestRunSvtDaqMappingCollection;
+import org.hps.util.Pair;
+
+/**
+ * This class puts {@link TestRunSvtConditions} data onto 
+ * <code>HpsTestRunSiSensor</code> objects.
+ *
+ * @author Omar Moreno <[log in to unmask]>
+ */
+public class TestRunSvtDetectorSetup {
+
+    /**
+     * Load conditions data onto a detector object.
+     * 
+     * @param  The detector object.
+     * @param conditions The conditions object.
+     */
+	public void load(Subdetector subdetector, TestRunSvtConditions conditions){
+	
+        // Find sensor objects.
+    	List<HpsSiSensor> sensors = subdetector.getDetectorElement().findDescendants(HpsSiSensor.class);
+        System.out.println("Total sensors found: " + sensors.size());
+    	
+    	TestRunSvtChannelCollection channelMap = conditions.getChannelMap();
+        TestRunSvtDaqMappingCollection daqMap = conditions.getDaqMap();
+        SvtT0ShiftCollection t0Shifts = conditions.getT0Shifts();
+		
+        // Loop over sensors.
+        for(HpsSiSensor sensor : sensors){
+        	
+        	HpsTestRunSiSensor testRunSensor = (HpsTestRunSiSensor) sensor; 
+        	
+            // Reset possible existing conditions data on sensor.
+            sensor.reset();
+        
+            // Get DAQ pair (FPGA ID, Hybrid ID) corresponding to this sensor
+            Pair<Integer, Integer> daqPair = daqMap.getDaqPair(sensor);
+            if (daqPair == null) {
+                throw new RuntimeException("Failed to find DAQ pair for sensor: " + sensor.getName());
+            }
+           
+            // Set the FPGA ID of the sensor
+            testRunSensor.setFpgaID(daqPair.getFirstElement());
+        
+            // Set the hybrid ID of the sensor
+            testRunSensor.setHybridID(daqPair.getSecondElement());
+            
+            // Set the orientation of the sensor
+            String orientation = daqMap.getOrientation(daqPair);
+            if(orientation != null && orientation.contentEquals(TestRunSvtDaqMappingCollection.AXIAL)){
+            	sensor.setAxial(true);
+            } else if(orientation != null && orientation.contains(TestRunSvtDaqMappingCollection.STEREO)){
+            	sensor.setStereo(true);
+            }
+        
+            // Find all the channels for this sensor.
+            Collection<TestRunSvtChannel> channels = channelMap.find(daqPair);
+       
+            
+            // Loop over the channels of the sensor.
+            for (TestRunSvtChannel channel : channels) {
+            
+            	// Get conditions data for this channel.
+                ChannelConstants constants = conditions.getChannelConstants(channel);
+                int channelNumber = channel.getChannel();
+            
+            
+                //
+                // Set conditions data for this channel on the sensor object:
+                //
+                
+                // Check if the channel was flagged as bad
+                if (constants.isBadChannel()) {
+                    sensor.setBadChannel(channelNumber);
+                }
+                
+                // Set the pedestal and noise of each of the samples for the 
+                // channel
+                double[] pedestal = new double[6];
+                double[] noise = new double[6];
+                for(int sampleN = 0; sampleN < HpsTestRunSiSensor.NUMBER_OF_SAMPLES; sampleN++){
+                	pedestal[sampleN] = constants.getCalibration().getPedestal(sampleN);
+                	noise[sampleN] = constants.getCalibration().getNoise(sampleN);
+                }
+                sensor.setPedestal(channelNumber, pedestal);
+                sensor.setNoise(channelNumber, noise);
+               
+                // Set the gain and offset for the channel
+                sensor.setGain(channelNumber, constants.getGain().getGain());
+                sensor.setOffset(channelNumber, constants.getGain().getOffset());
+               
+                // Set the shape fit parameters
+                sensor.setShapeFitParameters(channelNumber, constants.getShapeFitParameters().toArray());
+            }
+            
+            // Set the t0 shift for the sensor.
+            SvtT0Shift sensorT0Shift = t0Shifts.find(daqPair).get(0);
+            sensor.setT0Shift(sensorT0Shift.getT0Shift());
+        }
+	}
+}