public void GetClippedCigar()
        {
            // from middle
            Assert.Equal("3M", CigarExtensions.GetClippedCigar(new CigarAlignment("3S6M"), 3, 6).ToString());
            Assert.Equal("3M", CigarExtensions.GetClippedCigar(new CigarAlignment("3S3D6M"), 3, 6, false).ToString());
            Assert.Equal("3M", CigarExtensions.GetClippedCigar(new CigarAlignment("3S3M3D4M"), 3, 6, false).ToString());
            Assert.Equal("3M3D", CigarExtensions.GetClippedCigar(new CigarAlignment("3S3M3D4M"), 3, 6).ToString());
            Assert.Equal("3D3M", CigarExtensions.GetClippedCigar(new CigarAlignment("3S3D4M"), 3, 6).ToString());
            Assert.Equal("3D3M", CigarExtensions.GetClippedCigar(new CigarAlignment("1S1D2S3D4M"), 3, 6).ToString());

            // readcycles < 0
            Assert.Equal("", CigarExtensions.GetClippedCigar(new CigarAlignment("5M3D7M"), 0, 0).ToString());
            Assert.Equal("", CigarExtensions.GetClippedCigar(new CigarAlignment("5M3D7M"), 0, 0).ToString());
            Assert.Equal("", CigarExtensions.GetClippedCigar(new CigarAlignment("5M3D7M"), -1, -1).ToString());

            //readcycles > 0
            Assert.Equal("1M", CigarExtensions.GetClippedCigar(new CigarAlignment("5M3D7M"), 0, 1).ToString());
            Assert.Equal("5M3D2M", CigarExtensions.GetClippedCigar(new CigarAlignment("5M3D7M"), 0, 7).ToString());
            Assert.Equal("5M3D", CigarExtensions.GetClippedCigar(new CigarAlignment("5M3D7M"), 0, 5).ToString());

            // skip end dels if specified (but not internal dels)
            Assert.Equal("5M3D2M", CigarExtensions.GetClippedCigar(new CigarAlignment("5M3D7M"), 0, 7, false).ToString());
            Assert.Equal("5M", CigarExtensions.GetClippedCigar(new CigarAlignment("5M3D7M"), 0, 5, false).ToString());

            //softclips
            Assert.Equal("2M1S", CigarExtensions.GetClippedCigar(new CigarAlignment("2M1S"), 0, 3).ToString());
            Assert.Equal("2M", CigarExtensions.GetClippedCigar(new CigarAlignment("2M1S"), 0, 2).ToString());
        }
        public void HasOperationAtOpIndex()
        {
            var alignment = new CigarAlignment("5M3D4M7I2S8M");

            Assert.True(alignment.HasOperationAtOpIndex(3, 'I'));
            Assert.False(alignment.HasOperationAtOpIndex(5, 'D'));
            Assert.False(CigarExtensions.HasOperationAtOpIndex(null, 3, 'D'));
            Assert.False(CigarExtensions.HasOperationAtOpIndex(null, 3, 'D', true));
            Assert.True(alignment.HasOperationAtOpIndex(1, 'S', true));
            Assert.False(alignment.HasOperationAtOpIndex(2, 'D', true));
            Assert.False(alignment.HasOperationAtOpIndex(-1, 'D', true));
            Assert.False(alignment.HasOperationAtOpIndex(8, 'D', true));
        }
 public void SetOpsForRead(ReadNumber num, List <StitchableItem> ops)
 {
     if (num == ReadNumber.Read1)
     {
         R1Ops              = ops;
         R1OpsCount         = ops.Count;
         R1HasReferenceSpan = ops.Any(x => CigarExtensions.IsReferenceSpan(x.CigarOp));
     }
     else
     {
         R2Ops              = ops;
         R2OpsCount         = ops.Count;
         R2HasReferenceSpan = ops.Any(x => CigarExtensions.IsReferenceSpan(x.CigarOp));
     }
 }
 public void AddOpsForRead(ReadNumber num, List <StitchableItem> ops)
 {
     if (num == ReadNumber.Read1)
     {
         R1OpsCount += ops.Count;
         R1Ops.AddRange(ops);
         if (!R1HasReferenceSpan)
         {
             R1HasReferenceSpan = ops.Any(x => CigarExtensions.IsReferenceSpan(x.CigarOp));
         }
     }
     else
     {
         R2OpsCount += ops.Count;
         R2Ops.AddRange(ops);
         if (!R2HasReferenceSpan)
         {
             R2HasReferenceSpan = ops.Any(x => CigarExtensions.IsReferenceSpan(x.CigarOp));
         }
     }
 }
 public void AddOpsForRead(ReadNumber num, StitchableItem ops)
 {
     if (num == ReadNumber.Read1)
     {
         R1OpsCount++;
         R1Ops.Add(ops);
         if (CigarExtensions.IsReferenceSpan(ops.CigarOp))
         {
             R1HasReferenceSpan = true;
         }
     }
     else
     {
         R2OpsCount++;
         R2Ops.Add(ops);
         if (CigarExtensions.IsReferenceSpan(ops.CigarOp))
         {
             R2HasReferenceSpan = true;
         }
     }
 }
        public void GetTrimmed()
        {
            //readcycles < 0
            Assert.Equal("", CigarExtensions.GetTrimmed(new CigarAlignment("5M3D7M"), 0).ToString());
            Assert.Equal("", CigarExtensions.GetTrimmed(new CigarAlignment("5M3D7M"), 0, true).ToString());
            Assert.Equal("", CigarExtensions.GetTrimmed(new CigarAlignment("5M3D7M"), -1, true).ToString());

            //readcycles > 0
            Assert.Equal("1M", CigarExtensions.GetTrimmed(new CigarAlignment("5M3D7M"), 1).ToString());
            Assert.Equal("1M", CigarExtensions.GetTrimmed(new CigarAlignment("5M3D7M"), 1, true).ToString());
            Assert.Equal("5M3D2M", CigarExtensions.GetTrimmed(new CigarAlignment("5M3D7M"), 7).ToString());
            Assert.Equal("3D7M", CigarExtensions.GetTrimmed(new CigarAlignment("5M3D7M"), 7, true).ToString());
            Assert.Equal("5M3D", CigarExtensions.GetTrimmed(new CigarAlignment("5M3D7M"), 5).ToString());

            // skip end dels if specified (but not internal dels)
            Assert.Equal("7M", CigarExtensions.GetTrimmed(new CigarAlignment("5M3D7M"), 7, true, false).ToString());
            Assert.Equal("7M", CigarExtensions.GetTrimmed(new CigarAlignment("4M1D1M3D7M"), 7, true, false).ToString());
            Assert.Equal("4M1D3M", CigarExtensions.GetTrimmed(new CigarAlignment("5M3D4M1D3M"), 7, true, false).ToString());
            Assert.Equal("5M3D2M", CigarExtensions.GetTrimmed(new CigarAlignment("5M3D7M"), 7, false, false).ToString());
            Assert.Equal("5M", CigarExtensions.GetTrimmed(new CigarAlignment("5M3D7M"), 5, false, false).ToString());
        }