/// <summary>
        /// This function traps the SelectedIndexChanged event of the combobox Case Type
        /// and changes the screen's layout accordingly
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        public void ddlCase_Type_SelectedIndexChanged(object sender, EventArgs e)
        {
            // we always show this
            btnGo.Visible = true;

            // this can be done better, use comparisondata num/den configs to do this..
            int compareMethodID = int.Parse(this.ddlCase_Type.SelectedValue.ToString());

            comparisonData = new ComparisonData(compareMethodID);

            // comparisons are only in numerator, so we check the numerator comparison profile count
            this.pnlSuspPrfl1.Visible = comparisonData.NumeratorProfiles.ComparisonCount >= 1;
            this.pnlSuspPrfl2.Visible = comparisonData.NumeratorProfiles.ComparisonCount >= 2;
            this.pnlSuspPrfl3.Visible = comparisonData.NumeratorProfiles.ComparisonCount >= 3;
            this.pnlSuspPrfl4.Visible = comparisonData.NumeratorProfiles.ComparisonCount >= 4;

            // the knowns are in the numerator and in the denominator, although almost all of the comparisons
            // at the time of writing have either the same number or more knowns in the numerator than in the
            // denominator. doesn't hurt to future-proof though.
            this.pnlKnownPrfl1.Visible = comparisonData.NumeratorProfiles.KnownCount >= 1 || comparisonData.DenominatorProfiles.KnownCount >= 1;
            this.pnlKnownPrfl2.Visible = comparisonData.NumeratorProfiles.KnownCount >= 2 || comparisonData.DenominatorProfiles.KnownCount >= 2;
            this.pnlKnownPrfl3.Visible = comparisonData.NumeratorProfiles.KnownCount >= 3 || comparisonData.DenominatorProfiles.KnownCount >= 3;
            this.pnlKnownPrfl4.Visible = comparisonData.NumeratorProfiles.KnownCount >= 4 || comparisonData.DenominatorProfiles.KnownCount >= 4;

            // we have no bulk comparison scenarios where there are more than two comparison profiles
            this.btnBulk.Visible = comparisonData.NumeratorProfiles.ComparisonCount == 1;

            Session["ComparisonData"] = comparisonData;
        }
    public void AssignPerson(Person person, int idx)
    {
        ComparisonData comp = thingsToCompare[idx];

        comp.idNameField.text   = person.name;
        comp.idGenderField.text = person.gender.ToString();
        comp.id = person.aiController.GetComponent <PersonTag>().storeID;

        var personID = comp.id;

        comp.desireSlider.value = 0.0f;
        thingsOpen[idx]         = false;

        // can we calc sliders?
        if (isReadyToCompare)
        {
            PopulateDesireSliders();
        }

        // can we assign focus?
        Kernal.instance.focusedIndividuals.Clear();
        foreach (var foc in thingsToCompare)
        {
            if (foc != null)
            {
                Kernal.instance.focusedIndividuals.Add(Kernal.instance.store.people[foc.id]);
            }
        }
    }
        // ------------------------------------------------------------------------------------
        // Execution Overrides

        // Logic for creating results data (mandatory override)
        public override IEnumerator ProcessResult()
        {
            var m_TempData    = (AverageFrameTimeResults)GetResultsStruct(); // Get a results struct (mandatory)
            var typedSettings = (AverageFrameTimeSettings)model.settings;    // Set settings to local type

            yield return(WaitForTimer());                                    // Wait for timer

            Timestamp(false);                                                // Perform a timestamp (logic specific)
            for (int i = 0; i < typedSettings.sampleFrames; i++)             // Wait for requested sample frame count (logic specific)
            {
                yield return(new WaitForEndOfFrame());
            }
            m_TempData.avgFrameTime = Timestamp(true);                                                                                                                                 // Perform a timestamp (logic specific)
            if (baselineExists)                                                                                                                                                        // Comparison (mandatory)
            {
                AverageFrameTimeResults referenceData  = (AverageFrameTimeResults)DeserializeResults(ResultsIO.Instance.RetrieveBaseline(suiteName, testTypeName, m_TempData.common)); // Deserialize baseline data (mandatory)
                ComparisonData          comparisonData = (ComparisonData)ProcessComparison(referenceData, m_TempData);                                                                 // Process comparison (mandatory)
                if (comparisonData.delta < model.settings.passFailThreshold)                                                                                                           // Pass/fail decision logic (logic specific)
                {
                    m_TempData.common.PassFail = true;
                }
                else
                {
                    m_TempData.common.PassFail = false;
                }
                comparisonData = null;      // Null comparison (mandatory)
            }
            BuildResultsStruct(m_TempData); // Submit (mandatory)
        }
Пример #4
0
        // Logic for creating results data
        public override IEnumerator ProcessResult()
        {
            var m_TempData = (ExampleResults)GetResultsStruct();                                                                                                     // Must get results struct and cast to this logics results type (mandatory)

            yield return(WaitForTimer());                                                                                                                            // Wait for timer

            var typedSettings = (ExampleSettings)model.settings;                                                                                                     // Set settings to local type (mandatory)

            m_TempData = GetDummyData(m_TempData.common);                                                                                                            // Just get some dummy data for the example (logic specific)
            if (baselineExists)                                                                                                                                      // Comparison (mandatory)
            {
                ExampleResults referenceData  = (ExampleResults)DeserializeResults(ResultsIO.Instance.RetrieveBaseline(suiteName, testTypeName, m_TempData.common)); // Deserialize baseline data (mandatory)
                ComparisonData comparisonData = (ComparisonData)ProcessComparison(referenceData, m_TempData);                                                        // Prrocess comparison (mandatory)
                if (comparisonData.SomeFloatDiff < model.settings.passFailThreshold)                                                                                 // Pass/fail decision logic (logic specific)
                {
                    m_TempData.common.PassFail = true;
                }
                else
                {
                    m_TempData.common.PassFail = false;
                }
                comparisonData = null;      // Null comparison (mandatory)
            }
            BuildResultsStruct(m_TempData); // Submit (mandatory)
        }
