make macdonald ross stochastic
diff --git a/org.eclipse.stem/models/epidemiology/org.eclipse.stem.diseasemodels.vector/src/org/eclipse/stem/diseasemodels/vector/impl/MacdonaldRossDiseaseModelImpl.java b/org.eclipse.stem/models/epidemiology/org.eclipse.stem.diseasemodels.vector/src/org/eclipse/stem/diseasemodels/vector/impl/MacdonaldRossDiseaseModelImpl.java
index bce1e81..487d06f 100644
--- a/org.eclipse.stem/models/epidemiology/org.eclipse.stem.diseasemodels.vector/src/org/eclipse/stem/diseasemodels/vector/impl/MacdonaldRossDiseaseModelImpl.java
+++ b/org.eclipse.stem/models/epidemiology/org.eclipse.stem.diseasemodels.vector/src/org/eclipse/stem/diseasemodels/vector/impl/MacdonaldRossDiseaseModelImpl.java
@@ -3,6 +3,9 @@
 import org.eclipse.emf.common.util.EList;
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.stem.core.graph.DynamicLabel;
+import org.eclipse.stem.core.graph.Exchange;
+import org.eclipse.stem.core.graph.ExchangePool;
+import org.eclipse.stem.core.graph.ExchangeType;
 import org.eclipse.stem.core.graph.IntegrationLabel;
 import org.eclipse.stem.core.graph.LabelValue;
 import org.eclipse.stem.core.graph.Node;
@@ -566,6 +569,8 @@
 				double totalVectorPop = vectorValue.getPopulationCount();
 
 				double absIChange=0.0, absEChange=0.0, absSChange=0.0, absRChange = 0.0;
+				// SED 03/14/19. For stochastic modeling
+				double numberOfSusceptibleToExposed = 0.0, numberOfExposedToInfectious=0.0,numberOfInfectedToRecovered=0.0, numberOfRecoveredToSusceptible=0.0;
 				double incidence = 0.0;
 				// Make sure we have both vectors and humans
 				if(totalHumanPop > 0.0) {
@@ -594,9 +599,57 @@
 					absRChange = fracRChange * totalHumanPop;
 
 					incidence = dydt*totalHumanPop;
+					// SED 03/14/19
+					numberOfSusceptibleToExposed = incidence;
+					numberOfExposedToInfectious = adjustedIncubationRate*seirVal.getE();
+					numberOfInfectedToRecovered = adjustedRecoveryRate*seirVal.getI();
+					numberOfRecoveredToSusceptible = adjustedImmunityLossRate*seirVal.getR();
 					//			if(absIChange + absSChange + absEChange +absRChange != 0.0)
 					//				Activator.logInformation("Mismatch "+(absIChange + absSChange + absEChange +absRChange));
 				}
