Print

Print


Commit in hps-java/src/main/java/org/lcsim/hps/evio on MAIN
ECalHitWriter.java+86-941.1 -> 1.2
EventConstants.java-11.12 -> 1.13
+86-95
2 modified files
ECalHitWriter checks for preexisting ECal banks

hps-java/src/main/java/org/lcsim/hps/evio
ECalHitWriter.java 1.1 -> 1.2
diff -u -r1.1 -r1.2
--- ECalHitWriter.java	30 Jul 2012 23:31:45 -0000	1.1
+++ ECalHitWriter.java	3 Aug 2012 21:37:12 -0000	1.2
@@ -1,5 +1,6 @@
 package org.lcsim.hps.evio;
 
+import org.jlab.coda.jevio.BaseStructure;
 import org.lcsim.event.RawTrackerHit;
 import org.jlab.coda.jevio.CompositeData;
 import java.util.ArrayList;
@@ -11,7 +12,6 @@
 import org.jlab.coda.jevio.EvioBank;
 import org.jlab.coda.jevio.EvioException;
 import org.lcsim.event.EventHeader;
-import org.lcsim.event.EventHeader.LCMetaData;
 import org.lcsim.event.RawCalorimeterHit;
 import org.lcsim.geometry.IDDecoder;
 import org.lcsim.hps.recon.ecal.HPSEcalConditions;
