4 modified files
GeomConverter/src/org/lcsim/detector/tracker/silicon
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
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
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
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