Author: [log in to unmask]
Date: Thu Mar 26 19:04:53 2015
New Revision: 2581
Log:
read RF FADC data and store in EcalGenericHits
Modified:
java/trunk/evio/src/main/java/org/hps/evio/ECalEvioReader.java
java/trunk/evio/src/main/java/org/hps/evio/LCSimEngRunEventBuilder.java
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 Thu Mar 26 19:04:53 2015
@@ -22,12 +22,10 @@
import org.jlab.coda.jevio.EvioEvent;
import org.jlab.coda.jevio.EvioException;
import org.lcsim.detector.identifier.IIdentifierHelper;
-import org.lcsim.detector.identifier.Identifier;
import org.lcsim.event.EventHeader;
import org.lcsim.event.LCRelation;
import org.lcsim.event.RawCalorimeterHit;
import org.lcsim.event.RawTrackerHit;
-import org.lcsim.event.SimTrackerHit;
import org.lcsim.event.base.BaseLCRelation;
import org.lcsim.event.base.BaseRawCalorimeterHit;
import org.lcsim.event.base.BaseRawTrackerHit;
@@ -66,6 +64,8 @@
private int topBankTag, botBankTag;
+ private int rfBankTag = -1;
+
private final Map<List<Integer>, Integer> genericHitCount = new HashMap<List<Integer>, Integer>();
private static final Logger logger = LogUtil.create(ECalEvioReader.class);
@@ -84,6 +84,10 @@
public void setBotBankTag(int botBankTag) {
this.botBankTag = botBankTag;
+ }
+
+ public void setRfBankTag(int rfBankTag) {
+ this.rfBankTag = rfBankTag;
}
@Override
@@ -158,6 +162,30 @@
throw new RuntimeException(e);
}
}
+ } else if (rfBankTag != -1 && crateBankTag == rfBankTag) {
+ if (bank.getChildCount() > 0) {
+ if (debug) {
+ System.out.println("FADC RF bank tag: " + header.getTag() + "; childCount: " + bank.getChildCount());
+ }
+ try {
+ for (BaseStructure slotBank : bank.getChildrenList()) {
+ if (slotBank.getCompositeData() != null) { //skip SSP and TI banks, if any
+ for (CompositeData cdata : slotBank.getCompositeData()) {
+ switch (slotBank.getHeader().getTag()) {
+ case EventConstants.ECAL_WINDOW_BANK_TAG:
+ hits.addAll(makeWindowHits(cdata, crateBankTag));
+ flags = 0;
+ break;
+ default:
+ throw new RuntimeException("Unsupported ECal format - bank tag " + slotBank.getHeader().getTag());
+ }
+ }
+ }
+ }
+ } catch (EvioException e) {
+ throw new RuntimeException(e);
+ }
+ }
}
}
// String readoutName = ;
@@ -174,18 +202,34 @@
return foundHits;
}
+ private static BaseRawTrackerHit makeECalRawHit(int time, long id, CompositeData cdata, int nSamples) {
+ short[] adcValues = new short[nSamples];
+ for (int i = 0; i < nSamples; i++) {
+ adcValues[i] = cdata.getShort();
+ }
+ return new BaseRawTrackerHit(id, time, adcValues);
+ }
+
+ private static FADCGenericHit makeGenericRawHit(int mode, int crate, short slot, short channel, CompositeData cdata, int nSamples) {
+ int[] adcValues = new int[nSamples];
+ for (int i = 0; i < nSamples; i++) {
+ adcValues[i] = cdata.getShort();
+ }
+ return new FADCGenericHit(mode, crate, slot, channel, adcValues);
+ }
+
private List<BaseRawTrackerHit> makeWindowHits(CompositeData cdata, int crate) {
List<BaseRawTrackerHit> hits = new ArrayList<BaseRawTrackerHit>();
- if (debug) {
- int n = cdata.getNValues().size();
- for (int i = 0; i < n; i++) {
- System.out.println("cdata.N[" + i + "]=" + cdata.getNValues().get(i));
- }
- int ni = cdata.getItems().size();
- for (int i = 0; i < ni; i++) {
- System.out.println("cdata.type[" + i + "]=" + cdata.getTypes().get(i));
- }
- }
+// if (debug) {
+// int n = cdata.getNValues().size();
+// for (int i = 0; i < n; i++) {
+// System.out.println("cdata.N[" + i + "]=" + cdata.getNValues().get(i));
+// }
+// int ni = cdata.getItems().size();
+// for (int i = 0; i < ni; i++) {
+// System.out.println("cdata.type[" + i + "]=" + cdata.getTypes().get(i));
+// }
+// }
while (cdata.index() + 1 < cdata.getItems().size()) {
short slot = cdata.getByte();
int trigger = cdata.getInt();
@@ -208,24 +252,12 @@
System.out.println("The long id is: " + id);
}
- short[] adcValues = new short[nSamples];
- for (int i = 0; i < nSamples; i++) {
- adcValues[i] = cdata.getShort();
- }
if (id == null) {
- int[] data = new int[adcValues.length];
- for (int i = 0; i < adcValues.length; i++) {
- data[i] = adcValues[i];
- }
- processUnrecognizedChannel(new FADCGenericHit(EventConstants.ECAL_WINDOW_MODE, crate, slot, channel, data));
+ FADCGenericHit hit = makeGenericRawHit(EventConstants.ECAL_WINDOW_MODE, crate, slot, channel, cdata, nSamples);
+ processUnrecognizedChannel(hit);
} else {
- hits.add(new BaseRawTrackerHit(
- 0,
- id,
- adcValues,
- new ArrayList<SimTrackerHit>(),
- subDetector
- .getDetectorElement().findDetectorElement(new Identifier(id)).get(0)));
+ BaseRawTrackerHit hit = makeECalRawHit(0, id, cdata, nSamples);
+ hits.add(hit);
}
}
}
@@ -275,18 +307,13 @@
for (int k = 0; k < npulses; k++) {
short pulseNum = cdata.getByte();
int sampleCount = cdata.getNValue();
- short[] adcValues = new short[sampleCount];
- for (int i = 0; i < sampleCount; i++) {
- adcValues[i] = cdata.getShort();
- }
+
if (id == null) {
- int[] data = new int[adcValues.length];
- for (int i = 0; i < adcValues.length; i++) {
- data[i] = adcValues[i];
- }
- processUnrecognizedChannel(new FADCGenericHit(EventConstants.ECAL_PULSE_MODE, crate, slot, channel, data));
+ FADCGenericHit hit = makeGenericRawHit(EventConstants.ECAL_PULSE_MODE, crate, slot, channel, cdata, sampleCount);
+ processUnrecognizedChannel(hit);
} else {
- hits.add(new BaseRawTrackerHit(pulseNum, id, adcValues, new ArrayList<SimTrackerHit>(), subDetector.getDetectorElement().findDetectorElement(new Identifier(id)).get(0)));
+ BaseRawTrackerHit hit = makeECalRawHit(pulseNum, id, cdata, sampleCount);
+ hits.add(hit);
}
}
}
Modified: java/trunk/evio/src/main/java/org/hps/evio/LCSimEngRunEventBuilder.java
=============================================================================
--- java/trunk/evio/src/main/java/org/hps/evio/LCSimEngRunEventBuilder.java (original)
+++ java/trunk/evio/src/main/java/org/hps/evio/LCSimEngRunEventBuilder.java Thu Mar 26 19:04:53 2015
@@ -17,11 +17,15 @@
import org.lcsim.event.EventHeader;
/**
- * This is the {@link org.hps.record.LCSimEventBuilder} implementation for the Engineering Run and the Commissioning Run.
+ * This is the {@link org.hps.record.LCSimEventBuilder} implementation for the
+ * Engineering Run and the Commissioning Run.
* <p>
- * It has several modifications from the Test Run builder including different values for certain bank tags.
+ * It has several modifications from the Test Run builder including different
+ * values for certain bank tags.
* <p>
- * Additionally, this builder will write DAQ config information, EPICS control data, and scalar bank data into the output LCSim events if these banks are present in the EVIO data.
+ * Additionally, this builder will write DAQ config information, EPICS control
+ * data, and scalar bank data into the output LCSim events if these banks are
+ * present in the EVIO data.
*
* @author Sho Uemura <[log in to unmask]>
* @author Jeremy McCormick <[log in to unmask]>
@@ -39,12 +43,13 @@
public LCSimEngRunEventBuilder() {
ecalReader.setTopBankTag(0x25);
ecalReader.setBotBankTag(0x27);
+ ecalReader.setRfBankTag(0x2e);
svtReader = new SvtEvioReader();
sspCrateBankTag = 0x2E; // A.C. modification after Sergey's confirmation
sspBankTag = 0xe10c;
intBanks = new ArrayList<IntBankDefinition>();
- intBanks.add(new IntBankDefinition(SSPData.class, new int[] { sspCrateBankTag, sspBankTag }));
- intBanks.add(new IntBankDefinition(TIData.class, new int[] { sspCrateBankTag, 0xe10a }));
+ intBanks.add(new IntBankDefinition(SSPData.class, new int[]{sspCrateBankTag, sspBankTag}));
+ intBanks.add(new IntBankDefinition(TIData.class, new int[]{sspCrateBankTag, 0xe10a}));
// ecalReader = new ECalEvioReader(0x25, 0x27);
triggerConfigReader = new TriggerConfigEvioReader();
}
@@ -72,6 +77,7 @@
/**
* Create and cache an {@link org.hps.record.epics.EpicsScalarData} object.
+ *
* @param evioEvent The EVIO event data.
*/
void createEpicsScalarData(EvioEvent evioEvent) {
@@ -81,6 +87,7 @@
/**
* Write EVIO scalar data into the LCSim event, if it exists.
+ *
* @param evioEvent The EVIO event data.
* @param lcsimEvent The output LCSim event.
*/
@@ -118,7 +125,6 @@
// } catch (Exception e) {
// Logger.getLogger(this.getClass().getName()).log(Level.SEVERE, "Error making SVT hits", e);
// }
-
// Write the current EPICS data into this event.
if (epicsData != null) {
epicsData.write(lcsimEvent);
@@ -130,4 +136,4 @@
return lcsimEvent;
}
-}
+}
|