Пример #1
0
    public void TestWrite()
    {
      var file = "../../../data/1_17716_G.wsm";
      var item = new PileupItemFile().ReadFromFile(file);

      var filename = "../../../data/1_17716_G.wsm.tmp";
      new PileupItemFile().WriteToFile(filename, item);

      FileAssert.AreEqual(file, filename, "check file " + Path.GetFullPath(filename) + ", it should be identical to file " + Path.GetFullPath(file));
      File.Delete(filename);
    }
    public void Test()
    {
      var item = new PileupItemFile().ReadFromFile("../../../data/1_17716_G.wsm");

      Assert.AreEqual(8.20E-05, item.InitializeTable().CalculateTwoTailPValue(), 0.0000001);

      var cloneItem = item.CloneByFilter(m => m.Score >= 20);
      var res = cloneItem.InitializeTable();
      Assert.AreEqual(0.000228, res.CalculateTwoTailPValue(), 0.000001);
      Assert.AreEqual("G", res.SucceedName);
      Assert.AreEqual("A", res.FailedName);
      Assert.AreEqual("S1", res.Sample1.Name);
      Assert.AreEqual("S2", res.Sample2.Name);
    }
Пример #3
0
 public void TestRead()
 {
   var file = "../../../data/1_17716_G.wsm";
   var item = new PileupItemFile().ReadFromFile(file);
   Assert.AreEqual("1", item.SequenceIdentifier);
   Assert.AreEqual(17716, item.Position);
   Assert.AreEqual('G', item.Nucleotide);
   Assert.AreEqual(2, item.Samples.Count);
   Assert.AreEqual(187, item.Samples[0].Count);
   Assert.AreEqual(103, item.Samples[1].Count);
   Assert.AreEqual("S1", item.Samples[0].SampleName);
   Assert.AreEqual("G", item.Samples[0][0].Event);
   Assert.AreEqual(20, item.Samples[0][0].Score);
   Assert.AreEqual(StrandType.FORWARD, item.Samples[0][0].Strand);
   Assert.AreEqual(PositionType.END, item.Samples[0][0].Position);
   Assert.AreEqual("25", item.Samples[0][0].PositionInRead);
 }
