Author: [log in to unmask]
Date: Thu Jan 22 15:26:24 2015
New Revision: 1970
Log:
use new trigger bank classes in event builder
Modified:
java/trunk/evio/src/main/java/org/hps/evio/LCSimEngRunEventBuilder.java
java/trunk/evio/src/main/java/org/hps/evio/LCSimTestRunEventBuilder.java
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 Jan 22 15:26:24 2015
@@ -1,10 +1,12 @@
package org.hps.evio;
+import java.util.ArrayList;
+import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
-
-import org.hps.readout.ecal.SSPData;
-import org.hps.readout.ecal.TriggerData;
+import org.hps.readout.ecal.triggerbank.SSPData;
+import org.hps.readout.ecal.triggerbank.TIData;
+import org.hps.readout.ecal.triggerbank.AbstractIntData;
import org.hps.record.evio.EvioEventUtilities;
import org.jlab.coda.jevio.EvioEvent;
import org.lcsim.event.EventHeader;
@@ -17,48 +19,54 @@
*/
public class LCSimEngRunEventBuilder extends LCSimTestRunEventBuilder {
- public LCSimEngRunEventBuilder() {
- ecalReader.setTopBankTag(0x25);
- ecalReader.setBotBankTag(0x27);
- sspCrateBankTag = 0x2E; //A.C. modification after Sergey's confirmation
- sspBankTag = 0xe10c;
- // ecalReader = new ECalEvioReader(0x25, 0x27);
- // svtReader = new SVTEvioReader();
- }
+ public LCSimEngRunEventBuilder() {
+ ecalReader.setTopBankTag(0x25);
+ ecalReader.setBotBankTag(0x27);
+ 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}));
+ // ecalReader = new ECalEvioReader(0x25, 0x27);
+ // svtReader = new SVTEvioReader();
+ }
- protected TriggerData makeTriggerData(int[] data) {
- TriggerData triggerData = new SSPData(data);
- time = ((long) triggerData.getTime()) * 4;
- return triggerData;
- }
+ @Override
+ protected long getTime(List<AbstractIntData> triggerList) {
+ for (AbstractIntData data : triggerList) {
+ if (data instanceof TIData) {
+ TIData tiData = (TIData) data;
+ return tiData.getTime() * 4;
+ }
+ }
+ return 0;
+ }
- @Override
- public EventHeader makeLCSimEvent(EvioEvent evioEvent) {
- if (!EvioEventUtilities.isPhysicsEvent(evioEvent)) {
- throw new RuntimeException("Not a physics event: event tag " + evioEvent.getHeader().getTag());
- }
+ @Override
+ public EventHeader makeLCSimEvent(EvioEvent evioEvent) {
+ if (!EvioEventUtilities.isPhysicsEvent(evioEvent)) {
+ throw new RuntimeException("Not a physics event: event tag " + evioEvent.getHeader().getTag());
+ }
- // Create a new LCSimEvent.
- EventHeader lcsimEvent = getEventData(evioEvent);
+ // Create a new LCSimEvent.
+ EventHeader lcsimEvent = getEventData(evioEvent);
- // Make RawCalorimeterHit collection, combining top and bottom section
- // of ECal into one list.
- try {
- ecalReader.makeHits(evioEvent, lcsimEvent);
- } catch (Exception e) {
- Logger.getLogger(this.getClass().getName()).log(Level.SEVERE, "Error making ECal hits", e);
- }
+ // Make RawCalorimeterHit collection, combining top and bottom section
+ // of ECal into one list.
+ try {
+ ecalReader.makeHits(evioEvent, lcsimEvent);
+ } catch (Exception e) {
+ Logger.getLogger(this.getClass().getName()).log(Level.SEVERE, "Error making ECal hits", e);
+ }
- // Commented out for now while SVT is not implemented. --JM
- // Make SVT RawTrackerHits
- // try {
- // svtReader.makeHits(evioEvent, lcsimEvent);
- // } catch (Exception e) {
- // Logger.getLogger(this.getClass().getName()).log(Level.SEVERE,
- // "Error making SVT hits", e);
- // }
-
- return lcsimEvent;
- }
-
+ // Commented out for now while SVT is not implemented. --JM
+ // Make SVT RawTrackerHits
+ // try {
+ // svtReader.makeHits(evioEvent, lcsimEvent);
+ // } catch (Exception e) {
+ // Logger.getLogger(this.getClass().getName()).log(Level.SEVERE,
+ // "Error making SVT hits", e);
+ // }
+ return lcsimEvent;
+ }
}
Modified: java/trunk/evio/src/main/java/org/hps/evio/LCSimTestRunEventBuilder.java
=============================================================================
--- java/trunk/evio/src/main/java/org/hps/evio/LCSimTestRunEventBuilder.java (original)
+++ java/trunk/evio/src/main/java/org/hps/evio/LCSimTestRunEventBuilder.java Thu Jan 22 15:26:24 2015
@@ -5,8 +5,8 @@
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
-
-import org.hps.readout.ecal.TriggerData;
+import org.hps.readout.ecal.triggerbank.AbstractIntData;
+import org.hps.readout.ecal.triggerbank.TestRunTriggerData;
import org.hps.record.LCSimEventBuilder;
import org.hps.record.evio.EvioEventConstants;
import org.hps.record.evio.EvioEventUtilities;
@@ -33,10 +33,13 @@
protected int sspCrateBankTag = 0x1; //bank ID of the crate containing the SSP
protected int sspBankTag = 0xe106; //SSP bank's tag
protected static Logger logger = LogUtil.create(LCSimTestRunEventBuilder.class);
+ protected List<IntBankDefinition> intBanks = null;
public LCSimTestRunEventBuilder() {
ecalReader = new ECalEvioReader(0x1, 0x2);
svtReader = new TestRunSvtEvioReader();
+ intBanks = new ArrayList<IntBankDefinition>();
+ intBanks.add(new IntBankDefinition(TestRunTriggerData.class, new int[]{sspCrateBankTag, sspBankTag}));
logger.setLevel(Level.FINE);
}
@@ -84,7 +87,7 @@
if (!EvioEventUtilities.isPhysicsEvent(evioEvent)) {
throw new RuntimeException("Not a physics event: event tag " + evioEvent.getHeader().getTag());
}
-
+
// Create a new LCSimEvent.
EventHeader lcsimEvent = getEventData(evioEvent);
@@ -109,16 +112,16 @@
int[] eventID = null;
//array of length 3: {event number, trigger code, readout status}
- List<TriggerData> triggerList = getTriggerData(evioEvent);
+ List<AbstractIntData> triggerList = getTriggerData(evioEvent);
if (evioEvent.getChildCount() > 0) {
for (BaseStructure bank : evioEvent.getChildren()) {
if (bank.getHeader().getTag() == EvioEventConstants.EVENTID_BANK_TAG) {
eventID = bank.getIntData();
- }
- }
- }
-
+ }
+ }
+ }
+
if (eventID == null) {
logger.warning("No event ID bank found");
eventID = new int[3];
@@ -132,51 +135,84 @@
}
}
- if (triggerList.isEmpty()) {
- logger.finest("No trigger bank found");
- } else if (triggerList.size() > 1) {
- logger.finest("Found multiple trigger banks");
- }
+ time = getTime(triggerList);
// Create a new LCSimEvent.
EventHeader lcsimEvent = new BaseLCSimEvent(
- ConditionsManager.defaultInstance().getRun(),
- eventID[0],
- ConditionsManager.defaultInstance().getDetector(),
+ ConditionsManager.defaultInstance().getRun(),
+ eventID[0],
+ ConditionsManager.defaultInstance().getDetector(),
time);
- lcsimEvent.put("TriggerBank", triggerList, TriggerData.class, 0);
+ lcsimEvent.put("TriggerBank", triggerList, AbstractIntData.class, 0);
return lcsimEvent;
}
- protected List<TriggerData> getTriggerData(EvioEvent evioEvent) {
- List<TriggerData> triggerList = new ArrayList<TriggerData>();
- if (evioEvent.getChildCount() > 0) {
- for (BaseStructure bank : evioEvent.getChildren()) {
- if (bank.getHeader().getTag() == sspCrateBankTag) {
- if (bank.getChildCount() > 0) {
- for (BaseStructure slotBank : bank.getChildren()) {
- if (slotBank.getHeader().getTag() == sspBankTag) {
-// TriggerData triggerData = new TriggerData(slotBank.getIntData());
-// time = ((long) triggerData.getTime()) * 1000000000;
- triggerList.add(makeTriggerData(slotBank.getIntData()));
- }
- }
- }
+ protected long getTime(List<AbstractIntData> triggerList) {
+ for (AbstractIntData data : triggerList) {
+ if (data instanceof TestRunTriggerData) {
+ return (((TestRunTriggerData) data).getTime()) * 1000000000L;
+ }
+ }
+ return 0;
+ }
+
+ protected List<AbstractIntData> getTriggerData(EvioEvent evioEvent) {
+ List<AbstractIntData> triggerList = new ArrayList<AbstractIntData>();
+
+ for (IntBankDefinition def : intBanks) {
+ BaseStructure bank = def.findBank(evioEvent);
+ if (bank != null) { //returns null if no banks found
+ try {
+ AbstractIntData data = (AbstractIntData) def.dataClass.getConstructor(int[].class).newInstance(bank.getIntData());
+ triggerList.add(data);
+ } catch (Exception ex) {
+ Logger.getLogger(LCSimTestRunEventBuilder.class.getName()).log(Level.SEVERE, null, ex);
}
+ } else {
+ logger.finest("No trigger bank found of type " + def.dataClass.getSimpleName());
}
}
return triggerList;
}
- protected TriggerData makeTriggerData(int[] data) {
- TriggerData triggerData = new TriggerData(data);
- time = ((long) triggerData.getTime()) * 1000000000;
- return triggerData;
- }
-
+// protected TriggerData makeTriggerData(int[] data) {
+// TriggerData triggerData = new TriggerData(data);
+// time = ((long) triggerData.getTime()) * 1000000000;
+// return triggerData;
+// }
@Override
public void conditionsChanged(ConditionsEvent conditionsEvent) {
ecalReader.initialize();
}
+
+ protected class IntBankDefinition {
+
+ int[] bankTags;
+ Class<? extends AbstractIntData> dataClass;
+
+ public IntBankDefinition(Class dataClass, int[] bankTags) {
+ this.bankTags = bankTags;
+ this.dataClass = dataClass;
+ }
+
+ public BaseStructure findBank(EvioEvent evioEvent) {
+ BaseStructure currentBank = evioEvent;
+ searchLoop:
+ for (int bankTag : bankTags) {
+ if (currentBank.getChildCount() > 0) {
+ for (BaseStructure childBank : currentBank.getChildren()) {
+ if (childBank.getHeader().getTag() == bankTag) { //found a bank with the right tag; step inside this bank and conitnue searching
+ currentBank = childBank;
+ continue searchLoop;
+ }
+ }
+ return null; //didn't find a bank with the right tag, give up
+ } else { //bank has no children, give up
+ return null;
+ }
+ }
+ return currentBank; // matched every tag, so this is the bank we want
+ }
+ }
}
|