Print

Print


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
+        }
+    }
 }