Revision History

V2.4.4 - 29.07.2019

  • reduced crosstalk between nonadjacent channels of the Time Tagger Ultra

  • fixed a bug leading to high crosstalk with V2.4.2 for specific channels

  • fixed a rare clock selection issue on the Time Tagger 20

  • improved and more detailed documentation

  • new method Countrate.getCountsTotal(), which returns the absolute number of events counted

  • new Mathematica quickstart example

  • new Scope example for LabVIEW

  • support of the Time Tagger 20 series with hardware revision 2.3

  • release the Python GIL while in the Time Tagger engine code

  • fixed a bug in ConstantFractionDiscriminator, which could cause that no virtual tags were generated

V2.4.2 - 12.05.2019

  • support of the Time Tagger Ultra series with hardware revision 1.3

  • improve performance of short pulse sequences on the Time Tagger 20 series

  • improve overflow behavior at too high input data rates

  • fix the name of the ‘SynchronizedMeasurements’ measurement class

V2.4.0 - 10.04.2019


  • 32 bit C++ library added

  • C++ and .NET libraries renamed and registered globally


  • virtual constant fraction discriminator channel ‘ConstantFractionDiscriminator’ added

  • ‘TimeDifferenceND’ added for multidimensional time differences measurements

  • faster binning in ‘TimeDifferences’ and ‘Correlation’ measurements

  • improved memory handling for ‘TimeTageStream’

  • improved Python library include

  • fixed ‘.getNormalizedData’ for ‘Correlation’ measurements

  • various minor bug fixes and improvements


  • LabVIEW project for 32 and 64 bit

  • improved LabVIEW examples

Time Tagger Ultra

  • 10 MHz EXT input clock detection enabled

  • internal buffer size can be increased from 40 MTags to 512 MTags with ‘setHardwareBufferSize’

  • reduced crosstalk and timing jitter

  • increased maximum transfer rate to above 65 MTags/s (Intel 5 GHz CPU on 64 bit)

  • various performance improvements

  • reduced deadtime to 2 ns on hardware revision >= 1.2

Time Tagger 20

  • 166.6 MHz EXT input clock detection enabled

Operating systems

  • equivalent support for Windows 32 and 64 bit, Ubuntu 16.04 and 18.04 64 bit, CentOS 7 64 bit

V2.2.4 - 29.01.2019

  • fix the conditional filter with filter and trigger events arriving within one clock cycle

  • fix issue with negativ input delays

  • calling .stop() while dumping data stops the dump and closes the file

  • fix device selection on reconnection after transfer errors

  • synchronize tags of falling edges to their raising ones

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 circumstances, 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 analyzing 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 a 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 through 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 conditions and filter channels

  • improved jitter for channel 0

  • channel delays might be different from the 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 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







0 to 7

8 to 15

0 to 17

18 to 35



1 to 8

-1 to -8

1 to 18

-1 to -18


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 initialized defines the channel schema.

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