Print

Print


Commit in lcsim/src/org/lcsim/event/base on MAIN
BaseHit.java+38-21.7 -> 1.8
BaseSimTrackerHit.java+26-71.10 -> 1.11
+64-9
2 modified files
use hit identifier to lookup associated DetectorElements

lcsim/src/org/lcsim/event/base
BaseHit.java 1.7 -> 1.8
diff -u -r1.7 -r1.8
--- BaseHit.java	18 Mar 2009 03:52:06 -0000	1.7
+++ BaseHit.java	22 Apr 2009 18:50:14 -0000	1.8
@@ -4,6 +4,7 @@
 
 import org.lcsim.detector.DetectorIdentifierHelper;
 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.IIdentifierHelper;
@@ -60,12 +61,15 @@
     /**
      * Get the deepest {@see org.lcsim.detector.IDetectorElement} associated with this hit.
      * If this is not set manually using {@see #setDetectorElement(IDetectorElement)}
-     * then the subdetector's DetectorElement is searched using the hit's position
-     * from {@see #getPositionVec()}.
+     * then the subdetector's DetectorElement is searched using the hit's identifier. 
  	 * @return The IDetectorElement for this hit.
      */
     public IDetectorElement getDetectorElement() 
     {
+    	if (de == null)
+    	{
+    		findDetectorElementByIdentifier();
+    	}
         return de;
     }
     	
@@ -168,4 +172,36 @@
     {
     	return getIdentifierHelper().getValue(getIdentifier(), field);
     }
+    
+    private final void findDetectorElementByIdentifier()
+    {    	 
+        if (this.de == null)
+        {
+        	IDetectorElementContainer srch = getSubdetector().getDetectorElement().findDetectorElement(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);
+        	}
+        	
+        	if (srch.size() > 1)
+        	{
+        		// Pick the first leaf DetectorElement that is found.
+        		for (IDetectorElement xde : srch)
+        		{
+        			if (!xde.hasChildren())
+        			{
+        				this.de = xde;
+        				break;
+        			}
+        		}
+        	}
+        }
+    }
+    
 }
\ No newline at end of file

lcsim/src/org/lcsim/event/base
BaseSimTrackerHit.java 1.10 -> 1.11
diff -u -r1.10 -r1.11
--- BaseSimTrackerHit.java	20 Apr 2009 23:37:30 -0000	1.10
+++ BaseSimTrackerHit.java	22 Apr 2009 18:50:14 -0000	1.11
@@ -161,14 +161,33 @@
     }
     
     public IDetectorElement getDetectorElement()
-    {
-        if (de == null)
+    {    	 
+        if (this.de == null)
         {
-            de = getSubdetector().getDetectorElement().findDetectorElement(getPositionVec());
-            if (de == null)
-            {
-            	throw new RuntimeException("No DetectorElement found for SimTrackerHit with position " + this.getPositionVec() + ".");
-            }            
+        	IDetectorElementContainer srch = getSubdetector().getDetectorElement().findDetectorElement(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);
+        	}
+        	
+        	if (srch.size() > 1)
+        	{
+        		// Pick the first leaf DetectorElement that is found.
+        		for (IDetectorElement xde : srch)
+        		{
+        			if (!xde.hasChildren())
+        			{
+        				this.de = xde;
+        				break;
+        			}
+        		}
+        	}
         }
         return de;
     }
CVSspam 0.2.8