/// <summary> /// 1# regra /// Equação: 1 MENOR OU IGUAL d^2 i,j MENOR OU IGUAL (N-1)^2 /// </summary> /// <returns></returns> private bool PolicyOne() { return(Maths4Simulation.CalcSpinningRay() <= Math.Pow(GCPS.chain.r.Count - 1, 2)); }
/// <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); }
/// <summary> /// RG: Calcula do raio de giração (evolução) /// </summary> private static void RG() { rg = Maths4Simulation.CalcSpinningRay(); }