Пример #5
0
        // Logic for creating results data (mandatory override)
        public override IEnumerator ProcessResult()
        {
            var typedSettings = (FrameComparisonSettings)model.settings; // Set settings to local type

            if (!typedSettings.useBackBuffer)
            {
                typedSettings.captureCamera.targetTexture = temporaryRt; // Set capture cameras target texture to temporary RT (logic specific)
                dummyCamera.enabled = true;
            }
            else
            {
                ProgressScreen.Instance.progressObject.SetActive(false); // Hide the UI breifly to do the capture
                menuCamera.enabled = false;
            }
            var m_TempData = (FrameComparisonResults)GetResultsStruct(); // Get a results struct (mandatory)

            yield return(WaitForTimer());                                // Wait for timer

            if (typedSettings.useBackBuffer)
            {
                BackBufferCapture();
            }
            else
            {
                doCapture = true; // Perform OnRenderImage logic (logic specific)
            }
            do
            {
                yield return(null);
            } while (resultsTexture == null);                                                                                                                                        // Wait for OnRenderImage logic to complete (logic specific)
            m_TempData.resultFrame = Common.ConvertTextureToString(resultsTexture);                                                                                                  // Convert results texture to Base64 String and save to results data
            if (baselineExists)                                                                                                                                                      // Comparison (mandatory)
            {
                FrameComparisonResults referenceData  = (FrameComparisonResults)DeserializeResults(ResultsIO.Instance.RetrieveBaseline(suiteName, testTypeName, m_TempData.common)); // Deserialize baseline data (mandatory)
                ComparisonData         comparisonData = (ComparisonData)ProcessComparison(referenceData, m_TempData);                                                                // Prrocess comparison (mandatory)
                if (comparisonData.DiffPercentage < model.settings.passFailThreshold)                                                                                                // Pass/fail decision logic (logic specific)
                {
                    m_TempData.common.PassFail = true;
                }
                else
                {
                    m_TempData.common.PassFail = false;
                }
                comparisonData = null;  // Null comparison (mandatory)
            }
            if (typedSettings.useBackBuffer)
            {
                ProgressScreen.Instance.progressObject.SetActive(true); // Show progress screen again
                menuCamera.enabled = true;
            }
            else
            {
                dummyCamera.enabled = false;
            }
            Cleanup();                      // Cleanup (logic specific)
            BuildResultsStruct(m_TempData); // Submit (mandatory)
        }
        // Logic for comparison process (mandatory)
        // TODO - Will use last run test model, need to get this for every call from Viewers?
        public override object ProcessComparison(ResultsBase baselineData, ResultsBase resultsData)
        {
            ComparisonData          newComparison     = new ComparisonData();                     // Create new ComparisonData instance (mandatory)
            AverageFrameTimeResults baselineDataTyped = (AverageFrameTimeResults)baselineData;    // Set baseline data to local type
            AverageFrameTimeResults resultsDataTyped  = (AverageFrameTimeResults)resultsData;     // Set results data to local type

            newComparison.delta = resultsDataTyped.avgFrameTime - baselineDataTyped.avgFrameTime; // Perform comparison logic (logic specific)
            return(newComparison);                                                                // Return (mandatory)
        }
Пример #7
0
        // Logic for comparison process (mandatory)
        // TODO - Will use last run test model, need to get this for every call from Viewers?
        public override object ProcessComparison(ResultsBase baselineData, ResultsBase resultsData)
        {
            ComparisonData newComparison     = new ComparisonData(); // Create new ComparisonData instance (mandatory)
            ExampleResults baselineDataTyped = (ExampleResults)baselineData;
            ExampleResults resultsDataTyped  = (ExampleResults)resultsData;

            newComparison.SomeFloatDiff = resultsDataTyped.SomeFloat - baselineDataTyped.SomeFloat; // Perform comparison logic (logic specific)
            return(newComparison);                                                                  // Return (mandatory)
        }
Пример #8
0
        // Logic for comparison process (mandatory)
        // TODO - Will use last run test model, need to get this for every call from Viewers?
        public override object ProcessComparison(ResultsBase baselineData, ResultsBase resultsData)
        {
            ComparisonData         newComparison     = new ComparisonData();                                                                              // Create new ComparisonData instance (mandatory)
            FrameComparisonResults baselineDataTyped = (FrameComparisonResults)baselineData;                                                              // Set baseline data to local type
            FrameComparisonResults resultsDataTyped  = (FrameComparisonResults)resultsData;                                                               // Set results data to local type

            newComparison.baselineTex    = Common.ConvertStringToTexture(resultsDataTyped.common.TestName + "_Reference", baselineDataTyped.resultFrame); // Convert baseline frame to Texture2D (logic specific)
            newComparison.resultsTex     = Common.ConvertStringToTexture(resultsDataTyped.common.TestName + "_Results", resultsDataTyped.resultFrame);    // Convert result frame to Texture2D (logic specific)
            newComparison.DiffPercentage = Common.GetTextureComparisonValue(newComparison.baselineTex, newComparison.resultsTex);                         // Calculate diff percentage (logic specific)
            return(newComparison);                                                                                                                        // Return (mandatory)
        }
Пример #9
0
        public List <DataTableField> GetSecondaryDataSourceFields()
        {
            List <DataTableField> fields = new List <DataTableField>();

            try
            {
                fields.AddRange(DataTableField.GetDataTableFields(ComparisonData?.GetDataColumns()));
            }
            catch { }

            return(fields);
        }
Пример #10
0
        public ActionResult GetDeviationFromAverage(int seconds, int result, int level)
        {
            var userId  = int.Parse(HttpContext.User.Identity.Name);
            var results = db.PatientsResults
                          .Where(p => p.UserId == userId && p.Level == level)
                          .OrderByDescending(p => p.Date)
                          .Take(10);

            /*var resultsAll = db.PatientsResults
             *  .Where(p => p.Level == level)
             *  .GroupBy(p => p.UserId)
             *  .Select(g => g
             *  .OrderByDescending(p => p.Date)
             *  .Take(10));*/

            db.PatientsResults.Add(new PatientsResult {
                Date = DateTime.Now, Level = level, Result = result, Time = seconds, UserId = userId
            });
            db.SaveChanges();
            var isReload = ChangeLevel(userId, level);

            var response = new ComparisonData();

            response.Percent = result;
            if (results.Count() != 0)
            {
                /*response.Percent = result * 50 / (int)results.Average(r => r.Result);
                 * if (response.Percent > 100) response.Percent = 100;*/

                var avgTime = results.Average(r => r.Time);
                response.Time = (int)(avgTime / seconds * 50);
                response.Time = response.Time > 100 ? 100 : response.Time;
            }

            /*if (resultsAll.Count() != 0)
             * {
             *  response.OtherPersent = result * 50 / (int)resultsAll
             *      .Select(g => g.Average(p => p.Result))
             *      .Average(r => r);
             *  if (response.OtherPersent > 100) response.OtherPersent = 100;
             *
             *  var avgTime = resultsAll
             *      .Select(g => g.Average(p => p.Time))
             *      .Average(s => s);
             *  response.OtherTime = (int)(avgTime / seconds * 50);
             *  response.OtherTime = response.OtherTime > 100 ? 100 : response.OtherTime;
             * }*/
            response.Reload = isReload;
            return(Json(response, JsonRequestBehavior.AllowGet));
        }
