Beispiel #1
0
        internal protected void SetSharedVariableToParent(string key, VariableDesc variable)
        {
            if (ParentTask == null)
            {
                throw new InvalidOperationException("No parent");
            }

            ParentTask.SetSharedVariable(key, variable);
        }
Beispiel #2
0
        internal protected void SetSharedVariable(string key, VariableDesc variable)
        {
            if (sharedVariables == null)
            {
                sharedVariables = new VariableSet();
            }

            sharedVariables.Set(key, variable);
        }
        private static bool UpdateItemViewer(TreeView itemViewer, VariableDesc v, IntPtr sf, IntPtr pc)
        {
            foreach (TreeViewItem item in itemViewer.Items)
            {
                if (UpdateSubitems(itemViewer, item, v.Name, v, sf, pc))
                {
                    return(true);
                }
            }

            return(false);
        }
        private static SFItem FindItem(VariableDesc v, ListView view)
        {
            foreach (ListViewItem item in view.Items)
            {
                var sfItem = item.Content as SFItem;
                if (sfItem != null && sfItem.Kind != VariableKind.Pseudo)
                {
                    if (v.Name == sfItem.Name)
                    {
                        return(sfItem);
                    }
                }
            }

            return(null);
        }
 public Tuple<IEnumerable<VariableDesc>, Exception> GetDataSetVariables(StatDataSet oSet)
 {
     List<VariableDesc> oRet = null;
     Exception err = null;
     if (oSet == null)
     {
         return new Tuple<IEnumerable<VariableDesc>, Exception>(null, new ArgumentNullException());
     }
     try
     {
         using (var ctx = getContext())
         {
             DbDataSet pSet = findDataSet(ctx, oSet);
             if (pSet != null)
             {
                 var q = from x in pSet.Variables orderby x.Name ascending select x;
                 oRet = new List<VariableDesc>();
                 foreach (var p in q)
                 {
                     VariableDesc pp = new VariableDesc();
                     convertVariable(p, pp);
                     oRet.Add(pp);
                 }// p
             }// pSet
         }// ctx
         if ((oRet != null) && (oRet.Count > 1))
         {
             oRet.Sort();
         }
     }
     catch (Exception ex)
     {
         err = ex;
     }
     return new Tuple<IEnumerable<VariableDesc>, Exception>(oRet, err);
 }
 protected Tuple<Dictionary<string, Dictionary<VariableDesc, List<ValueDesc>>>, Exception> readCategValues(statdataEntities ctx,
     VariableDesc oCategVar, IEnumerable<VariableDesc> oDataVars)
 {
     if ((oCategVar == null) || (oDataVars == null))
     {
         return new Tuple<Dictionary<string, Dictionary<VariableDesc, List<ValueDesc>>>, Exception>(null, new ArgumentNullException());
     }
     List<VariableDesc> oList = new List<VariableDesc>();
     oList.Add(oCategVar);
     oList.AddRange(oDataVars);
     var xx = getIndexes(ctx, oList);
     if (xx == null)
     {
         return new Tuple<Dictionary<string, Dictionary<VariableDesc, List<ValueDesc>>>, Exception>(null, new ArgumentException());
     }
     var oIndexes = xx.Item1;
     if ((oIndexes == null) || (xx.Item2 != null))
     {
         return new Tuple<Dictionary<string, Dictionary<VariableDesc, List<ValueDesc>>>, Exception>(null, xx.Item2);
     }
     Dictionary<string, Dictionary<VariableDesc, List<ValueDesc>>> oRet = new Dictionary<string, Dictionary<VariableDesc, List<ValueDesc>>>();
     DbVariable pCategVar = findVariable(ctx, oCategVar);
     if (pCategVar == null)
     {
         return new Tuple<Dictionary<string, Dictionary<VariableDesc, List<ValueDesc>>>, Exception>(null, new ArgumentException());
     }
     var qcateg = pCategVar.Values;
     foreach (var ind in oIndexes)
     {
         var q = from x in qcateg where x.Index == ind select x;
         if (q.Count() > 0)
         {
             DbValue vcateg = q.First();
             String scateg = StatHelpers.ConvertValue(vcateg.Value);
             if (!String.IsNullOrEmpty(scateg))
             {
                 if (!oRet.ContainsKey(scateg))
                 {
                     oRet[scateg] = new Dictionary<VariableDesc, List<ValueDesc>>();
                 }
                 var dict = oRet[scateg];
                 foreach (var vdata in oDataVars)
                 {
                     if (!dict.ContainsKey(vdata))
                     {
                         dict[vdata] = new List<ValueDesc>();
                     }
                     List<ValueDesc> xlist = dict[vdata];
                     var qy = from x in ctx.DbValues where (x.VariableId == vdata.Id) && (x.Index == ind) select x;
                     if (qy.Count() > 0)
                     {
                         var v = qy.First();
                         String s = StatHelpers.ConvertValue(v.Value);
                         if (!String.IsNullOrEmpty(s))
                         {
                             ValueDesc vz = new ValueDesc();
                             convertValue(v, vz);
                             xlist.Add(vz);
                         }
                     }// qy
                 }// vdata
             }// scateg
         }// qCount
     }// ind
     if (oRet.Count < 1)
     {
         return new Tuple<Dictionary<string, Dictionary<VariableDesc, List<ValueDesc>>>, Exception>(null, null);
     }
     return new Tuple<Dictionary<string, Dictionary<VariableDesc, List<ValueDesc>>>, Exception>(oRet, null);
 }
 protected DbVariable maintainsVariable(statdataEntities ctx, VariableDesc oVar)
 {
     DbVariable pRet = null;
     if (oVar != null)
     {
         String sname = oVar.Name.Trim();
         int nId = oVar.DataSetId;
         String stype = oVar.DataType.Trim();
         if (String.IsNullOrEmpty(sname) || (nId == 0) || String.IsNullOrEmpty(stype))
         {
             return null;
         }
         pRet = findVariable(ctx, oVar);
         if (pRet != null)
         {
             pRet.Name = sname;
             pRet.VarType = stype;
             pRet.IsCateg = oVar.IsCategVar;
             pRet.IsId = oVar.IsIdVar;
             pRet.IsName = oVar.IsNameVar;
             pRet.IsImageVar = oVar.IsImageVar;
             pRet.IsInfoVar = oVar.IsInfoVar;
             pRet.Description = oVar.Description;
         }
         else
         {
             DbDataSet pSet = null;
             {
                 var qq = from x in ctx.DbDataSets where x.Id == nId select x;
                 if (qq.Count() < 1)
                 {
                     return null;
                 }
                 pSet = qq.First();
             }
             pRet = new DbVariable();
             pRet.Id = nextId(ctx, TAB_VARIABLE);
             pRet.DataSet = pSet;
             pRet.Name = sname;
             pRet.VarType = stype;
             pRet.IsCateg = oVar.IsCategVar;
             pRet.IsId = oVar.IsIdVar;
             pRet.IsName = oVar.IsNameVar;
             pRet.IsImageVar = oVar.IsImageVar;
             pRet.IsInfoVar = oVar.IsInfoVar;
             pRet.Description = oVar.Description;
             ctx.DbVariables.Add(pRet);
         }
     }
     return pRet;
 }
 protected DbVariable findVariable(statdataEntities ctx, VariableDesc oVar)
 {
     DbVariable pRet = null;
     if (oVar != null)
     {
         if (oVar.Id != 0)
         {
             var q = from x in ctx.DbVariables where x.Id == oVar.Id select x;
             if (q.Count() > 0)
             {
                 return q.First();
             }
         }
         String sname = oVar.Name.Trim().ToLower();
         int nId = oVar.DataSetId;
         if ((nId != 0) && (!String.IsNullOrEmpty(sname)))
         {
             var q = from x in ctx.DbVariables where (x.DataSetId == nId) && x.Name.Trim().ToLower() == sname select x;
             if (q.Count() > 0)
             {
                 return q.First();
             }
         }
     }// oSet
     return pRet;
 }
 public Tuple<bool, Exception> RemoveVariable(VariableDesc oVar)
 {
     bool bRet = false;
     Exception err = null;
     if (oVar == null)
     {
         return new Tuple<bool, Exception>(false, new ArgumentNullException());
     }
     try
     {
         using (var ctx = getContext())
         {
             DbVariable pVar = findVariable(ctx, oVar);
             if (pVar != null)
             {
                 ctx.DbVariables.Remove(pVar);
                 ctx.SaveChanges();
                 bRet = true;
             }
         }
     }
     catch (Exception ex)
     {
         err = ex;
     }
     return new Tuple<bool, Exception>(bRet, err);
 }
 public Tuple<Dictionary<string, double[]>, Exception> ReadNumCategValues(VariableDesc oCategVar, VariableDesc oDataVar)
 {
     Dictionary<string, double[]> oRet = null;
     var xx = ReadCategValues(oCategVar, oDataVar);
     var srcDict = xx.Item1;
     var err = xx.Item2;
     if ((err != null) || (srcDict == null))
     {
         return new Tuple<Dictionary<string, double[]>, Exception>(oRet, err);
     }
     oRet = new Dictionary<string, double[]>();
     var keys = srcDict.Keys;
     foreach (var key in keys)
     {
         List<double> dd = new List<double>();
         var vals = srcDict[key];
         foreach (var v in vals)
         {
             if (v != null)
             {
                 String s = StatHelpers.ConvertValue(v.DataStringValue);
                 if (!String.IsNullOrEmpty(s))
                 {
                     double d = 0.0;
                     if (double.TryParse(s, out d))
                     {
                         dd.Add(d);
                     }
                 }
             }// v
         }// v
         if (dd.Count > 0)
         {
             oRet[key] = dd.ToArray();
         }
     }// key
     return new Tuple<Dictionary<string, double[]>, Exception>(oRet, err);
 }
 private Task<Tuple<StatDataSet, Exception>> readDataSet(String filename,
     sds.DataSet input, CancellationToken cancellationToken, IProgress<int> progress)
 {
     return Task.Run<Tuple<StatDataSet, Exception>>(() =>
     {
         StatDataSet oSet = null;
         Exception err = null;
         try
         {
             FileInfo info = new FileInfo(filename);
             oSet = new StatDataSet();
             oSet.Name = info.Name;
             var col = input.Variables;
             int nTotal = col.Count;
             int nCur = 0;
             foreach (var v in col)
             {
                 if (progress != null)
                 {
                     progress.Report(nCur++);
                 }
                 if (v.Dimensions.Count != 1)
                 {
                     continue;
                 }
                 VariableDesc vv = new VariableDesc();
                 ValueDescs vals = new ValueDescs();
                 vv.Name = v.Name;
                 Type t = v.TypeOfData;
                 if (t == typeof(String))
                 {
                     vv.DataType = "string";
                     vv.IsCategVar = true;
                     String[] data = input.GetData<String[]>(v.ID);
                     if ((data != null) && (data.Length > 0))
                     {
                         for (int i = 0; i < data.Length; ++i)
                         {
                             ValueDesc vx = new ValueDesc();
                             vx.Index = i;
                             vx.DataStringValue = data[i];
                             vals.Add(vx);
                         }// i
                     }// data
                 }
                 else if (t == typeof(double))
                 {
                     vv.DataType = "double";
                     vv.IsCategVar = false;
                     double[] data = input.GetData<double[]>(v.ID);
                     if ((data != null) && (data.Length > 0))
                     {
                         for (int i = 0; i < data.Length; ++i)
                         {
                             ValueDesc vx = new ValueDesc();
                             vx.Index = i;
                             String s = Convert.ToString(myconvert(data[i]));
                             vx.DataStringValue = s;
                             vals.Add(vx);
                         }// i
                     }// data
                 }
                 else if (t == typeof(float))
                 {
                     vv.DataType = "float";
                     vv.IsCategVar = false;
                     float[] data = input.GetData<float[]>(v.ID);
                     if ((data != null) && (data.Length > 0))
                     {
                         for (int i = 0; i < data.Length; ++i)
                         {
                             ValueDesc vx = new ValueDesc();
                             vx.Index = i;
                             String s = Convert.ToString(myconvert(data[i]));
                             vx.DataStringValue = s;
                             vals.Add(vx);
                         }// i
                     }// data
                 }
                 else if (t == typeof(int))
                 {
                     vv.DataType = "int";
                     vv.IsCategVar = false;
                     int[] data = input.GetData<int[]>(v.ID);
                     if ((data != null) && (data.Length > 0))
                     {
                         for (int i = 0; i < data.Length; ++i)
                         {
                             ValueDesc vx = new ValueDesc();
                             vx.Index = i;
                             String s = Convert.ToString(data[i]);
                             vx.DataStringValue = s;
                             vals.Add(vx);
                         }// i
                     }// data
                 }
                 else if (t == typeof(short))
                 {
                     vv.DataType = "short";
                     vv.IsCategVar = false;
                     short[] data = input.GetData<short[]>(v.ID);
                     if ((data != null) && (data.Length > 0))
                     {
                         for (int i = 0; i < data.Length; ++i)
                         {
                             ValueDesc vx = new ValueDesc();
                             vx.Index = i;
                             String s = Convert.ToString(data[i]);
                             vx.DataStringValue = s;
                             vals.Add(vx);
                         }// i
                     }// data
                 }
                 else if (t == typeof(bool))
                 {
                     vv.DataType = "bool";
                     vv.IsCategVar = true;
                     bool[] data = input.GetData<bool[]>(v.ID);
                     if ((data != null) && (data.Length > 0))
                     {
                         for (int i = 0; i < data.Length; ++i)
                         {
                             ValueDesc vx = new ValueDesc();
                             vx.Index = i;
                             String s = Convert.ToString(data[i]);
                             vx.DataStringValue = s;
                             vals.Add(vx);
                         }// i
                     }// data
                 }
                 vv.Values = vals;
                 oSet.Variables.Add(vv);
             }// v
         }
         catch (Exception ex)
         {
             err = ex;
         }
         return new Tuple<StatDataSet, Exception>(oSet, err);
     }, cancellationToken);
 }// readDataSet
 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;
 }
 }// RemoveVariables
 public async void AddToDataSet()
 {
     var pAna = this.Anacompo;
     if (pAna == null)
     {
         return;
     }
     if (!pAna.IsValid)
     {
         return;
     }
     var oSet = this.CurrentStatDataSet;
     if (oSet == null)
     {
         return;
     }
     if (!oSet.IsValid)
     {
         return;
     }
     var inds = pAna.RecodedInds;
     if (inds == null)
     {
         return;
     }
     var oIndexes = pAna.Indexes;
     if (oIndexes == null)
     {
         return;
     }
     int nMax = this.FactorCount;
     int nv = this.FactorCount;
     if (nv < 1)
     {
         nv = 3;
     }
     if (nv > nMax)
     {
         nv = nMax;
     }
     int nr = inds.GetLength(0);
     var pMan = this.DataService;
     if (pMan == null)
     {
         return;
     }
     this.IsBusy = true;
     try
     {
         List<VariableDesc> oVars = new List<VariableDesc>();
         String prefix = this.FactorPrefix;
         for (int i = 0; i < nv; ++i)
         {
             VariableDesc oVar = new VariableDesc();
             oVar.DataSetId = oSet.Id;
             oVar.Name = String.Format("{0}{1}", prefix, i + 1);
             oVar.IsCategVar = false;
             oVar.DataType = "float";
             oVar.Description = String.Format("Composante principale {0}", i + 1);
             oVar.IsModified = true;
             List<ValueDesc> vals = new List<ValueDesc>();
             for (int j = 0; j < nr; ++j)
             {
                 ValueDesc v = new ValueDesc();
                 v.Index = oIndexes[j];
                 v.DataStringValue = Convert.ToString(inds[j, i]);
                 v.IsModified = true;
                 vals.Add(v);
             }// j
             oVar.Values = new ValueDescs(vals);
             oVars.Add(oVar);
         }// i
         var xx = await Task.Run<Tuple<bool, Exception>>(() =>
         {
             return pMan.MaintainsVariableAndValues(oVars);
         });
         if ((xx != null) && (xx.Item2 != null))
         {
             this.ShowError(xx.Item2);
         }
     }
     catch (Exception ex)
     {
         this.ShowError(ex);
     }
     this.IsBusy = false;
 }// addDataSet
        private static bool UpdateSubitems(TreeView view, TreeViewItem item, string name, VariableDesc v, IntPtr sf, IntPtr pc)
        {
            string category = item.Tag as string;

            string head, tail;

            if (Strings.SplitHead(name, out head, out tail))
            {
                if (!string.Equals(category, head))
                {
                    return(false);
                }
                else
                {
                    foreach (TreeViewItem subItem in item.Items)
                    {
                        if (UpdateSubitems(view, subItem, tail, v, sf, pc))
                        {
                            return(true);
                        }
                    }

                    Add(view, item, tail, v.Type, v.Value, v.Address.ToString("X"), sf, pc);

                    return(true);
                }
            }
            else
            {
                if (string.Equals(category, name))
                {
                    UpdateItem(item, name, v.Type, v.Value, v.Address.ToString("X"), sf, pc);
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
        }
 private static bool IsForVariable(VariableDesc v, TreeViewItem i)
 {
     return(string.Equals(v.Name, i.Tag as string));
 }
 public Tuple<VariableDesc, Exception> GetVariable(VariableDesc oVar)
 {
     VariableDesc oRet = null;
     Exception err = null;
     if (oVar == null)
     {
         return new Tuple<VariableDesc, Exception>(null, new ArgumentNullException());
     }
     try
     {
         using (var ctx = getContext())
         {
             DbVariable p = findVariable(ctx, oVar);
             if (p != null)
             {
                 convertVariable(p, oRet);
             }
         }// ctx
     }
     catch (Exception ex)
     {
         err = ex;
     }
     return new Tuple<VariableDesc, Exception>(oRet, err);
 }
        public Tuple<IEnumerable<ValueDesc>, Exception> GetVariableValues(VariableDesc oVar, int skip, int taken)
        {
            List<ValueDesc> oRet = new List<ValueDesc>();
            Exception err = null;
            if (oVar == null)
            {
                return new Tuple<IEnumerable<ValueDesc>, Exception>(null, new ArgumentNullException());
            }
            try
            {
                using (var ctx = getContext())
                {
                    DbVariable pVar = findVariable(ctx, oVar);
                    if (pVar == null)
                    {
                        return new Tuple<IEnumerable<ValueDesc>, Exception>(null, new ArgumentException());
                    }
                    int nMax = pVar.Values.Count();
                    if (skip < 0)
                    {
                        skip = 0;
                    }
                    if (taken < 0)
                    {
                        taken = 0;
                    }
                    if ((skip + taken) > nMax)
                    {
                        taken = nMax - skip;
                        if (taken < 0)
                        {
                            taken = 0;
                        }
                    }
                    if (taken == 0)
                    {
                        if (skip > 0)
                        {
                            var q = (from x in pVar.Values orderby x.Index ascending select x).Skip(skip);
                            foreach (var p in q)
                            {
                                ValueDesc pp = new ValueDesc();
                                convertValue(p, pp);
                                oRet.Add(pp);
                            }// p
                        }
                        else
                        {
                            var q = from x in pVar.Values orderby x.Index ascending select x;
                            foreach (var p in q)
                            {
                                ValueDesc pp = new ValueDesc();
                                convertValue(p, pp);
                                oRet.Add(pp);
                            }// p
                        }

                    }
                    else
                    {
                        if (skip > 0)
                        {
                            var q = (from x in pVar.Values orderby x.Index ascending select x).Skip(skip).Take(taken);
                            foreach (var p in q)
                            {
                                ValueDesc pp = new ValueDesc();
                                convertValue(p, pp);
                                oRet.Add(pp);
                            }// p
                        }
                        else
                        {
                            var q = (from x in pVar.Values orderby x.Index ascending select x).Take(taken);
                            foreach (var p in q)
                            {
                                ValueDesc pp = new ValueDesc();
                                convertValue(p, pp);
                                oRet.Add(pp);
                            }// p
                        }
                    }
                }// ctx
            }
            catch (Exception ex)
            {
                err = ex;
            }
            return new Tuple<IEnumerable<ValueDesc>, Exception>(oRet, err);
        }
 public PlotModel createNormalPlotModel(VariableDesc oCategVar, VariableDesc oVar)
 {
     if (oVar == null)
     {
         return null;
     }
     var srcData = ComputeVariableCategValues(oCategVar, oVar);
     if (srcData == null)
     {
         return null;
     }
     List<ValueDesc> sortedData = new List<ValueDesc>();
     List<double> oList = new List<double>();
     Dictionary<String, ScatterSeries> oDict = new Dictionary<string, ScatterSeries>();
     foreach (var s in srcData.Keys)
     {
         oDict[s] = new ScatterSeries(s) { MarkerType = MarkerType.Circle };
         var vals = srcData[s];
         foreach (var v in vals)
         {
             v.StringTag = s;
             sortedData.Add(v);
             oList.Add(v.DoubleValue);
         }
     }// s
     sortedData.Sort((v1, v2) =>
     {
         double d1 = v1.DoubleValue;
         double d2 = v2.DoubleValue;
         int nRet = -1;
         if (d1 > d2)
         {
             nRet = 1;
         }
         else if (d1 == d2)
         {
             nRet = 0;
         }
         return nRet;
     });
     int n = sortedData.Count;
     if (n < 2)
     {
         return null;
     }
     DescriptiveStatistics st = new DescriptiveStatistics(oList);
     double mean = st.Mean;
     double dev = st.StandardDeviation;
     if (dev <= 0.0)
     {
         return null;
     }
     var dist = new Normal();
     var s2 = new LineSeries { Title = "Distribution normale" };
     int nTotal = 1;
     int i = 0;
     double dn = (double)n;
     var oAr = sortedData.ToArray();
     ValueDesc vCur = null;
     while (i < n)
     {
         vCur = oAr[i];
         double xMax = vCur.DoubleValue;
         int c = 0;
         while ((vCur.DoubleValue <= xMax) && (i < n))
         {
             double x = vCur.DoubleValue;
             double xr = (x - mean) / dev;
             double yr = dist.CumulativeDistribution(xr);
             s2.Points.Add(new DataPoint(x, yr));
             double yc = (double)nTotal / dn;
             vCur.DoubleTag = yc;
             String scateg = vCur.StringTag;
             if ((!String.IsNullOrEmpty(scateg)) && oDict.ContainsKey(scateg))
             {
                 oDict[scateg].Points.Add(new ScatterPoint(x, yc) { Tag = vCur.Index });
             }
             ++i;
             ++c;
             if (i >= n)
             {
                 break;
             }
             vCur = oAr[i];
         }
         nTotal += c;
     }// i
     PlotModel model = new PlotModel(oVar.Name);
     foreach (var ss in oDict.Values)
     {
         model.Series.Add(ss);
     }
     s2.Smooth = true;
     model.Series.Add(s2);
     return model;
 }
 public Tuple<Dictionary<string, Dictionary<VariableDesc, List<ValueDesc>>>, Exception> ReadCategValues(VariableDesc oCategVar, IEnumerable<VariableDesc> oDataVars)
 {
     Dictionary<string, Dictionary<VariableDesc, List<ValueDesc>>> oRet = null;
     Exception err = null;
     try
     {
         using (var ctx = getContext())
         {
             var xx = readCategValues(ctx, oCategVar, oDataVars);
             oRet = xx.Item1;
             err = xx.Item2;
         }// ctx
     }
     catch (Exception ex)
     {
         err = ex;
     }
     return new Tuple<Dictionary<string, Dictionary<VariableDesc, List<ValueDesc>>>, Exception>(oRet, err);
 }
 public IEnumerable<int> GetCommonIndexes(VariableDesc oVar1, VariableDesc oVar2)
 {
     List<VariableDesc> oList = new List<VariableDesc>();
     oList.Add(oVar1);
     oList.Add(oVar2);
     return GetCommonIndexes(oList);
 }
 public Tuple<Dictionary<string, Dictionary<VariableDesc, double[]>>, Exception> ReadNumCategValues(VariableDesc oCategVar, IEnumerable<VariableDesc> oDataVars)
 {
     Dictionary<string, Dictionary<VariableDesc, double[]>> oRet = null;
     Exception err = null;
     try
     {
         Dictionary<string, Dictionary<VariableDesc, List<ValueDesc>>> srcDict = null;
         using (var ctx = getContext())
         {
             var xx = readCategValues(ctx, oCategVar, oDataVars);
             srcDict = xx.Item1;
             if ((srcDict == null) || (xx.Item2 != null))
             {
                 return new Tuple<Dictionary<string, Dictionary<VariableDesc, double[]>>, Exception>(null, xx.Item2);
             }
         }// ctx
         oRet = new Dictionary<string, Dictionary<VariableDesc, double[]>>();
         var keys = srcDict.Keys;
         foreach (var key in keys)
         {
             oRet[key] = new Dictionary<VariableDesc, double[]>();
             var curDict = oRet[key];
             var src = srcDict[key];
             foreach (var vdata in src.Keys)
             {
                 List<double> dd = new List<double>();
                 var ll = src[vdata];
                 foreach (var v in ll)
                 {
                     double d = 0.0;
                     if (double.TryParse(StatHelpers.ConvertValue(v.DataStringValue), out d))
                     {
                         dd.Add(d);
                     }
                 }// v
                 curDict[vdata] = dd.ToArray();
             }// vsata
         }// key
     }
     catch (Exception ex)
     {
         err = ex;
     }
     return new Tuple<Dictionary<string, Dictionary<VariableDesc, double[]>>, Exception>(oRet, null);
 }
 public static List<Tuple<double, double, Cluster>> GetClustersCenters(VariableDesc oVarX, VariableDesc oVarY, CategClusterSet oSet)
 {
     List<Tuple<double,double, Cluster>> oList = new List<Tuple<double, double,Cluster>>();
     if ((oVarX == null) || (oVarY == null) || (oSet == null))
     {
         return oList;
     }
     var col = new VariableDesc[] { oVarX, oVarY};
     var tt = GetClustersCenters(col, oSet);
     if (tt != null)
     {
         foreach (var t in tt)
         {
             double[] dd = t.Item1;
             if ((dd != null) && (dd.Length > 1))
             {
                 double x = dd[0];
                 double y = dd[1];
                 Cluster c = t.Item2;
                 oList.Add(new Tuple<double, double, Cluster>(x, y, c));
             }
         }// t
     }// tt
     return oList;
 }
 protected void convertVariable(DbVariable p, VariableDesc pp)
 {
     pp.Id = p.Id;
     pp.DataSetId = p.DataSetId;
     pp.DataType = p.VarType;
     pp.Name = p.Name;
     pp.IsCategVar = p.IsCateg;
     pp.IsIdVar = p.IsId;
     pp.IsNameVar = p.IsName;
     pp.IsImageVar = p.IsImageVar;
     pp.IsInfoVar = p.IsInfoVar;
     pp.Description = p.Description;
     pp.IsModified = false;
 }
 public Dictionary<int, String> ComputeCategDict(VariableDesc oCateg)
 {
     Dictionary<int, String> oRet = new Dictionary<int, string>();
     ValueDescs categVals = null;
     if ((oCateg != null) && oCateg.HasValues)
     {
         categVals = oCateg.Values;
     }
     if (categVals == null)
     {
         return oRet;
     }
     foreach (var v in categVals)
     {
         int key = v.Index;
         String s = StatHelpers.ConvertValue(v.DataStringValue);
         if ((key >= 0) && (!String.IsNullOrEmpty(s)))
         {
             oRet[key] = s;
         }
     }// v
     return oRet;
 }
        protected Tuple<VariableInfo, Exception> getVariableInfo(statdataEntities ctx, VariableDesc oVar)
        {
            Exception err = null;
            VariableInfo info = null;
            if (oVar == null)
            {
                return new Tuple<VariableInfo, Exception>(info, new ArgumentNullException());
            }

            DbVariable pVar = findVariable(ctx, oVar);
            if (pVar == null)
            {
                return new Tuple<VariableInfo, Exception>(info, err);
            }
            info = new VariableInfo();
            String stype = pVar.VarType.Trim().ToLower();
            info.VariableId = pVar.Id;
            info.VariableName = pVar.Name;
            info.DataSetId = pVar.DataSetId;
            info.DataSetName = pVar.DataSet.Name;
            info.DataType = stype;
            info.IsCategVar = pVar.IsCateg;
            if ((stype == "bool") || (stype == "string"))
            {
                info.IsCategVar = true;
            }
            {
                var q1 = pVar.Values;
                int nMissing = 0;
                int nCount = 0;
                foreach (var p in q1)
                {
                    String sval = p.Value;
                    if (!String.IsNullOrEmpty(sval))
                    {
                        sval = StatHelpers.ConvertValue(sval);
                    }
                    if (String.IsNullOrEmpty(sval))
                    {
                        ++nMissing;
                    }
                    ++nCount;
                }// p
                info.MissingValuesCount = nMissing;
                info.TotalValuesCount = nCount;
            }
            if (info.IsCategVar)
            {
                Dictionary<String, int> dict = new Dictionary<string, int>();
                var q2 = from x in pVar.Values select x.Value;
                foreach (var p in q2)
                {
                    String sval = StatHelpers.ConvertValue(p);
                    if (!String.IsNullOrEmpty(sval))
                    {
                        if (!dict.ContainsKey(sval))
                        {
                            dict[sval] = 1;
                        }
                        else
                        {
                            dict[sval] = dict[sval] + 1;
                        }
                    }
                }// p
                CategValueDescs vv = new CategValueDescs();
                var keys = dict.Keys;
                foreach (var s in keys)
                {
                    CategValueDesc c = new CategValueDesc();
                    c.StringValue = s;
                    c.Count = dict[s];
                    c.VariableId = info.VariableId;
                    vv.Add(c);
                }
                info.CategValues = vv;
                info.DistinctValues = keys.ToList();
            }
            else
            {
                var q3 = pVar.Values;
                int nCount = 0;
                List<double> dList = new List<double>();
                foreach (var p in q3)
                {
                    String sval = StatHelpers.ConvertValue(p.Value);
                    if (!String.IsNullOrEmpty(sval))
                    {
                        double xcur = 0;
                        if (double.TryParse(sval, out xcur))
                        {
                            dList.Add(xcur);
                        }// ok
                    }
                }// p
                nCount = dList.Count();
                if (nCount > 0)
                {
                    DescriptiveStatistics st = new DescriptiveStatistics(dList);
                    info.MinValue = st.Minimum;
                    info.MaxValue = st.Maximum;
                    info.MeanValue = myconvert(st.Mean);
                    info.Deviation = myconvert(st.StandardDeviation);
                    info.Skewness = myconvert(st.Skewness);
                    info.Flatness = myconvert(st.Kurtosis);
                    dList.Sort();
                    var oAr = dList.ToArray();
                    info.Quantile05 = myconvert(SortedArrayStatistics.Quantile(oAr, 0.05));
                    info.Quantile10 = myconvert(SortedArrayStatistics.Quantile(oAr, 0.10));
                    info.Quantile25 = myconvert(SortedArrayStatistics.Quantile(oAr, 0.25));
                    info.Median = myconvert(SortedArrayStatistics.Quantile(oAr, 0.5));
                    info.Quantile75 = myconvert(SortedArrayStatistics.Quantile(oAr, 0.75));
                    info.Quantile90 = myconvert(SortedArrayStatistics.Quantile(oAr, 0.90));
                    info.Quantile95 = myconvert(SortedArrayStatistics.Quantile(oAr, 0.10));
                }
            }
            info.IsModified = false;
            //
            return new Tuple<VariableInfo, Exception>(info, err);
        }
 public CorrelData ComputeCorrelation(VariableDesc oVar1, VariableDesc oVar2)
 {
     CorrelData oRet = null;
     if ((oVar1 == null) || (oVar2 == null))
     {
         return null;
     }
     if (!oVar1.IsNumVar)
     {
         return null;
     }
     if (!oVar2.IsNumVar)
     {
         return null;
     }
     try
     {
         var dict = GetCommonValues(new List<VariableDesc>() { oVar1, oVar2 });
         if (dict == null)
         {
             return null;
         }
         var vars = dict.Keys.ToArray();
         if (vars.Length < 2)
         {
             return null;
         }
         List<double> oList1 = new List<double>();
         List<double> oList2 = new List<double>();
         var v1 = vars[0];
         var vals1 = dict[v1];
         var v2 = vars[1];
         var vals2 = dict[v2];
         foreach (var vx in vals1)
         {
             int index = vx.Index;
             var q = from x in vals2 where x.Index == index select x;
             if (q.Count() > 0)
             {
                 var vy = q.First();
                 oList1.Add(vx.DoubleValue);
                 oList2.Add(vy.DoubleValue);
             }
         }// vx
         if (oList1.Count < 4)
         {
             return null;
         }
         oRet = ComputeCorrelation(oList1, oList2);
         if (oRet != null)
         {
             oRet.FirstName = v1.Name;
             oRet.SecondName = v2.Name;
         }
     }
     catch (Exception /*ex */)
     {
         oRet = null;
     }
     return oRet;
 }
 protected Tuple<Dictionary<string, List<ValueDesc>>, Exception> readCategValues(statdataEntities ctx,
     VariableDesc oCategVar, VariableDesc oDataVar)
 {
     Exception err = null;
     Dictionary<String, List<ValueDesc>> xRet = null;
     if ((oCategVar == null) || (oDataVar == null))
     {
         return new Tuple<Dictionary<string, List<ValueDesc>>, Exception>(null, new ArgumentNullException());
     }
     try
     {
         DbVariable pCategVar = findVariable(ctx, oCategVar);
         DbVariable pDataVar = findVariable(ctx, oDataVar);
         if ((pCategVar == null) || (pDataVar == null))
         {
             return new Tuple<Dictionary<string, List<ValueDesc>>, Exception>(null, new ArgumentException());
         }
         xRet = new Dictionary<string, List<ValueDesc>>();
         var qcateg = from x in ctx.DbValues where x.VariableId == pCategVar.Id select x;
         foreach (var vcateg in qcateg)
         {
             int index = vcateg.Index;
             String scateg = StatHelpers.ConvertValue(vcateg.Value);
             if ((index >= 0) && (!String.IsNullOrEmpty(scateg)))
             {
                 var qdata = from x in ctx.DbValues where (x.VariableId == pDataVar.Id) && (x.Index == index) select x;
                 foreach (var vdata in qdata)
                 {
                     String sdata = StatHelpers.ConvertValue(vdata.Value);
                     if (!String.IsNullOrEmpty(sdata))
                     {
                         ValueDesc vv = new ValueDesc();
                         convertValue(vdata, vv);
                         if (!xRet.ContainsKey(scateg))
                         {
                             List<ValueDesc> ll = new List<ValueDesc>();
                             ll.Add(vv);
                             xRet[scateg] = ll;
                         }
                         else
                         {
                             (xRet[scateg]).Add(vv);
                         }
                     }// sdata
                 }// vdata
             }// vcateg
         }// vcateg
     }
     catch (Exception ex)
     {
         err = ex;
     }
     return new Tuple<Dictionary<string, List<ValueDesc>>, Exception>(xRet, err);
 }
 public Dictionary<String, ValueDescs> ComputeVariableCategValues(VariableDesc oCateg, VariableDesc oVar)
 {
     Dictionary<String, ValueDescs> oRet = new Dictionary<string, ValueDescs>();
     ValueDescs categVals = oCateg.Values;
     ValueDescs dataVals = oVar.Values;
     if (categVals.Count < 1)
     {
         oRet[DEFAULT_SERIE_NAME] = dataVals;
     }
     else
     {
         foreach (var vcateg in categVals)
         {
             String skey = StatHelpers.ConvertValue(vcateg.DataStringValue);
             if (!String.IsNullOrEmpty(skey))
             {
                 var q = from x in dataVals where x.Index == vcateg.Index select x;
                 if (q.Count() > 0)
                 {
                     var vdata = q.First();
                     String sval = StatHelpers.ConvertValue(vdata.DataStringValue);
                     if (!String.IsNullOrEmpty(sval))
                     {
                         if (!oRet.ContainsKey(skey))
                         {
                             oRet[skey] = new ValueDescs();
                         }
                         oRet[skey].Add(vdata);
                     }// ok
                 }
             }// sKey
         }// vcateg
     }
     return oRet;
 }
        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);
        }
 public PlotModel CreateCartesianPlot(String sTitle, IEnumerable<IndivData> inds,
     VariableDesc oVarX, VariableDesc oVarY,
     Dictionary<int, OxyImage> imagesDict = null,
     Dictionary<int, String> categDict = null,
     bool bPoints = true,
     bool bLabels = false,
     bool bImages = false,
     bool bZeroCrossing = false,
     bool bLeastSquares = false,
     List<Tuple<double,double,Cluster>> oCenters = null)
 {
     if ((inds == null) || (oVarX == null) || (oVarY == null))
     {
         return null;
     }
     PlotModel model = null;
     try
     {
         ValueDescs xvars = oVarX.Values;
         ValueDescs yvars = oVarY.Values;
         if ((xvars == null) || (yvars == null))
         {
             return null;
         }
         Dictionary<int, Tuple<double, double, IndivData>> vals = new Dictionary<int, Tuple<double, double, IndivData>>();
         List<double> xlist = new List<double>();
         List<double> ylist = new List<double>();
         List<DataPoint> pointsList = null;
         if (bLeastSquares)
         {
             pointsList = new List<DataPoint>();
         }
         foreach (var ind in inds)
         {
             if ((ind != null) && ind.IsValid)
             {
                 int index = ind.IndivIndex;
                 var qx = from x in xvars where x.Index == index select x;
                 var qy = from y in yvars where y.Index == index select y;
                 if ((qx.Count() > 0) && (qy.Count() > 0))
                 {
                     var vx = qx.First();
                     var vy = qy.First();
                     double xx = vx.DoubleValue;
                     double yy = vy.DoubleValue;
                     xlist.Add(xx);
                     ylist.Add(yy);
                     vals[index] = new Tuple<double, double, IndivData>(xx, yy, ind);
                     if (bLeastSquares)
                     {
                         pointsList.Add(new DataPoint(xx, yy));
                     }
                 }
             }// ind
         }// ind
         int nr = xlist.Count;
         if (nr < 1)
         {
             return null;
         }
         double xmin = xlist.Min();
         double xmax = xlist.Max();
         double ymin = ylist.Min();
         double ymax = ylist.Max();
         if ((xmin >= xmax) || (ymin >= ymax))
         {
             return null;
         }
         double xwidth = IMAGE_SCALE_FACTOR * (xmax - xmin) / nr;
         model = new PlotModel(sTitle);
         model.Subtitle = String.Format("{0} / {1}", oVarY.Name, oVarX.Name);
         model.LegendPlacement = LegendPlacement.Outside;
         if (bZeroCrossing)
         {
             model.Axes.Add(new LinearAxis(AxisPosition.Bottom, xmin, xmax, oVarX.Name) { PositionAtZeroCrossing = true });
             model.Axes.Add(new LinearAxis(AxisPosition.Left, ymin, ymax, oVarY.Name) { PositionAtZeroCrossing = true });
         }
         else
         {
             model.Axes.Add(new LinearAxis(AxisPosition.Bottom, xmin, xmax, oVarX.Name));
             model.Axes.Add(new LinearAxis(AxisPosition.Left, ymin, ymax, oVarY.Name));
         }
         Dictionary<String, ScatterSeries> oSeries = new Dictionary<string, ScatterSeries>();
         var indexes = vals.Keys;
         int nColor = 0;
         foreach (var index in indexes)
         {
             var t = vals[index];
             double x = t.Item1;
             double y = t.Item2;
             IndivData ind = t.Item3;
             if (bPoints)
             {
                 if ((categDict != null) && categDict.ContainsKey(index))
                 {
                     String scateg = categDict[index];
                     if (!String.IsNullOrEmpty(scateg))
                     {
                         if (!oSeries.ContainsKey(scateg))
                         {
                             OxyColor color = StatModelViewBase.GetColor(nColor++);
                             oSeries[scateg] = new ScatterSeries(scateg) { MarkerType = MarkerType.Circle,MarkerFill=color };
                         }
                         oSeries[scateg].Points.Add(new ScatterPoint(x, y) { Tag = ind });
                     }
                     else
                     {
                         if (!oSeries.ContainsKey(DEFAULT_SERIE_NAME))
                         {
                             OxyColor color = StatModelViewBase.GetColor(nColor++);
                             oSeries[DEFAULT_SERIE_NAME] = new ScatterSeries(DEFAULT_SERIE_NAME) { MarkerType = MarkerType.Circle,MarkerFill=color };
                         }
                         oSeries[DEFAULT_SERIE_NAME].Points.Add(new ScatterPoint(x, y) { Tag = ind });
                     }
                 }
                 else
                 {
                     if (!oSeries.ContainsKey(DEFAULT_SERIE_NAME))
                     {
                         OxyColor color = StatModelViewBase.GetColor(nColor++);
                         oSeries[DEFAULT_SERIE_NAME] = new ScatterSeries(DEFAULT_SERIE_NAME) { MarkerType = MarkerType.Circle,MarkerFill=color };
                     }
                     oSeries[DEFAULT_SERIE_NAME].Points.Add(new ScatterPoint(x, y) { Tag = ind });
                 }
             }// points
             if (bLabels)
             {
                 String name = ind.IdString;
                 if (String.IsNullOrEmpty(name))
                 {
                     name = ind.Name;
                 }
                 if (!String.IsNullOrEmpty(name))
                 {
                     model.Annotations.Add(new TextAnnotation
                     {
                         Position = new DataPoint(x, y),
                         Text = name,
                         FontWeight = OxyPlot.FontWeights.Bold,
                         HorizontalAlignment = OxyPlot.HorizontalAlignment.Center,
                         VerticalAlignment = OxyPlot.VerticalAlignment.Middle,
                         Tag = ind
                     });
                 }// write
             }// labels
             if (bImages && (imagesDict != null) && imagesDict.ContainsKey(index))
             {
                 OxyImage image = imagesDict[index];
                 var data = ind.PhotoData;
                 if (image != null)
                 {
                     model.Annotations.Add(new ImageAnnotation
                     {
                         ImageSource = image,
                         X = new PlotLength(x, PlotLengthUnit.Data),
                         Y = new PlotLength(y, PlotLengthUnit.Data),
                         HorizontalAlignment = OxyPlot.HorizontalAlignment.Center,
                         VerticalAlignment = OxyPlot.VerticalAlignment.Middle,
                         Width = new PlotLength(xwidth, PlotLengthUnit.Data)
                     });
                 }// image
             }// images
         }// index
         if (bPoints)
         {
             foreach (var s1 in oSeries.Values)
             {
                 model.Series.Add(s1);
             }// s1
         }// bPoints
         if ((oCenters != null) && (oCenters.Count > 0))
         {
             foreach (var t in oCenters)
             {
                 Cluster c = t.Item3;
                 if (c != null)
                 {
                     String name = c.Name;
                     if (String.IsNullOrEmpty(name))
                     {
                         name = String.Format("CL{0}", c.Index + 1);
                     }
                     double x = t.Item1;
                     double y = t.Item2;
                     model.Annotations.Add(new TextAnnotation
                     {
                         Position = new DataPoint(x, y),
                         Text = name,
                         FontWeight = OxyPlot.FontWeights.Bold,
                         HorizontalAlignment = OxyPlot.HorizontalAlignment.Center,
                         VerticalAlignment = OxyPlot.VerticalAlignment.Middle
                     });
                 }// c
             }// t
         }
         if (bLeastSquares)
         {
             double a, b;
             LeastSquaresFit(pointsList, out a, out b);
             model.Annotations.Add(new LineAnnotation { Slope = a, Intercept = b, Text = "Moindres Carrés" });
         }// leastsquares
     }// try
     catch (Exception /* ex */)
     {
         model = null;
     }
     return model;
 }
 public Tuple<IEnumerable<VariableDesc>, Exception> GetDataSetVariablesAndData(StatDataSet oSet)
 {
     List<VariableDesc> oRet = null;
     Exception err = null;
     if (oSet == null)
     {
         return new Tuple<IEnumerable<VariableDesc>, Exception>(null, new ArgumentNullException());
     }
     try
     {
         using (var ctx = getContext())
         {
             DbDataSet pSet = findDataSet(ctx, oSet);
             if (pSet != null)
             {
                 var q = from x in pSet.Variables orderby x.Name ascending select x;
                 oRet = new List<VariableDesc>();
                 foreach (var p in q)
                 {
                     VariableDesc pp = new VariableDesc();
                     convertVariable(p, pp);
                     List<ValueDesc> oList = new List<ValueDesc>();
                     var col = p.Values;
                     foreach (var v in col)
                     {
                         if (v.Index >= 0)
                         {
                             ValueDesc vv = new ValueDesc();
                             convertValue(v, vv);
                             oList.Add(vv);
                         }// v
                     }// v
                     pp.Values = new ValueDescs(oList);
                     var xx = getVariableInfo(ctx, pp);
                     if (xx.Item2 != null)
                     {
                         return new Tuple<IEnumerable<VariableDesc>, Exception>(oRet, err);
                     }
                     pp.Info = xx.Item1;
                     oRet.Add(pp);
                 }// p
             }// pSet
         }// ctx
         if ((oRet != null) && (oRet.Count > 1))
         {
             oRet.Sort();
         }
     }
     catch (Exception ex)
     {
         err = ex;
     }
     return new Tuple<IEnumerable<VariableDesc>, Exception>(oRet, err);
 }
 private async void buttonAdd_Click(object sender, RoutedEventArgs e)
 {
     var model = getModel();
     if (model == null)
     {
         return;
     }
     var oSet = model.CurrentStatDataSet;
     if (oSet == null)
     {
         return;
     }
     var pMan = model.DataService;
     if ((!oSet.IsValid) || (pMan == null))
     {
         return;
     }
     VariableDesc vv = new VariableDesc();
     vv.DataSetId = oSet.Id;
     vv.Name = "ArrangeIndex";
     vv.DataType = "short";
     vv.IsCategVar = true;
     vv.Description = "Matrix Arrange";
     this.buttonAdd.IsEnabled = false;
     this.buttonCompute.IsEnabled = false;
     model.IsBusy = true;
     var yy = await Task.Run<Tuple<bool, Exception>>(() =>
     {
         return pMan.RemoveVariable(vv);
     });
     if ((yy != null) && (yy.Item2 != null))
     {
         this.buttonAdd.IsEnabled = true;
         this.buttonCompute.IsEnabled = true;
         model.ShowError(yy.Item2);
         model.IsBusy = false;
         return;
     }
     var xx = await Task.Run<Tuple<VariableDesc, Exception>>(() =>
     {
         return pMan.MaintainsVariable(vv);
     });
     if ((xx != null) && (xx.Item1 != null) && (xx.Item2 == null))
     {
         VariableDesc oVar = xx.Item1;
         int nVarId = oVar.Id;
         List<ValueDesc> vals = new List<ValueDesc>();
         foreach (var ind in model.Individus)
         {
             int ival = ind.Position;
             int index = ind.IndivIndex;
             if ((ival >= 0) && (index >= 0))
             {
                 ValueDesc v = new ValueDesc();
                 v.VariableId = nVarId;
                 v.Index = index;
                 v.DataStringValue = Convert.ToString(ival);
                 v.IsModified = true;
                 vals.Add(v);
             }
         }// ind
         if (vals.Count > 0)
         {
             var zz = await Task.Run<Tuple<bool, Exception>>(() =>
             {
                 return pMan.WriteValues(vals);
             });
             if ((zz != null) && (zz.Item2 != null))
             {
                 model.ShowError(zz.Item2);
             }
         }// vals
     }
     else if ((xx != null) && (xx.Item2 != null))
     {
         model.ShowError(xx.Item2);
     }
     model.IsBusy = false;
     this.buttonAdd.IsEnabled = true;
     this.buttonCompute.IsEnabled = true;
     myUpdateUI();
 }
 public Tuple<VariableInfo, Exception> GetVariableInfo(VariableDesc oVar)
 {
     VariableInfo oRet = null;
     Exception err = null;
     try
     {
         using (var ctx = getContext())
         {
             var xx = getVariableInfo(ctx, oVar);
             if (xx != null)
             {
                 oRet = xx.Item1;
                 err = xx.Item2;
             }
         }// ctx
     }
     catch (Exception ex)
     {
         err = ex;
     }
     return new Tuple<VariableInfo, Exception>(oRet, err);
 }
 public Tuple<Dictionary<string, List<ValueDesc>>, Exception> ReadCategValues(VariableDesc oCategVar, VariableDesc oDataVar)
 {
     using (var ctx = getContext())
     {
         return readCategValues(ctx, oCategVar, oDataVar);
     }
 }
 public Tuple<int, Exception> GetVariableValuesCount(VariableDesc oVar)
 {
     int nRet = 0;
     Exception err = null;
     if (oVar == null)
     {
         return new Tuple<int, Exception>(0, new ArgumentNullException());
     }
     try
     {
         using (var ctx = getContext())
         {
             DbVariable pVar = findVariable(ctx, oVar);
             if (pVar != null)
             {
                 nRet = pVar.Values.Count();
             }
         }// ctx
     }
     catch (Exception ex)
     {
         err = ex;
     }
     return new Tuple<int, Exception>(nRet, err);
 }
 }// refreshIndivs
 private void refreshVariables()
 {
     m_idvar = null;
     m_namevar = null;
     m_photovar = null;
     var col = m_main.Variables;
     foreach (var v in col)
     {
         if (v.IsIdVar)
         {
             m_idvar = v;
             this.IdsVarName = v.Name;
         }
         if (v.IsNameVar)
         {
             m_namevar = v;
             this.NamesVarName = v.Name;
         }
         if (v.IsImageVar)
         {
             m_photovar = v;
             this.PhotosVarName = v.Name;
         }
     }// v
     if (m_idsvarname == m_namesvarname)
     {
         m_idsvarname = null;
         this.IdsVarName = null;
     }
 }