5 added + 5 removed, total 10 files
lcsim/src/org/lcsim/recon/tracking/digitization/sisim
diff -N SiTrackerBarrelSensorSetup.java
--- SiTrackerBarrelSensorSetup.java 19 Aug 2009 22:49:54 -0000 1.2
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,99 +0,0 @@
-package org.lcsim.recon.tracking.digitization.sisim;
-
-import hep.physics.matrix.BasicMatrix;
-import hep.physics.vec.BasicHep3Vector;
-import hep.physics.vec.VecOp;
-
-import java.util.List;
-
-import org.lcsim.detector.IDetectorElement;
-import org.lcsim.detector.IPhysicalVolume;
-import org.lcsim.detector.IRotation3D;
-import org.lcsim.detector.ITranslation3D;
-import org.lcsim.detector.RotationPassiveXYZ;
-import org.lcsim.detector.Transform3D;
-import org.lcsim.detector.Translation3D;
-import org.lcsim.detector.solids.IPolyhedron;
-import org.lcsim.detector.solids.Polygon3D;
-import org.lcsim.detector.tracker.silicon.ChargeCarrier;
-import org.lcsim.detector.tracker.silicon.SiSensor;
-import org.lcsim.detector.tracker.silicon.SiSensorElectrodes;
-import org.lcsim.detector.tracker.silicon.SiStrips;
-import org.lcsim.geometry.Detector;
-import org.lcsim.geometry.compact.Subdetector;
-import org.lcsim.geometry.subdetector.SiTrackerBarrel;
-import org.lcsim.util.Driver;
-
-public class SiTrackerBarrelSensorSetup extends Driver
-{
- String subdetectorName;
-
- public SiTrackerBarrelSensorSetup()
- {}
-
- public SiTrackerBarrelSensorSetup(String subdetectorName)
- {
- this.subdetectorName = subdetectorName;
- }
-
- public void setSubdetectorName(String subdetectorName)
- {
- this.subdetectorName = subdetectorName;
- }
-
- public void detectorChanged(Detector detector)
- {
- if (subdetectorName == null)
- throw new RuntimeException("The subdetectorName was not set.");
-
- Subdetector subdetector = detector.getSubdetector(subdetectorName);
- if (subdetector instanceof SiTrackerBarrel)
- setupSensorDetectorElements(subdetector);
- else
- throw new RuntimeException("The subdetector " + subdetectorName + " is not an instance of SiTrackerBarrel.");
- }
-
- private void setupSensorDetectorElements(Subdetector subdet)
- {
- System.out.println(this.getClass().getCanonicalName() + " - Setting up sensors for " + subdet.getName() + " ...");
-
- for ( IDetectorElement layer : subdet.getDetectorElement().getChildren() )
- {
- for ( IDetectorElement module : layer.getChildren() )
- {
- List<SiSensor> sensors = module.findDescendants(SiSensor.class);
-
- if (sensors.size() == 0)
- throw new RuntimeException("No sensors found in module.");
-
- SiSensor sensor = sensors.get(0);
-
- // Set up SiStrips for the sensors
- IPolyhedron sensor_solid = (IPolyhedron)sensor.getGeometry().getLogicalVolume().getSolid();
-
- // Bias the sensor
- Polygon3D p_side = sensor_solid.getFacesNormalTo(new BasicHep3Vector(0,0,1)).get(0);
-
- Polygon3D n_side = sensor_solid.getFacesNormalTo(new BasicHep3Vector(0,0,-1)).get(0);
-
- sensor.setBiasSurface(ChargeCarrier.HOLE,p_side);
- sensor.setBiasSurface(ChargeCarrier.ELECTRON,n_side);
-
- // Add sense and readout electrodes
- ITranslation3D electrodes_position = new Translation3D(VecOp.mult(-p_side.getDistance(),p_side.getNormal())); // translate to p_side
- IRotation3D electrodes_rotation = new RotationPassiveXYZ(0.0,0.0,0.0); // no rotation (global x-y = local x-y for axial strips)
- Transform3D electrodes_transform = new Transform3D(electrodes_position, electrodes_rotation);
-
- // Free calculation of readout electrodes, sense electrodes determined thereon
- SiSensorElectrodes readout_electrodes = new SiStrips(ChargeCarrier.HOLE,0.050,sensor,electrodes_transform);
- SiSensorElectrodes sense_electrodes = new SiStrips(ChargeCarrier.HOLE,0.025,(readout_electrodes.getNCells()*2-1),sensor,electrodes_transform);
-
- sensor.setSenseElectrodes(sense_electrodes);
- sensor.setReadoutElectrodes(readout_electrodes);
-
- double[][] transfer_efficiencies = { {0.986,0.419} };
- sensor.setTransferEfficiencies(ChargeCarrier.HOLE,new BasicMatrix(transfer_efficiencies));
- }
- }
- }
-}
lcsim/src/org/lcsim/recon/tracking/digitization/sisim
diff -N SiTrackerEndcap2SensorSetup.java
--- SiTrackerEndcap2SensorSetup.java 17 Aug 2009 22:20:21 -0000 1.1
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,111 +0,0 @@
-package org.lcsim.recon.tracking.digitization.sisim;
-
-import hep.physics.matrix.BasicMatrix;
-import hep.physics.vec.BasicHep3Vector;
-import hep.physics.vec.VecOp;
-
-import java.util.List;
-
-import org.lcsim.detector.IDetectorElement;
-import org.lcsim.detector.IRotation3D;
-import org.lcsim.detector.ITranslation3D;
-import org.lcsim.detector.RotationPassiveXYZ;
-import org.lcsim.detector.Transform3D;
-import org.lcsim.detector.Translation3D;
-import org.lcsim.detector.solids.Polygon3D;
-import org.lcsim.detector.solids.Trd;
-import org.lcsim.detector.tracker.silicon.ChargeCarrier;
-import org.lcsim.detector.tracker.silicon.SiSensor;
-import org.lcsim.detector.tracker.silicon.SiSensorElectrodes;
-import org.lcsim.detector.tracker.silicon.SiStrips;
-import org.lcsim.geometry.Detector;
-import org.lcsim.geometry.compact.Subdetector;
-import org.lcsim.geometry.subdetector.SiTrackerEndcap2;
-import org.lcsim.util.Driver;
-
-public class SiTrackerEndcap2SensorSetup extends Driver
-{
- String subdetectorName;
-
- public SiTrackerEndcap2SensorSetup()
- {}
-
- public SiTrackerEndcap2SensorSetup(String subdetectorName)
- {
- this.subdetectorName = subdetectorName;
- }
-
- public void setSubdetectorName(String subdetectorName)
- {
- this.subdetectorName = subdetectorName;
- }
-
- public void detectorChanged(Detector detector)
- {
- if (subdetectorName == null)
- throw new RuntimeException("The subdetectorName was not set.");
-
- Subdetector subdetector = detector.getSubdetector(subdetectorName);
- if (subdetector instanceof SiTrackerEndcap2)
- setupSensorDetectorElements(subdetector);
- else
- throw new RuntimeException("The subdetector " + subdetectorName + " is not an instance of SiTrackerEndcap.");
- }
-
- private void setupSensorDetectorElements(Subdetector subdet)
- {
- System.out.println(this.getClass().getCanonicalName() + " - Setting up sensors for " + subdet.getName() + " ...");
-
- for ( IDetectorElement endcap : subdet.getDetectorElement().getChildren() )
- {
- for ( IDetectorElement layer : endcap.getChildren() )
- {
- //int nwedges = layer.getChildren().size();
- for ( IDetectorElement wedge : layer.getChildren() )
- {
- for ( IDetectorElement module : wedge.getChildren() )
- {
- List<SiSensor> sensors = module.findDescendants(SiSensor.class);
-
- if (sensors.size() == 0)
- throw new RuntimeException("No sensors found in module.");
-
- //int sensorId = 0;
- for (SiSensor sensor : sensors)
- {
- Trd sensor_solid = (Trd)sensor.getGeometry().getLogicalVolume().getSolid();
-
- Polygon3D n_side = sensor_solid.getFacesNormalTo(new BasicHep3Vector(0,-1,0)).get(0);
- Polygon3D p_side = sensor_solid.getFacesNormalTo(new BasicHep3Vector(0,1,0)).get(0);
-
- // Bias the sensor
- sensor.setBiasSurface(ChargeCarrier.HOLE,p_side);
- sensor.setBiasSurface(ChargeCarrier.ELECTRON,n_side);
-
- double strip_angle = Math.atan2(sensor_solid.getXHalfLength2() - sensor_solid.getXHalfLength1(), sensor_solid.getZHalfLength() * 2);
-
- ITranslation3D electrodes_position = new Translation3D(VecOp.mult(-p_side.getDistance(),new BasicHep3Vector(0,0,1))); // translate to outside of polygon
- IRotation3D electrodes_rotation = new RotationPassiveXYZ(-Math.PI/2,0,strip_angle);
- Transform3D electrodes_transform = new Transform3D(electrodes_position, electrodes_rotation);
-
- // Free calculation of readout electrodes, sense electrodes determined thereon
- SiSensorElectrodes readout_electrodes = new SiStrips(ChargeCarrier.HOLE,0.050,sensor,electrodes_transform);
- SiSensorElectrodes sense_electrodes = new SiStrips(ChargeCarrier.HOLE,0.025,(readout_electrodes.getNCells()*2-1),sensor,electrodes_transform);
-
- sensor.setSenseElectrodes(sense_electrodes);
- sensor.setReadoutElectrodes(readout_electrodes);
-
- double[][] transfer_efficiencies = { {0.986,0.419} };
- sensor.setTransferEfficiencies(ChargeCarrier.HOLE,new BasicMatrix(transfer_efficiencies));
- // here
-
- //++sensorId;
- }
- }
- }
- }
- }
- }
-}
-
-
lcsim/src/org/lcsim/recon/tracking/digitization/sisim
diff -N SiTrackerEndcapSensorSetup.java
--- SiTrackerEndcapSensorSetup.java 17 Aug 2009 22:20:21 -0000 1.1
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,127 +0,0 @@
-package org.lcsim.recon.tracking.digitization.sisim;
-
-import hep.physics.matrix.BasicMatrix;
-import hep.physics.vec.BasicHep3Vector;
-import hep.physics.vec.VecOp;
-
-import java.util.List;
-
-import org.lcsim.detector.IDetectorElement;
-import org.lcsim.detector.IRotation3D;
-import org.lcsim.detector.ITranslation3D;
-import org.lcsim.detector.RotationPassiveXYZ;
-import org.lcsim.detector.Transform3D;
-import org.lcsim.detector.Translation3D;
-import org.lcsim.detector.solids.IPolyhedron;
-import org.lcsim.detector.solids.Polygon3D;
-import org.lcsim.detector.tracker.silicon.ChargeCarrier;
-import org.lcsim.detector.tracker.silicon.SiSensor;
-import org.lcsim.detector.tracker.silicon.SiSensorElectrodes;
-import org.lcsim.detector.tracker.silicon.SiStrips;
-import org.lcsim.geometry.Detector;
-import org.lcsim.geometry.compact.Subdetector;
-import org.lcsim.geometry.subdetector.SiTrackerEndcap;
-import org.lcsim.util.Driver;
-
-public class SiTrackerEndcapSensorSetup extends Driver
-{
- String subdetectorName;
-
- public SiTrackerEndcapSensorSetup()
- {}
-
- public SiTrackerEndcapSensorSetup(String subdetectorName)
- {
- this.subdetectorName = subdetectorName;
- }
-
- public void setSubdetectorName(String subdetectorName)
- {
- this.subdetectorName = subdetectorName;
- }
-
- public void detectorChanged(Detector detector)
- {
- if (subdetectorName == null)
- throw new RuntimeException("The subdetectorName was not set.");
-
- Subdetector subdetector = detector.getSubdetector(subdetectorName);
- if (subdetector instanceof SiTrackerEndcap)
- setupSensorDetectorElements(subdetector);
- else
- throw new RuntimeException("The subdetector " + subdetectorName + " is not an instance of SiTrackerEndcap.");
- }
-
- private void setupSensorDetectorElements(Subdetector subdet)
- {
- System.out.println(this.getClass().getCanonicalName() + " - Setting up sensors for " + subdet.getName() + " ...");
-
- for ( IDetectorElement endcap : subdet.getDetectorElement().getChildren() )
- {
- for ( IDetectorElement layer : endcap.getChildren() )
- {
- int nwedges = layer.getChildren().size();
- for ( IDetectorElement wedge : layer.getChildren() )
- {
- for ( IDetectorElement module : wedge.getChildren() )
- {
- List<SiSensor> sensors = module.findDescendants(SiSensor.class);
-
- if (sensors.size() == 0)
- throw new RuntimeException("No sensors found in module.");
-
- int sensorId = 0;
- for (SiSensor sensor : sensors)
- {
- // Set up SiStrips for the sensors
- IPolyhedron sensor_solid = (IPolyhedron)sensor.getGeometry().getLogicalVolume().getSolid();
-
- Polygon3D inner_surface = sensor_solid.getFacesNormalTo(new BasicHep3Vector(0,-1,0)).get(0);
- Polygon3D outer_surface = sensor_solid.getFacesNormalTo(new BasicHep3Vector(0,1,0)).get(0);
-
- Polygon3D p_side;
- Polygon3D n_side;
- int side;
-
- if (sensorId == 0) // inner sensor
- {
- p_side = inner_surface;
- n_side = outer_surface;
- side = 1;
- }
- else // outer sensor
- {
- p_side = outer_surface;
- n_side = inner_surface;
- side = -1;
- }
-
- // Bias the sensor
- sensor.setBiasSurface(ChargeCarrier.HOLE,p_side);
- sensor.setBiasSurface(ChargeCarrier.ELECTRON,n_side);
-
- double strip_angle = Math.PI/nwedges;
-
- ITranslation3D electrodes_position = new Translation3D(VecOp.mult(-p_side.getDistance(),new BasicHep3Vector(0,0,1))); // translate to outside of polygon
- IRotation3D electrodes_rotation = new RotationPassiveXYZ(side*(Math.PI/2),0,strip_angle); //
- Transform3D electrodes_transform = new Transform3D(electrodes_position, electrodes_rotation);
-
- // Free calculation of readout electrodes, sense electrodes determined thereon
- SiSensorElectrodes readout_electrodes = new SiStrips(ChargeCarrier.HOLE,0.050,sensor,electrodes_transform);
- SiSensorElectrodes sense_electrodes = new SiStrips(ChargeCarrier.HOLE,0.025,(readout_electrodes.getNCells()*2-1),sensor,electrodes_transform);
-
- sensor.setSenseElectrodes(sense_electrodes);
- sensor.setReadoutElectrodes(readout_electrodes);
-
- double[][] transfer_efficiencies = { {0.986,0.419} };
- sensor.setTransferEfficiencies(ChargeCarrier.HOLE,new BasicMatrix(transfer_efficiencies));
-
- ++sensorId;
- }
- }
- }
- }
- }
- }
-}
-
lcsim/src/org/lcsim/recon/tracking/digitization/sisim
diff -N SiVertexBarrelSensorSetup.java
--- SiVertexBarrelSensorSetup.java 19 Aug 2009 22:50:45 -0000 1.1
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,100 +0,0 @@
-package org.lcsim.recon.tracking.digitization.sisim;
-
-import hep.physics.matrix.BasicMatrix;
-import hep.physics.vec.BasicHep3Vector;
-import hep.physics.vec.VecOp;
-
-import java.util.List;
-
-import org.lcsim.detector.IDetectorElement;
-import org.lcsim.detector.IRotation3D;
-import org.lcsim.detector.ITranslation3D;
-import org.lcsim.detector.RotationPassiveXYZ;
-import org.lcsim.detector.Transform3D;
-import org.lcsim.detector.Translation3D;
-import org.lcsim.detector.solids.IPolyhedron;
-import org.lcsim.detector.solids.Polygon3D;
-import org.lcsim.detector.tracker.silicon.ChargeCarrier;
-import org.lcsim.detector.tracker.silicon.SiPixels;
-import org.lcsim.detector.tracker.silicon.SiSensor;
-import org.lcsim.detector.tracker.silicon.SiSensorElectrodes;
-import org.lcsim.geometry.Detector;
-import org.lcsim.geometry.compact.Subdetector;
-import org.lcsim.geometry.subdetector.SiTrackerBarrel;
-import org.lcsim.util.Driver;
-
-public class SiVertexBarrelSensorSetup extends Driver
-{
- String subdetectorName;
-
- public SiVertexBarrelSensorSetup()
- {}
-
- public SiVertexBarrelSensorSetup(String subdetectorName)
- {
- this.subdetectorName = subdetectorName;
- }
-
- public void setSubdetectorName(String subdetectorName)
- {
- this.subdetectorName = subdetectorName;
- }
-
- public void detectorChanged(Detector detector)
- {
- if (subdetectorName == null)
- throw new RuntimeException("The subdetectorName was not set.");
-
- Subdetector subdetector = detector.getSubdetector(subdetectorName);
- if (subdetector instanceof SiTrackerBarrel)
- setupSensorDetectorElements(subdetector);
- else
- throw new RuntimeException("The subdetector " + subdetectorName + " is not an instance of SiTrackerBarrel.");
- }
-
- private void setupSensorDetectorElements(Subdetector subdet)
- {
- System.out.println(this.getClass().getCanonicalName() + " - Setting up sensors for " + subdet.getName() + " ...");
-
- for ( IDetectorElement layer : subdet.getDetectorElement().getChildren() )
- {
- for ( IDetectorElement module : layer.getChildren() )
- {
- List<SiSensor> sensors = module.findDescendants(SiSensor.class);
-
- if (sensors.size() == 0)
- throw new RuntimeException("No sensors found in module.");
-
- SiSensor sensor = sensors.get(0);
- IPolyhedron sensor_solid = (IPolyhedron) sensor.getGeometry().getLogicalVolume().getSolid();
-
- Polygon3D top_side = sensor_solid.getFacesNormalTo(new BasicHep3Vector(0, 0, 1)).get(0);
- Polygon3D bot_side = sensor_solid.getFacesNormalTo(new BasicHep3Vector(0, 0, -1)).get(0);
-
- // collect electrons on the top side
- sensor.setBiasSurface(ChargeCarrier.HOLE, bot_side);
- sensor.setBiasSurface(ChargeCarrier.ELECTRON, top_side);
-
- // Add sense and readout electrodes
- ITranslation3D electrodes_position = new Translation3D(VecOp.mult(-top_side.getDistance(), top_side.getNormal())); // translate to p_side
- IRotation3D electrodes_rotation = new RotationPassiveXYZ(0.0, 0.0, 0.0);
- // no rotation (global x-y = local x-y for axial strips)
-
- Transform3D electrodes_transform = new Transform3D(electrodes_position, electrodes_rotation);
-
- // Define the pixel electrodes...collecting holes;
- SiSensorElectrodes readout_electrodes = new SiPixels(ChargeCarrier.ELECTRON, 0.05, 0.25, sensor, electrodes_transform);
- SiSensorElectrodes sense_electrodes = new SiPixels(ChargeCarrier.ELECTRON, 0.05, 0.25, sensor, electrodes_transform);
-
- // Tell the sensor about the electrodes
- sensor.setSenseElectrodes(sense_electrodes);
- sensor.setReadoutElectrodes(readout_electrodes);
-
- // Define the transfer efficiency from sense electrodes to readout electrodes
- // For pixels, we do a direct transfer of charge from sense electrodes to readout electrodes
- double[][] transfer_efficiencies = {{1.0}};
- sensor.setTransferEfficiencies(ChargeCarrier.ELECTRON, new BasicMatrix(transfer_efficiencies));
- }
- }
- }
-}
lcsim/src/org/lcsim/recon/tracking/digitization/sisim
diff -N SiVertexEndcapSensorSetup.java
--- SiVertexEndcapSensorSetup.java 19 Aug 2009 22:50:45 -0000 1.1
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,140 +0,0 @@
-package org.lcsim.recon.tracking.digitization.sisim;
-
-import hep.physics.matrix.BasicMatrix;
-import hep.physics.vec.BasicHep3Vector;
-import hep.physics.vec.VecOp;
-
-import java.util.List;
-
-import org.lcsim.detector.IDetectorElement;
-import org.lcsim.detector.IRotation3D;
-import org.lcsim.detector.ITranslation3D;
-import org.lcsim.detector.RotationPassiveXYZ;
-import org.lcsim.detector.Transform3D;
-import org.lcsim.detector.Translation3D;
-import org.lcsim.detector.solids.IPolyhedron;
-import org.lcsim.detector.solids.Polygon3D;
-import org.lcsim.detector.tracker.silicon.ChargeCarrier;
-import org.lcsim.detector.tracker.silicon.SiPixels;
-import org.lcsim.detector.tracker.silicon.SiSensor;
-import org.lcsim.detector.tracker.silicon.SiSensorElectrodes;
-import org.lcsim.geometry.Detector;
-import org.lcsim.geometry.compact.Subdetector;
-import org.lcsim.geometry.subdetector.SiTrackerEndcap;
-import org.lcsim.geometry.subdetector.SiTrackerEndcap2;
-
-public class SiVertexEndcapSensorSetup
-{
-
- String subdetectorName;
-
- public SiVertexEndcapSensorSetup()
- {}
-
- public SiVertexEndcapSensorSetup(String subdetectorName)
- {
- this.subdetectorName = subdetectorName;
- }
-
- public void setSubdetectorName(String subdetectorName)
- {
- this.subdetectorName = subdetectorName;
- }
-
- public void detectorChanged(Detector detector)
- {
- if (subdetectorName == null)
- throw new RuntimeException("The subdetectorName was not set.");
-
- Subdetector subdetector = detector.getSubdetector(subdetectorName);
- if (subdetector instanceof SiTrackerEndcap || subdetector instanceof SiTrackerEndcap2)
- setupSensorDetectorElements(subdetector);
- else
- throw new RuntimeException("The subdetector " + subdetectorName + " is not an instance of SiTrackerBarrel.");
- }
-
- private void setupSensorDetectorElements(Subdetector subdet)
- {
- for (IDetectorElement endcap : subdet.getDetectorElement().getChildren()) {
- for (IDetectorElement layer : endcap.getChildren())
- {
- int nwedges = layer.getChildren().size();
- for (IDetectorElement wedge : layer.getChildren())
- {
- for (IDetectorElement module : wedge.getChildren())
- {
- // find sensors on the module
- List<SiSensor> sensors = module.findDescendants(SiSensor.class);
-
- // require that sensors are found
- if (sensors.size() == 0)
- throw new RuntimeException("No sensors found in module.");
-
- // loop over sensors (can be double-sided)
- for (SiSensor sensor : sensors)
- {
- // get sensor field from id
- int sensorId = sensor.getIdentifierHelper().getValue(sensor.getIdentifier(), "sensor");
-
- // Get the sensor solid.
- IPolyhedron sensor_solid = (IPolyhedron) sensor.getGeometry().getLogicalVolume().getSolid();
-
- // Get solids for inner and outer surfaces.
- Polygon3D inner_surface = sensor_solid.getFacesNormalTo(new BasicHep3Vector(0, -1, 0)).get(0);
- Polygon3D outer_surface = sensor_solid.getFacesNormalTo(new BasicHep3Vector(0, 1, 0)).get(0);
-
- //
- // Determine p and n sides based on sensor id.
- //
-
- Polygon3D p_side;
- Polygon3D n_side;
- int side;
-
- if (sensorId == 0) // inner sensor
- {
- p_side = inner_surface;
- n_side = outer_surface;
- side = 1;
- }
- else // outer sensor
- {
- p_side = outer_surface;
- n_side = inner_surface;
- side = -1;
- }
-
- double strip_angle = Math.PI / nwedges;
-
- // Compute the geometric propertes of the electrodes.
- ITranslation3D electrodes_position = new Translation3D(VecOp.mult(-p_side.getDistance(), new BasicHep3Vector(0, 0, 1))); // translate to outside of polygon
- IRotation3D electrodes_rotation = new RotationPassiveXYZ(side * (Math.PI / 2), 0, strip_angle); //
- Transform3D electrodes_transform = new Transform3D(electrodes_position, electrodes_rotation);
-
- //
- // Pixel-specific code starts here.
- //
-
- // Set the bias surfaces.
- sensor.setBiasSurface(ChargeCarrier.ELECTRON, p_side);
- sensor.setBiasSurface(ChargeCarrier.HOLE, n_side);
-
- // Define the pixel electrodes.
- SiSensorElectrodes readout_electrodes = new SiPixels(ChargeCarrier.ELECTRON, 0.05, 0.25, sensor, electrodes_transform);
- SiSensorElectrodes sense_electrodes = new SiPixels(ChargeCarrier.ELECTRON, 0.05, 0.25, sensor, electrodes_transform);
-
- // Tell the sensor about the electrodes.
- sensor.setSenseElectrodes(sense_electrodes);
- sensor.setReadoutElectrodes(readout_electrodes);
-
- // Define the transfer efficiency from sense electrodes to readout electrodes.
- // For pixels, we do a direct transfer of charge from sense electrodes to readout electrodes.
- double[][] transfer_efficiencies = {{1.0}};
- sensor.setTransferEfficiencies(ChargeCarrier.ELECTRON, new BasicMatrix(transfer_efficiencies));
- }
- }
- }
- }
- }
- }
-}
\ No newline at end of file
lcsim/src/org/lcsim/recon/tracking/digitization/sisim/config
diff -N SiTrackerBarrelSensorSetup.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ SiTrackerBarrelSensorSetup.java 21 Aug 2009 20:51:03 -0000 1.1
@@ -0,0 +1,98 @@
+package org.lcsim.recon.tracking.digitization.sisim.config;
+
+import hep.physics.matrix.BasicMatrix;
+import hep.physics.vec.BasicHep3Vector;
+import hep.physics.vec.VecOp;
+
+import java.util.List;
+
+import org.lcsim.detector.IDetectorElement;
+import org.lcsim.detector.IRotation3D;
+import org.lcsim.detector.ITranslation3D;
+import org.lcsim.detector.RotationPassiveXYZ;
+import org.lcsim.detector.Transform3D;
+import org.lcsim.detector.Translation3D;
+import org.lcsim.detector.solids.IPolyhedron;
+import org.lcsim.detector.solids.Polygon3D;
+import org.lcsim.detector.tracker.silicon.ChargeCarrier;
+import org.lcsim.detector.tracker.silicon.SiSensor;
+import org.lcsim.detector.tracker.silicon.SiSensorElectrodes;
+import org.lcsim.detector.tracker.silicon.SiStrips;
+import org.lcsim.geometry.Detector;
+import org.lcsim.geometry.compact.Subdetector;
+import org.lcsim.geometry.subdetector.SiTrackerBarrel;
+import org.lcsim.util.Driver;
+
+public class SiTrackerBarrelSensorSetup extends Driver
+{
+ String subdetectorName;
+
+ public SiTrackerBarrelSensorSetup()
+ {}
+
+ public SiTrackerBarrelSensorSetup(String subdetectorName)
+ {
+ this.subdetectorName = subdetectorName;
+ }
+
+ public void setSubdetectorName(String subdetectorName)
+ {
+ this.subdetectorName = subdetectorName;
+ }
+
+ public void detectorChanged(Detector detector)
+ {
+ if (subdetectorName == null)
+ throw new RuntimeException("The subdetectorName was not set.");
+
+ Subdetector subdetector = detector.getSubdetector(subdetectorName);
+ if (subdetector instanceof SiTrackerBarrel)
+ setupSensorDetectorElements(subdetector);
+ else
+ throw new RuntimeException("The subdetector " + subdetectorName + " is not an instance of SiTrackerBarrel.");
+ }
+
+ private void setupSensorDetectorElements(Subdetector subdet)
+ {
+ System.out.println(this.getClass().getCanonicalName() + " - Setting up sensors for " + subdet.getName() + " ...");
+
+ for ( IDetectorElement layer : subdet.getDetectorElement().getChildren() )
+ {
+ for ( IDetectorElement module : layer.getChildren() )
+ {
+ List<SiSensor> sensors = module.findDescendants(SiSensor.class);
+
+ if (sensors.size() == 0)
+ throw new RuntimeException("No sensors found in module.");
+
+ SiSensor sensor = sensors.get(0);
+
+ // Set up SiStrips for the sensors
+ IPolyhedron sensor_solid = (IPolyhedron)sensor.getGeometry().getLogicalVolume().getSolid();
+
+ // Bias the sensor
+ Polygon3D p_side = sensor_solid.getFacesNormalTo(new BasicHep3Vector(0,0,1)).get(0);
+
+ Polygon3D n_side = sensor_solid.getFacesNormalTo(new BasicHep3Vector(0,0,-1)).get(0);
+
+ sensor.setBiasSurface(ChargeCarrier.HOLE,p_side);
+ sensor.setBiasSurface(ChargeCarrier.ELECTRON,n_side);
+
+ // Add sense and readout electrodes
+ ITranslation3D electrodes_position = new Translation3D(VecOp.mult(-p_side.getDistance(),p_side.getNormal())); // translate to p_side
+ IRotation3D electrodes_rotation = new RotationPassiveXYZ(0.0,0.0,0.0); // no rotation (global x-y = local x-y for axial strips)
+ Transform3D electrodes_transform = new Transform3D(electrodes_position, electrodes_rotation);
+
+ // Free calculation of readout electrodes, sense electrodes determined thereon
+ SiSensorElectrodes readout_electrodes = new SiStrips(ChargeCarrier.HOLE,0.050,sensor,electrodes_transform);
+ SiSensorElectrodes sense_electrodes = new SiStrips(ChargeCarrier.HOLE,0.025,(readout_electrodes.getNCells()*2-1),sensor,electrodes_transform);
+
+ sensor.setSenseElectrodes(sense_electrodes);
+ sensor.setReadoutElectrodes(readout_electrodes);
+
+ double[][] transfer_efficiencies = { {0.986,0.419} };
+ sensor.setTransferEfficiencies(ChargeCarrier.HOLE,new BasicMatrix(transfer_efficiencies));
+ }
+ }
+ }
+}
lcsim/src/org/lcsim/recon/tracking/digitization/sisim/config
diff -N SiTrackerEndcap2SensorSetup.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ SiTrackerEndcap2SensorSetup.java 21 Aug 2009 20:51:03 -0000 1.1
@@ -0,0 +1,111 @@
+package org.lcsim.recon.tracking.digitization.sisim.config;
+
+import hep.physics.matrix.BasicMatrix;
+import hep.physics.vec.BasicHep3Vector;
+import hep.physics.vec.VecOp;
+
+import java.util.List;
+
+import org.lcsim.detector.IDetectorElement;
+import org.lcsim.detector.IRotation3D;
+import org.lcsim.detector.ITranslation3D;
+import org.lcsim.detector.RotationPassiveXYZ;
+import org.lcsim.detector.Transform3D;
+import org.lcsim.detector.Translation3D;
+import org.lcsim.detector.solids.Polygon3D;
+import org.lcsim.detector.solids.Trd;
+import org.lcsim.detector.tracker.silicon.ChargeCarrier;
+import org.lcsim.detector.tracker.silicon.SiSensor;
+import org.lcsim.detector.tracker.silicon.SiSensorElectrodes;
+import org.lcsim.detector.tracker.silicon.SiStrips;
+import org.lcsim.geometry.Detector;
+import org.lcsim.geometry.compact.Subdetector;
+import org.lcsim.geometry.subdetector.SiTrackerEndcap2;
+import org.lcsim.util.Driver;
+
+public class SiTrackerEndcap2SensorSetup extends Driver
+{
+ String subdetectorName;
+
+ public SiTrackerEndcap2SensorSetup()
+ {}
+
+ public SiTrackerEndcap2SensorSetup(String subdetectorName)
+ {
+ this.subdetectorName = subdetectorName;
+ }
+
+ public void setSubdetectorName(String subdetectorName)
+ {
+ this.subdetectorName = subdetectorName;
+ }
+
+ public void detectorChanged(Detector detector)
+ {
+ if (subdetectorName == null)
+ throw new RuntimeException("The subdetectorName was not set.");
+
+ Subdetector subdetector = detector.getSubdetector(subdetectorName);
+ if (subdetector instanceof SiTrackerEndcap2)
+ setupSensorDetectorElements(subdetector);
+ else
+ throw new RuntimeException("The subdetector " + subdetectorName + " is not an instance of SiTrackerEndcap.");
+ }
+
+ private void setupSensorDetectorElements(Subdetector subdet)
+ {
+ System.out.println(this.getClass().getCanonicalName() + " - Setting up sensors for " + subdet.getName() + " ...");
+
+ for ( IDetectorElement endcap : subdet.getDetectorElement().getChildren() )
+ {
+ for ( IDetectorElement layer : endcap.getChildren() )
+ {
+ //int nwedges = layer.getChildren().size();
+ for ( IDetectorElement wedge : layer.getChildren() )
+ {
+ for ( IDetectorElement module : wedge.getChildren() )
+ {
+ List<SiSensor> sensors = module.findDescendants(SiSensor.class);
+
+ if (sensors.size() == 0)
+ throw new RuntimeException("No sensors found in module.");
+
+ //int sensorId = 0;
+ for (SiSensor sensor : sensors)
+ {
+ Trd sensor_solid = (Trd)sensor.getGeometry().getLogicalVolume().getSolid();
+
+ Polygon3D n_side = sensor_solid.getFacesNormalTo(new BasicHep3Vector(0,-1,0)).get(0);
+ Polygon3D p_side = sensor_solid.getFacesNormalTo(new BasicHep3Vector(0,1,0)).get(0);
+
+ // Bias the sensor
+ sensor.setBiasSurface(ChargeCarrier.HOLE,p_side);
+ sensor.setBiasSurface(ChargeCarrier.ELECTRON,n_side);
+
+ double strip_angle = Math.atan2(sensor_solid.getXHalfLength2() - sensor_solid.getXHalfLength1(), sensor_solid.getZHalfLength() * 2);
+
+ ITranslation3D electrodes_position = new Translation3D(VecOp.mult(-p_side.getDistance(),new BasicHep3Vector(0,0,1))); // translate to outside of polygon
+ IRotation3D electrodes_rotation = new RotationPassiveXYZ(-Math.PI/2,0,strip_angle);
+ Transform3D electrodes_transform = new Transform3D(electrodes_position, electrodes_rotation);
+
+ // Free calculation of readout electrodes, sense electrodes determined thereon
+ SiSensorElectrodes readout_electrodes = new SiStrips(ChargeCarrier.HOLE,0.050,sensor,electrodes_transform);
+ SiSensorElectrodes sense_electrodes = new SiStrips(ChargeCarrier.HOLE,0.025,(readout_electrodes.getNCells()*2-1),sensor,electrodes_transform);
+
+ sensor.setSenseElectrodes(sense_electrodes);
+ sensor.setReadoutElectrodes(readout_electrodes);
+
+ double[][] transfer_efficiencies = { {0.986,0.419} };
+ sensor.setTransferEfficiencies(ChargeCarrier.HOLE,new BasicMatrix(transfer_efficiencies));
+ // here
+
+ //++sensorId;
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
+
lcsim/src/org/lcsim/recon/tracking/digitization/sisim/config
diff -N SiTrackerEndcapSensorSetup.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ SiTrackerEndcapSensorSetup.java 21 Aug 2009 20:51:03 -0000 1.1
@@ -0,0 +1,127 @@
+package org.lcsim.recon.tracking.digitization.sisim.config;
+
+import hep.physics.matrix.BasicMatrix;
+import hep.physics.vec.BasicHep3Vector;
+import hep.physics.vec.VecOp;
+
+import java.util.List;
+
+import org.lcsim.detector.IDetectorElement;
+import org.lcsim.detector.IRotation3D;
+import org.lcsim.detector.ITranslation3D;
+import org.lcsim.detector.RotationPassiveXYZ;
+import org.lcsim.detector.Transform3D;
+import org.lcsim.detector.Translation3D;
+import org.lcsim.detector.solids.IPolyhedron;
+import org.lcsim.detector.solids.Polygon3D;
+import org.lcsim.detector.tracker.silicon.ChargeCarrier;
+import org.lcsim.detector.tracker.silicon.SiSensor;
+import org.lcsim.detector.tracker.silicon.SiSensorElectrodes;
+import org.lcsim.detector.tracker.silicon.SiStrips;
+import org.lcsim.geometry.Detector;
+import org.lcsim.geometry.compact.Subdetector;
+import org.lcsim.geometry.subdetector.SiTrackerEndcap;
+import org.lcsim.util.Driver;
+
+public class SiTrackerEndcapSensorSetup extends Driver
+{
+ String subdetectorName;
+
+ public SiTrackerEndcapSensorSetup()
+ {}
+
+ public SiTrackerEndcapSensorSetup(String subdetectorName)
+ {
+ this.subdetectorName = subdetectorName;
+ }
+
+ public void setSubdetectorName(String subdetectorName)
+ {
+ this.subdetectorName = subdetectorName;
+ }
+
+ public void detectorChanged(Detector detector)
+ {
+ if (subdetectorName == null)
+ throw new RuntimeException("The subdetectorName was not set.");
+
+ Subdetector subdetector = detector.getSubdetector(subdetectorName);
+ if (subdetector instanceof SiTrackerEndcap)
+ setupSensorDetectorElements(subdetector);
+ else
+ throw new RuntimeException("The subdetector " + subdetectorName + " is not an instance of SiTrackerEndcap.");
+ }
+
+ private void setupSensorDetectorElements(Subdetector subdet)
+ {
+ System.out.println(this.getClass().getCanonicalName() + " - Setting up sensors for " + subdet.getName() + " ...");
+
+ for ( IDetectorElement endcap : subdet.getDetectorElement().getChildren() )
+ {
+ for ( IDetectorElement layer : endcap.getChildren() )
+ {
+ int nwedges = layer.getChildren().size();
+ for ( IDetectorElement wedge : layer.getChildren() )
+ {
+ for ( IDetectorElement module : wedge.getChildren() )
+ {
+ List<SiSensor> sensors = module.findDescendants(SiSensor.class);
+
+ if (sensors.size() == 0)
+ throw new RuntimeException("No sensors found in module.");
+
+ int sensorId = 0;
+ for (SiSensor sensor : sensors)
+ {
+ // Set up SiStrips for the sensors
+ IPolyhedron sensor_solid = (IPolyhedron)sensor.getGeometry().getLogicalVolume().getSolid();
+
+ Polygon3D inner_surface = sensor_solid.getFacesNormalTo(new BasicHep3Vector(0,-1,0)).get(0);
+ Polygon3D outer_surface = sensor_solid.getFacesNormalTo(new BasicHep3Vector(0,1,0)).get(0);
+
+ Polygon3D p_side;
+ Polygon3D n_side;
+ int side;
+
+ if (sensorId == 0) // inner sensor
+ {
+ p_side = inner_surface;
+ n_side = outer_surface;
+ side = 1;
+ }
+ else // outer sensor
+ {
+ p_side = outer_surface;
+ n_side = inner_surface;
+ side = -1;
+ }
+
+ // Bias the sensor
+ sensor.setBiasSurface(ChargeCarrier.HOLE,p_side);
+ sensor.setBiasSurface(ChargeCarrier.ELECTRON,n_side);
+
+ double strip_angle = Math.PI/nwedges;
+
+ ITranslation3D electrodes_position = new Translation3D(VecOp.mult(-p_side.getDistance(),new BasicHep3Vector(0,0,1))); // translate to outside of polygon
+ IRotation3D electrodes_rotation = new RotationPassiveXYZ(side*(Math.PI/2),0,strip_angle); //
+ Transform3D electrodes_transform = new Transform3D(electrodes_position, electrodes_rotation);
+
+ // Free calculation of readout electrodes, sense electrodes determined thereon
+ SiSensorElectrodes readout_electrodes = new SiStrips(ChargeCarrier.HOLE,0.050,sensor,electrodes_transform);
+ SiSensorElectrodes sense_electrodes = new SiStrips(ChargeCarrier.HOLE,0.025,(readout_electrodes.getNCells()*2-1),sensor,electrodes_transform);
+
+ sensor.setSenseElectrodes(sense_electrodes);
+ sensor.setReadoutElectrodes(readout_electrodes);
+
+ double[][] transfer_efficiencies = { {0.986,0.419} };
+ sensor.setTransferEfficiencies(ChargeCarrier.HOLE,new BasicMatrix(transfer_efficiencies));
+
+ ++sensorId;
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
lcsim/src/org/lcsim/recon/tracking/digitization/sisim/config
diff -N SiVertexBarrelSensorSetup.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ SiVertexBarrelSensorSetup.java 21 Aug 2009 20:51:03 -0000 1.1
@@ -0,0 +1,100 @@
+package org.lcsim.recon.tracking.digitization.sisim.config;
+
+import hep.physics.matrix.BasicMatrix;
+import hep.physics.vec.BasicHep3Vector;
+import hep.physics.vec.VecOp;
+
+import java.util.List;
+
+import org.lcsim.detector.IDetectorElement;
+import org.lcsim.detector.IRotation3D;
+import org.lcsim.detector.ITranslation3D;
+import org.lcsim.detector.RotationPassiveXYZ;
+import org.lcsim.detector.Transform3D;
+import org.lcsim.detector.Translation3D;
+import org.lcsim.detector.solids.IPolyhedron;
+import org.lcsim.detector.solids.Polygon3D;
+import org.lcsim.detector.tracker.silicon.ChargeCarrier;
+import org.lcsim.detector.tracker.silicon.SiPixels;
+import org.lcsim.detector.tracker.silicon.SiSensor;
+import org.lcsim.detector.tracker.silicon.SiSensorElectrodes;
+import org.lcsim.geometry.Detector;
+import org.lcsim.geometry.compact.Subdetector;
+import org.lcsim.geometry.subdetector.SiTrackerBarrel;
+import org.lcsim.util.Driver;
+
+public class SiVertexBarrelSensorSetup extends Driver
+{
+ String subdetectorName;
+
+ public SiVertexBarrelSensorSetup()
+ {}
+
+ public SiVertexBarrelSensorSetup(String subdetectorName)
+ {
+ this.subdetectorName = subdetectorName;
+ }
+
+ public void setSubdetectorName(String subdetectorName)
+ {
+ this.subdetectorName = subdetectorName;
+ }
+
+ public void detectorChanged(Detector detector)
+ {
+ if (subdetectorName == null)
+ throw new RuntimeException("The subdetectorName was not set.");
+
+ Subdetector subdetector = detector.getSubdetector(subdetectorName);
+ if (subdetector instanceof SiTrackerBarrel)
+ setupSensorDetectorElements(subdetector);
+ else
+ throw new RuntimeException("The subdetector " + subdetectorName + " is not an instance of SiTrackerBarrel.");
+ }
+
+ private void setupSensorDetectorElements(Subdetector subdet)
+ {
+ System.out.println(this.getClass().getCanonicalName() + " - Setting up sensors for " + subdet.getName() + " ...");
+
+ for ( IDetectorElement layer : subdet.getDetectorElement().getChildren() )
+ {
+ for ( IDetectorElement module : layer.getChildren() )
+ {
+ List<SiSensor> sensors = module.findDescendants(SiSensor.class);
+
+ if (sensors.size() == 0)
+ throw new RuntimeException("No sensors found in module.");
+
+ SiSensor sensor = sensors.get(0);
+ IPolyhedron sensor_solid = (IPolyhedron) sensor.getGeometry().getLogicalVolume().getSolid();
+
+ Polygon3D top_side = sensor_solid.getFacesNormalTo(new BasicHep3Vector(0, 0, 1)).get(0);
+ Polygon3D bot_side = sensor_solid.getFacesNormalTo(new BasicHep3Vector(0, 0, -1)).get(0);
+
+ // collect electrons on the top side
+ sensor.setBiasSurface(ChargeCarrier.HOLE, bot_side);
+ sensor.setBiasSurface(ChargeCarrier.ELECTRON, top_side);
+
+ // Add sense and readout electrodes
+ ITranslation3D electrodes_position = new Translation3D(VecOp.mult(-top_side.getDistance(), top_side.getNormal())); // translate to p_side
+ IRotation3D electrodes_rotation = new RotationPassiveXYZ(0.0, 0.0, 0.0);
+ // no rotation (global x-y = local x-y for axial strips)
+
+ Transform3D electrodes_transform = new Transform3D(electrodes_position, electrodes_rotation);
+
+ // Define the pixel electrodes...collecting holes;
+ SiSensorElectrodes readout_electrodes = new SiPixels(ChargeCarrier.ELECTRON, 0.05, 0.25, sensor, electrodes_transform);
+ SiSensorElectrodes sense_electrodes = new SiPixels(ChargeCarrier.ELECTRON, 0.05, 0.25, sensor, electrodes_transform);
+
+ // Tell the sensor about the electrodes
+ sensor.setSenseElectrodes(sense_electrodes);
+ sensor.setReadoutElectrodes(readout_electrodes);
+
+ // Define the transfer efficiency from sense electrodes to readout electrodes
+ // For pixels, we do a direct transfer of charge from sense electrodes to readout electrodes
+ double[][] transfer_efficiencies = {{1.0}};
+ sensor.setTransferEfficiencies(ChargeCarrier.ELECTRON, new BasicMatrix(transfer_efficiencies));
+ }
+ }
+ }
+}
lcsim/src/org/lcsim/recon/tracking/digitization/sisim/config
diff -N SiVertexEndcapSensorSetup.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ SiVertexEndcapSensorSetup.java 21 Aug 2009 20:51:03 -0000 1.1
@@ -0,0 +1,140 @@
+package org.lcsim.recon.tracking.digitization.sisim.config;
+
+import hep.physics.matrix.BasicMatrix;
+import hep.physics.vec.BasicHep3Vector;
+import hep.physics.vec.VecOp;
+
+import java.util.List;
+
+import org.lcsim.detector.IDetectorElement;
+import org.lcsim.detector.IRotation3D;
+import org.lcsim.detector.ITranslation3D;
+import org.lcsim.detector.RotationPassiveXYZ;
+import org.lcsim.detector.Transform3D;
+import org.lcsim.detector.Translation3D;
+import org.lcsim.detector.solids.IPolyhedron;
+import org.lcsim.detector.solids.Polygon3D;
+import org.lcsim.detector.tracker.silicon.ChargeCarrier;
+import org.lcsim.detector.tracker.silicon.SiPixels;
+import org.lcsim.detector.tracker.silicon.SiSensor;
+import org.lcsim.detector.tracker.silicon.SiSensorElectrodes;
+import org.lcsim.geometry.Detector;
+import org.lcsim.geometry.compact.Subdetector;
+import org.lcsim.geometry.subdetector.SiTrackerEndcap;
+import org.lcsim.geometry.subdetector.SiTrackerEndcap2;
+
+public class SiVertexEndcapSensorSetup
+{
+
+ String subdetectorName;
+
+ public SiVertexEndcapSensorSetup()
+ {}
+
+ public SiVertexEndcapSensorSetup(String subdetectorName)
+ {
+ this.subdetectorName = subdetectorName;
+ }
+
+ public void setSubdetectorName(String subdetectorName)
+ {
+ this.subdetectorName = subdetectorName;
+ }
+
+ public void detectorChanged(Detector detector)
+ {
+ if (subdetectorName == null)
+ throw new RuntimeException("The subdetectorName was not set.");
+
+ Subdetector subdetector = detector.getSubdetector(subdetectorName);
+ if (subdetector instanceof SiTrackerEndcap || subdetector instanceof SiTrackerEndcap2)
+ setupSensorDetectorElements(subdetector);
+ else
+ throw new RuntimeException("The subdetector " + subdetectorName + " is not an instance of SiTrackerBarrel.");
+ }
+
+ private void setupSensorDetectorElements(Subdetector subdet)
+ {
+ for (IDetectorElement endcap : subdet.getDetectorElement().getChildren()) {
+ for (IDetectorElement layer : endcap.getChildren())
+ {
+ int nwedges = layer.getChildren().size();
+ for (IDetectorElement wedge : layer.getChildren())
+ {
+ for (IDetectorElement module : wedge.getChildren())
+ {
+ // find sensors on the module
+ List<SiSensor> sensors = module.findDescendants(SiSensor.class);
+
+ // require that sensors are found
+ if (sensors.size() == 0)
+ throw new RuntimeException("No sensors found in module.");
+
+ // loop over sensors (can be double-sided)
+ for (SiSensor sensor : sensors)
+ {
+ // get sensor field from id
+ int sensorId = sensor.getIdentifierHelper().getValue(sensor.getIdentifier(), "sensor");
+
+ // Get the sensor solid.
+ IPolyhedron sensor_solid = (IPolyhedron) sensor.getGeometry().getLogicalVolume().getSolid();
+
+ // Get solids for inner and outer surfaces.
+ Polygon3D inner_surface = sensor_solid.getFacesNormalTo(new BasicHep3Vector(0, -1, 0)).get(0);
+ Polygon3D outer_surface = sensor_solid.getFacesNormalTo(new BasicHep3Vector(0, 1, 0)).get(0);
+
+ //
+ // Determine p and n sides based on sensor id.
+ //
+
+ Polygon3D p_side;
+ Polygon3D n_side;
+ int side;
+
+ if (sensorId == 0) // inner sensor
+ {
+ p_side = inner_surface;
+ n_side = outer_surface;
+ side = 1;
+ }
+ else // outer sensor
+ {
+ p_side = outer_surface;
+ n_side = inner_surface;
+ side = -1;
+ }
+
+ double strip_angle = Math.PI / nwedges;
+
+ // Compute the geometric propertes of the electrodes.
+ ITranslation3D electrodes_position = new Translation3D(VecOp.mult(-p_side.getDistance(), new BasicHep3Vector(0, 0, 1))); // translate to outside of polygon
+ IRotation3D electrodes_rotation = new RotationPassiveXYZ(side * (Math.PI / 2), 0, strip_angle); //
+ Transform3D electrodes_transform = new Transform3D(electrodes_position, electrodes_rotation);
+
+ //
+ // Pixel-specific code starts here.
+ //
+
+ // Set the bias surfaces.
+ sensor.setBiasSurface(ChargeCarrier.ELECTRON, p_side);
+ sensor.setBiasSurface(ChargeCarrier.HOLE, n_side);
+
+ // Define the pixel electrodes.
+ SiSensorElectrodes readout_electrodes = new SiPixels(ChargeCarrier.ELECTRON, 0.05, 0.25, sensor, electrodes_transform);
+ SiSensorElectrodes sense_electrodes = new SiPixels(ChargeCarrier.ELECTRON, 0.05, 0.25, sensor, electrodes_transform);
+
+ // Tell the sensor about the electrodes.
+ sensor.setSenseElectrodes(sense_electrodes);
+ sensor.setReadoutElectrodes(readout_electrodes);
+
+ // Define the transfer efficiency from sense electrodes to readout electrodes.
+ // For pixels, we do a direct transfer of charge from sense electrodes to readout electrodes.
+ double[][] transfer_efficiencies = {{1.0}};
+ sensor.setTransferEfficiencies(ChargeCarrier.ELECTRON, new BasicMatrix(transfer_efficiencies));
+ }
+ }
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
CVSspam 0.2.8