Пример #4
0
    public MpileupFisherResult Parse(string line, bool writeCandidateFile = true)
    {
      MpileupFisherResult result = new MpileupFisherResult();

      var item = _parser.GetValue(line);
      item.Samples[0].SampleName = "NORMAL";
      item.Samples[1].SampleName = "TUMOR";
      var events = item.GetPairedEvent();
      var fisherresult = item.InitializeTable(events);

      result.Item = item;
      result.Group = fisherresult;

      if (!_rdFilter.Accept(item))
      {
        result.FailedReason = _rdFilter.RejectReason;
        _result.MinimumReadDepthFailed++;
        return result;
      }

      //If the bases from all samples are same, ignore the entry.
      if (item.OnlyOneEvent())
      {
        result.FailedReason = "Only one allele detected";
        _result.OneEventFailed++;
        return result;
      }

      if (fisherresult.Sample1.FailedPercentage > fisherresult.Sample2.FailedPercentage)
      {
        result.FailedReason = "MAF decreased in tumor";
        _result.MinorAlleleDecreasedFailed++;
        return result;
      }

      if (!_normalTest.Accept(fisherresult))
      {
        result.FailedReason = _normalTest.RejectReason;
        _result.MinorAlleleFailedInNormalSample++;
        return result;
      }

      if (!_tumorTest.Accept(fisherresult))
      {
        result.FailedReason = _tumorTest.RejectReason;
        _result.MinorAlleleFailedInTumorSample++;
        return result;
      }

      //group fisher exact test
      fisherresult.CalculateTwoTailPValue();
      if (fisherresult.PValue > _options.FisherPvalue)
      {
        result.FailedReason = string.Format("Fisher pvalue > {0}", _options.FisherPvalue);
        _result.GroupFisherFailed++;
        return result;
      }

      if (writeCandidateFile)
      {
        //get major and second alleles
        var bases = new HashSet<string>(new[] { events.MajorEvent, events.MinorEvent });

        //save to file
        var piFile = new PileupItemFile(bases);
        result.CandidateFile = string.Format("{0}/{1}.wsm", _options.CandidatesDirectory, MpileupFisherResultFileFormat.GetString(result, '_', false));
        piFile.WriteToFile(result.CandidateFile, item);
      }

      Progress.SetMessage("{0}\t{1}\t{2}", item.SequenceIdentifier, item.Position, fisherresult);

      return result;
    }
        public MpileupFisherResult Parse(string line, bool writeCandidateFile = true)
        {
            MpileupFisherResult result = new MpileupFisherResult();

            var item = _parser.GetValue(line);

            item.Samples[0].SampleName = "NORMAL";
            item.Samples[1].SampleName = "TUMOR";
            var events       = item.GetPairedEvent();
            var fisherresult = item.InitializeTable(events);

            result.Item  = item;
            result.Group = fisherresult;

            if (!_rdFilter.Accept(item))
            {
                result.FailedReason = _rdFilter.RejectReason;
                _result.MinimumReadDepthFailed++;
                return(result);
            }

            //If the bases from all samples are same, ignore the entry.
            if (item.OnlyOneEvent())
            {
                result.FailedReason = "Only one allele detected";
                _result.OneEventFailed++;
                return(result);
            }

            if (fisherresult.Sample1.FailedPercentage > fisherresult.Sample2.FailedPercentage)
            {
                result.FailedReason = "MAF decreased in tumor";
                _result.MinorAlleleDecreasedFailed++;
                return(result);
            }

            if (!_normalTest.Accept(fisherresult))
            {
                result.FailedReason = _normalTest.RejectReason;
                _result.MinorAlleleFailedInNormalSample++;
                return(result);
            }

            if (!_tumorTest.Accept(fisherresult))
            {
                result.FailedReason = _tumorTest.RejectReason;
                _result.MinorAlleleFailedInTumorSample++;
                return(result);
            }

            //group fisher exact test
            fisherresult.CalculateTwoTailPValue();
            if (fisherresult.PValue > _options.FisherPvalue)
            {
                result.FailedReason = string.Format("Fisher pvalue > {0}", _options.FisherPvalue);
                _result.GroupFisherFailed++;
                return(result);
            }

            if (writeCandidateFile)
            {
                //get major and second alleles
                var bases = new HashSet <string>(new[] { events.MajorEvent, events.MinorEvent });

                //save to file
                var piFile = new PileupItemFile(bases);
                result.CandidateFile = string.Format("{0}/{1}.wsm", _options.CandidatesDirectory, MpileupFisherResultFileFormat.GetString(result, '_', false));
                piFile.WriteToFile(result.CandidateFile, item);
            }

            Progress.SetMessage("{0}\t{1}\t{2}", item.SequenceIdentifier, item.Position, fisherresult);

            return(result);
        }
        public MpileupFisherResult Parse(string line, bool writeCandidateFile = true)
        {
            var parts = line.Split('\t');

            if (bedMap.Count > 0)
            {
                var sp = _parser.GetSequenceIdentifierAndPosition(parts);
                if (IsIgnored(sp.SequenceIdentifier, sp.Position))
                {
                    _result.Ignored++;
                    return(null);
                }
            }

            //for debug
            //var sptemp = _parser.GetSequenceIdentifierAndPosition(parts);
            //if (sptemp.SequenceIdentifier == "2" && sptemp.Position == 89161431)
            //{
            //  var debugFile = string.Format("{0}/debug.txt", _options.CandidatesDirectory);
            //  File.WriteAllLines(debugFile, new[] { line });
            //  Console.WriteLine("Catched the line");
            //  System.Windows.Forms.Application.Exit();
            //}

            //didn't consider minimum score requirement
            if (!_parser.HasEnoughReads(parts))
            {
                _result.MinimumReadDepthFailed++;
                return(null);
            }

            //didn't consider minimum score requirement
            if (!_parser.HasMinorAllele(parts))
            {
                _result.OneEventFailed++;
                return(null);
            }

            //parsing full result considering score limitation
            var item = _parser.GetValue(parts);

            if (item == null)
            {
                _result.MinimumReadDepthFailed++;
                return(null);
            }

            //If the bases from all samples are same, ignore the entry.
            if (item.OnlyOneEvent())
            {
                _result.OneEventFailed++;
                return(null);
            }

            item.Samples[0].SampleName = "NORMAL";
            item.Samples[1].SampleName = "TUMOR";

            var events = item.GetPairedEvent();

            var fisherresult = item.InitializeTable(events);

            if (fisherresult.Sample1.FailedPercentage > fisherresult.Sample2.FailedPercentage)
            {
                _result.MinorAlleleDecreasedFailed++;
                return(null);
            }

            if (!_tumorTest.Accept(fisherresult))
            {
                _result.MinorAlleleFailedInTumorSample++;
                return(null);
            }

            if (!_normalTest.Accept(fisherresult))
            {
                _result.MinorAlleleFailedInNormalSample++;
                return(null);
            }

            //group fisher exact test
            fisherresult.CalculateTwoTailPValue();
            if (_options.UseZeroMinorAlleleStrategy && fisherresult.Sample1.Failed == 0)
            {
                //Console.WriteLine("UseZeroMinorAlleleStrategy : {0}", fisherresult);
                if (fisherresult.PValue > _options.ZeroMinorAlleleStrategyFisherPvalue)
                {
                    _result.GroupFisherFailed++;
                    return(null);
                }
            }
            else if (fisherresult.PValue > _options.FisherPvalue)
            {
                _result.GroupFisherFailed++;
                return(null);
            }

            //passed all criteria
            _result.CandidateCount++;

            var result = new MpileupFisherResult
            {
                Item  = item,
                Group = fisherresult,
            };

            //save to file
            if (writeCandidateFile)
            {
                //get major and second alleles
                var bases  = new HashSet <string>(new[] { events.MajorEvent, events.MinorEvent });
                var piFile = new PileupItemFile(bases);
                result.CandidateFile = string.Format("{0}/{1}.wsm", _options.CandidatesDirectory, MpileupFisherResultFileFormat.GetString(result, '_', false));
                piFile.WriteToFile(result.CandidateFile, item);
            }

            Progress.SetMessage("{0}\t{1}\t{2}", item.SequenceIdentifier, item.Position, fisherresult);

            return(result);
        }