#include <stdio.h>
#include "slow5_defs.h"
#include "slow5.h"
#include "slow5_press.h"
void make_blow5(void) {
FILE *fp = fopen("test/data/exp/one_fast5/exp_1_default.blow5", "w");
struct slow5_file *s5p = slow5_open("test/data/exp/one_fast5/exp_1_default.slow5", "r");
char magic[] = SLOW5_BINARY_MAGIC_NUMBER;
struct slow5_version version = SLOW5_BINARY_VERSION;
slow5_press_method_t comp = SLOW5_COMPRESS_NONE;
fwrite(magic, sizeof *magic, sizeof magic, fp);
fwrite(&version.major, sizeof version.major, 1, fp);
fwrite(&version.minor, sizeof version.minor, 1, fp);
fwrite(&version.patch, sizeof version.patch, 1, fp);
fwrite(&comp, sizeof comp, 1, fp);
fwrite(&s5p->header->num_read_groups, sizeof s5p->header->num_read_groups, 1, fp);
size_t padding = 64 -
sizeof *magic * sizeof magic -
sizeof version.major -
sizeof version.minor -
sizeof version.patch -
sizeof comp -
sizeof s5p->header->num_read_groups;
char *zeroes = calloc(padding, 1);
fwrite(zeroes, sizeof *zeroes, padding, fp);
free(zeroes);
const char *header = \
"@asic_id 3574887596\n"
"@asic_id_eeprom 0\n"
"@asic_temp 29.2145729\n"
"@auto_update 1\n"
"@auto_update_source https://mirror.oxfordnanoportal.com/software/MinKNOW/\n"
"@bream_core_version 1.1.20.1\n"
"@bream_is_standard 1\n"
"@bream_map_version 1.1.20.1\n"
"@bream_ont_version 1.1.20.1\n"
"@bream_prod_version 1.1.20.1\n"
"@bream_rnd_version 0.1.1\n"
"@device_id MN16450\n"
"@exp_script_name python/recipes/nc/NC_48Hr_Sequencing_Run_FLO-MIN106_SQK-LSK108.py\n"
"@exp_script_purpose sequencing_run\n"
"@exp_start_time 1479433093\n"
"@experiment_kit genomic_dna\n"
"@experiment_type customer_qc\n"
"@file_version 1\n"
"@filename deamernanopore_20161117_fnfab43577_mn16450_sequencing_run_ma_821_r9_4_na12878_11_17_16_88738\n"
"@flow_cell_id FAB43577\n"
"@heatsink_temp 33.9921875\n"
"@hostname DEAMERNANOPORE\n"
"@installation_type map\n"
"@local_firmware_file 0\n"
"@operating_system Windows 6.2\n"
"@protocol_run_id a4429838-103c-497f-a824-7dffa72cfd81\n"
"@protocols_version 1.1.20\n"
"@run_id d6e473a6d513ec6bfc150c60fd4556d72f0e6d18\n"
"@sample_frequency 4000\n"
"@usb_config 1.0.11_ONT#MinION_fpga_1.0.1#ctrl#Auto\n"
"@user_filename_input ma_821_r9.4_na12878_11_17_16\n"
"@version 1.1.20\n"
"#char* uint32_t double double double double uint64_t int16_t*\n"
"#read_id read_group digitisation offset range sampling_rate len_raw_signal raw_signal\n";
uint32_t hdr_size = strlen(header);
fwrite(&hdr_size, sizeof hdr_size, 1, fp);
fwrite(header, sizeof *header, hdr_size, fp);
struct slow5_rec *read = NULL;
slow5_get_next(&read, s5p);
slow5_rec_size_t record_size = sizeof read->read_id_len +
read->read_id_len * sizeof *read->read_id +
sizeof read->read_group +
sizeof read->digitisation +
sizeof read->offset +
sizeof read->range +
sizeof read->sampling_rate +
sizeof read->len_raw_signal +
read->len_raw_signal * sizeof *read->raw_signal;
fwrite(&record_size, sizeof record_size, 1, fp);
read->read_id_len = strlen(read->read_id);
fwrite(&read->read_id_len, sizeof read->read_id_len, 1, fp);
fwrite(read->read_id, sizeof *read->read_id, read->read_id_len, fp);
fwrite(&read->read_group, sizeof read->read_group, 1, fp);
fwrite(&read->digitisation, sizeof read->digitisation, 1, fp);
fwrite(&read->offset, sizeof read->offset, 1, fp);
fwrite(&read->range, sizeof read->range, 1, fp);
fwrite(&read->sampling_rate, sizeof read->sampling_rate, 1, fp);
fwrite(&read->len_raw_signal, sizeof read->len_raw_signal, 1, fp);
fwrite(read->raw_signal, sizeof *read->raw_signal, read->len_raw_signal, fp);
char eof[] = SLOW5_BINARY_EOF;
fwrite(eof, sizeof *eof, sizeof eof, fp);
slow5_close(s5p);
slow5_rec_free(read);
fclose(fp);
}
void make_blow5_lossless(void) {
FILE *fp = fopen("test/data/exp/one_fast5/exp_1_lossless.blow5", "w");
struct slow5_file *s5p = slow5_open("test/data/exp/one_fast5/exp_1_lossless.slow5", "r");
char magic[] = SLOW5_BINARY_MAGIC_NUMBER;
struct slow5_version version = SLOW5_BINARY_VERSION;
slow5_press_method_t comp = SLOW5_COMPRESS_NONE;
fwrite(magic, sizeof *magic, sizeof magic, fp);
fwrite(&version.major, sizeof version.major, 1, fp);
fwrite(&version.minor, sizeof version.minor, 1, fp);
fwrite(&version.patch, sizeof version.patch, 1, fp);
fwrite(&comp, sizeof comp, 1, fp);
fwrite(&s5p->header->num_read_groups, sizeof s5p->header->num_read_groups, 1, fp);
size_t padding = 64 -
sizeof *magic * sizeof magic -
sizeof version.major -
sizeof version.minor -
sizeof version.patch -
sizeof comp -
sizeof s5p->header->num_read_groups;
char *zeroes = calloc(padding, 1);
fwrite(zeroes, sizeof *zeroes, padding, fp);
free(zeroes);
const char *header = \
"@asic_id 3574887596\n"
"@asic_id_eeprom 0\n"
"@asic_temp 29.2145729\n"
"@auto_update 1\n"
"@auto_update_source https://mirror.oxfordnanoportal.com/software/MinKNOW/\n"
"@bream_core_version 1.1.20.1\n"
"@bream_is_standard 1\n"
"@bream_map_version 1.1.20.1\n"
"@bream_ont_version 1.1.20.1\n"
"@bream_prod_version 1.1.20.1\n"
"@bream_rnd_version 0.1.1\n"
"@device_id MN16450\n"
"@exp_script_name python/recipes/nc/NC_48Hr_Sequencing_Run_FLO-MIN106_SQK-LSK108.py\n"
"@exp_script_purpose sequencing_run\n"
"@exp_start_time 1479433093\n"
"@experiment_kit genomic_dna\n"
"@experiment_type customer_qc\n"
"@file_version 1\n"
"@filename deamernanopore_20161117_fnfab43577_mn16450_sequencing_run_ma_821_r9_4_na12878_11_17_16_88738\n"
"@flow_cell_id FAB43577\n"
"@heatsink_temp 33.9921875\n"
"@hostname DEAMERNANOPORE\n"
"@installation_type map\n"
"@local_firmware_file 0\n"
"@operating_system Windows 6.2\n"
"@protocol_run_id a4429838-103c-497f-a824-7dffa72cfd81\n"
"@protocols_version 1.1.20\n"
"@run_id d6e473a6d513ec6bfc150c60fd4556d72f0e6d18\n"
"@sample_frequency 4000\n"
"@usb_config 1.0.11_ONT#MinION_fpga_1.0.1#ctrl#Auto\n"
"@user_filename_input ma_821_r9.4_na12878_11_17_16\n"
"@version 1.1.20\n"
"#char* uint32_t double double double double uint64_t int16_t* char* double int32_t uint8_t uint64_t\n"
"#read_id read_group digitisation offset range sampling_rate len_raw_signal raw_signal channel_number median_before read_number start_mux start_time\n";
uint32_t hdr_size = strlen(header);
fwrite(&hdr_size, sizeof hdr_size, 1, fp);
fwrite(header, sizeof *header, hdr_size, fp);
struct slow5_rec *read = NULL;
slow5_get_next(&read, s5p);
char *cn = slow5_aux_get_string(read, "channel_number", NULL, NULL);
uint64_t len_cn = strlen(cn);
double mb = slow5_aux_get_double(read, "median_before", NULL);
int32_t rn = slow5_aux_get_int32(read, "read_number", NULL);
uint8_t sm = slow5_aux_get_uint8(read, "start_mux", NULL);
uint64_t st = slow5_aux_get_uint64(read, "start_time", NULL);
slow5_rec_size_t record_size = sizeof read->read_id_len +
read->read_id_len * sizeof *read->read_id +
sizeof read->read_group +
sizeof read->digitisation +
sizeof read->offset +
sizeof read->range +
sizeof read->sampling_rate +
sizeof read->len_raw_signal +
read->len_raw_signal * sizeof *read->raw_signal +
sizeof (len_cn) +
len_cn * sizeof *cn +
sizeof (double) +
sizeof (int32_t) +
sizeof (uint8_t) +
sizeof (uint64_t);
fwrite(&record_size, sizeof record_size, 1, fp);
read->read_id_len = strlen(read->read_id);
fwrite(&read->read_id_len, sizeof read->read_id_len, 1, fp);
fwrite(read->read_id, sizeof *read->read_id, read->read_id_len, fp);
fwrite(&read->read_group, sizeof read->read_group, 1, fp);
fwrite(&read->digitisation, sizeof read->digitisation, 1, fp);
fwrite(&read->offset, sizeof read->offset, 1, fp);
fwrite(&read->range, sizeof read->range, 1, fp);
fwrite(&read->sampling_rate, sizeof read->sampling_rate, 1, fp);
fwrite(&read->len_raw_signal, sizeof read->len_raw_signal, 1, fp);
fwrite(read->raw_signal, sizeof *read->raw_signal, read->len_raw_signal, fp);
fwrite(&len_cn, sizeof len_cn, 1, fp);
fwrite(cn, sizeof *cn, len_cn, fp);
fwrite(&mb, sizeof mb, 1, fp);
fwrite(&rn, sizeof rn, 1, fp);
fwrite(&sm, sizeof sm, 1, fp);
fwrite(&st, sizeof st, 1, fp);
char eof[] = SLOW5_BINARY_EOF;
fwrite(eof, sizeof *eof, sizeof eof, fp);
slow5_close(s5p);
slow5_rec_free(read);
fclose(fp);
}
void make_blow5_lossless_aux_array(void) {
FILE *fp = fopen("test/data/exp/aux_array/exp_lossless.blow5", "w");
struct slow5_file *s5p = slow5_open("test/data/exp/aux_array/exp_lossless.slow5", "r");
char magic[] = SLOW5_BINARY_MAGIC_NUMBER;
struct slow5_version version = SLOW5_BINARY_VERSION;
slow5_press_method_t comp = SLOW5_COMPRESS_NONE;
fwrite(magic, sizeof *magic, sizeof magic, fp);
fwrite(&version.major, sizeof version.major, 1, fp);
fwrite(&version.minor, sizeof version.minor, 1, fp);
fwrite(&version.patch, sizeof version.patch, 1, fp);
fwrite(&comp, sizeof comp, 1, fp);
fwrite(&s5p->header->num_read_groups, sizeof s5p->header->num_read_groups, 1, fp);
size_t padding = 64 -
sizeof *magic * sizeof magic -
sizeof version.major -
sizeof version.minor -
sizeof version.patch -
sizeof comp -
sizeof s5p->header->num_read_groups;
char *zeroes = calloc(padding, 1);
fwrite(zeroes, sizeof *zeroes, padding, fp);
free(zeroes);
const char *header = \
"@asic_id 3574887596\n"
"@asic_id_eeprom 0\n"
"@asic_temp 29.2145729\n"
"@auto_update 1\n"
"@auto_update_source https://mirror.oxfordnanoportal.com/software/MinKNOW/\n"
"@bream_core_version 1.1.20.1\n"
"@bream_is_standard 1\n"
"@bream_map_version 1.1.20.1\n"
"@bream_ont_version 1.1.20.1\n"
"@bream_prod_version 1.1.20.1\n"
"@bream_rnd_version 0.1.1\n"
"@device_id MN16450\n"
"@exp_script_name python/recipes/nc/NC_48Hr_Sequencing_Run_FLO-MIN106_SQK-LSK108.py\n"
"@exp_script_purpose sequencing_run\n"
"@exp_start_time 1479433093\n"
"@experiment_kit genomic_dna\n"
"@experiment_type customer_qc\n"
"@file_version 1\n"
"@filename deamernanopore_20161117_fnfab43577_mn16450_sequencing_run_ma_821_r9_4_na12878_11_17_16_88738\n"
"@flow_cell_id FAB43577\n"
"@heatsink_temp 33.9921875\n"
"@hostname DEAMERNANOPORE\n"
"@installation_type map\n"
"@local_firmware_file 0\n"
"@operating_system Windows 6.2\n"
"@protocol_run_id a4429838-103c-497f-a824-7dffa72cfd81\n"
"@protocols_version 1.1.20\n"
"@run_id d6e473a6d513ec6bfc150c60fd4556d72f0e6d18\n"
"@sample_frequency 4000\n"
"@usb_config 1.0.11_ONT#MinION_fpga_1.0.1#ctrl#Auto\n"
"@user_filename_input ma_821_r9.4_na12878_11_17_16\n"
"@version 1.1.20\n"
"#char* uint32_t double double double double uint64_t int16_t* char* double int32_t uint8_t uint64_t int16_t*\n"
"#read_id read_group digitisation offset range sampling_rate len_raw_signal raw_signal channel_number median_before read_number start_mux start_time test_array\n";
uint32_t hdr_size = strlen(header);
fwrite(&hdr_size, sizeof hdr_size, 1, fp);
fwrite(header, sizeof *header, hdr_size, fp);
struct slow5_rec *read = NULL;
slow5_get_next(&read, s5p);
char *cn = slow5_aux_get_string(read, "channel_number", NULL, NULL);
uint64_t len_cn = strlen(cn);
double mb = slow5_aux_get_double(read, "median_before", NULL);
int32_t rn = slow5_aux_get_int32(read, "read_number", NULL);
uint8_t sm = slow5_aux_get_uint8(read, "start_mux", NULL);
uint64_t st = slow5_aux_get_uint64(read, "start_time", NULL);
uint64_t len_ta;
int16_t *ta = slow5_aux_get_int16_array(read, "test_array", &len_ta, NULL);
slow5_rec_size_t record_size = sizeof read->read_id_len +
read->read_id_len * sizeof *read->read_id +
sizeof read->read_group +
sizeof read->digitisation +
sizeof read->offset +
sizeof read->range +
sizeof read->sampling_rate +
sizeof read->len_raw_signal +
read->len_raw_signal * sizeof *read->raw_signal +
sizeof (len_cn) +
len_cn * sizeof *cn +
sizeof (double) +
sizeof (int32_t) +
sizeof (uint8_t) +
sizeof (uint64_t) +
sizeof len_ta +
len_ta * sizeof (int16_t);
fwrite(&record_size, sizeof record_size, 1, fp);
read->read_id_len = strlen(read->read_id);
fwrite(&read->read_id_len, sizeof read->read_id_len, 1, fp);
fwrite(read->read_id, sizeof *read->read_id, read->read_id_len, fp);
fwrite(&read->read_group, sizeof read->read_group, 1, fp);
fwrite(&read->digitisation, sizeof read->digitisation, 1, fp);
fwrite(&read->offset, sizeof read->offset, 1, fp);
fwrite(&read->range, sizeof read->range, 1, fp);
fwrite(&read->sampling_rate, sizeof read->sampling_rate, 1, fp);
fwrite(&read->len_raw_signal, sizeof read->len_raw_signal, 1, fp);
fwrite(read->raw_signal, sizeof *read->raw_signal, read->len_raw_signal, fp);
fwrite(&len_cn, sizeof len_cn, 1, fp);
fwrite(cn, sizeof *cn, len_cn, fp);
fwrite(&mb, sizeof mb, 1, fp);
fwrite(&rn, sizeof rn, 1, fp);
fwrite(&sm, sizeof sm, 1, fp);
fwrite(&st, sizeof st, 1, fp);
fwrite(&len_ta, sizeof len_ta, 1, fp);
fwrite(ta, sizeof *ta, len_ta, fp);
char eof[] = SLOW5_BINARY_EOF;
fwrite(eof, sizeof *eof, sizeof eof, fp);
slow5_close(s5p);
slow5_rec_free(read);
fclose(fp);
}
void make_gzip_blow5_lossless(void) {
FILE *fp = fopen("test/data/exp/one_fast5/exp_1_lossless_gzip.blow5", "w");
struct slow5_file *s5p = slow5_open("test/data/exp/one_fast5/exp_1_lossless.slow5", "r");
char magic[] = SLOW5_BINARY_MAGIC_NUMBER;
struct slow5_version version = SLOW5_BINARY_VERSION;
slow5_press_method_t record_comp = SLOW5_COMPRESS_ZLIB;
slow5_press_method_t signal_comp = SLOW5_COMPRESS_NONE;
fwrite(magic, sizeof *magic, sizeof magic, fp);
fwrite(&version.major, sizeof version.major, 1, fp);
fwrite(&version.minor, sizeof version.minor, 1, fp);
fwrite(&version.patch, sizeof version.patch, 1, fp);
fwrite(&record_comp, sizeof record_comp, 1, fp);
fwrite(&s5p->header->num_read_groups, sizeof s5p->header->num_read_groups, 1, fp);
fwrite(&signal_comp, sizeof signal_comp, 1, fp);
size_t padding = 64 -
sizeof *magic * sizeof magic -
sizeof version.major -
sizeof version.minor -
sizeof version.patch -
sizeof comp -
sizeof s5p->header->num_read_groups;
char *zeroes = calloc(padding, 1);
fwrite(zeroes, sizeof *zeroes, padding, fp);
free(zeroes);
const char *header = \
"@asic_id 3574887596\n"
"@asic_id_eeprom 0\n"
"@asic_temp 29.2145729\n"
"@auto_update 1\n"
"@auto_update_source https://mirror.oxfordnanoportal.com/software/MinKNOW/\n"
"@bream_core_version 1.1.20.1\n"
"@bream_is_standard 1\n"
"@bream_map_version 1.1.20.1\n"
"@bream_ont_version 1.1.20.1\n"
"@bream_prod_version 1.1.20.1\n"
"@bream_rnd_version 0.1.1\n"
"@device_id MN16450\n"
"@exp_script_name python/recipes/nc/NC_48Hr_Sequencing_Run_FLO-MIN106_SQK-LSK108.py\n"
"@exp_script_purpose sequencing_run\n"
"@exp_start_time 1479433093\n"
"@experiment_kit genomic_dna\n"
"@experiment_type customer_qc\n"
"@file_version 1\n"
"@filename deamernanopore_20161117_fnfab43577_mn16450_sequencing_run_ma_821_r9_4_na12878_11_17_16_88738\n"
"@flow_cell_id FAB43577\n"
"@heatsink_temp 33.9921875\n"
"@hostname DEAMERNANOPORE\n"
"@installation_type map\n"
"@local_firmware_file 0\n"
"@operating_system Windows 6.2\n"
"@protocol_run_id a4429838-103c-497f-a824-7dffa72cfd81\n"
"@protocols_version 1.1.20\n"
"@run_id d6e473a6d513ec6bfc150c60fd4556d72f0e6d18\n"
"@sample_frequency 4000\n"
"@usb_config 1.0.11_ONT#MinION_fpga_1.0.1#ctrl#Auto\n"
"@user_filename_input ma_821_r9.4_na12878_11_17_16\n"
"@version 1.1.20\n"
"#char* uint32_t double double double double uint64_t int16_t* char* double int32_t uint8_t uint64_t\n"
"#read_id read_group digitisation offset range sampling_rate len_raw_signal raw_signal channel_number median_before read_number start_mux start_time\n";
uint32_t hdr_size = strlen(header);
fwrite(&hdr_size, sizeof hdr_size, 1, fp);
fwrite(header, sizeof *header, hdr_size, fp);
struct slow5_rec *read = NULL;
slow5_get_next(&read, s5p);
struct slow5_press *gzip = slow5_press_init(SLOW5_COMPRESS_ZLIB, SLOW5_COMPRESS_NONE);
slow5_rec_fwrite(fp, read, s5p->header->aux_meta, SLOW5_FORMAT_BINARY, gzip);
slow5_eof_fwrite(fp);
slow5_press_free(gzip);
slow5_close(s5p);
slow5_rec_free(read);
fclose(fp);
}
void make_gzip_blow5_lossless_aux_array(void) {
FILE *fp = fopen("test/data/exp/aux_array/exp_lossless_gzip.blow5", "w");
struct slow5_file *s5p = slow5_open("test/data/exp/aux_array/exp_lossless.slow5", "r");
char magic[] = SLOW5_BINARY_MAGIC_NUMBER;
struct slow5_version version = SLOW5_BINARY_VERSION;
slow5_press_method_t record_comp = SLOW5_COMPRESS_ZLIB;
slow5_press_method_t signal_comp = SLOW5_COMPRESS_NONE;
fwrite(magic, sizeof *magic, sizeof magic, fp);
fwrite(&version.major, sizeof version.major, 1, fp);
fwrite(&version.minor, sizeof version.minor, 1, fp);
fwrite(&version.patch, sizeof version.patch, 1, fp);
fwrite(&record_comp, sizeof record_comp, 1, fp);
fwrite(&s5p->header->num_read_groups, sizeof s5p->header->num_read_groups, 1, fp);
fwrite(&signal_comp, sizeof signal_comp, 1, fp);
size_t padding = 64 -
sizeof *magic * sizeof magic -
sizeof version.major -
sizeof version.minor -
sizeof version.patch -
sizeof comp -
sizeof s5p->header->num_read_groups;
char *zeroes = calloc(padding, 1);
fwrite(zeroes, sizeof *zeroes, padding, fp);
free(zeroes);
const char *header = \
"@asic_id 3574887596\n"
"@asic_id_eeprom 0\n"
"@asic_temp 29.2145729\n"
"@auto_update 1\n"
"@auto_update_source https://mirror.oxfordnanoportal.com/software/MinKNOW/\n"
"@bream_core_version 1.1.20.1\n"
"@bream_is_standard 1\n"
"@bream_map_version 1.1.20.1\n"
"@bream_ont_version 1.1.20.1\n"
"@bream_prod_version 1.1.20.1\n"
"@bream_rnd_version 0.1.1\n"
"@device_id MN16450\n"
"@exp_script_name python/recipes/nc/NC_48Hr_Sequencing_Run_FLO-MIN106_SQK-LSK108.py\n"
"@exp_script_purpose sequencing_run\n"
"@exp_start_time 1479433093\n"
"@experiment_kit genomic_dna\n"
"@experiment_type customer_qc\n"
"@file_version 1\n"
"@filename deamernanopore_20161117_fnfab43577_mn16450_sequencing_run_ma_821_r9_4_na12878_11_17_16_88738\n"
"@flow_cell_id FAB43577\n"
"@heatsink_temp 33.9921875\n"
"@hostname DEAMERNANOPORE\n"
"@installation_type map\n"
"@local_firmware_file 0\n"
"@operating_system Windows 6.2\n"
"@protocol_run_id a4429838-103c-497f-a824-7dffa72cfd81\n"
"@protocols_version 1.1.20\n"
"@run_id d6e473a6d513ec6bfc150c60fd4556d72f0e6d18\n"
"@sample_frequency 4000\n"
"@usb_config 1.0.11_ONT#MinION_fpga_1.0.1#ctrl#Auto\n"
"@user_filename_input ma_821_r9.4_na12878_11_17_16\n"
"@version 1.1.20\n"
"#char* uint32_t double double double double uint64_t int16_t* char* double int32_t uint8_t uint64_t int16_t*\n"
"#read_id read_group digitisation offset range sampling_rate len_raw_signal raw_signal channel_number median_before read_number start_mux start_time test_array\n";
uint32_t hdr_size = strlen(header);
fwrite(&hdr_size, sizeof hdr_size, 1, fp);
fwrite(header, sizeof *header, hdr_size, fp);
struct slow5_rec *read = NULL;
slow5_get_next(&read, s5p);
struct slow5_press *gzip = slow5_press_init(SLOW5_COMPRESS_ZLIB, SLOW5_COMPRESS_NONE);
slow5_rec_fwrite(fp, read, s5p->header->aux_meta, SLOW5_FORMAT_BINARY, gzip);
slow5_eof_fwrite(fp);
slow5_press_free(gzip);
slow5_close(s5p);
slow5_rec_free(read);
fclose(fp);
}
void make_gzip_blow5(void) {
FILE *fp = fopen("test/data/exp/one_fast5/exp_1_default_gzip.blow5", "w");
struct slow5_file *s5p = slow5_open("test/data/exp/one_fast5/exp_1_default.slow5", "r");
char magic[] = SLOW5_BINARY_MAGIC_NUMBER;
struct slow5_version version = SLOW5_BINARY_VERSION;
slow5_press_method_t record_comp = SLOW5_COMPRESS_ZLIB;
slow5_press_method_t signal_comp = SLOW5_COMPRESS_NONE;
fwrite(magic, sizeof *magic, sizeof magic, fp);
fwrite(&version.major, sizeof version.major, 1, fp);
fwrite(&version.minor, sizeof version.minor, 1, fp);
fwrite(&version.patch, sizeof version.patch, 1, fp);
fwrite(&record_comp, sizeof record_comp, 1, fp);
fwrite(&s5p->header->num_read_groups, sizeof s5p->header->num_read_groups, 1, fp);
fwrite(&signal_comp, sizeof signal_comp, 1, fp);
size_t padding = 64 -
sizeof *magic * sizeof magic -
sizeof version.major -
sizeof version.minor -
sizeof version.patch -
sizeof comp -
sizeof s5p->header->num_read_groups;
char *zeroes = calloc(padding, 1);
fwrite(zeroes, sizeof *zeroes, padding, fp);
free(zeroes);
const char *header = \
"@asic_id 3574887596\n"
"@asic_id_eeprom 0\n"
"@asic_temp 29.2145729\n"
"@auto_update 1\n"
"@auto_update_source https://mirror.oxfordnanoportal.com/software/MinKNOW/\n"
"@bream_core_version 1.1.20.1\n"
"@bream_is_standard 1\n"
"@bream_map_version 1.1.20.1\n"
"@bream_ont_version 1.1.20.1\n"
"@bream_prod_version 1.1.20.1\n"
"@bream_rnd_version 0.1.1\n"
"@device_id MN16450\n"
"@exp_script_name python/recipes/nc/NC_48Hr_Sequencing_Run_FLO-MIN106_SQK-LSK108.py\n"
"@exp_script_purpose sequencing_run\n"
"@exp_start_time 1479433093\n"
"@experiment_kit genomic_dna\n"
"@experiment_type customer_qc\n"
"@file_version 1\n"
"@filename deamernanopore_20161117_fnfab43577_mn16450_sequencing_run_ma_821_r9_4_na12878_11_17_16_88738\n"
"@flow_cell_id FAB43577\n"
"@heatsink_temp 33.9921875\n"
"@hostname DEAMERNANOPORE\n"
"@installation_type map\n"
"@local_firmware_file 0\n"
"@operating_system Windows 6.2\n"
"@protocol_run_id a4429838-103c-497f-a824-7dffa72cfd81\n"
"@protocols_version 1.1.20\n"
"@run_id d6e473a6d513ec6bfc150c60fd4556d72f0e6d18\n"
"@sample_frequency 4000\n"
"@usb_config 1.0.11_ONT#MinION_fpga_1.0.1#ctrl#Auto\n"
"@user_filename_input ma_821_r9.4_na12878_11_17_16\n"
"@version 1.1.20\n"
"#char* uint32_t double double double double uint64_t int16_t*\n"
"#read_id read_group digitisation offset range sampling_rate len_raw_signal raw_signal\n";
uint32_t hdr_size = strlen(header);
fwrite(&hdr_size, sizeof hdr_size, 1, fp);
fwrite(header, sizeof *header, hdr_size, fp);
struct slow5_rec *read = NULL;
slow5_get_next(&read, s5p);
struct slow5_press *gzip = slow5_press_init(SLOW5_COMPRESS_ZLIB, SLOW5_COMPRESS_NONE);
slow5_rec_fwrite(fp, read, NULL, SLOW5_FORMAT_BINARY, gzip);
char eof[] = SLOW5_BINARY_EOF;
fwrite(eof, sizeof *eof, sizeof eof, fp);
slow5_close(s5p);
slow5_press_free(gzip);
slow5_rec_free(read);
fclose(fp);
}
void make_gzip_blow5_two_rg(void) {
FILE *fp = fopen("test/data/exp/two_rg/exp_default_gzip.blow5", "w");
struct slow5_file *s5p = slow5_open("test/data/exp/two_rg/exp_default.slow5", "r");
char magic[] = SLOW5_BINARY_MAGIC_NUMBER;
struct slow5_version version = SLOW5_BINARY_VERSION;
slow5_press_method_t record_comp = SLOW5_COMPRESS_ZLIB;
slow5_press_method_t signal_comp = SLOW5_COMPRESS_NONE;
fwrite(magic, sizeof *magic, sizeof magic, fp);
fwrite(&version.major, sizeof version.major, 1, fp);
fwrite(&version.minor, sizeof version.minor, 1, fp);
fwrite(&version.patch, sizeof version.patch, 1, fp);
fwrite(&record_comp, sizeof record_comp, 1, fp);
fwrite(&s5p->header->num_read_groups, sizeof s5p->header->num_read_groups, 1, fp);
fwrite(&signal_comp, sizeof signal_comp, 1, fp);
size_t padding = 64 -
sizeof *magic * sizeof magic -
sizeof version.major -
sizeof version.minor -
sizeof version.patch -
sizeof comp -
sizeof s5p->header->num_read_groups;
char *zeroes = calloc(padding, 1);
fwrite(zeroes, sizeof *zeroes, padding, fp);
free(zeroes);
const char *header = \
"@asic_id 3574887596 420170566\n"
"@asic_id_eeprom 0 2043896\n"
"@asic_temp 29.2145729 30.1846237\n"
"@auto_update 1 1\n"
"@auto_update_source https://mirror.oxfordnanoportal.com/software/MinKNOW/ https://mirror.oxfordnanoportal.com/software/MinKNOW/\n"
"@bream_core_version 1.1.20.1 1.1.21.1\n"
"@bream_is_standard 1 1\n"
"@bream_map_version 1.1.20.1 1.1.21.1\n"
"@bream_ont_version 1.1.20.1 1.1.21.1\n"
"@bream_prod_version 1.1.20.1 1.1.21.1\n"
"@bream_rnd_version 0.1.1 0.1.1\n"
"@device_id MN16450 MN16303\n"
"@exp_script_name python/recipes/nc/NC_48Hr_Sequencing_Run_FLO-MIN106_SQK-LSK108.py python/recipes/nc/NC_48Hr_Sequencing_Run_FLO-MIN106_SQK-LSK108.py\n"
"@exp_script_purpose sequencing_run sequencing_run\n"
"@exp_start_time 1479433093 1481657610\n"
"@experiment_kit genomic_dna genomic_dna\n"
"@experiment_type customer_qc \n"
"@file_version 1 0.6\n"
"@filename deamernanopore_20161117_fnfab43577_mn16450_sequencing_run_ma_821_r9_4_na12878_11_17_16_88738 odw_genlab4209_20161213_fn_mn16303_sequencing_run_sample_id_32395\n"
"@flow_cell_id FAB43577 \n"
"@heatsink_temp 33.9921875 33.9765625\n"
"@hostname DEAMERNANOPORE odw-genlab4209\n"
"@installation_type map map\n"
"@local_firmware_file 0 0\n"
"@operating_system Windows 6.2 Windows 6.1\n"
"@protocol_run_id a4429838-103c-497f-a824-7dffa72cfd81 3eecebf6-325f-4ac5-b896-a7588f2b2324\n"
"@protocols_version 1.1.20 1.1.21\n"
"@run_id d6e473a6d513ec6bfc150c60fd4556d72f0e6d18 0cc960b63c07619b4bf2917507d447479a21da66\n"
"@sample_frequency 4000 4000\n"
"@usb_config 1.0.11_ONT#MinION_fpga_1.0.1#ctrl#Auto 1.0.11_ONT#MinION_fpga_1.0.1#ctrl#Auto\n"
"@user_filename_input ma_821_r9.4_na12878_11_17_16 sample_id\n"
"@version 1.1.20 1.1.21\n"
"#char* uint32_t double double double double uint64_t int16_t*\n"
"#read_id read_group digitisation offset range sampling_rate len_raw_signal raw_signal\n";
uint32_t hdr_size = strlen(header);
fwrite(&hdr_size, sizeof hdr_size, 1, fp);
fwrite(header, sizeof *header, hdr_size, fp);
struct slow5_press *gzip = slow5_press_init(SLOW5_COMPRESS_ZLIB, SLOW5_COMPRESS_NONE);
struct slow5_rec *read = NULL;
slow5_get_next(&read, s5p);
slow5_rec_fwrite(fp, read, NULL, SLOW5_FORMAT_BINARY, gzip);
slow5_get_next(&read, s5p);
slow5_rec_fwrite(fp, read, NULL, SLOW5_FORMAT_BINARY, gzip);
char eof[] = SLOW5_BINARY_EOF;
fwrite(eof, sizeof *eof, sizeof eof, fp);
slow5_close(s5p);
slow5_press_free(gzip);
slow5_rec_free(read);
fclose(fp);
}
void make_blow5_two_rg(void) {
FILE *fp = fopen("test/data/exp/two_rg/exp_default.blow5", "w");
struct slow5_file *s5p = slow5_open("test/data/exp/two_rg/exp_default.slow5", "r");
char magic[] = SLOW5_BINARY_MAGIC_NUMBER;
struct slow5_version version = SLOW5_BINARY_VERSION;
slow5_press_method_t comp = SLOW5_COMPRESS_NONE;
fwrite(magic, sizeof *magic, sizeof magic, fp);
fwrite(&version.major, sizeof version.major, 1, fp);
fwrite(&version.minor, sizeof version.minor, 1, fp);
fwrite(&version.patch, sizeof version.patch, 1, fp);
fwrite(&comp, sizeof comp, 1, fp);
fwrite(&s5p->header->num_read_groups, sizeof s5p->header->num_read_groups, 1, fp);
size_t padding = 64 -
sizeof *magic * sizeof magic -
sizeof version.major -
sizeof version.minor -
sizeof version.patch -
sizeof comp -
sizeof s5p->header->num_read_groups;
char *zeroes = calloc(padding, 1);
fwrite(zeroes, sizeof *zeroes, padding, fp);
free(zeroes);
const char *header = \
"@asic_id 3574887596 420170566\n"
"@asic_id_eeprom 0 2043896\n"
"@asic_temp 29.2145729 30.1846237\n"
"@auto_update 1 1\n"
"@auto_update_source https://mirror.oxfordnanoportal.com/software/MinKNOW/ https://mirror.oxfordnanoportal.com/software/MinKNOW/\n"
"@bream_core_version 1.1.20.1 1.1.21.1\n"
"@bream_is_standard 1 1\n"
"@bream_map_version 1.1.20.1 1.1.21.1\n"
"@bream_ont_version 1.1.20.1 1.1.21.1\n"
"@bream_prod_version 1.1.20.1 1.1.21.1\n"
"@bream_rnd_version 0.1.1 0.1.1\n"
"@device_id MN16450 MN16303\n"
"@exp_script_name python/recipes/nc/NC_48Hr_Sequencing_Run_FLO-MIN106_SQK-LSK108.py python/recipes/nc/NC_48Hr_Sequencing_Run_FLO-MIN106_SQK-LSK108.py\n"
"@exp_script_purpose sequencing_run sequencing_run\n"
"@exp_start_time 1479433093 1481657610\n"
"@experiment_kit genomic_dna genomic_dna\n"
"@experiment_type customer_qc \n"
"@file_version 1 0.6\n"
"@filename deamernanopore_20161117_fnfab43577_mn16450_sequencing_run_ma_821_r9_4_na12878_11_17_16_88738 odw_genlab4209_20161213_fn_mn16303_sequencing_run_sample_id_32395\n"
"@flow_cell_id FAB43577 \n"
"@heatsink_temp 33.9921875 33.9765625\n"
"@hostname DEAMERNANOPORE odw-genlab4209\n"
"@installation_type map map\n"
"@local_firmware_file 0 0\n"
"@operating_system Windows 6.2 Windows 6.1\n"
"@protocol_run_id a4429838-103c-497f-a824-7dffa72cfd81 3eecebf6-325f-4ac5-b896-a7588f2b2324\n"
"@protocols_version 1.1.20 1.1.21\n"
"@run_id d6e473a6d513ec6bfc150c60fd4556d72f0e6d18 0cc960b63c07619b4bf2917507d447479a21da66\n"
"@sample_frequency 4000 4000\n"
"@usb_config 1.0.11_ONT#MinION_fpga_1.0.1#ctrl#Auto 1.0.11_ONT#MinION_fpga_1.0.1#ctrl#Auto\n"
"@user_filename_input ma_821_r9.4_na12878_11_17_16 sample_id\n"
"@version 1.1.20 1.1.21\n"
"#char* uint32_t double double double double uint64_t int16_t*\n"
"#read_id read_group digitisation offset range sampling_rate len_raw_signal raw_signal\n";
uint32_t hdr_size = strlen(header);
fwrite(&hdr_size, sizeof hdr_size, 1, fp);
fwrite(header, sizeof *header, hdr_size, fp);
struct slow5_rec *read = NULL;
slow5_get_next(&read, s5p);
slow5_rec_size_t record_size = sizeof read->read_id_len +
read->read_id_len * sizeof *read->read_id +
sizeof read->read_group +
sizeof read->digitisation +
sizeof read->offset +
sizeof read->range +
sizeof read->sampling_rate +
sizeof read->len_raw_signal +
read->len_raw_signal * sizeof *read->raw_signal;
fwrite(&record_size, sizeof record_size, 1, fp);
read->read_id_len = strlen(read->read_id);
fwrite(&read->read_id_len, sizeof read->read_id_len, 1, fp);
fwrite(read->read_id, sizeof *read->read_id, read->read_id_len, fp);
fwrite(&read->read_group, sizeof read->read_group, 1, fp);
fwrite(&read->digitisation, sizeof read->digitisation, 1, fp);
fwrite(&read->offset, sizeof read->offset, 1, fp);
fwrite(&read->range, sizeof read->range, 1, fp);
fwrite(&read->sampling_rate, sizeof read->sampling_rate, 1, fp);
fwrite(&read->len_raw_signal, sizeof read->len_raw_signal, 1, fp);
fwrite(read->raw_signal, sizeof *read->raw_signal, read->len_raw_signal, fp);
slow5_get_next(&read, s5p);
record_size = sizeof read->read_id_len +
read->read_id_len * sizeof *read->read_id +
sizeof read->read_group +
sizeof read->digitisation +
sizeof read->offset +
sizeof read->range +
sizeof read->sampling_rate +
sizeof read->len_raw_signal +
read->len_raw_signal * sizeof *read->raw_signal;
fwrite(&record_size, sizeof record_size, 1, fp);
read->read_id_len = strlen(read->read_id);
fwrite(&read->read_id_len, sizeof read->read_id_len, 1, fp);
fwrite(read->read_id, sizeof *read->read_id, read->read_id_len, fp);
fwrite(&read->read_group, sizeof read->read_group, 1, fp);
fwrite(&read->digitisation, sizeof read->digitisation, 1, fp);
fwrite(&read->offset, sizeof read->offset, 1, fp);
fwrite(&read->range, sizeof read->range, 1, fp);
fwrite(&read->sampling_rate, sizeof read->sampling_rate, 1, fp);
fwrite(&read->len_raw_signal, sizeof read->len_raw_signal, 1, fp);
fwrite(read->raw_signal, sizeof *read->raw_signal, read->len_raw_signal, fp);
char eof[] = SLOW5_BINARY_EOF;
fwrite(eof, sizeof *eof, sizeof eof, fp);
slow5_close(s5p);
slow5_rec_free(read);
fclose(fp);
}
int main(void) {
make_blow5();
make_gzip_blow5();
make_blow5_two_rg();
make_gzip_blow5_two_rg();
make_blow5_lossless();
make_gzip_blow5_lossless();
make_blow5_lossless_aux_array();
make_gzip_blow5_lossless_aux_array();
return 0;
}