Open Source Internal Combustion Engine Indicating and Cylinder Pressure Analysis Software

catool is an open source command line tool that enables the loading, analysis and export of in-cylinder pressure data. It supports the industry standard AVL IFile file format and can convert this to CSV or MATLAB file formats. catool has been developed over the past 20 years and has proven robustness in both industry and academia.

catool is a standalone software package, coded in C with full source code available under the GPL.

catool provides:

  • Import/Export in AVL IFile, MATLAB and CSV file formats
  • Cylinder pressure offset correction
  • Cycle based statistical analysis
  • Standard thermodynamic engine cycle analysis
  • Easy addition of proprietary analysis algorithms
  • The foundation for the proprietary catoolRT data acquisition and analysis software

Many thanks to users who have submitted AVL IFiles to allow the reverse engineering of the AVL X-ion file extensions. If you have any issues with channels not appearing in MATLAB output, please contact support@xarin.org with an example file.

catool 2.1.0 was released on 20 December 2022:

  • Support 64-bit timestamped abscissa
  • FFT frequency correction
  • SOC default to zero degrees, was 20 BTDC
  • Knock onset defaults to zero degrees if not found
  • Knock onset threshold is now configurable
  • Heat release can be calculated between SOC_EEOC or IVC_EVO
  • Improved camshaft edge and timing calculations
  • Calculate knock signal energy
  • Calculate misfiring cycles
  • Improvements to channel resampling algorithm
  • Support valve lift calculations
  • Separate knock boss window configuration from knock pressure window
  • Calculate FFT statistics
  • Allow plugins for more channel types
  • Classify cycles for cylinder deactivation and exclude from misfire
  • "load-channels" keyword now allows minus prefix to negate, i.e. 'load-channels all -CYLPR1'

catool 2.0.4 was released on 17 March 2021:

  • Fix crash in FFT
  • Robustness to very low PPR resolutions
  • Swept volume and clearance volume calculated with 64-bit resolution
  • Enable catoolRT DLL plugin capability ('plugin <DLL FILENAME>')
  • CSV and IFile data loaded with 64-bit resolution
  • Added 'output-variable <CA/TIME/RESULTS> <FLOAT/INTEGER>' to specify IFile storage type 32-bit floating point or 16-bit fixed point
  • Filtering speed improvements
  • Add channel description to IFile output
  • Fix issues loading parameter values from IFile
  • Fix issue with manifold pressure offsets when an extended channel had been loaded

catool 2.0.3 was released on 19 October 2020. Note that there are some changes to the format of generated MATLAB files:

  • Engine information in MATLAB files is now in an 'engine' structure, i.e. 'engine.bore'
  • File information in MATLAB files is now in a 'header' structure: header.filename, header.comment and header.date
  • IFile parameters in MATLAB files are now in a 'parameters' structure. parameters.PAR01

Other highlights include:

  • Decode IFile dates in xx.xx.xx format (2.0.3)
  • Engine swept and clearance volume performed with 64-bit floating point accuracy (2.0.3)
  • IFile improvements for determining DGB abscissa type (2.0.3)
  • Fix scaling issues with data stored in IFile as 64-bit formats (2.0.2)
  • Allow WOSCHNI_GT and ASSANIS heat transfer models to be configured (2.0.1)
  • Total angular torque calculations work with mixed abscissa between channels
  • Default start of combustion is -20 degrees (was zero)
  • Add calculated power in kW
  • Add option to calculate IMEP in 1 degree steps
  • Add AVL_THERM1 heat release and mean gas temperature method. Note that units are kJ/m^3/deg not kJ/m^3 inline with AVL
  • Add AVL_THERM1_FIXED and AVL_THERM1_A gamma calculations
  • Robustness improvements to positive HR start of comubstion calculation
  • Add 'channel <name/#> analysis-info'
  • Add POSITIVE_HR start of combustion type
  • Automatically load dependent channels for start of combustion and offset correction
  • Add WOSCHNI_GT and ASSANIS heat transfer models
  • Add 'configure-analysis' to determine what analysis can be run for each channel
  • Improved default 2-stroke valve timing
  • Ensure MATLAB channel names are unique
  • Include start of combustion and offset correction configuration in MATLAB channel information
  • Reduced memory requirements for analysis calculations

