private void actionAnalyse( )
{
	DefaultMutableTreeNode
		selNd = getSelectedNode();
	if ( selNd != null )
	{
		int[] selIdxs = getNodeIndexList(selNd);
		if ( selIdxs.length == 1 )
		{
			LinkedList<double[]> audioList = audioVectors.get(selIdxs[0]);
			int m = audioList.size();
			if ( m > 0 )
			{
				NumberDialog numberDl = 
					new NumberDialog(this, "Number of independent components...", 1, 1, 32);
				if ( numberDl.open() )
				{
					int ics = numberDl.getNumber();
					// build the eigenvalue filter
					CompositeEVFilter filter = new CompositeEVFilter();
					filter.add(new BelowEVFilter(1.0e-12, false));
					filter.add(new SortingEVFilter(true, true));
					filter.add(new DialogEVFilter(this));
					// build an ICA configuration
					FastICAConfig config = new FastICAConfig(
						ics, FastICAConfig.Approach.DEFLATION,
						1.0, 1.0e-14, 400, null);
					// perform the independent component analysis
					double[][] audioMatrix = AudioVector.toMatrix(audioList.toArray(new double[1][]));
					FastICAThread ficaThread = 
						new FastICAThread(this, audioMatrix, config, new TanhCFunction(1.0), filter);
					ficaThread.start();
				}
			}
		}
	}
}