Esempio n. 1
0
 public static void SaveData(ref LatticeMoves objLatticeMoves)
 {
     //Salva snapshot calculo da "variação de energia" e salva em arquivo o valor de "U"
     CalculatingEnergy.SaveValueOfDebugFile();
     //Salva o movimento da cadeia
     Recorder.RecMov(objLatticeMoves, AppConfigClient.Param.dataToProcess.splitFileEvery);
 }
            public void NeighborsUpdateAll()
            {
                for (int i = 0; i < GCPS.tempChain.r.Count; i++)
                {
                    CalculatingEnergy.DelEnergyFWD(i);
                }

                List <BasicStructs.Point> points = this.r;

                for (int i = 0; i < points.Count; i++)
                {
                    BasicStructs.Point temp = points[i];
                    temp.neighbors = NeighborsProcess(points[i], i, true);
                    points[i]      = temp;
                }

                this.r = points;
            }
            internal static BasicStructs.Neighbor NeighborsCheck(BasicStructs.Point tempCoord, int selectNode, int M, bool calcEnergy)
            {
                for (int i = 0; i < GridProteinFolding.Core.eFolding.Simulation.tempChain.r.Count; i++)
                {
                    BasicStructs.Point temp = GCPS.tempChain.r[i];

                    //ocupado por um resíduo vizinho da cadeia: M(i,j) = -1;
                    if (temp.x == tempCoord.x &&
                        temp.y == tempCoord.y &&
                        temp.z == tempCoord.z && (((selectNode + 1) == i) || ((selectNode - 1) == i)))
                    {
                        return(new BasicStructs.Neighbor()
                        {
                            classification = NeighborsType.neighborChain,
                            contacResidue = i
                        });
                    }
                    //ocupado por um vizinho topológico :  M(i,j) = +1;
                    else if (temp.x == tempCoord.x &&
                             temp.y == tempCoord.y &&
                             temp.z == tempCoord.z)
                    {
                        if (calcEnergy)
                        {
                            CalculatingEnergy.AddEnergy(GCPS.energeticMatrix[selectNode, i], selectNode, i);
                        }

                        return(new BasicStructs.Neighbor()
                        {
                            classification = NeighborsType.neighborTopological,
                            contacResidue = i
                        });
                    }
                }
                //sítio vazio:  M(i,j) = 0.

                return(new BasicStructs.Neighbor()
                {
                    classification = NeighborsType.emptySite,
                    contacResidue = -1
                });
            }