Пример #11
0
    public void FinishTraining(IEnumerable <Skeleton> recordedFrames)
    {
        technique.UserAttemptFrames = recordedFrames.Select(s => (SerializableSkeleton)s).ToArray();

        ComparisonData data = comparer.Evaluate(technique);

        //List<float> totalScores = data.FrameComparisons.Select(x => x.JointScores.Values.Min()).ToList();
        //float totalScore = totalScores.Average();
        float totalScore = data.TotalScore;

        technique.LastAttemptedDateTime = DateTime.Now;

        newRecordLabel.enabled = TechniqueFileHelper.RegisterAttempt(technique, totalScore);
        FinalScoreBar.UpdateScore(totalScore);
    }
        private void GoCompare(bool isBulk)
        {
            comparisonData = (ComparisonData)Session["ComparisonData"];

            // get our username from session, version from config file
            comparisonData.UserName = Context.User.Identity.Name;
            comparisonData.Version  = Session["FST_VERSION"].ToString();

            comparisonData.Theta = float.Parse(this.ddlTheta.SelectedItem.ToString());

            switch (this.ddlDegradedType.SelectedValue.ToString())
            {
            default:
            case "ND":
                comparisonData.Degradation = ComparisonData.enDegradation.None;
                break;

            case "MD":
                comparisonData.Degradation = ComparisonData.enDegradation.Mild;
                break;

            case "SD":
                comparisonData.Degradation = ComparisonData.enDegradation.Mild;
                break;
            }

            // get our names from the UI
            comparisonData.Comparison1Name = this.txtSuspPrfl1_Nm.Text.Trim();
            comparisonData.Comparison2Name = this.txtSuspPrfl2_Nm.Text.Trim();
            comparisonData.Comparison3Name = this.txtSuspPrfl3_Nm.Text.Trim();
            comparisonData.Comparison4Name = this.txtSuspPrfl4_Nm.Text.Trim();
            comparisonData.Known1Name      = this.txtKnownPrfl1_Nm.Text.Trim();
            comparisonData.Known2Name      = this.txtKnownPrfl2_Nm.Text.Trim();
            comparisonData.Known3Name      = this.txtKnownPrfl3_Nm.Text.Trim();
            comparisonData.Known4Name      = this.txtKnownPrfl4_Nm.Text.Trim();

            comparisonData.Bulk       = isBulk;
            comparisonData.LabKitID   = Guid.Parse(this.ddlLabKit.SelectedValue);
            comparisonData.LabKitName = this.ddlLabKit.SelectedItem.Text;   // this gets printed on the reports

            Session["LabKitID"]       = comparisonData.LabKitID;
            Session["ComparisonData"] = comparisonData;
            Session["Processed"]      = "Y"; // wtf is this?

            Response.Redirect("frmUpload.aspx");
        }
Пример #13
0
        /// <summary>
        /// Constructor takes the DataRow returned from the database and creates a case.
        /// </summary>
        /// <param name="dr">DataRow with case data</param>
        public ComparisonCase(DataRow dr)
        {
            bi = FSTService.Instance.bi;

            if (dr == null)
            {
                return;
            }

            // get our record ID, the Comparison Data, and set up some variables that we use to process the report
            comparisonData      = ComparisonData.Deserialize(dr["ComparisonXML"].ToString());
            recordID            = dr["RecordID"].ToString();
            strUserId           = comparisonData.UserName;
            strHp_Head          = comparisonData.HpHead;
            strHd_Head          = comparisonData.HdHead;
            strLab_Popultn_Type = comparisonData.BulkType == ComparisonData.enBulkType.FromFile ? "From File" : comparisonData.BulkType == ComparisonData.enBulkType.LabTypes ? "Lab Types" : "Population";
            strUserName         = comparisonData.UserName.Substring(comparisonData.UserName.LastIndexOf('\\') + 1);

            // spawn thread
            ThreadPool.QueueUserWorkItem(new WaitCallback(ComparisonWorkerThreadMain));
        }
Пример #14
0
    public ComparisonData Evaluate(IReadOnlyTechnique t)
    {
        List <ComparisonFrameData> comparisonFrameData = new List <ComparisonFrameData>();

        Skeleton[] technique   = t.ReadTechniqueFrames;
        Skeleton[] userAttempt = t.ReadUserAttemptFrames;

        int maxLength = technique.Length;

        if (technique.Length != userAttempt.Length)
        {
            Debug.Log($"tech: {technique.Length} | user: {userAttempt.Length}");
            maxLength = Mathf.Min(technique.Length, userAttempt.Length);
        }

        Parallel.For(0, maxLength, i => {
            ComparisonFrameData comparison;
            if (technique[i] == null || userAttempt[i] == null)
            {
                comparison = ComparisonFrameData.Zero;
            }
            else
            {
                comparison = Compare(technique[i], userAttempt[i]);
            }

            lock (comparisonFrameData) {
                comparisonFrameData.Add(comparison);
            }
        });

        ComparisonData data = new ComparisonData {
            FrameComparisons = comparisonFrameData.ToArray()
        };

        return(data);
    }
