Revision History

V2.2.2 - 13.11.2018

  • Removed not required Microsoft prerequisites.
  • 32 bit version available

V2.2.0 - 07.11.2018

General improvements

  • support for devices starting with channel 1 instead of 0
  • under certain cirmunstances, the crosstalk for the Time Tagger 20 of channel 0-2, 0-3, 1-2, and 1-3 was highly increased, which has been fixed now
  • updated and extended examples for all programming languages (Python, Matlab, C#, C++, LabVIEW)
  • C++ examples for Visual Studio 2017, with debug support
  • documentation for virtual channels
  • Web app included in the 32 bit installer
  • Linux package available for Ubuntu 16.04
  • Support for Python 3.7


  • ‘HistogramLogBin’ allows to analyze incoming tags with logarithmic bin sizes.
  • ‘FrequencyMultiplier’ virtual channel class for upscaling a signal attached to the Time Tagger. This method can be used as an alternative to the ‘Conditonal Filter’.
  • ‘SynchronizedMeasurments’ class available to fully synchronize start(), stop(), clear() of different measurements.
  • Second parameter from ‘setConditionalFilter’ changed from ‘filter’ to ‘filtered’.

Web application

  • full ‘setConditionalFilter’ functionality available from the backend within the Web application

V2.1.6 - 17.05.2018

fixed an error with getBinWidths from CountBetweenMarkers returning wrong values

V2.1.4 - 21.03.2018

fixed bin equilibration error appearing since V2.1.0

V2.1.2 - 14.03.2018

fixed issue installing the Matlab toolbox

V2.1.0 - 06.03.2018

Time Tagger Ultra

  • efficient buffering of up to 60 MTags within the device to avoid overflows

V2.0.4 - 01.02.2018

Bug fixes

  • Closing the web application server window works properly now

V2.0.2 - 17.01.2018


  • Matlab GUI example added
  • Matlab dump/load example added

Bug fixes

  • dump class writing tags multiple times when the optional channel parameter is used
  • Counter and Countrate skip the time in between a .stop() and a .start() call
  • The Counter class now handles overflows properly. As soon as an overflow occurs the lost data junk is skipped and the Counter resumes with the new tags arriving with no gap on the time axis.

V2.0.0 - 14.12.2017

Release of the Time Tagger Ultra


The input delays might be shifted (up to a few hundred ps) compared to older driver versions.

Documentation changes

  • new section ‘In Depth Guides’ explaining the hardware event filter


  • fixed a bug setting the input values to 0 when typing in a new value
  • new server launcher screen which stops the server reliably when the application is closed

V1.0.20 - 24.10.2017

Virtual Channels

  • DelayedChannel clones and optionally delays a stream of time tags from an input channel
  • GatedChannel clones an input stream, which is gated via a start and stop channel (e.g. rising and falling edge of another physical channel)


  • startFor(duration) method implemented for all measurements to acquire data for a predefined duration
  • getCaptureDuration() available for all measurements to return the current capture duration
  • getDataNormalized() available for Correlation (beta)
  • setEventDivider(channel, divider) also transmits every nth event (divider) on channel defined


  • label for 0 on the x-axis is now 0 instead of a tiny value

C++ API:

  • internal change so that clear_impl() and next_impl() must be overwritten instead of clear() and next()

Other bug fixes/improvements

  • improved documentation and examples

V1.0.6 - 16.03.2017

Web application (GUI)

  • load/save settings available for the Time Tagger and the measurements
  • correct x-axis scaling
  • input channels can be labeled
  • save data as tab separated output file (for Matlab, Excel, … import)
  • fixed: saving measurement data now works reliably
  • fixed: ‘Initialize’ button of measurements works now with tablets and phones


  • direct time stream access possible with new class TimeTagStream (before the stream could be only dumped with Dump)
  • Python 3.6 support
  • better error handling (throwing exceptions) when libraries not found or no Time Tagger attached
  • setTestSignal(…) can be used with a vector of channels instead of single channel only
  • Dump(…) now with an optional vector of channels to explicitly dump the channels passed
  • CHANNEL_INVALID is deprecated - use CHANNEL_UNUSED instead
  • Coincidences class (multiple Coincidences) can be used now within Matlab/LabVIEW

Documentation changes

  • documentation of every measurement now includes a figure
  • update and include web application in the quickstart section

Other bug fixes/improvements

  • no internal test tags leaking trough from the initialization of the Time Tagger
  • Counter class not clearing the data buffer in time when no tags arrive
  • search path for bitfile and libraries in Linux now work as they should
  • installer for 32 bit OS available

V1.0.4 - 24.11.2016

Hardware changes

  • extended event filter to multiple condition and filter channels
  • improved jitter for channel 0
  • channel delays might be different from previous version (< 1 ns)

API changes

  • new function setConditionalFilter allows for multiple filter and event channels (replaces setFilter)
  • Scope class implements functionality to use the Time Tagger as a 50 GHz digitizer
  • Coincidences class now can handle multiple coincidence groups which is much faster than multiple instances of Coincidence
  • added examples for C++ and .net

Software changes * improved GUI (Web application)

Bug fixes * Matlab/LabVIEW is not required to have the Visual Studio Redistributable package installed

V1.0.2 - 28.07.2016

Major changes:

  • LabVIEW support including various example VIs
  • Matlab support including various example scripts
  • .net assembly / class library provided (32 and 64 bit)
  • WebApp graphical user interface to get started without writing a single line of code
  • Improved performance (multicore CPUs are supported)

API changes:

  • reset() function added to reset a Time Tagger device to the startup state
  • getOverflowsAndClear() and clearOverflows() introduced to be able to reset the overflow counter
  • support for python 3.5 (32 and 64 bit) instead of 3.4


initial release supporting python

Channel Number Schema 0 and 1

The Time Taggers delivered before mid 2018 started with channel number 0, which is a very convenient for most of the programming languages.

Nevertheless, with the introduction of the Time Tagger Ultra and negative trigger levels, the falling edges became more and more important and with the old channel schema, it was not intuitive to get the channel number of the falling edge.

This is why we decided to make a profound change and we switched to the channel schema which starts with channel 1 instead of 0. The falling edges can be accessed via the corresponding negative channel number, which is very intuitive to use.

  Time Tagger 20 and Ultra 8 Time Tagger Ultra 18 Schema
  rising falling rising falling  
old 0 to 7 8 to 15 0 to 17 18 to 35 TT_CHANNEL_NUMBER_SCHEME_ZERO
new 1 to 8 -1 to -8 1 to 18 -1 to -18 TT_CHANNEL_NUMBER_SCHEME_ONE

With release V2.2.0, the channel number is detected automatically for the device in use. It will be according to the labels on the device.

In case another channel schema is required, please use setTimeTaggerChannelNumberScheme(int scheme) before the first Time Tagger is initialized. If several devices are used within one instance, the first Time Tagger initialied defines the channel schema.

int getInvertedChannel(int channel) was introduced to get the opposite edge of a given channel independent of the channel schema.