lcsim/src/org/lcsim/contrib/SiStripSim
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;
}