示例#1
0
        /// <summary>
        /// Essa rotina faz:
        /// a) Efetua calculo raio de giração
        /// b) Check sobreposição e primeiro vizinho
        /// c) Check n# contrucao das cadeias
        /// d) Se a cadeia for do tipo REAL, aplica movimentação da cadeia (MONTEC)
        /// </summary>
        /// <param name="cont"></param>
        /// <param name="cadeiaIdeal"></param>
        /// <param name="cadeiaReal"></param>
        private bool ProcessMonomero(ref double cont, ref int cadeiaIdeal, ref int cadeiaReal, ref int cadeiaSoft, ref int cadeiaError)
        {
            string isemName = GCPS.initialIsem.ToString();

            GCPS.chain.contMoves = new Structs.BasicStructs.MoveSetApplies();

            //Efetua o calculo do Raio de giração & Distancia entre primeiro e ultimo ponto
            QueueType tempQueueType = new QueueType(isemName, Maths4Simulation.CalcSpinningRay(), Maths4Simulation.CalDistanceBetweenLastPointFirst());

            //Check sobreposicao e Primeiro vizinho
            Protein.CheckOverRideAndFirstNeighbor(ref chainType, ref cadeiaIdeal, ref cadeiaReal, ref cadeiaSoft);

            //Check na construcao das cadeias
            Protein.QualificationChainTypes(ref chainType, ref tempQueueType);

            //Se for CADEIA REAL SOFT aplica movimento
            GCPS.chain.chainTypes = chainType;
            if (GCPS.chain.chainTypes == BasicEnums.ChainTypes.Soft || GCPS.chain.chainTypes == BasicEnums.ChainTypes.Real)
            {
                //CHECK CONSTRUCTION
                if (!LatticeMoves.Parse())
                {
                    GCPS.chain.chainTypes = BasicEnums.ChainTypes.Error;
                    cadeiaError++;
                    cadeiaSoft--;
                    //GICO.WriteLine("ErroParseMoves..." + GCPS.chain.isem.ToString());
                    new GridProteinFolding.Middle.Helpers.LoggingHelpers.Log().ErroParseMoves(new ErroParseMovesException("ErroParseMoves..." + GCPS.chain.isem.ToString()), Types.ErrorLevel.None);
                    return(false);
                }
                else
                {
                    //Rotina carrega e salva matriz energética
                    EnergeticMatrix.LoadEnergeticMatrix(AppConfigClient.Param);
                    EnergeticMatrix.SaveEnergeticMatrix();

                    //Inicializa o Monomero da simulação utilizado para movimentação (temporário)
                    GCPS.tempChain = new Structs.BasicStructs.TemporaryChain();
                    GCPS.chain.CopyToTempMonomero();

                    //Rotina executa: Processa calculo da "variação de energia" e salva em arquivo o valor de "U"
                    GCPS.tempChain.NeighborsUpdateAll();
                    GCPS.tempChain.NeighborsSave(GCPS.tempChain.isem, ref GCPS.chain.numberNeighborTopological);

                    GCPS.chain.AcceptMotion();

                    //classificação do Monomero quanto ao tipo de movimento possível e Salva em disco
                    ClassificationMotion.PreClassificationOfMotion();

#if Debug
                    ClassificationMotion.SaveClassificationOfMotion(GCPS.chain.isem.ToString());
#endif

                    //Aplica Movimentação: CHAMA MONTE CARLO

                    //return MoteCarlo.MonteCarloB.Run();
                    return(MoteCarlo.MonteCarloTsallis.Run());
                }
            }

            return(false);
        }