+				
+				
+
+				/////////////////////////////////////////////////////////////////////////////
+				// SED 03/14/2019
+				// added to express the transitions. Necessary to support stochastic modeling
+				// S->E
+				Exchange seExchange = (Exchange)ExchangePool.POOL.get(); 
+				seExchange.setSource(StandardPackage.eINSTANCE.getStandardDiseaseModelLabelValue_S());
+				seExchange.setTarget(StandardPackage.eINSTANCE.getSEIRLabelValue_E());
+				seExchange.setCount(numberOfSusceptibleToExposed);
+				seExchange.getForIncidence().add(StandardPackage.eINSTANCE.getStandardDiseaseModelLabelValue_Incidence());
+				seExchange.setType(ExchangeType.COMPARTMENT_TRANSITION);
+				deltaValue.getDepartures().add(seExchange);
+
+				// E->I
+				Exchange eiExchange = (Exchange)ExchangePool.POOL.get(); 
+				eiExchange.setSource(StandardPackage.eINSTANCE.getSEIRLabelValue_E());
+				eiExchange.setTarget(StandardPackage.eINSTANCE.getSILabelValue_I());
+				eiExchange.setCount(numberOfExposedToInfectious);
+				eiExchange.setType(ExchangeType.COMPARTMENT_TRANSITION);
+				deltaValue.getDepartures().add(eiExchange);
+
+				// I->R
+				Exchange irExchange = (Exchange)ExchangePool.POOL.get(); 
+				irExchange.setSource(StandardPackage.eINSTANCE.getSILabelValue_I());
+				irExchange.setTarget(StandardPackage.eINSTANCE.getSIRLabelValue_R());
+				irExchange.setCount(numberOfInfectedToRecovered);
+				irExchange.setType(ExchangeType.COMPARTMENT_TRANSITION);
+				deltaValue.getDepartures().add(irExchange);
+
+				// R->S
+				Exchange rsExchange = (Exchange)ExchangePool.POOL.get(); 
+				rsExchange.setSource(StandardPackage.eINSTANCE.getSIRLabelValue_R());
+				rsExchange.setTarget(StandardPackage.eINSTANCE.getStandardDiseaseModelLabelValue_S());
+				rsExchange.setCount(numberOfRecoveredToSusceptible);
+				rsExchange.setType(ExchangeType.COMPARTMENT_TRANSITION);
+				deltaValue.getDepartures().add(rsExchange);
+				
+		
+				// added to express the transitions. Necessary to support stochastic modeling
+				/////////////////////////////////////////////////////////////////////////////
+				
 				SEIRLabelValue retV = (SEIRLabelValue)deltaValue;
 				retV.setI(absIChange);
 				retV.setS(absSChange);
@@ -621,6 +674,9 @@
 				double totalVectorPop = vectorVal.getPopulationCount();
 
 				double absIChange=0.0, absEChange=0.0, absSChange=0.0;
+				// SED 03/14/19. For stochastic modeling
+				double numberOfSusceptibleToExposed = 0.0, numberOfExposedToInfectious=0.0;
+
 				// Find the vector population
 				if(totalVectorPop>0.0) {
 					SEIRLabel humanPop = findDiseaseLabel(diseaseLabel.getNode(), this.getPopulationIdentifier());
@@ -687,10 +743,36 @@
 					absEChange = fracEChange * totalVectorPop;
 					absSChange = fracSChange * totalVectorPop;
 
+					// SED 03/14/19
+					numberOfSusceptibleToExposed = -absSChange;
+					numberOfExposedToInfectious = adjustedIncubationRate*vectorVal.getE();
+					
 					//				if(absIChange + absSChange + absEChange != 0.0)
 					//					Activator.logInformation("Mismatch vector"+(absIChange + absSChange + absEChange));
 				} 
 
+				/////////////////////////////////////////////////////////////////////////////
+				// SED 03/14/2019
+				// added to express the transitions. Necessary to support stochastic modeling
+				// S->E
+				Exchange seExchange = (Exchange)ExchangePool.POOL.get(); 
+				seExchange.setSource(StandardPackage.eINSTANCE.getStandardDiseaseModelLabelValue_S());
+				seExchange.setTarget(StandardPackage.eINSTANCE.getSEIRLabelValue_E());
+				seExchange.setCount(numberOfSusceptibleToExposed);
+				seExchange.getForIncidence().add(StandardPackage.eINSTANCE.getStandardDiseaseModelLabelValue_Incidence());
+				seExchange.setType(ExchangeType.COMPARTMENT_TRANSITION);
+				deltaValue.getDepartures().add(seExchange);
+
+				// E->I
+				Exchange eiExchange = (Exchange)ExchangePool.POOL.get(); 
+				eiExchange.setSource(StandardPackage.eINSTANCE.getSEIRLabelValue_E());
+				eiExchange.setTarget(StandardPackage.eINSTANCE.getSILabelValue_I());
+				eiExchange.setCount(numberOfExposedToInfectious);
+				eiExchange.setType(ExchangeType.COMPARTMENT_TRANSITION);
+				deltaValue.getDepartures().add(eiExchange);
+		
+				// added to express the transitions. Necessary to support stochastic modeling
+				/////////////////////////////////////////////////////////////////////////////
 				SEIRLabelValue retV = (SEIRLabelValue)deltaValue;
 				retV.setI(absIChange);
 				retV.setS(absSChange);