public MainWindow() { InitializeComponent(); clips.Load("piwo.clp"); clips.Reset(); clips.Run(1); }
public MainForm() { ConsoleTraceListener tl = new ConsoleTraceListener(); InitializeComponent(); clips.AddRouter(new DebugRouter()); clips.Load("bazaaut.clp"); clips.Reset(); clips.Run(1); }
public ReturnValueClass getNextUIState() { //run the clips first clipsEnvironment.Run(); ReturnValueClass returnValue = new ReturnValueClass(); // Get the state-list. String evalStr = "(find-all-facts ((?f state-list)) TRUE)"; using (FactAddressValue allFacts = (FactAddressValue)((MultifieldValue)clipsEnvironment.Eval(evalStr))[0]) { string currentID = allFacts.GetFactSlot("current").ToString(); evalStr = "(find-all-facts ((?f UI-state)) " + "(eq ?f:id " + currentID + "))"; } using (FactAddressValue evalFact = (FactAddressValue)((MultifieldValue)clipsEnvironment.Eval(evalStr))[0]) { //get the state from clipse string state = evalFact.GetFactSlot("state").ToString(); returnValue.State = state; using (MultifieldValue validAnswers = (MultifieldValue)evalFact.GetFactSlot("valid-answers")) { for (int i = 0; i < validAnswers.Count; i++) { returnValue.validAnswers.Add((SymbolValue)validAnswers[i]); } } returnValue.displayQuestion = GetString((SymbolValue)evalFact.GetFactSlot("display")); } return(returnValue); }
public void Run() { //START trying to initialize the buffer _theEnv.InputBuffer iB = new _theEnv.InputBuffer(); _theEnv.InputBufferCount iBC = new _theEnv.InputBufferCount(); //END _theEnv.Run(); }
private void NextUiState() { NextBtn.Visibility = Visibility.Hidden; PrevBtn.Visibility = Visibility.Hidden; AnswersPanel.Children.Clear(); _theEnv.Run(); var evalStr = "(find-all-facts ((?f state-list)) TRUE)"; using (var allFacts = (FactAddressValue)((MultifieldValue)_theEnv.Eval(evalStr))[0]) { string currentId = allFacts.GetFactSlot("current").ToString(); evalStr = "(find-all-facts ((?f UI-state)) " + "(eq ?f:id " + currentId + "))"; } using (var evalFact = (FactAddressValue)((MultifieldValue)_theEnv.Eval(evalStr))[0]) { string state = evalFact.GetFactSlot("state").ToString(); switch (state) { case "initial": NextBtn.Content = "Dalej"; NextBtn.Visibility = Visibility.Visible; break; case "final": NextBtn.Content = "Reset"; NextBtn.Visibility = Visibility.Visible; break; default: NextBtn.Content = "Dalej"; NextBtn.Visibility = Visibility.Visible; PrevBtn.Content = "Powrót"; PrevBtn.Visibility = Visibility.Visible; break; } using (var validAnswers = (MultifieldValue)evalFact.GetFactSlot("valid-answers")) { var selected = evalFact.GetFactSlot("response").ToString(); for (int i = 0; i < validAnswers.Count; i++) { var rb = new RadioButton { Margin = new Thickness(3), Content = validAnswers[i], GroupName = "answers", IsChecked = selected == (validAnswers[i]).ToString() }; AnswersPanel.Children.Add(rb); } } var symbol = (SymbolValue)evalFact.GetFactSlot("display"); QuestionLbl.Content = GetResourceOrStringValue(symbol); } }
/// <summary> /// Load and execute rules! /// </summary> private void LoadRules() { //string path = Directory.GetCurrentDirectory(); //Console.Write(path); enviroment.Reset(); enviroment.Clear(); enviroment.Load("C:\\ISBARecoPrj\\ISBARecoPrj\\facts_threshold.clp"); enviroment.Load("C:\\ISBARecoPrj\\ISBARecoPrj\\rule_report_gene.clp"); enviroment.Reset(); enviroment.Run(); }
public MainForm() { //Initializing of all variables needed InitializeComponent(); environment = new Mommosoft.ExpertSystem.Environment(); //Load the clips file environment.Load("mobilephone.clp"); //Set initial stage UIState = 0; SetUIState(Defintions.PhaseStart); this.buttonRestart.Visible = false; //Initializing lists of information to be stored at each phase preferencesDetails = new List<String>(); preferencesPhoneList = new List<MobilePhoneRecommendation>(); phoneSpecsDetails = new List<String>(); phoneSpecsPhoneList = new List<MobilePhoneRecommendation>(); personalityDetails = new List<String>(); personalityPhoneList = new List<MobilePhoneRecommendation>(); results = new List<MobilePhoneRecommendation>(); iResultIterate = 0; phase3Results = new BindingList<MobileResultDisplay>(); /* * Watching of facts is done in output window. So make sure when build output window is shown * WactchItem is an enum. * @kwanghock */ environment.Watch(WatchItem.All); environment.Reset(); //assert test input to check everything ran correctly. @kwanghock //testInput(); environment.Run(); //Load the dropdown values for PhaseDetails LoadPhaseDetailsDropdown(); //Load dropdown values for mobile plans LoadPhasePlanDropdown(); //Test by getting all the facts see whether reflect correctly @kwanghock //test(); }
private void NextUIState() { nextButton.Visible = false; prevButton.Visible = false; choicesPanel.Controls.Clear(); clipsEnvironment.Run(); // Get the state-list. String evalStr = "(find-all-facts ((?f state-list)) TRUE)"; using (FactAddressValue allFacts = (FactAddressValue)((MultifieldValue)clipsEnvironment.Eval(evalStr))[0]) { string currentID = allFacts.GetFactSlot("current").ToString(); evalStr = "(find-all-facts ((?f UI-state)) " + "(eq ?f:id " + currentID + "))"; } using (FactAddressValue evalFact = (FactAddressValue)((MultifieldValue)clipsEnvironment.Eval(evalStr))[0]) { string state = evalFact.GetFactSlot("state").ToString(); if (state.Equals("initial")) { nextButton.Visible = true; nextButton.Tag = "Next"; nextButton.Text = "Next"; prevButton.Visible = false; } else if (state.Equals("final")) { nextButton.Visible = true; nextButton.Tag = "Restart"; nextButton.Text = "Restart"; prevButton.Visible = false; } else { nextButton.Visible = true; nextButton.Tag = "Next"; prevButton.Tag = "Prev"; prevButton.Visible = true; } using (MultifieldValue validAnswers = (MultifieldValue)evalFact.GetFactSlot("valid-answers")) { //clear of the old label lblAnsClips.Text = string.Empty; String selected = evalFact.GetFactSlot("response").ToString(); for (int i = 0; i < validAnswers.Count; i++) { RadioButton rb = new RadioButton(); rb.Text = (SymbolValue)validAnswers[i]; rb.Tag = rb.Text; lblAnsClips.Text = lblAnsClips.Text + " " + rb.Text; rb.Visible = true; rb.Location = new Point(10, 20 * (i + 1)); choicesPanel.Controls.Add(rb); } lblAnsClips.Text = lblAnsClips.Text + " :Updated on " + DateTime.Now.ToLongTimeString(); } messageLabel.Text = GetString((SymbolValue)evalFact.GetFactSlot("display")); } }
public override DecisionResult IdentifyTreatment() { List <Treatment> treatments = new List <Treatment>(); List <Action> actions = new List <Action>(); List <Reason> reasons = new List <Reason>(); string currentGFR = ""; string GFRTrend = "unknown"; bool Dialysis = false; double latest = testData.Offsets().Min(); List <Value> GfrValues = testData.Values("gfr"); double slope = 0; if (GfrValues.Count() == 0) { Action action = new Action(); action.text = "Please provide at least one GFR value."; actions.Add(action); } else if (GfrValues.Count() > 1) { List <double> weights = new List <double>(); List <double> offsets = new List <double>(); List <double> values = new List <double>(); foreach (Value value in GfrValues) { double days = (value.offset - latest) / 86400; double new_weight = Math.Pow((1 - test_trend_decay_per_day), (double)value.value); offsets.Add(value.offset); values.Add((double)value.value); weights.Add(Math.Max(0.125, new_weight)); } double[] lsrResults = LeastSquaresWeightedBestFitLine1(offsets.ToArray(), values.ToArray(), weights.ToArray()); //intercept = results[0]; slope = -lsrResults[1]; currentGFR = testData.Value("gfr", latest).value.ToString(); if (currentGFR == "-1") { currentGFR = ""; GFRTrend = ""; Dialysis = true; } else if (GfrValues.Count > 1 && currentGFR != "") { // double diff = (y_values[0] - intercept) / intercept; GFRTrend = "stable"; if (slope / (double)testData.Value("gfr", latest).value > 0.1) { GFRTrend = "increasing"; } if (slope / (double)testData.Value("gfr", latest).value < -0.1) { GFRTrend = "decreasing"; } } } else // Single GFR value { if (GfrValues.Count() > 0) { currentGFR = testData.Value("gfr", latest).value.ToString(); } if (currentGFR == "-1") { currentGFR = ""; GFRTrend = ""; Dialysis = true; } else { GFRTrend = "stable"; } } Value urineProduction = testData.Value("urine production", latest); double urineProductionValue = 0; if (urineProduction.value == null || !(urineProduction.value is double)) { Action action = new Action(); action.text = "Please provide urine production as a number."; actions.Add(action); } else { urineProductionValue = (double)urineProduction.value; } Value potassium = testData.Value("potassium", latest); double potassiumValue = 0; if (potassium.value == null || !(potassium.value is double)) { Action action = new Action(); action.text = "Please provide potassium as a number."; actions.Add(action); } else { potassiumValue = (double)potassium.value; } Value magnesium = testData.Value("magnesium", latest); double magnesiumValue = 0; if (magnesium.value == null || !(magnesium.value is double)) { Action action = new Action(); action.text = "Please provide magnesium as a number."; actions.Add(action); } else { magnesiumValue = (double)magnesium.value; } Value phosphorus = testData.Value("phosphorus", latest); double phosphorusValue = 0; if (phosphorus.value == null || !(phosphorus.value is double)) { Action action = new Action(); action.text = "Please provide phosphorus as a number."; actions.Add(action); } else { phosphorusValue = (double)phosphorus.value; } Value calcium = testData.Value("calcium, ionized", latest); double calciumValue = 0; if (calcium.value == null || !(calcium.value is double)) { Action action = new Action(); action.text = "Please provide calcium as a number."; actions.Add(action); } else { calciumValue = (double)calcium.value; } Value diarrhea = testData.Value("diarrhea", latest); string diarrheaValue = diarrhea.value as string; if (diarrheaValue == null || diarrheaValue == "") { diarrheaValue = "X"; } else { diarrheaValue = diarrheaValue.ToUpper(); if (diarrheaValue[0] != 'N' && diarrheaValue[0] != 'Y') { Action action = new Action(); action.text = "Please provide diarrhea as Yes, Y, No or N."; actions.Add(action); } else { diarrheaValue = diarrheaValue.Substring(0, 1); } } double recentKCL = 0; int recentKCLtreatements = 0; List <Value> kclTreatments = treatmentData.Values("kcl"); foreach (Value kclTreatment in kclTreatments) { if (kclTreatment.offset <= 2 * 86400) // 2 days { recentKCL += (double)kclTreatment.value; recentKCLtreatements++; } } if (actions.Count == 0) // no errors { // Clear old values //clips.Eval("(clear)"); //clips.Load("Hypokalemia.clp"); //clips.Eval("(reset)"); // load facts from deffacts constructs. clips.Clear(); clips.Load("Hypokalemia.clp"); clips.Reset(); // load facts from deffacts constructs. // Set values in CLIPS clips.AssertString("(diagnosis (patient " + patientID + ") (name HYPOKALEMIA))"); if (Dialysis) { clips.AssertString("(test-value (patient " + patientID + ") (name Dialysis) (value TRUE))"); } if (currentGFR != "") { clips.AssertString("(test-value (patient " + patientID + ") (name GFR) (value " + currentGFR + "))"); } if (GFRTrend != "") { clips.AssertString("(test-value (patient " + patientID + ") (name GFR-trend) (value " + GFRTrend.ToUpper() + "))"); } if (urineProduction != null) { clips.AssertString("(test-value (patient " + patientID + ") (name Urine-production) (value " + urineProductionValue + "))"); } if (potassium != null) { clips.AssertString("(test-value (patient " + patientID + ") (name Potassium) (value " + potassiumValue + "))"); } if (magnesium != null) { clips.AssertString("(test-value (patient " + patientID + ") (name Magnesium) (value " + magnesiumValue + "))"); } if (phosphorus != null) { clips.AssertString("(test-value (patient " + patientID + ") (name Phosphorus) (value " + phosphorusValue + "))"); } if (calcium != null) { clips.AssertString("(test-value (patient " + patientID + ") (name Calcium) (value " + calciumValue + "))"); } if (diarrhea != null) { clips.AssertString("(test-value (patient " + patientID + ") (name Diarrhea) (value " + diarrheaValue + "))"); } Value EnteralRoute = testData.Value("enteralroute", latest); if (EnteralRoute != null && (bool)EnteralRoute.value) { clips.AssertString("(available-routes (patient " + patientID + ") (type ENTERAL))"); } Value CentralRoute = testData.Value("centralroute", latest); if (CentralRoute != null && (bool)CentralRoute.value) { clips.AssertString("(available-routes (patient " + patientID + ") (type CENTRAL-IV))"); } Value PeripheralRoute = testData.Value("peripheralroute", latest); if (PeripheralRoute != null && (bool)PeripheralRoute.value) { clips.AssertString("(available-routes (patient " + patientID + ") (type PERIPHERAL-IV))"); } clips.AssertString("(test-value (patient " + patientID + ") (name Recent-KCL) (value " + recentKCL + "))"); clips.AssertString("(test-value (patient " + patientID + ") (name Recent-KCL-Treatements) (value " + recentKCLtreatements + "))"); //clips.Reset(); clips.Run(); // Get values from CLIPS MultifieldValue treatmentFacts = clips.Eval("(find-all-facts ((?treatment treatment)) TRUE)") as MultifieldValue; foreach (FactAddressValue fv in treatmentFacts) { Treatment treatment = new Treatment(); //treatment.index = (int)((NumberValue)fv.GetFactSlot("index")).GetIntegerValue(); //treatment.type = ((LexemeValue)fv.GetFactSlot("type")).GetLexemeValue(); //treatment.med = ((LexemeValue)fv.GetFactSlot("med")).GetLexemeValue(); //treatment.quantity = ((NumberValue)fv.GetFactSlot("quantity")).GetFloatValue(); //treatment.units = ((LexemeValue)fv.GetFactSlot("units")).GetLexemeValue(); //treatment.route = ((LexemeValue)fv.GetFactSlot("route")).GetLexemeValue(); object tempIndex = fv.GetFactSlot("index"); if (tempIndex is FloatValue) { FloatValue tempValue = (FloatValue)tempIndex; treatment.index = (float)(tempValue); } else { IntegerValue tempValue = (IntegerValue)tempIndex; treatment.index = (int)(tempValue); } treatment.type = (string)((SymbolValue)fv.GetFactSlot("type")); treatment.med = (string)((SymbolValue)fv.GetFactSlot("med")); PrimitiveValue quantitySlot = fv.GetFactSlot("quantity"); if (quantitySlot is FloatValue) { treatment.quantity = (double)((FloatValue)quantitySlot); } else { treatment.quantity = (int)((IntegerValue)quantitySlot); } treatment.units = (string)((SymbolValue)fv.GetFactSlot("units")); treatment.route = (string)((SymbolValue)fv.GetFactSlot("route")); treatments.Add(treatment); } MultifieldValue actionFacts = clips.Eval("(find-all-facts ((?action action)) TRUE)") as MultifieldValue; foreach (FactAddressValue fv in actionFacts) { Action action = new Action(); action.text = ((SymbolValue)fv.GetFactSlot("text")).ToString().Replace("GFR-trend", "Previous GFR"); actions.Add(action); } MultifieldValue reasonFacts = clips.Eval("(find-all-facts ((?reason reason)) TRUE)") as MultifieldValue; foreach (FactAddressValue fv in reasonFacts) { Reason reason = new Reason( (int)((IntegerValue)fv.GetFactSlot("level")), ((SymbolValue)fv.GetFactSlot("rule")).ToString(), ((SymbolValue)fv.GetFactSlot("text")).ToString().Replace("GFR-trend", "Previous GFR")); reasons.Add(reason); } } return(new DecisionResult(treatments, actions, reasons)); }
private void NextUIState() { messageLabel.Visible = false; nextButton.Visible = false; prevButton.Visible = false; label1.Visible = false; pictureBox1.Visible = false; pictureBox2.Visible = false; choicesPanel.Controls.Clear(); _theEnv.Run(); // Get the state-list. String evalStr = "(find-all-facts ((?f state-list)) TRUE)"; using (FactAddressValue allFacts = (FactAddressValue)((MultifieldValue)_theEnv.Eval(evalStr))[0]) { string currentID = allFacts.GetFactSlot("current").ToString(); evalStr = "(find-all-facts ((?f UI-state)) " + "(eq ?f:id " + currentID + "))"; } using (FactAddressValue evalFact = (FactAddressValue)((MultifieldValue)_theEnv.Eval(evalStr))[0]) { string state = evalFact.GetFactSlot("state").ToString(); if (state.Equals("initial")) { nextButton.Visible = true; nextButton.Tag = "Next"; nextButton.Text = "Next"; prevButton.Visible = false; } else if (state.Equals("final")) { nextButton.Visible = true; nextButton.Tag = "Restart"; nextButton.Text = "Restart"; prevButton.Visible = false; } else { nextButton.Visible = true; nextButton.Tag = "Next"; prevButton.Tag = "Prev"; prevButton.Visible = true; } messageLabel.Visible = true; messageLabel.Location = new Point(12, 9); messageLabel.Text = GetString((SymbolValue)evalFact.GetFactSlot("display")); Controls.Add(messageLabel); using (MultifieldValue validAnswers = (MultifieldValue)evalFact.GetFactSlot("valid-answers")) { String selected = evalFact.GetFactSlot("response").ToString(); String question = evalFact.GetFactSlot("display").ToString(); switch (question) { case "WelcomeMessage": SetQuestion("Program ma charakter wyłącznie \ninformacyjno-edukacyjny i wynik testu \nnie może być traktowany jak porada, \nkonsultacja lub diagnoza lekarza."); break; case "HighTemperatureQuestion": label1.Visible = true; label1.Text = "Korzystając z termometru wybierz aktualną temperaturę swojego ciała"; label1.Location = new Point(12, 47); Controls.Add(label1); pictureBox2.Image = new Bitmap("pasek.jpg"); pictureBox2.Location = new Point(216, 86); pictureBox2.Width = 11; pictureBox2.Height = 105; pictureBox2.Visible = true; Controls.Add(pictureBox2); pictureBox1.Image = new Bitmap("termometrmaly.jpg"); pictureBox1.Location = new Point(102, 36); pictureBox1.Width = 225; pictureBox1.Height = 235; pictureBox1.Visible = true; Controls.Add(pictureBox1); termometr = true; // zdefiniuj inny sposob przekazania wartosci formularza break; case "KichanieQuestion": SetQuestion("Zaznacz 'Tak', jeśli kichasz znacznie \nczęściej niż zdarzało Ci się to dotychczas \n(kilka-kilkanaście razy dziennie)."); break; case "PoczucieRozbiciaQuestion": SetQuestion("Zaznacz 'Tak', jeśli czujesz się bardziej \nzmęczony i osłabiony niż zazwyczaj."); break; case "BoleKostnoStawoweQuestion": SetQuestion("Zaznacz 'Tak', jeśli ból występuje i \nw ostatnim czasie nie wykonywałeś \nczynności wymagających dużego wysiłku \nfizycznego lub czujesz sztywność \nstawów po dłuzszym bezruchu."); break; case "BolGlowyQuestion": SetQuestion("Zaznacz 'Tak', jeśli ból nie występował \nprzedtem, nasilił się w ostatnim czasie."); break; case "DreszczeQuestion": SetQuestion("Zaznacz 'Tak', jeśli odczuwasz nieprzyjemny \nchłód oraz drżenie ciała pomimo \ntemperatury pokojowej pomieszczenia, \nw którym się znajdujesz."); break; case "DlugotrwalyKatarQuestion": SetQuestion("Zaznacz 'Tak', jeśli katar trwa \ndłuzej niż 2 tygodnie."); break; case "DryCoughQuestion": SetQuestion("Zaznacz 'Tak, jeśli podczas kaszlenia masz \nuczucie drażnienia w tchawicy, masz duszące \nataki kaszlu lub ustawicznie pokasłujesz. \nKaszel suchy jest męczący, brzmi jak \nposzczekiwanie i nie powoduje \nodkrztuszania wydzieliny."); break; case "SwiszczacyOddechQuestion": SetQuestion("Zaznacz 'Tak' jeśli wydechowi towarzyszy \nciągły, wysoki dzwięk przypominający świst."); break; case "SuchyKaszelQuestion": SetQuestion("Zaznacz 'Tak', jeśli masz napady dusznosci, \nczujesz ucisk w klatce piersiowej, a \nobjawy nasilaja się po wysilku fizycznym."); break; case "RozpulchnienieQuestion": SetQuestion("Zaznacz 'Tak', jeśli z trudem mówisz, nie \nmożesz przełknąć śliny, męczy Cię chrypka. \nOpuchnięte gardło często jest przyczyną \ndotkliwego bólu podczas przełykania."); break; case "ZaczerwienienieQuestion": SetQuestion("Zaznacz 'Tak' jeśli zauważyłeś/aś, że \nmasz przekrwioną błonę śluzową gardła \noraz migdałki. \nNierzadko są one również opuchnięte."); break; } if (!termometr) // jesli pytanie nie dotyczylo temperatury - dodaj przyciski yes/no { int[] coord = { 3, 26 }; for (int i = 0; i < validAnswers.Count; i++) { RadioButton rb = new RadioButton(); switch ((SymbolValue)validAnswers[i]) { case "No": rb.Text = "Nie"; break; case "Yes": rb.Text = "Tak"; break; } rb.Tag = rb.Text; rb.Visible = true; rb.Location = new Point(3, coord[i]); if (i == 0) { rb.Checked = true; } choicesPanel.Controls.Add(rb); } } } } }
public void Run() { _theEnv.Run(); }
private void NextUIState() { nextButton.Visible = false; prevButton.Visible = false; choicesPanel.Controls.Clear(); Env.Run(); // Get the state-list. String evalStr = "(find-all-facts ((?f state-list)) TRUE)"; using (FactAddressValue allFacts = (FactAddressValue)((MultifieldValue)Env.Eval(evalStr))[0]) { string currentID = allFacts.GetFactSlot("current").ToString(); evalStr = "(find-all-facts ((?f UI-state)) " + "(eq ?f:id " + currentID + "))"; } using (FactAddressValue evalFact = (FactAddressValue)((MultifieldValue)Env.Eval(evalStr))[0]) { System.Drawing.Drawing2D.GraphicsPath gp = new System.Drawing.Drawing2D.GraphicsPath(); gp.AddEllipse(0, 0, pictureBox1.Width - 3, pictureBox1.Height - 3); Region rg = new Region(gp); pictureBox1.Region = rg; pictureBox2.Region = rg; pictureBox3.Region = rg; string state = evalFact.GetFactSlot("state").ToString(); if (state.Equals("initial")) { pictureBox1.Visible = false; pictureBox2.Visible = false; pictureBox3.Visible = false; nextButton.Visible = true; nextButton.Tag = "Next"; nextButton.Text = "Next"; prevButton.Visible = false; } else if (state.Equals("finalPurple")) { choicesPanel.Visible = false; pictureBox1.BringToFront(); pictureBox1.Visible = true; nextButton.Visible = true; nextButton.Tag = "Restart"; nextButton.Text = "Restart"; pictureBox1.Location = new Point(318, 150); pictureBox1.BackColor = Color.FromArgb(173, 3, 252); prevButton.Visible = false; } else if (state.Equals("finalYellow")) { pictureBox1.Visible = true; nextButton.Visible = true; nextButton.Tag = "Restart"; nextButton.Text = "Restart"; pictureBox1.Location = new Point(318, 150); pictureBox1.BackColor = Color.FromArgb(255, 255, 38); prevButton.Visible = false; } else if (state.Equals("finalGreen")) { pictureBox1.Visible = true; nextButton.Visible = true; nextButton.Tag = "Restart"; nextButton.Text = "Restart"; pictureBox1.Location = new Point(318, 150); pictureBox1.BackColor = Color.FromArgb(17, 217, 34); prevButton.Visible = false; } else if (state.Equals("finalBlue")) { pictureBox1.Visible = true; nextButton.Visible = true; nextButton.Tag = "Restart"; nextButton.Text = "Restart"; pictureBox1.Location = new Point(318, 150); pictureBox1.BackColor = Color.FromArgb(38, 107, 255); prevButton.Visible = false; } else if (state.Equals("finalRed")) { pictureBox1.Visible = true; nextButton.Visible = true; nextButton.Tag = "Restart"; nextButton.Text = "Restart"; pictureBox1.Location = new Point(318, 150); pictureBox1.BackColor = Color.FromArgb(255, 38, 38); prevButton.Visible = false; } else if (state.Equals("finalBeige")) { pictureBox1.Visible = true; nextButton.Visible = true; nextButton.Tag = "Restart"; nextButton.Text = "Restart"; pictureBox1.Location = new Point(318, 150); pictureBox1.BackColor = Color.FromArgb(247, 231, 139); prevButton.Visible = false; } else if (state.Equals("finalNavy")) { pictureBox1.Visible = true; nextButton.Visible = true; nextButton.Tag = "Restart"; nextButton.Text = "Restart"; pictureBox1.Location = new Point(318, 150); pictureBox1.BackColor = Color.FromArgb(22, 8, 66); prevButton.Visible = false; } else if (state.Equals("finalOrange")) { pictureBox1.Visible = true; nextButton.Visible = true; nextButton.Tag = "Restart"; nextButton.Text = "Restart"; pictureBox1.Location = new Point(318, 150); pictureBox1.BackColor = Color.FromArgb(255, 157, 0); prevButton.Visible = false; } else if (state.Equals("finalPink")) { pictureBox1.Visible = true; nextButton.Visible = true; nextButton.Tag = "Restart"; nextButton.Text = "Restart"; pictureBox1.Location = new Point(318, 150); pictureBox1.BackColor = Color.FromArgb(255, 0, 132); prevButton.Visible = false; } else if (state.Equals("finalOrangeGreen")) { pictureBox1.Visible = true; pictureBox2.Visible = true; nextButton.Visible = true; nextButton.Tag = "Restart"; nextButton.Text = "Restart"; pictureBox1.Location = new Point(280, 150); pictureBox2.Location = new Point(360, 150); pictureBox1.BackColor = Color.FromArgb(255, 157, 0); pictureBox2.BackColor = Color.FromArgb(17, 217, 34); prevButton.Visible = false; } else if (state.Equals("finalGreenWhiteBeige")) { pictureBox1.Visible = true; pictureBox2.Visible = true; pictureBox3.Visible = true; nextButton.Visible = true; nextButton.Tag = "Restart"; nextButton.Text = "Restart"; pictureBox1.Location = new Point(250, 150); pictureBox2.Location = new Point(330, 150); pictureBox3.Location = new Point(390, 150); pictureBox1.BackColor = Color.FromArgb(17, 217, 34); pictureBox2.BackColor = Color.White; pictureBox3.BackColor = Color.FromArgb(247, 231, 139); prevButton.Visible = false; } else { pictureBox1.Visible = false; pictureBox2.Visible = false; pictureBox3.Visible = false; nextButton.Visible = true; nextButton.Tag = "Next"; prevButton.Tag = "Prev"; prevButton.Visible = true; } using (MultifieldValue validAnswers = (MultifieldValue)evalFact.GetFactSlot("valid-answers")) { String selected = evalFact.GetFactSlot("response").ToString(); for (int i = 0; i < validAnswers.Count; i++) { RadioButton rb = new RadioButton(); rb.Text = (SymbolValue)validAnswers[i]; rb.Tag = rb.Text; rb.Visible = true; rb.Location = new Point(200, 30 * (i + 1)); choicesPanel.Controls.Add(rb); } } messageLabel.Text = GetString((SymbolValue)evalFact.GetFactSlot("display")); } }
public override DecisionResult IdentifyTreatment() { List <Treatment> treatments = new List <Treatment>(); List <Action> actions = new List <Action>(); List <Reason> reasons = new List <Reason>(); //// Step 1 //string potassiumValue = null; //List<Value> Values = testData.Values("potassium"); //if (Values.Count > 0) //{ // potassiumValue = Values[0].ToString(); //} //// Step 2 //string Dialysis = "NO"; //Values = testData.Values("dialysis"); //if (Values.Count() > 0) //{ // Dialysis = Values[0].ToString().ToUpper(); //} //// Step 3 //string currentGFR = ""; //string GFRTrend = "Unknown"; //Values = testData.Values("gfr"); //double slope = 0; //if (Values.Count() > 0) //{ // currentGFR = Values[0].ToString(); //} //if (Values.Count() > 1) //{ // List<double> weights = new List<double>(); // List<double> offsets = new List<double>(); // List<double> values = new List<double>(); // foreach (Value value in Values) // { // double days = value.offset / 86400; // offsets.Add(days); // values.Add((double)value.value); // double new_weight = Math.Pow((1 - test_trend_decay_per_day), days); // weights.Add(Math.Max(0.125, new_weight)); // } // double[] lsrResults = LeastSquaresWeightedBestFitLine1(offsets.ToArray(), values.ToArray(), weights.ToArray()); // //intercept = results[0]; // slope = -lsrResults[1]; // // double diff = (y_values[0] - intercept) / intercept; // GFRTrend = "Stable"; // if (slope / (double)Values[0].value > 0.1) // { // GFRTrend = "Improving"; // } // if (slope / (double)Values[0].value < -0.1) // { // GFRTrend = "Worsening"; // } //} //Values = testData.Values("urine production"); //string urineProduction = null; //if (Values.Count() > 0) //{ // double urineProductionValue = (double)Values[0].value; // if (urineProductionValue > 0.5) urineProduction = "Normal"; // else if (urineProductionValue >= 0.4) urineProduction = "Marginal"; // else if (urineProductionValue >= 0.1) urineProduction = "Oliguric"; // else urineProduction = "Anuric"; //} //else //{ // urineProduction = "Unknown"; //} //// Step 4. //string TTTstate = "NONE"; //string timeToRewarming = "over-4-hours"; //Values = testData.Values("TTT-state"); //if (Values.Count() > 0) //{ // TTTstate = Values[0].ToString().ToUpper(); //} //Values = testData.Values("time-to-rewarming"); //if (Values.Count() > 0) //{ // timeToRewarming = Values[0].ToString(); //} //// Step 5. //string pastLoopDiuretic = "NO"; //Values = testData.Values("past-loop-diuretic"); //if (Values.Count() > 0) //{ // pastLoopDiuretic = Values[0].ToString().ToUpper(); //} //// Step 6. //string diarrheaValue = "NO"; //Values = testData.Values("past-diarrhea"); //if (Values.Count() > 0) //{ // diarrheaValue = Values[0].ToString().ToUpper(); //} //// Step 7. //string PastSupplementation = "NONE"; //string PotassiumTrend = "Stable"; //Values = treatmentData.Values("supplement24hrs"); //if (Values.Count() > 0 && Values[0].ToString() != "0") //{ // if(Values[0].value is double) // { // double value = (double)Values[0].value; // if (value == 0) PastSupplementation = "NONE"; // else if(value <= 30) PastSupplementation = "20mEq"; // else if (value <= 50) PastSupplementation = "40mEq"; // else PastSupplementation = "60mEq"; // } //} //Values = testData.Values("potassium"); //if (Values.Count() > 1) //{ // if((double)Values[0].value - (double)Values[1].value >= 0.3) // { // PotassiumTrend = "Increasing"; // } // if ((double)Values[0].value - (double)Values[1].value <= -0.3) // { // PotassiumTrend = "Decreasing"; // } //} //// Step 8. //Values = testData.Values("potassium"); //string potassiumRange = null; //if (Values.Count > 0) //{ // double potassium = (double)Values[0].value; // if (3.8 <= potassium) potassiumRange = "HIGH"; // else if (3.4 <= potassium && potassium < 3.8) potassiumRange = "MED"; // else if (3.0 <= potassium && potassium < 3.4) potassiumRange = "LOW"; // else potassiumRange = "VLOW"; //} //// Step 9. //// Removed by Tzvi //// Step 10. //string phosphorusRange = "UNKNOWN"; //Values = testData.Values("phosphorus"); //if (Values.Count > 0) //{ // double potassium = (double)Values[0].value; // if (2.0 <= potassium) phosphorusRange = "HIGH"; // else if (1.5 < potassium && potassium < 2.0) phosphorusRange = "MED"; // else phosphorusRange = "LOW"; //} //// Step 11. //string calciumValue = "1.0"; //Values = testData.Values("calcium, ionized"); //if (Values.Count() > 0) //{ // calciumValue = Values[0].ToString(); //} //if (actions.Count == 0) // no errors //{ // Clear old values //clips.Eval("(clear)"); //clips.Load("Hypokalemia.clp"); //clips.Eval("(reset)"); // load facts from deffacts constructs. clips.Clear(); clips.Load("HypokalemiaV2.clp"); clips.Reset(); // load facts from deffacts constructs. // Set values in CLIPS List <string> dataValues = DataValues(); foreach (string dataValue in dataValues) { clips.AssertString(dataValue); } //// clips.AssertString("(diagnosis (patient " + patientID + ") (name Hypokalemia))"); // if (Dialysis != "") // { // //(data-value (name dialysis) (patient 123456) (value NO)) // string dataValue = "(data-value (patient " + patientID + ") (name dialysis) (value " + Dialysis + "))"; // clips.AssertString(dataValue); // } // if (currentGFR != "") // { // //(data-value (name GFR) (patient 123456) (value 45)) // string dataValue = "(data-value (patient " + patientID + ") (name GFR) (value " + currentGFR + "))"; // clips.AssertString(dataValue); // } // if (GFRTrend != "") // { // //(data-value (name GFR-trend) (patient 123456) (value Stable)) // string dataValue = "(data-value (patient " + patientID + ") (name GFR-trend) (value " + GFRTrend + "))"; // clips.AssertString(dataValue); // } // if (urineProduction != null) // { // //(data-value (name Urine-production) (patient 123456) (value Normal)) // string dataValue = "(data-value (patient " + patientID + ") (name Urine-production) (value " + urineProduction + "))"; // clips.AssertString(dataValue); // } // if (potassiumValue != null) // { // //(data-value (name potassium) (patient 123456) (value 3.5)) // string dataValue = "(data-value (patient " + patientID + ") (name potassium) (value " + potassiumValue + "))"; // clips.AssertString(dataValue); // } // if (potassiumRange != null) // { // //(data-value (name potassium) (patient 123456) (value 3.5)) // string dataValue = "(data-value (patient " + patientID + ") (name potassium-range) (value " + potassiumRange + "))"; // clips.AssertString(dataValue); // } // if (phosphorusRange != null) // { // //(data-value (name phosphorus) (patient 123456) (value 2.5)) // string dataValue = "(data-value (patient " + patientID + ") (name phosphorus-range) (value " + phosphorusRange + "))"; // clips.AssertString(dataValue); // } // if (calciumValue != null) // { // //(data-value (name calcium) (patient 123456) (value 2.0)) // string dataValue = "(data-value (patient " + patientID + ") (name calcium) (value " + calciumValue + "))"; // clips.AssertString(dataValue); // } // if (diarrheaValue != null) // { // //(data-value (name past-diarrhea) (patient 123456) (value NO)) // string dataValue = "(data-value (patient " + patientID + ") (name past-diarrhea) (value " + diarrheaValue + "))"; // clips.AssertString(dataValue); // } // if (TTTstate != null) // { // //(data-value (name TTT-state) (patient 123456) (value COOLING)) // string dataValue = "(data-value (patient " + patientID + ") (name TTT-state) (value " + TTTstate + "))"; // clips.AssertString(dataValue); // } // if (timeToRewarming != null) // { // //(data-value (name time-to-rewarming) (patient 123456) (value over-4-hours)) // string dataValue = "(data-value (patient " + patientID + ") (name time-to-rewarming) (value " + timeToRewarming + "))"; // clips.AssertString(dataValue); // } // if (pastLoopDiuretic != null) // { // //(data-value (name past-loop-diuretic) (patient 123456) (value NO)) // string dataValue = "(data-value (patient " + patientID + ") (name past-loop-diuretic) (value " + pastLoopDiuretic + "))"; // clips.AssertString(dataValue); // } // if (PastSupplementation != null) // { // //(data-value (name Past-Supplementation) (patient 123456) (value NONE)) // string dataValue = "(data-value (patient " + patientID + ") (name Past-Supplementation) (value " + PastSupplementation + "))"; // clips.AssertString(dataValue); // } // if (PotassiumTrend != null) // { // //(data-value (name Potassium-trend) (patient 123456) (value Stable)) // string dataValue = "(data-value (patient " + patientID + ") (name Potassium-trend) (value " + PotassiumTrend + "))"; // clips.AssertString(dataValue); // } clips.AssertString("(state (patient " + patientID + ") (name Step-1))"); clips.Run(); MultifieldValue stateFacts = clips.Eval("(find-all-facts ((?fact state)) TRUE)") as MultifieldValue; foreach (FactAddressValue fv in stateFacts) { string name = ((SymbolValue)fv.GetFactSlot("name")); } // Get values from CLIPS MultifieldValue treatmentFacts = clips.Eval("(find-all-facts ((?treatment treatment)) TRUE)") as MultifieldValue; foreach (FactAddressValue fv in treatmentFacts) { Treatment treatment = new Treatment(); //treatment.index = (int)((NumberValue)fv.GetFactSlot("index")).GetIntegerValue(); //treatment.type = ((LexemeValue)fv.GetFactSlot("type")).GetLexemeValue(); //treatment.med = ((LexemeValue)fv.GetFactSlot("med")).GetLexemeValue(); //treatment.quantity = ((NumberValue)fv.GetFactSlot("quantity")).GetFloatValue(); //treatment.units = ((LexemeValue)fv.GetFactSlot("units")).GetLexemeValue(); //treatment.route = ((LexemeValue)fv.GetFactSlot("route")).GetLexemeValue(); object tempIndex = fv.GetFactSlot("index"); if (tempIndex is FloatValue) { FloatValue tempValue = (FloatValue)tempIndex; treatment.index = (float)(tempValue); treatment.type = (string)((SymbolValue)fv.GetFactSlot("type")); } else if (tempIndex is IntegerValue) { IntegerValue tempValue = (IntegerValue)tempIndex; treatment.index = (int)(tempValue); treatment.type = (string)((SymbolValue)fv.GetFactSlot("type")); } else { treatment.type = tempIndex.ToString(); } //treatment.med = (string)((SymbolValue)fv.GetFactSlot("med")); //PrimitiveValue quantitySlot = fv.GetFactSlot("quantity"); //if (quantitySlot is FloatValue) //{ // treatment.quantity = (double)((FloatValue)quantitySlot); //} //else //{ // treatment.quantity = (int)((IntegerValue)quantitySlot); //} //treatment.units = (string)((SymbolValue)fv.GetFactSlot("units")); treatment.route = ((SymbolValue)fv.GetFactSlot("routes")); treatments.Add(treatment); } MultifieldValue actionFacts = clips.Eval("(find-all-facts ((?action action)) TRUE)") as MultifieldValue; foreach (FactAddressValue fv in actionFacts) { Action action = new Action(); string actionText = ((SymbolValue)fv.GetFactSlot("text")).ToString(); if (!actions.Any(a => a.text == actionText)) { action.text = actionText; actions.Add(action); } } MultifieldValue reasonFacts = clips.Eval("(find-all-facts ((?reason reason)) TRUE)") as MultifieldValue; foreach (FactAddressValue fv in reasonFacts) { Reason reason = new Reason( 0, // (int)((IntegerValue)fv.GetFactSlot("level")), ((SymbolValue)fv.GetFactSlot("rule")).ToString(), ReplaceReasonText(((SymbolValue)fv.GetFactSlot("text")).ToString())); reasons.Add(reason); } //} return(new DecisionResult(treatments, actions, reasons)); }