<p>我怀疑没有一个工具来解决这个问题是因为没有通用的解决方案,除了使用不显示这个问题的软件再次执行校准之外。在您的示例中,查询序列与引用完全一致,因此在这种情况下,雪茄字符串不是很有趣(只是一个以整个查询长度为前缀的<code>M</code>atch操作)。在这种情况下,修复只需要将<code>101M</code>更改为<code>98M</code>。在</p>
<p>但是,对于更复杂的雪茄字符串(例如,包含<code>I</code>n分区、<code>D</code>元素或任何其他操作的字符串),您将无法知道雪茄字符串的哪个部分太长。如果您从雪茄串的错误部分减去,您将得到一个未对齐的读数,这对您的下游分析可能比只保留整个读数更糟糕。在</p>
<p>这就是说,如果它碰巧是一个琐碎的正确处理(也许你的破坏的对齐过程总是给第一个或最后一个雪茄操作添加额外的基),那么你需要知道的是根据雪茄字符串计算查询长度的正确方法,这样你就知道从中减去什么。在</p>
<p><code>samtools</code>使用<code>htslib</code>函数<a href="https://github.com/samtools/htslib/blob/19c189438f852e6e62dbda73f854d465cebb3d9f/sam.c#L325-L332" rel="nofollow">bam_cigar2qlen</a>计算这个值。在</p>
<p><code>bam_cigar2qlen</code>调用的其他函数在<a href="https://github.com/samtools/htslib/blob/bf753361dab9b1640cf64f7886dbfe35357a43c5/htslib/sam.h#L76-L105" rel="nofollow">sam.h</a>中定义,包括一个有用的注释,该注释显示了操作使用查询序列和引用序列的真值表。在</p>
<p>简而言之,要像samtools(实际上是htslib)那样计算雪茄字符串的查询长度,您应该为雪茄操作<code>M</code>、<code>I</code>、<code>S</code>、<code>=</code>、或{{<cd13>}添加给定长度,并忽略任何其他操作的雪茄操作长度。在</p>
<p>python-cigar模块的当前版本似乎正在使用<a href="https://github.com/brentp/cigar/blob/master/cigar.py#L68" rel="nofollow">same set of operations</a>,计算查询长度的算法(这是<code>len(Cigar(cigar))</code>将返回的内容)在我看来是正确的。是什么让你认为它没有给出正确的结果?在</p>
<p>看起来您应该能够使用雪茄python模块使用<code>mask_left</code>或{<cd16>}方法和<code>mask="H"</code>从左端或右端进行硬剪辑。在</p>