当我们使用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倍或更高。