public Tuple<bool, Exception> ComputeEigen(Dictionary<VariableDesc, double[]> dataDict) { bool bRet = false; Exception err = null; try { List<VariableDesc> oList = dataDict.Keys.ToList(); oList.Sort(); int nv = oList.Count; if (nv < 2) { return new Tuple<bool, Exception>(bRet, new ArgumentException()); } int nr = 0; foreach (var v in dataDict.Keys) { var dd = dataDict[v]; if (dd == null) { return new Tuple<bool, Exception>(bRet, new ArgumentException()); } if (nr < 1) { nr = dd.Length; } if (nr > dd.Length) { nr = dd.Length; } } // v if (nr <= nv) { return new Tuple<bool, Exception>(false, new ArgumentException()); } double[,] data = new double[nr, nv]; for (int ivar = 0; ivar < nv; ++ivar) { var v = oList[ivar]; double[] dd = dataDict[v]; for (int irow = 0; irow < nr; ++irow) { data[irow, ivar] = dd[irow]; }// irow }// ivar if (!ComputeEigen(data, out err)) { m_initialdata = null; myInit(); return new Tuple<bool, Exception>(false, err); } this.m_variablesdescs = new VariableDescs(oList); bRet = true; }// try catch (Exception ex) { err = ex; } return new Tuple<bool, Exception>(bRet, err); }
public Tuple<IndivDescs, VariableDescs, Exception> FetchAllDataSetData(StatDataSet oSet) { IndivDescs indivs = null; VariableDescs vars = null; Exception err = null; try { using (var ctx = getContext()) { DbDataSet pSet = findDataSet(ctx, oSet); if (pSet == null) { return new Tuple<IndivDescs, VariableDescs, Exception>(indivs, vars, err); } DbVariable pIdVar = null; DbVariable pNameVar = null; DbVariable pImageVar = null; var q = from x in pSet.Variables orderby x.Name select x; foreach (var v in q) { if (v.IsId) { pIdVar = v; } if (v.IsName) { pNameVar = v; } if (v.IsImageVar) { pImageVar = v; } }// v bool bImageInt = false; if (pImageVar != null) { String s = pImageVar.VarType.Trim().ToLower(); if ((s != "string") && (s != "bool")) { bImageInt = true; } } List<VariableDesc> oRet = new List<VariableDesc>(); HashSet<int> oSetIndex = new HashSet<int>(); List<IndivDesc> listIndivs = new List<IndivDesc>(); Dictionary<int, ValueDescs> vals = new Dictionary<int, ValueDescs>(); foreach (var p in q) { VariableDesc pp = new VariableDesc(); convertVariable(p, pp); var col = p.Values; List<ValueDesc> pList = new List<ValueDesc>(); foreach (var v in col) { int index = v.Index; if (index >= 0) { ValueDesc vv = new ValueDesc(); convertValue(v, vv); pList.Add(vv); if (!vals.ContainsKey(index)) { vals[index] = new ValueDescs(); } (vals[index]).Add(vv); if (!oSetIndex.Contains(index)) { oSetIndex.Add(index); var ind = new IndivDesc(); listIndivs.Add(ind); ind.IndivIndex = index; if (pIdVar != null) { var qx = from x in pIdVar.Values where x.Index == index select x; if (qx.Count() > 0) { ind.IdString = qx.First().Value; } }// Id if (pNameVar != null) { var qx = from x in pNameVar.Values where x.Index == index select x; if (qx.Count() > 0) { ind.Name = qx.First().Value; } }// name if (pImageVar != null) { var qx = from x in pImageVar.Values where x.Index == index select x; if (qx.Count() > 0) { var px = qx.First(); String sx = StatHelpers.ConvertValue(px.Value); if (!String.IsNullOrEmpty(sx)) { if (bImageInt) { double dval = 0.0; if (double.TryParse(sx, out dval)) { int ival = (int)dval; if (ival != 0) { var qz = from x in ctx.DbPhotoes where x.Id == ival select x; if (qz.Count() > 0) { var pz = qz.First(); ind.PhotoId = pz.Id; ind.PhotoData = pz.DataBytes; } }// ival } } else { var qz = from x in ctx.DbPhotoes where x.Name.Trim().ToLower() == sx.ToLower() select x; if (qz.Count() > 0) { var pz = qz.First(); ind.PhotoId = pz.Id; ind.PhotoData = pz.DataBytes; } }// ival }// sx } }// photo }// add value }// v }// v var xx = getVariableInfo(ctx, pp); if (xx.Item2 != null) { return new Tuple<IndivDescs, VariableDescs, Exception>(indivs, vars, err); } pp.Info = xx.Item1; pp.Values = new ValueDescs(pList); oRet.Add(pp); }// p foreach (var ind in listIndivs) { int index = ind.IndivIndex; if (vals.ContainsKey(index)) { ind.Values = vals[index]; } }// ind if (listIndivs.Count > 1) { listIndivs.Sort(); } if (oRet.Count > 1) { oRet.Sort(); } indivs = new IndivDescs(listIndivs); vars = new VariableDescs(oRet); }// ctx }// try catch (Exception ex) { err = ex; } return new Tuple<IndivDescs, VariableDescs, Exception>(indivs, vars, err); }
}// PhotosModelView #endregion // Constructors public void RefreshLeftVariables() { var p = this.LeftVariables; if (p.Count < 1) { var col = new VariableDescs(); foreach (var v in m_main.AllComputeVariables) { col.Add(v); } this.LeftVariables = col; this.CurrentVariables = null; } }// RefreshComputeVariables
void m_main_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e) { if (m_busy) { return; } m_busy = true; String name = e.PropertyName; if (name == "IsBusy") { NotifyPropertyChanged("IsBusy"); return; } if (name == "AllIndividus") { this.Individus = null; RefreshVariablesValues(); } else if (name == "AllComputeVariables") { this.AllComputeVariables = null; var col = new VariableDescs(); foreach (var v in m_main.AllComputeVariables) { col.Add(v); } this.LeftVariables = col; this.CurrentVariables = null; } else if (name == "AllCategVariables") { NotifyPropertyChanged("AllCategVariables"); } else if (name == "CurrentCategVariable") { this.updateCategValues(); NotifyPropertyChanged("CurrentCategVariable"); } else if (name == "AllNumVariables") { this.CurrentXVariable = null; this.CurrentYVariable = null; NotifyPropertyChanged("NumVariables"); NotifyPropertyChanged("AllNumVariables"); } m_busy = false; }// PhotosModelView
void m_main_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e) { if (m_busy) { return; } m_busy = true; String name = e.PropertyName; if (name == "IsBusy") { NotifyPropertyChanged("IsBusy"); return; } if (name == "Variables") { NotifyPropertyChanged("AllVariables"); this.InitialData = null; } if (name == "CurrentStatDataSet") { m_main.RefreshVariables(); } else if (name == "AllNumVariables") { NotifyPropertyChanged("AllNumVariables"); this.m_currentvariables = null; this.LeftVariables = m_main.AllNumVariables; NotifyPropertyChanged("CurrentVariables"); this.RefreshVariablesValues(); } else if (name == "AllCategVariables") { this.m_currentcategvariable = null; NotifyPropertyChanged("AllCategVariables"); NotifyPropertyChanged("CurrentcategVariable"); if (this.CurrentType == TYPE_INDIVS) { this.UpdatePlot(); } } m_busy = false; }