public Bipartition(InputProcessing input)
        {
            this.inputData       = input;
            this.Set_Of_Quartets = inputData.Get_SetOfQuartets();
            this.Set_Of_Taxa     = inputData.Get_SetOfTaxa();
            SetDistinctQuartets();
            SetDistinctDuplicateQuartets();
            SetDistinctQuartetsAfterAddingDuplicateQuartets();
            SetSortedDistinctQuartets();
            InitialBipartition(0);
            this.PartitionSets[0]._ListQuatrets = Set_Of_Sorted_Distinct_Quartets;
            PartitionSet p = this.PartitionSets[0];

            SetSortedDistinctQuartetsWithPartitionStatus(ref p, this.PartitionSets[0]);
            OutputProcessing.WriteInititalBiPartion(p, this.Set_Of_Taxa);
            GenerateGainTable(p);
        }
Пример #2
0
        public void Divide(PartitionSet pPartitionSet, string DummyTaxaCharacter, int Level, List <string> _VALID_TAXA_LIST)
        {
            string DummyTaxa = DummyTaxaCharacter + Level.ToString();
            Taxa   TaxaDummy = new Taxa();

            TaxaDummy._Taxa_Value = DummyTaxa;


            //Adding Dummy Taxa to the Set PA and PB
            FinalPartionPair        PartionPair;
            List <FinalPartionPair> ListPartionPair = new List <FinalPartionPair>();

            foreach (Partition p in pPartitionSet.PartitionList)
            {
                PartionPair = new FinalPartionPair();
                p.TaxaList.Add(TaxaDummy);
                PartionPair       = SubDivideQuatret(pPartitionSet._ListQuatrets, p, DummyTaxa);
                PartionPair._Root = p.TaxaList;

                ListPartionPair.Add(PartionPair);
            }



            foreach (FinalPartionPair pair in ListPartionPair)
            {
                if (CountValidTaxa(pair._P.TaxaList, _VALID_TAXA_LIST) >= 1 && (pair._Q == null))
                {
                    _ListFinalPartionPair.Add(pair);
                }
                else if (CountValidTaxa(pair._P.TaxaList, _VALID_TAXA_LIST) >= 3 && (pair._Q != null))
                {
                    InputProcessing input  = new InputProcessing(pair._Q, pair._P.TaxaList);
                    Bipartition     bpA    = new Bipartition(input);
                    GainTable       GTable = bpA.getFinalGainTable();
                    Divide(GTable.PartitionSet, DummyTaxaCharacter, Level + 1, _VALID_TAXA_LIST);
                }
                else if (CountValidTaxa(pair._P.TaxaList, _VALID_TAXA_LIST) < 3 && (pair._Q != null))
                {
                    _ListFinalPartionPair.Add(pair);
                }
            }
        }