Пример #15
0
        private DataTable GetDataTable(CancellationToken cancel, IProgress <ExecutionProgress> progress, int recordLimit)
        {
            DataTable source     = SourceData.GetDataTable(cancel, progress);
            DataTable comparison = ComparisonData.GetDataTable(cancel, progress);
            DataTable output     = CreateOutputTable(source, comparison);

            progress?.Report(new ExecutionProgress(NotificationType.Information, Properties.Resources.ComparisonDataSourceComparingData));
            progress?.Report(new ExecutionProgress(ExecutionStage.Transform, output.Rows.Count, source.Rows.Count + comparison.Rows.Count));

            // combine all data tables
            output.Merge(source, false, MissingSchemaAction.Ignore);
            comparison.PrimaryKey = null;   // todo - unable to do this in child method?
            output.Merge(comparison, false, MissingSchemaAction.Ignore);

            foreach (DataRow row in output.Rows)
            {
                ComparisonResult comparisonResult = ComparisonResult.Equal;
                string           differenceFields = string.Empty;

                foreach (FieldMapping mapping in FieldMappings)
                {
                    if (!Equals(row[mapping.SourceField.ColumnName], row[mapping.ComparisonField.ColumnName]))    // todo - column name clashes, etc
                    {
                        comparisonResult  = ComparisonResult.Different;
                        differenceFields += differenceFields.Length > 0 ? string.Format(", {0}", mapping.SourceField.ColumnName) : mapping.SourceField.ColumnName;
                    }
                }

                row[RESULT_COLUMN_NAME]            = comparisonResult.ToString("g");
                row[DIFFERENCE_FIELDS_COLUMN_NAME] = !string.IsNullOrEmpty(differenceFields) ? differenceFields : default(string);
            }

            progress?.Report(new ExecutionProgress(ExecutionStage.Transform, output.Rows.Count, output.Rows.Count));

            return(GetFilteredOutputTable(output));
        }
        private void AddProgressToGrid(ComparisonData comparison, int index)
        {
            string[] keys     = new string[10];
            int      length   = keys.Length;
            int      location = comparison.UserPercentile;

            int[]    amounts    = comparison.PercentileAmounts;
            double[] values     = new double[length];
            int      sumAmounts = amounts.Sum();

            string[] midKeys = new string[11];
            for (int i = 0; i < length + 1; i++)
            {
                midKeys[i] = ((int)(comparison.Min + (comparison.Max - comparison.Min) * 0.1 * i)).ToString();
            }
            for (int i = 0; i < length; i++)
            {
                keys[i]   = midKeys[i] + "-" + midKeys[i + 1];
                values[i] = Math.Floor((double)amounts[i] / sumAmounts * 10 * 100) / 10;
            }
            double maxValue = values.Max();

            inner.RowDefinitions.Add(new RowDefinition());
            Grid grid = new Grid();

            InitGrid(grid, length * 1, 4);
            grid.SetValue(Grid.RowProperty, index);
            inner.Children.Add(grid);
            AddTitle(grid, index);
            for (int i = 0; i < length; i++)
            {
                int       row  = 1 * i + 1;
                TextBlock line = new TextBlock
                {
                    Text = "\n",
                };
                line.SetValue(Grid.RowProperty, row + 1);
                grid.Children.Add(line);
                TextBlock textBlock = new TextBlock
                {
                    Text                = keys[i],
                    FontSize            = 15,
                    TextWrapping        = TextWrapping.WrapWholeWords,
                    HorizontalAlignment = HorizontalAlignment.Center,
                    VerticalAlignment   = VerticalAlignment.Center,
                };
                textBlock.SetValue(Grid.RowProperty, row);
                textBlock.SetValue(Grid.ColumnProperty, 0);
                grid.Children.Add(textBlock);
                Rectangle rect = new Rectangle
                {
                    Height = 30,
                    Fill   = (i == location) ? ProgressComparePlayerColorBrush : ProgressCompareOthersColorBrush,
                    Width  = (double)values[i] / maxValue * CoachViewPlayerStart.width / 2,
                    HorizontalAlignment = HorizontalAlignment.Left,
                    VerticalAlignment   = VerticalAlignment.Center,
                    Stroke          = TextOnBackgroundColorBrush,
                    StrokeThickness = 1,
                };
                rect.SetValue(Grid.RowProperty, row);
                rect.SetValue(Grid.ColumnProperty, 1);
                rect.SetValue(Grid.ColumnSpanProperty, 2);
                grid.Children.Add(rect);
                TextBlock value = new TextBlock
                {
                    Text                = values[i].ToString() + "%",
                    FontSize            = 15,
                    TextWrapping        = TextWrapping.WrapWholeWords,
                    HorizontalAlignment = HorizontalAlignment.Center,
                    VerticalAlignment   = VerticalAlignment.Center,
                };
                value.SetValue(Grid.RowProperty, row);
                value.SetValue(Grid.ColumnProperty, 3);
                grid.Children.Add(value);
            }
        }
