Print

Print


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<BassRawTrackerHit> makeWindowHits(CompositeData cdata, int crate) {
         List<BassRawTrackerHit> hits = new ArrayList<BassRawTrackerHit>();
-        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;
     }
-}
+}