Commit in GeomConverter/sandbox on MAIN
identifier/IIdHelper.java+3-11.1 -> 1.2
          /IIdentifiable.java+1-11.1 -> 1.2
          /IIdentifier.java+14-91.1 -> 1.2
          /IIdentifier32.java+7-71.1 -> 1.2
          /IIdentifier64.java+5-11.1 -> 1.2
          /IIdentifierExpanded.java+11-41.1 -> 1.2
          /IdentifierHash.java+2-11.1 -> 1.2
calorimeter/BaseCalorimeterCell.java+533added 1.1
           /CalorimeterCell.java+621added 1.1
           /CalorimeterCellNeighborhood.java+6added 1.1
           /CalorimeterNeighborOptions.java+23added 1.1
           /PadLayout2D.java+100added 1.1
           /PadRowLayout2D.java+133added 1.1
tracker/SiTrackerBarrelLayerVolume.java+64added 1.1
CoordinateTransformation3D.java-1001.1 removed
DetectorElement.java-351.1 removed
DetectorElementCollection.java-21.1 removed
DetectorElementMixin.java-81.1 removed
DetectorID.java-801.1 removed
GeometryCatalog.java-621.1 removed
GeometryInfo.java-1031.1 removed
IDetectorElement.java-361.1 removed
IGeometryInfo.java-491.1 removed
ISolid.java-351.1 removed
LVolume.java-1021.1 removed
PVolume.java-1071.1 removed
PadRowLayout2D.java-1331.1 removed
Trapezoid.java-801.1 removed
TubeSegment.java-851.1 removed
+1523-1041
7 added + 15 removed + 7 modified, total 29 files
JM: sandbox

GeomConverter/sandbox/identifier
IIdHelper.java 1.1 -> 1.2
diff -u -r1.1 -r1.2
--- IIdHelper.java	23 Feb 2007 20:53:02 -0000	1.1
+++ IIdHelper.java	28 Feb 2007 19:50:47 -0000	1.2
@@ -1,4 +1,6 @@
-interface IIdHelper
+public interface IIdHelper
 {
+	//getIdentifierDictionary();
+	//
     
 }

GeomConverter/sandbox/identifier
IIdentifiable.java 1.1 -> 1.2
diff -u -r1.1 -r1.2
--- IIdentifiable.java	23 Feb 2007 20:53:02 -0000	1.1
+++ IIdentifiable.java	28 Feb 2007 19:50:47 -0000	1.2
@@ -1,6 +1,6 @@
 interface IIdentifiable 
 {
     IIdentifier identify();
-    //IdentifierHash identifyHash();
+    IdentifierHash identifyHash();
     IIdHelper getHelper();
 }

GeomConverter/sandbox/identifier
IIdentifier.java 1.1 -> 1.2
diff -u -r1.1 -r1.2
--- IIdentifier.java	23 Feb 2007 20:53:02 -0000	1.1
+++ IIdentifier.java	28 Feb 2007 19:50:47 -0000	1.2
@@ -3,33 +3,38 @@
 interface IIdentifier
 {
     // comparison operations against other ids
-    boolean equals(IIdentifier id);
+    boolean equals(IIdentifier id);    
     boolean nequals(IIdentifier id);
     boolean greater(IIdentifier id);
-    boolean less(IIdentifier id);
+    boolean less(IIdentifier id);   
+    
+    // what should this return code represent?
+    // seems like lattitude here could be helpful
+    // for implementations/subclasses but maybe
+    // this isn't needed
     int compare(IIdentifier id);
 
     // size in bits
-    int nbits();
+    int sizeBits();
     
     // size in 32-bit words
-    int nwords();
+    int sizeWords();
 
     // size in bytes
-    int nbytes();
+    int sizeBytes();
 
     // hex rep
-    String hex();
+    String hexString();
 
     // set from hex string
-    void setHex(String hexRep);
+    void setHexString(String hexRep);
     
     // set value from another IIdentifier
-    void setId(IIdentifier id);
+    void setIdentifier(IIdentifier id);
 
     // clear state
     void clear();
 
     // is id in valid state
     boolean isValid();
-}
+}
\ No newline at end of file

GeomConverter/sandbox/identifier
IIdentifier32.java 1.1 -> 1.2
diff -u -r1.1 -r1.2
--- IIdentifier32.java	23 Feb 2007 20:53:02 -0000	1.1
+++ IIdentifier32.java	28 Feb 2007 19:50:47 -0000	1.2
@@ -1,10 +1,10 @@
 interface IIdentifier32 extends IIdentifier
 {
-    boolean equals(int id);
-    boolean nequals(int id);
-    boolean less(int id);
-    boolean greater(int id);
-    int compare(int id);
-    int value();
-    void set(int newValue);
+    public boolean equals(IIdentifier32 id);
+    public boolean nequals(IIdentifier32 id);
+    public boolean less(IIdentifier32 id);
+    public boolean greater(IIdentifier32 id);
+    public int compare(IIdentifier32 id);
+    public int value();
+    public void set(int newValue);
 }

GeomConverter/sandbox/identifier
IIdentifier64.java 1.1 -> 1.2
diff -u -r1.1 -r1.2
--- IIdentifier64.java	23 Feb 2007 20:53:02 -0000	1.1
+++ IIdentifier64.java	28 Feb 2007 19:50:47 -0000	1.2
@@ -1,6 +1,10 @@
 interface IIdentifier64 extends IIdentifier
 {
+    public boolean equals(IIdentifier64 id);
+    public boolean nequals(IIdentifier64 id);
+    public boolean less(IIdentifier64 id);
+    public boolean greater(IIdentifier64 id);
+	
     long value();
     void set(long newValue);
-    boolean equals(long id);
 }

GeomConverter/sandbox/identifier
IIdentifierExpanded.java 1.1 -> 1.2
diff -u -r1.1 -r1.2
--- IIdentifierExpanded.java	23 Feb 2007 20:53:02 -0000	1.1
+++ IIdentifierExpanded.java	28 Feb 2007 19:50:48 -0000	1.2
@@ -1,15 +1,22 @@
 interface IIdentifierExpanded extends IIdentifier
 {
-    // e.g. "1 2 3"  
+    boolean less_prefix(IIdentifier id);
+	
+    // e.g. "1 / 2 / 3"  
     void setFromText(String text);
 
     void set(IIdentifierExpanded id);
     
-    int[] values();
+    int[] getFieldValues();
     
     int get(int idx);
     
-    int fields();
+    int size();
     
-    int append(int value);
+    int addFieldValue(int value);   
+    
+	int getNumberOfFields();
+	
+	//int getValue(int idx);
+	//int compareTo(ExpandedIdentifier id);    
 }

GeomConverter/sandbox/identifier
IdentifierHash.java 1.1 -> 1.2
diff -u -r1.1 -r1.2
--- IdentifierHash.java	23 Feb 2007 20:53:02 -0000	1.1
+++ IdentifierHash.java	28 Feb 2007 19:50:48 -0000	1.2
@@ -2,5 +2,6 @@
 
 public interface IdentifierHash 
 {
+	// ???
 	long getHashValue();
-}
+}
\ No newline at end of file

