LISTSERV mailing list manager LISTSERV 16.5

Help for LCDET-SVN Archives


LCDET-SVN Archives

LCDET-SVN Archives


LCDET-SVN@LISTSERV.SLAC.STANFORD.EDU


View:

Message:

[

First

|

Previous

|

Next

|

Last

]

By Topic:

[

First

|

Previous

|

Next

|

Last

]

By Author:

[

First

|

Previous

|

Next

|

Last

]

Font:

Proportional Font

LISTSERV Archives

LISTSERV Archives

LCDET-SVN Home

LCDET-SVN Home

LCDET-SVN  December 2014

LCDET-SVN December 2014

Subject:

r3462 - in /projects/lcsim/trunk: cal-recon/src/test/java/org/lcsim/recon/cluster/localequivalence/ event-model/src/main/java/org/lcsim/event/ event-model/src/main/java/org/lcsim/event/base/ event-model/src/main/java/org/lcsim/lcio/ recon-drivers/src/main/java/org/lcsim/recon/calorimetry/ recon-drivers/src/main/java/org/lcsim/util/ tracking/src/main/java/org/lcsim/recon/tracking/digitization/sisim/config/

From:

[log in to unmask]

Reply-To:

Notification of commits to the lcdet svn repository <[log in to unmask]>

Date:

Wed, 17 Dec 2014 10:09:57 -0000

Content-Type:

text/plain

Parts/Attachments:

Parts/Attachments

text/plain (1980 lines)

Author: [log in to unmask]
Date: Wed Dec 17 02:09:46 2014
New Revision: 3462

Log:
Cleanup base classes in event package.  Make sure LCMetaData is handled better when reading from LCIO.  Make LCMetaData required in base class constructors.  (And other minor changes and improvements.)

Added:
    projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/HasPosition.java
Removed:
    projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/HitWithPosition.java
    projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/base/BaseHitWithPosition.java
Modified:
    projects/lcsim/trunk/cal-recon/src/test/java/org/lcsim/recon/cluster/localequivalence/NNAlgoTest.java
    projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/CalorimeterHit.java
    projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/EventHeader.java
    projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/HasMetaData.java
    projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/Hit.java
    projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/RawTrackerHit.java
    projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/SimTrackerHit.java
    projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/base/BaseCalorimeterHit.java
    projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/base/BaseHit.java
    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/BaseRawCalorimeterHit.java
    projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/base/BaseRawTrackerHit.java
    projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/base/BaseSimCalorimeterHit.java
    projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/base/BaseSimTrackerHit.java
    projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/base/BaseTrackerHit.java
    projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/base/SamplingFractionManager.java
    projects/lcsim/trunk/event-model/src/main/java/org/lcsim/lcio/SIOCalorimeterHit.java
    projects/lcsim/trunk/event-model/src/main/java/org/lcsim/lcio/SIORawTrackerHit.java
    projects/lcsim/trunk/event-model/src/main/java/org/lcsim/lcio/SIOSimCalorimeterHit.java
    projects/lcsim/trunk/event-model/src/main/java/org/lcsim/lcio/SIOSimTrackerHit.java
    projects/lcsim/trunk/recon-drivers/src/main/java/org/lcsim/recon/calorimetry/ResetCalorimeterHitEnergy.java
    projects/lcsim/trunk/recon-drivers/src/main/java/org/lcsim/util/MergeEventTools.java
    projects/lcsim/trunk/recon-drivers/src/main/java/org/lcsim/util/OverlayDriver.java
    projects/lcsim/trunk/tracking/src/main/java/org/lcsim/recon/tracking/digitization/sisim/config/SimTrackerHitReadoutDriver.java

Modified: projects/lcsim/trunk/cal-recon/src/test/java/org/lcsim/recon/cluster/localequivalence/NNAlgoTest.java
 =============================================================================
--- projects/lcsim/trunk/cal-recon/src/test/java/org/lcsim/recon/cluster/localequivalence/NNAlgoTest.java	(original)
+++ projects/lcsim/trunk/cal-recon/src/test/java/org/lcsim/recon/cluster/localequivalence/NNAlgoTest.java	Wed Dec 17 02:09:46 2014
@@ -252,7 +252,6 @@
         throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
     }
 
