Giter VIP home page Giter VIP logo

f5c's Introduction

f5c

An optimised re-implementation of the index, call-methylation and eventalign modules in Nanopolish. Given a set of basecalled Nanopore reads and the raw signals, f5c call-methylation detects the methylated cytosine and f5c eventalign aligns raw nanopore signals (events) to the reference k-mers. f5c can optionally utilise NVIDIA graphics cards for acceleration. For best performance and easy usability, it is recommended to use f5c on BLOW5 format. Use slow5tools for FAST5->BLOW5 conversion and blue-crab for POD5->BLOW5 conversion.

First, the reads have to be indexed using f5c index. Then, invoke f5c call-methylation to detect methylated cytosine bases. Finally, you may use f5c meth-freq to obtain methylation frequencies. Alternatively, invoke f5c eventalign to perform event alignment. The results are almost the same as from nanopolish except a few differences due to floating point approximations.

  • f5c v1.2 onwards support nanopore R10.4.1 chemistry (must specify --pore r10 if FAST5 input, autodetected for S/BLOW5 input).
  • f5c v1.4 onwards support nanopore RNA004 chemistry (make specify --pore rna004 if FAST5 input, autodetected for S/BLOW5 input).

Full Documentation : https://hasindu2008.github.io/f5c/docs/overview
Latest release : https://github.com/hasindu2008/f5c/releases/latest
Pre-print : https://doi.org/10.1101/756122
Publication : https://doi.org/10.1186/s12859-020-03697-x
Supplementary: nanopore_signal_alignment_supplementary_material.pdf
Talk Video : https://www.nvidia.com/en-us/on-demand/session/gtcspring21-s31391

GitHub Downloads BioConda Install x86_64 AARCH64 CodeFactor

Please cite the following when using f5c in your publications:

Gamaarachchi, H., Lam, C.W., Jayatilaka, G. et al. GPU accelerated adaptive banded event alignment for rapid comparative nanopore signal analysis. BMC Bioinformatics 21, 343 (2020). https://doi.org/10.1186/s12859-020-03697-x

@article{gamaarachchi2020gpu,
  title={GPU accelerated adaptive banded event alignment for rapid comparative nanopore signal analysis},
  author={Gamaarachchi, Hasindu and Lam, Chun Wai and Jayatilaka, Gihan and Samarakoon, Hiruna and Simpson, Jared T and Smith, Martin A and Parameswaran, Sri},
  journal={BMC bioinformatics},
  volume={21},
  number={1},
  pages={1--13},
  year={2020},
  publisher={BioMed Central}
}

Quick start

If you are a Linux user and want to quickly try out download the compiled binaries from the latest release. For example:

VERSION=v1.5
wget "https://github.com/hasindu2008/f5c/releases/download/$VERSION/f5c-$VERSION-binaries.tar.gz" && tar xvf f5c-$VERSION-binaries.tar.gz && cd f5c-$VERSION/
./f5c_x86_64_linux        # CPU version
./f5c_x86_64_linux_cuda   # cuda supported version

Binaries should work on most Linux distributions as the only dependency is zlib which is available by default on most distributions. For compiled binaries to work, your processor must support SSSE3 instructions or higher (processors after 2007 have these) and your operating system must have GLIBC 2.17 or higher (Linux distributions from 2014 onwards typically have this).

You can also use conda to install f5c as conda install f5c -c bioconda -c conda-forge.

Building from source

Building a release

Users are recommended to build from the latest release tar ball. You need a compiler that supports C++11. Quick example for Ubuntu :

sudo apt-get install libhdf5-dev zlib1g-dev   #install HDF5 and zlib development libraries
VERSION=v1.5
wget "https://github.com/hasindu2008/f5c/releases/download/$VERSION/f5c-$VERSION-release.tar.gz" && tar xvf f5c-$VERSION-release.tar.gz && cd f5c-$VERSION/
scripts/install-hts.sh  # download and compile the htslib
./configure
make                    # make cuda=1 to enable CUDA support

The commands to install hdf5 (and zlib) development libraries on some popular distributions :

On Debian/Ubuntu : sudo apt-get install libhdf5-dev zlib1g-dev
On Fedora/CentOS : sudo dnf/yum install hdf5-devel zlib-devel
On Arch Linux: sudo pacman -S hdf5
On OS X : brew install hdf5

Other building options

  • Building from the Github repository additionally requires invoking autoreconf --install to generate the configure script. autoreconf can be installed on Ubuntu using sudo apt-get install autoconf automake.
  • If you want only S/BLOW5 support you can disable HDF5 by invoking ./configure --disable-hdf5 && make.
  • If you skip scripts/install-hts.sh and ./configure, hdf5 will be compiled locally. It is a good option if you cannot install hdf5 library system wide. However, building hdf5 takes ages.
  • f5c from version 0.8.0 onwards by default requires vector instructions (SSSE3 or higher for Intel/AMD and neon for ARM) for builtin slow5lib. If your processor is an ancient processor with no such vector instructions, invoke make as make no_simd=1.
  • You can optionally enable zstd support for builtin slow5lib when building f5c by invoking make zstd=1. This requires zstd 1.3 development libraries installed on your system (libzstd1-dev package for apt, libzstd-devel for yum/dnf and zstd for homebrew).
  • On Mac M1 or in any system if ./configure cannot find the hdf5 libraries installed through the package manager, you can specify the location as LDFLAGS=-L/path/to/shared/lib/ CPPFLAGS=-I/path/to/headers/. For example on Mac M1:
     ./configure LDFLAGS=-L/opt/homebrew/lib/ CPPFLAGS=-I/opt/homebrew/include/
     make
    
  • Instructions to build a docker image and conda installation are detailed here.
  • Other uncommon building options are detailed here.
  • An SIMD accelerated version contributed by @dkhyland is available in the simd branch.

NVIDIA CUDA support

To build for the GPU, you need to have the CUDA toolkit installed. Make nvcc (NVIDIA C Compiler) is in your PATH.

The building instructions are the same as above except that you should call make as :

make cuda=1

Optionally you can provide the CUDA architecture as :

make cuda=1 CUDA_ARCH=-arch=sm_xy

If your CUDA library is not in the default location /usr/local/cuda/lib64, point to the correct location as:

make cuda=1 CUDA_LIB=/path/to/cuda/library/

Visit here for troubleshooting CUDA related problems.

Usage

# indexing #

f5c index -d [fast5_folder] [read.fastq|fasta] 		# for FAST5
f5c index --slow5 [slow5_file] [read.fastq|fasta]	# for S/BLOW5

# methylation calling #

# for S/BLOW5 (R9.4 or R10.4 DNA data)
f5c call-methylation -b [reads.sorted.bam] -g [ref.fa] -r [reads.fastq|fasta] --slow5 [slow5_file] > [meth.tsv]
# for FAST5, R9.4 DNA data
f5c call-methylation -b [reads.sorted.bam] -g [ref.fa] -r [reads.fastq|fasta] > [meth.tsv]
# for FAST5, R10.4 DNA data
f5c call-methylation -b [reads.sorted.bam] -g [ref.fa] -r [reads.fastq|fasta] --pore r10 > [meth.tsv]
# methylation frequency
f5c meth-freq -i [meth.tsv] > [freq.tsv]

# event align #

# for S/BLOW5 (R9.4 DNA/RNA or R10.4 DNA data)
f5c eventalign -b [reads.sorted.bam] -g [ref.fa] -r [reads.fastq|fasta] --slow5 [slow5_file] > [events.tsv]
# for FAST5 (R9.4 DNA data)
f5c eventalign -b [reads.sorted.bam] -g [ref.fa] -r [reads.fastq|fasta]  > [events.tsv]
# for FAST5 (R9.4 RNA data)
f5c eventalign -b [reads.sorted.bam] -g [ref.fa] -r [reads.fastq|fasta] --rna > [events.tsv]
# for FAST5 (R10.4 DNA data)
f5c eventalign -b [reads.sorted.bam] -g [ref.fa] -r [reads.fastq|fasta] --pore r10 > [events.tsv]
# for FAST5 (RNA004 RNA data)
f5c eventalign -b [reads.sorted.bam] -g [ref.fa] -r [reads.fastq|fasta] --pore rna004 --rna > [events.tsv]

Visit the man page for all the commands and options. See here for description of output formats.

Example

Follow the same steps as in Nanopolish tutorial while replacing nanopolish with f5c. If you only want to perform a quick test of f5c :

#download and extract the dataset including sorted alignments
wget -O f5c_na12878_test.tgz "https://f5c.bioinf.science/f5c_na12878_test"
tar xf f5c_na12878_test.tgz

###### Using S/BLOW5 as input (recommended) ######

#index, call methylation and get methylation frequencies
f5c index --slow5 chr22_meth_example/reads.blow5 chr22_meth_example/reads.fastq
f5c call-methylation --slow5 chr22_meth_example/reads.blow5 -b chr22_meth_example/reads.sorted.bam -g chr22_meth_example/humangenome.fa -r chr22_meth_example/reads.fastq > chr22_meth_example/result.tsv
f5c meth-freq -i chr22_meth_example/result.tsv > chr22_meth_example/freq.tsv
#event alignment
f5c eventalign --slow5 chr22_meth_example/reads.blow5 -b chr22_meth_example/reads.sorted.bam -g chr22_meth_example/humangenome.fa -r chr22_meth_example/reads.fastq > chr22_meth_example/events.tsv


###### Using FAST5 as input ######

#index, call methylation and get methylation frequencies
f5c index -d chr22_meth_example/fast5_files chr22_meth_example/reads.fastq
f5c call-methylation -b chr22_meth_example/reads.sorted.bam -g chr22_meth_example/humangenome.fa -r chr22_meth_example/reads.fastq > chr22_meth_example/result.tsv
f5c meth-freq -i chr22_meth_example/result.tsv > chr22_meth_example/freq.tsv
#event alignment
f5c eventalign -b chr22_meth_example/reads.sorted.bam -g chr22_meth_example/humangenome.fa -r chr22_meth_example/reads.fastq > chr22_meth_example/events.tsv

#### NOTE: If you are using FAST5 format, make sure to specify --pore r10 for R10.4.1 data and --rna for RNA data. These are autodetected for S/BLOW5 in latest f5c.

More examples can be found here.

Acknowledgement

This reuses code and methods from Nanopolish. The event detection code is from Oxford Nanopore's Scrappie basecaller. Some code snippets have been taken from Minimap2 and Samtools.

f5c's People

Contributors

danielltb avatar dkhyland avatar gihanjayatilaka avatar hasindu2008 avatar hiruna72 avatar lamcw avatar sanojpunchihewa avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

f5c's Issues

GPU mem needed ?

Hi,

I only have older low-mem GPUs available.

  • GTX 950, 960,
  • 2GB GPU RAM
  • 660 CUDA cores

Is it worth trying to compile and use the GPU version, or does the tool need something much bigger ?
Thanks,
Colin

[get_rank::WARNING] A None ACGT base found : U

Hello and thank you for your f5c software!
I launched an f5c eventalign job on a basecalled fastq file after the indexing step.
The computation are still running but, the stderr is outputting this message and stdout eventalign file is still at 0 bytes:

[init_iop] Spawning 9 I/O processes to circumvent HDF hell
[meth_main::11.867*0.49] 512 Entries (1.1M bases) loaded
[get_rank::WARNING] A None ACGT base found : U
[get_rank::WARNING] A None ACGT base found : U
[get_rank::WARNING] A None ACGT base found : U
[get_rank::WARNING] A None ACGT base found : U
[get_rank::WARNING] A None ACGT base found : U
[get_rank::WARNING] A None ACGT base found : U
[get_rank::WARNING] A None ACGT base found : U
[get_rank::WARNING] A None ACGT base found : U
...
..
.

Obviously, the fastq has been generated basecalling fast5 files obtained via ONT direct-RNA sequencing protocol thus the fastq contains U instead of T. Can I ignore this warning? Is there a way to avoid the production of this warning (the stderr file is already huge, I mean 30 GB and it is still growing up...)?

Error in eventalign

Well, I test f5c to index, it really faster than before. It works!
but when I use f5c to eventalign, it print out on screen:
[E::faidx_adjust_position] The sequence "NM_001035539.1" not found
[E::faidx_adjust_position] The sequence "NM_001035539.1" not found
......
[get_rank::WARNING] A None ACGT base found : U
[get_rank::WARNING] A None ACGT base found : U
[get_rank::WARNING] A None ACGT base found : U
......
Now it has run two hours, and there is nothing written in output file
I don't know what's wrong with it. Or it is just normal.
Thank you!