GeomConverter/sandbox/calorimeter
BaseCalorimeterCell.java added at 1.1
diff -N BaseCalorimeterCell.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ BaseCalorimeterCell.java	28 Feb 2007 19:50:48 -0000	1.1
@@ -0,0 +1,533 @@
+package org.lcsim.identifier;
+
+import static java.lang.Math.PI;
+import static java.lang.Math.atan;
+import static java.lang.Math.sqrt;
+import static org.lcsim.geometry.subdetector.CalorimeterType.ECAL;
+import static org.lcsim.geometry.subdetector.CalorimeterType.FCAL;
+import static org.lcsim.geometry.subdetector.CalorimeterType.HCAL;
+import static org.lcsim.geometry.subdetector.CalorimeterType.LUMI;
+import static org.lcsim.geometry.subdetector.CalorimeterType.MUON;
+
+import java.util.List;
+
+import org.lcsim.event.MCParticle;
+import org.lcsim.event.EventHeader.LCMetaData;
+import org.lcsim.geometry.Calorimeter;
+import org.lcsim.geometry.IDDecoder;
+import org.lcsim.geometry.Subdetector;
+import org.lcsim.geometry.segmentation.GridXYZ;
+import org.lcsim.geometry.segmentation.ProjectiveCylinder;
+import org.lcsim.geometry.subdetector.CalorimeterType;
+import org.lcsim.spacegeom.CartesianPoint;
+import org.lcsim.spacegeom.SpacePoint;
+import org.lcsim.util.event.SamplingFractionManager;
+import org.lcsim.util.event.SubdetectorLocator;
+
+public class BaseCalorimeterCell implements CalorimeterCell 
+{
+    // TODO implement
+    // TODO first requires DetectorElement interface
+    //public DetectorElement detectorElement() 
+    //{
+    //  return null;
+    //}
+    
+    //public int hashCode() 
+    //{
+    //  return super.hashCode();
+    //}
+    
+	IDDecoder decoder;
+    LCMetaData data;
+	CalorimeterType calType;
+    long id;
+    double energy;
+    double time;
+    double gain;
+    double quality;
+
+    // Other possible parameters ...
+    //
+    // deta
+    // dphi
+    // dx
+    // dy
+    // dz
+    // eta
+    // phi
+    // r
+    // x
+    // y
+    // z
+    // SpacePoint (covers x,y,z,r,theta,phi)
+    BaseCalorimeterCell(IDDecoder decoder,
+                        LCMetaData data,
+                        long id,
+                        double energy,
+                        double time,
+                        double gain,
+                        double quality)
+    {
+        this.decoder = decoder;
+        this.data = data;
+        this.id = id;
+        this.energy = energy;
+        this.time = time;
+        this.gain = gain;
+        this.quality = quality;
+        this.calType = ((Calorimeter)decoder.getSubdetector()).getCalorimeterType();
+    }
+    
+    void setCartesian(double x, double y, double z)
+    {}
+    
+    void setSpherical(double eta, double phi, double r)
+    {}
+    	
+	public long cellId()
+	{
+        return id;
+	}
+    
+    public double quality()
+    {
+        return this.quality;
+    }
+    
+    public double gain()
+    {
+        return this.gain;
+    }
+    
+    public double e()
+    {
+        return this.energy;
+    }
+    
+    public double time() 
+    {
+        return this.time;
+    }
+	
+	public int compareTo(CalorimeterCell cell) 
+	{
+        if (cell.cellId() == cellId()) return 0; else return -1;
+	}
+	
+	public double distanceToCenter(SpacePoint point) 
+	{        
+        double x = point.x() - x();
+        double y = point.y() - y();
+        double z = point.z() - z();
+		return sqrt(x*x + y*y + z*z);       
+	}
+	
+    // Uses cylindrical approximation to see if within theta, phi, r
+	public boolean isInside(SpacePoint point) 
+	{		
+		double x = point.x();
+		double y = point.y();
+		double z = point.z();
+		double r = sqrt(x * x + y * y);
+		double theta = atan(r / z);				       
+        if (theta < 0) theta += PI;
+        double phi = point.phi();
+        return (phi > phiMin() && phi < phiMax()) && 
+               (theta > etaMin() && theta < etaMax()) && 
+               (r > rMin() && r < rMax());
+	}
+
+	public boolean isNear(SpacePoint point, double tolerance)
+	{
+		return distanceToCenter(point) <= tolerance;
+	}
+   
+    // Checks if point is within 10 cm of the cell center
+    static private double distance_tolerance = 100.0;
+    public boolean isNear(SpacePoint point)
+    {
+        return isNear(point, distance_tolerance);
+    }
+
+	// FIXME: Only works for decoders with explicit absorber field (which isn't currently set)
+	public boolean isAbsorber() 
+	{
+		return decoder.getValue("absorber") != 0;
+	}
+	
+	public IDDecoder decoder() 
+	{
+		return decoder;
+	}
+
+	public boolean isBarrel() 
+	{
+		return decoder.getBarrelEndcapFlag().isBarrel();
+	}
+
+	public boolean isEndcap() 
+	{
+		return decoder.getBarrelEndcapFlag().isEndcap();
+	}
+	
+	public boolean isPositiveEndcap() {
+		return decoder.getBarrelEndcapFlag().isEndcapNorth();
+	}
+
+	public boolean isNegativeEndcap() {
+        return decoder.getBarrelEndcapFlag().isEndcapSouth();		
+	}
+
+	public boolean isECAL() 
+	{
+		return calType == ECAL;		
+	}
+	
+	public boolean isMUON() 
+	{
+		return calType == MUON;
+	}
+	
+	public boolean isFCAL() 
+	{
+		return calType == FCAL;
+	}
+
+	public boolean isHCAL() 
+	{
+		return calType == HCAL;
+	}
+	
+	public boolean isLUMI()
+	{
+		return calType == LUMI;
+	}
+
+	public boolean hasHit() 
+	{
+		return e() != 0;
+	}
+	
+	// FIXME: Only works for decoders with explicit phi field.
+    //        Non-projective segmentations should still be able
+    //        to calculate this based on phi from xyz.
+	public int iphi() 
+	{
+		return decoder.getValue("phi");
+	}
+
+	// FIXME: Only works for decoders with explicit theta field
+    //        Non-projective segmentations should still be able
+    //        to calculate this based on theta from xyz.
+	public int ieta() 
+	{
+		return decoder.getValue("eta");
+	}
+
+	// FIXME: Only works for decoders with explicit x field    
+	public int ix() 
+	{
+		return decoder.getValue("x");
+	}
+
+	// FIXME: Only works for decoders with explicit y field
+	public int iy() 
+	{
+		return decoder.getValue("y");
+	}
+
+	// FIXME: Only works for decoders with explicit z field
+	public int iz() 
+	{
+		return decoder.getValue("z");
+	}
+
+	// FIXME: Only works for decoders with explicit layer field
+	public int layer() 
+	{
+		return decoder.getValue("layer");
+	}
+
+	// FIXME: Only works for decoders with explicit module field
+	public int module() 
+	{
+		return decoder.getValue("module");
+	}
+	
+	// FIXME: Only works for decoders with explicit row field
+	public int row() 
+	{
+		return decoder.getValue("row");
+	}
+
+	// FIXME: Only works for decoders with explicit section field
+	public int section() 
+	{
+		return decoder.getValue("section");
+	}
+
+	// FIXME: Only works for decoders with explicit stave field
+	public int stave() 
+	{
+		return decoder.getValue("stave");
+	}
+    
+    // FIXME: Only works for decoders with explicit column field
+    public int column() 
+    {
+        return decoder.getValue("column");
+    }
+
+	public double phi() 
+	{
+		return decoder.getPhi();
+	}
+
+	public double phiMax() 
+	{
+		return phi() + dphi() / 2;
+	}
+
+	public double phiMin() 
+	{
+		return phi() - dphi() / 2;
+	}
+
+	// FIXME: Only works for ProjectiveCylinder segmentation
+	public double dphi() 
+	{
+		ProjectiveCylinder prjCyl = (ProjectiveCylinder)decoder;
+		return (2 * PI) / prjCyl.getPhiBins(); 
+	}
+
+    public double p()
+    {
+        return sqrt(x() * x() + y() * y() + z() * z());
+    }
+
+    public double pt()
+    {
+        return sqrt(x() * x() + y() * y());
+    }
+    
+    public double ipt()
+    {
+        return 1.0 / pt();
+    }
+    
+	public SpacePoint position() 
+	{
+        double[] parr = decoder.getPosition();
+        SpacePoint p = new CartesianPoint(parr[0],parr[1],parr[2]);
+        return p;
+	}
+
+	public double r() 
+	{
+        return p();
+	}
+
+	public double rMax() 
+	{
+        // FIXME: Just an approximation and will be wrong for non-cylindrical
+        return pt() + width() / 2;
+	}
+
+	public double rMin() 
+	{
+	    // FIXME: Just an approximation and will be wrong for non-cylindrical
+        return pt() - width() / 2;
+	}
+
+	public double width() 
+	{
+		return decoder.getSubdetector().getLayering().getLayer(layer()).getSensorThickness();
+	}
+
+	public Subdetector subdetector() 
+	{
+		return decoder.getSubdetector();
+	}
+
+	public int system() 
+	{
+		return decoder.getSystemID();
+	}
+ 
+	public double eta() 
+	{
+		return decoder.getTheta();
+	}
+ 
+	public double etaMax() 
+	{
+		return eta() + deta() / 2; 
+	}
+ 
+	public double etaMin() 
+	{
+		return eta() - deta() / 2;
+	}
+    
+	public double deta() 
+	{
+	    // FIXME: Only works for ProjectiveCylinder
+		ProjectiveCylinder seg = (ProjectiveCylinder)decoder;
+		return (2 * PI) / seg.getThetaBins();
+	}
+
+	public int tower() 
+	{
+		return decoder.getValue("tower");
+	}
+
+	public double x()
+	{
+		return decoder.getX();
+	}
+
+	public double y() 
+	{
+		return decoder.getY();
+	}
+
+	public double z() 
+	{
+		return decoder.getZ();
+	}
+	
+	// FIXME: Only works for GridXYZ
+	public double dx()
+	{
+		return ((GridXYZ)decoder).getGridSizeX();
+	}
+	
+	// FIXME: Only works for GridXYZ.  
+	public double dy()
+	{
+		GridXYZ seg = (GridXYZ)decoder;
+		return seg.getGridSizeY();
+	}
+	
+	// FIXME: Only works for GridXYZ
+	public double dz()
+	{
+		GridXYZ seg = (GridXYZ)decoder;
+		return seg.getGridSizeZ();
+	}
+	
+	public double phiCircumference()
+	{
+		return 2 * PI * pt();
+	}
+	
+	public double thetaCircumference()
+	{
+		return 2 * PI * z();
+	}
+	
+	public double phiFraction()
+	{
+		return dphi() / (2 * PI);
+	}
+	
+	public double etaFraction()
+	{
+		return deta() / (2 * PI);
+	}
+	
+	public double phiArc()
+	{
+		return phiCircumference() * phiFraction();
+	}
+	
+	public double etaArc()
+	{
+		return thetaCircumference() * etaFraction();
+	}
+	
+	public double samplingFraction()
+	{
+		//return SamplingFractionManager.defaultInstance().getSamplingFraction(SubdetectorLocator.locateSubdetector(data,cellId()));
+        return 1.0;
+	}
+
+    // http://alxr.usatlas.bnl.gov/lxr/source/atlas/Calorimeter/CaloEvent/src/CaloCell.cxx#039
+    public double cosTheta()
+    {
+        double aux = sqrt(1. - sinTheta() * sinTheta());
+        if (eta() < 0) aux = -aux;
+        return aux;
+    }
+
+    public double cotTheta()
+    {
+        double aux = sqrt(1. - sinTheta() * sinTheta());
+        if (eta() < 0) aux = -aux;
+        return aux / sinTheta(); 
+    }
+
+    // http://www.math.com/tables/trig/identities.htm
+    public double sinTheta()
+    {
+        double sinTh = y() / p();
+        if ( p() < 0.001)
+            sinTh = 0;
+        return sinTh;
+    }
+    
+    public MCParticle getMCParticle(int index)
+    {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public int getMCParticleCount()
+    {
+        // TODO Auto-generated method stub
+        return 0;
+    }
+
+    public int getPDG(int index)
+    {
+        // TODO Auto-generated method stub
+        return 0;
+    }
+
+    public List<SpacePoint> getCellPointData()
+    {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    // should get this from a compact parameter on the detector
+    public boolean isAnalog()
+    {
+        // TODO Auto-generated method stub
+        return false;
+    }
+
+    // should get this from a compact parameter on the detector
+    public boolean isDigital()
+    {
+        // TODO Auto-generated method stub
+        return false;
+    }
+
+    public CalorimeterCellNeighborhood neighbors(CalorimeterNeighborOptions opts)
+    {
+        // TODO Auto-generated method stub
+        return null;
+    }
+    
+    public boolean inCalorimeter(Calorimeter cal)
+    {
+        return cal.getSystemID() == decoder.getSystemID();
+    }
+
+    public int density()
+    {
+        return 0;
+    }
+}

GeomConverter/sandbox/calorimeter
CalorimeterCell.java added at 1.1
diff -N CalorimeterCell.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ CalorimeterCell.java	28 Feb 2007 19:50:48 -0000	1.1
@@ -0,0 +1,621 @@
+package org.lcsim.identifier;
+
+import java.util.List;
+
+import org.lcsim.event.MCParticle;
+import org.lcsim.geometry.Calorimeter;
+import org.lcsim.geometry.IDDecoder;
+import org.lcsim.geometry.Subdetector;
+import org.lcsim.spacegeom.SpacePoint;
+
+/**
+ * 
+ * An interface to Calorimeter cell detector description and hit data.
+ * 
+ * CalorimeterCell uses, wraps, refers to, or replaces the following classes.
+ *
+ * @see org.lcsim.geometry.subdetector.BarrelEndcapFlag
+ * @see org.lcsim.geometry.subdetector.Calorimeter
+ * @see org.lcsim.geometry.subdetector.CalorimeterType
+ * @see org.lcsim.event.CalorimeterHit
+ * @see org.lcsim.event.RawCalorimeterHit
+ * @see org.lcsim.event.SimCalorimeterHit
+ * @see org.lcsim.geometry.Subdetector
+ * @see org.lcsim.geometry.IDDecoder
+ * @see org.lcsim.geometry.util.BaseIDDecoder
+ * @see org.lcsim.geometry.CalorimeterIDDecoder
+ * @see org.lcsim.geometry.segmentation
+ * @see org.lcsim.geometry.subdetector.AbstractPolyhedraCalorimeter
+ * @see org.lcsim.geometry.subdetector.EcalBarrel
+ * @see org.lcsim.geometry.subdetector.AbstractTestBeam
+ * @see org.lcsim.geometry.subdetector.CylindricalBarrelCalorimeter
+ * @see org.lcsim.geometry.subdetector.CylindricalEndcapCalorimeter
+ * @see org.lcsim.geometry.subdetector.PolyhedraBarrelCalorimeter
+ * @see org.lcsim.geometry.subdetector.PolyhedraEndcapCalorimeter
+ * @see org.lcsim.geometry.TestBeamCalorimeter
+ * 
+ * For convenience, CalorimeterCell cell combines functionality 
+ * from these classes into a single "flattened" API so that users can avoid 
+ * lots of subcasting and/or method chaining in order to access the information
+ * required for their analysis.  It also replaces calls using "magic" field
+ * strings, primarily from IDDecoder, with proper interface methods.
+ *   
+ * Measurements, such as the position, are within a global coordinate 
+ * system based at (0,0,0), unless otherwise noted.  Indices, however,
+ * may refer to a local or global system.  For instance, ix would probably
+ * translate to local coordinates in a readout plate, while iphi is most
+ * likely a global phi index.
+ * 
+ * @author Jeremy McCormick
+ * 
+ * FIXME: Many of the geometrical methods in CalorimeterCell should be moved to a DD object.
+ *  
+ */
+public interface CalorimeterCell 
+//extends IDetectorElement 
+{        
+	/** 
+	 * 64-bit identifier of this cell
+     * 
+     * This is used as a hash by our current system, but it isn't one, really.
+     * The interface should probably include a hashCode method, too.
+	 * 
+	 * @see org.lcsim.event.CalorimeterHit.getCellId() 
+	 */
+	long cellId();	
+    
+	
+	/**
+	 * Hash code uniquely identifying the CalorimeterCell object
+	 * 
+	 * Can be based on ATLAS's IdentifierHash
+	 * 
+	 * (Java provides built-in hashing, but this needs support for hash back to id.)
+	 * 
+	 */
+	int hashCode();
+	
+	/**	
+     * This method returns 0 if the cells have matching ids.  Otherwise, it
+     * returns -1.
+	 */
+	int compareTo(CalorimeterCell cell);
+    
+	
+	/** 
+	 * Energy deposition in the cell (GeV)
+	 * 
+	 * @see CalorimeterHit.getRawEnergy()
+	 */
+	double e();
+			
+	/** 
+	 * Shortcut for energy != 0 
+	 */
+	boolean hasHit();
+	
+	/**
+	 * Time (nanoseconds)
+	 * 
+	 * @see org.lcsim.event.CalorimeterHit.getTime()
+	 *  
+	 */
+	double time();
+    
+    /** 
+     * Quality of signal (time only?) 
+     */
+    double quality();
+
+    /** 
+     * Gain (in ADC counts?) 
+     */
+    double gain();
+			
+	/** 
+	 * Center position (mm)
+	 *
+	 * @see org.lcsim.event.CalorimeterHit.getPosition()
+	 * @see org.lcsim.geometry.IDDecoder.getPosition()
+	 */
+	SpacePoint position();
+	
+	/** 
+	 * X at cell center (mm)
+	 *
+	 * @see org.lcsim.geometry.IDDecoder.getX()
+	 * 
+	 */
+	double x();
+	
+	/** 
+	 * Y at cell center (mm)
+	 *
+	 * @see org.lcsim.geometry.IDDecoder.getY()
+	 * 
+	 */
+	double y();
+	
+	/** 
+	 * Z at cell center (mm)
+	 *
+	 * @see org.lcsim.geometry.IDDecoder.getZ()
+	 * 
+	 */
+	double z();
+	
+    /** 
+     * Theta at cell center (radians) 
+     *
+     * @see IDDecoder.getTheta()
+     * 
+     */
+    double eta();
+    
+    /** 
+     * Phi at cell center (radians)
+     *
+     * @see IDDecoder.getPhi()
+     *
+     */
+    double phi();
+    
+	/** 
+	 * Size of the cell in x dim
+	 */
+	public double dx();
+		
+	/** 
+	 * Size of the cell in y dim
+	 */
+	public double dy();
+	
+	/** 
+	 * Size of the cell in z dim
+	 */
+	public double dz();
+    
+    /** 
+     * Angle subtended in theta (radians) 
+     */
+    double deta();
+    
+    /** 
+     * Angle subtended in theta (radians) 
+     */
+    double dphi();
+    
+    /** 
+     * Distance to the cell from origin 
+     */
+    double p(); 
+    
+    /** 
+     * Transverse distance (XY) to the cell from origin
+     */
+    double pt();
+        
+    /** 
+     * Inverse of pt
+     * 
+     * Norman: "Related to curvature. High pT gives low curvature.
+     *          the errors are gaussian distributed if you plot it in terms of 1/pT." 
+     */
+    double ipt(); 
+        
+    /** 
+      * Corner points of the cell's solid, in a LOCAL coordinate frame 
+      * (as if cell was at 0,0,0).
+      * 
+      * FIXME: Put into DE 
+      *       
+      */
+    public List<SpacePoint> getCellPointData();
+    
+	
+	/** 
+	 * Is the given point within tolerance of the cell center? (mm) 
+	 */
+	boolean isNear(SpacePoint point, double tolerance);
+    
+    /**
+     * Version of isNear with a default tolerance of 10 cm.
+     */    
+    boolean isNear(SpacePoint point);
+    	
+	/** 
+	 * Distance to cell center from point (mm)
+	 */
+	double distanceToCenter(SpacePoint point);
+	
+	/** 
+	 * Is the given point inside this cell? (mm)
+	 */
+	boolean isInside(SpacePoint point);
+	    
+    /** 
+     * sin of eta 
+     */
+    double sinTheta();
+    
+    /** 
+     * cosine of eta 
+     */
+    double cosTheta();
+    
+    /** 
+     * cotangent of eta 
+     */
+    double cotTheta();  
+	
+	/** 
+	 * Minimum theta of the cell (radians) 
+	 */
+	double etaMin();	
+	
+	/** 
+	 * Maximum theta of the cell (radians)
+	 */
+	double etaMax();
+	
+	/** 
+	 * Distance along circumference in phi (cylindrical radius) covered by this cell (mm)
+	 */
+	double etaArc();
+	
+	/** 
+	 * Fraction of theta (360 degrees) covered by this cell 
+	 */
+	double etaFraction();
+	
+	/** 
+	 * Minimum phi measurement of the cell (radians)
+	 */
+	double phiMin();
+	
+	/** 
+	 * Maximum phi measurement of the cell (radians)
+	 */
+	double phiMax();
+		
+	/** 
+	 * Distance along circumference covered by this cell in phi 
+	 */
+	double phiArc();
+	
+	/** 
+	 * Fraction of full phi (360) covered by this cell 
+	 */
+	double phiFraction();
+	    
+	/** 
+	 * Radius to the cell midpoint (mm)
+	 */
+	double r();        
+
+    /**
+     * Minimum radius measurement (mm)
+     */
+    double rMin();
+    
+    /**
+     * Maximum radius measurement (mm)
+     */
+    double rMax();
+	
+	/** 
+	 * Width of the cell along the layering axis (mm)
+	 */
+	double width();
+	
+	/** 
+	 * Circumference of the circle defined by r and phi (mm)
+	 */
+	double phiCircumference();
+	
+	/** 
+	 * Circumference of the circle defined by r and theta (mm)
+	 */
+	double thetaCircumference();
+		
+	/** 
+	 * X bin value 
+	 *
+	 * @see org.lcsim.geometry.IDDecoder.getValue()
+	 * @see org.lcsim.geometry.segmentation.GridXYZ.getXBin()
+	 * 
+	 */
+	int ix();
+	
+	/** 
+	 * Y bin value
+	 * 
+	 * @see org.lcsim.geometry.IDDecoder.getValue()
+	 * @see org.lcsim.geometry.segmentation.GridXYZ.getYBin()	 
+	 * 
+	 */
+	int iy();
+	
+	/** 
+	 * Z bin value
+	 *  
+     * @see org.lcsim.geometry.IDDecoder.getValue()
+     * @see org.lcsim.geometry.segmentation.GridXYZ.getZBin()    
+	 * 
+	 */
+	int iz();
+	
+	/** 
+	 * Theta bin value
+	 * 
+	 * @see org.lcsim.geometry.IDDecoder.getValue()
+	 *  
+	 */
+	int ieta();
+	
+	/** 
+	 * Phi bin value
+     * 
+     * @see org.lcsim.geometry.IDDecoder.getValue()
+	 * 
+	 */
+	int iphi();
+	
+	/** 
+	 * System number uniquely identifying the cell's Subdetector
+	 * 
+	 * @see org.lcsim.geometry.IDDecoder.getSystemID()
+	 * 
+	 */
+	int system();
+	
+	/** 
+	 * Section number of the calorimeter along the z axis 
+	 * 
+	 * @see org.lcsim.geometry.subdetector.AbstractPolyhedraCalorimeter
+     * @see org.lcsim.geometry.subdetector.EcalBarrel
+	 * 
+     * Also see Mokka's HCAL models for an example of a calorimeter with sections along z.
+     * 
+	 * section applies directly only to those calorimeters that have some subdivision of their
+     * envelope in the z direction, though basic cylindrical types could "fake it" based on 
+     * the value of iz() or z().
+	 * 
+	 */
+	int section();		
+	
+	/** 
+	 * Module number in calorimeter section 
+	 * 
+	 * @see org.lcsim.geometry.subdetector.AbstractPolyhedraCalorimeter
+     * @see org.lcsim.geometry.subdetector.EcalBarrel
+	 * 
+	 * Usually, there are as many modules as sides in the calorimeter's polyhedra envelope.
+     * 
+	 * Only applies to realistic polyhedra calorimeters, though cylindrical types
+	 * could "fake it" based on the value of iphi() or phi().
+	 * 
+	 */
+	int module();
+	
+	/** 
+	 * Stave number in the module
+	 * 
+	 * @see org.lcsim.geometry.subdetector.AbstractPolyhedraCalorimeter
+     * @see org.lcsim.geometry.subdetector.EcalBarrel
+	 * 
+	 * Mokka's current RPC HCAL is an example of a calorimeter with multiple staves per module. 
+	 * 
+	 */
+	int stave();
+	
+	/** 
+	 * Row number in a plate of cells 
+	 * 
+	 * This is primarily applicable to calorimeters with planar readout volumes,
+	 * such as those within trapezoidal staves.  It could also apply to testbeams. 
+	 */
+	int row();
+	
+	/** 
+	 * Column number in a plate of cells
+	 * 
+	 * This is primarily applicable to calorimeters with planar readout volumes,
+	 * such as those within trapezoidal staves.  It could also apply to testbeams. 	
+	 * 
+	 */
+	int column();
+	
+	/** 
+     * 
+	 * Projective tower number, spanning all the calorimeter subsystems
+	 * 
+	 * FIXME: Is tower a deprecated/superceded concept?
+	 * 
+	 */
+	int tower();
+	
+	/** 
+	 * Is the cell flagged as an absorber layer that was made sensitive for debugging? 
+	 * 
+	 * There are possibly other ways to know whether a cell is actually from an absorber,
+	 * but an interface method is the most straightforward way for user's to access this
+	 * information.
+	 * 
+	 */
+	boolean isAbsorber();
+	
+	/** 
+	 * Is the cell in a barrel?   
+	 * 	 
+	 * @see org.lcsim.geometry.IDDecoder.getBarrelEndcapFlag()
+	 * @see org.lcsim.geometry.subdetector.BarrelEndcapFlag.isBarrel()
+	 * 
+	 */
+	boolean isBarrel();
+	
+	/** 
+	 * Is the cell in an endcap? 
+	 *
+	 * @see org.lcsim.geometry.IDDecoder.getBarrelEndcapFlag()
+	 * @see org.lcsim.geometry.subdetector.BarrelEndcapFlag.isEndcap()
+	 */
+	boolean isEndcap();	
+	
+	/** 
+	 * 
+     * Is the cell in the positive endcap?
+     * 
+	 * @see org.lcsim.geometry.IDDecoder.getBarrelEndcapFlag()
+	 * @see org.lcsim.geometry.subdetector.BarrelEndcapFlag.isEndcapNorth()
+	 * 
+	 */
+	boolean isPositiveEndcap();
+	
+	/** 
+	 * Is the cell in the negative endcap?
+	 * 
+	 * @see org.lcsim.geometry.IDDecoder.getBarrelEndcapFlag()
+     * @see org.lcsim.geometry.subdetector.BarrelEndcapFlag.isEndcapNorth()	 
+	 * 	 
+	 */
+	boolean isNegativeEndcap();
+		
+	/** 
+	 * Is the cell from an ECAL subdetector? 
+	 * 
+	 * @see org.lcsim.geometry.Calorimeter.getCalorimeterType()
+	 * @see org.lcsim.geometry.subdetector.CalorimeterType
+	 * 	 
+	 */
+	boolean isECAL();
+	
+	/** 
+	 * Is the cell from an HCAL subdetector? 
+	 * 	  
+     * @see org.lcsim.geometry.Calorimeter.getCalorimeterType()
+     * @see org.lcsim.geometry.subdetector.CalorimeterType
+	 * 	 
+	 */
+	boolean isHCAL();
+	
+	/** 
+	 * Is the cell from a MUON subdetector? 
+	 * 
+     * @see org.lcsim.geometry.Calorimeter.getCalorimeterType()
+     * @see org.lcsim.geometry.subdetector.CalorimeterType
+	 * 
+	 */
+	boolean isMUON();
+	
+	/** 
+	 * Is the cell from a FWD subdetector? (forward calorimeter)
+	 *  
+     * @see org.lcsim.geometry.Calorimeter.getCalorimeterType()
+     * @see org.lcsim.geometry.subdetector.CalorimeterType
+	 * 
+	 */
+	boolean isFCAL();
+	
+	/**
+	 * Is this cell from a LUMI subdetector? (luminosity monitor)
+	 * 
+     * @see org.lcsim.geometry.Calorimeter.getCalorimeterType()
+     * @see org.lcsim.geometry.subdetector.CalorimeterType
+	 * 
+	 */
+	boolean isLUMI();
+    
+    /**
+     * Is this cell from the given Calorimeter?
+     * It checks that the SystemIDs are the same.
+     */
+    boolean inCalorimeter(Calorimeter cal);
+	
+	/** 
+	 * Subdetector associated with this CalorimeterCell
+	 * 
+     * @see org.lcsim.geometry.Calorimeter.getCalorimeterType()
+     * @see org.lcsim.geometry.subdetector.CalorimeterType
+	 * 
+	 * FIXME: This breaks the usual OO heuristic that a contained object should not
+	 *        reference its container.
+     *        
+	 * FIXME: Need to make sure that a Subdetector reference is not stored with each CalorimeterCell.
+	 *  
+	 */
+	Subdetector subdetector();
+	
+	/** 
+	 * IDDecoder associated with this CalorimeterCell
+	 * 
+	 * @see org.lcsim.event.CalorimeterHit.getIDDecoder()
+	 * 
+	 * FIXME: Need to make sure that an IDDecoder reference is not stored with each CalorimeterCell.
+	 * 
+	 */
+	IDDecoder decoder();
+			
+	/** 
+     * Sampling fraction associated with this cell 
+     * 
+     * FIXME: Is this an appropriate per-cell measurement or should it be external functionality only?
+     * 
+     */
+	double samplingFraction();
+
+    /** 
+     * Is this cell from a digital calorimeter?
+     */
+    boolean isDigital();
+
+    /** 
+     * Is this cell from an analog calorimeter?
+     */  
+    boolean isAnalog();
+           
+    /** 
+     * Layer number 
+     * 
+     * @see org.lcsim.geometry.IDDecoder.getLayer()     
+     *   
+     */
+    int layer();
+
+    /**
+      * 4-vec functionality 
+      * 
+      * @see p()
+      * @see pt()
+      * @see ipt()
+      * 
+      * http://alxr.usatlas.bnl.gov/lxr/source/atlas/Event/FourMom/FourMom/P4EEtaPhiMBase.h
+      *  
+      */    
+    
+    /** 
+     * Interface to MCParticles / MCTruth
+     * 
+     * @see org.lcsim.event.SimCalorimeterHit
+     * 
+     * FIXME: Maybe MCParticle relationships are best done with a derived class
+     * or using an external relation or map.
+     * 
+     */
+    MCParticle getMCParticle(int index);
+    int getMCParticleCount();
+    int getPDG(int index); 
+
+    /** 
+     * Stub for neighbor finding
+     * 
+     * http://alxr.usatlas.bnl.gov/lxr/source/atlas/Calorimeter/CaloIdentifier/CaloIdentifier/CaloNeighbours.h
+     *
+     */
+    CalorimeterCellNeighborhood neighbors(CalorimeterNeighborOptions opts);    
+
+    /**
+     * Measure of cell density 
+     */
+    int density();
+}

GeomConverter/sandbox/calorimeter
CalorimeterCellNeighborhood.java added at 1.1
diff -N CalorimeterCellNeighborhood.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ CalorimeterCellNeighborhood.java	28 Feb 2007 19:50:48 -0000	1.1
@@ -0,0 +1,6 @@
+package org.lcsim.identifier;
+
+public interface CalorimeterCellNeighborhood
+{
+
+}

GeomConverter/sandbox/calorimeter
CalorimeterNeighborOptions.java added at 1.1
diff -N CalorimeterNeighborOptions.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ CalorimeterNeighborOptions.java	28 Feb 2007 19:50:48 -0000	1.1
@@ -0,0 +1,23 @@
+package org.lcsim.identifier;
+// http://alxr.usatlas.bnl.gov/lxr/source/atlas/Calorimeter/CaloIdentifier/CaloIdentifier/LArNeighbours.h
+enum CalorimeterNeighborOptions 
+{ /*
+    prevInPhi              = 0x0001, 
+    nextInPhi              = 0x0002,
+    prevInEta              = 0x0004, 
+    nextInEta              = 0x0008, 
+    faces2D                = prevInPhi | nextInPhi | prevInEta | nextInEta, 
+    corners2D              = 0x0010, 
+    all2D                  = corners2D|faces2D,
+    prevInSamp             = 0x0020,
+    nextInSamp             = 0x0040,
+    upAndDown              = prevInSamp|nextInSamp,
+    prevSubDet             = 0x0080,
+    nextSubDet             = 0x0100, 
+    all3D                  = all2D|prevInSamp|nextInSamp|upAndDown|prevSubDet|nextSubDet,
+    corners3D              = 0x0200, 
+    all3DwithCorners       = all3D|corners3D,
+    prevSuperCalo          = 0x0400, 
+    nextSuperCalo          = 0x0800, 
+    super3D                = all3D|prevSuperCalo|nextSuperCalo*/
+};

GeomConverter/sandbox/calorimeter
PadLayout2D.java added at 1.1
diff -N PadLayout2D.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ PadLayout2D.java	28 Feb 2007 19:50:48 -0000	1.1
@@ -0,0 +1,100 @@
+package org.lcsim.contrib.JeremyMcCormick;
+
+public interface PadLayout2D
+{		
+	enum CoordinateSystem 
+	{
+		CARTESIAN,    // (x, y)
+		POLAR,        // (r, phi)
+		CYLINDRICAL   // (r, z)
+	}
+	
+	enum PadShape
+	{
+		RECTANGLE,
+		DIAMOND,
+		HEXAGON,
+		CHEVRON
+	}
+	
+	// The type of coordinate system.
+	CoordinateSystem getCoordinateSystem();
+		
+	// The pad shape.
+	PadShape getPadShape();
+
+    // The 2D corner points of this pad's bounding shape.  
+    double[][] getCorners(int padIndex);
+				
+	// Total number of pads.
+	int getNumberOfPads();
+	
+	// Number of rows.
+	int getNumberOfRows();
+	
+	// Number of columns.
+	int getNumberOfColumns();
+	
+	// Pad height at a row.
+	double getRowHeight(int rowNumber);
+	
+	// Width of a pad pad.
+	double getPadWidth(int padIndex);
+	
+	// Height of pad at a pad index.
+	double getPadHeight(int padIndex);
+		
+	// Extent of the sensitive plane:
+	// [xmin,xmax,ymin,ymax] for CARTESIAN,
+	// [rmin,rmax,phimin,phimax] for POLAR, and
+	// [rmin,rmax,zmin,zmax] for CYLINDRICAL.
+	double[] getPlaneExtent();
+	
+	// Row number from pad index.
+	int getRowNumber(int padIndex);
+	
+	// Column number from pad index.
+	int getColumnNumber(int padIndex);
+	
+	// Nearest pad from a 2D coordinate.
+	int getNearestPad(double c0, double c1);
+	
+	// Pad center coordinate from index.
+	double[] getPadCenter(int padIndex);
+		
+	// True if the 2D coordinate is inside the given pad.
+	boolean isInsidePad(double c0, double c1, int padIndex);
+	
+	// True if the 2D coordinate is inside any pad.
+	boolean isInsidePad(double c0, double c1);
+	
+	// All pads in a row.
+	int[] getPadsInRow(int rowNumber);
+	
+	// All pads in a column.
+	int[] getPadsInColumn(int columnNumber);
+	
+	// Left neighbor.
+	int getLeftNeighbor(int padIndex);
+	
+	// Right Neighbor.
+	int getRightNeighbor(int padIndex);
+	
+	// Top neighbor.
+	int getTopNeighbor(int padIndex);
+	
+	// Bottom Neighbor.
+	int getBottomNeighbor(int padIndex);
+		
+	// Row neighbors.
+	double[] getRowNeighbors(int padIndex);
+	
+	// Column neighbors.
+	double[] getColumnNeighbors(int padIndex);
+	
+	// Row and column neighbors.
+	double[] getRowColumnNeighbors(int padIndex);
+	
+	// All 2D neighbors, including row, columm, and diagonals.
+	double[] get2DNeighbors(int padIndex);
+}

GeomConverter/sandbox/calorimeter
PadRowLayout2D.java added at 1.1
diff -N PadRowLayout2D.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ PadRowLayout2D.java	28 Feb 2007 19:50:48 -0000	1.1
@@ -0,0 +1,133 @@
+package org.lcsim.contrib.JeremyMcCormick;
+
+import hep.physics.vec.Hep3Vector;
+
+import java.util.List;
+
+/**
+ * Interface for PadRowLayout2D, copied from GEAR's PadRowLayout2D by Frank Gaede.
+ */
+public interface PadRowLayout2D 
+{
+	/** 
+	 * The type of the coordinate system. 
+	 */
+	public enum PadLayoutType
+	{
+		CARTESIAN,
+		POLAR
+	}
+
+	/** 
+	 * The shape of the readout pad. 
+	 */
+	public enum PadShape
+	{
+		RECTANGLE,
+		DIAMOND,
+		HEXAGON,
+		CHEVRON
+	}
+		
+	/** 
+	 * The type of the row labout: CARTESIAN or POLAR.
+	 */
+	PadLayoutType getPadLayoutType();
+	
+	/** 
+	 * The shape of the pads: RECTANGLE, DIAMOND, HEXGON, or CHEVRON.
+	 */
+	PadShape getPadShape();
+	
+	/** 
+	 * The total number of pads. 
+	 */
+	int getNPads();
+	
+	/** 
+	 * The number of rows. 
+	 */
+	int getNRows();
+	
+	/** 
+	 * The row heigh in mm. 
+	 */
+	double getRowHeight(int rowNumber);
+	
+	/** 
+	 * The width of the pad at padIndex in mm (CARTESIAN) or radians (POLAR). 
+	 */
+	double getPadWidth(int padIndex);
+	
+	/**
+	 *  Center of the pad at padIndex. 
+	 */
+	// FIXME: Should return a class representing a 2D point rather than 3D.
+	//        Could use spacegeom's CartesianTwoPoint but GeomConverter cannot
+	//        depend on lcsim!
+	Hep3Vector getPadCenter(int padIndex);
+
+	/** 
+	 * The height of the pad in mm.
+	 */
+	double getPadHeight(int padIndex);
+	
+	/** 
+	 * Indices of all pads in row rowNumber. 
+	 */
+	List<Integer> getPadsInRow(int rowNumber);
+	
+	/** 
+	 * Extent of the geometric readout plane:
+	 * [xmin,xmax,ymin,ymax] for cartesian	or
+	 * [rmin,rmax,phimin,phimax] for polar.
+	 */
+	List<Double> getPlaneExtent();
+	
+	/** 
+	 * The number of the row that contains the pad at padIndex.
+	 */
+	int getRowNumber(int padIndex);
+	
+	/** 
+	 * The pad number within the row. 
+	 */
+	int getPadNumber(int padIndex);
+	
+	/** 
+	 * The index of the pad at row number rowNum and column number padNum.
+	 */
+	int getPadIndex(int rowNum, int padNum);
+	
+	/**
+	 * The index of the pad nearest to the given point in 2d coordinates (x,y) or (r,phi). 
+	 */
+	int getNearestPad(double u, double v);
+	
+	/** 
+	 * The index of the right neighbor pad. 
+	 */
+	int getRightNeighbor(int padIndex);
+	
+	/** 
+	 * The index of the left neighbor pad. 
+	 */
+	int getLeftNeighbor(int padIndex);
+
+	/** 
+	 * The indices of the full set of 2D neighbors, 
+	 * e.g. 8 for a rectangular cell not at any edge.
+	 */
+	// NOTE: This method is not in the GEAR version.
+	int getAllNeighbors(int padIndex);
+		
+	/** 
+	 * True if coordinate (c1,c2) is within the given pad. 
+	 */
+	boolean isInsidePad(double c1, double c2, int padIndex);
+	
+	/**
+	 * True if coordinate (c1,c2) is within any pad. 
+	 */
+	boolean isInsidePad(double u, double v);	
+}
\ No newline at end of file

GeomConverter/sandbox/tracker
SiTrackerBarrelLayerVolume.java added at 1.1
diff -N SiTrackerBarrelLayerVolume.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ SiTrackerBarrelLayerVolume.java	28 Feb 2007 19:50:48 -0000	1.1
@@ -0,0 +1,64 @@
+/*
+ * SiTrackerBarrelLayerVolume.java
+ *
+ * Created on October 9, 2006, 3:15 PM
+ *
+ * To change this template, choose Tools | Template Manager
+ * and open the template in the editor.
+ */
+
+package org.lcsim.contrib.subdetector.tracker.silicon;
+
+import org.lcsim.material.Material;
+import org.lcsim.material.MaterialManager;
+import org.lcsim.material.MaterialNotFoundException;
+import java.util.List;
+import java.util.ArrayList;
+import java.util.Iterator;
+
+import org.jdom.Element;
+import org.jdom.JDOMException;
+
+/**
+ * 
+ * @author tknelson
+ */
+public class SiTrackerBarrelLayerVolume extends LVolume
+{    
+    
+    public SiTrackerBarrelLayerVolume(Element layer) throws JDOMException
+    {
+        super(layer);
+        buildFromXML(layer);
+    }
+    
+    public void buildFromXML(Element lvolume)
+    {
+        // Create name
+        _name = lvolume.getAttributeValue("name");
+        
+        // Create material
+        try
+        {
+            _material = MaterialManager.findMaterial(lvolume.getAttributeValue("material"));
+        }
+        catch (MaterialNotFoundException mnfe)
+        {
+            throw new RuntimeException(mnfe);
+        }
+        
+        // Create solid
+        Element solid = lvolume.getChild("solid");
+        String shape = solid.getAttributeValue("shape");        
+        if (shape=="box") _solid = new Box(solid);
+        if (shape=="tubesegment") _solid = new TubeSegment(solid);
+                
+        // Add physical volumes
+        for (Iterator i = lvolume.getChildren("pvolume").iterator(); i.hasNext();)
+        {
+            _pvolumes.add( new PVolume((Element)i.next()) ) ;
+        }
+                    
+    }
+
+}
\ No newline at end of file

GeomConverter/sandbox
CoordinateTransformation3D.java removed after 1.1
diff -N CoordinateTransformation3D.java
--- CoordinateTransformation3D.java	23 Feb 2007 20:53:01 -0000	1.1
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1,100 +0,0 @@
-/*
- * CoordinateTransformation3D.java
- */
-
-package org.lcsim.detector.kernel;
-
-import hep.physics.vec.Hep3Vector;
-import hep.physics.vec.BasicHep3Vector;
-import hep.physics.vec.VecOp;
-
-/**
- *
- * @author tknelson
- */
-public class CoordinateTransformation3D
-{
-    
-    // Fields
-    Hep3Vector _translation = new BasicHep3Vector(0.0,0.0,0.0);
-    RotationMatrix3D _rotation = new RotationMatrix3D();
-            
-    /**
-     * Creates a new instance of CoordinateTransformation3D
-     */
-    public CoordinateTransformation3D()
-    {
-    }
-    
-    public CoordinateTransformation3D(RotationMatrix3D rotation)
-    {
-    	this._rotation = rotation;
-    }
-    
-    public CoordinateTransformation3D(Hep3Vector translation)
-    {
-    	this._translation = translation;
-    }
-    
-    public CoordinateTransformation3D(Hep3Vector translation, RotationMatrix3D rotation)
-    {
-        _translation = translation;
-        _rotation = rotation;
-    }
-    
-    // Access to translation and rotation
-    public Hep3Vector getTranslation()
-    {
-        return _translation;
-    }
-    
-    public RotationMatrix3D getRotation()
-    {
-        return _rotation;
-    }
-    
-    // Transformations
-    public Hep3Vector transform(Hep3Vector coordinates)
-    {
-        translate(coordinates);
-        rotate(coordinates);
-        return coordinates;
-    }
-    
-    public Hep3Vector translate(Hep3Vector coordinates)
-    {
-        return VecOp.add(coordinates,_translation);
-    }
-    
-    public Hep3Vector rotate(Hep3Vector coordinates)
-    {
-        //return VecOp.mult(_rotation,coordinates);
-    	return VecOp.mult(_rotation.getMatrix(),coordinates);
-    }
-     
-    // Invert the transformation
-    public void invert()
-    {
-        _translation = VecOp.mult(-1.0,VecOp.mult(_rotation.getMatrix(),_translation));
-        _rotation.invert(); // Need to assure that transpose is used        
-    }
-    
-    // FIXME: Talk to Tony about supporting this pattern
-    
-//    public CoordinateTransformation3D inverse()
-//    {
-//        CoordinateTransformation3D transform = new CoordinateTransformation3D(
-//                VecOp.mult(-1.0,VecOp.mult(_rotation,_translation)),
-//                _rotation.inverse()); // FIXME: Need to assure that transpose is used
-//        return transform;
-//    }
-    
-    // Static functions
-    public static CoordinateTransformation3D mult(CoordinateTransformation3D transformation1, CoordinateTransformation3D transformation2)
-    {
-        RotationMatrix3D rotation = new RotationMatrix3D(VecOp.mult(transformation1.getRotation().getMatrix(),transformation2.getRotation().getMatrix()));
-        Hep3Vector translation = VecOp.add(VecOp.mult(transformation1.getRotation().getMatrix(),transformation2.getTranslation()),transformation1.getTranslation());
-        return new CoordinateTransformation3D(translation,rotation);
-    }
-    
-}

GeomConverter/sandbox
DetectorElement.java removed after 1.1
diff -N DetectorElement.java
--- DetectorElement.java	23 Feb 2007 20:53:01 -0000	1.1
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1,35 +0,0 @@
-/*
- * IDetectorElement.java
- *
- * Created on November 2, 2006, 4:51 PM
- *
- * To change this template, choose Tools | Template Manager
- * and open the template in the editor.
- */
-
-package org.lcsim.contrib.JeremyMcCormick;
-
-import java.util.List;
-
-/**
- *
- * @author tknelson
- */
-// SlowControl
-// FastControl 
-// Calibration
-// ReadOut
-public interface DetectorElement
-{
-    public IGeometryInfo geometry();
-    
-    public void createGeometry();
-     
-    public DetectorElement parent();
-    
-    public DetectorElementCollection getChildren();
-
-    void initialize();
-    
-    String name();          
-}

GeomConverter/sandbox
DetectorElementCollection.java removed after 1.1
diff -N DetectorElementCollection.java
--- DetectorElementCollection.java	23 Feb 2007 20:53:01 -0000	1.1
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1,2 +0,0 @@
-class DetectorElementCollection extends Collection<DetectorElement>
-{}

GeomConverter/sandbox
DetectorElementMixin.java removed after 1.1
diff -N DetectorElementMixin.java
--- DetectorElementMixin.java	23 Feb 2007 20:53:01 -0000	1.1
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1,8 +0,0 @@
-package org.lcsim.contrib.JeremyMcCormick;
-
-public interface DetectorElementMixin 
-{
-	DetectorElement getDetectorElement();
-	void setDetectorElement(DetectorElement detelem);
-	boolean hasValidDetectorElement();
-}

GeomConverter/sandbox
DetectorID.java removed after 1.1
diff -N DetectorID.java
--- DetectorID.java	23 Feb 2007 20:53:01 -0000	1.1
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1,80 +0,0 @@
-package org.lcsim.contrib.JeremyMcCormick;
-
-import org.lcsim.contrib.JeremyMcCormick.identifier.Identifier;
-
-/**
- * Idea for global detector identifier based on AtlasDetectorID.
- * @author jeremym
- *
- */
-public interface DetectorID 
-{
-	public boolean isVertexBarrel(Identifier i);
-	public boolean isVertexEndcap(Identifier i);
-	public boolean isForwardCalorimter(Identifier i);
-	public boolean isLuminosityMonitor(Identifier i);
-	public boolean isGammaCal(Identifier i);
-	public boolean isTrackerBarrel(Identifier i);
-	public boolean isTrackerEndcap(Identifier i);
-	public boolean isTPC(Identifier i);
-	public boolean isEcalBarrel(Identifier i);
-	public boolean isEcalEndcap(Identifier i);
-	public boolean isHadBarrel(Identifier i);
-	public boolean isHadEndcap(Identifier i);
-	public boolean isMuonBarrel(Identifier i);
-	public boolean isMuonEndcap(Identifier i);
-	
-	public Identifier getVertexBarrelID();
-	public Identifier getVertexEndcapID();
-	public Identifier getForwardCalorimeterID();
-	public Identifier getLuminosityMonitorID();
-	public Identifier getGammaCalID();
-	public Identifier getTrackerBarrelID();
-	public Identifier getTrackerEndcapID();
-	public Identifier getTPCID();
-	public Identifier getEcalBarrelID();
-	public Identifier getEcalEndcapID();
-	public Identifier getHadBarrelID();
-	public Identifier getHadEndcapID();
-	public Identifier getMuonBarrelID();
-	public Identifier getMuonEndcapID();
-	
-	public int getVertexBarrelValue();
-	public int getVertexEndcapValue();
-	public int getForwardCalorimeterValue();
-	public int getLuminosityMonitorValue();
-	public int getGammaCalValue();
-	public int getTrackerBarrelValue();
-	public int getTrackerEndcapValue();
-	public int getTPCValue();
-	public int getEcalBarrelValue();
-	public int getEcalEndcapValue();
-	public int getHadBarrelValue();
-	public int getHadEndcapValue();
-	public int getMuonBarrelValue();
-	public int getMuonEndcapValue();
-	
-
-	
-	
-	/*
-	 
-	 VertexBarrel
-	 VertexEndcap
-	 ForwardCalorimeter
-	 LuminosityMonitor
-	 GammaCal
-	 TrackerBarrel
-	 TrackerEndcap
-	 TPC
-	 EcalBarrel
-	 EcalEndcap
-	 HadBarrel
-	 HadEndcap
-	 MuonBarrel
-	 MuonEndcap	 	 	 
-	 
-	 */
-	
-	
-}

GeomConverter/sandbox
GeometryCatalog.java removed after 1.1
diff -N GeometryCatalog.java
--- GeometryCatalog.java	23 Feb 2007 20:53:01 -0000	1.1
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1,62 +0,0 @@
-/*
- * GeometryCatalog.java
- *
- * Created on November 9, 2006, 2:42 PM
- *
- * To change this template, choose Tools | Template Manager
- * and open the template in the editor.
- */
-
-package org.lcsim.contrib.subdetector.tracker.silicon;
-
-import java.util.Map;
-import java.util.HashMap;
-
-/**
- *
- * @author tknelson
- */
-public class GeometryCatalog
-{
-    
-    // Singleton implementation
-    static private GeometryCatalog _instance;
-
-    /**
-     * Creates a new instance of GeometryCatalog
-     */
-    private GeometryCatalog()
-    {
-    }
-
-    static public GeometryCatalog getInstance()
-    {
-        if (_instance == null)
-        {
-            _instance = new GeometryCatalog();
-        }
-        return _instance;
-    }        
-    
-    
-    // Storage of LVolumes
-    //====================
-    private Map<String,LVolume> _lvolumes = new HashMap<String,LVolume>();
-    
-    public LVolume getLVolume(String name)
-    {
-        return _lvolumes.get(name);
-    }
-    
-    public void addLVolume(String name, LVolume lvolume)
-    {
-        _lvolumes.put(name,lvolume);
-    }
-    
-    public void clearLVolumes()
-    {
-        _lvolumes.clear();
-    }
-    
-    
-}

GeomConverter/sandbox
GeometryInfo.java removed after 1.1
diff -N GeometryInfo.java
--- GeometryInfo.java	23 Feb 2007 20:53:01 -0000	1.1
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1,103 +0,0 @@
-/*
- * GeometryInfo.java
- *
- * Created on November 6, 2006, 11:12 AM
- *
- * To change this template, choose Tools | Template Manager
- * and open the template in the editor.
- */
-
-package org.lcsim.contrib.subdetector.tracker.silicon;
-
-import hep.physics.vec.Hep3Vector;
-import java.util.List;
-
-/**
- *
- * @author tknelson
- */
-public class GeometryInfo implements IGeometryInfo
-{
-    
-    // Fields
-    //=======
-    CoordinateTransformation3D _global_to_local;
-    CoordinateTransformation3D _local_to_global;
-    LVolume _logical_volume;
-    List<PVolume> _daughter_volumes;
-    
-    /** Creates a new instance of GeometryInfo */
-    public GeometryInfo(CoordinateTransformation3D global_to_local, LVolume logical_volume)
-    {
-        _global_to_local = global_to_local;
-        _local_to_global = global_to_local.inverse();
-        _logical_volume = logical_volume;
-    }
-    
-    // Accessors
-    public CoordinateTransformation3D getGlobalToLocal()
-    {
-        return _global_to_local;
-    }
-    
-    public CoordinateTransformation3D getLocalToGlobal()
-    {
-        return _local_to_global;
-    }
-    
-    public Hep3Vector globalToLocal(Hep3Vector global_point)
-    {
-        return _global_to_local.transform(global_point);
-    }
-    
-    public Hep3Vector localToGlobal(Hep3Vector local_point)
-    {
-        return _local_to_global.transform(local_point);
-    }
-    
-    public String childVolumeName(Hep3Vector global_point)
-    {
-        Hep3Vector parent_point = globalToLocal(global_point);
-        List<PVolume> daughter_volumes = getLogicalVolume().getDaughters();
-        
-        String volume_name = "";
-        for (PVolume daughter_volume : _daughter_volumes)
-        {            
-            if (daughter_volume.getLogicalVolume().getSolid().isInside(daughter_volume.parentToLocal(parent_point)));
-            {
-                volume_name = daughter_volume.getLogicalVolume().getName();
-                break;
-            }
-        }        
-        return volume_name;
-    }
-    
-    public PVolume childVolume(Hep3Vector global_point)
-    {
-        Hep3Vector parent_point = globalToLocal(global_point);
-        List<PVolume> daughter_volumes = getLogicalVolume().getDaughters();
-        
-        PVolume volume = null;
-        for (PVolume daughter_volume : _daughter_volumes)
-        {            
-            if (daughter_volume.getLogicalVolume().getSolid().isInside(daughter_volume.parentToLocal(parent_point)));
-            {
-                volume = daughter_volume;
-                break;
-            }
-        }        
-        return volume;
-    }
-    
-    public boolean isInside(Hep3Vector global_point)
-    {
-        return getLogicalVolume().getSolid().isInside(globalToLocal(global_point));
-    }
-    
-    public LVolume getLogicalVolume()
-    {
-        return _logical_volume;
-    }
-    
-    
-}
\ No newline at end of file

GeomConverter/sandbox
IDetectorElement.java removed after 1.1
diff -N IDetectorElement.java
--- IDetectorElement.java	23 Feb 2007 20:53:01 -0000	1.1
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1,36 +0,0 @@
-/*
- * IDetectorElement.java
- *
- * Created on November 2, 2006, 4:51 PM
- *
- * To change this template, choose Tools | Template Manager
- * and open the template in the editor.
- */
-
-package org.lcsim.contrib.JeremyMcCormick;
-
-import java.util.List;
-
-/**
- *
- * @author tknelson
- * @author Jeremy McCormick <[log in to unmask]>
- */
-// SlowControl
-// FastControl 
-// Calibration
-// ReadOut
-public interface IDetectorElement
-{
-    public IGeometryInfo geometry();
-    
-    public void createGeometry();
-     
-    public DetectorElement parent();
-    
-    public DetectorElementCollection children();
-
-    void initialize();
-    
-    String name();          
-}

GeomConverter/sandbox
IGeometryInfo.java removed after 1.1
diff -N IGeometryInfo.java
--- IGeometryInfo.java	23 Feb 2007 20:53:01 -0000	1.1
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1,49 +0,0 @@
-/*
- * IGeometryInfo.java
- *
- * Created on November 2, 2006, 4:51 PM
- *
- * To change this template, choose Tools | Template Manager
- * and open the template in the editor.
- */
-
-package org.lcsim.contrib.JeremyMcCormick;
-
-import hep.physics.vec.Hep3Vector;
-
-/**
- *
- * @author tknelson
- */
-public interface IGeometryInfo
-{
-    
-    // global to local transformation
-    public CoordinateTransformation3D getGlobalToLocal();
-    
-    // local to global transformation
-    public CoordinateTransformation3D getLocalToGlobal();
-    
-    // transform a point in local coordinates to global coordinates
-    public Hep3Vector localToGlobal(Hep3Vector local_point);
-    
-    // transform a point in global coordinates to local coordinates
-    public Hep3Vector globalToLocal(Hep3Vector global_point);
-            
-    // get name of daughter volume containing a point in global coordinates
-    public String childVolumeName(Hep3Vector global_point);
-    
-    // get daughter volume containing a point in global coordinates
-    public PVolume childVolume(Hep3Vector global_point);
-
-    // Gaudi has "get the exact full geometry location"  What does this mean???
-    // One interpretation, entire heirarchy as map of LVolumes to 
-    //    positions in coordinates of each volume
-    // public Map<ILVolume,Hep3Vector>
-    
-    // determine whether a point is inside the logical volume
-    public boolean isInside(Hep3Vector global_point);
-    
-    // get the associated logical volume
-    public LVolume getLogicalVolume();
-}

GeomConverter/sandbox
ISolid.java removed after 1.1
diff -N ISolid.java
--- ISolid.java	23 Feb 2007 20:53:01 -0000	1.1
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1,35 +0,0 @@
-/*
- * ISolid.java
- *
- * Created on October 9, 2006, 3:44 PM
- *
- * To change this template, choose Tools | Template Manager
- * and open the template in the editor.
- */
-
-package org.lcsim.contrib.subdetector.tracker.silicon;
-
-import hep.physics.vec.Hep3Vector;
-import org.jdom.Element;
-import org.jdom.DataConversionException;
-
-/**
- *
- * @author tknelson
- */
-public interface ISolid
-{
-    
-    // Return dimensions
-    public double[] getDimensions();
-    
-    // Calculate volume
-    public double getVolume();
-    
-    // Is a particular point inside?
-    public boolean isInside(Hep3Vector point);
-    
-    // Must be buildable from xml
-    public void buildFromXML(Element solid);
- 
-}

GeomConverter/sandbox
LVolume.java removed after 1.1
diff -N LVolume.java
--- LVolume.java	23 Feb 2007 20:53:01 -0000	1.1
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1,102 +0,0 @@
-/*
- * LVolume.java
- *
- * Created on October 9, 2006, 3:15 PM
- *
- * To change this template, choose Tools | Template Manager
- * and open the template in the editor.
- */
-
-package org.lcsim.contrib.subdetector.tracker.silicon;
-
-import org.lcsim.material.Material;
-import org.lcsim.material.MaterialManager;
-import org.lcsim.material.MaterialNotFoundException;
-import java.util.List;
-import java.util.ArrayList;
-import java.util.Iterator;
-
-import org.jdom.Element;
-import org.jdom.JDOMException;
-
-/**
- * 
- * @author tknelson
- */
-public class LVolume
-{    
-    // Fields
-    protected String _name;
-    protected Material _material;
-    protected ISolid _solid; 
-    protected List<PVolume> _pvolumes = new ArrayList<PVolume>();
-    
-    public LVolume(String name, ISolid solid, Material material)
-    {
-        _name = name;
-        _solid = solid;
-        _material = material;
-    }
-    
-    public LVolume(Element lvolume) throws JDOMException
-    {
-        buildFromXML(lvolume);
-    }
-    
-    // Accessors
-    //==========
-    public String getName()
-    {
-        return _name;
-    }
-    
-    public Material getMaterial()
-    {
-        return _material;
-    }
-
-    public ISolid getSolid()
-    {
-    	return _solid;
-    }
-    
-    public List<PVolume> getPVolumes()
-    {
-        return _pvolumes;
-    }
-    
-    public void addPVolume(PVolume pvolume)
-    {
-        _pvolumes.add(pvolume);
-    }
-    
-    public void buildFromXML(Element lvolume)
-    {
-        // Create name
-        _name = lvolume.getAttributeValue("name");
-        
-        // Create material
-        try
-        {
-            _material = MaterialManager.findMaterial(lvolume.getAttributeValue("material"));
-        }
-        catch (MaterialNotFoundException mnfe)
-        {
-            throw new RuntimeException(mnfe);
-        }
-        
-        // Create solid
-        Element solid = lvolume.getChild("solid");
-        String shape = solid.getAttributeValue("shape");        
-        if (shape=="box") _solid = new Box(solid);
-        if (shape=="tubesegment") _solid = new TubeSegment(solid);
-                
-        // Add physical volumes
-        for (Iterator i = lvolume.getChildren("pvolume").iterator(); i.hasNext();)
-        {
-            addPVolume( new PVolume((Element)i.next()) ) ;
-        }
-                    
-    }
-
-}
\ No newline at end of file

GeomConverter/sandbox
PVolume.java removed after 1.1
diff -N PVolume.java
--- PVolume.java	23 Feb 2007 20:53:01 -0000	1.1
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1,107 +0,0 @@
-/*
- * PVolume.java
- *
- * Created on November 2, 2006, 5:17 PM
- *
- * To change this template, choose Tools | Template Manager
- * and open the template in the editor.
- */
-
-package org.lcsim.contrib.subdetector.tracker.silicon;
-
-import hep.physics.vec.Hep3Vector;
-import hep.physics.vec.BasicHep3Vector;
-import org.jdom.Element;
-import org.jdom.DataConversionException;
-
-/**
- *
- * @author tknelson
- */
-public class PVolume
-{
-    
-    private String _name;
-    private String _lvolume_name;
-    private CoordinateTransformation3D _parent_to_local = new CoordinateTransformation3D();
-    
-    /** Creates a new instance of PVolume */
-    public PVolume(String name, String lvolume_name, CoordinateTransformation3D parent_to_local)
-    {
-        _name = name;
-        _lvolume_name = lvolume_name;
-        _parent_to_local = parent_to_local;
-    }
-    
-    public PVolume(Element pvolume)
-    {
-        buildFromXML(pvolume);
-    }  
-    
-    // Accessors
-    //==========
-    public String getName()
-    {
-        return _name;
-    }
-    
-    public String getLVolumeName()
-    {
-        return _lvolume_name;
-    }
-    
-    public LVolume getLVolume(String name)
-    {
-        return GeometryCatalog.getInstance().getLVolume(_lvolume_name);
-    }
-    
-    public CoordinateTransformation3D getParentToLocal()
-    {
-        return _parent_to_local;
-    }
-    
-    public Hep3Vector parentToLocal(Hep3Vector parent_point)
-    {
-        return _parent_to_local.transform(parent_point);
-    }
-    
-    public void buildFromXML(Element pvolume)
-    {
-        // Create name
-        _name = pvolume.getAttributeValue("name");
-        
-        // Create lvolume name
-        _lvolume_name = pvolume.getAttributeValue("lvolume");
-        
-        // Create CoordinateTransformation3D
-        Element trans = pvolume.getChild("posXYZ");
-        Hep3Vector translation = null;
-        try
-        {
-        translation = new BasicHep3Vector(trans.getAttribute("x").getDoubleValue(),
-                                          trans.getAttribute("y").getDoubleValue(),
-                                          trans.getAttribute("z").getDoubleValue());        
-        }
-        catch (DataConversionException dce)
-        {
-            System.out.println("Cannot convert translation to double!");
-        }
-        
-        Element rot = pvolume.getChild("rotXYZ");
-        Hep3Rotation rotation = null;
-        try
-        {
-        rotation = Hep3Rotation.passiveTaitBryan(rot.getAttribute("rot_x").getDoubleValue(),
-                                                 rot.getAttribute("rot_y").getDoubleValue(),
-                                                 rot.getAttribute("rot_z").getDoubleValue());
-        }
-        catch (DataConversionException dce)
-        {
-            System.out.println("Cannot convert rotation to double!");
-        }
-        
-        _parent_to_local = new CoordinateTransformation3D(translation,rotation);
-
-    }
-                
-}

GeomConverter/sandbox
PadRowLayout2D.java removed after 1.1
diff -N PadRowLayout2D.java
--- PadRowLayout2D.java	23 Feb 2007 20:53:01 -0000	1.1
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1,133 +0,0 @@
-package org.lcsim.contrib.JeremyMcCormick;
-
-import hep.physics.vec.Hep3Vector;
-
-import java.util.List;
-
-/**
- * Interface for PadRowLayout2D, copied from GEAR's PadRowLayout2D by Frank Gaede.
- */
-public interface PadRowLayout2D 
-{
-	/** 
-	 * The type of the coordinate system. 
-	 */
-	public enum PadLayoutType
-	{
-		CARTESIAN,
-		POLAR
-	}
-
-	/** 
-	 * The shape of the readout pad. 
-	 */
-	public enum PadShape
-	{
-		RECTANGLE,
-		DIAMOND,
-		HEXAGON,
-		CHEVRON
-	}
-		
-	/** 
-	 * The type of the row labout: CARTESIAN or POLAR.
-	 */
-	PadLayoutType getPadLayoutType();
-	
-	/** 
-	 * The shape of the pads: RECTANGLE, DIAMOND, HEXGON, or CHEVRON.
-	 */
-	PadShape getPadShape();
-	
-	/** 
-	 * The total number of pads. 
-	 */
-	int getNPads();
-	
-	/** 
-	 * The number of rows. 
-	 */
-	int getNRows();
-	
-	/** 
-	 * The row heigh in mm. 
-	 */
-	double getRowHeight(int rowNumber);
-	
-	/** 
-	 * The width of the pad at padIndex in mm (CARTESIAN) or radians (POLAR). 
-	 */
-	double getPadWidth(int padIndex);
-	
-	/**
-	 *  Center of the pad at padIndex. 
-	 */
-	// FIXME: Should return a class representing a 2D point rather than 3D.
-	//        Could use spacegeom's CartesianTwoPoint but GeomConverter cannot
-	//        depend on lcsim!
-	Hep3Vector getPadCenter(int padIndex);
-
-	/** 
-	 * The height of the pad in mm.
-	 */
-	double getPadHeight(int padIndex);
-	
-	/** 
-	 * Indices of all pads in row rowNumber. 
-	 */
-	List<Integer> getPadsInRow(int rowNumber);
-	
-	/** 
-	 * Extent of the geometric readout plane:
-	 * [xmin,xmax,ymin,ymax] for cartesian	or
-	 * [rmin,rmax,phimin,phimax] for polar.
-	 */
-	List<Double> getPlaneExtent();
-	
-	/** 
-	 * The number of the row that contains the pad at padIndex.
-	 */
-	int getRowNumber(int padIndex);
-	
-	/** 
-	 * The pad number within the row. 
-	 */
-	int getPadNumber(int padIndex);
-	
-	/** 
-	 * The index of the pad at row number rowNum and column number padNum.
-	 */
-	int getPadIndex(int rowNum, int padNum);
-	
-	/**
-	 * The index of the pad nearest to the given point in 2d coordinates (x,y) or (r,phi). 
-	 */
-	int getNearestPad(double u, double v);
-	
-	/** 
-	 * The index of the right neighbor pad. 
-	 */
-	int getRightNeighbor(int padIndex);
-	
-	/** 
-	 * The index of the left neighbor pad. 
-	 */
-	int getLeftNeighbor(int padIndex);
-
-	/** 
-	 * The indices of the full set of 2D neighbors, 
-	 * e.g. 8 for a rectangular cell not at any edge.
-	 */
-	// NOTE: This method is not in the GEAR version.
-	int getAllNeighbors(int padIndex);
-		
-	/** 
-	 * True if coordinate (c1,c2) is within the given pad. 
-	 */
-	boolean isInsidePad(double c1, double c2, int padIndex);
-	
-	/**
-	 * True if coordinate (c1,c2) is within any pad. 
-	 */
-	boolean isInsidePad(double u, double v);	
-}
\ No newline at end of file

GeomConverter/sandbox
Trapezoid.java removed after 1.1
diff -N Trapezoid.java
--- Trapezoid.java	23 Feb 2007 20:53:01 -0000	1.1
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1,80 +0,0 @@
-/*
- * Trapezoid.java
- *
- * Created on October 6, 2006, 4:41 PM
- *
- * To change this template, choose Tools | Template Manager
- * and open the template in the editor.
- */
-
-package org.lcsim.contrib.subdetector.tracker.silicon;
-
-import hep.physics.vec.Hep3Vector;
-import org.jdom.Element;
-import org.jdom.DataConversionException;
-
-/**
- *
- * @author tknelson
- */
-public class Trapezoid implements ISolid
-{
-    
-    // Fields
-    //=======
-    private double _dimensions[] = new double[4];
-
-    /** Creates a new instance of Box */
-    public Trapezoid(double[] dimensions)
-    {
-        _dimensions = dimensions;
-    }
-    
-    public Trapezoid(double x1, double x2, double y, double z)
-    {
-        _dimensions[0] = x1;
-        _dimensions[1] = x2;
-        _dimensions[2] = y;
-        _dimensions[3] = z;
-    }
-    
-    // Public methods
-    //===============
-    public double[] getDimensions()
-    {
-        return _dimensions;
-    }
-    
-    public double getVolume()
-    {
-        return (_dimensions[0]+_dimensions[1])/2.0 * _dimensions[2] * _dimensions[3];
-    }
-    
-    public boolean isInside(Hep3Vector point)
-    {
-        double inverse_slope = (_dimensions[1]-_dimensions[0])/(2.0*_dimensions[2]);
-        double x_intercept = (_dimensions[0]+_dimensions[1]/4.0);
-   
-        double x_limit = inverse_slope*point.y()+x_intercept;
-        
-        return ( Math.abs(point.x()) < x_limit &&
-                 Math.abs(point.y()) < _dimensions[2]/2.0 &&
-                 Math.abs(point.z()) < _dimensions[3]/2.0 );
-    }
-    
-    public void buildFromXML(Element trapezoid)
-    {
-        try
-        {
-            _dimensions[0] = trapezoid.getAttribute("size_x1").getDoubleValue();
-            _dimensions[1] = trapezoid.getAttribute("size_x2").getDoubleValue();
-            _dimensions[2] = trapezoid.getAttribute("size_y").getDoubleValue();
-            _dimensions[3] = trapezoid.getAttribute("size_z").getDoubleValue();
-        }
-        catch (DataConversionException dce)
-        {
-            System.out.println("Cannot convert Trapezoid dimensions to double!");
-        }
-    }
-    
-}

GeomConverter/sandbox
TubeSegment.java removed after 1.1
diff -N TubeSegment.java
--- TubeSegment.java	23 Feb 2007 20:53:01 -0000	1.1
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1,85 +0,0 @@
-/*
- * TubeSegment.java
- *
- * Created on November 3, 2006, 2:41 PM
- *
- * To change this template, choose Tools | Template Manager
- * and open the template in the editor.
- */
-
-package org.lcsim.contrib.subdetector.tracker.silicon;
-
-import hep.physics.vec.Hep3Vector;
-import org.jdom.Element;
-import org.jdom.DataConversionException;
-
-/**
- *
- * @author tknelson
- */
-public class TubeSegment implements ISolid
-{
-     
-    // Fields
-    //=======
-    private double _dimensions[] = new double[3];
-
-    /** Creates a new instance of Box */
-    public TubeSegment(Element tubesegment)
-    {
-        buildFromXML(tubesegment);
-    }
-    
-    // Accessors
-    //==========
-    public double getInnerRadius()
-    {
-        return _dimensions[0];
-    }
-    
-    public double getOuterRadius()
-    {
-        return _dimensions[1];
-    }
-    
-    public double getZLength()
-    {
-        return _dimensions[2];
-    }
-    
-    // Implementation of ISolid
-    //=========================
-    public double[] getDimensions()
-    {
-        return _dimensions;
-    }
-    
-    public double getVolume()
-    {
-        return Math.PI*(_dimensions[1]*_dimensions[1] - _dimensions[0]*_dimensions[0])*_dimensions[2];
-    }
-    
-    public boolean isInside(Hep3Vector point)
-    {
-        double r_xy = Math.sqrt(point.x()*point.x() + point.y()*point.y());
-
-        return ( r_xy > _dimensions[0] &&
-                 r_xy < _dimensions[1] &&
-                 Math.abs(point.z()) < _dimensions[2]/2.0 );
-    }
-    
-    public void buildFromXML(Element tubesegment)
-    {
-        try
-        {
-            _dimensions[0] = tubesegment.getAttribute("r_inner").getDoubleValue();
-            _dimensions[1] = tubesegment.getAttribute("r_outer").getDoubleValue();
-            _dimensions[2] = tubesegment.getAttribute("z_length").getDoubleValue();
-        }
-        catch (DataConversionException dce)
-        {
-            System.out.println("Cannot convert TubeSegment dimensions to double!");
-        }
-    }
-    
-}
CVSspam 0.2.8