<?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/30/03</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 -->