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 }); }
/// <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); }
/// <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); }