GeomConverter/src/org/lcsim/detector/converter/compact
diff -u -r1.12 -r1.13
--- SiTrackerEndcapConverter.java 5 Dec 2007 01:36:50 -0000 1.12
+++ SiTrackerEndcapConverter.java 6 Dec 2007 01:23:16 -0000 1.13
@@ -37,6 +37,7 @@
import org.lcsim.detector.material.MaterialStore;
import org.lcsim.detector.solids.Box;
import org.lcsim.detector.solids.IPolyhedron;
+import org.lcsim.detector.solids.Point3D;
import org.lcsim.detector.solids.Polygon3D;
import org.lcsim.detector.solids.Trap;
import org.lcsim.detector.solids.Trd;
@@ -54,7 +55,7 @@
* Converter for SiTrackerEndcap.
*
* @author Jeremy McCormick, Tim Nelson
- * @version $Id: SiTrackerEndcapConverter.java,v 1.12 2007/12/05 01:36:50 jeremy Exp $
+ * @version $Id: SiTrackerEndcapConverter.java,v 1.13 2007/12/06 01:23:16 tknelson Exp $
*/
public class SiTrackerEndcapConverter
@@ -169,7 +170,7 @@
for (IPhysicalVolume component : module.getLogicalVolume().getDaughters())
{
if (component.isSensitive())
- {
+ {
int sensorNum = component.getCopyNumber();
// Positive endcap component.
@@ -191,7 +192,8 @@
}
}
- try {
+ try
+ {
setupSensorDetectorElements(subdet);
}
catch (Exception x)
@@ -588,7 +590,7 @@
// TODO: Need to have SiTrackerIdentifierHelper available before this is called.
private void setupSensorDetectorElements(Subdetector subdet) throws Exception
- {
+ {
IIdentifierHelper id_helper = new IdentifierHelper(IdentifierDictionaryManager.getInstance().getIdentifierDictionary(subdet.getReadout().getName()));
//SiTrackerIdentifierHelper id_helper = (SiTrackerIdentifierHelper)subdet.getDetectorElement().getIdentifierHelper();
@@ -635,7 +637,7 @@
expId.setValue(iddict.getFieldIndex("barrel"), 1);
}
if (id_helper.getValue(endcap.getIdentifier(), "barrel") == 2)
- //else if (id_helper.isEndcapNegative(endcap.getIdentifier()))
+ //else if (id_helper.isEndcapNegative(endcap.getIdentifier()))
{
//expId.setValue(iddict.getFieldIndex("barrel"), id_helper.getEndcapNegativeValue());
expId.setValue(iddict.getFieldIndex("barrel"), 2);
@@ -689,47 +691,57 @@
// Set up SiStrips for the sensors
IPolyhedron sensor_solid = (IPolyhedron)sensor.getGeometry().getLogicalVolume().getSolid();
- Polygon3D inner_surface = sensor_solid.getFacesNormalTo(new BasicHep3Vector(0,0,-1)).get(0);
- Polygon3D outer_surface = sensor_solid.getFacesNormalTo(new BasicHep3Vector(0,0,1)).get(0);
- double strip_angle_magnitude = Math.PI/nwedges;
+ 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);
+// double strip_angle_magnitude = Math.PI/nwedges;
Polygon3D p_side;
Polygon3D n_side;
- double strip_angle;
+ int side;
if (sensorId == 0) // inner sensor
{
p_side = inner_surface;
n_side = outer_surface;
- strip_angle = strip_angle_magnitude;
+ side = -1;
+// strip_angle = strip_angle_magnitude;
}
else // outer sensor
{
p_side = outer_surface;
n_side = inner_surface;
- strip_angle = -1*strip_angle_magnitude;
+ side = 1;
+// strip_angle = -1*strip_angle_magnitude;
}
-// System.out.println("Plane of p_side polygon has... ");
-// System.out.println(" normal: "+p_side.getNormal());
-// System.out.println(" distance: "+p_side.getDistance());
-// for (Point3D point : p_side.getClosedVertices())
-// {
-// System.out.println(" Vertex: "+point);
-// }
-
-// System.out.println("Plane of n_side polygon has... ");
-// System.out.println(" normal: "+n_side.getNormal());
-// System.out.println(" distance: "+n_side.getDistance());
+ System.out.println("Plane of p_side polygon has... ");
+ System.out.println(" normal: "+p_side.getNormal());
+ System.out.println(" distance: "+p_side.getDistance());
+ for (Point3D point : p_side.getVertices())
+ {
+ System.out.println(" Vertex: "+point);
+ }
+
+ System.out.println("Plane of n_side polygon has... ");
+ System.out.println(" normal: "+n_side.getNormal());
+ System.out.println(" distance: "+n_side.getDistance());
// Bias the sensor
sensor.setBiasSurface(ChargeCarrier.HOLE,p_side);
sensor.setBiasSurface(ChargeCarrier.ELECTRON,n_side);
- ITranslation3D electrodes_position = new Translation3D(VecOp.mult(p_side.getDistance(),p_side.getNormal())); // translate to p_side
- IRotation3D electrodes_rotation = new RotationPassiveXYZ(0.0,strip_angle,0.0); // no rotation (global x-y = local x-y for axial strips)
+ double strip_angle = Math.PI/nwedges;
+
+ System.out.println(" side = : "+side);
+
+ ITranslation3D electrodes_position = new Translation3D(VecOp.mult(p_side.getDistance(),new BasicHep3Vector(0,0,1))); // translate to outside of polygon
+// ITranslation3D electrodes_position = new Translation3D(VecOp.mult(-p_side.getDistance(),p_side.getNormal())); // translate to p_side
+ IRotation3D electrodes_rotation = new RotationPassiveXYZ(side*(Math.PI/2),0,0*strip_angle); //
Transform3D electrodes_transform = new Transform3D(electrodes_position, electrodes_rotation);
+ System.out.println(" electrodes_transform translation: \n"+electrodes_transform.getTranslation().getTranslationVector());
+ System.out.println(" electrodes_transform rotation: \n"+electrodes_transform.getRotation().getRotationMatrix());
+
// Free calculation of sense electrodes, readout electrodes determined thereon
SiSensorElectrodes sense_electrodes = new SiStrips(ChargeCarrier.HOLE,0.025,sensor,electrodes_transform);
SiSensorElectrodes readout_electrodes = new SiStrips(ChargeCarrier.HOLE,0.050,(sense_electrodes.getNCells()+1)/2,sensor,electrodes_transform);
@@ -741,7 +753,7 @@
sensor.setTransferEfficiencies(ChargeCarrier.HOLE,new BasicMatrix(transfer_efficiencies));
// Incremenet sensorID for double-sided.
- ++sensorId;
+ ++sensorId;
}
}