<?php  																														require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/app.class.php");	require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/nav.class.php"); 	require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/menu.class.php"); 	$App 	= new App();	$Nav	= new Nav();	$Menu 	= new Menu();		include($App->getProjectCommon());    # All on the same line to unclutter the user's desktop'

#*****************************************************************************
#
# template.php
#
# Author: 		Yossi Mesika
# Date:			2009-07-19
#
# Description: Main web page for STEM
#
#
#****************************************************************************

#
# Begin: page-specific settings.  Change these.
$pageTitle 		= "STEM Introduction";
$pageKeywords	= "STEM";
$pageAuthor		= "Stefan Edlund, Yossi Mesika";

# Add page-specific Nav bars here
# Format is Link text, link URL (can be http://www.someothersite.com/), target (_self, _blank), level (1, 2 or 3)
# $Nav->addNavSeparator("My Page Links", 	"downloads.php");
# $Nav->addCustomNav("My Link", "mypage.php", "_self", 3);
# $Nav->addCustomNav("Google", "http://www.google.com/", "_blank", 3);


# End: page-specific settings
#
	function getRssFeed()
	{
		$rssFilePath = "http://dev.eclipse.org/newslists/news.eclipse.stem/maillist.rss";
		//$rssFilePath = $_SERVER['DOCUMENT_ROOT'] . "/stem/feeds/news.xml";

		$xmlData = file_get_contents($rssFilePath);

		$xmlResult = new SimpleXMLElement($xmlData);

		$rssResults = $xmlResult->channel->item;

		$rssMaxResults = 5;


		if (sizeof($rssResults) > 0) {
			$rssCount = 0;
			foreach ($rssResults as $rssResult) {
				if ($rssCount >= $rssMaxResults) {
					break;
				}

				$title = $rssResult->title;
				$title = substr($title, 20); // Skip [news.eclipse.stem]
				$url = $rssResult->link;

				$date = strtotime($rssResult->pubDate);
				if (!$date || $date === -1) {
					$date = time();
				}
				$formattedDate = date('d-M y', $date);
				echo "<img src=\"images/arrow.jpg\" width=\"11\" height=\"10\" alt=\"\" border=\"0\">&nbsp;" .$formattedDate . ": &nbsp;<a href=\"". $url ."\" target=\"_blank\">". $title ."</a><br />";

				$rssCount++;
			}
		}
	}

	function getData($file, $maxresults)
	{
		$filePath = $_SERVER['DOCUMENT_ROOT'] . $file;

		$xmlData = file_get_contents($filePath);

		$xmlResult = new SimpleXMLElement($xmlData);

		$results = $xmlResult->item;

		echo $results;
		if (sizeof($results) > 0) {
			$count = 0;
			foreach ($results as $result) {
				if ($count >= $maxresults) {
					break;
				}

				$title = $result->title;
				$url = $result->link;
				$authors = $result->authors;
				$source = $result->source;
				$other = $result->other;

				$markup = "";
				if(!empty($authors))
				   $markup = $markup. $authors;
				if(!empty($url))
					$markup = $markup. "<a href=\"". $url ."\" target=\"_blank\">";
				if(!empty($title))
					$markup = $markup. $title."</a>&nbsp;";
				if(!empty($source))
					$markup = $markup. "<div style=\"font-style: italic;\">".$source."</div>";
				if(!empty($other))
					$markup = $markup. "&nbsp;" . $other;
				$markup = $markup . "<br/>";

				echo $markup;
				$count++;
			}
		}
	}