-    @Override
     public void setMetaData(EventHeader.LCMetaData meta)
     {
         throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.

Modified: projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/CalorimeterHit.java
 =============================================================================
--- projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/CalorimeterHit.java	(original)
+++ projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/CalorimeterHit.java	Wed Dec 17 02:09:46 2014
@@ -14,7 +14,7 @@
  * @author Tony Johnson <[log in to unmask]>
  * @author Jeremy McCormick <[log in to unmask]>
  */
-public interface CalorimeterHit extends HitWithPosition {
+public interface CalorimeterHit extends Hit {
     
    /**
     * Get the raw energy deposition in GeV.

Modified: projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/EventHeader.java
 =============================================================================
--- projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/EventHeader.java	(original)
+++ projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/EventHeader.java	Wed Dec 17 02:09:46 2014
@@ -18,11 +18,6 @@
  */
 public interface EventHeader extends MCEvent
 {
-    /**
-     * Get the path to the file source for this event.
-     */
-    //String getInputFile();
-
     /**
      * Get the list of MC particles associated with this event.
      */

Modified: projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/HasMetaData.java
 =============================================================================
--- projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/HasMetaData.java	(original)
+++ projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/HasMetaData.java	Wed Dec 17 02:09:46 2014
@@ -12,7 +12,7 @@
 public interface HasMetaData 
 {
     public LCMetaData getMetaData();
-    public void setMetaData(LCMetaData meta);
+    //protected void setMetaData(LCMetaData meta);
 
     // from LCMetaData
     public Subdetector getSubdetector();

Added: projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/HasPosition.java
 =============================================================================
--- projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/HasPosition.java	(added)
+++ projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/HasPosition.java	Wed Dec 17 02:09:46 2014
@@ -0,0 +1,10 @@
+package org.lcsim.event;
+
+import hep.physics.vec.Hep3Vector;
+
+public interface HasPosition {
+    
+    Hep3Vector getPositionVec();
+    
+    double[] getPosition();
+}

Modified: projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/Hit.java
 =============================================================================
--- projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/Hit.java	(original)
+++ projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/Hit.java	Wed Dec 17 02:09:46 2014
@@ -5,15 +5,17 @@
 import org.lcsim.detector.identifier.Identifiable;
 import org.lcsim.geometry.subdetector.BarrelEndcapFlag;
 
-public interface Hit extends HasMetaData, HasDetectorElement, Identifiable
-{
-	DetectorIdentifierHelper getDetectorIdentifierHelper();
+public interface Hit extends HasMetaData, HasDetectorElement, HasPosition, Identifiable {
 	
-	// FIXME: Should these methods using identifier go here?
-	//        All our hits have these fields but not necessarily
-	//        those produced from an external framework like Mokka.
-	int getSystemId();	
-	BarrelEndcapFlag getBarrelEndcapFlag();	
-	int getLayerNumber();	
+    DetectorIdentifierHelper getDetectorIdentifierHelper();
+	
+    // FIXME: I don't think none of this below belongs here!
+    
+	int getSystemId();
+	
+	BarrelEndcapFlag getBarrelEndcapFlag();
+	
+	int getLayerNumber();
+	
 	int getIdentifierFieldValue(String field);
 }

Modified: projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/RawTrackerHit.java
 =============================================================================
--- projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/RawTrackerHit.java	(original)
+++ projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/RawTrackerHit.java	Wed Dec 17 02:09:46 2014
@@ -8,9 +8,8 @@
  * @author tonyj
  * @version $Id: RawTrackerHit.java,v 1.10 2008/08/20 01:34:21 jeremy Exp $
  */
-public interface RawTrackerHit
-extends Hit
-{
+public interface RawTrackerHit extends Hit {
+    
    /**
     *  Returns a time measurement associated with the adc values.
     *  E.g. the t0 of the spectrum for the TPC. Subdetector dependent.  

Modified: projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/SimTrackerHit.java
 =============================================================================
--- projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/SimTrackerHit.java	(original)
+++ projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/SimTrackerHit.java	Wed Dec 17 02:09:46 2014
@@ -5,8 +5,8 @@
  * @author Jeremy McCormick
  * @version $Id: SimTrackerHit.java,v 1.21 2011/08/24 18:51:17 jeremy Exp $
  */
-public interface SimTrackerHit extends HitWithPosition
-{
+public interface SimTrackerHit extends Hit {
+    
    /** 
     * Get the layer number of the hit.
     * @return The layer number of the hit. 

Modified: projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/base/BaseCalorimeterHit.java
 =============================================================================
--- projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/base/BaseCalorimeterHit.java	(original)
+++ projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/base/BaseCalorimeterHit.java	Wed Dec 17 02:09:46 2014
@@ -1,6 +1,5 @@
 package org.lcsim.event.base;
 
-import hep.physics.vec.BasicHep3Vector;
 import hep.physics.vec.Hep3Vector;
 
 import org.lcsim.detector.IDetectorElement;
@@ -8,18 +7,17 @@
 import org.lcsim.detector.identifier.Identifier;
 import org.lcsim.event.CalorimeterHit;
 import org.lcsim.geometry.IDDecoder;
+import org.lcsim.event.EventHeader.LCMetaData;
 
 /**
  * Base implementation of CalorimeterHit.
  * 
- * @author tonyj
- * @author jeremym
- * @version $Id: BaseCalorimeterHit.java,v 1.18 2013/02/05 00:18:00 jeremy Exp $
+ * @author Tony Johnson <[log in to unmask]>
+ * @author Jeremy McCormick <[log in to unmask]>
  */
-public class BaseCalorimeterHit extends BaseHitWithPosition implements CalorimeterHit
-{
+public class BaseCalorimeterHit extends BaseHit implements CalorimeterHit {
 
-    private static final double UNSET_ENERGY = -1;
+    public static final double UNSET_ENERGY = Double.MIN_VALUE;
     protected double rawEnergy = UNSET_ENERGY;
     protected double correctedEnergy = UNSET_ENERGY;
     protected double energyError;
@@ -27,29 +25,18 @@
     protected long id;
     protected int type;
 
-    protected BaseCalorimeterHit()
-    {
+    protected BaseCalorimeterHit() {
     }
-    
-    public BaseCalorimeterHit(
-            long id,
-            double correctedEnergy,
-            double time)
-    {
-        this.correctedEnergy = correctedEnergy;
-        this.time = time;
-        this.id = id;
-    }
-
-    public BaseCalorimeterHit(
-            double rawEnergy, 
+      
+    public BaseCalorimeterHit(double rawEnergy, 
             double correctedEnergy, 
             double energyError, 
             double time, 
             long id, 
-            Hep3Vector positionVec,
-            int type)
-    {
+            Hep3Vector positionVec, 
+            int type,
+            LCMetaData metaData) {
+        
         this.rawEnergy = rawEnergy;
         this.correctedEnergy = correctedEnergy;
         this.energyError = energyError;
@@ -57,143 +44,83 @@
         this.id = id;
         this.positionVec = positionVec;
         this.type = type;
+        
+        calculateCorrectedEnergy();
+        calculateRawEnergy();
+        
+        setMetaData(metaData);        
     }
 
-    public double getTime()
-    {
+    public double getTime() {
         return time;
     }
 
-    public int getType()
-    {
+    public int getType() {
         return type;
     }
 
-    public double getRawEnergy()
-    {
-        if (rawEnergy == UNSET_ENERGY) {
-            throw new RuntimeException("No raw energy available for CalorimeterHit.");
-        }
+    public double getRawEnergy() {
         return rawEnergy;
     }
-
-    public double[] getPosition()
-    {
-        if (positionVec == null) {
-            calculatePosition();
-        }
-        return super.getPosition();
-    }
-
-    public Hep3Vector getPositionVec()
-    {
-        if (positionVec == null) {
-            calculatePosition();
-        }
-        return super.getPositionVec();
-    }
-
-    public double getCorrectedEnergy()
-    {
-        if (correctedEnergy == UNSET_ENERGY) {
-            calculateCorrectedEnergy();
-        }
+    
+    public double getCorrectedEnergy() {
         return correctedEnergy;
     }
-
-    public long getCellID()
-    {
+      
+    public long getCellID() {
         return id;
     }
 
-    public int getLayerNumber()
-    {
+    public int getLayerNumber() {
         IDDecoder decoder = getIDDecoder();
         decoder.setID(id);
         return decoder.getLayer();
     }
 
-    private void calculateCorrectedEnergy()
-    {
-        getIDDecoder().setID(id);
-        correctedEnergy = SamplingFractionManager.defaultInstance().getCorrectedEnergy(rawEnergy, getIDDecoder().getLayer(), getSubdetector());
+    public IIdentifier getIdentifier() {
+        if (packedID == null) {
+            packedID = new Identifier(id);
+        }
+        return packedID;
     }
 
-    private void calculatePosition()
-    {
-        if (getMetaData() != null) {
-            IDDecoder decoder = getIDDecoder();
-            decoder.setID(id);
-            positionVec = new BasicHep3Vector(decoder.getPosition());
-        } else {
-            throw new RuntimeException("Can't calculate position.  MetaData is null.");
-        }
-    }
-
-    public IIdentifier getIdentifier()
-    {
-        if (compactId == null)
-            compactId = new Identifier(id);
-        return compactId;
-    }
-
-    public double getEnergyError()
-    {
+    public double getEnergyError() {
         return energyError;
     }
 
-    public void setType(int type)
-    {
+    // FIXME: Remove?
+    public void setType(int type) {
         this.type = type;
     }
 
-    public IDetectorElement getDetectorElement()
-    {
-        if (de == null)
-            findDetectorElementByPosition();
-        // setupDetectorElement();
-        return de;
+    public IDetectorElement getDetectorElement() {
+        return detectorElement;
     }
-
-    public void setCorrectedEnergy(double correctedEnergy)
-    {
-        this.correctedEnergy = correctedEnergy;
+             
+    private void calculateCorrectedEnergy() {
+        // Is the corrected energy unset?
+        if (correctedEnergy == UNSET_ENERGY) {
+            getIDDecoder().setID(id);
+            correctedEnergy = SamplingFractionManager.defaultInstance().getCorrectedEnergy(rawEnergy, getIDDecoder().getLayer(), getSubdetector());
+        }
     }
-
-    public void addCorrectedEnergy(double addEnergy)
-    {
-        this.correctedEnergy += addEnergy;
+    
+    private void calculateRawEnergy() {
+        // Is the raw energy unset?
+        if (rawEnergy == UNSET_ENERGY) {
+            getIDDecoder().setID(id);
+            correctedEnergy = SamplingFractionManager.defaultInstance().getRawEnergy(rawEnergy, getIDDecoder().getLayer(), getSubdetector());
+        }
     }
-
+                          
     /**
      * Conversion to String for printout.
-     * 
      * @return String output.
      */
-    public String toString()
-    {
-        StringBuffer sb = new StringBuffer("CalorimeterHitImpl: \n");
-        sb.append("type: " + type + " energy: " + correctedEnergy + " energyError: " + energyError + "\n");
-        sb.append("position: " + positionVec.x() + " " + positionVec.y() + " " + positionVec.z() + "\n");
-        sb.append("id: " + id + " time: " + time);
+    public String toString() {
+        sb.append("type: " + type + ", energy: " + correctedEnergy + ", energyError: " + energyError + ", ");
+        sb.append("position: (" + positionVec.x() + ", " + positionVec.y() + ", " + positionVec.z() + "), ");
+        sb.append("id: 0x" + getIdentifier().toHexString() + ", time: " + time);
         return sb.toString();
     }
 }
-
-/*
- * protected void setupDetectorElement() { Subdetector subdet = meta.getIDDecoder().getSubdetector();
- * IIdentifierHelper helper = subdet.getDetectorElement().getIdentifierHelper(); SegmentationBase seg =
- * (SegmentationBase)subdet.getIDDecoder(); String[] stripFields = seg.getSegmentationFieldNames(); if
- * (stripFields == null) throw new RuntimeException("stripFields is null"); IIdentifierDictionary dict =
- * helper.getIdentifierDictionary(); int nfields = dict.getNumberOfFields(); IExpandedIdentifier expId =
- * helper.unpack(getIdentifier()); for (int i=0; i<nfields; i++) { int idx =
- * dict.getFieldIndex(stripFields[i]); expId.setValue(idx, 0); } de = findDetectorElement(dict.pack(expId));
- * if (de == null) throw new RuntimeException("DetectorElement not found."); }
- * 
- * private static IDetectorElement findDetectorElement(IIdentifier id) {
- * System.out.println("findDetectorElement - " + id.toHexString()); IDetectorElement de = null;
- * IDetectorElementContainer srch = DetectorElementStore.getInstance().find(id); if (srch.size() == 0) { throw
- * new RuntimeException("No DetectorElement found with id <" + id.toHexString() + ">."); } else if
- * (srch.size() == 1) { de = srch.get(0); } else if (srch.size() > 1) { for (IDetectorElement xde : srch) { if
- * (!xde.hasChildren()) { de = xde; break; } } } return de; }
- */

Modified: projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/base/BaseHit.java
 =============================================================================
--- projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/base/BaseHit.java	(original)
+++ projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/base/BaseHit.java	Wed Dec 17 02:09:46 2014
@@ -1,5 +1,10 @@
 package org.lcsim.event.base;
 
+import hep.physics.vec.BasicHep3Vector;
+import hep.physics.vec.Hep3Vector;
+
+import org.lcsim.detector.converter.compact.DeDetector;
+import org.lcsim.detector.DetectorElement;
 import org.lcsim.detector.DetectorElementStore;
 import org.lcsim.detector.DetectorIdentifierHelper;
 import org.lcsim.detector.IDetectorElement;
@@ -14,38 +19,49 @@
 import org.lcsim.geometry.subdetector.BarrelEndcapFlag;
 
 /**
- * A base class for hit-like objects.
+ * this is a base class for hit-like objects in a detector.
  * 
  * @author Jeremy McCormick <[log in to unmask]>
  */
 public abstract class BaseHit implements Hit {
     
-    protected LCMetaData meta;
-    protected IExpandedIdentifier expId;
-    protected IIdentifier compactId;
-    protected IDetectorElement de;
-
-    /**
-     * Get the metadata associated with this hit.
-     * 
+    protected LCMetaData metaData;
+    protected IExpandedIdentifier expandedID;
+    protected IIdentifier packedID;
+    protected IDetectorElement detectorElement;
+    protected Hep3Vector positionVec;
+
+    /**
+     * Get the metadata associated with this hit.     
      * @return The hit's metadata.
      */
     public LCMetaData getMetaData() {
-        return meta;
-    }
-
-    /**
-     * Set the metadata associated with this hit. By default, this will not override an existing value.
+        return metaData;
+    }
+
+    /**
+     * Set the metadata associated with this hit.
      */
     public void setMetaData(LCMetaData meta) {
-        if (this.meta == null) {
-            this.meta = meta;
-        }
-    }
-    
-    /**
-     * Get the subdetector that this hit belongs to.
-     * 
+        
+        this.metaData = meta;        
+        
+        if (this.detectorElement == null) {
+            // If the DE is not set yet, try to look it up by ID (might be null).
+            detectorElement = findDetectorElement(getIdentifier());
+        }
+        
+        // Calculate the position of the hit.  Might use DE.
+        calculatePosition();
+        
+        if (this.detectorElement == null) {
+            // If DE is still null, attempt to find it from the position.
+            detectorElement = findDetectorElement(positionVec);
+        }
+    }
+    
+    /**
+     * Get the subdetector of this hit.     
      * @return The Subdetector of this hit.
      */
     public Subdetector getSubdetector() {
@@ -57,20 +73,16 @@
      * @return The IDetectorElement for this hit.
      */
     public IDetectorElement getDetectorElement() {
-    	if (de == null) {
-    		findDetectorElementByIdentifier();
-    	}
-        return de;
+        return detectorElement;
     }
     
     /**
      * Set the @see org.lcsim.detector.IDetectorElement of this hit. By default, this will not override an
      * existing value.
      */
+    // FIXME: This probably should not be in the public API.  Where is this actually called from?
     public void setDetectorElement(IDetectorElement de) {
-        if (this.de == null) {
-            this.de = de;
-        }
+        this.detectorElement = de;        
     }
 
     /**
@@ -78,10 +90,10 @@
      * @return The expanded identifier of this hit.
      */
     public IExpandedIdentifier getExpandedIdentifier() {
-        if (expId == null) {
-            expId = getIdentifierHelper().unpack(getIdentifier());
-        }
-        return expId;
+        if (expandedID == null) {
+            expandedID = getIdentifierHelper().unpack(getIdentifier());
+        }
+        return expandedID;
     }
 
     /**
@@ -89,7 +101,7 @@
      * @return The identifier of this hit.
      */
     public IIdentifier getIdentifier() {
-        return compactId;
+        return packedID;
     }
 
     /**
@@ -113,7 +125,7 @@
      * @return The hit's id decoder.
      */
     public IDDecoder getIDDecoder() {
-        return meta.getIDDecoder();
+        return metaData.getIDDecoder();
     }
 
     /**
@@ -147,45 +159,84 @@
     public int getIdentifierFieldValue(String field) {
         return getIdentifierHelper().getValue(getIdentifier(), field);
     }
-
-    /**
-     * Use the {@link IIdentifier} associated with this hit to find its DetectorElement
-     * in the geometry hierarchy and set a member variable to point to it.
-     */
-    protected void findDetectorElementByIdentifier() {
-        if (this.de == null) {
-            IDetectorElementContainer srch = DetectorElementStore.getInstance().find(getIdentifier());
-
-            if (srch.size() == 0) {
-                throw new RuntimeException("No DetectorElement found for SimTrackerHit with id <" + getIdentifier().toHexString() + ">.");
-            }
-
-            if (srch.size() == 1) {
-                this.de = srch.get(0);
-            }
-
-            // This can happen sometimes, because the identifiers are not guaranteed to be unique.
-            if (srch.size() > 1) {
-                // Pick the first leaf DetectorElement.
-                for (IDetectorElement xde : srch) {
-                    if (!xde.hasChildren()) {
-                        this.de = xde;
-                        break;
+                  
+    /**    
+     * Get the position of the hit.  This may be different than the position of the hit's DetectorElement.
+     * @return The position of this hit as a double array of size 3.
+     */
+    public double[] getPosition() {
+        return positionVec.v();
+    }
+    
+    /**
+     * Get the position of this hit in mm as a {@see hep.physics.vec.Hep3Vector}.
+     * @return The position vector of the hit in mm.
+     */
+    public Hep3Vector getPositionVec() { 
+        return positionVec;
+    }       
+    
+    /**
+     * Calculate the position of the hit, depending on what variables are available on the object.
+     */
+    protected void calculatePosition() { 
+        // Was there no position information provided explicitly? 
+        if (positionVec == null) {                 
+            // Does the hit ID match the DetectorElement exatly?
+            if (this.detectorElement != null && this.detectorElement.getIdentifier().equals(getIdentifier())) {
+                // Set the position from the DetectorElement.
+                this.positionVec = detectorElement.getGeometry().getPosition();
+            } else {
+                // This is what should happen for IDs with virtual cell values.
+                // The IDDecoder needs to be used here if it is set on the hit.
+                if (this.metaData != null) {
+                    IDDecoder decoder = this.getIDDecoder();
+                    if (decoder != null) {
+                        decoder.setID(this.getIdentifier().getValue());
+                        this.positionVec = new BasicHep3Vector(decoder.getPosition());
                     }
                 }
             }
         }
     }
-
-    /**
-     * Setup link to the DetectorElement using the hit's ID.
-     */
-    protected void setupDetectorElement() {                    
-        try {
-            
-            //System.out.println("Assigned DetectorElement <" + de.getName() + "> to hit.");
-        } catch (RuntimeException x) {
-            throw new RuntimeException("Failed to find DetectorElement for hit.");
-        }        
-    }
-}
+    
+    /**
+     * Find a DetectorElement by global position.
+     * @param position The global position.
+     * @return The DetectorElement at position.
+     */
+    private IDetectorElement findDetectorElement(Hep3Vector position) {
+        IDetectorElement mommy;
+        if (this.metaData != null) {
+            // Use subdetector's volume as top.
+            mommy = this.getIDDecoder().getSubdetector().getDetectorElement();
+        } else {
+            // Use the world volume.
+            mommy = ((DetectorElement) DetectorElementStore.getInstance().get(0)).getTop().findDetectorElement(getPositionVec());
+        }            
+        return mommy.findDetectorElement(this.positionVec);       
+    }
+    
+    /**
+     * Find a DetectorElement by its identifier.
+     * @param id The identifier.
+     * @return The DetectorElement matching the identifier.
+     */
+    private IDetectorElement findDetectorElement(IIdentifier id) {
+        IDetectorElement mommy;
+        if (this.metaData != null) {
+            // Use subdetector's volume as top.
+            mommy = this.getIDDecoder().getSubdetector().getDetectorElement();
+        } else {
+            // Use the world volume.
+            mommy = ((DetectorElement) DetectorElementStore.getInstance().get(0)).getTop();
+        }       
+        IDetectorElementContainer detectorElements = mommy.findDetectorElement(id);
+        // FIXME: Beware! The container can be null, which should be fixed at some point (detector-framework).
+        if (detectorElements != null && detectorElements.size() == 1) {
+            return detectorElements.get(0); 
+        } else {
+            return null;
+        }
+    }
+}

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 Dec 17 02:09:46 2014
@@ -153,12 +153,14 @@
     }
 
     private void setCollectionMetaData(List collection, Class type, LCMetaData meta) {
-        // System.out.println("setCollectionMetaData");
         // Set MetaData on collection objects.
         if (HasMetaData.class.isAssignableFrom(type)) {
             for (Object o : collection) {
-                if (o instanceof HasMetaData) {
-                    ((HasMetaData) o).setMetaData(meta);
+                if (o instanceof BaseHit) {
+                    BaseHit hit = (BaseHit) o;
+                    if (hit.getMetaData() == null) {
+                        ((BaseHit) o).setMetaData(meta);
+                    }
                 }
             }
         }

Modified: projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/base/BaseRawCalorimeterHit.java
 =============================================================================
--- projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/base/BaseRawCalorimeterHit.java	(original)
+++ projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/base/BaseRawCalorimeterHit.java	Wed Dec 17 02:09:46 2014
@@ -9,7 +9,7 @@
  * 
  * @author Jeremy McCormick <[log in to unmask]>
  */
-public class BaseRawCalorimeterHit extends BaseHitWithPosition implements RawCalorimeterHit {
+public class BaseRawCalorimeterHit extends BaseHit implements RawCalorimeterHit {
 
     long id;
     int amplitude;
@@ -22,14 +22,14 @@
         this.id = id;
         this.amplitude = amplitude;
         this.timestamp = timestamp;
-        this.compactId = new Identifier(id);
+        this.packedID = new Identifier(id);
     }
 
     public BaseRawCalorimeterHit(long id, int amplitude, int timestamp, IDetectorElement de) {
         this.id = id;
         this.amplitude = amplitude;
         this.timestamp = timestamp;
-        this.de = de;
+        this.detectorElement = de;
     }
 
     public long getCellID() {

Modified: projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/base/BaseRawTrackerHit.java
 =============================================================================
--- projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/base/BaseRawTrackerHit.java	(original)
+++ projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/base/BaseRawTrackerHit.java	Wed Dec 17 02:09:46 2014
@@ -15,10 +15,8 @@
  * @author Jeremy McCormick <[log in to unmask]>
  * @version $Id: BaseRawTrackerHit.java,v 1.13 2012/03/14 00:48:43 jeremy Exp $
  */
-public class BaseRawTrackerHit
-extends BaseHit
-implements RawTrackerHit
-{
+public class BaseRawTrackerHit extends BaseHit implements RawTrackerHit {
+    
     protected int time;
     protected long cellId;
     protected short[] adcValues;
@@ -29,7 +27,7 @@
     		int time,
     		short[] adcValues) {
     	this.cellId = id;
-    	this.compactId = new Identifier(id);
+    	this.packedID = new Identifier(id);
     	this.time = time;
     	this.adcValues = adcValues;
     }
@@ -45,8 +43,8 @@
         this.cellId = cellId;
         this.adcValues = adcValues;
         this.simTrackerHits = simTrackerHits;
-        this.compactId = new Identifier(cellId);
-        this.de = detectorElement;
+        this.packedID = new Identifier(cellId);
+        this.detectorElement = detectorElement;
     }
     
     /**
@@ -82,9 +80,9 @@
     {
 
         IIdentifierHelper helper = null;
-        if (de != null) 
+        if (detectorElement != null) 
         {
-            helper = de.getIdentifierHelper();
+            helper = detectorElement.getIdentifierHelper();
         }
         else if (simTrackerHits != null && simTrackerHits.size() > 0)
         {

Modified: projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/base/BaseSimCalorimeterHit.java
 =============================================================================
--- projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/base/BaseSimCalorimeterHit.java	(original)
+++ projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/base/BaseSimCalorimeterHit.java	Wed Dec 17 02:09:46 2014
@@ -5,46 +5,35 @@
 import java.util.ArrayList;
 import java.util.List;
 
-import org.lcsim.detector.DetectorElementStore;
-import org.lcsim.detector.IDetectorElement;
-import org.lcsim.detector.IDetectorElementContainer;
-import org.lcsim.detector.identifier.IExpandedIdentifier;
-import org.lcsim.detector.identifier.IIdentifier;
-import org.lcsim.detector.identifier.IIdentifierDictionary;
-import org.lcsim.detector.identifier.IIdentifierHelper;
 import org.lcsim.event.EventHeader.LCMetaData;
 import org.lcsim.event.MCParticle;
 import org.lcsim.event.SimCalorimeterHit;
-import org.lcsim.geometry.Subdetector;
-import org.lcsim.geometry.segmentation.SegmentationBase;
 
-public class BaseSimCalorimeterHit extends BaseCalorimeterHit implements SimCalorimeterHit
-{
+public class BaseSimCalorimeterHit extends BaseCalorimeterHit implements SimCalorimeterHit {
     protected int nContributions;
     protected Object[] particle;
     protected float[] energyContrib;
-    protected float[] times; 
+    protected float[] times;
     protected int[] pdg;
     protected List<float[]> steps;
-    
-    protected BaseSimCalorimeterHit()
-    {}
-    
-    public BaseSimCalorimeterHit(
-            long id, 
+
+    protected BaseSimCalorimeterHit() {
+    }
+
+    public BaseSimCalorimeterHit(long id, 
             double rawEnergy, 
             double time, 
             Object[] mcparts, 
             float[] energies, 
             float[] times, 
-            int[] pdgs)
-    {
+            int[] pdgs,
+            LCMetaData meta) {
         // Base class fields.
         super.id = id;
         super.rawEnergy = rawEnergy;
         super.time = time;
-        super.positionVec = null;        
-        
+        super.positionVec = null;
+
         // MCParticle contributions.
         this.nContributions = mcparts.length;
         this.particle = mcparts;
@@ -52,104 +41,91 @@
         this.times = times;
         this.pdg = pdgs;
         this.steps = new ArrayList(nContributions);
+        
+        setMetaData(meta);
     }
-    
+
     /**
      * New ctor with step positions.
      */
-    public BaseSimCalorimeterHit(
-            long id, 
+    public BaseSimCalorimeterHit(long id, 
             double rawEnergy, 
             double time, 
             Object[] mcparts, 
             float[] energies, 
             float[] times, 
-            int[] pdgs,
-            List<float[]> steps)
-    {
+            int[] pdgs, 
+            List<float[]> steps,
+            LCMetaData meta) {
         // Base class fields.
         super.id = id;
         super.rawEnergy = rawEnergy;
         super.time = time;
-        super.positionVec = null;        
-        
+        super.positionVec = null;
+
         // MCParticle contributions.
         this.nContributions = mcparts.length;
         this.particle = mcparts;
         this.energyContrib = energies;
         this.times = times;
         this.pdg = pdgs;
-        this.steps = steps;        
+        this.steps = steps;
+        
+        setMetaData(meta);
     }
-    
-    public void shiftTime(double time)
-    {
-    	super.time = this.getTime() + time;
-    	for (int i=0; i<times.length; i++)
-    	{
-    		times[i] += time;
-    	}    	
+
+    public void shiftTime(double time) {
+        super.time = this.getTime() + time;
+        for (int i = 0; i < times.length; i++) {
+            times[i] += time;
+        }
     }
-   
-    public double getTime()
-    {
+
+    public double getTime() {
         // First check for explicit value that has been set.
-        if (super.time != 0) return super.time;
-        
+        if (super.time != 0)
+            return super.time;
+
         // If the times array is empty, then there is no valid time to find.
-        if (times.length == 0) return 0;        
-        
+        if (times.length == 0)
+            return 0;
+
         // Find the earliest time from the array.
         double t = times[0];
-        for (int i=1; i<times.length; i++)
-        {
-            t = Math.min(t,times[i]);
+        for (int i = 1; i < times.length; i++) {
+            t = Math.min(t, times[i]);
         }
-        
+
         // Cache the minimum time value to avoid repeating the above calculation.
         super.time = t;
-        
+
         return t;
     }
-    
-    public MCParticle getMCParticle(int index)
-    {
+
+    public MCParticle getMCParticle(int index) {
         Object p = particle[index];
-        if (p instanceof SIORef) p = ((SIORef) p).getObject();
+        if (p instanceof SIORef)
+            p = ((SIORef) p).getObject();
         return (MCParticle) p;
-    }      
+    }
 
-    public double getContributedEnergy(int index)
-    {
+    public double getContributedEnergy(int index) {
         return energyContrib[index];
     }
 
-    public int getPDG(int index)
-    {
+    public int getPDG(int index) {
         return pdg[index];
     }
 
-    public double getContributedTime(int index)
-    {
+    public double getContributedTime(int index) {
         return times[index];
     }
-    
-    public float[] getStepPosition(int index)
-    {
+
+    public float[] getStepPosition(int index) {
         return steps.get(index);
     }
 
-    public int getMCParticleCount()
-    {
+    public int getMCParticleCount() {
         return particle.length;
     }
-    
-    /**
-     * Set the metadata associated with this hit. By default, this will not override an existing value.
-     */
-    public void setMetaData(LCMetaData meta) {
-        super.setMetaData(meta);
-        setupDetectorElement();
-    }
-    
-}
+}

Modified: projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/base/BaseSimTrackerHit.java
 =============================================================================
--- projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/base/BaseSimTrackerHit.java	(original)
+++ projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/base/BaseSimTrackerHit.java	Wed Dec 17 02:09:46 2014
@@ -13,11 +13,12 @@
 
 /**
  * A concrete implementation of SimTrackerHit.
+ * 
  * @author Jeremy McCormick
  * @version $Id: BaseSimTrackerHit.java,v 1.19 2012/07/20 09:29:43 grefe Exp $
  */
-public class BaseSimTrackerHit extends BaseHitWithPosition implements SimTrackerHit
-{
+public class BaseSimTrackerHit extends BaseHit implements SimTrackerHit {
+    
     protected double[] position = new double[3];
     protected double[] momentum = new double[3];
     protected MCParticle mcparticle;
@@ -28,15 +29,16 @@
     protected long id;
     protected double pathLength;
     private Hep3Vector startPoint, endPoint;
-    
+
     /**
      * Constructor for subclasses
      */
-    protected BaseSimTrackerHit()
-    {}
-    
+    protected BaseSimTrackerHit() {
+    }
+
     /**
      * Fully qualified constructor
+     * 
      * @param position The center point of the hit in Cartesian coordinates (x,y,z).
      * @param momentum The momentum of the hit in GeV (px,py,pz).
      * @param mcparticle The associated MCParticle. (may be null)
@@ -47,35 +49,24 @@
      * @param meta The LCMetaData associated to this hit. (may be null)
      * @param de The DetectorElement associated to this hit. (may be null)
      */
-    public BaseSimTrackerHit(
-            double[] position, 
-            double dEdx, 
-            double[] momentum, 
-            double pathLength, 
-            double time, 
-            int cellID, 
-            MCParticle mcparticle,
-            LCMetaData meta,
-            IDetectorElement de)
-    {
-        super(position);
+    public BaseSimTrackerHit(double[] position, double dEdx, double[] momentum, double pathLength, double time, int cellID, MCParticle mcparticle, LCMetaData meta, IDetectorElement de) {
         
+        positionVec = new BasicHep3Vector(position[0], position[1], position[2]);
+
         if (position.length != 3)
             throw new IllegalArgumentException("The position array is of the wrong size!");
-        for (int i=0, n=this.position.length; i < n; i++)
-        {
+        for (int i = 0, n = this.position.length; i < n; i++) {
             this.position[i] = position[i];
-        }                
-        
+        }
+
         if (momentum == null)
             throw new IllegalArgumentException("The momentum points to null!");
         if (momentum.length != 3)
             throw new IllegalArgumentException("The momentum array is of the wrong size!");
-        for (int i=0, n=this.momentum.length; i < n; i++)
-        {
+        for (int i = 0, n = this.momentum.length; i < n; i++) {
             this.momentum[i] = momentum[i];
         }
-        
+
         this.mcparticle = mcparticle;
         this.time = time;
         this.dEdx = dEdx;
@@ -83,107 +74,89 @@
         // TODO need to properly set a 64bit ID
         this.id = (long) cellID;
         this.pathLength = pathLength;
-        this.meta = meta;
-        this.de = de;        
+        this.metaData = meta;
+        this.detectorElement = de;
     }
-    
-    /**
-     * Set the metadata associated with this hit. By default, this will not override an existing value.
-     */
-    public void setMetaData(LCMetaData meta) {
-        super.setMetaData(meta);
-        findDetectorElementByIdentifier();
+
+    public void setTime(double time) {
+        this.time = time;
     }
-    
-    public void setTime(double time) {
-		this.time = time;
-	}
-    
-    public int getLayer()
-    {
+
+    public int getLayer() {
         getIDDecoder().setID(getCellID());
         return getIDDecoder().getLayer();
     }
-    
-    public double[] getPoint() 
-    {
+
+    public double[] getPoint() {
         return positionVec.v();
     }
-    
-//    public double[] getPosition()
-//    {
-//    	return getPoint();
-//    }
 
-    public double getTime() 
-    {
+    public double getTime() {
         return time;
     }
 
-    public double getdEdx() 
-    {
+    public double getdEdx() {
         return dEdx;
     }
 
-    public MCParticle getMCParticle() 
-    {
+    public MCParticle getMCParticle() {
         return mcparticle;
     }
 
-    // @Deprecated 
+    // @Deprecated
     // Use {@link #getCellID64()} instead.
-    public int getCellID() 
-    {
-        return cellID0;        
+    public int getCellID() {
+        return cellID0;
     }
-    
-    public long getCellID64()
-    {
+
+    public long getCellID64() {
         return id;
     }
-    
+
     public void setCellID64(long cellID) {
-		id = cellID;
-	}
-      
-    public double getPathLength() 
-    {
+        id = cellID;
+    }
+
+    public double getPathLength() {
         return pathLength;
     }
 
-    public double[] getMomentum() 
-    {
+    public double[] getMomentum() {
         return momentum;
-    }    
+    }
 
-    public double[] getStartPoint() 
-    { 
+    public double[] getStartPoint() {
         if (startPoint == null)
             computePoints();
         return startPoint.v();
     }
 
-    public double[] getEndPoint() 
-    {
+    public double[] getEndPoint() {
         if (endPoint == null)
             computePoints();
         return endPoint.v();
     }
-    
-    private void computePoints()
-    {
+
+    private void computePoints() {
         Hep3Vector midpoint = new BasicHep3Vector(getPoint());
         Hep3Vector direction = VecOp.unit(new BasicHep3Vector(getMomentum()));
-        Hep3Vector half_length = VecOp.mult(getPathLength()/2.0,direction);
+        Hep3Vector halfLength = VecOp.mult(getPathLength() / 2.0, direction);
 
-        startPoint = VecOp.add(midpoint,VecOp.mult(-1.0,half_length));
-        endPoint = VecOp.add(midpoint,half_length);
+        startPoint = VecOp.add(midpoint, VecOp.mult(-1.0, halfLength));
+        endPoint = VecOp.add(midpoint, halfLength);
+    }
+
+    public IIdentifier getIdentifier() {
+        if (packedID == null)
+            packedID = new Identifier(id);
+        return packedID;
     }    
     
-    public IIdentifier getIdentifier()
-    {
-    	if (compactId == null)
-    		compactId = new Identifier(id);
-    	return compactId;
+    /**
+     * Get the {@see org.lcsim.detector.IDetectorElement} associated with this hit.     
+     * @return The IDetectorElement for this hit.
+     */
+    public IDetectorElement getDetectorElement() {
+        return detectorElement;
     }
-}
+}

Modified: projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/base/BaseTrackerHit.java
 =============================================================================
--- projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/base/BaseTrackerHit.java	(original)
+++ projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/base/BaseTrackerHit.java	Wed Dec 17 02:09:46 2014
@@ -14,200 +14,201 @@
 import org.lcsim.event.TrackerHit;
 
 /**
- * // TODO add methods to add hits to this object.
- * // TODO decide what these hits should be.
+ * // TODO add methods to add hits to this object. // TODO decide what these hits should be.
+ * 
  * @author Norman Graf
  */
-public class BaseTrackerHit implements TrackerHit
-{
+public class BaseTrackerHit implements TrackerHit {
     protected double[] _pos = new double[3];
     protected double[] _covMatrix = new double[6];
     protected double _time;
     protected double _dedx;
-    //TODO set up an enumeration to replace the integer type
+    // TODO set up an enumeration to replace the integer type
     protected int _type;
-    //TODO decide what this is a list of
-    //TODO decide whether this should be a Set
+    // TODO decide what this is a list of
+    // TODO decide whether this should be a Set
     protected List _rawHits = new ArrayList();
     protected long id;
-    
+
     /** Creates a new instance of BaseTrackerHit */
-    public BaseTrackerHit()
-    {}    
-   
+    public BaseTrackerHit() {
+    }
+
     /**
      * fully qualified constructor
-     * @param pos the position of this hit (x,y,z) in mm
-     * @param cov the covariance matrix for the position measurement, packed as 6 elements.
-     * @param t the time for this measurement in ns
-     * @param e the energy deposit associated with this measurement, in GeV
-     * @param type the type of this measurement. not yet defined.
-     */
-    public BaseTrackerHit(double[] pos, double[] cov, double t, double e, int type)
-    {
+     * 
+     * @param pos
+     *            the position of this hit (x,y,z) in mm
+     * @param cov
+     *            the covariance matrix for the position measurement, packed as 6 elements.
+     * @param t
+     *            the time for this measurement in ns
+     * @param e
+     *            the energy deposit associated with this measurement, in GeV
+     * @param type
+     *            the type of this measurement. not yet defined.
+     */
+    public BaseTrackerHit(double[] pos, double[] cov, double t, double e, int type) {
         _pos = pos;
         _covMatrix = cov;
         _time = t;
         _dedx = e;
         _type = type;
     }
-    
+
     // include these setters since I don't know what the final inheriting classes will
     // look like.
     /**
      * The (x,y,z) position of this measurement.
-     * @param pos the position of this hit (x,y,z) in mm 
-     */
-    public void setPosition(double[] pos)
-    {
+     * 
+     * @param pos
+     *            the position of this hit (x,y,z) in mm
+     */
+    public void setPosition(double[] pos) {
         _pos = pos;
     }
-    
+
     /**
      * The covariance matrix for the position measurement.
-     * @param cov Packed array representing the symmetric covariance matrix (6 elements).
-     */
-    public void setCovarianceMatrix( double[] cov)
-    {
+     * 
+     * @param cov
+     *            Packed array representing the symmetric covariance matrix (6 elements).
+     */
+    public void setCovarianceMatrix(double[] cov) {
         _covMatrix = cov;
     }
-    
+
     /**
      * The time at which this measurement was made.
-     * @param t the time in ns.
-     */
-    public void setTime(double t)
-    {
+     * 
+     * @param t
+     *            the time in ns.
+     */
+    public void setTime(double t) {
         _time = t;
     }
-    
+
     /**
      * The energy deposit associated with this measurement.
-     * @param e The energy in GeV.
-     */
-    public void setEnergy(double e)
-    {
+     * 
+     * @param e
+     *            The energy in GeV.
+     */
+    public void setEnergy(double e) {
         _dedx = e;
     }
-    
+
     /**
      * The type of this measurement.
-     * @param type Not yet defined.
-     */
-    public void setType(int type)
-    {
+     * 
+     * @param type
+     *            Not yet defined.
+     */
+    public void setType(int type) {
         _type = type;
     }
-    
+
     /**
      * Add the RawTrackerHit from which this TrackerHit originates
-     * @param hit 
-     */
-    public void addRawTrackerHit(RawTrackerHit hit)
-    {
+     * 
+     * @param hit
+     */
+    public void addRawTrackerHit(RawTrackerHit hit) {
         _rawHits.add(hit);
     }
-    
+
     /**
      * Add the list of RawTrackerHits from which this TrackerHit originates
-     * @param hits 
-     */
-    public void addRawTrackerHits(List<RawTrackerHit> hits)
-    {
+     * 
+     * @param hits
+     */
+    public void addRawTrackerHits(List<RawTrackerHit> hits) {
         _rawHits.addAll(hits);
-    }    
-    
+    }
 
     // TODO consider customizing based on hit type.
-    public String toString()
-    {
+    public String toString() {
         String className = getClass().getName();
         int lastDot = className.lastIndexOf('.');
-        if(lastDot!=-1)className = className.substring(lastDot+1);
-        StringBuffer sb = new StringBuffer(className+": Type: "+_type+"\n");
-        sb.append("(x,y,z): "+_pos[0]+" "+_pos[1]+" "+_pos[2]+"\n");
+        if (lastDot != -1)
+            className = className.substring(lastDot + 1);
+        StringBuffer sb = new StringBuffer(className + ": Type: " + _type + "\n");
+        sb.append("(x,y,z): " + _pos[0] + " " + _pos[1] + " " + _pos[2] + "\n");
         // TODO add in covariance matrix
-        sb.append("dEdx: "+_dedx+" t: "+_time+"\n");
+        sb.append("dEdx: " + _dedx + " t: " + _time + "\n");
         return sb.toString();
     }
-    
+
     // TODO add convenience methods which extend the base interface.
     // TODO return position as SpacePoint
     // TODO return covariance matrix as Matrix
-    
-//TrackerHit interface
+
+    // TrackerHit interface
     /**
      * The (x,y,z) hit position in [mm].
+     * 
      * @return the cartesian position of this point.
      */
-    public double[] getPosition()
-    {
+    public double[] getPosition() {
         return _pos;
     }
-    
+
     /**
      * Covariance of the position (x,y,z) as a 6 element array.
+     * 
      * @return the packed covariance matrix
      */
-    public double[] getCovMatrix()
-    {
+    public double[] getCovMatrix() {
         return _covMatrix;
     }
-    
+
     /**
      * The energy deposited by this hit in [GeV].
+     * 
      * @return the energy deposit associated with this hit.
      */
-    public double getdEdx()
-    {
+    public double getdEdx() {
         return _dedx;
     }
-    
-    /**
-     * The  time of the hit in [ns]. By convention, the earliest time of 
-     * energy deposition is used if this is a composite hit.
+
+    /**
+     * The time of the hit in [ns]. By convention, the earliest time of energy deposition is used if this is a composite hit.
+     * 
      * @return the time of this hit.
      */
-    public double getTime()
-    {
+    public double getTime() {
         return _time;
     }
-    
-    public double getEdepError()
-    {
+
+    public double getEdepError() {
         return 0.;
     }
-    
-    public int getQuality()
-    {
+
+    public int getQuality() {
         return 0;
     }
-    
-    /**
-     * Type of hit. Mapping of integer types to type names
-     * through collection parameters "TrackerHitTypeNames"
-     * and "TrackerHitTypeValues".
+
+    /**
+     * Type of hit. Mapping of integer types to type names through collection parameters "TrackerHitTypeNames" and "TrackerHitTypeValues".
+     * 
      * @return the integer type of this hit.
      */
     // TODO define what this type is.
-    public int getType()
-    {
+    public int getType() {
         return _type;
     }
-    
+
     // TODO fix the covariant return type.
     /**
-     * The raw data hits.
-     * Check getType() to get actual data type.
+     * The raw data hits. Check getType() to get actual data type.
+     * 
      * @return the list of raw hits which contribute to this hit.
      */
-    public List getRawHits()
-    {
+    public List getRawHits() {
         return _rawHits;
     }
-    
-    public long getCellID()
-    {
+
+    public long getCellID() {
         return id;
-    }      
+    }
 }

Modified: projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/base/SamplingFractionManager.java
 =============================================================================
--- projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/base/SamplingFractionManager.java	(original)
+++ projects/lcsim/trunk/event-model/src/main/java/org/lcsim/event/base/SamplingFractionManager.java	Wed Dec 17 02:09:46 2014
@@ -10,95 +10,91 @@
 import org.lcsim.geometry.Subdetector;
 
 /**
- * Currently assumes that each subdetector has a single sampling fraction. This
- * is obviously not true if the subdetector has more than one layering scheme,
- * or if a single "subdetector" represents more than one physical detector (e.g.
- * barrel and endcap).
+ * Currently assumes that each subdetector has a single sampling fraction. This is obviously not true if the subdetector has more than one layering scheme, or if a single "subdetector" represents more
+ * than one physical detector (e.g. barrel and endcap).
  *
  * @author tonyj
  */
-public class SamplingFractionManager
-{
-   private static SamplingFractionManager theSamplingFractionManager = new SamplingFractionManager();
-   private ConditionsManager manager;
-   
-   private SamplingFractionManager()
-   {
-      manager = ConditionsManager.defaultInstance();
-      manager.registerConditionsConverter(new SamplingFractionConverter());
-   }
-   
-   public static SamplingFractionManager defaultInstance()
-   {
-      return theSamplingFractionManager;
-   }
-   
-   public double getCorrectedEnergy(double rawEnergy, int layer, Subdetector detector)
-   {
-      SamplingFraction sf = manager.getCachedConditions(SamplingFraction.class,"SamplingFractions/" + detector.getName()).getCachedData();
-      return sf.getCorrectedEnergy(rawEnergy,layer);
-   }
-   private static class SamplingFraction
-   {
-      private final double defaultSamplingFraction;
-      private final boolean digital;
-      private final Map<Integer,Double> layerMap = new HashMap<Integer,Double>();
-      
-      private SamplingFraction(ConditionsSet set)
-      {
-         defaultSamplingFraction = set.getDouble("samplingFraction");
-         digital = set.getBoolean("digital",false);
-         Pattern pattern = Pattern.compile("samplingFraction\\[((\\d+(-\\d+)?)(,\\d+(-\\d+)?)*)\\]");
-         Pattern p2 = Pattern.compile(",?(\\d+)(-(\\d+))?");
-         
-         for (Object o : set.keySet())
-         {
-            String key = o.toString();
+public class SamplingFractionManager {
+    
+    private static SamplingFractionManager theSamplingFractionManager = new SamplingFractionManager();
+    private ConditionsManager manager;
 
-            // Get rid of embedded whitespace, and match
-            Matcher matcher = pattern.matcher(key.replaceAll("\\s",""));
-            if (matcher.matches())
-            {
-               double s = set.getDouble(key);
-               String layers = matcher.group(1);
-               Matcher m2 = p2.matcher(layers);
-               while (m2.find())
-               {
-                  int start = Integer.parseInt(m2.group(1));
-                  int end = m2.group(3) == null ? -1 : Integer.parseInt(m2.group(3));
-                  if (end > start)
-                  {
-                     for (int i=start; i<=end; i++)
-                     {
-                        layerMap.put(i,s);
-                     }
-                  }
-                  else
-                  {
-                     layerMap.put(start,s);
-                  }
-               }
+    private SamplingFractionManager() {
+        manager = ConditionsManager.defaultInstance();
+        manager.registerConditionsConverter(new SamplingFractionConverter());
+    }
+
+    public static SamplingFractionManager defaultInstance() {
+        return theSamplingFractionManager;
+    }
+
+    public double getCorrectedEnergy(double rawEnergy, int layer, Subdetector detector) {
+        SamplingFraction sf = manager.getCachedConditions(SamplingFraction.class, "SamplingFractions/" + detector.getName()).getCachedData();
+        return sf.getCorrectedEnergy(rawEnergy, layer);
+    }
+    
+    public double getRawEnergy(double correctedEnergy, int layer, Subdetector detector) {
+        SamplingFraction sf = manager.getCachedConditions(SamplingFraction.class, "SamplingFractions/" + detector.getName()).getCachedData();
+        return sf.getRawEnergy(correctedEnergy, layer);
+    }
+
+    private static class SamplingFraction {
+        private final double defaultSamplingFraction;
+        private final boolean digital;
+        private final Map<Integer, Double> layerMap = new HashMap<Integer, Double>();
+
+        private SamplingFraction(ConditionsSet set) {
+            defaultSamplingFraction = set.getDouble("samplingFraction");
+            digital = set.getBoolean("digital", false);
+            Pattern pattern = Pattern.compile("samplingFraction\\[((\\d+(-\\d+)?)(,\\d+(-\\d+)?)*)\\]");
+            Pattern p2 = Pattern.compile(",?(\\d+)(-(\\d+))?");
+
+            for (Object o : set.keySet()) {
+                String key = o.toString();
+
+                // Get rid of embedded whitespace, and match
+                Matcher matcher = pattern.matcher(key.replaceAll("\\s", ""));
+                if (matcher.matches()) {
+                    double s = set.getDouble(key);
+                    String layers = matcher.group(1);
+                    Matcher m2 = p2.matcher(layers);
+                    while (m2.find()) {
+                        int start = Integer.parseInt(m2.group(1));
+                        int end = m2.group(3) == null ? -1 : Integer.parseInt(m2.group(3));
+                        if (end > start) {
+                            for (int i = start; i <= end; i++) {
+                                layerMap.put(i, s);
+                            }
+                        } else {
+                            layerMap.put(start, s);
+                        }
+                    }
+                }
             }
-         }
-      }
-      double getCorrectedEnergy(double rawEnergy, int layer)
-      {
-         Double layerSF = layerMap.get(layer);
-         double samplingFraction = layerSF == null ? defaultSamplingFraction : layerSF;
-         return (digital ? 1 : rawEnergy)/samplingFraction;
-      }
-   }
-   private static class SamplingFractionConverter implements ConditionsConverter<SamplingFraction>
-   {
-      public Class<SamplingFractionManager.SamplingFraction> getType()
-      {
-         return SamplingFraction.class;
-      }
+        }
 
-      public SamplingFractionManager.SamplingFraction getData(ConditionsManager manager, String name)
-      {
-         ConditionsSet conditions = manager.getConditions(name);
-         return new SamplingFraction(conditions);
-      }
-   }
+        double getCorrectedEnergy(double rawEnergy, int layer) {
+            Double layerSF = layerMap.get(layer);
+            double samplingFraction = layerSF == null ? defaultSamplingFraction : layerSF;
+            return (digital ? 1 : rawEnergy) / samplingFraction;
+        }
+
+        double getRawEnergy(double correctedEnergy, int layer) {
+            Double layerSF = layerMap.get(layer);
+            double samplingFraction = layerSF == null ? defaultSamplingFraction : layerSF;
+            return (digital ? 1 : correctedEnergy) * samplingFraction;
+        }
+    }
+
+    private static class SamplingFractionConverter implements ConditionsConverter<SamplingFraction> {
+        public Class<SamplingFractionManager.SamplingFraction> getType() {
+            return SamplingFraction.class;
+        }
+
+        public SamplingFractionManager.SamplingFraction getData(ConditionsManager manager, String name) {
+            ConditionsSet conditions = manager.getConditions(name);
+            return new SamplingFraction(conditions);
+        }
+    }
 }

Modified: projects/lcsim/trunk/event-model/src/main/java/org/lcsim/lcio/SIOCalorimeterHit.java
 =============================================================================
--- projects/lcsim/trunk/event-model/src/main/java/org/lcsim/lcio/SIOCalorimeterHit.java	(original)
+++ projects/lcsim/trunk/event-model/src/main/java/org/lcsim/lcio/SIOCalorimeterHit.java	Wed Dec 17 02:09:46 2014
@@ -18,7 +18,6 @@
 class SIOCalorimeterHit extends BaseCalorimeterHit {
 
     SIOCalorimeterHit(SIOInputStream in, int flags, int version, LCMetaData meta) throws IOException {
-        this.meta = meta;
         int cellid0 = in.readInt();
         int cellid1 = 0;
         if (LCIOUtil.bitTest(flags, LCIOConstants.RCHBIT_ID1) || version == 8) {
@@ -50,6 +49,7 @@
                 in.readPTag(this);
             }
         }
+        setMetaData(meta);
     }
 
     static void write(CalorimeterHit hit, SIOOutputStream out, int flags) throws IOException {

Modified: projects/lcsim/trunk/event-model/src/main/java/org/lcsim/lcio/SIORawTrackerHit.java
 =============================================================================
--- projects/lcsim/trunk/event-model/src/main/java/org/lcsim/lcio/SIORawTrackerHit.java	(original)
+++ projects/lcsim/trunk/event-model/src/main/java/org/lcsim/lcio/SIORawTrackerHit.java	Wed Dec 17 02:09:46 2014
@@ -28,11 +28,10 @@
 
 	SIORawTrackerHit(SIOInputStream in, int flags, int version, LCMetaData meta) throws IOException
 	{
-	    this.meta = meta;
 		int cellid0 = in.readInt();
 		int cellid1 = LCIOUtil.bitTest(flags,31) ? in.readInt() : 0;
 		cellId = ((long) cellid1)<<32 | cellid0;
-		compactId = new Identifier(cellId);
+		packedID = new Identifier(cellId);
 		time = in.readInt();
 		int nAdc = in.readInt();
 		adcValues = new short[nAdc];
@@ -53,6 +52,7 @@
 		}
 		*/
 		in.readPTag(this);
+            setMetaData(meta);
 	}
 
 	static void write(RawTrackerHit hit, SIOOutputStream out, int flags) throws IOException

Modified: projects/lcsim/trunk/event-model/src/main/java/org/lcsim/lcio/SIOSimCalorimeterHit.java
 =============================================================================
--- projects/lcsim/trunk/event-model/src/main/java/org/lcsim/lcio/SIOSimCalorimeterHit.java	(original)
+++ projects/lcsim/trunk/event-model/src/main/java/org/lcsim/lcio/SIOSimCalorimeterHit.java	Wed Dec 17 02:09:46 2014
@@ -21,7 +21,6 @@
     // constructor from LCIO data file
     SIOSimCalorimeterHit(SIOInputStream in, int flags, int version, LCMetaData meta) throws IOException
     {           
-        this.meta = meta;
         int cellid0 = in.readInt();
         int cellid1 = 0;
         if (LCIOUtil.bitTest(flags,LCIOConstants.RCHBIT_ID1) || version==8) {
@@ -63,6 +62,7 @@
             }            
         }
         if ( version > 1000 ) in.readPTag(this);
+        setMetaData(meta);
     }
     
     static private float emptyPos[] = new float[3]; 
@@ -102,4 +102,4 @@
         }
         out.writePTag(hit);
     }    
-}
+}

Modified: projects/lcsim/trunk/event-model/src/main/java/org/lcsim/lcio/SIOSimTrackerHit.java
 =============================================================================
--- projects/lcsim/trunk/event-model/src/main/java/org/lcsim/lcio/SIOSimTrackerHit.java	(original)
+++ projects/lcsim/trunk/event-model/src/main/java/org/lcsim/lcio/SIOSimTrackerHit.java	Wed Dec 17 02:09:46 2014
@@ -24,9 +24,6 @@
         
     SIOSimTrackerHit(SIOInputStream in, int flags, int version, LCMetaData meta) throws IOException
     {
-        // Metadata.
-        this.meta = meta;
-        
         // Read in the two 32-bit cell IDs.
         cellID0 = in.readInt();
         if(version >= 1060)
@@ -44,7 +41,7 @@
         position[0] = in.readDouble();
         position[1] = in.readDouble();
         position[2] = in.readDouble();
-        setPosition(position);
+        positionVec = new BasicHep3Vector(position[0], position[1], position[2]);
         
         // Energy.
         dEdx = in.readFloat();
@@ -68,6 +65,8 @@
         // Pointer tag.
         if (version > 1000)
             in.readPTag(this);
+
+        setMetaData(meta);
     }   
 
     public MCParticle getMCParticle()

Modified: projects/lcsim/trunk/recon-drivers/src/main/java/org/lcsim/recon/calorimetry/ResetCalorimeterHitEnergy.java
 =============================================================================
--- projects/lcsim/trunk/recon-drivers/src/main/java/org/lcsim/recon/calorimetry/ResetCalorimeterHitEnergy.java	(original)
+++ projects/lcsim/trunk/recon-drivers/src/main/java/org/lcsim/recon/calorimetry/ResetCalorimeterHitEnergy.java	Wed Dec 17 02:09:46 2014
@@ -71,9 +71,7 @@
 					}
 				}
 				
-				BaseSimCalorimeterHit resetHit = new BaseSimCalorimeterHit(id, totalEnergy, time, mcparts, energies, times, pdgs, steps);
-				//resetHit.setDetectorElement(hit.getDetectorElement());
-				resetHit.setMetaData(metaData);
+				BaseSimCalorimeterHit resetHit = new BaseSimCalorimeterHit(id, totalEnergy, time, mcparts, energies, times, pdgs, steps, metaData);
 				resetHits.add(resetHit);
 			}
 			caloHitCollection.clear();

Modified: projects/lcsim/trunk/recon-drivers/src/main/java/org/lcsim/util/MergeEventTools.java
 =============================================================================
--- projects/lcsim/trunk/recon-drivers/src/main/java/org/lcsim/util/MergeEventTools.java	(original)
+++ projects/lcsim/trunk/recon-drivers/src/main/java/org/lcsim/util/MergeEventTools.java	Wed Dec 17 02:09:46 2014
@@ -248,7 +248,7 @@
 			}
 		}
 		
-		BaseSimCalorimeterHit copyHit = new BaseSimCalorimeterHit(id, rawEnergy, time, mcparts, energies, times, pdgs, steps);
+		BaseSimCalorimeterHit copyHit = new BaseSimCalorimeterHit(id, rawEnergy, time, mcparts, energies, times, pdgs, steps, metaData);
 		//copyHit.setDetectorElement(hit.getDetectorElement());
 		copyHit.setMetaData(metaData);
 		
@@ -302,9 +302,7 @@
 		}
 		// need to set time to 0 so it is recalculated from the timeList
 		SimCalorimeterHit mergedHit = new BaseSimCalorimeterHit(hit.getCellID(),
-				rawEnergy, 0., mcpList, eneList, timeList, pdgList, steps);
-		//mergedHit.setDetectorElement(oldHit.getDetectorElement());
-		mergedHit.setMetaData(metaData);
+				rawEnergy, 0., mcpList, eneList, timeList, pdgList, steps, metaData);
 		return mergedHit;
 	}
 	

Modified: projects/lcsim/trunk/recon-drivers/src/main/java/org/lcsim/util/OverlayDriver.java
 =============================================================================
--- projects/lcsim/trunk/recon-drivers/src/main/java/org/lcsim/util/OverlayDriver.java	(original)
+++ projects/lcsim/trunk/recon-drivers/src/main/java/org/lcsim/util/OverlayDriver.java	Wed Dec 17 02:09:46 2014
@@ -23,11 +23,11 @@
 import org.lcsim.detector.IDetectorElement;
 import org.lcsim.event.EventHeader;
 import org.lcsim.event.GenericObject;
-import org.lcsim.event.HitWithPosition;
 import org.lcsim.event.MCParticle;
 import org.lcsim.event.SimCalorimeterHit;
 import org.lcsim.event.SimTrackerHit;
 import org.lcsim.event.EventHeader.LCMetaData;
+import org.lcsim.event.Hit;
 import org.lcsim.event.base.BaseMCParticle;
 import org.lcsim.event.base.BaseSimCalorimeterHit;
 import org.lcsim.event.base.BaseSimTrackerHit;
@@ -430,7 +430,7 @@
 	 * the position of the given hit along a straight line.
 	 * @param hit
 	 */
-	static protected double getLosTof(HitWithPosition hit) {
+	static protected double getLosTof(Hit hit) {
 		return SpacePoint.distance(new SpacePoint(hit.getPositionVec()), interactionPoint)/c;
 	}
 	
@@ -581,9 +581,7 @@
 					}
 					// need to set time to 0 so it is recalculated from the timeList
 					movedHit = new BaseSimCalorimeterHit(hit.getCellID(),
-							rawEnergy, 0., mcArr, eneArr, timeArr, pdgArr, steps);
-					//movedHit.setDetectorElement(hit.getDetectorElement());
-					movedHit.setMetaData(collection);
+							rawEnergy, 0., mcArr, eneArr, timeArr, pdgArr, steps, collection);
 				} else {
 					double hitTime = hit.getTime() + time;
 					if (timeWindow > 0) {
@@ -734,10 +732,7 @@
 			}
 		}
 		
-		BaseSimCalorimeterHit copyHit = new BaseSimCalorimeterHit(id, rawEnergy, time, mcparts, energies, times, pdgs, steps);
-		//copyHit.setDetectorElement(hit.getDetectorElement());
-		copyHit.setMetaData(meta);
-		
+		BaseSimCalorimeterHit copyHit = new BaseSimCalorimeterHit(id, rawEnergy, time, mcparts, energies, times, pdgs, steps, meta);
 		return copyHit;
 	}
 	
@@ -851,9 +846,9 @@
 					}
 					// need to set time to 0 so it is recalculated from the timeList
 					SimCalorimeterHit mergedHit = new BaseSimCalorimeterHit(oldHit.getCellID(),
-							rawEnergy, 0., mcpList, eneList, timeList, pdgList, steps);
+							rawEnergy, 0., mcpList, eneList, timeList, pdgList, steps, collection);
 					//mergedHit.setDetectorElement(oldHit.getDetectorElement());
-					mergedHit.setMetaData(collection);
+					//mergedHit.setMetaData(collection);
 					// replace old hit with merged hit
 					signalCaloHits.remove(oldHit);
 					signalCaloHits.add(mergedHit);

Modified: projects/lcsim/trunk/tracking/src/main/java/org/lcsim/recon/tracking/digitization/sisim/config/SimTrackerHitReadoutDriver.java
 =============================================================================
--- projects/lcsim/trunk/tracking/src/main/java/org/lcsim/recon/tracking/digitization/sisim/config/SimTrackerHitReadoutDriver.java	(original)
+++ projects/lcsim/trunk/tracking/src/main/java/org/lcsim/recon/tracking/digitization/sisim/config/SimTrackerHitReadoutDriver.java	Wed Dec 17 02:09:46 2014
@@ -60,7 +60,7 @@
             LCMetaData meta = header.getMetaData(collection);
             if (canHandle(meta.getName())) {
                 for (SimTrackerHit hit : collection) {
-                    hit.setMetaData(meta);
+                    //hit.setMetaData(meta);
                     hit.getDetectorElement().getReadout().addHit(hit);
                     if (debug) {
                         System.out.println("Driver assigned hit " + hit.getExpandedIdentifier().toString() + " to "
@@ -80,4 +80,4 @@
             }
         }
     }
-}
+}

########################################################################
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

Top of Message | Previous Page | Permalink

Advanced Options


Options

Log In

Log In

Get Password

Get Password


Search Archives

Search Archives


Subscribe or Unsubscribe

Subscribe or Unsubscribe


Archives

January 2016
December 2015
November 2015
October 2015
September 2015
August 2015
July 2015
June 2015
May 2015
April 2015
March 2015
February 2015
January 2015
December 2014
November 2014
October 2014
September 2014
August 2014
July 2014
June 2014
May 2014
April 2014
March 2014
February 2014
January 2014
December 2013
November 2013

ATOM RSS1 RSS2



LISTSERV.SLAC.STANFORD.EDU

Secured by F-Secure Anti-Virus CataList Email List Search Powered by the LISTSERV Email List Manager

Privacy Notice, Security Notice and Terms of Use