memcpy error when compiling cuda=1

When I compiled on my dev machine, I got the following error:

make cuda=1
nvcc -x cu -g -O2 -std=c++11 -lineinfo -Xcompiler -Wall -I./htslib -DHAVE_CUDA=1 -rdc=true -c src/f5c.cu -o build/f5c_cuda.o
/usr/include/string.h: In function โ€˜void* __mempcpy_inline(void*, const void*, size_t)โ€™:
/usr/include/string.h:652:42: error: โ€˜memcpyโ€™ was not declared in this scope
return (char *) memcpy (__dest, __src, __n) + __n;
^
Makefile:76: recipe for target 'build/f5c_cuda.o' failed
make: *** [build/f5c_cuda.o] Error 1

To fix it, set the following line:

CUDA_CFLAGS+="-D_FORCE_INLINES" make cuda=1

I don't really understand how or why this works, but it does.

:)

resquiggle in f5c

Hi there,

I am interested in the resquiggle module, as I am not a c programmer, and it is not easy for me to read the source code. May I ask how you generated the simulation signal of the target sequence which was used to align to?

I appreciate any help you can provide.

RNA model support

Hi @hasindu2008,

f5c eventalign throws the following error when trying to use the RNA model (r9.4_70bps.u_to_t_rna.5mer.template.model ):

[set_opt_profile] max-lf: 5.0, avg-epk: 2.0, max-epk: 5.0, K: 256, B: 1.5M, t: 4, ultra-thresh: 100.0k, iop: 1
[read_model::WARNING] Reading the model from file resources/r9.4_70bps.u_to_t_rna.5mer.template.model. This is an experimental feature. Use with caution
[read_model::ERROR] File resources/r9.4_70bps.u_to_t_rna.5mer.template.model is corrupted at line 0
[read_model::ERROR] File resources/r9.4_70bps.u_to_t_rna.5mer.template.model prematurely ended. Expected 4096 kmers in the model, but file had only 1025

Would you mind having a look ?

mC in other motifs and R10

Dear Hasindu,

May I know if there is any plan to include 5mC in other motifs for application in plant sample?
Also, is f5c compatible with data from R10 flowcells?

Thank you,
Cen

feature suggestion: collapse events option for eventalign

Hi @hasindu2008

Thank you for writing f5c. It is amazing!! I am using it to eventalign direct RNA data for comparative modification detection (e.g. using nanocompore, xPore or yanocomp) and it has sped up my analysis significantly.

The next step after event alignment (for all the tools listed) is to collapse the event-level information from the tabular eventalign output into kmer-level signal data. I am finding that even in cpu mode f5c is so fast that this is now the limiting step in the analysis. It would make a lot of sense for f5c to have a --collapse-events type flag that outputs the kmer-level data, rather than having to pipe the f5c output or write it to disk and have another tool read it to do the collapsing. It would also significantly reduce the size of the eventalign output file.

What do you think of this idea? In principle it seems like it wouldn't be too difficult to implement... I would try it myself but I am not a great C programmer and you probably don't want me messing with your highly optimised code!

All the best
Matt

Incorrect header with correct header

Hi, I'm trying to call methylation from a file obtained by tldr call meth that looks like:
chromosome strand start end read_name log_lik_ratio log_lik_methylated log_lik_unmethylated num_calling_strands num_motifs sequence
9433d43d-aae9-4757-a9a8-7e980999e835 - 45 45 03de98f9-9155-475e-b80c-5952fa449927 3.32 -79.74 -83.06 1 1 AAATACGCCAG
9433d43d-aae9-4757-a9a8-7e980999e835 + 45 45 0563bcf3-41de-4f3a-bed3-bacf6990de67 4.65 -133.14 -137.79 1 1 AAATACGCCAG
9433d43d-aae9-4757-a9a8-7e980999e835 + 45 45 083364bd-748d-4ba4-8c7a-07918d67a595 5.85 -100.39 -106.24 1 1 AAATACGCCAG
9433d43d-aae9-4757-a9a8-7e980999e835 - 45 45 53a2038a-376f-4571-8ef3-12fcf593f773 -1.75 -126.39 -124.63 1 1 AAATACGCCAG
9433d43d-aae9-4757-a9a8-7e980999e835 - 45 45 6948bfe3-058d-4eaf-b3a2-2284eaabf892 6.49 -104.35 -110.84 1 1 AAATACGCCAG
9433d43d-aae9-4757-a9a8-7e980999e835 - 45 45 7203447c-fb52-4b39-b262-943bd2845e83 7.44 -139.72 -147.16 1 1 AAATACGCCAG
9433d43d-aae9-4757-a9a8-7e980999e835 + 45 45 81c21fe2-04e6-4802-9bc4-e93d19432f00 7.21 -108.18 -115.40 1 1 AAATACGCCAG
9433d43d-aae9-4757-a9a8-7e980999e835 - 45 45 94c79f9d-c701-41a2-be8a-04309b46a44b -1.02 -154.81 -153.79 1 1 AAATACGCCAG
9433d43d-aae9-4757-a9a8-7e980999e835 - 45 45 96124793-5040-47a4-a5e6-3eeebb880496 7.31 -115.83 -123.14 1 1 AAATACGCCAG
9433d43d-aae9-4757-a9a8-7e980999e835 + 45 45 af21be23-6ea9-4b93-8db5-532e9ed885fc 5.07 -168.89 -173.95 1 1 AAATACGCCAG
9433d43d-aae9-4757-a9a8-7e980999e835 - 45 45 bd9846ed-9973-488a-b346-2e5ac1cc52c3 2.98 -86.21 -89.19 1 1 AAATACGCCAG
and have this error

f5c meth-freq -i C0_tldr.te.meth.tsv
Incorrect header: chromosome strand start end read_name log_lik_ratio log_lik_methylated log_lik_unmethylated num_calling_strands num_motifs sequence

When using calculate_methylation_frequency.py I get an error in num_motifs, when again num_motifs does exist.

calculate_methylation_frequency.py C0_tldr.te.meth.tsv
Traceback (most recent call last):
File "/usr/local/easybuild-2019/easybuild/software/mpi/gcc/8.3.0/openmpi/3.1.4/nanopolish/0.13.2-python-3.7.4/scripts/calculate_methylation_frequency.py", line 41, in
num_sites = int(record['num_motifs'])
KeyError: 'num_motifs'

awk '{print $10}' C0_tldr.te.meth.tsv
num_motifs
1
1
1
1

Any idea what might be happening?

few sites from LSK114

Hi, I'm using f5c to call methylation sites from LSK114.

I'm obtaining only few sites. Is f5c ready to be used on LSK114? How should I implement f5c on reads from LSK114?

Thank you,
Oscar

5fc index --sequencing_summary

Can you clarify the issues with the sequencing_summary option? It speeds things up enormously and so I hope to keep using it if possible. What exactly are the formatting issues and/or the proper format specifications for sequencing_summary.txt.

Cannot index files compressed with gzip, please use bgzip

Hello!

I use the following commands to run f5c call-methylation:
/share/home/lius/biosoft/f5c/f5c-v0.8/f5c_x86_64_linux_cuda
call-methylation -b /share3/lius/tredata/DNA/batch2/xxx/map2GRCh38genome/xxx.clean.fq.gz.map2GRCh38genome.sort.bam
-g /share/home/lius/ref_data/gencode_GRCh38/all_genome/GRCh38.p13.genome.fa.gz
--iop 5
-t 40
--disable-cuda=no
-r /share3/lius/tredata/DNA/batch2/xxx/xxx.clean.fq.gz \

/share/home/lius/tredata/f5c_5mC/f5c_call5mC_output/xxx_f5c_call5mC.tsv

And there is a error, Cannot index files compressed with gzip, please use bgzip.
Could you give me some advise to address the problem?

Thanks in advance

f5c index

Hi there,

Is it possible to use fastq indexed with f5c for downstream work with nanopolish and vice versa? If yes, does the versions of nanopolish/f5c matters?

Best,
Pedram

[handle_bad_fast5::WARNING] Fast5 file [] for read [xxx] is unreadable and will be skipped

I'm running f5c on some nanopore minION 9.4.1 data, basecalled with guppy v3.2.1.

It's currently running fine with nanopolish but a little slow, so I wanted to check out f5c.

Commands ran (similar to nanopolish):
nice ~/f5c-v0.2-beta/f5c_x86_64_linux_cuda index -v -s ../00_fastq/sequencing_summary.txt -d ../00_fastq/workspace/ merged.fastq &
nice ~/f5c-v0.2-beta/f5c_x86_64_linux_cuda call-methylation -t 40 -g /mnt/ix1/Resources/GenomeRef/Homo_sapiens/NCBI/GRCh38/Sequence/WholeGenomeFasta/genome.fa -b ../01_minimap2/PBMC_nucleosome.sorted.bam -r merged.fastq > PBMC.methylation.tsv &

I suddenly started getting spammed with the following:

[handle_bad_fast5::WARNING] Fast5 file [] for read [7e378c24-b327-4614-8177-1f5e87c9a6a3] is unreadable and will be skipped
[handle_bad_fast5::WARNING] Fast5 file [] for read [164eaab1-e365-4c1f-847c-c2fdf138c261] is unreadable and will be skipped
[handle_bad_fast5::WARNING] Fast5 file [] for read [cad224f4-c271-4223-96b4-f5c08dbaeb7c] is unreadable and will be skipped
[handle_bad_fast5::WARNING] Fast5 file [] for read [2d4b2390-f8b6-4bc0-a651-6ddaa52f9821] is unreadable and will be skipped
[handle_bad_fast5::WARNING] Fast5 file [] for read [e15dd481-2835-4d3e-8886-76b785ae252f] is unreadable and will be skipped
[handle_bad_fast5::WARNING] Fast5 file [] for read [4423ba53-5e63-4ee6-a459-b81e7c8abcca] is unreadable and will be skipped
[handle_bad_fast5::WARNING] Fast5 file [] for read [47d56611-9448-4d38-913b-c1213b4bcb2c] is unreadable and will be skipped
[handle_bad_fast5::WARNING] Fast5 file [] for read [ea23a44d-3c3e-42bb-b701-6ef88d4ff492] is unreadable and will be skipped
[handle_bad_fast5::WARNING] Fast5 file [] for read [3a01a4b1-1d17-4adc-ac49-49442920a5ca] is unreadable and will be skipped
[handle_bad_fast5::WARNING] Fast5 file [] for read [f5733f05-693d-45fe-8669-c1b5c8daf822] is unreadable and will be skipped
[handle_bad_fast5::WARNING] Fast5 file [] for read [91501677-34e9-4eba-8f37-be9178981065] is unreadable and will be skipped
[handle_bad_fast5::WARNING] Fast5 file [] for read [4b549791-217b-40f1-aedc-ec7f9e27cdb8] is unreadable and will be skipped
[handle_bad_fast5::WARNING] Fast5 file [] for read [54e53420-00b9-4c5c-b843-3c390f43a0f7] is unreadable and will be skipped
[handle_bad_fast5::WARNING] Fast5 file [] for read [d65ce225-704e-4d8d-92df-6438fc54eaa5] is unreadable and will be skipped
[handle_bad_fast5::WARNING] Fast5 file [] for read [33e2839a-c7b7-4d64-912c-2fcddae425d7] is unreadable and will be skipped
[handle_bad_fast5::WARNING] Fast5 file [] for read [285512ab-9f9a-4358-b346-4e8fa4cc4aa3] is unreadable and will be skipped
[handle_bad_fast5::WARNING] Fast5 file [] for read [71ce87bb-f1fe-4115-b11d-f44f3f3385eb] is unreadable and will be skipped

I'm guessing the index wasn't properly built? Not sure how to fix this.

Graphmap2 compatibility

Good morning and thank you very much for your sofware. I really appretiate it. Because of some experimental isuees, I have been obliged to use Graphmap2 instead of Minimap2 aligner. What I found was the following: when aligning the reads with graphmap2, f5c wasn't able to perform the eventalign procedures while, on the same reads and fastq files, by the change of the only bam file with the one generated via minimap2, no problems have occurred. Is this due to an incompatibility of f5c sofware with graphmap2? In addition, nanopolish was able to perform the eventalign step on both the bam files (from minimap2 and graphmap2). To note, I was working on direct RNA Nanopore sequencing runs. Do you have any suggestion to fix this behaviour?

