Print

Print


Author: [log in to unmask]
Date: Fri Nov  7 20:52:35 2014
New Revision: 1460

Log:
add GenericObject conversion for extra FADC channels

Added:
    java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/FADCGenericHit.java
Modified:
    java/trunk/evio/src/main/java/org/hps/evio/ECalEvioReader.java

Added: java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/FADCGenericHit.java
 =============================================================================
--- java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/FADCGenericHit.java	(added)
+++ java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/FADCGenericHit.java	Fri Nov  7 20:52:35 2014
@@ -0,0 +1,118 @@
+package org.hps.recon.ecal;
+
+import org.lcsim.event.GenericObject;
+
+/**
+ * GenericObject to store hit information for FADC channels not corresponding to
+ * ECal crystals. Intended for scintillator paddles and other hardware plugged
+ * into unused FADC channels.
+ *
+ * @author Sho Uemura <[log in to unmask]>
+ * @version $Id: $
+ */
+public class FADCGenericHit implements GenericObject {
+
+    private final int readoutMode;
+    private final int crate;
+    private final int slot;
+    private final int channel;
+    private final int[] data;
+
+    public FADCGenericHit(int readoutMode, int crate, int slot, int channel, int[] data) {
+        this.readoutMode = readoutMode;
+        this.crate = crate;
+        this.slot = slot;
+        this.channel = channel;
+        this.data = data;
+    }
+
+    @Override
+    public int getNInt() {
+        return 4 + data.length;
+    }
+
+    @Override
+    public int getNFloat() {
+        return 0;
+    }
+
+    @Override
+    public int getNDouble() {
+        return 0;
+    }
+
+    @Override
+    public int getIntVal(int i) {
+        switch (i) {
+            case 0:
+                return readoutMode;
+            case 1:
+                return crate;
+            case 2:
+                return slot;
+            case 3:
+                return channel;
+            default:
+                return data[i-4];
+        }
+    }
+
+    @Override
+    public float getFloatVal(int i) {
+        throw new ArrayIndexOutOfBoundsException();
+    }
+
+    @Override
+    public double getDoubleVal(int i) {
+        throw new ArrayIndexOutOfBoundsException();
+    }
+
+    @Override
+    public boolean isFixedSize() {
+        return true;
+    }
+
+    public int getReadoutMode() {
+        return readoutMode;
+    }
+
+    public int getCrate() {
+        return crate;
+    }
+
+    public int getSlot() {
+        return slot;
+    }
+
+    public int getChannel() {
+        return channel;
+    }
+
+    public int[] getData() {
+        return data;
+    }
+
+    public static int getReadoutMode(GenericObject object) {
+        return object.getIntVal(0);
+    }
+
+    public static int getCrate(GenericObject object) {
+        return object.getIntVal(1);
+    }
+
+    public static int getSlot(GenericObject object) {
+        return object.getIntVal(2);
+    }
+
+    public static int getChannel(GenericObject object) {
+        return object.getIntVal(3);
+    }
+
+    public static int[] getData(GenericObject object) {
+        int[] data = new int[object.getNInt()-4];
+        for (int i=0;i<data.length;i++) {
+            data[i] = object.getIntVal(i+4);
+        }
+        return data;
+    }
+}

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	Fri Nov  7 20:52:35 2014
@@ -2,23 +2,23 @@
 
 import java.util.ArrayList;
 import java.util.List;
-
 import org.hps.conditions.DatabaseConditionsManager;
 import org.hps.conditions.TableConstants;
 import org.hps.conditions.ecal.EcalChannel;
 import org.hps.conditions.ecal.EcalChannel.DaqId;
 import org.hps.conditions.ecal.EcalChannel.GeometryId;
 import org.hps.conditions.ecal.EcalConditions;
-import org.lcsim.conditions.ConditionsManager;
-import org.lcsim.detector.identifier.IIdentifierHelper;
-import org.lcsim.detector.identifier.Identifier;
-//import org.hps.conditions.deprecated.EcalConditions;
+import org.hps.recon.ecal.FADCGenericHit;
 import org.jlab.coda.jevio.BaseStructure;
 import org.jlab.coda.jevio.BaseStructureHeader;
 import org.jlab.coda.jevio.CompositeData;
 import org.jlab.coda.jevio.EvioEvent;
 import org.jlab.coda.jevio.EvioException;
