重编译源码解决bedops报错TOKENS_MAX_LENGTH问题

当我们使用bedops的convert2bed功能时,可能会遇到以下问题:

Error: Could not find newline in intermediate buffer; check input [12756 | 25678 | 45674]
Please check that your input contains Unix newlines (cat -A) or increase TOKENS_MAX_LENGTH in BEDOPS.Constants.hpp and recompile BEDOPS.

这可能是因为bedtools默认的缓冲区大小较低,而我们源文件染色体长度太长,塞不进缓冲池里,所以报错。(当然首先需要确定源文件的行结尾是不是用的Unix换行符$,这个可以用cat -A来查看)

可以通过改一下bedops的源码中TOKENS_MAX_LENGTH的定义来解决这个问题:

cd .../bedops-2.4.39/
make clean

cd .../bedops-2.4.39/applications/bed/conversion/src
diff OLD_convert2bed.h convert2bed.h #修改convert2bed.h的内容
85c85
< #define C2B_THREAD_IO_BUFFER_SIZE TOKENS_MAX_LENGTH
---
> #define C2B_THREAD_IO_BUFFER_SIZE (100*TOKENS_MAX_LENGTH)
#将BUFFER_SIZE调至默认的100倍

cd .../bedops-2.4.39/interfaces/general-headers/suite
diff OLD_BEDOPS.Constants.hpp BEDOPS.Constants.hpp #修改BEDOPS.Constants.hpp的内容
127c127
<   constexpr LineLengthType  TOKENS_MAX_LENGTH = INT_TOKENS_MAX_LENGTH;
---
>   constexpr LineLengthType  TOKENS_MAX_LENGTH = (100*INT_TOKENS_MAX_LENGTH);
152c152
< #define TOKENS_MAX_LENGTH INT_TOKENS_MAX_LENGTH
---
> #define TOKENS_MAX_LENGTH (100*INT_TOKENS_MAX_LENGTH)
#均调至默认的100倍

cd .../bedops-2.4.39/
make magarow
make install_magarow

修改完convert2bed.h和BEDOPS.Constants.hpp这两个文件后用make magarow、make install_magarow这两个命令重新编译即可。若仍然报同样的错误,可以尝试把100倍改成200倍或更高。

参考:https://github.com/bedops/bedops/issues/208

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值