catool 1.5.4 was released on 21 April 2020. Highlights in 1.5 include:

  • Speed improvement to FFT (1.5.4)
  • Correction to FFT axis for frequency and engine order (1.5.4)
  • Allow custom defined cylinder volume to be imported using command "engine custom-volume volume.csv" where volume.csv is a comma separated file with crank angle from -360 to +360 degrees and volume in cubic centimetres. (1.5.4)
  • Rename channel using command "channel <channel> rename <new-name>" (1.5.4)
  • Set FFT channel units same as source channel (1.5.4)
  • All crank angle and frequency based calculations can be removed from analysis. If necessary they will be calculated "on-the-fly" for cycle based analysis. This can save significant amounts of memory. (1.5.4)
  • Add 3-point polytropic offset correction. Third point is the middle of the two configured points. "channel CYLPR1 channel-offset type POLYTROPIC_3PT". Existing AVL compatible 2-point method is still default (POLYTROPIC or POLYTROPIC_2PT). (1.5.4)
  • "engine info" now includes custom volume information (1.5.4)
  • Fixed an issue where AVL IFile parameter values were wrong (1.5.4)
  • Fixed an issue with exported IFiles not having correct extension information (1.5.4)
  • Bug fix importing CSV data (1.5.3)
  • Fix crash in parsing IFile parameters (1.5.2)
  • Improved AVL IFile support (1.5.1)
  • AVL IFile parameters output in MATLAB file (1.5.1)
  • Speed improvements to FFT
  • Calculate angular torque
  • Divide-by-zero protection during TLA calculation
  • Knocking pressure not absolute
  • Heat release now calculated between IVC and EVO (was SOC and EEOC)
  • Added WoschniGT heat transfer model
  • Added Chang et al gamma model (SAE 2004-01-2996)
  • Calculate spark restrike current, timing, delay and dwell time
  • Groups only calculated for crank angle channels
  • Calculate FFT of knocking pressure and angular torque sum
  • No longer calculate engine speed for every crankangle channel
  • Robustness improvements to engine speed calculation from AVL IFile data
  • Improved CSV import
  • Invertion allowed on output-data, i.e. "output-data ALL -CA" will output all data types except crank angle
  • Filtering uses dynamically expanding memory for speed improvement purposes
  • Time based channels are prefixed TM_ in MATLAB file output, i.e. crankangle channel will be called CYLPR1 and time based will be TM_CYLPR1
  • Frequency channels now included in MATLAB file output
  • AVL IFile: robustness improvements for data group types
  • AVL IFile: support 8-byte (double) and 16-byte (long double) data
  • AVL IFile: support channels embedded in extended data, i.e. from AVL X-ion

catool 1.4.1 was released on 2 November 2018. Highlights in 1.4 include:

  • Generate MATLAB channel names after loading IFile (1.4.1)
  • Prevent crash if 'analysis-info' called before 'run-analysis' (1.4.1)
  • Speed improvements to FFT analysis
  • Improved pressure rise rate calculation
  • Robustness improvements to EEOC calculation
  • Determination of cylinder deactivation
  • Improved polytropic indices calculation
  • Added LOAD calculation
  • Support plugin cylinder volume and analysis calculations
  • Support additional CSV file configurations
  • Speed improvements to filtering
  • IFile: load channels saved from CalcGraph

