Author: [log in to unmask] Date: Fri Feb 12 14:24:26 2016 New Revision: 4217 Log: Changes to be able to setup and run readout and recon on the 2016 detector. Added: java/branches/layer0-branch/detector-model/src/main/java/org/hps/detector/svt/AbstractSvtDetectorSetup.java java/branches/layer0-branch/detector-model/src/main/java/org/hps/detector/svt/EngRun2015SvtDetectorSetup.java - copied, changed from r4136, java/branches/layer0-branch/detector-model/src/main/java/org/hps/detector/svt/SvtDetectorSetup.java java/branches/layer0-branch/detector-model/src/main/java/org/hps/detector/svt/Prop2016SvtDetectorSetup.java java/branches/layer0-branch/detector-model/src/main/java/org/hps/detector/svt/TestRunSvtDetectorSetup.java java/branches/layer0-branch/tracking/src/main/resources/org/hps/recon/tracking/strategies/HPS-Full-7-layers.xml Removed: java/branches/layer0-branch/detector-model/src/main/java/org/hps/detector/svt/SvtDetectorSetup.java Modified: java/branches/layer0-branch/conditions/src/main/java/org/hps/conditions/database/DatabaseConditionsManager.java java/branches/layer0-branch/conditions/src/main/java/org/hps/conditions/svt/SvtConditions.java java/branches/layer0-branch/detector-model/src/main/java/org/lcsim/detector/converter/compact/HPSTracker2014ConverterBase.java java/branches/layer0-branch/detector-model/src/main/java/org/lcsim/detector/converter/compact/HPSTracker2016Converter.java java/branches/layer0-branch/detector-model/src/main/java/org/lcsim/detector/tracker/silicon/HpsSiSensor.java java/branches/layer0-branch/detector-model/src/main/java/org/lcsim/geometry/compact/converter/HPSTrackerBuilder.java java/branches/layer0-branch/detector-model/src/test/java/org/hps/detector/svt/SvtDetectorSetupTest.java java/branches/layer0-branch/job/src/main/java/org/hps/job/JobManager.java java/branches/layer0-branch/logging/src/main/resources/org/hps/logging/config/logging.properties java/branches/layer0-branch/parent/pom.xml java/branches/layer0-branch/steering-files/src/main/resources/org/hps/steering/users/phansson/HPSTrackingDefaults.lcsim java/branches/layer0-branch/users/src/main/java/org/hps/users/phansson/TrackingReconstructionPlots.java Modified: java/branches/layer0-branch/conditions/src/main/java/org/hps/conditions/database/DatabaseConditionsManager.java ============================================================================= --- java/branches/layer0-branch/conditions/src/main/java/org/hps/conditions/database/DatabaseConditionsManager.java (original) +++ java/branches/layer0-branch/conditions/src/main/java/org/hps/conditions/database/DatabaseConditionsManager.java Fri Feb 12 14:24:26 2016 @@ -99,6 +99,13 @@ */ private static final int TEST_RUN_MAX_RUN = 1365; + + /** + * The max value for a run to be considered Eng Run 2015. + */ + private static final int ENG_RUN_2015_MAX_RUN = 9999; + + static { // Set default login timeout of 5 seconds. DriverManager.setLoginTimeout(30); @@ -110,15 +117,22 @@ * @return the static instance of the manager */ public static synchronized DatabaseConditionsManager getInstance() { + + LOGGER.info("getInstance called"); // Is there no manager installed yet? if (!ConditionsManager.isSetup() || !(ConditionsManager.defaultInstance() instanceof DatabaseConditionsManager)) { + LOGGER.info("setup cond manager"); + // Create a new instance if necessary, which will install it globally as the default. final DatabaseConditionsManager dbManager = new DatabaseConditionsManager(); // Register default conditions manager. ConditionsManager.setDefaultConditionsManager(dbManager); + + LOGGER.info("setup cond manager DONE"); + } // Get the instance back from the default conditions system and check that the type is correct now. @@ -140,6 +154,16 @@ public static boolean isTestRun(final int runNumber) { return runNumber > 0 && runNumber <= TEST_RUN_MAX_RUN; } + + /** + * Utility method to determine if a run number is from the Prop 2016. + * + * @param runNumber the run number + * @return <code>true</code> if run number is from the Prop 2016 + */ + public static boolean isProp2016Run(final int runNumber) { + return runNumber > ENG_RUN_2015_MAX_RUN; + } /** * Reset the global static instance of the conditions manager to a new object. @@ -234,6 +258,11 @@ * True if current run number is from Test Run. */ private boolean isTestRun = false; + + /** + * True if current run number is from Prop 2016. + */ + private boolean isProp2016Run = false; /** * Flag used to print connection parameters one time. @@ -687,6 +716,17 @@ if (isTestRun(runNumber)) { this.isTestRun = true; } + + + System.out.println("initializing with detector " + detectorName + " and run " + runNumber); + + if (isProp2016Run(runNumber)) { + System.out.println("prop2016 pelle YES"); + this.isProp2016Run = true; + } else { + System.out.println("prop2016 pelle NO"); + } + // Is not configured yet? if (!this.isConfigured) { @@ -713,8 +753,12 @@ // Call the super class's setDetector method to construct the detector object and activate conditions listeners. LOGGER.fine("activating default conditions manager"); + System.out.println("call super setDetector with detector " + detectorName + " run " + runNumber); + super.setDetector(detectorName, runNumber); + System.out.println("DONE call super setDetector with detector " + detectorName + " run " + runNumber); + // Should all conditions sets be cached? if (this.cacheAllConditions) { // Cache the conditions sets of all registered converters. @@ -737,6 +781,11 @@ this.isInitialized = true; + + if (isProp2016Run(runNumber)) { + System.out.println("prop2016 pelle YES2"); + + } LOGGER.info("conditions system initialized successfully"); } @@ -774,6 +823,15 @@ */ public boolean isTestRun() { return this.isTestRun; + } + + /** + * Return <code>true</code> if Test Run configuration is active + * + * @return <code>true</code> if Test Run configuration is active + */ + public boolean isProp2016Run() { + return this.isProp2016Run; } /** Modified: java/branches/layer0-branch/conditions/src/main/java/org/hps/conditions/svt/SvtConditions.java ============================================================================= --- java/branches/layer0-branch/conditions/src/main/java/org/hps/conditions/svt/SvtConditions.java (original) +++ java/branches/layer0-branch/conditions/src/main/java/org/hps/conditions/svt/SvtConditions.java Fri Feb 12 14:24:26 2016 @@ -2,9 +2,11 @@ import static org.hps.conditions.svt.AbstractSvtChannel.MAX_NUMBER_OF_SAMPLES; +import org.hps.conditions.svt.AbstractSvtDaqMapping.AbstractSvtDaqMappingCollection; import org.hps.conditions.svt.SvtChannel.SvtChannelCollection; import org.hps.conditions.svt.SvtDaqMapping.SvtDaqMappingCollection; import org.hps.conditions.svt.SvtT0Shift.SvtT0ShiftCollection; +import org.hps.conditions.svt.TestRunSvtDaqMapping.TestRunSvtDaqMappingCollection; /** * This class contains all test run SVT conditions data by readout channel. {@link SvtChannel} objects from the SVT Added: java/branches/layer0-branch/detector-model/src/main/java/org/hps/detector/svt/AbstractSvtDetectorSetup.java ============================================================================= --- java/branches/layer0-branch/detector-model/src/main/java/org/hps/detector/svt/AbstractSvtDetectorSetup.java (added) +++ java/branches/layer0-branch/detector-model/src/main/java/org/hps/detector/svt/AbstractSvtDetectorSetup.java Fri Feb 12 14:24:26 2016 @@ -0,0 +1,124 @@ +package org.hps.detector.svt; + +import java.util.logging.Level; +import java.util.logging.Logger; + +import org.hps.conditions.svt.AbstractSvtConditions; +import org.hps.conditions.svt.AbstractSvtDaqMapping; +import org.hps.conditions.svt.AbstractSvtDaqMapping.AbstractSvtDaqMappingCollection; +import org.hps.conditions.svt.SvtConditions; +import org.hps.util.Pair; +import org.lcsim.conditions.ConditionsEvent; +import org.lcsim.conditions.ConditionsListener; +import org.lcsim.detector.tracker.silicon.HpsSiSensor; +import org.lcsim.geometry.compact.Subdetector; +/** + * This class puts {@link SvtConditions} data onto <code>HpsSiSensor</code> objects. + * + * @author Jeremy McCormick, SLAC + * @author Omar Moreno, UCSC + * @author Per Hansson Adrian, SLAC + */ +public abstract class AbstractSvtDetectorSetup implements ConditionsListener { + + /** + * Initialize logger. + */ + protected static Logger LOGGER = Logger.getLogger(AbstractSvtDetectorSetup.class.getName()); + /** + * The number of noise samples. + */ + protected static final int NOISE_COUNT = 6; + /** + * The number of pedestals. + */ + protected static final int PEDESTAL_COUNT = 6; + /** + * Flag to enable/disable this class from within conditions manager. + */ + protected boolean enabled = true; + /** + * The name of the SVT subdetector in the detector model. + */ + protected String svtName = "Tracker"; + + /** + * Get a DAQ pair (FEB ID, FEB Hybrid ID) for the given {@link HpsSiSensor}. + * + * @param sensor + * a sensor of type {@link HpsSiSensor} + * @return the DAQ pair associated with the sensor + */ + abstract protected Pair<Integer, Integer> getDaqPair(AbstractSvtDaqMappingCollection<? extends AbstractSvtDaqMapping> daqMap, final HpsSiSensor sensor); + + + /** + * Hook that activates this class when conditions change (new detector or + * run number). + * + * @param event + * the conditions event + */ + abstract public void conditionsChanged(final ConditionsEvent event); + + /** + * Load conditions data onto a detector object. + * + * @param subdetector + * the SVT subdetector object + * @param conditions + * the conditions object + */ + abstract protected void loadDefault(final Subdetector subdetector, final AbstractSvtConditions conditions); + + + /** + * Set whether this class is enabled to be activated on conditions changes. + * + * @param enabled + * <code>true</code> to enable + */ + public void setEnabled(final boolean enabled) { + this.enabled = enabled; + } + + /** + * Set the log level. + * + * @param level + * the log level + */ + public void setLogLevel(final Level level) { + LOGGER.setLevel(level); + LOGGER.getHandlers()[0].setLevel(level); + } + + /** + * Set the name of the SVT in the detector model. + * + * @param svtName + * the name of the SVt in the detector model. + */ + public void setSvtName(final String svtName) { + this.svtName = svtName; + } + +/* + static Pair<Integer, Integer> getTestRunDaqPair(TestRunSvtDaqMappingCollection daqMap, final HpsSiSensor sensor) { + + final String svtHalf = sensor.isTopLayer() ? AbstractSvtDaqMapping.TOP_HALF : AbstractSvtDaqMapping.BOTTOM_HALF; + for (final TestRunSvtDaqMapping daqMapping : daqMap) { + + if (svtHalf.equals(daqMapping.getSvtHalf()) && daqMapping.getLayerNumber() == sensor.getLayerNumber()) { + + return new Pair<Integer, Integer>(daqMapping.getFpgaID(), daqMapping.getHybridID()); + } + } + return null; + } +*/ + public AbstractSvtDetectorSetup() { + super(); + } + +} Copied: java/branches/layer0-branch/detector-model/src/main/java/org/hps/detector/svt/EngRun2015SvtDetectorSetup.java (from r4136, java/branches/layer0-branch/detector-model/src/main/java/org/hps/detector/svt/SvtDetectorSetup.java) ============================================================================= --- java/branches/layer0-branch/detector-model/src/main/java/org/hps/detector/svt/SvtDetectorSetup.java (original) +++ java/branches/layer0-branch/detector-model/src/main/java/org/hps/detector/svt/EngRun2015SvtDetectorSetup.java Fri Feb 12 14:24:26 2016 @@ -2,31 +2,22 @@ import java.util.Collection; import java.util.List; -import java.util.logging.Level; -import java.util.logging.Logger; import org.hps.conditions.database.DatabaseConditionsManager; +import org.hps.conditions.svt.AbstractSvtConditions; import org.hps.conditions.svt.AbstractSvtDaqMapping; +import org.hps.conditions.svt.AbstractSvtDaqMapping.AbstractSvtDaqMappingCollection; import org.hps.conditions.svt.ChannelConstants; import org.hps.conditions.svt.SvtChannel; -import org.hps.conditions.svt.SvtDaqMapping; -import org.hps.conditions.svt.TestRunSvtDaqMapping; import org.hps.conditions.svt.SvtChannel.SvtChannelCollection; import org.hps.conditions.svt.SvtConditions; +import org.hps.conditions.svt.SvtDaqMapping; import org.hps.conditions.svt.SvtDaqMapping.SvtDaqMappingCollection; import org.hps.conditions.svt.SvtT0Shift; import org.hps.conditions.svt.SvtT0Shift.SvtT0ShiftCollection; -import org.hps.conditions.svt.TestRunSvtChannel; -import org.hps.conditions.svt.TestRunSvtChannel.TestRunSvtChannelCollection; -import org.hps.conditions.svt.TestRunSvtConditions; -import org.hps.conditions.svt.TestRunSvtDaqMapping.TestRunSvtDaqMappingCollection; -import org.hps.conditions.svt.TestRunSvtT0Shift; -import org.hps.conditions.svt.TestRunSvtT0Shift.TestRunSvtT0ShiftCollection; import org.hps.util.Pair; import org.lcsim.conditions.ConditionsEvent; -import org.lcsim.conditions.ConditionsListener; import org.lcsim.detector.tracker.silicon.HpsSiSensor; -import org.lcsim.detector.tracker.silicon.HpsTestRunSiSensor; import org.lcsim.geometry.compact.Subdetector; /** @@ -34,71 +25,48 @@ * * @author Jeremy McCormick, SLAC * @author Omar Moreno, UCSC + * @author Per Hansson Adrian, SLAC */ -public final class SvtDetectorSetup implements ConditionsListener { - - /** - * Initialize logger. - */ - private static Logger LOGGER = Logger.getLogger(SvtDetectorSetup.class.getPackage().getName()); - - /** - * The number of noise samples. - */ - private static final int NOISE_COUNT = 6; - - /** - * The number of pedestals. - */ - private static final int PEDESTAL_COUNT = 6; - - /** - * Flag to enable/disable this class from within conditions manager. - */ - private boolean enabled = true; - - /** - * The name of the SVT subdetector in the detector model. - */ - private String svtName = "Tracker"; +public class EngRun2015SvtDetectorSetup extends AbstractSvtDetectorSetup { /** * Constructor that uses the default detector name. */ - public SvtDetectorSetup() { + public EngRun2015SvtDetectorSetup() { } /** * Constructor that takes name of SVT. - * - * @param svtName the name of the SVT subdetector + * + * @param svtName + * the name of the SVT subdetector */ - public SvtDetectorSetup(final String svtName) { + public EngRun2015SvtDetectorSetup(final String svtName) { this.svtName = svtName; } - /** - * Hook that activates this class when conditions change (new detector or run number). - * - * @param event the conditions event + /* (non-Javadoc) + * @see org.hps.detector.svt.AbstractSvtDetectorSetup#conditionsChanged(org.lcsim.conditions.ConditionsEvent) */ @Override public void conditionsChanged(final ConditionsEvent event) { if (this.enabled) { final DatabaseConditionsManager manager = (DatabaseConditionsManager) event.getConditionsManager(); final Subdetector subdetector = manager.getDetectorObject().getSubdetector(this.svtName); + + if (manager.isTestRun()) + throw new RuntimeException( + "The conditions manager is Test run but we are settiung up the 2015 eng run SVT?!"); + if (subdetector != null) { - if (manager.isTestRun()) { - LOGGER.info("activating Test Run setup"); - final TestRunSvtConditions svtConditions = manager.getCachedConditions(TestRunSvtConditions.class, - "test_run_svt_conditions").getCachedData(); - this.loadTestRun(subdetector, svtConditions); - } else { - LOGGER.info("activating default setup"); - final SvtConditions svtConditions = manager.getCachedConditions(SvtConditions.class, - "svt_conditions").getCachedData(); - this.loadDefault(subdetector, svtConditions); - } + LOGGER.info("activating default setup"); + final SvtConditions svtConditions = manager.getCachedConditions(SvtConditions.class, "svt_conditions") + .getCachedData(); + if( !(svtConditions instanceof SvtConditions)) + throw new RuntimeException("The conditions are of the wrong type."); + else + LOGGER.info("svtConditions are correct instance."); + loadDefault(subdetector, svtConditions); } else { LOGGER.warning("no SVT detector was found so setup was NOT activated"); this.enabled = false; @@ -108,23 +76,24 @@ } } - /** - * Load conditions data onto a detector object. - * - * @param subdetector the SVT subdetector object - * @param conditions the conditions object - */ - void loadDefault(final Subdetector subdetector, final SvtConditions conditions) { - + @Override + protected void loadDefault(final Subdetector subdetector, final AbstractSvtConditions conditions) { + LOGGER.info("calling loaddefaut in EngRun2015SvtDetectorSetup"); + LOGGER.info("loading default SVT conditions onto subdetector " + subdetector.getName()); - + + if( !(conditions instanceof SvtConditions)) + throw new RuntimeException("The conditions are of the wrong type."); + + SvtConditions engRun2015Conditions = (SvtConditions) conditions; // Find sensor objects. final List<HpsSiSensor> sensors = subdetector.getDetectorElement().findDescendants(HpsSiSensor.class); LOGGER.info("setting up " + sensors.size() + " SVT sensors"); - final SvtChannelCollection channelMap = conditions.getChannelMap(); - LOGGER.info("channel map has " + conditions.getChannelMap().size() + " entries"); - final SvtDaqMappingCollection daqMap = conditions.getDaqMap(); - final SvtT0ShiftCollection t0Shifts = conditions.getT0Shifts(); + final SvtChannelCollection channelMap = engRun2015Conditions.getChannelMap(); + LOGGER.info("channel map has " + engRun2015Conditions.getChannelMap().size() + " entries"); + //final AbstractSvtDaqMappingCollection<? extends AbstractSvtDaqMapping> daqMap = engRun2015Conditions.getDaqMap(); + final SvtDaqMappingCollection daqMap = engRun2015Conditions.getDaqMap(); + final SvtT0ShiftCollection t0Shifts = engRun2015Conditions.getT0Shifts(); // Loop over sensors. for (final HpsSiSensor sensor : sensors) { @@ -159,7 +128,7 @@ for (final SvtChannel channel : channels) { // Get conditions data for this channel. - final ChannelConstants constants = conditions.getChannelConstants(channel); + final ChannelConstants constants = engRun2015Conditions.getChannelConstants(channel); final int channelNumber = channel.getChannel(); // @@ -199,158 +168,23 @@ } } - /** - * Load conditions from Test Run detector. - * - * @param subdetector the SVT subdetector object - * @param conditions the Test Run conditions - */ - void loadTestRun(final Subdetector subdetector, final TestRunSvtConditions conditions) { + @Override + protected Pair<Integer, Integer> getDaqPair(AbstractSvtDaqMappingCollection<? extends AbstractSvtDaqMapping> daqMap, final HpsSiSensor sensor) { + final String svtHalf = sensor.isTopLayer() ? AbstractSvtDaqMapping.TOP_HALF : AbstractSvtDaqMapping.BOTTOM_HALF; + for (final AbstractSvtDaqMapping abstractMapping : daqMap) { + + if(!(abstractMapping instanceof SvtDaqMapping)) + throw new RuntimeException("This abstract mapping has the wrong type."); + + SvtDaqMapping svtMapping = (SvtDaqMapping) abstractMapping; + if (svtHalf.equals(svtMapping.getSvtHalf()) && svtMapping.getLayerNumber() == sensor.getLayerNumber() + && svtMapping.getSide().equals(sensor.getSide())) { - LOGGER.info("loading Test Run SVT conditions onto subdetector " + subdetector.getName()); - - // Find sensor objects. - final List<HpsSiSensor> sensors = subdetector.getDetectorElement().findDescendants(HpsSiSensor.class); - LOGGER.info("setting up " + sensors.size() + " SVT sensors"); - final TestRunSvtChannelCollection channelMap = conditions.getChannelMap(); - LOGGER.info("channel map has " + channelMap.size() + " entries"); - final TestRunSvtDaqMappingCollection daqMap = conditions.getDaqMap(); - final TestRunSvtT0ShiftCollection t0Shifts = conditions.getT0Shifts(); - - // Loop over sensors. - for (final HpsSiSensor sensor : sensors) { - - // Reset possible existing conditions data on sensor. - sensor.reset(); - - // Get DAQ pair (FPGA ID, Hybrid ID) corresponding to this sensor - final Pair<Integer, Integer> daqPair = SvtDetectorSetup.getTestRunDaqPair(daqMap, sensor); - if (daqPair == null) { - throw new RuntimeException("Failed to find DAQ pair for sensor: " + sensor.getName()); - } - - // Set the FPGA ID of the sensor - ((HpsTestRunSiSensor) sensor).setFpgaID(daqPair.getFirstElement()); - - // Set the hybrid ID of the sensor - ((HpsTestRunSiSensor) sensor).setHybridID(daqPair.getSecondElement()); - - // Set the orientation of the sensor - final String orientation = daqMap.getOrientation(daqPair); - if (orientation != null && orientation.contentEquals(AbstractSvtDaqMapping.AXIAL)) { - sensor.setAxial(true); - } else if (orientation != null && orientation.contains(AbstractSvtDaqMapping.STEREO)) { - sensor.setStereo(true); - } - - // Find all the channels for this sensor. - final Collection<TestRunSvtChannel> channels = channelMap.find(daqPair); - - // Loop over the channels of the sensor. - for (final TestRunSvtChannel channel : channels) { - - // Get conditions data for this channel. - final ChannelConstants constants = conditions.getChannelConstants(channel); - final 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 - final double[] pedestal = new double[6]; - final double[] noise = new double[6]; - for (int sampleN = 0; sampleN < HpsSiSensor.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. - final TestRunSvtT0Shift sensorT0Shift = t0Shifts.getT0Shift(daqPair); - sensor.setT0Shift(sensorT0Shift.getT0Shift()); - } - } - - /** - * Set whether this class is enabled to be activated on conditions changes. - * - * @param enabled <code>true</code> to enable - */ - public void setEnabled(final boolean enabled) { - this.enabled = enabled; - } - - /** - * Set the log level. - * - * @param level the log level - */ - public void setLogLevel(final Level level) { - LOGGER.setLevel(level); - LOGGER.getHandlers()[0].setLevel(level); - } - - /** - * Set the name of the SVT in the detector model. - * - * @param svtName the name of the SVt in the detector model. - */ - public void setSvtName(final String svtName) { - this.svtName = svtName; - } - - /** - * Get a DAQ pair (FEB ID, FEB Hybrid ID) for the given {@link HpsSiSensor}. - * - * @param sensor a sensor of type {@link HpsSiSensor} - * @return the DAQ pair associated with the sensor - */ - static Pair<Integer, Integer> getDaqPair(SvtDaqMappingCollection daqMap, final HpsSiSensor sensor) { - - final String svtHalf = sensor.isTopLayer() ? AbstractSvtDaqMapping.TOP_HALF : AbstractSvtDaqMapping.BOTTOM_HALF; - for (final SvtDaqMapping object : daqMap) { - - if (svtHalf.equals(object.getSvtHalf()) && object.getLayerNumber() == sensor.getLayerNumber() - && object.getSide().equals(sensor.getSide())) { - - return new Pair<Integer, Integer>(object.getFebID(), object.getFebHybridID()); + return new Pair<Integer, Integer>(svtMapping.getFebID(), svtMapping.getFebHybridID()); } } return null; } - - /** - * Get a test run DAQ pair (FPGA and Hybrid ID) for the given {@linkplain HpsTestRunSiSensor}. - * - * @param sensor a sensor of type {@link HpsTestRunSiSensor} - * @return the DAQ pair associated with the sensor - */ - static Pair<Integer, Integer> getTestRunDaqPair(TestRunSvtDaqMappingCollection daqMap, final HpsSiSensor sensor) { - final String svtHalf = sensor.isTopLayer() ? AbstractSvtDaqMapping.TOP_HALF : AbstractSvtDaqMapping.BOTTOM_HALF; - for (final TestRunSvtDaqMapping daqMapping : daqMap) { - - if (svtHalf.equals(daqMapping.getSvtHalf()) && daqMapping.getLayerNumber() == sensor.getLayerNumber()) { - - return new Pair<Integer, Integer>(daqMapping.getFpgaID(), daqMapping.getHybridID()); - } - } - return null; - } } Added: java/branches/layer0-branch/detector-model/src/main/java/org/hps/detector/svt/Prop2016SvtDetectorSetup.java ============================================================================= --- java/branches/layer0-branch/detector-model/src/main/java/org/hps/detector/svt/Prop2016SvtDetectorSetup.java (added) +++ java/branches/layer0-branch/detector-model/src/main/java/org/hps/detector/svt/Prop2016SvtDetectorSetup.java Fri Feb 12 14:24:26 2016 @@ -0,0 +1,42 @@ +package org.hps.detector.svt; + +import org.hps.conditions.svt.AbstractSvtConditions; +import org.hps.conditions.svt.SvtConditions; +import org.lcsim.geometry.compact.Subdetector; + +/** + * This class puts {@link SvtConditions} data onto <code>HpsSiSensor</code> + * objects. + * + * @author Jeremy McCormick, SLAC + * @author Omar Moreno, UCSC + * @author Per Hansson Adrian, SLAC + */ +public final class Prop2016SvtDetectorSetup extends EngRun2015SvtDetectorSetup { + + /** + * Constructor that uses the default detector name. + */ + public Prop2016SvtDetectorSetup() { + super(); + } + + /** + * Constructor that takes name of SVT. + * + * @param svtName + * the name of the SVT subdetector + */ + public Prop2016SvtDetectorSetup(final String svtName) { + super(svtName); + } + + @Override + protected void loadDefault(Subdetector subdetector, AbstractSvtConditions conditions) { + LOGGER.info("calling loaddefaut in Prop2016SvtDetectorSetup"); + super.loadDefault(subdetector, conditions); + } + + + +} Added: java/branches/layer0-branch/detector-model/src/main/java/org/hps/detector/svt/TestRunSvtDetectorSetup.java ============================================================================= --- java/branches/layer0-branch/detector-model/src/main/java/org/hps/detector/svt/TestRunSvtDetectorSetup.java (added) +++ java/branches/layer0-branch/detector-model/src/main/java/org/hps/detector/svt/TestRunSvtDetectorSetup.java Fri Feb 12 14:24:26 2016 @@ -0,0 +1,195 @@ +package org.hps.detector.svt; + +import java.util.Collection; +import java.util.List; + +import org.hps.conditions.database.DatabaseConditionsManager; +import org.hps.conditions.svt.AbstractSvtConditions; +import org.hps.conditions.svt.AbstractSvtDaqMapping; +import org.hps.conditions.svt.AbstractSvtDaqMapping.AbstractSvtDaqMappingCollection; +import org.hps.conditions.svt.ChannelConstants; +import org.hps.conditions.svt.TestRunSvtChannel; +import org.hps.conditions.svt.TestRunSvtChannel.TestRunSvtChannelCollection; +import org.hps.conditions.svt.TestRunSvtConditions; +import org.hps.conditions.svt.TestRunSvtDaqMapping; +import org.hps.conditions.svt.TestRunSvtDaqMapping.TestRunSvtDaqMappingCollection; +import org.hps.conditions.svt.TestRunSvtT0Shift; +import org.hps.conditions.svt.TestRunSvtT0Shift.TestRunSvtT0ShiftCollection; +import org.hps.util.Pair; +import org.lcsim.conditions.ConditionsEvent; +import org.lcsim.detector.tracker.silicon.HpsSiSensor; +import org.lcsim.detector.tracker.silicon.HpsTestRunSiSensor; +import org.lcsim.geometry.compact.Subdetector; + +/** + * This class puts {@link TestRunSvtConditions} data onto <code>HpsSiSensor</code> objects. + * + * @author Jeremy McCormick, SLAC + * @author Omar Moreno, UCSC + * @author Per Hansson Adrian, SLAC + */ +public final class TestRunSvtDetectorSetup extends AbstractSvtDetectorSetup { + + /** + * Constructor that uses the default detector name. + */ + public TestRunSvtDetectorSetup() { + } + + /** + * Constructor that takes name of SVT. + * + * @param svtName the name of the SVT subdetector + */ + public TestRunSvtDetectorSetup(final String svtName) { + this.svtName = svtName; + } + + + +/* (non-Javadoc) + * @see org.hps.detector.svt.AbstractSvtDetectorSetup#conditionsChanged(org.lcsim.conditions.ConditionsEvent) + */ +@Override +public void conditionsChanged(final ConditionsEvent event) { + if (this.enabled) { + final DatabaseConditionsManager manager = (DatabaseConditionsManager) event.getConditionsManager(); + final Subdetector subdetector = manager.getDetectorObject().getSubdetector(this.svtName); + + if (!manager.isTestRun()) + throw new RuntimeException( + "The conditions manager is not Test run but we are settiung up test run SVT?!"); + + if (subdetector != null) { + LOGGER.info("activating Test Run setup"); + final TestRunSvtConditions svtConditions = manager.getCachedConditions(TestRunSvtConditions.class, + "test_run_svt_conditions").getCachedData(); + this.loadDefault(subdetector, svtConditions); + } else { + LOGGER.warning("no SVT detector was found so setup was NOT activated"); + this.enabled = false; + } + } else { + LOGGER.config("disabled"); + } +} + + + +protected void loadDefault(final Subdetector subdetector, final AbstractSvtConditions conditions) { + + LOGGER.info("loading Test Run SVT conditions onto subdetector " + subdetector.getName()); + + if( !(conditions instanceof TestRunSvtConditions)) + throw new RuntimeException("The conditions are of the wrong type."); + + TestRunSvtConditions testRunConditions = (TestRunSvtConditions) conditions; + + // Find sensor objects. + final List<HpsSiSensor> sensors = subdetector.getDetectorElement().findDescendants(HpsSiSensor.class); + LOGGER.info("setting up " + sensors.size() + " SVT sensors"); + final TestRunSvtChannelCollection channelMap = testRunConditions.getChannelMap(); + LOGGER.info("channel map has " + channelMap.size() + " entries"); + final TestRunSvtDaqMappingCollection daqMap = testRunConditions.getDaqMap(); + final TestRunSvtT0ShiftCollection t0Shifts = testRunConditions.getT0Shifts(); + + // Loop over sensors. + for (final HpsSiSensor sensor : sensors) { + + // Reset possible existing conditions data on sensor. + sensor.reset(); + + // Get DAQ pair (FPGA ID, Hybrid ID) corresponding to this sensor + final Pair<Integer, Integer> daqPair = getDaqPair(daqMap, sensor); + if (daqPair == null) { + throw new RuntimeException("Failed to find DAQ pair for sensor: " + sensor.getName()); + } + + // Set the FPGA ID of the sensor + ((HpsTestRunSiSensor) sensor).setFpgaID(daqPair.getFirstElement()); + + // Set the hybrid ID of the sensor + ((HpsTestRunSiSensor) sensor).setHybridID(daqPair.getSecondElement()); + + // Set the orientation of the sensor + final String orientation = daqMap.getOrientation(daqPair); + if (orientation != null && orientation.contentEquals(AbstractSvtDaqMapping.AXIAL)) { + sensor.setAxial(true); + } else if (orientation != null && orientation.contains(AbstractSvtDaqMapping.STEREO)) { + sensor.setStereo(true); + } + + // Find all the channels for this sensor. + final Collection<TestRunSvtChannel> channels = channelMap.find(daqPair); + + // Loop over the channels of the sensor. + for (final TestRunSvtChannel channel : channels) { + + // Get conditions data for this channel. + final ChannelConstants constants = testRunConditions.getChannelConstants(channel); + final 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 + final double[] pedestal = new double[6]; + final double[] noise = new double[6]; + for (int sampleN = 0; sampleN < HpsSiSensor.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. + final TestRunSvtT0Shift sensorT0Shift = t0Shifts.getT0Shift(daqPair); + sensor.setT0Shift(sensorT0Shift.getT0Shift()); + } +} + +/** + * Get a test run DAQ pair (FPGA and Hybrid ID) for the given + * {@linkplain HpsTestRunSiSensor}. + * + * @param sensor + * a sensor of type {@link HpsTestRunSiSensor} + * @return the DAQ pair associated with the sensor + */ +@Override +protected Pair<Integer, Integer> getDaqPair(AbstractSvtDaqMappingCollection<? extends AbstractSvtDaqMapping> daqMap, HpsSiSensor sensor) { + + final String svtHalf = sensor.isTopLayer() ? AbstractSvtDaqMapping.TOP_HALF : AbstractSvtDaqMapping.BOTTOM_HALF; + for (final AbstractSvtDaqMapping abstractMapping : daqMap) { + + if(!(abstractMapping instanceof TestRunSvtDaqMapping)) + throw new RuntimeException("This abstract mapping has the wrong type."); + + TestRunSvtDaqMapping daqMapping = (TestRunSvtDaqMapping) abstractMapping; + if (svtHalf.equals(daqMapping.getSvtHalf()) && daqMapping.getLayerNumber() == sensor.getLayerNumber()) { + return new Pair<Integer, Integer>(daqMapping.getFpgaID(), daqMapping.getHybridID()); + } + } + return null; + +} + + + + + +} Modified: java/branches/layer0-branch/detector-model/src/main/java/org/lcsim/detector/converter/compact/HPSTracker2014ConverterBase.java ============================================================================= --- java/branches/layer0-branch/detector-model/src/main/java/org/lcsim/detector/converter/compact/HPSTracker2014ConverterBase.java (original) +++ java/branches/layer0-branch/detector-model/src/main/java/org/lcsim/detector/converter/compact/HPSTracker2014ConverterBase.java Fri Feb 12 14:24:26 2016 @@ -36,7 +36,7 @@ */ public abstract class HPSTracker2014ConverterBase extends AbstractSubdetectorConverter { - protected boolean _debug = false; + protected boolean _debug = true; protected IMaterial trackingMaterial = null; protected static HPSTrackerJavaBuilder builder; @@ -352,7 +352,7 @@ if(_debug) { System.out.printf("%s: create HpsSiSensor with old layer id %d with sensorNumber %d name %s moduleDe %s sensorPath %s sensor Id %d \n", getClass().getSimpleName(), - layerDe.getIdentifier(),sensorNumber, sensorName, moduleDe.getName(), sensorPath, sensorNumber); + layerDe.getIdentifier().getValue(),sensorNumber, sensorName, moduleDe.getName(), sensorPath, sensorNumber); } //System.out.printf("%s: HpsSiSensor old layer id %d and module nr %d and sensor nr %d <-> DE name %s \n", getClass().getSimpleName(), // builder.getDetectorIdentifierHelper().getValue(layerDe.getIdentifier(), "layer"), ((SiTrackerModule) moduleDe).getModuleId(), sensorNumber,sensorName); Modified: java/branches/layer0-branch/detector-model/src/main/java/org/lcsim/detector/converter/compact/HPSTracker2016Converter.java ============================================================================= --- java/branches/layer0-branch/detector-model/src/main/java/org/lcsim/detector/converter/compact/HPSTracker2016Converter.java (original) +++ java/branches/layer0-branch/detector-model/src/main/java/org/lcsim/detector/converter/compact/HPSTracker2016Converter.java Fri Feb 12 14:24:26 2016 @@ -11,45 +11,52 @@ public HPSTracker2016Converter() { super(); } - - /* (non-Javadoc) - * @see org.lcsim.detector.converter.compact.HPSTracker2014ConverterBase#initializeBuilder(org.jdom.Element) + + /* + * (non-Javadoc) + * + * @see org.lcsim.detector.converter.compact.HPSTracker2014ConverterBase# + * initializeBuilder(org.jdom.Element) */ protected HPSTrackerJavaBuilder initializeBuilder(Element node) { - return new HPSTracker2016JavaBuilder(_debug, node); + return new HPSTracker2016JavaBuilder(_debug, node); } - /* (non-Javadoc) - * @see org.lcsim.detector.converter.compact.AbstractSubdetectorConverter#getSubdetectorType() + /* + * (non-Javadoc) + * + * @see org.lcsim.detector.converter.compact.AbstractSubdetectorConverter# + * getSubdetectorType() */ public Class getSubdetectorType() { return HPSTracker2016.class; } - /* - * Override this to handle different layer structure. - * (non-Javadoc) - * @see org.lcsim.detector.converter.compact.HPSTracker2014ConverterBase#getModuleNumber(org.lcsim.geometry.compact.converter.JavaSurveyVolume) + /* + * Override this to handle different layer structure. (non-Javadoc) + * + * @see org.lcsim.detector.converter.compact.HPSTracker2014ConverterBase# + * getModuleNumber(org.lcsim.geometry.compact.converter.JavaSurveyVolume) */ protected int getModuleNumber(String surveyVolume) { boolean isTopLayer = HPSTrackerBuilder.getHalfFromName(surveyVolume).equals("top") ? true : false; int layer = HPSTrackerBuilder.getLayerFromVolumeName(surveyVolume); int moduleNumber = -1; - if(isTopLayer) { - if(layer < 5 ) { + if (isTopLayer) { + if (layer < 5) { moduleNumber = 0; } else { - if(HPSTrackerBuilder.isHoleFromName(surveyVolume)) { + if (HPSTrackerBuilder.isHoleFromName(surveyVolume)) { moduleNumber = 0; } else { moduleNumber = 2; } } } else { - if(layer < 5 ) { + if (layer < 5) { moduleNumber = 1; } else { - if(HPSTrackerBuilder.isHoleFromName(surveyVolume)) { + if (HPSTrackerBuilder.isHoleFromName(surveyVolume)) { moduleNumber = 1; } else { moduleNumber = 3; @@ -57,11 +64,10 @@ } } - if(moduleNumber<0) throw new RuntimeException("Invalid module nr found for " + surveyVolume); + if (moduleNumber < 0) + throw new RuntimeException("Invalid module nr found for " + surveyVolume); - return moduleNumber; + return moduleNumber; } - - } Modified: java/branches/layer0-branch/detector-model/src/main/java/org/lcsim/detector/tracker/silicon/HpsSiSensor.java ============================================================================= --- java/branches/layer0-branch/detector-model/src/main/java/org/lcsim/detector/tracker/silicon/HpsSiSensor.java (original) +++ java/branches/layer0-branch/detector-model/src/main/java/org/lcsim/detector/tracker/silicon/HpsSiSensor.java Fri Feb 12 14:24:26 2016 @@ -20,6 +20,7 @@ import org.lcsim.detector.solids.Box; import org.lcsim.detector.solids.LineSegment3D; import org.lcsim.detector.solids.Polygon3D; +import org.lcsim.geometry.compact.converter.HPSTrackerBuilder; /** * This class extends {@link SiSensor} with conditions specific to HPS SVT half-modules (sensors) used during the @@ -559,4 +560,13 @@ return this.millepedeId; } + /** + * Get the layer nr from the detector element name. + * + * @return the layer name. + */ + public int getLayerNumberFromDetectorElement() { + return HPSTrackerBuilder.getLayerFromVolumeName(this.getName()); + } + } Modified: java/branches/layer0-branch/detector-model/src/main/java/org/lcsim/geometry/compact/converter/HPSTrackerBuilder.java ============================================================================= --- java/branches/layer0-branch/detector-model/src/main/java/org/lcsim/geometry/compact/converter/HPSTrackerBuilder.java (original) +++ java/branches/layer0-branch/detector-model/src/main/java/org/lcsim/geometry/compact/converter/HPSTrackerBuilder.java Fri Feb 12 14:24:26 2016 @@ -267,7 +267,7 @@ public static String getHalfFromName(String name) { boolean matchBottom = Pattern.matches(".*bottom.*", name); - boolean matchTop = Pattern.matches(".*bottom.*", name); + boolean matchTop = Pattern.matches(".*top.*", name); if(matchBottom && matchTop) throw new RuntimeException("found both halfs from name " + name); Modified: java/branches/layer0-branch/detector-model/src/test/java/org/hps/detector/svt/SvtDetectorSetupTest.java ============================================================================= --- java/branches/layer0-branch/detector-model/src/test/java/org/hps/detector/svt/SvtDetectorSetupTest.java (original) +++ java/branches/layer0-branch/detector-model/src/test/java/org/hps/detector/svt/SvtDetectorSetupTest.java Fri Feb 12 14:24:26 2016 @@ -62,7 +62,7 @@ public void test() throws Exception { final DatabaseConditionsManager conditionsManager = DatabaseConditionsManager.getInstance(); - conditionsManager.addConditionsListener(new SvtDetectorSetup()); + conditionsManager.addConditionsListener(new EngRun2015SvtDetectorSetup()); //conditionsManager.setDetector("HPS-Proposal2014-v7-2pt2", 0); conditionsManager.setDetector("HPS-EngRun2015-Nominal-v3", 5772); @@ -74,7 +74,7 @@ .getCachedData(); // Load the SVT conditions onto detector. - final SvtDetectorSetup loader = new SvtDetectorSetup("Tracker"); + final AbstractSvtDetectorSetup loader = new EngRun2015SvtDetectorSetup("Tracker"); loader.loadDefault(detector.getSubdetector(SVT_SUBDETECTOR_NAME), conditions); // Check sensor data. Modified: java/branches/layer0-branch/job/src/main/java/org/hps/job/JobManager.java ============================================================================= --- java/branches/layer0-branch/job/src/main/java/org/hps/job/JobManager.java (original) +++ java/branches/layer0-branch/job/src/main/java/org/hps/job/JobManager.java Fri Feb 12 14:24:26 2016 @@ -4,7 +4,9 @@ import org.hps.conditions.ConditionsDriver; import org.hps.conditions.database.DatabaseConditionsManager; -import org.hps.detector.svt.SvtDetectorSetup; +import org.hps.detector.svt.AbstractSvtDetectorSetup; +import org.hps.detector.svt.Prop2016SvtDetectorSetup; +import org.hps.detector.svt.TestRunSvtDetectorSetup; import org.lcsim.job.JobControlManager; import org.lcsim.util.Driver; @@ -41,7 +43,26 @@ public void setup(InputStream is) { // Add class that will setup SVT detector with conditions data (this is awkward but has to be done someplace). - DatabaseConditionsManager.getInstance().addConditionsListener(new SvtDetectorSetup()); + + AbstractSvtDetectorSetup svtDetectorSetup; + + System.out.println("using run " + DatabaseConditionsManager.getInstance().getRun() + " pelle"); + + if( DatabaseConditionsManager.getInstance().isTestRun() ) { + System.out.println("test run pelle"); + svtDetectorSetup = new TestRunSvtDetectorSetup(); + } + else if(DatabaseConditionsManager.getInstance().isProp2016Run()) { + System.out.println("2016 pelle"); + svtDetectorSetup = new Prop2016SvtDetectorSetup(); + } + else { + System.out.println("2015 pelle"); + //svtDetectorSetup = new EngRun2015SvtDetectorSetup(); + svtDetectorSetup = new Prop2016SvtDetectorSetup(); + } + + DatabaseConditionsManager.getInstance().addConditionsListener(svtDetectorSetup); super.setup(is); Modified: java/branches/layer0-branch/logging/src/main/resources/org/hps/logging/config/logging.properties ============================================================================= --- java/branches/layer0-branch/logging/src/main/resources/org/hps/logging/config/logging.properties (original) +++ java/branches/layer0-branch/logging/src/main/resources/org/hps/logging/config/logging.properties Fri Feb 12 14:24:26 2016 @@ -24,10 +24,10 @@ # conditions org.hps.conditions.api.level = WARNING -org.hps.conditions.database.level = CONFIG +org.hps.conditions.database.level = FINEST org.hps.conditions.cli.level = CONFIG org.hps.conditions.ecal.level = WARNING -org.hps.conditions.svt.level = WARNING +org.hps.conditions.svt.level = FINEST # monitoring-drivers org.hps.monitoring.drivers.svt.level = INFO Modified: java/branches/layer0-branch/parent/pom.xml ============================================================================= --- java/branches/layer0-branch/parent/pom.xml (original) +++ java/branches/layer0-branch/parent/pom.xml Fri Feb 12 14:24:26 2016 @@ -12,7 +12,7 @@ <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <org.lcsim.cacheDir>${user.home}</org.lcsim.cacheDir> - <lcsimVersion>3.1.7-SNAPSHOT</lcsimVersion> + <lcsimVersion>3.2-SNAPSHOT</lcsimVersion> <skipSite>false</skipSite> <skipPlugin>false</skipPlugin> </properties> Modified: java/branches/layer0-branch/steering-files/src/main/resources/org/hps/steering/users/phansson/HPSTrackingDefaults.lcsim ============================================================================= --- java/branches/layer0-branch/steering-files/src/main/resources/org/hps/steering/users/phansson/HPSTrackingDefaults.lcsim (original) +++ java/branches/layer0-branch/steering-files/src/main/resources/org/hps/steering/users/phansson/HPSTrackingDefaults.lcsim Fri Feb 12 14:24:26 2016 @@ -20,7 +20,8 @@ <driver name="ConditionsDriver" type="org.hps.conditions.ConditionsDriver"> <detectorName>${detector}</detectorName> - <runNumber>${run}</runNumber> + <runNumber>10000</runNumber> + <!--<runNumber>${run}</runNumber>--> <freeze>true</freeze> </driver> <driver name="EventMarkerDriver" type="org.lcsim.job.EventMarkerDriver"> @@ -38,7 +39,7 @@ <driver name="TrackerReconDriver" type="org.hps.recon.tracking.TrackerReconDriver"> <debug>false</debug> <!--<strategyResource>HPS-Full-All.xml</strategyResource>--> - <strategyResource>HPS-Full.xml</strategyResource> + <strategyResource>HPS-Full-7-layers.xml</strategyResource> </driver> <driver name="GBLOutputDriver" type="org.hps.recon.tracking.gbl.GBLOutputDriver"> <debug>0</debug> Added: java/branches/layer0-branch/tracking/src/main/resources/org/hps/recon/tracking/strategies/HPS-Full-7-layers.xml ============================================================================= --- java/branches/layer0-branch/tracking/src/main/resources/org/hps/recon/tracking/strategies/HPS-Full-7-layers.xml (added) +++ java/branches/layer0-branch/tracking/src/main/resources/org/hps/recon/tracking/strategies/HPS-Full-7-layers.xml Fri Feb 12 14:24:26 2016 @@ -0,0 +1,31 @@ +<?xml version="1.0" encoding="UTF-8"?> +<StrategyList xmlns:xs="http://www.w3.org/2001/XMLSchema-instance" xs:noNamespaceSchemaLocation="http://lcsim.org/recon/tracking/seedtracker/strategybuilder/strategies.xsd"> + <TargetDetector>HPS-Full-7-Layer</TargetDetector> + <Strategy name="HelicalTrackHit Strategy"> + + <!--Cutoffs--> + + <MinPT>0.100</MinPT> + <MinHits>7</MinHits> + <MinConfirm>1</MinConfirm> + + <MaxDCA>4.0</MaxDCA> + <MaxZ0>4.0</MaxZ0> + + <MaxChisq>100.0</MaxChisq> + <BadHitChisq>10.0</BadHitChisq> + + <!--Layers--> + + <Layers> + <Layer type="Seed" layer_number="5" detector_name="Tracker" be_flag="BARREL" /> + <Layer type="Seed" layer_number="3" detector_name="Tracker" be_flag="BARREL" /> + <Layer type="Seed" layer_number="1" detector_name="Tracker" be_flag="BARREL" /> + <Layer type="Confirm" layer_number="7" detector_name="Tracker" be_flag="BARREL" /> + <Layer type="Extend" layer_number="9" detector_name="Tracker" be_flag="BARREL" /> + <Layer type="Extend" layer_number="11" detector_name="Tracker" be_flag="BARREL" /> + <Layer type="Extend" layer_number="13" detector_name="Tracker" be_flag="BARREL" /> + </Layers> + </Strategy> +</StrategyList> + Modified: java/branches/layer0-branch/users/src/main/java/org/hps/users/phansson/TrackingReconstructionPlots.java ============================================================================= --- java/branches/layer0-branch/users/src/main/java/org/hps/users/phansson/TrackingReconstructionPlots.java (original) +++ java/branches/layer0-branch/users/src/main/java/org/hps/users/phansson/TrackingReconstructionPlots.java Fri Feb 12 14:24:26 2016 @@ -114,6 +114,7 @@ private double _bfield; private static Logger LOGGER = Logger.getLogger(TrackingReconstructionPlots.class.getName()); private List<HpsSiSensor> sensors = new ArrayList<HpsSiSensor>(); + private int nLayers = 7; @Override protected void detectorChanged(Detector detector) { @@ -212,11 +213,9 @@ } - - List<HelicalTrackHit> hthList = event.get(HelicalTrackHit.class, helicalTrackHitCollectionName); - int[] layersTop = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; - int[] layersBot = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; + Map<Integer, Integer> layersTop = new HashMap<Integer,Integer>(); + Map<Integer, Integer> layersBot = new HashMap<Integer,Integer>(); Map<HpsSiSensor, Integer> stripHitsFromStereoHits = new HashMap<HpsSiSensor, Integer>(); for (HelicalTrackHit hth : hthList) { HelicalTrackCross htc = (HelicalTrackCross) hth; @@ -229,20 +228,35 @@ stripHitsFromStereoHits.put(stripsensor, 0); } } - if(sensor.isTopLayer()){ - layersTop[htc.Layer() - 1]++; - } else { - layersBot[htc.Layer() - 1]++; - } - } + int l = sensor.getLayerNumberFromDetectorElement(); + int n = 0; + if(sensor.isTopLayer()) { + if (layersTop.containsKey(l) ) + n = layersTop.get(l); + else + layersTop.put(l,n+1); + } + else { + if (layersBot.containsKey(l) ) + n = layersTop.get(l); + else + layersTop.put(l,n+1); + } + } + + for(Map.Entry<HpsSiSensor,Integer> sensor : stripHitsFromStereoHits.entrySet()) { aida.histogram1D(sensor.getKey().getName() + " strip hits from stereo").fill(sensor.getValue()); } - for (int i = 0; i < 12; i++) { - aida.profile1D("Number of Stereo Hits per layer in Top Half").fill(i + 1, layersTop[i]); - aida.profile1D("Number of Stereo Hits per layer in Bottom Half").fill(i + 1, layersBot[i]); - } + for (Map.Entry<Integer,Integer> e : layersTop.entrySet()) + aida.profile1D("Number of Stereo Hits per layer in Top Half").fill(e.getKey(), e.getValue()); + + for (Map.Entry<Integer,Integer> e : layersBot.entrySet()) + aida.profile1D("Number of Stereo Hits per layer in Bottom Half").fill(e.getKey(), e.getValue()); + + + if (!event.hasCollection(Track.class, trackCollectionName)) { // System.out.println(trackCollectionName + " does not exist; skipping event"); aida.histogram1D("Number Tracks/Event").fill(0); @@ -388,7 +402,8 @@ HelicalTrackCross htcross = (HelicalTrackCross) htc; double sHit = helicalTrackFit.PathMap().get(htc); Hep3Vector posonhelix = HelixUtils.PointOnHelix(helicalTrackFit, sHit); - boolean isTopLayer = false; + int layer = ((HpsSiSensor) ((RawTrackerHit) htcross.getStrips().get(0).rawhits().get(0)).getDetectorElement()).getLayerNumberFromDetectorElement(); + boolean isTopLayer = !((HpsSiSensor) ((RawTrackerHit) htcross.getStrips().get(0).rawhits().get(0)).getDetectorElement()).isBottomLayer(); @@ -424,68 +439,25 @@ } - + double yTr = posonhelix.y(); double zTr = posonhelix.z(); - int layer = htc.Layer(); - String modNum = "Layer X "; - if (layer == 1) { - modNum = "Layer 1 "; - } - if (layer == 3) { - modNum = "Layer 2 "; - } - if (layer == 5) { - modNum = "Layer 3 "; - } - if (layer == 7) { - modNum = "Layer 4 "; - } - if (layer == 9) { - modNum = "Layer 5 "; - } - if (layer == 11) { - modNum = "Layer 6 "; - } - //SymmetricMatrix cov = htc.getCorrectedCovMatrix(); - - aida.histogram1D(modNum + "Residual X(mm)").fill(htcross.getCorrectedPosition().y() - yTr);//these hits should be rotated track hits already - aida.histogram1D(modNum + "Residual Y(mm)").fill(htcross.getCorrectedPosition().z() - zTr);//these hits should be rotated track hits already - if (hit.getPosition()[2] > 0) { - aida.histogram1D(modNum + "Residual X(mm) Top").fill(htcross.getCorrectedPosition().y() - yTr);//these hits should be rotated track hits already - aida.histogram1D(modNum + "Residual Y(mm) Top").fill(htcross.getCorrectedPosition().z() - zTr);//these hits should be rotated track hits already - - } - if (hit.getPosition()[2] < 0) { - aida.histogram1D(modNum + "Residual X(mm) Bottom").fill(htcross.getCorrectedPosition().y() - yTr);//these hits should be rotated track hits already - aida.histogram1D(modNum + "Residual Y(mm) Bottom").fill(htcross.getCorrectedPosition().z() - zTr);//these hits should be rotated track hits already - - } - double x = htcross.getCorrectedPosition().y(); - double y = htcross.getCorrectedPosition().z(); - if(isTopLayer) { - layersTop[htc.Layer() - 1]++; - Hep3Vector sensorPos = ((SiSensor) ((RawTrackerHit) htc.getRawHits().get(0)).getDetectorElement()).getGeometry().getPosition(); - if (htc.Layer() == 1) { -// System.out.println(sensorPos.toString()); -// System.out.println("Hit X = " + x + "; Hit Y = " + y); - aida.histogram2D("Layer 1 HTH Position: Top").fill(x - sensorPos.x(), y - sensorPos.y()); - } - if (htc.Layer() == 7) { - aida.histogram2D("Layer 7 HTH Position: Top").fill(x - sensorPos.x(), y - sensorPos.y()); - } + String modNum = "Layer " + String.valueOf(layer) + " "; + + aida.histogram1D(modNum + "Residual X(mm)").fill(htcross.getCorrectedPosition().y() - yTr); + aida.histogram1D(modNum + "Residual Y(mm)").fill(htcross.getCorrectedPosition().z() - zTr); + + if (isTopLayer) { + aida.histogram1D(modNum + "Residual X(mm) Top").fill(htcross.getCorrectedPosition().y() - yTr); + aida.histogram1D(modNum + "Residual Y(mm) Top").fill(htcross.getCorrectedPosition().z() - zTr); + } else { - layersBot[htc.Layer() - 1]++; - Hep3Vector sensorPos = ((SiSensor) ((RawTrackerHit) htc.getRawHits().get(0)).getDetectorElement()).getGeometry().getPosition(); - if (htc.Layer() == 1) { - aida.histogram2D("Layer 1 HTH Position: Bottom").fill(x - sensorPos.x(), y - sensorPos.y()); - } - if (htc.Layer() == 7) { - aida.histogram2D("Layer 7 HTH Position: Bottom").fill(x - sensorPos.x(), y - sensorPos.y()); - } - } + aida.histogram1D(modNum + "Residual X(mm) Bottom").fill(htcross.getCorrectedPosition().y() - yTr); + aida.histogram1D(modNum + "Residual Y(mm) Bottom").fill(htcross.getCorrectedPosition().z() - zTr); + } + boolean doAmplitudePlots = true; if(doAmplitudePlots) { @@ -534,9 +506,9 @@ } } - for(Map.Entry<HpsSiSensor,Integer> sensor : stripHitsOnTrack.entrySet()) { + for(Map.Entry<HpsSiSensor,Integer> sensor : stripHitsOnTrack.entrySet()) aida.histogram1D(sensor.getKey().getName() + " strip hits iso on track").fill(stripHitsIsoOnTrack.get(sensor.getKey())); - } + Cluster clust = null; @@ -1111,41 +1083,58 @@ style3.dataStyle().errorBarStyle().setVisible(false); plotter3.createRegions(6, 2); - - - IHistogram1D mod1ResX = aida.histogram1D("Layer 1 Residual X(mm)", 25, -1, 1); - IHistogram1D mod1ResY = aida.histogram1D("Layer 1 Residual Y(mm)", 25, -0.04, 0.04); - - IHistogram1D mod2ResX = aida.histogram1D("Layer 2 Residual X(mm)", 25, -2, 2); - IHistogram1D mod2ResY = aida.histogram1D("Layer 2 Residual Y(mm)", 25, -1, 1); - - IHistogram1D mod3ResX = aida.histogram1D("Layer 3 Residual X(mm)", 25, -2.5, 2.5); - IHistogram1D mod3ResY = aida.histogram1D("Layer 3 Residual Y(mm)", 25, -1.5, 1.5); - - IHistogram1D mod4ResX = aida.histogram1D("Layer 4 Residual X(mm)", 25, -3.0, 3.0); - IHistogram1D mod4ResY = aida.histogram1D("Layer 4 Residual Y(mm)", 25, -2, 2); - - IHistogram1D mod5ResX = aida.histogram1D("Layer 5 Residual X(mm)", 25, -4, 4); - IHistogram1D mod5ResY = aida.histogram1D("Layer 5 Residual Y(mm)", 25, -3, 3); - - IHistogram1D mod6ResX = aida.histogram1D("Layer 6 Residual X(mm)", 25, -5, 5); - IHistogram1D mod6ResY = aida.histogram1D("Layer 6 Residual Y(mm)", 25, -3, 3); - - plotter3.region(0).plot(mod1ResX); - plotter3.region(2).plot(mod2ResX); - plotter3.region(4).plot(mod3ResX); - plotter3.region(6).plot(mod4ResX); - plotter3.region(8).plot(mod5ResX); - plotter3.region(10).plot(mod6ResX); - - plotter3.region(1).plot(mod1ResY); - plotter3.region(3).plot(mod2ResY); - plotter3.region(5).plot(mod3ResY); - plotter3.region(7).plot(mod4ResY); - plotter3.region(9).plot(mod5ResY); - plotter3.region(11).plot(mod6ResY); - - if(showPlots) plotter3.show(); + plotter3_1 = fac.createPlotterFactory().create("HPS Residual Plots (Single hit per layer)"); + plotter3_1.setTitle("Residuals (Top)"); + //plotterFrame.addPlotter(plotter3_1); + IPlotterStyle style3_1 = plotter3_1.style(); + style3_1.dataStyle().fillStyle().setColor("yellow"); + style3_1.dataStyle().errorBarStyle().setVisible(false); + plotter3_1.createRegions(6, 2); + + plotter3_2 = fac.createPlotterFactory().create("HPS Residual Plots (Single strip cluster per layer)"); + plotter3_2.setTitle("Residuals (Bottom)"); + //plotterFrame.addPlotter(plotter3_2); + IPlotterStyle style3_2 = plotter3_2.style(); + style3_2.dataStyle().fillStyle().setColor("yellow"); + style3_2.dataStyle().errorBarStyle().setVisible(false); + plotter3_2.createRegions(6, 2); + + + + for(int l=0; l < nLayers; ++l) { + for(int h=0; h <3;++h) { + String half; + if (h==0) half = ""; + else if (h==1) half = " Top"; + else half = " Bottom"; + String name = "Layer " + String.valueOf(l+1) + " Residual X(mm)" + half; + IHistogram1D mod1ResX = aida.histogram1D(name, 25, -1, 1); + name = "Layer " + String.valueOf(l+1) + " Residual Y(mm)" + half; + IHistogram1D mod1ResY = aida.histogram1D(name, 25, -1, 1); + + if(l>5) { + LOGGER.warning("cannot make plots for layer " + String.valueOf(l + 1)); + continue; + } + if (h==0) { + plotter3.region(l*2).plot(mod1ResX); + plotter3.region(l*2 + 1).plot(mod1ResY); + } + else if (h==0) { + plotter3_1.region(l*2).plot(mod1ResX); + plotter3_1.region(l*2 + 1).plot(mod1ResY); + } + else { + plotter3_2.region(l*2).plot(mod1ResX); + plotter3_2.region(l*2 + 1).plot(mod1ResY); + } + } + } + if(showPlots) { + plotter3.show(); + plotter3_1.show(); + plotter3_2.show(); + } @@ -1157,116 +1146,28 @@ style3_11.dataStyle().errorBarStyle().setVisible(false); plotter3_11.createRegions(6, 6); int i=0; + double[] limits = {1.,1.5,3.,4.,5.,5.,5.0}; for(HpsSiSensor sensor : sensors) { double min = 0.0; double max = 0.0; - if(sensor.getName().contains("L1")) { - min=-0.04; max=0.04; - } else if(sensor.getName().contains("L2")) { - min=-1; max=1; - } else if(sensor.getName().contains("L3")) { - min=-1.5; max=1.5; - } else if(sensor.getName().contains("L4")) { - min=-3; max=3; - } else if(sensor.getName().contains("L5")) { - min=-4; max=4; - } else if(sensor.getName().contains("L6")) { - min=-5; max=5; - } else { - throw new RuntimeException("Invalid sensor name: " + sensor.getName()); - } - IHistogram1D resX = aida.histogram1D(sensor.getName() + " strip residual (mm)", 50, min, max); + int l = sensor.getLayerNumberFromDetectorElement(); + max = limits[l-1]; + min = -1.0*limits[l-1]; + IHistogram1D resX = aida.histogram1D(sensor.getName() + " strip residual (mm)", 50, min, max); + if(l>6) { + LOGGER.warning("cannot make plots for this sensor " + sensor.getName()); + continue; + } plotter3_11.region(i).plot(resX); i++; } if(showPlots) plotter3_11.show(); - - plotter3_1 = fac.createPlotterFactory().create("HPS Residual Plots (Single hit per layer)"); - plotter3_1.setTitle("Residuals (Top)"); - //plotterFrame.addPlotter(plotter3_1); - IPlotterStyle style3_1 = plotter3_1.style(); - style3_1.dataStyle().fillStyle().setColor("yellow"); - style3_1.dataStyle().errorBarStyle().setVisible(false); - plotter3_1.createRegions(6, 2); - - IHistogram1D mod1ResX_Top = aida.histogram1D("Layer 1 Residual X(mm) Top", 25, -1, 1); - IHistogram1D mod1ResY_Top = aida.histogram1D("Layer 1 Residual Y(mm) Top", 25, -0.04, 0.04); - - IHistogram1D mod2ResX_Top = aida.histogram1D("Layer 2 Residual X(mm) Top", 25, -2, 2); - IHistogram1D mod2ResY_Top = aida.histogram1D("Layer 2 Residual Y(mm) Top", 25, -1, 1); - - IHistogram1D mod3ResX_Top = aida.histogram1D("Layer 3 Residual X(mm) Top", 25, -2.5, 2.5); - IHistogram1D mod3ResY_Top = aida.histogram1D("Layer 3 Residual Y(mm) Top", 25, -1.5, 1.5); - - IHistogram1D mod4ResX_Top = aida.histogram1D("Layer 4 Residual X(mm) Top", 25, -3.0, 3.0); - IHistogram1D mod4ResY_Top = aida.histogram1D("Layer 4 Residual Y(mm) Top", 25, -2, 2); - - IHistogram1D mod5ResX_Top = aida.histogram1D("Layer 5 Residual X(mm) Top", 25, -4, 4); - IHistogram1D mod5ResY_Top = aida.histogram1D("Layer 5 Residual Y(mm) Top", 25, -3, 3); - - IHistogram1D mod6ResX_Top = aida.histogram1D("Layer 6 Residual X(mm) Top", 25, -5, 5); - IHistogram1D mod6ResY_Top = aida.histogram1D("Layer 6 Residual Y(mm) Top", 25, -3, 3); - - - plotter3_1.region(0).plot(mod1ResX_Top); - plotter3_1.region(2).plot(mod2ResX_Top); - plotter3_1.region(4).plot(mod3ResX_Top); - plotter3_1.region(6).plot(mod4ResX_Top); - plotter3_1.region(8).plot(mod5ResX_Top); - plotter3_1.region(10).plot(mod6ResX_Top); - - plotter3_1.region(1).plot(mod1ResY_Top); - plotter3_1.region(3).plot(mod2ResY_Top); - plotter3_1.region(5).plot(mod3ResY_Top); - plotter3_1.region(7).plot(mod4ResY_Top); - plotter3_1.region(9).plot(mod5ResY_Top); - plotter3_1.region(11).plot(mod6ResY_Top); - - if(showPlots) plotter3_1.show(); - - plotter3_2 = fac.createPlotterFactory().create("HPS Residual Plots (Single strip cluster per layer)"); - plotter3_2.setTitle("Residuals (Bottom)"); - //plotterFrame.addPlotter(plotter3_2); - IPlotterStyle style3_2 = plotter3_2.style(); - style3_2.dataStyle().fillStyle().setColor("yellow"); - style3_2.dataStyle().errorBarStyle().setVisible(false); - plotter3_2.createRegions(6, 2); - - IHistogram1D mod1ResX_Bottom = aida.histogram1D("Layer 1 Residual X(mm) Bottom", 25, -1, 1); - IHistogram1D mod1ResY_Bottom = aida.histogram1D("Layer 1 Residual Y(mm) Bottom", 25, -0.04, 0.04); - - IHistogram1D mod2ResX_Bottom = aida.histogram1D("Layer 2 Residual X(mm) Bottom", 25, -2, 2); - IHistogram1D mod2ResY_Bottom = aida.histogram1D("Layer 2 Residual Y(mm) Bottom", 25, -1, 1); - - IHistogram1D mod3ResX_Bottom = aida.histogram1D("Layer 3 Residual X(mm) Bottom", 25, -2.5, 2.5); - IHistogram1D mod3ResY_Bottom = aida.histogram1D("Layer 3 Residual Y(mm) Bottom", 25, -1.5, 1.5); - - IHistogram1D mod4ResX_Bottom = aida.histogram1D("Layer 4 Residual X(mm) Bottom", 25, -3.0, 3.0); - IHistogram1D mod4ResY_Bottom = aida.histogram1D("Layer 4 Residual Y(mm) Bottom", 25, -2, 2); - - IHistogram1D mod5ResX_Bottom = aida.histogram1D("Layer 5 Residual X(mm) Bottom", 25, -4, 4); - IHistogram1D mod5ResY_Bottom = aida.histogram1D("Layer 5 Residual Y(mm) Bottom", 25, -3, 3); - - IHistogram1D mod6ResX_Bottom = aida.histogram1D("Layer 6 Residual X(mm) Bottom", 25, -5, 5); - IHistogram1D mod6ResY_Bottom = aida.histogram1D("Layer 6 Residual Y(mm) Bottom", 25, -3, 3); - - plotter3_2.region(0).plot(mod1ResX_Bottom); - plotter3_2.region(2).plot(mod2ResX_Bottom); - plotter3_2.region(4).plot(mod3ResX_Bottom); - plotter3_2.region(6).plot(mod4ResX_Bottom); - plotter3_2.region(8).plot(mod5ResX_Bottom); - plotter3_2.region(10).plot(mod6ResX_Bottom); - - plotter3_2.region(1).plot(mod1ResY_Bottom); - plotter3_2.region(3).plot(mod2ResY_Bottom); - plotter3_2.region(5).plot(mod3ResY_Bottom); - plotter3_2.region(7).plot(mod4ResY_Bottom); - plotter3_2.region(9).plot(mod5ResY_Bottom); - plotter3_2.region(11).plot(mod6ResY_Bottom); - - if(showPlots) plotter3_2.show(); + + + + plotter4 = fac.createPlotterFactory().create("HPS Track and ECal Plots"); plotter4.setTitle("Track and ECal Correlations"); @@ -1495,8 +1396,8 @@ style55.dataStyle().markerStyle().setSize(20); plotter55.createRegions(1, 2); - IProfile avgLayersTopPlot = aida.profile1D("Number of Stereo Hits per layer in Top Half", 13, 0, 13); - IProfile avgLayersBottomPlot = aida.profile1D("Number of Stereo Hits per layer in Bottom Half", 13, 0, 13); + IProfile avgLayersTopPlot = aida.profile1D("Number of Stereo Hits per layer in Top Half", 10, 0, 10); + IProfile avgLayersBottomPlot = aida.profile1D("Number of Stereo Hits per layer in Bottom Half", 10, 0, 10); plotter55.region(0).plot(avgLayersTopPlot); plotter55.region(1).plot(avgLayersBottomPlot); @@ -1566,7 +1467,12 @@ plotter8.createRegions(6, 6); i=0; for(SiSensor sensor : sensors) { + IHistogram1D resX = aida.histogram1D(sensor.getName() + " strip hits from stereo", 10, 0, 10); + if(sensor.getName().contains("L7")) { + LOGGER.warning("cannot setup this plot. Fix."); + continue; + } plotter8.region(i).plot(resX); i++; } @@ -1580,7 +1486,12 @@ plotter88.createRegions(6, 6); i=0; for(SiSensor sensor : sensors) { + IHistogram1D resX = aida.histogram1D(sensor.getName() + " strip hits", 10, 0, 10); + if(sensor.getName().contains("L7")) { + LOGGER.warning("cannot setup this plot. Fix."); + continue; + } plotter88.region(i).plot(resX); i++; } @@ -1598,7 +1509,12 @@ plotter888.createRegions(6, 6); i=0; for(SiSensor sensor : sensors) { + IHistogram1D resX = aida.histogram1D(sensor.getName() + " strip hits iso", 50, 0, 5); + if(sensor.getName().contains("L7")) { + LOGGER.warning("cannot setup this plot. Fix."); + continue; + } plotter888.region(i).plot(resX); i++; } @@ -1612,7 +1528,12 @@ plotter8888.createRegions(6, 6); i=0; for(SiSensor sensor : sensors) { + IHistogram1D resX = aida.histogram1D(sensor.getName() + " strip hits iso on track", 50, 0, 5); + if(sensor.getName().contains("L7")) { + LOGGER.warning("cannot setup this plot. Fix."); + continue; + } plotter8888.region(i).plot(resX); i++; }