Azizi Biorepository Infrastructure


Monitoring and Logging



The Biorepository system, as at Jan 2015, comprises of 7 LABS-80K freezers from Taylor-Wharton, 2 LS4800 cryogenic refrigerators and a 3000 litre bulk holding tank. There is an external fill point outside the Biorepository room, which is used to fetch LN2 for use in the lab or for transportation of samples from the field.

The Biorepository has an installed capacity of holding 527,800 samples in 2ml cryo vials. The samples are held entirely in vapor phase liquid nitrogen (LN2) in the freezers at an average temperature of -190 degrees celcius.

A recent expansion of the Biorepository, which will be commissioned in early 2016, added additional floor space for 12 LABS-80K tanks. This has created space for an additional 904,800 samples. When commissioned, the Biorepository will have a capacity of storing ~1.5 million samples.

LN2 is generated by a StrirLIN-1 plant from Stirling cryogenics producing 500 litres per day. The LN2 is held in a 1000L litre holding tank during production before being transferred to the 3000 litre bulk holding tank.

The LN2 freezers are supplied and serviced by labmode, Taylor-Wharton UK agents. Each freezer has a capacity of 75,400 2ml cryo vials.

The LN2 freezers automatically filled from the bulk holding tank. This is controlled by M505 controllers by Mowden Controls.  Whenever the level of any freezer falls below the set threshold, it triggers a refill request from the bulk tank and this consequently triggers a daisy chain of requests where all the tanks are filled automatically. This is done to ensure efficient use of the LN2. Once a freezer is filled, it automatically shuts down the flow of LN2.

Monitoring and Logging

Monitoring and logging is done through a series of custom developed python and perl scripts,

Currently we only log 'running/not running' of the LN2 plant. This is determined via a 24V source which is present when the plant is running and is converted to logic via an optoisolator and the state is read by a U6 labjack.

The bulk tank pressure is determined by a pair of HPS sensors from Roxpur, connected to a Labjack U6  analogue - digital converter. The bulk tank contents are calculated from the pressure difference between the top and bottom of the tank. There is an emergency shut off valve from the bulk holding tank piping which is manually and automatically controlled to shut off the flow of LN2 to the Biorepository. The state of this valve is determined by the labjack via a reed switch across a digital i/o channel.

A temperature probe is attached to the external fill point plumbing and connected to the labjack. The probe detects LN2 flow from the external fill point and logs to the MySQL database the time over which the pipe is in use.

The Biorepository room oxygen is monitored by systems from Quantum and logged onto the database via a labjack ADC channel. Whenever the oxygen levels fall below 19% in the room, the shut off valve is switched on thereby cutting the flow of LN2 to the room allowing the oxygen level to be restored. The room is also fitted by 2 xpelair fans which are automatically controlled to rectify the oxygen levels. When the oxygen levels fall below 19.8% the fans are automatically switched on and when the oxygen levels reach 20.8% they are automatically turned off. This prevents the emergency shut off valve from being switched on which is quite disruptive in general.


The script which controls the fans, monitors the state of the cryogenic refrigerators, the bulk tank pressure and contents, the oxygen level in the Biorepository and monitors the state of the shut off valve runs from a Raspberry Pi. The rest of the scripts are run from a central server attached to a USB modem for sending alerts over SMS and emails depending on the alarm.

The primary Perl script interrogates each freezer approximately every 4 seconds. The labjack inputs are continually monitored by a separate python script. Both scripts log data every 30 minutes, unless there is a change in any condition, in which case data is logged immediately. A perl script watches the database and raises email and SMS alerts in case of problems. In addition a cron job monitors the perl script which monitors the database and sends an email in case the script is not running.

All the scripts are initiated in a tmux session, each in its own tab. A supplementary cron job, running every 30 minutes, monitors the activities of all scripts and restarts any scripts which might not be running. This script will have the option of killing and initiating a new session of any script. In addition it will have the function of stopping/starting any alerts from the system.

Comments to or