catool 1.3.4 was released on 18 August 2017. Highlights in 1.3 include:

  • Uses statically linked pthreads-win32 library, reducing need for additional DLL files (1.3.4)
  • Option to interpolate MFB angles rather than chosing next higher angle (1.3.3)
  • Calculate Net and Gross indicated torques (1.3.3)
  • Implement alignment option for falling and rising edge start of combustion channels (1.3.3)
  • Support analysis plugins (1.3.3)
  • Only store analysis channels as names rather than channel numbers (1.3.3)
  • Add "channel info" parameter (1.3.3)
  • When refering to channel numbers they must be preceded with a hash. i.e. "channel #1 name CYLPR1" (1.3.3)
  • Improvements to IFile channel offset handling (1.3.3)
  • Various fixes for compiler warnings and Cppcheck/Coverity analysis (1.3.3)
  • Motored cylinder pressure can be extrapolated back to BDC (1.3.2)
  • New estimated trapped gas mass calculation (1.3.2)
  • Additional robustness checks for Start of Combustion configuration (1.3.2)
  • Added classification thresholds for Knock/Mega Knock based on knock boss analysis (1.3.2)
  • Offset correction converts from psi, kPa, Pa and Mpa to bar if necessary (1.3.2)
  • Only use IFile channels for engine speed if they have been loaded (1.3.2)
  • Add confgiguration for analogue to digital channel conversion (1.3.2)
  • Add ability to skip columns on CSV import (skip-columns) (1.3.2)
  • Added CSV output types CA_MEAN and RESULTS_STATS (1.3.2)
  • Added 3-point median filter (1.3.2)
  • Improvements to IFile offset correction: Polytropic and manifold/intake/exhaust (1.3.2)
  • Calculate indicated power (hp) and indicated torque (lb.ft) (1.3.1)
  • Improvements to automatic analogue to digital channel conversion (1.3.1)
  • Calculate injector duration and separation angle (milliseconds) (1.3.1)
  • General bugfixes and speed improvements
  • FFT robustness
  • Added reference FFT window
  • Added intake manifold pressure analysis
  • Added exhuast manifold pressure analysis
  • Calculate knock onset crank angle
  • Calculate MFB using smoothed pressure data
  • Calculate MFB at knock onset angle
  • Only calculate maximum coil current on coil current channel
  • Calculate tooth periods
  • Add separate knock boss calculation windows
  • Support reading channel names (channel-names-line) and channel units (channel-units-line) from CSV files
  • Added command "channel XXX filter force" to force filtering even if a filter has already been applied
  • Added support for HP SDF and ATI ATIMAT file formats
  • Added abscissa units to MATLAB file output
  • Better interpretation of file time/date in AVL IFile

catool 1.2 was released on 23 December 2015

  • Add channel filtering
  • Add IMEP mean pressure calculation method
  • Improved digital channel calculation
  • Add additional methods for gamma calculation (specified, indolene, propane, Hayes)
  • Add analysis for knock sensor, igniton and crank position sensor
  • Resize number of cycles
  • Sample data from existing channel
  • Delete channel
  • Copy channel
  • Resample channel abscissa
  • Generate channel (sine, block, crank position sensor)
  • Convert CA/cycle channel to time base
  • Start of better handling of lack of memory
  • Improved polytropic offset correction (closer to AVL method)
  • Knock boss reference window FFT calculation
  • Add mega-knock cycle classification
  • Make results error checking configurable
  • IFile robustness improvements
  • Save catool channel type in IFiles
  • Remove IFile CA_TO_TIME (replaced by channel to time conversion)
  • Improved export of time base IFile and MATLAB files
  • Bug fixes, speed improvements, increased robustness

catool 1.1 was released on 5 June 2015

  • Burn centre of gravity and knock factor calculations added
  • Improvements to analysis request validation
  • Additional configuration of various analysis' added
  • Speed and robustness improvements and bug fixes
  • Coverity Scan and cppcheck fixes

