Commit in lcsim/src/org/lcsim/contrib/SiStripSim on MAIN
Kpix.java+16-131.8 -> 1.9
Suppress zeros in readout
Improve precision of reconstructing of charge from ADC information

lcsim/src/org/lcsim/contrib/SiStripSim
Kpix.java 1.8 -> 1.9
diff -u -r1.8 -r1.9
--- Kpix.java	15 Nov 2007 06:04:04 -0000	1.8
+++ Kpix.java	15 Nov 2007 06:46:53 -0000	1.9
@@ -97,7 +97,7 @@
             int polarity =          encoded_registers & 0x1;
             int double_gain =      (encoded_registers & 0x2)    >>1;
             int version_number =   (encoded_registers & 0xFC)   >>2;
-
+            
             registers.setVersionNumber(version_number);
             registers.setGainMode(GainMode.values()[double_gain]);
             registers.setPolarity(Polarity.values()[polarity]);
@@ -144,10 +144,18 @@
         SortedMap<Integer,List<Integer>> chip_data = new TreeMap<Integer,List<Integer>>();
         for (Integer channel : data.keySet())
         {
-            List<Integer> channel_data = new ArrayList<Integer>();
-            channel_data.add(getControlRegisters().encoded());
-            channel_data.add(getKpixChannels().digitize(data.get(channel)));
-            chip_data.put(channel,channel_data);
+            KpixChannel.ReadoutRegisters readout_registers = getKpixChannels().computeReadoutRegisters(data.get(channel));
+            if (readout_registers.getAdcValue() == 0) // supress readout of zeros
+            {
+                continue;
+            }
+            else
+            {   
+                List<Integer> channel_data = new ArrayList<Integer>();
+                channel_data.add(getControlRegisters().encoded());
+                channel_data.add(readout_registers.encoded());
+                chip_data.put(channel,channel_data);
+            }
         }
         return chip_data;
     }
@@ -156,7 +164,7 @@
     public static double computeCharge(KpixChannel.ReadoutRegisters readout_registers, ControlRegisters control_registers)
     {
         double gain = KpixChannel.computeGain(readout_registers, control_registers);
-        return readout_registers.getAdcValue()/gain;
+        return (readout_registers.getAdcValue()+0.5)/gain; // be clever about reconstructing charge
     }
     
     //=========================================
@@ -227,7 +235,7 @@
             }
             
             public int encoded()
-            {                
+            {
                 return ((((getGainRange().ordinal()<<12 | getBufferNumber())<<8) | getTime())<<8) | getAdcValue() ;
             }
             
@@ -257,11 +265,6 @@
             _control_registers = control_registers;
         }
         
-        private int digitize(SiElectrodeData data)
-        {   
-            return computeReadoutRegisters(data).encoded();
-        }
-        
         private ReadoutRegisters computeReadoutRegisters(SiElectrodeData data)
         {
             ReadoutRegisters registers = new ReadoutRegisters();
@@ -269,7 +272,7 @@
             registers.setBufferNumber(computeBufferNumber());
             registers.setGainRange(computeGainRange(data));
             registers.setAdcValue(computeAdcValue(data,registers));
-
+            
             return registers;
         }
         
CVSspam 0.2.8