public void analyseDLGFlights() {
		window.altimeterChart.clearDLGAnalysis();
		
		// ask the user which parts of the analysis they wish to carry out
		DLGAnalysisDialog dialog = new DLGAnalysisDialog(this);
		dialog.setVisible(true);
		if (dialog.isSuccessful()) {	
			DLGFlightAnalyser finder = new DLGFlightAnalyser();
			List<DLGFlight> flights = finder.findDLGLaunches(flightLog.getAltitude(), flightLog.logInterval);
			if (dialog.shouldCorrectBaseline()) {
				// correct the launch heights
				double[] newAltData = finder.correctDLGBaseline(flightLog.getAltitude(), flights);
				flightLog.setAltitude(newAltData);
				// update the plot
				window.altimeterChart.setAltitudeData(flightLog.getAltitude(), flightLog.logInterval);
			}
			
			// plot the annotations
			if (dialog.shouldMarkLaunchHeights()) {
				for (DLGFlight d : flights) 
					window.altimeterChart.addDLGHeightAnnotation(d.launchIndex * flightLog.logInterval, d.launchHeight);
			}
			
			if (dialog.shouldMarkMaxHeights()) {
				for (DLGFlight d : flights) {
					if (d.launchHeight != d.maxHeight) 
						window.altimeterChart.addDLGMaxHeightAnnotation(d.maxIndex * flightLog.logInterval, d.maxHeight);
				}
			}
			
			for (DLGFlight d: flights)
				window.altimeterChart.addDLGStartAnnotation(d.startIndex * flightLog.logInterval, d.startHeight);

			if (dialog.shouldShowStatistics()) {
				// show the analysis results
				DLGAnalysisResultsWindow resWin = new DLGAnalysisResultsWindow(flights, getHeightUnits());
				resWin.setVisible(true);
			}
		}
	}