Commit in GeomConverter/src/org/lcsim/detector on MAIN
tracker/silicon/SiSensor.java+371.9 -> 1.10
               /SiSensorElectrodes.java+21-21.4 -> 1.5
               /SiStrips.java+42-101.7 -> 1.8
converter/compact/SiTrackerBarrelConverter.java+22-51.19 -> 1.20
+122-17
4 modified files
Code changes to support external digitization package

GeomConverter/src/org/lcsim/detector/tracker/silicon
SiSensor.java 1.9 -> 1.10
diff -u -r1.9 -r1.10
--- SiSensor.java	25 May 2007 20:16:27 -0000	1.9
+++ SiSensor.java	3 Jul 2007 23:35:34 -0000	1.10
@@ -12,6 +12,7 @@
 import hep.physics.vec.BasicHep3Vector;
 import hep.physics.vec.Hep3Vector;
 import hep.physics.vec.VecOp;
+import hep.physics.matrix.BasicMatrix;
 
 import java.util.ArrayList;
 import java.util.EnumMap;
@@ -60,6 +61,7 @@
     // electrodes, electrode angles and orientation of sensor
     private Map<ChargeCarrier, SiSensorElectrodes> _sense_electrodes = new EnumMap<ChargeCarrier,SiSensorElectrodes>(ChargeCarrier.class);
     private Map<ChargeCarrier, SiSensorElectrodes> _readout_electrodes = new EnumMap<ChargeCarrier,SiSensorElectrodes>(ChargeCarrier.class);
+    private Map<ChargeCarrier, BasicMatrix> _transfer_efficiencies = new EnumMap<ChargeCarrier,BasicMatrix>(ChargeCarrier.class);
     private Map<ChargeCarrier, Double> _electrode_angles = new EnumMap<ChargeCarrier,Double>(ChargeCarrier.class);
     private Orientation _orientation;
 
@@ -114,6 +116,21 @@
     {
         _sense_electrodes.put(carrier,electrodes);
     }
+ 
+    public void setSenseElectrodes(ChargeCarrier carrier, SiSensorElectrodes sense_electrodes)
+    {
+        _sense_electrodes.put(carrier,sense_electrodes);
+    }
+
+    public void setReadoutElectrodes(ChargeCarrier carrier, SiSensorElectrodes readout_electrodes)
+    {
+        _readout_electrodes.put(carrier,readout_electrodes);
+    }
+    
+    public void setTransferEfficiencies(ChargeCarrier carrier, BasicMatrix transfer_efficiencies)
+    {
+        _transfer_efficiencies.put(carrier,transfer_efficiencies);
+    }
     
     public void setElectrodeAngle(ChargeCarrier carrier, double electrode_angle)
     {
@@ -156,6 +173,21 @@
         return _sense_electrodes.get(carrier);
     }
     
+    public SiSensorElectrodes getSenseElectrodes(ChargeCarrier carrier)
+    {
+        return _sense_electrodes.get(carrier);
+    }
+    
+    public SiSensorElectrodes getReadoutElectrodes(ChargeCarrier carrier)
+    {
+        return _readout_electrodes.get(carrier);
+    }
+    
+    public BasicMatrix getTransferEfficiencies(ChargeCarrier carrier)
+    {
+        return _transfer_efficiencies.get(carrier);
+    }
+    
     public double getElectrodeAngle(ChargeCarrier carrier)
     {
         return _electrode_angles.get(carrier);
@@ -265,6 +297,11 @@
         else return -_thickness/2.0;
     }
     
