Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
09/14/11 13:59:25 (13 years ago)
Author:
epitzer
Message:

#1530 integrate changes from trunk

Location:
branches/PersistenceSpeedUp
Files:
10 edited
2 copied

Legend:

Unmodified
Added
Removed
  • branches/PersistenceSpeedUp

  • branches/PersistenceSpeedUp/HeuristicLab.Analysis

  • branches/PersistenceSpeedUp/HeuristicLab.Analysis/3.3/DataVisualization/DataRow.cs

    r5445 r6760  
    8383    public DataRow(string name)
    8484      : base(name) {
    85       VisualProperties = new DataRowVisualProperties();
     85      VisualProperties = new DataRowVisualProperties(name);
    8686      values = new ObservableList<double>();
    8787    }
    8888    public DataRow(string name, string description)
    8989      : base(name, description) {
    90       VisualProperties = new DataRowVisualProperties();
     90      VisualProperties = new DataRowVisualProperties(name);
    9191      values = new ObservableList<double>();
    9292    }
    9393    public DataRow(string name, string description, IEnumerable<double> values)
    9494      : base(name, description) {
    95       VisualProperties = new DataRowVisualProperties();
     95      VisualProperties = new DataRowVisualProperties(name);
    9696      this.values = new ObservableList<double>(values);
    9797    }
  • branches/PersistenceSpeedUp/HeuristicLab.Analysis/3.3/DataVisualization/DataRowVisualProperties.cs

    r5445 r6760  
    2020#endregion
    2121
     22using System;
    2223using System.ComponentModel;
    2324using System.Drawing;
     
    3637      Columns,
    3738      Points,
    38       Bars
     39      Bars,
     40      Histogram
     41    }
     42    #endregion
     43    #region LineStyle
     44    public enum DataRowLineStyle {
     45      Dash,
     46      DashDot,
     47      DashDotDot,
     48      Dot,
     49      NotSet,
     50      Solid
    3951    }
    4052    #endregion
     
    6072      }
    6173    }
     74    private bool secondXAxis;
     75    public bool SecondXAxis {
     76      get { return secondXAxis; }
     77      set {
     78        if (secondXAxis != value) {
     79          secondXAxis = value;
     80          OnPropertyChanged("SecondXAxis");
     81        }
     82      }
     83    }
    6284    private Color color;
    6385    public Color Color {
     
    7092      }
    7193    }
     94    private DataRowLineStyle lineStyle;
     95    public DataRowLineStyle LineStyle {
     96      get { return lineStyle; }
     97      set {
     98        if (lineStyle != value) {
     99          lineStyle = value;
     100          OnPropertyChanged("LineStyle");
     101        }
     102      }
     103    }
    72104    private bool startIndexZero;
    73105    public bool StartIndexZero {
     
    77109          startIndexZero = value;
    78110          OnPropertyChanged("StartIndexZero");
     111        }
     112      }
     113    }
     114    private int lineWidth;
     115    public int LineWidth {
     116      get { return lineWidth; }
     117      set {
     118        if (lineWidth != value) {
     119          lineWidth = value;
     120          OnPropertyChanged("LineWidth");
     121        }
     122      }
     123    }
     124    private int bins;
     125    public int Bins {
     126      get { return bins; }
     127      set {
     128        if (bins != value) {
     129          bins = value;
     130          OnPropertyChanged("Bins");
     131        }
     132      }
     133    }
     134    private bool exactBins;
     135    public bool ExactBins {
     136      get { return exactBins; }
     137      set {
     138        if (exactBins != value) {
     139          exactBins = value;
     140          OnPropertyChanged("ExactBins");
     141        }
     142      }
     143    }
     144    private string displayName;
     145    public string DisplayName {
     146      get { return displayName == null ? String.Empty : displayName; }
     147      set {
     148        if (displayName != value) {
     149          if (value == null && displayName != String.Empty) {
     150            displayName = String.Empty;
     151            OnPropertyChanged("DisplayName");
     152          } else if (value != null) {
     153            displayName = value;
     154            OnPropertyChanged("DisplayName");
     155          }
    79156        }
    80157      }
     
    92169      set { secondYAxis = value; }
    93170    }
     171    [Storable(Name = "SecondXAxis")]
     172    private bool StorableSecondXAxis {
     173      get { return secondXAxis; }
     174      set { secondXAxis = value; }
     175    }
    94176    [Storable(Name = "Color")]
    95177    private Color StorableColor {
     
    97179      set { color = value; }
    98180    }
     181    [Storable(Name = "LineStyle")]
     182    private DataRowLineStyle StorableLineStyle {
     183      get { return lineStyle; }
     184      set { lineStyle = value; }
     185    }
    99186    [Storable(Name = "StartIndexZero")]
    100187    private bool StorableStartIndexZero {
    101188      get { return startIndexZero; }
    102189      set { startIndexZero = value; }
     190    }
     191    [Storable(Name = "LineWidth")]
     192    private int StorableLineWidth {
     193      get { return lineWidth; }
     194      set { lineWidth = value; }
     195    }
     196    [Storable(Name = "Bins")]
     197    private int StorableBins {
     198      get { return bins; }
     199      set { bins = value; }
     200    }
     201    [Storable(Name = "ExactBins")]
     202    private bool StorableExactBins {
     203      get { return exactBins; }
     204      set { exactBins = value; }
     205    }
     206    [Storable(Name = "DisplayName")]
     207    private string StorableDisplayName {
     208      get { return displayName; }
     209      set { displayName = value; }
    103210    }
    104211    #endregion
     
    110217      this.chartType = original.chartType;
    111218      this.secondYAxis = original.secondYAxis;
     219      this.secondXAxis = original.secondXAxis;
    112220      this.color = original.color;
     221      this.lineStyle = original.lineStyle;
    113222      this.startIndexZero = original.startIndexZero;
     223      this.lineWidth = original.lineWidth;
     224      this.bins = original.bins;
     225      this.exactBins = original.exactBins;
     226      this.displayName = original.displayName;
    114227    }
    115228    public DataRowVisualProperties() {
    116229      chartType = DataRowChartType.Line;
    117230      secondYAxis = false;
     231      secondXAxis = false;
    118232      color = Color.Empty;
     233      lineStyle = DataRowLineStyle.Solid;
    119234      startIndexZero = false;
     235      lineWidth = 1;
     236      bins = 10;
     237      exactBins = false;
     238      displayName = String.Empty;
     239    }
     240    public DataRowVisualProperties(string displayName)
     241      : this() {
     242      this.displayName = displayName;
    120243    }
    121244
     
    129252      if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
    130253    }
     254
     255    [StorableHook(HookType.AfterDeserialization)]
     256    private void AfterDeserialization() {
     257      // BackwardsCompatibility3.3
     258      #region Backwards compatible code, remove with 3.4
     259      if (secondXAxis == default(bool)
     260        && lineStyle == default(DataRowLineStyle)
     261        && lineWidth == default(int) && bins == default(int) && exactBins == default(bool)
     262        && displayName == default(string)) {
     263        secondXAxis = false;
     264        lineStyle = DataRowLineStyle.Solid;
     265        lineWidth = 1;
     266        bins = 10;
     267        exactBins = false;
     268        displayName = String.Empty;
     269      }
     270      #endregion
     271    }
    131272  }
    132273}
  • branches/PersistenceSpeedUp/HeuristicLab.Analysis/3.3/DataVisualization/DataTableVisualProperties.cs

    r5445 r6760  
    2121
    2222using System.ComponentModel;
     23using System.Drawing;
    2324using HeuristicLab.Common;
    2425using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
     
    3031  [StorableClass]
    3132  public class DataTableVisualProperties : DeepCloneable, INotifyPropertyChanged {
     33    private Font titleFont;
     34    public Font TitleFont {
     35      get { return titleFont; }
     36      set {
     37        if (titleFont == null || value == null
     38          || titleFont.Name != value.Name || titleFont.Size != value.Size || titleFont.Style != value.Style) {
     39          titleFont = value;
     40          OnPropertyChanged("TitleFont");
     41        }
     42      }
     43    }
     44    private Color titleColor;
     45    public Color TitleColor {
     46      get { return titleColor; }
     47      set {
     48        if (titleColor != value) {
     49          titleColor = value;
     50          OnPropertyChanged("TitleFontColor");
     51        }
     52      }
     53    }
     54    private Font axisTitleFont;
     55    public Font AxisTitleFont {
     56      get { return axisTitleFont; }
     57      set {
     58        if (axisTitleFont == null || axisTitleFont == null
     59          || axisTitleFont.Name != value.Name || axisTitleFont.Size != value.Size || axisTitleFont.Style != value.Style) {
     60          axisTitleFont = value;
     61          OnPropertyChanged("AxisTitleFont");
     62        }
     63      }
     64    }
     65    private Color axisTitleColor;
     66    public Color AxisTitleColor {
     67      get { return axisTitleColor; }
     68      set {
     69        if (axisTitleColor != value) {
     70          axisTitleColor = value;
     71          OnPropertyChanged("AxisTitleColor");
     72        }
     73      }
     74    }
    3275    private string xAxisTitle;
    3376    public string XAxisTitle {
     
    5497    }
    5598
     99    private string secondXAxisTitle;
     100    public string SecondXAxisTitle {
     101      get { return secondXAxisTitle; }
     102      set {
     103        if (value == null) value = string.Empty;
     104        if (secondXAxisTitle != value) {
     105          secondXAxisTitle = value;
     106          OnPropertyChanged("SecondXAxisTitle");
     107        }
     108      }
     109    }
     110
    56111    private string secondYAxisTitle;
    57112    public string SecondYAxisTitle {
     
    66121    }
    67122
     123    private bool xAxisMinimumAuto;
     124    public bool XAxisMinimumAuto {
     125      get { return xAxisMinimumAuto; }
     126      set {
     127        if (xAxisMinimumAuto != value) {
     128          xAxisMinimumAuto = value;
     129          if (value) xAxisMinimumFixedValue = double.NaN;
     130          OnPropertyChanged("XAxisMinimumAuto");
     131        }
     132      }
     133    }
     134
     135    private bool xAxisMaximumAuto;
     136    public bool XAxisMaximumAuto {
     137      get { return xAxisMaximumAuto; }
     138      set {
     139        if (xAxisMaximumAuto != value) {
     140          xAxisMaximumAuto = value;
     141          if (value) xAxisMaximumFixedValue = double.NaN;
     142          OnPropertyChanged("XAxisMaximumAuto");
     143        }
     144      }
     145    }
     146
     147    private double xAxisMinimumFixedValue;
     148    public double XAxisMinimumFixedValue {
     149      get { return xAxisMinimumFixedValue; }
     150      set {
     151        if (xAxisMinimumFixedValue != value) {
     152          xAxisMinimumFixedValue = value;
     153          OnPropertyChanged("XAxisMinimumFixedValue");
     154        }
     155      }
     156    }
     157
     158    private double xAxisMaximumFixedValue;
     159    public double XAxisMaximumFixedValue {
     160      get { return xAxisMaximumFixedValue; }
     161      set {
     162        if (xAxisMaximumFixedValue != value) {
     163          xAxisMaximumFixedValue = value;
     164          OnPropertyChanged("XAxisMaximumFixedValue");
     165        }
     166      }
     167    }
     168
     169    private bool secondXAxisMinimumAuto;
     170    public bool SecondXAxisMinimumAuto {
     171      get { return secondXAxisMinimumAuto; }
     172      set {
     173        if (secondXAxisMinimumAuto != value) {
     174          secondXAxisMinimumAuto = value;
     175          if (value) secondXAxisMinimumFixedValue = double.NaN;
     176          OnPropertyChanged("SecondXAxisMinimumAuto");
     177        }
     178      }
     179    }
     180
     181    private bool secondXAxisMaximumAuto;
     182    public bool SecondXAxisMaximumAuto {
     183      get { return secondXAxisMaximumAuto; }
     184      set {
     185        if (secondXAxisMaximumAuto != value) {
     186          secondXAxisMaximumAuto = value;
     187          if (value) secondXAxisMaximumFixedValue = double.NaN;
     188          OnPropertyChanged("SecondXAxisMaximumAuto");
     189        }
     190      }
     191    }
     192
     193    private double secondXAxisMinimumFixedValue;
     194    public double SecondXAxisMinimumFixedValue {
     195      get { return secondXAxisMinimumFixedValue; }
     196      set {
     197        if (secondXAxisMinimumFixedValue != value) {
     198          secondXAxisMinimumFixedValue = value;
     199          OnPropertyChanged("SecondXAxisMinimumFixedValue");
     200        }
     201      }
     202    }
     203
     204    private double secondXAxisMaximumFixedValue;
     205    public double SecondXAxisMaximumFixedValue {
     206      get { return secondXAxisMaximumFixedValue; }
     207      set {
     208        if (secondXAxisMaximumFixedValue != value) {
     209          secondXAxisMaximumFixedValue = value;
     210          OnPropertyChanged("SecondXAxisMaximumFixedValue");
     211        }
     212      }
     213    }
     214
     215    private bool yAxisMinimumAuto;
     216    public bool YAxisMinimumAuto {
     217      get { return yAxisMinimumAuto; }
     218      set {
     219        if (yAxisMinimumAuto != value) {
     220          yAxisMinimumAuto = value;
     221          if (value) yAxisMinimumFixedValue = double.NaN;
     222          OnPropertyChanged("YAxisMinimumAuto");
     223        }
     224      }
     225    }
     226
     227    private bool yAxisMaximumAuto;
     228    public bool YAxisMaximumAuto {
     229      get { return yAxisMaximumAuto; }
     230      set {
     231        if (yAxisMaximumAuto != value) {
     232          yAxisMaximumAuto = value;
     233          if (value) yAxisMaximumFixedValue = double.NaN;
     234          OnPropertyChanged("YAxisMaximumAuto");
     235        }
     236      }
     237    }
     238
     239    private double yAxisMinimumFixedValue;
     240    public double YAxisMinimumFixedValue {
     241      get { return yAxisMinimumFixedValue; }
     242      set {
     243        if (yAxisMinimumFixedValue != value) {
     244          yAxisMinimumFixedValue = value;
     245          OnPropertyChanged("YAxisMinimumFixedValue");
     246        }
     247      }
     248    }
     249
     250    private double yAxisMaximumFixedValue;
     251    public double YAxisMaximumFixedValue {
     252      get { return yAxisMaximumFixedValue; }
     253      set {
     254        if (yAxisMaximumFixedValue != value) {
     255          yAxisMaximumFixedValue = value;
     256          OnPropertyChanged("YAxisMaximumFixedValue");
     257        }
     258      }
     259    }
     260
     261    private bool secondYAxisMinimumAuto;
     262    public bool SecondYAxisMinimumAuto {
     263      get { return secondYAxisMinimumAuto; }
     264      set {
     265        if (secondYAxisMinimumAuto != value) {
     266          secondYAxisMinimumAuto = value;
     267          if (value) secondYAxisMinimumFixedValue = double.NaN;
     268          OnPropertyChanged("SecondYAxisMinimumAuto");
     269        }
     270      }
     271    }
     272
     273    private bool secondYAxisMaximumAuto;
     274    public bool SecondYAxisMaximumAuto {
     275      get { return secondYAxisMaximumAuto; }
     276      set {
     277        if (secondYAxisMaximumAuto != value) {
     278          secondYAxisMaximumAuto = value;
     279          if (value) secondYAxisMaximumFixedValue = double.NaN;
     280          OnPropertyChanged("SecondYAxisMaximumAuto");
     281        }
     282      }
     283    }
     284
     285    private double secondYAxisMinimumFixedValue;
     286    public double SecondYAxisMinimumFixedValue {
     287      get { return secondYAxisMinimumFixedValue; }
     288      set {
     289        if (secondYAxisMinimumFixedValue != value) {
     290          secondYAxisMinimumFixedValue = value;
     291          OnPropertyChanged("SecondYAxisMinimumFixedValue");
     292        }
     293      }
     294    }
     295
     296    private double secondYAxisMaximumFixedValue;
     297    public double SecondYAxisMaximumFixedValue {
     298      get { return secondYAxisMaximumFixedValue; }
     299      set {
     300        if (secondYAxisMaximumFixedValue != value) {
     301          secondYAxisMaximumFixedValue = value;
     302          OnPropertyChanged("SecondYAxisMaximumFixedValue");
     303        }
     304      }
     305    }
     306
    68307    #region Persistence Properties
     308    [Storable(Name = "TitleFont")]
     309    private Font StorableTitleFont {
     310      get { return titleFont; }
     311      set { titleFont = value; }
     312    }
     313    [Storable(Name = "TitleColor")]
     314    private Color StorableTitleColor {
     315      get { return titleColor; }
     316      set { titleColor = value; }
     317    }
     318    [Storable(Name = "AxisTitleFont")]
     319    private Font StorableAxisTitleFont {
     320      get { return axisTitleFont; }
     321      set { axisTitleFont = value; }
     322    }
     323    [Storable(Name = "AxisTitleColor")]
     324    private Color StorableAxisTitleColor {
     325      get { return axisTitleColor; }
     326      set { axisTitleColor = value; }
     327    }
    69328    [Storable(Name = "XAxisTitle")]
    70329    private string StorableXAxisTitle {
     
    77336      set { yAxisTitle = value; }
    78337    }
     338    [Storable(Name = "SecondXAxisTitle")]
     339    private string StorableSecondXAxisTitle {
     340      get { return secondXAxisTitle; }
     341      set { secondXAxisTitle = value; }
     342    }
    79343    [Storable(Name = "SecondYAxisTitle")]
    80344    private string StorableSecondYAxisTitle {
     
    82346      set { secondYAxisTitle = value; }
    83347    }
     348    [Storable(Name = "XAxisMinimumAuto")]
     349    private bool StorableXAxisMinimumAuto {
     350      get { return xAxisMinimumAuto; }
     351      set { xAxisMinimumAuto = value; }
     352    }
     353    [Storable(Name = "XAxisMaximumAuto")]
     354    private bool StorableXAxisMaximumAuto {
     355      get { return xAxisMaximumAuto; }
     356      set { xAxisMaximumAuto = value; }
     357    }
     358    [Storable(Name = "XAxisMinimumFixedValue")]
     359    private double StorableXAxisMinimumFixedValue {
     360      get { return xAxisMinimumFixedValue; }
     361      set { xAxisMinimumFixedValue = value; }
     362    }
     363    [Storable(Name = "XAxisMaximumFixedValue")]
     364    private double StorableXAxisMaximumFixedValue {
     365      get { return xAxisMaximumFixedValue; }
     366      set { xAxisMaximumFixedValue = value; }
     367    }
     368    [Storable(Name = "SecondXAxisMinimumAuto")]
     369    private bool StorableSecondXAxisMinimumAuto {
     370      get { return secondXAxisMinimumAuto; }
     371      set { secondXAxisMinimumAuto = value; }
     372    }
     373    [Storable(Name = "SecondXAxisMaximumAuto")]
     374    private bool StorableSecondXAxisMaximumAuto {
     375      get { return secondXAxisMaximumAuto; }
     376      set { secondXAxisMaximumAuto = value; }
     377    }
     378    [Storable(Name = "SecondXAxisMinimumFixedValue")]
     379    private double StorableSecondXAxisMinimumFixedValue {
     380      get { return secondXAxisMinimumFixedValue; }
     381      set { secondXAxisMinimumFixedValue = value; }
     382    }
     383    [Storable(Name = "SecondXAxisMaximumFixedValue")]
     384    private double StorableSecondXAxisMaximumFixedValue {
     385      get { return secondXAxisMaximumFixedValue; }
     386      set { secondXAxisMaximumFixedValue = value; }
     387    }
     388    [Storable(Name = "YAxisMinimumAuto")]
     389    private bool StorableYAxisMinimumAuto {
     390      get { return yAxisMinimumAuto; }
     391      set { yAxisMinimumAuto = value; }
     392    }
     393    [Storable(Name = "YAxisMaximumAuto")]
     394    private bool StorableYAxisMaximumAuto {
     395      get { return yAxisMaximumAuto; }
     396      set { yAxisMaximumAuto = value; }
     397    }
     398    [Storable(Name = "YAxisMinimumFixedValue")]
     399    private double StorableYAxisMinimumFixedValue {
     400      get { return yAxisMinimumFixedValue; }
     401      set { yAxisMinimumFixedValue = value; }
     402    }
     403    [Storable(Name = "YAxisMaximumFixedValue")]
     404    private double StorableYAxisMaximumFixedValue {
     405      get { return yAxisMaximumFixedValue; }
     406      set { yAxisMaximumFixedValue = value; }
     407    }
     408    [Storable(Name = "SecondYAxisMinimumAuto")]
     409    private bool StorableSecondYAxisMinimumAuto {
     410      get { return secondYAxisMinimumAuto; }
     411      set { secondYAxisMinimumAuto = value; }
     412    }
     413    [Storable(Name = "SecondYAxisMaximumAuto")]
     414    private bool StorableSecondYAxisMaximumAuto {
     415      get { return secondYAxisMaximumAuto; }
     416      set { secondYAxisMaximumAuto = value; }
     417    }
     418    [Storable(Name = "SecondYAxisMinimumFixedValue")]
     419    private double StorableSecondYAxisMinimumFixedValue {
     420      get { return secondYAxisMinimumFixedValue; }
     421      set { secondYAxisMinimumFixedValue = value; }
     422    }
     423    [Storable(Name = "SecondYAxisMaximumFixedValue")]
     424    private double StorableSecondYAxisMaximumFixedValue {
     425      get { return secondYAxisMaximumFixedValue; }
     426      set { secondYAxisMaximumFixedValue = value; }
     427    }
    84428    #endregion
    85429
     
    88432    protected DataTableVisualProperties(DataTableVisualProperties original, Cloner cloner)
    89433      : base(original, cloner) {
     434      if (original.titleFont != null)
     435        this.titleFont = (Font)original.titleFont.Clone();
     436      if (original.axisTitleFont != null)
     437        this.axisTitleFont = (Font)original.axisTitleFont.Clone();
    90438      this.xAxisTitle = original.xAxisTitle;
    91439      this.yAxisTitle = original.yAxisTitle;
     440      this.secondXAxisTitle = original.secondXAxisTitle;
    92441      this.secondYAxisTitle = original.secondYAxisTitle;
     442      this.xAxisMinimumAuto = original.xAxisMinimumAuto;
     443      this.xAxisMinimumFixedValue = original.xAxisMinimumFixedValue;
     444      this.xAxisMaximumAuto = original.xAxisMaximumAuto;
     445      this.xAxisMaximumFixedValue = original.xAxisMaximumFixedValue;
     446      this.secondXAxisMinimumAuto = original.secondXAxisMinimumAuto;
     447      this.secondXAxisMinimumFixedValue = original.secondXAxisMinimumFixedValue;
     448      this.secondXAxisMaximumAuto = original.secondXAxisMaximumAuto;
     449      this.secondXAxisMaximumFixedValue = original.secondXAxisMaximumFixedValue;
     450      this.yAxisMinimumAuto = original.yAxisMinimumAuto;
     451      this.yAxisMinimumFixedValue = original.yAxisMinimumFixedValue;
     452      this.yAxisMaximumAuto = original.yAxisMaximumAuto;
     453      this.yAxisMaximumFixedValue = original.yAxisMaximumFixedValue;
     454      this.secondYAxisMinimumAuto = original.secondYAxisMinimumAuto;
     455      this.secondYAxisMinimumFixedValue = original.secondYAxisMinimumFixedValue;
     456      this.secondYAxisMaximumAuto = original.secondYAxisMaximumAuto;
     457      this.secondYAxisMaximumFixedValue = original.secondYAxisMaximumFixedValue;
    93458    }
    94459    public DataTableVisualProperties() {
     460      titleColor = Color.Black;
     461      axisTitleColor = Color.Black;
    95462      this.xAxisTitle = string.Empty;
    96463      this.yAxisTitle = string.Empty;
     464      this.secondXAxisTitle = string.Empty;
    97465      this.secondYAxisTitle = string.Empty;
     466      this.xAxisMinimumAuto = true;
     467      this.xAxisMinimumFixedValue = double.NaN;
     468      this.xAxisMaximumAuto = true;
     469      this.xAxisMaximumFixedValue = double.NaN;
     470      this.secondXAxisMinimumAuto = true;
     471      this.secondXAxisMinimumFixedValue = double.NaN;
     472      this.secondXAxisMaximumAuto = true;
     473      this.secondXAxisMaximumFixedValue = double.NaN;
     474      this.yAxisMinimumAuto = true;
     475      this.yAxisMinimumFixedValue = double.NaN;
     476      this.yAxisMaximumAuto = true;
     477      this.yAxisMaximumFixedValue = double.NaN;
     478      this.secondYAxisMinimumAuto = true;
     479      this.secondYAxisMinimumFixedValue = double.NaN;
     480      this.secondYAxisMaximumAuto = true;
     481      this.secondYAxisMaximumFixedValue = double.NaN;
    98482    }
    99483
     
    107491      if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
    108492    }
     493
     494    [StorableHook(HookType.AfterDeserialization)]
     495    private void AfterDeserialization() {
     496      // BackwardsCompatibility3.3
     497      #region Backwards compatible code, remove with 3.4
     498      // check if most of the properties that were added in Mai'11 were set to their default values, then we want to reset them to our default values
     499      if (xAxisMinimumAuto == default(bool) && xAxisMaximumAuto == default(bool)
     500        && yAxisMinimumAuto == default(bool) && yAxisMaximumAuto == default(bool)
     501        && secondXAxisMinimumAuto == default(bool) && secondXAxisMaximumAuto == default(bool)
     502        && secondYAxisMinimumAuto == default(bool) && secondYAxisMaximumAuto == default(bool)
     503        && titleColor == default(Color) && axisTitleColor == default(Color)
     504        && secondXAxisTitle == default(string)
     505        && xAxisMinimumFixedValue == default(double) && xAxisMaximumFixedValue == default(double)
     506        && yAxisMinimumFixedValue == default(double) && yAxisMaximumFixedValue == default(double)
     507        && secondXAxisMinimumFixedValue == default(double) && secondXAxisMaximumFixedValue == default(double)
     508        && secondYAxisMinimumFixedValue == default(double) && secondYAxisMaximumFixedValue == default(double)) {
     509        titleColor = Color.Black;
     510        axisTitleColor = Color.Black;
     511        this.secondXAxisTitle = string.Empty;
     512        this.xAxisMinimumAuto = true;
     513        this.xAxisMinimumFixedValue = double.NaN;
     514        this.xAxisMaximumAuto = true;
     515        this.xAxisMaximumFixedValue = double.NaN;
     516        this.secondXAxisMinimumAuto = true;
     517        this.secondXAxisMinimumFixedValue = double.NaN;
     518        this.secondXAxisMaximumAuto = true;
     519        this.secondXAxisMaximumFixedValue = double.NaN;
     520        this.yAxisMinimumAuto = true;
     521        this.yAxisMinimumFixedValue = double.NaN;
     522        this.yAxisMaximumAuto = true;
     523        this.yAxisMaximumFixedValue = double.NaN;
     524        this.secondYAxisMinimumAuto = true;
     525        this.secondYAxisMinimumFixedValue = double.NaN;
     526        this.secondYAxisMaximumAuto = true;
     527        this.secondYAxisMaximumFixedValue = double.NaN;
     528      #endregion
     529      }
     530    }
    109531  }
    110532}
  • branches/PersistenceSpeedUp/HeuristicLab.Analysis/3.3/HeuristicLab.Analysis-3.3.csproj

    r5933 r6760  
    138138    <Compile Include="HeuristicLabAnalysisPlugin.cs" />
    139139    <Compile Include="Properties\AssemblyInfo.cs" />
     140    <Compile Include="QualityAnalysis\QualityDistributionAnalyzer.cs" />
     141    <Compile Include="QualityAnalysis\ScaledQualityDifferenceAnalyzer.cs" />
    140142    <Compile Include="ValueAnalysis\MinAverageMaxValueAnalyzer.cs" />
    141143    <Compile Include="ValueAnalysis\MinAverageMaxValueCalculator.cs" />
  • branches/PersistenceSpeedUp/HeuristicLab.Analysis/3.3/HeuristicLabAnalysisPlugin.cs.frame

    r6099 r6760  
    2626  /// Plugin class for HeuristicLab.Analysis plugin.
    2727  /// </summary>
    28   [Plugin("HeuristicLab.Analysis", "3.3.4.$WCREV$")]
     28  [Plugin("HeuristicLab.Analysis", "3.3.5.$WCREV$")]
    2929  [PluginFile("HeuristicLab.Analysis-3.3.dll", PluginFileType.Assembly)]
    3030  [PluginDependency("HeuristicLab.ALGLIB", "3.1")]
  • branches/PersistenceSpeedUp/HeuristicLab.Analysis/3.3/MultidimensionalScaling/MultidimensionalScaling.cs

    r5933 r6760  
    6868    /// In every iteration it tries to find the best location for every item.</param>
    6969    /// <returns>A Nx2 matrix where the first column represents the x- and the second column the y coordinates.</returns>
    70     public static DoubleMatrix KruskalShepard(DoubleMatrix dissimilarities, DoubleMatrix coordinates, int maximumIterations = 20) {
     70    public static DoubleMatrix KruskalShepard(DoubleMatrix dissimilarities, DoubleMatrix coordinates, int maximumIterations = 10) {
    7171      int dimension = dissimilarities.Rows;
    7272      if (dimension != dissimilarities.Columns || coordinates.Rows != dimension) throw new ArgumentException("The number of coordinates and the number of rows and columns in the dissimilarities matrix do not match.");
     
    7575      double epsf = 0;
    7676      double epsx = 0;
    77       int maxits = 100;
    78       alglib.mincgstate state = null;
    79       alglib.mincgreport rep;
     77      int maxits = 0;
    8078
     79      alglib.minlmstate state;
     80      alglib.minlmreport rep;
    8181      for (int iterations = 0; iterations < maximumIterations; iterations++) {
    8282        bool changed = false;
     
    8585
    8686          try {
    87             if ((iterations == 0 && i == 0)) {
    88               alglib.mincgcreate(c, out state);
    89               alglib.mincgsetcond(state, epsg, epsf, epsx, maxits);
    90             } else {
    91               alglib.mincgrestartfrom(state, c);
    92             }
    93             alglib.mincgoptimize(state, StressGradient, null, new Info(coordinates, dissimilarities, i));
    94             alglib.mincgresults(state, out c, out rep);
     87            alglib.minlmcreatevj(dimension - 1, c, out state);
     88            alglib.minlmsetcond(state, epsg, epsf, epsx, maxits);
     89            alglib.minlmoptimize(state, StressFitness, StressJacobian, null, new Info(coordinates, dissimilarities, i));
     90            alglib.minlmresults(state, out c, out rep);
    9591          } catch (alglib.alglibexception) { }
    9692          if (!double.IsNaN(c[0]) && !double.IsNaN(c[1])) {
     
    105101    }
    106102
    107     // computes the function and the gradient of the raw stress function.
    108     private static void StressGradient(double[] x, ref double func, double[] grad, object obj) {
    109       func = 0; grad[0] = 0; grad[1] = 0;
     103    private static void StressFitness(double[] x, double[] fi, object obj) {
    110104      Info info = (obj as Info);
    111105      for (int i = 0; i < info.Coordinates.Rows; i++) {
    112         double c = info.Dissimilarities[info.Row, i];
     106        double f = Stress(x, info.Dissimilarities[info.Row, i], info.Coordinates[i, 0], info.Coordinates[i, 1]);
     107        if (i < info.Row) fi[i] = f;
     108        else if (i > info.Row) fi[i - 1] = f;
     109      }
     110    }
     111
     112    private static void StressJacobian(double[] x, double[] fi, double[,] jac, object obj) {
     113      Info info = (obj as Info);
     114      int idx = 0;
     115      for (int i = 0; i < info.Coordinates.Rows; i++) {
    113116        if (i != info.Row) {
     117          double c = info.Dissimilarities[info.Row, i];
    114118          double a = info.Coordinates[i, 0];
    115119          double b = info.Coordinates[i, 1];
    116           func += Stress(x, c, a, b);
    117           grad[0] += ((2 * x[0] - 2 * a) * Math.Sqrt(x[1] * x[1] - 2 * b * x[1] + x[0] * x[0] - 2 * a * x[0] + b * b + a * a) - 2 * c * x[0] + 2 * a * c) / Math.Sqrt(x[1] * x[1] - 2 * b * x[1] + x[0] * x[0] - 2 * a * x[0] + b * b + a * a);
    118           grad[1] += ((2 * x[1] - 2 * b) * Math.Sqrt(x[1] * x[1] - 2 * b * x[1] + x[0] * x[0] - 2 * a * x[0] + b * b + a * a) - 2 * c * x[1] + 2 * b * c) / Math.Sqrt(x[1] * x[1] - 2 * b * x[1] + x[0] * x[0] - 2 * a * x[0] + b * b + a * a);
     120          double f = Stress(x, c, a, b);
     121          fi[idx] = f;
     122          jac[idx, 0] = 2 * (x[0] - a) * (Math.Sqrt((a - x[0]) * (a - x[0]) + (b - x[1]) * (b - x[1])) - c) / Math.Sqrt((a - x[0]) * (a - x[0]) + (b - x[1]) * (b - x[1]));
     123          jac[idx, 1] = 2 * (x[1] - b) * (Math.Sqrt((a - x[0]) * (a - x[0]) + (b - x[1]) * (b - x[1])) - c) / Math.Sqrt((a - x[0]) * (a - x[0]) + (b - x[1]) * (b - x[1]));
     124          idx++;
    119125        }
    120126      }
  • branches/PersistenceSpeedUp/HeuristicLab.Analysis/3.3/Properties/AssemblyInfo.frame

    r6099 r6760  
    5454// by using the '*' as shown below:
    5555[assembly: AssemblyVersion("3.3.0.0")]
    56 [assembly: AssemblyFileVersion("3.3.4.$WCREV$")]
     56[assembly: AssemblyFileVersion("3.3.5.$WCREV$")]
  • branches/PersistenceSpeedUp/HeuristicLab.Analysis/3.3/Tests/MultidimensionalScalingTest.cs

    r5938 r6760  
    2121
    2222using System;
     23using System.Globalization;
    2324using HeuristicLab.Data;
    2425using Microsoft.VisualStudio.TestTools.UnitTesting;
     
    4243      distances3[0, 2] = distances3[2, 0] = 6.4;
    4344      distances3[1, 2] = distances3[2, 1] = 5;
    44       stress = MultidimensionalScaling.CalculateNormalizedStress(distances3,
    45         MultidimensionalScaling.KruskalShepard(distances3));
     45      DoubleMatrix coords3 = MultidimensionalScaling.KruskalShepard(distances3);
     46      Console.WriteLine("Coordinates: ");
     47      Console.WriteLine("A = ({0}, {1}), B = ({2}, {3}), C = ({4}, {5})", coords3[0, 0], coords3[0, 1], coords3[1, 0], coords3[1, 1], coords3[2, 0], coords3[2, 1]);
     48      stress = MultidimensionalScaling.CalculateNormalizedStress(distances3, coords3);
     49      Console.WriteLine("Stress = " + stress.ToString(CultureInfo.InvariantCulture.NumberFormat));
    4650      Assert.IsTrue(stress < 0.1);
    4751      DoubleMatrix distances4 = new DoubleMatrix(4, 4);
Note: See TracChangeset for help on using the changeset viewer.