Author: [log in to unmask]
Date: Wed Jul 29 17:51:28 2015
New Revision: 3652
Log:
Add support for setting event header parameters. Also apply formatting.
Modified:
projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/base/BaseLCSimEvent.java
Modified: projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/base/BaseLCSimEvent.java
=============================================================================
--- projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/base/BaseLCSimEvent.java (original)
+++ projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/base/BaseLCSimEvent.java Wed Jul 29 17:51:28 2015
@@ -4,7 +4,6 @@
import java.util.ArrayList;
import java.util.Collection;
-import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.IdentityHashMap;
@@ -26,207 +25,23 @@
/**
* A base implementation for EventHeader
+ *
* @author Tony Johnson
*/
public class BaseLCSimEvent extends BaseEvent implements EventHeader {
- private String detectorName;
- private final Map<List, LCMetaData> metaDataMap = new IdentityHashMap<List, LCMetaData>();
- private ConditionsManager conditionsManager = ConditionsManager.defaultInstance();
- private static final int NANO_SECONDS = 1000000;
- public static final String READOUT_NAME = "ReadoutName";
-
- /** Creates a new instance of BaseLCSimEvent */
- public BaseLCSimEvent(int run, int event, String detectorName) {
- this(run, event, detectorName, System.currentTimeMillis() * NANO_SECONDS);
- }
-
- public BaseLCSimEvent(int run, int event, String detectorName, long timeStamp) {
- super(run, event, timeStamp);
- this.detectorName = detectorName;
- try {
- conditionsManager.setDetector(detectorName, run);
- } catch (ConditionsNotFoundException x) {
- throw new RuntimeException(x);
- }
- }
-
- public BaseLCSimEvent(int run, int event, String detectorName, long timeStamp, boolean triggerConditionsUpdate) {
- super(run, event, timeStamp);
- this.detectorName = detectorName;
- if (triggerConditionsUpdate) {
- try {
- conditionsManager.setDetector(detectorName, run);
- } catch (ConditionsNotFoundException x) {
- throw new RuntimeException(x);
- }
- }
- }
-
- // public String getInputFile()
- // {
- // return (String)get("INPUT_FILE");
- // }
-
- public String toString() {
- return "Run " + getRunNumber() + " Event " + getEventNumber() + " (" + new Date(getTimeStamp() / NANO_SECONDS) + ") Detector: " + detectorName;
- }
-
- public Detector getDetector() {
- return conditionsManager.getCachedConditions(Detector.class, "compact.xml").getCachedData();
- }
-
- public List<MCParticle> getMCParticles() {
- return get(MCParticle.class, MC_PARTICLES);
- }
-
- public <T> List<T> get(Class<T> type, String name) {
- return (List<T>) get(name);
- }
-
- public <T> List<List<T>> get(Class<T> type) {
- List<List<T>> result = new ArrayList<List<T>>();
- for (Map.Entry<List, LCMetaData> entry : metaDataMap.entrySet()) {
- if (type.isAssignableFrom(entry.getValue().getType())) {
- result.add(entry.getKey());
- }
- }
- return result;
- }
-
- public Collection<LCMetaData> getMetaData() {
- return metaDataMap.values();
- }
-
- public Set<List> getLists() {
- return metaDataMap.keySet();
- }
-
- public LCMetaData getMetaData(List x) {
- return metaDataMap.get(x);
- }
-
- public void put(String name, Object component) {
- // Check if collection exists already which is an error.
- if (hasItem(name)) {
- throw new IllegalArgumentException("An item called " + name + " already exists in the event.");
- }
- super.put(name, component);
- if (component instanceof List) {
- List list = (List) component;
- Class type = list.isEmpty() ? Object.class : list.get(0).getClass();
- for (Object o : list) {
- if (!type.isAssignableFrom(o.getClass()))
- type = Object.class;
- }
- metaDataMap.put(list, new MetaData(name, type, 0, null));
- }
- }
-
- public void put(String name, List collection, Class type, int flags) {
- put(name, collection, type, flags, null);
- }
-
- public void put(String name, List collection, Class type, int flags, String readoutName) {
- super.put(name, collection);
-
- LCMetaData meta = new MetaData(name, type, flags, readoutName);
- metaDataMap.put(collection, meta);
-
- setCollectionMetaData(collection, type, meta);
- }
-
- private void setCollectionMetaData(List collection, Class type, LCMetaData meta) {
- // Set MetaData on collection objects if necessary.
- if (Hit.class.isAssignableFrom(type)) {
- for (Object o : collection) {
- Hit hit = (Hit) o;
- if (hit.getMetaData() == null) {
- ((Hit) o).setMetaData(meta);
- }
- }
- }
- }
-
- public void put(String name, List collection, Class type, int flags, Map intMap, Map floatMap, Map stringMap) {
- super.put(name, collection);
- LCMetaData meta = new MetaData(name, type, flags, intMap, floatMap, stringMap);
- metaDataMap.put(collection, meta);
- }
-
- /**
- * Removes a collection from the event.
- */
- public void remove(String name) {
- Object collection = get(name);
- if (collection instanceof List)
- metaDataMap.remove((List) collection);
- super.keys().remove(name);
- }
-
- public String getDetectorName() {
- return detectorName;
- }
-
- public boolean hasCollection(Class type, String name) {
- if (!hasItem(name))
- return false;
- Object collection = get(name);
- if (!(collection instanceof List))
- return false;
- return type.isAssignableFrom(metaDataMap.get(collection).getType());
- }
-
- public boolean hasCollection(Class type) {
- for (LCMetaData meta : metaDataMap.values()) {
- if (type.isAssignableFrom(meta.getType())) {
- return true;
- }
- }
- return false;
- }
-
- public boolean hasItem(String name) {
- return super.keys().contains(name);
- }
-
- public Map<String, int[]> getIntegerParameters() {
- return Collections.<String, int[]> emptyMap();
-
- }
-
- public Map<String, float[]> getFloatParameters() {
- return Collections.<String, float[]> emptyMap();
-
- }
-
- public Map<String, String[]> getStringParameters() {
- return Collections.<String, String[]> emptyMap();
- }
-
- public float getWeight() {
- return 1.0f;
- }
-
private class MetaData implements LCMetaData {
+ private transient IDDecoder dec;
private int flags;
+ private Map<String, float[]> floatMap;
+ private Map<String, int[]> intMap;
private final String name;
+ private Map<String, String[]> stringMap;
private final Class type;
- private Map<String, int[]> intMap;
- private Map<String, float[]> floatMap;
- private Map<String, String[]> stringMap;
- private transient IDDecoder dec;
-
- MetaData(String name, Class type, int flags, String readoutName) {
- this.name = name;
- this.type = type;
- this.flags = flags;
- if (readoutName != null)
- getStringParameters().put(READOUT_NAME, new String[] { readoutName });
- }
-
- MetaData(String name, Class type, int flags, Map intMap, Map floatMap, Map stringMap) {
+
+ MetaData(final String name, final Class type, final int flags, final Map intMap, final Map floatMap,
+ final Map stringMap) {
this.name = name;
this.type = type;
this.flags = flags;
@@ -235,22 +50,33 @@
this.stringMap = stringMap;
}
- public int getFlags() {
- return flags;
- }
-
- public String getName() {
- return name;
- }
-
- public Class getType() {
- return type;
- }
-
- public org.lcsim.geometry.IDDecoder getIDDecoder() {
- if (dec == null)
- dec = findIDDecoder();
- return dec;
+ MetaData(final String name, final Class type, final int flags, final String readoutName) {
+ this.name = name;
+ this.type = type;
+ this.flags = flags;
+ if (readoutName != null) {
+ this.getStringParameters().put(READOUT_NAME, new String[] {readoutName});
+ }
+ }
+
+ /**
+ * Make an IDDecoder for this MetaData using the CellIDEncoding parameter.
+ *
+ * @return An IDDecoder made built from the CellIDEncoding.
+ */
+ private IDDecoder createIDDecoderFromCellIDEncoding() {
+ final String[] cellIdEncoding = this.getStringParameters().get("CellIDEncoding");
+ IDDecoder result = null;
+ if (cellIdEncoding != null) {
+ result = new BaseIDDecoder();
+ try {
+ final IDDescriptor desc = new IDDescriptor(cellIdEncoding[0]);
+ result.setIDDescription(desc);
+ } catch (final IDDescriptor.IDException x) {
+ throw new RuntimeException(x);
+ }
+ }
+ return result;
}
public org.lcsim.geometry.IDDecoder findIDDecoder() {
@@ -258,84 +84,308 @@
// use the name of the collection itself.
String readoutName = name;
if (stringMap != null) {
- String[] names = stringMap.get(READOUT_NAME);
- if (names != null && names.length >= 1)
+ final String[] names = stringMap.get(READOUT_NAME);
+ if (names != null && names.length >= 1) {
readoutName = names[0];
+ }
}
// Find the IDDecoder using the Detector.
org.lcsim.geometry.IDDecoder result = null;
try {
- result = getDetector().getDecoder(readoutName);
- } catch (RuntimeException x) {
+ result = BaseLCSimEvent.this.getDetector().getDecoder(readoutName);
+ } catch (final RuntimeException x) {
}
// Detector lookup failed. Attempt to use the CellIDEncoding collection parameter.
- if (result == null)
- result = createIDDecoderFromCellIDEncoding();
+ if (result == null) {
+ result = this.createIDDecoderFromCellIDEncoding();
+ }
// If both methods failed, then there is a problem.
- //if (result == null)
- // throw new RuntimeException("Could not find or create an IDDecoder for the collection: " + name + ", readout: " + readoutName);
+ // if (result == null)
+ // throw new RuntimeException("Could not find or create an IDDecoder for the collection: " + name +
+ // ", readout: " + readoutName);
return result;
}
- /**
- * Make an IDDecoder for this MetaData using the CellIDEncoding parameter.
- * @return An IDDecoder made built from the CellIDEncoding.
- */
- private IDDecoder createIDDecoderFromCellIDEncoding() {
- String[] cellIdEncoding = getStringParameters().get("CellIDEncoding");
- IDDecoder result = null;
- if (cellIdEncoding != null) {
- result = new BaseIDDecoder();
- try {
- IDDescriptor desc = new IDDescriptor(cellIdEncoding[0]);
- result.setIDDescription(desc);
- } catch (IDDescriptor.IDException x) {
- throw new RuntimeException(x);
- }
- }
- return result;
- }
-
- public Map<String, int[]> getIntegerParameters() {
- if (intMap == null)
- intMap = new HashMap<String, int[]>();
- return intMap;
- }
-
- public Map<String, float[]> getFloatParameters() {
- if (floatMap == null)
- floatMap = new HashMap<String, float[]>();
- return floatMap;
- }
-
- public Map<String, String[]> getStringParameters() {
- if (stringMap == null)
- stringMap = new HashMap<String, String[]>();
- return stringMap;
- }
-
+ @Override
public EventHeader getEvent() {
return BaseLCSimEvent.this;
}
- public void setSubset(boolean isSubset) {
- flags = LCIOUtil.bitSet(flags, LCIOConstants.BITSubset, isSubset);
- }
-
+ @Override
+ public int getFlags() {
+ return flags;
+ }
+
+ @Override
+ public Map<String, float[]> getFloatParameters() {
+ if (floatMap == null) {
+ floatMap = new HashMap<String, float[]>();
+ }
+ return floatMap;
+ }
+
+ @Override
+ public org.lcsim.geometry.IDDecoder getIDDecoder() {
+ if (dec == null) {
+ dec = this.findIDDecoder();
+ }
+ return dec;
+ }
+
+ @Override
+ public Map<String, int[]> getIntegerParameters() {
+ if (intMap == null) {
+ intMap = new HashMap<String, int[]>();
+ }
+ return intMap;
+ }
+
+ @Override
+ public String getName() {
+ return name;
+ }
+
+ @Override
+ public Map<String, String[]> getStringParameters() {
+ if (stringMap == null) {
+ stringMap = new HashMap<String, String[]>();
+ }
+ return stringMap;
+ }
+
+ @Override
+ public Class getType() {
+ return type;
+ }
+
+ @Override
public boolean isSubset() {
return LCIOUtil.bitTest(flags, LCIOConstants.BITSubset);
}
- public void setTransient(boolean isTransient) {
- flags = LCIOUtil.bitSet(flags, LCIOConstants.BITTransient, isTransient);
- }
-
+ @Override
public boolean isTransient() {
return LCIOUtil.bitTest(flags, LCIOConstants.BITTransient);
}
+
+ @Override
+ public void setSubset(final boolean isSubset) {
+ flags = LCIOUtil.bitSet(flags, LCIOConstants.BITSubset, isSubset);
+ }
+
+ @Override
+ public void setTransient(final boolean isTransient) {
+ flags = LCIOUtil.bitSet(flags, LCIOConstants.BITTransient, isTransient);
+ }
+ }
+
+ private static final int NANO_SECONDS = 1000000;
+ public static final String READOUT_NAME = "ReadoutName";
+ private final ConditionsManager conditionsManager = ConditionsManager.defaultInstance();
+
+ private final String detectorName;
+ private final Map<String, float[]> floatParameters = new HashMap<String, float[]>();
+ private final Map<String, int[]> intParameters = new HashMap<String, int[]>();
+ private final Map<String, String[]> stringParameters = new HashMap<String, String[]>();
+
+ private final Map<List, LCMetaData> metaDataMap = new IdentityHashMap<List, LCMetaData>();
+
+ /** Creates a new instance of BaseLCSimEvent */
+ public BaseLCSimEvent(final int run, final int event, final String detectorName) {
+ this(run, event, detectorName, System.currentTimeMillis() * NANO_SECONDS);
+ }
+
+ public BaseLCSimEvent(final int run, final int event, final String detectorName, final long timeStamp) {
+ super(run, event, timeStamp);
+ this.detectorName = detectorName;
+ try {
+ conditionsManager.setDetector(detectorName, run);
+ } catch (final ConditionsNotFoundException x) {
+ throw new RuntimeException(x);
+ }
+ }
+
+ public BaseLCSimEvent(final int run, final int event, final String detectorName, final long timeStamp,
+ final boolean triggerConditionsUpdate) {
+ super(run, event, timeStamp);
+ this.detectorName = detectorName;
+ if (triggerConditionsUpdate) {
+ try {
+ conditionsManager.setDetector(detectorName, run);
+ } catch (final ConditionsNotFoundException x) {
+ throw new RuntimeException(x);
+ }
+ }
+ }
+
+ @Override
+ public <T> List<List<T>> get(final Class<T> type) {
+ final List<List<T>> result = new ArrayList<List<T>>();
+ for (final Map.Entry<List, LCMetaData> entry : metaDataMap.entrySet()) {
+ if (type.isAssignableFrom(entry.getValue().getType())) {
+ result.add(entry.getKey());
+ }
+ }
+ return result;
+ }
+
+ @Override
+ public <T> List<T> get(final Class<T> type, final String name) {
+ return (List<T>) this.get(name);
+ }
+
+ @Override
+ public Detector getDetector() {
+ return conditionsManager.getCachedConditions(Detector.class, "compact.xml").getCachedData();
+ }
+
+ @Override
+ public String getDetectorName() {
+ return detectorName;
+ }
+
+ @Override
+ public Map<String, float[]> getFloatParameters() {
+ return floatParameters;
+ }
+
+ @Override
+ public Map<String, int[]> getIntegerParameters() {
+ return intParameters;
+
+ }
+
+ @Override
+ public Set<List> getLists() {
+ return metaDataMap.keySet();
+ }
+
+ @Override
+ public List<MCParticle> getMCParticles() {
+ return this.get(MCParticle.class, MC_PARTICLES);
+ }
+
+ @Override
+ public Collection<LCMetaData> getMetaData() {
+ return metaDataMap.values();
+ }
+
+ @Override
+ public LCMetaData getMetaData(final List x) {
+ return metaDataMap.get(x);
+ }
+
+ @Override
+ public Map<String, String[]> getStringParameters() {
+ return stringParameters;
+ }
+
+ @Override
+ public float getWeight() {
+ return 1.0f;
+ }
+
+ @Override
+ public boolean hasCollection(final Class type) {
+ for (final LCMetaData meta : metaDataMap.values()) {
+ if (type.isAssignableFrom(meta.getType())) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ @Override
+ public boolean hasCollection(final Class type, final String name) {
+ if (!this.hasItem(name)) {
+ return false;
+ }
+ final Object collection = this.get(name);
+ if (!(collection instanceof List)) {
+ return false;
+ }
+ return type.isAssignableFrom(metaDataMap.get(collection).getType());
+ }
+
+ @Override
+ public boolean hasItem(final String name) {
+ return super.keys().contains(name);
+ }
+
+ @Override
+ public void put(final String name, final List collection, final Class type, final int flags) {
+ this.put(name, collection, type, flags, null);
+ }
+
+ @Override
+ public void put(final String name, final List collection, final Class type, final int flags, final Map intMap,
+ final Map floatMap, final Map stringMap) {
+ super.put(name, collection);
+ final LCMetaData meta = new MetaData(name, type, flags, intMap, floatMap, stringMap);
+ metaDataMap.put(collection, meta);
+ }
+
+ @Override
+ public void put(final String name, final List collection, final Class type, final int flags,
+ final String readoutName) {
+ super.put(name, collection);
+
+ final LCMetaData meta = new MetaData(name, type, flags, readoutName);
+ metaDataMap.put(collection, meta);
+
+ this.setCollectionMetaData(collection, type, meta);
+ }
+
+ @Override
+ public void put(final String name, final Object component) {
+ // Check if collection exists already which is an error.
+ if (this.hasItem(name)) {
+ throw new IllegalArgumentException("An item called " + name + " already exists in the event.");
+ }
+ super.put(name, component);
+ if (component instanceof List) {
+ final List list = (List) component;
+ Class type = list.isEmpty() ? Object.class : list.get(0).getClass();
+ for (final Object o : list) {
+ if (!type.isAssignableFrom(o.getClass())) {
+ type = Object.class;
+ }
+ }
+ metaDataMap.put(list, new MetaData(name, type, 0, null));
+ }
+ }
+
+ /**
+ * Removes a collection from the event.
+ */
+ @Override
+ public void remove(final String name) {
+ final Object collection = this.get(name);
+ if (collection instanceof List) {
+ metaDataMap.remove(collection);
+ }
+ super.keys().remove(name);
+ }
+
+ private void setCollectionMetaData(final List collection, final Class type, final LCMetaData meta) {
+ // Set MetaData on collection objects if necessary.
+ if (Hit.class.isAssignableFrom(type)) {
+ for (final Object o : collection) {
+ final Hit hit = (Hit) o;
+ if (hit.getMetaData() == null) {
+ ((Hit) o).setMetaData(meta);
+ }
+ }
+ }
+ }
+
+ @Override
+ public String toString() {
+ return "Run " + this.getRunNumber() + " Event " + this.getEventNumber() + " ("
+ + new Date(this.getTimeStamp() / NANO_SECONDS) + ") Detector: " + detectorName;
}
}
########################################################################
Use REPLY-ALL to reply to list
To unsubscribe from the LCDET-SVN list, click the following link:
https://listserv.slac.stanford.edu/cgi-bin/wa?SUBED1=LCDET-SVN&A=1
|