catool 1.0.5 was released on 22 December 2014. Highlights in 1.0 include:

  • Make TLA calculation more robust when pressure peak is at edges of cycle (1.0.5)
  • Improvements to digital channel calculation (1.0.5)
  • Fixes to manifold pressure pegging (1.0.5)
  • CSV: Crank angle results output is of the mean data not the first cycle (1.0.5)
  • Improvements to config file parsing, allow channel name to be used in all cases (1.0.5)
  • IFile: Improvements to measurement table checking and robustness (1.0.5)
  • Various other bug fixes (1.0.5)
  • Updates to the rover_v8_csv.ccf and rover_v8_avl.ccf example files (1.0.5)
  • Improvements to config file parsing, allow channel name to be used in all cases (1.0.4)
  • CSV: Crank angle results output is of the mean data not the first cycle (1.0.3)
  • Make TLA calculation more robust when pressure peak is at edges of cycle (1.0.3)
  • Improvements to digital channel calculation (1.0.3)
  • Added offset window absolute offset correction method (WINDOW_ABS) (1.0.3)
  • Fixes to manifold pressure pegging (1.0.3)
  • IFile: Improvements to measurement table checking and robustness (1.0.3)
  • Various other bug fixes (1.0.3)
  • Updates to the rover_v8_csv.ccf and rover_v8_avl.ccf example files (1.0.3)
  • Fixes to ensure analysis channels are initialised correctly (1.0.2)
  • Fix to cylinder volume output in MATLAB files (1.0.1)
  • Rate of pressure rise calculated using smoothed pressure trace
  • Smoothed pressure now calculated over entire abscissa range
  • NEW: Calculation of camshaft and injection timing
  • Polytropic indices only calculated during closed volume period
  • Added offset correction based on mean value of another channel
  • Improved robustness for determining engine speed from an IFile
  • Ability to output raw IFile cycle results in CSV format
  • Support 64-bit floating point data in IFiles
  • Various bug fixes, compiler warnings and robustness improvements

catool 0.9.10.7 was released on 27 January 2014. Highlights in 0.9.10 include:

  • IFiles: Check if file is ZIP compressed and warn user, skip data regions that are outside of file (prevent crash) (0.9.10.7)
  • Calculate engine speed from IFile SPEED, CYCDUR, CYCTIME channels if necessary (0.9.10.7)
  • Improvements to PKP calculation at abscissa change points (0.9.10.7)
  • Speed Improvements (0.9.10.7)
  • Bug Fixes (Thanks to Peter Van Wieren) (0.9.10.7)
  • Cylinder pressure will not be truncated to zero by specifying "channel X channel-offset truncate 0". (0.9.10.4)
  • Outputting time data to CSV file has been implemented (0.9.10.4)
  • "load-channels" or "channel" commands can specify channel names as well as numbers (0.9.10.4)
  • Fixed bug that crashed catool when not loading all IFile channels (0.9.10.4)
  • IFile loading and saving improvements (0.9.10.4)
  • Loading IFiles into MATLAB loads all raw data groups (0.9.10.4)
  • Various bug fixes (0.9.10.3)
  • Cylinder pressure will not be truncated to zero by specifying "channel X channel-offset truncate 0".
  • Outputting time data to CSV file has been implemented
  • "load-channels" or "channel" commands can specify channel names as well as numbers
  • Fixed bug that crashed catool when not loading all IFile channels
  • IFile loading and saving improvements
  • Loading IFiles into MATLAB loads all raw data groups

catool 0.9.9 was released on 26 June 2012.

  • Improvements to Wiebe (Vibe) calculations, including generation of CA based MFB curve
  • Improved wrist pin offset handling (now per cylinder)
  • Code fixes from Coverity Scan
  • Various bug fixes

catool 0.9.8.3 was released on 20 April 2012. Highlights in 0.9.8 include:

  • Two stroke fixes (0.9.8.2)
  • Various robustness improvements (0.9.8.2)
  • Change default heat release calculation to first law (0.9.8.2)
  • Start of combustion fixes (0.9.8.2)
  • Output channel names in CSV output files (0.9.8.2)
  • cppcheck and splint fixes (0.9.8.2)
  • Robustness checking for IndiCom 1.3 IFile extensions (0.9.8.2)
  • Bugfix: IFile output had wrong crankangle abscissa (0.9.8.1)
  • Output extended channel names in IFile if necessary (0.9.8.1)
  • Only use extended channel name when loading IFile if less than 64 characters (0.9.8.1)
  • Use default engine speed if no engine speed calculated (0.9.8.1)
  • Use of -360 to 360 degree nomenclature (was previously 0 to 720 degrees) - IMPORTANT: Existing configuration files will need any angular references offset to the new nomenclature
  • Automatic determination of start of combustion channels
  • Cylinder pressure smoothing for pressure rise rate calcs
  • Calculated second order polynomial for TDC determination
  • 98% burn angle calculated correctly
  • Improvements to heat release calculations
  • General robustness improvements
  • Minimum abscissa resolution now unlimited (was fixed at 0.05 degrees)
  • Cylinder volume calculation improvements with offset wrist pin
  • Improved cylinder pressure offset correction
  • Convert AVL IFile to MATLAB using command line switch
  • Improvements to IFile support:
    • Supports interleaved channel data
    • Recognises DISI engine type
    • Supports any abscissa resolution
    • Robustness improvements against invalid files
    • Automatically converts from psi, kPa, Pa or MPa measurements to bar
    • Improved pressure offset support
    • Supports long channel names
  • Supports stdin input in addition to configuration files

