コード例 #1
0
ファイル: PropertyColumnScript.cs プロジェクト: Altaxo/Altaxo
		/// <summary>
		/// Executes the script. If no instance of the script object exists, a error message will be stored and the return value is false.
		/// If the script object exists, the data change notifications will be switched of (for all tables).
		/// Then the Execute function of this script object is called. Afterwards, the data changed notifications are switched on again.
		/// </summary>
		/// <param name="myColumn">The property column this script is working on.</param>
		/// <param name="reporter">Progress reporter that can be used by the script to report the progress of its work.</param>
		/// <returns>True if executed without exceptions, otherwise false.</returns>
		/// <remarks>If exceptions were thrown during execution, the exception messages are stored
		/// inside the column script and can be recalled by the Errors property.</remarks>
		public bool ExecuteWithSuspendedNotifications(Altaxo.Data.DataColumn myColumn, IProgressReporter reporter)
		{
			bool bSucceeded = true;
			Altaxo.Data.DataTableCollection myDataSet = null;

			// first, test some preconditions
			if (null == _scriptObject)
			{
				_errors = new string[1] { "Script Object is null" };
				return false;
			}

			Altaxo.Data.DataColumnCollection myColumnCollection = Altaxo.Data.DataColumnCollection.GetParentDataColumnCollectionOf(myColumn);

			Altaxo.Data.DataTable myTable = Altaxo.Data.DataTable.GetParentDataTableOf(myColumnCollection);

			myDataSet = Altaxo.Data.DataTableCollection.GetParentDataTableCollectionOf(myTable);

			IDisposable suspendToken = null;

			if (null != myDataSet)
				suspendToken = myDataSet.SuspendGetToken();
			else if (null != myTable)
				suspendToken = myTable.SuspendGetToken();
			else if (null != myColumnCollection)
				suspendToken = myColumnCollection.SuspendGetToken();
			else if (null != myColumn)
				suspendToken = myColumn.SuspendGetToken();

			try
			{
				((Altaxo.Calc.ColScriptExeBase)_scriptObject).Execute(myColumn, reporter);
			}
			catch (Exception ex)
			{
				bSucceeded = false;
				_errors = new string[1];
				_errors[0] = ex.ToString();
			}
			finally
			{
				if (null != suspendToken)
					suspendToken.Dispose();
			}

			return bSucceeded;
		}
コード例 #2
0
ファイル: CalculusCommands.cs プロジェクト: Altaxo/Altaxo
		public static void Interpolation(Altaxo.Data.DataColumn xCol, Altaxo.Data.DataColumn yCol,
			Calc.Interpolation.IInterpolationFunction interpolInstance, IROVector samplePoints,
			Altaxo.Data.DataColumn xRes, Altaxo.Data.DataColumn yRes)
		{
			int rows = Math.Min(xCol.Count, yCol.Count);
			IROVector yVec = DataColumnWrapper.ToROVector((INumericColumn)yCol, rows);
			IROVector xVec = DataColumnWrapper.ToROVector((INumericColumn)xCol, rows);

			interpolInstance.Interpolate(xVec, yVec);

			using (var suspendToken_xRes = xRes.SuspendGetToken())
			{
				using (var suspendToken_yRes = yRes.SuspendGetToken())
				{
					for (int i = 0; i < samplePoints.Length; i++)
					{
						//double r = i / (double)(parameters.NumberOfPoints - 1);
						//double x = parameters.XOrg * (1 - r) + parameters.XEnd * (r);
						double x = samplePoints[i];
						double y = interpolInstance.GetYOfX(x);
						xRes[i] = x;
						yRes[i] = y;
					}
					suspendToken_yRes.Resume();
				}
				suspendToken_xRes.Resume();
			}
		}
コード例 #3
0
ファイル: CalculusCommands.cs プロジェクト: Altaxo/Altaxo
		public static void SavitzkyGolay(SavitzkyGolayParameters parameters, Altaxo.Data.DataColumn yCol, Altaxo.Data.DataColumn xCol)
		{
			double spacing = 1;
			if (xCol is Data.INumericColumn)
			{
				Calc.LinearAlgebra.VectorSpacingEvaluator calcspace = new Calc.LinearAlgebra.VectorSpacingEvaluator(Calc.LinearAlgebra.DataColumnWrapper.ToROVector(xCol));
				if (!calcspace.HasValidSpaces || calcspace.HasInvalidSpaces)
				{
					Current.Gui.ErrorMessageBox(string.Format("The x-column {0} contains invalid spaces (is not equally spaced)", xCol.Name));
					return;
				}
				if (calcspace.RelativeSpaceDeviation > 1E-2)
				{
					if (!Current.Gui.YesNoMessageBox(
						string.Format("The x-column {0} is not equally spaced, the deviation is {1}, the mean spacing is {2}. Continue anyway?", xCol.Name, calcspace.RelativeSpaceDeviation, calcspace.SpaceMeanValue),
						"Continue?", true))
						return;
				}

				spacing = calcspace.SpaceMeanValue;
			}

			Calc.Regression.SavitzkyGolay filter = new SavitzkyGolay(parameters);

			using (var suspendToken = yCol.SuspendGetToken())
			{
				filter.Apply(DataColumnWrapper.ToROVectorCopy(yCol), DataColumnWrapper.ToVector(yCol));

				if (parameters.DerivativeOrder > 0)
				{
					double factor = Math.Pow(1 / spacing, parameters.DerivativeOrder) * Calc.GammaRelated.Fac(parameters.DerivativeOrder);
					yCol.Data = yCol * factor;
				}
				suspendToken.Dispose();
			}
		}
コード例 #4
0
ファイル: WorksheetCommands.cs プロジェクト: Altaxo/Altaxo
		/// <summary>
		/// Shows a dialog to add columns to a table.
		/// </summary>
		/// <param name="table">The table where to add the columns.</param>
		/// <param name="bAddToPropertyColumns">If true, the columns are added to the property columns instead of the data columns collection.</param>
		public static void ShowAddColumnsDialog(Altaxo.Data.DataTable table, bool bAddToPropertyColumns)
		{
			var lbitems = new Altaxo.Collections.SelectableListNodeList();
			lbitems.Add(new Altaxo.Collections.SelectableListNode("Numeric", typeof(Altaxo.Data.DoubleColumn), true));
			lbitems.Add(new Altaxo.Collections.SelectableListNode("Date/Time", typeof(Altaxo.Data.DateTimeColumn), false));
			lbitems.Add(new Altaxo.Collections.SelectableListNode("Text", typeof(Altaxo.Data.TextColumn), false));

			IntegerAndComboBoxController ct = new IntegerAndComboBoxController(
				"Number of colums to add:", 1, int.MaxValue, 1,
				"Type of columns to add:", lbitems, 0);
			Current.Gui.FindAndAttachControlTo(ct);

			if (true == Current.Gui.ShowDialog(ct, "Add new column(s)", false))
			{
				System.Type columntype = (System.Type)ct.SelectedItem.Tag;

				using (var suspendToken = table.SuspendGetToken())
				{
					if (bAddToPropertyColumns)
					{
						for (int i = 0; i < ct.IntegerValue; i++)
						{
							table.PropCols.Add((Altaxo.Data.DataColumn)System.Activator.CreateInstance(columntype));
						}
					}
					else
					{
						for (int i = 0; i < ct.IntegerValue; i++)
						{
							table.DataColumns.Add((Altaxo.Data.DataColumn)System.Activator.CreateInstance(columntype));
						}
					}

					suspendToken.Dispose();
				}
			}
		}