Many thanks!

Support for --samples option in eventalign

Hi @hasindu2008

We use the --samples option in nanopolish eventalign to extract accurate signal parameters at kmer level in Nanocompore for RNA modification detection. It appears that the option is not yet available in fc5 eventalign. I know that it considerably increase the size of the file but we normally directly pipe into our pipeline.

Would you consider adding it ?

Thanks

Question: Directory of blow5:s as input?

Reading f5c documentation in preparation for moving my pipeline from fast5 to blow5, I noticed that f5c appears to want only a single blow5 file as input. Is that right?

I would like to keep the old fast5 type architecture of ~189 files of ~8GB each rather than one blow5 file of 763GB (example for one sample), which, I think, is about 5% of maximum file size (16TB) on NetApp. And I would expect it to be cumbersome to work with too. Have I misunderstood something or is the "one humongous file" the recommended workflow for blow5?

Thanks in advance,
Kimmo

F5C is not processing all of the RNA reads

Hi @hasindu2008

The speed increase of f5c over nanopolish is impressive. I am interesting in continuing to use f5c, but I noticed that when processing RNA data there is a discrepancy on the number of reads processed with nanopolish. F5c eventalign is processing ~57% of the reads that nanopolish eventalign is processing.

At first we thought this was an indexing issue, but the outcome is the same with or without using the sequence summary file for indexing.

I did some systematic testing using a single flowcell (UCSC_Run5) which has 628,824 reads from the RNA consortium data linked here https://github.com/nanopore-wgs-consortium/NA12878/blob/master/RNA.md

Nanopolish_vs_f5c

I installed f5c using conda and used the following commands:

conda activate ont_env
f5c index -d fast5_directory UCSC_Run5_20170922_DirectRNA.pass.dedup.NoU.fastq
f5c eventalign --rna -t 24 --iop 10 -r UCSC_run5/no_seq_sum/test1/UCSC_Run5_20170922_DirectRNA.pass.dedup.NoU.fastq -b UCSC_Run5_20170922_DirectRNA.pass.dedup.NoU.minimap2_gencodev36_sorted.bam -g gencode.v36.transcripts.fa --scale-events --print-read-names --samples > UCSC_Run5_f5c_eventalign_NoseqSum.txt

One output message that stood out was this one:
[meth_main] total entries: 361155, qc fail: 6564, could not calibrate: 331, no alignment: 2441, bad fast5: 0

It appears that ~57% of the reads are being processed by 5fc. However, the similar message from nanopolish appears to be counting each read ~four times:
[post-run summary] total reads: 2101455, unparseable: 0, qc fail: 51474, could not calibrate: 6833, no alignment: 15153, bad fast5: 0

I would appreciate your thoughts as to why so many RNA reads are being skipped by f5c.

resquiggle

hi, I am using resquiggle to match the original signals to the basecalled reads, the whole process is error-free, but only partially matched. Almost 90% of them are not calibrate?

[resquiggle_main] total entries: 5575790, qc fail: 97888, could not calibrate: 4834013, no alignment: 80406, bad read: 0

f5c meth-freq invalid

When I use f5c meth-freq , I found that '-o' is invalid and makes command fail. I can only use '>' to direct to output_file.

Installation via conda?

Is it possible to create a version for bioconda? Iโ€™ve set up my workflows so every important package gets its own conda environment and this seems like a great tool to have in my workflow as Iโ€™ve been dealing with lots of methylation calls as of late.

Also, is the output of call-methylation the same as the nanopolish output?

[get_rank::WARNING] A None ACGT base found : U

When I use f5c call-methylation, it return this warning
[get_rank::WARNING] A None ACGT base found : U.

Will it influence the results?
Can --rna option only applied on the evenalign?

Getting the contigs of interest from the reference sequence instead of the BAM file

Dear @hasindu2008

This is a feature request.

Having set up my fast5-indexes and BAM file, I have realized that I sometimes want to run the analyses across specific contigs (up to 20-30 thousand ones in my case), rather than the whole genome.

I am aware that the program be specified to scan only a particular sequence, but there is an substantial overhead associated with running just across a short contig and then restart the program and run it again.

I guess one way to accomplish what I want is to filter the BAM file so that it only contains mappings against the contigs of interest.

Another, much simpler method is to filter the reference genome so that it only contains the contigs of interest. In my case, also in a specific order of interest, from the most prioritized sequences to the least. This is easy to accomplish by just updating the reference genome file.

However, it seems like the program defaults to scanning the data according to the order of contigs in the BAM file, not in the reference genome file.

Would it be possible to tweak the code so that the program gets the target contigs for analyses, and their order of analysis, from the reference file instead of the BAM file?

This would make the program very flexible and accommodate various ad-hoc subsets for analysis, if needed.

HDF5 error when running

Hi @hasindu2008
I installed f5c without error but when I run it, it gives me this error:

