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();
|