Пример #1
0
        static public int LoadReport(string reportFilename, out string batchFilename, out BindableCollection <LogQueryResultViewModel> logQueryResults)
        {
            logQueryResults = new BindableCollection <LogQueryResultViewModel>();
            XmlDocument reportDoc = new XmlDocument();

            reportDoc.Load(reportFilename);
            XmlNode root = reportDoc.FirstChild;

            batchFilename = null;
            string inputBaseFolder = Herd.Utils.GetDirectory(reportFilename);

            if (root.Name == XMLTags.ReportNodeTag)
            {
                batchFilename = root.Attributes[XMLTags.BatchFilenameAttr].Value;

                foreach (XmlNode child in root.ChildNodes)
                {
                    if (child.Name == XMLTags.QueryNodeTag)
                    {
                        LogQueryResultViewModel logQueryResult;
                        string queryFilename = inputBaseFolder + child.Attributes[XMLTags.nameAttribute].Value;

                        if (File.Exists(queryFilename))
                        {
                            logQueryResult = Serialiazer.ReadObject <LogQueryResultViewModel>(queryFilename);
                            logQueryResult.ImportNonSerializable(Herd.Utils.GetDirectory(queryFilename));
                            logQueryResult.IsNotifying = true;
                            logQueryResults.Add(logQueryResult);
                        }
                    }
                }
            }

            return(logQueryResults.Count);
        }
Пример #2
0
        /// <summary>
        ///     Method called from the view. Generate a report from a set of selected configurations once
        ///     all conditions are fulfilled.
        /// </summary>
        public void MakeReport()
        {
            Task.Run(() =>
            {
                StartLongOperation();
                // Execute the Query
                string batchFilename = LoadedBatch;

                LoadedBatch = "Running query";

                List <TrackGroup> queryResultTracks = null;
                List <Report> queryReports          = null;
                try
                {
                    Query.Execute(LoggedExperiments, OnExperimentalUnitProcessed, out queryResultTracks, out queryReports);
                }
                catch (Exception ex)
                {
                    string exception = ex.ToString();
                }
                //Clone the query
                LogQueryViewModel clonedQuery = Serialiazer.Clone(Query);

                //Create and add to list the result of the query
                LogQueryResultViewModel result = new LogQueryResultViewModel(queryResultTracks, queryReports, clonedQuery);
                LogQueryResults.Add(result);
                //set this last result as selected
                SelectedLogQueryResult = LogQueryResults[LogQueryResults.Count - 1];

                LoadedBatch = batchFilename;
                EndLongOperation();
            });
        }
Пример #3
0
        public void Badger_LogQueryClone()
        {
            LogQueryViewModel query1;

            query1 = new LogQueryViewModel();

            List <string> variableList = new List <string>()
            {
                "E_p", "v", "omega_r", "omega_g"
            };

            //init query1 before copying it
            query1.AddLogVariables(variableList);
            query1.VariablesVM[0].IsSelected = true;
            query1.VariablesVM[2].IsSelected = true;
            query1.LimitTracks  = true;
            query1.MaxNumTracks = 3;
            query1.AddGroupByFork("fork-1");
            query1.InGroupSelectionVariable = "omega_g";
            query1.InGroupSelectionFunction = LogQueryViewModel.FunctionMax;
            query1.OrderByFunction          = LogQueryViewModel.FunctionDscBeauty;
            query1.OrderByVariable          = "E_p";
            query1.OrderByReportType        = ReportType.AllTrainingEpisodes.ToString();

            query1.Validate();

            Assert.IsTrue(query1.CanGenerateReports);


            //The deep copy itself
            Serialiazer.WriteObject("serialization.txt", query1);
            LogQueryViewModel query2 = Serialiazer.Clone(query1);

            //check query2 is a deep copy of query1
            variableList.Remove("omega_g"); //check the list is a deep copy of the original
            foreach (string variable in variableList)
            {
                Assert.IsTrue(query2.LogVariableExists(variable));
            }
            Assert.IsTrue(query2.LogVariableExists("omega_g"));

            Assert.IsTrue(query2.LimitTracks);
            Assert.IsTrue(query2.MaxNumTracks == 3);

            Assert.IsTrue(query2.IsForkUsedToGroup("fork-1"));

            Assert.AreEqual(query1.InGroupSelectionVariable, query2.InGroupSelectionVariable);

            Assert.AreEqual(query1.InGroupSelectionFunction, query2.InGroupSelectionFunction);

            Assert.AreEqual(query2.OrderByFunction, LogQueryViewModel.FunctionDscBeauty);

            Assert.AreEqual(query1.OrderByReportType, query2.OrderByReportType);

            Assert.IsTrue(query2.CanGenerateReports);

            Assert.AreNotEqual(query1.QueryId, query2.QueryId);
        }
Пример #4
0
        /// <summary>
        /// This method saves a set of queries on a experiment batch and their results to some output folder
        /// </summary>
        /// <param name="absBatchFilename">The absolute path to the experiment batch to which the query belongs</param>
        /// <param name="logQueryResults">The set of queries to be saved</param>
        /// <param name="absOutputFolder">Absolute path to the output folder, the name of the output report is taken from the input batch file</param>
        static public void SaveReport(string absBatchFilename, BindableCollection <LogQueryResultViewModel> logQueryResults, string absOutputFolder)
        {
            //save the queries and the report (a set of log query results referencing the queries and the experiment batch)
            string nakedBatchFilename = Herd.Utils.RemoveDirectories(Herd.Utils.RemoveExtension(absBatchFilename, 2));
            string reportFilename     = absOutputFolder + "/" + nakedBatchFilename + Herd.Files.Extensions.ReportExtension;

            using (TextWriter writer = File.CreateText(reportFilename))
            {
                //open the root node in the report
                writer.WriteLine("<" + XMLTags.ReportNodeTag + " " + XMLTags.BatchFilenameAttr + "=\"" + absBatchFilename + "\">");

                foreach (LogQueryResultViewModel logQueryResult in logQueryResults)
                {
                    string nakedLogQueryName = Herd.Utils.RemoveSpecialCharacters(logQueryResult.Name);
                    //Save the reports, each one in a different subfolder
                    string absQueryOutputFolder = absOutputFolder + "/" + nakedLogQueryName;
                    string relOutputFolder      = nakedLogQueryName;

                    if (!Directory.Exists(absQueryOutputFolder))
                    {
                        Directory.CreateDirectory(absQueryOutputFolder);
                    }

                    //Save serializable data
                    string relLogQueryResultFilename = nakedLogQueryName + "/" + nakedLogQueryName + ".xml";
                    string absLogQueryResultFilename = absOutputFolder + "/" + relLogQueryResultFilename;
                    Serialiazer.WriteObject(absLogQueryResultFilename, logQueryResult);

                    //Save non-serializable data
                    Dictionary <string, string> additionalOutputFiles = logQueryResult.ExportNonSerializable(absQueryOutputFolder);

                    //the reference to the query and non-serializable data files
                    writer.WriteLine("  <" + XMLTags.QueryNodeTag + " " + XMLTags.nameAttribute + "=\"" + relLogQueryResultFilename + "\">");

                    foreach (string file in additionalOutputFiles.Keys)
                    {
                        writer.WriteLine("    <" + additionalOutputFiles[file] + ">" + file + "</" + additionalOutputFiles[file] + ">");
                    }
                    writer.WriteLine("  </" + XMLTags.QueryNodeTag + ">");
                }

                //close the root node in the report
                writer.WriteLine("</" + XMLTags.ReportNodeTag + ">");
            }
        }