<?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>
	<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">2016/06/08</div>
			<div class="news_item_title">
				<h3>
					<a
						href="http://www.dawnsci.org/news/dawn21release">
						DAWN version 2.1</a>
				</h3>
			</div>
			<div class="news_item_description">DAWN version 2.1 has been released!</div>
		</div>
		<div class="news_item">
			<div class="news_item_date">2016/03/30</div>
			<div class="news_item_title">
				<h3>
					<a
						href="http://www.dawnsci.org/news/dawn20nowavailable">
						DAWN version 2.0</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">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>
		<p align="center">
			<a href="http://www.dawnsci.org"> <img
				src="/dawnsci/images/dawnsci_logo.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 -->