# Paste your HTML content between the EOHTML markers!
ob_start();
?>

    <div id="maincontent">
    	<div style="padding:3px;">
          	<img alt="STEM Banner" src="/stem/images/STEM_TOP_BAR.gif" width="750" height="63"/>
         </div>
	<div id="midcolumn">

		
		 <div class="homeitem3col">
			<a name="about"></a>
			<h3>More About STEM ... </h3>
          
        </div>
		<h1><center>The Spatiotemporal Epidemiological Modeler (STEM) </center></h1>

		<div class="homeitem3col">
			<b>
			<a name="introduction"></a>
			</b>
			<p>An open source tool, the 
			Spatiotemporal Epidemiological Modeler (STEM) allows users to create 
			spatial and temporal models of emerging infectious diseases. 
			Designed to be extensible, flexible and re-usable, STEM provides a 
			set of <a href="http://wiki.eclipse.org/Analysis">validation tools</a>
			researchers and public health officials can 
			use to understand the spread of disease in space and time and to 
			assess the impact of 
			<a href="http://wiki.eclipse.org/Batch_Mode_%28Running_Experiments%29">preventive actions</a> 
			in an increasingly global world. 
			</p>
			<p>
			Platform independent, STEM is available in versions for Microsoft, 
			Apple, and Linux operating systems. Users can access all its main 
			components as separate <a href="http://wiki.eclipse.org/index.php/STEM#STEM_Plugins">plug-ins</a> 
			to build on existing models and create new ones.
			</p>
			<p>
			Users can independently deploy the plug-ins - the core 
			representational framework, graphical user interface, simulation 
			engine, disease model computations, and various data sets - and use 
			them with declarative software extension points to develop, run, and 
			analyze sophisticated simulations.
			 </p>
			 <p>
			STEM's 
			<a href="http://wiki.eclipse.org/index.php/STEM#Data">data sets</a> describe 
			the geography, transportation systems (including airports and roads), 
			and population for the world's 244 countries and dependent areas down to administrative level 2 for 
			most countries (the county level in the United States).
			</p>
			<p>
			Its disease model computations are based on 
			<a href="http://wiki.eclipse.org/Introduction_to_Compartment_Models">compartment models</a> 
			Parameters within the models can be modified 
			by the researcher who, for example, may wish to adjust the 
			infectious period or the initial number of infectious individuals.
			STEM is designed to make it easy for developers and researchers to plug in their choice of models. 
			It comes with a large number of existing compartment models and a new model building framework that allows 
			users to rapidly extend existing models or to create entirely new models. The model building framework provides 
			a simple graphical users interface and automatically generates all of the model code and hot injects the code 
			into STEM at runtime. In many cases, no knowledge of Eclipse or Java is required. The STEM code generator even 
			allows users to build models affected by changes in climate data.
			</p>
			<p>
			Any STEM model can be run either stochastically or deterministically - simply by switching between solver plugins. 
			Users can choose between many different numerical solvers of ordinary differential equations (including finite difference, 
			Runge-Kutta, 4 solvers from The Apache Commons Mathematics Library, and Stochastic). The stochastic solver computes integer 
			(individual) based transitions picking randomly from a binomial distribution (also from Apach Math). Simulation results can 
			be output with a choice of pluggable loggers, including delimiting files, video loggers, and map loggers. STEM can be used 
			to study quite complex models (for example a model of Dengue Fever with 51 differential equations) and can run global scale 
			simulations. <a href="http://wiki.eclipse.org/index.php/STEM">Click here</a> for the complete STEM documentation. 
			</p>
			<p>
			Tools provided by STEM support researchers in a range of functions, 
			as they perform analysis, fitting, and model comparisons across 
			multiple simulations and data sets.
			</p>
			<p>
			Using the <a href="http://wiki.eclipse.org/Analysis">Analysis Perspective</a>, 
			researchers can visualize the results of STEM scenarios from log files and compare two scenarios 
			side-by-side across different dimensions. Utilities in this 
			perspective can estimate disease parameters from imported time 
			series data and integrate historic incidence data to arrive at 
			counts for disease models over time.
			</p>
			<p>
			Using the <a href="http://wiki.eclipse.org/Creating_a_STEM_Scenario">Designer Perspective</a>, 
			users can create custom <a href="http://wiki.eclipse.org/Batch_Mode_%28Running_Experiments%29">experiments</a>,  
			which express public health policies as a collection of
			predicates, modifiers, and triggers. Researchers can run a collection of simulations, 
			based on a single scenario, modifying each 
			simulation slightly by varying one or more parameters, and examine 
			how the model is affected.
			</p>
			<p>
			With the <a href="http://wiki.eclipse.org/STEM_Design_Document">components</a>
			STEM provides, users can create their own model 
			for a country, a region, or even the entire world. If there is a 
			sub-model for the area under study, it can simply be plugged into 
			simulations by referencing it. For example, a country model can 
			contain a sub-model for its transportation infrastructure and that 
			sub-model itself can contain sub-models for air, rail, and/or roads.
			</p>
			<p>
			The ability of one STEM model to contain another allows researchers 
			to plug detailed and highly complex subcomponents into a single 
			encompassing model. Because the underlying components are the same, 
			models can be easily shared and their components validated. One 
			researcher can import another researcher's specialized disease 
			model, combine it with an existing country model that includes 
			population demographics, and re-export the new combination for 
			others to use.
			</p>
			<p>
			By making data (with descriptive metadata) available as plug-ins, 
			STEM makes new avenues of collaboration possible. For example, 
			biologists studying bird migrations can contribute data of use to 
			epidemiologists studying avian influenza. Economists studying 
			workforce productivity contribute data of use to public health 
			officials studying the economic impact of pandemic influenza. 
			</p>
			<p>
			By providing a common collaborative platform and components that are 
			extensible, flexible and re-usable, STEM makes possible greater 
			understanding of the phenomena that affect public health and 
			potentially have social, economic, and environmental impacts as 
			well. <br>
			</p>
			<p>
            <a href="./index.php">... home</a>
            </p>
            </p>
		</div>
	</div>

	<div id="rightcolumn">
		<div class="sideitem">
			<h6>Videos and presentations</h6>
			<?php getData('/stem/data/videos.xml', 10); ?>
		</div>
		<div class="sideitem">
			<h6>Downloadable Scenarios</h6>
			<?php getData('/stem/data/scenarios.xml', 10); ?>
		</div>
		<div class="sideitem">
			<h6>Upcoming talks</h6>
			<?php getData('/stem/data/talks.xml', 10); ?>
		</div>
		<div class="sideitem">
			<h6>Recent Publications</h6>
			<?php getData('/stem/data/pubs.xml', 10); ?>
			<br.>
			<i><a href="http://wiki.eclipse.org/STEM#Publications_and_Presentations_on_STEM">more...</a></i>
		</div>
		<div class="sideitem">
			<h6>Acknowledgements</h6>
			<img alt="Development of STEM is supported in part by USAF/SG" src="/stem/images/usaf.gif" style="float: left;width:150px;"/>
			<?php getData('/stem/data/acknowledgements.xml', 10); ?>
		</div>
	</div>

</div>

<?php

$html .= ob_get_contents();
ob_end_clean();

	# Generate the web page
	$App->generatePage($theme, $Menu, $Nav, $pageAuthor, $pageKeywords,$pageTitle, $html);

?>