Пример #17
0
        protected void Page_Load(object sender, EventArgs e)
        {
            comparisonData = (ComparisonData)Session["ComparisonData"];
            if (comparisonData == null)
            {
                Response.Redirect("~/frmDefault.aspx");
            }

            if (IsPostBack)
            {
                // get our comparison configuration data from the page
                comparisonData.FB1        = this.txFBNo.Text = this.txFBNo.Text.Replace("\"", "''");
                comparisonData.Comparison = this.txSuspectNo.Text = this.txSuspectNo.Text.Replace("\"", "''");
                comparisonData.FB2        = this.txFB2No.Text = this.txFB2No.Text.Replace("\"", "''");
                comparisonData.Item       = this.txItemNo.Text = this.txItemNo.Text.Replace("\"", "''");

                comparisonData.DNAAmount = decimal.Parse(txDropout.Text == string.Empty ? "0" : txDropout.Text);
                comparisonData.Deducible = dlDeducible.Text == "Yes";
                comparisonData.BulkType  = dlTypes.Text == "From File" ? ComparisonData.enBulkType.FromFile : dlTypes.Text == "Lab Types" ? ComparisonData.enBulkType.LabTypes : ComparisonData.enBulkType.Population;
            }
            else
            {
                this.Title         = "FST - " + comparisonData.CompareMethodLongName;
                lblMenuLevel1.Text = comparisonData.CompareMethodLongName;

                // we only have the type selection for bulk searches
                lblTypes.Visible            = comparisonData.Bulk;
                dlTypes.Visible             = comparisonData.Bulk;
                pnlPopulationUpload.Visible = comparisonData.Bulk;
                // and our case data is only for invididual searches
                tblCaseData.Visible = !comparisonData.Bulk;

                // show only the relevant upload rows
                (tblFileUploads.FindControl("trComparison1") as TableRow).Visible = !comparisonData.Bulk;
                (tblFileUploads.FindControl("trComparison2") as TableRow).Visible = comparisonData.NumeratorProfiles.ComparisonCount >= 2;
                (tblFileUploads.FindControl("trComparison3") as TableRow).Visible = comparisonData.NumeratorProfiles.ComparisonCount >= 3;
                (tblFileUploads.FindControl("trComparison4") as TableRow).Visible = comparisonData.NumeratorProfiles.ComparisonCount >= 4;
                (tblFileUploads.FindControl("trKnown1") as TableRow).Visible      = comparisonData.NumeratorProfiles.KnownCount >= 1 || comparisonData.DenominatorProfiles.KnownCount >= 1;
                (tblFileUploads.FindControl("trKnown2") as TableRow).Visible      = comparisonData.NumeratorProfiles.KnownCount >= 2 || comparisonData.DenominatorProfiles.KnownCount >= 2;
                (tblFileUploads.FindControl("trKnown3") as TableRow).Visible      = comparisonData.NumeratorProfiles.KnownCount >= 3 || comparisonData.DenominatorProfiles.KnownCount >= 3;
                (tblFileUploads.FindControl("trKnown4") as TableRow).Visible      = comparisonData.NumeratorProfiles.KnownCount >= 4 || comparisonData.DenominatorProfiles.KnownCount >= 4;

                // if we're coming back here from the manual entry page then set these
                this.txFBNo.Text      = comparisonData.FB1;
                this.txSuspectNo.Text = comparisonData.Comparison;
                this.txFB2No.Text     = comparisonData.FB2;
                this.txItemNo.Text    = comparisonData.Item;

                // this is disabled for comparisons where both the numerator and the denominator have only one contributor
                if (1 == comparisonData.NumeratorProfiles.ComparisonCount + comparisonData.NumeratorProfiles.KnownCount + comparisonData.NumeratorProfiles.UnknownCount &&
                    1 == comparisonData.DenominatorProfiles.ComparisonCount + comparisonData.DenominatorProfiles.KnownCount + comparisonData.DenominatorProfiles.UnknownCount)
                {
                    this.dlDeducible.Text    = Convert.ToString("Yes");
                    this.dlDeducible.Enabled = false;
                }
                else
                {
                    this.dlDeducible.Text    = Convert.ToString("No");
                    this.dlDeducible.Enabled = true;
                }
            }
        }
