<?php
/*******************************************************************************
 * Copyright (c) 2014 Eclipse Foundation and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *    Christopher Guindon (Eclipse Foundation) - Initial implementation
 *    Baha El Kassaby (Diamond Light Source) - Initial DAWNSci eclipse page content
 *******************************************************************************/
?>

<!-- Main content area -->
<div id="midcolumn">
	<h1><?php print $pageTitle;?></h1>
	<img style="float: right; width: 303px; height: 228px" alt="DAWNSci Logo"
		src="/dawnsci/images/dawnsci_logo.png">
	<p>This project provides features to allow scientific software to be
		inter-operable. Algorithms exist today which could be shared between
		existing Eclipse-based applications however in practice they describe
		data and do plotting using specific APIs which are not inter-operable
		or interchangeable. This project defines a structure to make this a
		thing of the past. It defines an inter-operable layer upon which to
		build RCP applications such that your user interface, data or plotting
		can be reused by others.</p>
	<h3>At the core of DAWN</h3>
	<p>Data Analysis WorkbeNch (DAWN) is an eclipse based workbench for
		doing scientific data analysis. It implements sophisticated support
		for :
	
	<li>(1) Visualization of data in 1D, 2D and 3D</li>
	<li>(2) Python script development, debugging and execution</li>
	<li>(3) Processing and Workflows for visual algorithms analyzing
		scientific data DAWN is not restricted to one scientific domain.</li>
	It is developed by and for the synchrotron community foremost but has
	strong overlap with other communities like neutron scattering, photon
	science and any scientific communities with the above or similar needs.
	If you would like to know more, the DAWN project has an active mailing
	list which is open to subscribers Jiscmail Mailing list. Alternatively
	you could follow us on Twitter. Dawn is open source and available on
	github.
	</p>
	<div class="news-list">
		<h2>
			<a href="/community/news/eclipsenews.php">Updates</a>
		</h2>
		<div class="news_item">
			<div class="news_item_date">2015/11/06</div>
			<div class="news_item_title">
				<h3>
					<a
						href="http://www.dawnsci.org/news/dawn110releaseavailablefordownload">
						DAWN version 1.10</a>
				</h3>
			</div>
			<div class="news_item_description">DAWN latest version is now available for download</div>
		</div>
		<div class="news_item">
			<div class="news_item_date">March 2015</div>
			<div class="news_item_title">
				<h3>
					<a
						href="http://journals.iucr.org/s/issues/2015/03/00/fv5032/fv5032.pdf">DAWN paper published</a>
				</h3>
			</div>
			<div class="news_item_description">Paper about DAWN in the Journal of Synchrotron Radiation</div>
		</div>
	</div>
</div>
<!-- ./end  #midcolumn -->

<!-- Start of the right column -->
<div id="rightcolumn">
	<div class="sideitem">
		<h2>Related Links</h2>
		<p align="center">
			<a href="https://science.eclipse.org"> <img
				src="/dawnsci/images/science_wg.png">
			</a>
		</p>
		<ul>
		</ul>
	</div>
	<div class="sideitem">
		<h2>Eclipse DAWNSci on Twitter</h2>
		<a class="twitter-timeline"
			href="https://twitter.com/search?q=Dawnscience"
			data-widget-id="664025175432802304">Tweets about Dawnscience</a>
		<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+"://platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
	</div>
</div>
<!-- ./end  #rightcolumn -->