Esempio n. 4
0
        /// <summary>
        /// Aplica TEMPO de passo em MONTE CARLO!
        /// </summary>
        public static bool Run()
        {
            LatticeMoves objLatticeMoves = new LatticeMoves();

            InitVariables.Do();

            #region Criação Movimentação MoveSet

            StateControl.condStop       = (GCPS.chain.r.Count + 1) * 2;
            StateControl.maxInterations = AppConfigClient.Param.dataToProcess.maxInterations; //numero maximo de tentativas
            StateControl.recPathEvery   = 0;

            PrinterMessages.PrintHeader(AppConfigClient.CurrentGuid, StateControl.maxInterations);//, StateControl.condStop);

            //Salva a primeira configuração do monomero
            Recorder.RecTrajectoryFile(objLatticeMoves, AppConfigClient.Param.dataToProcess.splitFileEvery, true);

            //Salva snapshot calculo da "variação de energia" e salva em arquivo o valor de "U"
            CalculatingEnergy.existFileForSaveDebug = false;
            CalculatingEnergy.SaveValueOfDebugFile();


            int maxValConTop = 0;

            DateTime startDateTime = DateTime.Now;
            Console.WriteLine("Start: {0}", startDateTime.ToString());

            for (GCPS.mcStepsLoop01 = 0; GCPS.mcStepsLoop01 < StateControl.maxInterations; GCPS.mcStepsLoop01++)
            {
                //PRINT %
                PrinterMessages.PrintPercentCompleted(AppConfigClient.CurrentGuid);

                for (GCPS.mcStepsLoop02 = 0; GCPS.mcStepsLoop02 < GCPS.mcStepsLoop02_LIMITE; GCPS.mcStepsLoop02++) //loop externo de 5 passos
                {
                    for (GCPS.mcStepsLoop03 = 0; GCPS.mcStepsLoop03 < GCPS.chain.r.Count; GCPS.mcStepsLoop03++)    //loop para tamanha da cadeia
                    {
                        GCPS.chain.CopyToTempMonomero();

                        //Sorteiro o residuo para a tentativa de movimento
                        LatticeMoves.SortMoviment();

                        //var occuredMotion armazena o boleano da ocorrência de movimentos dos três (3) tipos abaixo:
                        bool occuredMotion = objLatticeMoves.LatticeTryModeSetCrankshaft();
                        if (!occuredMotion)
                        {
                            occuredMotion = objLatticeMoves.LatticeTryModeSetEnds();
                            if (!occuredMotion)
                            {
                                occuredMotion = objLatticeMoves.LatticeTryModeSetKink();
                                if (!occuredMotion)
                                {
                                    GCPS.chain.contMoves.othersReject++;
                                }
                            }
                        }

                        //Verifica se ocorreu um movimento na cadeia temporária
                        if (occuredMotion)
                        {
                            //Excluir valores energia (e) anterior se existentes ao node
                            //CalculatingEnergy.DelEnergy(GCPS.tempMonomero.selectNode);
                            //Rotina executa: Processa calculo da "variação de energia" e salva em arquivo o valor de "U"  Reclassifica a cadeia TEMPORARIA
                            //GCPS.tempMonomero.NeighborsUpdatePeerPoint(GCPS.tempMonomero.selectNode);


                            //Reclassifica TODA A CADEIA
                            GCPS.tempChain.NeighborsUpdateAll();


                            #region
                            //Condição de Teste:
                            //(1) deltaE <=0 -> "Aceita a nova configuração"
                            //(2) deltaE >0 -> Então
                            //      - Calcula e^-deltaE*beta (calcE)
                            //      - Gerar um número randôico (r) entre 0 e 1
                            //      Se r<=calcE então "Aceita a nova configuração"
                            //          Senão "Rejeita a nova configuração"
                            #endregion
                            //Efetua calcula das varívais do meio ambiente (deltaE, lastR e lastTransitionProbability, RG, DPP e etc)
                            Structs.Environment.CalculateEnvironment();

                            if (AcceptMove())
                            {
                                //Salva classificaca da cadeia
                                GCPS.tempChain.NeighborsSave(GCPS.chain.isem, ref GCPS.chain.numberNeighborTopological);

                                //Aceita o movimento
                                GCPS.chain.AcceptMotion();

                                if (GCPS.chain.ECount() != (GCPS.chain.TotalNeighborTopological() / 2))
                                {
                                    new GridProteinFolding.Middle.Helpers.LoggingHelpers.Log().ErrorNeighborTopological(new ErrorNeighborTopological("GCPS.chain.ECount() != (GCPS.chain.TotalNeighborTopological() / 2"), Types.ErrorLevel.Warning);
                                }

                                //Snapshot(ref objLatticeMoves);
                                //REC
                                if (GCPS.chain.numberNeighborTopological >= (GCPS.chain.r.Count - 1))
                                {
                                    FoundData(startDateTime);
                                    Snapshot(ref objLatticeMoves);
                                }

                                //Condição de parada
                                if (GCPS.chain.numberNeighborTopological >= (GCPS.chain.r.Count))
                                {
                                    FoundData(startDateTime);

                                    Snapshot(ref objLatticeMoves);

                                    if (Structs.Environment.rg == 1.41)
                                    {
                                        break;
                                    }
                                }
                                else
                                {
                                    if (maxValConTop < GCPS.chain.numberNeighborTopological)
                                    {
                                        maxValConTop = GCPS.chain.numberNeighborTopological;

                                        FoundData(startDateTime);
                                    }
                                }
                            }

                            GCPS.chain.interationEnergy = string.Empty;
                            GCPS.chain.typeOfLattice    = BasicEnums.Lattices.None;

                            //Se movimento ocorreu, é necessário pré qualificar novamente toda a cadeia
                            ClassificationMotion.PreClassificationOfMotion();

                            if (StateControl.condStop == GCPS.chain.TotalNeighborTopological())
                            {
                                break;
                            }
                        }
                        GCPS.McStepsDo();
                    }
                }
            }

            //Salva o movimento da cadeia
            Recorder.RecTrajectoryFileCalcSpinningRay(AppConfigClient.CurrentGuid, StateControl.maxInterations, objLatticeMoves);

            GICO.WriteLine(AppConfigClient.CurrentGuid, String.Format("MCSteps: {0}", GCPS.McSteps));
            //Check Parse do ultimo arquivo valido
            if (!LatticeMoves.Parse())
            {
                new GridProteinFolding.Middle.Helpers.LoggingHelpers.Log().ErroParseMoves(new ErroParseMovesException("ErroParseMoves"), Types.ErrorLevel.None);
            }

            //MoveSet de saída do movimento do ultimo arquivo valido
            Recorder.RecTrajectoryFile(objLatticeMoves, AppConfigClient.Param.dataToProcess.splitFileEvery);

            //MoveSet (RESULT)
            objLatticeMoves.RecMoveSet(AppConfigClient.CurrentGuid, SimulationResults + Directory.FileExtension);

            objLatticeMoves.Disposed();
            objLatticeMoves = null;

            #endregion

            return(true);
        }
