4 modified files
GeomConverter/src/org/lcsim/detector/tracker/silicon
diff -u -r1.3 -r1.4
--- SiSensor.java 7 May 2007 21:22:49 -0000 1.3
+++ SiSensor.java 8 May 2007 06:41:53 -0000 1.4
@@ -357,9 +357,9 @@
// System.out.println("Tan lorentz: "+tan_lorentz);
- Hep3Vector drift_direction = VecOp.unit(VecOp.add(
+ Hep3Vector drift_direction = VecOp.mult(carrier.charge(),VecOp.unit(VecOp.add(
e_field,VecOp.mult(tan_lorentz, VecOp.cross(e_field,VecOp.unit(b_field)))
- ));
+ )));
// System.out.println("Drift direction: "+drift_direction);
GeomConverter/src/org/lcsim/detector/tracker/silicon
diff -u -r1.5 -r1.6
--- SiStrips.java 7 May 2007 21:27:18 -0000 1.5
+++ SiStrips.java 8 May 2007 06:41:53 -0000 1.6
@@ -109,12 +109,22 @@
private int getSenseStripID(Hep3Vector position)
{
- return (int)Math.floor(position.x()/getSensePitch());
+ return (int)Math.round((position.x()+getSenseStripOffset())/getSensePitch());
+ }
+
+ private double getSenseStripOffset()
+ {
+ return (getNSenseStrips()-1)*getSensePitch()/2.;
}
private int getReadoutStripID(Hep3Vector position)
{
- return (int)Math.floor(position.x()/getReadoutPitch());
+ return (int)Math.round((position.x()+getReadoutStripOffset())/getReadoutPitch());
+ }
+
+ private double getReadoutStripOffset()
+ {
+ return (getNReadoutStrips()-1)*getReadoutPitch()/2.;
}
private Hep3Vector getPositionInSenseCell(Hep3Vector position)
@@ -129,12 +139,12 @@
private Hep3Vector getSenseStripPosition(int sense_strip_number)
{
- return new BasicHep3Vector(sense_strip_number*getSensePitch(),0.0,0.0);
+ return new BasicHep3Vector(sense_strip_number*getSensePitch()-getSenseStripOffset(),0.0,0.0);
}
private Hep3Vector getReadoutStripPosition(int readout_strip_number)
{
- return new BasicHep3Vector(readout_strip_number*getReadoutPitch(),0.0,0.0);
+ return new BasicHep3Vector(readout_strip_number*getReadoutPitch()-getReadoutStripOffset(),0.0,0.0);
}
@@ -294,13 +304,15 @@
}
// System.out.println(" Found right readout strip: "+iright);
addChargeToReadout(senseIDToReadoutID(iright),charge_right);
- }
+ }
}
private void addChargeToReadout(int readout_strip, int charge)
{
if (charge == 0) return;
+
+ if (readout_strip < 0 || readout_strip >= getNReadoutStrips()) return; // System.out.println(" Illegal readout strip: "+readout_strip);
if (_strip_charge.containsKey(readout_strip)) {
charge += _strip_charge.get(readout_strip);
GeomConverter/src/org/lcsim/detector/converter/compact
diff -u -r1.12 -r1.13
--- SiTrackerBarrelConverter.java 8 May 2007 01:22:27 -0000 1.12
+++ SiTrackerBarrelConverter.java 8 May 2007 06:41:53 -0000 1.13
@@ -521,7 +521,8 @@
String sensorName = subdet.getName() + "_module" + moduleId + "_sensor" + sensorId;
SiSensor sensor = new SiSensor(sensorId, sensorName, module, sensorPath);
sensor.setIdentifier( id );
- sensor.setElectrodes(ChargeCarrier.HOLE,new SiStrips(3679,0.025,0));
+
+ 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);
lcsim/src/org/lcsim/contrib/SiStripSim
diff -u -r1.2 -r1.3
--- Kpix.java 7 May 2007 22:47:13 -0000 1.2
+++ Kpix.java 8 May 2007 06:41:53 -0000 1.3
@@ -20,7 +20,9 @@
*/
public class Kpix implements ReadoutChip
{
- // Fields
+ // Fields
+ double _high_gain;
+ double _low_gain;
// Static
static double ELECTRON_CHARGE = 1.60217646E-4; // fC
@@ -29,23 +31,35 @@
static double NOISE_SLOPE = 30.0; // electrons
static double HIGH_GAIN_DEFAULT = 10.0; // counts/fC
-// static double LOW_GAIN_DEFAULT = 0.5; // counts/fC
-// static double GAIN_SWITCHOVER = ??;
+ static double LOW_GAIN_DEFAULT = 0.5; // counts/fC
+// static double GAIN_SWITCHOVER = ??; // Need a guess for this default
+
+ static boolean DOUBLE_GAIN_MODE = true; // double gain mode
// Variables
/** Creates a new instance of Kpix */
public Kpix()
{
+ _high_gain = HIGH_GAIN_DEFAULT * ELECTRON_CHARGE;
+ _low_gain = LOW_GAIN_DEFAULT * ELECTRON_CHARGE;
+ if (DOUBLE_GAIN_MODE)
+ {
+ _high_gain *= 2;
+ _low_gain *=2;
+ }
}
public Map<Integer,Integer> readout(SiSensorElectrodes electrodes)
{
- Map<Integer,Integer> electrode_charge = electrodes.getChargeMap();
+ Map<Integer,Integer> raw_charge = electrodes.getChargeMap();
int nchannels = electrodes.getNCells();
- addNoise(electrode_charge, nchannels);
- return digitize(electrode_charge);
+ addNoise(raw_charge, nchannels);
+ Map<Integer,Integer> digitized_charge = digitize(raw_charge);
+ electrodes.clear();
+
+ return digitized_charge;
}
private void addNoise(Map<Integer,Integer> electrode_charge, int nchannels)
@@ -64,8 +78,14 @@
for (Integer channel : electrode_charge.keySet())
{
+
double analog = electrode_charge.get(channel);
- int digital = (int)Math.floor(analog * ELECTRON_CHARGE * HIGH_GAIN_DEFAULT);
+
+ double gain = _high_gain;
+
+ int digital = (int)Math.floor(analog * gain);
+
+ if (digital != 0) digitized_charge.put(channel,digital);
}
return digitized_charge;
}
CVSspam 0.2.8