protected Tuple<Dictionary<VariableDesc, Dictionary<int, ValueDesc>>, Exception> readValues(statdataEntities ctx, IEnumerable<VariableDesc> oVars, IEnumerable<int> oIndexes)
 {
     Dictionary<VariableDesc, Dictionary<int, ValueDesc>> oDictRet = null;
     Exception err = null;
     if ((oVars == null) || (oIndexes == null))
     {
         return new Tuple<Dictionary<VariableDesc, Dictionary<int, ValueDesc>>, Exception>(null, new ArgumentNullException());
     }
     try
     {
         oDictRet = new Dictionary<VariableDesc, Dictionary<int, ValueDesc>>();
         foreach (var oVar in oVars)
         {
             DbVariable pVar = findVariable(ctx, oVar);
             if (pVar == null)
             {
                 return new Tuple<Dictionary<VariableDesc, Dictionary<int, ValueDesc>>, Exception>(null, new ArgumentException());
             }
             var curDict = new Dictionary<int, ValueDesc>();
             foreach (var ind in oIndexes)
             {
                 if (ind >= 0)
                 {
                     var qq = from x in pVar.Values where x.Index == ind select x;
                     if (qq.Count() > 0)
                     {
                         var v = qq.First();
                         var vv = new ValueDesc();
                         convertValue(v, vv);
                         curDict[ind] = vv;
                     }
                 }// ind
             }// ind
             oDictRet[oVar] = curDict;
         }// oVar
     }
     catch (Exception ex)
     {
         err = ex;
     }
     return new Tuple<Dictionary<VariableDesc, Dictionary<int, ValueDesc>>, Exception>(oDictRet, err);
 }
 protected bool writeValues(statdataEntities ctx, IEnumerable<ValueDesc> oVals)
 {
     bool bRet = false;
     foreach (var val in oVals)
     {
         if (val != null)
         {
             int nId = val.Id;
             int index = val.Index;
             int nVarId = val.VariableId;
             String sval = StatHelpers.ConvertValue(val.DataStringValue);
             DbValue pVal = null;
             if (nId != 0)
             {
                 var q = from x in ctx.DbValues where x.Id == nId select x;
                 if (q.Count() > 0)
                 {
                     pVal = q.First();
                     pVal.Value = sval;
                     bRet = true;
                 }
             }
             if (pVal == null)
             {
                 var q = from x in ctx.DbValues where (x.VariableId == nVarId) && (x.Index == index) select x;
                 if (q.Count() > 0)
                 {
                     pVal = q.First();
                     pVal.Value = sval;
                     bRet = true;
                 }
             }
             if (pVal == null)
             {
                 pVal = new DbValue();
                 pVal.Id = nextId(ctx, TAB_VALEUR);
                 pVal.VariableId = nVarId;
                 pVal.Index = index;
                 pVal.Value = sval;
                 ctx.DbValues.Add(pVal);
                 bRet = true;
             }
         }// val
     }// val
     return bRet;
 }
 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);
 }
 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 int nextId(statdataEntities ctx, String name)
 {
     int nRet = 0;
     string sname = name.Trim().ToLower();
     var q = from x in ctx.DbKeys where x.Nom.Trim().ToLower() == sname select x;
     if (q.Count() > 0)
     {
         DbKey p = q.First();
         nRet = p.Valeur;
         p.Valeur = nRet + 1;
     }
     else
     {
         DbKey p = new DbKey();
         p.Nom = sname;
         p.Valeur = 2;
         ctx.DbKeys.Add(p);
         ctx.SaveChanges();
         nRet = 1;
     }
     return nRet;
 }
 protected int[] nextIds(statdataEntities ctx, String name, int count)
 {
     int nRet = 0;
     string sname = name.Trim().ToLower();
     var q = from x in ctx.DbKeys where x.Nom.Trim().ToLower() == sname select x;
     if (q.Count() > 0)
     {
         DbKey p = q.First();
         nRet = p.Valeur;
         p.Valeur = nRet + count;
     }
     else
     {
         DbKey p = new DbKey();
         p.Nom = sname;
         p.Valeur = count + 1;
         ctx.DbKeys.Add(p);
         ctx.SaveChanges();
         nRet = 1;
     }
     int[] pRet = new int[count];
     for (int i = 0; i < count; ++i)
     {
         pRet[i] = nRet + i;
     }
     return pRet;
 }
 protected DbDataSet maintainsDataSet(statdataEntities ctx, StatDataSet oSet)
 {
     if (oSet == null)
     {
         return null;
     }
     String sname = oSet.Name.Trim();
     if (String.IsNullOrEmpty(sname))
     {
         return null;
     }
     DbDataSet pRet = findDataSet(ctx, oSet);
     if (pRet != null)
     {
         pRet.Name = oSet.Name;
         pRet.Description = oSet.Description;
     }
     else
     {
         pRet = new DbDataSet();
         pRet.Id = nextId(ctx, TAB_DATASET);
         pRet.LastIndex = 0;
         pRet.Name = sname;
         pRet.Description = oSet.Description;
         ctx.DbDataSets.Add(pRet);
         ctx.SaveChanges();
     }
     return pRet;
 }
 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 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);
        }
 protected Tuple<IEnumerable<int>, Exception> getIndexes(statdataEntities ctx, IEnumerable<VariableDesc> oVars)
 {
     if (oVars == null)
     {
         return new Tuple<IEnumerable<int>, Exception>(null, new ArgumentNullException());
     }
     List<int> oRet = null;
     Exception err = null;
     try
     {
         HashSet<int> oSet = null;
         foreach (var oVar in oVars)
         {
             DbVariable pVar = findVariable(ctx, oVar);
             if (pVar == null)
             {
                 return new Tuple<IEnumerable<int>, Exception>(null, new ArgumentException());
             }// pVar
             var q = from x in pVar.Values where (x.Index >= 0) select x.Index;
             HashSet<int> oCur = new HashSet<int>();
             foreach (var ind in q)
             {
                 oCur.Add(ind);
             }// q
             if (oSet == null)
             {
                 oSet = oCur;
             }
             else
             {
                 HashSet<int> oDel = new HashSet<int>();
                 foreach (var ind in oSet)
                 {
                     if (!oCur.Contains(ind))
                     {
                         oDel.Add(ind);
                     }
                 }// ind
                 foreach (var ind in oDel)
                 {
                     oSet.Remove(ind);
                 }
                 if (oSet.Count < 1)
                 {
                     break;
                 }
             }// bFirst
         }// oVar
         oRet = (oSet != null) ? oSet.ToList() : new List<int>();
     }
     catch (Exception ex)
     {
         err = ex;
     }
     return new Tuple<IEnumerable<int>, Exception>(oRet, err);
 }
 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;
 }
 protected DbPhoto findPhoto(statdataEntities ctx, PhotoDesc oPhoto)
 {
     DbPhoto pRet = null;
     if (oPhoto == null)
     {
         return pRet;
     }
     if (oPhoto.Id != 0)
     {
         var q = from x in ctx.DbPhotoes where x.Id == oPhoto.Id select x;
         if (q.Count() > 0)
         {
             return q.First();
         }
     }
     String s = oPhoto.Name;
     if (!String.IsNullOrEmpty(s))
     {
         String ss = s.ToLower();
         var qq = from x in ctx.DbPhotoes where x.Name.Trim().ToLower() == ss select x;
         if (qq.Count() > 0)
         {
             return qq.First();
         }
     }
     return pRet;
 }
 protected DbDataSet findDataSet(statdataEntities ctx, StatDataSet oSet)
 {
     DbDataSet pRet = null;
     if (oSet != null)
     {
         if (oSet.Id != 0)
         {
             var q = from x in ctx.DbDataSets where x.Id == oSet.Id select x;
             if (q.Count() > 0)
             {
                 return q.First();
             }
         }
         String sname = oSet.Name.Trim().ToLower();
         if (!String.IsNullOrEmpty(sname))
         {
             var q = from x in ctx.DbDataSets where x.Name.Trim().ToLower() == sname select x;
             if (q.Count() > 0)
             {
                 return q.First();
             }
         }
     }// oSet
     return pRet;
 }