Commit in GeomConverter/src/org/lcsim/detector on MAIN
tracker/silicon/SiSensor.java+2-21.3 -> 1.4
               /SiStrips.java+17-51.5 -> 1.6
converter/compact/SiTrackerBarrelConverter.java+2-11.12 -> 1.13
Commit in lcsim/src/org/lcsim/contrib/SiStripSim on MAIN
Kpix.java+27-71.2 -> 1.3
+48-15
4 modified files
Minor fixes and refinements.
Kpix gets a brain.

GeomConverter/src/org/lcsim/detector/tracker/silicon
SiSensor.java 1.3 -> 1.4
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
SiStrips.java 1.5 -> 1.6
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
SiTrackerBarrelConverter.java 1.12 -> 1.13
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
Kpix.java 1.2 -> 1.3
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