+    public boolean isACCoupled(ChargeCarrier carrier)
+    {
+        return (this._readout_electrodes.get(carrier) != null);
+    }
+    
     public double distanceFromSide(Hep3Vector point, ChargeCarrier carrier)
     {
 //        System.out.println("Beginning distanceFromSide");        

GeomConverter/src/org/lcsim/detector/tracker/silicon
SiSensorElectrodes.java 1.4 -> 1.5
diff -u -r1.4 -r1.5
--- SiSensorElectrodes.java	18 May 2007 21:56:34 -0000	1.4
+++ SiSensorElectrodes.java	3 Jul 2007 23:35:34 -0000	1.5
@@ -11,6 +11,7 @@
 
 import hep.physics.vec.Hep3Vector;
 import java.util.SortedMap;
+import java.util.Set;
 
 /**
  *
@@ -18,14 +19,17 @@
  */
 public interface SiSensorElectrodes
 {
-    // Cell shape, assumed to be a polygon with an even number of sides (1=strip, 2=rectagular pixel, 3=hexagon, etc...)
+    // Cell shape, assumed to be strips or rectancular pixels
     public int getNAxes();
     
     // Direction of each measured coordinate
     public Hep3Vector getMeasuredCoordinate(int axis);
     
     // Neigbor ncells away along each axis
-    public int getNeighborCell(int cell, int axis, int ncells);
+    public int getNeighborCell(int cell, int ncells_0, int ncells_1);
+    
+    // Get all nearest neighbor cells
+    public Set<Integer> getNearestNeighborCells(int cell);
 
     // Cell number is valid
     public boolean isValidCell(int cell);
@@ -48,6 +52,21 @@
     // ID of cell at a given position (cell number)
     public int getCellID(Hep3Vector position);
     
+    // Column number of cell at given position
+    public int getColumnNumber(Hep3Vector position);
+    
+    // Row number of cell at given position
+    public int getRowNumber(Hep3Vector position);   
+    
+    // ID of cell from row and column number
+    public int getCellID(int row_number, int column_number);
+   
+    // Column number of cell from ID
+    public int getColumnNumber(int cell_id);
+    
+    // Row number of cell from ID
+    public int getRowNumber(int cell_id);
+    
     // Location of given position within a cell
     public Hep3Vector getPositionInCell(Hep3Vector position);
     

GeomConverter/src/org/lcsim/detector/tracker/silicon
SiStrips.java 1.7 -> 1.8
diff -u -r1.7 -r1.8
--- SiStrips.java	18 May 2007 21:56:34 -0000	1.7
+++ SiStrips.java	3 Jul 2007 23:35:34 -0000	1.8
@@ -17,6 +17,8 @@
 import org.apache.commons.math.MathException;
 import java.util.SortedMap;
 import java.util.TreeMap;
+import java.util.Set;
+import java.util.HashSet;
 
 /**
  *
@@ -129,12 +131,12 @@
     
     private Hep3Vector getPositionInSenseCell(Hep3Vector position)
     {
-        return VecOp.add(position,new BasicHep3Vector(-getSenseStripID(position)*getSensePitch(), 0.0, 0.0));
+        return VecOp.sub(position,getSenseStripPosition(getSenseStripID(position)));
     }
     
     private Hep3Vector getPositionInReadoutCell(Hep3Vector position)
     {
-        return VecOp.add(position,new BasicHep3Vector(-getReadoutStripID(position)*getReadoutPitch(), 0.0, 0.0));
+        return VecOp.sub(position,getReadoutStripPosition(getReadoutStripID(position)));
     }
     
     private Hep3Vector getSenseStripPosition(int sense_strip_number)
@@ -167,16 +169,22 @@
         else return null;
     }
     
-    public int getNeighborCell(int cell, int axis, int ncells)
+    public int getNeighborCell(int cell, int ncells_0, int ncells_1)
     {
-        if (axis == 0)
+        int neighbor_cell = cell + ncells_0;
+        if (isValidCell(neighbor_cell)) return neighbor_cell;
+        else return -1;        
+    }
+
+    public Set<Integer> getNearestNeighborCells(int cell)
+    {
+        Set<Integer> neighbors = new HashSet<Integer>();
+        for (int ineigh = -1 ; ineigh <= 1; ineigh=ineigh+2)
         {
-            int neighbor_cell = cell + ncells;
-            if (isValidCell(neighbor_cell, axis)) return neighbor_cell;
-            else return -1;
+            int neighbor_cell = getNeighborCell(cell,ineigh,0);
+            if (isValidCell(neighbor_cell)) neighbors.add(neighbor_cell);
         }
-        else return -1;
-        
+        return neighbors;
     }
     
     public boolean isValidCell(int cell)
@@ -208,11 +216,35 @@
         return getReadoutPitch();
     }
      
-    // FIXME: cell ID assignment is not correct in all cases
     public int getCellID(Hep3Vector position)
     {
         return getReadoutStripID(position);
     }
+
+    public int getRowNumber(Hep3Vector position)
+    {
+        return 0;
+    }   
+    
+    public int getColumnNumber(Hep3Vector position)
+    {
+        return getReadoutStripID(position);
+    }
+    
+    public int getCellID(int row_number, int column_number)
+    {
+        return column_number;
+    }
+    
+    public int getRowNumber(int cell_id)
+    {
+        return 0;
+    }   
+    
+    public int getColumnNumber(int cell_id)
+    {
+        return cell_id;
+    }
     
     public Hep3Vector getPositionInCell(Hep3Vector position)
     {

GeomConverter/src/org/lcsim/detector/converter/compact
SiTrackerBarrelConverter.java 1.19 -> 1.20
diff -u -r1.19 -r1.20
--- SiTrackerBarrelConverter.java	25 May 2007 20:16:26 -0000	1.19
+++ SiTrackerBarrelConverter.java	3 Jul 2007 23:35:34 -0000	1.20
@@ -3,6 +3,7 @@
 import static java.lang.Math.cos;
 import static java.lang.Math.sin;
 import hep.physics.vec.BasicHep3Vector;
+import hep.physics.matrix.BasicMatrix;
 
 import java.util.HashMap;
 import java.util.Iterator;
@@ -31,6 +32,7 @@
 import org.lcsim.detector.tracker.silicon.ChargeCarrier;
 import org.lcsim.detector.tracker.silicon.DeSiTrackerBarrel;
 import org.lcsim.detector.tracker.silicon.SiSensor;
+import org.lcsim.detector.tracker.silicon.SiSensorElectrodes;
 import org.lcsim.detector.tracker.silicon.SiStrips;
 import org.lcsim.detector.tracker.silicon.SiTrackerBarrelLayer;
 import org.lcsim.detector.tracker.silicon.SiTrackerBarrelModule;
@@ -523,13 +525,28 @@
                         //System.out.println("path : " + modulePath.toString() + "/" + pv.getName());
                         String sensorPath = modulePath.toString() + "/" + pv.getName();
                         String sensorName = subdet.getName() + "_layer" + layer.getGeometry().getPhysicalVolume().getCopyNumber() + "_module" + moduleId + "_sensor" + sensorId;
-                        SiSensor sensor = new SiSensor(sensorId, sensorName, module, sensorPath, id);
-                        sensor.setIdentifier( id );
                         
-                        sensor.setElectrodes(ChargeCarrier.HOLE,new SiStrips(3679,0.025,1));
-//                        sensor.setElectrodes(ChargeCarrier.ELECTRON,new SiStrips(3679,0.025,1));
+//                        SiSensor sensor = new SiSensor(sensorId, sensorName, module, sensorPath, id);
+//                        sensor.setIdentifier( id );
+//                        sensor.setElectrodes(ChargeCarrier.HOLE,new SiStrips(3679,0.025,1));
+////                        sensor.setElectrodes(ChargeCarrier.ELECTRON,new SiStrips(3679,0.025,1));
+//                        sensor.setElectrodeAngle(ChargeCarrier.HOLE,0.0);
+////                        sensor.setElectrodeAngle(ChargeCarrier.ELECTRON,0.0);
+//                        sensor.setOrientation(Orientation.PSIDE_POSITIVE_Z);
+//                        sensor.initialize();
+
+                        SiSensor sensor = new SiSensor(sensorId,sensorName,module,sensorPath,id);
+                        sensor.setIdentifier(id);
+                        SiSensorElectrodes sense_electrodes = new SiStrips(3679,0.025,0);
+                        SiSensorElectrodes readout_electrodes = new SiStrips(1840,0.050,0);
+                        double[][] transfer_efficiencies = { {0.986,0.419} } ;
+//                        double[][] transfer_efficiencies = { {1.0,0.40625} } ;
+//                        double[][] transfer_efficiencies = { {1.0,0.5} } ;
+ 
+                        sensor.setSenseElectrodes(ChargeCarrier.HOLE,sense_electrodes);
+                        sensor.setReadoutElectrodes(ChargeCarrier.HOLE,readout_electrodes);
+                        sensor.setTransferEfficiencies(ChargeCarrier.HOLE,new BasicMatrix(transfer_efficiencies));
                         sensor.setElectrodeAngle(ChargeCarrier.HOLE,0.0);
-//                        sensor.setElectrodeAngle(ChargeCarrier.ELECTRON,0.0);
                         sensor.setOrientation(Orientation.PSIDE_POSITIVE_Z);
                         sensor.initialize();
                         
CVSspam 0.2.8