Пример #18
0
        protected void Page_Load(object sender, EventArgs e)
        {
            comparisonData = (ComparisonData)Session["ComparisonData"];
            if (comparisonData == null)
            {
                Response.Redirect("~/frmDefault.aspx");
            }

            if (IsPostBack)
            {
                // get our comparison configuration data from the page
                // we replace double quotes with single quotes because we don't htmlencode our fields
                // read comments in Support/HtmlAttributeEncodingNot.cs for info on fixing this
                comparisonData.FB1        = this.txFBNo.Text = this.txFBNo.Text.Replace("\"", "''");
                comparisonData.Comparison = this.txSuspectNo.Text = this.txSuspectNo.Text.Replace("\"", "''");
                comparisonData.FB2        = this.txFB2No.Text = this.txFB2No.Text.Replace("\"", "''");
                comparisonData.Item       = this.txItemNo.Text = this.txItemNo.Text.Replace("\"", "''");

                comparisonData.DNAAmount = decimal.Parse(txDropout.Text == string.Empty ? "0" : txDropout.Text);
                comparisonData.Deducible = dlDeducible.Text == "Yes";
                comparisonData.BulkType  = dlTypes.Text == "From File" ? ComparisonData.enBulkType.FromFile : dlTypes.Text == "Lab Types" ? ComparisonData.enBulkType.LabTypes : ComparisonData.enBulkType.Population;
            }
            else
            {
                this.Title         = "FST - " + comparisonData.CompareMethodLongName;
                lblMenuLevel1.Text = comparisonData.CompareMethodLongName;
                lblMenuLevel2.Text = comparisonData.CompareMethodLongName + " (Edit)";

                // we only have the type selection for bulk searches
                lblTypes.Visible = comparisonData.Bulk;
                dlTypes.Visible  = comparisonData.Bulk;

                // our case data is only for invididual searches
                tblCaseData.Visible = !comparisonData.Bulk;

                // won't change but i wanted to keep the generation of the headers consistent
                lblEvidence.Text = GetAccordionHeader("Evidence:");

                eviAlleles.SetEvidenceDictionary(comparisonData.EvidenceAlleles.Count > 0 ? comparisonData.EvidenceAlleles : null);

                // we always have a primary comparison, unless this is a bulk search
                lblComparison1.Visible        = !comparisonData.Bulk;
                proComparison1Alleles.Visible = lblComparison1.Visible;
                lblComparison1.Text           = comparisonData.Comparison1Name != string.Empty ? GetAccordionHeader(string.Format("{0} (Comparison):", comparisonData.Comparison1Name)) : GetAccordionHeader(string.Format("Comparison{0}:", comparisonData.NumeratorProfiles.ComparisonCount > 1 ? " 1" : string.Empty));
                proComparison1Alleles.SetProfileDictionary(!comparisonData.Bulk && comparisonData.ComparisonAlleles.ContainsKey(1) ? comparisonData.ComparisonAlleles[1] : null);

                // we check to see which profiles we are using for this comaprison from the comparison scenario configuration data
                // the comparison profiles are only found in the numerator (so far), so we only check the count in the numerator
                // hopefully we can do this stuff below in a loop at some point so we can auto-generate comparison
                // scenarios from the configuration information alone
                lblComparison2.Visible        = comparisonData.NumeratorProfiles.ComparisonCount >= 2;
                proComparison2Alleles.Visible = lblComparison2.Visible;
                lblComparison2.Text           = comparisonData.Comparison2Name != string.Empty ? GetAccordionHeader(string.Format("{0} (Comparison):", comparisonData.Comparison2Name)) : GetAccordionHeader(string.Format("Comparison 2:"));
                proComparison2Alleles.SetProfileDictionary(comparisonData.NumeratorProfiles.ComparisonCount >= 2 && comparisonData.ComparisonAlleles.ContainsKey(2) ? comparisonData.ComparisonAlleles[2] : null);

                lblComparison3.Visible        = comparisonData.NumeratorProfiles.ComparisonCount >= 3;
                proComparison3Alleles.Visible = lblComparison3.Visible;
                lblComparison3.Text           = comparisonData.Comparison3Name != string.Empty ? GetAccordionHeader(string.Format("{0} (Comparison):", comparisonData.Comparison3Name)) : GetAccordionHeader(string.Format("Comparison 3:"));
                proComparison3Alleles.SetProfileDictionary(comparisonData.NumeratorProfiles.ComparisonCount >= 3 && comparisonData.ComparisonAlleles.ContainsKey(3) ? comparisonData.ComparisonAlleles[3] : null);

                lblComparison4.Visible        = comparisonData.NumeratorProfiles.ComparisonCount >= 4;
                proComparison4Alleles.Visible = lblComparison4.Visible;
                lblComparison4.Text           = comparisonData.Comparison4Name != string.Empty ? GetAccordionHeader(string.Format("{0} (Comparison):", comparisonData.Comparison4Name)) : GetAccordionHeader(string.Format("Comparison 4:"));
                proComparison4Alleles.SetProfileDictionary(comparisonData.NumeratorProfiles.ComparisonCount >= 4 && comparisonData.ComparisonAlleles.ContainsKey(4) ? comparisonData.ComparisonAlleles[4] : null);

                // for the known profiles we check the numerator and the denominator because there may be known profiles in the denominator
                // that do not appear in the numerator
                bool showKnown1 = comparisonData.NumeratorProfiles.KnownCount >= 1 || comparisonData.DenominatorProfiles.KnownCount >= 1;
                lblKnown1.Visible        = showKnown1;
                proKnown1Alleles.Visible = lblKnown1.Visible;
                lblKnown1.Text           = comparisonData.Known1Name != string.Empty ? GetAccordionHeader(string.Format("{0} (Known):", comparisonData.Known1Name)) : GetAccordionHeader(string.Format("Known{0}:", showKnown1 ? " 1" : string.Empty));
                proKnown1Alleles.SetProfileDictionary(showKnown1 && comparisonData.KnownsAlleles.ContainsKey(1) ? comparisonData.KnownsAlleles[1] : null);

                bool showKnown2 = comparisonData.NumeratorProfiles.KnownCount >= 2 || comparisonData.DenominatorProfiles.KnownCount >= 2;
                lblKnown2.Visible        = showKnown2;
                proKnown2Alleles.Visible = lblKnown2.Visible;
                lblKnown2.Text           = comparisonData.Known2Name != string.Empty ? GetAccordionHeader(string.Format("{0} (Known):", comparisonData.Known2Name)) : GetAccordionHeader(string.Format("Known 2:"));
                proKnown2Alleles.SetProfileDictionary(showKnown2 && comparisonData.KnownsAlleles.ContainsKey(2) ? comparisonData.KnownsAlleles[2] : null);

                bool showKnown3 = comparisonData.NumeratorProfiles.KnownCount >= 3 || comparisonData.DenominatorProfiles.KnownCount >= 3;
                lblKnown3.Visible        = showKnown3;
                proKnown3Alleles.Visible = lblKnown3.Visible;
                lblKnown3.Text           = comparisonData.Known3Name != string.Empty ? GetAccordionHeader(string.Format("{0} (Known):", comparisonData.Known3Name)) : GetAccordionHeader(string.Format("Known 3:"));
                proKnown3Alleles.SetProfileDictionary(showKnown3 && comparisonData.KnownsAlleles.ContainsKey(3) ? comparisonData.KnownsAlleles[3] : null);

                bool showKnown4 = comparisonData.NumeratorProfiles.KnownCount >= 4 || comparisonData.DenominatorProfiles.KnownCount >= 4;
                lblKnown4.Visible        = showKnown4;
                proKnown4Alleles.Visible = lblKnown4.Visible;
                lblKnown4.Text           = comparisonData.Known4Name != string.Empty ? GetAccordionHeader(string.Format("{0} (Known):", comparisonData.Known4Name)) : GetAccordionHeader(string.Format("Known 4:"));
                proKnown4Alleles.SetProfileDictionary(showKnown4 && comparisonData.KnownsAlleles.ContainsKey(4) ? comparisonData.KnownsAlleles[4] : null);

                // if we're coming from the file upload page, we want to set these
                // we replace double quotes with single quotes because we don't htmlencode our fields
                // read comments in Support/HtmlAttributeEncodingNot.cs for info on fixing this
                this.txFBNo.Text      = (comparisonData.FB1 ?? string.Empty).Replace("\"", "''");
                this.txSuspectNo.Text = (comparisonData.Comparison ?? string.Empty).Replace("\"", "''");
                this.txFB2No.Text     = (comparisonData.FB2 ?? string.Empty).Replace("\"", "''");
                this.txItemNo.Text    = (comparisonData.Item ?? string.Empty).Replace("\"", "''");

                txDropout.Text        = comparisonData.DNAAmount.ToString();
                dlTypes.SelectedValue = comparisonData.BulkType == ComparisonData.enBulkType.FromFile ? "From File" : comparisonData.BulkType == ComparisonData.enBulkType.LabTypes ? "Lab Types" : "Population";

                // this is disabled for comparisons where both the numerator and the denominator have only one contributor
                if (1 == comparisonData.NumeratorProfiles.ComparisonCount + comparisonData.NumeratorProfiles.KnownCount + comparisonData.NumeratorProfiles.UnknownCount &&
                    1 == comparisonData.DenominatorProfiles.ComparisonCount + comparisonData.DenominatorProfiles.KnownCount + comparisonData.DenominatorProfiles.UnknownCount)
                {
                    this.dlDeducible.Text    = Convert.ToString("Yes");
                    this.dlDeducible.Enabled = false;
                }
                else
                {
                    dlDeducible.SelectedValue = comparisonData.Deducible ? "Yes" : "No";
                    this.dlDeducible.Enabled  = true;
                }
            }
        }
