Print

Print


Author: [log in to unmask]
Date: Tue Nov  4 20:49:21 2014
New Revision: 1431

Log:
make various bank numbers configurable; implement engineering run event builder that uses the new bank numbers and SSP data object

Added:
    java/trunk/evio/src/main/java/org/hps/evio/LCSimEngRunEventBuilder.java
      - copied, changed from r1425, java/trunk/evio/src/main/java/org/hps/evio/LCSimTestRunEventBuilder.java
Modified:
    java/trunk/evio/src/main/java/org/hps/evio/ECalEvioReader.java
    java/trunk/evio/src/main/java/org/hps/evio/LCSimTestRunEventBuilder.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	Tue Nov  4 20:49:21 2014
@@ -46,10 +46,14 @@
     private static EcalConditions ecalConditions = null;
     private static IIdentifierHelper helper = null;
 
-    public ECalEvioReader() {
+    private int topBankTag, botBankTag;
+
+    public ECalEvioReader(int topBankTag, int botBankTag) {
+        this.topBankTag = topBankTag;
+        this.botBankTag = botBankTag;
         hitCollectionName = "EcalReadoutHits";
 
-        subDetector =  DatabaseConditionsManager.getInstance().getDetectorObject().getSubdetector(subdetectorName);
+        subDetector = DatabaseConditionsManager.getInstance().getDetectorObject().getSubdetector(subdetectorName);
 
         // ECAL combined conditions object.
         ecalConditions = ConditionsManager.defaultInstance()
@@ -60,6 +64,15 @@
         System.out.println("You are now using the database conditions for ECalEvioReader.java");
         // ID helper.
 //        helper = detector.getSubdetector("Ecal").getDetectorElement().getIdentifierHelper();
+    }
+
+    public void setTopBankTag(int topBankTag) {
+        this.topBankTag = topBankTag;
+
+    }
+
+    public void setBotBankTag(int botBankTag) {
+        this.botBankTag = botBankTag;
     }
 
     @Override
@@ -71,7 +84,13 @@
         for (BaseStructure bank : event.getChildren()) {
             BaseStructureHeader header = bank.getHeader();
             int crateBankTag = header.getTag();
-            if (crateBankTag == EventConstants.ECAL_TOP_BANK_TAG || crateBankTag == EventConstants.ECAL_BOTTOM_BANK_TAG) {
+            int crate = 0;
+            if (crateBankTag == topBankTag) {
+                crate = 1;
+            } else if (crateBankTag == botBankTag) {
+                crate = 2;
+            }
+            if (crateBankTag == topBankTag||crateBankTag == botBankTag) {
                 foundHits = true;
                 if (bank.getChildCount() > 0) {
                     if (debug) {
@@ -79,39 +98,41 @@
                     }
                     try {
                         for (BaseStructure slotBank : bank.getChildren()) {
-                            if (slotBank.getHeader().getTag() == EventConstants.TRIGGER_BANK_TAG) {
-                                if (debug) {
-                                    int[] data = slotBank.getIntData();
-                                    for (int i = 0; i < data.length; i++) {
-                                        System.out.format("0x%x\n", data[i]);
+//                            if (isTriggerBank(slotBank.getHeader().getTag(), lcsimEvent.getRunNumber()) != 0) {
+//                                if (debug) {
+//                                    int[] data = slotBank.getIntData();
+//                                    for (int i = 0; i < data.length; i++) {
+//                                        System.out.format("0x%x\n", data[i]);
+//                                    }
+//                                }
+//                                continue;
+//                            }
+                            if (slotBank.getCompositeData() != null) { //skip SSP and TI banks, if any
+                                for (CompositeData cdata : slotBank.getCompositeData()) {
+//                            CompositeData cdata = slotBank.getCompositeData();
+                                    if (slotBank.getHeader().getTag() != bankTag) {
+                                        bankTag = slotBank.getHeader().getTag();
+                                        System.out.printf("ECal format tag: 0x%x\n", bankTag);
                                     }
-                                }
-                                continue;
-                            }
-                            for (CompositeData cdata : slotBank.getCompositeData()) {
-//                            CompositeData cdata = slotBank.getCompositeData();
-                                if (slotBank.getHeader().getTag() != bankTag) {
-                                    bankTag = slotBank.getHeader().getTag();
-                                    System.out.printf("ECal format tag: 0x%x\n", bankTag);
-                                }
-                                switch (slotBank.getHeader().getTag()) {
-                                    case EventConstants.ECAL_WINDOW_BANK_TAG:
-                                        hits.addAll(makeWindowHits(cdata, crateBankTag));
-                                        hitClass = RawTrackerHit.class;
-                                        flags = 0;
-                                        break;
-                                    case EventConstants.ECAL_PULSE_BANK_TAG:
-                                        hits.addAll(makePulseHits(cdata, crateBankTag));
-                                        hitClass = RawTrackerHit.class;
-                                        flags = 0;
-                                        break;
-                                    case EventConstants.ECAL_PULSE_INTEGRAL_BANK_TAG:
-                                        hits.addAll(makeIntegralHits(cdata, crateBankTag));
-                                        hitClass = BaseRawCalorimeterHit.class;
-                                        flags = (1 << LCIOConstants.RCHBIT_TIME); //store timestamp
-                                        break;
-                                    default:
-                                        throw new RuntimeException("Unsupported ECal format - bank tag " + slotBank.getHeader().getTag());
+                                    switch (slotBank.getHeader().getTag()) {
+                                        case EventConstants.ECAL_WINDOW_BANK_TAG:
+                                            hits.addAll(makeWindowHits(cdata, crate));
+                                            hitClass = RawTrackerHit.class;
+                                            flags = 0;
+                                            break;
+                                        case EventConstants.ECAL_PULSE_BANK_TAG:
+                                            hits.addAll(makePulseHits(cdata, crate));
+                                            hitClass = RawTrackerHit.class;
+                                            flags = 0;
+                                            break;
+                                        case EventConstants.ECAL_PULSE_INTEGRAL_BANK_TAG:
+                                            hits.addAll(makeIntegralHits(cdata, crate));
+                                            hitClass = BaseRawCalorimeterHit.class;
+                                            flags = (1 << LCIOConstants.RCHBIT_TIME); //store timestamp
+                                            break;
+                                        default:
+                                            throw new RuntimeException("Unsupported ECal format - bank tag " + slotBank.getHeader().getTag());
+                                    }
                                 }
                             }
                         }
@@ -160,7 +181,9 @@
                 Long id = daqToGeometryId(crate, slot, channel);
 //                Long id = EcalConditions.daqToPhysicalID(crate, slot, channel);
 
-                System.out.println("The long id is: " + id);
+                if (debug) {
+                    System.out.println("The long id is: " + id);
+                }
 
                 short[] adcValues = new short[nSamples];
                 for (int i = 0; i < nSamples; i++) {

Copied: java/trunk/evio/src/main/java/org/hps/evio/LCSimEngRunEventBuilder.java (from r1425, 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/LCSimEngRunEventBuilder.java	Tue Nov  4 20:49:21 2014
@@ -1,18 +1,7 @@
 package org.hps.evio;
 
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-//import org.hps.conditions.deprecated.EcalConditions;
+import org.hps.readout.ecal.SSPData;
 import org.hps.readout.ecal.TriggerData;
-import org.jlab.coda.jevio.BaseStructure;
-import org.jlab.coda.jevio.EvioEvent;
-import org.lcsim.event.EventHeader;
-import org.lcsim.event.base.BaseLCSimEvent;
-import org.lcsim.geometry.Detector;
 
 /**
  * Build LCSim events from EVIO data.
@@ -22,154 +11,22 @@
  * @version $Id: LCSimTestRunEventBuilder.java,v 1.24 2013/03/01 01:30:25 meeg
  * Exp $
  */
-public class LCSimTestRunEventBuilder implements LCSimEventBuilder {
+public class LCSimEngRunEventBuilder extends LCSimTestRunEventBuilder {
 
-    // Names of subdetectors.
-//    private String trackerName;
-    // Detector conditions object.
-    private Detector detector;
-    // Debug flag.
-    private boolean debug = false;
-    ECalEvioReader ecalReader = null;
-    SVTEvioReader svtReader = null;
-    private int run = 0; //current run number, taken from prestart and end events
-    private long time = 0; //most recent event time (ns), taken from prestart and end events, and trigger banks (if any)
-
-    public LCSimTestRunEventBuilder() {
-        ecalReader = new ECalEvioReader();
-        svtReader = new SVTEvioReader();
+    public LCSimEngRunEventBuilder() {
+        ecalReader.setTopBankTag(0x25);
+        ecalReader.setBotBankTag(0x27);
+        sspCrateBankTag = 0x25;
+        sspBankTag = 0xe10c;
+//        ecalReader = new ECalEvioReader(0x25, 0x27);
+//        svtReader = new SVTEvioReader();
     }
 
-    @Override
-    public void setDetectorName(String detectorName) {
-        // Make a dummy event to setup the conditions system.
-        EventHeader dummyEvent = new BaseLCSimEvent(0, 0, detectorName);
-        detector = dummyEvent.getDetector();
-//        EcalConditions.loadDaqMap(detector, "Ecal");
+    protected TriggerData makeTriggerData(int[] data) {
+        TriggerData triggerData = new SSPData(data);
+        time = ((long) triggerData.getTime()) * 4;
+        return triggerData;
     }
 
-    @Override
-    public void setDebug(boolean debug) {
-        this.debug = debug;
-        ecalReader.setDebug(debug);
-    }
 
-    public void setEcalHitCollectionName(String ecalHitCollectionName) {
-        ecalReader.setHitCollectionName(ecalHitCollectionName);
-    }
-
-    @Override
-    public void readEvioEvent(EvioEvent evioEvent) {
-        if (EventConstants.isSyncEvent(evioEvent)) {
-            int[] data = evioEvent.getIntData();
-            int seconds = data[0];
-            System.out.println("Sync event: time " + seconds + " - " + new Date(((long) seconds) * 1000) + ", event count since last sync " + data[1] + ", event count so far " + data[2] + ", status " + data[3]);
-        } else if (EventConstants.isPreStartEvent(evioEvent)) {
-            int[] data = evioEvent.getIntData();
-            int seconds = data[0];
-            time = ((long) seconds) * 1000000000;
-            run = data[1];
-            System.out.println("Prestart event: time " + seconds + " - " + new Date(((long) seconds) * 1000) + ", run " + run + ", run type " + data[2]);
-        } else if (EventConstants.isGoEvent(evioEvent)) {
-            int[] data = evioEvent.getIntData();
-            int seconds = data[0];
-            time = ((long) seconds) * 1000000000;
-            System.out.println("Go event: time " + seconds + " - " + new Date(((long) seconds) * 1000) + ", event count so far " + data[2]);
-        } else if (EventConstants.isPauseEvent(evioEvent)) {
-            int[] data = evioEvent.getIntData();
-            int seconds = data[0];
-            time = ((long) seconds) * 1000000000;
-            System.out.println("Pause event: time " + seconds + " - " + new Date(((long) seconds) * 1000) + ", event count so far " + data[2]);
-        } else if (EventConstants.isEndEvent(evioEvent)) {
-            int[] data = evioEvent.getIntData();
-            int seconds = data[0];
-            time = ((long) seconds) * 1000000000;
-            run = 0;
-            System.out.println("End event: time " + seconds + " - " + new Date(((long) seconds) * 1000) + ", event count " + data[2]);
-        }
-    }
-
-    @Override
-    public EventHeader makeLCSimEvent(EvioEvent evioEvent) {
-        if (!isPhysicsEvent(evioEvent)) {
-            throw new RuntimeException("Not a physics event: event tag " + evioEvent.getHeader().getTag());
-        }
-
-        // 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 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;
-    }
-
-    @Override
-    public boolean isPhysicsEvent(EvioEvent evioEvent) {
-        return (evioEvent.getHeader().getTag() == EventConstants.PHYSICS_EVENT_TAG);
-    }
-
-    private EventHeader getEventData(EvioEvent evioEvent) {
-        int[] eventID = null;
-        //array of length 3: {event number, trigger code, readout status}
-
-        List<TriggerData> triggerList = new ArrayList<TriggerData>();
-
-        if (evioEvent.getChildCount() > 0) {
-            for (BaseStructure bank : evioEvent.getChildren()) {
-                if (bank.getHeader().getTag() == EventConstants.EVENTID_BANK_TAG) {
-                    eventID = bank.getIntData();
-                }
-                if (bank.getHeader().getTag() == EventConstants.ECAL_TOP_BANK_TAG || bank.getHeader().getTag() == EventConstants.ECAL_BOTTOM_BANK_TAG) {
-                    if (bank.getChildCount() > 0) {
-                        for (BaseStructure slotBank : bank.getChildren()) {
-                            if (slotBank.getHeader().getTag() == EventConstants.TRIGGER_BANK_TAG) {
-                                TriggerData triggerData = new TriggerData(slotBank.getIntData());
-                                time = ((long) triggerData.getTime()) * 1000000000;
-                                triggerList.add(triggerData);
-                            }
-                        }
-                    }
-                }
-            }
-        }
-
-        if (eventID == null) {
-            System.out.println("No event ID bank found");
-            eventID = new int[3];
-        } else {
-            if (debug) {
-                System.out.println("Read EVIO event number " + eventID[0]);
-            }
-            if (eventID[1] != 1) {
-                System.out.println("Trigger code is usually 1; got " + eventID[1]);
-            }
-            if (eventID[2] != 0) {
-                System.out.println("Readout status is usually 0; got " + eventID[2]);
-            }
-        }
-
-        if (triggerList.isEmpty()) {
-            System.out.println("No trigger bank found");
-        } else if (triggerList.size() > 1) {
-            System.out.println("Found multiple trigger banks");
-        }
-
-        // Create a new LCSimEvent.
-        EventHeader lcsimEvent = new BaseLCSimEvent(run, eventID[0], detector.getDetectorName(), time);
-
-        lcsimEvent.put("TriggerBank", triggerList, TriggerData.class, 0);
-        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	Tue Nov  4 20:49:21 2014
@@ -5,8 +5,6 @@
 import java.util.List;
 import java.util.logging.Level;
 import java.util.logging.Logger;
-
-//import org.hps.conditions.deprecated.EcalConditions;
 import org.hps.readout.ecal.TriggerData;
 import org.jlab.coda.jevio.BaseStructure;
 import org.jlab.coda.jevio.EvioEvent;
@@ -27,16 +25,18 @@
     // Names of subdetectors.
 //    private String trackerName;
     // Detector conditions object.
-    private Detector detector;
+    protected Detector detector;
     // Debug flag.
-    private boolean debug = false;
+    protected boolean debug = false;
     ECalEvioReader ecalReader = null;
     SVTEvioReader svtReader = null;
-    private int run = 0; //current run number, taken from prestart and end events
-    private long time = 0; //most recent event time (ns), taken from prestart and end events, and trigger banks (if any)
+    protected int run = 0; //current run number, taken from prestart and end events
+    protected long time = 0; //most recent event time (ns), taken from prestart and end events, and trigger banks (if any)
+    protected int sspCrateBankTag = 0x1; //bank ID of the crate containing the SSP
+    protected int sspBankTag = 0xe106; //SSP bank's tag
 
     public LCSimTestRunEventBuilder() {
-        ecalReader = new ECalEvioReader();
+        ecalReader = new ECalEvioReader(0x1, 0x2);
         svtReader = new SVTEvioReader();
     }
 
@@ -120,27 +120,16 @@
         return (evioEvent.getHeader().getTag() == EventConstants.PHYSICS_EVENT_TAG);
     }
 
-    private EventHeader getEventData(EvioEvent evioEvent) {
+    protected EventHeader getEventData(EvioEvent evioEvent) {
         int[] eventID = null;
         //array of length 3: {event number, trigger code, readout status}
 
-        List<TriggerData> triggerList = new ArrayList<TriggerData>();
+        List<TriggerData> triggerList = getTriggerData(evioEvent);
 
         if (evioEvent.getChildCount() > 0) {
             for (BaseStructure bank : evioEvent.getChildren()) {
                 if (bank.getHeader().getTag() == EventConstants.EVENTID_BANK_TAG) {
                     eventID = bank.getIntData();
-                }
-                if (bank.getHeader().getTag() == EventConstants.ECAL_TOP_BANK_TAG || bank.getHeader().getTag() == EventConstants.ECAL_BOTTOM_BANK_TAG) {
-                    if (bank.getChildCount() > 0) {
-                        for (BaseStructure slotBank : bank.getChildren()) {
-                            if (slotBank.getHeader().getTag() == EventConstants.TRIGGER_BANK_TAG) {
-                                TriggerData triggerData = new TriggerData(slotBank.getIntData());
-                                time = ((long) triggerData.getTime()) * 1000000000;
-                                triggerList.add(triggerData);
-                            }
-                        }
-                    }
                 }
             }
         }
@@ -172,4 +161,30 @@
         lcsimEvent.put("TriggerBank", triggerList, TriggerData.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()));
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        return triggerList;
+    }
+
+    protected TriggerData makeTriggerData(int[] data) {
+        TriggerData triggerData = new TriggerData(data);
+        time = ((long) triggerData.getTime()) * 1000000000;
+        return triggerData;
+    }
+}