Measurement suite for common FET and other electrical measurements, based on the JISA library.
- Make sure you have Java 11 or newer (download)
- Download the executable jar file: FetCh.jar
- Run the jar file (you should just need to double-click it)
Queue up measurements and actions to automatically run one after the other, allowing you to fully customise your measurement routine
Automatically generate queue actions by using a sweep. Just specify the sweep points and what actions to undertake at each point. For instance, with a temperature sweep:
Measurement data is plotted live as it comes in
FetCh can take all results currently loaded and automatically determine how best to analyse them and plot the results
Easily extend FetCh to run your own measurement routines by using the simple-to-understand Kotlin measurement framework defined by FetCh. Define new functionality and have FetCh generate the GUI for you around it, no GUI-programming experience required.
class IVCurve : FetChMeasurement("IV Curve") {
// Define instruments needed for measurement
val voltSource by requiredInstrument("Voltage Source", VSource::class)
val currMeter by requiredInstrument("Ammeter", IMeter::class)
val thermometer by optionalInstrument("Thermometer", TMeter::class)
// Define user input parameters that FetCh should ask for
val voltages by userInput("Voltages [V]", Range.linear(0, 60))
val delay by userTimeInput("Delay Time", 50)
// Define columns of data table
companion object : Columns() {
val VOLTAGE = decimalColumn("Voltage", "V")
val CURRENT = decimalColumn("Current", "A")
val TEMPERATURE = decimalColumn("Temperature", "K")
}
// Measurement routine goes in here
override fun run(results: ResultTable) {
// Turn everything on
voltSource.isOn = true
currMeter.isOn = true
thermometer?.isOn = true // "?" means ignore if not set
// Sweep over voltages, measuring current after delay each time
for (voltage in voltages) {
voltSource.voltage = voltage
sleep(delay)
results.mapRow(
VOLTAGE to voltage,
CURRENT to currMeter.current,
TEMPERATURE to (thermometer?.temperature ?: Double.NaN), // Records "NaN" if no thermometer
)
}
}
// Cleanup when done
override fun onFinish() {
voltSource.isOn = false
currMeter.isOn = false
thermometer?.isOn = false
}
}




