lcsim/src/org/lcsim/contrib/SiStripSim
diff -u -r1.8 -r1.9
--- CDFSiSensorSim.java 11 Dec 2007 18:51:07 -0000 1.8
+++ CDFSiSensorSim.java 11 Jan 2008 05:47:15 -0000 1.9
@@ -96,7 +96,7 @@
depositChargeOnSense();
transferChargeToReadout();
-
+
return _readout_data;
}
@@ -119,7 +119,7 @@
{
intersection_points.add(GeomOp3D.intersection(drift_line,_sensor.getBiasSurface(bias_carrier).getPlane()));
}
-
+
Hep3Vector corrected_position = VecOp.mult(0.5,VecOp.add(intersection_points.get(0),intersection_points.get(1)));
ITransform3D transform = new Transform3D(new Translation3D(VecOp.sub(corrected_position,position)));
@@ -154,6 +154,13 @@
for (SimTrackerHit hit : hits)
{
+// System.out.println("Hit point: " + "[" + hit.getPoint()[0] + "," + hit.getPoint()[1] + "," + hit.getPoint()[2] + "]");
+// System.out.println("Startpoint: " + "[" + hit.getStartPoint()[0] + "," + hit.getStartPoint()[1] + "," + hit.getStartPoint()[2] + "]");
+// System.out.println("Endpoint: " + "[" + hit.getEndPoint()[0] + "," + hit.getEndPoint()[1] + "," + hit.getEndPoint()[2] + "]");
+//
+// System.out.println("\n"+"Startpoint is inside: " + _sensor.getGeometry().inside(new BasicHep3Vector(hit.getStartPoint())));
+// System.out.println("Endpoint is inside: " + _sensor.getGeometry().inside(new BasicHep3Vector(hit.getEndPoint())));
+
TrackSegment track = new TrackSegment(hit);
track.transform(global_to_sensor);
@@ -191,11 +198,12 @@
Hep3Vector segment_center = VecOp.add( track.getP1(),VecOp.mult(0.5,segment_step) );
// System.out.println("Segment step: " + segment_step);
-// System.out.println("Segment center: " + segment_center);
// Loop over segments
for (int iseg = 0; iseg < nsegments; iseg++)
{
+// System.out.println("Segment center: " + segment_center);
+
// FIXME: Add correct straggling treatment for thin layers
// loop over sides of detector
@@ -209,33 +217,9 @@
charge_distribution.transform(electrodes.getParentToLocal());
SortedMap<Integer,Integer> sense_charge = electrodes.computeElectrodeData(charge_distribution);
-
// System.out.println("Sense charge map: " + sense_charge);
_sense_data.get(carrier).add(new SiElectrodeDataCollection(sense_charge,hit));
-
-// ITransform3D sensor_to_electrodes = _sensor.getElectrodes(carrier).getParentToLocal();
-//
-// Hep3Vector electrode_drift_destination = sensor_to_electrodes.transformed(driftDestination(segment_center,carrier));
-//
-//
-// ErrorEllipse2D electrode_charge_distribution = diffusionEllipse(segment_center,carrier).transformed(sensor_to_electrodes);
-
-
-
-
-// IRotation3D sensor_to_electrodes = new RotationPassiveXYZ(0.0,0.0,-_sensor.getElectrodeAngle(carrier));
-//
-// Hep3Vector electrode_drift_destination = VecOp.mult(sensor_to_electrodes.getRotationMatrix(),driftDestination(segment_center,carrier));
-// ErrorEllipse2D electrode_charge_distribution = diffusionEllipse(segment_center,carrier).rotate(-_sensor.getElectrodeAngle(carrier));
-//
-// SortedMap<Integer,Integer> sense_charge = _sensor.getElectrodes(carrier).
-// computeElectrodeData(segment_charge,electrode_drift_destination,electrode_charge_distribution);
-//
-//// System.out.println("Sense charge map: " + sense_charge);
-//
-// _sense_data.get(carrier).add(new SiElectrodeDataCollection(sense_charge,hit));
-
}
}
@@ -433,13 +417,16 @@
private ChargeDistribution diffusionDistribution(double segment_charge, Hep3Vector origin, ChargeCarrier carrier)
{
-// System.out.println("Calculating charge distribution for carrier: "+carrier);
+// System.out.println("\n"+"Calculating charge distribution for carrier: "+carrier);
// Common factors
double difference_V = _sensor.getBiasVoltage() - _sensor.getDepletionVoltage();
double sum_V = _sensor.getBiasVoltage() + _sensor.getDepletionVoltage();
double common_factor = 2.0*_sensor.distanceFromSide(origin,carrier)*_sensor.getDepletionVoltage()/_sensor.getThickness();
+// System.out.println("Distance from side: "+_sensor.distanceFromSide(origin,carrier));
+// System.out.println("Origin: "+origin);
+
// Calculate charge spreading without magnetic field
double sigmasq = _sensor.getBulk().K_BOLTZMANN * _sensor.getBulk().getTemperature() *
_sensor.getThickness()*_sensor.getThickness() / _sensor.getDepletionVoltage();
@@ -454,6 +441,8 @@
double sigma = Math.sqrt(sigmasq);
+// System.out.println("sigma: "+sigma);
+
// Corrections for magnetic field -- this is an approximation, may have to be done better for high fields
// Special case if field is parallel to drift direction
@@ -468,13 +457,25 @@
if (VecOp.cross(drift_direction,bias_surface_normal).magnitude() < GeomOp3D.ANGULAR_TOLERANCE)
{
+// System.out.println("Drift direction perpendicular to bias plane");
+// System.out.println("Drift direction: "+drift_direction);
+// System.out.println("bias_surface_normal: "+bias_surface_normal);
+// System.out.println("First edge of bias plane: "+_sensor.getBiasSurface(carrier).getEdges().get(0).getDirection());
+
+
major_axis = VecOp.cross(bias_surface_normal,_sensor.getBiasSurface(carrier).getEdges().get(0).getDirection()); // arbitrary vector in plane
minor_axis = VecOp.cross(bias_surface_normal,major_axis);
+// System.out.println("Major axis at initialization: "+major_axis);
+// System.out.println("Minor axis at initialization: "+minor_axis);
+
major_axis_length = minor_axis_length = sigma;
+
}
else
{
+// System.out.println("Drift direction NOT perpendicular to bias plane!!");
+
major_axis = VecOp.unit(VecOp.cross(bias_surface_normal,VecOp.cross(_drift_direction.get(carrier),bias_surface_normal)));
minor_axis = VecOp.cross(bias_surface_normal,major_axis);