Author: [log in to unmask] Date: Mon Jun 8 12:51:57 2015 New Revision: 3113 Log: add mode 1 threshold cut, rename constant Modified: java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/FADCEcalReadoutDriver.java java/trunk/evio/src/main/java/org/hps/evio/EcalEvioReader.java java/trunk/evio/src/main/java/org/hps/evio/EcalHitWriter.java java/trunk/evio/src/main/java/org/hps/evio/EventConstants.java java/trunk/evio/src/main/java/org/hps/evio/TestRunTriggeredReconToEvio.java java/trunk/evio/src/main/java/org/hps/evio/TestRunTriggeredReconToLcio.java Modified: java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/FADCEcalReadoutDriver.java ============================================================================= --- java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/FADCEcalReadoutDriver.java (original) +++ java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/FADCEcalReadoutDriver.java Mon Jun 8 12:51:57 2015 @@ -42,7 +42,7 @@ public class FADCEcalReadoutDriver extends EcalReadoutDriver<RawCalorimeterHit> { // Repeated here from EventConstants in evio module to avoid depending on it. - private static final int ECAL_WINDOW_MODE = 1; + private static final int ECAL_RAW_MODE = 1; private static final int ECAL_PULSE_MODE = 2; private static final int ECAL_PULSE_INTEGRAL_MODE = 3; private String ecalName = "Ecal"; @@ -92,16 +92,16 @@ private double fixedGain = -1; private boolean constantTriggerWindow = true; private boolean addNoise = false; - + // 32.8 p.e./MeV = New detector in 2014 // 2 p.e./MeV = Test Run detector private double pePerMeV = 32.8; //photoelectrons per MeV, used to calculate noise - + //switch between test run and 2014 definitions of gain constants // true = ONLY simulation studies in 2014 // false = Test Run data/simulations and 2014+ Detector's real data private boolean use2014Gain = false; - + //switch between three pulse shape functions private PulseShape pulseShape = PulseShape.ThreePole; @@ -208,7 +208,7 @@ public void setMode(int mode) { this.mode = mode; - if (mode != ECAL_WINDOW_MODE && mode != ECAL_PULSE_MODE && mode != ECAL_PULSE_INTEGRAL_MODE) { + if (mode != ECAL_RAW_MODE && mode != ECAL_PULSE_MODE && mode != ECAL_PULSE_INTEGRAL_MODE) { throw new IllegalArgumentException("invalid mode " + mode); } } @@ -239,7 +239,7 @@ FADCPipeline pipeline = pipelineMap.get(cellID); pipeline.step(); - + // Get the channel data. EcalChannelConstants channelData = findChannel(cellID); @@ -325,9 +325,9 @@ @Override protected void processTrigger(EventHeader event) { switch (mode) { - case ECAL_WINDOW_MODE: + case ECAL_RAW_MODE: if (debug) { - System.out.println("Reading out ECal in window mode"); + System.out.println("Reading out ECal in raw mode"); } event.put(ecalReadoutCollectionName, readWindow(), RawTrackerHit.class, 0, ecalReadoutName); break; @@ -371,7 +371,17 @@ List<RawTrackerHit> hits = new ArrayList<RawTrackerHit>(); for (Long cellID : pipelineMap.keySet()) { short[] adcValues = getWindow(cellID); - hits.add(new BaseRawTrackerHit(cellID, 0, adcValues)); + EcalChannelConstants channelData = findChannel(cellID); + boolean isAboveThreshold = false; + for (int i = 0; i < adcValues.length; i++) { + if (adcValues[i] > channelData.getCalibration().getPedestal() + readoutThreshold) { + isAboveThreshold = true; + break; + } + } + if (isAboveThreshold) { + hits.add(new BaseRawTrackerHit(cellID, 0, adcValues)); + } } return hits; } @@ -385,12 +395,15 @@ int pointerOffset = 0; int numSamplesToRead = 0; int thresholdCrossing = 0; - + // Get the channel data. EcalChannelConstants channelData = findChannel(cellID); - + for (int i = 0; i < readoutWindow; i++) { if (numSamplesToRead != 0) { + if (adcValues == null) { + throw new RuntimeException("expected a pulse buffer, none found (this should never happen)"); + } adcValues[adcValues.length - numSamplesToRead] = window[i - pointerOffset]; numSamplesToRead--; if (numSamplesToRead == 0) { @@ -416,10 +429,10 @@ int pointerOffset = 0; int numSamplesToRead = 0; int thresholdCrossing = 0; - + // Get the channel data. EcalChannelConstants channelData = findChannel(cellID); - + if (window != null) { for (int i = 0; i < readoutWindow; i++) { if (numSamplesToRead != 0) { @@ -455,11 +468,11 @@ //add preamp noise and photoelectron Poisson noise in quadrature double noise; if (use2014Gain) { - noise = Math.sqrt(Math.pow(channelData.getCalibration().getNoise() * channelData.getGain().getGain() * EcalUtils.gainFactor * EcalUtils.ecalReadoutPeriod, 2) - + hit.getRawEnergy() / (EcalUtils.lightYield * EcalUtils.quantumEff * EcalUtils.surfRatio)); + noise = Math.sqrt(Math.pow(channelData.getCalibration().getNoise() * channelData.getGain().getGain() * EcalUtils.gainFactor * EcalUtils.ecalReadoutPeriod, 2) + + hit.getRawEnergy() / (EcalUtils.lightYield * EcalUtils.quantumEff * EcalUtils.surfRatio)); } else { - noise = Math.sqrt(Math.pow(channelData.getCalibration().getNoise() * channelData.getGain().getGain() * EcalUtils.MeV, 2) - + hit.getRawEnergy() * EcalUtils.MeV / pePerMeV); + noise = Math.sqrt(Math.pow(channelData.getCalibration().getNoise() * channelData.getGain().getGain() * EcalUtils.MeV, 2) + + hit.getRawEnergy() * EcalUtils.MeV / pePerMeV); } energyAmplitude += RandomGaussian.getGaussian(0, noise); } @@ -482,10 +495,10 @@ public void detectorChanged(Detector detector) { // Get the Subdetector. ecal = detector.getSubdetector(ecalName); - + // ECAL combined conditions object. ecalConditions = DatabaseConditionsManager.getInstance().getEcalConditions(); - + resetFADCBuffers(); } @@ -497,7 +510,7 @@ pipelineMap = new HashMap<Long, FADCPipeline>(); Set<Long> cells = ((HPSEcal3) ecal).getNeighborMap().keySet(); for (Long cellID : cells) { - EcalChannelConstants channelData = findChannel(cellID); + EcalChannelConstants channelData = findChannel(cellID); signalMap.put(cellID, new RingBuffer(bufferLength)); pipelineMap.put(cellID, new FADCPipeline(pipelineLength, (int) Math.round(channelData.getCalibration().getPedestal()))); } @@ -507,7 +520,7 @@ private double pulseAmplitude(double time, long cellID) { // Get the channel data. EcalChannelConstants channelData = findChannel(cellID); - + if (use2014Gain) { //if fixedGain is set, multiply the default gain by this factor double corrGain; @@ -615,22 +628,22 @@ return array[((ptr - pos) % size + size) % size]; } } - - /** + + /** * Convert physical ID to gain value. + * * @param cellID (long) * @return channel constants (EcalChannelConstants) */ private EcalChannelConstants findChannel(long cellID) { return ecalConditions.getChannelConstants(ecalConditions.getChannelCollection().findGeometric(cellID)); } - - - public static class TimeComparator implements Comparator<RawCalorimeterHit> { + + public static class TimeComparator implements Comparator<RawCalorimeterHit> { @Override - public int compare(RawCalorimeterHit o1, RawCalorimeterHit o2) { - return o1.getTimeStamp() - o2.getTimeStamp(); - } - } + public int compare(RawCalorimeterHit o1, RawCalorimeterHit o2) { + return o1.getTimeStamp() - o2.getTimeStamp(); + } + } } Modified: java/trunk/evio/src/main/java/org/hps/evio/EcalEvioReader.java ============================================================================= --- java/trunk/evio/src/main/java/org/hps/evio/EcalEvioReader.java (original) +++ java/trunk/evio/src/main/java/org/hps/evio/EcalEvioReader.java Mon Jun 8 12:51:57 2015 @@ -260,7 +260,7 @@ } if (id == null) { - FADCGenericHit hit = makeGenericRawHit(EventConstants.ECAL_WINDOW_MODE, crate, slot, channel, cdata, nSamples); + FADCGenericHit hit = makeGenericRawHit(EventConstants.ECAL_RAW_MODE, crate, slot, channel, cdata, nSamples); processUnrecognizedChannel(hit); } else { BaseRawTrackerHit hit = makeECalRawHit(0, id, cdata, nSamples); Modified: java/trunk/evio/src/main/java/org/hps/evio/EcalHitWriter.java ============================================================================= --- java/trunk/evio/src/main/java/org/hps/evio/EcalHitWriter.java (original) +++ java/trunk/evio/src/main/java/org/hps/evio/EcalHitWriter.java Mon Jun 8 12:51:57 2015 @@ -69,7 +69,7 @@ public void setMode(int mode) { this.mode = mode; - if (mode != EventConstants.ECAL_WINDOW_MODE && mode != EventConstants.ECAL_PULSE_MODE && mode != EventConstants.ECAL_PULSE_INTEGRAL_MODE) { + if (mode != EventConstants.ECAL_RAW_MODE && mode != EventConstants.ECAL_PULSE_MODE && mode != EventConstants.ECAL_PULSE_INTEGRAL_MODE) { throw new IllegalArgumentException("invalid mode " + mode); } } @@ -77,7 +77,7 @@ @Override public boolean hasData(EventHeader event) { switch (mode) { - case EventConstants.ECAL_WINDOW_MODE: + case EventConstants.ECAL_RAW_MODE: return event.hasCollection(RawTrackerHit.class, hitCollectionName); case EventConstants.ECAL_PULSE_MODE: return event.hasCollection(RawTrackerHit.class, hitCollectionName); @@ -92,7 +92,7 @@ public void writeData(EventHeader event, EventBuilder builder) { List<Object> hits = new ArrayList<Object>(); switch (mode) { - case EventConstants.ECAL_WINDOW_MODE: + case EventConstants.ECAL_RAW_MODE: hits.addAll(event.get(RawTrackerHit.class, hitCollectionName)); writeHits(hits, builder, mode); break; @@ -160,7 +160,7 @@ } switch (mode) { - case EventConstants.ECAL_WINDOW_MODE: + case EventConstants.ECAL_RAW_MODE: // Write the two collections for top and bottom hits to separate EVIO banks. writeWindowHitCollection(topHits, topBank, builder); writeWindowHitCollection(bottomHits, botBank, builder); @@ -415,7 +415,7 @@ public void writeData(EventHeader event, EventHeader toEvent) { String readoutName = ((org.lcsim.geometry.compact.Subdetector) subDetector).getReadout().getName(); switch (mode) { - case EventConstants.ECAL_WINDOW_MODE: + case EventConstants.ECAL_RAW_MODE: case EventConstants.ECAL_PULSE_MODE: List<RawTrackerHit> rawTrackerHits = event.get(RawTrackerHit.class, hitCollectionName); if (verbosity >= 1) { Modified: java/trunk/evio/src/main/java/org/hps/evio/EventConstants.java ============================================================================= --- java/trunk/evio/src/main/java/org/hps/evio/EventConstants.java (original) +++ java/trunk/evio/src/main/java/org/hps/evio/EventConstants.java Mon Jun 8 12:51:57 2015 @@ -16,7 +16,7 @@ public static final int SVT_BANK_NUMBER = 1; public static final int ECAL_BANK_NUMBER = 1; public static final int TRIGGER_BANK_NUMBER = 1; - public static final int ECAL_WINDOW_MODE = 1; + public static final int ECAL_RAW_MODE = 1; public static final int ECAL_PULSE_MODE = 2; public static final int ECAL_PULSE_INTEGRAL_MODE = 3; //FADC mode 3 public static final int ECAL_PULSE_INTEGRAL_HIGHRESTDC_MODE = 4; //FADC mode 7 Modified: java/trunk/evio/src/main/java/org/hps/evio/TestRunTriggeredReconToEvio.java ============================================================================= --- java/trunk/evio/src/main/java/org/hps/evio/TestRunTriggeredReconToEvio.java (original) +++ java/trunk/evio/src/main/java/org/hps/evio/TestRunTriggeredReconToEvio.java Mon Jun 8 12:51:57 2015 @@ -58,7 +58,7 @@ public void setEcalMode(int ecalMode) { this.ecalMode = ecalMode; - if (ecalMode != EventConstants.ECAL_WINDOW_MODE && ecalMode != EventConstants.ECAL_PULSE_MODE && ecalMode != EventConstants.ECAL_PULSE_INTEGRAL_MODE) { + if (ecalMode != EventConstants.ECAL_RAW_MODE && ecalMode != EventConstants.ECAL_PULSE_MODE && ecalMode != EventConstants.ECAL_PULSE_INTEGRAL_MODE) { throw new IllegalArgumentException("invalid mode " + ecalMode); } if (ecalWriter != null) { Modified: java/trunk/evio/src/main/java/org/hps/evio/TestRunTriggeredReconToLcio.java ============================================================================= --- java/trunk/evio/src/main/java/org/hps/evio/TestRunTriggeredReconToLcio.java (original) +++ java/trunk/evio/src/main/java/org/hps/evio/TestRunTriggeredReconToLcio.java Mon Jun 8 12:51:57 2015 @@ -77,7 +77,7 @@ public void setEcalMode(int ecalMode) { this.ecalMode = ecalMode; - if (ecalMode != EventConstants.ECAL_WINDOW_MODE && ecalMode != EventConstants.ECAL_PULSE_MODE && ecalMode != EventConstants.ECAL_PULSE_INTEGRAL_MODE) { + if (ecalMode != EventConstants.ECAL_RAW_MODE && ecalMode != EventConstants.ECAL_PULSE_MODE && ecalMode != EventConstants.ECAL_PULSE_INTEGRAL_MODE) { throw new IllegalArgumentException("invalid mode " + ecalMode); } if (ecalWriter != null) {