lcsim/src/org/lcsim/contrib/SiStripSim
diff -u -r1.7 -r1.8
--- Kpix.java 6 Nov 2007 19:58:03 -0000 1.7
+++ Kpix.java 15 Nov 2007 06:04:04 -0000 1.8
@@ -87,17 +87,17 @@
// Encoding and decoding resgister information
public int encoded()
{
- return ( getVersionNumber()<<1 & getGainMode().ordinal() )<<1 & getPolarity().ordinal();
+ return ( getVersionNumber()<<1 | getGainMode().ordinal() )<<1 | getPolarity().ordinal();
}
public static ControlRegisters decoded(int encoded_registers)
{
ControlRegisters registers = new ControlRegisters();
- int version_number = encoded_registers & 0xFC;
- int double_gain = encoded_registers & 0x1;
- int polarity = encoded_registers & 0x2;
-
+ 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]);
@@ -156,19 +156,19 @@
public static double computeCharge(KpixChannel.ReadoutRegisters readout_registers, ControlRegisters control_registers)
{
double gain = KpixChannel.computeGain(readout_registers, control_registers);
- return gain*readout_registers.getAdcValue();
+ return readout_registers.getAdcValue()/gain;
}
//=========================================
// Class representing a single KPiX channel
//=========================================
-
+
public static class KpixChannel
{
static final double NORMAL_GAIN_CAP = 400E-15; // 400 fF
static final double DOUBLE_GAIN_CAP = 200E-15; // 200 fF
static final double LOW_GAIN_CAP = 10E-12; // 10pF
- static final double ADC_GAIN = 2.5; // count/mV
+ static final double ADC_GAIN = 2500; // count/V
static final double NOISE_INTERCEPT = 300; // electrons
static final double NOISE_SLOPE = 30; // electrons
@@ -227,17 +227,17 @@
}
public int encoded()
- {
- return ((((getGainRange().ordinal()<<12 & getBufferNumber())<<8) & getTime())<<8) & getAdcValue() ;
+ {
+ return ((((getGainRange().ordinal()<<12 | getBufferNumber())<<8) | getTime())<<8) | getAdcValue() ;
}
public static ReadoutRegisters decoded(int readout)
{
ReadoutRegisters registers = new ReadoutRegisters();
- int adc_value = readout & 0xFF;
- int time = readout & 0xFF00;
- int buffer_number = readout & 0xFFF0000;
- int gain_range = readout & 0x10000000;
+ int adc_value = readout & 0xFF ;
+ int time = (readout & 0xFF00) >> 8;
+ int buffer_number = (readout & 0xFFF0000) >> 16;
+ int gain_range = (readout & 0x10000000) >> 28;
registers.setAdcValue(adc_value);
registers.setTime(time);
@@ -258,7 +258,7 @@
}
private int digitize(SiElectrodeData data)
- {
+ {
return computeReadoutRegisters(data).encoded();
}
@@ -269,7 +269,7 @@
registers.setBufferNumber(computeBufferNumber());
registers.setGainRange(computeGainRange(data));
registers.setAdcValue(computeAdcValue(data,registers));
-
+
return registers;
}
@@ -306,11 +306,11 @@
{
if (readout_registers.getGainRange() == ReadoutRegisters.GainRange.NORMAL)
{
- return (int)Math.floor(computeNormalFEGain(control_registers)*ADC_GAIN);
+ return computeNormalFEGain(control_registers)*ADC_GAIN;
}
else
{
- return (int)Math.floor(computeLowFEGain(control_registers)*ADC_GAIN);
+ return computeLowFEGain(control_registers)*ADC_GAIN;
}
}