Much appreciation to all those providing valuable feedback, bug reports and improvements especially Junghwan Kim, Peter Van Wieren, Erik Doosje, Julien Vanier and Eric Gingrich.

catool 0.9.7.2 was released on 8 December 2010.

catool 0.9.7 was released on 7 October 2009. Highlights included:

  • Various bug fixes and speed improvements (_SAFE_MEMORY)
  • More MISRA compliance
  • Issues resolved from using splint and cppcheck
  • Implemented Checkel & Dale knock algorithm (SAE 860028)
  • Added indicated torque calculation
  • Improved robustness for IFile loading
  • Support for latest IFile format (IndiCom 1.3)
  • Improved IFile support for 2-stroke data

catool 0.9.6 was released on 24 November 2008.The release resolves two issues:

  • MATLAB file output was broken in 0.9.5
  • MEP units are correctly bar rather than Nm

catool 0.9.5 was released on 16 November 2008.

catool 0.9.4 was released on 17 July 2008.

  • Determine cylinder number from channel name during import
  • Fix IFile channel type
  • Fixes to TLA calculation
  • Implement 98% MFB
  • Implement Burn duration calculation (0-2, 0-5, 0-10, 0-90, 2-90, 5-90, 10-90%)
  • Implement Net and Pumping IMEP calculation
  • Thrifted IVO and EVC cam timing parameters
  • Speed improvements
  • Completely implemented in C (rather than C++)

catool 0.9.3 was released on 6 August 2007. Changes include:

  • Multithreading capable using the pthreads library (Windows and UNIX)
  • Fixes to heat release and IMEP calculation
  • Fixes for big-endian and 64-bit architectures
  • General bug fixes and speed improvements

catool 0.9.2 was released on 3 February 2007.

catool 0.9.1 was released on 3 December 2006.

catool 0.9 was released on 25 October 2006.

  • Move from C++ to C

catool 0.8.2 was released on 12 July 2006.

  • Set analysis channel description as blank
  • MATLAB file change

catool 0.8.1 was released on 4 May 2006.

  • Prevent crash when analysis channel empty

catool 0.8 was released on 2 May 2006. New features include:

  • Export MATLAB data
  • Import CSV data
  • Import time based data
  • Numerous bug fixes and structural changes for future enhancements
  • Export data in I-File format without any analysis
  • Knock detection improvements
  • Enhanced configuration file options
  • Support for Microsoft Visual C++ 2005 and Borland C++ 5.5

catool 0.7 was released on 30 December 2005.

  • Various speed increases and sanity checking to prevent crashes
  • Improvements to the config file parsing. Keywords are now not case sensitive and the - character can be used before keywords meaning to remove this from the analysis to perform. i.e. output-ca -WIEBE_A will stop the Wiebe A parameter from being calculated.
  • Improvements to IFile loading/saving and structural changes to enable future time based and asynchronous UTC data to be added.
  • Additional start of combustion channel types including ignition angle meters.
  • Internal improvements for future feature enhancements.
  • Loading of CSV files
  • CAT binary data file removed (not required as IFile and CSV import available)
  • FIX: Motored cylinder pressure calculation does not use non-standard min() function

catool 0.6 was released on 16 November 2005.

catool 0.5 was released on 1 May 2005.