//DARPA Deliverable - NETWORK CLIENT - Calls several agents to implement an intracellular network. //Author: David Pettigrew Date: 8. November 2002 // //This client establishes connections with the OAA host and issues Prolog-coded requests to Agents. import com.sri.oaa2.icl.IclList; import com.sri.oaa2.icl.IclStruct; import com.sri.oaa2.icl.IclStr; import com.sri.oaa2.icl.IclTerm; import com.sri.oaa2.lib.LibOaa; import java.io.*; import java.awt.Dimension; public class NetworkClient { static PrintWriter outputAR; //Declare outputAR to be an output file private static IclList solveParams0 = new IclList(); private static IclList solveParams1 = new IclList(); private static IclList solveParams2 = new IclList(); private static IclList solveParams3 = new IclList(); private static IclList solveParams4 = new IclList(); public static String getAgentAddress(Client client, String agent) throws Exception { IclList res = new IclList(); client.myOaa.oaaSolve(IclTerm.fromString(true, "agent_host(Addr, "+agent+",Host)"), new IclList(), res); if (res.size() == 0) { throw new Exception("Unable to retrieve "+agent+" address using agent_host"); } String agentAddr = res.getTerm(0).getTerm(0).toString(); return agentAddr; } public static void main(String[] args) throws Exception { //long startTime = System.currentTimeMillis(); //Open output file openFiles(); //Set timing variables (all time is in minutes) double dt = 0.01; //integration step size int min = (int)(1.0/dt); //min = scaling constant (number of time steps per minute) int hour = 60 * min; //hour = 60 minutes int day = 24 * hour; //hour = 60 minutes double presimulation_time = 20.0*min; //presimulation time to allow dynamic variables to reach equilibrium double simulation_time = 100.0*min; //simulation time after presimulation int plot_resolution = min; //plot-resolution = 1 minute (one data point written to output file every virtual minute) Client client = new Client(args); //Declare client to be object of class Client String stimulusAgentAddr = getAgentAddress(client, "simulateStimulus"); String rateEquationAgentAddr = getAgentAddress(client, "rateEquationActivation"); String PKAagentAddr = getAgentAddress(client, "simulatePKAactivation"); String PhosphorylationAgentAddr = getAgentAddress(client, "simulatePhosphorylation"); String SGRAgentAddr = getAgentAddress(client, "simulateGeneRegulation"); //System.out.println("agentAddr = " + agentAddr); //solveParams = (IclList)IclTerm.fromString(true, "[address("+agentAddr+"), direct_connect(true)]"); solveParams0.add(new IclStruct("direct_connect", new IclStr("true"))); solveParams0.add(new IclStruct("address", IclTerm.fromString(true,stimulusAgentAddr))); solveParams1.add(new IclStruct("direct_connect", new IclStr("true"))); solveParams1.add(new IclStruct("address", IclTerm.fromString(true,rateEquationAgentAddr))); solveParams2.add(new IclStruct("direct_connect", new IclStr("true"))); solveParams2.add(new IclStruct("address", IclTerm.fromString(true,PKAagentAddr))); solveParams3.add(new IclStruct("direct_connect", new IclStr("true"))); solveParams3.add(new IclStruct("address", IclTerm.fromString(true,PhosphorylationAgentAddr))); solveParams4.add(new IclStruct("direct_connect", new IclStr("true"))); solveParams4.add(new IclStruct("address", IclTerm.fromString(true,SGRAgentAddr))); client.sendRequest("simulateStimulus(instantiate, input, 0.0, [5.0, 5.0, 1.5, 25.0, 5.0, 1.5, 45.0, 5.0, 1.5, 65.0, 5.0, 1.5, 85.0, 5.0, 1.5])", solveParams0); client.sendRequest("rateEquationActivation(instantiate, cAMP, 1.0, 1.0, 0.0)", solveParams1); client.sendRequest("rateEquationActivation(instantiate, phosphatase, 0.5, 1.0, 0.1)", solveParams1); //.1, .017 client.sendRequest("simulatePKAactivation(instantiate, 'PKA', [0.0025], [10.0, 1.0], [0.0006], [0.0, 0.0, 3.2])", solveParams2); client.sendRequest("simulatePhosphorylation(instantiate, 'CREB', 0.005, 0.5, 0.0)", solveParams3); client.sendRequest("simulateGeneRegulation(instantiate, 'ApUch', 1.0, [.09], [activation], 0.01, 0.0, 0.0)", solveParams4); double InputSolution = 0.0; double cAMP = 0.0; double phosphatase = 0.1; double PKA = 0.0; double CREB = 0.0; double ApUch = 0.0; double XR = 0.0; double XC = 0.0; double XRC = 0.0; double R = 0.0; double RC = 0.0; //Main loop for (double t = -presimulation_time/min; t <= simulation_time/min; t += dt) { InputSolution = Double.parseDouble(client.sendRequest("simulateStimulus(nextStimulus, input, InputSolution, InputSlope, "+t+")", 3, solveParams0)); client.sendRequest("rateEquationActivation(solve, cAMP, "+InputSolution+")", solveParams1); client.sendRequest("rateEquationActivation(solve, phosphatase, "+(InputSolution+0.1)+")", solveParams1); R = Double.parseDouble(client.sendRequest("simulatePKAactivation(get, 'PKA', R, C, RC, SlopeR, SlopeC, SlopeRC)", 3, solveParams2)); RC = Double.parseDouble(client.sendRequest("simulatePKAactivation(get, 'PKA', R, C, RC, SlopeR, SlopeC, SlopeRC)", 5, solveParams2)); XR = -0.014*R*ApUch; XC = 0.014*RC*ApUch; XRC = -0.014*RC*ApUch; client.sendRequest("simulatePKAactivation(solve, 'PKA', "+cAMP+", "+XR+", "+XC+", "+XRC+")", solveParams2); client.sendRequest("simulatePhosphorylation(solve, 'CREB', "+PKA+", "+phosphatase+")", solveParams3); client.sendRequest("simulateGeneRegulation(solve, 'ApUch', ApUchSlope, ["+(CREB*CREB)+"], [1.0])", solveParams4); cAMP = Double.parseDouble(client.sendRequest("rateEquationActivation(integrate, forwardEuler, cAMP, CyclicAMP, "+dt+")", 4, solveParams1)); phosphatase = Double.parseDouble(client.sendRequest("rateEquationActivation(integrate, forwardEuler, phosphatase, Phosphatase, "+dt+")", 4, solveParams1)); PKA = Double.parseDouble(client.sendRequest("simulatePKAactivation(integrate, forwardEuler, 'PKA', R, C, RC, "+dt+")", 5, solveParams2)); CREB = Double.parseDouble(client.sendRequest("simulatePhosphorylation(integrate, forwardEuler, 'CREB', CREB, "+dt+")", 4, solveParams3)); ApUch = Double.parseDouble(client.sendRequest("simulateGeneRegulation(integrate, forwardEuler, 'ApUch', ApUch, "+dt+")", 4, solveParams4)); //Print results to output files if( (t >= 0.0) & (( (int)(t * min) % plot_resolution) == 0) ) outputAR.println(t+", "+((float)(InputSolution))+", "+((float)(cAMP))+", "+((float)(phosphatase))+", "+((float)(PKA))+", "+((float)(CREB))+", "+((float)(ApUch))); //System.out.print("."); //something to watch while simulation proceeds //System.out.print(":"); } System.out.println("Simulation Complete...."); closeFiles(); //Close output files //long endTime = System.currentTimeMillis(); //System.out.println("Total Run Time: "+((endTime - startTime) / 60000)+" min.; "+((long)((endTime - startTime) % 60000) / 1000.0)+" sec."); } public static void openFiles() throws IOException { File fileAR = new File("Network.txt"); outputAR = new PrintWriter(new FileWriter(fileAR)); } public static void closeFiles() { outputAR.close(); } }