Пример #3
0
        public void CalculateConsistancy()
        {
            if (File.Exists(Constant.OutputFilePath))
            {
                File.Delete(Constant.OutputFilePath);
            }
            DivideAndConquer divideAndConquer = new DivideAndConquer();
            InputProcessing  input            = new InputProcessing();
            Bipartition      bp        = new Bipartition(input);
            GainTable        GainTable = new GainTable();

            GainTable = bp.getFinalGainTable();


            int loop = 0;
            ConsistencyDataModel    data = new ConsistencyDataModel();
            DepthOneTreeNode        node;
            List <DepthOneTreeNode> ListDepthOneTreeNode = new List <DepthOneTreeNode>();


            ConsistencyDataModel    dataRandom = new ConsistencyDataModel();
            DepthOneTreeNode        nodeRandom;
            List <DepthOneTreeNode> ListDepthOneTreeNodeRandom = new List <DepthOneTreeNode>();


            if (GainTable != null)
            {
                SetFinalGainTableAfterGainCalculation(GainTable);

                PartitionSet setOfMaxGain = GainTable.PartitionSet;


                SetALLQuatretInput(setOfMaxGain._ListQuatrets);

                var vDiffered = setOfMaxGain._ListQuatrets.FindAll(x => x._PartitionStatus == PartitionStatus.Differed);
                if (vDiffered != null)
                {
                    SetDifferedQuatretInput(vDiffered.ToList());
                }

                var vIsolated = setOfMaxGain._ListQuatrets.FindAll(x => x._PartitionStatus == PartitionStatus.Isolated);
                if (vIsolated != null)
                {
                    SetIsolatedQuatretInput(vIsolated.ToList());
                }

                var vViolated = setOfMaxGain._ListQuatrets.FindAll(x => x._PartitionStatus == PartitionStatus.Viotated);
                if (vViolated != null)
                {
                    SetViolatedQuatretInput(vViolated.ToList());
                }

                OutputProcessing.PrintGainSummary(GainTable);
                OutputProcessing.WriteCountInformationFromMaxGainTable(GainTable);


                _VALID_TAXA_LIST = input.Get_SetOfTaxa();
                divideAndConquer.Divide(GainTable.PartitionSet, DummyTaxaCharacter, 1, _VALID_TAXA_LIST);

                List <FinalPartionPair> ll = divideAndConquer.getFinalPartionPair();
                OutputProcessing.PrintFinalTableOfDivideAndConquerApproach(ll);

                loop = 0;
                foreach (FinalPartionPair pair in ll)
                {
                    ListDepthOneTreeNode = new List <DepthOneTreeNode>();
                    data = new ConsistencyDataModel();
                    data._Differed_Quatret = this._DifferedQuatretListAfterGain;
                    data._Isolated_Quatret = this._IsolatedQuatretListAfterGain;
                    data._Violated_Quatret = this._ViolatedQuatretListAfterGain;


                    foreach (Taxa tx in pair._P.TaxaList)
                    {
                        node             = new DepthOneTreeNode();
                        node._Position   = loop;
                        node._Taxa_Value = tx._Taxa_Value;
                        ListDepthOneTreeNode.Add(node);
                    }
                    data._DepthOneChain = ListDepthOneTreeNode;
                    _ListConsistencyDataModel.Add(data);
                    loop++;
                }



                #region finding Consistancy Status

                ConsistencyDataModel dmodel = _ListConsistencyDataModel[0];
                string OutputHeader         = "======================================================Consistancy Calculation======================================================";

                #region ISOLATED
                dmodel._Isolated_Quatret = GetConsistancyStatusOfQuatret(_ListConsistencyDataModel, dmodel._Isolated_Quatret);

                var vIsoConsistent = dmodel._Isolated_Quatret.FindAll(x => x._ConsistancyStatus == ConsistencyStatus.Consistent);
                SetIsolatedQuatretConsistentAfterDevideAndConquer(vIsoConsistent);

                var vIsoInConsistent = dmodel._Isolated_Quatret.FindAll(x => x._ConsistancyStatus == ConsistencyStatus.InConsistent);
                SetIsolatedQuatretInConsistentAfterDevideAndConquer(vIsoInConsistent);

                OutputProcessing.WriteQuatretConsistancy(dmodel._Isolated_Quatret, PartitionStatus.Isolated, OutputHeader);
                #endregion

                #region Violated Quatret
                dmodel._Violated_Quatret = GetConsistancyStatusOfQuatret(_ListConsistencyDataModel, dmodel._Violated_Quatret);

                var vViolatedConsistent = dmodel._Violated_Quatret.FindAll(x => x._ConsistancyStatus == ConsistencyStatus.Consistent);
                SetViolatedQuatretConsistentAfterDevideAndConquer(vViolatedConsistent);

                var vViolatedInConsistent = dmodel._Violated_Quatret.FindAll(x => x._ConsistancyStatus == ConsistencyStatus.InConsistent);
                SetViolatedQuatretInConsistentAfterDevideAndConquer(vViolatedInConsistent);

                OutputProcessing.WriteQuatretConsistancy(dmodel._Violated_Quatret, PartitionStatus.Viotated, string.Empty);
                #endregion

                #region Differed  Quatret
                dmodel._Differed_Quatret = GetConsistancyStatusOfQuatret(_ListConsistencyDataModel, dmodel._Differed_Quatret);

                var vDiffConsistent = dmodel._Differed_Quatret.FindAll(x => x._ConsistancyStatus == ConsistencyStatus.Consistent);
                SetDifferedQuatretConsistentAfterDevideAndConquer(vDiffConsistent);

                var vDiffInConsistent = dmodel._Differed_Quatret.FindAll(x => x._ConsistancyStatus == ConsistencyStatus.InConsistent);
                SetDifferedQuatretInConsistentAfterDevideAndConquer(vDiffInConsistent);

                OutputProcessing.WriteQuatretConsistancy(dmodel._Differed_Quatret, PartitionStatus.Differed, string.Empty);
                #endregion


                #endregion


                #region Random Technique


                var listOfTaxaRandom = input.getSetOfTaxa();
                divideAndConquer.generateDepthOneTreeRandomly(listOfTaxaRandom, DummyTaxaCharacter, 1, _VALID_TAXA_LIST, this._ALLQuatretListAfterGain);

                List <FinalPartionPair> llRandom = divideAndConquer.getFinalPartionPairRandom();
                //OutputProcessing.PrintDepthOneTreeRandom(llRandom, "Random Depth One Tree");
                loop = 0;
                foreach (FinalPartionPair pair in llRandom)
                {
                    ListDepthOneTreeNodeRandom = new List <DepthOneTreeNode>();
                    dataRandom = new ConsistencyDataModel();
                    dataRandom._Differed_Quatret = this._DifferedQuatretListAfterGain;
                    dataRandom._Isolated_Quatret = this._IsolatedQuatretListAfterGain;
                    dataRandom._Violated_Quatret = this._ViolatedQuatretListAfterGain;
                    dataRandom._ALL_Quatret      = this._ALLQuatretListAfterGain;

                    foreach (Taxa tx in pair._Root)
                    {
                        nodeRandom             = new DepthOneTreeNode();
                        nodeRandom._Position   = loop;
                        nodeRandom._Taxa_Value = tx._Taxa_Value;
                        ListDepthOneTreeNodeRandom.Add(nodeRandom);
                    }
                    dataRandom._DepthOneChain = ListDepthOneTreeNodeRandom;
                    _ListConsistencyDataModelRandom.Add(dataRandom);
                    loop++;
                }

                ConsistencyDataModel dmodelRandom = _ListConsistencyDataModelRandom[0];
                //string OutputHeaderRandom = "======================================================Consistancy Calculation(Random Technique)======================================================";

                dmodelRandom._ALL_Quatret = GetConsistancyStatusOfQuatret(_ListConsistencyDataModelRandom, dmodelRandom._ALL_Quatret);

                var vConsistentRandom = dmodelRandom._ALL_Quatret.FindAll(x => x._ConsistancyStatus == ConsistencyStatus.Consistent);
                SetRandomQuatretConsistentAfterDevideAndConquer(vConsistentRandom);

                var vInConsistentRandom = dmodelRandom._ALL_Quatret.FindAll(x => x._ConsistancyStatus == ConsistencyStatus.InConsistent);
                SetRandomQuatretInConsistentAfterDevideAndConquer(vInConsistentRandom);

                //OutputProcessing.WriteQuatretConsistancy(dmodelRandom._ALL_Quatret, PartitionStatus.None, OutputHeaderRandom);

                #endregion
            }
        }