Esempio n. 5
0
        /// <summary>
        /// Aplica TEMPO de passo em MONTE CARLO!
        /// </summary>
        public static bool Run()
        {
            LatticeMoves objLatticeMoves = new LatticeMoves();

            InitVariables.Do();

            #region Criação Movimentação MoveSet

            //StateControl.condStop = (GCPS.chain.r.Count + 1) * 2;
            StateControl.maxInterations = AppConfigClient.Param.dataToProcess.maxInterations; //numero maximo de tentativas
            StateControl.recPathEvery   = 0;

            PrinterMessages.PrintHeader(AppConfigClient.CurrentGuid, StateControl.maxInterations);//, StateControl.condStop);

            //Salva a primeira configuração do monomero
            Recorder.RecTrajectoryFile(objLatticeMoves, AppConfigClient.Param.dataToProcess.splitFileEvery, true);

            //Salva snapshot calculo da "variação de energia" e salva em arquivo o valor de "U"
            CalculatingEnergy.existFileForSaveDebug = false;
            CalculatingEnergy.SaveValueOfDebugFile();

            //int maxValConTop = 0;
            bool stoped = false;

            DateTime startDateTime = DateTime.Now;
            Console.WriteLine("Start: {0}", startDateTime.ToString());

            while (!stoped)
            {
                GCPS.chain.CopyToTempMonomero();

                //Sorteiro o residuo para a tentativa de movimento
                LatticeMoves.SortMoviment();

                //var occuredMotion armazena o boleano da ocorrência de movimentos dos três (3) tipos abaixo:
                bool occuredMotion = objLatticeMoves.LatticeTryModeSetCrankshaft();
                if (!occuredMotion)
                {
                    occuredMotion = objLatticeMoves.LatticeTryModeSetEnds();
                    if (!occuredMotion)
                    {
                        occuredMotion = objLatticeMoves.LatticeTryModeSetKink();
                        if (!occuredMotion)
                        {
                            GCPS.chain.contMoves.othersReject++;
                        }
                    }
                }

                //Verifica se ocorreu um movimento na cadeia temporária
                if (occuredMotion)
                {
                    //Reclassifica TODA A CADEIA
                    GCPS.tempChain.NeighborsUpdateAll();

                    //Efetua calcula das varívais do meio ambiente (deltaE, lastR e lastTransitionProbability, RG, DPP e etc)
                    Structs.Environment.CalculateEnvironment();

                    if (AcceptMove())
                    {
                        //Salva classificaca da cadeia
                        GCPS.tempChain.NeighborsSave(GCPS.chain.isem, ref GCPS.chain.numberNeighborTopological);

                        //Aceita o movimento
                        GCPS.chain.AcceptMotion();

                        if (GCPS.chain.ECount() != (GCPS.chain.TotalNeighborTopological() / 2))
                        {
                            new GridProteinFolding.Middle.Helpers.LoggingHelpers.Log().ErrorNeighborTopological(new ErrorNeighborTopological("GCPS.chain.ECount() != (GCPS.chain.TotalNeighborTopological() / 2"), Types.ErrorLevel.Warning);
                        }

                        //Condição de parada
                        if (GCPS.chain.numberNeighborTopological >= (GCPS.chain.r.Count))
                        {
                            FoundData(startDateTime);
                            Snapshot(ref objLatticeMoves);

                            if (CheckStruct())
                            {
                                stoped = true;
                            }
                        }
                    }

                    GCPS.chain.interationEnergy = string.Empty;
                    GCPS.chain.typeOfLattice    = BasicEnums.Lattices.None;

                    //Se movimento ocorreu, é necessário pré qualificar novamente toda a cadeia
                    ClassificationMotion.PreClassificationOfMotion();
                }
                GCPS.McStepsDo();
            }

            //Salva o movimento da cadeia
            Recorder.RecTrajectoryFileCalcSpinningRay(AppConfigClient.CurrentGuid, StateControl.maxInterations, objLatticeMoves);

            GICO.WriteLine(AppConfigClient.CurrentGuid, String.Format("MCSteps: {0}", GCPS.McSteps));
            //Check Parse do ultimo arquivo valido
            if (!LatticeMoves.Parse())
            {
                new GridProteinFolding.Middle.Helpers.LoggingHelpers.Log().ErroParseMoves(new ErroParseMovesException("ErroParseMoves"), Types.ErrorLevel.None);
            }

            //MoveSet de saída do movimento do ultimo arquivo valido
            Recorder.RecTrajectoryFile(objLatticeMoves, AppConfigClient.Param.dataToProcess.splitFileEvery);

            //MoveSet (RESULT)
            objLatticeMoves.RecMoveSet(AppConfigClient.CurrentGuid, SimulationResults + Directory.FileExtension);



            //Compara estruturas com as TARGETS
            //ComparerTargets(GCPS.chain.r);
            #endregion

            //MoveSet de saída do movimento para SANDBOX
            Recorder.RecTrajectoryFileSandBox(objLatticeMoves);

            objLatticeMoves.Disposed();
            objLatticeMoves = null;

            return(true);
        }