[init_cuda] Running on Tesla V100-SXM2-32GB (device id 3)
[cuda_freemem] 19.77 GB free of total 31.72 GB GPU memory
[init_cuda] Max GPU capacity 11.8M bases
[init_cuda::INFO] Your GPU can accommodate upto 11.8M bases. You may increase -B option (currently 0.0M) for better performance!
HDF5-DIAG: Error detected in HDF5 (1.8.16) thread 140452057438016:
#000: ../../../src/H5L.c line 1117 in H5Lget_name_by_idx(): name doesn't exist
major: Symbol table
minor: Object already exists
#1: ../../../src/H5Gtraverse.c line 861 in H5G_traverse(): internal path traversal failed
major: Symbol table
minor: Object not found
#2: ../../../src/H5Gtraverse.c line 755 in H5G_traverse_real(): component not found
major: Symbol table
minor: Object not found
[fast5_read::WARNING] Failed to retrieve the size of the read name.
[handle_bad_fast5::WARNING] Fast5 file [/projects/vakbari_prj/scratch/NA12878_fast5s//PLSP57501_20161028_FNFAB42451_MN16458_sequencing_run_Nott_Hum_R9_4_3_0.fast5] for read [3b450dea-7ad4-42b0-8ab1-acb8f8438f56] is unreadable and wi
ll be skipped
HDF5-DIAG: Error detected in HDF5 (1.8.16) thread 140452057438016:
#000: ../../../src/H5L.c line 1117 in H5Lget_name_by_idx(): name doesn't exist
major: Symbol table
minor: Object already exists
#1: ../../../src/H5Gtraverse.c line 861 in H5G_traverse(): internal path traversal failed
major: Symbol table
minor: Object not found
#2: ../../../src/H5Gtraverse.c line 755 in H5G_traverse_real(): component not found
major: Symbol table
minor: Object not found
[fast5_read::WARNING] Failed to retrieve the size of the read name.
[handle_bad_fast5::WARNING] Fast5 file [/projects/vakbari_prj/scratch/NA12878_fast5s//makeson_PC_20161117_FNFAB44989_MN17284_sequencing_run_MA_470_R9_4_NA12878_11_17_16_115.fast5] for read [a2227fb3-191a-49b7-a6c4-f1d8224aeabd] is u
nreadable and will be skipped

Can you please help me in this matter?

Thanks,
Vahid.

GCP instance not seeing the cuda device

When attempting to use the pre-built binaries on a GCP Ubuntu 16.04 instance with installed cuda toolkit, the following error appeared:

Processing triggers for initramfs-tools (0.122ubuntu8.14) ...
update-initramfs: Generating /boot/initrd.img-4.15.0-1029-gcp
W: mdadm: /etc/mdadm/mdadm.conf defines no arrays.
Processing triggers for ca-certificates (20170717~16.04.2) ...
Updating certificates in /etc/ssl/certs...
0 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...

done.
done.
albert_vilella_cegx_co_uk@avilella-ubuntu1604-f5c:~$ f5c call-methylation -b chr22_meth_example/reads.sorted.bam -g chr22_meth_example/humangenome.fa -r chr22_meth_example/reads.fastq > chr22_meth_example/result.tsv
[cuda_exists::ERROR] Cuda error: unknown error 
 in file : src/f5cmisc.cuh line number : 98
[cuda_exists::ERROR] Could not initialise a cuda capable device. Some troubleshooting tips in order:
1. Do you have an NVIDIA GPU? [lspci | grep -i "vga\|3d\|display"]
2. Have you installed the NVIDIA proprietary driver (not the open source nouveau driver)? [lspci -nnk | grep -iA2 "vga\|3d\|display"]                                                                                                               
3. If you GPU is tegra is the current user belongs to the [video] user group?
4. Is your cuda driver too old? (the release binary compiled using cuda 6.5)
Run with --disable-cuda=yes to run on the CPU
albert_vilella_cegx_co_uk@avilella-ubuntu1604-f5c:~$ lspci | grep -i "vga\|3d\|display"
00:03.0 Non-VGA unclassified device: Red Hat, Inc. Virtio SCSI
00:04.0 3D controller: NVIDIA Corporation GP100GL [Tesla P100 PCIe 16GB] (rev a1)
albert_vilella_cegx_co_uk@avilella-ubuntu1604-f5c:~$ #sudo apt-get install -y nvidia-cuda-toolkit

[Request] An option to filter out signal spikes

Hi Hasindu,

thank you for developing f5c and the detailed documentation with it, it is incredibly fast. I am using it to detect RNA modifications, and in one part of our studies we want to use PORE-cupine Aw et al., which takes Nanopolish eventalign output as input for their SVMs, so f5c already is compatible.

However, there is one step that currently is different from the way f5c behaves, and that is that they modified nanopolish to include a filtering step for raw signal (pA) values below 0 or above 200 pA, the code of which is found in nanopolish_fast5_io.cpp, below line 211 in your copy of it:

The additional code is this

    tmp_nsample=nsample; //added

    // convert to pA
    rawtbl = (raw_table) { nsample, 0, nsample, rawptr };
    raw_unit = scaling.range / scaling.digitisation;
    for (size_t i = 0; i < nsample; i++) {
        rawptr[i] = (rawptr[i] + scaling.offset) * raw_unit;
    }

// filter the outliners in pA
// this is edited by awjga

for (size_t i = nsample-1; i >0 ; i--) {
    //filter sample > 200 pA and less than 0 pA 
    if(rawptr[i]>200 || rawptr[i]<0){
        tmp_nsample=tmp_nsample-1;
        for (size_t dd=i;dd<nsample;dd++){
            rawptr[dd]=rawptr[dd+1];
        }
    }
}
//to update the value of nsample 
nsample=tmp_nsample;
rawtbl = (raw_table) { nsample, 0, nsample, rawptr };

Which as far as I understand removes any value below 0 or above 200. I noticed that the function fast5_get_raw_samples was commented out in your code and you replaced it with a different function, but I have yet been unable to implement this filtering in your code (as I have essentially no experience with C/C++).

Could you help me with implementing this feature either hardcoded (I'm able to compile it easily thanks to your documentation) or as a command line option?

Thanks in advance and best wishes,
Patrick

f5c eventaling -w flag behaviour

Hi,
thank you very much for your f5c software! It's a very powerful tool.

I'm very interested in the use of the -w flag in order to limit processing to a genomic region specified as chr:start-end.
In this context, for istance, if I launch the following command (with 1-based coordinates):

f5c eventalign \
    --reads reads.fasta \
    --bam reads-ref.sorted.bam \
    --genome ref_sub.fa \
    --scale-events \
    --print-read-names \
    --samples \
    -w 'gi|545778205|gb|U00096.3|-523261-527541:43-80' \
    --t 4 > ../reads-ref_w_flag.eventalign 2> ../f5c_eventalign_w_flag.err

I expect to retrieve reads mapping on the interval 42-80 (0-based). In the end, if I load the resulting table on a Pandas.DataFrame and I run the df.describe() command I obtained the following result:

image

Thus if I want to obtain the 42-80 range in the final dataframe I have to add 5 position to the end coordinate into the -w flag of f5c eventalign command. I tested also other positions and I found the same shift of 5 position on the end coordinate.

Am I doing something wrong?

Thank you in advance!

Installation on Jetson Xavier

Hello and thanks for your work!

This is an issue that I managed to solve (I hope correctly) for the compiling part on a Jetson Xavier AGX. I hope it helps anyone in the future.

So the makefile had an error 1 issue for the jetson on the nvcc command:
~/ssd/f5c$ make cuda=1 CUDA_ARCH=-arch=sm_72
nvcc -x cu -g -O2 -std=c++11 -lineinfo -arch=sm_72 -Xcompiler -Wall -DNDEBUG -D_FORTIFY_SOURCE=2 -O2 -isystem /home/magos/miniforge3/include -I./htslib -I./hdf5/include/ -DHAVE_CUDA=1 -rdc=true -c src/f5c.cu -o build/f5c_cuda.o
nvcc fatal : redefinition of argument 'optimize'
Makefile:106: recipe for target 'build/f5c_cuda.o' failed
make: *** [build/f5c_cuda.o] Error 1

Looking into it, it seems nvcc doesn't like double commands. In this case, it was -02. So I removed it from line 37 of the makefile and it then ran smoothly.

BENCHMARKING:
Additionally and FYI, it seems the profile created for the Xavier underestimates the power of this little machine. In my benchmarking tests, the jetson-xavier profile batch_size_bases (-B) were boosted to 10M (from 4.7M) successfully.
Here are both results with original profile and -B 10000000:

  1. jetson-xavier profile:
    [meth_main] total entries: 155764, qc fail: 65, could not calibrate: 21, no alignment: 1563, bad fast5: 0
    [meth_main] total bases: 1016.6 Mbases
    [meth_main] Data loading time: 734.721 sec
    [meth_main] - bam load time: 24.476 sec
    [meth_main] - fasta load time: 237.770 sec
    [meth_main] - fast5 load time: 470.616 sec
    [meth_main] - fast5 open time: 1.209 sec
    [meth_main] - fast5 read time: 469.407 sec
    [meth_main] Data processing time: 1668.647 sec
    [meth_main] - Events time: 187.296 sec
    [meth_main] - Alignment time: 340.338 sec
    [meth_main] -cpu preprocess time: 74.669 sec
    [meth_main] -cuda malloc time: 0.028 sec
    [meth_main] -cuda data transfer time: 68.465 sec
    [meth_main] -cuda kernel time: 90.964 sec
    [meth_main] -align-pre kernel only time: 5.213 sec
    [meth_main] -align-core kernel only time: 62.657 sec
    [meth_main] -align-post kernel only time: 23.095 sec
    [meth_main] -cpu postprocess time: 11.736 sec
    [meth_main] -additional cpu processing time (load imbalance): 94.422 sec
    [meth_main] - Estimate scaling time: 67.992 sec
    [meth_main] - HMM time: 1072.918 sec
    [meth_main] Data output time: 52.714 sec
    [main] Version: 0.6
    [main] CMD: ./f5c call-methylation -t 8 -x jetson-xavier -r [FASTQ_PATH] -g [REF_GENOME_PATH] -b [BAM_PATH]
    [main] Real time: 1693.154 sec; CPU time: 9019.244 sec; Peak RAM: 3.655 GB

  2. jetson-xavier profile -B 10000000:
    [meth_main] total entries: 155764, qc fail: 65, could not calibrate: 21, no alignment: 1563, bad fast5: 0
    [meth_main] total bases: 1016.6 Mbases
    [meth_main] Data loading time: 626.032 sec
    [meth_main] - bam load time: 20.327 sec
    [meth_main] - fasta load time: 199.510 sec
    [meth_main] - fast5 load time: 404.742 sec
    [meth_main] - fast5 open time: 0.771 sec
    [meth_main] - fast5 read time: 403.970 sec
    [meth_main] Data processing time: 1326.607 sec
    [meth_main] - Events time: 153.801 sec
    [meth_main] - Alignment time: 292.182 sec
    [meth_main] -cpu preprocess time: 65.607 sec
    [meth_main] -cuda malloc time: 0.028 sec
    [meth_main] -cuda data transfer time: 57.686 sec
    [meth_main] -cuda kernel time: 81.498 sec
    [meth_main] -align-pre kernel only time: 4.325 sec
    [meth_main] -align-core kernel only time: 57.996 sec
    [meth_main] -align-post kernel only time: 19.177 sec
    [meth_main] -cpu postprocess time: 9.728 sec
    [meth_main] -additional cpu processing time (load imbalance): 77.610 sec
    [meth_main] - Estimate scaling time: 54.829 sec
    [meth_main] - HMM time: 825.747 sec
    [meth_main] Data output time: 43.977 sec
    [main] Version: 0.6
    [main] CMD: ./f5c call-methylation -t 8 -x jetson-xavier -B 10000000 -r [FASTQ_PATH] -g [REF_GENOME_PATH] -b [BAM_PATH]
    [main] Real time: 1360.456 sec; CPU time: 8689.180 sec; Peak RAM: 4.476 GB

PS. I did get some nice blue indication that GPU might be overloaded, so the whole thing might need some tweaking, but overall, that's the result. Thanks again!

OpenMPI Support?

Hi

I read your excellent paper and had two questions:

  1. Does your software support OpenMPI? We have a small cluster of V-100 GPUs with Infiniband so would like to leverage if that's possible.

  2. What CPUs were used in your paper? I tried to find out which ones were present on the V-100 but possibly missed that section.

Thanks!

Questions about running on linux server

I plan on running this program for A LOT of promthion runs. I had a few questions:

  • How is the performance for CPU vs. GPU?
  • Can GPU be utilized on this server?
(base) -bash-4.1$ uname -r
2.6.32-754.23.1.el6.x86_64
  • Is the GPU architecture configured for conda installations?
  • Does the number of threads scale linearly? For nanopolish it does not.

detected invalid summary file when index with FAST5 in multiple subdirectories

Hi,
I am using f5c to generate index file. First, the raw fast5 files are in two directories. I used two Guppy basecallers to baseball the raw reads, separately. Then I merged two basecalling results including fastq and sequencing-summary. Then I used the following command to generate index.

f5c_x86_64_linux index -t 40 -s merged_summary.txt -d Bham -d Norwich NA12878-10X-gpoup2.fastq

Then I met the warning information as follows:

warning: detected invalid summary file entries for 5052927 of 5052927 fast5 files
These files will be indexed without using the summary file, which is slow.

Next, I used Nanopolish to generate the index file with the following command, and there are no warnings.

nanopolish index -s merged_summary.txt -d Bham -d Norwich NA12878-10X-gpoup2.fastq

Can you help me to fix this problem? Thanks.

Best
Neng Huang

How to make f5c work inside a nextflow pipeline?

Hello Dr. Gamaarachchi,

I am trying to use f5c in a nextflow pipeline and I keep getting errors. F5c runs fine outside of pipeline but always fails inside workflow. I am not sure what I am doing wrong. I have tried asking for someone else for help but couldnโ€™t find a solution.

I keep getting this error - even though the f5c index process completed successfully. If you have time, can you please take a look and let me know if I am doing anything wrong?

Command error:
error: could not load the index files for input file sample.fastq
Please run f5c index on your reads (see documentation)

process f5cindex {

    publishDir "$params.outdir/${singlefast5s.simpleName}_single", mode:'copy'

    tag "nanopolish index using f5c"

    input:
    path singlefast5s
    path fastq
    val flag

    output:
    path "*", optional: true
    val true, emit: f5cindexout

    script:
    """
    f5c index -t 24 -d $singlefast5s $fastq
    """
}

process f5ceventalign {

    publishDir "$params.outdir/${fastq.simpleName}_f5c", mode:'copy'

    input:
    path fastq
    tuple path(bam), path(bai)
    path referencefasta
    val flag

    output:
    path "*_summary.txt", emit: f5csummary_ch
    path "*_eventalign.txt", emit: f5ceventalign_ch
    val true, emit: f5ceventaligndone_ch

    script:
    """
    f5c eventalign --scale-events --signal-index --print-read-names --rna -r $fastq -b $bam -g $referencefasta --summary ${bam.simpleName}_summary.txt --threads 40 > ${bam.simpleName}_eventalign.txt
    """
}

how I defined channels?

Channel
.value(file("$baseDir/sample_singlefast5s"))
.set {singlefast5s}

Channel
.fromPath("$baseDir/mappedfastqs_16s_native/sample.fastq")
.set {samplefastq}

baminput1 = [
file("$baseDir/mappedbams_16s_native/sample.bam"),
file("$baseDir/mappedbams_16s_native/sample.bam.bai")
]

Channel
.value(file(params.reference_16s))
.set {reference}

workflow:

f5cindex (singlefast5s, samplefastq)

f5ceventalign (samplefastq, baminput1, reference)

requires slow5 when using -x hpc-mid (or maybe any profile?)

Hi @hasindu2008

I'm trying out f5c (cpu version 0.7) for the first time and ran it with the command:

$F5C eventalign \
  --rna \
  -x hpc-mid \
  --scale-events \
  --signal-index \
  --summary summary.txt  \
  -r reads.fastq  \
  -b alignments.bam \
  -g transcriptome.fasta

I found that using -x hpc-mid, or in fact any of the profile presets I tried, f5c seems to require a slow5 file and gives the error:

[slow5_open_with::ERROR] Argument 'pathname' cannot be NULL. At src/slow5.c:254
[init_core] Error opening SLOW5 file (null)

It starts processing the data without error if I remove the -x flag.

Looking forward to using f5c :)
Matt

Inconsistent strand output for direct RNA-seq reads

Hi, thanks for developing such an amazing tool, it largely speeds up our analysis for analyzing signal-level data.

However, I have noticed that the output kmer model for direct RNA-seq reads is in the reverse complementary order. Is it designed on purpose? Considering that ONT direct RNA-seq method reads the RNA strand from 3' to 5', and signals should be reverted to get the correct RNA sequence. So, maybe it's more appropriate to convert these kmers to the 5'-3' order.

e.g. f5c will generate the reverse complementary model kmer:

ENST00000457540.1       3       AATCC   27      t       996     141.37  5.017   0.01295 GGATT   129.83  5.10    1.79    11580   11619
ENST00000457540.1       4       ATCCC   27      t       995     128.06  5.748   0.01029 GGGAT   124.02  3.17    1.00    11619   11650
ENST00000457540.1       4       ATCCC   27      t       994     112.33  3.297   0.00232 GGGAT   124.02  3.17    -2.91   11650   11657
ENST00000457540.1       4       ATCCC   27      t       993     121.18  4.649   0.00266 GGGAT   124.02  3.17    -0.71   11657   11665
ENST00000457540.1       4       ATCCC   27      t       992     127.13  7.856   0.00697 GGGAT   124.02  3.17    0.77    11665   11686

However, nanopolish will convert these kmers to the correct order:

ENST00000393000.3       33      CGCGG   13      t       2       68.39   0.887   0.00232 CGCGG   92.98   8.39    -2.54   33531   33538
ENST00000393000.3       33      CGCGG   13      t       3       76.88   1.882   0.01295 CGCGG   92.98   8.39    -1.66   33492   33531
ENST00000393000.3       34      GCGGC   13      t       4       91.66   5.726   0.00963 GCGGC   90.29   4.98    0.24    33463   33492
ENST00000393000.3       34      GCGGC   13      t       5       83.71   4.941   0.00332 GCGGC   90.29   4.98    -1.15   33453   33463
ENST00000393000.3       34      GCGGC   13      t       6       92.16   3.637   0.00365 GCGGC   90.29   4.98    0.33    33442   33453
ENST00000393000.3       34      GCGGC   13      t       7       95.99   2.488   0.00664 GCGGC   90.29   4.98    0.99    33422   33442
ENST00000393000.3       35      CGGCG   13      t       8       112.02  5.079   0.00498 CGGCG   107.83  5.31    0.68    33407   33422

-B flag is not recognized or still throws warning

I downloaded the v0.6 binaries and ran the cuda version with the -B 9M flag but still get this error:

$ f5c_x86_64_linux_cuda call-methylation -r temp.fastq.gz -b temp.bam -g hg38.rg.fa.gz -t 16 -x hpc --iop 16 -B 5M > temp.txt
[set_opt_profile] max-lf: 5.0, avg-epk: 2.0, max-epk: 5.0, K: 2048, B: 20.0M, t: 48, ultra-thresh: 100.0k, iop: 64
[init_iop] Spawning 16 I/O processes to circumvent HDF hell
[init_cuda] Running on NVIDIA Tesla V100-PCIE-16GB (device id 0)
[cuda_freemem] 15.43 GB free of total 15.78 GB GPU memory
[init_cuda] Max GPU capacity 9.2M bases
[init_cuda::INFO] Your GPU can accommodate only 9.2M bases. You may decrease -B option (currently 20.0M) for better performance!

Is it not recognizing the -B 5M flag? why does it throw this error and indicate it's using 20.0M bases?

Empty bam and tsv file with f5c methylation calling

Hi,
I am trying to use f5c and follow the "Resource efficient methylation calling workflow for a dataset with many ultra-long reads. However, the methylation call failed and I think it might be something wrong with the samtools step to get the bam file - I got an empty bam file and empty tsv files. I have attache the error information for your reference.

Would really appreciate it if you can help to solve the issue! Thanks!

[M::mm_idx_gen::104.657*0.99] collected minimizers
[M::mm_mapopt_update::154.168*1.00] mid_occ = 892
[M::mm_idx_stat] kmer size: 15; skip: 10; is_hpc: 0; #seq: 25
[M::mm_idx_stat::155.147*1.00] distinct minimizers: 100277218 (38.70% are singletons); average occurrences: 5.856; average spacing: 5.308; total length: 3117292070
[M::worker_pipeline::1700.969*1.00] mapped 31053 sequences
[M::worker_pipeline::2978.382*1.00] mapped 27179 sequences
[M::worker_pipeline::4503.583*1.00] mapped 27496 sequences
[M::worker_pipeline::5921.870*1.00] mapped 26935 sequences
[M::worker_pipeline::7378.081*1.00] mapped 26405 sequences
[M::worker_pipeline::8825.560*1.00] mapped 26779 sequences
[M::worker_pipeline::10403.014*1.00] mapped 26387 sequences
[M::worker_pipeline::11846.442*1.00] mapped 27982 sequences
[M::worker_pipeline::13383.000*1.00] mapped 26939 sequences
[M::worker_pipeline::14902.949*1.00] mapped 28122 sequences
[M::worker_pipeline::16351.550*1.00] mapped 27010 sequences
[M::worker_pipeline::17843.300*1.00] mapped 25898 sequences
[M::worker_pipeline::19364.163*1.00] mapped 25301 sequences
[M::worker_pipeline::20808.294*1.00] mapped 25726 sequences
[M::worker_pipeline::22241.301*1.00] mapped 25931 sequences
[ERROR] failed to write the results: Disk quota exceeded
[W::sam_read1] parse error at line 430685
[bam_sort_core] truncated file. Aborting.
samtools index: "sample_r9_guppy_6.1.5.bam" is in a format that cannot be usefully indexed
[find_all_fast5] Looking for fast5 in /fastscratch/c-panz/raw/sample_r9/
[f5c_index_iop] 1481 fast5 files found - took 0.297s
[f5c_index_iop] Spawning 64 I/O processes to circumvent HDF hell
[f5c_index_iop] Parallel indexing done - took 18860.476s
[f5c_index_merge] Indexing merging done - took 8.393s.
[readdb] num reads: 5922364, num reads with path to fast5: 2326610
[M::mm_idx_gen::104.657*0.99] collected minimizers
[M::mm_mapopt_update::154.168*1.00] mid_occ = 892
[M::mm_idx_stat] kmer size: 15; skip: 10; is_hpc: 0; #seq: 25
[M::mm_idx_stat::155.147*1.00] distinct minimizers: 100277218 (38.70% are singletons); average occurrences: 5.856; average spacing: 5.308; total length: 3117292070
[M::worker_pipeline::1700.969*1.00] mapped 31053 sequences
[M::worker_pipeline::2978.382*1.00] mapped 27179 sequences
[M::worker_pipeline::4503.583*1.00] mapped 27496 sequences
[M::worker_pipeline::5921.870*1.00] mapped 26935 sequences
[M::worker_pipeline::7378.081*1.00] mapped 26405 sequences
[M::worker_pipeline::8825.560*1.00] mapped 26779 sequences
[M::worker_pipeline::10403.014*1.00] mapped 26387 sequences
[M::worker_pipeline::11846.442*1.00] mapped 27982 sequences
[M::worker_pipeline::13383.000*1.00] mapped 26939 sequences
[M::worker_pipeline::14902.949*1.00] mapped 28122 sequences
[M::worker_pipeline::16351.550*1.00] mapped 27010 sequences
[M::worker_pipeline::17843.300*1.00] mapped 25898 sequences
[M::worker_pipeline::19364.163*1.00] mapped 25301 sequences
[M::worker_pipeline::20808.294*1.00] mapped 25726 sequences
[M::worker_pipeline::22241.301*1.00] mapped 25931 sequences
[ERROR] failed to write the results: Disk quota exceeded
[W::sam_read1] parse error at line 430685
[bam_sort_core] truncated file. Aborting.
samtools index: "sample_r9_guppy_6.1.5.bam" is in a format that cannot be usefully indexed
[find_all_fast5] Looking for fast5 in /fastscratch/c-panz/raw/sample_r9/
[f5c_index_iop] 1481 fast5 files found - took 0.297s
[f5c_index_iop] Spawning 64 I/O processes to circumvent HDF hell
[f5c_index_iop] Parallel indexing done - took 18860.476s
[f5c_index_merge] Indexing merging done - took 8.393s.
[readdb] num reads: 5922364, num reads with path to fast5: 2326610
[M::mm_idx_gen::104.657*0.99] collected minimizers
[M::mm_idx_gen::151.886*1.00] sorted minimizers
[M::main::151.886*1.00] loaded/built the index for 25 target sequence(s)
[M::mm_mapopt_update::154.168*1.00] mid_occ = 892
[M::mm_idx_stat] kmer size: 15; skip: 10; is_hpc: 0; #seq: 25
[M::mm_idx_stat::155.147*1.00] distinct minimizers: 100277218 (38.70% are singletons); average occurrences: 5.856; average spacing: 5.308; total length: 3117292070
[M::worker_pipeline::1700.969*1.00] mapped 31053 sequences
[M::worker_pipeline::2978.382*1.00] mapped 27179 sequences
[M::worker_pipeline::4503.583*1.00] mapped 27496 sequences
[M::worker_pipeline::5921.870*1.00] mapped 26935 sequences
[M::worker_pipeline::7378.081*1.00] mapped 26405 sequences
[M::worker_pipeline::8825.560*1.00] mapped 26779 sequences
[M::worker_pipeline::10403.014*1.00] mapped 26387 sequences
[M::worker_pipeline::11846.442*1.00] mapped 27982 sequences
[M::worker_pipeline::13383.000*1.00] mapped 26939 sequences
[M::worker_pipeline::14902.949*1.00] mapped 28122 sequences
[M::worker_pipeline::16351.550*1.00] mapped 27010 sequences
[M::worker_pipeline::17843.300*1.00] mapped 25898 sequences
[M::worker_pipeline::19364.163*1.00] mapped 25301 sequences
[M::worker_pipeline::20808.294*1.00] mapped 25726 sequences
[M::worker_pipeline::22241.301*1.00] mapped 25931 sequences
[ERROR] failed to write the results: Disk quota exceeded
[W::sam_read1] parse error at line 430685
[bam_sort_core] truncated file. Aborting.  
samtools index: "sample_r9_guppy_6.1.5.bam" is in a format that cannot be usefully indexed
[parse_index_options::INFO]^[[1;34m Consider using --slow5 option for fast indexing, methylation calling and eventalignment. See f5c section under https://hasindu2008.github.io/slow5tools/workflows.html for an example.^[[0m
[find_all_fast5] Looking for fast5 in /fastscratch/c-panz/raw/sample_r9/
[f5c_index_iop] 1481 fast5 files found - took 0.297s
[f5c_index_iop] Spawning 64 I/O processes to circumvent HDF hell
[f5c_index_iop] Parallel indexing done - took 18860.476s
[f5c_index_merge] Indexing merging done - took 8.393s.
[readdb] num reads: 5922364, num reads with path to fast5: 2326610
[index_main::WARNING]^[[1;33m fast5 files could not be located for 3595754 reads^[[0m
[main] Version: 1.1
[main] CMD: f5c index --iop 64 -t 32 -d /fastscratch/c-panz/raw/sample_r9/ /fastscratch/c-panz/raw_fastq/sample_r9_guppy_6.1.5.fq
[main] Real time: 40027.256 sec; CPU time: 20916.302 sec; Peak RAM: 1.554 GB

call-methylation: unrecognized option '---ultra-thresh'
call-methylation: invalid option -- 'd'
call-methylation: invalid option -- 'i'
call-methylation: invalid option -- 's'
call-methylation: invalid option -- 'a'
[meth_main::INFO]^[[1;34m Default methylation tsv output format is changed from f5c v0.7 onwards to match latest nanopolish output. Set --meth-out-version=1 to fall back to the old format.^[[0m
[E::hts_open_format] Failed to open file le-cuda=yes
[init_core::ERROR]^[[1;31m No such file or directory.^[[0m
[init_core::DEBUG]^[[1;35m Error occured at src/f5c.c:102.^[[0m


Bad file format with no header?
Bad file format with no header?
Bad file format with no header?                                                                                                                                                       ```

Meth-freq treshold issue

Hi,
I recently did methyl-calling using f5c, I want to plot the meth-freq tsv file, but i realized that some of the methyl-calling.tsv reads were kept into the meth-freq.tsv file even tho they have log-like-ratio between 2.5 and -2.5. Is this normal? I am asking because some of these reads have 100% meth-freq even tho they don't pass the treshold.

I added some picture, you can look at the region starting at 11296

Thanks
methyl-calling
meth-freq

Possible to specify a genomic interval?

Dear @hasindu2008,

This software looks great! In Nanopolish, it is possible to specify an arbitrary genomic region/interval to scan using the "-w" flag, e.g.: -w ctg1:1-100000

Is it possible to accomplish something similar in f5c?

The output of f5c for evenaligning is quite different from nanopolish

Hi !
I use nanopolish and f5c to evenalign for my direct RNA dataset, I found that output files of two software are different. The Respective commands are following:

nanopolish(v0.13.3)
/share/home/lius/biosoft/nanopolish/nanopolish/nanopolish eventalign
-r /share3/liuwd/2022-1-6_RNA_methylation_test/nanopolish_test/fast5_9.fastq
-g /share/home/lius/ref_data/gencode_GRCh38/transcripts/gencode.v38.transcripts.fa
-b /share3/liuwd/2022-1-6_RNA_methylation_test/fast5_9.fastq_mapTrans.sort.bam
-t 10
--signal-index
--scale-events
--summary /share3/liuwd/2022-1-6_RNA_methylation_test/nanopolish_test/nanopolish_ea.summary.txt > /share3/liuwd/2022-1-6_RNA_methylation_test/nanopolish_test/nanopolish_ea.tsv

f5c(v0.8)
/share/home/lius/biosoft/f5c/f5c-v0.8/f5c_x86_64_linux_cuda eventalign
-r /share3/liuwd/2022-1-6_RNA_methylation_test/nanopolish_test/fast5_9.fastq
-g /share/home/lius/ref_data/gencode_GRCh38/transcripts/gencode.v38.transcripts.fa
-b /share3/liuwd/2022-1-6_RNA_methylation_test/fast5_9.fastq_mapTrans.sort.bam
-B 3M
-t 10
-K 2000
-o /share3/liuwd/2022-1-6_RNA_methylation_test/f5c_test/f5in_fast5_9.tsv
--disable-cuda=yes
--signal-index
--scale-events
--rna
--summary /share3/liuwd/2022-1-6_RNA_methylation_test/f5c_test/f5in_fast5_9.summary.txt
--iop 4

The size of nanopolish_ea.tsv is 11G, and that of f5in_fast5_9.tsv is just 1.6G. I am puzzled that whether I could use f5c eventalign for DRS data to replace nanopolish, and have the same outcome in downstream analyse.

Thanks in advance!

no alignment in most reads

I was having this issue with nanopolish and was pointed to the fact that it does not support r10 flow cells. I then tried f5c. The output here is a little more verbose, but I am still ending up with the same error:

(base) MAB@Axceleron-WKS:~/2748_NP_methylation/fast5_pass$ f5c index -d /data/MAB/2748_NP_methylation/fast5_pass/single_barcode12 /data/MAB/2748_NP_methylation/fast5_pass/single_barcode12.guppy2/pass/fast5s.al.guppy.fastq
[parse_index_options::INFO] Consider using --slow5 option for fast indexing, methylation calling and eventalignment. See f5c section under https://hasindu2008.github.io/slow5tools/workflows.html for an example.
[readdb] indexing /data/MAB/2748_NP_methylation/fast5_pass/single_barcode12
[readdb] indexing /data/MAB/2748_NP_methylation/fast5_pass/single_barcode12/26
[readdb] indexing /data/MAB/2748_NP_methylation/fast5_pass/single_barcode12/14
[readdb] indexing /data/MAB/2748_NP_methylation/fast5_pass/single_barcode12/9
[readdb] indexing /data/MAB/2748_NP_methylation/fast5_pass/single_barcode12/3
[readdb] indexing /data/MAB/2748_NP_methylation/fast5_pass/single_barcode12/4
[readdb] indexing /data/MAB/2748_NP_methylation/fast5_pass/single_barcode12/19
[readdb] indexing /data/MAB/2748_NP_methylation/fast5_pass/single_barcode12/13
[readdb] indexing /data/MAB/2748_NP_methylation/fast5_pass/single_barcode12/21
[readdb] indexing /data/MAB/2748_NP_methylation/fast5_pass/single_barcode12/25
[readdb] indexing /data/MAB/2748_NP_methylation/fast5_pass/single_barcode12/17
[readdb] indexing /data/MAB/2748_NP_methylation/fast5_pass/single_barcode12/0
[readdb] indexing /data/MAB/2748_NP_methylation/fast5_pass/single_barcode12/7
[readdb] indexing /data/MAB/2748_NP_methylation/fast5_pass/single_barcode12/10
[readdb] indexing /data/MAB/2748_NP_methylation/fast5_pass/single_barcode12/22
[readdb] indexing /data/MAB/2748_NP_methylation/fast5_pass/single_barcode12/12
[readdb] indexing /data/MAB/2748_NP_methylation/fast5_pass/single_barcode12/18
[readdb] indexing /data/MAB/2748_NP_methylation/fast5_pass/single_barcode12/20
[readdb] indexing /data/MAB/2748_NP_methylation/fast5_pass/single_barcode12/5
[readdb] indexing /data/MAB/2748_NP_methylation/fast5_pass/single_barcode12/2
[readdb] indexing /data/MAB/2748_NP_methylation/fast5_pass/single_barcode12/8
[readdb] indexing /data/MAB/2748_NP_methylation/fast5_pass/single_barcode12/27
[readdb] indexing /data/MAB/2748_NP_methylation/fast5_pass/single_barcode12/15
[readdb] indexing /data/MAB/2748_NP_methylation/fast5_pass/single_barcode12/11
[readdb] indexing /data/MAB/2748_NP_methylation/fast5_pass/single_barcode12/23
[readdb] indexing /data/MAB/2748_NP_methylation/fast5_pass/single_barcode12/6
[readdb] indexing /data/MAB/2748_NP_methylation/fast5_pass/single_barcode12/1
[readdb] indexing /data/MAB/2748_NP_methylation/fast5_pass/single_barcode12/24
[readdb] indexing /data/MAB/2748_NP_methylation/fast5_pass/single_barcode12/16
[readdb] num reads: 110340, num reads with path to fast5: 110340
[main] Version: 1.1
[main] CMD: f5c index -d /data/MAB/2748_NP_methylation/fast5_pass/single_barcode12 /data/MAB/2748_NP_methylation/fast5_pass/single_barcode12.guppy2/pass/fast5s.al.guppy.fastq
[main] Real time: 65.252 sec; CPU time: 170.488 sec; Peak RAM: 0.039 GB

(base) MAB@Axceleron-WKS:~/2748_NP_methylation/fast5_pass$ f5c call-methylation -r /data/MAB/2748_NP_methylation/fast5_pass/single_barcode12.guppy2/pass/fast5s.al.guppy.fastq -b /data/MAB/2748_NP_methylation/fastq_pass/barcode12/assembly/assembly.sorted.bam -g /data/MAB/2748_NP_methylation/fastq_pass/barcode12/assembly/assembly.fasta -t 16
[meth_main::INFO] Default methylation tsv output format is changed from f5c v0.7 onwards to match latest nanopolish output. Set --meth-out-version=1 to fall back to the old format.
chromosome	strand	start	end	read_name	log_lik_ratio	log_lik_methylated	log_lik_unmethylated	num_calling_strands	num_motifs	sequence
[meth_main::1.481*1.01] 512 Entries (4.6M bases) loaded
[meth_main::2.330*6.74] 512 Entries (3.6M bases) loaded
[pthread_processor::4.100*9.91] 512 Entries (4.6M bases) processed
[meth_main::4.869*10.98] 512 Entries (3.7M bases) loaded
[pthread_processor::6.029*11.54] 512 Entries (3.6M bases) processed
[meth_main::6.785*12.14] 512 Entries (3.7M bases) loaded
[pthread_processor::7.983*12.08] 512 Entries (3.7M bases) processed
[meth_main::8.701*12.48] 512 Entries (3.5M bases) loaded
[pthread_processor::9.756*12.64] 512 Entries (3.7M bases) processed
[meth_main::10.513*12.95] 512 Entries (3.8M bases) loaded
[pthread_processor::11.372*12.96] 512 Entries (3.5M bases) processed
[meth_main::12.248*13.23] 512 Entries (4.0M bases) loaded
[pthread_processor::13.327*13.36] 512 Entries (3.8M bases) processed
[meth_main::14.399*13.62] 512 Entries (3.7M bases) loaded
[pthread_processor::15.588*13.47] 512 Entries (4.0M bases) processed
[meth_main::16.605*13.69] 512 Entries (3.7M bases) loaded
[pthread_processor::17.493*13.66] 512 Entries (3.7M bases) processed
[meth_main::18.597*13.84] 512 Entries (3.9M bases) loaded
[pthread_processor::19.537*13.80] 512 Entries (3.7M bases) processed
[meth_main::20.533*13.95] 512 Entries (3.5M bases) loaded
[pthread_processor::21.773*13.85] 512 Entries (3.9M bases) processed
[meth_main::22.655*13.97] 512 Entries (3.9M bases) loaded
[pthread_processor::23.654*13.92] 512 Entries (3.5M bases) processed
[meth_main::24.739*14.05] 512 Entries (3.8M bases) loaded
[pthread_processor::26.242*13.74] 512 Entries (3.9M bases) processed
[meth_main::27.276*13.87] 512 Entries (4.0M bases) loaded
[pthread_processor::28.338*13.80] 512 Entries (3.8M bases) processed
[meth_main::29.404*13.91] 512 Entries (4.0M bases) loaded
[pthread_processor::30.707*13.80] 512 Entries (4.0M bases) processed
[meth_main::31.776*13.91] 512 Entries (4.4M bases) loaded
[pthread_processor::32.923*13.90] 512 Entries (4.0M bases) processed
[meth_main::33.875*13.98] 512 Entries (3.8M bases) loaded
[pthread_processor::35.374*13.95] 512 Entries (4.4M bases) processed
[meth_main::36.220*14.02] 512 Entries (3.5M bases) loaded
[pthread_processor::37.325*14.02] 512 Entries (3.8M bases) processed
[meth_main::38.227*14.08] 512 Entries (3.7M bases) loaded
[pthread_processor::39.241*14.04] 512 Entries (3.5M bases) processed
[meth_main::40.072*14.09] 512 Entries (3.3M bases) loaded
[pthread_processor::41.224*14.06] 512 Entries (3.7M bases) processed
[meth_main::42.093*14.12] 512 Entries (3.9M bases) loaded
[pthread_processor::42.887*14.13] 512 Entries (3.3M bases) processed
[meth_main::43.932*14.19] 512 Entries (3.6M bases) loaded
[pthread_processor::45.034*14.13] 512 Entries (3.9M bases) processed
[meth_main::46.035*14.19] 512 Entries (3.7M bases) loaded
[pthread_processor::46.797*14.21] 512 Entries (3.6M bases) processed
[meth_main::47.810*14.26] 512 Entries (3.5M bases) loaded
[pthread_processor::48.715*14.25] 512 Entries (3.7M bases) processed
[meth_main::49.809*14.31] 512 Entries (3.8M bases) loaded
[pthread_processor::50.563*14.27] 512 Entries (3.5M bases) processed
[meth_main::51.658*14.33] 512 Entries (4.2M bases) loaded
[pthread_processor::52.600*14.28] 512 Entries (3.8M bases) processed
[meth_main::53.737*14.34] 512 Entries (4.3M bases) loaded
[pthread_processor::54.831*14.30] 512 Entries (4.2M bases) processed
[meth_main::55.704*14.34] 512 Entries (3.9M bases) loaded
[pthread_processor::57.015*14.32] 512 Entries (4.3M bases) processed
[meth_main::58.067*14.37] 512 Entries (3.8M bases) loaded
[pthread_processor::59.070*14.35] 512 Entries (3.9M bases) processed
[meth_main::60.127*14.39] 512 Entries (3.9M bases) loaded
[pthread_processor::61.029*14.37] 512 Entries (3.8M bases) processed
[meth_main::62.032*14.41] 512 Entries (3.6M bases) loaded
[pthread_processor::63.748*14.23] 512 Entries (3.9M bases) processed
[meth_main::64.855*14.28] 512 Entries (3.9M bases) loaded
[pthread_processor::65.619*14.26] 512 Entries (3.6M bases) processed
[meth_main::66.472*14.29] 512 Entries (3.8M bases) loaded
[pthread_processor::67.863*14.23] 512 Entries (3.9M bases) processed
[meth_main::68.720*14.26] 512 Entries (3.7M bases) loaded
[pthread_processor::70.104*14.20] 512 Entries (3.8M bases) processed
[meth_main::70.991*14.23] 512 Entries (4.0M bases) loaded
[pthread_processor::72.461*14.13] 512 Entries (3.7M bases) processed
[meth_main::73.305*14.17] 512 Entries (3.7M bases) loaded
[pthread_processor::74.866*14.11] 512 Entries (4.0M bases) processed
[meth_main::75.743*14.14] 512 Entries (3.7M bases) loaded
[pthread_processor::76.682*14.14] 512 Entries (3.7M bases) processed
[meth_main::77.464*14.16] 512 Entries (3.3M bases) loaded
[pthread_processor::78.616*14.13] 512 Entries (3.7M bases) processed
[meth_main::79.471*14.16] 512 Entries (3.8M bases) loaded
[pthread_processor::80.421*14.13] 512 Entries (3.3M bases) processed
[meth_main::81.270*14.16] 512 Entries (3.8M bases) loaded
[pthread_processor::82.710*14.09] 512 Entries (3.8M bases) processed
[meth_main::83.555*14.12] 512 Entries (3.6M bases) loaded
[pthread_processor::84.625*14.11] 512 Entries (3.8M bases) processed
[meth_main::85.444*14.14] 512 Entries (3.7M bases) loaded
[pthread_processor::86.285*14.15] 512 Entries (3.6M bases) processed
[meth_main::87.120*14.17] 512 Entries (3.8M bases) loaded
[pthread_processor::88.113*14.17] 512 Entries (3.7M bases) processed
[meth_main::89.015*14.20] 512 Entries (4.1M bases) loaded
[pthread_processor::90.027*14.20] 512 Entries (3.8M bases) processed
[meth_main::90.905*14.23] 512 Entries (3.8M bases) loaded
[pthread_processor::92.491*14.16] 512 Entries (4.1M bases) processed
[meth_main::93.371*14.19] 512 Entries (3.3M bases) loaded
[pthread_processor::94.544*14.17] 512 Entries (3.8M bases) processed
[meth_main::95.430*14.19] 512 Entries (3.5M bases) loaded
[pthread_processor::96.199*14.19] 512 Entries (3.3M bases) processed
[meth_main::97.081*14.21] 512 Entries (3.7M bases) loaded
[pthread_processor::98.098*14.20] 512 Entries (3.5M bases) processed
[meth_main::99.016*14.23] 512 Entries (4.1M bases) loaded
[pthread_processor::100.124*14.20] 512 Entries (3.7M bases) processed
[meth_main::101.010*14.23] 512 Entries (4.2M bases) loaded
[pthread_processor::102.146*14.23] 512 Entries (4.1M bases) processed
[meth_main::103.231*14.25] 512 Entries (3.8M bases) loaded
[pthread_processor::104.368*14.23] 512 Entries (4.2M bases) processed
[meth_main::105.416*14.26] 512 Entries (3.9M bases) loaded
[pthread_processor::106.486*14.23] 512 Entries (3.8M bases) processed
[meth_main::107.532*14.25] 512 Entries (3.7M bases) loaded
[pthread_processor::108.394*14.25] 512 Entries (3.9M bases) processed
[meth_main::109.452*14.28] 512 Entries (4.0M bases) loaded
[pthread_processor::110.277*14.26] 512 Entries (3.7M bases) processed
[meth_main::111.305*14.28] 512 Entries (3.6M bases) loaded
[pthread_processor::112.295*14.27] 512 Entries (4.0M bases) processed
[meth_main::113.396*14.30] 512 Entries (4.0M bases) loaded
[pthread_processor::114.185*14.28] 512 Entries (3.6M bases) processed
[meth_main::115.108*14.30] 512 Entries (4.2M bases) loaded
[pthread_processor::116.197*14.30] 512 Entries (4.0M bases) processed
[meth_main::117.148*14.32] 512 Entries (4.3M bases) loaded
[pthread_processor::118.435*14.30] 512 Entries (4.2M bases) processed
[meth_main::119.447*14.33] 512 Entries (3.7M bases) loaded
[pthread_processor::120.553*14.33] 512 Entries (4.3M bases) processed
[meth_main::121.657*14.35] 512 Entries (3.8M bases) loaded
[pthread_processor::122.674*14.32] 512 Entries (3.7M bases) processed
[meth_main::123.687*14.34] 512 Entries (3.7M bases) loaded
[pthread_processor::124.749*14.31] 512 Entries (3.8M bases) processed
[meth_main::125.847*14.34] 512 Entries (4.0M bases) loaded
[pthread_processor::126.629*14.32] 512 Entries (3.7M bases) processed
[meth_main::127.641*14.35] 512 Entries (3.6M bases) loaded
[pthread_processor::128.697*14.33] 512 Entries (4.0M bases) processed
[meth_main::129.536*14.35] 512 Entries (3.9M bases) loaded
[pthread_processor::130.811*14.31] 512 Entries (3.6M bases) processed
[meth_main::131.861*14.34] 512 Entries (3.5M bases) loaded
[pthread_processor::132.762*14.33] 512 Entries (3.9M bases) processed
[meth_main::133.889*14.35] 512 Entries (4.1M bases) loaded
[pthread_processor::134.849*14.32] 512 Entries (3.5M bases) processed
[meth_main::135.944*14.34] 512 Entries (4.1M bases) loaded
[pthread_processor::136.994*14.33] 512 Entries (4.1M bases) processed
[meth_main::138.021*14.35] 512 Entries (3.8M bases) loaded
[pthread_processor::138.962*14.35] 512 Entries (4.1M bases) processed
[meth_main::140.055*14.37] 512 Entries (3.9M bases) loaded
[pthread_processor::140.822*14.36] 512 Entries (3.8M bases) processed
[meth_main::141.870*14.38] 512 Entries (3.8M bases) loaded
[pthread_processor::143.064*14.35] 512 Entries (3.9M bases) processed
[meth_main::144.172*14.37] 512 Entries (4.5M bases) loaded
[pthread_processor::145.169*14.35] 512 Entries (3.8M bases) processed
[meth_main::146.210*14.37] 512 Entries (3.9M bases) loaded
[pthread_processor::147.513*14.36] 512 Entries (4.5M bases) processed
[meth_main::148.590*14.38] 512 Entries (3.8M bases) loaded
[pthread_processor::149.577*14.36] 512 Entries (3.9M bases) processed
[meth_main::150.686*14.38] 512 Entries (3.7M bases) loaded
[pthread_processor::151.462*14.38] 512 Entries (3.8M bases) processed
[meth_main::152.481*14.40] 512 Entries (3.6M bases) loaded
[pthread_processor::154.019*14.34] 512 Entries (3.7M bases) processed
[meth_main::155.104*14.35] 512 Entries (3.6M bases) loaded
[pthread_processor::155.928*14.34] 512 Entries (3.6M bases) processed
[meth_main::157.067*14.36] 512 Entries (4.2M bases) loaded
[pthread_processor::157.805*14.35] 512 Entries (3.6M bases) processed
[meth_main::158.801*14.36] 512 Entries (4.0M bases) loaded
[pthread_processor::159.932*14.36] 512 Entries (4.2M bases) processed
[meth_main::160.786*14.37] 512 Entries (3.7M bases) loaded
[pthread_processor::162.136*14.35] 512 Entries (4.0M bases) processed
[meth_main::163.025*14.37] 512 Entries (4.0M bases) loaded
[pthread_processor::164.329*14.35] 512 Entries (3.7M bases) processed
[meth_main::165.305*14.36] 512 Entries (3.8M bases) loaded
[pthread_processor::166.408*14.35] 512 Entries (4.0M bases) processed
[meth_main::167.275*14.37] 512 Entries (3.7M bases) loaded
[pthread_processor::168.422*14.36] 512 Entries (3.8M bases) processed
[meth_main::169.284*14.37] 512 Entries (3.8M bases) loaded
[pthread_processor::170.326*14.36] 512 Entries (3.7M bases) processed
[meth_main::171.249*14.38] 512 Entries (4.0M bases) loaded
[pthread_processor::172.718*14.34] 512 Entries (3.8M bases) processed
[meth_main::173.581*14.35] 512 Entries (3.8M bases) loaded
[pthread_processor::174.816*14.34] 512 Entries (4.0M bases) processed
[meth_main::175.716*14.35] 512 Entries (4.1M bases) loaded
[pthread_processor::177.072*14.32] 512 Entries (3.8M bases) processed
[meth_main::177.974*14.34] 512 Entries (4.0M bases) loaded
[pthread_processor::179.347*14.32] 512 Entries (4.1M bases) processed
[meth_main::180.197*14.33] 512 Entries (3.8M bases) loaded
[pthread_processor::181.528*14.32] 512 Entries (4.0M bases) processed
[meth_main::182.447*14.33] 512 Entries (4.0M bases) loaded
[pthread_processor::183.541*14.33] 512 Entries (3.8M bases) processed
[meth_main::184.443*14.34] 512 Entries (3.9M bases) loaded
[pthread_processor::185.693*14.32] 512 Entries (4.0M bases) processed
[meth_main::186.566*14.34] 512 Entries (3.6M bases) loaded
[pthread_processor::187.744*14.33] 512 Entries (3.9M bases) processed
[meth_main::188.780*14.34] 512 Entries (3.7M bases) loaded
[pthread_processor::189.596*14.33] 512 Entries (3.6M bases) processed
[meth_main::190.514*14.35] 512 Entries (3.9M bases) loaded
[pthread_processor::191.579*14.33] 512 Entries (3.7M bases) processed
[meth_main::192.655*14.35] 512 Entries (3.8M bases) loaded
[pthread_processor::193.737*14.33] 512 Entries (3.9M bases) processed
[meth_main::194.825*14.35] 512 Entries (3.8M bases) loaded
[pthread_processor::195.675*14.34] 512 Entries (3.8M bases) processed
[meth_main::196.738*14.35] 512 Entries (3.9M bases) loaded
[pthread_processor::197.647*14.35] 512 Entries (3.8M bases) processed
[meth_main::198.717*14.36] 512 Entries (3.8M bases) loaded
[pthread_processor::199.667*14.35] 512 Entries (3.9M bases) processed
[meth_main::200.769*14.36] 512 Entries (4.0M bases) loaded
[pthread_processor::201.571*14.36] 512 Entries (3.8M bases) processed
[meth_main::202.587*14.37] 512 Entries (3.6M bases) loaded
[pthread_processor::203.649*14.37] 512 Entries (4.0M bases) processed
[meth_main::204.508*14.38] 512 Entries (3.6M bases) loaded
[pthread_processor::205.528*14.37] 512 Entries (3.6M bases) processed
[meth_main::206.348*14.38] 512 Entries (3.5M bases) loaded
[pthread_processor::207.362*14.38] 512 Entries (3.6M bases) processed
[meth_main::208.249*14.39] 512 Entries (4.0M bases) loaded
[pthread_processor::209.302*14.38] 512 Entries (3.5M bases) processed
[meth_main::210.126*14.39] 512 Entries (3.5M bases) loaded
[pthread_processor::211.378*14.39] 512 Entries (4.0M bases) processed
[meth_main::212.281*14.40] 512 Entries (4.0M bases) loaded
[pthread_processor::213.255*14.39] 512 Entries (3.5M bases) processed
[meth_main::214.063*14.40] 512 Entries (3.3M bases) loaded
[pthread_processor::215.325*14.39] 512 Entries (4.0M bases) processed
[meth_main::216.257*14.40] 512 Entries (4.0M bases) loaded
[pthread_processor::217.024*14.40] 512 Entries (3.3M bases) processed
[meth_main::217.873*14.41] 512 Entries (3.7M bases) loaded
[pthread_processor::219.495*14.38] 512 Entries (4.0M bases) processed
[meth_main::220.371*14.39] 512 Entries (3.9M bases) loaded
[pthread_processor::221.544*14.37] 512 Entries (3.7M bases) processed
[meth_main::222.452*14.38] 512 Entries (3.7M bases) loaded
[pthread_processor::223.662*14.37] 512 Entries (3.9M bases) processed
[meth_main::224.545*14.38] 512 Entries (4.0M bases) loaded
[pthread_processor::225.625*14.37] 512 Entries (3.7M bases) processed
[meth_main::226.706*14.38] 512 Entries (3.8M bases) loaded
[pthread_processor::227.585*14.39] 512 Entries (4.0M bases) processed
[meth_main::228.532*14.40] 512 Entries (4.0M bases) loaded
[pthread_processor::229.605*14.39] 512 Entries (3.8M bases) processed
[meth_main::230.542*14.40] 512 Entries (3.9M bases) loaded
[pthread_processor::232.127*14.37] 512 Entries (4.0M bases) processed
[meth_main::233.036*14.38] 512 Entries (4.1M bases) loaded
[pthread_processor::234.133*14.37] 512 Entries (3.9M bases) processed
[meth_main::235.054*14.38] 512 Entries (3.5M bases) loaded
[pthread_processor::236.306*14.38] 512 Entries (4.1M bases) processed
[meth_main::237.357*14.39] 512 Entries (3.8M bases) loaded
[pthread_processor::238.122*14.38] 512 Entries (3.5M bases) processed
[meth_main::239.177*14.39] 512 Entries (3.9M bases) loaded
[pthread_processor::239.969*14.39] 512 Entries (3.8M bases) processed
[meth_main::240.970*14.40] 512 Entries (3.6M bases) loaded
[pthread_processor::242.045*14.39] 512 Entries (3.9M bases) processed
[meth_main::243.185*14.40] 512 Entries (4.1M bases) loaded
[pthread_processor::243.956*14.39] 512 Entries (3.6M bases) processed
[meth_main::244.929*14.40] 512 Entries (3.4M bases) loaded
[pthread_processor::246.125*14.40] 512 Entries (4.1M bases) processed
[meth_main::247.010*14.41] 512 Entries (4.0M bases) loaded
[pthread_processor::247.993*14.40] 512 Entries (3.4M bases) processed
[meth_main::248.789*14.40] 512 Entries (3.4M bases) loaded
[pthread_processor::250.382*14.39] 512 Entries (4.0M bases) processed
[meth_main::251.293*14.40] 512 Entries (3.8M bases) loaded
[pthread_processor::252.096*14.40] 512 Entries (3.4M bases) processed
[meth_main::253.058*14.41] 512 Entries (4.2M bases) loaded
[pthread_processor::254.046*14.40] 512 Entries (3.8M bases) processed
[meth_main::254.944*14.41] 512 Entries (4.2M bases) loaded
[pthread_processor::256.674*14.38] 512 Entries (4.2M bases) processed
[meth_main::257.578*14.39] 512 Entries (3.9M bases) loaded
[pthread_processor::259.009*14.38] 512 Entries (4.2M bases) processed
[meth_main::259.997*14.39] 512 Entries (3.5M bases) loaded
[pthread_processor::261.087*14.38] 512 Entries (3.9M bases) processed
[meth_main::262.082*14.39] 512 Entries (3.6M bases) loaded
[pthread_processor::262.753*14.39] 512 Entries (3.5M bases) processed
[meth_main::263.790*14.40] 512 Entries (3.9M bases) loaded
[pthread_processor::264.660*14.39] 512 Entries (3.6M bases) processed
[meth_main::265.759*14.40] 512 Entries (4.0M bases) loaded
[pthread_processor::266.689*14.40] 512 Entries (3.9M bases) processed
[meth_main::267.778*14.41] 512 Entries (3.9M bases) loaded
[pthread_processor::268.813*14.40] 512 Entries (4.0M bases) processed
[meth_main::269.881*14.41] 512 Entries (3.8M bases) loaded
[pthread_processor::270.970*14.40] 512 Entries (3.9M bases) processed
[meth_main::272.113*14.41] 512 Entries (4.3M bases) loaded
[pthread_processor::273.175*14.39] 512 Entries (3.8M bases) processed
[meth_main::274.280*14.40] 512 Entries (3.6M bases) loaded
[pthread_processor::275.492*14.39] 512 Entries (4.3M bases) processed
[meth_main::276.347*14.40] 512 Entries (4.0M bases) loaded
[pthread_processor::277.460*14.39] 512 Entries (3.6M bases) processed
[meth_main::278.286*14.40] 512 Entries (3.6M bases) loaded
[pthread_processor::279.497*14.39] 512 Entries (4.0M bases) processed
[meth_main::280.428*14.40] 512 Entries (4.0M bases) loaded
[pthread_processor::281.225*14.40] 512 Entries (3.6M bases) processed
[meth_main::282.093*14.41] 512 Entries (3.7M bases) loaded
[pthread_processor::283.328*14.40] 512 Entries (4.0M bases) processed
[meth_main::284.241*14.41] 512 Entries (3.8M bases) loaded
[pthread_processor::285.181*14.41] 512 Entries (3.7M bases) processed
[meth_main::286.027*14.41] 512 Entries (3.7M bases) loaded
[pthread_processor::287.058*14.41] 512 Entries (3.8M bases) processed
[meth_main::288.054*14.42] 512 Entries (3.4M bases) loaded
[pthread_processor::289.178*14.40] 512 Entries (3.7M bases) processed
[meth_main::290.104*14.41] 512 Entries (3.6M bases) loaded
[pthread_processor::290.943*14.41] 512 Entries (3.4M bases) processed
[meth_main::292.049*14.42] 512 Entries (3.9M bases) loaded
[pthread_processor::292.777*14.41] 512 Entries (3.6M bases) processed
[meth_main::293.821*14.42] 512 Entries (3.6M bases) loaded
[pthread_processor::295.123*14.40] 512 Entries (3.9M bases) processed
[meth_main::296.174*14.41] 512 Entries (3.5M bases) loaded
[pthread_processor::297.049*14.41] 512 Entries (3.6M bases) processed
[meth_main::298.117*14.42] 512 Entries (3.7M bases) loaded
[pthread_processor::299.366*14.39] 512 Entries (3.5M bases) processed
[meth_main::300.218*14.39] 512 Entries (3.7M bases) loaded
[pthread_processor::301.437*14.38] 512 Entries (3.7M bases) processed
[meth_main::302.355*14.39] 512 Entries (3.8M bases) loaded
[pthread_processor::303.273*14.39] 512 Entries (3.7M bases) processed
[meth_main::304.329*14.40] 512 Entries (3.9M bases) loaded
[pthread_processor::305.257*14.40] 512 Entries (3.8M bases) processed
[meth_main::306.293*14.40] 512 Entries (3.9M bases) loaded
[pthread_processor::307.295*14.40] 512 Entries (3.9M bases) processed
[meth_main::308.346*14.41] 512 Entries (4.1M bases) loaded
[pthread_processor::309.533*14.39] 512 Entries (3.9M bases) processed
[meth_main::310.618*14.40] 512 Entries (4.0M bases) loaded
[pthread_processor::311.927*14.38] 512 Entries (4.1M bases) processed
[meth_main::312.786*14.39] 512 Entries (3.9M bases) loaded
[pthread_processor::314.053*14.38] 512 Entries (4.0M bases) processed
[meth_main::314.924*14.39] 512 Entries (4.0M bases) loaded
[pthread_processor::316.278*14.37] 512 Entries (3.9M bases) processed
[meth_main::317.147*14.38] 512 Entries (4.0M bases) loaded
[pthread_processor::318.382*14.37] 512 Entries (4.0M bases) processed
[meth_main::319.181*14.38] 512 Entries (3.3M bases) loaded
[pthread_processor::320.482*14.37] 512 Entries (4.0M bases) processed
[meth_main::321.452*14.38] 512 Entries (4.5M bases) loaded
[pthread_processor::322.150*14.38] 512 Entries (3.3M bases) processed
[meth_main::323.088*14.39] 512 Entries (4.4M bases) loaded
[pthread_processor::324.886*14.37] 512 Entries (4.5M bases) processed
[meth_main::325.973*14.37] 512 Entries (3.9M bases) loaded
[pthread_processor::327.477*14.35] 512 Entries (4.4M bases) processed
[meth_main::328.516*14.36] 512 Entries (3.8M bases) loaded
[pthread_processor::329.616*14.35] 512 Entries (3.9M bases) processed
[meth_main::330.688*14.36] 512 Entries (3.6M bases) loaded
[pthread_processor::331.774*14.35] 512 Entries (3.8M bases) processed
[meth_main::332.844*14.35] 512 Entries (3.7M bases) loaded
[pthread_processor::333.779*14.34] 512 Entries (3.6M bases) processed
[meth_main::334.818*14.35] 512 Entries (3.9M bases) loaded
[pthread_processor::335.639*14.35] 512 Entries (3.7M bases) processed
[meth_main::336.995*14.36] 357 Entries (2.5M bases) loaded
[pthread_processor::337.850*14.34] 512 Entries (3.9M bases) processed
[pthread_processor::339.201*14.34] 357 Entries (2.5M bases) processed
[meth_main] total entries: 83813, qc fail: 0, could not calibrate: 2, no alignment: 83811, bad fast5: 0
[meth_main] total bases: 626.1 Mbases
[meth_main] Data loading time: 157.648 sec
[meth_main]     - bam load time: 8.914 sec
[meth_main]     - fasta load time: 61.838 sec
[meth_main]     - fast5 load time: 86.597 sec
[meth_main]         - fast5 open time: 14.969 sec
[meth_main]         - fast5 read time: 68.767 sec
[meth_main] Data processing time: 337.600 sec
[meth_main] Data output time: 0.001 sec
[main] Version: 1.1
[main] CMD: f5c call-methylation -r /data/MAB/2748_NP_methylation/fast5_pass/single_barcode12.guppy2/pass/fast5s.al.guppy.fastq -b /data/MAB/2748_NP_methylation/fastq_pass/barcode12/assembly/assembly.sorted.bam -g /data/MAB/2748_NP_methylation/fastq_pass/barcode12/assembly/assembly.fasta -t 16
[main] Real time: 339.258 sec; CPU time: 4863.068 sec; Peak RAM: 2.700 GB

avoid skip when using f5c eventalign

Hi f5C team! I wonder if there are any settings to avoid event skip when using f5c eventalign? I found not all bases in reference would have event in f5c eventalign results.

ERROR in f5c eventalign

Hi there,

When I ran the following command,

f5c eventalign -r pass.fq.gz -b NATIVE_UCSC.bam -g transcriptome.fa --signal-index --scale-events -t 20 --rna -o NATIVE_UCSC_xpore.tsv

I've encountered some errors and the program abort.

Here is the log

[init_core::INFO] builtin RNA nucleotide model loaded
[E::fai_retrieve] Failed to retrieve block: unexpected end of file
[E::fai_retrieve] Failed to retrieve block: unexpected end of file
[E::fai_retrieve] Failed to retrieve block: unexpected end of file
[E::fai_retrieve] Failed to retrieve block: unexpected end of file 
...
[E::fai_retrieve] Failed to retrieve block: unexpected end of file
[E::fai_retrieve] Failed to retrieve block: unexpected end of file
[meth_main::112.482*0.10] 512 Entries (0.9M bases) loaded
f5c: src/eventalign.c:1110: std::string disambiguate(const string&): Assertion `isValid(out[i])' failed.
f5c: src/eventalign.c:1110: std::string disambiguate(const string&): Assertion `isValid(out[i])' failed.
[1]    60364 abort      f5c eventalign -r pass.fq.gz -b  -g    -t 20

Thanks in advance,

Logan

Matching format to nanopolish

Hi and thank you for such a useful tool.
I was wondering if you would be able to make the headings of the outputs match:

f5c headings in tsv:
chromosome start end read_name log_lik_ratio log_lik_methylated log_lik_unmethylated num_calling_strands num_cpgs sequence

Nanopolish headings in tsv:
chromosome strand start end read_name log_lik_ratio log_lik_methylated log_lik_unmethylated num_calling_strands num_motifs sequence

nanoploish freq table:
chromosome start end num_motifs_in_group called_sites called_sites_methylated methylated_frequencygroup_sequence

f5c freq table:
chromosome start end num_cpgs_in_group called_sites called_sites_methylated methylated_frequencygroup_sequence

It would be great if these were interchangeable.

Thanks again for the great tool.

Cheers.

Compiling on a Macbook Pro M1 fails

Trying to compile f5c, getting the following error during compilation:

g++ -g -Wall -O2 -std=c++11 build/main.o build/meth_main.o build/f5c.o build/f5cio.o build/events.o build/nanopolish_read_db.o build/index.o build/nanopolish_fast5_io.o build/model.o build/align.o build/meth.o build/hmm.o build/freq.o build/eventalign.o build/freq_merge.o build/profiles.o slow5lib/lib/libslow5.a -L/opt/homebrew/lib/ htslib/libhts.a   -lhdf5 -lz  -lpthread -lz -rdynamic  -o f5c
Undefined symbols for architecture arm64:
  "_sam_hdr_destroy", referenced from:
      free_core(core_t*, opt_t) in f5c.o
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [f5c] Error 1

I'm compiling on Apple M1 Max silicon, OS Monterey 12.3.1, using these commands:

git clone https://github.com/hasindu2008/f5c/ && cd f5c
./scripts/install-hts.sh
autoreconf --install
 ./configure LDFLAGS=-L/opt/homebrew/lib/ CPPFLAGS=-I/opt/homebrew/include/
make

I also tried with make GCC=/opt/homebrew/bin/gcc-11 CXX=/opt/homebrew/bin/g++-11 which gave the same results

call-methylation crashes with stack smashing detected

I recently got f5c v0.8 installed and configured with CUDA. However, trying to run call-methylation results in crashing as follows:

~/f5c-v0.8/f5c call-methylation -t 8 -r sample.fastq -g sample.fasta -b Sorted-sample.bam > f5c_result.tsv
[meth_main::INFO] Default methylation tsv output format is changed from f5c v0.7 onwards to match latest nanopolish output. Set --meth-out-version=1 to fall back to the old format.
[init_cuda] Running on NVIDIA GeForce GTX 1060 6GB (device id 0)
[cuda_freemem] 5.36 GB free of total 5.93 GB GPU memory
[init_cuda] Max GPU capacity 3.2M bases
[init_cuda::INFO] Your GPU can accommodate upto 3.2M bases. You may increase -B option (currently 2.0M) for better performance!
*** stack smashing detected ***: terminated
Aborted (core dumped)

Increasing -B does not change the error:

~/f5c-v0.8/f5c call-methylation -t 8 -r sample.fastq -g sample.fasta -b Sorted-sample.bam -B 3.2M -o f5c_result.tsv
[meth_main::INFO] Default methylation tsv output format is changed from f5c v0.7 onwards to match latest nanopolish output. Set --meth-out-version=1 to fall back to the old format.
[init_cuda] Running on NVIDIA GeForce GTX 1060 6GB (device id 0)
[cuda_freemem] 5.37 GB free of total 5.93 GB GPU memory
[init_cuda] Max GPU capacity 3.2M bases
*** stack smashing detected ***: terminated
Aborted (core dumped)

PromethION calls

Dear @hasindu2008 ,

I am running f5c for a very large PromethION dataset. I am using the GPU version. It seems to be working alright on my workstation but I have realized I need faster and more disks to read from because most of the CPU and GPU is just waiting for new data to call.

Before I pursue this, I wonder if you can provide some feedback on calling methylation from PromethION data specifically. Are there particulars that I need to be aware of? Any settings or models or other parameters to use for this type of data vs minION?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.