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

当使用bedops的convert2bed功能时,可能会遇到因输入缓冲区大小不足导致的错误。该问题源于源文件染色体长度过长,超出默认缓冲区设置。为解决此问题,需要修改BEDOPS源码中TOKENS_MAX_LENGTH的定义,将其增大至默认值的100倍,并重新编译。如果问题依然存在,可尝试进一步增加缓冲区大小。参考链接提供了详细的修改和编译步骤。
摘要由CSDN通过智能技术生成

当我们使用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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值