Пример #19
0
        /// <summary>
        /// This method is called from either the UI or the frmTestCenter page, and uses the ComparisonData class and potentially the TestCenter class
        /// to run a comparison. If this is an individual comparison that is being run on this page, this method runs the comparison here. Othewrise,
        /// the ProcessInBackgroundService() method is called to handle the case in the Windows Service component.
        /// </summary>
        /// <param name="sender">The button that was clicked, or the frmTestCenter class.</param>
        /// <param name="e"></param>
        public void btnCompare_Click(object sender, EventArgs e)
        {
            // this is used to get information about whether this is being called from this page or from the tesing center, and the associated data if it's from the testing center
            bool isTest = sender is FST.Web.Admin.frmTestCenter;

            FST.Web.Admin.frmTestCenter testPage = isTest ? sender as FST.Web.Admin.frmTestCenter : null;
            if (isTest)
            {
                comparisonData = testPage.comparisonData;
            }

            comparisonData.ReportDate = DateTime.Now;

            // validate form
            if (!isTest && !FieldChecks())
            {
                return;
            }

            // if we're not running a test (and we don't already have data), we get the data from the controls on the page
            if (!isTest)
            {
                // get the evidence from the eviAlleles Evidence control via the GetEvidenceDictionary() method. check it for details
                comparisonData.EvidenceAlleles = eviAlleles.GetEvidenceDictionary();

                // we only get comaprison data if we're not doing a bulk, otherwise the comparison data comes from an alternate source.
                // this source is the Knowns table in DB where files using the
                if (!comparisonData.Bulk)
                {
                    comparisonData.ComparisonAlleles.Clear();

                    // we check for comparison profiles in the denominator too. it was easier to c/p the code, and it's ready in case comparisons ever make it into the denominator
                    // the data comes from the proComparison1Alleles (or whichever) Profile control's GetProfileDictionary() method. check it for details
                    // we do the same for the known profiles below
                    if (comparisonData.NumeratorProfiles.ComparisonCount >= 1 || comparisonData.DenominatorProfiles.ComparisonCount >= 1)
                    {
                        comparisonData.ComparisonAlleles.Add(1, proComparison1Alleles.GetProfileDictionary());
                    }

                    if (comparisonData.NumeratorProfiles.ComparisonCount >= 2 || comparisonData.DenominatorProfiles.ComparisonCount >= 2)
                    {
                        comparisonData.ComparisonAlleles.Add(2, proComparison2Alleles.GetProfileDictionary());
                    }

                    if (comparisonData.NumeratorProfiles.ComparisonCount >= 3 || comparisonData.DenominatorProfiles.ComparisonCount >= 3)
                    {
                        comparisonData.ComparisonAlleles.Add(3, proComparison3Alleles.GetProfileDictionary());
                    }

                    if (comparisonData.NumeratorProfiles.ComparisonCount >= 4 || comparisonData.DenominatorProfiles.ComparisonCount >= 4)
                    {
                        comparisonData.ComparisonAlleles.Add(4, proComparison4Alleles.GetProfileDictionary());
                    }
                }

                comparisonData.KnownsAlleles.Clear();

                if (comparisonData.NumeratorProfiles.KnownCount >= 1 || comparisonData.DenominatorProfiles.KnownCount >= 1)
                {
                    comparisonData.KnownsAlleles.Add(1, proKnown1Alleles.GetProfileDictionary());
                }

                if (comparisonData.NumeratorProfiles.KnownCount >= 2 || comparisonData.DenominatorProfiles.KnownCount >= 2)
                {
                    comparisonData.KnownsAlleles.Add(2, proKnown2Alleles.GetProfileDictionary());
                }

                if (comparisonData.NumeratorProfiles.KnownCount >= 3 || comparisonData.DenominatorProfiles.KnownCount >= 3)
                {
                    comparisonData.KnownsAlleles.Add(3, proKnown3Alleles.GetProfileDictionary());
                }

                if (comparisonData.NumeratorProfiles.KnownCount >= 4 || comparisonData.DenominatorProfiles.KnownCount >= 4)
                {
                    comparisonData.KnownsAlleles.Add(4, proKnown4Alleles.GetProfileDictionary());
                }
            }

            // go to the background service if we're doing a bulk or an individual search that runs long
            if (comparisonData.Bulk || comparisonData.RunIndividualOnService)
            {
                ProcessInBackgroundService(testPage);
            }
            else // otherwise we process here
            {
                if (!isTest)
                {
                    Log.Info(Context.User.Identity.Name, Request.FilePath, Session, "Comparison Start", comparisonData.HpHead + "/" + comparisonData.HdHead);
                }

                // instantiate the comparison class with our comparison data
                FST.Common.Comparison comparison = new Comparison(comparisonData);

                // if we're using DEBUGOUT functionality, set up the debugData dictionary and the username. the debugOut functionality runs if the debugData dictionary != null
                if ("true" == ConfigurationManager.AppSettings.Get("DEBUGOUT"))
                {
                    comparison.debugData = new Dictionary <string, Comparison.DebugData>();
                    comparison.UserName  = User.Identity.Name;
                }

                Dictionary <string, float> result = comparison.DoCompare();

                if (!isTest)
                {
                    Log.Info(Context.User.Identity.Name, Request.FilePath, Session, "Comparison End", comparisonData.HpHead + "/" + comparisonData.HdHead);
                }

                // if we're not testing we print a PDF report, otherwise we write the test results to the DB
                if (!isTest)
                {
                    Print();
                }
                else
                {
                    bi.WriteTestResults(
                        testPage.subTestID.ToString(),
                        testPage.comparisonID.ToString(),
                        result["Asian"].ToString(),
                        result["Black"].ToString(),
                        result["Caucasian"].ToString(),
                        result["Hispanic"].ToString()
                        );
                }
            }
        }
        protected void btnRunTestNew_Click(object sender, EventArgs e)
        {
            // initialize the page sessions (needs to be done so the pages have a session handle in the subthread)
            FST.Web.frmManualEntry page = new frmManualEntry();
            var    s       = page.Session;
            string version = ConfigurationSettings.AppSettings.Get("FST_VERSION");

            ThreadPool.QueueUserWorkItem(new WaitCallback(delegate
            {
                testName        = txtTestName.Text;
                testIndividual  = chkIndividual.Checked;
                testBulk        = chkBulk.Checked;
                testManualEntry = rbManualEntry.Checked;
                deducible       = rbDeducible.Checked;
                LabKitID        = bi.GetLabKits().Rows[0]["FieldValue"].ToString();

                foreach (ListItem liComparisonType in chkComparisonTypes.Items)
                {
                    if (liComparisonType.Selected)
                    {
                        comparisonTypes.Add(Convert.ToInt32(liComparisonType.Value));
                    }
                }

                comparisonProfiles = bi.GetProfilesFromFile(this.fuComparisonProfiles, Server.MapPath("~/Admin/Upload/"), Guid.Parse(LabKitID));
                known1Profile      = bi.GetProfilesFromFile(this.fuKnown1Profile, Server.MapPath("~/Admin/Upload/"), Guid.Parse(LabKitID));
                known2Profile      = bi.GetProfilesFromFile(this.fuKnown2Profile, Server.MapPath("~/Admin/Upload/"), Guid.Parse(LabKitID));
                known3Profile      = bi.GetProfilesFromFile(this.fuKnown3Profile, Server.MapPath("~/Admin/Upload/"), Guid.Parse(LabKitID));
                evidence           = GetEvidenceFromFile(this.fuEvidence, Server.MapPath("~/Admin/Upload/"));
                saveTableEvidence  = GetSaveTableEvidence(evidence);

                Known2Alleles = new Dictionary <string, Dictionary <int, string> >();

                EvidenceAlleles = new Dictionary <string, Dictionary <int, string> >();
                ReadEvidenceAllelesNew(evidence, EvidenceAlleles);

                testID = Guid.NewGuid();

                foreach (int comparisonType in comparisonTypes)
                {
                    Session["CompareMethod"] = comparisonType.ToString();

                    if (testIndividual)
                    {
                        foreach (DataRow dr in comparisonProfiles.Rows)
                        {
                            dnaEvidenceAmount = 111;
                            subTestID         = Guid.NewGuid();
                            comparisonID      = dr["ID"].ToString();

                            ComparisonData comparisonData  = new ComparisonData(comparisonType);
                            comparisonData.Bulk            = false;
                            comparisonData.Comparison      = "\tes\t";
                            comparisonData.Deducible       = deducible;
                            comparisonData.Degradation     = FST.Common.ComparisonData.enDegradation.None;
                            comparisonData.DNAAmount       = dnaEvidenceAmount = 111;
                            comparisonData.EvidenceAlleles = EvidenceAlleles;
                            comparisonData.FB1             = subTestID.ToString();
                            comparisonData.Item            = comparisonID;
                            comparisonData.LabKitID        = Guid.Parse(LabKitID);
                            comparisonData.LabKitName      = "Indentifiler";
                            comparisonData.Processed       = 'N';
                            comparisonData.Theta           = 0.03f;
                            comparisonData.UserName        = User.Identity.Name;
                            comparisonData.Version         = version;

                            ReadComparisonNew(dr, comparisonData.ComparisonAlleles, 1);

                            if (comparisonData.NumeratorProfiles.KnownCount >= 1 || comparisonData.DenominatorProfiles.KnownCount >= 1)
                            {
                                ReadComparisonNew(known1Profile.Rows[0], comparisonData.KnownsAlleles, 1);
                            }
                            if (comparisonData.NumeratorProfiles.KnownCount >= 2 || comparisonData.DenominatorProfiles.KnownCount >= 2)
                            {
                                ReadComparisonNew(known2Profile.Rows[0], comparisonData.KnownsAlleles, 2);
                            }
                            if (comparisonData.NumeratorProfiles.KnownCount >= 3 || comparisonData.DenominatorProfiles.KnownCount >= 3)
                            {
                                ReadComparisonNew(known3Profile.Rows[0], comparisonData.KnownsAlleles, 3);
                            }

                            saveTableComparison = GetSaveTable(dr, "Suspect");

                            this.comparisonData = comparisonData;

                            WriteTest(testID, subTestID, testName, comparisonID, comparisonType, true, false, LabKitID, dnaEvidenceAmount);

                            page.btnCompare_Click(this, new EventArgs());

                            if (saveTableComparison != null && saveTableComparison.Columns.Contains("guid"))
                            {
                                saveTableComparison.Columns.Remove("guid");
                            }
                            if (comparisonProfiles.Columns.Contains("guid"))
                            {
                                comparisonProfiles.Columns.Remove("guid");
                            }
                            lastUpdated = DateTime.Now;
                        }
                    }
                    if (testBulk)
                    {
                        dnaEvidenceAmount = 111;
                        subTestID         = Guid.NewGuid();

                        ComparisonData comparisonData  = new ComparisonData(comparisonType);
                        comparisonData.Bulk            = true;
                        comparisonData.Comparison      = "\tes\t";
                        comparisonData.Deducible       = deducible;
                        comparisonData.Degradation     = FST.Common.ComparisonData.enDegradation.None;
                        comparisonData.DNAAmount       = dnaEvidenceAmount = 111;
                        comparisonData.EvidenceAlleles = EvidenceAlleles;
                        comparisonData.FB1             = subTestID.ToString();
                        comparisonData.LabKitID        = Guid.Parse(LabKitID);
                        comparisonData.LabKitName      = "Indentifiler";
                        comparisonData.Processed       = 'N';
                        comparisonData.Theta           = 0.03f;
                        comparisonData.UserName        = User.Identity.Name;
                        comparisonData.Version         = version;

                        if (comparisonData.NumeratorProfiles.KnownCount >= 1 || comparisonData.DenominatorProfiles.KnownCount >= 1)
                        {
                            ReadComparisonNew(known1Profile.Rows[0], comparisonData.KnownsAlleles, 1);
                        }
                        if (comparisonData.NumeratorProfiles.KnownCount >= 2 || comparisonData.DenominatorProfiles.KnownCount >= 2)
                        {
                            ReadComparisonNew(known2Profile.Rows[0], comparisonData.KnownsAlleles, 2);
                        }
                        if (comparisonData.NumeratorProfiles.KnownCount >= 3 || comparisonData.DenominatorProfiles.KnownCount >= 3)
                        {
                            ReadComparisonNew(known3Profile.Rows[0], comparisonData.KnownsAlleles, 3);
                        }

                        foreach (DataRow dr in comparisonProfiles.Rows)
                        {
                            WriteTest(testID, subTestID, testName, dr["ID"].ToString(), comparisonType, true, true, LabKitID, dnaEvidenceAmount);
                        }

                        this.comparisonData = comparisonData;

                        page.btnCompare_Click(this, new EventArgs());

                        if (saveTableComparison != null && saveTableComparison.Columns.Contains("guid"))
                        {
                            saveTableComparison.Columns.Remove("guid");
                        }
                        if (comparisonProfiles.Columns.Contains("guid"))
                        {
                            comparisonProfiles.Columns.Remove("guid");
                        }
                        lastUpdated = DateTime.Now;
                    }
                }
            }));
        }