+import org.lcsim.conditions.ConditionsManager;
+import org.lcsim.detector.identifier.IIdentifierHelper;
+import org.lcsim.detector.identifier.Identifier;
 import org.lcsim.event.EventHeader;
+import org.lcsim.event.GenericObject;
 import org.lcsim.event.RawTrackerHit;
 import org.lcsim.event.SimTrackerHit;
 import org.lcsim.event.base.BaseRawCalorimeterHit;
@@ -43,6 +43,9 @@
 //    private Detector detector;
     private Subdetector subDetector;
 
+    private static final String genericHitCollectionName = "FADCGenericHits";
+    private List<FADCGenericHit> genericHits;
+
     private static EcalConditions ecalConditions = null;
     private static IIdentifierHelper helper = null;
 
@@ -70,6 +73,7 @@
     public boolean makeHits(EvioEvent event, EventHeader lcsimEvent) {
         boolean foundHits = false;
         List<Object> hits = new ArrayList<Object>();
+        genericHits = new ArrayList<FADCGenericHit>();
         hitClass = Object.class;
         int flags = 0;
         for (BaseStructure bank : event.getChildren()) {
@@ -81,7 +85,7 @@
             } else if (crateBankTag == botBankTag) {
                 crate = 2;
             }
-            if (crateBankTag == topBankTag||crateBankTag == botBankTag) {
+            if (crateBankTag == topBankTag || crateBankTag == botBankTag) {
                 foundHits = true;
                 if (bank.getChildCount() > 0) {
                     if (debug) {
@@ -135,6 +139,7 @@
         }
 //        String readoutName = ;
         lcsimEvent.put(hitCollectionName, hits, hitClass, flags, readoutName);
+        lcsimEvent.put(genericHitCollectionName, genericHits, FADCGenericHit.class, 0);
 //        for (Object hit : hits) {
 //            System.out.println(((RawTrackerHit) hit).getIDDecoder().getIDDescription().toString());
 //        }
@@ -182,6 +187,11 @@
                 }
                 if (id == null) {
                     System.out.printf("Crate %d, slot %d, channel %d not found in map\n", crate, slot, channel);
+                    int[] data = new int[adcValues.length];
+                    for (int i = 0; i < adcValues.length; i++) {
+                        data[i] = adcValues[i];
+                    }
+                    genericHits.add(new FADCGenericHit(EventConstants.ECAL_WINDOW_MODE, crate, slot, channel, data));
                 } else {
                     hits.add(new BaseRawTrackerHit(
                             0,
@@ -245,6 +255,11 @@
                     }
                     if (id == null) {
                         System.out.printf("Crate %d, slot %d, channel %d not found in map\n", crate, slot, channel);
+                        int[] data = new int[adcValues.length];
+                        for (int i = 0; i < adcValues.length; i++) {
+                            data[i] = adcValues[i];
+                        }
+                        genericHits.add(new FADCGenericHit(EventConstants.ECAL_PULSE_MODE, crate, slot, channel, data));
                     } else {
                         hits.add(new BaseRawTrackerHit(pulseNum, id, adcValues, new ArrayList<SimTrackerHit>(), subDetector.getDetectorElement().findDetectorElement(new Identifier(id)).get(0)));
                     }
@@ -290,6 +305,8 @@
                     }
                     if (id == null) {
                         System.out.printf("Crate %d, slot %d, channel %d not found in map\n", crate, slot, channel);
+                        int[] data = {pulseIntegral, pulseTime};
+                        genericHits.add(new FADCGenericHit(EventConstants.ECAL_PULSE_INTEGRAL_MODE, crate, slot, channel, data));
                     } else {
                         hits.add(new BaseRawCalorimeterHit(id, pulseIntegral, pulseTime));
                     }
@@ -298,10 +315,10 @@
         }
         return hits;
     }
-    
+
     void initialize() {
         subDetector = DatabaseConditionsManager.getInstance().getDetectorObject().getSubdetector(subdetectorName);
-        
+
         // ECAL combined conditions object.
         ecalConditions = ConditionsManager.defaultInstance()
                 .getCachedConditions(EcalConditions.class, TableConstants.ECAL_CONDITIONS).getCachedData();