@@ -25,7 +25,7 @@
 /**
  *
  * @author Sho Uemura <[log in to unmask]>
- * @version $Id: ECalHitWriter.java,v 1.1 2012/07/30 23:31:45 meeg Exp $
+ * @version $Id: ECalHitWriter.java,v 1.2 2012/08/03 21:37:12 meeg Exp $
  */
 public class ECalHitWriter implements HitWriter {
 
@@ -62,38 +62,33 @@
 
     @Override
     public void writeData(EventHeader event, EventBuilder builder) {
-        LCMetaData meta;
-        List<RawCalorimeterHit> rawCalorimeterHits;
-        List<RawTrackerHit> rawTrackerHits;
+        List<Object> hits = new ArrayList<Object>();
         switch (mode) {
             case EventConstants.ECAL_WINDOW_MODE:
-                rawTrackerHits = event.get(RawTrackerHit.class, hitCollectionName);
-                meta = event.getMetaData(rawTrackerHits);
-                writeWindowHits(meta, rawTrackerHits, builder);
+                hits.addAll(event.get(RawTrackerHit.class, hitCollectionName));
+                writeHits(hits, builder, mode);
                 break;
             case EventConstants.ECAL_PULSE_MODE:
-                rawTrackerHits = event.get(RawTrackerHit.class, hitCollectionName);
-                meta = event.getMetaData(rawTrackerHits);
-                writePulseHits(meta, rawTrackerHits, builder);
+                hits.addAll(event.get(RawTrackerHit.class, hitCollectionName));
+                writeHits(hits, builder, mode);
                 break;
             case EventConstants.ECAL_PULSE_INTEGRAL_MODE:
-                rawCalorimeterHits = event.get(RawCalorimeterHit.class, hitCollectionName);
-                meta = event.getMetaData(rawCalorimeterHits);
-                writeIntegralHits(meta, rawCalorimeterHits, builder);
+                hits.addAll(event.get(RawCalorimeterHit.class, hitCollectionName));
+                writeHits(hits, builder, mode);
                 break;
             default:
                 break;
         }
     }
 
-    private void writeIntegralHits(LCMetaData meta, List<RawCalorimeterHit> rawCalorimeterHits, EventBuilder builder) {
+    private void writeHits(List<Object> rawCalorimeterHits, EventBuilder builder, int mode) {
         System.out.println("Writing " + rawCalorimeterHits.size() + " ECal hits in integral format");
 
         // Make two lists containing the hits from top and bottom sections, which go into separate EVIO data banks.
-        List<RawCalorimeterHit> topHits = new ArrayList<RawCalorimeterHit>();
-        List<RawCalorimeterHit> bottomHits = new ArrayList<RawCalorimeterHit>();
-        for (RawCalorimeterHit hit : rawCalorimeterHits) {
-            Long daqID = HPSEcalConditions.physicalToDaqID(hit.getCellID());
+        List<Object> topHits = new ArrayList<Object>();
+        List<Object> bottomHits = new ArrayList<Object>();
+        for (Object hit : rawCalorimeterHits) {
+            Long daqID = HPSEcalConditions.physicalToDaqID(getCellID(hit));
             int crate = HPSEcalConditions.getCrate(daqID);
             if (crate == ECAL_BOTTOM_BANK_TAG) {
                 bottomHits.add(hit);
@@ -102,22 +97,80 @@
             }
         }
 
-        // Write the two collections for top and bottom hits to separate EVIO banks.
-        writeIntegralHitCollection(topHits, meta, ECAL_TOP_BANK_TAG, builder);
-        writeIntegralHitCollection(bottomHits, meta, ECAL_BOTTOM_BANK_TAG, builder);
+        // Make a new bank for this crate.
+        BaseStructure topBank = null;
+        BaseStructure botBank = null;
+        // Do these banks already exist?
+        for (BaseStructure bank : builder.getEvent().getChildren()) {
+            switch (bank.getHeader().getTag()) {
+                case ECAL_TOP_BANK_TAG:
+                    topBank = bank;
+                    break;
+                case ECAL_BOTTOM_BANK_TAG:
+                    botBank = bank;
+                    break;
+            }
+        }
+        // If they don't exist, make them.
+        if (topBank == null) {
+            topBank = new EvioBank(ECAL_TOP_BANK_TAG, DataType.BANK, ECAL_BANK_NUMBER);
+            try {
+                builder.addChild(builder.getEvent(), topBank);
+            } catch (EvioException e) {
+                throw new RuntimeException(e);
+            }
+        }
+        if (botBank == null) {
+            botBank = new EvioBank(ECAL_BOTTOM_BANK_TAG, DataType.BANK, ECAL_BANK_NUMBER);
+            try {
+                builder.addChild(builder.getEvent(), botBank);
+            } catch (EvioException e) {
+                throw new RuntimeException(e);
+            }
+        }
+
+        switch (mode) {
+            case EventConstants.ECAL_WINDOW_MODE:
+                // Write the two collections for top and bottom hits to separate EVIO banks.
+                writeWindowHitCollection(topHits, topBank, builder);
+                writeWindowHitCollection(bottomHits, botBank, builder);
+                break;
+            case EventConstants.ECAL_PULSE_MODE:
+                // Write the two collections for top and bottom hits to separate EVIO banks.
+                writePulseHitCollection(topHits, topBank, builder);
+                writePulseHitCollection(bottomHits, botBank, builder);
+                break;
+            case EventConstants.ECAL_PULSE_INTEGRAL_MODE:
+                // Write the two collections for top and bottom hits to separate EVIO banks.
+                writeIntegralHitCollection(topHits, topBank, builder);
+                writeIntegralHitCollection(bottomHits, botBank, builder);
+                break;
+            default:
+                break;
+        }
+    }
+
+    private long getCellID(Object hit) {
+        if (RawCalorimeterHit.class.isInstance(hit)) {
+            return ((RawCalorimeterHit) hit).getCellID();
+        } else if (RawTrackerHit.class.isInstance(hit)) {
+            return ((RawTrackerHit) hit).getCellID();
+        }
+        return 0;
     }
 
-    private void writeIntegralHitCollection(List<RawCalorimeterHit> hits, LCMetaData meta, int bankTag, EventBuilder builder) {
+    private void writeIntegralHitCollection(List<Object> hits, BaseStructure crateBank, EventBuilder builder) {
         if (hits.isEmpty()) {
             return;
         }
 
         // Get the ID decoder.
-        IDDecoder dec = meta.getIDDecoder();
+        IDDecoder dec = HPSEcalConditions.getSubdetector().getIDDecoder();
 
         // Make a hit map; allow for multiple hits in a crystal.
         Map<Long, List<RawCalorimeterHit>> hitMap = new HashMap<Long, List<RawCalorimeterHit>>();
-        for (RawCalorimeterHit hit : hits) {
+        for (Object thing : hits) {
+            RawCalorimeterHit hit = (RawCalorimeterHit) thing;
             if (hitMap.get(hit.getCellID()) == null) {
                 hitMap.put(hit.getCellID(), new ArrayList<RawCalorimeterHit>());
             }
@@ -141,14 +194,6 @@
             slots.add(id);
         }
 
-        // Make a new bank for this crate.
-        EvioBank crateBank = new EvioBank(bankTag, DataType.BANK, ECAL_BANK_NUMBER);
-
-//        // New bank for this slot.
-//        EvioBank slotBank = new EvioBank(EventConstants.ECAL_PULSE_INTEGRAL_BANK_TAG, DataType.COMPOSITE, 0);
-//
-//        List<CompositeData> slotDataList = new ArrayList<CompositeData>();
-//
         // Loop over the slots in the map.
         for (int slot : slotMap.keySet()) {
 
@@ -191,47 +236,20 @@
                 throw new RuntimeException(e);
             }
         }
-        try {
-//            slotBank.appendCompositeData(slotDataList.toArray(new CompositeData[slotDataList.size()]));
-//            builder.addChild(crateBank, slotBank);
-            builder.addChild(builder.getEvent(), crateBank);
-        } catch (EvioException e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-    private void writePulseHits(LCMetaData meta, List<RawTrackerHit> rawCalorimeterHits, EventBuilder builder) {
-        System.out.println("Writing " + rawCalorimeterHits.size() + " ECal hits in pulse format");
-
-        // Make two lists containing the hits from top and bottom sections, which go into separate EVIO data banks.
-        List<RawTrackerHit> topHits = new ArrayList<RawTrackerHit>();
-        List<RawTrackerHit> bottomHits = new ArrayList<RawTrackerHit>();
-        for (RawTrackerHit hit : rawCalorimeterHits) {
-            Long daqID = HPSEcalConditions.physicalToDaqID(hit.getCellID());
-            int crate = HPSEcalConditions.getCrate(daqID);
-            if (crate == ECAL_BOTTOM_BANK_TAG) {
-                bottomHits.add(hit);
-            } else {
-                topHits.add(hit);
-            }
-        }
-
-        // Write the two collections for top and bottom hits to separate EVIO banks.
-        writePulseHitCollection(topHits, meta, ECAL_TOP_BANK_TAG, builder);
-        writePulseHitCollection(bottomHits, meta, ECAL_BOTTOM_BANK_TAG, builder);
     }
 
-    private void writePulseHitCollection(List<RawTrackerHit> hits, LCMetaData meta, int bankTag, EventBuilder builder) {
+    private void writePulseHitCollection(List<Object> hits, BaseStructure crateBank, EventBuilder builder) {
         if (hits.isEmpty()) {
             return;
         }
 
         // Get the ID decoder.
-        IDDecoder dec = meta.getIDDecoder();
+        IDDecoder dec = HPSEcalConditions.getSubdetector().getIDDecoder();
 
         // Make a hit map; allow for multiple hits in a crystal.
         Map<Long, List<RawTrackerHit>> hitMap = new HashMap<Long, List<RawTrackerHit>>();
-        for (RawTrackerHit hit : hits) {
+        for (Object thing : hits) {
+            RawTrackerHit hit = (RawTrackerHit) thing;
             if (hitMap.get(hit.getCellID()) == null) {
                 hitMap.put(hit.getCellID(), new ArrayList<RawTrackerHit>());
             }
@@ -255,9 +273,6 @@
             slots.add(id);
         }
 
-        // Make a new bank for this crate.
-        EvioBank crateBank = new EvioBank(bankTag, DataType.BANK, ECAL_BANK_NUMBER);
-
 //        // New bank for this slot.
 //        EvioBank slotBank = new EvioBank(EventConstants.ECAL_PULSE_BANK_TAG, DataType.COMPOSITE, 0);
 //
@@ -310,38 +325,18 @@
         }
     }
 
-    private void writeWindowHits(LCMetaData meta, List<RawTrackerHit> rawCalorimeterHits, EventBuilder builder) {
-        System.out.println("Writing " + rawCalorimeterHits.size() + " ECal hits in window format");
-
-        // Make two lists containing the hits from top and bottom sections, which go into separate EVIO data banks.
-        List<RawTrackerHit> topHits = new ArrayList<RawTrackerHit>();
-        List<RawTrackerHit> bottomHits = new ArrayList<RawTrackerHit>();
-        for (RawTrackerHit hit : rawCalorimeterHits) {
-            Long daqID = HPSEcalConditions.physicalToDaqID(hit.getCellID());
-            int crate = HPSEcalConditions.getCrate(daqID);
-            if (crate == ECAL_BOTTOM_BANK_TAG) {
-                bottomHits.add(hit);
-            } else {
-                topHits.add(hit);
-            }
-        }
-
-        // Write the two collections for top and bottom hits to separate EVIO banks.
-        writeWindowHitCollection(topHits, meta, ECAL_TOP_BANK_TAG, builder);
-        writeWindowHitCollection(bottomHits, meta, ECAL_BOTTOM_BANK_TAG, builder);
-    }
-
-    private void writeWindowHitCollection(List<RawTrackerHit> hits, LCMetaData meta, int bankTag, EventBuilder builder) {
+    private void writeWindowHitCollection(List<Object> hits, BaseStructure crateBank, EventBuilder builder) {
         if (hits.isEmpty()) {
             return;
         }
 
         // Get the ID decoder.
-        IDDecoder dec = meta.getIDDecoder();
+        IDDecoder dec = HPSEcalConditions.getSubdetector().getIDDecoder();
 
         // Make a hit map; allow for multiple hits in a crystal.
         Map<Long, RawTrackerHit> hitMap = new HashMap<Long, RawTrackerHit>();
-        for (RawTrackerHit hit : hits) {
+        for (Object thing : hits) {
+            RawTrackerHit hit = (RawTrackerHit) thing;
             hitMap.put(hit.getCellID(), hit);
         }
 
@@ -361,9 +356,6 @@
             slots.add(id);
         }
 
-        // Make a new bank for this crate.
-        EvioBank crateBank = new EvioBank(bankTag, DataType.BANK, ECAL_BANK_NUMBER);
-
 //        // New bank for this slot.
 //        EvioBank slotBank = new EvioBank(EventConstants.ECAL_WINDOW_BANK_TAG, DataType.COMPOSITE, 0);
 //

hps-java/src/main/java/org/lcsim/hps/evio
EventConstants.java 1.12 -> 1.13
diff -u -r1.12 -r1.13
--- EventConstants.java	17 May 2012 14:55:36 -0000	1.12
+++ EventConstants.java	3 Aug 2012 21:37:12 -0000	1.13
@@ -15,7 +15,6 @@
     public static final int EVENTID_BANK_TAG = 0xC000;
     public static final int EVENT_BANK_NUM = 0xCC;
     // These correspond to ROC (readout crate) IDs from the DAQ.
-    // TODO Double check that these match the actual values.
     public static final int ECAL_TOP_BANK_TAG = 0x1;
     public static final int ECAL_BOTTOM_BANK_TAG = 0x2;
     public static final int SVT_BANK_TAG = 0x3;
CVSspam 0.2.12


Use REPLY-ALL to reply to list

To unsubscribe from the LCD-CVS list, click the following link:
https://listserv.slac.stanford.edu/cgi-bin/wa?SUBED1=LCD-CVS&A=1