Commit in hps-java/src/main/java/org/lcsim/hps/evio on MAIN | |||
ECalHitWriter.java | +86 | -94 | 1.1 -> 1.2 |
EventConstants.java | -1 | 1.12 -> 1.13 | |
+86 | -95 |
ECalHitWriter checks for preexisting ECal banks
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); //
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;
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