3 modified files
GeomConverter/src/org/lcsim/detector/identifier
diff -u -r1.9 -r1.10
--- IIdentifierHelper.java 23 Mar 2009 17:43:17 -0000 1.9
+++ IIdentifierHelper.java 9 Sep 2009 00:33:07 -0000 1.10
@@ -1,5 +1,7 @@
package org.lcsim.detector.identifier;
+import java.util.List;
+
/**
* This class has a reference to a single {@link IIdentifierDictionary}
* that specifies the fields for a 64-bit {@link IIdentifier}.
@@ -23,7 +25,7 @@
* @see IIdentifierDictionary
*
* @author Jeremy McCormick
- * @version $Id: IIdentifierHelper.java,v 1.9 2009/03/23 17:43:17 jeremy Exp $
+ * @version $Id: IIdentifierHelper.java,v 1.10 2009/09/09 00:33:07 jeremy Exp $
*/
public interface IIdentifierHelper
@@ -123,7 +125,7 @@
public IExpandedIdentifier unpack(IIdentifier id, int startIndex, int endIndex );
/**
- * Upack the {@link IIdentifier} into an {@link IExpandedIdentifier}
+ * Unpack the {@link IIdentifier} into an {@link IExpandedIdentifier}
* containing the fields starting at index start and
* unpacking all fields to the end. The {@link IExpandedIdentifier} is
* padded with zero values to match the full specification in the
@@ -134,6 +136,17 @@
* @return An ExpandedIdentifier with the unpacked values.
*/
public IExpandedIdentifier unpack(IIdentifier id, int startIndex);
+
+ /**
+ * Unpack {@link IIdentifier} into an {@link IExpandedIdentifier},
+ * ignoring fields that are not in the list of indices. Fields
+ * not in the list are given a value of 0.
+ * @param iddict The IIdentifierDictionary.
+ * @param compact The identifier.
+ * @param indices The list of indices.
+ * @return
+ */
+ public IExpandedIdentifier unpack(IIdentifier compact, List<Integer> indices);
/**
* Wraps {@link IIdentifierDictionary#getFieldIndex(String)}.
GeomConverter/src/org/lcsim/detector/identifier
diff -u -r1.14 -r1.15
--- IdentifierHelper.java 23 Mar 2009 17:43:17 -0000 1.14
+++ IdentifierHelper.java 9 Sep 2009 00:33:07 -0000 1.15
@@ -1,11 +1,13 @@
package org.lcsim.detector.identifier;
+import java.util.List;
+
/**
*
* Implementation of {@link IIdentifierHelper}.
*
* @author Jeremy McCormick
- * @version $Id: IdentifierHelper.java,v 1.14 2009/03/23 17:43:17 jeremy Exp $
+ * @version $Id: IdentifierHelper.java,v 1.15 2009/09/09 00:33:07 jeremy Exp $
*/
public class IdentifierHelper
@@ -23,6 +25,11 @@
return IdentifierUtil.unpack( iddict, id, start );
}
+ public IExpandedIdentifier unpack(IIdentifier compact, List<Integer> indices)
+ {
+ return IdentifierUtil.unpack(iddict, compact, indices);
+ }
+
public IdentifierHelper( IIdentifierDictionary iddict )
{
this.iddict = iddict;
GeomConverter/src/org/lcsim/detector/identifier
diff -u -r1.8 -r1.9
--- IdentifierUtil.java 11 Dec 2007 07:27:52 -0000 1.8
+++ IdentifierUtil.java 9 Sep 2009 00:33:07 -0000 1.9
@@ -1,5 +1,7 @@
package org.lcsim.detector.identifier;
+import java.util.List;
+
/**
* Identifier utility methods for packing {@link IIdentifier}s and
* unpacking {@link IExpandedIdentifier}s using information from an
@@ -15,7 +17,7 @@
* @see IExpandedIdentifier
*
* @author Jeremy McCormick
- * @version $Id: IdentifierUtil.java,v 1.8 2007/12/11 07:27:52 jeremy Exp $
+ * @version $Id: IdentifierUtil.java,v 1.9 2009/09/09 00:33:07 jeremy Exp $
*/
public final class IdentifierUtil
{
@@ -93,6 +95,41 @@
return buffer;
}
+ public static IExpandedIdentifier unpack(IIdentifierDictionary iddict, IIdentifier compact, List<Integer> indices)
+ {
+ ExpandedIdentifier buffer = new ExpandedIdentifier();
+
+ long id = compact.getValue();
+
+ for ( int i=0; i<iddict.getNumberOfFields(); i++)
+ {
+ if (indices.contains(i))
+ {
+ IIdentifierField field = iddict.getField(i);
+
+ int start = field.getOffset();
+ int length = field.getNumberOfBits();
+ int mask = field.getIntegerMask();
+
+ int result = (int) ((id >> start) & mask);
+ if (field.isSigned())
+ {
+ int signBit = 1<<(length-1);
+ if ((result & signBit) != 0) result -= (1<<length);
+ }
+
+ buffer.addValue(result);
+ }
+ else
+ {
+ buffer.addValue(0);
+ }
+ }
+
+ return buffer;
+ }
+
+
public static int getValue( IIdentifier compact, IIdentifierField desc )
{
CVSspam 0.2.8